{"id":2502,"date":"2026-05-02T16:42:41","date_gmt":"2026-05-02T08:42:41","guid":{"rendered":"https:\/\/randengzhe.cn\/wordpress\/?p=2502"},"modified":"2026-05-02T17:16:15","modified_gmt":"2026-05-02T09:16:15","slug":"day3-sfml%e7%9b%b4%e8%a7%92%e5%9d%90%e6%a0%87%e5%a4%9a%e4%b8%aa%e5%87%bd%e6%95%b0%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%e5%a4%9a%e4%b8%aa%e5%87%bd%e6%95%b0%e5%9b%be%e5%83%8f\/","title":{"rendered":"Day3 SFML+\u76f4\u89d2\u5750\u6807+\u591a\u4e2a\u51fd\u6570\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%e5%a4%9a%e4%b8%aa%e5%87%bd%e6%95%b0%e5%9b%be%e5%83%8f\/#SFML_%E5%AD%A6%E4%B9%A0_%C2%B7_Day3\" >SFML \u5b66\u4e60 \u00b7 Day3<\/a><ul class='ez-toc-list-level-2' ><li class='ez-toc-heading-level-2'><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%e5%a4%9a%e4%b8%aa%e5%87%bd%e6%95%b0%e5%9b%be%e5%83%8f\/#%E4%BB%8A%E6%97%A5%E7%9B%AE%E6%A0%87\" >\u4eca\u65e5\u76ee\u6807<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><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%e5%a4%9a%e4%b8%aa%e5%87%bd%e6%95%b0%e5%9b%be%e5%83%8f\/#%E5%9B%BE%E5%83%8F%E9%A2%84%E8%A7%88\" >\u56fe\u50cf\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-4\" href=\"https:\/\/randengzhe.cn\/wordpress\/2026\/05\/02\/day3-sfml%e7%9b%b4%e8%a7%92%e5%9d%90%e6%a0%87%e5%a4%9a%e4%b8%aa%e5%87%bd%e6%95%b0%e5%9b%be%e5%83%8f\/#%E5%AE%8C%E6%95%B4%E4%BB%A3%E7%A0%81_day3_funccpp\" >\u5b8c\u6574\u4ee3\u7801 day3_func.cpp<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/randengzhe.cn\/wordpress\/2026\/05\/02\/day3-sfml%e7%9b%b4%e8%a7%92%e5%9d%90%e6%a0%87%e5%a4%9a%e4%b8%aa%e5%87%bd%e6%95%b0%e5%9b%be%e5%83%8f\/#%E7%BC%96%E8%AF%91%E8%BF%90%E8%A1%8C\" >\u7f16\u8bd1\u8fd0\u884c<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/randengzhe.cn\/wordpress\/2026\/05\/02\/day3-sfml%e7%9b%b4%e8%a7%92%e5%9d%90%e6%a0%87%e5%a4%9a%e4%b8%aa%e5%87%bd%e6%95%b0%e5%9b%be%e5%83%8f\/#%E4%BB%8A%E6%97%A5%E6%A0%B8%E5%BF%83%E7%9F%A5%E8%AF%86%E7%82%B9\" >\u4eca\u65e5\u6838\u5fc3\u77e5\u8bc6\u70b9<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\r\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"SFML_%E5%AD%A6%E4%B9%A0_%C2%B7_Day3\"><\/span>SFML \u5b66\u4e60 \u00b7 Day3<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E4%BB%8A%E6%97%A5%E7%9B%AE%E6%A0%87\"><\/span>\u4eca\u65e5\u76ee\u6807<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5c01\u88c5<strong>\u6570\u5b66\u5750\u6807 \u2194 \u5c4f\u5e55\u5750\u6807<\/strong>\u8f6c\u6362\u51fd\u6570<\/li>\n\n\n\n<li>\u540c\u65f6\u753b\uff1a\u6b63\u5f26\u3001\u4f59\u5f26\u3001\u4e8c\u6b21\u629b\u7269\u7ebf<\/li>\n\n\n\n<li>\u770b\u61c2\u591a\u51fd\u6570\u7ed8\u56fe\u903b\u8f91\uff0c\u4e3a\u4ee5\u540e\u7269\u7406\u5316\u5b66\u793a\u610f\u56fe\u6253\u5e95<\/li>\n<\/ol>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E5%9B%BE%E5%83%8F%E9%A2%84%E8%A7%88\"><\/span>\u56fe\u50cf\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\/Day3.png\" alt=\"\" class=\"wp-image-2501\" srcset=\"https:\/\/randengzhe.cn\/wordpress\/wp-content\/uploads\/2026\/05\/Day3.png 820w, https:\/\/randengzhe.cn\/wordpress\/wp-content\/uploads\/2026\/05\/Day3-300x240.png 300w, https:\/\/randengzhe.cn\/wordpress\/wp-content\/uploads\/2026\/05\/Day3-768x613.png 768w, https:\/\/randengzhe.cn\/wordpress\/wp-content\/uploads\/2026\/05\/Day3-376x300.png 376w\" sizes=\"auto, (max-width: 820px) 100vw, 820px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E5%AE%8C%E6%95%B4%E4%BB%A3%E7%A0%81_day3_funccpp\"><\/span>\u5b8c\u6574\u4ee3\u7801 day3_func.cpp<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;SFML\/Graphics.hpp>\n#include &lt;cmath>\n\nusing namespace std;\n\n\/\/ \u7a97\u53e3\u5c3a\u5bf8 + \u5750\u6807\u539f\u70b9\uff08\u5c4f\u5e55\u4e2d\u5fc3\uff09\nconst int WIN_W = 800;\nconst int WIN_H = 600;\nconst float OX = WIN_W \/ 2.0f;\nconst float OY = WIN_H \/ 2.0f;\n\n\/\/ \u7f29\u653e\u7cfb\u6570\uff1a1\u5355\u4f4d\u6570\u5b66\u5750\u6807 = 50\u50cf\u7d20\nconst float SCALE = 50.0f;\n\n\/\/ \u6570\u5b66\u5750\u6807 \u2192 \u5c4f\u5e55\u5750\u6807\nsf::Vector2f toScreen(float x, float y)\n{\n    return {\n        OX + x * SCALE,\n        OY - y * SCALE  \/\/ SFML Y\u5411\u4e0b\uff0c\u6570\u5b66Y\u5411\u4e0a\uff0c\u53cd\u5411\n    };\n}\n\nint main()\n{\n    sf::RenderWindow window(sf::VideoMode(WIN_W, WIN_H), L\"SFML Day3 \u591a\u51fd\u6570\u7ed8\u56fe\");\n    window.setFramerateLimit(60);\n\n    \/\/ \u989c\u8272\u5b9a\u4e49\n    sf::Color gridCol(50,50,70);\n    sf::Color axisCol(100,200,255);\n    sf::Color sinCol(255,70,70);\n    sf::Color cosCol(70,255,70);\n    sf::Color paraCol(255,255,70);\n\n    while (window.isOpen())\n    {\n        sf::Event e;\n        while (window.pollEvent(e))\n        {\n            if (e.type == sf::Event::Closed)\n                window.close();\n        }\n\n        window.clear(sf::Color(15,15,25));\n\n        \/\/ 1. \u753b\u7f51\u683c\n        for (int x = 0; x &lt;= WIN_W; x += 50)\n        {\n            sf::Vertex l&#91;] = {{{(float)x,0},gridCol}, {{(float)x,WIN_H},gridCol}};\n            window.draw(l,2,sf::Lines);\n        }\n        for (int y = 0; y &lt;= WIN_H; y += 50)\n        {\n            sf::Vertex l&#91;] = {{{0,(float)y},gridCol}, {{WIN_W,(float)y},gridCol}};\n            window.draw(l,2,sf::Lines);\n        }\n\n        \/\/ 2. \u753b\u5750\u6807\u8f74\n        sf::Vertex xAxis&#91;] = {toScreen(-8,0), toScreen(8,0)};\n        sf::Vertex yAxis&#91;] = {toScreen(0,-6), toScreen(0,6)};\n        xAxis&#91;0].color = axisCol;\n        xAxis&#91;1].color = axisCol;\n        yAxis&#91;0].color = axisCol;\n        yAxis&#91;1].color = axisCol;\n        window.draw(xAxis,2,sf::Lines);\n        window.draw(yAxis,2,sf::Lines);\n\n        \/\/ 3. \u753b\u6b63\u5f26\u51fd\u6570 y=sin(x)\n        for (float x = -7; x &lt; 7; x += 0.02f)\n        {\n            float y = sin(x);\n            sf::CircleShape p(1.4f);\n            p.setPosition(toScreen(x,y));\n            p.setFillColor(sinCol);\n            window.draw(p);\n        }\n\n        \/\/ 4. \u753b\u4f59\u5f26\u51fd\u6570 y=cos(x)\n        for (float x = -7; x &lt; 7; x += 0.02f)\n        {\n            float y = cos(x);\n            sf::CircleShape p(1.4f);\n            p.setPosition(toScreen(x,y));\n            p.setFillColor(cosCol);\n            window.draw(p);\n        }\n\n        \/\/ 5. \u753b\u629b\u7269\u7ebf y = 0.2*x*x\n        for (float x = -5; x &lt; 5; x += 0.02f)\n        {\n            float y = 0.2f * x * x;\n            sf::CircleShape p(1.4f);\n            p.setPosition(toScreen(x,y));\n            p.setFillColor(paraCol);\n            window.draw(p);\n        }\n\n        window.display();\n    }\n    return 0;\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E7%BC%96%E8%AF%91%E8%BF%90%E8%A1%8C\"><\/span>\u7f16\u8bd1\u8fd0\u884c<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Makefile \u8ffd\u52a0\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>day3: day3_func.o\n    $(CXX) $(CXXFLAGS) -o day3 day3_func.o $(LIBS)<\/code><\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u6267\u884c\uff1a<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>make day3\n.\/day3<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E4%BB%8A%E6%97%A5%E6%A0%B8%E5%BF%83%E7%9F%A5%E8%AF%86%E7%82%B9\"><\/span>\u4eca\u65e5\u6838\u5fc3\u77e5\u8bc6\u70b9<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5c01\u88c5 <code>toScreen()<\/code> \u7edf\u4e00\u5750\u6807\u8f6c\u6362\uff0c\u4ee5\u540e\u6240\u6709\u6570\u5b66\/\u7269\u7406\u56fe\u90fd\u590d\u7528\u5b83<\/li>\n\n\n\n<li>\u7528 <code>SCALE<\/code> \u63a7\u5236\u6574\u4f53\u653e\u5927\u7f29\u5c0f\uff0c\u6539\u4e00\u4e2a\u6570\u5168\u5c40\u751f\u6548<\/li>\n\n\n\n<li>\u540c\u65f6\u7ed8\u5236\u4e09\u6761\u4e0d\u540c\u51fd\u6570\uff0c\u7528\u989c\u8272\u533a\u5206\uff0c\u9002\u5408\u6559\u5b66\u6f14\u793a<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd0\u884c\u6210\u529f\u540e\u56de\u590d\uff1a<strong>Day3 \u4e09\u4e2a\u51fd\u6570\u90fd\u51fa\u6765\u4e86<\/strong><br>\u6211\u63a5\u7740\u5e26\u4f60\u505a Day4\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u9f20\u6807\u70b9\u51fb\u62fe\u53d6\u6570\u5b66\u5750\u6807<\/li>\n\n\n\n<li>\u952e\u76d8\u6309\u952e\u63a7\u5236\u5e73\u79fb\u3001\u7f29\u653e<\/li>\n\n\n\n<li>\u4e3a\u540e\u9762\u7269\u7406\u5b9e\u9a8c\u3001\u5316\u5b66\u793a\u610f\u56fe\u505a\u4ea4\u4e92\u94fa\u57ab<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>SFML \u5b66\u4e60 \u00b7 Day3 \u4eca\u65e5\u76ee\u6807 \u56fe\u50cf\u9884\u89c8  &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\":\"AAAq+KS6jwv4A7\/E5OEI+KS6jwsD\/8Tk4QgAlcPMtwb4pLqPC+kB1cPMtwYAzAUGHAAKAgEBCABIAgUAQkgyAQEIAkJIABgBAQgASA4CAQEIAkoAkgEBAQgCSgAsAQEIAkrOAogDAQEIAkJIADQBAQgCPAokDCgEKAIsAiwCPAI8BCwCNAQcAo4BAwEYAi4CmAECDAMABBQDAZoCAoIBBBYCgAEChgECgAECgAEChAEENgIKAigChgECEgKYAQI+AhIElAEEIgKeAQISAqQCAo4BAhICngECEgKkAgKOAQISBCQCugECugECggECggECggECggECjgECjgEEOAKgAQISAjoCiAECkgEChgECNgISBDgCoAECEgI6AogBApIBAoYBAjYCEgQ8AqABAhIChgECiAECkgECiAECNgISBDICCgIaAvxQAIJRAQEIAkJIABgBAQgASA4CAQEIAkpQNgEBCAIiAm4AlgIBAQgBAEgQAgEBCAJKUiYBAQgCEgJeAC4BAQgCQkgAHgEBCABIDgIBAQgCSgCuAQEBCAJKAJoBAQEIAkrYA5QEAQEIAkJIALwBAQEIAEgOAgEBCAJKACIBAQgCSgAkAQEIAkrkY6hk5mS+dAyyBAgmCMgW9GDMAkKs+AEBAQgASApIBAIUXCABAQgASPaFAQyWiAEDAAQDAQQMAgQDARQDAAQCCPoDBAIBBOT6AWSs\/QEKBBACBAMBFAr2\/gEAinou9HoCNlA0QoL5Aer4ARJClAFCLkK29gFYlgX2BML2AUI2QoRRQhpCEkIoQpgCQhRCFkIwQiBCEkKwAUKcAUI+Qr4BQhJCJEImQoqjAQL6Bsr5AS40LC8APwAwNiCQAQQaMJoBDgQYBJwChAEaggGIAYMBAIYBOgwqiAEUmgGAARSYASagARSmApABFKABFKYCkAEUKL0BAIUBApEBADyiARQ8igGUAYgBOBQ8ogEUPIoBlAGIATgUgAGiARSIAYoBlAGKATgUNgwcggKsAu5ZApYBCLgEAJBwDAESlogBCgQQAgQDARQK7IQBLsB0LjQsLwA\/ADA2IJABBBowmgEOBBgEnAKEARqCAYgBgwEAhgE6DCqIARSaAYABFJgBJqABFKYCkAEUoAEUpgKQARQovQEAhQECkQEAPKIBFDyKAZQBiAE4FDyiARQ8igGUAYgBOBSAAaIBFIgBigGUAYoBOBQ2DByCAqwCzgQoACEBJwABACcBKAYnACgBIQAoACcABwAhACgAIQAnASEAJwChAKgABAAoAIcAIQAoAScBBAAoACcAhwAhACgBJwAoAScABwAhACgBJwEEACcAhwAhACgBJwEEACcAhwAhACgBJwEEACcAhwAhACgBJwEEACgAJwCHACEAKAEnAQQAhK0BJwCHACEAKAEnAQQAKAAnAIcAIQAoAScAKAEnAAcAIQAoAScBBAAnAIcAIQAoAScBBACEAScAhwAhACgBJwAoAicABwAhACgBJwEEACcAhwAhACgBJwEEAIQBJwCHACEAKAEnAQQAKAAnAIcAIQAoAScAKAEnAAcAIQAoAScBBAAnAIcAIQAoAScBBAAnAIcAIQAoAScBBAAnAIcAIQAoAScBBAAoACcAhwAhACgBJwAoAScABwAhACgBJwEEACcAhwAhACgBJwEEACcAhwAhACgBJwEEACcARACEAIEABACEAYEAhACBAIQBgQAAAKEAxwAhACgAIQAnASEAJwAEAKEAqAAhAKgAxwAhACgAIQAnACEBJwDEAcEAxADBAMQAwQDEAMEAxAbBAMQAwQDEAMEAxAChAKgAKAAnACgAIQAoAqgBxAqoACgAIQKhACECxAGhASEAqAAoAKgAKACoACgAqAAoAKgAKACoACgAqAAoAKgAKACoACgAqAAoAKgAKACoACgAqAAoAKgAKACoACgAqAAoAKgAKACoACgAqAAoAKgAKACoACgAqAAoAKgAKACoACgAqAAoAKgAKACoACgAoQGoAMRYqJphlV1zdGF0ZXZlcnNpb25kb2N1bWVudGRhdGVkb2N1bWVudHN0YXR1c2RvY3VtZW50dGl0bGVkb2N1bWVudGNvbnRlbnRkb2N1bWVudGV4Y2VycHRkb2N1bWVudGF1dGhvcmRvY3VtZW50ZmVhdHVyZWRfbWVkaWFkb2N1bWVudGNvbW1lbnRfc3RhdHVzZG9jdW1lbnRwaW5nX3N0YXR1c2RvY3VtZW50c3RpY2t5ZG9jdW1lbnR0ZW1wbGF0ZWRvY3VtZW50Zm9ybWF0ZG9jdW1lbnRtZXRhX2pldHBhY2tfbWVtYmVyc2hpcHNfY29udGFpbnNfcGFpZF9jb250ZW50Zm9vdG5vdGVzZG9jdW1lbnRjYXRlZ29yaWVzZG9jdW1lbnR0YWdzZG9jdW1lbnRibG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRkcm9wQ2FwaW5uZXJCbG9ja3NTRk1MIOWtpuS5oCDCtyBEYXkzbGV2ZWxjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnTku4rml6Xnm67moIdsZXZlbGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNvcmRlcmVkdmFsdWVzaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnTlsIHoo4U8c3Ryb25nPuaVsOWtpuWdkOaghyDihpQg5bGP5bmV5Z2Q5qCHPC9zdHJvbmc+6L2s5o2i5Ye95pWwaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnTlkIzml7bnlLvvvJrmraPlvKbjgIHkvZnlvKbjgIHkuozmrKHmipvniannur9pbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudOeci+aHguWkmuWHveaVsOe7mOWbvumAu+i+ke+8jOS4uuS7peWQjueJqeeQhuWMluWtpuekuuaEj+WbvuaJk+W6lWlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW505a6M5pW05Luj56CBIGRheTNfZnVuYy5jcHBsZXZlbGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50I2luY2x1ZGUgJmx0O1NGTUwvR3JhcGhpY3MuaHBwJmd0OwojaW5jbHVkZSAmbHQ7Y21hdGgmZ3Q7Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKLy8g56qX5Y+j5bC65a+4ICsg5Z2Q5qCH5Y6f54K577yI5bGP5bmV5Lit5b+D77yJCmNvbnN0IGludCBXSU5fVyA9IDgwMDsKY29uc3QgaW50IFdJTl9IID0gNjAwOwpjb25zdCBmbG9hdCBPWCA9IFdJTl9XIC8gMi4wZjsKY29uc3QgZmxvYXQgT1kgPSBXSU5fSCAvIDIuMGY7CgovLyDnvKnmlL7ns7vmlbDvvJox5Y2V5L2N5pWw5a2m5Z2Q5qCHID0gNTDlg4\/ntKAKY29uc3QgZmxvYXQgU0NBTEUgPSA1MC4wZjsKCi8vIOaVsOWtpuWdkOaghyDihpIg5bGP5bmV5Z2Q5qCHCnNmOjpWZWN0b3IyZiB0b1NjcmVlbihmbG9hdCB4LCBmbG9hdCB5KQp7CiAgICByZXR1cm4gewogICAgICAgIE9YICsgeCAqIFNDQUxFLAogICAgICAgIE9ZIC0geSAqIFNDQUxFICAvLyBTRk1MIFnlkJHkuIvvvIzmlbDlraZZ5ZCR5LiK77yM5Y+N5ZCRCiAgICB9Owp9CgppbnQgbWFpbigpCnsKICAgIHNmOjpSZW5kZXJXaW5kb3cgd2luZG93KHNmOjpWaWRlb01vZGUoV0lOX1csIFdJTl9IKSwgTCJTRk1MIERheTMg5aSa5Ye95pWw57uY5Zu+Iik7CiAgICB3aW5kb3cuc2V0RnJhbWVyYXRlTGltaXQoNjApOwoKICAgIC8vIOminOiJsuWumuS5iQogICAgc2Y6OkNvbG9yIGdyaWRDb2woNTAsNTAsNzApOwogICAgc2Y6OkNvbG9yIGF4aXNDb2woMTAwLDIwMCwyNTUpOwogICAgc2Y6OkNvbG9yIHNpbkNvbCgyNTUsNzAsNzApOwogICAgc2Y6OkNvbG9yIGNvc0NvbCg3MCwyNTUsNzApOwogICAgc2Y6OkNvbG9yIHBhcmFDb2woMjU1LDI1NSw3MCk7CgogICAgd2hpbGUgKHdpbmRvdy5pc09wZW4oKSkKICAgIHsKICAgICAgICBzZjo6RXZlbnQgZTsKICAgICAgICB3aGlsZSAod2luZG93LnBvbGxFdmVudChlKSkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChlLnR5cGUgPT0gc2Y6OkV2ZW50OjpDbG9zZWQpCiAgICAgICAgICAgICAgICB3aW5kb3cuY2xvc2UoKTsKICAgICAgICB9CgogICAgICAgIHdpbmRvdy5jbGVhcihzZjo6Q29sb3IoMTUsMTUsMjUpKTsKCiAgICAgICAgLy8gMS4g55S7572R5qC8CiAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggJmx0Oz0gV0lOX1c7IHggKz0gNTApCiAgICAgICAgewogICAgICAgICAgICBzZjo6VmVydGV4IGxbXSA9IHt7eyhmbG9hdCl4LDB9LGdyaWRDb2x9LCB7eyhmbG9hdCl4LFdJTl9IfSxncmlkQ29sfX07CiAgICAgICAgICAgIHdpbmRvdy5kcmF3KGwsMixzZjo6TGluZXMpOwogICAgICAgIH0KICAgICAgICBmb3IgKGludCB5ID0gMDsgeSAmbHQ7PSBXSU5fSDsgeSArPSA1MCkKICAgICAgICB7CiAgICAgICAgICAgIHNmOjpWZXJ0ZXggbFtdID0ge3t7MCwoZmxvYXQpeX0sZ3JpZENvbH0sIHt7V0lOX1csKGZsb2F0KXl9LGdyaWRDb2x9fTsKICAgICAgICAgICAgd2luZG93LmRyYXcobCwyLHNmOjpMaW5lcyk7CiAgICAgICAgfQoKICAgICAgICAvLyAyLiDnlLvlnZDmoIfovbQKICAgICAgICBzZjo6VmVydGV4IHhBeGlzW10gPSB7dG9TY3JlZW4oLTgsMCksIHRvU2NyZWVuKDgsMCl9OwogICAgICAgIHNmOjpWZXJ0ZXggeUF4aXNbXSA9IHt0b1NjcmVlbigwLC02KSwgdG9TY3JlZW4oMCw2KX07CiAgICAgICAgeEF4aXNbMF0uY29sb3IgPSBheGlzQ29sOwogICAgICAgIHhBeGlzWzFdLmNvbG9yID0gYXhpc0NvbDsKICAgICAgICB5QXhpc1swXS5jb2xvciA9IGF4aXNDb2w7CiAgICAgICAgeUF4aXNbMV0uY29sb3IgPSBheGlzQ29sOwogICAgICAgIHdpbmRvdy5kcmF3KHhBeGlzLDIsc2Y6OkxpbmVzKTsKICAgICAgICB3aW5kb3cuZHJhdyh5QXhpcywyLHNmOjpMaW5lcyk7CgogICAgICAgIC8vIDMuIOeUu+ato+W8puWHveaVsCB5PXNpbih4KQogICAgICAgIGZvciAoZmxvYXQgeCA9IC03OyB4ICZsdDsgNzsgeCArPSAwLjAyZikKICAgICAgICB7CiAgICAgICAgICAgIGZsb2F0IHkgPSBzaW4oeCk7CiAgICAgICAgICAgIHNmOjpDaXJjbGVTaGFwZSBwKDEuNGYpOwogICAgICAgICAgICBwLnNldFBvc2l0aW9uKHRvU2NyZWVuKHgseSkpOwogICAgICAgICAgICBwLnNldEZpbGxDb2xvcihzaW5Db2wpOwogICAgICAgICAgICB3aW5kb3cuZHJhdyhwKTsKICAgICAgICB9CgogICAgICAgIC8vIDQuIOeUu+S9meW8puWHveaVsCB5PWNvcyh4KQogICAgICAgIGZvciAoZmxvYXQgeCA9IC03OyB4ICZsdDsgNzsgeCArPSAwLjAyZikKICAgICAgICB7CiAgICAgICAgICAgIGZsb2F0IHkgPSBjb3MoeCk7CiAgICAgICAgICAgIHNmOjpDaXJjbGVTaGFwZSBwKDEuNGYpOwogICAgICAgICAgICBwLnNldFBvc2l0aW9uKHRvU2NyZWVuKHgseSkpOwogICAgICAgICAgICBwLnNldEZpbGxDb2xvcihjb3NDb2wpOwogICAgICAgICAgICB3aW5kb3cuZHJhdyhwKTsKICAgICAgICB9CgogICAgICAgIC8vIDUuIOeUu+aKm+eJqee6vyB5ID0gMC4yKngqeAogICAgICAgIGZvciAoZmxvYXQgeCA9IC01OyB4ICZsdDsgNTsgeCArPSAwLjAyZikKICAgICAgICB7CiAgICAgICAgICAgIGZsb2F0IHkgPSAwLjJmICogeCAqIHg7CiAgICAgICAgICAgIHNmOjpDaXJjbGVTaGFwZSBwKDEuNGYpOwogICAgICAgICAgICBwLnNldFBvc2l0aW9uKHRvU2NyZWVuKHgseSkpOwogICAgICAgICAgICBwLnNldEZpbGxDb2xvcihwYXJhQ29sKTsKICAgICAgICAgICAgd2luZG93LmRyYXcocCk7CiAgICAgICAgfQoKICAgICAgICB3aW5kb3cuZGlzcGxheSgpOwogICAgfQogICAgcmV0dXJuIDA7Cn1pbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudOe8luivkei\/kOihjGxldmVsaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc29yZGVyZWR2YWx1ZXNpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudE1ha2VmaWxlIOi\/veWKoO+8mmlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50ZGF5MzogZGF5M19mdW5jLm8KICAgICQoQ1hYKSAkKENYWEZMQUdTKSAtbyBkYXkzIGRheTNfZnVuYy5vICQoTElCUylpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzb3JkZXJlZHZhbHVlc3N0YXJ0aW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnTmiafooYzvvJppbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudG1ha2UgZGF5MwouL2RheTNpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudOS7iuaXpeaguOW\/g+efpeivhueCuWxldmVsaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc29yZGVyZWR2YWx1ZXNpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudOWwgeijhSA8Y29kZT50b1NjcmVlbigpPC9jb2RlPiDnu5\/kuIDlnZDmoIfovazmjaLvvIzku6XlkI7miYDmnInmlbDlraYv54mp55CG5Zu+6YO95aSN55So5a6DaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnTnlKggPGNvZGU+U0NBTEU8L2NvZGU+IOaOp+WItuaVtOS9k+aUvuWkp+e8qeWwj++8jOaUueS4gOS4quaVsOWFqOWxgOeUn+aViGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW505ZCM5pe257uY5Yi25LiJ5p2h5LiN5ZCM5Ye95pWw77yM55So6aKc6Imy5Yy65YiG77yM6YCC5ZCI5pWZ5a2m5ryU56S6aW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnTov5DooYzmiJDlip\/lkI7lm57lpI3vvJo8c3Ryb25nPkRheTMg5LiJ5Liq5Ye95pWw6YO95Ye65p2l5LqGPC9zdHJvbmc+PGJyPuaIkeaOpeedgOW4puS9oOWBmiBEYXk077yaZHJvcENhcGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNvcmRlcmVkdmFsdWVzaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnTpvKDmoIfngrnlh7vmi77lj5bmlbDlrablnZDmoIdpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudOmUruebmOaMiemUruaOp+WItuW5s+enu+OAgee8qeaUvmlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW505Li65ZCO6Z2i54mp55CG5a6e6aqM44CB5YyW5a2m56S65oSP5Zu+5YGa5Lqk5LqS6ZO65Z6raW5uZXJCbG9ja3NEYXkzIFNGTUwrPCEtLSB3cDpoZWFkaW5nIHsibGV2ZWwiOjF9IC0tPgo8aDEgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPlNGTUwg5a2m5LmgIMK3IERheTM8L2gxPgo8IS0tIC93cDpoZWFkaW5nIC0tPgoKPCEtLSB3cDpoZWFkaW5nIC0tPgo8aDIgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPuS7iuaXpeebruaghzwvaDI+CjwhLS0gL3dwOmhlYWRpbmcgLS0+Cgo8IS0tIHdwOmxpc3QgeyJvcmRlcmVkIjp0cnVlfSAtLT4KPG9sIGNsYXNzPSJ3cC1ibG9jay1saXN0Ij48IS0tIHdwOmxpc3QtaXRlbSAtLT4KPGxpPuWwgeijhTxzdHJvbmc+5pWw5a2m5Z2Q5qCHIOKGlCDlsY\/luZXlnZDmoIc8L3N0cm9uZz7ovazmjaLlh73mlbA8L2xpPgo8IS0tIC93cDpsaXN0LWl0ZW0gLS0+Cgo8IS0tIHdwOmxpc3QtaXRlbSAtLT4KPGxpPuWQjOaXtueUu++8muato+W8puOAgeS9meW8puOAgeS6jOasoeaKm+eJqee6vzwvbGk+CjwhLS0gL3dwOmxpc3QtaXRlbSAtLT4KCjwhLS0gd3A6bGlzdC1pdGVtIC0tPgo8bGk+55yL5oeC5aSa5Ye95pWw57uY5Zu+6YC76L6R77yM5Li65Lul5ZCO54mp55CG5YyW5a2m56S65oSP5Zu+5omT5bqVPC9saT4KPCEtLSAvd3A6bGlzdC1pdGVtIC0tPjwvb2w+CjwhLS0gL3dwOmxpc3QgLS0+Cgo8IS0tIHdwOmhlYWRpbmcgLS0+CjxoMiBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+5a6M5pW05Luj56CBIGRheTNfZnVuYy5jcHA8L2gyPgo8IS0tIC93cDpoZWFkaW5nIC0tPgoKPCEtLSB3cDpjb2RlIC0tPgo8cHJlIGNsYXNzPSJ3cC1ibG9jay1jb2RlIj48Y29kZT4jaW5jbHVkZSAmbHQ7U0ZNTC9HcmFwaGljcy5ocHAKI2luY2x1ZGUgJmx0O2NtYXRoCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKLy8g56qX5Y+j5bC65a+4ICsg5Z2Q5qCH5Y6f54K577yI5bGP5bmV5Lit5b+D77yJCmNvbnN0IGludCBXSU5fVyA9IDgwMDsKY29uc3QgaW50IFdJTl9IID0gNjAwOwpjb25zdCBmbG9hdCBPWCA9IFdJTl9XIC8gMi4wZjsKY29uc3QgZmxvYXQgT1kgPSBXSU5fSCAvIDIuMGY7CgovLyDnvKnmlL7ns7vmlbDvvJox5Y2V5L2N5pWw5a2m5Z2Q5qCHID0gNTDlg4\/ntKAKY29uc3QgZmxvYXQgU0NBTEUgPSA1MC4wZjsKCi8vIOaVsOWtpuWdkOaghyDihpIg5bGP5bmV5Z2Q5qCHCnNmOjpWZWN0b3IyZiB0b1NjcmVlbihmbG9hdCB4LCBmbG9hdCB5KQp7CiAgICByZXR1cm4gewogICAgICAgIE9YICsgeCAqIFNDQUxFLAogICAgICAgIE9ZIC0geSAqIFNDQUxFICAvLyBTRk1MIFnlkJHkuIvvvIzmlbDlraZZ5ZCR5LiK77yM5Y+N5ZCRCiAgICB9Owp9CgppbnQgbWFpbigpCnsKICAgIHNmOjpSZW5kZXJXaW5kb3cgd2luZG93KHNmOjpWaWRlb01vZGUoV0lOX1csIFdJTl9IKSwgTCJTRk1MIERheTMg5aSa5Ye95pWw57uY5Zu+Iik7CiAgICB3aW5kb3cuc2V0RnJhbWVyYXRlTGltaXQoNjApOwoKICAgIC8vIOminOiJsuWumuS5iQogICAgc2Y6OkNvbG9yIGdyaWRDb2woNTAsNTAsNzApOwogICAgc2Y6OkNvbG9yIGF4aXNDb2woMTAwLDIwMCwyNTUpOwogICAgc2Y6OkNvbG9yIHNpbkNvbCgyNTUsNzAsNzApOwogICAgc2Y6OkNvbG9yIGNvc0NvbCg3MCwyNTUsNzApOwogICAgc2Y6OkNvbG9yIHBhcmFDb2woMjU1LDI1NSw3MCk7CgogICAgd2hpbGUgKHdpbmRvdy5pc09wZW4oKSkKICAgIHsKICAgICAgICBzZjo6RXZlbnQgZTsKICAgICAgICB3aGlsZSAod2luZG93LnBvbGxFdmVudChlKSkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChlLnR5cGUgPT0gc2Y6OkV2ZW50OjpDbG9zZWQpCiAgICAgICAgICAgICAgICB3aW5kb3cuY2xvc2UoKTsKICAgICAgICB9CgogICAgICAgIHdpbmRvdy5jbGVhcihzZjo6Q29sb3IoMTUsMTUsMjUpKTsKCiAgICAgICAgLy8gMS4g55S7572R5qC8CiAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggJmx0Oz0gV0lOX1c7IHggKz0gNTApCiAgICAgICAgewogICAgICAgICAgICBzZjo6VmVydGV4IGwmIzkxO10gPSB7e3soZmxvYXQpeCwwfSxncmlkQ29sfSwge3soZmxvYXQpeCxXSU5fSH0sZ3JpZENvbH19OwogICAgICAgICAgICB3aW5kb3cuZHJhdyhsLDIsc2Y6OkxpbmVzKTsKICAgICAgICB9CiAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgJmx0Oz0gV0lOX0g7IHkgKz0gNTApCiAgICAgICAgewogICAgICAgICAgICBzZjo6VmVydGV4IGwmIzkxO10gPSB7e3swLChmbG9hdCl5fSxncmlkQ29sfSwge3tXSU5fVywoZmxvYXQpeX0sZ3JpZENvbH19OwogICAgICAgICAgICB3aW5kb3cuZHJhdyhsLDIsc2Y6OkxpbmVzKTsKICAgICAgICB9CgogICAgICAgIC8vIDIuIOeUu+WdkOagh+i9tAogICAgICAgIHNmOjpWZXJ0ZXggeEF4aXMmIzkxO10gPSB7dG9TY3JlZW4oLTgsMCksIHRvU2NyZWVuKDgsMCl9OwogICAgICAgIHNmOjpWZXJ0ZXggeUF4aXMmIzkxO10gPSB7dG9TY3JlZW4oMCwtNiksIHRvU2NyZWVuKDAsNil9OwogICAgICAgIHhBeGlzJiM5MTswXS5jb2xvciA9IGF4aXNDb2w7CiAgICAgICAgeEF4aXMmIzkxOzFdLmNvbG9yID0gYXhpc0NvbDsKICAgICAgICB5QXhpcyYjOTE7MF0uY29sb3IgPSBheGlzQ29sOwogICAgICAgIHlBeGlzJiM5MTsxXS5jb2xvciA9IGF4aXNDb2w7CiAgICAgICAgd2luZG93LmRyYXcoeEF4aXMsMixzZjo6TGluZXMpOwogICAgICAgIHdpbmRvdy5kcmF3KHlBeGlzLDIsc2Y6OkxpbmVzKTsKCiAgICAgICAgLy8gMy4g55S75q2j5bym5Ye95pWwIHk9c2luKHgpCiAgICAgICAgZm9yIChmbG9hdCB4ID0gLTc7IHggJmx0OyA3OyB4ICs9IDAuMDJmKQogICAgICAgIHsKICAgICAgICAgICAgZmxvYXQgeSA9IHNpbih4KTsKICAgICAgICAgICAgc2Y6OkNpcmNsZVNoYXBlIHAoMS40Zik7CiAgICAgICAgICAgIHAuc2V0UG9zaXRpb24odG9TY3JlZW4oeCx5KSk7CiAgICAgICAgICAgIHAuc2V0RmlsbENvbG9yKHNpbkNvbCk7CiAgICAgICAgICAgIHdpbmRvdy5kcmF3KHApOwogICAgICAgIH0KCiAgICAgICAgLy8gNC4g55S75L2Z5bym5Ye95pWwIHk9Y29zKHgpCiAgICAgICAgZm9yIChmbG9hdCB4ID0gLTc7IHggJmx0OyA3OyB4ICs9IDAuMDJmKQogICAgICAgIHsKICAgICAgICAgICAgZmxvYXQgeSA9IGNvcyh4KTsKICAgICAgICAgICAgc2Y6OkNpcmNsZVNoYXBlIHAoMS40Zik7CiAgICAgICAgICAgIHAuc2V0UG9zaXRpb24odG9TY3JlZW4oeCx5KSk7CiAgICAgICAgICAgIHAuc2V0RmlsbENvbG9yKGNvc0NvbCk7CiAgICAgICAgICAgIHdpbmRvdy5kcmF3KHApOwogICAgICAgIH0KCiAgICAgICAgLy8gNS4g55S75oqb54mp57q\/IHkgPSAwLjIqeCp4CiAgICAgICAgZm9yIChmbG9hdCB4ID0gLTU7IHggJmx0OyA1OyB4ICs9IDAuMDJmKQogICAgICAgIHsKICAgICAgICAgICAgZmxvYXQgeSA9IDAuMmYgKiB4ICogeDsKICAgICAgICAgICAgc2Y6OkNpcmNsZVNoYXBlIHAoMS40Zik7CiAgICAgICAgICAgIHAuc2V0UG9zaXRpb24odG9TY3JlZW4oeCx5KSk7CiAgICAgICAgICAgIHAuc2V0RmlsbENvbG9yKHBhcmFDb2wpOwogICAgICAgICAgICB3aW5kb3cuZHJhdyhwKTsKICAgICAgICB9CgogICAgICAgIHdpbmRvdy5kaXNwbGF5KCk7CiAgICB9CiAgICByZXR1cm4gMDsKfTwvY29kZT48L3ByZT4KPCEtLSAvd3A6Y29kZSAtLT4KCjwhLS0gd3A6aGVhZGluZyAtLT4KPGgyIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj7nvJbor5Hov5DooYw8L2gyPgo8IS0tIC93cDpoZWFkaW5nIC0tPgoKPCEtLSB3cDpsaXN0IHsib3JkZXJlZCI6dHJ1ZX0gLS0+CjxvbCBjbGFzcz0id3AtYmxvY2stbGlzdCI+PCEtLSB3cDpsaXN0LWl0ZW0gLS0+CjxsaT5NYWtlZmlsZSDov73liqDvvJo8L2xpPgo8IS0tIC93cDpsaXN0LWl0ZW0gLS0+PC9vbD4KPCEtLSAvd3A6bGlzdCAtLT4KCjwhLS0gd3A6Y29kZSAtLT4KPHByZSBjbGFzcz0id3AtYmxvY2stY29kZSI+PGNvZGU+ZGF5MzogZGF5M19mdW5jLm8KICAgICQoQ1hYKSAkKENYWEZMQUdTKSAtbyBkYXkzIGRheTNfZnVuYy5vICQoTElCUyk8L2NvZGU+PC9wcmU+CjwhLS0gL3dwOmNvZGUgLS0+Cgo8IS0tIHdwOmxpc3QgeyJvcmRlcmVkIjp0cnVlLCJzdGFydCI6Mn0gLS0+CjxvbCBzdGFydD0iMiIgY2xhc3M9IndwLWJsb2NrLWxpc3QiPjwhLS0gd3A6bGlzdC1pdGVtIC0tPgo8bGk+5omn6KGM77yaPC9saT4KPCEtLSAvd3A6bGlzdC1pdGVtIC0tPjwvb2w+CjwhLS0gL3dwOmxpc3QgLS0+Cgo8IS0tIHdwOmNvZGUgLS0+CjxwcmUgY2xhc3M9IndwLWJsb2NrLWNvZGUiPjxjb2RlPm1ha2UgZGF5MwouL2RheTM8L2NvZGU+PC9wcmU+CjwhLS0gL3dwOmNvZGUgLS0+Cgo8IS0tIHdwOmhlYWRpbmcgLS0+CjxoMiBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+5LuK5pel5qC45b+D55+l6K+G54K5PC9oMj4KPCEtLSAvd3A6aGVhZGluZyAtLT4KCjwhLS0gd3A6bGlzdCB7Im9yZGVyZWQiOnRydWV9IC0tPgo8b2wgY2xhc3M9IndwLWJsb2NrLWxpc3QiPjwhLS0gd3A6bGlzdC1pdGVtIC0tPgo8bGk+5bCB6KOFIDxjb2RlPnRvU2NyZWVuKCk8L2NvZGU+IOe7n+S4gOWdkOagh+i9rOaNou+8jOS7peWQjuaJgOacieaVsOWtpi\/niannkIblm77pg73lpI3nlKjlroM8L2xpPgo8IS0tIC93cDpsaXN0LWl0ZW0gLS0+Cgo8IS0tIHdwOmxpc3QtaXRlbSAtLT4KPGxpPueUqCA8Y29kZT5TQ0FMRTwvY29kZT4g5o6n5Yi25pW05L2T5pS+5aSn57yp5bCP77yM5pS55LiA5Liq5pWw5YWo5bGA55Sf5pWIPC9saT4KPCEtLSAvd3A6bGlzdC1pdGVtIC0tPgoKPCEtLSB3cDpsaXN0LWl0ZW0gLS0+CjxsaT7lkIzml7bnu5jliLbkuInmnaHkuI3lkIzlh73mlbDvvIznlKjpopzoibLljLrliIbvvIzpgILlkIjmlZnlrabmvJTnpLo8L2xpPgo8IS0tIC93cDpsaXN0LWl0ZW0gLS0+PC9vbD4KPCEtLSAvd3A6bGlzdCAtLT4KCjwhLS0gd3A6cGFyYWdyYXBoIC0tPgo8cD7ov5DooYzmiJDlip\/lkI7lm57lpI3vvJo8c3Ryb25nPkRheTMg5LiJ5Liq5Ye95pWw6YO95Ye65p2l5LqGPC9zdHJvbmc+PGJyPuaIkeaOpeedgOW4puS9oOWBmiBEYXk077yaPC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOmxpc3QgLS0+Cjx1bCBjbGFzcz0id3AtYmxvY2stbGlzdCI+PCEtLSB3cDpsaXN0LWl0ZW0gLS0+CjxsaT7pvKDmoIfngrnlh7vmi77lj5bmlbDlrablnZDmoIc8L2xpPgo8IS0tIC93cDpsaXN0LWl0ZW0gLS0+Cgo8IS0tIHdwOmxpc3QtaXRlbSAtLT4KPGxpPumUruebmOaMiemUruaOp+WItuW5s+enu+OAgee8qeaUvjwvbGk+CjwhLS0gL3dwOmxpc3QtaXRlbSAtLT4KCjwhLS0gd3A6bGlzdC1pdGVtIC0tPgo8bGk+5Li65ZCO6Z2i54mp55CG5a6e6aqM44CB5YyW5a2m56S65oSP5Zu+5YGa5Lqk5LqS6ZO65Z6rPC9saT4KPCEtLSAvd3A6bGlzdC1pdGVtIC0tPjwvdWw+CjwhLS0gL3dwOmxpc3QgLS0+55u06KeS5Z2Q5qCHK+WkmuS4quWHveaVsOWbvuWDj2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudGRyb3BDYXBpbm5lckJsb2Nrc+WbvuWDj+mihOiniGxldmVsY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50ZHJvcENhcGlubmVyQmxvY2tzeyJsZXZlbCI6MX0gMSBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+5Zu+5YOP6aKE6KeIPC9oMT4KPCEtLSAvd3A6aGVhZGluZyAtLT4KCjwhLS0gd3A6YWdhIC0tPgo8cD48L3A+CjwhLS0gL3dwOmFnIC0tPgoKPCEtLSB3cDpoZWFkaW5nIC0tPgo8aGFsdGNhcHRpb25pZGxpbmt1cmxzaXplU2x1Z2xpbmtEZXN0aW5hdGlvbmltZSB7ImlkIjoyNTAxLCJzaXplU2x1ZyI6ImZ1bGwiLCJsaW5rRGVzdGludGlvbiI6Im5vbmUifWZpZ3VyZSBjbGFzcz0idy1ibG9jay1pbWFnZSBzaXplLWZ1bGwiaW1nIHNyYz0iaHR0cHM6L3JhbmRlbmd6aGUuY24vd29yZHJlc3Mvd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDUvRGF5My5wbmciIGFsdD0iIiBjbGFzcz0id3AtaW1hZ2UtMjUwMSIvPC9maWd1cmU+aW1lZG9jdW1lbnRzbHVnc3RhdGVzYXZlZEF0c3RhdGVzYXZlZEJ5c3RhdGV2ZXJzaW9uZG9jdW1lbnRzbHVnc3RhdGVzYXZlZEF0c3RhdGVzYXZlZEJ5Pj5zdGF0ZXZlcnNpb25vcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnQ+PGJyPj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj4FBwgECAYIBQgHCAcIBggOCA4ICwgGSAEGCAQqCQgKCAQIBggHBApHAAsOBQgHBAoHBAULCAcECgcGCwgHBAoHIgsIBwQKBw8LCAcECgcWCwgHBAoHEgULCAcECgceBRIGFAIUARYBFgEeAR4CFgEaAg4BJ0EBDAEXASwBBkEAAgpBAY0BASECCwEgASMBIAEgASICGwEFARQBIwEJASwBHwEJAioCEQEvAQkBkgEBJwEJAS8BCQGSAQEnAQkCEgE9AT0BIQEhASEBIQEnAScCHAEwAQkBHQEkASkBIwEbAQkCHAEwAQkBHQEkASkBIwEbAQkCHgEwAQkBIwEkASkBJAEbAQkCGQEFAQ1BAAsIBwQKBwQFCwgHBAoHBgsIBwQKBwwLCAcECgcRATILCAcECgcGBQsIBwQKBwMLCAcECgcJAQYLCAcECkcABQsIBwQKBwYLCAcECgcwCwgHBAoHJgsIBwQKBxcLCAcECgc2BwsIBwQKBwYLCAcECgcKCwgHBAoHSwAIBwQKBxILAQmKCAaZAhOdPwsIBwQKRwALBAUIBwQKRwALDIMBQQEGAQJBAQpBABwDBwIEAwgPAioNDxcPE4cBCQIBCAQFBwUHBQcIBAUHBQdBAAUHTxkFCQhEAggECEQFCEQBCEQDCEQFSABECAhEBghEBghEBghEBghEAxABAwAAAQkAAQECANQBAQcAa0IBAQBBAAIAQQACAEEAAEEAAgBBAAIAQQACAEEAAgBBAAIAQQACAEEAAEEAAgBBAAIAQQAAQQACAEEAAgBBAAIAQQAAQQACAEEAAgBBAAIAQQACAEEAAEEAAgBBAAIAQQACAEEAAgBBAAACFEEBBEFoAkQAAQZBDQIBAgECBEFPA+sDAH0BfQF9AHcEb3BlbncEb3Blbnl3AHcIc3RhbmRhcmR5dwB1AHh3DGNvcmUvaGVhZGluZ30BeHcMY29yZS9oZWFkaW5nfQJ4dwljb3JlL2xpc3R4dwB4dw5jb3JlL2xpc3QtaXRlbXh3DmNvcmUvbGlzdC1pdGVteHcOY29yZS9saXN0LWl0ZW14dwxjb3JlL2hlYWRpbmd9Anh3CWNvcmUvY29kZXh3DGNvcmUvaGVhZGluZ30CeHcJY29yZS9saXN0eHcAeHcOY29yZS9saXN0LWl0ZW14dwljb3JlL2NvZGV4dwljb3JlL2xpc3R4dwB9Anh3DmNvcmUvbGlzdC1pdGVteHcJY29yZS9jb2RleHcMY29yZS9oZWFkaW5nfQJ4dwljb3JlL2xpc3R4dwB4dw5jb3JlL2xpc3QtaXRlbXh3DmNvcmUvbGlzdC1pdGVteHcOY29yZS9saXN0LWl0ZW14dw5jb3JlL3BhcmFncmFwaHl4dwljb3JlL2xpc3R5dwB4dw5jb3JlL2xpc3QtaXRlbXh3DmNvcmUvbGlzdC1pdGVteHcOY29yZS9saXN0LWl0ZW14dwxjb3JlL2hlYWRpbmd9AXh3CmNvcmUvaW1hZ2V3AH2FJ3dDaHR0cHM6Ly9yYW5kZW5nemhlLmNuL3dvcmRwcmVzcy93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wNS9EYXkzLnBuZ3cEZnVsbHcEbm9uZXUBfR53B3B1Ymxpc2h3EzIwMjYtMDUtMDJUMTY6NDI6NDF3Y2RheTMtc2ZtbCVlNyU5YiViNCVlOCVhNyU5MiVlNSU5ZCU5MCVlNiVhMCU4NyVlNSVhNCU5YSVlNCViOCVhYSVlNSU4NyViZCVlNiU5NSViMCVlNSU5YiViZSVlNSU4MyU4ZgkAlQEAdyQ3YjUzMjk3MS0yMjQyLTRjYTctYTMwNi1jZTliZGJjZjlkNWF3NTxoMSBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+U0ZNTCDlrabkuaAgwrcgRGF5MzwvaDE+dyQ1M2ZhODVmNy1kZmUwLTRmY2QtYTI4Ny1iNmU5OGQ0ZWZiYWF3LjxoMiBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+5LuK5pel55uu5qCHPC9oMj53JDI1YmIxODNhLTU3MmMtNDE2ZC04OGZiLTk2ZTMyYzJhMjdhZncjPG9sIGNsYXNzPSJ3cC1ibG9jay1saXN0Ij4KCgoKPC9vbD53JDlkNTQ2ZmE2LWM0M2YtNDNhNC1iMTMzLTg3ZTMzY2Q1ZTE5MndJPGxpPuWwgeijhTxzdHJvbmc+5pWw5a2m5Z2Q5qCHIOKGlCDlsY\/luZXlnZDmoIc8L3N0cm9uZz7ovazmjaLlh73mlbA8L2xpPnckMWY2MjEwMDUtNDc4Zi00MGNkLWJiMGMtM2Q4YThmN2E0MzQwdzY8bGk+5ZCM5pe255S777ya5q2j5bym44CB5L2Z5bym44CB5LqM5qyh5oqb54mp57q\/PC9saT53JDI4MDkyZDM4LTlkMTYtNGFkNC05YTYyLTIwNGFhM2NhOGMwNHdLPGxpPueci+aHguWkmuWHveaVsOe7mOWbvumAu+i+ke+8jOS4uuS7peWQjueJqeeQhuWMluWtpuekuuaEj+WbvuaJk+W6lTwvbGk+dyQyYTc1ZGY2OC03ODA0LTRmMDktYjZmZi05N2U0OGQ3M2ZjZjN3LjxoMSBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+5Zu+5YOP6aKE6KeIPC9oMT53JDMwMjBiODI2LTNlOWQtNGIwZi04ZDgwLTc1MmIyMDJhOGMzOHefATxmaWd1cmUgY2xhc3M9IndwLWJsb2NrLWltYWdlIHNpemUtZnVsbCI+PGltZyBzcmM9Imh0dHBzOi8vcmFuZGVuZ3poZS5jbi93b3JkcHJlc3Mvd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDUvRGF5My5wbmciIGFsdD0iIiBjbGFzcz0id3AtaW1hZ2UtMjUwMSIvPjwvZmlndXJlPnckNmQyMmM4Y2ItZTk4Ny00OTcyLThjZDQtZTBmYWE1MDFhNGE3dzw8aDIgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPuWujOaVtOS7o+eggSBkYXkzX2Z1bmMuY3BwPC9oMj53JDkyMzE5MDU1LWM5ZmYtNGIxMC1iMWJhLTkxNTA1OTM2ZTY3YXf6FTxwcmUgY2xhc3M9IndwLWJsb2NrLWNvZGUiPjxjb2RlPiNpbmNsdWRlICZsdDtTRk1ML0dyYXBoaWNzLmhwcD4KI2luY2x1ZGUgJmx0O2NtYXRoPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCi8vIOeql+WPo+WwuuWvuCArIOWdkOagh+WOn+eCue+8iOWxj+W5leS4reW\/g++8iQpjb25zdCBpbnQgV0lOX1cgPSA4MDA7CmNvbnN0IGludCBXSU5fSCA9IDYwMDsKY29uc3QgZmxvYXQgT1ggPSBXSU5fVyAvIDIuMGY7CmNvbnN0IGZsb2F0IE9ZID0gV0lOX0ggLyAyLjBmOwoKLy8g57yp5pS+57O75pWw77yaMeWNleS9jeaVsOWtpuWdkOaghyA9IDUw5YOP57SgCmNvbnN0IGZsb2F0IFNDQUxFID0gNTAuMGY7CgovLyDmlbDlrablnZDmoIcg4oaSIOWxj+W5leWdkOaghwpzZjo6VmVjdG9yMmYgdG9TY3JlZW4oZmxvYXQgeCwgZmxvYXQgeSkKewogICAgcmV0dXJuIHsKICAgICAgICBPWCArIHggKiBTQ0FMRSwKICAgICAgICBPWSAtIHkgKiBTQ0FMRSAgLy8gU0ZNTCBZ5ZCR5LiL77yM5pWw5a2mWeWQkeS4iu+8jOWPjeWQkQogICAgfTsKfQoKaW50IG1haW4oKQp7CiAgICBzZjo6UmVuZGVyV2luZG93IHdpbmRvdyhzZjo6VmlkZW9Nb2RlKFdJTl9XLCBXSU5fSCksIEwiU0ZNTCBEYXkzIOWkmuWHveaVsOe7mOWbviIpOwogICAgd2luZG93LnNldEZyYW1lcmF0ZUxpbWl0KDYwKTsKCiAgICAvLyDpopzoibLlrprkuYkKICAgIHNmOjpDb2xvciBncmlkQ29sKDUwLDUwLDcwKTsKICAgIHNmOjpDb2xvciBheGlzQ29sKDEwMCwyMDAsMjU1KTsKICAgIHNmOjpDb2xvciBzaW5Db2woMjU1LDcwLDcwKTsKICAgIHNmOjpDb2xvciBjb3NDb2woNzAsMjU1LDcwKTsKICAgIHNmOjpDb2xvciBwYXJhQ29sKDI1NSwyNTUsNzApOwoKICAgIHdoaWxlICh3aW5kb3cuaXNPcGVuKCkpCiAgICB7CiAgICAgICAgc2Y6OkV2ZW50IGU7CiAgICAgICAgd2hpbGUgKHdpbmRvdy5wb2xsRXZlbnQoZSkpCiAgICAgICAgewogICAgICAgICAgICBpZiAoZS50eXBlID09IHNmOjpFdmVudDo6Q2xvc2VkKQogICAgICAgICAgICAgICAgd2luZG93LmNsb3NlKCk7CiAgICAgICAgfQoKICAgICAgICB3aW5kb3cuY2xlYXIoc2Y6OkNvbG9yKDE1LDE1LDI1KSk7CgogICAgICAgIC8vIDEuIOeUu+e9keagvAogICAgICAgIGZvciAoaW50IHggPSAwOyB4ICZsdDs9IFdJTl9XOyB4ICs9IDUwKQogICAgICAgIHsKICAgICAgICAgICAgc2Y6OlZlcnRleCBsJiM5MTtdID0ge3t7KGZsb2F0KXgsMH0sZ3JpZENvbH0sIHt7KGZsb2F0KXgsV0lOX0h9LGdyaWRDb2x9fTsKICAgICAgICAgICAgd2luZG93LmRyYXcobCwyLHNmOjpMaW5lcyk7CiAgICAgICAgfQogICAgICAgIGZvciAoaW50IHkgPSAwOyB5ICZsdDs9IFdJTl9IOyB5ICs9IDUwKQogICAgICAgIHsKICAgICAgICAgICAgc2Y6OlZlcnRleCBsJiM5MTtdID0ge3t7MCwoZmxvYXQpeX0sZ3JpZENvbH0sIHt7V0lOX1csKGZsb2F0KXl9LGdyaWRDb2x9fTsKICAgICAgICAgICAgd2luZG93LmRyYXcobCwyLHNmOjpMaW5lcyk7CiAgICAgICAgfQoKICAgICAgICAvLyAyLiDnlLvlnZDmoIfovbQKICAgICAgICBzZjo6VmVydGV4IHhBeGlzJiM5MTtdID0ge3RvU2NyZWVuKC04LDApLCB0b1NjcmVlbig4LDApfTsKICAgICAgICBzZjo6VmVydGV4IHlBeGlzJiM5MTtdID0ge3RvU2NyZWVuKDAsLTYpLCB0b1NjcmVlbigwLDYpfTsKICAgICAgICB4QXhpcyYjOTE7MF0uY29sb3IgPSBheGlzQ29sOwogICAgICAgIHhBeGlzJiM5MTsxXS5jb2xvciA9IGF4aXNDb2w7CiAgICAgICAgeUF4aXMmIzkxOzBdLmNvbG9yID0gYXhpc0NvbDsKICAgICAgICB5QXhpcyYjOTE7MV0uY29sb3IgPSBheGlzQ29sOwogICAgICAgIHdpbmRvdy5kcmF3KHhBeGlzLDIsc2Y6OkxpbmVzKTsKICAgICAgICB3aW5kb3cuZHJhdyh5QXhpcywyLHNmOjpMaW5lcyk7CgogICAgICAgIC8vIDMuIOeUu+ato+W8puWHveaVsCB5PXNpbih4KQogICAgICAgIGZvciAoZmxvYXQgeCA9IC03OyB4ICZsdDsgNzsgeCArPSAwLjAyZikKICAgICAgICB7CiAgICAgICAgICAgIGZsb2F0IHkgPSBzaW4oeCk7CiAgICAgICAgICAgIHNmOjpDaXJjbGVTaGFwZSBwKDEuNGYpOwogICAgICAgICAgICBwLnNldFBvc2l0aW9uKHRvU2NyZWVuKHgseSkpOwogICAgICAgICAgICBwLnNldEZpbGxDb2xvcihzaW5Db2wpOwogICAgICAgICAgICB3aW5kb3cuZHJhdyhwKTsKICAgICAgICB9CgogICAgICAgIC8vIDQuIOeUu+S9meW8puWHveaVsCB5PWNvcyh4KQogICAgICAgIGZvciAoZmxvYXQgeCA9IC03OyB4ICZsdDsgNzsgeCArPSAwLjAyZikKICAgICAgICB7CiAgICAgICAgICAgIGZsb2F0IHkgPSBjb3MoeCk7CiAgICAgICAgICAgIHNmOjpDaXJjbGVTaGFwZSBwKDEuNGYpOwogICAgICAgICAgICBwLnNldFBvc2l0aW9uKHRvU2NyZWVuKHgseSkpOwogICAgICAgICAgICBwLnNldEZpbGxDb2xvcihjb3NDb2wpOwogICAgICAgICAgICB3aW5kb3cuZHJhdyhwKTsKICAgICAgICB9CgogICAgICAgIC8vIDUuIOeUu+aKm+eJqee6vyB5ID0gMC4yKngqeAogICAgICAgIGZvciAoZmxvYXQgeCA9IC01OyB4ICZsdDsgNTsgeCArPSAwLjAyZikKICAgICAgICB7CiAgICAgICAgICAgIGZsb2F0IHkgPSAwLjJmICogeCAqIHg7CiAgICAgICAgICAgIHNmOjpDaXJjbGVTaGFwZSBwKDEuNGYpOwogICAgICAgICAgICBwLnNldFBvc2l0aW9uKHRvU2NyZWVuKHgseSkpOwogICAgICAgICAgICBwLnNldEZpbGxDb2xvcihwYXJhQ29sKTsKICAgICAgICAgICAgd2luZG93LmRyYXcocCk7CiAgICAgICAgfQoKICAgICAgICB3aW5kb3cuZGlzcGxheSgpOwogICAgfQogICAgcmV0dXJuIDA7Cn08L2NvZGU+PC9wcmU+dyRkMWNiNWI0Mi0xYzZkLTQ2OTctYWMwOC04OWE4MzcyMjM2OGZ3LjxoMiBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+57yW6K+R6L+Q6KGMPC9oMj53JDM1OGFhYWYyLTk1NjEtNGZiMy1iODUyLTM4OTExNzc3M2MxOXcfPG9sIGNsYXNzPSJ3cC1ibG9jay1saXN0Ij48L29sPnckZjEyZDA5M2EtZDFiYS00NWY5LWE1MDItZDAzMTdhYWY2MTU2dxs8bGk+TWFrZWZpbGUg6L+95Yqg77yaPC9saT53JGI4ZWEyOGJhLTY0ZTItNDVhMS05MmU0LTEwNGE3NGVjYjNjZHdyPHByZSBjbGFzcz0id3AtYmxvY2stY29kZSI+PGNvZGU+ZGF5MzogZGF5M19mdW5jLm8KICAgICQoQ1hYKSAkKENYWEZMQUdTKSAtbyBkYXkzIGRheTNfZnVuYy5vICQoTElCUyk8L2NvZGU+PC9wcmU+dyRmN2YxZWI1Mi01MmZkLTRlN2ItYjBkNS01NjdhMmY5NGEwZDZ3KTxvbCBzdGFydD0iMiIgY2xhc3M9IndwLWJsb2NrLWxpc3QiPjwvb2w+dyQ0MjhmODJjMi04YjZlLTQzYjUtODI4Ni05ZmNhZGY5YmRlZjB3EjxsaT7miafooYzvvJo8L2xpPnckMzgzNWJmYmQtZTc2Yy00ZTU3LTg5YjktNjg4ODlmNzlhYjQ3dz48cHJlIGNsYXNzPSJ3cC1ibG9jay1jb2RlIj48Y29kZT5tYWtlIGRheTMKLi9kYXkzPC9jb2RlPjwvcHJlPnckZTljNWY3YTAtNmMxNi00NWJiLWIzMTItMDFmZjhhODQ1YWE5dzc8aDIgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPuS7iuaXpeaguOW\/g+efpeivhueCuTwvaDI+dyQ0ZjRkYjQ0ZC00OWVhLTRiNWItYmM2NC00NmQ4NzIwY2IxMGJ3IzxvbCBjbGFzcz0id3AtYmxvY2stbGlzdCI+CgoKCjwvb2w+dyQ4N2MwMTc4MS04MmEyLTRmNTctYjczMi1mY2NjOWEwMWY5M2F3ZTxsaT7lsIHoo4UgPGNvZGU+dG9TY3JlZW4oKTwvY29kZT4g57uf5LiA5Z2Q5qCH6L2s5o2i77yM5Lul5ZCO5omA5pyJ5pWw5a2mL+eJqeeQhuWbvumDveWkjeeUqOWugzwvbGk+dyRlMjIxYjAxMC03MTM5LTQ2NDAtYWEwNC0wY2NmY2JiMjc2OGF3UzxsaT7nlKggPGNvZGU+U0NBTEU8L2NvZGU+IOaOp+WItuaVtOS9k+aUvuWkp+e8qeWwj++8jOaUueS4gOS4quaVsOWFqOWxgOeUn+aViDwvbGk+dyQ5YTg4OGFmMy0yZGUwLTQ4Y2YtYmRjYS1kOWFkZTUxZTRkNDZ3TjxsaT7lkIzml7bnu5jliLbkuInmnaHkuI3lkIzlh73mlbDvvIznlKjpopzoibLljLrliIbvvIzpgILlkIjmlZnlrabmvJTnpLo8L2xpPnckMWRkNzI4YjgtMDZjOS00ZTcwLTg3N2EtMGE1ZWUyYTA0MzIyd2s8cD7ov5DooYzmiJDlip\/lkI7lm57lpI3vvJo8c3Ryb25nPkRheTMg5LiJ5Liq5Ye95pWw6YO95Ye65p2l5LqGPC9zdHJvbmc+PGJyPuaIkeaOpeedgOW4puS9oOWBmiBEYXk077yaPC9wPnckMTE0NzgyNTUtZDIwYS00ODE2LWI2ZWEtOTYzMTQ2NGYzOTNmdyM8dWwgY2xhc3M9IndwLWJsb2NrLWxpc3QiPgoKCgo8L3VsPnckNTVkN2UyYjQtNTdlMC00ZTdjLWI2ODUtNzI0ZWQ2MDU2MGRmdyc8bGk+6byg5qCH54K55Ye75ou+5Y+W5pWw5a2m5Z2Q5qCHPC9saT53JDU2Y2MwZjA3LTliNTMtNDdjMy04NjZhLTE1MzA3MzBiNzlkZncqPGxpPumUruebmOaMiemUruaOp+WItuW5s+enu+OAgee8qeaUvjwvbGk+dyQ3MTgwN2MwMS0xYjQ3LTRhNGYtYTkxMy1mNTQwZWNjYmM3NzN3PzxsaT7kuLrlkI7pnaLniannkIblrp7pqozjgIHljJblrabnpLrmhI\/lm77lgZrkuqTkupLpk7rlnqs8L2xpPnclaHR0cHM6Ly9yYW5kZW5nemhlLmNuL3dvcmRwcmVzcy9kYXkzL3tCed5\/ig2gAH2Vw8y3BgO4kt3HBY4BAQEBAwwAAwABAAIAAQARAAsABwAoABUAHAAZACIEEgUUARQAFgAWAB4AHgEWABoBDgAnAAEADAAXACwABgABAQoAAQBNACEBCwAgACMAIAAgACIBGwAFABQAIwAJACwAHwAJASoBEQAvAAkAUgAnAAkALwAJAFIAJwAJARIAPQA9ACEAIQAhACEAJwAnARwAMAAJAB0AJAApACMAGwAJARwAMAAJAB0AJAApACMAGwAJAR4AMAAJACMAJAApACQAGwAJARkABQANAAMACwAHABIAFQA0AAgACQANAAgADgAHADYALAAdAD0ABwAQABEAIQGpBQMTA+gfBwEAAQACAAUAAQACAAEAAQFQAAEBAQABARYAAQEBAxwABADbAQG\/ovKwBAIABAIB1aHmmwMCAAA2AQ==\",\"updateId\":756963479}","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[30],"tags":[],"class_list":["post-2502","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\/2502","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=2502"}],"version-history":[{"count":3,"href":"https:\/\/randengzhe.cn\/wordpress\/wp-json\/wp\/v2\/posts\/2502\/revisions"}],"predecessor-version":[{"id":2507,"href":"https:\/\/randengzhe.cn\/wordpress\/wp-json\/wp\/v2\/posts\/2502\/revisions\/2507"}],"wp:attachment":[{"href":"https:\/\/randengzhe.cn\/wordpress\/wp-json\/wp\/v2\/media?parent=2502"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/randengzhe.cn\/wordpress\/wp-json\/wp\/v2\/categories?post=2502"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/randengzhe.cn\/wordpress\/wp-json\/wp\/v2\/tags?post=2502"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}