{"id":2452,"date":"2026-05-02T14:47:46","date_gmt":"2026-05-02T06:47:46","guid":{"rendered":"https:\/\/randengzhe.cn\/wordpress\/?p=2452"},"modified":"2026-05-02T17:12:41","modified_gmt":"2026-05-02T09:12:41","slug":"day3-sfml%e7%9b%b4%e8%a7%92%e5%9d%90%e6%a0%87%e7%b3%bb%e7%bd%91%e6%a0%bc%e5%87%bd%e6%95%b0sin%e5%9b%be%e5%83%8f","status":"publish","type":"post","link":"https:\/\/randengzhe.cn\/wordpress\/2026\/05\/02\/day3-sfml%e7%9b%b4%e8%a7%92%e5%9d%90%e6%a0%87%e7%b3%bb%e7%bd%91%e6%a0%bc%e5%87%bd%e6%95%b0sin%e5%9b%be%e5%83%8f\/","title":{"rendered":"Day2 SFML+\u76f4\u89d2\u5750\u6807\u7cfb+\u7f51\u683c+\u51fd\u6570sin\u56fe\u50cf"},"content":{"rendered":"\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\r\n<div class=\"ez-toc-title-container\">\r\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\r\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\r\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/randengzhe.cn\/wordpress\/2026\/05\/02\/day3-sfml%e7%9b%b4%e8%a7%92%e5%9d%90%e6%a0%87%e7%b3%bb%e7%bd%91%e6%a0%bc%e5%87%bd%e6%95%b0sin%e5%9b%be%e5%83%8f\/#Day2_%E7%9B%AE%E6%A0%87\" >Day2 \u76ee\u6807<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/randengzhe.cn\/wordpress\/2026\/05\/02\/day3-sfml%e7%9b%b4%e8%a7%92%e5%9d%90%e6%a0%87%e7%b3%bb%e7%bd%91%e6%a0%bc%e5%87%bd%e6%95%b0sin%e5%9b%be%e5%83%8f\/#%E7%9B%AE%E6%A0%87%E9%A2%84%E8%A7%88\" >\u76ee\u6807\u9884\u89c8<\/a><ul class='ez-toc-list-level-2' ><li class='ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/randengzhe.cn\/wordpress\/2026\/05\/02\/day3-sfml%e7%9b%b4%e8%a7%92%e5%9d%90%e6%a0%87%e7%b3%bb%e7%bd%91%e6%a0%bc%e5%87%bd%e6%95%b0sin%e5%9b%be%e5%83%8f\/#Makefile_%E5%AF%B9%E5%BA%94%E5%8A%A0%E4%B8%80%E6%9D%A1\" >Makefile \u5bf9\u5e94\u52a0\u4e00\u6761<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/randengzhe.cn\/wordpress\/2026\/05\/02\/day3-sfml%e7%9b%b4%e8%a7%92%e5%9d%90%e6%a0%87%e7%b3%bb%e7%bd%91%e6%a0%bc%e5%87%bd%e6%95%b0sin%e5%9b%be%e5%83%8f\/#%E4%BD%A0%E4%BB%8A%E5%A4%A9%E8%A6%81%E7%90%86%E8%A7%A3%E7%9A%84_3_%E4%B8%AA%E5%85%B3%E9%94%AE%E7%82%B9\" >\u4f60\u4eca\u5929\u8981\u7406\u89e3\u7684 3 \u4e2a\u5173\u952e\u70b9<\/a><\/li><\/ul><\/nav><\/div>\r\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Day2_%E7%9B%AE%E6%A0%87\"><\/span>Day2 \u76ee\u6807<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u753b\u6807\u51c6<strong>\u76f4\u89d2\u5750\u6807\u7cfb<\/strong>\uff08X \u8f74\u3001Y \u8f74\uff09<\/li>\n\n\n\n<li>\u753b<strong>\u7f51\u683c<\/strong>\uff08\u65b9\u4fbf\u770b\u51fd\u6570\u56fe\u50cf\uff09<\/li>\n\n\n\n<li>\u753b\u51fa\u7b2c\u4e00\u6761\u6570\u5b66\u66f2\u7ebf\uff1a<strong>y = sin(x)<\/strong><\/li>\n\n\n\n<li>\u7406\u89e3\u300c\u6570\u5b66\u5750\u6807 \u2192 \u5c4f\u5e55\u5750\u6807\u300d\u7684\u8f6c\u6362<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E7%9B%AE%E6%A0%87%E9%A2%84%E8%A7%88\"><\/span>\u76ee\u6807\u9884\u89c8<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"820\" height=\"655\" src=\"https:\/\/randengzhe.cn\/wordpress\/wp-content\/uploads\/2026\/05\/day2.png\" alt=\"\" class=\"wp-image-2500\" srcset=\"https:\/\/randengzhe.cn\/wordpress\/wp-content\/uploads\/2026\/05\/day2.png 820w, https:\/\/randengzhe.cn\/wordpress\/wp-content\/uploads\/2026\/05\/day2-300x240.png 300w, https:\/\/randengzhe.cn\/wordpress\/wp-content\/uploads\/2026\/05\/day2-768x613.png 768w, https:\/\/randengzhe.cn\/wordpress\/wp-content\/uploads\/2026\/05\/day2-376x300.png 376w\" sizes=\"auto, (max-width: 820px) 100vw, 820px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u76f4\u63a5\u7ed9\u4f60\u5b8c\u6574\u53ef\u7f16\u8bd1\u4ee3\u7801\uff1a<br>\u6587\u4ef6\u540d\uff1a<code>day2_graph.cpp<\/code><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;SFML\/Graphics.hpp>\n#include &lt;cmath>\n\nusing namespace std;\n\nint main()\n{\n    \/\/ \u7a97\u53e3\uff1a800\u00d7600\uff0c\u4e2d\u6587\u6807\u9898\n    sf::RenderWindow window(sf::VideoMode(800, 600), L\"SFML Day2 \u00b7 \u51fd\u6570\u56fe\u50cf\");\n\n    \/\/ \u5750\u6807\u7cfb\u4e2d\u5fc3\u653e\u5728\u5c4f\u5e55\u4e2d\u5fc3\n    const float cx = 400;\n    const float cy = 300;\n\n    \/\/ \u5750\u6807\u8f74\u989c\u8272\n    sf::Color axis_color(120, 220, 255);\n    \/\/ \u7f51\u683c\u989c\u8272\n    sf::Color grid_color(60, 60, 80);\n    \/\/ \u66f2\u7ebf\u989c\u8272\n    sf::Color sin_color(255, 80, 80);\n\n    while (window.isOpen())\n    {\n        sf::Event event;\n        while (window.pollEvent(event))\n        {\n            if (event.type == sf::Event::Closed)\n                window.close();\n        }\n\n        \/\/ \u80cc\u666f\n        window.clear(sf::Color(20, 20, 30));\n\n        \/\/ ====================== \u753b\u7f51\u683c ======================\n        for (int x = 0; x &lt; 800; x += 40)\n        {\n            sf::Vertex line&#91;] = {\n                {{(float)x, 0}, grid_color},\n                {{(float)x, 600}, grid_color}\n            };\n            window.draw(line, 2, sf::Lines);\n        }\n        for (int y = 0; y &lt; 600; y += 40)\n        {\n            sf::Vertex line&#91;] = {\n                {{0, (float)y}, grid_color},\n                {{800, (float)y}, grid_color}\n            };\n            window.draw(line, 2, sf::Lines);\n        }\n\n        \/\/ ====================== \u753b\u5750\u6807\u8f74 ======================\n        sf::Vertex x_axis&#91;] = {\n            {{0, cy}, axis_color},\n            {{800, cy}, axis_color}\n        };\n        sf::Vertex y_axis&#91;] = {\n            {{cx, 0}, axis_color},\n            {{cx, 600}, axis_color}\n        };\n        window.draw(x_axis, 2, sf::Lines);\n        window.draw(y_axis, 2, sf::Lines);\n\n        \/\/ ====================== \u753b y = sin(x) ======================\n        for (int sx = -350; sx &lt; 350; ++sx)\n        {\n            \/\/ \u6570\u5b66 x\n            float x = sx \/ 50.0f;\n            \/\/ \u6570\u5b66 y = sin(x)\n            float y = sin(x);\n\n            \/\/ \u653e\u5927 100 \u500d\u65b9\u4fbf\u89c2\u5bdf\n            y *= 100;\n\n            \/\/ \u8f6c\u6362\u5230\u5c4f\u5e55\u5750\u6807\n            float px = cx + sx;\n            float py = cy - y;\n\n            \/\/ \u753b\u70b9\n            sf::CircleShape dot(1.5f);\n            dot.setPosition(px, py);\n            dot.setFillColor(sin_color);\n            window.draw(dot);\n        }\n\n        window.display();\n    }\n\n    return 0;\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Makefile_%E5%AF%B9%E5%BA%94%E5%8A%A0%E4%B8%80%E6%9D%A1\"><\/span>Makefile \u5bf9\u5e94\u52a0\u4e00\u6761<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>day2: day2_graph.o\n    $(CXX) $(CXXFLAGS) -o day2 day2_graph.o $(LIBS)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u7f16\u8bd1\u8fd0\u884c\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>make day2\n.\/day2<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E4%BD%A0%E4%BB%8A%E5%A4%A9%E8%A6%81%E7%90%86%E8%A7%A3%E7%9A%84_3_%E4%B8%AA%E5%85%B3%E9%94%AE%E7%82%B9\"><\/span>\u4f60\u4eca\u5929\u8981\u7406\u89e3\u7684 3 \u4e2a\u5173\u952e\u70b9<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<ol class=\"wp-block-list\">\n<li>SFML \u539f\u70b9\u5728<strong>\u5de6\u4e0a\u89d2<\/strong>\uff0c\u6570\u5b66\u539f\u70b9\u5728<strong>\u4e2d\u5fc3<\/strong>\uff0c\u6240\u4ee5\u8981 <code>cx=400, cy=300<\/code><\/li>\n\n\n\n<li>\u5c4f\u5e55 y \u5411\u4e0b\uff0c\u6570\u5b66 y \u5411\u4e0a \u2192 \u6240\u4ee5\u7528 <code>cy - y<\/code><\/li>\n\n\n\n<li>\u51fd\u6570\u56fe\u50cf\u5c31\u662f\uff1a<strong>\u5faa\u73af\u7b97\u70b9 \u2192 \u753b\u70b9 \u2192 \u8fde\u6210\u66f2\u7ebf<\/strong><\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd0\u884c\u6210\u529f\u540e\u56de\u590d\u6211\uff1a<br><strong>Day2 \u6b63\u5f26\u51fd\u6570\u753b\u51fa\u6765\u4e86<\/strong><br>\u6211\u5c31\u5e26\u4f60\u7ee7\u7eed Day3\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u652f\u6301<strong>\u591a\u4e2a\u51fd\u6570<\/strong>\uff08sin\u3001cos\u3001\u629b\u7269\u7ebf\uff09<\/li>\n\n\n\n<li>\u952e\u76d8\u63a7\u5236<strong>\u7f29\u653e\u3001\u5e73\u79fb<\/strong><\/li>\n\n\n\n<li>\u9f20\u6807\u663e\u793a\u5750\u6807<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Day2 \u76ee\u6807 \u76ee\u6807\u9884\u89c8 \u76f4\u63a5\u7ed9\u4f60\u5b8c\u6574\u53ef\u7f16\u8bd1\u4ee3\u7801\uff1a &hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_crdt_document":"{\"document\":\"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YEAhAGBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQBgQCEAIEAhAGBAIQAgQCEAIEAhACBAIQAgQCEAYEAhACBAIQBgQCEAIEAhAKBAIQAgQCEAIEAhACBAIQAgQCEAYEAhAKBAIQCgQCEAoEAhACBAIQBgQCEAIEAhACBAIQCgQCEAIEAhACBAIQAgQCEAIEAhACBAIQMgQCEAIEAhACBAIQBgQCEAoEAhACBAIQAgQCEBoEAhAOBAIQBgQCECIEAhACBAIQAgQCEBoEAhAOBAIQCgQCECIEAhAKBAIQAgQCEAYEAhAGBAIQAgQCEAIEAhACBAIQCgQCEAIEAhACBAIQAgQCEAIEAhAGBAIQAgQCEAYEAhACBAIQAgQCEAIEAhACBAIQAgQCEAYEAhAGBAIQAgQCEAYEAhAOBAIQDgQCEAIEAhASBAIQBgQCEAYEAhACBAIQAgQCEAYEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhAGBAIQAgQCEAYEAhACBAIQAgQCEAIEAhACBAIQBgQCEAIEAhACBAIQAgQCEAIEAhAGBAIQCgQCEAIEAhACBAIQAgQCEAYEAhACBAIQBgQCEAoEAhAGBAIQAgQCEAIEAhAKBAIQAgQCEAYEAhAKBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQBgQCEAIEAhASBAIQFgQCEAIEAhAKBAIQAgQCEAIEAhACBAIQAgQCEBYEAhACBAIQBgQCEA4EAhACBAIQFgQCEAIEAhAGBAIQCgQCEAIEAhAGBAIQAgQCECIEAhAKBAIQBgQCEA4EAhACBAIQBgQCECIEAhAGBAIQAgQCEAIEAhACBAIQCgQCEAIEAhAOBAIQBgQCEAoEAhACBAIQAgQCEAYEAhACBAIQAgQCEAIEAhAGBAIQAgQCEA4EAhAGBAIQCAADBAAAAxwAhACgBJwEEACgAJwDHACEAKAEnACgBJwAHACEAKAEnAQQAJwCHACEAKAEnAQQAJwCHACEAKAEnAQQAJwCHACEAKAEnAQQAJwDHACEAKAEnAQQAKAAnAMcAIQAoAScBBACElQEnAMcAIQAoAScBBAAoACcAxwAhACgBJwEEAIQBJwDHACEAKAEnAQQAKAAnAMcAIQAoAScBBACEAScAxwAhACgBJwAoAScAxwAhACgBJwEEACgAJwDHACEAKAEnACgBJwAHACEAKAEnAQQAJwCHACEAKAEnAQQAJwCHACEAKAEnAQQAJwDHACEAKAEnACgBJwDHACEAKAEnAQQAKAAnAMcAIQAoAScAKAEnAAcAIQAoAScBBAAnAIcAIQAoAScBBAAnAIcAIQAoAScBBAAnAMECxADBCsQ6wQDEAcEAxLIChAGBAIQAgQCEAIEAhACoAigAIQGBAAAAwQAAAKEAxwAhACgAIQAnASEAJwDEAMEAxADBAMQAwQDEAMEAxAkEAMcAIQAoACEAJwAhAScAoQCoACgAJwAoACEAKALEAcEAxADBAMQHwQDEAMEAxAHBAMQAwQDEAKEAqAAhAKgAxAchAKgAxEyoBMQDIQDEAqG4YMtXc3RhdGV2ZXJzaW9ub3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50c3RhdGV2ZXJzaW9uZG9jdW1lbnRkYXRlZG9jdW1lbnRzdGF0dXNkb2N1bWVudHRpdGxlZG9jdW1lbnRjb250ZW50ZG9jdW1lbnRleGNlcnB0ZG9jdW1lbnRhdXRob3Jkb2N1bWVudGZlYXR1cmVkX21lZGlhZG9jdW1lbnRjb21tZW50X3N0YXR1c2RvY3VtZW50cGluZ19zdGF0dXNkb2N1bWVudHN0aWNreWRvY3VtZW50dGVtcGxhdGVkb2N1bWVudGZvcm1hdGRvY3VtZW50bWV0YV9qZXRwYWNrX21lbWJlcnNoaXBzX2NvbnRhaW5zX3BhaWRfY29udGVudGZvb3Rub3Rlc2RvY3VtZW50Y2F0ZWdvcmllc2RvY3VtZW50dGFnc2RvY3VtZW50YmxvY2tzPCEtLSB3cDplYWRpbmcgeyJsZXZlbCI6MX0gLS0+CjxoMSBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+PC9oMT4KPCEtLSAvd3A6aGVhZGluZyAtLT4KCjwhLS0gd3A6IC0tPgo8dSBhc3BjZSBzdDwvPgo8IS0tIC93cDogLS0+Cgo8IS0tIHdwOiAtLT4KPD48cm9uc3Ryb25zdGl0ID4gbHQgPD5zdG8gPSAvPC8+CjwhLS0gL3dwOiAtLT4KCjwhLS0gd3A6IC0tPgo8PuaVsOWtpuWdkOaghyAgPD4gbHQgPC8+CjwhLS0gL3dwOiAtLT4KCjwhLS0gd3A6YWcgLS0+CjxwPjxicj5jb2VheXI8ZT48L3A+CjwhLS0gL3dwOnBhcmFncmFwaCAtLT4KCjwhLS0gd3A6cHJhcmFwaCAKcGludCBtYWluKCl7c2Y6OlJlbmRlcldpbmRvdyB3aW5kb3coc2Y6OlZpZGVvTW9kZSgsICksIEwiU0ZNTCBEYXkg5Ye95pWw5Zu+Iik7CiAvIAogICBjc2xvYyAKc2ZsbyAwMDsKc2Y6OkNvbG9yIGF4aXNvbCgxMCwyMCwyNTUpOwpzZjo6Q29sb3IgaW9sKCwwLDApOwpzZjo6Q29sb3IgY29sb3IoMjU1LCwwKTsKCndoaWxlICh3aW5kb3cuaXNPcGVuKCkpCnsKICAgIHNmOjpFdmVudCBlOwogICAgd2hpbGUgKHdpbmRvdy5wb2xsRXZlbnQoZSkpCiAgICB7CiAgICAgICAgaWYgKGUudHlwZSA9PSBzZjo6RXZlbnQ6OkNsb3NlZCkKICAgICAgICAgICAgd2luZG93LmNsb3NlKCk7CiAgICB9CgogICAgd2luZG93LmNsZWFyKHNmOjpDb2xvcigsMikpOwoKICAgIC8vICDnlLvnvZHmoLwKICAgIGZvciAoaW50IHggPSAwOyB4ICZsdDsgOyB4ICs9IDApCiAgICB7CiAgICAgICAgc2Y6OlZlcnRleCBsJiM5MTtdID0ge3t7KGZsb2F0KXgsMH0sZ3JpZG9sfSwge3soZmxvYXQpeCx9LGdyaWRvbH19OwogICAgICAgIHdpbmRvdy5kcmF3KGwsMixzZjo6TGluZXMpOwogICAgfQogICAgZm9yIChpbnQgeSA9IDA7IHkgJmx0OyA7IHkgKz0gMCkKICAgIHsKICAgICAgICBzZjo6VmVydGV4IGwmIzkxO10gPSB7e3swLChmbG9hdCl5fSxncmlkb2x9LCB7eywoZmxvYXQpeX0sZ3JpZG9sfX07CiAgICAgICAgd2luZG93LmRyYXcobCwyLHNmOjpMaW5lcyk7CiAgICB9CgogICAgLy8gIOeUu+WdkOagh+i9tAogICAgc2Y6OlZlcnRleCB4eGlzJiM5MTtdID0ge2NyLDAsIGMsfTsKICAgIHNmOjpWZXJ0ZXggeXhpcyYjOTE7XSA9IHsKICAgICAgICAgIHh4aXNjb2xvciAgICAgICAgICAgIHhpc2NvbG9yICA7CiAgICB3aW5kb3cuZHJhdyh4eGlzLDIsc2Y6OkxpbmVzKTsKICAgIHdpbmRvdy5kcmF3KHl4aXMsMixzZjo6TGluZXMpOwoKICAgIC8vICDnlLsgeT1zaW4oeCkKICAgIGZvciAodCB4ID0gLTsgeCAmbHQ7IDsgKykKICAgIHsKICAgICAgICAgICB4CiAgICAgICAgZmxhIC5mOwogICAgICAgIHNpbih4KQogICAgICAgIGxvc2luKTsKICAgICAgICAKICAgIAoKICAgIC8vICAgICAgICBmbG9hdCB4ID0geCArIAogICAgICAgICAgICBmbG9hdCB5ID0gYzsKICAgICAgICBzZjo6Q2lyY2xlU2hhcGUgKDEuZik7CiAgICAgICAgLnNldFBvc2l0aW9uKHgseSk7CiAgICAgICAgLnNldEZpbGxDb2xvcihjb2wpOwogICAgICAgIHdpbmRvdy5kcmF3KCk7CiAgICB9CgogICAgICAgeSAgCiAgICBvciBvICAgLSBsPSAyCiAgICAKICAgICAgICBvIHkgMiAgIAogICAgIDpyY2xhcGUgLgogICAgIHBzZXRvc2l0dG9yZW4gICAgICAgIHBzZXRsbG9sb3Jyb2wKICAgICAgICBkb2R3cAogIAogICAgb3dpc3BsCgpldHIgPGNvZXByZT4KPCEtLSAvd3A6ZSAtLT4KCjwhLS0gd3A6cGFyYWdyYXBoIC0tPgo8cD48L3A+CjwhLS0gL3dwOnBhcmFncmFwaCAtLT5jbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnREYXkyIOebruagh2xldmVsaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc29yZGVyZWR2YWx1ZXNpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudOeUu+agh+WHhjxzdHJvbmc+55u06KeS5Z2Q5qCH57O7PC9zdHJvbmc+77yIWCDovbTjgIFZIOi9tO+8iWlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW5055S7PHN0cm9uZz7nvZHmoLw8L3N0cm9uZz7vvIjmlrnkvr\/nnIvlh73mlbDlm77lg4\/vvIlpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudOeUu+WHuuesrOS4gOadoeaVsOWtpuabsue6v++8mjxzdHJvbmc+eSA9IHNpbih4KTwvc3Ryb25nPmlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW5055CG6Kej44CM5pWw5a2m5Z2Q5qCHIOKGkiDlsY\/luZXlnZDmoIfjgI3nmoTovazmjaJpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudOebtOaOpee7meS9oOWujOaVtOWPr+e8luivkeS7o+egge+8mjxicj7mlofku7blkI3vvJo8Y29kZT5kYXkyX2dyYXBoLmNwcDwvY29kZT5kcm9wQ2FwaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnQjaW5jbHVkZSAmbHQ7U0ZNTC9HcmFwaGljcy5ocHAmZ3Q7CiNpbmNsdWRlICZsdDtjbWF0aCZndDsKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpCnsKICAgIC8vIOeql+WPo++8mjgwMMOXNjAw77yM5Lit5paH5qCH6aKYCiAgICBzZjo6UmVuZGVyV2luZG93IHdpbmRvdyhzZjo6VmlkZW9Nb2RlKDgwMCwgNjAwKSwgTCJTRk1MIERheTIgwrcg5Ye95pWw5Zu+5YOPIik7CgogICAgLy8g5Z2Q5qCH57O75Lit5b+D5pS+5Zyo5bGP5bmV5Lit5b+DCiAgICBjb25zdCBmbG9hdCBjeCA9IDQwMDsKICAgIGNvbnN0IGZsb2F0IGN5ID0gMzAwOwoKICAgIC8vIOWdkOagh+i9tOminOiJsgogICAgc2Y6OkNvbG9yIGF4aXNfY29sb3IoMTIwLCAyMjAsIDI1NSk7CiAgICAvLyDnvZHmoLzpopzoibIKICAgIHNmOjpDb2xvciBncmlkX2NvbG9yKDYwLCA2MCwgODApOwogICAgLy8g5puy57q\/6aKc6ImyCiAgICBzZjo6Q29sb3Igc2luX2NvbG9yKDI1NSwgODAsIDgwKTsKCiAgICB3aGlsZSAod2luZG93LmlzT3BlbigpKQogICAgewogICAgICAgIHNmOjpFdmVudCBldmVudDsKICAgICAgICB3aGlsZSAod2luZG93LnBvbGxFdmVudChldmVudCkpCiAgICAgICAgewogICAgICAgICAgICBpZiAoZXZlbnQudHlwZSA9PSBzZjo6RXZlbnQ6OkNsb3NlZCkKICAgICAgICAgICAgICAgIHdpbmRvdy5jbG9zZSgpOwogICAgICAgIH0KCiAgICAgICAgLy8g6IOM5pmvCiAgICAgICAgd2luZG93LmNsZWFyKHNmOjpDb2xvcigyMCwgMjAsIDMwKSk7CgogICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT0g55S7572R5qC8ID09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICBmb3IgKGludCB4ID0gMDsgeCAmbHQ7IDgwMDsgeCArPSA0MCkKICAgICAgICB7CiAgICAgICAgICAgIHNmOjpWZXJ0ZXggbGluZVtdID0gewogICAgICAgICAgICAgICAge3soZmxvYXQpeCwgMH0sIGdyaWRfY29sb3J9LAogICAgICAgICAgICAgICAge3soZmxvYXQpeCwgNjAwfSwgZ3JpZF9jb2xvcn0KICAgICAgICAgICAgfTsKICAgICAgICAgICAgd2luZG93LmRyYXcobGluZSwgMiwgc2Y6OkxpbmVzKTsKICAgICAgICB9CiAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgJmx0OyA2MDA7IHkgKz0gNDApCiAgICAgICAgewogICAgICAgICAgICBzZjo6VmVydGV4IGxpbmVbXSA9IHsKICAgICAgICAgICAgICAgIHt7MCwgKGZsb2F0KXl9LCBncmlkX2NvbG9yfSwKICAgICAgICAgICAgICAgIHt7ODAwLCAoZmxvYXQpeX0sIGdyaWRfY29sb3J9CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHdpbmRvdy5kcmF3KGxpbmUsIDIsIHNmOjpMaW5lcyk7CiAgICAgICAgfQoKICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09IOeUu+WdkOagh+i9tCA9PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgc2Y6OlZlcnRleCB4X2F4aXNbXSA9IHsKICAgICAgICAgICAge3swLCBjeX0sIGF4aXNfY29sb3J9LAogICAgICAgICAgICB7ezgwMCwgY3l9LCBheGlzX2NvbG9yfQogICAgICAgIH07CiAgICAgICAgc2Y6OlZlcnRleCB5X2F4aXNbXSA9IHsKICAgICAgICAgICAge3tjeCwgMH0sIGF4aXNfY29sb3J9LAogICAgICAgICAgICB7e2N4LCA2MDB9LCBheGlzX2NvbG9yfQogICAgICAgIH07CiAgICAgICAgd2luZG93LmRyYXcoeF9heGlzLCAyLCBzZjo6TGluZXMpOwogICAgICAgIHdpbmRvdy5kcmF3KHlfYXhpcywgMiwgc2Y6OkxpbmVzKTsKCiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PSDnlLsgeSA9IHNpbih4KSA9PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgZm9yIChpbnQgc3ggPSAtMzUwOyBzeCAmbHQ7IDM1MDsgKytzeCkKICAgICAgICB7CiAgICAgICAgICAgIC8vIOaVsOWtpiB4CiAgICAgICAgICAgIGZsb2F0IHggPSBzeCAvIDUwLjBmOwogICAgICAgICAgICAvLyDmlbDlraYgeSA9IHNpbih4KQogICAgICAgICAgICBmbG9hdCB5ID0gc2luKHgpOwoKICAgICAgICAgICAgLy8g5pS+5aSnIDEwMCDlgI3mlrnkvr\/op4Llr58KICAgICAgICAgICAgeSAqPSAxMDA7CgogICAgICAgICAgICAvLyDovazmjaLliLDlsY\/luZXlnZDmoIcKICAgICAgICAgICAgZmxvYXQgcHggPSBjeCArIHN4OwogICAgICAgICAgICBmbG9hdCBweSA9IGN5IC0geTsKCiAgICAgICAgICAgIC8vIOeUu+eCuQogICAgICAgICAgICBzZjo6Q2lyY2xlU2hhcGUgZG90KDEuNWYpOwogICAgICAgICAgICBkb3Quc2V0UG9zaXRpb24ocHgsIHB5KTsKICAgICAgICAgICAgZG90LnNldEZpbGxDb2xvcihzaW5fY29sb3IpOwogICAgICAgICAgICB3aW5kb3cuZHJhdyhkb3QpOwogICAgICAgIH0KCiAgICAgICAgd2luZG93LmRpc3BsYXkoKTsKICAgIH0KCiAgICByZXR1cm4gMDsKfWlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50TWFrZWZpbGUg5a+55bqU5Yqg5LiA5p2hbGV2ZWxpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudGRheTI6IGRheTJfZ3JhcGgubwogICAgJChDWFgpICQoQ1hYRkxBR1MpIC1vIGRheTIgZGF5Ml9ncmFwaC5vICQoTElCUylpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudOe8luivkei\/kOihjO+8mmRyb3BDYXBpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudG1ha2UgZGF5MgouL2RheTJpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzb3BhY2l0eXRhZ05hbWVpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudOS9oOS7iuWkqeimgeeQhuino+eahCAzIOS4quWFs+mUrueCuWxldmVsaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc29yZGVyZWR2YWx1ZXNpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudFNGTUwg5Y6f54K55ZyoPHN0cm9uZz7lt6bkuIrop5I8L3N0cm9uZz7vvIzmlbDlrabljp\/ngrnlnKg8c3Ryb25nPuS4reW\/gzwvc3Ryb25nPu+8jOaJgOS7peimgSA8Y29kZT5jeD00MDAsIGN5PTMwMDwvY29kZT5pbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudOWxj+W5lSB5IOWQkeS4i++8jOaVsOWtpiB5IOWQkeS4iiDihpIg5omA5Lul55SoIDxjb2RlPmN5IC0geTwvY29kZT5pbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudOWHveaVsOWbvuWDj+WwseaYr++8mjxzdHJvbmc+5b6q546v566X54K5IOKGkiDnlLvngrkg4oaSIOi\/nuaIkOabsue6vzwvc3Ryb25nPmlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNvcGFjaXR5dGFnTmFtZWlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW506L+Q6KGM5oiQ5Yqf5ZCO5Zue5aSN5oiR77yaPGJyPjxzdHJvbmc+RGF5MiDmraPlvKblh73mlbDnlLvlh7rmnaXkuoY8L3N0cm9uZz48YnI+5oiR5bCx5bim5L2g57un57utIERheTPvvJpkcm9wQ2FwaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc29yZGVyZWR2YWx1ZXNpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudOaUr+aMgTxzdHJvbmc+5aSa5Liq5Ye95pWwPC9zdHJvbmc+77yIc2lu44CBY29z44CB5oqb54mp57q\/77yJaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnTplK7nm5jmjqfliLY8c3Ryb25nPue8qeaUvuOAgeW5s+enuzwvc3Ryb25nPmlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW506byg5qCH5pi+56S65Z2Q5qCHaW5uZXJCbG9ja3NoRGF5MiDnm67moIdsaXN0bGNscz0idy1ibG9rLWxpc3QiPjwhLS0gd3A6bGlzdC1pdG0tLT4KPGxpPueUu+agh+WHhjxyb25nPuebtOinkuWdkOagh+ezu3N0cm9uZ++8iFgg6L2044CBWSDovbTvvIk8L2xpPmxpc3QtaXRlbWxpc3QtaXRlbWxp55S7c3RnPue9keagvDwvZz7vvIjmlrnkvr\/nnIvlh73mlbDlm77lg4\/vvIk8L2xpPgo8IS0tIC93cDpsaS1lbS0tCgo8IS0td3A6aXMtaXRlbS0tPgpsaeeUu+WHuuesrOS4gOadoeaVsOWtpuabsue6v++8mjxybmc+eXNpbih4KTxzdHJvbmc+bGlsaXN0LWl0ZW1saXN0LWl0ZW1saeeQhuino+OAjOKGkuWxj+W5leWdkOagh+OAjeeahOi9rOaNoi9saQo8IS0tL3dwOmlzLWl0ZW0tLT51bGxpc3Tnm7TmjqXnu5nkvaDlrozmlbTlj6\/nvJbor5Hku6PnoIHvvJrmlofku7blkI3vvJo8ZD5kMl9nYXBoLmNwcC9jb2Rjb2RlIC0tPgo8ZSBjbHNzPSJ3cC1ibG9jay1jb2RlIj48Y29kZT4jaW5jbHVkZSAmbHQ7U0ZNTC9HaWNzLmhwcAojaW5jbHVkZSZsdDtjbWF0aAp1c2luZyBuYW1lc2FjZSBzdGQ7CgoKCiAgICAvLyDnqpflj6PvvJo4MDDDlzYwMO+8jOS4reaWh+agh+mimAogICAgODAwNjAwMsK3IOWDjwogICAv5Z2Q5qCH57O75Lit5b+D5pS+5Zyo5bGP5bmV5Lit5b+DIG9udCBmYXQgeD0gNDAwOyAgICBjb250IGF0Y3kgPSAzCiAgICAvLyDlnZDmoIfovbTpopzoibIKICAgIF9jb3IyIDIgICAgIC8vIOe9keagvOminOiJsgogICAgZ3JkX2NvcjYwIDYgOCAgICAvLyDmm7Lnur\/popzoibIKICAgIHNpbl8gODAgOCAgICAgICAgICAgIHZlbnQgICAgdmVudCAgICAgICAgdmVudCAgICAgICAgICAgIC8vIOiDjOaZrwogICAgICAgIDIwIDAsIDMwICAgID09PT09PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PSAgICA4MDA0ICAgICAgICBpbmUKICAgICAgICAgICAgICAgICAgX2NvcgogICAgICAgICAgICAgICAgNjAwIF9jb3IKICAgICAgICAgICAgICAgIGluZSAgICAgICAgICA2MDA0ICAgICAgICBpbmUKICAgICAgICAgICAgICAgICAgX2NvcgogICAgICAgICAgICAgICA4MDAgIF9jb3IKICAgICAgICAgICAgICAgIGluZSAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT0gICAgX2EKICAgICAgICAgICAge3swLCB5fSwgYXhpc19jb2xvfQogICAgICAgICAgICB7ezgweX0gYXhpc19jb2xvcgogICAgICAgIH0gICAgX2EgIHt7YywgMH0sIGFffSwKe3tjLCA2MDB9LCBheF99CiAgICAgIH0gICAgX2EgICAgICBfYSAgICAgID09PT09PT09PT09PT09PT09PT09PT0gICA9PT09PT09PT09PT09PT09PT09PT09ICAgIGluczM1MHMzNTArc3ggICAgIC8vIOaVsOWtpiAgICAgb3R4ID0gc3ggLyA1MDAgICAgLy8g5pWw5a2mIHkgPSAgICAgZmF0IHkgPSAoeAogICAgLy8g5pS+5aSnIDEwMCDlgI3mlrnkvr\/op4Llr58gICAgICAgIHkgKj0gMTAwOyAgICAgICAg6L2s5o2i5Yiw5bGP5bmV5Z2Q5qCHCiAgICAgcGNzeDtweSAtIHkKICAgIC8vIOeUu+eCuQogICAgICAgICAgICBkb3Q1ICAgIGRvdHAgcCAgICBkb3RzaW5fb3IgICAgZG90ICAgICB3aW5kb3cuZGlzcGxhKCk7CiAgfQpyZXR1cm4gMDsKfTwvY2RlPjwvcGU+CjwhLS0vd3A6Y2RlLS0+Cgo8IS0td3A6aGVhZGluZy0+CjxoMmNhc3Mid3AtYmxvY2staGVhZGluZyI+TWFrZWZpbGXlr7nlupTliqDkuIDmnaE8L2g+PCEtLS93cDpoZWFkaW5nLS0+Cgo8IS0td3A6Y29kZS0tPjxwcmVjbGFzcz0id3AtYmxvY2stY29kZSI+PGNvZGU+ZGF5MjpkYXkyX2dyYXBoLm8KJChDWFgpJChDWFhGTEFHUyktZGEyZGF5X2dyYXBoLm8kKExJQlMpPC9jb2RlPjwvcHJlPgo8IS0tL3dwOmNvZGUtLT4KPCEtLXdwOnBhcmFncmFwaC0tPgo8cD7nvJbor5Hov5DooYzvvJo8L3A+CjwhLS0vd3A6cGFyYWdyYXBoLS0+Cgo8IS0td3Bjb2RlIC0tPgo8cGUgc3M9InctYmxvY2stY29kIj48Y29kZT5tYWtlZGF5MgovZGF5MjwvY29kZT48L3ByZT48IS0tL3dwOmNvZGUtLT4KCjwhLS13cDpzZXBhcmF0b3ItLT4KPGhyY2xhc3M9InctYmxvY2stcGFyYXIgaGEtYWxwaGEtY2hhbm5lbC1vcGFjeSIvPgo8IS0tIC93cDpzZXBhcmEgLS0+Cgo8IS0tIHdwOmhhZGlneyJsZXZlbCI6MX0tLT4KPGgxY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPuS9oOS7iuWkqeimgeeQhuino+eahDPkuKrlhbPplK7ngrk8L2gxPgo8IS0tL3dwOmhlYWRpbmctLT4KCjwhLS13OmxpdCB7Im9yZHJlZCI6cnVlfSAtLT4KPG8gY2Fzcz0id3AtYmxjay1pc3QiPjwhLS0gd3A6bGlzdC1pdGVtIC0tPgo8bGk+U0ZNTCDljp\/ngrnlnKg8c3Rybmc+5bem5LiK6KeSPC9zdG9uZz7vvIzmlbDlrabljp\/ngrnlnKg8c3RuZz7kuK3lv4M8L3N0cm9uZz7vvIzmiYDku6XopoEgPGNvZGU+Y3g9NDAwLCBjeT0zMDA8L2NvZGU+PC9pPjwhLS0vd3A6bGlzdC1pdGVtLS0+Cgo8IS0td3A6bGlzdC1pdGVtLS0+CjxsaT7lsY\/luZV55ZCR5LiL77yM5pWw5a2meeWQkeS4iiDihpIg5omA5Lul55SoIDxjb2U+Y3kgLSB5PC9jZT48L2xpPgo8IS0tIC86bGlzdC1pdGVtIC0tPgo8IS0td3A6bGlzdC1pdGVtLS0+PGxpPuWHveaVsOWbvuWDj+WwseaYr++8mjxzdHJvbmc+5b6q546v566X54K54oaS55S754K54oaS6L+e5oiQ5puy57q\/PC9zdHJuZz48L2xpPgo8IS0tIC9wOmx0LWl0ZW0gLS0+PC9vbD4KPCEtLSAvdzppc3QgLS0+PCEtLSB3cDpzcGFyYW8tLT4KaHIgbGFzcz0id3AtYmxjay1zYWF0b3IgaGFzLWFscGhhLWNoYW5ubC1vcGFjaXR5Ii9zcGFyYXRvcui\/kOihjOaIkOWKn+WQjuWbnuWkjeaIke+8mmJyPjxzdHJvbmc+RGF5MiDmraPlvKblh73mlbDnlLvlh7rmnaXkuoY8c3Ryb25nPjxicj7miJHlsLHluKbkvaDnu6fnu60gRGF5M++8mjwvCgo8IS0tIHdwOmxpc3QgLS0+Cjx1bCBjbGFzcz0id3AtYmxvY2stbGlzdCI+PCEtLSB3cDpsaXN0LWl0ZW0gLS0+CjxsaT7mlK\/mjIE8c3Ryb25nPuWkmuS4quWHveaVsDwvc3Ryb25nPu+8iHNpbuOAgWNvc+OAgeaKm+eJqee6v++8iTwvbGk+CjwhLS0gL3dwOmxpc3QtaXRlbSAtLT4KCjwhLS0gd3A6bGlzdC1pdGVtIC0tPgo8bGk+6ZSu55uY5o6n5Yi2PHN0cm9uZz7nvKnmlL7jgIHlubPnp7s8L3N0cm9uZz48L2xpPgo8IS0tIC93cDpsaXN0LWl0ZW0gLS0+Cgo8IS0tIHdwOmxpc3QtaXRlbSAtLT4KPGxpPum8oOagh+aYvuekuuWdkOaghzwvbGk+CjwhLS0gL3dwOmxpc3QtaXRlbSAtLT48L3VsPgo8IS0tIC93cDpsaXN0IC0tPkRheSBTRk1MK+ebtOinkuWdkOagh+ezuyvnvZHmoLwr5Ye95pWwc2lu5Zu+5YOPZG9jdW1lbnRzbHVnc3RhdGVzYXZlZEF0c3RhdGVzYXZlZEJ5Y2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50ZHJvcENhcGlubmVyQmxvY2tzPC8+CjwhLS0gL3dwOmFnIC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPuebruagh+mihOiniGNsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudGRyb3BDYXBpbm5lckJsb2Nrc2FsdGNhcHRpb25pZGxpbmt1cmxzaXplU2x1Z2xpbmtEZXN0aW5hdGlvbuebruagh+mihOiniGltYWdlIHsiaWQiOjI1LCJzaXplU2x1ZyI6ImZ1bGwiLCJsaW5rRGVzdGluYXRpb24iOiJub25lIn0gLS0+CjxmaWd1cmUgY2xhc3M9InctYmxvY2staW1nZSBzaXplLWZ1bGwiPjxpbWcgc2M9Imh0dHBzOi8vcm5kZW56aGUuY24vd29kcHJlc3Mvd3AtY29udGVudC91cGxvZHMvMjAyNi8wNS9hLm5nIiBhbHQ9IiIgY2xhc3M9IndwLWltYWdlLTI1Ii8+PC9maWd1cmU+CjwhLS0gL3dwOmltYWdlIC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGxldmVsaGVkaW57ImxldmVsIjoxfSBoMSBjbGFzcz0idy1ibG9jay1oZWFkaW5nImgxaGVkaW5zdGF0ZXZlcnNpb2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\/nnIvlh73mlbDlm77lg4\/vvIk8L2xpPnckNWU3ZDkxYTctYjQ3Ni00MzA2LTgzNTUtNjlkMmM4MWRiMDI0d0I8bGk+55S75Ye656ys5LiA5p2h5pWw5a2m5puy57q\/77yaPHN0cm9uZz55ID0gc2luKHgpPC9zdHJvbmc+PC9saT53JGYzYWRlYTRlLTBmMDctNGVjYy05OTFiLTBkOTlhM2YxNDE2ZXc7PGxpPueQhuino+OAjOaVsOWtpuWdkOaghyDihpIg5bGP5bmV5Z2Q5qCH44CN55qE6L2s5o2iPC9saT53JDFlODA3ZTM0LWRlZGUtNDUxZS05YmQ1LTEzMDZlMmU1N2Q3NncuPGgxIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj7nm67moIfpooTop4g8L2gxPnckMDZhZDY1ODMtZGI0NS00Mzk1LWJmMDItMjE2OTZiMjNmMmI3d6ABPGZpZ3VyZSBjbGFzcz0id3AtYmxvY2staW1hZ2Ugc2l6ZS1mdWxsIj48aW1nIHNyYz0iaHR0cHM6Ly9yYW5kZW5nemhlLmNuL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wNS9pbWFnZS5wbmciIGFsdD0iIiBjbGFzcz0id3AtaW1hZ2UtMjQ1NyIvPjwvZmlndXJlPnckZDA4MGVmOTctZWY0Mi00MTViLTllNzQtZDZkNjA4NzczN2Fld1Y8cD7nm7TmjqXnu5nkvaDlrozmlbTlj6\/nvJbor5Hku6PnoIHvvJo8YnI+5paH5Lu25ZCN77yaPGNvZGU+ZGF5Ml9ncmFwaC5jcHA8L2NvZGU+PC9wPnckM2I4ZWRmOTgtNjM3YS00NWJkLWJhZTMtZmMwYTIwZDJlMzdjd+0SPHByZSBjbGFzcz0id3AtYmxvY2stY29kZSI+PGNvZGU+I2luY2x1ZGUgJmx0O1NGTUwvR3JhcGhpY3MuaHBwPgojaW5jbHVkZSAmbHQ7Y21hdGg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IG1haW4oKQp7CiAgICAvLyDnqpflj6PvvJo4MDDDlzYwMO+8jOS4reaWh+agh+mimAogICAgc2Y6OlJlbmRlcldpbmRvdyB3aW5kb3coc2Y6OlZpZGVvTW9kZSg4MDAsIDYwMCksIEwiU0ZNTCBEYXkyIMK3IOWHveaVsOWbvuWDjyIpOwoKICAgIC8vIOWdkOagh+ezu+S4reW\/g+aUvuWcqOWxj+W5leS4reW\/gwogICAgY29uc3QgZmxvYXQgY3ggPSA0MDA7CiAgICBjb25zdCBmbG9hdCBjeSA9IDMwMDsKCiAgICAvLyDlnZDmoIfovbTpopzoibIKICAgIHNmOjpDb2xvciBheGlzX2NvbG9yKDEyMCwgMjIwLCAyNTUpOwogICAgLy8g572R5qC86aKc6ImyCiAgICBzZjo6Q29sb3IgZ3JpZF9jb2xvcig2MCwgNjAsIDgwKTsKICAgIC8vIOabsue6v+minOiJsgogICAgc2Y6OkNvbG9yIHNpbl9jb2xvcigyNTUsIDgwLCA4MCk7CgogICAgd2hpbGUgKHdpbmRvdy5pc09wZW4oKSkKICAgIHsKICAgICAgICBzZjo6RXZlbnQgZXZlbnQ7CiAgICAgICAgd2hpbGUgKHdpbmRvdy5wb2xsRXZlbnQoZXZlbnQpKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT0gc2Y6OkV2ZW50OjpDbG9zZWQpCiAgICAgICAgICAgICAgICB3aW5kb3cuY2xvc2UoKTsKICAgICAgICB9CgogICAgICAgIC8vIOiDjOaZrwogICAgICAgIHdpbmRvdy5jbGVhcihzZjo6Q29sb3IoMjAsIDIwLCAzMCkpOwoKICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09IOeUu+e9keagvCA9PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggJmx0OyA4MDA7IHggKz0gNDApCiAgICAgICAgewogICAgICAgICAgICBzZjo6VmVydGV4IGxpbmUmIzkxO10gPSB7CiAgICAgICAgICAgICAgICB7eyhmbG9hdCl4LCAwfSwgZ3JpZF9jb2xvcn0sCiAgICAgICAgICAgICAgICB7eyhmbG9hdCl4LCA2MDB9LCBncmlkX2NvbG9yfQogICAgICAgICAgICB9OwogICAgICAgICAgICB3aW5kb3cuZHJhdyhsaW5lLCAyLCBzZjo6TGluZXMpOwogICAgICAgIH0KICAgICAgICBmb3IgKGludCB5ID0gMDsgeSAmbHQ7IDYwMDsgeSArPSA0MCkKICAgICAgICB7CiAgICAgICAgICAgIHNmOjpWZXJ0ZXggbGluZSYjOTE7XSA9IHsKICAgICAgICAgICAgICAgIHt7MCwgKGZsb2F0KXl9LCBncmlkX2NvbG9yfSwKICAgICAgICAgICAgICAgIHt7ODAwLCAoZmxvYXQpeX0sIGdyaWRfY29sb3J9CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHdpbmRvdy5kcmF3KGxpbmUsIDIsIHNmOjpMaW5lcyk7CiAgICAgICAgfQoKICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09IOeUu+WdkOagh+i9tCA9PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgc2Y6OlZlcnRleCB4X2F4aXMmIzkxO10gPSB7CiAgICAgICAgICAgIHt7MCwgY3l9LCBheGlzX2NvbG9yfSwKICAgICAgICAgICAge3s4MDAsIGN5fSwgYXhpc19jb2xvcn0KICAgICAgICB9OwogICAgICAgIHNmOjpWZXJ0ZXggeV9heGlzJiM5MTtdID0gewogICAgICAgICAgICB7e2N4LCAwfSwgYXhpc19jb2xvcn0sCiAgICAgICAgICAgIHt7Y3gsIDYwMH0sIGF4aXNfY29sb3J9CiAgICAgICAgfTsKICAgICAgICB3aW5kb3cuZHJhdyh4X2F4aXMsIDIsIHNmOjpMaW5lcyk7CiAgICAgICAgd2luZG93LmRyYXcoeV9heGlzLCAyLCBzZjo6TGluZXMpOwoKICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09IOeUuyB5ID0gc2luKHgpID09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICBmb3IgKGludCBzeCA9IC0zNTA7IHN4ICZsdDsgMzUwOyArK3N4KQogICAgICAgIHsKICAgICAgICAgICAgLy8g5pWw5a2mIHgKICAgICAgICAgICAgZmxvYXQgeCA9IHN4IC8gNTAuMGY7CiAgICAgICAgICAgIC8vIOaVsOWtpiB5ID0gc2luKHgpCiAgICAgICAgICAgIGZsb2F0IHkgPSBzaW4oeCk7CgogICAgICAgICAgICAvLyDmlL7lpKcgMTAwIOWAjeaWueS+v+inguWvnwogICAgICAgICAgICB5ICo9IDEwMDsKCiAgICAgICAgICAgIC8vIOi9rOaNouWIsOWxj+W5leWdkOaghwogICAgICAgICAgICBmbG9hdCBweCA9IGN4ICsgc3g7CiAgICAgICAgICAgIGZsb2F0IHB5ID0gY3kgLSB5OwoKICAgICAgICAgICAgLy8g55S754K5CiAgICAgICAgICAgIHNmOjpDaXJjbGVTaGFwZSBkb3QoMS41Zik7CiAgICAgICAgICAgIGRvdC5zZXRQb3NpdGlvbihweCwgcHkpOwogICAgICAgICAgICBkb3Quc2V0RmlsbENvbG9yKHNpbl9jb2xvcik7CiAgICAgICAgICAgIHdpbmRvdy5kcmF3KGRvdCk7CiAgICAgICAgfQoKICAgICAgICB3aW5kb3cuZGlzcGxheSgpOwogICAgfQoKICAgIHJldHVybiAwOwp9PC9jb2RlPjwvcHJlPnckNjIzMWNjOGMtZDkyMC00ZTM4LTkyN2MtMjczYWFkZTc2YWExdzo8aDIgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPk1ha2VmaWxlIOWvueW6lOWKoOS4gOadoTwvaDI+dyQ2NTQ0NDY5Zi0yY2FlLTRiNWMtYjZlZi1jZGRjM2NmZTMzZjd3dDxwcmUgY2xhc3M9IndwLWJsb2NrLWNvZGUiPjxjb2RlPmRheTI6IGRheTJfZ3JhcGgubwogICAgJChDWFgpICQoQ1hYRkxBR1MpIC1vIGRheTIgZGF5Ml9ncmFwaC5vICQoTElCUyk8L2NvZGU+PC9wcmU+dyRkNjhhYTkwZi0zYmJmLTRiMDctODlhNy04ODIwYjg2YTg3ZTZ3FjxwPue8luivkei\/kOihjO+8mjwvcD53JGQ0Mzk1YmQxLTcyYTEtNDczMS04YWE3LWU5OGRjNmFiMzljNHc+PHByZSBjbGFzcz0id3AtYmxvY2stY29kZSI+PGNvZGU+bWFrZSBkYXkyCi4vZGF5MjwvY29kZT48L3ByZT53JGQyMGY5ZTM2LTI2OTEtNDc0MC05NTY2LTY1ZjE5ZjU0NGY3Mnc6PGhyIGNsYXNzPSJ3cC1ibG9jay1zZXBhcmF0b3IgaGFzLWFscGhhLWNoYW5uZWwtb3BhY2l0eSIvPnckMjJlYWFmZmMtNmNkMi00YmJkLWE2Y2UtNjVkYjA3N2Y2MDkxd0Y8aDEgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPuS9oOS7iuWkqeimgeeQhuino+eahCAzIOS4quWFs+mUrueCuTwvaDE+dyRiYjc3ZTU5YS05ZjFlLTQ0YjEtOTE5YS1mNTQyYzYzNzVhNDl3IzxvbCBjbGFzcz0id3AtYmxvY2stbGlzdCI+CgoKCjwvb2w+dyRhNjgyMDFlMy0yMTc1LTQzMDctYjVlNy1hNzkxZjEyM2Y2OTB3ggE8bGk+U0ZNTCDljp\/ngrnlnKg8c3Ryb25nPuW3puS4iuinkjwvc3Ryb25nPu+8jOaVsOWtpuWOn+eCueWcqDxzdHJvbmc+5Lit5b+DPC9zdHJvbmc+77yM5omA5Lul6KaBIDxjb2RlPmN4PTQwMCwgY3k9MzAwPC9jb2RlPjwvbGk+dyRmOWFiMTRiMC00NWMyLTQyZTMtOTJiYy0xNTkxZDg2OWNlMDl3TDxsaT7lsY\/luZUgeSDlkJHkuIvvvIzmlbDlraYgeSDlkJHkuIog4oaSIOaJgOS7peeUqCA8Y29kZT5jeSAtIHk8L2NvZGU+PC9saT53JGRiZTA5M2RhLTk4Y2UtNDdkYi1hZGYwLWQ0YTUwMjU1ZGY0NndXPGxpPuWHveaVsOWbvuWDj+WwseaYr++8mjxzdHJvbmc+5b6q546v566X54K5IOKGkiDnlLvngrkg4oaSIOi\/nuaIkOabsue6vzwvc3Ryb25nPjwvbGk+dyQ1MDU0ZGU5OS0yYmRhLTQyOGEtODQyZi00MTVkZjg3NGEwNTZ3OjxociBjbGFzcz0id3AtYmxvY2stc2VwYXJhdG9yIGhhcy1hbHBoYS1jaGFubmVsLW9wYWNpdHkiLz53JDhmMTEwNWI3LTBhMGUtNDQ3Yy05Mzk1LTNkYjMzMDhlOTY0M3dyPHA+6L+Q6KGM5oiQ5Yqf5ZCO5Zue5aSN5oiR77yaPGJyPjxzdHJvbmc+RGF5MiDmraPlvKblh73mlbDnlLvlh7rmnaXkuoY8L3N0cm9uZz48YnI+5oiR5bCx5bim5L2g57un57utIERheTPvvJo8L3A+dyQxZDEyYjQyNC1iMzFkLTQ4NmQtODViOS1kYTFhYzQ2ZGUxYjN3Izx1bCBjbGFzcz0id3AtYmxvY2stbGlzdCI+CgoKCjwvdWw+dyRiYzQ5YWU4ZS03OGRlLTQ0ZGEtYmNhZi1kNzA3YWNmZjlkYTV3RzxsaT7mlK\/mjIE8c3Ryb25nPuWkmuS4quWHveaVsDwvc3Ryb25nPu+8iHNpbuOAgWNvc+OAgeaKm+eJqee6v++8iTwvbGk+dyQyZDJjYTgwMi05ZmVkLTRmMTQtOWQwMS02YjE1MGRmMzI3OTV3NTxsaT7plK7nm5jmjqfliLY8c3Ryb25nPue8qeaUvuOAgeW5s+enuzwvc3Ryb25nPjwvbGk+dyRmYTU3YTFiNC04YzFmLTRhMjUtOGNiMS04M2UyZDU5NzIyMTF3GzxsaT7pvKDmoIfmmL7npLrlnZDmoIc8L2xpPr8MAH0BfQB3BG9wZW53BG9wZW55dwB3CHN0YW5kYXJkeXcAdQB4dwxjb3JlL2hlYWRpbmd9AXh3CWNvcmUvbGlzdHl3AHh3DmNvcmUvbGlzdC1pdGVteHcOY29yZS9saXN0LWl0ZW14dw5jb3JlL2xpc3QtaXRlbXh3DmNvcmUvbGlzdC1pdGVteHcOY29yZS9wYXJhZ3JhcGh5eHcJY29yZS9jb2RleHcMY29yZS9oZWFkaW5nfQJ4dwljb3JlL2NvZGV4dw5jb3JlL3BhcmFncmFwaHl4dwljb3JlL2NvZGV4dw5jb3JlL3NlcGFyYXRvcncNYWxwaGEtY2hhbm5lbHcCaHJ4dwxjb3JlL2hlYWRpbmd9AXh3CWNvcmUvbGlzdHh3AHh3DmNvcmUvbGlzdC1pdGVteHcOY29yZS9saXN0LWl0ZW14dw5jb3JlL2xpc3QtaXRlbXh3DmNvcmUvc2VwYXJhdG9ydw1hbHBoYS1jaGFubmVsdwJocnh3DmNvcmUvcGFyYWdyYXBoeXh3CWNvcmUvbGlzdHl3AHh3DmNvcmUvbGlzdC1pdGVteHcOY29yZS9saXN0LWl0ZW14dw5jb3JlL2xpc3QtaXRlbXUBfR53B3B1Ymxpc2h3EzIwMjYtMDUtMDJUMTQ6NDc6NDZ3b2RheTMtc2ZtbCVlNyU5YiViNCVlOCVhNyU5MiVlNSU5ZCU5MCVlNiVhMCU4NyVlNyViMyViYiVlNyViZCU5MSVlNiVhMCViYyVlNSU4NyViZCVlNiU5NSViMHNpbiVlNSU5YiViZSVlNSU4MyU4Znh4dwpjb3JlL2ltYWdldwB9mSZ3RGh0dHBzOi8vcmFuZGVuZ3poZS5jbi93b3JkcHJlc3Mvd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDUvaW1hZ2UucG5ndwRmdWxsdwRub25ldwxjb3JlL2hlYWRpbmd9AVgAf3tCed5\/XE0wAH2ozYuRDX2EJ3dDaHR0cHM6Ly9yYW5kZW5nemhlLmNuL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wNS9kYXkyLnBuZ3claHR0cHM6Ly9yYW5kZW5nemhlLmNuL3dvcmRwcmVzcy9kYXkyLwYAA4qv6JQKiAMAAgEDDAACsxIIYDQGJAgGAQEDAQABAQIABQECAAsIDggGAAETAQABAQQSAQEEAAEAAg4BBAEAAQECEQEBAQICAgEBAQICBQEFAgALCA4IBgABBQEEBAABAwEBAQQBAAEBAg0CAAsIDgABAQEDCA0EBQEAAQgBBQEKAQIBAQEDAQgBDgERAR8kAAIABQIBAAEACgMBAyYEAgQNAAEAAgAEJAEDAgsBAgEEAQYBBwIBAQYDDwEDAwMCAAEIAQEBAxAABQADABEAAQEDAgEAAgAQAgERAQEBBwUCAQC9AQEBAgEADAEfAAEEBwA5ABAEBgBKAAEEBwA5AAcEDwA4ARYADQICBQIAAgIBBQEBEwANHgURAQABCAUAAwcGAAEIBBEBAAEIBAEDBwYAAQYTACMAGgECAxMDBwAJAAIBAQYQBAEAAQABAwEBCQABBQECAQEBAgEAAQAKAQEEAQICCAEBAQEJBgEBAQMDAgsOBQAJAQEEAQgEAgEACgMCCQEAAQUFARMEGgADAAwADQgEAAoAEAIYAA4BAQEBAwMAAQYFAAMCAQEBAAEAAgEBAgEIAgIBAQUACQEBAQMDAQABAAEAAQMGBAECAwIEAgEDBgIBAAMABAMCAQIAAQcJAAMBAgAEAgEBAgEJAgIBAQEBAAEBAwIBAAQDAgEEBAEAAQACAAEAAQEBAAIAAQIOAiAAG5MXAQAOAAcAKAAjACsAGAA2ACIEEgUUAQoAAQAWAEoBEgAZABkBDAAoAAsAJQALACUBGwAFABgAJwAJADAAHwAJAQ0ALAE8ACwACQAhACwALQAOACwACQAsAAkAIQAsAC0ADgAsAAkBPQAfACIAIwAKAB8AIgAjAAoAKgAqAUUALgAJABMAIQAcAB0BGwAVARYAHwAeAREAJgAkACgAHQAJARkABQENAAMAFQAWADUADAANAAgABwAVAAcAWwAvAC4ABwBCAAcAKgAgAAsFAUPrAgMSA68SAAIABAQUEAEAAQACAAMACwABAQEDJAABAAEBAQADAhMAAQCYAQEBAR0AAQAxAAEA6ObFyAYBAAHg8bikAgIAAAMB\",\"updateId\":566223005}","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[30],"tags":[],"class_list":["post-2452","post","type-post","status-publish","format-standard","hentry","category-sfml"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/randengzhe.cn\/wordpress\/wp-json\/wp\/v2\/posts\/2452","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/randengzhe.cn\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/randengzhe.cn\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/randengzhe.cn\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/randengzhe.cn\/wordpress\/wp-json\/wp\/v2\/comments?post=2452"}],"version-history":[{"count":5,"href":"https:\/\/randengzhe.cn\/wordpress\/wp-json\/wp\/v2\/posts\/2452\/revisions"}],"predecessor-version":[{"id":2509,"href":"https:\/\/randengzhe.cn\/wordpress\/wp-json\/wp\/v2\/posts\/2452\/revisions\/2509"}],"wp:attachment":[{"href":"https:\/\/randengzhe.cn\/wordpress\/wp-json\/wp\/v2\/media?parent=2452"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/randengzhe.cn\/wordpress\/wp-json\/wp\/v2\/categories?post=2452"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/randengzhe.cn\/wordpress\/wp-json\/wp\/v2\/tags?post=2452"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}