48 lines
50 KiB
HTML
48 lines
50 KiB
HTML
<!DOCTYPE html>
|
||
<html>
|
||
<meta charset="utf-8">
|
||
<body>
|
||
<script>
|
||
var муром = {};
|
||
var murom = муром;
|
||
муром.модули = [
|
||
|
||
[
|
||
"муром.загрузка_1.0.0",
|
||
"bXVyb20uaW5zdGFsbExvY2FsRm9yYWdlID0gZnVuY3Rpb24oKQp7Ci8qCiAgICBsb2NhbEZvcmFnZSAtLSBPZmZsaW5lIFN0b3JhZ2UsIEltcHJvdmVkCiAgICBWZXJzaW9uIDEuNy4zCiAgICBodHRwczovL2xvY2FsZm9yYWdlLmdpdGh1Yi5pby9sb2NhbEZvcmFnZQogICAgKGMpIDIwMTMtMjAxNyBNb3ppbGxhLCBBcGFjaGUgTGljZW5zZSAyLjAKKi8KIWZ1bmN0aW9uKGEpe2lmKCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmInVuZGVmaW5lZCIhPXR5cGVvZiBtb2R1bGUpbW9kdWxlLmV4cG9ydHM9YSgpO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClkZWZpbmUoW10sYSk7ZWxzZXt2YXIgYjtiPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcyxiLmxvY2FsZm9yYWdlPWEoKX19KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGEoYixjLGQpe2Z1bmN0aW9uIGUoZyxoKXtpZighY1tnXSl7aWYoIWJbZ10pe3ZhciBpPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFoJiZpKXJldHVybiBpKGcsITApO2lmKGYpcmV0dXJuIGYoZywhMCk7dmFyIGo9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrZysiJyIpO3Rocm93IGouY29kZT0iTU9EVUxFX05PVF9GT1VORCIsan12YXIgaz1jW2ddPXtleHBvcnRzOnt9fTtiW2ddWzBdLmNhbGwoay5leHBvcnRzLGZ1bmN0aW9uKGEpe3ZhciBjPWJbZ11bMV1bYV07cmV0dXJuIGUoY3x8YSl9LGssay5leHBvcnRzLGEsYixjLGQpfXJldHVybiBjW2ddLmV4cG9ydHN9Zm9yKHZhciBmPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGc9MDtnPGQubGVuZ3RoO2crKyllKGRbZ10pO3JldHVybiBlfSh7MTpbZnVuY3Rpb24oYSxiLGMpeyhmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYygpe2s9ITA7Zm9yKHZhciBhLGIsYz1sLmxlbmd0aDtjOyl7Zm9yKGI9bCxsPVtdLGE9LTE7KythPGM7KWJbYV0oKTtjPWwubGVuZ3RofWs9ITF9ZnVuY3Rpb24gZChhKXsxIT09bC5wdXNoKGEpfHxrfHxlKCl9dmFyIGUsZj1hLk11dGF0aW9uT2JzZXJ2ZXJ8fGEuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtpZihmKXt2YXIgZz0wLGg9bmV3IGYoYyksaT1hLmRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKTtoLm9ic2VydmUoaSx7Y2hhcmFjdGVyRGF0YTohMH0pLGU9ZnVuY3Rpb24oKXtpLmRhdGE9Zz0rK2clMn19ZWxzZSBpZihhLnNldEltbWVkaWF0ZXx8dm9pZCAwPT09YS5NZXNzYWdlQ2hhbm5lbCllPSJkb2N1bWVudCJpbiBhJiYib25yZWFkeXN0YXRlY2hhbmdlImluIGEuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik/ZnVuY3Rpb24oKXt2YXIgYj1hLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2Iub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7YygpLGIub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLGI9bnVsbH0sYS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoYil9OmZ1bmN0aW9uKCl7c2V0VGltZW91dChjLDApfTtlbHNle3ZhciBqPW5ldyBhLk1lc3NhZ2VDaGFubmVsO2oucG9ydDEub25tZXNzYWdlPWMsZT1mdW5jdGlvbigpe2oucG9ydDIucG9zdE1lc3NhZ2UoMCl9fXZhciBrLGw9W107Yi5leHBvcnRzPWR9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHt9XSwyOltmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGQoKXt9ZnVuY3Rpb24gZShhKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYSl0aHJvdyBuZXcgVHlwZUVycm9yKCJyZXNvbHZlciBtdXN0IGJlIGEgZnVuY3Rpb24iKTt0aGlzLnN0YXRlPXMsdGhpcy5xdWV1ZT1bXSx0aGlzLm91dGNvbWU9dm9pZCAwLGEhPT1kJiZpKHRoaXMsYSl9ZnVuY3Rpb24gZihhLGIsYyl7dGhpcy5wcm9taXNlPWEsImZ1bmN0aW9uIj09dHlwZW9mIGImJih0aGlzLm9uRnVsZmlsbGVkPWIsdGhpcy5jYWxsRnVsZmlsbGVkPXRoaXMub3RoZXJDYWxsRnVsZmlsbGVkKSwiZnVuY3Rpb24iPT10eXBlb2YgYyYmKHRoaXMub25SZWplY3RlZD1jLHRoaXMuY2FsbFJlamVjdGVkPXRoaXMub3RoZXJDYWxsUmVqZWN0ZWQpfWZ1bmN0aW9uIGcoYSxiLGMpe28oZnVuY3Rpb24oKXt2YXIgZDt0cnl7ZD1iKGMpfWNhdGNoKGIpe3JldHVybiBwLnJlamVjdChhLGIpfWQ9PT1hP3AucmVqZWN0KGEsbmV3IFR5cGVFcnJvcigiQ2Fubm90IHJlc29sdmUgcHJvbWlzZSB3aXRoIGl0c2VsZiIpKTpwLnJlc29sdmUoYSxkKX0pfWZ1bmN0aW9uIGgoYSl7dmFyIGI9YSYmYS50aGVuO2lmKGEmJigib2JqZWN0Ij09dHlwZW9mIGF8fCJmdW5jdGlvbiI9PXR5cGVvZiBhKSYmImZ1bmN0aW9uIj09dHlwZW9mIGIpcmV0dXJuIGZ1bmN0aW9uKCl7Yi5hcHBseShhLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGkoYSxiKXtmdW5jdGlvbiBjKGIpe2Z8fChmPSEwLHAucmVqZWN0KGEsYikpfWZ1bmN0aW9uIGQoYil7Znx8KGY9ITAscC5yZXNvbHZlKGEsYikpfWZ1bmN0aW9uIGUoKXtiKGQsYyl9dmFyIGY9ITEsZz1qKGUpOyJlcnJvciI9PT1nLnN0YXR1cyYmYyhnLnZhbHVlKX1mdW5jdGlvbiBqKGEsYil7dmFyIGM9e307dHJ5e2MudmFsdWU9YShiKSxjLnN0YXR1cz0ic3VjY2VzcyJ9Y2F0Y2goYSl7Yy5zdGF0dXM9ImVycm9yIixjLnZhbHVlPWF9cmV0dXJuIGN9ZnVuY3Rpb24gayhhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIHRoaXM/YTpwLnJlc29sdmUobmV3IHRoaXMoZCksYSl9ZnVuY3Rpb24gbChhKXt2YXIgYj1uZXcgdGhpcyhkKTtyZXR1cm4gcC5yZWplY3QoYixhKX1mdW5jdGlvbiBtKGEpe2Z1bmN0aW9uIGIoYSxiKXtmdW5jdGlvbiBkKGEpe2dbYl09YSwrK2ghPT1lfHxmfHwoZj0hMCxwLnJlc29sdmUoaixnKSl9Yy5yZXNvbHZlKGEpLnRoZW4oZCxmdW5jdGlvbihhKXtmfHwoZj0hMCxwLnJlamVjdChqLGEpKX0pfXZhciBjPXRoaXM7aWYoIltvYmplY3QgQXJyYXldIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKSlyZXR1cm4gdGhpcy5yZWplY3QobmV3IFR5cGVFcnJvcigibXVzdCBiZSBhbiBhcnJheSIpKTt2YXIgZT1hLmxlbmd0aCxmPSExO2lmKCFlKXJldHVybiB0aGlzLnJlc29sdmUoW10pO2Zvcih2YXIgZz1uZXcgQXJyYXkoZSksaD0wLGk9LTEsaj1uZXcgdGhpcyhkKTsrK2k8ZTspYihhW2ldLGkpO3JldHVybiBqfWZ1bmN0aW9uIG4oYSl7ZnVuY3Rpb24gYihhKXtjLnJlc29sdmUoYSkudGhlbihmdW5jdGlvbihhKXtmfHwoZj0hMCxwLnJlc29sdmUoaCxhKSl9LGZ1bmN0aW9uKGEpe2Z8fChmPSEwLHAucmVqZWN0KGgsYSkpfSl9dmFyIGM9dGhpcztpZigiW29iamVjdCBBcnJheV0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpKXJldHVybiB0aGlzLnJlamVjdChuZXcgVHlwZUVycm9yKCJtdXN0IGJlIGFuIGFycmF5IikpO3ZhciBlPWEubGVuZ3RoLGY9ITE7aWYoIWUpcmV0dXJuIHRoaXMucmVzb2x2ZShbXSk7Zm9yKHZhciBnPS0xLGg9bmV3IHRoaXMoZCk7KytnPGU7KWIoYVtnXSk7cmV0dXJuIGh9dmFyIG89YSgxKSxwPXt9LHE9WyJSRUpFQ1RFRCJdLHI9WyJGVUxGSUxMRUQiXSxzPVsiUEVORElORyJdO2IuZXhwb3J0cz1lLGUucHJvdG90eXBlLmNhdGNoPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnRoZW4obnVsbCxhKX0sZS5wcm90b3R5cGUudGhlbj1mdW5jdGlvbihhLGIpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBhJiZ0aGlzLnN0YXRlPT09cnx8ImZ1bmN0aW9uIiE9dHlwZW9mIGImJnRoaXMuc3RhdGU9PT1xKXJldHVybiB0aGlzO3ZhciBjPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGQpO2lmKHRoaXMuc3RhdGUhPT1zKXtnKGMsdGhpcy5zdGF0ZT09PXI/YTpiLHRoaXMub3V0Y29tZSl9ZWxzZSB0aGlzLnF1ZXVlLnB1c2gobmV3IGYoYyxhLGIpKTtyZXR1cm4gY30sZi5wcm90b3R5cGUuY2FsbEZ1bGZpbGxlZD1mdW5jdGlvbihhKXtwLnJlc29sdmUodGhpcy5wcm9taXNlLGEpfSxmLnByb3RvdHlwZS5vdGhlckNhbGxGdWxmaWxsZWQ9ZnVuY3Rpb24oYSl7Zyh0aGlzLnByb21pc2UsdGhpcy5vbkZ1bGZpbGxlZCxhKX0sZi5wcm90b3R5cGUuY2FsbFJlamVjdGVkPWZ1bmN0aW9uKGEpe3AucmVqZWN0KHRoaXMucHJvbWlzZSxhKX0sZi5wcm90b3R5cGUub3RoZXJDYWxsUmVqZWN0ZWQ9ZnVuY3Rpb24oYSl7Zyh0aGlzLnByb21pc2UsdGhpcy5vblJlamVjdGVkLGEpfSxwLnJlc29sdmU9ZnVuY3Rpb24oYSxiKXt2YXIgYz1qKGgsYik7aWYoImVycm9yIj09PWMuc3RhdHVzKXJldHVybiBwLnJlamVjdChhLGMudmFsdWUpO3ZhciBkPWMudmFsdWU7aWYoZClpKGEsZCk7ZWxzZXthLnN0YXRlPXIsYS5vdXRjb21lPWI7Zm9yKHZhciBlPS0xLGY9YS5xdWV1ZS5sZW5ndGg7KytlPGY7KWEucXVldWVbZV0uY2FsbEZ1bGZpbGxlZChiKX1yZXR1cm4gYX0scC5yZWplY3Q9ZnVuY3Rpb24oYSxiKXthLnN0YXRlPXEsYS5vdXRjb21lPWI7Zm9yKHZhciBjPS0xLGQ9YS5xdWV1ZS5sZW5ndGg7KytjPGQ7KWEucXVldWVbY10uY2FsbFJlamVjdGVkKGIpO3JldHVybiBhfSxlLnJlc29sdmU9ayxlLnJlamVjdD1sLGUuYWxsPW0sZS5yYWNlPW59LHsxOjF9XSwzOltmdW5jdGlvbihhLGIsYyl7KGZ1bmN0aW9uKGIpeyJ1c2Ugc3RyaWN0IjsiZnVuY3Rpb24iIT10eXBlb2YgYi5Qcm9taXNlJiYoYi5Qcm9taXNlPWEoMikpfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7MjoyfV0sNDpbZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBkKGEsYil7aWYoIShhIGluc3RhbmNlb2YgYikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gZSgpe3RyeXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGluZGV4ZWREQilyZXR1cm4gaW5kZXhlZERCO2lmKCJ1bmRlZmluZWQiIT10eXBlb2Ygd2Via2l0SW5kZXhlZERCKXJldHVybiB3ZWJraXRJbmRleGVkREI7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBtb3pJbmRleGVkREIpcmV0dXJuIG1vekluZGV4ZWREQjtpZigidW5kZWZpbmVkIiE9dHlwZW9mIE9JbmRleGVkREIpcmV0dXJuIE9JbmRleGVkREI7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBtc0luZGV4ZWREQilyZXR1cm4gbXNJbmRleGVkREJ9Y2F0Y2goYSl7cmV0dXJufX1mdW5jdGlvbiBmKCl7dHJ5e2lmKCF1YSlyZXR1cm4hMTt2YXIgYT0idW5kZWZpbmVkIiE9dHlwZW9mIG9wZW5EYXRhYmFzZSYmLyhTYWZhcml8aVBob25lfGlQYWR8aVBvZCkvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiEvQ2hyb21lLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhL0JsYWNrQmVycnkvLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKSxiPSJmdW5jdGlvbiI9PXR5cGVvZiBmZXRjaCYmLTEhPT1mZXRjaC50b1N0cmluZygpLmluZGV4T2YoIltuYXRpdmUgY29kZSIpO3JldHVybighYXx8YikmJiJ1bmRlZmluZWQiIT10eXBlb2YgaW5kZXhlZERCJiYidW5kZWZpbmVkIiE9dHlwZW9mIElEQktleVJhbmdlfWNhdGNoKGEpe3JldHVybiExfX1mdW5jdGlvbiBnKGEsYil7YT1hfHxbXSxiPWJ8fHt9O3RyeXtyZXR1cm4gbmV3IEJsb2IoYSxiKX1jYXRjaChmKXtpZigiVHlwZUVycm9yIiE9PWYubmFtZSl0aHJvdyBmO2Zvcih2YXIgYz0idW5kZWZpbmVkIiE9dHlwZW9mIEJsb2JCdWlsZGVyP0Jsb2JCdWlsZGVyOiJ1bmRlZmluZWQiIT10eXBlb2YgTVNCbG9iQnVpbGRlcj9NU0Jsb2JCdWlsZGVyOiJ1bmRlZmluZWQiIT10eXBlb2YgTW96QmxvYkJ1aWxkZXI/TW96QmxvYkJ1aWxkZXI6V2ViS2l0QmxvYkJ1aWxkZXIsZD1uZXcgYyxlPTA7ZTxhLmxlbmd0aDtlKz0xKWQuYXBwZW5kKGFbZV0pO3JldHVybiBkLmdldEJsb2IoYi50eXBlKX19ZnVuY3Rpb24gaChhLGIpe2ImJmEudGhlbihmdW5jdGlvbihhKXtiKG51bGwsYSl9LGZ1bmN0aW9uKGEpe2IoYSl9KX1mdW5jdGlvbiBpKGEsYixjKXsiZnVuY3Rpb24iPT10eXBlb2YgYiYmYS50aGVuKGIpLCJmdW5jdGlvbiI9PXR5cGVvZiBjJiZhLmNhdGNoKGMpfWZ1bmN0aW9uIGooYSl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBhJiYoY29uc29sZS53YXJuKGErIiB1c2VkIGFzIGEga2V5LCBidXQgaXQgaXMgbm90IGEgc3RyaW5nLiIpLGE9U3RyaW5nKGEpKSxhfWZ1bmN0aW9uIGsoKXtpZihhcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV0pcmV0dXJuIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdfWZ1bmN0aW9uIGwoYSl7Zm9yKHZhciBiPWEubGVuZ3RoLGM9bmV3IEFycmF5QnVmZmVyKGIpLGQ9bmV3IFVpbnQ4QXJyYXkoYyksZT0wO2U8YjtlKyspZFtlXT1hLmNoYXJDb2RlQXQoZSk7cmV0dXJuIGN9ZnVuY3Rpb24gbShhKXtyZXR1cm4gbmV3IHZhKGZ1bmN0aW9uKGIpe3ZhciBjPWEudHJhbnNhY3Rpb24od2EsQmEpLGQ9ZyhbIiJdKTtjLm9iamVjdFN0b3JlKHdhKS5wdXQoZCwia2V5IiksYy5vbmFib3J0PWZ1bmN0aW9uKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpLGIoITEpfSxjLm9uY29tcGxldGU9ZnVuY3Rpb24oKXt2YXIgYT1uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9DaHJvbWVcLyhcZCspLyksYz1uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9FZGdlXC8vKTtiKGN8fCFhfHxwYXJzZUludChhWzFdLDEwKT49NDMpfX0pLmNhdGNoKGZ1bmN0aW9uKCl7cmV0dXJuITF9KX1mdW5jdGlvbiBuKGEpe3JldHVybiJib29sZWFuIj09dHlwZW9mIHhhP3ZhLnJlc29sdmUoeGEpOm0oYSkudGhlbihmdW5jdGlvbihhKXtyZXR1cm4geGE9YX0pfWZ1bmN0aW9uIG8oYSl7dmFyIGI9eWFbYS5uYW1lXSxjPXt9O2MucHJvbWlzZT1uZXcgdmEoZnVuY3Rpb24oYSxiKXtjLnJlc29sdmU9YSxjLnJlamVjdD1ifSksYi5kZWZlcnJlZE9wZXJhdGlvbnMucHVzaChjKSxiLmRiUmVhZHk/Yi5kYlJlYWR5PWIuZGJSZWFkeS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGMucHJvbWlzZX0pOmIuZGJSZWFkeT1jLnByb21pc2V9ZnVuY3Rpb24gcChhKXt2YXIgYj15YVthLm5hbWVdLGM9Yi5kZWZlcnJlZE9wZXJhdGlvbnMucG9wKCk7aWYoYylyZXR1cm4gYy5yZXNvbHZlKCksYy5wcm9taXNlfWZ1bmN0aW9uIHEoYSxiKXt2YXIgYz15YVthLm5hbWVdLGQ9Yy5kZWZlcnJlZE9wZXJhdGlvbnMucG9wKCk7aWYoZClyZXR1cm4gZC5yZWplY3QoYiksZC5wcm9taXNlfWZ1bmN0aW9uIHIoYSxiKXtyZXR1cm4gbmV3IHZhKGZ1bmN0aW9uKGMsZCl7aWYoeWFbYS5uYW1lXT15YVthLm5hbWVdfHxCKCksYS5kYil7aWYoIWIpcmV0dXJuIGMoYS5kYik7byhhKSxhLmRiLmNsb3NlKCl9dmFyIGU9W2EubmFtZV07YiYmZS5wdXNoKGEudmVyc2lvbik7dmFyIGY9dWEub3Blbi5hcHBseSh1YSxlKTtiJiYoZi5vbnVwZ3JhZGVuZWVkZWQ9ZnVuY3Rpb24oYil7dmFyIGM9Zi5yZXN1bHQ7dHJ5e2MuY3JlYXRlT2JqZWN0U3RvcmUoYS5zdG9yZU5hbWUpLGIub2xkVmVyc2lvbjw9MSYmYy5jcmVhdGVPYmplY3RTdG9yZSh3YSl9Y2F0Y2goYyl7aWYoIkNvbnN0cmFpbnRFcnJvciIhPT1jLm5hbWUpdGhyb3cgYztjb25zb2xlLndhcm4oJ1RoZSBkYXRhYmFzZSAiJythLm5hbWUrJyIgaGFzIGJlZW4gdXBncmFkZWQgZnJvbSB2ZXJzaW9uICcrYi5vbGRWZXJzaW9uKyIgdG8gdmVyc2lvbiAiK2IubmV3VmVyc2lvbisnLCBidXQgdGhlIHN0b3JhZ2UgIicrYS5zdG9yZU5hbWUrJyIgYWxyZWFkeSBleGlzdHMuJyl9fSksZi5vbmVycm9yPWZ1bmN0aW9uKGEpe2EucHJldmVudERlZmF1bHQoKSxkKGYuZXJyb3IpfSxmLm9uc3VjY2Vzcz1mdW5jdGlvbigpe2MoZi5yZXN1bHQpLHAoYSl9fSl9ZnVuY3Rpb24gcyhhKXtyZXR1cm4gcihhLCExKX1mdW5jdGlvbiB0KGEpe3JldHVybiByKGEsITApfWZ1bmN0aW9uIHUoYSxiKXtpZighYS5kYilyZXR1cm4hMDt2YXIgYz0hYS5kYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKGEuc3RvcmVOYW1lKSxkPWEudmVyc2lvbjxhLmRiLnZlcnNpb24sZT1hLnZlcnNpb24+YS5kYi52ZXJzaW9uO2lmKGQmJihhLnZlcnNpb24hPT1iJiZjb25zb2xlLndhcm4oJ1RoZSBkYXRhYmFzZSAiJythLm5hbWUrIlwiIGNhbid0IGJlIGRvd25ncmFkZWQgZnJvbSB2ZXJzaW9uICIrYS5kYi52ZXJzaW9uKyIgdG8gdmVyc2lvbiAiK2EudmVyc2lvbisiLiIpLGEudmVyc2lvbj1hLmRiLnZlcnNpb24pLGV8fGMpe2lmKGMpe3ZhciBmPWEuZGIudmVyc2lvbisxO2Y+YS52ZXJzaW9uJiYoYS52ZXJzaW9uPWYpfXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIHYoYSl7cmV0dXJuIG5ldyB2YShmdW5jdGlvbihiLGMpe3ZhciBkPW5ldyBGaWxlUmVhZGVyO2Qub25lcnJvcj1jLGQub25sb2FkZW5kPWZ1bmN0aW9uKGMpe3ZhciBkPWJ0b2EoYy50YXJnZXQucmVzdWx0fHwiIik7Yih7X19sb2NhbF9mb3JhZ2VfZW5jb2RlZF9ibG9iOiEwLGRhdGE6ZCx0eXBlOmEudHlwZX0pfSxkLnJlYWRBc0JpbmFyeVN0cmluZyhhKX0pfWZ1bmN0aW9uIHcoYSl7cmV0dXJuIGcoW2woYXRvYihhLmRhdGEpKV0se3R5cGU6YS50eXBlfSl9ZnVuY3Rpb24geChhKXtyZXR1cm4gYSYmYS5fX2xvY2FsX2ZvcmFnZV9lbmNvZGVkX2Jsb2J9ZnVuY3Rpb24geShhKXt2YXIgYj10aGlzLGM9Yi5faW5pdFJlYWR5KCkudGhlbihmdW5jdGlvbigpe3ZhciBhPXlhW2IuX2RiSW5mby5uYW1lXTtpZihhJiZhLmRiUmVhZHkpcmV0dXJuIGEuZGJSZWFkeX0pO3JldHVybiBpKGMsYSxhKSxjfWZ1bmN0aW9uIHooYSl7byhhKTtmb3IodmFyIGI9eWFbYS5uYW1lXSxjPWIuZm9yYWdlcyxkPTA7ZDxjLmxlbmd0aDtkKyspe3ZhciBlPWNbZF07ZS5fZGJJbmZvLmRiJiYoZS5fZGJJbmZvLmRiLmNsb3NlKCksZS5fZGJJbmZvLmRiPW51bGwpfXJldHVybiBhLmRiPW51bGwscyhhKS50aGVuKGZ1bmN0aW9uKGIpe3JldHVybiBhLmRiPWIsdShhKT90KGEpOmJ9KS50aGVuKGZ1bmN0aW9uKGQpe2EuZGI9Yi5kYj1kO2Zvcih2YXIgZT0wO2U8Yy5sZW5ndGg7ZSsrKWNbZV0uX2RiSW5mby5kYj1kfSkuY2F0Y2goZnVuY3Rpb24oYil7dGhyb3cgcShhLGIpLGJ9KX1mdW5jdGlvbiBBKGEsYixjLGQpe3ZvaWQgMD09PWQmJihkPTEpO3RyeXt2YXIgZT1hLmRiLnRyYW5zYWN0aW9uKGEuc3RvcmVOYW1lLGIpO2MobnVsbCxlKX1jYXRjaChlKXtpZihkPjAmJighYS5kYnx8IkludmFsaWRTdGF0ZUVycm9yIj09PWUubmFtZXx8Ik5vdEZvdW5kRXJyb3IiPT09ZS5uYW1lKSlyZXR1cm4gdmEucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXtpZighYS5kYnx8Ik5vdEZvdW5kRXJyb3IiPT09ZS5uYW1lJiYhYS5kYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKGEuc3RvcmVOYW1lKSYmYS52ZXJzaW9uPD1hLmRiLnZlcnNpb24pcmV0dXJuIGEuZGImJihhLnZlcnNpb249YS5kYi52ZXJzaW9uKzEpLHQoYSl9KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHooYSkudGhlbihmdW5jdGlvbigpe0EoYSxiLGMsZC0xKX0pfSkuY2F0Y2goYyk7YyhlKX19ZnVuY3Rpb24gQigpe3JldHVybntmb3JhZ2VzOltdLGRiOm51bGwsZGJSZWFkeTpudWxsLGRlZmVycmVkT3BlcmF0aW9uczpbXX19ZnVuY3Rpb24gQyhhKXtmdW5jdGlvbiBiKCl7cmV0dXJuIHZhLnJlc29sdmUoKX12YXIgYz10aGlzLGQ9e2RiOm51bGx9O2lmKGEpZm9yKHZhciBlIGluIGEpZFtlXT1hW2VdO3ZhciBmPXlhW2QubmFtZV07Znx8KGY9QigpLHlhW2QubmFtZV09ZiksZi5mb3JhZ2VzLnB1c2goYyksYy5faW5pdFJlYWR5fHwoYy5faW5pdFJlYWR5PWMucmVhZHksYy5yZWFkeT15KTtmb3IodmFyIGc9W10saD0wO2g8Zi5mb3JhZ2VzLmxlbmd0aDtoKyspe3ZhciBpPWYuZm9yYWdlc1toXTtpIT09YyYmZy5wdXNoKGkuX2luaXRSZWFkeSgpLmNhdGNoKGIpKX12YXIgaj1mLmZvcmFnZXMuc2xpY2UoMCk7cmV0dXJuIHZhLmFsbChnKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGQuZGI9Zi5kYixzKGQpfSkudGhlbihmdW5jdGlvbihhKXtyZXR1cm4gZC5kYj1hLHUoZCxjLl9kZWZhdWx0Q29uZmlnLnZlcnNpb24pP3QoZCk6YX0pLnRoZW4oZnVuY3Rpb24oYSl7ZC5kYj1mLmRiPWEsYy5fZGJJbmZvPWQ7Zm9yKHZhciBiPTA7YjxqLmxlbmd0aDtiKyspe3ZhciBlPWpbYl07ZSE9PWMmJihlLl9kYkluZm8uZGI9ZC5kYixlLl9kYkluZm8udmVyc2lvbj1kLnZlcnNpb24pfX0pfWZ1bmN0aW9uIEQoYSxiKXt2YXIgYz10aGlzO2E9aihhKTt2YXIgZD1uZXcgdmEoZnVuY3Rpb24oYixkKXtjLnJlYWR5KCkudGhlbihmdW5jdGlvbigpe0EoYy5fZGJJbmZvLEFhLGZ1bmN0aW9uKGUsZil7aWYoZSlyZXR1cm4gZChlKTt0cnl7dmFyIGc9Zi5vYmplY3RTdG9yZShjLl9kYkluZm8uc3RvcmVOYW1lKSxoPWcuZ2V0KGEpO2gub25zdWNjZXNzPWZ1bmN0aW9uKCl7dmFyIGE9aC5yZXN1bHQ7dm9pZCAwPT09YSYmKGE9bnVsbCkseChhKSYmKGE9dyhhKSksYihhKX0saC5vbmVycm9yPWZ1bmN0aW9uKCl7ZChoLmVycm9yKX19Y2F0Y2goYSl7ZChhKX19KX0pLmNhdGNoKGQpfSk7cmV0dXJuIGgoZCxiKSxkfWZ1bmN0aW9uIEUoYSxiKXt2YXIgYz10aGlzLGQ9bmV3IHZhKGZ1bmN0aW9uKGIsZCl7Yy5yZWFkeSgpLnRoZW4oZnVuY3Rpb24oKXtBKGMuX2RiSW5mbyxBYSxmdW5jdGlvbihlLGYpe2lmKGUpcmV0dXJuIGQoZSk7dHJ5e3ZhciBnPWYub2JqZWN0U3RvcmUoYy5fZGJJbmZvLnN0b3JlTmFtZSksaD1nLm9wZW5DdXJzb3IoKSxpPTE7aC5vbnN1Y2Nlc3M9ZnVuY3Rpb24oKXt2YXIgYz1oLnJlc3VsdDtpZihjKXt2YXIgZD1jLnZhbHVlO3goZCkmJihkPXcoZCkpO3ZhciBlPWEoZCxjLmtleSxpKyspO3ZvaWQgMCE9PWU/YihlKTpjLmNvbnRpbnVlKCl9ZWxzZSBiKCl9LGgub25lcnJvcj1mdW5jdGlvbigpe2QoaC5lcnJvcil9fWNhdGNoKGEpe2QoYSl9fSl9KS5jYXRjaChkKX0pO3JldHVybiBoKGQsYiksZH1mdW5jdGlvbiBGKGEsYixjKXt2YXIgZD10aGlzO2E9aihhKTt2YXIgZT1uZXcgdmEoZnVuY3Rpb24oYyxlKXt2YXIgZjtkLnJlYWR5KCkudGhlbihmdW5jdGlvbigpe3JldHVybiBmPWQuX2RiSW5mbywiW29iamVjdCBCbG9iXSI9PT16YS5jYWxsKGIpP24oZi5kYikudGhlbihmdW5jdGlvbihhKXtyZXR1cm4gYT9iOnYoYil9KTpifSkudGhlbihmdW5jdGlvbihiKXtBKGQuX2RiSW5mbyxCYSxmdW5jdGlvbihmLGcpe2lmKGYpcmV0dXJuIGUoZik7dHJ5e3ZhciBoPWcub2JqZWN0U3RvcmUoZC5fZGJJbmZvLnN0b3JlTmFtZSk7bnVsbD09PWImJihiPXZvaWQgMCk7dmFyIGk9aC5wdXQoYixhKTtnLm9uY29tcGxldGU9ZnVuY3Rpb24oKXt2b2lkIDA9PT1iJiYoYj1udWxsKSxjKGIpfSxnLm9uYWJvcnQ9Zy5vbmVycm9yPWZ1bmN0aW9uKCl7dmFyIGE9aS5lcnJvcj9pLmVycm9yOmkudHJhbnNhY3Rpb24uZXJyb3I7ZShhKX19Y2F0Y2goYSl7ZShhKX19KX0pLmNhdGNoKGUpfSk7cmV0dXJuIGgoZSxjKSxlfWZ1bmN0aW9uIEcoYSxiKXt2YXIgYz10aGlzO2E9aihhKTt2YXIgZD1uZXcgdmEoZnVuY3Rpb24oYixkKXtjLnJlYWR5KCkudGhlbihmdW5jdGlvbigpe0EoYy5fZGJJbmZvLEJhLGZ1bmN0aW9uKGUsZil7aWYoZSlyZXR1cm4gZChlKTt0cnl7dmFyIGc9Zi5vYmplY3RTdG9yZShjLl9kYkluZm8uc3RvcmVOYW1lKSxoPWcuZGVsZXRlKGEpO2Yub25jb21wbGV0ZT1mdW5jdGlvbigpe2IoKX0sZi5vbmVycm9yPWZ1bmN0aW9uKCl7ZChoLmVycm9yKX0sZi5vbmFib3J0PWZ1bmN0aW9uKCl7dmFyIGE9aC5lcnJvcj9oLmVycm9yOmgudHJhbnNhY3Rpb24uZXJyb3I7ZChhKX19Y2F0Y2goYSl7ZChhKX19KX0pLmNhdGNoKGQpfSk7cmV0dXJuIGgoZCxiKSxkfWZ1bmN0aW9uIEgoYSl7dmFyIGI9dGhpcyxjPW5ldyB2YShmdW5jdGlvbihhLGMpe2IucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7QShiLl9kYkluZm8sQmEsZnVuY3Rpb24oZCxlKXtpZihkKXJldHVybiBjKGQpO3RyeXt2YXIgZj1lLm9iamVjdFN0b3JlKGIuX2RiSW5mby5zdG9yZU5hbWUpLGc9Zi5jbGVhcigpO2Uub25jb21wbGV0ZT1mdW5jdGlvbigpe2EoKX0sZS5vbmFib3J0PWUub25lcnJvcj1mdW5jdGlvbigpe3ZhciBhPWcuZXJyb3I/Zy5lcnJvcjpnLnRyYW5zYWN0aW9uLmVycm9yO2MoYSl9fWNhdGNoKGEpe2MoYSl9fSl9KS5jYXRjaChjKX0pO3JldHVybiBoKGMsYSksY31mdW5jdGlvbiBJKGEpe3ZhciBiPXRoaXMsYz1uZXcgdmEoZnVuY3Rpb24oYSxjKXtiLnJlYWR5KCkudGhlbihmdW5jdGlvbigpe0EoYi5fZGJJbmZvLEFhLGZ1bmN0aW9uKGQsZSl7aWYoZClyZXR1cm4gYyhkKTt0cnl7dmFyIGY9ZS5vYmplY3RTdG9yZShiLl9kYkluZm8uc3RvcmVOYW1lKSxnPWYuY291bnQoKTtnLm9uc3VjY2Vzcz1mdW5jdGlvbigpe2EoZy5yZXN1bHQpfSxnLm9uZXJyb3I9ZnVuY3Rpb24oKXtjKGcuZXJyb3IpfX1jYXRjaChhKXtjKGEpfX0pfSkuY2F0Y2goYyl9KTtyZXR1cm4gaChjLGEpLGN9ZnVuY3Rpb24gSihhLGIpe3ZhciBjPXRoaXMsZD1uZXcgdmEoZnVuY3Rpb24oYixkKXtpZihhPDApcmV0dXJuIHZvaWQgYihudWxsKTtjLnJlYWR5KCkudGhlbihmdW5jdGlvbigpe0EoYy5fZGJJbmZvLEFhLGZ1bmN0aW9uKGUsZil7aWYoZSlyZXR1cm4gZChlKTt0cnl7dmFyIGc9Zi5vYmplY3RTdG9yZShjLl9kYkluZm8uc3RvcmVOYW1lKSxoPSExLGk9Zy5vcGVuQ3Vyc29yKCk7aS5vbnN1Y2Nlc3M9ZnVuY3Rpb24oKXt2YXIgYz1pLnJlc3VsdDtpZighYylyZXR1cm4gdm9pZCBiKG51bGwpOzA9PT1hP2IoYy5rZXkpOmg/YihjLmtleSk6KGg9ITAsYy5hZHZhbmNlKGEpKX0saS5vbmVycm9yPWZ1bmN0aW9uKCl7ZChpLmVycm9yKX19Y2F0Y2goYSl7ZChhKX19KX0pLmNhdGNoKGQpfSk7cmV0dXJuIGgoZCxiKSxkfWZ1bmN0aW9uIEsoYSl7dmFyIGI9dGhpcyxjPW5ldyB2YShmdW5jdGlvbihhLGMpe2IucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7QShiLl9kYkluZm8sQWEsZnVuY3Rpb24oZCxlKXtpZihkKXJldHVybiBjKGQpO3RyeXt2YXIgZj1lLm9iamVjdFN0b3JlKGIuX2RiSW5mby5zdG9yZU5hbWUpLGc9Zi5vcGVuQ3Vyc29yKCksaD1bXTtnLm9uc3VjY2Vzcz1mdW5jdGlvbigpe3ZhciBiPWcucmVzdWx0O2lmKCFiKXJldHVybiB2b2lkIGEoaCk7aC5wdXNoKGIua2V5KSxiLmNvbnRpbnVlKCl9LGcub25lcnJvcj1mdW5jdGlvbigpe2MoZy5lcnJvcil9fWNhdGNoKGEpe2MoYSl9fSl9KS5jYXRjaChjKX0pO3JldHVybiBoKGMsYSksY31mdW5jdGlvbiBMKGEsYil7Yj1rLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgYz10aGlzLmNvbmZpZygpO2E9ImZ1bmN0aW9uIiE9dHlwZW9mIGEmJmF8fHt9LGEubmFtZXx8KGEubmFtZT1hLm5hbWV8fGMubmFtZSxhLnN0b3JlTmFtZT1hLnN0b3JlTmFtZXx8Yy5zdG9yZU5hbWUpO3ZhciBkLGU9dGhpcztpZihhLm5hbWUpe3ZhciBmPWEubmFtZT09PWMubmFtZSYmZS5fZGJJbmZvLmRiLGc9Zj92YS5yZXNvbHZlKGUuX2RiSW5mby5kYik6cyhhKS50aGVuKGZ1bmN0aW9uKGIpe3ZhciBjPXlhW2EubmFtZV0sZD1jLmZvcmFnZXM7Yy5kYj1iO2Zvcih2YXIgZT0wO2U8ZC5sZW5ndGg7ZSsrKWRbZV0uX2RiSW5mby5kYj1iO3JldHVybiBifSk7ZD1hLnN0b3JlTmFtZT9nLnRoZW4oZnVuY3Rpb24oYil7aWYoYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKGEuc3RvcmVOYW1lKSl7dmFyIGM9Yi52ZXJzaW9uKzE7byhhKTt2YXIgZD15YVthLm5hbWVdLGU9ZC5mb3JhZ2VzO2IuY2xvc2UoKTtmb3IodmFyIGY9MDtmPGUubGVuZ3RoO2YrKyl7dmFyIGc9ZVtmXTtnLl9kYkluZm8uZGI9bnVsbCxnLl9kYkluZm8udmVyc2lvbj1jfXJldHVybiBuZXcgdmEoZnVuY3Rpb24oYixkKXt2YXIgZT11YS5vcGVuKGEubmFtZSxjKTtlLm9uZXJyb3I9ZnVuY3Rpb24oYSl7ZS5yZXN1bHQuY2xvc2UoKSxkKGEpfSxlLm9udXBncmFkZW5lZWRlZD1mdW5jdGlvbigpe2UucmVzdWx0LmRlbGV0ZU9iamVjdFN0b3JlKGEuc3RvcmVOYW1lKX0sZS5vbnN1Y2Nlc3M9ZnVuY3Rpb24oKXt2YXIgYT1lLnJlc3VsdDthLmNsb3NlKCksYihhKX19KS50aGVuKGZ1bmN0aW9uKGEpe2QuZGI9YTtmb3IodmFyIGI9MDtiPGUubGVuZ3RoO2IrKyl7dmFyIGM9ZVtiXTtjLl9kYkluZm8uZGI9YSxwKGMuX2RiSW5mbyl9fSkuY2F0Y2goZnVuY3Rpb24oYil7dGhyb3cocShhLGIpfHx2YS5yZXNvbHZlKCkpLmNhdGNoKGZ1bmN0aW9uKCl7fSksYn0pfX0pOmcudGhlbihmdW5jdGlvbihiKXtvKGEpO3ZhciBjPXlhW2EubmFtZV0sZD1jLmZvcmFnZXM7Yi5jbG9zZSgpO2Zvcih2YXIgZT0wO2U8ZC5sZW5ndGg7ZSsrKXtkW2VdLl9kYkluZm8uZGI9bnVsbH1yZXR1cm4gbmV3IHZhKGZ1bmN0aW9uKGIsYyl7dmFyIGQ9dWEuZGVsZXRlRGF0YWJhc2UoYS5uYW1lKTtkLm9uZXJyb3I9ZC5vbmJsb2NrZWQ9ZnVuY3Rpb24oYSl7dmFyIGI9ZC5yZXN1bHQ7YiYmYi5jbG9zZSgpLGMoYSl9LGQub25zdWNjZXNzPWZ1bmN0aW9uKCl7dmFyIGE9ZC5yZXN1bHQ7YSYmYS5jbG9zZSgpLGIoYSl9fSkudGhlbihmdW5jdGlvbihhKXtjLmRiPWE7Zm9yKHZhciBiPTA7YjxkLmxlbmd0aDtiKyspcChkW2JdLl9kYkluZm8pfSkuY2F0Y2goZnVuY3Rpb24oYil7dGhyb3cocShhLGIpfHx2YS5yZXNvbHZlKCkpLmNhdGNoKGZ1bmN0aW9uKCl7fSksYn0pfSl9ZWxzZSBkPXZhLnJlamVjdCgiSW52YWxpZCBhcmd1bWVudHMiKTtyZXR1cm4gaChkLGIpLGR9ZnVuY3Rpb24gTSgpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBvcGVuRGF0YWJhc2V9ZnVuY3Rpb24gTihhKXt2YXIgYixjLGQsZSxmLGc9Ljc1KmEubGVuZ3RoLGg9YS5sZW5ndGgsaT0wOyI9Ij09PWFbYS5sZW5ndGgtMV0mJihnLS0sIj0iPT09YVthLmxlbmd0aC0yXSYmZy0tKTt2YXIgaj1uZXcgQXJyYXlCdWZmZXIoZyksaz1uZXcgVWludDhBcnJheShqKTtmb3IoYj0wO2I8aDtiKz00KWM9RGEuaW5kZXhPZihhW2JdKSxkPURhLmluZGV4T2YoYVtiKzFdKSxlPURhLmluZGV4T2YoYVtiKzJdKSxmPURhLmluZGV4T2YoYVtiKzNdKSxrW2krK109Yzw8MnxkPj40LGtbaSsrXT0oMTUmZCk8PDR8ZT4+MixrW2krK109KDMmZSk8PDZ8NjMmZjtyZXR1cm4gan1mdW5jdGlvbiBPKGEpe3ZhciBiLGM9bmV3IFVpbnQ4QXJyYXkoYSksZD0iIjtmb3IoYj0wO2I8Yy5sZW5ndGg7Yis9MylkKz1EYVtjW2JdPj4yXSxkKz1EYVsoMyZjW2JdKTw8NHxjW2IrMV0+PjRdLGQrPURhWygxNSZjW2IrMV0pPDwyfGNbYisyXT4+Nl0sZCs9RGFbNjMmY1tiKzJdXTtyZXR1cm4gYy5sZW5ndGglMz09Mj9kPWQuc3Vic3RyaW5nKDAsZC5sZW5ndGgtMSkrIj0iOmMubGVuZ3RoJTM9PTEmJihkPWQuc3Vic3RyaW5nKDAsZC5sZW5ndGgtMikrIj09IiksZH1mdW5jdGlvbiBQKGEsYil7dmFyIGM9IiI7aWYoYSYmKGM9VWEuY2FsbChhKSksYSYmKCJbb2JqZWN0IEFycmF5QnVmZmVyXSI9PT1jfHxhLmJ1ZmZlciYmIltvYmplY3QgQXJyYXlCdWZmZXJdIj09PVVhLmNhbGwoYS5idWZmZXIpKSl7dmFyIGQsZT1HYTthIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/KGQ9YSxlKz1JYSk6KGQ9YS5idWZmZXIsIltvYmplY3QgSW50OEFycmF5XSI9PT1jP2UrPUthOiJbb2JqZWN0IFVpbnQ4QXJyYXldIj09PWM/ZSs9TGE6IltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIj09PWM/ZSs9TWE6IltvYmplY3QgSW50MTZBcnJheV0iPT09Yz9lKz1OYToiW29iamVjdCBVaW50MTZBcnJheV0iPT09Yz9lKz1QYToiW29iamVjdCBJbnQzMkFycmF5XSI9PT1jP2UrPU9hOiJbb2JqZWN0IFVpbnQzMkFycmF5XSI9PT1jP2UrPVFhOiJbb2JqZWN0IEZsb2F0MzJBcnJheV0iPT09Yz9lKz1SYToiW29iamVjdCBGbG9hdDY0QXJyYXldIj09PWM/ZSs9U2E6YihuZXcgRXJyb3IoIkZhaWxlZCB0byBnZXQgdHlwZSBmb3IgQmluYXJ5QXJyYXkiKSkpLGIoZStPKGQpKX1lbHNlIGlmKCJbb2JqZWN0IEJsb2JdIj09PWMpe3ZhciBmPW5ldyBGaWxlUmVhZGVyO2Yub25sb2FkPWZ1bmN0aW9uKCl7dmFyIGM9RWErYS50eXBlKyJ+IitPKHRoaXMucmVzdWx0KTtiKEdhK0phK2MpfSxmLnJlYWRBc0FycmF5QnVmZmVyKGEpfWVsc2UgdHJ5e2IoSlNPTi5zdHJpbmdpZnkoYSkpfWNhdGNoKGMpe2NvbnNvbGUuZXJyb3IoIkNvdWxkbid0IGNvbnZlcnQgdmFsdWUgaW50byBhIEpTT04gc3RyaW5nOiAiLGEpLGIobnVsbCxjKX19ZnVuY3Rpb24gUShhKXtpZihhLnN1YnN0cmluZygwLEhhKSE9PUdhKXJldHVybiBKU09OLnBhcnNlKGEpO3ZhciBiLGM9YS5zdWJzdHJpbmcoVGEpLGQ9YS5zdWJzdHJpbmcoSGEsVGEpO2lmKGQ9PT1KYSYmRmEudGVzdChjKSl7dmFyIGU9Yy5tYXRjaChGYSk7Yj1lWzFdLGM9Yy5zdWJzdHJpbmcoZVswXS5sZW5ndGgpfXZhciBmPU4oYyk7c3dpdGNoKGQpe2Nhc2UgSWE6cmV0dXJuIGY7Y2FzZSBKYTpyZXR1cm4gZyhbZl0se3R5cGU6Yn0pO2Nhc2UgS2E6cmV0dXJuIG5ldyBJbnQ4QXJyYXkoZik7Y2FzZSBMYTpyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZik7Y2FzZSBNYTpyZXR1cm4gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGYpO2Nhc2UgTmE6cmV0dXJuIG5ldyBJbnQxNkFycmF5KGYpO2Nhc2UgUGE6cmV0dXJuIG5ldyBVaW50MTZBcnJheShmKTtjYXNlIE9hOnJldHVybiBuZXcgSW50MzJBcnJheShmKTtjYXNlIFFhOnJldHVybiBuZXcgVWludDMyQXJyYXkoZik7Y2FzZSBSYTpyZXR1cm4gbmV3IEZsb2F0MzJBcnJheShmKTtjYXNlIFNhOnJldHVybiBuZXcgRmxvYXQ2NEFycmF5KGYpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmtvd24gdHlwZTogIitkKX19ZnVuY3Rpb24gUihhLGIsYyxkKXthLmV4ZWN1dGVTcWwoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTICIrYi5zdG9yZU5hbWUrIiAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSwga2V5IHVuaXF1ZSwgdmFsdWUpIixbXSxjLGQpfWZ1bmN0aW9uIFMoYSl7dmFyIGI9dGhpcyxjPXtkYjpudWxsfTtpZihhKWZvcih2YXIgZCBpbiBhKWNbZF09InN0cmluZyIhPXR5cGVvZiBhW2RdP2FbZF0udG9TdHJpbmcoKTphW2RdO3ZhciBlPW5ldyB2YShmdW5jdGlvbihhLGQpe3RyeXtjLmRiPW9wZW5EYXRhYmFzZShjLm5hbWUsU3RyaW5nKGMudmVyc2lvbiksYy5kZXNjcmlwdGlvbixjLnNpemUpfWNhdGNoKGEpe3JldHVybiBkKGEpfWMuZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24oZSl7UihlLGMsZnVuY3Rpb24oKXtiLl9kYkluZm89YyxhKCl9LGZ1bmN0aW9uKGEsYil7ZChiKX0pfSxkKX0pO3JldHVybiBjLnNlcmlhbGl6ZXI9VmEsZX1mdW5jdGlvbiBUKGEsYixjLGQsZSxmKXthLmV4ZWN1dGVTcWwoYyxkLGUsZnVuY3Rpb24oYSxnKXtnLmNvZGU9PT1nLlNZTlRBWF9FUlI/YS5leGVjdXRlU3FsKCJTRUxFQ1QgbmFtZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUnIEFORCBuYW1lID0gPyIsW2Iuc3RvcmVOYW1lXSxmdW5jdGlvbihhLGgpe2gucm93cy5sZW5ndGg/ZihhLGcpOlIoYSxiLGZ1bmN0aW9uKCl7YS5leGVjdXRlU3FsKGMsZCxlLGYpfSxmKX0sZik6ZihhLGcpfSxmKX1mdW5jdGlvbiBVKGEsYil7dmFyIGM9dGhpczthPWooYSk7dmFyIGQ9bmV3IHZhKGZ1bmN0aW9uKGIsZCl7Yy5yZWFkeSgpLnRoZW4oZnVuY3Rpb24oKXt2YXIgZT1jLl9kYkluZm87ZS5kYi50cmFuc2FjdGlvbihmdW5jdGlvbihjKXtUKGMsZSwiU0VMRUNUICogRlJPTSAiK2Uuc3RvcmVOYW1lKyIgV0hFUkUga2V5ID0gPyBMSU1JVCAxIixbYV0sZnVuY3Rpb24oYSxjKXt2YXIgZD1jLnJvd3MubGVuZ3RoP2Mucm93cy5pdGVtKDApLnZhbHVlOm51bGw7ZCYmKGQ9ZS5zZXJpYWxpemVyLmRlc2VyaWFsaXplKGQpKSxiKGQpfSxmdW5jdGlvbihhLGIpe2QoYil9KX0pfSkuY2F0Y2goZCl9KTtyZXR1cm4gaChkLGIpLGR9ZnVuY3Rpb24gVihhLGIpe3ZhciBjPXRoaXMsZD1uZXcgdmEoZnVuY3Rpb24oYixkKXtjLnJlYWR5KCkudGhlbihmdW5jdGlvbigpe3ZhciBlPWMuX2RiSW5mbztlLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKGMpe1QoYyxlLCJTRUxFQ1QgKiBGUk9NICIrZS5zdG9yZU5hbWUsW10sZnVuY3Rpb24oYyxkKXtmb3IodmFyIGY9ZC5yb3dzLGc9Zi5sZW5ndGgsaD0wO2g8ZztoKyspe3ZhciBpPWYuaXRlbShoKSxqPWkudmFsdWU7aWYoaiYmKGo9ZS5zZXJpYWxpemVyLmRlc2VyaWFsaXplKGopKSx2b2lkIDAhPT0oaj1hKGosaS5rZXksaCsxKSkpcmV0dXJuIHZvaWQgYihqKX1iKCl9LGZ1bmN0aW9uKGEsYil7ZChiKX0pfSl9KS5jYXRjaChkKX0pO3JldHVybiBoKGQsYiksZH1mdW5jdGlvbiBXKGEsYixjLGQpe3ZhciBlPXRoaXM7YT1qKGEpO3ZhciBmPW5ldyB2YShmdW5jdGlvbihmLGcpe2UucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7dm9pZCAwPT09YiYmKGI9bnVsbCk7dmFyIGg9YixpPWUuX2RiSW5mbztpLnNlcmlhbGl6ZXIuc2VyaWFsaXplKGIsZnVuY3Rpb24oYixqKXtqP2coaik6aS5kYi50cmFuc2FjdGlvbihmdW5jdGlvbihjKXtUKGMsaSwiSU5TRVJUIE9SIFJFUExBQ0UgSU5UTyAiK2kuc3RvcmVOYW1lKyIgKGtleSwgdmFsdWUpIFZBTFVFUyAoPywgPykiLFthLGJdLGZ1bmN0aW9uKCl7ZihoKX0sZnVuY3Rpb24oYSxiKXtnKGIpfSl9LGZ1bmN0aW9uKGIpe2lmKGIuY29kZT09PWIuUVVPVEFfRVJSKXtpZihkPjApcmV0dXJuIHZvaWQgZihXLmFwcGx5KGUsW2EsaCxjLGQtMV0pKTtnKGIpfX0pfSl9KS5jYXRjaChnKX0pO3JldHVybiBoKGYsYyksZn1mdW5jdGlvbiBYKGEsYixjKXtyZXR1cm4gVy5hcHBseSh0aGlzLFthLGIsYywxXSl9ZnVuY3Rpb24gWShhLGIpe3ZhciBjPXRoaXM7YT1qKGEpO3ZhciBkPW5ldyB2YShmdW5jdGlvbihiLGQpe2MucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGU9Yy5fZGJJbmZvO2UuZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24oYyl7VChjLGUsIkRFTEVURSBGUk9NICIrZS5zdG9yZU5hbWUrIiBXSEVSRSBrZXkgPSA/IixbYV0sZnVuY3Rpb24oKXtiKCl9LGZ1bmN0aW9uKGEsYil7ZChiKX0pfSl9KS5jYXRjaChkKX0pO3JldHVybiBoKGQsYiksZH1mdW5jdGlvbiBaKGEpe3ZhciBiPXRoaXMsYz1uZXcgdmEoZnVuY3Rpb24oYSxjKXtiLnJlYWR5KCkudGhlbihmdW5jdGlvbigpe3ZhciBkPWIuX2RiSW5mbztkLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKGIpe1QoYixkLCJERUxFVEUgRlJPTSAiK2Quc3RvcmVOYW1lLFtdLGZ1bmN0aW9uKCl7YSgpfSxmdW5jdGlvbihhLGIpe2MoYil9KX0pfSkuY2F0Y2goYyl9KTtyZXR1cm4gaChjLGEpLGN9ZnVuY3Rpb24gJChhKXt2YXIgYj10aGlzLGM9bmV3IHZhKGZ1bmN0aW9uKGEsYyl7Yi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24oKXt2YXIgZD1iLl9kYkluZm87ZC5kYi50cmFuc2FjdGlvbihmdW5jdGlvbihiKXtUKGIsZCwiU0VMRUNUIENPVU5UKGtleSkgYXMgYyBGUk9NICIrZC5zdG9yZU5hbWUsW10sZnVuY3Rpb24oYixjKXt2YXIgZD1jLnJvd3MuaXRlbSgwKS5jO2EoZCl9LGZ1bmN0aW9uKGEsYil7YyhiKX0pfSl9KS5jYXRjaChjKX0pO3JldHVybiBoKGMsYSksY31mdW5jdGlvbiBfKGEsYil7dmFyIGM9dGhpcyxkPW5ldyB2YShmdW5jdGlvbihiLGQpe2MucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGU9Yy5fZGJJbmZvO2UuZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24oYyl7VChjLGUsIlNFTEVDVCBrZXkgRlJPTSAiK2Uuc3RvcmVOYW1lKyIgV0hFUkUgaWQgPSA/IExJTUlUIDEiLFthKzFdLGZ1bmN0aW9uKGEsYyl7dmFyIGQ9Yy5yb3dzLmxlbmd0aD9jLnJvd3MuaXRlbSgwKS5rZXk6bnVsbDtiKGQpfSxmdW5jdGlvbihhLGIpe2QoYil9KX0pfSkuY2F0Y2goZCl9KTtyZXR1cm4gaChkLGIpLGR9ZnVuY3Rpb24gYWEoYSl7dmFyIGI9dGhpcyxjPW5ldyB2YShmdW5jdGlvbihhLGMpe2IucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGQ9Yi5fZGJJbmZvO2QuZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24oYil7VChiLGQsIlNFTEVDVCBrZXkgRlJPTSAiK2Quc3RvcmVOYW1lLFtdLGZ1bmN0aW9uKGIsYyl7Zm9yKHZhciBkPVtdLGU9MDtlPGMucm93cy5sZW5ndGg7ZSsrKWQucHVzaChjLnJvd3MuaXRlbShlKS5rZXkpO2EoZCl9LGZ1bmN0aW9uKGEsYil7YyhiKX0pfSl9KS5jYXRjaChjKX0pO3JldHVybiBoKGMsYSksY31mdW5jdGlvbiBiYShhKXtyZXR1cm4gbmV3IHZhKGZ1bmN0aW9uKGIsYyl7YS50cmFuc2FjdGlvbihmdW5jdGlvbihkKXtkLmV4ZWN1dGVTcWwoIlNFTEVDVCBuYW1lIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlPSd0YWJsZScgQU5EIG5hbWUgPD4gJ19fV2ViS2l0RGF0YWJhc2VJbmZvVGFibGVfXyciLFtdLGZ1bmN0aW9uKGMsZCl7Zm9yKHZhciBlPVtdLGY9MDtmPGQucm93cy5sZW5ndGg7ZisrKWUucHVzaChkLnJvd3MuaXRlbShmKS5uYW1lKTtiKHtkYjphLHN0b3JlTmFtZXM6ZX0pfSxmdW5jdGlvbihhLGIpe2MoYil9KX0sZnVuY3Rpb24oYSl7YyhhKX0pfSl9ZnVuY3Rpb24gY2EoYSxiKXtiPWsuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBjPXRoaXMuY29uZmlnKCk7YT0iZnVuY3Rpb24iIT10eXBlb2YgYSYmYXx8e30sYS5uYW1lfHwoYS5uYW1lPWEubmFtZXx8Yy5uYW1lLGEuc3RvcmVOYW1lPWEuc3RvcmVOYW1lfHxjLnN0b3JlTmFtZSk7dmFyIGQsZT10aGlzO3JldHVybiBkPWEubmFtZT9uZXcgdmEoZnVuY3Rpb24oYil7dmFyIGQ7ZD1hLm5hbWU9PT1jLm5hbWU/ZS5fZGJJbmZvLmRiOm9wZW5EYXRhYmFzZShhLm5hbWUsIiIsIiIsMCksYihhLnN0b3JlTmFtZT97ZGI6ZCxzdG9yZU5hbWVzOlthLnN0b3JlTmFtZV19OmJhKGQpKX0pLnRoZW4oZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyB2YShmdW5jdGlvbihiLGMpe2EuZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24oZCl7ZnVuY3Rpb24gZShhKXtyZXR1cm4gbmV3IHZhKGZ1bmN0aW9uKGIsYyl7ZC5leGVjdXRlU3FsKCJEUk9QIFRBQkxFIElGIEVYSVNUUyAiK2EsW10sZnVuY3Rpb24oKXtiKCl9LGZ1bmN0aW9uKGEsYil7YyhiKX0pfSl9Zm9yKHZhciBmPVtdLGc9MCxoPWEuc3RvcmVOYW1lcy5sZW5ndGg7ZzxoO2crKylmLnB1c2goZShhLnN0b3JlTmFtZXNbZ10pKTt2YS5hbGwoZikudGhlbihmdW5jdGlvbigpe2IoKX0pLmNhdGNoKGZ1bmN0aW9uKGEpe2MoYSl9KX0sZnVuY3Rpb24oYSl7YyhhKX0pfSl9KTp2YS5yZWplY3QoIkludmFsaWQgYXJndW1lbnRzIiksaChkLGIpLGR9ZnVuY3Rpb24gZGEoKXt0cnl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBsb2NhbFN0b3JhZ2UmJiJzZXRJdGVtImluIGxvY2FsU3RvcmFnZSYmISFsb2NhbFN0b3JhZ2Uuc2V0SXRlbX1jYXRjaChhKXtyZXR1cm4hMX19ZnVuY3Rpb24gZWEoYSxiKXt2YXIgYz1hLm5hbWUrIi8iO3JldHVybiBhLnN0b3JlTmFtZSE9PWIuc3RvcmVOYW1lJiYoYys9YS5zdG9yZU5hbWUrIi8iKSxjfWZ1bmN0aW9uIGZhKCl7dmFyIGE9Il9sb2NhbGZvcmFnZV9zdXBwb3J0X3Rlc3QiO3RyeXtyZXR1cm4gbG9jYWxTdG9yYWdlLnNldEl0ZW0oYSwhMCksbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oYSksITF9Y2F0Y2goYSl7cmV0dXJuITB9fWZ1bmN0aW9uIGdhKCl7cmV0dXJuIWZhKCl8fGxvY2FsU3RvcmFnZS5sZW5ndGg+MH1mdW5jdGlvbiBoYShhKXt2YXIgYj10aGlzLGM9e307aWYoYSlmb3IodmFyIGQgaW4gYSljW2RdPWFbZF07cmV0dXJuIGMua2V5UHJlZml4PWVhKGEsYi5fZGVmYXVsdENvbmZpZyksZ2EoKT8oYi5fZGJJbmZvPWMsYy5zZXJpYWxpemVyPVZhLHZhLnJlc29sdmUoKSk6dmEucmVqZWN0KCl9ZnVuY3Rpb24gaWEoYSl7dmFyIGI9dGhpcyxjPWIucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWIuX2RiSW5mby5rZXlQcmVmaXgsYz1sb2NhbFN0b3JhZ2UubGVuZ3RoLTE7Yz49MDtjLS0pe3ZhciBkPWxvY2FsU3RvcmFnZS5rZXkoYyk7MD09PWQuaW5kZXhPZihhKSYmbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oZCl9fSk7cmV0dXJuIGgoYyxhKSxjfWZ1bmN0aW9uIGphKGEsYil7dmFyIGM9dGhpczthPWooYSk7dmFyIGQ9Yy5yZWFkeSgpLnRoZW4oZnVuY3Rpb24oKXt2YXIgYj1jLl9kYkluZm8sZD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbShiLmtleVByZWZpeCthKTtyZXR1cm4gZCYmKGQ9Yi5zZXJpYWxpemVyLmRlc2VyaWFsaXplKGQpKSxkfSk7cmV0dXJuIGgoZCxiKSxkfWZ1bmN0aW9uIGthKGEsYil7dmFyIGM9dGhpcyxkPWMucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7Zm9yKHZhciBiPWMuX2RiSW5mbyxkPWIua2V5UHJlZml4LGU9ZC5sZW5ndGgsZj1sb2NhbFN0b3JhZ2UubGVuZ3RoLGc9MSxoPTA7aDxmO2grKyl7dmFyIGk9bG9jYWxTdG9yYWdlLmtleShoKTtpZigwPT09aS5pbmRleE9mKGQpKXt2YXIgaj1sb2NhbFN0b3JhZ2UuZ2V0SXRlbShpKTtpZihqJiYoaj1iLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoaikpLHZvaWQgMCE9PShqPWEoaixpLnN1YnN0cmluZyhlKSxnKyspKSlyZXR1cm4gan19fSk7cmV0dXJuIGgoZCxiKSxkfWZ1bmN0aW9uIGxhKGEsYil7dmFyIGM9dGhpcyxkPWMucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGIsZD1jLl9kYkluZm87dHJ5e2I9bG9jYWxTdG9yYWdlLmtleShhKX1jYXRjaChhKXtiPW51bGx9cmV0dXJuIGImJihiPWIuc3Vic3RyaW5nKGQua2V5UHJlZml4Lmxlbmd0aCkpLGJ9KTtyZXR1cm4gaChkLGIpLGR9ZnVuY3Rpb24gbWEoYSl7dmFyIGI9dGhpcyxjPWIucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWIuX2RiSW5mbyxjPWxvY2FsU3RvcmFnZS5sZW5ndGgsZD1bXSxlPTA7ZTxjO2UrKyl7dmFyIGY9bG9jYWxTdG9yYWdlLmtleShlKTswPT09Zi5pbmRleE9mKGEua2V5UHJlZml4KSYmZC5wdXNoKGYuc3Vic3RyaW5nKGEua2V5UHJlZml4Lmxlbmd0aCkpfXJldHVybiBkfSk7cmV0dXJuIGgoYyxhKSxjfWZ1bmN0aW9uIG5hKGEpe3ZhciBiPXRoaXMsYz1iLmtleXMoKS50aGVuKGZ1bmN0aW9uKGEpe3JldHVybiBhLmxlbmd0aH0pO3JldHVybiBoKGMsYSksY31mdW5jdGlvbiBvYShhLGIpe3ZhciBjPXRoaXM7YT1qKGEpO3ZhciBkPWMucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGI9Yy5fZGJJbmZvO2xvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGIua2V5UHJlZml4K2EpfSk7cmV0dXJuIGgoZCxiKSxkfWZ1bmN0aW9uIHBhKGEsYixjKXt2YXIgZD10aGlzO2E9aihhKTt2YXIgZT1kLnJlYWR5KCkudGhlbihmdW5jdGlvbigpe3ZvaWQgMD09PWImJihiPW51bGwpO3ZhciBjPWI7cmV0dXJuIG5ldyB2YShmdW5jdGlvbihlLGYpe3ZhciBnPWQuX2RiSW5mbztnLnNlcmlhbGl6ZXIuc2VyaWFsaXplKGIsZnVuY3Rpb24oYixkKXtpZihkKWYoZCk7ZWxzZSB0cnl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oZy5rZXlQcmVmaXgrYSxiKSxlKGMpfWNhdGNoKGEpeyJRdW90YUV4Y2VlZGVkRXJyb3IiIT09YS5uYW1lJiYiTlNfRVJST1JfRE9NX1FVT1RBX1JFQUNIRUQiIT09YS5uYW1lfHxmKGEpLGYoYSl9fSl9KX0pO3JldHVybiBoKGUsYyksZX1mdW5jdGlvbiBxYShhLGIpe2lmKGI9ay5hcHBseSh0aGlzLGFyZ3VtZW50cyksYT0iZnVuY3Rpb24iIT10eXBlb2YgYSYmYXx8e30sIWEubmFtZSl7dmFyIGM9dGhpcy5jb25maWcoKTthLm5hbWU9YS5uYW1lfHxjLm5hbWUsYS5zdG9yZU5hbWU9YS5zdG9yZU5hbWV8fGMuc3RvcmVOYW1lfXZhciBkLGU9dGhpcztyZXR1cm4gZD1hLm5hbWU/bmV3IHZhKGZ1bmN0aW9uKGIpe2IoYS5zdG9yZU5hbWU/ZWEoYSxlLl9kZWZhdWx0Q29uZmlnKTphLm5hbWUrIi8iKX0pLnRoZW4oZnVuY3Rpb24oYSl7Zm9yKHZhciBiPWxvY2FsU3RvcmFnZS5sZW5ndGgtMTtiPj0wO2ItLSl7dmFyIGM9bG9jYWxTdG9yYWdlLmtleShiKTswPT09Yy5pbmRleE9mKGEpJiZsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShjKX19KTp2YS5yZWplY3QoIkludmFsaWQgYXJndW1lbnRzIiksaChkLGIpLGR9ZnVuY3Rpb24gcmEoYSxiKXthW2JdPWZ1bmN0aW9uKCl7dmFyIGM9YXJndW1lbnRzO3JldHVybiBhLnJlYWR5KCkudGhlbihmdW5jdGlvbigpe3JldHVybiBhW2JdLmFwcGx5KGEsYyl9KX19ZnVuY3Rpb24gc2EoKXtmb3IodmFyIGE9MTthPGFyZ3VtZW50cy5sZW5ndGg7YSsrKXt2YXIgYj1hcmd1bWVudHNbYV07aWYoYilmb3IodmFyIGMgaW4gYiliLmhhc093blByb3BlcnR5KGMpJiYoJGEoYltjXSk/YXJndW1lbnRzWzBdW2NdPWJbY10uc2xpY2UoKTphcmd1bWVudHNbMF1bY109YltjXSl9cmV0dXJuIGFyZ3VtZW50c1swXX12YXIgdGE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYSl7cmV0dXJuIHR5cGVvZiBhfTpmdW5jdGlvbihhKXtyZXR1cm4gYSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGF9LHVhPWUoKTsidW5kZWZpbmVkIj09dHlwZW9mIFByb21pc2UmJmEoMyk7dmFyIHZhPVByb21pc2Usd2E9ImxvY2FsLWZvcmFnZS1kZXRlY3QtYmxvYi1zdXBwb3J0Iix4YT12b2lkIDAseWE9e30semE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxBYT0icmVhZG9ubHkiLEJhPSJyZWFkd3JpdGUiLENhPXtfZHJpdmVyOiJhc3luY1N0b3JhZ2UiLF9pbml0U3RvcmFnZTpDLF9zdXBwb3J0OmYoKSxpdGVyYXRlOkUsZ2V0SXRlbTpELHNldEl0ZW06RixyZW1vdmVJdGVtOkcsY2xlYXI6SCxsZW5ndGg6SSxrZXk6SixrZXlzOkssZHJvcEluc3RhbmNlOkx9LERhPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIixFYT0ifn5sb2NhbF9mb3JhZ2VfdHlwZX4iLEZhPS9efn5sb2NhbF9mb3JhZ2VfdHlwZX4oW15+XSspfi8sR2E9Il9fbGZzY19fOiIsSGE9R2EubGVuZ3RoLElhPSJhcmJmIixKYT0iYmxvYiIsS2E9InNpMDgiLExhPSJ1aTA4IixNYT0idWljOCIsTmE9InNpMTYiLE9hPSJzaTMyIixQYT0idXIxNiIsUWE9InVpMzIiLFJhPSJmbDMyIixTYT0iZmw2NCIsVGE9SGErSWEubGVuZ3RoLFVhPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsVmE9e3NlcmlhbGl6ZTpQLGRlc2VyaWFsaXplOlEsc3RyaW5nVG9CdWZmZXI6TixidWZmZXJUb1N0cmluZzpPfSxXYT17X2RyaXZlcjoid2ViU1FMU3RvcmFnZSIsX2luaXRTdG9yYWdlOlMsX3N1cHBvcnQ6TSgpLGl0ZXJhdGU6VixnZXRJdGVtOlUsc2V0SXRlbTpYLHJlbW92ZUl0ZW06WSxjbGVhcjpaLGxlbmd0aDokLGtleTpfLGtleXM6YWEsZHJvcEluc3RhbmNlOmNhfSxYYT17X2RyaXZlcjoibG9jYWxTdG9yYWdlV3JhcHBlciIsX2luaXRTdG9yYWdlOmhhLF9zdXBwb3J0OmRhKCksaXRlcmF0ZTprYSxnZXRJdGVtOmphLHNldEl0ZW06cGEscmVtb3ZlSXRlbTpvYSxjbGVhcjppYSxsZW5ndGg6bmEsa2V5OmxhLGtleXM6bWEsZHJvcEluc3RhbmNlOnFhfSxZYT1mdW5jdGlvbihhLGIpe3JldHVybiBhPT09Ynx8Im51bWJlciI9PXR5cGVvZiBhJiYibnVtYmVyIj09dHlwZW9mIGImJmlzTmFOKGEpJiZpc05hTihiKX0sWmE9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9YS5sZW5ndGgsZD0wO2Q8Yzspe2lmKFlhKGFbZF0sYikpcmV0dXJuITA7ZCsrfXJldHVybiExfSwkYT1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihhKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpfSxfYT17fSxhYj17fSxiYj17SU5ERVhFRERCOkNhLFdFQlNRTDpXYSxMT0NBTFNUT1JBR0U6WGF9LGNiPVtiYi5JTkRFWEVEREIuX2RyaXZlcixiYi5XRUJTUUwuX2RyaXZlcixiYi5MT0NBTFNUT1JBR0UuX2RyaXZlcl0sZGI9WyJkcm9wSW5zdGFuY2UiXSxlYj1bImNsZWFyIiwiZ2V0SXRlbSIsIml0ZXJhdGUiLCJrZXkiLCJrZXlzIiwibGVuZ3RoIiwicmVtb3ZlSXRlbSIsInNldEl0ZW0iXS5jb25jYXQoZGIpLGZiPXtkZXNjcmlwdGlvbjoiIixkcml2ZXI6Y2Iuc2xpY2UoKSxuYW1lOiJsb2NhbGZvcmFnZSIsc2l6ZTo0OTgwNzM2LHN0b3JlTmFtZToia2V5dmFsdWVwYWlycyIsdmVyc2lvbjoxfSxnYj1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYil7ZCh0aGlzLGEpO2Zvcih2YXIgYyBpbiBiYilpZihiYi5oYXNPd25Qcm9wZXJ0eShjKSl7dmFyIGU9YmJbY10sZj1lLl9kcml2ZXI7dGhpc1tjXT1mLF9hW2ZdfHx0aGlzLmRlZmluZURyaXZlcihlKX10aGlzLl9kZWZhdWx0Q29uZmlnPXNhKHt9LGZiKSx0aGlzLl9jb25maWc9c2Eoe30sdGhpcy5fZGVmYXVsdENvbmZpZyxiKSx0aGlzLl9kcml2ZXJTZXQ9bnVsbCx0aGlzLl9pbml0RHJpdmVyPW51bGwsdGhpcy5fcmVhZHk9ITEsdGhpcy5fZGJJbmZvPW51bGwsdGhpcy5fd3JhcExpYnJhcnlNZXRob2RzV2l0aFJlYWR5KCksdGhpcy5zZXREcml2ZXIodGhpcy5fY29uZmlnLmRyaXZlcikuY2F0Y2goZnVuY3Rpb24oKXt9KX1yZXR1cm4gYS5wcm90b3R5cGUuY29uZmlnPWZ1bmN0aW9uKGEpe2lmKCJvYmplY3QiPT09KHZvaWQgMD09PWE/InVuZGVmaW5lZCI6dGEoYSkpKXtpZih0aGlzLl9yZWFkeSlyZXR1cm4gbmV3IEVycm9yKCJDYW4ndCBjYWxsIGNvbmZpZygpIGFmdGVyIGxvY2FsZm9yYWdlIGhhcyBiZWVuIHVzZWQuIik7Zm9yKHZhciBiIGluIGEpe2lmKCJzdG9yZU5hbWUiPT09YiYmKGFbYl09YVtiXS5yZXBsYWNlKC9cVy9nLCJfIikpLCJ2ZXJzaW9uIj09PWImJiJudW1iZXIiIT10eXBlb2YgYVtiXSlyZXR1cm4gbmV3IEVycm9yKCJEYXRhYmFzZSB2ZXJzaW9uIG11c3QgYmUgYSBudW1iZXIuIik7dGhpcy5fY29uZmlnW2JdPWFbYl19cmV0dXJuISgiZHJpdmVyImluIGEmJmEuZHJpdmVyKXx8dGhpcy5zZXREcml2ZXIodGhpcy5fY29uZmlnLmRyaXZlcil9cmV0dXJuInN0cmluZyI9PXR5cGVvZiBhP3RoaXMuX2NvbmZpZ1thXTp0aGlzLl9jb25maWd9LGEucHJvdG90eXBlLmRlZmluZURyaXZlcj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9bmV3IHZhKGZ1bmN0aW9uKGIsYyl7dHJ5e3ZhciBkPWEuX2RyaXZlcixlPW5ldyBFcnJvcigiQ3VzdG9tIGRyaXZlciBub3QgY29tcGxpYW50OyBzZWUgaHR0cHM6Ly9tb3ppbGxhLmdpdGh1Yi5pby9sb2NhbEZvcmFnZS8jZGVmaW5lZHJpdmVyIik7aWYoIWEuX2RyaXZlcilyZXR1cm4gdm9pZCBjKGUpO2Zvcih2YXIgZj1lYi5jb25jYXQoIl9pbml0U3RvcmFnZSIpLGc9MCxpPWYubGVuZ3RoO2c8aTtnKyspe3ZhciBqPWZbZ107aWYoKCFaYShkYixqKXx8YVtqXSkmJiJmdW5jdGlvbiIhPXR5cGVvZiBhW2pdKXJldHVybiB2b2lkIGMoZSl9KGZ1bmN0aW9uKCl7Zm9yKHZhciBiPWZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbigpe3ZhciBiPW5ldyBFcnJvcigiTWV0aG9kICIrYSsiIGlzIG5vdCBpbXBsZW1lbnRlZCBieSB0aGUgY3VycmVudCBkcml2ZXIiKSxjPXZhLnJlamVjdChiKTtyZXR1cm4gaChjLGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdKSxjfX0sYz0wLGQ9ZGIubGVuZ3RoO2M8ZDtjKyspe3ZhciBlPWRiW2NdO2FbZV18fChhW2VdPWIoZSkpfX0pKCk7dmFyIGs9ZnVuY3Rpb24oYyl7X2FbZF0mJmNvbnNvbGUuaW5mbygiUmVkZWZpbmluZyBMb2NhbEZvcmFnZSBkcml2ZXI6ICIrZCksX2FbZF09YSxhYltkXT1jLGIoKX07Il9zdXBwb3J0ImluIGE/YS5fc3VwcG9ydCYmImZ1bmN0aW9uIj09dHlwZW9mIGEuX3N1cHBvcnQ/YS5fc3VwcG9ydCgpLnRoZW4oayxjKTprKCEhYS5fc3VwcG9ydCk6ayghMCl9Y2F0Y2goYSl7YyhhKX19KTtyZXR1cm4gaShkLGIsYyksZH0sYS5wcm90b3R5cGUuZHJpdmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RyaXZlcnx8bnVsbH0sYS5wcm90b3R5cGUuZ2V0RHJpdmVyPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1fYVthXT92YS5yZXNvbHZlKF9hW2FdKTp2YS5yZWplY3QobmV3IEVycm9yKCJEcml2ZXIgbm90IGZvdW5kLiIpKTtyZXR1cm4gaShkLGIsYyksZH0sYS5wcm90b3R5cGUuZ2V0U2VyaWFsaXplcj1mdW5jdGlvbihhKXt2YXIgYj12YS5yZXNvbHZlKFZhKTtyZXR1cm4gaShiLGEpLGJ9LGEucHJvdG90eXBlLnJlYWR5PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYz1iLl9kcml2ZXJTZXQudGhlbihmdW5jdGlvbigpe3JldHVybiBudWxsPT09Yi5fcmVhZHkmJihiLl9yZWFkeT1iLl9pbml0RHJpdmVyKCkpLGIuX3JlYWR5fSk7cmV0dXJuIGkoYyxhLGEpLGN9LGEucHJvdG90eXBlLnNldERyaXZlcj1mdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZCgpe2cuX2NvbmZpZy5kcml2ZXI9Zy5kcml2ZXIoKX1mdW5jdGlvbiBlKGEpe3JldHVybiBnLl9leHRlbmQoYSksZCgpLGcuX3JlYWR5PWcuX2luaXRTdG9yYWdlKGcuX2NvbmZpZyksZy5fcmVhZHl9ZnVuY3Rpb24gZihhKXtyZXR1cm4gZnVuY3Rpb24oKXtmdW5jdGlvbiBiKCl7Zm9yKDtjPGEubGVuZ3RoOyl7dmFyIGY9YVtjXTtyZXR1cm4gYysrLGcuX2RiSW5mbz1udWxsLGcuX3JlYWR5PW51bGwsZy5nZXREcml2ZXIoZikudGhlbihlKS5jYXRjaChiKX1kKCk7dmFyIGg9bmV3IEVycm9yKCJObyBhdmFpbGFibGUgc3RvcmFnZSBtZXRob2QgZm91bmQuIik7cmV0dXJuIGcuX2RyaXZlclNldD12YS5yZWplY3QoaCksZy5fZHJpdmVyU2V0fXZhciBjPTA7cmV0dXJuIGIoKX19dmFyIGc9dGhpczskYShhKXx8KGE9W2FdKTt2YXIgaD10aGlzLl9nZXRTdXBwb3J0ZWREcml2ZXJzKGEpLGo9bnVsbCE9PXRoaXMuX2RyaXZlclNldD90aGlzLl9kcml2ZXJTZXQuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4gdmEucmVzb2x2ZSgpfSk6dmEucmVzb2x2ZSgpO3JldHVybiB0aGlzLl9kcml2ZXJTZXQ9ai50aGVuKGZ1bmN0aW9uKCl7dmFyIGE9aFswXTtyZXR1cm4gZy5fZGJJbmZvPW51bGwsZy5fcmVhZHk9bnVsbCxnLmdldERyaXZlcihhKS50aGVuKGZ1bmN0aW9uKGEpe2cuX2RyaXZlcj1hLl9kcml2ZXIsZCgpLGcuX3dyYXBMaWJyYXJ5TWV0aG9kc1dpdGhSZWFkeSgpLGcuX2luaXREcml2ZXI9ZihoKX0pfSkuY2F0Y2goZnVuY3Rpb24oKXtkKCk7dmFyIGE9bmV3IEVycm9yKCJObyBhdmFpbGFibGUgc3RvcmFnZSBtZXRob2QgZm91bmQuIik7cmV0dXJuIGcuX2RyaXZlclNldD12YS5yZWplY3QoYSksZy5fZHJpdmVyU2V0fSksaSh0aGlzLl9kcml2ZXJTZXQsYixjKSx0aGlzLl9kcml2ZXJTZXR9LGEucHJvdG90eXBlLnN1cHBvcnRzPWZ1bmN0aW9uKGEpe3JldHVybiEhYWJbYV19LGEucHJvdG90eXBlLl9leHRlbmQ9ZnVuY3Rpb24oYSl7c2EodGhpcyxhKX0sYS5wcm90b3R5cGUuX2dldFN1cHBvcnRlZERyaXZlcnM9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MCxkPWEubGVuZ3RoO2M8ZDtjKyspe3ZhciBlPWFbY107dGhpcy5zdXBwb3J0cyhlKSYmYi5wdXNoKGUpfXJldHVybiBifSxhLnByb3RvdHlwZS5fd3JhcExpYnJhcnlNZXRob2RzV2l0aFJlYWR5PWZ1bmN0aW9uKCl7Zm9yKHZhciBhPTAsYj1lYi5sZW5ndGg7YTxiO2ErKylyYSh0aGlzLGViW2FdKX0sYS5wcm90b3R5cGUuY3JlYXRlSW5zdGFuY2U9ZnVuY3Rpb24oYil7cmV0dXJuIG5ldyBhKGIpfSxhfSgpLGhiPW5ldyBnYjtiLmV4cG9ydHM9aGJ9LHszOjN9XX0se30sWzRdKSg0KX0pOwp9OwoKbXVyb20uaW5zdGFsbFVuaWNvZGVCYXNlNjQgPSBmdW5jdGlvbigpCnsKLyoKCWh0dHBzOi8vZ2l0aHViLmNvbS9zb2xkZXJqcy9UZXh0RW5jb2RlckxpdGUKCUFwYWNoZSAyLjAKKi8KZnVuY3Rpb24gVGV4dEVuY29kZXJMaXRlKCl7fWZ1bmN0aW9uIFRleHREZWNvZGVyTGl0ZSgpe30oZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdXRmOFRvQnl0ZXMoc3RyaW5nLHVuaXRzKXt1bml0cz11bml0c3x8SW5maW5pdHk7dmFyIGNvZGVQb2ludDt2YXIgbGVuZ3RoPXN0cmluZy5sZW5ndGg7dmFyIGxlYWRTdXJyb2dhdGU9bnVsbDt2YXIgYnl0ZXM9W107dmFyIGk9MDtmb3IoO2k8bGVuZ3RoO2krKyl7Y29kZVBvaW50PXN0cmluZy5jaGFyQ29kZUF0KGkpO2lmKGNvZGVQb2ludD41NTI5NSYmY29kZVBvaW50PDU3MzQ0KXtpZihsZWFkU3Vycm9nYXRlKXtpZihjb2RlUG9pbnQ8NTYzMjApe2lmKCh1bml0cy09Myk+LTEpYnl0ZXMucHVzaCgyMzksMTkxLDE4OSk7bGVhZFN1cnJvZ2F0ZT1jb2RlUG9pbnQ7Y29udGludWV9ZWxzZXtjb2RlUG9pbnQ9bGVhZFN1cnJvZ2F0ZS01NTI5Njw8MTB8Y29kZVBvaW50LTU2MzIwfDY1NTM2O2xlYWRTdXJyb2dhdGU9bnVsbH19ZWxzZXtpZihjb2RlUG9pbnQ+NTYzMTkpe2lmKCh1bml0cy09Myk+LTEpYnl0ZXMucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9ZWxzZSBpZihpKzE9PT1sZW5ndGgpe2lmKCh1bml0cy09Myk+LTEpYnl0ZXMucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9ZWxzZXtsZWFkU3Vycm9nYXRlPWNvZGVQb2ludDtjb250aW51ZX19fWVsc2UgaWYobGVhZFN1cnJvZ2F0ZSl7aWYoKHVuaXRzLT0zKT4tMSlieXRlcy5wdXNoKDIzOSwxOTEsMTg5KTtsZWFkU3Vycm9nYXRlPW51bGx9aWYoY29kZVBvaW50PDEyOCl7aWYoKHVuaXRzLT0xKTwwKWJyZWFrO2J5dGVzLnB1c2goY29kZVBvaW50KX1lbHNlIGlmKGNvZGVQb2ludDwyMDQ4KXtpZigodW5pdHMtPTIpPDApYnJlYWs7Ynl0ZXMucHVzaChjb2RlUG9pbnQ+PjZ8MTkyLGNvZGVQb2ludCY2M3wxMjgpfWVsc2UgaWYoY29kZVBvaW50PDY1NTM2KXtpZigodW5pdHMtPTMpPDApYnJlYWs7Ynl0ZXMucHVzaChjb2RlUG9pbnQ+PjEyfDIyNCxjb2RlUG9pbnQ+PjYmNjN8MTI4LGNvZGVQb2ludCY2M3wxMjgpfWVsc2UgaWYoY29kZVBvaW50PDIwOTcxNTIpe2lmKCh1bml0cy09NCk8MClicmVhaztieXRlcy5wdXNoKGNvZGVQb2ludD4+MTh8MjQwLGNvZGVQb2ludD4+MTImNjN8MTI4LGNvZGVQb2ludD4+NiY2M3wxMjgsY29kZVBvaW50JjYzfDEyOCl9ZWxzZXt0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpfX1yZXR1cm4gYnl0ZXN9ZnVuY3Rpb24gdXRmOFNsaWNlKGJ1ZixzdGFydCxlbmQpe3ZhciByZXM9IiI7dmFyIHRtcD0iIjtlbmQ9TWF0aC5taW4oYnVmLmxlbmd0aCxlbmR8fEluZmluaXR5KTtzdGFydD1zdGFydHx8MDtmb3IodmFyIGk9c3RhcnQ7aTxlbmQ7aSsrKXtpZihidWZbaV08PTEyNyl7cmVzKz1kZWNvZGVVdGY4Q2hhcih0bXApK1N0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKTt0bXA9IiJ9ZWxzZXt0bXArPSIlIitidWZbaV0udG9TdHJpbmcoMTYpfX1yZXR1cm4gcmVzK2RlY29kZVV0ZjhDaGFyKHRtcCl9ZnVuY3Rpb24gZGVjb2RlVXRmOENoYXIoc3RyKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChzdHIpfWNhdGNoKGVycil7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoNjU1MzMpfX1UZXh0RW5jb2RlckxpdGUucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihzdHIpe3ZhciByZXN1bHQ7aWYoInVuZGVmaW5lZCI9PT10eXBlb2YgVWludDhBcnJheSl7cmVzdWx0PXV0ZjhUb0J5dGVzKHN0cil9ZWxzZXtyZXN1bHQ9bmV3IFVpbnQ4QXJyYXkodXRmOFRvQnl0ZXMoc3RyKSl9cmV0dXJuIHJlc3VsdH07VGV4dERlY29kZXJMaXRlLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24oYnl0ZXMpe3JldHVybiB1dGY4U2xpY2UoYnl0ZXMsMCxieXRlcy5sZW5ndGgpfX0pKCk7aWYodHlwZW9mIG1vZHVsZT09PSJvYmplY3QiJiZtb2R1bGUpe21vZHVsZS5leHBvcnRzLlRleHREZWNvZGVyTGl0ZT1UZXh0RGVjb2RlckxpdGU7bW9kdWxlLmV4cG9ydHMuVGV4dEVuY29kZXJMaXRlPVRleHRFbmNvZGVyTGl0ZX0KLyoKCWh0dHBzOi8vZ2l0aHViLmNvbS9iZWF0Z2FtbWl0L2Jhc2U2NC1qcwogCU1JVAoqLwooZnVuY3Rpb24ocil7aWYodHlwZW9mIGV4cG9ydHM9PT0ib2JqZWN0IiYmdHlwZW9mIG1vZHVsZSE9PSJ1bmRlZmluZWQiKXttb2R1bGUuZXhwb3J0cz1yKCl9ZWxzZSBpZih0eXBlb2YgZGVmaW5lPT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZCl7ZGVmaW5lKFtdLHIpfWVsc2V7dmFyIGU7aWYodHlwZW9mIHdpbmRvdyE9PSJ1bmRlZmluZWQiKXtlPXdpbmRvd31lbHNlIGlmKHR5cGVvZiBnbG9iYWwhPT0idW5kZWZpbmVkIil7ZT1nbG9iYWx9ZWxzZSBpZih0eXBlb2Ygc2VsZiE9PSJ1bmRlZmluZWQiKXtlPXNlbGZ9ZWxzZXtlPXRoaXN9ZS5iYXNlNjRqcz1yKCl9fSkoZnVuY3Rpb24oKXt2YXIgcixlLG47cmV0dXJuIGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhmLGkpe2lmKCFuW2ZdKXtpZighZVtmXSl7dmFyIHU9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWkmJnUpcmV0dXJuIHUoZiwhMCk7aWYoYSlyZXR1cm4gYShmLCEwKTt2YXIgdj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitmKyInIik7dGhyb3cgdi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIix2fXZhciBkPW5bZl09e2V4cG9ydHM6e319O2VbZl1bMF0uY2FsbChkLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtmXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0sZCxkLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5bZl0uZXhwb3J0c31mb3IodmFyIGE9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsZj0wO2Y8dC5sZW5ndGg7ZisrKW8odFtmXSk7cmV0dXJuIG99cmV0dXJuIHJ9KCkoeyIvIjpbZnVuY3Rpb24ocixlLG4peyJ1c2Ugc3RyaWN0IjtuLmJ5dGVMZW5ndGg9ZDtuLnRvQnl0ZUFycmF5PWg7bi5mcm9tQnl0ZUFycmF5PXA7dmFyIHQ9W107dmFyIG89W107dmFyIGE9dHlwZW9mIFVpbnQ4QXJyYXkhPT0idW5kZWZpbmVkIj9VaW50OEFycmF5OkFycmF5O3ZhciBmPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIjtmb3IodmFyIGk9MCx1PWYubGVuZ3RoO2k8dTsrK2kpe3RbaV09ZltpXTtvW2YuY2hhckNvZGVBdChpKV09aX1vWyItIi5jaGFyQ29kZUF0KDApXT02MjtvWyJfIi5jaGFyQ29kZUF0KDApXT02MztmdW5jdGlvbiB2KHIpe3ZhciBlPXIubGVuZ3RoO2lmKGUlND4wKXt0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQiKX12YXIgbj1yLmluZGV4T2YoIj0iKTtpZihuPT09LTEpbj1lO3ZhciB0PW49PT1lPzA6NC1uJTQ7cmV0dXJuW24sdF19ZnVuY3Rpb24gZChyKXt2YXIgZT12KHIpO3ZhciBuPWVbMF07dmFyIHQ9ZVsxXTtyZXR1cm4obit0KSozLzQtdH1mdW5jdGlvbiBjKHIsZSxuKXtyZXR1cm4oZStuKSozLzQtbn1mdW5jdGlvbiBoKHIpe3ZhciBlO3ZhciBuPXYocik7dmFyIHQ9blswXTt2YXIgZj1uWzFdO3ZhciBpPW5ldyBhKGMocix0LGYpKTt2YXIgdT0wO3ZhciBkPWY+MD90LTQ6dDtmb3IodmFyIGg9MDtoPGQ7aCs9NCl7ZT1vW3IuY2hhckNvZGVBdChoKV08PDE4fG9bci5jaGFyQ29kZUF0KGgrMSldPDwxMnxvW3IuY2hhckNvZGVBdChoKzIpXTw8NnxvW3IuY2hhckNvZGVBdChoKzMpXTtpW3UrK109ZT4+MTYmMjU1O2lbdSsrXT1lPj44JjI1NTtpW3UrK109ZSYyNTV9aWYoZj09PTIpe2U9b1tyLmNoYXJDb2RlQXQoaCldPDwyfG9bci5jaGFyQ29kZUF0KGgrMSldPj40O2lbdSsrXT1lJjI1NX1pZihmPT09MSl7ZT1vW3IuY2hhckNvZGVBdChoKV08PDEwfG9bci5jaGFyQ29kZUF0KGgrMSldPDw0fG9bci5jaGFyQ29kZUF0KGgrMildPj4yO2lbdSsrXT1lPj44JjI1NTtpW3UrK109ZSYyNTV9cmV0dXJuIGl9ZnVuY3Rpb24gcyhyKXtyZXR1cm4gdFtyPj4xOCY2M10rdFtyPj4xMiY2M10rdFtyPj42JjYzXSt0W3ImNjNdfWZ1bmN0aW9uIGwocixlLG4pe3ZhciB0O3ZhciBvPVtdO2Zvcih2YXIgYT1lO2E8bjthKz0zKXt0PShyW2FdPDwxNiYxNjcxMTY4MCkrKHJbYSsxXTw8OCY2NTI4MCkrKHJbYSsyXSYyNTUpO28ucHVzaChzKHQpKX1yZXR1cm4gby5qb2luKCIiKX1mdW5jdGlvbiBwKHIpe3ZhciBlO3ZhciBuPXIubGVuZ3RoO3ZhciBvPW4lMzt2YXIgYT1bXTt2YXIgZj0xNjM4Mztmb3IodmFyIGk9MCx1PW4tbztpPHU7aSs9Zil7YS5wdXNoKGwocixpLGkrZj51P3U6aStmKSl9aWYobz09PTEpe2U9cltuLTFdO2EucHVzaCh0W2U+PjJdK3RbZTw8NCY2M10rIj09Iil9ZWxzZSBpZihvPT09Mil7ZT0ocltuLTJdPDw4KStyW24tMV07YS5wdXNoKHRbZT4+MTBdK3RbZT4+NCY2M10rdFtlPDwyJjYzXSsiPSIpfXJldHVybiBhLmpvaW4oIiIpfX0se31dfSx7fSxbXSkoIi8iKX0pOwovKgogICAgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvcnUvZG9jcy9XZWIvQVBJL1dpbmRvd0Jhc2U2NC9CYXNlNjRfZW5jb2RpbmdfYW5kX2RlY29kaW5nCiovCiAgICBtdXJvbS5idG9hID0gZnVuY3Rpb24oc3RyKQogICAgewogICAgICAgIHZhciBieXRlcyA9IG5ldyAoVGV4dEVuY29kZXIgfHwgVGV4dEVuY29kZXJMaXRlKSgidXRmLTgiKS5lbmNvZGUoc3RyKTsKICAgICAgICByZXR1cm4gYmFzZTY0anMuZnJvbUJ5dGVBcnJheShieXRlcyk7CiAgICB9OwogICAgbXVyb20uYXRvYiA9IGZ1bmN0aW9uKHN0cikKICAgIHsKICAgICAgICB2YXIgYnl0ZXMgPSBiYXNlNjRqcy50b0J5dGVBcnJheShzdHIpOwogICAgICAgIHJldHVybiBuZXcgKFRleHREZWNvZGVyIHx8IFRleHREZWNvZGVyTGl0ZSkoInV0Zi04IikuZGVjb2RlKGJ5dGVzKTsKICAgIH07Cn07CgptdXJvbS5sb2FkTW9kdWxlcyA9IGZ1bmN0aW9uKCkKewogICAgLy8gU2tpcCBgMGAgbW9kdWxlIGJlY2F1c2UgaXQncyB1cy4KICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbXVyb20ubW9kdWxlcy5sZW5ndGg7ICsraSkKICAgIHsKICAgICAgICB2YXIgbW9kdWxlID0gbXVyb20ubW9kdWxlc1tpXTsKICAgICAgICB2YXIgbmFtZSA9IG1vZHVsZVswXTsKICAgICAgICB2YXIgY29kZSA9IG11cm9tLmF0b2IobW9kdWxlWzFdKTsKICAgICAgICB2YXIgc3RhdGUgPSBtb2R1bGVbMl07CiAgICAgICAgaWYgKHN0YXRlID09IGZhbHNlKQogICAgICAgIHsKICAgICAgICAgICAgY29uc29sZS5sb2coIldBUk5JTkcgU2tpcCBsb2FkaW5nICciICsgbmFtZSArICInIG1vZHVsZSBiZWNhdXNlIGl0J3MgdHVybmVkIG9mZiIpOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZXZhbChjb2RlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjYXRjaCAoZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY29uc29sZS5sb2coIkVSUk9SIENvdWxkIG5vdCBsb2FkICciICsgbmFtZSArICInIG1vZHVsZTogJyIgKyBlICsgIiciKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfTsKCm11cm9tLmxvYWRJbmRleGVkREJNb2R1bGVzID0gZnVuY3Rpb24oY29tcGxldGlvbkhhbmRsZXIpCnsKICAgIC8vIFNlZSBpZiBJbmRleGVkREIgaGFzIG1vZHVsZXMuCiAgICAvLyBJbmRleGVkREIgbW9kdWxlcyBvdmVycmlkZSB0aG9zZSBjb21pbmcgZnJvbSBIVE1MLgogICAgbG9jYWxmb3JhZ2UuY29uZmlnKHsgbmFtZTogIm11cm9tIiB9KTsKICAgIGxvY2FsZm9yYWdlLmdldEl0ZW0oIm1vZHVsZXMiLCBmdW5jdGlvbihlcnJvciwgbW9kdWxlcykgewogICAgICAgIGlmIChtb2R1bGVzKQogICAgICAgIHsKICAgICAgICAgICAgbXVyb20ubW9kdWxlcyA9IG1vZHVsZXM7CiAgICAgICAgfQogICAgICAgIC8vIENvbnRpbnVlLgogICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAgICB9KTsKfTsKCm11cm9tLmluc3RhbGxMb2NhbEZvcmFnZSgpOwptdXJvbS5pbnN0YWxsVW5pY29kZUJhc2U2NCgpOwovLyBJbmRleGVkREIgbW9kdWxlcyBvdmVycmlkZSBIVE1MIG9uZXMuCm11cm9tLmxvYWRJbmRleGVkREJNb2R1bGVzKG11cm9tLmxvYWRNb2R1bGVzKTsK",
|
||
],
|
||
|
||
[
|
||
"муром.uuid_1.0.0",
|
||
"Ly8gQ3JlYXRlIEdVSUQgLyBVVUlEIGluIEphdmFTY3JpcHQ/Ci8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMTE3NTIzCtC80YPRgNC+0LwudXVpZCA9IGZ1bmN0aW9uKCkKewogICAgcmV0dXJuICd4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHgnLnJlcGxhY2UoCiAgICAgICAgL1t4eV0vZywKICAgICAgICBmdW5jdGlvbihjKQogICAgICAgIHsKICAgICAgICAgICAgdmFyIHIgPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwLCB2ID0gYyA9PSAneCcgPyByIDogKHIgJiAweDMgfCAweDgpOwogICAgICAgICAgICByZXR1cm4gdi50b1N0cmluZygxNik7CiAgICAgICAgfQogICAgKTsKfTsK",
|
||
],
|
||
|
||
[
|
||
"Уведомитель_1.0.0",
|
||
"Ly8gUmVwb3J0ZXJTdWJzY3JpcHRpb24gY2xhc3MuCmZ1bmN0aW9uIFJlcG9ydGVyU3Vic2NyaXB0aW9uKGlkLCBjYWxsYmFjaywgcmVwb3J0ZXIpCnsKICAgIHRoaXMuaWQgPSBpZDsKICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjazsKICAgIHRoaXMucmVwb3J0ZXIgPSByZXBvcnRlcjsKfQoKLy8gUmVwb3J0ZXIgY2xhc3MuCmZ1bmN0aW9uIFJlcG9ydGVyKG5hbWUpCnsKICAgIHRoaXMubmFtZSA9CiAgICAgICAgKHR5cGVvZiBuYW1lICE9PSAidW5kZWZpbmVkIikgPyAKICAgICAgICBuYW1lIDoKICAgICAgICAiIjsKICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IFtdOwp9ClJlcG9ydGVyLnByb3RvdHlwZS5yZXBvcnQgPSBmdW5jdGlvbigpCnsKICAgIGZvciAodmFyIGlkIGluIHRoaXMuc3Vic2NyaXB0aW9ucykKICAgIHsKICAgICAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5zdWJzY3JpcHRpb25zW2lkXTsKICAgICAgICBzdWJzY3JpcHRpb24uY2FsbGJhY2soKTsKICAgIH0KfQpSZXBvcnRlci5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24oY2FsbGJhY2spCnsKICAgIHZhciBpZCA9IG11cm9tLnV1aWQoKTsKICAgIHZhciBzdWJzY3JpcHRpb24gPSBuZXcgUmVwb3J0ZXJTdWJzY3JpcHRpb24oaWQsIGNhbGxiYWNrLCB0aGlzKTsKICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHN1YnNjcmlwdGlvbik7CiAgICByZXR1cm4gc3Vic2NyaXB0aW9uOwp9ClJlcG9ydGVyLnByb3RvdHlwZS5zdWJzY3JpYmVNYW55ID0gZnVuY3Rpb24oZnVuY3MpCnsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZnVuY3MubGVuZ3RoOyArK2kpCiAgICB7CiAgICAgICAgdmFyIGZ1bmMgPSBmdW5jc1tpXTsKICAgICAgICB0aGlzLnN1YnNjcmliZShmdW5jKTsKICAgIH0KfQoKdmFyINCj0LLQtdC00L7QvNC40YLQtdC70YwgPSBSZXBvcnRlcjsKUmVwb3J0ZXIucHJvdG90eXBlLtGD0LLQtdC00L7QvNC40YLRjCA9IGZ1bmN0aW9uKCkKewogICAgdGhpcy5yZXBvcnQoKTsKfTsKUmVwb3J0ZXIucHJvdG90eXBlLtC/0L7QtNC/0LjRgdCw0YLRjCA9IGZ1bmN0aW9uKNGE0YPQvdC60YbQuNGPKQp7CiAgICB0aGlzLnN1YnNjcmliZSjRhNGD0L3QutGG0LjRjyk7Cn07ClJlcG9ydGVyLnByb3RvdHlwZS7Qv9C+0LTQv9C40YHQsNGC0YzQnNC90L7Qs9C+ID0gZnVuY3Rpb24oZnVuY3MpCnsKICAgIHRoaXMuc3Vic2NyaWJlTWFueShmdW5jcyk7Cn07Cg==",
|
||
],
|
||
|
||
[
|
||
"муром.файл_1.0.0",
|
||
"0LzRg9GA0L7QvC7RhNCw0LnQuyA9IHt9OwrQvNGD0YDQvtC8LtGE0LDQudC7LtC90LDRh9Cw0LvQviA9CmAKPCFET0NUWVBFIGh0bWw+CjxodG1sPgogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogICAgPGJvZHk+CiAgICAgICAgPHNjcmlwdD4KdmFyINC80YPRgNC+0LwgPSB7fTsKdmFyIG11cm9tID0g0LzRg9GA0L7QvDsK0LzRg9GA0L7QvC7QvNC+0LTRg9C70LggPSBbCmA7CtC80YPRgNC+0Lwu0YTQsNC50Lsu0LrQvtC90LXRhiA9CmAKXTsKbXVyb20ubW9kdWxlcyA9INC80YPRgNC+0Lwu0LzQvtC00YPQu9C4Owp2YXIg0LfQsNCz0YDRg9C30L7Rh9C90YvQudCc0L7QtNGD0LvRjCA9INC80YPRgNC+0Lwu0LzQvtC00YPQu9C4WzBdOwp2YXIg0LrQvtC0ID0gYXRvYijQt9Cw0LPRgNGD0LfQvtGH0L3Ri9C50JzQvtC00YPQu9GMWzFdKTsKZXZhbCjQutC+0LQpOwogICAgICAgIDwvc2NyaXB0PgogICAgPC9ib2R5Pgo8L2h0bWw+CmA7Cg==",
|
||
],
|
||
|
||
[
|
||
"модуль-1",
|
||
"Y29uc29sZS5sb2coItCX0LDQs9GA0YPQt9C40LvQuCDQvNC+0LTRg9C70YwiKTsK",
|
||
],
|
||
|
||
[
|
||
"модуль-2",
|
||
"Y29uc29sZS5sb2coItCX0LDQs9GA0YPQt9C40LvQuCDQvNC+0LTRg9C70YwiKTsK",
|
||
],
|
||
|
||
];
|
||
murom.modules = муром.модули;
|
||
var загрузочныйМодуль = муром.модули[0];
|
||
var код = atob(загрузочныйМодуль[1]);
|
||
eval(код);
|
||
</script>
|
||
</body>
|
||
</html>
|