You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

136 lines
1.8MB

  1. <!DOCTYPE html>
  2. <html>
  3. <meta charset="utf-8">
  4. <meta name="viewport" content="width=device-width, initial-scale=1">
  5. <body>
  6. <script>
  7. var муром = {};
  8. var murom = муром;
  9. муром.модули = [
  10. [
  11. "муром.загрузка_1.0.1",
  12. "LyoKICogTk9URSBPbmx5IEFTQ0lJIGlzIGFsbG93ZWQgaW4gdGhpcyBsb2FkaW5nIG1vZHVsZQogKiBOT1RFIGJlY2F1c2UgaXQncyBkZWNpcGhlcmVkIHdpdGggYnRvYSgpIGNhbGwsCiAqIE5PVEUgd2hpY2ggY2FuJ3QgaGFuZGxlIFVuaWNvZGUuCiAqIE5PVEUgSG93ZXZlciwgbXVyb20uYXRvYi9idG9hIGZ1bmN0aW9ucyAoZGVmaW5lZCBoZXJlKQogKiBOT1RFIHdvcmsgZmluZSB3aXRoIFVuaWNvZGUsIHNvIHlvdSBhcmUgZnJlZQogKiBOT1RFIHRvIHVzZSBVbmljb2RlIGluIG90aGVyIG1vZHVsZXMKICovCgptdXJvbS5pbnN0YWxsTG9jYWxGb3JhZ2UgPSBmdW5jdGlvbigpCnsKLyoKICAgIGxvY2FsRm9yYWdlIC0tIE9mZmxpbmUgU3RvcmFnZSwgSW1wcm92ZWQKICAgIFZlcnNpb24gMS43LjMKICAgIGh0dHBzOi8vbG9jYWxmb3JhZ2UuZ2l0aHViLmlvL2xvY2FsRm9yYWdlCiAgICAoYykgMjAxMy0yMDE3IE1vemlsbGEsIEFwYWNoZSBMaWNlbnNlIDIuMAoqLwohZnVuY3Rpb24oYSl7aWYoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz1hKCk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSxhKTtlbHNle3ZhciBiO2I9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp0aGlzLGIubG9jYWxmb3JhZ2U9YSgpfX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gYShiLGMsZCl7ZnVuY3Rpb24gZShnLGgpe2lmKCFjW2ddKXtpZighYltnXSl7dmFyIGk9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWgmJmkpcmV0dXJuIGkoZywhMCk7aWYoZilyZXR1cm4gZihnLCEwKTt2YXIgaj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitnKyInIik7dGhyb3cgai5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixqfXZhciBrPWNbZ109e2V4cG9ydHM6e319O2JbZ11bMF0uY2FsbChrLmV4cG9ydHMsZnVuY3Rpb24oYSl7dmFyIGM9YltnXVsxXVthXTtyZXR1cm4gZShjfHxhKX0sayxrLmV4cG9ydHMsYSxiLGMsZCl9cmV0dXJuIGNbZ10uZXhwb3J0c31mb3IodmFyIGY9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsZz0wO2c8ZC5sZW5ndGg7ZysrKWUoZFtnXSk7cmV0dXJuIGV9KHsxOltmdW5jdGlvbihhLGIsYyl7KGZ1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBjKCl7az0hMDtmb3IodmFyIGEsYixjPWwubGVuZ3RoO2M7KXtmb3IoYj1sLGw9W10sYT0tMTsrK2E8YzspYlthXSgpO2M9bC5sZW5ndGh9az0hMX1mdW5jdGlvbiBkKGEpezEhPT1sLnB1c2goYSl8fGt8fGUoKX12YXIgZSxmPWEuTXV0YXRpb25PYnNlcnZlcnx8YS5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO2lmKGYpe3ZhciBnPTAsaD1uZXcgZihjKSxpPWEuZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpO2gub2JzZXJ2ZShpLHtjaGFyYWN0ZXJEYXRhOiEwfSksZT1mdW5jdGlvbigpe2kuZGF0YT1nPSsrZyUyfX1lbHNlIGlmKGEuc2V0SW1tZWRpYXRlfHx2b2lkIDA9PT1hLk1lc3NhZ2VDaGFubmVsKWU9ImRvY3VtZW50ImluIGEmJiJvbnJlYWR5c3RhdGVjaGFuZ2UiaW4gYS5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKT9mdW5jdGlvbigpe3ZhciBiPWEuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7Yi5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtjKCksYi5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCxiLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYiksYj1udWxsfSxhLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZChiKX06ZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGMsMCl9O2Vsc2V7dmFyIGo9bmV3IGEuTWVzc2FnZUNoYW5uZWw7ai5wb3J0MS5vbm1lc3NhZ2U9YyxlPWZ1bmN0aW9uKCl7ai5wb3J0Mi5wb3N0TWVzc2FnZSgwKX19dmFyIGssbD1bXTtiLmV4cG9ydHM9ZH0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se31dLDI6W2Z1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZCgpe31mdW5jdGlvbiBlKGEpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBhKXRocm93IG5ldyBUeXBlRXJyb3IoInJlc29sdmVyIG11c3QgYmUgYSBmdW5jdGlvbiIpO3RoaXMuc3RhdGU9cyx0aGlzLnF1ZXVlPVtdLHRoaXMub3V0Y29tZT12b2lkIDAsYSE9PWQmJmkodGhpcyxhKX1mdW5jdGlvbiBmKGEsYixjKXt0aGlzLnByb21pc2U9YSwiZnVuY3Rpb24iPT10eXBlb2YgYiYmKHRoaXMub25GdWxmaWxsZWQ9Yix0aGlzLmNhbGxGdWxmaWxsZWQ9dGhpcy5vdGhlckNhbGxGdWxmaWxsZWQpLCJmdW5jdGlvbiI9PXR5cGVvZiBjJiYodGhpcy5vblJlamVjdGVkPWMsdGhpcy5jYWxsUmVqZWN0ZWQ9dGhpcy5vdGhlckNhbGxSZWplY3RlZCl9ZnVuY3Rpb24gZyhhLGIsYyl7byhmdW5jdGlvbigpe3ZhciBkO3RyeXtkPWIoYyl9Y2F0Y2goYil7cmV0dXJuIHAucmVqZWN0KGEsYil9ZD09PWE/cC5yZWplY3QoYSxuZXcgVHlwZUVycm9yKCJDYW5ub3QgcmVzb2x2ZSBwcm9taXNlIHdpdGggaXRzZWxmIikpOnAucmVzb2x2ZShhLGQpfSl9ZnVuY3Rpb24gaChhKXt2YXIgYj1hJiZhLnRoZW47aWYoYSYmKCJvYmplY3QiPT10eXBlb2YgYXx8ImZ1bmN0aW9uIj09dHlwZW9mIGEpJiYiZnVuY3Rpb24iPT10eXBlb2YgYilyZXR1cm4gZnVuY3Rpb24oKXtiLmFwcGx5KGEsYXJndW1lbnRzKX19ZnVuY3Rpb24gaShhLGIpe2Z1bmN0aW9uIGMoYil7Znx8KGY9ITAscC5yZWplY3QoYSxiKSl9ZnVuY3Rpb24gZChiKXtmfHwoZj0hMCxwLnJlc29sdmUoYSxiKSl9ZnVuY3Rpb24gZSgpe2IoZCxjKX12YXIgZj0hMSxnPWooZSk7ImVycm9yIj09PWcuc3RhdHVzJiZjKGcudmFsdWUpfWZ1bmN0aW9uIGooYSxiKXt2YXIgYz17fTt0cnl7Yy52YWx1ZT1hKGIpLGMuc3RhdHVzPSJzdWNjZXNzIn1jYXRjaChhKXtjLnN0YXR1cz0iZXJyb3IiLGMudmFsdWU9YX1yZXR1cm4gY31mdW5jdGlvbiBrKGEpe3JldHVybiBhIGluc3RhbmNlb2YgdGhpcz9hOnAucmVzb2x2ZShuZXcgdGhpcyhkKSxhKX1mdW5jdGlvbiBsKGEpe3ZhciBiPW5ldyB0aGlzKGQpO3JldHVybiBwLnJlamVjdChiLGEpfWZ1bmN0aW9uIG0oYSl7ZnVuY3Rpb24gYihhLGIpe2Z1bmN0aW9uIGQoYSl7Z1tiXT1hLCsraCE9PWV8fGZ8fChmPSEwLHAucmVzb2x2ZShqLGcpKX1jLnJlc29sdmUoYSkudGhlbihkLGZ1bmN0aW9uKGEpe2Z8fChmPSEwLHAucmVqZWN0KGosYSkpfSl9dmFyIGM9dGhpcztpZigiW29iamVjdCBBcnJheV0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpKXJldHVybiB0aGlzLnJlamVjdChuZXcgVHlwZUVycm9yKCJtdXN0IGJlIGFuIGFycmF5IikpO3ZhciBlPWEubGVuZ3RoLGY9ITE7aWYoIWUpcmV0dXJuIHRoaXMucmVzb2x2ZShbXSk7Zm9yKHZhciBnPW5ldyBBcnJheShlKSxoPTAsaT0tMSxqPW5ldyB0aGlzKGQpOysraTxlOyliKGFbaV0saSk7cmV0dXJuIGp9ZnVuY3Rpb24gbihhKXtmdW5jdGlvbiBiKGEpe2MucmVzb2x2ZShhKS50aGVuKGZ1bmN0aW9uKGEpe2Z8fChmPSEwLHAucmVzb2x2ZShoLGEpKX0sZnVuY3Rpb24oYSl7Znx8KGY9ITAscC5yZWplY3QoaCxhKSl9KX12YXIgYz10aGlzO2lmKCJbb2JqZWN0IEFycmF5XSIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSkpcmV0dXJuIHRoaXMucmVqZWN0KG5ldyBUeXBlRXJyb3IoIm11c3QgYmUgYW4gYXJyYXkiKSk7dmFyIGU9YS5sZW5ndGgsZj0hMTtpZighZSlyZXR1cm4gdGhpcy5yZXNvbHZlKFtdKTtmb3IodmFyIGc9LTEsaD1uZXcgdGhpcyhkKTsrK2c8ZTspYihhW2ddKTtyZXR1cm4gaH12YXIgbz1hKDEpLHA9e30scT1bIlJFSkVDVEVEIl0scj1bIkZVTEZJTExFRCJdLHM9WyJQRU5ESU5HIl07Yi5leHBvcnRzPWUsZS5wcm90b3R5cGUuY2F0Y2g9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMudGhlbihudWxsLGEpfSxlLnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKGEsYil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGEmJnRoaXMuc3RhdGU9PT1yfHwiZnVuY3Rpb24iIT10eXBlb2YgYiYmdGhpcy5zdGF0ZT09PXEpcmV0dXJuIHRoaXM7dmFyIGM9bmV3IHRoaXMuY29uc3RydWN0b3IoZCk7aWYodGhpcy5zdGF0ZSE9PXMpe2coYyx0aGlzLnN0YXRlPT09cj9hOmIsdGhpcy5vdXRjb21lKX1lbHNlIHRoaXMucXVldWUucHVzaChuZXcgZihjLGEsYikpO3JldHVybiBjfSxmLnByb3RvdHlwZS5jYWxsRnVsZmlsbGVkPWZ1bmN0aW9uKGEpe3AucmVzb2x2ZSh0aGlzLnByb21pc2UsYSl9LGYucHJvdG90eXBlLm90aGVyQ2FsbEZ1bGZpbGxlZD1mdW5jdGlvbihhKXtnKHRoaXMucHJvbWlzZSx0aGlzLm9uRnVsZmlsbGVkLGEpfSxmLnByb3RvdHlwZS5jYWxsUmVqZWN0ZWQ9ZnVuY3Rpb24oYSl7cC5yZWplY3QodGhpcy5wcm9taXNlLGEpfSxmLnByb3RvdHlwZS5vdGhlckNhbGxSZWplY3RlZD1mdW5jdGlvbihhKXtnKHRoaXMucHJvbWlzZSx0aGlzLm9uUmVqZWN0ZWQsYSl9LHAucmVzb2x2ZT1mdW5jdGlvbihhLGIpe3ZhciBjPWooaCxiKTtpZigiZXJyb3IiPT09Yy5zdGF0dXMpcmV0dXJuIHAucmVqZWN0KGEsYy52YWx1ZSk7dmFyIGQ9Yy52YWx1ZTtpZihkKWkoYSxkKTtlbHNle2Euc3RhdGU9cixhLm91dGNvbWU9Yjtmb3IodmFyIGU9LTEsZj1hLnF1ZXVlLmxlbmd0aDsrK2U8ZjspYS5xdWV1ZVtlXS5jYWxsRnVsZmlsbGVkKGIpfXJldHVybiBhfSxwLnJlamVjdD1mdW5jdGlvbihhLGIpe2Euc3RhdGU9cSxhLm91dGNvbWU9Yjtmb3IodmFyIGM9LTEsZD1hLnF1ZXVlLmxlbmd0aDsrK2M8ZDspYS5xdWV1ZVtjXS5jYWxsUmVqZWN0ZWQoYik7cmV0dXJuIGF9LGUucmVzb2x2ZT1rLGUucmVqZWN0PWwsZS5hbGw9bSxlLnJhY2U9bn0sezE6MX1dLDM6W2Z1bmN0aW9uKGEsYixjKXsoZnVuY3Rpb24oYil7InVzZSBzdHJpY3QiOyJmdW5jdGlvbiIhPXR5cGVvZiBiLlByb21pc2UmJihiLlByb21pc2U9YSgyKSl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsyOjJ9XSw0OltmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGQoYSxiKXtpZighKGEgaW5zdGFuY2VvZiBiKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBlKCl7dHJ5e2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgaW5kZXhlZERCKXJldHVybiBpbmRleGVkREI7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiB3ZWJraXRJbmRleGVkREIpcmV0dXJuIHdlYmtpdEluZGV4ZWREQjtpZigidW5kZWZpbmVkIiE9dHlwZW9mIG1vekluZGV4ZWREQilyZXR1cm4gbW96SW5kZXhlZERCO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgT0luZGV4ZWREQilyZXR1cm4gT0luZGV4ZWREQjtpZigidW5kZWZpbmVkIiE9dHlwZW9mIG1zSW5kZXhlZERCKXJldHVybiBtc0luZGV4ZWREQn1jYXRjaChhKXtyZXR1cm59fWZ1bmN0aW9uIGYoKXt0cnl7aWYoIXVhKXJldHVybiExO3ZhciBhPSJ1bmRlZmluZWQiIT10eXBlb2Ygb3BlbkRhdGFiYXNlJiYvKFNhZmFyaXxpUGhvbmV8aVBhZHxpUG9kKS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIS9DaHJvbWUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiEvQmxhY2tCZXJyeS8udGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pLGI9ImZ1bmN0aW9uIj09dHlwZW9mIGZldGNoJiYtMSE9PWZldGNoLnRvU3RyaW5nKCkuaW5kZXhPZigiW25hdGl2ZSBjb2RlIik7cmV0dXJuKCFhfHxiKSYmInVuZGVmaW5lZCIhPXR5cGVvZiBpbmRleGVkREImJiJ1bmRlZmluZWQiIT10eXBlb2YgSURCS2V5UmFuZ2V9Y2F0Y2goYSl7cmV0dXJuITF9fWZ1bmN0aW9uIGcoYSxiKXthPWF8fFtdLGI9Ynx8e307dHJ5e3JldHVybiBuZXcgQmxvYihhLGIpfWNhdGNoKGYpe2lmKCJUeXBlRXJyb3IiIT09Zi5uYW1lKXRocm93IGY7Zm9yKHZhciBjPSJ1bmRlZmluZWQiIT10eXBlb2YgQmxvYkJ1aWxkZXI/QmxvYkJ1aWxkZXI6InVuZGVmaW5lZCIhPXR5cGVvZiBNU0Jsb2JCdWlsZGVyP01TQmxvYkJ1aWxkZXI6InVuZGVmaW5lZCIhPXR5cGVvZiBNb3pCbG9iQnVpbGRlcj9Nb3pCbG9iQnVpbGRlcjpXZWJLaXRCbG9iQnVpbGRlcixkPW5ldyBjLGU9MDtlPGEubGVuZ3RoO2UrPTEpZC5hcHBlbmQoYVtlXSk7cmV0dXJuIGQuZ2V0QmxvYihiLnR5cGUpfX1mdW5jdGlvbiBoKGEsYil7YiYmYS50aGVuKGZ1bmN0aW9uKGEpe2IobnVsbCxhKX0sZnVuY3Rpb24oYSl7YihhKX0pfWZ1bmN0aW9uIGkoYSxiLGMpeyJmdW5jdGlvbiI9PXR5cGVvZiBiJiZhLnRoZW4oYiksImZ1bmN0aW9uIj09dHlwZW9mIGMmJmEuY2F0Y2goYyl9ZnVuY3Rpb24gaihhKXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGEmJihjb25zb2xlLndhcm4oYSsiIHVzZWQgYXMgYSBrZXksIGJ1dCBpdCBpcyBub3QgYSBzdHJpbmcuIiksYT1TdHJpbmcoYSkpLGF9ZnVuY3Rpb24gaygpe2lmKGFyZ3VtZW50cy5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXSlyZXR1cm4gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV19ZnVuY3Rpb24gbChhKXtmb3IodmFyIGI9YS5sZW5ndGgsYz1uZXcgQXJyYXlCdWZmZXIoYiksZD1uZXcgVWludDhBcnJheShjKSxlPTA7ZTxiO2UrKylkW2VdPWEuY2hhckNvZGVBdChlKTtyZXR1cm4gY31mdW5jdGlvbiBtKGEpe3JldHVybiBuZXcgdmEoZnVuY3Rpb24oYil7dmFyIGM9YS50cmFuc2FjdGlvbih3YSxCYSksZD1nKFsiIl0pO2Mub2JqZWN0U3RvcmUod2EpLnB1dChkLCJrZXkiKSxjLm9uYWJvcnQ9ZnVuY3Rpb24oYSl7YS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCksYighMSl9LGMub25jb21wbGV0ZT1mdW5jdGlvbigpe3ZhciBhPW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0Nocm9tZVwvKFxkKykvKSxjPW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0VkZ2VcLy8pO2IoY3x8IWF8fHBhcnNlSW50KGFbMV0sMTApPj00Myl9fSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4hMX0pfWZ1bmN0aW9uIG4oYSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgeGE/dmEucmVzb2x2ZSh4YSk6bShhKS50aGVuKGZ1bmN0aW9uKGEpe3JldHVybiB4YT1hfSl9ZnVuY3Rpb24gbyhhKXt2YXIgYj15YVthLm5hbWVdLGM9e307Yy5wcm9taXNlPW5ldyB2YShmdW5jdGlvbihhLGIpe2MucmVzb2x2ZT1hLGMucmVqZWN0PWJ9KSxiLmRlZmVycmVkT3BlcmF0aW9ucy5wdXNoKGMpLGIuZGJSZWFkeT9iLmRiUmVhZHk9Yi5kYlJlYWR5LnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gYy5wcm9taXNlfSk6Yi5kYlJlYWR5PWMucHJvbWlzZX1mdW5jdGlvbiBwKGEpe3ZhciBiPXlhW2EubmFtZV0sYz1iLmRlZmVycmVkT3BlcmF0aW9ucy5wb3AoKTtpZihjKXJldHVybiBjLnJlc29sdmUoKSxjLnByb21pc2V9ZnVuY3Rpb24gcShhLGIpe3ZhciBjPXlhW2EubmFtZV0sZD1jLmRlZmVycmVkT3BlcmF0aW9ucy5wb3AoKTtpZihkKXJldHVybiBkLnJlamVjdChiKSxkLnByb21pc2V9ZnVuY3Rpb24gcihhLGIpe3JldHVybiBuZXcgdmEoZnVuY3Rpb24oYyxkKXtpZih5YVthLm5hbWVdPXlhW2EubmFtZV18fEIoKSxhLmRiKXtpZighYilyZXR1cm4gYyhhLmRiKTtvKGEpLGEuZGIuY2xvc2UoKX12YXIgZT1bYS5uYW1lXTtiJiZlLnB1c2goYS52ZXJzaW9uKTt2YXIgZj11YS5vcGVuLmFwcGx5KHVhLGUpO2ImJihmLm9udXBncmFkZW5lZWRlZD1mdW5jdGlvbihiKXt2YXIgYz1mLnJlc3VsdDt0cnl7Yy5jcmVhdGVPYmplY3RTdG9yZShhLnN0b3JlTmFtZSksYi5vbGRWZXJzaW9uPD0xJiZjLmNyZWF0ZU9iamVjdFN0b3JlKHdhKX1jYXRjaChjKXtpZigiQ29uc3RyYWludEVycm9yIiE9PWMubmFtZSl0aHJvdyBjO2NvbnNvbGUud2FybignVGhlIGRhdGFiYXNlICInK2EubmFtZSsnIiBoYXMgYmVlbiB1cGdyYWRlZCBmcm9tIHZlcnNpb24gJytiLm9sZFZlcnNpb24rIiB0byB2ZXJzaW9uICIrYi5uZXdWZXJzaW9uKycsIGJ1dCB0aGUgc3RvcmFnZSAiJythLnN0b3JlTmFtZSsnIiBhbHJlYWR5IGV4aXN0cy4nKX19KSxmLm9uZXJyb3I9ZnVuY3Rpb24oYSl7YS5wcmV2ZW50RGVmYXVsdCgpLGQoZi5lcnJvcil9LGYub25zdWNjZXNzPWZ1bmN0aW9uKCl7YyhmLnJlc3VsdCkscChhKX19KX1mdW5jdGlvbiBzKGEpe3JldHVybiByKGEsITEpfWZ1bmN0aW9uIHQoYSl7cmV0dXJuIHIoYSwhMCl9ZnVuY3Rpb24gdShhLGIpe2lmKCFhLmRiKXJldHVybiEwO3ZhciBjPSFhLmRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoYS5zdG9yZU5hbWUpLGQ9YS52ZXJzaW9uPGEuZGIudmVyc2lvbixlPWEudmVyc2lvbj5hLmRiLnZlcnNpb247aWYoZCYmKGEudmVyc2lvbiE9PWImJmNvbnNvbGUud2FybignVGhlIGRhdGFiYXNlICInK2EubmFtZSsiXCIgY2FuJ3QgYmUgZG93bmdyYWRlZCBmcm9tIHZlcnNpb24gIithLmRiLnZlcnNpb24rIiB0byB2ZXJzaW9uICIrYS52ZXJzaW9uKyIuIiksYS52ZXJzaW9uPWEuZGIudmVyc2lvbiksZXx8Yyl7aWYoYyl7dmFyIGY9YS5kYi52ZXJzaW9uKzE7Zj5hLnZlcnNpb24mJihhLnZlcnNpb249Zil9cmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gdihhKXtyZXR1cm4gbmV3IHZhKGZ1bmN0aW9uKGIsYyl7dmFyIGQ9bmV3IEZpbGVSZWFkZXI7ZC5vbmVycm9yPWMsZC5vbmxvYWRlbmQ9ZnVuY3Rpb24oYyl7dmFyIGQ9YnRvYShjLnRhcmdldC5yZXN1bHR8fCIiKTtiKHtfX2xvY2FsX2ZvcmFnZV9lbmNvZGVkX2Jsb2I6ITAsZGF0YTpkLHR5cGU6YS50eXBlfSl9LGQucmVhZEFzQmluYXJ5U3RyaW5nKGEpfSl9ZnVuY3Rpb24gdyhhKXtyZXR1cm4gZyhbbChhdG9iKGEuZGF0YSkpXSx7dHlwZTphLnR5cGV9KX1mdW5jdGlvbiB4KGEpe3JldHVybiBhJiZhLl9fbG9jYWxfZm9yYWdlX2VuY29kZWRfYmxvYn1mdW5jdGlvbiB5KGEpe3ZhciBiPXRoaXMsYz1iLl9pbml0UmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGE9eWFbYi5fZGJJbmZvLm5hbWVdO2lmKGEmJmEuZGJSZWFkeSlyZXR1cm4gYS5kYlJlYWR5fSk7cmV0dXJuIGkoYyxhLGEpLGN9ZnVuY3Rpb24geihhKXtvKGEpO2Zvcih2YXIgYj15YVthLm5hbWVdLGM9Yi5mb3JhZ2VzLGQ9MDtkPGMubGVuZ3RoO2QrKyl7dmFyIGU9Y1tkXTtlLl9kYkluZm8uZGImJihlLl9kYkluZm8uZGIuY2xvc2UoKSxlLl9kYkluZm8uZGI9bnVsbCl9cmV0dXJuIGEuZGI9bnVsbCxzKGEpLnRoZW4oZnVuY3Rpb24oYil7cmV0dXJuIGEuZGI9Yix1KGEpP3QoYSk6Yn0pLnRoZW4oZnVuY3Rpb24oZCl7YS5kYj1iLmRiPWQ7Zm9yKHZhciBlPTA7ZTxjLmxlbmd0aDtlKyspY1tlXS5fZGJJbmZvLmRiPWR9KS5jYXRjaChmdW5jdGlvbihiKXt0aHJvdyBxKGEsYiksYn0pfWZ1bmN0aW9uIEEoYSxiLGMsZCl7dm9pZCAwPT09ZCYmKGQ9MSk7dHJ5e3ZhciBlPWEuZGIudHJhbnNhY3Rpb24oYS5zdG9yZU5hbWUsYik7YyhudWxsLGUpfWNhdGNoKGUpe2lmKGQ+MCYmKCFhLmRifHwiSW52YWxpZFN0YXRlRXJyb3IiPT09ZS5uYW1lfHwiTm90Rm91bmRFcnJvciI9PT1lLm5hbWUpKXJldHVybiB2YS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe2lmKCFhLmRifHwiTm90Rm91bmRFcnJvciI9PT1lLm5hbWUmJiFhLmRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoYS5zdG9yZU5hbWUpJiZhLnZlcnNpb248PWEuZGIudmVyc2lvbilyZXR1cm4gYS5kYiYmKGEudmVyc2lvbj1hLmRiLnZlcnNpb24rMSksdChhKX0pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4geihhKS50aGVuKGZ1bmN0aW9uKCl7QShhLGIsYyxkLTEpfSl9KS5jYXRjaChjKTtjKGUpfX1mdW5jdGlvbiBCKCl7cmV0dXJue2ZvcmFnZXM6W10sZGI6bnVsbCxkYlJlYWR5Om51bGwsZGVmZXJyZWRPcGVyYXRpb25zOltdfX1mdW5jdGlvbiBDKGEpe2Z1bmN0aW9uIGIoKXtyZXR1cm4gdmEucmVzb2x2ZSgpfXZhciBjPXRoaXMsZD17ZGI6bnVsbH07aWYoYSlmb3IodmFyIGUgaW4gYSlkW2VdPWFbZV07dmFyIGY9eWFbZC5uYW1lXTtmfHwoZj1CKCkseWFbZC5uYW1lXT1mKSxmLmZvcmFnZXMucHVzaChjKSxjLl9pbml0UmVhZHl8fChjLl9pbml0UmVhZHk9Yy5yZWFkeSxjLnJlYWR5PXkpO2Zvcih2YXIgZz1bXSxoPTA7aDxmLmZvcmFnZXMubGVuZ3RoO2grKyl7dmFyIGk9Zi5mb3JhZ2VzW2hdO2khPT1jJiZnLnB1c2goaS5faW5pdFJlYWR5KCkuY2F0Y2goYikpfXZhciBqPWYuZm9yYWdlcy5zbGljZSgwKTtyZXR1cm4gdmEuYWxsKGcpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gZC5kYj1mLmRiLHMoZCl9KS50aGVuKGZ1bmN0aW9uKGEpe3JldHVybiBkLmRiPWEsdShkLGMuX2RlZmF1bHRDb25maWcudmVyc2lvbik/dChkKTphfSkudGhlbihmdW5jdGlvbihhKXtkLmRiPWYuZGI9YSxjLl9kYkluZm89ZDtmb3IodmFyIGI9MDtiPGoubGVuZ3RoO2IrKyl7dmFyIGU9altiXTtlIT09YyYmKGUuX2RiSW5mby5kYj1kLmRiLGUuX2RiSW5mby52ZXJzaW9uPWQudmVyc2lvbil9fSl9ZnVuY3Rpb24gRChhLGIpe3ZhciBjPXRoaXM7YT1qKGEpO3ZhciBkPW5ldyB2YShmdW5jdGlvbihiLGQpe2MucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7QShjLl9kYkluZm8sQWEsZnVuY3Rpb24oZSxmKXtpZihlKXJldHVybiBkKGUpO3RyeXt2YXIgZz1mLm9iamVjdFN0b3JlKGMuX2RiSW5mby5zdG9yZU5hbWUpLGg9Zy5nZXQoYSk7aC5vbnN1Y2Nlc3M9ZnVuY3Rpb24oKXt2YXIgYT1oLnJlc3VsdDt2b2lkIDA9PT1hJiYoYT1udWxsKSx4KGEpJiYoYT13KGEpKSxiKGEpfSxoLm9uZXJyb3I9ZnVuY3Rpb24oKXtkKGguZXJyb3IpfX1jYXRjaChhKXtkKGEpfX0pfSkuY2F0Y2goZCl9KTtyZXR1cm4gaChkLGIpLGR9ZnVuY3Rpb24gRShhLGIpe3ZhciBjPXRoaXMsZD1uZXcgdmEoZnVuY3Rpb24oYixkKXtjLnJlYWR5KCkudGhlbihmdW5jdGlvbigpe0EoYy5fZGJJbmZvLEFhLGZ1bmN0aW9uKGUsZil7aWYoZSlyZXR1cm4gZChlKTt0cnl7dmFyIGc9Zi5vYmplY3RTdG9yZShjLl9kYkluZm8uc3RvcmVOYW1lKSxoPWcub3BlbkN1cnNvcigpLGk9MTtoLm9uc3VjY2Vzcz1mdW5jdGlvbigpe3ZhciBjPWgucmVzdWx0O2lmKGMpe3ZhciBkPWMudmFsdWU7eChkKSYmKGQ9dyhkKSk7dmFyIGU9YShkLGMua2V5LGkrKyk7dm9pZCAwIT09ZT9iKGUpOmMuY29udGludWUoKX1lbHNlIGIoKX0saC5vbmVycm9yPWZ1bmN0aW9uKCl7ZChoLmVycm9yKX19Y2F0Y2goYSl7ZChhKX19KX0pLmNhdGNoKGQpfSk7cmV0dXJuIGgoZCxiKSxkfWZ1bmN0aW9uIEYoYSxiLGMpe3ZhciBkPXRoaXM7YT1qKGEpO3ZhciBlPW5ldyB2YShmdW5jdGlvbihjLGUpe3ZhciBmO2QucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGY9ZC5fZGJJbmZvLCJbb2JqZWN0IEJsb2JdIj09PXphLmNhbGwoYik/bihmLmRiKS50aGVuKGZ1bmN0aW9uKGEpe3JldHVybiBhP2I6dihiKX0pOmJ9KS50aGVuKGZ1bmN0aW9uKGIpe0EoZC5fZGJJbmZvLEJhLGZ1bmN0aW9uKGYsZyl7aWYoZilyZXR1cm4gZShmKTt0cnl7dmFyIGg9Zy5vYmplY3RTdG9yZShkLl9kYkluZm8uc3RvcmVOYW1lKTtudWxsPT09YiYmKGI9dm9pZCAwKTt2YXIgaT1oLnB1dChiLGEpO2cub25jb21wbGV0ZT1mdW5jdGlvbigpe3ZvaWQgMD09PWImJihiPW51bGwpLGMoYil9LGcub25hYm9ydD1nLm9uZXJyb3I9ZnVuY3Rpb24oKXt2YXIgYT1pLmVycm9yP2kuZXJyb3I6aS50cmFuc2FjdGlvbi5lcnJvcjtlKGEpfX1jYXRjaChhKXtlKGEpfX0pfSkuY2F0Y2goZSl9KTtyZXR1cm4gaChlLGMpLGV9ZnVuY3Rpb24gRyhhLGIpe3ZhciBjPXRoaXM7YT1qKGEpO3ZhciBkPW5ldyB2YShmdW5jdGlvbihiLGQpe2MucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7QShjLl9kYkluZm8sQmEsZnVuY3Rpb24oZSxmKXtpZihlKXJldHVybiBkKGUpO3RyeXt2YXIgZz1mLm9iamVjdFN0b3JlKGMuX2RiSW5mby5zdG9yZU5hbWUpLGg9Zy5kZWxldGUoYSk7Zi5vbmNvbXBsZXRlPWZ1bmN0aW9uKCl7YigpfSxmLm9uZXJyb3I9ZnVuY3Rpb24oKXtkKGguZXJyb3IpfSxmLm9uYWJvcnQ9ZnVuY3Rpb24oKXt2YXIgYT1oLmVycm9yP2guZXJyb3I6aC50cmFuc2FjdGlvbi5lcnJvcjtkKGEpfX1jYXRjaChhKXtkKGEpfX0pfSkuY2F0Y2goZCl9KTtyZXR1cm4gaChkLGIpLGR9ZnVuY3Rpb24gSChhKXt2YXIgYj10aGlzLGM9bmV3IHZhKGZ1bmN0aW9uKGEsYyl7Yi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24oKXtBKGIuX2RiSW5mbyxCYSxmdW5jdGlvbihkLGUpe2lmKGQpcmV0dXJuIGMoZCk7dHJ5e3ZhciBmPWUub2JqZWN0U3RvcmUoYi5fZGJJbmZvLnN0b3JlTmFtZSksZz1mLmNsZWFyKCk7ZS5vbmNvbXBsZXRlPWZ1bmN0aW9uKCl7YSgpfSxlLm9uYWJvcnQ9ZS5vbmVycm9yPWZ1bmN0aW9uKCl7dmFyIGE9Zy5lcnJvcj9nLmVycm9yOmcudHJhbnNhY3Rpb24uZXJyb3I7YyhhKX19Y2F0Y2goYSl7YyhhKX19KX0pLmNhdGNoKGMpfSk7cmV0dXJuIGgoYyxhKSxjfWZ1bmN0aW9uIEkoYSl7dmFyIGI9dGhpcyxjPW5ldyB2YShmdW5jdGlvbihhLGMpe2IucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7QShiLl9kYkluZm8sQWEsZnVuY3Rpb24oZCxlKXtpZihkKXJldHVybiBjKGQpO3RyeXt2YXIgZj1lLm9iamVjdFN0b3JlKGIuX2RiSW5mby5zdG9yZU5hbWUpLGc9Zi5jb3VudCgpO2cub25zdWNjZXNzPWZ1bmN0aW9uKCl7YShnLnJlc3VsdCl9LGcub25lcnJvcj1mdW5jdGlvbigpe2MoZy5lcnJvcil9fWNhdGNoKGEpe2MoYSl9fSl9KS5jYXRjaChjKX0pO3JldHVybiBoKGMsYSksY31mdW5jdGlvbiBKKGEsYil7dmFyIGM9dGhpcyxkPW5ldyB2YShmdW5jdGlvbihiLGQpe2lmKGE8MClyZXR1cm4gdm9pZCBiKG51bGwpO2MucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7QShjLl9kYkluZm8sQWEsZnVuY3Rpb24oZSxmKXtpZihlKXJldHVybiBkKGUpO3RyeXt2YXIgZz1mLm9iamVjdFN0b3JlKGMuX2RiSW5mby5zdG9yZU5hbWUpLGg9ITEsaT1nLm9wZW5DdXJzb3IoKTtpLm9uc3VjY2Vzcz1mdW5jdGlvbigpe3ZhciBjPWkucmVzdWx0O2lmKCFjKXJldHVybiB2b2lkIGIobnVsbCk7MD09PWE/YihjLmtleSk6aD9iKGMua2V5KTooaD0hMCxjLmFkdmFuY2UoYSkpfSxpLm9uZXJyb3I9ZnVuY3Rpb24oKXtkKGkuZXJyb3IpfX1jYXRjaChhKXtkKGEpfX0pfSkuY2F0Y2goZCl9KTtyZXR1cm4gaChkLGIpLGR9ZnVuY3Rpb24gSyhhKXt2YXIgYj10aGlzLGM9bmV3IHZhKGZ1bmN0aW9uKGEsYyl7Yi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24oKXtBKGIuX2RiSW5mbyxBYSxmdW5jdGlvbihkLGUpe2lmKGQpcmV0dXJuIGMoZCk7dHJ5e3ZhciBmPWUub2JqZWN0U3RvcmUoYi5fZGJJbmZvLnN0b3JlTmFtZSksZz1mLm9wZW5DdXJzb3IoKSxoPVtdO2cub25zdWNjZXNzPWZ1bmN0aW9uKCl7dmFyIGI9Zy5yZXN1bHQ7aWYoIWIpcmV0dXJuIHZvaWQgYShoKTtoLnB1c2goYi5rZXkpLGIuY29udGludWUoKX0sZy5vbmVycm9yPWZ1bmN0aW9uKCl7YyhnLmVycm9yKX19Y2F0Y2goYSl7YyhhKX19KX0pLmNhdGNoKGMpfSk7cmV0dXJuIGgoYyxhKSxjfWZ1bmN0aW9uIEwoYSxiKXtiPWsuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBjPXRoaXMuY29uZmlnKCk7YT0iZnVuY3Rpb24iIT10eXBlb2YgYSYmYXx8e30sYS5uYW1lfHwoYS5uYW1lPWEubmFtZXx8Yy5uYW1lLGEuc3RvcmVOYW1lPWEuc3RvcmVOYW1lfHxjLnN0b3JlTmFtZSk7dmFyIGQsZT10aGlzO2lmKGEubmFtZSl7dmFyIGY9YS5uYW1lPT09Yy5uYW1lJiZlLl9kYkluZm8uZGIsZz1mP3ZhLnJlc29sdmUoZS5fZGJJbmZvLmRiKTpzKGEpLnRoZW4oZnVuY3Rpb24oYil7dmFyIGM9eWFbYS5uYW1lXSxkPWMuZm9yYWdlcztjLmRiPWI7Zm9yKHZhciBlPTA7ZTxkLmxlbmd0aDtlKyspZFtlXS5fZGJJbmZvLmRiPWI7cmV0dXJuIGJ9KTtkPWEuc3RvcmVOYW1lP2cudGhlbihmdW5jdGlvbihiKXtpZihiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoYS5zdG9yZU5hbWUpKXt2YXIgYz1iLnZlcnNpb24rMTtvKGEpO3ZhciBkPXlhW2EubmFtZV0sZT1kLmZvcmFnZXM7Yi5jbG9zZSgpO2Zvcih2YXIgZj0wO2Y8ZS5sZW5ndGg7ZisrKXt2YXIgZz1lW2ZdO2cuX2RiSW5mby5kYj1udWxsLGcuX2RiSW5mby52ZXJzaW9uPWN9cmV0dXJuIG5ldyB2YShmdW5jdGlvbihiLGQpe3ZhciBlPXVhLm9wZW4oYS5uYW1lLGMpO2Uub25lcnJvcj1mdW5jdGlvbihhKXtlLnJlc3VsdC5jbG9zZSgpLGQoYSl9LGUub251cGdyYWRlbmVlZGVkPWZ1bmN0aW9uKCl7ZS5yZXN1bHQuZGVsZXRlT2JqZWN0U3RvcmUoYS5zdG9yZU5hbWUpfSxlLm9uc3VjY2Vzcz1mdW5jdGlvbigpe3ZhciBhPWUucmVzdWx0O2EuY2xvc2UoKSxiKGEpfX0pLnRoZW4oZnVuY3Rpb24oYSl7ZC5kYj1hO2Zvcih2YXIgYj0wO2I8ZS5sZW5ndGg7YisrKXt2YXIgYz1lW2JdO2MuX2RiSW5mby5kYj1hLHAoYy5fZGJJbmZvKX19KS5jYXRjaChmdW5jdGlvbihiKXt0aHJvdyhxKGEsYil8fHZhLnJlc29sdmUoKSkuY2F0Y2goZnVuY3Rpb24oKXt9KSxifSl9fSk6Zy50aGVuKGZ1bmN0aW9uKGIpe28oYSk7dmFyIGM9eWFbYS5uYW1lXSxkPWMuZm9yYWdlcztiLmNsb3NlKCk7Zm9yKHZhciBlPTA7ZTxkLmxlbmd0aDtlKyspe2RbZV0uX2RiSW5mby5kYj1udWxsfXJldHVybiBuZXcgdmEoZnVuY3Rpb24oYixjKXt2YXIgZD11YS5kZWxldGVEYXRhYmFzZShhLm5hbWUpO2Qub25lcnJvcj1kLm9uYmxvY2tlZD1mdW5jdGlvbihhKXt2YXIgYj1kLnJlc3VsdDtiJiZiLmNsb3NlKCksYyhhKX0sZC5vbnN1Y2Nlc3M9ZnVuY3Rpb24oKXt2YXIgYT1kLnJlc3VsdDthJiZhLmNsb3NlKCksYihhKX19KS50aGVuKGZ1bmN0aW9uKGEpe2MuZGI9YTtmb3IodmFyIGI9MDtiPGQubGVuZ3RoO2IrKylwKGRbYl0uX2RiSW5mbyl9KS5jYXRjaChmdW5jdGlvbihiKXt0aHJvdyhxKGEsYil8fHZhLnJlc29sdmUoKSkuY2F0Y2goZnVuY3Rpb24oKXt9KSxifSl9KX1lbHNlIGQ9dmEucmVqZWN0KCJJbnZhbGlkIGFyZ3VtZW50cyIpO3JldHVybiBoKGQsYiksZH1mdW5jdGlvbiBNKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG9wZW5EYXRhYmFzZX1mdW5jdGlvbiBOKGEpe3ZhciBiLGMsZCxlLGYsZz0uNzUqYS5sZW5ndGgsaD1hLmxlbmd0aCxpPTA7Ij0iPT09YVthLmxlbmd0aC0xXSYmKGctLSwiPSI9PT1hW2EubGVuZ3RoLTJdJiZnLS0pO3ZhciBqPW5ldyBBcnJheUJ1ZmZlcihnKSxrPW5ldyBVaW50OEFycmF5KGopO2ZvcihiPTA7YjxoO2IrPTQpYz1EYS5pbmRleE9mKGFbYl0pLGQ9RGEuaW5kZXhPZihhW2IrMV0pLGU9RGEuaW5kZXhPZihhW2IrMl0pLGY9RGEuaW5kZXhPZihhW2IrM10pLGtbaSsrXT1jPDwyfGQ+PjQsa1tpKytdPSgxNSZkKTw8NHxlPj4yLGtbaSsrXT0oMyZlKTw8Nnw2MyZmO3JldHVybiBqfWZ1bmN0aW9uIE8oYSl7dmFyIGIsYz1uZXcgVWludDhBcnJheShhKSxkPSIiO2ZvcihiPTA7YjxjLmxlbmd0aDtiKz0zKWQrPURhW2NbYl0+PjJdLGQrPURhWygzJmNbYl0pPDw0fGNbYisxXT4+NF0sZCs9RGFbKDE1JmNbYisxXSk8PDJ8Y1tiKzJdPj42XSxkKz1EYVs2MyZjW2IrMl1dO3JldHVybiBjLmxlbmd0aCUzPT0yP2Q9ZC5zdWJzdHJpbmcoMCxkLmxlbmd0aC0xKSsiPSI6Yy5sZW5ndGglMz09MSYmKGQ9ZC5zdWJzdHJpbmcoMCxkLmxlbmd0aC0yKSsiPT0iKSxkfWZ1bmN0aW9uIFAoYSxiKXt2YXIgYz0iIjtpZihhJiYoYz1VYS5jYWxsKGEpKSxhJiYoIltvYmplY3QgQXJyYXlCdWZmZXJdIj09PWN8fGEuYnVmZmVyJiYiW29iamVjdCBBcnJheUJ1ZmZlcl0iPT09VWEuY2FsbChhLmJ1ZmZlcikpKXt2YXIgZCxlPUdhO2EgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj8oZD1hLGUrPUlhKTooZD1hLmJ1ZmZlciwiW29iamVjdCBJbnQ4QXJyYXldIj09PWM/ZSs9S2E6IltvYmplY3QgVWludDhBcnJheV0iPT09Yz9lKz1MYToiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iPT09Yz9lKz1NYToiW29iamVjdCBJbnQxNkFycmF5XSI9PT1jP2UrPU5hOiJbb2JqZWN0IFVpbnQxNkFycmF5XSI9PT1jP2UrPVBhOiJbb2JqZWN0IEludDMyQXJyYXldIj09PWM/ZSs9T2E6IltvYmplY3QgVWludDMyQXJyYXldIj09PWM/ZSs9UWE6IltvYmplY3QgRmxvYXQzMkFycmF5XSI9PT1jP2UrPVJhOiJbb2JqZWN0IEZsb2F0NjRBcnJheV0iPT09Yz9lKz1TYTpiKG5ldyBFcnJvcigiRmFpbGVkIHRvIGdldCB0eXBlIGZvciBCaW5hcnlBcnJheSIpKSksYihlK08oZCkpfWVsc2UgaWYoIltvYmplY3QgQmxvYl0iPT09Yyl7dmFyIGY9bmV3IEZpbGVSZWFkZXI7Zi5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgYz1FYSthLnR5cGUrIn4iK08odGhpcy5yZXN1bHQpO2IoR2ErSmErYyl9LGYucmVhZEFzQXJyYXlCdWZmZXIoYSl9ZWxzZSB0cnl7YihKU09OLnN0cmluZ2lmeShhKSl9Y2F0Y2goYyl7Y29uc29sZS5lcnJvcigiQ291bGRuJ3QgY29udmVydCB2YWx1ZSBpbnRvIGEgSlNPTiBzdHJpbmc6ICIsYSksYihudWxsLGMpfX1mdW5jdGlvbiBRKGEpe2lmKGEuc3Vic3RyaW5nKDAsSGEpIT09R2EpcmV0dXJuIEpTT04ucGFyc2UoYSk7dmFyIGIsYz1hLnN1YnN0cmluZyhUYSksZD1hLnN1YnN0cmluZyhIYSxUYSk7aWYoZD09PUphJiZGYS50ZXN0KGMpKXt2YXIgZT1jLm1hdGNoKEZhKTtiPWVbMV0sYz1jLnN1YnN0cmluZyhlWzBdLmxlbmd0aCl9dmFyIGY9TihjKTtzd2l0Y2goZCl7Y2FzZSBJYTpyZXR1cm4gZjtjYXNlIEphOnJldHVybiBnKFtmXSx7dHlwZTpifSk7Y2FzZSBLYTpyZXR1cm4gbmV3IEludDhBcnJheShmKTtjYXNlIExhOnJldHVybiBuZXcgVWludDhBcnJheShmKTtjYXNlIE1hOnJldHVybiBuZXcgVWludDhDbGFtcGVkQXJyYXkoZik7Y2FzZSBOYTpyZXR1cm4gbmV3IEludDE2QXJyYXkoZik7Y2FzZSBQYTpyZXR1cm4gbmV3IFVpbnQxNkFycmF5KGYpO2Nhc2UgT2E6cmV0dXJuIG5ldyBJbnQzMkFycmF5KGYpO2Nhc2UgUWE6cmV0dXJuIG5ldyBVaW50MzJBcnJheShmKTtjYXNlIFJhOnJldHVybiBuZXcgRmxvYXQzMkFycmF5KGYpO2Nhc2UgU2E6cmV0dXJuIG5ldyBGbG9hdDY0QXJyYXkoZik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVua293biB0eXBlOiAiK2QpfX1mdW5jdGlvbiBSKGEsYixjLGQpe2EuZXhlY3V0ZVNxbCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgIitiLnN0b3JlTmFtZSsiIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBrZXkgdW5pcXVlLCB2YWx1ZSkiLFtdLGMsZCl9ZnVuY3Rpb24gUyhhKXt2YXIgYj10aGlzLGM9e2RiOm51bGx9O2lmKGEpZm9yKHZhciBkIGluIGEpY1tkXT0ic3RyaW5nIiE9dHlwZW9mIGFbZF0/YVtkXS50b1N0cmluZygpOmFbZF07dmFyIGU9bmV3IHZhKGZ1bmN0aW9uKGEsZCl7dHJ5e2MuZGI9b3BlbkRhdGFiYXNlKGMubmFtZSxTdHJpbmcoYy52ZXJzaW9uKSxjLmRlc2NyaXB0aW9uLGMuc2l6ZSl9Y2F0Y2goYSl7cmV0dXJuIGQoYSl9Yy5kYi50cmFuc2FjdGlvbihmdW5jdGlvbihlKXtSKGUsYyxmdW5jdGlvbigpe2IuX2RiSW5mbz1jLGEoKX0sZnVuY3Rpb24oYSxiKXtkKGIpfSl9LGQpfSk7cmV0dXJuIGMuc2VyaWFsaXplcj1WYSxlfWZ1bmN0aW9uIFQoYSxiLGMsZCxlLGYpe2EuZXhlY3V0ZVNxbChjLGQsZSxmdW5jdGlvbihhLGcpe2cuY29kZT09PWcuU1lOVEFYX0VSUj9hLmV4ZWN1dGVTcWwoIlNFTEVDVCBuYW1lIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlPSd0YWJsZScgQU5EIG5hbWUgPSA/IixbYi5zdG9yZU5hbWVdLGZ1bmN0aW9uKGEsaCl7aC5yb3dzLmxlbmd0aD9mKGEsZyk6UihhLGIsZnVuY3Rpb24oKXthLmV4ZWN1dGVTcWwoYyxkLGUsZil9LGYpfSxmKTpmKGEsZyl9LGYpfWZ1bmN0aW9uIFUoYSxiKXt2YXIgYz10aGlzO2E9aihhKTt2YXIgZD1uZXcgdmEoZnVuY3Rpb24oYixkKXtjLnJlYWR5KCkudGhlbihmdW5jdGlvbigpe3ZhciBlPWMuX2RiSW5mbztlLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKGMpe1QoYyxlLCJTRUxFQ1QgKiBGUk9NICIrZS5zdG9yZU5hbWUrIiBXSEVSRSBrZXkgPSA/IExJTUlUIDEiLFthXSxmdW5jdGlvbihhLGMpe3ZhciBkPWMucm93cy5sZW5ndGg/Yy5yb3dzLml0ZW0oMCkudmFsdWU6bnVsbDtkJiYoZD1lLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoZCkpLGIoZCl9LGZ1bmN0aW9uKGEsYil7ZChiKX0pfSl9KS5jYXRjaChkKX0pO3JldHVybiBoKGQsYiksZH1mdW5jdGlvbiBWKGEsYil7dmFyIGM9dGhpcyxkPW5ldyB2YShmdW5jdGlvbihiLGQpe2MucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGU9Yy5fZGJJbmZvO2UuZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24oYyl7VChjLGUsIlNFTEVDVCAqIEZST00gIitlLnN0b3JlTmFtZSxbXSxmdW5jdGlvbihjLGQpe2Zvcih2YXIgZj1kLnJvd3MsZz1mLmxlbmd0aCxoPTA7aDxnO2grKyl7dmFyIGk9Zi5pdGVtKGgpLGo9aS52YWx1ZTtpZihqJiYoaj1lLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoaikpLHZvaWQgMCE9PShqPWEoaixpLmtleSxoKzEpKSlyZXR1cm4gdm9pZCBiKGopfWIoKX0sZnVuY3Rpb24oYSxiKXtkKGIpfSl9KX0pLmNhdGNoKGQpfSk7cmV0dXJuIGgoZCxiKSxkfWZ1bmN0aW9uIFcoYSxiLGMsZCl7dmFyIGU9dGhpczthPWooYSk7dmFyIGY9bmV3IHZhKGZ1bmN0aW9uKGYsZyl7ZS5yZWFkeSgpLnRoZW4oZnVuY3Rpb24oKXt2b2lkIDA9PT1iJiYoYj1udWxsKTt2YXIgaD1iLGk9ZS5fZGJJbmZvO2kuc2VyaWFsaXplci5zZXJpYWxpemUoYixmdW5jdGlvbihiLGope2o/ZyhqKTppLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKGMpe1QoYyxpLCJJTlNFUlQgT1IgUkVQTEFDRSBJTlRPICIraS5zdG9yZU5hbWUrIiAoa2V5LCB2YWx1ZSkgVkFMVUVTICg/LCA/KSIsW2EsYl0sZnVuY3Rpb24oKXtmKGgpfSxmdW5jdGlvbihhLGIpe2coYil9KX0sZnVuY3Rpb24oYil7aWYoYi5jb2RlPT09Yi5RVU9UQV9FUlIpe2lmKGQ+MClyZXR1cm4gdm9pZCBmKFcuYXBwbHkoZSxbYSxoLGMsZC0xXSkpO2coYil9fSl9KX0pLmNhdGNoKGcpfSk7cmV0dXJuIGgoZixjKSxmfWZ1bmN0aW9uIFgoYSxiLGMpe3JldHVybiBXLmFwcGx5KHRoaXMsW2EsYixjLDFdKX1mdW5jdGlvbiBZKGEsYil7dmFyIGM9dGhpczthPWooYSk7dmFyIGQ9bmV3IHZhKGZ1bmN0aW9uKGIsZCl7Yy5yZWFkeSgpLnRoZW4oZnVuY3Rpb24oKXt2YXIgZT1jLl9kYkluZm87ZS5kYi50cmFuc2FjdGlvbihmdW5jdGlvbihjKXtUKGMsZSwiREVMRVRFIEZST00gIitlLnN0b3JlTmFtZSsiIFdIRVJFIGtleSA9ID8iLFthXSxmdW5jdGlvbigpe2IoKX0sZnVuY3Rpb24oYSxiKXtkKGIpfSl9KX0pLmNhdGNoKGQpfSk7cmV0dXJuIGgoZCxiKSxkfWZ1bmN0aW9uIFooYSl7dmFyIGI9dGhpcyxjPW5ldyB2YShmdW5jdGlvbihhLGMpe2IucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGQ9Yi5fZGJJbmZvO2QuZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24oYil7VChiLGQsIkRFTEVURSBGUk9NICIrZC5zdG9yZU5hbWUsW10sZnVuY3Rpb24oKXthKCl9LGZ1bmN0aW9uKGEsYil7YyhiKX0pfSl9KS5jYXRjaChjKX0pO3JldHVybiBoKGMsYSksY31mdW5jdGlvbiAkKGEpe3ZhciBiPXRoaXMsYz1uZXcgdmEoZnVuY3Rpb24oYSxjKXtiLnJlYWR5KCkudGhlbihmdW5jdGlvbigpe3ZhciBkPWIuX2RiSW5mbztkLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKGIpe1QoYixkLCJTRUxFQ1QgQ09VTlQoa2V5KSBhcyBjIEZST00gIitkLnN0b3JlTmFtZSxbXSxmdW5jdGlvbihiLGMpe3ZhciBkPWMucm93cy5pdGVtKDApLmM7YShkKX0sZnVuY3Rpb24oYSxiKXtjKGIpfSl9KX0pLmNhdGNoKGMpfSk7cmV0dXJuIGgoYyxhKSxjfWZ1bmN0aW9uIF8oYSxiKXt2YXIgYz10aGlzLGQ9bmV3IHZhKGZ1bmN0aW9uKGIsZCl7Yy5yZWFkeSgpLnRoZW4oZnVuY3Rpb24oKXt2YXIgZT1jLl9kYkluZm87ZS5kYi50cmFuc2FjdGlvbihmdW5jdGlvbihjKXtUKGMsZSwiU0VMRUNUIGtleSBGUk9NICIrZS5zdG9yZU5hbWUrIiBXSEVSRSBpZCA9ID8gTElNSVQgMSIsW2ErMV0sZnVuY3Rpb24oYSxjKXt2YXIgZD1jLnJvd3MubGVuZ3RoP2Mucm93cy5pdGVtKDApLmtleTpudWxsO2IoZCl9LGZ1bmN0aW9uKGEsYil7ZChiKX0pfSl9KS5jYXRjaChkKX0pO3JldHVybiBoKGQsYiksZH1mdW5jdGlvbiBhYShhKXt2YXIgYj10aGlzLGM9bmV3IHZhKGZ1bmN0aW9uKGEsYyl7Yi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24oKXt2YXIgZD1iLl9kYkluZm87ZC5kYi50cmFuc2FjdGlvbihmdW5jdGlvbihiKXtUKGIsZCwiU0VMRUNUIGtleSBGUk9NICIrZC5zdG9yZU5hbWUsW10sZnVuY3Rpb24oYixjKXtmb3IodmFyIGQ9W10sZT0wO2U8Yy5yb3dzLmxlbmd0aDtlKyspZC5wdXNoKGMucm93cy5pdGVtKGUpLmtleSk7YShkKX0sZnVuY3Rpb24oYSxiKXtjKGIpfSl9KX0pLmNhdGNoKGMpfSk7cmV0dXJuIGgoYyxhKSxjfWZ1bmN0aW9uIGJhKGEpe3JldHVybiBuZXcgdmEoZnVuY3Rpb24oYixjKXthLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKGQpe2QuZXhlY3V0ZVNxbCgiU0VMRUNUIG5hbWUgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGU9J3RhYmxlJyBBTkQgbmFtZSA8PiAnX19XZWJLaXREYXRhYmFzZUluZm9UYWJsZV9fJyIsW10sZnVuY3Rpb24oYyxkKXtmb3IodmFyIGU9W10sZj0wO2Y8ZC5yb3dzLmxlbmd0aDtmKyspZS5wdXNoKGQucm93cy5pdGVtKGYpLm5hbWUpO2Ioe2RiOmEsc3RvcmVOYW1lczplfSl9LGZ1bmN0aW9uKGEsYil7YyhiKX0pfSxmdW5jdGlvbihhKXtjKGEpfSl9KX1mdW5jdGlvbiBjYShhLGIpe2I9ay5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIGM9dGhpcy5jb25maWcoKTthPSJmdW5jdGlvbiIhPXR5cGVvZiBhJiZhfHx7fSxhLm5hbWV8fChhLm5hbWU9YS5uYW1lfHxjLm5hbWUsYS5zdG9yZU5hbWU9YS5zdG9yZU5hbWV8fGMuc3RvcmVOYW1lKTt2YXIgZCxlPXRoaXM7cmV0dXJuIGQ9YS5uYW1lP25ldyB2YShmdW5jdGlvbihiKXt2YXIgZDtkPWEubmFtZT09PWMubmFtZT9lLl9kYkluZm8uZGI6b3BlbkRhdGFiYXNlKGEubmFtZSwiIiwiIiwwKSxiKGEuc3RvcmVOYW1lP3tkYjpkLHN0b3JlTmFtZXM6W2Euc3RvcmVOYW1lXX06YmEoZCkpfSkudGhlbihmdW5jdGlvbihhKXtyZXR1cm4gbmV3IHZhKGZ1bmN0aW9uKGIsYyl7YS5kYi50cmFuc2FjdGlvbihmdW5jdGlvbihkKXtmdW5jdGlvbiBlKGEpe3JldHVybiBuZXcgdmEoZnVuY3Rpb24oYixjKXtkLmV4ZWN1dGVTcWwoIkRST1AgVEFCTEUgSUYgRVhJU1RTICIrYSxbXSxmdW5jdGlvbigpe2IoKX0sZnVuY3Rpb24oYSxiKXtjKGIpfSl9KX1mb3IodmFyIGY9W10sZz0wLGg9YS5zdG9yZU5hbWVzLmxlbmd0aDtnPGg7ZysrKWYucHVzaChlKGEuc3RvcmVOYW1lc1tnXSkpO3ZhLmFsbChmKS50aGVuKGZ1bmN0aW9uKCl7YigpfSkuY2F0Y2goZnVuY3Rpb24oYSl7YyhhKX0pfSxmdW5jdGlvbihhKXtjKGEpfSl9KX0pOnZhLnJlamVjdCgiSW52YWxpZCBhcmd1bWVudHMiKSxoKGQsYiksZH1mdW5jdGlvbiBkYSgpe3RyeXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIGxvY2FsU3RvcmFnZSYmInNldEl0ZW0iaW4gbG9jYWxTdG9yYWdlJiYhIWxvY2FsU3RvcmFnZS5zZXRJdGVtfWNhdGNoKGEpe3JldHVybiExfX1mdW5jdGlvbiBlYShhLGIpe3ZhciBjPWEubmFtZSsiLyI7cmV0dXJuIGEuc3RvcmVOYW1lIT09Yi5zdG9yZU5hbWUmJihjKz1hLnN0b3JlTmFtZSsiLyIpLGN9ZnVuY3Rpb24gZmEoKXt2YXIgYT0iX2xvY2FsZm9yYWdlX3N1cHBvcnRfdGVzdCI7dHJ5e3JldHVybiBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShhLCEwKSxsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShhKSwhMX1jYXRjaChhKXtyZXR1cm4hMH19ZnVuY3Rpb24gZ2EoKXtyZXR1cm4hZmEoKXx8bG9jYWxTdG9yYWdlLmxlbmd0aD4wfWZ1bmN0aW9uIGhhKGEpe3ZhciBiPXRoaXMsYz17fTtpZihhKWZvcih2YXIgZCBpbiBhKWNbZF09YVtkXTtyZXR1cm4gYy5rZXlQcmVmaXg9ZWEoYSxiLl9kZWZhdWx0Q29uZmlnKSxnYSgpPyhiLl9kYkluZm89YyxjLnNlcmlhbGl6ZXI9VmEsdmEucmVzb2x2ZSgpKTp2YS5yZWplY3QoKX1mdW5jdGlvbiBpYShhKXt2YXIgYj10aGlzLGM9Yi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24oKXtmb3IodmFyIGE9Yi5fZGJJbmZvLmtleVByZWZpeCxjPWxvY2FsU3RvcmFnZS5sZW5ndGgtMTtjPj0wO2MtLSl7dmFyIGQ9bG9jYWxTdG9yYWdlLmtleShjKTswPT09ZC5pbmRleE9mKGEpJiZsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShkKX19KTtyZXR1cm4gaChjLGEpLGN9ZnVuY3Rpb24gamEoYSxiKXt2YXIgYz10aGlzO2E9aihhKTt2YXIgZD1jLnJlYWR5KCkudGhlbihmdW5jdGlvbigpe3ZhciBiPWMuX2RiSW5mbyxkPWxvY2FsU3RvcmFnZS5nZXRJdGVtKGIua2V5UHJlZml4K2EpO3JldHVybiBkJiYoZD1iLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoZCkpLGR9KTtyZXR1cm4gaChkLGIpLGR9ZnVuY3Rpb24ga2EoYSxiKXt2YXIgYz10aGlzLGQ9Yy5yZWFkeSgpLnRoZW4oZnVuY3Rpb24oKXtmb3IodmFyIGI9Yy5fZGJJbmZvLGQ9Yi5rZXlQcmVmaXgsZT1kLmxlbmd0aCxmPWxvY2FsU3RvcmFnZS5sZW5ndGgsZz0xLGg9MDtoPGY7aCsrKXt2YXIgaT1sb2NhbFN0b3JhZ2Uua2V5KGgpO2lmKDA9PT1pLmluZGV4T2YoZCkpe3ZhciBqPWxvY2FsU3RvcmFnZS5nZXRJdGVtKGkpO2lmKGomJihqPWIuc2VyaWFsaXplci5kZXNlcmlhbGl6ZShqKSksdm9pZCAwIT09KGo9YShqLGkuc3Vic3RyaW5nKGUpLGcrKykpKXJldHVybiBqfX19KTtyZXR1cm4gaChkLGIpLGR9ZnVuY3Rpb24gbGEoYSxiKXt2YXIgYz10aGlzLGQ9Yy5yZWFkeSgpLnRoZW4oZnVuY3Rpb24oKXt2YXIgYixkPWMuX2RiSW5mbzt0cnl7Yj1sb2NhbFN0b3JhZ2Uua2V5KGEpfWNhdGNoKGEpe2I9bnVsbH1yZXR1cm4gYiYmKGI9Yi5zdWJzdHJpbmcoZC5rZXlQcmVmaXgubGVuZ3RoKSksYn0pO3JldHVybiBoKGQsYiksZH1mdW5jdGlvbiBtYShhKXt2YXIgYj10aGlzLGM9Yi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24oKXtmb3IodmFyIGE9Yi5fZGJJbmZvLGM9bG9jYWxTdG9yYWdlLmxlbmd0aCxkPVtdLGU9MDtlPGM7ZSsrKXt2YXIgZj1sb2NhbFN0b3JhZ2Uua2V5KGUpOzA9PT1mLmluZGV4T2YoYS5rZXlQcmVmaXgpJiZkLnB1c2goZi5zdWJzdHJpbmcoYS5rZXlQcmVmaXgubGVuZ3RoKSl9cmV0dXJuIGR9KTtyZXR1cm4gaChjLGEpLGN9ZnVuY3Rpb24gbmEoYSl7dmFyIGI9dGhpcyxjPWIua2V5cygpLnRoZW4oZnVuY3Rpb24oYSl7cmV0dXJuIGEubGVuZ3RofSk7cmV0dXJuIGgoYyxhKSxjfWZ1bmN0aW9uIG9hKGEsYil7dmFyIGM9dGhpczthPWooYSk7dmFyIGQ9Yy5yZWFkeSgpLnRoZW4oZnVuY3Rpb24oKXt2YXIgYj1jLl9kYkluZm87bG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oYi5rZXlQcmVmaXgrYSl9KTtyZXR1cm4gaChkLGIpLGR9ZnVuY3Rpb24gcGEoYSxiLGMpe3ZhciBkPXRoaXM7YT1qKGEpO3ZhciBlPWQucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7dm9pZCAwPT09YiYmKGI9bnVsbCk7dmFyIGM9YjtyZXR1cm4gbmV3IHZhKGZ1bmN0aW9uKGUsZil7dmFyIGc9ZC5fZGJJbmZvO2cuc2VyaWFsaXplci5zZXJpYWxpemUoYixmdW5jdGlvbihiLGQpe2lmKGQpZihkKTtlbHNlIHRyeXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbShnLmtleVByZWZpeCthLGIpLGUoYyl9Y2F0Y2goYSl7IlF1b3RhRXhjZWVkZWRFcnJvciIhPT1hLm5hbWUmJiJOU19FUlJPUl9ET01fUVVPVEFfUkVBQ0hFRCIhPT1hLm5hbWV8fGYoYSksZihhKX19KX0pfSk7cmV0dXJuIGgoZSxjKSxlfWZ1bmN0aW9uIHFhKGEsYil7aWYoYj1rLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxhPSJmdW5jdGlvbiIhPXR5cGVvZiBhJiZhfHx7fSwhYS5uYW1lKXt2YXIgYz10aGlzLmNvbmZpZygpO2EubmFtZT1hLm5hbWV8fGMubmFtZSxhLnN0b3JlTmFtZT1hLnN0b3JlTmFtZXx8Yy5zdG9yZU5hbWV9dmFyIGQsZT10aGlzO3JldHVybiBkPWEubmFtZT9uZXcgdmEoZnVuY3Rpb24oYil7YihhLnN0b3JlTmFtZT9lYShhLGUuX2RlZmF1bHRDb25maWcpOmEubmFtZSsiLyIpfSkudGhlbihmdW5jdGlvbihhKXtmb3IodmFyIGI9bG9jYWxTdG9yYWdlLmxlbmd0aC0xO2I+PTA7Yi0tKXt2YXIgYz1sb2NhbFN0b3JhZ2Uua2V5KGIpOzA9PT1jLmluZGV4T2YoYSkmJmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGMpfX0pOnZhLnJlamVjdCgiSW52YWxpZCBhcmd1bWVudHMiKSxoKGQsYiksZH1mdW5jdGlvbiByYShhLGIpe2FbYl09ZnVuY3Rpb24oKXt2YXIgYz1hcmd1bWVudHM7cmV0dXJuIGEucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGFbYl0uYXBwbHkoYSxjKX0pfX1mdW5jdGlvbiBzYSgpe2Zvcih2YXIgYT0xO2E8YXJndW1lbnRzLmxlbmd0aDthKyspe3ZhciBiPWFyZ3VtZW50c1thXTtpZihiKWZvcih2YXIgYyBpbiBiKWIuaGFzT3duUHJvcGVydHkoYykmJigkYShiW2NdKT9hcmd1bWVudHNbMF1bY109YltjXS5zbGljZSgpOmFyZ3VtZW50c1swXVtjXT1iW2NdKX1yZXR1cm4gYXJndW1lbnRzWzBdfXZhciB0YT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihhKXtyZXR1cm4gdHlwZW9mIGF9OmZ1bmN0aW9uKGEpe3JldHVybiBhJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZhLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZhIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgYX0sdWE9ZSgpOyJ1bmRlZmluZWQiPT10eXBlb2YgUHJvbWlzZSYmYSgzKTt2YXIgdmE9UHJvbWlzZSx3YT0ibG9jYWwtZm9yYWdlLWRldGVjdC1ibG9iLXN1cHBvcnQiLHhhPXZvaWQgMCx5YT17fSx6YT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLEFhPSJyZWFkb25seSIsQmE9InJlYWR3cml0ZSIsQ2E9e19kcml2ZXI6ImFzeW5jU3RvcmFnZSIsX2luaXRTdG9yYWdlOkMsX3N1cHBvcnQ6ZigpLGl0ZXJhdGU6RSxnZXRJdGVtOkQsc2V0SXRlbTpGLHJlbW92ZUl0ZW06RyxjbGVhcjpILGxlbmd0aDpJLGtleTpKLGtleXM6Syxkcm9wSW5zdGFuY2U6TH0sRGE9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLEVhPSJ+fmxvY2FsX2ZvcmFnZV90eXBlfiIsRmE9L15+fmxvY2FsX2ZvcmFnZV90eXBlfihbXn5dKyl+LyxHYT0iX19sZnNjX186IixIYT1HYS5sZW5ndGgsSWE9ImFyYmYiLEphPSJibG9iIixLYT0ic2kwOCIsTGE9InVpMDgiLE1hPSJ1aWM4IixOYT0ic2kxNiIsT2E9InNpMzIiLFBhPSJ1cjE2IixRYT0idWkzMiIsUmE9ImZsMzIiLFNhPSJmbDY0IixUYT1IYStJYS5sZW5ndGgsVWE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxWYT17c2VyaWFsaXplOlAsZGVzZXJpYWxpemU6USxzdHJpbmdUb0J1ZmZlcjpOLGJ1ZmZlclRvU3RyaW5nOk99LFdhPXtfZHJpdmVyOiJ3ZWJTUUxTdG9yYWdlIixfaW5pdFN0b3JhZ2U6Uyxfc3VwcG9ydDpNKCksaXRlcmF0ZTpWLGdldEl0ZW06VSxzZXRJdGVtOlgscmVtb3ZlSXRlbTpZLGNsZWFyOlosbGVuZ3RoOiQsa2V5Ol8sa2V5czphYSxkcm9wSW5zdGFuY2U6Y2F9LFhhPXtfZHJpdmVyOiJsb2NhbFN0b3JhZ2VXcmFwcGVyIixfaW5pdFN0b3JhZ2U6aGEsX3N1cHBvcnQ6ZGEoKSxpdGVyYXRlOmthLGdldEl0ZW06amEsc2V0SXRlbTpwYSxyZW1vdmVJdGVtOm9hLGNsZWFyOmlhLGxlbmd0aDpuYSxrZXk6bGEsa2V5czptYSxkcm9wSW5zdGFuY2U6cWF9LFlhPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9PT1ifHwibnVtYmVyIj09dHlwZW9mIGEmJiJudW1iZXIiPT10eXBlb2YgYiYmaXNOYU4oYSkmJmlzTmFOKGIpfSxaYT1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz1hLmxlbmd0aCxkPTA7ZDxjOyl7aWYoWWEoYVtkXSxiKSlyZXR1cm4hMDtkKyt9cmV0dXJuITF9LCRhPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGEpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSl9LF9hPXt9LGFiPXt9LGJiPXtJTkRFWEVEREI6Q2EsV0VCU1FMOldhLExPQ0FMU1RPUkFHRTpYYX0sY2I9W2JiLklOREVYRUREQi5fZHJpdmVyLGJiLldFQlNRTC5fZHJpdmVyLGJiLkxPQ0FMU1RPUkFHRS5fZHJpdmVyXSxkYj1bImRyb3BJbnN0YW5jZSJdLGViPVsiY2xlYXIiLCJnZXRJdGVtIiwiaXRlcmF0ZSIsImtleSIsImtleXMiLCJsZW5ndGgiLCJyZW1vdmVJdGVtIiwic2V0SXRlbSJdLmNvbmNhdChkYiksZmI9e2Rlc2NyaXB0aW9uOiIiLGRyaXZlcjpjYi5zbGljZSgpLG5hbWU6ImxvY2FsZm9yYWdlIixzaXplOjQ5ODA3MzYsc3RvcmVOYW1lOiJrZXl2YWx1ZXBhaXJzIix2ZXJzaW9uOjF9LGdiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShiKXtkKHRoaXMsYSk7Zm9yKHZhciBjIGluIGJiKWlmKGJiLmhhc093blByb3BlcnR5KGMpKXt2YXIgZT1iYltjXSxmPWUuX2RyaXZlcjt0aGlzW2NdPWYsX2FbZl18fHRoaXMuZGVmaW5lRHJpdmVyKGUpfXRoaXMuX2RlZmF1bHRDb25maWc9c2Eoe30sZmIpLHRoaXMuX2NvbmZpZz1zYSh7fSx0aGlzLl9kZWZhdWx0Q29uZmlnLGIpLHRoaXMuX2RyaXZlclNldD1udWxsLHRoaXMuX2luaXREcml2ZXI9bnVsbCx0aGlzLl9yZWFkeT0hMSx0aGlzLl9kYkluZm89bnVsbCx0aGlzLl93cmFwTGlicmFyeU1ldGhvZHNXaXRoUmVhZHkoKSx0aGlzLnNldERyaXZlcih0aGlzLl9jb25maWcuZHJpdmVyKS5jYXRjaChmdW5jdGlvbigpe30pfXJldHVybiBhLnByb3RvdHlwZS5jb25maWc9ZnVuY3Rpb24oYSl7aWYoIm9iamVjdCI9PT0odm9pZCAwPT09YT8idW5kZWZpbmVkIjp0YShhKSkpe2lmKHRoaXMuX3JlYWR5KXJldHVybiBuZXcgRXJyb3IoIkNhbid0IGNhbGwgY29uZmlnKCkgYWZ0ZXIgbG9jYWxmb3JhZ2UgaGFzIGJlZW4gdXNlZC4iKTtmb3IodmFyIGIgaW4gYSl7aWYoInN0b3JlTmFtZSI9PT1iJiYoYVtiXT1hW2JdLnJlcGxhY2UoL1xXL2csIl8iKSksInZlcnNpb24iPT09YiYmIm51bWJlciIhPXR5cGVvZiBhW2JdKXJldHVybiBuZXcgRXJyb3IoIkRhdGFiYXNlIHZlcnNpb24gbXVzdCBiZSBhIG51bWJlci4iKTt0aGlzLl9jb25maWdbYl09YVtiXX1yZXR1cm4hKCJkcml2ZXIiaW4gYSYmYS5kcml2ZXIpfHx0aGlzLnNldERyaXZlcih0aGlzLl9jb25maWcuZHJpdmVyKX1yZXR1cm4ic3RyaW5nIj09dHlwZW9mIGE/dGhpcy5fY29uZmlnW2FdOnRoaXMuX2NvbmZpZ30sYS5wcm90b3R5cGUuZGVmaW5lRHJpdmVyPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1uZXcgdmEoZnVuY3Rpb24oYixjKXt0cnl7dmFyIGQ9YS5fZHJpdmVyLGU9bmV3IEVycm9yKCJDdXN0b20gZHJpdmVyIG5vdCBjb21wbGlhbnQ7IHNlZSBodHRwczovL21vemlsbGEuZ2l0aHViLmlvL2xvY2FsRm9yYWdlLyNkZWZpbmVkcml2ZXIiKTtpZighYS5fZHJpdmVyKXJldHVybiB2b2lkIGMoZSk7Zm9yKHZhciBmPWViLmNvbmNhdCgiX2luaXRTdG9yYWdlIiksZz0wLGk9Zi5sZW5ndGg7ZzxpO2crKyl7dmFyIGo9ZltnXTtpZigoIVphKGRiLGopfHxhW2pdKSYmImZ1bmN0aW9uIiE9dHlwZW9mIGFbal0pcmV0dXJuIHZvaWQgYyhlKX0oZnVuY3Rpb24oKXtmb3IodmFyIGI9ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGI9bmV3IEVycm9yKCJNZXRob2QgIithKyIgaXMgbm90IGltcGxlbWVudGVkIGJ5IHRoZSBjdXJyZW50IGRyaXZlciIpLGM9dmEucmVqZWN0KGIpO3JldHVybiBoKGMsYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV0pLGN9fSxjPTAsZD1kYi5sZW5ndGg7YzxkO2MrKyl7dmFyIGU9ZGJbY107YVtlXXx8KGFbZV09YihlKSl9fSkoKTt2YXIgaz1mdW5jdGlvbihjKXtfYVtkXSYmY29uc29sZS5pbmZvKCJSZWRlZmluaW5nIExvY2FsRm9yYWdlIGRyaXZlcjogIitkKSxfYVtkXT1hLGFiW2RdPWMsYigpfTsiX3N1cHBvcnQiaW4gYT9hLl9zdXBwb3J0JiYiZnVuY3Rpb24iPT10eXBlb2YgYS5fc3VwcG9ydD9hLl9zdXBwb3J0KCkudGhlbihrLGMpOmsoISFhLl9zdXBwb3J0KTprKCEwKX1jYXRjaChhKXtjKGEpfX0pO3JldHVybiBpKGQsYixjKSxkfSxhLnByb3RvdHlwZS5kcml2ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZHJpdmVyfHxudWxsfSxhLnByb3RvdHlwZS5nZXREcml2ZXI9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPV9hW2FdP3ZhLnJlc29sdmUoX2FbYV0pOnZhLnJlamVjdChuZXcgRXJyb3IoIkRyaXZlciBub3QgZm91bmQuIikpO3JldHVybiBpKGQsYixjKSxkfSxhLnByb3RvdHlwZS5nZXRTZXJpYWxpemVyPWZ1bmN0aW9uKGEpe3ZhciBiPXZhLnJlc29sdmUoVmEpO3JldHVybiBpKGIsYSksYn0sYS5wcm90b3R5cGUucmVhZHk9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcyxjPWIuX2RyaXZlclNldC50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PT1iLl9yZWFkeSYmKGIuX3JlYWR5PWIuX2luaXREcml2ZXIoKSksYi5fcmVhZHl9KTtyZXR1cm4gaShjLGEsYSksY30sYS5wcm90b3R5cGUuc2V0RHJpdmVyPWZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKCl7Zy5fY29uZmlnLmRyaXZlcj1nLmRyaXZlcigpfWZ1bmN0aW9uIGUoYSl7cmV0dXJuIGcuX2V4dGVuZChhKSxkKCksZy5fcmVhZHk9Zy5faW5pdFN0b3JhZ2UoZy5fY29uZmlnKSxnLl9yZWFkeX1mdW5jdGlvbiBmKGEpe3JldHVybiBmdW5jdGlvbigpe2Z1bmN0aW9uIGIoKXtmb3IoO2M8YS5sZW5ndGg7KXt2YXIgZj1hW2NdO3JldHVybiBjKyssZy5fZGJJbmZvPW51bGwsZy5fcmVhZHk9bnVsbCxnLmdldERyaXZlcihmKS50aGVuKGUpLmNhdGNoKGIpfWQoKTt2YXIgaD1uZXcgRXJyb3IoIk5vIGF2YWlsYWJsZSBzdG9yYWdlIG1ldGhvZCBmb3VuZC4iKTtyZXR1cm4gZy5fZHJpdmVyU2V0PXZhLnJlamVjdChoKSxnLl9kcml2ZXJTZXR9dmFyIGM9MDtyZXR1cm4gYigpfX12YXIgZz10aGlzOyRhKGEpfHwoYT1bYV0pO3ZhciBoPXRoaXMuX2dldFN1cHBvcnRlZERyaXZlcnMoYSksaj1udWxsIT09dGhpcy5fZHJpdmVyU2V0P3RoaXMuX2RyaXZlclNldC5jYXRjaChmdW5jdGlvbigpe3JldHVybiB2YS5yZXNvbHZlKCl9KTp2YS5yZXNvbHZlKCk7cmV0dXJuIHRoaXMuX2RyaXZlclNldD1qLnRoZW4oZnVuY3Rpb24oKXt2YXIgYT1oWzBdO3JldHVybiBnLl9kYkluZm89bnVsbCxnLl9yZWFkeT1udWxsLGcuZ2V0RHJpdmVyKGEpLnRoZW4oZnVuY3Rpb24oYSl7Zy5fZHJpdmVyPWEuX2RyaXZlcixkKCksZy5fd3JhcExpYnJhcnlNZXRob2RzV2l0aFJlYWR5KCksZy5faW5pdERyaXZlcj1mKGgpfSl9KS5jYXRjaChmdW5jdGlvbigpe2QoKTt2YXIgYT1uZXcgRXJyb3IoIk5vIGF2YWlsYWJsZSBzdG9yYWdlIG1ldGhvZCBmb3VuZC4iKTtyZXR1cm4gZy5fZHJpdmVyU2V0PXZhLnJlamVjdChhKSxnLl9kcml2ZXJTZXR9KSxpKHRoaXMuX2RyaXZlclNldCxiLGMpLHRoaXMuX2RyaXZlclNldH0sYS5wcm90b3R5cGUuc3VwcG9ydHM9ZnVuY3Rpb24oYSl7cmV0dXJuISFhYlthXX0sYS5wcm90b3R5cGUuX2V4dGVuZD1mdW5jdGlvbihhKXtzYSh0aGlzLGEpfSxhLnByb3RvdHlwZS5fZ2V0U3VwcG9ydGVkRHJpdmVycz1mdW5jdGlvbihhKXtmb3IodmFyIGI9W10sYz0wLGQ9YS5sZW5ndGg7YzxkO2MrKyl7dmFyIGU9YVtjXTt0aGlzLnN1cHBvcnRzKGUpJiZiLnB1c2goZSl9cmV0dXJuIGJ9LGEucHJvdG90eXBlLl93cmFwTGlicmFyeU1ldGhvZHNXaXRoUmVhZHk9ZnVuY3Rpb24oKXtmb3IodmFyIGE9MCxiPWViLmxlbmd0aDthPGI7YSsrKXJhKHRoaXMsZWJbYV0pfSxhLnByb3RvdHlwZS5jcmVhdGVJbnN0YW5jZT1mdW5jdGlvbihiKXtyZXR1cm4gbmV3IGEoYil9LGF9KCksaGI9bmV3IGdiO2IuZXhwb3J0cz1oYn0sezM6M31dfSx7fSxbNF0pKDQpfSk7Cn07CgptdXJvbS5pbnN0YWxsVW5pY29kZUJhc2U2NCA9IGZ1bmN0aW9uKCkKewovKgoJaHR0cHM6Ly9naXRodWIuY29tL3NvbGRlcmpzL1RleHRFbmNvZGVyTGl0ZQoJQXBhY2hlIDIuMAoqLwpmdW5jdGlvbiBUZXh0RW5jb2RlckxpdGUoKXt9ZnVuY3Rpb24gVGV4dERlY29kZXJMaXRlKCl7fShmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB1dGY4VG9CeXRlcyhzdHJpbmcsdW5pdHMpe3VuaXRzPXVuaXRzfHxJbmZpbml0eTt2YXIgY29kZVBvaW50O3ZhciBsZW5ndGg9c3RyaW5nLmxlbmd0aDt2YXIgbGVhZFN1cnJvZ2F0ZT1udWxsO3ZhciBieXRlcz1bXTt2YXIgaT0wO2Zvcig7aTxsZW5ndGg7aSsrKXtjb2RlUG9pbnQ9c3RyaW5nLmNoYXJDb2RlQXQoaSk7aWYoY29kZVBvaW50PjU1Mjk1JiZjb2RlUG9pbnQ8NTczNDQpe2lmKGxlYWRTdXJyb2dhdGUpe2lmKGNvZGVQb2ludDw1NjMyMCl7aWYoKHVuaXRzLT0zKT4tMSlieXRlcy5wdXNoKDIzOSwxOTEsMTg5KTtsZWFkU3Vycm9nYXRlPWNvZGVQb2ludDtjb250aW51ZX1lbHNle2NvZGVQb2ludD1sZWFkU3Vycm9nYXRlLTU1Mjk2PDwxMHxjb2RlUG9pbnQtNTYzMjB8NjU1MzY7bGVhZFN1cnJvZ2F0ZT1udWxsfX1lbHNle2lmKGNvZGVQb2ludD41NjMxOSl7aWYoKHVuaXRzLT0zKT4tMSlieXRlcy5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1lbHNlIGlmKGkrMT09PWxlbmd0aCl7aWYoKHVuaXRzLT0zKT4tMSlieXRlcy5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1lbHNle2xlYWRTdXJyb2dhdGU9Y29kZVBvaW50O2NvbnRpbnVlfX19ZWxzZSBpZihsZWFkU3Vycm9nYXRlKXtpZigodW5pdHMtPTMpPi0xKWJ5dGVzLnB1c2goMjM5LDE5MSwxODkpO2xlYWRTdXJyb2dhdGU9bnVsbH1pZihjb2RlUG9pbnQ8MTI4KXtpZigodW5pdHMtPTEpPDApYnJlYWs7Ynl0ZXMucHVzaChjb2RlUG9pbnQpfWVsc2UgaWYoY29kZVBvaW50PDIwNDgpe2lmKCh1bml0cy09Mik8MClicmVhaztieXRlcy5wdXNoKGNvZGVQb2ludD4+NnwxOTIsY29kZVBvaW50JjYzfDEyOCl9ZWxzZSBpZihjb2RlUG9pbnQ8NjU1MzYpe2lmKCh1bml0cy09Myk8MClicmVhaztieXRlcy5wdXNoKGNvZGVQb2ludD4+MTJ8MjI0LGNvZGVQb2ludD4+NiY2M3wxMjgsY29kZVBvaW50JjYzfDEyOCl9ZWxzZSBpZihjb2RlUG9pbnQ8MjA5NzE1Mil7aWYoKHVuaXRzLT00KTwwKWJyZWFrO2J5dGVzLnB1c2goY29kZVBvaW50Pj4xOHwyNDAsY29kZVBvaW50Pj4xMiY2M3wxMjgsY29kZVBvaW50Pj42JjYzfDEyOCxjb2RlUG9pbnQmNjN8MTI4KX1lbHNle3Rocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2RlIHBvaW50Iil9fXJldHVybiBieXRlc31mdW5jdGlvbiB1dGY4U2xpY2UoYnVmLHN0YXJ0LGVuZCl7dmFyIHJlcz0iIjt2YXIgdG1wPSIiO2VuZD1NYXRoLm1pbihidWYubGVuZ3RoLGVuZHx8SW5maW5pdHkpO3N0YXJ0PXN0YXJ0fHwwO2Zvcih2YXIgaT1zdGFydDtpPGVuZDtpKyspe2lmKGJ1ZltpXTw9MTI3KXtyZXMrPWRlY29kZVV0ZjhDaGFyKHRtcCkrU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pO3RtcD0iIn1lbHNle3RtcCs9IiUiK2J1ZltpXS50b1N0cmluZygxNil9fXJldHVybiByZXMrZGVjb2RlVXRmOENoYXIodG1wKX1mdW5jdGlvbiBkZWNvZGVVdGY4Q2hhcihzdHIpe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHN0cil9Y2F0Y2goZXJyKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSg2NTUzMyl9fVRleHRFbmNvZGVyTGl0ZS5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKHN0cil7dmFyIHJlc3VsdDtpZigidW5kZWZpbmVkIj09PXR5cGVvZiBVaW50OEFycmF5KXtyZXN1bHQ9dXRmOFRvQnl0ZXMoc3RyKX1lbHNle3Jlc3VsdD1uZXcgVWludDhBcnJheSh1dGY4VG9CeXRlcyhzdHIpKX1yZXR1cm4gcmVzdWx0fTtUZXh0RGVjb2RlckxpdGUucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihieXRlcyl7cmV0dXJuIHV0ZjhTbGljZShieXRlcywwLGJ5dGVzLmxlbmd0aCl9fSkoKTtpZih0eXBlb2YgbW9kdWxlPT09Im9iamVjdCImJm1vZHVsZSl7bW9kdWxlLmV4cG9ydHMuVGV4dERlY29kZXJMaXRlPVRleHREZWNvZGVyTGl0ZTttb2R1bGUuZXhwb3J0cy5UZXh0RW5jb2RlckxpdGU9VGV4dEVuY29kZXJMaXRlfQovKgoJaHR0cHM6Ly9naXRodWIuY29tL2JlYXRnYW1taXQvYmFzZTY0LWpzCiAJTUlUCiovCihmdW5jdGlvbihyKXtpZih0eXBlb2YgZXhwb3J0cz09PSJvYmplY3QiJiZ0eXBlb2YgbW9kdWxlIT09InVuZGVmaW5lZCIpe21vZHVsZS5leHBvcnRzPXIoKX1lbHNlIGlmKHR5cGVvZiBkZWZpbmU9PT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kKXtkZWZpbmUoW10scil9ZWxzZXt2YXIgZTtpZih0eXBlb2Ygd2luZG93IT09InVuZGVmaW5lZCIpe2U9d2luZG93fWVsc2UgaWYodHlwZW9mIGdsb2JhbCE9PSJ1bmRlZmluZWQiKXtlPWdsb2JhbH1lbHNlIGlmKHR5cGVvZiBzZWxmIT09InVuZGVmaW5lZCIpe2U9c2VsZn1lbHNle2U9dGhpc31lLmJhc2U2NGpzPXIoKX19KShmdW5jdGlvbigpe3ZhciByLGUsbjtyZXR1cm4gZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsbix0KXtmdW5jdGlvbiBvKGYsaSl7aWYoIW5bZl0pe2lmKCFlW2ZdKXt2YXIgdT0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighaSYmdSlyZXR1cm4gdShmLCEwKTtpZihhKXJldHVybiBhKGYsITApO3ZhciB2PW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2YrIiciKTt0aHJvdyB2LmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLHZ9dmFyIGQ9bltmXT17ZXhwb3J0czp7fX07ZVtmXVswXS5jYWxsKGQuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ZdWzFdW3JdO3JldHVybiBvKG58fHIpfSxkLGQuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltmXS5leHBvcnRzfWZvcih2YXIgYT0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxmPTA7Zjx0Lmxlbmd0aDtmKyspbyh0W2ZdKTtyZXR1cm4gb31yZXR1cm4gcn0oKSh7Ii8iOltmdW5jdGlvbihyLGUsbil7InVzZSBzdHJpY3QiO24uYnl0ZUxlbmd0aD1kO24udG9CeXRlQXJyYXk9aDtuLmZyb21CeXRlQXJyYXk9cDt2YXIgdD1bXTt2YXIgbz1bXTt2YXIgYT10eXBlb2YgVWludDhBcnJheSE9PSJ1bmRlZmluZWQiP1VpbnQ4QXJyYXk6QXJyYXk7dmFyIGY9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iO2Zvcih2YXIgaT0wLHU9Zi5sZW5ndGg7aTx1OysraSl7dFtpXT1mW2ldO29bZi5jaGFyQ29kZUF0KGkpXT1pfW9bIi0iLmNoYXJDb2RlQXQoMCldPTYyO29bIl8iLmNoYXJDb2RlQXQoMCldPTYzO2Z1bmN0aW9uIHYocil7dmFyIGU9ci5sZW5ndGg7aWYoZSU0PjApe3Rocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCIpfXZhciBuPXIuaW5kZXhPZigiPSIpO2lmKG49PT0tMSluPWU7dmFyIHQ9bj09PWU/MDo0LW4lNDtyZXR1cm5bbix0XX1mdW5jdGlvbiBkKHIpe3ZhciBlPXYocik7dmFyIG49ZVswXTt2YXIgdD1lWzFdO3JldHVybihuK3QpKjMvNC10fWZ1bmN0aW9uIGMocixlLG4pe3JldHVybihlK24pKjMvNC1ufWZ1bmN0aW9uIGgocil7dmFyIGU7dmFyIG49dihyKTt2YXIgdD1uWzBdO3ZhciBmPW5bMV07dmFyIGk9bmV3IGEoYyhyLHQsZikpO3ZhciB1PTA7dmFyIGQ9Zj4wP3QtNDp0O2Zvcih2YXIgaD0wO2g8ZDtoKz00KXtlPW9bci5jaGFyQ29kZUF0KGgpXTw8MTh8b1tyLmNoYXJDb2RlQXQoaCsxKV08PDEyfG9bci5jaGFyQ29kZUF0KGgrMildPDw2fG9bci5jaGFyQ29kZUF0KGgrMyldO2lbdSsrXT1lPj4xNiYyNTU7aVt1KytdPWU+PjgmMjU1O2lbdSsrXT1lJjI1NX1pZihmPT09Mil7ZT1vW3IuY2hhckNvZGVBdChoKV08PDJ8b1tyLmNoYXJDb2RlQXQoaCsxKV0+PjQ7aVt1KytdPWUmMjU1fWlmKGY9PT0xKXtlPW9bci5jaGFyQ29kZUF0KGgpXTw8MTB8b1tyLmNoYXJDb2RlQXQoaCsxKV08PDR8b1tyLmNoYXJDb2RlQXQoaCsyKV0+PjI7aVt1KytdPWU+PjgmMjU1O2lbdSsrXT1lJjI1NX1yZXR1cm4gaX1mdW5jdGlvbiBzKHIpe3JldHVybiB0W3I+PjE4JjYzXSt0W3I+PjEyJjYzXSt0W3I+PjYmNjNdK3RbciY2M119ZnVuY3Rpb24gbChyLGUsbil7dmFyIHQ7dmFyIG89W107Zm9yKHZhciBhPWU7YTxuO2ErPTMpe3Q9KHJbYV08PDE2JjE2NzExNjgwKSsoclthKzFdPDw4JjY1MjgwKSsoclthKzJdJjI1NSk7by5wdXNoKHModCkpfXJldHVybiBvLmpvaW4oIiIpfWZ1bmN0aW9uIHAocil7dmFyIGU7dmFyIG49ci5sZW5ndGg7dmFyIG89biUzO3ZhciBhPVtdO3ZhciBmPTE2MzgzO2Zvcih2YXIgaT0wLHU9bi1vO2k8dTtpKz1mKXthLnB1c2gobChyLGksaStmPnU/dTppK2YpKX1pZihvPT09MSl7ZT1yW24tMV07YS5wdXNoKHRbZT4+Ml0rdFtlPDw0JjYzXSsiPT0iKX1lbHNlIGlmKG89PT0yKXtlPShyW24tMl08PDgpK3Jbbi0xXTthLnB1c2godFtlPj4xMF0rdFtlPj40JjYzXSt0W2U8PDImNjNdKyI9Iil9cmV0dXJuIGEuam9pbigiIil9fSx7fV19LHt9LFtdKSgiLyIpfSk7Ci8qCiAgICBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9ydS9kb2NzL1dlYi9BUEkvV2luZG93QmFzZTY0L0Jhc2U2NF9lbmNvZGluZ19hbmRfZGVjb2RpbmcKKi8KICAgIG11cm9tLmJ0b2EgPSBmdW5jdGlvbihzdHIpCiAgICB7CiAgICAgICAgdmFyIGJ5dGVzID0gbmV3ICh0eXBlb2YgVGV4dEVuY29kZXIgPT09ICJ1bmRlZmluZWQiID8gVGV4dEVuY29kZXJMaXRlIDogVGV4dEVuY29kZXIpKCJ1dGYtOCIpLmVuY29kZShzdHIpOwogICAgICAgIHJldHVybiBiYXNlNjRqcy5mcm9tQnl0ZUFycmF5KGJ5dGVzKTsKICAgIH07CiAgICBtdXJvbS5hdG9iID0gZnVuY3Rpb24oc3RyKQogICAgewogICAgICAgIHZhciBieXRlcyA9IGJhc2U2NGpzLnRvQnl0ZUFycmF5KHN0cik7CiAgICAgICAgcmV0dXJuIG5ldyAodHlwZW9mIFRleHREZWNvZGVyID09PSAidW5kZWZpbmVkIiA/IFRleHREZWNvZGVyTGl0ZSA6IFRleHREZWNvZGVyKSgidXRmLTgiKS5kZWNvZGUoYnl0ZXMpOwogICAgfTsKfTsKCm11cm9tLm1vZHVsZVByb3BlcnRpZXMgPSBmdW5jdGlvbihpZCkKewogICAgdmFyIG0gPSBtdXJvbS5tb2R1bGVzW2lkXTsKICAgIHJldHVybiAodHlwZW9mIG1bMl0gIT0gInVuZGVmaW5lZCIpID8gbVsyXSA6IHt9Owp9OwoKbXVyb20ubW9kdWxlU3RhdHVzID0gZnVuY3Rpb24oaWQpCnsKICAgIHZhciBwcm9wID0gbXVyb20ubW9kdWxlUHJvcGVydGllcyhpZCk7CiAgICBpZiAoInN0YXR1cyIgaW4gcHJvcCkKICAgIHsKICAgICAgICByZXR1cm4gcHJvcFsic3RhdHVzIl07CiAgICB9CiAgICAvLyBTdGF0dXMgPT0gdHJ1ZSBpZiBleHBsaWNpdCByZWNvcmQgaXMgYWJzZW50LgogICAgcmV0dXJuIHRydWU7Cn07CgptdXJvbS5zdGFydCA9IGZ1bmN0aW9uKCkKewogICAgY29uc29sZS5kZWJ1ZygiT3ZlcnJpZGUgbXVyb20uc3RhcnQoKSBmdW5jdGlvbiB0byBiZSBub3RpZmllZCB3aGVuIGFsbCBtb2R1bGVzIHdlcmUgbG9hZGVkIik7Cn0KCm11cm9tLmxvYWRNb2R1bGVzID0gZnVuY3Rpb24oKQp7CiAgICAvLyBTa2lwIGAwYCBtb2R1bGUgYmVjYXVzZSBpdCdzIHVzLgogICAgZm9yICh2YXIgaSA9IDE7IGkgPCBtdXJvbS5tb2R1bGVzLmxlbmd0aDsgKytpKQogICAgewogICAgICAgIHZhciBtb2R1bGUgPSBtdXJvbS5tb2R1bGVzW2ldOwogICAgICAgIHZhciBuYW1lID0gbW9kdWxlWzBdOwogICAgICAgIHZhciBjb2RlID0gbXVyb20uYXRvYihtb2R1bGVbMV0pOwogICAgICAgIGlmIChtdXJvbS5tb2R1bGVTdGF0dXMoaSkgPT0gZmFsc2UpCiAgICAgICAgewogICAgICAgICAgICAvL2NvbnNvbGUud2FybigiU2tpcCBsb2FkaW5nICciICsgbmFtZSArICInIG1vZHVsZSBiZWNhdXNlIGl0J3MgdHVybmVkIG9mZiIpOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZXZhbChjb2RlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjYXRjaCAoZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiQ291bGQgbm90IGxvYWQgJyIgKyBuYW1lICsgIicgbW9kdWxlOiAnIiArIGUgKyAiJyIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgCiAgICBtdXJvbS5zdGFydCgpOwp9OwoKbXVyb20ubG9hZEluZGV4ZWREQk1vZHVsZXMgPSBmdW5jdGlvbihjb21wbGV0aW9uSGFuZGxlcikKewogICAgLy8gU2VlIGlmIEluZGV4ZWREQiBoYXMgbW9kdWxlcy4KICAgIC8vIEluZGV4ZWREQiBtb2R1bGVzIG92ZXJyaWRlIHRob3NlIGNvbWluZyBmcm9tIEhUTUwuCiAgICBsb2NhbGZvcmFnZS5jb25maWcoeyBuYW1lOiAibXVyb20iIH0pOwogICAgbG9jYWxmb3JhZ2UuZ2V0SXRlbSgibW9kdWxlcyIsIGZ1bmN0aW9uKGVycm9yLCBtb2R1bGVzKSB7CiAgICAgICAgaWYgKG1vZHVsZXMpCiAgICAgICAgewogICAgICAgICAgICBtdXJvbS5tb2R1bGVzID0gbW9kdWxlczsKICAgICAgICAgICAgY29uc29sZS5kZWJ1ZygiTW9kdWxlcyBoYXZlIGJlZW4gbG9hZGVkIGZyb20gSW5kZXhlZERCIik7CiAgICAgICAgfQogICAgICAgIGlmIChlcnJvcikKICAgICAgICB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkNvdWxkIG5vdCBnZXQgbW9kdWxlcyBmcm9tIEluZGV4ZWREQjogJyIgKyBlcnJvciArICInIik7CiAgICAgICAgfQogICAgICAgIC8vIENvbnRpbnVlLgogICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAgICB9KTsKfTsKCm11cm9tLmluc3RhbGxMb2NhbEZvcmFnZSgpOwptdXJvbS5pbnN0YWxsVW5pY29kZUJhc2U2NCgpOwovLyBJbmRleGVkREIgbW9kdWxlcyBvdmVycmlkZSBIVE1MIG9uZXMuCm11cm9tLmxvYWRJbmRleGVkREJNb2R1bGVzKG11cm9tLmxvYWRNb2R1bGVzKTsK",
  13. {}
  14. ],
  15. [
  16. "муром.база_1.1.0",
  17. "LyoKICoKICog0KHQutCw0YfQuNCy0LDQtdC80YvQuSDRhNCw0LnQuyAvIERvd25sb2FkZWQgZmlsZQogKgogKi8KCtC80YPRgNC+0Lwu0YTQsNC50LsgPSB7fTsK0LzRg9GA0L7QvC7RhNCw0LnQuy7QvdCw0YfQsNC70L4gPQpgCjwhRE9DVFlQRSBodG1sPgo8aHRtbD4KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSI+CiAgICA8Ym9keT4KICAgICAgICA8c2NyaXB0Pgp2YXIg0LzRg9GA0L7QvCA9IHt9Owp2YXIgbXVyb20gPSDQvNGD0YDQvtC8OwrQvNGD0YDQvtC8LtC80L7QtNGD0LvQuCA9IFsKYDsK0LzRg9GA0L7QvC7RhNCw0LnQuy7QutC+0L3QtdGGID0KYApdOwoKT2JqZWN0LmRlZmluZVByb3BlcnR5KG11cm9tLCAibW9kdWxlcyIsIHsKICAgIGdldDogZnVuY3Rpb24oKQogICAgewogICAgICAgIHJldHVybiDQvNGD0YDQvtC8LtC80L7QtNGD0LvQuDsKICAgIH0sCiAgICBzZXQ6IGZ1bmN0aW9uKNC30L3QsNGH0LXQvdC40Y8pCiAgICB7CiAgICAgICAg0LzRg9GA0L7QvC7QvNC+0LTRg9C70LggPSDQt9C90LDRh9C10L3QuNGPOwogICAgfQp9KTsKCnZhciDQt9Cw0LPRgNGD0LfQvtGH0L3Ri9C50JzQvtC00YPQu9GMID0g0LzRg9GA0L7QvC7QvNC+0LTRg9C70LhbMF07CnZhciDQutC+0LQgPSBhdG9iKNC30LDQs9GA0YPQt9C+0YfQvdGL0LnQnNC+0LTRg9C70YxbMV0pOwpldmFsKNC60L7QtCk7CiAgICAgICAgPC9zY3JpcHQ+CiAgICA8L2JvZHk+CjwvaHRtbD4KYDsKCi8qCiAqIAogKiBVVUlECiAqCiAqLwoKLy8gQ3JlYXRlIEdVSUQgLyBVVUlEIGluIEphdmFTY3JpcHQ/Ci8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMTE3NTIzCtC80YPRgNC+0LwudXVpZCA9IGZ1bmN0aW9uKCkKewogICAgcmV0dXJuICd4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHgnLnJlcGxhY2UoCiAgICAgICAgL1t4eV0vZywKICAgICAgICBmdW5jdGlvbihjKQogICAgICAgIHsKICAgICAgICAgICAgdmFyIHIgPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwLCB2ID0gYyA9PSAneCcgPyByIDogKHIgJiAweDMgfCAweDgpOwogICAgICAgICAgICByZXR1cm4gdi50b1N0cmluZygxNik7CiAgICAgICAgfQogICAgKTsKfTsKCi8qCiAqIAogKiDQo9Cy0LXQtNC+0LzQuNGC0LXQu9GMIC8gUmVwb3J0ZXIKICoKICovCgovLyBSZXBvcnRlclN1YnNjcmlwdGlvbiBjbGFzcy4KZnVuY3Rpb24gUmVwb3J0ZXJTdWJzY3JpcHRpb24oaWQsIGNhbGxiYWNrLCByZXBvcnRlcikKewogICAgdGhpcy5pZCA9IGlkOwogICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrOwogICAgdGhpcy5yZXBvcnRlciA9IHJlcG9ydGVyOwp9CgovLyBSZXBvcnRlciBjbGFzcy4KZnVuY3Rpb24gUmVwb3J0ZXIobmFtZSkKewogICAgdGhpcy5uYW1lID0KICAgICAgICAodHlwZW9mIG5hbWUgIT09ICJ1bmRlZmluZWQiKSA/IAogICAgICAgIG5hbWUgOgogICAgICAgICIiOwogICAgdGhpcy5zdWJzY3JpcHRpb25zID0gW107Cn0KUmVwb3J0ZXIucHJvdG90eXBlLnJlcG9ydCA9IGZ1bmN0aW9uKCkKewogICAgZm9yICh2YXIgaWQgaW4gdGhpcy5zdWJzY3JpcHRpb25zKQogICAgewogICAgICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGlzLnN1YnNjcmlwdGlvbnNbaWRdOwogICAgICAgIHN1YnNjcmlwdGlvbi5jYWxsYmFjaygpOwogICAgfQp9ClJlcG9ydGVyLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbihjYWxsYmFjaykKewogICAgdmFyIGlkID0gbXVyb20udXVpZCgpOwogICAgdmFyIHN1YnNjcmlwdGlvbiA9IG5ldyBSZXBvcnRlclN1YnNjcmlwdGlvbihpZCwgY2FsbGJhY2ssIHRoaXMpOwogICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goc3Vic2NyaXB0aW9uKTsKICAgIHJldHVybiBzdWJzY3JpcHRpb247Cn0KUmVwb3J0ZXIucHJvdG90eXBlLnN1YnNjcmliZU1hbnkgPSBmdW5jdGlvbihmdW5jcykKewogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmdW5jcy5sZW5ndGg7ICsraSkKICAgIHsKICAgICAgICB2YXIgZnVuYyA9IGZ1bmNzW2ldOwogICAgICAgIHRoaXMuc3Vic2NyaWJlKGZ1bmMpOwogICAgfQp9Cgp2YXIg0KPQstC10LTQvtC80LjRgtC10LvRjCA9IFJlcG9ydGVyOwpSZXBvcnRlci5wcm90b3R5cGUu0YPQstC10LTQvtC80LjRgtGMID0gZnVuY3Rpb24oKQp7CiAgICB0aGlzLnJlcG9ydCgpOwp9OwpSZXBvcnRlci5wcm90b3R5cGUu0L/QvtC00L/QuNGB0LDRgtGMID0gZnVuY3Rpb24o0YTRg9C90LrRhtC40Y8pCnsKICAgIHRoaXMuc3Vic2NyaWJlKNGE0YPQvdC60YbQuNGPKTsKfTsKUmVwb3J0ZXIucHJvdG90eXBlLtC/0L7QtNC/0LjRgdCw0YLRjNCc0L3QvtCz0L4gPSBmdW5jdGlvbihmdW5jcykKewogICAgdGhpcy5zdWJzY3JpYmVNYW55KGZ1bmNzKTsKfTsKCi8qCiAqIAogKiDQn9GD0YHQuiAvIFN0YXJ0CiAqCiAqLwoK0LzRg9GA0L7QvC7Qv9GD0YHQuiA9IG5ldyDQo9Cy0LXQtNC+0LzQuNGC0LXQu9GMKCk7Ci8vIENhbiBhbHNvIGJlIGFjY2Vzc2VkIGFzICdtdXJvbS5ydW4nLgpPYmplY3QuZGVmaW5lUHJvcGVydHkobXVyb20sICJydW4iLCB7CiAgICBnZXQ6IGZ1bmN0aW9uKCkKICAgIHsKICAgICAgICByZXR1cm4g0LzRg9GA0L7QvC7Qv9GD0YHQujsKICAgIH0KfSk7Cm11cm9tLnN0YXJ0ID0gZnVuY3Rpb24oKQp7CiAgICDQvNGD0YDQvtC8LtC/0YPRgdC6LtGD0LLQtdC00L7QvNC40YLRjCgpOwp9OwoKLyoKICoKICog0JvQtdCy0LDRjyDQuCDQv9GA0LDQstCw0Y8g0L7QsdC70LDRgdGC0LggLyBMZWZ0IGFuZCByaWdodCByZWdpb25zCiAqCiAqLwoK0LzRg9GA0L7QvC7RgdC+0LfQtNCw0YLRjNCb0LXQstGD0Y7Qn9GA0LDQstGD0Y7QntCx0LvQsNGB0YLQuCA9IGZ1bmN0aW9uKCkKewogICAgLy8g0JvQtdCy0LDRjyDQvtCx0LvQsNGB0YLRjC4KICAgIHZhciDQu9C+ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICDQu9C+LmlkPSLQu9C10LLQsNGPLdC+0LHQu9Cw0YHRgtGMIjsKICAgINC70L4uc3R5bGUuY3NzVGV4dCA9CiAgICAgICAgInBvc2l0aW9uOiBmaXhlZDsgbGVmdDogMDsgdG9wOiAwOyBib3R0b206IDA7IHdpZHRoOiA1MCU7IjsKICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQo0LvQvik7CiAgICAKICAgIC8vINCf0YDQsNCy0LDRjyDQvtCx0LvQsNGB0YLRjC4KICAgIHZhciDQv9C+ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICDQv9C+LmlkPSLQv9GA0LDQstCw0Y8t0L7QsdC70LDRgdGC0YwiOwogICAg0L/Qvi5zdHlsZS5jc3NUZXh0ID0KICAgICAgICAicG9zaXRpb246IGZpeGVkOyByaWdodDogMDsgdG9wOiAwOyBib3R0b206IDA7IHdpZHRoOiA1MCU7IjsKICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQo0L/Qvik7CiAgICAKICAgIHJldHVybiBb0LvQviwg0L/Qvl07Cn07CgovKgogKgogKiDQpNC+0YDQvNCw0YLQuNGA0L7QstCw0L3QuNC1INGB0YLRgNC+0LogLyBTdHJpbmcgZm9ybWF0dGluZwogKgogKi8KCi8vIEphdmFTY3JpcHQgZXF1aXZhbGVudCB0byBwcmludGYvU3RyaW5nLkZvcm1hdAovLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDY3MzQzNgpmdW5jdGlvbiDRhNC+0YDQvNCw0YLQodGC0YDQvtC60LgoKQp7CiAgICAvLyBIb3cgdG8gc2hpZnQg4oCcYXJndW1lbnRz4oCdCiAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80Nzc1ODk1L2hvdy10by1zaGlmdC1hcmd1bWVudHMKICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTsKICAgIHZhciBzdHIgPSBhcmdzLnNoaWZ0KCk7CiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL3soXGQrKX0vZywgZnVuY3Rpb24obWF0Y2gsIG51bWJlcikgewogICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBhcmdzW251bWJlcl0gIT0gJ3VuZGVmaW5lZCcKICAgICAgICAgICAgICAgICAgICA/IGFyZ3NbbnVtYmVyXQogICAgICAgICAgICAgICAgICAgIDogbWF0Y2gKICAgICAgICAgICAgICAgIDsKICAgIH0pOwp9CgovLyBKYXZhU2NyaXB0IGVxdWl2YWxlbnQgdG8gcHJpbnRmL1N0cmluZy5Gb3JtYXQKLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzQ2NzM0MzYKZnVuY3Rpb24gZm9ybWF0U3RyaW5nKCkKewogICAgLy8gSG93IHRvIHNoaWZ0IOKAnGFyZ3VtZW50c+KAnT8KICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQ3NzU4OTUvaG93LXRvLXNoaWZ0LWFyZ3VtZW50cwogICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpOwogICAgdmFyIHN0ciA9IGFyZ3Muc2hpZnQoKTsKICAgIHJldHVybiBzdHIucmVwbGFjZSgveyhcZCspfS9nLCBmdW5jdGlvbihtYXRjaCwgbnVtYmVyKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIGFyZ3NbbnVtYmVyXSAhPSAndW5kZWZpbmVkJwogICAgICAgICAgICAgICAgICAgID8gYXJnc1tudW1iZXJdCiAgICAgICAgICAgICAgICAgICAgOiBtYXRjaAogICAgICAgICAgICAgICAgOwogICAgfSk7Cn0KICAgIA==",
  18. {}
  19. ],
  20. [
  21. "муром.редактор_1.0.0",
  22. "0LzRg9GA0L7QvC7Qt9Cw0LPRgNGD0LfQuNGC0YxBQ0UgPSBmdW5jdGlvbigpCnsKICAgIC8vINCg0LXQtNCw0LrRgtC+0YAg0LrQvtC00LAgQUNFLgogICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FqYXhvcmcvYWNlLWJ1aWxkcy9ibG9iL21hc3Rlci9zcmMtbWluLW5vY29uZmxpY3QvYWNlLmpzCihmdW5jdGlvbigpe2Z1bmN0aW9uIG8obil7dmFyIGk9ZTtuJiYoZVtuXXx8KGVbbl09e30pLGk9ZVtuXSk7aWYoIWkuZGVmaW5lfHwhaS5kZWZpbmUucGFja2FnZWQpdC5vcmlnaW5hbD1pLmRlZmluZSxpLmRlZmluZT10LGkuZGVmaW5lLnBhY2thZ2VkPSEwO2lmKCFpLnJlcXVpcmV8fCFpLnJlcXVpcmUucGFja2FnZWQpci5vcmlnaW5hbD1pLnJlcXVpcmUsaS5yZXF1aXJlPXIsaS5yZXF1aXJlLnBhY2thZ2VkPSEwfXZhciBBQ0VfTkFNRVNQQUNFID0gImFjZSIsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSgpOyFlJiZ0eXBlb2Ygd2luZG93IT0idW5kZWZpbmVkIiYmKGU9d2luZG93KTtpZighQUNFX05BTUVTUEFDRSYmdHlwZW9mIHJlcXVpcmVqcyE9InVuZGVmaW5lZCIpcmV0dXJuO3ZhciB0PWZ1bmN0aW9uKGUsbixyKXtpZih0eXBlb2YgZSE9InN0cmluZyIpe3Qub3JpZ2luYWw/dC5vcmlnaW5hbC5hcHBseSh0aGlzLGFyZ3VtZW50cyk6KGNvbnNvbGUuZXJyb3IoImRyb3BwaW5nIG1vZHVsZSBiZWNhdXNlIGRlZmluZSB3YXNuJ3QgYSBzdHJpbmcuIiksY29uc29sZS50cmFjZSgpKTtyZXR1cm59YXJndW1lbnRzLmxlbmd0aD09MiYmKHI9biksdC5tb2R1bGVzW2VdfHwodC5wYXlsb2Fkc1tlXT1yLHQubW9kdWxlc1tlXT1udWxsKX07dC5tb2R1bGVzPXt9LHQucGF5bG9hZHM9e307dmFyIG49ZnVuY3Rpb24oZSx0LG4pe2lmKHR5cGVvZiB0PT0ic3RyaW5nIil7dmFyIGk9cyhlLHQpO2lmKGkhPXVuZGVmaW5lZClyZXR1cm4gbiYmbigpLGl9ZWxzZSBpZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCk9PT0iW29iamVjdCBBcnJheV0iKXt2YXIgbz1bXTtmb3IodmFyIHU9MCxhPXQubGVuZ3RoO3U8YTsrK3Upe3ZhciBmPXMoZSx0W3VdKTtpZihmPT11bmRlZmluZWQmJnIub3JpZ2luYWwpcmV0dXJuO28ucHVzaChmKX1yZXR1cm4gbiYmbi5hcHBseShudWxsLG8pfHwhMH19LHI9ZnVuY3Rpb24oZSx0KXt2YXIgaT1uKCIiLGUsdCk7cmV0dXJuIGk9PXVuZGVmaW5lZCYmci5vcmlnaW5hbD9yLm9yaWdpbmFsLmFwcGx5KHRoaXMsYXJndW1lbnRzKTppfSxpPWZ1bmN0aW9uKGUsdCl7aWYodC5pbmRleE9mKCIhIikhPT0tMSl7dmFyIG49dC5zcGxpdCgiISIpO3JldHVybiBpKGUsblswXSkrIiEiK2koZSxuWzFdKX1pZih0LmNoYXJBdCgwKT09Ii4iKXt2YXIgcj1lLnNwbGl0KCIvIikuc2xpY2UoMCwtMSkuam9pbigiLyIpO3Q9cisiLyIrdDt3aGlsZSh0LmluZGV4T2YoIi4iKSE9PS0xJiZzIT10KXt2YXIgcz10O3Q9dC5yZXBsYWNlKC9cL1wuXC8vLCIvIikucmVwbGFjZSgvW15cL10rXC9cLlwuXC8vLCIiKX19cmV0dXJuIHR9LHM9ZnVuY3Rpb24oZSxyKXtyPWkoZSxyKTt2YXIgcz10Lm1vZHVsZXNbcl07aWYoIXMpe3M9dC5wYXlsb2Fkc1tyXTtpZih0eXBlb2Ygcz09ImZ1bmN0aW9uIil7dmFyIG89e30sdT17aWQ6cix1cmk6IiIsZXhwb3J0czpvLHBhY2thZ2VkOiEwfSxhPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4ocixlLHQpfSxmPXMoYSxvLHUpO289Znx8dS5leHBvcnRzLHQubW9kdWxlc1tyXT1vLGRlbGV0ZSB0LnBheWxvYWRzW3JdfXM9dC5tb2R1bGVzW3JdPW98fHN9cmV0dXJuIHN9O28oQUNFX05BTUVTUEFDRSl9KSgpLGFjZS5kZWZpbmUoImFjZS9saWIvcmVnZXhwIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBvKGUpe3JldHVybihlLmdsb2JhbD8iZyI6IiIpKyhlLmlnbm9yZUNhc2U/ImkiOiIiKSsoZS5tdWx0aWxpbmU/Im0iOiIiKSsoZS5leHRlbmRlZD8ieCI6IiIpKyhlLnN0aWNreT8ieSI6IiIpfWZ1bmN0aW9uIHUoZSx0LG4pe2lmKEFycmF5LnByb3RvdHlwZS5pbmRleE9mKXJldHVybiBlLmluZGV4T2YodCxuKTtmb3IodmFyIHI9bnx8MDtyPGUubGVuZ3RoO3IrKylpZihlW3JdPT09dClyZXR1cm4gcjtyZXR1cm4tMX12YXIgcj17ZXhlYzpSZWdFeHAucHJvdG90eXBlLmV4ZWMsdGVzdDpSZWdFeHAucHJvdG90eXBlLnRlc3QsbWF0Y2g6U3RyaW5nLnByb3RvdHlwZS5tYXRjaCxyZXBsYWNlOlN0cmluZy5wcm90b3R5cGUucmVwbGFjZSxzcGxpdDpTdHJpbmcucHJvdG90eXBlLnNwbGl0fSxpPXIuZXhlYy5jYWxsKC8oKT8/LywiIilbMV09PT11bmRlZmluZWQscz1mdW5jdGlvbigpe3ZhciBlPS9eL2c7cmV0dXJuIHIudGVzdC5jYWxsKGUsIiIpLCFlLmxhc3RJbmRleH0oKTtpZihzJiZpKXJldHVybjtSZWdFeHAucHJvdG90eXBlLmV4ZWM9ZnVuY3Rpb24oZSl7dmFyIHQ9ci5leGVjLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxuLGE7aWYodHlwZW9mIGU9PSJzdHJpbmciJiZ0KXshaSYmdC5sZW5ndGg+MSYmdSh0LCIiKT4tMSYmKGE9UmVnRXhwKHRoaXMuc291cmNlLHIucmVwbGFjZS5jYWxsKG8odGhpcyksImciLCIiKSksci5yZXBsYWNlLmNhbGwoZS5zbGljZSh0LmluZGV4KSxhLGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoLTI7ZSsrKWFyZ3VtZW50c1tlXT09PXVuZGVmaW5lZCYmKHRbZV09dW5kZWZpbmVkKX0pKTtpZih0aGlzLl94cmVnZXhwJiZ0aGlzLl94cmVnZXhwLmNhcHR1cmVOYW1lcylmb3IodmFyIGY9MTtmPHQubGVuZ3RoO2YrKyluPXRoaXMuX3hyZWdleHAuY2FwdHVyZU5hbWVzW2YtMV0sbiYmKHRbbl09dFtmXSk7IXMmJnRoaXMuZ2xvYmFsJiYhdFswXS5sZW5ndGgmJnRoaXMubGFzdEluZGV4PnQuaW5kZXgmJnRoaXMubGFzdEluZGV4LS19cmV0dXJuIHR9LHN8fChSZWdFeHAucHJvdG90eXBlLnRlc3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ci5leGVjLmNhbGwodGhpcyxlKTtyZXR1cm4gdCYmdGhpcy5nbG9iYWwmJiF0WzBdLmxlbmd0aCYmdGhpcy5sYXN0SW5kZXg+dC5pbmRleCYmdGhpcy5sYXN0SW5kZXgtLSwhIXR9KX0pLGFjZS5kZWZpbmUoImFjZS9saWIvZXM1LXNoaW0iLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcigpe31mdW5jdGlvbiB3KGUpe3RyeXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInNlbnRpbmVsIix7fSksInNlbnRpbmVsImluIGV9Y2F0Y2godCl7fX1mdW5jdGlvbiBIKGUpe3JldHVybiBlPStlLGUhPT1lP2U9MDplIT09MCYmZSE9PTEvMCYmZSE9PS0xLzAmJihlPShlPjB8fC0xKSpNYXRoLmZsb29yKE1hdGguYWJzKGUpKSksZX1mdW5jdGlvbiBCKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVybiBlPT09bnVsbHx8dD09PSJ1bmRlZmluZWQifHx0PT09ImJvb2xlYW4ifHx0PT09Im51bWJlciJ8fHQ9PT0ic3RyaW5nIn1mdW5jdGlvbiBqKGUpe3ZhciB0LG4scjtpZihCKGUpKXJldHVybiBlO249ZS52YWx1ZU9mO2lmKHR5cGVvZiBuPT0iZnVuY3Rpb24iKXt0PW4uY2FsbChlKTtpZihCKHQpKXJldHVybiB0fXI9ZS50b1N0cmluZztpZih0eXBlb2Ygcj09ImZ1bmN0aW9uIil7dD1yLmNhbGwoZSk7aWYoQih0KSlyZXR1cm4gdH10aHJvdyBuZXcgVHlwZUVycm9yfUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kfHwoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24odCl7dmFyIG49dGhpcztpZih0eXBlb2YgbiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICIrbik7dmFyIGk9dS5jYWxsKGFyZ3VtZW50cywxKSxzPWZ1bmN0aW9uKCl7aWYodGhpcyBpbnN0YW5jZW9mIHMpe3ZhciBlPW4uYXBwbHkodGhpcyxpLmNvbmNhdCh1LmNhbGwoYXJndW1lbnRzKSkpO3JldHVybiBPYmplY3QoZSk9PT1lP2U6dGhpc31yZXR1cm4gbi5hcHBseSh0LGkuY29uY2F0KHUuY2FsbChhcmd1bWVudHMpKSl9O3JldHVybiBuLnByb3RvdHlwZSYmKHIucHJvdG90eXBlPW4ucHJvdG90eXBlLHMucHJvdG90eXBlPW5ldyByLHIucHJvdG90eXBlPW51bGwpLHN9KTt2YXIgaT1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbCxzPUFycmF5LnByb3RvdHlwZSxvPU9iamVjdC5wcm90b3R5cGUsdT1zLnNsaWNlLGE9aS5iaW5kKG8udG9TdHJpbmcpLGY9aS5iaW5kKG8uaGFzT3duUHJvcGVydHkpLGwsYyxoLHAsZDtpZihkPWYobywiX19kZWZpbmVHZXR0ZXJfXyIpKWw9aS5iaW5kKG8uX19kZWZpbmVHZXR0ZXJfXyksYz1pLmJpbmQoby5fX2RlZmluZVNldHRlcl9fKSxoPWkuYmluZChvLl9fbG9va3VwR2V0dGVyX18pLHA9aS5iaW5kKG8uX19sb29rdXBTZXR0ZXJfXyk7aWYoWzEsMl0uc3BsaWNlKDApLmxlbmd0aCE9MilpZighZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3ZhciB0PW5ldyBBcnJheShlKzIpO3JldHVybiB0WzBdPXRbMV09MCx0fXZhciB0PVtdLG47dC5zcGxpY2UuYXBwbHkodCxlKDIwKSksdC5zcGxpY2UuYXBwbHkodCxlKDI2KSksbj10Lmxlbmd0aCx0LnNwbGljZSg1LDAsIlhYWCIpLG4rMT09dC5sZW5ndGg7aWYobisxPT10Lmxlbmd0aClyZXR1cm4hMH0oKSlBcnJheS5wcm90b3R5cGUuc3BsaWNlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5sZW5ndGg7ZT4wP2U+biYmKGU9bik6ZT09dm9pZCAwP2U9MDplPDAmJihlPU1hdGgubWF4KG4rZSwwKSksZSt0PG58fCh0PW4tZSk7dmFyIHI9dGhpcy5zbGljZShlLGUrdCksaT11LmNhbGwoYXJndW1lbnRzLDIpLHM9aS5sZW5ndGg7aWYoZT09PW4pcyYmdGhpcy5wdXNoLmFwcGx5KHRoaXMsaSk7ZWxzZXt2YXIgbz1NYXRoLm1pbih0LG4tZSksYT1lK28sZj1hK3MtbyxsPW4tYSxjPW4tbztpZihmPGEpZm9yKHZhciBoPTA7aDxsOysraCl0aGlzW2YraF09dGhpc1thK2hdO2Vsc2UgaWYoZj5hKWZvcihoPWw7aC0tOyl0aGlzW2YraF09dGhpc1thK2hdO2lmKHMmJmU9PT1jKXRoaXMubGVuZ3RoPWMsdGhpcy5wdXNoLmFwcGx5KHRoaXMsaSk7ZWxzZXt0aGlzLmxlbmd0aD1jK3M7Zm9yKGg9MDtoPHM7KytoKXRoaXNbZStoXT1pW2hdfX1yZXR1cm4gcn07ZWxzZXt2YXIgdj1BcnJheS5wcm90b3R5cGUuc3BsaWNlO0FycmF5LnByb3RvdHlwZS5zcGxpY2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD92LmFwcGx5KHRoaXMsW2U9PT12b2lkIDA/MDplLHQ9PT12b2lkIDA/dGhpcy5sZW5ndGgtZTp0XS5jb25jYXQodS5jYWxsKGFyZ3VtZW50cywyKSkpOltdfX1BcnJheS5pc0FycmF5fHwoQXJyYXkuaXNBcnJheT1mdW5jdGlvbih0KXtyZXR1cm4gYSh0KT09IltvYmplY3QgQXJyYXldIn0pO3ZhciBtPU9iamVjdCgiYSIpLGc9bVswXSE9ImEifHwhKDAgaW4gbSk7QXJyYXkucHJvdG90eXBlLmZvckVhY2h8fChBcnJheS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbih0KXt2YXIgbj1GKHRoaXMpLHI9ZyYmYSh0aGlzKT09IltvYmplY3QgU3RyaW5nXSI/dGhpcy5zcGxpdCgiIik6bixpPWFyZ3VtZW50c1sxXSxzPS0xLG89ci5sZW5ndGg+Pj4wO2lmKGEodCkhPSJbb2JqZWN0IEZ1bmN0aW9uXSIpdGhyb3cgbmV3IFR5cGVFcnJvcjt3aGlsZSgrK3M8bylzIGluIHImJnQuY2FsbChpLHJbc10scyxuKX0pLEFycmF5LnByb3RvdHlwZS5tYXB8fChBcnJheS5wcm90b3R5cGUubWFwPWZ1bmN0aW9uKHQpe3ZhciBuPUYodGhpcykscj1nJiZhKHRoaXMpPT0iW29iamVjdCBTdHJpbmddIj90aGlzLnNwbGl0KCIiKTpuLGk9ci5sZW5ndGg+Pj4wLHM9QXJyYXkoaSksbz1hcmd1bWVudHNbMV07aWYoYSh0KSE9IltvYmplY3QgRnVuY3Rpb25dIil0aHJvdyBuZXcgVHlwZUVycm9yKHQrIiBpcyBub3QgYSBmdW5jdGlvbiIpO2Zvcih2YXIgdT0wO3U8aTt1KyspdSBpbiByJiYoc1t1XT10LmNhbGwobyxyW3VdLHUsbikpO3JldHVybiBzfSksQXJyYXkucHJvdG90eXBlLmZpbHRlcnx8KEFycmF5LnByb3RvdHlwZS5maWx0ZXI9ZnVuY3Rpb24odCl7dmFyIG49Rih0aGlzKSxyPWcmJmEodGhpcyk9PSJbb2JqZWN0IFN0cmluZ10iP3RoaXMuc3BsaXQoIiIpOm4saT1yLmxlbmd0aD4+PjAscz1bXSxvLHU9YXJndW1lbnRzWzFdO2lmKGEodCkhPSJbb2JqZWN0IEZ1bmN0aW9uXSIpdGhyb3cgbmV3IFR5cGVFcnJvcih0KyIgaXMgbm90IGEgZnVuY3Rpb24iKTtmb3IodmFyIGY9MDtmPGk7ZisrKWYgaW4gciYmKG89cltmXSx0LmNhbGwodSxvLGYsbikmJnMucHVzaChvKSk7cmV0dXJuIHN9KSxBcnJheS5wcm90b3R5cGUuZXZlcnl8fChBcnJheS5wcm90b3R5cGUuZXZlcnk9ZnVuY3Rpb24odCl7dmFyIG49Rih0aGlzKSxyPWcmJmEodGhpcyk9PSJbb2JqZWN0IFN0cmluZ10iP3RoaXMuc3BsaXQoIiIpOm4saT1yLmxlbmd0aD4+PjAscz1hcmd1bWVudHNbMV07aWYoYSh0KSE9IltvYmplY3QgRnVuY3Rpb25dIil0aHJvdyBuZXcgVHlwZUVycm9yKHQrIiBpcyBub3QgYSBmdW5jdGlvbiIpO2Zvcih2YXIgbz0wO288aTtvKyspaWYobyBpbiByJiYhdC5jYWxsKHMscltvXSxvLG4pKXJldHVybiExO3JldHVybiEwfSksQXJyYXkucHJvdG90eXBlLnNvbWV8fChBcnJheS5wcm90b3R5cGUuc29tZT1mdW5jdGlvbih0KXt2YXIgbj1GKHRoaXMpLHI9ZyYmYSh0aGlzKT09IltvYmplY3QgU3RyaW5nXSI/dGhpcy5zcGxpdCgiIik6bixpPXIubGVuZ3RoPj4+MCxzPWFyZ3VtZW50c1sxXTtpZihhKHQpIT0iW29iamVjdCBGdW5jdGlvbl0iKXRocm93IG5ldyBUeXBlRXJyb3IodCsiIGlzIG5vdCBhIGZ1bmN0aW9uIik7Zm9yKHZhciBvPTA7bzxpO28rKylpZihvIGluIHImJnQuY2FsbChzLHJbb10sbyxuKSlyZXR1cm4hMDtyZXR1cm4hMX0pLEFycmF5LnByb3RvdHlwZS5yZWR1Y2V8fChBcnJheS5wcm90b3R5cGUucmVkdWNlPWZ1bmN0aW9uKHQpe3ZhciBuPUYodGhpcykscj1nJiZhKHRoaXMpPT0iW29iamVjdCBTdHJpbmddIj90aGlzLnNwbGl0KCIiKTpuLGk9ci5sZW5ndGg+Pj4wO2lmKGEodCkhPSJbb2JqZWN0IEZ1bmN0aW9uXSIpdGhyb3cgbmV3IFR5cGVFcnJvcih0KyIgaXMgbm90IGEgZnVuY3Rpb24iKTtpZighaSYmYXJndW1lbnRzLmxlbmd0aD09MSl0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7dmFyIHM9MCxvO2lmKGFyZ3VtZW50cy5sZW5ndGg+PTIpbz1hcmd1bWVudHNbMV07ZWxzZSBkb3tpZihzIGluIHIpe289cltzKytdO2JyZWFrfWlmKCsrcz49aSl0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIil9d2hpbGUoITApO2Zvcig7czxpO3MrKylzIGluIHImJihvPXQuY2FsbCh2b2lkIDAsbyxyW3NdLHMsbikpO3JldHVybiBvfSksQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0fHwoQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0PWZ1bmN0aW9uKHQpe3ZhciBuPUYodGhpcykscj1nJiZhKHRoaXMpPT0iW29iamVjdCBTdHJpbmddIj90aGlzLnNwbGl0KCIiKTpuLGk9ci5sZW5ndGg+Pj4wO2lmKGEodCkhPSJbb2JqZWN0IEZ1bmN0aW9uXSIpdGhyb3cgbmV3IFR5cGVFcnJvcih0KyIgaXMgbm90IGEgZnVuY3Rpb24iKTtpZighaSYmYXJndW1lbnRzLmxlbmd0aD09MSl0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWR1Y2VSaWdodCBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTt2YXIgcyxvPWktMTtpZihhcmd1bWVudHMubGVuZ3RoPj0yKXM9YXJndW1lbnRzWzFdO2Vsc2UgZG97aWYobyBpbiByKXtzPXJbby0tXTticmVha31pZigtLW88MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWR1Y2VSaWdodCBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKX13aGlsZSghMCk7ZG8gbyBpbiB0aGlzJiYocz10LmNhbGwodm9pZCAwLHMscltvXSxvLG4pKTt3aGlsZShvLS0pO3JldHVybiBzfSk7aWYoIUFycmF5LnByb3RvdHlwZS5pbmRleE9mfHxbMCwxXS5pbmRleE9mKDEsMikhPS0xKUFycmF5LnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKHQpe3ZhciBuPWcmJmEodGhpcyk9PSJbb2JqZWN0IFN0cmluZ10iP3RoaXMuc3BsaXQoIiIpOkYodGhpcykscj1uLmxlbmd0aD4+PjA7aWYoIXIpcmV0dXJuLTE7dmFyIGk9MDthcmd1bWVudHMubGVuZ3RoPjEmJihpPUgoYXJndW1lbnRzWzFdKSksaT1pPj0wP2k6TWF0aC5tYXgoMCxyK2kpO2Zvcig7aTxyO2krKylpZihpIGluIG4mJm5baV09PT10KXJldHVybiBpO3JldHVybi0xfTtpZighQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mfHxbMCwxXS5sYXN0SW5kZXhPZigwLC0zKSE9LTEpQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKHQpe3ZhciBuPWcmJmEodGhpcyk9PSJbb2JqZWN0IFN0cmluZ10iP3RoaXMuc3BsaXQoIiIpOkYodGhpcykscj1uLmxlbmd0aD4+PjA7aWYoIXIpcmV0dXJuLTE7dmFyIGk9ci0xO2FyZ3VtZW50cy5sZW5ndGg+MSYmKGk9TWF0aC5taW4oaSxIKGFyZ3VtZW50c1sxXSkpKSxpPWk+PTA/aTpyLU1hdGguYWJzKGkpO2Zvcig7aT49MDtpLS0paWYoaSBpbiBuJiZ0PT09bltpXSlyZXR1cm4gaTtyZXR1cm4tMX07T2JqZWN0LmdldFByb3RvdHlwZU9mfHwoT2JqZWN0LmdldFByb3RvdHlwZU9mPWZ1bmN0aW9uKHQpe3JldHVybiB0Ll9fcHJvdG9fX3x8KHQuY29uc3RydWN0b3I/dC5jb25zdHJ1Y3Rvci5wcm90b3R5cGU6byl9KTtpZighT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcil7dmFyIHk9Ik9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgY2FsbGVkIG9uIGEgbm9uLW9iamVjdDogIjtPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yPWZ1bmN0aW9uKHQsbil7aWYodHlwZW9mIHQhPSJvYmplY3QiJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uInx8dD09PW51bGwpdGhyb3cgbmV3IFR5cGVFcnJvcih5K3QpO2lmKCFmKHQsbikpcmV0dXJuO3ZhciByLGkscztyPXtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH07aWYoZCl7dmFyIHU9dC5fX3Byb3RvX187dC5fX3Byb3RvX189bzt2YXIgaT1oKHQsbikscz1wKHQsbik7dC5fX3Byb3RvX189dTtpZihpfHxzKXJldHVybiBpJiYoci5nZXQ9aSkscyYmKHIuc2V0PXMpLHJ9cmV0dXJuIHIudmFsdWU9dFtuXSxyfX1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8KE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qua2V5cyh0KX0pO2lmKCFPYmplY3QuY3JlYXRlKXt2YXIgYjtPYmplY3QucHJvdG90eXBlLl9fcHJvdG9fXz09PW51bGw/Yj1mdW5jdGlvbigpe3JldHVybntfX3Byb3RvX186bnVsbH19OmI9ZnVuY3Rpb24oKXt2YXIgZT17fTtmb3IodmFyIHQgaW4gZSllW3RdPW51bGw7cmV0dXJuIGUuY29uc3RydWN0b3I9ZS5oYXNPd25Qcm9wZXJ0eT1lLnByb3BlcnR5SXNFbnVtZXJhYmxlPWUuaXNQcm90b3R5cGVPZj1lLnRvTG9jYWxlU3RyaW5nPWUudG9TdHJpbmc9ZS52YWx1ZU9mPWUuX19wcm90b19fPW51bGwsZX0sT2JqZWN0LmNyZWF0ZT1mdW5jdGlvbih0LG4pe3ZhciByO2lmKHQ9PT1udWxsKXI9YigpO2Vsc2V7aWYodHlwZW9mIHQhPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoInR5cGVvZiBwcm90b3R5cGVbIit0eXBlb2YgdCsiXSAhPSAnb2JqZWN0JyIpO3ZhciBpPWZ1bmN0aW9uKCl7fTtpLnByb3RvdHlwZT10LHI9bmV3IGksci5fX3Byb3RvX189dH1yZXR1cm4gbiE9PXZvaWQgMCYmT2JqZWN0LmRlZmluZVByb3BlcnRpZXMocixuKSxyfX1pZihPYmplY3QuZGVmaW5lUHJvcGVydHkpe3ZhciBFPXcoe30pLFM9dHlwZW9mIGRvY3VtZW50PT0idW5kZWZpbmVkInx8dyhkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSk7aWYoIUV8fCFTKXZhciB4PU9iamVjdC5kZWZpbmVQcm9wZXJ0eX1pZighT2JqZWN0LmRlZmluZVByb3BlcnR5fHx4KXt2YXIgVD0iUHJvcGVydHkgZGVzY3JpcHRpb24gbXVzdCBiZSBhbiBvYmplY3Q6ICIsTj0iT2JqZWN0LmRlZmluZVByb3BlcnR5IGNhbGxlZCBvbiBub24tb2JqZWN0OiAiLEM9ImdldHRlcnMgJiBzZXR0ZXJzIGNhbiBub3QgYmUgZGVmaW5lZCBvbiB0aGlzIGphdmFzY3JpcHQgZW5naW5lIjtPYmplY3QuZGVmaW5lUHJvcGVydHk9ZnVuY3Rpb24odCxuLHIpe2lmKHR5cGVvZiB0IT0ib2JqZWN0IiYmdHlwZW9mIHQhPSJmdW5jdGlvbiJ8fHQ9PT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoTit0KTtpZih0eXBlb2YgciE9Im9iamVjdCImJnR5cGVvZiByIT0iZnVuY3Rpb24ifHxyPT09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKFQrcik7aWYoeCl0cnl7cmV0dXJuIHguY2FsbChPYmplY3QsdCxuLHIpfWNhdGNoKGkpe31pZihmKHIsInZhbHVlIikpaWYoZCYmKGgodCxuKXx8cCh0LG4pKSl7dmFyIHM9dC5fX3Byb3RvX187dC5fX3Byb3RvX189byxkZWxldGUgdFtuXSx0W25dPXIudmFsdWUsdC5fX3Byb3RvX189c31lbHNlIHRbbl09ci52YWx1ZTtlbHNle2lmKCFkKXRocm93IG5ldyBUeXBlRXJyb3IoQyk7ZihyLCJnZXQiKSYmbCh0LG4sci5nZXQpLGYociwic2V0IikmJmModCxuLHIuc2V0KX1yZXR1cm4gdH19T2JqZWN0LmRlZmluZVByb3BlcnRpZXN8fChPYmplY3QuZGVmaW5lUHJvcGVydGllcz1mdW5jdGlvbih0LG4pe2Zvcih2YXIgciBpbiBuKWYobixyKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQscixuW3JdKTtyZXR1cm4gdH0pLE9iamVjdC5zZWFsfHwoT2JqZWN0LnNlYWw9ZnVuY3Rpb24odCl7cmV0dXJuIHR9KSxPYmplY3QuZnJlZXplfHwoT2JqZWN0LmZyZWV6ZT1mdW5jdGlvbih0KXtyZXR1cm4gdH0pO3RyeXtPYmplY3QuZnJlZXplKGZ1bmN0aW9uKCl7fSl9Y2F0Y2goayl7T2JqZWN0LmZyZWV6ZT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHR5cGVvZiBuPT0iZnVuY3Rpb24iP246dChuKX19KE9iamVjdC5mcmVlemUpfU9iamVjdC5wcmV2ZW50RXh0ZW5zaW9uc3x8KE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gdH0pLE9iamVjdC5pc1NlYWxlZHx8KE9iamVjdC5pc1NlYWxlZD1mdW5jdGlvbih0KXtyZXR1cm4hMX0pLE9iamVjdC5pc0Zyb3plbnx8KE9iamVjdC5pc0Zyb3plbj1mdW5jdGlvbih0KXtyZXR1cm4hMX0pLE9iamVjdC5pc0V4dGVuc2libGV8fChPYmplY3QuaXNFeHRlbnNpYmxlPWZ1bmN0aW9uKHQpe2lmKE9iamVjdCh0KT09PXQpdGhyb3cgbmV3IFR5cGVFcnJvcjt2YXIgbj0iIjt3aGlsZShmKHQsbikpbis9Ij8iO3Rbbl09ITA7dmFyIHI9Zih0LG4pO3JldHVybiBkZWxldGUgdFtuXSxyfSk7aWYoIU9iamVjdC5rZXlzKXt2YXIgTD0hMCxBPVsidG9TdHJpbmciLCJ0b0xvY2FsZVN0cmluZyIsInZhbHVlT2YiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUHJvdG90eXBlT2YiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImNvbnN0cnVjdG9yIl0sTz1BLmxlbmd0aDtmb3IodmFyIE0gaW57dG9TdHJpbmc6bnVsbH0pTD0hMTtPYmplY3Qua2V5cz1mdW5jdGlvbiBJKGUpe2lmKHR5cGVvZiBlIT0ib2JqZWN0IiYmdHlwZW9mIGUhPSJmdW5jdGlvbiJ8fGU9PT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdC5rZXlzIGNhbGxlZCBvbiBhIG5vbi1vYmplY3QiKTt2YXIgST1bXTtmb3IodmFyIHQgaW4gZSlmKGUsdCkmJkkucHVzaCh0KTtpZihMKWZvcih2YXIgbj0wLHI9TztuPHI7bisrKXt2YXIgaT1BW25dO2YoZSxpKSYmSS5wdXNoKGkpfXJldHVybiBJfX1EYXRlLm5vd3x8KERhdGUubm93PWZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9KTt2YXIgXz0iCVxuXHgwYlxmXHIgXHUwMGEwXHUxNjgwXHUxODBlXHUyMDAwXHUyMDAxXHUyMDAyXHUyMDAzXHUyMDA0XHUyMDA1XHUyMDA2XHUyMDA3XHUyMDA4XHUyMDA5XHUyMDBhXHUyMDJmXHUyMDVmXHUzMDAwXHUyMDI4XHUyMDI5XHVmZWZmIjtpZighU3RyaW5nLnByb3RvdHlwZS50cmltfHxfLnRyaW0oKSl7Xz0iWyIrXysiXSI7dmFyIEQ9bmV3IFJlZ0V4cCgiXiIrXytfKyIqIiksUD1uZXcgUmVnRXhwKF8rXysiKiQiKTtTdHJpbmcucHJvdG90eXBlLnRyaW09ZnVuY3Rpb24oKXtyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoRCwiIikucmVwbGFjZShQLCIiKX19dmFyIEY9ZnVuY3Rpb24oZSl7aWYoZT09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYW4ndCBjb252ZXJ0ICIrZSsiIHRvIG9iamVjdCIpO3JldHVybiBPYmplY3QoZSl9fSksYWNlLmRlZmluZSgiYWNlL2xpYi9maXhvbGRicm93c2VycyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvcmVnZXhwIiwiYWNlL2xpYi9lczUtc2hpbSJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZSgiLi9yZWdleHAiKSxlKCIuL2VzNS1zaGltIiksdHlwZW9mIEVsZW1lbnQhPSJ1bmRlZmluZWQiJiYhRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoRWxlbWVudC5wcm90b3R5cGUsInJlbW92ZSIse2VudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcyl9fSl9KSxhY2UuZGVmaW5lKCJhY2UvbGliL3VzZXJhZ2VudCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5PUz17TElOVVg6IkxJTlVYIixNQUM6Ik1BQyIsV0lORE9XUzoiV0lORE9XUyJ9LHQuZ2V0T1M9ZnVuY3Rpb24oKXtyZXR1cm4gdC5pc01hYz90Lk9TLk1BQzp0LmlzTGludXg/dC5PUy5MSU5VWDp0Lk9TLldJTkRPV1N9O3ZhciByPXR5cGVvZiBuYXZpZ2F0b3I9PSJvYmplY3QiP25hdmlnYXRvcjp7fSxpPSgvbWFjfHdpbnxsaW51eC9pLmV4ZWMoci5wbGF0Zm9ybSl8fFsib3RoZXIiXSlbMF0udG9Mb3dlckNhc2UoKSxzPXIudXNlckFnZW50fHwiIixvPXIuYXBwTmFtZXx8IiI7dC5pc1dpbj1pPT0id2luIix0LmlzTWFjPWk9PSJtYWMiLHQuaXNMaW51eD1pPT0ibGludXgiLHQuaXNJRT1vPT0iTWljcm9zb2Z0IEludGVybmV0IEV4cGxvcmVyInx8by5pbmRleE9mKCJNU0FwcEhvc3QiKT49MD9wYXJzZUZsb2F0KChzLm1hdGNoKC8oPzpNU0lFIHxUcmlkZW50XC9bMC05XStbXC4wLTldKzsuKnJ2OikoWzAtOV0rW1wuMC05XSspLyl8fFtdKVsxXSk6cGFyc2VGbG9hdCgocy5tYXRjaCgvKD86VHJpZGVudFwvWzAtOV0rW1wuMC05XSs7LipydjopKFswLTldK1tcLjAtOV0rKS8pfHxbXSlbMV0pLHQuaXNPbGRJRT10LmlzSUUmJnQuaXNJRTw5LHQuaXNHZWNrbz10LmlzTW96aWxsYT1zLm1hdGNoKC8gR2Vja29cL1xkKy8pLHQuaXNPcGVyYT10eXBlb2Ygb3BlcmE9PSJvYmplY3QiJiZPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwod2luZG93Lm9wZXJhKT09IltvYmplY3QgT3BlcmFdIix0LmlzV2ViS2l0PXBhcnNlRmxvYXQocy5zcGxpdCgiV2ViS2l0LyIpWzFdKXx8dW5kZWZpbmVkLHQuaXNDaHJvbWU9cGFyc2VGbG9hdChzLnNwbGl0KCIgQ2hyb21lLyIpWzFdKXx8dW5kZWZpbmVkLHQuaXNFZGdlPXBhcnNlRmxvYXQocy5zcGxpdCgiIEVkZ2UvIilbMV0pfHx1bmRlZmluZWQsdC5pc0FJUj1zLmluZGV4T2YoIkFkb2JlQUlSIik+PTAsdC5pc0FuZHJvaWQ9cy5pbmRleE9mKCJBbmRyb2lkIik+PTAsdC5pc0Nocm9tZU9TPXMuaW5kZXhPZigiIENyT1MgIik+PTAsdC5pc0lPUz0vaVBhZHxpUGhvbmV8aVBvZC8udGVzdChzKSYmIXdpbmRvdy5NU1N0cmVhbSx0LmlzSU9TJiYodC5pc01hYz0hMCksdC5pc01vYmlsZT10LmlzSU9TfHx0LmlzQW5kcm9pZH0pLGFjZS5kZWZpbmUoImFjZS9saWIvZG9tIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi91c2VyYWdlbnQiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoIi4vdXNlcmFnZW50IiksaT0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI7dC5idWlsZERvbT1mdW5jdGlvbiBvKGUsdCxuKXtpZih0eXBlb2YgZT09InN0cmluZyImJmUpe3ZhciByPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUpO3JldHVybiB0JiZ0LmFwcGVuZENoaWxkKHIpLHJ9aWYoIUFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGU7aWYodHlwZW9mIGVbMF0hPSJzdHJpbmcifHwhZVswXSl7dmFyIGk9W107Zm9yKHZhciBzPTA7czxlLmxlbmd0aDtzKyspe3ZhciB1PW8oZVtzXSx0LG4pO3UmJmkucHVzaCh1KX1yZXR1cm4gaX12YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGVbMF0pLGY9ZVsxXSxsPTE7ZiYmdHlwZW9mIGY9PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheShmKSYmKGw9Mik7Zm9yKHZhciBzPWw7czxlLmxlbmd0aDtzKyspbyhlW3NdLGEsbik7cmV0dXJuIGw9PTImJk9iamVjdC5rZXlzKGYpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZltlXTtlPT09ImNsYXNzIj9hLmNsYXNzTmFtZT1BcnJheS5pc0FycmF5KHQpP3Quam9pbigiICIpOnQ6dHlwZW9mIHQ9PSJmdW5jdGlvbiJ8fGU9PSJ2YWx1ZSI/YVtlXT10OmU9PT0icmVmIj9uJiYoblt0XT1hKTp0IT1udWxsJiZhLnNldEF0dHJpYnV0ZShlLHQpfSksdCYmdC5hcHBlbmRDaGlsZChhKSxhfSx0LmdldERvY3VtZW50SGVhZD1mdW5jdGlvbihlKXtyZXR1cm4gZXx8KGU9ZG9jdW1lbnQpLGUuaGVhZHx8ZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdfHxlLmRvY3VtZW50RWxlbWVudH0sdC5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUz9kb2N1bWVudC5jcmVhdGVFbGVtZW50TlModHx8aSxlKTpkb2N1bWVudC5jcmVhdGVFbGVtZW50KGUpfSx0LnJlbW92ZUNoaWxkcmVuPWZ1bmN0aW9uKGUpe2UuaW5uZXJIVE1MPSIifSx0LmNyZWF0ZVRleHROb2RlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dD90Lm93bmVyRG9jdW1lbnQ6ZG9jdW1lbnQ7cmV0dXJuIG4uY3JlYXRlVGV4dE5vZGUoZSl9LHQuY3JlYXRlRnJhZ21lbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZT9lLm93bmVyRG9jdW1lbnQ6ZG9jdW1lbnQ7cmV0dXJuIHQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpfSx0Lmhhc0Nzc0NsYXNzPWZ1bmN0aW9uKGUsdCl7dmFyIG49KGUuY2xhc3NOYW1lKyIiKS5zcGxpdCgvXHMrL2cpO3JldHVybiBuLmluZGV4T2YodCkhPT0tMX0sdC5hZGRDc3NDbGFzcz1mdW5jdGlvbihlLG4pe3QuaGFzQ3NzQ2xhc3MoZSxuKXx8KGUuY2xhc3NOYW1lKz0iICIrbil9LHQucmVtb3ZlQ3NzQ2xhc3M9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmNsYXNzTmFtZS5zcGxpdCgvXHMrL2cpO2Zvcig7Oyl7dmFyIHI9bi5pbmRleE9mKHQpO2lmKHI9PS0xKWJyZWFrO24uc3BsaWNlKHIsMSl9ZS5jbGFzc05hbWU9bi5qb2luKCIgIil9LHQudG9nZ2xlQ3NzQ2xhc3M9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmNsYXNzTmFtZS5zcGxpdCgvXHMrL2cpLHI9ITA7Zm9yKDs7KXt2YXIgaT1uLmluZGV4T2YodCk7aWYoaT09LTEpYnJlYWs7cj0hMSxuLnNwbGljZShpLDEpfXJldHVybiByJiZuLnB1c2godCksZS5jbGFzc05hbWU9bi5qb2luKCIgIikscn0sdC5zZXRDc3NDbGFzcz1mdW5jdGlvbihlLG4scil7cj90LmFkZENzc0NsYXNzKGUsbik6dC5yZW1vdmVDc3NDbGFzcyhlLG4pfSx0Lmhhc0Nzc1N0cmluZz1mdW5jdGlvbihlLHQpe3ZhciBuPTAscjt0PXR8fGRvY3VtZW50O2lmKHI9dC5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZSIpKXdoaWxlKG48ci5sZW5ndGgpaWYocltuKytdLmlkPT09ZSlyZXR1cm4hMH0sdC5pbXBvcnRDc3NTdHJpbmc9ZnVuY3Rpb24obixyLGkpe3ZhciBzPWk7aWYoIWl8fCFpLmdldFJvb3ROb2RlKXM9ZG9jdW1lbnQ7ZWxzZXtzPWkuZ2V0Um9vdE5vZGUoKTtpZighc3x8cz09aSlzPWRvY3VtZW50fXZhciBvPXMub3duZXJEb2N1bWVudHx8cztpZihyJiZ0Lmhhc0Nzc1N0cmluZyhyLHMpKXJldHVybiBudWxsO3ImJihuKz0iXG4vKiMgc291cmNlVVJMPWFjZS9jc3MvIityKyIgKi8iKTt2YXIgdT10LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7dS5hcHBlbmRDaGlsZChvLmNyZWF0ZVRleHROb2RlKG4pKSxyJiYodS5pZD1yKSxzPT1vJiYocz10LmdldERvY3VtZW50SGVhZChvKSkscy5pbnNlcnRCZWZvcmUodSxzLmZpcnN0Q2hpbGQpfSx0LmltcG9ydENzc1N0eWxzaGVldD1mdW5jdGlvbihlLG4pe3QuYnVpbGREb20oWyJsaW5rIix7cmVsOiJzdHlsZXNoZWV0IixocmVmOmV9XSx0LmdldERvY3VtZW50SGVhZChuKSl9LHQuc2Nyb2xsYmFyV2lkdGg9ZnVuY3Rpb24oZSl7dmFyIG49dC5jcmVhdGVFbGVtZW50KCJhY2VfaW5uZXIiKTtuLnN0eWxlLndpZHRoPSIxMDAlIixuLnN0eWxlLm1pbldpZHRoPSIwcHgiLG4uc3R5bGUuaGVpZ2h0PSIyMDBweCIsbi5zdHlsZS5kaXNwbGF5PSJibG9jayI7dmFyIHI9dC5jcmVhdGVFbGVtZW50KCJhY2Vfb3V0ZXIiKSxpPXIuc3R5bGU7aS5wb3NpdGlvbj0iYWJzb2x1dGUiLGkubGVmdD0iLTEwMDAwcHgiLGkub3ZlcmZsb3c9ImhpZGRlbiIsaS53aWR0aD0iMjAwcHgiLGkubWluV2lkdGg9IjBweCIsaS5oZWlnaHQ9IjE1MHB4IixpLmRpc3BsYXk9ImJsb2NrIixyLmFwcGVuZENoaWxkKG4pO3ZhciBzPWUuZG9jdW1lbnRFbGVtZW50O3MuYXBwZW5kQ2hpbGQocik7dmFyIG89bi5vZmZzZXRXaWR0aDtpLm92ZXJmbG93PSJzY3JvbGwiO3ZhciB1PW4ub2Zmc2V0V2lkdGg7cmV0dXJuIG89PXUmJih1PXIuY2xpZW50V2lkdGgpLHMucmVtb3ZlQ2hpbGQociksby11fSx0eXBlb2YgZG9jdW1lbnQ9PSJ1bmRlZmluZWQiJiYodC5pbXBvcnRDc3NTdHJpbmc9ZnVuY3Rpb24oKXt9KSx0LmNvbXB1dGVkU3R5bGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZSwiIil8fHt9fSx0LnNldFN0eWxlPWZ1bmN0aW9uKGUsdCxuKXtlW3RdIT09biYmKGVbdF09bil9LHQuSEFTX0NTU19BTklNQVRJT049ITEsdC5IQVNfQ1NTX1RSQU5TRk9STVM9ITEsdC5ISV9EUEk9ci5pc1dpbj90eXBlb2Ygd2luZG93IT0idW5kZWZpbmVkIiYmd2luZG93LmRldmljZVBpeGVsUmF0aW8+PTEuNTohMDtpZih0eXBlb2YgZG9jdW1lbnQhPSJ1bmRlZmluZWQiKXt2YXIgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0LkhJX0RQSSYmcy5zdHlsZS50cmFuc2Zvcm0hPT11bmRlZmluZWQmJih0LkhBU19DU1NfVFJBTlNGT1JNUz0hMCksIXIuaXNFZGdlJiZ0eXBlb2Ygcy5zdHlsZS5hbmltYXRpb25OYW1lIT0idW5kZWZpbmVkIiYmKHQuSEFTX0NTU19BTklNQVRJT049ITApLHM9bnVsbH10LkhBU19DU1NfVFJBTlNGT1JNUz90LnRyYW5zbGF0ZT1mdW5jdGlvbihlLHQsbil7ZS5zdHlsZS50cmFuc2Zvcm09InRyYW5zbGF0ZSgiK01hdGgucm91bmQodCkrInB4LCAiK01hdGgucm91bmQobikrInB4KSJ9OnQudHJhbnNsYXRlPWZ1bmN0aW9uKGUsdCxuKXtlLnN0eWxlLnRvcD1NYXRoLnJvdW5kKG4pKyJweCIsZS5zdHlsZS5sZWZ0PU1hdGgucm91bmQodCkrInB4In19KSxhY2UuZGVmaW5lKCJhY2UvbGliL29vcCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5pbmhlcml0cz1mdW5jdGlvbihlLHQpe2Uuc3VwZXJfPXQsZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSl9LHQubWl4aW49ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCllW25dPXRbbl07cmV0dXJuIGV9LHQuaW1wbGVtZW50PWZ1bmN0aW9uKGUsbil7dC5taXhpbihlLG4pfX0pLGFjZS5kZWZpbmUoImFjZS9saWIva2V5cyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuL29vcCIpLGk9ZnVuY3Rpb24oKXt2YXIgZT17TU9ESUZJRVJfS0VZUzp7MTY6IlNoaWZ0IiwxNzoiQ3RybCIsMTg6IkFsdCIsMjI0OiJNZXRhIiw5MToiTWV0YUxlZnQiLDkyOiJNZXRhUmlnaHQiLDkzOiJDb250ZXh0TWVudSJ9LEtFWV9NT0RTOntjdHJsOjEsYWx0OjIsb3B0aW9uOjIsc2hpZnQ6NCwic3VwZXIiOjgsbWV0YTo4LGNvbW1hbmQ6OCxjbWQ6OH0sRlVOQ1RJT05fS0VZUzp7ODoiQmFja3NwYWNlIiw5OiJUYWIiLDEzOiJSZXR1cm4iLDE5OiJQYXVzZSIsMjc6IkVzYyIsMzI6IlNwYWNlIiwzMzoiUGFnZVVwIiwzNDoiUGFnZURvd24iLDM1OiJFbmQiLDM2OiJIb21lIiwzNzoiTGVmdCIsMzg6IlVwIiwzOToiUmlnaHQiLDQwOiJEb3duIiw0NDoiUHJpbnQiLDQ1OiJJbnNlcnQiLDQ2OiJEZWxldGUiLDk2OiJOdW1wYWQwIiw5NzoiTnVtcGFkMSIsOTg6Ik51bXBhZDIiLDk5OiJOdW1wYWQzIiwxMDA6Ik51bXBhZDQiLDEwMToiTnVtcGFkNSIsMTAyOiJOdW1wYWQ2IiwxMDM6Ik51bXBhZDciLDEwNDoiTnVtcGFkOCIsMTA1OiJOdW1wYWQ5IiwiLTEzIjoiTnVtcGFkRW50ZXIiLDExMjoiRjEiLDExMzoiRjIiLDExNDoiRjMiLDExNToiRjQiLDExNjoiRjUiLDExNzoiRjYiLDExODoiRjciLDExOToiRjgiLDEyMDoiRjkiLDEyMToiRjEwIiwxMjI6IkYxMSIsMTIzOiJGMTIiLDE0NDoiTnVtbG9jayIsMTQ1OiJTY3JvbGxsb2NrIn0sUFJJTlRBQkxFX0tFWVM6ezMyOiIgIiw0ODoiMCIsNDk6IjEiLDUwOiIyIiw1MToiMyIsNTI6IjQiLDUzOiI1Iiw1NDoiNiIsNTU6IjciLDU2OiI4Iiw1NzoiOSIsNTk6IjsiLDYxOiI9Iiw2NToiYSIsNjY6ImIiLDY3OiJjIiw2ODoiZCIsNjk6ImUiLDcwOiJmIiw3MToiZyIsNzI6ImgiLDczOiJpIiw3NDoiaiIsNzU6ImsiLDc2OiJsIiw3NzoibSIsNzg6Im4iLDc5OiJvIiw4MDoicCIsODE6InEiLDgyOiJyIiw4MzoicyIsODQ6InQiLDg1OiJ1Iiw4NjoidiIsODc6InciLDg4OiJ4Iiw4OToieSIsOTA6InoiLDEwNzoiKyIsMTA5OiItIiwxMTA6Ii4iLDE4NjoiOyIsMTg3OiI9IiwxODg6IiwiLDE4OToiLSIsMTkwOiIuIiwxOTE6Ii8iLDE5MjoiYCIsMjE5OiJbIiwyMjA6IlxcIiwyMjE6Il0iLDIyMjoiJyIsMTExOiIvIiwxMDY6IioifX0sdCxuO2ZvcihuIGluIGUuRlVOQ1RJT05fS0VZUyl0PWUuRlVOQ1RJT05fS0VZU1tuXS50b0xvd2VyQ2FzZSgpLGVbdF09cGFyc2VJbnQobiwxMCk7Zm9yKG4gaW4gZS5QUklOVEFCTEVfS0VZUyl0PWUuUFJJTlRBQkxFX0tFWVNbbl0udG9Mb3dlckNhc2UoKSxlW3RdPXBhcnNlSW50KG4sMTApO3JldHVybiByLm1peGluKGUsZS5NT0RJRklFUl9LRVlTKSxyLm1peGluKGUsZS5QUklOVEFCTEVfS0VZUyksci5taXhpbihlLGUuRlVOQ1RJT05fS0VZUyksZS5lbnRlcj1lWyJyZXR1cm4iXSxlLmVzY2FwZT1lLmVzYyxlLmRlbD1lWyJkZWxldGUiXSxlWzE3M109Ii0iLGZ1bmN0aW9uKCl7dmFyIHQ9WyJjbWQiLCJjdHJsIiwiYWx0Iiwic2hpZnQiXTtmb3IodmFyIG49TWF0aC5wb3coMix0Lmxlbmd0aCk7bi0tOyllLktFWV9NT0RTW25dPXQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBuJmUuS0VZX01PRFNbdF19KS5qb2luKCItIikrIi0ifSgpLGUuS0VZX01PRFNbMF09IiIsZS5LRVlfTU9EU1stMV09ImlucHV0LSIsZX0oKTtyLm1peGluKHQsaSksdC5rZXlDb2RlVG9TdHJpbmc9ZnVuY3Rpb24oZSl7dmFyIHQ9aVtlXTtyZXR1cm4gdHlwZW9mIHQhPSJzdHJpbmciJiYodD1TdHJpbmcuZnJvbUNoYXJDb2RlKGUpKSx0LnRvTG93ZXJDYXNlKCl9fSksYWNlLmRlZmluZSgiYWNlL2xpYi9ldmVudCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIva2V5cyIsImFjZS9saWIvdXNlcmFnZW50Il0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBhKGUsdCxuKXt2YXIgYT11KHQpO2lmKCFpLmlzTWFjJiZzKXt0LmdldE1vZGlmaWVyU3RhdGUmJih0LmdldE1vZGlmaWVyU3RhdGUoIk9TIil8fHQuZ2V0TW9kaWZpZXJTdGF0ZSgiV2luIikpJiYoYXw9OCk7aWYocy5hbHRHcil7aWYoKDMmYSk9PTMpcmV0dXJuO3MuYWx0R3I9MH1pZihuPT09MTh8fG49PT0xNyl7dmFyIGY9ImxvY2F0aW9uImluIHQ/dC5sb2NhdGlvbjp0LmtleUxvY2F0aW9uO2lmKG49PT0xNyYmZj09PTEpc1tuXT09MSYmKG89dC50aW1lU3RhbXApO2Vsc2UgaWYobj09PTE4JiZhPT09MyYmZj09PTIpe3ZhciBsPXQudGltZVN0YW1wLW87bDw1MCYmKHMuYWx0R3I9ITApfX19biBpbiByLk1PRElGSUVSX0tFWVMmJihuPS0xKTtpZighYSYmbj09PTEzKXt2YXIgZj0ibG9jYXRpb24iaW4gdD90LmxvY2F0aW9uOnQua2V5TG9jYXRpb247aWYoZj09PTMpe2UodCxhLC1uKTtpZih0LmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJufX1pZihpLmlzQ2hyb21lT1MmJmEmOCl7ZSh0LGEsbik7aWYodC5kZWZhdWx0UHJldmVudGVkKXJldHVybjthJj0tOX1yZXR1cm4hIWF8fG4gaW4gci5GVU5DVElPTl9LRVlTfHxuIGluIHIuUFJJTlRBQkxFX0tFWVM/ZSh0LGEsbik6ITF9ZnVuY3Rpb24gZigpe3M9T2JqZWN0LmNyZWF0ZShudWxsKX12YXIgcj1lKCIuL2tleXMiKSxpPWUoIi4vdXNlcmFnZW50Iikscz1udWxsLG89MDt0LmFkZExpc3RlbmVyPWZ1bmN0aW9uKGUsdCxuKXtpZihlLmFkZEV2ZW50TGlzdGVuZXIpcmV0dXJuIGUuYWRkRXZlbnRMaXN0ZW5lcih0LG4sITEpO2lmKGUuYXR0YWNoRXZlbnQpe3ZhciByPWZ1bmN0aW9uKCl7bi5jYWxsKGUsd2luZG93LmV2ZW50KX07bi5fd3JhcHBlcj1yLGUuYXR0YWNoRXZlbnQoIm9uIit0LHIpfX0sdC5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbihlLHQsbil7aWYoZS5yZW1vdmVFdmVudExpc3RlbmVyKXJldHVybiBlLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxuLCExKTtlLmRldGFjaEV2ZW50JiZlLmRldGFjaEV2ZW50KCJvbiIrdCxuLl93cmFwcGVyfHxuKX0sdC5zdG9wRXZlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuc3RvcFByb3BhZ2F0aW9uKGUpLHQucHJldmVudERlZmF1bHQoZSksITF9LHQuc3RvcFByb3BhZ2F0aW9uPWZ1bmN0aW9uKGUpe2Uuc3RvcFByb3BhZ2F0aW9uP2Uuc3RvcFByb3BhZ2F0aW9uKCk6ZS5jYW5jZWxCdWJibGU9ITB9LHQucHJldmVudERlZmF1bHQ9ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdD9lLnByZXZlbnREZWZhdWx0KCk6ZS5yZXR1cm5WYWx1ZT0hMX0sdC5nZXRCdXR0b249ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHlwZT09ImRibGNsaWNrIj8wOmUudHlwZT09ImNvbnRleHRtZW51Inx8aS5pc01hYyYmZS5jdHJsS2V5JiYhZS5hbHRLZXkmJiFlLnNoaWZ0S2V5PzI6ZS5wcmV2ZW50RGVmYXVsdD9lLmJ1dHRvbjp7MTowLDI6Miw0OjF9W2UuYnV0dG9uXX0sdC5jYXB0dXJlPWZ1bmN0aW9uKGUsbixyKXtmdW5jdGlvbiBpKGUpe24mJm4oZSksciYmcihlKSx0LnJlbW92ZUxpc3RlbmVyKGRvY3VtZW50LCJtb3VzZW1vdmUiLG4sITApLHQucmVtb3ZlTGlzdGVuZXIoZG9jdW1lbnQsIm1vdXNldXAiLGksITApLHQucmVtb3ZlTGlzdGVuZXIoZG9jdW1lbnQsImRyYWdzdGFydCIsaSwhMCl9cmV0dXJuIHQuYWRkTGlzdGVuZXIoZG9jdW1lbnQsIm1vdXNlbW92ZSIsbiwhMCksdC5hZGRMaXN0ZW5lcihkb2N1bWVudCwibW91c2V1cCIsaSwhMCksdC5hZGRMaXN0ZW5lcihkb2N1bWVudCwiZHJhZ3N0YXJ0IixpLCEwKSxpfSx0LmFkZE1vdXNlV2hlZWxMaXN0ZW5lcj1mdW5jdGlvbihlLG4peyJvbm1vdXNld2hlZWwiaW4gZT90LmFkZExpc3RlbmVyKGUsIm1vdXNld2hlZWwiLGZ1bmN0aW9uKGUpe3ZhciB0PTg7ZS53aGVlbERlbHRhWCE9PXVuZGVmaW5lZD8oZS53aGVlbFg9LWUud2hlZWxEZWx0YVgvdCxlLndoZWVsWT0tZS53aGVlbERlbHRhWS90KTooZS53aGVlbFg9MCxlLndoZWVsWT0tZS53aGVlbERlbHRhL3QpLG4oZSl9KToib253aGVlbCJpbiBlP3QuYWRkTGlzdGVuZXIoZSwid2hlZWwiLGZ1bmN0aW9uKGUpe3ZhciB0PS4zNTtzd2l0Y2goZS5kZWx0YU1vZGUpe2Nhc2UgZS5ET01fREVMVEFfUElYRUw6ZS53aGVlbFg9ZS5kZWx0YVgqdHx8MCxlLndoZWVsWT1lLmRlbHRhWSp0fHwwO2JyZWFrO2Nhc2UgZS5ET01fREVMVEFfTElORTpjYXNlIGUuRE9NX0RFTFRBX1BBR0U6ZS53aGVlbFg9KGUuZGVsdGFYfHwwKSo1LGUud2hlZWxZPShlLmRlbHRhWXx8MCkqNX1uKGUpfSk6dC5hZGRMaXN0ZW5lcihlLCJET01Nb3VzZVNjcm9sbCIsZnVuY3Rpb24oZSl7ZS5heGlzJiZlLmF4aXM9PWUuSE9SSVpPTlRBTF9BWElTPyhlLndoZWVsWD0oZS5kZXRhaWx8fDApKjUsZS53aGVlbFk9MCk6KGUud2hlZWxYPTAsZS53aGVlbFk9KGUuZGV0YWlsfHwwKSo1KSxuKGUpfSl9LHQuYWRkTXVsdGlNb3VzZURvd25MaXN0ZW5lcj1mdW5jdGlvbihlLG4scixzKXtmdW5jdGlvbiBjKGUpe3QuZ2V0QnV0dG9uKGUpIT09MD9vPTA6ZS5kZXRhaWw+MT8obysrLG8+NCYmKG89MSkpOm89MTtpZihpLmlzSUUpe3ZhciBjPU1hdGguYWJzKGUuY2xpZW50WC11KT41fHxNYXRoLmFicyhlLmNsaWVudFktYSk+NTtpZighZnx8YylvPTE7ZiYmY2xlYXJUaW1lb3V0KGYpLGY9c2V0VGltZW91dChmdW5jdGlvbigpe2Y9bnVsbH0sbltvLTFdfHw2MDApLG89PTEmJih1PWUuY2xpZW50WCxhPWUuY2xpZW50WSl9ZS5fY2xpY2tzPW8scltzXSgibW91c2Vkb3duIixlKTtpZihvPjQpbz0wO2Vsc2UgaWYobz4xKXJldHVybiByW3NdKGxbb10sZSl9ZnVuY3Rpb24gaChlKXtvPTIsZiYmY2xlYXJUaW1lb3V0KGYpLGY9c2V0VGltZW91dChmdW5jdGlvbigpe2Y9bnVsbH0sbltvLTFdfHw2MDApLHJbc10oIm1vdXNlZG93biIsZSkscltzXShsW29dLGUpfXZhciBvPTAsdSxhLGYsbD17MjoiZGJsY2xpY2siLDM6InRyaXBsZWNsaWNrIiw0OiJxdWFkY2xpY2sifTtBcnJheS5pc0FycmF5KGUpfHwoZT1bZV0pLGUuZm9yRWFjaChmdW5jdGlvbihlKXt0LmFkZExpc3RlbmVyKGUsIm1vdXNlZG93biIsYyksaS5pc09sZElFJiZ0LmFkZExpc3RlbmVyKGUsImRibGNsaWNrIixoKX0pfTt2YXIgdT0haS5pc01hY3x8IWkuaXNPcGVyYXx8IktleWJvYXJkRXZlbnQiaW4gd2luZG93P2Z1bmN0aW9uKGUpe3JldHVybiAwfChlLmN0cmxLZXk/MTowKXwoZS5hbHRLZXk/MjowKXwoZS5zaGlmdEtleT80OjApfChlLm1ldGFLZXk/ODowKX06ZnVuY3Rpb24oZSl7cmV0dXJuIDB8KGUubWV0YUtleT8xOjApfChlLmFsdEtleT8yOjApfChlLnNoaWZ0S2V5PzQ6MCl8KGUuY3RybEtleT84OjApfTt0LmdldE1vZGlmaWVyU3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiByLktFWV9NT0RTW3UoZSldfSx0LmFkZENvbW1hbmRLZXlMaXN0ZW5lcj1mdW5jdGlvbihlLG4pe3ZhciByPXQuYWRkTGlzdGVuZXI7aWYoaS5pc09sZEdlY2tvfHxpLmlzT3BlcmEmJiEoIktleWJvYXJkRXZlbnQiaW4gd2luZG93KSl7dmFyIG89bnVsbDtyKGUsImtleWRvd24iLGZ1bmN0aW9uKGUpe289ZS5rZXlDb2RlfSkscihlLCJrZXlwcmVzcyIsZnVuY3Rpb24oZSl7cmV0dXJuIGEobixlLG8pfSl9ZWxzZXt2YXIgdT1udWxsO3IoZSwia2V5ZG93biIsZnVuY3Rpb24oZSl7c1tlLmtleUNvZGVdPShzW2Uua2V5Q29kZV18fDApKzE7dmFyIHQ9YShuLGUsZS5rZXlDb2RlKTtyZXR1cm4gdT1lLmRlZmF1bHRQcmV2ZW50ZWQsdH0pLHIoZSwia2V5cHJlc3MiLGZ1bmN0aW9uKGUpe3UmJihlLmN0cmxLZXl8fGUuYWx0S2V5fHxlLnNoaWZ0S2V5fHxlLm1ldGFLZXkpJiYodC5zdG9wRXZlbnQoZSksdT1udWxsKX0pLHIoZSwia2V5dXAiLGZ1bmN0aW9uKGUpe3NbZS5rZXlDb2RlXT1udWxsfSksc3x8KGYoKSxyKHdpbmRvdywiZm9jdXMiLGYpKX19O2lmKHR5cGVvZiB3aW5kb3c9PSJvYmplY3QiJiZ3aW5kb3cucG9zdE1lc3NhZ2UmJiFpLmlzT2xkSUUpe3ZhciBsPTE7dC5uZXh0VGljaz1mdW5jdGlvbihlLG4pe249bnx8d2luZG93O3ZhciByPSJ6ZXJvLXRpbWVvdXQtbWVzc2FnZS0iK2wrKyxpPWZ1bmN0aW9uKHMpe3MuZGF0YT09ciYmKHQuc3RvcFByb3BhZ2F0aW9uKHMpLHQucmVtb3ZlTGlzdGVuZXIobiwibWVzc2FnZSIsaSksZSgpKX07dC5hZGRMaXN0ZW5lcihuLCJtZXNzYWdlIixpKSxuLnBvc3RNZXNzYWdlKHIsIioiKX19dC4kaWRsZUJsb2NrZWQ9ITEsdC5vbklkbGU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbiByKCl7dC4kaWRsZUJsb2NrZWQ/c2V0VGltZW91dChyLDEwMCk6ZSgpfSxuKX0sdC4kaWRsZUJsb2NrSWQ9bnVsbCx0LmJsb2NrSWRsZT1mdW5jdGlvbihlKXt0LiRpZGxlQmxvY2tJZCYmY2xlYXJUaW1lb3V0KHQuJGlkbGVCbG9ja0lkKSx0LiRpZGxlQmxvY2tlZD0hMCx0LiRpZGxlQmxvY2tJZD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC4kaWRsZUJsb2NrZWQ9ITF9LGV8fDEwMCl9LHQubmV4dEZyYW1lPXR5cGVvZiB3aW5kb3c9PSJvYmplY3QiJiYod2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZXx8d2luZG93Lm1velJlcXVlc3RBbmltYXRpb25GcmFtZXx8d2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZXx8d2luZG93Lm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lfHx3aW5kb3cub1JlcXVlc3RBbmltYXRpb25GcmFtZSksdC5uZXh0RnJhbWU/dC5uZXh0RnJhbWU9dC5uZXh0RnJhbWUuYmluZCh3aW5kb3cpOnQubmV4dEZyYW1lPWZ1bmN0aW9uKGUpe3NldFRpbWVvdXQoZSwxNyl9fSksYWNlLmRlZmluZSgiYWNlL3JhbmdlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbihlLHQpe3JldHVybiBlLnJvdy10LnJvd3x8ZS5jb2x1bW4tdC5jb2x1bW59LGk9ZnVuY3Rpb24oZSx0LG4scil7dGhpcy5zdGFydD17cm93OmUsY29sdW1uOnR9LHRoaXMuZW5kPXtyb3c6bixjb2x1bW46cn19OyhmdW5jdGlvbigpe3RoaXMuaXNFcXVhbD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zdGFydC5yb3c9PT1lLnN0YXJ0LnJvdyYmdGhpcy5lbmQucm93PT09ZS5lbmQucm93JiZ0aGlzLnN0YXJ0LmNvbHVtbj09PWUuc3RhcnQuY29sdW1uJiZ0aGlzLmVuZC5jb2x1bW49PT1lLmVuZC5jb2x1bW59LHRoaXMudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iUmFuZ2U6IFsiK3RoaXMuc3RhcnQucm93KyIvIit0aGlzLnN0YXJ0LmNvbHVtbisiXSAtPiBbIit0aGlzLmVuZC5yb3crIi8iK3RoaXMuZW5kLmNvbHVtbisiXSJ9LHRoaXMuY29udGFpbnM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5jb21wYXJlKGUsdCk9PTB9LHRoaXMuY29tcGFyZVJhbmdlPWZ1bmN0aW9uKGUpe3ZhciB0LG49ZS5lbmQscj1lLnN0YXJ0O3JldHVybiB0PXRoaXMuY29tcGFyZShuLnJvdyxuLmNvbHVtbiksdD09MT8odD10aGlzLmNvbXBhcmUoci5yb3csci5jb2x1bW4pLHQ9PTE/Mjp0PT0wPzE6MCk6dD09LTE/LTI6KHQ9dGhpcy5jb21wYXJlKHIucm93LHIuY29sdW1uKSx0PT0tMT8tMTp0PT0xPzQyOjApfSx0aGlzLmNvbXBhcmVQb2ludD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jb21wYXJlKGUucm93LGUuY29sdW1uKX0sdGhpcy5jb250YWluc1JhbmdlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNvbXBhcmVQb2ludChlLnN0YXJ0KT09MCYmdGhpcy5jb21wYXJlUG9pbnQoZS5lbmQpPT0wfSx0aGlzLmludGVyc2VjdHM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jb21wYXJlUmFuZ2UoZSk7cmV0dXJuIHQ9PS0xfHx0PT0wfHx0PT0xfSx0aGlzLmlzRW5kPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZW5kLnJvdz09ZSYmdGhpcy5lbmQuY29sdW1uPT10fSx0aGlzLmlzU3RhcnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5zdGFydC5yb3c9PWUmJnRoaXMuc3RhcnQuY29sdW1uPT10fSx0aGlzLnNldFN0YXJ0PWZ1bmN0aW9uKGUsdCl7dHlwZW9mIGU9PSJvYmplY3QiPyh0aGlzLnN0YXJ0LmNvbHVtbj1lLmNvbHVtbix0aGlzLnN0YXJ0LnJvdz1lLnJvdyk6KHRoaXMuc3RhcnQucm93PWUsdGhpcy5zdGFydC5jb2x1bW49dCl9LHRoaXMuc2V0RW5kPWZ1bmN0aW9uKGUsdCl7dHlwZW9mIGU9PSJvYmplY3QiPyh0aGlzLmVuZC5jb2x1bW49ZS5jb2x1bW4sdGhpcy5lbmQucm93PWUucm93KToodGhpcy5lbmQucm93PWUsdGhpcy5lbmQuY29sdW1uPXQpfSx0aGlzLmluc2lkZT1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmNvbXBhcmUoZSx0KT09MD90aGlzLmlzRW5kKGUsdCl8fHRoaXMuaXNTdGFydChlLHQpPyExOiEwOiExfSx0aGlzLmluc2lkZVN0YXJ0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuY29tcGFyZShlLHQpPT0wP3RoaXMuaXNFbmQoZSx0KT8hMTohMDohMX0sdGhpcy5pbnNpZGVFbmQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5jb21wYXJlKGUsdCk9PTA/dGhpcy5pc1N0YXJ0KGUsdCk/ITE6ITA6ITF9LHRoaXMuY29tcGFyZT1mdW5jdGlvbihlLHQpe3JldHVybiF0aGlzLmlzTXVsdGlMaW5lKCkmJmU9PT10aGlzLnN0YXJ0LnJvdz90PHRoaXMuc3RhcnQuY29sdW1uPy0xOnQ+dGhpcy5lbmQuY29sdW1uPzE6MDplPHRoaXMuc3RhcnQucm93Py0xOmU+dGhpcy5lbmQucm93PzE6dGhpcy5zdGFydC5yb3c9PT1lP3Q+PXRoaXMuc3RhcnQuY29sdW1uPzA6LTE6dGhpcy5lbmQucm93PT09ZT90PD10aGlzLmVuZC5jb2x1bW4/MDoxOjB9LHRoaXMuY29tcGFyZVN0YXJ0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuc3RhcnQucm93PT1lJiZ0aGlzLnN0YXJ0LmNvbHVtbj09dD8tMTp0aGlzLmNvbXBhcmUoZSx0KX0sdGhpcy5jb21wYXJlRW5kPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZW5kLnJvdz09ZSYmdGhpcy5lbmQuY29sdW1uPT10PzE6dGhpcy5jb21wYXJlKGUsdCl9LHRoaXMuY29tcGFyZUluc2lkZT1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmVuZC5yb3c9PWUmJnRoaXMuZW5kLmNvbHVtbj09dD8xOnRoaXMuc3RhcnQucm93PT1lJiZ0aGlzLnN0YXJ0LmNvbHVtbj09dD8tMTp0aGlzLmNvbXBhcmUoZSx0KX0sdGhpcy5jbGlwUm93cz1mdW5jdGlvbihlLHQpe2lmKHRoaXMuZW5kLnJvdz50KXZhciBuPXtyb3c6dCsxLGNvbHVtbjowfTtlbHNlIGlmKHRoaXMuZW5kLnJvdzxlKXZhciBuPXtyb3c6ZSxjb2x1bW46MH07aWYodGhpcy5zdGFydC5yb3c+dCl2YXIgcj17cm93OnQrMSxjb2x1bW46MH07ZWxzZSBpZih0aGlzLnN0YXJ0LnJvdzxlKXZhciByPXtyb3c6ZSxjb2x1bW46MH07cmV0dXJuIGkuZnJvbVBvaW50cyhyfHx0aGlzLnN0YXJ0LG58fHRoaXMuZW5kKX0sdGhpcy5leHRlbmQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNvbXBhcmUoZSx0KTtpZihuPT0wKXJldHVybiB0aGlzO2lmKG49PS0xKXZhciByPXtyb3c6ZSxjb2x1bW46dH07ZWxzZSB2YXIgcz17cm93OmUsY29sdW1uOnR9O3JldHVybiBpLmZyb21Qb2ludHMocnx8dGhpcy5zdGFydCxzfHx0aGlzLmVuZCl9LHRoaXMuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0LnJvdz09PXRoaXMuZW5kLnJvdyYmdGhpcy5zdGFydC5jb2x1bW49PT10aGlzLmVuZC5jb2x1bW59LHRoaXMuaXNNdWx0aUxpbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFydC5yb3chPT10aGlzLmVuZC5yb3d9LHRoaXMuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gaS5mcm9tUG9pbnRzKHRoaXMuc3RhcnQsdGhpcy5lbmQpfSx0aGlzLmNvbGxhcHNlUm93cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVuZC5jb2x1bW49PTA/bmV3IGkodGhpcy5zdGFydC5yb3csMCxNYXRoLm1heCh0aGlzLnN0YXJ0LnJvdyx0aGlzLmVuZC5yb3ctMSksMCk6bmV3IGkodGhpcy5zdGFydC5yb3csMCx0aGlzLmVuZC5yb3csMCl9LHRoaXMudG9TY3JlZW5SYW5nZT1mdW5jdGlvbihlKXt2YXIgdD1lLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbih0aGlzLnN0YXJ0KSxuPWUuZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKHRoaXMuZW5kKTtyZXR1cm4gbmV3IGkodC5yb3csdC5jb2x1bW4sbi5yb3csbi5jb2x1bW4pfSx0aGlzLm1vdmVCeT1mdW5jdGlvbihlLHQpe3RoaXMuc3RhcnQucm93Kz1lLHRoaXMuc3RhcnQuY29sdW1uKz10LHRoaXMuZW5kLnJvdys9ZSx0aGlzLmVuZC5jb2x1bW4rPXR9fSkuY2FsbChpLnByb3RvdHlwZSksaS5mcm9tUG9pbnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBpKGUucm93LGUuY29sdW1uLHQucm93LHQuY29sdW1uKX0saS5jb21wYXJlUG9pbnRzPXIsaS5jb21wYXJlUG9pbnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucm93LXQucm93fHxlLmNvbHVtbi10LmNvbHVtbn0sdC5SYW5nZT1pfSksYWNlLmRlZmluZSgiYWNlL2xpYi9sYW5nIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0Lmxhc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGVbZS5sZW5ndGgtMV19LHQuc3RyaW5nUmV2ZXJzZT1mdW5jdGlvbihlKXtyZXR1cm4gZS5zcGxpdCgiIikucmV2ZXJzZSgpLmpvaW4oIiIpfSx0LnN0cmluZ1JlcGVhdD1mdW5jdGlvbihlLHQpe3ZhciBuPSIiO3doaWxlKHQ+MCl7dCYxJiYobis9ZSk7aWYodD4+PTEpZSs9ZX1yZXR1cm4gbn07dmFyIHI9L15cc1xzKi8saT0vXHNccyokLzt0LnN0cmluZ1RyaW1MZWZ0PWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UociwiIil9LHQuc3RyaW5nVHJpbVJpZ2h0PWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoaSwiIil9LHQuY29weU9iamVjdD1mdW5jdGlvbihlKXt2YXIgdD17fTtmb3IodmFyIG4gaW4gZSl0W25dPWVbbl07cmV0dXJuIHR9LHQuY29weUFycmF5PWZ1bmN0aW9uKGUpe3ZhciB0PVtdO2Zvcih2YXIgbj0wLHI9ZS5sZW5ndGg7bjxyO24rKyllW25dJiZ0eXBlb2YgZVtuXT09Im9iamVjdCI/dFtuXT10aGlzLmNvcHlPYmplY3QoZVtuXSk6dFtuXT1lW25dO3JldHVybiB0fSx0LmRlZXBDb3B5PWZ1bmN0aW9uIHMoZSl7aWYodHlwZW9mIGUhPSJvYmplY3QifHwhZSlyZXR1cm4gZTt2YXIgdDtpZihBcnJheS5pc0FycmF5KGUpKXt0PVtdO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXRbbl09cyhlW25dKTtyZXR1cm4gdH1pZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkhPT0iW29iamVjdCBPYmplY3RdIilyZXR1cm4gZTt0PXt9O2Zvcih2YXIgbiBpbiBlKXRbbl09cyhlW25dKTtyZXR1cm4gdH0sdC5hcnJheVRvTWFwPWZ1bmN0aW9uKGUpe3ZhciB0PXt9O2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXRbZVtuXV09MTtyZXR1cm4gdH0sdC5jcmVhdGVNYXA9ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IodmFyIG4gaW4gZSl0W25dPWVbbl07cmV0dXJuIHR9LHQuYXJyYXlSZW1vdmU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MDtuPD1lLmxlbmd0aDtuKyspdD09PWVbbl0mJmUuc3BsaWNlKG4sMSl9LHQuZXNjYXBlUmVnRXhwPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoLyhbLiorP14ke30oKXxbXF1cL1xcXSkvZywiXFwkMSIpfSx0LmVzY2FwZUhUTUw9ZnVuY3Rpb24oZSl7cmV0dXJuKCIiK2UpLnJlcGxhY2UoLyYvZywiJiMzODsiKS5yZXBsYWNlKC8iL2csIiYjMzQ7IikucmVwbGFjZSgvJy9nLCImIzM5OyIpLnJlcGxhY2UoLzwvZywiJiM2MDsiKX0sdC5nZXRNYXRjaE9mZnNldHM9ZnVuY3Rpb24oZSx0KXt2YXIgbj1bXTtyZXR1cm4gZS5yZXBsYWNlKHQsZnVuY3Rpb24oZSl7bi5wdXNoKHtvZmZzZXQ6YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMl0sbGVuZ3RoOmUubGVuZ3RofSl9KSxufSx0LmRlZmVycmVkQ2FsbD1mdW5jdGlvbihlKXt2YXIgdD1udWxsLG49ZnVuY3Rpb24oKXt0PW51bGwsZSgpfSxyPWZ1bmN0aW9uKGUpe3JldHVybiByLmNhbmNlbCgpLHQ9c2V0VGltZW91dChuLGV8fDApLHJ9O3JldHVybiByLnNjaGVkdWxlPXIsci5jYWxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FuY2VsKCksZSgpLHJ9LHIuY2FuY2VsPWZ1bmN0aW9uKCl7cmV0dXJuIGNsZWFyVGltZW91dCh0KSx0PW51bGwscn0sci5pc1BlbmRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0scn0sdC5kZWxheWVkQ2FsbD1mdW5jdGlvbihlLHQpe3ZhciBuPW51bGwscj1mdW5jdGlvbigpe249bnVsbCxlKCl9LGk9ZnVuY3Rpb24oZSl7bj09bnVsbCYmKG49c2V0VGltZW91dChyLGV8fHQpKX07cmV0dXJuIGkuZGVsYXk9ZnVuY3Rpb24oZSl7biYmY2xlYXJUaW1lb3V0KG4pLG49c2V0VGltZW91dChyLGV8fHQpfSxpLnNjaGVkdWxlPWksaS5jYWxsPWZ1bmN0aW9uKCl7dGhpcy5jYW5jZWwoKSxlKCl9LGkuY2FuY2VsPWZ1bmN0aW9uKCl7biYmY2xlYXJUaW1lb3V0KG4pLG49bnVsbH0saS5pc1BlbmRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gbn0saX19KSxhY2UuZGVmaW5lKCJhY2UvY2xpcGJvYXJkIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcjtuLmV4cG9ydHM9e2xpbmVNb2RlOiExLHBhc3RlQ2FuY2VsbGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHImJnI+RGF0ZS5ub3coKS01MD8hMDpyPSExfSxjYW5jZWw6ZnVuY3Rpb24oKXtyPURhdGUubm93KCl9fX0pLGFjZS5kZWZpbmUoImFjZS9rZXlib2FyZC90ZXh0aW5wdXQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2V2ZW50IiwiYWNlL2xpYi91c2VyYWdlbnQiLCJhY2UvbGliL2RvbSIsImFjZS9saWIvbGFuZyIsImFjZS9jbGlwYm9hcmQiLCJhY2UvbGliL2tleXMiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoIi4uL2xpYi9ldmVudCIpLGk9ZSgiLi4vbGliL3VzZXJhZ2VudCIpLHM9ZSgiLi4vbGliL2RvbSIpLG89ZSgiLi4vbGliL2xhbmciKSx1PWUoIi4uL2NsaXBib2FyZCIpLGE9aS5pc0Nocm9tZTwxOCxmPWkuaXNJRSxsPWkuaXNDaHJvbWU+NjMsYz00MDAsaD1lKCIuLi9saWIva2V5cyIpLHA9aC5LRVlfTU9EUyxkPWkuaXNJT1Msdj1kPy9ccy86L1xuLyxtPWZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24geigpe1M9ITAsbi5ibHVyKCksbi5mb2N1cygpLFM9ITF9ZnVuY3Rpb24gWChlKXtlLmtleUNvZGU9PTI3JiZuLnZhbHVlLmxlbmd0aDxuLnNlbGVjdGlvblN0YXJ0JiYoeXx8KHg9bi52YWx1ZSksVD1OPS0xLEwoKSksVygpfWZ1bmN0aW9uICQoKXtjbGVhclRpbWVvdXQoViksVj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dyYmKG4uc3R5bGUuY3NzVGV4dD13LHc9IiIpLHQucmVuZGVyZXIuJGlzTW91c2VQcmVzc2VkPSExLHQucmVuZGVyZXIuJGtlZXBUZXh0QXJlYUF0Q3Vyc29yJiZ0LnJlbmRlcmVyLiRtb3ZlVGV4dEFyZWFUb0N1cnNvcigpfSwwKX1mdW5jdGlvbiBLKGUsdCxuKXt2YXIgcj1udWxsLGk9ITE7bi5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixmdW5jdGlvbihlKXtyJiZjbGVhclRpbWVvdXQociksaT0hMH0sITApLG4uYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLGZ1bmN0aW9uKGUpe3I9c2V0VGltZW91dChmdW5jdGlvbigpe2k9ITF9LDEwMCl9LCEwKTt2YXIgcz1mdW5jdGlvbihlKXtpZihkb2N1bWVudC5hY3RpdmVFbGVtZW50IT09bilyZXR1cm47aWYoaXx8eXx8dC4kbW91c2VIYW5kbGVyLmlzTW91c2VQcmVzc2VkKXJldHVybjtpZihtKXJldHVybjt2YXIgcj1uLnNlbGVjdGlvblN0YXJ0LHM9bi5zZWxlY3Rpb25FbmQsbz1udWxsLHU9MDtpZihyPT0wKW89aC51cDtlbHNlIGlmKHI9PTEpbz1oLmhvbWU7ZWxzZSBpZihzPk4mJnhbc109PSJcbiIpbz1oLmVuZDtlbHNlIGlmKHI8VCYmeFtyLTFdPT0iICIpbz1oLmxlZnQsdT1wLm9wdGlvbjtlbHNlIGlmKHI8VHx8cj09VCYmTiE9VCYmcj09cylvPWgubGVmdDtlbHNlIGlmKHM+TiYmeC5zbGljZSgwLHMpLnNwbGl0KCJcbiIpLmxlbmd0aD4yKW89aC5kb3duO2Vsc2UgaWYocz5OJiZ4W3MtMV09PSIgIilvPWgucmlnaHQsdT1wLm9wdGlvbjtlbHNlIGlmKHM+Tnx8cz09TiYmTiE9VCYmcj09cylvPWgucmlnaHQ7ciE9PXMmJih1fD1wLnNoaWZ0KTtpZihvKXt2YXIgYT10Lm9uQ29tbWFuZEtleSh7fSx1LG8pO2lmKCFhJiZ0LmNvbW1hbmRzKXtvPWgua2V5Q29kZVRvU3RyaW5nKG8pO3ZhciBmPXQuY29tbWFuZHMuZmluZEtleUNvbW1hbmQodSxvKTtmJiZ0LmV4ZWNDb21tYW5kKGYpfVQ9cixOPXMsTCgiIil9fTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3Rpb25jaGFuZ2UiLHMpLHQub24oImRlc3Ryb3kiLGZ1bmN0aW9uKCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIixzKX0pfXZhciBuPXMuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiKTtuLmNsYXNzTmFtZT0iYWNlX3RleHQtaW5wdXQiLG4uc2V0QXR0cmlidXRlKCJ3cmFwIiwib2ZmIiksbi5zZXRBdHRyaWJ1dGUoImF1dG9jb3JyZWN0Iiwib2ZmIiksbi5zZXRBdHRyaWJ1dGUoImF1dG9jYXBpdGFsaXplIiwib2ZmIiksbi5zZXRBdHRyaWJ1dGUoInNwZWxsY2hlY2siLCExKSxuLnN0eWxlLm9wYWNpdHk9IjAiLGUuaW5zZXJ0QmVmb3JlKG4sZS5maXJzdENoaWxkKTt2YXIgbT0hMSxnPSExLHk9ITEsYj0hMSx3PSIiO2kuaXNNb2JpbGV8fChuLnN0eWxlLmZvbnRTaXplPSIxcHgiKTt2YXIgRT0hMSxTPSExLHg9IiIsVD0wLE49MDt0cnl7dmFyIEM9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PW59Y2F0Y2goayl7fXIuYWRkTGlzdGVuZXIobiwiYmx1ciIsZnVuY3Rpb24oZSl7aWYoUylyZXR1cm47dC5vbkJsdXIoZSksQz0hMX0pLHIuYWRkTGlzdGVuZXIobiwiZm9jdXMiLGZ1bmN0aW9uKGUpe2lmKFMpcmV0dXJuO0M9ITA7aWYoaS5pc0VkZ2UpdHJ5e2lmKCFkb2N1bWVudC5oYXNGb2N1cygpKXJldHVybn1jYXRjaChlKXt9dC5vbkZvY3VzKGUpLGkuaXNFZGdlP3NldFRpbWVvdXQoTCk6TCgpfSksdGhpcy4kZm9jdXNTY3JvbGw9ITEsdGhpcy5mb2N1cz1mdW5jdGlvbigpe2lmKHd8fGx8fHRoaXMuJGZvY3VzU2Nyb2xsPT0iYnJvd3NlciIpcmV0dXJuIG4uZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KTt2YXIgZT1uLnN0eWxlLnRvcDtuLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsbi5zdHlsZS50b3A9IjBweCI7dHJ5e3ZhciB0PW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIT0wfWNhdGNoKHIpe3JldHVybn12YXIgaT1bXTtpZih0KXt2YXIgcz1uLnBhcmVudEVsZW1lbnQ7d2hpbGUocyYmcy5ub2RlVHlwZT09MSlpLnB1c2gocykscy5zZXRBdHRyaWJ1dGUoImFjZV9ub2NvbnRleHQiLCEwKSwhcy5wYXJlbnRFbGVtZW50JiZzLmdldFJvb3ROb2RlP3M9cy5nZXRSb290Tm9kZSgpLmhvc3Q6cz1zLnBhcmVudEVsZW1lbnR9bi5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLHQmJmkuZm9yRWFjaChmdW5jdGlvbihlKXtlLnJlbW92ZUF0dHJpYnV0ZSgiYWNlX25vY29udGV4dCIpfSksc2V0VGltZW91dChmdW5jdGlvbigpe24uc3R5bGUucG9zaXRpb249IiIsbi5zdHlsZS50b3A9PSIwcHgiJiYobi5zdHlsZS50b3A9ZSl9LDApfSx0aGlzLmJsdXI9ZnVuY3Rpb24oKXtuLmJsdXIoKX0sdGhpcy5pc0ZvY3VzZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gQ30sdC5vbigiYmVmb3JlRW5kT3BlcmF0aW9uIixmdW5jdGlvbigpe2lmKHQuY3VyT3AmJnQuY3VyT3AuY29tbWFuZC5uYW1lPT0iaW5zZXJ0c3RyaW5nIilyZXR1cm47eSYmKHg9bi52YWx1ZT0iIixVKCkpLEwoKX0pO3ZhciBMPWQ/ZnVuY3Rpb24oZSl7aWYoIUN8fG0mJiFlfHxiKXJldHVybjtlfHwoZT0iIik7dmFyIHI9IlxuIGFiIitlKyJjZGUgZmdcbiI7ciE9bi52YWx1ZSYmKG4udmFsdWU9eD1yKTt2YXIgaT00LHM9NCsoZS5sZW5ndGh8fCh0LnNlbGVjdGlvbi5pc0VtcHR5KCk/MDoxKSk7KFQhPWl8fE4hPXMpJiZuLnNldFNlbGVjdGlvblJhbmdlKGkscyksVD1pLE49c306ZnVuY3Rpb24oKXtpZih5fHxiKXJldHVybjtpZighQyYmIV8pcmV0dXJuO3k9ITA7dmFyIGU9dC5zZWxlY3Rpb24scj1lLmdldFJhbmdlKCksaT1lLmN1cnNvci5yb3cscz1yLnN0YXJ0LmNvbHVtbixvPXIuZW5kLmNvbHVtbix1PXQuc2Vzc2lvbi5nZXRMaW5lKGkpO2lmKHIuc3RhcnQucm93IT1pKXt2YXIgYT10LnNlc3Npb24uZ2V0TGluZShpLTEpO3M9ci5zdGFydC5yb3c8aS0xPzA6cyxvKz1hLmxlbmd0aCsxLHU9YSsiXG4iK3V9ZWxzZSBpZihyLmVuZC5yb3chPWkpe3ZhciBmPXQuc2Vzc2lvbi5nZXRMaW5lKGkrMSk7bz1yLmVuZC5yb3c+aSsxP2YubGVuZ3RoOm8sbys9dS5sZW5ndGgrMSx1PXUrIlxuIitmfXUubGVuZ3RoPmMmJihzPGMmJm88Yz91PXUuc2xpY2UoMCxjKToodT0iXG4iLHM9MCxvPTEpKTt2YXIgbD11KyJcblxuIjtsIT14JiYobi52YWx1ZT14PWwsVD1OPWwubGVuZ3RoKSxfJiYoVD1uLnNlbGVjdGlvblN0YXJ0LE49bi5zZWxlY3Rpb25FbmQpO2lmKE4hPW98fFQhPXN8fG4uc2VsZWN0aW9uRW5kIT1OKXRyeXtuLnNldFNlbGVjdGlvblJhbmdlKHMsbyksVD1zLE49b31jYXRjaChoKXt9eT0hMX07QyYmdC5vbkZvY3VzKCk7dmFyIEE9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2VsZWN0aW9uU3RhcnQ9PT0wJiZlLnNlbGVjdGlvbkVuZD49eC5sZW5ndGgmJmUudmFsdWU9PT14JiZ4JiZlLnNlbGVjdGlvbkVuZCE9PU59LE89ZnVuY3Rpb24oZSl7aWYoeSlyZXR1cm47bT9tPSExOkEobikmJih0LnNlbGVjdEFsbCgpLEwoKSl9LE09bnVsbDt0aGlzLnNldElucHV0SGFuZGxlcj1mdW5jdGlvbihlKXtNPWV9LHRoaXMuZ2V0SW5wdXRIYW5kbGVyPWZ1bmN0aW9uKCl7cmV0dXJuIE19O3ZhciBfPSExLEQ9ZnVuY3Rpb24oZSxyKXtfJiYoXz0hMSk7aWYoZylyZXR1cm4gTCgpLGUmJnQub25QYXN0ZShlKSxnPSExLCIiO3ZhciBpPW4uc2VsZWN0aW9uU3RhcnQscz1uLnNlbGVjdGlvbkVuZCxvPVQsdT14Lmxlbmd0aC1OLGE9ZSxmPWUubGVuZ3RoLWksbD1lLmxlbmd0aC1zLGM9MDt3aGlsZShvPjAmJnhbY109PWVbY10pYysrLG8tLTthPWEuc2xpY2UoYyksYz0xO3doaWxlKHU+MCYmeC5sZW5ndGgtYz5ULTEmJnhbeC5sZW5ndGgtY109PWVbZS5sZW5ndGgtY10pYysrLHUtLTtmLT1jLTEsbC09Yy0xO3ZhciBoPWEubGVuZ3RoLWMrMTtyZXR1cm4gaDwwJiYobz0taCxoPTApLGE9YS5zbGljZSgwLGgpLCFyJiZmPT1hLmxlbmd0aCYmIW8mJiF1JiYhbD8iIjooYj0hMCxhJiYhbyYmIXUmJiFmJiYhbHx8RT90Lm9uVGV4dElucHV0KGEpOnQub25UZXh0SW5wdXQoYSx7ZXh0ZW5kTGVmdDpvLGV4dGVuZFJpZ2h0OnUscmVzdG9yZVN0YXJ0OmYscmVzdG9yZUVuZDpsfSksYj0hMSx4PWUsVD1pLE49cyxhKX0sUD1mdW5jdGlvbihlKXtpZih5KXJldHVybiBSKCk7aWYoZSYmZS5pbnB1dFR5cGUpe2lmKGUuaW5wdXRUeXBlPT0iaGlzdG9yeVVuZG8iKXJldHVybiB0LmV4ZWNDb21tYW5kKCJ1bmRvIik7aWYoZS5pbnB1dFR5cGU9PSJoaXN0b3J5UmVkbyIpcmV0dXJuIHQuZXhlY0NvbW1hbmQoInJlZG8iKX12YXIgcj1uLnZhbHVlLGk9RChyLCEwKTsoci5sZW5ndGg+YysxMDB8fHYudGVzdChpKSkmJkwoKX0sSD1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZS5jbGlwYm9hcmREYXRhfHx3aW5kb3cuY2xpcGJvYXJkRGF0YTtpZighcnx8YSlyZXR1cm47dmFyIGk9Znx8bj8iVGV4dCI6InRleHQvcGxhaW4iO3RyeXtyZXR1cm4gdD9yLnNldERhdGEoaSx0KSE9PSExOnIuZ2V0RGF0YShpKX1jYXRjaChlKXtpZighbilyZXR1cm4gSChlLHQsITApfX0sQj1mdW5jdGlvbihlLGkpe3ZhciBzPXQuZ2V0Q29weVRleHQoKTtpZighcylyZXR1cm4gci5wcmV2ZW50RGVmYXVsdChlKTtIKGUscyk/KGQmJihMKHMpLG09cyxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bT0hMX0sMTApKSxpP3Qub25DdXQoKTp0Lm9uQ29weSgpLHIucHJldmVudERlZmF1bHQoZSkpOihtPSEwLG4udmFsdWU9cyxuLnNlbGVjdCgpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXttPSExLEwoKSxpP3Qub25DdXQoKTp0Lm9uQ29weSgpfSkpfSxqPWZ1bmN0aW9uKGUpe0IoZSwhMCl9LEY9ZnVuY3Rpb24oZSl7QihlLCExKX0sST1mdW5jdGlvbihlKXt2YXIgcz1IKGUpO2lmKHUucGFzdGVDYW5jZWxsZWQoKSlyZXR1cm47dHlwZW9mIHM9PSJzdHJpbmciPyhzJiZ0Lm9uUGFzdGUocyxlKSxpLmlzSUUmJnNldFRpbWVvdXQoTCksci5wcmV2ZW50RGVmYXVsdChlKSk6KG4udmFsdWU9IiIsZz0hMCl9O3IuYWRkQ29tbWFuZEtleUxpc3RlbmVyKG4sdC5vbkNvbW1hbmRLZXkuYmluZCh0KSksci5hZGRMaXN0ZW5lcihuLCJzZWxlY3QiLE8pLHIuYWRkTGlzdGVuZXIobiwiaW5wdXQiLFApLHIuYWRkTGlzdGVuZXIobiwiY3V0IixqKSxyLmFkZExpc3RlbmVyKG4sImNvcHkiLEYpLHIuYWRkTGlzdGVuZXIobiwicGFzdGUiLEkpLCghKCJvbmN1dCJpbiBuKXx8ISgib25jb3B5ImluIG4pfHwhKCJvbnBhc3RlImluIG4pKSYmci5hZGRMaXN0ZW5lcihlLCJrZXlkb3duIixmdW5jdGlvbihlKXtpZihpLmlzTWFjJiYhZS5tZXRhS2V5fHwhZS5jdHJsS2V5KXJldHVybjtzd2l0Y2goZS5rZXlDb2RlKXtjYXNlIDY3OkYoZSk7YnJlYWs7Y2FzZSA4NjpJKGUpO2JyZWFrO2Nhc2UgODg6aihlKX19KTt2YXIgcT1mdW5jdGlvbihlKXtpZih5fHwhdC5vbkNvbXBvc2l0aW9uU3RhcnR8fHQuJHJlYWRPbmx5KXJldHVybjt5PXt9O2lmKEUpcmV0dXJuO3NldFRpbWVvdXQoUiwwKSx0Lm9uKCJtb3VzZWRvd24iLHopO3ZhciByPXQuZ2V0U2VsZWN0aW9uUmFuZ2UoKTtyLmVuZC5yb3c9ci5zdGFydC5yb3csci5lbmQuY29sdW1uPXIuc3RhcnQuY29sdW1uLHkubWFya2VyUmFuZ2U9cix5LnNlbGVjdGlvblN0YXJ0PVQsdC5vbkNvbXBvc2l0aW9uU3RhcnQoeSkseS51c2VUZXh0YXJlYUZvcklNRT8obi52YWx1ZT0iIix4PSIiLFQ9MCxOPTApOihuLm1zR2V0SW5wdXRDb250ZXh0JiYoeS5jb250ZXh0PW4ubXNHZXRJbnB1dENvbnRleHQoKSksbi5nZXRJbnB1dENvbnRleHQmJih5LmNvbnRleHQ9bi5nZXRJbnB1dENvbnRleHQoKSkpfSxSPWZ1bmN0aW9uKCl7aWYoIXl8fCF0Lm9uQ29tcG9zaXRpb25VcGRhdGV8fHQuJHJlYWRPbmx5KXJldHVybjtpZihFKXJldHVybiB6KCk7aWYoeS51c2VUZXh0YXJlYUZvcklNRSl0Lm9uQ29tcG9zaXRpb25VcGRhdGUobi52YWx1ZSk7ZWxzZXt2YXIgZT1uLnZhbHVlO0QoZSkseS5tYXJrZXJSYW5nZSYmKHkuY29udGV4dCYmKHkubWFya2VyUmFuZ2Uuc3RhcnQuY29sdW1uPXkuc2VsZWN0aW9uU3RhcnQ9eS5jb250ZXh0LmNvbXBvc2l0aW9uU3RhcnRPZmZzZXQpLHkubWFya2VyUmFuZ2UuZW5kLmNvbHVtbj15Lm1hcmtlclJhbmdlLnN0YXJ0LmNvbHVtbitOLXkuc2VsZWN0aW9uU3RhcnQpfX0sVT1mdW5jdGlvbihlKXtpZighdC5vbkNvbXBvc2l0aW9uRW5kfHx0LiRyZWFkT25seSlyZXR1cm47eT0hMSx0Lm9uQ29tcG9zaXRpb25FbmQoKSx0Lm9mZigibW91c2Vkb3duIix6KSxlJiZQKCl9LFc9by5kZWxheWVkQ2FsbChSLDUwKS5zY2hlZHVsZS5iaW5kKG51bGwsbnVsbCk7ci5hZGRMaXN0ZW5lcihuLCJjb21wb3NpdGlvbnN0YXJ0IixxKSxyLmFkZExpc3RlbmVyKG4sImNvbXBvc2l0aW9udXBkYXRlIixSKSxyLmFkZExpc3RlbmVyKG4sImtleXVwIixYKSxyLmFkZExpc3RlbmVyKG4sImtleWRvd24iLFcpLHIuYWRkTGlzdGVuZXIobiwiY29tcG9zaXRpb25lbmQiLFUpLHRoaXMuZ2V0RWxlbWVudD1mdW5jdGlvbigpe3JldHVybiBufSx0aGlzLnNldENvbW1hbmRNb2RlPWZ1bmN0aW9uKGUpe0U9ZSxuLnJlYWRPbmx5PSExfSx0aGlzLnNldFJlYWRPbmx5PWZ1bmN0aW9uKGUpe0V8fChuLnJlYWRPbmx5PWUpfSx0aGlzLnNldENvcHlXaXRoRW1wdHlTZWxlY3Rpb249ZnVuY3Rpb24oZSl7fSx0aGlzLm9uQ29udGV4dE1lbnU9ZnVuY3Rpb24oZSl7Xz0hMCxMKCksdC5fZW1pdCgibmF0aXZlY29udGV4dG1lbnUiLHt0YXJnZXQ6dCxkb21FdmVudDplfSksdGhpcy5tb3ZlVG9Nb3VzZShlLCEwKX0sdGhpcy5tb3ZlVG9Nb3VzZT1mdW5jdGlvbihlLG8pe3d8fCh3PW4uc3R5bGUuY3NzVGV4dCksbi5zdHlsZS5jc3NUZXh0PShvPyJ6LWluZGV4OjEwMDAwMDsiOiIiKSsoaS5pc0lFPyJvcGFjaXR5OjAuMTsiOiIiKSsidGV4dC1pbmRlbnQ6IC0iKyhUK04pKnQucmVuZGVyZXIuY2hhcmFjdGVyV2lkdGgqLjUrInB4OyI7dmFyIHU9dC5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYT1zLmNvbXB1dGVkU3R5bGUodC5jb250YWluZXIpLGY9dS50b3ArKHBhcnNlSW50KGEuYm9yZGVyVG9wV2lkdGgpfHwwKSxsPXUubGVmdCsocGFyc2VJbnQodS5ib3JkZXJMZWZ0V2lkdGgpfHwwKSxjPXUuYm90dG9tLWYtbi5jbGllbnRIZWlnaHQtMixoPWZ1bmN0aW9uKGUpe3MudHJhbnNsYXRlKG4sZS5jbGllbnRYLWwtMixNYXRoLm1pbihlLmNsaWVudFktZi0yLGMpKX07aChlKTtpZihlLnR5cGUhPSJtb3VzZWRvd24iKXJldHVybjt0LnJlbmRlcmVyLiRpc01vdXNlUHJlc3NlZD0hMCxjbGVhclRpbWVvdXQoViksaS5pc1dpbiYmci5jYXB0dXJlKHQuY29udGFpbmVyLGgsJCl9LHRoaXMub25Db250ZXh0TWVudUNsb3NlPSQ7dmFyIFYsSj1mdW5jdGlvbihlKXt0LnRleHRJbnB1dC5vbkNvbnRleHRNZW51KGUpLCQoKX07ci5hZGRMaXN0ZW5lcihuLCJtb3VzZXVwIixKKSxyLmFkZExpc3RlbmVyKG4sIm1vdXNlZG93biIsZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLCQoKX0pLHIuYWRkTGlzdGVuZXIodC5yZW5kZXJlci5zY3JvbGxlciwiY29udGV4dG1lbnUiLEopLHIuYWRkTGlzdGVuZXIobiwiY29udGV4dG1lbnUiLEopLGQmJksoZSx0LG4pfTt0LlRleHRJbnB1dD1tfSksYWNlLmRlZmluZSgiYWNlL21vdXNlL2RlZmF1bHRfaGFuZGxlcnMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL3VzZXJhZ2VudCJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbyhlKXtlLiRjbGlja1NlbGVjdGlvbj1udWxsO3ZhciB0PWUuZWRpdG9yO3Quc2V0RGVmYXVsdEhhbmRsZXIoIm1vdXNlZG93biIsdGhpcy5vbk1vdXNlRG93bi5iaW5kKGUpKSx0LnNldERlZmF1bHRIYW5kbGVyKCJkYmxjbGljayIsdGhpcy5vbkRvdWJsZUNsaWNrLmJpbmQoZSkpLHQuc2V0RGVmYXVsdEhhbmRsZXIoInRyaXBsZWNsaWNrIix0aGlzLm9uVHJpcGxlQ2xpY2suYmluZChlKSksdC5zZXREZWZhdWx0SGFuZGxlcigicXVhZGNsaWNrIix0aGlzLm9uUXVhZENsaWNrLmJpbmQoZSkpLHQuc2V0RGVmYXVsdEhhbmRsZXIoIm1vdXNld2hlZWwiLHRoaXMub25Nb3VzZVdoZWVsLmJpbmQoZSkpO3ZhciBuPVsic2VsZWN0Iiwic3RhcnRTZWxlY3QiLCJzZWxlY3RFbmQiLCJzZWxlY3RBbGxFbmQiLCJzZWxlY3RCeVdvcmRzRW5kIiwic2VsZWN0QnlMaW5lc0VuZCIsImRyYWdXYWl0IiwiZHJhZ1dhaXRFbmQiLCJmb2N1c1dhaXQiXTtuLmZvckVhY2goZnVuY3Rpb24odCl7ZVt0XT10aGlzW3RdfSx0aGlzKSxlLnNlbGVjdEJ5TGluZXM9dGhpcy5leHRlbmRTZWxlY3Rpb25CeS5iaW5kKGUsImdldExpbmVSYW5nZSIpLGUuc2VsZWN0QnlXb3Jkcz10aGlzLmV4dGVuZFNlbGVjdGlvbkJ5LmJpbmQoZSwiZ2V0V29yZFJhbmdlIil9ZnVuY3Rpb24gdShlLHQsbixyKXtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KG4tZSwyKStNYXRoLnBvdyhyLXQsMikpfWZ1bmN0aW9uIGEoZSx0KXtpZihlLnN0YXJ0LnJvdz09ZS5lbmQucm93KXZhciBuPTIqdC5jb2x1bW4tZS5zdGFydC5jb2x1bW4tZS5lbmQuY29sdW1uO2Vsc2UgaWYoZS5zdGFydC5yb3c9PWUuZW5kLnJvdy0xJiYhZS5zdGFydC5jb2x1bW4mJiFlLmVuZC5jb2x1bW4pdmFyIG49dC5jb2x1bW4tNDtlbHNlIHZhciBuPTIqdC5yb3ctZS5zdGFydC5yb3ctZS5lbmQucm93O3JldHVybiBuPDA/e2N1cnNvcjplLnN0YXJ0LGFuY2hvcjplLmVuZH06e2N1cnNvcjplLmVuZCxhbmNob3I6ZS5zdGFydH19dmFyIHI9ZSgiLi4vbGliL3VzZXJhZ2VudCIpLGk9MCxzPTU1MDsoZnVuY3Rpb24oKXt0aGlzLm9uTW91c2VEb3duPWZ1bmN0aW9uKGUpe3ZhciB0PWUuaW5TZWxlY3Rpb24oKSxuPWUuZ2V0RG9jdW1lbnRQb3NpdGlvbigpO3RoaXMubW91c2Vkb3duRXZlbnQ9ZTt2YXIgaT10aGlzLmVkaXRvcixzPWUuZ2V0QnV0dG9uKCk7aWYocyE9PTApe3ZhciBvPWkuZ2V0U2VsZWN0aW9uUmFuZ2UoKSx1PW8uaXNFbXB0eSgpOyh1fHxzPT0xKSYmaS5zZWxlY3Rpb24ubW92ZVRvUG9zaXRpb24obikscz09MiYmKGkudGV4dElucHV0Lm9uQ29udGV4dE1lbnUoZS5kb21FdmVudCksci5pc01vemlsbGF8fGUucHJldmVudERlZmF1bHQoKSk7cmV0dXJufXRoaXMubW91c2Vkb3duRXZlbnQudGltZT1EYXRlLm5vdygpO2lmKHQmJiFpLmlzRm9jdXNlZCgpKXtpLmZvY3VzKCk7aWYodGhpcy4kZm9jdXNUaW1lb3V0JiYhdGhpcy4kY2xpY2tTZWxlY3Rpb24mJiFpLmluTXVsdGlTZWxlY3RNb2RlKXt0aGlzLnNldFN0YXRlKCJmb2N1c1dhaXQiKSx0aGlzLmNhcHR1cmVNb3VzZShlKTtyZXR1cm59fXJldHVybiB0aGlzLmNhcHR1cmVNb3VzZShlKSx0aGlzLnN0YXJ0U2VsZWN0KG4sZS5kb21FdmVudC5fY2xpY2tzPjEpLGUucHJldmVudERlZmF1bHQoKX0sdGhpcy5zdGFydFNlbGVjdD1mdW5jdGlvbihlLHQpe2U9ZXx8dGhpcy5lZGl0b3IucmVuZGVyZXIuc2NyZWVuVG9UZXh0Q29vcmRpbmF0ZXModGhpcy54LHRoaXMueSk7dmFyIG49dGhpcy5lZGl0b3I7aWYoIXRoaXMubW91c2Vkb3duRXZlbnQpcmV0dXJuO3RoaXMubW91c2Vkb3duRXZlbnQuZ2V0U2hpZnRLZXkoKT9uLnNlbGVjdGlvbi5zZWxlY3RUb1Bvc2l0aW9uKGUpOnR8fG4uc2VsZWN0aW9uLm1vdmVUb1Bvc2l0aW9uKGUpLHR8fHRoaXMuc2VsZWN0KCksbi5yZW5kZXJlci5zY3JvbGxlci5zZXRDYXB0dXJlJiZuLnJlbmRlcmVyLnNjcm9sbGVyLnNldENhcHR1cmUoKSxuLnNldFN0eWxlKCJhY2Vfc2VsZWN0aW5nIiksdGhpcy5zZXRTdGF0ZSgic2VsZWN0Iil9LHRoaXMuc2VsZWN0PWZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLmVkaXRvcixuPXQucmVuZGVyZXIuc2NyZWVuVG9UZXh0Q29vcmRpbmF0ZXModGhpcy54LHRoaXMueSk7aWYodGhpcy4kY2xpY2tTZWxlY3Rpb24pe3ZhciByPXRoaXMuJGNsaWNrU2VsZWN0aW9uLmNvbXBhcmVQb2ludChuKTtpZihyPT0tMSllPXRoaXMuJGNsaWNrU2VsZWN0aW9uLmVuZDtlbHNlIGlmKHI9PTEpZT10aGlzLiRjbGlja1NlbGVjdGlvbi5zdGFydDtlbHNle3ZhciBpPWEodGhpcy4kY2xpY2tTZWxlY3Rpb24sbik7bj1pLmN1cnNvcixlPWkuYW5jaG9yfXQuc2VsZWN0aW9uLnNldFNlbGVjdGlvbkFuY2hvcihlLnJvdyxlLmNvbHVtbil9dC5zZWxlY3Rpb24uc2VsZWN0VG9Qb3NpdGlvbihuKSx0LnJlbmRlcmVyLnNjcm9sbEN1cnNvckludG9WaWV3KCl9LHRoaXMuZXh0ZW5kU2VsZWN0aW9uQnk9ZnVuY3Rpb24oZSl7dmFyIHQsbj10aGlzLmVkaXRvcixyPW4ucmVuZGVyZXIuc2NyZWVuVG9UZXh0Q29vcmRpbmF0ZXModGhpcy54LHRoaXMueSksaT1uLnNlbGVjdGlvbltlXShyLnJvdyxyLmNvbHVtbik7aWYodGhpcy4kY2xpY2tTZWxlY3Rpb24pe3ZhciBzPXRoaXMuJGNsaWNrU2VsZWN0aW9uLmNvbXBhcmVQb2ludChpLnN0YXJ0KSxvPXRoaXMuJGNsaWNrU2VsZWN0aW9uLmNvbXBhcmVQb2ludChpLmVuZCk7aWYocz09LTEmJm88PTApe3Q9dGhpcy4kY2xpY2tTZWxlY3Rpb24uZW5kO2lmKGkuZW5kLnJvdyE9ci5yb3d8fGkuZW5kLmNvbHVtbiE9ci5jb2x1bW4pcj1pLnN0YXJ0fWVsc2UgaWYobz09MSYmcz49MCl7dD10aGlzLiRjbGlja1NlbGVjdGlvbi5zdGFydDtpZihpLnN0YXJ0LnJvdyE9ci5yb3d8fGkuc3RhcnQuY29sdW1uIT1yLmNvbHVtbilyPWkuZW5kfWVsc2UgaWYocz09LTEmJm89PTEpcj1pLmVuZCx0PWkuc3RhcnQ7ZWxzZXt2YXIgdT1hKHRoaXMuJGNsaWNrU2VsZWN0aW9uLHIpO3I9dS5jdXJzb3IsdD11LmFuY2hvcn1uLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25BbmNob3IodC5yb3csdC5jb2x1bW4pfW4uc2VsZWN0aW9uLnNlbGVjdFRvUG9zaXRpb24ociksbi5yZW5kZXJlci5zY3JvbGxDdXJzb3JJbnRvVmlldygpfSx0aGlzLnNlbGVjdEVuZD10aGlzLnNlbGVjdEFsbEVuZD10aGlzLnNlbGVjdEJ5V29yZHNFbmQ9dGhpcy5zZWxlY3RCeUxpbmVzRW5kPWZ1bmN0aW9uKCl7dGhpcy4kY2xpY2tTZWxlY3Rpb249bnVsbCx0aGlzLmVkaXRvci51bnNldFN0eWxlKCJhY2Vfc2VsZWN0aW5nIiksdGhpcy5lZGl0b3IucmVuZGVyZXIuc2Nyb2xsZXIucmVsZWFzZUNhcHR1cmUmJnRoaXMuZWRpdG9yLnJlbmRlcmVyLnNjcm9sbGVyLnJlbGVhc2VDYXB0dXJlKCl9LHRoaXMuZm9jdXNXYWl0PWZ1bmN0aW9uKCl7dmFyIGU9dSh0aGlzLm1vdXNlZG93bkV2ZW50LngsdGhpcy5tb3VzZWRvd25FdmVudC55LHRoaXMueCx0aGlzLnkpLHQ9RGF0ZS5ub3coKTsoZT5pfHx0LXRoaXMubW91c2Vkb3duRXZlbnQudGltZT50aGlzLiRmb2N1c1RpbWVvdXQpJiZ0aGlzLnN0YXJ0U2VsZWN0KHRoaXMubW91c2Vkb3duRXZlbnQuZ2V0RG9jdW1lbnRQb3NpdGlvbigpKX0sdGhpcy5vbkRvdWJsZUNsaWNrPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0RG9jdW1lbnRQb3NpdGlvbigpLG49dGhpcy5lZGl0b3Iscj1uLnNlc3Npb24saT1yLmdldEJyYWNrZXRSYW5nZSh0KTtpPyhpLmlzRW1wdHkoKSYmKGkuc3RhcnQuY29sdW1uLS0saS5lbmQuY29sdW1uKyspLHRoaXMuc2V0U3RhdGUoInNlbGVjdCIpKTooaT1uLnNlbGVjdGlvbi5nZXRXb3JkUmFuZ2UodC5yb3csdC5jb2x1bW4pLHRoaXMuc2V0U3RhdGUoInNlbGVjdEJ5V29yZHMiKSksdGhpcy4kY2xpY2tTZWxlY3Rpb249aSx0aGlzLnNlbGVjdCgpfSx0aGlzLm9uVHJpcGxlQ2xpY2s9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXREb2N1bWVudFBvc2l0aW9uKCksbj10aGlzLmVkaXRvcjt0aGlzLnNldFN0YXRlKCJzZWxlY3RCeUxpbmVzIik7dmFyIHI9bi5nZXRTZWxlY3Rpb25SYW5nZSgpO3IuaXNNdWx0aUxpbmUoKSYmci5jb250YWlucyh0LnJvdyx0LmNvbHVtbik/KHRoaXMuJGNsaWNrU2VsZWN0aW9uPW4uc2VsZWN0aW9uLmdldExpbmVSYW5nZShyLnN0YXJ0LnJvdyksdGhpcy4kY2xpY2tTZWxlY3Rpb24uZW5kPW4uc2VsZWN0aW9uLmdldExpbmVSYW5nZShyLmVuZC5yb3cpLmVuZCk6dGhpcy4kY2xpY2tTZWxlY3Rpb249bi5zZWxlY3Rpb24uZ2V0TGluZVJhbmdlKHQucm93KSx0aGlzLnNlbGVjdCgpfSx0aGlzLm9uUXVhZENsaWNrPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZWRpdG9yO3Quc2VsZWN0QWxsKCksdGhpcy4kY2xpY2tTZWxlY3Rpb249dC5nZXRTZWxlY3Rpb25SYW5nZSgpLHRoaXMuc2V0U3RhdGUoInNlbGVjdEFsbCIpfSx0aGlzLm9uTW91c2VXaGVlbD1mdW5jdGlvbihlKXtpZihlLmdldEFjY2VsS2V5KCkpcmV0dXJuO2UuZ2V0U2hpZnRLZXkoKSYmZS53aGVlbFkmJiFlLndoZWVsWCYmKGUud2hlZWxYPWUud2hlZWxZLGUud2hlZWxZPTApO3ZhciB0PXRoaXMuZWRpdG9yO3RoaXMuJGxhc3RTY3JvbGx8fCh0aGlzLiRsYXN0U2Nyb2xsPXt0OjAsdng6MCx2eTowLGFsbG93ZWQ6MH0pO3ZhciBuPXRoaXMuJGxhc3RTY3JvbGwscj1lLmRvbUV2ZW50LnRpbWVTdGFtcCxpPXItbi50LG89aT9lLndoZWVsWC9pOm4udngsdT1pP2Uud2hlZWxZL2k6bi52eTtpPHMmJihvPShvK24udngpLzIsdT0odStuLnZ5KS8yKTt2YXIgYT1NYXRoLmFicyhvL3UpLGY9ITE7YT49MSYmdC5yZW5kZXJlci5pc1Njcm9sbGFibGVCeShlLndoZWVsWCplLnNwZWVkLDApJiYoZj0hMCksYTw9MSYmdC5yZW5kZXJlci5pc1Njcm9sbGFibGVCeSgwLGUud2hlZWxZKmUuc3BlZWQpJiYoZj0hMCk7aWYoZiluLmFsbG93ZWQ9cjtlbHNlIGlmKHItbi5hbGxvd2VkPHMpe3ZhciBsPU1hdGguYWJzKG8pPD0xLjUqTWF0aC5hYnMobi52eCkmJk1hdGguYWJzKHUpPD0xLjUqTWF0aC5hYnMobi52eSk7bD8oZj0hMCxuLmFsbG93ZWQ9cik6bi5hbGxvd2VkPTB9bi50PXIsbi52eD1vLG4udnk9dTtpZihmKXJldHVybiB0LnJlbmRlcmVyLnNjcm9sbEJ5KGUud2hlZWxYKmUuc3BlZWQsZS53aGVlbFkqZS5zcGVlZCksZS5zdG9wKCl9fSkuY2FsbChvLnByb3RvdHlwZSksdC5EZWZhdWx0SGFuZGxlcnM9b30pLGFjZS5kZWZpbmUoImFjZS90b29sdGlwIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2RvbSJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcyhlKXt0aGlzLmlzT3Blbj0hMSx0aGlzLiRlbGVtZW50PW51bGwsdGhpcy4kcGFyZW50Tm9kZT1lfXZhciByPWUoIi4vbGliL29vcCIpLGk9ZSgiLi9saWIvZG9tIik7KGZ1bmN0aW9uKCl7dGhpcy4kaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRlbGVtZW50PWkuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy4kZWxlbWVudC5jbGFzc05hbWU9ImFjZV90b29sdGlwIix0aGlzLiRlbGVtZW50LnN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuJHBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcy4kZWxlbWVudCksdGhpcy4kZWxlbWVudH0sdGhpcy5nZXRFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGVsZW1lbnR8fHRoaXMuJGluaXQoKX0sdGhpcy5zZXRUZXh0PWZ1bmN0aW9uKGUpe3RoaXMuZ2V0RWxlbWVudCgpLnRleHRDb250ZW50PWV9LHRoaXMuc2V0SHRtbD1mdW5jdGlvbihlKXt0aGlzLmdldEVsZW1lbnQoKS5pbm5lckhUTUw9ZX0sdGhpcy5zZXRQb3NpdGlvbj1mdW5jdGlvbihlLHQpe3RoaXMuZ2V0RWxlbWVudCgpLnN0eWxlLmxlZnQ9ZSsicHgiLHRoaXMuZ2V0RWxlbWVudCgpLnN0eWxlLnRvcD10KyJweCJ9LHRoaXMuc2V0Q2xhc3NOYW1lPWZ1bmN0aW9uKGUpe2kuYWRkQ3NzQ2xhc3ModGhpcy5nZXRFbGVtZW50KCksZSl9LHRoaXMuc2hvdz1mdW5jdGlvbihlLHQsbil7ZSE9bnVsbCYmdGhpcy5zZXRUZXh0KGUpLHQhPW51bGwmJm4hPW51bGwmJnRoaXMuc2V0UG9zaXRpb24odCxuKSx0aGlzLmlzT3Blbnx8KHRoaXMuZ2V0RWxlbWVudCgpLnN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLmlzT3Blbj0hMCl9LHRoaXMuaGlkZT1mdW5jdGlvbigpe3RoaXMuaXNPcGVuJiYodGhpcy5nZXRFbGVtZW50KCkuc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5pc09wZW49ITEpfSx0aGlzLmdldEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEVsZW1lbnQoKS5vZmZzZXRIZWlnaHR9LHRoaXMuZ2V0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRFbGVtZW50KCkub2Zmc2V0V2lkdGh9LHRoaXMuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuaXNPcGVuPSExLHRoaXMuJGVsZW1lbnQmJnRoaXMuJGVsZW1lbnQucGFyZW50Tm9kZSYmdGhpcy4kZWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuJGVsZW1lbnQpfX0pLmNhbGwocy5wcm90b3R5cGUpLHQuVG9vbHRpcD1zfSksYWNlLmRlZmluZSgiYWNlL21vdXNlL2RlZmF1bHRfZ3V0dGVyX2hhbmRsZXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2RvbSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9ldmVudCIsImFjZS90b29sdGlwIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB1KGUpe2Z1bmN0aW9uIGwoKXt2YXIgcj11LmdldERvY3VtZW50UG9zaXRpb24oKS5yb3cscz1uLiRhbm5vdGF0aW9uc1tyXTtpZighcylyZXR1cm4gYygpO3ZhciBvPXQuc2Vzc2lvbi5nZXRMZW5ndGgoKTtpZihyPT1vKXt2YXIgYT10LnJlbmRlcmVyLnBpeGVsVG9TY3JlZW5Db29yZGluYXRlcygwLHUueSkucm93LGw9dS4kcG9zO2lmKGE+dC5zZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Sb3cobC5yb3csbC5jb2x1bW4pKXJldHVybiBjKCl9aWYoZj09cylyZXR1cm47Zj1zLnRleHQuam9pbigiPGJyLz4iKSxpLnNldEh0bWwoZiksaS5zaG93KCksdC5fc2lnbmFsKCJzaG93R3V0dGVyVG9vbHRpcCIsaSksdC5vbigibW91c2V3aGVlbCIsYyk7aWYoZS4kdG9vbHRpcEZvbGxvd3NNb3VzZSloKHUpO2Vsc2V7dmFyIHA9dS5kb21FdmVudC50YXJnZXQsZD1wLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHY9aS5nZXRFbGVtZW50KCkuc3R5bGU7di5sZWZ0PWQucmlnaHQrInB4Iix2LnRvcD1kLmJvdHRvbSsicHgifX1mdW5jdGlvbiBjKCl7byYmKG89Y2xlYXJUaW1lb3V0KG8pKSxmJiYoaS5oaWRlKCksZj1udWxsLHQuX3NpZ25hbCgiaGlkZUd1dHRlclRvb2x0aXAiLGkpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V3aGVlbCIsYykpfWZ1bmN0aW9uIGgoZSl7aS5zZXRQb3NpdGlvbihlLngsZS55KX12YXIgdD1lLmVkaXRvcixuPXQucmVuZGVyZXIuJGd1dHRlckxheWVyLGk9bmV3IGEodC5jb250YWluZXIpO2UuZWRpdG9yLnNldERlZmF1bHRIYW5kbGVyKCJndXR0ZXJtb3VzZWRvd24iLGZ1bmN0aW9uKHIpe2lmKCF0LmlzRm9jdXNlZCgpfHxyLmdldEJ1dHRvbigpIT0wKXJldHVybjt2YXIgaT1uLmdldFJlZ2lvbihyKTtpZihpPT0iZm9sZFdpZGdldHMiKXJldHVybjt2YXIgcz1yLmdldERvY3VtZW50UG9zaXRpb24oKS5yb3csbz10LnNlc3Npb24uc2VsZWN0aW9uO2lmKHIuZ2V0U2hpZnRLZXkoKSlvLnNlbGVjdFRvKHMsMCk7ZWxzZXtpZihyLmRvbUV2ZW50LmRldGFpbD09MilyZXR1cm4gdC5zZWxlY3RBbGwoKSxyLnByZXZlbnREZWZhdWx0KCk7ZS4kY2xpY2tTZWxlY3Rpb249dC5zZWxlY3Rpb24uZ2V0TGluZVJhbmdlKHMpfXJldHVybiBlLnNldFN0YXRlKCJzZWxlY3RCeUxpbmVzIiksZS5jYXB0dXJlTW91c2Uociksci5wcmV2ZW50RGVmYXVsdCgpfSk7dmFyIG8sdSxmO2UuZWRpdG9yLnNldERlZmF1bHRIYW5kbGVyKCJndXR0ZXJtb3VzZW1vdmUiLGZ1bmN0aW9uKHQpe3ZhciBuPXQuZG9tRXZlbnQudGFyZ2V0fHx0LmRvbUV2ZW50LnNyY0VsZW1lbnQ7aWYoci5oYXNDc3NDbGFzcyhuLCJhY2VfZm9sZC13aWRnZXQiKSlyZXR1cm4gYygpO2YmJmUuJHRvb2x0aXBGb2xsb3dzTW91c2UmJmgodCksdT10O2lmKG8pcmV0dXJuO289c2V0VGltZW91dChmdW5jdGlvbigpe289bnVsbCx1JiYhZS5pc01vdXNlUHJlc3NlZD9sKCk6YygpfSw1MCl9KSxzLmFkZExpc3RlbmVyKHQucmVuZGVyZXIuJGd1dHRlciwibW91c2VvdXQiLGZ1bmN0aW9uKGUpe3U9bnVsbDtpZighZnx8bylyZXR1cm47bz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bz1udWxsLGMoKX0sNTApfSksdC5vbigiY2hhbmdlU2Vzc2lvbiIsYyl9ZnVuY3Rpb24gYShlKXtvLmNhbGwodGhpcyxlKX12YXIgcj1lKCIuLi9saWIvZG9tIiksaT1lKCIuLi9saWIvb29wIikscz1lKCIuLi9saWIvZXZlbnQiKSxvPWUoIi4uL3Rvb2x0aXAiKS5Ub29sdGlwO2kuaW5oZXJpdHMoYSxvKSxmdW5jdGlvbigpe3RoaXMuc2V0UG9zaXRpb249ZnVuY3Rpb24oZSx0KXt2YXIgbj13aW5kb3cuaW5uZXJXaWR0aHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLHI9d2luZG93LmlubmVySGVpZ2h0fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LGk9dGhpcy5nZXRXaWR0aCgpLHM9dGhpcy5nZXRIZWlnaHQoKTtlKz0xNSx0Kz0xNSxlK2k+biYmKGUtPWUraS1uKSx0K3M+ciYmKHQtPTIwK3MpLG8ucHJvdG90eXBlLnNldFBvc2l0aW9uLmNhbGwodGhpcyxlLHQpfX0uY2FsbChhLnByb3RvdHlwZSksdC5HdXR0ZXJIYW5kbGVyPXV9KSxhY2UuZGVmaW5lKCJhY2UvbW91c2UvbW91c2VfZXZlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2V2ZW50IiwiYWNlL2xpYi91c2VyYWdlbnQiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoIi4uL2xpYi9ldmVudCIpLGk9ZSgiLi4vbGliL3VzZXJhZ2VudCIpLHM9dC5Nb3VzZUV2ZW50PWZ1bmN0aW9uKGUsdCl7dGhpcy5kb21FdmVudD1lLHRoaXMuZWRpdG9yPXQsdGhpcy54PXRoaXMuY2xpZW50WD1lLmNsaWVudFgsdGhpcy55PXRoaXMuY2xpZW50WT1lLmNsaWVudFksdGhpcy4kcG9zPW51bGwsdGhpcy4kaW5TZWxlY3Rpb249bnVsbCx0aGlzLnByb3BhZ2F0aW9uU3RvcHBlZD0hMSx0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITF9OyhmdW5jdGlvbigpe3RoaXMuc3RvcFByb3BhZ2F0aW9uPWZ1bmN0aW9uKCl7ci5zdG9wUHJvcGFnYXRpb24odGhpcy5kb21FdmVudCksdGhpcy5wcm9wYWdhdGlvblN0b3BwZWQ9ITB9LHRoaXMucHJldmVudERlZmF1bHQ9ZnVuY3Rpb24oKXtyLnByZXZlbnREZWZhdWx0KHRoaXMuZG9tRXZlbnQpLHRoaXMuZGVmYXVsdFByZXZlbnRlZD0hMH0sdGhpcy5zdG9wPWZ1bmN0aW9uKCl7dGhpcy5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLnByZXZlbnREZWZhdWx0KCl9LHRoaXMuZ2V0RG9jdW1lbnRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRwb3M/dGhpcy4kcG9zOih0aGlzLiRwb3M9dGhpcy5lZGl0b3IucmVuZGVyZXIuc2NyZWVuVG9UZXh0Q29vcmRpbmF0ZXModGhpcy5jbGllbnRYLHRoaXMuY2xpZW50WSksdGhpcy4kcG9zKX0sdGhpcy5pblNlbGVjdGlvbj1mdW5jdGlvbigpe2lmKHRoaXMuJGluU2VsZWN0aW9uIT09bnVsbClyZXR1cm4gdGhpcy4kaW5TZWxlY3Rpb247dmFyIGU9dGhpcy5lZGl0b3IsdD1lLmdldFNlbGVjdGlvblJhbmdlKCk7aWYodC5pc0VtcHR5KCkpdGhpcy4kaW5TZWxlY3Rpb249ITE7ZWxzZXt2YXIgbj10aGlzLmdldERvY3VtZW50UG9zaXRpb24oKTt0aGlzLiRpblNlbGVjdGlvbj10LmNvbnRhaW5zKG4ucm93LG4uY29sdW1uKX1yZXR1cm4gdGhpcy4kaW5TZWxlY3Rpb259LHRoaXMuZ2V0QnV0dG9uPWZ1bmN0aW9uKCl7cmV0dXJuIHIuZ2V0QnV0dG9uKHRoaXMuZG9tRXZlbnQpfSx0aGlzLmdldFNoaWZ0S2V5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tRXZlbnQuc2hpZnRLZXl9LHRoaXMuZ2V0QWNjZWxLZXk9aS5pc01hYz9mdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbUV2ZW50Lm1ldGFLZXl9OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tRXZlbnQuY3RybEtleX19KS5jYWxsKHMucHJvdG90eXBlKX0pLGFjZS5kZWZpbmUoImFjZS9tb3VzZS9kcmFnZHJvcF9oYW5kbGVyIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9kb20iLCJhY2UvbGliL2V2ZW50IiwiYWNlL2xpYi91c2VyYWdlbnQiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGYoZSl7ZnVuY3Rpb24gVChlLG4pe3ZhciByPURhdGUubm93KCksaT0hbnx8ZS5yb3chPW4ucm93LHM9IW58fGUuY29sdW1uIT1uLmNvbHVtbjtpZighU3x8aXx8cyl0Lm1vdmVDdXJzb3JUb1Bvc2l0aW9uKGUpLFM9cix4PXt4OnAseTpkfTtlbHNle3ZhciBvPWwoeC54LHgueSxwLGQpO28+YT9TPW51bGw6ci1TPj11JiYodC5yZW5kZXJlci5zY3JvbGxDdXJzb3JJbnRvVmlldygpLFM9bnVsbCl9fWZ1bmN0aW9uIE4oZSxuKXt2YXIgcj1EYXRlLm5vdygpLGk9dC5yZW5kZXJlci5sYXllckNvbmZpZy5saW5lSGVpZ2h0LHM9dC5yZW5kZXJlci5sYXllckNvbmZpZy5jaGFyYWN0ZXJXaWR0aCx1PXQucmVuZGVyZXIuc2Nyb2xsZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYT17eDp7bGVmdDpwLXUubGVmdCxyaWdodDp1LnJpZ2h0LXB9LHk6e3RvcDpkLXUudG9wLGJvdHRvbTp1LmJvdHRvbS1kfX0sZj1NYXRoLm1pbihhLngubGVmdCxhLngucmlnaHQpLGw9TWF0aC5taW4oYS55LnRvcCxhLnkuYm90dG9tKSxjPXtyb3c6ZS5yb3csY29sdW1uOmUuY29sdW1ufTtmL3M8PTImJihjLmNvbHVtbis9YS54LmxlZnQ8YS54LnJpZ2h0Py0zOjIpLGwvaTw9MSYmKGMucm93Kz1hLnkudG9wPGEueS5ib3R0b20/LTE6MSk7dmFyIGg9ZS5yb3chPWMucm93LHY9ZS5jb2x1bW4hPWMuY29sdW1uLG09IW58fGUucm93IT1uLnJvdztofHx2JiYhbT9FP3ItRT49byYmdC5yZW5kZXJlci5zY3JvbGxDdXJzb3JJbnRvVmlldyhjKTpFPXI6RT1udWxsfWZ1bmN0aW9uIEMoKXt2YXIgZT1nO2c9dC5yZW5kZXJlci5zY3JlZW5Ub1RleHRDb29yZGluYXRlcyhwLGQpLFQoZyxlKSxOKGcsZSl9ZnVuY3Rpb24gaygpe209dC5zZWxlY3Rpb24udG9PcmllbnRlZFJhbmdlKCksaD10LnNlc3Npb24uYWRkTWFya2VyKG0sImFjZV9zZWxlY3Rpb24iLHQuZ2V0U2VsZWN0aW9uU3R5bGUoKSksdC5jbGVhclNlbGVjdGlvbigpLHQuaXNGb2N1c2VkKCkmJnQucmVuZGVyZXIuJGN1cnNvckxheWVyLnNldEJsaW5raW5nKCExKSxjbGVhckludGVydmFsKHYpLEMoKSx2PXNldEludGVydmFsKEMsMjApLHk9MCxpLmFkZExpc3RlbmVyKGRvY3VtZW50LCJtb3VzZW1vdmUiLE8pfWZ1bmN0aW9uIEwoKXtjbGVhckludGVydmFsKHYpLHQuc2Vzc2lvbi5yZW1vdmVNYXJrZXIoaCksaD1udWxsLHQuc2VsZWN0aW9uLmZyb21PcmllbnRlZFJhbmdlKG0pLHQuaXNGb2N1c2VkKCkmJiF3JiZ0LiRyZXNldEN1cnNvclN0eWxlKCksbT1udWxsLGc9bnVsbCx5PTAsRT1udWxsLFM9bnVsbCxpLnJlbW92ZUxpc3RlbmVyKGRvY3VtZW50LCJtb3VzZW1vdmUiLE8pfWZ1bmN0aW9uIE8oKXtBPT1udWxsJiYoQT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7QSE9bnVsbCYmaCYmTCgpfSwyMCkpfWZ1bmN0aW9uIE0oZSl7dmFyIHQ9ZS50eXBlcztyZXR1cm4hdHx8QXJyYXkucHJvdG90eXBlLnNvbWUuY2FsbCh0LGZ1bmN0aW9uKGUpe3JldHVybiBlPT0idGV4dC9wbGFpbiJ8fGU9PSJUZXh0In0pfWZ1bmN0aW9uIF8oZSl7dmFyIHQ9WyJjb3B5IiwiY29weW1vdmUiLCJhbGwiLCJ1bmluaXRpYWxpemVkIl0sbj1bIm1vdmUiLCJjb3B5bW92ZSIsImxpbmttb3ZlIiwiYWxsIiwidW5pbml0aWFsaXplZCJdLHI9cy5pc01hYz9lLmFsdEtleTplLmN0cmxLZXksaT0idW5pbml0aWFsaXplZCI7dHJ5e2k9ZS5kYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZC50b0xvd2VyQ2FzZSgpfWNhdGNoKGUpe312YXIgbz0ibm9uZSI7cmV0dXJuIHImJnQuaW5kZXhPZihpKT49MD9vPSJjb3B5IjpuLmluZGV4T2YoaSk+PTA/bz0ibW92ZSI6dC5pbmRleE9mKGkpPj0wJiYobz0iY29weSIpLG99dmFyIHQ9ZS5lZGl0b3Isbj1yLmNyZWF0ZUVsZW1lbnQoImltZyIpO24uc3JjPSJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUFBQUFDSDVCQUVLQUFFQUxBQUFBQUFCQUFFQUFBSUNUQUVBT3c9PSIscy5pc09wZXJhJiYobi5zdHlsZS5jc3NUZXh0PSJ3aWR0aDoxcHg7aGVpZ2h0OjFweDtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7ei1pbmRleDoyMTQ3NDgzNjQ3O29wYWNpdHk6MDsiKTt2YXIgZj1bImRyYWdXYWl0IiwiZHJhZ1dhaXRFbmQiLCJzdGFydERyYWciLCJkcmFnUmVhZHlFbmQiLCJvbk1vdXNlRHJhZyJdO2YuZm9yRWFjaChmdW5jdGlvbih0KXtlW3RdPXRoaXNbdF19LHRoaXMpLHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLm9uTW91c2VEb3duLmJpbmQoZSkpO3ZhciBjPXQuY29udGFpbmVyLGgscCxkLHYsbSxnLHk9MCxiLHcsRSxTLHg7dGhpcy5vbkRyYWdTdGFydD1mdW5jdGlvbihlKXtpZih0aGlzLmNhbmNlbERyYWd8fCFjLmRyYWdnYWJsZSl7dmFyIHI9dGhpcztyZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe3Iuc3RhcnRTZWxlY3QoKSxyLmNhcHR1cmVNb3VzZShlKX0sMCksZS5wcmV2ZW50RGVmYXVsdCgpfW09dC5nZXRTZWxlY3Rpb25SYW5nZSgpO3ZhciBpPWUuZGF0YVRyYW5zZmVyO2kuZWZmZWN0QWxsb3dlZD10LmdldFJlYWRPbmx5KCk/ImNvcHkiOiJjb3B5TW92ZSIscy5pc09wZXJhJiYodC5jb250YWluZXIuYXBwZW5kQ2hpbGQobiksbi5zY3JvbGxUb3A9MCksaS5zZXREcmFnSW1hZ2UmJmkuc2V0RHJhZ0ltYWdlKG4sMCwwKSxzLmlzT3BlcmEmJnQuY29udGFpbmVyLnJlbW92ZUNoaWxkKG4pLGkuY2xlYXJEYXRhKCksaS5zZXREYXRhKCJUZXh0Iix0LnNlc3Npb24uZ2V0VGV4dFJhbmdlKCkpLHc9ITAsdGhpcy5zZXRTdGF0ZSgiZHJhZyIpfSx0aGlzLm9uRHJhZ0VuZD1mdW5jdGlvbihlKXtjLmRyYWdnYWJsZT0hMSx3PSExLHRoaXMuc2V0U3RhdGUobnVsbCk7aWYoIXQuZ2V0UmVhZE9ubHkoKSl7dmFyIG49ZS5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdDshYiYmbj09Im1vdmUiJiZ0LnNlc3Npb24ucmVtb3ZlKHQuZ2V0U2VsZWN0aW9uUmFuZ2UoKSksdC4kcmVzZXRDdXJzb3JTdHlsZSgpfXRoaXMuZWRpdG9yLnVuc2V0U3R5bGUoImFjZV9kcmFnZ2luZyIpLHRoaXMuZWRpdG9yLnJlbmRlcmVyLnNldEN1cnNvclN0eWxlKCIiKX0sdGhpcy5vbkRyYWdFbnRlcj1mdW5jdGlvbihlKXtpZih0LmdldFJlYWRPbmx5KCl8fCFNKGUuZGF0YVRyYW5zZmVyKSlyZXR1cm47cmV0dXJuIHA9ZS5jbGllbnRYLGQ9ZS5jbGllbnRZLGh8fGsoKSx5KyssZS5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdD1iPV8oZSksaS5wcmV2ZW50RGVmYXVsdChlKX0sdGhpcy5vbkRyYWdPdmVyPWZ1bmN0aW9uKGUpe2lmKHQuZ2V0UmVhZE9ubHkoKXx8IU0oZS5kYXRhVHJhbnNmZXIpKXJldHVybjtyZXR1cm4gcD1lLmNsaWVudFgsZD1lLmNsaWVudFksaHx8KGsoKSx5KyspLEEhPT1udWxsJiYoQT1udWxsKSxlLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0PWI9XyhlKSxpLnByZXZlbnREZWZhdWx0KGUpfSx0aGlzLm9uRHJhZ0xlYXZlPWZ1bmN0aW9uKGUpe3ktLTtpZih5PD0wJiZoKXJldHVybiBMKCksYj1udWxsLGkucHJldmVudERlZmF1bHQoZSl9LHRoaXMub25Ecm9wPWZ1bmN0aW9uKGUpe2lmKCFnKXJldHVybjt2YXIgbj1lLmRhdGFUcmFuc2ZlcjtpZih3KXN3aXRjaChiKXtjYXNlIm1vdmUiOm0uY29udGFpbnMoZy5yb3csZy5jb2x1bW4pP209e3N0YXJ0OmcsZW5kOmd9Om09dC5tb3ZlVGV4dChtLGcpO2JyZWFrO2Nhc2UiY29weSI6bT10Lm1vdmVUZXh0KG0sZywhMCl9ZWxzZXt2YXIgcj1uLmdldERhdGEoIlRleHQiKTttPXtzdGFydDpnLGVuZDp0LnNlc3Npb24uaW5zZXJ0KGcscil9LHQuZm9jdXMoKSxiPW51bGx9cmV0dXJuIEwoKSxpLnByZXZlbnREZWZhdWx0KGUpfSxpLmFkZExpc3RlbmVyKGMsImRyYWdzdGFydCIsdGhpcy5vbkRyYWdTdGFydC5iaW5kKGUpKSxpLmFkZExpc3RlbmVyKGMsImRyYWdlbmQiLHRoaXMub25EcmFnRW5kLmJpbmQoZSkpLGkuYWRkTGlzdGVuZXIoYywiZHJhZ2VudGVyIix0aGlzLm9uRHJhZ0VudGVyLmJpbmQoZSkpLGkuYWRkTGlzdGVuZXIoYywiZHJhZ292ZXIiLHRoaXMub25EcmFnT3Zlci5iaW5kKGUpKSxpLmFkZExpc3RlbmVyKGMsImRyYWdsZWF2ZSIsdGhpcy5vbkRyYWdMZWF2ZS5iaW5kKGUpKSxpLmFkZExpc3RlbmVyKGMsImRyb3AiLHRoaXMub25Ecm9wLmJpbmQoZSkpO3ZhciBBPW51bGx9ZnVuY3Rpb24gbChlLHQsbixyKXtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KG4tZSwyKStNYXRoLnBvdyhyLXQsMikpfXZhciByPWUoIi4uL2xpYi9kb20iKSxpPWUoIi4uL2xpYi9ldmVudCIpLHM9ZSgiLi4vbGliL3VzZXJhZ2VudCIpLG89MjAwLHU9MjAwLGE9NTsoZnVuY3Rpb24oKXt0aGlzLmRyYWdXYWl0PWZ1bmN0aW9uKCl7dmFyIGU9RGF0ZS5ub3coKS10aGlzLm1vdXNlZG93bkV2ZW50LnRpbWU7ZT50aGlzLmVkaXRvci5nZXREcmFnRGVsYXkoKSYmdGhpcy5zdGFydERyYWcoKX0sdGhpcy5kcmFnV2FpdEVuZD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZWRpdG9yLmNvbnRhaW5lcjtlLmRyYWdnYWJsZT0hMSx0aGlzLnN0YXJ0U2VsZWN0KHRoaXMubW91c2Vkb3duRXZlbnQuZ2V0RG9jdW1lbnRQb3NpdGlvbigpKSx0aGlzLnNlbGVjdEVuZCgpfSx0aGlzLmRyYWdSZWFkeUVuZD1mdW5jdGlvbihlKXt0aGlzLmVkaXRvci4kcmVzZXRDdXJzb3JTdHlsZSgpLHRoaXMuZWRpdG9yLnVuc2V0U3R5bGUoImFjZV9kcmFnZ2luZyIpLHRoaXMuZWRpdG9yLnJlbmRlcmVyLnNldEN1cnNvclN0eWxlKCIiKSx0aGlzLmRyYWdXYWl0RW5kKCl9LHRoaXMuc3RhcnREcmFnPWZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxEcmFnPSExO3ZhciBlPXRoaXMuZWRpdG9yLHQ9ZS5jb250YWluZXI7dC5kcmFnZ2FibGU9ITAsZS5yZW5kZXJlci4kY3Vyc29yTGF5ZXIuc2V0QmxpbmtpbmcoITEpLGUuc2V0U3R5bGUoImFjZV9kcmFnZ2luZyIpO3ZhciBuPXMuaXNXaW4/ImRlZmF1bHQiOiJtb3ZlIjtlLnJlbmRlcmVyLnNldEN1cnNvclN0eWxlKG4pLHRoaXMuc2V0U3RhdGUoImRyYWdSZWFkeSIpfSx0aGlzLm9uTW91c2VEcmFnPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZWRpdG9yLmNvbnRhaW5lcjtpZihzLmlzSUUmJnRoaXMuc3RhdGU9PSJkcmFnUmVhZHkiKXt2YXIgbj1sKHRoaXMubW91c2Vkb3duRXZlbnQueCx0aGlzLm1vdXNlZG93bkV2ZW50LnksdGhpcy54LHRoaXMueSk7bj4zJiZ0LmRyYWdEcm9wKCl9aWYodGhpcy5zdGF0ZT09PSJkcmFnV2FpdCIpe3ZhciBuPWwodGhpcy5tb3VzZWRvd25FdmVudC54LHRoaXMubW91c2Vkb3duRXZlbnQueSx0aGlzLngsdGhpcy55KTtuPjAmJih0LmRyYWdnYWJsZT0hMSx0aGlzLnN0YXJ0U2VsZWN0KHRoaXMubW91c2Vkb3duRXZlbnQuZ2V0RG9jdW1lbnRQb3NpdGlvbigpKSl9fSx0aGlzLm9uTW91c2VEb3duPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLiRkcmFnRW5hYmxlZClyZXR1cm47dGhpcy5tb3VzZWRvd25FdmVudD1lO3ZhciB0PXRoaXMuZWRpdG9yLG49ZS5pblNlbGVjdGlvbigpLHI9ZS5nZXRCdXR0b24oKSxpPWUuZG9tRXZlbnQuZGV0YWlsfHwxO2lmKGk9PT0xJiZyPT09MCYmbil7aWYoZS5lZGl0b3IuaW5NdWx0aVNlbGVjdE1vZGUmJihlLmdldEFjY2VsS2V5KCl8fGUuZ2V0U2hpZnRLZXkoKSkpcmV0dXJuO3RoaXMubW91c2Vkb3duRXZlbnQudGltZT1EYXRlLm5vdygpO3ZhciBvPWUuZG9tRXZlbnQudGFyZ2V0fHxlLmRvbUV2ZW50LnNyY0VsZW1lbnQ7InVuc2VsZWN0YWJsZSJpbiBvJiYoby51bnNlbGVjdGFibGU9Im9uIik7aWYodC5nZXREcmFnRGVsYXkoKSl7aWYocy5pc1dlYktpdCl7dGhpcy5jYW5jZWxEcmFnPSEwO3ZhciB1PXQuY29udGFpbmVyO3UuZHJhZ2dhYmxlPSEwfXRoaXMuc2V0U3RhdGUoImRyYWdXYWl0Iil9ZWxzZSB0aGlzLnN0YXJ0RHJhZygpO3RoaXMuY2FwdHVyZU1vdXNlKGUsdGhpcy5vbk1vdXNlRHJhZy5iaW5kKHRoaXMpKSxlLmRlZmF1bHRQcmV2ZW50ZWQ9ITB9fX0pLmNhbGwoZi5wcm90b3R5cGUpLHQuRHJhZ2Ryb3BIYW5kbGVyPWZ9KSxhY2UuZGVmaW5lKCJhY2UvbW91c2UvdG91Y2hfaGFuZGxlciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9tb3VzZS9tb3VzZV9ldmVudCIsImFjZS9saWIvZG9tIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuL21vdXNlX2V2ZW50IikuTW91c2VFdmVudCxpPWUoIi4uL2xpYi9kb20iKTt0LmFkZFRvdWNoTGlzdGVuZXJzPWZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24geSgpe3ZhciBlPXdpbmRvdy5uYXZpZ2F0b3ImJndpbmRvdy5uYXZpZ2F0b3IuY2xpcGJvYXJkLHI9ITEscz1mdW5jdGlvbigpe3ZhciBuPXQuZ2V0Q29weVRleHQoKSxzPXQuc2Vzc2lvbi5nZXRVbmRvTWFuYWdlcigpLmhhc1VuZG8oKTtnLnJlcGxhY2VDaGlsZChpLmJ1aWxkRG9tKHI/WyJzcGFuIiwhbiYmWyJzcGFuIix7ImNsYXNzIjoiYWNlX21vYmlsZS1idXR0b24iLGFjdGlvbjoic2VsZWN0YWxsIn0sIlNlbGVjdCBBbGwiXSxuJiZbInNwYW4iLHsiY2xhc3MiOiJhY2VfbW9iaWxlLWJ1dHRvbiIsYWN0aW9uOiJjb3B5In0sIkNvcHkiXSxuJiZbInNwYW4iLHsiY2xhc3MiOiJhY2VfbW9iaWxlLWJ1dHRvbiIsYWN0aW9uOiJjdXQifSwiQ3V0Il0sZSYmWyJzcGFuIix7ImNsYXNzIjoiYWNlX21vYmlsZS1idXR0b24iLGFjdGlvbjoicGFzdGUifSwiUGFzdGUiXSxzJiZbInNwYW4iLHsiY2xhc3MiOiJhY2VfbW9iaWxlLWJ1dHRvbiIsYWN0aW9uOiJ1bmRvIn0sIlVuZG8iXSxbInNwYW4iLHsiY2xhc3MiOiJhY2VfbW9iaWxlLWJ1dHRvbiIsYWN0aW9uOiJmaW5kIn0sIkZpbmQiXSxbInNwYW4iLHsiY2xhc3MiOiJhY2VfbW9iaWxlLWJ1dHRvbiIsYWN0aW9uOiJvcGVuQ29tbWFuZFBhbGxldGUifSwiUGFsbGV0ZSJdXTpbInNwYW4iXSksZy5maXJzdENoaWxkKX0sbz1mdW5jdGlvbihuKXt2YXIgaT1uLnRhcmdldC5nZXRBdHRyaWJ1dGUoImFjdGlvbiIpO2lmKGk9PSJtb3JlInx8IXIpcmV0dXJuIHI9IXIscygpO2lmKGk9PSJwYXN0ZSIpZS5yZWFkVGV4dCgpLnRoZW4oZnVuY3Rpb24oZSl7dC5leGVjQ29tbWFuZChpLGUpfSk7ZWxzZSBpZihpKXtpZihpPT0iY3V0Inx8aT09ImNvcHkiKWU/ZS53cml0ZVRleHQodC5nZXRDb3B5VGV4dCgpKTpkb2N1bWVudC5leGVjQ29tbWFuZCgiY29weSIpO3QuZXhlY0NvbW1hbmQoaSl9Zy5maXJzdENoaWxkLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHI9ITEsaSE9Im9wZW5Db21tYW5kUGFsbGV0ZSImJnQuZm9jdXMoKX07Zz1pLmJ1aWxkRG9tKFsiZGl2Iix7ImNsYXNzIjoiYWNlX21vYmlsZS1tZW51IixvbnRvdWNoc3RhcnQ6ZnVuY3Rpb24oZSl7bj0ibWVudSIsZS5zdG9wUHJvcGFnYXRpb24oKSxlLnByZXZlbnREZWZhdWx0KCksdC50ZXh0SW5wdXQuZm9jdXMoKX0sb250b3VjaGVuZDpmdW5jdGlvbihlKXtlLnN0b3BQcm9wYWdhdGlvbigpLGUucHJldmVudERlZmF1bHQoKSxvKGUpfSxvbmNsaWNrOm99LFsic3BhbiJdLFsic3BhbiIseyJjbGFzcyI6ImFjZV9tb2JpbGUtYnV0dG9uIixhY3Rpb246Im1vcmUifSwiLi4uIl1dLHQuY29udGFpbmVyKX1mdW5jdGlvbiBiKCl7Z3x8eSgpO3ZhciBlPXQuc2VsZWN0aW9uLmN1cnNvcixuPXQucmVuZGVyZXIudGV4dFRvU2NyZWVuQ29vcmRpbmF0ZXMoZS5yb3csZS5jb2x1bW4pLHI9dC5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Zy5zdHlsZS50b3A9bi5wYWdlWS1yLnRvcC0zKyJweCIsZy5zdHlsZS5yaWdodD0iMTBweCIsZy5zdHlsZS5kaXNwbGF5PSIiLGcuZmlyc3RDaGlsZC5zdHlsZS5kaXNwbGF5PSJub25lIix0Lm9uKCJpbnB1dCIsdyl9ZnVuY3Rpb24gdyhlKXtnJiYoZy5zdHlsZS5kaXNwbGF5PSJub25lIiksdC5vZmYoImlucHV0Iix3KX1mdW5jdGlvbiBFKCl7Zj1udWxsLGNsZWFyVGltZW91dChmKTt2YXIgZT10LnNlbGVjdGlvbi5nZXRSYW5nZSgpLHI9ZS5jb250YWlucyhoLnJvdyxoLmNvbHVtbik7aWYoZS5pc0VtcHR5KCl8fCFyKXQuc2VsZWN0aW9uLm1vdmVUb1Bvc2l0aW9uKGgpLHQuc2VsZWN0aW9uLnNlbGVjdFdvcmQoKTtuPSJ3YWl0IixiKCl9ZnVuY3Rpb24gUygpe2Y9bnVsbCxjbGVhclRpbWVvdXQoZiksdC5zZWxlY3Rpb24ubW92ZVRvUG9zaXRpb24oaCk7dmFyIGU9cD49Mj90LnNlbGVjdGlvbi5nZXRMaW5lUmFuZ2UoaC5yb3cpOnQuc2Vzc2lvbi5nZXRCcmFja2V0UmFuZ2UoaCk7ZSYmIWUuaXNFbXB0eSgpP3Quc2VsZWN0aW9uLnNldFJhbmdlKGUpOnQuc2VsZWN0aW9uLnNlbGVjdFdvcmQoKSxuPSJ3YWl0In1mdW5jdGlvbiB4KCl7Yys9NjAsbD1zZXRJbnRlcnZhbChmdW5jdGlvbigpe2MtLTw9MCYmKGNsZWFySW50ZXJ2YWwobCksbD1udWxsKSxNYXRoLmFicyhkKTwuMDEmJihkPTApLE1hdGguYWJzKHYpPC4wMSYmKHY9MCksYzwyMCYmKGQ9LjkqZCksYzwyMCYmKHY9Ljkqdik7dmFyIGU9dC5zZXNzaW9uLmdldFNjcm9sbFRvcCgpO3QucmVuZGVyZXIuc2Nyb2xsQnkoMTAqZCwxMCp2KSxlPT10LnNlc3Npb24uZ2V0U2Nyb2xsVG9wKCkmJihjPTApfSwxMCl9dmFyIG49InNjcm9sbCIscyxvLHUsYSxmLGwsYz0wLGgscD0wLGQ9MCx2PTAsbSxnO2UuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLGZ1bmN0aW9uKGUpe2lmKCFtKXJldHVybjt2YXIgbj10LnRleHRJbnB1dC5nZXRFbGVtZW50KCk7bi5mb2N1cygpfSksZS5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IixmdW5jdGlvbihlKXt2YXIgaT1lLnRvdWNoZXM7aWYoZnx8aS5sZW5ndGg+MSl7Y2xlYXJUaW1lb3V0KGYpLGY9bnVsbCx1PS0xLG49Inpvb20iO3JldHVybn1tPXQuJG1vdXNlSGFuZGxlci5pc01vdXNlUHJlc3NlZD0hMDt2YXIgbD10LnJlbmRlcmVyLmxheWVyQ29uZmlnLmxpbmVIZWlnaHQsZz10LnJlbmRlcmVyLmxheWVyQ29uZmlnLmxpbmVIZWlnaHQseT1lLnRpbWVTdGFtcDthPXk7dmFyIGI9aVswXSx3PWIuY2xpZW50WCx4PWIuY2xpZW50WTtNYXRoLmFicyhzLXcpK01hdGguYWJzKG8teCk+bCYmKHU9LTEpLHM9ZS5jbGllbnRYPXcsbz1lLmNsaWVudFk9eCxkPXY9MDt2YXIgVD1uZXcgcihlLHQpO2g9VC5nZXREb2N1bWVudFBvc2l0aW9uKCk7aWYoeS11PDUwMCYmaS5sZW5ndGg9PTEmJiFjKXArKyxlLnByZXZlbnREZWZhdWx0KCksZS5idXR0b249MCxTKCk7ZWxzZXtwPTA7dmFyIE49dC5zZWxlY3Rpb24uY3Vyc29yLEM9dC5zZWxlY3Rpb24uaXNFbXB0eSgpP046dC5zZWxlY3Rpb24uYW5jaG9yLGs9dC5yZW5kZXJlci4kY3Vyc29yTGF5ZXIuZ2V0UGl4ZWxQb3NpdGlvbihOLCEwKSxMPXQucmVuZGVyZXIuJGN1cnNvckxheWVyLmdldFBpeGVsUG9zaXRpb24oQywhMCksQT10LnJlbmRlcmVyLnNjcm9sbGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLE89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS89Zyx0PXQvbC0uNzUsZSplK3QqdH07aWYoZS5jbGllbnRYPEEubGVmdCl7bj0iem9vbSI7cmV0dXJufXZhciBNPU8oZS5jbGllbnRYLUEubGVmdC1rLmxlZnQsZS5jbGllbnRZLUEudG9wLWsudG9wKSxfPU8oZS5jbGllbnRYLUEubGVmdC1MLmxlZnQsZS5jbGllbnRZLUEudG9wLUwudG9wKTtNPDMuNSYmXzwzLjUmJihuPU0+Xz8iY3Vyc29yIjoiYW5jaG9yIiksXzwzLjU/bj0iYW5jaG9yIjpNPDMuNT9uPSJjdXJzb3IiOm49InNjcm9sbCIsZj1zZXRUaW1lb3V0KEUsNDUwKX11PXl9KSxlLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIixmdW5jdGlvbihlKXttPXQuJG1vdXNlSGFuZGxlci5pc01vdXNlUHJlc3NlZD0hMSxsJiZjbGVhckludGVydmFsKGwpLG49PSJ6b29tIj8obj0iIixjPTApOmY/KHQuc2VsZWN0aW9uLm1vdmVUb1Bvc2l0aW9uKGgpLGM9MCxiKCkpOm49PSJzY3JvbGwiPyh4KCksZS5wcmV2ZW50RGVmYXVsdCgpLHcoKSk6YigpLGNsZWFyVGltZW91dChmKSxmPW51bGx9KSxlLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsZnVuY3Rpb24oZSl7ZiYmKGNsZWFyVGltZW91dChmKSxmPW51bGwpO3ZhciBpPWUudG91Y2hlcztpZihpLmxlbmd0aD4xfHxuPT0iem9vbSIpcmV0dXJuO3ZhciB1PWlbMF0sbD1zLXUuY2xpZW50WCxjPW8tdS5jbGllbnRZO2lmKG49PSJ3YWl0Iil7aWYoIShsKmwrYypjPjQpKXJldHVybiBlLnByZXZlbnREZWZhdWx0KCk7bj0iY3Vyc29yIn1zPXUuY2xpZW50WCxvPXUuY2xpZW50WSxlLmNsaWVudFg9dS5jbGllbnRYLGUuY2xpZW50WT11LmNsaWVudFk7dmFyIGg9ZS50aW1lU3RhbXAscD1oLWE7YT1oO2lmKG49PSJzY3JvbGwiKXt2YXIgbT1uZXcgcihlLHQpO20uc3BlZWQ9MSxtLndoZWVsWD1sLG0ud2hlZWxZPWMsMTAqTWF0aC5hYnMobCk8TWF0aC5hYnMoYykmJihsPTApLDEwKk1hdGguYWJzKGMpPE1hdGguYWJzKGwpJiYoYz0wKSxwIT0wJiYoZD1sL3Asdj1jL3ApLHQuX2VtaXQoIm1vdXNld2hlZWwiLG0pLG0ucHJvcGFnYXRpb25TdG9wcGVkfHwoZD12PTApfWVsc2V7dmFyIGc9bmV3IHIoZSx0KSx5PWcuZ2V0RG9jdW1lbnRQb3NpdGlvbigpO249PSJjdXJzb3IiP3Quc2VsZWN0aW9uLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKHkpOm49PSJhbmNob3IiJiZ0LnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25BbmNob3IoeS5yb3cseS5jb2x1bW4pLHQucmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoeSksZS5wcmV2ZW50RGVmYXVsdCgpfX0pfX0pLGFjZS5kZWZpbmUoImFjZS9saWIvbmV0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9kb20iXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoIi4vZG9tIik7dC5nZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1uZXcgWE1MSHR0cFJlcXVlc3Q7bi5vcGVuKCJHRVQiLGUsITApLG4ub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7bi5yZWFkeVN0YXRlPT09NCYmdChuLnJlc3BvbnNlVGV4dCl9LG4uc2VuZChudWxsKX0sdC5sb2FkU2NyaXB0PWZ1bmN0aW9uKGUsdCl7dmFyIG49ci5nZXREb2N1bWVudEhlYWQoKSxpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2kuc3JjPWUsbi5hcHBlbmRDaGlsZChpKSxpLm9ubG9hZD1pLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbihlLG4pe2lmKG58fCFpLnJlYWR5U3RhdGV8fGkucmVhZHlTdGF0ZT09ImxvYWRlZCJ8fGkucmVhZHlTdGF0ZT09ImNvbXBsZXRlIilpPWkub25sb2FkPWkub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsbnx8dCgpfX0sdC5xdWFsaWZ5VVJMPWZ1bmN0aW9uKGUpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtyZXR1cm4gdC5ocmVmPWUsdC5ocmVmfX0pLGFjZS5kZWZpbmUoImFjZS9saWIvZXZlbnRfZW1pdHRlciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9e30saT1mdW5jdGlvbigpe3RoaXMucHJvcGFnYXRpb25TdG9wcGVkPSEwfSxzPWZ1bmN0aW9uKCl7dGhpcy5kZWZhdWx0UHJldmVudGVkPSEwfTtyLl9lbWl0PXIuX2Rpc3BhdGNoRXZlbnQ9ZnVuY3Rpb24oZSx0KXt0aGlzLl9ldmVudFJlZ2lzdHJ5fHwodGhpcy5fZXZlbnRSZWdpc3RyeT17fSksdGhpcy5fZGVmYXVsdEhhbmRsZXJzfHwodGhpcy5fZGVmYXVsdEhhbmRsZXJzPXt9KTt2YXIgbj10aGlzLl9ldmVudFJlZ2lzdHJ5W2VdfHxbXSxyPXRoaXMuX2RlZmF1bHRIYW5kbGVyc1tlXTtpZighbi5sZW5ndGgmJiFyKXJldHVybjtpZih0eXBlb2YgdCE9Im9iamVjdCJ8fCF0KXQ9e307dC50eXBlfHwodC50eXBlPWUpLHQuc3RvcFByb3BhZ2F0aW9ufHwodC5zdG9wUHJvcGFnYXRpb249aSksdC5wcmV2ZW50RGVmYXVsdHx8KHQucHJldmVudERlZmF1bHQ9cyksbj1uLnNsaWNlKCk7Zm9yKHZhciBvPTA7bzxuLmxlbmd0aDtvKyspe25bb10odCx0aGlzKTtpZih0LnByb3BhZ2F0aW9uU3RvcHBlZClicmVha31pZihyJiYhdC5kZWZhdWx0UHJldmVudGVkKXJldHVybiByKHQsdGhpcyl9LHIuX3NpZ25hbD1mdW5jdGlvbihlLHQpe3ZhciBuPSh0aGlzLl9ldmVudFJlZ2lzdHJ5fHx7fSlbZV07aWYoIW4pcmV0dXJuO249bi5zbGljZSgpO2Zvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKW5bcl0odCx0aGlzKX0sci5vbmNlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpczt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZSxmdW5jdGlvbiByKCl7bi5yZW1vdmVFdmVudExpc3RlbmVyKGUsciksdC5hcHBseShudWxsLGFyZ3VtZW50cyl9KTtpZighdClyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSl7dD1lfSl9LHIuc2V0RGVmYXVsdEhhbmRsZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9kZWZhdWx0SGFuZGxlcnM7bnx8KG49dGhpcy5fZGVmYXVsdEhhbmRsZXJzPXtfZGlzYWJsZWRfOnt9fSk7aWYobltlXSl7dmFyIHI9bltlXSxpPW4uX2Rpc2FibGVkX1tlXTtpfHwobi5fZGlzYWJsZWRfW2VdPWk9W10pLGkucHVzaChyKTt2YXIgcz1pLmluZGV4T2YodCk7cyE9LTEmJmkuc3BsaWNlKHMsMSl9bltlXT10fSxyLnJlbW92ZURlZmF1bHRIYW5kbGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fZGVmYXVsdEhhbmRsZXJzO2lmKCFuKXJldHVybjt2YXIgcj1uLl9kaXNhYmxlZF9bZV07aWYobltlXT09dClyJiZ0aGlzLnNldERlZmF1bHRIYW5kbGVyKGUsci5wb3AoKSk7ZWxzZSBpZihyKXt2YXIgaT1yLmluZGV4T2YodCk7aSE9LTEmJnIuc3BsaWNlKGksMSl9fSxyLm9uPXIuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbihlLHQsbil7dGhpcy5fZXZlbnRSZWdpc3RyeT10aGlzLl9ldmVudFJlZ2lzdHJ5fHx7fTt2YXIgcj10aGlzLl9ldmVudFJlZ2lzdHJ5W2VdO3JldHVybiByfHwocj10aGlzLl9ldmVudFJlZ2lzdHJ5W2VdPVtdKSxyLmluZGV4T2YodCk9PS0xJiZyW24/InVuc2hpZnQiOiJwdXNoIl0odCksdH0sci5vZmY9ci5yZW1vdmVMaXN0ZW5lcj1yLnJlbW92ZUV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oZSx0KXt0aGlzLl9ldmVudFJlZ2lzdHJ5PXRoaXMuX2V2ZW50UmVnaXN0cnl8fHt9O3ZhciBuPXRoaXMuX2V2ZW50UmVnaXN0cnlbZV07aWYoIW4pcmV0dXJuO3ZhciByPW4uaW5kZXhPZih0KTtyIT09LTEmJm4uc3BsaWNlKHIsMSl9LHIucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKGUpe3RoaXMuX2V2ZW50UmVnaXN0cnkmJih0aGlzLl9ldmVudFJlZ2lzdHJ5W2VdPVtdKX0sdC5FdmVudEVtaXR0ZXI9cn0pLGFjZS5kZWZpbmUoImFjZS9saWIvYXBwX2NvbmZpZyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIl0sZnVuY3Rpb24oZSx0LG4peyJubyB1c2Ugc3RyaWN0IjtmdW5jdGlvbiBvKGUpe3R5cGVvZiBjb25zb2xlIT0idW5kZWZpbmVkIiYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4uYXBwbHkoY29uc29sZSxhcmd1bWVudHMpfWZ1bmN0aW9uIHUoZSx0KXt2YXIgbj1uZXcgRXJyb3IoZSk7bi5kYXRhPXQsdHlwZW9mIGNvbnNvbGU9PSJvYmplY3QiJiZjb25zb2xlLmVycm9yJiZjb25zb2xlLmVycm9yKG4pLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyBufSl9dmFyIHI9ZSgiLi9vb3AiKSxpPWUoIi4vZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcixzPXtzZXRPcHRpb25zOmZ1bmN0aW9uKGUpe09iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24odCl7dGhpcy5zZXRPcHRpb24odCxlW3RdKX0sdGhpcyl9LGdldE9wdGlvbnM6ZnVuY3Rpb24oZSl7dmFyIHQ9e307aWYoIWUpe3ZhciBuPXRoaXMuJG9wdGlvbnM7ZT1PYmplY3Qua2V5cyhuKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIW5bZV0uaGlkZGVufSl9ZWxzZSBBcnJheS5pc0FycmF5KGUpfHwodD1lLGU9T2JqZWN0LmtleXModCkpO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24oZSl7dFtlXT10aGlzLmdldE9wdGlvbihlKX0sdGhpcyksdH0sc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7aWYodGhpc1siJCIrZV09PT10KXJldHVybjt2YXIgbj10aGlzLiRvcHRpb25zW2VdO2lmKCFuKXJldHVybiBvKCdtaXNzcGVsbGVkIG9wdGlvbiAiJytlKyciJyk7aWYobi5mb3J3YXJkVG8pcmV0dXJuIHRoaXNbbi5mb3J3YXJkVG9dJiZ0aGlzW24uZm9yd2FyZFRvXS5zZXRPcHRpb24oZSx0KTtuLmhhbmRsZXNTZXR8fCh0aGlzWyIkIitlXT10KSxuJiZuLnNldCYmbi5zZXQuY2FsbCh0aGlzLHQpfSxnZXRPcHRpb246ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy4kb3B0aW9uc1tlXTtyZXR1cm4gdD90LmZvcndhcmRUbz90aGlzW3QuZm9yd2FyZFRvXSYmdGhpc1t0LmZvcndhcmRUb10uZ2V0T3B0aW9uKGUpOnQmJnQuZ2V0P3QuZ2V0LmNhbGwodGhpcyk6dGhpc1siJCIrZV06bygnbWlzc3BlbGxlZCBvcHRpb24gIicrZSsnIicpfX0sYT1mdW5jdGlvbigpe3RoaXMuJGRlZmF1bHRPcHRpb25zPXt9fTsoZnVuY3Rpb24oKXtyLmltcGxlbWVudCh0aGlzLGkpLHRoaXMuZGVmaW5lT3B0aW9ucz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGUuJG9wdGlvbnN8fCh0aGlzLiRkZWZhdWx0T3B0aW9uc1t0XT1lLiRvcHRpb25zPXt9KSxPYmplY3Qua2V5cyhuKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciByPW5bdF07dHlwZW9mIHI9PSJzdHJpbmciJiYocj17Zm9yd2FyZFRvOnJ9KSxyLm5hbWV8fChyLm5hbWU9dCksZS4kb3B0aW9uc1tyLm5hbWVdPXIsImluaXRpYWxWYWx1ZSJpbiByJiYoZVsiJCIrci5uYW1lXT1yLmluaXRpYWxWYWx1ZSl9KSxyLmltcGxlbWVudChlLHMpLHRoaXN9LHRoaXMucmVzZXRPcHRpb25zPWZ1bmN0aW9uKGUpe09iamVjdC5rZXlzKGUuJG9wdGlvbnMpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49ZS4kb3B0aW9uc1t0XTsidmFsdWUiaW4gbiYmZS5zZXRPcHRpb24odCxuLnZhbHVlKX0pfSx0aGlzLnNldERlZmF1bHRWYWx1ZT1mdW5jdGlvbihlLHQsbil7aWYoIWUpe2ZvcihlIGluIHRoaXMuJGRlZmF1bHRPcHRpb25zKWlmKHRoaXMuJGRlZmF1bHRPcHRpb25zW2VdW3RdKWJyZWFrO2lmKCF0aGlzLiRkZWZhdWx0T3B0aW9uc1tlXVt0XSlyZXR1cm4hMX12YXIgcj10aGlzLiRkZWZhdWx0T3B0aW9uc1tlXXx8KHRoaXMuJGRlZmF1bHRPcHRpb25zW2VdPXt9KTtyW3RdJiYoci5mb3J3YXJkVG8/dGhpcy5zZXREZWZhdWx0VmFsdWUoci5mb3J3YXJkVG8sdCxuKTpyW3RdLnZhbHVlPW4pfSx0aGlzLnNldERlZmF1bHRWYWx1ZXM9ZnVuY3Rpb24oZSx0KXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3RoaXMuc2V0RGVmYXVsdFZhbHVlKGUsbix0W25dKX0sdGhpcyl9LHRoaXMud2Fybj1vLHRoaXMucmVwb3J0RXJyb3I9dX0pLmNhbGwoYS5wcm90b3R5cGUpLHQuQXBwQ29uZmlnPWF9KSxhY2UuZGVmaW5lKCJhY2UvY29uZmlnIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9sYW5nIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL25ldCIsImFjZS9saWIvYXBwX2NvbmZpZyJdLGZ1bmN0aW9uKGUsdCxuKXsibm8gdXNlIHN0cmljdCI7ZnVuY3Rpb24gbChyKXtpZighdXx8IXUuZG9jdW1lbnQpcmV0dXJuO2EucGFja2FnZWQ9cnx8ZS5wYWNrYWdlZHx8bi5wYWNrYWdlZHx8dS5kZWZpbmUmJmRlZmluZS5wYWNrYWdlZDt2YXIgaT17fSxzPSIiLG89ZG9jdW1lbnQuY3VycmVudFNjcmlwdHx8ZG9jdW1lbnQuX2N1cnJlbnRTY3JpcHQsZj1vJiZvLm93bmVyRG9jdW1lbnR8fGRvY3VtZW50LGw9Zi5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0Iik7Zm9yKHZhciBoPTA7aDxsLmxlbmd0aDtoKyspe3ZhciBwPWxbaF0sZD1wLnNyY3x8cC5nZXRBdHRyaWJ1dGUoInNyYyIpO2lmKCFkKWNvbnRpbnVlO3ZhciB2PXAuYXR0cmlidXRlcztmb3IodmFyIG09MCxnPXYubGVuZ3RoO208ZzttKyspe3ZhciB5PXZbbV07eS5uYW1lLmluZGV4T2YoImRhdGEtYWNlLSIpPT09MCYmKGlbYyh5Lm5hbWUucmVwbGFjZSgvXmRhdGEtYWNlLS8sIiIpKV09eS52YWx1ZSl9dmFyIGI9ZC5tYXRjaCgvXiguKilcL2FjZShcLVx3Kyk/XC5qcyhcP3wkKS8pO2ImJihzPWJbMV0pfXMmJihpLmJhc2U9aS5iYXNlfHxzLGkucGFja2FnZWQ9ITApLGkuYmFzZVBhdGg9aS5iYXNlLGkud29ya2VyUGF0aD1pLndvcmtlclBhdGh8fGkuYmFzZSxpLm1vZGVQYXRoPWkubW9kZVBhdGh8fGkuYmFzZSxpLnRoZW1lUGF0aD1pLnRoZW1lUGF0aHx8aS5iYXNlLGRlbGV0ZSBpLmJhc2U7Zm9yKHZhciB3IGluIGkpdHlwZW9mIGlbd10hPSJ1bmRlZmluZWQiJiZ0LnNldCh3LGlbd10pfWZ1bmN0aW9uIGMoZSl7cmV0dXJuIGUucmVwbGFjZSgvLSguKS9nLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQudG9VcHBlckNhc2UoKX0pfXZhciByPWUoIi4vbGliL2xhbmciKSxpPWUoIi4vbGliL29vcCIpLHM9ZSgiLi9saWIvbmV0Iiksbz1lKCIuL2xpYi9hcHBfY29uZmlnIikuQXBwQ29uZmlnO24uZXhwb3J0cz10PW5ldyBvO3ZhciB1PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN8fHR5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiZ3aW5kb3d9KCksYT17cGFja2FnZWQ6ITEsd29ya2VyUGF0aDpudWxsLG1vZGVQYXRoOm51bGwsdGhlbWVQYXRoOm51bGwsYmFzZVBhdGg6IiIsc3VmZml4OiIuanMiLCRtb2R1bGVVcmxzOnt9LGxvYWRXb3JrZXJGcm9tQmxvYjohMCxzaGFyZWRQb3B1cHM6ITF9O3QuZ2V0PWZ1bmN0aW9uKGUpe2lmKCFhLmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBjb25maWcga2V5OiAiK2UpO3JldHVybiBhW2VdfSx0LnNldD1mdW5jdGlvbihlLHQpe2lmKGEuaGFzT3duUHJvcGVydHkoZSkpYVtlXT10O2Vsc2UgaWYodGhpcy5zZXREZWZhdWx0VmFsdWUoIiIsZSx0KT09MCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gY29uZmlnIGtleTogIitlKX0sdC5hbGw9ZnVuY3Rpb24oKXtyZXR1cm4gci5jb3B5T2JqZWN0KGEpfSx0LiRtb2Rlcz17fSx0Lm1vZHVsZVVybD1mdW5jdGlvbihlLHQpe2lmKGEuJG1vZHVsZVVybHNbZV0pcmV0dXJuIGEuJG1vZHVsZVVybHNbZV07dmFyIG49ZS5zcGxpdCgiLyIpO3Q9dHx8bltuLmxlbmd0aC0yXXx8IiI7dmFyIHI9dD09InNuaXBwZXRzIj8iLyI6Ii0iLGk9bltuLmxlbmd0aC0xXTtpZih0PT0id29ya2VyIiYmcj09Ii0iKXt2YXIgcz1uZXcgUmVnRXhwKCJeIit0KyJbXFwtX118W1xcLV9dIit0KyIkIiwiZyIpO2k9aS5yZXBsYWNlKHMsIiIpfSghaXx8aT09dCkmJm4ubGVuZ3RoPjEmJihpPW5bbi5sZW5ndGgtMl0pO3ZhciBvPWFbdCsiUGF0aCJdO3JldHVybiBvPT1udWxsP289YS5iYXNlUGF0aDpyPT0iLyImJih0PXI9IiIpLG8mJm8uc2xpY2UoLTEpIT0iLyImJihvKz0iLyIpLG8rdCtyK2krdGhpcy5nZXQoInN1ZmZpeCIpfSx0LnNldE1vZHVsZVVybD1mdW5jdGlvbihlLHQpe3JldHVybiBhLiRtb2R1bGVVcmxzW2VdPXR9LHQuJGxvYWRpbmc9e30sdC5sb2FkTW9kdWxlPWZ1bmN0aW9uKG4scil7dmFyIGksbztBcnJheS5pc0FycmF5KG4pJiYobz1uWzBdLG49blsxXSk7dHJ5e2k9ZShuKX1jYXRjaCh1KXt9aWYoaSYmIXQuJGxvYWRpbmdbbl0pcmV0dXJuIHImJnIoaSk7dC4kbG9hZGluZ1tuXXx8KHQuJGxvYWRpbmdbbl09W10pLHQuJGxvYWRpbmdbbl0ucHVzaChyKTtpZih0LiRsb2FkaW5nW25dLmxlbmd0aD4xKXJldHVybjt2YXIgYT1mdW5jdGlvbigpe2UoW25dLGZ1bmN0aW9uKGUpe3QuX2VtaXQoImxvYWQubW9kdWxlIix7bmFtZTpuLG1vZHVsZTplfSk7dmFyIHI9dC4kbG9hZGluZ1tuXTt0LiRsb2FkaW5nW25dPW51bGwsci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QmJnQoZSl9KX0pfTtpZighdC5nZXQoInBhY2thZ2VkIikpcmV0dXJuIGEoKTtzLmxvYWRTY3JpcHQodC5tb2R1bGVVcmwobixvKSxhKSxmKCl9O3ZhciBmPWZ1bmN0aW9uKCl7IWEuYmFzZVBhdGgmJiFhLndvcmtlclBhdGgmJiFhLm1vZGVQYXRoJiYhYS50aGVtZVBhdGgmJiFPYmplY3Qua2V5cyhhLiRtb2R1bGVVcmxzKS5sZW5ndGgmJihjb25zb2xlLmVycm9yKCJVbmFibGUgdG8gaW5mZXIgcGF0aCB0byBhY2UgZnJvbSBzY3JpcHQgc3JjLCIsInVzZSBhY2UuY29uZmlnLnNldCgnYmFzZVBhdGgnLCAncGF0aCcpIHRvIGVuYWJsZSBkeW5hbWljIGxvYWRpbmcgb2YgbW9kZXMgYW5kIHRoZW1lcyIsIm9yIHdpdGggd2VicGFjayB1c2UgYWNlL3dlYnBhY2stcmVzb2x2ZXIiKSxmPWZ1bmN0aW9uKCl7fSl9O3QuaW5pdD1sLHQudmVyc2lvbj0iMS40LjYifSksYWNlLmRlZmluZSgiYWNlL21vdXNlL21vdXNlX2hhbmRsZXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2V2ZW50IiwiYWNlL2xpYi91c2VyYWdlbnQiLCJhY2UvbW91c2UvZGVmYXVsdF9oYW5kbGVycyIsImFjZS9tb3VzZS9kZWZhdWx0X2d1dHRlcl9oYW5kbGVyIiwiYWNlL21vdXNlL21vdXNlX2V2ZW50IiwiYWNlL21vdXNlL2RyYWdkcm9wX2hhbmRsZXIiLCJhY2UvbW91c2UvdG91Y2hfaGFuZGxlciIsImFjZS9jb25maWciXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoIi4uL2xpYi9ldmVudCIpLGk9ZSgiLi4vbGliL3VzZXJhZ2VudCIpLHM9ZSgiLi9kZWZhdWx0X2hhbmRsZXJzIikuRGVmYXVsdEhhbmRsZXJzLG89ZSgiLi9kZWZhdWx0X2d1dHRlcl9oYW5kbGVyIikuR3V0dGVySGFuZGxlcix1PWUoIi4vbW91c2VfZXZlbnQiKS5Nb3VzZUV2ZW50LGE9ZSgiLi9kcmFnZHJvcF9oYW5kbGVyIikuRHJhZ2Ryb3BIYW5kbGVyLGY9ZSgiLi90b3VjaF9oYW5kbGVyIikuYWRkVG91Y2hMaXN0ZW5lcnMsbD1lKCIuLi9jb25maWciKSxjPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy5lZGl0b3I9ZSxuZXcgcyh0aGlzKSxuZXcgbyh0aGlzKSxuZXcgYSh0aGlzKTt2YXIgbj1mdW5jdGlvbih0KXt2YXIgbj0hZG9jdW1lbnQuaGFzRm9jdXN8fCFkb2N1bWVudC5oYXNGb2N1cygpfHwhZS5pc0ZvY3VzZWQoKSYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09KGUudGV4dElucHV0JiZlLnRleHRJbnB1dC5nZXRFbGVtZW50KCkpO24mJndpbmRvdy5mb2N1cygpLGUuZm9jdXMoKX0sdT1lLnJlbmRlcmVyLmdldE1vdXNlRXZlbnRUYXJnZXQoKTtyLmFkZExpc3RlbmVyKHUsImNsaWNrIix0aGlzLm9uTW91c2VFdmVudC5iaW5kKHRoaXMsImNsaWNrIikpLHIuYWRkTGlzdGVuZXIodSwibW91c2Vtb3ZlIix0aGlzLm9uTW91c2VNb3ZlLmJpbmQodGhpcywibW91c2Vtb3ZlIikpLHIuYWRkTXVsdGlNb3VzZURvd25MaXN0ZW5lcihbdSxlLnJlbmRlcmVyLnNjcm9sbEJhclYmJmUucmVuZGVyZXIuc2Nyb2xsQmFyVi5pbm5lcixlLnJlbmRlcmVyLnNjcm9sbEJhckgmJmUucmVuZGVyZXIuc2Nyb2xsQmFySC5pbm5lcixlLnRleHRJbnB1dCYmZS50ZXh0SW5wdXQuZ2V0RWxlbWVudCgpXS5maWx0ZXIoQm9vbGVhbiksWzQwMCwzMDAsMjUwXSx0aGlzLCJvbk1vdXNlRXZlbnQiKSxyLmFkZE1vdXNlV2hlZWxMaXN0ZW5lcihlLmNvbnRhaW5lcix0aGlzLm9uTW91c2VXaGVlbC5iaW5kKHRoaXMsIm1vdXNld2hlZWwiKSksZihlLmNvbnRhaW5lcixlKTt2YXIgbD1lLnJlbmRlcmVyLiRndXR0ZXI7ci5hZGRMaXN0ZW5lcihsLCJtb3VzZWRvd24iLHRoaXMub25Nb3VzZUV2ZW50LmJpbmQodGhpcywiZ3V0dGVybW91c2Vkb3duIikpLHIuYWRkTGlzdGVuZXIobCwiY2xpY2siLHRoaXMub25Nb3VzZUV2ZW50LmJpbmQodGhpcywiZ3V0dGVyY2xpY2siKSksci5hZGRMaXN0ZW5lcihsLCJkYmxjbGljayIsdGhpcy5vbk1vdXNlRXZlbnQuYmluZCh0aGlzLCJndXR0ZXJkYmxjbGljayIpKSxyLmFkZExpc3RlbmVyKGwsIm1vdXNlbW92ZSIsdGhpcy5vbk1vdXNlRXZlbnQuYmluZCh0aGlzLCJndXR0ZXJtb3VzZW1vdmUiKSksci5hZGRMaXN0ZW5lcih1LCJtb3VzZWRvd24iLG4pLHIuYWRkTGlzdGVuZXIobCwibW91c2Vkb3duIixuKSxpLmlzSUUmJmUucmVuZGVyZXIuc2Nyb2xsQmFyViYmKHIuYWRkTGlzdGVuZXIoZS5yZW5kZXJlci5zY3JvbGxCYXJWLmVsZW1lbnQsIm1vdXNlZG93biIsbiksci5hZGRMaXN0ZW5lcihlLnJlbmRlcmVyLnNjcm9sbEJhckguZWxlbWVudCwibW91c2Vkb3duIixuKSksZS5vbigibW91c2Vtb3ZlIixmdW5jdGlvbihuKXtpZih0LnN0YXRlfHx0LiRkcmFnRGVsYXl8fCF0LiRkcmFnRW5hYmxlZClyZXR1cm47dmFyIHI9ZS5yZW5kZXJlci5zY3JlZW5Ub1RleHRDb29yZGluYXRlcyhuLngsbi55KSxpPWUuc2Vzc2lvbi5zZWxlY3Rpb24uZ2V0UmFuZ2UoKSxzPWUucmVuZGVyZXI7IWkuaXNFbXB0eSgpJiZpLmluc2lkZVN0YXJ0KHIucm93LHIuY29sdW1uKT9zLnNldEN1cnNvclN0eWxlKCJkZWZhdWx0Iik6cy5zZXRDdXJzb3JTdHlsZSgiIil9KX07KGZ1bmN0aW9uKCl7dGhpcy5vbk1vdXNlRXZlbnQ9ZnVuY3Rpb24oZSx0KXt0aGlzLmVkaXRvci5fZW1pdChlLG5ldyB1KHQsdGhpcy5lZGl0b3IpKX0sdGhpcy5vbk1vdXNlTW92ZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZWRpdG9yLl9ldmVudFJlZ2lzdHJ5JiZ0aGlzLmVkaXRvci5fZXZlbnRSZWdpc3RyeS5tb3VzZW1vdmU7aWYoIW58fCFuLmxlbmd0aClyZXR1cm47dGhpcy5lZGl0b3IuX2VtaXQoZSxuZXcgdSh0LHRoaXMuZWRpdG9yKSl9LHRoaXMub25Nb3VzZVdoZWVsPWZ1bmN0aW9uKGUsdCl7dmFyIG49bmV3IHUodCx0aGlzLmVkaXRvcik7bi5zcGVlZD10aGlzLiRzY3JvbGxTcGVlZCoyLG4ud2hlZWxYPXQud2hlZWxYLG4ud2hlZWxZPXQud2hlZWxZLHRoaXMuZWRpdG9yLl9lbWl0KGUsbil9LHRoaXMuc2V0U3RhdGU9ZnVuY3Rpb24oZSl7dGhpcy5zdGF0ZT1lfSx0aGlzLmNhcHR1cmVNb3VzZT1mdW5jdGlvbihlLHQpe3RoaXMueD1lLngsdGhpcy55PWUueSx0aGlzLmlzTW91c2VQcmVzc2VkPSEwO3ZhciBuPXRoaXMuZWRpdG9yLHM9dGhpcy5lZGl0b3IucmVuZGVyZXI7cy4kaXNNb3VzZVByZXNzZWQ9ITA7dmFyIG89dGhpcyxhPWZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybjtpZihpLmlzV2ViS2l0JiYhZS53aGljaCYmby5yZWxlYXNlTW91c2UpcmV0dXJuIG8ucmVsZWFzZU1vdXNlKCk7by54PWUuY2xpZW50WCxvLnk9ZS5jbGllbnRZLHQmJnQoZSksby5tb3VzZUV2ZW50PW5ldyB1KGUsby5lZGl0b3IpLG8uJG1vdXNlTW92ZWQ9ITB9LGY9ZnVuY3Rpb24oZSl7bi5vZmYoImJlZm9yZUVuZE9wZXJhdGlvbiIsYyksY2xlYXJJbnRlcnZhbChoKSxsKCksb1tvLnN0YXRlKyJFbmQiXSYmb1tvLnN0YXRlKyJFbmQiXShlKSxvLnN0YXRlPSIiLG8uaXNNb3VzZVByZXNzZWQ9cy4kaXNNb3VzZVByZXNzZWQ9ITEscy4ka2VlcFRleHRBcmVhQXRDdXJzb3ImJnMuJG1vdmVUZXh0QXJlYVRvQ3Vyc29yKCksby4kb25DYXB0dXJlTW91c2VNb3ZlPW8ucmVsZWFzZU1vdXNlPW51bGwsZSYmby5vbk1vdXNlRXZlbnQoIm1vdXNldXAiLGUpLG4uZW5kT3BlcmF0aW9uKCl9LGw9ZnVuY3Rpb24oKXtvW28uc3RhdGVdJiZvW28uc3RhdGVdKCksby4kbW91c2VNb3ZlZD0hMX07aWYoaS5pc09sZElFJiZlLmRvbUV2ZW50LnR5cGU9PSJkYmxjbGljayIpcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtmKGUpfSk7dmFyIGM9ZnVuY3Rpb24oZSl7aWYoIW8ucmVsZWFzZU1vdXNlKXJldHVybjtuLmN1ck9wLmNvbW1hbmQubmFtZSYmbi5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkJiYob1tvLnN0YXRlKyJFbmQiXSYmb1tvLnN0YXRlKyJFbmQiXSgpLG8uc3RhdGU9IiIsby5yZWxlYXNlTW91c2UoKSl9O24ub24oImJlZm9yZUVuZE9wZXJhdGlvbiIsYyksbi5zdGFydE9wZXJhdGlvbih7Y29tbWFuZDp7bmFtZToibW91c2UifX0pLG8uJG9uQ2FwdHVyZU1vdXNlTW92ZT1hLG8ucmVsZWFzZU1vdXNlPXIuY2FwdHVyZSh0aGlzLmVkaXRvci5jb250YWluZXIsYSxmKTt2YXIgaD1zZXRJbnRlcnZhbChsLDIwKX0sdGhpcy5yZWxlYXNlTW91c2U9bnVsbCx0aGlzLmNhbmNlbENvbnRleHRNZW51PWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24odCl7aWYodCYmdC5kb21FdmVudCYmdC5kb21FdmVudC50eXBlIT0iY29udGV4dG1lbnUiKXJldHVybjt0aGlzLmVkaXRvci5vZmYoIm5hdGl2ZWNvbnRleHRtZW51IixlKSx0JiZ0LmRvbUV2ZW50JiZyLnN0b3BFdmVudCh0LmRvbUV2ZW50KX0uYmluZCh0aGlzKTtzZXRUaW1lb3V0KGUsMTApLHRoaXMuZWRpdG9yLm9uKCJuYXRpdmVjb250ZXh0bWVudSIsZSl9fSkuY2FsbChjLnByb3RvdHlwZSksbC5kZWZpbmVPcHRpb25zKGMucHJvdG90eXBlLCJtb3VzZUhhbmRsZXIiLHtzY3JvbGxTcGVlZDp7aW5pdGlhbFZhbHVlOjJ9LGRyYWdEZWxheTp7aW5pdGlhbFZhbHVlOmkuaXNNYWM/MTUwOjB9LGRyYWdFbmFibGVkOntpbml0aWFsVmFsdWU6ITB9LGZvY3VzVGltZW91dDp7aW5pdGlhbFZhbHVlOjB9LHRvb2x0aXBGb2xsb3dzTW91c2U6e2luaXRpYWxWYWx1ZTohMH19KSx0Lk1vdXNlSGFuZGxlcj1jfSksYWNlLmRlZmluZSgiYWNlL21vdXNlL2ZvbGRfaGFuZGxlciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvZG9tIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBpKGUpe2Uub24oImNsaWNrIixmdW5jdGlvbih0KXt2YXIgbj10LmdldERvY3VtZW50UG9zaXRpb24oKSxpPWUuc2Vzc2lvbixzPWkuZ2V0Rm9sZEF0KG4ucm93LG4uY29sdW1uLDEpO3MmJih0LmdldEFjY2VsS2V5KCk/aS5yZW1vdmVGb2xkKHMpOmkuZXhwYW5kRm9sZChzKSx0LnN0b3AoKSk7dmFyIG89dC5kb21FdmVudCYmdC5kb21FdmVudC50YXJnZXQ7byYmci5oYXNDc3NDbGFzcyhvLCJhY2VfaW5saW5lX2J1dHRvbiIpJiZyLmhhc0Nzc0NsYXNzKG8sImFjZV90b2dnbGVfd3JhcCIpJiYoaS5zZXRPcHRpb24oIndyYXAiLCFpLmdldFVzZVdyYXBNb2RlKCkpLGUucmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoKSl9KSxlLm9uKCJndXR0ZXJjbGljayIsZnVuY3Rpb24odCl7dmFyIG49ZS5yZW5kZXJlci4kZ3V0dGVyTGF5ZXIuZ2V0UmVnaW9uKHQpO2lmKG49PSJmb2xkV2lkZ2V0cyIpe3ZhciByPXQuZ2V0RG9jdW1lbnRQb3NpdGlvbigpLnJvdyxpPWUuc2Vzc2lvbjtpLmZvbGRXaWRnZXRzJiZpLmZvbGRXaWRnZXRzW3JdJiZlLnNlc3Npb24ub25Gb2xkV2lkZ2V0Q2xpY2socix0KSxlLmlzRm9jdXNlZCgpfHxlLmZvY3VzKCksdC5zdG9wKCl9fSksZS5vbigiZ3V0dGVyZGJsY2xpY2siLGZ1bmN0aW9uKHQpe3ZhciBuPWUucmVuZGVyZXIuJGd1dHRlckxheWVyLmdldFJlZ2lvbih0KTtpZihuPT0iZm9sZFdpZGdldHMiKXt2YXIgcj10LmdldERvY3VtZW50UG9zaXRpb24oKS5yb3csaT1lLnNlc3Npb24scz1pLmdldFBhcmVudEZvbGRSYW5nZURhdGEociwhMCksbz1zLnJhbmdlfHxzLmZpcnN0UmFuZ2U7aWYobyl7cj1vLnN0YXJ0LnJvdzt2YXIgdT1pLmdldEZvbGRBdChyLGkuZ2V0TGluZShyKS5sZW5ndGgsMSk7dT9pLnJlbW92ZUZvbGQodSk6KGkuYWRkRm9sZCgiLi4uIixvKSxlLnJlbmRlcmVyLnNjcm9sbEN1cnNvckludG9WaWV3KHtyb3c6by5zdGFydC5yb3csY29sdW1uOjB9KSl9dC5zdG9wKCl9fSl9dmFyIHI9ZSgiLi4vbGliL2RvbSIpO3QuRm9sZEhhbmRsZXI9aX0pLGFjZS5kZWZpbmUoImFjZS9rZXlib2FyZC9rZXliaW5kaW5nIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9rZXlzIiwiYWNlL2xpYi9ldmVudCJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgiLi4vbGliL2tleXMiKSxpPWUoIi4uL2xpYi9ldmVudCIpLHM9ZnVuY3Rpb24oZSl7dGhpcy4kZWRpdG9yPWUsdGhpcy4kZGF0YT17ZWRpdG9yOmV9LHRoaXMuJGhhbmRsZXJzPVtdLHRoaXMuc2V0RGVmYXVsdEhhbmRsZXIoZS5jb21tYW5kcyl9OyhmdW5jdGlvbigpe3RoaXMuc2V0RGVmYXVsdEhhbmRsZXI9ZnVuY3Rpb24oZSl7dGhpcy5yZW1vdmVLZXlib2FyZEhhbmRsZXIodGhpcy4kZGVmYXVsdEhhbmRsZXIpLHRoaXMuJGRlZmF1bHRIYW5kbGVyPWUsdGhpcy5hZGRLZXlib2FyZEhhbmRsZXIoZSwwKX0sdGhpcy5zZXRLZXlib2FyZEhhbmRsZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy4kaGFuZGxlcnM7aWYodFt0Lmxlbmd0aC0xXT09ZSlyZXR1cm47d2hpbGUodFt0Lmxlbmd0aC0xXSYmdFt0Lmxlbmd0aC0xXSE9dGhpcy4kZGVmYXVsdEhhbmRsZXIpdGhpcy5yZW1vdmVLZXlib2FyZEhhbmRsZXIodFt0Lmxlbmd0aC0xXSk7dGhpcy5hZGRLZXlib2FyZEhhbmRsZXIoZSwxKX0sdGhpcy5hZGRLZXlib2FyZEhhbmRsZXI9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm47dHlwZW9mIGU9PSJmdW5jdGlvbiImJiFlLmhhbmRsZUtleWJvYXJkJiYoZS5oYW5kbGVLZXlib2FyZD1lKTt2YXIgbj10aGlzLiRoYW5kbGVycy5pbmRleE9mKGUpO24hPS0xJiZ0aGlzLiRoYW5kbGVycy5zcGxpY2UobiwxKSx0PT11bmRlZmluZWQ/dGhpcy4kaGFuZGxlcnMucHVzaChlKTp0aGlzLiRoYW5kbGVycy5zcGxpY2UodCwwLGUpLG49PS0xJiZlLmF0dGFjaCYmZS5hdHRhY2godGhpcy4kZWRpdG9yKX0sdGhpcy5yZW1vdmVLZXlib2FyZEhhbmRsZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy4kaGFuZGxlcnMuaW5kZXhPZihlKTtyZXR1cm4gdD09LTE/ITE6KHRoaXMuJGhhbmRsZXJzLnNwbGljZSh0LDEpLGUuZGV0YWNoJiZlLmRldGFjaCh0aGlzLiRlZGl0b3IpLCEwKX0sdGhpcy5nZXRLZXlib2FyZEhhbmRsZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kaGFuZGxlcnNbdGhpcy4kaGFuZGxlcnMubGVuZ3RoLTFdfSx0aGlzLmdldFN0YXR1c1RleHQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLiRkYXRhLHQ9ZS5lZGl0b3I7cmV0dXJuIHRoaXMuJGhhbmRsZXJzLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRTdGF0dXNUZXh0JiZuLmdldFN0YXR1c1RleHQodCxlKXx8IiJ9KS5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpfSx0aGlzLiRjYWxsS2V5Ym9hcmRIYW5kbGVycz1mdW5jdGlvbihlLHQsbixyKXt2YXIgcyxvPSExLHU9dGhpcy4kZWRpdG9yLmNvbW1hbmRzO2Zvcih2YXIgYT10aGlzLiRoYW5kbGVycy5sZW5ndGg7YS0tOyl7cz10aGlzLiRoYW5kbGVyc1thXS5oYW5kbGVLZXlib2FyZCh0aGlzLiRkYXRhLGUsdCxuLHIpO2lmKCFzfHwhcy5jb21tYW5kKWNvbnRpbnVlO3MuY29tbWFuZD09Im51bGwiP289ITA6bz11LmV4ZWMocy5jb21tYW5kLHRoaXMuJGVkaXRvcixzLmFyZ3MsciksbyYmciYmZSE9LTEmJnMucGFzc0V2ZW50IT0xJiZzLmNvbW1hbmQucGFzc0V2ZW50IT0xJiZpLnN0b3BFdmVudChyKTtpZihvKWJyZWFrfXJldHVybiFvJiZlPT0tMSYmKHM9e2NvbW1hbmQ6Imluc2VydHN0cmluZyJ9LG89dS5leGVjKCJpbnNlcnRzdHJpbmciLHRoaXMuJGVkaXRvcix0KSksbyYmdGhpcy4kZWRpdG9yLl9zaWduYWwmJnRoaXMuJGVkaXRvci5fc2lnbmFsKCJrZXlib2FyZEFjdGl2aXR5IixzKSxvfSx0aGlzLm9uQ29tbWFuZEtleT1mdW5jdGlvbihlLHQsbil7dmFyIGk9ci5rZXlDb2RlVG9TdHJpbmcobik7cmV0dXJuIHRoaXMuJGNhbGxLZXlib2FyZEhhbmRsZXJzKHQsaSxuLGUpfSx0aGlzLm9uVGV4dElucHV0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLiRjYWxsS2V5Ym9hcmRIYW5kbGVycygtMSxlKX19KS5jYWxsKHMucHJvdG90eXBlKSx0LktleUJpbmRpbmc9c30pLGFjZS5kZWZpbmUoImFjZS9saWIvYmlkaXV0aWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEYoZSx0LG4scil7dmFyIGk9cz9kOnAsYz1udWxsLGg9bnVsbCx2PW51bGwsbT0wLGc9bnVsbCx5PW51bGwsYj0tMSx3PW51bGwsRT1udWxsLFQ9W107aWYoIXIpZm9yKHc9MCxyPVtdO3c8bjt3Kyspclt3XT1SKGVbd10pO289cyx1PSExLGE9ITEsZj0hMSxsPSExO2ZvcihFPTA7RTxuO0UrKyl7Yz1tLFRbRV09aD1xKGUscixULEUpLG09aVtjXVtoXSxnPW0mMjQwLG0mPTE1LHRbRV09dj1pW21dWzVdO2lmKGc+MClpZihnPT0xNil7Zm9yKHc9Yjt3PEU7dysrKXRbd109MTtiPS0xfWVsc2UgYj0tMTt5PWlbbV1bNl07aWYoeSliPT0tMSYmKGI9RSk7ZWxzZSBpZihiPi0xKXtmb3Iodz1iO3c8RTt3KyspdFt3XT12O2I9LTF9cltFXT09UyYmKHRbRV09MCksb3w9dn1pZihsKWZvcih3PTA7dzxuO3crKylpZihyW3ddPT14KXt0W3ddPXM7Zm9yKHZhciBDPXctMTtDPj0wO0MtLSl7aWYocltDXSE9TilicmVhazt0W0NdPXN9fX1mdW5jdGlvbiBJKGUsdCxuKXtpZihvPGUpcmV0dXJuO2lmKGU9PTEmJnM9PW0mJiFmKXtuLnJldmVyc2UoKTtyZXR1cm59dmFyIHI9bi5sZW5ndGgsaT0wLHUsYSxsLGM7d2hpbGUoaTxyKXtpZih0W2ldPj1lKXt1PWkrMTt3aGlsZSh1PHImJnRbdV0+PWUpdSsrO2ZvcihhPWksbD11LTE7YTxsO2ErKyxsLS0pYz1uW2FdLG5bYV09bltsXSxuW2xdPWM7aT11fWkrK319ZnVuY3Rpb24gcShlLHQsbixyKXt2YXIgaT10W3JdLG8sYyxoLHA7c3dpdGNoKGkpe2Nhc2UgZzpjYXNlIHk6dT0hMTtjYXNlIEU6Y2FzZSB3OnJldHVybiBpO2Nhc2UgYjpyZXR1cm4gdT93OmI7Y2FzZSBUOnJldHVybiB1PSEwLGE9ITAseTtjYXNlIE46cmV0dXJuIEU7Y2FzZSBDOmlmKHI8MXx8cisxPj10Lmxlbmd0aHx8KG89bltyLTFdKSE9YiYmbyE9d3x8KGM9dFtyKzFdKSE9YiYmYyE9dylyZXR1cm4gRTtyZXR1cm4gdSYmKGM9dyksYz09bz9jOkU7Y2FzZSBrOm89cj4wP25bci0xXTpTO2lmKG89PWImJnIrMTx0Lmxlbmd0aCYmdFtyKzFdPT1iKXJldHVybiBiO3JldHVybiBFO2Nhc2UgTDppZihyPjAmJm5bci0xXT09YilyZXR1cm4gYjtpZih1KXJldHVybiBFO3A9cisxLGg9dC5sZW5ndGg7d2hpbGUocDxoJiZ0W3BdPT1MKXArKztpZihwPGgmJnRbcF09PWIpcmV0dXJuIGI7cmV0dXJuIEU7Y2FzZSBBOmg9dC5sZW5ndGgscD1yKzE7d2hpbGUocDxoJiZ0W3BdPT1BKXArKztpZihwPGgpe3ZhciBkPWVbcl0sdj1kPj0xNDI1JiZkPD0yMzAzfHxkPT02NDI4NjtvPXRbcF07aWYodiYmKG89PXl8fG89PVQpKXJldHVybiB5fWlmKHI8MXx8KG89dFtyLTFdKT09UylyZXR1cm4gRTtyZXR1cm4gbltyLTFdO2Nhc2UgUzpyZXR1cm4gdT0hMSxmPSEwLHM7Y2FzZSB4OnJldHVybiBsPSEwLEU7Y2FzZSBPOmNhc2UgTTpjYXNlIEQ6Y2FzZSBQOmNhc2UgXzp1PSExO2Nhc2UgSDpyZXR1cm4gRX19ZnVuY3Rpb24gUihlKXt2YXIgdD1lLmNoYXJDb2RlQXQoMCksbj10Pj44O3JldHVybiBuPT0wP3Q+MTkxP2c6Qlt0XTpuPT01Py9bXHUwNTkxLVx1MDVmNF0vLnRlc3QoZSk/eTpnOm49PTY/L1tcdTA2MTAtXHUwNjFhXHUwNjRiLVx1MDY1Zlx1MDZkNi1cdTA2ZTRcdTA2ZTctXHUwNmVkXS8udGVzdChlKT9BOi9bXHUwNjYwLVx1MDY2OVx1MDY2Yi1cdTA2NmNdLy50ZXN0KGUpP3c6dD09MTY0Mj9MOi9bXHUwNmYwLVx1MDZmOV0vLnRlc3QoZSk/YjpUOm49PTMyJiZ0PD04Mjg3P2pbdCYyNTVdOm49PTI1ND90Pj02NTEzNj9UOkU6RX1mdW5jdGlvbiBVKGUpe3JldHVybiBlPj0iXHUwNjRiIiYmZTw9Ilx1MDY1NSJ9dmFyIHI9WyJcdTA2MjEiLCJcdTA2NDEiXSxpPVsiXHUwNjNhIiwiXHUwNjRhIl0scz0wLG89MCx1PSExLGE9ITEsZj0hMSxsPSExLGM9ITEsaD0hMSxwPVtbMCwzLDAsMSwwLDAsMF0sWzAsMywwLDEsMiwyLDBdLFswLDMsMCwxNywyLDAsMV0sWzAsMyw1LDUsNCwxLDBdLFswLDMsMjEsMjEsNCwwLDFdLFswLDMsNSw1LDQsMiwwXV0sZD1bWzIsMCwxLDEsMCwxLDBdLFsyLDAsMSwxLDAsMiwwXSxbMiwwLDIsMSwzLDIsMF0sWzIsMCwyLDMzLDMsMSwxXV0sdj0wLG09MSxnPTAseT0xLGI9Mix3PTMsRT00LFM9NSx4PTYsVD03LE49OCxDPTksaz0xMCxMPTExLEE9MTIsTz0xMyxNPTE0LF89MTUsRD0xNixQPTE3LEg9MTgsQj1bSCxILEgsSCxILEgsSCxILEgseCxTLHgsTixTLEgsSCxILEgsSCxILEgsSCxILEgsSCxILEgsSCxTLFMsUyx4LE4sRSxFLEwsTCxMLEUsRSxFLEUsRSxrLEMsayxDLEMsYixiLGIsYixiLGIsYixiLGIsYixDLEUsRSxFLEUsRSxFLGcsZyxnLGcsZyxnLGcsZyxnLGcsZyxnLGcsZyxnLGcsZyxnLGcsZyxnLGcsZyxnLGcsZyxFLEUsRSxFLEUsRSxnLGcsZyxnLGcsZyxnLGcsZyxnLGcsZyxnLGcsZyxnLGcsZyxnLGcsZyxnLGcsZyxnLGcsRSxFLEUsRSxILEgsSCxILEgsSCxTLEgsSCxILEgsSCxILEgsSCxILEgsSCxILEgsSCxILEgsSCxILEgsSCxILEgsSCxILEgsSCxDLEUsTCxMLEwsTCxFLEUsRSxFLGcsRSxFLEgsRSxFLEwsTCxiLGIsRSxnLEUsRSxFLGIsZyxFLEUsRSxFLEVdLGo9W04sTixOLE4sTixOLE4sTixOLE4sTixILEgsSCxnLHksRSxFLEUsRSxFLEUsRSxFLEUsRSxFLEUsRSxFLEUsRSxFLEUsRSxFLEUsRSxFLEUsTixTLE8sTSxfLEQsUCxDLEwsTCxMLEwsTCxFLEUsRSxFLEUsRSxFLEUsRSxFLEUsRSxFLEUsRSxDLEUsRSxFLEUsRSxFLEUsRSxFLEUsRSxFLEUsRSxFLEUsRSxFLEUsRSxFLEUsRSxFLEUsRSxOXTt0Lkw9Zyx0LlI9eSx0LkVOPWIsdC5PTl9SPTMsdC5BTj00LHQuUl9IPTUsdC5CPTYsdC5STEU9Nyx0LkRPVD0iXHUwMGI3Iix0LmRvQmlkaVJlb3JkZXI9ZnVuY3Rpb24oZSxuLHIpe2lmKGUubGVuZ3RoPDIpcmV0dXJue307dmFyIGk9ZS5zcGxpdCgiIiksbz1uZXcgQXJyYXkoaS5sZW5ndGgpLHU9bmV3IEFycmF5KGkubGVuZ3RoKSxhPVtdO3M9cj9tOnYsRihpLGEsaS5sZW5ndGgsbik7Zm9yKHZhciBmPTA7ZjxvLmxlbmd0aDtvW2ZdPWYsZisrKTtJKDIsYSxvKSxJKDEsYSxvKTtmb3IodmFyIGY9MDtmPG8ubGVuZ3RoLTE7ZisrKW5bZl09PT13P2FbZl09dC5BTjphW2ZdPT09eSYmKG5bZl0+VCYmbltmXTxPfHxuW2ZdPT09RXx8bltmXT09PUgpP2FbZl09dC5PTl9SOmY+MCYmaVtmLTFdPT09Ilx1MDY0NCImJi9cdTA2MjJ8XHUwNjIzfFx1MDYyNXxcdTA2MjcvLnRlc3QoaVtmXSkmJihhW2YtMV09YVtmXT10LlJfSCxmKyspO2lbaS5sZW5ndGgtMV09PT10LkRPVCYmKGFbaS5sZW5ndGgtMV09dC5CKSxpWzBdPT09Ilx1MjAyYiImJihhWzBdPXQuUkxFKTtmb3IodmFyIGY9MDtmPG8ubGVuZ3RoO2YrKyl1W2ZdPWFbb1tmXV07cmV0dXJue2xvZ2ljYWxGcm9tVmlzdWFsOm8sYmlkaUxldmVsczp1fX0sdC5oYXNCaWRpQ2hhcmFjdGVycz1mdW5jdGlvbihlLHQpe3ZhciBuPSExO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXRbcl09UihlLmNoYXJBdChyKSksIW4mJih0W3JdPT15fHx0W3JdPT1UfHx0W3JdPT13KSYmKG49ITApO3JldHVybiBufSx0LmdldFZpc3VhbEZyb21Mb2dpY2FsSWR4PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjx0LmxvZ2ljYWxGcm9tVmlzdWFsLmxlbmd0aDtuKyspaWYodC5sb2dpY2FsRnJvbVZpc3VhbFtuXT09ZSlyZXR1cm4gbjtyZXR1cm4gMH19KSxhY2UuZGVmaW5lKCJhY2UvYmlkaWhhbmRsZXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2JpZGl1dGlsIiwiYWNlL2xpYi9sYW5nIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuL2xpYi9iaWRpdXRpbCIpLGk9ZSgiLi9saWIvbGFuZyIpLHM9L1tcdTA1OTAtXHUwNWY0XHUwNjAwLVx1MDZmZlx1MDcwMC1cdTA4YWNcdTIwMkJdLyxvPWZ1bmN0aW9uKGUpe3RoaXMuc2Vzc2lvbj1lLHRoaXMuYmlkaU1hcD17fSx0aGlzLmN1cnJlbnRSb3c9bnVsbCx0aGlzLmJpZGlVdGlsPXIsdGhpcy5jaGFyV2lkdGhzPVtdLHRoaXMuRU9MPSJcdTAwYWMiLHRoaXMuc2hvd0ludmlzaWJsZXM9ITAsdGhpcy5pc1J0bERpcj0hMSx0aGlzLiRpc1J0bD0hMSx0aGlzLmxpbmU9IiIsdGhpcy53cmFwSW5kZW50PTAsdGhpcy5FT0Y9Ilx1MDBiNiIsdGhpcy5STEU9Ilx1MjAyYiIsdGhpcy5jb250ZW50V2lkdGg9MCx0aGlzLmZvbnRNZXRyaWNzPW51bGwsdGhpcy5ydGxMaW5lT2Zmc2V0PTAsdGhpcy53cmFwT2Zmc2V0PTAsdGhpcy5pc01vdmVMZWZ0T3BlcmF0aW9uPSExLHRoaXMuc2VlbkJpZGk9cy50ZXN0KGUuZ2V0VmFsdWUoKSl9OyhmdW5jdGlvbigpe3RoaXMuaXNCaWRpUm93PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5zZWVuQmlkaT8oZSE9PXRoaXMuY3VycmVudFJvdyYmKHRoaXMuY3VycmVudFJvdz1lLHRoaXMudXBkYXRlUm93TGluZSh0LG4pLHRoaXMudXBkYXRlQmlkaU1hcCgpKSx0aGlzLmJpZGlNYXAuYmlkaUxldmVscyk6ITF9LHRoaXMub25DaGFuZ2U9ZnVuY3Rpb24oZSl7dGhpcy5zZWVuQmlkaT90aGlzLmN1cnJlbnRSb3c9bnVsbDplLmFjdGlvbj09Imluc2VydCImJnMudGVzdChlLmxpbmVzLmpvaW4oIlxuIikpJiYodGhpcy5zZWVuQmlkaT0hMCx0aGlzLmN1cnJlbnRSb3c9bnVsbCl9LHRoaXMuZ2V0RG9jdW1lbnRSb3c9ZnVuY3Rpb24oKXt2YXIgZT0wLHQ9dGhpcy5zZXNzaW9uLiRzY3JlZW5Sb3dDYWNoZTtpZih0Lmxlbmd0aCl7dmFyIG49dGhpcy5zZXNzaW9uLiRnZXRSb3dDYWNoZUluZGV4KHQsdGhpcy5jdXJyZW50Um93KTtuPj0wJiYoZT10aGlzLnNlc3Npb24uJGRvY1Jvd0NhY2hlW25dKX1yZXR1cm4gZX0sdGhpcy5nZXRTcGxpdEluZGV4PWZ1bmN0aW9uKCl7dmFyIGU9MCx0PXRoaXMuc2Vzc2lvbi4kc2NyZWVuUm93Q2FjaGU7aWYodC5sZW5ndGgpe3ZhciBuLHI9dGhpcy5zZXNzaW9uLiRnZXRSb3dDYWNoZUluZGV4KHQsdGhpcy5jdXJyZW50Um93KTt3aGlsZSh0aGlzLmN1cnJlbnRSb3ctZT4wKXtuPXRoaXMuc2Vzc2lvbi4kZ2V0Um93Q2FjaGVJbmRleCh0LHRoaXMuY3VycmVudFJvdy1lLTEpO2lmKG4hPT1yKWJyZWFrO3I9bixlKyt9fWVsc2UgZT10aGlzLmN1cnJlbnRSb3c7cmV0dXJuIGV9LHRoaXMudXBkYXRlUm93TGluZT1mdW5jdGlvbihlLHQpe2U9PT11bmRlZmluZWQmJihlPXRoaXMuZ2V0RG9jdW1lbnRSb3coKSk7dmFyIG49ZT09PXRoaXMuc2Vzc2lvbi5nZXRMZW5ndGgoKS0xLHM9bj90aGlzLkVPRjp0aGlzLkVPTDt0aGlzLndyYXBJbmRlbnQ9MCx0aGlzLmxpbmU9dGhpcy5zZXNzaW9uLmdldExpbmUoZSksdGhpcy5pc1J0bERpcj10aGlzLiRpc1J0bHx8dGhpcy5saW5lLmNoYXJBdCgwKT09PXRoaXMuUkxFO2lmKHRoaXMuc2Vzc2lvbi4kdXNlV3JhcE1vZGUpe3ZhciBvPXRoaXMuc2Vzc2lvbi4kd3JhcERhdGFbZV07byYmKHQ9PT11bmRlZmluZWQmJih0PXRoaXMuZ2V0U3BsaXRJbmRleCgpKSx0PjAmJm8ubGVuZ3RoPyh0aGlzLndyYXBJbmRlbnQ9by5pbmRlbnQsdGhpcy53cmFwT2Zmc2V0PXRoaXMud3JhcEluZGVudCp0aGlzLmNoYXJXaWR0aHNbci5MXSx0aGlzLmxpbmU9dDxvLmxlbmd0aD90aGlzLmxpbmUuc3Vic3RyaW5nKG9bdC0xXSxvW3RdKTp0aGlzLmxpbmUuc3Vic3RyaW5nKG9bby5sZW5ndGgtMV0pKTp0aGlzLmxpbmU9dGhpcy5saW5lLnN1YnN0cmluZygwLG9bdF0pKSx0PT1vLmxlbmd0aCYmKHRoaXMubGluZSs9dGhpcy5zaG93SW52aXNpYmxlcz9zOnIuRE9UKX1lbHNlIHRoaXMubGluZSs9dGhpcy5zaG93SW52aXNpYmxlcz9zOnIuRE9UO3ZhciB1PXRoaXMuc2Vzc2lvbixhPTAsZjt0aGlzLmxpbmU9dGhpcy5saW5lLnJlcGxhY2UoL1x0fFtcdTExMDAtXHUyMDI5LCBcdTIwMkYtXHVGRkU2XS9nLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT0iCSJ8fHUuaXNGdWxsV2lkdGgoZS5jaGFyQ29kZUF0KDApKT8oZj1lPT09IgkiP3UuZ2V0U2NyZWVuVGFiU2l6ZSh0K2EpOjIsYSs9Zi0xLGkuc3RyaW5nUmVwZWF0KHIuRE9ULGYpKTplfSksdGhpcy5pc1J0bERpciYmKHRoaXMuZm9udE1ldHJpY3MuJG1haW4udGV4dENvbnRlbnQ9dGhpcy5saW5lLmNoYXJBdCh0aGlzLmxpbmUubGVuZ3RoLTEpPT1yLkRPVD90aGlzLmxpbmUuc3Vic3RyKDAsdGhpcy5saW5lLmxlbmd0aC0xKTp0aGlzLmxpbmUsdGhpcy5ydGxMaW5lT2Zmc2V0PXRoaXMuY29udGVudFdpZHRoLXRoaXMuZm9udE1ldHJpY3MuJG1haW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpfSx0aGlzLnVwZGF0ZUJpZGlNYXA9ZnVuY3Rpb24oKXt2YXIgZT1bXTtyLmhhc0JpZGlDaGFyYWN0ZXJzKHRoaXMubGluZSxlKXx8dGhpcy5pc1J0bERpcj90aGlzLmJpZGlNYXA9ci5kb0JpZGlSZW9yZGVyKHRoaXMubGluZSxlLHRoaXMuaXNSdGxEaXIpOnRoaXMuYmlkaU1hcD17fX0sdGhpcy5tYXJrQXNEaXJ0eT1mdW5jdGlvbigpe3RoaXMuY3VycmVudFJvdz1udWxsfSx0aGlzLnVwZGF0ZUNoYXJhY3RlcldpZHRocz1mdW5jdGlvbihlKXtpZih0aGlzLmNoYXJhY3RlcldpZHRoPT09ZS4kY2hhcmFjdGVyU2l6ZS53aWR0aClyZXR1cm47dGhpcy5mb250TWV0cmljcz1lO3ZhciB0PXRoaXMuY2hhcmFjdGVyV2lkdGg9ZS4kY2hhcmFjdGVyU2l6ZS53aWR0aCxuPWUuJG1lYXN1cmVDaGFyV2lkdGgoIlx1MDVkNCIpO3RoaXMuY2hhcldpZHRoc1tyLkxdPXRoaXMuY2hhcldpZHRoc1tyLkVOXT10aGlzLmNoYXJXaWR0aHNbci5PTl9SXT10LHRoaXMuY2hhcldpZHRoc1tyLlJdPXRoaXMuY2hhcldpZHRoc1tyLkFOXT1uLHRoaXMuY2hhcldpZHRoc1tyLlJfSF09biouNDUsdGhpcy5jaGFyV2lkdGhzW3IuQl09dGhpcy5jaGFyV2lkdGhzW3IuUkxFXT0wLHRoaXMuY3VycmVudFJvdz1udWxsfSx0aGlzLnNldFNob3dJbnZpc2libGVzPWZ1bmN0aW9uKGUpe3RoaXMuc2hvd0ludmlzaWJsZXM9ZSx0aGlzLmN1cnJlbnRSb3c9bnVsbH0sdGhpcy5zZXRFb2xDaGFyPWZ1bmN0aW9uKGUpe3RoaXMuRU9MPWV9LHRoaXMuc2V0Q29udGVudFdpZHRoPWZ1bmN0aW9uKGUpe3RoaXMuY29udGVudFdpZHRoPWV9LHRoaXMuaXNSdGxMaW5lPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLiRpc1J0bD8hMDplIT11bmRlZmluZWQ/dGhpcy5zZXNzaW9uLmdldExpbmUoZSkuY2hhckF0KDApPT10aGlzLlJMRTp0aGlzLmlzUnRsRGlyfSx0aGlzLnNldFJ0bERpcmVjdGlvbj1mdW5jdGlvbihlLHQpe3ZhciBuPWUuZ2V0Q3Vyc29yUG9zaXRpb24oKTtmb3IodmFyIHI9ZS5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uQW5jaG9yKCkucm93O3I8PW4ucm93O3IrKykhdCYmZS5zZXNzaW9uLmdldExpbmUocikuY2hhckF0KDApPT09ZS5zZXNzaW9uLiRiaWRpSGFuZGxlci5STEU/ZS5zZXNzaW9uLmRvYy5yZW1vdmVJbkxpbmUociwwLDEpOnQmJmUuc2Vzc2lvbi5nZXRMaW5lKHIpLmNoYXJBdCgwKSE9PWUuc2Vzc2lvbi4kYmlkaUhhbmRsZXIuUkxFJiZlLnNlc3Npb24uZG9jLmluc2VydCh7Y29sdW1uOjAscm93OnJ9LGUuc2Vzc2lvbi4kYmlkaUhhbmRsZXIuUkxFKX0sdGhpcy5nZXRQb3NMZWZ0PWZ1bmN0aW9uKGUpe2UtPXRoaXMud3JhcEluZGVudDt2YXIgdD10aGlzLmxpbmUuY2hhckF0KDApPT09dGhpcy5STEU/MTowLG49ZT50P3RoaXMuc2Vzc2lvbi5nZXRPdmVyd3JpdGUoKT9lOmUtMTp0LGk9ci5nZXRWaXN1YWxGcm9tTG9naWNhbElkeChuLHRoaXMuYmlkaU1hcCkscz10aGlzLmJpZGlNYXAuYmlkaUxldmVscyxvPTA7IXRoaXMuc2Vzc2lvbi5nZXRPdmVyd3JpdGUoKSYmZTw9dCYmc1tpXSUyIT09MCYmaSsrO2Zvcih2YXIgdT0wO3U8aTt1Kyspbys9dGhpcy5jaGFyV2lkdGhzW3NbdV1dO3JldHVybiF0aGlzLnNlc3Npb24uZ2V0T3ZlcndyaXRlKCkmJmU+dCYmc1tpXSUyPT09MCYmKG8rPXRoaXMuY2hhcldpZHRoc1tzW2ldXSksdGhpcy53cmFwSW5kZW50JiYobys9dGhpcy5pc1J0bERpcj8tMSp0aGlzLndyYXBPZmZzZXQ6dGhpcy53cmFwT2Zmc2V0KSx0aGlzLmlzUnRsRGlyJiYobys9dGhpcy5ydGxMaW5lT2Zmc2V0KSxvfSx0aGlzLmdldFNlbGVjdGlvbnM9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmJpZGlNYXAscj1uLmJpZGlMZXZlbHMsaSxzPVtdLG89MCx1PU1hdGgubWluKGUsdCktdGhpcy53cmFwSW5kZW50LGE9TWF0aC5tYXgoZSx0KS10aGlzLndyYXBJbmRlbnQsZj0hMSxsPSExLGM9MDt0aGlzLndyYXBJbmRlbnQmJihvKz10aGlzLmlzUnRsRGlyPy0xKnRoaXMud3JhcE9mZnNldDp0aGlzLndyYXBPZmZzZXQpO2Zvcih2YXIgaCxwPTA7cDxyLmxlbmd0aDtwKyspaD1uLmxvZ2ljYWxGcm9tVmlzdWFsW3BdLGk9cltwXSxmPWg+PXUmJmg8YSxmJiYhbD9jPW86IWYmJmwmJnMucHVzaCh7bGVmdDpjLHdpZHRoOm8tY30pLG8rPXRoaXMuY2hhcldpZHRoc1tpXSxsPWY7ZiYmcD09PXIubGVuZ3RoJiZzLnB1c2goe2xlZnQ6Yyx3aWR0aDpvLWN9KTtpZih0aGlzLmlzUnRsRGlyKWZvcih2YXIgZD0wO2Q8cy5sZW5ndGg7ZCsrKXNbZF0ubGVmdCs9dGhpcy5ydGxMaW5lT2Zmc2V0O3JldHVybiBzfSx0aGlzLm9mZnNldFRvQ29sPWZ1bmN0aW9uKGUpe3RoaXMuaXNSdGxEaXImJihlLT10aGlzLnJ0bExpbmVPZmZzZXQpO3ZhciB0PTAsZT1NYXRoLm1heChlLDApLG49MCxyPTAsaT10aGlzLmJpZGlNYXAuYmlkaUxldmVscyxzPXRoaXMuY2hhcldpZHRoc1tpW3JdXTt0aGlzLndyYXBJbmRlbnQmJihlLT10aGlzLmlzUnRsRGlyPy0xKnRoaXMud3JhcE9mZnNldDp0aGlzLndyYXBPZmZzZXQpO3doaWxlKGU+bitzLzIpe24rPXM7aWYocj09PWkubGVuZ3RoLTEpe3M9MDticmVha31zPXRoaXMuY2hhcldpZHRoc1tpWysrcl1dfXJldHVybiByPjAmJmlbci0xXSUyIT09MCYmaVtyXSUyPT09MD8oZTxuJiZyLS0sdD10aGlzLmJpZGlNYXAubG9naWNhbEZyb21WaXN1YWxbcl0pOnI+MCYmaVtyLTFdJTI9PT0wJiZpW3JdJTIhPT0wP3Q9MSsoZT5uP3RoaXMuYmlkaU1hcC5sb2dpY2FsRnJvbVZpc3VhbFtyXTp0aGlzLmJpZGlNYXAubG9naWNhbEZyb21WaXN1YWxbci0xXSk6dGhpcy5pc1J0bERpciYmcj09PWkubGVuZ3RoLTEmJnM9PT0wJiZpW3ItMV0lMj09PTB8fCF0aGlzLmlzUnRsRGlyJiZyPT09MCYmaVtyXSUyIT09MD90PTErdGhpcy5iaWRpTWFwLmxvZ2ljYWxGcm9tVmlzdWFsW3JdOihyPjAmJmlbci0xXSUyIT09MCYmcyE9PTAmJnItLSx0PXRoaXMuYmlkaU1hcC5sb2dpY2FsRnJvbVZpc3VhbFtyXSksdD09PTAmJnRoaXMuaXNSdGxEaXImJnQrKyx0K3RoaXMud3JhcEluZGVudH19KS5jYWxsKG8ucHJvdG90eXBlKSx0LkJpZGlIYW5kbGVyPW99KSxhY2UuZGVmaW5lKCJhY2Uvc2VsZWN0aW9uIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbGliL2V2ZW50X2VtaXR0ZXIiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoIi4vbGliL29vcCIpLGk9ZSgiLi9saWIvbGFuZyIpLHM9ZSgiLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcixvPWUoIi4vcmFuZ2UiKS5SYW5nZSx1PWZ1bmN0aW9uKGUpe3RoaXMuc2Vzc2lvbj1lLHRoaXMuZG9jPWUuZ2V0RG9jdW1lbnQoKSx0aGlzLmNsZWFyU2VsZWN0aW9uKCksdGhpcy5jdXJzb3I9dGhpcy5sZWFkPXRoaXMuZG9jLmNyZWF0ZUFuY2hvcigwLDApLHRoaXMuYW5jaG9yPXRoaXMuZG9jLmNyZWF0ZUFuY2hvcigwLDApLHRoaXMuJHNpbGVudD0hMTt2YXIgdD10aGlzO3RoaXMuY3Vyc29yLm9uKCJjaGFuZ2UiLGZ1bmN0aW9uKGUpe3QuJGN1cnNvckNoYW5nZWQ9ITAsdC4kc2lsZW50fHx0Ll9lbWl0KCJjaGFuZ2VDdXJzb3IiKSwhdC4kaXNFbXB0eSYmIXQuJHNpbGVudCYmdC5fZW1pdCgiY2hhbmdlU2VsZWN0aW9uIiksIXQuJGtlZXBEZXNpcmVkQ29sdW1uT25DaGFuZ2UmJmUub2xkLmNvbHVtbiE9ZS52YWx1ZS5jb2x1bW4mJih0LiRkZXNpcmVkQ29sdW1uPW51bGwpfSksdGhpcy5hbmNob3Iub24oImNoYW5nZSIsZnVuY3Rpb24oKXt0LiRhbmNob3JDaGFuZ2VkPSEwLCF0LiRpc0VtcHR5JiYhdC4kc2lsZW50JiZ0Ll9lbWl0KCJjaGFuZ2VTZWxlY3Rpb24iKX0pfTsoZnVuY3Rpb24oKXtyLmltcGxlbWVudCh0aGlzLHMpLHRoaXMuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRpc0VtcHR5fHx0aGlzLmFuY2hvci5yb3c9PXRoaXMubGVhZC5yb3cmJnRoaXMuYW5jaG9yLmNvbHVtbj09dGhpcy5sZWFkLmNvbHVtbn0sdGhpcy5pc011bHRpTGluZT1mdW5jdGlvbigpe3JldHVybiF0aGlzLiRpc0VtcHR5JiZ0aGlzLmFuY2hvci5yb3chPXRoaXMuY3Vyc29yLnJvd30sdGhpcy5nZXRDdXJzb3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZWFkLmdldFBvc2l0aW9uKCl9LHRoaXMuc2V0U2VsZWN0aW9uQW5jaG9yPWZ1bmN0aW9uKGUsdCl7dGhpcy4kaXNFbXB0eT0hMSx0aGlzLmFuY2hvci5zZXRQb3NpdGlvbihlLHQpfSx0aGlzLmdldEFuY2hvcj10aGlzLmdldFNlbGVjdGlvbkFuY2hvcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRpc0VtcHR5P3RoaXMuZ2V0U2VsZWN0aW9uTGVhZCgpOnRoaXMuYW5jaG9yLmdldFBvc2l0aW9uKCl9LHRoaXMuZ2V0U2VsZWN0aW9uTGVhZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlYWQuZ2V0UG9zaXRpb24oKX0sdGhpcy5pc0JhY2t3YXJkcz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuYW5jaG9yLHQ9dGhpcy5sZWFkO3JldHVybiBlLnJvdz50LnJvd3x8ZS5yb3c9PXQucm93JiZlLmNvbHVtbj50LmNvbHVtbn0sdGhpcy5nZXRSYW5nZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuYW5jaG9yLHQ9dGhpcy5sZWFkO3JldHVybiB0aGlzLiRpc0VtcHR5P28uZnJvbVBvaW50cyh0LHQpOnRoaXMuaXNCYWNrd2FyZHMoKT9vLmZyb21Qb2ludHModCxlKTpvLmZyb21Qb2ludHMoZSx0KX0sdGhpcy5jbGVhclNlbGVjdGlvbj1mdW5jdGlvbigpe3RoaXMuJGlzRW1wdHl8fCh0aGlzLiRpc0VtcHR5PSEwLHRoaXMuX2VtaXQoImNoYW5nZVNlbGVjdGlvbiIpKX0sdGhpcy5zZWxlY3RBbGw9ZnVuY3Rpb24oKXt0aGlzLiRzZXRTZWxlY3Rpb24oMCwwLE51bWJlci5NQVhfVkFMVUUsTnVtYmVyLk1BWF9WQUxVRSl9LHRoaXMuc2V0UmFuZ2U9dGhpcy5zZXRTZWxlY3Rpb25SYW5nZT1mdW5jdGlvbihlLHQpe3ZhciBuPXQ/ZS5lbmQ6ZS5zdGFydCxyPXQ/ZS5zdGFydDplLmVuZDt0aGlzLiRzZXRTZWxlY3Rpb24obi5yb3csbi5jb2x1bW4sci5yb3csci5jb2x1bW4pfSx0aGlzLiRzZXRTZWxlY3Rpb249ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dGhpcy4kaXNFbXB0eSxzPXRoaXMuaW5NdWx0aVNlbGVjdE1vZGU7dGhpcy4kc2lsZW50PSEwLHRoaXMuJGN1cnNvckNoYW5nZWQ9dGhpcy4kYW5jaG9yQ2hhbmdlZD0hMSx0aGlzLmFuY2hvci5zZXRQb3NpdGlvbihlLHQpLHRoaXMuY3Vyc29yLnNldFBvc2l0aW9uKG4sciksdGhpcy4kaXNFbXB0eT0hby5jb21wYXJlUG9pbnRzKHRoaXMuYW5jaG9yLHRoaXMuY3Vyc29yKSx0aGlzLiRzaWxlbnQ9ITEsdGhpcy4kY3Vyc29yQ2hhbmdlZCYmdGhpcy5fZW1pdCgiY2hhbmdlQ3Vyc29yIiksKHRoaXMuJGN1cnNvckNoYW5nZWR8fHRoaXMuJGFuY2hvckNoYW5nZWR8fGkhPXRoaXMuJGlzRW1wdHl8fHMpJiZ0aGlzLl9lbWl0KCJjaGFuZ2VTZWxlY3Rpb24iKX0sdGhpcy4kbW92ZVNlbGVjdGlvbj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmxlYWQ7dGhpcy4kaXNFbXB0eSYmdGhpcy5zZXRTZWxlY3Rpb25BbmNob3IodC5yb3csdC5jb2x1bW4pLGUuY2FsbCh0aGlzKX0sdGhpcy5zZWxlY3RUbz1mdW5jdGlvbihlLHQpe3RoaXMuJG1vdmVTZWxlY3Rpb24oZnVuY3Rpb24oKXt0aGlzLm1vdmVDdXJzb3JUbyhlLHQpfSl9LHRoaXMuc2VsZWN0VG9Qb3NpdGlvbj1mdW5jdGlvbihlKXt0aGlzLiRtb3ZlU2VsZWN0aW9uKGZ1bmN0aW9uKCl7dGhpcy5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihlKX0pfSx0aGlzLm1vdmVUbz1mdW5jdGlvbihlLHQpe3RoaXMuY2xlYXJTZWxlY3Rpb24oKSx0aGlzLm1vdmVDdXJzb3JUbyhlLHQpfSx0aGlzLm1vdmVUb1Bvc2l0aW9uPWZ1bmN0aW9uKGUpe3RoaXMuY2xlYXJTZWxlY3Rpb24oKSx0aGlzLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKGUpfSx0aGlzLnNlbGVjdFVwPWZ1bmN0aW9uKCl7dGhpcy4kbW92ZVNlbGVjdGlvbih0aGlzLm1vdmVDdXJzb3JVcCl9LHRoaXMuc2VsZWN0RG93bj1mdW5jdGlvbigpe3RoaXMuJG1vdmVTZWxlY3Rpb24odGhpcy5tb3ZlQ3Vyc29yRG93bil9LHRoaXMuc2VsZWN0UmlnaHQ9ZnVuY3Rpb24oKXt0aGlzLiRtb3ZlU2VsZWN0aW9uKHRoaXMubW92ZUN1cnNvclJpZ2h0KX0sdGhpcy5zZWxlY3RMZWZ0PWZ1bmN0aW9uKCl7dGhpcy4kbW92ZVNlbGVjdGlvbih0aGlzLm1vdmVDdXJzb3JMZWZ0KX0sdGhpcy5zZWxlY3RMaW5lU3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLiRtb3ZlU2VsZWN0aW9uKHRoaXMubW92ZUN1cnNvckxpbmVTdGFydCl9LHRoaXMuc2VsZWN0TGluZUVuZD1mdW5jdGlvbigpe3RoaXMuJG1vdmVTZWxlY3Rpb24odGhpcy5tb3ZlQ3Vyc29yTGluZUVuZCl9LHRoaXMuc2VsZWN0RmlsZUVuZD1mdW5jdGlvbigpe3RoaXMuJG1vdmVTZWxlY3Rpb24odGhpcy5tb3ZlQ3Vyc29yRmlsZUVuZCl9LHRoaXMuc2VsZWN0RmlsZVN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy4kbW92ZVNlbGVjdGlvbih0aGlzLm1vdmVDdXJzb3JGaWxlU3RhcnQpfSx0aGlzLnNlbGVjdFdvcmRSaWdodD1mdW5jdGlvbigpe3RoaXMuJG1vdmVTZWxlY3Rpb24odGhpcy5tb3ZlQ3Vyc29yV29yZFJpZ2h0KX0sdGhpcy5zZWxlY3RXb3JkTGVmdD1mdW5jdGlvbigpe3RoaXMuJG1vdmVTZWxlY3Rpb24odGhpcy5tb3ZlQ3Vyc29yV29yZExlZnQpfSx0aGlzLmdldFdvcmRSYW5nZT1mdW5jdGlvbihlLHQpe2lmKHR5cGVvZiB0PT0idW5kZWZpbmVkIil7dmFyIG49ZXx8dGhpcy5sZWFkO2U9bi5yb3csdD1uLmNvbHVtbn1yZXR1cm4gdGhpcy5zZXNzaW9uLmdldFdvcmRSYW5nZShlLHQpfSx0aGlzLnNlbGVjdFdvcmQ9ZnVuY3Rpb24oKXt0aGlzLnNldFNlbGVjdGlvblJhbmdlKHRoaXMuZ2V0V29yZFJhbmdlKCkpfSx0aGlzLnNlbGVjdEFXb3JkPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRDdXJzb3IoKSx0PXRoaXMuc2Vzc2lvbi5nZXRBV29yZFJhbmdlKGUucm93LGUuY29sdW1uKTt0aGlzLnNldFNlbGVjdGlvblJhbmdlKHQpfSx0aGlzLmdldExpbmVSYW5nZT1mdW5jdGlvbihlLHQpe3ZhciBuPXR5cGVvZiBlPT0ibnVtYmVyIj9lOnRoaXMubGVhZC5yb3cscixpPXRoaXMuc2Vzc2lvbi5nZXRGb2xkTGluZShuKTtyZXR1cm4gaT8obj1pLnN0YXJ0LnJvdyxyPWkuZW5kLnJvdyk6cj1uLHQ9PT0hMD9uZXcgbyhuLDAscix0aGlzLnNlc3Npb24uZ2V0TGluZShyKS5sZW5ndGgpOm5ldyBvKG4sMCxyKzEsMCl9LHRoaXMuc2VsZWN0TGluZT1mdW5jdGlvbigpe3RoaXMuc2V0U2VsZWN0aW9uUmFuZ2UodGhpcy5nZXRMaW5lUmFuZ2UoKSl9LHRoaXMubW92ZUN1cnNvclVwPWZ1bmN0aW9uKCl7dGhpcy5tb3ZlQ3Vyc29yQnkoLTEsMCl9LHRoaXMubW92ZUN1cnNvckRvd249ZnVuY3Rpb24oKXt0aGlzLm1vdmVDdXJzb3JCeSgxLDApfSx0aGlzLndvdWxkTW92ZUludG9Tb2Z0VGFiPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLmNvbHVtbixpPWUuY29sdW1uK3Q7cmV0dXJuIG48MCYmKHI9ZS5jb2x1bW4tdCxpPWUuY29sdW1uKSx0aGlzLnNlc3Npb24uaXNUYWJTdG9wKGUpJiZ0aGlzLmRvYy5nZXRMaW5lKGUucm93KS5zbGljZShyLGkpLnNwbGl0KCIgIikubGVuZ3RoLTE9PXR9LHRoaXMubW92ZUN1cnNvckxlZnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlYWQuZ2V0UG9zaXRpb24oKSx0O2lmKHQ9dGhpcy5zZXNzaW9uLmdldEZvbGRBdChlLnJvdyxlLmNvbHVtbiwtMSkpdGhpcy5tb3ZlQ3Vyc29yVG8odC5zdGFydC5yb3csdC5zdGFydC5jb2x1bW4pO2Vsc2UgaWYoZS5jb2x1bW49PT0wKWUucm93PjAmJnRoaXMubW92ZUN1cnNvclRvKGUucm93LTEsdGhpcy5kb2MuZ2V0TGluZShlLnJvdy0xKS5sZW5ndGgpO2Vsc2V7dmFyIG49dGhpcy5zZXNzaW9uLmdldFRhYlNpemUoKTt0aGlzLndvdWxkTW92ZUludG9Tb2Z0VGFiKGUsbiwtMSkmJiF0aGlzLnNlc3Npb24uZ2V0TmF2aWdhdGVXaXRoaW5Tb2Z0VGFicygpP3RoaXMubW92ZUN1cnNvckJ5KDAsLW4pOnRoaXMubW92ZUN1cnNvckJ5KDAsLTEpfX0sdGhpcy5tb3ZlQ3Vyc29yUmlnaHQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlYWQuZ2V0UG9zaXRpb24oKSx0O2lmKHQ9dGhpcy5zZXNzaW9uLmdldEZvbGRBdChlLnJvdyxlLmNvbHVtbiwxKSl0aGlzLm1vdmVDdXJzb3JUbyh0LmVuZC5yb3csdC5lbmQuY29sdW1uKTtlbHNlIGlmKHRoaXMubGVhZC5jb2x1bW49PXRoaXMuZG9jLmdldExpbmUodGhpcy5sZWFkLnJvdykubGVuZ3RoKXRoaXMubGVhZC5yb3c8dGhpcy5kb2MuZ2V0TGVuZ3RoKCktMSYmdGhpcy5tb3ZlQ3Vyc29yVG8odGhpcy5sZWFkLnJvdysxLDApO2Vsc2V7dmFyIG49dGhpcy5zZXNzaW9uLmdldFRhYlNpemUoKSxlPXRoaXMubGVhZDt0aGlzLndvdWxkTW92ZUludG9Tb2Z0VGFiKGUsbiwxKSYmIXRoaXMuc2Vzc2lvbi5nZXROYXZpZ2F0ZVdpdGhpblNvZnRUYWJzKCk/dGhpcy5tb3ZlQ3Vyc29yQnkoMCxuKTp0aGlzLm1vdmVDdXJzb3JCeSgwLDEpfX0sdGhpcy5tb3ZlQ3Vyc29yTGluZVN0YXJ0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZWFkLnJvdyx0PXRoaXMubGVhZC5jb2x1bW4sbj10aGlzLnNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblJvdyhlLHQpLHI9dGhpcy5zZXNzaW9uLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihuLDApLGk9dGhpcy5zZXNzaW9uLmdldERpc3BsYXlMaW5lKGUsbnVsbCxyLnJvdyxyLmNvbHVtbikscz1pLm1hdGNoKC9eXHMqLyk7c1swXS5sZW5ndGghPXQmJiF0aGlzLnNlc3Npb24uJHVzZUVtYWNzU3R5bGVMaW5lU3RhcnQmJihyLmNvbHVtbis9c1swXS5sZW5ndGgpLHRoaXMubW92ZUN1cnNvclRvUG9zaXRpb24ocil9LHRoaXMubW92ZUN1cnNvckxpbmVFbmQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlYWQsdD10aGlzLnNlc3Npb24uZ2V0RG9jdW1lbnRMYXN0Um93Q29sdW1uUG9zaXRpb24oZS5yb3csZS5jb2x1bW4pO2lmKHRoaXMubGVhZC5jb2x1bW49PXQuY29sdW1uKXt2YXIgbj10aGlzLnNlc3Npb24uZ2V0TGluZSh0LnJvdyk7aWYodC5jb2x1bW49PW4ubGVuZ3RoKXt2YXIgcj1uLnNlYXJjaCgvXHMrJC8pO3I+MCYmKHQuY29sdW1uPXIpfX10aGlzLm1vdmVDdXJzb3JUbyh0LnJvdyx0LmNvbHVtbil9LHRoaXMubW92ZUN1cnNvckZpbGVFbmQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmRvYy5nZXRMZW5ndGgoKS0xLHQ9dGhpcy5kb2MuZ2V0TGluZShlKS5sZW5ndGg7dGhpcy5tb3ZlQ3Vyc29yVG8oZSx0KX0sdGhpcy5tb3ZlQ3Vyc29yRmlsZVN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5tb3ZlQ3Vyc29yVG8oMCwwKX0sdGhpcy5tb3ZlQ3Vyc29yTG9uZ1dvcmRSaWdodD1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVhZC5yb3csdD10aGlzLmxlYWQuY29sdW1uLG49dGhpcy5kb2MuZ2V0TGluZShlKSxyPW4uc3Vic3RyaW5nKHQpO3RoaXMuc2Vzc2lvbi5ub25Ub2tlblJlLmxhc3RJbmRleD0wLHRoaXMuc2Vzc2lvbi50b2tlblJlLmxhc3RJbmRleD0wO3ZhciBpPXRoaXMuc2Vzc2lvbi5nZXRGb2xkQXQoZSx0LDEpO2lmKGkpe3RoaXMubW92ZUN1cnNvclRvKGkuZW5kLnJvdyxpLmVuZC5jb2x1bW4pO3JldHVybn10aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5leGVjKHIpJiYodCs9dGhpcy5zZXNzaW9uLm5vblRva2VuUmUubGFzdEluZGV4LHRoaXMuc2Vzc2lvbi5ub25Ub2tlblJlLmxhc3RJbmRleD0wLHI9bi5zdWJzdHJpbmcodCkpO2lmKHQ+PW4ubGVuZ3RoKXt0aGlzLm1vdmVDdXJzb3JUbyhlLG4ubGVuZ3RoKSx0aGlzLm1vdmVDdXJzb3JSaWdodCgpLGU8dGhpcy5kb2MuZ2V0TGVuZ3RoKCktMSYmdGhpcy5tb3ZlQ3Vyc29yV29yZFJpZ2h0KCk7cmV0dXJufXRoaXMuc2Vzc2lvbi50b2tlblJlLmV4ZWMocikmJih0Kz10aGlzLnNlc3Npb24udG9rZW5SZS5sYXN0SW5kZXgsdGhpcy5zZXNzaW9uLnRva2VuUmUubGFzdEluZGV4PTApLHRoaXMubW92ZUN1cnNvclRvKGUsdCl9LHRoaXMubW92ZUN1cnNvckxvbmdXb3JkTGVmdD1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVhZC5yb3csdD10aGlzLmxlYWQuY29sdW1uLG47aWYobj10aGlzLnNlc3Npb24uZ2V0Rm9sZEF0KGUsdCwtMSkpe3RoaXMubW92ZUN1cnNvclRvKG4uc3RhcnQucm93LG4uc3RhcnQuY29sdW1uKTtyZXR1cm59dmFyIHI9dGhpcy5zZXNzaW9uLmdldEZvbGRTdHJpbmdBdChlLHQsLTEpO3I9PW51bGwmJihyPXRoaXMuZG9jLmdldExpbmUoZSkuc3Vic3RyaW5nKDAsdCkpO3ZhciBzPWkuc3RyaW5nUmV2ZXJzZShyKTt0aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5sYXN0SW5kZXg9MCx0aGlzLnNlc3Npb24udG9rZW5SZS5sYXN0SW5kZXg9MCx0aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5leGVjKHMpJiYodC09dGhpcy5zZXNzaW9uLm5vblRva2VuUmUubGFzdEluZGV4LHM9cy5zbGljZSh0aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5sYXN0SW5kZXgpLHRoaXMuc2Vzc2lvbi5ub25Ub2tlblJlLmxhc3RJbmRleD0wKTtpZih0PD0wKXt0aGlzLm1vdmVDdXJzb3JUbyhlLDApLHRoaXMubW92ZUN1cnNvckxlZnQoKSxlPjAmJnRoaXMubW92ZUN1cnNvcldvcmRMZWZ0KCk7cmV0dXJufXRoaXMuc2Vzc2lvbi50b2tlblJlLmV4ZWMocykmJih0LT10aGlzLnNlc3Npb24udG9rZW5SZS5sYXN0SW5kZXgsdGhpcy5zZXNzaW9uLnRva2VuUmUubGFzdEluZGV4PTApLHRoaXMubW92ZUN1cnNvclRvKGUsdCl9LHRoaXMuJHNob3J0V29yZEVuZEluZGV4PWZ1bmN0aW9uKGUpe3ZhciB0PTAsbixyPS9ccy8saT10aGlzLnNlc3Npb24udG9rZW5SZTtpLmxhc3RJbmRleD0wO2lmKHRoaXMuc2Vzc2lvbi50b2tlblJlLmV4ZWMoZSkpdD10aGlzLnNlc3Npb24udG9rZW5SZS5sYXN0SW5kZXg7ZWxzZXt3aGlsZSgobj1lW3RdKSYmci50ZXN0KG4pKXQrKztpZih0PDEpe2kubGFzdEluZGV4PTA7d2hpbGUoKG49ZVt0XSkmJiFpLnRlc3Qobikpe2kubGFzdEluZGV4PTAsdCsrO2lmKHIudGVzdChuKSl7aWYodD4yKXt0LS07YnJlYWt9d2hpbGUoKG49ZVt0XSkmJnIudGVzdChuKSl0Kys7aWYodD4yKWJyZWFrfX19fXJldHVybiBpLmxhc3RJbmRleD0wLHR9LHRoaXMubW92ZUN1cnNvclNob3J0V29yZFJpZ2h0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZWFkLnJvdyx0PXRoaXMubGVhZC5jb2x1bW4sbj10aGlzLmRvYy5nZXRMaW5lKGUpLHI9bi5zdWJzdHJpbmcodCksaT10aGlzLnNlc3Npb24uZ2V0Rm9sZEF0KGUsdCwxKTtpZihpKXJldHVybiB0aGlzLm1vdmVDdXJzb3JUbyhpLmVuZC5yb3csaS5lbmQuY29sdW1uKTtpZih0PT1uLmxlbmd0aCl7dmFyIHM9dGhpcy5kb2MuZ2V0TGVuZ3RoKCk7ZG8gZSsrLHI9dGhpcy5kb2MuZ2V0TGluZShlKTt3aGlsZShlPHMmJi9eXHMqJC8udGVzdChyKSk7L15ccysvLnRlc3Qocil8fChyPSIiKSx0PTB9dmFyIG89dGhpcy4kc2hvcnRXb3JkRW5kSW5kZXgocik7dGhpcy5tb3ZlQ3Vyc29yVG8oZSx0K28pfSx0aGlzLm1vdmVDdXJzb3JTaG9ydFdvcmRMZWZ0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZWFkLnJvdyx0PXRoaXMubGVhZC5jb2x1bW4sbjtpZihuPXRoaXMuc2Vzc2lvbi5nZXRGb2xkQXQoZSx0LC0xKSlyZXR1cm4gdGhpcy5tb3ZlQ3Vyc29yVG8obi5zdGFydC5yb3csbi5zdGFydC5jb2x1bW4pO3ZhciByPXRoaXMuc2Vzc2lvbi5nZXRMaW5lKGUpLnN1YnN0cmluZygwLHQpO2lmKHQ9PT0wKXtkbyBlLS0scj10aGlzLmRvYy5nZXRMaW5lKGUpO3doaWxlKGU+MCYmL15ccyokLy50ZXN0KHIpKTt0PXIubGVuZ3RoLC9ccyskLy50ZXN0KHIpfHwocj0iIil9dmFyIHM9aS5zdHJpbmdSZXZlcnNlKHIpLG89dGhpcy4kc2hvcnRXb3JkRW5kSW5kZXgocyk7cmV0dXJuIHRoaXMubW92ZUN1cnNvclRvKGUsdC1vKX0sdGhpcy5tb3ZlQ3Vyc29yV29yZFJpZ2h0PWZ1bmN0aW9uKCl7dGhpcy5zZXNzaW9uLiRzZWxlY3RMb25nV29yZHM/dGhpcy5tb3ZlQ3Vyc29yTG9uZ1dvcmRSaWdodCgpOnRoaXMubW92ZUN1cnNvclNob3J0V29yZFJpZ2h0KCl9LHRoaXMubW92ZUN1cnNvcldvcmRMZWZ0PWZ1bmN0aW9uKCl7dGhpcy5zZXNzaW9uLiRzZWxlY3RMb25nV29yZHM/dGhpcy5tb3ZlQ3Vyc29yTG9uZ1dvcmRMZWZ0KCk6dGhpcy5tb3ZlQ3Vyc29yU2hvcnRXb3JkTGVmdCgpfSx0aGlzLm1vdmVDdXJzb3JCeT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24odGhpcy5sZWFkLnJvdyx0aGlzLmxlYWQuY29sdW1uKSxyO3Q9PT0wJiYoZSE9PTAmJih0aGlzLnNlc3Npb24uJGJpZGlIYW5kbGVyLmlzQmlkaVJvdyhuLnJvdyx0aGlzLmxlYWQucm93KT8ocj10aGlzLnNlc3Npb24uJGJpZGlIYW5kbGVyLmdldFBvc0xlZnQobi5jb2x1bW4pLG4uY29sdW1uPU1hdGgucm91bmQoci90aGlzLnNlc3Npb24uJGJpZGlIYW5kbGVyLmNoYXJXaWR0aHNbMF0pKTpyPW4uY29sdW1uKnRoaXMuc2Vzc2lvbi4kYmlkaUhhbmRsZXIuY2hhcldpZHRoc1swXSksdGhpcy4kZGVzaXJlZENvbHVtbj9uLmNvbHVtbj10aGlzLiRkZXNpcmVkQ29sdW1uOnRoaXMuJGRlc2lyZWRDb2x1bW49bi5jb2x1bW4pO3ZhciBpPXRoaXMuc2Vzc2lvbi5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24obi5yb3crZSxuLmNvbHVtbixyKTtlIT09MCYmdD09PTAmJmkucm93PT09dGhpcy5sZWFkLnJvdyYmaS5jb2x1bW49PT10aGlzLmxlYWQuY29sdW1uJiZ0aGlzLnNlc3Npb24ubGluZVdpZGdldHMmJnRoaXMuc2Vzc2lvbi5saW5lV2lkZ2V0c1tpLnJvd10mJihpLnJvdz4wfHxlPjApJiZpLnJvdysrLHRoaXMubW92ZUN1cnNvclRvKGkucm93LGkuY29sdW1uK3QsdD09PTApfSx0aGlzLm1vdmVDdXJzb3JUb1Bvc2l0aW9uPWZ1bmN0aW9uKGUpe3RoaXMubW92ZUN1cnNvclRvKGUucm93LGUuY29sdW1uKX0sdGhpcy5tb3ZlQ3Vyc29yVG89ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuc2Vzc2lvbi5nZXRGb2xkQXQoZSx0LDEpO3ImJihlPXIuc3RhcnQucm93LHQ9ci5zdGFydC5jb2x1bW4pLHRoaXMuJGtlZXBEZXNpcmVkQ29sdW1uT25DaGFuZ2U9ITA7dmFyIGk9dGhpcy5zZXNzaW9uLmdldExpbmUoZSk7L1tcdURDMDAtXHVERkZGXS8udGVzdChpLmNoYXJBdCh0KSkmJmkuY2hhckF0KHQtMSkmJih0aGlzLmxlYWQucm93PT1lJiZ0aGlzLmxlYWQuY29sdW1uPT10KzE/dC09MTp0Kz0xKSx0aGlzLmxlYWQuc2V0UG9zaXRpb24oZSx0KSx0aGlzLiRrZWVwRGVzaXJlZENvbHVtbk9uQ2hhbmdlPSExLG58fCh0aGlzLiRkZXNpcmVkQ29sdW1uPW51bGwpfSx0aGlzLm1vdmVDdXJzb3JUb1NjcmVlbj1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5zZXNzaW9uLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihlLHQpO3RoaXMubW92ZUN1cnNvclRvKHIucm93LHIuY29sdW1uLG4pfSx0aGlzLmRldGFjaD1mdW5jdGlvbigpe3RoaXMubGVhZC5kZXRhY2goKSx0aGlzLmFuY2hvci5kZXRhY2goKSx0aGlzLnNlc3Npb249dGhpcy5kb2M9bnVsbH0sdGhpcy5mcm9tT3JpZW50ZWRSYW5nZT1mdW5jdGlvbihlKXt0aGlzLnNldFNlbGVjdGlvblJhbmdlKGUsZS5jdXJzb3I9PWUuc3RhcnQpLHRoaXMuJGRlc2lyZWRDb2x1bW49ZS5kZXNpcmVkQ29sdW1ufHx0aGlzLiRkZXNpcmVkQ29sdW1ufSx0aGlzLnRvT3JpZW50ZWRSYW5nZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldFJhbmdlKCk7cmV0dXJuIGU/KGUuc3RhcnQuY29sdW1uPXQuc3RhcnQuY29sdW1uLGUuc3RhcnQucm93PXQuc3RhcnQucm93LGUuZW5kLmNvbHVtbj10LmVuZC5jb2x1bW4sZS5lbmQucm93PXQuZW5kLnJvdyk6ZT10LGUuY3Vyc29yPXRoaXMuaXNCYWNrd2FyZHMoKT9lLnN0YXJ0OmUuZW5kLGUuZGVzaXJlZENvbHVtbj10aGlzLiRkZXNpcmVkQ29sdW1uLGV9LHRoaXMuZ2V0UmFuZ2VPZk1vdmVtZW50cz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldEN1cnNvcigpO3RyeXtlKHRoaXMpO3ZhciBuPXRoaXMuZ2V0Q3Vyc29yKCk7cmV0dXJuIG8uZnJvbVBvaW50cyh0LG4pfWNhdGNoKHIpe3JldHVybiBvLmZyb21Qb2ludHModCx0KX1maW5hbGx5e3RoaXMubW92ZUN1cnNvclRvUG9zaXRpb24odCl9fSx0aGlzLnRvSlNPTj1mdW5jdGlvbigpe2lmKHRoaXMucmFuZ2VDb3VudCl2YXIgZT10aGlzLnJhbmdlcy5tYXAoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jbG9uZSgpO3JldHVybiB0LmlzQmFja3dhcmRzPWUuY3Vyc29yPT1lLnN0YXJ0LHR9KTtlbHNle3ZhciBlPXRoaXMuZ2V0UmFuZ2UoKTtlLmlzQmFja3dhcmRzPXRoaXMuaXNCYWNrd2FyZHMoKX1yZXR1cm4gZX0sdGhpcy5mcm9tSlNPTj1mdW5jdGlvbihlKXtpZihlLnN0YXJ0PT11bmRlZmluZWQpe2lmKHRoaXMucmFuZ2VMaXN0JiZlLmxlbmd0aD4xKXt0aGlzLnRvU2luZ2xlUmFuZ2UoZVswXSk7Zm9yKHZhciB0PWUubGVuZ3RoO3QtLTspe3ZhciBuPW8uZnJvbVBvaW50cyhlW3RdLnN0YXJ0LGVbdF0uZW5kKTtlW3RdLmlzQmFja3dhcmRzJiYobi5jdXJzb3I9bi5zdGFydCksdGhpcy5hZGRSYW5nZShuLCEwKX1yZXR1cm59ZT1lWzBdfXRoaXMucmFuZ2VMaXN0JiZ0aGlzLnRvU2luZ2xlUmFuZ2UoZSksdGhpcy5zZXRTZWxlY3Rpb25SYW5nZShlLGUuaXNCYWNrd2FyZHMpfSx0aGlzLmlzRXF1YWw9ZnVuY3Rpb24oZSl7aWYoKGUubGVuZ3RofHx0aGlzLnJhbmdlQ291bnQpJiZlLmxlbmd0aCE9dGhpcy5yYW5nZUNvdW50KXJldHVybiExO2lmKCFlLmxlbmd0aHx8IXRoaXMucmFuZ2VzKXJldHVybiB0aGlzLmdldFJhbmdlKCkuaXNFcXVhbChlKTtmb3IodmFyIHQ9dGhpcy5yYW5nZXMubGVuZ3RoO3QtLTspaWYoIXRoaXMucmFuZ2VzW3RdLmlzRXF1YWwoZVt0XSkpcmV0dXJuITE7cmV0dXJuITB9fSkuY2FsbCh1LnByb3RvdHlwZSksdC5TZWxlY3Rpb249dX0pLGFjZS5kZWZpbmUoImFjZS90b2tlbml6ZXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvY29uZmlnIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuL2NvbmZpZyIpLGk9MmUzLHM9ZnVuY3Rpb24oZSl7dGhpcy5zdGF0ZXM9ZSx0aGlzLnJlZ0V4cHM9e30sdGhpcy5tYXRjaE1hcHBpbmdzPXt9O2Zvcih2YXIgdCBpbiB0aGlzLnN0YXRlcyl7dmFyIG49dGhpcy5zdGF0ZXNbdF0scj1bXSxpPTAscz10aGlzLm1hdGNoTWFwcGluZ3NbdF09e2RlZmF1bHRUb2tlbjoidGV4dCJ9LG89ImciLHU9W107Zm9yKHZhciBhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBmPW5bYV07Zi5kZWZhdWx0VG9rZW4mJihzLmRlZmF1bHRUb2tlbj1mLmRlZmF1bHRUb2tlbiksZi5jYXNlSW5zZW5zaXRpdmUmJihvPSJnaSIpO2lmKGYucmVnZXg9PW51bGwpY29udGludWU7Zi5yZWdleCBpbnN0YW5jZW9mIFJlZ0V4cCYmKGYucmVnZXg9Zi5yZWdleC50b1N0cmluZygpLnNsaWNlKDEsLTEpKTt2YXIgbD1mLnJlZ2V4LGM9KG5ldyBSZWdFeHAoIig/OigiK2wrIil8KC4pKSIpKS5leGVjKCJhIikubGVuZ3RoLTI7QXJyYXkuaXNBcnJheShmLnRva2VuKT9mLnRva2VuLmxlbmd0aD09MXx8Yz09MT9mLnRva2VuPWYudG9rZW5bMF06Yy0xIT1mLnRva2VuLmxlbmd0aD8odGhpcy5yZXBvcnRFcnJvcigibnVtYmVyIG9mIGNsYXNzZXMgYW5kIHJlZ2V4cCBncm91cHMgZG9lc24ndCBtYXRjaCIse3J1bGU6Zixncm91cENvdW50OmMtMX0pLGYudG9rZW49Zi50b2tlblswXSk6KGYudG9rZW5BcnJheT1mLnRva2VuLGYudG9rZW49bnVsbCxmLm9uTWF0Y2g9dGhpcy4kYXJyYXlUb2tlbnMpOnR5cGVvZiBmLnRva2VuPT0iZnVuY3Rpb24iJiYhZi5vbk1hdGNoJiYoYz4xP2Yub25NYXRjaD10aGlzLiRhcHBseVRva2VuOmYub25NYXRjaD1mLnRva2VuKSxjPjEmJigvXFxcZC8udGVzdChmLnJlZ2V4KT9sPWYucmVnZXgucmVwbGFjZSgvXFwoWzAtOV0rKS9nLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIlxcIisocGFyc2VJbnQodCwxMCkraSsxKX0pOihjPTEsbD10aGlzLnJlbW92ZUNhcHR1cmluZ0dyb3VwcyhmLnJlZ2V4KSksIWYuc3BsaXRSZWdleCYmdHlwZW9mIGYudG9rZW4hPSJzdHJpbmciJiZ1LnB1c2goZikpLHNbaV09YSxpKz1jLHIucHVzaChsKSxmLm9uTWF0Y2h8fChmLm9uTWF0Y2g9bnVsbCl9ci5sZW5ndGh8fChzWzBdPTAsci5wdXNoKCIkIikpLHUuZm9yRWFjaChmdW5jdGlvbihlKXtlLnNwbGl0UmVnZXg9dGhpcy5jcmVhdGVTcGxpdHRlclJlZ2V4cChlLnJlZ2V4LG8pfSx0aGlzKSx0aGlzLnJlZ0V4cHNbdF09bmV3IFJlZ0V4cCgiKCIrci5qb2luKCIpfCgiKSsiKXwoJCkiLG8pfX07KGZ1bmN0aW9uKCl7dGhpcy4kc2V0TWF4VG9rZW5Db3VudD1mdW5jdGlvbihlKXtpPWV8MH0sdGhpcy4kYXBwbHlUb2tlbj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnNwbGl0UmVnZXguZXhlYyhlKS5zbGljZSgxKSxuPXRoaXMudG9rZW4uYXBwbHkodGhpcyx0KTtpZih0eXBlb2Ygbj09InN0cmluZyIpcmV0dXJuW3t0eXBlOm4sdmFsdWU6ZX1dO3ZhciByPVtdO2Zvcih2YXIgaT0wLHM9bi5sZW5ndGg7aTxzO2krKyl0W2ldJiYocltyLmxlbmd0aF09e3R5cGU6bltpXSx2YWx1ZTp0W2ldfSk7cmV0dXJuIHJ9LHRoaXMuJGFycmF5VG9rZW5zPWZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybltdO3ZhciB0PXRoaXMuc3BsaXRSZWdleC5leGVjKGUpO2lmKCF0KXJldHVybiJ0ZXh0Ijt2YXIgbj1bXSxyPXRoaXMudG9rZW5BcnJheTtmb3IodmFyIGk9MCxzPXIubGVuZ3RoO2k8cztpKyspdFtpKzFdJiYobltuLmxlbmd0aF09e3R5cGU6cltpXSx2YWx1ZTp0W2krMV19KTtyZXR1cm4gbn0sdGhpcy5yZW1vdmVDYXB0dXJpbmdHcm91cHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKC9cXC58XFsoPzpcXC58W15cXFxdXSkqfFwoXD9bOj0hXXwoXCgpL2csZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD8iKD86IjplfSk7cmV0dXJuIHR9LHRoaXMuY3JlYXRlU3BsaXR0ZXJSZWdleHA9ZnVuY3Rpb24oZSx0KXtpZihlLmluZGV4T2YoIig/PSIpIT0tMSl7dmFyIG49MCxyPSExLGk9e307ZS5yZXBsYWNlKC8oXFwuKXwoXCgoPzpcP1s9IV0pPyl8KFwpKXwoW1xbXF1dKS9nLGZ1bmN0aW9uKGUsdCxzLG8sdSxhKXtyZXR1cm4gcj9yPXUhPSJdIjp1P3I9ITA6bz8obj09aS5zdGFjayYmKGkuZW5kPWErMSxpLnN0YWNrPS0xKSxuLS0pOnMmJihuKysscy5sZW5ndGghPTEmJihpLnN0YWNrPW4saS5zdGFydD1hKSksZX0pLGkuZW5kIT1udWxsJiYvXlwpKiQvLnRlc3QoZS5zdWJzdHIoaS5lbmQpKSYmKGU9ZS5zdWJzdHJpbmcoMCxpLnN0YXJ0KStlLnN1YnN0cihpLmVuZCkpfXJldHVybiBlLmNoYXJBdCgwKSE9Il4iJiYoZT0iXiIrZSksZS5jaGFyQXQoZS5sZW5ndGgtMSkhPSIkIiYmKGUrPSIkIiksbmV3IFJlZ0V4cChlLCh0fHwiIikucmVwbGFjZSgiZyIsIiIpKX0sdGhpcy5nZXRMaW5lVG9rZW5zPWZ1bmN0aW9uKGUsdCl7aWYodCYmdHlwZW9mIHQhPSJzdHJpbmciKXt2YXIgbj10LnNsaWNlKDApO3Q9blswXSx0PT09IiN0bXAiJiYobi5zaGlmdCgpLHQ9bi5zaGlmdCgpKX1lbHNlIHZhciBuPVtdO3ZhciByPXR8fCJzdGFydCIscz10aGlzLnN0YXRlc1tyXTtzfHwocj0ic3RhcnQiLHM9dGhpcy5zdGF0ZXNbcl0pO3ZhciBvPXRoaXMubWF0Y2hNYXBwaW5nc1tyXSx1PXRoaXMucmVnRXhwc1tyXTt1Lmxhc3RJbmRleD0wO3ZhciBhLGY9W10sbD0wLGM9MCxoPXt0eXBlOm51bGwsdmFsdWU6IiJ9O3doaWxlKGE9dS5leGVjKGUpKXt2YXIgcD1vLmRlZmF1bHRUb2tlbixkPW51bGwsdj1hWzBdLG09dS5sYXN0SW5kZXg7aWYobS12Lmxlbmd0aD5sKXt2YXIgZz1lLnN1YnN0cmluZyhsLG0tdi5sZW5ndGgpO2gudHlwZT09cD9oLnZhbHVlKz1nOihoLnR5cGUmJmYucHVzaChoKSxoPXt0eXBlOnAsdmFsdWU6Z30pfWZvcih2YXIgeT0wO3k8YS5sZW5ndGgtMjt5Kyspe2lmKGFbeSsxXT09PXVuZGVmaW5lZCljb250aW51ZTtkPXNbb1t5XV0sZC5vbk1hdGNoP3A9ZC5vbk1hdGNoKHYscixuLGUpOnA9ZC50b2tlbixkLm5leHQmJih0eXBlb2YgZC5uZXh0PT0ic3RyaW5nIj9yPWQubmV4dDpyPWQubmV4dChyLG4pLHM9dGhpcy5zdGF0ZXNbcl0sc3x8KHRoaXMucmVwb3J0RXJyb3IoInN0YXRlIGRvZXNuJ3QgZXhpc3QiLHIpLHI9InN0YXJ0IixzPXRoaXMuc3RhdGVzW3JdKSxvPXRoaXMubWF0Y2hNYXBwaW5nc1tyXSxsPW0sdT10aGlzLnJlZ0V4cHNbcl0sdS5sYXN0SW5kZXg9bSksZC5jb25zdW1lTGluZUVuZCYmKGw9bSk7YnJlYWt9aWYodilpZih0eXBlb2YgcD09InN0cmluZyIpISFkJiZkLm1lcmdlPT09ITF8fGgudHlwZSE9PXA/KGgudHlwZSYmZi5wdXNoKGgpLGg9e3R5cGU6cCx2YWx1ZTp2fSk6aC52YWx1ZSs9djtlbHNlIGlmKHApe2gudHlwZSYmZi5wdXNoKGgpLGg9e3R5cGU6bnVsbCx2YWx1ZToiIn07Zm9yKHZhciB5PTA7eTxwLmxlbmd0aDt5KyspZi5wdXNoKHBbeV0pfWlmKGw9PWUubGVuZ3RoKWJyZWFrO2w9bTtpZihjKys+aSl7Yz4yKmUubGVuZ3RoJiZ0aGlzLnJlcG9ydEVycm9yKCJpbmZpbml0ZSBsb29wIHdpdGggaW4gYWNlIHRva2VuaXplciIse3N0YXJ0U3RhdGU6dCxsaW5lOmV9KTt3aGlsZShsPGUubGVuZ3RoKWgudHlwZSYmZi5wdXNoKGgpLGg9e3ZhbHVlOmUuc3Vic3RyaW5nKGwsbCs9NTAwKSx0eXBlOiJvdmVyZmxvdyJ9O3I9InN0YXJ0IixuPVtdO2JyZWFrfX1yZXR1cm4gaC50eXBlJiZmLnB1c2goaCksbi5sZW5ndGg+MSYmblswXSE9PXImJm4udW5zaGlmdCgiI3RtcCIscikse3Rva2VuczpmLHN0YXRlOm4ubGVuZ3RoP246cn19LHRoaXMucmVwb3J0RXJyb3I9ci5yZXBvcnRFcnJvcn0pLmNhbGwocy5wcm90b3R5cGUpLHQuVG9rZW5pemVyPXN9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvbGFuZyJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgiLi4vbGliL2xhbmciKSxpPWZ1bmN0aW9uKCl7dGhpcy4kcnVsZXM9e3N0YXJ0Olt7dG9rZW46ImVtcHR5X2xpbmUiLHJlZ2V4OiJeJCJ9LHtkZWZhdWx0VG9rZW46InRleHQifV19fTsoZnVuY3Rpb24oKXt0aGlzLmFkZFJ1bGVzPWZ1bmN0aW9uKGUsdCl7aWYoIXQpe2Zvcih2YXIgbiBpbiBlKXRoaXMuJHJ1bGVzW25dPWVbbl07cmV0dXJufWZvcih2YXIgbiBpbiBlKXt2YXIgcj1lW25dO2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgcz1yW2ldO2lmKHMubmV4dHx8cy5vbk1hdGNoKXR5cGVvZiBzLm5leHQ9PSJzdHJpbmciJiZzLm5leHQuaW5kZXhPZih0KSE9PTAmJihzLm5leHQ9dCtzLm5leHQpLHMubmV4dFN0YXRlJiZzLm5leHRTdGF0ZS5pbmRleE9mKHQpIT09MCYmKHMubmV4dFN0YXRlPXQrcy5uZXh0U3RhdGUpfXRoaXMuJHJ1bGVzW3Qrbl09cn19LHRoaXMuZ2V0UnVsZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcnVsZXN9LHRoaXMuZW1iZWRSdWxlcz1mdW5jdGlvbihlLHQsbixpLHMpe3ZhciBvPXR5cGVvZiBlPT0iZnVuY3Rpb24iPyhuZXcgZSkuZ2V0UnVsZXMoKTplO2lmKGkpZm9yKHZhciB1PTA7dTxpLmxlbmd0aDt1KyspaVt1XT10K2lbdV07ZWxzZXtpPVtdO2Zvcih2YXIgYSBpbiBvKWkucHVzaCh0K2EpfXRoaXMuYWRkUnVsZXMobyx0KTtpZihuKXt2YXIgZj1BcnJheS5wcm90b3R5cGVbcz8icHVzaCI6InVuc2hpZnQiXTtmb3IodmFyIHU9MDt1PGkubGVuZ3RoO3UrKylmLmFwcGx5KHRoaXMuJHJ1bGVzW2lbdV1dLHIuZGVlcENvcHkobikpfXRoaXMuJGVtYmVkc3x8KHRoaXMuJGVtYmVkcz1bXSksdGhpcy4kZW1iZWRzLnB1c2godCl9LHRoaXMuZ2V0RW1iZWRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGVtYmVkc307dmFyIGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oZSE9InN0YXJ0Inx8dC5sZW5ndGgpJiZ0LnVuc2hpZnQodGhpcy5uZXh0U3RhdGUsZSksdGhpcy5uZXh0U3RhdGV9LHQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5zaGlmdCgpLHQuc2hpZnQoKXx8InN0YXJ0In07dGhpcy5ub3JtYWxpemVSdWxlcz1mdW5jdGlvbigpe2Z1bmN0aW9uIGkocyl7dmFyIG89cltzXTtvLnByb2Nlc3NlZD0hMDtmb3IodmFyIHU9MDt1PG8ubGVuZ3RoO3UrKyl7dmFyIGE9b1t1XSxmPW51bGw7QXJyYXkuaXNBcnJheShhKSYmKGY9YSxhPXt9KSwhYS5yZWdleCYmYS5zdGFydCYmKGEucmVnZXg9YS5zdGFydCxhLm5leHR8fChhLm5leHQ9W10pLGEubmV4dC5wdXNoKHtkZWZhdWx0VG9rZW46YS50b2tlbn0se3Rva2VuOmEudG9rZW4rIi5lbmQiLHJlZ2V4OmEuZW5kfHxhLnN0YXJ0LG5leHQ6InBvcCJ9KSxhLnRva2VuPWEudG9rZW4rIi5zdGFydCIsYS5wdXNoPSEwKTt2YXIgbD1hLm5leHR8fGEucHVzaDtpZihsJiZBcnJheS5pc0FycmF5KGwpKXt2YXIgYz1hLnN0YXRlTmFtZTtjfHwoYz1hLnRva2VuLHR5cGVvZiBjIT0ic3RyaW5nIiYmKGM9Y1swXXx8IiIpLHJbY10mJihjKz1uKyspKSxyW2NdPWwsYS5uZXh0PWMsaShjKX1lbHNlIGw9PSJwb3AiJiYoYS5uZXh0PXQpO2EucHVzaCYmKGEubmV4dFN0YXRlPWEubmV4dHx8YS5wdXNoLGEubmV4dD1lLGRlbGV0ZSBhLnB1c2gpO2lmKGEucnVsZXMpZm9yKHZhciBoIGluIGEucnVsZXMpcltoXT9yW2hdLnB1c2gmJnJbaF0ucHVzaC5hcHBseShyW2hdLGEucnVsZXNbaF0pOnJbaF09YS5ydWxlc1toXTt2YXIgcD10eXBlb2YgYT09InN0cmluZyI/YTphLmluY2x1ZGU7cCYmKEFycmF5LmlzQXJyYXkocCk/Zj1wLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gcltlXX0pOmY9cltwXSk7aWYoZil7dmFyIGQ9W3UsMV0uY29uY2F0KGYpO2Eubm9Fc2NhcGUmJihkPWQuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLm5leHR9KSksby5zcGxpY2UuYXBwbHkobyxkKSx1LS19YS5rZXl3b3JkTWFwJiYoYS50b2tlbj10aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoYS5rZXl3b3JkTWFwLGEuZGVmYXVsdFRva2VufHwidGV4dCIsYS5jYXNlSW5zZW5zaXRpdmUpLGRlbGV0ZSBhLmRlZmF1bHRUb2tlbil9fXZhciBuPTAscj10aGlzLiRydWxlcztPYmplY3Qua2V5cyhyKS5mb3JFYWNoKGksdGhpcyl9LHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcj1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBzPWVbdF07biYmKHM9cy50b0xvd2VyQ2FzZSgpKTt2YXIgbz1zLnNwbGl0KHJ8fCJ8Iik7Zm9yKHZhciB1PW8ubGVuZ3RoO3UtLTspaVtvW3VdXT10fSksT2JqZWN0LmdldFByb3RvdHlwZU9mKGkpJiYoaS5fX3Byb3RvX189bnVsbCksdGhpcy4ka2V5d29yZExpc3Q9T2JqZWN0LmtleXMoaSksZT1udWxsLG4/ZnVuY3Rpb24oZSl7cmV0dXJuIGlbZS50b0xvd2VyQ2FzZSgpXXx8dH06ZnVuY3Rpb24oZSl7cmV0dXJuIGlbZV18fHR9fSx0aGlzLmdldEtleXdvcmRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGtleXdvcmRzfX0pLmNhbGwoaS5wcm90b3R5cGUpLHQuVGV4dEhpZ2hsaWdodFJ1bGVzPWl9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9iZWhhdmlvdXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWZ1bmN0aW9uKCl7dGhpcy4kYmVoYXZpb3Vycz17fX07KGZ1bmN0aW9uKCl7dGhpcy5hZGQ9ZnVuY3Rpb24oZSx0LG4pe3N3aXRjaCh1bmRlZmluZWQpe2Nhc2UgdGhpcy4kYmVoYXZpb3Vyczp0aGlzLiRiZWhhdmlvdXJzPXt9O2Nhc2UgdGhpcy4kYmVoYXZpb3Vyc1tlXTp0aGlzLiRiZWhhdmlvdXJzW2VdPXt9fXRoaXMuJGJlaGF2aW91cnNbZV1bdF09bn0sdGhpcy5hZGRCZWhhdmlvdXJzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBlKWZvcih2YXIgbiBpbiBlW3RdKXRoaXMuYWRkKHQsbixlW3RdW25dKX0sdGhpcy5yZW1vdmU9ZnVuY3Rpb24oZSl7dGhpcy4kYmVoYXZpb3VycyYmdGhpcy4kYmVoYXZpb3Vyc1tlXSYmZGVsZXRlIHRoaXMuJGJlaGF2aW91cnNbZV19LHRoaXMuaW5oZXJpdD1mdW5jdGlvbihlLHQpe2lmKHR5cGVvZiBlPT0iZnVuY3Rpb24iKXZhciBuPShuZXcgZSkuZ2V0QmVoYXZpb3Vycyh0KTtlbHNlIHZhciBuPWUuZ2V0QmVoYXZpb3Vycyh0KTt0aGlzLmFkZEJlaGF2aW91cnMobil9LHRoaXMuZ2V0QmVoYXZpb3Vycz1mdW5jdGlvbihlKXtpZighZSlyZXR1cm4gdGhpcy4kYmVoYXZpb3Vyczt2YXIgdD17fTtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl0aGlzLiRiZWhhdmlvdXJzW2Vbbl1dJiYodFtlW25dXT10aGlzLiRiZWhhdmlvdXJzW2Vbbl1dKTtyZXR1cm4gdH19KS5jYWxsKHIucHJvdG90eXBlKSx0LkJlaGF2aW91cj1yfSksYWNlLmRlZmluZSgiYWNlL3Rva2VuX2l0ZXJhdG9yIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuL3JhbmdlIikuUmFuZ2UsaT1mdW5jdGlvbihlLHQsbil7dGhpcy4kc2Vzc2lvbj1lLHRoaXMuJHJvdz10LHRoaXMuJHJvd1Rva2Vucz1lLmdldFRva2Vucyh0KTt2YXIgcj1lLmdldFRva2VuQXQodCxuKTt0aGlzLiR0b2tlbkluZGV4PXI/ci5pbmRleDotMX07KGZ1bmN0aW9uKCl7dGhpcy5zdGVwQmFja3dhcmQ9ZnVuY3Rpb24oKXt0aGlzLiR0b2tlbkluZGV4LT0xO3doaWxlKHRoaXMuJHRva2VuSW5kZXg8MCl7dGhpcy4kcm93LT0xO2lmKHRoaXMuJHJvdzwwKXJldHVybiB0aGlzLiRyb3c9MCxudWxsO3RoaXMuJHJvd1Rva2Vucz10aGlzLiRzZXNzaW9uLmdldFRva2Vucyh0aGlzLiRyb3cpLHRoaXMuJHRva2VuSW5kZXg9dGhpcy4kcm93VG9rZW5zLmxlbmd0aC0xfXJldHVybiB0aGlzLiRyb3dUb2tlbnNbdGhpcy4kdG9rZW5JbmRleF19LHRoaXMuc3RlcEZvcndhcmQ9ZnVuY3Rpb24oKXt0aGlzLiR0b2tlbkluZGV4Kz0xO3ZhciBlO3doaWxlKHRoaXMuJHRva2VuSW5kZXg+PXRoaXMuJHJvd1Rva2Vucy5sZW5ndGgpe3RoaXMuJHJvdys9MSxlfHwoZT10aGlzLiRzZXNzaW9uLmdldExlbmd0aCgpKTtpZih0aGlzLiRyb3c+PWUpcmV0dXJuIHRoaXMuJHJvdz1lLTEsbnVsbDt0aGlzLiRyb3dUb2tlbnM9dGhpcy4kc2Vzc2lvbi5nZXRUb2tlbnModGhpcy4kcm93KSx0aGlzLiR0b2tlbkluZGV4PTB9cmV0dXJuIHRoaXMuJHJvd1Rva2Vuc1t0aGlzLiR0b2tlbkluZGV4XX0sdGhpcy5nZXRDdXJyZW50VG9rZW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcm93VG9rZW5zW3RoaXMuJHRva2VuSW5kZXhdfSx0aGlzLmdldEN1cnJlbnRUb2tlblJvdz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRyb3d9LHRoaXMuZ2V0Q3VycmVudFRva2VuQ29sdW1uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy4kcm93VG9rZW5zLHQ9dGhpcy4kdG9rZW5JbmRleCxuPWVbdF0uc3RhcnQ7aWYobiE9PXVuZGVmaW5lZClyZXR1cm4gbjtuPTA7d2hpbGUodD4wKXQtPTEsbis9ZVt0XS52YWx1ZS5sZW5ndGg7cmV0dXJuIG59LHRoaXMuZ2V0Q3VycmVudFRva2VuUG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm57cm93OnRoaXMuJHJvdyxjb2x1bW46dGhpcy5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKX19LHRoaXMuZ2V0Q3VycmVudFRva2VuUmFuZ2U9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLiRyb3dUb2tlbnNbdGhpcy4kdG9rZW5JbmRleF0sdD10aGlzLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpO3JldHVybiBuZXcgcih0aGlzLiRyb3csdCx0aGlzLiRyb3csdCtlLnZhbHVlLmxlbmd0aCl9fSkuY2FsbChpLnByb3RvdHlwZSksdC5Ub2tlbkl0ZXJhdG9yPWl9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9iZWhhdmlvdXIiLCJhY2UvdG9rZW5faXRlcmF0b3IiLCJhY2UvbGliL2xhbmciXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoIi4uLy4uL2xpYi9vb3AiKSxpPWUoIi4uL2JlaGF2aW91ciIpLkJlaGF2aW91cixzPWUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcixvPWUoIi4uLy4uL2xpYi9sYW5nIiksdT1bInRleHQiLCJwYXJlbi5ycGFyZW4iLCJycGFyZW4iLCJwYXJlbiIsInB1bmN0dWF0aW9uLm9wZXJhdG9yIl0sYT1bInRleHQiLCJwYXJlbi5ycGFyZW4iLCJycGFyZW4iLCJwYXJlbiIsInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwiY29tbWVudCJdLGYsbD17fSxjPXsnIic6JyInLCInIjoiJyJ9LGg9ZnVuY3Rpb24oZSl7dmFyIHQ9LTE7ZS5tdWx0aVNlbGVjdCYmKHQ9ZS5zZWxlY3Rpb24uaW5kZXgsbC5yYW5nZUNvdW50IT1lLm11bHRpU2VsZWN0LnJhbmdlQ291bnQmJihsPXtyYW5nZUNvdW50OmUubXVsdGlTZWxlY3QucmFuZ2VDb3VudH0pKTtpZihsW3RdKXJldHVybiBmPWxbdF07Zj1sW3RdPXthdXRvSW5zZXJ0ZWRCcmFja2V0czowLGF1dG9JbnNlcnRlZFJvdzotMSxhdXRvSW5zZXJ0ZWRMaW5lRW5kOiIiLG1heWJlSW5zZXJ0ZWRCcmFja2V0czowLG1heWJlSW5zZXJ0ZWRSb3c6LTEsbWF5YmVJbnNlcnRlZExpbmVTdGFydDoiIixtYXliZUluc2VydGVkTGluZUVuZDoiIn19LHA9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9ZS5lbmQucm93LWUuc3RhcnQucm93O3JldHVybnt0ZXh0Om4rdCtyLHNlbGVjdGlvbjpbMCxlLnN0YXJ0LmNvbHVtbisxLGksZS5lbmQuY29sdW1uKyhpPzA6MSldfX0sZD1mdW5jdGlvbihlKXt0aGlzLmFkZCgiYnJhY2VzIiwiaW5zZXJ0aW9uIixmdW5jdGlvbih0LG4scixpLHMpe3ZhciB1PXIuZ2V0Q3Vyc29yUG9zaXRpb24oKSxhPWkuZG9jLmdldExpbmUodS5yb3cpO2lmKHM9PSJ7Iil7aChyKTt2YXIgbD1yLmdldFNlbGVjdGlvblJhbmdlKCksYz1pLmRvYy5nZXRUZXh0UmFuZ2UobCk7aWYoYyE9PSIiJiZjIT09InsiJiZyLmdldFdyYXBCZWhhdmlvdXJzRW5hYmxlZCgpKXJldHVybiBwKGwsYywieyIsIn0iKTtpZihkLmlzU2FuZUluc2VydGlvbihyLGkpKXJldHVybi9bXF1cfVwpXS8udGVzdChhW3UuY29sdW1uXSl8fHIuaW5NdWx0aVNlbGVjdE1vZGV8fGUmJmUuYnJhY2VzPyhkLnJlY29yZEF1dG9JbnNlcnQocixpLCJ9Iikse3RleHQ6Int9IixzZWxlY3Rpb246WzEsMV19KTooZC5yZWNvcmRNYXliZUluc2VydChyLGksInsiKSx7dGV4dDoieyIsc2VsZWN0aW9uOlsxLDFdfSl9ZWxzZSBpZihzPT0ifSIpe2gocik7dmFyIHY9YS5zdWJzdHJpbmcodS5jb2x1bW4sdS5jb2x1bW4rMSk7aWYodj09In0iKXt2YXIgbT1pLiRmaW5kT3BlbmluZ0JyYWNrZXQoIn0iLHtjb2x1bW46dS5jb2x1bW4rMSxyb3c6dS5yb3d9KTtpZihtIT09bnVsbCYmZC5pc0F1dG9JbnNlcnRlZENsb3NpbmcodSxhLHMpKXJldHVybiBkLnBvcEF1dG9JbnNlcnRlZENsb3NpbmcoKSx7dGV4dDoiIixzZWxlY3Rpb246WzEsMV19fX1lbHNle2lmKHM9PSJcbiJ8fHM9PSJcclxuIil7aChyKTt2YXIgZz0iIjtkLmlzTWF5YmVJbnNlcnRlZENsb3NpbmcodSxhKSYmKGc9by5zdHJpbmdSZXBlYXQoIn0iLGYubWF5YmVJbnNlcnRlZEJyYWNrZXRzKSxkLmNsZWFyTWF5YmVJbnNlcnRlZENsb3NpbmcoKSk7dmFyIHY9YS5zdWJzdHJpbmcodS5jb2x1bW4sdS5jb2x1bW4rMSk7aWYodj09PSJ9Iil7dmFyIHk9aS5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6dS5yb3csY29sdW1uOnUuY29sdW1uKzF9LCJ9Iik7aWYoIXkpcmV0dXJuIG51bGw7dmFyIGI9dGhpcy4kZ2V0SW5kZW50KGkuZ2V0TGluZSh5LnJvdykpfWVsc2V7aWYoIWcpe2QuY2xlYXJNYXliZUluc2VydGVkQ2xvc2luZygpO3JldHVybn12YXIgYj10aGlzLiRnZXRJbmRlbnQoYSl9dmFyIHc9YitpLmdldFRhYlN0cmluZygpO3JldHVybnt0ZXh0OiJcbiIrdysiXG4iK2IrZyxzZWxlY3Rpb246WzEsdy5sZW5ndGgsMSx3Lmxlbmd0aF19fWQuY2xlYXJNYXliZUluc2VydGVkQ2xvc2luZygpfX0pLHRoaXMuYWRkKCJicmFjZXMiLCJkZWxldGlvbiIsZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgcz1yLmRvYy5nZXRUZXh0UmFuZ2UoaSk7aWYoIWkuaXNNdWx0aUxpbmUoKSYmcz09InsiKXtoKG4pO3ZhciBvPXIuZG9jLmdldExpbmUoaS5zdGFydC5yb3cpLHU9by5zdWJzdHJpbmcoaS5lbmQuY29sdW1uLGkuZW5kLmNvbHVtbisxKTtpZih1PT0ifSIpcmV0dXJuIGkuZW5kLmNvbHVtbisrLGk7Zi5tYXliZUluc2VydGVkQnJhY2tldHMtLX19KSx0aGlzLmFkZCgicGFyZW5zIiwiaW5zZXJ0aW9uIixmdW5jdGlvbihlLHQsbixyLGkpe2lmKGk9PSIoIil7aChuKTt2YXIgcz1uLmdldFNlbGVjdGlvblJhbmdlKCksbz1yLmRvYy5nZXRUZXh0UmFuZ2Uocyk7aWYobyE9PSIiJiZuLmdldFdyYXBCZWhhdmlvdXJzRW5hYmxlZCgpKXJldHVybiBwKHMsbywiKCIsIikiKTtpZihkLmlzU2FuZUluc2VydGlvbihuLHIpKXJldHVybiBkLnJlY29yZEF1dG9JbnNlcnQobixyLCIpIikse3RleHQ6IigpIixzZWxlY3Rpb246WzEsMV19fWVsc2UgaWYoaT09IikiKXtoKG4pO3ZhciB1PW4uZ2V0Q3Vyc29yUG9zaXRpb24oKSxhPXIuZG9jLmdldExpbmUodS5yb3cpLGY9YS5zdWJzdHJpbmcodS5jb2x1bW4sdS5jb2x1bW4rMSk7aWYoZj09IikiKXt2YXIgbD1yLiRmaW5kT3BlbmluZ0JyYWNrZXQoIikiLHtjb2x1bW46dS5jb2x1bW4rMSxyb3c6dS5yb3d9KTtpZihsIT09bnVsbCYmZC5pc0F1dG9JbnNlcnRlZENsb3NpbmcodSxhLGkpKXJldHVybiBkLnBvcEF1dG9JbnNlcnRlZENsb3NpbmcoKSx7dGV4dDoiIixzZWxlY3Rpb246WzEsMV19fX19KSx0aGlzLmFkZCgicGFyZW5zIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIHM9ci5kb2MuZ2V0VGV4dFJhbmdlKGkpO2lmKCFpLmlzTXVsdGlMaW5lKCkmJnM9PSIoIil7aChuKTt2YXIgbz1yLmRvYy5nZXRMaW5lKGkuc3RhcnQucm93KSx1PW8uc3Vic3RyaW5nKGkuc3RhcnQuY29sdW1uKzEsaS5zdGFydC5jb2x1bW4rMik7aWYodT09IikiKXJldHVybiBpLmVuZC5jb2x1bW4rKyxpfX0pLHRoaXMuYWRkKCJicmFja2V0cyIsImluc2VydGlvbiIsZnVuY3Rpb24oZSx0LG4scixpKXtpZihpPT0iWyIpe2gobik7dmFyIHM9bi5nZXRTZWxlY3Rpb25SYW5nZSgpLG89ci5kb2MuZ2V0VGV4dFJhbmdlKHMpO2lmKG8hPT0iIiYmbi5nZXRXcmFwQmVoYXZpb3Vyc0VuYWJsZWQoKSlyZXR1cm4gcChzLG8sIlsiLCJdIik7aWYoZC5pc1NhbmVJbnNlcnRpb24obixyKSlyZXR1cm4gZC5yZWNvcmRBdXRvSW5zZXJ0KG4sciwiXSIpLHt0ZXh0OiJbXSIsc2VsZWN0aW9uOlsxLDFdfX1lbHNlIGlmKGk9PSJdIil7aChuKTt2YXIgdT1uLmdldEN1cnNvclBvc2l0aW9uKCksYT1yLmRvYy5nZXRMaW5lKHUucm93KSxmPWEuc3Vic3RyaW5nKHUuY29sdW1uLHUuY29sdW1uKzEpO2lmKGY9PSJdIil7dmFyIGw9ci4kZmluZE9wZW5pbmdCcmFja2V0KCJdIix7Y29sdW1uOnUuY29sdW1uKzEscm93OnUucm93fSk7aWYobCE9PW51bGwmJmQuaXNBdXRvSW5zZXJ0ZWRDbG9zaW5nKHUsYSxpKSlyZXR1cm4gZC5wb3BBdXRvSW5zZXJ0ZWRDbG9zaW5nKCkse3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX19fSksdGhpcy5hZGQoImJyYWNrZXRzIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIHM9ci5kb2MuZ2V0VGV4dFJhbmdlKGkpO2lmKCFpLmlzTXVsdGlMaW5lKCkmJnM9PSJbIil7aChuKTt2YXIgbz1yLmRvYy5nZXRMaW5lKGkuc3RhcnQucm93KSx1PW8uc3Vic3RyaW5nKGkuc3RhcnQuY29sdW1uKzEsaS5zdGFydC5jb2x1bW4rMik7aWYodT09Il0iKXJldHVybiBpLmVuZC5jb2x1bW4rKyxpfX0pLHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsImluc2VydGlvbiIsZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgcz1yLiRtb2RlLiRxdW90ZXN8fGM7aWYoaS5sZW5ndGg9PTEmJnNbaV0pe2lmKHRoaXMubGluZUNvbW1lbnRTdGFydCYmdGhpcy5saW5lQ29tbWVudFN0YXJ0LmluZGV4T2YoaSkhPS0xKXJldHVybjtoKG4pO3ZhciBvPWksdT1uLmdldFNlbGVjdGlvblJhbmdlKCksYT1yLmRvYy5nZXRUZXh0UmFuZ2UodSk7aWYoYSE9PSIiJiYoYS5sZW5ndGghPTF8fCFzW2FdKSYmbi5nZXRXcmFwQmVoYXZpb3Vyc0VuYWJsZWQoKSlyZXR1cm4gcCh1LGEsbyxvKTtpZighYSl7dmFyIGY9bi5nZXRDdXJzb3JQb3NpdGlvbigpLGw9ci5kb2MuZ2V0TGluZShmLnJvdyksZD1sLnN1YnN0cmluZyhmLmNvbHVtbi0xLGYuY29sdW1uKSx2PWwuc3Vic3RyaW5nKGYuY29sdW1uLGYuY29sdW1uKzEpLG09ci5nZXRUb2tlbkF0KGYucm93LGYuY29sdW1uKSxnPXIuZ2V0VG9rZW5BdChmLnJvdyxmLmNvbHVtbisxKTtpZihkPT0iXFwiJiZtJiYvZXNjYXBlLy50ZXN0KG0udHlwZSkpcmV0dXJuIG51bGw7dmFyIHk9bSYmL3N0cmluZ3xlc2NhcGUvLnRlc3QobS50eXBlKSxiPSFnfHwvc3RyaW5nfGVzY2FwZS8udGVzdChnLnR5cGUpLHc7aWYodj09byl3PXkhPT1iLHcmJi9zdHJpbmdcLmVuZC8udGVzdChnLnR5cGUpJiYodz0hMSk7ZWxzZXtpZih5JiYhYilyZXR1cm4gbnVsbDtpZih5JiZiKXJldHVybiBudWxsO3ZhciBFPXIuJG1vZGUudG9rZW5SZTtFLmxhc3RJbmRleD0wO3ZhciBTPUUudGVzdChkKTtFLmxhc3RJbmRleD0wO3ZhciB4PUUudGVzdChkKTtpZihTfHx4KXJldHVybiBudWxsO2lmKHYmJiEvW1xzOywufSlcXVxcXS8udGVzdCh2KSlyZXR1cm4gbnVsbDt2YXIgVD1sW2YuY29sdW1uLTJdO2lmKCEoZCE9b3x8VCE9byYmIUUudGVzdChUKSkpcmV0dXJuIG51bGw7dz0hMH1yZXR1cm57dGV4dDp3P28rbzoiIixzZWxlY3Rpb246WzEsMV19fX19KSx0aGlzLmFkZCgic3RyaW5nX2RxdW90ZXMiLCJkZWxldGlvbiIsZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgcz1yLiRtb2RlLiRxdW90ZXN8fGMsbz1yLmRvYy5nZXRUZXh0UmFuZ2UoaSk7aWYoIWkuaXNNdWx0aUxpbmUoKSYmcy5oYXNPd25Qcm9wZXJ0eShvKSl7aChuKTt2YXIgdT1yLmRvYy5nZXRMaW5lKGkuc3RhcnQucm93KSxhPXUuc3Vic3RyaW5nKGkuc3RhcnQuY29sdW1uKzEsaS5zdGFydC5jb2x1bW4rMik7aWYoYT09bylyZXR1cm4gaS5lbmQuY29sdW1uKyssaX19KX07ZC5pc1NhbmVJbnNlcnRpb249ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmdldEN1cnNvclBvc2l0aW9uKCkscj1uZXcgcyh0LG4ucm93LG4uY29sdW1uKTtpZighdGhpcy4kbWF0Y2hUb2tlblR5cGUoci5nZXRDdXJyZW50VG9rZW4oKXx8InRleHQiLHUpKXtpZigvWyl9XF1dLy50ZXN0KGUuc2Vzc2lvbi5nZXRMaW5lKG4ucm93KVtuLmNvbHVtbl0pKXJldHVybiEwO3ZhciBpPW5ldyBzKHQsbi5yb3csbi5jb2x1bW4rMSk7aWYoIXRoaXMuJG1hdGNoVG9rZW5UeXBlKGkuZ2V0Q3VycmVudFRva2VuKCl8fCJ0ZXh0Iix1KSlyZXR1cm4hMX1yZXR1cm4gci5zdGVwRm9yd2FyZCgpLHIuZ2V0Q3VycmVudFRva2VuUm93KCkhPT1uLnJvd3x8dGhpcy4kbWF0Y2hUb2tlblR5cGUoci5nZXRDdXJyZW50VG9rZW4oKXx8InRleHQiLGEpfSxkLiRtYXRjaFRva2VuVHlwZT1mdW5jdGlvbihlLHQpe3JldHVybiB0LmluZGV4T2YoZS50eXBlfHxlKT4tMX0sZC5yZWNvcmRBdXRvSW5zZXJ0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLmdldEN1cnNvclBvc2l0aW9uKCksaT10LmRvYy5nZXRMaW5lKHIucm93KTt0aGlzLmlzQXV0b0luc2VydGVkQ2xvc2luZyhyLGksZi5hdXRvSW5zZXJ0ZWRMaW5lRW5kWzBdKXx8KGYuYXV0b0luc2VydGVkQnJhY2tldHM9MCksZi5hdXRvSW5zZXJ0ZWRSb3c9ci5yb3csZi5hdXRvSW5zZXJ0ZWRMaW5lRW5kPW4raS5zdWJzdHIoci5jb2x1bW4pLGYuYXV0b0luc2VydGVkQnJhY2tldHMrK30sZC5yZWNvcmRNYXliZUluc2VydD1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZS5nZXRDdXJzb3JQb3NpdGlvbigpLGk9dC5kb2MuZ2V0TGluZShyLnJvdyk7dGhpcy5pc01heWJlSW5zZXJ0ZWRDbG9zaW5nKHIsaSl8fChmLm1heWJlSW5zZXJ0ZWRCcmFja2V0cz0wKSxmLm1heWJlSW5zZXJ0ZWRSb3c9ci5yb3csZi5tYXliZUluc2VydGVkTGluZVN0YXJ0PWkuc3Vic3RyKDAsci5jb2x1bW4pK24sZi5tYXliZUluc2VydGVkTGluZUVuZD1pLnN1YnN0cihyLmNvbHVtbiksZi5tYXliZUluc2VydGVkQnJhY2tldHMrK30sZC5pc0F1dG9JbnNlcnRlZENsb3Npbmc9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBmLmF1dG9JbnNlcnRlZEJyYWNrZXRzPjAmJmUucm93PT09Zi5hdXRvSW5zZXJ0ZWRSb3cmJm49PT1mLmF1dG9JbnNlcnRlZExpbmVFbmRbMF0mJnQuc3Vic3RyKGUuY29sdW1uKT09PWYuYXV0b0luc2VydGVkTGluZUVuZH0sZC5pc01heWJlSW5zZXJ0ZWRDbG9zaW5nPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGYubWF5YmVJbnNlcnRlZEJyYWNrZXRzPjAmJmUucm93PT09Zi5tYXliZUluc2VydGVkUm93JiZ0LnN1YnN0cihlLmNvbHVtbik9PT1mLm1heWJlSW5zZXJ0ZWRMaW5lRW5kJiZ0LnN1YnN0cigwLGUuY29sdW1uKT09Zi5tYXliZUluc2VydGVkTGluZVN0YXJ0fSxkLnBvcEF1dG9JbnNlcnRlZENsb3Npbmc9ZnVuY3Rpb24oKXtmLmF1dG9JbnNlcnRlZExpbmVFbmQ9Zi5hdXRvSW5zZXJ0ZWRMaW5lRW5kLnN1YnN0cigxKSxmLmF1dG9JbnNlcnRlZEJyYWNrZXRzLS19LGQuY2xlYXJNYXliZUluc2VydGVkQ2xvc2luZz1mdW5jdGlvbigpe2YmJihmLm1heWJlSW5zZXJ0ZWRCcmFja2V0cz0wLGYubWF5YmVJbnNlcnRlZFJvdz0tMSl9LHIuaW5oZXJpdHMoZCxpKSx0LkNzdHlsZUJlaGF2aW91cj1kfSksYWNlLmRlZmluZSgiYWNlL3VuaWNvZGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPVs0OCw5LDgsMjUsNSwwLDIsMjUsNDgsMCwxMSwwLDUsMCw2LDIyLDIsMzAsMiw0NTcsNSwxMSwxNSw0LDgsMCwyLDAsMTgsMTE2LDIsMSwzLDMsOSwwLDIsMiwyLDAsMiwxOSwyLDgyLDIsMTM4LDIsNCwzLDE1NSwxMiwzNywzLDAsOCwzOCwxMCw0NCwyLDAsMiwxLDIsMSwyLDAsOSwyNiw2LDIsMzAsMTAsNyw2MSwyLDksNSwxMDEsMiw3LDMsOSwyLDE4LDMsMCwxNyw1OCwzLDEwMCwxNSw1Myw1LDAsNiw0NSwyMTEsNTcsMywxOCwyLDUsMywxMSwzLDksMiwxLDcsNiwyLDIsMiw3LDMsMSwzLDIxLDIsNiwyLDAsNCwzLDMsOCwzLDEsMywzLDksMCw1LDEsMiw0LDMsMTEsMTYsMiwyLDUsNSwxLDMsMjEsMiw2LDIsMSwyLDEsMiwxLDMsMCwyLDQsNSwxLDMsMiw0LDAsOCwzLDIsMCw4LDE1LDEyLDIsMiw4LDIsMiwyLDIxLDIsNiwyLDEsMiw0LDMsOSwyLDIsMiwyLDMsMCwxNiwzLDMsOSwxOCwyLDIsNywzLDEsMywyMSwyLDYsMiwxLDIsNCwzLDgsMywxLDMsMiw5LDEsNSwxLDIsNCwzLDksMiwwLDE3LDEsMiw1LDQsMiwyLDMsNCwxLDIsMCwyLDEsNCwxLDQsMiw0LDExLDUsNCw0LDIsMiwzLDMsMCw3LDAsMTUsOSwxOCwyLDIsNywyLDIsMiwyMiwyLDksMiw0LDQsNywyLDIsMiwzLDgsMSwyLDEsNywzLDMsOSwxOSwxLDIsNywyLDIsMiwyMiwyLDksMiw0LDMsOCwyLDIsMiwzLDgsMSw4LDAsMiwzLDMsOSwxOSwxLDIsNywyLDIsMiwyMiwyLDE1LDQsNywyLDIsMiwzLDEwLDAsOSwzLDMsOSwxMSw1LDMsMSwyLDE3LDQsMjMsMiw4LDIsMCwzLDYsNCwwLDUsNSwyLDAsMiw3LDE5LDEsMTQsNTcsNiwxNCwyLDksNDAsMSwyLDAsMywxLDIsMCwzLDAsNywzLDIsNiwyLDIsMiwwLDIsMCwzLDEsMiwxMiwyLDIsMyw0LDIsMCwyLDUsMyw5LDMsMSwzNSwwLDI0LDEsNyw5LDEyLDAsMiwwLDIsMCw1LDksMiwzNSw1LDE5LDIsNSw1LDcsMiwzNSwxMCwwLDU4LDczLDcsNzcsMywzNywxMSw0MiwyLDAsNCwzMjgsMiwzLDMsNiwyLDAsMiwzLDMsNDAsMiwzLDMsMzIsMiwzLDMsNiwyLDAsMiwzLDMsMTQsMiw1NiwyLDMsMyw2Niw1LDAsMzMsMTUsMTcsODQsMTMsNjE5LDMsMTYsMiwyNSw2LDc0LDIyLDEyLDIsNiwxMiwyMCwxMiwxOSwxMywxMiwyLDIsMiwxLDEzLDUxLDMsMjksNCwwLDUsMSwzLDksMzQsMiwzLDksNyw4Nyw5LDQyLDYsNjksMTEsMjgsNCwxMSw1LDExLDExLDM5LDMsNCwxMiw0Myw1LDI1LDcsMTAsMzgsMjcsNSw2MiwyLDI4LDMsMTAsNyw5LDE0LDAsODksNzUsNSw5LDE4LDgsMTMsNDIsNCwxMSw3MSw1NSw5LDksNCw0OCw4MywyLDIsMzAsMTQsMjMwLDIzLDI4MCwzLDUsMywzNywzLDUsMyw3LDIsMCwyLDAsMiwwLDIsMzAsMyw1MiwyLDYsMiwwLDQsMiwyLDYsNCwzLDMsNSw1LDEyLDYsMiwyLDYsNjcsMSwyMCwwLDI5LDAsMTQsMCwxNyw0LDYwLDEyLDUsMCw0LDExLDE4LDAsNSwwLDMsOSwyLDAsNCw0LDcsMCwyLDAsMiwwLDIsMywyLDEwLDMsMyw2LDQsNSwwLDUzLDEsMjY4NCw0NiwyLDQ2LDIsMTMyLDcsNiwxNSwzNywxMSw1MywxMCwwLDE3LDIyLDEwLDYsMiw2LDIsNiwyLDYsMiw2LDIsNiwyLDYsMiw2LDIsMzEsNDgsMCw0NzAsMSwzNiw1LDIsNCw2LDEsNSw4NSwzLDEsMywyLDIsODksMiwzLDYsNDAsNCw5MywxOCwyMyw1NywxNSw1MTMsNjU4MSw3NSwyMDkzOSw1MywxMTY0LDY4LDQ1LDMsMjY4LDQsMjcsMjEsMzEsMywxMywxMywxLDIsMjQsOSw2OSwxMSwxLDM4LDgsMywxMDIsMywxLDExMSw0NCwyNSw1MSwxMyw2OCwxMiw5LDcsMjMsNCwwLDUsNDUsMywzNSwxMywyOCw0LDY0LDE1LDEwLDM5LDU0LDEwLDEzLDMsOSw3LDIyLDQsMSw1LDY2LDI1LDIsMjI3LDQyLDIsMSwzLDksNywxMTE3MSwxMywyMiw1LDQ4LDg0NTMsMzAxLDMsNjEsMywxMDUsMzksNiwxMyw0LDYsMTEsMiwxMiwyLDQsMiwwLDIsMSwyLDEsMiwxMDcsMzQsMzYyLDE5LDYzLDMsNTMsNDEsMTEsNSwxNSwxNyw2LDEzLDEsMjUsMiwzMyw0LDIsMTM0LDIwLDksOCwyNSw1LDAsMiwyNSwxMiw4OCw0LDUsMyw1LDMsNSwzLDJdLGk9MCxzPVtdO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bys9MilzLnB1c2goaSs9cltvXSkscltvKzFdJiZzLnB1c2goNDUsaSs9cltvKzFdKTt0LndvcmRDaGFycz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwscyl9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS90ZXh0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2NvbmZpZyIsImFjZS90b2tlbml6ZXIiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvdW5pY29kZSIsImFjZS9saWIvbGFuZyIsImFjZS90b2tlbl9pdGVyYXRvciIsImFjZS9yYW5nZSJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgiLi4vY29uZmlnIiksaT1lKCIuLi90b2tlbml6ZXIiKS5Ub2tlbml6ZXIscz1lKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLG89ZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyLHU9ZSgiLi4vdW5pY29kZSIpLGE9ZSgiLi4vbGliL2xhbmciKSxmPWUoIi4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcixsPWUoIi4uL3JhbmdlIikuUmFuZ2UsYz1mdW5jdGlvbigpe3RoaXMuSGlnaGxpZ2h0UnVsZXM9c307KGZ1bmN0aW9uKCl7dGhpcy4kZGVmYXVsdEJlaGF2aW91cj1uZXcgbyx0aGlzLnRva2VuUmU9bmV3IFJlZ0V4cCgiXlsiK3Uud29yZENoYXJzKyJcXCRfXSsiLCJnIiksdGhpcy5ub25Ub2tlblJlPW5ldyBSZWdFeHAoIl4oPzpbXiIrdS53b3JkQ2hhcnMrIlxcJF9dfFxcc10pKyIsImciKSx0aGlzLmdldFRva2VuaXplcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLiR0b2tlbml6ZXJ8fCh0aGlzLiRoaWdobGlnaHRSdWxlcz10aGlzLiRoaWdobGlnaHRSdWxlc3x8bmV3IHRoaXMuSGlnaGxpZ2h0UnVsZXModGhpcy4kaGlnaGxpZ2h0UnVsZUNvbmZpZyksdGhpcy4kdG9rZW5pemVyPW5ldyBpKHRoaXMuJGhpZ2hsaWdodFJ1bGVzLmdldFJ1bGVzKCkpKSx0aGlzLiR0b2tlbml6ZXJ9LHRoaXMubGluZUNvbW1lbnRTdGFydD0iIix0aGlzLmJsb2NrQ29tbWVudD0iIix0aGlzLnRvZ2dsZUNvbW1lbnRMaW5lcz1mdW5jdGlvbihlLHQsbixyKXtmdW5jdGlvbiB3KGUpe2Zvcih2YXIgdD1uO3Q8PXI7dCsrKWUoaS5nZXRMaW5lKHQpLHQpfXZhciBpPXQuZG9jLHM9ITAsbz0hMCx1PUluZmluaXR5LGY9dC5nZXRUYWJTaXplKCksbD0hMTtpZighdGhpcy5saW5lQ29tbWVudFN0YXJ0KXtpZighdGhpcy5ibG9ja0NvbW1lbnQpcmV0dXJuITE7dmFyIGM9dGhpcy5ibG9ja0NvbW1lbnQuc3RhcnQsaD10aGlzLmJsb2NrQ29tbWVudC5lbmQscD1uZXcgUmVnRXhwKCJeKFxccyopKD86IithLmVzY2FwZVJlZ0V4cChjKSsiKSIpLGQ9bmV3IFJlZ0V4cCgiKD86IithLmVzY2FwZVJlZ0V4cChoKSsiKVxccyokIiksdj1mdW5jdGlvbihlLHQpe2lmKGcoZSx0KSlyZXR1cm47aWYoIXN8fC9cUy8udGVzdChlKSlpLmluc2VydEluTGluZSh7cm93OnQsY29sdW1uOmUubGVuZ3RofSxoKSxpLmluc2VydEluTGluZSh7cm93OnQsY29sdW1uOnV9LGMpfSxtPWZ1bmN0aW9uKGUsdCl7dmFyIG47KG49ZS5tYXRjaChkKSkmJmkucmVtb3ZlSW5MaW5lKHQsZS5sZW5ndGgtblswXS5sZW5ndGgsZS5sZW5ndGgpLChuPWUubWF0Y2gocCkpJiZpLnJlbW92ZUluTGluZSh0LG5bMV0ubGVuZ3RoLG5bMF0ubGVuZ3RoKX0sZz1mdW5jdGlvbihlLG4pe2lmKHAudGVzdChlKSlyZXR1cm4hMDt2YXIgcj10LmdldFRva2VucyhuKTtmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKylpZihyW2ldLnR5cGU9PT0iY29tbWVudCIpcmV0dXJuITB9fWVsc2V7aWYoQXJyYXkuaXNBcnJheSh0aGlzLmxpbmVDb21tZW50U3RhcnQpKXZhciBwPXRoaXMubGluZUNvbW1lbnRTdGFydC5tYXAoYS5lc2NhcGVSZWdFeHApLmpvaW4oInwiKSxjPXRoaXMubGluZUNvbW1lbnRTdGFydFswXTtlbHNlIHZhciBwPWEuZXNjYXBlUmVnRXhwKHRoaXMubGluZUNvbW1lbnRTdGFydCksYz10aGlzLmxpbmVDb21tZW50U3RhcnQ7cD1uZXcgUmVnRXhwKCJeKFxccyopKD86IitwKyIpID8iKSxsPXQuZ2V0VXNlU29mdFRhYnMoKTt2YXIgbT1mdW5jdGlvbihlLHQpe3ZhciBuPWUubWF0Y2gocCk7aWYoIW4pcmV0dXJuO3ZhciByPW5bMV0ubGVuZ3RoLHM9blswXS5sZW5ndGg7IWIoZSxyLHMpJiZuWzBdW3MtMV09PSIgIiYmcy0tLGkucmVtb3ZlSW5MaW5lKHQscixzKX0seT1jKyIgIix2PWZ1bmN0aW9uKGUsdCl7aWYoIXN8fC9cUy8udGVzdChlKSliKGUsdSx1KT9pLmluc2VydEluTGluZSh7cm93OnQsY29sdW1uOnV9LHkpOmkuaW5zZXJ0SW5MaW5lKHtyb3c6dCxjb2x1bW46dX0sYyl9LGc9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcC50ZXN0KGUpfSxiPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0wO3doaWxlKHQtLSYmZS5jaGFyQXQodCk9PSIgIilyKys7aWYociVmIT0wKXJldHVybiExO3ZhciByPTA7d2hpbGUoZS5jaGFyQXQobisrKT09IiAiKXIrKztyZXR1cm4gZj4yP3IlZiE9Zi0xOnIlZj09MH19dmFyIEU9SW5maW5pdHk7dyhmdW5jdGlvbihlLHQpe3ZhciBuPWUuc2VhcmNoKC9cUy8pO24hPT0tMT8objx1JiYodT1uKSxvJiYhZyhlLHQpJiYobz0hMSkpOkU+ZS5sZW5ndGgmJihFPWUubGVuZ3RoKX0pLHU9PUluZmluaXR5JiYodT1FLHM9ITEsbz0hMSksbCYmdSVmIT0wJiYodT1NYXRoLmZsb29yKHUvZikqZiksdyhvP206dil9LHRoaXMudG9nZ2xlQmxvY2tDb21tZW50PWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXRoaXMuYmxvY2tDb21tZW50O2lmKCFpKXJldHVybjshaS5zdGFydCYmaVswXSYmKGk9aVswXSk7dmFyIHM9bmV3IGYodCxyLnJvdyxyLmNvbHVtbiksbz1zLmdldEN1cnJlbnRUb2tlbigpLHU9dC5zZWxlY3Rpb24sYT10LnNlbGVjdGlvbi50b09yaWVudGVkUmFuZ2UoKSxjLGg7aWYobyYmL2NvbW1lbnQvLnRlc3Qoby50eXBlKSl7dmFyIHAsZDt3aGlsZShvJiYvY29tbWVudC8udGVzdChvLnR5cGUpKXt2YXIgdj1vLnZhbHVlLmluZGV4T2YoaS5zdGFydCk7aWYodiE9LTEpe3ZhciBtPXMuZ2V0Q3VycmVudFRva2VuUm93KCksZz1zLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpK3Y7cD1uZXcgbChtLGcsbSxnK2kuc3RhcnQubGVuZ3RoKTticmVha31vPXMuc3RlcEJhY2t3YXJkKCl9dmFyIHM9bmV3IGYodCxyLnJvdyxyLmNvbHVtbiksbz1zLmdldEN1cnJlbnRUb2tlbigpO3doaWxlKG8mJi9jb21tZW50Ly50ZXN0KG8udHlwZSkpe3ZhciB2PW8udmFsdWUuaW5kZXhPZihpLmVuZCk7aWYodiE9LTEpe3ZhciBtPXMuZ2V0Q3VycmVudFRva2VuUm93KCksZz1zLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpK3Y7ZD1uZXcgbChtLGcsbSxnK2kuZW5kLmxlbmd0aCk7YnJlYWt9bz1zLnN0ZXBGb3J3YXJkKCl9ZCYmdC5yZW1vdmUoZCkscCYmKHQucmVtb3ZlKHApLGM9cC5zdGFydC5yb3csaD0taS5zdGFydC5sZW5ndGgpfWVsc2UgaD1pLnN0YXJ0Lmxlbmd0aCxjPW4uc3RhcnQucm93LHQuaW5zZXJ0KG4uZW5kLGkuZW5kKSx0Lmluc2VydChuLnN0YXJ0LGkuc3RhcnQpO2Euc3RhcnQucm93PT1jJiYoYS5zdGFydC5jb2x1bW4rPWgpLGEuZW5kLnJvdz09YyYmKGEuZW5kLmNvbHVtbis9aCksdC5zZWxlY3Rpb24uZnJvbU9yaWVudGVkUmFuZ2UoYSl9LHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLiRnZXRJbmRlbnQodCl9LHRoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4hMX0sdGhpcy5hdXRvT3V0ZGVudD1mdW5jdGlvbihlLHQsbil7fSx0aGlzLiRnZXRJbmRlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUubWF0Y2goL15ccyovKVswXX0sdGhpcy5jcmVhdGVXb3JrZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGx9LHRoaXMuY3JlYXRlTW9kZURlbGVnYXRlcz1mdW5jdGlvbihlKXt0aGlzLiRlbWJlZHM9W10sdGhpcy4kbW9kZXM9e307Zm9yKHZhciB0IGluIGUpaWYoZVt0XSl7dmFyIG49ZVt0XSxpPW4ucHJvdG90eXBlLiRpZCxzPXIuJG1vZGVzW2ldO3N8fChyLiRtb2Rlc1tpXT1zPW5ldyBuKSxyLiRtb2Rlc1t0XXx8KHIuJG1vZGVzW3RdPXMpLHRoaXMuJGVtYmVkcy5wdXNoKHQpLHRoaXMuJG1vZGVzW3RdPXN9dmFyIG89WyJ0b2dnbGVCbG9ja0NvbW1lbnQiLCJ0b2dnbGVDb21tZW50TGluZXMiLCJnZXROZXh0TGluZUluZGVudCIsImNoZWNrT3V0ZGVudCIsImF1dG9PdXRkZW50IiwidHJhbnNmb3JtQWN0aW9uIiwiZ2V0Q29tcGxldGlvbnMiXTtmb3IodmFyIHQ9MDt0PG8ubGVuZ3RoO3QrKykoZnVuY3Rpb24oZSl7dmFyIG49b1t0XSxyPWVbbl07ZVtvW3RdXT1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkZWxlZ2F0b3Iobixhcmd1bWVudHMscil9fSkodGhpcyl9LHRoaXMuJGRlbGVnYXRvcj1mdW5jdGlvbihlLHQsbil7dmFyIHI9dFswXXx8InN0YXJ0IjtpZih0eXBlb2YgciE9InN0cmluZyIpe2lmKEFycmF5LmlzQXJyYXkoclsyXSkpe3ZhciBpPXJbMl1bclsyXS5sZW5ndGgtMV0scz10aGlzLiRtb2Rlc1tpXTtpZihzKXJldHVybiBzW2VdLmFwcGx5KHMsW3JbMV1dLmNvbmNhdChbXS5zbGljZS5jYWxsKHQsMSkpKX1yPXJbMF18fCJzdGFydCJ9Zm9yKHZhciBvPTA7bzx0aGlzLiRlbWJlZHMubGVuZ3RoO28rKyl7aWYoIXRoaXMuJG1vZGVzW3RoaXMuJGVtYmVkc1tvXV0pY29udGludWU7dmFyIHU9ci5zcGxpdCh0aGlzLiRlbWJlZHNbb10pO2lmKCF1WzBdJiZ1WzFdKXt0WzBdPXVbMV07dmFyIHM9dGhpcy4kbW9kZXNbdGhpcy4kZW1iZWRzW29dXTtyZXR1cm4gc1tlXS5hcHBseShzLHQpfX12YXIgYT1uLmFwcGx5KHRoaXMsdCk7cmV0dXJuIG4/YTp1bmRlZmluZWR9LHRoaXMudHJhbnNmb3JtQWN0aW9uPWZ1bmN0aW9uKGUsdCxuLHIsaSl7aWYodGhpcy4kYmVoYXZpb3VyKXt2YXIgcz10aGlzLiRiZWhhdmlvdXIuZ2V0QmVoYXZpb3VycygpO2Zvcih2YXIgbyBpbiBzKWlmKHNbb11bdF0pe3ZhciB1PXNbb11bdF0uYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKHUpcmV0dXJuIHV9fX0sdGhpcy5nZXRLZXl3b3Jkcz1mdW5jdGlvbihlKXtpZighdGhpcy5jb21wbGV0aW9uS2V5d29yZHMpe3ZhciB0PXRoaXMuJHRva2VuaXplci5ydWxlcyxuPVtdO2Zvcih2YXIgciBpbiB0KXt2YXIgaT10W3JdO2Zvcih2YXIgcz0wLG89aS5sZW5ndGg7czxvO3MrKylpZih0eXBlb2YgaVtzXS50b2tlbj09InN0cmluZyIpL2tleXdvcmR8c3VwcG9ydHxzdG9yYWdlLy50ZXN0KGlbc10udG9rZW4pJiZuLnB1c2goaVtzXS5yZWdleCk7ZWxzZSBpZih0eXBlb2YgaVtzXS50b2tlbj09Im9iamVjdCIpZm9yKHZhciB1PTAsYT1pW3NdLnRva2VuLmxlbmd0aDt1PGE7dSsrKWlmKC9rZXl3b3JkfHN1cHBvcnR8c3RvcmFnZS8udGVzdChpW3NdLnRva2VuW3VdKSl7dmFyIHI9aVtzXS5yZWdleC5tYXRjaCgvXCguKz9cKS9nKVt1XTtuLnB1c2goci5zdWJzdHIoMSxyLmxlbmd0aC0yKSl9fXRoaXMuY29tcGxldGlvbktleXdvcmRzPW59cmV0dXJuIGU/bi5jb25jYXQodGhpcy4ka2V5d29yZExpc3R8fFtdKTp0aGlzLiRrZXl3b3JkTGlzdH0sdGhpcy4kY3JlYXRlS2V5d29yZExpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kaGlnaGxpZ2h0UnVsZXN8fHRoaXMuZ2V0VG9rZW5pemVyKCksdGhpcy4ka2V5d29yZExpc3Q9dGhpcy4kaGlnaGxpZ2h0UnVsZXMuJGtleXdvcmRMaXN0fHxbXX0sdGhpcy5nZXRDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT10aGlzLiRrZXl3b3JkTGlzdHx8dGhpcy4kY3JlYXRlS2V5d29yZExpc3QoKTtyZXR1cm4gaS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJue25hbWU6ZSx2YWx1ZTplLHNjb3JlOjAsbWV0YToia2V5d29yZCJ9fSl9LHRoaXMuJGlkPSJhY2UvbW9kZS90ZXh0In0pLmNhbGwoYy5wcm90b3R5cGUpLHQuTW9kZT1jfSksYWNlLmRlZmluZSgiYWNlL2FwcGx5X2RlbHRhIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7dGhyb3cgY29uc29sZS5sb2coIkludmFsaWQgRGVsdGE6IixlKSwiSW52YWxpZCBEZWx0YTogIit0fWZ1bmN0aW9uIGkoZSx0KXtyZXR1cm4gdC5yb3c+PTAmJnQucm93PGUubGVuZ3RoJiZ0LmNvbHVtbj49MCYmdC5jb2x1bW48PWVbdC5yb3ddLmxlbmd0aH1mdW5jdGlvbiBzKGUsdCl7dC5hY3Rpb24hPSJpbnNlcnQiJiZ0LmFjdGlvbiE9InJlbW92ZSImJnIodCwiZGVsdGEuYWN0aW9uIG11c3QgYmUgJ2luc2VydCcgb3IgJ3JlbW92ZSciKSx0LmxpbmVzIGluc3RhbmNlb2YgQXJyYXl8fHIodCwiZGVsdGEubGluZXMgbXVzdCBiZSBhbiBBcnJheSIpLCghdC5zdGFydHx8IXQuZW5kKSYmcih0LCJkZWx0YS5zdGFydC9lbmQgbXVzdCBiZSBhbiBwcmVzZW50Iik7dmFyIG49dC5zdGFydDtpKGUsdC5zdGFydCl8fHIodCwiZGVsdGEuc3RhcnQgbXVzdCBiZSBjb250YWluZWQgaW4gZG9jdW1lbnQiKTt2YXIgcz10LmVuZDt0LmFjdGlvbj09InJlbW92ZSImJiFpKGUscykmJnIodCwiZGVsdGEuZW5kIG11c3QgY29udGFpbmVkIGluIGRvY3VtZW50IGZvciAncmVtb3ZlJyBhY3Rpb25zIik7dmFyIG89cy5yb3ctbi5yb3csdT1zLmNvbHVtbi0obz09MD9uLmNvbHVtbjowKTsobyE9dC5saW5lcy5sZW5ndGgtMXx8dC5saW5lc1tvXS5sZW5ndGghPXUpJiZyKHQsImRlbHRhLnJhbmdlIG11c3QgbWF0Y2ggZGVsdGEgbGluZXMiKX10LmFwcGx5RGVsdGE9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQuc3RhcnQucm93LGk9dC5zdGFydC5jb2x1bW4scz1lW3JdfHwiIjtzd2l0Y2godC5hY3Rpb24pe2Nhc2UiaW5zZXJ0Ijp2YXIgbz10LmxpbmVzO2lmKG8ubGVuZ3RoPT09MSllW3JdPXMuc3Vic3RyaW5nKDAsaSkrdC5saW5lc1swXStzLnN1YnN0cmluZyhpKTtlbHNle3ZhciB1PVtyLDFdLmNvbmNhdCh0LmxpbmVzKTtlLnNwbGljZS5hcHBseShlLHUpLGVbcl09cy5zdWJzdHJpbmcoMCxpKStlW3JdLGVbcit0LmxpbmVzLmxlbmd0aC0xXSs9cy5zdWJzdHJpbmcoaSl9YnJlYWs7Y2FzZSJyZW1vdmUiOnZhciBhPXQuZW5kLmNvbHVtbixmPXQuZW5kLnJvdztyPT09Zj9lW3JdPXMuc3Vic3RyaW5nKDAsaSkrcy5zdWJzdHJpbmcoYSk6ZS5zcGxpY2UocixmLXIrMSxzLnN1YnN0cmluZygwLGkpK2VbZl0uc3Vic3RyaW5nKGEpKX19fSksYWNlLmRlZmluZSgiYWNlL2FuY2hvciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuL2xpYi9vb3AiKSxpPWUoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXIscz10LkFuY2hvcj1mdW5jdGlvbihlLHQsbil7dGhpcy4kb25DaGFuZ2U9dGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpLHRoaXMuYXR0YWNoKGUpLHR5cGVvZiBuPT0idW5kZWZpbmVkIj90aGlzLnNldFBvc2l0aW9uKHQucm93LHQuY29sdW1uKTp0aGlzLnNldFBvc2l0aW9uKHQsbil9OyhmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3ZhciByPW4/ZS5jb2x1bW48PXQuY29sdW1uOmUuY29sdW1uPHQuY29sdW1uO3JldHVybiBlLnJvdzx0LnJvd3x8ZS5yb3c9PXQucm93JiZyfWZ1bmN0aW9uIHQodCxuLHIpe3ZhciBpPXQuYWN0aW9uPT0iaW5zZXJ0IixzPShpPzE6LTEpKih0LmVuZC5yb3ctdC5zdGFydC5yb3cpLG89KGk/MTotMSkqKHQuZW5kLmNvbHVtbi10LnN0YXJ0LmNvbHVtbiksdT10LnN0YXJ0LGE9aT91OnQuZW5kO3JldHVybiBlKG4sdSxyKT97cm93Om4ucm93LGNvbHVtbjpuLmNvbHVtbn06ZShhLG4sIXIpP3tyb3c6bi5yb3crcyxjb2x1bW46bi5jb2x1bW4rKG4ucm93PT1hLnJvdz9vOjApfTp7cm93OnUucm93LGNvbHVtbjp1LmNvbHVtbn19ci5pbXBsZW1lbnQodGhpcyxpKSx0aGlzLmdldFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQodGhpcy5yb3csdGhpcy5jb2x1bW4pfSx0aGlzLmdldERvY3VtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9jdW1lbnR9LHRoaXMuJGluc2VydFJpZ2h0PSExLHRoaXMub25DaGFuZ2U9ZnVuY3Rpb24oZSl7aWYoZS5zdGFydC5yb3c9PWUuZW5kLnJvdyYmZS5zdGFydC5yb3chPXRoaXMucm93KXJldHVybjtpZihlLnN0YXJ0LnJvdz50aGlzLnJvdylyZXR1cm47dmFyIG49dChlLHtyb3c6dGhpcy5yb3csY29sdW1uOnRoaXMuY29sdW1ufSx0aGlzLiRpbnNlcnRSaWdodCk7dGhpcy5zZXRQb3NpdGlvbihuLnJvdyxuLmNvbHVtbiwhMCl9LHRoaXMuc2V0UG9zaXRpb249ZnVuY3Rpb24oZSx0LG4pe3ZhciByO24/cj17cm93OmUsY29sdW1uOnR9OnI9dGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudChlLHQpO2lmKHRoaXMucm93PT1yLnJvdyYmdGhpcy5jb2x1bW49PXIuY29sdW1uKXJldHVybjt2YXIgaT17cm93OnRoaXMucm93LGNvbHVtbjp0aGlzLmNvbHVtbn07dGhpcy5yb3c9ci5yb3csdGhpcy5jb2x1bW49ci5jb2x1bW4sdGhpcy5fc2lnbmFsKCJjaGFuZ2UiLHtvbGQ6aSx2YWx1ZTpyfSl9LHRoaXMuZGV0YWNoPWZ1bmN0aW9uKCl7dGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLHRoaXMuJG9uQ2hhbmdlKX0sdGhpcy5hdHRhY2g9ZnVuY3Rpb24oZSl7dGhpcy5kb2N1bWVudD1lfHx0aGlzLmRvY3VtZW50LHRoaXMuZG9jdW1lbnQub24oImNoYW5nZSIsdGhpcy4kb25DaGFuZ2UpfSx0aGlzLiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50PWZ1bmN0aW9uKGUsdCl7dmFyIG49e307cmV0dXJuIGU+PXRoaXMuZG9jdW1lbnQuZ2V0TGVuZ3RoKCk/KG4ucm93PU1hdGgubWF4KDAsdGhpcy5kb2N1bWVudC5nZXRMZW5ndGgoKS0xKSxuLmNvbHVtbj10aGlzLmRvY3VtZW50LmdldExpbmUobi5yb3cpLmxlbmd0aCk6ZTwwPyhuLnJvdz0wLG4uY29sdW1uPTApOihuLnJvdz1lLG4uY29sdW1uPU1hdGgubWluKHRoaXMuZG9jdW1lbnQuZ2V0TGluZShuLnJvdykubGVuZ3RoLE1hdGgubWF4KDAsdCkpKSx0PDAmJihuLmNvbHVtbj0wKSxufX0pLmNhbGwocy5wcm90b3R5cGUpfSksYWNlLmRlZmluZSgiYWNlL2RvY3VtZW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvYXBwbHlfZGVsdGEiLCJhY2UvbGliL2V2ZW50X2VtaXR0ZXIiLCJhY2UvcmFuZ2UiLCJhY2UvYW5jaG9yIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuL2xpYi9vb3AiKSxpPWUoIi4vYXBwbHlfZGVsdGEiKS5hcHBseURlbHRhLHM9ZSgiLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcixvPWUoIi4vcmFuZ2UiKS5SYW5nZSx1PWUoIi4vYW5jaG9yIikuQW5jaG9yLGE9ZnVuY3Rpb24oZSl7dGhpcy4kbGluZXM9WyIiXSxlLmxlbmd0aD09PTA/dGhpcy4kbGluZXM9WyIiXTpBcnJheS5pc0FycmF5KGUpP3RoaXMuaW5zZXJ0TWVyZ2VkTGluZXMoe3JvdzowLGNvbHVtbjowfSxlKTp0aGlzLmluc2VydCh7cm93OjAsY29sdW1uOjB9LGUpfTsoZnVuY3Rpb24oKXtyLmltcGxlbWVudCh0aGlzLHMpLHRoaXMuc2V0VmFsdWU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRMZW5ndGgoKS0xO3RoaXMucmVtb3ZlKG5ldyBvKDAsMCx0LHRoaXMuZ2V0TGluZSh0KS5sZW5ndGgpKSx0aGlzLmluc2VydCh7cm93OjAsY29sdW1uOjB9LGUpfSx0aGlzLmdldFZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QWxsTGluZXMoKS5qb2luKHRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpKX0sdGhpcy5jcmVhdGVBbmNob3I9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IHUodGhpcyxlLHQpfSwiYWFhIi5zcGxpdCgvYS8pLmxlbmd0aD09PTA/dGhpcy4kc3BsaXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvXHJcbnxcci9nLCJcbiIpLnNwbGl0KCJcbiIpfTp0aGlzLiRzcGxpdD1mdW5jdGlvbihlKXtyZXR1cm4gZS5zcGxpdCgvXHJcbnxccnxcbi8pfSx0aGlzLiRkZXRlY3ROZXdMaW5lPWZ1bmN0aW9uKGUpe3ZhciB0PWUubWF0Y2goL14uKj8oXHJcbnxccnxcbikvbSk7dGhpcy4kYXV0b05ld0xpbmU9dD90WzFdOiJcbiIsdGhpcy5fc2lnbmFsKCJjaGFuZ2VOZXdMaW5lTW9kZSIpfSx0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXI9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy4kbmV3TGluZU1vZGUpe2Nhc2Uid2luZG93cyI6cmV0dXJuIlxyXG4iO2Nhc2UidW5peCI6cmV0dXJuIlxuIjtkZWZhdWx0OnJldHVybiB0aGlzLiRhdXRvTmV3TGluZXx8IlxuIn19LHRoaXMuJGF1dG9OZXdMaW5lPSIiLHRoaXMuJG5ld0xpbmVNb2RlPSJhdXRvIix0aGlzLnNldE5ld0xpbmVNb2RlPWZ1bmN0aW9uKGUpe2lmKHRoaXMuJG5ld0xpbmVNb2RlPT09ZSlyZXR1cm47dGhpcy4kbmV3TGluZU1vZGU9ZSx0aGlzLl9zaWduYWwoImNoYW5nZU5ld0xpbmVNb2RlIil9LHRoaXMuZ2V0TmV3TGluZU1vZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kbmV3TGluZU1vZGV9LHRoaXMuaXNOZXdMaW5lPWZ1bmN0aW9uKGUpe3JldHVybiBlPT0iXHJcbiJ8fGU9PSJcciJ8fGU9PSJcbiJ9LHRoaXMuZ2V0TGluZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy4kbGluZXNbZV18fCIifSx0aGlzLmdldExpbmVzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuJGxpbmVzLnNsaWNlKGUsdCsxKX0sdGhpcy5nZXRBbGxMaW5lcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldExpbmVzKDAsdGhpcy5nZXRMZW5ndGgoKSl9LHRoaXMuZ2V0TGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGxpbmVzLmxlbmd0aH0sdGhpcy5nZXRUZXh0UmFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZ2V0TGluZXNGb3JSYW5nZShlKS5qb2luKHRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpKX0sdGhpcy5nZXRMaW5lc0ZvclJhbmdlPWZ1bmN0aW9uKGUpe3ZhciB0O2lmKGUuc3RhcnQucm93PT09ZS5lbmQucm93KXQ9W3RoaXMuZ2V0TGluZShlLnN0YXJ0LnJvdykuc3Vic3RyaW5nKGUuc3RhcnQuY29sdW1uLGUuZW5kLmNvbHVtbildO2Vsc2V7dD10aGlzLmdldExpbmVzKGUuc3RhcnQucm93LGUuZW5kLnJvdyksdFswXT0odFswXXx8IiIpLnN1YnN0cmluZyhlLnN0YXJ0LmNvbHVtbik7dmFyIG49dC5sZW5ndGgtMTtlLmVuZC5yb3ctZS5zdGFydC5yb3c9PW4mJih0W25dPXRbbl0uc3Vic3RyaW5nKDAsZS5lbmQuY29sdW1uKSl9cmV0dXJuIHR9LHRoaXMuaW5zZXJ0TGluZXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJVc2Ugb2YgZG9jdW1lbnQuaW5zZXJ0TGluZXMgaXMgZGVwcmVjYXRlZC4gVXNlIHRoZSBpbnNlcnRGdWxsTGluZXMgbWV0aG9kIGluc3RlYWQuIiksdGhpcy5pbnNlcnRGdWxsTGluZXMoZSx0KX0sdGhpcy5yZW1vdmVMaW5lcz1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlVzZSBvZiBkb2N1bWVudC5yZW1vdmVMaW5lcyBpcyBkZXByZWNhdGVkLiBVc2UgdGhlIHJlbW92ZUZ1bGxMaW5lcyBtZXRob2QgaW5zdGVhZC4iKSx0aGlzLnJlbW92ZUZ1bGxMaW5lcyhlLHQpfSx0aGlzLmluc2VydE5ld0xpbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVXNlIG9mIGRvY3VtZW50Lmluc2VydE5ld0xpbmUgaXMgZGVwcmVjYXRlZC4gVXNlIGluc2VydE1lcmdlZExpbmVzKHBvc2l0aW9uLCBbJycsICcnXSkgaW5zdGVhZC4iKSx0aGlzLmluc2VydE1lcmdlZExpbmVzKGUsWyIiLCIiXSl9LHRoaXMuaW5zZXJ0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZ2V0TGVuZ3RoKCk8PTEmJnRoaXMuJGRldGVjdE5ld0xpbmUodCksdGhpcy5pbnNlcnRNZXJnZWRMaW5lcyhlLHRoaXMuJHNwbGl0KHQpKX0sdGhpcy5pbnNlcnRJbkxpbmU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNsaXBwZWRQb3MoZS5yb3csZS5jb2x1bW4pLHI9dGhpcy5wb3MoZS5yb3csZS5jb2x1bW4rdC5sZW5ndGgpO3JldHVybiB0aGlzLmFwcGx5RGVsdGEoe3N0YXJ0Om4sZW5kOnIsYWN0aW9uOiJpbnNlcnQiLGxpbmVzOlt0XX0sITApLHRoaXMuY2xvbmVQb3Mocil9LHRoaXMuY2xpcHBlZFBvcz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZ2V0TGVuZ3RoKCk7ZT09PXVuZGVmaW5lZD9lPW46ZTwwP2U9MDplPj1uJiYoZT1uLTEsdD11bmRlZmluZWQpO3ZhciByPXRoaXMuZ2V0TGluZShlKTtyZXR1cm4gdD09dW5kZWZpbmVkJiYodD1yLmxlbmd0aCksdD1NYXRoLm1pbihNYXRoLm1heCh0LDApLHIubGVuZ3RoKSx7cm93OmUsY29sdW1uOnR9fSx0aGlzLmNsb25lUG9zPWZ1bmN0aW9uKGUpe3JldHVybntyb3c6ZS5yb3csY29sdW1uOmUuY29sdW1ufX0sdGhpcy5wb3M9ZnVuY3Rpb24oZSx0KXtyZXR1cm57cm93OmUsY29sdW1uOnR9fSx0aGlzLiRjbGlwUG9zaXRpb249ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRMZW5ndGgoKTtyZXR1cm4gZS5yb3c+PXQ/KGUucm93PU1hdGgubWF4KDAsdC0xKSxlLmNvbHVtbj10aGlzLmdldExpbmUodC0xKS5sZW5ndGgpOihlLnJvdz1NYXRoLm1heCgwLGUucm93KSxlLmNvbHVtbj1NYXRoLm1pbihNYXRoLm1heChlLmNvbHVtbiwwKSx0aGlzLmdldExpbmUoZS5yb3cpLmxlbmd0aCkpLGV9LHRoaXMuaW5zZXJ0RnVsbExpbmVzPWZ1bmN0aW9uKGUsdCl7ZT1NYXRoLm1pbihNYXRoLm1heChlLDApLHRoaXMuZ2V0TGVuZ3RoKCkpO3ZhciBuPTA7ZTx0aGlzLmdldExlbmd0aCgpPyh0PXQuY29uY2F0KFsiIl0pLG49MCk6KHQ9WyIiXS5jb25jYXQodCksZS0tLG49dGhpcy4kbGluZXNbZV0ubGVuZ3RoKSx0aGlzLmluc2VydE1lcmdlZExpbmVzKHtyb3c6ZSxjb2x1bW46bn0sdCl9LHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXM9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNsaXBwZWRQb3MoZS5yb3csZS5jb2x1bW4pLHI9e3JvdzpuLnJvdyt0Lmxlbmd0aC0xLGNvbHVtbjoodC5sZW5ndGg9PTE/bi5jb2x1bW46MCkrdFt0Lmxlbmd0aC0xXS5sZW5ndGh9O3JldHVybiB0aGlzLmFwcGx5RGVsdGEoe3N0YXJ0Om4sZW5kOnIsYWN0aW9uOiJpbnNlcnQiLGxpbmVzOnR9KSx0aGlzLmNsb25lUG9zKHIpfSx0aGlzLnJlbW92ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmNsaXBwZWRQb3MoZS5zdGFydC5yb3csZS5zdGFydC5jb2x1bW4pLG49dGhpcy5jbGlwcGVkUG9zKGUuZW5kLnJvdyxlLmVuZC5jb2x1bW4pO3JldHVybiB0aGlzLmFwcGx5RGVsdGEoe3N0YXJ0OnQsZW5kOm4sYWN0aW9uOiJyZW1vdmUiLGxpbmVzOnRoaXMuZ2V0TGluZXNGb3JSYW5nZSh7c3RhcnQ6dCxlbmQ6bn0pfSksdGhpcy5jbG9uZVBvcyh0KX0sdGhpcy5yZW1vdmVJbkxpbmU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuY2xpcHBlZFBvcyhlLHQpLGk9dGhpcy5jbGlwcGVkUG9zKGUsbik7cmV0dXJuIHRoaXMuYXBwbHlEZWx0YSh7c3RhcnQ6cixlbmQ6aSxhY3Rpb246InJlbW92ZSIsbGluZXM6dGhpcy5nZXRMaW5lc0ZvclJhbmdlKHtzdGFydDpyLGVuZDppfSl9LCEwKSx0aGlzLmNsb25lUG9zKHIpfSx0aGlzLnJlbW92ZUZ1bGxMaW5lcz1mdW5jdGlvbihlLHQpe2U9TWF0aC5taW4oTWF0aC5tYXgoMCxlKSx0aGlzLmdldExlbmd0aCgpLTEpLHQ9TWF0aC5taW4oTWF0aC5tYXgoMCx0KSx0aGlzLmdldExlbmd0aCgpLTEpO3ZhciBuPXQ9PXRoaXMuZ2V0TGVuZ3RoKCktMSYmZT4wLHI9dDx0aGlzLmdldExlbmd0aCgpLTEsaT1uP2UtMTplLHM9bj90aGlzLmdldExpbmUoaSkubGVuZ3RoOjAsdT1yP3QrMTp0LGE9cj8wOnRoaXMuZ2V0TGluZSh1KS5sZW5ndGgsZj1uZXcgbyhpLHMsdSxhKSxsPXRoaXMuJGxpbmVzLnNsaWNlKGUsdCsxKTtyZXR1cm4gdGhpcy5hcHBseURlbHRhKHtzdGFydDpmLnN0YXJ0LGVuZDpmLmVuZCxhY3Rpb246InJlbW92ZSIsbGluZXM6dGhpcy5nZXRMaW5lc0ZvclJhbmdlKGYpfSksbH0sdGhpcy5yZW1vdmVOZXdMaW5lPWZ1bmN0aW9uKGUpe2U8dGhpcy5nZXRMZW5ndGgoKS0xJiZlPj0wJiZ0aGlzLmFwcGx5RGVsdGEoe3N0YXJ0OnRoaXMucG9zKGUsdGhpcy5nZXRMaW5lKGUpLmxlbmd0aCksZW5kOnRoaXMucG9zKGUrMSwwKSxhY3Rpb246InJlbW92ZSIsbGluZXM6WyIiLCIiXX0pfSx0aGlzLnJlcGxhY2U9ZnVuY3Rpb24oZSx0KXtlIGluc3RhbmNlb2Ygb3x8KGU9by5mcm9tUG9pbnRzKGUuc3RhcnQsZS5lbmQpKTtpZih0Lmxlbmd0aD09PTAmJmUuaXNFbXB0eSgpKXJldHVybiBlLnN0YXJ0O2lmKHQ9PXRoaXMuZ2V0VGV4dFJhbmdlKGUpKXJldHVybiBlLmVuZDt0aGlzLnJlbW92ZShlKTt2YXIgbjtyZXR1cm4gdD9uPXRoaXMuaW5zZXJ0KGUuc3RhcnQsdCk6bj1lLnN0YXJ0LG59LHRoaXMuYXBwbHlEZWx0YXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspdGhpcy5hcHBseURlbHRhKGVbdF0pfSx0aGlzLnJldmVydERlbHRhcz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5sZW5ndGgtMTt0Pj0wO3QtLSl0aGlzLnJldmVydERlbHRhKGVbdF0pfSx0aGlzLmFwcGx5RGVsdGE9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmFjdGlvbj09Imluc2VydCI7aWYobj9lLmxpbmVzLmxlbmd0aDw9MSYmIWUubGluZXNbMF06IW8uY29tcGFyZVBvaW50cyhlLnN0YXJ0LGUuZW5kKSlyZXR1cm47biYmZS5saW5lcy5sZW5ndGg+MmU0P3RoaXMuJHNwbGl0QW5kYXBwbHlMYXJnZURlbHRhKGUsMmU0KTooaSh0aGlzLiRsaW5lcyxlLHQpLHRoaXMuX3NpZ25hbCgiY2hhbmdlIixlKSl9LHRoaXMuJHNwbGl0QW5kYXBwbHlMYXJnZURlbHRhPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5saW5lcyxyPW4ubGVuZ3RoLXQrMSxpPWUuc3RhcnQucm93LHM9ZS5zdGFydC5jb2x1bW47Zm9yKHZhciBvPTAsdT0wO288cjtvPXUpe3UrPXQtMTt2YXIgYT1uLnNsaWNlKG8sdSk7YS5wdXNoKCIiKSx0aGlzLmFwcGx5RGVsdGEoe3N0YXJ0OnRoaXMucG9zKGkrbyxzKSxlbmQ6dGhpcy5wb3MoaSt1LHM9MCksYWN0aW9uOmUuYWN0aW9uLGxpbmVzOmF9LCEwKX1lLmxpbmVzPW4uc2xpY2UobyksZS5zdGFydC5yb3c9aStvLGUuc3RhcnQuY29sdW1uPXMsdGhpcy5hcHBseURlbHRhKGUsITApfSx0aGlzLnJldmVydERlbHRhPWZ1bmN0aW9uKGUpe3RoaXMuYXBwbHlEZWx0YSh7c3RhcnQ6dGhpcy5jbG9uZVBvcyhlLnN0YXJ0KSxlbmQ6dGhpcy5jbG9uZVBvcyhlLmVuZCksYWN0aW9uOmUuYWN0aW9uPT0iaW5zZXJ0Ij8icmVtb3ZlIjoiaW5zZXJ0IixsaW5lczplLmxpbmVzLnNsaWNlKCl9KX0sdGhpcy5pbmRleFRvUG9zaXRpb249ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLiRsaW5lc3x8dGhpcy5nZXRBbGxMaW5lcygpLHI9dGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkubGVuZ3RoO2Zvcih2YXIgaT10fHwwLHM9bi5sZW5ndGg7aTxzO2krKyl7ZS09bltpXS5sZW5ndGgrcjtpZihlPDApcmV0dXJue3JvdzppLGNvbHVtbjplK25baV0ubGVuZ3RoK3J9fXJldHVybntyb3c6cy0xLGNvbHVtbjplK25bcy0xXS5sZW5ndGgrcn19LHRoaXMucG9zaXRpb25Ub0luZGV4PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy4kbGluZXN8fHRoaXMuZ2V0QWxsTGluZXMoKSxyPXRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpLmxlbmd0aCxpPTAscz1NYXRoLm1pbihlLnJvdyxuLmxlbmd0aCk7Zm9yKHZhciBvPXR8fDA7bzxzOysrbylpKz1uW29dLmxlbmd0aCtyO3JldHVybiBpK2UuY29sdW1ufX0pLmNhbGwoYS5wcm90b3R5cGUpLHQuRG9jdW1lbnQ9YX0pLGFjZS5kZWZpbmUoImFjZS9iYWNrZ3JvdW5kX3Rva2VuaXplciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuL2xpYi9vb3AiKSxpPWUoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXIscz1mdW5jdGlvbihlLHQpe3RoaXMucnVubmluZz0hMSx0aGlzLmxpbmVzPVtdLHRoaXMuc3RhdGVzPVtdLHRoaXMuY3VycmVudExpbmU9MCx0aGlzLnRva2VuaXplcj1lO3ZhciBuPXRoaXM7dGhpcy4kd29ya2VyPWZ1bmN0aW9uKCl7aWYoIW4ucnVubmluZylyZXR1cm47dmFyIGU9bmV3IERhdGUsdD1uLmN1cnJlbnRMaW5lLHI9LTEsaT1uLmRvYyxzPXQ7d2hpbGUobi5saW5lc1t0XSl0Kys7dmFyIG89aS5nZXRMZW5ndGgoKSx1PTA7bi5ydW5uaW5nPSExO3doaWxlKHQ8byl7bi4kdG9rZW5pemVSb3codCkscj10O2RvIHQrKzt3aGlsZShuLmxpbmVzW3RdKTt1Kys7aWYodSU1PT09MCYmbmV3IERhdGUtZT4yMCl7bi5ydW5uaW5nPXNldFRpbWVvdXQobi4kd29ya2VyLDIwKTticmVha319bi5jdXJyZW50TGluZT10LHI9PS0xJiYocj10KSxzPD1yJiZuLmZpcmVVcGRhdGVFdmVudChzLHIpfX07KGZ1bmN0aW9uKCl7ci5pbXBsZW1lbnQodGhpcyxpKSx0aGlzLnNldFRva2VuaXplcj1mdW5jdGlvbihlKXt0aGlzLnRva2VuaXplcj1lLHRoaXMubGluZXM9W10sdGhpcy5zdGF0ZXM9W10sdGhpcy5zdGFydCgwKX0sdGhpcy5zZXREb2N1bWVudD1mdW5jdGlvbihlKXt0aGlzLmRvYz1lLHRoaXMubGluZXM9W10sdGhpcy5zdGF0ZXM9W10sdGhpcy5zdG9wKCl9LHRoaXMuZmlyZVVwZGF0ZUV2ZW50PWZ1bmN0aW9uKGUsdCl7dmFyIG49e2ZpcnN0OmUsbGFzdDp0fTt0aGlzLl9zaWduYWwoInVwZGF0ZSIse2RhdGE6bn0pfSx0aGlzLnN0YXJ0PWZ1bmN0aW9uKGUpe3RoaXMuY3VycmVudExpbmU9TWF0aC5taW4oZXx8MCx0aGlzLmN1cnJlbnRMaW5lLHRoaXMuZG9jLmdldExlbmd0aCgpKSx0aGlzLmxpbmVzLnNwbGljZSh0aGlzLmN1cnJlbnRMaW5lLHRoaXMubGluZXMubGVuZ3RoKSx0aGlzLnN0YXRlcy5zcGxpY2UodGhpcy5jdXJyZW50TGluZSx0aGlzLnN0YXRlcy5sZW5ndGgpLHRoaXMuc3RvcCgpLHRoaXMucnVubmluZz1zZXRUaW1lb3V0KHRoaXMuJHdvcmtlciw3MDApfSx0aGlzLnNjaGVkdWxlU3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLnJ1bm5pbmd8fCh0aGlzLnJ1bm5pbmc9c2V0VGltZW91dCh0aGlzLiR3b3JrZXIsNzAwKSl9LHRoaXMuJHVwZGF0ZU9uQ2hhbmdlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuc3RhcnQucm93LG49ZS5lbmQucm93LXQ7aWYobj09PTApdGhpcy5saW5lc1t0XT1udWxsO2Vsc2UgaWYoZS5hY3Rpb249PSJyZW1vdmUiKXRoaXMubGluZXMuc3BsaWNlKHQsbisxLG51bGwpLHRoaXMuc3RhdGVzLnNwbGljZSh0LG4rMSxudWxsKTtlbHNle3ZhciByPUFycmF5KG4rMSk7ci51bnNoaWZ0KHQsMSksdGhpcy5saW5lcy5zcGxpY2UuYXBwbHkodGhpcy5saW5lcyxyKSx0aGlzLnN0YXRlcy5zcGxpY2UuYXBwbHkodGhpcy5zdGF0ZXMscil9dGhpcy5jdXJyZW50TGluZT1NYXRoLm1pbih0LHRoaXMuY3VycmVudExpbmUsdGhpcy5kb2MuZ2V0TGVuZ3RoKCkpLHRoaXMuc3RvcCgpfSx0aGlzLnN0b3A9ZnVuY3Rpb24oKXt0aGlzLnJ1bm5pbmcmJmNsZWFyVGltZW91dCh0aGlzLnJ1bm5pbmcpLHRoaXMucnVubmluZz0hMX0sdGhpcy5nZXRUb2tlbnM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubGluZXNbZV18fHRoaXMuJHRva2VuaXplUm93KGUpfSx0aGlzLmdldFN0YXRlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmN1cnJlbnRMaW5lPT1lJiZ0aGlzLiR0b2tlbml6ZVJvdyhlKSx0aGlzLnN0YXRlc1tlXXx8InN0YXJ0In0sdGhpcy4kdG9rZW5pemVSb3c9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5kb2MuZ2V0TGluZShlKSxuPXRoaXMuc3RhdGVzW2UtMV0scj10aGlzLnRva2VuaXplci5nZXRMaW5lVG9rZW5zKHQsbixlKTtyZXR1cm4gdGhpcy5zdGF0ZXNbZV0rIiIhPXIuc3RhdGUrIiI/KHRoaXMuc3RhdGVzW2VdPXIuc3RhdGUsdGhpcy5saW5lc1tlKzFdPW51bGwsdGhpcy5jdXJyZW50TGluZT5lKzEmJih0aGlzLmN1cnJlbnRMaW5lPWUrMSkpOnRoaXMuY3VycmVudExpbmU9PWUmJih0aGlzLmN1cnJlbnRMaW5lPWUrMSksdGhpcy5saW5lc1tlXT1yLnRva2Vuc319KS5jYWxsKHMucHJvdG90eXBlKSx0LkJhY2tncm91bmRUb2tlbml6ZXI9c30pLGFjZS5kZWZpbmUoImFjZS9zZWFyY2hfaGlnaGxpZ2h0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9sYW5nIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoIi4vbGliL2xhbmciKSxpPWUoIi4vbGliL29vcCIpLHM9ZSgiLi9yYW5nZSIpLlJhbmdlLG89ZnVuY3Rpb24oZSx0LG4pe3RoaXMuc2V0UmVnZXhwKGUpLHRoaXMuY2xheno9dCx0aGlzLnR5cGU9bnx8InRleHQifTsoZnVuY3Rpb24oKXt0aGlzLk1BWF9SQU5HRVM9NTAwLHRoaXMuc2V0UmVnZXhwPWZ1bmN0aW9uKGUpe2lmKHRoaXMucmVnRXhwKyIiPT1lKyIiKXJldHVybjt0aGlzLnJlZ0V4cD1lLHRoaXMuY2FjaGU9W119LHRoaXMudXBkYXRlPWZ1bmN0aW9uKGUsdCxuLGkpe2lmKCF0aGlzLnJlZ0V4cClyZXR1cm47dmFyIG89aS5maXJzdFJvdyx1PWkubGFzdFJvdztmb3IodmFyIGE9bzthPD11O2ErKyl7dmFyIGY9dGhpcy5jYWNoZVthXTtmPT1udWxsJiYoZj1yLmdldE1hdGNoT2Zmc2V0cyhuLmdldExpbmUoYSksdGhpcy5yZWdFeHApLGYubGVuZ3RoPnRoaXMuTUFYX1JBTkdFUyYmKGY9Zi5zbGljZSgwLHRoaXMuTUFYX1JBTkdFUykpLGY9Zi5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBzKGEsZS5vZmZzZXQsYSxlLm9mZnNldCtlLmxlbmd0aCl9KSx0aGlzLmNhY2hlW2FdPWYubGVuZ3RoP2Y6IiIpO2Zvcih2YXIgbD1mLmxlbmd0aDtsLS07KXQuZHJhd1NpbmdsZUxpbmVNYXJrZXIoZSxmW2xdLnRvU2NyZWVuUmFuZ2UobiksdGhpcy5jbGF6eixpKX19fSkuY2FsbChvLnByb3RvdHlwZSksdC5TZWFyY2hIaWdobGlnaHQ9b30pLGFjZS5kZWZpbmUoImFjZS9lZGl0X3Nlc3Npb24vZm9sZF9saW5lIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBpKGUsdCl7dGhpcy5mb2xkRGF0YT1lLEFycmF5LmlzQXJyYXkodCk/dGhpcy5mb2xkcz10OnQ9dGhpcy5mb2xkcz1bdF07dmFyIG49dFt0Lmxlbmd0aC0xXTt0aGlzLnJhbmdlPW5ldyByKHRbMF0uc3RhcnQucm93LHRbMF0uc3RhcnQuY29sdW1uLG4uZW5kLnJvdyxuLmVuZC5jb2x1bW4pLHRoaXMuc3RhcnQ9dGhpcy5yYW5nZS5zdGFydCx0aGlzLmVuZD10aGlzLnJhbmdlLmVuZCx0aGlzLmZvbGRzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5zZXRGb2xkTGluZSh0aGlzKX0sdGhpcyl9dmFyIHI9ZSgiLi4vcmFuZ2UiKS5SYW5nZTsoZnVuY3Rpb24oKXt0aGlzLnNoaWZ0Um93PWZ1bmN0aW9uKGUpe3RoaXMuc3RhcnQucm93Kz1lLHRoaXMuZW5kLnJvdys9ZSx0aGlzLmZvbGRzLmZvckVhY2goZnVuY3Rpb24odCl7dC5zdGFydC5yb3crPWUsdC5lbmQucm93Kz1lfSl9LHRoaXMuYWRkRm9sZD1mdW5jdGlvbihlKXtpZihlLnNhbWVSb3cpe2lmKGUuc3RhcnQucm93PHRoaXMuc3RhcnRSb3d8fGUuZW5kUm93PnRoaXMuZW5kUm93KXRocm93IG5ldyBFcnJvcigiQ2FuJ3QgYWRkIGEgZm9sZCB0byB0aGlzIEZvbGRMaW5lIGFzIGl0IGhhcyBubyBjb25uZWN0aW9uIik7dGhpcy5mb2xkcy5wdXNoKGUpLHRoaXMuZm9sZHMuc29ydChmdW5jdGlvbihlLHQpe3JldHVybi1lLnJhbmdlLmNvbXBhcmVFbmQodC5zdGFydC5yb3csdC5zdGFydC5jb2x1bW4pfSksdGhpcy5yYW5nZS5jb21wYXJlRW5kKGUuc3RhcnQucm93LGUuc3RhcnQuY29sdW1uKT4wPyh0aGlzLmVuZC5yb3c9ZS5lbmQucm93LHRoaXMuZW5kLmNvbHVtbj1lLmVuZC5jb2x1bW4pOnRoaXMucmFuZ2UuY29tcGFyZVN0YXJ0KGUuZW5kLnJvdyxlLmVuZC5jb2x1bW4pPDAmJih0aGlzLnN0YXJ0LnJvdz1lLnN0YXJ0LnJvdyx0aGlzLnN0YXJ0LmNvbHVtbj1lLnN0YXJ0LmNvbHVtbil9ZWxzZSBpZihlLnN0YXJ0LnJvdz09dGhpcy5lbmQucm93KXRoaXMuZm9sZHMucHVzaChlKSx0aGlzLmVuZC5yb3c9ZS5lbmQucm93LHRoaXMuZW5kLmNvbHVtbj1lLmVuZC5jb2x1bW47ZWxzZXtpZihlLmVuZC5yb3chPXRoaXMuc3RhcnQucm93KXRocm93IG5ldyBFcnJvcigiVHJ5aW5nIHRvIGFkZCBmb2xkIHRvIEZvbGRSb3cgdGhhdCBkb2Vzbid0IGhhdmUgYSBtYXRjaGluZyByb3ciKTt0aGlzLmZvbGRzLnVuc2hpZnQoZSksdGhpcy5zdGFydC5yb3c9ZS5zdGFydC5yb3csdGhpcy5zdGFydC5jb2x1bW49ZS5zdGFydC5jb2x1bW59ZS5mb2xkTGluZT10aGlzfSx0aGlzLmNvbnRhaW5zUm93PWZ1bmN0aW9uKGUpe3JldHVybiBlPj10aGlzLnN0YXJ0LnJvdyYmZTw9dGhpcy5lbmQucm93fSx0aGlzLndhbGs9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPTAsaT10aGlzLmZvbGRzLHMsbyx1LGE9ITA7dD09bnVsbCYmKHQ9dGhpcy5lbmQucm93LG49dGhpcy5lbmQuY29sdW1uKTtmb3IodmFyIGY9MDtmPGkubGVuZ3RoO2YrKyl7cz1pW2ZdLG89cy5yYW5nZS5jb21wYXJlU3RhcnQodCxuKTtpZihvPT0tMSl7ZShudWxsLHQsbixyLGEpO3JldHVybn11PWUobnVsbCxzLnN0YXJ0LnJvdyxzLnN0YXJ0LmNvbHVtbixyLGEpLHU9IXUmJmUocy5wbGFjZWhvbGRlcixzLnN0YXJ0LnJvdyxzLnN0YXJ0LmNvbHVtbixyKTtpZih1fHxvPT09MClyZXR1cm47YT0hcy5zYW1lUm93LHI9cy5lbmQuY29sdW1ufWUobnVsbCx0LG4scixhKX0sdGhpcy5nZXROZXh0Rm9sZFRvPWZ1bmN0aW9uKGUsdCl7dmFyIG4scjtmb3IodmFyIGk9MDtpPHRoaXMuZm9sZHMubGVuZ3RoO2krKyl7bj10aGlzLmZvbGRzW2ldLHI9bi5yYW5nZS5jb21wYXJlRW5kKGUsdCk7aWYocj09LTEpcmV0dXJue2ZvbGQ6bixraW5kOiJhZnRlciJ9O2lmKHI9PT0wKXJldHVybntmb2xkOm4sa2luZDoiaW5zaWRlIn19cmV0dXJuIG51bGx9LHRoaXMuYWRkUmVtb3ZlQ2hhcnM9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuZ2V0TmV4dEZvbGRUbyhlLHQpLGkscztpZihyKXtpPXIuZm9sZDtpZihyLmtpbmQ9PSJpbnNpZGUiJiZpLnN0YXJ0LmNvbHVtbiE9dCYmaS5zdGFydC5yb3chPWUpd2luZG93LmNvbnNvbGUmJndpbmRvdy5jb25zb2xlLmxvZyhlLHQsaSk7ZWxzZSBpZihpLnN0YXJ0LnJvdz09ZSl7cz10aGlzLmZvbGRzO3ZhciBvPXMuaW5kZXhPZihpKTtvPT09MCYmKHRoaXMuc3RhcnQuY29sdW1uKz1uKTtmb3IobztvPHMubGVuZ3RoO28rKyl7aT1zW29dLGkuc3RhcnQuY29sdW1uKz1uO2lmKCFpLnNhbWVSb3cpcmV0dXJuO2kuZW5kLmNvbHVtbis9bn10aGlzLmVuZC5jb2x1bW4rPW59fX0sdGhpcy5zcGxpdD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZ2V0TmV4dEZvbGRUbyhlLHQpO2lmKCFufHxuLmtpbmQ9PSJpbnNpZGUiKXJldHVybiBudWxsO3ZhciByPW4uZm9sZCxzPXRoaXMuZm9sZHMsbz10aGlzLmZvbGREYXRhLHU9cy5pbmRleE9mKHIpLGE9c1t1LTFdO3RoaXMuZW5kLnJvdz1hLmVuZC5yb3csdGhpcy5lbmQuY29sdW1uPWEuZW5kLmNvbHVtbixzPXMuc3BsaWNlKHUscy5sZW5ndGgtdSk7dmFyIGY9bmV3IGkobyxzKTtyZXR1cm4gby5zcGxpY2Uoby5pbmRleE9mKHRoaXMpKzEsMCxmKSxmfSx0aGlzLm1lcmdlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZm9sZHM7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspdGhpcy5hZGRGb2xkKHRbbl0pO3ZhciByPXRoaXMuZm9sZERhdGE7ci5zcGxpY2Uoci5pbmRleE9mKGUpLDEpfSx0aGlzLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGU9W3RoaXMucmFuZ2UudG9TdHJpbmcoKSsiOiBbIl07cmV0dXJuIHRoaXMuZm9sZHMuZm9yRWFjaChmdW5jdGlvbih0KXtlLnB1c2goIiAgIit0LnRvU3RyaW5nKCkpfSksZS5wdXNoKCJdIiksZS5qb2luKCJcbiIpfSx0aGlzLmlkeFRvUG9zaXRpb249ZnVuY3Rpb24oZSl7dmFyIHQ9MDtmb3IodmFyIG49MDtuPHRoaXMuZm9sZHMubGVuZ3RoO24rKyl7dmFyIHI9dGhpcy5mb2xkc1tuXTtlLT1yLnN0YXJ0LmNvbHVtbi10O2lmKGU8MClyZXR1cm57cm93OnIuc3RhcnQucm93LGNvbHVtbjpyLnN0YXJ0LmNvbHVtbitlfTtlLT1yLnBsYWNlaG9sZGVyLmxlbmd0aDtpZihlPDApcmV0dXJuIHIuc3RhcnQ7dD1yLmVuZC5jb2x1bW59cmV0dXJue3Jvdzp0aGlzLmVuZC5yb3csY29sdW1uOnRoaXMuZW5kLmNvbHVtbitlfX19KS5jYWxsKGkucHJvdG90eXBlKSx0LkZvbGRMaW5lPWl9KSxhY2UuZGVmaW5lKCJhY2UvcmFuZ2VfbGlzdCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgiLi9yYW5nZSIpLlJhbmdlLGk9ci5jb21wYXJlUG9pbnRzLHM9ZnVuY3Rpb24oKXt0aGlzLnJhbmdlcz1bXSx0aGlzLiRiaWFzPTF9OyhmdW5jdGlvbigpe3RoaXMuY29tcGFyZVBvaW50cz1pLHRoaXMucG9pbnRJbmRleD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5yYW5nZXM7Zm9yKHZhciBzPW58fDA7czxyLmxlbmd0aDtzKyspe3ZhciBvPXJbc10sdT1pKGUsby5lbmQpO2lmKHU+MCljb250aW51ZTt2YXIgYT1pKGUsby5zdGFydCk7cmV0dXJuIHU9PT0wP3QmJmEhPT0wPy1zLTI6czphPjB8fGE9PT0wJiYhdD9zOi1zLTF9cmV0dXJuLXMtMX0sdGhpcy5hZGQ9ZnVuY3Rpb24oZSl7dmFyIHQ9IWUuaXNFbXB0eSgpLG49dGhpcy5wb2ludEluZGV4KGUuc3RhcnQsdCk7bjwwJiYobj0tbi0xKTt2YXIgcj10aGlzLnBvaW50SW5kZXgoZS5lbmQsdCxuKTtyZXR1cm4gcjwwP3I9LXItMTpyKyssdGhpcy5yYW5nZXMuc3BsaWNlKG4sci1uLGUpfSx0aGlzLmFkZExpc3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9W107Zm9yKHZhciBuPWUubGVuZ3RoO24tLTspdC5wdXNoLmFwcGx5KHQsdGhpcy5hZGQoZVtuXSkpO3JldHVybiB0fSx0aGlzLnN1YnN0cmFjdFBvaW50PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucG9pbnRJbmRleChlKTtpZih0Pj0wKXJldHVybiB0aGlzLnJhbmdlcy5zcGxpY2UodCwxKX0sdGhpcy5tZXJnZT1mdW5jdGlvbigpe3ZhciBlPVtdLHQ9dGhpcy5yYW5nZXM7dD10LnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gaShlLnN0YXJ0LHQuc3RhcnQpfSk7dmFyIG49dFswXSxyO2Zvcih2YXIgcz0xO3M8dC5sZW5ndGg7cysrKXtyPW4sbj10W3NdO3ZhciBvPWkoci5lbmQsbi5zdGFydCk7aWYobzwwKWNvbnRpbnVlO2lmKG89PTAmJiFyLmlzRW1wdHkoKSYmIW4uaXNFbXB0eSgpKWNvbnRpbnVlO2koci5lbmQsbi5lbmQpPDAmJihyLmVuZC5yb3c9bi5lbmQucm93LHIuZW5kLmNvbHVtbj1uLmVuZC5jb2x1bW4pLHQuc3BsaWNlKHMsMSksZS5wdXNoKG4pLG49cixzLS19cmV0dXJuIHRoaXMucmFuZ2VzPXQsZX0sdGhpcy5jb250YWlucz1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnBvaW50SW5kZXgoe3JvdzplLGNvbHVtbjp0fSk+PTB9LHRoaXMuY29udGFpbnNQb2ludD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wb2ludEluZGV4KGUpPj0wfSx0aGlzLnJhbmdlQXRQb2ludD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnBvaW50SW5kZXgoZSk7aWYodD49MClyZXR1cm4gdGhpcy5yYW5nZXNbdF19LHRoaXMuY2xpcFJvd3M9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLnJhbmdlcztpZihuWzBdLnN0YXJ0LnJvdz50fHxuW24ubGVuZ3RoLTFdLnN0YXJ0LnJvdzxlKXJldHVybltdO3ZhciByPXRoaXMucG9pbnRJbmRleCh7cm93OmUsY29sdW1uOjB9KTtyPDAmJihyPS1yLTEpO3ZhciBpPXRoaXMucG9pbnRJbmRleCh7cm93OnQsY29sdW1uOjB9LHIpO2k8MCYmKGk9LWktMSk7dmFyIHM9W107Zm9yKHZhciBvPXI7bzxpO28rKylzLnB1c2gobltvXSk7cmV0dXJuIHN9LHRoaXMucmVtb3ZlQWxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmFuZ2VzLnNwbGljZSgwLHRoaXMucmFuZ2VzLmxlbmd0aCl9LHRoaXMuYXR0YWNoPWZ1bmN0aW9uKGUpe3RoaXMuc2Vzc2lvbiYmdGhpcy5kZXRhY2goKSx0aGlzLnNlc3Npb249ZSx0aGlzLm9uQ2hhbmdlPXRoaXMuJG9uQ2hhbmdlLmJpbmQodGhpcyksdGhpcy5zZXNzaW9uLm9uKCJjaGFuZ2UiLHRoaXMub25DaGFuZ2UpfSx0aGlzLmRldGFjaD1mdW5jdGlvbigpe2lmKCF0aGlzLnNlc3Npb24pcmV0dXJuO3RoaXMuc2Vzc2lvbi5yZW1vdmVMaXN0ZW5lcigiY2hhbmdlIix0aGlzLm9uQ2hhbmdlKSx0aGlzLnNlc3Npb249bnVsbH0sdGhpcy4kb25DaGFuZ2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdGFydCxuPWUuZW5kLHI9dC5yb3csaT1uLnJvdyxzPXRoaXMucmFuZ2VzO2Zvcih2YXIgbz0wLHU9cy5sZW5ndGg7bzx1O28rKyl7dmFyIGE9c1tvXTtpZihhLmVuZC5yb3c+PXIpYnJlYWt9aWYoZS5hY3Rpb249PSJpbnNlcnQiKXt2YXIgZj1pLXIsbD0tdC5jb2x1bW4rbi5jb2x1bW47Zm9yKDtvPHU7bysrKXt2YXIgYT1zW29dO2lmKGEuc3RhcnQucm93PnIpYnJlYWs7YS5zdGFydC5yb3c9PXImJmEuc3RhcnQuY29sdW1uPj10LmNvbHVtbiYmKGEuc3RhcnQuY29sdW1uPT10LmNvbHVtbiYmdGhpcy4kYmlhczw9MHx8KGEuc3RhcnQuY29sdW1uKz1sLGEuc3RhcnQucm93Kz1mKSk7aWYoYS5lbmQucm93PT1yJiZhLmVuZC5jb2x1bW4+PXQuY29sdW1uKXtpZihhLmVuZC5jb2x1bW49PXQuY29sdW1uJiZ0aGlzLiRiaWFzPDApY29udGludWU7YS5lbmQuY29sdW1uPT10LmNvbHVtbiYmbD4wJiZvPHUtMSYmYS5lbmQuY29sdW1uPmEuc3RhcnQuY29sdW1uJiZhLmVuZC5jb2x1bW49PXNbbysxXS5zdGFydC5jb2x1bW4mJihhLmVuZC5jb2x1bW4tPWwpLGEuZW5kLmNvbHVtbis9bCxhLmVuZC5yb3crPWZ9fX1lbHNle3ZhciBmPXItaSxsPXQuY29sdW1uLW4uY29sdW1uO2Zvcig7bzx1O28rKyl7dmFyIGE9c1tvXTtpZihhLnN0YXJ0LnJvdz5pKWJyZWFrO2lmKGEuZW5kLnJvdzxpJiYocjxhLmVuZC5yb3d8fHI9PWEuZW5kLnJvdyYmdC5jb2x1bW48YS5lbmQuY29sdW1uKSlhLmVuZC5yb3c9cixhLmVuZC5jb2x1bW49dC5jb2x1bW47ZWxzZSBpZihhLmVuZC5yb3c9PWkpaWYoYS5lbmQuY29sdW1uPD1uLmNvbHVtbil7aWYoZnx8YS5lbmQuY29sdW1uPnQuY29sdW1uKWEuZW5kLmNvbHVtbj10LmNvbHVtbixhLmVuZC5yb3c9dC5yb3d9ZWxzZSBhLmVuZC5jb2x1bW4rPWwsYS5lbmQucm93Kz1mO2Vsc2UgYS5lbmQucm93PmkmJihhLmVuZC5yb3crPWYpO2lmKGEuc3RhcnQucm93PGkmJihyPGEuc3RhcnQucm93fHxyPT1hLnN0YXJ0LnJvdyYmdC5jb2x1bW48YS5zdGFydC5jb2x1bW4pKWEuc3RhcnQucm93PXIsYS5zdGFydC5jb2x1bW49dC5jb2x1bW47ZWxzZSBpZihhLnN0YXJ0LnJvdz09aSlpZihhLnN0YXJ0LmNvbHVtbjw9bi5jb2x1bW4pe2lmKGZ8fGEuc3RhcnQuY29sdW1uPnQuY29sdW1uKWEuc3RhcnQuY29sdW1uPXQuY29sdW1uLGEuc3RhcnQucm93PXQucm93fWVsc2UgYS5zdGFydC5jb2x1bW4rPWwsYS5zdGFydC5yb3crPWY7ZWxzZSBhLnN0YXJ0LnJvdz5pJiYoYS5zdGFydC5yb3crPWYpfX1pZihmIT0wJiZvPHUpZm9yKDtvPHU7bysrKXt2YXIgYT1zW29dO2Euc3RhcnQucm93Kz1mLGEuZW5kLnJvdys9Zn19fSkuY2FsbChzLnByb3RvdHlwZSksdC5SYW5nZUxpc3Q9c30pLGFjZS5kZWZpbmUoImFjZS9lZGl0X3Nlc3Npb24vZm9sZCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZV9saXN0IiwiYWNlL2xpYi9vb3AiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG8oZSx0KXtlLnJvdy09dC5yb3csZS5yb3c9PTAmJihlLmNvbHVtbi09dC5jb2x1bW4pfWZ1bmN0aW9uIHUoZSx0KXtvKGUuc3RhcnQsdCksbyhlLmVuZCx0KX1mdW5jdGlvbiBhKGUsdCl7ZS5yb3c9PTAmJihlLmNvbHVtbis9dC5jb2x1bW4pLGUucm93Kz10LnJvd31mdW5jdGlvbiBmKGUsdCl7YShlLnN0YXJ0LHQpLGEoZS5lbmQsdCl9dmFyIHI9ZSgiLi4vcmFuZ2VfbGlzdCIpLlJhbmdlTGlzdCxpPWUoIi4uL2xpYi9vb3AiKSxzPXQuRm9sZD1mdW5jdGlvbihlLHQpe3RoaXMuZm9sZExpbmU9bnVsbCx0aGlzLnBsYWNlaG9sZGVyPXQsdGhpcy5yYW5nZT1lLHRoaXMuc3RhcnQ9ZS5zdGFydCx0aGlzLmVuZD1lLmVuZCx0aGlzLnNhbWVSb3c9ZS5zdGFydC5yb3c9PWUuZW5kLnJvdyx0aGlzLnN1YkZvbGRzPXRoaXMucmFuZ2VzPVtdfTtpLmluaGVyaXRzKHMsciksZnVuY3Rpb24oKXt0aGlzLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuJyInK3RoaXMucGxhY2Vob2xkZXIrJyIgJyt0aGlzLnJhbmdlLnRvU3RyaW5nKCl9LHRoaXMuc2V0Rm9sZExpbmU9ZnVuY3Rpb24oZSl7dGhpcy5mb2xkTGluZT1lLHRoaXMuc3ViRm9sZHMuZm9yRWFjaChmdW5jdGlvbih0KXt0LnNldEZvbGRMaW5lKGUpfSl9LHRoaXMuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJhbmdlLmNsb25lKCksdD1uZXcgcyhlLHRoaXMucGxhY2Vob2xkZXIpO3JldHVybiB0aGlzLnN1YkZvbGRzLmZvckVhY2goZnVuY3Rpb24oZSl7dC5zdWJGb2xkcy5wdXNoKGUuY2xvbmUoKSl9KSx0LmNvbGxhcHNlQ2hpbGRyZW49dGhpcy5jb2xsYXBzZUNoaWxkcmVuLHR9LHRoaXMuYWRkU3ViRm9sZD1mdW5jdGlvbihlKXtpZih0aGlzLnJhbmdlLmlzRXF1YWwoZSkpcmV0dXJuO3UoZSx0aGlzLnN0YXJ0KTt2YXIgdD1lLnN0YXJ0LnJvdyxuPWUuc3RhcnQuY29sdW1uO2Zvcih2YXIgcj0wLGk9LTE7cjx0aGlzLnN1YkZvbGRzLmxlbmd0aDtyKyspe2k9dGhpcy5zdWJGb2xkc1tyXS5yYW5nZS5jb21wYXJlKHQsbik7aWYoaSE9MSlicmVha312YXIgcz10aGlzLnN1YkZvbGRzW3JdLG89MDtpZihpPT0wKXtpZihzLnJhbmdlLmNvbnRhaW5zUmFuZ2UoZSkpcmV0dXJuIHMuYWRkU3ViRm9sZChlKTtvPTF9dmFyIHQ9ZS5yYW5nZS5lbmQucm93LG49ZS5yYW5nZS5lbmQuY29sdW1uO2Zvcih2YXIgYT1yLGk9LTE7YTx0aGlzLnN1YkZvbGRzLmxlbmd0aDthKyspe2k9dGhpcy5zdWJGb2xkc1thXS5yYW5nZS5jb21wYXJlKHQsbik7aWYoaSE9MSlicmVha31pPT0wJiZhKys7dmFyIGY9dGhpcy5zdWJGb2xkcy5zcGxpY2UocixhLXIsZSksbD1pPT0wP2YubGVuZ3RoLTE6Zi5sZW5ndGg7Zm9yKHZhciBjPW87YzxsO2MrKyllLmFkZFN1YkZvbGQoZltjXSk7cmV0dXJuIGUuc2V0Rm9sZExpbmUodGhpcy5mb2xkTGluZSksZX0sdGhpcy5yZXN0b3JlUmFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGYoZSx0aGlzLnN0YXJ0KX19LmNhbGwocy5wcm90b3R5cGUpfSksYWNlLmRlZmluZSgiYWNlL2VkaXRfc2Vzc2lvbi9mb2xkaW5nIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIiwiYWNlL2VkaXRfc2Vzc2lvbi9mb2xkX2xpbmUiLCJhY2UvZWRpdF9zZXNzaW9uL2ZvbGQiLCJhY2UvdG9rZW5faXRlcmF0b3IiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHUoKXt0aGlzLmdldEZvbGRBdD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5nZXRGb2xkTGluZShlKTtpZighcilyZXR1cm4gbnVsbDt2YXIgaT1yLmZvbGRzO2Zvcih2YXIgcz0wO3M8aS5sZW5ndGg7cysrKXt2YXIgbz1pW3NdLnJhbmdlO2lmKG8uY29udGFpbnMoZSx0KSl7aWYobj09MSYmby5pc0VuZChlLHQpJiYhby5pc0VtcHR5KCkpY29udGludWU7aWYobj09LTEmJm8uaXNTdGFydChlLHQpJiYhby5pc0VtcHR5KCkpY29udGludWU7cmV0dXJuIGlbc119fX0sdGhpcy5nZXRGb2xkc0luUmFuZ2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdGFydCxuPWUuZW5kLHI9dGhpcy4kZm9sZERhdGEsaT1bXTt0LmNvbHVtbis9MSxuLmNvbHVtbi09MTtmb3IodmFyIHM9MDtzPHIubGVuZ3RoO3MrKyl7dmFyIG89cltzXS5yYW5nZS5jb21wYXJlUmFuZ2UoZSk7aWYobz09Miljb250aW51ZTtpZihvPT0tMilicmVhazt2YXIgdT1yW3NdLmZvbGRzO2Zvcih2YXIgYT0wO2E8dS5sZW5ndGg7YSsrKXt2YXIgZj11W2FdO289Zi5yYW5nZS5jb21wYXJlUmFuZ2UoZSk7aWYobz09LTIpYnJlYWs7aWYobz09Miljb250aW51ZTtpZihvPT00MilicmVhaztpLnB1c2goZil9fXJldHVybiB0LmNvbHVtbi09MSxuLmNvbHVtbis9MSxpfSx0aGlzLmdldEZvbGRzSW5SYW5nZUxpc3Q9ZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIHQ9W107ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3Q9dC5jb25jYXQodGhpcy5nZXRGb2xkc0luUmFuZ2UoZSkpfSx0aGlzKX1lbHNlIHZhciB0PXRoaXMuZ2V0Rm9sZHNJblJhbmdlKGUpO3JldHVybiB0fSx0aGlzLmdldEFsbEZvbGRzPWZ1bmN0aW9uKCl7dmFyIGU9W10sdD10aGlzLiRmb2xkRGF0YTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKylmb3IodmFyIHI9MDtyPHRbbl0uZm9sZHMubGVuZ3RoO3IrKyllLnB1c2godFtuXS5mb2xkc1tyXSk7cmV0dXJuIGV9LHRoaXMuZ2V0Rm9sZFN0cmluZ0F0PWZ1bmN0aW9uKGUsdCxuLHIpe3I9cnx8dGhpcy5nZXRGb2xkTGluZShlKTtpZighcilyZXR1cm4gbnVsbDt2YXIgaT17ZW5kOntjb2x1bW46MH19LHMsbztmb3IodmFyIHU9MDt1PHIuZm9sZHMubGVuZ3RoO3UrKyl7bz1yLmZvbGRzW3VdO3ZhciBhPW8ucmFuZ2UuY29tcGFyZUVuZChlLHQpO2lmKGE9PS0xKXtzPXRoaXMuZ2V0TGluZShvLnN0YXJ0LnJvdykuc3Vic3RyaW5nKGkuZW5kLmNvbHVtbixvLnN0YXJ0LmNvbHVtbik7YnJlYWt9aWYoYT09PTApcmV0dXJuIG51bGw7aT1vfXJldHVybiBzfHwocz10aGlzLmdldExpbmUoby5zdGFydC5yb3cpLnN1YnN0cmluZyhpLmVuZC5jb2x1bW4pKSxuPT0tMT9zLnN1YnN0cmluZygwLHQtaS5lbmQuY29sdW1uKTpuPT0xP3Muc3Vic3RyaW5nKHQtaS5lbmQuY29sdW1uKTpzfSx0aGlzLmdldEZvbGRMaW5lPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy4kZm9sZERhdGEscj0wO3QmJihyPW4uaW5kZXhPZih0KSkscj09LTEmJihyPTApO2ZvcihyO3I8bi5sZW5ndGg7cisrKXt2YXIgaT1uW3JdO2lmKGkuc3RhcnQucm93PD1lJiZpLmVuZC5yb3c+PWUpcmV0dXJuIGk7aWYoaS5lbmQucm93PmUpcmV0dXJuIG51bGx9cmV0dXJuIG51bGx9LHRoaXMuZ2V0TmV4dEZvbGRMaW5lPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy4kZm9sZERhdGEscj0wO3QmJihyPW4uaW5kZXhPZih0KSkscj09LTEmJihyPTApO2ZvcihyO3I8bi5sZW5ndGg7cisrKXt2YXIgaT1uW3JdO2lmKGkuZW5kLnJvdz49ZSlyZXR1cm4gaX1yZXR1cm4gbnVsbH0sdGhpcy5nZXRGb2xkZWRSb3dDb3VudD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuJGZvbGREYXRhLHI9dC1lKzE7Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBzPW5baV0sbz1zLmVuZC5yb3csdT1zLnN0YXJ0LnJvdztpZihvPj10KXt1PHQmJih1Pj1lP3ItPXQtdTpyPTApO2JyZWFrfW8+PWUmJih1Pj1lP3ItPW8tdTpyLT1vLWUrMSl9cmV0dXJuIHJ9LHRoaXMuJGFkZEZvbGRMaW5lPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLiRmb2xkRGF0YS5wdXNoKGUpLHRoaXMuJGZvbGREYXRhLnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5zdGFydC5yb3ctdC5zdGFydC5yb3d9KSxlfSx0aGlzLmFkZEZvbGQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLiRmb2xkRGF0YSxyPSExLG87ZSBpbnN0YW5jZW9mIHM/bz1lOihvPW5ldyBzKHQsZSksby5jb2xsYXBzZUNoaWxkcmVuPXQuY29sbGFwc2VDaGlsZHJlbiksdGhpcy4kY2xpcFJhbmdlVG9Eb2N1bWVudChvLnJhbmdlKTt2YXIgdT1vLnN0YXJ0LnJvdyxhPW8uc3RhcnQuY29sdW1uLGY9by5lbmQucm93LGw9by5lbmQuY29sdW1uLGM9dGhpcy5nZXRGb2xkQXQodSxhLDEpLGg9dGhpcy5nZXRGb2xkQXQoZixsLC0xKTtpZihjJiZoPT1jKXJldHVybiBjLmFkZFN1YkZvbGQobyk7YyYmIWMucmFuZ2UuaXNTdGFydCh1LGEpJiZ0aGlzLnJlbW92ZUZvbGQoYyksaCYmIWgucmFuZ2UuaXNFbmQoZixsKSYmdGhpcy5yZW1vdmVGb2xkKGgpO3ZhciBwPXRoaXMuZ2V0Rm9sZHNJblJhbmdlKG8ucmFuZ2UpO3AubGVuZ3RoPjAmJih0aGlzLnJlbW92ZUZvbGRzKHApLHAuZm9yRWFjaChmdW5jdGlvbihlKXtvLmFkZFN1YkZvbGQoZSl9KSk7Zm9yKHZhciBkPTA7ZDxuLmxlbmd0aDtkKyspe3ZhciB2PW5bZF07aWYoZj09di5zdGFydC5yb3cpe3YuYWRkRm9sZChvKSxyPSEwO2JyZWFrfWlmKHU9PXYuZW5kLnJvdyl7di5hZGRGb2xkKG8pLHI9ITA7aWYoIW8uc2FtZVJvdyl7dmFyIG09bltkKzFdO2lmKG0mJm0uc3RhcnQucm93PT1mKXt2Lm1lcmdlKG0pO2JyZWFrfX1icmVha31pZihmPD12LnN0YXJ0LnJvdylicmVha31yZXR1cm4gcnx8KHY9dGhpcy4kYWRkRm9sZExpbmUobmV3IGkodGhpcy4kZm9sZERhdGEsbykpKSx0aGlzLiR1c2VXcmFwTW9kZT90aGlzLiR1cGRhdGVXcmFwRGF0YSh2LnN0YXJ0LnJvdyx2LnN0YXJ0LnJvdyk6dGhpcy4kdXBkYXRlUm93TGVuZ3RoQ2FjaGUodi5zdGFydC5yb3csdi5zdGFydC5yb3cpLHRoaXMuJG1vZGlmaWVkPSEwLHRoaXMuX3NpZ25hbCgiY2hhbmdlRm9sZCIse2RhdGE6byxhY3Rpb246ImFkZCJ9KSxvfSx0aGlzLmFkZEZvbGRzPWZ1bmN0aW9uKGUpe2UuZm9yRWFjaChmdW5jdGlvbihlKXt0aGlzLmFkZEZvbGQoZSl9LHRoaXMpfSx0aGlzLnJlbW92ZUZvbGQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5mb2xkTGluZSxuPXQuc3RhcnQucm93LHI9dC5lbmQucm93LGk9dGhpcy4kZm9sZERhdGEscz10LmZvbGRzO2lmKHMubGVuZ3RoPT0xKWkuc3BsaWNlKGkuaW5kZXhPZih0KSwxKTtlbHNlIGlmKHQucmFuZ2UuaXNFbmQoZS5lbmQucm93LGUuZW5kLmNvbHVtbikpcy5wb3AoKSx0LmVuZC5yb3c9c1tzLmxlbmd0aC0xXS5lbmQucm93LHQuZW5kLmNvbHVtbj1zW3MubGVuZ3RoLTFdLmVuZC5jb2x1bW47ZWxzZSBpZih0LnJhbmdlLmlzU3RhcnQoZS5zdGFydC5yb3csZS5zdGFydC5jb2x1bW4pKXMuc2hpZnQoKSx0LnN0YXJ0LnJvdz1zWzBdLnN0YXJ0LnJvdyx0LnN0YXJ0LmNvbHVtbj1zWzBdLnN0YXJ0LmNvbHVtbjtlbHNlIGlmKGUuc2FtZVJvdylzLnNwbGljZShzLmluZGV4T2YoZSksMSk7ZWxzZXt2YXIgbz10LnNwbGl0KGUuc3RhcnQucm93LGUuc3RhcnQuY29sdW1uKTtzPW8uZm9sZHMscy5zaGlmdCgpLG8uc3RhcnQucm93PXNbMF0uc3RhcnQucm93LG8uc3RhcnQuY29sdW1uPXNbMF0uc3RhcnQuY29sdW1ufXRoaXMuJHVwZGF0aW5nfHwodGhpcy4kdXNlV3JhcE1vZGU/dGhpcy4kdXBkYXRlV3JhcERhdGEobixyKTp0aGlzLiR1cGRhdGVSb3dMZW5ndGhDYWNoZShuLHIpKSx0aGlzLiRtb2RpZmllZD0hMCx0aGlzLl9zaWduYWwoImNoYW5nZUZvbGQiLHtkYXRhOmUsYWN0aW9uOiJyZW1vdmUifSl9LHRoaXMucmVtb3ZlRm9sZHM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspdC5wdXNoKGVbbl0pO3QuZm9yRWFjaChmdW5jdGlvbihlKXt0aGlzLnJlbW92ZUZvbGQoZSl9LHRoaXMpLHRoaXMuJG1vZGlmaWVkPSEwfSx0aGlzLmV4cGFuZEZvbGQ9ZnVuY3Rpb24oZSl7dGhpcy5yZW1vdmVGb2xkKGUpLGUuc3ViRm9sZHMuZm9yRWFjaChmdW5jdGlvbih0KXtlLnJlc3RvcmVSYW5nZSh0KSx0aGlzLmFkZEZvbGQodCl9LHRoaXMpLGUuY29sbGFwc2VDaGlsZHJlbj4wJiZ0aGlzLmZvbGRBbGwoZS5zdGFydC5yb3crMSxlLmVuZC5yb3csZS5jb2xsYXBzZUNoaWxkcmVuLTEpLGUuc3ViRm9sZHM9W119LHRoaXMuZXhwYW5kRm9sZHM9ZnVuY3Rpb24oZSl7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3RoaXMuZXhwYW5kRm9sZChlKX0sdGhpcyl9LHRoaXMudW5mb2xkPWZ1bmN0aW9uKGUsdCl7dmFyIG4saTtlPT1udWxsPyhuPW5ldyByKDAsMCx0aGlzLmdldExlbmd0aCgpLDApLHQ9ITApOnR5cGVvZiBlPT0ibnVtYmVyIj9uPW5ldyByKGUsMCxlLHRoaXMuZ2V0TGluZShlKS5sZW5ndGgpOiJyb3ciaW4gZT9uPXIuZnJvbVBvaW50cyhlLGUpOm49ZSxpPXRoaXMuZ2V0Rm9sZHNJblJhbmdlTGlzdChuKTtpZih0KXRoaXMucmVtb3ZlRm9sZHMoaSk7ZWxzZXt2YXIgcz1pO3doaWxlKHMubGVuZ3RoKXRoaXMuZXhwYW5kRm9sZHMocykscz10aGlzLmdldEZvbGRzSW5SYW5nZUxpc3Qobil9aWYoaS5sZW5ndGgpcmV0dXJuIGl9LHRoaXMuaXNSb3dGb2xkZWQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4hIXRoaXMuZ2V0Rm9sZExpbmUoZSx0KX0sdGhpcy5nZXRSb3dGb2xkRW5kPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5nZXRGb2xkTGluZShlLHQpO3JldHVybiBuP24uZW5kLnJvdzplfSx0aGlzLmdldFJvd0ZvbGRTdGFydD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZ2V0Rm9sZExpbmUoZSx0KTtyZXR1cm4gbj9uLnN0YXJ0LnJvdzplfSx0aGlzLmdldEZvbGREaXNwbGF5TGluZT1mdW5jdGlvbihlLHQsbixyLGkpe3I9PW51bGwmJihyPWUuc3RhcnQucm93KSxpPT1udWxsJiYoaT0wKSx0PT1udWxsJiYodD1lLmVuZC5yb3cpLG49PW51bGwmJihuPXRoaXMuZ2V0TGluZSh0KS5sZW5ndGgpO3ZhciBzPXRoaXMuZG9jLG89IiI7cmV0dXJuIGUud2FsayhmdW5jdGlvbihlLHQsbix1KXtpZih0PHIpcmV0dXJuO2lmKHQ9PXIpe2lmKG48aSlyZXR1cm47dT1NYXRoLm1heChpLHUpfWUhPW51bGw/bys9ZTpvKz1zLmdldExpbmUodCkuc3Vic3RyaW5nKHUsbil9LHQsbiksb30sdGhpcy5nZXREaXNwbGF5TGluZT1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT10aGlzLmdldEZvbGRMaW5lKGUpO2lmKCFpKXt2YXIgcztyZXR1cm4gcz10aGlzLmRvYy5nZXRMaW5lKGUpLHMuc3Vic3RyaW5nKHJ8fDAsdHx8cy5sZW5ndGgpfXJldHVybiB0aGlzLmdldEZvbGREaXNwbGF5TGluZShpLGUsdCxuLHIpfSx0aGlzLiRjbG9uZUZvbGREYXRhPWZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJuIGU9dGhpcy4kZm9sZERhdGEubWFwKGZ1bmN0aW9uKHQpe3ZhciBuPXQuZm9sZHMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNsb25lKCl9KTtyZXR1cm4gbmV3IGkoZSxuKX0pLGV9LHRoaXMudG9nZ2xlRm9sZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnNlbGVjdGlvbixuPXQuZ2V0UmFuZ2UoKSxyLGk7aWYobi5pc0VtcHR5KCkpe3ZhciBzPW4uc3RhcnQ7cj10aGlzLmdldEZvbGRBdChzLnJvdyxzLmNvbHVtbik7aWYocil7dGhpcy5leHBhbmRGb2xkKHIpO3JldHVybn0oaT10aGlzLmZpbmRNYXRjaGluZ0JyYWNrZXQocykpP24uY29tcGFyZVBvaW50KGkpPT0xP24uZW5kPWk6KG4uc3RhcnQ9aSxuLnN0YXJ0LmNvbHVtbisrLG4uZW5kLmNvbHVtbi0tKTooaT10aGlzLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3JvdzpzLnJvdyxjb2x1bW46cy5jb2x1bW4rMX0pKT8obi5jb21wYXJlUG9pbnQoaSk9PTE/bi5lbmQ9aTpuLnN0YXJ0PWksbi5zdGFydC5jb2x1bW4rKyk6bj10aGlzLmdldENvbW1lbnRGb2xkUmFuZ2Uocy5yb3cscy5jb2x1bW4pfHxufWVsc2V7dmFyIG89dGhpcy5nZXRGb2xkc0luUmFuZ2Uobik7aWYoZSYmby5sZW5ndGgpe3RoaXMuZXhwYW5kRm9sZHMobyk7cmV0dXJufW8ubGVuZ3RoPT0xJiYocj1vWzBdKX1yfHwocj10aGlzLmdldEZvbGRBdChuLnN0YXJ0LnJvdyxuLnN0YXJ0LmNvbHVtbikpO2lmKHImJnIucmFuZ2UudG9TdHJpbmcoKT09bi50b1N0cmluZygpKXt0aGlzLmV4cGFuZEZvbGQocik7cmV0dXJufXZhciB1PSIuLi4iO2lmKCFuLmlzTXVsdGlMaW5lKCkpe3U9dGhpcy5nZXRUZXh0UmFuZ2Uobik7aWYodS5sZW5ndGg8NClyZXR1cm47dT11LnRyaW0oKS5zdWJzdHJpbmcoMCwyKSsiLi4ifXRoaXMuYWRkRm9sZCh1LG4pfSx0aGlzLmdldENvbW1lbnRGb2xkUmFuZ2U9ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW5ldyBvKHRoaXMsZSx0KSxzPWkuZ2V0Q3VycmVudFRva2VuKCksdT1zLnR5cGU7aWYocyYmL15jb21tZW50fHN0cmluZy8udGVzdCh1KSl7dT11Lm1hdGNoKC9jb21tZW50fHN0cmluZy8pWzBdLHU9PSJjb21tZW50IiYmKHUrPSJ8ZG9jLXN0YXJ0Iik7dmFyIGE9bmV3IFJlZ0V4cCh1KSxmPW5ldyByO2lmKG4hPTEpe2RvIHM9aS5zdGVwQmFja3dhcmQoKTt3aGlsZShzJiZhLnRlc3Qocy50eXBlKSk7aS5zdGVwRm9yd2FyZCgpfWYuc3RhcnQucm93PWkuZ2V0Q3VycmVudFRva2VuUm93KCksZi5zdGFydC5jb2x1bW49aS5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSsyLGk9bmV3IG8odGhpcyxlLHQpO2lmKG4hPS0xKXt2YXIgbD0tMTtkb3tzPWkuc3RlcEZvcndhcmQoKTtpZihsPT0tMSl7dmFyIGM9dGhpcy5nZXRTdGF0ZShpLiRyb3cpO2EudGVzdChjKXx8KGw9aS4kcm93KX1lbHNlIGlmKGkuJHJvdz5sKWJyZWFrfXdoaWxlKHMmJmEudGVzdChzLnR5cGUpKTtzPWkuc3RlcEJhY2t3YXJkKCl9ZWxzZSBzPWkuZ2V0Q3VycmVudFRva2VuKCk7cmV0dXJuIGYuZW5kLnJvdz1pLmdldEN1cnJlbnRUb2tlblJvdygpLGYuZW5kLmNvbHVtbj1pLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpK3MudmFsdWUubGVuZ3RoLTIsZn19LHRoaXMuZm9sZEFsbD1mdW5jdGlvbihlLHQsbil7bj09dW5kZWZpbmVkJiYobj0xZTUpO3ZhciByPXRoaXMuZm9sZFdpZGdldHM7aWYoIXIpcmV0dXJuO3Q9dHx8dGhpcy5nZXRMZW5ndGgoKSxlPWV8fDA7Zm9yKHZhciBpPWU7aTx0O2krKyl7cltpXT09bnVsbCYmKHJbaV09dGhpcy5nZXRGb2xkV2lkZ2V0KGkpKTtpZihyW2ldIT0ic3RhcnQiKWNvbnRpbnVlO3ZhciBzPXRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKGkpO2lmKHMmJnMuaXNNdWx0aUxpbmUoKSYmcy5lbmQucm93PD10JiZzLnN0YXJ0LnJvdz49ZSl7aT1zLmVuZC5yb3c7dHJ5e3ZhciBvPXRoaXMuYWRkRm9sZCgiLi4uIixzKTtvJiYoby5jb2xsYXBzZUNoaWxkcmVuPW4pfWNhdGNoKHUpe319fX0sdGhpcy4kZm9sZFN0eWxlcz17bWFudWFsOjEsbWFya2JlZ2luOjEsbWFya2JlZ2luZW5kOjF9LHRoaXMuJGZvbGRTdHlsZT0ibWFya2JlZ2luIix0aGlzLnNldEZvbGRTdHlsZT1mdW5jdGlvbihlKXtpZighdGhpcy4kZm9sZFN0eWxlc1tlXSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9sZCBzdHlsZTogIitlKyJbIitPYmplY3Qua2V5cyh0aGlzLiRmb2xkU3R5bGVzKS5qb2luKCIsICIpKyJdIik7aWYodGhpcy4kZm9sZFN0eWxlPT1lKXJldHVybjt0aGlzLiRmb2xkU3R5bGU9ZSxlPT0ibWFudWFsIiYmdGhpcy51bmZvbGQoKTt2YXIgdD10aGlzLiRmb2xkTW9kZTt0aGlzLiRzZXRGb2xkaW5nKG51bGwpLHRoaXMuJHNldEZvbGRpbmcodCl9LHRoaXMuJHNldEZvbGRpbmc9ZnVuY3Rpb24oZSl7aWYodGhpcy4kZm9sZE1vZGU9PWUpcmV0dXJuO3RoaXMuJGZvbGRNb2RlPWUsdGhpcy5vZmYoImNoYW5nZSIsdGhpcy4kdXBkYXRlRm9sZFdpZGdldHMpLHRoaXMub2ZmKCJ0b2tlbml6ZXJVcGRhdGUiLHRoaXMuJHRva2VuaXplclVwZGF0ZUZvbGRXaWRnZXRzKSx0aGlzLl9zaWduYWwoImNoYW5nZUFubm90YXRpb24iKTtpZighZXx8dGhpcy4kZm9sZFN0eWxlPT0ibWFudWFsIil7dGhpcy5mb2xkV2lkZ2V0cz1udWxsO3JldHVybn10aGlzLmZvbGRXaWRnZXRzPVtdLHRoaXMuZ2V0Rm9sZFdpZGdldD1lLmdldEZvbGRXaWRnZXQuYmluZChlLHRoaXMsdGhpcy4kZm9sZFN0eWxlKSx0aGlzLmdldEZvbGRXaWRnZXRSYW5nZT1lLmdldEZvbGRXaWRnZXRSYW5nZS5iaW5kKGUsdGhpcyx0aGlzLiRmb2xkU3R5bGUpLHRoaXMuJHVwZGF0ZUZvbGRXaWRnZXRzPXRoaXMudXBkYXRlRm9sZFdpZGdldHMuYmluZCh0aGlzKSx0aGlzLiR0b2tlbml6ZXJVcGRhdGVGb2xkV2lkZ2V0cz10aGlzLnRva2VuaXplclVwZGF0ZUZvbGRXaWRnZXRzLmJpbmQodGhpcyksdGhpcy5vbigiY2hhbmdlIix0aGlzLiR1cGRhdGVGb2xkV2lkZ2V0cyksdGhpcy5vbigidG9rZW5pemVyVXBkYXRlIix0aGlzLiR0b2tlbml6ZXJVcGRhdGVGb2xkV2lkZ2V0cyl9LHRoaXMuZ2V0UGFyZW50Rm9sZFJhbmdlRGF0YT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZm9sZFdpZGdldHM7aWYoIW58fHQmJm5bZV0pcmV0dXJue307dmFyIHI9ZS0xLGk7d2hpbGUocj49MCl7dmFyIHM9bltyXTtzPT1udWxsJiYocz1uW3JdPXRoaXMuZ2V0Rm9sZFdpZGdldChyKSk7aWYocz09InN0YXJ0Iil7dmFyIG89dGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2Uocik7aXx8KGk9byk7aWYobyYmby5lbmQucm93Pj1lKWJyZWFrfXItLX1yZXR1cm57cmFuZ2U6ciE9PS0xJiZvLGZpcnN0UmFuZ2U6aX19LHRoaXMub25Gb2xkV2lkZ2V0Q2xpY2s9ZnVuY3Rpb24oZSx0KXt0PXQuZG9tRXZlbnQ7dmFyIG49e2NoaWxkcmVuOnQuc2hpZnRLZXksYWxsOnQuY3RybEtleXx8dC5tZXRhS2V5LHNpYmxpbmdzOnQuYWx0S2V5fSxyPXRoaXMuJHRvZ2dsZUZvbGRXaWRnZXQoZSxuKTtpZighcil7dmFyIGk9dC50YXJnZXR8fHQuc3JjRWxlbWVudDtpJiYvYWNlX2ZvbGQtd2lkZ2V0Ly50ZXN0KGkuY2xhc3NOYW1lKSYmKGkuY2xhc3NOYW1lKz0iIGFjZV9pbnZhbGlkIil9fSx0aGlzLiR0b2dnbGVGb2xkV2lkZ2V0PWZ1bmN0aW9uKGUsdCl7aWYoIXRoaXMuZ2V0Rm9sZFdpZGdldClyZXR1cm47dmFyIG49dGhpcy5nZXRGb2xkV2lkZ2V0KGUpLHI9dGhpcy5nZXRMaW5lKGUpLGk9bj09PSJlbmQiPy0xOjEscz10aGlzLmdldEZvbGRBdChlLGk9PT0tMT8wOnIubGVuZ3RoLGkpO2lmKHMpcmV0dXJuIHQuY2hpbGRyZW58fHQuYWxsP3RoaXMucmVtb3ZlRm9sZChzKTp0aGlzLmV4cGFuZEZvbGQocyksczt2YXIgbz10aGlzLmdldEZvbGRXaWRnZXRSYW5nZShlLCEwKTtpZihvJiYhby5pc011bHRpTGluZSgpKXtzPXRoaXMuZ2V0Rm9sZEF0KG8uc3RhcnQucm93LG8uc3RhcnQuY29sdW1uLDEpO2lmKHMmJm8uaXNFcXVhbChzLnJhbmdlKSlyZXR1cm4gdGhpcy5yZW1vdmVGb2xkKHMpLHN9aWYodC5zaWJsaW5ncyl7dmFyIHU9dGhpcy5nZXRQYXJlbnRGb2xkUmFuZ2VEYXRhKGUpO2lmKHUucmFuZ2UpdmFyIGE9dS5yYW5nZS5zdGFydC5yb3crMSxmPXUucmFuZ2UuZW5kLnJvdzt0aGlzLmZvbGRBbGwoYSxmLHQuYWxsPzFlNDowKX1lbHNlIHQuY2hpbGRyZW4/KGY9bz9vLmVuZC5yb3c6dGhpcy5nZXRMZW5ndGgoKSx0aGlzLmZvbGRBbGwoZSsxLGYsdC5hbGw/MWU0OjApKTpvJiYodC5hbGwmJihvLmNvbGxhcHNlQ2hpbGRyZW49MWU0KSx0aGlzLmFkZEZvbGQoIi4uLiIsbykpO3JldHVybiBvfSx0aGlzLnRvZ2dsZUZvbGRXaWRnZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5zZWxlY3Rpb24uZ2V0Q3Vyc29yKCkucm93O3Q9dGhpcy5nZXRSb3dGb2xkU3RhcnQodCk7dmFyIG49dGhpcy4kdG9nZ2xlRm9sZFdpZGdldCh0LHt9KTtpZihuKXJldHVybjt2YXIgcj10aGlzLmdldFBhcmVudEZvbGRSYW5nZURhdGEodCwhMCk7bj1yLnJhbmdlfHxyLmZpcnN0UmFuZ2U7aWYobil7dD1uLnN0YXJ0LnJvdzt2YXIgaT10aGlzLmdldEZvbGRBdCh0LHRoaXMuZ2V0TGluZSh0KS5sZW5ndGgsMSk7aT90aGlzLnJlbW92ZUZvbGQoaSk6dGhpcy5hZGRGb2xkKCIuLi4iLG4pfX0sdGhpcy51cGRhdGVGb2xkV2lkZ2V0cz1mdW5jdGlvbihlKXt2YXIgdD1lLnN0YXJ0LnJvdyxuPWUuZW5kLnJvdy10O2lmKG49PT0wKXRoaXMuZm9sZFdpZGdldHNbdF09bnVsbDtlbHNlIGlmKGUuYWN0aW9uPT0icmVtb3ZlIil0aGlzLmZvbGRXaWRnZXRzLnNwbGljZSh0LG4rMSxudWxsKTtlbHNle3ZhciByPUFycmF5KG4rMSk7ci51bnNoaWZ0KHQsMSksdGhpcy5mb2xkV2lkZ2V0cy5zcGxpY2UuYXBwbHkodGhpcy5mb2xkV2lkZ2V0cyxyKX19LHRoaXMudG9rZW5pemVyVXBkYXRlRm9sZFdpZGdldHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kYXRhO3QuZmlyc3QhPXQubGFzdCYmdGhpcy5mb2xkV2lkZ2V0cy5sZW5ndGg+dC5maXJzdCYmdGhpcy5mb2xkV2lkZ2V0cy5zcGxpY2UodC5maXJzdCx0aGlzLmZvbGRXaWRnZXRzLmxlbmd0aCl9fXZhciByPWUoIi4uL3JhbmdlIikuUmFuZ2UsaT1lKCIuL2ZvbGRfbGluZSIpLkZvbGRMaW5lLHM9ZSgiLi9mb2xkIikuRm9sZCxvPWUoIi4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjt0LkZvbGRpbmc9dX0pLGFjZS5kZWZpbmUoImFjZS9lZGl0X3Nlc3Npb24vYnJhY2tldF9tYXRjaCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS90b2tlbl9pdGVyYXRvciIsImFjZS9yYW5nZSJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcygpe3RoaXMuZmluZE1hdGNoaW5nQnJhY2tldD1mdW5jdGlvbihlLHQpe2lmKGUuY29sdW1uPT0wKXJldHVybiBudWxsO3ZhciBuPXR8fHRoaXMuZ2V0TGluZShlLnJvdykuY2hhckF0KGUuY29sdW1uLTEpO2lmKG49PSIiKXJldHVybiBudWxsO3ZhciByPW4ubWF0Y2goLyhbXChcW1x7XSl8KFtcKVxdXH1dKS8pO3JldHVybiByP3JbMV0/dGhpcy4kZmluZENsb3NpbmdCcmFja2V0KHJbMV0sZSk6dGhpcy4kZmluZE9wZW5pbmdCcmFja2V0KHJbMl0sZSk6bnVsbH0sdGhpcy5nZXRCcmFja2V0UmFuZ2U9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRMaW5lKGUucm93KSxuPSEwLHIscz10LmNoYXJBdChlLmNvbHVtbi0xKSxvPXMmJnMubWF0Y2goLyhbXChcW1x7XSl8KFtcKVxdXH1dKS8pO298fChzPXQuY2hhckF0KGUuY29sdW1uKSxlPXtyb3c6ZS5yb3csY29sdW1uOmUuY29sdW1uKzF9LG89cyYmcy5tYXRjaCgvKFtcKFxbXHtdKXwoW1wpXF1cfV0pLyksbj0hMSk7aWYoIW8pcmV0dXJuIG51bGw7aWYob1sxXSl7dmFyIHU9dGhpcy4kZmluZENsb3NpbmdCcmFja2V0KG9bMV0sZSk7aWYoIXUpcmV0dXJuIG51bGw7cj1pLmZyb21Qb2ludHMoZSx1KSxufHwoci5lbmQuY29sdW1uKyssci5zdGFydC5jb2x1bW4tLSksci5jdXJzb3I9ci5lbmR9ZWxzZXt2YXIgdT10aGlzLiRmaW5kT3BlbmluZ0JyYWNrZXQob1syXSxlKTtpZighdSlyZXR1cm4gbnVsbDtyPWkuZnJvbVBvaW50cyh1LGUpLG58fChyLnN0YXJ0LmNvbHVtbisrLHIuZW5kLmNvbHVtbi0tKSxyLmN1cnNvcj1yLnN0YXJ0fXJldHVybiByfSx0aGlzLiRicmFja2V0cz17IikiOiIoIiwiKCI6IikiLCJdIjoiWyIsIlsiOiJdIiwieyI6In0iLCJ9IjoieyIsIjwiOiI+IiwiPiI6IjwifSx0aGlzLiRmaW5kT3BlbmluZ0JyYWNrZXQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPXRoaXMuJGJyYWNrZXRzW2VdLHM9MSxvPW5ldyByKHRoaXMsdC5yb3csdC5jb2x1bW4pLHU9by5nZXRDdXJyZW50VG9rZW4oKTt1fHwodT1vLnN0ZXBGb3J3YXJkKCkpO2lmKCF1KXJldHVybjtufHwobj1uZXcgUmVnRXhwKCIoXFwuPyIrdS50eXBlLnJlcGxhY2UoIi4iLCJcXC4iKS5yZXBsYWNlKCJycGFyZW4iLCIucGFyZW4iKS5yZXBsYWNlKC9cYig/OmVuZClcYi8sIig/OnN0YXJ0fGJlZ2lufGVuZCkiKSsiKSsiKSk7dmFyIGE9dC5jb2x1bW4tby5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKS0yLGY9dS52YWx1ZTtmb3IoOzspe3doaWxlKGE+PTApe3ZhciBsPWYuY2hhckF0KGEpO2lmKGw9PWkpe3MtPTE7aWYocz09MClyZXR1cm57cm93Om8uZ2V0Q3VycmVudFRva2VuUm93KCksY29sdW1uOmErby5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKX19ZWxzZSBsPT1lJiYocys9MSk7YS09MX1kbyB1PW8uc3RlcEJhY2t3YXJkKCk7d2hpbGUodSYmIW4udGVzdCh1LnR5cGUpKTtpZih1PT1udWxsKWJyZWFrO2Y9dS52YWx1ZSxhPWYubGVuZ3RoLTF9cmV0dXJuIG51bGx9LHRoaXMuJGZpbmRDbG9zaW5nQnJhY2tldD1mdW5jdGlvbihlLHQsbil7dmFyIGk9dGhpcy4kYnJhY2tldHNbZV0scz0xLG89bmV3IHIodGhpcyx0LnJvdyx0LmNvbHVtbiksdT1vLmdldEN1cnJlbnRUb2tlbigpO3V8fCh1PW8uc3RlcEZvcndhcmQoKSk7aWYoIXUpcmV0dXJuO258fChuPW5ldyBSZWdFeHAoIihcXC4/Iit1LnR5cGUucmVwbGFjZSgiLiIsIlxcLiIpLnJlcGxhY2UoImxwYXJlbiIsIi5wYXJlbiIpLnJlcGxhY2UoL1xiKD86c3RhcnR8YmVnaW4pXGIvLCIoPzpzdGFydHxiZWdpbnxlbmQpIikrIikrIikpO3ZhciBhPXQuY29sdW1uLW8uZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7Zm9yKDs7KXt2YXIgZj11LnZhbHVlLGw9Zi5sZW5ndGg7d2hpbGUoYTxsKXt2YXIgYz1mLmNoYXJBdChhKTtpZihjPT1pKXtzLT0xO2lmKHM9PTApcmV0dXJue3JvdzpvLmdldEN1cnJlbnRUb2tlblJvdygpLGNvbHVtbjphK28uZ2V0Q3VycmVudFRva2VuQ29sdW1uKCl9fWVsc2UgYz09ZSYmKHMrPTEpO2ErPTF9ZG8gdT1vLnN0ZXBGb3J3YXJkKCk7d2hpbGUodSYmIW4udGVzdCh1LnR5cGUpKTtpZih1PT1udWxsKWJyZWFrO2E9MH1yZXR1cm4gbnVsbH19dmFyIHI9ZSgiLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yLGk9ZSgiLi4vcmFuZ2UiKS5SYW5nZTt0LkJyYWNrZXRNYXRjaD1zfSksYWNlLmRlZmluZSgiYWNlL2VkaXRfc2Vzc2lvbiIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL2JpZGloYW5kbGVyIiwiYWNlL2NvbmZpZyIsImFjZS9saWIvZXZlbnRfZW1pdHRlciIsImFjZS9zZWxlY3Rpb24iLCJhY2UvbW9kZS90ZXh0IiwiYWNlL3JhbmdlIiwiYWNlL2RvY3VtZW50IiwiYWNlL2JhY2tncm91bmRfdG9rZW5pemVyIiwiYWNlL3NlYXJjaF9oaWdobGlnaHQiLCJhY2UvZWRpdF9zZXNzaW9uL2ZvbGRpbmciLCJhY2UvZWRpdF9zZXNzaW9uL2JyYWNrZXRfbWF0Y2giXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoIi4vbGliL29vcCIpLGk9ZSgiLi9saWIvbGFuZyIpLHM9ZSgiLi9iaWRpaGFuZGxlciIpLkJpZGlIYW5kbGVyLG89ZSgiLi9jb25maWciKSx1PWUoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXIsYT1lKCIuL3NlbGVjdGlvbiIpLlNlbGVjdGlvbixmPWUoIi4vbW9kZS90ZXh0IikuTW9kZSxsPWUoIi4vcmFuZ2UiKS5SYW5nZSxjPWUoIi4vZG9jdW1lbnQiKS5Eb2N1bWVudCxoPWUoIi4vYmFja2dyb3VuZF90b2tlbml6ZXIiKS5CYWNrZ3JvdW5kVG9rZW5pemVyLHA9ZSgiLi9zZWFyY2hfaGlnaGxpZ2h0IikuU2VhcmNoSGlnaGxpZ2h0LGQ9ZnVuY3Rpb24oZSx0KXt0aGlzLiRicmVha3BvaW50cz1bXSx0aGlzLiRkZWNvcmF0aW9ucz1bXSx0aGlzLiRmcm9udE1hcmtlcnM9e30sdGhpcy4kYmFja01hcmtlcnM9e30sdGhpcy4kbWFya2VySWQ9MSx0aGlzLiR1bmRvU2VsZWN0PSEwLHRoaXMuJGZvbGREYXRhPVtdLHRoaXMuaWQ9InNlc3Npb24iKyArK2QuJHVpZCx0aGlzLiRmb2xkRGF0YS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmpvaW4oIlxuIil9LHRoaXMub24oImNoYW5nZUZvbGQiLHRoaXMub25DaGFuZ2VGb2xkLmJpbmQodGhpcykpLHRoaXMuJG9uQ2hhbmdlPXRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtpZih0eXBlb2YgZSE9Im9iamVjdCJ8fCFlLmdldExpbmUpZT1uZXcgYyhlKTt0aGlzLnNldERvY3VtZW50KGUpLHRoaXMuc2VsZWN0aW9uPW5ldyBhKHRoaXMpLHRoaXMuJGJpZGlIYW5kbGVyPW5ldyBzKHRoaXMpLG8ucmVzZXRPcHRpb25zKHRoaXMpLHRoaXMuc2V0TW9kZSh0KSxvLl9zaWduYWwoInNlc3Npb24iLHRoaXMpfTtkLiR1aWQ9MCxmdW5jdGlvbigpe2Z1bmN0aW9uIG0oZSl7cmV0dXJuIGU8NDM1Mj8hMTplPj00MzUyJiZlPD00NDQ3fHxlPj00NTE1JiZlPD00NTE5fHxlPj00NjAyJiZlPD00NjA3fHxlPj05MDAxJiZlPD05MDAyfHxlPj0xMTkwNCYmZTw9MTE5Mjl8fGU+PTExOTMxJiZlPD0xMjAxOXx8ZT49MTIwMzImJmU8PTEyMjQ1fHxlPj0xMjI3MiYmZTw9MTIyODN8fGU+PTEyMjg4JiZlPD0xMjM1MHx8ZT49MTIzNTMmJmU8PTEyNDM4fHxlPj0xMjQ0MSYmZTw9MTI1NDN8fGU+PTEyNTQ5JiZlPD0xMjU4OXx8ZT49MTI1OTMmJmU8PTEyNjg2fHxlPj0xMjY4OCYmZTw9MTI3MzB8fGU+PTEyNzM2JiZlPD0xMjc3MXx8ZT49MTI3ODQmJmU8PTEyODMwfHxlPj0xMjgzMiYmZTw9MTI4NzF8fGU+PTEyODgwJiZlPD0xMzA1NHx8ZT49MTMwNTYmJmU8PTE5OTAzfHxlPj0xOTk2OCYmZTw9NDIxMjR8fGU+PTQyMTI4JiZlPD00MjE4Mnx8ZT49NDMzNjAmJmU8PTQzMzg4fHxlPj00NDAzMiYmZTw9NTUyMDN8fGU+PTU1MjE2JiZlPD01NTIzOHx8ZT49NTUyNDMmJmU8PTU1MjkxfHxlPj02Mzc0NCYmZTw9NjQyNTV8fGU+PTY1MDQwJiZlPD02NTA0OXx8ZT49NjUwNzImJmU8PTY1MTA2fHxlPj02NTEwOCYmZTw9NjUxMjZ8fGU+PTY1MTI4JiZlPD02NTEzMXx8ZT49NjUyODEmJmU8PTY1Mzc2fHxlPj02NTUwNCYmZTw9NjU1MTB9ci5pbXBsZW1lbnQodGhpcyx1KSx0aGlzLnNldERvY3VtZW50PWZ1bmN0aW9uKGUpe3RoaXMuZG9jJiZ0aGlzLmRvYy5yZW1vdmVMaXN0ZW5lcigiY2hhbmdlIix0aGlzLiRvbkNoYW5nZSksdGhpcy5kb2M9ZSxlLm9uKCJjaGFuZ2UiLHRoaXMuJG9uQ2hhbmdlKSx0aGlzLmJnVG9rZW5pemVyJiZ0aGlzLmJnVG9rZW5pemVyLnNldERvY3VtZW50KHRoaXMuZ2V0RG9jdW1lbnQoKSksdGhpcy5yZXNldENhY2hlcygpfSx0aGlzLmdldERvY3VtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9jfSx0aGlzLiRyZXNldFJvd0NhY2hlPWZ1bmN0aW9uKGUpe2lmKCFlKXt0aGlzLiRkb2NSb3dDYWNoZT1bXSx0aGlzLiRzY3JlZW5Sb3dDYWNoZT1bXTtyZXR1cm59dmFyIHQ9dGhpcy4kZG9jUm93Q2FjaGUubGVuZ3RoLG49dGhpcy4kZ2V0Um93Q2FjaGVJbmRleCh0aGlzLiRkb2NSb3dDYWNoZSxlKSsxO3Q+biYmKHRoaXMuJGRvY1Jvd0NhY2hlLnNwbGljZShuLHQpLHRoaXMuJHNjcmVlblJvd0NhY2hlLnNwbGljZShuLHQpKX0sdGhpcy4kZ2V0Um93Q2FjaGVJbmRleD1mdW5jdGlvbihlLHQpe3ZhciBuPTAscj1lLmxlbmd0aC0xO3doaWxlKG48PXIpe3ZhciBpPW4rcj4+MSxzPWVbaV07aWYodD5zKW49aSsxO2Vsc2V7aWYoISh0PHMpKXJldHVybiBpO3I9aS0xfX1yZXR1cm4gbi0xfSx0aGlzLnJlc2V0Q2FjaGVzPWZ1bmN0aW9uKCl7dGhpcy4kbW9kaWZpZWQ9ITAsdGhpcy4kd3JhcERhdGE9W10sdGhpcy4kcm93TGVuZ3RoQ2FjaGU9W10sdGhpcy4kcmVzZXRSb3dDYWNoZSgwKSx0aGlzLmJnVG9rZW5pemVyJiZ0aGlzLmJnVG9rZW5pemVyLnN0YXJ0KDApfSx0aGlzLm9uQ2hhbmdlRm9sZD1mdW5jdGlvbihlKXt2YXIgdD1lLmRhdGE7dGhpcy4kcmVzZXRSb3dDYWNoZSh0LnN0YXJ0LnJvdyl9LHRoaXMub25DaGFuZ2U9ZnVuY3Rpb24oZSl7dGhpcy4kbW9kaWZpZWQ9ITAsdGhpcy4kYmlkaUhhbmRsZXIub25DaGFuZ2UoZSksdGhpcy4kcmVzZXRSb3dDYWNoZShlLnN0YXJ0LnJvdyk7dmFyIHQ9dGhpcy4kdXBkYXRlSW50ZXJuYWxEYXRhT25DaGFuZ2UoZSk7IXRoaXMuJGZyb21VbmRvJiZ0aGlzLiR1bmRvTWFuYWdlciYmKHQmJnQubGVuZ3RoJiYodGhpcy4kdW5kb01hbmFnZXIuYWRkKHthY3Rpb246InJlbW92ZUZvbGRzIixmb2xkczp0fSx0aGlzLm1lcmdlVW5kb0RlbHRhcyksdGhpcy5tZXJnZVVuZG9EZWx0YXM9ITApLHRoaXMuJHVuZG9NYW5hZ2VyLmFkZChlLHRoaXMubWVyZ2VVbmRvRGVsdGFzKSx0aGlzLm1lcmdlVW5kb0RlbHRhcz0hMCx0aGlzLiRpbmZvcm1VbmRvTWFuYWdlci5zY2hlZHVsZSgpKSx0aGlzLmJnVG9rZW5pemVyJiZ0aGlzLmJnVG9rZW5pemVyLiR1cGRhdGVPbkNoYW5nZShlKSx0aGlzLl9zaWduYWwoImNoYW5nZSIsZSl9LHRoaXMuc2V0VmFsdWU9ZnVuY3Rpb24oZSl7dGhpcy5kb2Muc2V0VmFsdWUoZSksdGhpcy5zZWxlY3Rpb24ubW92ZVRvKDAsMCksdGhpcy4kcmVzZXRSb3dDYWNoZSgwKSx0aGlzLnNldFVuZG9NYW5hZ2VyKHRoaXMuJHVuZG9NYW5hZ2VyKSx0aGlzLmdldFVuZG9NYW5hZ2VyKCkucmVzZXQoKX0sdGhpcy5nZXRWYWx1ZT10aGlzLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9jLmdldFZhbHVlKCl9LHRoaXMuZ2V0U2VsZWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9ufSx0aGlzLmdldFN0YXRlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmJnVG9rZW5pemVyLmdldFN0YXRlKGUpfSx0aGlzLmdldFRva2Vucz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5iZ1Rva2VuaXplci5nZXRUb2tlbnMoZSl9LHRoaXMuZ2V0VG9rZW5BdD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuYmdUb2tlbml6ZXIuZ2V0VG9rZW5zKGUpLHIsaT0wO2lmKHQ9PW51bGwpe3ZhciBzPW4ubGVuZ3RoLTE7aT10aGlzLmdldExpbmUoZSkubGVuZ3RofWVsc2UgZm9yKHZhciBzPTA7czxuLmxlbmd0aDtzKyspe2krPW5bc10udmFsdWUubGVuZ3RoO2lmKGk+PXQpYnJlYWt9cmV0dXJuIHI9bltzXSxyPyhyLmluZGV4PXMsci5zdGFydD1pLXIudmFsdWUubGVuZ3RoLHIpOm51bGx9LHRoaXMuc2V0VW5kb01hbmFnZXI9ZnVuY3Rpb24oZSl7dGhpcy4kdW5kb01hbmFnZXI9ZSx0aGlzLiRpbmZvcm1VbmRvTWFuYWdlciYmdGhpcy4kaW5mb3JtVW5kb01hbmFnZXIuY2FuY2VsKCk7aWYoZSl7dmFyIHQ9dGhpcztlLmFkZFNlc3Npb24odGhpcyksdGhpcy4kc3luY0luZm9ybVVuZG9NYW5hZ2VyPWZ1bmN0aW9uKCl7dC4kaW5mb3JtVW5kb01hbmFnZXIuY2FuY2VsKCksdC5tZXJnZVVuZG9EZWx0YXM9ITF9LHRoaXMuJGluZm9ybVVuZG9NYW5hZ2VyPWkuZGVsYXllZENhbGwodGhpcy4kc3luY0luZm9ybVVuZG9NYW5hZ2VyKX1lbHNlIHRoaXMuJHN5bmNJbmZvcm1VbmRvTWFuYWdlcj1mdW5jdGlvbigpe319LHRoaXMubWFya1VuZG9Hcm91cD1mdW5jdGlvbigpe3RoaXMuJHN5bmNJbmZvcm1VbmRvTWFuYWdlciYmdGhpcy4kc3luY0luZm9ybVVuZG9NYW5hZ2VyKCl9LHRoaXMuJGRlZmF1bHRVbmRvTWFuYWdlcj17dW5kbzpmdW5jdGlvbigpe30scmVkbzpmdW5jdGlvbigpe30saGFzVW5kbzpmdW5jdGlvbigpe30saGFzUmVkbzpmdW5jdGlvbigpe30scmVzZXQ6ZnVuY3Rpb24oKXt9LGFkZDpmdW5jdGlvbigpe30sYWRkU2VsZWN0aW9uOmZ1bmN0aW9uKCl7fSxzdGFydE5ld0dyb3VwOmZ1bmN0aW9uKCl7fSxhZGRTZXNzaW9uOmZ1bmN0aW9uKCl7fX0sdGhpcy5nZXRVbmRvTWFuYWdlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLiR1bmRvTWFuYWdlcnx8dGhpcy4kZGVmYXVsdFVuZG9NYW5hZ2VyfSx0aGlzLmdldFRhYlN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFVzZVNvZnRUYWJzKCk/aS5zdHJpbmdSZXBlYXQoIiAiLHRoaXMuZ2V0VGFiU2l6ZSgpKToiCSJ9LHRoaXMuc2V0VXNlU29mdFRhYnM9ZnVuY3Rpb24oZSl7dGhpcy5zZXRPcHRpb24oInVzZVNvZnRUYWJzIixlKX0sdGhpcy5nZXRVc2VTb2Z0VGFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiR1c2VTb2Z0VGFicyYmIXRoaXMuJG1vZGUuJGluZGVudFdpdGhUYWJzfSx0aGlzLnNldFRhYlNpemU9ZnVuY3Rpb24oZSl7dGhpcy5zZXRPcHRpb24oInRhYlNpemUiLGUpfSx0aGlzLmdldFRhYlNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kdGFiU2l6ZX0sdGhpcy5pc1RhYlN0b3A9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuJHVzZVNvZnRUYWJzJiZlLmNvbHVtbiV0aGlzLiR0YWJTaXplPT09MH0sdGhpcy5zZXROYXZpZ2F0ZVdpdGhpblNvZnRUYWJzPWZ1bmN0aW9uKGUpe3RoaXMuc2V0T3B0aW9uKCJuYXZpZ2F0ZVdpdGhpblNvZnRUYWJzIixlKX0sdGhpcy5nZXROYXZpZ2F0ZVdpdGhpblNvZnRUYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJG5hdmlnYXRlV2l0aGluU29mdFRhYnN9LHRoaXMuJG92ZXJ3cml0ZT0hMSx0aGlzLnNldE92ZXJ3cml0ZT1mdW5jdGlvbihlKXt0aGlzLnNldE9wdGlvbigib3ZlcndyaXRlIixlKX0sdGhpcy5nZXRPdmVyd3JpdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kb3ZlcndyaXRlfSx0aGlzLnRvZ2dsZU92ZXJ3cml0ZT1mdW5jdGlvbigpe3RoaXMuc2V0T3ZlcndyaXRlKCF0aGlzLiRvdmVyd3JpdGUpfSx0aGlzLmFkZEd1dHRlckRlY29yYXRpb249ZnVuY3Rpb24oZSx0KXt0aGlzLiRkZWNvcmF0aW9uc1tlXXx8KHRoaXMuJGRlY29yYXRpb25zW2VdPSIiKSx0aGlzLiRkZWNvcmF0aW9uc1tlXSs9IiAiK3QsdGhpcy5fc2lnbmFsKCJjaGFuZ2VCcmVha3BvaW50Iix7fSl9LHRoaXMucmVtb3ZlR3V0dGVyRGVjb3JhdGlvbj1mdW5jdGlvbihlLHQpe3RoaXMuJGRlY29yYXRpb25zW2VdPSh0aGlzLiRkZWNvcmF0aW9uc1tlXXx8IiIpLnJlcGxhY2UoIiAiK3QsIiIpLHRoaXMuX3NpZ25hbCgiY2hhbmdlQnJlYWtwb2ludCIse30pfSx0aGlzLmdldEJyZWFrcG9pbnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGJyZWFrcG9pbnRzfSx0aGlzLnNldEJyZWFrcG9pbnRzPWZ1bmN0aW9uKGUpe3RoaXMuJGJyZWFrcG9pbnRzPVtdO2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKXRoaXMuJGJyZWFrcG9pbnRzW2VbdF1dPSJhY2VfYnJlYWtwb2ludCI7dGhpcy5fc2lnbmFsKCJjaGFuZ2VCcmVha3BvaW50Iix7fSl9LHRoaXMuY2xlYXJCcmVha3BvaW50cz1mdW5jdGlvbigpe3RoaXMuJGJyZWFrcG9pbnRzPVtdLHRoaXMuX3NpZ25hbCgiY2hhbmdlQnJlYWtwb2ludCIse30pfSx0aGlzLnNldEJyZWFrcG9pbnQ9ZnVuY3Rpb24oZSx0KXt0PT09dW5kZWZpbmVkJiYodD0iYWNlX2JyZWFrcG9pbnQiKSx0P3RoaXMuJGJyZWFrcG9pbnRzW2VdPXQ6ZGVsZXRlIHRoaXMuJGJyZWFrcG9pbnRzW2VdLHRoaXMuX3NpZ25hbCgiY2hhbmdlQnJlYWtwb2ludCIse30pfSx0aGlzLmNsZWFyQnJlYWtwb2ludD1mdW5jdGlvbihlKXtkZWxldGUgdGhpcy4kYnJlYWtwb2ludHNbZV0sdGhpcy5fc2lnbmFsKCJjaGFuZ2VCcmVha3BvaW50Iix7fSl9LHRoaXMuYWRkTWFya2VyPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXRoaXMuJG1hcmtlcklkKysscz17cmFuZ2U6ZSx0eXBlOm58fCJsaW5lIixyZW5kZXJlcjp0eXBlb2Ygbj09ImZ1bmN0aW9uIj9uOm51bGwsY2xheno6dCxpbkZyb250OiEhcixpZDppfTtyZXR1cm4gcj8odGhpcy4kZnJvbnRNYXJrZXJzW2ldPXMsdGhpcy5fc2lnbmFsKCJjaGFuZ2VGcm9udE1hcmtlciIpKToodGhpcy4kYmFja01hcmtlcnNbaV09cyx0aGlzLl9zaWduYWwoImNoYW5nZUJhY2tNYXJrZXIiKSksaX0sdGhpcy5hZGREeW5hbWljTWFya2VyPWZ1bmN0aW9uKGUsdCl7aWYoIWUudXBkYXRlKXJldHVybjt2YXIgbj10aGlzLiRtYXJrZXJJZCsrO3JldHVybiBlLmlkPW4sZS5pbkZyb250PSEhdCx0Pyh0aGlzLiRmcm9udE1hcmtlcnNbbl09ZSx0aGlzLl9zaWduYWwoImNoYW5nZUZyb250TWFya2VyIikpOih0aGlzLiRiYWNrTWFya2Vyc1tuXT1lLHRoaXMuX3NpZ25hbCgiY2hhbmdlQmFja01hcmtlciIpKSxlfSx0aGlzLnJlbW92ZU1hcmtlcj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLiRmcm9udE1hcmtlcnNbZV18fHRoaXMuJGJhY2tNYXJrZXJzW2VdO2lmKCF0KXJldHVybjt2YXIgbj10LmluRnJvbnQ/dGhpcy4kZnJvbnRNYXJrZXJzOnRoaXMuJGJhY2tNYXJrZXJzO2RlbGV0ZSBuW2VdLHRoaXMuX3NpZ25hbCh0LmluRnJvbnQ/ImNoYW5nZUZyb250TWFya2VyIjoiY2hhbmdlQmFja01hcmtlciIpfSx0aGlzLmdldE1hcmtlcnM9ZnVuY3Rpb24oZSl7cmV0dXJuIGU/dGhpcy4kZnJvbnRNYXJrZXJzOnRoaXMuJGJhY2tNYXJrZXJzfSx0aGlzLmhpZ2hsaWdodD1mdW5jdGlvbihlKXtpZighdGhpcy4kc2VhcmNoSGlnaGxpZ2h0KXt2YXIgdD1uZXcgcChudWxsLCJhY2Vfc2VsZWN0ZWQtd29yZCIsInRleHQiKTt0aGlzLiRzZWFyY2hIaWdobGlnaHQ9dGhpcy5hZGREeW5hbWljTWFya2VyKHQpfXRoaXMuJHNlYXJjaEhpZ2hsaWdodC5zZXRSZWdleHAoZSl9LHRoaXMuaGlnaGxpZ2h0TGluZXM9ZnVuY3Rpb24oZSx0LG4scil7dHlwZW9mIHQhPSJudW1iZXIiJiYobj10LHQ9ZSksbnx8KG49ImFjZV9zdGVwIik7dmFyIGk9bmV3IGwoZSwwLHQsSW5maW5pdHkpO3JldHVybiBpLmlkPXRoaXMuYWRkTWFya2VyKGksbiwiZnVsbExpbmUiLHIpLGl9LHRoaXMuc2V0QW5ub3RhdGlvbnM9ZnVuY3Rpb24oZSl7dGhpcy4kYW5ub3RhdGlvbnM9ZSx0aGlzLl9zaWduYWwoImNoYW5nZUFubm90YXRpb24iLHt9KX0sdGhpcy5nZXRBbm5vdGF0aW9ucz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRhbm5vdGF0aW9uc3x8W119LHRoaXMuY2xlYXJBbm5vdGF0aW9ucz1mdW5jdGlvbigpe3RoaXMuc2V0QW5ub3RhdGlvbnMoW10pfSx0aGlzLiRkZXRlY3ROZXdMaW5lPWZ1bmN0aW9uKGUpe3ZhciB0PWUubWF0Y2goL14uKj8oXHI/XG4pL20pO3Q/dGhpcy4kYXV0b05ld0xpbmU9dFsxXTp0aGlzLiRhdXRvTmV3TGluZT0iXG4ifSx0aGlzLmdldFdvcmRSYW5nZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZ2V0TGluZShlKSxyPSExO3Q+MCYmKHI9ISFuLmNoYXJBdCh0LTEpLm1hdGNoKHRoaXMudG9rZW5SZSkpLHJ8fChyPSEhbi5jaGFyQXQodCkubWF0Y2godGhpcy50b2tlblJlKSk7aWYocil2YXIgaT10aGlzLnRva2VuUmU7ZWxzZSBpZigvXlxzKyQvLnRlc3Qobi5zbGljZSh0LTEsdCsxKSkpdmFyIGk9L1xzLztlbHNlIHZhciBpPXRoaXMubm9uVG9rZW5SZTt2YXIgcz10O2lmKHM+MCl7ZG8gcy0tO3doaWxlKHM+PTAmJm4uY2hhckF0KHMpLm1hdGNoKGkpKTtzKyt9dmFyIG89dDt3aGlsZShvPG4ubGVuZ3RoJiZuLmNoYXJBdChvKS5tYXRjaChpKSlvKys7cmV0dXJuIG5ldyBsKGUscyxlLG8pfSx0aGlzLmdldEFXb3JkUmFuZ2U9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmdldFdvcmRSYW5nZShlLHQpLHI9dGhpcy5nZXRMaW5lKG4uZW5kLnJvdyk7d2hpbGUoci5jaGFyQXQobi5lbmQuY29sdW1uKS5tYXRjaCgvWyBcdF0vKSluLmVuZC5jb2x1bW4rPTE7cmV0dXJuIG59LHRoaXMuc2V0TmV3TGluZU1vZGU9ZnVuY3Rpb24oZSl7dGhpcy5kb2Muc2V0TmV3TGluZU1vZGUoZSl9LHRoaXMuZ2V0TmV3TGluZU1vZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb2MuZ2V0TmV3TGluZU1vZGUoKX0sdGhpcy5zZXRVc2VXb3JrZXI9ZnVuY3Rpb24oZSl7dGhpcy5zZXRPcHRpb24oInVzZVdvcmtlciIsZSl9LHRoaXMuZ2V0VXNlV29ya2VyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHVzZVdvcmtlcn0sdGhpcy5vblJlbG9hZFRva2VuaXplcj1mdW5jdGlvbihlKXt2YXIgdD1lLmRhdGE7dGhpcy5iZ1Rva2VuaXplci5zdGFydCh0LmZpcnN0KSx0aGlzLl9zaWduYWwoInRva2VuaXplclVwZGF0ZSIsZSl9LHRoaXMuJG1vZGVzPW8uJG1vZGVzLHRoaXMuJG1vZGU9bnVsbCx0aGlzLiRtb2RlSWQ9bnVsbCx0aGlzLnNldE1vZGU9ZnVuY3Rpb24oZSx0KXtpZihlJiZ0eXBlb2YgZT09Im9iamVjdCIpe2lmKGUuZ2V0VG9rZW5pemVyKXJldHVybiB0aGlzLiRvbkNoYW5nZU1vZGUoZSk7dmFyIG49ZSxyPW4ucGF0aH1lbHNlIHI9ZXx8ImFjZS9tb2RlL3RleHQiO3RoaXMuJG1vZGVzWyJhY2UvbW9kZS90ZXh0Il18fCh0aGlzLiRtb2Rlc1siYWNlL21vZGUvdGV4dCJdPW5ldyBmKTtpZih0aGlzLiRtb2Rlc1tyXSYmIW4pe3RoaXMuJG9uQ2hhbmdlTW9kZSh0aGlzLiRtb2Rlc1tyXSksdCYmdCgpO3JldHVybn10aGlzLiRtb2RlSWQ9cixvLmxvYWRNb2R1bGUoWyJtb2RlIixyXSxmdW5jdGlvbihlKXtpZih0aGlzLiRtb2RlSWQhPT1yKXJldHVybiB0JiZ0KCk7dGhpcy4kbW9kZXNbcl0mJiFuP3RoaXMuJG9uQ2hhbmdlTW9kZSh0aGlzLiRtb2Rlc1tyXSk6ZSYmZS5Nb2RlJiYoZT1uZXcgZS5Nb2RlKG4pLG58fCh0aGlzLiRtb2Rlc1tyXT1lLGUuJGlkPXIpLHRoaXMuJG9uQ2hhbmdlTW9kZShlKSksdCYmdCgpfS5iaW5kKHRoaXMpKSx0aGlzLiRtb2RlfHx0aGlzLiRvbkNoYW5nZU1vZGUodGhpcy4kbW9kZXNbImFjZS9tb2RlL3RleHQiXSwhMCl9LHRoaXMuJG9uQ2hhbmdlTW9kZT1mdW5jdGlvbihlLHQpe3R8fCh0aGlzLiRtb2RlSWQ9ZS4kaWQpO2lmKHRoaXMuJG1vZGU9PT1lKXJldHVybjt0aGlzLiRtb2RlPWUsdGhpcy4kc3RvcFdvcmtlcigpLHRoaXMuJHVzZVdvcmtlciYmdGhpcy4kc3RhcnRXb3JrZXIoKTt2YXIgbj1lLmdldFRva2VuaXplcigpO2lmKG4uYWRkRXZlbnRMaXN0ZW5lciE9PXVuZGVmaW5lZCl7dmFyIHI9dGhpcy5vblJlbG9hZFRva2VuaXplci5iaW5kKHRoaXMpO24uYWRkRXZlbnRMaXN0ZW5lcigidXBkYXRlIixyKX1pZighdGhpcy5iZ1Rva2VuaXplcil7dGhpcy5iZ1Rva2VuaXplcj1uZXcgaChuKTt2YXIgaT10aGlzO3RoaXMuYmdUb2tlbml6ZXIuYWRkRXZlbnRMaXN0ZW5lcigidXBkYXRlIixmdW5jdGlvbihlKXtpLl9zaWduYWwoInRva2VuaXplclVwZGF0ZSIsZSl9KX1lbHNlIHRoaXMuYmdUb2tlbml6ZXIuc2V0VG9rZW5pemVyKG4pO3RoaXMuYmdUb2tlbml6ZXIuc2V0RG9jdW1lbnQodGhpcy5nZXREb2N1bWVudCgpKSx0aGlzLnRva2VuUmU9ZS50b2tlblJlLHRoaXMubm9uVG9rZW5SZT1lLm5vblRva2VuUmUsdHx8KGUuYXR0YWNoVG9TZXNzaW9uJiZlLmF0dGFjaFRvU2Vzc2lvbih0aGlzKSx0aGlzLiRvcHRpb25zLndyYXBNZXRob2Quc2V0LmNhbGwodGhpcyx0aGlzLiR3cmFwTWV0aG9kKSx0aGlzLiRzZXRGb2xkaW5nKGUuZm9sZGluZ1J1bGVzKSx0aGlzLmJnVG9rZW5pemVyLnN0YXJ0KDApLHRoaXMuX2VtaXQoImNoYW5nZU1vZGUiKSl9LHRoaXMuJHN0b3BXb3JrZXI9ZnVuY3Rpb24oKXt0aGlzLiR3b3JrZXImJih0aGlzLiR3b3JrZXIudGVybWluYXRlKCksdGhpcy4kd29ya2VyPW51bGwpfSx0aGlzLiRzdGFydFdvcmtlcj1mdW5jdGlvbigpe3RyeXt0aGlzLiR3b3JrZXI9dGhpcy4kbW9kZS5jcmVhdGVXb3JrZXIodGhpcyl9Y2F0Y2goZSl7by53YXJuKCJDb3VsZCBub3QgbG9hZCB3b3JrZXIiLGUpLHRoaXMuJHdvcmtlcj1udWxsfX0sdGhpcy5nZXRNb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJG1vZGV9LHRoaXMuJHNjcm9sbFRvcD0wLHRoaXMuc2V0U2Nyb2xsVG9wPWZ1bmN0aW9uKGUpe2lmKHRoaXMuJHNjcm9sbFRvcD09PWV8fGlzTmFOKGUpKXJldHVybjt0aGlzLiRzY3JvbGxUb3A9ZSx0aGlzLl9zaWduYWwoImNoYW5nZVNjcm9sbFRvcCIsZSl9LHRoaXMuZ2V0U2Nyb2xsVG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHNjcm9sbFRvcH0sdGhpcy4kc2Nyb2xsTGVmdD0wLHRoaXMuc2V0U2Nyb2xsTGVmdD1mdW5jdGlvbihlKXtpZih0aGlzLiRzY3JvbGxMZWZ0PT09ZXx8aXNOYU4oZSkpcmV0dXJuO3RoaXMuJHNjcm9sbExlZnQ9ZSx0aGlzLl9zaWduYWwoImNoYW5nZVNjcm9sbExlZnQiLGUpfSx0aGlzLmdldFNjcm9sbExlZnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kc2Nyb2xsTGVmdH0sdGhpcy5nZXRTY3JlZW5XaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRjb21wdXRlV2lkdGgoKSx0aGlzLmxpbmVXaWRnZXRzP01hdGgubWF4KHRoaXMuZ2V0TGluZVdpZGdldE1heFdpZHRoKCksdGhpcy5zY3JlZW5XaWR0aCk6dGhpcy5zY3JlZW5XaWR0aH0sdGhpcy5nZXRMaW5lV2lkZ2V0TWF4V2lkdGg9ZnVuY3Rpb24oKXtpZih0aGlzLmxpbmVXaWRnZXRzV2lkdGghPW51bGwpcmV0dXJuIHRoaXMubGluZVdpZGdldHNXaWR0aDt2YXIgZT0wO3JldHVybiB0aGlzLmxpbmVXaWRnZXRzLmZvckVhY2goZnVuY3Rpb24odCl7dCYmdC5zY3JlZW5XaWR0aD5lJiYoZT10LnNjcmVlbldpZHRoKX0pLHRoaXMubGluZVdpZGdldFdpZHRoPWV9LHRoaXMuJGNvbXB1dGVXaWR0aD1mdW5jdGlvbihlKXtpZih0aGlzLiRtb2RpZmllZHx8ZSl7dGhpcy4kbW9kaWZpZWQ9ITE7aWYodGhpcy4kdXNlV3JhcE1vZGUpcmV0dXJuIHRoaXMuc2NyZWVuV2lkdGg9dGhpcy4kd3JhcExpbWl0O3ZhciB0PXRoaXMuZG9jLmdldEFsbExpbmVzKCksbj10aGlzLiRyb3dMZW5ndGhDYWNoZSxyPTAsaT0wLHM9dGhpcy4kZm9sZERhdGFbaV0sbz1zP3Muc3RhcnQucm93OkluZmluaXR5LHU9dC5sZW5ndGg7Zm9yKHZhciBhPTA7YTx1O2ErKyl7aWYoYT5vKXthPXMuZW5kLnJvdysxO2lmKGE+PXUpYnJlYWs7cz10aGlzLiRmb2xkRGF0YVtpKytdLG89cz9zLnN0YXJ0LnJvdzpJbmZpbml0eX1uW2FdPT1udWxsJiYoblthXT10aGlzLiRnZXRTdHJpbmdTY3JlZW5XaWR0aCh0W2FdKVswXSksblthXT5yJiYocj1uW2FdKX10aGlzLnNjcmVlbldpZHRoPXJ9fSx0aGlzLmdldExpbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZG9jLmdldExpbmUoZSl9LHRoaXMuZ2V0TGluZXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5kb2MuZ2V0TGluZXMoZSx0KX0sdGhpcy5nZXRMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb2MuZ2V0TGVuZ3RoKCl9LHRoaXMuZ2V0VGV4dFJhbmdlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRvYy5nZXRUZXh0UmFuZ2UoZXx8dGhpcy5zZWxlY3Rpb24uZ2V0UmFuZ2UoKSl9LHRoaXMuaW5zZXJ0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZG9jLmluc2VydChlLHQpfSx0aGlzLnJlbW92ZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5kb2MucmVtb3ZlKGUpfSx0aGlzLnJlbW92ZUZ1bGxMaW5lcz1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmRvYy5yZW1vdmVGdWxsTGluZXMoZSx0KX0sdGhpcy51bmRvQ2hhbmdlcz1mdW5jdGlvbihlLHQpe2lmKCFlLmxlbmd0aClyZXR1cm47dGhpcy4kZnJvbVVuZG89ITA7Zm9yKHZhciBuPWUubGVuZ3RoLTE7biE9LTE7bi0tKXt2YXIgcj1lW25dO3IuYWN0aW9uPT0iaW5zZXJ0Inx8ci5hY3Rpb249PSJyZW1vdmUiP3RoaXMuZG9jLnJldmVydERlbHRhKHIpOnIuZm9sZHMmJnRoaXMuYWRkRm9sZHMoci5mb2xkcyl9IXQmJnRoaXMuJHVuZG9TZWxlY3QmJihlLnNlbGVjdGlvbkJlZm9yZT90aGlzLnNlbGVjdGlvbi5mcm9tSlNPTihlLnNlbGVjdGlvbkJlZm9yZSk6dGhpcy5zZWxlY3Rpb24uc2V0UmFuZ2UodGhpcy4kZ2V0VW5kb1NlbGVjdGlvbihlLCEwKSkpLHRoaXMuJGZyb21VbmRvPSExfSx0aGlzLnJlZG9DaGFuZ2VzPWZ1bmN0aW9uKGUsdCl7aWYoIWUubGVuZ3RoKXJldHVybjt0aGlzLiRmcm9tVW5kbz0hMDtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZVtuXTsoci5hY3Rpb249PSJpbnNlcnQifHxyLmFjdGlvbj09InJlbW92ZSIpJiZ0aGlzLmRvYy5hcHBseURlbHRhKHIpfSF0JiZ0aGlzLiR1bmRvU2VsZWN0JiYoZS5zZWxlY3Rpb25BZnRlcj90aGlzLnNlbGVjdGlvbi5mcm9tSlNPTihlLnNlbGVjdGlvbkFmdGVyKTp0aGlzLnNlbGVjdGlvbi5zZXRSYW5nZSh0aGlzLiRnZXRVbmRvU2VsZWN0aW9uKGUsITEpKSksdGhpcy4kZnJvbVVuZG89ITF9LHRoaXMuc2V0VW5kb1NlbGVjdD1mdW5jdGlvbihlKXt0aGlzLiR1bmRvU2VsZWN0PWV9LHRoaXMuJGdldFVuZG9TZWxlY3Rpb249ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3JldHVybiB0P2UuYWN0aW9uIT09Imluc2VydCI6ZS5hY3Rpb249PT0iaW5zZXJ0In12YXIgcixpLHM7Zm9yKHZhciBvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciB1PWVbb107aWYoIXUuc3RhcnQpY29udGludWU7aWYoIXIpe24odSk/KHI9bC5mcm9tUG9pbnRzKHUuc3RhcnQsdS5lbmQpLHM9ITApOihyPWwuZnJvbVBvaW50cyh1LnN0YXJ0LHUuc3RhcnQpLHM9ITEpO2NvbnRpbnVlfW4odSk/KGk9dS5zdGFydCxyLmNvbXBhcmUoaS5yb3csaS5jb2x1bW4pPT0tMSYmci5zZXRTdGFydChpKSxpPXUuZW5kLHIuY29tcGFyZShpLnJvdyxpLmNvbHVtbik9PTEmJnIuc2V0RW5kKGkpLHM9ITApOihpPXUuc3RhcnQsci5jb21wYXJlKGkucm93LGkuY29sdW1uKT09LTEmJihyPWwuZnJvbVBvaW50cyh1LnN0YXJ0LHUuc3RhcnQpKSxzPSExKX1yZXR1cm4gcn0sdGhpcy5yZXBsYWNlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZG9jLnJlcGxhY2UoZSx0KX0sdGhpcy5tb3ZlVGV4dD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5nZXRUZXh0UmFuZ2UoZSksaT10aGlzLmdldEZvbGRzSW5SYW5nZShlKSxzPWwuZnJvbVBvaW50cyh0LHQpO2lmKCFuKXt0aGlzLnJlbW92ZShlKTt2YXIgbz1lLnN0YXJ0LnJvdy1lLmVuZC5yb3csdT1vPy1lLmVuZC5jb2x1bW46ZS5zdGFydC5jb2x1bW4tZS5lbmQuY29sdW1uO3UmJihzLnN0YXJ0LnJvdz09ZS5lbmQucm93JiZzLnN0YXJ0LmNvbHVtbj5lLmVuZC5jb2x1bW4mJihzLnN0YXJ0LmNvbHVtbis9dSkscy5lbmQucm93PT1lLmVuZC5yb3cmJnMuZW5kLmNvbHVtbj5lLmVuZC5jb2x1bW4mJihzLmVuZC5jb2x1bW4rPXUpKSxvJiZzLnN0YXJ0LnJvdz49ZS5lbmQucm93JiYocy5zdGFydC5yb3crPW8scy5lbmQucm93Kz1vKX1zLmVuZD10aGlzLmluc2VydChzLnN0YXJ0LHIpO2lmKGkubGVuZ3RoKXt2YXIgYT1lLnN0YXJ0LGY9cy5zdGFydCxvPWYucm93LWEucm93LHU9Zi5jb2x1bW4tYS5jb2x1bW47dGhpcy5hZGRGb2xkcyhpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZT1lLmNsb25lKCksZS5zdGFydC5yb3c9PWEucm93JiYoZS5zdGFydC5jb2x1bW4rPXUpLGUuZW5kLnJvdz09YS5yb3cmJihlLmVuZC5jb2x1bW4rPXUpLGUuc3RhcnQucm93Kz1vLGUuZW5kLnJvdys9byxlfSkpfXJldHVybiBzfSx0aGlzLmluZGVudFJvd3M9ZnVuY3Rpb24oZSx0LG4pe249bi5yZXBsYWNlKC9cdC9nLHRoaXMuZ2V0VGFiU3RyaW5nKCkpO2Zvcih2YXIgcj1lO3I8PXQ7cisrKXRoaXMuZG9jLmluc2VydEluTGluZSh7cm93OnIsY29sdW1uOjB9LG4pfSx0aGlzLm91dGRlbnRSb3dzPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sbGFwc2VSb3dzKCksbj1uZXcgbCgwLDAsMCwwKSxyPXRoaXMuZ2V0VGFiU2l6ZSgpO2Zvcih2YXIgaT10LnN0YXJ0LnJvdztpPD10LmVuZC5yb3c7KytpKXt2YXIgcz10aGlzLmdldExpbmUoaSk7bi5zdGFydC5yb3c9aSxuLmVuZC5yb3c9aTtmb3IodmFyIG89MDtvPHI7KytvKWlmKHMuY2hhckF0KG8pIT0iICIpYnJlYWs7bzxyJiZzLmNoYXJBdChvKT09IgkiPyhuLnN0YXJ0LmNvbHVtbj1vLG4uZW5kLmNvbHVtbj1vKzEpOihuLnN0YXJ0LmNvbHVtbj0wLG4uZW5kLmNvbHVtbj1vKSx0aGlzLnJlbW92ZShuKX19LHRoaXMuJG1vdmVMaW5lcz1mdW5jdGlvbihlLHQsbil7ZT10aGlzLmdldFJvd0ZvbGRTdGFydChlKSx0PXRoaXMuZ2V0Um93Rm9sZEVuZCh0KTtpZihuPDApe3ZhciByPXRoaXMuZ2V0Um93Rm9sZFN0YXJ0KGUrbik7aWYocjwwKXJldHVybiAwO3ZhciBpPXItZX1lbHNlIGlmKG4+MCl7dmFyIHI9dGhpcy5nZXRSb3dGb2xkRW5kKHQrbik7aWYocj50aGlzLmRvYy5nZXRMZW5ndGgoKS0xKXJldHVybiAwO3ZhciBpPXItdH1lbHNle2U9dGhpcy4kY2xpcFJvd1RvRG9jdW1lbnQoZSksdD10aGlzLiRjbGlwUm93VG9Eb2N1bWVudCh0KTt2YXIgaT10LWUrMX12YXIgcz1uZXcgbChlLDAsdCxOdW1iZXIuTUFYX1ZBTFVFKSxvPXRoaXMuZ2V0Rm9sZHNJblJhbmdlKHMpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZT1lLmNsb25lKCksZS5zdGFydC5yb3crPWksZS5lbmQucm93Kz1pLGV9KSx1PW49PTA/dGhpcy5kb2MuZ2V0TGluZXMoZSx0KTp0aGlzLmRvYy5yZW1vdmVGdWxsTGluZXMoZSx0KTtyZXR1cm4gdGhpcy5kb2MuaW5zZXJ0RnVsbExpbmVzKGUraSx1KSxvLmxlbmd0aCYmdGhpcy5hZGRGb2xkcyhvKSxpfSx0aGlzLm1vdmVMaW5lc1VwPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuJG1vdmVMaW5lcyhlLHQsLTEpfSx0aGlzLm1vdmVMaW5lc0Rvd249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy4kbW92ZUxpbmVzKGUsdCwxKX0sdGhpcy5kdXBsaWNhdGVMaW5lcz1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLiRtb3ZlTGluZXMoZSx0LDApfSx0aGlzLiRjbGlwUm93VG9Eb2N1bWVudD1mdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbihlLHRoaXMuZG9jLmdldExlbmd0aCgpLTEpKX0sdGhpcy4kY2xpcENvbHVtblRvUm93PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ8MD8wOk1hdGgubWluKHRoaXMuZG9jLmdldExpbmUoZSkubGVuZ3RoLHQpfSx0aGlzLiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50PWZ1bmN0aW9uKGUsdCl7dD1NYXRoLm1heCgwLHQpO2lmKGU8MCllPTAsdD0wO2Vsc2V7dmFyIG49dGhpcy5kb2MuZ2V0TGVuZ3RoKCk7ZT49bj8oZT1uLTEsdD10aGlzLmRvYy5nZXRMaW5lKG4tMSkubGVuZ3RoKTp0PU1hdGgubWluKHRoaXMuZG9jLmdldExpbmUoZSkubGVuZ3RoLHQpfXJldHVybntyb3c6ZSxjb2x1bW46dH19LHRoaXMuJGNsaXBSYW5nZVRvRG9jdW1lbnQ9ZnVuY3Rpb24oZSl7ZS5zdGFydC5yb3c8MD8oZS5zdGFydC5yb3c9MCxlLnN0YXJ0LmNvbHVtbj0wKTplLnN0YXJ0LmNvbHVtbj10aGlzLiRjbGlwQ29sdW1uVG9Sb3coZS5zdGFydC5yb3csZS5zdGFydC5jb2x1bW4pO3ZhciB0PXRoaXMuZG9jLmdldExlbmd0aCgpLTE7cmV0dXJuIGUuZW5kLnJvdz50PyhlLmVuZC5yb3c9dCxlLmVuZC5jb2x1bW49dGhpcy5kb2MuZ2V0TGluZSh0KS5sZW5ndGgpOmUuZW5kLmNvbHVtbj10aGlzLiRjbGlwQ29sdW1uVG9Sb3coZS5lbmQucm93LGUuZW5kLmNvbHVtbiksZX0sdGhpcy4kd3JhcExpbWl0PTgwLHRoaXMuJHVzZVdyYXBNb2RlPSExLHRoaXMuJHdyYXBMaW1pdFJhbmdlPXttaW46bnVsbCxtYXg6bnVsbH0sdGhpcy5zZXRVc2VXcmFwTW9kZT1mdW5jdGlvbihlKXtpZihlIT10aGlzLiR1c2VXcmFwTW9kZSl7dGhpcy4kdXNlV3JhcE1vZGU9ZSx0aGlzLiRtb2RpZmllZD0hMCx0aGlzLiRyZXNldFJvd0NhY2hlKDApO2lmKGUpe3ZhciB0PXRoaXMuZ2V0TGVuZ3RoKCk7dGhpcy4kd3JhcERhdGE9QXJyYXkodCksdGhpcy4kdXBkYXRlV3JhcERhdGEoMCx0LTEpfXRoaXMuX3NpZ25hbCgiY2hhbmdlV3JhcE1vZGUiKX19LHRoaXMuZ2V0VXNlV3JhcE1vZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kdXNlV3JhcE1vZGV9LHRoaXMuc2V0V3JhcExpbWl0UmFuZ2U9ZnVuY3Rpb24oZSx0KXtpZih0aGlzLiR3cmFwTGltaXRSYW5nZS5taW4hPT1lfHx0aGlzLiR3cmFwTGltaXRSYW5nZS5tYXghPT10KXRoaXMuJHdyYXBMaW1pdFJhbmdlPXttaW46ZSxtYXg6dH0sdGhpcy4kbW9kaWZpZWQ9ITAsdGhpcy4kYmlkaUhhbmRsZXIubWFya0FzRGlydHkoKSx0aGlzLiR1c2VXcmFwTW9kZSYmdGhpcy5fc2lnbmFsKCJjaGFuZ2VXcmFwTW9kZSIpfSx0aGlzLmFkanVzdFdyYXBMaW1pdD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuJHdyYXBMaW1pdFJhbmdlO24ubWF4PDAmJihuPXttaW46dCxtYXg6dH0pO3ZhciByPXRoaXMuJGNvbnN0cmFpbldyYXBMaW1pdChlLG4ubWluLG4ubWF4KTtyZXR1cm4gciE9dGhpcy4kd3JhcExpbWl0JiZyPjE/KHRoaXMuJHdyYXBMaW1pdD1yLHRoaXMuJG1vZGlmaWVkPSEwLHRoaXMuJHVzZVdyYXBNb2RlJiYodGhpcy4kdXBkYXRlV3JhcERhdGEoMCx0aGlzLmdldExlbmd0aCgpLTEpLHRoaXMuJHJlc2V0Um93Q2FjaGUoMCksdGhpcy5fc2lnbmFsKCJjaGFuZ2VXcmFwTGltaXQiKSksITApOiExfSx0aGlzLiRjb25zdHJhaW5XcmFwTGltaXQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0JiYoZT1NYXRoLm1heCh0LGUpKSxuJiYoZT1NYXRoLm1pbihuLGUpKSxlfSx0aGlzLmdldFdyYXBMaW1pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLiR3cmFwTGltaXR9LHRoaXMuc2V0V3JhcExpbWl0PWZ1bmN0aW9uKGUpe3RoaXMuc2V0V3JhcExpbWl0UmFuZ2UoZSxlKX0sdGhpcy5nZXRXcmFwTGltaXRSYW5nZT1mdW5jdGlvbigpe3JldHVybnttaW46dGhpcy4kd3JhcExpbWl0UmFuZ2UubWluLG1heDp0aGlzLiR3cmFwTGltaXRSYW5nZS5tYXh9fSx0aGlzLiR1cGRhdGVJbnRlcm5hbERhdGFPbkNoYW5nZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLiR1c2VXcmFwTW9kZSxuPWUuYWN0aW9uLHI9ZS5zdGFydCxpPWUuZW5kLHM9ci5yb3csbz1pLnJvdyx1PW8tcyxhPW51bGw7dGhpcy4kdXBkYXRpbmc9ITA7aWYodSE9MClpZihuPT09InJlbW92ZSIpe3RoaXNbdD8iJHdyYXBEYXRhIjoiJHJvd0xlbmd0aENhY2hlIl0uc3BsaWNlKHMsdSk7dmFyIGY9dGhpcy4kZm9sZERhdGE7YT10aGlzLmdldEZvbGRzSW5SYW5nZShlKSx0aGlzLnJlbW92ZUZvbGRzKGEpO3ZhciBsPXRoaXMuZ2V0Rm9sZExpbmUoaS5yb3cpLGM9MDtpZihsKXtsLmFkZFJlbW92ZUNoYXJzKGkucm93LGkuY29sdW1uLHIuY29sdW1uLWkuY29sdW1uKSxsLnNoaWZ0Um93KC11KTt2YXIgaD10aGlzLmdldEZvbGRMaW5lKHMpO2gmJmghPT1sJiYoaC5tZXJnZShsKSxsPWgpLGM9Zi5pbmRleE9mKGwpKzF9Zm9yKGM7YzxmLmxlbmd0aDtjKyspe3ZhciBsPWZbY107bC5zdGFydC5yb3c+PWkucm93JiZsLnNoaWZ0Um93KC11KX1vPXN9ZWxzZXt2YXIgcD1BcnJheSh1KTtwLnVuc2hpZnQocywwKTt2YXIgZD10P3RoaXMuJHdyYXBEYXRhOnRoaXMuJHJvd0xlbmd0aENhY2hlO2Quc3BsaWNlLmFwcGx5KGQscCk7dmFyIGY9dGhpcy4kZm9sZERhdGEsbD10aGlzLmdldEZvbGRMaW5lKHMpLGM9MDtpZihsKXt2YXIgdj1sLnJhbmdlLmNvbXBhcmVJbnNpZGUoci5yb3csci5jb2x1bW4pO3Y9PTA/KGw9bC5zcGxpdChyLnJvdyxyLmNvbHVtbiksbCYmKGwuc2hpZnRSb3codSksbC5hZGRSZW1vdmVDaGFycyhvLDAsaS5jb2x1bW4tci5jb2x1bW4pKSk6dj09LTEmJihsLmFkZFJlbW92ZUNoYXJzKHMsMCxpLmNvbHVtbi1yLmNvbHVtbiksbC5zaGlmdFJvdyh1KSksYz1mLmluZGV4T2YobCkrMX1mb3IoYztjPGYubGVuZ3RoO2MrKyl7dmFyIGw9ZltjXTtsLnN0YXJ0LnJvdz49cyYmbC5zaGlmdFJvdyh1KX19ZWxzZXt1PU1hdGguYWJzKGUuc3RhcnQuY29sdW1uLWUuZW5kLmNvbHVtbiksbj09PSJyZW1vdmUiJiYoYT10aGlzLmdldEZvbGRzSW5SYW5nZShlKSx0aGlzLnJlbW92ZUZvbGRzKGEpLHU9LXUpO3ZhciBsPXRoaXMuZ2V0Rm9sZExpbmUocyk7bCYmbC5hZGRSZW1vdmVDaGFycyhzLHIuY29sdW1uLHUpfXJldHVybiB0JiZ0aGlzLiR3cmFwRGF0YS5sZW5ndGghPXRoaXMuZG9jLmdldExlbmd0aCgpJiZjb25zb2xlLmVycm9yKCJkb2MuZ2V0TGVuZ3RoKCkgYW5kICR3cmFwRGF0YS5sZW5ndGggaGF2ZSB0byBiZSB0aGUgc2FtZSEiKSx0aGlzLiR1cGRhdGluZz0hMSx0P3RoaXMuJHVwZGF0ZVdyYXBEYXRhKHMsbyk6dGhpcy4kdXBkYXRlUm93TGVuZ3RoQ2FjaGUocyxvKSxhfSx0aGlzLiR1cGRhdGVSb3dMZW5ndGhDYWNoZT1mdW5jdGlvbihlLHQsbil7dGhpcy4kcm93TGVuZ3RoQ2FjaGVbZV09bnVsbCx0aGlzLiRyb3dMZW5ndGhDYWNoZVt0XT1udWxsfSx0aGlzLiR1cGRhdGVXcmFwRGF0YT1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuZG9jLmdldEFsbExpbmVzKCksaT10aGlzLmdldFRhYlNpemUoKSxvPXRoaXMuJHdyYXBEYXRhLHU9dGhpcy4kd3JhcExpbWl0LGEsZixsPWU7dD1NYXRoLm1pbih0LHIubGVuZ3RoLTEpO3doaWxlKGw8PXQpZj10aGlzLmdldEZvbGRMaW5lKGwsZiksZj8oYT1bXSxmLndhbGsoZnVuY3Rpb24oZSx0LGksbyl7dmFyIHU7aWYoZSE9bnVsbCl7dT10aGlzLiRnZXREaXNwbGF5VG9rZW5zKGUsYS5sZW5ndGgpLHVbMF09bjtmb3IodmFyIGY9MTtmPHUubGVuZ3RoO2YrKyl1W2ZdPXN9ZWxzZSB1PXRoaXMuJGdldERpc3BsYXlUb2tlbnMoclt0XS5zdWJzdHJpbmcobyxpKSxhLmxlbmd0aCk7YT1hLmNvbmNhdCh1KX0uYmluZCh0aGlzKSxmLmVuZC5yb3cscltmLmVuZC5yb3ddLmxlbmd0aCsxKSxvW2Yuc3RhcnQucm93XT10aGlzLiRjb21wdXRlV3JhcFNwbGl0cyhhLHUsaSksbD1mLmVuZC5yb3crMSk6KGE9dGhpcy4kZ2V0RGlzcGxheVRva2VucyhyW2xdKSxvW2xdPXRoaXMuJGNvbXB1dGVXcmFwU3BsaXRzKGEsdSxpKSxsKyspfTt2YXIgZT0xLHQ9MixuPTMscz00LGE9OSxjPTEwLGQ9MTEsdj0xMjt0aGlzLiRjb21wdXRlV3JhcFNwbGl0cz1mdW5jdGlvbihlLHIsaSl7ZnVuY3Rpb24gZygpe3ZhciB0PTA7aWYobT09PTApcmV0dXJuIHQ7aWYocClmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZVtuXTtpZihyPT1jKXQrPTE7ZWxzZXtpZihyIT1kKXtpZihyPT12KWNvbnRpbnVlO2JyZWFrfXQrPWl9fXJldHVybiBoJiZwIT09ITEmJih0Kz1pKSxNYXRoLm1pbih0LG0pfWZ1bmN0aW9uIHkodCl7dmFyIG49dC1mO2Zvcih2YXIgcj1mO3I8dDtyKyspe3ZhciBpPWVbcl07aWYoaT09PTEyfHxpPT09MiluLT0xfW8ubGVuZ3RofHwoYj1nKCksby5pbmRlbnQ9YiksbCs9bixvLnB1c2gobCksZj10fWlmKGUubGVuZ3RoPT0wKXJldHVybltdO3ZhciBvPVtdLHU9ZS5sZW5ndGgsZj0wLGw9MCxoPXRoaXMuJHdyYXBBc0NvZGUscD10aGlzLiRpbmRlbnRlZFNvZnRXcmFwLG09cjw9TWF0aC5tYXgoMippLDgpfHxwPT09ITE/MDpNYXRoLmZsb29yKHIvMiksYj0wO3doaWxlKHUtZj5yLWIpe3ZhciB3PWYrci1iO2lmKGVbdy0xXT49YyYmZVt3XT49Yyl7eSh3KTtjb250aW51ZX1pZihlW3ddPT1ufHxlW3ddPT1zKXtmb3Iodzt3IT1mLTE7dy0tKWlmKGVbd109PW4pYnJlYWs7aWYodz5mKXt5KHcpO2NvbnRpbnVlfXc9ZityO2Zvcih3O3c8ZS5sZW5ndGg7dysrKWlmKGVbd10hPXMpYnJlYWs7aWYodz09ZS5sZW5ndGgpYnJlYWs7eSh3KTtjb250aW51ZX12YXIgRT1NYXRoLm1heCh3LShyLShyPj4yKSksZi0xKTt3aGlsZSh3PkUmJmVbd108bil3LS07aWYoaCl7d2hpbGUodz5FJiZlW3ddPG4pdy0tO3doaWxlKHc+RSYmZVt3XT09YSl3LS19ZWxzZSB3aGlsZSh3PkUmJmVbd108Yyl3LS07aWYodz5FKXt5KCsrdyk7Y29udGludWV9dz1mK3IsZVt3XT09dCYmdy0tLHkody1iKX1yZXR1cm4gb30sdGhpcy4kZ2V0RGlzcGxheVRva2Vucz1mdW5jdGlvbihuLHIpe3ZhciBpPVtdLHM7cj1yfHwwO2Zvcih2YXIgbz0wO288bi5sZW5ndGg7bysrKXt2YXIgdT1uLmNoYXJDb2RlQXQobyk7aWYodT09OSl7cz10aGlzLmdldFNjcmVlblRhYlNpemUoaS5sZW5ndGgrciksaS5wdXNoKGQpO2Zvcih2YXIgZj0xO2Y8cztmKyspaS5wdXNoKHYpfWVsc2UgdT09MzI/aS5wdXNoKGMpOnU+MzkmJnU8NDh8fHU+NTcmJnU8NjQ/aS5wdXNoKGEpOnU+PTQzNTImJm0odSk/aS5wdXNoKGUsdCk6aS5wdXNoKGUpfXJldHVybiBpfSx0aGlzLiRnZXRTdHJpbmdTY3JlZW5XaWR0aD1mdW5jdGlvbihlLHQsbil7aWYodD09MClyZXR1cm5bMCwwXTt0PT1udWxsJiYodD1JbmZpbml0eSksbj1ufHwwO3ZhciByLGk7Zm9yKGk9MDtpPGUubGVuZ3RoO2krKyl7cj1lLmNoYXJDb2RlQXQoaSkscj09OT9uKz10aGlzLmdldFNjcmVlblRhYlNpemUobik6cj49NDM1MiYmbShyKT9uKz0yOm4rPTE7aWYobj50KWJyZWFrfXJldHVybltuLGldfSx0aGlzLmxpbmVXaWRnZXRzPW51bGwsdGhpcy5nZXRSb3dMZW5ndGg9ZnVuY3Rpb24oZSl7aWYodGhpcy5saW5lV2lkZ2V0cyl2YXIgdD10aGlzLmxpbmVXaWRnZXRzW2VdJiZ0aGlzLmxpbmVXaWRnZXRzW2VdLnJvd0NvdW50fHwwO2Vsc2UgdD0wO3JldHVybiF0aGlzLiR1c2VXcmFwTW9kZXx8IXRoaXMuJHdyYXBEYXRhW2VdPzErdDp0aGlzLiR3cmFwRGF0YVtlXS5sZW5ndGgrMSt0fSx0aGlzLmdldFJvd0xpbmVDb3VudD1mdW5jdGlvbihlKXtyZXR1cm4hdGhpcy4kdXNlV3JhcE1vZGV8fCF0aGlzLiR3cmFwRGF0YVtlXT8xOnRoaXMuJHdyYXBEYXRhW2VdLmxlbmd0aCsxfSx0aGlzLmdldFJvd1dyYXBJbmRlbnQ9ZnVuY3Rpb24oZSl7aWYodGhpcy4kdXNlV3JhcE1vZGUpe3ZhciB0PXRoaXMuc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKGUsTnVtYmVyLk1BWF9WQUxVRSksbj10aGlzLiR3cmFwRGF0YVt0LnJvd107cmV0dXJuIG4ubGVuZ3RoJiZuWzBdPHQuY29sdW1uP24uaW5kZW50OjB9cmV0dXJuIDB9LHRoaXMuZ2V0U2NyZWVuTGFzdFJvd0NvbHVtbj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihlLE51bWJlci5NQVhfVkFMVUUpO3JldHVybiB0aGlzLmRvY3VtZW50VG9TY3JlZW5Db2x1bW4odC5yb3csdC5jb2x1bW4pfSx0aGlzLmdldERvY3VtZW50TGFzdFJvd0NvbHVtbj1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZG9jdW1lbnRUb1NjcmVlblJvdyhlLHQpO3JldHVybiB0aGlzLmdldFNjcmVlbkxhc3RSb3dDb2x1bW4obil9LHRoaXMuZ2V0RG9jdW1lbnRMYXN0Um93Q29sdW1uUG9zaXRpb249ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmRvY3VtZW50VG9TY3JlZW5Sb3coZSx0KTtyZXR1cm4gdGhpcy5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24obixOdW1iZXIuTUFYX1ZBTFVFLzEwKX0sdGhpcy5nZXRSb3dTcGxpdERhdGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuJHVzZVdyYXBNb2RlP3RoaXMuJHdyYXBEYXRhW2VdOnVuZGVmaW5lZH0sdGhpcy5nZXRTY3JlZW5UYWJTaXplPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLiR0YWJTaXplLShlJXRoaXMuJHRhYlNpemV8MCl9LHRoaXMuc2NyZWVuVG9Eb2N1bWVudFJvdz1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihlLHQpLnJvd30sdGhpcy5zY3JlZW5Ub0RvY3VtZW50Q29sdW1uPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKGUsdCkuY29sdW1ufSx0aGlzLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbj1mdW5jdGlvbihlLHQsbil7aWYoZTwwKXJldHVybntyb3c6MCxjb2x1bW46MH07dmFyIHIsaT0wLHM9MCxvLHU9MCxhPTAsZj10aGlzLiRzY3JlZW5Sb3dDYWNoZSxsPXRoaXMuJGdldFJvd0NhY2hlSW5kZXgoZixlKSxjPWYubGVuZ3RoO2lmKGMmJmw+PTApdmFyIHU9ZltsXSxpPXRoaXMuJGRvY1Jvd0NhY2hlW2xdLGg9ZT5mW2MtMV07ZWxzZSB2YXIgaD0hYzt2YXIgcD10aGlzLmdldExlbmd0aCgpLTEsZD10aGlzLmdldE5leHRGb2xkTGluZShpKSx2PWQ/ZC5zdGFydC5yb3c6SW5maW5pdHk7d2hpbGUodTw9ZSl7YT10aGlzLmdldFJvd0xlbmd0aChpKTtpZih1K2E+ZXx8aT49cClicmVhazt1Kz1hLGkrKyxpPnYmJihpPWQuZW5kLnJvdysxLGQ9dGhpcy5nZXROZXh0Rm9sZExpbmUoaSxkKSx2PWQ/ZC5zdGFydC5yb3c6SW5maW5pdHkpLGgmJih0aGlzLiRkb2NSb3dDYWNoZS5wdXNoKGkpLHRoaXMuJHNjcmVlblJvd0NhY2hlLnB1c2godSkpfWlmKGQmJmQuc3RhcnQucm93PD1pKXI9dGhpcy5nZXRGb2xkRGlzcGxheUxpbmUoZCksaT1kLnN0YXJ0LnJvdztlbHNle2lmKHUrYTw9ZXx8aT5wKXJldHVybntyb3c6cCxjb2x1bW46dGhpcy5nZXRMaW5lKHApLmxlbmd0aH07cj10aGlzLmdldExpbmUoaSksZD1udWxsfXZhciBtPTAsZz1NYXRoLmZsb29yKGUtdSk7aWYodGhpcy4kdXNlV3JhcE1vZGUpe3ZhciB5PXRoaXMuJHdyYXBEYXRhW2ldO3kmJihvPXlbZ10sZz4wJiZ5Lmxlbmd0aCYmKG09eS5pbmRlbnQscz15W2ctMV18fHlbeS5sZW5ndGgtMV0scj1yLnN1YnN0cmluZyhzKSkpfXJldHVybiBuIT09dW5kZWZpbmVkJiZ0aGlzLiRiaWRpSGFuZGxlci5pc0JpZGlSb3codStnLGksZykmJih0PXRoaXMuJGJpZGlIYW5kbGVyLm9mZnNldFRvQ29sKG4pKSxzKz10aGlzLiRnZXRTdHJpbmdTY3JlZW5XaWR0aChyLHQtbSlbMV0sdGhpcy4kdXNlV3JhcE1vZGUmJnM+PW8mJihzPW8tMSksZD9kLmlkeFRvUG9zaXRpb24ocyk6e3JvdzppLGNvbHVtbjpzfX0sdGhpcy5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb249ZnVuY3Rpb24oZSx0KXtpZih0eXBlb2YgdD09InVuZGVmaW5lZCIpdmFyIG49dGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudChlLnJvdyxlLmNvbHVtbik7ZWxzZSBuPXRoaXMuJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQoZSx0KTtlPW4ucm93LHQ9bi5jb2x1bW47dmFyIHI9MCxpPW51bGwscz1udWxsO3M9dGhpcy5nZXRGb2xkQXQoZSx0LDEpLHMmJihlPXMuc3RhcnQucm93LHQ9cy5zdGFydC5jb2x1bW4pO3ZhciBvLHU9MCxhPXRoaXMuJGRvY1Jvd0NhY2hlLGY9dGhpcy4kZ2V0Um93Q2FjaGVJbmRleChhLGUpLGw9YS5sZW5ndGg7aWYobCYmZj49MCl2YXIgdT1hW2ZdLHI9dGhpcy4kc2NyZWVuUm93Q2FjaGVbZl0sYz1lPmFbbC0xXTtlbHNlIHZhciBjPSFsO3ZhciBoPXRoaXMuZ2V0TmV4dEZvbGRMaW5lKHUpLHA9aD9oLnN0YXJ0LnJvdzpJbmZpbml0eTt3aGlsZSh1PGUpe2lmKHU+PXApe289aC5lbmQucm93KzE7aWYobz5lKWJyZWFrO2g9dGhpcy5nZXROZXh0Rm9sZExpbmUobyxoKSxwPWg/aC5zdGFydC5yb3c6SW5maW5pdHl9ZWxzZSBvPXUrMTtyKz10aGlzLmdldFJvd0xlbmd0aCh1KSx1PW8sYyYmKHRoaXMuJGRvY1Jvd0NhY2hlLnB1c2godSksdGhpcy4kc2NyZWVuUm93Q2FjaGUucHVzaChyKSl9dmFyIGQ9IiI7aCYmdT49cD8oZD10aGlzLmdldEZvbGREaXNwbGF5TGluZShoLGUsdCksaT1oLnN0YXJ0LnJvdyk6KGQ9dGhpcy5nZXRMaW5lKGUpLnN1YnN0cmluZygwLHQpLGk9ZSk7dmFyIHY9MDtpZih0aGlzLiR1c2VXcmFwTW9kZSl7dmFyIG09dGhpcy4kd3JhcERhdGFbaV07aWYobSl7dmFyIGc9MDt3aGlsZShkLmxlbmd0aD49bVtnXSlyKyssZysrO2Q9ZC5zdWJzdHJpbmcobVtnLTFdfHwwLGQubGVuZ3RoKSx2PWc+MD9tLmluZGVudDowfX1yZXR1cm57cm93OnIsY29sdW1uOnYrdGhpcy4kZ2V0U3RyaW5nU2NyZWVuV2lkdGgoZClbMF19fSx0aGlzLmRvY3VtZW50VG9TY3JlZW5Db2x1bW49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24oZSx0KS5jb2x1bW59LHRoaXMuZG9jdW1lbnRUb1NjcmVlblJvdz1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbihlLHQpLnJvd30sdGhpcy5nZXRTY3JlZW5MZW5ndGg9ZnVuY3Rpb24oKXt2YXIgZT0wLHQ9bnVsbDtpZighdGhpcy4kdXNlV3JhcE1vZGUpe2U9dGhpcy5nZXRMZW5ndGgoKTt2YXIgbj10aGlzLiRmb2xkRGF0YTtmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyl0PW5bcl0sZS09dC5lbmQucm93LXQuc3RhcnQucm93fWVsc2V7dmFyIGk9dGhpcy4kd3JhcERhdGEubGVuZ3RoLHM9MCxyPTAsdD10aGlzLiRmb2xkRGF0YVtyKytdLG89dD90LnN0YXJ0LnJvdzpJbmZpbml0eTt3aGlsZShzPGkpe3ZhciB1PXRoaXMuJHdyYXBEYXRhW3NdO2UrPXU/dS5sZW5ndGgrMToxLHMrKyxzPm8mJihzPXQuZW5kLnJvdysxLHQ9dGhpcy4kZm9sZERhdGFbcisrXSxvPXQ/dC5zdGFydC5yb3c6SW5maW5pdHkpfX1yZXR1cm4gdGhpcy5saW5lV2lkZ2V0cyYmKGUrPXRoaXMuJGdldFdpZGdldFNjcmVlbkxlbmd0aCgpKSxlfSx0aGlzLiRzZXRGb250TWV0cmljcz1mdW5jdGlvbihlKXtpZighdGhpcy4kZW5hYmxlVmFyQ2hhcilyZXR1cm47dGhpcy4kZ2V0U3RyaW5nU2NyZWVuV2lkdGg9ZnVuY3Rpb24odCxuLHIpe2lmKG49PT0wKXJldHVyblswLDBdO258fChuPUluZmluaXR5KSxyPXJ8fDA7dmFyIGkscztmb3Iocz0wO3M8dC5sZW5ndGg7cysrKXtpPXQuY2hhckF0KHMpLGk9PT0iCSI/cis9dGhpcy5nZXRTY3JlZW5UYWJTaXplKHIpOnIrPWUuZ2V0Q2hhcmFjdGVyV2lkdGgoaSk7aWYocj5uKWJyZWFrfXJldHVybltyLHNdfX0sdGhpcy5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5iZ1Rva2VuaXplciYmKHRoaXMuYmdUb2tlbml6ZXIuc2V0RG9jdW1lbnQobnVsbCksdGhpcy5iZ1Rva2VuaXplcj1udWxsKSx0aGlzLiRzdG9wV29ya2VyKCl9LHRoaXMuaXNGdWxsV2lkdGg9bX0uY2FsbChkLnByb3RvdHlwZSksZSgiLi9lZGl0X3Nlc3Npb24vZm9sZGluZyIpLkZvbGRpbmcuY2FsbChkLnByb3RvdHlwZSksZSgiLi9lZGl0X3Nlc3Npb24vYnJhY2tldF9tYXRjaCIpLkJyYWNrZXRNYXRjaC5jYWxsKGQucHJvdG90eXBlKSxvLmRlZmluZU9wdGlvbnMoZC5wcm90b3R5cGUsInNlc3Npb24iLHt3cmFwOntzZXQ6ZnVuY3Rpb24oZSl7IWV8fGU9PSJvZmYiP2U9ITE6ZT09ImZyZWUiP2U9ITA6ZT09InByaW50TWFyZ2luIj9lPS0xOnR5cGVvZiBlPT0ic3RyaW5nIiYmKGU9cGFyc2VJbnQoZSwxMCl8fCExKTtpZih0aGlzLiR3cmFwPT1lKXJldHVybjt0aGlzLiR3cmFwPWU7aWYoIWUpdGhpcy5zZXRVc2VXcmFwTW9kZSghMSk7ZWxzZXt2YXIgdD10eXBlb2YgZT09Im51bWJlciI/ZTpudWxsO3RoaXMuc2V0V3JhcExpbWl0UmFuZ2UodCx0KSx0aGlzLnNldFVzZVdyYXBNb2RlKCEwKX19LGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFVzZVdyYXBNb2RlKCk/dGhpcy4kd3JhcD09LTE/InByaW50TWFyZ2luIjp0aGlzLmdldFdyYXBMaW1pdFJhbmdlKCkubWluP3RoaXMuJHdyYXA6ImZyZWUiOiJvZmYifSxoYW5kbGVzU2V0OiEwfSx3cmFwTWV0aG9kOntzZXQ6ZnVuY3Rpb24oZSl7ZT1lPT0iYXV0byI/dGhpcy4kbW9kZS50eXBlIT0idGV4dCI6ZSE9InRleHQiLGUhPXRoaXMuJHdyYXBBc0NvZGUmJih0aGlzLiR3cmFwQXNDb2RlPWUsdGhpcy4kdXNlV3JhcE1vZGUmJih0aGlzLiR1c2VXcmFwTW9kZT0hMSx0aGlzLnNldFVzZVdyYXBNb2RlKCEwKSkpfSxpbml0aWFsVmFsdWU6ImF1dG8ifSxpbmRlbnRlZFNvZnRXcmFwOntzZXQ6ZnVuY3Rpb24oKXt0aGlzLiR1c2VXcmFwTW9kZSYmKHRoaXMuJHVzZVdyYXBNb2RlPSExLHRoaXMuc2V0VXNlV3JhcE1vZGUoITApKX0saW5pdGlhbFZhbHVlOiEwfSxmaXJzdExpbmVOdW1iZXI6e3NldDpmdW5jdGlvbigpe3RoaXMuX3NpZ25hbCgiY2hhbmdlQnJlYWtwb2ludCIpfSxpbml0aWFsVmFsdWU6MX0sdXNlV29ya2VyOntzZXQ6ZnVuY3Rpb24oZSl7dGhpcy4kdXNlV29ya2VyPWUsdGhpcy4kc3RvcFdvcmtlcigpLGUmJnRoaXMuJHN0YXJ0V29ya2VyKCl9LGluaXRpYWxWYWx1ZTohMH0sdXNlU29mdFRhYnM6e2luaXRpYWxWYWx1ZTohMH0sdGFiU2l6ZTp7c2V0OmZ1bmN0aW9uKGUpe2U9cGFyc2VJbnQoZSksZT4wJiZ0aGlzLiR0YWJTaXplIT09ZSYmKHRoaXMuJG1vZGlmaWVkPSEwLHRoaXMuJHJvd0xlbmd0aENhY2hlPVtdLHRoaXMuJHRhYlNpemU9ZSx0aGlzLl9zaWduYWwoImNoYW5nZVRhYlNpemUiKSl9LGluaXRpYWxWYWx1ZTo0LGhhbmRsZXNTZXQ6ITB9LG5hdmlnYXRlV2l0aGluU29mdFRhYnM6e2luaXRpYWxWYWx1ZTohMX0sZm9sZFN0eWxlOntzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5zZXRGb2xkU3R5bGUoZSl9LGhhbmRsZXNTZXQ6ITB9LG92ZXJ3cml0ZTp7c2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3NpZ25hbCgiY2hhbmdlT3ZlcndyaXRlIil9LGluaXRpYWxWYWx1ZTohMX0sbmV3TGluZU1vZGU6e3NldDpmdW5jdGlvbihlKXt0aGlzLmRvYy5zZXROZXdMaW5lTW9kZShlKX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9jLmdldE5ld0xpbmVNb2RlKCl9LGhhbmRsZXNTZXQ6ITB9LG1vZGU6e3NldDpmdW5jdGlvbihlKXt0aGlzLnNldE1vZGUoZSl9LGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRtb2RlSWR9LGhhbmRsZXNTZXQ6ITB9fSksdC5FZGl0U2Vzc2lvbj1kfSksYWNlLmRlZmluZSgiYWNlL3NlYXJjaCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvbGFuZyIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB1KGUsdCl7ZnVuY3Rpb24gbihlKXtyZXR1cm4vXHcvLnRlc3QoZSl8fHQucmVnRXhwPyJcXGIiOiIifXJldHVybiBuKGVbMF0pK2UrbihlW2UubGVuZ3RoLTFdKX12YXIgcj1lKCIuL2xpYi9sYW5nIiksaT1lKCIuL2xpYi9vb3AiKSxzPWUoIi4vcmFuZ2UiKS5SYW5nZSxvPWZ1bmN0aW9uKCl7dGhpcy4kb3B0aW9ucz17fX07KGZ1bmN0aW9uKCl7dGhpcy5zZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGkubWl4aW4odGhpcy4kb3B0aW9ucyxlKSx0aGlzfSx0aGlzLmdldE9wdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gci5jb3B5T2JqZWN0KHRoaXMuJG9wdGlvbnMpfSx0aGlzLnNldE9wdGlvbnM9ZnVuY3Rpb24oZSl7dGhpcy4kb3B0aW9ucz1lfSx0aGlzLmZpbmQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy4kb3B0aW9ucyxuPXRoaXMuJG1hdGNoSXRlcmF0b3IoZSx0KTtpZighbilyZXR1cm4hMTt2YXIgcj1udWxsO3JldHVybiBuLmZvckVhY2goZnVuY3Rpb24oZSxuLGksbyl7cmV0dXJuIHI9bmV3IHMoZSxuLGksbyksbj09byYmdC5zdGFydCYmdC5zdGFydC5zdGFydCYmdC5za2lwQ3VycmVudCE9MCYmci5pc0VxdWFsKHQuc3RhcnQpPyhyPW51bGwsITEpOiEwfSkscn0sdGhpcy5maW5kQWxsPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuJG9wdGlvbnM7aWYoIXQubmVlZGxlKXJldHVybltdO3RoaXMuJGFzc2VtYmxlUmVnRXhwKHQpO3ZhciBuPXQucmFuZ2UsaT1uP2UuZ2V0TGluZXMobi5zdGFydC5yb3csbi5lbmQucm93KTplLmRvYy5nZXRBbGxMaW5lcygpLG89W10sdT10LnJlO2lmKHQuJGlzTXVsdGlMaW5lKXt2YXIgYT11Lmxlbmd0aCxmPWkubGVuZ3RoLWEsbDtlOmZvcih2YXIgYz11Lm9mZnNldHx8MDtjPD1mO2MrKyl7Zm9yKHZhciBoPTA7aDxhO2grKylpZihpW2MraF0uc2VhcmNoKHVbaF0pPT0tMSljb250aW51ZSBlO3ZhciBwPWlbY10sZD1pW2MrYS0xXSx2PXAubGVuZ3RoLXAubWF0Y2godVswXSlbMF0ubGVuZ3RoLG09ZC5tYXRjaCh1W2EtMV0pWzBdLmxlbmd0aDtpZihsJiZsLmVuZC5yb3c9PT1jJiZsLmVuZC5jb2x1bW4+diljb250aW51ZTtvLnB1c2gobD1uZXcgcyhjLHYsYythLTEsbSkpLGE+MiYmKGM9YythLTIpfX1lbHNlIGZvcih2YXIgZz0wO2c8aS5sZW5ndGg7ZysrKXt2YXIgeT1yLmdldE1hdGNoT2Zmc2V0cyhpW2ddLHUpO2Zvcih2YXIgaD0wO2g8eS5sZW5ndGg7aCsrKXt2YXIgYj15W2hdO28ucHVzaChuZXcgcyhnLGIub2Zmc2V0LGcsYi5vZmZzZXQrYi5sZW5ndGgpKX19aWYobil7dmFyIHc9bi5zdGFydC5jb2x1bW4sRT1uLnN0YXJ0LmNvbHVtbixnPTAsaD1vLmxlbmd0aC0xO3doaWxlKGc8aCYmb1tnXS5zdGFydC5jb2x1bW48dyYmb1tnXS5zdGFydC5yb3c9PW4uc3RhcnQucm93KWcrKzt3aGlsZShnPGgmJm9baF0uZW5kLmNvbHVtbj5FJiZvW2hdLmVuZC5yb3c9PW4uZW5kLnJvdyloLS07bz1vLnNsaWNlKGcsaCsxKTtmb3IoZz0wLGg9by5sZW5ndGg7ZzxoO2crKylvW2ddLnN0YXJ0LnJvdys9bi5zdGFydC5yb3csb1tnXS5lbmQucm93Kz1uLnN0YXJ0LnJvd31yZXR1cm4gb30sdGhpcy5yZXBsYWNlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy4kb3B0aW9ucyxyPXRoaXMuJGFzc2VtYmxlUmVnRXhwKG4pO2lmKG4uJGlzTXVsdGlMaW5lKXJldHVybiB0O2lmKCFyKXJldHVybjt2YXIgaT1yLmV4ZWMoZSk7aWYoIWl8fGlbMF0ubGVuZ3RoIT1lLmxlbmd0aClyZXR1cm4gbnVsbDt0PWUucmVwbGFjZShyLHQpO2lmKG4ucHJlc2VydmVDYXNlKXt0PXQuc3BsaXQoIiIpO2Zvcih2YXIgcz1NYXRoLm1pbihlLmxlbmd0aCxlLmxlbmd0aCk7cy0tOyl7dmFyIG89ZVtzXTtvJiZvLnRvTG93ZXJDYXNlKCkhPW8/dFtzXT10W3NdLnRvVXBwZXJDYXNlKCk6dFtzXT10W3NdLnRvTG93ZXJDYXNlKCl9dD10LmpvaW4oIiIpfXJldHVybiB0fSx0aGlzLiRhc3NlbWJsZVJlZ0V4cD1mdW5jdGlvbihlLHQpe2lmKGUubmVlZGxlIGluc3RhbmNlb2YgUmVnRXhwKXJldHVybiBlLnJlPWUubmVlZGxlO3ZhciBuPWUubmVlZGxlO2lmKCFlLm5lZWRsZSlyZXR1cm4gZS5yZT0hMTtlLnJlZ0V4cHx8KG49ci5lc2NhcGVSZWdFeHAobikpLGUud2hvbGVXb3JkJiYobj11KG4sZSkpO3ZhciBpPWUuY2FzZVNlbnNpdGl2ZT8iZ20iOiJnbWkiO2UuJGlzTXVsdGlMaW5lPSF0JiYvW1xuXHJdLy50ZXN0KG4pO2lmKGUuJGlzTXVsdGlMaW5lKXJldHVybiBlLnJlPXRoaXMuJGFzc2VtYmxlTXVsdGlsaW5lUmVnRXhwKG4saSk7dHJ5e3ZhciBzPW5ldyBSZWdFeHAobixpKX1jYXRjaChvKXtzPSExfXJldHVybiBlLnJlPXN9LHRoaXMuJGFzc2VtYmxlTXVsdGlsaW5lUmVnRXhwPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5yZXBsYWNlKC9cclxufFxyfFxuL2csIiRcbl4iKS5zcGxpdCgiXG4iKSxyPVtdO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKXRyeXtyLnB1c2gobmV3IFJlZ0V4cChuW2ldLHQpKX1jYXRjaChzKXtyZXR1cm4hMX1yZXR1cm4gcn0sdGhpcy4kbWF0Y2hJdGVyYXRvcj1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuJGFzc2VtYmxlUmVnRXhwKHQpO2lmKCFuKXJldHVybiExO3ZhciByPXQuYmFja3dhcmRzPT0xLGk9dC5za2lwQ3VycmVudCE9MCxzPXQucmFuZ2Usbz10LnN0YXJ0O298fChvPXM/c1tyPyJlbmQiOiJzdGFydCJdOmUuc2VsZWN0aW9uLmdldFJhbmdlKCkpLG8uc3RhcnQmJihvPW9baSE9cj8iZW5kIjoic3RhcnQiXSk7dmFyIHU9cz9zLnN0YXJ0LnJvdzowLGE9cz9zLmVuZC5yb3c6ZS5nZXRMZW5ndGgoKS0xO2lmKHIpdmFyIGY9ZnVuY3Rpb24oZSl7dmFyIG49by5yb3c7aWYoYyhuLG8uY29sdW1uLGUpKXJldHVybjtmb3Iobi0tO24+PXU7bi0tKWlmKGMobixOdW1iZXIuTUFYX1ZBTFVFLGUpKXJldHVybjtpZih0LndyYXA9PTApcmV0dXJuO2ZvcihuPWEsdT1vLnJvdztuPj11O24tLSlpZihjKG4sTnVtYmVyLk1BWF9WQUxVRSxlKSlyZXR1cm59O2Vsc2UgdmFyIGY9ZnVuY3Rpb24oZSl7dmFyIG49by5yb3c7aWYoYyhuLG8uY29sdW1uLGUpKXJldHVybjtmb3Iobis9MTtuPD1hO24rKylpZihjKG4sMCxlKSlyZXR1cm47aWYodC53cmFwPT0wKXJldHVybjtmb3Iobj11LGE9by5yb3c7bjw9YTtuKyspaWYoYyhuLDAsZSkpcmV0dXJufTtpZih0LiRpc011bHRpTGluZSl2YXIgbD1uLmxlbmd0aCxjPWZ1bmN0aW9uKHQsaSxzKXt2YXIgbz1yP3QtbCsxOnQ7aWYobzwwKXJldHVybjt2YXIgdT1lLmdldExpbmUobyksYT11LnNlYXJjaChuWzBdKTtpZighciYmYTxpfHxhPT09LTEpcmV0dXJuO2Zvcih2YXIgZj0xO2Y8bDtmKyspe3U9ZS5nZXRMaW5lKG8rZik7aWYodS5zZWFyY2gobltmXSk9PS0xKXJldHVybn12YXIgYz11Lm1hdGNoKG5bbC0xXSlbMF0ubGVuZ3RoO2lmKHImJmM+aSlyZXR1cm47aWYocyhvLGEsbytsLTEsYykpcmV0dXJuITB9O2Vsc2UgaWYocil2YXIgYz1mdW5jdGlvbih0LHIsaSl7dmFyIHM9ZS5nZXRMaW5lKHQpLG89W10sdSxhPTA7bi5sYXN0SW5kZXg9MDt3aGlsZSh1PW4uZXhlYyhzKSl7dmFyIGY9dVswXS5sZW5ndGg7YT11LmluZGV4O2lmKCFmKXtpZihhPj1zLmxlbmd0aClicmVhaztuLmxhc3RJbmRleD1hKz0xfWlmKHUuaW5kZXgrZj5yKWJyZWFrO28ucHVzaCh1LmluZGV4LGYpfWZvcih2YXIgbD1vLmxlbmd0aC0xO2w+PTA7bC09Mil7dmFyIGM9b1tsLTFdLGY9b1tsXTtpZihpKHQsYyx0LGMrZikpcmV0dXJuITB9fTtlbHNlIHZhciBjPWZ1bmN0aW9uKHQscixpKXt2YXIgcz1lLmdldExpbmUodCksbyx1O24ubGFzdEluZGV4PXI7d2hpbGUodT1uLmV4ZWMocykpe3ZhciBhPXVbMF0ubGVuZ3RoO289dS5pbmRleDtpZihpKHQsbyx0LG8rYSkpcmV0dXJuITA7aWYoIWEpe24ubGFzdEluZGV4PW8rPTE7aWYobz49cy5sZW5ndGgpcmV0dXJuITF9fX07cmV0dXJue2ZvckVhY2g6Zn19fSkuY2FsbChvLnByb3RvdHlwZSksdC5TZWFyY2g9b30pLGFjZS5kZWZpbmUoImFjZS9rZXlib2FyZC9oYXNoX2hhbmRsZXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2tleXMiLCJhY2UvbGliL3VzZXJhZ2VudCJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbyhlLHQpe3RoaXMucGxhdGZvcm09dHx8KGkuaXNNYWM/Im1hYyI6IndpbiIpLHRoaXMuY29tbWFuZHM9e30sdGhpcy5jb21tYW5kS2V5QmluZGluZz17fSx0aGlzLmFkZENvbW1hbmRzKGUpLHRoaXMuJHNpbmdsZUNvbW1hbmQ9ITB9ZnVuY3Rpb24gdShlLHQpe28uY2FsbCh0aGlzLGUsdCksdGhpcy4kc2luZ2xlQ29tbWFuZD0hMX12YXIgcj1lKCIuLi9saWIva2V5cyIpLGk9ZSgiLi4vbGliL3VzZXJhZ2VudCIpLHM9ci5LRVlfTU9EUzt1LnByb3RvdHlwZT1vLnByb3RvdHlwZSxmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuIHR5cGVvZiBlPT0ib2JqZWN0IiYmZS5iaW5kS2V5JiZlLmJpbmRLZXkucG9zaXRpb258fChlLmlzRGVmYXVsdD8tMTAwOjApfXRoaXMuYWRkQ29tbWFuZD1mdW5jdGlvbihlKXt0aGlzLmNvbW1hbmRzW2UubmFtZV0mJnRoaXMucmVtb3ZlQ29tbWFuZChlKSx0aGlzLmNvbW1hbmRzW2UubmFtZV09ZSxlLmJpbmRLZXkmJnRoaXMuX2J1aWxkS2V5SGFzaChlKX0sdGhpcy5yZW1vdmVDb21tYW5kPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZSYmKHR5cGVvZiBlPT0ic3RyaW5nIj9lOmUubmFtZSk7ZT10aGlzLmNvbW1hbmRzW25dLHR8fGRlbGV0ZSB0aGlzLmNvbW1hbmRzW25dO3ZhciByPXRoaXMuY29tbWFuZEtleUJpbmRpbmc7Zm9yKHZhciBpIGluIHIpe3ZhciBzPXJbaV07aWYocz09ZSlkZWxldGUgcltpXTtlbHNlIGlmKEFycmF5LmlzQXJyYXkocykpe3ZhciBvPXMuaW5kZXhPZihlKTtvIT0tMSYmKHMuc3BsaWNlKG8sMSkscy5sZW5ndGg9PTEmJihyW2ldPXNbMF0pKX19fSx0aGlzLmJpbmRLZXk9ZnVuY3Rpb24oZSx0LG4pe3R5cGVvZiBlPT0ib2JqZWN0IiYmZSYmKG49PXVuZGVmaW5lZCYmKG49ZS5wb3NpdGlvbiksZT1lW3RoaXMucGxhdGZvcm1dKTtpZighZSlyZXR1cm47aWYodHlwZW9mIHQ9PSJmdW5jdGlvbiIpcmV0dXJuIHRoaXMuYWRkQ29tbWFuZCh7ZXhlYzp0LGJpbmRLZXk6ZSxuYW1lOnQubmFtZXx8ZX0pO2Uuc3BsaXQoInwiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByPSIiO2lmKGUuaW5kZXhPZigiICIpIT0tMSl7dmFyIGk9ZS5zcGxpdCgvXHMrLyk7ZT1pLnBvcCgpLGkuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD10aGlzLnBhcnNlS2V5cyhlKSxuPXNbdC5oYXNoSWRdK3Qua2V5O3IrPShyPyIgIjoiIikrbix0aGlzLl9hZGRDb21tYW5kVG9CaW5kaW5nKHIsImNoYWluS2V5cyIpfSx0aGlzKSxyKz0iICJ9dmFyIG89dGhpcy5wYXJzZUtleXMoZSksdT1zW28uaGFzaElkXStvLmtleTt0aGlzLl9hZGRDb21tYW5kVG9CaW5kaW5nKHIrdSx0LG4pfSx0aGlzKX0sdGhpcy5fYWRkQ29tbWFuZFRvQmluZGluZz1mdW5jdGlvbih0LG4scil7dmFyIGk9dGhpcy5jb21tYW5kS2V5QmluZGluZyxzO2lmKCFuKWRlbGV0ZSBpW3RdO2Vsc2UgaWYoIWlbdF18fHRoaXMuJHNpbmdsZUNvbW1hbmQpaVt0XT1uO2Vsc2V7QXJyYXkuaXNBcnJheShpW3RdKT8ocz1pW3RdLmluZGV4T2YobikpIT0tMSYmaVt0XS5zcGxpY2UocywxKTppW3RdPVtpW3RdXSx0eXBlb2YgciE9Im51bWJlciImJihyPWUobikpO3ZhciBvPWlbdF07Zm9yKHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIHU9b1tzXSxhPWUodSk7aWYoYT5yKWJyZWFrfW8uc3BsaWNlKHMsMCxuKX19LHRoaXMuYWRkQ29tbWFuZHM9ZnVuY3Rpb24oZSl7ZSYmT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj1lW3RdO2lmKCFuKXJldHVybjtpZih0eXBlb2Ygbj09InN0cmluZyIpcmV0dXJuIHRoaXMuYmluZEtleShuLHQpO3R5cGVvZiBuPT0iZnVuY3Rpb24iJiYobj17ZXhlYzpufSk7aWYodHlwZW9mIG4hPSJvYmplY3QiKXJldHVybjtuLm5hbWV8fChuLm5hbWU9dCksdGhpcy5hZGRDb21tYW5kKG4pfSx0aGlzKX0sdGhpcy5yZW1vdmVDb21tYW5kcz1mdW5jdGlvbihlKXtPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RoaXMucmVtb3ZlQ29tbWFuZChlW3RdKX0sdGhpcyl9LHRoaXMuYmluZEtleXM9ZnVuY3Rpb24oZSl7T2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXt0aGlzLmJpbmRLZXkodCxlW3RdKX0sdGhpcyl9LHRoaXMuX2J1aWxkS2V5SGFzaD1mdW5jdGlvbihlKXt0aGlzLmJpbmRLZXkoZS5iaW5kS2V5LGUpfSx0aGlzLnBhcnNlS2V5cz1mdW5jdGlvbihlKXt2YXIgdD1lLnRvTG93ZXJDYXNlKCkuc3BsaXQoL1tcLVwrXShbXC1cK10pPy8pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZX0pLG49dC5wb3AoKSxpPXJbbl07aWYoci5GVU5DVElPTl9LRVlTW2ldKW49ci5GVU5DVElPTl9LRVlTW2ldLnRvTG93ZXJDYXNlKCk7ZWxzZXtpZighdC5sZW5ndGgpcmV0dXJue2tleTpuLGhhc2hJZDotMX07aWYodC5sZW5ndGg9PTEmJnRbMF09PSJzaGlmdCIpcmV0dXJue2tleTpuLnRvVXBwZXJDYXNlKCksaGFzaElkOi0xfX12YXIgcz0wO2Zvcih2YXIgbz10Lmxlbmd0aDtvLS07KXt2YXIgdT1yLktFWV9NT0RTW3Rbb11dO2lmKHU9PW51bGwpcmV0dXJuIHR5cGVvZiBjb25zb2xlIT0idW5kZWZpbmVkIiYmY29uc29sZS5lcnJvcigiaW52YWxpZCBtb2RpZmllciAiK3Rbb10rIiBpbiAiK2UpLCExO3N8PXV9cmV0dXJue2tleTpuLGhhc2hJZDpzfX0sdGhpcy5maW5kS2V5Q29tbWFuZD1mdW5jdGlvbih0LG4pe3ZhciByPXNbdF0rbjtyZXR1cm4gdGhpcy5jb21tYW5kS2V5QmluZGluZ1tyXX0sdGhpcy5oYW5kbGVLZXlib2FyZD1mdW5jdGlvbihlLHQsbixyKXtpZihyPDApcmV0dXJuO3ZhciBpPXNbdF0rbixvPXRoaXMuY29tbWFuZEtleUJpbmRpbmdbaV07ZS4ka2V5Q2hhaW4mJihlLiRrZXlDaGFpbis9IiAiK2ksbz10aGlzLmNvbW1hbmRLZXlCaW5kaW5nW2UuJGtleUNoYWluXXx8byk7aWYobylpZihvPT0iY2hhaW5LZXlzInx8b1tvLmxlbmd0aC0xXT09ImNoYWluS2V5cyIpcmV0dXJuIGUuJGtleUNoYWluPWUuJGtleUNoYWlufHxpLHtjb21tYW5kOiJudWxsIn07aWYoZS4ka2V5Q2hhaW4paWYoISF0JiZ0IT00fHxuLmxlbmd0aCE9MSl7aWYodD09LTF8fHI+MCllLiRrZXlDaGFpbj0iIn1lbHNlIGUuJGtleUNoYWluPWUuJGtleUNoYWluLnNsaWNlKDAsLWkubGVuZ3RoLTEpO3JldHVybntjb21tYW5kOm99fSx0aGlzLmdldFN0YXR1c1RleHQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC4ka2V5Q2hhaW58fCIifX0uY2FsbChvLnByb3RvdHlwZSksdC5IYXNoSGFuZGxlcj1vLHQuTXVsdGlIYXNoSGFuZGxlcj11fSksYWNlLmRlZmluZSgiYWNlL2NvbW1hbmRzL2NvbW1hbmRfbWFuYWdlciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2tleWJvYXJkL2hhc2hfaGFuZGxlciIsImFjZS9saWIvZXZlbnRfZW1pdHRlciJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgiLi4vbGliL29vcCIpLGk9ZSgiLi4va2V5Ym9hcmQvaGFzaF9oYW5kbGVyIikuTXVsdGlIYXNoSGFuZGxlcixzPWUoIi4uL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyLG89ZnVuY3Rpb24oZSx0KXtpLmNhbGwodGhpcyx0LGUpLHRoaXMuYnlOYW1lPXRoaXMuY29tbWFuZHMsdGhpcy5zZXREZWZhdWx0SGFuZGxlcigiZXhlYyIsZnVuY3Rpb24oZSl7cmV0dXJuIGUuY29tbWFuZC5leGVjKGUuZWRpdG9yLGUuYXJnc3x8e30pfSl9O3IuaW5oZXJpdHMobyxpKSxmdW5jdGlvbigpe3IuaW1wbGVtZW50KHRoaXMscyksdGhpcy5leGVjPWZ1bmN0aW9uKGUsdCxuKXtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHI9ZS5sZW5ndGg7ci0tOylpZih0aGlzLmV4ZWMoZVtyXSx0LG4pKXJldHVybiEwO3JldHVybiExfXR5cGVvZiBlPT0ic3RyaW5nIiYmKGU9dGhpcy5jb21tYW5kc1tlXSk7aWYoIWUpcmV0dXJuITE7aWYodCYmdC4kcmVhZE9ubHkmJiFlLnJlYWRPbmx5KXJldHVybiExO2lmKHRoaXMuJGNoZWNrQ29tbWFuZFN0YXRlIT0wJiZlLmlzQXZhaWxhYmxlJiYhZS5pc0F2YWlsYWJsZSh0KSlyZXR1cm4hMTt2YXIgaT17ZWRpdG9yOnQsY29tbWFuZDplLGFyZ3M6bn07cmV0dXJuIGkucmV0dXJuVmFsdWU9dGhpcy5fZW1pdCgiZXhlYyIsaSksdGhpcy5fc2lnbmFsKCJhZnRlckV4ZWMiLGkpLGkucmV0dXJuVmFsdWU9PT0hMT8hMTohMH0sdGhpcy50b2dnbGVSZWNvcmRpbmc9ZnVuY3Rpb24oZSl7aWYodGhpcy4kaW5SZXBsYXkpcmV0dXJuO3JldHVybiBlJiZlLl9lbWl0KCJjaGFuZ2VTdGF0dXMiKSx0aGlzLnJlY29yZGluZz8odGhpcy5tYWNyby5wb3AoKSx0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoImV4ZWMiLHRoaXMuJGFkZENvbW1hbmRUb01hY3JvKSx0aGlzLm1hY3JvLmxlbmd0aHx8KHRoaXMubWFjcm89dGhpcy5vbGRNYWNybyksdGhpcy5yZWNvcmRpbmc9ITEpOih0aGlzLiRhZGRDb21tYW5kVG9NYWNyb3x8KHRoaXMuJGFkZENvbW1hbmRUb01hY3JvPWZ1bmN0aW9uKGUpe3RoaXMubWFjcm8ucHVzaChbZS5jb21tYW5kLGUuYXJnc10pfS5iaW5kKHRoaXMpKSx0aGlzLm9sZE1hY3JvPXRoaXMubWFjcm8sdGhpcy5tYWNybz1bXSx0aGlzLm9uKCJleGVjIix0aGlzLiRhZGRDb21tYW5kVG9NYWNybyksdGhpcy5yZWNvcmRpbmc9ITApfSx0aGlzLnJlcGxheT1mdW5jdGlvbihlKXtpZih0aGlzLiRpblJlcGxheXx8IXRoaXMubWFjcm8pcmV0dXJuO2lmKHRoaXMucmVjb3JkaW5nKXJldHVybiB0aGlzLnRvZ2dsZVJlY29yZGluZyhlKTt0cnl7dGhpcy4kaW5SZXBsYXk9ITAsdGhpcy5tYWNyby5mb3JFYWNoKGZ1bmN0aW9uKHQpe3R5cGVvZiB0PT0ic3RyaW5nIj90aGlzLmV4ZWModCxlKTp0aGlzLmV4ZWModFswXSxlLHRbMV0pfSx0aGlzKX1maW5hbGx5e3RoaXMuJGluUmVwbGF5PSExfX0sdGhpcy50cmltTWFjcm89ZnVuY3Rpb24oZSl7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZVswXSE9InN0cmluZyImJihlWzBdPWVbMF0ubmFtZSksZVsxXXx8KGU9ZVswXSksZX0pfX0uY2FsbChvLnByb3RvdHlwZSksdC5Db21tYW5kTWFuYWdlcj1vfSksYWNlLmRlZmluZSgiYWNlL2NvbW1hbmRzL2RlZmF1bHRfY29tbWFuZHMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2xhbmciLCJhY2UvY29uZmlnIiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBvKGUsdCl7cmV0dXJue3dpbjplLG1hYzp0fX12YXIgcj1lKCIuLi9saWIvbGFuZyIpLGk9ZSgiLi4vY29uZmlnIikscz1lKCIuLi9yYW5nZSIpLlJhbmdlO3QuY29tbWFuZHM9W3tuYW1lOiJzaG93U2V0dGluZ3NNZW51IixiaW5kS2V5Om8oIkN0cmwtLCIsIkNvbW1hbmQtLCIpLGV4ZWM6ZnVuY3Rpb24oZSl7aS5sb2FkTW9kdWxlKCJhY2UvZXh0L3NldHRpbmdzX21lbnUiLGZ1bmN0aW9uKHQpe3QuaW5pdChlKSxlLnNob3dTZXR0aW5nc01lbnUoKX0pfSxyZWFkT25seTohMH0se25hbWU6ImdvVG9OZXh0RXJyb3IiLGJpbmRLZXk6bygiQWx0LUUiLCJGNCIpLGV4ZWM6ZnVuY3Rpb24oZSl7aS5sb2FkTW9kdWxlKCIuL2V4dC9lcnJvcl9tYXJrZXIiLGZ1bmN0aW9uKHQpe3Quc2hvd0Vycm9yTWFya2VyKGUsMSl9KX0sc2Nyb2xsSW50b1ZpZXc6ImFuaW1hdGUiLHJlYWRPbmx5OiEwfSx7bmFtZToiZ29Ub1ByZXZpb3VzRXJyb3IiLGJpbmRLZXk6bygiQWx0LVNoaWZ0LUUiLCJTaGlmdC1GNCIpLGV4ZWM6ZnVuY3Rpb24oZSl7aS5sb2FkTW9kdWxlKCIuL2V4dC9lcnJvcl9tYXJrZXIiLGZ1bmN0aW9uKHQpe3Quc2hvd0Vycm9yTWFya2VyKGUsLTEpfSl9LHNjcm9sbEludG9WaWV3OiJhbmltYXRlIixyZWFkT25seTohMH0se25hbWU6InNlbGVjdGFsbCIsZGVzY3JpcHRpb246IlNlbGVjdCBhbGwiLGJpbmRLZXk6bygiQ3RybC1BIiwiQ29tbWFuZC1BIiksZXhlYzpmdW5jdGlvbihlKXtlLnNlbGVjdEFsbCgpfSxyZWFkT25seTohMH0se25hbWU6ImNlbnRlcnNlbGVjdGlvbiIsZGVzY3JpcHRpb246IkNlbnRlciBzZWxlY3Rpb24iLGJpbmRLZXk6byhudWxsLCJDdHJsLUwiKSxleGVjOmZ1bmN0aW9uKGUpe2UuY2VudGVyU2VsZWN0aW9uKCl9LHJlYWRPbmx5OiEwfSx7bmFtZToiZ290b2xpbmUiLGRlc2NyaXB0aW9uOiJHbyB0byBsaW5lLi4uIixiaW5kS2V5Om8oIkN0cmwtTCIsIkNvbW1hbmQtTCIpLGV4ZWM6ZnVuY3Rpb24oZSx0KXt0eXBlb2YgdD09Im51bWJlciImJiFpc05hTih0KSYmZS5nb3RvTGluZSh0KSxlLnByb21wdCh7JHR5cGU6ImdvdG9MaW5lIn0pfSxyZWFkT25seTohMH0se25hbWU6ImZvbGQiLGJpbmRLZXk6bygiQWx0LUx8Q3RybC1GMSIsIkNvbW1hbmQtQWx0LUx8Q29tbWFuZC1GMSIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5zZXNzaW9uLnRvZ2dsZUZvbGQoITEpfSxtdWx0aVNlbGVjdEFjdGlvbjoiZm9yRWFjaCIsc2Nyb2xsSW50b1ZpZXc6ImNlbnRlciIscmVhZE9ubHk6ITB9LHtuYW1lOiJ1bmZvbGQiLGJpbmRLZXk6bygiQWx0LVNoaWZ0LUx8Q3RybC1TaGlmdC1GMSIsIkNvbW1hbmQtQWx0LVNoaWZ0LUx8Q29tbWFuZC1TaGlmdC1GMSIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5zZXNzaW9uLnRvZ2dsZUZvbGQoITApfSxtdWx0aVNlbGVjdEFjdGlvbjoiZm9yRWFjaCIsc2Nyb2xsSW50b1ZpZXc6ImNlbnRlciIscmVhZE9ubHk6ITB9LHtuYW1lOiJ0b2dnbGVGb2xkV2lkZ2V0IixiaW5kS2V5Om8oIkYyIiwiRjIiKSxleGVjOmZ1bmN0aW9uKGUpe2Uuc2Vzc2lvbi50b2dnbGVGb2xkV2lkZ2V0KCl9LG11bHRpU2VsZWN0QWN0aW9uOiJmb3JFYWNoIixzY3JvbGxJbnRvVmlldzoiY2VudGVyIixyZWFkT25seTohMH0se25hbWU6InRvZ2dsZVBhcmVudEZvbGRXaWRnZXQiLGJpbmRLZXk6bygiQWx0LUYyIiwiQWx0LUYyIiksZXhlYzpmdW5jdGlvbihlKXtlLnNlc3Npb24udG9nZ2xlRm9sZFdpZGdldCghMCl9LG11bHRpU2VsZWN0QWN0aW9uOiJmb3JFYWNoIixzY3JvbGxJbnRvVmlldzoiY2VudGVyIixyZWFkT25seTohMH0se25hbWU6ImZvbGRhbGwiLGRlc2NyaXB0aW9uOiJGb2xkIGFsbCIsYmluZEtleTpvKG51bGwsIkN0cmwtQ29tbWFuZC1PcHRpb24tMCIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5zZXNzaW9uLmZvbGRBbGwoKX0sc2Nyb2xsSW50b1ZpZXc6ImNlbnRlciIscmVhZE9ubHk6ITB9LHtuYW1lOiJmb2xkT3RoZXIiLGRlc2NyaXB0aW9uOiJGb2xkIG90aGVyIixiaW5kS2V5Om8oIkFsdC0wIiwiQ29tbWFuZC1PcHRpb24tMCIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5zZXNzaW9uLmZvbGRBbGwoKSxlLnNlc3Npb24udW5mb2xkKGUuc2VsZWN0aW9uLmdldEFsbFJhbmdlcygpKX0sc2Nyb2xsSW50b1ZpZXc6ImNlbnRlciIscmVhZE9ubHk6ITB9LHtuYW1lOiJ1bmZvbGRhbGwiLGRlc2NyaXB0aW9uOiJVbmZvbGQgYWxsIixiaW5kS2V5Om8oIkFsdC1TaGlmdC0wIiwiQ29tbWFuZC1PcHRpb24tU2hpZnQtMCIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5zZXNzaW9uLnVuZm9sZCgpfSxzY3JvbGxJbnRvVmlldzoiY2VudGVyIixyZWFkT25seTohMH0se25hbWU6ImZpbmRuZXh0IixkZXNjcmlwdGlvbjoiRmluZCBuZXh0IixiaW5kS2V5Om8oIkN0cmwtSyIsIkNvbW1hbmQtRyIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5maW5kTmV4dCgpfSxtdWx0aVNlbGVjdEFjdGlvbjoiZm9yRWFjaCIsc2Nyb2xsSW50b1ZpZXc6ImNlbnRlciIscmVhZE9ubHk6ITB9LHtuYW1lOiJmaW5kcHJldmlvdXMiLGRlc2NyaXB0aW9uOiJGaW5kIHByZXZpb3VzIixiaW5kS2V5Om8oIkN0cmwtU2hpZnQtSyIsIkNvbW1hbmQtU2hpZnQtRyIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5maW5kUHJldmlvdXMoKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHNjcm9sbEludG9WaWV3OiJjZW50ZXIiLHJlYWRPbmx5OiEwfSx7bmFtZToic2VsZWN0T3JGaW5kTmV4dCIsZGVzY3JpcHRpb246IlNlbGVjdCBvciBmaW5kIG5leHQiLGJpbmRLZXk6bygiQWx0LUsiLCJDdHJsLUciKSxleGVjOmZ1bmN0aW9uKGUpe2Uuc2VsZWN0aW9uLmlzRW1wdHkoKT9lLnNlbGVjdGlvbi5zZWxlY3RXb3JkKCk6ZS5maW5kTmV4dCgpfSxyZWFkT25seTohMH0se25hbWU6InNlbGVjdE9yRmluZFByZXZpb3VzIixkZXNjcmlwdGlvbjoiU2VsZWN0IG9yIGZpbmQgcHJldmlvdXMiLGJpbmRLZXk6bygiQWx0LVNoaWZ0LUsiLCJDdHJsLVNoaWZ0LUciKSxleGVjOmZ1bmN0aW9uKGUpe2Uuc2VsZWN0aW9uLmlzRW1wdHkoKT9lLnNlbGVjdGlvbi5zZWxlY3RXb3JkKCk6ZS5maW5kUHJldmlvdXMoKX0scmVhZE9ubHk6ITB9LHtuYW1lOiJmaW5kIixkZXNjcmlwdGlvbjoiRmluZCIsYmluZEtleTpvKCJDdHJsLUYiLCJDb21tYW5kLUYiKSxleGVjOmZ1bmN0aW9uKGUpe2kubG9hZE1vZHVsZSgiYWNlL2V4dC9zZWFyY2hib3giLGZ1bmN0aW9uKHQpe3QuU2VhcmNoKGUpfSl9LHJlYWRPbmx5OiEwfSx7bmFtZToib3ZlcndyaXRlIixkZXNjcmlwdGlvbjoiT3ZlcndyaXRlIixiaW5kS2V5OiJJbnNlcnQiLGV4ZWM6ZnVuY3Rpb24oZSl7ZS50b2dnbGVPdmVyd3JpdGUoKX0scmVhZE9ubHk6ITB9LHtuYW1lOiJzZWxlY3R0b3N0YXJ0IixkZXNjcmlwdGlvbjoiU2VsZWN0IHRvIHN0YXJ0IixiaW5kS2V5Om8oIkN0cmwtU2hpZnQtSG9tZSIsIkNvbW1hbmQtU2hpZnQtSG9tZXxDb21tYW5kLVNoaWZ0LVVwIiksZXhlYzpmdW5jdGlvbihlKXtlLmdldFNlbGVjdGlvbigpLnNlbGVjdEZpbGVTdGFydCgpfSxtdWx0aVNlbGVjdEFjdGlvbjoiZm9yRWFjaCIscmVhZE9ubHk6ITAsc2Nyb2xsSW50b1ZpZXc6ImFuaW1hdGUiLGFjZUNvbW1hbmRHcm91cDoiZmlsZUp1bXAifSx7bmFtZToiZ290b3N0YXJ0IixkZXNjcmlwdGlvbjoiR28gdG8gc3RhcnQiLGJpbmRLZXk6bygiQ3RybC1Ib21lIiwiQ29tbWFuZC1Ib21lfENvbW1hbmQtVXAiKSxleGVjOmZ1bmN0aW9uKGUpe2UubmF2aWdhdGVGaWxlU3RhcnQoKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHJlYWRPbmx5OiEwLHNjcm9sbEludG9WaWV3OiJhbmltYXRlIixhY2VDb21tYW5kR3JvdXA6ImZpbGVKdW1wIn0se25hbWU6InNlbGVjdHVwIixkZXNjcmlwdGlvbjoiU2VsZWN0IHVwIixiaW5kS2V5Om8oIlNoaWZ0LVVwIiwiU2hpZnQtVXB8Q3RybC1TaGlmdC1QIiksZXhlYzpmdW5jdGlvbihlKXtlLmdldFNlbGVjdGlvbigpLnNlbGVjdFVwKCl9LG11bHRpU2VsZWN0QWN0aW9uOiJmb3JFYWNoIixzY3JvbGxJbnRvVmlldzoiY3Vyc29yIixyZWFkT25seTohMH0se25hbWU6ImdvbGluZXVwIixkZXNjcmlwdGlvbjoiR28gbGluZSB1cCIsYmluZEtleTpvKCJVcCIsIlVwfEN0cmwtUCIpLGV4ZWM6ZnVuY3Rpb24oZSx0KXtlLm5hdmlnYXRlVXAodC50aW1lcyl9LG11bHRpU2VsZWN0QWN0aW9uOiJmb3JFYWNoIixzY3JvbGxJbnRvVmlldzoiY3Vyc29yIixyZWFkT25seTohMH0se25hbWU6InNlbGVjdHRvZW5kIixkZXNjcmlwdGlvbjoiU2VsZWN0IHRvIGVuZCIsYmluZEtleTpvKCJDdHJsLVNoaWZ0LUVuZCIsIkNvbW1hbmQtU2hpZnQtRW5kfENvbW1hbmQtU2hpZnQtRG93biIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5nZXRTZWxlY3Rpb24oKS5zZWxlY3RGaWxlRW5kKCl9LG11bHRpU2VsZWN0QWN0aW9uOiJmb3JFYWNoIixyZWFkT25seTohMCxzY3JvbGxJbnRvVmlldzoiYW5pbWF0ZSIsYWNlQ29tbWFuZEdyb3VwOiJmaWxlSnVtcCJ9LHtuYW1lOiJnb3RvZW5kIixkZXNjcmlwdGlvbjoiR28gdG8gZW5kIixiaW5kS2V5Om8oIkN0cmwtRW5kIiwiQ29tbWFuZC1FbmR8Q29tbWFuZC1Eb3duIiksZXhlYzpmdW5jdGlvbihlKXtlLm5hdmlnYXRlRmlsZUVuZCgpfSxtdWx0aVNlbGVjdEFjdGlvbjoiZm9yRWFjaCIscmVhZE9ubHk6ITAsc2Nyb2xsSW50b1ZpZXc6ImFuaW1hdGUiLGFjZUNvbW1hbmRHcm91cDoiZmlsZUp1bXAifSx7bmFtZToic2VsZWN0ZG93biIsZGVzY3JpcHRpb246IlNlbGVjdCBkb3duIixiaW5kS2V5Om8oIlNoaWZ0LURvd24iLCJTaGlmdC1Eb3dufEN0cmwtU2hpZnQtTiIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5nZXRTZWxlY3Rpb24oKS5zZWxlY3REb3duKCl9LG11bHRpU2VsZWN0QWN0aW9uOiJmb3JFYWNoIixzY3JvbGxJbnRvVmlldzoiY3Vyc29yIixyZWFkT25seTohMH0se25hbWU6ImdvbGluZWRvd24iLGRlc2NyaXB0aW9uOiJHbyBsaW5lIGRvd24iLGJpbmRLZXk6bygiRG93biIsIkRvd258Q3RybC1OIiksZXhlYzpmdW5jdGlvbihlLHQpe2UubmF2aWdhdGVEb3duKHQudGltZXMpfSxtdWx0aVNlbGVjdEFjdGlvbjoiZm9yRWFjaCIsc2Nyb2xsSW50b1ZpZXc6ImN1cnNvciIscmVhZE9ubHk6ITB9LHtuYW1lOiJzZWxlY3R3b3JkbGVmdCIsZGVzY3JpcHRpb246IlNlbGVjdCB3b3JkIGxlZnQiLGJpbmRLZXk6bygiQ3RybC1TaGlmdC1MZWZ0IiwiT3B0aW9uLVNoaWZ0LUxlZnQiKSxleGVjOmZ1bmN0aW9uKGUpe2UuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0V29yZExlZnQoKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHNjcm9sbEludG9WaWV3OiJjdXJzb3IiLHJlYWRPbmx5OiEwfSx7bmFtZToiZ290b3dvcmRsZWZ0IixkZXNjcmlwdGlvbjoiR28gdG8gd29yZCBsZWZ0IixiaW5kS2V5Om8oIkN0cmwtTGVmdCIsIk9wdGlvbi1MZWZ0IiksZXhlYzpmdW5jdGlvbihlKXtlLm5hdmlnYXRlV29yZExlZnQoKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHNjcm9sbEludG9WaWV3OiJjdXJzb3IiLHJlYWRPbmx5OiEwfSx7bmFtZToic2VsZWN0dG9saW5lc3RhcnQiLGRlc2NyaXB0aW9uOiJTZWxlY3QgdG8gbGluZSBzdGFydCIsYmluZEtleTpvKCJBbHQtU2hpZnQtTGVmdCIsIkNvbW1hbmQtU2hpZnQtTGVmdHxDdHJsLVNoaWZ0LUEiKSxleGVjOmZ1bmN0aW9uKGUpe2UuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0TGluZVN0YXJ0KCl9LG11bHRpU2VsZWN0QWN0aW9uOiJmb3JFYWNoIixzY3JvbGxJbnRvVmlldzoiY3Vyc29yIixyZWFkT25seTohMH0se25hbWU6ImdvdG9saW5lc3RhcnQiLGRlc2NyaXB0aW9uOiJHbyB0byBsaW5lIHN0YXJ0IixiaW5kS2V5Om8oIkFsdC1MZWZ0fEhvbWUiLCJDb21tYW5kLUxlZnR8SG9tZXxDdHJsLUEiKSxleGVjOmZ1bmN0aW9uKGUpe2UubmF2aWdhdGVMaW5lU3RhcnQoKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHNjcm9sbEludG9WaWV3OiJjdXJzb3IiLHJlYWRPbmx5OiEwfSx7bmFtZToic2VsZWN0bGVmdCIsZGVzY3JpcHRpb246IlNlbGVjdCBsZWZ0IixiaW5kS2V5Om8oIlNoaWZ0LUxlZnQiLCJTaGlmdC1MZWZ0fEN0cmwtU2hpZnQtQiIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5nZXRTZWxlY3Rpb24oKS5zZWxlY3RMZWZ0KCl9LG11bHRpU2VsZWN0QWN0aW9uOiJmb3JFYWNoIixzY3JvbGxJbnRvVmlldzoiY3Vyc29yIixyZWFkT25seTohMH0se25hbWU6ImdvdG9sZWZ0IixkZXNjcmlwdGlvbjoiR28gdG8gbGVmdCIsYmluZEtleTpvKCJMZWZ0IiwiTGVmdHxDdHJsLUIiKSxleGVjOmZ1bmN0aW9uKGUsdCl7ZS5uYXZpZ2F0ZUxlZnQodC50aW1lcyl9LG11bHRpU2VsZWN0QWN0aW9uOiJmb3JFYWNoIixzY3JvbGxJbnRvVmlldzoiY3Vyc29yIixyZWFkT25seTohMH0se25hbWU6InNlbGVjdHdvcmRyaWdodCIsZGVzY3JpcHRpb246IlNlbGVjdCB3b3JkIHJpZ2h0IixiaW5kS2V5Om8oIkN0cmwtU2hpZnQtUmlnaHQiLCJPcHRpb24tU2hpZnQtUmlnaHQiKSxleGVjOmZ1bmN0aW9uKGUpe2UuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0V29yZFJpZ2h0KCl9LG11bHRpU2VsZWN0QWN0aW9uOiJmb3JFYWNoIixzY3JvbGxJbnRvVmlldzoiY3Vyc29yIixyZWFkT25seTohMH0se25hbWU6ImdvdG93b3JkcmlnaHQiLGRlc2NyaXB0aW9uOiJHbyB0byB3b3JkIHJpZ2h0IixiaW5kS2V5Om8oIkN0cmwtUmlnaHQiLCJPcHRpb24tUmlnaHQiKSxleGVjOmZ1bmN0aW9uKGUpe2UubmF2aWdhdGVXb3JkUmlnaHQoKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHNjcm9sbEludG9WaWV3OiJjdXJzb3IiLHJlYWRPbmx5OiEwfSx7bmFtZToic2VsZWN0dG9saW5lZW5kIixkZXNjcmlwdGlvbjoiU2VsZWN0IHRvIGxpbmUgZW5kIixiaW5kS2V5Om8oIkFsdC1TaGlmdC1SaWdodCIsIkNvbW1hbmQtU2hpZnQtUmlnaHR8U2hpZnQtRW5kfEN0cmwtU2hpZnQtRSIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5nZXRTZWxlY3Rpb24oKS5zZWxlY3RMaW5lRW5kKCl9LG11bHRpU2VsZWN0QWN0aW9uOiJmb3JFYWNoIixzY3JvbGxJbnRvVmlldzoiY3Vyc29yIixyZWFkT25seTohMH0se25hbWU6ImdvdG9saW5lZW5kIixkZXNjcmlwdGlvbjoiR28gdG8gbGluZSBlbmQiLGJpbmRLZXk6bygiQWx0LVJpZ2h0fEVuZCIsIkNvbW1hbmQtUmlnaHR8RW5kfEN0cmwtRSIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5uYXZpZ2F0ZUxpbmVFbmQoKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHNjcm9sbEludG9WaWV3OiJjdXJzb3IiLHJlYWRPbmx5OiEwfSx7bmFtZToic2VsZWN0cmlnaHQiLGRlc2NyaXB0aW9uOiJTZWxlY3QgcmlnaHQiLGJpbmRLZXk6bygiU2hpZnQtUmlnaHQiLCJTaGlmdC1SaWdodCIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5nZXRTZWxlY3Rpb24oKS5zZWxlY3RSaWdodCgpfSxtdWx0aVNlbGVjdEFjdGlvbjoiZm9yRWFjaCIsc2Nyb2xsSW50b1ZpZXc6ImN1cnNvciIscmVhZE9ubHk6ITB9LHtuYW1lOiJnb3RvcmlnaHQiLGRlc2NyaXB0aW9uOiJHbyB0byByaWdodCIsYmluZEtleTpvKCJSaWdodCIsIlJpZ2h0fEN0cmwtRiIpLGV4ZWM6ZnVuY3Rpb24oZSx0KXtlLm5hdmlnYXRlUmlnaHQodC50aW1lcyl9LG11bHRpU2VsZWN0QWN0aW9uOiJmb3JFYWNoIixzY3JvbGxJbnRvVmlldzoiY3Vyc29yIixyZWFkT25seTohMH0se25hbWU6InNlbGVjdHBhZ2Vkb3duIixkZXNjcmlwdGlvbjoiU2VsZWN0IHBhZ2UgZG93biIsYmluZEtleToiU2hpZnQtUGFnZURvd24iLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5zZWxlY3RQYWdlRG93bigpfSxyZWFkT25seTohMH0se25hbWU6InBhZ2Vkb3duIixkZXNjcmlwdGlvbjoiUGFnZSBkb3duIixiaW5kS2V5Om8obnVsbCwiT3B0aW9uLVBhZ2VEb3duIiksZXhlYzpmdW5jdGlvbihlKXtlLnNjcm9sbFBhZ2VEb3duKCl9LHJlYWRPbmx5OiEwfSx7bmFtZToiZ290b3BhZ2Vkb3duIixkZXNjcmlwdGlvbjoiR28gdG8gcGFnZSBkb3duIixiaW5kS2V5Om8oIlBhZ2VEb3duIiwiUGFnZURvd258Q3RybC1WIiksZXhlYzpmdW5jdGlvbihlKXtlLmdvdG9QYWdlRG93bigpfSxyZWFkT25seTohMH0se25hbWU6InNlbGVjdHBhZ2V1cCIsZGVzY3JpcHRpb246IlNlbGVjdCBwYWdlIHVwIixiaW5kS2V5OiJTaGlmdC1QYWdlVXAiLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5zZWxlY3RQYWdlVXAoKX0scmVhZE9ubHk6ITB9LHtuYW1lOiJwYWdldXAiLGRlc2NyaXB0aW9uOiJQYWdlIHVwIixiaW5kS2V5Om8obnVsbCwiT3B0aW9uLVBhZ2VVcCIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5zY3JvbGxQYWdlVXAoKX0scmVhZE9ubHk6ITB9LHtuYW1lOiJnb3RvcGFnZXVwIixkZXNjcmlwdGlvbjoiR28gdG8gcGFnZSB1cCIsYmluZEtleToiUGFnZVVwIixleGVjOmZ1bmN0aW9uKGUpe2UuZ290b1BhZ2VVcCgpfSxyZWFkT25seTohMH0se25hbWU6InNjcm9sbHVwIixkZXNjcmlwdGlvbjoiU2Nyb2xsIHVwIixiaW5kS2V5Om8oIkN0cmwtVXAiLG51bGwpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5yZW5kZXJlci5zY3JvbGxCeSgwLC0yKmUucmVuZGVyZXIubGF5ZXJDb25maWcubGluZUhlaWdodCl9LHJlYWRPbmx5OiEwfSx7bmFtZToic2Nyb2xsZG93biIsZGVzY3JpcHRpb246IlNjcm9sbCBkb3duIixiaW5kS2V5Om8oIkN0cmwtRG93biIsbnVsbCksZXhlYzpmdW5jdGlvbihlKXtlLnJlbmRlcmVyLnNjcm9sbEJ5KDAsMiplLnJlbmRlcmVyLmxheWVyQ29uZmlnLmxpbmVIZWlnaHQpfSxyZWFkT25seTohMH0se25hbWU6InNlbGVjdGxpbmVzdGFydCIsZGVzY3JpcHRpb246IlNlbGVjdCBsaW5lIHN0YXJ0IixiaW5kS2V5OiJTaGlmdC1Ib21lIixleGVjOmZ1bmN0aW9uKGUpe2UuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0TGluZVN0YXJ0KCl9LG11bHRpU2VsZWN0QWN0aW9uOiJmb3JFYWNoIixzY3JvbGxJbnRvVmlldzoiY3Vyc29yIixyZWFkT25seTohMH0se25hbWU6InNlbGVjdGxpbmVlbmQiLGRlc2NyaXB0aW9uOiJTZWxlY3QgbGluZSBlbmQiLGJpbmRLZXk6IlNoaWZ0LUVuZCIsZXhlYzpmdW5jdGlvbihlKXtlLmdldFNlbGVjdGlvbigpLnNlbGVjdExpbmVFbmQoKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHNjcm9sbEludG9WaWV3OiJjdXJzb3IiLHJlYWRPbmx5OiEwfSx7bmFtZToidG9nZ2xlcmVjb3JkaW5nIixkZXNjcmlwdGlvbjoiVG9nZ2xlIHJlY29yZGluZyIsYmluZEtleTpvKCJDdHJsLUFsdC1FIiwiQ29tbWFuZC1PcHRpb24tRSIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5jb21tYW5kcy50b2dnbGVSZWNvcmRpbmcoZSl9LHJlYWRPbmx5OiEwfSx7bmFtZToicmVwbGF5bWFjcm8iLGRlc2NyaXB0aW9uOiJSZXBsYXkgbWFjcm8iLGJpbmRLZXk6bygiQ3RybC1TaGlmdC1FIiwiQ29tbWFuZC1TaGlmdC1FIiksZXhlYzpmdW5jdGlvbihlKXtlLmNvbW1hbmRzLnJlcGxheShlKX0scmVhZE9ubHk6ITB9LHtuYW1lOiJqdW1wdG9tYXRjaGluZyIsZGVzY3JpcHRpb246Ikp1bXAgdG8gbWF0Y2hpbmciLGJpbmRLZXk6bygiQ3RybC1cXHxDdHJsLVAiLCJDb21tYW5kLVxcIiksZXhlYzpmdW5jdGlvbihlKXtlLmp1bXBUb01hdGNoaW5nKCl9LG11bHRpU2VsZWN0QWN0aW9uOiJmb3JFYWNoIixzY3JvbGxJbnRvVmlldzoiYW5pbWF0ZSIscmVhZE9ubHk6ITB9LHtuYW1lOiJzZWxlY3R0b21hdGNoaW5nIixkZXNjcmlwdGlvbjoiU2VsZWN0IHRvIG1hdGNoaW5nIixiaW5kS2V5Om8oIkN0cmwtU2hpZnQtXFx8Q3RybC1TaGlmdC1QIiwiQ29tbWFuZC1TaGlmdC1cXCIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5qdW1wVG9NYXRjaGluZyghMCl9LG11bHRpU2VsZWN0QWN0aW9uOiJmb3JFYWNoIixzY3JvbGxJbnRvVmlldzoiYW5pbWF0ZSIscmVhZE9ubHk6ITB9LHtuYW1lOiJleHBhbmRUb01hdGNoaW5nIixkZXNjcmlwdGlvbjoiRXhwYW5kIHRvIG1hdGNoaW5nIixiaW5kS2V5Om8oIkN0cmwtU2hpZnQtTSIsIkN0cmwtU2hpZnQtTSIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5qdW1wVG9NYXRjaGluZyghMCwhMCl9LG11bHRpU2VsZWN0QWN0aW9uOiJmb3JFYWNoIixzY3JvbGxJbnRvVmlldzoiYW5pbWF0ZSIscmVhZE9ubHk6ITB9LHtuYW1lOiJwYXNzS2V5c1RvQnJvd3NlciIsZGVzY3JpcHRpb246IlBhc3Mga2V5cyB0byBicm93c2VyIixiaW5kS2V5Om8obnVsbCxudWxsKSxleGVjOmZ1bmN0aW9uKCl7fSxwYXNzRXZlbnQ6ITAscmVhZE9ubHk6ITB9LHtuYW1lOiJjb3B5IixkZXNjcmlwdGlvbjoiQ29weSIsZXhlYzpmdW5jdGlvbihlKXt9LHJlYWRPbmx5OiEwfSx7bmFtZToiY3V0IixkZXNjcmlwdGlvbjoiQ3V0IixleGVjOmZ1bmN0aW9uKGUpe3ZhciB0PWUuJGNvcHlXaXRoRW1wdHlTZWxlY3Rpb24mJmUuc2VsZWN0aW9uLmlzRW1wdHkoKSxuPXQ/ZS5zZWxlY3Rpb24uZ2V0TGluZVJhbmdlKCk6ZS5zZWxlY3Rpb24uZ2V0UmFuZ2UoKTtlLl9lbWl0KCJjdXQiLG4pLG4uaXNFbXB0eSgpfHxlLnNlc3Npb24ucmVtb3ZlKG4pLGUuY2xlYXJTZWxlY3Rpb24oKX0sc2Nyb2xsSW50b1ZpZXc6ImN1cnNvciIsbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2gifSx7bmFtZToicGFzdGUiLGRlc2NyaXB0aW9uOiJQYXN0ZSIsZXhlYzpmdW5jdGlvbihlLHQpe2UuJGhhbmRsZVBhc3RlKHQpfSxzY3JvbGxJbnRvVmlldzoiY3Vyc29yIn0se25hbWU6InJlbW92ZWxpbmUiLGRlc2NyaXB0aW9uOiJSZW1vdmUgbGluZSIsYmluZEtleTpvKCJDdHJsLUQiLCJDb21tYW5kLUQiKSxleGVjOmZ1bmN0aW9uKGUpe2UucmVtb3ZlTGluZXMoKX0sc2Nyb2xsSW50b1ZpZXc6ImN1cnNvciIsbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2hMaW5lIn0se25hbWU6ImR1cGxpY2F0ZVNlbGVjdGlvbiIsZGVzY3JpcHRpb246IkR1cGxpY2F0ZSBzZWxlY3Rpb24iLGJpbmRLZXk6bygiQ3RybC1TaGlmdC1EIiwiQ29tbWFuZC1TaGlmdC1EIiksZXhlYzpmdW5jdGlvbihlKXtlLmR1cGxpY2F0ZVNlbGVjdGlvbigpfSxzY3JvbGxJbnRvVmlldzoiY3Vyc29yIixtdWx0aVNlbGVjdEFjdGlvbjoiZm9yRWFjaCJ9LHtuYW1lOiJzb3J0bGluZXMiLGRlc2NyaXB0aW9uOiJTb3J0IGxpbmVzIixiaW5kS2V5Om8oIkN0cmwtQWx0LVMiLCJDb21tYW5kLUFsdC1TIiksZXhlYzpmdW5jdGlvbihlKXtlLnNvcnRMaW5lcygpfSxzY3JvbGxJbnRvVmlldzoic2VsZWN0aW9uIixtdWx0aVNlbGVjdEFjdGlvbjoiZm9yRWFjaExpbmUifSx7bmFtZToidG9nZ2xlY29tbWVudCIsZGVzY3JpcHRpb246IlRvZ2dsZSBjb21tZW50IixiaW5kS2V5Om8oIkN0cmwtLyIsIkNvbW1hbmQtLyIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS50b2dnbGVDb21tZW50TGluZXMoKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2hMaW5lIixzY3JvbGxJbnRvVmlldzoic2VsZWN0aW9uUGFydCJ9LHtuYW1lOiJ0b2dnbGVCbG9ja0NvbW1lbnQiLGRlc2NyaXB0aW9uOiJUb2dnbGUgYmxvY2sgY29tbWVudCIsYmluZEtleTpvKCJDdHJsLVNoaWZ0LS8iLCJDb21tYW5kLVNoaWZ0LS8iKSxleGVjOmZ1bmN0aW9uKGUpe2UudG9nZ2xlQmxvY2tDb21tZW50KCl9LG11bHRpU2VsZWN0QWN0aW9uOiJmb3JFYWNoIixzY3JvbGxJbnRvVmlldzoic2VsZWN0aW9uUGFydCJ9LHtuYW1lOiJtb2RpZnlOdW1iZXJVcCIsZGVzY3JpcHRpb246Ik1vZGlmeSBudW1iZXIgdXAiLGJpbmRLZXk6bygiQ3RybC1TaGlmdC1VcCIsIkFsdC1TaGlmdC1VcCIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5tb2RpZnlOdW1iZXIoMSl9LHNjcm9sbEludG9WaWV3OiJjdXJzb3IiLG11bHRpU2VsZWN0QWN0aW9uOiJmb3JFYWNoIn0se25hbWU6Im1vZGlmeU51bWJlckRvd24iLGRlc2NyaXB0aW9uOiJNb2RpZnkgbnVtYmVyIGRvd24iLGJpbmRLZXk6bygiQ3RybC1TaGlmdC1Eb3duIiwiQWx0LVNoaWZ0LURvd24iKSxleGVjOmZ1bmN0aW9uKGUpe2UubW9kaWZ5TnVtYmVyKC0xKX0sc2Nyb2xsSW50b1ZpZXc6ImN1cnNvciIsbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2gifSx7bmFtZToicmVwbGFjZSIsZGVzY3JpcHRpb246IlJlcGxhY2UiLGJpbmRLZXk6bygiQ3RybC1IIiwiQ29tbWFuZC1PcHRpb24tRiIpLGV4ZWM6ZnVuY3Rpb24oZSl7aS5sb2FkTW9kdWxlKCJhY2UvZXh0L3NlYXJjaGJveCIsZnVuY3Rpb24odCl7dC5TZWFyY2goZSwhMCl9KX19LHtuYW1lOiJ1bmRvIixkZXNjcmlwdGlvbjoiVW5kbyIsYmluZEtleTpvKCJDdHJsLVoiLCJDb21tYW5kLVoiKSxleGVjOmZ1bmN0aW9uKGUpe2UudW5kbygpfX0se25hbWU6InJlZG8iLGRlc2NyaXB0aW9uOiJSZWRvIixiaW5kS2V5Om8oIkN0cmwtU2hpZnQtWnxDdHJsLVkiLCJDb21tYW5kLVNoaWZ0LVp8Q29tbWFuZC1ZIiksZXhlYzpmdW5jdGlvbihlKXtlLnJlZG8oKX19LHtuYW1lOiJjb3B5bGluZXN1cCIsZGVzY3JpcHRpb246IkNvcHkgbGluZXMgdXAiLGJpbmRLZXk6bygiQWx0LVNoaWZ0LVVwIiwiQ29tbWFuZC1PcHRpb24tVXAiKSxleGVjOmZ1bmN0aW9uKGUpe2UuY29weUxpbmVzVXAoKX0sc2Nyb2xsSW50b1ZpZXc6ImN1cnNvciJ9LHtuYW1lOiJtb3ZlbGluZXN1cCIsZGVzY3JpcHRpb246Ik1vdmUgbGluZXMgdXAiLGJpbmRLZXk6bygiQWx0LVVwIiwiT3B0aW9uLVVwIiksZXhlYzpmdW5jdGlvbihlKXtlLm1vdmVMaW5lc1VwKCl9LHNjcm9sbEludG9WaWV3OiJjdXJzb3IifSx7bmFtZToiY29weWxpbmVzZG93biIsZGVzY3JpcHRpb246IkNvcHkgbGluZXMgZG93biIsYmluZEtleTpvKCJBbHQtU2hpZnQtRG93biIsIkNvbW1hbmQtT3B0aW9uLURvd24iKSxleGVjOmZ1bmN0aW9uKGUpe2UuY29weUxpbmVzRG93bigpfSxzY3JvbGxJbnRvVmlldzoiY3Vyc29yIn0se25hbWU6Im1vdmVsaW5lc2Rvd24iLGRlc2NyaXB0aW9uOiJNb3ZlIGxpbmVzIGRvd24iLGJpbmRLZXk6bygiQWx0LURvd24iLCJPcHRpb24tRG93biIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5tb3ZlTGluZXNEb3duKCl9LHNjcm9sbEludG9WaWV3OiJjdXJzb3IifSx7bmFtZToiZGVsIixkZXNjcmlwdGlvbjoiRGVsZXRlIixiaW5kS2V5Om8oIkRlbGV0ZSIsIkRlbGV0ZXxDdHJsLUR8U2hpZnQtRGVsZXRlIiksZXhlYzpmdW5jdGlvbihlKXtlLnJlbW92ZSgicmlnaHQiKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHNjcm9sbEludG9WaWV3OiJjdXJzb3IifSx7bmFtZToiYmFja3NwYWNlIixkZXNjcmlwdGlvbjoiQmFja3NwYWNlIixiaW5kS2V5Om8oIlNoaWZ0LUJhY2tzcGFjZXxCYWNrc3BhY2UiLCJDdHJsLUJhY2tzcGFjZXxTaGlmdC1CYWNrc3BhY2V8QmFja3NwYWNlfEN0cmwtSCIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5yZW1vdmUoImxlZnQiKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHNjcm9sbEludG9WaWV3OiJjdXJzb3IifSx7bmFtZToiY3V0X29yX2RlbGV0ZSIsZGVzY3JpcHRpb246IkN1dCBvciBkZWxldGUiLGJpbmRLZXk6bygiU2hpZnQtRGVsZXRlIixudWxsKSxleGVjOmZ1bmN0aW9uKGUpe2lmKCFlLnNlbGVjdGlvbi5pc0VtcHR5KCkpcmV0dXJuITE7ZS5yZW1vdmUoImxlZnQiKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHNjcm9sbEludG9WaWV3OiJjdXJzb3IifSx7bmFtZToicmVtb3ZldG9saW5lc3RhcnQiLGRlc2NyaXB0aW9uOiJSZW1vdmUgdG8gbGluZSBzdGFydCIsYmluZEtleTpvKCJBbHQtQmFja3NwYWNlIiwiQ29tbWFuZC1CYWNrc3BhY2UiKSxleGVjOmZ1bmN0aW9uKGUpe2UucmVtb3ZlVG9MaW5lU3RhcnQoKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHNjcm9sbEludG9WaWV3OiJjdXJzb3IifSx7bmFtZToicmVtb3ZldG9saW5lZW5kIixkZXNjcmlwdGlvbjoiUmVtb3ZlIHRvIGxpbmUgZW5kIixiaW5kS2V5Om8oIkFsdC1EZWxldGUiLCJDdHJsLUt8Q29tbWFuZC1EZWxldGUiKSxleGVjOmZ1bmN0aW9uKGUpe2UucmVtb3ZlVG9MaW5lRW5kKCl9LG11bHRpU2VsZWN0QWN0aW9uOiJmb3JFYWNoIixzY3JvbGxJbnRvVmlldzoiY3Vyc29yIn0se25hbWU6InJlbW92ZXRvbGluZXN0YXJ0aGFyZCIsZGVzY3JpcHRpb246IlJlbW92ZSB0byBsaW5lIHN0YXJ0IGhhcmQiLGJpbmRLZXk6bygiQ3RybC1TaGlmdC1CYWNrc3BhY2UiLG51bGwpLGV4ZWM6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zZWxlY3Rpb24uZ2V0UmFuZ2UoKTt0LnN0YXJ0LmNvbHVtbj0wLGUuc2Vzc2lvbi5yZW1vdmUodCl9LG11bHRpU2VsZWN0QWN0aW9uOiJmb3JFYWNoIixzY3JvbGxJbnRvVmlldzoiY3Vyc29yIn0se25hbWU6InJlbW92ZXRvbGluZWVuZGhhcmQiLGRlc2NyaXB0aW9uOiJSZW1vdmUgdG8gbGluZSBlbmQgaGFyZCIsYmluZEtleTpvKCJDdHJsLVNoaWZ0LURlbGV0ZSIsbnVsbCksZXhlYzpmdW5jdGlvbihlKXt2YXIgdD1lLnNlbGVjdGlvbi5nZXRSYW5nZSgpO3QuZW5kLmNvbHVtbj1OdW1iZXIuTUFYX1ZBTFVFLGUuc2Vzc2lvbi5yZW1vdmUodCl9LG11bHRpU2VsZWN0QWN0aW9uOiJmb3JFYWNoIixzY3JvbGxJbnRvVmlldzoiY3Vyc29yIn0se25hbWU6InJlbW92ZXdvcmRsZWZ0IixkZXNjcmlwdGlvbjoiUmVtb3ZlIHdvcmQgbGVmdCIsYmluZEtleTpvKCJDdHJsLUJhY2tzcGFjZSIsIkFsdC1CYWNrc3BhY2V8Q3RybC1BbHQtQmFja3NwYWNlIiksZXhlYzpmdW5jdGlvbihlKXtlLnJlbW92ZVdvcmRMZWZ0KCl9LG11bHRpU2VsZWN0QWN0aW9uOiJmb3JFYWNoIixzY3JvbGxJbnRvVmlldzoiY3Vyc29yIn0se25hbWU6InJlbW92ZXdvcmRyaWdodCIsZGVzY3JpcHRpb246IlJlbW92ZSB3b3JkIHJpZ2h0IixiaW5kS2V5Om8oIkN0cmwtRGVsZXRlIiwiQWx0LURlbGV0ZSIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5yZW1vdmVXb3JkUmlnaHQoKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHNjcm9sbEludG9WaWV3OiJjdXJzb3IifSx7bmFtZToib3V0ZGVudCIsZGVzY3JpcHRpb246Ik91dGRlbnQiLGJpbmRLZXk6bygiU2hpZnQtVGFiIiwiU2hpZnQtVGFiIiksZXhlYzpmdW5jdGlvbihlKXtlLmJsb2NrT3V0ZGVudCgpfSxtdWx0aVNlbGVjdEFjdGlvbjoiZm9yRWFjaCIsc2Nyb2xsSW50b1ZpZXc6InNlbGVjdGlvblBhcnQifSx7bmFtZToiaW5kZW50IixkZXNjcmlwdGlvbjoiSW5kZW50IixiaW5kS2V5Om8oIlRhYiIsIlRhYiIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5pbmRlbnQoKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHNjcm9sbEludG9WaWV3OiJzZWxlY3Rpb25QYXJ0In0se25hbWU6ImJsb2Nrb3V0ZGVudCIsZGVzY3JpcHRpb246IkJsb2NrIG91dGRlbnQiLGJpbmRLZXk6bygiQ3RybC1bIiwiQ3RybC1bIiksZXhlYzpmdW5jdGlvbihlKXtlLmJsb2NrT3V0ZGVudCgpfSxtdWx0aVNlbGVjdEFjdGlvbjoiZm9yRWFjaExpbmUiLHNjcm9sbEludG9WaWV3OiJzZWxlY3Rpb25QYXJ0In0se25hbWU6ImJsb2NraW5kZW50IixkZXNjcmlwdGlvbjoiQmxvY2sgaW5kZW50IixiaW5kS2V5Om8oIkN0cmwtXSIsIkN0cmwtXSIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5ibG9ja0luZGVudCgpfSxtdWx0aVNlbGVjdEFjdGlvbjoiZm9yRWFjaExpbmUiLHNjcm9sbEludG9WaWV3OiJzZWxlY3Rpb25QYXJ0In0se25hbWU6Imluc2VydHN0cmluZyIsZGVzY3JpcHRpb246Ikluc2VydCBzdHJpbmciLGV4ZWM6ZnVuY3Rpb24oZSx0KXtlLmluc2VydCh0KX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHNjcm9sbEludG9WaWV3OiJjdXJzb3IifSx7bmFtZToiaW5zZXJ0dGV4dCIsZGVzY3JpcHRpb246Ikluc2VydCB0ZXh0IixleGVjOmZ1bmN0aW9uKGUsdCl7ZS5pbnNlcnQoci5zdHJpbmdSZXBlYXQodC50ZXh0fHwiIix0LnRpbWVzfHwxKSl9LG11bHRpU2VsZWN0QWN0aW9uOiJmb3JFYWNoIixzY3JvbGxJbnRvVmlldzoiY3Vyc29yIn0se25hbWU6InNwbGl0bGluZSIsZGVzY3JpcHRpb246IlNwbGl0IGxpbmUiLGJpbmRLZXk6byhudWxsLCJDdHJsLU8iKSxleGVjOmZ1bmN0aW9uKGUpe2Uuc3BsaXRMaW5lKCl9LG11bHRpU2VsZWN0QWN0aW9uOiJmb3JFYWNoIixzY3JvbGxJbnRvVmlldzoiY3Vyc29yIn0se25hbWU6InRyYW5zcG9zZWxldHRlcnMiLGRlc2NyaXB0aW9uOiJUcmFuc3Bvc2UgbGV0dGVycyIsYmluZEtleTpvKCJBbHQtU2hpZnQtWCIsIkN0cmwtVCIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS50cmFuc3Bvc2VMZXR0ZXJzKCl9LG11bHRpU2VsZWN0QWN0aW9uOmZ1bmN0aW9uKGUpe2UudHJhbnNwb3NlU2VsZWN0aW9ucygxKX0sc2Nyb2xsSW50b1ZpZXc6ImN1cnNvciJ9LHtuYW1lOiJ0b3VwcGVyY2FzZSIsZGVzY3JpcHRpb246IlRvIHVwcGVyY2FzZSIsYmluZEtleTpvKCJDdHJsLVUiLCJDdHJsLVUiKSxleGVjOmZ1bmN0aW9uKGUpe2UudG9VcHBlckNhc2UoKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHNjcm9sbEludG9WaWV3OiJjdXJzb3IifSx7bmFtZToidG9sb3dlcmNhc2UiLGRlc2NyaXB0aW9uOiJUbyBsb3dlcmNhc2UiLGJpbmRLZXk6bygiQ3RybC1TaGlmdC1VIiwiQ3RybC1TaGlmdC1VIiksZXhlYzpmdW5jdGlvbihlKXtlLnRvTG93ZXJDYXNlKCl9LG11bHRpU2VsZWN0QWN0aW9uOiJmb3JFYWNoIixzY3JvbGxJbnRvVmlldzoiY3Vyc29yIn0se25hbWU6ImV4cGFuZHRvbGluZSIsZGVzY3JpcHRpb246IkV4cGFuZCB0byBsaW5lIixiaW5kS2V5Om8oIkN0cmwtU2hpZnQtTCIsIkNvbW1hbmQtU2hpZnQtTCIpLGV4ZWM6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zZWxlY3Rpb24uZ2V0UmFuZ2UoKTt0LnN0YXJ0LmNvbHVtbj10LmVuZC5jb2x1bW49MCx0LmVuZC5yb3crKyxlLnNlbGVjdGlvbi5zZXRSYW5nZSh0LCExKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHNjcm9sbEludG9WaWV3OiJjdXJzb3IiLHJlYWRPbmx5OiEwfSx7bmFtZToiam9pbmxpbmVzIixkZXNjcmlwdGlvbjoiSm9pbiBsaW5lcyIsYmluZEtleTpvKG51bGwsbnVsbCksZXhlYzpmdW5jdGlvbihlKXt2YXIgdD1lLnNlbGVjdGlvbi5pc0JhY2t3YXJkcygpLG49dD9lLnNlbGVjdGlvbi5nZXRTZWxlY3Rpb25MZWFkKCk6ZS5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uQW5jaG9yKCksaT10P2Uuc2VsZWN0aW9uLmdldFNlbGVjdGlvbkFuY2hvcigpOmUuc2VsZWN0aW9uLmdldFNlbGVjdGlvbkxlYWQoKSxvPWUuc2Vzc2lvbi5kb2MuZ2V0TGluZShuLnJvdykubGVuZ3RoLHU9ZS5zZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UoZS5zZWxlY3Rpb24uZ2V0UmFuZ2UoKSksYT11LnJlcGxhY2UoL1xuXHMqLywiICIpLmxlbmd0aCxmPWUuc2Vzc2lvbi5kb2MuZ2V0TGluZShuLnJvdyk7Zm9yKHZhciBsPW4ucm93KzE7bDw9aS5yb3crMTtsKyspe3ZhciBjPXIuc3RyaW5nVHJpbUxlZnQoci5zdHJpbmdUcmltUmlnaHQoZS5zZXNzaW9uLmRvYy5nZXRMaW5lKGwpKSk7Yy5sZW5ndGghPT0wJiYoYz0iICIrYyksZis9Y31pLnJvdysxPGUuc2Vzc2lvbi5kb2MuZ2V0TGVuZ3RoKCktMSYmKGYrPWUuc2Vzc2lvbi5kb2MuZ2V0TmV3TGluZUNoYXJhY3RlcigpKSxlLmNsZWFyU2VsZWN0aW9uKCksZS5zZXNzaW9uLmRvYy5yZXBsYWNlKG5ldyBzKG4ucm93LDAsaS5yb3crMiwwKSxmKSxhPjA/KGUuc2VsZWN0aW9uLm1vdmVDdXJzb3JUbyhuLnJvdyxuLmNvbHVtbiksZS5zZWxlY3Rpb24uc2VsZWN0VG8obi5yb3csbi5jb2x1bW4rYSkpOihvPWUuc2Vzc2lvbi5kb2MuZ2V0TGluZShuLnJvdykubGVuZ3RoPm8/bysxOm8sZS5zZWxlY3Rpb24ubW92ZUN1cnNvclRvKG4ucm93LG8pKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHJlYWRPbmx5OiEwfSx7bmFtZToiaW52ZXJ0U2VsZWN0aW9uIixkZXNjcmlwdGlvbjoiSW52ZXJ0IHNlbGVjdGlvbiIsYmluZEtleTpvKG51bGwsbnVsbCksZXhlYzpmdW5jdGlvbihlKXt2YXIgdD1lLnNlc3Npb24uZG9jLmdldExlbmd0aCgpLTEsbj1lLnNlc3Npb24uZG9jLmdldExpbmUodCkubGVuZ3RoLHI9ZS5zZWxlY3Rpb24ucmFuZ2VMaXN0LnJhbmdlcyxpPVtdO3IubGVuZ3RoPDEmJihyPVtlLnNlbGVjdGlvbi5nZXRSYW5nZSgpXSk7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspbz09ci5sZW5ndGgtMSYmKHJbb10uZW5kLnJvdyE9PXR8fHJbb10uZW5kLmNvbHVtbiE9PW4pJiZpLnB1c2gobmV3IHMocltvXS5lbmQucm93LHJbb10uZW5kLmNvbHVtbix0LG4pKSxvPT09MD8ocltvXS5zdGFydC5yb3chPT0wfHxyW29dLnN0YXJ0LmNvbHVtbiE9PTApJiZpLnB1c2gobmV3IHMoMCwwLHJbb10uc3RhcnQucm93LHJbb10uc3RhcnQuY29sdW1uKSk6aS5wdXNoKG5ldyBzKHJbby0xXS5lbmQucm93LHJbby0xXS5lbmQuY29sdW1uLHJbb10uc3RhcnQucm93LHJbb10uc3RhcnQuY29sdW1uKSk7ZS5leGl0TXVsdGlTZWxlY3RNb2RlKCksZS5jbGVhclNlbGVjdGlvbigpO2Zvcih2YXIgbz0wO288aS5sZW5ndGg7bysrKWUuc2VsZWN0aW9uLmFkZFJhbmdlKGlbb10sITEpfSxyZWFkT25seTohMCxzY3JvbGxJbnRvVmlldzoibm9uZSJ9LHtuYW1lOiJvcGVuQ29tbWFuZFBhbGxldGUiLGRlc2NyaXB0aW9uOiJPcGVuIGNvbW1hbmQgcGFsbGV0ZSIsYmluZEtleTpvKCJGMSIsIkYxIiksZXhlYzpmdW5jdGlvbihlKXtlLnByb21wdCh7JHR5cGU6ImNvbW1hbmRzIn0pfSxyZWFkT25seTohMH0se25hbWU6Im1vZGVTZWxlY3QiLGRlc2NyaXB0aW9uOiJDaGFuZ2UgbGFuZ3VhZ2UgbW9kZS4uLiIsYmluZEtleTpvKG51bGwsbnVsbCksZXhlYzpmdW5jdGlvbihlKXtlLnByb21wdCh7JHR5cGU6Im1vZGVzIn0pfSxyZWFkT25seTohMH1dfSksYWNlLmRlZmluZSgiYWNlL2VkaXRvciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvZml4b2xkYnJvd3NlcnMiLCJhY2UvbGliL29vcCIsImFjZS9saWIvZG9tIiwiYWNlL2xpYi9sYW5nIiwiYWNlL2xpYi91c2VyYWdlbnQiLCJhY2Uva2V5Ym9hcmQvdGV4dGlucHV0IiwiYWNlL21vdXNlL21vdXNlX2hhbmRsZXIiLCJhY2UvbW91c2UvZm9sZF9oYW5kbGVyIiwiYWNlL2tleWJvYXJkL2tleWJpbmRpbmciLCJhY2UvZWRpdF9zZXNzaW9uIiwiYWNlL3NlYXJjaCIsImFjZS9yYW5nZSIsImFjZS9saWIvZXZlbnRfZW1pdHRlciIsImFjZS9jb21tYW5kcy9jb21tYW5kX21hbmFnZXIiLCJhY2UvY29tbWFuZHMvZGVmYXVsdF9jb21tYW5kcyIsImFjZS9jb25maWciLCJhY2UvdG9rZW5faXRlcmF0b3IiLCJhY2UvY2xpcGJvYXJkIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlKCIuL2xpYi9maXhvbGRicm93c2VycyIpO3ZhciByPWUoIi4vbGliL29vcCIpLGk9ZSgiLi9saWIvZG9tIikscz1lKCIuL2xpYi9sYW5nIiksbz1lKCIuL2xpYi91c2VyYWdlbnQiKSx1PWUoIi4va2V5Ym9hcmQvdGV4dGlucHV0IikuVGV4dElucHV0LGE9ZSgiLi9tb3VzZS9tb3VzZV9oYW5kbGVyIikuTW91c2VIYW5kbGVyLGY9ZSgiLi9tb3VzZS9mb2xkX2hhbmRsZXIiKS5Gb2xkSGFuZGxlcixsPWUoIi4va2V5Ym9hcmQva2V5YmluZGluZyIpLktleUJpbmRpbmcsYz1lKCIuL2VkaXRfc2Vzc2lvbiIpLkVkaXRTZXNzaW9uLGg9ZSgiLi9zZWFyY2giKS5TZWFyY2gscD1lKCIuL3JhbmdlIikuUmFuZ2UsZD1lKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyLHY9ZSgiLi9jb21tYW5kcy9jb21tYW5kX21hbmFnZXIiKS5Db21tYW5kTWFuYWdlcixtPWUoIi4vY29tbWFuZHMvZGVmYXVsdF9jb21tYW5kcyIpLmNvbW1hbmRzLGc9ZSgiLi9jb25maWciKSx5PWUoIi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yLGI9ZSgiLi9jbGlwYm9hcmQiKSx3PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLmdldENvbnRhaW5lckVsZW1lbnQoKTt0aGlzLmNvbnRhaW5lcj1yLHRoaXMucmVuZGVyZXI9ZSx0aGlzLmlkPSJlZGl0b3IiKyArK3cuJHVpZCx0aGlzLmNvbW1hbmRzPW5ldyB2KG8uaXNNYWM/Im1hYyI6IndpbiIsbSksdHlwZW9mIGRvY3VtZW50PT0ib2JqZWN0IiYmKHRoaXMudGV4dElucHV0PW5ldyB1KGUuZ2V0VGV4dEFyZWFDb250YWluZXIoKSx0aGlzKSx0aGlzLnJlbmRlcmVyLnRleHRhcmVhPXRoaXMudGV4dElucHV0LmdldEVsZW1lbnQoKSx0aGlzLiRtb3VzZUhhbmRsZXI9bmV3IGEodGhpcyksbmV3IGYodGhpcykpLHRoaXMua2V5QmluZGluZz1uZXcgbCh0aGlzKSx0aGlzLiRzZWFyY2g9KG5ldyBoKS5zZXQoe3dyYXA6ITB9KSx0aGlzLiRoaXN0b3J5VHJhY2tlcj10aGlzLiRoaXN0b3J5VHJhY2tlci5iaW5kKHRoaXMpLHRoaXMuY29tbWFuZHMub24oImV4ZWMiLHRoaXMuJGhpc3RvcnlUcmFja2VyKSx0aGlzLiRpbml0T3BlcmF0aW9uTGlzdGVuZXJzKCksdGhpcy5fJGVtaXRJbnB1dEV2ZW50PXMuZGVsYXllZENhbGwoZnVuY3Rpb24oKXt0aGlzLl9zaWduYWwoImlucHV0Iix7fSksdGhpcy5zZXNzaW9uJiZ0aGlzLnNlc3Npb24uYmdUb2tlbml6ZXImJnRoaXMuc2Vzc2lvbi5iZ1Rva2VuaXplci5zY2hlZHVsZVN0YXJ0KCl9LmJpbmQodGhpcykpLHRoaXMub24oImNoYW5nZSIsZnVuY3Rpb24oZSx0KXt0Ll8kZW1pdElucHV0RXZlbnQuc2NoZWR1bGUoMzEpfSksdGhpcy5zZXRTZXNzaW9uKHR8fG4mJm4uc2Vzc2lvbnx8bmV3IGMoIiIpKSxnLnJlc2V0T3B0aW9ucyh0aGlzKSxuJiZ0aGlzLnNldE9wdGlvbnMobiksZy5fc2lnbmFsKCJlZGl0b3IiLHRoaXMpfTt3LiR1aWQ9MCxmdW5jdGlvbigpe3IuaW1wbGVtZW50KHRoaXMsZCksdGhpcy4kaW5pdE9wZXJhdGlvbkxpc3RlbmVycz1mdW5jdGlvbigpe3RoaXMuY29tbWFuZHMub24oImV4ZWMiLHRoaXMuc3RhcnRPcGVyYXRpb24uYmluZCh0aGlzKSwhMCksdGhpcy5jb21tYW5kcy5vbigiYWZ0ZXJFeGVjIix0aGlzLmVuZE9wZXJhdGlvbi5iaW5kKHRoaXMpLCEwKSx0aGlzLiRvcFJlc2V0VGltZXI9cy5kZWxheWVkQ2FsbCh0aGlzLmVuZE9wZXJhdGlvbi5iaW5kKHRoaXMsITApKSx0aGlzLm9uKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7dGhpcy5jdXJPcHx8KHRoaXMuc3RhcnRPcGVyYXRpb24oKSx0aGlzLmN1ck9wLnNlbGVjdGlvbkJlZm9yZT10aGlzLiRsYXN0U2VsKSx0aGlzLmN1ck9wLmRvY0NoYW5nZWQ9ITB9LmJpbmQodGhpcyksITApLHRoaXMub24oImNoYW5nZVNlbGVjdGlvbiIsZnVuY3Rpb24oKXt0aGlzLmN1ck9wfHwodGhpcy5zdGFydE9wZXJhdGlvbigpLHRoaXMuY3VyT3Auc2VsZWN0aW9uQmVmb3JlPXRoaXMuJGxhc3RTZWwpLHRoaXMuY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZD0hMH0uYmluZCh0aGlzKSwhMCl9LHRoaXMuY3VyT3A9bnVsbCx0aGlzLnByZXZPcD17fSx0aGlzLnN0YXJ0T3BlcmF0aW9uPWZ1bmN0aW9uKGUpe2lmKHRoaXMuY3VyT3Ape2lmKCFlfHx0aGlzLmN1ck9wLmNvbW1hbmQpcmV0dXJuO3RoaXMucHJldk9wPXRoaXMuY3VyT3B9ZXx8KHRoaXMucHJldmlvdXNDb21tYW5kPW51bGwsZT17fSksdGhpcy4kb3BSZXNldFRpbWVyLnNjaGVkdWxlKCksdGhpcy5jdXJPcD10aGlzLnNlc3Npb24uY3VyT3A9e2NvbW1hbmQ6ZS5jb21tYW5kfHx7fSxhcmdzOmUuYXJncyxzY3JvbGxUb3A6dGhpcy5yZW5kZXJlci5zY3JvbGxUb3B9LHRoaXMuY3VyT3Auc2VsZWN0aW9uQmVmb3JlPXRoaXMuc2VsZWN0aW9uLnRvSlNPTigpfSx0aGlzLmVuZE9wZXJhdGlvbj1mdW5jdGlvbihlKXtpZih0aGlzLmN1ck9wKXtpZihlJiZlLnJldHVyblZhbHVlPT09ITEpcmV0dXJuIHRoaXMuY3VyT3A9bnVsbDtpZihlPT0xJiZ0aGlzLmN1ck9wLmNvbW1hbmQmJnRoaXMuY3VyT3AuY29tbWFuZC5uYW1lPT0ibW91c2UiKXJldHVybjt0aGlzLl9zaWduYWwoImJlZm9yZUVuZE9wZXJhdGlvbiIpO2lmKCF0aGlzLmN1ck9wKXJldHVybjt2YXIgdD10aGlzLmN1ck9wLmNvbW1hbmQsbj10JiZ0LnNjcm9sbEludG9WaWV3O2lmKG4pe3N3aXRjaChuKXtjYXNlImNlbnRlci1hbmltYXRlIjpuPSJhbmltYXRlIjtjYXNlImNlbnRlciI6dGhpcy5yZW5kZXJlci5zY3JvbGxDdXJzb3JJbnRvVmlldyhudWxsLC41KTticmVhaztjYXNlImFuaW1hdGUiOmNhc2UiY3Vyc29yIjp0aGlzLnJlbmRlcmVyLnNjcm9sbEN1cnNvckludG9WaWV3KCk7YnJlYWs7Y2FzZSJzZWxlY3Rpb25QYXJ0Ijp2YXIgcj10aGlzLnNlbGVjdGlvbi5nZXRSYW5nZSgpLGk9dGhpcy5yZW5kZXJlci5sYXllckNvbmZpZzsoci5zdGFydC5yb3c+PWkubGFzdFJvd3x8ci5lbmQucm93PD1pLmZpcnN0Um93KSYmdGhpcy5yZW5kZXJlci5zY3JvbGxTZWxlY3Rpb25JbnRvVmlldyh0aGlzLnNlbGVjdGlvbi5hbmNob3IsdGhpcy5zZWxlY3Rpb24ubGVhZCk7YnJlYWs7ZGVmYXVsdDp9bj09ImFuaW1hdGUiJiZ0aGlzLnJlbmRlcmVyLmFuaW1hdGVTY3JvbGxpbmcodGhpcy5jdXJPcC5zY3JvbGxUb3ApfXZhciBzPXRoaXMuc2VsZWN0aW9uLnRvSlNPTigpO3RoaXMuY3VyT3Auc2VsZWN0aW9uQWZ0ZXI9cyx0aGlzLiRsYXN0U2VsPXRoaXMuc2VsZWN0aW9uLnRvSlNPTigpLHRoaXMuc2Vzc2lvbi5nZXRVbmRvTWFuYWdlcigpLmFkZFNlbGVjdGlvbihzKSx0aGlzLnByZXZPcD10aGlzLmN1ck9wLHRoaXMuY3VyT3A9bnVsbH19LHRoaXMuJG1lcmdlYWJsZUNvbW1hbmRzPVsiYmFja3NwYWNlIiwiZGVsIiwiaW5zZXJ0c3RyaW5nIl0sdGhpcy4kaGlzdG9yeVRyYWNrZXI9ZnVuY3Rpb24oZSl7aWYoIXRoaXMuJG1lcmdlVW5kb0RlbHRhcylyZXR1cm47dmFyIHQ9dGhpcy5wcmV2T3Asbj10aGlzLiRtZXJnZWFibGVDb21tYW5kcyxyPXQuY29tbWFuZCYmZS5jb21tYW5kLm5hbWU9PXQuY29tbWFuZC5uYW1lO2lmKGUuY29tbWFuZC5uYW1lPT0iaW5zZXJ0c3RyaW5nIil7dmFyIGk9ZS5hcmdzO3RoaXMubWVyZ2VOZXh0Q29tbWFuZD09PXVuZGVmaW5lZCYmKHRoaXMubWVyZ2VOZXh0Q29tbWFuZD0hMCkscj1yJiZ0aGlzLm1lcmdlTmV4dENvbW1hbmQmJighL1xzLy50ZXN0KGkpfHwvXHMvLnRlc3QodC5hcmdzKSksdGhpcy5tZXJnZU5leHRDb21tYW5kPSEwfWVsc2Ugcj1yJiZuLmluZGV4T2YoZS5jb21tYW5kLm5hbWUpIT09LTE7dGhpcy4kbWVyZ2VVbmRvRGVsdGFzIT0iYWx3YXlzIiYmRGF0ZS5ub3coKS10aGlzLnNlcXVlbmNlU3RhcnRUaW1lPjJlMyYmKHI9ITEpLHI/dGhpcy5zZXNzaW9uLm1lcmdlVW5kb0RlbHRhcz0hMDpuLmluZGV4T2YoZS5jb21tYW5kLm5hbWUpIT09LTEmJih0aGlzLnNlcXVlbmNlU3RhcnRUaW1lPURhdGUubm93KCkpfSx0aGlzLnNldEtleWJvYXJkSGFuZGxlcj1mdW5jdGlvbihlLHQpe2lmKGUmJnR5cGVvZiBlPT0ic3RyaW5nIiYmZSE9ImFjZSIpe3RoaXMuJGtleWJpbmRpbmdJZD1lO3ZhciBuPXRoaXM7Zy5sb2FkTW9kdWxlKFsia2V5YmluZGluZyIsZV0sZnVuY3Rpb24ocil7bi4ka2V5YmluZGluZ0lkPT1lJiZuLmtleUJpbmRpbmcuc2V0S2V5Ym9hcmRIYW5kbGVyKHImJnIuaGFuZGxlciksdCYmdCgpfSl9ZWxzZSB0aGlzLiRrZXliaW5kaW5nSWQ9bnVsbCx0aGlzLmtleUJpbmRpbmcuc2V0S2V5Ym9hcmRIYW5kbGVyKGUpLHQmJnQoKX0sdGhpcy5nZXRLZXlib2FyZEhhbmRsZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5rZXlCaW5kaW5nLmdldEtleWJvYXJkSGFuZGxlcigpfSx0aGlzLnNldFNlc3Npb249ZnVuY3Rpb24oZSl7aWYodGhpcy5zZXNzaW9uPT1lKXJldHVybjt0aGlzLmN1ck9wJiZ0aGlzLmVuZE9wZXJhdGlvbigpLHRoaXMuY3VyT3A9e307dmFyIHQ9dGhpcy5zZXNzaW9uO2lmKHQpe3RoaXMuc2Vzc2lvbi5vZmYoImNoYW5nZSIsdGhpcy4kb25Eb2N1bWVudENoYW5nZSksdGhpcy5zZXNzaW9uLm9mZigiY2hhbmdlTW9kZSIsdGhpcy4kb25DaGFuZ2VNb2RlKSx0aGlzLnNlc3Npb24ub2ZmKCJ0b2tlbml6ZXJVcGRhdGUiLHRoaXMuJG9uVG9rZW5pemVyVXBkYXRlKSx0aGlzLnNlc3Npb24ub2ZmKCJjaGFuZ2VUYWJTaXplIix0aGlzLiRvbkNoYW5nZVRhYlNpemUpLHRoaXMuc2Vzc2lvbi5vZmYoImNoYW5nZVdyYXBMaW1pdCIsdGhpcy4kb25DaGFuZ2VXcmFwTGltaXQpLHRoaXMuc2Vzc2lvbi5vZmYoImNoYW5nZVdyYXBNb2RlIix0aGlzLiRvbkNoYW5nZVdyYXBNb2RlKSx0aGlzLnNlc3Npb24ub2ZmKCJjaGFuZ2VGb2xkIix0aGlzLiRvbkNoYW5nZUZvbGQpLHRoaXMuc2Vzc2lvbi5vZmYoImNoYW5nZUZyb250TWFya2VyIix0aGlzLiRvbkNoYW5nZUZyb250TWFya2VyKSx0aGlzLnNlc3Npb24ub2ZmKCJjaGFuZ2VCYWNrTWFya2VyIix0aGlzLiRvbkNoYW5nZUJhY2tNYXJrZXIpLHRoaXMuc2Vzc2lvbi5vZmYoImNoYW5nZUJyZWFrcG9pbnQiLHRoaXMuJG9uQ2hhbmdlQnJlYWtwb2ludCksdGhpcy5zZXNzaW9uLm9mZigiY2hhbmdlQW5ub3RhdGlvbiIsdGhpcy4kb25DaGFuZ2VBbm5vdGF0aW9uKSx0aGlzLnNlc3Npb24ub2ZmKCJjaGFuZ2VPdmVyd3JpdGUiLHRoaXMuJG9uQ3Vyc29yQ2hhbmdlKSx0aGlzLnNlc3Npb24ub2ZmKCJjaGFuZ2VTY3JvbGxUb3AiLHRoaXMuJG9uU2Nyb2xsVG9wQ2hhbmdlKSx0aGlzLnNlc3Npb24ub2ZmKCJjaGFuZ2VTY3JvbGxMZWZ0Iix0aGlzLiRvblNjcm9sbExlZnRDaGFuZ2UpO3ZhciBuPXRoaXMuc2Vzc2lvbi5nZXRTZWxlY3Rpb24oKTtuLm9mZigiY2hhbmdlQ3Vyc29yIix0aGlzLiRvbkN1cnNvckNoYW5nZSksbi5vZmYoImNoYW5nZVNlbGVjdGlvbiIsdGhpcy4kb25TZWxlY3Rpb25DaGFuZ2UpfXRoaXMuc2Vzc2lvbj1lLGU/KHRoaXMuJG9uRG9jdW1lbnRDaGFuZ2U9dGhpcy5vbkRvY3VtZW50Q2hhbmdlLmJpbmQodGhpcyksZS5vbigiY2hhbmdlIix0aGlzLiRvbkRvY3VtZW50Q2hhbmdlKSx0aGlzLnJlbmRlcmVyLnNldFNlc3Npb24oZSksdGhpcy4kb25DaGFuZ2VNb2RlPXRoaXMub25DaGFuZ2VNb2RlLmJpbmQodGhpcyksZS5vbigiY2hhbmdlTW9kZSIsdGhpcy4kb25DaGFuZ2VNb2RlKSx0aGlzLiRvblRva2VuaXplclVwZGF0ZT10aGlzLm9uVG9rZW5pemVyVXBkYXRlLmJpbmQodGhpcyksZS5vbigidG9rZW5pemVyVXBkYXRlIix0aGlzLiRvblRva2VuaXplclVwZGF0ZSksdGhpcy4kb25DaGFuZ2VUYWJTaXplPXRoaXMucmVuZGVyZXIub25DaGFuZ2VUYWJTaXplLmJpbmQodGhpcy5yZW5kZXJlciksZS5vbigiY2hhbmdlVGFiU2l6ZSIsdGhpcy4kb25DaGFuZ2VUYWJTaXplKSx0aGlzLiRvbkNoYW5nZVdyYXBMaW1pdD10aGlzLm9uQ2hhbmdlV3JhcExpbWl0LmJpbmQodGhpcyksZS5vbigiY2hhbmdlV3JhcExpbWl0Iix0aGlzLiRvbkNoYW5nZVdyYXBMaW1pdCksdGhpcy4kb25DaGFuZ2VXcmFwTW9kZT10aGlzLm9uQ2hhbmdlV3JhcE1vZGUuYmluZCh0aGlzKSxlLm9uKCJjaGFuZ2VXcmFwTW9kZSIsdGhpcy4kb25DaGFuZ2VXcmFwTW9kZSksdGhpcy4kb25DaGFuZ2VGb2xkPXRoaXMub25DaGFuZ2VGb2xkLmJpbmQodGhpcyksZS5vbigiY2hhbmdlRm9sZCIsdGhpcy4kb25DaGFuZ2VGb2xkKSx0aGlzLiRvbkNoYW5nZUZyb250TWFya2VyPXRoaXMub25DaGFuZ2VGcm9udE1hcmtlci5iaW5kKHRoaXMpLHRoaXMuc2Vzc2lvbi5vbigiY2hhbmdlRnJvbnRNYXJrZXIiLHRoaXMuJG9uQ2hhbmdlRnJvbnRNYXJrZXIpLHRoaXMuJG9uQ2hhbmdlQmFja01hcmtlcj10aGlzLm9uQ2hhbmdlQmFja01hcmtlci5iaW5kKHRoaXMpLHRoaXMuc2Vzc2lvbi5vbigiY2hhbmdlQmFja01hcmtlciIsdGhpcy4kb25DaGFuZ2VCYWNrTWFya2VyKSx0aGlzLiRvbkNoYW5nZUJyZWFrcG9pbnQ9dGhpcy5vbkNoYW5nZUJyZWFrcG9pbnQuYmluZCh0aGlzKSx0aGlzLnNlc3Npb24ub24oImNoYW5nZUJyZWFrcG9pbnQiLHRoaXMuJG9uQ2hhbmdlQnJlYWtwb2ludCksdGhpcy4kb25DaGFuZ2VBbm5vdGF0aW9uPXRoaXMub25DaGFuZ2VBbm5vdGF0aW9uLmJpbmQodGhpcyksdGhpcy5zZXNzaW9uLm9uKCJjaGFuZ2VBbm5vdGF0aW9uIix0aGlzLiRvbkNoYW5nZUFubm90YXRpb24pLHRoaXMuJG9uQ3Vyc29yQ2hhbmdlPXRoaXMub25DdXJzb3JDaGFuZ2UuYmluZCh0aGlzKSx0aGlzLnNlc3Npb24ub24oImNoYW5nZU92ZXJ3cml0ZSIsdGhpcy4kb25DdXJzb3JDaGFuZ2UpLHRoaXMuJG9uU2Nyb2xsVG9wQ2hhbmdlPXRoaXMub25TY3JvbGxUb3BDaGFuZ2UuYmluZCh0aGlzKSx0aGlzLnNlc3Npb24ub24oImNoYW5nZVNjcm9sbFRvcCIsdGhpcy4kb25TY3JvbGxUb3BDaGFuZ2UpLHRoaXMuJG9uU2Nyb2xsTGVmdENoYW5nZT10aGlzLm9uU2Nyb2xsTGVmdENoYW5nZS5iaW5kKHRoaXMpLHRoaXMuc2Vzc2lvbi5vbigiY2hhbmdlU2Nyb2xsTGVmdCIsdGhpcy4kb25TY3JvbGxMZWZ0Q2hhbmdlKSx0aGlzLnNlbGVjdGlvbj1lLmdldFNlbGVjdGlvbigpLHRoaXMuc2VsZWN0aW9uLm9uKCJjaGFuZ2VDdXJzb3IiLHRoaXMuJG9uQ3Vyc29yQ2hhbmdlKSx0aGlzLiRvblNlbGVjdGlvbkNoYW5nZT10aGlzLm9uU2VsZWN0aW9uQ2hhbmdlLmJpbmQodGhpcyksdGhpcy5zZWxlY3Rpb24ub24oImNoYW5nZVNlbGVjdGlvbiIsdGhpcy4kb25TZWxlY3Rpb25DaGFuZ2UpLHRoaXMub25DaGFuZ2VNb2RlKCksdGhpcy5vbkN1cnNvckNoYW5nZSgpLHRoaXMub25TY3JvbGxUb3BDaGFuZ2UoKSx0aGlzLm9uU2Nyb2xsTGVmdENoYW5nZSgpLHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKSx0aGlzLm9uQ2hhbmdlRnJvbnRNYXJrZXIoKSx0aGlzLm9uQ2hhbmdlQmFja01hcmtlcigpLHRoaXMub25DaGFuZ2VCcmVha3BvaW50KCksdGhpcy5vbkNoYW5nZUFubm90YXRpb24oKSx0aGlzLnNlc3Npb24uZ2V0VXNlV3JhcE1vZGUoKSYmdGhpcy5yZW5kZXJlci5hZGp1c3RXcmFwTGltaXQoKSx0aGlzLnJlbmRlcmVyLnVwZGF0ZUZ1bGwoKSk6KHRoaXMuc2VsZWN0aW9uPW51bGwsdGhpcy5yZW5kZXJlci5zZXRTZXNzaW9uKGUpKSx0aGlzLl9zaWduYWwoImNoYW5nZVNlc3Npb24iLHtzZXNzaW9uOmUsb2xkU2Vzc2lvbjp0fSksdGhpcy5jdXJPcD1udWxsLHQmJnQuX3NpZ25hbCgiY2hhbmdlRWRpdG9yIix7b2xkRWRpdG9yOnRoaXN9KSxlJiZlLl9zaWduYWwoImNoYW5nZUVkaXRvciIse2VkaXRvcjp0aGlzfSksZSYmZS5iZ1Rva2VuaXplciYmZS5iZ1Rva2VuaXplci5zY2hlZHVsZVN0YXJ0KCl9LHRoaXMuZ2V0U2Vzc2lvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlc3Npb259LHRoaXMuc2V0VmFsdWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5zZXNzaW9uLmRvYy5zZXRWYWx1ZShlKSx0P3Q9PTE/dGhpcy5uYXZpZ2F0ZUZpbGVFbmQoKTp0PT0tMSYmdGhpcy5uYXZpZ2F0ZUZpbGVTdGFydCgpOnRoaXMuc2VsZWN0QWxsKCksZX0sdGhpcy5nZXRWYWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlc3Npb24uZ2V0VmFsdWUoKX0sdGhpcy5nZXRTZWxlY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb259LHRoaXMucmVzaXplPWZ1bmN0aW9uKGUpe3RoaXMucmVuZGVyZXIub25SZXNpemUoZSl9LHRoaXMuc2V0VGhlbWU9ZnVuY3Rpb24oZSx0KXt0aGlzLnJlbmRlcmVyLnNldFRoZW1lKGUsdCl9LHRoaXMuZ2V0VGhlbWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5nZXRUaGVtZSgpfSx0aGlzLnNldFN0eWxlPWZ1bmN0aW9uKGUpe3RoaXMucmVuZGVyZXIuc2V0U3R5bGUoZSl9LHRoaXMudW5zZXRTdHlsZT1mdW5jdGlvbihlKXt0aGlzLnJlbmRlcmVyLnVuc2V0U3R5bGUoZSl9LHRoaXMuZ2V0Rm9udFNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRPcHRpb24oImZvbnRTaXplIil8fGkuY29tcHV0ZWRTdHlsZSh0aGlzLmNvbnRhaW5lcikuZm9udFNpemV9LHRoaXMuc2V0Rm9udFNpemU9ZnVuY3Rpb24oZSl7dGhpcy5zZXRPcHRpb24oImZvbnRTaXplIixlKX0sdGhpcy4kaGlnaGxpZ2h0QnJhY2tldHM9ZnVuY3Rpb24oKXt0aGlzLnNlc3Npb24uJGJyYWNrZXRIaWdobGlnaHQmJih0aGlzLnNlc3Npb24ucmVtb3ZlTWFya2VyKHRoaXMuc2Vzc2lvbi4kYnJhY2tldEhpZ2hsaWdodCksdGhpcy5zZXNzaW9uLiRicmFja2V0SGlnaGxpZ2h0PW51bGwpO2lmKHRoaXMuJGhpZ2hsaWdodFBlbmRpbmcpcmV0dXJuO3ZhciBlPXRoaXM7dGhpcy4kaGlnaGxpZ2h0UGVuZGluZz0hMCxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS4kaGlnaGxpZ2h0UGVuZGluZz0hMTt2YXIgdD1lLnNlc3Npb247aWYoIXR8fCF0LmJnVG9rZW5pemVyKXJldHVybjt2YXIgbj10LmZpbmRNYXRjaGluZ0JyYWNrZXQoZS5nZXRDdXJzb3JQb3NpdGlvbigpKTtpZihuKXZhciByPW5ldyBwKG4ucm93LG4uY29sdW1uLG4ucm93LG4uY29sdW1uKzEpO2Vsc2UgaWYodC4kbW9kZS5nZXRNYXRjaGluZyl2YXIgcj10LiRtb2RlLmdldE1hdGNoaW5nKGUuc2Vzc2lvbik7ciYmKHQuJGJyYWNrZXRIaWdobGlnaHQ9dC5hZGRNYXJrZXIociwiYWNlX2JyYWNrZXQiLCJ0ZXh0IikpfSw1MCl9LHRoaXMuJGhpZ2hsaWdodFRhZ3M9ZnVuY3Rpb24oKXtpZih0aGlzLiRoaWdobGlnaHRUYWdQZW5kaW5nKXJldHVybjt2YXIgZT10aGlzO3RoaXMuJGhpZ2hsaWdodFRhZ1BlbmRpbmc9ITAsc2V0VGltZW91dChmdW5jdGlvbigpe2UuJGhpZ2hsaWdodFRhZ1BlbmRpbmc9ITE7dmFyIHQ9ZS5zZXNzaW9uO2lmKCF0fHwhdC5iZ1Rva2VuaXplcilyZXR1cm47dmFyIG49ZS5nZXRDdXJzb3JQb3NpdGlvbigpLHI9bmV3IHkoZS5zZXNzaW9uLG4ucm93LG4uY29sdW1uKSxpPXIuZ2V0Q3VycmVudFRva2VuKCk7aWYoIWl8fCEvXGIoPzp0YWctb3Blbnx0YWctbmFtZSkvLnRlc3QoaS50eXBlKSl7dC5yZW1vdmVNYXJrZXIodC4kdGFnSGlnaGxpZ2h0KSx0LiR0YWdIaWdobGlnaHQ9bnVsbDtyZXR1cm59aWYoaS50eXBlLmluZGV4T2YoInRhZy1vcGVuIikhPS0xKXtpPXIuc3RlcEZvcndhcmQoKTtpZighaSlyZXR1cm59dmFyIHM9aS52YWx1ZSxvPTAsdT1yLnN0ZXBCYWNrd2FyZCgpO2lmKHUudmFsdWU9PSI8Iil7ZG8gdT1pLGk9ci5zdGVwRm9yd2FyZCgpLGkmJmkudmFsdWU9PT1zJiZpLnR5cGUuaW5kZXhPZigidGFnLW5hbWUiKSE9PS0xJiYodS52YWx1ZT09PSI8Ij9vKys6dS52YWx1ZT09PSI8LyImJm8tLSk7d2hpbGUoaSYmbz49MCl9ZWxzZXtkbyBpPXUsdT1yLnN0ZXBCYWNrd2FyZCgpLGkmJmkudmFsdWU9PT1zJiZpLnR5cGUuaW5kZXhPZigidGFnLW5hbWUiKSE9PS0xJiYodS52YWx1ZT09PSI8Ij9vKys6dS52YWx1ZT09PSI8LyImJm8tLSk7d2hpbGUodSYmbzw9MCk7ci5zdGVwRm9yd2FyZCgpfWlmKCFpKXt0LnJlbW92ZU1hcmtlcih0LiR0YWdIaWdobGlnaHQpLHQuJHRhZ0hpZ2hsaWdodD1udWxsO3JldHVybn12YXIgYT1yLmdldEN1cnJlbnRUb2tlblJvdygpLGY9ci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSxsPW5ldyBwKGEsZixhLGYraS52YWx1ZS5sZW5ndGgpLGM9dC4kYmFja01hcmtlcnNbdC4kdGFnSGlnaGxpZ2h0XTt0LiR0YWdIaWdobGlnaHQmJmMhPXVuZGVmaW5lZCYmbC5jb21wYXJlUmFuZ2UoYy5yYW5nZSkhPT0wJiYodC5yZW1vdmVNYXJrZXIodC4kdGFnSGlnaGxpZ2h0KSx0LiR0YWdIaWdobGlnaHQ9bnVsbCksdC4kdGFnSGlnaGxpZ2h0fHwodC4kdGFnSGlnaGxpZ2h0PXQuYWRkTWFya2VyKGwsImFjZV9icmFja2V0IiwidGV4dCIpKX0sNTApfSx0aGlzLmZvY3VzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5pc0ZvY3VzZWQoKXx8ZS50ZXh0SW5wdXQuZm9jdXMoKX0pLHRoaXMudGV4dElucHV0LmZvY3VzKCl9LHRoaXMuaXNGb2N1c2VkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dElucHV0LmlzRm9jdXNlZCgpfSx0aGlzLmJsdXI9ZnVuY3Rpb24oKXt0aGlzLnRleHRJbnB1dC5ibHVyKCl9LHRoaXMub25Gb2N1cz1mdW5jdGlvbihlKXtpZih0aGlzLiRpc0ZvY3VzZWQpcmV0dXJuO3RoaXMuJGlzRm9jdXNlZD0hMCx0aGlzLnJlbmRlcmVyLnNob3dDdXJzb3IoKSx0aGlzLnJlbmRlcmVyLnZpc3VhbGl6ZUZvY3VzKCksdGhpcy5fZW1pdCgiZm9jdXMiLGUpfSx0aGlzLm9uQmx1cj1mdW5jdGlvbihlKXtpZighdGhpcy4kaXNGb2N1c2VkKXJldHVybjt0aGlzLiRpc0ZvY3VzZWQ9ITEsdGhpcy5yZW5kZXJlci5oaWRlQ3Vyc29yKCksdGhpcy5yZW5kZXJlci52aXN1YWxpemVCbHVyKCksdGhpcy5fZW1pdCgiYmx1ciIsZSl9LHRoaXMuJGN1cnNvckNoYW5nZT1mdW5jdGlvbigpe3RoaXMucmVuZGVyZXIudXBkYXRlQ3Vyc29yKCl9LHRoaXMub25Eb2N1bWVudENoYW5nZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnNlc3Npb24uJHVzZVdyYXBNb2RlLG49ZS5zdGFydC5yb3c9PWUuZW5kLnJvdz9lLmVuZC5yb3c6SW5maW5pdHk7dGhpcy5yZW5kZXJlci51cGRhdGVMaW5lcyhlLnN0YXJ0LnJvdyxuLHQpLHRoaXMuX3NpZ25hbCgiY2hhbmdlIixlKSx0aGlzLiRjdXJzb3JDaGFuZ2UoKSx0aGlzLiR1cGRhdGVIaWdobGlnaHRBY3RpdmVMaW5lKCl9LHRoaXMub25Ub2tlbml6ZXJVcGRhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kYXRhO3RoaXMucmVuZGVyZXIudXBkYXRlTGluZXModC5maXJzdCx0Lmxhc3QpfSx0aGlzLm9uU2Nyb2xsVG9wQ2hhbmdlPWZ1bmN0aW9uKCl7dGhpcy5yZW5kZXJlci5zY3JvbGxUb1kodGhpcy5zZXNzaW9uLmdldFNjcm9sbFRvcCgpKX0sdGhpcy5vblNjcm9sbExlZnRDaGFuZ2U9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcmVyLnNjcm9sbFRvWCh0aGlzLnNlc3Npb24uZ2V0U2Nyb2xsTGVmdCgpKX0sdGhpcy5vbkN1cnNvckNoYW5nZT1mdW5jdGlvbigpe3RoaXMuJGN1cnNvckNoYW5nZSgpLHRoaXMuJGhpZ2hsaWdodEJyYWNrZXRzKCksdGhpcy4kaGlnaGxpZ2h0VGFncygpLHRoaXMuJHVwZGF0ZUhpZ2hsaWdodEFjdGl2ZUxpbmUoKSx0aGlzLl9zaWduYWwoImNoYW5nZVNlbGVjdGlvbiIpfSx0aGlzLiR1cGRhdGVIaWdobGlnaHRBY3RpdmVMaW5lPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRTZXNzaW9uKCksdDtpZih0aGlzLiRoaWdobGlnaHRBY3RpdmVMaW5lKXtpZih0aGlzLiRzZWxlY3Rpb25TdHlsZSE9ImxpbmUifHwhdGhpcy5zZWxlY3Rpb24uaXNNdWx0aUxpbmUoKSl0PXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oKTt0aGlzLnJlbmRlcmVyLnRoZW1lJiZ0aGlzLnJlbmRlcmVyLnRoZW1lLiRzZWxlY3Rpb25Db2xvckNvbmZsaWN0JiYhdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpJiYodD0hMSksdGhpcy5yZW5kZXJlci4kbWF4TGluZXMmJnRoaXMuc2Vzc2lvbi5nZXRMZW5ndGgoKT09PTEmJiEodGhpcy5yZW5kZXJlci4kbWluTGluZXM+MSkmJih0PSExKX1pZihlLiRoaWdobGlnaHRMaW5lTWFya2VyJiYhdCllLnJlbW92ZU1hcmtlcihlLiRoaWdobGlnaHRMaW5lTWFya2VyLmlkKSxlLiRoaWdobGlnaHRMaW5lTWFya2VyPW51bGw7ZWxzZSBpZighZS4kaGlnaGxpZ2h0TGluZU1hcmtlciYmdCl7dmFyIG49bmV3IHAodC5yb3csdC5jb2x1bW4sdC5yb3csSW5maW5pdHkpO24uaWQ9ZS5hZGRNYXJrZXIobiwiYWNlX2FjdGl2ZS1saW5lIiwic2NyZWVuTGluZSIpLGUuJGhpZ2hsaWdodExpbmVNYXJrZXI9bn1lbHNlIHQmJihlLiRoaWdobGlnaHRMaW5lTWFya2VyLnN0YXJ0LnJvdz10LnJvdyxlLiRoaWdobGlnaHRMaW5lTWFya2VyLmVuZC5yb3c9dC5yb3csZS4kaGlnaGxpZ2h0TGluZU1hcmtlci5zdGFydC5jb2x1bW49dC5jb2x1bW4sZS5fc2lnbmFsKCJjaGFuZ2VCYWNrTWFya2VyIikpfSx0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuc2Vzc2lvbjt0LiRzZWxlY3Rpb25NYXJrZXImJnQucmVtb3ZlTWFya2VyKHQuJHNlbGVjdGlvbk1hcmtlciksdC4kc2VsZWN0aW9uTWFya2VyPW51bGw7aWYoIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSl7dmFyIG49dGhpcy5zZWxlY3Rpb24uZ2V0UmFuZ2UoKSxyPXRoaXMuZ2V0U2VsZWN0aW9uU3R5bGUoKTt0LiRzZWxlY3Rpb25NYXJrZXI9dC5hZGRNYXJrZXIobiwiYWNlX3NlbGVjdGlvbiIscil9ZWxzZSB0aGlzLiR1cGRhdGVIaWdobGlnaHRBY3RpdmVMaW5lKCk7dmFyIGk9dGhpcy4kaGlnaGxpZ2h0U2VsZWN0ZWRXb3JkJiZ0aGlzLiRnZXRTZWxlY3Rpb25IaWdoTGlnaHRSZWdleHAoKTt0aGlzLnNlc3Npb24uaGlnaGxpZ2h0KGkpLHRoaXMuX3NpZ25hbCgiY2hhbmdlU2VsZWN0aW9uIil9LHRoaXMuJGdldFNlbGVjdGlvbkhpZ2hMaWdodFJlZ2V4cD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuc2Vzc2lvbix0PXRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTtpZih0LmlzRW1wdHkoKXx8dC5pc011bHRpTGluZSgpKXJldHVybjt2YXIgbj10LnN0YXJ0LmNvbHVtbixyPXQuZW5kLmNvbHVtbixpPWUuZ2V0TGluZSh0LnN0YXJ0LnJvdykscz1pLnN1YnN0cmluZyhuLHIpO2lmKHMubGVuZ3RoPjVlM3x8IS9bXHdcZF0vLnRlc3QocykpcmV0dXJuO3ZhciBvPXRoaXMuJHNlYXJjaC4kYXNzZW1ibGVSZWdFeHAoe3dob2xlV29yZDohMCxjYXNlU2Vuc2l0aXZlOiEwLG5lZWRsZTpzfSksdT1pLnN1YnN0cmluZyhuLTEscisxKTtpZighby50ZXN0KHUpKXJldHVybjtyZXR1cm4gb30sdGhpcy5vbkNoYW5nZUZyb250TWFya2VyPWZ1bmN0aW9uKCl7dGhpcy5yZW5kZXJlci51cGRhdGVGcm9udE1hcmtlcnMoKX0sdGhpcy5vbkNoYW5nZUJhY2tNYXJrZXI9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcmVyLnVwZGF0ZUJhY2tNYXJrZXJzKCl9LHRoaXMub25DaGFuZ2VCcmVha3BvaW50PWZ1bmN0aW9uKCl7dGhpcy5yZW5kZXJlci51cGRhdGVCcmVha3BvaW50cygpfSx0aGlzLm9uQ2hhbmdlQW5ub3RhdGlvbj1mdW5jdGlvbigpe3RoaXMucmVuZGVyZXIuc2V0QW5ub3RhdGlvbnModGhpcy5zZXNzaW9uLmdldEFubm90YXRpb25zKCkpfSx0aGlzLm9uQ2hhbmdlTW9kZT1mdW5jdGlvbihlKXt0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHQoKSx0aGlzLl9lbWl0KCJjaGFuZ2VNb2RlIixlKX0sdGhpcy5vbkNoYW5nZVdyYXBMaW1pdD1mdW5jdGlvbigpe3RoaXMucmVuZGVyZXIudXBkYXRlRnVsbCgpfSx0aGlzLm9uQ2hhbmdlV3JhcE1vZGU9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcmVyLm9uUmVzaXplKCEwKX0sdGhpcy5vbkNoYW5nZUZvbGQ9ZnVuY3Rpb24oKXt0aGlzLiR1cGRhdGVIaWdobGlnaHRBY3RpdmVMaW5lKCksdGhpcy5yZW5kZXJlci51cGRhdGVGdWxsKCl9LHRoaXMuZ2V0U2VsZWN0ZWRUZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2Vzc2lvbi5nZXRUZXh0UmFuZ2UodGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpKX0sdGhpcy5nZXRDb3B5VGV4dD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0U2VsZWN0ZWRUZXh0KCksdD10aGlzLnNlc3Npb24uZG9jLmdldE5ld0xpbmVDaGFyYWN0ZXIoKSxuPSExO2lmKCFlJiZ0aGlzLiRjb3B5V2l0aEVtcHR5U2VsZWN0aW9uKXtuPSEwO3ZhciByPXRoaXMuc2VsZWN0aW9uLmdldEFsbFJhbmdlcygpO2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgcz1yW2ldO2lmKGkmJnJbaS0xXS5zdGFydC5yb3c9PXMuc3RhcnQucm93KWNvbnRpbnVlO2UrPXRoaXMuc2Vzc2lvbi5nZXRMaW5lKHMuc3RhcnQucm93KSt0fX12YXIgbz17dGV4dDplfTtyZXR1cm4gdGhpcy5fc2lnbmFsKCJjb3B5IixvKSxiLmxpbmVNb2RlPW4/by50ZXh0OiIiLG8udGV4dH0sdGhpcy5vbkNvcHk9ZnVuY3Rpb24oKXt0aGlzLmNvbW1hbmRzLmV4ZWMoImNvcHkiLHRoaXMpfSx0aGlzLm9uQ3V0PWZ1bmN0aW9uKCl7dGhpcy5jb21tYW5kcy5leGVjKCJjdXQiLHRoaXMpfSx0aGlzLm9uUGFzdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj17dGV4dDplLGV2ZW50OnR9O3RoaXMuY29tbWFuZHMuZXhlYygicGFzdGUiLHRoaXMsbil9LHRoaXMuJGhhbmRsZVBhc3RlPWZ1bmN0aW9uKGUpe3R5cGVvZiBlPT0ic3RyaW5nIiYmKGU9e3RleHQ6ZX0pLHRoaXMuX3NpZ25hbCgicGFzdGUiLGUpO3ZhciB0PWUudGV4dCxuPXQ9PWIubGluZU1vZGUscj10aGlzLnNlc3Npb247aWYoIXRoaXMuaW5NdWx0aVNlbGVjdE1vZGV8fHRoaXMuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSluP3IuaW5zZXJ0KHtyb3c6dGhpcy5zZWxlY3Rpb24ubGVhZC5yb3csY29sdW1uOjB9LHQpOnRoaXMuaW5zZXJ0KHQpO2Vsc2UgaWYobil0aGlzLnNlbGVjdGlvbi5yYW5nZUxpc3QucmFuZ2VzLmZvckVhY2goZnVuY3Rpb24oZSl7ci5pbnNlcnQoe3JvdzplLnN0YXJ0LnJvdyxjb2x1bW46MH0sdCl9KTtlbHNle3ZhciBpPXQuc3BsaXQoL1xyXG58XHJ8XG4vKSxzPXRoaXMuc2VsZWN0aW9uLnJhbmdlTGlzdC5yYW5nZXMsbz1pLmxlbmd0aD09MiYmKCFpWzBdfHwhaVsxXSk7aWYoaS5sZW5ndGghPXMubGVuZ3RofHxvKXJldHVybiB0aGlzLmNvbW1hbmRzLmV4ZWMoImluc2VydHN0cmluZyIsdGhpcyx0KTtmb3IodmFyIHU9cy5sZW5ndGg7dS0tOyl7dmFyIGE9c1t1XTthLmlzRW1wdHkoKXx8ci5yZW1vdmUoYSksci5pbnNlcnQoYS5zdGFydCxpW3VdKX19fSx0aGlzLmV4ZWNDb21tYW5kPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuY29tbWFuZHMuZXhlYyhlLHRoaXMsdCl9LHRoaXMuaW5zZXJ0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5zZXNzaW9uLHI9bi5nZXRNb2RlKCksaT10aGlzLmdldEN1cnNvclBvc2l0aW9uKCk7aWYodGhpcy5nZXRCZWhhdmlvdXJzRW5hYmxlZCgpJiYhdCl7dmFyIHM9ci50cmFuc2Zvcm1BY3Rpb24obi5nZXRTdGF0ZShpLnJvdyksImluc2VydGlvbiIsdGhpcyxuLGUpO3MmJihlIT09cy50ZXh0JiYodGhpcy5pblZpcnR1YWxTZWxlY3Rpb25Nb2RlfHwodGhpcy5zZXNzaW9uLm1lcmdlVW5kb0RlbHRhcz0hMSx0aGlzLm1lcmdlTmV4dENvbW1hbmQ9ITEpKSxlPXMudGV4dCl9ZT09IgkiJiYoZT10aGlzLnNlc3Npb24uZ2V0VGFiU3RyaW5nKCkpO2lmKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpe3ZhciBvPXRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTtpPXRoaXMuc2Vzc2lvbi5yZW1vdmUobyksdGhpcy5jbGVhclNlbGVjdGlvbigpfWVsc2UgaWYodGhpcy5zZXNzaW9uLmdldE92ZXJ3cml0ZSgpJiZlLmluZGV4T2YoIlxuIik9PS0xKXt2YXIgbz1uZXcgcC5mcm9tUG9pbnRzKGksaSk7by5lbmQuY29sdW1uKz1lLmxlbmd0aCx0aGlzLnNlc3Npb24ucmVtb3ZlKG8pfWlmKGU9PSJcbiJ8fGU9PSJcclxuIil7dmFyIHU9bi5nZXRMaW5lKGkucm93KTtpZihpLmNvbHVtbj51LnNlYXJjaCgvXFN8JC8pKXt2YXIgYT11LnN1YnN0cihpLmNvbHVtbikuc2VhcmNoKC9cU3wkLyk7bi5kb2MucmVtb3ZlSW5MaW5lKGkucm93LGkuY29sdW1uLGkuY29sdW1uK2EpfX10aGlzLmNsZWFyU2VsZWN0aW9uKCk7dmFyIGY9aS5jb2x1bW4sbD1uLmdldFN0YXRlKGkucm93KSx1PW4uZ2V0TGluZShpLnJvdyksYz1yLmNoZWNrT3V0ZGVudChsLHUsZSk7bi5pbnNlcnQoaSxlKSxzJiZzLnNlbGVjdGlvbiYmKHMuc2VsZWN0aW9uLmxlbmd0aD09Mj90aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZShuZXcgcChpLnJvdyxmK3Muc2VsZWN0aW9uWzBdLGkucm93LGYrcy5zZWxlY3Rpb25bMV0pKTp0aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZShuZXcgcChpLnJvdytzLnNlbGVjdGlvblswXSxzLnNlbGVjdGlvblsxXSxpLnJvdytzLnNlbGVjdGlvblsyXSxzLnNlbGVjdGlvblszXSkpKTtpZihuLmdldERvY3VtZW50KCkuaXNOZXdMaW5lKGUpKXt2YXIgaD1yLmdldE5leHRMaW5lSW5kZW50KGwsdS5zbGljZSgwLGkuY29sdW1uKSxuLmdldFRhYlN0cmluZygpKTtuLmluc2VydCh7cm93Omkucm93KzEsY29sdW1uOjB9LGgpfWMmJnIuYXV0b091dGRlbnQobCxuLGkucm93KX0sdGhpcy5vblRleHRJbnB1dD1mdW5jdGlvbihlLHQpe2lmKCF0KXJldHVybiB0aGlzLmtleUJpbmRpbmcub25UZXh0SW5wdXQoZSk7dGhpcy5zdGFydE9wZXJhdGlvbih7Y29tbWFuZDp7bmFtZToiaW5zZXJ0c3RyaW5nIn19KTt2YXIgbj10aGlzLmFwcGx5Q29tcG9zaXRpb24uYmluZCh0aGlzLGUsdCk7dGhpcy5zZWxlY3Rpb24ucmFuZ2VDb3VudD90aGlzLmZvckVhY2hTZWxlY3Rpb24obik6bigpLHRoaXMuZW5kT3BlcmF0aW9uKCl9LHRoaXMuYXBwbHlDb21wb3NpdGlvbj1mdW5jdGlvbihlLHQpe2lmKHQuZXh0ZW5kTGVmdHx8dC5leHRlbmRSaWdodCl7dmFyIG49dGhpcy5zZWxlY3Rpb24uZ2V0UmFuZ2UoKTtuLnN0YXJ0LmNvbHVtbi09dC5leHRlbmRMZWZ0LG4uZW5kLmNvbHVtbis9dC5leHRlbmRSaWdodCx0aGlzLnNlbGVjdGlvbi5zZXRSYW5nZShuKSwhZSYmIW4uaXNFbXB0eSgpJiZ0aGlzLnJlbW92ZSgpfShlfHwhdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKSYmdGhpcy5pbnNlcnQoZSwhMCk7aWYodC5yZXN0b3JlU3RhcnR8fHQucmVzdG9yZUVuZCl7dmFyIG49dGhpcy5zZWxlY3Rpb24uZ2V0UmFuZ2UoKTtuLnN0YXJ0LmNvbHVtbi09dC5yZXN0b3JlU3RhcnQsbi5lbmQuY29sdW1uLT10LnJlc3RvcmVFbmQsdGhpcy5zZWxlY3Rpb24uc2V0UmFuZ2Uobil9fSx0aGlzLm9uQ29tbWFuZEtleT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMua2V5QmluZGluZy5vbkNvbW1hbmRLZXkoZSx0LG4pfSx0aGlzLnNldE92ZXJ3cml0ZT1mdW5jdGlvbihlKXt0aGlzLnNlc3Npb24uc2V0T3ZlcndyaXRlKGUpfSx0aGlzLmdldE92ZXJ3cml0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlc3Npb24uZ2V0T3ZlcndyaXRlKCl9LHRoaXMudG9nZ2xlT3ZlcndyaXRlPWZ1bmN0aW9uKCl7dGhpcy5zZXNzaW9uLnRvZ2dsZU92ZXJ3cml0ZSgpfSx0aGlzLnNldFNjcm9sbFNwZWVkPWZ1bmN0aW9uKGUpe3RoaXMuc2V0T3B0aW9uKCJzY3JvbGxTcGVlZCIsZSl9LHRoaXMuZ2V0U2Nyb2xsU3BlZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRPcHRpb24oInNjcm9sbFNwZWVkIil9LHRoaXMuc2V0RHJhZ0RlbGF5PWZ1bmN0aW9uKGUpe3RoaXMuc2V0T3B0aW9uKCJkcmFnRGVsYXkiLGUpfSx0aGlzLmdldERyYWdEZWxheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldE9wdGlvbigiZHJhZ0RlbGF5Iil9LHRoaXMuc2V0U2VsZWN0aW9uU3R5bGU9ZnVuY3Rpb24oZSl7dGhpcy5zZXRPcHRpb24oInNlbGVjdGlvblN0eWxlIixlKX0sdGhpcy5nZXRTZWxlY3Rpb25TdHlsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldE9wdGlvbigic2VsZWN0aW9uU3R5bGUiKX0sdGhpcy5zZXRIaWdobGlnaHRBY3RpdmVMaW5lPWZ1bmN0aW9uKGUpe3RoaXMuc2V0T3B0aW9uKCJoaWdobGlnaHRBY3RpdmVMaW5lIixlKX0sdGhpcy5nZXRIaWdobGlnaHRBY3RpdmVMaW5lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0T3B0aW9uKCJoaWdobGlnaHRBY3RpdmVMaW5lIil9LHRoaXMuc2V0SGlnaGxpZ2h0R3V0dGVyTGluZT1mdW5jdGlvbihlKXt0aGlzLnNldE9wdGlvbigiaGlnaGxpZ2h0R3V0dGVyTGluZSIsZSl9LHRoaXMuZ2V0SGlnaGxpZ2h0R3V0dGVyTGluZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldE9wdGlvbigiaGlnaGxpZ2h0R3V0dGVyTGluZSIpfSx0aGlzLnNldEhpZ2hsaWdodFNlbGVjdGVkV29yZD1mdW5jdGlvbihlKXt0aGlzLnNldE9wdGlvbigiaGlnaGxpZ2h0U2VsZWN0ZWRXb3JkIixlKX0sdGhpcy5nZXRIaWdobGlnaHRTZWxlY3RlZFdvcmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kaGlnaGxpZ2h0U2VsZWN0ZWRXb3JkfSx0aGlzLnNldEFuaW1hdGVkU2Nyb2xsPWZ1bmN0aW9uKGUpe3RoaXMucmVuZGVyZXIuc2V0QW5pbWF0ZWRTY3JvbGwoZSl9LHRoaXMuZ2V0QW5pbWF0ZWRTY3JvbGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5nZXRBbmltYXRlZFNjcm9sbCgpfSx0aGlzLnNldFNob3dJbnZpc2libGVzPWZ1bmN0aW9uKGUpe3RoaXMucmVuZGVyZXIuc2V0U2hvd0ludmlzaWJsZXMoZSl9LHRoaXMuZ2V0U2hvd0ludmlzaWJsZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5nZXRTaG93SW52aXNpYmxlcygpfSx0aGlzLnNldERpc3BsYXlJbmRlbnRHdWlkZXM9ZnVuY3Rpb24oZSl7dGhpcy5yZW5kZXJlci5zZXREaXNwbGF5SW5kZW50R3VpZGVzKGUpfSx0aGlzLmdldERpc3BsYXlJbmRlbnRHdWlkZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5nZXREaXNwbGF5SW5kZW50R3VpZGVzKCl9LHRoaXMuc2V0U2hvd1ByaW50TWFyZ2luPWZ1bmN0aW9uKGUpe3RoaXMucmVuZGVyZXIuc2V0U2hvd1ByaW50TWFyZ2luKGUpfSx0aGlzLmdldFNob3dQcmludE1hcmdpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlbmRlcmVyLmdldFNob3dQcmludE1hcmdpbigpfSx0aGlzLnNldFByaW50TWFyZ2luQ29sdW1uPWZ1bmN0aW9uKGUpe3RoaXMucmVuZGVyZXIuc2V0UHJpbnRNYXJnaW5Db2x1bW4oZSl9LHRoaXMuZ2V0UHJpbnRNYXJnaW5Db2x1bW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5nZXRQcmludE1hcmdpbkNvbHVtbigpfSx0aGlzLnNldFJlYWRPbmx5PWZ1bmN0aW9uKGUpe3RoaXMuc2V0T3B0aW9uKCJyZWFkT25seSIsZSl9LHRoaXMuZ2V0UmVhZE9ubHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRPcHRpb24oInJlYWRPbmx5Iil9LHRoaXMuc2V0QmVoYXZpb3Vyc0VuYWJsZWQ9ZnVuY3Rpb24oZSl7dGhpcy5zZXRPcHRpb24oImJlaGF2aW91cnNFbmFibGVkIixlKX0sdGhpcy5nZXRCZWhhdmlvdXJzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldE9wdGlvbigiYmVoYXZpb3Vyc0VuYWJsZWQiKX0sdGhpcy5zZXRXcmFwQmVoYXZpb3Vyc0VuYWJsZWQ9ZnVuY3Rpb24oZSl7dGhpcy5zZXRPcHRpb24oIndyYXBCZWhhdmlvdXJzRW5hYmxlZCIsZSl9LHRoaXMuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0T3B0aW9uKCJ3cmFwQmVoYXZpb3Vyc0VuYWJsZWQiKX0sdGhpcy5zZXRTaG93Rm9sZFdpZGdldHM9ZnVuY3Rpb24oZSl7dGhpcy5zZXRPcHRpb24oInNob3dGb2xkV2lkZ2V0cyIsZSl9LHRoaXMuZ2V0U2hvd0ZvbGRXaWRnZXRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0T3B0aW9uKCJzaG93Rm9sZFdpZGdldHMiKX0sdGhpcy5zZXRGYWRlRm9sZFdpZGdldHM9ZnVuY3Rpb24oZSl7dGhpcy5zZXRPcHRpb24oImZhZGVGb2xkV2lkZ2V0cyIsZSl9LHRoaXMuZ2V0RmFkZUZvbGRXaWRnZXRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0T3B0aW9uKCJmYWRlRm9sZFdpZGdldHMiKX0sdGhpcy5yZW1vdmU9ZnVuY3Rpb24oZSl7dGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpJiYoZT09ImxlZnQiP3RoaXMuc2VsZWN0aW9uLnNlbGVjdExlZnQoKTp0aGlzLnNlbGVjdGlvbi5zZWxlY3RSaWdodCgpKTt2YXIgdD10aGlzLmdldFNlbGVjdGlvblJhbmdlKCk7aWYodGhpcy5nZXRCZWhhdmlvdXJzRW5hYmxlZCgpKXt2YXIgbj10aGlzLnNlc3Npb24scj1uLmdldFN0YXRlKHQuc3RhcnQucm93KSxpPW4uZ2V0TW9kZSgpLnRyYW5zZm9ybUFjdGlvbihyLCJkZWxldGlvbiIsdGhpcyxuLHQpO2lmKHQuZW5kLmNvbHVtbj09PTApe3ZhciBzPW4uZ2V0VGV4dFJhbmdlKHQpO2lmKHNbcy5sZW5ndGgtMV09PSJcbiIpe3ZhciBvPW4uZ2V0TGluZSh0LmVuZC5yb3cpOy9eXHMrJC8udGVzdChvKSYmKHQuZW5kLmNvbHVtbj1vLmxlbmd0aCl9fWkmJih0PWkpfXRoaXMuc2Vzc2lvbi5yZW1vdmUodCksdGhpcy5jbGVhclNlbGVjdGlvbigpfSx0aGlzLnJlbW92ZVdvcmRSaWdodD1mdW5jdGlvbigpe3RoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSYmdGhpcy5zZWxlY3Rpb24uc2VsZWN0V29yZFJpZ2h0KCksdGhpcy5zZXNzaW9uLnJlbW92ZSh0aGlzLmdldFNlbGVjdGlvblJhbmdlKCkpLHRoaXMuY2xlYXJTZWxlY3Rpb24oKX0sdGhpcy5yZW1vdmVXb3JkTGVmdD1mdW5jdGlvbigpe3RoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSYmdGhpcy5zZWxlY3Rpb24uc2VsZWN0V29yZExlZnQoKSx0aGlzLnNlc3Npb24ucmVtb3ZlKHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSksdGhpcy5jbGVhclNlbGVjdGlvbigpfSx0aGlzLnJlbW92ZVRvTGluZVN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpJiZ0aGlzLnNlbGVjdGlvbi5zZWxlY3RMaW5lU3RhcnQoKSx0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkmJnRoaXMuc2VsZWN0aW9uLnNlbGVjdExlZnQoKSx0aGlzLnNlc3Npb24ucmVtb3ZlKHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSksdGhpcy5jbGVhclNlbGVjdGlvbigpfSx0aGlzLnJlbW92ZVRvTGluZUVuZD1mdW5jdGlvbigpe3RoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSYmdGhpcy5zZWxlY3Rpb24uc2VsZWN0TGluZUVuZCgpO3ZhciBlPXRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTtlLnN0YXJ0LmNvbHVtbj09ZS5lbmQuY29sdW1uJiZlLnN0YXJ0LnJvdz09ZS5lbmQucm93JiYoZS5lbmQuY29sdW1uPTAsZS5lbmQucm93KyspLHRoaXMuc2Vzc2lvbi5yZW1vdmUoZSksdGhpcy5jbGVhclNlbGVjdGlvbigpfSx0aGlzLnNwbGl0TGluZT1mdW5jdGlvbigpe3RoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKXx8KHRoaXMuc2Vzc2lvbi5yZW1vdmUodGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpKSx0aGlzLmNsZWFyU2VsZWN0aW9uKCkpO3ZhciBlPXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oKTt0aGlzLmluc2VydCgiXG4iKSx0aGlzLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKGUpfSx0aGlzLnRyYW5zcG9zZUxldHRlcnM9ZnVuY3Rpb24oKXtpZighdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKXJldHVybjt2YXIgZT10aGlzLmdldEN1cnNvclBvc2l0aW9uKCksdD1lLmNvbHVtbjtpZih0PT09MClyZXR1cm47dmFyIG49dGhpcy5zZXNzaW9uLmdldExpbmUoZS5yb3cpLHIsaTt0PG4ubGVuZ3RoPyhyPW4uY2hhckF0KHQpK24uY2hhckF0KHQtMSksaT1uZXcgcChlLnJvdyx0LTEsZS5yb3csdCsxKSk6KHI9bi5jaGFyQXQodC0xKStuLmNoYXJBdCh0LTIpLGk9bmV3IHAoZS5yb3csdC0yLGUucm93LHQpKSx0aGlzLnNlc3Npb24ucmVwbGFjZShpLHIpLHRoaXMuc2Vzc2lvbi5zZWxlY3Rpb24ubW92ZVRvUG9zaXRpb24oaS5lbmQpfSx0aGlzLnRvTG93ZXJDYXNlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpO3RoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSYmdGhpcy5zZWxlY3Rpb24uc2VsZWN0V29yZCgpO3ZhciB0PXRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxuPXRoaXMuc2Vzc2lvbi5nZXRUZXh0UmFuZ2UodCk7dGhpcy5zZXNzaW9uLnJlcGxhY2UodCxuLnRvTG93ZXJDYXNlKCkpLHRoaXMuc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKGUpfSx0aGlzLnRvVXBwZXJDYXNlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpO3RoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSYmdGhpcy5zZWxlY3Rpb24uc2VsZWN0V29yZCgpO3ZhciB0PXRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxuPXRoaXMuc2Vzc2lvbi5nZXRUZXh0UmFuZ2UodCk7dGhpcy5zZXNzaW9uLnJlcGxhY2UodCxuLnRvVXBwZXJDYXNlKCkpLHRoaXMuc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKGUpfSx0aGlzLmluZGVudD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuc2Vzc2lvbix0PXRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTtpZih0LnN0YXJ0LnJvdzx0LmVuZC5yb3cpe3ZhciBuPXRoaXMuJGdldFNlbGVjdGVkUm93cygpO2UuaW5kZW50Um93cyhuLmZpcnN0LG4ubGFzdCwiCSIpO3JldHVybn1pZih0LnN0YXJ0LmNvbHVtbjx0LmVuZC5jb2x1bW4pe3ZhciByPWUuZ2V0VGV4dFJhbmdlKHQpO2lmKCEvXlxzKyQvLnRlc3Qocikpe3ZhciBuPXRoaXMuJGdldFNlbGVjdGVkUm93cygpO2UuaW5kZW50Um93cyhuLmZpcnN0LG4ubGFzdCwiCSIpO3JldHVybn19dmFyIGk9ZS5nZXRMaW5lKHQuc3RhcnQucm93KSxvPXQuc3RhcnQsdT1lLmdldFRhYlNpemUoKSxhPWUuZG9jdW1lbnRUb1NjcmVlbkNvbHVtbihvLnJvdyxvLmNvbHVtbik7aWYodGhpcy5zZXNzaW9uLmdldFVzZVNvZnRUYWJzKCkpdmFyIGY9dS1hJXUsbD1zLnN0cmluZ1JlcGVhdCgiICIsZik7ZWxzZXt2YXIgZj1hJXU7d2hpbGUoaVt0LnN0YXJ0LmNvbHVtbi0xXT09IiAiJiZmKXQuc3RhcnQuY29sdW1uLS0sZi0tO3RoaXMuc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKHQpLGw9IgkifXJldHVybiB0aGlzLmluc2VydChsKX0sdGhpcy5ibG9ja0luZGVudD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuJGdldFNlbGVjdGVkUm93cygpO3RoaXMuc2Vzc2lvbi5pbmRlbnRSb3dzKGUuZmlyc3QsZS5sYXN0LCIJIil9LHRoaXMuYmxvY2tPdXRkZW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zZXNzaW9uLmdldFNlbGVjdGlvbigpO3RoaXMuc2Vzc2lvbi5vdXRkZW50Um93cyhlLmdldFJhbmdlKCkpfSx0aGlzLnNvcnRMaW5lcz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuJGdldFNlbGVjdGVkUm93cygpLHQ9dGhpcy5zZXNzaW9uLG49W107Zm9yKHZhciByPWUuZmlyc3Q7cjw9ZS5sYXN0O3IrKyluLnB1c2godC5nZXRMaW5lKHIpKTtuLnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50b0xvd2VyQ2FzZSgpPHQudG9Mb3dlckNhc2UoKT8tMTplLnRvTG93ZXJDYXNlKCk+dC50b0xvd2VyQ2FzZSgpPzE6MH0pO3ZhciBpPW5ldyBwKDAsMCwwLDApO2Zvcih2YXIgcj1lLmZpcnN0O3I8PWUubGFzdDtyKyspe3ZhciBzPXQuZ2V0TGluZShyKTtpLnN0YXJ0LnJvdz1yLGkuZW5kLnJvdz1yLGkuZW5kLmNvbHVtbj1zLmxlbmd0aCx0LnJlcGxhY2UoaSxuW3ItZS5maXJzdF0pfX0sdGhpcy50b2dnbGVDb21tZW50TGluZXM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnNlc3Npb24uZ2V0U3RhdGUodGhpcy5nZXRDdXJzb3JQb3NpdGlvbigpLnJvdyksdD10aGlzLiRnZXRTZWxlY3RlZFJvd3MoKTt0aGlzLnNlc3Npb24uZ2V0TW9kZSgpLnRvZ2dsZUNvbW1lbnRMaW5lcyhlLHRoaXMuc2Vzc2lvbix0LmZpcnN0LHQubGFzdCl9LHRoaXMudG9nZ2xlQmxvY2tDb21tZW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRDdXJzb3JQb3NpdGlvbigpLHQ9dGhpcy5zZXNzaW9uLmdldFN0YXRlKGUucm93KSxuPXRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTt0aGlzLnNlc3Npb24uZ2V0TW9kZSgpLnRvZ2dsZUJsb2NrQ29tbWVudCh0LHRoaXMuc2Vzc2lvbixuLGUpfSx0aGlzLmdldE51bWJlckF0PWZ1bmN0aW9uKGUsdCl7dmFyIG49L1tcLV0/WzAtOV0rKD86XC5bMC05XSspPy9nO24ubGFzdEluZGV4PTA7dmFyIHI9dGhpcy5zZXNzaW9uLmdldExpbmUoZSk7d2hpbGUobi5sYXN0SW5kZXg8dCl7dmFyIGk9bi5leGVjKHIpO2lmKGkuaW5kZXg8PXQmJmkuaW5kZXgraVswXS5sZW5ndGg+PXQpe3ZhciBzPXt2YWx1ZTppWzBdLHN0YXJ0OmkuaW5kZXgsZW5kOmkuaW5kZXgraVswXS5sZW5ndGh9O3JldHVybiBzfX1yZXR1cm4gbnVsbH0sdGhpcy5tb2RpZnlOdW1iZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5zZWxlY3Rpb24uZ2V0Q3Vyc29yKCkucm93LG49dGhpcy5zZWxlY3Rpb24uZ2V0Q3Vyc29yKCkuY29sdW1uLHI9bmV3IHAodCxuLTEsdCxuKSxpPXRoaXMuc2Vzc2lvbi5nZXRUZXh0UmFuZ2Uocik7aWYoIWlzTmFOKHBhcnNlRmxvYXQoaSkpJiZpc0Zpbml0ZShpKSl7dmFyIHM9dGhpcy5nZXROdW1iZXJBdCh0LG4pO2lmKHMpe3ZhciBvPXMudmFsdWUuaW5kZXhPZigiLiIpPj0wP3Muc3RhcnQrcy52YWx1ZS5pbmRleE9mKCIuIikrMTpzLmVuZCx1PXMuc3RhcnQrcy52YWx1ZS5sZW5ndGgtbyxhPXBhcnNlRmxvYXQocy52YWx1ZSk7YSo9TWF0aC5wb3coMTAsdSksbyE9PXMuZW5kJiZuPG8/ZSo9TWF0aC5wb3coMTAscy5lbmQtbi0xKTplKj1NYXRoLnBvdygxMCxzLmVuZC1uKSxhKz1lLGEvPU1hdGgucG93KDEwLHUpO3ZhciBmPWEudG9GaXhlZCh1KSxsPW5ldyBwKHQscy5zdGFydCx0LHMuZW5kKTt0aGlzLnNlc3Npb24ucmVwbGFjZShsLGYpLHRoaXMubW92ZUN1cnNvclRvKHQsTWF0aC5tYXgocy5zdGFydCsxLG4rZi5sZW5ndGgtcy52YWx1ZS5sZW5ndGgpKX19ZWxzZSB0aGlzLnRvZ2dsZVdvcmQoKX0sdGhpcy4kdG9nZ2xlV29yZFBhaXJzPVtbImZpcnN0IiwibGFzdCJdLFsidHJ1ZSIsImZhbHNlIl0sWyJ5ZXMiLCJubyJdLFsid2lkdGgiLCJoZWlnaHQiXSxbInRvcCIsImJvdHRvbSJdLFsicmlnaHQiLCJsZWZ0Il0sWyJvbiIsIm9mZiJdLFsieCIsInkiXSxbImdldCIsInNldCJdLFsibWF4IiwibWluIl0sWyJob3Jpem9udGFsIiwidmVydGljYWwiXSxbInNob3ciLCJoaWRlIl0sWyJhZGQiLCJyZW1vdmUiXSxbInVwIiwiZG93biJdLFsiYmVmb3JlIiwiYWZ0ZXIiXSxbImV2ZW4iLCJvZGQiXSxbImluc2lkZSIsIm91dHNpZGUiXSxbIm5leHQiLCJwcmV2aW91cyJdLFsiaW5jcmVhc2UiLCJkZWNyZWFzZSJdLFsiYXR0YWNoIiwiZGV0YWNoIl0sWyImJiIsInx8Il0sWyI9PSIsIiE9Il1dLHRoaXMudG9nZ2xlV29yZD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuc2VsZWN0aW9uLmdldEN1cnNvcigpLnJvdyx0PXRoaXMuc2VsZWN0aW9uLmdldEN1cnNvcigpLmNvbHVtbjt0aGlzLnNlbGVjdGlvbi5zZWxlY3RXb3JkKCk7dmFyIG49dGhpcy5nZXRTZWxlY3RlZFRleHQoKSxyPXRoaXMuc2VsZWN0aW9uLmdldFdvcmRSYW5nZSgpLnN0YXJ0LmNvbHVtbixpPW4ucmVwbGFjZSgvKFthLXpdK3xbQS1aXSspKD89W0EtWl9dfCQpL2csIiQxICIpLnNwbGl0KC9ccy8pLG89dC1yLTE7bzwwJiYobz0wKTt2YXIgdT0wLGE9MCxmPXRoaXM7bi5tYXRjaCgvW0EtWmEtejAtOV9dKy8pJiZpLmZvckVhY2goZnVuY3Rpb24odCxpKXthPXUrdC5sZW5ndGgsbz49dSYmbzw9YSYmKG49dCxmLnNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbigpLGYubW92ZUN1cnNvclRvKGUsdStyKSxmLnNlbGVjdGlvbi5zZWxlY3RUbyhlLGErcikpLHU9YX0pO3ZhciBsPXRoaXMuJHRvZ2dsZVdvcmRQYWlycyxjO2Zvcih2YXIgaD0wO2g8bC5sZW5ndGg7aCsrKXt2YXIgcD1sW2hdO2Zvcih2YXIgZD0wO2Q8PTE7ZCsrKXt2YXIgdj0rIWQsbT1uLm1hdGNoKG5ldyBSZWdFeHAoIl5cXHM/Xz8oIitzLmVzY2FwZVJlZ0V4cChwW2RdKSsiKVxccz8kIiwiaSIpKTtpZihtKXt2YXIgZz1uLm1hdGNoKG5ldyBSZWdFeHAoIihbX118XnxcXHMpKCIrcy5lc2NhcGVSZWdFeHAobVsxXSkrIikoJHxcXHMpIiwiZyIpKTtnJiYoYz1uLnJlcGxhY2UobmV3IFJlZ0V4cChzLmVzY2FwZVJlZ0V4cChwW2RdKSwiaSIpLGZ1bmN0aW9uKGUpe3ZhciB0PXBbdl07cmV0dXJuIGUudG9VcHBlckNhc2UoKT09ZT90PXQudG9VcHBlckNhc2UoKTplLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpPT1lLmNoYXJBdCgwKSYmKHQ9dC5zdWJzdHIoMCwwKStwW3ZdLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3Quc3Vic3RyKDEpKSx0fSksdGhpcy5pbnNlcnQoYyksYz0iIil9fX19LHRoaXMucmVtb3ZlTGluZXM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLiRnZXRTZWxlY3RlZFJvd3MoKTt0aGlzLnNlc3Npb24ucmVtb3ZlRnVsbExpbmVzKGUuZmlyc3QsZS5sYXN0KSx0aGlzLmNsZWFyU2VsZWN0aW9uKCl9LHRoaXMuZHVwbGljYXRlU2VsZWN0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zZWxlY3Rpb24sdD10aGlzLnNlc3Npb24sbj1lLmdldFJhbmdlKCkscj1lLmlzQmFja3dhcmRzKCk7aWYobi5pc0VtcHR5KCkpe3ZhciBpPW4uc3RhcnQucm93O3QuZHVwbGljYXRlTGluZXMoaSxpKX1lbHNle3ZhciBzPXI/bi5zdGFydDpuLmVuZCxvPXQuaW5zZXJ0KHMsdC5nZXRUZXh0UmFuZ2UobiksITEpO24uc3RhcnQ9cyxuLmVuZD1vLGUuc2V0U2VsZWN0aW9uUmFuZ2UobixyKX19LHRoaXMubW92ZUxpbmVzRG93bj1mdW5jdGlvbigpe3RoaXMuJG1vdmVMaW5lcygxLCExKX0sdGhpcy5tb3ZlTGluZXNVcD1mdW5jdGlvbigpe3RoaXMuJG1vdmVMaW5lcygtMSwhMSl9LHRoaXMubW92ZVRleHQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLnNlc3Npb24ubW92ZVRleHQoZSx0LG4pfSx0aGlzLmNvcHlMaW5lc1VwPWZ1bmN0aW9uKCl7dGhpcy4kbW92ZUxpbmVzKC0xLCEwKX0sdGhpcy5jb3B5TGluZXNEb3duPWZ1bmN0aW9uKCl7dGhpcy4kbW92ZUxpbmVzKDEsITApfSx0aGlzLiRtb3ZlTGluZXM9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGk9dGhpcy5zZWxlY3Rpb247aWYoIWkuaW5NdWx0aVNlbGVjdE1vZGV8fHRoaXMuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSl7dmFyIHM9aS50b09yaWVudGVkUmFuZ2UoKTtuPXRoaXMuJGdldFNlbGVjdGVkUm93cyhzKSxyPXRoaXMuc2Vzc2lvbi4kbW92ZUxpbmVzKG4uZmlyc3Qsbi5sYXN0LHQ/MDplKSx0JiZlPT0tMSYmKHI9MCkscy5tb3ZlQnkociwwKSxpLmZyb21PcmllbnRlZFJhbmdlKHMpfWVsc2V7dmFyIG89aS5yYW5nZUxpc3QucmFuZ2VzO2kucmFuZ2VMaXN0LmRldGFjaCh0aGlzLnNlc3Npb24pLHRoaXMuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZT0hMDt2YXIgdT0wLGE9MCxmPW8ubGVuZ3RoO2Zvcih2YXIgbD0wO2w8ZjtsKyspe3ZhciBjPWw7b1tsXS5tb3ZlQnkodSwwKSxuPXRoaXMuJGdldFNlbGVjdGVkUm93cyhvW2xdKTt2YXIgaD1uLmZpcnN0LHA9bi5sYXN0O3doaWxlKCsrbDxmKXthJiZvW2xdLm1vdmVCeShhLDApO3ZhciBkPXRoaXMuJGdldFNlbGVjdGVkUm93cyhvW2xdKTtpZih0JiZkLmZpcnN0IT1wKWJyZWFrO2lmKCF0JiZkLmZpcnN0PnArMSlicmVhaztwPWQubGFzdH1sLS0sdT10aGlzLnNlc3Npb24uJG1vdmVMaW5lcyhoLHAsdD8wOmUpLHQmJmU9PS0xJiYoYz1sKzEpO3doaWxlKGM8PWwpb1tjXS5tb3ZlQnkodSwwKSxjKys7dHx8KHU9MCksYSs9dX1pLmZyb21PcmllbnRlZFJhbmdlKGkucmFuZ2VzWzBdKSxpLnJhbmdlTGlzdC5hdHRhY2godGhpcy5zZXNzaW9uKSx0aGlzLmluVmlydHVhbFNlbGVjdGlvbk1vZGU9ITF9fSx0aGlzLiRnZXRTZWxlY3RlZFJvd3M9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9KGV8fHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSkuY29sbGFwc2VSb3dzKCkse2ZpcnN0OnRoaXMuc2Vzc2lvbi5nZXRSb3dGb2xkU3RhcnQoZS5zdGFydC5yb3cpLGxhc3Q6dGhpcy5zZXNzaW9uLmdldFJvd0ZvbGRFbmQoZS5lbmQucm93KX19LHRoaXMub25Db21wb3NpdGlvblN0YXJ0PWZ1bmN0aW9uKGUpe3RoaXMucmVuZGVyZXIuc2hvd0NvbXBvc2l0aW9uKGUpfSx0aGlzLm9uQ29tcG9zaXRpb25VcGRhdGU9ZnVuY3Rpb24oZSl7dGhpcy5yZW5kZXJlci5zZXRDb21wb3NpdGlvblRleHQoZSl9LHRoaXMub25Db21wb3NpdGlvbkVuZD1mdW5jdGlvbigpe3RoaXMucmVuZGVyZXIuaGlkZUNvbXBvc2l0aW9uKCl9LHRoaXMuZ2V0Rmlyc3RWaXNpYmxlUm93PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVuZGVyZXIuZ2V0Rmlyc3RWaXNpYmxlUm93KCl9LHRoaXMuZ2V0TGFzdFZpc2libGVSb3c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5nZXRMYXN0VmlzaWJsZVJvdygpfSx0aGlzLmlzUm93VmlzaWJsZT1mdW5jdGlvbihlKXtyZXR1cm4gZT49dGhpcy5nZXRGaXJzdFZpc2libGVSb3coKSYmZTw9dGhpcy5nZXRMYXN0VmlzaWJsZVJvdygpfSx0aGlzLmlzUm93RnVsbHlWaXNpYmxlPWZ1bmN0aW9uKGUpe3JldHVybiBlPj10aGlzLnJlbmRlcmVyLmdldEZpcnN0RnVsbHlWaXNpYmxlUm93KCkmJmU8PXRoaXMucmVuZGVyZXIuZ2V0TGFzdEZ1bGx5VmlzaWJsZVJvdygpfSx0aGlzLiRnZXRWaXNpYmxlUm93Q291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5nZXRTY3JvbGxCb3R0b21Sb3coKS10aGlzLnJlbmRlcmVyLmdldFNjcm9sbFRvcFJvdygpKzF9LHRoaXMuJG1vdmVCeVBhZ2U9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLnJlbmRlcmVyLHI9dGhpcy5yZW5kZXJlci5sYXllckNvbmZpZyxpPWUqTWF0aC5mbG9vcihyLmhlaWdodC9yLmxpbmVIZWlnaHQpO3Q9PT0hMD90aGlzLnNlbGVjdGlvbi4kbW92ZVNlbGVjdGlvbihmdW5jdGlvbigpe3RoaXMubW92ZUN1cnNvckJ5KGksMCl9KTp0PT09ITEmJih0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yQnkoaSwwKSx0aGlzLnNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbigpKTt2YXIgcz1uLnNjcm9sbFRvcDtuLnNjcm9sbEJ5KDAsaSpyLmxpbmVIZWlnaHQpLHQhPW51bGwmJm4uc2Nyb2xsQ3Vyc29ySW50b1ZpZXcobnVsbCwuNSksbi5hbmltYXRlU2Nyb2xsaW5nKHMpfSx0aGlzLnNlbGVjdFBhZ2VEb3duPWZ1bmN0aW9uKCl7dGhpcy4kbW92ZUJ5UGFnZSgxLCEwKX0sdGhpcy5zZWxlY3RQYWdlVXA9ZnVuY3Rpb24oKXt0aGlzLiRtb3ZlQnlQYWdlKC0xLCEwKX0sdGhpcy5nb3RvUGFnZURvd249ZnVuY3Rpb24oKXt0aGlzLiRtb3ZlQnlQYWdlKDEsITEpfSx0aGlzLmdvdG9QYWdlVXA9ZnVuY3Rpb24oKXt0aGlzLiRtb3ZlQnlQYWdlKC0xLCExKX0sdGhpcy5zY3JvbGxQYWdlRG93bj1mdW5jdGlvbigpe3RoaXMuJG1vdmVCeVBhZ2UoMSl9LHRoaXMuc2Nyb2xsUGFnZVVwPWZ1bmN0aW9uKCl7dGhpcy4kbW92ZUJ5UGFnZSgtMSl9LHRoaXMuc2Nyb2xsVG9Sb3c9ZnVuY3Rpb24oZSl7dGhpcy5yZW5kZXJlci5zY3JvbGxUb1JvdyhlKX0sdGhpcy5zY3JvbGxUb0xpbmU9ZnVuY3Rpb24oZSx0LG4scil7dGhpcy5yZW5kZXJlci5zY3JvbGxUb0xpbmUoZSx0LG4scil9LHRoaXMuY2VudGVyU2VsZWN0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpLHQ9e3JvdzpNYXRoLmZsb29yKGUuc3RhcnQucm93KyhlLmVuZC5yb3ctZS5zdGFydC5yb3cpLzIpLGNvbHVtbjpNYXRoLmZsb29yKGUuc3RhcnQuY29sdW1uKyhlLmVuZC5jb2x1bW4tZS5zdGFydC5jb2x1bW4pLzIpfTt0aGlzLnJlbmRlcmVyLmFsaWduQ3Vyc29yKHQsLjUpfSx0aGlzLmdldEN1cnNvclBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uLmdldEN1cnNvcigpfSx0aGlzLmdldEN1cnNvclBvc2l0aW9uU2NyZWVuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24odGhpcy5nZXRDdXJzb3JQb3NpdGlvbigpKX0sdGhpcy5nZXRTZWxlY3Rpb25SYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGlvbi5nZXRSYW5nZSgpfSx0aGlzLnNlbGVjdEFsbD1mdW5jdGlvbigpe3RoaXMuc2VsZWN0aW9uLnNlbGVjdEFsbCgpfSx0aGlzLmNsZWFyU2VsZWN0aW9uPWZ1bmN0aW9uKCl7dGhpcy5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKX0sdGhpcy5tb3ZlQ3Vyc29yVG89ZnVuY3Rpb24oZSx0KXt0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yVG8oZSx0KX0sdGhpcy5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbj1mdW5jdGlvbihlKXt0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihlKX0sdGhpcy5qdW1wVG9NYXRjaGluZz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oKSxyPW5ldyB5KHRoaXMuc2Vzc2lvbixuLnJvdyxuLmNvbHVtbiksaT1yLmdldEN1cnJlbnRUb2tlbigpLHM9aXx8ci5zdGVwRm9yd2FyZCgpO2lmKCFzKXJldHVybjt2YXIgbyx1PSExLGE9e30sZj1uLmNvbHVtbi1zLnN0YXJ0LGwsYz17IikiOiIoIiwiKCI6IigiLCJdIjoiWyIsIlsiOiJbIiwieyI6InsiLCJ9IjoieyJ9O2Rve2lmKHMudmFsdWUubWF0Y2goL1t7fSgpXFtcXV0vZykpZm9yKDtmPHMudmFsdWUubGVuZ3RoJiYhdTtmKyspe2lmKCFjW3MudmFsdWVbZl1dKWNvbnRpbnVlO2w9Y1tzLnZhbHVlW2ZdXSsiLiIrcy50eXBlLnJlcGxhY2UoInJwYXJlbiIsImxwYXJlbiIpLGlzTmFOKGFbbF0pJiYoYVtsXT0wKTtzd2l0Y2gocy52YWx1ZVtmXSl7Y2FzZSIoIjpjYXNlIlsiOmNhc2UieyI6YVtsXSsrO2JyZWFrO2Nhc2UiKSI6Y2FzZSJdIjpjYXNlIn0iOmFbbF0tLSxhW2xdPT09LTEmJihvPSJicmFja2V0Iix1PSEwKX19ZWxzZSBzLnR5cGUuaW5kZXhPZigidGFnLW5hbWUiKSE9PS0xJiYoaXNOYU4oYVtzLnZhbHVlXSkmJihhW3MudmFsdWVdPTApLGkudmFsdWU9PT0iPCI/YVtzLnZhbHVlXSsrOmkudmFsdWU9PT0iPC8iJiZhW3MudmFsdWVdLS0sYVtzLnZhbHVlXT09PS0xJiYobz0idGFnIix1PSEwKSk7dXx8KGk9cyxzPXIuc3RlcEZvcndhcmQoKSxmPTApfXdoaWxlKHMmJiF1KTtpZighbylyZXR1cm47dmFyIGgsZDtpZihvPT09ImJyYWNrZXQiKXtoPXRoaXMuc2Vzc2lvbi5nZXRCcmFja2V0UmFuZ2Uobik7aWYoIWgpe2g9bmV3IHAoci5nZXRDdXJyZW50VG9rZW5Sb3coKSxyLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpK2YtMSxyLmdldEN1cnJlbnRUb2tlblJvdygpLHIuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkrZi0xKSxkPWguc3RhcnQ7aWYodHx8ZC5yb3c9PT1uLnJvdyYmTWF0aC5hYnMoZC5jb2x1bW4tbi5jb2x1bW4pPDIpaD10aGlzLnNlc3Npb24uZ2V0QnJhY2tldFJhbmdlKGQpfX1lbHNlIGlmKG89PT0idGFnIil7aWYoIXN8fHMudHlwZS5pbmRleE9mKCJ0YWctbmFtZSIpPT09LTEpcmV0dXJuO3ZhciB2PXMudmFsdWU7aD1uZXcgcChyLmdldEN1cnJlbnRUb2tlblJvdygpLHIuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCktMixyLmdldEN1cnJlbnRUb2tlblJvdygpLHIuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCktMik7aWYoaC5jb21wYXJlKG4ucm93LG4uY29sdW1uKT09PTApe3U9ITE7ZG8gcz1pLGk9ci5zdGVwQmFja3dhcmQoKSxpJiYoaS50eXBlLmluZGV4T2YoInRhZy1jbG9zZSIpIT09LTEmJmguc2V0RW5kKHIuZ2V0Q3VycmVudFRva2VuUm93KCksci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSsxKSxzLnZhbHVlPT09diYmcy50eXBlLmluZGV4T2YoInRhZy1uYW1lIikhPT0tMSYmKGkudmFsdWU9PT0iPCI/YVt2XSsrOmkudmFsdWU9PT0iPC8iJiZhW3ZdLS0sYVt2XT09PTAmJih1PSEwKSkpO3doaWxlKGkmJiF1KX1zJiZzLnR5cGUuaW5kZXhPZigidGFnLW5hbWUiKSYmKGQ9aC5zdGFydCxkLnJvdz09bi5yb3cmJk1hdGguYWJzKGQuY29sdW1uLW4uY29sdW1uKTwyJiYoZD1oLmVuZCkpfWQ9aCYmaC5jdXJzb3J8fGQsZCYmKGU/aCYmdD90aGlzLnNlbGVjdGlvbi5zZXRSYW5nZShoKTpoJiZoLmlzRXF1YWwodGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpKT90aGlzLmNsZWFyU2VsZWN0aW9uKCk6dGhpcy5zZWxlY3Rpb24uc2VsZWN0VG8oZC5yb3csZC5jb2x1bW4pOnRoaXMuc2VsZWN0aW9uLm1vdmVUbyhkLnJvdyxkLmNvbHVtbikpfSx0aGlzLmdvdG9MaW5lPWZ1bmN0aW9uKGUsdCxuKXt0aGlzLnNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbigpLHRoaXMuc2Vzc2lvbi51bmZvbGQoe3JvdzplLTEsY29sdW1uOnR8fDB9KSx0aGlzLmV4aXRNdWx0aVNlbGVjdE1vZGUmJnRoaXMuZXhpdE11bHRpU2VsZWN0TW9kZSgpLHRoaXMubW92ZUN1cnNvclRvKGUtMSx0fHwwKSx0aGlzLmlzUm93RnVsbHlWaXNpYmxlKGUtMSl8fHRoaXMuc2Nyb2xsVG9MaW5lKGUtMSwhMCxuKX0sdGhpcy5uYXZpZ2F0ZVRvPWZ1bmN0aW9uKGUsdCl7dGhpcy5zZWxlY3Rpb24ubW92ZVRvKGUsdCl9LHRoaXMubmF2aWdhdGVVcD1mdW5jdGlvbihlKXtpZih0aGlzLnNlbGVjdGlvbi5pc011bHRpTGluZSgpJiYhdGhpcy5zZWxlY3Rpb24uaXNCYWNrd2FyZHMoKSl7dmFyIHQ9dGhpcy5zZWxlY3Rpb24uYW5jaG9yLmdldFBvc2l0aW9uKCk7cmV0dXJuIHRoaXMubW92ZUN1cnNvclRvUG9zaXRpb24odCl9dGhpcy5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKSx0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yQnkoLWV8fC0xLDApfSx0aGlzLm5hdmlnYXRlRG93bj1mdW5jdGlvbihlKXtpZih0aGlzLnNlbGVjdGlvbi5pc011bHRpTGluZSgpJiZ0aGlzLnNlbGVjdGlvbi5pc0JhY2t3YXJkcygpKXt2YXIgdD10aGlzLnNlbGVjdGlvbi5hbmNob3IuZ2V0UG9zaXRpb24oKTtyZXR1cm4gdGhpcy5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbih0KX10aGlzLnNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbigpLHRoaXMuc2VsZWN0aW9uLm1vdmVDdXJzb3JCeShlfHwxLDApfSx0aGlzLm5hdmlnYXRlTGVmdD1mdW5jdGlvbihlKXtpZighdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKXt2YXIgdD10aGlzLmdldFNlbGVjdGlvblJhbmdlKCkuc3RhcnQ7dGhpcy5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbih0KX1lbHNle2U9ZXx8MTt3aGlsZShlLS0pdGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNvckxlZnQoKX10aGlzLmNsZWFyU2VsZWN0aW9uKCl9LHRoaXMubmF2aWdhdGVSaWdodD1mdW5jdGlvbihlKXtpZighdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKXt2YXIgdD10aGlzLmdldFNlbGVjdGlvblJhbmdlKCkuZW5kO3RoaXMubW92ZUN1cnNvclRvUG9zaXRpb24odCl9ZWxzZXtlPWV8fDE7d2hpbGUoZS0tKXRoaXMuc2VsZWN0aW9uLm1vdmVDdXJzb3JSaWdodCgpfXRoaXMuY2xlYXJTZWxlY3Rpb24oKX0sdGhpcy5uYXZpZ2F0ZUxpbmVTdGFydD1mdW5jdGlvbigpe3RoaXMuc2VsZWN0aW9uLm1vdmVDdXJzb3JMaW5lU3RhcnQoKSx0aGlzLmNsZWFyU2VsZWN0aW9uKCl9LHRoaXMubmF2aWdhdGVMaW5lRW5kPWZ1bmN0aW9uKCl7dGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNvckxpbmVFbmQoKSx0aGlzLmNsZWFyU2VsZWN0aW9uKCl9LHRoaXMubmF2aWdhdGVGaWxlRW5kPWZ1bmN0aW9uKCl7dGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNvckZpbGVFbmQoKSx0aGlzLmNsZWFyU2VsZWN0aW9uKCl9LHRoaXMubmF2aWdhdGVGaWxlU3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yRmlsZVN0YXJ0KCksdGhpcy5jbGVhclNlbGVjdGlvbigpfSx0aGlzLm5hdmlnYXRlV29yZFJpZ2h0PWZ1bmN0aW9uKCl7dGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNvcldvcmRSaWdodCgpLHRoaXMuY2xlYXJTZWxlY3Rpb24oKX0sdGhpcy5uYXZpZ2F0ZVdvcmRMZWZ0PWZ1bmN0aW9uKCl7dGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNvcldvcmRMZWZ0KCksdGhpcy5jbGVhclNlbGVjdGlvbigpfSx0aGlzLnJlcGxhY2U9ZnVuY3Rpb24oZSx0KXt0JiZ0aGlzLiRzZWFyY2guc2V0KHQpO3ZhciBuPXRoaXMuJHNlYXJjaC5maW5kKHRoaXMuc2Vzc2lvbikscj0wO3JldHVybiBuPyh0aGlzLiR0cnlSZXBsYWNlKG4sZSkmJihyPTEpLHRoaXMuc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKG4pLHRoaXMucmVuZGVyZXIuc2Nyb2xsU2VsZWN0aW9uSW50b1ZpZXcobi5zdGFydCxuLmVuZCkscik6cn0sdGhpcy5yZXBsYWNlQWxsPWZ1bmN0aW9uKGUsdCl7dCYmdGhpcy4kc2VhcmNoLnNldCh0KTt2YXIgbj10aGlzLiRzZWFyY2guZmluZEFsbCh0aGlzLnNlc3Npb24pLHI9MDtpZighbi5sZW5ndGgpcmV0dXJuIHI7dmFyIGk9dGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpO3RoaXMuc2VsZWN0aW9uLm1vdmVUbygwLDApO2Zvcih2YXIgcz1uLmxlbmd0aC0xO3M+PTA7LS1zKXRoaXMuJHRyeVJlcGxhY2UobltzXSxlKSYmcisrO3JldHVybiB0aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZShpKSxyfSx0aGlzLiR0cnlSZXBsYWNlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5zZXNzaW9uLmdldFRleHRSYW5nZShlKTtyZXR1cm4gdD10aGlzLiRzZWFyY2gucmVwbGFjZShuLHQpLHQhPT1udWxsPyhlLmVuZD10aGlzLnNlc3Npb24ucmVwbGFjZShlLHQpLGUpOm51bGx9LHRoaXMuZ2V0TGFzdFNlYXJjaE9wdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kc2VhcmNoLmdldE9wdGlvbnMoKX0sdGhpcy5maW5kPWZ1bmN0aW9uKGUsdCxuKXt0fHwodD17fSksdHlwZW9mIGU9PSJzdHJpbmcifHxlIGluc3RhbmNlb2YgUmVnRXhwP3QubmVlZGxlPWU6dHlwZW9mIGU9PSJvYmplY3QiJiZyLm1peGluKHQsZSk7dmFyIGk9dGhpcy5zZWxlY3Rpb24uZ2V0UmFuZ2UoKTt0Lm5lZWRsZT09bnVsbCYmKGU9dGhpcy5zZXNzaW9uLmdldFRleHRSYW5nZShpKXx8dGhpcy4kc2VhcmNoLiRvcHRpb25zLm5lZWRsZSxlfHwoaT10aGlzLnNlc3Npb24uZ2V0V29yZFJhbmdlKGkuc3RhcnQucm93LGkuc3RhcnQuY29sdW1uKSxlPXRoaXMuc2Vzc2lvbi5nZXRUZXh0UmFuZ2UoaSkpLHRoaXMuJHNlYXJjaC5zZXQoe25lZWRsZTplfSkpLHRoaXMuJHNlYXJjaC5zZXQodCksdC5zdGFydHx8dGhpcy4kc2VhcmNoLnNldCh7c3RhcnQ6aX0pO3ZhciBzPXRoaXMuJHNlYXJjaC5maW5kKHRoaXMuc2Vzc2lvbik7aWYodC5wcmV2ZW50U2Nyb2xsKXJldHVybiBzO2lmKHMpcmV0dXJuIHRoaXMucmV2ZWFsUmFuZ2UocyxuKSxzO3QuYmFja3dhcmRzP2kuc3RhcnQ9aS5lbmQ6aS5lbmQ9aS5zdGFydCx0aGlzLnNlbGVjdGlvbi5zZXRSYW5nZShpKX0sdGhpcy5maW5kTmV4dD1mdW5jdGlvbihlLHQpe3RoaXMuZmluZCh7c2tpcEN1cnJlbnQ6ITAsYmFja3dhcmRzOiExfSxlLHQpfSx0aGlzLmZpbmRQcmV2aW91cz1mdW5jdGlvbihlLHQpe3RoaXMuZmluZChlLHtza2lwQ3VycmVudDohMCxiYWNrd2FyZHM6ITB9LHQpfSx0aGlzLnJldmVhbFJhbmdlPWZ1bmN0aW9uKGUsdCl7dGhpcy5zZXNzaW9uLnVuZm9sZChlKSx0aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZShlKTt2YXIgbj10aGlzLnJlbmRlcmVyLnNjcm9sbFRvcDt0aGlzLnJlbmRlcmVyLnNjcm9sbFNlbGVjdGlvbkludG9WaWV3KGUuc3RhcnQsZS5lbmQsLjUpLHQhPT0hMSYmdGhpcy5yZW5kZXJlci5hbmltYXRlU2Nyb2xsaW5nKG4pfSx0aGlzLnVuZG89ZnVuY3Rpb24oKXt0aGlzLnNlc3Npb24uZ2V0VW5kb01hbmFnZXIoKS51bmRvKHRoaXMuc2Vzc2lvbiksdGhpcy5yZW5kZXJlci5zY3JvbGxDdXJzb3JJbnRvVmlldyhudWxsLC41KX0sdGhpcy5yZWRvPWZ1bmN0aW9uKCl7dGhpcy5zZXNzaW9uLmdldFVuZG9NYW5hZ2VyKCkucmVkbyh0aGlzLnNlc3Npb24pLHRoaXMucmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcobnVsbCwuNSl9LHRoaXMuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMucmVuZGVyZXIuZGVzdHJveSgpLHRoaXMuX3NpZ25hbCgiZGVzdHJveSIsdGhpcyksdGhpcy5zZXNzaW9uJiZ0aGlzLnNlc3Npb24uZGVzdHJveSgpfSx0aGlzLnNldEF1dG9TY3JvbGxFZGl0b3JJbnRvVmlldz1mdW5jdGlvbihlKXtpZighZSlyZXR1cm47dmFyIHQsbj10aGlzLHI9ITE7dGhpcy4kc2Nyb2xsQW5jaG9yfHwodGhpcy4kc2Nyb2xsQW5jaG9yPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKTt2YXIgaT10aGlzLiRzY3JvbGxBbmNob3I7aS5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjphYnNvbHV0ZSIsdGhpcy5jb250YWluZXIuaW5zZXJ0QmVmb3JlKGksdGhpcy5jb250YWluZXIuZmlyc3RDaGlsZCk7dmFyIHM9dGhpcy5vbigiY2hhbmdlU2VsZWN0aW9uIixmdW5jdGlvbigpe3I9ITB9KSxvPXRoaXMucmVuZGVyZXIub24oImJlZm9yZVJlbmRlciIsZnVuY3Rpb24oKXtyJiYodD1uLnJlbmRlcmVyLmNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSl9KSx1PXRoaXMucmVuZGVyZXIub24oImFmdGVyUmVuZGVyIixmdW5jdGlvbigpe2lmKHImJnQmJihuLmlzRm9jdXNlZCgpfHxuLnNlYXJjaEJveCYmbi5zZWFyY2hCb3guaXNGb2N1c2VkKCkpKXt2YXIgZT1uLnJlbmRlcmVyLHM9ZS4kY3Vyc29yTGF5ZXIuJHBpeGVsUG9zLG89ZS5sYXllckNvbmZpZyx1PXMudG9wLW8ub2Zmc2V0O3MudG9wPj0wJiZ1K3QudG9wPDA/cj0hMDpzLnRvcDxvLmhlaWdodCYmcy50b3ArdC50b3Arby5saW5lSGVpZ2h0PndpbmRvdy5pbm5lckhlaWdodD9yPSExOnI9bnVsbCxyIT1udWxsJiYoaS5zdHlsZS50b3A9dSsicHgiLGkuc3R5bGUubGVmdD1zLmxlZnQrInB4IixpLnN0eWxlLmhlaWdodD1vLmxpbmVIZWlnaHQrInB4IixpLnNjcm9sbEludG9WaWV3KHIpKSxyPXQ9bnVsbH19KTt0aGlzLnNldEF1dG9TY3JvbGxFZGl0b3JJbnRvVmlldz1mdW5jdGlvbihlKXtpZihlKXJldHVybjtkZWxldGUgdGhpcy5zZXRBdXRvU2Nyb2xsRWRpdG9ySW50b1ZpZXcsdGhpcy5vZmYoImNoYW5nZVNlbGVjdGlvbiIscyksdGhpcy5yZW5kZXJlci5vZmYoImFmdGVyUmVuZGVyIix1KSx0aGlzLnJlbmRlcmVyLm9mZigiYmVmb3JlUmVuZGVyIixvKX19LHRoaXMuJHJlc2V0Q3Vyc29yU3R5bGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLiRjdXJzb3JTdHlsZXx8ImFjZSIsdD10aGlzLnJlbmRlcmVyLiRjdXJzb3JMYXllcjtpZighdClyZXR1cm47dC5zZXRTbW9vdGhCbGlua2luZygvc21vb3RoLy50ZXN0KGUpKSx0LmlzQmxpbmtpbmc9IXRoaXMuJHJlYWRPbmx5JiZlIT0id2lkZSIsaS5zZXRDc3NDbGFzcyh0LmVsZW1lbnQsImFjZV9zbGltLWN1cnNvcnMiLC9zbGltLy50ZXN0KGUpKX0sdGhpcy5wcm9tcHQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXM7Zy5sb2FkTW9kdWxlKCIuL2V4dC9wcm9tcHQiLGZ1bmN0aW9uKGkpe2kucHJvbXB0KHIsZSx0LG4pfSl9fS5jYWxsKHcucHJvdG90eXBlKSxnLmRlZmluZU9wdGlvbnMody5wcm90b3R5cGUsImVkaXRvciIse3NlbGVjdGlvblN0eWxlOntzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpLHRoaXMuX3NpZ25hbCgiY2hhbmdlU2VsZWN0aW9uU3R5bGUiLHtkYXRhOmV9KX0saW5pdGlhbFZhbHVlOiJsaW5lIn0saGlnaGxpZ2h0QWN0aXZlTGluZTp7c2V0OmZ1bmN0aW9uKCl7dGhpcy4kdXBkYXRlSGlnaGxpZ2h0QWN0aXZlTGluZSgpfSxpbml0aWFsVmFsdWU6ITB9LGhpZ2hsaWdodFNlbGVjdGVkV29yZDp7c2V0OmZ1bmN0aW9uKGUpe3RoaXMuJG9uU2VsZWN0aW9uQ2hhbmdlKCl9LGluaXRpYWxWYWx1ZTohMH0scmVhZE9ubHk6e3NldDpmdW5jdGlvbihlKXt0aGlzLnRleHRJbnB1dC5zZXRSZWFkT25seShlKSx0aGlzLiRyZXNldEN1cnNvclN0eWxlKCl9LGluaXRpYWxWYWx1ZTohMX0sY29weVdpdGhFbXB0eVNlbGVjdGlvbjp7c2V0OmZ1bmN0aW9uKGUpe3RoaXMudGV4dElucHV0LnNldENvcHlXaXRoRW1wdHlTZWxlY3Rpb24oZSl9LGluaXRpYWxWYWx1ZTohMX0sY3Vyc29yU3R5bGU6e3NldDpmdW5jdGlvbihlKXt0aGlzLiRyZXNldEN1cnNvclN0eWxlKCl9LHZhbHVlczpbImFjZSIsInNsaW0iLCJzbW9vdGgiLCJ3aWRlIl0saW5pdGlhbFZhbHVlOiJhY2UifSxtZXJnZVVuZG9EZWx0YXM6e3ZhbHVlczpbITEsITAsImFsd2F5cyJdLGluaXRpYWxWYWx1ZTohMH0sYmVoYXZpb3Vyc0VuYWJsZWQ6e2luaXRpYWxWYWx1ZTohMH0sd3JhcEJlaGF2aW91cnNFbmFibGVkOntpbml0aWFsVmFsdWU6ITB9LGF1dG9TY3JvbGxFZGl0b3JJbnRvVmlldzp7c2V0OmZ1bmN0aW9uKGUpe3RoaXMuc2V0QXV0b1Njcm9sbEVkaXRvckludG9WaWV3KGUpfX0sa2V5Ym9hcmRIYW5kbGVyOntzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5zZXRLZXlib2FyZEhhbmRsZXIoZSl9LGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRrZXliaW5kaW5nSWR9LGhhbmRsZXNTZXQ6ITB9LHZhbHVlOntzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5zZXNzaW9uLnNldFZhbHVlKGUpfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRWYWx1ZSgpfSxoYW5kbGVzU2V0OiEwLGhpZGRlbjohMH0sc2Vzc2lvbjp7c2V0OmZ1bmN0aW9uKGUpe3RoaXMuc2V0U2Vzc2lvbihlKX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2Vzc2lvbn0saGFuZGxlc1NldDohMCxoaWRkZW46ITB9LHNob3dMaW5lTnVtYmVyczp7c2V0OmZ1bmN0aW9uKGUpe3RoaXMucmVuZGVyZXIuJGd1dHRlckxheWVyLnNldFNob3dMaW5lTnVtYmVycyhlKSx0aGlzLnJlbmRlcmVyLiRsb29wLnNjaGVkdWxlKHRoaXMucmVuZGVyZXIuQ0hBTkdFX0dVVFRFUiksZSYmdGhpcy4kcmVsYXRpdmVMaW5lTnVtYmVycz9FLmF0dGFjaCh0aGlzKTpFLmRldGFjaCh0aGlzKX0saW5pdGlhbFZhbHVlOiEwfSxyZWxhdGl2ZUxpbmVOdW1iZXJzOntzZXQ6ZnVuY3Rpb24oZSl7dGhpcy4kc2hvd0xpbmVOdW1iZXJzJiZlP0UuYXR0YWNoKHRoaXMpOkUuZGV0YWNoKHRoaXMpfX0saFNjcm9sbEJhckFsd2F5c1Zpc2libGU6InJlbmRlcmVyIix2U2Nyb2xsQmFyQWx3YXlzVmlzaWJsZToicmVuZGVyZXIiLGhpZ2hsaWdodEd1dHRlckxpbmU6InJlbmRlcmVyIixhbmltYXRlZFNjcm9sbDoicmVuZGVyZXIiLHNob3dJbnZpc2libGVzOiJyZW5kZXJlciIsc2hvd1ByaW50TWFyZ2luOiJyZW5kZXJlciIscHJpbnRNYXJnaW5Db2x1bW46InJlbmRlcmVyIixwcmludE1hcmdpbjoicmVuZGVyZXIiLGZhZGVGb2xkV2lkZ2V0czoicmVuZGVyZXIiLHNob3dGb2xkV2lkZ2V0czoicmVuZGVyZXIiLGRpc3BsYXlJbmRlbnRHdWlkZXM6InJlbmRlcmVyIixzaG93R3V0dGVyOiJyZW5kZXJlciIsZm9udFNpemU6InJlbmRlcmVyIixmb250RmFtaWx5OiJyZW5kZXJlciIsbWF4TGluZXM6InJlbmRlcmVyIixtaW5MaW5lczoicmVuZGVyZXIiLHNjcm9sbFBhc3RFbmQ6InJlbmRlcmVyIixmaXhlZFdpZHRoR3V0dGVyOiJyZW5kZXJlciIsdGhlbWU6InJlbmRlcmVyIixoYXNDc3NUcmFuc2Zvcm1zOiJyZW5kZXJlciIsbWF4UGl4ZWxIZWlnaHQ6InJlbmRlcmVyIix1c2VUZXh0YXJlYUZvcklNRToicmVuZGVyZXIiLHNjcm9sbFNwZWVkOiIkbW91c2VIYW5kbGVyIixkcmFnRGVsYXk6IiRtb3VzZUhhbmRsZXIiLGRyYWdFbmFibGVkOiIkbW91c2VIYW5kbGVyIixmb2N1c1RpbWVvdXQ6IiRtb3VzZUhhbmRsZXIiLHRvb2x0aXBGb2xsb3dzTW91c2U6IiRtb3VzZUhhbmRsZXIiLGZpcnN0TGluZU51bWJlcjoic2Vzc2lvbiIsb3ZlcndyaXRlOiJzZXNzaW9uIixuZXdMaW5lTW9kZToic2Vzc2lvbiIsdXNlV29ya2VyOiJzZXNzaW9uIix1c2VTb2Z0VGFiczoic2Vzc2lvbiIsbmF2aWdhdGVXaXRoaW5Tb2Z0VGFiczoic2Vzc2lvbiIsdGFiU2l6ZToic2Vzc2lvbiIsd3JhcDoic2Vzc2lvbiIsaW5kZW50ZWRTb2Z0V3JhcDoic2Vzc2lvbiIsZm9sZFN0eWxlOiJzZXNzaW9uIixtb2RlOiJzZXNzaW9uIn0pO3ZhciBFPXtnZXRUZXh0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuKE1hdGguYWJzKGUuc2VsZWN0aW9uLmxlYWQucm93LXQpfHx0KzErKHQ8OT8iXHUwMGI3IjoiIikpKyIifSxnZXRXaWR0aDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIE1hdGgubWF4KHQudG9TdHJpbmcoKS5sZW5ndGgsKG4ubGFzdFJvdysxKS50b1N0cmluZygpLmxlbmd0aCwyKSpuLmNoYXJhY3RlcldpZHRofSx1cGRhdGU6ZnVuY3Rpb24oZSx0KXt0LnJlbmRlcmVyLiRsb29wLnNjaGVkdWxlKHQucmVuZGVyZXIuQ0hBTkdFX0dVVFRFUil9LGF0dGFjaDpmdW5jdGlvbihlKXtlLnJlbmRlcmVyLiRndXR0ZXJMYXllci4kcmVuZGVyZXI9dGhpcyxlLm9uKCJjaGFuZ2VTZWxlY3Rpb24iLHRoaXMudXBkYXRlKSx0aGlzLnVwZGF0ZShudWxsLGUpfSxkZXRhY2g6ZnVuY3Rpb24oZSl7ZS5yZW5kZXJlci4kZ3V0dGVyTGF5ZXIuJHJlbmRlcmVyPT10aGlzJiYoZS5yZW5kZXJlci4kZ3V0dGVyTGF5ZXIuJHJlbmRlcmVyPW51bGwpLGUub2ZmKCJjaGFuZ2VTZWxlY3Rpb24iLHRoaXMudXBkYXRlKSx0aGlzLnVwZGF0ZShudWxsLGUpfX07dC5FZGl0b3I9d30pLGFjZS5kZWZpbmUoImFjZS91bmRvbWFuYWdlciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gaShlLHQpe2Zvcih2YXIgbj10O24tLTspe3ZhciByPWVbbl07aWYociYmIXJbMF0uaWdub3JlKXt3aGlsZShuPHQtMSl7dmFyIGk9ZChlW25dLGVbbisxXSk7ZVtuXT1pWzBdLGVbbisxXT1pWzFdLG4rK31yZXR1cm4hMH19fWZ1bmN0aW9uIGEoZSl7dmFyIHQ9ZS5hY3Rpb249PSJpbnNlcnQiLG49ZS5zdGFydCxyPWUuZW5kLGk9KHIucm93LW4ucm93KSoodD8xOi0xKSxzPShyLmNvbHVtbi1uLmNvbHVtbikqKHQ/MTotMSk7dCYmKHI9bik7Zm9yKHZhciBvIGluIHRoaXMubWFya3Mpe3ZhciBhPXRoaXMubWFya3Nbb10sZj11KGEsbik7aWYoZjwwKWNvbnRpbnVlO2lmKGY9PT0wJiZ0KXtpZihhLmJpYXMhPTEpe2EuYmlhcz09LTE7Y29udGludWV9Zj0xfXZhciBsPXQ/Zjp1KGEscik7aWYobD4wKXthLnJvdys9aSxhLmNvbHVtbis9YS5yb3c9PXIucm93P3M6MDtjb250aW51ZX0hdCYmbDw9MCYmKGEucm93PW4ucm93LGEuY29sdW1uPW4uY29sdW1uLGw9PT0wJiYoYS5iaWFzPTEpKX19ZnVuY3Rpb24gZihlKXtyZXR1cm57cm93OmUucm93LGNvbHVtbjplLmNvbHVtbn19ZnVuY3Rpb24gbChlKXtyZXR1cm57c3RhcnQ6ZihlLnN0YXJ0KSxlbmQ6ZihlLmVuZCksYWN0aW9uOmUuYWN0aW9uLGxpbmVzOmUubGluZXMuc2xpY2UoKX19ZnVuY3Rpb24gYyhlKXtlPWV8fHRoaXM7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZS5tYXAoYykuam9pbigiXG4iKTt2YXIgdD0iIjtlLmFjdGlvbj8odD1lLmFjdGlvbj09Imluc2VydCI/IisiOiItIix0Kz0iWyIrZS5saW5lcysiXSIpOmUudmFsdWUmJihBcnJheS5pc0FycmF5KGUudmFsdWUpP3Q9ZS52YWx1ZS5tYXAoaCkuam9pbigiXG4iKTp0PWgoZS52YWx1ZSkpLGUuc3RhcnQmJih0Kz1oKGUpKTtpZihlLmlkfHxlLnJldil0Kz0iCSgiKyhlLmlkfHxlLnJldikrIikiO3JldHVybiB0fWZ1bmN0aW9uIGgoZSl7cmV0dXJuIGUuc3RhcnQucm93KyI6IitlLnN0YXJ0LmNvbHVtbisiPT4iK2UuZW5kLnJvdysiOiIrZS5lbmQuY29sdW1ufWZ1bmN0aW9uIHAoZSx0KXt2YXIgbj1lLmFjdGlvbj09Imluc2VydCIscj10LmFjdGlvbj09Imluc2VydCI7aWYobiYmcilpZihvKHQuc3RhcnQsZS5lbmQpPj0wKW0odCxlLC0xKTtlbHNle2lmKCEobyh0LnN0YXJ0LGUuc3RhcnQpPD0wKSlyZXR1cm4gbnVsbDttKGUsdCwxKX1lbHNlIGlmKG4mJiFyKWlmKG8odC5zdGFydCxlLmVuZCk+PTApbSh0LGUsLTEpO2Vsc2V7aWYoIShvKHQuZW5kLGUuc3RhcnQpPD0wKSlyZXR1cm4gbnVsbDttKGUsdCwtMSl9ZWxzZSBpZighbiYmcilpZihvKHQuc3RhcnQsZS5zdGFydCk+PTApbSh0LGUsMSk7ZWxzZXtpZighKG8odC5zdGFydCxlLnN0YXJ0KTw9MCkpcmV0dXJuIG51bGw7bShlLHQsMSl9ZWxzZSBpZighbiYmIXIpaWYobyh0LnN0YXJ0LGUuc3RhcnQpPj0wKW0odCxlLDEpO2Vsc2V7aWYoIShvKHQuZW5kLGUuc3RhcnQpPD0wKSlyZXR1cm4gbnVsbDttKGUsdCwtMSl9cmV0dXJuW3QsZV19ZnVuY3Rpb24gZChlLHQpe2Zvcih2YXIgbj1lLmxlbmd0aDtuLS07KWZvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWlmKCFwKGVbbl0sdFtyXSkpe3doaWxlKG48ZS5sZW5ndGgpe3doaWxlKHItLSlwKHRbcl0sZVtuXSk7cj10Lmxlbmd0aCxuKyt9cmV0dXJuW2UsdF19cmV0dXJuIGUuc2VsZWN0aW9uQmVmb3JlPXQuc2VsZWN0aW9uQmVmb3JlPWUuc2VsZWN0aW9uQWZ0ZXI9dC5zZWxlY3Rpb25BZnRlcj1udWxsLFt0LGVdfWZ1bmN0aW9uIHYoZSx0KXt2YXIgbj1lLmFjdGlvbj09Imluc2VydCIscj10LmFjdGlvbj09Imluc2VydCI7aWYobiYmcilvKGUuc3RhcnQsdC5zdGFydCk8MD9tKHQsZSwxKTptKGUsdCwxKTtlbHNlIGlmKG4mJiFyKW8oZS5zdGFydCx0LmVuZCk+PTA/bShlLHQsLTEpOm8oZS5zdGFydCx0LnN0YXJ0KTw9MD9tKHQsZSwxKToobShlLHMuZnJvbVBvaW50cyh0LnN0YXJ0LGUuc3RhcnQpLC0xKSxtKHQsZSwxKSk7ZWxzZSBpZighbiYmcilvKHQuc3RhcnQsZS5lbmQpPj0wP20odCxlLC0xKTpvKHQuc3RhcnQsZS5zdGFydCk8PTA/bShlLHQsMSk6KG0odCxzLmZyb21Qb2ludHMoZS5zdGFydCx0LnN0YXJ0KSwtMSksbShlLHQsMSkpO2Vsc2UgaWYoIW4mJiFyKWlmKG8odC5zdGFydCxlLmVuZCk+PTApbSh0LGUsLTEpO2Vsc2V7aWYoIShvKHQuZW5kLGUuc3RhcnQpPD0wKSl7dmFyIGksdTtyZXR1cm4gbyhlLnN0YXJ0LHQuc3RhcnQpPDAmJihpPWUsZT15KGUsdC5zdGFydCkpLG8oZS5lbmQsdC5lbmQpPjAmJih1PXkoZSx0LmVuZCkpLGcodC5lbmQsZS5zdGFydCxlLmVuZCwtMSksdSYmIWkmJihlLmxpbmVzPXUubGluZXMsZS5zdGFydD11LnN0YXJ0LGUuZW5kPXUuZW5kLHU9ZSksW3QsaSx1XS5maWx0ZXIoQm9vbGVhbil9bShlLHQsLTEpfXJldHVyblt0LGVdfWZ1bmN0aW9uIG0oZSx0LG4pe2coZS5zdGFydCx0LnN0YXJ0LHQuZW5kLG4pLGcoZS5lbmQsdC5zdGFydCx0LmVuZCxuKX1mdW5jdGlvbiBnKGUsdCxuLHIpe2Uucm93PT0ocj09MT90Om4pLnJvdyYmKGUuY29sdW1uKz1yKihuLmNvbHVtbi10LmNvbHVtbikpLGUucm93Kz1yKihuLnJvdy10LnJvdyl9ZnVuY3Rpb24geShlLHQpe3ZhciBuPWUubGluZXMscj1lLmVuZDtlLmVuZD1mKHQpO3ZhciBpPWUuZW5kLnJvdy1lLnN0YXJ0LnJvdyxzPW4uc3BsaWNlKGksbi5sZW5ndGgpLG89aT90LmNvbHVtbjp0LmNvbHVtbi1lLnN0YXJ0LmNvbHVtbjtuLnB1c2goc1swXS5zdWJzdHJpbmcoMCxvKSksc1swXT1zWzBdLnN1YnN0cihvKTt2YXIgdT17c3RhcnQ6Zih0KSxlbmQ6cixsaW5lczpzLGFjdGlvbjplLmFjdGlvbn07cmV0dXJuIHV9ZnVuY3Rpb24gYihlLHQpe3Q9bCh0KTtmb3IodmFyIG49ZS5sZW5ndGg7bi0tOyl7dmFyIHI9ZVtuXTtmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIHM9cltpXSxvPXYocyx0KTt0PW9bMF0sby5sZW5ndGghPTImJihvWzJdPyhyLnNwbGljZShpKzEsMSxvWzFdLG9bMl0pLGkrKyk6b1sxXXx8KHIuc3BsaWNlKGksMSksaS0tKSl9ci5sZW5ndGh8fGUuc3BsaWNlKG4sMSl9cmV0dXJuIGV9ZnVuY3Rpb24gdyhlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7aSsrKWIoZSxyW2ldKX19dmFyIHI9ZnVuY3Rpb24oKXt0aGlzLiRtYXhSZXY9MCx0aGlzLiRmcm9tVW5kbz0hMSx0aGlzLnJlc2V0KCl9OyhmdW5jdGlvbigpe3RoaXMuYWRkU2Vzc2lvbj1mdW5jdGlvbihlKXt0aGlzLiRzZXNzaW9uPWV9LHRoaXMuYWRkPWZ1bmN0aW9uKGUsdCxuKXtpZih0aGlzLiRmcm9tVW5kbylyZXR1cm47aWYoZT09dGhpcy4kbGFzdERlbHRhKXJldHVybjtpZih0PT09ITF8fCF0aGlzLmxhc3REZWx0YXMpdGhpcy5sYXN0RGVsdGFzPVtdLHRoaXMuJHVuZG9TdGFjay5wdXNoKHRoaXMubGFzdERlbHRhcyksZS5pZD10aGlzLiRyZXY9Kyt0aGlzLiRtYXhSZXY7aWYoZS5hY3Rpb249PSJyZW1vdmUifHxlLmFjdGlvbj09Imluc2VydCIpdGhpcy4kbGFzdERlbHRhPWU7dGhpcy5sYXN0RGVsdGFzLnB1c2goZSl9LHRoaXMuYWRkU2VsZWN0aW9uPWZ1bmN0aW9uKGUsdCl7dGhpcy5zZWxlY3Rpb25zLnB1c2goe3ZhbHVlOmUscmV2OnR8fHRoaXMuJHJldn0pfSx0aGlzLnN0YXJ0TmV3R3JvdXA9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYXN0RGVsdGFzPW51bGwsdGhpcy4kcmV2fSx0aGlzLm1hcmtJZ25vcmVkPWZ1bmN0aW9uKGUsdCl7dD09bnVsbCYmKHQ9dGhpcy4kcmV2KzEpO3ZhciBuPXRoaXMuJHVuZG9TdGFjaztmb3IodmFyIHI9bi5sZW5ndGg7ci0tOyl7dmFyIGk9bltyXVswXTtpZihpLmlkPD1lKWJyZWFrO2kuaWQ8dCYmKGkuaWdub3JlPSEwKX10aGlzLmxhc3REZWx0YXM9bnVsbH0sdGhpcy5nZXRTZWxlY3Rpb249ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLnNlbGVjdGlvbnM7Zm9yKHZhciByPW4ubGVuZ3RoO3ItLTspe3ZhciBpPW5bcl07aWYoaS5yZXY8ZSlyZXR1cm4gdCYmKGk9bltyKzFdKSxpfX0sdGhpcy5nZXRSZXZpc2lvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRyZXZ9LHRoaXMuZ2V0RGVsdGFzPWZ1bmN0aW9uKGUsdCl7dD09bnVsbCYmKHQ9dGhpcy4kcmV2KzEpO3ZhciBuPXRoaXMuJHVuZG9TdGFjayxyPW51bGwsaT0wO2Zvcih2YXIgcz1uLmxlbmd0aDtzLS07KXt2YXIgbz1uW3NdWzBdO28uaWQ8dCYmIXImJihyPXMrMSk7aWYoby5pZDw9ZSl7aT1zKzE7YnJlYWt9fXJldHVybiBuLnNsaWNlKGkscil9LHRoaXMuZ2V0Q2hhbmdlZFJhbmdlcz1mdW5jdGlvbihlLHQpe3Q9PW51bGwmJih0PXRoaXMuJHJldisxKX0sdGhpcy5nZXRDaGFuZ2VkTGluZXM9ZnVuY3Rpb24oZSx0KXt0PT1udWxsJiYodD10aGlzLiRyZXYrMSl9LHRoaXMudW5kbz1mdW5jdGlvbihlLHQpe3RoaXMubGFzdERlbHRhcz1udWxsO3ZhciBuPXRoaXMuJHVuZG9TdGFjaztpZighaShuLG4ubGVuZ3RoKSlyZXR1cm47ZXx8KGU9dGhpcy4kc2Vzc2lvbiksdGhpcy4kcmVkb1N0YWNrQmFzZVJldiE9PXRoaXMuJHJldiYmdGhpcy4kcmVkb1N0YWNrLmxlbmd0aCYmKHRoaXMuJHJlZG9TdGFjaz1bXSksdGhpcy4kZnJvbVVuZG89ITA7dmFyIHI9bi5wb3AoKSxzPW51bGw7cmV0dXJuIHImJnIubGVuZ3RoJiYocz1lLnVuZG9DaGFuZ2VzKHIsdCksdGhpcy4kcmVkb1N0YWNrLnB1c2gociksdGhpcy4kc3luY1JldigpKSx0aGlzLiRmcm9tVW5kbz0hMSxzfSx0aGlzLnJlZG89ZnVuY3Rpb24oZSx0KXt0aGlzLmxhc3REZWx0YXM9bnVsbCxlfHwoZT10aGlzLiRzZXNzaW9uKSx0aGlzLiRmcm9tVW5kbz0hMDtpZih0aGlzLiRyZWRvU3RhY2tCYXNlUmV2IT10aGlzLiRyZXYpe3ZhciBuPXRoaXMuZ2V0RGVsdGFzKHRoaXMuJHJlZG9TdGFja0Jhc2VSZXYsdGhpcy4kcmV2KzEpO3codGhpcy4kcmVkb1N0YWNrLG4pLHRoaXMuJHJlZG9TdGFja0Jhc2VSZXY9dGhpcy4kcmV2LHRoaXMuJHJlZG9TdGFjay5mb3JFYWNoKGZ1bmN0aW9uKGUpe2VbMF0uaWQ9Kyt0aGlzLiRtYXhSZXZ9LHRoaXMpfXZhciByPXRoaXMuJHJlZG9TdGFjay5wb3AoKSxpPW51bGw7cmV0dXJuIHImJihpPWUucmVkb0NoYW5nZXMocix0KSx0aGlzLiR1bmRvU3RhY2sucHVzaChyKSx0aGlzLiRzeW5jUmV2KCkpLHRoaXMuJGZyb21VbmRvPSExLGl9LHRoaXMuJHN5bmNSZXY9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLiR1bmRvU3RhY2ssdD1lW2UubGVuZ3RoLTFdLG49dCYmdFswXS5pZHx8MDt0aGlzLiRyZWRvU3RhY2tCYXNlUmV2PW4sdGhpcy4kcmV2PW59LHRoaXMucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLmxhc3REZWx0YXM9bnVsbCx0aGlzLiRsYXN0RGVsdGE9bnVsbCx0aGlzLiR1bmRvU3RhY2s9W10sdGhpcy4kcmVkb1N0YWNrPVtdLHRoaXMuJHJldj0wLHRoaXMubWFyaz0wLHRoaXMuJHJlZG9TdGFja0Jhc2VSZXY9dGhpcy4kcmV2LHRoaXMuc2VsZWN0aW9ucz1bXX0sdGhpcy5jYW5VbmRvPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHVuZG9TdGFjay5sZW5ndGg+MH0sdGhpcy5jYW5SZWRvPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHJlZG9TdGFjay5sZW5ndGg+MH0sdGhpcy5ib29rbWFyaz1mdW5jdGlvbihlKXtlPT11bmRlZmluZWQmJihlPXRoaXMuJHJldiksdGhpcy5tYXJrPWV9LHRoaXMuaXNBdEJvb2ttYXJrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHJldj09PXRoaXMubWFya30sdGhpcy50b0pTT049ZnVuY3Rpb24oKXt9LHRoaXMuZnJvbUpTT049ZnVuY3Rpb24oKXt9LHRoaXMuaGFzVW5kbz10aGlzLmNhblVuZG8sdGhpcy5oYXNSZWRvPXRoaXMuY2FuUmVkbyx0aGlzLmlzQ2xlYW49dGhpcy5pc0F0Qm9va21hcmssdGhpcy5tYXJrQ2xlYW49dGhpcy5ib29rbWFyayx0aGlzLiRwcmV0dHlQcmludD1mdW5jdGlvbihlKXtyZXR1cm4gZT9jKGUpOmModGhpcy4kdW5kb1N0YWNrKSsiXG4tLS1cbiIrYyh0aGlzLiRyZWRvU3RhY2spfX0pLmNhbGwoci5wcm90b3R5cGUpO3ZhciBzPWUoIi4vcmFuZ2UiKS5SYW5nZSxvPXMuY29tcGFyZVBvaW50cyx1PXMuY29tcGFyZVBvaW50czt0LlVuZG9NYW5hZ2VyPXJ9KSxhY2UuZGVmaW5lKCJhY2UvbGF5ZXIvbGluZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2RvbSJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgiLi4vbGliL2RvbSIpLGk9ZnVuY3Rpb24oZSx0KXt0aGlzLmVsZW1lbnQ9ZSx0aGlzLmNhbnZhc0hlaWdodD10fHw1ZTUsdGhpcy5lbGVtZW50LnN0eWxlLmhlaWdodD10aGlzLmNhbnZhc0hlaWdodCoyKyJweCIsdGhpcy5jZWxscz1bXSx0aGlzLmNlbGxDYWNoZT1bXSx0aGlzLiRvZmZzZXRDb2VmZmljaWVudD0wfTsoZnVuY3Rpb24oKXt0aGlzLm1vdmVDb250YWluZXI9ZnVuY3Rpb24oZSl7ci50cmFuc2xhdGUodGhpcy5lbGVtZW50LDAsLShlLmZpcnN0Um93U2NyZWVuKmUubGluZUhlaWdodCV0aGlzLmNhbnZhc0hlaWdodCktZS5vZmZzZXQqdGhpcy4kb2Zmc2V0Q29lZmZpY2llbnQpfSx0aGlzLnBhZ2VDaGFuZ2VkPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE1hdGguZmxvb3IoZS5maXJzdFJvd1NjcmVlbiplLmxpbmVIZWlnaHQvdGhpcy5jYW52YXNIZWlnaHQpIT09TWF0aC5mbG9vcih0LmZpcnN0Um93U2NyZWVuKnQubGluZUhlaWdodC90aGlzLmNhbnZhc0hlaWdodCl9LHRoaXMuY29tcHV0ZUxpbmVUb3A9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQuZmlyc3RSb3dTY3JlZW4qdC5saW5lSGVpZ2h0LGk9TWF0aC5mbG9vcihyL3RoaXMuY2FudmFzSGVpZ2h0KSxzPW4uZG9jdW1lbnRUb1NjcmVlblJvdyhlLDApKnQubGluZUhlaWdodDtyZXR1cm4gcy1pKnRoaXMuY2FudmFzSGVpZ2h0fSx0aGlzLmNvbXB1dGVMaW5lSGVpZ2h0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdC5saW5lSGVpZ2h0Km4uZ2V0Um93TGVuZ3RoKGUpfSx0aGlzLmdldExlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNlbGxzLmxlbmd0aH0sdGhpcy5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY2VsbHNbZV19LHRoaXMuc2hpZnQ9ZnVuY3Rpb24oKXt0aGlzLiRjYWNoZUNlbGwodGhpcy5jZWxscy5zaGlmdCgpKX0sdGhpcy5wb3A9ZnVuY3Rpb24oKXt0aGlzLiRjYWNoZUNlbGwodGhpcy5jZWxscy5wb3AoKSl9LHRoaXMucHVzaD1mdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXt0aGlzLmNlbGxzLnB1c2guYXBwbHkodGhpcy5jZWxscyxlKTt2YXIgdD1yLmNyZWF0ZUZyYWdtZW50KHRoaXMuZWxlbWVudCk7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspdC5hcHBlbmRDaGlsZChlW25dLmVsZW1lbnQpO3RoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0KX1lbHNlIHRoaXMuY2VsbHMucHVzaChlKSx0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoZS5lbGVtZW50KX0sdGhpcy51bnNoaWZ0PWZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpe3RoaXMuY2VsbHMudW5zaGlmdC5hcHBseSh0aGlzLmNlbGxzLGUpO3ZhciB0PXIuY3JlYXRlRnJhZ21lbnQodGhpcy5lbGVtZW50KTtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl0LmFwcGVuZENoaWxkKGVbbl0uZWxlbWVudCk7dGhpcy5lbGVtZW50LmZpcnN0Q2hpbGQ/dGhpcy5lbGVtZW50Lmluc2VydEJlZm9yZSh0LHRoaXMuZWxlbWVudC5maXJzdENoaWxkKTp0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodCl9ZWxzZSB0aGlzLmNlbGxzLnVuc2hpZnQoZSksdGhpcy5lbGVtZW50Lmluc2VydEFkamFjZW50RWxlbWVudCgiYWZ0ZXJiZWdpbiIsZS5lbGVtZW50KX0sdGhpcy5sYXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2VsbHMubGVuZ3RoP3RoaXMuY2VsbHNbdGhpcy5jZWxscy5sZW5ndGgtMV06bnVsbH0sdGhpcy4kY2FjaGVDZWxsPWZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybjtlLmVsZW1lbnQucmVtb3ZlKCksdGhpcy5jZWxsQ2FjaGUucHVzaChlKX0sdGhpcy5jcmVhdGVDZWxsPWZ1bmN0aW9uKGUsdCxuLGkpe3ZhciBzPXRoaXMuY2VsbENhY2hlLnBvcCgpO2lmKCFzKXt2YXIgbz1yLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2kmJmkobyksdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKG8pLHM9e2VsZW1lbnQ6byx0ZXh0OiIiLHJvdzplfX1yZXR1cm4gcy5yb3c9ZSxzfX0pLmNhbGwoaS5wcm90b3R5cGUpLHQuTGluZXM9aX0pLGFjZS5kZWZpbmUoImFjZS9sYXllci9ndXR0ZXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2RvbSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIiwiYWNlL2xheWVyL2xpbmVzIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBmKGUpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKTtlLmFwcGVuZENoaWxkKHQpO3ZhciBuPXIuY3JlYXRlRWxlbWVudCgic3BhbiIpO3JldHVybiBlLmFwcGVuZENoaWxkKG4pLGV9dmFyIHI9ZSgiLi4vbGliL2RvbSIpLGk9ZSgiLi4vbGliL29vcCIpLHM9ZSgiLi4vbGliL2xhbmciKSxvPWUoIi4uL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyLHU9ZSgiLi9saW5lcyIpLkxpbmVzLGE9ZnVuY3Rpb24oZSl7dGhpcy5lbGVtZW50PXIuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5lbGVtZW50LmNsYXNzTmFtZT0iYWNlX2xheWVyIGFjZV9ndXR0ZXItbGF5ZXIiLGUuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KSx0aGlzLnNldFNob3dGb2xkV2lkZ2V0cyh0aGlzLiRzaG93Rm9sZFdpZGdldHMpLHRoaXMuZ3V0dGVyV2lkdGg9MCx0aGlzLiRhbm5vdGF0aW9ucz1bXSx0aGlzLiR1cGRhdGVBbm5vdGF0aW9ucz10aGlzLiR1cGRhdGVBbm5vdGF0aW9ucy5iaW5kKHRoaXMpLHRoaXMuJGxpbmVzPW5ldyB1KHRoaXMuZWxlbWVudCksdGhpcy4kbGluZXMuJG9mZnNldENvZWZmaWNpZW50PTF9OyhmdW5jdGlvbigpe2kuaW1wbGVtZW50KHRoaXMsbyksdGhpcy5zZXRTZXNzaW9uPWZ1bmN0aW9uKGUpe3RoaXMuc2Vzc2lvbiYmdGhpcy5zZXNzaW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIsdGhpcy4kdXBkYXRlQW5ub3RhdGlvbnMpLHRoaXMuc2Vzc2lvbj1lLGUmJmUub24oImNoYW5nZSIsdGhpcy4kdXBkYXRlQW5ub3RhdGlvbnMpfSx0aGlzLmFkZEd1dHRlckRlY29yYXRpb249ZnVuY3Rpb24oZSx0KXt3aW5kb3cuY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oImRlcHJlY2F0ZWQgdXNlIHNlc3Npb24uYWRkR3V0dGVyRGVjb3JhdGlvbiIpLHRoaXMuc2Vzc2lvbi5hZGRHdXR0ZXJEZWNvcmF0aW9uKGUsdCl9LHRoaXMucmVtb3ZlR3V0dGVyRGVjb3JhdGlvbj1mdW5jdGlvbihlLHQpe3dpbmRvdy5jb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybigiZGVwcmVjYXRlZCB1c2Ugc2Vzc2lvbi5yZW1vdmVHdXR0ZXJEZWNvcmF0aW9uIiksdGhpcy5zZXNzaW9uLnJlbW92ZUd1dHRlckRlY29yYXRpb24oZSx0KX0sdGhpcy5zZXRBbm5vdGF0aW9ucz1mdW5jdGlvbihlKXt0aGlzLiRhbm5vdGF0aW9ucz1bXTtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyl7dmFyIG49ZVt0XSxyPW4ucm93LGk9dGhpcy4kYW5ub3RhdGlvbnNbcl07aXx8KGk9dGhpcy4kYW5ub3RhdGlvbnNbcl09e3RleHQ6W119KTt2YXIgbz1uLnRleHQ7bz1vP3MuZXNjYXBlSFRNTChvKTpuLmh0bWx8fCIiLGkudGV4dC5pbmRleE9mKG8pPT09LTEmJmkudGV4dC5wdXNoKG8pO3ZhciB1PW4udHlwZTt1PT0iZXJyb3IiP2kuY2xhc3NOYW1lPSIgYWNlX2Vycm9yIjp1PT0id2FybmluZyImJmkuY2xhc3NOYW1lIT0iIGFjZV9lcnJvciI/aS5jbGFzc05hbWU9IiBhY2Vfd2FybmluZyI6dT09ImluZm8iJiYhaS5jbGFzc05hbWUmJihpLmNsYXNzTmFtZT0iIGFjZV9pbmZvIil9fSx0aGlzLiR1cGRhdGVBbm5vdGF0aW9ucz1mdW5jdGlvbihlKXtpZighdGhpcy4kYW5ub3RhdGlvbnMubGVuZ3RoKXJldHVybjt2YXIgdD1lLnN0YXJ0LnJvdyxuPWUuZW5kLnJvdy10O2lmKG4hPT0wKWlmKGUuYWN0aW9uPT0icmVtb3ZlIil0aGlzLiRhbm5vdGF0aW9ucy5zcGxpY2UodCxuKzEsbnVsbCk7ZWxzZXt2YXIgcj1uZXcgQXJyYXkobisxKTtyLnVuc2hpZnQodCwxKSx0aGlzLiRhbm5vdGF0aW9ucy5zcGxpY2UuYXBwbHkodGhpcy4kYW5ub3RhdGlvbnMscil9fSx0aGlzLnVwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLmNvbmZpZz1lO3ZhciB0PXRoaXMuc2Vzc2lvbixuPWUuZmlyc3RSb3cscj1NYXRoLm1pbihlLmxhc3RSb3crZS5ndXR0ZXJPZmZzZXQsdC5nZXRMZW5ndGgoKS0xKTt0aGlzLm9sZExhc3RSb3c9cix0aGlzLmNvbmZpZz1lLHRoaXMuJGxpbmVzLm1vdmVDb250YWluZXIoZSksdGhpcy4kdXBkYXRlQ3Vyc29yUm93KCk7dmFyIGk9dC5nZXROZXh0Rm9sZExpbmUobikscz1pP2kuc3RhcnQucm93OkluZmluaXR5LG89bnVsbCx1PS0xLGE9bjtmb3IoOzspe2E+cyYmKGE9aS5lbmQucm93KzEsaT10LmdldE5leHRGb2xkTGluZShhLGkpLHM9aT9pLnN0YXJ0LnJvdzpJbmZpbml0eSk7aWYoYT5yKXt3aGlsZSh0aGlzLiRsaW5lcy5nZXRMZW5ndGgoKT51KzEpdGhpcy4kbGluZXMucG9wKCk7YnJlYWt9bz10aGlzLiRsaW5lcy5nZXQoKyt1KSxvP28ucm93PWE6KG89dGhpcy4kbGluZXMuY3JlYXRlQ2VsbChhLGUsdGhpcy5zZXNzaW9uLGYpLHRoaXMuJGxpbmVzLnB1c2gobykpLHRoaXMuJHJlbmRlckNlbGwobyxlLGksYSksYSsrfXRoaXMuX3NpZ25hbCgiYWZ0ZXJSZW5kZXIiKSx0aGlzLiR1cGRhdGVHdXR0ZXJXaWR0aChlKX0sdGhpcy4kdXBkYXRlR3V0dGVyV2lkdGg9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5zZXNzaW9uLG49dC5ndXR0ZXJSZW5kZXJlcnx8dGhpcy4kcmVuZGVyZXIscj10LiRmaXJzdExpbmVOdW1iZXIsaT10aGlzLiRsaW5lcy5sYXN0KCk/dGhpcy4kbGluZXMubGFzdCgpLnRleHQ6IiI7aWYodGhpcy4kZml4ZWRXaWR0aHx8dC4kdXNlV3JhcE1vZGUpaT10LmdldExlbmd0aCgpK3ItMTt2YXIgcz1uP24uZ2V0V2lkdGgodCxpLGUpOmkudG9TdHJpbmcoKS5sZW5ndGgqZS5jaGFyYWN0ZXJXaWR0aCxvPXRoaXMuJHBhZGRpbmd8fHRoaXMuJGNvbXB1dGVQYWRkaW5nKCk7cys9by5sZWZ0K28ucmlnaHQscyE9PXRoaXMuZ3V0dGVyV2lkdGgmJiFpc05hTihzKSYmKHRoaXMuZ3V0dGVyV2lkdGg9cyx0aGlzLmVsZW1lbnQucGFyZW50Tm9kZS5zdHlsZS53aWR0aD10aGlzLmVsZW1lbnQuc3R5bGUud2lkdGg9TWF0aC5jZWlsKHRoaXMuZ3V0dGVyV2lkdGgpKyJweCIsdGhpcy5fc2lnbmFsKCJjaGFuZ2VHdXR0ZXJXaWR0aCIscykpfSx0aGlzLiR1cGRhdGVDdXJzb3JSb3c9ZnVuY3Rpb24oKXtpZighdGhpcy4kaGlnaGxpZ2h0R3V0dGVyTGluZSlyZXR1cm47dmFyIGU9dGhpcy5zZXNzaW9uLnNlbGVjdGlvbi5nZXRDdXJzb3IoKTtpZih0aGlzLiRjdXJzb3JSb3c9PT1lLnJvdylyZXR1cm47dGhpcy4kY3Vyc29yUm93PWUucm93fSx0aGlzLnVwZGF0ZUxpbmVIaWdobGlnaHQ9ZnVuY3Rpb24oKXtpZighdGhpcy4kaGlnaGxpZ2h0R3V0dGVyTGluZSlyZXR1cm47dmFyIGU9dGhpcy5zZXNzaW9uLnNlbGVjdGlvbi5jdXJzb3Iucm93O3RoaXMuJGN1cnNvclJvdz1lO2lmKHRoaXMuJGN1cnNvckNlbGwmJnRoaXMuJGN1cnNvckNlbGwucm93PT1lKXJldHVybjt0aGlzLiRjdXJzb3JDZWxsJiYodGhpcy4kY3Vyc29yQ2VsbC5lbGVtZW50LmNsYXNzTmFtZT10aGlzLiRjdXJzb3JDZWxsLmVsZW1lbnQuY2xhc3NOYW1lLnJlcGxhY2UoImFjZV9ndXR0ZXItYWN0aXZlLWxpbmUgIiwiIikpO3ZhciB0PXRoaXMuJGxpbmVzLmNlbGxzO3RoaXMuJGN1cnNvckNlbGw9bnVsbDtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtpZihyLnJvdz49dGhpcy4kY3Vyc29yUm93KXtpZihyLnJvdz50aGlzLiRjdXJzb3JSb3cpe3ZhciBpPXRoaXMuc2Vzc2lvbi5nZXRGb2xkTGluZSh0aGlzLiRjdXJzb3JSb3cpO2lmKCEobj4wJiZpJiZpLnN0YXJ0LnJvdz09dFtuLTFdLnJvdykpYnJlYWs7cj10W24tMV19ci5lbGVtZW50LmNsYXNzTmFtZT0iYWNlX2d1dHRlci1hY3RpdmUtbGluZSAiK3IuZWxlbWVudC5jbGFzc05hbWUsdGhpcy4kY3Vyc29yQ2VsbD1yO2JyZWFrfX19LHRoaXMuc2Nyb2xsTGluZXM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jb25maWc7dGhpcy5jb25maWc9ZSx0aGlzLiR1cGRhdGVDdXJzb3JSb3coKTtpZih0aGlzLiRsaW5lcy5wYWdlQ2hhbmdlZCh0LGUpKXJldHVybiB0aGlzLnVwZGF0ZShlKTt0aGlzLiRsaW5lcy5tb3ZlQ29udGFpbmVyKGUpO3ZhciBuPU1hdGgubWluKGUubGFzdFJvdytlLmd1dHRlck9mZnNldCx0aGlzLnNlc3Npb24uZ2V0TGVuZ3RoKCktMSkscj10aGlzLm9sZExhc3RSb3c7dGhpcy5vbGRMYXN0Um93PW47aWYoIXR8fHI8ZS5maXJzdFJvdylyZXR1cm4gdGhpcy51cGRhdGUoZSk7aWYobjx0LmZpcnN0Um93KXJldHVybiB0aGlzLnVwZGF0ZShlKTtpZih0LmZpcnN0Um93PGUuZmlyc3RSb3cpZm9yKHZhciBpPXRoaXMuc2Vzc2lvbi5nZXRGb2xkZWRSb3dDb3VudCh0LmZpcnN0Um93LGUuZmlyc3RSb3ctMSk7aT4wO2ktLSl0aGlzLiRsaW5lcy5zaGlmdCgpO2lmKHI+bilmb3IodmFyIGk9dGhpcy5zZXNzaW9uLmdldEZvbGRlZFJvd0NvdW50KG4rMSxyKTtpPjA7aS0tKXRoaXMuJGxpbmVzLnBvcCgpO2UuZmlyc3RSb3c8dC5maXJzdFJvdyYmdGhpcy4kbGluZXMudW5zaGlmdCh0aGlzLiRyZW5kZXJMaW5lcyhlLGUuZmlyc3RSb3csdC5maXJzdFJvdy0xKSksbj5yJiZ0aGlzLiRsaW5lcy5wdXNoKHRoaXMuJHJlbmRlckxpbmVzKGUscisxLG4pKSx0aGlzLnVwZGF0ZUxpbmVIaWdobGlnaHQoKSx0aGlzLl9zaWduYWwoImFmdGVyUmVuZGVyIiksdGhpcy4kdXBkYXRlR3V0dGVyV2lkdGgoZSl9LHRoaXMuJHJlbmRlckxpbmVzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1bXSxpPXQscz10aGlzLnNlc3Npb24uZ2V0TmV4dEZvbGRMaW5lKGkpLG89cz9zLnN0YXJ0LnJvdzpJbmZpbml0eTtmb3IoOzspe2k+byYmKGk9cy5lbmQucm93KzEscz10aGlzLnNlc3Npb24uZ2V0TmV4dEZvbGRMaW5lKGkscyksbz1zP3Muc3RhcnQucm93OkluZmluaXR5KTtpZihpPm4pYnJlYWs7dmFyIHU9dGhpcy4kbGluZXMuY3JlYXRlQ2VsbChpLGUsdGhpcy5zZXNzaW9uLGYpO3RoaXMuJHJlbmRlckNlbGwodSxlLHMsaSksci5wdXNoKHUpLGkrK31yZXR1cm4gcn0sdGhpcy4kcmVuZGVyQ2VsbD1mdW5jdGlvbihlLHQsbixpKXt2YXIgcz1lLmVsZW1lbnQsbz10aGlzLnNlc3Npb24sdT1zLmNoaWxkTm9kZXNbMF0sYT1zLmNoaWxkTm9kZXNbMV0sZj1vLiRmaXJzdExpbmVOdW1iZXIsbD1vLiRicmVha3BvaW50cyxjPW8uJGRlY29yYXRpb25zLGg9by5ndXR0ZXJSZW5kZXJlcnx8dGhpcy4kcmVuZGVyZXIscD10aGlzLiRzaG93Rm9sZFdpZGdldHMmJm8uZm9sZFdpZGdldHMsZD1uP24uc3RhcnQucm93Ok51bWJlci5NQVhfVkFMVUUsdj0iYWNlX2d1dHRlci1jZWxsICI7dGhpcy4kaGlnaGxpZ2h0R3V0dGVyTGluZSYmKGk9PXRoaXMuJGN1cnNvclJvd3x8biYmaTx0aGlzLiRjdXJzb3JSb3cmJmk+PWQmJnRoaXMuJGN1cnNvclJvdzw9bi5lbmQucm93KSYmKHYrPSJhY2VfZ3V0dGVyLWFjdGl2ZS1saW5lICIsdGhpcy4kY3Vyc29yQ2VsbCE9ZSYmKHRoaXMuJGN1cnNvckNlbGwmJih0aGlzLiRjdXJzb3JDZWxsLmVsZW1lbnQuY2xhc3NOYW1lPXRoaXMuJGN1cnNvckNlbGwuZWxlbWVudC5jbGFzc05hbWUucmVwbGFjZSgiYWNlX2d1dHRlci1hY3RpdmUtbGluZSAiLCIiKSksdGhpcy4kY3Vyc29yQ2VsbD1lKSksbFtpXSYmKHYrPWxbaV0pLGNbaV0mJih2Kz1jW2ldKSx0aGlzLiRhbm5vdGF0aW9uc1tpXSYmKHYrPXRoaXMuJGFubm90YXRpb25zW2ldLmNsYXNzTmFtZSkscy5jbGFzc05hbWUhPXYmJihzLmNsYXNzTmFtZT12KTtpZihwKXt2YXIgbT1wW2ldO209PW51bGwmJihtPXBbaV09by5nZXRGb2xkV2lkZ2V0KGkpKX1pZihtKXt2YXIgdj0iYWNlX2ZvbGQtd2lkZ2V0IGFjZV8iK207bT09InN0YXJ0IiYmaT09ZCYmaTxuLmVuZC5yb3c/dis9IiBhY2VfY2xvc2VkIjp2Kz0iIGFjZV9vcGVuIixhLmNsYXNzTmFtZSE9diYmKGEuY2xhc3NOYW1lPXYpO3ZhciBnPXQubGluZUhlaWdodCsicHgiO3Iuc2V0U3R5bGUoYS5zdHlsZSwiaGVpZ2h0IixnKSxyLnNldFN0eWxlKGEuc3R5bGUsImRpc3BsYXkiLCJpbmxpbmUtYmxvY2siKX1lbHNlIGEmJnIuc2V0U3R5bGUoYS5zdHlsZSwiZGlzcGxheSIsIm5vbmUiKTt2YXIgeT0oaD9oLmdldFRleHQobyxpKTppK2YpLnRvU3RyaW5nKCk7cmV0dXJuIHkhPT11LmRhdGEmJih1LmRhdGE9eSksci5zZXRTdHlsZShlLmVsZW1lbnQuc3R5bGUsImhlaWdodCIsdGhpcy4kbGluZXMuY29tcHV0ZUxpbmVIZWlnaHQoaSx0LG8pKyJweCIpLHIuc2V0U3R5bGUoZS5lbGVtZW50LnN0eWxlLCJ0b3AiLHRoaXMuJGxpbmVzLmNvbXB1dGVMaW5lVG9wKGksdCxvKSsicHgiKSxlLnRleHQ9eSxlfSx0aGlzLiRmaXhlZFdpZHRoPSExLHRoaXMuJGhpZ2hsaWdodEd1dHRlckxpbmU9ITAsdGhpcy4kcmVuZGVyZXI9IiIsdGhpcy5zZXRIaWdobGlnaHRHdXR0ZXJMaW5lPWZ1bmN0aW9uKGUpe3RoaXMuJGhpZ2hsaWdodEd1dHRlckxpbmU9ZX0sdGhpcy4kc2hvd0xpbmVOdW1iZXJzPSEwLHRoaXMuJHJlbmRlcmVyPSIiLHRoaXMuc2V0U2hvd0xpbmVOdW1iZXJzPWZ1bmN0aW9uKGUpe3RoaXMuJHJlbmRlcmVyPSFlJiZ7Z2V0V2lkdGg6ZnVuY3Rpb24oKXtyZXR1cm4gMH0sZ2V0VGV4dDpmdW5jdGlvbigpe3JldHVybiIifX19LHRoaXMuZ2V0U2hvd0xpbmVOdW1iZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHNob3dMaW5lTnVtYmVyc30sdGhpcy4kc2hvd0ZvbGRXaWRnZXRzPSEwLHRoaXMuc2V0U2hvd0ZvbGRXaWRnZXRzPWZ1bmN0aW9uKGUpe2U/ci5hZGRDc3NDbGFzcyh0aGlzLmVsZW1lbnQsImFjZV9mb2xkaW5nLWVuYWJsZWQiKTpyLnJlbW92ZUNzc0NsYXNzKHRoaXMuZWxlbWVudCwiYWNlX2ZvbGRpbmctZW5hYmxlZCIpLHRoaXMuJHNob3dGb2xkV2lkZ2V0cz1lLHRoaXMuJHBhZGRpbmc9bnVsbH0sdGhpcy5nZXRTaG93Rm9sZFdpZGdldHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kc2hvd0ZvbGRXaWRnZXRzfSx0aGlzLiRjb21wdXRlUGFkZGluZz1mdW5jdGlvbigpe2lmKCF0aGlzLmVsZW1lbnQuZmlyc3RDaGlsZClyZXR1cm57bGVmdDowLHJpZ2h0OjB9O3ZhciBlPXIuY29tcHV0ZWRTdHlsZSh0aGlzLmVsZW1lbnQuZmlyc3RDaGlsZCk7cmV0dXJuIHRoaXMuJHBhZGRpbmc9e30sdGhpcy4kcGFkZGluZy5sZWZ0PShwYXJzZUludChlLmJvcmRlckxlZnRXaWR0aCl8fDApKyhwYXJzZUludChlLnBhZGRpbmdMZWZ0KXx8MCkrMSx0aGlzLiRwYWRkaW5nLnJpZ2h0PShwYXJzZUludChlLmJvcmRlclJpZ2h0V2lkdGgpfHwwKSsocGFyc2VJbnQoZS5wYWRkaW5nUmlnaHQpfHwwKSx0aGlzLiRwYWRkaW5nfSx0aGlzLmdldFJlZ2lvbj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLiRwYWRkaW5nfHx0aGlzLiRjb21wdXRlUGFkZGluZygpLG49dGhpcy5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKGUueDx0LmxlZnQrbi5sZWZ0KXJldHVybiJtYXJrZXJzIjtpZih0aGlzLiRzaG93Rm9sZFdpZGdldHMmJmUueD5uLnJpZ2h0LXQucmlnaHQpcmV0dXJuImZvbGRXaWRnZXRzIn19KS5jYWxsKGEucHJvdG90eXBlKSx0Lkd1dHRlcj1hfSksYWNlLmRlZmluZSgiYWNlL2xheWVyL21hcmtlciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSIsImFjZS9saWIvZG9tIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuLi9yYW5nZSIpLlJhbmdlLGk9ZSgiLi4vbGliL2RvbSIpLHM9ZnVuY3Rpb24oZSl7dGhpcy5lbGVtZW50PWkuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5lbGVtZW50LmNsYXNzTmFtZT0iYWNlX2xheWVyIGFjZV9tYXJrZXItbGF5ZXIiLGUuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KX07KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbixyKXtyZXR1cm4oZT8xOjApfCh0PzI6MCl8KG4/NDowKXwocj84OjApfXRoaXMuJHBhZGRpbmc9MCx0aGlzLnNldFBhZGRpbmc9ZnVuY3Rpb24oZSl7dGhpcy4kcGFkZGluZz1lfSx0aGlzLnNldFNlc3Npb249ZnVuY3Rpb24oZSl7dGhpcy5zZXNzaW9uPWV9LHRoaXMuc2V0TWFya2Vycz1mdW5jdGlvbihlKXt0aGlzLm1hcmtlcnM9ZX0sdGhpcy5lbHQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmkhPS0xJiZ0aGlzLmVsZW1lbnQuY2hpbGROb2Rlc1t0aGlzLmldO24/dGhpcy5pKys6KG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKG4pLHRoaXMuaT0tMSksbi5zdHlsZS5jc3NUZXh0PXQsbi5jbGFzc05hbWU9ZX0sdGhpcy51cGRhdGU9ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuO3RoaXMuY29uZmlnPWUsdGhpcy5pPTA7dmFyIHQ7Zm9yKHZhciBuIGluIHRoaXMubWFya2Vycyl7dmFyIHI9dGhpcy5tYXJrZXJzW25dO2lmKCFyLnJhbmdlKXtyLnVwZGF0ZSh0LHRoaXMsdGhpcy5zZXNzaW9uLGUpO2NvbnRpbnVlfXZhciBpPXIucmFuZ2UuY2xpcFJvd3MoZS5maXJzdFJvdyxlLmxhc3RSb3cpO2lmKGkuaXNFbXB0eSgpKWNvbnRpbnVlO2k9aS50b1NjcmVlblJhbmdlKHRoaXMuc2Vzc2lvbik7aWYoci5yZW5kZXJlcil7dmFyIHM9dGhpcy4kZ2V0VG9wKGkuc3RhcnQucm93LGUpLG89dGhpcy4kcGFkZGluZytpLnN0YXJ0LmNvbHVtbiplLmNoYXJhY3RlcldpZHRoO3IucmVuZGVyZXIodCxpLG8scyxlKX1lbHNlIHIudHlwZT09ImZ1bGxMaW5lIj90aGlzLmRyYXdGdWxsTGluZU1hcmtlcih0LGksci5jbGF6eixlKTpyLnR5cGU9PSJzY3JlZW5MaW5lIj90aGlzLmRyYXdTY3JlZW5MaW5lTWFya2VyKHQsaSxyLmNsYXp6LGUpOmkuaXNNdWx0aUxpbmUoKT9yLnR5cGU9PSJ0ZXh0Ij90aGlzLmRyYXdUZXh0TWFya2VyKHQsaSxyLmNsYXp6LGUpOnRoaXMuZHJhd011bHRpTGluZU1hcmtlcih0LGksci5jbGF6eixlKTp0aGlzLmRyYXdTaW5nbGVMaW5lTWFya2VyKHQsaSxyLmNsYXp6KyIgYWNlX3N0YXJ0IisiIGFjZV9icjE1IixlKX1pZih0aGlzLmkhPS0xKXdoaWxlKHRoaXMuaTx0aGlzLmVsZW1lbnQuY2hpbGRFbGVtZW50Q291bnQpdGhpcy5lbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuZWxlbWVudC5sYXN0Q2hpbGQpfSx0aGlzLiRnZXRUb3A9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oZS10LmZpcnN0Um93U2NyZWVuKSp0LmxpbmVIZWlnaHR9LHRoaXMuZHJhd1RleHRNYXJrZXI9ZnVuY3Rpb24odCxuLGkscyxvKXt2YXIgdT10aGlzLnNlc3Npb24sYT1uLnN0YXJ0LnJvdyxmPW4uZW5kLnJvdyxsPWEsYz0wLGg9MCxwPXUuZ2V0U2NyZWVuTGFzdFJvd0NvbHVtbihsKSxkPW5ldyByKGwsbi5zdGFydC5jb2x1bW4sbCxoKTtmb3IoO2w8PWY7bCsrKWQuc3RhcnQucm93PWQuZW5kLnJvdz1sLGQuc3RhcnQuY29sdW1uPWw9PWE/bi5zdGFydC5jb2x1bW46dS5nZXRSb3dXcmFwSW5kZW50KGwpLGQuZW5kLmNvbHVtbj1wLGM9aCxoPXAscD1sKzE8Zj91LmdldFNjcmVlbkxhc3RSb3dDb2x1bW4obCsxKTpsPT1mPzA6bi5lbmQuY29sdW1uLHRoaXMuZHJhd1NpbmdsZUxpbmVNYXJrZXIodCxkLGkrKGw9PWE/IiBhY2Vfc3RhcnQiOiIiKSsiIGFjZV9iciIrZShsPT1hfHxsPT1hKzEmJm4uc3RhcnQuY29sdW1uLGM8aCxoPnAsbD09ZikscyxsPT1mPzA6MSxvKX0sdGhpcy5kcmF3TXVsdGlMaW5lTWFya2VyPWZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIHM9dGhpcy4kcGFkZGluZyxvPXIubGluZUhlaWdodCx1PXRoaXMuJGdldFRvcCh0LnN0YXJ0LnJvdyxyKSxhPXMrdC5zdGFydC5jb2x1bW4qci5jaGFyYWN0ZXJXaWR0aDtpPWl8fCIiO2lmKHRoaXMuc2Vzc2lvbi4kYmlkaUhhbmRsZXIuaXNCaWRpUm93KHQuc3RhcnQucm93KSl7dmFyIGY9dC5jbG9uZSgpO2YuZW5kLnJvdz1mLnN0YXJ0LnJvdyxmLmVuZC5jb2x1bW49dGhpcy5zZXNzaW9uLmdldExpbmUoZi5zdGFydC5yb3cpLmxlbmd0aCx0aGlzLmRyYXdCaWRpU2luZ2xlTGluZU1hcmtlcihlLGYsbisiIGFjZV9icjEgYWNlX3N0YXJ0IixyLG51bGwsaSl9ZWxzZSB0aGlzLmVsdChuKyIgYWNlX2JyMSBhY2Vfc3RhcnQiLCJoZWlnaHQ6IitvKyJweDsiKyJyaWdodDowOyIrInRvcDoiK3UrInB4O2xlZnQ6IithKyJweDsiKyhpfHwiIikpO2lmKHRoaXMuc2Vzc2lvbi4kYmlkaUhhbmRsZXIuaXNCaWRpUm93KHQuZW5kLnJvdykpe3ZhciBmPXQuY2xvbmUoKTtmLnN0YXJ0LnJvdz1mLmVuZC5yb3csZi5zdGFydC5jb2x1bW49MCx0aGlzLmRyYXdCaWRpU2luZ2xlTGluZU1hcmtlcihlLGYsbisiIGFjZV9icjEyIixyLG51bGwsaSl9ZWxzZXt1PXRoaXMuJGdldFRvcCh0LmVuZC5yb3cscik7dmFyIGw9dC5lbmQuY29sdW1uKnIuY2hhcmFjdGVyV2lkdGg7dGhpcy5lbHQobisiIGFjZV9icjEyIiwiaGVpZ2h0OiIrbysicHg7Iisid2lkdGg6IitsKyJweDsiKyJ0b3A6Iit1KyJweDsiKyJsZWZ0OiIrcysicHg7IisoaXx8IiIpKX1vPSh0LmVuZC5yb3ctdC5zdGFydC5yb3ctMSkqci5saW5lSGVpZ2h0O2lmKG88PTApcmV0dXJuO3U9dGhpcy4kZ2V0VG9wKHQuc3RhcnQucm93KzEscik7dmFyIGM9KHQuc3RhcnQuY29sdW1uPzE6MCl8KHQuZW5kLmNvbHVtbj8wOjgpO3RoaXMuZWx0KG4rKGM/IiBhY2VfYnIiK2M6IiIpLCJoZWlnaHQ6IitvKyJweDsiKyJyaWdodDowOyIrInRvcDoiK3UrInB4OyIrImxlZnQ6IitzKyJweDsiKyhpfHwiIikpfSx0aGlzLmRyYXdTaW5nbGVMaW5lTWFya2VyPWZ1bmN0aW9uKGUsdCxuLHIsaSxzKXtpZih0aGlzLnNlc3Npb24uJGJpZGlIYW5kbGVyLmlzQmlkaVJvdyh0LnN0YXJ0LnJvdykpcmV0dXJuIHRoaXMuZHJhd0JpZGlTaW5nbGVMaW5lTWFya2VyKGUsdCxuLHIsaSxzKTt2YXIgbz1yLmxpbmVIZWlnaHQsdT0odC5lbmQuY29sdW1uKyhpfHwwKS10LnN0YXJ0LmNvbHVtbikqci5jaGFyYWN0ZXJXaWR0aCxhPXRoaXMuJGdldFRvcCh0LnN0YXJ0LnJvdyxyKSxmPXRoaXMuJHBhZGRpbmcrdC5zdGFydC5jb2x1bW4qci5jaGFyYWN0ZXJXaWR0aDt0aGlzLmVsdChuLCJoZWlnaHQ6IitvKyJweDsiKyJ3aWR0aDoiK3UrInB4OyIrInRvcDoiK2ErInB4OyIrImxlZnQ6IitmKyJweDsiKyhzfHwiIikpfSx0aGlzLmRyYXdCaWRpU2luZ2xlTGluZU1hcmtlcj1mdW5jdGlvbihlLHQsbixyLGkscyl7dmFyIG89ci5saW5lSGVpZ2h0LHU9dGhpcy4kZ2V0VG9wKHQuc3RhcnQucm93LHIpLGE9dGhpcy4kcGFkZGluZyxmPXRoaXMuc2Vzc2lvbi4kYmlkaUhhbmRsZXIuZ2V0U2VsZWN0aW9ucyh0LnN0YXJ0LmNvbHVtbix0LmVuZC5jb2x1bW4pO2YuZm9yRWFjaChmdW5jdGlvbihlKXt0aGlzLmVsdChuLCJoZWlnaHQ6IitvKyJweDsiKyJ3aWR0aDoiK2Uud2lkdGgrKGl8fDApKyJweDsiKyJ0b3A6Iit1KyJweDsiKyJsZWZ0OiIrKGErZS5sZWZ0KSsicHg7Iisoc3x8IiIpKX0sdGhpcyl9LHRoaXMuZHJhd0Z1bGxMaW5lTWFya2VyPWZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIHM9dGhpcy4kZ2V0VG9wKHQuc3RhcnQucm93LHIpLG89ci5saW5lSGVpZ2h0O3Quc3RhcnQucm93IT10LmVuZC5yb3cmJihvKz10aGlzLiRnZXRUb3AodC5lbmQucm93LHIpLXMpLHRoaXMuZWx0KG4sImhlaWdodDoiK28rInB4OyIrInRvcDoiK3MrInB4OyIrImxlZnQ6MDtyaWdodDowOyIrKGl8fCIiKSl9LHRoaXMuZHJhd1NjcmVlbkxpbmVNYXJrZXI9ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgcz10aGlzLiRnZXRUb3AodC5zdGFydC5yb3csciksbz1yLmxpbmVIZWlnaHQ7dGhpcy5lbHQobiwiaGVpZ2h0OiIrbysicHg7IisidG9wOiIrcysicHg7IisibGVmdDowO3JpZ2h0OjA7IisoaXx8IiIpKX19KS5jYWxsKHMucHJvdG90eXBlKSx0Lk1hcmtlcj1zfSksYWNlLmRlZmluZSgiYWNlL2xheWVyL3RleHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvZG9tIiwiYWNlL2xpYi9sYW5nIiwiYWNlL2xheWVyL2xpbmVzIiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuLi9saWIvb29wIiksaT1lKCIuLi9saWIvZG9tIikscz1lKCIuLi9saWIvbGFuZyIpLG89ZSgiLi9saW5lcyIpLkxpbmVzLHU9ZSgiLi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXIsYT1mdW5jdGlvbihlKXt0aGlzLmRvbT1pLHRoaXMuZWxlbWVudD10aGlzLmRvbS5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmVsZW1lbnQuY2xhc3NOYW1lPSJhY2VfbGF5ZXIgYWNlX3RleHQtbGF5ZXIiLGUuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KSx0aGlzLiR1cGRhdGVFb2xDaGFyPXRoaXMuJHVwZGF0ZUVvbENoYXIuYmluZCh0aGlzKSx0aGlzLiRsaW5lcz1uZXcgbyh0aGlzLmVsZW1lbnQpfTsoZnVuY3Rpb24oKXtyLmltcGxlbWVudCh0aGlzLHUpLHRoaXMuRU9GX0NIQVI9Ilx1MDBiNiIsdGhpcy5FT0xfQ0hBUl9MRj0iXHUwMGFjIix0aGlzLkVPTF9DSEFSX0NSTEY9Ilx1MDBhNCIsdGhpcy5FT0xfQ0hBUj10aGlzLkVPTF9DSEFSX0xGLHRoaXMuVEFCX0NIQVI9Ilx1MjAxNCIsdGhpcy5TUEFDRV9DSEFSPSJcdTAwYjciLHRoaXMuJHBhZGRpbmc9MCx0aGlzLk1BWF9MSU5FX0xFTkdUSD0xZTQsdGhpcy4kdXBkYXRlRW9sQ2hhcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuc2Vzc2lvbi5kb2MsdD1lLmdldE5ld0xpbmVDaGFyYWN0ZXIoKT09IlxuIiYmZS5nZXROZXdMaW5lTW9kZSgpIT0id2luZG93cyIsbj10P3RoaXMuRU9MX0NIQVJfTEY6dGhpcy5FT0xfQ0hBUl9DUkxGO2lmKHRoaXMuRU9MX0NIQVIhPW4pcmV0dXJuIHRoaXMuRU9MX0NIQVI9biwhMH0sdGhpcy5zZXRQYWRkaW5nPWZ1bmN0aW9uKGUpe3RoaXMuJHBhZGRpbmc9ZSx0aGlzLmVsZW1lbnQuc3R5bGUubWFyZ2luPSIwICIrZSsicHgifSx0aGlzLmdldExpbmVIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZm9udE1ldHJpY3MuJGNoYXJhY3RlclNpemUuaGVpZ2h0fHwwfSx0aGlzLmdldENoYXJhY3RlcldpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGZvbnRNZXRyaWNzLiRjaGFyYWN0ZXJTaXplLndpZHRofHwwfSx0aGlzLiRzZXRGb250TWV0cmljcz1mdW5jdGlvbihlKXt0aGlzLiRmb250TWV0cmljcz1lLHRoaXMuJGZvbnRNZXRyaWNzLm9uKCJjaGFuZ2VDaGFyYWN0ZXJTaXplIixmdW5jdGlvbihlKXt0aGlzLl9zaWduYWwoImNoYW5nZUNoYXJhY3RlclNpemUiLGUpfS5iaW5kKHRoaXMpKSx0aGlzLiRwb2xsU2l6ZUNoYW5nZXMoKX0sdGhpcy5jaGVja0ZvclNpemVDaGFuZ2VzPWZ1bmN0aW9uKCl7dGhpcy4kZm9udE1ldHJpY3MuY2hlY2tGb3JTaXplQ2hhbmdlcygpfSx0aGlzLiRwb2xsU2l6ZUNoYW5nZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcG9sbFNpemVDaGFuZ2VzVGltZXI9dGhpcy4kZm9udE1ldHJpY3MuJHBvbGxTaXplQ2hhbmdlcygpfSx0aGlzLnNldFNlc3Npb249ZnVuY3Rpb24oZSl7dGhpcy5zZXNzaW9uPWUsZSYmdGhpcy4kY29tcHV0ZVRhYlN0cmluZygpfSx0aGlzLnNob3dJbnZpc2libGVzPSExLHRoaXMuc2V0U2hvd0ludmlzaWJsZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc2hvd0ludmlzaWJsZXM9PWU/ITE6KHRoaXMuc2hvd0ludmlzaWJsZXM9ZSx0aGlzLiRjb21wdXRlVGFiU3RyaW5nKCksITApfSx0aGlzLmRpc3BsYXlJbmRlbnRHdWlkZXM9ITAsdGhpcy5zZXREaXNwbGF5SW5kZW50R3VpZGVzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRpc3BsYXlJbmRlbnRHdWlkZXM9PWU/ITE6KHRoaXMuZGlzcGxheUluZGVudEd1aWRlcz1lLHRoaXMuJGNvbXB1dGVUYWJTdHJpbmcoKSwhMCl9LHRoaXMuJHRhYlN0cmluZ3M9W10sdGhpcy5vbkNoYW5nZVRhYlNpemU9dGhpcy4kY29tcHV0ZVRhYlN0cmluZz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuc2Vzc2lvbi5nZXRUYWJTaXplKCk7dGhpcy50YWJTaXplPWU7dmFyIHQ9dGhpcy4kdGFiU3RyaW5ncz1bMF07Zm9yKHZhciBuPTE7bjxlKzE7bisrKWlmKHRoaXMuc2hvd0ludmlzaWJsZXMpe3ZhciByPXRoaXMuZG9tLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtyLmNsYXNzTmFtZT0iYWNlX2ludmlzaWJsZSBhY2VfaW52aXNpYmxlX3RhYiIsci50ZXh0Q29udGVudD1zLnN0cmluZ1JlcGVhdCh0aGlzLlRBQl9DSEFSLG4pLHQucHVzaChyKX1lbHNlIHQucHVzaCh0aGlzLmRvbS5jcmVhdGVUZXh0Tm9kZShzLnN0cmluZ1JlcGVhdCgiICIsbiksdGhpcy5lbGVtZW50KSk7aWYodGhpcy5kaXNwbGF5SW5kZW50R3VpZGVzKXt0aGlzLiRpbmRlbnRHdWlkZVJlPS9cc1xTfCBcdHxcdCB8XHMkLzt2YXIgaT0iYWNlX2luZGVudC1ndWlkZSIsbz0iIix1PSIiO2lmKHRoaXMuc2hvd0ludmlzaWJsZXMpe2krPSIgYWNlX2ludmlzaWJsZSIsbz0iIGFjZV9pbnZpc2libGVfc3BhY2UiLHU9IiBhY2VfaW52aXNpYmxlX3RhYiI7dmFyIGE9cy5zdHJpbmdSZXBlYXQodGhpcy5TUEFDRV9DSEFSLHRoaXMudGFiU2l6ZSksZj1zLnN0cmluZ1JlcGVhdCh0aGlzLlRBQl9DSEFSLHRoaXMudGFiU2l6ZSl9ZWxzZSB2YXIgYT1zLnN0cmluZ1JlcGVhdCgiICIsdGhpcy50YWJTaXplKSxmPWE7dmFyIHI9dGhpcy5kb20uY3JlYXRlRWxlbWVudCgic3BhbiIpO3IuY2xhc3NOYW1lPWkrbyxyLnRleHRDb250ZW50PWEsdGhpcy4kdGFiU3RyaW5nc1siICJdPXI7dmFyIHI9dGhpcy5kb20uY3JlYXRlRWxlbWVudCgic3BhbiIpO3IuY2xhc3NOYW1lPWkrdSxyLnRleHRDb250ZW50PWYsdGhpcy4kdGFiU3RyaW5nc1siCSJdPXJ9fSx0aGlzLnVwZGF0ZUxpbmVzPWZ1bmN0aW9uKGUsdCxuKXtpZih0aGlzLmNvbmZpZy5sYXN0Um93IT1lLmxhc3RSb3d8fHRoaXMuY29uZmlnLmZpcnN0Um93IT1lLmZpcnN0Um93KXJldHVybiB0aGlzLnVwZGF0ZShlKTt0aGlzLmNvbmZpZz1lO3ZhciByPU1hdGgubWF4KHQsZS5maXJzdFJvdyksaT1NYXRoLm1pbihuLGUubGFzdFJvdykscz10aGlzLmVsZW1lbnQuY2hpbGROb2RlcyxvPTA7Zm9yKHZhciB1PWUuZmlyc3RSb3c7dTxyO3UrKyl7dmFyIGE9dGhpcy5zZXNzaW9uLmdldEZvbGRMaW5lKHUpO2lmKGEpe2lmKGEuY29udGFpbnNSb3cocikpe3I9YS5zdGFydC5yb3c7YnJlYWt9dT1hLmVuZC5yb3d9bysrfXZhciBmPSExLHU9cixhPXRoaXMuc2Vzc2lvbi5nZXROZXh0Rm9sZExpbmUodSksbD1hP2Euc3RhcnQucm93OkluZmluaXR5O2Zvcig7Oyl7dT5sJiYodT1hLmVuZC5yb3crMSxhPXRoaXMuc2Vzc2lvbi5nZXROZXh0Rm9sZExpbmUodSxhKSxsPWE/YS5zdGFydC5yb3c6SW5maW5pdHkpO2lmKHU+aSlicmVhazt2YXIgYz1zW28rK107aWYoYyl7dGhpcy5kb20ucmVtb3ZlQ2hpbGRyZW4oYyksdGhpcy4kcmVuZGVyTGluZShjLHUsdT09bD9hOiExKSxmJiYoYy5zdHlsZS50b3A9dGhpcy4kbGluZXMuY29tcHV0ZUxpbmVUb3AodSxlLHRoaXMuc2Vzc2lvbikrInB4Iik7dmFyIGg9ZS5saW5lSGVpZ2h0KnRoaXMuc2Vzc2lvbi5nZXRSb3dMZW5ndGgodSkrInB4IjtjLnN0eWxlLmhlaWdodCE9aCYmKGY9ITAsYy5zdHlsZS5oZWlnaHQ9aCl9dSsrfWlmKGYpd2hpbGUobzx0aGlzLiRsaW5lcy5jZWxscy5sZW5ndGgpe3ZhciBwPXRoaXMuJGxpbmVzLmNlbGxzW28rK107cC5lbGVtZW50LnN0eWxlLnRvcD10aGlzLiRsaW5lcy5jb21wdXRlTGluZVRvcChwLnJvdyxlLHRoaXMuc2Vzc2lvbikrInB4In19LHRoaXMuc2Nyb2xsTGluZXM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jb25maWc7dGhpcy5jb25maWc9ZTtpZih0aGlzLiRsaW5lcy5wYWdlQ2hhbmdlZCh0LGUpKXJldHVybiB0aGlzLnVwZGF0ZShlKTt0aGlzLiRsaW5lcy5tb3ZlQ29udGFpbmVyKGUpO3ZhciBuPWUubGFzdFJvdyxyPXQ/dC5sYXN0Um93Oi0xO2lmKCF0fHxyPGUuZmlyc3RSb3cpcmV0dXJuIHRoaXMudXBkYXRlKGUpO2lmKG48dC5maXJzdFJvdylyZXR1cm4gdGhpcy51cGRhdGUoZSk7aWYoIXR8fHQubGFzdFJvdzxlLmZpcnN0Um93KXJldHVybiB0aGlzLnVwZGF0ZShlKTtpZihlLmxhc3RSb3c8dC5maXJzdFJvdylyZXR1cm4gdGhpcy51cGRhdGUoZSk7aWYodC5maXJzdFJvdzxlLmZpcnN0Um93KWZvcih2YXIgaT10aGlzLnNlc3Npb24uZ2V0Rm9sZGVkUm93Q291bnQodC5maXJzdFJvdyxlLmZpcnN0Um93LTEpO2k+MDtpLS0pdGhpcy4kbGluZXMuc2hpZnQoKTtpZih0Lmxhc3RSb3c+ZS5sYXN0Um93KWZvcih2YXIgaT10aGlzLnNlc3Npb24uZ2V0Rm9sZGVkUm93Q291bnQoZS5sYXN0Um93KzEsdC5sYXN0Um93KTtpPjA7aS0tKXRoaXMuJGxpbmVzLnBvcCgpO2UuZmlyc3RSb3c8dC5maXJzdFJvdyYmdGhpcy4kbGluZXMudW5zaGlmdCh0aGlzLiRyZW5kZXJMaW5lc0ZyYWdtZW50KGUsZS5maXJzdFJvdyx0LmZpcnN0Um93LTEpKSxlLmxhc3RSb3c+dC5sYXN0Um93JiZ0aGlzLiRsaW5lcy5wdXNoKHRoaXMuJHJlbmRlckxpbmVzRnJhZ21lbnQoZSx0Lmxhc3RSb3crMSxlLmxhc3RSb3cpKX0sdGhpcy4kcmVuZGVyTGluZXNGcmFnbWVudD1mdW5jdGlvbihlLHQsbil7dmFyIHI9W10scz10LG89dGhpcy5zZXNzaW9uLmdldE5leHRGb2xkTGluZShzKSx1PW8/by5zdGFydC5yb3c6SW5maW5pdHk7Zm9yKDs7KXtzPnUmJihzPW8uZW5kLnJvdysxLG89dGhpcy5zZXNzaW9uLmdldE5leHRGb2xkTGluZShzLG8pLHU9bz9vLnN0YXJ0LnJvdzpJbmZpbml0eSk7aWYocz5uKWJyZWFrO3ZhciBhPXRoaXMuJGxpbmVzLmNyZWF0ZUNlbGwocyxlLHRoaXMuc2Vzc2lvbiksZj1hLmVsZW1lbnQ7dGhpcy5kb20ucmVtb3ZlQ2hpbGRyZW4oZiksaS5zZXRTdHlsZShmLnN0eWxlLCJoZWlnaHQiLHRoaXMuJGxpbmVzLmNvbXB1dGVMaW5lSGVpZ2h0KHMsZSx0aGlzLnNlc3Npb24pKyJweCIpLGkuc2V0U3R5bGUoZi5zdHlsZSwidG9wIix0aGlzLiRsaW5lcy5jb21wdXRlTGluZVRvcChzLGUsdGhpcy5zZXNzaW9uKSsicHgiKSx0aGlzLiRyZW5kZXJMaW5lKGYscyxzPT11P286ITEpLHRoaXMuJHVzZUxpbmVHcm91cHMoKT9mLmNsYXNzTmFtZT0iYWNlX2xpbmVfZ3JvdXAiOmYuY2xhc3NOYW1lPSJhY2VfbGluZSIsci5wdXNoKGEpLHMrK31yZXR1cm4gcn0sdGhpcy51cGRhdGU9ZnVuY3Rpb24oZSl7dGhpcy4kbGluZXMubW92ZUNvbnRhaW5lcihlKSx0aGlzLmNvbmZpZz1lO3ZhciB0PWUuZmlyc3RSb3csbj1lLmxhc3RSb3cscj10aGlzLiRsaW5lczt3aGlsZShyLmdldExlbmd0aCgpKXIucG9wKCk7ci5wdXNoKHRoaXMuJHJlbmRlckxpbmVzRnJhZ21lbnQoZSx0LG4pKX0sdGhpcy4kdGV4dFRva2VuPXt0ZXh0OiEwLHJwYXJlbjohMCxscGFyZW46ITB9LHRoaXMuJHJlbmRlclRva2VuPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXRoaXMsbz0vKFx0KXwoICspfChbXHgwMC1ceDFmXHg4MC1ceGEwXHhhZFx1MTY4MFx1MTgwRVx1MjAwMC1cdTIwMGZcdTIwMjhcdTIwMjlcdTIwMkZcdTIwNUZcdUZFRkZcdUZGRjktXHVGRkZDXSspfChcdTMwMDApfChbXHUxMTAwLVx1MTE1Rlx1MTFBMy1cdTExQTdcdTExRkEtXHUxMUZGXHUyMzI5LVx1MjMyQVx1MkU4MC1cdTJFOTlcdTJFOUItXHUyRUYzXHUyRjAwLVx1MkZENVx1MkZGMC1cdTJGRkJcdTMwMDEtXHUzMDNFXHUzMDQxLVx1MzA5Nlx1MzA5OS1cdTMwRkZcdTMxMDUtXHUzMTJEXHUzMTMxLVx1MzE4RVx1MzE5MC1cdTMxQkFcdTMxQzAtXHUzMUUzXHUzMUYwLVx1MzIxRVx1MzIyMC1cdTMyNDdcdTMyNTAtXHUzMkZFXHUzMzAwLVx1NERCRlx1NEUwMC1cdUE0OENcdUE0OTAtXHVBNEM2XHVBOTYwLVx1QTk3Q1x1QUMwMC1cdUQ3QTNcdUQ3QjAtXHVEN0M2XHVEN0NCLVx1RDdGQlx1RjkwMC1cdUZBRkZcdUZFMTAtXHVGRTE5XHVGRTMwLVx1RkU1Mlx1RkU1NC1cdUZFNjZcdUZFNjgtXHVGRTZCXHVGRjAxLVx1RkY2MFx1RkZFMC1cdUZGRTZdfFtcdUQ4MDAtXHVEQkZGXVtcdURDMDAtXHVERkZGXSkvZyx1PXRoaXMuZG9tLmNyZWF0ZUZyYWdtZW50KHRoaXMuZWxlbWVudCksYSxmPTA7d2hpbGUoYT1vLmV4ZWMocikpe3ZhciBsPWFbMV0sYz1hWzJdLGg9YVszXSxwPWFbNF0sZD1hWzVdO2lmKCFpLnNob3dJbnZpc2libGVzJiZjKWNvbnRpbnVlO3ZhciB2PWYhPWEuaW5kZXg/ci5zbGljZShmLGEuaW5kZXgpOiIiO2Y9YS5pbmRleCthWzBdLmxlbmd0aCx2JiZ1LmFwcGVuZENoaWxkKHRoaXMuZG9tLmNyZWF0ZVRleHROb2RlKHYsdGhpcy5lbGVtZW50KSk7aWYobCl7dmFyIG09aS5zZXNzaW9uLmdldFNjcmVlblRhYlNpemUodCthLmluZGV4KTt1LmFwcGVuZENoaWxkKGkuJHRhYlN0cmluZ3NbbV0uY2xvbmVOb2RlKCEwKSksdCs9bS0xfWVsc2UgaWYoYylpZihpLnNob3dJbnZpc2libGVzKXt2YXIgZz10aGlzLmRvbS5jcmVhdGVFbGVtZW50KCJzcGFuIik7Zy5jbGFzc05hbWU9ImFjZV9pbnZpc2libGUgYWNlX2ludmlzaWJsZV9zcGFjZSIsZy50ZXh0Q29udGVudD1zLnN0cmluZ1JlcGVhdChpLlNQQUNFX0NIQVIsYy5sZW5ndGgpLHUuYXBwZW5kQ2hpbGQoZyl9ZWxzZSB1LmFwcGVuZENoaWxkKHRoaXMuY29tLmNyZWF0ZVRleHROb2RlKGMsdGhpcy5lbGVtZW50KSk7ZWxzZSBpZihoKXt2YXIgZz10aGlzLmRvbS5jcmVhdGVFbGVtZW50KCJzcGFuIik7Zy5jbGFzc05hbWU9ImFjZV9pbnZpc2libGUgYWNlX2ludmlzaWJsZV9zcGFjZSBhY2VfaW52YWxpZCIsZy50ZXh0Q29udGVudD1zLnN0cmluZ1JlcGVhdChpLlNQQUNFX0NIQVIsaC5sZW5ndGgpLHUuYXBwZW5kQ2hpbGQoZyl9ZWxzZSBpZihwKXt0Kz0xO3ZhciBnPXRoaXMuZG9tLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtnLnN0eWxlLndpZHRoPWkuY29uZmlnLmNoYXJhY3RlcldpZHRoKjIrInB4IixnLmNsYXNzTmFtZT1pLnNob3dJbnZpc2libGVzPyJhY2VfY2prIGFjZV9pbnZpc2libGUgYWNlX2ludmlzaWJsZV9zcGFjZSI6ImFjZV9jamsiLGcudGV4dENvbnRlbnQ9aS5zaG93SW52aXNpYmxlcz9pLlNQQUNFX0NIQVI6cCx1LmFwcGVuZENoaWxkKGcpfWVsc2UgaWYoZCl7dCs9MTt2YXIgZz10aGlzLmRvbS5jcmVhdGVFbGVtZW50KCJzcGFuIik7Zy5zdHlsZS53aWR0aD1pLmNvbmZpZy5jaGFyYWN0ZXJXaWR0aCoyKyJweCIsZy5jbGFzc05hbWU9ImFjZV9jamsiLGcudGV4dENvbnRlbnQ9ZCx1LmFwcGVuZENoaWxkKGcpfX11LmFwcGVuZENoaWxkKHRoaXMuZG9tLmNyZWF0ZVRleHROb2RlKGY/ci5zbGljZShmKTpyLHRoaXMuZWxlbWVudCkpO2lmKCF0aGlzLiR0ZXh0VG9rZW5bbi50eXBlXSl7dmFyIHk9ImFjZV8iK24udHlwZS5yZXBsYWNlKC9cLi9nLCIgYWNlXyIpLGc9dGhpcy5kb20uY3JlYXRlRWxlbWVudCgic3BhbiIpO24udHlwZT09ImZvbGQiJiYoZy5zdHlsZS53aWR0aD1uLnZhbHVlLmxlbmd0aCp0aGlzLmNvbmZpZy5jaGFyYWN0ZXJXaWR0aCsicHgiKSxnLmNsYXNzTmFtZT15LGcuYXBwZW5kQ2hpbGQodSksZS5hcHBlbmRDaGlsZChnKX1lbHNlIGUuYXBwZW5kQ2hpbGQodSk7cmV0dXJuIHQrci5sZW5ndGh9LHRoaXMucmVuZGVySW5kZW50R3VpZGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQuc2VhcmNoKHRoaXMuJGluZGVudEd1aWRlUmUpO2lmKHI8PTB8fHI+PW4pcmV0dXJuIHQ7aWYodFswXT09IiAiKXtyLT1yJXRoaXMudGFiU2l6ZTt2YXIgaT1yL3RoaXMudGFiU2l6ZTtmb3IodmFyIHM9MDtzPGk7cysrKWUuYXBwZW5kQ2hpbGQodGhpcy4kdGFiU3RyaW5nc1siICJdLmNsb25lTm9kZSghMCkpO3JldHVybiB0LnN1YnN0cihyKX1pZih0WzBdPT0iCSIpe2Zvcih2YXIgcz0wO3M8cjtzKyspZS5hcHBlbmRDaGlsZCh0aGlzLiR0YWJTdHJpbmdzWyIJIl0uY2xvbmVOb2RlKCEwKSk7cmV0dXJuIHQuc3Vic3RyKHIpfXJldHVybiB0fSx0aGlzLiRjcmVhdGVMaW5lRWxlbWVudD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmRvbS5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gdC5jbGFzc05hbWU9ImFjZV9saW5lIix0LnN0eWxlLmhlaWdodD10aGlzLmNvbmZpZy5saW5lSGVpZ2h0KyJweCIsdH0sdGhpcy4kcmVuZGVyV3JhcHBlZExpbmU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPTAsaT0wLG89blswXSx1PTAsYT10aGlzLiRjcmVhdGVMaW5lRWxlbWVudCgpO2UuYXBwZW5kQ2hpbGQoYSk7Zm9yKHZhciBmPTA7Zjx0Lmxlbmd0aDtmKyspe3ZhciBsPXRbZl0sYz1sLnZhbHVlO2lmKGY9PTAmJnRoaXMuZGlzcGxheUluZGVudEd1aWRlcyl7cj1jLmxlbmd0aCxjPXRoaXMucmVuZGVySW5kZW50R3VpZGUoYSxjLG8pO2lmKCFjKWNvbnRpbnVlO3ItPWMubGVuZ3RofWlmKHIrYy5sZW5ndGg8byl1PXRoaXMuJHJlbmRlclRva2VuKGEsdSxsLGMpLHIrPWMubGVuZ3RoO2Vsc2V7d2hpbGUocitjLmxlbmd0aD49byl1PXRoaXMuJHJlbmRlclRva2VuKGEsdSxsLGMuc3Vic3RyaW5nKDAsby1yKSksYz1jLnN1YnN0cmluZyhvLXIpLHI9byxhPXRoaXMuJGNyZWF0ZUxpbmVFbGVtZW50KCksZS5hcHBlbmRDaGlsZChhKSxhLmFwcGVuZENoaWxkKHRoaXMuZG9tLmNyZWF0ZVRleHROb2RlKHMuc3RyaW5nUmVwZWF0KCJcdTAwYTAiLG4uaW5kZW50KSx0aGlzLmVsZW1lbnQpKSxpKyssdT0wLG89bltpXXx8TnVtYmVyLk1BWF9WQUxVRTtjLmxlbmd0aCE9MCYmKHIrPWMubGVuZ3RoLHU9dGhpcy4kcmVuZGVyVG9rZW4oYSx1LGwsYykpfX1uW24ubGVuZ3RoLTFdPnRoaXMuTUFYX0xJTkVfTEVOR1RIJiZ0aGlzLiRyZW5kZXJPdmVyZmxvd01lc3NhZ2UoYSx1LG51bGwsIiIsITApfSx0aGlzLiRyZW5kZXJTaW1wbGVMaW5lPWZ1bmN0aW9uKGUsdCl7dmFyIG49MCxyPXRbMF0saT1yLnZhbHVlO3RoaXMuZGlzcGxheUluZGVudEd1aWRlcyYmKGk9dGhpcy5yZW5kZXJJbmRlbnRHdWlkZShlLGkpKSxpJiYobj10aGlzLiRyZW5kZXJUb2tlbihlLG4scixpKSk7Zm9yKHZhciBzPTE7czx0Lmxlbmd0aDtzKyspe3I9dFtzXSxpPXIudmFsdWU7aWYobitpLmxlbmd0aD50aGlzLk1BWF9MSU5FX0xFTkdUSClyZXR1cm4gdGhpcy4kcmVuZGVyT3ZlcmZsb3dNZXNzYWdlKGUsbixyLGkpO249dGhpcy4kcmVuZGVyVG9rZW4oZSxuLHIsaSl9fSx0aGlzLiRyZW5kZXJPdmVyZmxvd01lc3NhZ2U9ZnVuY3Rpb24oZSx0LG4scixpKXtuJiZ0aGlzLiRyZW5kZXJUb2tlbihlLHQsbixyLnNsaWNlKDAsdGhpcy5NQVhfTElORV9MRU5HVEgtdCkpO3ZhciBzPXRoaXMuZG9tLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtzLmNsYXNzTmFtZT0iYWNlX2lubGluZV9idXR0b24gYWNlX2tleXdvcmQgYWNlX3RvZ2dsZV93cmFwIixzLnRleHRDb250ZW50PWk/IjxoaWRlPiI6IjxjbGljayB0byBzZWUgbW9yZS4uLj4iLGUuYXBwZW5kQ2hpbGQocyl9LHRoaXMuJHJlbmRlckxpbmU9ZnVuY3Rpb24oZSx0LG4peyFuJiZuIT0wJiYobj10aGlzLnNlc3Npb24uZ2V0Rm9sZExpbmUodCkpO2lmKG4pdmFyIHI9dGhpcy4kZ2V0Rm9sZExpbmVUb2tlbnModCxuKTtlbHNlIHZhciByPXRoaXMuc2Vzc2lvbi5nZXRUb2tlbnModCk7dmFyIGk9ZTtpZihyLmxlbmd0aCl7dmFyIHM9dGhpcy5zZXNzaW9uLmdldFJvd1NwbGl0RGF0YSh0KTtpZihzJiZzLmxlbmd0aCl7dGhpcy4kcmVuZGVyV3JhcHBlZExpbmUoZSxyLHMpO3ZhciBpPWUubGFzdENoaWxkfWVsc2V7dmFyIGk9ZTt0aGlzLiR1c2VMaW5lR3JvdXBzKCkmJihpPXRoaXMuJGNyZWF0ZUxpbmVFbGVtZW50KCksZS5hcHBlbmRDaGlsZChpKSksdGhpcy4kcmVuZGVyU2ltcGxlTGluZShpLHIpfX1lbHNlIHRoaXMuJHVzZUxpbmVHcm91cHMoKSYmKGk9dGhpcy4kY3JlYXRlTGluZUVsZW1lbnQoKSxlLmFwcGVuZENoaWxkKGkpKTtpZih0aGlzLnNob3dJbnZpc2libGVzJiZpKXtuJiYodD1uLmVuZC5yb3cpO3ZhciBvPXRoaXMuZG9tLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtvLmNsYXNzTmFtZT0iYWNlX2ludmlzaWJsZSBhY2VfaW52aXNpYmxlX2VvbCIsby50ZXh0Q29udGVudD10PT10aGlzLnNlc3Npb24uZ2V0TGVuZ3RoKCktMT90aGlzLkVPRl9DSEFSOnRoaXMuRU9MX0NIQVIsaS5hcHBlbmRDaGlsZChvKX19LHRoaXMuJGdldEZvbGRMaW5lVG9rZW5zPWZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaShlLHQsbil7dmFyIGk9MCxzPTA7d2hpbGUocytlW2ldLnZhbHVlLmxlbmd0aDx0KXtzKz1lW2ldLnZhbHVlLmxlbmd0aCxpKys7aWYoaT09ZS5sZW5ndGgpcmV0dXJufWlmKHMhPXQpe3ZhciBvPWVbaV0udmFsdWUuc3Vic3RyaW5nKHQtcyk7by5sZW5ndGg+bi10JiYobz1vLnN1YnN0cmluZygwLG4tdCkpLHIucHVzaCh7dHlwZTplW2ldLnR5cGUsdmFsdWU6b30pLHM9dCtvLmxlbmd0aCxpKz0xfXdoaWxlKHM8biYmaTxlLmxlbmd0aCl7dmFyIG89ZVtpXS52YWx1ZTtvLmxlbmd0aCtzPm4/ci5wdXNoKHt0eXBlOmVbaV0udHlwZSx2YWx1ZTpvLnN1YnN0cmluZygwLG4tcyl9KTpyLnB1c2goZVtpXSkscys9by5sZW5ndGgsaSs9MX19dmFyIG49dGhpcy5zZXNzaW9uLHI9W10scz1uLmdldFRva2VucyhlKTtyZXR1cm4gdC53YWxrKGZ1bmN0aW9uKGUsdCxvLHUsYSl7ZSE9bnVsbD9yLnB1c2goe3R5cGU6ImZvbGQiLHZhbHVlOmV9KTooYSYmKHM9bi5nZXRUb2tlbnModCkpLHMubGVuZ3RoJiZpKHMsdSxvKSl9LHQuZW5kLnJvdyx0aGlzLnNlc3Npb24uZ2V0TGluZSh0LmVuZC5yb3cpLmxlbmd0aCkscn0sdGhpcy4kdXNlTGluZUdyb3Vwcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlc3Npb24uZ2V0VXNlV3JhcE1vZGUoKX0sdGhpcy5kZXN0cm95PWZ1bmN0aW9uKCl7fX0pLmNhbGwoYS5wcm90b3R5cGUpLHQuVGV4dD1hfSksYWNlLmRlZmluZSgiYWNlL2xheWVyL2N1cnNvciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvZG9tIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuLi9saWIvZG9tIiksaT1mdW5jdGlvbihlKXt0aGlzLmVsZW1lbnQ9ci5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmVsZW1lbnQuY2xhc3NOYW1lPSJhY2VfbGF5ZXIgYWNlX2N1cnNvci1sYXllciIsZS5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpLHRoaXMuaXNWaXNpYmxlPSExLHRoaXMuaXNCbGlua2luZz0hMCx0aGlzLmJsaW5rSW50ZXJ2YWw9MWUzLHRoaXMuc21vb3RoQmxpbmtpbmc9ITEsdGhpcy5jdXJzb3JzPVtdLHRoaXMuY3Vyc29yPXRoaXMuYWRkQ3Vyc29yKCksci5hZGRDc3NDbGFzcyh0aGlzLmVsZW1lbnQsImFjZV9oaWRkZW4tY3Vyc29ycyIpLHRoaXMuJHVwZGF0ZUN1cnNvcnM9dGhpcy4kdXBkYXRlT3BhY2l0eS5iaW5kKHRoaXMpfTsoZnVuY3Rpb24oKXt0aGlzLiR1cGRhdGVPcGFjaXR5PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY3Vyc29ycztmb3IodmFyIG49dC5sZW5ndGg7bi0tOylyLnNldFN0eWxlKHRbbl0uc3R5bGUsIm9wYWNpdHkiLGU/IiI6IjAiKX0sdGhpcy4kc3RhcnRDc3NBbmltYXRpb249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmN1cnNvcnM7Zm9yKHZhciB0PWUubGVuZ3RoO3QtLTspZVt0XS5zdHlsZS5hbmltYXRpb25EdXJhdGlvbj10aGlzLmJsaW5rSW50ZXJ2YWwrIm1zIjtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ci5hZGRDc3NDbGFzcyh0aGlzLmVsZW1lbnQsImFjZV9hbmltYXRlLWJsaW5raW5nIil9LmJpbmQodGhpcykpfSx0aGlzLiRzdG9wQ3NzQW5pbWF0aW9uPWZ1bmN0aW9uKCl7ci5yZW1vdmVDc3NDbGFzcyh0aGlzLmVsZW1lbnQsImFjZV9hbmltYXRlLWJsaW5raW5nIil9LHRoaXMuJHBhZGRpbmc9MCx0aGlzLnNldFBhZGRpbmc9ZnVuY3Rpb24oZSl7dGhpcy4kcGFkZGluZz1lfSx0aGlzLnNldFNlc3Npb249ZnVuY3Rpb24oZSl7dGhpcy5zZXNzaW9uPWV9LHRoaXMuc2V0Qmxpbmtpbmc9ZnVuY3Rpb24oZSl7ZSE9dGhpcy5pc0JsaW5raW5nJiYodGhpcy5pc0JsaW5raW5nPWUsdGhpcy5yZXN0YXJ0VGltZXIoKSl9LHRoaXMuc2V0QmxpbmtJbnRlcnZhbD1mdW5jdGlvbihlKXtlIT10aGlzLmJsaW5rSW50ZXJ2YWwmJih0aGlzLmJsaW5rSW50ZXJ2YWw9ZSx0aGlzLnJlc3RhcnRUaW1lcigpKX0sdGhpcy5zZXRTbW9vdGhCbGlua2luZz1mdW5jdGlvbihlKXtlIT10aGlzLnNtb290aEJsaW5raW5nJiYodGhpcy5zbW9vdGhCbGlua2luZz1lLHIuc2V0Q3NzQ2xhc3ModGhpcy5lbGVtZW50LCJhY2Vfc21vb3RoLWJsaW5raW5nIixlKSx0aGlzLiR1cGRhdGVDdXJzb3JzKCEwKSx0aGlzLnJlc3RhcnRUaW1lcigpKX0sdGhpcy5hZGRDdXJzb3I9ZnVuY3Rpb24oKXt2YXIgZT1yLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBlLmNsYXNzTmFtZT0iYWNlX2N1cnNvciIsdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGUpLHRoaXMuY3Vyc29ycy5wdXNoKGUpLGV9LHRoaXMucmVtb3ZlQ3Vyc29yPWZ1bmN0aW9uKCl7aWYodGhpcy5jdXJzb3JzLmxlbmd0aD4xKXt2YXIgZT10aGlzLmN1cnNvcnMucG9wKCk7cmV0dXJuIGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKSxlfX0sdGhpcy5oaWRlQ3Vyc29yPWZ1bmN0aW9uKCl7dGhpcy5pc1Zpc2libGU9ITEsci5hZGRDc3NDbGFzcyh0aGlzLmVsZW1lbnQsImFjZV9oaWRkZW4tY3Vyc29ycyIpLHRoaXMucmVzdGFydFRpbWVyKCl9LHRoaXMuc2hvd0N1cnNvcj1mdW5jdGlvbigpe3RoaXMuaXNWaXNpYmxlPSEwLHIucmVtb3ZlQ3NzQ2xhc3ModGhpcy5lbGVtZW50LCJhY2VfaGlkZGVuLWN1cnNvcnMiKSx0aGlzLnJlc3RhcnRUaW1lcigpfSx0aGlzLnJlc3RhcnRUaW1lcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuJHVwZGF0ZUN1cnNvcnM7Y2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsSWQpLGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRJZCksdGhpcy4kc3RvcENzc0FuaW1hdGlvbigpLHRoaXMuc21vb3RoQmxpbmtpbmcmJnIucmVtb3ZlQ3NzQ2xhc3ModGhpcy5lbGVtZW50LCJhY2Vfc21vb3RoLWJsaW5raW5nIiksZSghMCk7aWYoIXRoaXMuaXNCbGlua2luZ3x8IXRoaXMuYmxpbmtJbnRlcnZhbHx8IXRoaXMuaXNWaXNpYmxlKXt0aGlzLiRzdG9wQ3NzQW5pbWF0aW9uKCk7cmV0dXJufXRoaXMuc21vb3RoQmxpbmtpbmcmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyLmFkZENzc0NsYXNzKHRoaXMuZWxlbWVudCwiYWNlX3Ntb290aC1ibGlua2luZyIpfS5iaW5kKHRoaXMpKTtpZihyLkhBU19DU1NfQU5JTUFUSU9OKXRoaXMuJHN0YXJ0Q3NzQW5pbWF0aW9uKCk7ZWxzZXt2YXIgdD1mdW5jdGlvbigpe3RoaXMudGltZW91dElkPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlKCExKX0sLjYqdGhpcy5ibGlua0ludGVydmFsKX0uYmluZCh0aGlzKTt0aGlzLmludGVydmFsSWQ9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtlKCEwKSx0KCl9LHRoaXMuYmxpbmtJbnRlcnZhbCksdCgpfX0sdGhpcy5nZXRQaXhlbFBvc2l0aW9uPWZ1bmN0aW9uKGUsdCl7aWYoIXRoaXMuY29uZmlnfHwhdGhpcy5zZXNzaW9uKXJldHVybntsZWZ0OjAsdG9wOjB9O2V8fChlPXRoaXMuc2Vzc2lvbi5zZWxlY3Rpb24uZ2V0Q3Vyc29yKCkpO3ZhciBuPXRoaXMuc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24oZSkscj10aGlzLiRwYWRkaW5nKyh0aGlzLnNlc3Npb24uJGJpZGlIYW5kbGVyLmlzQmlkaVJvdyhuLnJvdyxlLnJvdyk/dGhpcy5zZXNzaW9uLiRiaWRpSGFuZGxlci5nZXRQb3NMZWZ0KG4uY29sdW1uKTpuLmNvbHVtbip0aGlzLmNvbmZpZy5jaGFyYWN0ZXJXaWR0aCksaT0obi5yb3ctKHQ/dGhpcy5jb25maWcuZmlyc3RSb3dTY3JlZW46MCkpKnRoaXMuY29uZmlnLmxpbmVIZWlnaHQ7cmV0dXJue2xlZnQ6cix0b3A6aX19LHRoaXMuaXNDdXJzb3JJblZpZXc9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50b3A+PTAmJmUudG9wPHQubWF4SGVpZ2h0fSx0aGlzLnVwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLmNvbmZpZz1lO3ZhciB0PXRoaXMuc2Vzc2lvbi4kc2VsZWN0aW9uTWFya2VycyxuPTAsaT0wO2lmKHQ9PT11bmRlZmluZWR8fHQubGVuZ3RoPT09MCl0PVt7Y3Vyc29yOm51bGx9XTtmb3IodmFyIG49MCxzPXQubGVuZ3RoO248cztuKyspe3ZhciBvPXRoaXMuZ2V0UGl4ZWxQb3NpdGlvbih0W25dLmN1cnNvciwhMCk7aWYoKG8udG9wPmUuaGVpZ2h0K2Uub2Zmc2V0fHxvLnRvcDwwKSYmbj4xKWNvbnRpbnVlO3ZhciB1PXRoaXMuY3Vyc29yc1tpKytdfHx0aGlzLmFkZEN1cnNvcigpLGE9dS5zdHlsZTt0aGlzLmRyYXdDdXJzb3I/dGhpcy5kcmF3Q3Vyc29yKHUsbyxlLHRbbl0sdGhpcy5zZXNzaW9uKTp0aGlzLmlzQ3Vyc29ySW5WaWV3KG8sZSk/KHIuc2V0U3R5bGUoYSwiZGlzcGxheSIsImJsb2NrIiksci50cmFuc2xhdGUodSxvLmxlZnQsby50b3ApLHIuc2V0U3R5bGUoYSwid2lkdGgiLE1hdGgucm91bmQoZS5jaGFyYWN0ZXJXaWR0aCkrInB4Iiksci5zZXRTdHlsZShhLCJoZWlnaHQiLGUubGluZUhlaWdodCsicHgiKSk6ci5zZXRTdHlsZShhLCJkaXNwbGF5Iiwibm9uZSIpfXdoaWxlKHRoaXMuY3Vyc29ycy5sZW5ndGg+aSl0aGlzLnJlbW92ZUN1cnNvcigpO3ZhciBmPXRoaXMuc2Vzc2lvbi5nZXRPdmVyd3JpdGUoKTt0aGlzLiRzZXRPdmVyd3JpdGUoZiksdGhpcy4kcGl4ZWxQb3M9byx0aGlzLnJlc3RhcnRUaW1lcigpfSx0aGlzLmRyYXdDdXJzb3I9bnVsbCx0aGlzLiRzZXRPdmVyd3JpdGU9ZnVuY3Rpb24oZSl7ZSE9dGhpcy5vdmVyd3JpdGUmJih0aGlzLm92ZXJ3cml0ZT1lLGU/ci5hZGRDc3NDbGFzcyh0aGlzLmVsZW1lbnQsImFjZV9vdmVyd3JpdGUtY3Vyc29ycyIpOnIucmVtb3ZlQ3NzQ2xhc3ModGhpcy5lbGVtZW50LCJhY2Vfb3ZlcndyaXRlLWN1cnNvcnMiKSl9LHRoaXMuZGVzdHJveT1mdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbElkKSxjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0SWQpfX0pLmNhbGwoaS5wcm90b3R5cGUpLHQuQ3Vyc29yPWl9KSxhY2UuZGVmaW5lKCJhY2Uvc2Nyb2xsYmFyIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2RvbSIsImFjZS9saWIvZXZlbnQiLCJhY2UvbGliL2V2ZW50X2VtaXR0ZXIiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoIi4vbGliL29vcCIpLGk9ZSgiLi9saWIvZG9tIikscz1lKCIuL2xpYi9ldmVudCIpLG89ZSgiLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcix1PTMyNzY4LGE9ZnVuY3Rpb24oZSl7dGhpcy5lbGVtZW50PWkuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5lbGVtZW50LmNsYXNzTmFtZT0iYWNlX3Njcm9sbGJhciBhY2Vfc2Nyb2xsYmFyIit0aGlzLmNsYXNzU3VmZml4LHRoaXMuaW5uZXI9aS5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmlubmVyLmNsYXNzTmFtZT0iYWNlX3Njcm9sbGJhci1pbm5lciIsdGhpcy5pbm5lci50ZXh0Q29udGVudD0iXHUwMGEwIix0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lciksZS5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpLHRoaXMuc2V0VmlzaWJsZSghMSksdGhpcy5za2lwRXZlbnQ9ITEscy5hZGRMaXN0ZW5lcih0aGlzLmVsZW1lbnQsInNjcm9sbCIsdGhpcy5vblNjcm9sbC5iaW5kKHRoaXMpKSxzLmFkZExpc3RlbmVyKHRoaXMuZWxlbWVudCwibW91c2Vkb3duIixzLnByZXZlbnREZWZhdWx0KX07KGZ1bmN0aW9uKCl7ci5pbXBsZW1lbnQodGhpcyxvKSx0aGlzLnNldFZpc2libGU9ZnVuY3Rpb24oZSl7dGhpcy5lbGVtZW50LnN0eWxlLmRpc3BsYXk9ZT8iIjoibm9uZSIsdGhpcy5pc1Zpc2libGU9ZSx0aGlzLmNvZWZmPTF9fSkuY2FsbChhLnByb3RvdHlwZSk7dmFyIGY9ZnVuY3Rpb24oZSx0KXthLmNhbGwodGhpcyxlKSx0aGlzLnNjcm9sbFRvcD0wLHRoaXMuc2Nyb2xsSGVpZ2h0PTAsdC4kc2Nyb2xsYmFyV2lkdGg9dGhpcy53aWR0aD1pLnNjcm9sbGJhcldpZHRoKGUub3duZXJEb2N1bWVudCksdGhpcy5pbm5lci5zdHlsZS53aWR0aD10aGlzLmVsZW1lbnQuc3R5bGUud2lkdGg9KHRoaXMud2lkdGh8fDE1KSs1KyJweCIsdGhpcy4kbWluV2lkdGg9MH07ci5pbmhlcml0cyhmLGEpLGZ1bmN0aW9uKCl7dGhpcy5jbGFzc1N1ZmZpeD0iLXYiLHRoaXMub25TY3JvbGw9ZnVuY3Rpb24oKXtpZighdGhpcy5za2lwRXZlbnQpe3RoaXMuc2Nyb2xsVG9wPXRoaXMuZWxlbWVudC5zY3JvbGxUb3A7aWYodGhpcy5jb2VmZiE9MSl7dmFyIGU9dGhpcy5lbGVtZW50LmNsaWVudEhlaWdodC90aGlzLnNjcm9sbEhlaWdodDt0aGlzLnNjcm9sbFRvcD10aGlzLnNjcm9sbFRvcCooMS1lKS8odGhpcy5jb2VmZi1lKX10aGlzLl9lbWl0KCJzY3JvbGwiLHtkYXRhOnRoaXMuc2Nyb2xsVG9wfSl9dGhpcy5za2lwRXZlbnQ9ITF9LHRoaXMuZ2V0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5tYXgodGhpcy5pc1Zpc2libGU/dGhpcy53aWR0aDowLHRoaXMuJG1pbldpZHRofHwwKX0sdGhpcy5zZXRIZWlnaHQ9ZnVuY3Rpb24oZSl7dGhpcy5lbGVtZW50LnN0eWxlLmhlaWdodD1lKyJweCJ9LHRoaXMuc2V0SW5uZXJIZWlnaHQ9dGhpcy5zZXRTY3JvbGxIZWlnaHQ9ZnVuY3Rpb24oZSl7dGhpcy5zY3JvbGxIZWlnaHQ9ZSxlPnU/KHRoaXMuY29lZmY9dS9lLGU9dSk6dGhpcy5jb2VmZiE9MSYmKHRoaXMuY29lZmY9MSksdGhpcy5pbm5lci5zdHlsZS5oZWlnaHQ9ZSsicHgifSx0aGlzLnNldFNjcm9sbFRvcD1mdW5jdGlvbihlKXt0aGlzLnNjcm9sbFRvcCE9ZSYmKHRoaXMuc2tpcEV2ZW50PSEwLHRoaXMuc2Nyb2xsVG9wPWUsdGhpcy5lbGVtZW50LnNjcm9sbFRvcD1lKnRoaXMuY29lZmYpfX0uY2FsbChmLnByb3RvdHlwZSk7dmFyIGw9ZnVuY3Rpb24oZSx0KXthLmNhbGwodGhpcyxlKSx0aGlzLnNjcm9sbExlZnQ9MCx0aGlzLmhlaWdodD10LiRzY3JvbGxiYXJXaWR0aCx0aGlzLmlubmVyLnN0eWxlLmhlaWdodD10aGlzLmVsZW1lbnQuc3R5bGUuaGVpZ2h0PSh0aGlzLmhlaWdodHx8MTUpKzUrInB4In07ci5pbmhlcml0cyhsLGEpLGZ1bmN0aW9uKCl7dGhpcy5jbGFzc1N1ZmZpeD0iLWgiLHRoaXMub25TY3JvbGw9ZnVuY3Rpb24oKXt0aGlzLnNraXBFdmVudHx8KHRoaXMuc2Nyb2xsTGVmdD10aGlzLmVsZW1lbnQuc2Nyb2xsTGVmdCx0aGlzLl9lbWl0KCJzY3JvbGwiLHtkYXRhOnRoaXMuc2Nyb2xsTGVmdH0pKSx0aGlzLnNraXBFdmVudD0hMX0sdGhpcy5nZXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1Zpc2libGU/dGhpcy5oZWlnaHQ6MH0sdGhpcy5zZXRXaWR0aD1mdW5jdGlvbihlKXt0aGlzLmVsZW1lbnQuc3R5bGUud2lkdGg9ZSsicHgifSx0aGlzLnNldElubmVyV2lkdGg9ZnVuY3Rpb24oZSl7dGhpcy5pbm5lci5zdHlsZS53aWR0aD1lKyJweCJ9LHRoaXMuc2V0U2Nyb2xsV2lkdGg9ZnVuY3Rpb24oZSl7dGhpcy5pbm5lci5zdHlsZS53aWR0aD1lKyJweCJ9LHRoaXMuc2V0U2Nyb2xsTGVmdD1mdW5jdGlvbihlKXt0aGlzLnNjcm9sbExlZnQhPWUmJih0aGlzLnNraXBFdmVudD0hMCx0aGlzLnNjcm9sbExlZnQ9dGhpcy5lbGVtZW50LnNjcm9sbExlZnQ9ZSl9fS5jYWxsKGwucHJvdG90eXBlKSx0LlNjcm9sbEJhcj1mLHQuU2Nyb2xsQmFyVj1mLHQuU2Nyb2xsQmFySD1sLHQuVlNjcm9sbEJhcj1mLHQuSFNjcm9sbEJhcj1sfSksYWNlLmRlZmluZSgiYWNlL3JlbmRlcmxvb3AiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2V2ZW50Il0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuL2xpYi9ldmVudCIpLGk9ZnVuY3Rpb24oZSx0KXt0aGlzLm9uUmVuZGVyPWUsdGhpcy5wZW5kaW5nPSExLHRoaXMuY2hhbmdlcz0wLHRoaXMuJHJlY3Vyc2lvbkxpbWl0PTIsdGhpcy53aW5kb3c9dHx8d2luZG93O3ZhciBuPXRoaXM7dGhpcy5fZmx1c2g9ZnVuY3Rpb24oZSl7bi5wZW5kaW5nPSExO3ZhciB0PW4uY2hhbmdlczt0JiYoci5ibG9ja0lkbGUoMTAwKSxuLmNoYW5nZXM9MCxuLm9uUmVuZGVyKHQpKTtpZihuLmNoYW5nZXMpe2lmKG4uJHJlY3Vyc2lvbkxpbWl0LS08MClyZXR1cm47bi5zY2hlZHVsZSgpfWVsc2Ugbi4kcmVjdXJzaW9uTGltaXQ9Mn19OyhmdW5jdGlvbigpe3RoaXMuc2NoZWR1bGU9ZnVuY3Rpb24oZSl7dGhpcy5jaGFuZ2VzPXRoaXMuY2hhbmdlc3xlLHRoaXMuY2hhbmdlcyYmIXRoaXMucGVuZGluZyYmKHIubmV4dEZyYW1lKHRoaXMuX2ZsdXNoKSx0aGlzLnBlbmRpbmc9ITApfSx0aGlzLmNsZWFyPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY2hhbmdlcztyZXR1cm4gdGhpcy5jaGFuZ2VzPTAsdH19KS5jYWxsKGkucHJvdG90eXBlKSx0LlJlbmRlckxvb3A9aX0pLGFjZS5kZWZpbmUoImFjZS9sYXllci9mb250X21ldHJpY3MiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvZG9tIiwiYWNlL2xpYi9sYW5nIiwiYWNlL2xpYi9ldmVudCIsImFjZS9saWIvdXNlcmFnZW50IiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIl0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUoIi4uL2xpYi9vb3AiKSxpPWUoIi4uL2xpYi9kb20iKSxzPWUoIi4uL2xpYi9sYW5nIiksbz1lKCIuLi9saWIvZXZlbnQiKSx1PWUoIi4uL2xpYi91c2VyYWdlbnQiKSxhPWUoIi4uL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyLGY9MjU2LGw9dHlwZW9mIFJlc2l6ZU9ic2VydmVyPT0iZnVuY3Rpb24iLGM9MjAwLGg9dC5Gb250TWV0cmljcz1mdW5jdGlvbihlKXt0aGlzLmVsPWkuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy4kc2V0TWVhc3VyZU5vZGVTdHlsZXModGhpcy5lbC5zdHlsZSwhMCksdGhpcy4kbWFpbj1pLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuJHNldE1lYXN1cmVOb2RlU3R5bGVzKHRoaXMuJG1haW4uc3R5bGUpLHRoaXMuJG1lYXN1cmVOb2RlPWkuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy4kc2V0TWVhc3VyZU5vZGVTdHlsZXModGhpcy4kbWVhc3VyZU5vZGUuc3R5bGUpLHRoaXMuZWwuYXBwZW5kQ2hpbGQodGhpcy4kbWFpbiksdGhpcy5lbC5hcHBlbmRDaGlsZCh0aGlzLiRtZWFzdXJlTm9kZSksZS5hcHBlbmRDaGlsZCh0aGlzLmVsKSx0aGlzLiRtZWFzdXJlTm9kZS5pbm5lckhUTUw9cy5zdHJpbmdSZXBlYXQoIlgiLGYpLHRoaXMuJGNoYXJhY3RlclNpemU9e3dpZHRoOjAsaGVpZ2h0OjB9LGw/dGhpcy4kYWRkT2JzZXJ2ZXIoKTp0aGlzLmNoZWNrRm9yU2l6ZUNoYW5nZXMoKX07KGZ1bmN0aW9uKCl7ci5pbXBsZW1lbnQodGhpcyxhKSx0aGlzLiRjaGFyYWN0ZXJTaXplPXt3aWR0aDowLGhlaWdodDowfSx0aGlzLiRzZXRNZWFzdXJlTm9kZVN0eWxlcz1mdW5jdGlvbihlLHQpe2Uud2lkdGg9ZS5oZWlnaHQ9ImF1dG8iLGUubGVmdD1lLnRvcD0iMHB4IixlLnZpc2liaWxpdHk9ImhpZGRlbiIsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGUud2hpdGVTcGFjZT0icHJlIix1LmlzSUU8OD9lWyJmb250LWZhbWlseSJdPSJpbmhlcml0IjplLmZvbnQ9ImluaGVyaXQiLGUub3ZlcmZsb3c9dD8iaGlkZGVuIjoidmlzaWJsZSJ9LHRoaXMuY2hlY2tGb3JTaXplQ2hhbmdlcz1mdW5jdGlvbihlKXtlPT09dW5kZWZpbmVkJiYoZT10aGlzLiRtZWFzdXJlU2l6ZXMoKSk7aWYoZSYmKHRoaXMuJGNoYXJhY3RlclNpemUud2lkdGghPT1lLndpZHRofHx0aGlzLiRjaGFyYWN0ZXJTaXplLmhlaWdodCE9PWUuaGVpZ2h0KSl7dGhpcy4kbWVhc3VyZU5vZGUuc3R5bGUuZm9udFdlaWdodD0iYm9sZCI7dmFyIHQ9dGhpcy4kbWVhc3VyZVNpemVzKCk7dGhpcy4kbWVhc3VyZU5vZGUuc3R5bGUuZm9udFdlaWdodD0iIix0aGlzLiRjaGFyYWN0ZXJTaXplPWUsdGhpcy5jaGFyU2l6ZXM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmFsbG93Qm9sZEZvbnRzPXQmJnQud2lkdGg9PT1lLndpZHRoJiZ0LmhlaWdodD09PWUuaGVpZ2h0LHRoaXMuX2VtaXQoImNoYW5nZUNoYXJhY3RlclNpemUiLHtkYXRhOmV9KX19LHRoaXMuJGFkZE9ic2VydmVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLiRvYnNlcnZlcj1uZXcgd2luZG93LlJlc2l6ZU9ic2VydmVyKGZ1bmN0aW9uKHQpe3ZhciBuPXRbMF0uY29udGVudFJlY3Q7ZS5jaGVja0ZvclNpemVDaGFuZ2VzKHtoZWlnaHQ6bi5oZWlnaHQsd2lkdGg6bi53aWR0aC9mfSl9KSx0aGlzLiRvYnNlcnZlci5vYnNlcnZlKHRoaXMuJG1lYXN1cmVOb2RlKX0sdGhpcy4kcG9sbFNpemVDaGFuZ2VzPWZ1bmN0aW9uKCl7aWYodGhpcy4kcG9sbFNpemVDaGFuZ2VzVGltZXJ8fHRoaXMuJG9ic2VydmVyKXJldHVybiB0aGlzLiRwb2xsU2l6ZUNoYW5nZXNUaW1lcjt2YXIgZT10aGlzO3JldHVybiB0aGlzLiRwb2xsU2l6ZUNoYW5nZXNUaW1lcj1vLm9uSWRsZShmdW5jdGlvbiB0KCl7ZS5jaGVja0ZvclNpemVDaGFuZ2VzKCksby5vbklkbGUodCw1MDApfSw1MDApfSx0aGlzLnNldFBvbGxpbmc9ZnVuY3Rpb24oZSl7ZT90aGlzLiRwb2xsU2l6ZUNoYW5nZXMoKTp0aGlzLiRwb2xsU2l6ZUNoYW5nZXNUaW1lciYmKGNsZWFySW50ZXJ2YWwodGhpcy4kcG9sbFNpemVDaGFuZ2VzVGltZXIpLHRoaXMuJHBvbGxTaXplQ2hhbmdlc1RpbWVyPTApfSx0aGlzLiRtZWFzdXJlU2l6ZXM9ZnVuY3Rpb24oZSl7dmFyIHQ9e2hlaWdodDooZXx8dGhpcy4kbWVhc3VyZU5vZGUpLmNsaWVudEhlaWdodCx3aWR0aDooZXx8dGhpcy4kbWVhc3VyZU5vZGUpLmNsaWVudFdpZHRoL2Z9O3JldHVybiB0LndpZHRoPT09MHx8dC5oZWlnaHQ9PT0wP251bGw6dH0sdGhpcy4kbWVhc3VyZUNoYXJXaWR0aD1mdW5jdGlvbihlKXt0aGlzLiRtYWluLmlubmVySFRNTD1zLnN0cmluZ1JlcGVhdChlLGYpO3ZhciB0PXRoaXMuJG1haW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIHQud2lkdGgvZn0sdGhpcy5nZXRDaGFyYWN0ZXJXaWR0aD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmNoYXJTaXplc1tlXTtyZXR1cm4gdD09PXVuZGVmaW5lZCYmKHQ9dGhpcy5jaGFyU2l6ZXNbZV09dGhpcy4kbWVhc3VyZUNoYXJXaWR0aChlKS90aGlzLiRjaGFyYWN0ZXJTaXplLndpZHRoKSx0fSx0aGlzLmRlc3Ryb3k9ZnVuY3Rpb24oKXtjbGVhckludGVydmFsKHRoaXMuJHBvbGxTaXplQ2hhbmdlc1RpbWVyKSx0aGlzLiRvYnNlcnZlciYmdGhpcy4kb2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHRoaXMuZWwmJnRoaXMuZWwucGFyZW50Tm9kZSYmdGhpcy5lbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZWwpfSx0aGlzLiRnZXRab29tPWZ1bmN0aW9uIGUodCl7cmV0dXJuIHQ/KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpLnpvb218fDEpKmUodC5wYXJlbnRFbGVtZW50KToxfSx0aGlzLiRpbml0VHJhbnNmb3JtTWVhc3VyZU5vZGVzPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm5bImRpdiIse3N0eWxlOiJwb3NpdGlvbjogYWJzb2x1dGU7dG9wOiIrZSsicHg7bGVmdDoiK3QrInB4OyJ9XX07dGhpcy5lbHM9aS5idWlsZERvbShbZSgwLDApLGUoYywwKSxlKDAsYyksZShjLGMpXSx0aGlzLmVsKX0sdGhpcy50cmFuc2Zvcm1Db29yZGluYXRlcz1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIHIoZSx0LG4pe3ZhciByPWVbMV0qdFswXS1lWzBdKnRbMV07cmV0dXJuWygtdFsxXSpuWzBdK3RbMF0qblsxXSkvciwoK2VbMV0qblswXS1lWzBdKm5bMV0pL3JdfWZ1bmN0aW9uIGkoZSx0KXtyZXR1cm5bZVswXS10WzBdLGVbMV0tdFsxXV19ZnVuY3Rpb24gcyhlLHQpe3JldHVybltlWzBdK3RbMF0sZVsxXSt0WzFdXX1mdW5jdGlvbiBvKGUsdCl7cmV0dXJuW2UqdFswXSxlKnRbMV1dfWZ1bmN0aW9uIHUoZSl7dmFyIHQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm5bdC5sZWZ0LHQudG9wXX1pZihlKXt2YXIgbj10aGlzLiRnZXRab29tKHRoaXMuZWwpO2U9bygxL24sZSl9dGhpcy5lbHN8fHRoaXMuJGluaXRUcmFuc2Zvcm1NZWFzdXJlTm9kZXMoKTt2YXIgYT11KHRoaXMuZWxzWzBdKSxmPXUodGhpcy5lbHNbMV0pLGw9dSh0aGlzLmVsc1syXSksaD11KHRoaXMuZWxzWzNdKSxwPXIoaShoLGYpLGkoaCxsKSxpKHMoZixsKSxzKGgsYSkpKSxkPW8oMStwWzBdLGkoZixhKSksdj1vKDErcFsxXSxpKGwsYSkpO2lmKHQpe3ZhciBtPXQsZz1wWzBdKm1bMF0vYytwWzFdKm1bMV0vYysxLHk9cyhvKG1bMF0sZCksbyhtWzFdLHYpKTtyZXR1cm4gcyhvKDEvZy9jLHkpLGEpfXZhciBiPWkoZSxhKSx3PXIoaShkLG8ocFswXSxiKSksaSh2LG8ocFsxXSxiKSksYik7cmV0dXJuIG8oYyx3KX19KS5jYWxsKGgucHJvdG90eXBlKX0pLGFjZS5kZWZpbmUoImFjZS92aXJ0dWFsX3JlbmRlcmVyIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2RvbSIsImFjZS9jb25maWciLCJhY2UvbGF5ZXIvZ3V0dGVyIiwiYWNlL2xheWVyL21hcmtlciIsImFjZS9sYXllci90ZXh0IiwiYWNlL2xheWVyL2N1cnNvciIsImFjZS9zY3JvbGxiYXIiLCJhY2Uvc2Nyb2xsYmFyIiwiYWNlL3JlbmRlcmxvb3AiLCJhY2UvbGF5ZXIvZm9udF9tZXRyaWNzIiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIiwiYWNlL2xpYi91c2VyYWdlbnQiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoIi4vbGliL29vcCIpLGk9ZSgiLi9saWIvZG9tIikscz1lKCIuL2NvbmZpZyIpLG89ZSgiLi9sYXllci9ndXR0ZXIiKS5HdXR0ZXIsdT1lKCIuL2xheWVyL21hcmtlciIpLk1hcmtlcixhPWUoIi4vbGF5ZXIvdGV4dCIpLlRleHQsZj1lKCIuL2xheWVyL2N1cnNvciIpLkN1cnNvcixsPWUoIi4vc2Nyb2xsYmFyIikuSFNjcm9sbEJhcixjPWUoIi4vc2Nyb2xsYmFyIikuVlNjcm9sbEJhcixoPWUoIi4vcmVuZGVybG9vcCIpLlJlbmRlckxvb3AscD1lKCIuL2xheWVyL2ZvbnRfbWV0cmljcyIpLkZvbnRNZXRyaWNzLGQ9ZSgiLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcix2PScuYWNlX2JyMSB7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1cyAgICA6IDNweDt9LmFjZV9icjIge2JvcmRlci10b3AtcmlnaHQtcmFkaXVzICAgOiAzcHg7fS5hY2VfYnIzIHtib3JkZXItdG9wLWxlZnQtcmFkaXVzICAgIDogM3B4OyBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogICAgM3B4O30uYWNlX2JyNCB7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDt9LmFjZV9icjUge2JvcmRlci10b3AtbGVmdC1yYWRpdXMgICAgOiAzcHg7IGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAzcHg7fS5hY2VfYnI2IHtib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyAgIDogM3B4OyBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogM3B4O30uYWNlX2JyNyB7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1cyAgICA6IDNweDsgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICAgIDNweDsgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDt9LmFjZV9icjgge2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMgOiAzcHg7fS5hY2VfYnI5IHtib3JkZXItdG9wLWxlZnQtcmFkaXVzICAgIDogM3B4OyBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAgM3B4O30uYWNlX2JyMTB7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXMgICA6IDNweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogIDNweDt9LmFjZV9icjExe2JvcmRlci10b3AtbGVmdC1yYWRpdXMgICAgOiAzcHg7IGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAgICAzcHg7IGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICAzcHg7fS5hY2VfYnIxMntib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogM3B4OyBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAgM3B4O30uYWNlX2JyMTN7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1cyAgICA6IDNweDsgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogIDNweDt9LmFjZV9icjE0e2JvcmRlci10b3AtcmlnaHQtcmFkaXVzICAgOiAzcHg7IGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAzcHg7IGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICAzcHg7fS5hY2VfYnIxNXtib3JkZXItdG9wLWxlZnQtcmFkaXVzICAgIDogM3B4OyBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogICAgM3B4OyBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogM3B4OyBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAzcHg7fS5hY2VfZWRpdG9yIHtwb3NpdGlvbjogcmVsYXRpdmU7b3ZlcmZsb3c6IGhpZGRlbjtmb250OiAxMnB4L25vcm1hbCBcJ01vbmFjb1wnLCBcJ01lbmxvXCcsIFwnVWJ1bnR1IE1vbm9cJywgXCdDb25zb2xhc1wnLCBcJ3NvdXJjZS1jb2RlLXByb1wnLCBtb25vc3BhY2U7ZGlyZWN0aW9uOiBsdHI7dGV4dC1hbGlnbjogbGVmdDstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7fS5hY2Vfc2Nyb2xsZXIge3Bvc2l0aW9uOiBhYnNvbHV0ZTtvdmVyZmxvdzogaGlkZGVuO3RvcDogMDtib3R0b206IDA7YmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDstbXMtdXNlci1zZWxlY3Q6IG5vbmU7LW1vei11c2VyLXNlbGVjdDogbm9uZTstd2Via2l0LXVzZXItc2VsZWN0OiBub25lO3VzZXItc2VsZWN0OiBub25lO2N1cnNvcjogdGV4dDt9LmFjZV9jb250ZW50IHtwb3NpdGlvbjogYWJzb2x1dGU7Ym94LXNpemluZzogYm9yZGVyLWJveDttaW4td2lkdGg6IDEwMCU7Y29udGFpbjogc3R5bGUgc2l6ZSBsYXlvdXQ7fS5hY2VfZHJhZ2dpbmcgLmFjZV9zY3JvbGxlcjpiZWZvcmV7cG9zaXRpb246IGFic29sdXRlO3RvcDogMDtsZWZ0OiAwO3JpZ2h0OiAwO2JvdHRvbTogMDtjb250ZW50OiBcJ1wnO2JhY2tncm91bmQ6IHJnYmEoMjUwLCAyNTAsIDI1MCwgMC4wMSk7ei1pbmRleDogMTAwMDt9LmFjZV9kcmFnZ2luZy5hY2VfZGFyayAuYWNlX3Njcm9sbGVyOmJlZm9yZXtiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMDEpO30uYWNlX3NlbGVjdGluZywgLmFjZV9zZWxlY3RpbmcgKiB7Y3Vyc29yOiB0ZXh0ICFpbXBvcnRhbnQ7fS5hY2VfZ3V0dGVyIHtwb3NpdGlvbjogYWJzb2x1dGU7b3ZlcmZsb3cgOiBoaWRkZW47d2lkdGg6IGF1dG87dG9wOiAwO2JvdHRvbTogMDtsZWZ0OiAwO2N1cnNvcjogZGVmYXVsdDt6LWluZGV4OiA0Oy1tcy11c2VyLXNlbGVjdDogbm9uZTstbW96LXVzZXItc2VsZWN0OiBub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7dXNlci1zZWxlY3Q6IG5vbmU7Y29udGFpbjogc3R5bGUgc2l6ZSBsYXlvdXQ7fS5hY2VfZ3V0dGVyLWFjdGl2ZS1saW5lIHtwb3NpdGlvbjogYWJzb2x1dGU7bGVmdDogMDtyaWdodDogMDt9LmFjZV9zY3JvbGxlci5hY2Vfc2Nyb2xsLWxlZnQge2JveC1zaGFkb3c6IDE3cHggMCAxNnB4IC0xNnB4IHJnYmEoMCwgMCwgMCwgMC40KSBpbnNldDt9LmFjZV9ndXR0ZXItY2VsbCB7cG9zaXRpb246IGFic29sdXRlO3RvcDogMDtsZWZ0OiAwO3JpZ2h0OiAwO3BhZGRpbmctbGVmdDogMTlweDtwYWRkaW5nLXJpZ2h0OiA2cHg7YmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDt9LmFjZV9ndXR0ZXItY2VsbC5hY2VfZXJyb3Ige2JhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FNQUFBQW9MUTlUQUFBQk9GQk1WRVgvLy8vLy8vLy9RUnN3RkFiL1VpNHdGQVl3RkFZd0ZBYVdHQWZEUnltek9TSC9QeHN3RkFiL1NpVXdGQVl3RkFiVVBSdmpRaURsbG9nNUhoSGRSeWJzVGkzL1R5djlUaXIrU3lqL1VDMy8vLy9YdXJlYk1CSXdGQWIvUlNIYlB4L2dVemZkd0wza3pNaXZLQkF3RkFiYnZibmhQeDY2Tmhvd0ZBWXdGQWFaSmc4d0ZBYXhLQkRadXJmL1JCNm1NeGIvU0NNd0ZBWXdGQWJ4UUIzK1JCNHdGQWIvUWh5NE9oKzRRaWZiTlJjd0ZBWXdGQVl3RkFiL1FSemROaGd3RkFZd0ZBYmF2N3YvVXk3b2FFNjhNQks1THhMZXdyL3IyTlhld0xzd0ZBYXhKdzR3RkFia1BSeTJQeVl3RkFheEtoTG0xdE13RkFhelBpUXdGQWFVR0FiL1FCcmZPeDNidnJ2L1ZDL21hRTR3RkFiUlBCcTZNUk84UXluZXc4RHAydGpmd2Iwd0ZBYng2ZWp1NStieTZ1bnM0dUg5L2YzNit2ci9Ha0hqQUFBQVluUlNUbE1BR3QrNjRybld1L2JvOGVBQTRJbkgzK0R3b043ajRlTGk0eFA5OU5mZzQrYisvdTlCL2VEczFNRDFtTzcrNFBIZzJNWGEzNDdnN3ZEaXpNTE40ZUcrUHY3aTVldnMvdjc5eXU3UzMvRFY3LzQ5OFl2MjRlSCs0dWZRM096dS92Nyt5MTNzUnF3QUFBRExTVVJCVkhqYVpjL1hEc0ZnR0lCaHREcnNobGl0bWsySXJiSEZxTDJwdlhmLys3OERQb2tqNytGejlxcFUvOVVYSklsaG1QYVRhUTZRUGF6MG1tKzVnd2tnb3ZjVjZHWnpkNUp0Q1F3Z3N4b0hPdkpPMTVrbGVSTEFuTWdIRklFU1VFUG1hd0I5bmdtZWxUdGlwd3dmQVNpbHhPTHlpVjVVVlV5VkFmYkcwY0NQSGlnK0dCa3pBRU5IUzBBc3RWRjZiYWNaSU96Z0xteHNIYnQyT2VjTmdKQzgzSkVSbWVQVVlxOEFSR2tKeDZYdEZzZGRkQlFnWkUyblBSNkNJQ1poYXdqQTRGYi9jaHYrMzk5a2ZSK01NTURHT1FBQUFBQkpSVTVFcmtKZ2dnPT0iKTtiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O2JhY2tncm91bmQtcG9zaXRpb246IDJweCBjZW50ZXI7fS5hY2VfZ3V0dGVyLWNlbGwuYWNlX3dhcm5pbmcge2JhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FNQUFBQW9MUTlUQUFBQW1WQk1WRVgvLy84QUFBRC8vLzhBQUFBQUFBQlBTemIvNXNBQUFBQi9ibEgvNzN6L3Vsa0FBQUFBQUFEODVwa0FBQUFBQUFBQ0FnUC92R3ovcmtEZXJHYkdyVjcvcGtRSUNBZi8vLy9lMElzQUFBRC9vRUQvcVR2aHJuVUFBQUQveUhEL25qY0FBQUR1djJyL256Ly9vVGovcDA2NG9HZi96SEFBQUFBOU5pci90RklBQUFEL3RsVGl1V2YvdGtJQUFBQ3luWEVBQUFBQUFBQXRJUlc3ekJwQkFBQUFNM1JTVGxNQUFCUjFtN1JYTzhMbjMxWjM2elQrbmVYZTVPem9vUkRmbitUWjRwM2gyaFRmNHQzazN1Y3lyTjFLNStYYWtzNTJTZnM5Q1hnckFBQUFqa2xFUVZSNDJvM1BiUStDSUJRRllFd2JvUGhTWWdvWXVuSXFxTG42L3o4dVlkSDhWbWRudTl2ejRXd1hnTi94VFBSRDIrc2dPY1pqc2dlL3doWFpnVWFZWXZUOFFudUphVXJqckhVUXJlR2N6dUVhZlFDTy9TSlR1ZlRicm9Xc1Bnc2xsVmhxM3dKRWsyalVTelgzQ1VFREpDODQ3MDdkalJjNU1UQVF4b0xndXBXUndXNlVCNWZTKytOVjhBYk9aZ25zQzdCcEVBQUFBQUJKUlU1RXJrSmdnZz09Iik7YmFja2dyb3VuZC1wb3NpdGlvbjogMnB4IGNlbnRlcjt9LmFjZV9ndXR0ZXItY2VsbC5hY2VfaW5mbyB7YmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQUFBQUFBNm1LQzlBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQUFKMFVrNVRBQUIyazgwNEFBQUFQa2xFUVZRWTAyTmdJQjY4UXVPM3RpTHpuakF3cEtUZ055RGJNZWd3aXNDSFpVRVRVWlYwWnFPcXVCcFhqMnJ0bnBTSlQxQUVublJtTDJPZ0dnQUFJS2tSUWFwMmh0Z0FBQUFBU1VWT1JLNUNZSUk9Iik7YmFja2dyb3VuZC1wb3NpdGlvbjogMnB4IGNlbnRlcjt9LmFjZV9kYXJrIC5hY2VfZ3V0dGVyLWNlbGwuYWNlX2luZm8ge2JhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQkFNQUFBRHQzZUpTQUFBQUpGQk1WRVVBQUFDaG9hR0FnSUFxS2lxK3ZyNnRyYTFaV1ZtVWxKU2JtNXM4UER4dWJtNTZlbnJkZ3pnM0FBQUFBWFJTVGxNQVFPYllaZ0FBQUNsSlJFRlVlTnBqWU1BUGRzTVlIZWd5SlpGUUJsc1VsTUZWQ1dVWUtrQVpNeFpBR2R4bERNUUJBRytUQlA0QjZSeUpBQUFBQUVsRlRrU3VRbUNDIik7fS5hY2Vfc2Nyb2xsYmFyIHtjb250YWluOiBzdHJpY3Q7cG9zaXRpb246IGFic29sdXRlO3JpZ2h0OiAwO2JvdHRvbTogMDt6LWluZGV4OiA2O30uYWNlX3Njcm9sbGJhci1pbm5lciB7cG9zaXRpb246IGFic29sdXRlO2N1cnNvcjogdGV4dDtsZWZ0OiAwO3RvcDogMDt9LmFjZV9zY3JvbGxiYXItdntvdmVyZmxvdy14OiBoaWRkZW47b3ZlcmZsb3cteTogc2Nyb2xsO3RvcDogMDt9LmFjZV9zY3JvbGxiYXItaCB7b3ZlcmZsb3cteDogc2Nyb2xsO292ZXJmbG93LXk6IGhpZGRlbjtsZWZ0OiAwO30uYWNlX3ByaW50LW1hcmdpbiB7cG9zaXRpb246IGFic29sdXRlO2hlaWdodDogMTAwJTt9LmFjZV90ZXh0LWlucHV0IHtwb3NpdGlvbjogYWJzb2x1dGU7ei1pbmRleDogMDt3aWR0aDogMC41ZW07aGVpZ2h0OiAxZW07b3BhY2l0eTogMDtiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDstbW96LWFwcGVhcmFuY2U6IG5vbmU7YXBwZWFyYW5jZTogbm9uZTtib3JkZXI6IG5vbmU7cmVzaXplOiBub25lO291dGxpbmU6IG5vbmU7b3ZlcmZsb3c6IGhpZGRlbjtmb250OiBpbmhlcml0O3BhZGRpbmc6IDAgMXB4O21hcmdpbjogMCAtMXB4O2NvbnRhaW46IHN0cmljdDstbXMtdXNlci1zZWxlY3Q6IHRleHQ7LW1vei11c2VyLXNlbGVjdDogdGV4dDstd2Via2l0LXVzZXItc2VsZWN0OiB0ZXh0O3VzZXItc2VsZWN0OiB0ZXh0O3doaXRlLXNwYWNlOiBwcmUhaW1wb3J0YW50O30uYWNlX3RleHQtaW5wdXQuYWNlX2NvbXBvc2l0aW9uIHtiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtjb2xvcjogaW5oZXJpdDt6LWluZGV4OiAxMDAwO29wYWNpdHk6IDE7fS5hY2VfY29tcG9zaXRpb25fcGxhY2Vob2xkZXIgeyBjb2xvcjogdHJhbnNwYXJlbnQgfS5hY2VfY29tcG9zaXRpb25fbWFya2VyIHsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkO3Bvc2l0aW9uOiBhYnNvbHV0ZTtib3JkZXItcmFkaXVzOiAwO21hcmdpbi10b3A6IDFweDt9W2FjZV9ub2NvbnRleHQ9dHJ1ZV0ge3RyYW5zZm9ybTogbm9uZSFpbXBvcnRhbnQ7ZmlsdGVyOiBub25lIWltcG9ydGFudDtwZXJzcGVjdGl2ZTogbm9uZSFpbXBvcnRhbnQ7Y2xpcC1wYXRoOiBub25lIWltcG9ydGFudDttYXNrIDogbm9uZSFpbXBvcnRhbnQ7Y29udGFpbjogbm9uZSFpbXBvcnRhbnQ7cGVyc3BlY3RpdmU6IG5vbmUhaW1wb3J0YW50O21peC1ibGVuZC1tb2RlOiBpbml0aWFsIWltcG9ydGFudDt6LWluZGV4OiBhdXRvO30uYWNlX2xheWVyIHt6LWluZGV4OiAxO3Bvc2l0aW9uOiBhYnNvbHV0ZTtvdmVyZmxvdzogaGlkZGVuO3dvcmQtd3JhcDogbm9ybWFsO3doaXRlLXNwYWNlOiBwcmU7aGVpZ2h0OiAxMDAlO3dpZHRoOiAxMDAlO2JveC1zaXppbmc6IGJvcmRlci1ib3g7cG9pbnRlci1ldmVudHM6IG5vbmU7fS5hY2VfZ3V0dGVyLWxheWVyIHtwb3NpdGlvbjogcmVsYXRpdmU7d2lkdGg6IGF1dG87dGV4dC1hbGlnbjogcmlnaHQ7cG9pbnRlci1ldmVudHM6IGF1dG87aGVpZ2h0OiAxMDAwMDAwcHg7Y29udGFpbjogc3R5bGUgc2l6ZSBsYXlvdXQ7fS5hY2VfdGV4dC1sYXllciB7Zm9udDogaW5oZXJpdCAhaW1wb3J0YW50O3Bvc2l0aW9uOiBhYnNvbHV0ZTtoZWlnaHQ6IDEwMDAwMDBweDt3aWR0aDogMTAwMDAwMHB4O2NvbnRhaW46IHN0eWxlIHNpemUgbGF5b3V0O30uYWNlX3RleHQtbGF5ZXIgPiAuYWNlX2xpbmUsIC5hY2VfdGV4dC1sYXllciA+IC5hY2VfbGluZV9ncm91cCB7Y29udGFpbjogc3R5bGUgc2l6ZSBsYXlvdXQ7cG9zaXRpb246IGFic29sdXRlO3RvcDogMDtsZWZ0OiAwO3JpZ2h0OiAwO30uYWNlX2hpZHBpIC5hY2VfdGV4dC1sYXllciwuYWNlX2hpZHBpIC5hY2VfZ3V0dGVyLWxheWVyLC5hY2VfaGlkcGkgLmFjZV9jb250ZW50LC5hY2VfaGlkcGkgLmFjZV9ndXR0ZXIge2NvbnRhaW46IHN0cmljdDt3aWxsLWNoYW5nZTogdHJhbnNmb3JtO30uYWNlX2hpZHBpIC5hY2VfdGV4dC1sYXllciA+IC5hY2VfbGluZSwgLmFjZV9oaWRwaSAuYWNlX3RleHQtbGF5ZXIgPiAuYWNlX2xpbmVfZ3JvdXAge2NvbnRhaW46IHN0cmljdDt9LmFjZV9jamsge2Rpc3BsYXk6IGlubGluZS1ibG9jazt0ZXh0LWFsaWduOiBjZW50ZXI7fS5hY2VfY3Vyc29yLWxheWVyIHt6LWluZGV4OiA0O30uYWNlX2N1cnNvciB7ei1pbmRleDogNDtwb3NpdGlvbjogYWJzb2x1dGU7Ym94LXNpemluZzogYm9yZGVyLWJveDtib3JkZXItbGVmdDogMnB4IHNvbGlkO3RyYW5zZm9ybTogdHJhbnNsYXRleigwKTt9LmFjZV9tdWx0aXNlbGVjdCAuYWNlX2N1cnNvciB7Ym9yZGVyLWxlZnQtd2lkdGg6IDFweDt9LmFjZV9zbGltLWN1cnNvcnMgLmFjZV9jdXJzb3Ige2JvcmRlci1sZWZ0LXdpZHRoOiAxcHg7fS5hY2Vfb3ZlcndyaXRlLWN1cnNvcnMgLmFjZV9jdXJzb3Ige2JvcmRlci1sZWZ0LXdpZHRoOiAwO2JvcmRlci1ib3R0b206IDFweCBzb2xpZDt9LmFjZV9oaWRkZW4tY3Vyc29ycyAuYWNlX2N1cnNvciB7b3BhY2l0eTogMC4yO30uYWNlX3Ntb290aC1ibGlua2luZyAuYWNlX2N1cnNvciB7dHJhbnNpdGlvbjogb3BhY2l0eSAwLjE4czt9LmFjZV9hbmltYXRlLWJsaW5raW5nIC5hY2VfY3Vyc29yIHthbmltYXRpb24tZHVyYXRpb246IDEwMDBtczthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBzdGVwLWVuZDthbmltYXRpb24tbmFtZTogYmxpbmstYWNlLWFuaW1hdGU7YW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7fS5hY2VfYW5pbWF0ZS1ibGlua2luZy5hY2Vfc21vb3RoLWJsaW5raW5nIC5hY2VfY3Vyc29yIHthbmltYXRpb24tZHVyYXRpb246IDEwMDBtczthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlLWluLW91dDthbmltYXRpb24tbmFtZTogYmxpbmstYWNlLWFuaW1hdGUtc21vb3RoO31Aa2V5ZnJhbWVzIGJsaW5rLWFjZS1hbmltYXRlIHtmcm9tLCB0byB7IG9wYWNpdHk6IDE7IH02MCUgeyBvcGFjaXR5OiAwOyB9fUBrZXlmcmFtZXMgYmxpbmstYWNlLWFuaW1hdGUtc21vb3RoIHtmcm9tLCB0byB7IG9wYWNpdHk6IDE7IH00NSUgeyBvcGFjaXR5OiAxOyB9NjAlIHsgb3BhY2l0eTogMDsgfTg1JSB7IG9wYWNpdHk6IDA7IH19LmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGVwLCAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0YWNrIHtwb3NpdGlvbjogYWJzb2x1dGU7ei1pbmRleDogMzt9LmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24ge3Bvc2l0aW9uOiBhYnNvbHV0ZTt6LWluZGV4OiA1O30uYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQge3Bvc2l0aW9uOiBhYnNvbHV0ZTt6LWluZGV4OiA2O30uYWNlX21hcmtlci1sYXllciAuYWNlX2FjdGl2ZS1saW5lIHtwb3NpdGlvbjogYWJzb2x1dGU7ei1pbmRleDogMjt9LmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZC13b3JkIHtwb3NpdGlvbjogYWJzb2x1dGU7ei1pbmRleDogNDtib3gtc2l6aW5nOiBib3JkZXItYm94O30uYWNlX2xpbmUgLmFjZV9mb2xkIHtib3gtc2l6aW5nOiBib3JkZXItYm94O2Rpc3BsYXk6IGlubGluZS1ibG9jaztoZWlnaHQ6IDExcHg7bWFyZ2luLXRvcDogLTJweDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJFQUFBQUpDQVlBQUFEVTZNY01BQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQUpwSlJFRlVlTnBpL1AvL1B3T2xnQVhHWUdSa2xBVlNva0Q4R21qd1kxd2FzS2xqUXBZQUN0cENGZUFEY0hWUWZReU1RQXd6d0FaSTN3Skt2Q0xrZktCYU1TQ2xCbFI3Qk9RaWtDRkdRRUVySUgwVnFrYWJpR0NBcXdVYWRBelpKUnhRci8wZ3dpWElhbDh6UVFQbk5WVGdKMVRkYXdMMFQ1Z0JJUDFNVUpOaEJ2MkhLb1FISGpxTnJBNFdPNHpZMGdseU5LTFQyS0lmSU1BQVFzZGdHaVh2Z25ZQUFBQUFTVVZPUks1Q1lJST0iKSx1cmwoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBM0NBWUFBQUROTmlBNUFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBQ0pKUkVGVWVOcGkrUC8vZnhnVEF3UERCeER4RDA3OFJTWCtZZUV5REZNQ0lNQUFJM0lObVhpd2YyWUFBQUFBU1VWT1JLNUNZSUk9Iik7YmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdCwgcmVwZWF0LXg7YmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlciwgdG9wIGxlZnQ7Y29sb3I6IHRyYW5zcGFyZW50O2JvcmRlcjogMXB4IHNvbGlkIGJsYWNrO2JvcmRlci1yYWRpdXM6IDJweDtjdXJzb3I6IHBvaW50ZXI7cG9pbnRlci1ldmVudHM6IGF1dG87fS5hY2VfZGFyayAuYWNlX2ZvbGQge30uYWNlX2ZvbGQ6aG92ZXJ7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkVBQUFBSkNBWUFBQURVNk1jTUFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBSnBKUkVGVWVOcGkvUC8vUHdPbGdBWEdZR1JrbEFWU29rRDhHbWp3WTF3YXNLbGpRcFlBQ3RwQ0ZlQURjSFZRZlF5TVFBd3p3QVpJM3dKS3ZDTGtmS0JhTVNDbEJsUjdCT1Fpa0NGR1FFRXJJSDBWcWthYmlHQ0Fxd1VhZEF6WkpSeFFyLzBnd2lYSWFsOHpRUVBuTlZUZ0oxVGRhd0wwVDVnQklQMU1VSk5oQnYySEtvUUhIanFOckE0V080elkwZ2x5TktMVDJLSWZJTUFBUXNkZ0dpWHZnbllBQUFBQVNVVk9SSzVDWUlJPSIpLHVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUEzQ0FZQUFBRE5OaUE1QUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUFDQkpSRUZVZU5waStQLy9mejRUQXdQRFp4RHhENVg0aTVmTE1Fd0pnQUFEQUVQVkRiak53ODdaQUFBQUFFbEZUa1N1UW1DQyIpO30uYWNlX3Rvb2x0aXAge2JhY2tncm91bmQtY29sb3I6ICNGRkY7YmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgdHJhbnNwYXJlbnQsIHJnYmEoMCwgMCwgMCwgMC4xKSk7Ym9yZGVyOiAxcHggc29saWQgZ3JheTtib3JkZXItcmFkaXVzOiAxcHg7Ym94LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4zKTtjb2xvcjogYmxhY2s7bWF4LXdpZHRoOiAxMDAlO3BhZGRpbmc6IDNweCA0cHg7cG9zaXRpb246IGZpeGVkO3otaW5kZXg6IDk5OTk5OTtib3gtc2l6aW5nOiBib3JkZXItYm94O2N1cnNvcjogZGVmYXVsdDt3aGl0ZS1zcGFjZTogcHJlO3dvcmQtd3JhcDogYnJlYWstd29yZDtsaW5lLWhlaWdodDogbm9ybWFsO2ZvbnQtc3R5bGU6IG5vcm1hbDtmb250LXdlaWdodDogbm9ybWFsO2xldHRlci1zcGFjaW5nOiBub3JtYWw7cG9pbnRlci1ldmVudHM6IG5vbmU7fS5hY2VfZm9sZGluZy1lbmFibGVkID4gLmFjZV9ndXR0ZXItY2VsbCB7cGFkZGluZy1yaWdodDogMTNweDt9LmFjZV9mb2xkLXdpZGdldCB7Ym94LXNpemluZzogYm9yZGVyLWJveDttYXJnaW46IDAgLTEycHggMCAxcHg7ZGlzcGxheTogbm9uZTt3aWR0aDogMTFweDt2ZXJ0aWNhbC1hbGlnbjogdG9wO2JhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBVUFBQUFGQ0FZQUFBQ05ieWJsQUFBQU5FbEVRVlI0Mm1XS3NRMEFNQXpDOGl4TGxyelFqem1CaUVqcDBBNld3QkNTUGdLQVhvTGtxU290N25OM3lNd1I3cFozMk56cEtrVm9EQlV4S0FBQUFBQkpSVTVFcmtKZ2dnPT0iKTtiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O2JhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtib3JkZXItcmFkaXVzOiAzcHg7Ym9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7Y3Vyc29yOiBwb2ludGVyO30uYWNlX2ZvbGRpbmctZW5hYmxlZCAuYWNlX2ZvbGQtd2lkZ2V0IHtkaXNwbGF5OiBpbmxpbmUtYmxvY2s7ICAgfS5hY2VfZm9sZC13aWRnZXQuYWNlX2VuZCB7YmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFVQUFBQUZDQVlBQUFDTmJ5YmxBQUFBTkVsRVFWUjQybTNId1FrQU1BaEQwWXpzUmNoRktJN3NBaWtlV2tyeHdTY0VCMG5oNWU3S1RQV2ltWmtpNHRZZlZiWCtNTmw0cHlaWGVqVU8xUUFBQUFCSlJVNUVya0pnZ2c9PSIpO30uYWNlX2ZvbGQtd2lkZ2V0LmFjZV9jbG9zZWQge2JhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBTUFBQUFHQ0FZQUFBQUc1U1FNQUFBQU9VbEVRVlI0MmpYS3dRa0FNQWdEd0t3cUtENEV3UTI2c1NPa1ZXamdJSUhBelBpQ2dhcWlxbkpIWm5LSUNCRVJITjE5NE81Yjl2Ykx1QVZSTCtsMFlXblpBQUFBQUVsRlRrU3VRbUNDWEE9PSIpO30uYWNlX2ZvbGQtd2lkZ2V0OmhvdmVyIHtib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMyk7YmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpO2JveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7fS5hY2VfZm9sZC13aWRnZXQ6YWN0aXZlIHtib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuNCk7YmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpO30uYWNlX2RhcmsgLmFjZV9mb2xkLXdpZGdldCB7YmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFVQUFBQUZDQVlBQUFDTmJ5YmxBQUFBSGtsRVFWUUlXMlA0Ly84L0F6b0dFUTdvR0NhTExBaFdpU3dCMTQ2QkFRQ1NUUFlvY3FUMEFBQUFBRWxGVGtTdVFtQ0MiKTt9LmFjZV9kYXJrIC5hY2VfZm9sZC13aWRnZXQuYWNlX2VuZCB7YmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFVQUFBQUZDQVlBQUFDTmJ5YmxBQUFBSDBsRVFWUUlXMlA0Ly84L0F4UTd3TmpJQWpETWdDNEF4akNWS0JpcklBQUYwa3oycmxoeHBBQUFBQUJKUlU1RXJrSmdnZz09Iik7fS5hY2VfZGFyayAuYWNlX2ZvbGQtd2lkZ2V0LmFjZV9jbG9zZWQge2JhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBTUFBQUFGQ0FZQUFBQ0FjVmFpQUFBQUhFbEVRVlFJVzJQNC8vKy9BeEF6Z0RBRGxPT0F6bkhBS2dQV0F3QVJqaThVSURUZlFRQUFBQUJKUlU1RXJrSmdnZz09Iik7fS5hY2VfZGFyayAuYWNlX2ZvbGQtd2lkZ2V0OmhvdmVyIHtib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpO2JhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTt9LmFjZV9kYXJrIC5hY2VfZm9sZC13aWRnZXQ6YWN0aXZlIHtib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpO30uYWNlX2lubGluZV9idXR0b24ge2JvcmRlcjogMXB4IHNvbGlkIGxpZ2h0Z3JheTtkaXNwbGF5OiBpbmxpbmUtYmxvY2s7bWFyZ2luOiAtMXB4IDhweDtwYWRkaW5nOiAwIDVweDtwb2ludGVyLWV2ZW50czogYXV0bztjdXJzb3I6IHBvaW50ZXI7fS5hY2VfaW5saW5lX2J1dHRvbjpob3ZlciB7Ym9yZGVyLWNvbG9yOiBncmF5O2JhY2tncm91bmQ6IHJnYmEoMjAwLDIwMCwyMDAsMC4yKTtkaXNwbGF5OiBpbmxpbmUtYmxvY2s7cG9pbnRlci1ldmVudHM6IGF1dG87fS5hY2VfZm9sZC13aWRnZXQuYWNlX2ludmFsaWQge2JhY2tncm91bmQtY29sb3I6ICNGRkI0QjQ7Ym9yZGVyLWNvbG9yOiAjREU1NTU1O30uYWNlX2ZhZGUtZm9sZC13aWRnZXRzIC5hY2VfZm9sZC13aWRnZXQge3RyYW5zaXRpb246IG9wYWNpdHkgMC40cyBlYXNlIDAuMDVzO29wYWNpdHk6IDA7fS5hY2VfZmFkZS1mb2xkLXdpZGdldHM6aG92ZXIgLmFjZV9mb2xkLXdpZGdldCB7dHJhbnNpdGlvbjogb3BhY2l0eSAwLjA1cyBlYXNlIDAuMDVzO29wYWNpdHk6MTt9LmFjZV91bmRlcmxpbmUge3RleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO30uYWNlX2JvbGQge2ZvbnQtd2VpZ2h0OiBib2xkO30uYWNlX25vYm9sZCAuYWNlX2JvbGQge2ZvbnQtd2VpZ2h0OiBub3JtYWw7fS5hY2VfaXRhbGljIHtmb250LXN0eWxlOiBpdGFsaWM7fS5hY2VfZXJyb3ItbWFya2VyIHtiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMCwgMCwwLjIpO3Bvc2l0aW9uOiBhYnNvbHV0ZTt6LWluZGV4OiA5O30uYWNlX2hpZ2hsaWdodC1tYXJrZXIge2JhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDAsMC4yKTtwb3NpdGlvbjogYWJzb2x1dGU7ei1pbmRleDogODt9LmFjZV9tb2JpbGUtbWVudSB7cG9zaXRpb246IGFic29sdXRlO2xpbmUtaGVpZ2h0OiAxLjU7Ym9yZGVyLXJhZGl1czogNHB4Oy1tcy11c2VyLXNlbGVjdDogbm9uZTstbW96LXVzZXItc2VsZWN0OiBub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7dXNlci1zZWxlY3Q6IG5vbmU7YmFja2dyb3VuZDogd2hpdGU7Ym94LXNoYWRvdzogMXB4IDNweCAycHggZ3JleTtib3JkZXI6IDFweCBzb2xpZCAjZGNkY2RjO2NvbG9yOiBibGFjazt9LmFjZV9kYXJrID4gLmFjZV9tb2JpbGUtbWVudSB7YmFja2dyb3VuZDogIzMzMztjb2xvcjogI2NjYztib3gtc2hhZG93OiAxcHggM3B4IDJweCBncmV5O2JvcmRlcjogMXB4IHNvbGlkICM0NDQ7fS5hY2VfbW9iaWxlLWJ1dHRvbiB7cGFkZGluZzogMnB4O2N1cnNvcjogcG9pbnRlcjtvdmVyZmxvdzogaGlkZGVuO30uYWNlX21vYmlsZS1idXR0b246aG92ZXIge2JhY2tncm91bmQtY29sb3I6ICNlZWU7b3BhY2l0eToxO30uYWNlX21vYmlsZS1idXR0b246YWN0aXZlIHtiYWNrZ3JvdW5kLWNvbG9yOiAjZGRkO30nLG09ZSgiLi9saWIvdXNlcmFnZW50IiksZz1tLmlzSUU7aS5pbXBvcnRDc3NTdHJpbmcodiwiYWNlX2VkaXRvci5jc3MiKTt2YXIgeT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7dGhpcy5jb250YWluZXI9ZXx8aS5jcmVhdGVFbGVtZW50KCJkaXYiKSxpLmFkZENzc0NsYXNzKHRoaXMuY29udGFpbmVyLCJhY2VfZWRpdG9yIiksaS5ISV9EUEkmJmkuYWRkQ3NzQ2xhc3ModGhpcy5jb250YWluZXIsImFjZV9oaWRwaSIpLHRoaXMuc2V0VGhlbWUodCksdGhpcy4kZ3V0dGVyPWkuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy4kZ3V0dGVyLmNsYXNzTmFtZT0iYWNlX2d1dHRlciIsdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy4kZ3V0dGVyKSx0aGlzLiRndXR0ZXIuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsITApLHRoaXMuc2Nyb2xsZXI9aS5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLnNjcm9sbGVyLmNsYXNzTmFtZT0iYWNlX3Njcm9sbGVyIix0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbGVyKSx0aGlzLmNvbnRlbnQ9aS5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmNvbnRlbnQuY2xhc3NOYW1lPSJhY2VfY29udGVudCIsdGhpcy5zY3JvbGxlci5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnQpLHRoaXMuJGd1dHRlckxheWVyPW5ldyBvKHRoaXMuJGd1dHRlciksdGhpcy4kZ3V0dGVyTGF5ZXIub24oImNoYW5nZUd1dHRlcldpZHRoIix0aGlzLm9uR3V0dGVyUmVzaXplLmJpbmQodGhpcykpLHRoaXMuJG1hcmtlckJhY2s9bmV3IHUodGhpcy5jb250ZW50KTt2YXIgcj10aGlzLiR0ZXh0TGF5ZXI9bmV3IGEodGhpcy5jb250ZW50KTt0aGlzLmNhbnZhcz1yLmVsZW1lbnQsdGhpcy4kbWFya2VyRnJvbnQ9bmV3IHUodGhpcy5jb250ZW50KSx0aGlzLiRjdXJzb3JMYXllcj1uZXcgZih0aGlzLmNvbnRlbnQpLHRoaXMuJGhvcml6U2Nyb2xsPSExLHRoaXMuJHZTY3JvbGw9ITEsdGhpcy5zY3JvbGxCYXI9dGhpcy5zY3JvbGxCYXJWPW5ldyBjKHRoaXMuY29udGFpbmVyLHRoaXMpLHRoaXMuc2Nyb2xsQmFySD1uZXcgbCh0aGlzLmNvbnRhaW5lcix0aGlzKSx0aGlzLnNjcm9sbEJhclYuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIixmdW5jdGlvbihlKXtuLiRzY3JvbGxBbmltYXRpb258fG4uc2Vzc2lvbi5zZXRTY3JvbGxUb3AoZS5kYXRhLW4uc2Nyb2xsTWFyZ2luLnRvcCl9KSx0aGlzLnNjcm9sbEJhckguYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIixmdW5jdGlvbihlKXtuLiRzY3JvbGxBbmltYXRpb258fG4uc2Vzc2lvbi5zZXRTY3JvbGxMZWZ0KGUuZGF0YS1uLnNjcm9sbE1hcmdpbi5sZWZ0KX0pLHRoaXMuc2Nyb2xsVG9wPTAsdGhpcy5zY3JvbGxMZWZ0PTAsdGhpcy5jdXJzb3JQb3M9e3JvdzowLGNvbHVtbjowfSx0aGlzLiRmb250TWV0cmljcz1uZXcgcCh0aGlzLmNvbnRhaW5lciksdGhpcy4kdGV4dExheWVyLiRzZXRGb250TWV0cmljcyh0aGlzLiRmb250TWV0cmljcyksdGhpcy4kdGV4dExheWVyLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZUNoYXJhY3RlclNpemUiLGZ1bmN0aW9uKGUpe24udXBkYXRlQ2hhcmFjdGVyU2l6ZSgpLG4ub25SZXNpemUoITAsbi5ndXR0ZXJXaWR0aCxuLiRzaXplLndpZHRoLG4uJHNpemUuaGVpZ2h0KSxuLl9zaWduYWwoImNoYW5nZUNoYXJhY3RlclNpemUiLGUpfSksdGhpcy4kc2l6ZT17d2lkdGg6MCxoZWlnaHQ6MCxzY3JvbGxlckhlaWdodDowLHNjcm9sbGVyV2lkdGg6MCwkZGlydHk6ITB9LHRoaXMubGF5ZXJDb25maWc9e3dpZHRoOjEscGFkZGluZzowLGZpcnN0Um93OjAsZmlyc3RSb3dTY3JlZW46MCxsYXN0Um93OjAsbGluZUhlaWdodDowLGNoYXJhY3RlcldpZHRoOjAsbWluSGVpZ2h0OjEsbWF4SGVpZ2h0OjEsb2Zmc2V0OjAsaGVpZ2h0OjEsZ3V0dGVyT2Zmc2V0OjF9LHRoaXMuc2Nyb2xsTWFyZ2luPXtsZWZ0OjAscmlnaHQ6MCx0b3A6MCxib3R0b206MCx2OjAsaDowfSx0aGlzLm1hcmdpbj17bGVmdDowLHJpZ2h0OjAsdG9wOjAsYm90dG9tOjAsdjowLGg6MH0sdGhpcy4ka2VlcFRleHRBcmVhQXRDdXJzb3I9IW0uaXNJT1MsdGhpcy4kbG9vcD1uZXcgaCh0aGlzLiRyZW5kZXJDaGFuZ2VzLmJpbmQodGhpcyksdGhpcy5jb250YWluZXIub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyksdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9GVUxMKSx0aGlzLnVwZGF0ZUNoYXJhY3RlclNpemUoKSx0aGlzLnNldFBhZGRpbmcoNCkscy5yZXNldE9wdGlvbnModGhpcykscy5fc2lnbmFsKCJyZW5kZXJlciIsdGhpcyl9OyhmdW5jdGlvbigpe3RoaXMuQ0hBTkdFX0NVUlNPUj0xLHRoaXMuQ0hBTkdFX01BUktFUj0yLHRoaXMuQ0hBTkdFX0dVVFRFUj00LHRoaXMuQ0hBTkdFX1NDUk9MTD04LHRoaXMuQ0hBTkdFX0xJTkVTPTE2LHRoaXMuQ0hBTkdFX1RFWFQ9MzIsdGhpcy5DSEFOR0VfU0laRT02NCx0aGlzLkNIQU5HRV9NQVJLRVJfQkFDSz0xMjgsdGhpcy5DSEFOR0VfTUFSS0VSX0ZST05UPTI1Nix0aGlzLkNIQU5HRV9GVUxMPTUxMix0aGlzLkNIQU5HRV9IX1NDUk9MTD0xMDI0LHIuaW1wbGVtZW50KHRoaXMsZCksdGhpcy51cGRhdGVDaGFyYWN0ZXJTaXplPWZ1bmN0aW9uKCl7dGhpcy4kdGV4dExheWVyLmFsbG93Qm9sZEZvbnRzIT10aGlzLiRhbGxvd0JvbGRGb250cyYmKHRoaXMuJGFsbG93Qm9sZEZvbnRzPXRoaXMuJHRleHRMYXllci5hbGxvd0JvbGRGb250cyx0aGlzLnNldFN0eWxlKCJhY2Vfbm9ib2xkIiwhdGhpcy4kYWxsb3dCb2xkRm9udHMpKSx0aGlzLmxheWVyQ29uZmlnLmNoYXJhY3RlcldpZHRoPXRoaXMuY2hhcmFjdGVyV2lkdGg9dGhpcy4kdGV4dExheWVyLmdldENoYXJhY3RlcldpZHRoKCksdGhpcy5sYXllckNvbmZpZy5saW5lSGVpZ2h0PXRoaXMubGluZUhlaWdodD10aGlzLiR0ZXh0TGF5ZXIuZ2V0TGluZUhlaWdodCgpLHRoaXMuJHVwZGF0ZVByaW50TWFyZ2luKCksaS5zZXRTdHlsZSh0aGlzLnNjcm9sbGVyLnN0eWxlLCJsaW5lLWhlaWdodCIsdGhpcy5saW5lSGVpZ2h0KyJweCIpfSx0aGlzLnNldFNlc3Npb249ZnVuY3Rpb24oZSl7dGhpcy5zZXNzaW9uJiZ0aGlzLnNlc3Npb24uZG9jLm9mZigiY2hhbmdlTmV3TGluZU1vZGUiLHRoaXMub25DaGFuZ2VOZXdMaW5lTW9kZSksdGhpcy5zZXNzaW9uPWUsZSYmdGhpcy5zY3JvbGxNYXJnaW4udG9wJiZlLmdldFNjcm9sbFRvcCgpPD0wJiZlLnNldFNjcm9sbFRvcCgtdGhpcy5zY3JvbGxNYXJnaW4udG9wKSx0aGlzLiRjdXJzb3JMYXllci5zZXRTZXNzaW9uKGUpLHRoaXMuJG1hcmtlckJhY2suc2V0U2Vzc2lvbihlKSx0aGlzLiRtYXJrZXJGcm9udC5zZXRTZXNzaW9uKGUpLHRoaXMuJGd1dHRlckxheWVyLnNldFNlc3Npb24oZSksdGhpcy4kdGV4dExheWVyLnNldFNlc3Npb24oZSk7aWYoIWUpcmV0dXJuO3RoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfRlVMTCksdGhpcy5zZXNzaW9uLiRzZXRGb250TWV0cmljcyh0aGlzLiRmb250TWV0cmljcyksdGhpcy5zY3JvbGxCYXJILnNjcm9sbExlZnQ9dGhpcy5zY3JvbGxCYXJWLnNjcm9sbFRvcD1udWxsLHRoaXMub25DaGFuZ2VOZXdMaW5lTW9kZT10aGlzLm9uQ2hhbmdlTmV3TGluZU1vZGUuYmluZCh0aGlzKSx0aGlzLm9uQ2hhbmdlTmV3TGluZU1vZGUoKSx0aGlzLnNlc3Npb24uZG9jLm9uKCJjaGFuZ2VOZXdMaW5lTW9kZSIsdGhpcy5vbkNoYW5nZU5ld0xpbmVNb2RlKX0sdGhpcy51cGRhdGVMaW5lcz1mdW5jdGlvbihlLHQsbil7dD09PXVuZGVmaW5lZCYmKHQ9SW5maW5pdHkpLHRoaXMuJGNoYW5nZWRMaW5lcz8odGhpcy4kY2hhbmdlZExpbmVzLmZpcnN0Um93PmUmJih0aGlzLiRjaGFuZ2VkTGluZXMuZmlyc3RSb3c9ZSksdGhpcy4kY2hhbmdlZExpbmVzLmxhc3RSb3c8dCYmKHRoaXMuJGNoYW5nZWRMaW5lcy5sYXN0Um93PXQpKTp0aGlzLiRjaGFuZ2VkTGluZXM9e2ZpcnN0Um93OmUsbGFzdFJvdzp0fTtpZih0aGlzLiRjaGFuZ2VkTGluZXMubGFzdFJvdzx0aGlzLmxheWVyQ29uZmlnLmZpcnN0Um93KXtpZighbilyZXR1cm47dGhpcy4kY2hhbmdlZExpbmVzLmxhc3RSb3c9dGhpcy5sYXllckNvbmZpZy5sYXN0Um93fWlmKHRoaXMuJGNoYW5nZWRMaW5lcy5maXJzdFJvdz50aGlzLmxheWVyQ29uZmlnLmxhc3RSb3cpcmV0dXJuO3RoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfTElORVMpfSx0aGlzLm9uQ2hhbmdlTmV3TGluZU1vZGU9ZnVuY3Rpb24oKXt0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX1RFWFQpLHRoaXMuJHRleHRMYXllci4kdXBkYXRlRW9sQ2hhcigpLHRoaXMuc2Vzc2lvbi4kYmlkaUhhbmRsZXIuc2V0RW9sQ2hhcih0aGlzLiR0ZXh0TGF5ZXIuRU9MX0NIQVIpfSx0aGlzLm9uQ2hhbmdlVGFiU2l6ZT1mdW5jdGlvbigpe3RoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfVEVYVHx0aGlzLkNIQU5HRV9NQVJLRVIpLHRoaXMuJHRleHRMYXllci5vbkNoYW5nZVRhYlNpemUoKX0sdGhpcy51cGRhdGVUZXh0PWZ1bmN0aW9uKCl7dGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9URVhUKX0sdGhpcy51cGRhdGVGdWxsPWZ1bmN0aW9uKGUpe2U/dGhpcy4kcmVuZGVyQ2hhbmdlcyh0aGlzLkNIQU5HRV9GVUxMLCEwKTp0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX0ZVTEwpfSx0aGlzLnVwZGF0ZUZvbnRTaXplPWZ1bmN0aW9uKCl7dGhpcy4kdGV4dExheWVyLmNoZWNrRm9yU2l6ZUNoYW5nZXMoKX0sdGhpcy4kY2hhbmdlcz0wLHRoaXMuJHVwZGF0ZVNpemVBc3luYz1mdW5jdGlvbigpe3RoaXMuJGxvb3AucGVuZGluZz90aGlzLiRzaXplLiRkaXJ0eT0hMDp0aGlzLm9uUmVzaXplKCl9LHRoaXMub25SZXNpemU9ZnVuY3Rpb24oZSx0LG4scil7aWYodGhpcy5yZXNpemluZz4yKXJldHVybjt0aGlzLnJlc2l6aW5nPjA/dGhpcy5yZXNpemluZysrOnRoaXMucmVzaXppbmc9ZT8xOjA7dmFyIGk9dGhpcy5jb250YWluZXI7cnx8KHI9aS5jbGllbnRIZWlnaHR8fGkuc2Nyb2xsSGVpZ2h0KSxufHwobj1pLmNsaWVudFdpZHRofHxpLnNjcm9sbFdpZHRoKTt2YXIgcz10aGlzLiR1cGRhdGVDYWNoZWRTaXplKGUsdCxuLHIpO2lmKCF0aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0fHwhbiYmIXIpcmV0dXJuIHRoaXMucmVzaXppbmc9MDtlJiYodGhpcy4kZ3V0dGVyTGF5ZXIuJHBhZGRpbmc9bnVsbCksZT90aGlzLiRyZW5kZXJDaGFuZ2VzKHN8dGhpcy4kY2hhbmdlcywhMCk6dGhpcy4kbG9vcC5zY2hlZHVsZShzfHRoaXMuJGNoYW5nZXMpLHRoaXMucmVzaXppbmcmJih0aGlzLnJlc2l6aW5nPTApLHRoaXMuc2Nyb2xsQmFyVi5zY3JvbGxMZWZ0PXRoaXMuc2Nyb2xsQmFyVi5zY3JvbGxUb3A9bnVsbH0sdGhpcy4kdXBkYXRlQ2FjaGVkU2l6ZT1mdW5jdGlvbihlLHQsbixyKXtyLT10aGlzLiRleHRyYUhlaWdodHx8MDt2YXIgcz0wLG89dGhpcy4kc2l6ZSx1PXt3aWR0aDpvLndpZHRoLGhlaWdodDpvLmhlaWdodCxzY3JvbGxlckhlaWdodDpvLnNjcm9sbGVySGVpZ2h0LHNjcm9sbGVyV2lkdGg6by5zY3JvbGxlcldpZHRofTtyJiYoZXx8by5oZWlnaHQhPXIpJiYoby5oZWlnaHQ9cixzfD10aGlzLkNIQU5HRV9TSVpFLG8uc2Nyb2xsZXJIZWlnaHQ9by5oZWlnaHQsdGhpcy4kaG9yaXpTY3JvbGwmJihvLnNjcm9sbGVySGVpZ2h0LT10aGlzLnNjcm9sbEJhckguZ2V0SGVpZ2h0KCkpLHRoaXMuc2Nyb2xsQmFyVi5lbGVtZW50LnN0eWxlLmJvdHRvbT10aGlzLnNjcm9sbEJhckguZ2V0SGVpZ2h0KCkrInB4IixzfD10aGlzLkNIQU5HRV9TQ1JPTEwpO2lmKG4mJihlfHxvLndpZHRoIT1uKSl7c3w9dGhpcy5DSEFOR0VfU0laRSxvLndpZHRoPW4sdD09bnVsbCYmKHQ9dGhpcy4kc2hvd0d1dHRlcj90aGlzLiRndXR0ZXIub2Zmc2V0V2lkdGg6MCksdGhpcy5ndXR0ZXJXaWR0aD10LGkuc2V0U3R5bGUodGhpcy5zY3JvbGxCYXJILmVsZW1lbnQuc3R5bGUsImxlZnQiLHQrInB4IiksaS5zZXRTdHlsZSh0aGlzLnNjcm9sbGVyLnN0eWxlLCJsZWZ0Iix0K3RoaXMubWFyZ2luLmxlZnQrInB4Iiksby5zY3JvbGxlcldpZHRoPU1hdGgubWF4KDAsbi10LXRoaXMuc2Nyb2xsQmFyVi5nZXRXaWR0aCgpLXRoaXMubWFyZ2luLmgpLGkuc2V0U3R5bGUodGhpcy4kZ3V0dGVyLnN0eWxlLCJsZWZ0Iix0aGlzLm1hcmdpbi5sZWZ0KyJweCIpO3ZhciBhPXRoaXMuc2Nyb2xsQmFyVi5nZXRXaWR0aCgpKyJweCI7aS5zZXRTdHlsZSh0aGlzLnNjcm9sbEJhckguZWxlbWVudC5zdHlsZSwicmlnaHQiLGEpLGkuc2V0U3R5bGUodGhpcy5zY3JvbGxlci5zdHlsZSwicmlnaHQiLGEpLGkuc2V0U3R5bGUodGhpcy5zY3JvbGxlci5zdHlsZSwiYm90dG9tIix0aGlzLnNjcm9sbEJhckguZ2V0SGVpZ2h0KCkpO2lmKHRoaXMuc2Vzc2lvbiYmdGhpcy5zZXNzaW9uLmdldFVzZVdyYXBNb2RlKCkmJnRoaXMuYWRqdXN0V3JhcExpbWl0KCl8fGUpc3w9dGhpcy5DSEFOR0VfRlVMTH1yZXR1cm4gby4kZGlydHk9IW58fCFyLHMmJnRoaXMuX3NpZ25hbCgicmVzaXplIix1KSxzfSx0aGlzLm9uR3V0dGVyUmVzaXplPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuJHNob3dHdXR0ZXI/ZTowO3QhPXRoaXMuZ3V0dGVyV2lkdGgmJih0aGlzLiRjaGFuZ2VzfD10aGlzLiR1cGRhdGVDYWNoZWRTaXplKCEwLHQsdGhpcy4kc2l6ZS53aWR0aCx0aGlzLiRzaXplLmhlaWdodCkpLHRoaXMuc2Vzc2lvbi5nZXRVc2VXcmFwTW9kZSgpJiZ0aGlzLmFkanVzdFdyYXBMaW1pdCgpP3RoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfRlVMTCk6dGhpcy4kc2l6ZS4kZGlydHk/dGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9GVUxMKTp0aGlzLiRjb21wdXRlTGF5ZXJDb25maWcoKX0sdGhpcy5hZGp1c3RXcmFwTGltaXQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLiRzaXplLnNjcm9sbGVyV2lkdGgtdGhpcy4kcGFkZGluZyoyLHQ9TWF0aC5mbG9vcihlL3RoaXMuY2hhcmFjdGVyV2lkdGgpO3JldHVybiB0aGlzLnNlc3Npb24uYWRqdXN0V3JhcExpbWl0KHQsdGhpcy4kc2hvd1ByaW50TWFyZ2luJiZ0aGlzLiRwcmludE1hcmdpbkNvbHVtbil9LHRoaXMuc2V0QW5pbWF0ZWRTY3JvbGw9ZnVuY3Rpb24oZSl7dGhpcy5zZXRPcHRpb24oImFuaW1hdGVkU2Nyb2xsIixlKX0sdGhpcy5nZXRBbmltYXRlZFNjcm9sbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRhbmltYXRlZFNjcm9sbH0sdGhpcy5zZXRTaG93SW52aXNpYmxlcz1mdW5jdGlvbihlKXt0aGlzLnNldE9wdGlvbigic2hvd0ludmlzaWJsZXMiLGUpLHRoaXMuc2Vzc2lvbi4kYmlkaUhhbmRsZXIuc2V0U2hvd0ludmlzaWJsZXMoZSl9LHRoaXMuZ2V0U2hvd0ludmlzaWJsZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRPcHRpb24oInNob3dJbnZpc2libGVzIil9LHRoaXMuZ2V0RGlzcGxheUluZGVudEd1aWRlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldE9wdGlvbigiZGlzcGxheUluZGVudEd1aWRlcyIpfSx0aGlzLnNldERpc3BsYXlJbmRlbnRHdWlkZXM9ZnVuY3Rpb24oZSl7dGhpcy5zZXRPcHRpb24oImRpc3BsYXlJbmRlbnRHdWlkZXMiLGUpfSx0aGlzLnNldFNob3dQcmludE1hcmdpbj1mdW5jdGlvbihlKXt0aGlzLnNldE9wdGlvbigic2hvd1ByaW50TWFyZ2luIixlKX0sdGhpcy5nZXRTaG93UHJpbnRNYXJnaW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRPcHRpb24oInNob3dQcmludE1hcmdpbiIpfSx0aGlzLnNldFByaW50TWFyZ2luQ29sdW1uPWZ1bmN0aW9uKGUpe3RoaXMuc2V0T3B0aW9uKCJwcmludE1hcmdpbkNvbHVtbiIsZSl9LHRoaXMuZ2V0UHJpbnRNYXJnaW5Db2x1bW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRPcHRpb24oInByaW50TWFyZ2luQ29sdW1uIil9LHRoaXMuZ2V0U2hvd0d1dHRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldE9wdGlvbigic2hvd0d1dHRlciIpfSx0aGlzLnNldFNob3dHdXR0ZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc2V0T3B0aW9uKCJzaG93R3V0dGVyIixlKX0sdGhpcy5nZXRGYWRlRm9sZFdpZGdldHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRPcHRpb24oImZhZGVGb2xkV2lkZ2V0cyIpfSx0aGlzLnNldEZhZGVGb2xkV2lkZ2V0cz1mdW5jdGlvbihlKXt0aGlzLnNldE9wdGlvbigiZmFkZUZvbGRXaWRnZXRzIixlKX0sdGhpcy5zZXRIaWdobGlnaHRHdXR0ZXJMaW5lPWZ1bmN0aW9uKGUpe3RoaXMuc2V0T3B0aW9uKCJoaWdobGlnaHRHdXR0ZXJMaW5lIixlKX0sdGhpcy5nZXRIaWdobGlnaHRHdXR0ZXJMaW5lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0T3B0aW9uKCJoaWdobGlnaHRHdXR0ZXJMaW5lIil9LHRoaXMuJHVwZGF0ZVByaW50TWFyZ2luPWZ1bmN0aW9uKCl7aWYoIXRoaXMuJHNob3dQcmludE1hcmdpbiYmIXRoaXMuJHByaW50TWFyZ2luRWwpcmV0dXJuO2lmKCF0aGlzLiRwcmludE1hcmdpbkVsKXt2YXIgZT1pLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2UuY2xhc3NOYW1lPSJhY2VfbGF5ZXIgYWNlX3ByaW50LW1hcmdpbi1sYXllciIsdGhpcy4kcHJpbnRNYXJnaW5FbD1pLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuJHByaW50TWFyZ2luRWwuY2xhc3NOYW1lPSJhY2VfcHJpbnQtbWFyZ2luIixlLmFwcGVuZENoaWxkKHRoaXMuJHByaW50TWFyZ2luRWwpLHRoaXMuY29udGVudC5pbnNlcnRCZWZvcmUoZSx0aGlzLmNvbnRlbnQuZmlyc3RDaGlsZCl9dmFyIHQ9dGhpcy4kcHJpbnRNYXJnaW5FbC5zdHlsZTt0LmxlZnQ9TWF0aC5yb3VuZCh0aGlzLmNoYXJhY3RlcldpZHRoKnRoaXMuJHByaW50TWFyZ2luQ29sdW1uK3RoaXMuJHBhZGRpbmcpKyJweCIsdC52aXNpYmlsaXR5PXRoaXMuJHNob3dQcmludE1hcmdpbj8idmlzaWJsZSI6ImhpZGRlbiIsdGhpcy5zZXNzaW9uJiZ0aGlzLnNlc3Npb24uJHdyYXA9PS0xJiZ0aGlzLmFkanVzdFdyYXBMaW1pdCgpfSx0aGlzLmdldENvbnRhaW5lckVsZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250YWluZXJ9LHRoaXMuZ2V0TW91c2VFdmVudFRhcmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNjcm9sbGVyfSx0aGlzLmdldFRleHRBcmVhQ29udGFpbmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGFpbmVyfSx0aGlzLiRtb3ZlVGV4dEFyZWFUb0N1cnNvcj1mdW5jdGlvbigpe2lmKHRoaXMuJGlzTW91c2VQcmVzc2VkKXJldHVybjt2YXIgZT10aGlzLnRleHRhcmVhLnN0eWxlLHQ9dGhpcy4kY29tcG9zaXRpb247aWYoIXRoaXMuJGtlZXBUZXh0QXJlYUF0Q3Vyc29yJiYhdCl7aS50cmFuc2xhdGUodGhpcy50ZXh0YXJlYSwtMTAwLDApO3JldHVybn12YXIgbj10aGlzLiRjdXJzb3JMYXllci4kcGl4ZWxQb3M7aWYoIW4pcmV0dXJuO3QmJnQubWFya2VyUmFuZ2UmJihuPXRoaXMuJGN1cnNvckxheWVyLmdldFBpeGVsUG9zaXRpb24odC5tYXJrZXJSYW5nZS5zdGFydCwhMCkpO3ZhciByPXRoaXMubGF5ZXJDb25maWcscz1uLnRvcCxvPW4ubGVmdDtzLT1yLm9mZnNldDt2YXIgdT10JiZ0LnVzZVRleHRhcmVhRm9ySU1FP3RoaXMubGluZUhlaWdodDpnPzA6MTtpZihzPDB8fHM+ci5oZWlnaHQtdSl7aS50cmFuc2xhdGUodGhpcy50ZXh0YXJlYSwwLDApO3JldHVybn12YXIgYT0xLGY9dGhpcy4kc2l6ZS5oZWlnaHQtdTtpZighdClzKz10aGlzLmxpbmVIZWlnaHQ7ZWxzZSBpZih0LnVzZVRleHRhcmVhRm9ySU1FKXt2YXIgbD10aGlzLnRleHRhcmVhLnZhbHVlO2E9dGhpcy5jaGFyYWN0ZXJXaWR0aCp0aGlzLnNlc3Npb24uJGdldFN0cmluZ1NjcmVlbldpZHRoKGwpWzBdLHUrPTJ9ZWxzZSBzKz10aGlzLmxpbmVIZWlnaHQrMjtvLT10aGlzLnNjcm9sbExlZnQsbz50aGlzLiRzaXplLnNjcm9sbGVyV2lkdGgtYSYmKG89dGhpcy4kc2l6ZS5zY3JvbGxlcldpZHRoLWEpLG8rPXRoaXMuZ3V0dGVyV2lkdGgrdGhpcy5tYXJnaW4ubGVmdCxpLnNldFN0eWxlKGUsImhlaWdodCIsdSsicHgiKSxpLnNldFN0eWxlKGUsIndpZHRoIixhKyJweCIpLGkudHJhbnNsYXRlKHRoaXMudGV4dGFyZWEsTWF0aC5taW4obyx0aGlzLiRzaXplLnNjcm9sbGVyV2lkdGgtYSksTWF0aC5taW4ocyxmKSl9LHRoaXMuZ2V0Rmlyc3RWaXNpYmxlUm93PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGF5ZXJDb25maWcuZmlyc3RSb3d9LHRoaXMuZ2V0Rmlyc3RGdWxseVZpc2libGVSb3c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYXllckNvbmZpZy5maXJzdFJvdysodGhpcy5sYXllckNvbmZpZy5vZmZzZXQ9PT0wPzA6MSl9LHRoaXMuZ2V0TGFzdEZ1bGx5VmlzaWJsZVJvdz1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGF5ZXJDb25maWcsdD1lLmxhc3RSb3csbj10aGlzLnNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblJvdyh0LDApKmUubGluZUhlaWdodDtyZXR1cm4gbi10aGlzLnNlc3Npb24uZ2V0U2Nyb2xsVG9wKCk+ZS5oZWlnaHQtZS5saW5lSGVpZ2h0P3QtMTp0fSx0aGlzLmdldExhc3RWaXNpYmxlUm93PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGF5ZXJDb25maWcubGFzdFJvd30sdGhpcy4kcGFkZGluZz1udWxsLHRoaXMuc2V0UGFkZGluZz1mdW5jdGlvbihlKXt0aGlzLiRwYWRkaW5nPWUsdGhpcy4kdGV4dExheWVyLnNldFBhZGRpbmcoZSksdGhpcy4kY3Vyc29yTGF5ZXIuc2V0UGFkZGluZyhlKSx0aGlzLiRtYXJrZXJGcm9udC5zZXRQYWRkaW5nKGUpLHRoaXMuJG1hcmtlckJhY2suc2V0UGFkZGluZyhlKSx0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX0ZVTEwpLHRoaXMuJHVwZGF0ZVByaW50TWFyZ2luKCl9LHRoaXMuc2V0U2Nyb2xsTWFyZ2luPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXRoaXMuc2Nyb2xsTWFyZ2luO2kudG9wPWV8MCxpLmJvdHRvbT10fDAsaS5yaWdodD1yfDAsaS5sZWZ0PW58MCxpLnY9aS50b3AraS5ib3R0b20saS5oPWkubGVmdCtpLnJpZ2h0LGkudG9wJiZ0aGlzLnNjcm9sbFRvcDw9MCYmdGhpcy5zZXNzaW9uJiZ0aGlzLnNlc3Npb24uc2V0U2Nyb2xsVG9wKC1pLnRvcCksdGhpcy51cGRhdGVGdWxsKCl9LHRoaXMuc2V0TWFyZ2luPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXRoaXMubWFyZ2luO2kudG9wPWV8MCxpLmJvdHRvbT10fDAsaS5yaWdodD1yfDAsaS5sZWZ0PW58MCxpLnY9aS50b3AraS5ib3R0b20saS5oPWkubGVmdCtpLnJpZ2h0LHRoaXMuJHVwZGF0ZUNhY2hlZFNpemUoITAsdGhpcy5ndXR0ZXJXaWR0aCx0aGlzLiRzaXplLndpZHRoLHRoaXMuJHNpemUuaGVpZ2h0KSx0aGlzLnVwZGF0ZUZ1bGwoKX0sdGhpcy5nZXRIU2Nyb2xsQmFyQWx3YXlzVmlzaWJsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRoU2Nyb2xsQmFyQWx3YXlzVmlzaWJsZX0sdGhpcy5zZXRIU2Nyb2xsQmFyQWx3YXlzVmlzaWJsZT1mdW5jdGlvbihlKXt0aGlzLnNldE9wdGlvbigiaFNjcm9sbEJhckFsd2F5c1Zpc2libGUiLGUpfSx0aGlzLmdldFZTY3JvbGxCYXJBbHdheXNWaXNpYmxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHZTY3JvbGxCYXJBbHdheXNWaXNpYmxlfSx0aGlzLnNldFZTY3JvbGxCYXJBbHdheXNWaXNpYmxlPWZ1bmN0aW9uKGUpe3RoaXMuc2V0T3B0aW9uKCJ2U2Nyb2xsQmFyQWx3YXlzVmlzaWJsZSIsZSl9LHRoaXMuJHVwZGF0ZVNjcm9sbEJhclY9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxheWVyQ29uZmlnLm1heEhlaWdodCx0PXRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQ7IXRoaXMuJG1heExpbmVzJiZ0aGlzLiRzY3JvbGxQYXN0RW5kJiYoZS09KHQtdGhpcy5saW5lSGVpZ2h0KSp0aGlzLiRzY3JvbGxQYXN0RW5kLHRoaXMuc2Nyb2xsVG9wPmUtdCYmKGU9dGhpcy5zY3JvbGxUb3ArdCx0aGlzLnNjcm9sbEJhclYuc2Nyb2xsVG9wPW51bGwpKSx0aGlzLnNjcm9sbEJhclYuc2V0U2Nyb2xsSGVpZ2h0KGUrdGhpcy5zY3JvbGxNYXJnaW4udiksdGhpcy5zY3JvbGxCYXJWLnNldFNjcm9sbFRvcCh0aGlzLnNjcm9sbFRvcCt0aGlzLnNjcm9sbE1hcmdpbi50b3ApfSx0aGlzLiR1cGRhdGVTY3JvbGxCYXJIPWZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxCYXJILnNldFNjcm9sbFdpZHRoKHRoaXMubGF5ZXJDb25maWcud2lkdGgrMip0aGlzLiRwYWRkaW5nK3RoaXMuc2Nyb2xsTWFyZ2luLmgpLHRoaXMuc2Nyb2xsQmFySC5zZXRTY3JvbGxMZWZ0KHRoaXMuc2Nyb2xsTGVmdCt0aGlzLnNjcm9sbE1hcmdpbi5sZWZ0KX0sdGhpcy4kZnJvemVuPSExLHRoaXMuZnJlZXplPWZ1bmN0aW9uKCl7dGhpcy4kZnJvemVuPSEwfSx0aGlzLnVuZnJlZXplPWZ1bmN0aW9uKCl7dGhpcy4kZnJvemVuPSExfSx0aGlzLiRyZW5kZXJDaGFuZ2VzPWZ1bmN0aW9uKGUsdCl7dGhpcy4kY2hhbmdlcyYmKGV8PXRoaXMuJGNoYW5nZXMsdGhpcy4kY2hhbmdlcz0wKTtpZighdGhpcy5zZXNzaW9ufHwhdGhpcy5jb250YWluZXIub2Zmc2V0V2lkdGh8fHRoaXMuJGZyb3plbnx8IWUmJiF0KXt0aGlzLiRjaGFuZ2VzfD1lO3JldHVybn1pZih0aGlzLiRzaXplLiRkaXJ0eSlyZXR1cm4gdGhpcy4kY2hhbmdlc3w9ZSx0aGlzLm9uUmVzaXplKCEwKTt0aGlzLmxpbmVIZWlnaHR8fHRoaXMuJHRleHRMYXllci5jaGVja0ZvclNpemVDaGFuZ2VzKCksdGhpcy5fc2lnbmFsKCJiZWZvcmVSZW5kZXIiKSx0aGlzLnNlc3Npb24mJnRoaXMuc2Vzc2lvbi4kYmlkaUhhbmRsZXImJnRoaXMuc2Vzc2lvbi4kYmlkaUhhbmRsZXIudXBkYXRlQ2hhcmFjdGVyV2lkdGhzKHRoaXMuJGZvbnRNZXRyaWNzKTt2YXIgbj10aGlzLmxheWVyQ29uZmlnO2lmKGUmdGhpcy5DSEFOR0VfRlVMTHx8ZSZ0aGlzLkNIQU5HRV9TSVpFfHxlJnRoaXMuQ0hBTkdFX1RFWFR8fGUmdGhpcy5DSEFOR0VfTElORVN8fGUmdGhpcy5DSEFOR0VfU0NST0xMfHxlJnRoaXMuQ0hBTkdFX0hfU0NST0xMKXtlfD10aGlzLiRjb21wdXRlTGF5ZXJDb25maWcoKXx0aGlzLiRsb29wLmNsZWFyKCk7aWYobi5maXJzdFJvdyE9dGhpcy5sYXllckNvbmZpZy5maXJzdFJvdyYmbi5maXJzdFJvd1NjcmVlbj09dGhpcy5sYXllckNvbmZpZy5maXJzdFJvd1NjcmVlbil7dmFyIHI9dGhpcy5zY3JvbGxUb3ArKG4uZmlyc3RSb3ctdGhpcy5sYXllckNvbmZpZy5maXJzdFJvdykqdGhpcy5saW5lSGVpZ2h0O3I+MCYmKHRoaXMuc2Nyb2xsVG9wPXIsZXw9dGhpcy5DSEFOR0VfU0NST0xMLGV8PXRoaXMuJGNvbXB1dGVMYXllckNvbmZpZygpfHRoaXMuJGxvb3AuY2xlYXIoKSl9bj10aGlzLmxheWVyQ29uZmlnLHRoaXMuJHVwZGF0ZVNjcm9sbEJhclYoKSxlJnRoaXMuQ0hBTkdFX0hfU0NST0xMJiZ0aGlzLiR1cGRhdGVTY3JvbGxCYXJIKCksaS50cmFuc2xhdGUodGhpcy5jb250ZW50LC10aGlzLnNjcm9sbExlZnQsLW4ub2Zmc2V0KTt2YXIgcz1uLndpZHRoKzIqdGhpcy4kcGFkZGluZysicHgiLG89bi5taW5IZWlnaHQrInB4IjtpLnNldFN0eWxlKHRoaXMuY29udGVudC5zdHlsZSwid2lkdGgiLHMpLGkuc2V0U3R5bGUodGhpcy5jb250ZW50LnN0eWxlLCJoZWlnaHQiLG8pfWUmdGhpcy5DSEFOR0VfSF9TQ1JPTEwmJihpLnRyYW5zbGF0ZSh0aGlzLmNvbnRlbnQsLXRoaXMuc2Nyb2xsTGVmdCwtbi5vZmZzZXQpLHRoaXMuc2Nyb2xsZXIuY2xhc3NOYW1lPXRoaXMuc2Nyb2xsTGVmdDw9MD8iYWNlX3Njcm9sbGVyIjoiYWNlX3Njcm9sbGVyIGFjZV9zY3JvbGwtbGVmdCIpO2lmKGUmdGhpcy5DSEFOR0VfRlVMTCl7dGhpcy4kY2hhbmdlZExpbmVzPW51bGwsdGhpcy4kdGV4dExheWVyLnVwZGF0ZShuKSx0aGlzLiRzaG93R3V0dGVyJiZ0aGlzLiRndXR0ZXJMYXllci51cGRhdGUobiksdGhpcy4kbWFya2VyQmFjay51cGRhdGUobiksdGhpcy4kbWFya2VyRnJvbnQudXBkYXRlKG4pLHRoaXMuJGN1cnNvckxheWVyLnVwZGF0ZShuKSx0aGlzLiRtb3ZlVGV4dEFyZWFUb0N1cnNvcigpLHRoaXMuX3NpZ25hbCgiYWZ0ZXJSZW5kZXIiKTtyZXR1cm59aWYoZSZ0aGlzLkNIQU5HRV9TQ1JPTEwpe3RoaXMuJGNoYW5nZWRMaW5lcz1udWxsLGUmdGhpcy5DSEFOR0VfVEVYVHx8ZSZ0aGlzLkNIQU5HRV9MSU5FUz90aGlzLiR0ZXh0TGF5ZXIudXBkYXRlKG4pOnRoaXMuJHRleHRMYXllci5zY3JvbGxMaW5lcyhuKSx0aGlzLiRzaG93R3V0dGVyJiYoZSZ0aGlzLkNIQU5HRV9HVVRURVJ8fGUmdGhpcy5DSEFOR0VfTElORVM/dGhpcy4kZ3V0dGVyTGF5ZXIudXBkYXRlKG4pOnRoaXMuJGd1dHRlckxheWVyLnNjcm9sbExpbmVzKG4pKSx0aGlzLiRtYXJrZXJCYWNrLnVwZGF0ZShuKSx0aGlzLiRtYXJrZXJGcm9udC51cGRhdGUobiksdGhpcy4kY3Vyc29yTGF5ZXIudXBkYXRlKG4pLHRoaXMuJG1vdmVUZXh0QXJlYVRvQ3Vyc29yKCksdGhpcy5fc2lnbmFsKCJhZnRlclJlbmRlciIpO3JldHVybn1lJnRoaXMuQ0hBTkdFX1RFWFQ/KHRoaXMuJGNoYW5nZWRMaW5lcz1udWxsLHRoaXMuJHRleHRMYXllci51cGRhdGUobiksdGhpcy4kc2hvd0d1dHRlciYmdGhpcy4kZ3V0dGVyTGF5ZXIudXBkYXRlKG4pKTplJnRoaXMuQ0hBTkdFX0xJTkVTPyh0aGlzLiR1cGRhdGVMaW5lcygpfHxlJnRoaXMuQ0hBTkdFX0dVVFRFUiYmdGhpcy4kc2hvd0d1dHRlcikmJnRoaXMuJGd1dHRlckxheWVyLnVwZGF0ZShuKTplJnRoaXMuQ0hBTkdFX1RFWFR8fGUmdGhpcy5DSEFOR0VfR1VUVEVSP3RoaXMuJHNob3dHdXR0ZXImJnRoaXMuJGd1dHRlckxheWVyLnVwZGF0ZShuKTplJnRoaXMuQ0hBTkdFX0NVUlNPUiYmdGhpcy4kaGlnaGxpZ2h0R3V0dGVyTGluZSYmdGhpcy4kZ3V0dGVyTGF5ZXIudXBkYXRlTGluZUhpZ2hsaWdodChuKSxlJnRoaXMuQ0hBTkdFX0NVUlNPUiYmKHRoaXMuJGN1cnNvckxheWVyLnVwZGF0ZShuKSx0aGlzLiRtb3ZlVGV4dEFyZWFUb0N1cnNvcigpKSxlJih0aGlzLkNIQU5HRV9NQVJLRVJ8dGhpcy5DSEFOR0VfTUFSS0VSX0ZST05UKSYmdGhpcy4kbWFya2VyRnJvbnQudXBkYXRlKG4pLGUmKHRoaXMuQ0hBTkdFX01BUktFUnx0aGlzLkNIQU5HRV9NQVJLRVJfQkFDSykmJnRoaXMuJG1hcmtlckJhY2sudXBkYXRlKG4pLHRoaXMuX3NpZ25hbCgiYWZ0ZXJSZW5kZXIiKX0sdGhpcy4kYXV0b3NpemU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnNlc3Npb24uZ2V0U2NyZWVuTGVuZ3RoKCkqdGhpcy5saW5lSGVpZ2h0LHQ9dGhpcy4kbWF4TGluZXMqdGhpcy5saW5lSGVpZ2h0LG49TWF0aC5taW4odCxNYXRoLm1heCgodGhpcy4kbWluTGluZXN8fDEpKnRoaXMubGluZUhlaWdodCxlKSkrdGhpcy5zY3JvbGxNYXJnaW4udisodGhpcy4kZXh0cmFIZWlnaHR8fDApO3RoaXMuJGhvcml6U2Nyb2xsJiYobis9dGhpcy5zY3JvbGxCYXJILmdldEhlaWdodCgpKSx0aGlzLiRtYXhQaXhlbEhlaWdodCYmbj50aGlzLiRtYXhQaXhlbEhlaWdodCYmKG49dGhpcy4kbWF4UGl4ZWxIZWlnaHQpO3ZhciByPW48PTIqdGhpcy5saW5lSGVpZ2h0LGk9IXImJmU+dDtpZihuIT10aGlzLmRlc2lyZWRIZWlnaHR8fHRoaXMuJHNpemUuaGVpZ2h0IT10aGlzLmRlc2lyZWRIZWlnaHR8fGkhPXRoaXMuJHZTY3JvbGwpe2khPXRoaXMuJHZTY3JvbGwmJih0aGlzLiR2U2Nyb2xsPWksdGhpcy5zY3JvbGxCYXJWLnNldFZpc2libGUoaSkpO3ZhciBzPXRoaXMuY29udGFpbmVyLmNsaWVudFdpZHRoO3RoaXMuY29udGFpbmVyLnN0eWxlLmhlaWdodD1uKyJweCIsdGhpcy4kdXBkYXRlQ2FjaGVkU2l6ZSghMCx0aGlzLiRndXR0ZXJXaWR0aCxzLG4pLHRoaXMuZGVzaXJlZEhlaWdodD1uLHRoaXMuX3NpZ25hbCgiYXV0b3NpemUiKX19LHRoaXMuJGNvbXB1dGVMYXllckNvbmZpZz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuc2Vzc2lvbix0PXRoaXMuJHNpemUsbj10LmhlaWdodDw9Mip0aGlzLmxpbmVIZWlnaHQscj10aGlzLnNlc3Npb24uZ2V0U2NyZWVuTGVuZ3RoKCksaT1yKnRoaXMubGluZUhlaWdodCxzPXRoaXMuJGdldExvbmdlc3RMaW5lKCksbz0hbiYmKHRoaXMuJGhTY3JvbGxCYXJBbHdheXNWaXNpYmxlfHx0LnNjcm9sbGVyV2lkdGgtcy0yKnRoaXMuJHBhZGRpbmc8MCksdT10aGlzLiRob3JpelNjcm9sbCE9PW87dSYmKHRoaXMuJGhvcml6U2Nyb2xsPW8sdGhpcy5zY3JvbGxCYXJILnNldFZpc2libGUobykpO3ZhciBhPXRoaXMuJHZTY3JvbGw7dGhpcy4kbWF4TGluZXMmJnRoaXMubGluZUhlaWdodD4xJiZ0aGlzLiRhdXRvc2l6ZSgpO3ZhciBmPXQuc2Nyb2xsZXJIZWlnaHQrdGhpcy5saW5lSGVpZ2h0LGw9IXRoaXMuJG1heExpbmVzJiZ0aGlzLiRzY3JvbGxQYXN0RW5kPyh0LnNjcm9sbGVySGVpZ2h0LXRoaXMubGluZUhlaWdodCkqdGhpcy4kc2Nyb2xsUGFzdEVuZDowO2krPWw7dmFyIGM9dGhpcy5zY3JvbGxNYXJnaW47dGhpcy5zZXNzaW9uLnNldFNjcm9sbFRvcChNYXRoLm1heCgtYy50b3AsTWF0aC5taW4odGhpcy5zY3JvbGxUb3AsaS10LnNjcm9sbGVySGVpZ2h0K2MuYm90dG9tKSkpLHRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxMZWZ0KE1hdGgubWF4KC1jLmxlZnQsTWF0aC5taW4odGhpcy5zY3JvbGxMZWZ0LHMrMip0aGlzLiRwYWRkaW5nLXQuc2Nyb2xsZXJXaWR0aCtjLnJpZ2h0KSkpO3ZhciBoPSFuJiYodGhpcy4kdlNjcm9sbEJhckFsd2F5c1Zpc2libGV8fHQuc2Nyb2xsZXJIZWlnaHQtaStsPDB8fHRoaXMuc2Nyb2xsVG9wPmMudG9wKSxwPWEhPT1oO3AmJih0aGlzLiR2U2Nyb2xsPWgsdGhpcy5zY3JvbGxCYXJWLnNldFZpc2libGUoaCkpO3ZhciBkPXRoaXMuc2Nyb2xsVG9wJXRoaXMubGluZUhlaWdodCx2PU1hdGguY2VpbChmL3RoaXMubGluZUhlaWdodCktMSxtPU1hdGgubWF4KDAsTWF0aC5yb3VuZCgodGhpcy5zY3JvbGxUb3AtZCkvdGhpcy5saW5lSGVpZ2h0KSksZz1tK3YseSxiLHc9dGhpcy5saW5lSGVpZ2h0O209ZS5zY3JlZW5Ub0RvY3VtZW50Um93KG0sMCk7dmFyIEU9ZS5nZXRGb2xkTGluZShtKTtFJiYobT1FLnN0YXJ0LnJvdykseT1lLmRvY3VtZW50VG9TY3JlZW5Sb3cobSwwKSxiPWUuZ2V0Um93TGVuZ3RoKG0pKncsZz1NYXRoLm1pbihlLnNjcmVlblRvRG9jdW1lbnRSb3coZywwKSxlLmdldExlbmd0aCgpLTEpLGY9dC5zY3JvbGxlckhlaWdodCtlLmdldFJvd0xlbmd0aChnKSp3K2IsZD10aGlzLnNjcm9sbFRvcC15Knc7dmFyIFM9MDtpZih0aGlzLmxheWVyQ29uZmlnLndpZHRoIT1zfHx1KVM9dGhpcy5DSEFOR0VfSF9TQ1JPTEw7aWYodXx8cClTfD10aGlzLiR1cGRhdGVDYWNoZWRTaXplKCEwLHRoaXMuZ3V0dGVyV2lkdGgsdC53aWR0aCx0LmhlaWdodCksdGhpcy5fc2lnbmFsKCJzY3JvbGxiYXJWaXNpYmlsaXR5Q2hhbmdlZCIpLHAmJihzPXRoaXMuJGdldExvbmdlc3RMaW5lKCkpO3JldHVybiB0aGlzLmxheWVyQ29uZmlnPXt3aWR0aDpzLHBhZGRpbmc6dGhpcy4kcGFkZGluZyxmaXJzdFJvdzptLGZpcnN0Um93U2NyZWVuOnksbGFzdFJvdzpnLGxpbmVIZWlnaHQ6dyxjaGFyYWN0ZXJXaWR0aDp0aGlzLmNoYXJhY3RlcldpZHRoLG1pbkhlaWdodDpmLG1heEhlaWdodDppLG9mZnNldDpkLGd1dHRlck9mZnNldDp3P01hdGgubWF4KDAsTWF0aC5jZWlsKChkK3QuaGVpZ2h0LXQuc2Nyb2xsZXJIZWlnaHQpL3cpKTowLGhlaWdodDp0aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0fSx0aGlzLnNlc3Npb24uJGJpZGlIYW5kbGVyJiZ0aGlzLnNlc3Npb24uJGJpZGlIYW5kbGVyLnNldENvbnRlbnRXaWR0aChzLXRoaXMuJHBhZGRpbmcpLFN9LHRoaXMuJHVwZGF0ZUxpbmVzPWZ1bmN0aW9uKCl7aWYoIXRoaXMuJGNoYW5nZWRMaW5lcylyZXR1cm47dmFyIGU9dGhpcy4kY2hhbmdlZExpbmVzLmZpcnN0Um93LHQ9dGhpcy4kY2hhbmdlZExpbmVzLmxhc3RSb3c7dGhpcy4kY2hhbmdlZExpbmVzPW51bGw7dmFyIG49dGhpcy5sYXllckNvbmZpZztpZihlPm4ubGFzdFJvdysxKXJldHVybjtpZih0PG4uZmlyc3RSb3cpcmV0dXJuO2lmKHQ9PT1JbmZpbml0eSl7dGhpcy4kc2hvd0d1dHRlciYmdGhpcy4kZ3V0dGVyTGF5ZXIudXBkYXRlKG4pLHRoaXMuJHRleHRMYXllci51cGRhdGUobik7cmV0dXJufXJldHVybiB0aGlzLiR0ZXh0TGF5ZXIudXBkYXRlTGluZXMobixlLHQpLCEwfSx0aGlzLiRnZXRMb25nZXN0TGluZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuc2Vzc2lvbi5nZXRTY3JlZW5XaWR0aCgpO3JldHVybiB0aGlzLnNob3dJbnZpc2libGVzJiYhdGhpcy5zZXNzaW9uLiR1c2VXcmFwTW9kZSYmKGUrPTEpLHRoaXMuJHRleHRMYXllciYmZT50aGlzLiR0ZXh0TGF5ZXIuTUFYX0xJTkVfTEVOR1RIJiYoZT10aGlzLiR0ZXh0TGF5ZXIuTUFYX0xJTkVfTEVOR1RIKzMwKSxNYXRoLm1heCh0aGlzLiRzaXplLnNjcm9sbGVyV2lkdGgtMip0aGlzLiRwYWRkaW5nLE1hdGgucm91bmQoZSp0aGlzLmNoYXJhY3RlcldpZHRoKSl9LHRoaXMudXBkYXRlRnJvbnRNYXJrZXJzPWZ1bmN0aW9uKCl7dGhpcy4kbWFya2VyRnJvbnQuc2V0TWFya2Vycyh0aGlzLnNlc3Npb24uZ2V0TWFya2VycyghMCkpLHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfTUFSS0VSX0ZST05UKX0sdGhpcy51cGRhdGVCYWNrTWFya2Vycz1mdW5jdGlvbigpe3RoaXMuJG1hcmtlckJhY2suc2V0TWFya2Vycyh0aGlzLnNlc3Npb24uZ2V0TWFya2VycygpKSx0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX01BUktFUl9CQUNLKX0sdGhpcy5hZGRHdXR0ZXJEZWNvcmF0aW9uPWZ1bmN0aW9uKGUsdCl7dGhpcy4kZ3V0dGVyTGF5ZXIuYWRkR3V0dGVyRGVjb3JhdGlvbihlLHQpfSx0aGlzLnJlbW92ZUd1dHRlckRlY29yYXRpb249ZnVuY3Rpb24oZSx0KXt0aGlzLiRndXR0ZXJMYXllci5yZW1vdmVHdXR0ZXJEZWNvcmF0aW9uKGUsdCl9LHRoaXMudXBkYXRlQnJlYWtwb2ludHM9ZnVuY3Rpb24oZSl7dGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9HVVRURVIpfSx0aGlzLnNldEFubm90YXRpb25zPWZ1bmN0aW9uKGUpe3RoaXMuJGd1dHRlckxheWVyLnNldEFubm90YXRpb25zKGUpLHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfR1VUVEVSKX0sdGhpcy51cGRhdGVDdXJzb3I9ZnVuY3Rpb24oKXt0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX0NVUlNPUil9LHRoaXMuaGlkZUN1cnNvcj1mdW5jdGlvbigpe3RoaXMuJGN1cnNvckxheWVyLmhpZGVDdXJzb3IoKX0sdGhpcy5zaG93Q3Vyc29yPWZ1bmN0aW9uKCl7dGhpcy4kY3Vyc29yTGF5ZXIuc2hvd0N1cnNvcigpfSx0aGlzLnNjcm9sbFNlbGVjdGlvbkludG9WaWV3PWZ1bmN0aW9uKGUsdCxuKXt0aGlzLnNjcm9sbEN1cnNvckludG9WaWV3KGUsbiksdGhpcy5zY3JvbGxDdXJzb3JJbnRvVmlldyh0LG4pfSx0aGlzLnNjcm9sbEN1cnNvckludG9WaWV3PWZ1bmN0aW9uKGUsdCxuKXtpZih0aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0PT09MClyZXR1cm47dmFyIHI9dGhpcy4kY3Vyc29yTGF5ZXIuZ2V0UGl4ZWxQb3NpdGlvbihlKSxpPXIubGVmdCxzPXIudG9wLG89biYmbi50b3B8fDAsdT1uJiZuLmJvdHRvbXx8MCxhPXRoaXMuJHNjcm9sbEFuaW1hdGlvbj90aGlzLnNlc3Npb24uZ2V0U2Nyb2xsVG9wKCk6dGhpcy5zY3JvbGxUb3A7YStvPnM/KHQmJmErbz5zK3RoaXMubGluZUhlaWdodCYmKHMtPXQqdGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodCkscz09PTAmJihzPS10aGlzLnNjcm9sbE1hcmdpbi50b3ApLHRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxUb3AocykpOmErdGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodC11PHMrdGhpcy5saW5lSGVpZ2h0JiYodCYmYSt0aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0LXU8cy10aGlzLmxpbmVIZWlnaHQmJihzKz10KnRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQpLHRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxUb3Aocyt0aGlzLmxpbmVIZWlnaHQrdS10aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0KSk7dmFyIGY9dGhpcy5zY3JvbGxMZWZ0O2Y+aT8oaTx0aGlzLiRwYWRkaW5nKzIqdGhpcy5sYXllckNvbmZpZy5jaGFyYWN0ZXJXaWR0aCYmKGk9LXRoaXMuc2Nyb2xsTWFyZ2luLmxlZnQpLHRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxMZWZ0KGkpKTpmK3RoaXMuJHNpemUuc2Nyb2xsZXJXaWR0aDxpK3RoaXMuY2hhcmFjdGVyV2lkdGg/dGhpcy5zZXNzaW9uLnNldFNjcm9sbExlZnQoTWF0aC5yb3VuZChpK3RoaXMuY2hhcmFjdGVyV2lkdGgtdGhpcy4kc2l6ZS5zY3JvbGxlcldpZHRoKSk6Zjw9dGhpcy4kcGFkZGluZyYmaS1mPHRoaXMuY2hhcmFjdGVyV2lkdGgmJnRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxMZWZ0KDApfSx0aGlzLmdldFNjcm9sbFRvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlc3Npb24uZ2V0U2Nyb2xsVG9wKCl9LHRoaXMuZ2V0U2Nyb2xsTGVmdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlc3Npb24uZ2V0U2Nyb2xsTGVmdCgpfSx0aGlzLmdldFNjcm9sbFRvcFJvdz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNjcm9sbFRvcC90aGlzLmxpbmVIZWlnaHR9LHRoaXMuZ2V0U2Nyb2xsQm90dG9tUm93PWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5mbG9vcigodGhpcy5zY3JvbGxUb3ArdGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodCkvdGhpcy5saW5lSGVpZ2h0KS0xKX0sdGhpcy5zY3JvbGxUb1Jvdz1mdW5jdGlvbihlKXt0aGlzLnNlc3Npb24uc2V0U2Nyb2xsVG9wKGUqdGhpcy5saW5lSGVpZ2h0KX0sdGhpcy5hbGlnbkN1cnNvcj1mdW5jdGlvbihlLHQpe3R5cGVvZiBlPT0ibnVtYmVyIiYmKGU9e3JvdzplLGNvbHVtbjowfSk7dmFyIG49dGhpcy4kY3Vyc29yTGF5ZXIuZ2V0UGl4ZWxQb3NpdGlvbihlKSxyPXRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQtdGhpcy5saW5lSGVpZ2h0LGk9bi50b3AtcioodHx8MCk7cmV0dXJuIHRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxUb3AoaSksaX0sdGhpcy5TVEVQUz04LHRoaXMuJGNhbGNTdGVwcz1mdW5jdGlvbihlLHQpe3ZhciBuPTAscj10aGlzLlNURVBTLGk9W10scz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG4qKE1hdGgucG93KGUtMSwzKSsxKSt0fTtmb3Iobj0wO248cjsrK24paS5wdXNoKHMobi90aGlzLlNURVBTLGUsdC1lKSk7cmV0dXJuIGl9LHRoaXMuc2Nyb2xsVG9MaW5lPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXRoaXMuJGN1cnNvckxheWVyLmdldFBpeGVsUG9zaXRpb24oe3JvdzplLGNvbHVtbjowfSkscz1pLnRvcDt0JiYocy09dGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodC8yKTt2YXIgbz10aGlzLnNjcm9sbFRvcDt0aGlzLnNlc3Npb24uc2V0U2Nyb2xsVG9wKHMpLG4hPT0hMSYmdGhpcy5hbmltYXRlU2Nyb2xsaW5nKG8scil9LHRoaXMuYW5pbWF0ZVNjcm9sbGluZz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuc2Nyb2xsVG9wO2lmKCF0aGlzLiRhbmltYXRlZFNjcm9sbClyZXR1cm47dmFyIHI9dGhpcztpZihlPT1uKXJldHVybjtpZih0aGlzLiRzY3JvbGxBbmltYXRpb24pe3ZhciBpPXRoaXMuJHNjcm9sbEFuaW1hdGlvbi5zdGVwcztpZihpLmxlbmd0aCl7ZT1pWzBdO2lmKGU9PW4pcmV0dXJufX12YXIgcz1yLiRjYWxjU3RlcHMoZSxuKTt0aGlzLiRzY3JvbGxBbmltYXRpb249e2Zyb206ZSx0bzpuLHN0ZXBzOnN9LGNsZWFySW50ZXJ2YWwodGhpcy4kdGltZXIpLHIuc2Vzc2lvbi5zZXRTY3JvbGxUb3Aocy5zaGlmdCgpKSxyLnNlc3Npb24uJHNjcm9sbFRvcD1uLHRoaXMuJHRpbWVyPXNldEludGVydmFsKGZ1bmN0aW9uKCl7cy5sZW5ndGg/KHIuc2Vzc2lvbi5zZXRTY3JvbGxUb3Aocy5zaGlmdCgpKSxyLnNlc3Npb24uJHNjcm9sbFRvcD1uKTpuIT1udWxsPyhyLnNlc3Npb24uJHNjcm9sbFRvcD0tMSxyLnNlc3Npb24uc2V0U2Nyb2xsVG9wKG4pLG49bnVsbCk6KHIuJHRpbWVyPWNsZWFySW50ZXJ2YWwoci4kdGltZXIpLHIuJHNjcm9sbEFuaW1hdGlvbj1udWxsLHQmJnQoKSl9LDEwKX0sdGhpcy5zY3JvbGxUb1k9ZnVuY3Rpb24oZSl7dGhpcy5zY3JvbGxUb3AhPT1lJiYodGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9TQ1JPTEwpLHRoaXMuc2Nyb2xsVG9wPWUpfSx0aGlzLnNjcm9sbFRvWD1mdW5jdGlvbihlKXt0aGlzLnNjcm9sbExlZnQhPT1lJiYodGhpcy5zY3JvbGxMZWZ0PWUpLHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfSF9TQ1JPTEwpfSx0aGlzLnNjcm9sbFRvPWZ1bmN0aW9uKGUsdCl7dGhpcy5zZXNzaW9uLnNldFNjcm9sbFRvcCh0KSx0aGlzLnNlc3Npb24uc2V0U2Nyb2xsTGVmdCh0KX0sdGhpcy5zY3JvbGxCeT1mdW5jdGlvbihlLHQpe3QmJnRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxUb3AodGhpcy5zZXNzaW9uLmdldFNjcm9sbFRvcCgpK3QpLGUmJnRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxMZWZ0KHRoaXMuc2Vzc2lvbi5nZXRTY3JvbGxMZWZ0KCkrZSl9LHRoaXMuaXNTY3JvbGxhYmxlQnk9ZnVuY3Rpb24oZSx0KXtpZih0PDAmJnRoaXMuc2Vzc2lvbi5nZXRTY3JvbGxUb3AoKT49MS10aGlzLnNjcm9sbE1hcmdpbi50b3ApcmV0dXJuITA7aWYodD4wJiZ0aGlzLnNlc3Npb24uZ2V0U2Nyb2xsVG9wKCkrdGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodC10aGlzLmxheWVyQ29uZmlnLm1heEhlaWdodDwtMSt0aGlzLnNjcm9sbE1hcmdpbi5ib3R0b20pcmV0dXJuITA7aWYoZTwwJiZ0aGlzLnNlc3Npb24uZ2V0U2Nyb2xsTGVmdCgpPj0xLXRoaXMuc2Nyb2xsTWFyZ2luLmxlZnQpcmV0dXJuITA7aWYoZT4wJiZ0aGlzLnNlc3Npb24uZ2V0U2Nyb2xsTGVmdCgpK3RoaXMuJHNpemUuc2Nyb2xsZXJXaWR0aC10aGlzLmxheWVyQ29uZmlnLndpZHRoPC0xK3RoaXMuc2Nyb2xsTWFyZ2luLnJpZ2h0KXJldHVybiEwfSx0aGlzLnBpeGVsVG9TY3JlZW5Db29yZGluYXRlcz1mdW5jdGlvbihlLHQpe3ZhciBuO2lmKHRoaXMuJGhhc0Nzc1RyYW5zZm9ybXMpe249e3RvcDowLGxlZnQ6MH07dmFyIHI9dGhpcy4kZm9udE1ldHJpY3MudHJhbnNmb3JtQ29vcmRpbmF0ZXMoW2UsdF0pO2U9clsxXS10aGlzLmd1dHRlcldpZHRoLXRoaXMubWFyZ2luLmxlZnQsdD1yWzBdfWVsc2Ugbj10aGlzLnNjcm9sbGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3ZhciBpPWUrdGhpcy5zY3JvbGxMZWZ0LW4ubGVmdC10aGlzLiRwYWRkaW5nLHM9aS90aGlzLmNoYXJhY3RlcldpZHRoLG89TWF0aC5mbG9vcigodCt0aGlzLnNjcm9sbFRvcC1uLnRvcCkvdGhpcy5saW5lSGVpZ2h0KSx1PXRoaXMuJGJsb2NrQ3Vyc29yP01hdGguZmxvb3Iocyk6TWF0aC5yb3VuZChzKTtyZXR1cm57cm93Om8sY29sdW1uOnUsc2lkZTpzLXU+MD8xOi0xLG9mZnNldFg6aX19LHRoaXMuc2NyZWVuVG9UZXh0Q29vcmRpbmF0ZXM9ZnVuY3Rpb24oZSx0KXt2YXIgbjtpZih0aGlzLiRoYXNDc3NUcmFuc2Zvcm1zKXtuPXt0b3A6MCxsZWZ0OjB9O3ZhciByPXRoaXMuJGZvbnRNZXRyaWNzLnRyYW5zZm9ybUNvb3JkaW5hdGVzKFtlLHRdKTtlPXJbMV0tdGhpcy5ndXR0ZXJXaWR0aC10aGlzLm1hcmdpbi5sZWZ0LHQ9clswXX1lbHNlIG49dGhpcy5zY3JvbGxlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt2YXIgaT1lK3RoaXMuc2Nyb2xsTGVmdC1uLmxlZnQtdGhpcy4kcGFkZGluZyxzPWkvdGhpcy5jaGFyYWN0ZXJXaWR0aCxvPXRoaXMuJGJsb2NrQ3Vyc29yP01hdGguZmxvb3Iocyk6TWF0aC5yb3VuZChzKSx1PU1hdGguZmxvb3IoKHQrdGhpcy5zY3JvbGxUb3Atbi50b3ApL3RoaXMubGluZUhlaWdodCk7cmV0dXJuIHRoaXMuc2Vzc2lvbi5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24odSxNYXRoLm1heChvLDApLGkpfSx0aGlzLnRleHRUb1NjcmVlbkNvb3JkaW5hdGVzPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5zY3JvbGxlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPXRoaXMuc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24oZSx0KSxpPXRoaXMuJHBhZGRpbmcrKHRoaXMuc2Vzc2lvbi4kYmlkaUhhbmRsZXIuaXNCaWRpUm93KHIucm93LGUpP3RoaXMuc2Vzc2lvbi4kYmlkaUhhbmRsZXIuZ2V0UG9zTGVmdChyLmNvbHVtbik6TWF0aC5yb3VuZChyLmNvbHVtbip0aGlzLmNoYXJhY3RlcldpZHRoKSkscz1yLnJvdyp0aGlzLmxpbmVIZWlnaHQ7cmV0dXJue3BhZ2VYOm4ubGVmdCtpLXRoaXMuc2Nyb2xsTGVmdCxwYWdlWTpuLnRvcCtzLXRoaXMuc2Nyb2xsVG9wfX0sdGhpcy52aXN1YWxpemVGb2N1cz1mdW5jdGlvbigpe2kuYWRkQ3NzQ2xhc3ModGhpcy5jb250YWluZXIsImFjZV9mb2N1cyIpfSx0aGlzLnZpc3VhbGl6ZUJsdXI9ZnVuY3Rpb24oKXtpLnJlbW92ZUNzc0NsYXNzKHRoaXMuY29udGFpbmVyLCJhY2VfZm9jdXMiKX0sdGhpcy5zaG93Q29tcG9zaXRpb249ZnVuY3Rpb24oZSl7dGhpcy4kY29tcG9zaXRpb249ZSxlLmNzc1RleHR8fChlLmNzc1RleHQ9dGhpcy50ZXh0YXJlYS5zdHlsZS5jc3NUZXh0KSxlLnVzZVRleHRhcmVhRm9ySU1FPXRoaXMuJHVzZVRleHRhcmVhRm9ySU1FLHRoaXMuJHVzZVRleHRhcmVhRm9ySU1FPyhpLmFkZENzc0NsYXNzKHRoaXMudGV4dGFyZWEsImFjZV9jb21wb3NpdGlvbiIpLHRoaXMudGV4dGFyZWEuc3R5bGUuY3NzVGV4dD0iIix0aGlzLiRtb3ZlVGV4dEFyZWFUb0N1cnNvcigpLHRoaXMuJGN1cnNvckxheWVyLmVsZW1lbnQuc3R5bGUuZGlzcGxheT0ibm9uZSIpOmUubWFya2VySWQ9dGhpcy5zZXNzaW9uLmFkZE1hcmtlcihlLm1hcmtlclJhbmdlLCJhY2VfY29tcG9zaXRpb25fbWFya2VyIiwidGV4dCIpfSx0aGlzLnNldENvbXBvc2l0aW9uVGV4dD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnNlc3Npb24uc2VsZWN0aW9uLmN1cnNvcjt0aGlzLmFkZFRva2VuKGUsImNvbXBvc2l0aW9uX3BsYWNlaG9sZGVyIix0LnJvdyx0LmNvbHVtbiksdGhpcy4kbW92ZVRleHRBcmVhVG9DdXJzb3IoKX0sdGhpcy5oaWRlQ29tcG9zaXRpb249ZnVuY3Rpb24oKXtpZighdGhpcy4kY29tcG9zaXRpb24pcmV0dXJuO3RoaXMuJGNvbXBvc2l0aW9uLm1hcmtlcklkJiZ0aGlzLnNlc3Npb24ucmVtb3ZlTWFya2VyKHRoaXMuJGNvbXBvc2l0aW9uLm1hcmtlcklkKSxpLnJlbW92ZUNzc0NsYXNzKHRoaXMudGV4dGFyZWEsImFjZV9jb21wb3NpdGlvbiIpLHRoaXMudGV4dGFyZWEuc3R5bGUuY3NzVGV4dD10aGlzLiRjb21wb3NpdGlvbi5jc3NUZXh0LHRoaXMuJGNvbXBvc2l0aW9uPW51bGwsdGhpcy4kY3Vyc29yTGF5ZXIuZWxlbWVudC5zdHlsZS5kaXNwbGF5PSIifSx0aGlzLmFkZFRva2VuPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXRoaXMuc2Vzc2lvbjtpLmJnVG9rZW5pemVyLmxpbmVzW25dPW51bGw7dmFyIHM9e3R5cGU6dCx2YWx1ZTplfSxvPWkuZ2V0VG9rZW5zKG4pO2lmKHI9PW51bGwpby5wdXNoKHMpO2Vsc2V7dmFyIHU9MDtmb3IodmFyIGE9MDthPG8ubGVuZ3RoO2ErKyl7dmFyIGY9b1thXTt1Kz1mLnZhbHVlLmxlbmd0aDtpZihyPD11KXt2YXIgbD1mLnZhbHVlLmxlbmd0aC0odS1yKSxjPWYudmFsdWUuc2xpY2UoMCxsKSxoPWYudmFsdWUuc2xpY2UobCk7by5zcGxpY2UoYSwxLHt0eXBlOmYudHlwZSx2YWx1ZTpjfSxzLHt0eXBlOmYudHlwZSx2YWx1ZTpofSk7YnJlYWt9fX10aGlzLnVwZGF0ZUxpbmVzKG4sbil9LHRoaXMuc2V0VGhlbWU9ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBvKHIpe2lmKG4uJHRoZW1lSWQhPWUpcmV0dXJuIHQmJnQoKTtpZighcnx8IXIuY3NzQ2xhc3MpdGhyb3cgbmV3IEVycm9yKCJjb3VsZG4ndCBsb2FkIG1vZHVsZSAiK2UrIiBvciBpdCBkaWRuJ3QgY2FsbCBkZWZpbmUiKTtyLiRpZCYmKG4uJHRoZW1lSWQ9ci4kaWQpLGkuaW1wb3J0Q3NzU3RyaW5nKHIuY3NzVGV4dCxyLmNzc0NsYXNzLG4uY29udGFpbmVyKSxuLnRoZW1lJiZpLnJlbW92ZUNzc0NsYXNzKG4uY29udGFpbmVyLG4udGhlbWUuY3NzQ2xhc3MpO3ZhciBzPSJwYWRkaW5nImluIHI/ci5wYWRkaW5nOiJwYWRkaW5nImluKG4udGhlbWV8fHt9KT80Om4uJHBhZGRpbmc7bi4kcGFkZGluZyYmcyE9bi4kcGFkZGluZyYmbi5zZXRQYWRkaW5nKHMpLG4uJHRoZW1lPXIuY3NzQ2xhc3Msbi50aGVtZT1yLGkuYWRkQ3NzQ2xhc3Mobi5jb250YWluZXIsci5jc3NDbGFzcyksaS5zZXRDc3NDbGFzcyhuLmNvbnRhaW5lciwiYWNlX2RhcmsiLHIuaXNEYXJrKSxuLiRzaXplJiYobi4kc2l6ZS53aWR0aD0wLG4uJHVwZGF0ZVNpemVBc3luYygpKSxuLl9kaXNwYXRjaEV2ZW50KCJ0aGVtZUxvYWRlZCIse3RoZW1lOnJ9KSx0JiZ0KCl9dmFyIG49dGhpczt0aGlzLiR0aGVtZUlkPWUsbi5fZGlzcGF0Y2hFdmVudCgidGhlbWVDaGFuZ2UiLHt0aGVtZTplfSk7aWYoIWV8fHR5cGVvZiBlPT0ic3RyaW5nIil7dmFyIHI9ZXx8dGhpcy4kb3B0aW9ucy50aGVtZS5pbml0aWFsVmFsdWU7cy5sb2FkTW9kdWxlKFsidGhlbWUiLHJdLG8pfWVsc2UgbyhlKX0sdGhpcy5nZXRUaGVtZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLiR0aGVtZUlkfSx0aGlzLnNldFN0eWxlPWZ1bmN0aW9uKGUsdCl7aS5zZXRDc3NDbGFzcyh0aGlzLmNvbnRhaW5lcixlLHQhPT0hMSl9LHRoaXMudW5zZXRTdHlsZT1mdW5jdGlvbihlKXtpLnJlbW92ZUNzc0NsYXNzKHRoaXMuY29udGFpbmVyLGUpfSx0aGlzLnNldEN1cnNvclN0eWxlPWZ1bmN0aW9uKGUpe2kuc2V0U3R5bGUodGhpcy5zY3JvbGxlci5zdHlsZSwiY3Vyc29yIixlKX0sdGhpcy5zZXRNb3VzZUN1cnNvcj1mdW5jdGlvbihlKXtpLnNldFN0eWxlKHRoaXMuc2Nyb2xsZXIuc3R5bGUsImN1cnNvciIsZSl9LHRoaXMuYXR0YWNoVG9TaGFkb3dSb290PWZ1bmN0aW9uKCl7aS5pbXBvcnRDc3NTdHJpbmcodiwiYWNlX2VkaXRvci5jc3MiLHRoaXMuY29udGFpbmVyKX0sdGhpcy5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5mcmVlemUoKSx0aGlzLiRmb250TWV0cmljcy5kZXN0cm95KCksdGhpcy4kY3Vyc29yTGF5ZXIuZGVzdHJveSgpfX0pLmNhbGwoeS5wcm90b3R5cGUpLHMuZGVmaW5lT3B0aW9ucyh5LnByb3RvdHlwZSwicmVuZGVyZXIiLHthbmltYXRlZFNjcm9sbDp7aW5pdGlhbFZhbHVlOiExfSxzaG93SW52aXNpYmxlczp7c2V0OmZ1bmN0aW9uKGUpe3RoaXMuJHRleHRMYXllci5zZXRTaG93SW52aXNpYmxlcyhlKSYmdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9URVhUKX0saW5pdGlhbFZhbHVlOiExfSxzaG93UHJpbnRNYXJnaW46e3NldDpmdW5jdGlvbigpe3RoaXMuJHVwZGF0ZVByaW50TWFyZ2luKCl9LGluaXRpYWxWYWx1ZTohMH0scHJpbnRNYXJnaW5Db2x1bW46e3NldDpmdW5jdGlvbigpe3RoaXMuJHVwZGF0ZVByaW50TWFyZ2luKCl9LGluaXRpYWxWYWx1ZTo4MH0scHJpbnRNYXJnaW46e3NldDpmdW5jdGlvbihlKXt0eXBlb2YgZT09Im51bWJlciImJih0aGlzLiRwcmludE1hcmdpbkNvbHVtbj1lKSx0aGlzLiRzaG93UHJpbnRNYXJnaW49ISFlLHRoaXMuJHVwZGF0ZVByaW50TWFyZ2luKCl9LGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRzaG93UHJpbnRNYXJnaW4mJnRoaXMuJHByaW50TWFyZ2luQ29sdW1ufX0sc2hvd0d1dHRlcjp7c2V0OmZ1bmN0aW9uKGUpe3RoaXMuJGd1dHRlci5zdHlsZS5kaXNwbGF5PWU/ImJsb2NrIjoibm9uZSIsdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9GVUxMKSx0aGlzLm9uR3V0dGVyUmVzaXplKCl9LGluaXRpYWxWYWx1ZTohMH0sZmFkZUZvbGRXaWRnZXRzOntzZXQ6ZnVuY3Rpb24oZSl7aS5zZXRDc3NDbGFzcyh0aGlzLiRndXR0ZXIsImFjZV9mYWRlLWZvbGQtd2lkZ2V0cyIsZSl9LGluaXRpYWxWYWx1ZTohMX0sc2hvd0ZvbGRXaWRnZXRzOntzZXQ6ZnVuY3Rpb24oZSl7dGhpcy4kZ3V0dGVyTGF5ZXIuc2V0U2hvd0ZvbGRXaWRnZXRzKGUpLHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfR1VUVEVSKX0saW5pdGlhbFZhbHVlOiEwfSxkaXNwbGF5SW5kZW50R3VpZGVzOntzZXQ6ZnVuY3Rpb24oZSl7dGhpcy4kdGV4dExheWVyLnNldERpc3BsYXlJbmRlbnRHdWlkZXMoZSkmJnRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfVEVYVCl9LGluaXRpYWxWYWx1ZTohMH0saGlnaGxpZ2h0R3V0dGVyTGluZTp7c2V0OmZ1bmN0aW9uKGUpe3RoaXMuJGd1dHRlckxheWVyLnNldEhpZ2hsaWdodEd1dHRlckxpbmUoZSksdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9HVVRURVIpfSxpbml0aWFsVmFsdWU6ITB9LGhTY3JvbGxCYXJBbHdheXNWaXNpYmxlOntzZXQ6ZnVuY3Rpb24oZSl7KCF0aGlzLiRoU2Nyb2xsQmFyQWx3YXlzVmlzaWJsZXx8IXRoaXMuJGhvcml6U2Nyb2xsKSYmdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9TQ1JPTEwpfSxpbml0aWFsVmFsdWU6ITF9LHZTY3JvbGxCYXJBbHdheXNWaXNpYmxlOntzZXQ6ZnVuY3Rpb24oZSl7KCF0aGlzLiR2U2Nyb2xsQmFyQWx3YXlzVmlzaWJsZXx8IXRoaXMuJHZTY3JvbGwpJiZ0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX1NDUk9MTCl9LGluaXRpYWxWYWx1ZTohMX0sZm9udFNpemU6e3NldDpmdW5jdGlvbihlKXt0eXBlb2YgZT09Im51bWJlciImJihlKz0icHgiKSx0aGlzLmNvbnRhaW5lci5zdHlsZS5mb250U2l6ZT1lLHRoaXMudXBkYXRlRm9udFNpemUoKX0saW5pdGlhbFZhbHVlOjEyfSxmb250RmFtaWx5OntzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5jb250YWluZXIuc3R5bGUuZm9udEZhbWlseT1lLHRoaXMudXBkYXRlRm9udFNpemUoKX19LG1heExpbmVzOntzZXQ6ZnVuY3Rpb24oZSl7dGhpcy51cGRhdGVGdWxsKCl9fSxtaW5MaW5lczp7c2V0OmZ1bmN0aW9uKGUpe3RoaXMuJG1pbkxpbmVzPDU2Mjk0OTk1MzQyMTMxMXx8KHRoaXMuJG1pbkxpbmVzPTApLHRoaXMudXBkYXRlRnVsbCgpfX0sbWF4UGl4ZWxIZWlnaHQ6e3NldDpmdW5jdGlvbihlKXt0aGlzLnVwZGF0ZUZ1bGwoKX0saW5pdGlhbFZhbHVlOjB9LHNjcm9sbFBhc3RFbmQ6e3NldDpmdW5jdGlvbihlKXtlPStlfHwwO2lmKHRoaXMuJHNjcm9sbFBhc3RFbmQ9PWUpcmV0dXJuO3RoaXMuJHNjcm9sbFBhc3RFbmQ9ZSx0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX1NDUk9MTCl9LGluaXRpYWxWYWx1ZTowLGhhbmRsZXNTZXQ6ITB9LGZpeGVkV2lkdGhHdXR0ZXI6e3NldDpmdW5jdGlvbihlKXt0aGlzLiRndXR0ZXJMYXllci4kZml4ZWRXaWR0aD0hIWUsdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9HVVRURVIpfX0sdGhlbWU6e3NldDpmdW5jdGlvbihlKXt0aGlzLnNldFRoZW1lKGUpfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kdGhlbWVJZHx8dGhpcy50aGVtZX0saW5pdGlhbFZhbHVlOiIuL3RoZW1lL3RleHRtYXRlIixoYW5kbGVzU2V0OiEwfSxoYXNDc3NUcmFuc2Zvcm1zOnt9LHVzZVRleHRhcmVhRm9ySU1FOntpbml0aWFsVmFsdWU6IW0uaXNNb2JpbGUmJiFtLmlzSUV9fSksdC5WaXJ0dWFsUmVuZGVyZXI9eX0pLGFjZS5kZWZpbmUoImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9uZXQiLCJhY2UvbGliL2V2ZW50X2VtaXR0ZXIiLCJhY2UvY29uZmlnIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB1KGUpe3ZhciB0PSJpbXBvcnRTY3JpcHRzKCciK2kucXVhbGlmeVVSTChlKSsiJyk7Ijt0cnl7cmV0dXJuIG5ldyBCbG9iKFt0XSx7dHlwZToiYXBwbGljYXRpb24vamF2YXNjcmlwdCJ9KX1jYXRjaChuKXt2YXIgcj13aW5kb3cuQmxvYkJ1aWxkZXJ8fHdpbmRvdy5XZWJLaXRCbG9iQnVpbGRlcnx8d2luZG93Lk1vekJsb2JCdWlsZGVyLHM9bmV3IHI7cmV0dXJuIHMuYXBwZW5kKHQpLHMuZ2V0QmxvYigiYXBwbGljYXRpb24vamF2YXNjcmlwdCIpfX1mdW5jdGlvbiBhKGUpe2lmKHR5cGVvZiBXb3JrZXI9PSJ1bmRlZmluZWQiKXJldHVybntwb3N0TWVzc2FnZTpmdW5jdGlvbigpe30sdGVybWluYXRlOmZ1bmN0aW9uKCl7fX07aWYoby5nZXQoImxvYWRXb3JrZXJGcm9tQmxvYiIpKXt2YXIgdD11KGUpLG49d2luZG93LlVSTHx8d2luZG93LndlYmtpdFVSTCxyPW4uY3JlYXRlT2JqZWN0VVJMKHQpO3JldHVybiBuZXcgV29ya2VyKHIpfXJldHVybiBuZXcgV29ya2VyKGUpfXZhciByPWUoIi4uL2xpYi9vb3AiKSxpPWUoIi4uL2xpYi9uZXQiKSxzPWUoIi4uL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyLG89ZSgiLi4vY29uZmlnIiksZj1mdW5jdGlvbihlKXtlLnBvc3RNZXNzYWdlfHwoZT10aGlzLiRjcmVhdGVXb3JrZXJGcm9tT2xkQ29uZmlnLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksdGhpcy4kd29ya2VyPWUsdGhpcy4kc2VuZERlbHRhUXVldWU9dGhpcy4kc2VuZERlbHRhUXVldWUuYmluZCh0aGlzKSx0aGlzLmNoYW5nZUxpc3RlbmVyPXRoaXMuY2hhbmdlTGlzdGVuZXIuYmluZCh0aGlzKSx0aGlzLm9uTWVzc2FnZT10aGlzLm9uTWVzc2FnZS5iaW5kKHRoaXMpLHRoaXMuY2FsbGJhY2tJZD0xLHRoaXMuY2FsbGJhY2tzPXt9LHRoaXMuJHdvcmtlci5vbm1lc3NhZ2U9dGhpcy5vbk1lc3NhZ2V9OyhmdW5jdGlvbigpe3IuaW1wbGVtZW50KHRoaXMscyksdGhpcy4kY3JlYXRlV29ya2VyRnJvbU9sZENvbmZpZz1mdW5jdGlvbih0LG4scixpLHMpe2UubmFtZVRvVXJsJiYhZS50b1VybCYmKGUudG9Vcmw9ZS5uYW1lVG9VcmwpO2lmKG8uZ2V0KCJwYWNrYWdlZCIpfHwhZS50b1VybClpPWl8fG8ubW9kdWxlVXJsKG4sIndvcmtlciIpO2Vsc2V7dmFyIHU9dGhpcy4kbm9ybWFsaXplUGF0aDtpPWl8fHUoZS50b1VybCgiYWNlL3dvcmtlci93b3JrZXIuanMiLG51bGwsIl8iKSk7dmFyIGY9e307dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2ZbdF09dShlLnRvVXJsKHQsbnVsbCwiXyIpLnJlcGxhY2UoLyhcLmpzKT8oXD8uKik/JC8sIiIpKX0pfXJldHVybiB0aGlzLiR3b3JrZXI9YShpKSxzJiZ0aGlzLnNlbmQoImltcG9ydFNjcmlwdHMiLHMpLHRoaXMuJHdvcmtlci5wb3N0TWVzc2FnZSh7aW5pdDohMCx0bG5zOmYsbW9kdWxlOm4sY2xhc3NuYW1lOnJ9KSx0aGlzLiR3b3JrZXJ9LHRoaXMub25NZXNzYWdlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZGF0YTtzd2l0Y2godC50eXBlKXtjYXNlImV2ZW50Ijp0aGlzLl9zaWduYWwodC5uYW1lLHtkYXRhOnQuZGF0YX0pO2JyZWFrO2Nhc2UiY2FsbCI6dmFyIG49dGhpcy5jYWxsYmFja3NbdC5pZF07biYmKG4odC5kYXRhKSxkZWxldGUgdGhpcy5jYWxsYmFja3NbdC5pZF0pO2JyZWFrO2Nhc2UiZXJyb3IiOnRoaXMucmVwb3J0RXJyb3IodC5kYXRhKTticmVhaztjYXNlImxvZyI6d2luZG93LmNvbnNvbGUmJmNvbnNvbGUubG9nJiZjb25zb2xlLmxvZy5hcHBseShjb25zb2xlLHQuZGF0YSl9fSx0aGlzLnJlcG9ydEVycm9yPWZ1bmN0aW9uKGUpe3dpbmRvdy5jb25zb2xlJiZjb25zb2xlLmVycm9yJiZjb25zb2xlLmVycm9yKGUpfSx0aGlzLiRub3JtYWxpemVQYXRoPWZ1bmN0aW9uKGUpe3JldHVybiBpLnF1YWxpZnlVUkwoZSl9LHRoaXMudGVybWluYXRlPWZ1bmN0aW9uKCl7dGhpcy5fc2lnbmFsKCJ0ZXJtaW5hdGUiLHt9KSx0aGlzLmRlbHRhUXVldWU9bnVsbCx0aGlzLiR3b3JrZXIudGVybWluYXRlKCksdGhpcy4kd29ya2VyPW51bGwsdGhpcy4kZG9jJiZ0aGlzLiRkb2Mub2ZmKCJjaGFuZ2UiLHRoaXMuY2hhbmdlTGlzdGVuZXIpLHRoaXMuJGRvYz1udWxsfSx0aGlzLnNlbmQ9ZnVuY3Rpb24oZSx0KXt0aGlzLiR3b3JrZXIucG9zdE1lc3NhZ2Uoe2NvbW1hbmQ6ZSxhcmdzOnR9KX0sdGhpcy5jYWxsPWZ1bmN0aW9uKGUsdCxuKXtpZihuKXt2YXIgcj10aGlzLmNhbGxiYWNrSWQrKzt0aGlzLmNhbGxiYWNrc1tyXT1uLHQucHVzaChyKX10aGlzLnNlbmQoZSx0KX0sdGhpcy5lbWl0PWZ1bmN0aW9uKGUsdCl7dHJ5e3QuZGF0YSYmdC5kYXRhLmVyciYmKHQuZGF0YS5lcnI9e21lc3NhZ2U6dC5kYXRhLmVyci5tZXNzYWdlLHN0YWNrOnQuZGF0YS5lcnIuc3RhY2ssY29kZTp0LmRhdGEuZXJyLmNvZGV9KSx0aGlzLiR3b3JrZXIucG9zdE1lc3NhZ2Uoe2V2ZW50OmUsZGF0YTp7ZGF0YTp0LmRhdGF9fSl9Y2F0Y2gobil7Y29uc29sZS5lcnJvcihuLnN0YWNrKX19LHRoaXMuYXR0YWNoVG9Eb2N1bWVudD1mdW5jdGlvbihlKXt0aGlzLiRkb2MmJnRoaXMudGVybWluYXRlKCksdGhpcy4kZG9jPWUsdGhpcy5jYWxsKCJzZXRWYWx1ZSIsW2UuZ2V0VmFsdWUoKV0pLGUub24oImNoYW5nZSIsdGhpcy5jaGFuZ2VMaXN0ZW5lcil9LHRoaXMuY2hhbmdlTGlzdGVuZXI9ZnVuY3Rpb24oZSl7dGhpcy5kZWx0YVF1ZXVlfHwodGhpcy5kZWx0YVF1ZXVlPVtdLHNldFRpbWVvdXQodGhpcy4kc2VuZERlbHRhUXVldWUsMCkpLGUuYWN0aW9uPT0iaW5zZXJ0Ij90aGlzLmRlbHRhUXVldWUucHVzaChlLnN0YXJ0LGUubGluZXMpOnRoaXMuZGVsdGFRdWV1ZS5wdXNoKGUuc3RhcnQsZS5lbmQpfSx0aGlzLiRzZW5kRGVsdGFRdWV1ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZGVsdGFRdWV1ZTtpZighZSlyZXR1cm47dGhpcy5kZWx0YVF1ZXVlPW51bGwsZS5sZW5ndGg+NTAmJmUubGVuZ3RoPnRoaXMuJGRvYy5nZXRMZW5ndGgoKT4+MT90aGlzLmNhbGwoInNldFZhbHVlIixbdGhpcy4kZG9jLmdldFZhbHVlKCldKTp0aGlzLmVtaXQoImNoYW5nZSIse2RhdGE6ZX0pfX0pLmNhbGwoZi5wcm90b3R5cGUpO3ZhciBsPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1udWxsLGk9ITEsdT1PYmplY3QuY3JlYXRlKHMpLGE9W10sbD1uZXcgZih7bWVzc2FnZUJ1ZmZlcjphLHRlcm1pbmF0ZTpmdW5jdGlvbigpe30scG9zdE1lc3NhZ2U6ZnVuY3Rpb24oZSl7YS5wdXNoKGUpO2lmKCFyKXJldHVybjtpP3NldFRpbWVvdXQoYyk6YygpfX0pO2wuc2V0RW1pdFN5bmM9ZnVuY3Rpb24oZSl7aT1lfTt2YXIgYz1mdW5jdGlvbigpe3ZhciBlPWEuc2hpZnQoKTtlLmNvbW1hbmQ/cltlLmNvbW1hbmRdLmFwcGx5KHIsZS5hcmdzKTplLmV2ZW50JiZ1Ll9zaWduYWwoZS5ldmVudCxlLmRhdGEpfTtyZXR1cm4gdS5wb3N0TWVzc2FnZT1mdW5jdGlvbihlKXtsLm9uTWVzc2FnZSh7ZGF0YTplfSl9LHUuY2FsbGJhY2s9ZnVuY3Rpb24oZSx0KXt0aGlzLnBvc3RNZXNzYWdlKHt0eXBlOiJjYWxsIixpZDp0LGRhdGE6ZX0pfSx1LmVtaXQ9ZnVuY3Rpb24oZSx0KXt0aGlzLnBvc3RNZXNzYWdlKHt0eXBlOiJldmVudCIsbmFtZTplLGRhdGE6dH0pfSxvLmxvYWRNb2R1bGUoWyJ3b3JrZXIiLHRdLGZ1bmN0aW9uKGUpe3I9bmV3IGVbbl0odSk7d2hpbGUoYS5sZW5ndGgpYygpfSksbH07dC5VSVdvcmtlckNsaWVudD1sLHQuV29ya2VyQ2xpZW50PWYsdC5jcmVhdGVXb3JrZXI9YX0pLGFjZS5kZWZpbmUoImFjZS9wbGFjZWhvbGRlciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSIsImFjZS9saWIvZXZlbnRfZW1pdHRlciIsImFjZS9saWIvb29wIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuL3JhbmdlIikuUmFuZ2UsaT1lKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyLHM9ZSgiLi9saWIvb29wIiksbz1mdW5jdGlvbihlLHQsbixyLGkscyl7dmFyIG89dGhpczt0aGlzLmxlbmd0aD10LHRoaXMuc2Vzc2lvbj1lLHRoaXMuZG9jPWUuZ2V0RG9jdW1lbnQoKSx0aGlzLm1haW5DbGFzcz1pLHRoaXMub3RoZXJzQ2xhc3M9cyx0aGlzLiRvblVwZGF0ZT10aGlzLm9uVXBkYXRlLmJpbmQodGhpcyksdGhpcy5kb2Mub24oImNoYW5nZSIsdGhpcy4kb25VcGRhdGUpLHRoaXMuJG90aGVycz1yLHRoaXMuJG9uQ3Vyc29yQ2hhbmdlPWZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe28ub25DdXJzb3JDaGFuZ2UoKX0pfSx0aGlzLiRwb3M9bjt2YXIgdT1lLmdldFVuZG9NYW5hZ2VyKCkuJHVuZG9TdGFja3x8ZS5nZXRVbmRvTWFuYWdlcigpLiR1bmRvc3RhY2t8fHtsZW5ndGg6LTF9O3RoaXMuJHVuZG9TdGFja0RlcHRoPXUubGVuZ3RoLHRoaXMuc2V0dXAoKSxlLnNlbGVjdGlvbi5vbigiY2hhbmdlQ3Vyc29yIix0aGlzLiRvbkN1cnNvckNoYW5nZSl9OyhmdW5jdGlvbigpe3MuaW1wbGVtZW50KHRoaXMsaSksdGhpcy5zZXR1cD1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLmRvYyxuPXRoaXMuc2Vzc2lvbjt0aGlzLnNlbGVjdGlvbkJlZm9yZT1uLnNlbGVjdGlvbi50b0pTT04oKSxuLnNlbGVjdGlvbi5pbk11bHRpU2VsZWN0TW9kZSYmbi5zZWxlY3Rpb24udG9TaW5nbGVSYW5nZSgpLHRoaXMucG9zPXQuY3JlYXRlQW5jaG9yKHRoaXMuJHBvcy5yb3csdGhpcy4kcG9zLmNvbHVtbik7dmFyIGk9dGhpcy5wb3M7aS4kaW5zZXJ0UmlnaHQ9ITAsaS5kZXRhY2goKSxpLm1hcmtlcklkPW4uYWRkTWFya2VyKG5ldyByKGkucm93LGkuY29sdW1uLGkucm93LGkuY29sdW1uK3RoaXMubGVuZ3RoKSx0aGlzLm1haW5DbGFzcyxudWxsLCExKSx0aGlzLm90aGVycz1bXSx0aGlzLiRvdGhlcnMuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcj10LmNyZWF0ZUFuY2hvcihuLnJvdyxuLmNvbHVtbik7ci4kaW5zZXJ0UmlnaHQ9ITAsci5kZXRhY2goKSxlLm90aGVycy5wdXNoKHIpfSksbi5zZXRVbmRvU2VsZWN0KCExKX0sdGhpcy5zaG93T3RoZXJNYXJrZXJzPWZ1bmN0aW9uKCl7aWYodGhpcy5vdGhlcnNBY3RpdmUpcmV0dXJuO3ZhciBlPXRoaXMuc2Vzc2lvbix0PXRoaXM7dGhpcy5vdGhlcnNBY3RpdmU9ITAsdGhpcy5vdGhlcnMuZm9yRWFjaChmdW5jdGlvbihuKXtuLm1hcmtlcklkPWUuYWRkTWFya2VyKG5ldyByKG4ucm93LG4uY29sdW1uLG4ucm93LG4uY29sdW1uK3QubGVuZ3RoKSx0Lm90aGVyc0NsYXNzLG51bGwsITEpfSl9LHRoaXMuaGlkZU90aGVyTWFya2Vycz1mdW5jdGlvbigpe2lmKCF0aGlzLm90aGVyc0FjdGl2ZSlyZXR1cm47dGhpcy5vdGhlcnNBY3RpdmU9ITE7Zm9yKHZhciBlPTA7ZTx0aGlzLm90aGVycy5sZW5ndGg7ZSsrKXRoaXMuc2Vzc2lvbi5yZW1vdmVNYXJrZXIodGhpcy5vdGhlcnNbZV0ubWFya2VySWQpfSx0aGlzLm9uVXBkYXRlPWZ1bmN0aW9uKGUpe2lmKHRoaXMuJHVwZGF0aW5nKXJldHVybiB0aGlzLnVwZGF0ZUFuY2hvcnMoZSk7dmFyIHQ9ZTtpZih0LnN0YXJ0LnJvdyE9PXQuZW5kLnJvdylyZXR1cm47aWYodC5zdGFydC5yb3chPT10aGlzLnBvcy5yb3cpcmV0dXJuO3RoaXMuJHVwZGF0aW5nPSEwO3ZhciBuPWUuYWN0aW9uPT09Imluc2VydCI/dC5lbmQuY29sdW1uLXQuc3RhcnQuY29sdW1uOnQuc3RhcnQuY29sdW1uLXQuZW5kLmNvbHVtbixpPXQuc3RhcnQuY29sdW1uPj10aGlzLnBvcy5jb2x1bW4mJnQuc3RhcnQuY29sdW1uPD10aGlzLnBvcy5jb2x1bW4rdGhpcy5sZW5ndGgrMSxzPXQuc3RhcnQuY29sdW1uLXRoaXMucG9zLmNvbHVtbjt0aGlzLnVwZGF0ZUFuY2hvcnMoZSksaSYmKHRoaXMubGVuZ3RoKz1uKTtpZihpJiYhdGhpcy5zZXNzaW9uLiRmcm9tVW5kbylpZihlLmFjdGlvbj09PSJpbnNlcnQiKWZvcih2YXIgbz10aGlzLm90aGVycy5sZW5ndGgtMTtvPj0wO28tLSl7dmFyIHU9dGhpcy5vdGhlcnNbb10sYT17cm93OnUucm93LGNvbHVtbjp1LmNvbHVtbitzfTt0aGlzLmRvYy5pbnNlcnRNZXJnZWRMaW5lcyhhLGUubGluZXMpfWVsc2UgaWYoZS5hY3Rpb249PT0icmVtb3ZlIilmb3IodmFyIG89dGhpcy5vdGhlcnMubGVuZ3RoLTE7bz49MDtvLS0pe3ZhciB1PXRoaXMub3RoZXJzW29dLGE9e3Jvdzp1LnJvdyxjb2x1bW46dS5jb2x1bW4rc307dGhpcy5kb2MucmVtb3ZlKG5ldyByKGEucm93LGEuY29sdW1uLGEucm93LGEuY29sdW1uLW4pKX10aGlzLiR1cGRhdGluZz0hMSx0aGlzLnVwZGF0ZU1hcmtlcnMoKX0sdGhpcy51cGRhdGVBbmNob3JzPWZ1bmN0aW9uKGUpe3RoaXMucG9zLm9uQ2hhbmdlKGUpO2Zvcih2YXIgdD10aGlzLm90aGVycy5sZW5ndGg7dC0tOyl0aGlzLm90aGVyc1t0XS5vbkNoYW5nZShlKTt0aGlzLnVwZGF0ZU1hcmtlcnMoKX0sdGhpcy51cGRhdGVNYXJrZXJzPWZ1bmN0aW9uKCl7aWYodGhpcy4kdXBkYXRpbmcpcmV0dXJuO3ZhciBlPXRoaXMsdD10aGlzLnNlc3Npb24sbj1mdW5jdGlvbihuLGkpe3QucmVtb3ZlTWFya2VyKG4ubWFya2VySWQpLG4ubWFya2VySWQ9dC5hZGRNYXJrZXIobmV3IHIobi5yb3csbi5jb2x1bW4sbi5yb3csbi5jb2x1bW4rZS5sZW5ndGgpLGksbnVsbCwhMSl9O24odGhpcy5wb3MsdGhpcy5tYWluQ2xhc3MpO2Zvcih2YXIgaT10aGlzLm90aGVycy5sZW5ndGg7aS0tOyluKHRoaXMub3RoZXJzW2ldLHRoaXMub3RoZXJzQ2xhc3MpfSx0aGlzLm9uQ3Vyc29yQ2hhbmdlPWZ1bmN0aW9uKGUpe2lmKHRoaXMuJHVwZGF0aW5nfHwhdGhpcy5zZXNzaW9uKXJldHVybjt2YXIgdD10aGlzLnNlc3Npb24uc2VsZWN0aW9uLmdldEN1cnNvcigpO3Qucm93PT09dGhpcy5wb3Mucm93JiZ0LmNvbHVtbj49dGhpcy5wb3MuY29sdW1uJiZ0LmNvbHVtbjw9dGhpcy5wb3MuY29sdW1uK3RoaXMubGVuZ3RoPyh0aGlzLnNob3dPdGhlck1hcmtlcnMoKSx0aGlzLl9lbWl0KCJjdXJzb3JFbnRlciIsZSkpOih0aGlzLmhpZGVPdGhlck1hcmtlcnMoKSx0aGlzLl9lbWl0KCJjdXJzb3JMZWF2ZSIsZSkpfSx0aGlzLmRldGFjaD1mdW5jdGlvbigpe3RoaXMuc2Vzc2lvbi5yZW1vdmVNYXJrZXIodGhpcy5wb3MmJnRoaXMucG9zLm1hcmtlcklkKSx0aGlzLmhpZGVPdGhlck1hcmtlcnMoKSx0aGlzLmRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLHRoaXMuJG9uVXBkYXRlKSx0aGlzLnNlc3Npb24uc2VsZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZUN1cnNvciIsdGhpcy4kb25DdXJzb3JDaGFuZ2UpLHRoaXMuc2Vzc2lvbi5zZXRVbmRvU2VsZWN0KCEwKSx0aGlzLnNlc3Npb249bnVsbH0sdGhpcy5jYW5jZWw9ZnVuY3Rpb24oKXtpZih0aGlzLiR1bmRvU3RhY2tEZXB0aD09PS0xKXJldHVybjt2YXIgZT10aGlzLnNlc3Npb24uZ2V0VW5kb01hbmFnZXIoKSx0PShlLiR1bmRvU3RhY2t8fGUuJHVuZG9zdGFjaykubGVuZ3RoLXRoaXMuJHVuZG9TdGFja0RlcHRoO2Zvcih2YXIgbj0wO248dDtuKyspZS51bmRvKHRoaXMuc2Vzc2lvbiwhMCk7dGhpcy5zZWxlY3Rpb25CZWZvcmUmJnRoaXMuc2Vzc2lvbi5zZWxlY3Rpb24uZnJvbUpTT04odGhpcy5zZWxlY3Rpb25CZWZvcmUpfX0pLmNhbGwoby5wcm90b3R5cGUpLHQuUGxhY2VIb2xkZXI9b30pLGFjZS5kZWZpbmUoImFjZS9tb3VzZS9tdWx0aV9zZWxlY3RfaGFuZGxlciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvZXZlbnQiLCJhY2UvbGliL3VzZXJhZ2VudCJdLGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiBzKGUsdCl7cmV0dXJuIGUucm93PT10LnJvdyYmZS5jb2x1bW49PXQuY29sdW1ufWZ1bmN0aW9uIG8oZSl7dmFyIHQ9ZS5kb21FdmVudCxuPXQuYWx0S2V5LG89dC5zaGlmdEtleSx1PXQuY3RybEtleSxhPWUuZ2V0QWNjZWxLZXkoKSxmPWUuZ2V0QnV0dG9uKCk7dSYmaS5pc01hYyYmKGY9dC5idXR0b24pO2lmKGUuZWRpdG9yLmluTXVsdGlTZWxlY3RNb2RlJiZmPT0yKXtlLmVkaXRvci50ZXh0SW5wdXQub25Db250ZXh0TWVudShlLmRvbUV2ZW50KTtyZXR1cm59aWYoIXUmJiFuJiYhYSl7Zj09PTAmJmUuZWRpdG9yLmluTXVsdGlTZWxlY3RNb2RlJiZlLmVkaXRvci5leGl0TXVsdGlTZWxlY3RNb2RlKCk7cmV0dXJufWlmKGYhPT0wKXJldHVybjt2YXIgbD1lLmVkaXRvcixjPWwuc2VsZWN0aW9uLGg9bC5pbk11bHRpU2VsZWN0TW9kZSxwPWUuZ2V0RG9jdW1lbnRQb3NpdGlvbigpLGQ9Yy5nZXRDdXJzb3IoKSx2PWUuaW5TZWxlY3Rpb24oKXx8Yy5pc0VtcHR5KCkmJnMocCxkKSxtPWUueCxnPWUueSx5PWZ1bmN0aW9uKGUpe209ZS5jbGllbnRYLGc9ZS5jbGllbnRZfSxiPWwuc2Vzc2lvbix3PWwucmVuZGVyZXIucGl4ZWxUb1NjcmVlbkNvb3JkaW5hdGVzKG0sZyksRT13LFM7aWYobC4kbW91c2VIYW5kbGVyLiRlbmFibGVKdW1wVG9EZWYpdSYmbnx8YSYmbj9TPW8/ImJsb2NrIjoiYWRkIjpuJiZsLiRibG9ja1NlbGVjdEVuYWJsZWQmJihTPSJibG9jayIpO2Vsc2UgaWYoYSYmIW4pe1M9ImFkZCI7aWYoIWgmJm8pcmV0dXJufWVsc2UgbiYmbC4kYmxvY2tTZWxlY3RFbmFibGVkJiYoUz0iYmxvY2siKTtTJiZpLmlzTWFjJiZ0LmN0cmxLZXkmJmwuJG1vdXNlSGFuZGxlci5jYW5jZWxDb250ZXh0TWVudSgpO2lmKFM9PSJhZGQiKXtpZighaCYmdilyZXR1cm47aWYoIWgpe3ZhciB4PWMudG9PcmllbnRlZFJhbmdlKCk7bC5hZGRTZWxlY3Rpb25NYXJrZXIoeCl9dmFyIFQ9Yy5yYW5nZUxpc3QucmFuZ2VBdFBvaW50KHApO2wuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZT0hMCxvJiYoVD1udWxsLHg9Yy5yYW5nZXNbMF18fHgsbC5yZW1vdmVTZWxlY3Rpb25NYXJrZXIoeCkpLGwub25jZSgibW91c2V1cCIsZnVuY3Rpb24oKXt2YXIgZT1jLnRvT3JpZW50ZWRSYW5nZSgpO1QmJmUuaXNFbXB0eSgpJiZzKFQuY3Vyc29yLGUuY3Vyc29yKT9jLnN1YnN0cmFjdFBvaW50KGUuY3Vyc29yKToobz9jLnN1YnN0cmFjdFBvaW50KHguY3Vyc29yKTp4JiYobC5yZW1vdmVTZWxlY3Rpb25NYXJrZXIoeCksYy5hZGRSYW5nZSh4KSksYy5hZGRSYW5nZShlKSksbC5pblZpcnR1YWxTZWxlY3Rpb25Nb2RlPSExfSl9ZWxzZSBpZihTPT0iYmxvY2siKXtlLnN0b3AoKSxsLmluVmlydHVhbFNlbGVjdGlvbk1vZGU9ITA7dmFyIE4sQz1bXSxrPWZ1bmN0aW9uKCl7dmFyIGU9bC5yZW5kZXJlci5waXhlbFRvU2NyZWVuQ29vcmRpbmF0ZXMobSxnKSx0PWIuc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKGUucm93LGUuY29sdW1uLGUub2Zmc2V0WCk7aWYocyhFLGUpJiZzKHQsYy5sZWFkKSlyZXR1cm47RT1lLGwuc2VsZWN0aW9uLm1vdmVUb1Bvc2l0aW9uKHQpLGwucmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoKSxsLnJlbW92ZVNlbGVjdGlvbk1hcmtlcnMoQyksQz1jLnJlY3Rhbmd1bGFyUmFuZ2VCbG9jayhFLHcpLGwuJG1vdXNlSGFuZGxlci4kY2xpY2tTZWxlY3Rpb24mJkMubGVuZ3RoPT0xJiZDWzBdLmlzRW1wdHkoKSYmKENbMF09bC4kbW91c2VIYW5kbGVyLiRjbGlja1NlbGVjdGlvbi5jbG9uZSgpKSxDLmZvckVhY2gobC5hZGRTZWxlY3Rpb25NYXJrZXIsbCksbC51cGRhdGVTZWxlY3Rpb25NYXJrZXJzKCl9O2gmJiFhP2MudG9TaW5nbGVSYW5nZSgpOiFoJiZhJiYoTj1jLnRvT3JpZW50ZWRSYW5nZSgpLGwuYWRkU2VsZWN0aW9uTWFya2VyKE4pKSxvP3c9Yi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24oYy5sZWFkKTpjLm1vdmVUb1Bvc2l0aW9uKHApLEU9e3JvdzotMSxjb2x1bW46LTF9O3ZhciBMPWZ1bmN0aW9uKGUpe2soKSxjbGVhckludGVydmFsKE8pLGwucmVtb3ZlU2VsZWN0aW9uTWFya2VycyhDKSxDLmxlbmd0aHx8KEM9W2MudG9PcmllbnRlZFJhbmdlKCldKSxOJiYobC5yZW1vdmVTZWxlY3Rpb25NYXJrZXIoTiksYy50b1NpbmdsZVJhbmdlKE4pKTtmb3IodmFyIHQ9MDt0PEMubGVuZ3RoO3QrKyljLmFkZFJhbmdlKENbdF0pO2wuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZT0hMSxsLiRtb3VzZUhhbmRsZXIuJGNsaWNrU2VsZWN0aW9uPW51bGx9LEE9aztyLmNhcHR1cmUobC5jb250YWluZXIseSxMKTt2YXIgTz1zZXRJbnRlcnZhbChmdW5jdGlvbigpe0EoKX0sMjApO3JldHVybiBlLnByZXZlbnREZWZhdWx0KCl9fXZhciByPWUoIi4uL2xpYi9ldmVudCIpLGk9ZSgiLi4vbGliL3VzZXJhZ2VudCIpO3Qub25Nb3VzZURvd249b30pLGFjZS5kZWZpbmUoImFjZS9jb21tYW5kcy9tdWx0aV9zZWxlY3RfY29tbWFuZHMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2Uva2V5Ym9hcmQvaGFzaF9oYW5kbGVyIl0sZnVuY3Rpb24oZSx0LG4pe3QuZGVmYXVsdENvbW1hbmRzPVt7bmFtZToiYWRkQ3Vyc29yQWJvdmUiLGRlc2NyaXB0aW9uOiJBZGQgY3Vyc29yIGFib3ZlIixleGVjOmZ1bmN0aW9uKGUpe2Uuc2VsZWN0TW9yZUxpbmVzKC0xKX0sYmluZEtleTp7d2luOiJDdHJsLUFsdC1VcCIsbWFjOiJDdHJsLUFsdC1VcCJ9LHNjcm9sbEludG9WaWV3OiJjdXJzb3IiLHJlYWRPbmx5OiEwfSx7bmFtZToiYWRkQ3Vyc29yQmVsb3ciLGRlc2NyaXB0aW9uOiJBZGQgY3Vyc29yIGJlbG93IixleGVjOmZ1bmN0aW9uKGUpe2Uuc2VsZWN0TW9yZUxpbmVzKDEpfSxiaW5kS2V5Ont3aW46IkN0cmwtQWx0LURvd24iLG1hYzoiQ3RybC1BbHQtRG93biJ9LHNjcm9sbEludG9WaWV3OiJjdXJzb3IiLHJlYWRPbmx5OiEwfSx7bmFtZToiYWRkQ3Vyc29yQWJvdmVTa2lwQ3VycmVudCIsZGVzY3JpcHRpb246IkFkZCBjdXJzb3IgYWJvdmUgKHNraXAgY3VycmVudCkiLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5zZWxlY3RNb3JlTGluZXMoLTEsITApfSxiaW5kS2V5Ont3aW46IkN0cmwtQWx0LVNoaWZ0LVVwIixtYWM6IkN0cmwtQWx0LVNoaWZ0LVVwIn0sc2Nyb2xsSW50b1ZpZXc6ImN1cnNvciIscmVhZE9ubHk6ITB9LHtuYW1lOiJhZGRDdXJzb3JCZWxvd1NraXBDdXJyZW50IixkZXNjcmlwdGlvbjoiQWRkIGN1cnNvciBiZWxvdyAoc2tpcCBjdXJyZW50KSIsZXhlYzpmdW5jdGlvbihlKXtlLnNlbGVjdE1vcmVMaW5lcygxLCEwKX0sYmluZEtleTp7d2luOiJDdHJsLUFsdC1TaGlmdC1Eb3duIixtYWM6IkN0cmwtQWx0LVNoaWZ0LURvd24ifSxzY3JvbGxJbnRvVmlldzoiY3Vyc29yIixyZWFkT25seTohMH0se25hbWU6InNlbGVjdE1vcmVCZWZvcmUiLGRlc2NyaXB0aW9uOiJTZWxlY3QgbW9yZSBiZWZvcmUiLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5zZWxlY3RNb3JlKC0xKX0sYmluZEtleTp7d2luOiJDdHJsLUFsdC1MZWZ0IixtYWM6IkN0cmwtQWx0LUxlZnQifSxzY3JvbGxJbnRvVmlldzoiY3Vyc29yIixyZWFkT25seTohMH0se25hbWU6InNlbGVjdE1vcmVBZnRlciIsZGVzY3JpcHRpb246IlNlbGVjdCBtb3JlIGFmdGVyIixleGVjOmZ1bmN0aW9uKGUpe2Uuc2VsZWN0TW9yZSgxKX0sYmluZEtleTp7d2luOiJDdHJsLUFsdC1SaWdodCIsbWFjOiJDdHJsLUFsdC1SaWdodCJ9LHNjcm9sbEludG9WaWV3OiJjdXJzb3IiLHJlYWRPbmx5OiEwfSx7bmFtZToic2VsZWN0TmV4dEJlZm9yZSIsZGVzY3JpcHRpb246IlNlbGVjdCBuZXh0IGJlZm9yZSIsZXhlYzpmdW5jdGlvbihlKXtlLnNlbGVjdE1vcmUoLTEsITApfSxiaW5kS2V5Ont3aW46IkN0cmwtQWx0LVNoaWZ0LUxlZnQiLG1hYzoiQ3RybC1BbHQtU2hpZnQtTGVmdCJ9LHNjcm9sbEludG9WaWV3OiJjdXJzb3IiLHJlYWRPbmx5OiEwfSx7bmFtZToic2VsZWN0TmV4dEFmdGVyIixkZXNjcmlwdGlvbjoiU2VsZWN0IG5leHQgYWZ0ZXIiLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5zZWxlY3RNb3JlKDEsITApfSxiaW5kS2V5Ont3aW46IkN0cmwtQWx0LVNoaWZ0LVJpZ2h0IixtYWM6IkN0cmwtQWx0LVNoaWZ0LVJpZ2h0In0sc2Nyb2xsSW50b1ZpZXc6ImN1cnNvciIscmVhZE9ubHk6ITB9LHtuYW1lOiJzcGxpdEludG9MaW5lcyIsZGVzY3JpcHRpb246IlNwbGl0IGludG8gbGluZXMiLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5tdWx0aVNlbGVjdC5zcGxpdEludG9MaW5lcygpfSxiaW5kS2V5Ont3aW46IkN0cmwtQWx0LUwiLG1hYzoiQ3RybC1BbHQtTCJ9LHJlYWRPbmx5OiEwfSx7bmFtZToiYWxpZ25DdXJzb3JzIixkZXNjcmlwdGlvbjoiQWxpZ24gY3Vyc29ycyIsZXhlYzpmdW5jdGlvbihlKXtlLmFsaWduQ3Vyc29ycygpfSxiaW5kS2V5Ont3aW46IkN0cmwtQWx0LUEiLG1hYzoiQ3RybC1BbHQtQSJ9LHNjcm9sbEludG9WaWV3OiJjdXJzb3IifSx7bmFtZToiZmluZEFsbCIsZGVzY3JpcHRpb246IkZpbmQgYWxsIixleGVjOmZ1bmN0aW9uKGUpe2UuZmluZEFsbCgpfSxiaW5kS2V5Ont3aW46IkN0cmwtQWx0LUsiLG1hYzoiQ3RybC1BbHQtRyJ9LHNjcm9sbEludG9WaWV3OiJjdXJzb3IiLHJlYWRPbmx5OiEwfV0sdC5tdWx0aVNlbGVjdENvbW1hbmRzPVt7bmFtZToic2luZ2xlU2VsZWN0aW9uIixkZXNjcmlwdGlvbjoiU2luZ2xlIHNlbGVjdGlvbiIsYmluZEtleToiZXNjIixleGVjOmZ1bmN0aW9uKGUpe2UuZXhpdE11bHRpU2VsZWN0TW9kZSgpfSxzY3JvbGxJbnRvVmlldzoiY3Vyc29yIixyZWFkT25seTohMCxpc0F2YWlsYWJsZTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5pbk11bHRpU2VsZWN0TW9kZX19XTt2YXIgcj1lKCIuLi9rZXlib2FyZC9oYXNoX2hhbmRsZXIiKS5IYXNoSGFuZGxlcjt0LmtleWJvYXJkSGFuZGxlcj1uZXcgcih0Lm11bHRpU2VsZWN0Q29tbWFuZHMpfSksYWNlLmRlZmluZSgiYWNlL211bHRpX3NlbGVjdCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZV9saXN0IiwiYWNlL3JhbmdlIiwiYWNlL3NlbGVjdGlvbiIsImFjZS9tb3VzZS9tdWx0aV9zZWxlY3RfaGFuZGxlciIsImFjZS9saWIvZXZlbnQiLCJhY2UvbGliL2xhbmciLCJhY2UvY29tbWFuZHMvbXVsdGlfc2VsZWN0X2NvbW1hbmRzIiwiYWNlL3NlYXJjaCIsImFjZS9lZGl0X3Nlc3Npb24iLCJhY2UvZWRpdG9yIiwiYWNlL2NvbmZpZyJdLGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiBoKGUsdCxuKXtyZXR1cm4gYy4kb3B0aW9ucy53cmFwPSEwLGMuJG9wdGlvbnMubmVlZGxlPXQsYy4kb3B0aW9ucy5iYWNrd2FyZHM9bj09LTEsYy5maW5kKGUpfWZ1bmN0aW9uIHYoZSx0KXtyZXR1cm4gZS5yb3c9PXQucm93JiZlLmNvbHVtbj09dC5jb2x1bW59ZnVuY3Rpb24gbShlKXtpZihlLiRtdWx0aXNlbGVjdE9uU2Vzc2lvbkNoYW5nZSlyZXR1cm47ZS4kb25BZGRSYW5nZT1lLiRvbkFkZFJhbmdlLmJpbmQoZSksZS4kb25SZW1vdmVSYW5nZT1lLiRvblJlbW92ZVJhbmdlLmJpbmQoZSksZS4kb25NdWx0aVNlbGVjdD1lLiRvbk11bHRpU2VsZWN0LmJpbmQoZSksZS4kb25TaW5nbGVTZWxlY3Q9ZS4kb25TaW5nbGVTZWxlY3QuYmluZChlKSxlLiRtdWx0aXNlbGVjdE9uU2Vzc2lvbkNoYW5nZT10Lm9uU2Vzc2lvbkNoYW5nZS5iaW5kKGUpLGUuJGNoZWNrTXVsdGlzZWxlY3RDaGFuZ2U9ZS4kY2hlY2tNdWx0aXNlbGVjdENoYW5nZS5iaW5kKGUpLGUuJG11bHRpc2VsZWN0T25TZXNzaW9uQ2hhbmdlKGUpLGUub24oImNoYW5nZVNlc3Npb24iLGUuJG11bHRpc2VsZWN0T25TZXNzaW9uQ2hhbmdlKSxlLm9uKCJtb3VzZWRvd24iLG8pLGUuY29tbWFuZHMuYWRkQ29tbWFuZHMoZi5kZWZhdWx0Q29tbWFuZHMpLGcoZSl9ZnVuY3Rpb24gZyhlKXtmdW5jdGlvbiByKHQpe24mJihlLnJlbmRlcmVyLnNldE1vdXNlQ3Vyc29yKCIiKSxuPSExKX1pZighZS50ZXh0SW5wdXQpcmV0dXJuO3ZhciB0PWUudGV4dElucHV0LmdldEVsZW1lbnQoKSxuPSExO3UuYWRkTGlzdGVuZXIodCwia2V5ZG93biIsZnVuY3Rpb24odCl7dmFyIGk9dC5rZXlDb2RlPT0xOCYmISh0LmN0cmxLZXl8fHQuc2hpZnRLZXl8fHQubWV0YUtleSk7ZS4kYmxvY2tTZWxlY3RFbmFibGVkJiZpP258fChlLnJlbmRlcmVyLnNldE1vdXNlQ3Vyc29yKCJjcm9zc2hhaXIiKSxuPSEwKTpuJiZyKCl9KSx1LmFkZExpc3RlbmVyKHQsImtleXVwIixyKSx1LmFkZExpc3RlbmVyKHQsImJsdXIiLHIpfXZhciByPWUoIi4vcmFuZ2VfbGlzdCIpLlJhbmdlTGlzdCxpPWUoIi4vcmFuZ2UiKS5SYW5nZSxzPWUoIi4vc2VsZWN0aW9uIikuU2VsZWN0aW9uLG89ZSgiLi9tb3VzZS9tdWx0aV9zZWxlY3RfaGFuZGxlciIpLm9uTW91c2VEb3duLHU9ZSgiLi9saWIvZXZlbnQiKSxhPWUoIi4vbGliL2xhbmciKSxmPWUoIi4vY29tbWFuZHMvbXVsdGlfc2VsZWN0X2NvbW1hbmRzIik7dC5jb21tYW5kcz1mLmRlZmF1bHRDb21tYW5kcy5jb25jYXQoZi5tdWx0aVNlbGVjdENvbW1hbmRzKTt2YXIgbD1lKCIuL3NlYXJjaCIpLlNlYXJjaCxjPW5ldyBsLHA9ZSgiLi9lZGl0X3Nlc3Npb24iKS5FZGl0U2Vzc2lvbjsoZnVuY3Rpb24oKXt0aGlzLmdldFNlbGVjdGlvbk1hcmtlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kc2VsZWN0aW9uTWFya2Vyc319KS5jYWxsKHAucHJvdG90eXBlKSxmdW5jdGlvbigpe3RoaXMucmFuZ2VzPW51bGwsdGhpcy5yYW5nZUxpc3Q9bnVsbCx0aGlzLmFkZFJhbmdlPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuO2lmKCF0aGlzLmluTXVsdGlTZWxlY3RNb2RlJiZ0aGlzLnJhbmdlQ291bnQ9PT0wKXt2YXIgbj10aGlzLnRvT3JpZW50ZWRSYW5nZSgpO3RoaXMucmFuZ2VMaXN0LmFkZChuKSx0aGlzLnJhbmdlTGlzdC5hZGQoZSk7aWYodGhpcy5yYW5nZUxpc3QucmFuZ2VzLmxlbmd0aCE9MilyZXR1cm4gdGhpcy5yYW5nZUxpc3QucmVtb3ZlQWxsKCksdHx8dGhpcy5mcm9tT3JpZW50ZWRSYW5nZShlKTt0aGlzLnJhbmdlTGlzdC5yZW1vdmVBbGwoKSx0aGlzLnJhbmdlTGlzdC5hZGQobiksdGhpcy4kb25BZGRSYW5nZShuKX1lLmN1cnNvcnx8KGUuY3Vyc29yPWUuZW5kKTt2YXIgcj10aGlzLnJhbmdlTGlzdC5hZGQoZSk7cmV0dXJuIHRoaXMuJG9uQWRkUmFuZ2UoZSksci5sZW5ndGgmJnRoaXMuJG9uUmVtb3ZlUmFuZ2UociksdGhpcy5yYW5nZUNvdW50PjEmJiF0aGlzLmluTXVsdGlTZWxlY3RNb2RlJiYodGhpcy5fc2lnbmFsKCJtdWx0aVNlbGVjdCIpLHRoaXMuaW5NdWx0aVNlbGVjdE1vZGU9ITAsdGhpcy5zZXNzaW9uLiR1bmRvU2VsZWN0PSExLHRoaXMucmFuZ2VMaXN0LmF0dGFjaCh0aGlzLnNlc3Npb24pKSx0fHx0aGlzLmZyb21PcmllbnRlZFJhbmdlKGUpfSx0aGlzLnRvU2luZ2xlUmFuZ2U9ZnVuY3Rpb24oZSl7ZT1lfHx0aGlzLnJhbmdlc1swXTt2YXIgdD10aGlzLnJhbmdlTGlzdC5yZW1vdmVBbGwoKTt0Lmxlbmd0aCYmdGhpcy4kb25SZW1vdmVSYW5nZSh0KSxlJiZ0aGlzLmZyb21PcmllbnRlZFJhbmdlKGUpfSx0aGlzLnN1YnN0cmFjdFBvaW50PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucmFuZ2VMaXN0LnN1YnN0cmFjdFBvaW50KGUpO2lmKHQpcmV0dXJuIHRoaXMuJG9uUmVtb3ZlUmFuZ2UodCksdFswXX0sdGhpcy5tZXJnZU92ZXJsYXBwaW5nUmFuZ2VzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yYW5nZUxpc3QubWVyZ2UoKTtlLmxlbmd0aCYmdGhpcy4kb25SZW1vdmVSYW5nZShlKX0sdGhpcy4kb25BZGRSYW5nZT1mdW5jdGlvbihlKXt0aGlzLnJhbmdlQ291bnQ9dGhpcy5yYW5nZUxpc3QucmFuZ2VzLmxlbmd0aCx0aGlzLnJhbmdlcy51bnNoaWZ0KGUpLHRoaXMuX3NpZ25hbCgiYWRkUmFuZ2UiLHtyYW5nZTplfSl9LHRoaXMuJG9uUmVtb3ZlUmFuZ2U9ZnVuY3Rpb24oZSl7dGhpcy5yYW5nZUNvdW50PXRoaXMucmFuZ2VMaXN0LnJhbmdlcy5sZW5ndGg7aWYodGhpcy5yYW5nZUNvdW50PT0xJiZ0aGlzLmluTXVsdGlTZWxlY3RNb2RlKXt2YXIgdD10aGlzLnJhbmdlTGlzdC5yYW5nZXMucG9wKCk7ZS5wdXNoKHQpLHRoaXMucmFuZ2VDb3VudD0wfWZvcih2YXIgbj1lLmxlbmd0aDtuLS07KXt2YXIgcj10aGlzLnJhbmdlcy5pbmRleE9mKGVbbl0pO3RoaXMucmFuZ2VzLnNwbGljZShyLDEpfXRoaXMuX3NpZ25hbCgicmVtb3ZlUmFuZ2UiLHtyYW5nZXM6ZX0pLHRoaXMucmFuZ2VDb3VudD09PTAmJnRoaXMuaW5NdWx0aVNlbGVjdE1vZGUmJih0aGlzLmluTXVsdGlTZWxlY3RNb2RlPSExLHRoaXMuX3NpZ25hbCgic2luZ2xlU2VsZWN0IiksdGhpcy5zZXNzaW9uLiR1bmRvU2VsZWN0PSEwLHRoaXMucmFuZ2VMaXN0LmRldGFjaCh0aGlzLnNlc3Npb24pKSx0PXR8fHRoaXMucmFuZ2VzWzBdLHQmJiF0LmlzRXF1YWwodGhpcy5nZXRSYW5nZSgpKSYmdGhpcy5mcm9tT3JpZW50ZWRSYW5nZSh0KX0sdGhpcy4kaW5pdFJhbmdlTGlzdD1mdW5jdGlvbigpe2lmKHRoaXMucmFuZ2VMaXN0KXJldHVybjt0aGlzLnJhbmdlTGlzdD1uZXcgcix0aGlzLnJhbmdlcz1bXSx0aGlzLnJhbmdlQ291bnQ9MH0sdGhpcy5nZXRBbGxSYW5nZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yYW5nZUNvdW50P3RoaXMucmFuZ2VMaXN0LnJhbmdlcy5jb25jYXQoKTpbdGhpcy5nZXRSYW5nZSgpXX0sdGhpcy5zcGxpdEludG9MaW5lcz1mdW5jdGlvbigpe2lmKHRoaXMucmFuZ2VDb3VudD4xKXt2YXIgZT10aGlzLnJhbmdlTGlzdC5yYW5nZXMsdD1lW2UubGVuZ3RoLTFdLG49aS5mcm9tUG9pbnRzKGVbMF0uc3RhcnQsdC5lbmQpO3RoaXMudG9TaW5nbGVSYW5nZSgpLHRoaXMuc2V0U2VsZWN0aW9uUmFuZ2Uobix0LmN1cnNvcj09dC5zdGFydCl9ZWxzZXt2YXIgbj10aGlzLmdldFJhbmdlKCkscj10aGlzLmlzQmFja3dhcmRzKCkscz1uLnN0YXJ0LnJvdyxvPW4uZW5kLnJvdztpZihzPT1vKXtpZihyKXZhciB1PW4uZW5kLGE9bi5zdGFydDtlbHNlIHZhciB1PW4uc3RhcnQsYT1uLmVuZDt0aGlzLmFkZFJhbmdlKGkuZnJvbVBvaW50cyhhLGEpKSx0aGlzLmFkZFJhbmdlKGkuZnJvbVBvaW50cyh1LHUpKTtyZXR1cm59dmFyIGY9W10sbD10aGlzLmdldExpbmVSYW5nZShzLCEwKTtsLnN0YXJ0LmNvbHVtbj1uLnN0YXJ0LmNvbHVtbixmLnB1c2gobCk7Zm9yKHZhciBjPXMrMTtjPG87YysrKWYucHVzaCh0aGlzLmdldExpbmVSYW5nZShjLCEwKSk7bD10aGlzLmdldExpbmVSYW5nZShvLCEwKSxsLmVuZC5jb2x1bW49bi5lbmQuY29sdW1uLGYucHVzaChsKSxmLmZvckVhY2godGhpcy5hZGRSYW5nZSx0aGlzKX19LHRoaXMudG9nZ2xlQmxvY2tTZWxlY3Rpb249ZnVuY3Rpb24oKXtpZih0aGlzLnJhbmdlQ291bnQ+MSl7dmFyIGU9dGhpcy5yYW5nZUxpc3QucmFuZ2VzLHQ9ZVtlLmxlbmd0aC0xXSxuPWkuZnJvbVBvaW50cyhlWzBdLnN0YXJ0LHQuZW5kKTt0aGlzLnRvU2luZ2xlUmFuZ2UoKSx0aGlzLnNldFNlbGVjdGlvblJhbmdlKG4sdC5jdXJzb3I9PXQuc3RhcnQpfWVsc2V7dmFyIHI9dGhpcy5zZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbih0aGlzLmN1cnNvcikscz10aGlzLnNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKHRoaXMuYW5jaG9yKSxvPXRoaXMucmVjdGFuZ3VsYXJSYW5nZUJsb2NrKHIscyk7by5mb3JFYWNoKHRoaXMuYWRkUmFuZ2UsdGhpcyl9fSx0aGlzLnJlY3Rhbmd1bGFyUmFuZ2VCbG9jaz1mdW5jdGlvbihlLHQsbil7dmFyIHI9W10scz1lLmNvbHVtbjx0LmNvbHVtbjtpZihzKXZhciBvPWUuY29sdW1uLHU9dC5jb2x1bW4sYT1lLm9mZnNldFgsZj10Lm9mZnNldFg7ZWxzZSB2YXIgbz10LmNvbHVtbix1PWUuY29sdW1uLGE9dC5vZmZzZXRYLGY9ZS5vZmZzZXRYO3ZhciBsPWUucm93PHQucm93O2lmKGwpdmFyIGM9ZS5yb3csaD10LnJvdztlbHNlIHZhciBjPXQucm93LGg9ZS5yb3c7bzwwJiYobz0wKSxjPDAmJihjPTApLGM9PWgmJihuPSEwKTt2YXIgcDtmb3IodmFyIGQ9YztkPD1oO2QrKyl7dmFyIG09aS5mcm9tUG9pbnRzKHRoaXMuc2Vzc2lvbi5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24oZCxvLGEpLHRoaXMuc2Vzc2lvbi5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24oZCx1LGYpKTtpZihtLmlzRW1wdHkoKSl7aWYocCYmdihtLmVuZCxwKSlicmVhaztwPW0uZW5kfW0uY3Vyc29yPXM/bS5zdGFydDptLmVuZCxyLnB1c2gobSl9bCYmci5yZXZlcnNlKCk7aWYoIW4pe3ZhciBnPXIubGVuZ3RoLTE7d2hpbGUocltnXS5pc0VtcHR5KCkmJmc+MClnLS07aWYoZz4wKXt2YXIgeT0wO3doaWxlKHJbeV0uaXNFbXB0eSgpKXkrK31mb3IodmFyIGI9ZztiPj15O2ItLSlyW2JdLmlzRW1wdHkoKSYmci5zcGxpY2UoYiwxKX1yZXR1cm4gcn19LmNhbGwocy5wcm90b3R5cGUpO3ZhciBkPWUoIi4vZWRpdG9yIikuRWRpdG9yOyhmdW5jdGlvbigpe3RoaXMudXBkYXRlU2VsZWN0aW9uTWFya2Vycz1mdW5jdGlvbigpe3RoaXMucmVuZGVyZXIudXBkYXRlQ3Vyc29yKCksdGhpcy5yZW5kZXJlci51cGRhdGVCYWNrTWFya2VycygpfSx0aGlzLmFkZFNlbGVjdGlvbk1hcmtlcj1mdW5jdGlvbihlKXtlLmN1cnNvcnx8KGUuY3Vyc29yPWUuZW5kKTt2YXIgdD10aGlzLmdldFNlbGVjdGlvblN0eWxlKCk7cmV0dXJuIGUubWFya2VyPXRoaXMuc2Vzc2lvbi5hZGRNYXJrZXIoZSwiYWNlX3NlbGVjdGlvbiIsdCksdGhpcy5zZXNzaW9uLiRzZWxlY3Rpb25NYXJrZXJzLnB1c2goZSksdGhpcy5zZXNzaW9uLnNlbGVjdGlvbk1hcmtlckNvdW50PXRoaXMuc2Vzc2lvbi4kc2VsZWN0aW9uTWFya2Vycy5sZW5ndGgsZX0sdGhpcy5yZW1vdmVTZWxlY3Rpb25NYXJrZXI9ZnVuY3Rpb24oZSl7aWYoIWUubWFya2VyKXJldHVybjt0aGlzLnNlc3Npb24ucmVtb3ZlTWFya2VyKGUubWFya2VyKTt2YXIgdD10aGlzLnNlc3Npb24uJHNlbGVjdGlvbk1hcmtlcnMuaW5kZXhPZihlKTt0IT0tMSYmdGhpcy5zZXNzaW9uLiRzZWxlY3Rpb25NYXJrZXJzLnNwbGljZSh0LDEpLHRoaXMuc2Vzc2lvbi5zZWxlY3Rpb25NYXJrZXJDb3VudD10aGlzLnNlc3Npb24uJHNlbGVjdGlvbk1hcmtlcnMubGVuZ3RofSx0aGlzLnJlbW92ZVNlbGVjdGlvbk1hcmtlcnM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5zZXNzaW9uLiRzZWxlY3Rpb25NYXJrZXJzO2Zvcih2YXIgbj1lLmxlbmd0aDtuLS07KXt2YXIgcj1lW25dO2lmKCFyLm1hcmtlciljb250aW51ZTt0aGlzLnNlc3Npb24ucmVtb3ZlTWFya2VyKHIubWFya2VyKTt2YXIgaT10LmluZGV4T2Yocik7aSE9LTEmJnQuc3BsaWNlKGksMSl9dGhpcy5zZXNzaW9uLnNlbGVjdGlvbk1hcmtlckNvdW50PXQubGVuZ3RofSx0aGlzLiRvbkFkZFJhbmdlPWZ1bmN0aW9uKGUpe3RoaXMuYWRkU2VsZWN0aW9uTWFya2VyKGUucmFuZ2UpLHRoaXMucmVuZGVyZXIudXBkYXRlQ3Vyc29yKCksdGhpcy5yZW5kZXJlci51cGRhdGVCYWNrTWFya2VycygpfSx0aGlzLiRvblJlbW92ZVJhbmdlPWZ1bmN0aW9uKGUpe3RoaXMucmVtb3ZlU2VsZWN0aW9uTWFya2VycyhlLnJhbmdlcyksdGhpcy5yZW5kZXJlci51cGRhdGVDdXJzb3IoKSx0aGlzLnJlbmRlcmVyLnVwZGF0ZUJhY2tNYXJrZXJzKCl9LHRoaXMuJG9uTXVsdGlTZWxlY3Q9ZnVuY3Rpb24oZSl7aWYodGhpcy5pbk11bHRpU2VsZWN0TW9kZSlyZXR1cm47dGhpcy5pbk11bHRpU2VsZWN0TW9kZT0hMCx0aGlzLnNldFN0eWxlKCJhY2VfbXVsdGlzZWxlY3QiKSx0aGlzLmtleUJpbmRpbmcuYWRkS2V5Ym9hcmRIYW5kbGVyKGYua2V5Ym9hcmRIYW5kbGVyKSx0aGlzLmNvbW1hbmRzLnNldERlZmF1bHRIYW5kbGVyKCJleGVjIix0aGlzLiRvbk11bHRpU2VsZWN0RXhlYyksdGhpcy5yZW5kZXJlci51cGRhdGVDdXJzb3IoKSx0aGlzLnJlbmRlcmVyLnVwZGF0ZUJhY2tNYXJrZXJzKCl9LHRoaXMuJG9uU2luZ2xlU2VsZWN0PWZ1bmN0aW9uKGUpe2lmKHRoaXMuc2Vzc2lvbi5tdWx0aVNlbGVjdC5pblZpcnR1YWxNb2RlKXJldHVybjt0aGlzLmluTXVsdGlTZWxlY3RNb2RlPSExLHRoaXMudW5zZXRTdHlsZSgiYWNlX211bHRpc2VsZWN0IiksdGhpcy5rZXlCaW5kaW5nLnJlbW92ZUtleWJvYXJkSGFuZGxlcihmLmtleWJvYXJkSGFuZGxlciksdGhpcy5jb21tYW5kcy5yZW1vdmVEZWZhdWx0SGFuZGxlcigiZXhlYyIsdGhpcy4kb25NdWx0aVNlbGVjdEV4ZWMpLHRoaXMucmVuZGVyZXIudXBkYXRlQ3Vyc29yKCksdGhpcy5yZW5kZXJlci51cGRhdGVCYWNrTWFya2VycygpLHRoaXMuX2VtaXQoImNoYW5nZVNlbGVjdGlvbiIpfSx0aGlzLiRvbk11bHRpU2VsZWN0RXhlYz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbW1hbmQsbj1lLmVkaXRvcjtpZighbi5tdWx0aVNlbGVjdClyZXR1cm47aWYoIXQubXVsdGlTZWxlY3RBY3Rpb24pe3ZhciByPXQuZXhlYyhuLGUuYXJnc3x8e30pO24ubXVsdGlTZWxlY3QuYWRkUmFuZ2Uobi5tdWx0aVNlbGVjdC50b09yaWVudGVkUmFuZ2UoKSksbi5tdWx0aVNlbGVjdC5tZXJnZU92ZXJsYXBwaW5nUmFuZ2VzKCl9ZWxzZSB0Lm11bHRpU2VsZWN0QWN0aW9uPT0iZm9yRWFjaCI/cj1uLmZvckVhY2hTZWxlY3Rpb24odCxlLmFyZ3MpOnQubXVsdGlTZWxlY3RBY3Rpb249PSJmb3JFYWNoTGluZSI/cj1uLmZvckVhY2hTZWxlY3Rpb24odCxlLmFyZ3MsITApOnQubXVsdGlTZWxlY3RBY3Rpb249PSJzaW5nbGUiPyhuLmV4aXRNdWx0aVNlbGVjdE1vZGUoKSxyPXQuZXhlYyhuLGUuYXJnc3x8e30pKTpyPXQubXVsdGlTZWxlY3RBY3Rpb24obixlLmFyZ3N8fHt9KTtyZXR1cm4gcn0sdGhpcy5mb3JFYWNoU2VsZWN0aW9uPWZ1bmN0aW9uKGUsdCxuKXtpZih0aGlzLmluVmlydHVhbFNlbGVjdGlvbk1vZGUpcmV0dXJuO3ZhciByPW4mJm4ua2VlcE9yZGVyLGk9bj09MXx8biYmbi4kYnlMaW5lcyxvPXRoaXMuc2Vzc2lvbix1PXRoaXMuc2VsZWN0aW9uLGE9dS5yYW5nZUxpc3QsZj0ocj91OmEpLnJhbmdlcyxsO2lmKCFmLmxlbmd0aClyZXR1cm4gZS5leGVjP2UuZXhlYyh0aGlzLHR8fHt9KTplKHRoaXMsdHx8e30pO3ZhciBjPXUuX2V2ZW50UmVnaXN0cnk7dS5fZXZlbnRSZWdpc3RyeT17fTt2YXIgaD1uZXcgcyhvKTt0aGlzLmluVmlydHVhbFNlbGVjdGlvbk1vZGU9ITA7Zm9yKHZhciBwPWYubGVuZ3RoO3AtLTspe2lmKGkpd2hpbGUocD4wJiZmW3BdLnN0YXJ0LnJvdz09ZltwLTFdLmVuZC5yb3cpcC0tO2guZnJvbU9yaWVudGVkUmFuZ2UoZltwXSksaC5pbmRleD1wLHRoaXMuc2VsZWN0aW9uPW8uc2VsZWN0aW9uPWg7dmFyIGQ9ZS5leGVjP2UuZXhlYyh0aGlzLHR8fHt9KTplKHRoaXMsdHx8e30pOyFsJiZkIT09dW5kZWZpbmVkJiYobD1kKSxoLnRvT3JpZW50ZWRSYW5nZShmW3BdKX1oLmRldGFjaCgpLHRoaXMuc2VsZWN0aW9uPW8uc2VsZWN0aW9uPXUsdGhpcy5pblZpcnR1YWxTZWxlY3Rpb25Nb2RlPSExLHUuX2V2ZW50UmVnaXN0cnk9Yyx1Lm1lcmdlT3ZlcmxhcHBpbmdSYW5nZXMoKSx1LnJhbmdlc1swXSYmdS5mcm9tT3JpZW50ZWRSYW5nZSh1LnJhbmdlc1swXSk7dmFyIHY9dGhpcy5yZW5kZXJlci4kc2Nyb2xsQW5pbWF0aW9uO3JldHVybiB0aGlzLm9uQ3Vyc29yQ2hhbmdlKCksdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpLHYmJnYuZnJvbT09di50byYmdGhpcy5yZW5kZXJlci5hbmltYXRlU2Nyb2xsaW5nKHYuZnJvbSksbH0sdGhpcy5leGl0TXVsdGlTZWxlY3RNb2RlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuaW5NdWx0aVNlbGVjdE1vZGV8fHRoaXMuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSlyZXR1cm47dGhpcy5tdWx0aVNlbGVjdC50b1NpbmdsZVJhbmdlKCl9LHRoaXMuZ2V0U2VsZWN0ZWRUZXh0PWZ1bmN0aW9uKCl7dmFyIGU9IiI7aWYodGhpcy5pbk11bHRpU2VsZWN0TW9kZSYmIXRoaXMuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSl7dmFyIHQ9dGhpcy5tdWx0aVNlbGVjdC5yYW5nZUxpc3QucmFuZ2VzLG49W107Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspbi5wdXNoKHRoaXMuc2Vzc2lvbi5nZXRUZXh0UmFuZ2UodFtyXSkpO3ZhciBpPXRoaXMuc2Vzc2lvbi5nZXREb2N1bWVudCgpLmdldE5ld0xpbmVDaGFyYWN0ZXIoKTtlPW4uam9pbihpKSxlLmxlbmd0aD09KG4ubGVuZ3RoLTEpKmkubGVuZ3RoJiYoZT0iIil9ZWxzZSB0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCl8fChlPXRoaXMuc2Vzc2lvbi5nZXRUZXh0UmFuZ2UodGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpKSk7cmV0dXJuIGV9LHRoaXMuJGNoZWNrTXVsdGlzZWxlY3RDaGFuZ2U9ZnVuY3Rpb24oZSx0KXtpZih0aGlzLmluTXVsdGlTZWxlY3RNb2RlJiYhdGhpcy5pblZpcnR1YWxTZWxlY3Rpb25Nb2RlKXt2YXIgbj10aGlzLm11bHRpU2VsZWN0LnJhbmdlc1swXTtpZih0aGlzLm11bHRpU2VsZWN0LmlzRW1wdHkoKSYmdD09dGhpcy5tdWx0aVNlbGVjdC5hbmNob3IpcmV0dXJuO3ZhciByPXQ9PXRoaXMubXVsdGlTZWxlY3QuYW5jaG9yP24uY3Vyc29yPT1uLnN0YXJ0P24uZW5kOm4uc3RhcnQ6bi5jdXJzb3I7ci5yb3chPXQucm93fHx0aGlzLnNlc3Npb24uJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQoci5yb3csci5jb2x1bW4pLmNvbHVtbiE9dC5jb2x1bW4/dGhpcy5tdWx0aVNlbGVjdC50b1NpbmdsZVJhbmdlKHRoaXMubXVsdGlTZWxlY3QudG9PcmllbnRlZFJhbmdlKCkpOnRoaXMubXVsdGlTZWxlY3QubWVyZ2VPdmVybGFwcGluZ1JhbmdlcygpfX0sdGhpcy5maW5kQWxsPWZ1bmN0aW9uKGUsdCxuKXt0PXR8fHt9LHQubmVlZGxlPWV8fHQubmVlZGxlO2lmKHQubmVlZGxlPT11bmRlZmluZWQpe3ZhciByPXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKT90aGlzLnNlbGVjdGlvbi5nZXRXb3JkUmFuZ2UoKTp0aGlzLnNlbGVjdGlvbi5nZXRSYW5nZSgpO3QubmVlZGxlPXRoaXMuc2Vzc2lvbi5nZXRUZXh0UmFuZ2Uocil9dGhpcy4kc2VhcmNoLnNldCh0KTt2YXIgaT10aGlzLiRzZWFyY2guZmluZEFsbCh0aGlzLnNlc3Npb24pO2lmKCFpLmxlbmd0aClyZXR1cm4gMDt2YXIgcz10aGlzLm11bHRpU2VsZWN0O258fHMudG9TaW5nbGVSYW5nZShpWzBdKTtmb3IodmFyIG89aS5sZW5ndGg7by0tOylzLmFkZFJhbmdlKGlbb10sITApO3JldHVybiByJiZzLnJhbmdlTGlzdC5yYW5nZUF0UG9pbnQoci5zdGFydCkmJnMuYWRkUmFuZ2UociwhMCksaS5sZW5ndGh9LHRoaXMuc2VsZWN0TW9yZUxpbmVzPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5zZWxlY3Rpb24udG9PcmllbnRlZFJhbmdlKCkscj1uLmN1cnNvcj09bi5lbmQscz10aGlzLnNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKG4uY3Vyc29yKTt0aGlzLnNlbGVjdGlvbi4kZGVzaXJlZENvbHVtbiYmKHMuY29sdW1uPXRoaXMuc2VsZWN0aW9uLiRkZXNpcmVkQ29sdW1uKTt2YXIgbz10aGlzLnNlc3Npb24uc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKHMucm93K2Uscy5jb2x1bW4pO2lmKCFuLmlzRW1wdHkoKSl2YXIgdT10aGlzLnNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKHI/bi5lbmQ6bi5zdGFydCksYT10aGlzLnNlc3Npb24uc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKHUucm93K2UsdS5jb2x1bW4pO2Vsc2UgdmFyIGE9bztpZihyKXt2YXIgZj1pLmZyb21Qb2ludHMobyxhKTtmLmN1cnNvcj1mLnN0YXJ0fWVsc2V7dmFyIGY9aS5mcm9tUG9pbnRzKGEsbyk7Zi5jdXJzb3I9Zi5lbmR9Zi5kZXNpcmVkQ29sdW1uPXMuY29sdW1uO2lmKCF0aGlzLnNlbGVjdGlvbi5pbk11bHRpU2VsZWN0TW9kZSl0aGlzLnNlbGVjdGlvbi5hZGRSYW5nZShuKTtlbHNlIGlmKHQpdmFyIGw9bi5jdXJzb3I7dGhpcy5zZWxlY3Rpb24uYWRkUmFuZ2UoZiksbCYmdGhpcy5zZWxlY3Rpb24uc3Vic3RyYWN0UG9pbnQobCl9LHRoaXMudHJhbnNwb3NlU2VsZWN0aW9ucz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnNlc3Npb24sbj10Lm11bHRpU2VsZWN0LHI9bi5yYW5nZXM7Zm9yKHZhciBpPXIubGVuZ3RoO2ktLTspe3ZhciBzPXJbaV07aWYocy5pc0VtcHR5KCkpe3ZhciBvPXQuZ2V0V29yZFJhbmdlKHMuc3RhcnQucm93LHMuc3RhcnQuY29sdW1uKTtzLnN0YXJ0LnJvdz1vLnN0YXJ0LnJvdyxzLnN0YXJ0LmNvbHVtbj1vLnN0YXJ0LmNvbHVtbixzLmVuZC5yb3c9by5lbmQucm93LHMuZW5kLmNvbHVtbj1vLmVuZC5jb2x1bW59fW4ubWVyZ2VPdmVybGFwcGluZ1JhbmdlcygpO3ZhciB1PVtdO2Zvcih2YXIgaT1yLmxlbmd0aDtpLS07KXt2YXIgcz1yW2ldO3UudW5zaGlmdCh0LmdldFRleHRSYW5nZShzKSl9ZTwwP3UudW5zaGlmdCh1LnBvcCgpKTp1LnB1c2godS5zaGlmdCgpKTtmb3IodmFyIGk9ci5sZW5ndGg7aS0tOyl7dmFyIHM9cltpXSxvPXMuY2xvbmUoKTt0LnJlcGxhY2Uocyx1W2ldKSxzLnN0YXJ0LnJvdz1vLnN0YXJ0LnJvdyxzLnN0YXJ0LmNvbHVtbj1vLnN0YXJ0LmNvbHVtbn1uLmZyb21PcmllbnRlZFJhbmdlKG4ucmFuZ2VzWzBdKX0sdGhpcy5zZWxlY3RNb3JlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLnNlc3Npb24saT1yLm11bHRpU2VsZWN0LHM9aS50b09yaWVudGVkUmFuZ2UoKTtpZihzLmlzRW1wdHkoKSl7cz1yLmdldFdvcmRSYW5nZShzLnN0YXJ0LnJvdyxzLnN0YXJ0LmNvbHVtbikscy5jdXJzb3I9ZT09LTE/cy5zdGFydDpzLmVuZCx0aGlzLm11bHRpU2VsZWN0LmFkZFJhbmdlKHMpO2lmKG4pcmV0dXJufXZhciBvPXIuZ2V0VGV4dFJhbmdlKHMpLHU9aChyLG8sZSk7dSYmKHUuY3Vyc29yPWU9PS0xP3Uuc3RhcnQ6dS5lbmQsdGhpcy5zZXNzaW9uLnVuZm9sZCh1KSx0aGlzLm11bHRpU2VsZWN0LmFkZFJhbmdlKHUpLHRoaXMucmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcobnVsbCwuNSkpLHQmJnRoaXMubXVsdGlTZWxlY3Quc3Vic3RyYWN0UG9pbnQocy5jdXJzb3IpfSx0aGlzLmFsaWduQ3Vyc29ycz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuc2Vzc2lvbix0PWUubXVsdGlTZWxlY3Qsbj10LnJhbmdlcyxyPS0xLHM9bi5maWx0ZXIoZnVuY3Rpb24oZSl7aWYoZS5jdXJzb3Iucm93PT1yKXJldHVybiEwO3I9ZS5jdXJzb3Iucm93fSk7aWYoIW4ubGVuZ3RofHxzLmxlbmd0aD09bi5sZW5ndGgtMSl7dmFyIG89dGhpcy5zZWxlY3Rpb24uZ2V0UmFuZ2UoKSx1PW8uc3RhcnQucm93LGY9by5lbmQucm93LGw9dT09ZjtpZihsKXt2YXIgYz10aGlzLnNlc3Npb24uZ2V0TGVuZ3RoKCksaDtkbyBoPXRoaXMuc2Vzc2lvbi5nZXRMaW5lKGYpO3doaWxlKC9bPTpdLy50ZXN0KGgpJiYrK2Y8Yyk7ZG8gaD10aGlzLnNlc3Npb24uZ2V0TGluZSh1KTt3aGlsZSgvWz06XS8udGVzdChoKSYmLS11PjApO3U8MCYmKHU9MCksZj49YyYmKGY9Yy0xKX12YXIgcD10aGlzLnNlc3Npb24ucmVtb3ZlRnVsbExpbmVzKHUsZik7cD10aGlzLiRyZUFsaWduVGV4dChwLGwpLHRoaXMuc2Vzc2lvbi5pbnNlcnQoe3Jvdzp1LGNvbHVtbjowfSxwLmpvaW4oIlxuIikrIlxuIiksbHx8KG8uc3RhcnQuY29sdW1uPTAsby5lbmQuY29sdW1uPXBbcC5sZW5ndGgtMV0ubGVuZ3RoKSx0aGlzLnNlbGVjdGlvbi5zZXRSYW5nZShvKX1lbHNle3MuZm9yRWFjaChmdW5jdGlvbihlKXt0LnN1YnN0cmFjdFBvaW50KGUuY3Vyc29yKX0pO3ZhciBkPTAsdj1JbmZpbml0eSxtPW4ubWFwKGZ1bmN0aW9uKHQpe3ZhciBuPXQuY3Vyc29yLHI9ZS5nZXRMaW5lKG4ucm93KSxpPXIuc3Vic3RyKG4uY29sdW1uKS5zZWFyY2goL1xTL2cpO3JldHVybiBpPT0tMSYmKGk9MCksbi5jb2x1bW4+ZCYmKGQ9bi5jb2x1bW4pLGk8diYmKHY9aSksaX0pO24uZm9yRWFjaChmdW5jdGlvbih0LG4pe3ZhciByPXQuY3Vyc29yLHM9ZC1yLmNvbHVtbixvPW1bbl0tdjtzPm8/ZS5pbnNlcnQocixhLnN0cmluZ1JlcGVhdCgiICIscy1vKSk6ZS5yZW1vdmUobmV3IGkoci5yb3csci5jb2x1bW4sci5yb3csci5jb2x1bW4tcytvKSksdC5zdGFydC5jb2x1bW49dC5lbmQuY29sdW1uPWQsdC5zdGFydC5yb3c9dC5lbmQucm93PXIucm93LHQuY3Vyc29yPXQuZW5kfSksdC5mcm9tT3JpZW50ZWRSYW5nZShuWzBdKSx0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpLHRoaXMucmVuZGVyZXIudXBkYXRlQmFja01hcmtlcnMoKX19LHRoaXMuJHJlQWxpZ25UZXh0PWZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gdShlKXtyZXR1cm4gYS5zdHJpbmdSZXBlYXQoIiAiLGUpfWZ1bmN0aW9uIGYoZSl7cmV0dXJuIGVbMl0/dShpKStlWzJdK3Uocy1lWzJdLmxlbmd0aCtvKStlWzRdLnJlcGxhY2UoL14oWz06XSlccysvLCIkMSAiKTplWzBdfWZ1bmN0aW9uIGwoZSl7cmV0dXJuIGVbMl0/dShpK3MtZVsyXS5sZW5ndGgpK2VbMl0rdShvKStlWzRdLnJlcGxhY2UoL14oWz06XSlccysvLCIkMSAiKTplWzBdfWZ1bmN0aW9uIGMoZSl7cmV0dXJuIGVbMl0/dShpKStlWzJdK3UobykrZVs0XS5yZXBsYWNlKC9eKFs9Ol0pXHMrLywiJDEgIik6ZVswXX12YXIgbj0hMCxyPSEwLGkscyxvO3JldHVybiBlLm1hcChmdW5jdGlvbihlKXt2YXIgdD1lLm1hdGNoKC8oXHMqKSguKj8pKFxzKikoWz06XS4qKS8pO3JldHVybiB0P2k9PW51bGw/KGk9dFsxXS5sZW5ndGgscz10WzJdLmxlbmd0aCxvPXRbM10ubGVuZ3RoLHQpOihpK3MrbyE9dFsxXS5sZW5ndGgrdFsyXS5sZW5ndGgrdFszXS5sZW5ndGgmJihyPSExKSxpIT10WzFdLmxlbmd0aCYmKG49ITEpLGk+dFsxXS5sZW5ndGgmJihpPXRbMV0ubGVuZ3RoKSxzPHRbMl0ubGVuZ3RoJiYocz10WzJdLmxlbmd0aCksbz50WzNdLmxlbmd0aCYmKG89dFszXS5sZW5ndGgpLHQpOltlXX0pLm1hcCh0P2Y6bj9yP2w6ZjpjKX19KS5jYWxsKGQucHJvdG90eXBlKSx0Lm9uU2Vzc2lvbkNoYW5nZT1mdW5jdGlvbihlKXt2YXIgdD1lLnNlc3Npb247dCYmIXQubXVsdGlTZWxlY3QmJih0LiRzZWxlY3Rpb25NYXJrZXJzPVtdLHQuc2VsZWN0aW9uLiRpbml0UmFuZ2VMaXN0KCksdC5tdWx0aVNlbGVjdD10LnNlbGVjdGlvbiksdGhpcy5tdWx0aVNlbGVjdD10JiZ0Lm11bHRpU2VsZWN0O3ZhciBuPWUub2xkU2Vzc2lvbjtuJiYobi5tdWx0aVNlbGVjdC5vZmYoImFkZFJhbmdlIix0aGlzLiRvbkFkZFJhbmdlKSxuLm11bHRpU2VsZWN0Lm9mZigicmVtb3ZlUmFuZ2UiLHRoaXMuJG9uUmVtb3ZlUmFuZ2UpLG4ubXVsdGlTZWxlY3Qub2ZmKCJtdWx0aVNlbGVjdCIsdGhpcy4kb25NdWx0aVNlbGVjdCksbi5tdWx0aVNlbGVjdC5vZmYoInNpbmdsZVNlbGVjdCIsdGhpcy4kb25TaW5nbGVTZWxlY3QpLG4ubXVsdGlTZWxlY3QubGVhZC5vZmYoImNoYW5nZSIsdGhpcy4kY2hlY2tNdWx0aXNlbGVjdENoYW5nZSksbi5tdWx0aVNlbGVjdC5hbmNob3Iub2ZmKCJjaGFuZ2UiLHRoaXMuJGNoZWNrTXVsdGlzZWxlY3RDaGFuZ2UpKSx0JiYodC5tdWx0aVNlbGVjdC5vbigiYWRkUmFuZ2UiLHRoaXMuJG9uQWRkUmFuZ2UpLHQubXVsdGlTZWxlY3Qub24oInJlbW92ZVJhbmdlIix0aGlzLiRvblJlbW92ZVJhbmdlKSx0Lm11bHRpU2VsZWN0Lm9uKCJtdWx0aVNlbGVjdCIsdGhpcy4kb25NdWx0aVNlbGVjdCksdC5tdWx0aVNlbGVjdC5vbigic2luZ2xlU2VsZWN0Iix0aGlzLiRvblNpbmdsZVNlbGVjdCksdC5tdWx0aVNlbGVjdC5sZWFkLm9uKCJjaGFuZ2UiLHRoaXMuJGNoZWNrTXVsdGlzZWxlY3RDaGFuZ2UpLHQubXVsdGlTZWxlY3QuYW5jaG9yLm9uKCJjaGFuZ2UiLHRoaXMuJGNoZWNrTXVsdGlzZWxlY3RDaGFuZ2UpKSx0JiZ0aGlzLmluTXVsdGlTZWxlY3RNb2RlIT10LnNlbGVjdGlvbi5pbk11bHRpU2VsZWN0TW9kZSYmKHQuc2VsZWN0aW9uLmluTXVsdGlTZWxlY3RNb2RlP3RoaXMuJG9uTXVsdGlTZWxlY3QoKTp0aGlzLiRvblNpbmdsZVNlbGVjdCgpKX0sdC5NdWx0aVNlbGVjdD1tLGUoIi4vY29uZmlnIikuZGVmaW5lT3B0aW9ucyhkLnByb3RvdHlwZSwiZWRpdG9yIix7ZW5hYmxlTXVsdGlzZWxlY3Q6e3NldDpmdW5jdGlvbihlKXttKHRoaXMpLGU/KHRoaXMub24oImNoYW5nZVNlc3Npb24iLHRoaXMuJG11bHRpc2VsZWN0T25TZXNzaW9uQ2hhbmdlKSx0aGlzLm9uKCJtb3VzZWRvd24iLG8pKToodGhpcy5vZmYoImNoYW5nZVNlc3Npb24iLHRoaXMuJG11bHRpc2VsZWN0T25TZXNzaW9uQ2hhbmdlKSx0aGlzLm9mZigibW91c2Vkb3duIixvKSl9LHZhbHVlOiEwfSxlbmFibGVCbG9ja1NlbGVjdDp7c2V0OmZ1bmN0aW9uKGUpe3RoaXMuJGJsb2NrU2VsZWN0RW5hYmxlZD1lfSx2YWx1ZTohMH19KX0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuLi8uLi9yYW5nZSIpLlJhbmdlLGk9dC5Gb2xkTW9kZT1mdW5jdGlvbigpe307KGZ1bmN0aW9uKCl7dGhpcy5mb2xkaW5nU3RhcnRNYXJrZXI9bnVsbCx0aGlzLmZvbGRpbmdTdG9wTWFya2VyPW51bGwsdGhpcy5nZXRGb2xkV2lkZ2V0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLmdldExpbmUobik7cmV0dXJuIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnRlc3Qocik/InN0YXJ0Ijp0PT0ibWFya2JlZ2luZW5kIiYmdGhpcy5mb2xkaW5nU3RvcE1hcmtlciYmdGhpcy5mb2xkaW5nU3RvcE1hcmtlci50ZXN0KHIpPyJlbmQiOiIifSx0aGlzLmdldEZvbGRXaWRnZXRSYW5nZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG51bGx9LHRoaXMuaW5kZW50YXRpb25CbG9jaz1mdW5jdGlvbihlLHQsbil7dmFyIGk9L1xTLyxzPWUuZ2V0TGluZSh0KSxvPXMuc2VhcmNoKGkpO2lmKG89PS0xKXJldHVybjt2YXIgdT1ufHxzLmxlbmd0aCxhPWUuZ2V0TGVuZ3RoKCksZj10LGw9dDt3aGlsZSgrK3Q8YSl7dmFyIGM9ZS5nZXRMaW5lKHQpLnNlYXJjaChpKTtpZihjPT0tMSljb250aW51ZTtpZihjPD1vKXt2YXIgaD1lLmdldFRva2VuQXQodCwwKTtpZighaHx8aC50eXBlIT09InN0cmluZyIpYnJlYWt9bD10fWlmKGw+Zil7dmFyIHA9ZS5nZXRMaW5lKGwpLmxlbmd0aDtyZXR1cm4gbmV3IHIoZix1LGwscCl9fSx0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2s9ZnVuY3Rpb24oZSx0LG4saSxzKXt2YXIgbz17cm93Om4sY29sdW1uOmkrMX0sdT1lLiRmaW5kQ2xvc2luZ0JyYWNrZXQodCxvLHMpO2lmKCF1KXJldHVybjt2YXIgYT1lLmZvbGRXaWRnZXRzW3Uucm93XTtyZXR1cm4gYT09bnVsbCYmKGE9ZS5nZXRGb2xkV2lkZ2V0KHUucm93KSksYT09InN0YXJ0IiYmdS5yb3c+by5yb3cmJih1LnJvdy0tLHUuY29sdW1uPWUuZ2V0TGluZSh1LnJvdykubGVuZ3RoKSxyLmZyb21Qb2ludHMobyx1KX0sdGhpcy5jbG9zaW5nQnJhY2tldEJsb2NrPWZ1bmN0aW9uKGUsdCxuLGkscyl7dmFyIG89e3JvdzpuLGNvbHVtbjppfSx1PWUuJGZpbmRPcGVuaW5nQnJhY2tldCh0LG8pO2lmKCF1KXJldHVybjtyZXR1cm4gdS5jb2x1bW4rKyxvLmNvbHVtbi0tLHIuZnJvbVBvaW50cyh1LG8pfX0pLmNhbGwoaS5wcm90b3R5cGUpfSksYWNlLmRlZmluZSgiYWNlL3RoZW1lL3RleHRtYXRlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9kb20iXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuaXNEYXJrPSExLHQuY3NzQ2xhc3M9ImFjZS10bSIsdC5jc3NUZXh0PScuYWNlLXRtIC5hY2VfZ3V0dGVyIHtiYWNrZ3JvdW5kOiAjZjBmMGYwO2NvbG9yOiAjMzMzO30uYWNlLXRtIC5hY2VfcHJpbnQtbWFyZ2luIHt3aWR0aDogMXB4O2JhY2tncm91bmQ6ICNlOGU4ZTg7fS5hY2UtdG0gLmFjZV9mb2xkIHtiYWNrZ3JvdW5kLWNvbG9yOiAjNkI3MkU2O30uYWNlLXRtIHtiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGO2NvbG9yOiBibGFjazt9LmFjZS10bSAuYWNlX2N1cnNvciB7Y29sb3I6IGJsYWNrO30uYWNlLXRtIC5hY2VfaW52aXNpYmxlIHtjb2xvcjogcmdiKDE5MSwgMTkxLCAxOTEpO30uYWNlLXRtIC5hY2Vfc3RvcmFnZSwuYWNlLXRtIC5hY2Vfa2V5d29yZCB7Y29sb3I6IGJsdWU7fS5hY2UtdG0gLmFjZV9jb25zdGFudCB7Y29sb3I6IHJnYigxOTcsIDYsIDExKTt9LmFjZS10bSAuYWNlX2NvbnN0YW50LmFjZV9idWlsZGluIHtjb2xvcjogcmdiKDg4LCA3MiwgMjQ2KTt9LmFjZS10bSAuYWNlX2NvbnN0YW50LmFjZV9sYW5ndWFnZSB7Y29sb3I6IHJnYig4OCwgOTIsIDI0Nik7fS5hY2UtdG0gLmFjZV9jb25zdGFudC5hY2VfbGlicmFyeSB7Y29sb3I6IHJnYig2LCAxNTAsIDE0KTt9LmFjZS10bSAuYWNlX2ludmFsaWQge2JhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAwLCAwLCAwLjEpO2NvbG9yOiByZWQ7fS5hY2UtdG0gLmFjZV9zdXBwb3J0LmFjZV9mdW5jdGlvbiB7Y29sb3I6IHJnYig2MCwgNzYsIDExNCk7fS5hY2UtdG0gLmFjZV9zdXBwb3J0LmFjZV9jb25zdGFudCB7Y29sb3I6IHJnYig2LCAxNTAsIDE0KTt9LmFjZS10bSAuYWNlX3N1cHBvcnQuYWNlX3R5cGUsLmFjZS10bSAuYWNlX3N1cHBvcnQuYWNlX2NsYXNzIHtjb2xvcjogcmdiKDEwOSwgMTIxLCAyMjIpO30uYWNlLXRtIC5hY2Vfa2V5d29yZC5hY2Vfb3BlcmF0b3Ige2NvbG9yOiByZ2IoMTA0LCAxMTgsIDEzNSk7fS5hY2UtdG0gLmFjZV9zdHJpbmcge2NvbG9yOiByZ2IoMywgMTA2LCA3KTt9LmFjZS10bSAuYWNlX2NvbW1lbnQge2NvbG9yOiByZ2IoNzYsIDEzNiwgMTA3KTt9LmFjZS10bSAuYWNlX2NvbW1lbnQuYWNlX2RvYyB7Y29sb3I6IHJnYigwLCAxMDIsIDI1NSk7fS5hY2UtdG0gLmFjZV9jb21tZW50LmFjZV9kb2MuYWNlX3RhZyB7Y29sb3I6IHJnYigxMjgsIDE1OSwgMTkxKTt9LmFjZS10bSAuYWNlX2NvbnN0YW50LmFjZV9udW1lcmljIHtjb2xvcjogcmdiKDAsIDAsIDIwNSk7fS5hY2UtdG0gLmFjZV92YXJpYWJsZSB7Y29sb3I6IHJnYig0OSwgMTMyLCAxNDkpO30uYWNlLXRtIC5hY2VfeG1sLXBlIHtjb2xvcjogcmdiKDEwNCwgMTA0LCA5MSk7fS5hY2UtdG0gLmFjZV9lbnRpdHkuYWNlX25hbWUuYWNlX2Z1bmN0aW9uIHtjb2xvcjogIzAwMDBBMjt9LmFjZS10bSAuYWNlX2hlYWRpbmcge2NvbG9yOiByZ2IoMTIsIDcsIDI1NSk7fS5hY2UtdG0gLmFjZV9saXN0IHtjb2xvcjpyZ2IoMTg1LCA2LCAxNDQpO30uYWNlLXRtIC5hY2VfbWV0YS5hY2VfdGFnIHtjb2xvcjpyZ2IoMCwgMjIsIDE0Mik7fS5hY2UtdG0gLmFjZV9zdHJpbmcuYWNlX3JlZ2V4IHtjb2xvcjogcmdiKDI1NSwgMCwgMCl9LmFjZS10bSAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGlvbiB7YmFja2dyb3VuZDogcmdiKDE4MSwgMjEzLCAyNTUpO30uYWNlLXRtLmFjZV9tdWx0aXNlbGVjdCAuYWNlX3NlbGVjdGlvbi5hY2Vfc3RhcnQge2JveC1zaGFkb3c6IDAgMCAzcHggMHB4IHdoaXRlO30uYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc3RlcCB7YmFja2dyb3VuZDogcmdiKDI1MiwgMjU1LCAwKTt9LmFjZS10bSAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0YWNrIHtiYWNrZ3JvdW5kOiByZ2IoMTY0LCAyMjksIDEwMSk7fS5hY2UtdG0gLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9icmFja2V0IHttYXJnaW46IC0xcHggMCAwIC0xcHg7Ym9yZGVyOiAxcHggc29saWQgcmdiKDE5MiwgMTkyLCAxOTIpO30uYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlLWxpbmUge2JhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4wNyk7fS5hY2UtdG0gLmFjZV9ndXR0ZXItYWN0aXZlLWxpbmUge2JhY2tncm91bmQtY29sb3IgOiAjZGNkY2RjO30uYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0ZWQtd29yZCB7YmFja2dyb3VuZDogcmdiKDI1MCwgMjUwLCAyNTUpO2JvcmRlcjogMXB4IHNvbGlkIHJnYigyMDAsIDIwMCwgMjUwKTt9LmFjZS10bSAuYWNlX2luZGVudC1ndWlkZSB7YmFja2dyb3VuZDogdXJsKCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFFQUFBQUNDQVlBQUFDWmdiWW5BQUFBRTBsRVFWUUltV1A0Ly8vL2Y0YkxseS8vQndBbVZnZDEvdzExL2dBQUFBQkpSVTVFcmtKZ2dnPT0iKSByaWdodCByZXBlYXQteTt9Jyx0LiRpZD0iYWNlL3RoZW1lL3RleHRtYXRlIjt2YXIgcj1lKCIuLi9saWIvZG9tIik7ci5pbXBvcnRDc3NTdHJpbmcodC5jc3NUZXh0LHQuY3NzQ2xhc3MpfSksYWNlLmRlZmluZSgiYWNlL2xpbmVfd2lkZ2V0cyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9kb20iLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG8oZSl7dGhpcy5zZXNzaW9uPWUsdGhpcy5zZXNzaW9uLndpZGdldE1hbmFnZXI9dGhpcyx0aGlzLnNlc3Npb24uZ2V0Um93TGVuZ3RoPXRoaXMuZ2V0Um93TGVuZ3RoLHRoaXMuc2Vzc2lvbi4kZ2V0V2lkZ2V0U2NyZWVuTGVuZ3RoPXRoaXMuJGdldFdpZGdldFNjcmVlbkxlbmd0aCx0aGlzLnVwZGF0ZU9uQ2hhbmdlPXRoaXMudXBkYXRlT25DaGFuZ2UuYmluZCh0aGlzKSx0aGlzLnJlbmRlcldpZGdldHM9dGhpcy5yZW5kZXJXaWRnZXRzLmJpbmQodGhpcyksdGhpcy5tZWFzdXJlV2lkZ2V0cz10aGlzLm1lYXN1cmVXaWRnZXRzLmJpbmQodGhpcyksdGhpcy5zZXNzaW9uLl9jaGFuZ2VkV2lkZ2V0cz1bXSx0aGlzLiRvbkNoYW5nZUVkaXRvcj10aGlzLiRvbkNoYW5nZUVkaXRvci5iaW5kKHRoaXMpLHRoaXMuc2Vzc2lvbi5vbigiY2hhbmdlIix0aGlzLnVwZGF0ZU9uQ2hhbmdlKSx0aGlzLnNlc3Npb24ub24oImNoYW5nZUZvbGQiLHRoaXMudXBkYXRlT25Gb2xkKSx0aGlzLnNlc3Npb24ub24oImNoYW5nZUVkaXRvciIsdGhpcy4kb25DaGFuZ2VFZGl0b3IpfXZhciByPWUoIi4vbGliL29vcCIpLGk9ZSgiLi9saWIvZG9tIikscz1lKCIuL3JhbmdlIikuUmFuZ2U7KGZ1bmN0aW9uKCl7dGhpcy5nZXRSb3dMZW5ndGg9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIHRoaXMubGluZVdpZGdldHM/dD10aGlzLmxpbmVXaWRnZXRzW2VdJiZ0aGlzLmxpbmVXaWRnZXRzW2VdLnJvd0NvdW50fHwwOnQ9MCwhdGhpcy4kdXNlV3JhcE1vZGV8fCF0aGlzLiR3cmFwRGF0YVtlXT8xK3Q6dGhpcy4kd3JhcERhdGFbZV0ubGVuZ3RoKzErdH0sdGhpcy4kZ2V0V2lkZ2V0U2NyZWVuTGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIGU9MDtyZXR1cm4gdGhpcy5saW5lV2lkZ2V0cy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QmJnQucm93Q291bnQmJiF0LmhpZGRlbiYmKGUrPXQucm93Q291bnQpfSksZX0sdGhpcy4kb25DaGFuZ2VFZGl0b3I9ZnVuY3Rpb24oZSl7dGhpcy5hdHRhY2goZS5lZGl0b3IpfSx0aGlzLmF0dGFjaD1mdW5jdGlvbihlKXtlJiZlLndpZGdldE1hbmFnZXImJmUud2lkZ2V0TWFuYWdlciE9dGhpcyYmZS53aWRnZXRNYW5hZ2VyLmRldGFjaCgpO2lmKHRoaXMuZWRpdG9yPT1lKXJldHVybjt0aGlzLmRldGFjaCgpLHRoaXMuZWRpdG9yPWUsZSYmKGUud2lkZ2V0TWFuYWdlcj10aGlzLGUucmVuZGVyZXIub24oImJlZm9yZVJlbmRlciIsdGhpcy5tZWFzdXJlV2lkZ2V0cyksZS5yZW5kZXJlci5vbigiYWZ0ZXJSZW5kZXIiLHRoaXMucmVuZGVyV2lkZ2V0cykpfSx0aGlzLmRldGFjaD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmVkaXRvcjtpZighdClyZXR1cm47dGhpcy5lZGl0b3I9bnVsbCx0LndpZGdldE1hbmFnZXI9bnVsbCx0LnJlbmRlcmVyLm9mZigiYmVmb3JlUmVuZGVyIix0aGlzLm1lYXN1cmVXaWRnZXRzKSx0LnJlbmRlcmVyLm9mZigiYWZ0ZXJSZW5kZXIiLHRoaXMucmVuZGVyV2lkZ2V0cyk7dmFyIG49dGhpcy5zZXNzaW9uLmxpbmVXaWRnZXRzO24mJm4uZm9yRWFjaChmdW5jdGlvbihlKXtlJiZlLmVsJiZlLmVsLnBhcmVudE5vZGUmJihlLl9pbkRvY3VtZW50PSExLGUuZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlLmVsKSl9KX0sdGhpcy51cGRhdGVPbkZvbGQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmxpbmVXaWRnZXRzO2lmKCFufHwhZS5hY3Rpb24pcmV0dXJuO3ZhciByPWUuZGF0YSxpPXIuc3RhcnQucm93LHM9ci5lbmQucm93LG89ZS5hY3Rpb249PSJhZGQiO2Zvcih2YXIgdT1pKzE7dTxzO3UrKyluW3VdJiYoblt1XS5oaWRkZW49byk7bltzXSYmKG8/bltpXT9uW3NdLmhpZGRlbj1vOm5baV09bltzXToobltpXT09bltzXSYmKG5baV09dW5kZWZpbmVkKSxuW3NdLmhpZGRlbj1vKSl9LHRoaXMudXBkYXRlT25DaGFuZ2U9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5zZXNzaW9uLmxpbmVXaWRnZXRzO2lmKCF0KXJldHVybjt2YXIgbj1lLnN0YXJ0LnJvdyxyPWUuZW5kLnJvdy1uO2lmKHIhPT0wKWlmKGUuYWN0aW9uPT0icmVtb3ZlIil7dmFyIGk9dC5zcGxpY2UobisxLHIpO2kuZm9yRWFjaChmdW5jdGlvbihlKXtlJiZ0aGlzLnJlbW92ZUxpbmVXaWRnZXQoZSl9LHRoaXMpLHRoaXMuJHVwZGF0ZVJvd3MoKX1lbHNle3ZhciBzPW5ldyBBcnJheShyKTtzLnVuc2hpZnQobiwwKSx0LnNwbGljZS5hcHBseSh0LHMpLHRoaXMuJHVwZGF0ZVJvd3MoKX19LHRoaXMuJHVwZGF0ZVJvd3M9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnNlc3Npb24ubGluZVdpZGdldHM7aWYoIWUpcmV0dXJuO3ZhciB0PSEwO2UuZm9yRWFjaChmdW5jdGlvbihlLG4pe2lmKGUpe3Q9ITEsZS5yb3c9bjt3aGlsZShlLiRvbGRXaWRnZXQpZS4kb2xkV2lkZ2V0LnJvdz1uLGU9ZS4kb2xkV2lkZ2V0fX0pLHQmJih0aGlzLnNlc3Npb24ubGluZVdpZGdldHM9bnVsbCl9LHRoaXMuYWRkTGluZVdpZGdldD1mdW5jdGlvbihlKXt0aGlzLnNlc3Npb24ubGluZVdpZGdldHN8fCh0aGlzLnNlc3Npb24ubGluZVdpZGdldHM9bmV3IEFycmF5KHRoaXMuc2Vzc2lvbi5nZXRMZW5ndGgoKSkpO3ZhciB0PXRoaXMuc2Vzc2lvbi5saW5lV2lkZ2V0c1tlLnJvd107dCYmKGUuJG9sZFdpZGdldD10LHQuZWwmJnQuZWwucGFyZW50Tm9kZSYmKHQuZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0LmVsKSx0Ll9pbkRvY3VtZW50PSExKSksdGhpcy5zZXNzaW9uLmxpbmVXaWRnZXRzW2Uucm93XT1lLGUuc2Vzc2lvbj10aGlzLnNlc3Npb247dmFyIG49dGhpcy5lZGl0b3IucmVuZGVyZXI7ZS5odG1sJiYhZS5lbCYmKGUuZWw9aS5jcmVhdGVFbGVtZW50KCJkaXYiKSxlLmVsLmlubmVySFRNTD1lLmh0bWwpLGUuZWwmJihpLmFkZENzc0NsYXNzKGUuZWwsImFjZV9saW5lV2lkZ2V0Q29udGFpbmVyIiksZS5lbC5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGUuZWwuc3R5bGUuekluZGV4PTUsbi5jb250YWluZXIuYXBwZW5kQ2hpbGQoZS5lbCksZS5faW5Eb2N1bWVudD0hMCksZS5jb3Zlckd1dHRlcnx8KGUuZWwuc3R5bGUuekluZGV4PTMpLGUucGl4ZWxIZWlnaHQ9PW51bGwmJihlLnBpeGVsSGVpZ2h0PWUuZWwub2Zmc2V0SGVpZ2h0KSxlLnJvd0NvdW50PT1udWxsJiYoZS5yb3dDb3VudD1lLnBpeGVsSGVpZ2h0L24ubGF5ZXJDb25maWcubGluZUhlaWdodCk7dmFyIHI9dGhpcy5zZXNzaW9uLmdldEZvbGRBdChlLnJvdywwKTtlLiRmb2xkPXI7aWYocil7dmFyIHM9dGhpcy5zZXNzaW9uLmxpbmVXaWRnZXRzO2Uucm93PT1yLmVuZC5yb3cmJiFzW3Iuc3RhcnQucm93XT9zW3Iuc3RhcnQucm93XT1lOmUuaGlkZGVuPSEwfXJldHVybiB0aGlzLnNlc3Npb24uX2VtaXQoImNoYW5nZUZvbGQiLHtkYXRhOntzdGFydDp7cm93OmUucm93fX19KSx0aGlzLiR1cGRhdGVSb3dzKCksdGhpcy5yZW5kZXJXaWRnZXRzKG51bGwsbiksdGhpcy5vbldpZGdldENoYW5nZWQoZSksZX0sdGhpcy5yZW1vdmVMaW5lV2lkZ2V0PWZ1bmN0aW9uKGUpe2UuX2luRG9jdW1lbnQ9ITEsZS5zZXNzaW9uPW51bGwsZS5lbCYmZS5lbC5wYXJlbnROb2RlJiZlLmVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZS5lbCk7aWYoZS5lZGl0b3ImJmUuZWRpdG9yLmRlc3Ryb3kpdHJ5e2UuZWRpdG9yLmRlc3Ryb3koKX1jYXRjaCh0KXt9aWYodGhpcy5zZXNzaW9uLmxpbmVXaWRnZXRzKXt2YXIgbj10aGlzLnNlc3Npb24ubGluZVdpZGdldHNbZS5yb3ddO2lmKG49PWUpdGhpcy5zZXNzaW9uLmxpbmVXaWRnZXRzW2Uucm93XT1lLiRvbGRXaWRnZXQsZS4kb2xkV2lkZ2V0JiZ0aGlzLm9uV2lkZ2V0Q2hhbmdlZChlLiRvbGRXaWRnZXQpO2Vsc2Ugd2hpbGUobil7aWYobi4kb2xkV2lkZ2V0PT1lKXtuLiRvbGRXaWRnZXQ9ZS4kb2xkV2lkZ2V0O2JyZWFrfW49bi4kb2xkV2lkZ2V0fX10aGlzLnNlc3Npb24uX2VtaXQoImNoYW5nZUZvbGQiLHtkYXRhOntzdGFydDp7cm93OmUucm93fX19KSx0aGlzLiR1cGRhdGVSb3dzKCl9LHRoaXMuZ2V0V2lkZ2V0c0F0Um93PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuc2Vzc2lvbi5saW5lV2lkZ2V0cyxuPXQmJnRbZV0scj1bXTt3aGlsZShuKXIucHVzaChuKSxuPW4uJG9sZFdpZGdldDtyZXR1cm4gcn0sdGhpcy5vbldpZGdldENoYW5nZWQ9ZnVuY3Rpb24oZSl7dGhpcy5zZXNzaW9uLl9jaGFuZ2VkV2lkZ2V0cy5wdXNoKGUpLHRoaXMuZWRpdG9yJiZ0aGlzLmVkaXRvci5yZW5kZXJlci51cGRhdGVGdWxsKCl9LHRoaXMubWVhc3VyZVdpZGdldHM9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLnNlc3Npb24uX2NoYW5nZWRXaWRnZXRzLHI9dC5sYXllckNvbmZpZztpZighbnx8IW4ubGVuZ3RoKXJldHVybjt2YXIgaT1JbmZpbml0eTtmb3IodmFyIHM9MDtzPG4ubGVuZ3RoO3MrKyl7dmFyIG89bltzXTtpZighb3x8IW8uZWwpY29udGludWU7aWYoby5zZXNzaW9uIT10aGlzLnNlc3Npb24pY29udGludWU7aWYoIW8uX2luRG9jdW1lbnQpe2lmKHRoaXMuc2Vzc2lvbi5saW5lV2lkZ2V0c1tvLnJvd10hPW8pY29udGludWU7by5faW5Eb2N1bWVudD0hMCx0LmNvbnRhaW5lci5hcHBlbmRDaGlsZChvLmVsKX1vLmg9by5lbC5vZmZzZXRIZWlnaHQsby5maXhlZFdpZHRofHwoby53PW8uZWwub2Zmc2V0V2lkdGgsby5zY3JlZW5XaWR0aD1NYXRoLmNlaWwoby53L3IuY2hhcmFjdGVyV2lkdGgpKTt2YXIgdT1vLmgvci5saW5lSGVpZ2h0O28uY292ZXJMaW5lJiYodS09dGhpcy5zZXNzaW9uLmdldFJvd0xpbmVDb3VudChvLnJvdyksdTwwJiYodT0wKSksby5yb3dDb3VudCE9dSYmKG8ucm93Q291bnQ9dSxvLnJvdzxpJiYoaT1vLnJvdykpfWkhPUluZmluaXR5JiYodGhpcy5zZXNzaW9uLl9lbWl0KCJjaGFuZ2VGb2xkIix7ZGF0YTp7c3RhcnQ6e3JvdzppfX19KSx0aGlzLnNlc3Npb24ubGluZVdpZGdldFdpZHRoPW51bGwpLHRoaXMuc2Vzc2lvbi5fY2hhbmdlZFdpZGdldHM9W119LHRoaXMucmVuZGVyV2lkZ2V0cz1mdW5jdGlvbihlLHQpe3ZhciBuPXQubGF5ZXJDb25maWcscj10aGlzLnNlc3Npb24ubGluZVdpZGdldHM7aWYoIXIpcmV0dXJuO3ZhciBpPU1hdGgubWluKHRoaXMuZmlyc3RSb3csbi5maXJzdFJvdykscz1NYXRoLm1heCh0aGlzLmxhc3RSb3csbi5sYXN0Um93LHIubGVuZ3RoKTt3aGlsZShpPjAmJiFyW2ldKWktLTt0aGlzLmZpcnN0Um93PW4uZmlyc3RSb3csdGhpcy5sYXN0Um93PW4ubGFzdFJvdyx0LiRjdXJzb3JMYXllci5jb25maWc9bjtmb3IodmFyIG89aTtvPD1zO28rKyl7dmFyIHU9cltvXTtpZighdXx8IXUuZWwpY29udGludWU7aWYodS5oaWRkZW4pe3UuZWwuc3R5bGUudG9wPS0xMDAtKHUucGl4ZWxIZWlnaHR8fDApKyJweCI7Y29udGludWV9dS5faW5Eb2N1bWVudHx8KHUuX2luRG9jdW1lbnQ9ITAsdC5jb250YWluZXIuYXBwZW5kQ2hpbGQodS5lbCkpO3ZhciBhPXQuJGN1cnNvckxheWVyLmdldFBpeGVsUG9zaXRpb24oe3JvdzpvLGNvbHVtbjowfSwhMCkudG9wO3UuY292ZXJMaW5lfHwoYSs9bi5saW5lSGVpZ2h0KnRoaXMuc2Vzc2lvbi5nZXRSb3dMaW5lQ291bnQodS5yb3cpKSx1LmVsLnN0eWxlLnRvcD1hLW4ub2Zmc2V0KyJweCI7dmFyIGY9dS5jb3Zlckd1dHRlcj8wOnQuZ3V0dGVyV2lkdGg7dS5maXhlZFdpZHRofHwoZi09dC5zY3JvbGxMZWZ0KSx1LmVsLnN0eWxlLmxlZnQ9ZisicHgiLHUuZnVsbFdpZHRoJiZ1LnNjcmVlbldpZHRoJiYodS5lbC5zdHlsZS5taW5XaWR0aD1uLndpZHRoKzIqbi5wYWRkaW5nKyJweCIpLHUuZml4ZWRXaWR0aD91LmVsLnN0eWxlLnJpZ2h0PXQuc2Nyb2xsQmFyLmdldFdpZHRoKCkrInB4Ijp1LmVsLnN0eWxlLnJpZ2h0PSIifX19KS5jYWxsKG8ucHJvdG90eXBlKSx0LkxpbmVXaWRnZXRzPW99KSxhY2UuZGVmaW5lKCJhY2UvZXh0L2Vycm9yX21hcmtlciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saW5lX3dpZGdldHMiLCJhY2UvbGliL2RvbSIsImFjZS9yYW5nZSJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbyhlLHQsbil7dmFyIHI9MCxpPWUubGVuZ3RoLTE7d2hpbGUocjw9aSl7dmFyIHM9citpPj4xLG89bih0LGVbc10pO2lmKG8+MClyPXMrMTtlbHNle2lmKCEobzwwKSlyZXR1cm4gcztpPXMtMX19cmV0dXJuLShyKzEpfWZ1bmN0aW9uIHUoZSx0LG4pe3ZhciByPWUuZ2V0QW5ub3RhdGlvbnMoKS5zb3J0KHMuY29tcGFyZVBvaW50cyk7aWYoIXIubGVuZ3RoKXJldHVybjt2YXIgaT1vKHIse3Jvdzp0LGNvbHVtbjotMX0scy5jb21wYXJlUG9pbnRzKTtpPDAmJihpPS1pLTEpLGk+PXIubGVuZ3RoP2k9bj4wPzA6ci5sZW5ndGgtMTppPT09MCYmbjwwJiYoaT1yLmxlbmd0aC0xKTt2YXIgdT1yW2ldO2lmKCF1fHwhbilyZXR1cm47aWYodS5yb3c9PT10KXtkbyB1PXJbaSs9bl07d2hpbGUodSYmdS5yb3c9PT10KTtpZighdSlyZXR1cm4gci5zbGljZSgpfXZhciBhPVtdO3Q9dS5yb3c7ZG8gYVtuPDA/InVuc2hpZnQiOiJwdXNoIl0odSksdT1yW2krPW5dO3doaWxlKHUmJnUucm93PT10KTtyZXR1cm4gYS5sZW5ndGgmJmF9dmFyIHI9ZSgiLi4vbGluZV93aWRnZXRzIikuTGluZVdpZGdldHMsaT1lKCIuLi9saWIvZG9tIikscz1lKCIuLi9yYW5nZSIpLlJhbmdlO3Quc2hvd0Vycm9yTWFya2VyPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5zZXNzaW9uO24ud2lkZ2V0TWFuYWdlcnx8KG4ud2lkZ2V0TWFuYWdlcj1uZXcgcihuKSxuLndpZGdldE1hbmFnZXIuYXR0YWNoKGUpKTt2YXIgcz1lLmdldEN1cnNvclBvc2l0aW9uKCksbz1zLnJvdyxhPW4ud2lkZ2V0TWFuYWdlci5nZXRXaWRnZXRzQXRSb3cobykuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnR5cGU9PSJlcnJvck1hcmtlciJ9KVswXTthP2EuZGVzdHJveSgpOm8tPXQ7dmFyIGY9dShuLG8sdCksbDtpZihmKXt2YXIgYz1mWzBdO3MuY29sdW1uPShjLnBvcyYmdHlwZW9mIGMuY29sdW1uIT0ibnVtYmVyIj9jLnBvcy5zYzpjLmNvbHVtbil8fDAscy5yb3c9Yy5yb3csbD1lLnJlbmRlcmVyLiRndXR0ZXJMYXllci4kYW5ub3RhdGlvbnNbcy5yb3ddfWVsc2V7aWYoYSlyZXR1cm47bD17dGV4dDpbIkxvb2tzIGdvb2QhIl0sY2xhc3NOYW1lOiJhY2Vfb2sifX1lLnNlc3Npb24udW5mb2xkKHMucm93KSxlLnNlbGVjdGlvbi5tb3ZlVG9Qb3NpdGlvbihzKTt2YXIgaD17cm93OnMucm93LGZpeGVkV2lkdGg6ITAsY292ZXJHdXR0ZXI6ITAsZWw6aS5jcmVhdGVFbGVtZW50KCJkaXYiKSx0eXBlOiJlcnJvck1hcmtlciJ9LHA9aC5lbC5hcHBlbmRDaGlsZChpLmNyZWF0ZUVsZW1lbnQoImRpdiIpKSxkPWguZWwuYXBwZW5kQ2hpbGQoaS5jcmVhdGVFbGVtZW50KCJkaXYiKSk7ZC5jbGFzc05hbWU9ImVycm9yX3dpZGdldF9hcnJvdyAiK2wuY2xhc3NOYW1lO3ZhciB2PWUucmVuZGVyZXIuJGN1cnNvckxheWVyLmdldFBpeGVsUG9zaXRpb24ocykubGVmdDtkLnN0eWxlLmxlZnQ9ditlLnJlbmRlcmVyLmd1dHRlcldpZHRoLTUrInB4IixoLmVsLmNsYXNzTmFtZT0iZXJyb3Jfd2lkZ2V0X3dyYXBwZXIiLHAuY2xhc3NOYW1lPSJlcnJvcl93aWRnZXQgIitsLmNsYXNzTmFtZSxwLmlubmVySFRNTD1sLnRleHQuam9pbigiPGJyPiIpLHAuYXBwZW5kQ2hpbGQoaS5jcmVhdGVFbGVtZW50KCJkaXYiKSk7dmFyIG09ZnVuY3Rpb24oZSx0LG4pe2lmKHQ9PT0wJiYobj09PSJlc2MifHxuPT09InJldHVybiIpKXJldHVybiBoLmRlc3Ryb3koKSx7Y29tbWFuZDoibnVsbCJ9fTtoLmRlc3Ryb3k9ZnVuY3Rpb24oKXtpZihlLiRtb3VzZUhhbmRsZXIuaXNNb3VzZVByZXNzZWQpcmV0dXJuO2Uua2V5QmluZGluZy5yZW1vdmVLZXlib2FyZEhhbmRsZXIobSksbi53aWRnZXRNYW5hZ2VyLnJlbW92ZUxpbmVXaWRnZXQoaCksZS5vZmYoImNoYW5nZVNlbGVjdGlvbiIsaC5kZXN0cm95KSxlLm9mZigiY2hhbmdlU2Vzc2lvbiIsaC5kZXN0cm95KSxlLm9mZigibW91c2V1cCIsaC5kZXN0cm95KSxlLm9mZigiY2hhbmdlIixoLmRlc3Ryb3kpfSxlLmtleUJpbmRpbmcuYWRkS2V5Ym9hcmRIYW5kbGVyKG0pLGUub24oImNoYW5nZVNlbGVjdGlvbiIsaC5kZXN0cm95KSxlLm9uKCJjaGFuZ2VTZXNzaW9uIixoLmRlc3Ryb3kpLGUub24oIm1vdXNldXAiLGguZGVzdHJveSksZS5vbigiY2hhbmdlIixoLmRlc3Ryb3kpLGUuc2Vzc2lvbi53aWRnZXRNYW5hZ2VyLmFkZExpbmVXaWRnZXQoaCksaC5lbC5vbm1vdXNlZG93bj1lLmZvY3VzLmJpbmQoZSksZS5yZW5kZXJlci5zY3JvbGxDdXJzb3JJbnRvVmlldyhudWxsLC41LHtib3R0b206aC5lbC5vZmZzZXRIZWlnaHR9KX0saS5pbXBvcnRDc3NTdHJpbmcoIiAgICAuZXJyb3Jfd2lkZ2V0X3dyYXBwZXIgeyAgICAgICAgYmFja2dyb3VuZDogaW5oZXJpdDsgICAgICAgIGNvbG9yOiBpbmhlcml0OyAgICAgICAgYm9yZGVyOm5vbmUgICAgfSAgICAuZXJyb3Jfd2lkZ2V0IHsgICAgICAgIGJvcmRlci10b3A6IHNvbGlkIDJweDsgICAgICAgIGJvcmRlci1ib3R0b206IHNvbGlkIDJweDsgICAgICAgIG1hcmdpbjogNXB4IDA7ICAgICAgICBwYWRkaW5nOiAxMHB4IDQwcHg7ICAgICAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7ICAgIH0gICAgLmVycm9yX3dpZGdldC5hY2VfZXJyb3IsIC5lcnJvcl93aWRnZXRfYXJyb3cuYWNlX2Vycm9yeyAgICAgICAgYm9yZGVyLWNvbG9yOiAjZmY1YTVhICAgIH0gICAgLmVycm9yX3dpZGdldC5hY2Vfd2FybmluZywgLmVycm9yX3dpZGdldF9hcnJvdy5hY2Vfd2FybmluZ3sgICAgICAgIGJvcmRlci1jb2xvcjogI0YxRDgxNyAgICB9ICAgIC5lcnJvcl93aWRnZXQuYWNlX2luZm8sIC5lcnJvcl93aWRnZXRfYXJyb3cuYWNlX2luZm97ICAgICAgICBib3JkZXItY29sb3I6ICM1YTVhNWEgICAgfSAgICAuZXJyb3Jfd2lkZ2V0LmFjZV9vaywgLmVycm9yX3dpZGdldF9hcnJvdy5hY2Vfb2t7ICAgICAgICBib3JkZXItY29sb3I6ICM1YWFhNWEgICAgfSAgICAuZXJyb3Jfd2lkZ2V0X2Fycm93IHsgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsgICAgICAgIGJvcmRlcjogc29saWQgNXB4OyAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogdHJhbnNwYXJlbnQhaW1wb3J0YW50OyAgICAgICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudCFpbXBvcnRhbnQ7ICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogdHJhbnNwYXJlbnQhaW1wb3J0YW50OyAgICAgICAgdG9wOiAtNXB4OyAgICB9IiwiIil9KSxhY2UuZGVmaW5lKCJhY2UvYWNlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9maXhvbGRicm93c2VycyIsImFjZS9saWIvZG9tIiwiYWNlL2xpYi9ldmVudCIsImFjZS9yYW5nZSIsImFjZS9lZGl0b3IiLCJhY2UvZWRpdF9zZXNzaW9uIiwiYWNlL3VuZG9tYW5hZ2VyIiwiYWNlL3ZpcnR1YWxfcmVuZGVyZXIiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLCJhY2Uva2V5Ym9hcmQvaGFzaF9oYW5kbGVyIiwiYWNlL3BsYWNlaG9sZGVyIiwiYWNlL211bHRpX3NlbGVjdCIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIiwiYWNlL3RoZW1lL3RleHRtYXRlIiwiYWNlL2V4dC9lcnJvcl9tYXJrZXIiLCJhY2UvY29uZmlnIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlKCIuL2xpYi9maXhvbGRicm93c2VycyIpO3ZhciByPWUoIi4vbGliL2RvbSIpLGk9ZSgiLi9saWIvZXZlbnQiKSxzPWUoIi4vcmFuZ2UiKS5SYW5nZSxvPWUoIi4vZWRpdG9yIikuRWRpdG9yLHU9ZSgiLi9lZGl0X3Nlc3Npb24iKS5FZGl0U2Vzc2lvbixhPWUoIi4vdW5kb21hbmFnZXIiKS5VbmRvTWFuYWdlcixmPWUoIi4vdmlydHVhbF9yZW5kZXJlciIpLlZpcnR1YWxSZW5kZXJlcjtlKCIuL3dvcmtlci93b3JrZXJfY2xpZW50IiksZSgiLi9rZXlib2FyZC9oYXNoX2hhbmRsZXIiKSxlKCIuL3BsYWNlaG9sZGVyIiksZSgiLi9tdWx0aV9zZWxlY3QiKSxlKCIuL21vZGUvZm9sZGluZy9mb2xkX21vZGUiKSxlKCIuL3RoZW1lL3RleHRtYXRlIiksZSgiLi9leHQvZXJyb3JfbWFya2VyIiksdC5jb25maWc9ZSgiLi9jb25maWciKSx0LnJlcXVpcmU9ZSx0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiYodC5kZWZpbmU9ZGVmaW5lKSx0LmVkaXQ9ZnVuY3Rpb24oZSxuKXtpZih0eXBlb2YgZT09InN0cmluZyIpe3ZhciBzPWU7ZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChzKTtpZighZSl0aHJvdyBuZXcgRXJyb3IoImFjZS5lZGl0IGNhbid0IGZpbmQgZGl2ICMiK3MpfWlmKGUmJmUuZW52JiZlLmVudi5lZGl0b3IgaW5zdGFuY2VvZiBvKXJldHVybiBlLmVudi5lZGl0b3I7dmFyIHU9IiI7aWYoZSYmL2lucHV0fHRleHRhcmVhL2kudGVzdChlLnRhZ05hbWUpKXt2YXIgYT1lO3U9YS52YWx1ZSxlPXIuY3JlYXRlRWxlbWVudCgicHJlIiksYS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChlLGEpfWVsc2UgZSYmKHU9ZS50ZXh0Q29udGVudCxlLmlubmVySFRNTD0iIik7dmFyIGw9dC5jcmVhdGVFZGl0U2Vzc2lvbih1KSxjPW5ldyBvKG5ldyBmKGUpLGwsbiksaD17ZG9jdW1lbnQ6bCxlZGl0b3I6YyxvblJlc2l6ZTpjLnJlc2l6ZS5iaW5kKGMsbnVsbCl9O3JldHVybiBhJiYoaC50ZXh0YXJlYT1hKSxpLmFkZExpc3RlbmVyKHdpbmRvdywicmVzaXplIixoLm9uUmVzaXplKSxjLm9uKCJkZXN0cm95IixmdW5jdGlvbigpe2kucmVtb3ZlTGlzdGVuZXIod2luZG93LCJyZXNpemUiLGgub25SZXNpemUpLGguZWRpdG9yLmNvbnRhaW5lci5lbnY9bnVsbH0pLGMuY29udGFpbmVyLmVudj1jLmVudj1oLGN9LHQuY3JlYXRlRWRpdFNlc3Npb249ZnVuY3Rpb24oZSx0KXt2YXIgbj1uZXcgdShlLHQpO3JldHVybiBuLnNldFVuZG9NYW5hZ2VyKG5ldyBhKSxufSx0LlJhbmdlPXMsdC5FZGl0b3I9byx0LkVkaXRTZXNzaW9uPXUsdC5VbmRvTWFuYWdlcj1hLHQuVmlydHVhbFJlbmRlcmVyPWYsdC52ZXJzaW9uPXQuY29uZmlnLnZlcnNpb259KTsgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBhY2UucmVxdWlyZShbImFjZS9hY2UiXSwgZnVuY3Rpb24oYSkgewogICAgICAgICAgICAgICAgICAgIGlmIChhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGEuY29uZmlnLmluaXQodHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGEuZGVmaW5lID0gYWNlLmRlZmluZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKCF3aW5kb3cuYWNlKQogICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuYWNlID0gYTsKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gYSkgaWYgKGEuaGFzT3duUHJvcGVydHkoa2V5KSkKICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmFjZVtrZXldID0gYVtrZXldOwogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5hY2VbImRlZmF1bHQiXSA9IHdpbmRvdy5hY2U7CiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gd2luZG93LmFjZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSkoKTsKfTsKCtC80YPRgNC+0Lwu0LfQsNCz0YDRg9C30LjRgtGM0KDQtdC20LjQvEFDRUpTID0gZnVuY3Rpb24oKQp7CiAgICAvLyDQoNC10LbQuNC8IEphdmFTY3JpcHQg0LTQu9GPIEFDRS4KICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hamF4b3JnL2FjZS1idWlsZHMvYmxvYi9tYXN0ZXIvc3JjLW1pbi1ub2NvbmZsaWN0L21vZGUtamF2YXNjcmlwdC5qcwphY2UuZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuLi9saWIvb29wIiksaT1lKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLHM9ZnVuY3Rpb24oKXt0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoiY29tbWVudC5kb2MudGFnIixyZWdleDoiQFtcXHdcXGRfXSsifSxzLmdldFRhZ1J1bGUoKSx7ZGVmYXVsdFRva2VuOiJjb21tZW50LmRvYyIsY2FzZUluc2Vuc2l0aXZlOiEwfV19fTtyLmluaGVyaXRzKHMsaSkscy5nZXRUYWdSdWxlPWZ1bmN0aW9uKGUpe3JldHVybnt0b2tlbjoiY29tbWVudC5kb2MudGFnLnN0b3JhZ2UudHlwZSIscmVnZXg6IlxcYig/OlRPRE98RklYTUV8WFhYfEhBQ0spXFxiIn19LHMuZ2V0U3RhcnRSdWxlPWZ1bmN0aW9uKGUpe3JldHVybnt0b2tlbjoiY29tbWVudC5kb2MiLHJlZ2V4OiJcXC9cXCooPz1cXCopIixuZXh0OmV9fSxzLmdldEVuZFJ1bGU9ZnVuY3Rpb24oZSl7cmV0dXJue3Rva2VuOiJjb21tZW50LmRvYyIscmVnZXg6IlxcKlxcLyIsbmV4dDplfX0sdC5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM9c30pLGFjZS5kZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYSgpe3ZhciBlPW8ucmVwbGFjZSgiXFxkIiwiXFxkXFwtIiksdD17b25NYXRjaDpmdW5jdGlvbihlLHQsbil7dmFyIHI9ZS5jaGFyQXQoMSk9PSIvIj8yOjE7aWYocj09MSl0IT10aGlzLm5leHRTdGF0ZT9uLnVuc2hpZnQodGhpcy5uZXh0LHRoaXMubmV4dFN0YXRlLDApOm4udW5zaGlmdCh0aGlzLm5leHQpLG5bMl0rKztlbHNlIGlmKHI9PTImJnQ9PXRoaXMubmV4dFN0YXRlKXtuWzFdLS07aWYoIW5bMV18fG5bMV08MCluLnNoaWZ0KCksbi5zaGlmdCgpfXJldHVyblt7dHlwZToibWV0YS50YWcucHVuY3R1YXRpb24uIisocj09MT8iIjoiZW5kLSIpKyJ0YWctb3Blbi54bWwiLHZhbHVlOmUuc2xpY2UoMCxyKX0se3R5cGU6Im1ldGEudGFnLnRhZy1uYW1lLnhtbCIsdmFsdWU6ZS5zdWJzdHIocil9XX0scmVnZXg6IjwvPyIrZSsiIixuZXh0OiJqc3hBdHRyaWJ1dGVzIixuZXh0U3RhdGU6ImpzeCJ9O3RoaXMuJHJ1bGVzLnN0YXJ0LnVuc2hpZnQodCk7dmFyIG49e3JlZ2V4OiJ7Iix0b2tlbjoicGFyZW4ucXVhc2kuc3RhcnQiLHB1c2g6InN0YXJ0In07dGhpcy4kcnVsZXMuanN4PVtuLHQse2luY2x1ZGU6InJlZmVyZW5jZSJ9LHtkZWZhdWx0VG9rZW46InN0cmluZyJ9XSx0aGlzLiRydWxlcy5qc3hBdHRyaWJ1dGVzPVt7dG9rZW46Im1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1jbG9zZS54bWwiLHJlZ2V4OiIvPz4iLG9uTWF0Y2g6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PT1uWzBdJiZuLnNoaWZ0KCksZS5sZW5ndGg9PTImJihuWzBdPT10aGlzLm5leHRTdGF0ZSYmblsxXS0tLCghblsxXXx8blsxXTwwKSYmbi5zcGxpY2UoMCwyKSksdGhpcy5uZXh0PW5bMF18fCJzdGFydCIsW3t0eXBlOnRoaXMudG9rZW4sdmFsdWU6ZX1dfSxuZXh0U3RhdGU6ImpzeCJ9LG4sZigianN4QXR0cmlidXRlcyIpLHt0b2tlbjoiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnhtbCIscmVnZXg6ZX0se3Rva2VuOiJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIixyZWdleDoiPSJ9LHt0b2tlbjoidGV4dC50YWctd2hpdGVzcGFjZS54bWwiLHJlZ2V4OiJcXHMrIn0se3Rva2VuOiJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIscmVnZXg6IiciLHN0YXRlTmFtZToianN4X2F0dHJfcSIscHVzaDpbe3Rva2VuOiJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIscmVnZXg6IiciLG5leHQ6InBvcCJ9LHtpbmNsdWRlOiJyZWZlcmVuY2UifSx7ZGVmYXVsdFRva2VuOiJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9XX0se3Rva2VuOiJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIscmVnZXg6JyInLHN0YXRlTmFtZToianN4X2F0dHJfcXEiLHB1c2g6W3t0b2tlbjoic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLHJlZ2V4OiciJyxuZXh0OiJwb3AifSx7aW5jbHVkZToicmVmZXJlbmNlIn0se2RlZmF1bHRUb2tlbjoic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifV19LHRdLHRoaXMuJHJ1bGVzLnJlZmVyZW5jZT1be3Rva2VuOiJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUucmVmZXJlbmNlLnhtbCIscmVnZXg6Iig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIn1dfWZ1bmN0aW9uIGYoZSl7cmV0dXJuW3t0b2tlbjoiY29tbWVudCIscmVnZXg6L1wvXCovLG5leHQ6W2kuZ2V0VGFnUnVsZSgpLHt0b2tlbjoiY29tbWVudCIscmVnZXg6IlxcKlxcLyIsbmV4dDplfHwicG9wIn0se2RlZmF1bHRUb2tlbjoiY29tbWVudCIsY2FzZUluc2Vuc2l0aXZlOiEwfV19LHt0b2tlbjoiY29tbWVudCIscmVnZXg6IlxcL1xcLyIsbmV4dDpbaS5nZXRUYWdSdWxlKCkse3Rva2VuOiJjb21tZW50IixyZWdleDoiJHxeIixuZXh0OmV8fCJwb3AifSx7ZGVmYXVsdFRva2VuOiJjb21tZW50IixjYXNlSW5zZW5zaXRpdmU6ITB9XX1dfXZhciByPWUoIi4uL2xpYi9vb3AiKSxpPWUoIi4vZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIikuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLHM9ZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxvPSJbYS16QS1aXFwkX1x1MDBhMS1cdWZmZmZdW2EtekEtWlxcZFxcJF9cdTAwYTEtXHVmZmZmXSoiLHU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsidmFyaWFibGUubGFuZ3VhZ2UiOiJBcnJheXxCb29sZWFufERhdGV8RnVuY3Rpb258SXRlcmF0b3J8TnVtYmVyfE9iamVjdHxSZWdFeHB8U3RyaW5nfFByb3h5fE5hbWVzcGFjZXxRTmFtZXxYTUx8WE1MTGlzdHxBcnJheUJ1ZmZlcnxGbG9hdDMyQXJyYXl8RmxvYXQ2NEFycmF5fEludDE2QXJyYXl8SW50MzJBcnJheXxJbnQ4QXJyYXl8VWludDE2QXJyYXl8VWludDMyQXJyYXl8VWludDhBcnJheXxVaW50OENsYW1wZWRBcnJheXxFcnJvcnxFdmFsRXJyb3J8SW50ZXJuYWxFcnJvcnxSYW5nZUVycm9yfFJlZmVyZW5jZUVycm9yfFN0b3BJdGVyYXRpb258U3ludGF4RXJyb3J8VHlwZUVycm9yfFVSSUVycm9yfGRlY29kZVVSSXxkZWNvZGVVUklDb21wb25lbnR8ZW5jb2RlVVJJfGVuY29kZVVSSUNvbXBvbmVudHxldmFsfGlzRmluaXRlfGlzTmFOfHBhcnNlRmxvYXR8cGFyc2VJbnR8SlNPTnxNYXRofHRoaXN8YXJndW1lbnRzfHByb3RvdHlwZXx3aW5kb3d8ZG9jdW1lbnQiLGtleXdvcmQ6ImNvbnN0fHlpZWxkfGltcG9ydHxnZXR8c2V0fGFzeW5jfGF3YWl0fGJyZWFrfGNhc2V8Y2F0Y2h8Y29udGludWV8ZGVmYXVsdHxkZWxldGV8ZG98ZWxzZXxmaW5hbGx5fGZvcnxmdW5jdGlvbnxpZnxpbnxvZnxpbnN0YW5jZW9mfG5ld3xyZXR1cm58c3dpdGNofHRocm93fHRyeXx0eXBlb2Z8bGV0fHZhcnx3aGlsZXx3aXRofGRlYnVnZ2VyfF9fcGFyZW50X198X19jb3VudF9ffGVzY2FwZXx1bmVzY2FwZXx3aXRofF9fcHJvdG9fX3xjbGFzc3xlbnVtfGV4dGVuZHN8c3VwZXJ8ZXhwb3J0fGltcGxlbWVudHN8cHJpdmF0ZXxwdWJsaWN8aW50ZXJmYWNlfHBhY2thZ2V8cHJvdGVjdGVkfHN0YXRpYyIsInN0b3JhZ2UudHlwZSI6ImNvbnN0fGxldHx2YXJ8ZnVuY3Rpb24iLCJjb25zdGFudC5sYW5ndWFnZSI6Im51bGx8SW5maW5pdHl8TmFOfHVuZGVmaW5lZCIsInN1cHBvcnQuZnVuY3Rpb24iOiJhbGVydCIsImNvbnN0YW50Lmxhbmd1YWdlLmJvb2xlYW4iOiJ0cnVlfGZhbHNlIn0sImlkZW50aWZpZXIiKSxuPSJjYXNlfGRvfGVsc2V8ZmluYWxseXxpbnxpbnN0YW5jZW9mfHJldHVybnx0aHJvd3x0cnl8dHlwZW9mfHlpZWxkfHZvaWQiLHI9IlxcXFwoPzp4WzAtOWEtZkEtRl17Mn18dVswLTlhLWZBLUZdezR9fHV7WzAtOWEtZkEtRl17MSw2fX18WzAtMl1bMC03XXswLDJ9fDNbMC03XVswLTddP3xbNC03XVswLTddP3wuKSI7dGhpcy4kcnVsZXM9e25vX3JlZ2V4OltpLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksZigibm9fcmVnZXgiKSx7dG9rZW46InN0cmluZyIscmVnZXg6IicoPz0uKSIsbmV4dDoicXN0cmluZyJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDonIig/PS4pJyxuZXh0OiJxcXN0cmluZyJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6LzAoPzpbeFhdWzAtOWEtZkEtRl0rfFtvT11bMC03XSt8W2JCXVswMV0rKVxiL30se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDovKD86XGRcZCooPzpcLlxkKik/fFwuXGQrKSg/OltlRV1bKy1dP1xkK1xiKT8vfSx7dG9rZW46WyJzdG9yYWdlLnR5cGUiLCJwdW5jdHVhdGlvbi5vcGVyYXRvciIsInN1cHBvcnQuZnVuY3Rpb24iLCJwdW5jdHVhdGlvbi5vcGVyYXRvciIsImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwidGV4dCIsImtleXdvcmQub3BlcmF0b3IiXSxyZWdleDoiKCIrbysiKShcXC4pKHByb3RvdHlwZSkoXFwuKSgiK28rIikoXFxzKikoPSkiLG5leHQ6ImZ1bmN0aW9uX2FyZ3VtZW50cyJ9LHt0b2tlbjpbInN0b3JhZ2UudHlwZSIsInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCJ0ZXh0Iiwia2V5d29yZC5vcGVyYXRvciIsInRleHQiLCJzdG9yYWdlLnR5cGUiLCJ0ZXh0IiwicGFyZW4ubHBhcmVuIl0scmVnZXg6IigiK28rIikoXFwuKSgiK28rIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLG5leHQ6ImZ1bmN0aW9uX2FyZ3VtZW50cyJ9LHt0b2tlbjpbImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwidGV4dCIsImtleXdvcmQub3BlcmF0b3IiLCJ0ZXh0Iiwic3RvcmFnZS50eXBlIiwidGV4dCIsInBhcmVuLmxwYXJlbiJdLHJlZ2V4OiIoIitvKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIixuZXh0OiJmdW5jdGlvbl9hcmd1bWVudHMifSx7dG9rZW46WyJzdG9yYWdlLnR5cGUiLCJwdW5jdHVhdGlvbi5vcGVyYXRvciIsImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwidGV4dCIsImtleXdvcmQub3BlcmF0b3IiLCJ0ZXh0Iiwic3RvcmFnZS50eXBlIiwidGV4dCIsImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwidGV4dCIsInBhcmVuLmxwYXJlbiJdLHJlZ2V4OiIoIitvKyIpKFxcLikoIitvKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMrKShcXHcrKShcXHMqKShcXCgpIixuZXh0OiJmdW5jdGlvbl9hcmd1bWVudHMifSx7dG9rZW46WyJzdG9yYWdlLnR5cGUiLCJ0ZXh0IiwiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCJ0ZXh0IiwicGFyZW4ubHBhcmVuIl0scmVnZXg6IihmdW5jdGlvbikoXFxzKykoIitvKyIpKFxccyopKFxcKCkiLG5leHQ6ImZ1bmN0aW9uX2FyZ3VtZW50cyJ9LHt0b2tlbjpbImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwidGV4dCIsInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwidGV4dCIsInN0b3JhZ2UudHlwZSIsInRleHQiLCJwYXJlbi5scGFyZW4iXSxyZWdleDoiKCIrbysiKShcXHMqKSg6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsbmV4dDoiZnVuY3Rpb25fYXJndW1lbnRzIn0se3Rva2VuOlsidGV4dCIsInRleHQiLCJzdG9yYWdlLnR5cGUiLCJ0ZXh0IiwicGFyZW4ubHBhcmVuIl0scmVnZXg6Iig6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsbmV4dDoiZnVuY3Rpb25fYXJndW1lbnRzIn0se3Rva2VuOiJrZXl3b3JkIixyZWdleDoiZnJvbSg/PVxccyooJ3xcIikpIn0se3Rva2VuOiJrZXl3b3JkIixyZWdleDoiKD86IituKyIpXFxiIixuZXh0OiJzdGFydCJ9LHt0b2tlbjpbInN1cHBvcnQuY29uc3RhbnQiXSxyZWdleDovdGhhdFxiL30se3Rva2VuOlsic3RvcmFnZS50eXBlIiwicHVuY3R1YXRpb24ub3BlcmF0b3IiLCJzdXBwb3J0LmZ1bmN0aW9uLmZpcmVidWciXSxyZWdleDovKGNvbnNvbGUpKFwuKSh3YXJufGluZm98bG9nfGVycm9yfHRpbWV8dHJhY2V8dGltZUVuZHxhc3NlcnQpXGIvfSx7dG9rZW46dCxyZWdleDpvfSx7dG9rZW46InB1bmN0dWF0aW9uLm9wZXJhdG9yIixyZWdleDovWy5dKD8hWy5dKS8sbmV4dDoicHJvcGVydHkifSx7dG9rZW46InN0b3JhZ2UudHlwZSIscmVnZXg6Lz0+LyxuZXh0OiJzdGFydCJ9LHt0b2tlbjoia2V5d29yZC5vcGVyYXRvciIscmVnZXg6Ly0tfFwrXCt8XC57M318PT09fD09fD18IT18IT09fDwrPT98Pis9P3whfCYmfFx8XHx8XD86fFshJCUmKitcLX5cL15dPT8vLG5leHQ6InN0YXJ0In0se3Rva2VuOiJwdW5jdHVhdGlvbi5vcGVyYXRvciIscmVnZXg6L1s/Oiw7Ll0vLG5leHQ6InN0YXJ0In0se3Rva2VuOiJwYXJlbi5scGFyZW4iLHJlZ2V4Oi9bXFsoe10vLG5leHQ6InN0YXJ0In0se3Rva2VuOiJwYXJlbi5ycGFyZW4iLHJlZ2V4Oi9bXF0pfV0vfSx7dG9rZW46ImNvbW1lbnQiLHJlZ2V4Oi9eIyEuKiQvfV0scHJvcGVydHk6W3t0b2tlbjoidGV4dCIscmVnZXg6IlxccysifSx7dG9rZW46WyJzdG9yYWdlLnR5cGUiLCJwdW5jdHVhdGlvbi5vcGVyYXRvciIsImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwidGV4dCIsImtleXdvcmQub3BlcmF0b3IiLCJ0ZXh0Iiwic3RvcmFnZS50eXBlIiwidGV4dCIsImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwidGV4dCIsInBhcmVuLmxwYXJlbiJdLHJlZ2V4OiIoIitvKyIpKFxcLikoIitvKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKSg/OihcXHMrKShcXHcrKSk/KFxccyopKFxcKCkiLG5leHQ6ImZ1bmN0aW9uX2FyZ3VtZW50cyJ9LHt0b2tlbjoicHVuY3R1YXRpb24ub3BlcmF0b3IiLHJlZ2V4Oi9bLl0oPyFbLl0pL30se3Rva2VuOiJzdXBwb3J0LmZ1bmN0aW9uIixyZWdleDovKHMoPzpoKD86aWZ0fG93KD86TW9kKD86ZWxlc3NEaWFsb2d8YWxEaWFsb2cpfEhlbHApKXxjcm9sbCg/Olh8QnkoPzpQYWdlc3xMaW5lcyk/fFl8VG8pP3x0KD86b3B8cmlrZSl8aSg/Om58emVUb0NvbnRlbnR8ZGViYXJ8Z25UZXh0KXxvcnR8dSg/OnB8Yig/OnN0cig/OmluZyk/KT8pfHBsaSg/OmNlfHQpfGUoPzpuZHx0KD86UmUoPzpzaXphYmxlfHF1ZXN0SGVhZGVyKXxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG8oPzp0S2V5c3x1cnMpfFllYXJ8Q3Vyc29yfFRpbWUoPzpvdXQpP3xJbnRlcnZhbHxaT3B0aW9uc3xEYXRlfFVUQyg/Ok0oPzppKD86bnV0ZXN8bGxpc2Vjb25kcyl8b250aCl8U2Vjb25kc3xIb3Vyc3xEYXRlfEZ1bGxZZWFyKXxGdWxsWWVhcnxBY3RpdmUpfGFyY2gpfHFydHxsaWNlfGF2ZVByZWZlcmVuY2VzfG1hbGwpfGgoPzpvbWV8YW5kbGVFdmVudCl8bmF2aWdhdGV8Yyg/Omhhcig/OkNvZGVBdHxBdCl8byg/OnN8big/OmNhdHx0ZXh0dWFsfGZpcm0pfG1waWxlKXxlaWx8bGVhcig/OlRpbWVvdXR8SW50ZXJ2YWwpP3xhKD86cHR1cmVFdmVudHN8bGwpfHJlYXRlKD86U3R5bGVTaGVldHxQb3B1cHxFdmVudE9iamVjdCkpfHQoPzpvKD86R01UU3RyaW5nfFMoPzp0cmluZ3xvdXJjZSl8VSg/OlRDU3RyaW5nfHBwZXJDYXNlKXxMbyg/OmNhbGVTdHJpbmd8d2VyQ2FzZSkpfGVzdHxhKD86bnxpbnQoPzpFbmFibGVkKT8pKXxpKD86cyg/Ok5hTnxGaW5pdGUpfG5kZXhPZnx0YWxpY3MpfGQoPzppc2FibGVFeHRlcm5hbENhcHR1cmV8dW1wfGV0YWNoRXZlbnQpfHUoPzpuKD86c2hpZnR8dGFpbnR8ZXNjYXBlfHdhdGNoKXxwZGF0ZUNvbW1hbmRzKXxqKD86b2lufGF2YUVuYWJsZWQpfHAoPzpvKD86cHx3KXx1c2h8bHVnaW5zLnJlZnJlc2h8YSg/OmRkaW5nc3xyc2UoPzpJbnR8RmxvYXQpPyl8cig/OmludHxvbXB0fGVmZXJlbmNlKSl8ZSg/OnNjYXBlfG5hYmxlRXh0ZXJuYWxDYXB0dXJlfHZhbHxsZW1lbnRGcm9tUG9pbnR8eCg/OnB8ZWMoPzpTY3JpcHR8Q29tbWFuZCk/KSl8dmFsdWVPZnxVVEN8cXVlcnlDb21tYW5kKD86U3RhdGV8SW5kZXRlcm18RW5hYmxlZHxWYWx1ZSl8Zig/OmkoPzpuZHxsZSg/Ok1vZGlmaWVkRGF0ZXxTaXplfENyZWF0ZWREYXRlfFVwZGF0ZWREYXRlKXx4ZWQpfG8oPzpudCg/OnNpemV8Y29sb3IpfHJ3YXJkKXxsb29yfHJvbUNoYXJDb2RlKXx3YXRjaHxsKD86aW5rfG8oPzphZHxnKXxhc3RJbmRleE9mKXxhKD86c2lufG5jaG9yfGNvc3x0KD86dGFjaEV2ZW50fG9ifGFuKD86Mik/KXxwcGx5fGxlcnR8Yig/OnN8b3J0KSl8cig/Om91KD86bmR8dGVFdmVudHMpfGUoPzpzaXplKD86Qnl8VG8pfGNhbGN8dHVyblZhbHVlfHBsYWNlfHZlcnNlfGwoPzpvYWR8ZWFzZSg/OkNhcHR1cmV8RXZlbnRzKSkpfGFuZG9tKXxnKD86b3xldCg/OlJlc3BvbnNlSGVhZGVyfE0oPzppKD86bnV0ZXN8bGxpc2Vjb25kcyl8b250aCl8U2UoPzpjb25kc3xsZWN0aW9uKXxIb3Vyc3xZZWFyfFRpbWUoPzp6b25lT2Zmc2V0KT98RGEoPzp5fHRlKXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGEoPzp5fHRlKXxGdWxsWWVhcil8RnVsbFllYXJ8QSg/OnR0ZW50aW9ufGxsUmVzcG9uc2VIZWFkZXJzKSkpfG0oPzppbnxvdmUoPzpCKD86eXxlbG93KXxUbyg/OkFic29sdXRlKT98QWJvdmUpfGVyZ2VBdHRyaWJ1dGVzfGEoPzp0Y2h8cmdpbnN8eCkpfGIoPzp0b2F8aWd8byg/OmxkfHJkZXJXaWR0aHMpfGxpbmt8YWNrKSlcYig/PVwoKS99LHt0b2tlbjoic3VwcG9ydC5mdW5jdGlvbi5kb20iLHJlZ2V4Oi8ocyg/OnViKD86c3RyaW5nRGF0YXxtaXQpfHBsaXRUZXh0fGUoPzp0KD86TmFtZWRJdGVtfEF0dHJpYnV0ZSg/Ok5vZGUpPyl8bGVjdCkpfGhhcyg/OkNoaWxkTm9kZXN8RmVhdHVyZSl8bmFtZWRJdGVtfGMoPzpsKD86aWNrfG8oPzpzZXxuZU5vZGUpKXxyZWF0ZSg/OkMoPzpvbW1lbnR8REFUQVNlY3Rpb258YXB0aW9uKXxUKD86SGVhZHxleHROb2RlfEZvb3QpfERvY3VtZW50RnJhZ21lbnR8UHJvY2Vzc2luZ0luc3RydWN0aW9ufEUoPzpudGl0eVJlZmVyZW5jZXxsZW1lbnQpfEF0dHJpYnV0ZSkpfHRhYkluZGV4fGkoPzpuc2VydCg/OlJvd3xCZWZvcmV8Q2VsbHxEYXRhKXx0ZW0pfG9wZW58ZGVsZXRlKD86Um93fEMoPzplbGx8YXB0aW9uKXxUKD86SGVhZHxGb290KXxEYXRhKXxmb2N1c3x3cml0ZSg/OmxuKT98YSg/OmRkfHBwZW5kKD86Q2hpbGR8RGF0YSkpfHJlKD86c2V0fHBsYWNlKD86Q2hpbGR8RGF0YSl8bW92ZSg/Ok5hbWVkSXRlbXxDaGlsZHxBdHRyaWJ1dGUoPzpOb2RlKT8pPyl8Z2V0KD86TmFtZWRJdGVtfEVsZW1lbnQoPzpzQnkoPzpOYW1lfFRhZ05hbWV8Q2xhc3NOYW1lKXxCeUlkKXxBdHRyaWJ1dGUoPzpOb2RlKT8pfGJsdXIpXGIoPz1cKCkvfSx7dG9rZW46InN1cHBvcnQuY29uc3RhbnQiLHJlZ2V4Oi8ocyg/OnlzdGVtTGFuZ3VhZ2V8Y3IoPzppcHRzfG9sbGJhcnN8ZWVuKD86WHxZfFRvcHxMZWZ0KSl8dCg/OnlsZSg/OlNoZWV0cyk/fGF0dXMoPzpUZXh0fGJhcik/KXxpYmxpbmcoPzpCZWxvd3xBYm92ZSl8b3VyY2V8dWZmaXhlc3xlKD86Y3VyaXR5KD86UG9saWN5KT98bCg/OmVjdGlvbnxmKSkpfGgoPzppc3Rvcnl8b3N0KD86bmFtZSk/fGFzKD86aHxGb2N1cykpfHl8WCg/Ok1MRG9jdW1lbnR8U0xEb2N1bWVudCl8big/OmV4dHxhbWUoPzpzcGFjZSg/OnN8VVJJKXxQcm9wKSl8TSg/OklOX1ZBTFVFfEFYX1ZBTFVFKXxjKD86aGFyYWN0ZXJTZXR8byg/Om4oPzpzdHJ1Y3Rvcnx0cm9sbGVycyl8b2tpZUVuYWJsZWR8bG9yRGVwdGh8bXAoPzpvbmVudHN8bGV0ZSkpfHVycmVudHxwdUNsYXNzfGwoPzppKD86cCg/OmJvYXJkRGF0YSk/fGVudEluZm9ybWF0aW9uKXxvc2VkfGFzc2VzKXxhbGxlKD86ZXxyKXxyeXB0byl8dCg/Om8oPzpvbGJhcnxwKXxleHQoPzpUcmFuc2Zvcm18SW5kZW50fERlY29yYXRpb258QWxpZ24pfGFncyl8U1FSVCg/OjFfMnwyKXxpKD86big/Om5lcig/OkhlaWdodHxXaWR0aCl8cHV0KXxkc3xnbm9yZUNhc2UpfHpJbmRleHxvKD86c2NwdXxuKD86cmVhZHlzdGF0ZWNoYW5nZXxMaW5lKXx1dGVyKD86SGVpZ2h0fFdpZHRoKXxwKD86c1Byb2ZpbGV8ZW5lcil8ZmZzY3JlZW5CdWZmZXJpbmcpfE5FR0FUSVZFX0lORklOSVRZfGQoPzppKD86c3BsYXl8YWxvZyg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdHxBcmd1bWVudHMpfHJlY3Rvcmllcyl8ZSg/OnNjcmlwdGlvbnxmYXVsdCg/OlN0YXR1c3xDaCg/OmVja2VkfGFyc2V0KXxWaWV3KSkpfHUoPzpzZXIoPzpQcm9maWxlfExhbmd1YWdlfEFnZW50KXxuKD86aXF1ZUlEfGRlZmluZWQpfHBkYXRlSW50ZXJ2YWwpfF9jb250ZW50fHAoPzppeGVsRGVwdGh8b3J0fGVyc29uYWxiYXJ8a2NzMTF8bCg/OnVnaW5zfGF0Zm9ybSl8YSg/OnRobmFtZXxkZGluZyg/OlJpZ2h0fEJvdHRvbXxUb3B8TGVmdCl8cmVudCg/OldpbmRvd3xMYXllcik/fGdlKD86WCg/Ok9mZnNldCk/fFkoPzpPZmZzZXQpPykpfHIoPzpvKD86dG8oPzpjb2x8dHlwZSl8ZHVjdCg/OlN1Yik/fG1wdGVyKXxlKD86dmlvdXN8Zml4KSkpfGUoPzpuKD86Y29kaW5nfGFibGVkUGx1Z2luKXx4KD86dGVybmFsfHBhbmRvKXxtYmVkcyl8dig/OmlzaWJpbGl0eXxlbmRvcig/OlN1Yik/fExpbmtjb2xvcil8VVJMVW5lbmNvZGVkfFAoPzpJfE9TSVRJVkVfSU5GSU5JVFkpfGYoPzppbGVuYW1lfG8oPzpudCg/OlNpemV8RmFtaWx5fFdlaWdodCl8cm1OYW1lKXxyYW1lKD86c3xFbGVtZW50KXxnQ29sb3IpfEV8d2hpdGVTcGFjZXxsKD86aSg/OnN0U3R5bGVUeXBlfG4oPzplSGVpZ2h0fGtDb2xvcikpfG8oPzpjYSg/OnRpb24oPzpiYXIpP3xsTmFtZSl8d3NyYyl8ZSg/Om5ndGh8ZnQoPzpDb250ZXh0KT8pfGEoPzpzdCg/Ok0oPzpvZGlmaWVkfGF0Y2gpfEluZGV4fFBhcmVuKXx5ZXIoPzpzfFgpfG5ndWFnZSkpfGEoPzpwcCg/Ok1pbm9yVmVyc2lvbnxOYW1lfENvKD86ZGVOYW1lfHJlKXxWZXJzaW9uKXx2YWlsKD86SGVpZ2h0fFRvcHxXaWR0aHxMZWZ0KXxsbHxyKD86aXR5fGd1bWVudHMpfExpbmtjb2xvcnxib3ZlKXxyKD86aWdodCg/OkNvbnRleHQpP3xlKD86c3BvbnNlKD86WE1MfFRleHQpfGFkeVN0YXRlKSl8Z2xvYmFsfHh8bSg/OmltZVR5cGVzfHVsdGlsaW5lfGVudWJhcnxhcmdpbig/OlJpZ2h0fEJvdHRvbXxUb3B8TGVmdCkpfEwoPzpOKD86MTB8Mil8T0coPzoxMEV8MkUpKXxiKD86byg/OnR0b218cmRlcig/OldpZHRofFJpZ2h0V2lkdGh8Qm90dG9tV2lkdGh8U3R5bGV8Q29sb3J8VG9wV2lkdGh8TGVmdFdpZHRoKSl8dWZmZXJEZXB0aHxlbG93fGFja2dyb3VuZCg/OkNvbG9yfEltYWdlKSkpXGIvfSx7dG9rZW46ImlkZW50aWZpZXIiLHJlZ2V4Om99LHtyZWdleDoiIix0b2tlbjoiZW1wdHkiLG5leHQ6Im5vX3JlZ2V4In1dLHN0YXJ0OltpLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksZigic3RhcnQiKSx7dG9rZW46InN0cmluZy5yZWdleHAiLHJlZ2V4OiJcXC8iLG5leHQ6InJlZ2V4In0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzK3xeJCIsbmV4dDoic3RhcnQifSx7dG9rZW46ImVtcHR5IixyZWdleDoiIixuZXh0OiJub19yZWdleCJ9XSxyZWdleDpbe3Rva2VuOiJyZWdleHAua2V5d29yZC5vcGVyYXRvciIscmVnZXg6IlxcXFwoPzp1W1xcZGEtZkEtRl17NH18eFtcXGRhLWZBLUZdezJ9fC4pIn0se3Rva2VuOiJzdHJpbmcucmVnZXhwIixyZWdleDoiL1tzeG5naW15XSoiLG5leHQ6Im5vX3JlZ2V4In0se3Rva2VuOiJpbnZhbGlkIixyZWdleDovXHtcZCtcYiw/XGQqXH1bKypdfFsrKiReP11bKypdfFskXl1bP118XD97Myx9L30se3Rva2VuOiJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLHJlZ2V4Oi9cKFw/Wzo9IV18XCl8XHtcZCtcYiw/XGQqXH18WysqXVw/fFsoKSReKyo/Ll0vfSx7dG9rZW46ImNvbnN0YW50Lmxhbmd1YWdlLmRlbGltaXRlciIscmVnZXg6L1x8L30se3Rva2VuOiJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLHJlZ2V4Oi9cW1xePy8sbmV4dDoicmVnZXhfY2hhcmFjdGVyX2NsYXNzIn0se3Rva2VuOiJlbXB0eSIscmVnZXg6IiQiLG5leHQ6Im5vX3JlZ2V4In0se2RlZmF1bHRUb2tlbjoic3RyaW5nLnJlZ2V4cCJ9XSxyZWdleF9jaGFyYWN0ZXJfY2xhc3M6W3t0b2tlbjoicmVnZXhwLmNoYXJjbGFzcy5rZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiXFxcXCg/OnVbXFxkYS1mQS1GXXs0fXx4W1xcZGEtZkEtRl17Mn18LikifSx7dG9rZW46ImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIscmVnZXg6Il0iLG5leHQ6InJlZ2V4In0se3Rva2VuOiJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLHJlZ2V4OiItIn0se3Rva2VuOiJlbXB0eSIscmVnZXg6IiQiLG5leHQ6Im5vX3JlZ2V4In0se2RlZmF1bHRUb2tlbjoic3RyaW5nLnJlZ2V4cC5jaGFyYWNodGVyY2xhc3MifV0sZnVuY3Rpb25fYXJndW1lbnRzOlt7dG9rZW46InZhcmlhYmxlLnBhcmFtZXRlciIscmVnZXg6b30se3Rva2VuOiJwdW5jdHVhdGlvbi5vcGVyYXRvciIscmVnZXg6IlssIF0rIn0se3Rva2VuOiJwdW5jdHVhdGlvbi5vcGVyYXRvciIscmVnZXg6IiQifSx7dG9rZW46ImVtcHR5IixyZWdleDoiIixuZXh0OiJub19yZWdleCJ9XSxxcXN0cmluZzpbe3Rva2VuOiJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLHJlZ2V4OnJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiXFxcXCQiLGNvbnN1bWVMaW5lRW5kOiEwfSx7dG9rZW46InN0cmluZyIscmVnZXg6JyJ8JCcsbmV4dDoibm9fcmVnZXgifSx7ZGVmYXVsdFRva2VuOiJzdHJpbmcifV0scXN0cmluZzpbe3Rva2VuOiJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLHJlZ2V4OnJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiXFxcXCQiLGNvbnN1bWVMaW5lRW5kOiEwfSx7dG9rZW46InN0cmluZyIscmVnZXg6Iid8JCIsbmV4dDoibm9fcmVnZXgifSx7ZGVmYXVsdFRva2VuOiJzdHJpbmcifV19O2lmKCFlfHwhZS5ub0VTNil0aGlzLiRydWxlcy5ub19yZWdleC51bnNoaWZ0KHtyZWdleDoiW3t9XSIsb25NYXRjaDpmdW5jdGlvbihlLHQsbil7dGhpcy5uZXh0PWU9PSJ7Ij90aGlzLm5leHRTdGF0ZToiIjtpZihlPT0ieyImJm4ubGVuZ3RoKW4udW5zaGlmdCgic3RhcnQiLHQpO2Vsc2UgaWYoZT09In0iJiZuLmxlbmd0aCl7bi5zaGlmdCgpLHRoaXMubmV4dD1uLnNoaWZ0KCk7aWYodGhpcy5uZXh0LmluZGV4T2YoInN0cmluZyIpIT0tMXx8dGhpcy5uZXh0LmluZGV4T2YoImpzeCIpIT0tMSlyZXR1cm4icGFyZW4ucXVhc2kuZW5kIn1yZXR1cm4gZT09InsiPyJwYXJlbi5scGFyZW4iOiJwYXJlbi5ycGFyZW4ifSxuZXh0U3RhdGU6InN0YXJ0In0se3Rva2VuOiJzdHJpbmcucXVhc2kuc3RhcnQiLHJlZ2V4Oi9gLyxwdXNoOlt7dG9rZW46ImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIscmVnZXg6cn0se3Rva2VuOiJwYXJlbi5xdWFzaS5zdGFydCIscmVnZXg6L1wkey8scHVzaDoic3RhcnQifSx7dG9rZW46InN0cmluZy5xdWFzaS5lbmQiLHJlZ2V4Oi9gLyxuZXh0OiJwb3AifSx7ZGVmYXVsdFRva2VuOiJzdHJpbmcucXVhc2kifV19KSwoIWV8fGUuanN4IT0wKSYmYS5jYWxsKHRoaXMpO3RoaXMuZW1iZWRSdWxlcyhpLCJkb2MtIixbaS5nZXRFbmRSdWxlKCJub19yZWdleCIpXSksdGhpcy5ub3JtYWxpemVSdWxlcygpfTtyLmluaGVyaXRzKHUscyksdC5KYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXM9dX0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoIi4uL3JhbmdlIikuUmFuZ2UsaT1mdW5jdGlvbigpe307KGZ1bmN0aW9uKCl7dGhpcy5jaGVja091dGRlbnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4vXlxzKyQvLnRlc3QoZSk/L15ccypcfS8udGVzdCh0KTohMX0sdGhpcy5hdXRvT3V0ZGVudD1mdW5jdGlvbihlLHQpe3ZhciBuPWUuZ2V0TGluZSh0KSxpPW4ubWF0Y2goL14oXHMqXH0pLyk7aWYoIWkpcmV0dXJuIDA7dmFyIHM9aVsxXS5sZW5ndGgsbz1lLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3Jvdzp0LGNvbHVtbjpzfSk7aWYoIW98fG8ucm93PT10KXJldHVybiAwO3ZhciB1PXRoaXMuJGdldEluZGVudChlLmdldExpbmUoby5yb3cpKTtlLnJlcGxhY2UobmV3IHIodCwwLHQscy0xKSx1KX0sdGhpcy4kZ2V0SW5kZW50PWZ1bmN0aW9uKGUpe3JldHVybiBlLm1hdGNoKC9eXHMqLylbMF19fSkuY2FsbChpLnByb3RvdHlwZSksdC5NYXRjaGluZ0JyYWNlT3V0ZGVudD1pfSksYWNlLmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuLi8uLi9saWIvb29wIiksaT1lKCIuLi8uLi9yYW5nZSIpLlJhbmdlLHM9ZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZSxvPXQuRm9sZE1vZGU9ZnVuY3Rpb24oZSl7ZSYmKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyPW5ldyBSZWdFeHAodGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sInwiK2Uuc3RhcnQpKSx0aGlzLmZvbGRpbmdTdG9wTWFya2VyPW5ldyBSZWdFeHAodGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywifCIrZS5lbmQpKSl9O3IuaW5oZXJpdHMobyxzKSxmdW5jdGlvbigpe3RoaXMuZm9sZGluZ1N0YXJ0TWFya2VyPS8oW1x7XFtcKF0pW15cfVxdXCldKiR8XlxzKihcL1wqKS8sdGhpcy5mb2xkaW5nU3RvcE1hcmtlcj0vXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLyx0aGlzLnNpbmdsZUxpbmVCbG9ja0NvbW1lbnRSZT0vXlxzKihcL1wqKS4qXCpcL1xzKiQvLHRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlPS9eXHMqKFwvXCpcKlwqKS4qXCpcL1xzKiQvLHRoaXMuc3RhcnRSZWdpb25SZT0vXlxzKihcL1wqfFwvXC8pIz9yZWdpb25cYi8sdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2U9dGhpcy5nZXRGb2xkV2lkZ2V0LHRoaXMuZ2V0Rm9sZFdpZGdldD1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZS5nZXRMaW5lKG4pO2lmKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QocikmJiF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChyKSYmIXRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlLnRlc3QocikpcmV0dXJuIiI7dmFyIGk9dGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2UoZSx0LG4pO3JldHVybiFpJiZ0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChyKT8ic3RhcnQiOml9LHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPWUuZ2V0TGluZShuKTtpZih0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChpKSlyZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soZSxpLG4pO3ZhciBzPWkubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpO2lmKHMpe3ZhciBvPXMuaW5kZXg7aWYoc1sxXSlyZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKGUsc1sxXSxuLG8pO3ZhciB1PWUuZ2V0Q29tbWVudEZvbGRSYW5nZShuLG8rc1swXS5sZW5ndGgsMSk7cmV0dXJuIHUmJiF1LmlzTXVsdGlMaW5lKCkmJihyP3U9dGhpcy5nZXRTZWN0aW9uUmFuZ2UoZSxuKTp0IT0iYWxsIiYmKHU9bnVsbCkpLHV9aWYodD09PSJtYXJrYmVnaW4iKXJldHVybjt2YXIgcz1pLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIpO2lmKHMpe3ZhciBvPXMuaW5kZXgrc1swXS5sZW5ndGg7cmV0dXJuIHNbMV0/dGhpcy5jbG9zaW5nQnJhY2tldEJsb2NrKGUsc1sxXSxuLG8pOmUuZ2V0Q29tbWVudEZvbGRSYW5nZShuLG8sLTEpfX0sdGhpcy5nZXRTZWN0aW9uUmFuZ2U9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmdldExpbmUodCkscj1uLnNlYXJjaCgvXFMvKSxzPXQsbz1uLmxlbmd0aDt0Kz0xO3ZhciB1PXQsYT1lLmdldExlbmd0aCgpO3doaWxlKCsrdDxhKXtuPWUuZ2V0TGluZSh0KTt2YXIgZj1uLnNlYXJjaCgvXFMvKTtpZihmPT09LTEpY29udGludWU7aWYocj5mKWJyZWFrO3ZhciBsPXRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKGUsImFsbCIsdCk7aWYobCl7aWYobC5zdGFydC5yb3c8PXMpYnJlYWs7aWYobC5pc011bHRpTGluZSgpKXQ9bC5lbmQucm93O2Vsc2UgaWYocj09ZilicmVha311PXR9cmV0dXJuIG5ldyBpKHMsbyx1LGUuZ2V0TGluZSh1KS5sZW5ndGgpfSx0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jaz1mdW5jdGlvbihlLHQsbil7dmFyIHI9dC5zZWFyY2goL1xzKiQvKSxzPWUuZ2V0TGVuZ3RoKCksbz1uLHU9L15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi8sYT0xO3doaWxlKCsrbjxzKXt0PWUuZ2V0TGluZShuKTt2YXIgZj11LmV4ZWModCk7aWYoIWYpY29udGludWU7ZlsxXT9hLS06YSsrO2lmKCFhKWJyZWFrfXZhciBsPW47aWYobD5vKXJldHVybiBuZXcgaShvLHIsbCx0Lmxlbmd0aCl9fS5jYWxsKG8ucHJvdG90eXBlKX0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoIi4uL2xpYi9vb3AiKSxpPWUoIi4vdGV4dCIpLk1vZGUscz1lKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzLG89ZSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQsdT1lKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudCxhPWUoIi4vYmVoYXZpb3VyL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cixmPWUoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZSxsPWZ1bmN0aW9uKCl7dGhpcy5IaWdobGlnaHRSdWxlcz1zLHRoaXMuJG91dGRlbnQ9bmV3IG8sdGhpcy4kYmVoYXZpb3VyPW5ldyBhLHRoaXMuZm9sZGluZ1J1bGVzPW5ldyBmfTtyLmluaGVyaXRzKGwsaSksZnVuY3Rpb24oKXt0aGlzLmxpbmVDb21tZW50U3RhcnQ9Ii8vIix0aGlzLmJsb2NrQ29tbWVudD17c3RhcnQ6Ii8qIixlbmQ6IiovIn0sdGhpcy4kcXVvdGVzPXsnIic6JyInLCInIjoiJyIsImAiOiJgIn0sdGhpcy5nZXROZXh0TGluZUluZGVudD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy4kZ2V0SW5kZW50KHQpLGk9dGhpcy5nZXRUb2tlbml6ZXIoKS5nZXRMaW5lVG9rZW5zKHQsZSkscz1pLnRva2VucyxvPWkuc3RhdGU7aWYocy5sZW5ndGgmJnNbcy5sZW5ndGgtMV0udHlwZT09ImNvbW1lbnQiKXJldHVybiByO2lmKGU9PSJzdGFydCJ8fGU9PSJub19yZWdleCIpe3ZhciB1PXQubWF0Y2goL14uKig/OlxiY2FzZVxiLio6fFtce1woXFtdKVxzKiQvKTt1JiYocis9bil9ZWxzZSBpZihlPT0iZG9jLXN0YXJ0Iil7aWYobz09InN0YXJ0Inx8bz09Im5vX3JlZ2V4IilyZXR1cm4iIjt2YXIgdT10Lm1hdGNoKC9eXHMqKFwvPylcKi8pO3UmJih1WzFdJiYocis9IiAiKSxyKz0iKiAiKX1yZXR1cm4gcn0sdGhpcy5jaGVja091dGRlbnQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudCh0LG4pfSx0aGlzLmF1dG9PdXRkZW50PWZ1bmN0aW9uKGUsdCxuKXt0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KHQsbil9LHRoaXMuY3JlYXRlV29ya2VyPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyB1KFsiYWNlIl0sImFjZS9tb2RlL2phdmFzY3JpcHRfd29ya2VyIiwiSmF2YVNjcmlwdFdvcmtlciIpO3JldHVybiB0LmF0dGFjaFRvRG9jdW1lbnQoZS5nZXREb2N1bWVudCgpKSx0Lm9uKCJhbm5vdGF0ZSIsZnVuY3Rpb24odCl7ZS5zZXRBbm5vdGF0aW9ucyh0LmRhdGEpfSksdC5vbigidGVybWluYXRlIixmdW5jdGlvbigpe2UuY2xlYXJBbm5vdGF0aW9ucygpfSksdH0sdGhpcy4kaWQ9ImFjZS9tb2RlL2phdmFzY3JpcHQifS5jYWxsKGwucHJvdG90eXBlKSx0Lk1vZGU9bH0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgYWNlLnJlcXVpcmUoWyJhY2UvbW9kZS9qYXZhc2NyaXB0Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7ICAgIAp9OwoK0LzRg9GA0L7QvC7RgdC+0LfQtNCw0YLRjNCg0LXQtNCw0LrRgtC+0YDQktCb0LXQstC+0LnQntCx0LvQsNGB0YLQuCA9IGZ1bmN0aW9uKCkKewogICAg0LzRg9GA0L7QvC7Qt9Cw0LPRgNGD0LfQuNGC0YxBQ0UoKTsKICAgINC80YPRgNC+0Lwu0LfQsNCz0YDRg9C30LjRgtGM0KDQtdC20LjQvEFDRUpTKCk7CiAgICAKICAgIHZhciDRgNC10LTQsNC60YLQvtGAID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICDRgNC10LTQsNC60YLQvtGALmlkID0gItGA0LXQtNCw0LrRgtC+0YAiOwogICAg0YDQtdC00LDQutGC0L7RgC5zdHlsZS5jc3NUZXh0ID0gImhlaWdodDogMTAwJTsiOwogICAgdmFyINC+0LHQu9Cw0YHRgtGMID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoItC70LXQstCw0Y8t0L7QsdC70LDRgdGC0YwiKTsKICAgINC+0LHQu9Cw0YHRgtGMLmFwcGVuZENoaWxkKNGA0LXQtNCw0LrRgtC+0YApOwogICAg0LzRg9GA0L7QvC7RgNC10LTQsNC60YLQvtGAID0gd2luZG93LmFjZS5lZGl0KCLRgNC10LTQsNC60YLQvtGAIik7CiAgICDQvNGD0YDQvtC8LtGA0LXQtNCw0LrRgtC+0YAuc2Vzc2lvbi5zZXRNb2RlKCJhY2UvbW9kZS9qYXZhc2NyaXB0Iik7Cn07",
  23. {}
  24. ],
  25. [
  26. "муром.пу_1.0.0",
  27. "LyoKICoKICog0JLQvdC10YjQvdC40Lkg0LLQuNC0CiAqCiAqLwoKZnVuY3Rpb24g0LfQsNC00LDRgtGM0JLQvdC10YjQvdC40LnQktC40LQoKQp7CiAgICB2YXIg0LLQuNC0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsKICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQo0LLQuNC0KTsKICAgINCy0LjQtC5pbm5lckhUTUwgPQpgCi7QvNGD0YDQvtC8LdC60L3QvtC/0LrQsAp7CiAgICBwYWRkaW5nOiAwLjVlbSAyZW0gMC41ZW0gMmVtOwogICAgbWFyZ2luLXJpZ2h0OiAwLjVlbTsKICAgIGZsb2F0OiByaWdodDsKICAgIGNvbG9yOiAjMjIyOwogICAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkOwogICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjJzOyAvKiBTYWZhcmkgKi8KICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMnM7Cn0KLtC80YPRgNC+0Lwt0LrQvdC+0L/QutCwOmhvdmVyCnsKICAgIGJvcmRlcjogMXB4IHNvbGlkICMyMjI7Cn0KLtC80YPRgNC+0Lwt0L7RgtGB0YLRg9C/LdC/0L4t0YHRgtC+0YDQvtC90LDQvAp7CiAgICBtYXJnaW4tbGVmdDogMC41ZW07CiAgICBtYXJnaW4tcmlnaHQ6IDAuNWVtOwp9CmA7Cn0KCi8qCiAqCiAqINCh0L/QuNGB0L7QuiDQvNC+0LTRg9C70LXQuQogKgogKi8KCmZ1bmN0aW9uINCh0L/QuNGB0L7QutCc0L7QtNGD0LvQtdC5KCkKewogICAgdmFyINGPID0gdGhpczsKCiAgICB0aGlzLtGB0L7Qt9C00LDRgtGM0JjQvdGC0LXRgNGE0LXQudGBKCk7CiAgICB0aGlzLtC30LDQtNCw0YLRjNCS0LjQtCgpOwogICAgdGhpcy7QstGL0LHRgNCw0LvQuCA9IG5ldyDQo9Cy0LXQtNC+0LzQuNGC0LXQu9GMKCk7CiAgICB0aGlzLtCy0YvQsdGA0LDQu9C4LtC/0L7QtNC/0LjRgdCw0YLRjChmdW5jdGlvbigpewogICAgICAgINGPLtC+0YLQvtCx0YDQsNC30LjRgtGM0JLRi9Cx0L7RgCgpOwogICAgfSk7Cn0K0KHQv9C40YHQvtC60JzQvtC00YPQu9C10LkucHJvdG90eXBlLtGB0L7Qt9C00LDRgtGM0JjQvdGC0LXRgNGE0LXQudGBID0gZnVuY3Rpb24oKQp7CiAgICAvLyDQn9C+0LzQtdGJ0LDQtdC8INGC0LDQsdC70LjRhtGDINCyIGRpdiDQtNC70Y8g0YDQtdCw0LvQuNC30LDRhtC40Lgg0L/RgNC+0LzQvtGC0LrQuC4KICAgIHRoaXMu0LjRhCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgdGhpcy7RgtCw0LHQu9C40YbQsCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRhYmxlIik7CiAgICB0aGlzLtC40YQuYXBwZW5kQ2hpbGQodGhpcy7RgtCw0LHQu9C40YbQsCk7Cn07CtCh0L/QuNGB0L7QutCc0L7QtNGD0LvQtdC5LnByb3RvdHlwZS7Qt9Cw0LTQsNGC0YzQktC40LQgPSBmdW5jdGlvbigpCnsKICAgIHRoaXMu0LjRhC5zdHlsZS5jc3NUZXh0ID0KYApvdmVyZmxvdzogYXV0bzsKaGVpZ2h0OiAxOC41ZW07CmJvcmRlcjogMXB4IHNvbGlkICNkZGQ7Ci8qCnBhZGRpbmc6IDAuNWVtOwptYXJnaW46IDAuNWVtOwoqLwpgOwogICAgdGhpcy7RgtCw0LHQu9C40YbQsC5zdHlsZS5jc3NUZXh0ID0KYApjb2xvcjogIzY2NjY2NjsKZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7CmN1cnNvcjogZGVmYXVsdDsKYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKYDsKfTsK0KHQv9C40YHQvtC60JzQvtC00YPQu9C10LkucHJvdG90eXBlLtC+0YfQuNGB0YLQuNGC0YwgPSBmdW5jdGlvbigpCnsKICAgIHdoaWxlICh0aGlzLtGC0LDQsdC70LjRhtCwLnJvd3MubGVuZ3RoKQogICAgewogICAgICAgIHRoaXMu0YLQsNCx0LvQuNGG0LAuZGVsZXRlUm93KDApOwogICAgfTsKfTsK0KHQv9C40YHQvtC60JzQvtC00YPQu9C10LkucHJvdG90eXBlLtC00L7QsdCw0LLQuNGC0YzQrdC70LXQvNC10L3RgiA9IGZ1bmN0aW9uKNGB0YLQsNGC0YPRgSwg0LjQvNGPKQp7CiAgICB2YXIg0YHRgtCw0YLRg9GBSFRNTCA9ICIiOwogICAgaWYgKNGB0YLQsNGC0YPRgSkKICAgIHsKICAgICAgICDRgdGC0LDRgtGD0YFIVE1MID0gImNoZWNrZWQiOwogICAgfQoKICAgIHZhciDRgNGP0LQgPSB0aGlzLtGC0LDQsdC70LjRhtCwLmluc2VydFJvdygpOwogICAgdmFyINGP0YfQtdC50LrQsCA9IDA7CgogICAgdmFyINC90L7QvNC10YAgPSDRgNGP0LQuaW5zZXJ0Q2VsbCjRj9GH0LXQudC60LArKyk7CiAgICDQvdC+0LzQtdGALmlubmVySFRNTCA9IHRoaXMu0YLQsNCx0LvQuNGG0LAucm93cy5sZW5ndGggLSAxOwogICAg0L3QvtC80LXRgC5zdHlsZS5jc3NUZXh0ID0gInBhZGRpbmc6IDAuNWVtOyI7CgogICAgdmFyINCy0LrQuyA9INGA0Y/QtC5pbnNlcnRDZWxsKNGP0YfQtdC50LrQsCsrKTsKICAgINCy0LrQuy5pbm5lckhUTUwgPSBgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBkaXNhYmxlZCBgICsg0YHRgtCw0YLRg9GBSFRNTCArIGA+PC9pbnB1dD5gOwogICAgCiAgICB2YXIg0L3QsNC30LLQsNC90LjQtSA9INGA0Y/QtC5pbnNlcnRDZWxsKNGP0YfQtdC50LrQsCsrKTsKICAgINC90LDQt9Cy0LDQvdC40LUuaW5uZXJIVE1MID0g0LjQvNGPOwogICAg0L3QsNC30LLQsNC90LjQtS5zdHlsZS5jc3NUZXh0ID0gInBhZGRpbmc6IDAuNWVtOyB3aWR0aDogMTAwJTsiOwp9OwrQodC/0LjRgdC+0LrQnNC+0LTRg9C70LXQuS5wcm90b3R5cGUu0L7RgtC+0LHRgNCw0LfQuNGC0YzQodC/0LjRgdC+0LogPSBmdW5jdGlvbijRgdC/0LjRgdC+0LopCnsKICAgIHRoaXMu0L7Rh9C40YHRgtC40YLRjCgpOwogICAgZm9yICh2YXIg0L3QvtC80LXRgCBpbiDRgdC/0LjRgdC+0LopCiAgICB7CiAgICAgICAgdmFyINGN0LvQtdC80LXQvdGCID0g0YHQv9C40YHQvtC6W9C90L7QvNC10YBdOwogICAgICAgIHZhciDRgdGC0LDRgtGD0YEgPSDRjdC70LXQvNC10L3RglswXTsKICAgICAgICB2YXIg0LjQvNGPID0g0Y3Qu9C10LzQtdC90YJbMV07CiAgICAgICAgdGhpcy7QtNC+0LHQsNCy0LjRgtGM0K3Qu9C10LzQtdC90YIo0YHRgtCw0YLRg9GBLCDQuNC80Y8pOwogICAgfQp9OwrQodC/0LjRgdC+0LrQnNC+0LTRg9C70LXQuS5wcm90b3R5cGUu0YPQu9Cw0LLQu9C40LLQsNGC0YzQktGL0LHQvtGA0K3Qu9C10LzQtdC90YLQsCA9IGZ1bmN0aW9uKNC90L7QvNC10YApCnsKICAgIHZhciDRjyA9IHRoaXM7CiAgICAKICAgIHZhciDRgNGP0LQgPSB0aGlzLtGC0LDQsdC70LjRhtCwLnJvd3Nb0L3QvtC80LXRgF0KICAgINGA0Y/QtC5vbmNsaWNrID0gZnVuY3Rpb24oKQogICAgewogICAgICAgINGPLtCy0YvQsdC+0YDQoNCw0L3QtdC1ID0g0Y8u0LLRi9Cx0L7RgDsKICAgICAgICDRjy7QstGL0LHQvtGAID0g0L3QvtC80LXRgDsKICAgICAgICDRjy7QstGL0LHRgNCw0LvQuC7Rg9Cy0LXQtNC+0LzQuNGC0YwoKTsKICAgIH07Cn07CtCh0L/QuNGB0L7QutCc0L7QtNGD0LvQtdC5LnByb3RvdHlwZS7Rg9C70LDQstC70LjQstCw0YLRjNCS0YvQsdC+0YAgPSBmdW5jdGlvbigpCnsKICAgIHRoaXMu0LLRi9Cx0L7RgNCg0LDQvdC10LUgPSBudWxsOwogICAgdGhpcy7QstGL0LHQvtGAID0gbnVsbDsKICAgIGZvciAodmFyINC90L7QvNC10YAgPSAwOyDQvdC+0LzQtdGAIDwgdGhpcy7RgtCw0LHQu9C40YbQsC5yb3dzLmxlbmd0aDsgKyvQvdC+0LzQtdGAKQogICAgewogICAgICAgIHRoaXMu0YPQu9Cw0LLQu9C40LLQsNGC0YzQktGL0LHQvtGA0K3Qu9C10LzQtdC90YLQsCjQvdC+0LzQtdGAKTsKICAgIH0KfTsK0KHQv9C40YHQvtC60JzQvtC00YPQu9C10LkucHJvdG90eXBlLtC+0YLQvtCx0YDQsNC30LjRgtGM0JLRi9Cx0L7RgCA9IGZ1bmN0aW9uKCkKewogICAgaWYgKHRoaXMu0LLRi9Cx0L7RgNCg0LDQvdC10LUgIT0gbnVsbCkKICAgIHsKICAgICAgICB2YXIg0YDRj9C0ID0gdGhpcy7RgtCw0LHQu9C40YbQsC5yb3dzW3RoaXMu0LLRi9Cx0L7RgNCg0LDQvdC10LVdOwogICAgICAgINGA0Y/QtC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBudWxsOwogICAgfQogICAgdmFyINGA0Y/QtCA9IHRoaXMu0YLQsNCx0LvQuNGG0LAucm93c1t0aGlzLtCy0YvQsdC+0YBdOwogICAg0YDRj9C0LnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICIjZWVlIjsKfTsK0KHQv9C40YHQvtC60JzQvtC00YPQu9C10LkucHJvdG90eXBlLtC30LDQtNCw0YLRjNCh0L/QuNGB0L7QuiA9IGZ1bmN0aW9uKNGB0L/QuNGB0L7QuikKewogICAgdGhpcy7QvtGC0L7QsdGA0LDQt9C40YLRjNCh0L/QuNGB0L7QuijRgdC/0LjRgdC+0LopOwogICAgdGhpcy7Rg9C70LDQstC70LjQstCw0YLRjNCS0YvQsdC+0YAoKTsKfTsK0KHQv9C40YHQvtC60JzQvtC00YPQu9C10LkucHJvdG90eXBlLtCy0YvQsdGA0LDRgtGMID0gZnVuY3Rpb24o0L3QvtC80LXRgCkKewogICAgdmFyINGA0Y/QtCA9IHRoaXMu0YLQsNCx0LvQuNGG0LAucm93c1vQvdC+0LzQtdGAXTsKICAgINGA0Y/QtC5zY3JvbGxJbnRvVmlldygpOwogICAg0YDRj9C0Lm9uY2xpY2soKTsKfTsK0KHQv9C40YHQvtC60JzQvtC00YPQu9C10LkucHJvdG90eXBlLtC+0LHQvdC+0LLQuNGC0YzQrdC70LXQvNC10L3RgiA9IGZ1bmN0aW9uKNC90L7QvNC10YAsINGB0YLQsNGC0YPRgSwg0LjQvNGPKQp7CiAgICB2YXIg0YDRj9C0ID0gdGhpcy7RgtCw0LHQu9C40YbQsC5yb3dzW9C90L7QvNC10YBdOwogICAg0YDRj9C0LmNlbGxzWzFdLmNoaWxkTm9kZXNbMF0uY2hlY2tlZCA9INGB0YLQsNGC0YPRgTsKICAgINGA0Y/QtC5jZWxsc1syXS5pbm5lckhUTUwgPSDQuNC80Y87Cn07CtCh0L/QuNGB0L7QutCc0L7QtNGD0LvQtdC5LnByb3RvdHlwZS7Rg9C00LDQu9C40YLRjNCt0LvQtdC80LXQvdGCID0gZnVuY3Rpb24o0L3QvtC80LXRgCkKewogICAgdmFyINGA0Y/QtCA9IHRoaXMu0YLQsNCx0LvQuNGG0LAucm93c1vQvdC+0LzQtdGAXTsKICAgINGA0Y/QtC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKNGA0Y/QtCk7Cn0KCi8qCiAqCiAqINCi0LXRgdGCINGB0L/QuNGB0LrQsCDQvNC+0LTRg9C70LXQuQogKgogKi8KCmZ1bmN0aW9uINCi0LXRgdGC0KHQv9C40YHQutCw0JzQvtC00YPQu9C10LkoKQp7CiAgICB0aGlzLtGB0L7Qt9C00LDRgtGM0JjQvdGC0LXRgNGE0LXQudGBKCk7Cn0K0KLQtdGB0YLQodC/0LjRgdC60LDQnNC+0LTRg9C70LXQuS5wcm90b3R5cGUu0YHQvtC30LTQsNGC0YzQmNC90YLQtdGA0YTQtdC50YEgPSBmdW5jdGlvbigpCnsKICAgIHZhciDRjyA9IHRoaXM7CiAgICAKICAgIHRoaXMu0LjRhCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgdGhpcy7RgdC/0LjRgdC+0LogPSBuZXcg0KHQv9C40YHQvtC60JzQvtC00YPQu9C10LkoKTsKICAgIHRoaXMu0LjRhC5hcHBlbmRDaGlsZCh0aGlzLtGB0L/QuNGB0L7Qui7QuNGEKTsKICAgIAogICAgdmFyINC80L7QtNGD0LvQuCA9IFsKICAgICAgICBbdHJ1ZSwgICLQvNGD0YDQvtC8LtC30LDQs9GA0YPQt9C60LBfMS4wLjAiXSwKICAgICAgICBbdHJ1ZSwgICLQvNGD0YDQvtC8LnV1aWRfMS4wLjAiXSwKICAgICAgICBbdHJ1ZSwgICLQo9Cy0LXQtNC+0LzQuNGC0LXQu9GMXzEuMC4wIl0sCiAgICAgICAgW2ZhbHNlLCAidWlraXRfMy4yLjAuY3NzIl0sCiAgICAgICAgW2ZhbHNlLCAidWlraXRfMy4yLjAuanMiXSwKICAgICAgICBbZmFsc2UsICLQn9Cw0L3QtdC70YzQo9C/0YDQsNCy0LvQtdC90LjRjy5VSUtpdCJdLAogICAgICAgIFtmYWxzZSwgItCf0LDQvdC10LvRjNCj0L/RgNCw0LLQu9C10L3QuNGPXzEuMC4wIl0sCiAgICBdOwogICAgCiAgICB0aGlzLtGB0L/QuNGB0L7Qui7Qt9Cw0LTQsNGC0YzQodC/0LjRgdC+0Loo0LzQvtC00YPQu9C4KTsKICAgIHRoaXMu0YHQv9C40YHQvtC6LtCy0YvQsdGA0LDRgtGMKDApOwogICAgCiAgICB0aGlzLtGB0L7Qt9C00LDRgtGM0JrQvdC+0L/QutGDKCLQktGL0LHRgNCw0YLRjCDQv9C+0YHQu9C10LTQvdC40LkiLCBmdW5jdGlvbigpewogICAgICAgIGNvbnNvbGUubG9nKCLQstGL0LHRgNCw0YLRjCIpOwogICAgICAgINGPLtGB0L/QuNGB0L7Qui7QstGL0LHRgNCw0YLRjCjQvNC+0LTRg9C70LgubGVuZ3RoIC0gMSk7CiAgICB9KTsKICAgIHRoaXMu0YHQvtC30LTQsNGC0YzQmtC90L7Qv9C60YMoItCe0LHQvdC+0LLQuNGC0Ywg0L/QvtGB0LvQtdC00L3QuNC5IiwgZnVuY3Rpb24oKXsKICAgICAgICDRjy7RgdC/0LjRgdC+0Lou0L7QsdC90L7QstC40YLRjNCt0LvQtdC80LXQvdGCKNC80L7QtNGD0LvQuC5sZW5ndGggLSAxLCB0cnVlLCAi0J3QvtCy0L7QtSDQuNC80Y8iKTsKICAgIH0pOwogICAgdGhpcy7RgdC+0LfQtNCw0YLRjNCa0L3QvtC/0LrRgygi0KPQtNCw0LvQuNGC0Ywg0L/QvtGB0LvQtdC00L3QuNC5IiwgZnVuY3Rpb24oKXsKICAgICAgICDRjy7RgdC/0LjRgdC+0Lou0YPQtNCw0LvQuNGC0YzQrdC70LXQvNC10L3RgijQvNC+0LTRg9C70LgubGVuZ3RoIC0gMSk7CiAgICB9KTsKICAgIHRoaXMu0YHQvtC30LTQsNGC0YzQmtC90L7Qv9C60YMoItCU0L7QsdCw0LLQuNGC0YwiLCBmdW5jdGlvbigpewogICAgICAgINGPLtGB0L/QuNGB0L7Qui7QtNC+0LHQsNCy0LjRgtGM0K3Qu9C10LzQtdC90YIodHJ1ZSwgItCd0L7QstGL0LktNTk5Iik7CiAgICAgICAgdmFyINC90L7QvNC10YAgPSDRjy7RgdC/0LjRgdC+0Lou0YLQsNCx0LvQuNGG0LAucm93cy5sZW5ndGggLSAxOwogICAgICAgINGPLtGB0L/QuNGB0L7Qui7Rg9C70LDQstC70LjQstCw0YLRjNCS0YvQsdC+0YDQrdC70LXQvNC10L3RgtCwKNC90L7QvNC10YApOwogICAgICAgINGPLtGB0L/QuNGB0L7Qui7QstGL0LHRgNCw0YLRjCjQvdC+0LzQtdGAKTsKICAgIH0pOwp9OwrQotC10YHRgtCh0L/QuNGB0LrQsNCc0L7QtNGD0LvQtdC5LnByb3RvdHlwZS7RgdC+0LfQtNCw0YLRjNCa0L3QvtC/0LrRgyA9IGZ1bmN0aW9uKNC40LzRjywg0YDQtdCw0LrRhtC40Y8pCnsKICAgIHZhciDQutC90L7Qv9C60LAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTsKICAgINC60L3QvtC/0LrQsC5pbm5lckhUTUwgPSDQuNC80Y87CiAgICB0aGlzLtC40YQuYXBwZW5kQ2hpbGQo0LrQvdC+0L/QutCwKTsKICAgINC60L3QvtC/0LrQsC5vbmNsaWNrID0g0YDQtdCw0LrRhtC40Y87Cn07CgovKgogKgogKiDQodCy0L7QudGB0YLQstCwINC80L7QtNGD0LvRjwogKgogKi8KCmZ1bmN0aW9uINCh0LLQvtC50YHRgtCy0LDQnNC+0LTRg9C70Y8oKQp7CiAgICB0aGlzLtGB0L7Qt9C00LDRgtGM0JjQvdGC0LXRgNGE0LXQudGBKCk7CiAgICB0aGlzLtC40LfQvNC10L3QuNC70LjQndC+0LzQtdGAID0gbmV3INCj0LLQtdC00L7QvNC40YLQtdC70YwoKTsKICAgIHRoaXMu0L3QsNGB0YLRgNC+0LjRgtGM0J3QvtC80LXRgCgpOwogICAgdGhpcy7QuNC30LzQtdC90LjQu9C40JjQvNGPID0gbmV3INCj0LLQtdC00L7QvNC40YLQtdC70YwoKTsKICAgIHRoaXMu0L3QsNGB0YLRgNC+0LjRgtGM0JjQvNGPKCk7CiAgICB0aGlzLtC40LfQvNC10L3QuNC70LjQodGC0LDRgtGD0YEgPSBuZXcg0KPQstC10LTQvtC80LjRgtC10LvRjCgpOwogICAgdGhpcy7QvdCw0YHRgtGA0L7QuNGC0YzQodGC0LDRgtGD0YEoKTsKICAgIHRoaXMu0YPQtNCw0LvQuNGC0YwgPSBuZXcg0KPQstC10LTQvtC80LjRgtC10LvRjCgpOwogICAgdGhpcy7QvdCw0YHRgtGA0L7QuNGC0YzQo9C00LDQu9C10L3QuNC1KCk7Cn0K0KHQstC+0LnRgdGC0LLQsNCc0L7QtNGD0LvRjy5wcm90b3R5cGUu0YHQvtC30LTQsNGC0YzQmNC90YLQtdGA0YTQtdC50YEgPSBmdW5jdGlvbigpCnsKICAgIHRoaXMu0LjRhCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgdGhpcy7QuNGELnN0eWxlLmNzc1RleHQgPQpgCmJvcmRlcjogMXB4IHNvbGlkICNkZGQ7Ci8qCnBhZGRpbmc6IDAuNWVtOwptYXJnaW46IDAuNWVtOwoqLwpjb2xvcjogIzY2NjY2NjsKZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7CmA7CiAgICB0aGlzLtGC0LDQsdC70LjRhtCwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGFibGUiKTsKICAgIHRoaXMu0LjRhC5hcHBlbmRDaGlsZCh0aGlzLtGC0LDQsdC70LjRhtCwKTsKfTsKT2JqZWN0LmRlZmluZVByb3BlcnR5KNCh0LLQvtC50YHRgtCy0LDQnNC+0LTRg9C70Y8ucHJvdG90eXBlLCAi0L3QvtC80LXRgCIsIHsKICAgIGdldDogZnVuY3Rpb24oKQogICAgewogICAgICAgIHJldHVybiBOdW1iZXIodGhpcy7Qv9C+0LvQtdCd0L7QvNC10YAudmFsdWUpOwogICAgfSwKICAgIHNldDogZnVuY3Rpb24o0LfQvdCw0YfQtdC90LjQtSkKICAgIHsKICAgICAgICB0aGlzLtC/0L7Qu9C10J3QvtC80LXRgC52YWx1ZSA9INC30L3QsNGH0LXQvdC40LU7CiAgICB9Cn0pOwrQodCy0L7QudGB0YLQstCw0JzQvtC00YPQu9GPLnByb3RvdHlwZS7QvdCw0YHRgtGA0L7QuNGC0YzQndC+0LzQtdGAID0gZnVuY3Rpb24oKQp7CiAgICB2YXIg0Y8gPSB0aGlzOwogICAgCiAgICB2YXIg0YDRj9C0ID0gdGhpcy7RgtCw0LHQu9C40YbQsC5pbnNlcnRSb3coKTsKICAgIHZhciDRj9GH0LXQudC60LAgPSAwOwoKICAgIHZhciDQutC70Y7RhyA9INGA0Y/QtC5pbnNlcnRDZWxsKNGP0YfQtdC50LrQsCsrKTsKICAgINC60LvRjtGHLmlubmVySFRNTCA9ICLQndC+0LzQtdGAOiI7CiAgICDQutC70Y7Rhy5zdHlsZS5jc3NUZXh0ID0gInBhZGRpbmc6IDAuNWVtOyI7CgogICAgdmFyINC30L3QsNGH0LXQvdC40LUgPSDRgNGP0LQuaW5zZXJ0Q2VsbCjRj9GH0LXQudC60LArKyk7CiAgICB0aGlzLtC/0L7Qu9C10J3QvtC80LXRgCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7CiAgICB0aGlzLtC/0L7Qu9C10J3QvtC80LXRgC50eXBlID0gIm51bWJlciI7CiAgICB0aGlzLtC/0L7Qu9C10J3QvtC80LXRgC5taW4gPSAwOwogICAg0LfQvdCw0YfQtdC90LjQtS5zdHlsZS5jc3NUZXh0ID0gIndpZHRoOiAxMDAlOyBwYWRkaW5nOiAwLjVlbTsiOwogICAgdGhpcy7Qv9C+0LvQtdCd0L7QvNC10YAuc3R5bGUuY3NzVGV4dCA9ICJ3aWR0aDogMTAwJTsiOwogICAg0LfQvdCw0YfQtdC90LjQtS5hcHBlbmRDaGlsZCh0aGlzLtC/0L7Qu9C10J3QvtC80LXRgCk7CiAgICAKICAgIHRoaXMu0L/QvtC70LXQndC+0LzQtdGALm9uaW5wdXQgPSBmdW5jdGlvbigpCiAgICB7CiAgICAgICAg0Y8u0LjQt9C80LXQvdC40LvQuNCd0L7QvNC10YAu0YPQstC10LTQvtC80LjRgtGMKCk7CiAgICB9Owp9OwpPYmplY3QuZGVmaW5lUHJvcGVydHko0KHQstC+0LnRgdGC0LLQsNCc0L7QtNGD0LvRjy5wcm90b3R5cGUsICLQuNC80Y8iLCB7CiAgICBnZXQ6IGZ1bmN0aW9uKCkKICAgIHsKICAgICAgICByZXR1cm4gdGhpcy7Qv9C+0LvQtdCY0LzRjy52YWx1ZTsKICAgIH0sCiAgICBzZXQ6IGZ1bmN0aW9uKNC30L3QsNGH0LXQvdC40LUpCiAgICB7CiAgICAgICAgdGhpcy7Qv9C+0LvQtdCY0LzRjy52YWx1ZSA9INC30L3QsNGH0LXQvdC40LU7CiAgICB9Cn0pOwrQodCy0L7QudGB0YLQstCw0JzQvtC00YPQu9GPLnByb3RvdHlwZS7QvdCw0YHRgtGA0L7QuNGC0YzQmNC80Y8gPSBmdW5jdGlvbigpCnsKICAgIHZhciDRjyA9IHRoaXM7CgogICAgdmFyINGA0Y/QtCA9IHRoaXMu0YLQsNCx0LvQuNGG0LAuaW5zZXJ0Um93KCk7CiAgICB2YXIg0Y/Rh9C10LnQutCwID0gMDsKCiAgICB2YXIg0LrQu9GO0YcgPSDRgNGP0LQuaW5zZXJ0Q2VsbCjRj9GH0LXQudC60LArKyk7CiAgICDQutC70Y7Rhy5pbm5lckhUTUwgPSAi0JjQvNGPOiI7CiAgICDQutC70Y7Rhy5zdHlsZS5jc3NUZXh0ID0gInBhZGRpbmc6IDAuNWVtOyI7CgogICAgdmFyINC30L3QsNGH0LXQvdC40LUgPSDRgNGP0LQuaW5zZXJ0Q2VsbCjRj9GH0LXQudC60LArKyk7CiAgICB0aGlzLtC/0L7Qu9C10JjQvNGPID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKICAgINC30L3QsNGH0LXQvdC40LUuc3R5bGUuY3NzVGV4dCA9ICJ3aWR0aDogMTAwJTsgcGFkZGluZzogMC41ZW07IjsKICAgIHRoaXMu0L/QvtC70LXQmNC80Y8uc3R5bGUuY3NzVGV4dCA9ICJ3aWR0aDogMTAwJTsiOwogICAg0LfQvdCw0YfQtdC90LjQtS5hcHBlbmRDaGlsZCh0aGlzLtC/0L7Qu9C10JjQvNGPKTsKCiAgICB0aGlzLtC/0L7Qu9C10JjQvNGPLm9uaW5wdXQgPSBmdW5jdGlvbigpCiAgICB7CiAgICAgICAg0Y8u0LjQt9C80LXQvdC40LvQuNCY0LzRjy7Rg9Cy0LXQtNC+0LzQuNGC0YwoKTsKICAgIH07Cn07Ck9iamVjdC5kZWZpbmVQcm9wZXJ0eSjQodCy0L7QudGB0YLQstCw0JzQvtC00YPQu9GPLnByb3RvdHlwZSwgItGB0YLQsNGC0YPRgSIsIHsKICAgIGdldDogZnVuY3Rpb24oKQogICAgewogICAgICAgIHJldHVybiB0aGlzLtC/0LXRgNC10LrQu9GO0YfQsNGC0LXQu9GMLmNoZWNrZWQ7CiAgICB9LAogICAgc2V0OiBmdW5jdGlvbijQt9C90LDRh9C10L3QuNC1KQogICAgewogICAgICAgIHRoaXMu0L/QtdGA0LXQutC70Y7Rh9Cw0YLQtdC70YwuY2hlY2tlZCA9INC30L3QsNGH0LXQvdC40LU7CiAgICB9Cn0pOwrQodCy0L7QudGB0YLQstCw0JzQvtC00YPQu9GPLnByb3RvdHlwZS7QvdCw0YHRgtGA0L7QuNGC0YzQodGC0LDRgtGD0YEgPSBmdW5jdGlvbigpCnsKICAgIHZhciDRjyA9IHRoaXM7CiAgICAKICAgIHZhciDRgNGP0LQgPSB0aGlzLtGC0LDQsdC70LjRhtCwLmluc2VydFJvdygpOwogICAgdmFyINGP0YfQtdC50LrQsCA9IDA7CiAgICAKICAgIHZhciDQutC70Y7RhyA9INGA0Y/QtC5pbnNlcnRDZWxsKNGP0YfQtdC50LrQsCsrKTsKICAgINC60LvRjtGHLmlubmVySFRNTCA9ICLQmNGB0L/QvtC70L3Rj9GC0Yw6IjsKICAgINC60LvRjtGHLnN0eWxlLmNzc1RleHQgPSAicGFkZGluZzogMC41ZW07IjsKCiAgICB2YXIg0LfQvdCw0YfQtdC90LjQtSA9INGA0Y/QtC5pbnNlcnRDZWxsKNGP0YfQtdC50LrQsCsrKTsKICAgIHRoaXMu0L/QtdGA0LXQutC70Y7Rh9Cw0YLQtdC70YwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwogICAgdGhpcy7Qv9C10YDQtdC60LvRjtGH0LDRgtC10LvRjC50eXBlID0gImNoZWNrYm94IjsKICAgIHRoaXMu0L/QtdGA0LXQutC70Y7Rh9Cw0YLQtdC70Ywuc3R5bGUuY3NzVGV4dCA9ICJwYWRkaW5nOiAwLjVlbTsiOwogICAg0LfQvdCw0YfQtdC90LjQtS5hcHBlbmRDaGlsZCh0aGlzLtC/0LXRgNC10LrQu9GO0YfQsNGC0LXQu9GMKTsKCiAgICB0aGlzLtC/0LXRgNC10LrQu9GO0YfQsNGC0LXQu9GMLm9uY2hhbmdlID0gZnVuY3Rpb24oKQogICAgewogICAgICAgINGPLtC40LfQvNC10L3QuNC70LjQodGC0LDRgtGD0YEu0YPQstC10LTQvtC80LjRgtGMKCk7CiAgICB9OwogICAg0LrQu9GO0Ycub25jbGljayA9IGZ1bmN0aW9uKCkKICAgIHsKICAgICAgICDRjy7Qv9C10YDQtdC60LvRjtGH0LDRgtC10LvRjC5jaGVja2VkID0gIdGPLtC/0LXRgNC10LrQu9GO0YfQsNGC0LXQu9GMLmNoZWNrZWQ7CiAgICAgICAg0Y8u0LjQt9C80LXQvdC40LvQuNCh0YLQsNGC0YPRgS7Rg9Cy0LXQtNC+0LzQuNGC0YwoKTsKICAgIH07Cn07CtCh0LLQvtC50YHRgtCy0LDQnNC+0LTRg9C70Y8ucHJvdG90eXBlLtC90LDRgdGC0YDQvtC40YLRjNCj0LTQsNC70LXQvdC40LUgPSBmdW5jdGlvbigpCnsKICAgIHZhciDRjyA9IHRoaXM7CiAgICAKICAgIHZhciDRgNGP0LQgPSB0aGlzLtGC0LDQsdC70LjRhtCwLmluc2VydFJvdygpOwogICAgdmFyINGP0YfQtdC50LrQsCA9IDA7CgogICAg0YDRj9C0Lmluc2VydENlbGwo0Y/Rh9C10LnQutCwKyspOwogICAgdmFyINC30L3QsNGH0LXQvdC40LUgPSDRgNGP0LQuaW5zZXJ0Q2VsbCjRj9GH0LXQudC60LArKyk7CgogICAgdGhpcy7QutC90L7Qv9C60LDQo9C00LDQu9C40YLRjCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpOwogICAgdGhpcy7QutC90L7Qv9C60LDQo9C00LDQu9C40YLRjC5pbm5lckhUTUwgPSAi0KPQtNCw0LvQuNGC0YwiOwogICAgdGhpcy7QutC90L7Qv9C60LDQo9C00LDQu9C40YLRjC5jbGFzc0xpc3QuYWRkKCLQvNGD0YDQvtC8LdC60L3QvtC/0LrQsCIpOwogICAg0LfQvdCw0YfQtdC90LjQtS5hcHBlbmRDaGlsZCh0aGlzLtC60L3QvtC/0LrQsNCj0LTQsNC70LjRgtGMKTsKICAgIAogICAgdGhpcy7QutC90L7Qv9C60LDQo9C00LDQu9C40YLRjC5vbmNsaWNrID0gZnVuY3Rpb24oKQogICAgewogICAgICAgINGPLtGD0LTQsNC70LjRgtGMLtGD0LLQtdC00L7QvNC40YLRjCgpOyAgCiAgICB9Owp9OwoKLyoKICoKICog0KLQtdGB0YIg0YHQstC+0LnRgdGC0LLQsCDQvNC+0LTRg9C70Y8KICoKICovCiAKZnVuY3Rpb24g0KLQtdGB0YLQodCy0L7QudGB0YLQstCw0JzQvtC00YPQu9GPKCkKewogICAgdGhpcy7RgdC+0LfQtNCw0YLRjNCY0L3RgtC10YDRhNC10LnRgSgpOwp9CtCi0LXRgdGC0KHQstC+0LnRgdGC0LLQsNCc0L7QtNGD0LvRjy5wcm90b3R5cGUu0YHQvtC30LTQsNGC0YzQmNC90YLQtdGA0YTQtdC50YEgPSBmdW5jdGlvbigpCnsKICAgIHZhciDRjyA9IHRoaXM7CiAgICAKICAgIHRoaXMu0LjRhCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgdGhpcy7RgdCy0L7QudGB0YLQstCwID0gbmV3INCh0LLQvtC50YHRgtCy0LDQnNC+0LTRg9C70Y8oKTsKICAgIHRoaXMu0LjRhC5hcHBlbmRDaGlsZCh0aGlzLtGB0LLQvtC50YHRgtCy0LAu0LjRhCk7CgogICAgdGhpcy7RgdCy0L7QudGB0YLQstCwLtC40LfQvNC10L3QuNC70LjQndC+0LzQtdGALtC/0L7QtNC/0LjRgdCw0YLRjChmdW5jdGlvbigpewogICAgICAgIGNvbnNvbGUubG9nKCLQvdC+0LzQtdGAOiAnIiArINGPLtGB0LLQvtC50YHRgtCy0LAu0L3QvtC80LXRgCArICInIik7CiAgICB9KTsKICAgIHRoaXMu0YHQstC+0LnRgdGC0LLQsC7QuNC30LzQtdC90LjQu9C40JjQvNGPLtC/0L7QtNC/0LjRgdCw0YLRjChmdW5jdGlvbigpewogICAgICAgIGNvbnNvbGUubG9nKCLQuNC80Y86ICciICsg0Y8u0YHQstC+0LnRgdGC0LLQsC7QuNC80Y8gKyAiJyIpOwogICAgfSk7CiAgICB0aGlzLtGB0LLQvtC50YHRgtCy0LAu0LjQt9C80LXQvdC40LvQuNCh0YLQsNGC0YPRgS7Qv9C+0LTQv9C40YHQsNGC0YwoZnVuY3Rpb24oKXsKICAgICAgICBjb25zb2xlLmxvZygi0YHRgtCw0YLRg9GBOiAnIiArINGPLtGB0LLQvtC50YHRgtCy0LAu0YHRgtCw0YLRg9GBICsgIiciKTsKICAgIH0pOwogICAgdGhpcy7RgdCy0L7QudGB0YLQstCwLtGD0LTQsNC70LjRgtGMLtC/0L7QtNC/0LjRgdCw0YLRjChmdW5jdGlvbigpewogICAgICAgIGNvbnNvbGUubG9nKCLRg9C00LDQu9C40YLRjCDQvNC+0LTRg9C70YwgJyIgKyDRjy7RgdCy0L7QudGB0YLQstCwLtC40LzRjyArICInIik7CiAgICB9KTsKfTsKCi8qCiAqCiAqINCc0L7QtNGD0LvQuAogKgogKi8KCmZ1bmN0aW9uINCc0L7QtNGD0LvQuCgpCnsKICAgIAp9CtCc0L7QtNGD0LvQuC5wcm90b3R5cGUu0YHQstC+0LnRgdGC0LLQsCA9IGZ1bmN0aW9uKNC90L7QvNC10YApCnsKICAgIHJldHVybiBtdXJvbS5tb2R1bGVQcm9wZXJ0aWVzKNC90L7QvNC10YApOwp9OwrQnNC+0LTRg9C70LgucHJvdG90eXBlLtC30LDQtNCw0YLRjNCh0LLQvtC50YHRgtCy0LAgPSBmdW5jdGlvbijQvdC+0LzQtdGALCDRgdCy0L7QudGB0YLQstCwKQp7CiAgICB2YXIg0LwgPSDQvNGD0YDQvtC8LtC80L7QtNGD0LvQuFvQvdC+0LzQtdGAXTsKICAgINC8WzJdID0g0YHQstC+0LnRgdGC0LLQsDsKfTsK0JzQvtC00YPQu9C4LnByb3RvdHlwZS7RgdGC0LDRgtGD0YEgPSBmdW5jdGlvbijQvdC+0LzQtdGAKQp7CiAgICByZXR1cm4gbXVyb20ubW9kdWxlU3RhdHVzKNC90L7QvNC10YApOwp9OwrQnNC+0LTRg9C70LgucHJvdG90eXBlLtC30LDQtNCw0YLRjNCh0YLQsNGC0YPRgSA9IGZ1bmN0aW9uKNC90L7QvNC10YAsINGB0YLQsNGC0YPRgSkKewogICAgdmFyINGB0LIgPSB0aGlzLtGB0LLQvtC50YHRgtCy0LAo0L3QvtC80LXRgCk7CiAgICDRgdCyWyJzdGF0dXMiXSA9INGB0YLQsNGC0YPRgTsKICAgIHRoaXMu0LfQsNC00LDRgtGM0KHQstC+0LnRgdGC0LLQsCjQvdC+0LzQtdGALCDRgdCyKTsKfTsK0JzQvtC00YPQu9C4LnByb3RvdHlwZS7Qt9Cw0LTQsNGC0YzQmNC80Y8gPSBmdW5jdGlvbijQvdC+0LzQtdGALCDQuNC80Y8pCnsKICAgIHZhciDQvCA9INC80YPRgNC+0Lwu0LzQvtC00YPQu9C4W9C90L7QvNC10YBdOwogICAg0LxbMF0gPSDQuNC80Y87Cn07CtCc0L7QtNGD0LvQuC5wcm90b3R5cGUu0LfQsNC00LDRgtGM0J3QvtC80LXRgCA9IGZ1bmN0aW9uKNGB0YLQsNGA0YvQuSwg0L3QvtCy0YvQuSkKewogICAgLy9jb25zb2xlLmxvZygi0LfQsNC00LDRgtGMINC90L7QvNC10YAuICciICsg0YHRgtCw0YDRi9C5ICsgIicgLT4gJyIgKyDQvdC+0LLRi9C5ICsgIiciKTsKICAgIHZhciDQvNC+0LTRg9C70YwgPSDQvNGD0YDQvtC8LtC80L7QtNGD0LvQuFvRgdGC0LDRgNGL0LldOwogICAgLy8g0KPQtNCw0LvRj9C10Lwg0YHRgtCw0YDRg9GOINC30LDQv9C40YHRjC4KICAgINC80YPRgNC+0Lwu0LzQvtC00YPQu9C4LnNwbGljZSjRgdGC0LDRgNGL0LksIDEpOwogICAgLy8g0JTQvtCx0LDQstC70Y/QtdC8INC80L7QtNGD0LvRjCDQsiDQvdC+0LLRg9GOINC/0L7Qt9C40YbQuNGOLgogICAg0LzRg9GA0L7QvC7QvNC+0LTRg9C70Lguc3BsaWNlKNC90L7QstGL0LksIDAsINC80L7QtNGD0LvRjCk7Cn07CgovKgogKgogKiDQn9Cw0L3QtdC70Ywg0YPQv9GA0LDQstC70LXQvdC40Y8KICoKICovCgpmdW5jdGlvbiDQn9Cw0L3QtdC70YzQo9C/0YDQsNCy0LvQtdC90LjRjygpCnsKICAgIHRoaXMu0LzQvtC00YPQu9C4ID0gbmV3INCc0L7QtNGD0LvQuCgpOwogICAgdGhpcy7RgdC+0LfQtNCw0YLRjNCe0YHQvdC+0LLRgygpOwogICAgdGhpcy7RgdC+0LfQtNCw0YLRjNCh0L7RhdGA0LDQvdC10L3QuNC10KHQutCw0YfQuNCy0LDQvdC40LXQlNC+0LHQsNCy0LvQtdC90LjQtSgpOwogICAgdGhpcy7RgdC+0LfQtNCw0YLRjNCh0L/QuNGB0L7QutCc0L7QtNGD0LvQtdC5KCk7CiAgICB0aGlzLtGB0L7Qt9C00LDRgtGM0KHQstC+0LnRgdGC0LLQsNCc0L7QtNGD0LvRjygpOwp9CtCf0LDQvdC10LvRjNCj0L/RgNCw0LLQu9C10L3QuNGPLnByb3RvdHlwZS7RgdC+0LfQtNCw0YLRjNCe0LHRkdGA0YLQutGD0K/Rh9C10LnQutGDID0gZnVuY3Rpb24oKQp7CiAgICB2YXIg0L7QsdGR0YDRgtC60LAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpOwogICAg0L7QsdGR0YDRgtC60LAuc3R5bGUuY3NzVGV4dCA9ICJ3aWR0aDogMTAwJTsiOwogICAgdmFyINGA0Y/QtCA9INC+0LHRkdGA0YLQutCwLmluc2VydFJvdygpOwogICAgdmFyINGP0YfQtdC50LrQsCA9INGA0Y/QtC5pbnNlcnRDZWxsKCk7CiAgICByZXR1cm4gW9C+0LHRkdGA0YLQutCwLCDRj9GH0LXQudC60LBdOwp9OwrQn9Cw0L3QtdC70YzQo9C/0YDQsNCy0LvQtdC90LjRjy5wcm90b3R5cGUu0YHQvtC30LTQsNGC0YzQntGB0L3QvtCy0YMgPSBmdW5jdGlvbigpCnsKICAgIHRoaXMu0LjRhCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRhYmxlIik7CiAgICB0aGlzLtC40YQuc3R5bGUuY3NzVGV4dCA9ICJ3aWR0aDogMTAwJTsiOwogICAgdmFyINGA0Y/QtCA9IHRoaXMu0LjRhC5pbnNlcnRSb3coKTsKICAgIHRoaXMu0LvQtdCy0L4gPSDRgNGP0LQuaW5zZXJ0Q2VsbCgpOwogICAgdGhpcy7Qu9C10LLQvi5zdHlsZS5jc3NUZXh0ID0gIndpZHRoOiAxMDAlOyI7CiAgICB2YXIg0L/RgNCw0LLQviA9INGA0Y/QtC5pbnNlcnRDZWxsKCk7CiAgICDQv9GA0LDQstC+LnN0eWxlLmNzc1RleHQgPSAiaGVpZ2h0OiAxMDAlOyI7CiAgICB0aGlzLtC60L3QvtC/0LrQuCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRhYmxlIik7CiAgICB0aGlzLtC60L3QvtC/0LrQuC5zdHlsZS5jc3NUZXh0ID0gImhlaWdodDogMTAwJTsiOwogICAg0L/RgNCw0LLQvi5hcHBlbmRDaGlsZCh0aGlzLtC60L3QvtC/0LrQuCk7CiAgICDRgNGP0LQgPSB0aGlzLtC40YQuaW5zZXJ0Um93KCk7CiAgICB0aGlzLtC90LjQtyA9INGA0Y/QtC5pbnNlcnRDZWxsKCk7CiAgICB0aGlzLtC90LjQty5jb2xTcGFuID0gMjsKfTsK0J/QsNC90LXQu9GM0KPQv9GA0LDQstC70LXQvdC40Y8ucHJvdG90eXBlLtGB0L7Qt9C00LDRgtGM0KHQv9C40YHQvtC60JzQvtC00YPQu9C10LkgPSBmdW5jdGlvbigpCnsKICAgIHRoaXMu0YHQv9C40YHQvtC6ID0gbmV3INCh0L/QuNGB0L7QutCc0L7QtNGD0LvQtdC5KCk7CiAgICB0aGlzLtGB0L/QuNGB0L7Qui7Qt9Cw0LTQsNGC0YzQodC/0LjRgdC+0LoodGhpcy7RgdC/0LjRgdC+0LrQnNC+0LTRg9C70LXQuSgpKTsKICAgIHZhciDQvtGPID0gdGhpcy7RgdC+0LfQtNCw0YLRjNCe0LHRkdGA0YLQutGD0K/Rh9C10LnQutGDKCk7CiAgICB0aGlzLtC70LXQstC+LmFwcGVuZENoaWxkKNC+0Y9bMF0pOwogICAg0L7Rj1sxXS5hcHBlbmRDaGlsZCh0aGlzLtGB0L/QuNGB0L7Qui7QuNGEKTsKfTsK0J/QsNC90LXQu9GM0KPQv9GA0LDQstC70LXQvdC40Y8ucHJvdG90eXBlLtGB0L7Qt9C00LDRgtGM0KHQstC+0LnRgdGC0LLQsNCc0L7QtNGD0LvRjyA9IGZ1bmN0aW9uKCkKewogICAgdGhpcy7RgdCy0L7QudGB0YLQstCwID0gbmV3INCh0LLQvtC50YHRgtCy0LDQnNC+0LTRg9C70Y8oKTsKICAgINC+0Y8gPSB0aGlzLtGB0L7Qt9C00LDRgtGM0J7QsdGR0YDRgtC60YPQr9GH0LXQudC60YMoKTsKICAgIHRoaXMu0L3QuNC3LmFwcGVuZENoaWxkKNC+0Y9bMF0pOwogICAg0L7Rj1sxXS5hcHBlbmRDaGlsZCh0aGlzLtGB0LLQvtC50YHRgtCy0LAu0LjRhCk7Cn07CtCf0LDQvdC10LvRjNCj0L/RgNCw0LLQu9C10L3QuNGPLnByb3RvdHlwZS7RgdC/0LjRgdC+0LrQnNC+0LTRg9C70LXQuSA9IGZ1bmN0aW9uKCkKewogICAgdmFyINGB0L/QuNGB0L7QuiA9IFtdOwogICAgZm9yICh2YXIg0L3QvtC80LXRgCBpbiDQvNGD0YDQvtC8LtC80L7QtNGD0LvQuCkKICAgIHsKICAgICAgICB2YXIg0LwgPSDQvNGD0YDQvtC8LtC80L7QtNGD0LvQuFvQvdC+0LzQtdGAXTsKICAgICAgICB2YXIg0YHRgtCw0YLRg9GBID0gdGhpcy7QvNC+0LTRg9C70Lgu0YHRgtCw0YLRg9GBKNC90L7QvNC10YApOwogICAgICAgIHZhciDQuNC80Y8gPSDQvFswXTsKICAgICAgICB2YXIg0Y3Qu9C10LzQtdC90YIgPSBb0YHRgtCw0YLRg9GBLCDQuNC80Y9dOwogICAgICAgINGB0L/QuNGB0L7Qui5wdXNoKNGN0LvQtdC80LXQvdGCKTsKICAgIH0KICAgIAogICAgcmV0dXJuINGB0L/QuNGB0L7QujsKfTsK0J/QsNC90LXQu9GM0KPQv9GA0LDQstC70LXQvdC40Y8ucHJvdG90eXBlLtGB0L7Qt9C00LDRgtGM0JrQvdC+0L/QutGDID0gZnVuY3Rpb24o0LjQvNGPLCDRg9Cy0LXQtNC+0LzQuNGC0LXQu9GMKQp7CiAgICB2YXIg0LrQvdC+0L/QutCwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7CiAgICDQutC90L7Qv9C60LAuaW5uZXJIVE1MID0g0LjQvNGPOwogICAg0LrQvdC+0L/QutCwLnN0eWxlLmNzc1RleHQgPSAid2lkdGg6IDEwMCU7IjsKICAgINC60L3QvtC/0LrQsC5jbGFzc0xpc3QuYWRkKCLQvNGD0YDQvtC8LdC60L3QvtC/0LrQsCIpOwogICAg0LrQvdC+0L/QutCwLm9uY2xpY2sgPSBmdW5jdGlvbigpCiAgICB7CiAgICAgICAg0YPQstC10LTQvtC80LjRgtC10LvRjC7Rg9Cy0LXQtNC+0LzQuNGC0YwoKTsgIAogICAgfTsKICAgIAogICAgcmV0dXJuINC60L3QvtC/0LrQsDsKfTsK0J/QsNC90LXQu9GM0KPQv9GA0LDQstC70LXQvdC40Y8ucHJvdG90eXBlLtGB0L7Qt9C00LDRgtGM0KHQvtGF0YDQsNC90LXQvdC40LXQodC60LDRh9C40LLQsNC90LjQtdCU0L7QsdCw0LLQu9C10L3QuNC1ID0gZnVuY3Rpb24oKQp7CiAgICB2YXIg0Y8gPSB0aGlzOwogICAgCiAgICB2YXIg0YDRj9C0ID0gdGhpcy7QutC90L7Qv9C60LguaW5zZXJ0Um93KCk7CiAgICB2YXIg0Y/Rh9C10LnQutCwID0g0YDRj9C0Lmluc2VydENlbGwoKTsKICAgIHRoaXMu0YHQvtGF0YDQsNC90LjRgtGMID0gbmV3INCj0LLQtdC00L7QvNC40YLQtdC70YwoKTsKICAgIHRoaXMu0LrQvdC+0L/QutCw0KHQvtGF0YDQsNC90LjRgtGMID0gdGhpcy7RgdC+0LfQtNCw0YLRjNCa0L3QvtC/0LrRgygi0KHQvtGF0YDQsNC90LjRgtGMIiwgdGhpcy7RgdC+0YXRgNCw0L3QuNGC0YwpOwogICAg0Y/Rh9C10LnQutCwLmFwcGVuZENoaWxkKHRoaXMu0LrQvdC+0L/QutCw0KHQvtGF0YDQsNC90LjRgtGMKTsKICAgIAogICAg0YDRj9C0ID0gdGhpcy7QutC90L7Qv9C60LguaW5zZXJ0Um93KCk7CiAgICDRj9GH0LXQudC60LAgPSDRgNGP0LQuaW5zZXJ0Q2VsbCgpOwogICAgdGhpcy7RgdC60LDRh9Cw0YLRjCA9IG5ldyDQo9Cy0LXQtNC+0LzQuNGC0LXQu9GMKCk7CiAgICB0aGlzLtC60L3QvtC/0LrQsNCh0LrQsNGH0LDRgtGMID0gdGhpcy7RgdC+0LfQtNCw0YLRjNCa0L3QvtC/0LrRgygi0KHQutCw0YfQsNGC0YwiLCB0aGlzLtGB0LrQsNGH0LDRgtGMKTsKICAgINGP0YfQtdC50LrQsC5hcHBlbmRDaGlsZCh0aGlzLtC60L3QvtC/0LrQsNCh0LrQsNGH0LDRgtGMKTsKICAgIAogICAgLy8g0J/RgNC+0LHQtdC7LgogICAg0YDRj9C0ID0gdGhpcy7QutC90L7Qv9C60LguaW5zZXJ0Um93KCk7CiAgICDRj9GH0LXQudC60LAgPSDRgNGP0LQuaW5zZXJ0Q2VsbCgpOwogICAg0Y/Rh9C10LnQutCwLnN0eWxlLmNzc1RleHQgPSAiaGVpZ2h0OiAxMDAlOyI7CgogICAg0YDRj9C0ID0gdGhpcy7QutC90L7Qv9C60LguaW5zZXJ0Um93KCk7CiAgICDRj9GH0LXQudC60LAgPSDRgNGP0LQuaW5zZXJ0Q2VsbCgpOwogICAgdGhpcy7QtNC+0LHQsNCy0LjRgtGMID0gbmV3INCj0LLQtdC00L7QvNC40YLQtdC70YwoKTsKICAgIHRoaXMu0LrQvdC+0L/QutCw0JTQvtCx0LDQstC40YLRjCA9IHRoaXMu0YHQvtC30LTQsNGC0YzQmtC90L7Qv9C60YMoItCU0L7QsdCw0LLQuNGC0YwiLCB0aGlzLtC00L7QsdCw0LLQuNGC0YwpOwogICAg0Y/Rh9C10LnQutCwLmFwcGVuZENoaWxkKHRoaXMu0LrQvdC+0L/QutCw0JTQvtCx0LDQstC40YLRjCk7Cn07CtCf0LDQvdC10LvRjNCj0L/RgNCw0LLQu9C10L3QuNGPLnByb3RvdHlwZS7QuNC80Y/QpNCw0LnQu9CwID0gZnVuY3Rpb24oKQp7CiAgICB2YXIg0L/Rg9GC0YwgPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7CiAgICB2YXIg0LjQvNGPID0g0L/Rg9GC0Ywuc3BsaXQoIi8iKS5wb3AoKTsKICAgIHJldHVybiBkZWNvZGVVUkko0LjQvNGPKTsKfTsKCmZ1bmN0aW9uINC30LDQv9GD0YHRgtC40YLRjNCf0KMoKQp7CiAgICB2YXIg0L/RgyA9IG5ldyDQn9Cw0L3QtdC70YzQo9C/0YDQsNCy0LvQtdC90LjRjygpOwogICAg0LzRg9GA0L7QvC7Qv9GDID0g0L/RgzsKICAgIHZhciDQvtCx0LvQsNGB0YLQuCA9INC80YPRgNC+0Lwu0YHQvtC30LTQsNGC0YzQm9C10LLRg9GO0J/RgNCw0LLRg9GO0J7QsdC70LDRgdGC0LgoKTsKICAgIHZhciDQv9C+ID0g0L7QsdC70LDRgdGC0LhbMV07CiAgICDQv9C+LmFwcGVuZENoaWxkKNC/0YMu0LjRhCk7CiAgICDQvNGD0YDQvtC8LtGB0L7Qt9C00LDRgtGM0KDQtdC00LDQutGC0L7RgNCS0JvQtdCy0L7QudCe0LHQu9Cw0YHRgtC4KCk7CiAgICB2YXIg0YHQv9C40YHQvtC6ID0g0L/Rgy7RgdC/0LjRgdC+0Lo7CiAgICB2YXIg0YHQstC+0LnRgdGC0LLQsCA9INC/0YMu0YHQstC+0LnRgdGC0LLQsDsKICAgIHZhciDQvNC+0LTRg9C70LggPSDQv9GDLtC80L7QtNGD0LvQuDsKICAgIAogICAgZnVuY3Rpb24g0L7RgtC+0LHRgNCw0LfQuNGC0YzQmtC+0LTQktGL0LHRgNCw0L3QvdC+0LPQvtCc0L7QtNGD0LvRjygpCiAgICB7CiAgICAgICAgdmFyINC80L7QtNGD0LvRjCA9INC80YPRgNC+0Lwu0LzQvtC00YPQu9C4W9GB0L/QuNGB0L7Qui7QstGL0LHQvtGAXTsKICAgICAgICB2YXIg0LrQvtC0ID0g0LzRg9GA0L7QvC5hdG9iKNC80L7QtNGD0LvRjFsxXSk7CiAgICAgICAg0LzRg9GA0L7QvC7RgNC10LTQsNC60YLQvtGALnNlc3Npb24uc2V0VmFsdWUo0LrQvtC0KTsKICAgIH0KICAgIGZ1bmN0aW9uINC+0YLQvtCx0YDQsNC30LjRgtGM0KHQstC+0LnRgdGC0LLQsNCS0YvQsdGA0LDQvdC90L7Qs9C+0JzQvtC00YPQu9GPKCkKICAgIHsKICAgICAgICB2YXIg0LzQvtC00YPQu9GMID0g0LzRg9GA0L7QvC7QvNC+0LTRg9C70Lhb0YHQv9C40YHQvtC6LtCy0YvQsdC+0YBdOwogICAgICAgIAogICAgICAgINGB0LLQvtC50YHRgtCy0LAu0L3QvtC80LXRgCA9INGB0L/QuNGB0L7Qui7QstGL0LHQvtGAOwogICAgICAgINGB0LLQvtC50YHRgtCy0LAu0LjQvNGPID0g0LzQvtC00YPQu9GMWzBdOwogICAgICAgINGB0LLQvtC50YHRgtCy0LAu0YHRgtCw0YLRg9GBID0g0L/Rgy7QvNC+0LTRg9C70Lgu0YHRgtCw0YLRg9GBKNGB0L/QuNGB0L7Qui7QstGL0LHQvtGAKTsKICAgIH0KICAgINGB0L/QuNGB0L7Qui7QstGL0LHRgNCw0LvQuC7Qv9C+0LTQv9C40YHQsNGC0YzQnNC90L7Qs9C+KFsKICAgICAgICDQvtGC0L7QsdGA0LDQt9C40YLRjNCa0L7QtNCS0YvQsdGA0LDQvdC90L7Qs9C+0JzQvtC00YPQu9GPLAogICAgICAgINC+0YLQvtCx0YDQsNC30LjRgtGM0KHQstC+0LnRgdGC0LLQsNCS0YvQsdGA0LDQvdC90L7Qs9C+0JzQvtC00YPQu9GPLAogICAgXSk7CiAgICAKICAgIGZ1bmN0aW9uINC+0LHQvdC+0LLQuNGC0YzQodGC0LDRgtGD0YHQnNC+0LTRg9C70Y8oKQogICAgewogICAgICAgIHZhciDQvdC+0LzQtdGAID0g0YHQv9C40YHQvtC6LtCy0YvQsdC+0YA7CiAgICAgICAgdmFyINC40LzRjyA9INGB0LLQvtC50YHRgtCy0LAu0LjQvNGPOwogICAgICAgIHZhciDRgdGC0LDRgtGD0YEgPSDRgdCy0L7QudGB0YLQstCwLtGB0YLQsNGC0YPRgTsKICAgICAgICDQvNC+0LTRg9C70Lgu0LfQsNC00LDRgtGM0KHRgtCw0YLRg9GBKNC90L7QvNC10YAsINGB0YLQsNGC0YPRgSk7CiAgICAgICAg0YHQv9C40YHQvtC6LtC+0LHQvdC+0LLQuNGC0YzQrdC70LXQvNC10L3RgijQvdC+0LzQtdGALCDRgdGC0LDRgtGD0YEsINC40LzRjyk7CiAgICB9CiAgICDRgdCy0L7QudGB0YLQstCwLtC40LfQvNC10L3QuNC70LjQodGC0LDRgtGD0YEu0L/QvtC00L/QuNGB0LDRgtGMKNC+0LHQvdC+0LLQuNGC0YzQodGC0LDRgtGD0YHQnNC+0LTRg9C70Y8pOwogICAgCiAgICBmdW5jdGlvbiDQvtCx0L3QvtCy0LjRgtGM0JjQvNGP0JzQvtC00YPQu9GPKCkKICAgIHsKICAgICAgICB2YXIg0L3QvtC80LXRgCA9INGB0L/QuNGB0L7Qui7QstGL0LHQvtGAOwogICAgICAgIHZhciDQuNC80Y8gPSDRgdCy0L7QudGB0YLQstCwLtC40LzRjzsKICAgICAgICB2YXIg0YHRgtCw0YLRg9GBID0g0YHQstC+0LnRgdGC0LLQsC7RgdGC0LDRgtGD0YE7CiAgICAgICAg0LzQvtC00YPQu9C4LtC30LDQtNCw0YLRjNCY0LzRjyjQvdC+0LzQtdGALCDQuNC80Y8pOwogICAgICAgINGB0L/QuNGB0L7Qui7QvtCx0L3QvtCy0LjRgtGM0K3Qu9C10LzQtdC90YIo0L3QvtC80LXRgCwg0YHRgtCw0YLRg9GBLCDQuNC80Y8pOwogICAgfQogICAg0YHQstC+0LnRgdGC0LLQsC7QuNC30LzQtdC90LjQu9C40JjQvNGPLtC/0L7QtNC/0LjRgdCw0YLRjCjQvtCx0L3QvtCy0LjRgtGM0JjQvNGP0JzQvtC00YPQu9GPKTsKICAgIAogICAgZnVuY3Rpb24g0L7QsdC90L7QstC40YLRjNCd0L7QvNC10YDQnNC+0LTRg9C70Y8oKQogICAgewogICAgICAgIHZhciDRgdGC0LDRgNGL0LkgPSDRgdC/0LjRgdC+0Lou0LLRi9Cx0L7RgDsKICAgICAgICB2YXIg0L3QvtCy0YvQuSA9INGB0LLQvtC50YHRgtCy0LAu0L3QvtC80LXRgDsKICAgICAgICBpZiAo0YHRgtCw0YDRi9C5ID09INC90L7QstGL0LkpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmICjQvdC+0LLRi9C5ID4g0LzRg9GA0L7QvC7QvNC+0LTRg9C70LgubGVuZ3RoIC0gMSkKICAgICAgICB7CiAgICAgICAgICAgINC90L7QstGL0LkgPSDQvNGD0YDQvtC8LtC80L7QtNGD0LvQuC5sZW5ndGggLSAxOwogICAgICAgIH0KICAgICAgICDQvNC+0LTRg9C70Lgu0LfQsNC00LDRgtGM0J3QvtC80LXRgCjRgdGC0LDRgNGL0LksINC90L7QstGL0LkpOwogICAgICAgINGB0L/QuNGB0L7Qui7Qt9Cw0LTQsNGC0YzQodC/0LjRgdC+0Loo0L/Rgy7RgdC/0LjRgdC+0LrQnNC+0LTRg9C70LXQuSgpKTsKICAgICAgICDRgdC/0LjRgdC+0Lou0LLRi9Cx0YDQsNGC0Ywo0L3QvtCy0YvQuSk7CiAgICB9CiAgICDRgdCy0L7QudGB0YLQstCwLtC40LfQvNC10L3QuNC70LjQndC+0LzQtdGALtC/0L7QtNC/0LjRgdCw0YLRjCjQvtCx0L3QvtCy0LjRgtGM0J3QvtC80LXRgNCc0L7QtNGD0LvRjyk7CiAgICAKICAgIGZ1bmN0aW9uINC00L7QsdCw0LLQuNGC0YzQnNC+0LTRg9C70YwoKQogICAgewogICAgICAgIHZhciDRh9C40YHQu9C+ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogTWF0aC5mbG9vcigxMDAwKSk7CiAgICAgICAgdmFyINC40LzRjyA9ICLQvdC+0LLRi9C5LSIgKyDRh9C40YHQu9C+OyAKICAgICAgICB2YXIg0LrQvtC0ID0gYGNvbnNvbGUubG9nKCLQndCQ0JTQniDQlNC+0LHQsNCy0LjRgtGMINC60L7QtCDQsiDQvNC+0LTRg9C70YwgJ2AgKyDQuNC80Y8gKyBgJyIpO2A7CiAgICAgICAgdmFyINC80L7QtNGD0LvRjCA9IFvQuNC80Y8sINC80YPRgNC+0LwuYnRvYSjQutC+0LQpXTsKICAgICAgICDQvNGD0YDQvtC8LtC80L7QtNGD0LvQuC5wdXNoKNC80L7QtNGD0LvRjCk7CiAgICAgICAgdmFyINC80L7QtNGD0LvQuCA9INC/0YMu0YHQv9C40YHQvtC60JzQvtC00YPQu9C10LkoKTsKICAgICAgICDRgdC/0LjRgdC+0Lou0LfQsNC00LDRgtGM0KHQv9C40YHQvtC6KNC80L7QtNGD0LvQuCk7CiAgICAgICAg0YHQv9C40YHQvtC6LtCy0YvQsdGA0LDRgtGMKNC80L7QtNGD0LvQuC5sZW5ndGggLSAxKTsKICAgIH0KICAgINC/0YMu0LTQvtCx0LDQstC40YLRjC7Qv9C+0LTQv9C40YHQsNGC0Ywo0LTQvtCx0LDQstC40YLRjNCc0L7QtNGD0LvRjCk7CiAgICAKICAgIGZ1bmN0aW9uINGD0LTQsNC70LjRgtGM0JzQvtC00YPQu9GMKCkKICAgIHsKICAgICAgICB2YXIg0L3QvtC80LXRgCA9INGB0L/QuNGB0L7Qui7QstGL0LHQvtGAOwogICAgICAgIAogICAgICAgIHZhciDRgdGC0LDRgtGD0YEgPSDQv9GDLtC80L7QtNGD0LvQuC7RgdGC0LDRgtGD0YEo0L3QvtC80LXRgCk7CiAgICAgICAgaWYgKNGB0YLQsNGC0YPRgSkKICAgICAgICB7CiAgICAgICAgICAgIGFsZXJ0KCLQntCo0JjQkdCa0JAg0KPQtNCw0LvQuNGC0Ywg0LzQvtC20L3QviDQu9C40YjRjCDQvdC10LjRgdC/0L7Qu9C90Y/QtdC80YvQuSDQvNC+0LTRg9C70YwiKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyDQo9C00LDQu9C40YLRjCDQstGL0LHRgNCw0L3QvdGL0Lkg0LzQvtC00YPQu9GMLgogICAgICAgINC80YPRgNC+0Lwu0LzQvtC00YPQu9C4LnNwbGljZSjQvdC+0LzQtdGALCAxKTsKICAgICAgICAtLdC90L7QvNC10YA7CiAgICAgICAgaWYgKNC90L7QvNC10YAgPCAwKQogICAgICAgIHsKICAgICAgICAgICAg0L3QvtC80LXRgCA9IDA7CiAgICAgICAgfQogICAgICAgIHZhciDQvNC+0LTRg9C70LggPSDQv9GDLtGB0L/QuNGB0L7QutCc0L7QtNGD0LvQtdC5KCk7CiAgICAgICAg0YHQv9C40YHQvtC6LtC30LDQtNCw0YLRjNCh0L/QuNGB0L7QuijQvNC+0LTRg9C70LgpOwogICAgICAgINGB0L/QuNGB0L7Qui7QstGL0LHRgNCw0YLRjCjQvdC+0LzQtdGAKTsKICAgIH0KICAgINGB0LLQvtC50YHRgtCy0LAu0YPQtNCw0LvQuNGC0Ywu0L/QvtC00L/QuNGB0LDRgtGMKNGD0LTQsNC70LjRgtGM0JzQvtC00YPQu9GMKTsKICAgIAogICAgZnVuY3Rpb24g0YHQvtGF0YDQsNC90LjRgtGM0JLRi9Cx0YDQsNC90L3Ri9C50JzQvtC00YPQu9GMKCkKICAgIHsKICAgICAgICB2YXIg0LzQvtC00YPQu9GMID0g0LzRg9GA0L7QvC7QvNC+0LTRg9C70Lhb0YHQv9C40YHQvtC6LtCy0YvQsdC+0YBdOwogICAgICAgIHZhciDQutC+0LQgPSDQvNGD0YDQvtC8LtGA0LXQtNCw0LrRgtC+0YAuc2Vzc2lvbi5nZXRWYWx1ZSgpOwogICAgICAgINC80L7QtNGD0LvRjFsxXSA9INC80YPRgNC+0LwuYnRvYSjQutC+0LQpOwogICAgfQogICAgZnVuY3Rpb24g0YHQvtGF0YDQsNC90LjRgtGMKCkKICAgIHsKICAgICAgICDQv9GDLtC60L3QvtC/0LrQsNCh0L7RhdGA0LDQvdC40YLRjC5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgbG9jYWxmb3JhZ2Uuc2V0SXRlbSgibW9kdWxlcyIsINC80YPRgNC+0Lwu0LzQvtC00YPQu9C4LCBmdW5jdGlvbijQvtGI0LjQsdC60LAsINC30L3QsNGH0LXQvdC40LUpewogICAgICAgICAgICDQv9GDLtC60L3QvtC/0LrQsNCh0L7RhdGA0LDQvdC40YLRjC5kaXNhYmxlZCA9IGZhbHNlOwogICAgICAgICAgICBpZiAo0L7RiNC40LHQutCwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCLQndC1INGD0LTQsNC70L7RgdGMINGB0L7RhdGA0LDQvdC40YLRjCDQvNC+0LTRg9C70Lg6ICciICsg0L7RiNC40LHQutCwICsgIiciKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQogICAg0L/Rgy7RgdC+0YXRgNCw0L3QuNGC0Ywu0L/QvtC00L/QuNGB0LDRgtGM0JzQvdC+0LPQvihbCiAgICAgICAg0YHQvtGF0YDQsNC90LjRgtGM0JLRi9Cx0YDQsNC90L3Ri9C50JzQvtC00YPQu9GMLAogICAgICAgINGB0L7RhdGA0LDQvdC40YLRjCwKICAgIF0pOwoKICAgIC8vIEhvdyB0byBjcmVhdGUgYSBmaWxlIGluIG1lbW9yeSBmb3IgdXNlciB0byBkb3dubG9hZCwgYnV0IG5vdCB0aHJvdWdoIHNlcnZlcj8KICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8xODE5NzM0MQogICAgZnVuY3Rpb24g0YHQutCw0YfQsNGC0YwoKQogICAgewogICAgICAgIHZhciDRgdC+0LTQtdGA0LbQuNC80L7QtSA9INC80YPRgNC+0Lwu0YTQsNC50Lsu0L3QsNGH0LDQu9C+OwogICAgICAgIGZvciAodmFyINC90L7QvNC10YAgaW4g0LzRg9GA0L7QvC7QvNC+0LTRg9C70LgpCiAgICAgICAgewogICAgICAgICAgICB2YXIg0LzQvtC00YPQu9GMID0g0LzRg9GA0L7QvC7QvNC+0LTRg9C70Lhb0L3QvtC80LXRgF07CiAgICAgICAgICAgIHZhciDQuNC80Y8gPSDQvNC+0LTRg9C70YxbMF07CiAgICAgICAgICAgIHZhciDQutC+0LQ2NCA9INC80L7QtNGD0LvRjFsxXTsKICAgICAgICAgICAgdmFyINGB0LLQvtC50YHRgtCy0LAgPSDQvNC+0LTRg9C70Lgu0YHQstC+0LnRgdGC0LLQsCjQvdC+0LzQtdGAKTsKICAgICAgICAgICAg0YHQvtC00LXRgNC20LjQvNC+0LUgKz0KYAoKWwoiYCArINC40LzRjyArIGAiLAoiYCArINC60L7QtDY0ICsgYCIsCmAKKwpKU09OLnN0cmluZ2lmeSjRgdCy0L7QudGB0YLQstCwKQorCmAKXSwKYAo7CiAgICAgICAgfQogICAgICAgINGB0L7QtNC10YDQttC40LzQvtC1ICs9INC80YPRgNC+0Lwu0YTQsNC50Lsu0LrQvtC90LXRhjsKICAgICAgICDRgdC+0LTQtdGA0LbQuNC80L7QtSA9INC80YPRgNC+0LwuYnRvYSjRgdC+0LTQtdGA0LbQuNC80L7QtSk7CiAgICAKICAgICAgICB2YXIg0YHRgdGL0LvRjCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKICAgICAgICDRgdGB0YvQu9GMLnNldEF0dHJpYnV0ZSgiaHJlZiIsICJkYXRhOnRleHQvaHRtbDtjaGFyc2V0PXV0Zi04O2Jhc2U2NCwiICsg0YHQvtC00LXRgNC20LjQvNC+0LUpOwogICAgICAgIHZhciDQuNC80Y8gPSDQv9GDLtC40LzRj9Ck0LDQudC70LAoKTsKICAgICAgICDRgdGB0YvQu9GMLnNldEF0dHJpYnV0ZSgiZG93bmxvYWQiLCDQuNC80Y8pOwogICAgICAgINGB0YHRi9C70Ywuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKNGB0YHRi9C70YwpOwogICAgICAgINGB0YHRi9C70YwuY2xpY2soKTsKICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKNGB0YHRi9C70YwpOwogICAgfQogICAg0L/Rgy7RgdC60LDRh9Cw0YLRjC7Qv9C+0LTQv9C40YHQsNGC0Ywo0YHQutCw0YfQsNGC0YwpOwoKICAgIC8vINCf0YDQuCDQt9Cw0L/Rg9GB0LrQtS4KICAgINGB0L/QuNGB0L7Qui7QstGL0LHRgNCw0YLRjCgwKTsKfQoKLyoKICoKICog0J/Rg9GB0LoKICoKICovCgppZiAod2luZG93LmxvY2F0aW9uLnNlYXJjaCA9PSAiPzAiKQp7CiAgICBjb25zb2xlLmRlYnVnKCLQl9Cw0L/Rg9GB0Log0L/QsNC90LXQu9C4INGD0L/RgNCw0LLQu9C10L3QuNGPIik7CiAgICDQt9Cw0LTQsNGC0YzQktC90LXRiNC90LjQudCS0LjQtCgpOwogICAg0LfQsNC/0YPRgdGC0LjRgtGM0J/QoygpOwogICAgY29uc29sZS5kZWJ1Zygi0J/QsNC90LXQu9GMINGD0L/RgNCw0LLQu9C10L3QuNGPINC30LDQv9GD0YnQtdC90LAiKQp9",
  28. {"status":true}
  29. ],
  30. [
  31. "функции",
  32. "LyoKICoKICog0J/QvtC70YPRh9C40YLRjCDQvNC+0LTRg9C70Ywg0L/QviDQuNC80LXQvdC4CiAqCiAqLwpmdW5jdGlvbiDQvNC+0LTRg9C70Ywo0LjQvNGPKQp7CiAgICBmb3IgKHZhciDQvdC+0LzQtdGAIGluINC80YPRgNC+0Lwu0LzQvtC00YPQu9C4KQogICAgewogICAgICAgIHZhciDQvCA9INC80YPRgNC+0Lwu0LzQvtC00YPQu9C4W9C90L7QvNC10YBdOwogICAgICAgIGlmICjQvFswXSA9PSDQuNC80Y8pCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4g0Lw7CiAgICAgICAgfQogICAgfQogICAgCiAgICByZXR1cm4gbnVsbDsKfQoKLyoKICoKICog0JfQsNCz0YDRg9C30LjRgtGMINGB0YLQvtGA0L7QvdC90LjQuSDRgdC60YDQuNC/0YIg0LIg0YLRjdCzIHNjcmlwdAogKgogKi8KZnVuY3Rpb24g0LfQsNCz0YDRg9C30LjRgtGM0KHQutGA0LjQv9GCKNC60L7QtCkKewogICAgdmFyINGB0LrRgNC40L/RgiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpOwogICAg0YHQutGA0LjQv9GCLmlubmVySFRNTCA9INC60L7QtDsKICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQo0YHQutGA0LjQv9GCKTsKfQoKLyoKICoKICog0KPQstC10LTQvtC80LjRgtGMINC+0LEg0L7QsdGL0YfQvdC+0Lwg0L/Rg9GB0LrQtQogKgogKi8K0LzRg9GA0L7QvC7QvtCx0YvRh9C90YvQudCf0YPRgdC6ID0gbmV3INCj0LLQtdC00L7QvNC40YLQtdC70YwoKTsK0LzRg9GA0L7QvC7Qv9GD0YHQui7Qv9C+0LTQv9C40YHQsNGC0YwoZnVuY3Rpb24oKXsKICAgIGlmICh3aW5kb3cubG9jYXRpb24uc2VhcmNoICE9ICI/MCIpCiAgICB7CiAgICAgICAg0LzRg9GA0L7QvC7QvtCx0YvRh9C90YvQudCf0YPRgdC6LtGD0LLQtdC00L7QvNC40YLRjCgpOwogICAgfQp9KTsKCi8qCiAqCiAqINCh0L7Qt9C00LDRgtGMINGN0LrRgNCw0L0g0LjQvdGC0LXRgNGE0LXQudGB0LAKICoKICovCmZ1bmN0aW9uINGB0L7Qt9C00LDRgtGM0K3QutGA0LDQvSjQuNC80Y8pCnsKICAgIHZhciDRjdC60YDQsNC9ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICDRjdC60YDQsNC9LmlkID0g0LjQvNGPOwogICAg0Y3QutGA0LDQvS5zdHlsZS5jc3NUZXh0ID0KYApwb3NpdGlvbjogZml4ZWQ7CmxlZnQ6IDA7CnRvcDogMDsKcmlnaHQ6IDA7CmJvdHRvbTogMDsKcG9pbnRlci1ldmVudHM6IGFsbDsKYDsKICAgIHJldHVybiDRjdC60YDQsNC9Owp9CgovKgogKgogKiDQlNC+0LbQtNCw0YLRjNGB0Y8g0YPQstC10LTQvtC80LvQtdC90LjRjyDQvtGCINC90LXRgdC60L7Qu9GM0LrQuNGFINGD0LLQtdC00L7QvNC40YLQtdC70LXQuQogKgogKi8KZnVuY3Rpb24g0LTQvtC20LTQsNGC0YzRgdGPKNGD0LLQtdC00L7QvNC40YLQtdC70LgsINGE0YPQvdC60YbQuNGPKQp7CiAgICB2YXIg0YHRh9GR0YLRh9C40LogPSAwOwogICAgZnVuY3Rpb24g0LLRi9C/0L7Qu9C90LjRgtGMKCkKICAgIHsKICAgICAgICBpZiAoKyvRgdGH0ZHRgtGH0LjQuiA9PSDRg9Cy0LXQtNC+0LzQuNGC0LXQu9C4Lmxlbmd0aCkKICAgICAgICB7CiAgICAgICAgICAgINGE0YPQvdC60YbQuNGPKCk7CiAgICAgICAgfQogICAgfQogICAgZm9yICh2YXIg0L3QvtC80LXRgCBpbiDRg9Cy0LXQtNC+0LzQuNGC0LXQu9C4KQogICAgewogICAgICAgIHZhciDRg9Cy0LXQtNC+0LzQuNGC0LXQu9GMID0g0YPQstC10LTQvtC80LjRgtC10LvQuFvQvdC+0LzQtdGAXTsKICAgICAgICDRg9Cy0LXQtNC+0LzQuNGC0LXQu9GMLtC/0L7QtNC/0LjRgdCw0YLRjCjQstGL0L/QvtC70L3QuNGC0YwpOwogICAgfQp9CgovKgogKgogKiDQmNC80Y8g0LjRgdC/0L7Qu9C90Y/QtdC80L7Qs9C+INC/0YDRj9C80L4g0YHQtdC50YfQsNGBINGE0LDQudC70LAgSFRNTAogKgogKi8KZnVuY3Rpb24g0LjQvNGP0KTQsNC50LvQsCgpCnsKICAgIHZhciDQv9GD0YLRjCA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZTsKICAgIHZhciDQuNC80Y8gPSDQv9GD0YLRjC5zcGxpdCgiLyIpLnBvcCgpOwogICAgcmV0dXJuIGRlY29kZVVSSSjQuNC80Y8pOwp9CgovKgogKgogKiDQoNCw0LfQvtCx0YDQsNGC0Ywg0LDRgNCz0YPQvNC10L3RgtGLINC/0YDQuCDQvtCx0YvRh9C90L7QvCDQv9GD0YHQutC1CiAqCiAqLwrQvNGD0YDQvtC8LtCw0YDQs9GD0LzQtdC90YLRiyA9IHt9OwrQvNGD0YDQvtC8LtCw0YDQs9GD0LzQtdC90YLRi9CY0LfQvNC10L3QuNC70LggPSBuZXcg0KPQstC10LTQvtC80LjRgtC10LvRjCgpOwpmdW5jdGlvbiDRgNCw0LfQvtCx0YDQsNGC0YzQkNGA0LPRg9C80LXQvdGC0YsoKQp7CiAgICB2YXIg0LfQsNC/0YDQvtGBID0gd2luZG93LmxvY2F0aW9uLnNlYXJjaC5zdWJzdHJpbmcoMSk7CiAgICB2YXIg0LDRgNCz0LggPSDQt9Cw0L/RgNC+0YEuc3BsaXQoIiYiKTsKICAgIGZvciAodmFyINC90L7QvNC10YAgaW4g0LDRgNCz0LgpCiAgICB7CiAgICAgICAgdmFyINCw0YDQsyA9INCw0YDQs9C4W9C90L7QvNC10YBdOwogICAgICAgIHZhciDQv9C+0LfQuNGG0LjRj9CX0L3QsNC60LAgPSDQsNGA0LMuaW5kZXhPZigiPSIpOwogICAgICAgIC8vINCb0LjRiNGMINC60LvRjtGHLgogICAgICAgIGlmICjQv9C+0LfQuNGG0LjRj9CX0L3QsNC60LAgPT0gLTEpCiAgICAgICAgewogICAgICAgICAgICB2YXIg0LrQu9GO0YcgPSBkZWNvZGVVUklDb21wb25lbnQo0LDRgNCzKTsKICAgICAgICAgICAg0LzRg9GA0L7QvC7QsNGA0LPRg9C80LXQvdGC0Ytb0LrQu9GO0YddID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgLy8g0JrQu9GO0Ycg0YHQviDQt9C90LDRh9C10L3QuNC10LwuCiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgdmFyINGB0YvRgNC+0LnQmtC70Y7RhyA9INCw0YDQsy5zbGljZSgwLCDQv9C+0LfQuNGG0LjRj9CX0L3QsNC60LApOwogICAgICAgICAgICB2YXIg0YHRi9GA0L7QtdCX0L3QsNGH0LXQvdC40LUgPSDQsNGA0LMuc2xpY2Uo0L/QvtC30LjRhtC40Y/Ql9C90LDQutCwICsgMSk7CiAgICAgICAgICAgIHZhciDQutC70Y7RhyA9IGRlY29kZVVSSUNvbXBvbmVudCjRgdGL0YDQvtC50JrQu9GO0YcpOwogICAgICAgICAgICB2YXIg0LfQvdCw0YfQtdC90LjQtSA9IGRlY29kZVVSSUNvbXBvbmVudCjRgdGL0YDQvtC10JfQvdCw0YfQtdC90LjQtSk7CiAgICAgICAgICAgINC80YPRgNC+0Lwu0LDRgNCz0YPQvNC10L3RgtGLW9C60LvRjtGHXSA9INC30L3QsNGH0LXQvdC40LU7CiAgICAgICAgfQogICAgfQogICAg0LzRg9GA0L7QvC7QsNGA0LPRg9C80LXQvdGC0YvQmNC30LzQtdC90LjQu9C4LtGD0LLQtdC00L7QvNC40YLRjCgpOwp9CtC80YPRgNC+0Lwu0L7QsdGL0YfQvdGL0LnQn9GD0YHQui7Qv9C+0LTQv9C40YHQsNGC0Ywo0YDQsNC30L7QsdGA0LDRgtGM0JDRgNCz0YPQvNC10L3RgtGLKTsKCi8qCiAqCiAqINCh0LLRj9C30LDRgtGMINGD0LLQtdC00L7QvNC70LXQvdC40LUg0Lgg0YTRg9C90LrRhtC40Y4g0LIg0LHQvtC70LXQtSDRh9C40YLQsNC10LzQvtC8INCy0LjQtNC1CiAqCiAqLwrQv9GA0LggPSBmdW5jdGlvbijRg9Cy0LXQtNC+0LzQu9C10L3QuNC1LCDRhNGD0L3QutGG0LjRjykKewogICAg0YPQstC10LTQvtC80LvQtdC90LjQtS7Qv9C+0LTQv9C40YHQsNGC0Ywo0YTRg9C90LrRhtC40Y8pOwp9",
  33. {"status":true}
  34. ],
  35. [
  36. "uikit.min.css_3.2.0",
  37. "LyohIFVJa2l0IDMuMi4wIHwgaHR0cDovL3d3dy5nZXR1aWtpdC5jb20gfCAoYykgMjAxNCAtIDIwMTkgWU9PdGhlbWUgfCBNSVQgTGljZW5zZSAqL2h0bWx7Zm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsIlNlZ29lIFVJIixSb2JvdG8sIkhlbHZldGljYSBOZXVlIixBcmlhbCwiTm90byBTYW5zIixzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIiwiU2Vnb2UgVUkgU3ltYm9sIiwiTm90byBDb2xvciBFbW9qaSI7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNTstd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzY2Nn1ib2R5e21hcmdpbjowfWE6YWN0aXZlLGE6aG92ZXJ7b3V0bGluZTowfS51ay1saW5rLGF7Y29sb3I6IzFlODdmMDt0ZXh0LWRlY29yYXRpb246bm9uZTtjdXJzb3I6cG9pbnRlcn0udWstbGluay10b2dnbGU6Zm9jdXMgLnVrLWxpbmssLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLC51ay1saW5rOmhvdmVyLGE6aG92ZXJ7Y29sb3I6IzBmNmVjZDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfWFiYnJbdGl0bGVde3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkOy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uLXN0eWxlOmRvdHRlZH1iLHN0cm9uZ3tmb250LXdlaWdodDpib2xkZXJ9Om5vdChwcmUpPmNvZGUsOm5vdChwcmUpPmtiZCw6bm90KHByZSk+c2FtcHtmb250LWZhbWlseTpDb25zb2xhcyxtb25hY28sbW9ub3NwYWNlO2ZvbnQtc2l6ZTouODc1cmVtO2NvbG9yOiNmMDUwNmU7d2hpdGUtc3BhY2U6bm93cmFwO3BhZGRpbmc6MnB4IDZweDtiYWNrZ3JvdW5kOiNmOGY4Zjh9ZW17Y29sb3I6I2YwNTA2ZX1pbnN7YmFja2dyb3VuZDojZmZkO2NvbG9yOiM2NjY7dGV4dC1kZWNvcmF0aW9uOm5vbmV9bWFya3tiYWNrZ3JvdW5kOiNmZmQ7Y29sb3I6IzY2Nn1xe2ZvbnQtc3R5bGU6aXRhbGljfXNtYWxse2ZvbnQtc2l6ZTo4MCV9c3ViLHN1cHtmb250LXNpemU6NzUlO2xpbmUtaGVpZ2h0OjA7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9c3Vwe3RvcDotLjVlbX1zdWJ7Ym90dG9tOi0uMjVlbX1hdWRpbyxjYW52YXMsaWZyYW1lLGltZyxzdmcsdmlkZW97dmVydGljYWwtYWxpZ246bWlkZGxlfWNhbnZhcyxpbWcsdmlkZW97bWF4LXdpZHRoOjEwMCU7aGVpZ2h0OmF1dG87Ym94LXNpemluZzpib3JkZXItYm94fUBzdXBwb3J0cyAoZGlzcGxheTpibG9jayl7c3Zne21heC13aWR0aDoxMDAlO2hlaWdodDphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveH19c3ZnOm5vdCg6cm9vdCl7b3ZlcmZsb3c6aGlkZGVufWltZzpub3QoW3NyY10pe21pbi13aWR0aDoxcHg7dmlzaWJpbGl0eTpoaWRkZW59aWZyYW1le2JvcmRlcjowfWFkZHJlc3MsZGwsZmllbGRzZXQsZmlndXJlLG9sLHAscHJlLHVse21hcmdpbjowIDAgMjBweCAwfSorYWRkcmVzcywqK2RsLCorZmllbGRzZXQsKitmaWd1cmUsKitvbCwqK3AsKitwcmUsKit1bHttYXJnaW4tdG9wOjIwcHh9LnVrLWgxLC51ay1oMiwudWstaDMsLnVrLWg0LC51ay1oNSwudWstaDYsLnVrLWhlYWRpbmctMnhsYXJnZSwudWstaGVhZGluZy1sYXJnZSwudWstaGVhZGluZy1tZWRpdW0sLnVrLWhlYWRpbmctc21hbGwsLnVrLWhlYWRpbmcteGxhcmdlLGgxLGgyLGgzLGg0LGg1LGg2e21hcmdpbjowIDAgMjBweCAwO2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCJTZWdvZSBVSSIsUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsQXJpYWwsIk5vdG8gU2FucyIsc2Fucy1zZXJpZiwiQXBwbGUgQ29sb3IgRW1vamkiLCJTZWdvZSBVSSBFbW9qaSIsIlNlZ29lIFVJIFN5bWJvbCIsIk5vdG8gQ29sb3IgRW1vamkiO2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojMzMzO3RleHQtdHJhbnNmb3JtOm5vbmV9KisudWstaDEsKisudWstaDIsKisudWstaDMsKisudWstaDQsKisudWstaDUsKisudWstaDYsKisudWstaGVhZGluZy0yeGxhcmdlLCorLnVrLWhlYWRpbmctbGFyZ2UsKisudWstaGVhZGluZy1tZWRpdW0sKisudWstaGVhZGluZy1zbWFsbCwqKy51ay1oZWFkaW5nLXhsYXJnZSwqK2gxLCoraDIsKitoMywqK2g0LCoraDUsKitoNnttYXJnaW4tdG9wOjQwcHh9LnVrLWgxLGgxe2ZvbnQtc2l6ZToyLjIzMTI1cmVtO2xpbmUtaGVpZ2h0OjEuMn0udWstaDIsaDJ7Zm9udC1zaXplOjEuN3JlbTtsaW5lLWhlaWdodDoxLjN9LnVrLWgzLGgze2ZvbnQtc2l6ZToxLjVyZW07bGluZS1oZWlnaHQ6MS40fS51ay1oNCxoNHtmb250LXNpemU6MS4yNXJlbTtsaW5lLWhlaWdodDoxLjR9LnVrLWg1LGg1e2ZvbnQtc2l6ZToxNnB4O2xpbmUtaGVpZ2h0OjEuNH0udWstaDYsaDZ7Zm9udC1zaXplOi44NzVyZW07bGluZS1oZWlnaHQ6MS40fUBtZWRpYSAobWluLXdpZHRoOjk2MHB4KXsudWstaDEsaDF7Zm9udC1zaXplOjIuNjI1cmVtfS51ay1oMixoMntmb250LXNpemU6MnJlbX19b2wsdWx7cGFkZGluZy1sZWZ0OjMwcHh9b2w+bGk+b2wsb2w+bGk+dWwsdWw+bGk+b2wsdWw+bGk+dWx7bWFyZ2luOjB9ZHR7Zm9udC13ZWlnaHQ6NzAwfWRke21hcmdpbi1sZWZ0OjB9LnVrLWhyLGhye292ZXJmbG93OnZpc2libGU7dGV4dC1hbGlnbjppbmhlcml0O21hcmdpbjowIDAgMjBweCAwO2JvcmRlcjowO2JvcmRlci10b3A6MXB4IHNvbGlkICNlNWU1ZTV9KisudWstaHIsKitocnttYXJnaW4tdG9wOjIwcHh9YWRkcmVzc3tmb250LXN0eWxlOm5vcm1hbH1ibG9ja3F1b3Rle21hcmdpbjowIDAgMjBweCAwO2ZvbnQtc2l6ZToxLjI1cmVtO2xpbmUtaGVpZ2h0OjEuNTtmb250LXN0eWxlOml0YWxpYztjb2xvcjojMzMzfSorYmxvY2txdW90ZXttYXJnaW4tdG9wOjIwcHh9YmxvY2txdW90ZSBwOmxhc3Qtb2YtdHlwZXttYXJnaW4tYm90dG9tOjB9YmxvY2txdW90ZSBmb290ZXJ7bWFyZ2luLXRvcDoxMHB4O2ZvbnQtc2l6ZTouODc1cmVtO2xpbmUtaGVpZ2h0OjEuNTtjb2xvcjojNjY2fWJsb2NrcXVvdGUgZm9vdGVyOjpiZWZvcmV7Y29udGVudDoi0YLQkNCkICJ9cHJle2ZvbnQ6Ljg3NXJlbS8xLjUgQ29uc29sYXMsbW9uYWNvLG1vbm9zcGFjZTtjb2xvcjojNjY2Oy1tb3otdGFiLXNpemU6NDt0YWItc2l6ZTo0O292ZXJmbG93OmF1dG87cGFkZGluZzoxMHB4O2JvcmRlcjoxcHggc29saWQgI2U1ZTVlNTtib3JkZXItcmFkaXVzOjNweDtiYWNrZ3JvdW5kOiNmZmZ9cHJlIGNvZGV7Zm9udC1mYW1pbHk6Q29uc29sYXMsbW9uYWNvLG1vbm9zcGFjZX06OnNlbGVjdGlvbntiYWNrZ3JvdW5kOiMzOWY7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzpub25lfWRldGFpbHMsbWFpbntkaXNwbGF5OmJsb2NrfXN1bW1hcnl7ZGlzcGxheTpsaXN0LWl0ZW19dGVtcGxhdGV7ZGlzcGxheTpub25lfS51ay1icmVha3BvaW50LXM6OmJlZm9yZXtjb250ZW50Oic2NDBweCd9LnVrLWJyZWFrcG9pbnQtbTo6YmVmb3Jle2NvbnRlbnQ6Jzk2MHB4J30udWstYnJlYWtwb2ludC1sOjpiZWZvcmV7Y29udGVudDonMTIwMHB4J30udWstYnJlYWtwb2ludC14bDo6YmVmb3Jle2NvbnRlbnQ6JzE2MDBweCd9OnJvb3R7LS11ay1icmVha3BvaW50LXM6NjQwcHg7LS11ay1icmVha3BvaW50LW06OTYwcHg7LS11ay1icmVha3BvaW50LWw6MTIwMHB4Oy0tdWstYnJlYWtwb2ludC14bDoxNjAwcHh9LnVrLWxpbmstbXV0ZWQgYSxhLnVrLWxpbmstbXV0ZWR7Y29sb3I6Izk5OX0udWstbGluay1tdXRlZCBhOmhvdmVyLC51ay1saW5rLXRvZ2dsZTpmb2N1cyAudWstbGluay1tdXRlZCwudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstbXV0ZWQsYS51ay1saW5rLW11dGVkOmhvdmVye2NvbG9yOiM2NjZ9LnVrLWxpbmstdGV4dCBhLGEudWstbGluay10ZXh0e2NvbG9yOmluaGVyaXR9LnVrLWxpbmstdGV4dCBhOmhvdmVyLC51ay1saW5rLXRvZ2dsZTpmb2N1cyAudWstbGluay10ZXh0LC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay10ZXh0LGEudWstbGluay10ZXh0OmhvdmVye2NvbG9yOiM5OTl9LnVrLWxpbmstaGVhZGluZyBhLGEudWstbGluay1oZWFkaW5ne2NvbG9yOmluaGVyaXR9LnVrLWxpbmstaGVhZGluZyBhOmhvdmVyLC51ay1saW5rLXRvZ2dsZTpmb2N1cyAudWstbGluay1oZWFkaW5nLC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay1oZWFkaW5nLGEudWstbGluay1oZWFkaW5nOmhvdmVye2NvbG9yOiMxZTg3ZjA7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnVrLWxpbmstcmVzZXQgYSxhLnVrLWxpbmstcmVzZXR7Y29sb3I6aW5oZXJpdCFpbXBvcnRhbnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmUhaW1wb3J0YW50fS51ay1saW5rLXRvZ2dsZXtjb2xvcjppbmhlcml0IWltcG9ydGFudDt0ZXh0LWRlY29yYXRpb246bm9uZSFpbXBvcnRhbnR9LnVrLWxpbmstdG9nZ2xlOmZvY3Vze291dGxpbmU6MH0udWstaGVhZGluZy1zbWFsbHtmb250LXNpemU6Mi42cmVtO2xpbmUtaGVpZ2h0OjEuMn0udWstaGVhZGluZy1tZWRpdW17Zm9udC1zaXplOjIuODg3NXJlbTtsaW5lLWhlaWdodDoxLjF9LnVrLWhlYWRpbmctbGFyZ2V7Zm9udC1zaXplOjMuNHJlbTtsaW5lLWhlaWdodDoxLjF9LnVrLWhlYWRpbmcteGxhcmdle2ZvbnQtc2l6ZTo0cmVtO2xpbmUtaGVpZ2h0OjF9LnVrLWhlYWRpbmctMnhsYXJnZXtmb250LXNpemU6NnJlbTtsaW5lLWhlaWdodDoxfUBtZWRpYSAobWluLXdpZHRoOjk2MHB4KXsudWstaGVhZGluZy1zbWFsbHtmb250LXNpemU6My4yNXJlbX0udWstaGVhZGluZy1tZWRpdW17Zm9udC1zaXplOjMuNXJlbX0udWstaGVhZGluZy1sYXJnZXtmb250LXNpemU6NHJlbX0udWstaGVhZGluZy14bGFyZ2V7Zm9udC1zaXplOjZyZW19LnVrLWhlYWRpbmctMnhsYXJnZXtmb250LXNpemU6OHJlbX19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsudWstaGVhZGluZy1tZWRpdW17Zm9udC1zaXplOjRyZW19LnVrLWhlYWRpbmctbGFyZ2V7Zm9udC1zaXplOjZyZW19LnVrLWhlYWRpbmcteGxhcmdle2ZvbnQtc2l6ZTo4cmVtfS51ay1oZWFkaW5nLTJ4bGFyZ2V7Zm9udC1zaXplOjExcmVtfX0udWstaGVhZGluZy1kaXZpZGVye3BhZGRpbmctYm90dG9tOmNhbGMoNXB4ICsgLjFlbSk7Ym9yZGVyLWJvdHRvbTpjYWxjKC4ycHggKyAuMDVlbSkgc29saWQgI2U1ZTVlNX0udWstaGVhZGluZy1idWxsZXR7cG9zaXRpb246cmVsYXRpdmV9LnVrLWhlYWRpbmctYnVsbGV0OjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6Y2FsYygtLjEgKiAxZW0pO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtoZWlnaHQ6Y2FsYyg0cHggKyAuN2VtKTttYXJnaW4tcmlnaHQ6Y2FsYyg1cHggKyAuMmVtKTtib3JkZXItbGVmdDpjYWxjKDVweCArIC4xZW0pIHNvbGlkICNlNWU1ZTV9LnVrLWhlYWRpbmctbGluZXtvdmVyZmxvdzpoaWRkZW59LnVrLWhlYWRpbmctbGluZT4qe2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlfS51ay1oZWFkaW5nLWxpbmU+OjphZnRlciwudWstaGVhZGluZy1saW5lPjo6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7dG9wOmNhbGMoNTAlIC0gKCguMnB4ICsgLjA1ZW0pLyAyKSk7d2lkdGg6MjAwMHB4O2JvcmRlci1ib3R0b206Y2FsYyguMnB4ICsgLjA1ZW0pIHNvbGlkICNlNWU1ZTV9LnVrLWhlYWRpbmctbGluZT46OmJlZm9yZXtyaWdodDoxMDAlO21hcmdpbi1yaWdodDpjYWxjKDVweCArIC4zZW0pfS51ay1oZWFkaW5nLWxpbmU+OjphZnRlcntsZWZ0OjEwMCU7bWFyZ2luLWxlZnQ6Y2FsYyg1cHggKyAuM2VtKX1bY2xhc3MqPXVrLWRpdmlkZXJde2JvcmRlcjpub25lO21hcmdpbi1ib3R0b206MjBweH0qK1tjbGFzcyo9dWstZGl2aWRlcl17bWFyZ2luLXRvcDoyMHB4fS51ay1kaXZpZGVyLWljb257cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OjIwcHg7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMjAlMjIlMjBoZWlnaHQlM0QlMjIyMCUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDIwJTIwMjAlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ2NpcmNsZSUyMGZpbGwlM0QlMjJub25lJTIyJTIwc3Ryb2tlJTNEJTIyJTIzZTVlNWU1JTIyJTIwc3Ryb2tlLXdpZHRoJTNEJTIyMiUyMiUyMGN4JTNEJTIyMTAlMjIlMjBjeSUzRCUyMjEwJTIyJTIwciUzRCUyMjclMjIlMjAlMkYlM0UlMEElM0MlMkZzdmclM0UlMEEiKTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCUgNTAlfS51ay1kaXZpZGVyLWljb246OmFmdGVyLC51ay1kaXZpZGVyLWljb246OmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bWF4LXdpZHRoOmNhbGMoNTAlIC0gKDUwcHggLyAyKSk7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2U1ZTVlNX0udWstZGl2aWRlci1pY29uOjpiZWZvcmV7cmlnaHQ6Y2FsYyg1MCUgKyAoNTBweCAvIDIpKTt3aWR0aDoxMDAlfS51ay1kaXZpZGVyLWljb246OmFmdGVye2xlZnQ6Y2FsYyg1MCUgKyAoNTBweCAvIDIpKTt3aWR0aDoxMDAlfS51ay1kaXZpZGVyLXNtYWxse2xpbmUtaGVpZ2h0OjB9LnVrLWRpdmlkZXItc21hbGw6OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTAwcHg7bWF4LXdpZHRoOjEwMCU7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U1ZTVlNTt2ZXJ0aWNhbC1hbGlnbjp0b3B9LnVrLWRpdmlkZXItdmVydGljYWx7d2lkdGg6MXB4O2hlaWdodDoxMDBweDttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDphdXRvO2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZTVlNWU1fS51ay1saXN0e3BhZGRpbmc6MDtsaXN0LXN0eWxlOm5vbmV9LnVrLWxpc3Q+bGk6OmFmdGVyLC51ay1saXN0PmxpOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OnRhYmxlfS51ay1saXN0PmxpOjphZnRlcntjbGVhcjpib3RofS51ay1saXN0PmxpPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0udWstbGlzdCB1bHttYXJnaW46MDtwYWRkaW5nLWxlZnQ6MzBweDtsaXN0LXN0eWxlOm5vbmV9LnVrLWxpc3Q+bGk6bnRoLWNoaWxkKG4rMiksLnVrLWxpc3Q+bGk+dWx7bWFyZ2luLXRvcDoxMHB4fS51ay1saXN0LWRpdmlkZXI+bGk6bnRoLWNoaWxkKG4rMil7bWFyZ2luLXRvcDoxMHB4O3BhZGRpbmctdG9wOjEwcHg7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U1ZTVlNX0udWstbGlzdC1zdHJpcGVkPmxpe3BhZGRpbmc6MTBweCAxMHB4fS51ay1saXN0LXN0cmlwZWQ+bGk6bnRoLW9mLXR5cGUob2RkKXtib3JkZXItdG9wOjFweCBzb2xpZCAjZTVlNWU1O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlNWU1ZTV9LnVrLWxpc3Qtc3RyaXBlZD5saTpudGgtb2YtdHlwZShvZGQpe2JhY2tncm91bmQ6I2Y4ZjhmOH0udWstbGlzdC1zdHJpcGVkPmxpOm50aC1jaGlsZChuKzIpe21hcmdpbi10b3A6MH0udWstbGlzdC1idWxsZXQ+bGl7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZy1sZWZ0OmNhbGMoMS41ZW0gKyAxMHB4KX0udWstbGlzdC1idWxsZXQ+bGk6OmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDt3aWR0aDoxLjVlbTtoZWlnaHQ6MS41ZW07YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyNiUyMiUyMGhlaWdodCUzRCUyMjYlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjA2JTIwNiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDY2lyY2xlJTIwZmlsbCUzRCUyMiUyMzY2NiUyMiUyMGN4JTNEJTIyMyUyMiUyMGN5JTNEJTIyMyUyMiUyMHIlM0QlMjIzJTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFIik7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtcG9zaXRpb246NTAlIDUwJTtkaXNwbGF5OmJsb2NrfS51ay1saXN0LWxhcmdlPmxpOm50aC1jaGlsZChuKzIpLC51ay1saXN0LWxhcmdlPmxpPnVse21hcmdpbi10b3A6MjBweH0udWstbGlzdC1sYXJnZS51ay1saXN0LWRpdmlkZXI+bGk6bnRoLWNoaWxkKG4rMil7bWFyZ2luLXRvcDoyMHB4O3BhZGRpbmctdG9wOjIwcHh9LnVrLWxpc3QtbGFyZ2UudWstbGlzdC1zdHJpcGVkPmxpe3BhZGRpbmc6MjBweCAxMHB4fS51ay1saXN0LWxhcmdlLnVrLWxpc3Qtc3RyaXBlZD5saTpudGgtb2YtdHlwZShvZGQpe2JvcmRlci10b3A6MXB4IHNvbGlkICNlNWU1ZTU7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2U1ZTVlNX0udWstbGlzdC1sYXJnZS51ay1saXN0LXN0cmlwZWQ+bGk6bnRoLWNoaWxkKG4rMil7bWFyZ2luLXRvcDowfS51ay1kZXNjcmlwdGlvbi1saXN0PmR0e2NvbG9yOiMzMzM7Zm9udC1zaXplOi44NzVyZW07Zm9udC13ZWlnaHQ6NDAwO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0udWstZGVzY3JpcHRpb24tbGlzdD5kdDpudGgtY2hpbGQobisyKXttYXJnaW4tdG9wOjIwcHh9LnVrLWRlc2NyaXB0aW9uLWxpc3QtZGl2aWRlcj5kdDpudGgtY2hpbGQobisyKXttYXJnaW4tdG9wOjIwcHg7cGFkZGluZy10b3A6MjBweDtib3JkZXItdG9wOjFweCBzb2xpZCAjZTVlNWU1fS51ay10YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MDt3aWR0aDoxMDAlO21hcmdpbi1ib3R0b206MjBweH0qKy51ay10YWJsZXttYXJnaW4tdG9wOjIwcHh9LnVrLXRhYmxlIHRoe3BhZGRpbmc6MTZweCAxMnB4O3RleHQtYWxpZ246bGVmdDt2ZXJ0aWNhbC1hbGlnbjpib3R0b207Zm9udC1zaXplOi44NzVyZW07Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiM5OTk7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfS51ay10YWJsZSB0ZHtwYWRkaW5nOjE2cHggMTJweDt2ZXJ0aWNhbC1hbGlnbjp0b3B9LnVrLXRhYmxlIHRkPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0udWstdGFibGUgdGZvb3R7Zm9udC1zaXplOi44NzVyZW19LnVrLXRhYmxlIGNhcHRpb257Zm9udC1zaXplOi44NzVyZW07dGV4dC1hbGlnbjpsZWZ0O2NvbG9yOiM5OTl9LnVrLXRhYmxlLW1pZGRsZSwudWstdGFibGUtbWlkZGxlIHRke3ZlcnRpY2FsLWFsaWduOm1pZGRsZSFpbXBvcnRhbnR9LnVrLXRhYmxlLWRpdmlkZXI+OmZpcnN0LWNoaWxkPnRyOm5vdCg6Zmlyc3QtY2hpbGQpLC51ay10YWJsZS1kaXZpZGVyPjpub3QoOmZpcnN0LWNoaWxkKT50ciwudWstdGFibGUtZGl2aWRlcj50cjpub3QoOmZpcnN0LWNoaWxkKXtib3JkZXItdG9wOjFweCBzb2xpZCAjZTVlNWU1fS51ay10YWJsZS1zdHJpcGVkIHRib2R5IHRyOm50aC1vZi10eXBlKG9kZCksLnVrLXRhYmxlLXN0cmlwZWQ+dHI6bnRoLW9mLXR5cGUob2RkKXtiYWNrZ3JvdW5kOiNmOGY4Zjg7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U1ZTVlNTtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTVlNWU1fS51ay10YWJsZS1ob3ZlciB0Ym9keSB0cjpob3ZlciwudWstdGFibGUtaG92ZXI+dHI6aG92ZXJ7YmFja2dyb3VuZDojZmZkfS51ay10YWJsZSB0Ym9keSB0ci51ay1hY3RpdmUsLnVrLXRhYmxlPnRyLnVrLWFjdGl2ZXtiYWNrZ3JvdW5kOiNmZmR9LnVrLXRhYmxlLXNtYWxsIHRkLC51ay10YWJsZS1zbWFsbCB0aHtwYWRkaW5nOjEwcHggMTJweH0udWstdGFibGUtbGFyZ2UgdGQsLnVrLXRhYmxlLWxhcmdlIHRoe3BhZGRpbmc6MjJweCAxMnB4fS51ay10YWJsZS1qdXN0aWZ5IHRkOmZpcnN0LWNoaWxkLC51ay10YWJsZS1qdXN0aWZ5IHRoOmZpcnN0LWNoaWxke3BhZGRpbmctbGVmdDowfS51ay10YWJsZS1qdXN0aWZ5IHRkOmxhc3QtY2hpbGQsLnVrLXRhYmxlLWp1c3RpZnkgdGg6bGFzdC1jaGlsZHtwYWRkaW5nLXJpZ2h0OjB9LnVrLXRhYmxlLXNocmlua3t3aWR0aDoxcHh9LnVrLXRhYmxlLWV4cGFuZHttaW4td2lkdGg6MTUwcHh9LnVrLXRhYmxlLWxpbmt7cGFkZGluZzowIWltcG9ydGFudH0udWstdGFibGUtbGluaz5he2Rpc3BsYXk6YmxvY2s7cGFkZGluZzoxNnB4IDEycHh9LnVrLXRhYmxlLXNtYWxsIC51ay10YWJsZS1saW5rPmF7cGFkZGluZzoxMHB4IDEycHh9QG1lZGlhIChtYXgtd2lkdGg6OTU5cHgpey51ay10YWJsZS1yZXNwb25zaXZlLC51ay10YWJsZS1yZXNwb25zaXZlIHRib2R5LC51ay10YWJsZS1yZXNwb25zaXZlIHRkLC51ay10YWJsZS1yZXNwb25zaXZlIHRoLC51ay10YWJsZS1yZXNwb25zaXZlIHRye2Rpc3BsYXk6YmxvY2t9LnVrLXRhYmxlLXJlc3BvbnNpdmUgdGhlYWR7ZGlzcGxheTpub25lfS51ay10YWJsZS1yZXNwb25zaXZlIHRkLC51ay10YWJsZS1yZXNwb25zaXZlIHRoe3dpZHRoOmF1dG8haW1wb3J0YW50O21heC13aWR0aDpub25lIWltcG9ydGFudDttaW4td2lkdGg6MCFpbXBvcnRhbnQ7b3ZlcmZsb3c6dmlzaWJsZSFpbXBvcnRhbnQ7d2hpdGUtc3BhY2U6bm9ybWFsIWltcG9ydGFudH0udWstdGFibGUtcmVzcG9uc2l2ZSAudWstdGFibGUtbGluazpub3QoOmZpcnN0LWNoaWxkKT5hLC51ay10YWJsZS1yZXNwb25zaXZlIHRkOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCgudWstdGFibGUtbGluayksLnVrLXRhYmxlLXJlc3BvbnNpdmUgdGg6bm90KDpmaXJzdC1jaGlsZCk6bm90KC51ay10YWJsZS1saW5rKXtwYWRkaW5nLXRvcDo1cHghaW1wb3J0YW50fS51ay10YWJsZS1yZXNwb25zaXZlIC51ay10YWJsZS1saW5rOm5vdCg6bGFzdC1jaGlsZCk+YSwudWstdGFibGUtcmVzcG9uc2l2ZSB0ZDpub3QoOmxhc3QtY2hpbGQpOm5vdCgudWstdGFibGUtbGluayksLnVrLXRhYmxlLXJlc3BvbnNpdmUgdGg6bm90KDpsYXN0LWNoaWxkKTpub3QoLnVrLXRhYmxlLWxpbmspe3BhZGRpbmctYm90dG9tOjVweCFpbXBvcnRhbnR9LnVrLXRhYmxlLWp1c3RpZnkudWstdGFibGUtcmVzcG9uc2l2ZSB0ZCwudWstdGFibGUtanVzdGlmeS51ay10YWJsZS1yZXNwb25zaXZlIHRoe3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MH19LnVrLXRhYmxlIHRib2R5IHRye3RyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAuMXMgbGluZWFyfS51ay1pY29ue21hcmdpbjowO2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6MDtvdmVyZmxvdzp2aXNpYmxlO2ZvbnQ6aW5oZXJpdDtjb2xvcjppbmhlcml0O3RleHQtdHJhbnNmb3JtOm5vbmU7cGFkZGluZzowO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmlsbDpjdXJyZW50Y29sb3I7bGluZS1oZWlnaHQ6MH1idXR0b24udWstaWNvbjpub3QoOmRpc2FibGVkKXtjdXJzb3I6cG9pbnRlcn0udWstaWNvbjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MDtwYWRkaW5nOjB9LnVrLWljb246bm90KC51ay1wcmVzZXJ2ZSkgW2ZpbGwqPScjJ106bm90KC51ay1wcmVzZXJ2ZSl7ZmlsbDpjdXJyZW50Y29sb3J9LnVrLWljb246bm90KC51ay1wcmVzZXJ2ZSkgW3N0cm9rZSo9JyMnXTpub3QoLnVrLXByZXNlcnZlKXtzdHJva2U6Y3VycmVudGNvbG9yfS51ay1pY29uPip7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApfS51ay1pY29uLWltYWdle3dpZHRoOjIwcHg7aGVpZ2h0OjIwcHg7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCUgNTAlO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6Y29udGFpbjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LnVrLWljb24tbGlua3tjb2xvcjojOTk5fS51ay1pY29uLWxpbms6Zm9jdXMsLnVrLWljb24tbGluazpob3Zlcntjb2xvcjojNjY2O291dGxpbmU6MH0udWstYWN0aXZlPi51ay1pY29uLWxpbmssLnVrLWljb24tbGluazphY3RpdmV7Y29sb3I6IzU5NTk1OX0udWstaWNvbi1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjM2cHg7aGVpZ2h0OjM2cHg7Ym9yZGVyLXJhZGl1czo1MDBweDtiYWNrZ3JvdW5kOiNmOGY4Zjg7Y29sb3I6Izk5OTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt0cmFuc2l0aW9uOi4xcyBlYXNlLWluLW91dDt0cmFuc2l0aW9uLXByb3BlcnR5OmNvbG9yLGJhY2tncm91bmQtY29sb3J9LnVrLWljb24tYnV0dG9uOmZvY3VzLC51ay1pY29uLWJ1dHRvbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlYmViZWI7Y29sb3I6IzY2NjtvdXRsaW5lOjB9LnVrLWFjdGl2ZT4udWstaWNvbi1idXR0b24sLnVrLWljb24tYnV0dG9uOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiNkZmRmZGY7Y29sb3I6IzY2Nn0udWstcmFuZ2V7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbjowO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTttYXgtd2lkdGg6MTAwJTt3aWR0aDoxMDAlOy13ZWJraXQtYXBwZWFyYW5jZTpub25lO2JhY2tncm91bmQ6MCAwO3BhZGRpbmc6MH0udWstcmFuZ2U6Zm9jdXN7b3V0bGluZTowfS51ay1yYW5nZTo6LW1vei1mb2N1cy1vdXRlcntib3JkZXI6bm9uZX0udWstcmFuZ2U6Oi1tcy10cmFja3toZWlnaHQ6MTVweDtiYWNrZ3JvdW5kOjAgMDtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7Y29sb3I6dHJhbnNwYXJlbnR9LnVrLXJhbmdlOm5vdCg6ZGlzYWJsZWQpOjotd2Via2l0LXNsaWRlci10aHVtYntjdXJzb3I6cG9pbnRlcn0udWstcmFuZ2U6bm90KDpkaXNhYmxlZCk6Oi1tb3otcmFuZ2UtdGh1bWJ7Y3Vyc29yOnBvaW50ZXJ9LnVrLXJhbmdlOm5vdCg6ZGlzYWJsZWQpOjotbXMtdGh1bWJ7Y3Vyc29yOnBvaW50ZXJ9LnVrLXJhbmdlOjotd2Via2l0LXNsaWRlci10aHVtYnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTttYXJnaW4tdG9wOi03cHg7aGVpZ2h0OjE1cHg7d2lkdGg6MTVweDtib3JkZXItcmFkaXVzOjUwMHB4O2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNjY2N9LnVrLXJhbmdlOjotbW96LXJhbmdlLXRodW1ie2JvcmRlcjpub25lO2hlaWdodDoxNXB4O3dpZHRoOjE1cHg7Ym9yZGVyLXJhZGl1czo1MDBweDtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjY2NjfS51ay1yYW5nZTo6LW1zLXRodW1ie21hcmdpbi10b3A6MH0udWstcmFuZ2U6Oi1tcy10aHVtYntib3JkZXI6bm9uZTtoZWlnaHQ6MTVweDt3aWR0aDoxNXB4O2JvcmRlci1yYWRpdXM6NTAwcHg7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjY30udWstcmFuZ2U6Oi1tcy10b29sdGlwe2Rpc3BsYXk6bm9uZX0udWstcmFuZ2U6Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNre2hlaWdodDozcHg7YmFja2dyb3VuZDojZWJlYmViO2JvcmRlci1yYWRpdXM6NTAwcHh9LnVrLXJhbmdlOmFjdGl2ZTo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2ssLnVrLXJhbmdlOmZvY3VzOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja3tiYWNrZ3JvdW5kOiNkMmQyZDJ9LnVrLXJhbmdlOjotbW96LXJhbmdlLXRyYWNre2hlaWdodDozcHg7YmFja2dyb3VuZDojZWJlYmViO2JvcmRlci1yYWRpdXM6NTAwcHh9LnVrLXJhbmdlOmZvY3VzOjotbW96LXJhbmdlLXRyYWNre2JhY2tncm91bmQ6I2QyZDJkMn0udWstcmFuZ2U6Oi1tcy1maWxsLWxvd2VyLC51ay1yYW5nZTo6LW1zLWZpbGwtdXBwZXJ7aGVpZ2h0OjNweDtiYWNrZ3JvdW5kOiNlYmViZWI7Ym9yZGVyLXJhZGl1czo1MDBweH0udWstcmFuZ2U6Zm9jdXM6Oi1tcy1maWxsLWxvd2VyLC51ay1yYW5nZTpmb2N1czo6LW1zLWZpbGwtdXBwZXJ7YmFja2dyb3VuZDojZDJkMmQyfS51ay1jaGVja2JveCwudWstaW5wdXQsLnVrLXJhZGlvLC51ay1zZWxlY3QsLnVrLXRleHRhcmVhe2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MDtib3JkZXItcmFkaXVzOjA7Zm9udDppbmhlcml0fS51ay1pbnB1dHtvdmVyZmxvdzp2aXNpYmxlfS51ay1zZWxlY3R7dGV4dC10cmFuc2Zvcm06bm9uZX0udWstc2VsZWN0IG9wdGdyb3Vwe2ZvbnQ6aW5oZXJpdDtmb250LXdlaWdodDo3MDB9LnVrLXRleHRhcmVhe292ZXJmbG93OmF1dG99LnVrLWlucHV0W3R5cGU9c2VhcmNoXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbiwudWstaW5wdXRbdHlwZT1zZWFyY2hdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfS51ay1pbnB1dFt0eXBlPW51bWJlcl06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sLnVrLWlucHV0W3R5cGU9bnVtYmVyXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbntoZWlnaHQ6YXV0b30udWstaW5wdXQ6Oi1tb3otcGxhY2Vob2xkZXIsLnVrLXRleHRhcmVhOjotbW96LXBsYWNlaG9sZGVye29wYWNpdHk6MX0udWstY2hlY2tib3g6bm90KDpkaXNhYmxlZCksLnVrLXJhZGlvOm5vdCg6ZGlzYWJsZWQpe2N1cnNvcjpwb2ludGVyfS51ay1maWVsZHNldHtib3JkZXI6bm9uZTttYXJnaW46MDtwYWRkaW5nOjB9LnVrLWlucHV0LC51ay10ZXh0YXJlYXstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX0udWstaW5wdXQsLnVrLXNlbGVjdCwudWstdGV4dGFyZWF7bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJTtib3JkZXI6MCBub25lO3BhZGRpbmc6MCAxMHB4O2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojNjY2O2JvcmRlcjoxcHggc29saWQgI2U1ZTVlNTt0cmFuc2l0aW9uOi4ycyBlYXNlLWluLW91dDt0cmFuc2l0aW9uLXByb3BlcnR5OmNvbG9yLGJhY2tncm91bmQtY29sb3IsYm9yZGVyfS51ay1pbnB1dCwudWstc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpub3QoW3NpemVdKXtoZWlnaHQ6NDBweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZGlzcGxheTppbmxpbmUtYmxvY2t9LnVrLWlucHV0Om5vdChpbnB1dCksLnVrLXNlbGVjdDpub3Qoc2VsZWN0KXtsaW5lLWhlaWdodDozOHB4fS51ay1zZWxlY3RbbXVsdGlwbGVdLC51ay1zZWxlY3Rbc2l6ZV0sLnVrLXRleHRhcmVhe3BhZGRpbmctdG9wOjRweDtwYWRkaW5nLWJvdHRvbTo0cHg7dmVydGljYWwtYWxpZ246dG9wfS51ay1pbnB1dDpmb2N1cywudWstc2VsZWN0OmZvY3VzLC51ay10ZXh0YXJlYTpmb2N1c3tvdXRsaW5lOjA7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiM2NjY7Ym9yZGVyLWNvbG9yOiMxZTg3ZjB9LnVrLWlucHV0OmRpc2FibGVkLC51ay1zZWxlY3Q6ZGlzYWJsZWQsLnVrLXRleHRhcmVhOmRpc2FibGVke2JhY2tncm91bmQtY29sb3I6I2Y4ZjhmODtjb2xvcjojOTk5O2JvcmRlci1jb2xvcjojZTVlNWU1fS51ay1pbnB1dDo6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiM5OTkhaW1wb3J0YW50fS51ay1pbnB1dDo6cGxhY2Vob2xkZXJ7Y29sb3I6Izk5OX0udWstdGV4dGFyZWE6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjojOTk5IWltcG9ydGFudH0udWstdGV4dGFyZWE6OnBsYWNlaG9sZGVye2NvbG9yOiM5OTl9LnVrLWZvcm0tc21hbGx7Zm9udC1zaXplOi44NzVyZW19LnVrLWZvcm0tc21hbGw6bm90KHRleHRhcmVhKTpub3QoW211bHRpcGxlXSk6bm90KFtzaXplXSl7aGVpZ2h0OjMwcHg7cGFkZGluZy1sZWZ0OjhweDtwYWRkaW5nLXJpZ2h0OjhweH0udWstZm9ybS1zbWFsbDpub3Qoc2VsZWN0KTpub3QoaW5wdXQpOm5vdCh0ZXh0YXJlYSl7bGluZS1oZWlnaHQ6MjhweH0udWstZm9ybS1sYXJnZXtmb250LXNpemU6MS4yNXJlbX0udWstZm9ybS1sYXJnZTpub3QodGV4dGFyZWEpOm5vdChbbXVsdGlwbGVdKTpub3QoW3NpemVdKXtoZWlnaHQ6NTVweDtwYWRkaW5nLWxlZnQ6MTJweDtwYWRkaW5nLXJpZ2h0OjEycHh9LnVrLWZvcm0tbGFyZ2U6bm90KHNlbGVjdCk6bm90KGlucHV0KTpub3QodGV4dGFyZWEpe2xpbmUtaGVpZ2h0OjUzcHh9LnVrLWZvcm0tZGFuZ2VyLC51ay1mb3JtLWRhbmdlcjpmb2N1c3tjb2xvcjojZjA1MDZlO2JvcmRlci1jb2xvcjojZjA1MDZlfS51ay1mb3JtLXN1Y2Nlc3MsLnVrLWZvcm0tc3VjY2Vzczpmb2N1c3tjb2xvcjojMzJkMjk2O2JvcmRlci1jb2xvcjojMzJkMjk2fS51ay1mb3JtLWJsYW5re2JhY2tncm91bmQ6MCAwO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudH0udWstZm9ybS1ibGFuazpmb2N1c3tib3JkZXItY29sb3I6I2U1ZTVlNTtib3JkZXItc3R5bGU6ZGFzaGVkfWlucHV0LnVrLWZvcm0td2lkdGgteHNtYWxse3dpZHRoOjUwcHh9c2VsZWN0LnVrLWZvcm0td2lkdGgteHNtYWxse3dpZHRoOjc1cHh9LnVrLWZvcm0td2lkdGgtc21hbGx7d2lkdGg6MTMwcHh9LnVrLWZvcm0td2lkdGgtbWVkaXVte3dpZHRoOjIwMHB4fS51ay1mb3JtLXdpZHRoLWxhcmdle3dpZHRoOjUwMHB4fS51ay1zZWxlY3Q6bm90KFttdWx0aXBsZV0pOm5vdChbc2l6ZV0pey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO3BhZGRpbmctcmlnaHQ6MjBweDtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnJTIwd2lkdGglM0QlMjIyNCUyMiUyMGhlaWdodCUzRCUyMjE2JTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMjQlMjAxNiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM2NjYlMjIlMjBwb2ludHMlM0QlMjIxMiUyMDElMjA5JTIwNiUyMDE1JTIwNiUyMiUyMCUyRiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNjY2JTIyJTIwcG9pbnRzJTNEJTIyMTIlMjAxMyUyMDklMjA4JTIwMTUlMjA4JTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBIik7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtcG9zaXRpb246MTAwJSA1MCV9LnVrLXNlbGVjdDpub3QoW211bHRpcGxlXSk6bm90KFtzaXplXSk6Oi1tcy1leHBhbmR7ZGlzcGxheTpub25lfS51ay1zZWxlY3Q6bm90KFttdWx0aXBsZV0pOm5vdChbc2l6ZV0pIG9wdGlvbntjb2xvcjojNDQ0fS51ay1zZWxlY3Q6bm90KFttdWx0aXBsZV0pOm5vdChbc2l6ZV0pOmRpc2FibGVke2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD1VVEYtOCwlM0NzdmclMjB3aWR0aCUzRCUyMjI0JTIyJTIwaGVpZ2h0JTNEJTIyMTYlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAyNCUyMDE2JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlMEElMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzk5OSUyMiUyMHBvaW50cyUzRCUyMjEyJTIwMSUyMDklMjA2JTIwMTUlMjA2JTIyJTIwJTJGJTNFJTBBJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM5OTklMjIlMjBwb2ludHMlM0QlMjIxMiUyMDEzJTIwOSUyMDglMjAxNSUyMDglMjIlMjAlMkYlM0UlMEElM0MlMkZzdmclM0UlMEEiKX0udWstaW5wdXRbbGlzdF17cGFkZGluZy1yaWdodDoyMHB4O2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXBvc2l0aW9uOjEwMCUgNTAlfS51ay1pbnB1dFtsaXN0XTpmb2N1cywudWstaW5wdXRbbGlzdF06aG92ZXJ7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMjQlMjIlMjBoZWlnaHQlM0QlMjIxNiUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDI0JTIwMTYlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNjY2JTIyJTIwcG9pbnRzJTNEJTIyMTIlMjAxMiUyMDglMjA2JTIwMTYlMjA2JTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBIil9LnVrLWlucHV0W2xpc3RdOjotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3J7ZGlzcGxheTpub25lfS51ay1jaGVja2JveCwudWstcmFkaW97ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjE2cHg7d2lkdGg6MTZweDtvdmVyZmxvdzpoaWRkZW47bWFyZ2luLXRvcDotNHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJSA1MCU7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO3RyYW5zaXRpb246LjJzIGVhc2UtaW4tb3V0O3RyYW5zaXRpb24tcHJvcGVydHk6YmFja2dyb3VuZC1jb2xvcixib3JkZXJ9LnVrLXJhZGlve2JvcmRlci1yYWRpdXM6NTAlfS51ay1jaGVja2JveDpmb2N1cywudWstcmFkaW86Zm9jdXN7b3V0bGluZTowO2JvcmRlci1jb2xvcjojMWU4N2YwfS51ay1jaGVja2JveDpjaGVja2VkLC51ay1jaGVja2JveDppbmRldGVybWluYXRlLC51ay1yYWRpbzpjaGVja2Vke2JhY2tncm91bmQtY29sb3I6IzFlODdmMDtib3JkZXItY29sb3I6dHJhbnNwYXJlbnR9LnVrLWNoZWNrYm94OmNoZWNrZWQ6Zm9jdXMsLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGU6Zm9jdXMsLnVrLXJhZGlvOmNoZWNrZWQ6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjojMGU2ZGNkfS51ay1yYWRpbzpjaGVja2Vke2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD1VVEYtOCwlM0NzdmclMjB3aWR0aCUzRCUyMjE2JTIyJTIwaGVpZ2h0JTNEJTIyMTYlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxNiUyMDE2JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlMEElMjAlMjAlMjAlMjAlM0NjaXJjbGUlMjBmaWxsJTNEJTIyJTIzZmZmJTIyJTIwY3glM0QlMjI4JTIyJTIwY3klM0QlMjI4JTIyJTIwciUzRCUyMjIlMjIlMjAlMkYlM0UlMEElM0MlMkZzdmclM0UiKX0udWstY2hlY2tib3g6Y2hlY2tlZHtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnJTIwd2lkdGglM0QlMjIxNCUyMiUyMGhlaWdodCUzRCUyMjExJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTQlMjAxMSUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNmZmYlMjIlMjBwb2ludHMlM0QlMjIxMiUyMDElMjA1JTIwNy41JTIwMiUyMDUlMjAxJTIwNS41JTIwNSUyMDEwJTIwMTMlMjAxLjUlMjIlMjAlMkYlM0UlMEElM0MlMkZzdmclM0UlMEEiKX0udWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZXtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnJTIwd2lkdGglM0QlMjIxNiUyMiUyMGhlaWdodCUzRCUyMjE2JTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTYlMjAxNiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjNmZmYlMjIlMjB4JTNEJTIyMyUyMiUyMHklM0QlMjI4JTIyJTIwd2lkdGglM0QlMjIxMCUyMiUyMGhlaWdodCUzRCUyMjElMjIlMjAlMkYlM0UlMEElM0MlMkZzdmclM0UiKX0udWstY2hlY2tib3g6ZGlzYWJsZWQsLnVrLXJhZGlvOmRpc2FibGVke2JhY2tncm91bmQtY29sb3I6I2Y4ZjhmODtib3JkZXItY29sb3I6I2U1ZTVlNX0udWstcmFkaW86ZGlzYWJsZWQ6Y2hlY2tlZHtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnJTIwd2lkdGglM0QlMjIxNiUyMiUyMGhlaWdodCUzRCUyMjE2JTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTYlMjAxNiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDY2lyY2xlJTIwZmlsbCUzRCUyMiUyMzk5OSUyMiUyMGN4JTNEJTIyOCUyMiUyMGN5JTNEJTIyOCUyMiUyMHIlM0QlMjIyJTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFIil9LnVrLWNoZWNrYm94OmRpc2FibGVkOmNoZWNrZWR7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMTQlMjIlMjBoZWlnaHQlM0QlMjIxMSUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDE0JTIwMTElMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTk5JTIyJTIwcG9pbnRzJTNEJTIyMTIlMjAxJTIwNSUyMDcuNSUyMDIlMjA1JTIwMSUyMDUuNSUyMDUlMjAxMCUyMDEzJTIwMS41JTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBIil9LnVrLWNoZWNrYm94OmRpc2FibGVkOmluZGV0ZXJtaW5hdGV7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMTYlMjIlMjBoZWlnaHQlM0QlMjIxNiUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDE2JTIwMTYlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3JlY3QlMjBmaWxsJTNEJTIyJTIzOTk5JTIyJTIweCUzRCUyMjMlMjIlMjB5JTNEJTIyOCUyMiUyMHdpZHRoJTNEJTIyMTAlMjIlMjBoZWlnaHQlM0QlMjIxJTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFIil9LnVrLWxlZ2VuZHt3aWR0aDoxMDAlO2NvbG9yOmluaGVyaXQ7cGFkZGluZzowO2ZvbnQtc2l6ZToxLjVyZW07bGluZS1oZWlnaHQ6MS40fS51ay1mb3JtLWN1c3RvbXtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTttYXgtd2lkdGg6MTAwJTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LnVrLWZvcm0tY3VzdG9tIGlucHV0W3R5cGU9ZmlsZV0sLnVrLWZvcm0tY3VzdG9tIHNlbGVjdHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt6LWluZGV4OjE7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtsZWZ0OjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7b3BhY2l0eTowO2N1cnNvcjpwb2ludGVyfS51ay1mb3JtLWN1c3RvbSBpbnB1dFt0eXBlPWZpbGVde2ZvbnQtc2l6ZTo1MDBweDtvdmVyZmxvdzpoaWRkZW59LnVrLWZvcm0tbGFiZWx7Y29sb3I6IzMzMztmb250LXNpemU6Ljg3NXJlbX0udWstZm9ybS1zdGFja2VkIC51ay1mb3JtLWxhYmVse2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo1cHh9QG1lZGlhIChtYXgtd2lkdGg6OTU5cHgpey51ay1mb3JtLWhvcml6b250YWwgLnVrLWZvcm0tbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjVweH19QG1lZGlhIChtaW4td2lkdGg6OTYwcHgpey51ay1mb3JtLWhvcml6b250YWwgLnVrLWZvcm0tbGFiZWx7d2lkdGg6MjAwcHg7bWFyZ2luLXRvcDo3cHg7ZmxvYXQ6bGVmdH0udWstZm9ybS1ob3Jpem9udGFsIC51ay1mb3JtLWNvbnRyb2xze21hcmdpbi1sZWZ0OjIxNXB4fS51ay1mb3JtLWhvcml6b250YWwgLnVrLWZvcm0tY29udHJvbHMtdGV4dHtwYWRkaW5nLXRvcDo3cHh9fS51ay1mb3JtLWljb257cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3dpZHRoOjQwcHg7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtjb2xvcjojOTk5fS51ay1mb3JtLWljb246aG92ZXJ7Y29sb3I6IzY2Nn0udWstZm9ybS1pY29uOm5vdChhKTpub3QoYnV0dG9uKTpub3QoaW5wdXQpe3BvaW50ZXItZXZlbnRzOm5vbmV9LnVrLWZvcm0taWNvbjpub3QoLnVrLWZvcm0taWNvbi1mbGlwKX4udWstaW5wdXR7cGFkZGluZy1sZWZ0OjQwcHghaW1wb3J0YW50fS51ay1mb3JtLWljb24tZmxpcHtyaWdodDowO2xlZnQ6YXV0b30udWstZm9ybS1pY29uLWZsaXB+LnVrLWlucHV0e3BhZGRpbmctcmlnaHQ6NDBweCFpbXBvcnRhbnR9LnVrLWJ1dHRvbnttYXJnaW46MDtib3JkZXI6bm9uZTtvdmVyZmxvdzp2aXNpYmxlO2ZvbnQ6aW5oZXJpdDtjb2xvcjppbmhlcml0O3RleHQtdHJhbnNmb3JtOm5vbmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MCAzMHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtmb250LXNpemU6Ljg3NXJlbTtsaW5lLWhlaWdodDozOHB4O3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTt0cmFuc2l0aW9uOi4xcyBlYXNlLWluLW91dDt0cmFuc2l0aW9uLXByb3BlcnR5OmNvbG9yLGJhY2tncm91bmQtY29sb3IsYm9yZGVyLWNvbG9yfS51ay1idXR0b246bm90KDpkaXNhYmxlZCl7Y3Vyc29yOnBvaW50ZXJ9LnVrLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MDtwYWRkaW5nOjB9LnVrLWJ1dHRvbjpob3Zlcnt0ZXh0LWRlY29yYXRpb246bm9uZX0udWstYnV0dG9uOmZvY3Vze291dGxpbmU6MH0udWstYnV0dG9uLWRlZmF1bHR7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjojMzMzO2JvcmRlcjoxcHggc29saWQgI2U1ZTVlNX0udWstYnV0dG9uLWRlZmF1bHQ6Zm9jdXMsLnVrLWJ1dHRvbi1kZWZhdWx0OmhvdmVye2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Y29sb3I6IzMzMztib3JkZXItY29sb3I6I2IyYjJiMn0udWstYnV0dG9uLWRlZmF1bHQudWstYWN0aXZlLC51ay1idXR0b24tZGVmYXVsdDphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjojMzMzO2JvcmRlci1jb2xvcjojOTk5fS51ay1idXR0b24tcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiMxZTg3ZjA7Y29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50fS51ay1idXR0b24tcHJpbWFyeTpmb2N1cywudWstYnV0dG9uLXByaW1hcnk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMGY3YWU1O2NvbG9yOiNmZmZ9LnVrLWJ1dHRvbi1wcmltYXJ5LnVrLWFjdGl2ZSwudWstYnV0dG9uLXByaW1hcnk6YWN0aXZle2JhY2tncm91bmQtY29sb3I6IzBlNmRjZDtjb2xvcjojZmZmfS51ay1idXR0b24tc2Vjb25kYXJ5e2JhY2tncm91bmQtY29sb3I6IzIyMjtjb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnR9LnVrLWJ1dHRvbi1zZWNvbmRhcnk6Zm9jdXMsLnVrLWJ1dHRvbi1zZWNvbmRhcnk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMTUxNTE1O2NvbG9yOiNmZmZ9LnVrLWJ1dHRvbi1zZWNvbmRhcnkudWstYWN0aXZlLC51ay1idXR0b24tc2Vjb25kYXJ5OmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwODA4MDg7Y29sb3I6I2ZmZn0udWstYnV0dG9uLWRhbmdlcntiYWNrZ3JvdW5kLWNvbG9yOiNmMDUwNmU7Y29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50fS51ay1idXR0b24tZGFuZ2VyOmZvY3VzLC51ay1idXR0b24tZGFuZ2VyOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2VlMzk1Yjtjb2xvcjojZmZmfS51ay1idXR0b24tZGFuZ2VyLnVrLWFjdGl2ZSwudWstYnV0dG9uLWRhbmdlcjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojZWMyMTQ3O2NvbG9yOiNmZmZ9LnVrLWJ1dHRvbi1kYW5nZXI6ZGlzYWJsZWQsLnVrLWJ1dHRvbi1kZWZhdWx0OmRpc2FibGVkLC51ay1idXR0b24tcHJpbWFyeTpkaXNhYmxlZCwudWstYnV0dG9uLXNlY29uZGFyeTpkaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2NvbG9yOiM5OTk7Ym9yZGVyLWNvbG9yOiNlNWU1ZTV9LnVrLWJ1dHRvbi1zbWFsbHtwYWRkaW5nOjAgMTVweDtsaW5lLWhlaWdodDoyOHB4O2ZvbnQtc2l6ZTouODc1cmVtfS51ay1idXR0b24tbGFyZ2V7cGFkZGluZzowIDQwcHg7bGluZS1oZWlnaHQ6NTNweDtmb250LXNpemU6Ljg3NXJlbX0udWstYnV0dG9uLXRleHR7cGFkZGluZzowO2xpbmUtaGVpZ2h0OjEuNTtiYWNrZ3JvdW5kOjAgMDtjb2xvcjojMzMzO3Bvc2l0aW9uOnJlbGF0aXZlfS51ay1idXR0b24tdGV4dDo6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjEwMCU7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzMzMzt0cmFuc2l0aW9uOnJpZ2h0IC4zcyBlYXNlLW91dH0udWstYnV0dG9uLXRleHQ6Zm9jdXMsLnVrLWJ1dHRvbi10ZXh0OmhvdmVye2NvbG9yOiMzMzN9LnVrLWJ1dHRvbi10ZXh0OmZvY3VzOjpiZWZvcmUsLnVrLWJ1dHRvbi10ZXh0OmhvdmVyOjpiZWZvcmV7cmlnaHQ6MH0udWstYnV0dG9uLXRleHQ6ZGlzYWJsZWR7Y29sb3I6Izk5OX0udWstYnV0dG9uLXRleHQ6ZGlzYWJsZWQ6OmJlZm9yZXtkaXNwbGF5Om5vbmV9LnVrLWJ1dHRvbi1saW5re3BhZGRpbmc6MDtsaW5lLWhlaWdodDoxLjU7YmFja2dyb3VuZDowIDA7Y29sb3I6IzFlODdmMH0udWstYnV0dG9uLWxpbms6Zm9jdXMsLnVrLWJ1dHRvbi1saW5rOmhvdmVye2NvbG9yOiMwZjZlY2Q7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0udWstYnV0dG9uLWxpbms6ZGlzYWJsZWR7Y29sb3I6Izk5OTt0ZXh0LWRlY29yYXRpb246bm9uZX0udWstYnV0dG9uLWdyb3Vwe2Rpc3BsYXk6aW5saW5lLWZsZXg7dmVydGljYWwtYWxpZ246bWlkZGxlO3Bvc2l0aW9uOnJlbGF0aXZlfS51ay1idXR0b24tZ3JvdXA+LnVrLWJ1dHRvbjpudGgtY2hpbGQobisyKSwudWstYnV0dG9uLWdyb3VwPmRpdjpudGgtY2hpbGQobisyKSAudWstYnV0dG9ue21hcmdpbi1sZWZ0Oi0xcHh9LnVrLWJ1dHRvbi1ncm91cCAudWstYnV0dG9uLnVrLWFjdGl2ZSwudWstYnV0dG9uLWdyb3VwIC51ay1idXR0b246YWN0aXZlLC51ay1idXR0b24tZ3JvdXAgLnVrLWJ1dHRvbjpmb2N1cywudWstYnV0dG9uLWdyb3VwIC51ay1idXR0b246aG92ZXJ7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoxfS51ay1zZWN0aW9ue2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nLXRvcDo0MHB4O3BhZGRpbmctYm90dG9tOjQwcHh9QG1lZGlhIChtaW4td2lkdGg6OTYwcHgpey51ay1zZWN0aW9ue3BhZGRpbmctdG9wOjcwcHg7cGFkZGluZy1ib3R0b206NzBweH19LnVrLXNlY3Rpb246OmFmdGVyLC51ay1zZWN0aW9uOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OnRhYmxlfS51ay1zZWN0aW9uOjphZnRlcntjbGVhcjpib3RofS51ay1zZWN0aW9uPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0udWstc2VjdGlvbi14c21hbGx7cGFkZGluZy10b3A6MjBweDtwYWRkaW5nLWJvdHRvbToyMHB4fS51ay1zZWN0aW9uLXNtYWxse3BhZGRpbmctdG9wOjQwcHg7cGFkZGluZy1ib3R0b206NDBweH0udWstc2VjdGlvbi1sYXJnZXtwYWRkaW5nLXRvcDo3MHB4O3BhZGRpbmctYm90dG9tOjcwcHh9QG1lZGlhIChtaW4td2lkdGg6OTYwcHgpey51ay1zZWN0aW9uLWxhcmdle3BhZGRpbmctdG9wOjE0MHB4O3BhZGRpbmctYm90dG9tOjE0MHB4fX0udWstc2VjdGlvbi14bGFyZ2V7cGFkZGluZy10b3A6MTQwcHg7cGFkZGluZy1ib3R0b206MTQwcHh9QG1lZGlhIChtaW4td2lkdGg6OTYwcHgpey51ay1zZWN0aW9uLXhsYXJnZXtwYWRkaW5nLXRvcDoyMTBweDtwYWRkaW5nLWJvdHRvbToyMTBweH19LnVrLXNlY3Rpb24tZGVmYXVsdHtiYWNrZ3JvdW5kOiNmZmZ9LnVrLXNlY3Rpb24tbXV0ZWR7YmFja2dyb3VuZDojZjhmOGY4fS51ay1zZWN0aW9uLXByaW1hcnl7YmFja2dyb3VuZDojMWU4N2YwfS51ay1zZWN0aW9uLXNlY29uZGFyeXtiYWNrZ3JvdW5kOiMyMjJ9LnVrLWNvbnRhaW5lcntib3gtc2l6aW5nOmNvbnRlbnQtYm94O21heC13aWR0aDoxMjAwcHg7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6YXV0bztwYWRkaW5nLWxlZnQ6MTVweDtwYWRkaW5nLXJpZ2h0OjE1cHh9QG1lZGlhIChtaW4td2lkdGg6NjQwcHgpey51ay1jb250YWluZXJ7cGFkZGluZy1sZWZ0OjMwcHg7cGFkZGluZy1yaWdodDozMHB4fX1AbWVkaWEgKG1pbi13aWR0aDo5NjBweCl7LnVrLWNvbnRhaW5lcntwYWRkaW5nLWxlZnQ6NDBweDtwYWRkaW5nLXJpZ2h0OjQwcHh9fS51ay1jb250YWluZXI6OmFmdGVyLC51ay1jb250YWluZXI6OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6dGFibGV9LnVrLWNvbnRhaW5lcjo6YWZ0ZXJ7Y2xlYXI6Ym90aH0udWstY29udGFpbmVyPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0udWstY29udGFpbmVyIC51ay1jb250YWluZXJ7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDowfS51ay1jb250YWluZXIteHNtYWxse21heC13aWR0aDo3NTBweH0udWstY29udGFpbmVyLXNtYWxse21heC13aWR0aDo5MDBweH0udWstY29udGFpbmVyLWxhcmdle21heC13aWR0aDoxNjAwcHh9LnVrLWNvbnRhaW5lci1leHBhbmR7bWF4LXdpZHRoOm5vbmV9LnVrLWNvbnRhaW5lci1leHBhbmQtbGVmdHttYXJnaW4tbGVmdDowfS51ay1jb250YWluZXItZXhwYW5kLXJpZ2h0e21hcmdpbi1yaWdodDowfUBtZWRpYSAobWluLXdpZHRoOjY0MHB4KXsudWstY29udGFpbmVyLWV4cGFuZC1sZWZ0LnVrLWNvbnRhaW5lci14c21hbGwsLnVrLWNvbnRhaW5lci1leHBhbmQtcmlnaHQudWstY29udGFpbmVyLXhzbWFsbHttYXgtd2lkdGg6Y2FsYyg1MCUgKyAoNzUwcHggLyAyKSAtIDMwcHgpfS51ay1jb250YWluZXItZXhwYW5kLWxlZnQudWstY29udGFpbmVyLXNtYWxsLC51ay1jb250YWluZXItZXhwYW5kLXJpZ2h0LnVrLWNvbnRhaW5lci1zbWFsbHttYXgtd2lkdGg6Y2FsYyg1MCUgKyAoOTAwcHggLyAyKSAtIDMwcHgpfX1AbWVkaWEgKG1pbi13aWR0aDo5NjBweCl7LnVrLWNvbnRhaW5lci1leHBhbmQtbGVmdCwudWstY29udGFpbmVyLWV4cGFuZC1yaWdodHttYXgtd2lkdGg6Y2FsYyg1MCUgKyAoMTIwMHB4IC8gMikgLSA0MHB4KX0udWstY29udGFpbmVyLWV4cGFuZC1sZWZ0LnVrLWNvbnRhaW5lci14c21hbGwsLnVrLWNvbnRhaW5lci1leHBhbmQtcmlnaHQudWstY29udGFpbmVyLXhzbWFsbHttYXgtd2lkdGg6Y2FsYyg1MCUgKyAoNzUwcHggLyAyKSAtIDQwcHgpfS51ay1jb250YWluZXItZXhwYW5kLWxlZnQudWstY29udGFpbmVyLXNtYWxsLC51ay1jb250YWluZXItZXhwYW5kLXJpZ2h0LnVrLWNvbnRhaW5lci1zbWFsbHttYXgtd2lkdGg6Y2FsYyg1MCUgKyAoOTAwcHggLyAyKSAtIDQwcHgpfS51ay1jb250YWluZXItZXhwYW5kLWxlZnQudWstY29udGFpbmVyLWxhcmdlLC51ay1jb250YWluZXItZXhwYW5kLXJpZ2h0LnVrLWNvbnRhaW5lci1sYXJnZXttYXgtd2lkdGg6Y2FsYyg1MCUgKyAoMTYwMHB4IC8gMikgLSA0MHB4KX19LnVrLWNvbnRhaW5lci1pdGVtLXBhZGRpbmctcmVtb3ZlLWxlZnQsLnVrLWNvbnRhaW5lci1pdGVtLXBhZGRpbmctcmVtb3ZlLXJpZ2h0e3dpZHRoOmNhbGMoMTAwJSArIDE1cHgpfS51ay1jb250YWluZXItaXRlbS1wYWRkaW5nLXJlbW92ZS1sZWZ0e21hcmdpbi1sZWZ0Oi0xNXB4fS51ay1jb250YWluZXItaXRlbS1wYWRkaW5nLXJlbW92ZS1yaWdodHttYXJnaW4tcmlnaHQ6LTE1cHh9QG1lZGlhIChtaW4td2lkdGg6NjQwcHgpey51ay1jb250YWluZXItaXRlbS1wYWRkaW5nLXJlbW92ZS1sZWZ0LC51ay1jb250YWluZXItaXRlbS1wYWRkaW5nLXJlbW92ZS1yaWdodHt3aWR0aDpjYWxjKDEwMCUgKyAzMHB4KX0udWstY29udGFpbmVyLWl0ZW0tcGFkZGluZy1yZW1vdmUtbGVmdHttYXJnaW4tbGVmdDotMzBweH0udWstY29udGFpbmVyLWl0ZW0tcGFkZGluZy1yZW1vdmUtcmlnaHR7bWFyZ2luLXJpZ2h0Oi0zMHB4fX1AbWVkaWEgKG1pbi13aWR0aDo5NjBweCl7LnVrLWNvbnRhaW5lci1pdGVtLXBhZGRpbmctcmVtb3ZlLWxlZnQsLnVrLWNvbnRhaW5lci1pdGVtLXBhZGRpbmctcmVtb3ZlLXJpZ2h0e3dpZHRoOmNhbGMoMTAwJSArIDQwcHgpfS51ay1jb250YWluZXItaXRlbS1wYWRkaW5nLXJlbW92ZS1sZWZ0e21hcmdpbi1sZWZ0Oi00MHB4fS51ay1jb250YWluZXItaXRlbS1wYWRkaW5nLXJlbW92ZS1yaWdodHttYXJnaW4tcmlnaHQ6LTQwcHh9fS51ay1ncmlke2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDttYXJnaW46MDtwYWRkaW5nOjA7bGlzdC1zdHlsZTpub25lfS51ay1ncmlkPip7bWFyZ2luOjB9LnVrLWdyaWQ+Kj46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9LnVrLWdyaWR7bWFyZ2luLWxlZnQ6LTMwcHh9LnVrLWdyaWQ+KntwYWRkaW5nLWxlZnQ6MzBweH0qKy51ay1ncmlkLW1hcmdpbiwudWstZ3JpZCsudWstZ3JpZCwudWstZ3JpZD4udWstZ3JpZC1tYXJnaW57bWFyZ2luLXRvcDozMHB4fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LnVrLWdyaWR7bWFyZ2luLWxlZnQ6LTQwcHh9LnVrLWdyaWQ+KntwYWRkaW5nLWxlZnQ6NDBweH0qKy51ay1ncmlkLW1hcmdpbiwudWstZ3JpZCsudWstZ3JpZCwudWstZ3JpZD4udWstZ3JpZC1tYXJnaW57bWFyZ2luLXRvcDo0MHB4fX0udWstZ3JpZC1jb2x1bW4tc21hbGwsLnVrLWdyaWQtc21hbGx7bWFyZ2luLWxlZnQ6LTE1cHh9LnVrLWdyaWQtY29sdW1uLXNtYWxsPiosLnVrLWdyaWQtc21hbGw+KntwYWRkaW5nLWxlZnQ6MTVweH0qKy51ay1ncmlkLW1hcmdpbi1zbWFsbCwudWstZ3JpZCsudWstZ3JpZC1yb3ctc21hbGwsLnVrLWdyaWQrLnVrLWdyaWQtc21hbGwsLnVrLWdyaWQtcm93LXNtYWxsPi51ay1ncmlkLW1hcmdpbiwudWstZ3JpZC1zbWFsbD4udWstZ3JpZC1tYXJnaW57bWFyZ2luLXRvcDoxNXB4fS51ay1ncmlkLWNvbHVtbi1tZWRpdW0sLnVrLWdyaWQtbWVkaXVte21hcmdpbi1sZWZ0Oi0zMHB4fS51ay1ncmlkLWNvbHVtbi1tZWRpdW0+KiwudWstZ3JpZC1tZWRpdW0+KntwYWRkaW5nLWxlZnQ6MzBweH0qKy51ay1ncmlkLW1hcmdpbi1tZWRpdW0sLnVrLWdyaWQrLnVrLWdyaWQtbWVkaXVtLC51ay1ncmlkKy51ay1ncmlkLXJvdy1tZWRpdW0sLnVrLWdyaWQtbWVkaXVtPi51ay1ncmlkLW1hcmdpbiwudWstZ3JpZC1yb3ctbWVkaXVtPi51ay1ncmlkLW1hcmdpbnttYXJnaW4tdG9wOjMwcHh9LnVrLWdyaWQtY29sdW1uLWxhcmdlLC51ay1ncmlkLWxhcmdle21hcmdpbi1sZWZ0Oi00MHB4fS51ay1ncmlkLWNvbHVtbi1sYXJnZT4qLC51ay1ncmlkLWxhcmdlPip7cGFkZGluZy1sZWZ0OjQwcHh9KisudWstZ3JpZC1tYXJnaW4tbGFyZ2UsLnVrLWdyaWQrLnVrLWdyaWQtbGFyZ2UsLnVrLWdyaWQrLnVrLWdyaWQtcm93LWxhcmdlLC51ay1ncmlkLWxhcmdlPi51ay1ncmlkLW1hcmdpbiwudWstZ3JpZC1yb3ctbGFyZ2U+LnVrLWdyaWQtbWFyZ2lue21hcmdpbi10b3A6NDBweH1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey51ay1ncmlkLWNvbHVtbi1sYXJnZSwudWstZ3JpZC1sYXJnZXttYXJnaW4tbGVmdDotNzBweH0udWstZ3JpZC1jb2x1bW4tbGFyZ2U+KiwudWstZ3JpZC1sYXJnZT4qe3BhZGRpbmctbGVmdDo3MHB4fSorLnVrLWdyaWQtbWFyZ2luLWxhcmdlLC51ay1ncmlkKy51ay1ncmlkLWxhcmdlLC51ay1ncmlkKy51ay1ncmlkLXJvdy1sYXJnZSwudWstZ3JpZC1sYXJnZT4udWstZ3JpZC1tYXJnaW4sLnVrLWdyaWQtcm93LWxhcmdlPi51ay1ncmlkLW1hcmdpbnttYXJnaW4tdG9wOjcwcHh9fS51ay1ncmlkLWNvbGxhcHNlLC51ay1ncmlkLWNvbHVtbi1jb2xsYXBzZXttYXJnaW4tbGVmdDowfS51ay1ncmlkLWNvbGxhcHNlPiosLnVrLWdyaWQtY29sdW1uLWNvbGxhcHNlPip7cGFkZGluZy1sZWZ0OjB9LnVrLWdyaWQrLnVrLWdyaWQtY29sbGFwc2UsLnVrLWdyaWQrLnVrLWdyaWQtcm93LWNvbGxhcHNlLC51ay1ncmlkLWNvbGxhcHNlPi51ay1ncmlkLW1hcmdpbiwudWstZ3JpZC1yb3ctY29sbGFwc2U+LnVrLWdyaWQtbWFyZ2lue21hcmdpbi10b3A6MH0udWstZ3JpZC1kaXZpZGVyPip7cG9zaXRpb246cmVsYXRpdmV9LnVrLWdyaWQtZGl2aWRlcj46bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtib3JkZXItbGVmdDoxcHggc29saWQgI2U1ZTVlNX0udWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc3RhY2s+LnVrLWdyaWQtbWFyZ2luOjpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7cmlnaHQ6MDtib3JkZXItdG9wOjFweCBzb2xpZCAjZTVlNWU1fS51ay1ncmlkLWRpdmlkZXJ7bWFyZ2luLWxlZnQ6LTYwcHh9LnVrLWdyaWQtZGl2aWRlcj4qe3BhZGRpbmctbGVmdDo2MHB4fS51ay1ncmlkLWRpdmlkZXI+Om5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3Jle2xlZnQ6MzBweH0udWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc3RhY2s+LnVrLWdyaWQtbWFyZ2lue21hcmdpbi10b3A6NjBweH0udWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc3RhY2s+LnVrLWdyaWQtbWFyZ2luOjpiZWZvcmV7dG9wOi0zMHB4O2xlZnQ6NjBweH1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey51ay1ncmlkLWRpdmlkZXJ7bWFyZ2luLWxlZnQ6LTgwcHh9LnVrLWdyaWQtZGl2aWRlcj4qe3BhZGRpbmctbGVmdDo4MHB4fS51ay1ncmlkLWRpdmlkZXI+Om5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3Jle2xlZnQ6NDBweH0udWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc3RhY2s+LnVrLWdyaWQtbWFyZ2lue21hcmdpbi10b3A6ODBweH0udWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc3RhY2s+LnVrLWdyaWQtbWFyZ2luOjpiZWZvcmV7dG9wOi00MHB4O2xlZnQ6ODBweH19LnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWNvbHVtbi1zbWFsbCwudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc21hbGx7bWFyZ2luLWxlZnQ6LTMwcHh9LnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWNvbHVtbi1zbWFsbD4qLC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1zbWFsbD4qe3BhZGRpbmctbGVmdDozMHB4fS51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1jb2x1bW4tc21hbGw+Om5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1zbWFsbD46bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmV7bGVmdDoxNXB4fS51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1yb3ctc21hbGwudWstZ3JpZC1zdGFjaz4udWstZ3JpZC1tYXJnaW4sLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLXNtYWxsLnVrLWdyaWQtc3RhY2s+LnVrLWdyaWQtbWFyZ2lue21hcmdpbi10b3A6MzBweH0udWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc21hbGwudWstZ3JpZC1zdGFjaz4udWstZ3JpZC1tYXJnaW46OmJlZm9yZXt0b3A6LTE1cHg7bGVmdDozMHB4fS51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1yb3ctc21hbGwudWstZ3JpZC1zdGFjaz4udWstZ3JpZC1tYXJnaW46OmJlZm9yZXt0b3A6LTE1cHh9LnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWNvbHVtbi1zbWFsbC51ay1ncmlkLXN0YWNrPi51ay1ncmlkLW1hcmdpbjo6YmVmb3Jle2xlZnQ6MzBweH0udWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtY29sdW1uLW1lZGl1bSwudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtbWVkaXVte21hcmdpbi1sZWZ0Oi02MHB4fS51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1jb2x1bW4tbWVkaXVtPiosLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLW1lZGl1bT4qe3BhZGRpbmctbGVmdDo2MHB4fS51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1jb2x1bW4tbWVkaXVtPjpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtbWVkaXVtPjpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZXtsZWZ0OjMwcHh9LnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLW1lZGl1bS51ay1ncmlkLXN0YWNrPi51ay1ncmlkLW1hcmdpbiwudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtcm93LW1lZGl1bS51ay1ncmlkLXN0YWNrPi51ay1ncmlkLW1hcmdpbnttYXJnaW4tdG9wOjYwcHh9LnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLW1lZGl1bS51ay1ncmlkLXN0YWNrPi51ay1ncmlkLW1hcmdpbjo6YmVmb3Jle3RvcDotMzBweDtsZWZ0OjYwcHh9LnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLXJvdy1tZWRpdW0udWstZ3JpZC1zdGFjaz4udWstZ3JpZC1tYXJnaW46OmJlZm9yZXt0b3A6LTMwcHh9LnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWNvbHVtbi1tZWRpdW0udWstZ3JpZC1zdGFjaz4udWstZ3JpZC1tYXJnaW46OmJlZm9yZXtsZWZ0OjYwcHh9LnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWNvbHVtbi1sYXJnZSwudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtbGFyZ2V7bWFyZ2luLWxlZnQ6LTgwcHh9LnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWNvbHVtbi1sYXJnZT4qLC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1sYXJnZT4qe3BhZGRpbmctbGVmdDo4MHB4fS51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1jb2x1bW4tbGFyZ2U+Om5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1sYXJnZT46bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmV7bGVmdDo0MHB4fS51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1sYXJnZS51ay1ncmlkLXN0YWNrPi51ay1ncmlkLW1hcmdpbiwudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtcm93LWxhcmdlLnVrLWdyaWQtc3RhY2s+LnVrLWdyaWQtbWFyZ2lue21hcmdpbi10b3A6ODBweH0udWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtbGFyZ2UudWstZ3JpZC1zdGFjaz4udWstZ3JpZC1tYXJnaW46OmJlZm9yZXt0b3A6LTQwcHg7bGVmdDo4MHB4fS51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1yb3ctbGFyZ2UudWstZ3JpZC1zdGFjaz4udWstZ3JpZC1tYXJnaW46OmJlZm9yZXt0b3A6LTQwcHh9LnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWNvbHVtbi1sYXJnZS51ay1ncmlkLXN0YWNrPi51ay1ncmlkLW1hcmdpbjo6YmVmb3Jle2xlZnQ6ODBweH1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1jb2x1bW4tbGFyZ2UsLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWxhcmdle21hcmdpbi1sZWZ0Oi0xNDBweH0udWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtY29sdW1uLWxhcmdlPiosLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWxhcmdlPip7cGFkZGluZy1sZWZ0OjE0MHB4fS51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1jb2x1bW4tbGFyZ2U+Om5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1sYXJnZT46bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmV7bGVmdDo3MHB4fS51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1sYXJnZS51ay1ncmlkLXN0YWNrPi51ay1ncmlkLW1hcmdpbiwudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtcm93LWxhcmdlLnVrLWdyaWQtc3RhY2s+LnVrLWdyaWQtbWFyZ2lue21hcmdpbi10b3A6MTQwcHh9LnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWxhcmdlLnVrLWdyaWQtc3RhY2s+LnVrLWdyaWQtbWFyZ2luOjpiZWZvcmV7dG9wOi03MHB4O2xlZnQ6MTQwcHh9LnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLXJvdy1sYXJnZS51ay1ncmlkLXN0YWNrPi51ay1ncmlkLW1hcmdpbjo6YmVmb3Jle3RvcDotNzBweH0udWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtY29sdW1uLWxhcmdlLnVrLWdyaWQtc3RhY2s+LnVrLWdyaWQtbWFyZ2luOjpiZWZvcmV7bGVmdDoxNDBweH19LnVrLWdyaWQtaXRlbS1tYXRjaCwudWstZ3JpZC1tYXRjaD4qe2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcH0udWstZ3JpZC1pdGVtLW1hdGNoPjpub3QoW2NsYXNzKj11ay13aWR0aF0pLC51ay1ncmlkLW1hdGNoPio+Om5vdChbY2xhc3MqPXVrLXdpZHRoXSl7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCU7ZmxleDphdXRvfS51ay10aWxle3Bvc2l0aW9uOnJlbGF0aXZlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nLWxlZnQ6MTVweDtwYWRkaW5nLXJpZ2h0OjE1cHg7cGFkZGluZy10b3A6NDBweDtwYWRkaW5nLWJvdHRvbTo0MHB4fUBtZWRpYSAobWluLXdpZHRoOjY0MHB4KXsudWstdGlsZXtwYWRkaW5nLWxlZnQ6MzBweDtwYWRkaW5nLXJpZ2h0OjMwcHh9fUBtZWRpYSAobWluLXdpZHRoOjk2MHB4KXsudWstdGlsZXtwYWRkaW5nLWxlZnQ6NDBweDtwYWRkaW5nLXJpZ2h0OjQwcHg7cGFkZGluZy10b3A6NzBweDtwYWRkaW5nLWJvdHRvbTo3MHB4fX0udWstdGlsZTo6YWZ0ZXIsLnVrLXRpbGU6OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6dGFibGV9LnVrLXRpbGU6OmFmdGVye2NsZWFyOmJvdGh9LnVrLXRpbGU+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS51ay10aWxlLXhzbWFsbHtwYWRkaW5nLXRvcDoyMHB4O3BhZGRpbmctYm90dG9tOjIwcHh9LnVrLXRpbGUtc21hbGx7cGFkZGluZy10b3A6NDBweDtwYWRkaW5nLWJvdHRvbTo0MHB4fS51ay10aWxlLWxhcmdle3BhZGRpbmctdG9wOjcwcHg7cGFkZGluZy1ib3R0b206NzBweH1AbWVkaWEgKG1pbi13aWR0aDo5NjBweCl7LnVrLXRpbGUtbGFyZ2V7cGFkZGluZy10b3A6MTQwcHg7cGFkZGluZy1ib3R0b206MTQwcHh9fS51ay10aWxlLXhsYXJnZXtwYWRkaW5nLXRvcDoxNDBweDtwYWRkaW5nLWJvdHRvbToxNDBweH1AbWVkaWEgKG1pbi13aWR0aDo5NjBweCl7LnVrLXRpbGUteGxhcmdle3BhZGRpbmctdG9wOjIxMHB4O3BhZGRpbmctYm90dG9tOjIxMHB4fX0udWstdGlsZS1kZWZhdWx0e2JhY2tncm91bmQ6I2ZmZn0udWstdGlsZS1tdXRlZHtiYWNrZ3JvdW5kOiNmOGY4Zjh9LnVrLXRpbGUtcHJpbWFyeXtiYWNrZ3JvdW5kOiMxZTg3ZjB9LnVrLXRpbGUtc2Vjb25kYXJ5e2JhY2tncm91bmQ6IzIyMn0udWstY2FyZHtwb3NpdGlvbjpyZWxhdGl2ZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7dHJhbnNpdGlvbjpib3gtc2hhZG93IC4xcyBlYXNlLWluLW91dH0udWstY2FyZC1ib2R5e3BhZGRpbmc6MzBweCAzMHB4fS51ay1jYXJkLWhlYWRlcntwYWRkaW5nOjE1cHggMzBweH0udWstY2FyZC1mb290ZXJ7cGFkZGluZzoxNXB4IDMwcHh9QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsudWstY2FyZC1ib2R5e3BhZGRpbmc6NDBweCA0MHB4fS51ay1jYXJkLWhlYWRlcntwYWRkaW5nOjIwcHggNDBweH0udWstY2FyZC1mb290ZXJ7cGFkZGluZzoyMHB4IDQwcHh9fS51ay1jYXJkLWJvZHk6OmFmdGVyLC51ay1jYXJkLWJvZHk6OmJlZm9yZSwudWstY2FyZC1mb290ZXI6OmFmdGVyLC51ay1jYXJkLWZvb3Rlcjo6YmVmb3JlLC51ay1jYXJkLWhlYWRlcjo6YWZ0ZXIsLnVrLWNhcmQtaGVhZGVyOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OnRhYmxlfS51ay1jYXJkLWJvZHk6OmFmdGVyLC51ay1jYXJkLWZvb3Rlcjo6YWZ0ZXIsLnVrLWNhcmQtaGVhZGVyOjphZnRlcntjbGVhcjpib3RofS51ay1jYXJkLWJvZHk+Omxhc3QtY2hpbGQsLnVrLWNhcmQtZm9vdGVyPjpsYXN0LWNoaWxkLC51ay1jYXJkLWhlYWRlcj46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9LnVrLWNhcmQtdGl0bGV7Zm9udC1zaXplOjEuNXJlbTtsaW5lLWhlaWdodDoxLjR9LnVrLWNhcmQtYmFkZ2V7cG9zaXRpb246YWJzb2x1dGU7dG9wOjMwcHg7cmlnaHQ6MzBweDt6LWluZGV4OjF9LnVrLWNhcmQtYmFkZ2U6Zmlyc3QtY2hpbGQrKnttYXJnaW4tdG9wOjB9LnVrLWNhcmQtaG92ZXI6bm90KC51ay1jYXJkLWRlZmF1bHQpOm5vdCgudWstY2FyZC1wcmltYXJ5KTpub3QoLnVrLWNhcmQtc2Vjb25kYXJ5KTpob3ZlcntiYWNrZ3JvdW5kOiNmZmY7Ym94LXNoYWRvdzowIDE0cHggMjVweCByZ2JhKDAsMCwwLC4xNil9LnVrLWNhcmQtZGVmYXVsdHtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzY2Njtib3gtc2hhZG93OjAgNXB4IDE1cHggcmdiYSgwLDAsMCwuMDgpfS51ay1jYXJkLWRlZmF1bHQgLnVrLWNhcmQtdGl0bGV7Y29sb3I6IzMzM30udWstY2FyZC1kZWZhdWx0LnVrLWNhcmQtaG92ZXI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JveC1zaGFkb3c6MCAxNHB4IDI1cHggcmdiYSgwLDAsMCwuMTYpfS51ay1jYXJkLWRlZmF1bHQgLnVrLWNhcmQtaGVhZGVye2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlNWU1ZTV9LnVrLWNhcmQtZGVmYXVsdCAudWstY2FyZC1mb290ZXJ7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U1ZTVlNX0udWstY2FyZC1wcmltYXJ5e2JhY2tncm91bmQ6IzFlODdmMDtjb2xvcjojZmZmO2JveC1zaGFkb3c6MCA1cHggMTVweCByZ2JhKDAsMCwwLC4wOCl9LnVrLWNhcmQtcHJpbWFyeSAudWstY2FyZC10aXRsZXtjb2xvcjojZmZmfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ob3Zlcjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMxZTg3ZjA7Ym94LXNoYWRvdzowIDE0cHggMjVweCByZ2JhKDAsMCwwLC4xNil9LnVrLWNhcmQtc2Vjb25kYXJ5e2JhY2tncm91bmQ6IzIyMjtjb2xvcjojZmZmO2JveC1zaGFkb3c6MCA1cHggMTVweCByZ2JhKDAsMCwwLC4wOCl9LnVrLWNhcmQtc2Vjb25kYXJ5IC51ay1jYXJkLXRpdGxle2NvbG9yOiNmZmZ9LnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtaG92ZXI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMjIyO2JveC1zaGFkb3c6MCAxNHB4IDI1cHggcmdiYSgwLDAsMCwuMTYpfS51ay1jYXJkLXNtYWxsIC51ay1jYXJkLWJvZHksLnVrLWNhcmQtc21hbGwudWstY2FyZC1ib2R5e3BhZGRpbmc6MjBweCAyMHB4fS51ay1jYXJkLXNtYWxsIC51ay1jYXJkLWhlYWRlcntwYWRkaW5nOjEzcHggMjBweH0udWstY2FyZC1zbWFsbCAudWstY2FyZC1mb290ZXJ7cGFkZGluZzoxM3B4IDIwcHh9QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsudWstY2FyZC1sYXJnZSAudWstY2FyZC1ib2R5LC51ay1jYXJkLWxhcmdlLnVrLWNhcmQtYm9keXtwYWRkaW5nOjcwcHggNzBweH0udWstY2FyZC1sYXJnZSAudWstY2FyZC1oZWFkZXJ7cGFkZGluZzozNXB4IDcwcHh9LnVrLWNhcmQtbGFyZ2UgLnVrLWNhcmQtZm9vdGVye3BhZGRpbmc6MzVweCA3MHB4fX0udWstY2FyZC1ib2R5Pi51ay1uYXYtZGVmYXVsdHttYXJnaW4tbGVmdDotMzBweDttYXJnaW4tcmlnaHQ6LTMwcHh9LnVrLWNhcmQtYm9keT4udWstbmF2LWRlZmF1bHQ6b25seS1jaGlsZHttYXJnaW4tdG9wOi0xNXB4O21hcmdpbi1ib3R0b206LTE1cHh9LnVrLWNhcmQtYm9keSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1kaXZpZGVyLC51ay1jYXJkLWJvZHkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtaGVhZGVyLC51ay1jYXJkLWJvZHkgLnVrLW5hdi1kZWZhdWx0PmxpPmF7cGFkZGluZy1sZWZ0OjMwcHg7cGFkZGluZy1yaWdodDozMHB4fS51ay1jYXJkLWJvZHkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3Vie3BhZGRpbmctbGVmdDo0NXB4fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LnVrLWNhcmQtYm9keT4udWstbmF2LWRlZmF1bHR7bWFyZ2luLWxlZnQ6LTQwcHg7bWFyZ2luLXJpZ2h0Oi00MHB4fS51ay1jYXJkLWJvZHk+LnVrLW5hdi1kZWZhdWx0Om9ubHktY2hpbGR7bWFyZ2luLXRvcDotMjVweDttYXJnaW4tYm90dG9tOi0yNXB4fS51ay1jYXJkLWJvZHkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtZGl2aWRlciwudWstY2FyZC1ib2R5IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWhlYWRlciwudWstY2FyZC1ib2R5IC51ay1uYXYtZGVmYXVsdD5saT5he3BhZGRpbmctbGVmdDo0MHB4O3BhZGRpbmctcmlnaHQ6NDBweH0udWstY2FyZC1ib2R5IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YntwYWRkaW5nLWxlZnQ6NTVweH19LnVrLWNhcmQtc21hbGw+LnVrLW5hdi1kZWZhdWx0e21hcmdpbi1sZWZ0Oi0yMHB4O21hcmdpbi1yaWdodDotMjBweH0udWstY2FyZC1zbWFsbD4udWstbmF2LWRlZmF1bHQ6b25seS1jaGlsZHttYXJnaW4tdG9wOi01cHg7bWFyZ2luLWJvdHRvbTotNXB4fS51ay1jYXJkLXNtYWxsIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWRpdmlkZXIsLnVrLWNhcmQtc21hbGwgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtaGVhZGVyLC51ay1jYXJkLXNtYWxsIC51ay1uYXYtZGVmYXVsdD5saT5he3BhZGRpbmctbGVmdDoyMHB4O3BhZGRpbmctcmlnaHQ6MjBweH0udWstY2FyZC1zbWFsbCAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWJ7cGFkZGluZy1sZWZ0OjM1cHh9QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsudWstY2FyZC1sYXJnZT4udWstbmF2LWRlZmF1bHR7bWFyZ2luOjB9LnVrLWNhcmQtbGFyZ2U+LnVrLW5hdi1kZWZhdWx0Om9ubHktY2hpbGR7bWFyZ2luOjB9LnVrLWNhcmQtbGFyZ2UgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtZGl2aWRlciwudWstY2FyZC1sYXJnZSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1oZWFkZXIsLnVrLWNhcmQtbGFyZ2UgLnVrLW5hdi1kZWZhdWx0PmxpPmF7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDowfS51ay1jYXJkLWxhcmdlIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YntwYWRkaW5nLWxlZnQ6MTVweH19LnVrLWNsb3Nle2NvbG9yOiM5OTk7dHJhbnNpdGlvbjouMXMgZWFzZS1pbi1vdXQ7dHJhbnNpdGlvbi1wcm9wZXJ0eTpjb2xvcixvcGFjaXR5fS51ay1jbG9zZTpmb2N1cywudWstY2xvc2U6aG92ZXJ7Y29sb3I6IzY2NjtvdXRsaW5lOjB9LnVrLXNwaW5uZXI+KnthbmltYXRpb246dWstc3Bpbm5lci1yb3RhdGUgMS40cyBsaW5lYXIgaW5maW5pdGV9QGtleWZyYW1lcyB1ay1zcGlubmVyLXJvdGF0ZXswJXt0cmFuc2Zvcm06cm90YXRlKDApfTEwMCV7dHJhbnNmb3JtOnJvdGF0ZSgyNzBkZWcpfX0udWstc3Bpbm5lcj4qPip7c3Ryb2tlLWRhc2hhcnJheTo4OHB4O3N0cm9rZS1kYXNob2Zmc2V0OjA7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7YW5pbWF0aW9uOnVrLXNwaW5uZXItZGFzaCAxLjRzIGVhc2UtaW4tb3V0IGluZmluaXRlO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kfUBrZXlmcmFtZXMgdWstc3Bpbm5lci1kYXNoezAle3N0cm9rZS1kYXNob2Zmc2V0Ojg4cHh9NTAle3N0cm9rZS1kYXNob2Zmc2V0OjIycHg7dHJhbnNmb3JtOnJvdGF0ZSgxMzVkZWcpfTEwMCV7c3Ryb2tlLWRhc2hvZmZzZXQ6ODhweDt0cmFuc2Zvcm06cm90YXRlKDQ1MGRlZyl9fS51ay10b3RvcHtwYWRkaW5nOjVweDtjb2xvcjojOTk5O3RyYW5zaXRpb246Y29sb3IgLjFzIGVhc2UtaW4tb3V0fS51ay10b3RvcDpmb2N1cywudWstdG90b3A6aG92ZXJ7Y29sb3I6IzY2NjtvdXRsaW5lOjB9LnVrLXRvdG9wOmFjdGl2ZXtjb2xvcjojMzMzfS51ay1tYXJrZXJ7cGFkZGluZzo1cHg7YmFja2dyb3VuZDojMjIyO2NvbG9yOiNmZmY7Ym9yZGVyLXJhZGl1czo1MDBweH0udWstbWFya2VyOmZvY3VzLC51ay1tYXJrZXI6aG92ZXJ7Y29sb3I6I2ZmZjtvdXRsaW5lOjB9LnVrLWFsZXJ0e3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbi1ib3R0b206MjBweDtwYWRkaW5nOjE1cHggMjlweCAxNXB4IDE1cHg7YmFja2dyb3VuZDojZjhmOGY4O2NvbG9yOiM2NjZ9KisudWstYWxlcnR7bWFyZ2luLXRvcDoyMHB4fS51ay1hbGVydD46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9LnVrLWFsZXJ0LWNsb3Nle3Bvc2l0aW9uOmFic29sdXRlO3RvcDoyMHB4O3JpZ2h0OjE1cHg7Y29sb3I6aW5oZXJpdDtvcGFjaXR5Oi40fS51ay1hbGVydC1jbG9zZTpmaXJzdC1jaGlsZCsqe21hcmdpbi10b3A6MH0udWstYWxlcnQtY2xvc2U6Zm9jdXMsLnVrLWFsZXJ0LWNsb3NlOmhvdmVye2NvbG9yOmluaGVyaXQ7b3BhY2l0eTouOH0udWstYWxlcnQtcHJpbWFyeXtiYWNrZ3JvdW5kOiNkOGVhZmM7Y29sb3I6IzFlODdmMH0udWstYWxlcnQtc3VjY2Vzc3tiYWNrZ3JvdW5kOiNlZGZiZjY7Y29sb3I6IzMyZDI5Nn0udWstYWxlcnQtd2FybmluZ3tiYWNrZ3JvdW5kOiNmZmY2ZWU7Y29sb3I6I2ZhYTA1YX0udWstYWxlcnQtZGFuZ2Vye2JhY2tncm91bmQ6I2ZlZjRmNjtjb2xvcjojZjA1MDZlfS51ay1hbGVydCBoMSwudWstYWxlcnQgaDIsLnVrLWFsZXJ0IGgzLC51ay1hbGVydCBoNCwudWstYWxlcnQgaDUsLnVrLWFsZXJ0IGg2e2NvbG9yOmluaGVyaXR9LnVrLWFsZXJ0IGE6bm90KFtjbGFzc10pe2NvbG9yOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0udWstYWxlcnQgYTpub3QoW2NsYXNzXSk6aG92ZXJ7Y29sb3I6aW5oZXJpdDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS51ay1iYWRnZXtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWluLXdpZHRoOjIycHg7aGVpZ2h0OjIycHg7cGFkZGluZzowIDVweDtib3JkZXItcmFkaXVzOjUwMHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtiYWNrZ3JvdW5kOiMxZTg3ZjA7Y29sb3I6I2ZmZjtmb250LXNpemU6Ljg3NXJlbTtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyfS51ay1iYWRnZTpmb2N1cywudWstYmFkZ2U6aG92ZXJ7Y29sb3I6I2ZmZjt0ZXh0LWRlY29yYXRpb246bm9uZTtvdXRsaW5lOjB9LnVrLWxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MCAxMHB4O2JhY2tncm91bmQ6IzFlODdmMDtsaW5lLWhlaWdodDoxLjU7Zm9udC1zaXplOi44NzVyZW07Y29sb3I6I2ZmZjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2hpdGUtc3BhY2U6bm93cmFwO2JvcmRlci1yYWRpdXM6MnB4O3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0udWstbGFiZWwtc3VjY2Vzc3tiYWNrZ3JvdW5kLWNvbG9yOiMzMmQyOTY7Y29sb3I6I2ZmZn0udWstbGFiZWwtd2FybmluZ3tiYWNrZ3JvdW5kLWNvbG9yOiNmYWEwNWE7Y29sb3I6I2ZmZn0udWstbGFiZWwtZGFuZ2Vye2JhY2tncm91bmQtY29sb3I6I2YwNTA2ZTtjb2xvcjojZmZmfS51ay1vdmVybGF5e3BhZGRpbmc6MzBweCAzMHB4fS51ay1vdmVybGF5PjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0udWstb3ZlcmxheS1kZWZhdWx0e2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuOCl9LnVrLW92ZXJsYXktcHJpbWFyeXtiYWNrZ3JvdW5kOnJnYmEoMzQsMzQsMzQsLjgpfS51ay1hcnRpY2xlOjphZnRlciwudWstYXJ0aWNsZTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTp0YWJsZX0udWstYXJ0aWNsZTo6YWZ0ZXJ7Y2xlYXI6Ym90aH0udWstYXJ0aWNsZT46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9LnVrLWFydGljbGUrLnVrLWFydGljbGV7bWFyZ2luLXRvcDo3MHB4fS51ay1hcnRpY2xlLXRpdGxle2ZvbnQtc2l6ZToyLjIzMTI1cmVtO2xpbmUtaGVpZ2h0OjEuMn1AbWVkaWEgKG1pbi13aWR0aDo5NjBweCl7LnVrLWFydGljbGUtdGl0bGV7Zm9udC1zaXplOjIuNjI1cmVtfX0udWstYXJ0aWNsZS1tZXRhe2ZvbnQtc2l6ZTouODc1cmVtO2xpbmUtaGVpZ2h0OjEuNDtjb2xvcjojOTk5fS51ay1hcnRpY2xlLW1ldGEgYXtjb2xvcjojOTk5fS51ay1hcnRpY2xlLW1ldGEgYTpob3Zlcntjb2xvcjojNjY2O3RleHQtZGVjb3JhdGlvbjpub25lfS51ay1jb21tZW50LWJvZHl7b3ZlcmZsb3ctd3JhcDpicmVhay13b3JkO3dvcmQtd3JhcDpicmVhay13b3JkfS51ay1jb21tZW50LWhlYWRlcnttYXJnaW4tYm90dG9tOjIwcHh9LnVrLWNvbW1lbnQtYm9keTo6YWZ0ZXIsLnVrLWNvbW1lbnQtYm9keTo6YmVmb3JlLC51ay1jb21tZW50LWhlYWRlcjo6YWZ0ZXIsLnVrLWNvbW1lbnQtaGVhZGVyOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OnRhYmxlfS51ay1jb21tZW50LWJvZHk6OmFmdGVyLC51ay1jb21tZW50LWhlYWRlcjo6YWZ0ZXJ7Y2xlYXI6Ym90aH0udWstY29tbWVudC1ib2R5PjpsYXN0LWNoaWxkLC51ay1jb21tZW50LWhlYWRlcj46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9LnVrLWNvbW1lbnQtdGl0bGV7Zm9udC1zaXplOjEuMjVyZW07bGluZS1oZWlnaHQ6MS40fS51ay1jb21tZW50LW1ldGF7Zm9udC1zaXplOi44NzVyZW07bGluZS1oZWlnaHQ6MS40O2NvbG9yOiM5OTl9LnVrLWNvbW1lbnQtbGlzdHtwYWRkaW5nOjA7bGlzdC1zdHlsZTpub25lfS51ay1jb21tZW50LWxpc3Q+Om50aC1jaGlsZChuKzIpe21hcmdpbi10b3A6NzBweH0udWstY29tbWVudC1saXN0IC51ay1jb21tZW50fnVse21hcmdpbjo3MHB4IDAgMCAwO3BhZGRpbmctbGVmdDozMHB4O2xpc3Qtc3R5bGU6bm9uZX1AbWVkaWEgKG1pbi13aWR0aDo5NjBweCl7LnVrLWNvbW1lbnQtbGlzdCAudWstY29tbWVudH51bHtwYWRkaW5nLWxlZnQ6MTAwcHh9fS51ay1jb21tZW50LWxpc3QgLnVrLWNvbW1lbnR+dWw+Om50aC1jaGlsZChuKzIpe21hcmdpbi10b3A6NzBweH0udWstY29tbWVudC1wcmltYXJ5e3BhZGRpbmc6MzBweDtiYWNrZ3JvdW5kLWNvbG9yOiNmOGY4Zjh9LnVrLXNlYXJjaHtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTttYXgtd2lkdGg6MTAwJTttYXJnaW46MH0udWstc2VhcmNoLWlucHV0Ojotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uLC51ay1zZWFyY2gtaW5wdXQ6Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9LnVrLXNlYXJjaC1pbnB1dDo6LW1vei1wbGFjZWhvbGRlcntvcGFjaXR5OjF9LnVrLXNlYXJjaC1pbnB1dHtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjA7Ym9yZGVyLXJhZGl1czowO2ZvbnQ6aW5oZXJpdDtvdmVyZmxvdzp2aXNpYmxlOy13ZWJraXQtYXBwZWFyYW5jZTpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDoxMDAlO2JvcmRlcjpub25lO2NvbG9yOiM2NjZ9LnVrLXNlYXJjaC1pbnB1dDpmb2N1c3tvdXRsaW5lOjB9LnVrLXNlYXJjaC1pbnB1dDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6Izk5OSFpbXBvcnRhbnR9LnVrLXNlYXJjaC1pbnB1dDo6cGxhY2Vob2xkZXJ7Y29sb3I6Izk5OX0udWstc2VhcmNoLWljb246Zm9jdXN7b3V0bGluZTowfS51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29ue3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2NvbG9yOiM5OTl9LnVrLXNlYXJjaCAudWstc2VhcmNoLWljb246aG92ZXJ7Y29sb3I6Izk5OX0udWstc2VhcmNoIC51ay1zZWFyY2gtaWNvbjpub3QoYSk6bm90KGJ1dHRvbik6bm90KGlucHV0KXtwb2ludGVyLWV2ZW50czpub25lfS51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uLWZsaXB7cmlnaHQ6MDtsZWZ0OmF1dG99LnVrLXNlYXJjaC1kZWZhdWx0e3dpZHRoOjE4MHB4fS51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0e2hlaWdodDo0MHB4O3BhZGRpbmctbGVmdDo2cHg7cGFkZGluZy1yaWdodDo2cHg7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjFweCBzb2xpZCAjZTVlNWU1fS51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0OmZvY3Vze2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LnVrLXNlYXJjaC1kZWZhdWx0IC51ay1zZWFyY2gtaWNvbnt3aWR0aDo0MHB4fS51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWljb246bm90KC51ay1zZWFyY2gtaWNvbi1mbGlwKX4udWstc2VhcmNoLWlucHV0e3BhZGRpbmctbGVmdDo0MHB4fS51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWljb24tZmxpcH4udWstc2VhcmNoLWlucHV0e3BhZGRpbmctcmlnaHQ6NDBweH0udWstc2VhcmNoLW5hdmJhcnt3aWR0aDo0MDBweH0udWstc2VhcmNoLW5hdmJhciAudWstc2VhcmNoLWlucHV0e2hlaWdodDo0MHB4O2JhY2tncm91bmQ6MCAwO2ZvbnQtc2l6ZToxLjVyZW19LnVrLXNlYXJjaC1uYXZiYXIgLnVrLXNlYXJjaC1pY29ue3dpZHRoOjQwcHh9LnVrLXNlYXJjaC1uYXZiYXIgLnVrLXNlYXJjaC1pY29uOm5vdCgudWstc2VhcmNoLWljb24tZmxpcCl+LnVrLXNlYXJjaC1pbnB1dHtwYWRkaW5nLWxlZnQ6NDBweH0udWstc2VhcmNoLW5hdmJhciAudWstc2VhcmNoLWljb24tZmxpcH4udWstc2VhcmNoLWlucHV0e3BhZGRpbmctcmlnaHQ6NDBweH0udWstc2VhcmNoLWxhcmdle3dpZHRoOjUwMHB4fS51ay1zZWFyY2gtbGFyZ2UgLnVrLXNlYXJjaC1pbnB1dHtoZWlnaHQ6ODBweDtiYWNrZ3JvdW5kOjAgMDtmb250LXNpemU6Mi42MjVyZW19LnVrLXNlYXJjaC1sYXJnZSAudWstc2VhcmNoLWljb257d2lkdGg6ODBweH0udWstc2VhcmNoLWxhcmdlIC51ay1zZWFyY2gtaWNvbjpub3QoLnVrLXNlYXJjaC1pY29uLWZsaXApfi51ay1zZWFyY2gtaW5wdXR7cGFkZGluZy1sZWZ0OjgwcHh9LnVrLXNlYXJjaC1sYXJnZSAudWstc2VhcmNoLWljb24tZmxpcH4udWstc2VhcmNoLWlucHV0e3BhZGRpbmctcmlnaHQ6ODBweH0udWstc2VhcmNoLXRvZ2dsZXtjb2xvcjojOTk5fS51ay1zZWFyY2gtdG9nZ2xlOmZvY3VzLC51ay1zZWFyY2gtdG9nZ2xlOmhvdmVye2NvbG9yOiM2NjZ9LnVrLW5hdiwudWstbmF2IHVse21hcmdpbjowO3BhZGRpbmc6MDtsaXN0LXN0eWxlOm5vbmV9LnVrLW5hdiBsaT5he2Rpc3BsYXk6YmxvY2s7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnVrLW5hdiBsaT5hOmZvY3Vze291dGxpbmU6MH0udWstbmF2PmxpPmF7cGFkZGluZzo1cHggMH11bC51ay1uYXYtc3Vie3BhZGRpbmc6NXB4IDAgNXB4IDE1cHh9LnVrLW5hdi1zdWIgdWx7cGFkZGluZy1sZWZ0OjE1cHh9LnVrLW5hdi1zdWIgYXtwYWRkaW5nOjJweCAwfS51ay1uYXYtcGFyZW50LWljb24+LnVrLXBhcmVudD5hOjphZnRlcntjb250ZW50OiIiO3dpZHRoOjEuNWVtO2hlaWdodDoxLjVlbTtmbG9hdDpyaWdodDtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnJTIwd2lkdGglM0QlMjIxNCUyMiUyMGhlaWdodCUzRCUyMjE0JTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTQlMjAxNCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDcG9seWxpbmUlMjBmaWxsJTNEJTIybm9uZSUyMiUyMHN0cm9rZSUzRCUyMiUyMzY2NiUyMiUyMHN0cm9rZS13aWR0aCUzRCUyMjEuMSUyMiUyMHBvaW50cyUzRCUyMjEwJTIwMSUyMDQlMjA3JTIwMTAlMjAxMyUyMiUyMCUyRiUzRSUwQSUzQyUyRnN2ZyUzRSIpO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJSA1MCV9LnVrLW5hdi1wYXJlbnQtaWNvbj4udWstcGFyZW50LnVrLW9wZW4+YTo6YWZ0ZXJ7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMTQlMjIlMjBoZWlnaHQlM0QlMjIxNCUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDE0JTIwMTQlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3BvbHlsaW5lJTIwZmlsbCUzRCUyMm5vbmUlMjIlMjBzdHJva2UlM0QlMjIlMjM2NjYlMjIlMjBzdHJva2Utd2lkdGglM0QlMjIxLjElMjIlMjBwb2ludHMlM0QlMjIxJTIwNCUyMDclMjAxMCUyMDEzJTIwNCUyMiUyMCUyRiUzRSUwQSUzQyUyRnN2ZyUzRSIpfS51ay1uYXYtaGVhZGVye3BhZGRpbmc6NXB4IDA7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2ZvbnQtc2l6ZTouODc1cmVtfS51ay1uYXYtaGVhZGVyOm5vdCg6Zmlyc3QtY2hpbGQpe21hcmdpbi10b3A6MjBweH0udWstbmF2LWRpdmlkZXJ7bWFyZ2luOjVweCAwfS51ay1uYXYtZGVmYXVsdHtmb250LXNpemU6Ljg3NXJlbX0udWstbmF2LWRlZmF1bHQ+bGk+YXtjb2xvcjojOTk5fS51ay1uYXYtZGVmYXVsdD5saT5hOmZvY3VzLC51ay1uYXYtZGVmYXVsdD5saT5hOmhvdmVye2NvbG9yOiM2NjZ9LnVrLW5hdi1kZWZhdWx0PmxpLnVrLWFjdGl2ZT5he2NvbG9yOiMzMzN9LnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtaGVhZGVye2NvbG9yOiMzMzN9LnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtZGl2aWRlcntib3JkZXItdG9wOjFweCBzb2xpZCAjZTVlNWU1fS51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhe2NvbG9yOiM5OTl9LnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGE6Zm9jdXMsLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGE6aG92ZXJ7Y29sb3I6IzY2Nn0udWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlPmF7Y29sb3I6IzMzM30udWstbmF2LXByaW1hcnk+bGk+YXtmb250LXNpemU6MS41cmVtO2xpbmUtaGVpZ2h0OjEuNTtjb2xvcjojOTk5fS51ay1uYXYtcHJpbWFyeT5saT5hOmZvY3VzLC51ay1uYXYtcHJpbWFyeT5saT5hOmhvdmVye2NvbG9yOiM2NjZ9LnVrLW5hdi1wcmltYXJ5PmxpLnVrLWFjdGl2ZT5he2NvbG9yOiMzMzN9LnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtaGVhZGVye2NvbG9yOiMzMzN9LnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtZGl2aWRlcntib3JkZXItdG9wOjFweCBzb2xpZCAjZTVlNWU1fS51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhe2NvbG9yOiM5OTl9LnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGE6Zm9jdXMsLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGE6aG92ZXJ7Y29sb3I6IzY2Nn0udWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlPmF7Y29sb3I6IzMzM30udWstbmF2LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0udWstbmF2LWNlbnRlciAudWstbmF2LXN1YiwudWstbmF2LWNlbnRlciAudWstbmF2LXN1YiB1bHtwYWRkaW5nLWxlZnQ6MH0udWstbmF2LWNlbnRlci51ay1uYXYtcGFyZW50LWljb24+LnVrLXBhcmVudD5hOjphZnRlcntwb3NpdGlvbjphYnNvbHV0ZX0udWstbmF2YmFye2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjpyZWxhdGl2ZX0udWstbmF2YmFyLWNvbnRhaW5lcjpub3QoLnVrLW5hdmJhci10cmFuc3BhcmVudCl7YmFja2dyb3VuZDojZjhmOGY4fS51ay1uYXZiYXItY29udGFpbmVyPjo6YWZ0ZXIsLnVrLW5hdmJhci1jb250YWluZXI+OjpiZWZvcmV7ZGlzcGxheTpub25lIWltcG9ydGFudH0udWstbmF2YmFyLWNlbnRlciwudWstbmF2YmFyLWNlbnRlci1sZWZ0PiosLnVrLW5hdmJhci1jZW50ZXItcmlnaHQ+KiwudWstbmF2YmFyLWxlZnQsLnVrLW5hdmJhci1yaWdodHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS51ay1uYXZiYXItcmlnaHR7bWFyZ2luLWxlZnQ6YXV0b30udWstbmF2YmFyLWNlbnRlcjpvbmx5LWNoaWxke21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OmF1dG87cG9zaXRpb246cmVsYXRpdmV9LnVrLW5hdmJhci1jZW50ZXI6bm90KDpvbmx5LWNoaWxkKXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKTt3aWR0aDptYXgtY29udGVudDtib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDo5OTB9LnVrLW5hdmJhci1jZW50ZXItbGVmdCwudWstbmF2YmFyLWNlbnRlci1yaWdodHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MH0udWstbmF2YmFyLWNlbnRlci1sZWZ0e3JpZ2h0OjEwMCV9LnVrLW5hdmJhci1jZW50ZXItcmlnaHR7bGVmdDoxMDAlfVtjbGFzcyo9dWstbmF2YmFyLWNlbnRlci1de3dpZHRoOm1heC1jb250ZW50O2JveC1zaXppbmc6Ym9yZGVyLWJveH0udWstbmF2YmFyLW5hdntkaXNwbGF5OmZsZXg7bWFyZ2luOjA7cGFkZGluZzowO2xpc3Qtc3R5bGU6bm9uZX0udWstbmF2YmFyLWNlbnRlcjpvbmx5LWNoaWxkLC51ay1uYXZiYXItbGVmdCwudWstbmF2YmFyLXJpZ2h0e2ZsZXgtd3JhcDp3cmFwfS51ay1uYXZiYXItaXRlbSwudWstbmF2YmFyLW5hdj5saT5hLC51ay1uYXZiYXItdG9nZ2xle2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWluLWhlaWdodDo4MHB4O3BhZGRpbmc6MCAxNXB4O2ZvbnQtc2l6ZTouODc1cmVtO2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCJTZWdvZSBVSSIsUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsQXJpYWwsIk5vdG8gU2FucyIsc2Fucy1zZXJpZiwiQXBwbGUgQ29sb3IgRW1vamkiLCJTZWdvZSBVSSBFbW9qaSIsIlNlZ29lIFVJIFN5bWJvbCIsIk5vdG8gQ29sb3IgRW1vamkiO3RleHQtZGVjb3JhdGlvbjpub25lfS51ay1uYXZiYXItbmF2PmxpPmF7Y29sb3I6Izk5OTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7dHJhbnNpdGlvbjouMXMgZWFzZS1pbi1vdXQ7dHJhbnNpdGlvbi1wcm9wZXJ0eTpjb2xvcixiYWNrZ3JvdW5kLWNvbG9yfS51ay1uYXZiYXItbmF2PmxpOmhvdmVyPmEsLnVrLW5hdmJhci1uYXY+bGk+YS51ay1vcGVuLC51ay1uYXZiYXItbmF2PmxpPmE6Zm9jdXN7Y29sb3I6IzY2NjtvdXRsaW5lOjB9LnVrLW5hdmJhci1uYXY+bGk+YTphY3RpdmV7Y29sb3I6IzMzM30udWstbmF2YmFyLW5hdj5saS51ay1hY3RpdmU+YXtjb2xvcjojMzMzfS51ay1uYXZiYXItaXRlbXtjb2xvcjojNjY2fS51ay1uYXZiYXItdG9nZ2xle2NvbG9yOiM5OTl9LnVrLW5hdmJhci10b2dnbGUudWstb3BlbiwudWstbmF2YmFyLXRvZ2dsZTpmb2N1cywudWstbmF2YmFyLXRvZ2dsZTpob3Zlcntjb2xvcjojNjY2O291dGxpbmU6MDt0ZXh0LWRlY29yYXRpb246bm9uZX0udWstbmF2YmFyLXN1YnRpdGxle2ZvbnQtc2l6ZTouODc1cmVtfS51ay1uYXZiYXItZHJvcGRvd257ZGlzcGxheTpub25lO3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAyMDtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MjAwcHg7cGFkZGluZzoyNXB4O2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojNjY2O2JveC1zaGFkb3c6MCA1cHggMTJweCByZ2JhKDAsMCwwLC4xNSl9LnVrLW5hdmJhci1kcm9wZG93bi51ay1vcGVue2Rpc3BsYXk6YmxvY2t9W2NsYXNzKj11ay1uYXZiYXItZHJvcGRvd24tdG9wXXttYXJnaW4tdG9wOi0xNXB4fVtjbGFzcyo9dWstbmF2YmFyLWRyb3Bkb3duLWJvdHRvbV17bWFyZ2luLXRvcDoxNXB4fVtjbGFzcyo9dWstbmF2YmFyLWRyb3Bkb3duLWxlZnRde21hcmdpbi1sZWZ0Oi0xNXB4fVtjbGFzcyo9dWstbmF2YmFyLWRyb3Bkb3duLXJpZ2h0XXttYXJnaW4tbGVmdDoxNXB4fS51ay1uYXZiYXItZHJvcGRvd24tZ3JpZHttYXJnaW4tbGVmdDotNTBweH0udWstbmF2YmFyLWRyb3Bkb3duLWdyaWQ+KntwYWRkaW5nLWxlZnQ6NTBweH0udWstbmF2YmFyLWRyb3Bkb3duLWdyaWQ+LnVrLWdyaWQtbWFyZ2lue21hcmdpbi10b3A6NTBweH0udWstbmF2YmFyLWRyb3Bkb3duLXN0YWNrIC51ay1uYXZiYXItZHJvcGRvd24tZ3JpZD4qe3dpZHRoOjEwMCUhaW1wb3J0YW50fS51ay1uYXZiYXItZHJvcGRvd24td2lkdGgtMjpub3QoLnVrLW5hdmJhci1kcm9wZG93bi1zdGFjayl7d2lkdGg6NDAwcHh9LnVrLW5hdmJhci1kcm9wZG93bi13aWR0aC0zOm5vdCgudWstbmF2YmFyLWRyb3Bkb3duLXN0YWNrKXt3aWR0aDo2MDBweH0udWstbmF2YmFyLWRyb3Bkb3duLXdpZHRoLTQ6bm90KC51ay1uYXZiYXItZHJvcGRvd24tc3RhY2spe3dpZHRoOjgwMHB4fS51ay1uYXZiYXItZHJvcGRvd24td2lkdGgtNTpub3QoLnVrLW5hdmJhci1kcm9wZG93bi1zdGFjayl7d2lkdGg6MTAwMHB4fS51ay1uYXZiYXItZHJvcGRvd24tZHJvcGJhcnttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowO2JveC1zaGFkb3c6bm9uZX0udWstbmF2YmFyLWRyb3Bkb3duLW5hdntmb250LXNpemU6Ljg3NXJlbX0udWstbmF2YmFyLWRyb3Bkb3duLW5hdj5saT5he2NvbG9yOiM5OTl9LnVrLW5hdmJhci1kcm9wZG93bi1uYXY+bGk+YTpmb2N1cywudWstbmF2YmFyLWRyb3Bkb3duLW5hdj5saT5hOmhvdmVye2NvbG9yOiM2NjZ9LnVrLW5hdmJhci1kcm9wZG93bi1uYXY+bGkudWstYWN0aXZlPmF7Y29sb3I6IzMzM30udWstbmF2YmFyLWRyb3Bkb3duLW5hdiAudWstbmF2LWhlYWRlcntjb2xvcjojMzMzfS51ay1uYXZiYXItZHJvcGRvd24tbmF2IC51ay1uYXYtZGl2aWRlcntib3JkZXItdG9wOjFweCBzb2xpZCAjZTVlNWU1fS51ay1uYXZiYXItZHJvcGRvd24tbmF2IC51ay1uYXYtc3ViIGF7Y29sb3I6Izk5OX0udWstbmF2YmFyLWRyb3Bkb3duLW5hdiAudWstbmF2LXN1YiBhOmZvY3VzLC51ay1uYXZiYXItZHJvcGRvd24tbmF2IC51ay1uYXYtc3ViIGE6aG92ZXJ7Y29sb3I6IzY2Nn0udWstbmF2YmFyLWRyb3Bkb3duLW5hdiAudWstbmF2LXN1YiBsaS51ay1hY3RpdmU+YXtjb2xvcjojMzMzfS51ay1uYXZiYXItZHJvcGJhcntiYWNrZ3JvdW5kOiNmZmZ9LnVrLW5hdmJhci1kcm9wYmFyLXNsaWRle3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6OTgwO2xlZnQ6MDtyaWdodDowO2JveC1zaGFkb3c6MCA1cHggN3B4IHJnYmEoMCwwLDAsLjA1KX0udWstbmF2YmFyLWNvbnRhaW5lcj4udWstY29udGFpbmVyIC51ay1uYXZiYXItbGVmdHttYXJnaW4tbGVmdDotMTVweDttYXJnaW4tcmlnaHQ6LTE1cHh9LnVrLW5hdmJhci1jb250YWluZXI+LnVrLWNvbnRhaW5lciAudWstbmF2YmFyLXJpZ2h0e21hcmdpbi1yaWdodDotMTVweH0udWstbmF2YmFyLWRyb3Bkb3duLWdyaWQ+Kntwb3NpdGlvbjpyZWxhdGl2ZX0udWstbmF2YmFyLWRyb3Bkb3duLWdyaWQ+Om5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDoyNXB4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZTVlNWU1fS51ay1uYXZiYXItZHJvcGRvd24tZ3JpZC51ay1ncmlkLXN0YWNrPi51ay1ncmlkLW1hcmdpbjo6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7dG9wOi0yNXB4O2xlZnQ6NTBweDtyaWdodDowO2JvcmRlci10b3A6MXB4IHNvbGlkICNlNWU1ZTV9LnVrLXN1Ym5hdntkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7bWFyZ2luLWxlZnQ6LTIwcHg7cGFkZGluZzowO2xpc3Qtc3R5bGU6bm9uZX0udWstc3VibmF2Pip7ZmxleDpub25lO3BhZGRpbmctbGVmdDoyMHB4O3Bvc2l0aW9uOnJlbGF0aXZlfS51ay1zdWJuYXY+Kj46Zmlyc3QtY2hpbGR7ZGlzcGxheTpibG9jaztjb2xvcjojOTk5O2ZvbnQtc2l6ZTouODc1cmVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTt0cmFuc2l0aW9uOi4xcyBlYXNlLWluLW91dDt0cmFuc2l0aW9uLXByb3BlcnR5OmNvbG9yLGJhY2tncm91bmQtY29sb3J9LnVrLXN1Ym5hdj4qPmE6Zm9jdXMsLnVrLXN1Ym5hdj4qPmE6aG92ZXJ7Y29sb3I6IzY2Njt0ZXh0LWRlY29yYXRpb246bm9uZTtvdXRsaW5lOjB9LnVrLXN1Ym5hdj4udWstYWN0aXZlPmF7Y29sb3I6IzMzM30udWstc3VibmF2LWRpdmlkZXI+KntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS51ay1zdWJuYXYtZGl2aWRlcj46bnRoLWNoaWxkKG4rMik6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmV7Y29udGVudDoiIjtoZWlnaHQ6MS41ZW07bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MjBweDtib3JkZXItbGVmdDoxcHggc29saWQgI2U1ZTVlNX0udWstc3VibmF2LXBpbGw+Kj46Zmlyc3QtY2hpbGR7cGFkZGluZzo1cHggMTBweDtiYWNrZ3JvdW5kOjAgMDtjb2xvcjojOTk5fS51ay1zdWJuYXYtcGlsbD4qPmE6Zm9jdXMsLnVrLXN1Ym5hdi1waWxsPio+YTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmOGY4Zjg7Y29sb3I6IzY2Nn0udWstc3VibmF2LXBpbGw+Kj5hOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiNmOGY4Zjg7Y29sb3I6IzY2Nn0udWstc3VibmF2LXBpbGw+LnVrLWFjdGl2ZT5he2JhY2tncm91bmQtY29sb3I6IzFlODdmMDtjb2xvcjojZmZmfS51ay1zdWJuYXY+LnVrLWRpc2FibGVkPmF7Y29sb3I6Izk5OX0udWstYnJlYWRjcnVtYntkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7cGFkZGluZzowO2xpc3Qtc3R5bGU6bm9uZX0udWstYnJlYWRjcnVtYj4qe2ZsZXg6bm9uZX0udWstYnJlYWRjcnVtYj4qPip7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOi44NzVyZW07Y29sb3I6Izk5OX0udWstYnJlYWRjcnVtYj4qPjpmb2N1cywudWstYnJlYWRjcnVtYj4qPjpob3Zlcntjb2xvcjojNjY2O3RleHQtZGVjb3JhdGlvbjpub25lfS51ay1icmVhZGNydW1iPjpsYXN0LWNoaWxkPip7Y29sb3I6IzY2Nn0udWstYnJlYWRjcnVtYj46bnRoLWNoaWxkKG4rMik6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmV7Y29udGVudDoiLyI7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjAgMjBweDtjb2xvcjojOTk5fS51ay1wYWdpbmF0aW9ue2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDttYXJnaW4tbGVmdDotMjBweDtwYWRkaW5nOjA7bGlzdC1zdHlsZTpub25lfS51ay1wYWdpbmF0aW9uPip7ZmxleDpub25lO3BhZGRpbmctbGVmdDoyMHB4O3Bvc2l0aW9uOnJlbGF0aXZlfS51ay1wYWdpbmF0aW9uPio+KntkaXNwbGF5OmJsb2NrO2NvbG9yOiM5OTk7dHJhbnNpdGlvbjpjb2xvciAuMXMgZWFzZS1pbi1vdXR9LnVrLXBhZ2luYXRpb24+Kj46Zm9jdXMsLnVrLXBhZ2luYXRpb24+Kj46aG92ZXJ7Y29sb3I6IzY2Njt0ZXh0LWRlY29yYXRpb246bm9uZX0udWstcGFnaW5hdGlvbj4udWstYWN0aXZlPip7Y29sb3I6IzY2Nn0udWstcGFnaW5hdGlvbj4udWstZGlzYWJsZWQ+Kntjb2xvcjojOTk5fS51ay10YWJ7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO21hcmdpbi1sZWZ0Oi0yMHB4O3BhZGRpbmc6MDtsaXN0LXN0eWxlOm5vbmU7cG9zaXRpb246cmVsYXRpdmV9LnVrLXRhYjo6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7bGVmdDoyMHB4O3JpZ2h0OjA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2U1ZTVlNX0udWstdGFiPip7ZmxleDpub25lO3BhZGRpbmctbGVmdDoyMHB4O3Bvc2l0aW9uOnJlbGF0aXZlfS51ay10YWI+Kj5he2Rpc3BsYXk6YmxvY2s7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzo1cHggMTBweDtjb2xvcjojOTk5O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHRyYW5zcGFyZW50O2ZvbnQtc2l6ZTouODc1cmVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTt0cmFuc2l0aW9uOmNvbG9yIC4xcyBlYXNlLWluLW91dH0udWstdGFiPio+YTpmb2N1cywudWstdGFiPio+YTpob3Zlcntjb2xvcjojNjY2O3RleHQtZGVjb3JhdGlvbjpub25lfS51ay10YWI+LnVrLWFjdGl2ZT5he2NvbG9yOiMzMzM7Ym9yZGVyLWNvbG9yOiMxZTg3ZjB9LnVrLXRhYj4udWstZGlzYWJsZWQ+YXtjb2xvcjojOTk5fS51ay10YWItYm90dG9tOjpiZWZvcmV7dG9wOjA7Ym90dG9tOmF1dG99LnVrLXRhYi1ib3R0b20+Kj5he2JvcmRlci10b3A6MXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1ib3R0b206bm9uZX0udWstdGFiLWxlZnQsLnVrLXRhYi1yaWdodHtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWFyZ2luLWxlZnQ6MH0udWstdGFiLWxlZnQ+KiwudWstdGFiLXJpZ2h0Pip7cGFkZGluZy1sZWZ0OjB9LnVrLXRhYi1sZWZ0OjpiZWZvcmV7dG9wOjA7Ym90dG9tOjA7bGVmdDphdXRvO3JpZ2h0OjA7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNlNWU1ZTU7Ym9yZGVyLWJvdHRvbTpub25lfS51ay10YWItcmlnaHQ6OmJlZm9yZXt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6YXV0bztib3JkZXItbGVmdDoxcHggc29saWQgI2U1ZTVlNTtib3JkZXItYm90dG9tOm5vbmV9LnVrLXRhYi1sZWZ0Pio+YXt0ZXh0LWFsaWduOmxlZnQ7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOm5vbmV9LnVrLXRhYi1yaWdodD4qPmF7dGV4dC1hbGlnbjpsZWZ0O2JvcmRlci1sZWZ0OjFweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOm5vbmV9LnVrLXRhYiAudWstZHJvcGRvd257bWFyZ2luLWxlZnQ6MzBweH0udWstc2xpZGVuYXZ7cGFkZGluZzo1cHggMTBweDtjb2xvcjpyZ2JhKDEwMiwxMDIsMTAyLC41KTt0cmFuc2l0aW9uOmNvbG9yIC4xcyBlYXNlLWluLW91dH0udWstc2xpZGVuYXY6Zm9jdXMsLnVrLXNsaWRlbmF2OmhvdmVye2NvbG9yOnJnYmEoMTAyLDEwMiwxMDIsLjkpO291dGxpbmU6MH0udWstc2xpZGVuYXY6YWN0aXZle2NvbG9yOnJnYmEoMTAyLDEwMiwxMDIsLjUpfS51ay1zbGlkZW5hdi1sYXJnZXtwYWRkaW5nOjEwcHggMTBweH0udWstc2xpZGVuYXYtY29udGFpbmVye2Rpc3BsYXk6ZmxleH0udWstZG90bmF2e2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDttYXJnaW46MDtwYWRkaW5nOjA7bGlzdC1zdHlsZTpub25lO21hcmdpbi1sZWZ0Oi0xMnB4fS51ay1kb3RuYXY+KntmbGV4Om5vbmU7cGFkZGluZy1sZWZ0OjEycHh9LnVrLWRvdG5hdj4qPip7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MTBweDtoZWlnaHQ6MTBweDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kOjAgMDt0ZXh0LWluZGVudDoxMDAlO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDEwMiwxMDIsMTAyLC40KTt0cmFuc2l0aW9uOi4ycyBlYXNlLWluLW91dDt0cmFuc2l0aW9uLXByb3BlcnR5OmJhY2tncm91bmQtY29sb3IsYm9yZGVyLWNvbG9yfS51ay1kb3RuYXY+Kj46Zm9jdXMsLnVrLWRvdG5hdj4qPjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTAyLDEwMiwxMDIsLjYpO291dGxpbmU6MDtib3JkZXItY29sb3I6dHJhbnNwYXJlbnR9LnVrLWRvdG5hdj4qPjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDEwMiwxMDIsMTAyLC4yKTtib3JkZXItY29sb3I6dHJhbnNwYXJlbnR9LnVrLWRvdG5hdj4udWstYWN0aXZlPip7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDEwMiwxMDIsMTAyLC42KTtib3JkZXItY29sb3I6dHJhbnNwYXJlbnR9LnVrLWRvdG5hdi12ZXJ0aWNhbHtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWFyZ2luLWxlZnQ6MDttYXJnaW4tdG9wOi0xMnB4fS51ay1kb3RuYXYtdmVydGljYWw+KntwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXRvcDoxMnB4fS51ay10aHVtYm5hdntkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7bWFyZ2luOjA7cGFkZGluZzowO2xpc3Qtc3R5bGU6bm9uZTttYXJnaW4tbGVmdDotMTVweH0udWstdGh1bWJuYXY+KntwYWRkaW5nLWxlZnQ6MTVweH0udWstdGh1bWJuYXY+Kj4qe2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlfS51ay10aHVtYm5hdj4qPjo6YWZ0ZXJ7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjQpO3RyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAuMXMgZWFzZS1pbi1vdXR9LnVrLXRodW1ibmF2Pio+OmZvY3VzLC51ay10aHVtYm5hdj4qPjpob3ZlcntvdXRsaW5lOjB9LnVrLXRodW1ibmF2Pio+OmZvY3VzOjphZnRlciwudWstdGh1bWJuYXY+Kj46aG92ZXI6OmFmdGVye2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LnVrLXRodW1ibmF2Pi51ay1hY3RpdmU+OjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS51ay10aHVtYm5hdi12ZXJ0aWNhbHtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWFyZ2luLWxlZnQ6MDttYXJnaW4tdG9wOi0xNXB4fS51ay10aHVtYm5hdi12ZXJ0aWNhbD4qe3BhZGRpbmctbGVmdDowO3BhZGRpbmctdG9wOjE1cHh9LnVrLWFjY29yZGlvbntwYWRkaW5nOjA7bGlzdC1zdHlsZTpub25lfS51ay1hY2NvcmRpb24+Om50aC1jaGlsZChuKzIpe21hcmdpbi10b3A6MjBweH0udWstYWNjb3JkaW9uLXRpdGxle2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjEuMjVyZW07bGluZS1oZWlnaHQ6MS40O2NvbG9yOiMzMzM7b3ZlcmZsb3c6aGlkZGVufS51ay1hY2NvcmRpb24tdGl0bGU6OmJlZm9yZXtjb250ZW50OiIiO3dpZHRoOjEuNGVtO2hlaWdodDoxLjRlbTttYXJnaW4tbGVmdDoxMHB4O2Zsb2F0OnJpZ2h0O2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD1VVEYtOCwlM0NzdmclMjB3aWR0aCUzRCUyMjEzJTIyJTIwaGVpZ2h0JTNEJTIyMTMlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxMyUyMDEzJTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlMEElMjAlMjAlMjAlMjAlM0NyZWN0JTIwZmlsbCUzRCUyMiUyMzY2NiUyMiUyMHdpZHRoJTNEJTIyMTMlMjIlMjBoZWlnaHQlM0QlMjIxJTIyJTIweCUzRCUyMjAlMjIlMjB5JTNEJTIyNiUyMiUyMCUyRiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3JlY3QlMjBmaWxsJTNEJTIyJTIzNjY2JTIyJTIwd2lkdGglM0QlMjIxJTIyJTIwaGVpZ2h0JTNEJTIyMTMlMjIlMjB4JTNEJTIyNiUyMiUyMHklM0QlMjIwJTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFIik7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtcG9zaXRpb246NTAlIDUwJX0udWstb3Blbj4udWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmV7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMTMlMjIlMjBoZWlnaHQlM0QlMjIxMyUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDEzJTIwMTMlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3JlY3QlMjBmaWxsJTNEJTIyJTIzNjY2JTIyJTIwd2lkdGglM0QlMjIxMyUyMiUyMGhlaWdodCUzRCUyMjElMjIlMjB4JTNEJTIyMCUyMiUyMHklM0QlMjI2JTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFIil9LnVrLWFjY29yZGlvbi10aXRsZTpmb2N1cywudWstYWNjb3JkaW9uLXRpdGxlOmhvdmVye2NvbG9yOiM2NjY7dGV4dC1kZWNvcmF0aW9uOm5vbmU7b3V0bGluZTowfS51ay1hY2NvcmRpb24tY29udGVudHttYXJnaW4tdG9wOjIwcHh9LnVrLWFjY29yZGlvbi1jb250ZW50OjphZnRlciwudWstYWNjb3JkaW9uLWNvbnRlbnQ6OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6dGFibGV9LnVrLWFjY29yZGlvbi1jb250ZW50OjphZnRlcntjbGVhcjpib3RofS51ay1hY2NvcmRpb24tY29udGVudD46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9LnVrLWRyb3B7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAyMDtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MzAwcHh9LnVrLWRyb3AudWstb3BlbntkaXNwbGF5OmJsb2NrfVtjbGFzcyo9dWstZHJvcC10b3Bde21hcmdpbi10b3A6LTIwcHh9W2NsYXNzKj11ay1kcm9wLWJvdHRvbV17bWFyZ2luLXRvcDoyMHB4fVtjbGFzcyo9dWstZHJvcC1sZWZ0XXttYXJnaW4tbGVmdDotMjBweH1bY2xhc3MqPXVrLWRyb3AtcmlnaHRde21hcmdpbi1sZWZ0OjIwcHh9LnVrLWRyb3Atc3RhY2sgLnVrLWRyb3AtZ3JpZD4qe3dpZHRoOjEwMCUhaW1wb3J0YW50fS51ay1kcm9wZG93bntkaXNwbGF5Om5vbmU7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDIwO2JveC1zaXppbmc6Ym9yZGVyLWJveDttaW4td2lkdGg6MjAwcHg7cGFkZGluZzoyNXB4O2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojNjY2O2JveC1zaGFkb3c6MCA1cHggMTJweCByZ2JhKDAsMCwwLC4xNSl9LnVrLWRyb3Bkb3duLnVrLW9wZW57ZGlzcGxheTpibG9ja30udWstZHJvcGRvd24tbmF2e3doaXRlLXNwYWNlOm5vd3JhcDtmb250LXNpemU6Ljg3NXJlbX0udWstZHJvcGRvd24tbmF2PmxpPmF7Y29sb3I6Izk5OX0udWstZHJvcGRvd24tbmF2PmxpLnVrLWFjdGl2ZT5hLC51ay1kcm9wZG93bi1uYXY+bGk+YTpmb2N1cywudWstZHJvcGRvd24tbmF2PmxpPmE6aG92ZXJ7Y29sb3I6IzY2Nn0udWstZHJvcGRvd24tbmF2IC51ay1uYXYtaGVhZGVye2NvbG9yOiMzMzN9LnVrLWRyb3Bkb3duLW5hdiAudWstbmF2LWRpdmlkZXJ7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U1ZTVlNX0udWstZHJvcGRvd24tbmF2IC51ay1uYXYtc3ViIGF7Y29sb3I6Izk5OX0udWstZHJvcGRvd24tbmF2IC51ay1uYXYtc3ViIGE6Zm9jdXMsLnVrLWRyb3Bkb3duLW5hdiAudWstbmF2LXN1YiBhOmhvdmVyLC51ay1kcm9wZG93bi1uYXYgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlPmF7Y29sb3I6IzY2Nn1bY2xhc3MqPXVrLWRyb3Bkb3duLXRvcF17bWFyZ2luLXRvcDotMTBweH1bY2xhc3MqPXVrLWRyb3Bkb3duLWJvdHRvbV17bWFyZ2luLXRvcDoxMHB4fVtjbGFzcyo9dWstZHJvcGRvd24tbGVmdF17bWFyZ2luLWxlZnQ6LTEwcHh9W2NsYXNzKj11ay1kcm9wZG93bi1yaWdodF17bWFyZ2luLWxlZnQ6MTBweH0udWstZHJvcGRvd24tc3RhY2sgLnVrLWRyb3Bkb3duLWdyaWQ+Knt3aWR0aDoxMDAlIWltcG9ydGFudH0udWstbW9kYWx7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmZpeGVkO3RvcDowO3JpZ2h0OjA7Ym90dG9tOjA7bGVmdDowO3otaW5kZXg6MTAxMDtvdmVyZmxvdy15OmF1dG87LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2g7cGFkZGluZzoxNXB4IDE1cHg7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC42KTtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IC4xNXMgbGluZWFyfUBtZWRpYSAobWluLXdpZHRoOjY0MHB4KXsudWstbW9kYWx7cGFkZGluZzo1MHB4IDMwcHh9fUBtZWRpYSAobWluLXdpZHRoOjk2MHB4KXsudWstbW9kYWx7cGFkZGluZy1sZWZ0OjQwcHg7cGFkZGluZy1yaWdodDo0MHB4fX0udWstbW9kYWwudWstb3BlbntvcGFjaXR5OjF9LnVrLW1vZGFsLXBhZ2V7b3ZlcmZsb3c6aGlkZGVufS51ay1tb2RhbC1kaWFsb2d7cG9zaXRpb246cmVsYXRpdmU7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbjowIGF1dG87d2lkdGg6NjAwcHg7bWF4LXdpZHRoOmNhbGMoMTAwJSAtIC4wMXB4KSFpbXBvcnRhbnQ7YmFja2dyb3VuZDojZmZmO29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMTAwcHgpO3RyYW5zaXRpb246LjNzIGxpbmVhcjt0cmFuc2l0aW9uLXByb3BlcnR5Om9wYWNpdHksdHJhbnNmb3JtfS51ay1vcGVuPi51ay1tb2RhbC1kaWFsb2d7b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDApfS51ay1tb2RhbC1jb250YWluZXIgLnVrLW1vZGFsLWRpYWxvZ3t3aWR0aDoxMjAwcHh9LnVrLW1vZGFsLWZ1bGx7cGFkZGluZzowO2JhY2tncm91bmQ6MCAwfS51ay1tb2RhbC1mdWxsIC51ay1tb2RhbC1kaWFsb2d7bWFyZ2luOjA7d2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwKX0udWstbW9kYWwtYm9keXtwYWRkaW5nOjMwcHggMzBweH0udWstbW9kYWwtaGVhZGVye3BhZGRpbmc6MTVweCAzMHB4O2JhY2tncm91bmQ6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTVlNWU1fS51ay1tb2RhbC1mb290ZXJ7cGFkZGluZzoxNXB4IDMwcHg7YmFja2dyb3VuZDojZmZmO2JvcmRlci10b3A6MXB4IHNvbGlkICNlNWU1ZTV9LnVrLW1vZGFsLWJvZHk6OmFmdGVyLC51ay1tb2RhbC1ib2R5OjpiZWZvcmUsLnVrLW1vZGFsLWZvb3Rlcjo6YWZ0ZXIsLnVrLW1vZGFsLWZvb3Rlcjo6YmVmb3JlLC51ay1tb2RhbC1oZWFkZXI6OmFmdGVyLC51ay1tb2RhbC1oZWFkZXI6OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6dGFibGV9LnVrLW1vZGFsLWJvZHk6OmFmdGVyLC51ay1tb2RhbC1mb290ZXI6OmFmdGVyLC51ay1tb2RhbC1oZWFkZXI6OmFmdGVye2NsZWFyOmJvdGh9LnVrLW1vZGFsLWJvZHk+Omxhc3QtY2hpbGQsLnVrLW1vZGFsLWZvb3Rlcj46bGFzdC1jaGlsZCwudWstbW9kYWwtaGVhZGVyPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0udWstbW9kYWwtdGl0bGV7Zm9udC1zaXplOjJyZW07bGluZS1oZWlnaHQ6MS4zfVtjbGFzcyo9dWstbW9kYWwtY2xvc2UtXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMTA7dG9wOjEwcHg7cmlnaHQ6MTBweDtwYWRkaW5nOjVweH1bY2xhc3MqPXVrLW1vZGFsLWNsb3NlLV06Zmlyc3QtY2hpbGQrKnttYXJnaW4tdG9wOjB9LnVrLW1vZGFsLWNsb3NlLW91dHNpZGV7dG9wOjA7cmlnaHQ6LTVweDt0cmFuc2Zvcm06dHJhbnNsYXRlKDAsLTEwMCUpO2NvbG9yOiNmZmZ9LnVrLW1vZGFsLWNsb3NlLW91dHNpZGU6aG92ZXJ7Y29sb3I6I2ZmZn1AbWVkaWEgKG1pbi13aWR0aDo5NjBweCl7LnVrLW1vZGFsLWNsb3NlLW91dHNpZGV7cmlnaHQ6MDt0cmFuc2Zvcm06dHJhbnNsYXRlKDEwMCUsLTEwMCUpfX0udWstbW9kYWwtY2xvc2UtZnVsbHt0b3A6MDtyaWdodDowO3BhZGRpbmc6MjBweDtiYWNrZ3JvdW5kOiNmZmZ9LnVrLWxpZ2h0Ym94e2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjpmaXhlZDt0b3A6MDtyaWdodDowO2JvdHRvbTowO2xlZnQ6MDt6LWluZGV4OjEwMTA7YmFja2dyb3VuZDojMDAwO29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjE1cyBsaW5lYXJ9LnVrLWxpZ2h0Ym94LnVrLW9wZW57ZGlzcGxheTpibG9jaztvcGFjaXR5OjF9LnVrLWxpZ2h0Ym94LXBhZ2V7b3ZlcmZsb3c6aGlkZGVufS51ay1saWdodGJveC1pdGVtcz4qe3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3JpZ2h0OjA7Ym90dG9tOjA7bGVmdDowO2Rpc3BsYXk6bm9uZTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KTt3aWxsLWNoYW5nZTp0cmFuc2Zvcm0sb3BhY2l0eX0udWstbGlnaHRib3gtaXRlbXM+Kj4qe21heC13aWR0aDoxMDB2dzttYXgtaGVpZ2h0OjEwMHZofS51ay1saWdodGJveC1pdGVtcz46Zm9jdXN7b3V0bGluZTowfS51ay1saWdodGJveC1pdGVtcz4qPjpub3QoaWZyYW1lKXt3aWR0aDphdXRvO2hlaWdodDphdXRvfS51ay1saWdodGJveC1pdGVtcz4udWstYWN0aXZle2Rpc3BsYXk6ZmxleH0udWstbGlnaHRib3gtdG9vbGJhcntwYWRkaW5nOjEwcHggMTBweDtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMpO2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1saWdodGJveC10b29sYmFyPip7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LnVrLWxpZ2h0Ym94LXRvb2xiYXItaWNvbntwYWRkaW5nOjVweDtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstbGlnaHRib3gtdG9vbGJhci1pY29uOmhvdmVye2NvbG9yOiNmZmZ9LnVrLWxpZ2h0Ym94LWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6NTBweDtoZWlnaHQ6NTBweDtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMpO2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpO2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXJ9LnVrLWxpZ2h0Ym94LWJ1dHRvbjpob3Zlcntjb2xvcjojZmZmfS51ay1saWdodGJveC1pZnJhbWV7d2lkdGg6ODAlO2hlaWdodDo4MCV9LnVrLXNsaWRlc2hvd3std2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnR9LnVrLXNsaWRlc2hvdy1pdGVtc3twb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjA7bWFyZ2luOjA7cGFkZGluZzowO2xpc3Qtc3R5bGU6bm9uZTtvdmVyZmxvdzpoaWRkZW47LXdlYmtpdC10b3VjaC1jYWxsb3V0Om5vbmV9LnVrLXNsaWRlc2hvdy1pdGVtcz4qe3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO292ZXJmbG93OmhpZGRlbjt3aWxsLWNoYW5nZTp0cmFuc2Zvcm0sb3BhY2l0eTt0b3VjaC1hY3Rpb246cGFuLXl9LnVrLXNsaWRlc2hvdy1pdGVtcz46Zm9jdXN7b3V0bGluZTowfS51ay1zbGlkZXNob3ctaXRlbXM+Om5vdCgudWstYWN0aXZlKXtkaXNwbGF5Om5vbmV9LnVrLXNsaWRlcnstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnR9LnVrLXNsaWRlci1jb250YWluZXJ7b3ZlcmZsb3c6aGlkZGVufS51ay1zbGlkZXItaXRlbXN7d2lsbC1jaGFuZ2U6dHJhbnNmb3JtO3Bvc2l0aW9uOnJlbGF0aXZlfS51ay1zbGlkZXItaXRlbXM6bm90KC51ay1ncmlkKXtkaXNwbGF5OmZsZXg7bWFyZ2luOjA7cGFkZGluZzowO2xpc3Qtc3R5bGU6bm9uZTstd2Via2l0LXRvdWNoLWNhbGxvdXQ6bm9uZX0udWstc2xpZGVyLWl0ZW1zLnVrLWdyaWR7ZmxleC13cmFwOm5vd3JhcH0udWstc2xpZGVyLWl0ZW1zPip7ZmxleDpub25lO3Bvc2l0aW9uOnJlbGF0aXZlO3RvdWNoLWFjdGlvbjpwYW4teX0udWstc2xpZGVyLWl0ZW1zPjpmb2N1c3tvdXRsaW5lOjB9LnVrLXN0aWNreS1maXhlZHt6LWluZGV4Ojk4MDtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjAhaW1wb3J0YW50Oy13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW47YmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW59LnVrLXN0aWNreVtjbGFzcyo9dWstYW5pbWF0aW9uLV17YW5pbWF0aW9uLWR1cmF0aW9uOi4yc30udWstc3RpY2t5LnVrLWFuaW1hdGlvbi1yZXZlcnNle2FuaW1hdGlvbi1kdXJhdGlvbjouMnN9LnVrLW9mZmNhbnZhc3tkaXNwbGF5Om5vbmU7cG9zaXRpb246Zml4ZWQ7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3otaW5kZXg6MTAwMH0udWstb2ZmY2FudmFzLWZsaXAgLnVrLW9mZmNhbnZhc3tyaWdodDowO2xlZnQ6YXV0b30udWstb2ZmY2FudmFzLWJhcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0Oi0yNzBweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MjcwcHg7cGFkZGluZzoyMHB4IDIwcHg7YmFja2dyb3VuZDojMjIyO292ZXJmbG93LXk6YXV0bzstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaH1AbWVkaWEgKG1pbi13aWR0aDo5NjBweCl7LnVrLW9mZmNhbnZhcy1iYXJ7bGVmdDotMzUwcHg7d2lkdGg6MzUwcHg7cGFkZGluZzo0MHB4IDQwcHh9fS51ay1vZmZjYW52YXMtZmxpcCAudWstb2ZmY2FudmFzLWJhcntsZWZ0OmF1dG87cmlnaHQ6LTI3MHB4fUBtZWRpYSAobWluLXdpZHRoOjk2MHB4KXsudWstb2ZmY2FudmFzLWZsaXAgLnVrLW9mZmNhbnZhcy1iYXJ7cmlnaHQ6LTM1MHB4fX0udWstb3Blbj4udWstb2ZmY2FudmFzLWJhcntsZWZ0OjB9LnVrLW9mZmNhbnZhcy1mbGlwIC51ay1vcGVuPi51ay1vZmZjYW52YXMtYmFye2xlZnQ6YXV0bztyaWdodDowfS51ay1vZmZjYW52YXMtYmFyLWFuaW1hdGlvbnt0cmFuc2l0aW9uOmxlZnQgLjNzIGVhc2Utb3V0fS51ay1vZmZjYW52YXMtZmxpcCAudWstb2ZmY2FudmFzLWJhci1hbmltYXRpb257dHJhbnNpdGlvbi1wcm9wZXJ0eTpyaWdodH0udWstb2ZmY2FudmFzLXJldmVhbHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7d2lkdGg6MDtvdmVyZmxvdzpoaWRkZW47dHJhbnNpdGlvbjp3aWR0aCAuM3MgZWFzZS1vdXR9LnVrLW9mZmNhbnZhcy1yZXZlYWwgLnVrLW9mZmNhbnZhcy1iYXJ7bGVmdDowfS51ay1vZmZjYW52YXMtZmxpcCAudWstb2ZmY2FudmFzLXJldmVhbCAudWstb2ZmY2FudmFzLWJhcntsZWZ0OmF1dG87cmlnaHQ6MH0udWstb3Blbj4udWstb2ZmY2FudmFzLXJldmVhbHt3aWR0aDoyNzBweH1AbWVkaWEgKG1pbi13aWR0aDo5NjBweCl7LnVrLW9wZW4+LnVrLW9mZmNhbnZhcy1yZXZlYWx7d2lkdGg6MzUwcHh9fS51ay1vZmZjYW52YXMtZmxpcCAudWstb2ZmY2FudmFzLXJldmVhbHtyaWdodDowO2xlZnQ6YXV0b30udWstb2ZmY2FudmFzLWNsb3Nle3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDt0b3A6MjBweDtyaWdodDoyMHB4O3BhZGRpbmc6NXB4fS51ay1vZmZjYW52YXMtb3ZlcmxheXt3aWR0aDoxMDB2dzt0b3VjaC1hY3Rpb246bm9uZX0udWstb2ZmY2FudmFzLW92ZXJsYXk6OmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMSk7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAuMTVzIGxpbmVhcn0udWstb2ZmY2FudmFzLW92ZXJsYXkudWstb3Blbjo6YmVmb3Jle29wYWNpdHk6MX0udWstb2ZmY2FudmFzLWNvbnRhaW5lciwudWstb2ZmY2FudmFzLXBhZ2V7b3ZlcmZsb3cteDpoaWRkZW59LnVrLW9mZmNhbnZhcy1jb250YWluZXJ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDowO3RyYW5zaXRpb246bGVmdCAuM3MgZWFzZS1vdXQ7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCV9Om5vdCgudWstb2ZmY2FudmFzLWZsaXApLnVrLW9mZmNhbnZhcy1jb250YWluZXItYW5pbWF0aW9ue2xlZnQ6MjcwcHh9LnVrLW9mZmNhbnZhcy1mbGlwLnVrLW9mZmNhbnZhcy1jb250YWluZXItYW5pbWF0aW9ue2xlZnQ6LTI3MHB4fUBtZWRpYSAobWluLXdpZHRoOjk2MHB4KXs6bm90KC51ay1vZmZjYW52YXMtZmxpcCkudWstb2ZmY2FudmFzLWNvbnRhaW5lci1hbmltYXRpb257bGVmdDozNTBweH0udWstb2ZmY2FudmFzLWZsaXAudWstb2ZmY2FudmFzLWNvbnRhaW5lci1hbmltYXRpb257bGVmdDotMzUwcHh9fS51ay1zd2l0Y2hlcnttYXJnaW46MDtwYWRkaW5nOjA7bGlzdC1zdHlsZTpub25lfS51ay1zd2l0Y2hlcj46bm90KC51ay1hY3RpdmUpe2Rpc3BsYXk6bm9uZX0udWstc3dpdGNoZXI+Kj46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9LnVrLWxlYWRlcntvdmVyZmxvdzpoaWRkZW59LnVrLWxlYWRlci1maWxsOjphZnRlcntkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tbGVmdDoxNXB4O3dpZHRoOjA7Y29udGVudDphdHRyKGRhdGEtZmlsbCk7d2hpdGUtc3BhY2U6bm93cmFwfS51ay1sZWFkZXItZmlsbC51ay1sZWFkZXItaGlkZTo6YWZ0ZXJ7ZGlzcGxheTpub25lfS51ay1sZWFkZXItZmlsbC1jb250ZW50OjpiZWZvcmV7Y29udGVudDonLid9OnJvb3R7LS11ay1sZWFkZXItZmlsbC1jb250ZW50Oi59LnVrLWljb25uYXZ7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO21hcmdpbjowO3BhZGRpbmc6MDtsaXN0LXN0eWxlOm5vbmU7bWFyZ2luLWxlZnQ6LTEwcHh9LnVrLWljb25uYXY+KntwYWRkaW5nLWxlZnQ6MTBweH0udWstaWNvbm5hdj4qPmF7ZGlzcGxheTpibG9jaztjb2xvcjojOTk5fS51ay1pY29ubmF2Pio+YTpmb2N1cywudWstaWNvbm5hdj4qPmE6aG92ZXJ7Y29sb3I6IzY2NjtvdXRsaW5lOjB9LnVrLWljb25uYXY+LnVrLWFjdGl2ZT5he2NvbG9yOiM2NjZ9LnVrLWljb25uYXYtdmVydGljYWx7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXRvcDotMTBweH0udWstaWNvbm5hdi12ZXJ0aWNhbD4qe3BhZGRpbmctbGVmdDowO3BhZGRpbmctdG9wOjEwcHh9LnVrLW5vdGlmaWNhdGlvbntwb3NpdGlvbjpmaXhlZDt0b3A6MTBweDtsZWZ0OjEwcHg7ei1pbmRleDoxMDQwO2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDozNTBweH0udWstbm90aWZpY2F0aW9uLWJvdHRvbS1yaWdodCwudWstbm90aWZpY2F0aW9uLXRvcC1yaWdodHtsZWZ0OmF1dG87cmlnaHQ6MTBweH0udWstbm90aWZpY2F0aW9uLWJvdHRvbS1jZW50ZXIsLnVrLW5vdGlmaWNhdGlvbi10b3AtY2VudGVye2xlZnQ6NTAlO21hcmdpbi1sZWZ0Oi0xNzVweH0udWstbm90aWZpY2F0aW9uLWJvdHRvbS1jZW50ZXIsLnVrLW5vdGlmaWNhdGlvbi1ib3R0b20tbGVmdCwudWstbm90aWZpY2F0aW9uLWJvdHRvbS1yaWdodHt0b3A6YXV0bztib3R0b206MTBweH1AbWVkaWEgKG1heC13aWR0aDo2MzlweCl7LnVrLW5vdGlmaWNhdGlvbntsZWZ0OjEwcHg7cmlnaHQ6MTBweDt3aWR0aDphdXRvO21hcmdpbjowfX0udWstbm90aWZpY2F0aW9uLW1lc3NhZ2V7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzoxNXB4O2JhY2tncm91bmQ6I2Y4ZjhmODtjb2xvcjojNjY2O2ZvbnQtc2l6ZToxLjI1cmVtO2xpbmUtaGVpZ2h0OjEuNDtjdXJzb3I6cG9pbnRlcn0qKy51ay1ub3RpZmljYXRpb24tbWVzc2FnZXttYXJnaW4tdG9wOjEwcHh9LnVrLW5vdGlmaWNhdGlvbi1jbG9zZXtkaXNwbGF5Om5vbmU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjIwcHg7cmlnaHQ6MTVweH0udWstbm90aWZpY2F0aW9uLW1lc3NhZ2U6aG92ZXIgLnVrLW5vdGlmaWNhdGlvbi1jbG9zZXtkaXNwbGF5OmJsb2NrfS51ay1ub3RpZmljYXRpb24tbWVzc2FnZS1wcmltYXJ5e2NvbG9yOiMxZTg3ZjB9LnVrLW5vdGlmaWNhdGlvbi1tZXNzYWdlLXN1Y2Nlc3N7Y29sb3I6IzMyZDI5Nn0udWstbm90aWZpY2F0aW9uLW1lc3NhZ2Utd2FybmluZ3tjb2xvcjojZmFhMDVhfS51ay1ub3RpZmljYXRpb24tbWVzc2FnZS1kYW5nZXJ7Y29sb3I6I2YwNTA2ZX0udWstdG9vbHRpcHtkaXNwbGF5Om5vbmU7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDMwO2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXgtd2lkdGg6MjAwcHg7cGFkZGluZzozcHggNnB4O2JhY2tncm91bmQ6IzY2Njtib3JkZXItcmFkaXVzOjJweDtjb2xvcjojZmZmO2ZvbnQtc2l6ZToxMnB4fS51ay10b29sdGlwLnVrLWFjdGl2ZXtkaXNwbGF5OmJsb2NrfVtjbGFzcyo9dWstdG9vbHRpcC10b3Bde21hcmdpbi10b3A6LTEwcHh9W2NsYXNzKj11ay10b29sdGlwLWJvdHRvbV17bWFyZ2luLXRvcDoxMHB4fVtjbGFzcyo9dWstdG9vbHRpcC1sZWZ0XXttYXJnaW4tbGVmdDotMTBweH1bY2xhc3MqPXVrLXRvb2x0aXAtcmlnaHRde21hcmdpbi1sZWZ0OjEwcHh9LnVrLXBsYWNlaG9sZGVye21hcmdpbi1ib3R0b206MjBweDtwYWRkaW5nOjMwcHggMzBweDtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MXB4IGRhc2hlZCAjZTVlNWU1fSorLnVrLXBsYWNlaG9sZGVye21hcmdpbi10b3A6MjBweH0udWstcGxhY2Vob2xkZXI+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS51ay1wcm9ncmVzc3t2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7Ym9yZGVyOjA7YmFja2dyb3VuZC1jb2xvcjojZjhmOGY4O21hcmdpbi1ib3R0b206MjBweDtoZWlnaHQ6MTVweDtib3JkZXItcmFkaXVzOjUwMHB4O292ZXJmbG93OmhpZGRlbn0qKy51ay1wcm9ncmVzc3ttYXJnaW4tdG9wOjIwcHh9LnVrLXByb2dyZXNzOmluZGV0ZXJtaW5hdGV7Y29sb3I6dHJhbnNwYXJlbnR9LnVrLXByb2dyZXNzOjotd2Via2l0LXByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmOGY4Zjg7Ym9yZGVyLXJhZGl1czo1MDBweDtvdmVyZmxvdzpoaWRkZW59LnVrLXByb2dyZXNzOmluZGV0ZXJtaW5hdGU6Oi1tb3otcHJvZ3Jlc3MtYmFye3dpZHRoOjB9LnVrLXByb2dyZXNzOjotd2Via2l0LXByb2dyZXNzLXZhbHVle2JhY2tncm91bmQtY29sb3I6IzFlODdmMDt0cmFuc2l0aW9uOndpZHRoIC42cyBlYXNlfS51ay1wcm9ncmVzczo6LW1vei1wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjojMWU4N2YwfS51ay1wcm9ncmVzczo6LW1zLWZpbGx7YmFja2dyb3VuZC1jb2xvcjojMWU4N2YwO3RyYW5zaXRpb246d2lkdGggLjZzIGVhc2U7Ym9yZGVyOjB9LnVrLXNvcnRhYmxle3Bvc2l0aW9uOnJlbGF0aXZlfS51ay1zb3J0YWJsZSBzdmd7cG9pbnRlci1ldmVudHM6bm9uZX0udWstc29ydGFibGU+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS51ay1zb3J0YWJsZS1kcmFne3Bvc2l0aW9uOmFic29sdXRlIWltcG9ydGFudDt6LWluZGV4OjEwNTAhaW1wb3J0YW50O3BvaW50ZXItZXZlbnRzOm5vbmV9LnVrLXNvcnRhYmxlLXBsYWNlaG9sZGVye29wYWNpdHk6MDtwb2ludGVyLWV2ZW50czpub25lfS51ay1zb3J0YWJsZS1lbXB0eXttaW4taGVpZ2h0OjUwcHh9LnVrLXNvcnRhYmxlLWhhbmRsZTpob3ZlcntjdXJzb3I6bW92ZX0udWstY291bnRkb3duLW51bWJlciwudWstY291bnRkb3duLXNlcGFyYXRvcntsaW5lLWhlaWdodDouOH0udWstY291bnRkb3duLW51bWJlcntmb250LXNpemU6MnJlbX1AbWVkaWEgKG1pbi13aWR0aDo2NDBweCl7LnVrLWNvdW50ZG93bi1udW1iZXJ7Zm9udC1zaXplOjRyZW19fUBtZWRpYSAobWluLXdpZHRoOjk2MHB4KXsudWstY291bnRkb3duLW51bWJlcntmb250LXNpemU6NnJlbX19LnVrLWNvdW50ZG93bi1zZXBhcmF0b3J7Zm9udC1zaXplOjFyZW19QG1lZGlhIChtaW4td2lkdGg6NjQwcHgpey51ay1jb3VudGRvd24tc2VwYXJhdG9ye2ZvbnQtc2l6ZToycmVtfX1AbWVkaWEgKG1pbi13aWR0aDo5NjBweCl7LnVrLWNvdW50ZG93bi1zZXBhcmF0b3J7Zm9udC1zaXplOjNyZW19fVtjbGFzcyo9dWstYW5pbWF0aW9uLV17YW5pbWF0aW9uLWR1cmF0aW9uOi41czthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2Utb3V0O2FuaW1hdGlvbi1maWxsLW1vZGU6Ym90aH0udWstYW5pbWF0aW9uLWZhZGV7YW5pbWF0aW9uLW5hbWU6dWstZmFkZTthbmltYXRpb24tZHVyYXRpb246LjhzO2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246bGluZWFyfS51ay1hbmltYXRpb24tc2NhbGUtdXB7YW5pbWF0aW9uLW5hbWU6dWstZmFkZS1zY2FsZS0wMn0udWstYW5pbWF0aW9uLXNjYWxlLWRvd257YW5pbWF0aW9uLW5hbWU6dWstZmFkZS1zY2FsZS0xOH0udWstYW5pbWF0aW9uLXNsaWRlLXRvcHthbmltYXRpb24tbmFtZTp1ay1mYWRlLXRvcH0udWstYW5pbWF0aW9uLXNsaWRlLWJvdHRvbXthbmltYXRpb24tbmFtZTp1ay1mYWRlLWJvdHRvbX0udWstYW5pbWF0aW9uLXNsaWRlLWxlZnR7YW5pbWF0aW9uLW5hbWU6dWstZmFkZS1sZWZ0fS51ay1hbmltYXRpb24tc2xpZGUtcmlnaHR7YW5pbWF0aW9uLW5hbWU6dWstZmFkZS1yaWdodH0udWstYW5pbWF0aW9uLXNsaWRlLXRvcC1zbWFsbHthbmltYXRpb24tbmFtZTp1ay1mYWRlLXRvcC1zbWFsbH0udWstYW5pbWF0aW9uLXNsaWRlLWJvdHRvbS1zbWFsbHthbmltYXRpb24tbmFtZTp1ay1mYWRlLWJvdHRvbS1zbWFsbH0udWstYW5pbWF0aW9uLXNsaWRlLWxlZnQtc21hbGx7YW5pbWF0aW9uLW5hbWU6dWstZmFkZS1sZWZ0LXNtYWxsfS51ay1hbmltYXRpb24tc2xpZGUtcmlnaHQtc21hbGx7YW5pbWF0aW9uLW5hbWU6dWstZmFkZS1yaWdodC1zbWFsbH0udWstYW5pbWF0aW9uLXNsaWRlLXRvcC1tZWRpdW17YW5pbWF0aW9uLW5hbWU6dWstZmFkZS10b3AtbWVkaXVtfS51ay1hbmltYXRpb24tc2xpZGUtYm90dG9tLW1lZGl1bXthbmltYXRpb24tbmFtZTp1ay1mYWRlLWJvdHRvbS1tZWRpdW19LnVrLWFuaW1hdGlvbi1zbGlkZS1sZWZ0LW1lZGl1bXthbmltYXRpb24tbmFtZTp1ay1mYWRlLWxlZnQtbWVkaXVtfS51ay1hbmltYXRpb24tc2xpZGUtcmlnaHQtbWVkaXVte2FuaW1hdGlvbi1uYW1lOnVrLWZhZGUtcmlnaHQtbWVkaXVtfS51ay1hbmltYXRpb24ta2VuYnVybnN7YW5pbWF0aW9uLW5hbWU6dWstc2NhbGUta2VuYnVybnM7YW5pbWF0aW9uLWR1cmF0aW9uOjE1c30udWstYW5pbWF0aW9uLXNoYWtle2FuaW1hdGlvbi1uYW1lOnVrLXNoYWtlfS51ay1hbmltYXRpb24tc3Ryb2tle2FuaW1hdGlvbi1uYW1lOnVrLXN0cm9rZTtzdHJva2UtZGFzaGFycmF5OnZhcigtLXVrLWFuaW1hdGlvbi1zdHJva2UpO2FuaW1hdGlvbi1kdXJhdGlvbjoyc30udWstYW5pbWF0aW9uLXJldmVyc2V7YW5pbWF0aW9uLWRpcmVjdGlvbjpyZXZlcnNlO2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1pbn0udWstYW5pbWF0aW9uLWZhc3R7YW5pbWF0aW9uLWR1cmF0aW9uOi4xc30udWstYW5pbWF0aW9uLXRvZ2dsZTpub3QoOmhvdmVyKTpub3QoOmZvY3VzKSBbY2xhc3MqPXVrLWFuaW1hdGlvbi1de2FuaW1hdGlvbi1uYW1lOm5vbmV9LnVrLWFuaW1hdGlvbi10b2dnbGV7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50fS51ay1hbmltYXRpb24tdG9nZ2xlOmZvY3Vze291dGxpbmU6MH1Aa2V5ZnJhbWVzIHVrLWZhZGV7MCV7b3BhY2l0eTowfTEwMCV7b3BhY2l0eToxfX1Aa2V5ZnJhbWVzIHVrLWZhZGUtdG9wezAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMTAwJSl9MTAwJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMCl9fUBrZXlmcmFtZXMgdWstZmFkZS1ib3R0b217MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDEwMCUpfTEwMCV7b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDApfX1Aa2V5ZnJhbWVzIHVrLWZhZGUtbGVmdHswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwMCUpfTEwMCV7b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGVYKDApfX1Aa2V5ZnJhbWVzIHVrLWZhZGUtcmlnaHR7MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVYKDEwMCUpfTEwMCV7b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGVYKDApfX1Aa2V5ZnJhbWVzIHVrLWZhZGUtdG9wLXNtYWxsezAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMTBweCl9MTAwJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMCl9fUBrZXlmcmFtZXMgdWstZmFkZS1ib3R0b20tc21hbGx7MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDEwcHgpfTEwMCV7b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDApfX1Aa2V5ZnJhbWVzIHVrLWZhZGUtbGVmdC1zbWFsbHswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwcHgpfTEwMCV7b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGVYKDApfX1Aa2V5ZnJhbWVzIHVrLWZhZGUtcmlnaHQtc21hbGx7MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVYKDEwcHgpfTEwMCV7b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGVYKDApfX1Aa2V5ZnJhbWVzIHVrLWZhZGUtdG9wLW1lZGl1bXswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwcHgpfTEwMCV7b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDApfX1Aa2V5ZnJhbWVzIHVrLWZhZGUtYm90dG9tLW1lZGl1bXswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoNTBweCl9MTAwJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMCl9fUBrZXlmcmFtZXMgdWstZmFkZS1sZWZ0LW1lZGl1bXswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwcHgpfTEwMCV7b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGVYKDApfX1Aa2V5ZnJhbWVzIHVrLWZhZGUtcmlnaHQtbWVkaXVtezAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWCg1MHB4KX0xMDAle29wYWNpdHk6MTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgwKX19QGtleWZyYW1lcyB1ay1mYWRlLXNjYWxlLTAyezAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjIpfTEwMCV7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxKX19QGtleWZyYW1lcyB1ay1mYWRlLXNjYWxlLTE4ezAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoMS44KX0xMDAle29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUoMSl9fUBrZXlmcmFtZXMgdWstc2NhbGUta2VuYnVybnN7MCV7dHJhbnNmb3JtOnNjYWxlKDEpfTEwMCV7dHJhbnNmb3JtOnNjYWxlKDEuMil9fUBrZXlmcmFtZXMgdWstc2hha2V7MCUsMTAwJXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgwKX0xMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTlweCl9MjAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKDhweCl9MzAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKC03cHgpfTQwJXt0cmFuc2Zvcm06dHJhbnNsYXRlWCg2cHgpfTUwJXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNXB4KX02MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoNHB4KX03MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTNweCl9ODAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKDJweCl9OTAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xcHgpfX1Aa2V5ZnJhbWVzIHVrLXN0cm9rZXswJXtzdHJva2UtZGFzaG9mZnNldDp2YXIoLS11ay1hbmltYXRpb24tc3Ryb2tlKX0xMDAle3N0cm9rZS1kYXNob2Zmc2V0OjB9fVtjbGFzcyo9dWstY2hpbGQtd2lkdGhdPip7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCV9LnVrLWNoaWxkLXdpZHRoLTEtMj4qe3dpZHRoOjUwJX0udWstY2hpbGQtd2lkdGgtMS0zPip7d2lkdGg6Y2FsYygxMDAlICogMSAvIDMuMDAxKX0udWstY2hpbGQtd2lkdGgtMS00Pip7d2lkdGg6MjUlfS51ay1jaGlsZC13aWR0aC0xLTU+Knt3aWR0aDoyMCV9LnVrLWNoaWxkLXdpZHRoLTEtNj4qe3dpZHRoOmNhbGMoMTAwJSAqIDEgLyA2LjAwMSl9LnVrLWNoaWxkLXdpZHRoLWF1dG8+Knt3aWR0aDphdXRvfS51ay1jaGlsZC13aWR0aC1leHBhbmQ+Om5vdChbY2xhc3MqPXVrLXdpZHRoXSl7ZmxleDoxO21pbi13aWR0aDoxcHh9QG1lZGlhIChtaW4td2lkdGg6NjQwcHgpey51ay1jaGlsZC13aWR0aC0xLTFcQHM+Knt3aWR0aDoxMDAlfS51ay1jaGlsZC13aWR0aC0xLTJcQHM+Knt3aWR0aDo1MCV9LnVrLWNoaWxkLXdpZHRoLTEtM1xAcz4qe3dpZHRoOmNhbGMoMTAwJSAqIDEgLyAzLjAwMSl9LnVrLWNoaWxkLXdpZHRoLTEtNFxAcz4qe3dpZHRoOjI1JX0udWstY2hpbGQtd2lkdGgtMS01XEBzPip7d2lkdGg6MjAlfS51ay1jaGlsZC13aWR0aC0xLTZcQHM+Knt3aWR0aDpjYWxjKDEwMCUgKiAxIC8gNi4wMDEpfS51ay1jaGlsZC13aWR0aC1hdXRvXEBzPip7d2lkdGg6YXV0b30udWstY2hpbGQtd2lkdGgtZXhwYW5kXEBzPjpub3QoW2NsYXNzKj11ay13aWR0aF0pe2ZsZXg6MTttaW4td2lkdGg6MXB4fX1AbWVkaWEgKG1pbi13aWR0aDo5NjBweCl7LnVrLWNoaWxkLXdpZHRoLTEtMVxAbT4qe3dpZHRoOjEwMCV9LnVrLWNoaWxkLXdpZHRoLTEtMlxAbT4qe3dpZHRoOjUwJX0udWstY2hpbGQtd2lkdGgtMS0zXEBtPip7d2lkdGg6Y2FsYygxMDAlICogMSAvIDMuMDAxKX0udWstY2hpbGQtd2lkdGgtMS00XEBtPip7d2lkdGg6MjUlfS51ay1jaGlsZC13aWR0aC0xLTVcQG0+Knt3aWR0aDoyMCV9LnVrLWNoaWxkLXdpZHRoLTEtNlxAbT4qe3dpZHRoOmNhbGMoMTAwJSAqIDEgLyA2LjAwMSl9LnVrLWNoaWxkLXdpZHRoLWF1dG9cQG0+Knt3aWR0aDphdXRvfS51ay1jaGlsZC13aWR0aC1leHBhbmRcQG0+Om5vdChbY2xhc3MqPXVrLXdpZHRoXSl7ZmxleDoxO21pbi13aWR0aDoxcHh9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LnVrLWNoaWxkLXdpZHRoLTEtMVxAbD4qe3dpZHRoOjEwMCV9LnVrLWNoaWxkLXdpZHRoLTEtMlxAbD4qe3dpZHRoOjUwJX0udWstY2hpbGQtd2lkdGgtMS0zXEBsPip7d2lkdGg6Y2FsYygxMDAlICogMSAvIDMuMDAxKX0udWstY2hpbGQtd2lkdGgtMS00XEBsPip7d2lkdGg6MjUlfS51ay1jaGlsZC13aWR0aC0xLTVcQGw+Knt3aWR0aDoyMCV9LnVrLWNoaWxkLXdpZHRoLTEtNlxAbD4qe3dpZHRoOmNhbGMoMTAwJSAqIDEgLyA2LjAwMSl9LnVrLWNoaWxkLXdpZHRoLWF1dG9cQGw+Knt3aWR0aDphdXRvfS51ay1jaGlsZC13aWR0aC1leHBhbmRcQGw+Om5vdChbY2xhc3MqPXVrLXdpZHRoXSl7ZmxleDoxO21pbi13aWR0aDoxcHh9fUBtZWRpYSAobWluLXdpZHRoOjE2MDBweCl7LnVrLWNoaWxkLXdpZHRoLTEtMVxAeGw+Knt3aWR0aDoxMDAlfS51ay1jaGlsZC13aWR0aC0xLTJcQHhsPip7d2lkdGg6NTAlfS51ay1jaGlsZC13aWR0aC0xLTNcQHhsPip7d2lkdGg6Y2FsYygxMDAlICogMSAvIDMuMDAxKX0udWstY2hpbGQtd2lkdGgtMS00XEB4bD4qe3dpZHRoOjI1JX0udWstY2hpbGQtd2lkdGgtMS01XEB4bD4qe3dpZHRoOjIwJX0udWstY2hpbGQtd2lkdGgtMS02XEB4bD4qe3dpZHRoOmNhbGMoMTAwJSAqIDEgLyA2LjAwMSl9LnVrLWNoaWxkLXdpZHRoLWF1dG9cQHhsPip7d2lkdGg6YXV0b30udWstY2hpbGQtd2lkdGgtZXhwYW5kXEB4bD46bm90KFtjbGFzcyo9dWstd2lkdGhdKXtmbGV4OjE7bWluLXdpZHRoOjFweH19W2NsYXNzKj11ay13aWR0aF17Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCU7bWF4LXdpZHRoOjEwMCV9LnVrLXdpZHRoLTEtMnt3aWR0aDo1MCV9LnVrLXdpZHRoLTEtM3t3aWR0aDpjYWxjKDEwMCUgKiAxIC8gMy4wMDEpfS51ay13aWR0aC0yLTN7d2lkdGg6Y2FsYygxMDAlICogMiAvIDMuMDAxKX0udWstd2lkdGgtMS00e3dpZHRoOjI1JX0udWstd2lkdGgtMy00e3dpZHRoOjc1JX0udWstd2lkdGgtMS01e3dpZHRoOjIwJX0udWstd2lkdGgtMi01e3dpZHRoOjQwJX0udWstd2lkdGgtMy01e3dpZHRoOjYwJX0udWstd2lkdGgtNC01e3dpZHRoOjgwJX0udWstd2lkdGgtMS02e3dpZHRoOmNhbGMoMTAwJSAqIDEgLyA2LjAwMSl9LnVrLXdpZHRoLTUtNnt3aWR0aDpjYWxjKDEwMCUgKiA1IC8gNi4wMDEpfS51ay13aWR0aC1zbWFsbHt3aWR0aDoxNTBweH0udWstd2lkdGgtbWVkaXVte3dpZHRoOjMwMHB4fS51ay13aWR0aC1sYXJnZXt3aWR0aDo0NTBweH0udWstd2lkdGgteGxhcmdle3dpZHRoOjYwMHB4fS51ay13aWR0aC14eGxhcmdle3dpZHRoOjc1MHB4fS51ay13aWR0aC1hdXRve3dpZHRoOmF1dG99LnVrLXdpZHRoLWV4cGFuZHtmbGV4OjE7bWluLXdpZHRoOjFweH1AbWVkaWEgKG1pbi13aWR0aDo2NDBweCl7LnVrLXdpZHRoLTEtMVxAc3t3aWR0aDoxMDAlfS51ay13aWR0aC0xLTJcQHN7d2lkdGg6NTAlfS51ay13aWR0aC0xLTNcQHN7d2lkdGg6Y2FsYygxMDAlICogMSAvIDMuMDAxKX0udWstd2lkdGgtMi0zXEBze3dpZHRoOmNhbGMoMTAwJSAqIDIgLyAzLjAwMSl9LnVrLXdpZHRoLTEtNFxAc3t3aWR0aDoyNSV9LnVrLXdpZHRoLTMtNFxAc3t3aWR0aDo3NSV9LnVrLXdpZHRoLTEtNVxAc3t3aWR0aDoyMCV9LnVrLXdpZHRoLTItNVxAc3t3aWR0aDo0MCV9LnVrLXdpZHRoLTMtNVxAc3t3aWR0aDo2MCV9LnVrLXdpZHRoLTQtNVxAc3t3aWR0aDo4MCV9LnVrLXdpZHRoLTEtNlxAc3t3aWR0aDpjYWxjKDEwMCUgKiAxIC8gNi4wMDEpfS51ay13aWR0aC01LTZcQHN7d2lkdGg6Y2FsYygxMDAlICogNSAvIDYuMDAxKX0udWstd2lkdGgtc21hbGxcQHN7d2lkdGg6MTUwcHh9LnVrLXdpZHRoLW1lZGl1bVxAc3t3aWR0aDozMDBweH0udWstd2lkdGgtbGFyZ2VcQHN7d2lkdGg6NDUwcHh9LnVrLXdpZHRoLXhsYXJnZVxAc3t3aWR0aDo2MDBweH0udWstd2lkdGgteHhsYXJnZVxAc3t3aWR0aDo3NTBweH0udWstd2lkdGgtYXV0b1xAc3t3aWR0aDphdXRvfS51ay13aWR0aC1leHBhbmRcQHN7ZmxleDoxO21pbi13aWR0aDoxcHh9fUBtZWRpYSAobWluLXdpZHRoOjk2MHB4KXsudWstd2lkdGgtMS0xXEBte3dpZHRoOjEwMCV9LnVrLXdpZHRoLTEtMlxAbXt3aWR0aDo1MCV9LnVrLXdpZHRoLTEtM1xAbXt3aWR0aDpjYWxjKDEwMCUgKiAxIC8gMy4wMDEpfS51ay13aWR0aC0yLTNcQG17d2lkdGg6Y2FsYygxMDAlICogMiAvIDMuMDAxKX0udWstd2lkdGgtMS00XEBte3dpZHRoOjI1JX0udWstd2lkdGgtMy00XEBte3dpZHRoOjc1JX0udWstd2lkdGgtMS01XEBte3dpZHRoOjIwJX0udWstd2lkdGgtMi01XEBte3dpZHRoOjQwJX0udWstd2lkdGgtMy01XEBte3dpZHRoOjYwJX0udWstd2lkdGgtNC01XEBte3dpZHRoOjgwJX0udWstd2lkdGgtMS02XEBte3dpZHRoOmNhbGMoMTAwJSAqIDEgLyA2LjAwMSl9LnVrLXdpZHRoLTUtNlxAbXt3aWR0aDpjYWxjKDEwMCUgKiA1IC8gNi4wMDEpfS51ay13aWR0aC1zbWFsbFxAbXt3aWR0aDoxNTBweH0udWstd2lkdGgtbWVkaXVtXEBte3dpZHRoOjMwMHB4fS51ay13aWR0aC1sYXJnZVxAbXt3aWR0aDo0NTBweH0udWstd2lkdGgteGxhcmdlXEBte3dpZHRoOjYwMHB4fS51ay13aWR0aC14eGxhcmdlXEBte3dpZHRoOjc1MHB4fS51ay13aWR0aC1hdXRvXEBte3dpZHRoOmF1dG99LnVrLXdpZHRoLWV4cGFuZFxAbXtmbGV4OjE7bWluLXdpZHRoOjFweH19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsudWstd2lkdGgtMS0xXEBse3dpZHRoOjEwMCV9LnVrLXdpZHRoLTEtMlxAbHt3aWR0aDo1MCV9LnVrLXdpZHRoLTEtM1xAbHt3aWR0aDpjYWxjKDEwMCUgKiAxIC8gMy4wMDEpfS51ay13aWR0aC0yLTNcQGx7d2lkdGg6Y2FsYygxMDAlICogMiAvIDMuMDAxKX0udWstd2lkdGgtMS00XEBse3dpZHRoOjI1JX0udWstd2lkdGgtMy00XEBse3dpZHRoOjc1JX0udWstd2lkdGgtMS01XEBse3dpZHRoOjIwJX0udWstd2lkdGgtMi01XEBse3dpZHRoOjQwJX0udWstd2lkdGgtMy01XEBse3dpZHRoOjYwJX0udWstd2lkdGgtNC01XEBse3dpZHRoOjgwJX0udWstd2lkdGgtMS02XEBse3dpZHRoOmNhbGMoMTAwJSAqIDEgLyA2LjAwMSl9LnVrLXdpZHRoLTUtNlxAbHt3aWR0aDpjYWxjKDEwMCUgKiA1IC8gNi4wMDEpfS51ay13aWR0aC1zbWFsbFxAbHt3aWR0aDoxNTBweH0udWstd2lkdGgtbWVkaXVtXEBse3dpZHRoOjMwMHB4fS51ay13aWR0aC1sYXJnZVxAbHt3aWR0aDo0NTBweH0udWstd2lkdGgteGxhcmdlXEBse3dpZHRoOjYwMHB4fS51ay13aWR0aC14eGxhcmdlXEBse3dpZHRoOjc1MHB4fS51ay13aWR0aC1hdXRvXEBse3dpZHRoOmF1dG99LnVrLXdpZHRoLWV4cGFuZFxAbHtmbGV4OjE7bWluLXdpZHRoOjFweH19QG1lZGlhIChtaW4td2lkdGg6MTYwMHB4KXsudWstd2lkdGgtMS0xXEB4bHt3aWR0aDoxMDAlfS51ay13aWR0aC0xLTJcQHhse3dpZHRoOjUwJX0udWstd2lkdGgtMS0zXEB4bHt3aWR0aDpjYWxjKDEwMCUgKiAxIC8gMy4wMDEpfS51ay13aWR0aC0yLTNcQHhse3dpZHRoOmNhbGMoMTAwJSAqIDIgLyAzLjAwMSl9LnVrLXdpZHRoLTEtNFxAeGx7d2lkdGg6MjUlfS51ay13aWR0aC0zLTRcQHhse3dpZHRoOjc1JX0udWstd2lkdGgtMS01XEB4bHt3aWR0aDoyMCV9LnVrLXdpZHRoLTItNVxAeGx7d2lkdGg6NDAlfS51ay13aWR0aC0zLTVcQHhse3dpZHRoOjYwJX0udWstd2lkdGgtNC01XEB4bHt3aWR0aDo4MCV9LnVrLXdpZHRoLTEtNlxAeGx7d2lkdGg6Y2FsYygxMDAlICogMSAvIDYuMDAxKX0udWstd2lkdGgtNS02XEB4bHt3aWR0aDpjYWxjKDEwMCUgKiA1IC8gNi4wMDEpfS51ay13aWR0aC1zbWFsbFxAeGx7d2lkdGg6MTUwcHh9LnVrLXdpZHRoLW1lZGl1bVxAeGx7d2lkdGg6MzAwcHh9LnVrLXdpZHRoLWxhcmdlXEB4bHt3aWR0aDo0NTBweH0udWstd2lkdGgteGxhcmdlXEB4bHt3aWR0aDo2MDBweH0udWstd2lkdGgteHhsYXJnZVxAeGx7d2lkdGg6NzUwcHh9LnVrLXdpZHRoLWF1dG9cQHhse3dpZHRoOmF1dG99LnVrLXdpZHRoLWV4cGFuZFxAeGx7ZmxleDoxO21pbi13aWR0aDoxcHh9fVtjbGFzcyo9dWstaGVpZ2h0XXtib3gtc2l6aW5nOmJvcmRlci1ib3h9LnVrLWhlaWdodC0xLTF7aGVpZ2h0OjEwMCV9LnVrLWhlaWdodC12aWV3cG9ydHttaW4taGVpZ2h0OjEwMHZofS51ay1oZWlnaHQtc21hbGx7aGVpZ2h0OjE1MHB4fS51ay1oZWlnaHQtbWVkaXVte2hlaWdodDozMDBweH0udWstaGVpZ2h0LWxhcmdle2hlaWdodDo0NTBweH0udWstaGVpZ2h0LW1heC1zbWFsbHttYXgtaGVpZ2h0OjE1MHB4fS51ay1oZWlnaHQtbWF4LW1lZGl1bXttYXgtaGVpZ2h0OjMwMHB4fS51ay1oZWlnaHQtbWF4LWxhcmdle21heC1oZWlnaHQ6NDUwcHh9LnVrLXRleHQtbGVhZHtmb250LXNpemU6MS41cmVtO2xpbmUtaGVpZ2h0OjEuNTtjb2xvcjojMzMzfS51ay10ZXh0LW1ldGF7Zm9udC1zaXplOi44NzVyZW07bGluZS1oZWlnaHQ6MS40O2NvbG9yOiM5OTl9LnVrLXRleHQtbWV0YSBhe2NvbG9yOiM5OTl9LnVrLXRleHQtbWV0YSBhOmhvdmVye2NvbG9yOiM2NjY7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnVrLXRleHQtc21hbGx7Zm9udC1zaXplOi44NzVyZW07bGluZS1oZWlnaHQ6MS41fS51ay10ZXh0LWxhcmdle2ZvbnQtc2l6ZToxLjVyZW07bGluZS1oZWlnaHQ6MS41fS51ay10ZXh0LWxpZ2h0e2ZvbnQtd2VpZ2h0OjMwMH0udWstdGV4dC1ub3JtYWx7Zm9udC13ZWlnaHQ6NDAwfS51ay10ZXh0LWJvbGR7Zm9udC13ZWlnaHQ6NzAwfS51ay10ZXh0LWxpZ2h0ZXJ7Zm9udC13ZWlnaHQ6bGlnaHRlcn0udWstdGV4dC1ib2xkZXJ7Zm9udC13ZWlnaHQ6Ym9sZGVyfS51ay10ZXh0LWl0YWxpY3tmb250LXN0eWxlOml0YWxpY30udWstdGV4dC1jYXBpdGFsaXple3RleHQtdHJhbnNmb3JtOmNhcGl0YWxpemUhaW1wb3J0YW50fS51ay10ZXh0LXVwcGVyY2FzZXt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2UhaW1wb3J0YW50fS51ay10ZXh0LWxvd2VyY2FzZXt0ZXh0LXRyYW5zZm9ybTpsb3dlcmNhc2UhaW1wb3J0YW50fS51ay10ZXh0LW11dGVke2NvbG9yOiM5OTkhaW1wb3J0YW50fS51ay10ZXh0LWVtcGhhc2lze2NvbG9yOiMzMzMhaW1wb3J0YW50fS51ay10ZXh0LXByaW1hcnl7Y29sb3I6IzFlODdmMCFpbXBvcnRhbnR9LnVrLXRleHQtc2Vjb25kYXJ5e2NvbG9yOiMyMjIhaW1wb3J0YW50fS51ay10ZXh0LXN1Y2Nlc3N7Y29sb3I6IzMyZDI5NiFpbXBvcnRhbnR9LnVrLXRleHQtd2FybmluZ3tjb2xvcjojZmFhMDVhIWltcG9ydGFudH0udWstdGV4dC1kYW5nZXJ7Y29sb3I6I2YwNTA2ZSFpbXBvcnRhbnR9LnVrLXRleHQtYmFja2dyb3VuZHstd2Via2l0LWJhY2tncm91bmQtY2xpcDp0ZXh0Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2NvbG9yOiMxZTg3ZjAhaW1wb3J0YW50fUBzdXBwb3J0cyAoLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6dGV4dCl7LnVrLXRleHQtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiMxZTg3ZjB9fS51ay10ZXh0LWxlZnR7dGV4dC1hbGlnbjpsZWZ0IWltcG9ydGFudH0udWstdGV4dC1yaWdodHt0ZXh0LWFsaWduOnJpZ2h0IWltcG9ydGFudH0udWstdGV4dC1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXIhaW1wb3J0YW50fS51ay10ZXh0LWp1c3RpZnl7dGV4dC1hbGlnbjpqdXN0aWZ5IWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDo2NDBweCl7LnVrLXRleHQtbGVmdFxAc3t0ZXh0LWFsaWduOmxlZnQhaW1wb3J0YW50fS51ay10ZXh0LXJpZ2h0XEBze3RleHQtYWxpZ246cmlnaHQhaW1wb3J0YW50fS51ay10ZXh0LWNlbnRlclxAc3t0ZXh0LWFsaWduOmNlbnRlciFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjk2MHB4KXsudWstdGV4dC1sZWZ0XEBte3RleHQtYWxpZ246bGVmdCFpbXBvcnRhbnR9LnVrLXRleHQtcmlnaHRcQG17dGV4dC1hbGlnbjpyaWdodCFpbXBvcnRhbnR9LnVrLXRleHQtY2VudGVyXEBte3RleHQtYWxpZ246Y2VudGVyIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsudWstdGV4dC1sZWZ0XEBse3RleHQtYWxpZ246bGVmdCFpbXBvcnRhbnR9LnVrLXRleHQtcmlnaHRcQGx7dGV4dC1hbGlnbjpyaWdodCFpbXBvcnRhbnR9LnVrLXRleHQtY2VudGVyXEBse3RleHQtYWxpZ246Y2VudGVyIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTYwMHB4KXsudWstdGV4dC1sZWZ0XEB4bHt0ZXh0LWFsaWduOmxlZnQhaW1wb3J0YW50fS51ay10ZXh0LXJpZ2h0XEB4bHt0ZXh0LWFsaWduOnJpZ2h0IWltcG9ydGFudH0udWstdGV4dC1jZW50ZXJcQHhse3RleHQtYWxpZ246Y2VudGVyIWltcG9ydGFudH19LnVrLXRleHQtdG9we3ZlcnRpY2FsLWFsaWduOnRvcCFpbXBvcnRhbnR9LnVrLXRleHQtbWlkZGxle3ZlcnRpY2FsLWFsaWduOm1pZGRsZSFpbXBvcnRhbnR9LnVrLXRleHQtYm90dG9te3ZlcnRpY2FsLWFsaWduOmJvdHRvbSFpbXBvcnRhbnR9LnVrLXRleHQtYmFzZWxpbmV7dmVydGljYWwtYWxpZ246YmFzZWxpbmUhaW1wb3J0YW50fS51ay10ZXh0LW5vd3JhcHt3aGl0ZS1zcGFjZTpub3dyYXB9LnVrLXRleHQtdHJ1bmNhdGV7bWF4LXdpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfXRkLnVrLXRleHQtdHJ1bmNhdGUsdGgudWstdGV4dC10cnVuY2F0ZXttYXgtd2lkdGg6MH0udWstdGV4dC1icmVha3tvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmQ7d29yZC13cmFwOmJyZWFrLXdvcmR9dGQudWstdGV4dC1icmVhayx0aC51ay10ZXh0LWJyZWFre3dvcmQtYnJlYWs6YnJlYWstYWxsfVtjbGFzcyo9dWstY29sdW1uLV17Y29sdW1uLWdhcDozMHB4fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7W2NsYXNzKj11ay1jb2x1bW4tXXtjb2x1bW4tZ2FwOjQwcHh9fVtjbGFzcyo9dWstY29sdW1uLV0gaW1ne3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCl9LnVrLWNvbHVtbi1kaXZpZGVye2NvbHVtbi1ydWxlOjFweCBzb2xpZCAjZTVlNWU1O2NvbHVtbi1nYXA6NjBweH1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey51ay1jb2x1bW4tZGl2aWRlcntjb2x1bW4tZ2FwOjgwcHh9fS51ay1jb2x1bW4tMS0ye2NvbHVtbi1jb3VudDoyfS51ay1jb2x1bW4tMS0ze2NvbHVtbi1jb3VudDozfS51ay1jb2x1bW4tMS00e2NvbHVtbi1jb3VudDo0fS51ay1jb2x1bW4tMS01e2NvbHVtbi1jb3VudDo1fS51ay1jb2x1bW4tMS02e2NvbHVtbi1jb3VudDo2fUBtZWRpYSAobWluLXdpZHRoOjY0MHB4KXsudWstY29sdW1uLTEtMlxAc3tjb2x1bW4tY291bnQ6Mn0udWstY29sdW1uLTEtM1xAc3tjb2x1bW4tY291bnQ6M30udWstY29sdW1uLTEtNFxAc3tjb2x1bW4tY291bnQ6NH0udWstY29sdW1uLTEtNVxAc3tjb2x1bW4tY291bnQ6NX0udWstY29sdW1uLTEtNlxAc3tjb2x1bW4tY291bnQ6Nn19QG1lZGlhIChtaW4td2lkdGg6OTYwcHgpey51ay1jb2x1bW4tMS0yXEBte2NvbHVtbi1jb3VudDoyfS51ay1jb2x1bW4tMS0zXEBte2NvbHVtbi1jb3VudDozfS51ay1jb2x1bW4tMS00XEBte2NvbHVtbi1jb3VudDo0fS51ay1jb2x1bW4tMS01XEBte2NvbHVtbi1jb3VudDo1fS51ay1jb2x1bW4tMS02XEBte2NvbHVtbi1jb3VudDo2fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey51ay1jb2x1bW4tMS0yXEBse2NvbHVtbi1jb3VudDoyfS51ay1jb2x1bW4tMS0zXEBse2NvbHVtbi1jb3VudDozfS51ay1jb2x1bW4tMS00XEBse2NvbHVtbi1jb3VudDo0fS51ay1jb2x1bW4tMS01XEBse2NvbHVtbi1jb3VudDo1fS51ay1jb2x1bW4tMS02XEBse2NvbHVtbi1jb3VudDo2fX1AbWVkaWEgKG1pbi13aWR0aDoxNjAwcHgpey51ay1jb2x1bW4tMS0yXEB4bHtjb2x1bW4tY291bnQ6Mn0udWstY29sdW1uLTEtM1xAeGx7Y29sdW1uLWNvdW50OjN9LnVrLWNvbHVtbi0xLTRcQHhse2NvbHVtbi1jb3VudDo0fS51ay1jb2x1bW4tMS01XEB4bHtjb2x1bW4tY291bnQ6NX0udWstY29sdW1uLTEtNlxAeGx7Y29sdW1uLWNvdW50OjZ9fS51ay1jb2x1bW4tc3Bhbntjb2x1bW4tc3BhbjphbGx9LnVrLWNvdmVye21heC13aWR0aDpub25lO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6NTAlO3RvcDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpfWlmcmFtZS51ay1jb3Zlcntwb2ludGVyLWV2ZW50czpub25lfS51ay1jb3Zlci1jb250YWluZXJ7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS51ay1iYWNrZ3JvdW5kLWRlZmF1bHR7YmFja2dyb3VuZC1jb2xvcjojZmZmfS51ay1iYWNrZ3JvdW5kLW11dGVke2JhY2tncm91bmQtY29sb3I6I2Y4ZjhmOH0udWstYmFja2dyb3VuZC1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6IzFlODdmMH0udWstYmFja2dyb3VuZC1zZWNvbmRhcnl7YmFja2dyb3VuZC1jb2xvcjojMjIyfS51ay1iYWNrZ3JvdW5kLWNvbnRhaW4sLnVrLWJhY2tncm91bmQtY292ZXJ7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCUgNTAlO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdH0udWstYmFja2dyb3VuZC1jb3ZlcntiYWNrZ3JvdW5kLXNpemU6Y292ZXJ9LnVrLWJhY2tncm91bmQtY29udGFpbntiYWNrZ3JvdW5kLXNpemU6Y29udGFpbn0udWstYmFja2dyb3VuZC10b3AtbGVmdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMH0udWstYmFja2dyb3VuZC10b3AtY2VudGVye2JhY2tncm91bmQtcG9zaXRpb246NTAlIDB9LnVrLWJhY2tncm91bmQtdG9wLXJpZ2h0e2JhY2tncm91bmQtcG9zaXRpb246MTAwJSAwfS51ay1iYWNrZ3JvdW5kLWNlbnRlci1sZWZ0e2JhY2tncm91bmQtcG9zaXRpb246MCA1MCV9LnVrLWJhY2tncm91bmQtY2VudGVyLWNlbnRlcntiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJSA1MCV9LnVrLWJhY2tncm91bmQtY2VudGVyLXJpZ2h0e2JhY2tncm91bmQtcG9zaXRpb246MTAwJSA1MCV9LnVrLWJhY2tncm91bmQtYm90dG9tLWxlZnR7YmFja2dyb3VuZC1wb3NpdGlvbjowIDEwMCV9LnVrLWJhY2tncm91bmQtYm90dG9tLWNlbnRlcntiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJSAxMDAlfS51ay1iYWNrZ3JvdW5kLWJvdHRvbS1yaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOjEwMCUgMTAwJX0udWstYmFja2dyb3VuZC1ub3JlcGVhdHtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXR9LnVrLWJhY2tncm91bmQtZml4ZWR7YmFja2dyb3VuZC1hdHRhY2htZW50OmZpeGVkO2JhY2tmYWNlLXZpc2liaWxpdHk6aGlkZGVufUBtZWRpYSAocG9pbnRlcjpjb2Fyc2Upey51ay1iYWNrZ3JvdW5kLWZpeGVke2JhY2tncm91bmQtYXR0YWNobWVudDpzY3JvbGx9fUBtZWRpYSAobWF4LXdpZHRoOjYzOXB4KXsudWstYmFja2dyb3VuZC1pbWFnZVxAc3tiYWNrZ3JvdW5kLWltYWdlOm5vbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1heC13aWR0aDo5NTlweCl7LnVrLWJhY2tncm91bmQtaW1hZ2VcQG17YmFja2dyb3VuZC1pbWFnZTpub25lIWltcG9ydGFudH19QG1lZGlhIChtYXgtd2lkdGg6MTE5OXB4KXsudWstYmFja2dyb3VuZC1pbWFnZVxAbHtiYWNrZ3JvdW5kLWltYWdlOm5vbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1heC13aWR0aDoxNTk5cHgpey51ay1iYWNrZ3JvdW5kLWltYWdlXEB4bHtiYWNrZ3JvdW5kLWltYWdlOm5vbmUhaW1wb3J0YW50fX0udWstYmFja2dyb3VuZC1ibGVuZC1tdWx0aXBseXtiYWNrZ3JvdW5kLWJsZW5kLW1vZGU6bXVsdGlwbHl9LnVrLWJhY2tncm91bmQtYmxlbmQtc2NyZWVue2JhY2tncm91bmQtYmxlbmQtbW9kZTpzY3JlZW59LnVrLWJhY2tncm91bmQtYmxlbmQtb3ZlcmxheXtiYWNrZ3JvdW5kLWJsZW5kLW1vZGU6b3ZlcmxheX0udWstYmFja2dyb3VuZC1ibGVuZC1kYXJrZW57YmFja2dyb3VuZC1ibGVuZC1tb2RlOmRhcmtlbn0udWstYmFja2dyb3VuZC1ibGVuZC1saWdodGVue2JhY2tncm91bmQtYmxlbmQtbW9kZTpsaWdodGVufS51ay1iYWNrZ3JvdW5kLWJsZW5kLWNvbG9yLWRvZGdle2JhY2tncm91bmQtYmxlbmQtbW9kZTpjb2xvci1kb2RnZX0udWstYmFja2dyb3VuZC1ibGVuZC1jb2xvci1idXJue2JhY2tncm91bmQtYmxlbmQtbW9kZTpjb2xvci1idXJufS51ay1iYWNrZ3JvdW5kLWJsZW5kLWhhcmQtbGlnaHR7YmFja2dyb3VuZC1ibGVuZC1tb2RlOmhhcmQtbGlnaHR9LnVrLWJhY2tncm91bmQtYmxlbmQtc29mdC1saWdodHtiYWNrZ3JvdW5kLWJsZW5kLW1vZGU6c29mdC1saWdodH0udWstYmFja2dyb3VuZC1ibGVuZC1kaWZmZXJlbmNle2JhY2tncm91bmQtYmxlbmQtbW9kZTpkaWZmZXJlbmNlfS51ay1iYWNrZ3JvdW5kLWJsZW5kLWV4Y2x1c2lvbntiYWNrZ3JvdW5kLWJsZW5kLW1vZGU6ZXhjbHVzaW9ufS51ay1iYWNrZ3JvdW5kLWJsZW5kLWh1ZXtiYWNrZ3JvdW5kLWJsZW5kLW1vZGU6aHVlfS51ay1iYWNrZ3JvdW5kLWJsZW5kLXNhdHVyYXRpb257YmFja2dyb3VuZC1ibGVuZC1tb2RlOnNhdHVyYXRpb259LnVrLWJhY2tncm91bmQtYmxlbmQtY29sb3J7YmFja2dyb3VuZC1ibGVuZC1tb2RlOmNvbG9yfS51ay1iYWNrZ3JvdW5kLWJsZW5kLWx1bWlub3NpdHl7YmFja2dyb3VuZC1ibGVuZC1tb2RlOmx1bWlub3NpdHl9W2NsYXNzKj11ay1hbGlnbl17ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjMwcHh9KitbY2xhc3MqPXVrLWFsaWduXXttYXJnaW4tdG9wOjMwcHh9LnVrLWFsaWduLWNlbnRlcnttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDphdXRvfS51ay1hbGlnbi1sZWZ0e21hcmdpbi10b3A6MDttYXJnaW4tcmlnaHQ6MzBweDtmbG9hdDpsZWZ0fS51ay1hbGlnbi1yaWdodHttYXJnaW4tdG9wOjA7bWFyZ2luLWxlZnQ6MzBweDtmbG9hdDpyaWdodH1AbWVkaWEgKG1pbi13aWR0aDo2NDBweCl7LnVrLWFsaWduLWxlZnRcQHN7bWFyZ2luLXRvcDowO21hcmdpbi1yaWdodDozMHB4O2Zsb2F0OmxlZnR9LnVrLWFsaWduLXJpZ2h0XEBze21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDozMHB4O2Zsb2F0OnJpZ2h0fX1AbWVkaWEgKG1pbi13aWR0aDo5NjBweCl7LnVrLWFsaWduLWxlZnRcQG17bWFyZ2luLXRvcDowO21hcmdpbi1yaWdodDozMHB4O2Zsb2F0OmxlZnR9LnVrLWFsaWduLXJpZ2h0XEBte21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDozMHB4O2Zsb2F0OnJpZ2h0fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey51ay1hbGlnbi1sZWZ0XEBse21hcmdpbi10b3A6MDtmbG9hdDpsZWZ0fS51ay1hbGlnbi1yaWdodFxAbHttYXJnaW4tdG9wOjA7ZmxvYXQ6cmlnaHR9LnVrLWFsaWduLWxlZnQsLnVrLWFsaWduLWxlZnRcQGwsLnVrLWFsaWduLWxlZnRcQG0sLnVrLWFsaWduLWxlZnRcQHN7bWFyZ2luLXJpZ2h0OjQwcHh9LnVrLWFsaWduLXJpZ2h0LC51ay1hbGlnbi1yaWdodFxAbCwudWstYWxpZ24tcmlnaHRcQG0sLnVrLWFsaWduLXJpZ2h0XEBze21hcmdpbi1sZWZ0OjQwcHh9fUBtZWRpYSAobWluLXdpZHRoOjE2MDBweCl7LnVrLWFsaWduLWxlZnRcQHhse21hcmdpbi10b3A6MDttYXJnaW4tcmlnaHQ6NDBweDtmbG9hdDpsZWZ0fS51ay1hbGlnbi1yaWdodFxAeGx7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjQwcHg7ZmxvYXQ6cmlnaHR9fS51ay1zdmcsLnVrLXN2Zzpub3QoLnVrLXByZXNlcnZlKSBbZmlsbCo9JyMnXTpub3QoLnVrLXByZXNlcnZlKXtmaWxsOmN1cnJlbnRjb2xvcn0udWstc3ZnOm5vdCgudWstcHJlc2VydmUpIFtzdHJva2UqPScjJ106bm90KC51ay1wcmVzZXJ2ZSl7c3Ryb2tlOmN1cnJlbnRjb2xvcn0udWstc3Zne3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKX0udWstcGFuZWx7cG9zaXRpb246cmVsYXRpdmU7Ym94LXNpemluZzpib3JkZXItYm94fS51ay1wYW5lbDo6YWZ0ZXIsLnVrLXBhbmVsOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OnRhYmxlfS51ay1wYW5lbDo6YWZ0ZXJ7Y2xlYXI6Ym90aH0udWstcGFuZWw+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS51ay1wYW5lbC1zY3JvbGxhYmxle2hlaWdodDoxNzBweDtwYWRkaW5nOjEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZTVlNWU1O292ZXJmbG93OmF1dG87LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2g7cmVzaXplOmJvdGh9LnVrLWNsZWFyZml4OjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OnRhYmxlLWNlbGx9LnVrLWNsZWFyZml4OjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6dGFibGU7Y2xlYXI6Ym90aH0udWstZmxvYXQtbGVmdHtmbG9hdDpsZWZ0fS51ay1mbG9hdC1yaWdodHtmbG9hdDpyaWdodH1bY2xhc3MqPXVrLWZsb2F0LV17bWF4LXdpZHRoOjEwMCV9LnVrLW92ZXJmbG93LWhpZGRlbntvdmVyZmxvdzpoaWRkZW59LnVrLW92ZXJmbG93LWF1dG97b3ZlcmZsb3c6YXV0bzstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaH0udWstb3ZlcmZsb3ctYXV0bz46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9LnVrLXJlc2l6ZXtyZXNpemU6Ym90aH0udWstcmVzaXplLXZlcnRpY2Fse3Jlc2l6ZTp2ZXJ0aWNhbH0udWstZGlzcGxheS1ibG9ja3tkaXNwbGF5OmJsb2NrIWltcG9ydGFudH0udWstZGlzcGxheS1pbmxpbmV7ZGlzcGxheTppbmxpbmUhaW1wb3J0YW50fS51ay1kaXNwbGF5LWlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9jayFpbXBvcnRhbnR9W2NsYXNzKj11ay1pbmxpbmVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO21heC13aWR0aDoxMDAlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTstd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6aGlkZGVufS51ay1pbmxpbmUtY2xpcHtvdmVyZmxvdzpoaWRkZW59LnVrLXByZXNlcnZlLXdpZHRoLC51ay1wcmVzZXJ2ZS13aWR0aCBjYW52YXMsLnVrLXByZXNlcnZlLXdpZHRoIGltZywudWstcHJlc2VydmUtd2lkdGggc3ZnLC51ay1wcmVzZXJ2ZS13aWR0aCB2aWRlb3ttYXgtd2lkdGg6bm9uZX0udWstcmVzcG9uc2l2ZS1oZWlnaHQsLnVrLXJlc3BvbnNpdmUtd2lkdGh7Ym94LXNpemluZzpib3JkZXItYm94fS51ay1yZXNwb25zaXZlLXdpZHRoe21heC13aWR0aDoxMDAlIWltcG9ydGFudDtoZWlnaHQ6YXV0b30udWstcmVzcG9uc2l2ZS1oZWlnaHR7bWF4LWhlaWdodDoxMDAlO3dpZHRoOmF1dG87bWF4LXdpZHRoOm5vbmV9LnVrLWJvcmRlci1jaXJjbGV7Ym9yZGVyLXJhZGl1czo1MCV9LnVrLWJvcmRlci1waWxse2JvcmRlci1yYWRpdXM6NTAwcHh9LnVrLWJvcmRlci1yb3VuZGVke2JvcmRlci1yYWRpdXM6NXB4fS51ay1pbmxpbmUtY2xpcFtjbGFzcyo9dWstYm9yZGVyLV17LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0udWstYm94LXNoYWRvdy1zbWFsbHtib3gtc2hhZG93OjAgMnB4IDhweCByZ2JhKDAsMCwwLC4wOCl9LnVrLWJveC1zaGFkb3ctbWVkaXVte2JveC1zaGFkb3c6MCA1cHggMTVweCByZ2JhKDAsMCwwLC4wOCl9LnVrLWJveC1zaGFkb3ctbGFyZ2V7Ym94LXNoYWRvdzowIDE0cHggMjVweCByZ2JhKDAsMCwwLC4xNil9LnVrLWJveC1zaGFkb3cteGxhcmdle2JveC1zaGFkb3c6MCAyOHB4IDUwcHggcmdiYSgwLDAsMCwuMTYpfVtjbGFzcyo9dWstYm94LXNoYWRvdy1ob3Zlcl17dHJhbnNpdGlvbjpib3gtc2hhZG93IC4xcyBlYXNlLWluLW91dH0udWstYm94LXNoYWRvdy1ob3Zlci1zbWFsbDpob3Zlcntib3gtc2hhZG93OjAgMnB4IDhweCByZ2JhKDAsMCwwLC4wOCl9LnVrLWJveC1zaGFkb3ctaG92ZXItbWVkaXVtOmhvdmVye2JveC1zaGFkb3c6MCA1cHggMTVweCByZ2JhKDAsMCwwLC4wOCl9LnVrLWJveC1zaGFkb3ctaG92ZXItbGFyZ2U6aG92ZXJ7Ym94LXNoYWRvdzowIDE0cHggMjVweCByZ2JhKDAsMCwwLC4xNil9LnVrLWJveC1zaGFkb3ctaG92ZXIteGxhcmdlOmhvdmVye2JveC1zaGFkb3c6MCAyOHB4IDUwcHggcmdiYSgwLDAsMCwuMTYpfUBzdXBwb3J0cyAoZmlsdGVyOmJsdXIoMCkpey51ay1ib3gtc2hhZG93LWJvdHRvbXtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTttYXgtd2lkdGg6MTAwJTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LnVrLWJveC1zaGFkb3ctYm90dG9tOjpiZWZvcmV7Y29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206LTMwcHg7bGVmdDowO3JpZ2h0OjA7aGVpZ2h0OjMwcHg7Ym9yZGVyLXJhZGl1czoxMDAlO2JhY2tncm91bmQ6IzQ0NDtmaWx0ZXI6Ymx1cigyMHB4KX0udWstYm94LXNoYWRvdy1ib3R0b20+Kntwb3NpdGlvbjpyZWxhdGl2ZX19LnVrLWRyb3BjYXA6OmZpcnN0LWxldHRlciwudWstZHJvcGNhcD5wOmZpcnN0LW9mLXR5cGU6OmZpcnN0LWxldHRlcntkaXNwbGF5OmJsb2NrO21hcmdpbi1yaWdodDoxMHB4O2Zsb2F0OmxlZnQ7Zm9udC1zaXplOjQuNWVtO2xpbmUtaGVpZ2h0OjE7bWFyZ2luLWJvdHRvbTotMnB4fUAtbW96LWRvY3VtZW50IHVybC1wcmVmaXgoKXsudWstZHJvcGNhcDo6Zmlyc3QtbGV0dGVyLC51ay1kcm9wY2FwPnA6Zmlyc3Qtb2YtdHlwZTo6Zmlyc3QtbGV0dGVye21hcmdpbi10b3A6MS4xJX19QHN1cHBvcnRzICgtbXMtaW1lLWFsaWduOmF1dG8pey51ay1kcm9wY2FwPnA6Zmlyc3Qtb2YtdHlwZTo6Zmlyc3QtbGV0dGVye2ZvbnQtc2l6ZToxZW19fS51ay1sb2dve2ZvbnQtc2l6ZToxLjVyZW07Zm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsIlNlZ29lIFVJIixSb2JvdG8sIkhlbHZldGljYSBOZXVlIixBcmlhbCwiTm90byBTYW5zIixzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIiwiU2Vnb2UgVUkgU3ltYm9sIiwiTm90byBDb2xvciBFbW9qaSI7Y29sb3I6IzY2Njt0ZXh0LWRlY29yYXRpb246bm9uZX0udWstbG9nbzpmb2N1cywudWstbG9nbzpob3Zlcntjb2xvcjojNjY2O291dGxpbmU6MDt0ZXh0LWRlY29yYXRpb246bm9uZX0udWstbG9nby1pbnZlcnNle2Rpc3BsYXk6bm9uZX0udWstZGlzYWJsZWR7cG9pbnRlci1ldmVudHM6bm9uZX0udWstZHJhZywudWstZHJhZyAqe2N1cnNvcjptb3ZlfS51ay1kcmFnIGlmcmFtZXtwb2ludGVyLWV2ZW50czpub25lfS51ay1kcmFnb3Zlcntib3gtc2hhZG93OjAgMCAyMHB4IHJnYmEoMTAwLDEwMCwxMDAsLjMpfS51ay1ibGVuZC1tdWx0aXBseXttaXgtYmxlbmQtbW9kZTptdWx0aXBseX0udWstYmxlbmQtc2NyZWVue21peC1ibGVuZC1tb2RlOnNjcmVlbn0udWstYmxlbmQtb3ZlcmxheXttaXgtYmxlbmQtbW9kZTpvdmVybGF5fS51ay1ibGVuZC1kYXJrZW57bWl4LWJsZW5kLW1vZGU6ZGFya2VufS51ay1ibGVuZC1saWdodGVue21peC1ibGVuZC1tb2RlOmxpZ2h0ZW59LnVrLWJsZW5kLWNvbG9yLWRvZGdle21peC1ibGVuZC1tb2RlOmNvbG9yLWRvZGdlfS51ay1ibGVuZC1jb2xvci1idXJue21peC1ibGVuZC1tb2RlOmNvbG9yLWJ1cm59LnVrLWJsZW5kLWhhcmQtbGlnaHR7bWl4LWJsZW5kLW1vZGU6aGFyZC1saWdodH0udWstYmxlbmQtc29mdC1saWdodHttaXgtYmxlbmQtbW9kZTpzb2Z0LWxpZ2h0fS51ay1ibGVuZC1kaWZmZXJlbmNle21peC1ibGVuZC1tb2RlOmRpZmZlcmVuY2V9LnVrLWJsZW5kLWV4Y2x1c2lvbnttaXgtYmxlbmQtbW9kZTpleGNsdXNpb259LnVrLWJsZW5kLWh1ZXttaXgtYmxlbmQtbW9kZTpodWV9LnVrLWJsZW5kLXNhdHVyYXRpb257bWl4LWJsZW5kLW1vZGU6c2F0dXJhdGlvbn0udWstYmxlbmQtY29sb3J7bWl4LWJsZW5kLW1vZGU6Y29sb3J9LnVrLWJsZW5kLWx1bWlub3NpdHl7bWl4LWJsZW5kLW1vZGU6bHVtaW5vc2l0eX0udWstdHJhbnNmb3JtLWNlbnRlcnt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSl9LnVrLXRyYW5zZm9ybS1vcmlnaW4tdG9wLWxlZnR7dHJhbnNmb3JtLW9yaWdpbjowIDB9LnVrLXRyYW5zZm9ybS1vcmlnaW4tdG9wLWNlbnRlcnt0cmFuc2Zvcm0tb3JpZ2luOjUwJSAwfS51ay10cmFuc2Zvcm0tb3JpZ2luLXRvcC1yaWdodHt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMH0udWstdHJhbnNmb3JtLW9yaWdpbi1jZW50ZXItbGVmdHt0cmFuc2Zvcm0tb3JpZ2luOjAgNTAlfS51ay10cmFuc2Zvcm0tb3JpZ2luLWNlbnRlci1yaWdodHt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgNTAlfS51ay10cmFuc2Zvcm0tb3JpZ2luLWJvdHRvbS1sZWZ0e3RyYW5zZm9ybS1vcmlnaW46MCAxMDAlfS51ay10cmFuc2Zvcm0tb3JpZ2luLWJvdHRvbS1jZW50ZXJ7dHJhbnNmb3JtLW9yaWdpbjo1MCUgMTAwJX0udWstdHJhbnNmb3JtLW9yaWdpbi1ib3R0b20tcmlnaHR7dHJhbnNmb3JtLW9yaWdpbjoxMDAlIDEwMCV9LnVrLWZsZXh7ZGlzcGxheTpmbGV4fS51ay1mbGV4LWlubGluZXtkaXNwbGF5OmlubGluZS1mbGV4fS51ay1mbGV4LWlubGluZTo6YWZ0ZXIsLnVrLWZsZXgtaW5saW5lOjpiZWZvcmUsLnVrLWZsZXg6OmFmdGVyLC51ay1mbGV4OjpiZWZvcmV7ZGlzcGxheTpub25lfS51ay1mbGV4LWxlZnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LnVrLWZsZXgtY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9LnVrLWZsZXgtcmlnaHR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS51ay1mbGV4LWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59LnVrLWZsZXgtYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmR9QG1lZGlhIChtaW4td2lkdGg6NjQwcHgpey51ay1mbGV4LWxlZnRcQHN7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LnVrLWZsZXgtY2VudGVyXEBze2p1c3RpZnktY29udGVudDpjZW50ZXJ9LnVrLWZsZXgtcmlnaHRcQHN7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS51ay1mbGV4LWJldHdlZW5cQHN7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59LnVrLWZsZXgtYXJvdW5kXEBze2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmR9fUBtZWRpYSAobWluLXdpZHRoOjk2MHB4KXsudWstZmxleC1sZWZ0XEBte2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS51ay1mbGV4LWNlbnRlclxAbXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS51ay1mbGV4LXJpZ2h0XEBte2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0udWstZmxleC1iZXR3ZWVuXEBte2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS51ay1mbGV4LWFyb3VuZFxAbXtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey51ay1mbGV4LWxlZnRcQGx7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LnVrLWZsZXgtY2VudGVyXEBse2p1c3RpZnktY29udGVudDpjZW50ZXJ9LnVrLWZsZXgtcmlnaHRcQGx7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS51ay1mbGV4LWJldHdlZW5cQGx7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59LnVrLWZsZXgtYXJvdW5kXEBse2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmR9fUBtZWRpYSAobWluLXdpZHRoOjE2MDBweCl7LnVrLWZsZXgtbGVmdFxAeGx7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LnVrLWZsZXgtY2VudGVyXEB4bHtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS51ay1mbGV4LXJpZ2h0XEB4bHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LnVrLWZsZXgtYmV0d2VlblxAeGx7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59LnVrLWZsZXgtYXJvdW5kXEB4bHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfX0udWstZmxleC1zdHJldGNoe2FsaWduLWl0ZW1zOnN0cmV0Y2h9LnVrLWZsZXgtdG9we2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9LnVrLWZsZXgtbWlkZGxle2FsaWduLWl0ZW1zOmNlbnRlcn0udWstZmxleC1ib3R0b217YWxpZ24taXRlbXM6ZmxleC1lbmR9LnVrLWZsZXgtcm93e2ZsZXgtZGlyZWN0aW9uOnJvd30udWstZmxleC1yb3ctcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZX0udWstZmxleC1jb2x1bW57ZmxleC1kaXJlY3Rpb246Y29sdW1ufS51ay1mbGV4LWNvbHVtbi1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlfS51ay1mbGV4LW5vd3JhcHtmbGV4LXdyYXA6bm93cmFwfS51ay1mbGV4LXdyYXB7ZmxleC13cmFwOndyYXB9LnVrLWZsZXgtd3JhcC1yZXZlcnNle2ZsZXgtd3JhcDp3cmFwLXJldmVyc2V9LnVrLWZsZXgtd3JhcC1zdHJldGNoe2FsaWduLWNvbnRlbnQ6c3RyZXRjaH0udWstZmxleC13cmFwLXRvcHthbGlnbi1jb250ZW50OmZsZXgtc3RhcnR9LnVrLWZsZXgtd3JhcC1taWRkbGV7YWxpZ24tY29udGVudDpjZW50ZXJ9LnVrLWZsZXgtd3JhcC1ib3R0b217YWxpZ24tY29udGVudDpmbGV4LWVuZH0udWstZmxleC13cmFwLWJldHdlZW57YWxpZ24tY29udGVudDpzcGFjZS1iZXR3ZWVufS51ay1mbGV4LXdyYXAtYXJvdW5ke2FsaWduLWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS51ay1mbGV4LWZpcnN0e29yZGVyOi0xfS51ay1mbGV4LWxhc3R7b3JkZXI6OTl9QG1lZGlhIChtaW4td2lkdGg6NjQwcHgpey51ay1mbGV4LWZpcnN0XEBze29yZGVyOi0xfS51ay1mbGV4LWxhc3RcQHN7b3JkZXI6OTl9fUBtZWRpYSAobWluLXdpZHRoOjk2MHB4KXsudWstZmxleC1maXJzdFxAbXtvcmRlcjotMX0udWstZmxleC1sYXN0XEBte29yZGVyOjk5fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey51ay1mbGV4LWZpcnN0XEBse29yZGVyOi0xfS51ay1mbGV4LWxhc3RcQGx7b3JkZXI6OTl9fUBtZWRpYSAobWluLXdpZHRoOjE2MDBweCl7LnVrLWZsZXgtZmlyc3RcQHhse29yZGVyOi0xfS51ay1mbGV4LWxhc3RcQHhse29yZGVyOjk5fX0udWstZmxleC1ub25le2ZsZXg6bm9uZX0udWstZmxleC1hdXRve2ZsZXg6YXV0b30udWstZmxleC0xe2ZsZXg6MX0udWstbWFyZ2lue21hcmdpbi1ib3R0b206MjBweH0qKy51ay1tYXJnaW57bWFyZ2luLXRvcDoyMHB4IWltcG9ydGFudH0udWstbWFyZ2luLXRvcHttYXJnaW4tdG9wOjIwcHghaW1wb3J0YW50fS51ay1tYXJnaW4tYm90dG9te21hcmdpbi1ib3R0b206MjBweCFpbXBvcnRhbnR9LnVrLW1hcmdpbi1sZWZ0e21hcmdpbi1sZWZ0OjIwcHghaW1wb3J0YW50fS51ay1tYXJnaW4tcmlnaHR7bWFyZ2luLXJpZ2h0OjIwcHghaW1wb3J0YW50fS51ay1tYXJnaW4tc21hbGx7bWFyZ2luLWJvdHRvbToxMHB4fSorLnVrLW1hcmdpbi1zbWFsbHttYXJnaW4tdG9wOjEwcHghaW1wb3J0YW50fS51ay1tYXJnaW4tc21hbGwtdG9we21hcmdpbi10b3A6MTBweCFpbXBvcnRhbnR9LnVrLW1hcmdpbi1zbWFsbC1ib3R0b217bWFyZ2luLWJvdHRvbToxMHB4IWltcG9ydGFudH0udWstbWFyZ2luLXNtYWxsLWxlZnR7bWFyZ2luLWxlZnQ6MTBweCFpbXBvcnRhbnR9LnVrLW1hcmdpbi1zbWFsbC1yaWdodHttYXJnaW4tcmlnaHQ6MTBweCFpbXBvcnRhbnR9LnVrLW1hcmdpbi1tZWRpdW17bWFyZ2luLWJvdHRvbTo0MHB4fSorLnVrLW1hcmdpbi1tZWRpdW17bWFyZ2luLXRvcDo0MHB4IWltcG9ydGFudH0udWstbWFyZ2luLW1lZGl1bS10b3B7bWFyZ2luLXRvcDo0MHB4IWltcG9ydGFudH0udWstbWFyZ2luLW1lZGl1bS1ib3R0b217bWFyZ2luLWJvdHRvbTo0MHB4IWltcG9ydGFudH0udWstbWFyZ2luLW1lZGl1bS1sZWZ0e21hcmdpbi1sZWZ0OjQwcHghaW1wb3J0YW50fS51ay1tYXJnaW4tbWVkaXVtLXJpZ2h0e21hcmdpbi1yaWdodDo0MHB4IWltcG9ydGFudH0udWstbWFyZ2luLWxhcmdle21hcmdpbi1ib3R0b206NDBweH0qKy51ay1tYXJnaW4tbGFyZ2V7bWFyZ2luLXRvcDo0MHB4IWltcG9ydGFudH0udWstbWFyZ2luLWxhcmdlLXRvcHttYXJnaW4tdG9wOjQwcHghaW1wb3J0YW50fS51ay1tYXJnaW4tbGFyZ2UtYm90dG9te21hcmdpbi1ib3R0b206NDBweCFpbXBvcnRhbnR9LnVrLW1hcmdpbi1sYXJnZS1sZWZ0e21hcmdpbi1sZWZ0OjQwcHghaW1wb3J0YW50fS51ay1tYXJnaW4tbGFyZ2UtcmlnaHR7bWFyZ2luLXJpZ2h0OjQwcHghaW1wb3J0YW50fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LnVrLW1hcmdpbi1sYXJnZXttYXJnaW4tYm90dG9tOjcwcHh9KisudWstbWFyZ2luLWxhcmdle21hcmdpbi10b3A6NzBweCFpbXBvcnRhbnR9LnVrLW1hcmdpbi1sYXJnZS10b3B7bWFyZ2luLXRvcDo3MHB4IWltcG9ydGFudH0udWstbWFyZ2luLWxhcmdlLWJvdHRvbXttYXJnaW4tYm90dG9tOjcwcHghaW1wb3J0YW50fS51ay1tYXJnaW4tbGFyZ2UtbGVmdHttYXJnaW4tbGVmdDo3MHB4IWltcG9ydGFudH0udWstbWFyZ2luLWxhcmdlLXJpZ2h0e21hcmdpbi1yaWdodDo3MHB4IWltcG9ydGFudH19LnVrLW1hcmdpbi14bGFyZ2V7bWFyZ2luLWJvdHRvbTo3MHB4fSorLnVrLW1hcmdpbi14bGFyZ2V7bWFyZ2luLXRvcDo3MHB4IWltcG9ydGFudH0udWstbWFyZ2luLXhsYXJnZS10b3B7bWFyZ2luLXRvcDo3MHB4IWltcG9ydGFudH0udWstbWFyZ2luLXhsYXJnZS1ib3R0b217bWFyZ2luLWJvdHRvbTo3MHB4IWltcG9ydGFudH0udWstbWFyZ2luLXhsYXJnZS1sZWZ0e21hcmdpbi1sZWZ0OjcwcHghaW1wb3J0YW50fS51ay1tYXJnaW4teGxhcmdlLXJpZ2h0e21hcmdpbi1yaWdodDo3MHB4IWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey51ay1tYXJnaW4teGxhcmdle21hcmdpbi1ib3R0b206MTQwcHh9KisudWstbWFyZ2luLXhsYXJnZXttYXJnaW4tdG9wOjE0MHB4IWltcG9ydGFudH0udWstbWFyZ2luLXhsYXJnZS10b3B7bWFyZ2luLXRvcDoxNDBweCFpbXBvcnRhbnR9LnVrLW1hcmdpbi14bGFyZ2UtYm90dG9te21hcmdpbi1ib3R0b206MTQwcHghaW1wb3J0YW50fS51ay1tYXJnaW4teGxhcmdlLWxlZnR7bWFyZ2luLWxlZnQ6MTQwcHghaW1wb3J0YW50fS51ay1tYXJnaW4teGxhcmdlLXJpZ2h0e21hcmdpbi1yaWdodDoxNDBweCFpbXBvcnRhbnR9fS51ay1tYXJnaW4tYXV0b3ttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9LnVrLW1hcmdpbi1hdXRvLXRvcHttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fS51ay1tYXJnaW4tYXV0by1ib3R0b217bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH0udWstbWFyZ2luLWF1dG8tbGVmdHttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH0udWstbWFyZ2luLWF1dG8tcmlnaHR7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fS51ay1tYXJnaW4tYXV0by12ZXJ0aWNhbHttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50O21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9QG1lZGlhIChtaW4td2lkdGg6NjQwcHgpey51ay1tYXJnaW4tYXV0b1xAc3ttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9LnVrLW1hcmdpbi1hdXRvLWxlZnRcQHN7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9LnVrLW1hcmdpbi1hdXRvLXJpZ2h0XEBze21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6OTYwcHgpey51ay1tYXJnaW4tYXV0b1xAbXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9LnVrLW1hcmdpbi1hdXRvLWxlZnRcQG17bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9LnVrLW1hcmdpbi1hdXRvLXJpZ2h0XEBte21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsudWstbWFyZ2luLWF1dG9cQGx7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fS51ay1tYXJnaW4tYXV0by1sZWZ0XEBse21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fS51ay1tYXJnaW4tYXV0by1yaWdodFxAbHttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjE2MDBweCl7LnVrLW1hcmdpbi1hdXRvXEB4bHttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9LnVrLW1hcmdpbi1hdXRvLWxlZnRcQHhse21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fS51ay1tYXJnaW4tYXV0by1yaWdodFxAeGx7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fX0udWstbWFyZ2luLXJlbW92ZXttYXJnaW46MCFpbXBvcnRhbnR9LnVrLW1hcmdpbi1yZW1vdmUtdG9we21hcmdpbi10b3A6MCFpbXBvcnRhbnR9LnVrLW1hcmdpbi1yZW1vdmUtYm90dG9te21hcmdpbi1ib3R0b206MCFpbXBvcnRhbnR9LnVrLW1hcmdpbi1yZW1vdmUtbGVmdHttYXJnaW4tbGVmdDowIWltcG9ydGFudH0udWstbWFyZ2luLXJlbW92ZS1yaWdodHttYXJnaW4tcmlnaHQ6MCFpbXBvcnRhbnR9LnVrLW1hcmdpbi1yZW1vdmUtdmVydGljYWx7bWFyZ2luLXRvcDowIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fS51ay1tYXJnaW4tcmVtb3ZlLWFkamFjZW50KyosLnVrLW1hcmdpbi1yZW1vdmUtZmlyc3QtY2hpbGQ+OmZpcnN0LWNoaWxke21hcmdpbi10b3A6MCFpbXBvcnRhbnR9LnVrLW1hcmdpbi1yZW1vdmUtbGFzdC1jaGlsZD46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fUBtZWRpYSAobWluLXdpZHRoOjY0MHB4KXsudWstbWFyZ2luLXJlbW92ZS1sZWZ0XEBze21hcmdpbi1sZWZ0OjAhaW1wb3J0YW50fS51ay1tYXJnaW4tcmVtb3ZlLXJpZ2h0XEBze21hcmdpbi1yaWdodDowIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6OTYwcHgpey51ay1tYXJnaW4tcmVtb3ZlLWxlZnRcQG17bWFyZ2luLWxlZnQ6MCFpbXBvcnRhbnR9LnVrLW1hcmdpbi1yZW1vdmUtcmlnaHRcQG17bWFyZ2luLXJpZ2h0OjAhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey51ay1tYXJnaW4tcmVtb3ZlLWxlZnRcQGx7bWFyZ2luLWxlZnQ6MCFpbXBvcnRhbnR9LnVrLW1hcmdpbi1yZW1vdmUtcmlnaHRcQGx7bWFyZ2luLXJpZ2h0OjAhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxNjAwcHgpey51ay1tYXJnaW4tcmVtb3ZlLWxlZnRcQHhse21hcmdpbi1sZWZ0OjAhaW1wb3J0YW50fS51ay1tYXJnaW4tcmVtb3ZlLXJpZ2h0XEB4bHttYXJnaW4tcmlnaHQ6MCFpbXBvcnRhbnR9fS51ay1wYWRkaW5ne3BhZGRpbmc6MzBweH1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey51ay1wYWRkaW5ne3BhZGRpbmc6NDBweH19LnVrLXBhZGRpbmctc21hbGx7cGFkZGluZzoxNXB4fS51ay1wYWRkaW5nLWxhcmdle3BhZGRpbmc6MzBweH1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey51ay1wYWRkaW5nLWxhcmdle3BhZGRpbmc6NzBweH19LnVrLXBhZGRpbmctcmVtb3Zle3BhZGRpbmc6MCFpbXBvcnRhbnR9LnVrLXBhZGRpbmctcmVtb3ZlLXRvcHtwYWRkaW5nLXRvcDowIWltcG9ydGFudH0udWstcGFkZGluZy1yZW1vdmUtYm90dG9te3BhZGRpbmctYm90dG9tOjAhaW1wb3J0YW50fS51ay1wYWRkaW5nLXJlbW92ZS1sZWZ0e3BhZGRpbmctbGVmdDowIWltcG9ydGFudH0udWstcGFkZGluZy1yZW1vdmUtcmlnaHR7cGFkZGluZy1yaWdodDowIWltcG9ydGFudH0udWstcGFkZGluZy1yZW1vdmUtdmVydGljYWx7cGFkZGluZy10b3A6MCFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206MCFpbXBvcnRhbnR9LnVrLXBhZGRpbmctcmVtb3ZlLWhvcml6b250YWx7cGFkZGluZy1sZWZ0OjAhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRhbnR9W2NsYXNzKj11ay1wb3NpdGlvbi1ib3R0b21dLFtjbGFzcyo9dWstcG9zaXRpb24tY2VudGVyXSxbY2xhc3MqPXVrLXBvc2l0aW9uLWxlZnRdLFtjbGFzcyo9dWstcG9zaXRpb24tcmlnaHRdLFtjbGFzcyo9dWstcG9zaXRpb24tdG9wXXtwb3NpdGlvbjphYnNvbHV0ZSFpbXBvcnRhbnR9LnVrLXBvc2l0aW9uLXRvcHt0b3A6MDtsZWZ0OjA7cmlnaHQ6MH0udWstcG9zaXRpb24tYm90dG9te2JvdHRvbTowO2xlZnQ6MDtyaWdodDowfS51ay1wb3NpdGlvbi1sZWZ0e3RvcDowO2JvdHRvbTowO2xlZnQ6MH0udWstcG9zaXRpb24tcmlnaHR7dG9wOjA7Ym90dG9tOjA7cmlnaHQ6MH0udWstcG9zaXRpb24tdG9wLWxlZnR7dG9wOjA7bGVmdDowfS51ay1wb3NpdGlvbi10b3AtcmlnaHR7dG9wOjA7cmlnaHQ6MH0udWstcG9zaXRpb24tYm90dG9tLWxlZnR7Ym90dG9tOjA7bGVmdDowfS51ay1wb3NpdGlvbi1ib3R0b20tcmlnaHR7Ym90dG9tOjA7cmlnaHQ6MH0udWstcG9zaXRpb24tY2VudGVye3RvcDo1MCU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpO3dpZHRoOm1heC1jb250ZW50O21heC13aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH1bY2xhc3MqPXVrLXBvc2l0aW9uLWNlbnRlci1sZWZ0XSxbY2xhc3MqPXVrLXBvc2l0aW9uLWNlbnRlci1yaWdodF17dG9wOjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKX0udWstcG9zaXRpb24tY2VudGVyLWxlZnR7bGVmdDowfS51ay1wb3NpdGlvbi1jZW50ZXItcmlnaHR7cmlnaHQ6MH0udWstcG9zaXRpb24tY2VudGVyLWxlZnQtb3V0e3JpZ2h0OjEwMCU7d2lkdGg6bWF4LWNvbnRlbnR9LnVrLXBvc2l0aW9uLWNlbnRlci1yaWdodC1vdXR7bGVmdDoxMDAlO3dpZHRoOm1heC1jb250ZW50fS51ay1wb3NpdGlvbi1ib3R0b20tY2VudGVyLC51ay1wb3NpdGlvbi10b3AtY2VudGVye2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpO3dpZHRoOm1heC1jb250ZW50O21heC13aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0udWstcG9zaXRpb24tdG9wLWNlbnRlcnt0b3A6MH0udWstcG9zaXRpb24tYm90dG9tLWNlbnRlcntib3R0b206MH0udWstcG9zaXRpb24tY292ZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjB9LnVrLXBvc2l0aW9uLXJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlIWltcG9ydGFudH0udWstcG9zaXRpb24tYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGUhaW1wb3J0YW50fS51ay1wb3NpdGlvbi1maXhlZHtwb3NpdGlvbjpmaXhlZCFpbXBvcnRhbnR9LnVrLXBvc2l0aW9uLXotaW5kZXh7ei1pbmRleDoxfS51ay1wb3NpdGlvbi1zbWFsbHttYXgtd2lkdGg6Y2FsYygxMDAlIC0gKDE1cHggKiAyKSk7bWFyZ2luOjE1cHh9LnVrLXBvc2l0aW9uLXNtYWxsLnVrLXBvc2l0aW9uLWNlbnRlcnt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSkgdHJhbnNsYXRlKC0xNXB4LC0xNXB4KX0udWstcG9zaXRpb24tc21hbGxbY2xhc3MqPXVrLXBvc2l0aW9uLWNlbnRlci1sZWZ0XSwudWstcG9zaXRpb24tc21hbGxbY2xhc3MqPXVrLXBvc2l0aW9uLWNlbnRlci1yaWdodF17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSkgdHJhbnNsYXRlWSgtMTVweCl9LnVrLXBvc2l0aW9uLXNtYWxsLnVrLXBvc2l0aW9uLWJvdHRvbS1jZW50ZXIsLnVrLXBvc2l0aW9uLXNtYWxsLnVrLXBvc2l0aW9uLXRvcC1jZW50ZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWCgtMTVweCl9LnVrLXBvc2l0aW9uLW1lZGl1bXttYXgtd2lkdGg6Y2FsYygxMDAlIC0gKDMwcHggKiAyKSk7bWFyZ2luOjMwcHh9LnVrLXBvc2l0aW9uLW1lZGl1bS51ay1wb3NpdGlvbi1jZW50ZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpIHRyYW5zbGF0ZSgtMzBweCwtMzBweCl9LnVrLXBvc2l0aW9uLW1lZGl1bVtjbGFzcyo9dWstcG9zaXRpb24tY2VudGVyLWxlZnRdLC51ay1wb3NpdGlvbi1tZWRpdW1bY2xhc3MqPXVrLXBvc2l0aW9uLWNlbnRlci1yaWdodF17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSkgdHJhbnNsYXRlWSgtMzBweCl9LnVrLXBvc2l0aW9uLW1lZGl1bS51ay1wb3NpdGlvbi1ib3R0b20tY2VudGVyLC51ay1wb3NpdGlvbi1tZWRpdW0udWstcG9zaXRpb24tdG9wLWNlbnRlcnt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKSB0cmFuc2xhdGVYKC0zMHB4KX0udWstcG9zaXRpb24tbGFyZ2V7bWF4LXdpZHRoOmNhbGMoMTAwJSAtICgzMHB4ICogMikpO21hcmdpbjozMHB4fS51ay1wb3NpdGlvbi1sYXJnZS51ay1wb3NpdGlvbi1jZW50ZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpIHRyYW5zbGF0ZSgtMzBweCwtMzBweCl9LnVrLXBvc2l0aW9uLWxhcmdlW2NsYXNzKj11ay1wb3NpdGlvbi1jZW50ZXItbGVmdF0sLnVrLXBvc2l0aW9uLWxhcmdlW2NsYXNzKj11ay1wb3NpdGlvbi1jZW50ZXItcmlnaHRde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpIHRyYW5zbGF0ZVkoLTMwcHgpfS51ay1wb3NpdGlvbi1sYXJnZS51ay1wb3NpdGlvbi1ib3R0b20tY2VudGVyLC51ay1wb3NpdGlvbi1sYXJnZS51ay1wb3NpdGlvbi10b3AtY2VudGVye3RyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVgoLTMwcHgpfUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LnVrLXBvc2l0aW9uLWxhcmdle21heC13aWR0aDpjYWxjKDEwMCUgLSAoNTBweCAqIDIpKTttYXJnaW46NTBweH0udWstcG9zaXRpb24tbGFyZ2UudWstcG9zaXRpb24tY2VudGVye3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKSB0cmFuc2xhdGUoLTUwcHgsLTUwcHgpfS51ay1wb3NpdGlvbi1sYXJnZVtjbGFzcyo9dWstcG9zaXRpb24tY2VudGVyLWxlZnRdLC51ay1wb3NpdGlvbi1sYXJnZVtjbGFzcyo9dWstcG9zaXRpb24tY2VudGVyLXJpZ2h0XXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKSB0cmFuc2xhdGVZKC01MHB4KX0udWstcG9zaXRpb24tbGFyZ2UudWstcG9zaXRpb24tYm90dG9tLWNlbnRlciwudWstcG9zaXRpb24tbGFyZ2UudWstcG9zaXRpb24tdG9wLWNlbnRlcnt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKSB0cmFuc2xhdGVYKC01MHB4KX19LnVrLXRyYW5zaXRpb24tdG9nZ2xley13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudH0udWstdHJhbnNpdGlvbi10b2dnbGU6Zm9jdXN7b3V0bGluZTowfS51ay10cmFuc2l0aW9uLWZhZGUsW2NsYXNzKj11ay10cmFuc2l0aW9uLXNjYWxlXSxbY2xhc3MqPXVrLXRyYW5zaXRpb24tc2xpZGVde3RyYW5zaXRpb246LjNzIGVhc2Utb3V0O3RyYW5zaXRpb24tcHJvcGVydHk6b3BhY2l0eSx0cmFuc2Zvcm0sZmlsdGVyO29wYWNpdHk6MH0udWstdHJhbnNpdGlvbi1hY3RpdmUudWstYWN0aXZlIC51ay10cmFuc2l0aW9uLWZhZGUsLnVrLXRyYW5zaXRpb24tdG9nZ2xlOmZvY3VzIC51ay10cmFuc2l0aW9uLWZhZGUsLnVrLXRyYW5zaXRpb24tdG9nZ2xlOmhvdmVyIC51ay10cmFuc2l0aW9uLWZhZGV7b3BhY2l0eToxfS51ay10cmFuc2l0aW9uLXNjYWxlLXVwe3RyYW5zZm9ybTpzY2FsZSgxLDEpfS51ay10cmFuc2l0aW9uLXNjYWxlLWRvd257dHJhbnNmb3JtOnNjYWxlKDEuMSwxLjEpfS51ay10cmFuc2l0aW9uLWFjdGl2ZS51ay1hY3RpdmUgLnVrLXRyYW5zaXRpb24tc2NhbGUtdXAsLnVrLXRyYW5zaXRpb24tdG9nZ2xlOmZvY3VzIC51ay10cmFuc2l0aW9uLXNjYWxlLXVwLC51ay10cmFuc2l0aW9uLXRvZ2dsZTpob3ZlciAudWstdHJhbnNpdGlvbi1zY2FsZS11cHtvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEuMSwxLjEpfS51ay10cmFuc2l0aW9uLWFjdGl2ZS51ay1hY3RpdmUgLnVrLXRyYW5zaXRpb24tc2NhbGUtZG93biwudWstdHJhbnNpdGlvbi10b2dnbGU6Zm9jdXMgLnVrLXRyYW5zaXRpb24tc2NhbGUtZG93biwudWstdHJhbnNpdGlvbi10b2dnbGU6aG92ZXIgLnVrLXRyYW5zaXRpb24tc2NhbGUtZG93bntvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEsMSl9LnVrLXRyYW5zaXRpb24tc2xpZGUtdG9we3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xMDAlKX0udWstdHJhbnNpdGlvbi1zbGlkZS1ib3R0b217dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMTAwJSl9LnVrLXRyYW5zaXRpb24tc2xpZGUtbGVmdHt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTAwJSl9LnVrLXRyYW5zaXRpb24tc2xpZGUtcmlnaHR7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMTAwJSl9LnVrLXRyYW5zaXRpb24tc2xpZGUtdG9wLXNtYWxse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xMHB4KX0udWstdHJhbnNpdGlvbi1zbGlkZS1ib3R0b20tc21hbGx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMTBweCl9LnVrLXRyYW5zaXRpb24tc2xpZGUtbGVmdC1zbWFsbHt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTBweCl9LnVrLXRyYW5zaXRpb24tc2xpZGUtcmlnaHQtc21hbGx7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMTBweCl9LnVrLXRyYW5zaXRpb24tc2xpZGUtdG9wLW1lZGl1bXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTBweCl9LnVrLXRyYW5zaXRpb24tc2xpZGUtYm90dG9tLW1lZGl1bXt0cmFuc2Zvcm06dHJhbnNsYXRlWSg1MHB4KX0udWstdHJhbnNpdGlvbi1zbGlkZS1sZWZ0LW1lZGl1bXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTBweCl9LnVrLXRyYW5zaXRpb24tc2xpZGUtcmlnaHQtbWVkaXVte3RyYW5zZm9ybTp0cmFuc2xhdGVYKDUwcHgpfS51ay10cmFuc2l0aW9uLWFjdGl2ZS51ay1hY3RpdmUgW2NsYXNzKj11ay10cmFuc2l0aW9uLXNsaWRlXSwudWstdHJhbnNpdGlvbi10b2dnbGU6Zm9jdXMgW2NsYXNzKj11ay10cmFuc2l0aW9uLXNsaWRlXSwudWstdHJhbnNpdGlvbi10b2dnbGU6aG92ZXIgW2NsYXNzKj11ay10cmFuc2l0aW9uLXNsaWRlXXtvcGFjaXR5OjE7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApfS51ay10cmFuc2l0aW9uLW9wYXF1ZXtvcGFjaXR5OjF9LnVrLXRyYW5zaXRpb24tc2xvd3t0cmFuc2l0aW9uLWR1cmF0aW9uOi43c30udWstaGlkZGVuLFtoaWRkZW5de2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9QG1lZGlhIChtaW4td2lkdGg6NjQwcHgpey51ay1oaWRkZW5cQHN7ZGlzcGxheTpub25lIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6OTYwcHgpey51ay1oaWRkZW5cQG17ZGlzcGxheTpub25lIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsudWstaGlkZGVuXEBse2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjE2MDBweCl7LnVrLWhpZGRlblxAeGx7ZGlzcGxheTpub25lIWltcG9ydGFudH19QG1lZGlhIChtYXgtd2lkdGg6NjM5cHgpey51ay12aXNpYmxlXEBze2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYSAobWF4LXdpZHRoOjk1OXB4KXsudWstdmlzaWJsZVxAbXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1heC13aWR0aDoxMTk5cHgpey51ay12aXNpYmxlXEBse2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYSAobWF4LXdpZHRoOjE1OTlweCl7LnVrLXZpc2libGVcQHhse2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fS51ay1pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW4haW1wb3J0YW50fS51ay12aXNpYmxlLXRvZ2dsZTpub3QoOmhvdmVyKTpub3QoOmZvY3VzKSAudWstaGlkZGVuLWhvdmVyOm5vdCg6Zm9jdXMtd2l0aGluKXtwb3NpdGlvbjphYnNvbHV0ZSFpbXBvcnRhbnQ7d2lkdGg6MCFpbXBvcnRhbnQ7aGVpZ2h0OjAhaW1wb3J0YW50O3BhZGRpbmc6MCFpbXBvcnRhbnQ7bWFyZ2luOjAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiFpbXBvcnRhbnR9LnVrLXZpc2libGUtdG9nZ2xlOm5vdCg6aG92ZXIpOm5vdCg6Zm9jdXMpIC51ay1pbnZpc2libGUtaG92ZXI6bm90KDpmb2N1cy13aXRoaW4pe29wYWNpdHk6MCFpbXBvcnRhbnR9LnVrLXZpc2libGUtdG9nZ2xley13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudH0udWstdmlzaWJsZS10b2dnbGU6Zm9jdXN7b3V0bGluZTowfUBtZWRpYSAocG9pbnRlcjpjb2Fyc2Upey51ay1oaWRkZW4tdG91Y2h7ZGlzcGxheTpub25lIWltcG9ydGFudH19LnVrLWhpZGRlbi1ub3RvdWNoe2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9QG1lZGlhIChwb2ludGVyOmNvYXJzZSl7LnVrLWhpZGRlbi1ub3RvdWNoe2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSksLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSwudWstbGlnaHQsLnVrLW9mZmNhbnZhcy1iYXIsLnVrLW92ZXJsYXktcHJpbWFyeSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbGluaywudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSBhLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbGluaywudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgYSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1saW5rLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgYSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbGluaywudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSBhLC51ay1saWdodCAudWstbGluaywudWstbGlnaHQgYSwudWstb2ZmY2FudmFzLWJhciAudWstbGluaywudWstb2ZmY2FudmFzLWJhciBhLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxpbmssLnVrLW92ZXJsYXktcHJpbWFyeSBhLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmssLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBhLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluaywudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmssLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGF7Y29sb3I6I2ZmZn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbGluazpob3ZlciwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSBhOmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbGluazpob3ZlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgYTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1saW5rOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgYTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbGluazpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSBhOmhvdmVyLC51ay1saWdodCAudWstbGluazpob3ZlciwudWstbGlnaHQgYTpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstbGluazpob3ZlciwudWstb2ZmY2FudmFzLWJhciBhOmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxpbms6aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSBhOmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbms6aG92ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBhOmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluazpob3ZlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYTpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rOmhvdmVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYTpob3ZlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbms6aG92ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGE6aG92ZXJ7Y29sb3I6I2ZmZn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSA6bm90KHByZSk+Y29kZSwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSA6bm90KHByZSk+a2JkLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IDpub3QocHJlKT5zYW1wLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSA6bm90KHByZSk+Y29kZSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgOm5vdChwcmUpPmtiZCwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgOm5vdChwcmUpPnNhbXAsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSA6bm90KHByZSk+Y29kZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IDpub3QocHJlKT5rYmQsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSA6bm90KHByZSk+c2FtcCwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSA6bm90KHByZSk+Y29kZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSA6bm90KHByZSk+a2JkLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIDpub3QocHJlKT5zYW1wLC51ay1saWdodCA6bm90KHByZSk+Y29kZSwudWstbGlnaHQgOm5vdChwcmUpPmtiZCwudWstbGlnaHQgOm5vdChwcmUpPnNhbXAsLnVrLW9mZmNhbnZhcy1iYXIgOm5vdChwcmUpPmNvZGUsLnVrLW9mZmNhbnZhcy1iYXIgOm5vdChwcmUpPmtiZCwudWstb2ZmY2FudmFzLWJhciA6bm90KHByZSk+c2FtcCwudWstb3ZlcmxheS1wcmltYXJ5IDpub3QocHJlKT5jb2RlLC51ay1vdmVybGF5LXByaW1hcnkgOm5vdChwcmUpPmtiZCwudWstb3ZlcmxheS1wcmltYXJ5IDpub3QocHJlKT5zYW1wLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgOm5vdChwcmUpPmNvZGUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSA6bm90KHByZSk+a2JkLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgOm5vdChwcmUpPnNhbXAsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIDpub3QocHJlKT5jb2RlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSA6bm90KHByZSk+a2JkLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSA6bm90KHByZSk+c2FtcCwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIDpub3QocHJlKT5jb2RlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgOm5vdChwcmUpPmtiZCwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIDpub3QocHJlKT5zYW1wLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSA6bm90KHByZSk+Y29kZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgOm5vdChwcmUpPmtiZCwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgOm5vdChwcmUpPnNhbXB7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyk7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4xKX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSBlbSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgZW0sLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSBlbSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSBlbSwudWstbGlnaHQgZW0sLnVrLW9mZmNhbnZhcy1iYXIgZW0sLnVrLW92ZXJsYXktcHJpbWFyeSBlbSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGVtLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBlbSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGVtLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBlbXtjb2xvcjojZmZmfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1oMSwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaDIsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWgzLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1oNCwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaDUsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWg2LC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1oZWFkaW5nLTJ4bGFyZ2UsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWhlYWRpbmctbGFyZ2UsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWhlYWRpbmctbWVkaXVtLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1oZWFkaW5nLXNtYWxsLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1oZWFkaW5nLXhsYXJnZSwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSBoMSwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSBoMiwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSBoMywudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSBoNCwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSBoNSwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSBoNiwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWgxLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaDIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1oMywudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWg0LC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaDUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1oNiwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWhlYWRpbmctMnhsYXJnZSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWhlYWRpbmctbGFyZ2UsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1oZWFkaW5nLW1lZGl1bSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWhlYWRpbmctc21hbGwsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1oZWFkaW5nLXhsYXJnZSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgaDEsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIGgyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSBoMywudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgaDQsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIGg1LC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSBoNiwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1oMSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1oMiwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1oMywudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1oNCwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1oNSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1oNiwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1oZWFkaW5nLTJ4bGFyZ2UsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaGVhZGluZy1sYXJnZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1oZWFkaW5nLW1lZGl1bSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1oZWFkaW5nLXNtYWxsLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWhlYWRpbmcteGxhcmdlLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgaDEsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSBoMiwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IGgzLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgaDQsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSBoNSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IGg2LC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1oMSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaDIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWgzLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1oNCwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaDUsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWg2LC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1oZWFkaW5nLTJ4bGFyZ2UsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWhlYWRpbmctbGFyZ2UsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWhlYWRpbmctbWVkaXVtLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1oZWFkaW5nLXNtYWxsLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1oZWFkaW5nLXhsYXJnZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSBoMSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSBoMiwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSBoMywudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSBoNCwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSBoNSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSBoNiwudWstbGlnaHQgLnVrLWgxLC51ay1saWdodCAudWstaDIsLnVrLWxpZ2h0IC51ay1oMywudWstbGlnaHQgLnVrLWg0LC51ay1saWdodCAudWstaDUsLnVrLWxpZ2h0IC51ay1oNiwudWstbGlnaHQgLnVrLWhlYWRpbmctMnhsYXJnZSwudWstbGlnaHQgLnVrLWhlYWRpbmctbGFyZ2UsLnVrLWxpZ2h0IC51ay1oZWFkaW5nLW1lZGl1bSwudWstbGlnaHQgLnVrLWhlYWRpbmctc21hbGwsLnVrLWxpZ2h0IC51ay1oZWFkaW5nLXhsYXJnZSwudWstbGlnaHQgaDEsLnVrLWxpZ2h0IGgyLC51ay1saWdodCBoMywudWstbGlnaHQgaDQsLnVrLWxpZ2h0IGg1LC51ay1saWdodCBoNiwudWstb2ZmY2FudmFzLWJhciAudWstaDEsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWgyLC51ay1vZmZjYW52YXMtYmFyIC51ay1oMywudWstb2ZmY2FudmFzLWJhciAudWstaDQsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWg1LC51ay1vZmZjYW52YXMtYmFyIC51ay1oNiwudWstb2ZmY2FudmFzLWJhciAudWstaGVhZGluZy0yeGxhcmdlLC51ay1vZmZjYW52YXMtYmFyIC51ay1oZWFkaW5nLWxhcmdlLC51ay1vZmZjYW52YXMtYmFyIC51ay1oZWFkaW5nLW1lZGl1bSwudWstb2ZmY2FudmFzLWJhciAudWstaGVhZGluZy1zbWFsbCwudWstb2ZmY2FudmFzLWJhciAudWstaGVhZGluZy14bGFyZ2UsLnVrLW9mZmNhbnZhcy1iYXIgaDEsLnVrLW9mZmNhbnZhcy1iYXIgaDIsLnVrLW9mZmNhbnZhcy1iYXIgaDMsLnVrLW9mZmNhbnZhcy1iYXIgaDQsLnVrLW9mZmNhbnZhcy1iYXIgaDUsLnVrLW9mZmNhbnZhcy1iYXIgaDYsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaDEsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaDIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaDMsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaDQsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaDUsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaDYsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaGVhZGluZy0yeGxhcmdlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWhlYWRpbmctbGFyZ2UsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaGVhZGluZy1tZWRpdW0sLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaGVhZGluZy1zbWFsbCwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1oZWFkaW5nLXhsYXJnZSwudWstb3ZlcmxheS1wcmltYXJ5IGgxLC51ay1vdmVybGF5LXByaW1hcnkgaDIsLnVrLW92ZXJsYXktcHJpbWFyeSBoMywudWstb3ZlcmxheS1wcmltYXJ5IGg0LC51ay1vdmVybGF5LXByaW1hcnkgaDUsLnVrLW92ZXJsYXktcHJpbWFyeSBoNiwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oMSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oMiwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oMywudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oNCwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oNSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oNiwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLTJ4bGFyZ2UsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1sYXJnZSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLW1lZGl1bSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLXNtYWxsLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmcteGxhcmdlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaDEsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBoMiwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGgzLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaDQsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBoNSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGg2LC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaDEsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oMiwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWgzLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaDQsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oNSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWg2LC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy0yeGxhcmdlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1sYXJnZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctbWVkaXVtLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1zbWFsbCwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmcteGxhcmdlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBoMSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaDIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGgzLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBoNCwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaDUsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGg2LC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWgxLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWgyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWgzLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWg0LC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWg1LC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWg2LC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctMnhsYXJnZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLWxhcmdlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctbWVkaXVtLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctc21hbGwsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy14bGFyZ2UsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBoMSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGgyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaDMsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBoNCwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGg1LC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaDYsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oMSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWgyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaDMsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oNCwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWg1LC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaDYsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLTJ4bGFyZ2UsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLWxhcmdlLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1tZWRpdW0sLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLXNtYWxsLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy14bGFyZ2UsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGgxLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBoMiwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaDMsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGg0LC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBoNSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaDZ7Y29sb3I6I2ZmZn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSBibG9ja3F1b3RlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSBibG9ja3F1b3RlLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgYmxvY2txdW90ZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSBibG9ja3F1b3RlLC51ay1saWdodCBibG9ja3F1b3RlLC51ay1vZmZjYW52YXMtYmFyIGJsb2NrcXVvdGUsLnVrLW92ZXJsYXktcHJpbWFyeSBibG9ja3F1b3RlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYmxvY2txdW90ZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYmxvY2txdW90ZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGJsb2NrcXVvdGUsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGJsb2NrcXVvdGV7Y29sb3I6I2ZmZn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSBibG9ja3F1b3RlIGZvb3RlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgYmxvY2txdW90ZSBmb290ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSBibG9ja3F1b3RlIGZvb3RlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSBibG9ja3F1b3RlIGZvb3RlciwudWstbGlnaHQgYmxvY2txdW90ZSBmb290ZXIsLnVrLW9mZmNhbnZhcy1iYXIgYmxvY2txdW90ZSBmb290ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSBibG9ja3F1b3RlIGZvb3RlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGJsb2NrcXVvdGUgZm9vdGVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBibG9ja3F1b3RlIGZvb3RlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGJsb2NrcXVvdGUgZm9vdGVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBibG9ja3F1b3RlIGZvb3Rlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaHIsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgaHIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1ociwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgaHIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaHIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSBociwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaHIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgaHIsLnVrLWxpZ2h0IC51ay1ociwudWstbGlnaHQgaHIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWhyLC51ay1vZmZjYW52YXMtYmFyIGhyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWhyLC51ay1vdmVybGF5LXByaW1hcnkgaHIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaHIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBociwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBociwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1ociwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGhyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaHIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGhye2JvcmRlci10b3AtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxpbmstbXV0ZWQsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxpbmstbXV0ZWQgYSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxpbmstbXV0ZWQsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1saW5rLW11dGVkIGEsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbGluay1tdXRlZCwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1saW5rLW11dGVkIGEsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxpbmstbXV0ZWQsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxpbmstbXV0ZWQgYSwudWstbGlnaHQgLnVrLWxpbmstbXV0ZWQsLnVrLWxpZ2h0IC51ay1saW5rLW11dGVkIGEsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWxpbmstbXV0ZWQsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWxpbmstbXV0ZWQgYSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1saW5rLW11dGVkLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxpbmstbXV0ZWQgYSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLW11dGVkLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstbXV0ZWQgYSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstbXV0ZWQsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLW11dGVkIGEsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay1tdXRlZCwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLW11dGVkIGEsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLW11dGVkLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay1tdXRlZCBhe2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1saW5rLW11dGVkIGE6aG92ZXIsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxpbmstbXV0ZWQ6aG92ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1saW5rLW11dGVkIGE6aG92ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1saW5rLW11dGVkOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxpbmstbXV0ZWQgYTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1saW5rLW11dGVkOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1saW5rLW11dGVkIGE6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxpbmstbXV0ZWQ6aG92ZXIsLnVrLWxpZ2h0IC51ay1saW5rLW11dGVkIGE6aG92ZXIsLnVrLWxpZ2h0IC51ay1saW5rLW11dGVkOmhvdmVyLC51ay1vZmZjYW52YXMtYmFyIC51ay1saW5rLW11dGVkIGE6aG92ZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWxpbmstbXV0ZWQ6aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbGluay1tdXRlZCBhOmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxpbmstbXV0ZWQ6aG92ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay1tdXRlZCBhOmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstbXV0ZWQ6aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLW11dGVkIGE6aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLW11dGVkOmhvdmVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstbXV0ZWQgYTpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLW11dGVkOmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay1tdXRlZCBhOmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay1tdXRlZDpob3Zlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbGluay10ZXh0IGE6aG92ZXIsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxpbmstdGV4dDpob3ZlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxpbmstdGV4dCBhOmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbGluay10ZXh0OmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxpbmstdGV4dCBhOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxpbmstdGV4dDpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbGluay10ZXh0IGE6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxpbmstdGV4dDpob3ZlciwudWstbGlnaHQgLnVrLWxpbmstdGV4dCBhOmhvdmVyLC51ay1saWdodCAudWstbGluay10ZXh0OmhvdmVyLC51ay1vZmZjYW52YXMtYmFyIC51ay1saW5rLXRleHQgYTpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstbGluay10ZXh0OmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxpbmstdGV4dCBhOmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxpbmstdGV4dDpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLXRleHQgYTpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLXRleHQ6aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLXRleHQgYTpob3ZlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstdGV4dDpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLXRleHQgYTpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLXRleHQ6aG92ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLXRleHQgYTpob3ZlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstdGV4dDpob3Zlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbGluay1oZWFkaW5nIGE6aG92ZXIsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxpbmstaGVhZGluZzpob3ZlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxpbmstaGVhZGluZyBhOmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbGluay1oZWFkaW5nOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxpbmstaGVhZGluZyBhOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxpbmstaGVhZGluZzpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbGluay1oZWFkaW5nIGE6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxpbmstaGVhZGluZzpob3ZlciwudWstbGlnaHQgLnVrLWxpbmstaGVhZGluZyBhOmhvdmVyLC51ay1saWdodCAudWstbGluay1oZWFkaW5nOmhvdmVyLC51ay1vZmZjYW52YXMtYmFyIC51ay1saW5rLWhlYWRpbmcgYTpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstbGluay1oZWFkaW5nOmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxpbmstaGVhZGluZyBhOmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxpbmstaGVhZGluZzpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLWhlYWRpbmcgYTpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLWhlYWRpbmc6aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLWhlYWRpbmcgYTpob3ZlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstaGVhZGluZzpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLWhlYWRpbmcgYTpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLWhlYWRpbmc6aG92ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLWhlYWRpbmcgYTpob3ZlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstaGVhZGluZzpob3Zlcntjb2xvcjojZmZmfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1oZWFkaW5nLWRpdmlkZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1oZWFkaW5nLWRpdmlkZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaGVhZGluZy1kaXZpZGVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1oZWFkaW5nLWRpdmlkZXIsLnVrLWxpZ2h0IC51ay1oZWFkaW5nLWRpdmlkZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWhlYWRpbmctZGl2aWRlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1oZWFkaW5nLWRpdmlkZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1kaXZpZGVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1kaXZpZGVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctZGl2aWRlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctZGl2aWRlcntib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjIpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1oZWFkaW5nLWJ1bGxldDo6YmVmb3JlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaGVhZGluZy1idWxsZXQ6OmJlZm9yZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1oZWFkaW5nLWJ1bGxldDo6YmVmb3JlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1oZWFkaW5nLWJ1bGxldDo6YmVmb3JlLC51ay1saWdodCAudWstaGVhZGluZy1idWxsZXQ6OmJlZm9yZSwudWstb2ZmY2FudmFzLWJhciAudWstaGVhZGluZy1idWxsZXQ6OmJlZm9yZSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1oZWFkaW5nLWJ1bGxldDo6YmVmb3JlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctYnVsbGV0OjpiZWZvcmUsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLWJ1bGxldDo6YmVmb3JlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctYnVsbGV0OjpiZWZvcmUsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLWJ1bGxldDo6YmVmb3Jle2JvcmRlci1sZWZ0LWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjIpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1oZWFkaW5nLWxpbmU+OjphZnRlciwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaGVhZGluZy1saW5lPjo6YmVmb3JlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaGVhZGluZy1saW5lPjo6YWZ0ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1oZWFkaW5nLWxpbmU+OjpiZWZvcmUsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaGVhZGluZy1saW5lPjo6YWZ0ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaGVhZGluZy1saW5lPjo6YmVmb3JlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1oZWFkaW5nLWxpbmU+OjphZnRlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaGVhZGluZy1saW5lPjo6YmVmb3JlLC51ay1saWdodCAudWstaGVhZGluZy1saW5lPjo6YWZ0ZXIsLnVrLWxpZ2h0IC51ay1oZWFkaW5nLWxpbmU+OjpiZWZvcmUsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWhlYWRpbmctbGluZT46OmFmdGVyLC51ay1vZmZjYW52YXMtYmFyIC51ay1oZWFkaW5nLWxpbmU+OjpiZWZvcmUsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaGVhZGluZy1saW5lPjo6YWZ0ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaGVhZGluZy1saW5lPjo6YmVmb3JlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctbGluZT46OmFmdGVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctbGluZT46OmJlZm9yZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctbGluZT46OmFmdGVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1saW5lPjo6YmVmb3JlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctbGluZT46OmFmdGVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctbGluZT46OmJlZm9yZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctbGluZT46OmFmdGVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1saW5lPjo6YmVmb3Jle2JvcmRlci1ib3R0b20tY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWRpdmlkZXItaWNvbiwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWRpdmlkZXItaWNvbiwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1kaXZpZGVyLWljb24sLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWRpdmlkZXItaWNvbiwudWstbGlnaHQgLnVrLWRpdmlkZXItaWNvbiwudWstb2ZmY2FudmFzLWJhciAudWstZGl2aWRlci1pY29uLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWRpdmlkZXItaWNvbiwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLWljb24sLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLWljb24sLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZGl2aWRlci1pY29uLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZGl2aWRlci1pY29ue2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD1VVEYtOCwlM0NzdmclMjB3aWR0aCUzRCUyMjIwJTIyJTIwaGVpZ2h0JTNEJTIyMjAlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAyMCUyMDIwJTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlMEElMjAlMjAlMjAlMjAlM0NjaXJjbGUlMjBmaWxsJTNEJTIybm9uZSUyMiUyMHN0cm9rZSUzRCUyMnJnYmElMjgyNTUsJTIwMjU1LCUyMDI1NSwlMjAwLjIlMjklMjIlMjBzdHJva2Utd2lkdGglM0QlMjIyJTIyJTIwY3glM0QlMjIxMCUyMiUyMGN5JTNEJTIyMTAlMjIlMjByJTNEJTIyNyUyMiUyMCUyRiUzRSUwQSUzQyUyRnN2ZyUzRSUwQSIpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1kaXZpZGVyLWljb246OmFmdGVyLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1kaXZpZGVyLWljb246OmJlZm9yZSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWRpdmlkZXItaWNvbjo6YWZ0ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1kaXZpZGVyLWljb246OmJlZm9yZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1kaXZpZGVyLWljb246OmFmdGVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWRpdmlkZXItaWNvbjo6YmVmb3JlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1kaXZpZGVyLWljb246OmFmdGVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1kaXZpZGVyLWljb246OmJlZm9yZSwudWstbGlnaHQgLnVrLWRpdmlkZXItaWNvbjo6YWZ0ZXIsLnVrLWxpZ2h0IC51ay1kaXZpZGVyLWljb246OmJlZm9yZSwudWstb2ZmY2FudmFzLWJhciAudWstZGl2aWRlci1pY29uOjphZnRlciwudWstb2ZmY2FudmFzLWJhciAudWstZGl2aWRlci1pY29uOjpiZWZvcmUsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstZGl2aWRlci1pY29uOjphZnRlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1kaXZpZGVyLWljb246OmJlZm9yZSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLWljb246OmFmdGVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRpdmlkZXItaWNvbjo6YmVmb3JlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZGl2aWRlci1pY29uOjphZnRlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRpdmlkZXItaWNvbjo6YmVmb3JlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRpdmlkZXItaWNvbjo6YWZ0ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZGl2aWRlci1pY29uOjpiZWZvcmUsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLWljb246OmFmdGVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZGl2aWRlci1pY29uOjpiZWZvcmV7Ym9yZGVyLWJvdHRvbS1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4yKX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstZGl2aWRlci1zbWFsbDo6YWZ0ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1kaXZpZGVyLXNtYWxsOjphZnRlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1kaXZpZGVyLXNtYWxsOjphZnRlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstZGl2aWRlci1zbWFsbDo6YWZ0ZXIsLnVrLWxpZ2h0IC51ay1kaXZpZGVyLXNtYWxsOjphZnRlciwudWstb2ZmY2FudmFzLWJhciAudWstZGl2aWRlci1zbWFsbDo6YWZ0ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstZGl2aWRlci1zbWFsbDo6YWZ0ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZGl2aWRlci1zbWFsbDo6YWZ0ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLXNtYWxsOjphZnRlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLXNtYWxsOjphZnRlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRpdmlkZXItc21hbGw6OmFmdGVye2JvcmRlci10b3AtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWRpdmlkZXItdmVydGljYWwsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1kaXZpZGVyLXZlcnRpY2FsLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWRpdmlkZXItdmVydGljYWwsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWRpdmlkZXItdmVydGljYWwsLnVrLWxpZ2h0IC51ay1kaXZpZGVyLXZlcnRpY2FsLC51ay1vZmZjYW52YXMtYmFyIC51ay1kaXZpZGVyLXZlcnRpY2FsLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWRpdmlkZXItdmVydGljYWwsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZGl2aWRlci12ZXJ0aWNhbCwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRpdmlkZXItdmVydGljYWwsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZGl2aWRlci12ZXJ0aWNhbCwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRpdmlkZXItdmVydGljYWx7Ym9yZGVyLWxlZnQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxpc3QtZGl2aWRlcj5saTpudGgtY2hpbGQobisyKSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxpc3QtZGl2aWRlcj5saTpudGgtY2hpbGQobisyKSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1saXN0LWRpdmlkZXI+bGk6bnRoLWNoaWxkKG4rMiksLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxpc3QtZGl2aWRlcj5saTpudGgtY2hpbGQobisyKSwudWstbGlnaHQgLnVrLWxpc3QtZGl2aWRlcj5saTpudGgtY2hpbGQobisyKSwudWstb2ZmY2FudmFzLWJhciAudWstbGlzdC1kaXZpZGVyPmxpOm50aC1jaGlsZChuKzIpLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxpc3QtZGl2aWRlcj5saTpudGgtY2hpbGQobisyKSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LWRpdmlkZXI+bGk6bnRoLWNoaWxkKG4rMiksLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LWRpdmlkZXI+bGk6bnRoLWNoaWxkKG4rMiksLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGlzdC1kaXZpZGVyPmxpOm50aC1jaGlsZChuKzIpLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGlzdC1kaXZpZGVyPmxpOm50aC1jaGlsZChuKzIpe2JvcmRlci10b3AtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxpc3Qtc3RyaXBlZD5saTpudGgtb2YtdHlwZShvZGQpLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbGlzdC1zdHJpcGVkPmxpOm50aC1vZi10eXBlKG9kZCksLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbGlzdC1zdHJpcGVkPmxpOm50aC1vZi10eXBlKG9kZCksLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxpc3Qtc3RyaXBlZD5saTpudGgtb2YtdHlwZShvZGQpLC51ay1saWdodCAudWstbGlzdC1zdHJpcGVkPmxpOm50aC1vZi10eXBlKG9kZCksLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWxpc3Qtc3RyaXBlZD5saTpudGgtb2YtdHlwZShvZGQpLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxpc3Qtc3RyaXBlZD5saTpudGgtb2YtdHlwZShvZGQpLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3Qtc3RyaXBlZD5saTpudGgtb2YtdHlwZShvZGQpLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGlzdC1zdHJpcGVkPmxpOm50aC1vZi10eXBlKG9kZCksLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGlzdC1zdHJpcGVkPmxpOm50aC1vZi10eXBlKG9kZCksLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LXN0cmlwZWQ+bGk6bnRoLW9mLXR5cGUob2RkKXtib3JkZXItdG9wLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjIpO2JvcmRlci1ib3R0b20tY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxpc3Qtc3RyaXBlZD5saTpudGgtb2YtdHlwZShvZGQpLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbGlzdC1zdHJpcGVkPmxpOm50aC1vZi10eXBlKG9kZCksLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbGlzdC1zdHJpcGVkPmxpOm50aC1vZi10eXBlKG9kZCksLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxpc3Qtc3RyaXBlZD5saTpudGgtb2YtdHlwZShvZGQpLC51ay1saWdodCAudWstbGlzdC1zdHJpcGVkPmxpOm50aC1vZi10eXBlKG9kZCksLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWxpc3Qtc3RyaXBlZD5saTpudGgtb2YtdHlwZShvZGQpLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxpc3Qtc3RyaXBlZD5saTpudGgtb2YtdHlwZShvZGQpLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3Qtc3RyaXBlZD5saTpudGgtb2YtdHlwZShvZGQpLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGlzdC1zdHJpcGVkPmxpOm50aC1vZi10eXBlKG9kZCksLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGlzdC1zdHJpcGVkPmxpOm50aC1vZi10eXBlKG9kZCksLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LXN0cmlwZWQ+bGk6bnRoLW9mLXR5cGUob2RkKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1saXN0LWJ1bGxldD5saTo6YmVmb3JlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbGlzdC1idWxsZXQ+bGk6OmJlZm9yZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1saXN0LWJ1bGxldD5saTo6YmVmb3JlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1saXN0LWJ1bGxldD5saTo6YmVmb3JlLC51ay1saWdodCAudWstbGlzdC1idWxsZXQ+bGk6OmJlZm9yZSwudWstb2ZmY2FudmFzLWJhciAudWstbGlzdC1idWxsZXQ+bGk6OmJlZm9yZSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1saXN0LWJ1bGxldD5saTo6YmVmb3JlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3QtYnVsbGV0PmxpOjpiZWZvcmUsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LWJ1bGxldD5saTo6YmVmb3JlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3QtYnVsbGV0PmxpOjpiZWZvcmUsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LWJ1bGxldD5saTo6YmVmb3Jle2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD1VVEYtOCwlM0NzdmclMjB3aWR0aCUzRCUyMjYlMjIlMjBoZWlnaHQlM0QlMjI2JTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwNiUyMDYlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ2NpcmNsZSUyMGZpbGwlM0QlMjJyZ2JhJTI4MjU1LCUyMDI1NSwlMjAyNTUsJTIwMC43JTI5JTIyJTIwY3glM0QlMjIzJTIyJTIwY3klM0QlMjIzJTIyJTIwciUzRCUyMjMlMjIlMjAlMkYlM0UlMEElM0MlMkZzdmclM0UiKX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGFibGUgdGgsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10YWJsZSB0aCwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10YWJsZSB0aCwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFibGUgdGgsLnVrLWxpZ2h0IC51ay10YWJsZSB0aCwudWstb2ZmY2FudmFzLWJhciAudWstdGFibGUgdGgsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGFibGUgdGgsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUgdGgsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZSB0aCwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZSB0aCwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlIHRoe2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10YWJsZSBjYXB0aW9uLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFibGUgY2FwdGlvbiwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10YWJsZSBjYXB0aW9uLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10YWJsZSBjYXB0aW9uLC51ay1saWdodCAudWstdGFibGUgY2FwdGlvbiwudWstb2ZmY2FudmFzLWJhciAudWstdGFibGUgY2FwdGlvbiwudWstb3ZlcmxheS1wcmltYXJ5IC51ay10YWJsZSBjYXB0aW9uLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlIGNhcHRpb24sLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZSBjYXB0aW9uLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlIGNhcHRpb24sLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZSBjYXB0aW9ue2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10YWJsZSB0Ym9keSB0ci51ay1hY3RpdmUsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlPnRyLnVrLWFjdGl2ZSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRhYmxlIHRib2R5IHRyLnVrLWFjdGl2ZSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRhYmxlPnRyLnVrLWFjdGl2ZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10YWJsZSB0Ym9keSB0ci51ay1hY3RpdmUsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdGFibGU+dHIudWstYWN0aXZlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10YWJsZSB0Ym9keSB0ci51ay1hY3RpdmUsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRhYmxlPnRyLnVrLWFjdGl2ZSwudWstbGlnaHQgLnVrLXRhYmxlIHRib2R5IHRyLnVrLWFjdGl2ZSwudWstbGlnaHQgLnVrLXRhYmxlPnRyLnVrLWFjdGl2ZSwudWstb2ZmY2FudmFzLWJhciAudWstdGFibGUgdGJvZHkgdHIudWstYWN0aXZlLC51ay1vZmZjYW52YXMtYmFyIC51ay10YWJsZT50ci51ay1hY3RpdmUsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGFibGUgdGJvZHkgdHIudWstYWN0aXZlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRhYmxlPnRyLnVrLWFjdGl2ZSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZSB0Ym9keSB0ci51ay1hY3RpdmUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGU+dHIudWstYWN0aXZlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUgdGJvZHkgdHIudWstYWN0aXZlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGU+dHIudWstYWN0aXZlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlIHRib2R5IHRyLnVrLWFjdGl2ZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZT50ci51ay1hY3RpdmUsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZSB0Ym9keSB0ci51ay1hY3RpdmUsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZT50ci51ay1hY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wOCl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlLWRpdmlkZXI+OmZpcnN0LWNoaWxkPnRyOm5vdCg6Zmlyc3QtY2hpbGQpLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10YWJsZS1kaXZpZGVyPjpub3QoOmZpcnN0LWNoaWxkKT50ciwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGFibGUtZGl2aWRlcj50cjpub3QoOmZpcnN0LWNoaWxkKSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRhYmxlLWRpdmlkZXI+OmZpcnN0LWNoaWxkPnRyOm5vdCg6Zmlyc3QtY2hpbGQpLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFibGUtZGl2aWRlcj46bm90KDpmaXJzdC1jaGlsZCk+dHIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10YWJsZS1kaXZpZGVyPnRyOm5vdCg6Zmlyc3QtY2hpbGQpLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlLWRpdmlkZXI+OmZpcnN0LWNoaWxkPnRyOm5vdCg6Zmlyc3QtY2hpbGQpLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlLWRpdmlkZXI+Om5vdCg6Zmlyc3QtY2hpbGQpPnRyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlLWRpdmlkZXI+dHI6bm90KDpmaXJzdC1jaGlsZCksLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRhYmxlLWRpdmlkZXI+OmZpcnN0LWNoaWxkPnRyOm5vdCg6Zmlyc3QtY2hpbGQpLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10YWJsZS1kaXZpZGVyPjpub3QoOmZpcnN0LWNoaWxkKT50ciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFibGUtZGl2aWRlcj50cjpub3QoOmZpcnN0LWNoaWxkKSwudWstbGlnaHQgLnVrLXRhYmxlLWRpdmlkZXI+OmZpcnN0LWNoaWxkPnRyOm5vdCg6Zmlyc3QtY2hpbGQpLC51ay1saWdodCAudWstdGFibGUtZGl2aWRlcj46bm90KDpmaXJzdC1jaGlsZCk+dHIsLnVrLWxpZ2h0IC51ay10YWJsZS1kaXZpZGVyPnRyOm5vdCg6Zmlyc3QtY2hpbGQpLC51ay1vZmZjYW52YXMtYmFyIC51ay10YWJsZS1kaXZpZGVyPjpmaXJzdC1jaGlsZD50cjpub3QoOmZpcnN0LWNoaWxkKSwudWstb2ZmY2FudmFzLWJhciAudWstdGFibGUtZGl2aWRlcj46bm90KDpmaXJzdC1jaGlsZCk+dHIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRhYmxlLWRpdmlkZXI+dHI6bm90KDpmaXJzdC1jaGlsZCksLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGFibGUtZGl2aWRlcj46Zmlyc3QtY2hpbGQ+dHI6bm90KDpmaXJzdC1jaGlsZCksLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGFibGUtZGl2aWRlcj46bm90KDpmaXJzdC1jaGlsZCk+dHIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGFibGUtZGl2aWRlcj50cjpub3QoOmZpcnN0LWNoaWxkKSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1kaXZpZGVyPjpmaXJzdC1jaGlsZD50cjpub3QoOmZpcnN0LWNoaWxkKSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1kaXZpZGVyPjpub3QoOmZpcnN0LWNoaWxkKT50ciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1kaXZpZGVyPnRyOm5vdCg6Zmlyc3QtY2hpbGQpLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtZGl2aWRlcj46Zmlyc3QtY2hpbGQ+dHI6bm90KDpmaXJzdC1jaGlsZCksLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1kaXZpZGVyPjpub3QoOmZpcnN0LWNoaWxkKT50ciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLWRpdmlkZXI+dHI6bm90KDpmaXJzdC1jaGlsZCksLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtZGl2aWRlcj46Zmlyc3QtY2hpbGQ+dHI6bm90KDpmaXJzdC1jaGlsZCksLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtZGl2aWRlcj46bm90KDpmaXJzdC1jaGlsZCk+dHIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtZGl2aWRlcj50cjpub3QoOmZpcnN0LWNoaWxkKSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLWRpdmlkZXI+OmZpcnN0LWNoaWxkPnRyOm5vdCg6Zmlyc3QtY2hpbGQpLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtZGl2aWRlcj46bm90KDpmaXJzdC1jaGlsZCk+dHIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1kaXZpZGVyPnRyOm5vdCg6Zmlyc3QtY2hpbGQpe2JvcmRlci10b3AtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUob2RkKSwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGFibGUtc3RyaXBlZD50cjpudGgtb2YtdHlwZShvZGQpLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFibGUtc3RyaXBlZCB0Ym9keSB0cjpudGgtb2YtdHlwZShvZGQpLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFibGUtc3RyaXBlZD50cjpudGgtb2YtdHlwZShvZGQpLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUob2RkKSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10YWJsZS1zdHJpcGVkPnRyOm50aC1vZi10eXBlKG9kZCksLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUob2RkKSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFibGUtc3RyaXBlZD50cjpudGgtb2YtdHlwZShvZGQpLC51ay1saWdodCAudWstdGFibGUtc3RyaXBlZCB0Ym9keSB0cjpudGgtb2YtdHlwZShvZGQpLC51ay1saWdodCAudWstdGFibGUtc3RyaXBlZD50cjpudGgtb2YtdHlwZShvZGQpLC51ay1vZmZjYW52YXMtYmFyIC51ay10YWJsZS1zdHJpcGVkIHRib2R5IHRyOm50aC1vZi10eXBlKG9kZCksLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRhYmxlLXN0cmlwZWQ+dHI6bnRoLW9mLXR5cGUob2RkKSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay10YWJsZS1zdHJpcGVkIHRib2R5IHRyOm50aC1vZi10eXBlKG9kZCksLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGFibGUtc3RyaXBlZD50cjpudGgtb2YtdHlwZShvZGQpLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUob2RkKSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1zdHJpcGVkPnRyOm50aC1vZi10eXBlKG9kZCksLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1zdHJpcGVkIHRib2R5IHRyOm50aC1vZi10eXBlKG9kZCksLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1zdHJpcGVkPnRyOm50aC1vZi10eXBlKG9kZCksLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtc3RyaXBlZCB0Ym9keSB0cjpudGgtb2YtdHlwZShvZGQpLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLXN0cmlwZWQ+dHI6bnRoLW9mLXR5cGUob2RkKSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUob2RkKSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLXN0cmlwZWQ+dHI6bnRoLW9mLXR5cGUob2RkKXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjEpO2JvcmRlci10b3AtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMik7Ym9yZGVyLWJvdHRvbS1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4yKX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGFibGUtaG92ZXIgdGJvZHkgdHI6aG92ZXIsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlLWhvdmVyPnRyOmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFibGUtaG92ZXIgdGJvZHkgdHI6aG92ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10YWJsZS1ob3Zlcj50cjpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10YWJsZS1ob3ZlciB0Ym9keSB0cjpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10YWJsZS1ob3Zlcj50cjpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFibGUtaG92ZXIgdGJvZHkgdHI6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRhYmxlLWhvdmVyPnRyOmhvdmVyLC51ay1saWdodCAudWstdGFibGUtaG92ZXIgdGJvZHkgdHI6aG92ZXIsLnVrLWxpZ2h0IC51ay10YWJsZS1ob3Zlcj50cjpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstdGFibGUtaG92ZXIgdGJvZHkgdHI6aG92ZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRhYmxlLWhvdmVyPnRyOmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRhYmxlLWhvdmVyIHRib2R5IHRyOmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRhYmxlLWhvdmVyPnRyOmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLWhvdmVyIHRib2R5IHRyOmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLWhvdmVyPnRyOmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtaG92ZXIgdGJvZHkgdHI6aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1ob3Zlcj50cjpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1ob3ZlciB0Ym9keSB0cjpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1ob3Zlcj50cjpob3ZlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLWhvdmVyIHRib2R5IHRyOmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtaG92ZXI+dHI6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wOCl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWljb24tbGluaywudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWljb24tbGluaywudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1pY29uLWxpbmssLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWljb24tbGluaywudWstbGlnaHQgLnVrLWljb24tbGluaywudWstb2ZmY2FudmFzLWJhciAudWstaWNvbi1saW5rLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWljb24tbGluaywudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWxpbmssLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWxpbmssLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1saW5rLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1saW5re2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1pY29uLWxpbms6Zm9jdXMsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWljb24tbGluazpob3ZlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWljb24tbGluazpmb2N1cywudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWljb24tbGluazpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1pY29uLWxpbms6Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaWNvbi1saW5rOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1pY29uLWxpbms6Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWljb24tbGluazpob3ZlciwudWstbGlnaHQgLnVrLWljb24tbGluazpmb2N1cywudWstbGlnaHQgLnVrLWljb24tbGluazpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstaWNvbi1saW5rOmZvY3VzLC51ay1vZmZjYW52YXMtYmFyIC51ay1pY29uLWxpbms6aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaWNvbi1saW5rOmZvY3VzLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWljb24tbGluazpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWxpbms6Zm9jdXMsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1saW5rOmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1saW5rOmZvY3VzLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1saW5rOmhvdmVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb24tbGluazpmb2N1cywudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWxpbms6aG92ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWxpbms6Zm9jdXMsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWxpbms6aG92ZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWFjdGl2ZT4udWstaWNvbi1saW5rLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1pY29uLWxpbms6YWN0aXZlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYWN0aXZlPi51ay1pY29uLWxpbmssLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1pY29uLWxpbms6YWN0aXZlLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWFjdGl2ZT4udWstaWNvbi1saW5rLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWljb24tbGluazphY3RpdmUsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWFjdGl2ZT4udWstaWNvbi1saW5rLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1pY29uLWxpbms6YWN0aXZlLC51ay1saWdodCAudWstYWN0aXZlPi51ay1pY29uLWxpbmssLnVrLWxpZ2h0IC51ay1pY29uLWxpbms6YWN0aXZlLC51ay1vZmZjYW52YXMtYmFyIC51ay1hY3RpdmU+LnVrLWljb24tbGluaywudWstb2ZmY2FudmFzLWJhciAudWstaWNvbi1saW5rOmFjdGl2ZSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1hY3RpdmU+LnVrLWljb24tbGluaywudWstb3ZlcmxheS1wcmltYXJ5IC51ay1pY29uLWxpbms6YWN0aXZlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWFjdGl2ZT4udWstaWNvbi1saW5rLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb24tbGluazphY3RpdmUsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1hY3RpdmU+LnVrLWljb24tbGluaywudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb24tbGluazphY3RpdmUsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYWN0aXZlPi51ay1pY29uLWxpbmssLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1saW5rOmFjdGl2ZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWFjdGl2ZT4udWstaWNvbi1saW5rLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1saW5rOmFjdGl2ZXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaWNvbi1idXR0b24sLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1pY29uLWJ1dHRvbiwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1pY29uLWJ1dHRvbiwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaWNvbi1idXR0b24sLnVrLWxpZ2h0IC51ay1pY29uLWJ1dHRvbiwudWstb2ZmY2FudmFzLWJhciAudWstaWNvbi1idXR0b24sLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaWNvbi1idXR0b24sLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1idXR0b24sLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWJ1dHRvbiwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWJ1dHRvbiwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb24tYnV0dG9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSk7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWljb24tYnV0dG9uOmZvY3VzLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1pY29uLWJ1dHRvbjpob3ZlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWljb24tYnV0dG9uOmZvY3VzLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaWNvbi1idXR0b246aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaWNvbi1idXR0b246Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaWNvbi1idXR0b246aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWljb24tYnV0dG9uOmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1pY29uLWJ1dHRvbjpob3ZlciwudWstbGlnaHQgLnVrLWljb24tYnV0dG9uOmZvY3VzLC51ay1saWdodCAudWstaWNvbi1idXR0b246aG92ZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWljb24tYnV0dG9uOmZvY3VzLC51ay1vZmZjYW52YXMtYmFyIC51ay1pY29uLWJ1dHRvbjpob3ZlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1pY29uLWJ1dHRvbjpmb2N1cywudWstb3ZlcmxheS1wcmltYXJ5IC51ay1pY29uLWJ1dHRvbjpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWJ1dHRvbjpmb2N1cywudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWJ1dHRvbjpob3ZlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb24tYnV0dG9uOmZvY3VzLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1idXR0b246aG92ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1idXR0b246Zm9jdXMsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1idXR0b246aG92ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWJ1dHRvbjpmb2N1cywudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb24tYnV0dG9uOmhvdmVye2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDIsMjQyLDI0MiwuMSk7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWljb24tYnV0dG9uOmFjdGl2ZSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWljb24tYnV0dG9uOmFjdGl2ZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1pY29uLWJ1dHRvbjphY3RpdmUsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWljb24tYnV0dG9uOmFjdGl2ZSwudWstbGlnaHQgLnVrLWljb24tYnV0dG9uOmFjdGl2ZSwudWstb2ZmY2FudmFzLWJhciAudWstaWNvbi1idXR0b246YWN0aXZlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWljb24tYnV0dG9uOmFjdGl2ZSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWJ1dHRvbjphY3RpdmUsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWJ1dHRvbjphY3RpdmUsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1idXR0b246YWN0aXZlLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1idXR0b246YWN0aXZle2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzAsMjMwLDIzMCwuMSk7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWlucHV0LC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zZWxlY3QsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRleHRhcmVhLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaW5wdXQsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zZWxlY3QsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10ZXh0YXJlYSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1pbnB1dCwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zZWxlY3QsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdGV4dGFyZWEsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWlucHV0LC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zZWxlY3QsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRleHRhcmVhLC51ay1saWdodCAudWstaW5wdXQsLnVrLWxpZ2h0IC51ay1zZWxlY3QsLnVrLWxpZ2h0IC51ay10ZXh0YXJlYSwudWstb2ZmY2FudmFzLWJhciAudWstaW5wdXQsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXNlbGVjdCwudWstb2ZmY2FudmFzLWJhciAudWstdGV4dGFyZWEsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaW5wdXQsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstc2VsZWN0LC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRleHRhcmVhLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWlucHV0LC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlbGVjdCwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0YXJlYSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWlucHV0LC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VsZWN0LC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dGFyZWEsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaW5wdXQsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VsZWN0LC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHRhcmVhLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaW5wdXQsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWxlY3QsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0YXJlYXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpO2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpO2JhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveDtib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWlucHV0OmZvY3VzLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zZWxlY3Q6Zm9jdXMsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRleHRhcmVhOmZvY3VzLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaW5wdXQ6Zm9jdXMsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zZWxlY3Q6Zm9jdXMsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10ZXh0YXJlYTpmb2N1cywudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1pbnB1dDpmb2N1cywudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zZWxlY3Q6Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdGV4dGFyZWE6Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWlucHV0OmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zZWxlY3Q6Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRleHRhcmVhOmZvY3VzLC51ay1saWdodCAudWstaW5wdXQ6Zm9jdXMsLnVrLWxpZ2h0IC51ay1zZWxlY3Q6Zm9jdXMsLnVrLWxpZ2h0IC51ay10ZXh0YXJlYTpmb2N1cywudWstb2ZmY2FudmFzLWJhciAudWstaW5wdXQ6Zm9jdXMsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXNlbGVjdDpmb2N1cywudWstb2ZmY2FudmFzLWJhciAudWstdGV4dGFyZWE6Zm9jdXMsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaW5wdXQ6Zm9jdXMsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstc2VsZWN0OmZvY3VzLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRleHRhcmVhOmZvY3VzLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWlucHV0OmZvY3VzLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlbGVjdDpmb2N1cywudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0YXJlYTpmb2N1cywudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWlucHV0OmZvY3VzLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VsZWN0OmZvY3VzLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dGFyZWE6Zm9jdXMsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaW5wdXQ6Zm9jdXMsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VsZWN0OmZvY3VzLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHRhcmVhOmZvY3VzLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaW5wdXQ6Zm9jdXMsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWxlY3Q6Zm9jdXMsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0YXJlYTpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpO2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpO2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaW5wdXQ6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWlucHV0OjotbXMtaW5wdXQtcGxhY2Vob2xkZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaW5wdXQ6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaW5wdXQ6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciwudWstbGlnaHQgLnVrLWlucHV0OjotbXMtaW5wdXQtcGxhY2Vob2xkZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWlucHV0OjotbXMtaW5wdXQtcGxhY2Vob2xkZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaW5wdXQ6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pbnB1dDo6LW1zLWlucHV0LXBsYWNlaG9sZGVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaW5wdXQ6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pbnB1dDo6LW1zLWlucHV0LXBsYWNlaG9sZGVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaW5wdXQ6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KSFpbXBvcnRhbnR9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWlucHV0OjpwbGFjZWhvbGRlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWlucHV0OjpwbGFjZWhvbGRlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1pbnB1dDo6cGxhY2Vob2xkZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWlucHV0OjpwbGFjZWhvbGRlciwudWstbGlnaHQgLnVrLWlucHV0OjpwbGFjZWhvbGRlciwudWstb2ZmY2FudmFzLWJhciAudWstaW5wdXQ6OnBsYWNlaG9sZGVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWlucHV0OjpwbGFjZWhvbGRlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pbnB1dDo6cGxhY2Vob2xkZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pbnB1dDo6cGxhY2Vob2xkZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaW5wdXQ6OnBsYWNlaG9sZGVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaW5wdXQ6OnBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10ZXh0YXJlYTo6LW1zLWlucHV0LXBsYWNlaG9sZGVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGV4dGFyZWE6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10ZXh0YXJlYTo6LW1zLWlucHV0LXBsYWNlaG9sZGVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10ZXh0YXJlYTo6LW1zLWlucHV0LXBsYWNlaG9sZGVyLC51ay1saWdodCAudWstdGV4dGFyZWE6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciwudWstb2ZmY2FudmFzLWJhciAudWstdGV4dGFyZWE6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay10ZXh0YXJlYTo6LW1zLWlucHV0LXBsYWNlaG9sZGVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHRhcmVhOjotbXMtaW5wdXQtcGxhY2Vob2xkZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0YXJlYTo6LW1zLWlucHV0LXBsYWNlaG9sZGVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHRhcmVhOjotbXMtaW5wdXQtcGxhY2Vob2xkZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0YXJlYTo6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpIWltcG9ydGFudH0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGV4dGFyZWE6OnBsYWNlaG9sZGVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGV4dGFyZWE6OnBsYWNlaG9sZGVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRleHRhcmVhOjpwbGFjZWhvbGRlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGV4dGFyZWE6OnBsYWNlaG9sZGVyLC51ay1saWdodCAudWstdGV4dGFyZWE6OnBsYWNlaG9sZGVyLC51ay1vZmZjYW52YXMtYmFyIC51ay10ZXh0YXJlYTo6cGxhY2Vob2xkZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGV4dGFyZWE6OnBsYWNlaG9sZGVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHRhcmVhOjpwbGFjZWhvbGRlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHRhcmVhOjpwbGFjZWhvbGRlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0YXJlYTo6cGxhY2Vob2xkZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0YXJlYTo6cGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXNlbGVjdDpub3QoW211bHRpcGxlXSk6bm90KFtzaXplXSksLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zZWxlY3Q6bm90KFttdWx0aXBsZV0pOm5vdChbc2l6ZV0pLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXNlbGVjdDpub3QoW211bHRpcGxlXSk6bm90KFtzaXplXSksLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXNlbGVjdDpub3QoW211bHRpcGxlXSk6bm90KFtzaXplXSksLnVrLWxpZ2h0IC51ay1zZWxlY3Q6bm90KFttdWx0aXBsZV0pOm5vdChbc2l6ZV0pLC51ay1vZmZjYW52YXMtYmFyIC51ay1zZWxlY3Q6bm90KFttdWx0aXBsZV0pOm5vdChbc2l6ZV0pLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXNlbGVjdDpub3QoW211bHRpcGxlXSk6bm90KFtzaXplXSksLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpub3QoW3NpemVdKSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlbGVjdDpub3QoW211bHRpcGxlXSk6bm90KFtzaXplXSksLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpub3QoW3NpemVdKSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlbGVjdDpub3QoW211bHRpcGxlXSk6bm90KFtzaXplXSl7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMjQlMjIlMjBoZWlnaHQlM0QlMjIxNiUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDI0JTIwMTYlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIycmdiYSUyODI1NSwlMjAyNTUsJTIwMjU1LCUyMDAuNyUyOSUyMiUyMHBvaW50cyUzRCUyMjEyJTIwMSUyMDklMjA2JTIwMTUlMjA2JTIyJTIwJTJGJTNFJTBBJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjJyZ2JhJTI4MjU1LCUyMDI1NSwlMjAyNTUsJTIwMC43JTI5JTIyJTIwcG9pbnRzJTNEJTIyMTIlMjAxMyUyMDklMjA4JTIwMTUlMjA4JTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBIil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWlucHV0W2xpc3RdOmZvY3VzLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1pbnB1dFtsaXN0XTpob3ZlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWlucHV0W2xpc3RdOmZvY3VzLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaW5wdXRbbGlzdF06aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaW5wdXRbbGlzdF06Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaW5wdXRbbGlzdF06aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWlucHV0W2xpc3RdOmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1pbnB1dFtsaXN0XTpob3ZlciwudWstbGlnaHQgLnVrLWlucHV0W2xpc3RdOmZvY3VzLC51ay1saWdodCAudWstaW5wdXRbbGlzdF06aG92ZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWlucHV0W2xpc3RdOmZvY3VzLC51ay1vZmZjYW52YXMtYmFyIC51ay1pbnB1dFtsaXN0XTpob3ZlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1pbnB1dFtsaXN0XTpmb2N1cywudWstb3ZlcmxheS1wcmltYXJ5IC51ay1pbnB1dFtsaXN0XTpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pbnB1dFtsaXN0XTpmb2N1cywudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pbnB1dFtsaXN0XTpob3ZlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWlucHV0W2xpc3RdOmZvY3VzLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaW5wdXRbbGlzdF06aG92ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaW5wdXRbbGlzdF06Zm9jdXMsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaW5wdXRbbGlzdF06aG92ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pbnB1dFtsaXN0XTpmb2N1cywudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWlucHV0W2xpc3RdOmhvdmVye2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD1VVEYtOCwlM0NzdmclMjB3aWR0aCUzRCUyMjI0JTIyJTIwaGVpZ2h0JTNEJTIyMTYlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAyNCUyMDE2JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlMEElMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMnJnYmElMjgyNTUsJTIwMjU1LCUyMDI1NSwlMjAwLjclMjklMjIlMjBwb2ludHMlM0QlMjIxMiUyMDEyJTIwOCUyMDYlMjAxNiUyMDYlMjIlMjAlMkYlM0UlMEElM0MlMkZzdmclM0UlMEEiKX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstY2hlY2tib3gsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXJhZGlvLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstY2hlY2tib3gsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1yYWRpbywudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1jaGVja2JveCwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1yYWRpbywudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstY2hlY2tib3gsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXJhZGlvLC51ay1saWdodCAudWstY2hlY2tib3gsLnVrLWxpZ2h0IC51ay1yYWRpbywudWstb2ZmY2FudmFzLWJhciAudWstY2hlY2tib3gsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXJhZGlvLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWNoZWNrYm94LC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXJhZGlvLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94LC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXJhZGlvLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3gsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1yYWRpbywudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jaGVja2JveCwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1yYWRpbywudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94LC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcmFkaW97YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0MiwyNDIsMjQyLC4xKTtib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWNoZWNrYm94OmZvY3VzLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1yYWRpbzpmb2N1cywudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWNoZWNrYm94OmZvY3VzLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstcmFkaW86Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstY2hlY2tib3g6Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstcmFkaW86Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWNoZWNrYm94OmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1yYWRpbzpmb2N1cywudWstbGlnaHQgLnVrLWNoZWNrYm94OmZvY3VzLC51ay1saWdodCAudWstcmFkaW86Zm9jdXMsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWNoZWNrYm94OmZvY3VzLC51ay1vZmZjYW52YXMtYmFyIC51ay1yYWRpbzpmb2N1cywudWstb3ZlcmxheS1wcmltYXJ5IC51ay1jaGVja2JveDpmb2N1cywudWstb3ZlcmxheS1wcmltYXJ5IC51ay1yYWRpbzpmb2N1cywudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jaGVja2JveDpmb2N1cywudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1yYWRpbzpmb2N1cywudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmZvY3VzLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcmFkaW86Zm9jdXMsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6Zm9jdXMsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcmFkaW86Zm9jdXMsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jaGVja2JveDpmb2N1cywudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXJhZGlvOmZvY3Vze2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstY2hlY2tib3g6Y2hlY2tlZCwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZSwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstcmFkaW86Y2hlY2tlZCwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWNoZWNrYm94OmNoZWNrZWQsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1jaGVja2JveDppbmRldGVybWluYXRlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstcmFkaW86Y2hlY2tlZCwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1jaGVja2JveDpjaGVja2VkLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstcmFkaW86Y2hlY2tlZCwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstY2hlY2tib3g6Y2hlY2tlZCwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstcmFkaW86Y2hlY2tlZCwudWstbGlnaHQgLnVrLWNoZWNrYm94OmNoZWNrZWQsLnVrLWxpZ2h0IC51ay1jaGVja2JveDppbmRldGVybWluYXRlLC51ay1saWdodCAudWstcmFkaW86Y2hlY2tlZCwudWstb2ZmY2FudmFzLWJhciAudWstY2hlY2tib3g6Y2hlY2tlZCwudWstb2ZmY2FudmFzLWJhciAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZSwudWstb2ZmY2FudmFzLWJhciAudWstcmFkaW86Y2hlY2tlZCwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1jaGVja2JveDpjaGVja2VkLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstcmFkaW86Y2hlY2tlZCwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jaGVja2JveDpjaGVja2VkLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcmFkaW86Y2hlY2tlZCwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmNoZWNrZWQsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jaGVja2JveDppbmRldGVybWluYXRlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcmFkaW86Y2hlY2tlZCwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jaGVja2JveDpjaGVja2VkLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcmFkaW86Y2hlY2tlZCwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmNoZWNrZWQsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jaGVja2JveDppbmRldGVybWluYXRlLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcmFkaW86Y2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1jaGVja2JveDpjaGVja2VkOmZvY3VzLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1jaGVja2JveDppbmRldGVybWluYXRlOmZvY3VzLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1yYWRpbzpjaGVja2VkOmZvY3VzLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstY2hlY2tib3g6Y2hlY2tlZDpmb2N1cywudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGU6Zm9jdXMsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1yYWRpbzpjaGVja2VkOmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWNoZWNrYm94OmNoZWNrZWQ6Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZTpmb2N1cywudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1yYWRpbzpjaGVja2VkOmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1jaGVja2JveDpjaGVja2VkOmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1jaGVja2JveDppbmRldGVybWluYXRlOmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1yYWRpbzpjaGVja2VkOmZvY3VzLC51ay1saWdodCAudWstY2hlY2tib3g6Y2hlY2tlZDpmb2N1cywudWstbGlnaHQgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGU6Zm9jdXMsLnVrLWxpZ2h0IC51ay1yYWRpbzpjaGVja2VkOmZvY3VzLC51ay1vZmZjYW52YXMtYmFyIC51ay1jaGVja2JveDpjaGVja2VkOmZvY3VzLC51ay1vZmZjYW52YXMtYmFyIC51ay1jaGVja2JveDppbmRldGVybWluYXRlOmZvY3VzLC51ay1vZmZjYW52YXMtYmFyIC51ay1yYWRpbzpjaGVja2VkOmZvY3VzLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWNoZWNrYm94OmNoZWNrZWQ6Zm9jdXMsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZTpmb2N1cywudWstb3ZlcmxheS1wcmltYXJ5IC51ay1yYWRpbzpjaGVja2VkOmZvY3VzLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmNoZWNrZWQ6Zm9jdXMsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZTpmb2N1cywudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1yYWRpbzpjaGVja2VkOmZvY3VzLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6Y2hlY2tlZDpmb2N1cywudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGU6Zm9jdXMsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1yYWRpbzpjaGVja2VkOmZvY3VzLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmNoZWNrZWQ6Zm9jdXMsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZTpmb2N1cywudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1yYWRpbzpjaGVja2VkOmZvY3VzLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6Y2hlY2tlZDpmb2N1cywudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGU6Zm9jdXMsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1yYWRpbzpjaGVja2VkOmZvY3Vze2JhY2tncm91bmQtY29sb3I6I2U2ZTZlNn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstcmFkaW86Y2hlY2tlZCwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXJhZGlvOmNoZWNrZWQsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstcmFkaW86Y2hlY2tlZCwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstcmFkaW86Y2hlY2tlZCwudWstbGlnaHQgLnVrLXJhZGlvOmNoZWNrZWQsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXJhZGlvOmNoZWNrZWQsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstcmFkaW86Y2hlY2tlZCwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1yYWRpbzpjaGVja2VkLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcmFkaW86Y2hlY2tlZCwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1yYWRpbzpjaGVja2VkLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcmFkaW86Y2hlY2tlZHtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnJTIwd2lkdGglM0QlMjIxNiUyMiUyMGhlaWdodCUzRCUyMjE2JTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTYlMjAxNiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDY2lyY2xlJTIwZmlsbCUzRCUyMiUyMzY2NiUyMiUyMGN4JTNEJTIyOCUyMiUyMGN5JTNEJTIyOCUyMiUyMHIlM0QlMjIyJTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFIil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWNoZWNrYm94OmNoZWNrZWQsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1jaGVja2JveDpjaGVja2VkLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWNoZWNrYm94OmNoZWNrZWQsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWNoZWNrYm94OmNoZWNrZWQsLnVrLWxpZ2h0IC51ay1jaGVja2JveDpjaGVja2VkLC51ay1vZmZjYW52YXMtYmFyIC51ay1jaGVja2JveDpjaGVja2VkLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWNoZWNrYm94OmNoZWNrZWQsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6Y2hlY2tlZCwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmNoZWNrZWQsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6Y2hlY2tlZCwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmNoZWNrZWR7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMTQlMjIlMjBoZWlnaHQlM0QlMjIxMSUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDE0JTIwMTElMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNjY2JTIyJTIwcG9pbnRzJTNEJTIyMTIlMjAxJTIwNSUyMDcuNSUyMDIlMjA1JTIwMSUyMDUuNSUyMDUlMjAxMCUyMDEzJTIwMS41JTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBIil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1jaGVja2JveDppbmRldGVybWluYXRlLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsLnVrLWxpZ2h0IC51ay1jaGVja2JveDppbmRldGVybWluYXRlLC51ay1vZmZjYW52YXMtYmFyIC51ay1jaGVja2JveDppbmRldGVybWluYXRlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGV7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMTYlMjIlMjBoZWlnaHQlM0QlMjIxNiUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDE2JTIwMTYlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3JlY3QlMjBmaWxsJTNEJTIyJTIzNjY2JTIyJTIweCUzRCUyMjMlMjIlMjB5JTNEJTIyOCUyMiUyMHdpZHRoJTNEJTIyMTAlMjIlMjBoZWlnaHQlM0QlMjIxJTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFIil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWZvcm0tbGFiZWwsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1mb3JtLWxhYmVsLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWZvcm0tbGFiZWwsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWZvcm0tbGFiZWwsLnVrLWxpZ2h0IC51ay1mb3JtLWxhYmVsLC51ay1vZmZjYW52YXMtYmFyIC51ay1mb3JtLWxhYmVsLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWZvcm0tbGFiZWwsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZm9ybS1sYWJlbCwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWZvcm0tbGFiZWwsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZm9ybS1sYWJlbCwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWZvcm0tbGFiZWx7Y29sb3I6I2ZmZn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstZm9ybS1pY29uLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstZm9ybS1pY29uLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWZvcm0taWNvbiwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstZm9ybS1pY29uLC51ay1saWdodCAudWstZm9ybS1pY29uLC51ay1vZmZjYW52YXMtYmFyIC51ay1mb3JtLWljb24sLnVrLW92ZXJsYXktcHJpbWFyeSAudWstZm9ybS1pY29uLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWZvcm0taWNvbiwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWZvcm0taWNvbiwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1mb3JtLWljb24sLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1mb3JtLWljb257Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWZvcm0taWNvbjpob3ZlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWZvcm0taWNvbjpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1mb3JtLWljb246aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWZvcm0taWNvbjpob3ZlciwudWstbGlnaHQgLnVrLWZvcm0taWNvbjpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstZm9ybS1pY29uOmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWZvcm0taWNvbjpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1mb3JtLWljb246aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1mb3JtLWljb246aG92ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZm9ybS1pY29uOmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZm9ybS1pY29uOmhvdmVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tZGVmYXVsdCwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJ1dHRvbi1kZWZhdWx0LC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1kZWZhdWx0LC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1idXR0b24tZGVmYXVsdCwudWstbGlnaHQgLnVrLWJ1dHRvbi1kZWZhdWx0LC51ay1vZmZjYW52YXMtYmFyIC51ay1idXR0b24tZGVmYXVsdCwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1idXR0b24tZGVmYXVsdCwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tZGVmYXVsdCwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1kZWZhdWx0LC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1kZWZhdWx0LC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWRlZmF1bHR7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjojZmZmO2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLWRlZmF1bHQ6Zm9jdXMsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1kZWZhdWx0OmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLWRlZmF1bHQ6Zm9jdXMsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1idXR0b24tZGVmYXVsdDpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tZGVmYXVsdDpmb2N1cywudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tZGVmYXVsdDpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLWRlZmF1bHQ6Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJ1dHRvbi1kZWZhdWx0OmhvdmVyLC51ay1saWdodCAudWstYnV0dG9uLWRlZmF1bHQ6Zm9jdXMsLnVrLWxpZ2h0IC51ay1idXR0b24tZGVmYXVsdDpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstYnV0dG9uLWRlZmF1bHQ6Zm9jdXMsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJ1dHRvbi1kZWZhdWx0OmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWJ1dHRvbi1kZWZhdWx0OmZvY3VzLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWJ1dHRvbi1kZWZhdWx0OmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1kZWZhdWx0OmZvY3VzLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1kZWZhdWx0OmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWRlZmF1bHQ6Zm9jdXMsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tZGVmYXVsdDpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tZGVmYXVsdDpmb2N1cywudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tZGVmYXVsdDpob3ZlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1kZWZhdWx0OmZvY3VzLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWRlZmF1bHQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjojZmZmO2JvcmRlci1jb2xvcjojZmZmfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tZGVmYXVsdC51ay1hY3RpdmUsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1kZWZhdWx0OmFjdGl2ZSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJ1dHRvbi1kZWZhdWx0LnVrLWFjdGl2ZSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJ1dHRvbi1kZWZhdWx0OmFjdGl2ZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tZGVmYXVsdC51ay1hY3RpdmUsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLWRlZmF1bHQ6YWN0aXZlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1idXR0b24tZGVmYXVsdC51ay1hY3RpdmUsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJ1dHRvbi1kZWZhdWx0OmFjdGl2ZSwudWstbGlnaHQgLnVrLWJ1dHRvbi1kZWZhdWx0LnVrLWFjdGl2ZSwudWstbGlnaHQgLnVrLWJ1dHRvbi1kZWZhdWx0OmFjdGl2ZSwudWstb2ZmY2FudmFzLWJhciAudWstYnV0dG9uLWRlZmF1bHQudWstYWN0aXZlLC51ay1vZmZjYW52YXMtYmFyIC51ay1idXR0b24tZGVmYXVsdDphY3RpdmUsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYnV0dG9uLWRlZmF1bHQudWstYWN0aXZlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWJ1dHRvbi1kZWZhdWx0OmFjdGl2ZSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tZGVmYXVsdC51ay1hY3RpdmUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWRlZmF1bHQ6YWN0aXZlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWRlZmF1bHQudWstYWN0aXZlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWRlZmF1bHQ6YWN0aXZlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1kZWZhdWx0LnVrLWFjdGl2ZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tZGVmYXVsdDphY3RpdmUsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tZGVmYXVsdC51ay1hY3RpdmUsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tZGVmYXVsdDphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjojZmZmO2JvcmRlci1jb2xvcjojZmZmfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tcHJpbWFyeSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJ1dHRvbi1wcmltYXJ5LC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1wcmltYXJ5LC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1idXR0b24tcHJpbWFyeSwudWstbGlnaHQgLnVrLWJ1dHRvbi1wcmltYXJ5LC51ay1vZmZjYW52YXMtYmFyIC51ay1idXR0b24tcHJpbWFyeSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1idXR0b24tcHJpbWFyeSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tcHJpbWFyeSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1wcmltYXJ5LC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1wcmltYXJ5LC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiM2NjZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1wcmltYXJ5OmZvY3VzLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tcHJpbWFyeTpob3ZlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJ1dHRvbi1wcmltYXJ5OmZvY3VzLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLXByaW1hcnk6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXByaW1hcnk6Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXByaW1hcnk6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJ1dHRvbi1wcmltYXJ5OmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1idXR0b24tcHJpbWFyeTpob3ZlciwudWstbGlnaHQgLnVrLWJ1dHRvbi1wcmltYXJ5OmZvY3VzLC51ay1saWdodCAudWstYnV0dG9uLXByaW1hcnk6aG92ZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJ1dHRvbi1wcmltYXJ5OmZvY3VzLC51ay1vZmZjYW52YXMtYmFyIC51ay1idXR0b24tcHJpbWFyeTpob3ZlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1idXR0b24tcHJpbWFyeTpmb2N1cywudWstb3ZlcmxheS1wcmltYXJ5IC51ay1idXR0b24tcHJpbWFyeTpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tcHJpbWFyeTpmb2N1cywudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tcHJpbWFyeTpob3ZlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1wcmltYXJ5OmZvY3VzLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXByaW1hcnk6aG92ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXByaW1hcnk6Zm9jdXMsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXByaW1hcnk6aG92ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tcHJpbWFyeTpmb2N1cywudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1wcmltYXJ5OmhvdmVye2JhY2tncm91bmQtY29sb3I6I2YyZjJmMjtjb2xvcjojNjY2fS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tcHJpbWFyeS51ay1hY3RpdmUsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1wcmltYXJ5OmFjdGl2ZSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJ1dHRvbi1wcmltYXJ5LnVrLWFjdGl2ZSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJ1dHRvbi1wcmltYXJ5OmFjdGl2ZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tcHJpbWFyeS51ay1hY3RpdmUsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXByaW1hcnk6YWN0aXZlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1idXR0b24tcHJpbWFyeS51ay1hY3RpdmUsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJ1dHRvbi1wcmltYXJ5OmFjdGl2ZSwudWstbGlnaHQgLnVrLWJ1dHRvbi1wcmltYXJ5LnVrLWFjdGl2ZSwudWstbGlnaHQgLnVrLWJ1dHRvbi1wcmltYXJ5OmFjdGl2ZSwudWstb2ZmY2FudmFzLWJhciAudWstYnV0dG9uLXByaW1hcnkudWstYWN0aXZlLC51ay1vZmZjYW52YXMtYmFyIC51ay1idXR0b24tcHJpbWFyeTphY3RpdmUsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYnV0dG9uLXByaW1hcnkudWstYWN0aXZlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWJ1dHRvbi1wcmltYXJ5OmFjdGl2ZSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tcHJpbWFyeS51ay1hY3RpdmUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXByaW1hcnk6YWN0aXZlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXByaW1hcnkudWstYWN0aXZlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXByaW1hcnk6YWN0aXZlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1wcmltYXJ5LnVrLWFjdGl2ZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tcHJpbWFyeTphY3RpdmUsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tcHJpbWFyeS51ay1hY3RpdmUsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tcHJpbWFyeTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojZTZlNmU2O2NvbG9yOiM2NjZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1zZWNvbmRhcnksLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1idXR0b24tc2Vjb25kYXJ5LC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1zZWNvbmRhcnksLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJ1dHRvbi1zZWNvbmRhcnksLnVrLWxpZ2h0IC51ay1idXR0b24tc2Vjb25kYXJ5LC51ay1vZmZjYW52YXMtYmFyIC51ay1idXR0b24tc2Vjb25kYXJ5LC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWJ1dHRvbi1zZWNvbmRhcnksLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXNlY29uZGFyeSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1zZWNvbmRhcnksLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXNlY29uZGFyeSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1zZWNvbmRhcnl7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiM2NjZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1zZWNvbmRhcnk6Zm9jdXMsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1zZWNvbmRhcnk6aG92ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1idXR0b24tc2Vjb25kYXJ5OmZvY3VzLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLXNlY29uZGFyeTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tc2Vjb25kYXJ5OmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1zZWNvbmRhcnk6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJ1dHRvbi1zZWNvbmRhcnk6Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJ1dHRvbi1zZWNvbmRhcnk6aG92ZXIsLnVrLWxpZ2h0IC51ay1idXR0b24tc2Vjb25kYXJ5OmZvY3VzLC51ay1saWdodCAudWstYnV0dG9uLXNlY29uZGFyeTpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstYnV0dG9uLXNlY29uZGFyeTpmb2N1cywudWstb2ZmY2FudmFzLWJhciAudWstYnV0dG9uLXNlY29uZGFyeTpob3ZlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1idXR0b24tc2Vjb25kYXJ5OmZvY3VzLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWJ1dHRvbi1zZWNvbmRhcnk6aG92ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXNlY29uZGFyeTpmb2N1cywudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tc2Vjb25kYXJ5OmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXNlY29uZGFyeTpmb2N1cywudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1zZWNvbmRhcnk6aG92ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXNlY29uZGFyeTpmb2N1cywudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tc2Vjb25kYXJ5OmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXNlY29uZGFyeTpmb2N1cywudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1zZWNvbmRhcnk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZjJmMmYyO2NvbG9yOiM2NjZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1zZWNvbmRhcnkudWstYWN0aXZlLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tc2Vjb25kYXJ5OmFjdGl2ZSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJ1dHRvbi1zZWNvbmRhcnkudWstYWN0aXZlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLXNlY29uZGFyeTphY3RpdmUsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXNlY29uZGFyeS51ay1hY3RpdmUsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXNlY29uZGFyeTphY3RpdmUsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJ1dHRvbi1zZWNvbmRhcnkudWstYWN0aXZlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1idXR0b24tc2Vjb25kYXJ5OmFjdGl2ZSwudWstbGlnaHQgLnVrLWJ1dHRvbi1zZWNvbmRhcnkudWstYWN0aXZlLC51ay1saWdodCAudWstYnV0dG9uLXNlY29uZGFyeTphY3RpdmUsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJ1dHRvbi1zZWNvbmRhcnkudWstYWN0aXZlLC51ay1vZmZjYW52YXMtYmFyIC51ay1idXR0b24tc2Vjb25kYXJ5OmFjdGl2ZSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1idXR0b24tc2Vjb25kYXJ5LnVrLWFjdGl2ZSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1idXR0b24tc2Vjb25kYXJ5OmFjdGl2ZSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tc2Vjb25kYXJ5LnVrLWFjdGl2ZSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tc2Vjb25kYXJ5OmFjdGl2ZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1zZWNvbmRhcnkudWstYWN0aXZlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXNlY29uZGFyeTphY3RpdmUsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXNlY29uZGFyeS51ay1hY3RpdmUsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXNlY29uZGFyeTphY3RpdmUsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tc2Vjb25kYXJ5LnVrLWFjdGl2ZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1zZWNvbmRhcnk6YWN0aXZle2JhY2tncm91bmQtY29sb3I6I2U2ZTZlNjtjb2xvcjojNjY2fS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tdGV4dCwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJ1dHRvbi10ZXh0LC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi10ZXh0LC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1idXR0b24tdGV4dCwudWstbGlnaHQgLnVrLWJ1dHRvbi10ZXh0LC51ay1vZmZjYW52YXMtYmFyIC51ay1idXR0b24tdGV4dCwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1idXR0b24tdGV4dCwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tdGV4dCwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi10ZXh0LC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi10ZXh0LC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXRleHR7Y29sb3I6I2ZmZn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXRleHQ6OmJlZm9yZSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJ1dHRvbi10ZXh0OjpiZWZvcmUsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXRleHQ6OmJlZm9yZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLXRleHQ6OmJlZm9yZSwudWstbGlnaHQgLnVrLWJ1dHRvbi10ZXh0OjpiZWZvcmUsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJ1dHRvbi10ZXh0OjpiZWZvcmUsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYnV0dG9uLXRleHQ6OmJlZm9yZSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tdGV4dDo6YmVmb3JlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXRleHQ6OmJlZm9yZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tdGV4dDo6YmVmb3JlLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXRleHQ6OmJlZm9yZXtib3JkZXItYm90dG9tLWNvbG9yOiNmZmZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi10ZXh0OmZvY3VzLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tdGV4dDpob3ZlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJ1dHRvbi10ZXh0OmZvY3VzLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLXRleHQ6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXRleHQ6Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXRleHQ6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJ1dHRvbi10ZXh0OmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1idXR0b24tdGV4dDpob3ZlciwudWstbGlnaHQgLnVrLWJ1dHRvbi10ZXh0OmZvY3VzLC51ay1saWdodCAudWstYnV0dG9uLXRleHQ6aG92ZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJ1dHRvbi10ZXh0OmZvY3VzLC51ay1vZmZjYW52YXMtYmFyIC51ay1idXR0b24tdGV4dDpob3ZlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1idXR0b24tdGV4dDpmb2N1cywudWstb3ZlcmxheS1wcmltYXJ5IC51ay1idXR0b24tdGV4dDpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tdGV4dDpmb2N1cywudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tdGV4dDpob3ZlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi10ZXh0OmZvY3VzLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXRleHQ6aG92ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXRleHQ6Zm9jdXMsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXRleHQ6aG92ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tdGV4dDpmb2N1cywudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi10ZXh0OmhvdmVye2NvbG9yOiNmZmZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi10ZXh0OmRpc2FibGVkLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLXRleHQ6ZGlzYWJsZWQsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXRleHQ6ZGlzYWJsZWQsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJ1dHRvbi10ZXh0OmRpc2FibGVkLC51ay1saWdodCAudWstYnV0dG9uLXRleHQ6ZGlzYWJsZWQsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJ1dHRvbi10ZXh0OmRpc2FibGVkLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWJ1dHRvbi10ZXh0OmRpc2FibGVkLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi10ZXh0OmRpc2FibGVkLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXRleHQ6ZGlzYWJsZWQsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXRleHQ6ZGlzYWJsZWQsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tdGV4dDpkaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLWxpbmssLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1idXR0b24tbGluaywudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tbGluaywudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLWxpbmssLnVrLWxpZ2h0IC51ay1idXR0b24tbGluaywudWstb2ZmY2FudmFzLWJhciAudWstYnV0dG9uLWxpbmssLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYnV0dG9uLWxpbmssLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWxpbmssLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tbGluaywudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tbGluaywudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1saW5re2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tbGluazpmb2N1cywudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLWxpbms6aG92ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1idXR0b24tbGluazpmb2N1cywudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJ1dHRvbi1saW5rOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1saW5rOmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1saW5rOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1idXR0b24tbGluazpmb2N1cywudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLWxpbms6aG92ZXIsLnVrLWxpZ2h0IC51ay1idXR0b24tbGluazpmb2N1cywudWstbGlnaHQgLnVrLWJ1dHRvbi1saW5rOmhvdmVyLC51ay1vZmZjYW52YXMtYmFyIC51ay1idXR0b24tbGluazpmb2N1cywudWstb2ZmY2FudmFzLWJhciAudWstYnV0dG9uLWxpbms6aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYnV0dG9uLWxpbms6Zm9jdXMsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYnV0dG9uLWxpbms6aG92ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWxpbms6Zm9jdXMsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWxpbms6aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tbGluazpmb2N1cywudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1saW5rOmhvdmVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1saW5rOmZvY3VzLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1saW5rOmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWxpbms6Zm9jdXMsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tbGluazpob3Zlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstZ3JpZC1kaXZpZGVyPjpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWdyaWQtZGl2aWRlcj46bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstZ3JpZC1kaXZpZGVyPjpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstZ3JpZC1kaXZpZGVyPjpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwudWstbGlnaHQgLnVrLWdyaWQtZGl2aWRlcj46bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWdyaWQtZGl2aWRlcj46bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstZ3JpZC1kaXZpZGVyPjpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1ncmlkLWRpdmlkZXI+Om5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZ3JpZC1kaXZpZGVyPjpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1ncmlkLWRpdmlkZXI+Om5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZ3JpZC1kaXZpZGVyPjpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZXtib3JkZXItbGVmdC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4yKX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc3RhY2s+LnVrLWdyaWQtbWFyZ2luOjpiZWZvcmUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1zdGFjaz4udWstZ3JpZC1tYXJnaW46OmJlZm9yZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1zdGFjaz4udWstZ3JpZC1tYXJnaW46OmJlZm9yZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc3RhY2s+LnVrLWdyaWQtbWFyZ2luOjpiZWZvcmUsLnVrLWxpZ2h0IC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1zdGFjaz4udWstZ3JpZC1tYXJnaW46OmJlZm9yZSwudWstb2ZmY2FudmFzLWJhciAudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc3RhY2s+LnVrLWdyaWQtbWFyZ2luOjpiZWZvcmUsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc3RhY2s+LnVrLWdyaWQtbWFyZ2luOjpiZWZvcmUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc3RhY2s+LnVrLWdyaWQtbWFyZ2luOjpiZWZvcmUsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1zdGFjaz4udWstZ3JpZC1tYXJnaW46OmJlZm9yZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1zdGFjaz4udWstZ3JpZC1tYXJnaW46OmJlZm9yZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLXN0YWNrPi51ay1ncmlkLW1hcmdpbjo6YmVmb3Jle2JvcmRlci10b3AtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWNsb3NlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstY2xvc2UsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstY2xvc2UsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWNsb3NlLC51ay1saWdodCAudWstY2xvc2UsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWNsb3NlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWNsb3NlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNsb3NlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2xvc2UsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2xvc2UsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jbG9zZXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstY2xvc2U6Zm9jdXMsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWNsb3NlOmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstY2xvc2U6Zm9jdXMsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1jbG9zZTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1jbG9zZTpmb2N1cywudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1jbG9zZTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstY2xvc2U6Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWNsb3NlOmhvdmVyLC51ay1saWdodCAudWstY2xvc2U6Zm9jdXMsLnVrLWxpZ2h0IC51ay1jbG9zZTpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstY2xvc2U6Zm9jdXMsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWNsb3NlOmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWNsb3NlOmZvY3VzLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWNsb3NlOmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNsb3NlOmZvY3VzLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNsb3NlOmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2xvc2U6Zm9jdXMsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jbG9zZTpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jbG9zZTpmb2N1cywudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jbG9zZTpob3ZlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNsb3NlOmZvY3VzLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2xvc2U6aG92ZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRvdG9wLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdG90b3AsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdG90b3AsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRvdG9wLC51ay1saWdodCAudWstdG90b3AsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRvdG9wLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRvdG9wLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRvdG9wLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdG90b3AsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdG90b3AsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10b3RvcHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdG90b3A6Zm9jdXMsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRvdG9wOmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdG90b3A6Zm9jdXMsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10b3RvcDpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10b3RvcDpmb2N1cywudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10b3RvcDpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdG90b3A6Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRvdG9wOmhvdmVyLC51ay1saWdodCAudWstdG90b3A6Zm9jdXMsLnVrLWxpZ2h0IC51ay10b3RvcDpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstdG90b3A6Zm9jdXMsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRvdG9wOmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRvdG9wOmZvY3VzLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRvdG9wOmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRvdG9wOmZvY3VzLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRvdG9wOmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdG90b3A6Zm9jdXMsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10b3RvcDpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10b3RvcDpmb2N1cywudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10b3RvcDpob3ZlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRvdG9wOmZvY3VzLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdG90b3A6aG92ZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRvdG9wOmFjdGl2ZSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRvdG9wOmFjdGl2ZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10b3RvcDphY3RpdmUsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRvdG9wOmFjdGl2ZSwudWstbGlnaHQgLnVrLXRvdG9wOmFjdGl2ZSwudWstb2ZmY2FudmFzLWJhciAudWstdG90b3A6YWN0aXZlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRvdG9wOmFjdGl2ZSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10b3RvcDphY3RpdmUsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10b3RvcDphY3RpdmUsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdG90b3A6YWN0aXZlLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdG90b3A6YWN0aXZle2NvbG9yOiNmZmZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW1hcmtlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW1hcmtlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1tYXJrZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW1hcmtlciwudWstbGlnaHQgLnVrLW1hcmtlciwudWstb2ZmY2FudmFzLWJhciAudWstbWFya2VyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLW1hcmtlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1tYXJrZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1tYXJrZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbWFya2VyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbWFya2Vye2JhY2tncm91bmQ6I2Y4ZjhmODtjb2xvcjojNjY2fS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1tYXJrZXI6Zm9jdXMsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW1hcmtlcjpob3ZlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW1hcmtlcjpmb2N1cywudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW1hcmtlcjpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1tYXJrZXI6Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbWFya2VyOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1tYXJrZXI6Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW1hcmtlcjpob3ZlciwudWstbGlnaHQgLnVrLW1hcmtlcjpmb2N1cywudWstbGlnaHQgLnVrLW1hcmtlcjpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstbWFya2VyOmZvY3VzLC51ay1vZmZjYW52YXMtYmFyIC51ay1tYXJrZXI6aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbWFya2VyOmZvY3VzLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLW1hcmtlcjpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1tYXJrZXI6Zm9jdXMsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbWFya2VyOmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbWFya2VyOmZvY3VzLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbWFya2VyOmhvdmVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW1hcmtlcjpmb2N1cywudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1tYXJrZXI6aG92ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1tYXJrZXI6Zm9jdXMsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1tYXJrZXI6aG92ZXJ7Y29sb3I6IzY2Nn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYmFkZ2UsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1iYWRnZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1iYWRnZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYmFkZ2UsLnVrLWxpZ2h0IC51ay1iYWRnZSwudWstb2ZmY2FudmFzLWJhciAudWstYmFkZ2UsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYmFkZ2UsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYmFkZ2UsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1iYWRnZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1iYWRnZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJhZGdle2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjojNjY2fS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1iYWRnZTpmb2N1cywudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYmFkZ2U6aG92ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1iYWRnZTpmb2N1cywudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJhZGdlOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWJhZGdlOmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWJhZGdlOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1iYWRnZTpmb2N1cywudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYmFkZ2U6aG92ZXIsLnVrLWxpZ2h0IC51ay1iYWRnZTpmb2N1cywudWstbGlnaHQgLnVrLWJhZGdlOmhvdmVyLC51ay1vZmZjYW52YXMtYmFyIC51ay1iYWRnZTpmb2N1cywudWstb2ZmY2FudmFzLWJhciAudWstYmFkZ2U6aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYmFkZ2U6Zm9jdXMsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYmFkZ2U6aG92ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYmFkZ2U6Zm9jdXMsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYmFkZ2U6aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1iYWRnZTpmb2N1cywudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJhZGdlOmhvdmVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJhZGdlOmZvY3VzLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJhZGdlOmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYmFkZ2U6Zm9jdXMsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1iYWRnZTpob3Zlcntjb2xvcjojNjY2fS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1sYWJlbCwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxhYmVsLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxhYmVsLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1sYWJlbCwudWstbGlnaHQgLnVrLWxhYmVsLC51ay1vZmZjYW52YXMtYmFyIC51ay1sYWJlbCwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1sYWJlbCwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1sYWJlbCwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxhYmVsLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxhYmVsLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiM2NjZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWFydGljbGUtbWV0YSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWFydGljbGUtbWV0YSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1hcnRpY2xlLW1ldGEsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWFydGljbGUtbWV0YSwudWstbGlnaHQgLnVrLWFydGljbGUtbWV0YSwudWstb2ZmY2FudmFzLWJhciAudWstYXJ0aWNsZS1tZXRhLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWFydGljbGUtbWV0YSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1hcnRpY2xlLW1ldGEsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1hcnRpY2xlLW1ldGEsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYXJ0aWNsZS1tZXRhLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYXJ0aWNsZS1tZXRhe2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2gtaW5wdXQsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zZWFyY2gtaW5wdXQsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc2VhcmNoLWlucHV0LC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zZWFyY2gtaW5wdXQsLnVrLWxpZ2h0IC51ay1zZWFyY2gtaW5wdXQsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXNlYXJjaC1pbnB1dCwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zZWFyY2gtaW5wdXQsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLWlucHV0LC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLWlucHV0LC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1pbnB1dCwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1pbnB1dHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc2VhcmNoLWlucHV0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXNlYXJjaC1pbnB1dDotbXMtaW5wdXQtcGxhY2Vob2xkZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc2VhcmNoLWlucHV0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc2VhcmNoLWlucHV0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciwudWstbGlnaHQgLnVrLXNlYXJjaC1pbnB1dDotbXMtaW5wdXQtcGxhY2Vob2xkZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXNlYXJjaC1pbnB1dDotbXMtaW5wdXQtcGxhY2Vob2xkZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstc2VhcmNoLWlucHV0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtaW5wdXQ6LW1zLWlucHV0LXBsYWNlaG9sZGVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLWlucHV0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtaW5wdXQ6LW1zLWlucHV0LXBsYWNlaG9sZGVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLWlucHV0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KSFpbXBvcnRhbnR9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXNlYXJjaC1pbnB1dDo6cGxhY2Vob2xkZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zZWFyY2gtaW5wdXQ6OnBsYWNlaG9sZGVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXNlYXJjaC1pbnB1dDo6cGxhY2Vob2xkZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXNlYXJjaC1pbnB1dDo6cGxhY2Vob2xkZXIsLnVrLWxpZ2h0IC51ay1zZWFyY2gtaW5wdXQ6OnBsYWNlaG9sZGVyLC51ay1vZmZjYW52YXMtYmFyIC51ay1zZWFyY2gtaW5wdXQ6OnBsYWNlaG9sZGVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXNlYXJjaC1pbnB1dDo6cGxhY2Vob2xkZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLWlucHV0OjpwbGFjZWhvbGRlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1pbnB1dDo6cGxhY2Vob2xkZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLWlucHV0OjpwbGFjZWhvbGRlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1pbnB1dDo6cGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXNlYXJjaCAudWstc2VhcmNoLWljb24sLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXNlYXJjaCAudWstc2VhcmNoLWljb24sLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXNlYXJjaCAudWstc2VhcmNoLWljb24sLnVrLWxpZ2h0IC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uLC51ay1vZmZjYW52YXMtYmFyIC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXNlYXJjaCAudWstc2VhcmNoLWljb24sLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoIC51ay1zZWFyY2gtaWNvbiwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaCAudWstc2VhcmNoLWljb24sLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoIC51ay1zZWFyY2gtaWNvbiwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaCAudWstc2VhcmNoLWljb257Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXNlYXJjaCAudWstc2VhcmNoLWljb246aG92ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXNlYXJjaCAudWstc2VhcmNoLWljb246aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXNlYXJjaCAudWstc2VhcmNoLWljb246aG92ZXIsLnVrLWxpZ2h0IC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uOmhvdmVyLC51ay1vZmZjYW52YXMtYmFyIC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uOmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXNlYXJjaCAudWstc2VhcmNoLWljb246aG92ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoIC51ay1zZWFyY2gtaWNvbjpob3ZlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaCAudWstc2VhcmNoLWljb246aG92ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoIC51ay1zZWFyY2gtaWNvbjpob3ZlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaCAudWstc2VhcmNoLWljb246aG92ZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXNlYXJjaC1kZWZhdWx0IC51ay1zZWFyY2gtaW5wdXQsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0LC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXNlYXJjaC1kZWZhdWx0IC51ay1zZWFyY2gtaW5wdXQsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXNlYXJjaC1kZWZhdWx0IC51ay1zZWFyY2gtaW5wdXQsLnVrLWxpZ2h0IC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0LC51ay1vZmZjYW52YXMtYmFyIC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0LC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXNlYXJjaC1kZWZhdWx0IC51ay1zZWFyY2gtaW5wdXQsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLWRlZmF1bHQgLnVrLXNlYXJjaC1pbnB1dCwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1kZWZhdWx0IC51ay1zZWFyY2gtaW5wdXQsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLWRlZmF1bHQgLnVrLXNlYXJjaC1pbnB1dCwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1kZWZhdWx0IC51ay1zZWFyY2gtaW5wdXR7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXNlYXJjaC1kZWZhdWx0IC51ay1zZWFyY2gtaW5wdXQ6Zm9jdXMsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0OmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXNlYXJjaC1kZWZhdWx0IC51ay1zZWFyY2gtaW5wdXQ6Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXNlYXJjaC1kZWZhdWx0IC51ay1zZWFyY2gtaW5wdXQ6Zm9jdXMsLnVrLWxpZ2h0IC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0OmZvY3VzLC51ay1vZmZjYW52YXMtYmFyIC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0OmZvY3VzLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXNlYXJjaC1kZWZhdWx0IC51ay1zZWFyY2gtaW5wdXQ6Zm9jdXMsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLWRlZmF1bHQgLnVrLXNlYXJjaC1pbnB1dDpmb2N1cywudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1kZWZhdWx0IC51ay1zZWFyY2gtaW5wdXQ6Zm9jdXMsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLWRlZmF1bHQgLnVrLXNlYXJjaC1pbnB1dDpmb2N1cywudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1kZWZhdWx0IC51ay1zZWFyY2gtaW5wdXQ6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc2VhcmNoLW5hdmJhciAudWstc2VhcmNoLWlucHV0LC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc2VhcmNoLW5hdmJhciAudWstc2VhcmNoLWlucHV0LC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXNlYXJjaC1uYXZiYXIgLnVrLXNlYXJjaC1pbnB1dCwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc2VhcmNoLW5hdmJhciAudWstc2VhcmNoLWlucHV0LC51ay1saWdodCAudWstc2VhcmNoLW5hdmJhciAudWstc2VhcmNoLWlucHV0LC51ay1vZmZjYW52YXMtYmFyIC51ay1zZWFyY2gtbmF2YmFyIC51ay1zZWFyY2gtaW5wdXQsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstc2VhcmNoLW5hdmJhciAudWstc2VhcmNoLWlucHV0LC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1uYXZiYXIgLnVrLXNlYXJjaC1pbnB1dCwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1uYXZiYXIgLnVrLXNlYXJjaC1pbnB1dCwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtbmF2YmFyIC51ay1zZWFyY2gtaW5wdXQsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtbmF2YmFyIC51ay1zZWFyY2gtaW5wdXR7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc2VhcmNoLWxhcmdlIC51ay1zZWFyY2gtaW5wdXQsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zZWFyY2gtbGFyZ2UgLnVrLXNlYXJjaC1pbnB1dCwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2gtbGFyZ2UgLnVrLXNlYXJjaC1pbnB1dCwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc2VhcmNoLWxhcmdlIC51ay1zZWFyY2gtaW5wdXQsLnVrLWxpZ2h0IC51ay1zZWFyY2gtbGFyZ2UgLnVrLXNlYXJjaC1pbnB1dCwudWstb2ZmY2FudmFzLWJhciAudWstc2VhcmNoLWxhcmdlIC51ay1zZWFyY2gtaW5wdXQsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstc2VhcmNoLWxhcmdlIC51ay1zZWFyY2gtaW5wdXQsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLWxhcmdlIC51ay1zZWFyY2gtaW5wdXQsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtbGFyZ2UgLnVrLXNlYXJjaC1pbnB1dCwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtbGFyZ2UgLnVrLXNlYXJjaC1pbnB1dCwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1sYXJnZSAudWstc2VhcmNoLWlucHV0e2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXNlYXJjaC10b2dnbGUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zZWFyY2gtdG9nZ2xlLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXNlYXJjaC10b2dnbGUsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXNlYXJjaC10b2dnbGUsLnVrLWxpZ2h0IC51ay1zZWFyY2gtdG9nZ2xlLC51ay1vZmZjYW52YXMtYmFyIC51ay1zZWFyY2gtdG9nZ2xlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXNlYXJjaC10b2dnbGUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLXRvZ2dsZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC10b2dnbGUsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLXRvZ2dsZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC10b2dnbGV7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXNlYXJjaC10b2dnbGU6Zm9jdXMsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXNlYXJjaC10b2dnbGU6aG92ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zZWFyY2gtdG9nZ2xlOmZvY3VzLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc2VhcmNoLXRvZ2dsZTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2gtdG9nZ2xlOmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXNlYXJjaC10b2dnbGU6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXNlYXJjaC10b2dnbGU6Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXNlYXJjaC10b2dnbGU6aG92ZXIsLnVrLWxpZ2h0IC51ay1zZWFyY2gtdG9nZ2xlOmZvY3VzLC51ay1saWdodCAudWstc2VhcmNoLXRvZ2dsZTpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstc2VhcmNoLXRvZ2dsZTpmb2N1cywudWstb2ZmY2FudmFzLWJhciAudWstc2VhcmNoLXRvZ2dsZTpob3ZlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zZWFyY2gtdG9nZ2xlOmZvY3VzLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXNlYXJjaC10b2dnbGU6aG92ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLXRvZ2dsZTpmb2N1cywudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtdG9nZ2xlOmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLXRvZ2dsZTpmb2N1cywudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC10b2dnbGU6aG92ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLXRvZ2dsZTpmb2N1cywudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtdG9nZ2xlOmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLXRvZ2dsZTpmb2N1cywudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC10b2dnbGU6aG92ZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1wYXJlbnQtaWNvbj4udWstcGFyZW50PmE6OmFmdGVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LXBhcmVudC1pY29uPi51ay1wYXJlbnQ+YTo6YWZ0ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXBhcmVudC1pY29uPi51ay1wYXJlbnQ+YTo6YWZ0ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1wYXJlbnQtaWNvbj4udWstcGFyZW50PmE6OmFmdGVyLC51ay1saWdodCAudWstbmF2LXBhcmVudC1pY29uPi51ay1wYXJlbnQ+YTo6YWZ0ZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1wYXJlbnQtaWNvbj4udWstcGFyZW50PmE6OmFmdGVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1wYXJlbnQtaWNvbj4udWstcGFyZW50PmE6OmFmdGVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wYXJlbnQtaWNvbj4udWstcGFyZW50PmE6OmFmdGVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXBhcmVudC1pY29uPi51ay1wYXJlbnQ+YTo6YWZ0ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXBhcmVudC1pY29uPi51ay1wYXJlbnQ+YTo6YWZ0ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcGFyZW50LWljb24+LnVrLXBhcmVudD5hOjphZnRlcntiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnJTIwd2lkdGglM0QlMjIxNCUyMiUyMGhlaWdodCUzRCUyMjE0JTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTQlMjAxNCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDcG9seWxpbmUlMjBmaWxsJTNEJTIybm9uZSUyMiUyMHN0cm9rZSUzRCUyMnJnYmElMjgyNTUsJTIwMjU1LCUyMDI1NSwlMjAwLjclMjklMjIlMjBzdHJva2Utd2lkdGglM0QlMjIxLjElMjIlMjBwb2ludHMlM0QlMjIxMCUyMDElMjA0JTIwNyUyMDEwJTIwMTMlMjIlMjAlMkYlM0UlMEElM0MlMkZzdmclM0UiKX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXBhcmVudC1pY29uPi51ay1wYXJlbnQudWstb3Blbj5hOjphZnRlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1wYXJlbnQtaWNvbj4udWstcGFyZW50LnVrLW9wZW4+YTo6YWZ0ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXBhcmVudC1pY29uPi51ay1wYXJlbnQudWstb3Blbj5hOjphZnRlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LXBhcmVudC1pY29uPi51ay1wYXJlbnQudWstb3Blbj5hOjphZnRlciwudWstbGlnaHQgLnVrLW5hdi1wYXJlbnQtaWNvbj4udWstcGFyZW50LnVrLW9wZW4+YTo6YWZ0ZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1wYXJlbnQtaWNvbj4udWstcGFyZW50LnVrLW9wZW4+YTo6YWZ0ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2LXBhcmVudC1pY29uPi51ay1wYXJlbnQudWstb3Blbj5hOjphZnRlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcGFyZW50LWljb24+LnVrLXBhcmVudC51ay1vcGVuPmE6OmFmdGVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXBhcmVudC1pY29uPi51ay1wYXJlbnQudWstb3Blbj5hOjphZnRlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcGFyZW50LWljb24+LnVrLXBhcmVudC51ay1vcGVuPmE6OmFmdGVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXBhcmVudC1pY29uPi51ay1wYXJlbnQudWstb3Blbj5hOjphZnRlcntiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnJTIwd2lkdGglM0QlMjIxNCUyMiUyMGhlaWdodCUzRCUyMjE0JTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTQlMjAxNCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDcG9seWxpbmUlMjBmaWxsJTNEJTIybm9uZSUyMiUyMHN0cm9rZSUzRCUyMnJnYmElMjgyNTUsJTIwMjU1LCUyMDI1NSwlMjAwLjclMjklMjIlMjBzdHJva2Utd2lkdGglM0QlMjIxLjElMjIlMjBwb2ludHMlM0QlMjIxJTIwNCUyMDclMjAxMCUyMDEzJTIwNCUyMiUyMCUyRiUzRSUwQSUzQyUyRnN2ZyUzRSIpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtZGVmYXVsdD5saT5hLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LWRlZmF1bHQ+bGk+YSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtZGVmYXVsdD5saT5hLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtZGVmYXVsdD5saT5hLC51ay1saWdodCAudWstbmF2LWRlZmF1bHQ+bGk+YSwudWstb2ZmY2FudmFzLWJhciAudWstbmF2LWRlZmF1bHQ+bGk+YSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtZGVmYXVsdD5saT5hLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0PmxpPmEsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdD5saT5hLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0PmxpPmEsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdD5saT5he2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtZGVmYXVsdD5saT5hOmZvY3VzLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtZGVmYXVsdD5saT5hOmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LWRlZmF1bHQ+bGk+YTpmb2N1cywudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1kZWZhdWx0PmxpPmE6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LWRlZmF1bHQ+bGk+YTpmb2N1cywudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtZGVmYXVsdD5saT5hOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtZGVmYXVsdD5saT5hOmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtZGVmYXVsdD5saT5hOmhvdmVyLC51ay1saWdodCAudWstbmF2LWRlZmF1bHQ+bGk+YTpmb2N1cywudWstbGlnaHQgLnVrLW5hdi1kZWZhdWx0PmxpPmE6aG92ZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1kZWZhdWx0PmxpPmE6Zm9jdXMsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1kZWZhdWx0PmxpPmE6aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2LWRlZmF1bHQ+bGk+YTpmb2N1cywudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtZGVmYXVsdD5saT5hOmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0PmxpPmE6Zm9jdXMsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQ+bGk+YTpob3ZlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0PmxpPmE6Zm9jdXMsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdD5saT5hOmhvdmVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0PmxpPmE6Zm9jdXMsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQ+bGk+YTpob3ZlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0PmxpPmE6Zm9jdXMsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdD5saT5hOmhvdmVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtZGVmYXVsdD5saS51ay1hY3RpdmU+YSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1kZWZhdWx0PmxpLnVrLWFjdGl2ZT5hLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1kZWZhdWx0PmxpLnVrLWFjdGl2ZT5hLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtZGVmYXVsdD5saS51ay1hY3RpdmU+YSwudWstbGlnaHQgLnVrLW5hdi1kZWZhdWx0PmxpLnVrLWFjdGl2ZT5hLC51ay1vZmZjYW52YXMtYmFyIC51ay1uYXYtZGVmYXVsdD5saS51ay1hY3RpdmU+YSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtZGVmYXVsdD5saS51ay1hY3RpdmU+YSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdD5saS51ay1hY3RpdmU+YSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0PmxpLnVrLWFjdGl2ZT5hLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0PmxpLnVrLWFjdGl2ZT5hLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQ+bGkudWstYWN0aXZlPmF7Y29sb3I6I2ZmZn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1oZWFkZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWhlYWRlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWhlYWRlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1oZWFkZXIsLnVrLWxpZ2h0IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWhlYWRlciwudWstb2ZmY2FudmFzLWJhciAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1oZWFkZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1oZWFkZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1oZWFkZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWhlYWRlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWhlYWRlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtaGVhZGVye2NvbG9yOiNmZmZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtZGl2aWRlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtZGl2aWRlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWRpdmlkZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtZGl2aWRlciwudWstbGlnaHQgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtZGl2aWRlciwudWstb2ZmY2FudmFzLWJhciAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1kaXZpZGVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtZGl2aWRlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWRpdmlkZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWRpdmlkZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1kaXZpZGVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1kaXZpZGVye2JvcmRlci10b3AtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGEsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGEsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGEsLnVrLWxpZ2h0IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhLC51ay1vZmZjYW52YXMtYmFyIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGEsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgYSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGEsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgYSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGF7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGE6Zm9jdXMsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGE6aG92ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhOmZvY3VzLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgYTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhOmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGE6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGE6Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGE6aG92ZXIsLnVrLWxpZ2h0IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhOmZvY3VzLC51ay1saWdodCAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgYTpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgYTpmb2N1cywudWstb2ZmY2FudmFzLWJhciAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgYTpob3ZlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhOmZvY3VzLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGE6aG92ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgYTpmb2N1cywudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhOmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgYTpmb2N1cywudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGE6aG92ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgYTpmb2N1cywudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhOmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgYTpmb2N1cywudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGE6aG92ZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5hLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlPmEsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlPmEsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5hLC51ay1saWdodCAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlPmEsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5hLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5hLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5hLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlPmEsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlPmEsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBsaS51ay1hY3RpdmU+YXtjb2xvcjojZmZmfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtcHJpbWFyeT5saT5hLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LXByaW1hcnk+bGk+YSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtcHJpbWFyeT5saT5hLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtcHJpbWFyeT5saT5hLC51ay1saWdodCAudWstbmF2LXByaW1hcnk+bGk+YSwudWstb2ZmY2FudmFzLWJhciAudWstbmF2LXByaW1hcnk+bGk+YSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtcHJpbWFyeT5saT5hLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5PmxpPmEsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeT5saT5hLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5PmxpPmEsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeT5saT5he2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtcHJpbWFyeT5saT5hOmZvY3VzLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtcHJpbWFyeT5saT5hOmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LXByaW1hcnk+bGk+YTpmb2N1cywudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1wcmltYXJ5PmxpPmE6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXByaW1hcnk+bGk+YTpmb2N1cywudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtcHJpbWFyeT5saT5hOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtcHJpbWFyeT5saT5hOmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtcHJpbWFyeT5saT5hOmhvdmVyLC51ay1saWdodCAudWstbmF2LXByaW1hcnk+bGk+YTpmb2N1cywudWstbGlnaHQgLnVrLW5hdi1wcmltYXJ5PmxpPmE6aG92ZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1wcmltYXJ5PmxpPmE6Zm9jdXMsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1wcmltYXJ5PmxpPmE6aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2LXByaW1hcnk+bGk+YTpmb2N1cywudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtcHJpbWFyeT5saT5hOmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5PmxpPmE6Zm9jdXMsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnk+bGk+YTpob3ZlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5PmxpPmE6Zm9jdXMsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeT5saT5hOmhvdmVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5PmxpPmE6Zm9jdXMsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnk+bGk+YTpob3ZlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5PmxpPmE6Zm9jdXMsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeT5saT5hOmhvdmVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtcHJpbWFyeT5saS51ay1hY3RpdmU+YSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1wcmltYXJ5PmxpLnVrLWFjdGl2ZT5hLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1wcmltYXJ5PmxpLnVrLWFjdGl2ZT5hLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtcHJpbWFyeT5saS51ay1hY3RpdmU+YSwudWstbGlnaHQgLnVrLW5hdi1wcmltYXJ5PmxpLnVrLWFjdGl2ZT5hLC51ay1vZmZjYW52YXMtYmFyIC51ay1uYXYtcHJpbWFyeT5saS51ay1hY3RpdmU+YSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtcHJpbWFyeT5saS51ay1hY3RpdmU+YSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeT5saS51ay1hY3RpdmU+YSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5PmxpLnVrLWFjdGl2ZT5hLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5PmxpLnVrLWFjdGl2ZT5hLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnk+bGkudWstYWN0aXZlPmF7Y29sb3I6I2ZmZn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1oZWFkZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LWhlYWRlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtcHJpbWFyeSAudWstbmF2LWhlYWRlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1oZWFkZXIsLnVrLWxpZ2h0IC51ay1uYXYtcHJpbWFyeSAudWstbmF2LWhlYWRlciwudWstb2ZmY2FudmFzLWJhciAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1oZWFkZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1oZWFkZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1oZWFkZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LWhlYWRlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LWhlYWRlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtaGVhZGVye2NvbG9yOiNmZmZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtZGl2aWRlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtZGl2aWRlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtcHJpbWFyeSAudWstbmF2LWRpdmlkZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtZGl2aWRlciwudWstbGlnaHQgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtZGl2aWRlciwudWstb2ZmY2FudmFzLWJhciAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1kaXZpZGVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtZGl2aWRlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LWRpdmlkZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LWRpdmlkZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1kaXZpZGVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1kaXZpZGVye2JvcmRlci10b3AtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGEsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGEsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGEsLnVrLWxpZ2h0IC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhLC51ay1vZmZjYW52YXMtYmFyIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGEsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgYSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGEsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgYSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGF7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGE6Zm9jdXMsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGE6aG92ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhOmZvY3VzLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgYTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhOmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGE6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGE6Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGE6aG92ZXIsLnVrLWxpZ2h0IC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhOmZvY3VzLC51ay1saWdodCAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgYTpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgYTpmb2N1cywudWstb2ZmY2FudmFzLWJhciAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgYTpob3ZlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhOmZvY3VzLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGE6aG92ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgYTpmb2N1cywudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhOmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgYTpmb2N1cywudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGE6aG92ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgYTpmb2N1cywudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhOmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgYTpmb2N1cywudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGE6aG92ZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5hLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlPmEsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlPmEsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5hLC51ay1saWdodCAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlPmEsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5hLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5hLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5hLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlPmEsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlPmEsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBsaS51ay1hY3RpdmU+YXtjb2xvcjojZmZmfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXZiYXItbmF2PmxpPmEsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXZiYXItbmF2PmxpPmEsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2YmFyLW5hdj5saT5hLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXZiYXItbmF2PmxpPmEsLnVrLWxpZ2h0IC51ay1uYXZiYXItbmF2PmxpPmEsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdmJhci1uYXY+bGk+YSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXZiYXItbmF2PmxpPmEsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLW5hdj5saT5hLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLW5hdj5saT5hLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci1uYXY+bGk+YSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci1uYXY+bGk+YXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2YmFyLW5hdj5saTpob3Zlcj5hLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXZiYXItbmF2PmxpPmEudWstb3BlbiwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2YmFyLW5hdj5saT5hOmZvY3VzLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2YmFyLW5hdj5saTpob3Zlcj5hLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2YmFyLW5hdj5saT5hLnVrLW9wZW4sLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXZiYXItbmF2PmxpPmE6Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2YmFyLW5hdj5saTpob3Zlcj5hLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdmJhci1uYXY+bGk+YS51ay1vcGVuLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdmJhci1uYXY+bGk+YTpmb2N1cywudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2YmFyLW5hdj5saTpob3Zlcj5hLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXZiYXItbmF2PmxpPmEudWstb3BlbiwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2YmFyLW5hdj5saT5hOmZvY3VzLC51ay1saWdodCAudWstbmF2YmFyLW5hdj5saTpob3Zlcj5hLC51ay1saWdodCAudWstbmF2YmFyLW5hdj5saT5hLnVrLW9wZW4sLnVrLWxpZ2h0IC51ay1uYXZiYXItbmF2PmxpPmE6Zm9jdXMsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdmJhci1uYXY+bGk6aG92ZXI+YSwudWstb2ZmY2FudmFzLWJhciAudWstbmF2YmFyLW5hdj5saT5hLnVrLW9wZW4sLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdmJhci1uYXY+bGk+YTpmb2N1cywudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXZiYXItbmF2PmxpOmhvdmVyPmEsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2YmFyLW5hdj5saT5hLnVrLW9wZW4sLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2YmFyLW5hdj5saT5hOmZvY3VzLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci1uYXY+bGk6aG92ZXI+YSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItbmF2PmxpPmEudWstb3BlbiwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItbmF2PmxpPmE6Zm9jdXMsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItbmF2PmxpOmhvdmVyPmEsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItbmF2PmxpPmEudWstb3BlbiwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci1uYXY+bGk+YTpmb2N1cywudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItbmF2PmxpOmhvdmVyPmEsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLW5hdj5saT5hLnVrLW9wZW4sLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLW5hdj5saT5hOmZvY3VzLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLW5hdj5saTpob3Zlcj5hLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLW5hdj5saT5hLnVrLW9wZW4sLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItbmF2PmxpPmE6Zm9jdXN7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdmJhci1uYXY+bGk+YTphY3RpdmUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXZiYXItbmF2PmxpPmE6YWN0aXZlLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdmJhci1uYXY+bGk+YTphY3RpdmUsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdmJhci1uYXY+bGk+YTphY3RpdmUsLnVrLWxpZ2h0IC51ay1uYXZiYXItbmF2PmxpPmE6YWN0aXZlLC51ay1vZmZjYW52YXMtYmFyIC51ay1uYXZiYXItbmF2PmxpPmE6YWN0aXZlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdmJhci1uYXY+bGk+YTphY3RpdmUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLW5hdj5saT5hOmFjdGl2ZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci1uYXY+bGk+YTphY3RpdmUsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLW5hdj5saT5hOmFjdGl2ZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci1uYXY+bGk+YTphY3RpdmV7Y29sb3I6I2ZmZn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2YmFyLW5hdj5saS51ay1hY3RpdmU+YSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdmJhci1uYXY+bGkudWstYWN0aXZlPmEsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2YmFyLW5hdj5saS51ay1hY3RpdmU+YSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2YmFyLW5hdj5saS51ay1hY3RpdmU+YSwudWstbGlnaHQgLnVrLW5hdmJhci1uYXY+bGkudWstYWN0aXZlPmEsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdmJhci1uYXY+bGkudWstYWN0aXZlPmEsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2YmFyLW5hdj5saS51ay1hY3RpdmU+YSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItbmF2PmxpLnVrLWFjdGl2ZT5hLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLW5hdj5saS51ay1hY3RpdmU+YSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItbmF2PmxpLnVrLWFjdGl2ZT5hLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLW5hdj5saS51ay1hY3RpdmU+YXtjb2xvcjojZmZmfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXZiYXItaXRlbSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdmJhci1pdGVtLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdmJhci1pdGVtLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXZiYXItaXRlbSwudWstbGlnaHQgLnVrLW5hdmJhci1pdGVtLC51ay1vZmZjYW52YXMtYmFyIC51ay1uYXZiYXItaXRlbSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXZiYXItaXRlbSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItaXRlbSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci1pdGVtLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci1pdGVtLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLWl0ZW17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdmJhci10b2dnbGUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXZiYXItdG9nZ2xlLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdmJhci10b2dnbGUsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdmJhci10b2dnbGUsLnVrLWxpZ2h0IC51ay1uYXZiYXItdG9nZ2xlLC51ay1vZmZjYW52YXMtYmFyIC51ay1uYXZiYXItdG9nZ2xlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdmJhci10b2dnbGUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLXRvZ2dsZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci10b2dnbGUsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLXRvZ2dsZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci10b2dnbGV7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdmJhci10b2dnbGUudWstb3BlbiwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2YmFyLXRvZ2dsZTpmb2N1cywudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2YmFyLXRvZ2dsZTpob3ZlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdmJhci10b2dnbGUudWstb3BlbiwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdmJhci10b2dnbGU6Zm9jdXMsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXZiYXItdG9nZ2xlOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdmJhci10b2dnbGUudWstb3BlbiwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXZiYXItdG9nZ2xlOmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdmJhci10b2dnbGU6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdmJhci10b2dnbGUudWstb3BlbiwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2YmFyLXRvZ2dsZTpmb2N1cywudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2YmFyLXRvZ2dsZTpob3ZlciwudWstbGlnaHQgLnVrLW5hdmJhci10b2dnbGUudWstb3BlbiwudWstbGlnaHQgLnVrLW5hdmJhci10b2dnbGU6Zm9jdXMsLnVrLWxpZ2h0IC51ay1uYXZiYXItdG9nZ2xlOmhvdmVyLC51ay1vZmZjYW52YXMtYmFyIC51ay1uYXZiYXItdG9nZ2xlLnVrLW9wZW4sLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdmJhci10b2dnbGU6Zm9jdXMsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdmJhci10b2dnbGU6aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2YmFyLXRvZ2dsZS51ay1vcGVuLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdmJhci10b2dnbGU6Zm9jdXMsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2YmFyLXRvZ2dsZTpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItdG9nZ2xlLnVrLW9wZW4sLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLXRvZ2dsZTpmb2N1cywudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItdG9nZ2xlOmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLXRvZ2dsZS51ay1vcGVuLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLXRvZ2dsZTpmb2N1cywudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci10b2dnbGU6aG92ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLXRvZ2dsZS51ay1vcGVuLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci10b2dnbGU6Zm9jdXMsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLXRvZ2dsZTpob3ZlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci10b2dnbGUudWstb3BlbiwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci10b2dnbGU6Zm9jdXMsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItdG9nZ2xlOmhvdmVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zdWJuYXY+Kj46Zmlyc3QtY2hpbGQsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zdWJuYXY+Kj46Zmlyc3QtY2hpbGQsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc3VibmF2Pio+OmZpcnN0LWNoaWxkLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zdWJuYXY+Kj46Zmlyc3QtY2hpbGQsLnVrLWxpZ2h0IC51ay1zdWJuYXY+Kj46Zmlyc3QtY2hpbGQsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXN1Ym5hdj4qPjpmaXJzdC1jaGlsZCwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zdWJuYXY+Kj46Zmlyc3QtY2hpbGQsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2Pio+OmZpcnN0LWNoaWxkLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2Pio+OmZpcnN0LWNoaWxkLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdj4qPjpmaXJzdC1jaGlsZCwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdj4qPjpmaXJzdC1jaGlsZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc3VibmF2Pio+YTpmb2N1cywudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc3VibmF2Pio+YTpob3ZlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXN1Ym5hdj4qPmE6Zm9jdXMsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zdWJuYXY+Kj5hOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXN1Ym5hdj4qPmE6Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc3VibmF2Pio+YTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc3VibmF2Pio+YTpmb2N1cywudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc3VibmF2Pio+YTpob3ZlciwudWstbGlnaHQgLnVrLXN1Ym5hdj4qPmE6Zm9jdXMsLnVrLWxpZ2h0IC51ay1zdWJuYXY+Kj5hOmhvdmVyLC51ay1vZmZjYW52YXMtYmFyIC51ay1zdWJuYXY+Kj5hOmZvY3VzLC51ay1vZmZjYW52YXMtYmFyIC51ay1zdWJuYXY+Kj5hOmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXN1Ym5hdj4qPmE6Zm9jdXMsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstc3VibmF2Pio+YTpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXY+Kj5hOmZvY3VzLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdj4qPmE6aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXY+Kj5hOmZvY3VzLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2Pio+YTpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXY+Kj5hOmZvY3VzLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdj4qPmE6aG92ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXY+Kj5hOmZvY3VzLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2Pio+YTpob3Zlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc3VibmF2Pi51ay1hY3RpdmU+YSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXN1Ym5hdj4udWstYWN0aXZlPmEsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc3VibmF2Pi51ay1hY3RpdmU+YSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc3VibmF2Pi51ay1hY3RpdmU+YSwudWstbGlnaHQgLnVrLXN1Ym5hdj4udWstYWN0aXZlPmEsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXN1Ym5hdj4udWstYWN0aXZlPmEsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstc3VibmF2Pi51ay1hY3RpdmU+YSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXY+LnVrLWFjdGl2ZT5hLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2Pi51ay1hY3RpdmU+YSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXY+LnVrLWFjdGl2ZT5hLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2Pi51ay1hY3RpdmU+YXtjb2xvcjojZmZmfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zdWJuYXYtZGl2aWRlcj46bnRoLWNoaWxkKG4rMik6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zdWJuYXYtZGl2aWRlcj46bnRoLWNoaWxkKG4rMik6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc3VibmF2LWRpdmlkZXI+Om50aC1jaGlsZChuKzIpOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zdWJuYXYtZGl2aWRlcj46bnRoLWNoaWxkKG4rMik6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsLnVrLWxpZ2h0IC51ay1zdWJuYXYtZGl2aWRlcj46bnRoLWNoaWxkKG4rMik6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXN1Ym5hdi1kaXZpZGVyPjpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zdWJuYXYtZGl2aWRlcj46bnRoLWNoaWxkKG4rMik6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2LWRpdmlkZXI+Om50aC1jaGlsZChuKzIpOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2LWRpdmlkZXI+Om50aC1jaGlsZChuKzIpOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdi1kaXZpZGVyPjpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdi1kaXZpZGVyPjpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZXtib3JkZXItbGVmdC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4yKX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc3VibmF2LXBpbGw+Kj46Zmlyc3QtY2hpbGQsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zdWJuYXYtcGlsbD4qPjpmaXJzdC1jaGlsZCwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zdWJuYXYtcGlsbD4qPjpmaXJzdC1jaGlsZCwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc3VibmF2LXBpbGw+Kj46Zmlyc3QtY2hpbGQsLnVrLWxpZ2h0IC51ay1zdWJuYXYtcGlsbD4qPjpmaXJzdC1jaGlsZCwudWstb2ZmY2FudmFzLWJhciAudWstc3VibmF2LXBpbGw+Kj46Zmlyc3QtY2hpbGQsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstc3VibmF2LXBpbGw+Kj46Zmlyc3QtY2hpbGQsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2LXBpbGw+Kj46Zmlyc3QtY2hpbGQsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYtcGlsbD4qPjpmaXJzdC1jaGlsZCwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYtcGlsbD4qPjpmaXJzdC1jaGlsZCwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdi1waWxsPio+OmZpcnN0LWNoaWxke2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXN1Ym5hdi1waWxsPio+YTpmb2N1cywudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc3VibmF2LXBpbGw+Kj5hOmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc3VibmF2LXBpbGw+Kj5hOmZvY3VzLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc3VibmF2LXBpbGw+Kj5hOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXN1Ym5hdi1waWxsPio+YTpmb2N1cywudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zdWJuYXYtcGlsbD4qPmE6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXN1Ym5hdi1waWxsPio+YTpmb2N1cywudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc3VibmF2LXBpbGw+Kj5hOmhvdmVyLC51ay1saWdodCAudWstc3VibmF2LXBpbGw+Kj5hOmZvY3VzLC51ay1saWdodCAudWstc3VibmF2LXBpbGw+Kj5hOmhvdmVyLC51ay1vZmZjYW52YXMtYmFyIC51ay1zdWJuYXYtcGlsbD4qPmE6Zm9jdXMsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXN1Ym5hdi1waWxsPio+YTpob3ZlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zdWJuYXYtcGlsbD4qPmE6Zm9jdXMsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstc3VibmF2LXBpbGw+Kj5hOmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdi1waWxsPio+YTpmb2N1cywudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYtcGlsbD4qPmE6aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYtcGlsbD4qPmE6Zm9jdXMsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYtcGlsbD4qPmE6aG92ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2LXBpbGw+Kj5hOmZvY3VzLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdi1waWxsPio+YTpob3ZlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdi1waWxsPio+YTpmb2N1cywudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdi1waWxsPio+YTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpO2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zdWJuYXYtcGlsbD4qPmE6YWN0aXZlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc3VibmF2LXBpbGw+Kj5hOmFjdGl2ZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zdWJuYXYtcGlsbD4qPmE6YWN0aXZlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zdWJuYXYtcGlsbD4qPmE6YWN0aXZlLC51ay1saWdodCAudWstc3VibmF2LXBpbGw+Kj5hOmFjdGl2ZSwudWstb2ZmY2FudmFzLWJhciAudWstc3VibmF2LXBpbGw+Kj5hOmFjdGl2ZSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zdWJuYXYtcGlsbD4qPmE6YWN0aXZlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdi1waWxsPio+YTphY3RpdmUsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYtcGlsbD4qPmE6YWN0aXZlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdi1waWxsPio+YTphY3RpdmUsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYtcGlsbD4qPmE6YWN0aXZle2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSk7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXN1Ym5hdi1waWxsPi51ay1hY3RpdmU+YSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXN1Ym5hdi1waWxsPi51ay1hY3RpdmU+YSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zdWJuYXYtcGlsbD4udWstYWN0aXZlPmEsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXN1Ym5hdi1waWxsPi51ay1hY3RpdmU+YSwudWstbGlnaHQgLnVrLXN1Ym5hdi1waWxsPi51ay1hY3RpdmU+YSwudWstb2ZmY2FudmFzLWJhciAudWstc3VibmF2LXBpbGw+LnVrLWFjdGl2ZT5hLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXN1Ym5hdi1waWxsPi51ay1hY3RpdmU+YSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYtcGlsbD4udWstYWN0aXZlPmEsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYtcGlsbD4udWstYWN0aXZlPmEsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2LXBpbGw+LnVrLWFjdGl2ZT5hLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2LXBpbGw+LnVrLWFjdGl2ZT5he2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjojNjY2fS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zdWJuYXY+LnVrLWRpc2FibGVkPmEsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zdWJuYXY+LnVrLWRpc2FibGVkPmEsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc3VibmF2Pi51ay1kaXNhYmxlZD5hLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zdWJuYXY+LnVrLWRpc2FibGVkPmEsLnVrLWxpZ2h0IC51ay1zdWJuYXY+LnVrLWRpc2FibGVkPmEsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXN1Ym5hdj4udWstZGlzYWJsZWQ+YSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zdWJuYXY+LnVrLWRpc2FibGVkPmEsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2Pi51ay1kaXNhYmxlZD5hLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2Pi51ay1kaXNhYmxlZD5hLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdj4udWstZGlzYWJsZWQ+YSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdj4udWstZGlzYWJsZWQ+YXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnJlYWRjcnVtYj4qPiosLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1icmVhZGNydW1iPio+KiwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1icmVhZGNydW1iPio+KiwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnJlYWRjcnVtYj4qPiosLnVrLWxpZ2h0IC51ay1icmVhZGNydW1iPio+KiwudWstb2ZmY2FudmFzLWJhciAudWstYnJlYWRjcnVtYj4qPiosLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYnJlYWRjcnVtYj4qPiosLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnJlYWRjcnVtYj4qPiosLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1icmVhZGNydW1iPio+KiwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1icmVhZGNydW1iPio+KiwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJyZWFkY3J1bWI+Kj4qe2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1icmVhZGNydW1iPio+OmZvY3VzLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1icmVhZGNydW1iPio+OmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnJlYWRjcnVtYj4qPjpmb2N1cywudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJyZWFkY3J1bWI+Kj46aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYnJlYWRjcnVtYj4qPjpmb2N1cywudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1icmVhZGNydW1iPio+OmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1icmVhZGNydW1iPio+OmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1icmVhZGNydW1iPio+OmhvdmVyLC51ay1saWdodCAudWstYnJlYWRjcnVtYj4qPjpmb2N1cywudWstbGlnaHQgLnVrLWJyZWFkY3J1bWI+Kj46aG92ZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJyZWFkY3J1bWI+Kj46Zm9jdXMsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJyZWFkY3J1bWI+Kj46aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYnJlYWRjcnVtYj4qPjpmb2N1cywudWstb3ZlcmxheS1wcmltYXJ5IC51ay1icmVhZGNydW1iPio+OmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJyZWFkY3J1bWI+Kj46Zm9jdXMsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnJlYWRjcnVtYj4qPjpob3ZlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJyZWFkY3J1bWI+Kj46Zm9jdXMsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1icmVhZGNydW1iPio+OmhvdmVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJyZWFkY3J1bWI+Kj46Zm9jdXMsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnJlYWRjcnVtYj4qPjpob3ZlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJyZWFkY3J1bWI+Kj46Zm9jdXMsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1icmVhZGNydW1iPio+OmhvdmVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1icmVhZGNydW1iPjpsYXN0LWNoaWxkPiosLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1icmVhZGNydW1iPjpsYXN0LWNoaWxkPiosLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYnJlYWRjcnVtYj46bGFzdC1jaGlsZD4qLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1icmVhZGNydW1iPjpsYXN0LWNoaWxkPiosLnVrLWxpZ2h0IC51ay1icmVhZGNydW1iPjpsYXN0LWNoaWxkPiosLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJyZWFkY3J1bWI+Omxhc3QtY2hpbGQ+KiwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1icmVhZGNydW1iPjpsYXN0LWNoaWxkPiosLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnJlYWRjcnVtYj46bGFzdC1jaGlsZD4qLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnJlYWRjcnVtYj46bGFzdC1jaGlsZD4qLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJyZWFkY3J1bWI+Omxhc3QtY2hpbGQ+KiwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJyZWFkY3J1bWI+Omxhc3QtY2hpbGQ+Kntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnJlYWRjcnVtYj46bnRoLWNoaWxkKG4rMik6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1icmVhZGNydW1iPjpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1icmVhZGNydW1iPjpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnJlYWRjcnVtYj46bnRoLWNoaWxkKG4rMik6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsLnVrLWxpZ2h0IC51ay1icmVhZGNydW1iPjpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwudWstb2ZmY2FudmFzLWJhciAudWstYnJlYWRjcnVtYj46bnRoLWNoaWxkKG4rMik6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYnJlYWRjcnVtYj46bnRoLWNoaWxkKG4rMik6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnJlYWRjcnVtYj46bnRoLWNoaWxkKG4rMik6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1icmVhZGNydW1iPjpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1icmVhZGNydW1iPjpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJyZWFkY3J1bWI+Om50aC1jaGlsZChuKzIpOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3Jle2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1wYWdpbmF0aW9uPio+KiwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXBhZ2luYXRpb24+Kj4qLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXBhZ2luYXRpb24+Kj4qLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1wYWdpbmF0aW9uPio+KiwudWstbGlnaHQgLnVrLXBhZ2luYXRpb24+Kj4qLC51ay1vZmZjYW52YXMtYmFyIC51ay1wYWdpbmF0aW9uPio+KiwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1wYWdpbmF0aW9uPio+KiwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1wYWdpbmF0aW9uPio+KiwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXBhZ2luYXRpb24+Kj4qLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXBhZ2luYXRpb24+Kj4qLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcGFnaW5hdGlvbj4qPip7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXBhZ2luYXRpb24+Kj46Zm9jdXMsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXBhZ2luYXRpb24+Kj46aG92ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1wYWdpbmF0aW9uPio+OmZvY3VzLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstcGFnaW5hdGlvbj4qPjpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1wYWdpbmF0aW9uPio+OmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXBhZ2luYXRpb24+Kj46aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXBhZ2luYXRpb24+Kj46Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXBhZ2luYXRpb24+Kj46aG92ZXIsLnVrLWxpZ2h0IC51ay1wYWdpbmF0aW9uPio+OmZvY3VzLC51ay1saWdodCAudWstcGFnaW5hdGlvbj4qPjpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstcGFnaW5hdGlvbj4qPjpmb2N1cywudWstb2ZmY2FudmFzLWJhciAudWstcGFnaW5hdGlvbj4qPjpob3ZlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1wYWdpbmF0aW9uPio+OmZvY3VzLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXBhZ2luYXRpb24+Kj46aG92ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcGFnaW5hdGlvbj4qPjpmb2N1cywudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1wYWdpbmF0aW9uPio+OmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcGFnaW5hdGlvbj4qPjpmb2N1cywudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXBhZ2luYXRpb24+Kj46aG92ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcGFnaW5hdGlvbj4qPjpmb2N1cywudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1wYWdpbmF0aW9uPio+OmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcGFnaW5hdGlvbj4qPjpmb2N1cywudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXBhZ2luYXRpb24+Kj46aG92ZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXBhZ2luYXRpb24+LnVrLWFjdGl2ZT4qLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstcGFnaW5hdGlvbj4udWstYWN0aXZlPiosLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstcGFnaW5hdGlvbj4udWstYWN0aXZlPiosLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXBhZ2luYXRpb24+LnVrLWFjdGl2ZT4qLC51ay1saWdodCAudWstcGFnaW5hdGlvbj4udWstYWN0aXZlPiosLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXBhZ2luYXRpb24+LnVrLWFjdGl2ZT4qLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXBhZ2luYXRpb24+LnVrLWFjdGl2ZT4qLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXBhZ2luYXRpb24+LnVrLWFjdGl2ZT4qLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcGFnaW5hdGlvbj4udWstYWN0aXZlPiosLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcGFnaW5hdGlvbj4udWstYWN0aXZlPiosLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1wYWdpbmF0aW9uPi51ay1hY3RpdmU+Kntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstcGFnaW5hdGlvbj4udWstZGlzYWJsZWQ+KiwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXBhZ2luYXRpb24+LnVrLWRpc2FibGVkPiosLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstcGFnaW5hdGlvbj4udWstZGlzYWJsZWQ+KiwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstcGFnaW5hdGlvbj4udWstZGlzYWJsZWQ+KiwudWstbGlnaHQgLnVrLXBhZ2luYXRpb24+LnVrLWRpc2FibGVkPiosLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXBhZ2luYXRpb24+LnVrLWRpc2FibGVkPiosLnVrLW92ZXJsYXktcHJpbWFyeSAudWstcGFnaW5hdGlvbj4udWstZGlzYWJsZWQ+KiwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1wYWdpbmF0aW9uPi51ay1kaXNhYmxlZD4qLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcGFnaW5hdGlvbj4udWstZGlzYWJsZWQ+KiwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1wYWdpbmF0aW9uPi51ay1kaXNhYmxlZD4qLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcGFnaW5hdGlvbj4udWstZGlzYWJsZWQ+Kntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGFiOjpiZWZvcmUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10YWI6OmJlZm9yZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10YWI6OmJlZm9yZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFiOjpiZWZvcmUsLnVrLWxpZ2h0IC51ay10YWI6OmJlZm9yZSwudWstb2ZmY2FudmFzLWJhciAudWstdGFiOjpiZWZvcmUsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGFiOjpiZWZvcmUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFiOjpiZWZvcmUsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWI6OmJlZm9yZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWI6OmJlZm9yZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYjo6YmVmb3Jle2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4yKX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGFiPio+YSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRhYj4qPmEsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdGFiPio+YSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFiPio+YSwudWstbGlnaHQgLnVrLXRhYj4qPmEsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRhYj4qPmEsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGFiPio+YSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWI+Kj5hLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFiPio+YSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWI+Kj5hLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFiPio+YXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGFiPio+YTpmb2N1cywudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGFiPio+YTpob3ZlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRhYj4qPmE6Zm9jdXMsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10YWI+Kj5hOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYj4qPmE6Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdGFiPio+YTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFiPio+YTpmb2N1cywudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFiPio+YTpob3ZlciwudWstbGlnaHQgLnVrLXRhYj4qPmE6Zm9jdXMsLnVrLWxpZ2h0IC51ay10YWI+Kj5hOmhvdmVyLC51ay1vZmZjYW52YXMtYmFyIC51ay10YWI+Kj5hOmZvY3VzLC51ay1vZmZjYW52YXMtYmFyIC51ay10YWI+Kj5hOmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRhYj4qPmE6Zm9jdXMsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGFiPio+YTpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWI+Kj5hOmZvY3VzLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYj4qPmE6aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWI+Kj5hOmZvY3VzLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFiPio+YTpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWI+Kj5hOmZvY3VzLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYj4qPmE6aG92ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWI+Kj5hOmZvY3VzLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFiPio+YTpob3Zlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGFiPi51ay1hY3RpdmU+YSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRhYj4udWstYWN0aXZlPmEsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdGFiPi51ay1hY3RpdmU+YSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFiPi51ay1hY3RpdmU+YSwudWstbGlnaHQgLnVrLXRhYj4udWstYWN0aXZlPmEsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRhYj4udWstYWN0aXZlPmEsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGFiPi51ay1hY3RpdmU+YSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWI+LnVrLWFjdGl2ZT5hLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFiPi51ay1hY3RpdmU+YSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWI+LnVrLWFjdGl2ZT5hLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFiPi51ay1hY3RpdmU+YXtjb2xvcjojZmZmO2JvcmRlci1jb2xvcjojZmZmfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10YWI+LnVrLWRpc2FibGVkPmEsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10YWI+LnVrLWRpc2FibGVkPmEsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdGFiPi51ay1kaXNhYmxlZD5hLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10YWI+LnVrLWRpc2FibGVkPmEsLnVrLWxpZ2h0IC51ay10YWI+LnVrLWRpc2FibGVkPmEsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRhYj4udWstZGlzYWJsZWQ+YSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay10YWI+LnVrLWRpc2FibGVkPmEsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFiPi51ay1kaXNhYmxlZD5hLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFiPi51ay1kaXNhYmxlZD5hLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYj4udWstZGlzYWJsZWQ+YSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYj4udWstZGlzYWJsZWQ+YXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc2xpZGVuYXYsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zbGlkZW5hdiwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zbGlkZW5hdiwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc2xpZGVuYXYsLnVrLWxpZ2h0IC51ay1zbGlkZW5hdiwudWstb2ZmY2FudmFzLWJhciAudWstc2xpZGVuYXYsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstc2xpZGVuYXYsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2xpZGVuYXYsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zbGlkZW5hdiwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zbGlkZW5hdiwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNsaWRlbmF2e2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zbGlkZW5hdjpmb2N1cywudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc2xpZGVuYXY6aG92ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zbGlkZW5hdjpmb2N1cywudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXNsaWRlbmF2OmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXNsaWRlbmF2OmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXNsaWRlbmF2OmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zbGlkZW5hdjpmb2N1cywudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc2xpZGVuYXY6aG92ZXIsLnVrLWxpZ2h0IC51ay1zbGlkZW5hdjpmb2N1cywudWstbGlnaHQgLnVrLXNsaWRlbmF2OmhvdmVyLC51ay1vZmZjYW52YXMtYmFyIC51ay1zbGlkZW5hdjpmb2N1cywudWstb2ZmY2FudmFzLWJhciAudWstc2xpZGVuYXY6aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstc2xpZGVuYXY6Zm9jdXMsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstc2xpZGVuYXY6aG92ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2xpZGVuYXY6Zm9jdXMsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2xpZGVuYXY6aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zbGlkZW5hdjpmb2N1cywudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNsaWRlbmF2OmhvdmVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNsaWRlbmF2OmZvY3VzLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNsaWRlbmF2OmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2xpZGVuYXY6Zm9jdXMsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zbGlkZW5hdjpob3Zlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC45NSl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXNsaWRlbmF2OmFjdGl2ZSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXNsaWRlbmF2OmFjdGl2ZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zbGlkZW5hdjphY3RpdmUsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXNsaWRlbmF2OmFjdGl2ZSwudWstbGlnaHQgLnVrLXNsaWRlbmF2OmFjdGl2ZSwudWstb2ZmY2FudmFzLWJhciAudWstc2xpZGVuYXY6YWN0aXZlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXNsaWRlbmF2OmFjdGl2ZSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zbGlkZW5hdjphY3RpdmUsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zbGlkZW5hdjphY3RpdmUsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2xpZGVuYXY6YWN0aXZlLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2xpZGVuYXY6YWN0aXZle2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1kb3RuYXY+Kj4qLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstZG90bmF2Pio+KiwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1kb3RuYXY+Kj4qLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1kb3RuYXY+Kj4qLC51ay1saWdodCAudWstZG90bmF2Pio+KiwudWstb2ZmY2FudmFzLWJhciAudWstZG90bmF2Pio+KiwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1kb3RuYXY+Kj4qLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRvdG5hdj4qPiosLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kb3RuYXY+Kj4qLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRvdG5hdj4qPiosLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kb3RuYXY+Kj4qe2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjkpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1kb3RuYXY+Kj46Zm9jdXMsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWRvdG5hdj4qPjpob3ZlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWRvdG5hdj4qPjpmb2N1cywudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWRvdG5hdj4qPjpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1kb3RuYXY+Kj46Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstZG90bmF2Pio+OmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1kb3RuYXY+Kj46Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWRvdG5hdj4qPjpob3ZlciwudWstbGlnaHQgLnVrLWRvdG5hdj4qPjpmb2N1cywudWstbGlnaHQgLnVrLWRvdG5hdj4qPjpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstZG90bmF2Pio+OmZvY3VzLC51ay1vZmZjYW52YXMtYmFyIC51ay1kb3RuYXY+Kj46aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstZG90bmF2Pio+OmZvY3VzLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWRvdG5hdj4qPjpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kb3RuYXY+Kj46Zm9jdXMsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZG90bmF2Pio+OmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZG90bmF2Pio+OmZvY3VzLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZG90bmF2Pio+OmhvdmVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRvdG5hdj4qPjpmb2N1cywudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kb3RuYXY+Kj46aG92ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kb3RuYXY+Kj46Zm9jdXMsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kb3RuYXY+Kj46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC45KTtib3JkZXItY29sb3I6dHJhbnNwYXJlbnR9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWRvdG5hdj4qPjphY3RpdmUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1kb3RuYXY+Kj46YWN0aXZlLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWRvdG5hdj4qPjphY3RpdmUsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWRvdG5hdj4qPjphY3RpdmUsLnVrLWxpZ2h0IC51ay1kb3RuYXY+Kj46YWN0aXZlLC51ay1vZmZjYW52YXMtYmFyIC51ay1kb3RuYXY+Kj46YWN0aXZlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWRvdG5hdj4qPjphY3RpdmUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZG90bmF2Pio+OmFjdGl2ZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRvdG5hdj4qPjphY3RpdmUsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZG90bmF2Pio+OmFjdGl2ZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRvdG5hdj4qPjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KTtib3JkZXItY29sb3I6dHJhbnNwYXJlbnR9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWRvdG5hdj4udWstYWN0aXZlPiosLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1kb3RuYXY+LnVrLWFjdGl2ZT4qLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWRvdG5hdj4udWstYWN0aXZlPiosLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWRvdG5hdj4udWstYWN0aXZlPiosLnVrLWxpZ2h0IC51ay1kb3RuYXY+LnVrLWFjdGl2ZT4qLC51ay1vZmZjYW52YXMtYmFyIC51ay1kb3RuYXY+LnVrLWFjdGl2ZT4qLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWRvdG5hdj4udWstYWN0aXZlPiosLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZG90bmF2Pi51ay1hY3RpdmU+KiwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRvdG5hdj4udWstYWN0aXZlPiosLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZG90bmF2Pi51ay1hY3RpdmU+KiwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRvdG5hdj4udWstYWN0aXZlPip7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC45KTtib3JkZXItY29sb3I6dHJhbnNwYXJlbnR9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWFjY29yZGlvbi10aXRsZSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWFjY29yZGlvbi10aXRsZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1hY2NvcmRpb24tdGl0bGUsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWFjY29yZGlvbi10aXRsZSwudWstbGlnaHQgLnVrLWFjY29yZGlvbi10aXRsZSwudWstb2ZmY2FudmFzLWJhciAudWstYWNjb3JkaW9uLXRpdGxlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWFjY29yZGlvbi10aXRsZSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1hY2NvcmRpb24tdGl0bGUsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1hY2NvcmRpb24tdGl0bGUsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYWNjb3JkaW9uLXRpdGxlLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYWNjb3JkaW9uLXRpdGxle2NvbG9yOiNmZmZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWFjY29yZGlvbi10aXRsZTpmb2N1cywudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYWNjb3JkaW9uLXRpdGxlOmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYWNjb3JkaW9uLXRpdGxlOmZvY3VzLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYWNjb3JkaW9uLXRpdGxlOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWFjY29yZGlvbi10aXRsZTpmb2N1cywudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1hY2NvcmRpb24tdGl0bGU6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWFjY29yZGlvbi10aXRsZTpmb2N1cywudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYWNjb3JkaW9uLXRpdGxlOmhvdmVyLC51ay1saWdodCAudWstYWNjb3JkaW9uLXRpdGxlOmZvY3VzLC51ay1saWdodCAudWstYWNjb3JkaW9uLXRpdGxlOmhvdmVyLC51ay1vZmZjYW52YXMtYmFyIC51ay1hY2NvcmRpb24tdGl0bGU6Zm9jdXMsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWFjY29yZGlvbi10aXRsZTpob3ZlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1hY2NvcmRpb24tdGl0bGU6Zm9jdXMsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYWNjb3JkaW9uLXRpdGxlOmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWFjY29yZGlvbi10aXRsZTpmb2N1cywudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1hY2NvcmRpb24tdGl0bGU6aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1hY2NvcmRpb24tdGl0bGU6Zm9jdXMsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1hY2NvcmRpb24tdGl0bGU6aG92ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYWNjb3JkaW9uLXRpdGxlOmZvY3VzLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWFjY29yZGlvbi10aXRsZTpob3ZlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWFjY29yZGlvbi10aXRsZTpmb2N1cywudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWFjY29yZGlvbi10aXRsZTpob3Zlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaWNvbm5hdj4qPmEsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1pY29ubmF2Pio+YSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1pY29ubmF2Pio+YSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaWNvbm5hdj4qPmEsLnVrLWxpZ2h0IC51ay1pY29ubmF2Pio+YSwudWstb2ZmY2FudmFzLWJhciAudWstaWNvbm5hdj4qPmEsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaWNvbm5hdj4qPmEsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbm5hdj4qPmEsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29ubmF2Pio+YSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29ubmF2Pio+YSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb25uYXY+Kj5he2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1pY29ubmF2Pio+YTpmb2N1cywudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaWNvbm5hdj4qPmE6aG92ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1pY29ubmF2Pio+YTpmb2N1cywudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWljb25uYXY+Kj5hOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWljb25uYXY+Kj5hOmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWljb25uYXY+Kj5hOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1pY29ubmF2Pio+YTpmb2N1cywudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaWNvbm5hdj4qPmE6aG92ZXIsLnVrLWxpZ2h0IC51ay1pY29ubmF2Pio+YTpmb2N1cywudWstbGlnaHQgLnVrLWljb25uYXY+Kj5hOmhvdmVyLC51ay1vZmZjYW52YXMtYmFyIC51ay1pY29ubmF2Pio+YTpmb2N1cywudWstb2ZmY2FudmFzLWJhciAudWstaWNvbm5hdj4qPmE6aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaWNvbm5hdj4qPmE6Zm9jdXMsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaWNvbm5hdj4qPmE6aG92ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbm5hdj4qPmE6Zm9jdXMsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbm5hdj4qPmE6aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29ubmF2Pio+YTpmb2N1cywudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb25uYXY+Kj5hOmhvdmVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb25uYXY+Kj5hOmZvY3VzLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb25uYXY+Kj5hOmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbm5hdj4qPmE6Zm9jdXMsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29ubmF2Pio+YTpob3Zlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaWNvbm5hdj4udWstYWN0aXZlPmEsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1pY29ubmF2Pi51ay1hY3RpdmU+YSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1pY29ubmF2Pi51ay1hY3RpdmU+YSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaWNvbm5hdj4udWstYWN0aXZlPmEsLnVrLWxpZ2h0IC51ay1pY29ubmF2Pi51ay1hY3RpdmU+YSwudWstb2ZmY2FudmFzLWJhciAudWstaWNvbm5hdj4udWstYWN0aXZlPmEsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaWNvbm5hdj4udWstYWN0aXZlPmEsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbm5hdj4udWstYWN0aXZlPmEsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29ubmF2Pi51ay1hY3RpdmU+YSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29ubmF2Pi51ay1hY3RpdmU+YSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb25uYXY+LnVrLWFjdGl2ZT5he2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10ZXh0LWxlYWQsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10ZXh0LWxlYWQsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdGV4dC1sZWFkLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10ZXh0LWxlYWQsLnVrLWxpZ2h0IC51ay10ZXh0LWxlYWQsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRleHQtbGVhZCwudWstb3ZlcmxheS1wcmltYXJ5IC51ay10ZXh0LWxlYWQsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dC1sZWFkLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dC1sZWFkLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtbGVhZCwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtbGVhZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGV4dC1tZXRhLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGV4dC1tZXRhLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRleHQtbWV0YSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGV4dC1tZXRhLC51ay1saWdodCAudWstdGV4dC1tZXRhLC51ay1vZmZjYW52YXMtYmFyIC51ay10ZXh0LW1ldGEsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGV4dC1tZXRhLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtbWV0YSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtbWV0YSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LW1ldGEsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LW1ldGF7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRleHQtbXV0ZWQsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10ZXh0LW11dGVkLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRleHQtbXV0ZWQsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRleHQtbXV0ZWQsLnVrLWxpZ2h0IC51ay10ZXh0LW11dGVkLC51ay1vZmZjYW52YXMtYmFyIC51ay10ZXh0LW11dGVkLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRleHQtbXV0ZWQsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dC1tdXRlZCwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtbXV0ZWQsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dC1tdXRlZCwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtbXV0ZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSkhaW1wb3J0YW50fS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10ZXh0LWVtcGhhc2lzLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGV4dC1lbXBoYXNpcywudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10ZXh0LWVtcGhhc2lzLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10ZXh0LWVtcGhhc2lzLC51ay1saWdodCAudWstdGV4dC1lbXBoYXNpcywudWstb2ZmY2FudmFzLWJhciAudWstdGV4dC1lbXBoYXNpcywudWstb3ZlcmxheS1wcmltYXJ5IC51ay10ZXh0LWVtcGhhc2lzLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtZW1waGFzaXMsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LWVtcGhhc2lzLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtZW1waGFzaXMsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LWVtcGhhc2lze2NvbG9yOiNmZmYhaW1wb3J0YW50fS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10ZXh0LXByaW1hcnksLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10ZXh0LXByaW1hcnksLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdGV4dC1wcmltYXJ5LC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10ZXh0LXByaW1hcnksLnVrLWxpZ2h0IC51ay10ZXh0LXByaW1hcnksLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRleHQtcHJpbWFyeSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay10ZXh0LXByaW1hcnksLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dC1wcmltYXJ5LC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dC1wcmltYXJ5LC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtcHJpbWFyeSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtcHJpbWFyeXtjb2xvcjojZmZmIWltcG9ydGFudH0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGV4dC1zZWNvbmRhcnksLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10ZXh0LXNlY29uZGFyeSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10ZXh0LXNlY29uZGFyeSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGV4dC1zZWNvbmRhcnksLnVrLWxpZ2h0IC51ay10ZXh0LXNlY29uZGFyeSwudWstb2ZmY2FudmFzLWJhciAudWstdGV4dC1zZWNvbmRhcnksLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGV4dC1zZWNvbmRhcnksLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dC1zZWNvbmRhcnksLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LXNlY29uZGFyeSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LXNlY29uZGFyeSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtc2Vjb25kYXJ5e2NvbG9yOiNmZmYhaW1wb3J0YW50fS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1jb2x1bW4tZGl2aWRlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWNvbHVtbi1kaXZpZGVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWNvbHVtbi1kaXZpZGVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1jb2x1bW4tZGl2aWRlciwudWstbGlnaHQgLnVrLWNvbHVtbi1kaXZpZGVyLC51ay1vZmZjYW52YXMtYmFyIC51ay1jb2x1bW4tZGl2aWRlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1jb2x1bW4tZGl2aWRlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jb2x1bW4tZGl2aWRlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNvbHVtbi1kaXZpZGVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNvbHVtbi1kaXZpZGVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY29sdW1uLWRpdmlkZXJ7Y29sdW1uLXJ1bGUtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxvZ28sLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1sb2dvLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxvZ28sLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxvZ28sLnVrLWxpZ2h0IC51ay1sb2dvLC51ay1vZmZjYW52YXMtYmFyIC51ay1sb2dvLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxvZ28sLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nbywudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxvZ28sLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nbywudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxvZ297Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxvZ286Zm9jdXMsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxvZ286aG92ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1sb2dvOmZvY3VzLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbG9nbzpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1sb2dvOmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxvZ286aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxvZ286Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxvZ286aG92ZXIsLnVrLWxpZ2h0IC51ay1sb2dvOmZvY3VzLC51ay1saWdodCAudWstbG9nbzpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstbG9nbzpmb2N1cywudWstb2ZmY2FudmFzLWJhciAudWstbG9nbzpob3ZlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1sb2dvOmZvY3VzLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxvZ286aG92ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nbzpmb2N1cywudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1sb2dvOmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nbzpmb2N1cywudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxvZ286aG92ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nbzpmb2N1cywudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1sb2dvOmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nbzpmb2N1cywudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxvZ286aG92ZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxvZ28+Om5vdCgudWstbG9nby1pbnZlcnNlKTpub3QoOm9ubHktb2YtdHlwZSksLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1sb2dvPjpub3QoLnVrLWxvZ28taW52ZXJzZSk6bm90KDpvbmx5LW9mLXR5cGUpLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxvZ28+Om5vdCgudWstbG9nby1pbnZlcnNlKTpub3QoOm9ubHktb2YtdHlwZSksLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxvZ28+Om5vdCgudWstbG9nby1pbnZlcnNlKTpub3QoOm9ubHktb2YtdHlwZSksLnVrLWxpZ2h0IC51ay1sb2dvPjpub3QoLnVrLWxvZ28taW52ZXJzZSk6bm90KDpvbmx5LW9mLXR5cGUpLC51ay1vZmZjYW52YXMtYmFyIC51ay1sb2dvPjpub3QoLnVrLWxvZ28taW52ZXJzZSk6bm90KDpvbmx5LW9mLXR5cGUpLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxvZ28+Om5vdCgudWstbG9nby1pbnZlcnNlKTpub3QoOm9ubHktb2YtdHlwZSksLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nbz46bm90KC51ay1sb2dvLWludmVyc2UpOm5vdCg6b25seS1vZi10eXBlKSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxvZ28+Om5vdCgudWstbG9nby1pbnZlcnNlKTpub3QoOm9ubHktb2YtdHlwZSksLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nbz46bm90KC51ay1sb2dvLWludmVyc2UpOm5vdCg6b25seS1vZi10eXBlKSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxvZ28+Om5vdCgudWstbG9nby1pbnZlcnNlKTpub3QoOm9ubHktb2YtdHlwZSl7ZGlzcGxheTpub25lfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1sb2dvLWludmVyc2UsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1sb2dvLWludmVyc2UsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbG9nby1pbnZlcnNlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1sb2dvLWludmVyc2UsLnVrLWxpZ2h0IC51ay1sb2dvLWludmVyc2UsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWxvZ28taW52ZXJzZSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1sb2dvLWludmVyc2UsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nby1pbnZlcnNlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nby1pbnZlcnNlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxvZ28taW52ZXJzZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxvZ28taW52ZXJzZXtkaXNwbGF5OmlubGluZX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1hY2NvcmRpb24tdGl0bGU6OmJlZm9yZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1hY2NvcmRpb24tdGl0bGU6OmJlZm9yZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmUsLnVrLWxpZ2h0IC51ay1hY2NvcmRpb24tdGl0bGU6OmJlZm9yZSwudWstb2ZmY2FudmFzLWJhciAudWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmUsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmUsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1hY2NvcmRpb24tdGl0bGU6OmJlZm9yZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1hY2NvcmRpb24tdGl0bGU6OmJlZm9yZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWFjY29yZGlvbi10aXRsZTo6YmVmb3Jle2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD1VVEYtOCwlM0NzdmclMjB3aWR0aCUzRCUyMjEzJTIyJTIwaGVpZ2h0JTNEJTIyMTMlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxMyUyMDEzJTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlMEElMjAlMjAlMjAlMjAlM0NyZWN0JTIwZmlsbCUzRCUyMnJnYmElMjgyNTUsJTIwMjU1LCUyMDI1NSwlMjAwLjclMjklMjIlMjB3aWR0aCUzRCUyMjEzJTIyJTIwaGVpZ2h0JTNEJTIyMSUyMiUyMHglM0QlMjIwJTIyJTIweSUzRCUyMjYlMjIlMjAlMkYlM0UlMEElMjAlMjAlMjAlMjAlM0NyZWN0JTIwZmlsbCUzRCUyMnJnYmElMjgyNTUsJTIwMjU1LCUyMDI1NSwlMjAwLjclMjklMjIlMjB3aWR0aCUzRCUyMjElMjIlMjBoZWlnaHQlM0QlMjIxMyUyMiUyMHglM0QlMjI2JTIyJTIweSUzRCUyMjAlMjIlMjAlMkYlM0UlMEElM0MlMkZzdmclM0UiKX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstb3Blbj4udWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1vcGVuPi51ay1hY2NvcmRpb24tdGl0bGU6OmJlZm9yZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1vcGVuPi51ay1hY2NvcmRpb24tdGl0bGU6OmJlZm9yZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstb3Blbj4udWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmUsLnVrLWxpZ2h0IC51ay1vcGVuPi51ay1hY2NvcmRpb24tdGl0bGU6OmJlZm9yZSwudWstb2ZmY2FudmFzLWJhciAudWstb3Blbj4udWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmUsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstb3Blbj4udWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstb3Blbj4udWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmUsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1vcGVuPi51ay1hY2NvcmRpb24tdGl0bGU6OmJlZm9yZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1vcGVuPi51ay1hY2NvcmRpb24tdGl0bGU6OmJlZm9yZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW9wZW4+LnVrLWFjY29yZGlvbi10aXRsZTo6YmVmb3Jle2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD1VVEYtOCwlM0NzdmclMjB3aWR0aCUzRCUyMjEzJTIyJTIwaGVpZ2h0JTNEJTIyMTMlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxMyUyMDEzJTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlMEElMjAlMjAlMjAlMjAlM0NyZWN0JTIwZmlsbCUzRCUyMnJnYmElMjgyNTUsJTIwMjU1LCUyMDI1NSwlMjAwLjclMjklMjIlMjB3aWR0aCUzRCUyMjEzJTIyJTIwaGVpZ2h0JTNEJTIyMSUyMiUyMHglM0QlMjIwJTIyJTIweSUzRCUyMjYlMjIlMjAlMkYlM0UlMEElM0MlMkZzdmclM0UiKX1AbWVkaWEgcHJpbnR7Kiw6OmFmdGVyLDo6YmVmb3Jle2JhY2tncm91bmQ6MCAwIWltcG9ydGFudDtjb2xvcjojMDAwIWltcG9ydGFudDtib3gtc2hhZG93Om5vbmUhaW1wb3J0YW50O3RleHQtc2hhZG93Om5vbmUhaW1wb3J0YW50fWEsYTp2aXNpdGVke3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9YmxvY2txdW90ZSxwcmV7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O3BhZ2UtYnJlYWstaW5zaWRlOmF2b2lkfXRoZWFke2Rpc3BsYXk6dGFibGUtaGVhZGVyLWdyb3VwfWltZyx0cntwYWdlLWJyZWFrLWluc2lkZTphdm9pZH1pbWd7bWF4LXdpZHRoOjEwMCUhaW1wb3J0YW50fUBwYWdle21hcmdpbjouNWNtfWgyLGgzLHB7b3JwaGFuczozO3dpZG93czozfWgyLGgze3BhZ2UtYnJlYWstYWZ0ZXI6YXZvaWR9fQ==",
  38. {"status":false}
  39. ],
  40. [
  41. "uikit.js_3.2.0",
  42. "LyohIFVJa2l0IDMuMi4wIHwgaHR0cDovL3d3dy5nZXR1aWtpdC5jb20gfCAoYykgMjAxNCAtIDIwMTkgWU9PdGhlbWUgfCBNSVQgTGljZW5zZSAqLwoKKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHsKICAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDoKICAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZSgndWlraXQnLCBmYWN0b3J5KSA6CiAgICAoZ2xvYmFsID0gZ2xvYmFsIHx8IHNlbGYsIGdsb2JhbC5VSWtpdCA9IGZhY3RvcnkoKSk7Cn0odGhpcywgZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7CgogICAgdmFyIG9ialByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGU7CiAgICB2YXIgaGFzT3duUHJvcGVydHkgPSBvYmpQcm90b3R5cGUuaGFzT3duUHJvcGVydHk7CgogICAgZnVuY3Rpb24gaGFzT3duKG9iaiwga2V5KSB7CiAgICAgICAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpOwogICAgfQoKICAgIHZhciBoeXBoZW5hdGVDYWNoZSA9IHt9OwogICAgdmFyIGh5cGhlbmF0ZVJlID0gLyhbYS16XGRdKShbQS1aXSkvZzsKCiAgICBmdW5jdGlvbiBoeXBoZW5hdGUoc3RyKSB7CgogICAgICAgIGlmICghKHN0ciBpbiBoeXBoZW5hdGVDYWNoZSkpIHsKICAgICAgICAgICAgaHlwaGVuYXRlQ2FjaGVbc3RyXSA9IHN0cgogICAgICAgICAgICAgICAgLnJlcGxhY2UoaHlwaGVuYXRlUmUsICckMS0kMicpCiAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBoeXBoZW5hdGVDYWNoZVtzdHJdOwogICAgfQoKICAgIHZhciBjYW1lbGl6ZVJlID0gLy0oXHcpL2c7CgogICAgZnVuY3Rpb24gY2FtZWxpemUoc3RyKSB7CiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKGNhbWVsaXplUmUsIHRvVXBwZXIpOwogICAgfQoKICAgIGZ1bmN0aW9uIHRvVXBwZXIoXywgYykgewogICAgICAgIHJldHVybiBjID8gYy50b1VwcGVyQ2FzZSgpIDogJyc7CiAgICB9CgogICAgZnVuY3Rpb24gdWNmaXJzdChzdHIpIHsKICAgICAgICByZXR1cm4gc3RyLmxlbmd0aCA/IHRvVXBwZXIobnVsbCwgc3RyLmNoYXJBdCgwKSkgKyBzdHIuc2xpY2UoMSkgOiAnJzsKICAgIH0KCiAgICB2YXIgc3RyUHJvdG90eXBlID0gU3RyaW5nLnByb3RvdHlwZTsKICAgIHZhciBzdGFydHNXaXRoRm4gPSBzdHJQcm90b3R5cGUuc3RhcnRzV2l0aCB8fCBmdW5jdGlvbiAoc2VhcmNoKSB7IHJldHVybiB0aGlzLmxhc3RJbmRleE9mKHNlYXJjaCwgMCkgPT09IDA7IH07CgogICAgZnVuY3Rpb24gc3RhcnRzV2l0aChzdHIsIHNlYXJjaCkgewogICAgICAgIHJldHVybiBzdGFydHNXaXRoRm4uY2FsbChzdHIsIHNlYXJjaCk7CiAgICB9CgogICAgdmFyIGVuZHNXaXRoRm4gPSBzdHJQcm90b3R5cGUuZW5kc1dpdGggfHwgZnVuY3Rpb24gKHNlYXJjaCkgeyByZXR1cm4gdGhpcy5zdWJzdHIoLXNlYXJjaC5sZW5ndGgpID09PSBzZWFyY2g7IH07CgogICAgZnVuY3Rpb24gZW5kc1dpdGgoc3RyLCBzZWFyY2gpIHsKICAgICAgICByZXR1cm4gZW5kc1dpdGhGbi5jYWxsKHN0ciwgc2VhcmNoKTsKICAgIH0KCiAgICB2YXIgYXJyUHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlOwoKICAgIHZhciBpbmNsdWRlc0ZuID0gZnVuY3Rpb24gKHNlYXJjaCwgaSkgeyByZXR1cm4gfnRoaXMuaW5kZXhPZihzZWFyY2gsIGkpOyB9OwogICAgdmFyIGluY2x1ZGVzU3RyID0gc3RyUHJvdG90eXBlLmluY2x1ZGVzIHx8IGluY2x1ZGVzRm47CiAgICB2YXIgaW5jbHVkZXNBcnJheSA9IGFyclByb3RvdHlwZS5pbmNsdWRlcyB8fCBpbmNsdWRlc0ZuOwoKICAgIGZ1bmN0aW9uIGluY2x1ZGVzKG9iaiwgc2VhcmNoKSB7CiAgICAgICAgcmV0dXJuIG9iaiAmJiAoaXNTdHJpbmcob2JqKSA/IGluY2x1ZGVzU3RyIDogaW5jbHVkZXNBcnJheSkuY2FsbChvYmosIHNlYXJjaCk7CiAgICB9CgogICAgdmFyIGZpbmRJbmRleEZuID0gYXJyUHJvdG90eXBlLmZpbmRJbmRleCB8fCBmdW5jdGlvbiAocHJlZGljYXRlKSB7CiAgICAgICAgdmFyIGFyZ3VtZW50cyQxID0gYXJndW1lbnRzOwoKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKHByZWRpY2F0ZS5jYWxsKGFyZ3VtZW50cyQxWzFdLCB0aGlzW2ldLCBpLCB0aGlzKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIC0xOwogICAgfTsKCiAgICBmdW5jdGlvbiBmaW5kSW5kZXgoYXJyYXksIHByZWRpY2F0ZSkgewogICAgICAgIHJldHVybiBmaW5kSW5kZXhGbi5jYWxsKGFycmF5LCBwcmVkaWNhdGUpOwogICAgfQoKICAgIHZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTsKCiAgICBmdW5jdGlvbiBpc0Z1bmN0aW9uKG9iaikgewogICAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nOwogICAgfQoKICAgIGZ1bmN0aW9uIGlzT2JqZWN0KG9iaikgewogICAgICAgIHJldHVybiBvYmogIT09IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCc7CiAgICB9CgogICAgZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvYmopIHsKICAgICAgICByZXR1cm4gaXNPYmplY3Qob2JqKSAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSA9PT0gb2JqUHJvdG90eXBlOwogICAgfQoKICAgIGZ1bmN0aW9uIGlzV2luZG93KG9iaikgewogICAgICAgIHJldHVybiBpc09iamVjdChvYmopICYmIG9iaiA9PT0gb2JqLndpbmRvdzsKICAgIH0KCiAgICBmdW5jdGlvbiBpc0RvY3VtZW50KG9iaikgewogICAgICAgIHJldHVybiBpc09iamVjdChvYmopICYmIG9iai5ub2RlVHlwZSA9PT0gOTsKICAgIH0KCiAgICBmdW5jdGlvbiBpc0pRdWVyeShvYmopIHsKICAgICAgICByZXR1cm4gaXNPYmplY3Qob2JqKSAmJiAhIW9iai5qcXVlcnk7CiAgICB9CgogICAgZnVuY3Rpb24gaXNOb2RlKG9iaikgewogICAgICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBOb2RlIHx8IGlzT2JqZWN0KG9iaikgJiYgb2JqLm5vZGVUeXBlID49IDE7CiAgICB9CgogICAgdmFyIHRvU3RyaW5nID0gb2JqUHJvdG90eXBlLnRvU3RyaW5nOwogICAgZnVuY3Rpb24gaXNOb2RlQ29sbGVjdGlvbihvYmopIHsKICAgICAgICByZXR1cm4gdG9TdHJpbmcuY2FsbChvYmopLm1hdGNoKC9eXFtvYmplY3QgKE5vZGVMaXN0fEhUTUxDb2xsZWN0aW9uKVxdJC8pOwogICAgfQoKICAgIGZ1bmN0aW9uIGlzQm9vbGVhbih2YWx1ZSkgewogICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJzsKICAgIH0KCiAgICBmdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkgewogICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnOwogICAgfQoKICAgIGZ1bmN0aW9uIGlzTnVtYmVyKHZhbHVlKSB7CiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcic7CiAgICB9CgogICAgZnVuY3Rpb24gaXNOdW1lcmljKHZhbHVlKSB7CiAgICAgICAgcmV0dXJuIGlzTnVtYmVyKHZhbHVlKSB8fCBpc1N0cmluZyh2YWx1ZSkgJiYgIWlzTmFOKHZhbHVlIC0gcGFyc2VGbG9hdCh2YWx1ZSkpOwogICAgfQoKICAgIGZ1bmN0aW9uIGlzRW1wdHkob2JqKSB7CiAgICAgICAgcmV0dXJuICEoaXNBcnJheShvYmopCiAgICAgICAgICAgID8gb2JqLmxlbmd0aAogICAgICAgICAgICA6IGlzT2JqZWN0KG9iaikKICAgICAgICAgICAgICAgID8gT2JqZWN0LmtleXMob2JqKS5sZW5ndGgKICAgICAgICAgICAgICAgIDogZmFsc2UKICAgICAgICApOwogICAgfQoKICAgIGZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbHVlKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlID09PSB2b2lkIDA7CiAgICB9CgogICAgZnVuY3Rpb24gdG9Cb29sZWFuKHZhbHVlKSB7CiAgICAgICAgcmV0dXJuIGlzQm9vbGVhbih2YWx1ZSkKICAgICAgICAgICAgPyB2YWx1ZQogICAgICAgICAgICA6IHZhbHVlID09PSAndHJ1ZScgfHwgdmFsdWUgPT09ICcxJyB8fCB2YWx1ZSA9PT0gJycKICAgICAgICAgICAgICAgID8gdHJ1ZQogICAgICAgICAgICAgICAgOiB2YWx1ZSA9PT0gJ2ZhbHNlJyB8fCB2YWx1ZSA9PT0gJzAnCiAgICAgICAgICAgICAgICAgICAgPyBmYWxzZQogICAgICAgICAgICAgICAgICAgIDogdmFsdWU7CiAgICB9CgogICAgZnVuY3Rpb24gdG9OdW1iZXIodmFsdWUpIHsKICAgICAgICB2YXIgbnVtYmVyID0gTnVtYmVyKHZhbHVlKTsKICAgICAgICByZXR1cm4gIWlzTmFOKG51bWJlcikgPyBudW1iZXIgOiBmYWxzZTsKICAgIH0KCiAgICBmdW5jdGlvbiB0b0Zsb2F0KHZhbHVlKSB7CiAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpIHx8IDA7CiAgICB9CgogICAgZnVuY3Rpb24gdG9Ob2RlKGVsZW1lbnQpIHsKICAgICAgICByZXR1cm4gaXNOb2RlKGVsZW1lbnQpIHx8IGlzV2luZG93KGVsZW1lbnQpIHx8IGlzRG9jdW1lbnQoZWxlbWVudCkKICAgICAgICAgICAgPyBlbGVtZW50CiAgICAgICAgICAgIDogaXNOb2RlQ29sbGVjdGlvbihlbGVtZW50KSB8fCBpc0pRdWVyeShlbGVtZW50KQogICAgICAgICAgICAgICAgPyBlbGVtZW50WzBdCiAgICAgICAgICAgICAgICA6IGlzQXJyYXkoZWxlbWVudCkKICAgICAgICAgICAgICAgICAgICA/IHRvTm9kZShlbGVtZW50WzBdKQogICAgICAgICAgICAgICAgICAgIDogbnVsbDsKICAgIH0KCiAgICBmdW5jdGlvbiB0b05vZGVzKGVsZW1lbnQpIHsKICAgICAgICByZXR1cm4gaXNOb2RlKGVsZW1lbnQpCiAgICAgICAgICAgID8gW2VsZW1lbnRdCiAgICAgICAgICAgIDogaXNOb2RlQ29sbGVjdGlvbihlbGVtZW50KQogICAgICAgICAgICAgICAgPyBhcnJQcm90b3R5cGUuc2xpY2UuY2FsbChlbGVtZW50KQogICAgICAgICAgICAgICAgOiBpc0FycmF5KGVsZW1lbnQpCiAgICAgICAgICAgICAgICAgICAgPyBlbGVtZW50Lm1hcCh0b05vZGUpLmZpbHRlcihCb29sZWFuKQogICAgICAgICAgICAgICAgICAgIDogaXNKUXVlcnkoZWxlbWVudCkKICAgICAgICAgICAgICAgICAgICAgICAgPyBlbGVtZW50LnRvQXJyYXkoKQogICAgICAgICAgICAgICAgICAgICAgICA6IFtdOwogICAgfQoKICAgIGZ1bmN0aW9uIHRvTGlzdCh2YWx1ZSkgewogICAgICAgIHJldHVybiBpc0FycmF5KHZhbHVlKQogICAgICAgICAgICA/IHZhbHVlCiAgICAgICAgICAgIDogaXNTdHJpbmcodmFsdWUpCiAgICAgICAgICAgICAgICA/IHZhbHVlLnNwbGl0KC8sKD8hW14oXSpcKSkvKS5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiBpc051bWVyaWModmFsdWUpCiAgICAgICAgICAgICAgICAgICAgPyB0b051bWJlcih2YWx1ZSkKICAgICAgICAgICAgICAgICAgICA6IHRvQm9vbGVhbih2YWx1ZS50cmltKCkpOyB9KQogICAgICAgICAgICAgICAgOiBbdmFsdWVdOwogICAgfQoKICAgIGZ1bmN0aW9uIHRvTXModGltZSkgewogICAgICAgIHJldHVybiAhdGltZQogICAgICAgICAgICA/IDAKICAgICAgICAgICAgOiBlbmRzV2l0aCh0aW1lLCAnbXMnKQogICAgICAgICAgICAgICAgPyB0b0Zsb2F0KHRpbWUpCiAgICAgICAgICAgICAgICA6IHRvRmxvYXQodGltZSkgKiAxMDAwOwogICAgfQoKICAgIGZ1bmN0aW9uIGlzRXF1YWwodmFsdWUsIG90aGVyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlID09PSBvdGhlcgogICAgICAgICAgICB8fCBpc09iamVjdCh2YWx1ZSkKICAgICAgICAgICAgJiYgaXNPYmplY3Qob3RoZXIpCiAgICAgICAgICAgICYmIE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT09IE9iamVjdC5rZXlzKG90aGVyKS5sZW5ndGgKICAgICAgICAgICAgJiYgZWFjaCh2YWx1ZSwgZnVuY3Rpb24gKHZhbCwga2V5KSB7IHJldHVybiB2YWwgPT09IG90aGVyW2tleV07IH0pOwogICAgfQoKICAgIGZ1bmN0aW9uIHN3YXAodmFsdWUsIGEsIGIpIHsKICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKChhICsgInwiICsgYiksICdtZycpLCBmdW5jdGlvbiAobWF0Y2gpIHsKICAgICAgICAgICAgcmV0dXJuIG1hdGNoID09PSBhID8gYiA6IGE7CiAgICAgICAgfSk7CiAgICB9CgogICAgdmFyIGFzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgewogICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOwogICAgICAgIHdoaWxlICggbGVuLS0gPiAwICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiArIDEgXTsKCiAgICAgICAgdGFyZ2V0ID0gT2JqZWN0KHRhcmdldCk7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBzb3VyY2UgPSBhcmdzW2ldOwogICAgICAgICAgICBpZiAoc291cmNlICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc093bihzb3VyY2UsIGtleSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRhcmdldDsKICAgIH07CgogICAgZnVuY3Rpb24gbGFzdChhcnJheSkgewogICAgICAgIHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxXTsKICAgIH0KCiAgICBmdW5jdGlvbiBlYWNoKG9iaiwgY2IpIHsKICAgICAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7CiAgICAgICAgICAgIGlmIChmYWxzZSA9PT0gY2Iob2JqW2tleV0sIGtleSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBmdW5jdGlvbiBzb3J0QnkoYXJyYXksIHByb3ApIHsKICAgICAgICByZXR1cm4gYXJyYXkuc29ydChmdW5jdGlvbiAocmVmLCByZWYkMSkgewogICAgICAgICAgICAgICAgdmFyIHByb3BBID0gcmVmW3Byb3BdOyBpZiAoIHByb3BBID09PSB2b2lkIDAgKSBwcm9wQSA9IDA7CiAgICAgICAgICAgICAgICB2YXIgcHJvcEIgPSByZWYkMVtwcm9wXTsgaWYgKCBwcm9wQiA9PT0gdm9pZCAwICkgcHJvcEIgPSAwOwoKICAgICAgICAgICAgICAgIHJldHVybiBwcm9wQSA+IHByb3BCCiAgICAgICAgICAgICAgICA/IDEKICAgICAgICAgICAgICAgIDogcHJvcEIgPiBwcm9wQQogICAgICAgICAgICAgICAgICAgID8gLTEKICAgICAgICAgICAgICAgICAgICA6IDA7CiAgICAgICAgfQogICAgICAgICk7CiAgICB9CgogICAgZnVuY3Rpb24gdW5pcXVlQnkoYXJyYXksIHByb3ApIHsKICAgICAgICB2YXIgc2VlbiA9IG5ldyBTZXQoKTsKICAgICAgICByZXR1cm4gYXJyYXkuZmlsdGVyKGZ1bmN0aW9uIChyZWYpIHsKICAgICAgICAgICAgdmFyIGNoZWNrID0gcmVmW3Byb3BdOwoKICAgICAgICAgICAgcmV0dXJuIHNlZW4uaGFzKGNoZWNrKQogICAgICAgICAgICA/IGZhbHNlCiAgICAgICAgICAgIDogc2Vlbi5hZGQoY2hlY2spIHx8IHRydWU7CiAgICAgICAgfSAvLyBJRSAxMSBkb2VzIG5vdCByZXR1cm4gdGhlIFNldCBvYmplY3QKICAgICAgICApOwogICAgfQoKICAgIGZ1bmN0aW9uIGNsYW1wKG51bWJlciwgbWluLCBtYXgpIHsKICAgICAgICBpZiAoIG1pbiA9PT0gdm9pZCAwICkgbWluID0gMDsKICAgICAgICBpZiAoIG1heCA9PT0gdm9pZCAwICkgbWF4ID0gMTsKCiAgICAgICAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KHRvTnVtYmVyKG51bWJlcikgfHwgMCwgbWluKSwgbWF4KTsKICAgIH0KCiAgICBmdW5jdGlvbiBub29wKCkge30KCiAgICBmdW5jdGlvbiBpbnRlcnNlY3RSZWN0KHIxLCByMikgewogICAgICAgIHJldHVybiByMS5sZWZ0IDwgcjIucmlnaHQgJiYKICAgICAgICAgICAgcjEucmlnaHQgPiByMi5sZWZ0ICYmCiAgICAgICAgICAgIHIxLnRvcCA8IHIyLmJvdHRvbSAmJgogICAgICAgICAgICByMS5ib3R0b20gPiByMi50b3A7CiAgICB9CgogICAgZnVuY3Rpb24gcG9pbnRJblJlY3QocG9pbnQsIHJlY3QpIHsKICAgICAgICByZXR1cm4gcG9pbnQueCA8PSByZWN0LnJpZ2h0ICYmCiAgICAgICAgICAgIHBvaW50LnggPj0gcmVjdC5sZWZ0ICYmCiAgICAgICAgICAgIHBvaW50LnkgPD0gcmVjdC5ib3R0b20gJiYKICAgICAgICAgICAgcG9pbnQueSA+PSByZWN0LnRvcDsKICAgIH0KCiAgICB2YXIgRGltZW5zaW9ucyA9IHsKCiAgICAgICAgcmF0aW86IGZ1bmN0aW9uKGRpbWVuc2lvbnMsIHByb3AsIHZhbHVlKSB7CiAgICAgICAgICAgIHZhciBvYmo7CgoKICAgICAgICAgICAgdmFyIGFQcm9wID0gcHJvcCA9PT0gJ3dpZHRoJyA/ICdoZWlnaHQnIDogJ3dpZHRoJzsKCiAgICAgICAgICAgIHJldHVybiAoIG9iaiA9IHt9LCBvYmpbYVByb3BdID0gZGltZW5zaW9uc1twcm9wXSA/IE1hdGgucm91bmQodmFsdWUgKiBkaW1lbnNpb25zW2FQcm9wXSAvIGRpbWVuc2lvbnNbcHJvcF0pIDogZGltZW5zaW9uc1thUHJvcF0sIG9ialtwcm9wXSA9IHZhbHVlLCBvYmogKTsKICAgICAgICB9LAoKICAgICAgICBjb250YWluOiBmdW5jdGlvbihkaW1lbnNpb25zLCBtYXhEaW1lbnNpb25zKSB7CiAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzOwoKICAgICAgICAgICAgZGltZW5zaW9ucyA9IGFzc2lnbih7fSwgZGltZW5zaW9ucyk7CgogICAgICAgICAgICBlYWNoKGRpbWVuc2lvbnMsIGZ1bmN0aW9uIChfLCBwcm9wKSB7IHJldHVybiBkaW1lbnNpb25zID0gZGltZW5zaW9uc1twcm9wXSA+IG1heERpbWVuc2lvbnNbcHJvcF0KICAgICAgICAgICAgICAgID8gdGhpcyQxLnJhdGlvKGRpbWVuc2lvbnMsIHByb3AsIG1heERpbWVuc2lvbnNbcHJvcF0pCiAgICAgICAgICAgICAgICA6IGRpbWVuc2lvbnM7IH0KICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybiBkaW1lbnNpb25zOwogICAgICAgIH0sCgogICAgICAgIGNvdmVyOiBmdW5jdGlvbihkaW1lbnNpb25zLCBtYXhEaW1lbnNpb25zKSB7CiAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzOwoKICAgICAgICAgICAgZGltZW5zaW9ucyA9IHRoaXMuY29udGFpbihkaW1lbnNpb25zLCBtYXhEaW1lbnNpb25zKTsKCiAgICAgICAgICAgIGVhY2goZGltZW5zaW9ucywgZnVuY3Rpb24gKF8sIHByb3ApIHsgcmV0dXJuIGRpbWVuc2lvbnMgPSBkaW1lbnNpb25zW3Byb3BdIDwgbWF4RGltZW5zaW9uc1twcm9wXQogICAgICAgICAgICAgICAgPyB0aGlzJDEucmF0aW8oZGltZW5zaW9ucywgcHJvcCwgbWF4RGltZW5zaW9uc1twcm9wXSkKICAgICAgICAgICAgICAgIDogZGltZW5zaW9uczsgfQogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuIGRpbWVuc2lvbnM7CiAgICAgICAgfQoKICAgIH07CgogICAgZnVuY3Rpb24gYXR0cihlbGVtZW50LCBuYW1lLCB2YWx1ZSkgewoKICAgICAgICBpZiAoaXNPYmplY3QobmFtZSkpIHsKICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG5hbWUpIHsKICAgICAgICAgICAgICAgIGF0dHIoZWxlbWVudCwga2V5LCBuYW1lW2tleV0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpIHsKICAgICAgICAgICAgZWxlbWVudCA9IHRvTm9kZShlbGVtZW50KTsKICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQgJiYgZWxlbWVudC5nZXRBdHRyaWJ1dGUobmFtZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdG9Ob2RlcyhlbGVtZW50KS5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtZW50KSB7CgogICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5jYWxsKGVsZW1lbnQsIGF0dHIoZWxlbWVudCwgbmFtZSkpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgIHJlbW92ZUF0dHIoZWxlbWVudCwgbmFtZSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQoKICAgIH0KCiAgICBmdW5jdGlvbiBoYXNBdHRyKGVsZW1lbnQsIG5hbWUpIHsKICAgICAgICByZXR1cm4gdG9Ob2RlcyhlbGVtZW50KS5zb21lKGZ1bmN0aW9uIChlbGVtZW50KSB7IHJldHVybiBlbGVtZW50Lmhhc0F0dHJpYnV0ZShuYW1lKTsgfSk7CiAgICB9CgogICAgZnVuY3Rpb24gcmVtb3ZlQXR0cihlbGVtZW50LCBuYW1lKSB7CiAgICAgICAgZWxlbWVudCA9IHRvTm9kZXMoZWxlbWVudCk7CiAgICAgICAgbmFtZS5zcGxpdCgnICcpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIGVsZW1lbnQuZm9yRWFjaChmdW5jdGlvbiAoZWxlbWVudCkgeyByZXR1cm4gZWxlbWVudC5oYXNBdHRyaWJ1dGUobmFtZSkgJiYgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7IH0KICAgICAgICAgICAgKTsgfQogICAgICAgICk7CiAgICB9CgogICAgZnVuY3Rpb24gZGF0YShlbGVtZW50LCBhdHRyaWJ1dGUpIHsKICAgICAgICBmb3IgKHZhciBpID0gMCwgYXR0cnMgPSBbYXR0cmlidXRlLCAoImRhdGEtIiArIGF0dHJpYnV0ZSldOyBpIDwgYXR0cnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGhhc0F0dHIoZWxlbWVudCwgYXR0cnNbaV0pKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gYXR0cihlbGVtZW50LCBhdHRyc1tpXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyogZ2xvYmFsIERvY3VtZW50VG91Y2ggKi8KCiAgICB2YXIgaXNJRSA9IC9tc2llfHRyaWRlbnQvaS50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KTsKICAgIHZhciBpc1J0bCA9IGF0dHIoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCAnZGlyJykgPT09ICdydGwnOwoKICAgIHZhciBoYXNUb3VjaEV2ZW50cyA9ICdvbnRvdWNoc3RhcnQnIGluIHdpbmRvdzsKICAgIHZhciBoYXNQb2ludGVyRXZlbnRzID0gd2luZG93LlBvaW50ZXJFdmVudDsKICAgIHZhciBoYXNUb3VjaCA9IGhhc1RvdWNoRXZlbnRzCiAgICAgICAgfHwgd2luZG93LkRvY3VtZW50VG91Y2ggJiYgZG9jdW1lbnQgaW5zdGFuY2VvZiBEb2N1bWVudFRvdWNoCiAgICAgICAgfHwgbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzOyAvLyBJRSA+PTExCgogICAgdmFyIHBvaW50ZXJEb3duID0gaGFzUG9pbnRlckV2ZW50cyA/ICdwb2ludGVyZG93bicgOiBoYXNUb3VjaEV2ZW50cyA/ICd0b3VjaHN0YXJ0JyA6ICdtb3VzZWRvd24nOwogICAgdmFyIHBvaW50ZXJNb3ZlID0gaGFzUG9pbnRlckV2ZW50cyA/ICdwb2ludGVybW92ZScgOiBoYXNUb3VjaEV2ZW50cyA/ICd0b3VjaG1vdmUnIDogJ21vdXNlbW92ZSc7CiAgICB2YXIgcG9pbnRlclVwID0gaGFzUG9pbnRlckV2ZW50cyA/ICdwb2ludGVydXAnIDogaGFzVG91Y2hFdmVudHMgPyAndG91Y2hlbmQnIDogJ21vdXNldXAnOwogICAgdmFyIHBvaW50ZXJFbnRlciA9IGhhc1BvaW50ZXJFdmVudHMgPyAncG9pbnRlcmVudGVyJyA6IGhhc1RvdWNoRXZlbnRzID8gJycgOiAnbW91c2VlbnRlcic7CiAgICB2YXIgcG9pbnRlckxlYXZlID0gaGFzUG9pbnRlckV2ZW50cyA/ICdwb2ludGVybGVhdmUnIDogaGFzVG91Y2hFdmVudHMgPyAnJyA6ICdtb3VzZWxlYXZlJzsKICAgIHZhciBwb2ludGVyQ2FuY2VsID0gaGFzUG9pbnRlckV2ZW50cyA/ICdwb2ludGVyY2FuY2VsJyA6ICd0b3VjaGNhbmNlbCc7CgogICAgZnVuY3Rpb24gcXVlcnkoc2VsZWN0b3IsIGNvbnRleHQpIHsKICAgICAgICByZXR1cm4gdG9Ob2RlKHNlbGVjdG9yKSB8fCBmaW5kKHNlbGVjdG9yLCBnZXRDb250ZXh0KHNlbGVjdG9yLCBjb250ZXh0KSk7CiAgICB9CgogICAgZnVuY3Rpb24gcXVlcnlBbGwoc2VsZWN0b3IsIGNvbnRleHQpIHsKICAgICAgICB2YXIgbm9kZXMgPSB0b05vZGVzKHNlbGVjdG9yKTsKICAgICAgICByZXR1cm4gbm9kZXMubGVuZ3RoICYmIG5vZGVzIHx8IGZpbmRBbGwoc2VsZWN0b3IsIGdldENvbnRleHQoc2VsZWN0b3IsIGNvbnRleHQpKTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRDb250ZXh0KHNlbGVjdG9yLCBjb250ZXh0KSB7CiAgICAgICAgaWYgKCBjb250ZXh0ID09PSB2b2lkIDAgKSBjb250ZXh0ID0gZG9jdW1lbnQ7CgogICAgICAgIHJldHVybiBpc0NvbnRleHRTZWxlY3RvcihzZWxlY3RvcikgfHwgaXNEb2N1bWVudChjb250ZXh0KQogICAgICAgICAgICA/IGNvbnRleHQKICAgICAgICAgICAgOiBjb250ZXh0Lm93bmVyRG9jdW1lbnQ7CiAgICB9CgogICAgZnVuY3Rpb24gZmluZChzZWxlY3RvciwgY29udGV4dCkgewogICAgICAgIHJldHVybiB0b05vZGUoX3F1ZXJ5KHNlbGVjdG9yLCBjb250ZXh0LCAncXVlcnlTZWxlY3RvcicpKTsKICAgIH0KCiAgICBmdW5jdGlvbiBmaW5kQWxsKHNlbGVjdG9yLCBjb250ZXh0KSB7CiAgICAgICAgcmV0dXJuIHRvTm9kZXMoX3F1ZXJ5KHNlbGVjdG9yLCBjb250ZXh0LCAncXVlcnlTZWxlY3RvckFsbCcpKTsKICAgIH0KCiAgICBmdW5jdGlvbiBfcXVlcnkoc2VsZWN0b3IsIGNvbnRleHQsIHF1ZXJ5Rm4pIHsKICAgICAgICBpZiAoIGNvbnRleHQgPT09IHZvaWQgMCApIGNvbnRleHQgPSBkb2N1bWVudDsKCgogICAgICAgIGlmICghc2VsZWN0b3IgfHwgIWlzU3RyaW5nKHNlbGVjdG9yKSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3IucmVwbGFjZShjb250ZXh0U2FuaXRpemVSZSwgJyQxIConKTsKCiAgICAgICAgdmFyIHJlbW92ZXM7CgogICAgICAgIGlmIChpc0NvbnRleHRTZWxlY3RvcihzZWxlY3RvcikpIHsKCiAgICAgICAgICAgIHJlbW92ZXMgPSBbXTsKCiAgICAgICAgICAgIHNlbGVjdG9yID0gc3BsaXRTZWxlY3RvcihzZWxlY3RvcikubWFwKGZ1bmN0aW9uIChzZWxlY3RvciwgaSkgewoKICAgICAgICAgICAgICAgIHZhciBjdHggPSBjb250ZXh0OwoKICAgICAgICAgICAgICAgIGlmIChzZWxlY3RvclswXSA9PT0gJyEnKSB7CgogICAgICAgICAgICAgICAgICAgIHZhciBzZWxlY3RvcnMgPSBzZWxlY3Rvci5zdWJzdHIoMSkudHJpbSgpLnNwbGl0KCcgJyk7CiAgICAgICAgICAgICAgICAgICAgY3R4ID0gY2xvc2VzdChjb250ZXh0LnBhcmVudE5vZGUsIHNlbGVjdG9yc1swXSk7CiAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3RvcnMuc2xpY2UoMSkuam9pbignICcpLnRyaW0oKTsKCiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKHNlbGVjdG9yWzBdID09PSAnLScpIHsKCiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdG9ycyQxID0gc2VsZWN0b3Iuc3Vic3RyKDEpLnRyaW0oKS5zcGxpdCgnICcpOwogICAgICAgICAgICAgICAgICAgIHZhciBwcmV2ID0gKGN0eCB8fCBjb250ZXh0KS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nOwogICAgICAgICAgICAgICAgICAgIGN0eCA9IG1hdGNoZXMocHJldiwgc2VsZWN0b3Iuc3Vic3RyKDEpKSA/IHByZXYgOiBudWxsOwogICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3JzJDEuc2xpY2UoMSkuam9pbignICcpOwoKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIWN0eCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICghY3R4LmlkKSB7CiAgICAgICAgICAgICAgICAgICAgY3R4LmlkID0gInVrLSIgKyAoRGF0ZS5ub3coKSkgKyBpOwogICAgICAgICAgICAgICAgICAgIHJlbW92ZXMucHVzaChmdW5jdGlvbiAoKSB7IHJldHVybiByZW1vdmVBdHRyKGN0eCwgJ2lkJyk7IH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiAoIiMiICsgKGVzY2FwZShjdHguaWQpKSArICIgIiArIHNlbGVjdG9yKTsKCiAgICAgICAgICAgIH0pLmZpbHRlcihCb29sZWFuKS5qb2luKCcsJyk7CgogICAgICAgICAgICBjb250ZXh0ID0gZG9jdW1lbnQ7CgogICAgICAgIH0KCiAgICAgICAgdHJ5IHsKCiAgICAgICAgICAgIHJldHVybiBjb250ZXh0W3F1ZXJ5Rm5dKHNlbGVjdG9yKTsKCiAgICAgICAgfSBjYXRjaCAoZSkgewoKICAgICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIH0gZmluYWxseSB7CgogICAgICAgICAgICByZW1vdmVzICYmIHJlbW92ZXMuZm9yRWFjaChmdW5jdGlvbiAocmVtb3ZlKSB7IHJldHVybiByZW1vdmUoKTsgfSk7CgogICAgICAgIH0KCiAgICB9CgogICAgdmFyIGNvbnRleHRTZWxlY3RvclJlID0gLyhefFteXFxdLClccypbIT4rfi1dLzsKICAgIHZhciBjb250ZXh0U2FuaXRpemVSZSA9IC8oWyE+K34tXSkoPz1ccytbIT4rfi1dfFxzKiQpL2c7CgogICAgZnVuY3Rpb24gaXNDb250ZXh0U2VsZWN0b3Ioc2VsZWN0b3IpIHsKICAgICAgICByZXR1cm4gaXNTdHJpbmcoc2VsZWN0b3IpICYmIHNlbGVjdG9yLm1hdGNoKGNvbnRleHRTZWxlY3RvclJlKTsKICAgIH0KCiAgICB2YXIgc2VsZWN0b3JSZSA9IC8uKj9bXlxcXSg/Oix8JCkvZzsKCiAgICBmdW5jdGlvbiBzcGxpdFNlbGVjdG9yKHNlbGVjdG9yKSB7CiAgICAgICAgcmV0dXJuIHNlbGVjdG9yLm1hdGNoKHNlbGVjdG9yUmUpLm1hcChmdW5jdGlvbiAoc2VsZWN0b3IpIHsgcmV0dXJuIHNlbGVjdG9yLnJlcGxhY2UoLywkLywgJycpLnRyaW0oKTsgfSk7CiAgICB9CgogICAgdmFyIGVsUHJvdG8gPSBFbGVtZW50LnByb3RvdHlwZTsKICAgIHZhciBtYXRjaGVzRm4gPSBlbFByb3RvLm1hdGNoZXMgfHwgZWxQcm90by53ZWJraXRNYXRjaGVzU2VsZWN0b3IgfHwgZWxQcm90by5tc01hdGNoZXNTZWxlY3RvcjsKCiAgICBmdW5jdGlvbiBtYXRjaGVzKGVsZW1lbnQsIHNlbGVjdG9yKSB7CiAgICAgICAgcmV0dXJuIHRvTm9kZXMoZWxlbWVudCkuc29tZShmdW5jdGlvbiAoZWxlbWVudCkgeyByZXR1cm4gbWF0Y2hlc0ZuLmNhbGwoZWxlbWVudCwgc2VsZWN0b3IpOyB9KTsKICAgIH0KCiAgICB2YXIgY2xvc2VzdEZuID0gZWxQcm90by5jbG9zZXN0IHx8IGZ1bmN0aW9uIChzZWxlY3RvcikgewogICAgICAgIHZhciBhbmNlc3RvciA9IHRoaXM7CgogICAgICAgIGRvIHsKCiAgICAgICAgICAgIGlmIChtYXRjaGVzKGFuY2VzdG9yLCBzZWxlY3RvcikpIHsKICAgICAgICAgICAgICAgIHJldHVybiBhbmNlc3RvcjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci5wYXJlbnROb2RlOwoKICAgICAgICB9IHdoaWxlIChhbmNlc3RvciAmJiBhbmNlc3Rvci5ub2RlVHlwZSA9PT0gMSk7CiAgICB9OwoKICAgIGZ1bmN0aW9uIGNsb3Nlc3QoZWxlbWVudCwgc2VsZWN0b3IpIHsKCiAgICAgICAgaWYgKHN0YXJ0c1dpdGgoc2VsZWN0b3IsICc+JykpIHsKICAgICAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3Rvci5zbGljZSgxKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBpc05vZGUoZWxlbWVudCkKICAgICAgICAgICAgPyBjbG9zZXN0Rm4uY2FsbChlbGVtZW50LCBzZWxlY3RvcikKICAgICAgICAgICAgOiB0b05vZGVzKGVsZW1lbnQpLm1hcChmdW5jdGlvbiAoZWxlbWVudCkgeyByZXR1cm4gY2xvc2VzdChlbGVtZW50LCBzZWxlY3Rvcik7IH0pLmZpbHRlcihCb29sZWFuKTsKICAgIH0KCiAgICBmdW5jdGlvbiBwYXJlbnRzKGVsZW1lbnQsIHNlbGVjdG9yKSB7CiAgICAgICAgdmFyIGVsZW1lbnRzID0gW107CiAgICAgICAgZWxlbWVudCA9IHRvTm9kZShlbGVtZW50KTsKCiAgICAgICAgd2hpbGUgKChlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlKSAmJiBlbGVtZW50Lm5vZGVUeXBlID09PSAxKSB7CiAgICAgICAgICAgIGlmIChtYXRjaGVzKGVsZW1lbnQsIHNlbGVjdG9yKSkgewogICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChlbGVtZW50KTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGVsZW1lbnRzOwogICAgfQoKICAgIHZhciBlc2NhcGVGbiA9IHdpbmRvdy5DU1MgJiYgQ1NTLmVzY2FwZSB8fCBmdW5jdGlvbiAoY3NzKSB7IHJldHVybiBjc3MucmVwbGFjZSgvKFteXHg3Zi1cdUZGRkZcdy1dKS9nLCBmdW5jdGlvbiAobWF0Y2gpIHsgcmV0dXJuICgiXFwiICsgbWF0Y2gpOyB9KTsgfTsKICAgIGZ1bmN0aW9uIGVzY2FwZShjc3MpIHsKICAgICAgICByZXR1cm4gaXNTdHJpbmcoY3NzKSA/IGVzY2FwZUZuLmNhbGwobnVsbCwgY3NzKSA6ICcnOwogICAgfQoKICAgIHZhciB2b2lkRWxlbWVudHMgPSB7CiAgICAgICAgYXJlYTogdHJ1ZSwKICAgICAgICBiYXNlOiB0cnVlLAogICAgICAgIGJyOiB0cnVlLAogICAgICAgIGNvbDogdHJ1ZSwKICAgICAgICBlbWJlZDogdHJ1ZSwKICAgICAgICBocjogdHJ1ZSwKICAgICAgICBpbWc6IHRydWUsCiAgICAgICAgaW5wdXQ6IHRydWUsCiAgICAgICAga2V5Z2VuOiB0cnVlLAogICAgICAgIGxpbms6IHRydWUsCiAgICAgICAgbWVudWl0ZW06IHRydWUsCiAgICAgICAgbWV0YTogdHJ1ZSwKICAgICAgICBwYXJhbTogdHJ1ZSwKICAgICAgICBzb3VyY2U6IHRydWUsCiAgICAgICAgdHJhY2s6IHRydWUsCiAgICAgICAgd2JyOiB0cnVlCiAgICB9OwogICAgZnVuY3Rpb24gaXNWb2lkRWxlbWVudChlbGVtZW50KSB7CiAgICAgICAgcmV0dXJuIHRvTm9kZXMoZWxlbWVudCkuc29tZShmdW5jdGlvbiAoZWxlbWVudCkgeyByZXR1cm4gdm9pZEVsZW1lbnRzW2VsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpXTsgfSk7CiAgICB9CgogICAgZnVuY3Rpb24gaXNWaXNpYmxlKGVsZW1lbnQpIHsKICAgICAgICByZXR1cm4gdG9Ob2RlcyhlbGVtZW50KS5zb21lKGZ1bmN0aW9uIChlbGVtZW50KSB7IHJldHVybiBlbGVtZW50Lm9mZnNldFdpZHRoIHx8IGVsZW1lbnQub2Zmc2V0SGVpZ2h0IHx8IGVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGg7IH0pOwogICAgfQoKICAgIHZhciBzZWxJbnB1dCA9ICdpbnB1dCxzZWxlY3QsdGV4dGFyZWEsYnV0dG9uJzsKICAgIGZ1bmN0aW9uIGlzSW5wdXQoZWxlbWVudCkgewogICAgICAgIHJldHVybiB0b05vZGVzKGVsZW1lbnQpLnNvbWUoZnVuY3Rpb24gKGVsZW1lbnQpIHsgcmV0dXJuIG1hdGNoZXMoZWxlbWVudCwgc2VsSW5wdXQpOyB9KTsKICAgIH0KCiAgICBmdW5jdGlvbiBmaWx0ZXIoZWxlbWVudCwgc2VsZWN0b3IpIHsKICAgICAgICByZXR1cm4gdG9Ob2RlcyhlbGVtZW50KS5maWx0ZXIoZnVuY3Rpb24gKGVsZW1lbnQpIHsgcmV0dXJuIG1hdGNoZXMoZWxlbWVudCwgc2VsZWN0b3IpOyB9KTsKICAgIH0KCiAgICBmdW5jdGlvbiB3aXRoaW4oZWxlbWVudCwgc2VsZWN0b3IpIHsKICAgICAgICByZXR1cm4gIWlzU3RyaW5nKHNlbGVjdG9yKQogICAgICAgICAgICA/IGVsZW1lbnQgPT09IHNlbGVjdG9yIHx8IChpc0RvY3VtZW50KHNlbGVjdG9yKQogICAgICAgICAgICAgICAgPyBzZWxlY3Rvci5kb2N1bWVudEVsZW1lbnQKICAgICAgICAgICAgICAgIDogdG9Ob2RlKHNlbGVjdG9yKSkuY29udGFpbnModG9Ob2RlKGVsZW1lbnQpKSAvLyBJRSAxMSBkb2N1bWVudCBkb2VzIG5vdCBpbXBsZW1lbnQgY29udGFpbnMKICAgICAgICAgICAgOiBtYXRjaGVzKGVsZW1lbnQsIHNlbGVjdG9yKSB8fCBjbG9zZXN0KGVsZW1lbnQsIHNlbGVjdG9yKTsKICAgIH0KCiAgICBmdW5jdGlvbiBvbigpIHsKICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOwogICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07CgoKICAgICAgICB2YXIgcmVmID0gZ2V0QXJncyhhcmdzKTsKICAgICAgICB2YXIgdGFyZ2V0cyA9IHJlZlswXTsKICAgICAgICB2YXIgdHlwZSA9IHJlZlsxXTsKICAgICAgICB2YXIgc2VsZWN0b3IgPSByZWZbMl07CiAgICAgICAgdmFyIGxpc3RlbmVyID0gcmVmWzNdOwogICAgICAgIHZhciB1c2VDYXB0dXJlID0gcmVmWzRdOwoKICAgICAgICB0YXJnZXRzID0gdG9FdmVudFRhcmdldHModGFyZ2V0cyk7CgogICAgICAgIGlmIChsaXN0ZW5lci5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgIGxpc3RlbmVyID0gZGV0YWlsKGxpc3RlbmVyKTsKICAgICAgICB9CgogICAgICAgIGlmIChzZWxlY3RvcikgewogICAgICAgICAgICBsaXN0ZW5lciA9IGRlbGVnYXRlKHRhcmdldHMsIHNlbGVjdG9yLCBsaXN0ZW5lcik7CiAgICAgICAgfQoKICAgICAgICBpZiAodXNlQ2FwdHVyZSAmJiB1c2VDYXB0dXJlLnNlbGYpIHsKICAgICAgICAgICAgbGlzdGVuZXIgPSBzZWxmRmlsdGVyKGxpc3RlbmVyKTsKICAgICAgICB9CgogICAgICAgIHVzZUNhcHR1cmUgPSB1c2VDYXB0dXJlRmlsdGVyKHVzZUNhcHR1cmUpOwoKICAgICAgICB0eXBlLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAodHlwZSkgeyByZXR1cm4gdGFyZ2V0cy5mb3JFYWNoKGZ1bmN0aW9uICh0YXJnZXQpIHsgcmV0dXJuIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsgfQogICAgICAgICAgICApOyB9CiAgICAgICAgKTsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gb2ZmKHRhcmdldHMsIHR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsgfTsKICAgIH0KCiAgICBmdW5jdGlvbiBvZmYodGFyZ2V0cywgdHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpIHsKICAgICAgICBpZiAoIHVzZUNhcHR1cmUgPT09IHZvaWQgMCApIHVzZUNhcHR1cmUgPSBmYWxzZTsKCiAgICAgICAgdXNlQ2FwdHVyZSA9IHVzZUNhcHR1cmVGaWx0ZXIodXNlQ2FwdHVyZSk7CiAgICAgICAgdGFyZ2V0cyA9IHRvRXZlbnRUYXJnZXRzKHRhcmdldHMpOwogICAgICAgIHR5cGUuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7IHJldHVybiB0YXJnZXRzLmZvckVhY2goZnVuY3Rpb24gKHRhcmdldCkgeyByZXR1cm4gdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpOyB9CiAgICAgICAgICAgICk7IH0KICAgICAgICApOwogICAgfQoKICAgIGZ1bmN0aW9uIG9uY2UoKSB7CiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDsKICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdOwoKCiAgICAgICAgdmFyIHJlZiA9IGdldEFyZ3MoYXJncyk7CiAgICAgICAgdmFyIGVsZW1lbnQgPSByZWZbMF07CiAgICAgICAgdmFyIHR5cGUgPSByZWZbMV07CiAgICAgICAgdmFyIHNlbGVjdG9yID0gcmVmWzJdOwogICAgICAgIHZhciBsaXN0ZW5lciA9IHJlZlszXTsKICAgICAgICB2YXIgdXNlQ2FwdHVyZSA9IHJlZls0XTsKICAgICAgICB2YXIgY29uZGl0aW9uID0gcmVmWzVdOwogICAgICAgIHZhciBvZmYgPSBvbihlbGVtZW50LCB0eXBlLCBzZWxlY3RvciwgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgdmFyIHJlc3VsdCA9ICFjb25kaXRpb24gfHwgY29uZGl0aW9uKGUpOwogICAgICAgICAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgICAgICAgICBvZmYoKTsKICAgICAgICAgICAgICAgIGxpc3RlbmVyKGUsIHJlc3VsdCk7CiAgICAgICAgICAgIH0KICAgICAgICB9LCB1c2VDYXB0dXJlKTsKCiAgICAgICAgcmV0dXJuIG9mZjsKICAgIH0KCiAgICBmdW5jdGlvbiB0cmlnZ2VyKHRhcmdldHMsIGV2ZW50LCBkZXRhaWwpIHsKICAgICAgICByZXR1cm4gdG9FdmVudFRhcmdldHModGFyZ2V0cykucmVkdWNlKGZ1bmN0aW9uIChub3RDYW5jZWxlZCwgdGFyZ2V0KSB7IHJldHVybiBub3RDYW5jZWxlZCAmJiB0YXJnZXQuZGlzcGF0Y2hFdmVudChjcmVhdGVFdmVudChldmVudCwgdHJ1ZSwgdHJ1ZSwgZGV0YWlsKSk7IH0KICAgICAgICAgICAgLCB0cnVlKTsKICAgIH0KCiAgICBmdW5jdGlvbiBjcmVhdGVFdmVudChlLCBidWJibGVzLCBjYW5jZWxhYmxlLCBkZXRhaWwpIHsKICAgICAgICBpZiAoIGJ1YmJsZXMgPT09IHZvaWQgMCApIGJ1YmJsZXMgPSB0cnVlOwogICAgICAgIGlmICggY2FuY2VsYWJsZSA9PT0gdm9pZCAwICkgY2FuY2VsYWJsZSA9IGZhbHNlOwoKICAgICAgICBpZiAoaXNTdHJpbmcoZSkpIHsKICAgICAgICAgICAgdmFyIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0N1c3RvbUV2ZW50Jyk7IC8vIElFIDExCiAgICAgICAgICAgIGV2ZW50LmluaXRDdXN0b21FdmVudChlLCBidWJibGVzLCBjYW5jZWxhYmxlLCBkZXRhaWwpOwogICAgICAgICAgICBlID0gZXZlbnQ7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRBcmdzKGFyZ3MpIHsKICAgICAgICBpZiAoaXNGdW5jdGlvbihhcmdzWzJdKSkgewogICAgICAgICAgICBhcmdzLnNwbGljZSgyLCAwLCBmYWxzZSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhcmdzOwogICAgfQoKICAgIGZ1bmN0aW9uIGRlbGVnYXRlKGRlbGVnYXRlcywgc2VsZWN0b3IsIGxpc3RlbmVyKSB7CiAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7CgogICAgICAgIHJldHVybiBmdW5jdGlvbiAoZSkgewoKICAgICAgICAgICAgZGVsZWdhdGVzLmZvckVhY2goZnVuY3Rpb24gKGRlbGVnYXRlKSB7CgogICAgICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSBzZWxlY3RvclswXSA9PT0gJz4nCiAgICAgICAgICAgICAgICAgICAgPyBmaW5kQWxsKHNlbGVjdG9yLCBkZWxlZ2F0ZSkucmV2ZXJzZSgpLmZpbHRlcihmdW5jdGlvbiAoZWxlbWVudCkgeyByZXR1cm4gd2l0aGluKGUudGFyZ2V0LCBlbGVtZW50KTsgfSlbMF0KICAgICAgICAgICAgICAgICAgICA6IGNsb3Nlc3QoZS50YXJnZXQsIHNlbGVjdG9yKTsKCiAgICAgICAgICAgICAgICBpZiAoY3VycmVudCkgewogICAgICAgICAgICAgICAgICAgIGUuZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKICAgICAgICAgICAgICAgICAgICBlLmN1cnJlbnQgPSBjdXJyZW50OwoKICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lci5jYWxsKHRoaXMkMSwgZSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9KTsKCiAgICAgICAgfTsKICAgIH0KCiAgICBmdW5jdGlvbiBkZXRhaWwobGlzdGVuZXIpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGlzQXJyYXkoZS5kZXRhaWwpID8gbGlzdGVuZXIuYXBwbHkodm9pZCAwLCBbZV0uY29uY2F0KGUuZGV0YWlsKSkgOiBsaXN0ZW5lcihlKTsgfTsKICAgIH0KCiAgICBmdW5jdGlvbiBzZWxmRmlsdGVyKGxpc3RlbmVyKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIGlmIChlLnRhcmdldCA9PT0gZS5jdXJyZW50VGFyZ2V0IHx8IGUudGFyZ2V0ID09PSBlLmN1cnJlbnQpIHsKICAgICAgICAgICAgICAgIHJldHVybiBsaXN0ZW5lci5jYWxsKG51bGwsIGUpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgIH0KCiAgICBmdW5jdGlvbiB1c2VDYXB0dXJlRmlsdGVyKG9wdGlvbnMpIHsKICAgICAgICByZXR1cm4gb3B0aW9ucyAmJiBpc0lFICYmICFpc0Jvb2xlYW4ob3B0aW9ucykKICAgICAgICAgICAgPyAhIW9wdGlvbnMuY2FwdHVyZQogICAgICAgICAgICA6IG9wdGlvbnM7CiAgICB9CgogICAgZnVuY3Rpb24gaXNFdmVudFRhcmdldCh0YXJnZXQpIHsKICAgICAgICByZXR1cm4gdGFyZ2V0ICYmICdhZGRFdmVudExpc3RlbmVyJyBpbiB0YXJnZXQ7CiAgICB9CgogICAgZnVuY3Rpb24gdG9FdmVudFRhcmdldCh0YXJnZXQpIHsKICAgICAgICByZXR1cm4gaXNFdmVudFRhcmdldCh0YXJnZXQpID8gdGFyZ2V0IDogdG9Ob2RlKHRhcmdldCk7CiAgICB9CgogICAgZnVuY3Rpb24gdG9FdmVudFRhcmdldHModGFyZ2V0KSB7CiAgICAgICAgcmV0dXJuIGlzQXJyYXkodGFyZ2V0KQogICAgICAgICAgICAgICAgPyB0YXJnZXQubWFwKHRvRXZlbnRUYXJnZXQpLmZpbHRlcihCb29sZWFuKQogICAgICAgICAgICAgICAgOiBpc1N0cmluZyh0YXJnZXQpCiAgICAgICAgICAgICAgICAgICAgPyBmaW5kQWxsKHRhcmdldCkKICAgICAgICAgICAgICAgICAgICA6IGlzRXZlbnRUYXJnZXQodGFyZ2V0KQogICAgICAgICAgICAgICAgICAgICAgICA/IFt0YXJnZXRdCiAgICAgICAgICAgICAgICAgICAgICAgIDogdG9Ob2Rlcyh0YXJnZXQpOwogICAgfQoKICAgIGZ1bmN0aW9uIGlzVG91Y2goZSkgewogICAgICAgIHJldHVybiBlLnBvaW50ZXJUeXBlID09PSAndG91Y2gnIHx8ICEhZS50b3VjaGVzOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldEV2ZW50UG9zKGUsIHByb3ApIHsKICAgICAgICBpZiAoIHByb3AgPT09IHZvaWQgMCApIHByb3AgPSAnY2xpZW50JzsKCiAgICAgICAgdmFyIHRvdWNoZXMgPSBlLnRvdWNoZXM7CiAgICAgICAgdmFyIGNoYW5nZWRUb3VjaGVzID0gZS5jaGFuZ2VkVG91Y2hlczsKICAgICAgICB2YXIgcmVmID0gdG91Y2hlcyAmJiB0b3VjaGVzWzBdIHx8IGNoYW5nZWRUb3VjaGVzICYmIGNoYW5nZWRUb3VjaGVzWzBdIHx8IGU7CiAgICAgICAgdmFyIHggPSByZWZbKHByb3AgKyAiWCIpXTsKICAgICAgICB2YXIgeSA9IHJlZlsocHJvcCArICJZIildOwoKICAgICAgICByZXR1cm4ge3g6IHgsIHk6IHl9OwogICAgfQoKICAgIC8qIGdsb2JhbCBzZXRJbW1lZGlhdGUgKi8KCiAgICB2YXIgUHJvbWlzZSA9ICdQcm9taXNlJyBpbiB3aW5kb3cgPyB3aW5kb3cuUHJvbWlzZSA6IFByb21pc2VGbjsKCiAgICB2YXIgRGVmZXJyZWQgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgdGhpcyQxID0gdGhpczsKCiAgICAgICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICAgICAgICB0aGlzJDEucmVqZWN0ID0gcmVqZWN0OwogICAgICAgICAgICB0aGlzJDEucmVzb2x2ZSA9IHJlc29sdmU7CiAgICAgICAgfSk7CiAgICB9OwoKICAgIC8qKgogICAgICogUHJvbWlzZXMvQSsgcG9seWZpbGwgdjEuMS40IChodHRwczovL2dpdGh1Yi5jb20vYnJhbXN0ZWluL3Byb21pcykKICAgICAqLwoKICAgIHZhciBSRVNPTFZFRCA9IDA7CiAgICB2YXIgUkVKRUNURUQgPSAxOwogICAgdmFyIFBFTkRJTkcgPSAyOwoKICAgIHZhciBhc3luYyA9ICdzZXRJbW1lZGlhdGUnIGluIHdpbmRvdyA/IHNldEltbWVkaWF0ZSA6IHNldFRpbWVvdXQ7CgogICAgZnVuY3Rpb24gUHJvbWlzZUZuKGV4ZWN1dG9yKSB7CgogICAgICAgIHRoaXMuc3RhdGUgPSBQRU5ESU5HOwogICAgICAgIHRoaXMudmFsdWUgPSB1bmRlZmluZWQ7CiAgICAgICAgdGhpcy5kZWZlcnJlZCA9IFtdOwoKICAgICAgICB2YXIgcHJvbWlzZSA9IHRoaXM7CgogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGV4ZWN1dG9yKAogICAgICAgICAgICAgICAgZnVuY3Rpb24gKHgpIHsKICAgICAgICAgICAgICAgICAgICBwcm9taXNlLnJlc29sdmUoeCk7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgZnVuY3Rpb24gKHIpIHsKICAgICAgICAgICAgICAgICAgICBwcm9taXNlLnJlamVjdChyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIHByb21pc2UucmVqZWN0KGUpOwogICAgICAgIH0KICAgIH0KCiAgICBQcm9taXNlRm4ucmVqZWN0ID0gZnVuY3Rpb24gKHIpIHsKICAgICAgICByZXR1cm4gbmV3IFByb21pc2VGbihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgICAgICAgIHJlamVjdChyKTsKICAgICAgICB9KTsKICAgIH07CgogICAgUHJvbWlzZUZuLnJlc29sdmUgPSBmdW5jdGlvbiAoeCkgewogICAgICAgIHJldHVybiBuZXcgUHJvbWlzZUZuKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgICAgICAgcmVzb2x2ZSh4KTsKICAgICAgICB9KTsKICAgIH07CgogICAgUHJvbWlzZUZuLmFsbCA9IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSkgewogICAgICAgIHJldHVybiBuZXcgUHJvbWlzZUZuKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtdOwogICAgICAgICAgICB2YXIgY291bnQgPSAwOwoKICAgICAgICAgICAgaWYgKGl0ZXJhYmxlLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlcihpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHgpIHsKICAgICAgICAgICAgICAgICAgICByZXN1bHRbaV0gPSB4OwogICAgICAgICAgICAgICAgICAgIGNvdW50ICs9IDE7CgogICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCA9PT0gaXRlcmFibGUubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZXJhYmxlLmxlbmd0aDsgaSArPSAxKSB7CiAgICAgICAgICAgICAgICBQcm9taXNlRm4ucmVzb2x2ZShpdGVyYWJsZVtpXSkudGhlbihyZXNvbHZlcihpKSwgcmVqZWN0KTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfTsKCiAgICBQcm9taXNlRm4ucmFjZSA9IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHsKICAgICAgICByZXR1cm4gbmV3IFByb21pc2VGbihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlcmFibGUubGVuZ3RoOyBpICs9IDEpIHsKICAgICAgICAgICAgICAgIFByb21pc2VGbi5yZXNvbHZlKGl0ZXJhYmxlW2ldKS50aGVuKHJlc29sdmUsIHJlamVjdCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH07CgogICAgdmFyIHAgPSBQcm9taXNlRm4ucHJvdG90eXBlOwoKICAgIHAucmVzb2x2ZSA9IGZ1bmN0aW9uIHJlc29sdmUoeCkgewogICAgICAgIHZhciBwcm9taXNlID0gdGhpczsKCiAgICAgICAgaWYgKHByb21pc2Uuc3RhdGUgPT09IFBFTkRJTkcpIHsKICAgICAgICAgICAgaWYgKHggPT09IHByb21pc2UpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb21pc2Ugc2V0dGxlZCB3aXRoIGl0c2VsZi4nKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIGNhbGxlZCA9IGZhbHNlOwoKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIHZhciB0aGVuID0geCAmJiB4LnRoZW47CgogICAgICAgICAgICAgICAgaWYgKHggIT09IG51bGwgJiYgaXNPYmplY3QoeCkgJiYgaXNGdW5jdGlvbih0aGVuKSkgewogICAgICAgICAgICAgICAgICAgIHRoZW4uY2FsbCgKICAgICAgICAgICAgICAgICAgICAgICAgeCwKICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKHgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FsbGVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5yZXNvbHZlKHgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKHIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FsbGVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5yZWplY3Qocik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgIGlmICghY2FsbGVkKSB7CiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5yZWplY3QoZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHByb21pc2Uuc3RhdGUgPSBSRVNPTFZFRDsKICAgICAgICAgICAgcHJvbWlzZS52YWx1ZSA9IHg7CiAgICAgICAgICAgIHByb21pc2Uubm90aWZ5KCk7CiAgICAgICAgfQogICAgfTsKCiAgICBwLnJlamVjdCA9IGZ1bmN0aW9uIHJlamVjdChyZWFzb24pIHsKICAgICAgICB2YXIgcHJvbWlzZSA9IHRoaXM7CgogICAgICAgIGlmIChwcm9taXNlLnN0YXRlID09PSBQRU5ESU5HKSB7CiAgICAgICAgICAgIGlmIChyZWFzb24gPT09IHByb21pc2UpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb21pc2Ugc2V0dGxlZCB3aXRoIGl0c2VsZi4nKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcHJvbWlzZS5zdGF0ZSA9IFJFSkVDVEVEOwogICAgICAgICAgICBwcm9taXNlLnZhbHVlID0gcmVhc29uOwogICAgICAgICAgICBwcm9taXNlLm5vdGlmeSgpOwogICAgICAgIH0KICAgIH07CgogICAgcC5ub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkoKSB7CiAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7CgogICAgICAgIGFzeW5jKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgaWYgKHRoaXMkMS5zdGF0ZSAhPT0gUEVORElORykgewogICAgICAgICAgICAgICAgd2hpbGUgKHRoaXMkMS5kZWZlcnJlZC5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgcmVmID0gdGhpcyQxLmRlZmVycmVkLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgdmFyIG9uUmVzb2x2ZWQgPSByZWZbMF07CiAgICAgICAgICAgICAgICAgICAgdmFyIG9uUmVqZWN0ZWQgPSByZWZbMV07CiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc29sdmUgPSByZWZbMl07CiAgICAgICAgICAgICAgICAgICAgdmFyIHJlamVjdCA9IHJlZlszXTsKCiAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMkMS5zdGF0ZSA9PT0gUkVTT0xWRUQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKG9uUmVzb2x2ZWQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShvblJlc29sdmVkLmNhbGwodW5kZWZpbmVkLCB0aGlzJDEudmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzJDEudmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMkMS5zdGF0ZSA9PT0gUkVKRUNURUQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKG9uUmVqZWN0ZWQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShvblJlamVjdGVkLmNhbGwodW5kZWZpbmVkLCB0aGlzJDEudmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHRoaXMkMS52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH07CgogICAgcC50aGVuID0gZnVuY3Rpb24gdGhlbihvblJlc29sdmVkLCBvblJlamVjdGVkKSB7CiAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7CgogICAgICAgIHJldHVybiBuZXcgUHJvbWlzZUZuKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgICAgICAgdGhpcyQxLmRlZmVycmVkLnB1c2goW29uUmVzb2x2ZWQsIG9uUmVqZWN0ZWQsIHJlc29sdmUsIHJlamVjdF0pOwogICAgICAgICAgICB0aGlzJDEubm90aWZ5KCk7CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHAuY2F0Y2ggPSBmdW5jdGlvbiAob25SZWplY3RlZCkgewogICAgICAgIHJldHVybiB0aGlzLnRoZW4odW5kZWZpbmVkLCBvblJlamVjdGVkKTsKICAgIH07CgogICAgZnVuY3Rpb24gYWpheCh1cmwsIG9wdGlvbnMpIHsKICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewoKICAgICAgICAgICAgdmFyIGVudiA9IGFzc2lnbih7CiAgICAgICAgICAgICAgICBkYXRhOiBudWxsLAogICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJywKICAgICAgICAgICAgICAgIGhlYWRlcnM6IHt9LAogICAgICAgICAgICAgICAgeGhyOiBuZXcgWE1MSHR0cFJlcXVlc3QoKSwKICAgICAgICAgICAgICAgIGJlZm9yZVNlbmQ6IG5vb3AsCiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6ICcnCiAgICAgICAgICAgIH0sIG9wdGlvbnMpOwoKICAgICAgICAgICAgZW52LmJlZm9yZVNlbmQoZW52KTsKCiAgICAgICAgICAgIHZhciB4aHIgPSBlbnYueGhyOwoKICAgICAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBlbnYpIHsKICAgICAgICAgICAgICAgIGlmIChwcm9wIGluIHhocikgewogICAgICAgICAgICAgICAgICAgIHRyeSB7CgogICAgICAgICAgICAgICAgICAgICAgICB4aHJbcHJvcF0gPSBlbnZbcHJvcF07CgogICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHhoci5vcGVuKGVudi5tZXRob2QudG9VcHBlckNhc2UoKSwgdXJsKTsKCiAgICAgICAgICAgIGZvciAodmFyIGhlYWRlciBpbiBlbnYuaGVhZGVycykgewogICAgICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoaGVhZGVyLCBlbnYuaGVhZGVyc1toZWFkZXJdKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgb24oeGhyLCAnbG9hZCcsIGZ1bmN0aW9uICgpIHsKCiAgICAgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMCB8fCB4aHIuc3RhdHVzID49IDIwMCAmJiB4aHIuc3RhdHVzIDwgMzAwIHx8IHhoci5zdGF0dXMgPT09IDMwNCkgewogICAgICAgICAgICAgICAgICAgIHJlc29sdmUoeGhyKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGFzc2lnbihFcnJvcih4aHIuc3RhdHVzVGV4dCksIHsKICAgICAgICAgICAgICAgICAgICAgICAgeGhyOiB4aHIsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogeGhyLnN0YXR1cwogICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgb24oeGhyLCAnZXJyb3InLCBmdW5jdGlvbiAoKSB7IHJldHVybiByZWplY3QoYXNzaWduKEVycm9yKCdOZXR3b3JrIEVycm9yJyksIHt4aHI6IHhocn0pKTsgfSk7CiAgICAgICAgICAgIG9uKHhociwgJ3RpbWVvdXQnLCBmdW5jdGlvbiAoKSB7IHJldHVybiByZWplY3QoYXNzaWduKEVycm9yKCdOZXR3b3JrIFRpbWVvdXQnKSwge3hocjogeGhyfSkpOyB9KTsKCiAgICAgICAgICAgIHhoci5zZW5kKGVudi5kYXRhKTsKICAgICAgICB9KTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRJbWFnZShzcmMsIHNyY3NldCwgc2l6ZXMpIHsKCiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgICAgICAgdmFyIGltZyA9IG5ldyBJbWFnZSgpOwoKICAgICAgICAgICAgaW1nLm9uZXJyb3IgPSByZWplY3Q7CiAgICAgICAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZXNvbHZlKGltZyk7IH07CgogICAgICAgICAgICBzaXplcyAmJiAoaW1nLnNpemVzID0gc2l6ZXMpOwogICAgICAgICAgICBzcmNzZXQgJiYgKGltZy5zcmNzZXQgPSBzcmNzZXQpOwogICAgICAgICAgICBpbWcuc3JjID0gc3JjOwogICAgICAgIH0pOwoKICAgIH0KCiAgICBmdW5jdGlvbiByZWFkeShmbikgewoKICAgICAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSAhPT0gJ2xvYWRpbmcnKSB7CiAgICAgICAgICAgIGZuKCk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHZhciB1bmJpbmQgPSBvbihkb2N1bWVudCwgJ0RPTUNvbnRlbnRMb2FkZWQnLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHVuYmluZCgpOwogICAgICAgICAgICBmbigpOwogICAgICAgIH0pOwogICAgfQoKICAgIGZ1bmN0aW9uIGluZGV4KGVsZW1lbnQsIHJlZikgewogICAgICAgIHJldHVybiByZWYKICAgICAgICAgICAgPyB0b05vZGVzKGVsZW1lbnQpLmluZGV4T2YodG9Ob2RlKHJlZikpCiAgICAgICAgICAgIDogdG9Ob2RlcygoZWxlbWVudCA9IHRvTm9kZShlbGVtZW50KSkgJiYgZWxlbWVudC5wYXJlbnROb2RlLmNoaWxkcmVuKS5pbmRleE9mKGVsZW1lbnQpOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldEluZGV4KGksIGVsZW1lbnRzLCBjdXJyZW50LCBmaW5pdGUpIHsKICAgICAgICBpZiAoIGN1cnJlbnQgPT09IHZvaWQgMCApIGN1cnJlbnQgPSAwOwogICAgICAgIGlmICggZmluaXRlID09PSB2b2lkIDAgKSBmaW5pdGUgPSBmYWxzZTsKCgogICAgICAgIGVsZW1lbnRzID0gdG9Ob2RlcyhlbGVtZW50cyk7CgogICAgICAgIHZhciBsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7CgogICAgICAgIGkgPSBpc051bWVyaWMoaSkKICAgICAgICAgICAgPyB0b051bWJlcihpKQogICAgICAgICAgICA6IGkgPT09ICduZXh0JwogICAgICAgICAgICAgICAgPyBjdXJyZW50ICsgMQogICAgICAgICAgICAgICAgOiBpID09PSAncHJldmlvdXMnCiAgICAgICAgICAgICAgICAgICAgPyBjdXJyZW50IC0gMQogICAgICAgICAgICAgICAgICAgIDogaW5kZXgoZWxlbWVudHMsIGkpOwoKICAgICAgICBpZiAoZmluaXRlKSB7CiAgICAgICAgICAgIHJldHVybiBjbGFtcChpLCAwLCBsZW5ndGggLSAxKTsKICAgICAgICB9CgogICAgICAgIGkgJT0gbGVuZ3RoOwoKICAgICAgICByZXR1cm4gaSA8IDAgPyBpICsgbGVuZ3RoIDogaTsKICAgIH0KCiAgICBmdW5jdGlvbiBlbXB0eShlbGVtZW50KSB7CiAgICAgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSAnJzsKICAgICAgICByZXR1cm4gZWxlbWVudDsKICAgIH0KCiAgICBmdW5jdGlvbiBodG1sKHBhcmVudCwgaHRtbCkgewogICAgICAgIHBhcmVudCA9ICQocGFyZW50KTsKICAgICAgICByZXR1cm4gaXNVbmRlZmluZWQoaHRtbCkKICAgICAgICAgICAgPyBwYXJlbnQuaW5uZXJIVE1MCiAgICAgICAgICAgIDogYXBwZW5kKHBhcmVudC5oYXNDaGlsZE5vZGVzKCkgPyBlbXB0eShwYXJlbnQpIDogcGFyZW50LCBodG1sKTsKICAgIH0KCiAgICBmdW5jdGlvbiBwcmVwZW5kKHBhcmVudCwgZWxlbWVudCkgewoKICAgICAgICBwYXJlbnQgPSAkKHBhcmVudCk7CgogICAgICAgIGlmICghcGFyZW50Lmhhc0NoaWxkTm9kZXMoKSkgewogICAgICAgICAgICByZXR1cm4gYXBwZW5kKHBhcmVudCwgZWxlbWVudCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIGluc2VydE5vZGVzKGVsZW1lbnQsIGZ1bmN0aW9uIChlbGVtZW50KSB7IHJldHVybiBwYXJlbnQuaW5zZXJ0QmVmb3JlKGVsZW1lbnQsIHBhcmVudC5maXJzdENoaWxkKTsgfSk7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGFwcGVuZChwYXJlbnQsIGVsZW1lbnQpIHsKICAgICAgICBwYXJlbnQgPSAkKHBhcmVudCk7CiAgICAgICAgcmV0dXJuIGluc2VydE5vZGVzKGVsZW1lbnQsIGZ1bmN0aW9uIChlbGVtZW50KSB7IHJldHVybiBwYXJlbnQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7IH0pOwogICAgfQoKICAgIGZ1bmN0aW9uIGJlZm9yZShyZWYsIGVsZW1lbnQpIHsKICAgICAgICByZWYgPSAkKHJlZik7CiAgICAgICAgcmV0dXJuIGluc2VydE5vZGVzKGVsZW1lbnQsIGZ1bmN0aW9uIChlbGVtZW50KSB7IHJldHVybiByZWYucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZWxlbWVudCwgcmVmKTsgfSk7CiAgICB9CgogICAgZnVuY3Rpb24gYWZ0ZXIocmVmLCBlbGVtZW50KSB7CiAgICAgICAgcmVmID0gJChyZWYpOwogICAgICAgIHJldHVybiBpbnNlcnROb2RlcyhlbGVtZW50LCBmdW5jdGlvbiAoZWxlbWVudCkgeyByZXR1cm4gcmVmLm5leHRTaWJsaW5nCiAgICAgICAgICAgID8gYmVmb3JlKHJlZi5uZXh0U2libGluZywgZWxlbWVudCkKICAgICAgICAgICAgOiBhcHBlbmQocmVmLnBhcmVudE5vZGUsIGVsZW1lbnQpOyB9CiAgICAgICAgKTsKICAgIH0KCiAgICBmdW5jdGlvbiBpbnNlcnROb2RlcyhlbGVtZW50LCBmbikgewogICAgICAgIGVsZW1lbnQgPSBpc1N0cmluZyhlbGVtZW50KSA/IGZyYWdtZW50KGVsZW1lbnQpIDogZWxlbWVudDsKICAgICAgICByZXR1cm4gZWxlbWVudAogICAgICAgICAgICA/ICdsZW5ndGgnIGluIGVsZW1lbnQKICAgICAgICAgICAgICAgID8gdG9Ob2RlcyhlbGVtZW50KS5tYXAoZm4pCiAgICAgICAgICAgICAgICA6IGZuKGVsZW1lbnQpCiAgICAgICAgICAgIDogbnVsbDsKICAgIH0KCiAgICBmdW5jdGlvbiByZW1vdmUoZWxlbWVudCkgewogICAgICAgIHRvTm9kZXMoZWxlbWVudCkubWFwKGZ1bmN0aW9uIChlbGVtZW50KSB7IHJldHVybiBlbGVtZW50LnBhcmVudE5vZGUgJiYgZWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsZW1lbnQpOyB9KTsKICAgIH0KCiAgICBmdW5jdGlvbiB3cmFwQWxsKGVsZW1lbnQsIHN0cnVjdHVyZSkgewoKICAgICAgICBzdHJ1Y3R1cmUgPSB0b05vZGUoYmVmb3JlKGVsZW1lbnQsIHN0cnVjdHVyZSkpOwoKICAgICAgICB3aGlsZSAoc3RydWN0dXJlLmZpcnN0Q2hpbGQpIHsKICAgICAgICAgICAgc3RydWN0dXJlID0gc3RydWN0dXJlLmZpcnN0Q2hpbGQ7CiAgICAgICAgfQoKICAgICAgICBhcHBlbmQoc3RydWN0dXJlLCBlbGVtZW50KTsKCiAgICAgICAgcmV0dXJuIHN0cnVjdHVyZTsKICAgIH0KCiAgICBmdW5jdGlvbiB3cmFwSW5uZXIoZWxlbWVudCwgc3RydWN0dXJlKSB7CiAgICAgICAgcmV0dXJuIHRvTm9kZXModG9Ob2RlcyhlbGVtZW50KS5tYXAoZnVuY3Rpb24gKGVsZW1lbnQpIHsgcmV0dXJuIGVsZW1lbnQuaGFzQ2hpbGROb2RlcyA/IHdyYXBBbGwodG9Ob2RlcyhlbGVtZW50LmNoaWxkTm9kZXMpLCBzdHJ1Y3R1cmUpIDogYXBwZW5kKGVsZW1lbnQsIHN0cnVjdHVyZSk7IH0KICAgICAgICApKTsKICAgIH0KCiAgICBmdW5jdGlvbiB1bndyYXAoZWxlbWVudCkgewogICAgICAgIHRvTm9kZXMoZWxlbWVudCkKICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoZWxlbWVudCkgeyByZXR1cm4gZWxlbWVudC5wYXJlbnROb2RlOyB9KQogICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIHNlbGYpIHsgcmV0dXJuIHNlbGYuaW5kZXhPZih2YWx1ZSkgPT09IGluZGV4OyB9KQogICAgICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiAocGFyZW50KSB7CiAgICAgICAgICAgICAgICBiZWZvcmUocGFyZW50LCBwYXJlbnQuY2hpbGROb2Rlcyk7CiAgICAgICAgICAgICAgICByZW1vdmUocGFyZW50KTsKICAgICAgICAgICAgfSk7CiAgICB9CgogICAgdmFyIGZyYWdtZW50UmUgPSAvXlxzKjwoXHcrfCEpW14+XSo+LzsKICAgIHZhciBzaW5nbGVUYWdSZSA9IC9ePChcdyspXHMqXC8/Pig/OjxcL1wxPik/JC87CgogICAgZnVuY3Rpb24gZnJhZ21lbnQoaHRtbCkgewoKICAgICAgICB2YXIgbWF0Y2hlcyA9IHNpbmdsZVRhZ1JlLmV4ZWMoaHRtbCk7CiAgICAgICAgaWYgKG1hdGNoZXMpIHsKICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobWF0Y2hlc1sxXSk7CiAgICAgICAgfQoKICAgICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgaWYgKGZyYWdtZW50UmUudGVzdChodG1sKSkgewogICAgICAgICAgICBjb250YWluZXIuaW5zZXJ0QWRqYWNlbnRIVE1MKCdiZWZvcmVlbmQnLCBodG1sLnRyaW0oKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29udGFpbmVyLnRleHRDb250ZW50ID0gaHRtbDsKICAgICAgICB9CgogICAgICAgIHJldHVybiBjb250YWluZXIuY2hpbGROb2Rlcy5sZW5ndGggPiAxID8gdG9Ob2Rlcyhjb250YWluZXIuY2hpbGROb2RlcykgOiBjb250YWluZXIuZmlyc3RDaGlsZDsKCiAgICB9CgogICAgZnVuY3Rpb24gYXBwbHkobm9kZSwgZm4pIHsKCiAgICAgICAgaWYgKCFub2RlIHx8IG5vZGUubm9kZVR5cGUgIT09IDEpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgZm4obm9kZSk7CiAgICAgICAgbm9kZSA9IG5vZGUuZmlyc3RFbGVtZW50Q2hpbGQ7CiAgICAgICAgd2hpbGUgKG5vZGUpIHsKICAgICAgICAgICAgYXBwbHkobm9kZSwgZm4pOwogICAgICAgICAgICBub2RlID0gbm9kZS5uZXh0RWxlbWVudFNpYmxpbmc7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uICQoc2VsZWN0b3IsIGNvbnRleHQpIHsKICAgICAgICByZXR1cm4gIWlzU3RyaW5nKHNlbGVjdG9yKQogICAgICAgICAgICA/IHRvTm9kZShzZWxlY3RvcikKICAgICAgICAgICAgOiBpc0h0bWwoc2VsZWN0b3IpCiAgICAgICAgICAgICAgICA/IHRvTm9kZShmcmFnbWVudChzZWxlY3RvcikpCiAgICAgICAgICAgICAgICA6IGZpbmQoc2VsZWN0b3IsIGNvbnRleHQpOwogICAgfQoKICAgIGZ1bmN0aW9uICQkKHNlbGVjdG9yLCBjb250ZXh0KSB7CiAgICAgICAgcmV0dXJuICFpc1N0cmluZyhzZWxlY3RvcikKICAgICAgICAgICAgPyB0b05vZGVzKHNlbGVjdG9yKQogICAgICAgICAgICA6IGlzSHRtbChzZWxlY3RvcikKICAgICAgICAgICAgICAgID8gdG9Ob2RlcyhmcmFnbWVudChzZWxlY3RvcikpCiAgICAgICAgICAgICAgICA6IGZpbmRBbGwoc2VsZWN0b3IsIGNvbnRleHQpOwogICAgfQoKICAgIGZ1bmN0aW9uIGlzSHRtbChzdHIpIHsKICAgICAgICByZXR1cm4gc3RyWzBdID09PSAnPCcgfHwgc3RyLm1hdGNoKC9eXHMqPC8pOwogICAgfQoKICAgIGZ1bmN0aW9uIGFkZENsYXNzKGVsZW1lbnQpIHsKICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsKICAgICAgICB3aGlsZSAoIGxlbi0tID4gMCApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyAxIF07CgogICAgICAgIGFwcGx5JDEoZWxlbWVudCwgYXJncywgJ2FkZCcpOwogICAgfQoKICAgIGZ1bmN0aW9uIHJlbW92ZUNsYXNzKGVsZW1lbnQpIHsKICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsKICAgICAgICB3aGlsZSAoIGxlbi0tID4gMCApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyAxIF07CgogICAgICAgIGFwcGx5JDEoZWxlbWVudCwgYXJncywgJ3JlbW92ZScpOwogICAgfQoKICAgIGZ1bmN0aW9uIHJlbW92ZUNsYXNzZXMoZWxlbWVudCwgY2xzKSB7CiAgICAgICAgYXR0cihlbGVtZW50LCAnY2xhc3MnLCBmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuICh2YWx1ZSB8fCAnJykucmVwbGFjZShuZXcgUmVnRXhwKCgiXFxiIiArIGNscyArICJcXGIiKSwgJ2cnKSwgJycpOyB9KTsKICAgIH0KCiAgICBmdW5jdGlvbiByZXBsYWNlQ2xhc3MoZWxlbWVudCkgewogICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOwogICAgICAgIHdoaWxlICggbGVuLS0gPiAwICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiArIDEgXTsKCiAgICAgICAgYXJnc1swXSAmJiByZW1vdmVDbGFzcyhlbGVtZW50LCBhcmdzWzBdKTsKICAgICAgICBhcmdzWzFdICYmIGFkZENsYXNzKGVsZW1lbnQsIGFyZ3NbMV0pOwogICAgfQoKICAgIGZ1bmN0aW9uIGhhc0NsYXNzKGVsZW1lbnQsIGNscykgewogICAgICAgIHJldHVybiBjbHMgJiYgdG9Ob2RlcyhlbGVtZW50KS5zb21lKGZ1bmN0aW9uIChlbGVtZW50KSB7IHJldHVybiBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhjbHMuc3BsaXQoJyAnKVswXSk7IH0pOwogICAgfQoKICAgIGZ1bmN0aW9uIHRvZ2dsZUNsYXNzKGVsZW1lbnQpIHsKICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsKICAgICAgICB3aGlsZSAoIGxlbi0tID4gMCApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyAxIF07CgoKICAgICAgICBpZiAoIWFyZ3MubGVuZ3RoKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGFyZ3MgPSBnZXRBcmdzJDEoYXJncyk7CgogICAgICAgIHZhciBmb3JjZSA9ICFpc1N0cmluZyhsYXN0KGFyZ3MpKSA/IGFyZ3MucG9wKCkgOiBbXTsgLy8gaW4gaU9TIDkuMyBmb3JjZSA9PT0gdW5kZWZpbmVkIGV2YWx1YXRlcyB0byBmYWxzZQoKICAgICAgICBhcmdzID0gYXJncy5maWx0ZXIoQm9vbGVhbik7CgogICAgICAgIHRvTm9kZXMoZWxlbWVudCkuZm9yRWFjaChmdW5jdGlvbiAocmVmKSB7CiAgICAgICAgICAgIHZhciBjbGFzc0xpc3QgPSByZWYuY2xhc3NMaXN0OwoKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBzdXBwb3J0cy5Gb3JjZQogICAgICAgICAgICAgICAgICAgID8gY2xhc3NMaXN0LnRvZ2dsZS5hcHBseShjbGFzc0xpc3QsIFthcmdzW2ldXS5jb25jYXQoZm9yY2UpKQogICAgICAgICAgICAgICAgICAgIDogKGNsYXNzTGlzdFsoIWlzVW5kZWZpbmVkKGZvcmNlKSA/IGZvcmNlIDogIWNsYXNzTGlzdC5jb250YWlucyhhcmdzW2ldKSkgPyAnYWRkJyA6ICdyZW1vdmUnXShhcmdzW2ldKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICB9CgogICAgZnVuY3Rpb24gYXBwbHkkMShlbGVtZW50LCBhcmdzLCBmbikgewogICAgICAgIGFyZ3MgPSBnZXRBcmdzJDEoYXJncykuZmlsdGVyKEJvb2xlYW4pOwoKICAgICAgICBhcmdzLmxlbmd0aCAmJiB0b05vZGVzKGVsZW1lbnQpLmZvckVhY2goZnVuY3Rpb24gKHJlZikgewogICAgICAgICAgICB2YXIgY2xhc3NMaXN0ID0gcmVmLmNsYXNzTGlzdDsKCiAgICAgICAgICAgIHN1cHBvcnRzLk11bHRpcGxlCiAgICAgICAgICAgICAgICA/IGNsYXNzTGlzdFtmbl0uYXBwbHkoY2xhc3NMaXN0LCBhcmdzKQogICAgICAgICAgICAgICAgOiBhcmdzLmZvckVhY2goZnVuY3Rpb24gKGNscykgeyByZXR1cm4gY2xhc3NMaXN0W2ZuXShjbHMpOyB9KTsKICAgICAgICB9KTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRBcmdzJDEoYXJncykgewogICAgICAgIHJldHVybiBhcmdzLnJlZHVjZShmdW5jdGlvbiAoYXJncywgYXJnKSB7IHJldHVybiBhcmdzLmNvbmNhdC5jYWxsKGFyZ3MsIGlzU3RyaW5nKGFyZykgJiYgaW5jbHVkZXMoYXJnLCAnICcpID8gYXJnLnRyaW0oKS5zcGxpdCgnICcpIDogYXJnKTsgfQogICAgICAgICAgICAsIFtdKTsKICAgIH0KCiAgICAvLyBJRSAxMQogICAgdmFyIHN1cHBvcnRzID0gewoKICAgICAgICBnZXQgTXVsdGlwbGUoKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldCgnX211bHRpcGxlJyk7CiAgICAgICAgfSwKCiAgICAgICAgZ2V0IEZvcmNlKCkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoJ19mb3JjZScpOwogICAgICAgIH0sCgogICAgICAgIGdldDogZnVuY3Rpb24oa2V5KSB7CgogICAgICAgICAgICBpZiAoIWhhc093bih0aGlzLCBrZXkpKSB7CiAgICAgICAgICAgICAgICB2YXIgcmVmID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnXycpOwogICAgICAgICAgICAgICAgdmFyIGNsYXNzTGlzdCA9IHJlZi5jbGFzc0xpc3Q7CiAgICAgICAgICAgICAgICBjbGFzc0xpc3QuYWRkKCdhJywgJ2InKTsKICAgICAgICAgICAgICAgIGNsYXNzTGlzdC50b2dnbGUoJ2MnLCBmYWxzZSk7CiAgICAgICAgICAgICAgICB0aGlzLl9tdWx0aXBsZSA9IGNsYXNzTGlzdC5jb250YWlucygnYicpOwogICAgICAgICAgICAgICAgdGhpcy5fZm9yY2UgPSAhY2xhc3NMaXN0LmNvbnRhaW5zKCdjJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiB0aGlzW2tleV07CiAgICAgICAgfQoKICAgIH07CgogICAgdmFyIGNzc051bWJlciA9IHsKICAgICAgICAnYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCc6IHRydWUsCiAgICAgICAgJ2NvbHVtbi1jb3VudCc6IHRydWUsCiAgICAgICAgJ2ZpbGwtb3BhY2l0eSc6IHRydWUsCiAgICAgICAgJ2ZsZXgtZ3Jvdyc6IHRydWUsCiAgICAgICAgJ2ZsZXgtc2hyaW5rJzogdHJ1ZSwKICAgICAgICAnZm9udC13ZWlnaHQnOiB0cnVlLAogICAgICAgICdsaW5lLWhlaWdodCc6IHRydWUsCiAgICAgICAgJ29wYWNpdHknOiB0cnVlLAogICAgICAgICdvcmRlcic6IHRydWUsCiAgICAgICAgJ29ycGhhbnMnOiB0cnVlLAogICAgICAgICdzdHJva2UtZGFzaGFycmF5JzogdHJ1ZSwKICAgICAgICAnc3Ryb2tlLWRhc2hvZmZzZXQnOiB0cnVlLAogICAgICAgICd3aWRvd3MnOiB0cnVlLAogICAgICAgICd6LWluZGV4JzogdHJ1ZSwKICAgICAgICAnem9vbSc6IHRydWUKICAgIH07CgogICAgZnVuY3Rpb24gY3NzKGVsZW1lbnQsIHByb3BlcnR5LCB2YWx1ZSkgewoKICAgICAgICByZXR1cm4gdG9Ob2RlcyhlbGVtZW50KS5tYXAoZnVuY3Rpb24gKGVsZW1lbnQpIHsKCiAgICAgICAgICAgIGlmIChpc1N0cmluZyhwcm9wZXJ0eSkpIHsKCiAgICAgICAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BOYW1lKHByb3BlcnR5KTsKCiAgICAgICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQodmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldFN0eWxlKGVsZW1lbnQsIHByb3BlcnR5KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXZhbHVlICYmICFpc051bWJlcih2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KHByb3BlcnR5KTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zdHlsZVtwcm9wZXJ0eV0gPSBpc051bWVyaWModmFsdWUpICYmICFjc3NOdW1iZXJbcHJvcGVydHldID8gKHZhbHVlICsgInB4IikgOiB2YWx1ZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheShwcm9wZXJ0eSkpIHsKCiAgICAgICAgICAgICAgICB2YXIgc3R5bGVzID0gZ2V0U3R5bGVzKGVsZW1lbnQpOwoKICAgICAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eS5yZWR1Y2UoZnVuY3Rpb24gKHByb3BzLCBwcm9wZXJ0eSkgewogICAgICAgICAgICAgICAgICAgIHByb3BzW3Byb3BlcnR5XSA9IHN0eWxlc1twcm9wTmFtZShwcm9wZXJ0eSldOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9wczsKICAgICAgICAgICAgICAgIH0sIHt9KTsKCiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QocHJvcGVydHkpKSB7CiAgICAgICAgICAgICAgICBlYWNoKHByb3BlcnR5LCBmdW5jdGlvbiAodmFsdWUsIHByb3BlcnR5KSB7IHJldHVybiBjc3MoZWxlbWVudCwgcHJvcGVydHksIHZhbHVlKTsgfSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBlbGVtZW50OwoKICAgICAgICB9KVswXTsKCiAgICB9CgogICAgZnVuY3Rpb24gZ2V0U3R5bGVzKGVsZW1lbnQsIHBzZXVkb0VsdCkgewogICAgICAgIGVsZW1lbnQgPSB0b05vZGUoZWxlbWVudCk7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQsIHBzZXVkb0VsdCk7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0U3R5bGUoZWxlbWVudCwgcHJvcGVydHksIHBzZXVkb0VsdCkgewogICAgICAgIHJldHVybiBnZXRTdHlsZXMoZWxlbWVudCwgcHNldWRvRWx0KVtwcm9wZXJ0eV07CiAgICB9CgogICAgdmFyIHZhcnMgPSB7fTsKCiAgICBmdW5jdGlvbiBnZXRDc3NWYXIobmFtZSkgewoKICAgICAgICB2YXIgZG9jRWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7CgogICAgICAgIGlmICghaXNJRSkgewogICAgICAgICAgICByZXR1cm4gZ2V0U3R5bGVzKGRvY0VsKS5nZXRQcm9wZXJ0eVZhbHVlKCgiLS11ay0iICsgbmFtZSkpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCEobmFtZSBpbiB2YXJzKSkgewoKICAgICAgICAgICAgLyogdXNhZ2UgaW4gY3NzOiAudWstbmFtZTpiZWZvcmUgeyBjb250ZW50OiJ4eXoiIH0gKi8KCiAgICAgICAgICAgIHZhciBlbGVtZW50ID0gYXBwZW5kKGRvY0VsLCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CgogICAgICAgICAgICBhZGRDbGFzcyhlbGVtZW50LCAoInVrLSIgKyBuYW1lKSk7CgogICAgICAgICAgICB2YXJzW25hbWVdID0gZ2V0U3R5bGUoZWxlbWVudCwgJ2NvbnRlbnQnLCAnOmJlZm9yZScpLnJlcGxhY2UoL15bIiddKC4qKVsiJ10kLywgJyQxJyk7CgogICAgICAgICAgICByZW1vdmUoZWxlbWVudCk7CgogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHZhcnNbbmFtZV07CgogICAgfQoKICAgIHZhciBjc3NQcm9wcyA9IHt9OwoKICAgIGZ1bmN0aW9uIHByb3BOYW1lKG5hbWUpIHsKCiAgICAgICAgdmFyIHJldCA9IGNzc1Byb3BzW25hbWVdOwogICAgICAgIGlmICghcmV0KSB7CiAgICAgICAgICAgIHJldCA9IGNzc1Byb3BzW25hbWVdID0gdmVuZG9yUHJvcE5hbWUobmFtZSkgfHwgbmFtZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJldDsKICAgIH0KCiAgICB2YXIgY3NzUHJlZml4ZXMgPSBbJ3dlYmtpdCcsICdtb3onLCAnbXMnXTsKCiAgICBmdW5jdGlvbiB2ZW5kb3JQcm9wTmFtZShuYW1lKSB7CgogICAgICAgIG5hbWUgPSBoeXBoZW5hdGUobmFtZSk7CgogICAgICAgIHZhciByZWYgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7CiAgICAgICAgdmFyIHN0eWxlID0gcmVmLnN0eWxlOwoKICAgICAgICBpZiAobmFtZSBpbiBzdHlsZSkgewogICAgICAgICAgICByZXR1cm4gbmFtZTsKICAgICAgICB9CgogICAgICAgIHZhciBpID0gY3NzUHJlZml4ZXMubGVuZ3RoLCBwcmVmaXhlZE5hbWU7CgogICAgICAgIHdoaWxlIChpLS0pIHsKICAgICAgICAgICAgcHJlZml4ZWROYW1lID0gIi0iICsgKGNzc1ByZWZpeGVzW2ldKSArICItIiArIG5hbWU7CiAgICAgICAgICAgIGlmIChwcmVmaXhlZE5hbWUgaW4gc3R5bGUpIHsKICAgICAgICAgICAgICAgIHJldHVybiBwcmVmaXhlZE5hbWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gdHJhbnNpdGlvbihlbGVtZW50LCBwcm9wcywgZHVyYXRpb24sIHRpbWluZykgewogICAgICAgIGlmICggZHVyYXRpb24gPT09IHZvaWQgMCApIGR1cmF0aW9uID0gNDAwOwogICAgICAgIGlmICggdGltaW5nID09PSB2b2lkIDAgKSB0aW1pbmcgPSAnbGluZWFyJzsKCgogICAgICAgIHJldHVybiBQcm9taXNlLmFsbCh0b05vZGVzKGVsZW1lbnQpLm1hcChmdW5jdGlvbiAoZWxlbWVudCkgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewoKICAgICAgICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gcHJvcHMpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBjc3MoZWxlbWVudCwgbmFtZSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAnJykgewogICAgICAgICAgICAgICAgICAgICAgICBjc3MoZWxlbWVudCwgbmFtZSwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRyaWdnZXIoZWxlbWVudCwgJ3RyYW5zaXRpb25lbmQnKTsgfSwgZHVyYXRpb24pOwoKICAgICAgICAgICAgICAgIG9uY2UoZWxlbWVudCwgJ3RyYW5zaXRpb25lbmQgdHJhbnNpdGlvbmNhbmNlbGVkJywgZnVuY3Rpb24gKHJlZikgewogICAgICAgICAgICAgICAgICAgIHZhciB0eXBlID0gcmVmLnR5cGU7CgogICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7CiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3MoZWxlbWVudCwgJ3VrLXRyYW5zaXRpb24nKTsKICAgICAgICAgICAgICAgICAgICBjc3MoZWxlbWVudCwgewogICAgICAgICAgICAgICAgICAgICAgICAndHJhbnNpdGlvbi1wcm9wZXJ0eSc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAndHJhbnNpdGlvbi1kdXJhdGlvbic6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAndHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24nOiAnJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIHR5cGUgPT09ICd0cmFuc2l0aW9uY2FuY2VsZWQnID8gcmVqZWN0KCkgOiByZXNvbHZlKCk7CiAgICAgICAgICAgICAgICB9LCB7c2VsZjogdHJ1ZX0pOwoKICAgICAgICAgICAgICAgIGFkZENsYXNzKGVsZW1lbnQsICd1ay10cmFuc2l0aW9uJyk7CiAgICAgICAgICAgICAgICBjc3MoZWxlbWVudCwgYXNzaWduKHsKICAgICAgICAgICAgICAgICAgICAndHJhbnNpdGlvbi1wcm9wZXJ0eSc6IE9iamVjdC5rZXlzKHByb3BzKS5tYXAocHJvcE5hbWUpLmpvaW4oJywnKSwKICAgICAgICAgICAgICAgICAgICAndHJhbnNpdGlvbi1kdXJhdGlvbic6IChkdXJhdGlvbiArICJtcyIpLAogICAgICAgICAgICAgICAgICAgICd0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbic6IHRpbWluZwogICAgICAgICAgICAgICAgfSwgcHJvcHMpKTsKCiAgICAgICAgICAgIH0pOyB9CiAgICAgICAgKSk7CgogICAgfQoKICAgIHZhciBUcmFuc2l0aW9uID0gewoKICAgICAgICBzdGFydDogdHJhbnNpdGlvbiwKCiAgICAgICAgc3RvcDogZnVuY3Rpb24oZWxlbWVudCkgewogICAgICAgICAgICB0cmlnZ2VyKGVsZW1lbnQsICd0cmFuc2l0aW9uZW5kJyk7CiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsKICAgICAgICB9LAoKICAgICAgICBjYW5jZWw6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgICAgICAgICAgdHJpZ2dlcihlbGVtZW50LCAndHJhbnNpdGlvbmNhbmNlbGVkJyk7CiAgICAgICAgfSwKCiAgICAgICAgaW5Qcm9ncmVzczogZnVuY3Rpb24oZWxlbWVudCkgewogICAgICAgICAgICByZXR1cm4gaGFzQ2xhc3MoZWxlbWVudCwgJ3VrLXRyYW5zaXRpb24nKTsKICAgICAgICB9CgogICAgfTsKCiAgICB2YXIgYW5pbWF0aW9uUHJlZml4ID0gJ3VrLWFuaW1hdGlvbi0nOwogICAgdmFyIGNsc0NhbmNlbEFuaW1hdGlvbiA9ICd1ay1jYW5jZWwtYW5pbWF0aW9uJzsKCiAgICBmdW5jdGlvbiBhbmltYXRlKGVsZW1lbnQsIGFuaW1hdGlvbiwgZHVyYXRpb24sIG9yaWdpbiwgb3V0KSB7CiAgICAgICAgdmFyIGFyZ3VtZW50cyQxID0gYXJndW1lbnRzOwogICAgICAgIGlmICggZHVyYXRpb24gPT09IHZvaWQgMCApIGR1cmF0aW9uID0gMjAwOwoKCiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHRvTm9kZXMoZWxlbWVudCkubWFwKGZ1bmN0aW9uIChlbGVtZW50KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CgogICAgICAgICAgICAgICAgaWYgKGhhc0NsYXNzKGVsZW1lbnQsIGNsc0NhbmNlbEFuaW1hdGlvbikpIHsKICAgICAgICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiBhbmltYXRlLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzJDEpLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTsgfQogICAgICAgICAgICAgICAgICAgICAgICApOyB9CiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdmFyIGNscyA9IGFuaW1hdGlvbiArICIgIiArIGFuaW1hdGlvblByZWZpeCArIChvdXQgPyAnbGVhdmUnIDogJ2VudGVyJyk7CgogICAgICAgICAgICAgICAgaWYgKHN0YXJ0c1dpdGgoYW5pbWF0aW9uLCBhbmltYXRpb25QcmVmaXgpKSB7CgogICAgICAgICAgICAgICAgICAgIGlmIChvcmlnaW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2xzICs9ICIgdWstdHJhbnNmb3JtLW9yaWdpbi0iICsgb3JpZ2luOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKG91dCkgewogICAgICAgICAgICAgICAgICAgICAgICBjbHMgKz0gIiAiICsgYW5pbWF0aW9uUHJlZml4ICsgInJldmVyc2UiOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmVzZXQoKTsKCiAgICAgICAgICAgICAgICBvbmNlKGVsZW1lbnQsICdhbmltYXRpb25lbmQgYW5pbWF0aW9uY2FuY2VsJywgZnVuY3Rpb24gKHJlZikgewogICAgICAgICAgICAgICAgICAgIHZhciB0eXBlID0gcmVmLnR5cGU7CgoKICAgICAgICAgICAgICAgICAgICB2YXIgaGFzUmVzZXQgPSBmYWxzZTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdhbmltYXRpb25jYW5jZWwnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCgpOwogICAgICAgICAgICAgICAgICAgICAgICByZXNldCgpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNSZXNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNldCgpOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGFzUmVzZXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZENsYXNzKGVsZW1lbnQsIGNsc0NhbmNlbEFuaW1hdGlvbik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlbW92ZUNsYXNzKGVsZW1lbnQsIGNsc0NhbmNlbEFuaW1hdGlvbik7IH0pOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgfSwge3NlbGY6IHRydWV9KTsKCiAgICAgICAgICAgICAgICBjc3MoZWxlbWVudCwgJ2FuaW1hdGlvbkR1cmF0aW9uJywgKGR1cmF0aW9uICsgIm1zIikpOwogICAgICAgICAgICAgICAgYWRkQ2xhc3MoZWxlbWVudCwgY2xzKTsKCiAgICAgICAgICAgICAgICBmdW5jdGlvbiByZXNldCgpIHsKICAgICAgICAgICAgICAgICAgICBjc3MoZWxlbWVudCwgJ2FuaW1hdGlvbkR1cmF0aW9uJywgJycpOwogICAgICAgICAgICAgICAgICAgIHJlbW92ZUNsYXNzZXMoZWxlbWVudCwgKGFuaW1hdGlvblByZWZpeCArICJcXFMqIikpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfSk7IH0KICAgICAgICApKTsKCiAgICB9CgogICAgdmFyIGluUHJvZ3Jlc3MgPSBuZXcgUmVnRXhwKChhbmltYXRpb25QcmVmaXggKyAiKGVudGVyfGxlYXZlKSIpKTsKICAgIHZhciBBbmltYXRpb24gPSB7CgogICAgICAgIGluOiBmdW5jdGlvbihlbGVtZW50LCBhbmltYXRpb24sIGR1cmF0aW9uLCBvcmlnaW4pIHsKICAgICAgICAgICAgcmV0dXJuIGFuaW1hdGUoZWxlbWVudCwgYW5pbWF0aW9uLCBkdXJhdGlvbiwgb3JpZ2luLCBmYWxzZSk7CiAgICAgICAgfSwKCiAgICAgICAgb3V0OiBmdW5jdGlvbihlbGVtZW50LCBhbmltYXRpb24sIGR1cmF0aW9uLCBvcmlnaW4pIHsKICAgICAgICAgICAgcmV0dXJuIGFuaW1hdGUoZWxlbWVudCwgYW5pbWF0aW9uLCBkdXJhdGlvbiwgb3JpZ2luLCB0cnVlKTsKICAgICAgICB9LAoKICAgICAgICBpblByb2dyZXNzOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICAgICAgICAgIHJldHVybiBpblByb2dyZXNzLnRlc3QoYXR0cihlbGVtZW50LCAnY2xhc3MnKSk7CiAgICAgICAgfSwKCiAgICAgICAgY2FuY2VsOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICAgICAgICAgIHRyaWdnZXIoZWxlbWVudCwgJ2FuaW1hdGlvbmNhbmNlbCcpOwogICAgICAgIH0KCiAgICB9OwoKICAgIHZhciBkaXJzID0gewogICAgICAgIHdpZHRoOiBbJ3gnLCAnbGVmdCcsICdyaWdodCddLAogICAgICAgIGhlaWdodDogWyd5JywgJ3RvcCcsICdib3R0b20nXQogICAgfTsKCiAgICBmdW5jdGlvbiBwb3NpdGlvbkF0KGVsZW1lbnQsIHRhcmdldCwgZWxBdHRhY2gsIHRhcmdldEF0dGFjaCwgZWxPZmZzZXQsIHRhcmdldE9mZnNldCwgZmxpcCwgYm91bmRhcnkpIHsKCiAgICAgICAgZWxBdHRhY2ggPSBnZXRQb3MoZWxBdHRhY2gpOwogICAgICAgIHRhcmdldEF0dGFjaCA9IGdldFBvcyh0YXJnZXRBdHRhY2gpOwoKICAgICAgICB2YXIgZmxpcHBlZCA9IHtlbGVtZW50OiBlbEF0dGFjaCwgdGFyZ2V0OiB0YXJnZXRBdHRhY2h9OwoKICAgICAgICBpZiAoIWVsZW1lbnQgfHwgIXRhcmdldCkgewogICAgICAgICAgICByZXR1cm4gZmxpcHBlZDsKICAgICAgICB9CgogICAgICAgIHZhciBkaW0gPSBnZXREaW1lbnNpb25zKGVsZW1lbnQpOwogICAgICAgIHZhciB0YXJnZXREaW0gPSBnZXREaW1lbnNpb25zKHRhcmdldCk7CiAgICAgICAgdmFyIHBvc2l0aW9uID0gdGFyZ2V0RGltOwoKICAgICAgICBtb3ZlVG8ocG9zaXRpb24sIGVsQXR0YWNoLCBkaW0sIC0xKTsKICAgICAgICBtb3ZlVG8ocG9zaXRpb24sIHRhcmdldEF0dGFjaCwgdGFyZ2V0RGltLCAxKTsKCiAgICAgICAgZWxPZmZzZXQgPSBnZXRPZmZzZXRzKGVsT2Zmc2V0LCBkaW0ud2lkdGgsIGRpbS5oZWlnaHQpOwogICAgICAgIHRhcmdldE9mZnNldCA9IGdldE9mZnNldHModGFyZ2V0T2Zmc2V0LCB0YXJnZXREaW0ud2lkdGgsIHRhcmdldERpbS5oZWlnaHQpOwoKICAgICAgICBlbE9mZnNldFsneCddICs9IHRhcmdldE9mZnNldFsneCddOwogICAgICAgIGVsT2Zmc2V0Wyd5J10gKz0gdGFyZ2V0T2Zmc2V0Wyd5J107CgogICAgICAgIHBvc2l0aW9uLmxlZnQgKz0gZWxPZmZzZXRbJ3gnXTsKICAgICAgICBwb3NpdGlvbi50b3AgKz0gZWxPZmZzZXRbJ3knXTsKCiAgICAgICAgaWYgKGZsaXApIHsKCiAgICAgICAgICAgIHZhciBib3VuZGFyaWVzID0gW2dldERpbWVuc2lvbnMoZ2V0V2luZG93KGVsZW1lbnQpKV07CgogICAgICAgICAgICBpZiAoYm91bmRhcnkpIHsKICAgICAgICAgICAgICAgIGJvdW5kYXJpZXMudW5zaGlmdChnZXREaW1lbnNpb25zKGJvdW5kYXJ5KSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGVhY2goZGlycywgZnVuY3Rpb24gKHJlZiwgcHJvcCkgewogICAgICAgICAgICAgICAgdmFyIGRpciA9IHJlZlswXTsKICAgICAgICAgICAgICAgIHZhciBhbGlnbiA9IHJlZlsxXTsKICAgICAgICAgICAgICAgIHZhciBhbGlnbkZsaXAgPSByZWZbMl07CgoKICAgICAgICAgICAgICAgIGlmICghKGZsaXAgPT09IHRydWUgfHwgaW5jbHVkZXMoZmxpcCwgZGlyKSkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgYm91bmRhcmllcy5zb21lKGZ1bmN0aW9uIChib3VuZGFyeSkgewoKICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbU9mZnNldCA9IGVsQXR0YWNoW2Rpcl0gPT09IGFsaWduCiAgICAgICAgICAgICAgICAgICAgICAgID8gLWRpbVtwcm9wXQogICAgICAgICAgICAgICAgICAgICAgICA6IGVsQXR0YWNoW2Rpcl0gPT09IGFsaWduRmxpcAogICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBkaW1bcHJvcF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMDsKCiAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldE9mZnNldCA9IHRhcmdldEF0dGFjaFtkaXJdID09PSBhbGlnbgogICAgICAgICAgICAgICAgICAgICAgICA/IHRhcmdldERpbVtwcm9wXQogICAgICAgICAgICAgICAgICAgICAgICA6IHRhcmdldEF0dGFjaFtkaXJdID09PSBhbGlnbkZsaXAKICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gLXRhcmdldERpbVtwcm9wXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwOwoKICAgICAgICAgICAgICAgICAgICBpZiAocG9zaXRpb25bYWxpZ25dIDwgYm91bmRhcnlbYWxpZ25dIHx8IHBvc2l0aW9uW2FsaWduXSArIGRpbVtwcm9wXSA+IGJvdW5kYXJ5W2FsaWduRmxpcF0pIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZW50ZXJPZmZzZXQgPSBkaW1bcHJvcF0gLyAyOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VudGVyVGFyZ2V0T2Zmc2V0ID0gdGFyZ2V0QXR0YWNoW2Rpcl0gPT09ICdjZW50ZXInID8gLXRhcmdldERpbVtwcm9wXSAvIDIgOiAwOwoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsQXR0YWNoW2Rpcl0gPT09ICdjZW50ZXInICYmICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGx5KGNlbnRlck9mZnNldCwgY2VudGVyVGFyZ2V0T2Zmc2V0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgYXBwbHkoLWNlbnRlck9mZnNldCwgLWNlbnRlclRhcmdldE9mZnNldCkKICAgICAgICAgICAgICAgICAgICAgICAgKSB8fCBhcHBseShlbGVtT2Zmc2V0LCB0YXJnZXRPZmZzZXQpOwoKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFwcGx5KGVsZW1PZmZzZXQsIHRhcmdldE9mZnNldCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld1ZhbCA9IHBvc2l0aW9uW2FsaWduXSArIGVsZW1PZmZzZXQgKyB0YXJnZXRPZmZzZXQgLSBlbE9mZnNldFtkaXJdICogMjsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdWYWwgPj0gYm91bmRhcnlbYWxpZ25dICYmIG5ld1ZhbCArIGRpbVtwcm9wXSA8PSBib3VuZGFyeVthbGlnbkZsaXBdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvblthbGlnbl0gPSBuZXdWYWw7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWydlbGVtZW50JywgJ3RhcmdldCddLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxpcHBlZFtlbF1bZGlyXSA9ICFlbGVtT2Zmc2V0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZmxpcHBlZFtlbF1bZGlyXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZsaXBwZWRbZWxdW2Rpcl0gPT09IGRpcnNbcHJvcF1bMV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZGlyc1twcm9wXVsyXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBkaXJzW3Byb3BdWzFdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgfSk7CiAgICAgICAgfQoKICAgICAgICBvZmZzZXQoZWxlbWVudCwgcG9zaXRpb24pOwoKICAgICAgICByZXR1cm4gZmxpcHBlZDsKICAgIH0KCiAgICBmdW5jdGlvbiBvZmZzZXQoZWxlbWVudCwgY29vcmRpbmF0ZXMpIHsKCiAgICAgICAgZWxlbWVudCA9IHRvTm9kZShlbGVtZW50KTsKCiAgICAgICAgaWYgKGNvb3JkaW5hdGVzKSB7CgogICAgICAgICAgICB2YXIgY3VycmVudE9mZnNldCA9IG9mZnNldChlbGVtZW50KTsKICAgICAgICAgICAgdmFyIHBvcyA9IGNzcyhlbGVtZW50LCAncG9zaXRpb24nKTsKCiAgICAgICAgICAgIFsnbGVmdCcsICd0b3AnXS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7CiAgICAgICAgICAgICAgICBpZiAocHJvcCBpbiBjb29yZGluYXRlcykgewogICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGNzcyhlbGVtZW50LCBwcm9wKTsKICAgICAgICAgICAgICAgICAgICBjc3MoZWxlbWVudCwgcHJvcCwgY29vcmRpbmF0ZXNbcHJvcF0gLSBjdXJyZW50T2Zmc2V0W3Byb3BdCiAgICAgICAgICAgICAgICAgICAgICAgICsgdG9GbG9hdChwb3MgPT09ICdhYnNvbHV0ZScgJiYgdmFsdWUgPT09ICdhdXRvJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBwb3NpdGlvbihlbGVtZW50KVtwcm9wXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB2YWx1ZSkKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHJldHVybiBnZXREaW1lbnNpb25zKGVsZW1lbnQpOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldERpbWVuc2lvbnMoZWxlbWVudCkgewoKICAgICAgICBlbGVtZW50ID0gdG9Ob2RlKGVsZW1lbnQpOwoKICAgICAgICBpZiAoIWVsZW1lbnQpIHsKICAgICAgICAgICAgcmV0dXJuIHt9OwogICAgICAgIH0KCiAgICAgICAgdmFyIHJlZiA9IGdldFdpbmRvdyhlbGVtZW50KTsKICAgICAgICB2YXIgdG9wID0gcmVmLnBhZ2VZT2Zmc2V0OwogICAgICAgIHZhciBsZWZ0ID0gcmVmLnBhZ2VYT2Zmc2V0OwoKICAgICAgICBpZiAoaXNXaW5kb3coZWxlbWVudCkpIHsKCiAgICAgICAgICAgIHZhciBoZWlnaHQgPSBlbGVtZW50LmlubmVySGVpZ2h0OwogICAgICAgICAgICB2YXIgd2lkdGggPSBlbGVtZW50LmlubmVyV2lkdGg7CgogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgdG9wOiB0b3AsCiAgICAgICAgICAgICAgICBsZWZ0OiBsZWZ0LAogICAgICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsCiAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGgsCiAgICAgICAgICAgICAgICBib3R0b206IHRvcCArIGhlaWdodCwKICAgICAgICAgICAgICAgIHJpZ2h0OiBsZWZ0ICsgd2lkdGgKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgIHZhciBzdHlsZSwgaGlkZGVuOwoKICAgICAgICBpZiAoIWlzVmlzaWJsZShlbGVtZW50KSAmJiBjc3MoZWxlbWVudCwgJ2Rpc3BsYXknKSA9PT0gJ25vbmUnKSB7CgogICAgICAgICAgICBzdHlsZSA9IGF0dHIoZWxlbWVudCwgJ3N0eWxlJyk7CiAgICAgICAgICAgIGhpZGRlbiA9IGF0dHIoZWxlbWVudCwgJ2hpZGRlbicpOwoKICAgICAgICAgICAgYXR0cihlbGVtZW50LCB7CiAgICAgICAgICAgICAgICBzdHlsZTogKChzdHlsZSB8fCAnJykgKyAiO2Rpc3BsYXk6YmxvY2sgIWltcG9ydGFudDsiKSwKICAgICAgICAgICAgICAgIGhpZGRlbjogbnVsbAogICAgICAgICAgICB9KTsKICAgICAgICB9CgogICAgICAgIHZhciByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKCiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChzdHlsZSkpIHsKICAgICAgICAgICAgYXR0cihlbGVtZW50LCB7c3R5bGU6IHN0eWxlLCBoaWRkZW46IGhpZGRlbn0pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgaGVpZ2h0OiByZWN0LmhlaWdodCwKICAgICAgICAgICAgd2lkdGg6IHJlY3Qud2lkdGgsCiAgICAgICAgICAgIHRvcDogcmVjdC50b3AgKyB0b3AsCiAgICAgICAgICAgIGxlZnQ6IHJlY3QubGVmdCArIGxlZnQsCiAgICAgICAgICAgIGJvdHRvbTogcmVjdC5ib3R0b20gKyB0b3AsCiAgICAgICAgICAgIHJpZ2h0OiByZWN0LnJpZ2h0ICsgbGVmdAogICAgICAgIH07CiAgICB9CgogICAgZnVuY3Rpb24gcG9zaXRpb24oZWxlbWVudCkgewogICAgICAgIGVsZW1lbnQgPSB0b05vZGUoZWxlbWVudCk7CgogICAgICAgIHZhciBwYXJlbnQgPSBlbGVtZW50Lm9mZnNldFBhcmVudCB8fCBnZXREb2NFbChlbGVtZW50KTsKICAgICAgICB2YXIgcGFyZW50T2Zmc2V0ID0gb2Zmc2V0KHBhcmVudCk7CiAgICAgICAgdmFyIHJlZiA9IFsndG9wJywgJ2xlZnQnXS5yZWR1Y2UoZnVuY3Rpb24gKHByb3BzLCBwcm9wKSB7CiAgICAgICAgICAgIHZhciBwcm9wTmFtZSA9IHVjZmlyc3QocHJvcCk7CiAgICAgICAgICAgIHByb3BzW3Byb3BdIC09IHBhcmVudE9mZnNldFtwcm9wXQogICAgICAgICAgICAgICAgKyB0b0Zsb2F0KGNzcyhlbGVtZW50LCAoIm1hcmdpbiIgKyBwcm9wTmFtZSkpKQogICAgICAgICAgICAgICAgKyB0b0Zsb2F0KGNzcyhwYXJlbnQsICgiYm9yZGVyIiArIHByb3BOYW1lICsgIldpZHRoIikpKTsKICAgICAgICAgICAgcmV0dXJuIHByb3BzOwogICAgICAgIH0sIG9mZnNldChlbGVtZW50KSk7CiAgICAgICAgdmFyIHRvcCA9IHJlZi50b3A7CiAgICAgICAgdmFyIGxlZnQgPSByZWYubGVmdDsKCiAgICAgICAgcmV0dXJuIHt0b3A6IHRvcCwgbGVmdDogbGVmdH07CiAgICB9CgogICAgdmFyIGhlaWdodCA9IGRpbWVuc2lvbignaGVpZ2h0Jyk7CiAgICB2YXIgd2lkdGggPSBkaW1lbnNpb24oJ3dpZHRoJyk7CgogICAgZnVuY3Rpb24gZGltZW5zaW9uKHByb3ApIHsKICAgICAgICB2YXIgcHJvcE5hbWUgPSB1Y2ZpcnN0KHByb3ApOwogICAgICAgIHJldHVybiBmdW5jdGlvbiAoZWxlbWVudCwgdmFsdWUpIHsKCiAgICAgICAgICAgIGVsZW1lbnQgPSB0b05vZGUoZWxlbWVudCk7CgogICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQodmFsdWUpKSB7CgogICAgICAgICAgICAgICAgaWYgKGlzV2luZG93KGVsZW1lbnQpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRbKCJpbm5lciIgKyBwcm9wTmFtZSldOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChpc0RvY3VtZW50KGVsZW1lbnQpKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGRvYyA9IGVsZW1lbnQuZG9jdW1lbnRFbGVtZW50OwogICAgICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1heChkb2NbKCJvZmZzZXQiICsgcHJvcE5hbWUpXSwgZG9jWygic2Nyb2xsIiArIHByb3BOYW1lKV0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhbHVlID0gY3NzKGVsZW1lbnQsIHByb3ApOwogICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSA9PT0gJ2F1dG8nID8gZWxlbWVudFsoIm9mZnNldCIgKyBwcm9wTmFtZSldIDogdG9GbG9hdCh2YWx1ZSkgfHwgMDsKCiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgLSBib3hNb2RlbEFkanVzdChwcm9wLCBlbGVtZW50KTsKCiAgICAgICAgICAgIH0gZWxzZSB7CgogICAgICAgICAgICAgICAgY3NzKGVsZW1lbnQsIHByb3AsICF2YWx1ZSAmJiB2YWx1ZSAhPT0gMAogICAgICAgICAgICAgICAgICAgID8gJycKICAgICAgICAgICAgICAgICAgICA6ICt2YWx1ZSArIGJveE1vZGVsQWRqdXN0KHByb3AsIGVsZW1lbnQpICsgJ3B4JwogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIH0KCiAgICAgICAgfTsKICAgIH0KCiAgICBmdW5jdGlvbiBib3hNb2RlbEFkanVzdChwcm9wLCBlbGVtZW50LCBzaXppbmcpIHsKICAgICAgICBpZiAoIHNpemluZyA9PT0gdm9pZCAwICkgc2l6aW5nID0gJ2JvcmRlci1ib3gnOwoKICAgICAgICByZXR1cm4gY3NzKGVsZW1lbnQsICdib3hTaXppbmcnKSA9PT0gc2l6aW5nCiAgICAgICAgICAgID8gZGlyc1twcm9wXS5zbGljZSgxKS5tYXAodWNmaXJzdCkucmVkdWNlKGZ1bmN0aW9uICh2YWx1ZSwgcHJvcCkgeyByZXR1cm4gdmFsdWUKICAgICAgICAgICAgICAgICsgdG9GbG9hdChjc3MoZWxlbWVudCwgKCJwYWRkaW5nIiArIHByb3ApKSkKICAgICAgICAgICAgICAgICsgdG9GbG9hdChjc3MoZWxlbWVudCwgKCJib3JkZXIiICsgcHJvcCArICJXaWR0aCIpKSk7IH0KICAgICAgICAgICAgICAgICwgMCkKICAgICAgICAgICAgOiAwOwogICAgfQoKICAgIGZ1bmN0aW9uIG1vdmVUbyhwb3NpdGlvbiwgYXR0YWNoLCBkaW0sIGZhY3RvcikgewogICAgICAgIGVhY2goZGlycywgZnVuY3Rpb24gKHJlZiwgcHJvcCkgewogICAgICAgICAgICB2YXIgZGlyID0gcmVmWzBdOwogICAgICAgICAgICB2YXIgYWxpZ24gPSByZWZbMV07CiAgICAgICAgICAgIHZhciBhbGlnbkZsaXAgPSByZWZbMl07CgogICAgICAgICAgICBpZiAoYXR0YWNoW2Rpcl0gPT09IGFsaWduRmxpcCkgewogICAgICAgICAgICAgICAgcG9zaXRpb25bYWxpZ25dICs9IGRpbVtwcm9wXSAqIGZhY3RvcjsKICAgICAgICAgICAgfSBlbHNlIGlmIChhdHRhY2hbZGlyXSA9PT0gJ2NlbnRlcicpIHsKICAgICAgICAgICAgICAgIHBvc2l0aW9uW2FsaWduXSArPSBkaW1bcHJvcF0gKiBmYWN0b3IgLyAyOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0UG9zKHBvcykgewoKICAgICAgICB2YXIgeCA9IC9sZWZ0fGNlbnRlcnxyaWdodC87CiAgICAgICAgdmFyIHkgPSAvdG9wfGNlbnRlcnxib3R0b20vOwoKICAgICAgICBwb3MgPSAocG9zIHx8ICcnKS5zcGxpdCgnICcpOwoKICAgICAgICBpZiAocG9zLmxlbmd0aCA9PT0gMSkgewogICAgICAgICAgICBwb3MgPSB4LnRlc3QocG9zWzBdKQogICAgICAgICAgICAgICAgPyBwb3MuY29uY2F0KFsnY2VudGVyJ10pCiAgICAgICAgICAgICAgICA6IHkudGVzdChwb3NbMF0pCiAgICAgICAgICAgICAgICAgICAgPyBbJ2NlbnRlciddLmNvbmNhdChwb3MpCiAgICAgICAgICAgICAgICAgICAgOiBbJ2NlbnRlcicsICdjZW50ZXInXTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHg6IHgudGVzdChwb3NbMF0pID8gcG9zWzBdIDogJ2NlbnRlcicsCiAgICAgICAgICAgIHk6IHkudGVzdChwb3NbMV0pID8gcG9zWzFdIDogJ2NlbnRlcicKICAgICAgICB9OwogICAgfQoKICAgIGZ1bmN0aW9uIGdldE9mZnNldHMob2Zmc2V0cywgd2lkdGgsIGhlaWdodCkgewoKICAgICAgICB2YXIgcmVmID0gKG9mZnNldHMgfHwgJycpLnNwbGl0KCcgJyk7CiAgICAgICAgdmFyIHggPSByZWZbMF07CiAgICAgICAgdmFyIHkgPSByZWZbMV07CgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHg6IHggPyB0b0Zsb2F0KHgpICogKGVuZHNXaXRoKHgsICclJykgPyB3aWR0aCAvIDEwMCA6IDEpIDogMCwKICAgICAgICAgICAgeTogeSA/IHRvRmxvYXQoeSkgKiAoZW5kc1dpdGgoeSwgJyUnKSA/IGhlaWdodCAvIDEwMCA6IDEpIDogMAogICAgICAgIH07CiAgICB9CgogICAgZnVuY3Rpb24gZmxpcFBvc2l0aW9uKHBvcykgewogICAgICAgIHN3aXRjaCAocG9zKSB7CiAgICAgICAgICAgIGNhc2UgJ2xlZnQnOgogICAgICAgICAgICAgICAgcmV0dXJuICdyaWdodCc7CiAgICAgICAgICAgIGNhc2UgJ3JpZ2h0JzoKICAgICAgICAgICAgICAgIHJldHVybiAnbGVmdCc7CiAgICAgICAgICAgIGNhc2UgJ3RvcCc6CiAgICAgICAgICAgICAgICByZXR1cm4gJ2JvdHRvbSc7CiAgICAgICAgICAgIGNhc2UgJ2JvdHRvbSc6CiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvcCc7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICByZXR1cm4gcG9zOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBpc0luVmlldyhlbGVtZW50LCB0b3BPZmZzZXQsIGxlZnRPZmZzZXQpIHsKICAgICAgICBpZiAoIHRvcE9mZnNldCA9PT0gdm9pZCAwICkgdG9wT2Zmc2V0ID0gMDsKICAgICAgICBpZiAoIGxlZnRPZmZzZXQgPT09IHZvaWQgMCApIGxlZnRPZmZzZXQgPSAwOwoKCiAgICAgICAgaWYgKCFpc1Zpc2libGUoZWxlbWVudCkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgZWxlbWVudCA9IHRvTm9kZShlbGVtZW50KTsKCiAgICAgICAgdmFyIHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTsKICAgICAgICB2YXIgY2xpZW50ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICB2YXIgYm91bmRpbmcgPSB7CiAgICAgICAgICAgIHRvcDogLXRvcE9mZnNldCwKICAgICAgICAgICAgbGVmdDogLWxlZnRPZmZzZXQsCiAgICAgICAgICAgIGJvdHRvbTogdG9wT2Zmc2V0ICsgaGVpZ2h0KHdpbiksCiAgICAgICAgICAgIHJpZ2h0OiBsZWZ0T2Zmc2V0ICsgd2lkdGgod2luKQogICAgICAgIH07CgogICAgICAgIHJldHVybiBpbnRlcnNlY3RSZWN0KGNsaWVudCwgYm91bmRpbmcpIHx8IHBvaW50SW5SZWN0KHt4OiBjbGllbnQubGVmdCwgeTogY2xpZW50LnRvcH0sIGJvdW5kaW5nKTsKCiAgICB9CgogICAgZnVuY3Rpb24gc2Nyb2xsZWRPdmVyKGVsZW1lbnQsIGhlaWdodE9mZnNldCkgewogICAgICAgIGlmICggaGVpZ2h0T2Zmc2V0ID09PSB2b2lkIDAgKSBoZWlnaHRPZmZzZXQgPSAwOwoKCiAgICAgICAgaWYgKCFpc1Zpc2libGUoZWxlbWVudCkpIHsKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQoKICAgICAgICBlbGVtZW50ID0gdG9Ob2RlKGVsZW1lbnQpOwoKICAgICAgICB2YXIgd2luID0gZ2V0V2luZG93KGVsZW1lbnQpOwogICAgICAgIHZhciBkb2MgPSBnZXREb2N1bWVudChlbGVtZW50KTsKICAgICAgICB2YXIgZWxIZWlnaHQgPSBlbGVtZW50Lm9mZnNldEhlaWdodCArIGhlaWdodE9mZnNldDsKICAgICAgICB2YXIgcmVmID0gb2Zmc2V0UG9zaXRpb24oZWxlbWVudCk7CiAgICAgICAgdmFyIHRvcCA9IHJlZlswXTsKICAgICAgICB2YXIgdnAgPSBoZWlnaHQod2luKTsKICAgICAgICB2YXIgdmggPSB2cCArIE1hdGgubWluKDAsIHRvcCAtIHZwKTsKICAgICAgICB2YXIgZGlmZiA9IE1hdGgubWF4KDAsIHZwIC0gKGhlaWdodChkb2MpICsgaGVpZ2h0T2Zmc2V0IC0gKHRvcCArIGVsSGVpZ2h0KSkpOwoKICAgICAgICByZXR1cm4gY2xhbXAoKCh2aCArIHdpbi5wYWdlWU9mZnNldCAtIHRvcCkgLyAoKHZoICsgKGVsSGVpZ2h0IC0gKGRpZmYgPCB2cCA/IGRpZmYgOiAwKSkpIC8gMTAwKSkgLyAxMDApOwogICAgfQoKICAgIGZ1bmN0aW9uIHNjcm9sbFRvcChlbGVtZW50LCB0b3ApIHsKICAgICAgICBlbGVtZW50ID0gdG9Ob2RlKGVsZW1lbnQpOwoKICAgICAgICBpZiAoaXNXaW5kb3coZWxlbWVudCkgfHwgaXNEb2N1bWVudChlbGVtZW50KSkgewogICAgICAgICAgICB2YXIgcmVmID0gZ2V0V2luZG93KGVsZW1lbnQpOwogICAgICAgICAgICB2YXIgc2Nyb2xsVG8gPSByZWYuc2Nyb2xsVG87CiAgICAgICAgICAgIHZhciBwYWdlWE9mZnNldCA9IHJlZi5wYWdlWE9mZnNldDsKICAgICAgICAgICAgc2Nyb2xsVG8ocGFnZVhPZmZzZXQsIHRvcCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZWxlbWVudC5zY3JvbGxUb3AgPSB0b3A7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIG9mZnNldFBvc2l0aW9uKGVsZW1lbnQpIHsKICAgICAgICB2YXIgb2Zmc2V0ID0gWzAsIDBdOwoKICAgICAgICBkbyB7CgogICAgICAgICAgICBvZmZzZXRbMF0gKz0gZWxlbWVudC5vZmZzZXRUb3A7CiAgICAgICAgICAgIG9mZnNldFsxXSArPSBlbGVtZW50Lm9mZnNldExlZnQ7CgogICAgICAgICAgICBpZiAoY3NzKGVsZW1lbnQsICdwb3NpdGlvbicpID09PSAnZml4ZWQnKSB7CiAgICAgICAgICAgICAgICB2YXIgd2luID0gZ2V0V2luZG93KGVsZW1lbnQpOwogICAgICAgICAgICAgICAgb2Zmc2V0WzBdICs9IHdpbi5wYWdlWU9mZnNldDsKICAgICAgICAgICAgICAgIG9mZnNldFsxXSArPSB3aW4ucGFnZVhPZmZzZXQ7CiAgICAgICAgICAgICAgICByZXR1cm4gb2Zmc2V0OwogICAgICAgICAgICB9CgogICAgICAgIH0gd2hpbGUgKChlbGVtZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQpKTsKCiAgICAgICAgcmV0dXJuIG9mZnNldDsKICAgIH0KCiAgICBmdW5jdGlvbiB0b1B4KHZhbHVlLCBwcm9wZXJ0eSwgZWxlbWVudCkgewogICAgICAgIGlmICggcHJvcGVydHkgPT09IHZvaWQgMCApIHByb3BlcnR5ID0gJ3dpZHRoJzsKICAgICAgICBpZiAoIGVsZW1lbnQgPT09IHZvaWQgMCApIGVsZW1lbnQgPSB3aW5kb3c7CgogICAgICAgIHJldHVybiBpc051bWVyaWModmFsdWUpCiAgICAgICAgICAgID8gK3ZhbHVlCiAgICAgICAgICAgIDogZW5kc1dpdGgodmFsdWUsICd2aCcpCiAgICAgICAgICAgICAgICA/IHBlcmNlbnQoaGVpZ2h0KGdldFdpbmRvdyhlbGVtZW50KSksIHZhbHVlKQogICAgICAgICAgICAgICAgOiBlbmRzV2l0aCh2YWx1ZSwgJ3Z3JykKICAgICAgICAgICAgICAgICAgICA/IHBlcmNlbnQod2lkdGgoZ2V0V2luZG93KGVsZW1lbnQpKSwgdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgOiBlbmRzV2l0aCh2YWx1ZSwgJyUnKQogICAgICAgICAgICAgICAgICAgICAgICA/IHBlcmNlbnQoZ2V0RGltZW5zaW9ucyhlbGVtZW50KVtwcm9wZXJ0eV0sIHZhbHVlKQogICAgICAgICAgICAgICAgICAgICAgICA6IHRvRmxvYXQodmFsdWUpOwogICAgfQoKICAgIGZ1bmN0aW9uIHBlcmNlbnQoYmFzZSwgdmFsdWUpIHsKICAgICAgICByZXR1cm4gYmFzZSAqIHRvRmxvYXQodmFsdWUpIC8gMTAwOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldFdpbmRvdyhlbGVtZW50KSB7CiAgICAgICAgcmV0dXJuIGlzV2luZG93KGVsZW1lbnQpID8gZWxlbWVudCA6IGdldERvY3VtZW50KGVsZW1lbnQpLmRlZmF1bHRWaWV3OwogICAgfQoKICAgIGZ1bmN0aW9uIGdldERvY3VtZW50KGVsZW1lbnQpIHsKICAgICAgICByZXR1cm4gdG9Ob2RlKGVsZW1lbnQpLm93bmVyRG9jdW1lbnQ7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0RG9jRWwoZWxlbWVudCkgewogICAgICAgIHJldHVybiBnZXREb2N1bWVudChlbGVtZW50KS5kb2N1bWVudEVsZW1lbnQ7CiAgICB9CgogICAgLyoKICAgICAgICBCYXNlZCBvbjoKICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMTYgV2lsc29uIFBhZ2Ugd2lsc29ucGFnZUBtZS5jb20KICAgICAgICBodHRwczovL2dpdGh1Yi5jb20vd2lsc29ucGFnZS9mYXN0ZG9tCiAgICAqLwoKICAgIHZhciBmYXN0ZG9tID0gewoKICAgICAgICByZWFkczogW10sCiAgICAgICAgd3JpdGVzOiBbXSwKCiAgICAgICAgcmVhZDogZnVuY3Rpb24odGFzaykgewogICAgICAgICAgICB0aGlzLnJlYWRzLnB1c2godGFzayk7CiAgICAgICAgICAgIHNjaGVkdWxlRmx1c2goKTsKICAgICAgICAgICAgcmV0dXJuIHRhc2s7CiAgICAgICAgfSwKCiAgICAgICAgd3JpdGU6IGZ1bmN0aW9uKHRhc2spIHsKICAgICAgICAgICAgdGhpcy53cml0ZXMucHVzaCh0YXNrKTsKICAgICAgICAgICAgc2NoZWR1bGVGbHVzaCgpOwogICAgICAgICAgICByZXR1cm4gdGFzazsKICAgICAgICB9LAoKICAgICAgICBjbGVhcjogZnVuY3Rpb24odGFzaykgewogICAgICAgICAgICByZXR1cm4gcmVtb3ZlJDEodGhpcy5yZWFkcywgdGFzaykgfHwgcmVtb3ZlJDEodGhpcy53cml0ZXMsIHRhc2spOwogICAgICAgIH0sCgogICAgICAgIGZsdXNoOiBmbHVzaAoKICAgIH07CgogICAgZnVuY3Rpb24gZmx1c2goKSB7CiAgICAgICAgcnVuVGFza3MoZmFzdGRvbS5yZWFkcyk7CiAgICAgICAgcnVuVGFza3MoZmFzdGRvbS53cml0ZXMuc3BsaWNlKDAsIGZhc3Rkb20ud3JpdGVzLmxlbmd0aCkpOwoKICAgICAgICBmYXN0ZG9tLnNjaGVkdWxlZCA9IGZhbHNlOwoKICAgICAgICBpZiAoZmFzdGRvbS5yZWFkcy5sZW5ndGggfHwgZmFzdGRvbS53cml0ZXMubGVuZ3RoKSB7CiAgICAgICAgICAgIHNjaGVkdWxlRmx1c2godHJ1ZSk7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIHNjaGVkdWxlRmx1c2gobWljcm90YXNrKSB7CiAgICAgICAgaWYgKCBtaWNyb3Rhc2sgPT09IHZvaWQgMCApIG1pY3JvdGFzayA9IGZhbHNlOwoKICAgICAgICBpZiAoIWZhc3Rkb20uc2NoZWR1bGVkKSB7CiAgICAgICAgICAgIGZhc3Rkb20uc2NoZWR1bGVkID0gdHJ1ZTsKICAgICAgICAgICAgaWYgKG1pY3JvdGFzaykgewogICAgICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmbHVzaCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZmx1c2gpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIHJ1blRhc2tzKHRhc2tzKSB7CiAgICAgICAgdmFyIHRhc2s7CiAgICAgICAgd2hpbGUgKCh0YXNrID0gdGFza3Muc2hpZnQoKSkpIHsKICAgICAgICAgICAgdGFzaygpOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiByZW1vdmUkMShhcnJheSwgaXRlbSkgewogICAgICAgIHZhciBpbmRleCA9IGFycmF5LmluZGV4T2YoaXRlbSk7CiAgICAgICAgcmV0dXJuICEhfmluZGV4ICYmICEhYXJyYXkuc3BsaWNlKGluZGV4LCAxKTsKICAgIH0KCiAgICBmdW5jdGlvbiBNb3VzZVRyYWNrZXIoKSB7fQoKICAgIE1vdXNlVHJhY2tlci5wcm90b3R5cGUgPSB7CgogICAgICAgIHBvc2l0aW9uczogW10sCiAgICAgICAgcG9zaXRpb246IG51bGwsCgogICAgICAgIGluaXQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpczsKCgogICAgICAgICAgICB0aGlzLnBvc2l0aW9ucyA9IFtdOwogICAgICAgICAgICB0aGlzLnBvc2l0aW9uID0gbnVsbDsKCiAgICAgICAgICAgIHZhciB0aWNraW5nID0gZmFsc2U7CiAgICAgICAgICAgIHRoaXMudW5iaW5kID0gb24oZG9jdW1lbnQsICdtb3VzZW1vdmUnLCBmdW5jdGlvbiAoZSkgewoKICAgICAgICAgICAgICAgIGlmICh0aWNraW5nKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgICAgICAgICB2YXIgdGltZSA9IERhdGUubm93KCk7CiAgICAgICAgICAgICAgICAgICAgdmFyIHJlZiA9IHRoaXMkMS5wb3NpdGlvbnM7CiAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IHJlZi5sZW5ndGg7CgogICAgICAgICAgICAgICAgICAgIGlmIChsZW5ndGggJiYgKHRpbWUgLSB0aGlzJDEucG9zaXRpb25zW2xlbmd0aCAtIDFdLnRpbWUgPiAxMDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMkMS5wb3NpdGlvbnMuc3BsaWNlKDAsIGxlbmd0aCk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICB0aGlzJDEucG9zaXRpb25zLnB1c2goe3RpbWU6IHRpbWUsIHg6IGUucGFnZVgsIHk6IGUucGFnZVl9KTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMkMS5wb3NpdGlvbnMubGVuZ3RoID4gNSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzJDEucG9zaXRpb25zLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICB0aWNraW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgICB9LCA1KTsKCiAgICAgICAgICAgICAgICB0aWNraW5nID0gdHJ1ZTsKICAgICAgICAgICAgfSk7CgogICAgICAgIH0sCgogICAgICAgIGNhbmNlbDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmICh0aGlzLnVuYmluZCkgewogICAgICAgICAgICAgICAgdGhpcy51bmJpbmQoKTsKICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIG1vdmVzVG86IGZ1bmN0aW9uKHRhcmdldCkgewoKICAgICAgICAgICAgaWYgKHRoaXMucG9zaXRpb25zLmxlbmd0aCA8IDIpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIHAgPSBvZmZzZXQodGFyZ2V0KTsKICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gbGFzdCh0aGlzLnBvc2l0aW9ucyk7CiAgICAgICAgICAgIHZhciByZWYgPSB0aGlzLnBvc2l0aW9uczsKICAgICAgICAgICAgdmFyIHByZXZQb3MgPSByZWZbMF07CgogICAgICAgICAgICBpZiAocC5sZWZ0IDw9IHBvc2l0aW9uLnggJiYgcG9zaXRpb24ueCA8PSBwLnJpZ2h0ICYmIHAudG9wIDw9IHBvc2l0aW9uLnkgJiYgcG9zaXRpb24ueSA8PSBwLmJvdHRvbSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgcG9pbnRzID0gWwogICAgICAgICAgICAgICAgW3t4OiBwLmxlZnQsIHk6IHAudG9wfSwge3g6IHAucmlnaHQsIHk6IHAuYm90dG9tfV0sCiAgICAgICAgICAgICAgICBbe3g6IHAucmlnaHQsIHk6IHAudG9wfSwge3g6IHAubGVmdCwgeTogcC5ib3R0b219XQogICAgICAgICAgICBdOwoKICAgICAgICAgICAgaWYgKHAucmlnaHQgPD0gcG9zaXRpb24ueCkgOyBlbHNlIGlmIChwLmxlZnQgPj0gcG9zaXRpb24ueCkgewogICAgICAgICAgICAgICAgcG9pbnRzWzBdLnJldmVyc2UoKTsKICAgICAgICAgICAgICAgIHBvaW50c1sxXS5yZXZlcnNlKCk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAocC5ib3R0b20gPD0gcG9zaXRpb24ueSkgewogICAgICAgICAgICAgICAgcG9pbnRzWzBdLnJldmVyc2UoKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChwLnRvcCA+PSBwb3NpdGlvbi55KSB7CiAgICAgICAgICAgICAgICBwb2ludHNbMV0ucmV2ZXJzZSgpOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gISFwb2ludHMucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIHBvaW50KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHNsb3BlKHByZXZQb3MsIHBvaW50WzBdKSA8IHNsb3BlKHBvc2l0aW9uLCBwb2ludFswXSkgJiYgc2xvcGUocHJldlBvcywgcG9pbnRbMV0pID4gc2xvcGUocG9zaXRpb24sIHBvaW50WzFdKSk7CiAgICAgICAgICAgIH0sIDApOwogICAgICAgIH0KCiAgICB9OwoKICAgIGZ1bmN0aW9uIHNsb3BlKGEsIGIpIHsKICAgICAgICByZXR1cm4gKGIueSAtIGEueSkgLyAoYi54IC0gYS54KTsKICAgIH0KCiAgICB2YXIgc3RyYXRzID0ge307CgogICAgc3RyYXRzLmV2ZW50cyA9CiAgICBzdHJhdHMuY3JlYXRlZCA9CiAgICBzdHJhdHMuYmVmb3JlQ29ubmVjdCA9CiAgICBzdHJhdHMuY29ubmVjdGVkID0KICAgIHN0cmF0cy5iZWZvcmVEaXNjb25uZWN0ID0KICAgIHN0cmF0cy5kaXNjb25uZWN0ZWQgPQogICAgc3RyYXRzLmRlc3Ryb3kgPSBjb25jYXRTdHJhdDsKCiAgICAvLyBhcmdzIHN0cmF0ZWd5CiAgICBzdHJhdHMuYXJncyA9IGZ1bmN0aW9uIChwYXJlbnRWYWwsIGNoaWxkVmFsKSB7CiAgICAgICAgcmV0dXJuIGNoaWxkVmFsICE9PSBmYWxzZSAmJiBjb25jYXRTdHJhdChjaGlsZFZhbCB8fCBwYXJlbnRWYWwpOwogICAgfTsKCiAgICAvLyB1cGRhdGUgc3RyYXRlZ3kKICAgIHN0cmF0cy51cGRhdGUgPSBmdW5jdGlvbiAocGFyZW50VmFsLCBjaGlsZFZhbCkgewogICAgICAgIHJldHVybiBzb3J0QnkoY29uY2F0U3RyYXQocGFyZW50VmFsLCBpc0Z1bmN0aW9uKGNoaWxkVmFsKSA/IHtyZWFkOiBjaGlsZFZhbH0gOiBjaGlsZFZhbCksICdvcmRlcicpOwogICAgfTsKCiAgICAvLyBwcm9wZXJ0eSBzdHJhdGVneQogICAgc3RyYXRzLnByb3BzID0gZnVuY3Rpb24gKHBhcmVudFZhbCwgY2hpbGRWYWwpIHsKCiAgICAgICAgaWYgKGlzQXJyYXkoY2hpbGRWYWwpKSB7CiAgICAgICAgICAgIGNoaWxkVmFsID0gY2hpbGRWYWwucmVkdWNlKGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7CiAgICAgICAgICAgICAgICB2YWx1ZVtrZXldID0gU3RyaW5nOwogICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgICAgICB9LCB7fSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc3RyYXRzLm1ldGhvZHMocGFyZW50VmFsLCBjaGlsZFZhbCk7CiAgICB9OwoKICAgIC8vIGV4dGVuZCBzdHJhdGVneQogICAgc3RyYXRzLmNvbXB1dGVkID0KICAgIHN0cmF0cy5tZXRob2RzID0gZnVuY3Rpb24gKHBhcmVudFZhbCwgY2hpbGRWYWwpIHsKICAgICAgICByZXR1cm4gY2hpbGRWYWwKICAgICAgICAgICAgPyBwYXJlbnRWYWwKICAgICAgICAgICAgICAgID8gYXNzaWduKHt9LCBwYXJlbnRWYWwsIGNoaWxkVmFsKQogICAgICAgICAgICAgICAgOiBjaGlsZFZhbAogICAgICAgICAgICA6IHBhcmVudFZhbDsKICAgIH07CgogICAgLy8gZGF0YSBzdHJhdGVneQogICAgc3RyYXRzLmRhdGEgPSBmdW5jdGlvbiAocGFyZW50VmFsLCBjaGlsZFZhbCwgdm0pIHsKCiAgICAgICAgaWYgKCF2bSkgewoKICAgICAgICAgICAgaWYgKCFjaGlsZFZhbCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHBhcmVudFZhbDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCFwYXJlbnRWYWwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZFZhbDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2bSkgewogICAgICAgICAgICAgICAgcmV0dXJuIG1lcmdlRm5EYXRhKHBhcmVudFZhbCwgY2hpbGRWYWwsIHZtKTsKICAgICAgICAgICAgfTsKCiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbWVyZ2VGbkRhdGEocGFyZW50VmFsLCBjaGlsZFZhbCwgdm0pOwogICAgfTsKCiAgICBmdW5jdGlvbiBtZXJnZUZuRGF0YShwYXJlbnRWYWwsIGNoaWxkVmFsLCB2bSkgewogICAgICAgIHJldHVybiBzdHJhdHMuY29tcHV0ZWQoCiAgICAgICAgICAgIGlzRnVuY3Rpb24ocGFyZW50VmFsKQogICAgICAgICAgICAgICAgPyBwYXJlbnRWYWwuY2FsbCh2bSwgdm0pCiAgICAgICAgICAgICAgICA6IHBhcmVudFZhbCwKICAgICAgICAgICAgaXNGdW5jdGlvbihjaGlsZFZhbCkKICAgICAgICAgICAgICAgID8gY2hpbGRWYWwuY2FsbCh2bSwgdm0pCiAgICAgICAgICAgICAgICA6IGNoaWxkVmFsCiAgICAgICAgKTsKICAgIH0KCiAgICAvLyBjb25jYXQgc3RyYXRlZ3kKICAgIGZ1bmN0aW9uIGNvbmNhdFN0cmF0KHBhcmVudFZhbCwgY2hpbGRWYWwpIHsKCiAgICAgICAgcGFyZW50VmFsID0gcGFyZW50VmFsICYmICFpc0FycmF5KHBhcmVudFZhbCkgPyBbcGFyZW50VmFsXSA6IHBhcmVudFZhbDsKCiAgICAgICAgcmV0dXJuIGNoaWxkVmFsCiAgICAgICAgICAgID8gcGFyZW50VmFsCiAgICAgICAgICAgICAgICA/IHBhcmVudFZhbC5jb25jYXQoY2hpbGRWYWwpCiAgICAgICAgICAgICAgICA6IGlzQXJyYXkoY2hpbGRWYWwpCiAgICAgICAgICAgICAgICAgICAgPyBjaGlsZFZhbAogICAgICAgICAgICAgICAgICAgIDogW2NoaWxkVmFsXQogICAgICAgICAgICA6IHBhcmVudFZhbDsKICAgIH0KCiAgICAvLyBkZWZhdWx0IHN0cmF0ZWd5CiAgICBmdW5jdGlvbiBkZWZhdWx0U3RyYXQocGFyZW50VmFsLCBjaGlsZFZhbCkgewogICAgICAgIHJldHVybiBpc1VuZGVmaW5lZChjaGlsZFZhbCkgPyBwYXJlbnRWYWwgOiBjaGlsZFZhbDsKICAgIH0KCiAgICBmdW5jdGlvbiBtZXJnZU9wdGlvbnMocGFyZW50LCBjaGlsZCwgdm0pIHsKCiAgICAgICAgdmFyIG9wdGlvbnMgPSB7fTsKCiAgICAgICAgaWYgKGlzRnVuY3Rpb24oY2hpbGQpKSB7CiAgICAgICAgICAgIGNoaWxkID0gY2hpbGQub3B0aW9uczsKICAgICAgICB9CgogICAgICAgIGlmIChjaGlsZC5leHRlbmRzKSB7CiAgICAgICAgICAgIHBhcmVudCA9IG1lcmdlT3B0aW9ucyhwYXJlbnQsIGNoaWxkLmV4dGVuZHMsIHZtKTsKICAgICAgICB9CgogICAgICAgIGlmIChjaGlsZC5taXhpbnMpIHsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjaGlsZC5taXhpbnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CiAgICAgICAgICAgICAgICBwYXJlbnQgPSBtZXJnZU9wdGlvbnMocGFyZW50LCBjaGlsZC5taXhpbnNbaV0sIHZtKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZm9yICh2YXIga2V5IGluIHBhcmVudCkgewogICAgICAgICAgICBtZXJnZUtleShrZXkpOwogICAgICAgIH0KCiAgICAgICAgZm9yICh2YXIga2V5JDEgaW4gY2hpbGQpIHsKICAgICAgICAgICAgaWYgKCFoYXNPd24ocGFyZW50LCBrZXkkMSkpIHsKICAgICAgICAgICAgICAgIG1lcmdlS2V5KGtleSQxKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gbWVyZ2VLZXkoa2V5KSB7CiAgICAgICAgICAgIG9wdGlvbnNba2V5XSA9IChzdHJhdHNba2V5XSB8fCBkZWZhdWx0U3RyYXQpKHBhcmVudFtrZXldLCBjaGlsZFtrZXldLCB2bSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gb3B0aW9uczsKICAgIH0KCiAgICBmdW5jdGlvbiBwYXJzZU9wdGlvbnMob3B0aW9ucywgYXJncykgewogICAgICAgIHZhciBvYmo7CgogICAgICAgIGlmICggYXJncyA9PT0gdm9pZCAwICkgYXJncyA9IFtdOwoKICAgICAgICB0cnkgewoKICAgICAgICAgICAgcmV0dXJuICFvcHRpb25zCiAgICAgICAgICAgICAgICA/IHt9CiAgICAgICAgICAgICAgICA6IHN0YXJ0c1dpdGgob3B0aW9ucywgJ3snKQogICAgICAgICAgICAgICAgICAgID8gSlNPTi5wYXJzZShvcHRpb25zKQogICAgICAgICAgICAgICAgICAgIDogYXJncy5sZW5ndGggJiYgIWluY2x1ZGVzKG9wdGlvbnMsICc6JykKICAgICAgICAgICAgICAgICAgICAgICAgPyAoKCBvYmogPSB7fSwgb2JqW2FyZ3NbMF1dID0gb3B0aW9ucywgb2JqICkpCiAgICAgICAgICAgICAgICAgICAgICAgIDogb3B0aW9ucy5zcGxpdCgnOycpLnJlZHVjZShmdW5jdGlvbiAob3B0aW9ucywgb3B0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVmID0gb3B0aW9uLnNwbGl0KC86KC4qKS8pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9IHJlZlswXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHJlZlsxXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkgJiYgIWlzVW5kZWZpbmVkKHZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNba2V5LnRyaW0oKV0gPSB2YWx1ZS50cmltKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9uczsKICAgICAgICAgICAgICAgICAgICAgICAgfSwge30pOwoKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIHJldHVybiB7fTsKICAgICAgICB9CgogICAgfQoKICAgIHZhciBpZCA9IDA7CgogICAgdmFyIFBsYXllciA9IGZ1bmN0aW9uKGVsKSB7CiAgICAgICAgdGhpcy5pZCA9ICsraWQ7CiAgICAgICAgdGhpcy5lbCA9IHRvTm9kZShlbCk7CiAgICB9OwoKICAgIFBsYXllci5wcm90b3R5cGUuaXNWaWRlbyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4gdGhpcy5pc1lvdXR1YmUoKSB8fCB0aGlzLmlzVmltZW8oKSB8fCB0aGlzLmlzSFRNTDUoKTsKICAgIH07CgogICAgUGxheWVyLnByb3RvdHlwZS5pc0hUTUw1ID0gZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiB0aGlzLmVsLnRhZ05hbWUgPT09ICdWSURFTyc7CiAgICB9OwoKICAgIFBsYXllci5wcm90b3R5cGUuaXNJRnJhbWUgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZWwudGFnTmFtZSA9PT0gJ0lGUkFNRSc7CiAgICB9OwoKICAgIFBsYXllci5wcm90b3R5cGUuaXNZb3V0dWJlID0gZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiB0aGlzLmlzSUZyYW1lKCkgJiYgISF0aGlzLmVsLnNyYy5tYXRjaCgvXC9cLy4qP3lvdXR1YmUoLW5vY29va2llKT9cLlthLXpdK1wvKHdhdGNoXD92PVteJlxzXSt8ZW1iZWQpfHlvdXR1XC5iZVwvLiovKTsKICAgIH07CgogICAgUGxheWVyLnByb3RvdHlwZS5pc1ZpbWVvID0gZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiB0aGlzLmlzSUZyYW1lKCkgJiYgISF0aGlzLmVsLnNyYy5tYXRjaCgvdmltZW9cLmNvbVwvdmlkZW9cLy4qLyk7CiAgICB9OwoKICAgIFBsYXllci5wcm90b3R5cGUuZW5hYmxlQXBpID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpczsKCgogICAgICAgIGlmICh0aGlzLnJlYWR5KSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlYWR5OwogICAgICAgIH0KCiAgICAgICAgdmFyIHlvdXR1YmUgPSB0aGlzLmlzWW91dHViZSgpOwogICAgICAgIHZhciB2aW1lbyA9IHRoaXMuaXNWaW1lbygpOwoKICAgICAgICB2YXIgcG9sbGVyOwoKICAgICAgICBpZiAoeW91dHViZSB8fCB2aW1lbykgewoKICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVhZHkgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkgewoKICAgICAgICAgICAgICAgIG9uY2UodGhpcyQxLmVsLCAnbG9hZCcsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoeW91dHViZSkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBwb3N0KHRoaXMkMS5lbCwge2V2ZW50OiAnbGlzdGVuaW5nJywgaWQ6IHRoaXMkMS5pZH0pOyB9OwogICAgICAgICAgICAgICAgICAgICAgICBwb2xsZXIgPSBzZXRJbnRlcnZhbChsaXN0ZW5lciwgMTAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICBsaXN0ZW4oZnVuY3Rpb24gKGRhdGEpIHsgcmV0dXJuIHlvdXR1YmUgJiYgZGF0YS5pZCA9PT0gdGhpcyQxLmlkICYmIGRhdGEuZXZlbnQgPT09ICdvblJlYWR5JyB8fCB2aW1lbyAmJiBOdW1iZXIoZGF0YS5wbGF5ZXJfaWQpID09PSB0aGlzJDEuaWQ7IH0pCiAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHBvbGxlciAmJiBjbGVhckludGVydmFsKHBvbGxlcik7CiAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgYXR0cih0aGlzJDEuZWwsICdzcmMnLCAoIiIgKyAodGhpcyQxLmVsLnNyYykgKyAoaW5jbHVkZXModGhpcyQxLmVsLnNyYywgJz8nKSA/ICcmJyA6ICc/JykgKyAoeW91dHViZSA/ICdlbmFibGVqc2FwaT0xJyA6ICgiYXBpPTEmcGxheWVyX2lkPSIgKyAodGhpcyQxLmlkKSkpKSk7CgogICAgICAgICAgICB9KTsKCiAgICAgICAgfQoKICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CgogICAgfTsKCiAgICBQbGF5ZXIucHJvdG90eXBlLnBsYXkgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzOwoKCiAgICAgICAgaWYgKCF0aGlzLmlzVmlkZW8oKSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBpZiAodGhpcy5pc0lGcmFtZSgpKSB7CiAgICAgICAgICAgIHRoaXMuZW5hYmxlQXBpKCkudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiBwb3N0KHRoaXMkMS5lbCwge2Z1bmM6ICdwbGF5VmlkZW8nLCBtZXRob2Q6ICdwbGF5J30pOyB9KTsKICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNIVE1MNSgpKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IHRoaXMuZWwucGxheSgpOwoKICAgICAgICAgICAgICAgIGlmIChwcm9taXNlKSB7CiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5jYXRjaChub29wKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBjYXRjaCAoZSkge30KICAgICAgICB9CiAgICB9OwoKICAgIFBsYXllci5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzOwoKCiAgICAgICAgaWYgKCF0aGlzLmlzVmlkZW8oKSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBpZiAodGhpcy5pc0lGcmFtZSgpKSB7CiAgICAgICAgICAgIHRoaXMuZW5hYmxlQXBpKCkudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiBwb3N0KHRoaXMkMS5lbCwge2Z1bmM6ICdwYXVzZVZpZGVvJywgbWV0aG9kOiAncGF1c2UnfSk7IH0pOwogICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0hUTUw1KCkpIHsKICAgICAgICAgICAgdGhpcy5lbC5wYXVzZSgpOwogICAgICAgIH0KICAgIH07CgogICAgUGxheWVyLnByb3RvdHlwZS5tdXRlID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpczsKCgogICAgICAgIGlmICghdGhpcy5pc1ZpZGVvKCkpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgaWYgKHRoaXMuaXNJRnJhbWUoKSkgewogICAgICAgICAgICB0aGlzLmVuYWJsZUFwaSgpLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4gcG9zdCh0aGlzJDEuZWwsIHtmdW5jOiAnbXV0ZScsIG1ldGhvZDogJ3NldFZvbHVtZScsIHZhbHVlOiAwfSk7IH0pOwogICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0hUTUw1KCkpIHsKICAgICAgICAgICAgdGhpcy5lbC5tdXRlZCA9IHRydWU7CiAgICAgICAgICAgIGF0dHIodGhpcy5lbCwgJ211dGVkJywgJycpOwogICAgICAgIH0KCiAgICB9OwoKICAgIGZ1bmN0aW9uIHBvc3QoZWwsIGNtZCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGVsLmNvbnRlbnRXaW5kb3cucG9zdE1lc3NhZ2UoSlNPTi5zdHJpbmdpZnkoYXNzaWduKHtldmVudDogJ2NvbW1hbmQnfSwgY21kKSksICcqJyk7CiAgICAgICAgfSBjYXRjaCAoZSkge30KICAgIH0KCiAgICBmdW5jdGlvbiBsaXN0ZW4oY2IpIHsKCiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7CgogICAgICAgICAgICBvbmNlKHdpbmRvdywgJ21lc3NhZ2UnLCBmdW5jdGlvbiAoXywgZGF0YSkgeyByZXR1cm4gcmVzb2x2ZShkYXRhKTsgfSwgZmFsc2UsIGZ1bmN0aW9uIChyZWYpIHsKICAgICAgICAgICAgICAgIHZhciBkYXRhID0gcmVmLmRhdGE7CgoKICAgICAgICAgICAgICAgIGlmICghZGF0YSB8fCAhaXNTdHJpbmcoZGF0YSkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShkYXRhKTsKICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEgJiYgY2IoZGF0YSk7CgogICAgICAgICAgICB9KTsKCiAgICAgICAgfSk7CgogICAgfQoKICAgIHZhciBJbnRlcnNlY3Rpb25PYnNlcnZlciA9ICdJbnRlcnNlY3Rpb25PYnNlcnZlcicgaW4gd2luZG93CiAgICAgICAgPyB3aW5kb3cuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIKICAgICAgICA6IC8qQF9fUFVSRV9fKi8oZnVuY3Rpb24gKCkgewogICAgICAgIGZ1bmN0aW9uIEludGVyc2VjdGlvbk9ic2VydmVyQ2xhc3MoY2FsbGJhY2ssIHJlZikgewogICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpczsKICAgICAgICAgICAgaWYgKCByZWYgPT09IHZvaWQgMCApIHJlZiA9IHt9OwogICAgICAgICAgICB2YXIgcm9vdE1hcmdpbiA9IHJlZi5yb290TWFyZ2luOyBpZiAoIHJvb3RNYXJnaW4gPT09IHZvaWQgMCApIHJvb3RNYXJnaW4gPSAnMCAwJzsKCgogICAgICAgICAgICAgICAgdGhpcy50YXJnZXRzID0gW107CgogICAgICAgICAgICAgICAgdmFyIHJlZiQxID0gKHJvb3RNYXJnaW4gfHwgJzAgMCcpLnNwbGl0KCcgJykubWFwKHRvRmxvYXQpOwogICAgICAgICAgICB2YXIgb2Zmc2V0VG9wID0gcmVmJDFbMF07CiAgICAgICAgICAgIHZhciBvZmZzZXRMZWZ0ID0gcmVmJDFbMV07CgogICAgICAgICAgICAgICAgdGhpcy5vZmZzZXRUb3AgPSBvZmZzZXRUb3A7CiAgICAgICAgICAgICAgICB0aGlzLm9mZnNldExlZnQgPSBvZmZzZXRMZWZ0OwoKICAgICAgICAgICAgICAgIHZhciBwZW5kaW5nOwogICAgICAgICAgICAgICAgdGhpcy5hcHBseSA9IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgICAgICAgICAgICAgaWYgKHBlbmRpbmcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgcGVuZGluZyA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7IHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlY29yZHMgPSB0aGlzJDEudGFrZVJlY29yZHMoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWNvcmRzLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2socmVjb3JkcywgdGhpcyQxKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0pOyB9KTsKCiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIHRoaXMub2ZmID0gb24od2luZG93LCAnc2Nyb2xsIHJlc2l6ZSBsb2FkJywgdGhpcy5hcHBseSwge3Bhc3NpdmU6IHRydWUsIGNhcHR1cmU6IHRydWV9KTsKCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIEludGVyc2VjdGlvbk9ic2VydmVyQ2xhc3MucHJvdG90eXBlLnRha2VSZWNvcmRzID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGFyZ2V0cy5maWx0ZXIoZnVuY3Rpb24gKGVudHJ5KSB7CgogICAgICAgICAgICAgICAgICAgIHZhciBpblZpZXcgPSBpc0luVmlldyhlbnRyeS50YXJnZXQsIHRoaXMkMS5vZmZzZXRUb3AsIHRoaXMkMS5vZmZzZXRMZWZ0KTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nID09PSBudWxsIHx8IGluVmlldyBeIGVudHJ5LmlzSW50ZXJzZWN0aW5nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LmlzSW50ZXJzZWN0aW5nID0gaW5WaWV3OwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH07CgogICAgICAgICAgICBJbnRlcnNlY3Rpb25PYnNlcnZlckNsYXNzLnByb3RvdHlwZS5vYnNlcnZlID0gZnVuY3Rpb24gKHRhcmdldCkgewogICAgICAgICAgICAgICAgdGhpcy50YXJnZXRzLnB1c2goewogICAgICAgICAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0LAogICAgICAgICAgICAgICAgICAgIGlzSW50ZXJzZWN0aW5nOiBudWxsCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIHRoaXMuYXBwbHkoKTsKICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIEludGVyc2VjdGlvbk9ic2VydmVyQ2xhc3MucHJvdG90eXBlLmRpc2Nvbm5lY3QgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICB0aGlzLnRhcmdldHMgPSBbXTsKICAgICAgICAgICAgICAgIHRoaXMub2ZmKCk7CiAgICAgICAgICAgIH07CgogICAgICAgIHJldHVybiBJbnRlcnNlY3Rpb25PYnNlcnZlckNsYXNzOwogICAgfSgpKTsKCgoKICAgIHZhciB1dGlsID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoewogICAgICAgIGFqYXg6IGFqYXgsCiAgICAgICAgZ2V0SW1hZ2U6IGdldEltYWdlLAogICAgICAgIHRyYW5zaXRpb246IHRyYW5zaXRpb24sCiAgICAgICAgVHJhbnNpdGlvbjogVHJhbnNpdGlvbiwKICAgICAgICBhbmltYXRlOiBhbmltYXRlLAogICAgICAgIEFuaW1hdGlvbjogQW5pbWF0aW9uLAogICAgICAgIGF0dHI6IGF0dHIsCiAgICAgICAgaGFzQXR0cjogaGFzQXR0ciwKICAgICAgICByZW1vdmVBdHRyOiByZW1vdmVBdHRyLAogICAgICAgIGRhdGE6IGRhdGEsCiAgICAgICAgYWRkQ2xhc3M6IGFkZENsYXNzLAogICAgICAgIHJlbW92ZUNsYXNzOiByZW1vdmVDbGFzcywKICAgICAgICByZW1vdmVDbGFzc2VzOiByZW1vdmVDbGFzc2VzLAogICAgICAgIHJlcGxhY2VDbGFzczogcmVwbGFjZUNsYXNzLAogICAgICAgIGhhc0NsYXNzOiBoYXNDbGFzcywKICAgICAgICB0b2dnbGVDbGFzczogdG9nZ2xlQ2xhc3MsCiAgICAgICAgcG9zaXRpb25BdDogcG9zaXRpb25BdCwKICAgICAgICBvZmZzZXQ6IG9mZnNldCwKICAgICAgICBwb3NpdGlvbjogcG9zaXRpb24sCiAgICAgICAgaGVpZ2h0OiBoZWlnaHQsCiAgICAgICAgd2lkdGg6IHdpZHRoLAogICAgICAgIGJveE1vZGVsQWRqdXN0OiBib3hNb2RlbEFkanVzdCwKICAgICAgICBmbGlwUG9zaXRpb246IGZsaXBQb3NpdGlvbiwKICAgICAgICBpc0luVmlldzogaXNJblZpZXcsCiAgICAgICAgc2Nyb2xsZWRPdmVyOiBzY3JvbGxlZE92ZXIsCiAgICAgICAgc2Nyb2xsVG9wOiBzY3JvbGxUb3AsCiAgICAgICAgb2Zmc2V0UG9zaXRpb246IG9mZnNldFBvc2l0aW9uLAogICAgICAgIHRvUHg6IHRvUHgsCiAgICAgICAgcmVhZHk6IHJlYWR5LAogICAgICAgIGluZGV4OiBpbmRleCwKICAgICAgICBnZXRJbmRleDogZ2V0SW5kZXgsCiAgICAgICAgZW1wdHk6IGVtcHR5LAogICAgICAgIGh0bWw6IGh0bWwsCiAgICAgICAgcHJlcGVuZDogcHJlcGVuZCwKICAgICAgICBhcHBlbmQ6IGFwcGVuZCwKICAgICAgICBiZWZvcmU6IGJlZm9yZSwKICAgICAgICBhZnRlcjogYWZ0ZXIsCiAgICAgICAgcmVtb3ZlOiByZW1vdmUsCiAgICAgICAgd3JhcEFsbDogd3JhcEFsbCwKICAgICAgICB3cmFwSW5uZXI6IHdyYXBJbm5lciwKICAgICAgICB1bndyYXA6IHVud3JhcCwKICAgICAgICBmcmFnbWVudDogZnJhZ21lbnQsCiAgICAgICAgYXBwbHk6IGFwcGx5LAogICAgICAgICQ6ICQsCiAgICAgICAgJCQ6ICQkLAogICAgICAgIGlzSUU6IGlzSUUsCiAgICAgICAgaXNSdGw6IGlzUnRsLAogICAgICAgIGhhc1RvdWNoOiBoYXNUb3VjaCwKICAgICAgICBwb2ludGVyRG93bjogcG9pbnRlckRvd24sCiAgICAgICAgcG9pbnRlck1vdmU6IHBvaW50ZXJNb3ZlLAogICAgICAgIHBvaW50ZXJVcDogcG9pbnRlclVwLAogICAgICAgIHBvaW50ZXJFbnRlcjogcG9pbnRlckVudGVyLAogICAgICAgIHBvaW50ZXJMZWF2ZTogcG9pbnRlckxlYXZlLAogICAgICAgIHBvaW50ZXJDYW5jZWw6IHBvaW50ZXJDYW5jZWwsCiAgICAgICAgb246IG9uLAogICAgICAgIG9mZjogb2ZmLAogICAgICAgIG9uY2U6IG9uY2UsCiAgICAgICAgdHJpZ2dlcjogdHJpZ2dlciwKICAgICAgICBjcmVhdGVFdmVudDogY3JlYXRlRXZlbnQsCiAgICAgICAgdG9FdmVudFRhcmdldHM6IHRvRXZlbnRUYXJnZXRzLAogICAgICAgIGlzVG91Y2g6IGlzVG91Y2gsCiAgICAgICAgZ2V0RXZlbnRQb3M6IGdldEV2ZW50UG9zLAogICAgICAgIGZhc3Rkb206IGZhc3Rkb20sCiAgICAgICAgaXNWb2lkRWxlbWVudDogaXNWb2lkRWxlbWVudCwKICAgICAgICBpc1Zpc2libGU6IGlzVmlzaWJsZSwKICAgICAgICBzZWxJbnB1dDogc2VsSW5wdXQsCiAgICAgICAgaXNJbnB1dDogaXNJbnB1dCwKICAgICAgICBmaWx0ZXI6IGZpbHRlciwKICAgICAgICB3aXRoaW46IHdpdGhpbiwKICAgICAgICBoYXNPd246IGhhc093biwKICAgICAgICBoeXBoZW5hdGU6IGh5cGhlbmF0ZSwKICAgICAgICBjYW1lbGl6ZTogY2FtZWxpemUsCiAgICAgICAgdWNmaXJzdDogdWNmaXJzdCwKICAgICAgICBzdGFydHNXaXRoOiBzdGFydHNXaXRoLAogICAgICAgIGVuZHNXaXRoOiBlbmRzV2l0aCwKICAgICAgICBpbmNsdWRlczogaW5jbHVkZXMsCiAgICAgICAgZmluZEluZGV4OiBmaW5kSW5kZXgsCiAgICAgICAgaXNBcnJheTogaXNBcnJheSwKICAgICAgICBpc0Z1bmN0aW9uOiBpc0Z1bmN0aW9uLAogICAgICAgIGlzT2JqZWN0OiBpc09iamVjdCwKICAgICAgICBpc1BsYWluT2JqZWN0OiBpc1BsYWluT2JqZWN0LAogICAgICAgIGlzV2luZG93OiBpc1dpbmRvdywKICAgICAgICBpc0RvY3VtZW50OiBpc0RvY3VtZW50LAogICAgICAgIGlzSlF1ZXJ5OiBpc0pRdWVyeSwKICAgICAgICBpc05vZGU6IGlzTm9kZSwKICAgICAgICBpc05vZGVDb2xsZWN0aW9uOiBpc05vZGVDb2xsZWN0aW9uLAogICAgICAgIGlzQm9vbGVhbjogaXNCb29sZWFuLAogICAgICAgIGlzU3RyaW5nOiBpc1N0cmluZywKICAgICAgICBpc051bWJlcjogaXNOdW1iZXIsCiAgICAgICAgaXNOdW1lcmljOiBpc051bWVyaWMsCiAgICAgICAgaXNFbXB0eTogaXNFbXB0eSwKICAgICAgICBpc1VuZGVmaW5lZDogaXNVbmRlZmluZWQsCiAgICAgICAgdG9Cb29sZWFuOiB0b0Jvb2xlYW4sCiAgICAgICAgdG9OdW1iZXI6IHRvTnVtYmVyLAogICAgICAgIHRvRmxvYXQ6IHRvRmxvYXQsCiAgICAgICAgdG9Ob2RlOiB0b05vZGUsCiAgICAgICAgdG9Ob2RlczogdG9Ob2RlcywKICAgICAgICB0b0xpc3Q6IHRvTGlzdCwKICAgICAgICB0b01zOiB0b01zLAogICAgICAgIGlzRXF1YWw6IGlzRXF1YWwsCiAgICAgICAgc3dhcDogc3dhcCwKICAgICAgICBhc3NpZ246IGFzc2lnbiwKICAgICAgICBsYXN0OiBsYXN0LAogICAgICAgIGVhY2g6IGVhY2gsCiAgICAgICAgc29ydEJ5OiBzb3J0QnksCiAgICAgICAgdW5pcXVlQnk6IHVuaXF1ZUJ5LAogICAgICAgIGNsYW1wOiBjbGFtcCwKICAgICAgICBub29wOiBub29wLAogICAgICAgIGludGVyc2VjdFJlY3Q6IGludGVyc2VjdFJlY3QsCiAgICAgICAgcG9pbnRJblJlY3Q6IHBvaW50SW5SZWN0LAogICAgICAgIERpbWVuc2lvbnM6IERpbWVuc2lvbnMsCiAgICAgICAgTW91c2VUcmFja2VyOiBNb3VzZVRyYWNrZXIsCiAgICAgICAgbWVyZ2VPcHRpb25zOiBtZXJnZU9wdGlvbnMsCiAgICAgICAgcGFyc2VPcHRpb25zOiBwYXJzZU9wdGlvbnMsCiAgICAgICAgUGxheWVyOiBQbGF5ZXIsCiAgICAgICAgUHJvbWlzZTogUHJvbWlzZSwKICAgICAgICBEZWZlcnJlZDogRGVmZXJyZWQsCiAgICAgICAgSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6IEludGVyc2VjdGlvbk9ic2VydmVyLAogICAgICAgIHF1ZXJ5OiBxdWVyeSwKICAgICAgICBxdWVyeUFsbDogcXVlcnlBbGwsCiAgICAgICAgZmluZDogZmluZCwKICAgICAgICBmaW5kQWxsOiBmaW5kQWxsLAogICAgICAgIG1hdGNoZXM6IG1hdGNoZXMsCiAgICAgICAgY2xvc2VzdDogY2xvc2VzdCwKICAgICAgICBwYXJlbnRzOiBwYXJlbnRzLAogICAgICAgIGVzY2FwZTogZXNjYXBlLAogICAgICAgIGNzczogY3NzLAogICAgICAgIGdldFN0eWxlczogZ2V0U3R5bGVzLAogICAgICAgIGdldFN0eWxlOiBnZXRTdHlsZSwKICAgICAgICBnZXRDc3NWYXI6IGdldENzc1ZhciwKICAgICAgICBwcm9wTmFtZTogcHJvcE5hbWUKICAgIH0pOwoKICAgIGZ1bmN0aW9uIGNvbXBvbmVudEFQSSAoVUlraXQpIHsKCiAgICAgICAgdmFyIERBVEEgPSBVSWtpdC5kYXRhOwoKICAgICAgICB2YXIgY29tcG9uZW50cyA9IHt9OwoKICAgICAgICBVSWtpdC5jb21wb25lbnQgPSBmdW5jdGlvbiAobmFtZSwgb3B0aW9ucykgewoKICAgICAgICAgICAgaWYgKCFvcHRpb25zKSB7CgogICAgICAgICAgICAgICAgaWYgKGlzUGxhaW5PYmplY3QoY29tcG9uZW50c1tuYW1lXSkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzW25hbWVdID0gVUlraXQuZXh0ZW5kKGNvbXBvbmVudHNbbmFtZV0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiBjb21wb25lbnRzW25hbWVdOwoKICAgICAgICAgICAgfQoKICAgICAgICAgICAgVUlraXRbbmFtZV0gPSBmdW5jdGlvbiAoZWxlbWVudCwgZGF0YSkgewogICAgICAgICAgICAgICAgdmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzQXJyYXkgPSBBcnJheShpKTsKICAgICAgICAgICAgICAgIHdoaWxlICggaS0tICkgYXJnc0FycmF5W2ldID0gYXJndW1lbnRzW2ldOwoKCiAgICAgICAgICAgICAgICB2YXIgY29tcG9uZW50ID0gVUlraXQuY29tcG9uZW50KG5hbWUpOwoKICAgICAgICAgICAgICAgIGlmIChpc1BsYWluT2JqZWN0KGVsZW1lbnQpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBjb21wb25lbnQoe2RhdGE6IGVsZW1lbnR9KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50Lm9wdGlvbnMuZnVuY3Rpb25hbCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgY29tcG9uZW50KHtkYXRhOiBbXS5jb25jYXQoIGFyZ3NBcnJheSApfSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQgJiYgZWxlbWVudC5ub2RlVHlwZSA/IGluaXQoZWxlbWVudCkgOiAkJChlbGVtZW50KS5tYXAoaW5pdClbMF07CgogICAgICAgICAgICAgICAgZnVuY3Rpb24gaW5pdChlbGVtZW50KSB7CgogICAgICAgICAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IFVJa2l0LmdldENvbXBvbmVudChlbGVtZW50LCBuYW1lKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGF0YSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuJGRlc3Ryb3koKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBjb21wb25lbnQoe2VsOiBlbGVtZW50LCBkYXRhOiBkYXRhfSk7CgogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIHZhciBvcHQgPSBpc1BsYWluT2JqZWN0KG9wdGlvbnMpID8gYXNzaWduKHt9LCBvcHRpb25zKSA6IG9wdGlvbnMub3B0aW9uczsKCiAgICAgICAgICAgIG9wdC5uYW1lID0gbmFtZTsKCiAgICAgICAgICAgIGlmIChvcHQuaW5zdGFsbCkgewogICAgICAgICAgICAgICAgb3B0Lmluc3RhbGwoVUlraXQsIG9wdCwgbmFtZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChVSWtpdC5faW5pdGlhbGl6ZWQgJiYgIW9wdC5mdW5jdGlvbmFsKSB7CiAgICAgICAgICAgICAgICB2YXIgaWQgPSBoeXBoZW5hdGUobmFtZSk7CiAgICAgICAgICAgICAgICBmYXN0ZG9tLnJlYWQoZnVuY3Rpb24gKCkgeyByZXR1cm4gVUlraXRbbmFtZV0oKCJbdWstIiArIGlkICsgIl0sW2RhdGEtdWstIiArIGlkICsgIl0iKSk7IH0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gY29tcG9uZW50c1tuYW1lXSA9IGlzUGxhaW5PYmplY3Qob3B0aW9ucykgPyBvcHQgOiBvcHRpb25zOwogICAgICAgIH07CgogICAgICAgIFVJa2l0LmdldENvbXBvbmVudHMgPSBmdW5jdGlvbiAoZWxlbWVudCkgeyByZXR1cm4gZWxlbWVudCAmJiBlbGVtZW50W0RBVEFdIHx8IHt9OyB9OwogICAgICAgIFVJa2l0LmdldENvbXBvbmVudCA9IGZ1bmN0aW9uIChlbGVtZW50LCBuYW1lKSB7IHJldHVybiBVSWtpdC5nZXRDb21wb25lbnRzKGVsZW1lbnQpW25hbWVdOyB9OwoKICAgICAgICBVSWtpdC5jb25uZWN0ID0gZnVuY3Rpb24gKG5vZGUpIHsKCiAgICAgICAgICAgIGlmIChub2RlW0RBVEFdKSB7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIG5vZGVbREFUQV0pIHsKICAgICAgICAgICAgICAgICAgICBub2RlW0RBVEFdW25hbWVdLl9jYWxsQ29ubmVjdGVkKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7CgogICAgICAgICAgICAgICAgdmFyIG5hbWUkMSA9IGdldENvbXBvbmVudE5hbWUobm9kZS5hdHRyaWJ1dGVzW2ldLm5hbWUpOwoKICAgICAgICAgICAgICAgIGlmIChuYW1lJDEgJiYgbmFtZSQxIGluIGNvbXBvbmVudHMpIHsKICAgICAgICAgICAgICAgICAgICBVSWtpdFtuYW1lJDFdKG5vZGUpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfQoKICAgICAgICB9OwoKICAgICAgICBVSWtpdC5kaXNjb25uZWN0ID0gZnVuY3Rpb24gKG5vZGUpIHsKICAgICAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBub2RlW0RBVEFdKSB7CiAgICAgICAgICAgICAgICBub2RlW0RBVEFdW25hbWVdLl9jYWxsRGlzY29ubmVjdGVkKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRDb21wb25lbnROYW1lKGF0dHJpYnV0ZSkgewogICAgICAgIHJldHVybiBzdGFydHNXaXRoKGF0dHJpYnV0ZSwgJ3VrLScpIHx8IHN0YXJ0c1dpdGgoYXR0cmlidXRlLCAnZGF0YS11ay0nKQogICAgICAgICAgICA/IGNhbWVsaXplKGF0dHJpYnV0ZS5yZXBsYWNlKCdkYXRhLXVrLScsICcnKS5yZXBsYWNlKCd1ay0nLCAnJykpCiAgICAgICAgICAgIDogZmFsc2U7CiAgICB9CgogICAgZnVuY3Rpb24gYm9vdCAoVUlraXQpIHsKCiAgICAgICAgdmFyIGNvbm5lY3QgPSBVSWtpdC5jb25uZWN0OwogICAgICAgIHZhciBkaXNjb25uZWN0ID0gVUlraXQuZGlzY29ubmVjdDsKCiAgICAgICAgaWYgKCEoJ011dGF0aW9uT2JzZXJ2ZXInIGluIHdpbmRvdykpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgaWYgKGRvY3VtZW50LmJvZHkpIHsKCiAgICAgICAgICAgIGZhc3Rkb20ucmVhZChpbml0KTsKCiAgICAgICAgfSBlbHNlIHsKCiAgICAgICAgICAgIChuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAoKSB7CgogICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmJvZHkpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc2Nvbm5lY3QoKTsKICAgICAgICAgICAgICAgICAgICBpbml0KCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9KSkub2JzZXJ2ZShkb2N1bWVudCwge2NoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZX0pOwoKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGluaXQoKSB7CgogICAgICAgICAgICBhcHBseShkb2N1bWVudC5ib2R5LCBjb25uZWN0KTsKCiAgICAgICAgICAgIC8vIFNhZmFyaSByZW5kZXJzIHByaW9yIHRvIGZpcnN0IGFuaW1hdGlvbiBmcmFtZQogICAgICAgICAgICBmYXN0ZG9tLmZsdXNoKCk7CgogICAgICAgICAgICAobmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKG11dGF0aW9ucykgeyByZXR1cm4gbXV0YXRpb25zLmZvckVhY2goYXBwbHlNdXRhdGlvbik7IH0pKS5vYnNlcnZlKGRvY3VtZW50LCB7CiAgICAgICAgICAgICAgICBjaGlsZExpc3Q6IHRydWUsCiAgICAgICAgICAgICAgICBzdWJ0cmVlOiB0cnVlLAogICAgICAgICAgICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSwKICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHRydWUKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICBVSWtpdC5faW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gYXBwbHlNdXRhdGlvbihtdXRhdGlvbikgewoKICAgICAgICAgICAgdmFyIHRhcmdldCA9IG11dGF0aW9uLnRhcmdldDsKICAgICAgICAgICAgdmFyIHR5cGUgPSBtdXRhdGlvbi50eXBlOwoKICAgICAgICAgICAgdmFyIHVwZGF0ZSA9IHR5cGUgIT09ICdhdHRyaWJ1dGVzJwogICAgICAgICAgICAgICAgPyBhcHBseUNoaWxkTGlzdChtdXRhdGlvbikKICAgICAgICAgICAgICAgIDogYXBwbHlBdHRyaWJ1dGUobXV0YXRpb24pOwoKICAgICAgICAgICAgdXBkYXRlICYmIFVJa2l0LnVwZGF0ZSh0YXJnZXQpOwoKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGFwcGx5QXR0cmlidXRlKHJlZikgewogICAgICAgICAgICB2YXIgdGFyZ2V0ID0gcmVmLnRhcmdldDsKICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZU5hbWUgPSByZWYuYXR0cmlidXRlTmFtZTsKCgogICAgICAgICAgICBpZiAoYXR0cmlidXRlTmFtZSA9PT0gJ2hyZWYnKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKGF0dHJpYnV0ZU5hbWUpOwoKICAgICAgICAgICAgaWYgKCFuYW1lIHx8ICEobmFtZSBpbiBVSWtpdCkpIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGhhc0F0dHIodGFyZ2V0LCBhdHRyaWJ1dGVOYW1lKSkgewogICAgICAgICAgICAgICAgVUlraXRbbmFtZV0odGFyZ2V0KTsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcG9uZW50ID0gVUlraXQuZ2V0Q29tcG9uZW50KHRhcmdldCwgbmFtZSk7CgogICAgICAgICAgICBpZiAoY29tcG9uZW50KSB7CiAgICAgICAgICAgICAgICBjb21wb25lbnQuJGRlc3Ryb3koKTsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gYXBwbHlDaGlsZExpc3QocmVmKSB7CiAgICAgICAgICAgIHZhciBhZGRlZE5vZGVzID0gcmVmLmFkZGVkTm9kZXM7CiAgICAgICAgICAgIHZhciByZW1vdmVkTm9kZXMgPSByZWYucmVtb3ZlZE5vZGVzOwoKCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWRkZWROb2Rlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgYXBwbHkoYWRkZWROb2Rlc1tpXSwgY29ubmVjdCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IHJlbW92ZWROb2Rlcy5sZW5ndGg7IGkkMSsrKSB7CiAgICAgICAgICAgICAgICBhcHBseShyZW1vdmVkTm9kZXNbaSQxXSwgZGlzY29ubmVjdCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gYXBwbHkobm9kZSwgZm4pIHsKCiAgICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlICE9PSAxIHx8IGhhc0F0dHIobm9kZSwgJ3VrLW5vLWJvb3QnKSkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICBmbihub2RlKTsKICAgICAgICAgICAgbm9kZSA9IG5vZGUuZmlyc3RFbGVtZW50Q2hpbGQ7CiAgICAgICAgICAgIHdoaWxlIChub2RlKSB7CiAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IG5vZGUubmV4dEVsZW1lbnRTaWJsaW5nOwogICAgICAgICAgICAgICAgYXBwbHkobm9kZSwgZm4pOwogICAgICAgICAgICAgICAgbm9kZSA9IG5leHQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgfQoKICAgIGZ1bmN0aW9uIGdsb2JhbEFQSSAoVUlraXQpIHsKCiAgICAgICAgdmFyIERBVEEgPSBVSWtpdC5kYXRhOwoKICAgICAgICBVSWtpdC51c2UgPSBmdW5jdGlvbiAocGx1Z2luKSB7CgogICAgICAgICAgICBpZiAocGx1Z2luLmluc3RhbGxlZCkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICBwbHVnaW4uY2FsbChudWxsLCB0aGlzKTsKICAgICAgICAgICAgcGx1Z2luLmluc3RhbGxlZCA9IHRydWU7CgogICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9OwoKICAgICAgICBVSWtpdC5taXhpbiA9IGZ1bmN0aW9uIChtaXhpbiwgY29tcG9uZW50KSB7CiAgICAgICAgICAgIGNvbXBvbmVudCA9IChpc1N0cmluZyhjb21wb25lbnQpID8gVUlraXQuY29tcG9uZW50KGNvbXBvbmVudCkgOiBjb21wb25lbnQpIHx8IHRoaXM7CiAgICAgICAgICAgIGNvbXBvbmVudC5vcHRpb25zID0gbWVyZ2VPcHRpb25zKGNvbXBvbmVudC5vcHRpb25zLCBtaXhpbik7CiAgICAgICAgfTsKCiAgICAgICAgVUlraXQuZXh0ZW5kID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKCiAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwoKICAgICAgICAgICAgdmFyIFN1cGVyID0gdGhpczsKICAgICAgICAgICAgdmFyIFN1YiA9IGZ1bmN0aW9uIFVJa2l0Q29tcG9uZW50KG9wdGlvbnMpIHsKICAgICAgICAgICAgICAgIHRoaXMuX2luaXQob3B0aW9ucyk7CiAgICAgICAgICAgIH07CgogICAgICAgICAgICBTdWIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTdXBlci5wcm90b3R5cGUpOwogICAgICAgICAgICBTdWIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ViOwogICAgICAgICAgICBTdWIub3B0aW9ucyA9IG1lcmdlT3B0aW9ucyhTdXBlci5vcHRpb25zLCBvcHRpb25zKTsKCiAgICAgICAgICAgIFN1Yi5zdXBlciA9IFN1cGVyOwogICAgICAgICAgICBTdWIuZXh0ZW5kID0gU3VwZXIuZXh0ZW5kOwoKICAgICAgICAgICAgcmV0dXJuIFN1YjsKICAgICAgICB9OwoKICAgICAgICBVSWtpdC51cGRhdGUgPSBmdW5jdGlvbiAoZWxlbWVudCwgZSkgewoKICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQgPyB0b05vZGUoZWxlbWVudCkgOiBkb2N1bWVudC5ib2R5OwoKICAgICAgICAgICAgcGF0aChlbGVtZW50LCBmdW5jdGlvbiAoZWxlbWVudCkgeyByZXR1cm4gdXBkYXRlKGVsZW1lbnRbREFUQV0sIGUpOyB9KTsKICAgICAgICAgICAgYXBwbHkoZWxlbWVudCwgZnVuY3Rpb24gKGVsZW1lbnQpIHsgcmV0dXJuIHVwZGF0ZShlbGVtZW50W0RBVEFdLCBlKTsgfSk7CgogICAgICAgIH07CgogICAgICAgIHZhciBjb250YWluZXI7CiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFVJa2l0LCAnY29udGFpbmVyJywgewoKICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiBjb250YWluZXIgfHwgZG9jdW1lbnQuYm9keTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCkgewogICAgICAgICAgICAgICAgY29udGFpbmVyID0gJChlbGVtZW50KTsKICAgICAgICAgICAgfQoKICAgICAgICB9KTsKCiAgICAgICAgZnVuY3Rpb24gdXBkYXRlKGRhdGEsIGUpIHsKCiAgICAgICAgICAgIGlmICghZGF0YSkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIGRhdGEpIHsKICAgICAgICAgICAgICAgIGlmIChkYXRhW25hbWVdLl9jb25uZWN0ZWQpIHsKICAgICAgICAgICAgICAgICAgICBkYXRhW25hbWVdLl9jYWxsVXBkYXRlKGUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gcGF0aChub2RlLCBmbikgewogICAgICAgICAgICBpZiAobm9kZSAmJiBub2RlICE9PSBkb2N1bWVudC5ib2R5ICYmIG5vZGUucGFyZW50Tm9kZSkgewogICAgICAgICAgICAgICAgcGF0aChub2RlLnBhcmVudE5vZGUsIGZuKTsKICAgICAgICAgICAgICAgIGZuKG5vZGUucGFyZW50Tm9kZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgfQoKICAgIGZ1bmN0aW9uIGhvb2tzQVBJIChVSWtpdCkgewoKICAgICAgICBVSWtpdC5wcm90b3R5cGUuX2NhbGxIb29rID0gZnVuY3Rpb24gKGhvb2spIHsKICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7CgoKICAgICAgICAgICAgdmFyIGhhbmRsZXJzID0gdGhpcy4kb3B0aW9uc1tob29rXTsKCiAgICAgICAgICAgIGlmIChoYW5kbGVycykgewogICAgICAgICAgICAgICAgaGFuZGxlcnMuZm9yRWFjaChmdW5jdGlvbiAoaGFuZGxlcikgeyByZXR1cm4gaGFuZGxlci5jYWxsKHRoaXMkMSk7IH0pOwogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgVUlraXQucHJvdG90eXBlLl9jYWxsQ29ubmVjdGVkID0gZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgaWYgKHRoaXMuX2Nvbm5lY3RlZCkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICB0aGlzLl9kYXRhID0ge307CiAgICAgICAgICAgIHRoaXMuX2NvbXB1dGVkcyA9IHt9OwogICAgICAgICAgICB0aGlzLl9pbml0UHJvcHMoKTsKCiAgICAgICAgICAgIHRoaXMuX2NhbGxIb29rKCdiZWZvcmVDb25uZWN0Jyk7CiAgICAgICAgICAgIHRoaXMuX2Nvbm5lY3RlZCA9IHRydWU7CgogICAgICAgICAgICB0aGlzLl9pbml0RXZlbnRzKCk7CiAgICAgICAgICAgIHRoaXMuX2luaXRPYnNlcnZlcigpOwoKICAgICAgICAgICAgdGhpcy5fY2FsbEhvb2soJ2Nvbm5lY3RlZCcpOwogICAgICAgICAgICB0aGlzLl9jYWxsVXBkYXRlKCk7CiAgICAgICAgfTsKCiAgICAgICAgVUlraXQucHJvdG90eXBlLl9jYWxsRGlzY29ubmVjdGVkID0gZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgaWYgKCF0aGlzLl9jb25uZWN0ZWQpIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdGhpcy5fY2FsbEhvb2soJ2JlZm9yZURpc2Nvbm5lY3QnKTsKCiAgICAgICAgICAgIGlmICh0aGlzLl9vYnNlcnZlcikgewogICAgICAgICAgICAgICAgdGhpcy5fb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwogICAgICAgICAgICAgICAgdGhpcy5fb2JzZXJ2ZXIgPSBudWxsOwogICAgICAgICAgICB9CgogICAgICAgICAgICB0aGlzLl91bmJpbmRFdmVudHMoKTsKICAgICAgICAgICAgdGhpcy5fY2FsbEhvb2soJ2Rpc2Nvbm5lY3RlZCcpOwoKICAgICAgICAgICAgdGhpcy5fY29ubmVjdGVkID0gZmFsc2U7CgogICAgICAgIH07CgogICAgICAgIFVJa2l0LnByb3RvdHlwZS5fY2FsbFVwZGF0ZSA9IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzOwogICAgICAgICAgICBpZiAoIGUgPT09IHZvaWQgMCApIGUgPSAndXBkYXRlJzsKCgogICAgICAgICAgICB2YXIgdHlwZSA9IGUudHlwZSB8fCBlOwoKICAgICAgICAgICAgaWYgKGluY2x1ZGVzKFsndXBkYXRlJywgJ3Jlc2l6ZSddLCB0eXBlKSkgewogICAgICAgICAgICAgICAgdGhpcy5fY2FsbFdhdGNoZXMoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIHVwZGF0ZXMgPSB0aGlzLiRvcHRpb25zLnVwZGF0ZTsKICAgICAgICAgICAgdmFyIHJlZiA9IHRoaXMuX2ZyYW1lczsKICAgICAgICAgICAgdmFyIHJlYWRzID0gcmVmLnJlYWRzOwogICAgICAgICAgICB2YXIgd3JpdGVzID0gcmVmLndyaXRlczsKCiAgICAgICAgICAgIGlmICghdXBkYXRlcykgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICB1cGRhdGVzLmZvckVhY2goZnVuY3Rpb24gKHJlZiwgaSkgewogICAgICAgICAgICAgICAgdmFyIHJlYWQgPSByZWYucmVhZDsKICAgICAgICAgICAgICAgIHZhciB3cml0ZSA9IHJlZi53cml0ZTsKICAgICAgICAgICAgICAgIHZhciBldmVudHMgPSByZWYuZXZlbnRzOwoKCiAgICAgICAgICAgICAgICBpZiAodHlwZSAhPT0gJ3VwZGF0ZScgJiYgIWluY2x1ZGVzKGV2ZW50cywgdHlwZSkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKHJlYWQgJiYgIWluY2x1ZGVzKGZhc3Rkb20ucmVhZHMsIHJlYWRzW2ldKSkgewogICAgICAgICAgICAgICAgICAgIHJlYWRzW2ldID0gZmFzdGRvbS5yZWFkKGZ1bmN0aW9uICgpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzJDEuX2Nvbm5lY3RlZCAmJiByZWFkLmNhbGwodGhpcyQxLCB0aGlzJDEuX2RhdGEsIHR5cGUpOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gZmFsc2UgJiYgd3JpdGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhc3Rkb20uY2xlYXIod3JpdGVzW2ldKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHJlc3VsdCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2lnbih0aGlzJDEuX2RhdGEsIHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAod3JpdGUgJiYgIWluY2x1ZGVzKGZhc3Rkb20ud3JpdGVzLCB3cml0ZXNbaV0pKSB7CiAgICAgICAgICAgICAgICAgICAgd3JpdGVzW2ldID0gZmFzdGRvbS53cml0ZShmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzJDEuX2Nvbm5lY3RlZCAmJiB3cml0ZS5jYWxsKHRoaXMkMSwgdGhpcyQxLl9kYXRhLCB0eXBlKTsgfSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9KTsKCiAgICAgICAgfTsKCiAgICB9CgogICAgZnVuY3Rpb24gc3RhdGVBUEkgKFVJa2l0KSB7CgogICAgICAgIHZhciB1aWQgPSAwOwoKICAgICAgICBVSWtpdC5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiAob3B0aW9ucykgewoKICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CiAgICAgICAgICAgIG9wdGlvbnMuZGF0YSA9IG5vcm1hbGl6ZURhdGEob3B0aW9ucywgdGhpcy5jb25zdHJ1Y3Rvci5vcHRpb25zKTsKCiAgICAgICAgICAgIHRoaXMuJG9wdGlvbnMgPSBtZXJnZU9wdGlvbnModGhpcy5jb25zdHJ1Y3Rvci5vcHRpb25zLCBvcHRpb25zLCB0aGlzKTsKICAgICAgICAgICAgdGhpcy4kZWwgPSBudWxsOwogICAgICAgICAgICB0aGlzLiRwcm9wcyA9IHt9OwoKICAgICAgICAgICAgdGhpcy5fZnJhbWVzID0ge3JlYWRzOiB7fSwgd3JpdGVzOiB7fX07CiAgICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IFtdOwoKICAgICAgICAgICAgdGhpcy5fdWlkID0gdWlkKys7CiAgICAgICAgICAgIHRoaXMuX2luaXREYXRhKCk7CiAgICAgICAgICAgIHRoaXMuX2luaXRNZXRob2RzKCk7CiAgICAgICAgICAgIHRoaXMuX2luaXRDb21wdXRlZHMoKTsKICAgICAgICAgICAgdGhpcy5fY2FsbEhvb2soJ2NyZWF0ZWQnKTsKCiAgICAgICAgICAgIGlmIChvcHRpb25zLmVsKSB7CiAgICAgICAgICAgICAgICB0aGlzLiRtb3VudChvcHRpb25zLmVsKTsKICAgICAgICAgICAgfQogICAgICAgIH07CgogICAgICAgIFVJa2l0LnByb3RvdHlwZS5faW5pdERhdGEgPSBmdW5jdGlvbiAoKSB7CgogICAgICAgICAgICB2YXIgcmVmID0gdGhpcy4kb3B0aW9uczsKICAgICAgICAgICAgdmFyIGRhdGEgPSByZWYuZGF0YTsgaWYgKCBkYXRhID09PSB2b2lkIDAgKSBkYXRhID0ge307CgogICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gZGF0YSkgewogICAgICAgICAgICAgICAgdGhpcy4kcHJvcHNba2V5XSA9IHRoaXNba2V5XSA9IGRhdGFba2V5XTsKICAgICAgICAgICAgfQogICAgICAgIH07CgogICAgICAgIFVJa2l0LnByb3RvdHlwZS5faW5pdE1ldGhvZHMgPSBmdW5jdGlvbiAoKSB7CgogICAgICAgICAgICB2YXIgcmVmID0gdGhpcy4kb3B0aW9uczsKICAgICAgICAgICAgdmFyIG1ldGhvZHMgPSByZWYubWV0aG9kczsKCiAgICAgICAgICAgIGlmIChtZXRob2RzKSB7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gbWV0aG9kcykgewogICAgICAgICAgICAgICAgICAgIHRoaXNba2V5XSA9IG1ldGhvZHNba2V5XS5iaW5kKHRoaXMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgVUlraXQucHJvdG90eXBlLl9pbml0Q29tcHV0ZWRzID0gZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgdmFyIHJlZiA9IHRoaXMuJG9wdGlvbnM7CiAgICAgICAgICAgIHZhciBjb21wdXRlZCA9IHJlZi5jb21wdXRlZDsKCiAgICAgICAgICAgIHRoaXMuX2NvbXB1dGVkcyA9IHt9OwoKICAgICAgICAgICAgaWYgKGNvbXB1dGVkKSB7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gY29tcHV0ZWQpIHsKICAgICAgICAgICAgICAgICAgICByZWdpc3RlckNvbXB1dGVkKHRoaXMsIGtleSwgY29tcHV0ZWRba2V5XSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICBVSWtpdC5wcm90b3R5cGUuX2NhbGxXYXRjaGVzID0gZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgdmFyIHJlZiA9IHRoaXM7CiAgICAgICAgICAgIHZhciBjb21wdXRlZCA9IHJlZi4kb3B0aW9ucy5jb21wdXRlZDsKICAgICAgICAgICAgdmFyIF9jb21wdXRlZHMgPSByZWYuX2NvbXB1dGVkczsKCiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBfY29tcHV0ZWRzKSB7CgogICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gX2NvbXB1dGVkc1trZXldOwogICAgICAgICAgICAgICAgZGVsZXRlIF9jb21wdXRlZHNba2V5XTsKCiAgICAgICAgICAgICAgICBpZiAoY29tcHV0ZWRba2V5XS53YXRjaCAmJiAhaXNFcXVhbCh2YWx1ZSwgdGhpc1trZXldKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkW2tleV0ud2F0Y2guY2FsbCh0aGlzLCB0aGlzW2tleV0sIHZhbHVlKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0KCiAgICAgICAgfTsKCiAgICAgICAgVUlraXQucHJvdG90eXBlLl9pbml0UHJvcHMgPSBmdW5jdGlvbiAocHJvcHMpIHsKCiAgICAgICAgICAgIHZhciBrZXk7CgogICAgICAgICAgICBwcm9wcyA9IHByb3BzIHx8IGdldFByb3BzKHRoaXMuJG9wdGlvbnMsIHRoaXMuJG5hbWUpOwoKICAgICAgICAgICAgZm9yIChrZXkgaW4gcHJvcHMpIHsKICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQocHJvcHNba2V5XSkpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLiRwcm9wc1trZXldID0gcHJvcHNba2V5XTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIGV4Y2x1ZGUgPSBbdGhpcy4kb3B0aW9ucy5jb21wdXRlZCwgdGhpcy4kb3B0aW9ucy5tZXRob2RzXTsKICAgICAgICAgICAgZm9yIChrZXkgaW4gdGhpcy4kcHJvcHMpIHsKICAgICAgICAgICAgICAgIGlmIChrZXkgaW4gcHJvcHMgJiYgbm90SW4oZXhjbHVkZSwga2V5KSkgewogICAgICAgICAgICAgICAgICAgIHRoaXNba2V5XSA9IHRoaXMuJHByb3BzW2tleV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICBVSWtpdC5wcm90b3R5cGUuX2luaXRFdmVudHMgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzOwoKCiAgICAgICAgICAgIHZhciByZWYgPSB0aGlzLiRvcHRpb25zOwogICAgICAgICAgICB2YXIgZXZlbnRzID0gcmVmLmV2ZW50czsKCiAgICAgICAgICAgIGlmIChldmVudHMpIHsKCiAgICAgICAgICAgICAgICBldmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNPd24oZXZlbnQsICdoYW5kbGVyJykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGV2ZW50KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlckV2ZW50KHRoaXMkMSwgZXZlbnRba2V5XSwga2V5KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyRXZlbnQodGhpcyQxLCBldmVudCk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgVUlraXQucHJvdG90eXBlLl91bmJpbmRFdmVudHMgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHRoaXMuX2V2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uICh1bmJpbmQpIHsgcmV0dXJuIHVuYmluZCgpOyB9KTsKICAgICAgICAgICAgdGhpcy5fZXZlbnRzID0gW107CiAgICAgICAgfTsKCiAgICAgICAgVUlraXQucHJvdG90eXBlLl9pbml0T2JzZXJ2ZXIgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzOwoKCiAgICAgICAgICAgIHZhciByZWYgPSB0aGlzLiRvcHRpb25zOwogICAgICAgICAgICB2YXIgYXR0cnMgPSByZWYuYXR0cnM7CiAgICAgICAgICAgIHZhciBwcm9wcyA9IHJlZi5wcm9wczsKICAgICAgICAgICAgdmFyIGVsID0gcmVmLmVsOwogICAgICAgICAgICBpZiAodGhpcy5fb2JzZXJ2ZXIgfHwgIXByb3BzIHx8IGF0dHJzID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICBhdHRycyA9IGlzQXJyYXkoYXR0cnMpID8gYXR0cnMgOiBPYmplY3Qua2V5cyhwcm9wcyk7CgogICAgICAgICAgICB0aGlzLl9vYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uICgpIHsKCiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGdldFByb3BzKHRoaXMkMS4kb3B0aW9ucywgdGhpcyQxLiRuYW1lKTsKICAgICAgICAgICAgICAgIGlmIChhdHRycy5zb21lKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuICFpc1VuZGVmaW5lZChkYXRhW2tleV0pICYmIGRhdGFba2V5XSAhPT0gdGhpcyQxLiRwcm9wc1trZXldOyB9KSkgewogICAgICAgICAgICAgICAgICAgIHRoaXMkMS4kcmVzZXQoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgdmFyIGZpbHRlciA9IGF0dHJzLm1hcChmdW5jdGlvbiAoa2V5KSB7IHJldHVybiBoeXBoZW5hdGUoa2V5KTsgfSkuY29uY2F0KHRoaXMuJG5hbWUpOwoKICAgICAgICAgICAgdGhpcy5fb2JzZXJ2ZXIub2JzZXJ2ZShlbCwgewogICAgICAgICAgICAgICAgYXR0cmlidXRlczogdHJ1ZSwKICAgICAgICAgICAgICAgIGF0dHJpYnV0ZUZpbHRlcjogZmlsdGVyLmNvbmNhdChmaWx0ZXIubWFwKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuICgiZGF0YS0iICsga2V5KTsgfSkpCiAgICAgICAgICAgIH0pOwogICAgICAgIH07CgogICAgICAgIGZ1bmN0aW9uIGdldFByb3BzKG9wdHMsIG5hbWUpIHsKCiAgICAgICAgICAgIHZhciBkYXRhJDEgPSB7fTsKICAgICAgICAgICAgdmFyIGFyZ3MgPSBvcHRzLmFyZ3M7IGlmICggYXJncyA9PT0gdm9pZCAwICkgYXJncyA9IFtdOwogICAgICAgICAgICB2YXIgcHJvcHMgPSBvcHRzLnByb3BzOyBpZiAoIHByb3BzID09PSB2b2lkIDAgKSBwcm9wcyA9IHt9OwogICAgICAgICAgICB2YXIgZWwgPSBvcHRzLmVsOwoKICAgICAgICAgICAgaWYgKCFwcm9wcykgewogICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEkMTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7CiAgICAgICAgICAgICAgICB2YXIgcHJvcCA9IGh5cGhlbmF0ZShrZXkpOwogICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gZGF0YShlbCwgcHJvcCk7CgogICAgICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZCh2YWx1ZSkpIHsKCiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwcm9wc1trZXldID09PSBCb29sZWFuICYmIHZhbHVlID09PSAnJwogICAgICAgICAgICAgICAgICAgICAgICA/IHRydWUKICAgICAgICAgICAgICAgICAgICAgICAgOiBjb2VyY2UocHJvcHNba2V5XSwgdmFsdWUpOwoKICAgICAgICAgICAgICAgICAgICBpZiAocHJvcCA9PT0gJ3RhcmdldCcgJiYgKCF2YWx1ZSB8fCBzdGFydHNXaXRoKHZhbHVlLCAnXycpKSkgewogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGRhdGEkMVtrZXldID0gdmFsdWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBvcHRpb25zID0gcGFyc2VPcHRpb25zKGRhdGEoZWwsIG5hbWUpLCBhcmdzKTsKCiAgICAgICAgICAgIGZvciAodmFyIGtleSQxIGluIG9wdGlvbnMpIHsKICAgICAgICAgICAgICAgIHZhciBwcm9wJDEgPSBjYW1lbGl6ZShrZXkkMSk7CiAgICAgICAgICAgICAgICBpZiAocHJvcHNbcHJvcCQxXSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgZGF0YSQxW3Byb3AkMV0gPSBjb2VyY2UocHJvcHNbcHJvcCQxXSwgb3B0aW9uc1trZXkkMV0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gZGF0YSQxOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gcmVnaXN0ZXJDb21wdXRlZChjb21wb25lbnQsIGtleSwgY2IpIHsKICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbXBvbmVudCwga2V5LCB7CgogICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKCiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkgewoKICAgICAgICAgICAgICAgICAgICB2YXIgX2NvbXB1dGVkcyA9IGNvbXBvbmVudC5fY29tcHV0ZWRzOwogICAgICAgICAgICAgICAgICAgIHZhciAkcHJvcHMgPSBjb21wb25lbnQuJHByb3BzOwogICAgICAgICAgICAgICAgICAgIHZhciAkZWwgPSBjb21wb25lbnQuJGVsOwoKICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc093bihfY29tcHV0ZWRzLCBrZXkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9jb21wdXRlZHNba2V5XSA9IChjYi5nZXQgfHwgY2IpLmNhbGwoY29tcG9uZW50LCAkcHJvcHMsICRlbCk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbXB1dGVkc1trZXldOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7CgogICAgICAgICAgICAgICAgICAgIHZhciBfY29tcHV0ZWRzID0gY29tcG9uZW50Ll9jb21wdXRlZHM7CgogICAgICAgICAgICAgICAgICAgIF9jb21wdXRlZHNba2V5XSA9IGNiLnNldCA/IGNiLnNldC5jYWxsKGNvbXBvbmVudCwgdmFsdWUpIDogdmFsdWU7CgogICAgICAgICAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZChfY29tcHV0ZWRzW2tleV0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBfY29tcHV0ZWRzW2tleV07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfSk7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiByZWdpc3RlckV2ZW50KGNvbXBvbmVudCwgZXZlbnQsIGtleSkgewoKICAgICAgICAgICAgaWYgKCFpc1BsYWluT2JqZWN0KGV2ZW50KSkgewogICAgICAgICAgICAgICAgZXZlbnQgPSAoe25hbWU6IGtleSwgaGFuZGxlcjogZXZlbnR9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIG5hbWUgPSBldmVudC5uYW1lOwogICAgICAgICAgICB2YXIgZWwgPSBldmVudC5lbDsKICAgICAgICAgICAgdmFyIGhhbmRsZXIgPSBldmVudC5oYW5kbGVyOwogICAgICAgICAgICB2YXIgY2FwdHVyZSA9IGV2ZW50LmNhcHR1cmU7CiAgICAgICAgICAgIHZhciBwYXNzaXZlID0gZXZlbnQucGFzc2l2ZTsKICAgICAgICAgICAgdmFyIGRlbGVnYXRlID0gZXZlbnQuZGVsZWdhdGU7CiAgICAgICAgICAgIHZhciBmaWx0ZXIgPSBldmVudC5maWx0ZXI7CiAgICAgICAgICAgIHZhciBzZWxmID0gZXZlbnQuc2VsZjsKICAgICAgICAgICAgZWwgPSBpc0Z1bmN0aW9uKGVsKQogICAgICAgICAgICAgICAgPyBlbC5jYWxsKGNvbXBvbmVudCkKICAgICAgICAgICAgICAgIDogZWwgfHwgY29tcG9uZW50LiRlbDsKCiAgICAgICAgICAgIGlmIChpc0FycmF5KGVsKSkgewogICAgICAgICAgICAgICAgZWwuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsgcmV0dXJuIHJlZ2lzdGVyRXZlbnQoY29tcG9uZW50LCBhc3NpZ24oe30sIGV2ZW50LCB7ZWw6IGVsfSksIGtleSk7IH0pOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIWVsIHx8IGZpbHRlciAmJiAhZmlsdGVyLmNhbGwoY29tcG9uZW50KSkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICBjb21wb25lbnQuX2V2ZW50cy5wdXNoKAogICAgICAgICAgICAgICAgb24oCiAgICAgICAgICAgICAgICAgICAgZWwsCiAgICAgICAgICAgICAgICAgICAgbmFtZSwKICAgICAgICAgICAgICAgICAgICAhZGVsZWdhdGUKICAgICAgICAgICAgICAgICAgICAgICAgPyBudWxsCiAgICAgICAgICAgICAgICAgICAgICAgIDogaXNTdHJpbmcoZGVsZWdhdGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGRlbGVnYXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGRlbGVnYXRlLmNhbGwoY29tcG9uZW50KSwKICAgICAgICAgICAgICAgICAgICBpc1N0cmluZyhoYW5kbGVyKSA/IGNvbXBvbmVudFtoYW5kbGVyXSA6IGhhbmRsZXIuYmluZChjb21wb25lbnQpLAogICAgICAgICAgICAgICAgICAgIHtwYXNzaXZlOiBwYXNzaXZlLCBjYXB0dXJlOiBjYXB0dXJlLCBzZWxmOiBzZWxmfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICApOwoKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIG5vdEluKG9wdGlvbnMsIGtleSkgewogICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5ldmVyeShmdW5jdGlvbiAoYXJyKSB7IHJldHVybiAhYXJyIHx8ICFoYXNPd24oYXJyLCBrZXkpOyB9KTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGNvZXJjZSh0eXBlLCB2YWx1ZSkgewoKICAgICAgICAgICAgaWYgKHR5cGUgPT09IEJvb2xlYW4pIHsKICAgICAgICAgICAgICAgIHJldHVybiB0b0Jvb2xlYW4odmFsdWUpOwogICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IE51bWJlcikgewogICAgICAgICAgICAgICAgcmV0dXJuIHRvTnVtYmVyKHZhbHVlKTsKICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnbGlzdCcpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0b0xpc3QodmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gdHlwZSA/IHR5cGUodmFsdWUpIDogdmFsdWU7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBub3JtYWxpemVEYXRhKHJlZiwgcmVmJDEpIHsKICAgICAgICAgICAgdmFyIGRhdGEgPSByZWYuZGF0YTsKICAgICAgICAgICAgdmFyIGVsID0gcmVmLmVsOwogICAgICAgICAgICB2YXIgYXJncyA9IHJlZiQxLmFyZ3M7CiAgICAgICAgICAgIHZhciBwcm9wcyA9IHJlZiQxLnByb3BzOyBpZiAoIHByb3BzID09PSB2b2lkIDAgKSBwcm9wcyA9IHt9OwoKICAgICAgICAgICAgZGF0YSA9IGlzQXJyYXkoZGF0YSkKICAgICAgICAgICAgICAgID8gIWlzRW1wdHkoYXJncykKICAgICAgICAgICAgICAgICAgICA/IGRhdGEuc2xpY2UoMCwgYXJncy5sZW5ndGgpLnJlZHVjZShmdW5jdGlvbiAoZGF0YSwgdmFsdWUsIGluZGV4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1BsYWluT2JqZWN0KHZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzaWduKGRhdGEsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbYXJnc1tpbmRleF1dID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7CiAgICAgICAgICAgICAgICAgICAgfSwge30pCiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQKICAgICAgICAgICAgICAgIDogZGF0YTsKCiAgICAgICAgICAgIGlmIChkYXRhKSB7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gZGF0YSkgewogICAgICAgICAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZChkYXRhW2tleV0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBkYXRhW2tleV07CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtrZXldID0gcHJvcHNba2V5XSA/IGNvZXJjZShwcm9wc1trZXldLCBkYXRhW2tleV0pIDogZGF0YVtrZXldOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIGRhdGE7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGluc3RhbmNlQVBJIChVSWtpdCkgewoKICAgICAgICB2YXIgREFUQSA9IFVJa2l0LmRhdGE7CgogICAgICAgIFVJa2l0LnByb3RvdHlwZS4kbW91bnQgPSBmdW5jdGlvbiAoZWwpIHsKCiAgICAgICAgICAgIHZhciByZWYgPSB0aGlzLiRvcHRpb25zOwogICAgICAgICAgICB2YXIgbmFtZSA9IHJlZi5uYW1lOwoKICAgICAgICAgICAgaWYgKCFlbFtEQVRBXSkgewogICAgICAgICAgICAgICAgZWxbREFUQV0gPSB7fTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGVsW0RBVEFdW25hbWVdKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGVsW0RBVEFdW25hbWVdID0gdGhpczsKCiAgICAgICAgICAgIHRoaXMuJGVsID0gdGhpcy4kb3B0aW9ucy5lbCA9IHRoaXMuJG9wdGlvbnMuZWwgfHwgZWw7CgogICAgICAgICAgICBpZiAod2l0aGluKGVsLCBkb2N1bWVudCkpIHsKICAgICAgICAgICAgICAgIHRoaXMuX2NhbGxDb25uZWN0ZWQoKTsKICAgICAgICAgICAgfQogICAgICAgIH07CgogICAgICAgIFVJa2l0LnByb3RvdHlwZS4kZW1pdCA9IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHRoaXMuX2NhbGxVcGRhdGUoZSk7CiAgICAgICAgfTsKCiAgICAgICAgVUlraXQucHJvdG90eXBlLiRyZXNldCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhpcy5fY2FsbERpc2Nvbm5lY3RlZCgpOwogICAgICAgICAgICB0aGlzLl9jYWxsQ29ubmVjdGVkKCk7CiAgICAgICAgfTsKCiAgICAgICAgVUlraXQucHJvdG90eXBlLiRkZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZUVsKSB7CiAgICAgICAgICAgIGlmICggcmVtb3ZlRWwgPT09IHZvaWQgMCApIHJlbW92ZUVsID0gZmFsc2U7CgoKICAgICAgICAgICAgdmFyIHJlZiA9IHRoaXMuJG9wdGlvbnM7CiAgICAgICAgICAgIHZhciBlbCA9IHJlZi5lbDsKICAgICAgICAgICAgdmFyIG5hbWUgPSByZWYubmFtZTsKCiAgICAgICAgICAgIGlmIChlbCkgewogICAgICAgICAgICAgICAgdGhpcy5fY2FsbERpc2Nvbm5lY3RlZCgpOwogICAgICAgICAgICB9CgogICAgICAgICAgICB0aGlzLl9jYWxsSG9vaygnZGVzdHJveScpOwoKICAgICAgICAgICAgaWYgKCFlbCB8fCAhZWxbREFUQV0pIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZGVsZXRlIGVsW0RBVEFdW25hbWVdOwoKICAgICAgICAgICAgaWYgKCFpc0VtcHR5KGVsW0RBVEFdKSkgewogICAgICAgICAgICAgICAgZGVsZXRlIGVsW0RBVEFdOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAocmVtb3ZlRWwpIHsKICAgICAgICAgICAgICAgIHJlbW92ZSh0aGlzLiRlbCk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICBVSWtpdC5wcm90b3R5cGUuJGNyZWF0ZSA9IGZ1bmN0aW9uIChjb21wb25lbnQsIGVsZW1lbnQsIGRhdGEpIHsKICAgICAgICAgICAgcmV0dXJuIFVJa2l0W2NvbXBvbmVudF0oZWxlbWVudCwgZGF0YSk7CiAgICAgICAgfTsKCiAgICAgICAgVUlraXQucHJvdG90eXBlLiR1cGRhdGUgPSBVSWtpdC51cGRhdGU7CiAgICAgICAgVUlraXQucHJvdG90eXBlLiRnZXRDb21wb25lbnQgPSBVSWtpdC5nZXRDb21wb25lbnQ7CgogICAgICAgIHZhciBuYW1lcyA9IHt9OwogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFVJa2l0LnByb3RvdHlwZSwgewoKICAgICAgICAgICAgJGNvbnRhaW5lcjogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihVSWtpdCwgJ2NvbnRhaW5lcicpLAoKICAgICAgICAgICAgJG5hbWU6IHsKCiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHZhciByZWYgPSB0aGlzLiRvcHRpb25zOwogICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0gcmVmLm5hbWU7CgogICAgICAgICAgICAgICAgICAgIGlmICghbmFtZXNbbmFtZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNbbmFtZV0gPSBVSWtpdC5wcmVmaXggKyBoeXBoZW5hdGUobmFtZSk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmFtZXNbbmFtZV07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9CgogICAgICAgIH0pOwoKICAgIH0KCiAgICB2YXIgVUlraXQgPSBmdW5jdGlvbiAob3B0aW9ucykgewogICAgICAgIHRoaXMuX2luaXQob3B0aW9ucyk7CiAgICB9OwoKICAgIFVJa2l0LnV0aWwgPSB1dGlsOwogICAgVUlraXQuZGF0YSA9ICdfX3Vpa2l0X18nOwogICAgVUlraXQucHJlZml4ID0gJ3VrLSc7CiAgICBVSWtpdC5vcHRpb25zID0ge307CgogICAgZ2xvYmFsQVBJKFVJa2l0KTsKICAgIGhvb2tzQVBJKFVJa2l0KTsKICAgIHN0YXRlQVBJKFVJa2l0KTsKICAgIGNvbXBvbmVudEFQSShVSWtpdCk7CiAgICBpbnN0YW5jZUFQSShVSWtpdCk7CgogICAgdmFyIENsYXNzID0gewoKICAgICAgICBjb25uZWN0ZWQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAhaGFzQ2xhc3ModGhpcy4kZWwsIHRoaXMuJG5hbWUpICYmIGFkZENsYXNzKHRoaXMuJGVsLCB0aGlzLiRuYW1lKTsKICAgICAgICB9CgogICAgfTsKCiAgICB2YXIgVG9nZ2xhYmxlID0gewoKICAgICAgICBwcm9wczogewogICAgICAgICAgICBjbHM6IEJvb2xlYW4sCiAgICAgICAgICAgIGFuaW1hdGlvbjogJ2xpc3QnLAogICAgICAgICAgICBkdXJhdGlvbjogTnVtYmVyLAogICAgICAgICAgICBvcmlnaW46IFN0cmluZywKICAgICAgICAgICAgdHJhbnNpdGlvbjogU3RyaW5nLAogICAgICAgICAgICBxdWV1ZWQ6IEJvb2xlYW4KICAgICAgICB9LAoKICAgICAgICBkYXRhOiB7CiAgICAgICAgICAgIGNsczogZmFsc2UsCiAgICAgICAgICAgIGFuaW1hdGlvbjogW2ZhbHNlXSwKICAgICAgICAgICAgZHVyYXRpb246IDIwMCwKICAgICAgICAgICAgb3JpZ2luOiBmYWxzZSwKICAgICAgICAgICAgdHJhbnNpdGlvbjogJ2xpbmVhcicsCiAgICAgICAgICAgIHF1ZXVlZDogZmFsc2UsCgogICAgICAgICAgICBpbml0UHJvcHM6IHsKICAgICAgICAgICAgICAgIG92ZXJmbG93OiAnJywKICAgICAgICAgICAgICAgIGhlaWdodDogJycsCiAgICAgICAgICAgICAgICBwYWRkaW5nVG9wOiAnJywKICAgICAgICAgICAgICAgIHBhZGRpbmdCb3R0b206ICcnLAogICAgICAgICAgICAgICAgbWFyZ2luVG9wOiAnJywKICAgICAgICAgICAgICAgIG1hcmdpbkJvdHRvbTogJycKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGhpZGVQcm9wczogewogICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLAogICAgICAgICAgICAgICAgaGVpZ2h0OiAwLAogICAgICAgICAgICAgICAgcGFkZGluZ1RvcDogMCwKICAgICAgICAgICAgICAgIHBhZGRpbmdCb3R0b206IDAsCiAgICAgICAgICAgICAgICBtYXJnaW5Ub3A6IDAsCiAgICAgICAgICAgICAgICBtYXJnaW5Cb3R0b206IDAKICAgICAgICAgICAgfQoKICAgICAgICB9LAoKICAgICAgICBjb21wdXRlZDogewoKICAgICAgICAgICAgaGFzQW5pbWF0aW9uOiBmdW5jdGlvbihyZWYpIHsKICAgICAgICAgICAgICAgIHZhciBhbmltYXRpb24gPSByZWYuYW5pbWF0aW9uOwoKICAgICAgICAgICAgICAgIHJldHVybiAhIWFuaW1hdGlvblswXTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGhhc1RyYW5zaXRpb246IGZ1bmN0aW9uKHJlZikgewogICAgICAgICAgICAgICAgdmFyIGFuaW1hdGlvbiA9IHJlZi5hbmltYXRpb247CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFzQW5pbWF0aW9uICYmIGFuaW1hdGlvblswXSA9PT0gdHJ1ZTsKICAgICAgICAgICAgfQoKICAgICAgICB9LAoKICAgICAgICBtZXRob2RzOiB7CgogICAgICAgICAgICB0b2dnbGVFbGVtZW50OiBmdW5jdGlvbih0YXJnZXRzLCBzaG93LCBhbmltYXRlKSB7CiAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpczsKCiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHsKCiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0cyA9IHRvTm9kZXModGFyZ2V0cyk7CgogICAgICAgICAgICAgICAgICAgIHZhciBhbGwgPSBmdW5jdGlvbiAodGFyZ2V0cykgeyByZXR1cm4gUHJvbWlzZS5hbGwodGFyZ2V0cy5tYXAoZnVuY3Rpb24gKGVsKSB7IHJldHVybiB0aGlzJDEuX3RvZ2dsZUVsZW1lbnQoZWwsIHNob3csIGFuaW1hdGUpOyB9KSk7IH07CiAgICAgICAgICAgICAgICAgICAgdmFyIHRvZ2dsZWQgPSB0YXJnZXRzLmZpbHRlcihmdW5jdGlvbiAoZWwpIHsgcmV0dXJuIHRoaXMkMS5pc1RvZ2dsZWQoZWwpOyB9KTsKICAgICAgICAgICAgICAgICAgICB2YXIgdW50b2dnbGVkID0gdGFyZ2V0cy5maWx0ZXIoZnVuY3Rpb24gKGVsKSB7IHJldHVybiAhaW5jbHVkZXModG9nZ2xlZCwgZWwpOyB9KTsKCiAgICAgICAgICAgICAgICAgICAgdmFyIHA7CgogICAgICAgICAgICAgICAgICAgIGlmICghdGhpcyQxLnF1ZXVlZCB8fCAhaXNVbmRlZmluZWQoYW5pbWF0ZSkgfHwgIWlzVW5kZWZpbmVkKHNob3cpIHx8ICF0aGlzJDEuaGFzQW5pbWF0aW9uIHx8IHRhcmdldHMubGVuZ3RoIDwgMikgewoKICAgICAgICAgICAgICAgICAgICAgICAgcCA9IGFsbCh1bnRvZ2dsZWQuY29uY2F0KHRvZ2dsZWQpKTsKCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBib2R5ID0gZG9jdW1lbnQuYm9keTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjcm9sbCA9IGJvZHkuc2Nyb2xsVG9wOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWwgPSB0b2dnbGVkWzBdOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5Qcm9ncmVzcyA9IEFuaW1hdGlvbi5pblByb2dyZXNzKGVsKSAmJiBoYXNDbGFzcyhlbCwgJ3VrLWFuaW1hdGlvbi1sZWF2ZScpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgVHJhbnNpdGlvbi5pblByb2dyZXNzKGVsKSAmJiBlbC5zdHlsZS5oZWlnaHQgPT09ICcwcHgnOwoKICAgICAgICAgICAgICAgICAgICAgICAgcCA9IGFsbCh0b2dnbGVkKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaW5Qcm9ncmVzcykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcCA9IHAudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHAgPSBhbGwodW50b2dnbGVkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5LnNjcm9sbFRvcCA9IHNjcm9sbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgcC50aGVuKHJlc29sdmUsIG5vb3ApOwoKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgdG9nZ2xlTm93OiBmdW5jdGlvbih0YXJnZXRzLCBzaG93KSB7CiAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpczsKCiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmV0dXJuIFByb21pc2UuYWxsKHRvTm9kZXModGFyZ2V0cykubWFwKGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gdGhpcyQxLl90b2dnbGVFbGVtZW50KGVsLCBzaG93LCBmYWxzZSk7IH0pKS50aGVuKHJlc29sdmUsIG5vb3ApOyB9KTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGlzVG9nZ2xlZDogZnVuY3Rpb24oZWwpIHsKICAgICAgICAgICAgICAgIHZhciBub2RlcyA9IHRvTm9kZXMoZWwgfHwgdGhpcy4kZWwpOwogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xzCiAgICAgICAgICAgICAgICAgICAgPyBoYXNDbGFzcyhub2RlcywgdGhpcy5jbHMuc3BsaXQoJyAnKVswXSkKICAgICAgICAgICAgICAgICAgICA6ICFoYXNBdHRyKG5vZGVzLCAnaGlkZGVuJyk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICB1cGRhdGVBcmlhOiBmdW5jdGlvbihlbCkgewogICAgICAgICAgICAgICAgaWYgKHRoaXMuY2xzID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgIGF0dHIoZWwsICdhcmlhLWhpZGRlbicsICF0aGlzLmlzVG9nZ2xlZChlbCkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgX3RvZ2dsZUVsZW1lbnQ6IGZ1bmN0aW9uKGVsLCBzaG93LCBhbmltYXRlKSB7CiAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpczsKCgogICAgICAgICAgICAgICAgc2hvdyA9IGlzQm9vbGVhbihzaG93KQogICAgICAgICAgICAgICAgICAgID8gc2hvdwogICAgICAgICAgICAgICAgICAgIDogQW5pbWF0aW9uLmluUHJvZ3Jlc3MoZWwpCiAgICAgICAgICAgICAgICAgICAgICAgID8gaGFzQ2xhc3MoZWwsICd1ay1hbmltYXRpb24tbGVhdmUnKQogICAgICAgICAgICAgICAgICAgICAgICA6IFRyYW5zaXRpb24uaW5Qcm9ncmVzcyhlbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZWwuc3R5bGUuaGVpZ2h0ID09PSAnMHB4JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAhdGhpcy5pc1RvZ2dsZWQoZWwpOwoKICAgICAgICAgICAgICAgIGlmICghdHJpZ2dlcihlbCwgKCJiZWZvcmUiICsgKHNob3cgPyAnc2hvdycgOiAnaGlkZScpKSwgW3RoaXNdKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBwcm9taXNlID0gKAogICAgICAgICAgICAgICAgICAgIGlzRnVuY3Rpb24oYW5pbWF0ZSkKICAgICAgICAgICAgICAgICAgICAgICAgPyBhbmltYXRlCiAgICAgICAgICAgICAgICAgICAgICAgIDogYW5pbWF0ZSA9PT0gZmFsc2UgfHwgIXRoaXMuaGFzQW5pbWF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuX3RvZ2dsZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmhhc1RyYW5zaXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRvZ2dsZUhlaWdodCh0aGlzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdG9nZ2xlQW5pbWF0aW9uKHRoaXMpCiAgICAgICAgICAgICAgICApKGVsLCBzaG93KTsKCiAgICAgICAgICAgICAgICB0cmlnZ2VyKGVsLCBzaG93ID8gJ3Nob3cnIDogJ2hpZGUnLCBbdGhpc10pOwoKICAgICAgICAgICAgICAgIHZhciBmaW5hbCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKGVsLCBzaG93ID8gJ3Nob3duJyA6ICdoaWRkZW4nLCBbdGhpcyQxXSk7CiAgICAgICAgICAgICAgICAgICAgdGhpcyQxLiR1cGRhdGUoZWwpOwogICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZSA/IHByb21pc2UudGhlbihmaW5hbCkgOiBQcm9taXNlLnJlc29sdmUoZmluYWwoKSk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBfdG9nZ2xlOiBmdW5jdGlvbihlbCwgdG9nZ2xlZCkgewoKICAgICAgICAgICAgICAgIGlmICghZWwpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdG9nZ2xlZCA9IEJvb2xlYW4odG9nZ2xlZCk7CgogICAgICAgICAgICAgICAgdmFyIGNoYW5nZWQ7CiAgICAgICAgICAgICAgICBpZiAodGhpcy5jbHMpIHsKICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gaW5jbHVkZXModGhpcy5jbHMsICcgJykgfHwgdG9nZ2xlZCAhPT0gaGFzQ2xhc3MoZWwsIHRoaXMuY2xzKTsKICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkICYmIHRvZ2dsZUNsYXNzKGVsLCB0aGlzLmNscywgaW5jbHVkZXModGhpcy5jbHMsICcgJykgPyB1bmRlZmluZWQgOiB0b2dnbGVkKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRvZ2dsZWQgPT09IGhhc0F0dHIoZWwsICdoaWRkZW4nKTsKICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkICYmIGF0dHIoZWwsICdoaWRkZW4nLCAhdG9nZ2xlZCA/ICcnIDogbnVsbCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJCQoJ1thdXRvZm9jdXNdJywgZWwpLnNvbWUoZnVuY3Rpb24gKGVsKSB7IHJldHVybiBpc1Zpc2libGUoZWwpID8gZWwuZm9jdXMoKSB8fCB0cnVlIDogZWwuYmx1cigpOyB9KTsKCiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUFyaWEoZWwpOwogICAgICAgICAgICAgICAgY2hhbmdlZCAmJiB0aGlzLiR1cGRhdGUoZWwpOwogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICB9OwoKICAgIGZ1bmN0aW9uIHRvZ2dsZUhlaWdodChyZWYpIHsKICAgICAgICB2YXIgaXNUb2dnbGVkID0gcmVmLmlzVG9nZ2xlZDsKICAgICAgICB2YXIgZHVyYXRpb24gPSByZWYuZHVyYXRpb247CiAgICAgICAgdmFyIGluaXRQcm9wcyA9IHJlZi5pbml0UHJvcHM7CiAgICAgICAgdmFyIGhpZGVQcm9wcyA9IHJlZi5oaWRlUHJvcHM7CiAgICAgICAgdmFyIHRyYW5zaXRpb24gPSByZWYudHJhbnNpdGlvbjsKICAgICAgICB2YXIgX3RvZ2dsZSA9IHJlZi5fdG9nZ2xlOwoKICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVsLCBzaG93KSB7CgogICAgICAgICAgICB2YXIgaW5Qcm9ncmVzcyA9IFRyYW5zaXRpb24uaW5Qcm9ncmVzcyhlbCk7CiAgICAgICAgICAgIHZhciBpbm5lciA9IGVsLmhhc0NoaWxkTm9kZXMgPyB0b0Zsb2F0KGNzcyhlbC5maXJzdEVsZW1lbnRDaGlsZCwgJ21hcmdpblRvcCcpKSArIHRvRmxvYXQoY3NzKGVsLmxhc3RFbGVtZW50Q2hpbGQsICdtYXJnaW5Cb3R0b20nKSkgOiAwOwogICAgICAgICAgICB2YXIgY3VycmVudEhlaWdodCA9IGlzVmlzaWJsZShlbCkgPyBoZWlnaHQoZWwpICsgKGluUHJvZ3Jlc3MgPyAwIDogaW5uZXIpIDogMDsKCiAgICAgICAgICAgIFRyYW5zaXRpb24uY2FuY2VsKGVsKTsKCiAgICAgICAgICAgIGlmICghaXNUb2dnbGVkKGVsKSkgewogICAgICAgICAgICAgICAgX3RvZ2dsZShlbCwgdHJ1ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGhlaWdodChlbCwgJycpOwoKICAgICAgICAgICAgLy8gVXBkYXRlIGNoaWxkIGNvbXBvbmVudHMgZmlyc3QKICAgICAgICAgICAgZmFzdGRvbS5mbHVzaCgpOwoKICAgICAgICAgICAgdmFyIGVuZEhlaWdodCA9IGhlaWdodChlbCkgKyAoaW5Qcm9ncmVzcyA/IDAgOiBpbm5lcik7CiAgICAgICAgICAgIGhlaWdodChlbCwgY3VycmVudEhlaWdodCk7CgogICAgICAgICAgICByZXR1cm4gKHNob3cKICAgICAgICAgICAgICAgICAgICA/IFRyYW5zaXRpb24uc3RhcnQoZWwsIGFzc2lnbih7fSwgaW5pdFByb3BzLCB7b3ZlcmZsb3c6ICdoaWRkZW4nLCBoZWlnaHQ6IGVuZEhlaWdodH0pLCBNYXRoLnJvdW5kKGR1cmF0aW9uICogKDEgLSBjdXJyZW50SGVpZ2h0IC8gZW5kSGVpZ2h0KSksIHRyYW5zaXRpb24pCiAgICAgICAgICAgICAgICAgICAgOiBUcmFuc2l0aW9uLnN0YXJ0KGVsLCBoaWRlUHJvcHMsIE1hdGgucm91bmQoZHVyYXRpb24gKiAoY3VycmVudEhlaWdodCAvIGVuZEhlaWdodCkpLCB0cmFuc2l0aW9uKS50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90b2dnbGUoZWwsIGZhbHNlKTsgfSkKICAgICAgICAgICAgKS50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNzcyhlbCwgaW5pdFByb3BzKTsgfSk7CgogICAgICAgIH07CiAgICB9CgogICAgZnVuY3Rpb24gdG9nZ2xlQW5pbWF0aW9uKHJlZikgewogICAgICAgIHZhciBhbmltYXRpb24gPSByZWYuYW5pbWF0aW9uOwogICAgICAgIHZhciBkdXJhdGlvbiA9IHJlZi5kdXJhdGlvbjsKICAgICAgICB2YXIgb3JpZ2luID0gcmVmLm9yaWdpbjsKICAgICAgICB2YXIgX3RvZ2dsZSA9IHJlZi5fdG9nZ2xlOwoKICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVsLCBzaG93KSB7CgogICAgICAgICAgICBBbmltYXRpb24uY2FuY2VsKGVsKTsKCiAgICAgICAgICAgIGlmIChzaG93KSB7CiAgICAgICAgICAgICAgICBfdG9nZ2xlKGVsLCB0cnVlKTsKICAgICAgICAgICAgICAgIHJldHVybiBBbmltYXRpb24uaW4oZWwsIGFuaW1hdGlvblswXSwgZHVyYXRpb24sIG9yaWdpbik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBBbmltYXRpb24ub3V0KGVsLCBhbmltYXRpb25bMV0gfHwgYW5pbWF0aW9uWzBdLCBkdXJhdGlvbiwgb3JpZ2luKS50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90b2dnbGUoZWwsIGZhbHNlKTsgfSk7CiAgICAgICAgfTsKICAgIH0KCiAgICB2YXIgQWNjb3JkaW9uID0gewoKICAgICAgICBtaXhpbnM6IFtDbGFzcywgVG9nZ2xhYmxlXSwKCiAgICAgICAgcHJvcHM6IHsKICAgICAgICAgICAgdGFyZ2V0czogU3RyaW5nLAogICAgICAgICAgICBhY3RpdmU6IG51bGwsCiAgICAgICAgICAgIGNvbGxhcHNpYmxlOiBCb29sZWFuLAogICAgICAgICAgICBtdWx0aXBsZTogQm9vbGVhbiwKICAgICAgICAgICAgdG9nZ2xlOiBTdHJpbmcsCiAgICAgICAgICAgIGNvbnRlbnQ6IFN0cmluZywKICAgICAgICAgICAgdHJhbnNpdGlvbjogU3RyaW5nCiAgICAgICAgfSwKCiAgICAgICAgZGF0YTogewogICAgICAgICAgICB0YXJnZXRzOiAnPiAqJywKICAgICAgICAgICAgYWN0aXZlOiBmYWxzZSwKICAgICAgICAgICAgYW5pbWF0aW9uOiBbdHJ1ZV0sCiAgICAgICAgICAgIGNvbGxhcHNpYmxlOiB0cnVlLAogICAgICAgICAgICBtdWx0aXBsZTogZmFsc2UsCiAgICAgICAgICAgIGNsc09wZW46ICd1ay1vcGVuJywKICAgICAgICAgICAgdG9nZ2xlOiAnPiAudWstYWNjb3JkaW9uLXRpdGxlJywKICAgICAgICAgICAgY29udGVudDogJz4gLnVrLWFjY29yZGlvbi1jb250ZW50JywKICAgICAgICAgICAgdHJhbnNpdGlvbjogJ2Vhc2UnCiAgICAgICAgfSwKCiAgICAgICAgY29tcHV0ZWQ6IHsKCiAgICAgICAgICAgIGl0ZW1zOiBmdW5jdGlvbihyZWYsICRlbCkgewogICAgICAgICAgICAgICAgdmFyIHRhcmdldHMgPSByZWYudGFyZ2V0czsKCiAgICAgICAgICAgICAgICByZXR1cm4gJCQodGFyZ2V0cywgJGVsKTsKICAgICAgICAgICAgfQoKICAgICAgICB9LAoKICAgICAgICBldmVudHM6IFsKCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICBuYW1lOiAnY2xpY2snLAoKICAgICAgICAgICAgICAgIGRlbGVnYXRlOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCh0aGlzLnRhcmdldHMpICsgIiAiICsgKHRoaXMuJHByb3BzLnRvZ2dsZSkpOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlKGluZGV4KCQkKCgodGhpcy50YXJnZXRzKSArICIgIiArICh0aGlzLiRwcm9wcy50b2dnbGUpKSwgdGhpcy4kZWwpLCBlLmN1cnJlbnQpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0KCiAgICAgICAgXSwKCiAgICAgICAgY29ubmVjdGVkOiBmdW5jdGlvbigpIHsKCiAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIGFjdGl2ZSA9IHRoaXMuaXRlbXNbTnVtYmVyKHRoaXMuYWN0aXZlKV07CiAgICAgICAgICAgIGlmIChhY3RpdmUgJiYgIWhhc0NsYXNzKGFjdGl2ZSwgdGhpcy5jbHNPcGVuKSkgewogICAgICAgICAgICAgICAgdGhpcy50b2dnbGUoYWN0aXZlLCBmYWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpczsKCgogICAgICAgICAgICB0aGlzLml0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7IHJldHVybiB0aGlzJDEuX3RvZ2dsZSgkKHRoaXMkMS5jb250ZW50LCBlbCksIGhhc0NsYXNzKGVsLCB0aGlzJDEuY2xzT3BlbikpOyB9KTsKCiAgICAgICAgICAgIHZhciBhY3RpdmUgPSAhdGhpcy5jb2xsYXBzaWJsZSAmJiAhaGFzQ2xhc3ModGhpcy5pdGVtcywgdGhpcy5jbHNPcGVuKSAmJiB0aGlzLml0ZW1zWzBdOwogICAgICAgICAgICBpZiAoYWN0aXZlKSB7CiAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZShhY3RpdmUsIGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIG1ldGhvZHM6IHsKCiAgICAgICAgICAgIHRvZ2dsZTogZnVuY3Rpb24oaXRlbSwgYW5pbWF0ZSkgewogICAgICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7CgoKICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IGdldEluZGV4KGl0ZW0sIHRoaXMuaXRlbXMpOwogICAgICAgICAgICAgICAgdmFyIGFjdGl2ZSA9IGZpbHRlcih0aGlzLml0ZW1zLCAoIi4iICsgKHRoaXMuY2xzT3BlbikpKTsKCiAgICAgICAgICAgICAgICBpdGVtID0gdGhpcy5pdGVtc1tpbmRleF07CgogICAgICAgICAgICAgICAgaXRlbSAmJiBbaXRlbV0KICAgICAgICAgICAgICAgICAgICAuY29uY2F0KCF0aGlzLm11bHRpcGxlICYmICFpbmNsdWRlcyhhY3RpdmUsIGl0ZW0pICYmIGFjdGl2ZSB8fCBbXSkKICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc0l0ZW0gPSBlbCA9PT0gaXRlbTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gaXNJdGVtICYmICFoYXNDbGFzcyhlbCwgdGhpcyQxLmNsc09wZW4pOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0ZSAmJiBpc0l0ZW0gJiYgIXRoaXMkMS5jb2xsYXBzaWJsZSAmJiBhY3RpdmUubGVuZ3RoIDwgMikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICB0b2dnbGVDbGFzcyhlbCwgdGhpcyQxLmNsc09wZW4sIHN0YXRlKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250ZW50ID0gZWwuX3dyYXBwZXIgPyBlbC5fd3JhcHBlci5maXJzdEVsZW1lbnRDaGlsZCA6ICQodGhpcyQxLmNvbnRlbnQsIGVsKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZWwuX3dyYXBwZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsLl93cmFwcGVyID0gd3JhcEFsbChjb250ZW50LCAnPGRpdj4nKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIoZWwuX3dyYXBwZXIsICdoaWRkZW4nLCBzdGF0ZSA/ICcnIDogbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMkMS5fdG9nZ2xlKGNvbnRlbnQsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzJDEudG9nZ2xlRWxlbWVudChlbC5fd3JhcHBlciwgc3RhdGUsIGFuaW1hdGUpLnRoZW4oZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNDbGFzcyhlbCwgdGhpcyQxLmNsc09wZW4pICE9PSBzdGF0ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YXRlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyQxLl90b2dnbGUoY29udGVudCwgZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsLl93cmFwcGVyID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVud3JhcChjb250ZW50KTsKCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgfTsKCiAgICB2YXIgQWxlcnQgPSB7CgogICAgICAgIG1peGluczogW0NsYXNzLCBUb2dnbGFibGVdLAoKICAgICAgICBhcmdzOiAnYW5pbWF0aW9uJywKCiAgICAgICAgcHJvcHM6IHsKICAgICAgICAgICAgY2xvc2U6IFN0cmluZwogICAgICAgIH0sCgogICAgICAgIGRhdGE6IHsKICAgICAgICAgICAgYW5pbWF0aW9uOiBbdHJ1ZV0sCiAgICAgICAgICAgIHNlbENsb3NlOiAnLnVrLWFsZXJ0LWNsb3NlJywKICAgICAgICAgICAgZHVyYXRpb246IDE1MCwKICAgICAgICAgICAgaGlkZVByb3BzOiBhc3NpZ24oe29wYWNpdHk6IDB9LCBUb2dnbGFibGUuZGF0YS5oaWRlUHJvcHMpCiAgICAgICAgfSwKCiAgICAgICAgZXZlbnRzOiBbCgogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgbmFtZTogJ2NsaWNrJywKCiAgICAgICAgICAgICAgICBkZWxlZ2F0ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsQ2xvc2U7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfQoKICAgICAgICBdLAoKICAgICAgICBtZXRob2RzOiB7CgogICAgICAgICAgICBjbG9zZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpczsKCiAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUVsZW1lbnQodGhpcy4kZWwpLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcyQxLiRkZXN0cm95KHRydWUpOyB9KTsKICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgfTsKCiAgICBmdW5jdGlvbiBDb3JlIChVSWtpdCkgewoKICAgICAgICByZWFkeShmdW5jdGlvbiAoKSB7CgogICAgICAgICAgICBVSWtpdC51cGRhdGUoKTsKICAgICAgICAgICAgb24od2luZG93LCAnbG9hZCByZXNpemUnLCBmdW5jdGlvbiAoKSB7IHJldHVybiBVSWtpdC51cGRhdGUobnVsbCwgJ3Jlc2l6ZScpOyB9KTsKICAgICAgICAgICAgb24oZG9jdW1lbnQsICdsb2FkZWRtZXRhZGF0YSBsb2FkJywgZnVuY3Rpb24gKHJlZikgewogICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IHJlZi50YXJnZXQ7CgogICAgICAgICAgICAgICAgcmV0dXJuIFVJa2l0LnVwZGF0ZSh0YXJnZXQsICdyZXNpemUnKTsKICAgICAgICAgICAgfSwgdHJ1ZSk7CgogICAgICAgICAgICAvLyB0aHJvdHRsZSBgc2Nyb2xsYCBldmVudCAoU2FmYXJpIHRyaWdnZXJzIG11bHRpcGxlIGBzY3JvbGxgIGV2ZW50cyBwZXIgZnJhbWUpCiAgICAgICAgICAgIHZhciBwZW5kaW5nOwogICAgICAgICAgICBvbih3aW5kb3csICdzY3JvbGwnLCBmdW5jdGlvbiAoZSkgewoKICAgICAgICAgICAgICAgIGlmIChwZW5kaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcGVuZGluZyA9IHRydWU7CiAgICAgICAgICAgICAgICBmYXN0ZG9tLndyaXRlKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBlbmRpbmcgPSBmYWxzZTsgfSk7CgogICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IGUudGFyZ2V0OwogICAgICAgICAgICAgICAgVUlraXQudXBkYXRlKHRhcmdldC5ub2RlVHlwZSAhPT0gMSA/IGRvY3VtZW50LmJvZHkgOiB0YXJnZXQsIGUudHlwZSk7CgogICAgICAgICAgICB9LCB7cGFzc2l2ZTogdHJ1ZSwgY2FwdHVyZTogdHJ1ZX0pOwoKICAgICAgICAgICAgdmFyIHN0YXJ0ZWQgPSAwOwogICAgICAgICAgICBvbihkb2N1bWVudCwgJ2FuaW1hdGlvbnN0YXJ0JywgZnVuY3Rpb24gKHJlZikgewogICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IHJlZi50YXJnZXQ7CgogICAgICAgICAgICAgICAgaWYgKChjc3ModGFyZ2V0LCAnYW5pbWF0aW9uTmFtZScpIHx8ICcnKS5tYXRjaCgvXnVrLS4qKGxlZnR8cmlnaHQpLykpIHsKCiAgICAgICAgICAgICAgICAgICAgc3RhcnRlZCsrOwogICAgICAgICAgICAgICAgICAgIGNzcyhkb2N1bWVudC5ib2R5LCAnb3ZlcmZsb3dYJywgJ2hpZGRlbicpOwogICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIS0tc3RhcnRlZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzKGRvY3VtZW50LmJvZHksICdvdmVyZmxvd1gnLCAnJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9LCB0b01zKGNzcyh0YXJnZXQsICdhbmltYXRpb25EdXJhdGlvbicpKSArIDEwMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sIHRydWUpOwoKICAgICAgICAgICAgdmFyIG9mZjsKICAgICAgICAgICAgb24oZG9jdW1lbnQsIHBvaW50ZXJEb3duLCBmdW5jdGlvbiAoZSkgewoKICAgICAgICAgICAgICAgIG9mZiAmJiBvZmYoKTsKCiAgICAgICAgICAgICAgICBpZiAoIWlzVG91Y2goZSkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gSGFuZGxlIFN3aXBlIEdlc3R1cmUKICAgICAgICAgICAgICAgIHZhciBwb3MgPSBnZXRFdmVudFBvcyhlKTsKICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSAndGFnTmFtZScgaW4gZS50YXJnZXQgPyBlLnRhcmdldCA6IGUudGFyZ2V0LnBhcmVudE5vZGU7CiAgICAgICAgICAgICAgICBvZmYgPSBvbmNlKGRvY3VtZW50LCAocG9pbnRlclVwICsgIiAiICsgcG9pbnRlckNhbmNlbCksIGZ1bmN0aW9uIChlKSB7CgogICAgICAgICAgICAgICAgICAgIHZhciByZWYgPSBnZXRFdmVudFBvcyhlKTsKICAgICAgICAgICAgICAgICAgICB2YXIgeCA9IHJlZi54OwogICAgICAgICAgICAgICAgICAgIHZhciB5ID0gcmVmLnk7CgogICAgICAgICAgICAgICAgICAgIC8vIHN3aXBlCiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldCAmJiB4ICYmIE1hdGguYWJzKHBvcy54IC0geCkgPiAxMDAgfHwgeSAmJiBNYXRoLmFicyhwb3MueSAtIHkpID4gMTAwKSB7CgogICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIodGFyZ2V0LCAnc3dpcGUnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIodGFyZ2V0LCAoInN3aXBlIiArIChzd2lwZURpcmVjdGlvbihwb3MueCwgcG9zLnksIHgsIHkpKSkpOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIC8vIEZvcmNlIGNsaWNrIGV2ZW50IGFueXdoZXJlIG9uIGlPUyA8IDEzCiAgICAgICAgICAgICAgICBpZiAocG9pbnRlckRvd24gPT09ICd0b3VjaHN0YXJ0JykgewogICAgICAgICAgICAgICAgICAgIGNzcyhkb2N1bWVudC5ib2R5LCAnY3Vyc29yJywgJ3BvaW50ZXInKTsKICAgICAgICAgICAgICAgICAgICBvbmNlKGRvY3VtZW50LCAocG9pbnRlclVwICsgIiAiICsgcG9pbnRlckNhbmNlbCksIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gY3NzKGRvY3VtZW50LmJvZHksICdjdXJzb3InLCAnJyk7IH0KICAgICAgICAgICAgICAgICAgICAgICAgLCA1MCk7IH0KICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfSwge3Bhc3NpdmU6IHRydWV9KTsKCiAgICAgICAgfSk7CgogICAgfQoKICAgIGZ1bmN0aW9uIHN3aXBlRGlyZWN0aW9uKHgxLCB5MSwgeDIsIHkyKSB7CiAgICAgICAgcmV0dXJuIE1hdGguYWJzKHgxIC0geDIpID49IE1hdGguYWJzKHkxIC0geTIpCiAgICAgICAgICAgID8geDEgLSB4MiA+IDAKICAgICAgICAgICAgICAgID8gJ0xlZnQnCiAgICAgICAgICAgICAgICA6ICdSaWdodCcKICAgICAgICAgICAgOiB5MSAtIHkyID4gMAogICAgICAgICAgICAgICAgPyAnVXAnCiAgICAgICAgICAgICAgICA6ICdEb3duJzsKICAgIH0KCiAgICB2YXIgVmlkZW8gPSB7CgogICAgICAgIGFyZ3M6ICdhdXRvcGxheScsCgogICAgICAgIHByb3BzOiB7CiAgICAgICAgICAgIGF1dG9tdXRlOiBCb29sZWFuLAogICAgICAgICAgICBhdXRvcGxheTogQm9vbGVhbgogICAgICAgIH0sCgogICAgICAgIGRhdGE6IHsKICAgICAgICAgICAgYXV0b211dGU6IGZhbHNlLAogICAgICAgICAgICBhdXRvcGxheTogdHJ1ZQogICAgICAgIH0sCgogICAgICAgIGNvbXB1dGVkOiB7CgogICAgICAgICAgICBpblZpZXc6IGZ1bmN0aW9uKHJlZikgewogICAgICAgICAgICAgICAgdmFyIGF1dG9wbGF5ID0gcmVmLmF1dG9wbGF5OwoKICAgICAgICAgICAgICAgIHJldHVybiBhdXRvcGxheSA9PT0gJ2ludmlldyc7CiAgICAgICAgICAgIH0KCiAgICAgICAgfSwKCiAgICAgICAgY29ubmVjdGVkOiBmdW5jdGlvbigpIHsKCiAgICAgICAgICAgIGlmICh0aGlzLmluVmlldyAmJiAhaGFzQXR0cih0aGlzLiRlbCwgJ3ByZWxvYWQnKSkgewogICAgICAgICAgICAgICAgdGhpcy4kZWwucHJlbG9hZCA9ICdub25lJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdGhpcy5wbGF5ZXIgPSBuZXcgUGxheWVyKHRoaXMuJGVsKTsKCiAgICAgICAgICAgIGlmICh0aGlzLmF1dG9tdXRlKSB7CiAgICAgICAgICAgICAgICB0aGlzLnBsYXllci5tdXRlKCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgfSwKCiAgICAgICAgdXBkYXRlOiB7CgogICAgICAgICAgICByZWFkOiBmdW5jdGlvbigpIHsKCiAgICAgICAgICAgICAgICByZXR1cm4gIXRoaXMucGxheWVyCiAgICAgICAgICAgICAgICAgICAgPyBmYWxzZQogICAgICAgICAgICAgICAgICAgIDogewogICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiBpc1Zpc2libGUodGhpcy4kZWwpICYmIGNzcyh0aGlzLiRlbCwgJ3Zpc2liaWxpdHknKSAhPT0gJ2hpZGRlbicsCiAgICAgICAgICAgICAgICAgICAgICAgIGluVmlldzogdGhpcy5pblZpZXcgJiYgaXNJblZpZXcodGhpcy4kZWwpCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHdyaXRlOiBmdW5jdGlvbihyZWYpIHsKICAgICAgICAgICAgICAgIHZhciB2aXNpYmxlID0gcmVmLnZpc2libGU7CiAgICAgICAgICAgICAgICB2YXIgaW5WaWV3ID0gcmVmLmluVmlldzsKCgogICAgICAgICAgICAgICAgaWYgKCF2aXNpYmxlIHx8IHRoaXMuaW5WaWV3ICYmICFpblZpZXcpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLnBsYXllci5wYXVzZSgpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmF1dG9wbGF5ID09PSB0cnVlIHx8IHRoaXMuaW5WaWV3ICYmIGluVmlldykgewogICAgICAgICAgICAgICAgICAgIHRoaXMucGxheWVyLnBsYXkoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBldmVudHM6IFsncmVzaXplJywgJ3Njcm9sbCddCgogICAgICAgIH0KCiAgICB9OwoKICAgIHZhciBDb3ZlciA9IHsKCiAgICAgICAgbWl4aW5zOiBbQ2xhc3MsIFZpZGVvXSwKCiAgICAgICAgcHJvcHM6IHsKICAgICAgICAgICAgd2lkdGg6IE51bWJlciwKICAgICAgICAgICAgaGVpZ2h0OiBOdW1iZXIKICAgICAgICB9LAoKICAgICAgICBkYXRhOiB7CiAgICAgICAgICAgIGF1dG9tdXRlOiB0cnVlCiAgICAgICAgfSwKCiAgICAgICAgdXBkYXRlOiB7CgogICAgICAgICAgICByZWFkOiBmdW5jdGlvbigpIHsKCiAgICAgICAgICAgICAgICB2YXIgZWwgPSB0aGlzLiRlbDsKICAgICAgICAgICAgICAgIHZhciByZWYgPSBlbC5wYXJlbnROb2RlOwogICAgICAgICAgICAgICAgdmFyIGhlaWdodCA9IHJlZi5vZmZzZXRIZWlnaHQ7CiAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSByZWYub2Zmc2V0V2lkdGg7CiAgICAgICAgICAgICAgICB2YXIgZGltID0gRGltZW5zaW9ucy5jb3ZlcigKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiB0aGlzLndpZHRoIHx8IGVsLm5hdHVyYWxXaWR0aCB8fCBlbC52aWRlb1dpZHRoIHx8IGVsLmNsaWVudFdpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0IHx8IGVsLm5hdHVyYWxIZWlnaHQgfHwgZWwudmlkZW9IZWlnaHQgfHwgZWwuY2xpZW50SGVpZ2h0CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiB3aWR0aCArICh3aWR0aCAlIDIgPyAxIDogMCksCiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0ICsgKGhlaWdodCAlIDIgPyAxIDogMCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIGlmICghZGltLndpZHRoIHx8ICFkaW0uaGVpZ2h0KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiBkaW07CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICB3cml0ZTogZnVuY3Rpb24ocmVmKSB7CiAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gcmVmLmhlaWdodDsKICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IHJlZi53aWR0aDsKCiAgICAgICAgICAgICAgICBjc3ModGhpcy4kZWwsIHtoZWlnaHQ6IGhlaWdodCwgd2lkdGg6IHdpZHRofSk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBldmVudHM6IFsncmVzaXplJ10KCiAgICAgICAgfQoKICAgIH07CgogICAgdmFyIFBvc2l0aW9uID0gewoKICAgICAgICBwcm9wczogewogICAgICAgICAgICBwb3M6IFN0cmluZywKICAgICAgICAgICAgb2Zmc2V0OiBudWxsLAogICAgICAgICAgICBmbGlwOiBCb29sZWFuLAogICAgICAgICAgICBjbHNQb3M6IFN0cmluZwogICAgICAgIH0sCgogICAgICAgIGRhdGE6IHsKICAgICAgICAgICAgcG9zOiAoImJvdHRvbS0iICsgKCFpc1J0bCA/ICdsZWZ0JyA6ICdyaWdodCcpKSwKICAgICAgICAgICAgZmxpcDogdHJ1ZSwKICAgICAgICAgICAgb2Zmc2V0OiBmYWxzZSwKICAgICAgICAgICAgY2xzUG9zOiAnJwogICAgICAgIH0sCgogICAgICAgIGNvbXB1dGVkOiB7CgogICAgICAgICAgICBwb3M6IGZ1bmN0aW9uKHJlZikgewogICAgICAgICAgICAgICAgdmFyIHBvcyA9IHJlZi5wb3M7CgogICAgICAgICAgICAgICAgcmV0dXJuIChwb3MgKyAoIWluY2x1ZGVzKHBvcywgJy0nKSA/ICctY2VudGVyJyA6ICcnKSkuc3BsaXQoJy0nKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGRpcjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wb3NbMF07CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBhbGlnbjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wb3NbMV07CiAgICAgICAgICAgIH0KCiAgICAgICAgfSwKCiAgICAgICAgbWV0aG9kczogewoKICAgICAgICAgICAgcG9zaXRpb25BdDogZnVuY3Rpb24oZWxlbWVudCwgdGFyZ2V0LCBib3VuZGFyeSkgewoKICAgICAgICAgICAgICAgIHJlbW92ZUNsYXNzZXMoZWxlbWVudCwgKCh0aGlzLmNsc1BvcykgKyAiLSh0b3B8Ym90dG9tfGxlZnR8cmlnaHQpKC1bYS16XSspPyIpKTsKICAgICAgICAgICAgICAgIGNzcyhlbGVtZW50LCB7dG9wOiAnJywgbGVmdDogJyd9KTsKCiAgICAgICAgICAgICAgICB2YXIgbm9kZTsKICAgICAgICAgICAgICAgIHZhciByZWYgPSB0aGlzOwogICAgICAgICAgICAgICAgdmFyIG9mZnNldCQxID0gcmVmLm9mZnNldDsKICAgICAgICAgICAgICAgIHZhciBheGlzID0gdGhpcy5nZXRBeGlzKCk7CgogICAgICAgICAgICAgICAgaWYgKCFpc051bWVyaWMob2Zmc2V0JDEpKSB7CiAgICAgICAgICAgICAgICAgICAgbm9kZSA9ICQob2Zmc2V0JDEpOwogICAgICAgICAgICAgICAgICAgIG9mZnNldCQxID0gbm9kZQogICAgICAgICAgICAgICAgICAgICAgICA/IG9mZnNldChub2RlKVtheGlzID09PSAneCcgPyAnbGVmdCcgOiAndG9wJ10gLSBvZmZzZXQodGFyZ2V0KVtheGlzID09PSAneCcgPyAncmlnaHQnIDogJ2JvdHRvbSddCiAgICAgICAgICAgICAgICAgICAgICAgIDogMDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgcmVmJDEgPSBwb3NpdGlvbkF0KAogICAgICAgICAgICAgICAgICAgIGVsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LAogICAgICAgICAgICAgICAgICAgIGF4aXMgPT09ICd4JyA/ICgoZmxpcFBvc2l0aW9uKHRoaXMuZGlyKSkgKyAiICIgKyAodGhpcy5hbGlnbikpIDogKCh0aGlzLmFsaWduKSArICIgIiArIChmbGlwUG9zaXRpb24odGhpcy5kaXIpKSksCiAgICAgICAgICAgICAgICAgICAgYXhpcyA9PT0gJ3gnID8gKCh0aGlzLmRpcikgKyAiICIgKyAodGhpcy5hbGlnbikpIDogKCh0aGlzLmFsaWduKSArICIgIiArICh0aGlzLmRpcikpLAogICAgICAgICAgICAgICAgICAgIGF4aXMgPT09ICd4JyA/ICgiIiArICh0aGlzLmRpciA9PT0gJ2xlZnQnID8gLW9mZnNldCQxIDogb2Zmc2V0JDEpKSA6ICgiICIgKyAodGhpcy5kaXIgPT09ICd0b3AnID8gLW9mZnNldCQxIDogb2Zmc2V0JDEpKSwKICAgICAgICAgICAgICAgICAgICBudWxsLAogICAgICAgICAgICAgICAgICAgIHRoaXMuZmxpcCwKICAgICAgICAgICAgICAgICAgICBib3VuZGFyeQogICAgICAgICAgICAgICAgKS50YXJnZXQ7CiAgICAgICAgICAgICAgICB2YXIgeCA9IHJlZiQxLng7CiAgICAgICAgICAgICAgICB2YXIgeSA9IHJlZiQxLnk7CgogICAgICAgICAgICAgICAgdGhpcy5kaXIgPSBheGlzID09PSAneCcgPyB4IDogeTsKICAgICAgICAgICAgICAgIHRoaXMuYWxpZ24gPSBheGlzID09PSAneCcgPyB5IDogeDsKCiAgICAgICAgICAgICAgICB0b2dnbGVDbGFzcyhlbGVtZW50LCAoKHRoaXMuY2xzUG9zKSArICItIiArICh0aGlzLmRpcikgKyAiLSIgKyAodGhpcy5hbGlnbikpLCB0aGlzLm9mZnNldCA9PT0gZmFsc2UpOwoKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGdldEF4aXM6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlyID09PSAndG9wJyB8fCB0aGlzLmRpciA9PT0gJ2JvdHRvbScgPyAneScgOiAneCc7CiAgICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgIH07CgogICAgdmFyIGFjdGl2ZTsKCiAgICB2YXIgRHJvcCA9IHsKCiAgICAgICAgbWl4aW5zOiBbUG9zaXRpb24sIFRvZ2dsYWJsZV0sCgogICAgICAgIGFyZ3M6ICdwb3MnLAoKICAgICAgICBwcm9wczogewogICAgICAgICAgICBtb2RlOiAnbGlzdCcsCiAgICAgICAgICAgIHRvZ2dsZTogQm9vbGVhbiwKICAgICAgICAgICAgYm91bmRhcnk6IEJvb2xlYW4sCiAgICAgICAgICAgIGJvdW5kYXJ5QWxpZ246IEJvb2xlYW4sCiAgICAgICAgICAgIGRlbGF5U2hvdzogTnVtYmVyLAogICAgICAgICAgICBkZWxheUhpZGU6IE51bWJlciwKICAgICAgICAgICAgY2xzRHJvcDogU3RyaW5nCiAgICAgICAgfSwKCiAgICAgICAgZGF0YTogewogICAgICAgICAgICBtb2RlOiBbJ2NsaWNrJywgJ2hvdmVyJ10sCiAgICAgICAgICAgIHRvZ2dsZTogJy0gKicsCiAgICAgICAgICAgIGJvdW5kYXJ5OiB3aW5kb3csCiAgICAgICAgICAgIGJvdW5kYXJ5QWxpZ246IGZhbHNlLAogICAgICAgICAgICBkZWxheVNob3c6IDAsCiAgICAgICAgICAgIGRlbGF5SGlkZTogODAwLAogICAgICAgICAgICBjbHNEcm9wOiBmYWxzZSwKICAgICAgICAgICAgaG92ZXJJZGxlOiAyMDAsCiAgICAgICAgICAgIGFuaW1hdGlvbjogWyd1ay1hbmltYXRpb24tZmFkZSddLAogICAgICAgICAgICBjbHM6ICd1ay1vcGVuJwogICAgICAgIH0sCgogICAgICAgIGNvbXB1dGVkOiB7CgogICAgICAgICAgICBib3VuZGFyeTogZnVuY3Rpb24ocmVmLCAkZWwpIHsKICAgICAgICAgICAgICAgIHZhciBib3VuZGFyeSA9IHJlZi5ib3VuZGFyeTsKCiAgICAgICAgICAgICAgICByZXR1cm4gcXVlcnkoYm91bmRhcnksICRlbCk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBjbHNEcm9wOiBmdW5jdGlvbihyZWYpIHsKICAgICAgICAgICAgICAgIHZhciBjbHNEcm9wID0gcmVmLmNsc0Ryb3A7CgogICAgICAgICAgICAgICAgcmV0dXJuIGNsc0Ryb3AgfHwgKCJ1ay0iICsgKHRoaXMuJG9wdGlvbnMubmFtZSkpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgY2xzUG9zOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsc0Ryb3A7CiAgICAgICAgICAgIH0KCiAgICAgICAgfSwKCiAgICAgICAgY3JlYXRlZDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHRoaXMudHJhY2tlciA9IG5ldyBNb3VzZVRyYWNrZXIoKTsKICAgICAgICB9LAoKICAgICAgICBjb25uZWN0ZWQ6IGZ1bmN0aW9uKCkgewoKICAgICAgICAgICAgYWRkQ2xhc3ModGhpcy4kZWwsIHRoaXMuY2xzRHJvcCk7CgogICAgICAgICAgICB2YXIgcmVmID0gdGhpcy4kcHJvcHM7CiAgICAgICAgICAgIHZhciB0b2dnbGUgPSByZWYudG9nZ2xlOwogICAgICAgICAgICB0aGlzLnRvZ2dsZSA9IHRvZ2dsZSAmJiB0aGlzLiRjcmVhdGUoJ3RvZ2dsZScsIHF1ZXJ5KHRvZ2dsZSwgdGhpcy4kZWwpLCB7CiAgICAgICAgICAgICAgICB0YXJnZXQ6IHRoaXMuJGVsLAogICAgICAgICAgICAgICAgbW9kZTogdGhpcy5tb2RlCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgIXRoaXMudG9nZ2xlICYmIHRyaWdnZXIodGhpcy4kZWwsICd1cGRhdGVhcmlhJyk7CgogICAgICAgIH0sCgogICAgICAgIGV2ZW50czogWwoKCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICBuYW1lOiAnY2xpY2snLAoKICAgICAgICAgICAgICAgIGRlbGVnYXRlOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCIuIiArICh0aGlzLmNsc0Ryb3ApICsgIi1jbG9zZSIpOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZShmYWxzZSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9LAoKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgIG5hbWU6ICdjbGljaycsCgogICAgICAgICAgICAgICAgZGVsZWdhdGU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAnYVtocmVmXj0iIyJdJzsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgaGFuZGxlcjogZnVuY3Rpb24ocmVmKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGRlZmF1bHRQcmV2ZW50ZWQgPSByZWYuZGVmYXVsdFByZXZlbnRlZDsKICAgICAgICAgICAgICAgICAgICB2YXIgaGFzaCA9IHJlZi5jdXJyZW50Lmhhc2g7CgogICAgICAgICAgICAgICAgICAgIGlmICghZGVmYXVsdFByZXZlbnRlZCAmJiBoYXNoICYmICF3aXRoaW4oaGFzaCwgdGhpcy4kZWwpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZShmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICBuYW1lOiAnYmVmb3Jlc2Nyb2xsJywKCiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGUoZmFsc2UpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICBuYW1lOiAndG9nZ2xlJywKCiAgICAgICAgICAgICAgICBzZWxmOiB0cnVlLAoKICAgICAgICAgICAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uKGUsIHRvZ2dsZSkgewoKICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CgogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzVG9nZ2xlZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZShmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93KHRvZ2dsZSwgZmFsc2UpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgbmFtZTogcG9pbnRlckVudGVyLAoKICAgICAgICAgICAgICAgIGZpbHRlcjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluY2x1ZGVzKHRoaXMubW9kZSwgJ2hvdmVyJyk7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uKGUpIHsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVG91Y2goZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGl2ZQogICAgICAgICAgICAgICAgICAgICAgICAmJiBhY3RpdmUgIT09IHRoaXMKICAgICAgICAgICAgICAgICAgICAgICAgJiYgYWN0aXZlLnRvZ2dsZQogICAgICAgICAgICAgICAgICAgICAgICAmJiBpbmNsdWRlcyhhY3RpdmUudG9nZ2xlLm1vZGUsICdob3ZlcicpCiAgICAgICAgICAgICAgICAgICAgICAgICYmICF3aXRoaW4oZS50YXJnZXQsIGFjdGl2ZS50b2dnbGUuJGVsKQogICAgICAgICAgICAgICAgICAgICAgICAmJiAhcG9pbnRJblJlY3Qoe3g6IGUucGFnZVgsIHk6IGUucGFnZVl9LCBvZmZzZXQoYWN0aXZlLiRlbCkpCiAgICAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZS5oaWRlKGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3codGhpcy50b2dnbGUpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICBuYW1lOiAndG9nZ2xlc2hvdycsCgogICAgICAgICAgICAgICAgaGFuZGxlcjogZnVuY3Rpb24oZSwgdG9nZ2xlKSB7CgogICAgICAgICAgICAgICAgICAgIGlmICh0b2dnbGUgJiYgIWluY2x1ZGVzKHRvZ2dsZS50YXJnZXQsIHRoaXMuJGVsKSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93KHRvZ2dsZSB8fCB0aGlzLnRvZ2dsZSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9LAoKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgIG5hbWU6ICgidG9nZ2xlaGlkZSAiICsgcG9pbnRlckxlYXZlKSwKCiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbihlLCB0b2dnbGUpIHsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVG91Y2goZSkgfHwgdG9nZ2xlICYmICFpbmNsdWRlcyh0b2dnbGUudGFyZ2V0LCB0aGlzLiRlbCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwoKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50b2dnbGUgJiYgaW5jbHVkZXModGhpcy50b2dnbGUubW9kZSwgJ2hvdmVyJykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICBuYW1lOiAnYmVmb3Jlc2hvdycsCgogICAgICAgICAgICAgICAgc2VsZjogdHJ1ZSwKCiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFyVGltZXJzKCk7CiAgICAgICAgICAgICAgICAgICAgQW5pbWF0aW9uLmNhbmNlbCh0aGlzLiRlbCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3NpdGlvbigpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICBuYW1lOiAnc2hvdycsCgogICAgICAgICAgICAgICAgc2VsZjogdHJ1ZSwKCiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpczsKCiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFja2VyLmluaXQoKTsKICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKHRoaXMuJGVsLCAndXBkYXRlYXJpYScpOwoKICAgICAgICAgICAgICAgICAgICAvLyBJZiB0cmlnZ2VyZWQgZnJvbSBhbiBjbGljayBldmVudCBoYW5kbGVyLCBkZWxheSBhZGRpbmcgdGhlIGNsaWNrIGhhbmRsZXIKICAgICAgICAgICAgICAgICAgICB2YXIgb2ZmID0gZGVsYXlPbihkb2N1bWVudCwgJ2NsaWNrJywgZnVuY3Rpb24gKHJlZikgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVmYXVsdFByZXZlbnRlZCA9IHJlZi5kZWZhdWx0UHJldmVudGVkOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gcmVmLnRhcmdldDsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGVmYXVsdFByZXZlbnRlZCAmJiAhd2l0aGluKHRhcmdldCwgdGhpcyQxLiRlbCkgJiYgISh0aGlzJDEudG9nZ2xlICYmIHdpdGhpbih0YXJnZXQsIHRoaXMkMS50b2dnbGUuJGVsKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMkMS5oaWRlKGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICBvbmNlKHRoaXMuJGVsLCAnaGlkZScsIG9mZiwge3NlbGY6IHRydWV9KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgbmFtZTogJ2JlZm9yZWhpZGUnLAoKICAgICAgICAgICAgICAgIHNlbGY6IHRydWUsCgogICAgICAgICAgICAgICAgaGFuZGxlcjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhclRpbWVycygpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICBuYW1lOiAnaGlkZScsCgogICAgICAgICAgICAgICAgaGFuZGxlcjogZnVuY3Rpb24ocmVmKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IHJlZi50YXJnZXQ7CgoKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy4kZWwgIT09IHRhcmdldCkgewogICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmUgPSBhY3RpdmUgPT09IG51bGwgJiYgd2l0aGluKHRhcmdldCwgdGhpcy4kZWwpICYmIHRoaXMuaXNUb2dnbGVkKCkgPyB0aGlzIDogYWN0aXZlOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBhY3RpdmUgPSB0aGlzLmlzQWN0aXZlKCkgPyBudWxsIDogYWN0aXZlOwogICAgICAgICAgICAgICAgICAgIHRyaWdnZXIodGhpcy4kZWwsICd1cGRhdGVhcmlhJyk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFja2VyLmNhbmNlbCgpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICBuYW1lOiAndXBkYXRlYXJpYScsCgogICAgICAgICAgICAgICAgc2VsZjogdHJ1ZSwKCiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbihlLCB0b2dnbGUpIHsKCiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwoKICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUFyaWEodGhpcy4kZWwpOwoKICAgICAgICAgICAgICAgICAgICBpZiAodG9nZ2xlIHx8IHRoaXMudG9nZ2xlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIoKHRvZ2dsZSB8fCB0aGlzLnRvZ2dsZSkuJGVsLCAnYXJpYS1leHBhbmRlZCcsIHRoaXMuaXNUb2dnbGVkKCkpOwogICAgICAgICAgICAgICAgICAgICAgICB0b2dnbGVDbGFzcyh0aGlzLnRvZ2dsZS4kZWwsIHRoaXMuY2xzLCB0aGlzLmlzVG9nZ2xlZCgpKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgXSwKCiAgICAgICAgdXBkYXRlOiB7CgogICAgICAgICAgICB3cml0ZTogZnVuY3Rpb24oKSB7CgogICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNUb2dnbGVkKCkgJiYgIUFuaW1hdGlvbi5pblByb2dyZXNzKHRoaXMuJGVsKSkgewogICAgICAgICAgICAgICAgICAgIHRoaXMucG9zaXRpb24oKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBldmVudHM6IFsncmVzaXplJ10KCiAgICAgICAgfSwKCiAgICAgICAgbWV0aG9kczogewoKICAgICAgICAgICAgc2hvdzogZnVuY3Rpb24odG9nZ2xlLCBkZWxheSkgewogICAgICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7CiAgICAgICAgICAgICAgICBpZiAoIGRlbGF5ID09PSB2b2lkIDAgKSBkZWxheSA9IHRydWU7CgoKICAgICAgICAgICAgICAgIHZhciBzaG93ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gIXRoaXMkMS5pc1RvZ2dsZWQoKSAmJiB0aGlzJDEudG9nZ2xlRWxlbWVudCh0aGlzJDEuJGVsLCB0cnVlKTsgfTsKICAgICAgICAgICAgICAgIHZhciB0cnlTaG93ID0gZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgICAgICAgICB0aGlzJDEudG9nZ2xlID0gdG9nZ2xlIHx8IHRoaXMkMS50b2dnbGU7CgogICAgICAgICAgICAgICAgICAgIHRoaXMkMS5jbGVhclRpbWVycygpOwoKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcyQxLmlzQWN0aXZlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVsYXkgJiYgYWN0aXZlICYmIGFjdGl2ZSAhPT0gdGhpcyQxICYmIGFjdGl2ZS5pc0RlbGF5aW5nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMkMS5zaG93VGltZXIgPSBzZXRUaW1lb3V0KHRoaXMkMS5zaG93LCAxMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMkMS5pc1BhcmVudE9mKGFjdGl2ZSkpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3RpdmUuaGlkZVRpbWVyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmUuaGlkZShmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzJDEuaXNDaGlsZE9mKGFjdGl2ZSkpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZS5jbGVhclRpbWVycygpOwoKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGl2ZSAmJiAhdGhpcyQxLmlzQ2hpbGRPZihhY3RpdmUpICYmICF0aGlzJDEuaXNQYXJlbnRPZihhY3RpdmUpKSB7CgogICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJldjsKICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGFjdGl2ZSAmJiBhY3RpdmUgIT09IHByZXYgJiYgIXRoaXMkMS5pc0NoaWxkT2YoYWN0aXZlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldiA9IGFjdGl2ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZS5oaWRlKGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmIChkZWxheSAmJiB0aGlzJDEuZGVsYXlTaG93KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMkMS5zaG93VGltZXIgPSBzZXRUaW1lb3V0KHNob3csIHRoaXMkMS5kZWxheVNob3cpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNob3coKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGFjdGl2ZSA9IHRoaXMkMTsKICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgaWYgKHRvZ2dsZSAmJiB0aGlzLnRvZ2dsZSAmJiB0b2dnbGUuJGVsICE9PSB0aGlzLnRvZ2dsZS4kZWwpIHsKCiAgICAgICAgICAgICAgICAgICAgb25jZSh0aGlzLiRlbCwgJ2hpZGUnLCB0cnlTaG93KTsKICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGUoZmFsc2UpOwoKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdHJ5U2hvdygpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgaGlkZTogZnVuY3Rpb24oZGVsYXkpIHsKICAgICAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzOwogICAgICAgICAgICAgICAgaWYgKCBkZWxheSA9PT0gdm9pZCAwICkgZGVsYXkgPSB0cnVlOwoKCiAgICAgICAgICAgICAgICB2YXIgaGlkZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMkMS50b2dnbGVOb3codGhpcyQxLiRlbCwgZmFsc2UpOyB9OwoKICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJUaW1lcnMoKTsKCiAgICAgICAgICAgICAgICB0aGlzLmlzRGVsYXlpbmcgPSB0aGlzLnRyYWNrZXIubW92ZXNUbyh0aGlzLiRlbCk7CgogICAgICAgICAgICAgICAgaWYgKGRlbGF5ICYmIHRoaXMuaXNEZWxheWluZykgewogICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZVRpbWVyID0gc2V0VGltZW91dCh0aGlzLmhpZGUsIHRoaXMuaG92ZXJJZGxlKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVsYXkgJiYgdGhpcy5kZWxheUhpZGUpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGVUaW1lciA9IHNldFRpbWVvdXQoaGlkZSwgdGhpcy5kZWxheUhpZGUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBoaWRlKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBjbGVhclRpbWVyczogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5zaG93VGltZXIpOwogICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuaGlkZVRpbWVyKTsKICAgICAgICAgICAgICAgIHRoaXMuc2hvd1RpbWVyID0gbnVsbDsKICAgICAgICAgICAgICAgIHRoaXMuaGlkZVRpbWVyID0gbnVsbDsKICAgICAgICAgICAgICAgIHRoaXMuaXNEZWxheWluZyA9IGZhbHNlOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgaXNBY3RpdmU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGFjdGl2ZSA9PT0gdGhpczsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGlzQ2hpbGRPZjogZnVuY3Rpb24oZHJvcCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGRyb3AgJiYgZHJvcCAhPT0gdGhpcyAmJiB3aXRoaW4odGhpcy4kZWwsIGRyb3AuJGVsKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGlzUGFyZW50T2Y6IGZ1bmN0aW9uKGRyb3ApIHsKICAgICAgICAgICAgICAgIHJldHVybiBkcm9wICYmIGRyb3AgIT09IHRoaXMgJiYgd2l0aGluKGRyb3AuJGVsLCB0aGlzLiRlbCk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBwb3NpdGlvbjogZnVuY3Rpb24oKSB7CgogICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3Nlcyh0aGlzLiRlbCwgKCh0aGlzLmNsc0Ryb3ApICsgIi0oc3RhY2t8Ym91bmRhcnkpIikpOwogICAgICAgICAgICAgICAgY3NzKHRoaXMuJGVsLCB7dG9wOiAnJywgbGVmdDogJycsIGRpc3BsYXk6ICdibG9jayd9KTsKICAgICAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHRoaXMuJGVsLCAoKHRoaXMuY2xzRHJvcCkgKyAiLWJvdW5kYXJ5IiksIHRoaXMuYm91bmRhcnlBbGlnbik7CgogICAgICAgICAgICAgICAgdmFyIGJvdW5kYXJ5ID0gb2Zmc2V0KHRoaXMuYm91bmRhcnkpOwogICAgICAgICAgICAgICAgdmFyIGFsaWduVG8gPSB0aGlzLmJvdW5kYXJ5QWxpZ24gPyBib3VuZGFyeSA6IG9mZnNldCh0aGlzLnRvZ2dsZS4kZWwpOwoKICAgICAgICAgICAgICAgIGlmICh0aGlzLmFsaWduID09PSAnanVzdGlmeScpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgcHJvcCA9IHRoaXMuZ2V0QXhpcygpID09PSAneScgPyAnd2lkdGgnIDogJ2hlaWdodCc7CiAgICAgICAgICAgICAgICAgICAgY3NzKHRoaXMuJGVsLCBwcm9wLCBhbGlnblRvW3Byb3BdKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy4kZWwub2Zmc2V0V2lkdGggPiBNYXRoLm1heChib3VuZGFyeS5yaWdodCAtIGFsaWduVG8ubGVmdCwgYWxpZ25Uby5yaWdodCAtIGJvdW5kYXJ5LmxlZnQpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkQ2xhc3ModGhpcy4kZWwsICgodGhpcy5jbHNEcm9wKSArICItc3RhY2siKSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkF0KHRoaXMuJGVsLCB0aGlzLmJvdW5kYXJ5QWxpZ24gPyB0aGlzLmJvdW5kYXJ5IDogdGhpcy50b2dnbGUuJGVsLCB0aGlzLmJvdW5kYXJ5KTsKCiAgICAgICAgICAgICAgICBjc3ModGhpcy4kZWwsICdkaXNwbGF5JywgJycpOwoKICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgfTsKCiAgICBmdW5jdGlvbiBkZWxheU9uKGVsLCB0eXBlLCBmbikgewogICAgICAgIHZhciBvZmYgPSBvbmNlKGVsLCB0eXBlLCBmdW5jdGlvbiAoKSB7IHJldHVybiBvZmYgPSBvbihlbCwgdHlwZSwgZm4pOyB9CiAgICAgICAgLCB0cnVlKTsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gb2ZmKCk7IH07CiAgICB9CgogICAgdmFyIERyb3Bkb3duID0gewoKICAgICAgICBleHRlbmRzOiBEcm9wCgogICAgfTsKCiAgICB2YXIgRm9ybUN1c3RvbSA9IHsKCiAgICAgICAgbWl4aW5zOiBbQ2xhc3NdLAoKICAgICAgICBhcmdzOiAndGFyZ2V0JywKCiAgICAgICAgcHJvcHM6IHsKICAgICAgICAgICAgdGFyZ2V0OiBCb29sZWFuCiAgICAgICAgfSwKCiAgICAgICAgZGF0YTogewogICAgICAgICAgICB0YXJnZXQ6IGZhbHNlCiAgICAgICAgfSwKCiAgICAgICAgY29tcHV0ZWQ6IHsKCiAgICAgICAgICAgIGlucHV0OiBmdW5jdGlvbihfLCAkZWwpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkKHNlbElucHV0LCAkZWwpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgc3RhdGU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXQubmV4dEVsZW1lbnRTaWJsaW5nOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgdGFyZ2V0OiBmdW5jdGlvbihyZWYsICRlbCkgewogICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IHJlZi50YXJnZXQ7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldCAmJiAodGFyZ2V0ID09PSB0cnVlCiAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5pbnB1dC5wYXJlbnROb2RlID09PSAkZWwKICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLmlucHV0Lm5leHRFbGVtZW50U2libGluZwogICAgICAgICAgICAgICAgICAgIHx8IHF1ZXJ5KHRhcmdldCwgJGVsKSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgfSwKCiAgICAgICAgdXBkYXRlOiBmdW5jdGlvbigpIHsKCiAgICAgICAgICAgIHZhciByZWYgPSB0aGlzOwogICAgICAgICAgICB2YXIgdGFyZ2V0ID0gcmVmLnRhcmdldDsKICAgICAgICAgICAgdmFyIGlucHV0ID0gcmVmLmlucHV0OwoKICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIG9wdGlvbjsKICAgICAgICAgICAgdmFyIHByb3AgPSBpc0lucHV0KHRhcmdldCkgPyAndmFsdWUnIDogJ3RleHRDb250ZW50JzsKICAgICAgICAgICAgdmFyIHByZXYgPSB0YXJnZXRbcHJvcF07CiAgICAgICAgICAgIHZhciB2YWx1ZSA9IGlucHV0LmZpbGVzICYmIGlucHV0LmZpbGVzWzBdCiAgICAgICAgICAgICAgICA/IGlucHV0LmZpbGVzWzBdLm5hbWUKICAgICAgICAgICAgICAgIDogbWF0Y2hlcyhpbnB1dCwgJ3NlbGVjdCcpICYmIChvcHRpb24gPSAkJCgnb3B0aW9uJywgaW5wdXQpLmZpbHRlcihmdW5jdGlvbiAoZWwpIHsgcmV0dXJuIGVsLnNlbGVjdGVkOyB9KVswXSkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItZGVzdHJ1Y3R1cmluZwogICAgICAgICAgICAgICAgICAgID8gb3B0aW9uLnRleHRDb250ZW50CiAgICAgICAgICAgICAgICAgICAgOiBpbnB1dC52YWx1ZTsKCiAgICAgICAgICAgIGlmIChwcmV2ICE9PSB2YWx1ZSkgewogICAgICAgICAgICAgICAgdGFyZ2V0W3Byb3BdID0gdmFsdWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgfSwKCiAgICAgICAgZXZlbnRzOiBbCgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBuYW1lOiAnY2hhbmdlJywKCiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBuYW1lOiAncmVzZXQnLAoKICAgICAgICAgICAgICAgIGVsOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xvc2VzdCh0aGlzLiRlbCwgJ2Zvcm0nKTsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgaGFuZGxlcjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgIF0KCiAgICB9OwoKICAgIC8vIERlcHJlY2F0ZWQKICAgIHZhciBHaWYgPSB7CgogICAgICAgIHVwZGF0ZTogewoKICAgICAgICAgICAgcmVhZDogZnVuY3Rpb24oZGF0YSkgewoKICAgICAgICAgICAgICAgIHZhciBpbnZpZXcgPSBpc0luVmlldyh0aGlzLiRlbCk7CgogICAgICAgICAgICAgICAgaWYgKCFpbnZpZXcgfHwgZGF0YS5pc0luVmlldyA9PT0gaW52aWV3KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGRhdGEuaXNJblZpZXcgPSBpbnZpZXc7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICB3cml0ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB0aGlzLiRlbC5zcmMgPSB0aGlzLiRlbC5zcmM7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBldmVudHM6IFsnc2Nyb2xsJywgJ3Jlc2l6ZSddCiAgICAgICAgfQoKICAgIH07CgogICAgdmFyIE1hcmdpbiA9IHsKCiAgICAgICAgcHJvcHM6IHsKICAgICAgICAgICAgbWFyZ2luOiBTdHJpbmcsCiAgICAgICAgICAgIGZpcnN0Q29sdW1uOiBCb29sZWFuCiAgICAgICAgfSwKCiAgICAgICAgZGF0YTogewogICAgICAgICAgICBtYXJnaW46ICd1ay1tYXJnaW4tc21hbGwtdG9wJywKICAgICAgICAgICAgZmlyc3RDb2x1bW46ICd1ay1maXJzdC1jb2x1bW4nCiAgICAgICAgfSwKCiAgICAgICAgdXBkYXRlOiB7CgogICAgICAgICAgICByZWFkOiBmdW5jdGlvbihkYXRhKSB7CgogICAgICAgICAgICAgICAgdmFyIGl0ZW1zID0gdGhpcy4kZWwuY2hpbGRyZW47CiAgICAgICAgICAgICAgICB2YXIgcm93cyA9IFtbXV07CgogICAgICAgICAgICAgICAgaWYgKCFpdGVtcy5sZW5ndGggfHwgIWlzVmlzaWJsZSh0aGlzLiRlbCkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YS5yb3dzID0gcm93czsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBkYXRhLnJvd3MgPSBnZXRSb3dzKGl0ZW1zKTsKICAgICAgICAgICAgICAgIGRhdGEuc3RhY2tzID0gIWRhdGEucm93cy5zb21lKGZ1bmN0aW9uIChyb3cpIHsgcmV0dXJuIHJvdy5sZW5ndGggPiAxOyB9KTsKCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICB3cml0ZTogZnVuY3Rpb24ocmVmKSB7CiAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpczsKICAgICAgICAgICAgICAgIHZhciByb3dzID0gcmVmLnJvd3M7CgoKICAgICAgICAgICAgICAgIHJvd3MuZm9yRWFjaChmdW5jdGlvbiAocm93LCBpKSB7IHJldHVybiByb3cuZm9yRWFjaChmdW5jdGlvbiAoZWwsIGopIHsKICAgICAgICAgICAgICAgICAgICAgICAgdG9nZ2xlQ2xhc3MoZWwsIHRoaXMkMS5tYXJnaW4sIGkgIT09IDApOwogICAgICAgICAgICAgICAgICAgICAgICB0b2dnbGVDbGFzcyhlbCwgdGhpcyQxLmZpcnN0Q29sdW1uLCBqID09PSAwKTsKICAgICAgICAgICAgICAgICAgICB9KTsgfQogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBldmVudHM6IFsncmVzaXplJ10KCiAgICAgICAgfQoKICAgIH07CgogICAgZnVuY3Rpb24gZ2V0Um93cyhpdGVtcykgewogICAgICAgIHZhciByb3dzID0gW1tdXTsKCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykgewoKICAgICAgICAgICAgdmFyIGVsID0gaXRlbXNbaV07CiAgICAgICAgICAgIHZhciBkaW0gPSBnZXRPZmZzZXQoZWwpOwoKICAgICAgICAgICAgaWYgKCFkaW0uaGVpZ2h0KSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yICh2YXIgaiA9IHJvd3MubGVuZ3RoIC0gMTsgaiA+PSAwOyBqLS0pIHsKCiAgICAgICAgICAgICAgICB2YXIgcm93ID0gcm93c1tqXTsKCiAgICAgICAgICAgICAgICBpZiAoIXJvd1swXSkgewogICAgICAgICAgICAgICAgICAgIHJvdy5wdXNoKGVsKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgbGVmdERpbSA9ICh2b2lkIDApOwogICAgICAgICAgICAgICAgaWYgKHJvd1swXS5vZmZzZXRQYXJlbnQgPT09IGVsLm9mZnNldFBhcmVudCkgewogICAgICAgICAgICAgICAgICAgIGxlZnREaW0gPSBnZXRPZmZzZXQocm93WzBdKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgZGltID0gZ2V0T2Zmc2V0KGVsLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICBsZWZ0RGltID0gZ2V0T2Zmc2V0KHJvd1swXSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKGRpbS50b3AgPj0gbGVmdERpbS5ib3R0b20gLSAxICYmIGRpbS50b3AgIT09IGxlZnREaW0udG9wKSB7CiAgICAgICAgICAgICAgICAgICAgcm93cy5wdXNoKFtlbF0pOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChkaW0uYm90dG9tID4gbGVmdERpbS50b3ApIHsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGRpbS5sZWZ0IDwgbGVmdERpbS5sZWZ0ICYmICFpc1J0bCkgewogICAgICAgICAgICAgICAgICAgICAgICByb3cudW5zaGlmdChlbCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgcm93LnB1c2goZWwpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChqID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgcm93cy51bnNoaWZ0KFtlbF0pOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgICAgIHJldHVybiByb3dzOwoKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRPZmZzZXQoZWxlbWVudCwgb2Zmc2V0KSB7CiAgICAgICAgdmFyIGFzc2lnbjsKCiAgICAgICAgaWYgKCBvZmZzZXQgPT09IHZvaWQgMCApIG9mZnNldCA9IGZhbHNlOwoKICAgICAgICB2YXIgb2Zmc2V0VG9wID0gZWxlbWVudC5vZmZzZXRUb3A7CiAgICAgICAgdmFyIG9mZnNldExlZnQgPSBlbGVtZW50Lm9mZnNldExlZnQ7CiAgICAgICAgdmFyIG9mZnNldEhlaWdodCA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0OwoKICAgICAgICBpZiAob2Zmc2V0KSB7CiAgICAgICAgICAgIChhc3NpZ24gPSBvZmZzZXRQb3NpdGlvbihlbGVtZW50KSwgb2Zmc2V0VG9wID0gYXNzaWduWzBdLCBvZmZzZXRMZWZ0ID0gYXNzaWduWzFdKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHRvcDogb2Zmc2V0VG9wLAogICAgICAgICAgICBsZWZ0OiBvZmZzZXRMZWZ0LAogICAgICAgICAgICBoZWlnaHQ6IG9mZnNldEhlaWdodCwKICAgICAgICAgICAgYm90dG9tOiBvZmZzZXRUb3AgKyBvZmZzZXRIZWlnaHQKICAgICAgICB9OwogICAgfQoKICAgIHZhciBHcmlkID0gewoKICAgICAgICBleHRlbmRzOiBNYXJnaW4sCgogICAgICAgIG1peGluczogW0NsYXNzXSwKCiAgICAgICAgbmFtZTogJ2dyaWQnLAoKICAgICAgICBwcm9wczogewogICAgICAgICAgICBtYXNvbnJ5OiBCb29sZWFuLAogICAgICAgICAgICBwYXJhbGxheDogTnVtYmVyCiAgICAgICAgfSwKCiAgICAgICAgZGF0YTogewogICAgICAgICAgICBtYXJnaW46ICd1ay1ncmlkLW1hcmdpbicsCiAgICAgICAgICAgIGNsc1N0YWNrOiAndWstZ3JpZC1zdGFjaycsCiAgICAgICAgICAgIG1hc29ucnk6IGZhbHNlLAogICAgICAgICAgICBwYXJhbGxheDogMAogICAgICAgIH0sCgogICAgICAgIGNvbXB1dGVkOiB7CgogICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uKF8sICRlbCkgewogICAgICAgICAgICAgICAgcmV0dXJuICRlbC5jaGlsZHJlbi5sZW5ndGg7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBwYXJhbGxheDogZnVuY3Rpb24ocmVmKSB7CiAgICAgICAgICAgICAgICB2YXIgcGFyYWxsYXggPSByZWYucGFyYWxsYXg7CgogICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFsbGF4ICYmIHRoaXMubGVuZ3RoID8gTWF0aC5hYnMocGFyYWxsYXgpIDogJyc7CiAgICAgICAgICAgIH0KCiAgICAgICAgfSwKCiAgICAgICAgY29ubmVjdGVkOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdGhpcy5tYXNvbnJ5ICYmIGFkZENsYXNzKHRoaXMuJGVsLCAndWstZmxleC10b3AgdWstZmxleC13cmFwLXRvcCcpOwogICAgICAgIH0sCgogICAgICAgIHVwZGF0ZTogWwoKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgIHJlYWQ6IGZ1bmN0aW9uKHJlZikgewogICAgICAgICAgICAgICAgICAgIHZhciByb3dzID0gcmVmLnJvd3M7CgoKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXNvbnJ5IHx8IHRoaXMucGFyYWxsYXgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcm93cyA9IHJvd3MubWFwKGZ1bmN0aW9uIChlbGVtZW50cykgeyByZXR1cm4gc29ydEJ5KGVsZW1lbnRzLCAnb2Zmc2V0TGVmdCcpOyB9KTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1J0bCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cy5tYXAoZnVuY3Rpb24gKHJvdykgeyByZXR1cm4gcm93LnJldmVyc2UoKTsgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNpdGlvbkluUHJvZ3Jlc3MgPSByb3dzLnNvbWUoZnVuY3Rpb24gKGVsZW1lbnRzKSB7IHJldHVybiBlbGVtZW50cy5zb21lKFRyYW5zaXRpb24uaW5Qcm9ncmVzcyk7IH0pOwogICAgICAgICAgICAgICAgICAgIHZhciB0cmFuc2xhdGVzID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgdmFyIGVsSGVpZ2h0ID0gJyc7CgogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hc29ucnkgJiYgdGhpcy5sZW5ndGgpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZWlnaHQgPSAwOwoKICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlcyA9IHJvd3MucmVkdWNlKGZ1bmN0aW9uICh0cmFuc2xhdGVzLCByb3csIGkpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVzW2ldID0gcm93Lm1hcChmdW5jdGlvbiAoXywgaikgeyByZXR1cm4gaSA9PT0gMCA/IDAgOiB0b0Zsb2F0KHRyYW5zbGF0ZXNbaSAtIDFdW2pdKSArIChoZWlnaHQgLSB0b0Zsb2F0KHJvd3NbaSAtIDFdW2pdICYmIHJvd3NbaSAtIDFdW2pdLm9mZnNldEhlaWdodCkpOyB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCA9IHJvdy5yZWR1Y2UoZnVuY3Rpb24gKGhlaWdodCwgZWwpIHsgcmV0dXJuIE1hdGgubWF4KGhlaWdodCwgZWwub2Zmc2V0SGVpZ2h0KTsgfSwgMCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZXM7CgogICAgICAgICAgICAgICAgICAgICAgICB9LCBbXSk7CgogICAgICAgICAgICAgICAgICAgICAgICBlbEhlaWdodCA9IG1heENvbHVtbkhlaWdodChyb3dzKSArIGdldE1hcmdpblRvcCh0aGlzLiRlbCwgdGhpcy5tYXJnaW4pICogKHJvd3MubGVuZ3RoIC0gMSk7CgogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgdmFyIHBhZGRpbmcgPSB0aGlzLnBhcmFsbGF4ICYmIGdldFBhZGRpbmdCb3R0b20odGhpcy5wYXJhbGxheCwgcm93cywgdHJhbnNsYXRlcyk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiB7cGFkZGluZzogcGFkZGluZywgcm93czogcm93cywgdHJhbnNsYXRlczogdHJhbnNsYXRlcywgaGVpZ2h0OiAhdHJhbnNpdGlvbkluUHJvZ3Jlc3MgPyBlbEhlaWdodCA6IGZhbHNlfTsKCiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIHdyaXRlOiBmdW5jdGlvbihyZWYpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgc3RhY2tzID0gcmVmLnN0YWNrczsKICAgICAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gcmVmLmhlaWdodDsKICAgICAgICAgICAgICAgICAgICB2YXIgcGFkZGluZyA9IHJlZi5wYWRkaW5nOwoKCiAgICAgICAgICAgICAgICAgICAgdG9nZ2xlQ2xhc3ModGhpcy4kZWwsIHRoaXMuY2xzU3RhY2ssIHN0YWNrcyk7CgogICAgICAgICAgICAgICAgICAgIGNzcyh0aGlzLiRlbCwgJ3BhZGRpbmdCb3R0b20nLCBwYWRkaW5nKTsKICAgICAgICAgICAgICAgICAgICBoZWlnaHQgIT09IGZhbHNlICYmIGNzcyh0aGlzLiRlbCwgJ2hlaWdodCcsIGhlaWdodCk7CgogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBldmVudHM6IFsncmVzaXplJ10KCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgcmVhZDogZnVuY3Rpb24ocmVmKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGhlaWdodCQxID0gcmVmLmhlaWdodDsKCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsZWQ6IHRoaXMucGFyYWxsYXgKICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gc2Nyb2xsZWRPdmVyKHRoaXMuJGVsLCBoZWlnaHQkMSA/IGhlaWdodCQxIC0gaGVpZ2h0KHRoaXMuJGVsKSA6IDApICogdGhpcy5wYXJhbGxheAogICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmYWxzZQogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIHdyaXRlOiBmdW5jdGlvbihyZWYpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgcm93cyA9IHJlZi5yb3dzOwogICAgICAgICAgICAgICAgICAgIHZhciBzY3JvbGxlZCA9IHJlZi5zY3JvbGxlZDsKICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNsYXRlcyA9IHJlZi50cmFuc2xhdGVzOwoKCiAgICAgICAgICAgICAgICAgICAgaWYgKHNjcm9sbGVkID09PSBmYWxzZSAmJiAhdHJhbnNsYXRlcykgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICByb3dzLmZvckVhY2goZnVuY3Rpb24gKHJvdywgaSkgeyByZXR1cm4gcm93LmZvckVhY2goZnVuY3Rpb24gKGVsLCBqKSB7IHJldHVybiBjc3MoZWwsICd0cmFuc2Zvcm0nLCAhc2Nyb2xsZWQgJiYgIXRyYW5zbGF0ZXMgPyAnJyA6ICgidHJhbnNsYXRlWSgiICsgKCh0cmFuc2xhdGVzICYmIC10cmFuc2xhdGVzW2ldW2pdKSArIChzY3JvbGxlZCA/IGogJSAyID8gc2Nyb2xsZWQgOiBzY3JvbGxlZCAvIDggOiAwKSkgKyAicHgpIikpOyB9CiAgICAgICAgICAgICAgICAgICAgICAgICk7IH0KICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgZXZlbnRzOiBbJ3Njcm9sbCcsICdyZXNpemUnXQoKICAgICAgICAgICAgfQoKICAgICAgICBdCgogICAgfTsKCiAgICBmdW5jdGlvbiBnZXRQYWRkaW5nQm90dG9tKGRpc3RhbmNlLCByb3dzLCB0cmFuc2xhdGVzKSB7CiAgICAgICAgdmFyIGNvbHVtbiA9IDA7CiAgICAgICAgdmFyIG1heCA9IDA7CiAgICAgICAgdmFyIG1heFNjcm9sbGVkID0gMDsKICAgICAgICBmb3IgKHZhciBpID0gcm93cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICAgICAgICBmb3IgKHZhciBqID0gY29sdW1uOyBqIDwgcm93c1tpXS5sZW5ndGg7IGorKykgewogICAgICAgICAgICAgICAgdmFyIGVsID0gcm93c1tpXVtqXTsKICAgICAgICAgICAgICAgIHZhciBib3R0b20gPSBlbC5vZmZzZXRUb3AgKyBoZWlnaHQoZWwpICsgKHRyYW5zbGF0ZXMgJiYgLXRyYW5zbGF0ZXNbaV1bal0pOwogICAgICAgICAgICAgICAgbWF4ID0gTWF0aC5tYXgobWF4LCBib3R0b20pOwogICAgICAgICAgICAgICAgbWF4U2Nyb2xsZWQgPSBNYXRoLm1heChtYXhTY3JvbGxlZCwgYm90dG9tICsgKGogJSAyID8gZGlzdGFuY2UgOiBkaXN0YW5jZSAvIDgpKTsKICAgICAgICAgICAgICAgIGNvbHVtbisrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBtYXhTY3JvbGxlZCAtIG1heDsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRNYXJnaW5Ub3Aocm9vdCwgY2xzKSB7CgogICAgICAgIHZhciBub2RlcyA9IHRvTm9kZXMocm9vdC5jaGlsZHJlbik7CiAgICAgICAgdmFyIHJlZiA9IG5vZGVzLmZpbHRlcihmdW5jdGlvbiAoZWwpIHsgcmV0dXJuIGhhc0NsYXNzKGVsLCBjbHMpOyB9KTsKICAgICAgICB2YXIgbm9kZSA9IHJlZlswXTsKCiAgICAgICAgcmV0dXJuIHRvRmxvYXQobm9kZQogICAgICAgICAgICA/IGNzcyhub2RlLCAnbWFyZ2luVG9wJykKICAgICAgICAgICAgOiBjc3Mobm9kZXNbMF0sICdwYWRkaW5nTGVmdCcpKTsKICAgIH0KCiAgICBmdW5jdGlvbiBtYXhDb2x1bW5IZWlnaHQocm93cykgewogICAgICAgIHJldHVybiBNYXRoLm1heC5hcHBseShNYXRoLCByb3dzLnJlZHVjZShmdW5jdGlvbiAoc3VtLCByb3cpIHsKICAgICAgICAgICAgcm93LmZvckVhY2goZnVuY3Rpb24gKGVsLCBpKSB7IHJldHVybiBzdW1baV0gPSAoc3VtW2ldIHx8IDApICsgZWwub2Zmc2V0SGVpZ2h0OyB9KTsKICAgICAgICAgICAgcmV0dXJuIHN1bTsKICAgICAgICB9LCBbXSkpOwogICAgfQoKICAgIC8vIElFIDExIGZpeCAobWluLWhlaWdodCBvbiBhIGZsZXggY29udGFpbmVyIHdvbid0IGFwcGx5IHRvIGl0cyBmbGV4IGl0ZW1zKQogICAgdmFyIEZsZXhCdWcgPSBpc0lFID8gewoKICAgICAgICBwcm9wczogewogICAgICAgICAgICBzZWxNaW5IZWlnaHQ6IFN0cmluZwogICAgICAgIH0sCgogICAgICAgIGRhdGE6IHsKICAgICAgICAgICAgc2VsTWluSGVpZ2h0OiBmYWxzZSwKICAgICAgICAgICAgZm9yY2VIZWlnaHQ6IGZhbHNlCiAgICAgICAgfSwKCiAgICAgICAgY29tcHV0ZWQ6IHsKCiAgICAgICAgICAgIGVsZW1lbnRzOiBmdW5jdGlvbihyZWYsICRlbCkgewogICAgICAgICAgICAgICAgdmFyIHNlbE1pbkhlaWdodCA9IHJlZi5zZWxNaW5IZWlnaHQ7CgogICAgICAgICAgICAgICAgcmV0dXJuIHNlbE1pbkhlaWdodCA/ICQkKHNlbE1pbkhlaWdodCwgJGVsKSA6IFskZWxdOwogICAgICAgICAgICB9CgogICAgICAgIH0sCgogICAgICAgIHVwZGF0ZTogWwoKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgIHJlYWQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIGNzcyh0aGlzLmVsZW1lbnRzLCAnaGVpZ2h0JywgJycpOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBvcmRlcjogLTUsCgogICAgICAgICAgICAgICAgZXZlbnRzOiBbJ3Jlc2l6ZSddCgogICAgICAgICAgICB9LAoKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgIHdyaXRlOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpczsKCiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gdG9GbG9hdChjc3MoZWwsICdtaW5IZWlnaHQnKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoZWlnaHQgJiYgKHRoaXMkMS5mb3JjZUhlaWdodCB8fCBNYXRoLnJvdW5kKGhlaWdodCArIGJveE1vZGVsQWRqdXN0KCdoZWlnaHQnLCBlbCwgJ2NvbnRlbnQtYm94JykpID49IGVsLm9mZnNldEhlaWdodCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcyhlbCwgJ2hlaWdodCcsIGhlaWdodCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgb3JkZXI6IDUsCgogICAgICAgICAgICAgICAgZXZlbnRzOiBbJ3Jlc2l6ZSddCgogICAgICAgICAgICB9CgogICAgICAgIF0KCiAgICB9IDoge307CgogICAgdmFyIEhlaWdodE1hdGNoID0gewoKICAgICAgICBtaXhpbnM6IFtGbGV4QnVnXSwKCiAgICAgICAgYXJnczogJ3RhcmdldCcsCgogICAgICAgIHByb3BzOiB7CiAgICAgICAgICAgIHRhcmdldDogU3RyaW5nLAogICAgICAgICAgICByb3c6IEJvb2xlYW4KICAgICAgICB9LAoKICAgICAgICBkYXRhOiB7CiAgICAgICAgICAgIHRhcmdldDogJz4gKicsCiAgICAgICAgICAgIHJvdzogdHJ1ZSwKICAgICAgICAgICAgZm9yY2VIZWlnaHQ6IHRydWUKICAgICAgICB9LAoKICAgICAgICBjb21wdXRlZDogewoKICAgICAgICAgICAgZWxlbWVudHM6IGZ1bmN0aW9uKHJlZiwgJGVsKSB7CiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gcmVmLnRhcmdldDsKCiAgICAgICAgICAgICAgICByZXR1cm4gJCQodGFyZ2V0LCAkZWwpOwogICAgICAgICAgICB9CgogICAgICAgIH0sCgogICAgICAgIHVwZGF0ZTogewoKICAgICAgICAgICAgcmVhZDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIHJvd3M6ICh0aGlzLnJvdyA/IGdldFJvd3ModGhpcy5lbGVtZW50cykgOiBbdGhpcy5lbGVtZW50c10pLm1hcChtYXRjaCkKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICB3cml0ZTogZnVuY3Rpb24ocmVmKSB7CiAgICAgICAgICAgICAgICB2YXIgcm93cyA9IHJlZi5yb3dzOwoKICAgICAgICAgICAgICAgIHJvd3MuZm9yRWFjaChmdW5jdGlvbiAocmVmKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZWlnaHRzID0gcmVmLmhlaWdodHM7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtZW50cyA9IHJlZi5lbGVtZW50czsKCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChlbCwgaSkgeyByZXR1cm4gY3NzKGVsLCAnbWluSGVpZ2h0JywgaGVpZ2h0c1tpXSk7IH0KICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGV2ZW50czogWydyZXNpemUnXQoKICAgICAgICB9CgogICAgfTsKCiAgICBmdW5jdGlvbiBtYXRjaChlbGVtZW50cykgewogICAgICAgIHZhciBhc3NpZ247CgoKICAgICAgICBpZiAoZWxlbWVudHMubGVuZ3RoIDwgMikgewogICAgICAgICAgICByZXR1cm4ge2hlaWdodHM6IFsnJ10sIGVsZW1lbnRzOiBlbGVtZW50c307CiAgICAgICAgfQoKICAgICAgICB2YXIgcmVmID0gZ2V0SGVpZ2h0cyhlbGVtZW50cyk7CiAgICAgICAgdmFyIGhlaWdodHMgPSByZWYuaGVpZ2h0czsKICAgICAgICB2YXIgbWF4ID0gcmVmLm1heDsKICAgICAgICB2YXIgaGFzTWluSGVpZ2h0ID0gZWxlbWVudHMuc29tZShmdW5jdGlvbiAoZWwpIHsgcmV0dXJuIGVsLnN0eWxlLm1pbkhlaWdodDsgfSk7CiAgICAgICAgdmFyIGhhc1NocnVuayA9IGVsZW1lbnRzLnNvbWUoZnVuY3Rpb24gKGVsLCBpKSB7IHJldHVybiAhZWwuc3R5bGUubWluSGVpZ2h0ICYmIGhlaWdodHNbaV0gPCBtYXg7IH0pOwoKICAgICAgICBpZiAoaGFzTWluSGVpZ2h0ICYmIGhhc1NocnVuaykgewogICAgICAgICAgICBjc3MoZWxlbWVudHMsICdtaW5IZWlnaHQnLCAnJyk7CiAgICAgICAgICAgICgoYXNzaWduID0gZ2V0SGVpZ2h0cyhlbGVtZW50cyksIGhlaWdodHMgPSBhc3NpZ24uaGVpZ2h0cywgbWF4ID0gYXNzaWduLm1heCkpOwogICAgICAgIH0KCiAgICAgICAgaGVpZ2h0cyA9IGVsZW1lbnRzLm1hcChmdW5jdGlvbiAoZWwsIGkpIHsgcmV0dXJuIGhlaWdodHNbaV0gPT09IG1heCAmJiB0b0Zsb2F0KGVsLnN0eWxlLm1pbkhlaWdodCkudG9GaXhlZCgyKSAhPT0gbWF4LnRvRml4ZWQoMikgPyAnJyA6IG1heDsgfQogICAgICAgICk7CgogICAgICAgIHJldHVybiB7aGVpZ2h0czogaGVpZ2h0cywgZWxlbWVudHM6IGVsZW1lbnRzfTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRIZWlnaHRzKGVsZW1lbnRzKSB7CiAgICAgICAgdmFyIGhlaWdodHMgPSBlbGVtZW50cy5tYXAoZnVuY3Rpb24gKGVsKSB7IHJldHVybiBvZmZzZXQoZWwpLmhlaWdodCAtIGJveE1vZGVsQWRqdXN0KCdoZWlnaHQnLCBlbCwgJ2NvbnRlbnQtYm94Jyk7IH0pOwogICAgICAgIHZhciBtYXggPSBNYXRoLm1heC5hcHBseShudWxsLCBoZWlnaHRzKTsKCiAgICAgICAgcmV0dXJuIHtoZWlnaHRzOiBoZWlnaHRzLCBtYXg6IG1heH07CiAgICB9CgogICAgdmFyIEhlaWdodFZpZXdwb3J0ID0gewoKICAgICAgICBtaXhpbnM6IFtGbGV4QnVnXSwKCiAgICAgICAgcHJvcHM6IHsKICAgICAgICAgICAgZXhwYW5kOiBCb29sZWFuLAogICAgICAgICAgICBvZmZzZXRUb3A6IEJvb2xlYW4sCiAgICAgICAgICAgIG9mZnNldEJvdHRvbTogQm9vbGVhbiwKICAgICAgICAgICAgbWluSGVpZ2h0OiBOdW1iZXIKICAgICAgICB9LAoKICAgICAgICBkYXRhOiB7CiAgICAgICAgICAgIGV4cGFuZDogZmFsc2UsCiAgICAgICAgICAgIG9mZnNldFRvcDogZmFsc2UsCiAgICAgICAgICAgIG9mZnNldEJvdHRvbTogZmFsc2UsCiAgICAgICAgICAgIG1pbkhlaWdodDogMAogICAgICAgIH0sCgogICAgICAgIHVwZGF0ZTogewoKICAgICAgICAgICAgcmVhZDogZnVuY3Rpb24ocmVmKSB7CiAgICAgICAgICAgICAgICB2YXIgcHJldiA9IHJlZi5taW5IZWlnaHQ7CgoKICAgICAgICAgICAgICAgIGlmICghaXNWaXNpYmxlKHRoaXMuJGVsKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgbWluSGVpZ2h0ID0gJyc7CiAgICAgICAgICAgICAgICB2YXIgYm94ID0gYm94TW9kZWxBZGp1c3QoJ2hlaWdodCcsIHRoaXMuJGVsLCAnY29udGVudC1ib3gnKTsKCiAgICAgICAgICAgICAgICBpZiAodGhpcy5leHBhbmQpIHsKCiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZWwuZGF0YXNldC5oZWlnaHRFeHBhbmQgPSAnJzsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCQoJ1tkYXRhLWhlaWdodC1leHBhbmRdJykgIT09IHRoaXMuJGVsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIG1pbkhlaWdodCA9IGhlaWdodCh3aW5kb3cpIC0gKG9mZnNldEhlaWdodChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIC0gb2Zmc2V0SGVpZ2h0KHRoaXMuJGVsKSkgLSBib3ggfHwgJyc7CgogICAgICAgICAgICAgICAgfSBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgLy8gb24gbW9iaWxlIGRldmljZXMgKGlPUyBhbmQgQW5kcm9pZCkgd2luZG93LmlubmVySGVpZ2h0ICE9PSAxMDB2aAogICAgICAgICAgICAgICAgICAgIG1pbkhlaWdodCA9ICdjYWxjKDEwMHZoJzsKCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub2Zmc2V0VG9wKSB7CgogICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVmJDEgPSBvZmZzZXQodGhpcy4kZWwpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9wID0gcmVmJDEudG9wOwogICAgICAgICAgICAgICAgICAgICAgICBtaW5IZWlnaHQgKz0gdG9wID4gMCAmJiB0b3AgPCBoZWlnaHQod2luZG93KSAvIDIgPyAoIiAtICIgKyB0b3AgKyAicHgiKSA6ICcnOwoKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9mZnNldEJvdHRvbSA9PT0gdHJ1ZSkgewoKICAgICAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0ICs9ICIgLSAiICsgKG9mZnNldEhlaWdodCh0aGlzLiRlbC5uZXh0RWxlbWVudFNpYmxpbmcpKSArICJweCI7CgogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOdW1lcmljKHRoaXMub2Zmc2V0Qm90dG9tKSkgewoKICAgICAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0ICs9ICIgLSAiICsgKHRoaXMub2Zmc2V0Qm90dG9tKSArICJ2aCI7CgogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5vZmZzZXRCb3R0b20gJiYgZW5kc1dpdGgodGhpcy5vZmZzZXRCb3R0b20sICdweCcpKSB7CgogICAgICAgICAgICAgICAgICAgICAgICBtaW5IZWlnaHQgKz0gIiAtICIgKyAodG9GbG9hdCh0aGlzLm9mZnNldEJvdHRvbSkpICsgInB4IjsKCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc1N0cmluZyh0aGlzLm9mZnNldEJvdHRvbSkpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIG1pbkhlaWdodCArPSAiIC0gIiArIChvZmZzZXRIZWlnaHQocXVlcnkodGhpcy5vZmZzZXRCb3R0b20sIHRoaXMuJGVsKSkpICsgInB4IjsKCiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBtaW5IZWlnaHQgKz0gKGJveCA/ICgiIC0gIiArIGJveCArICJweCIpIDogJycpICsgIikiOwoKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4ge21pbkhlaWdodDogbWluSGVpZ2h0LCBwcmV2OiBwcmV2fTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHdyaXRlOiBmdW5jdGlvbihyZWYpIHsKICAgICAgICAgICAgICAgIHZhciBtaW5IZWlnaHQgPSByZWYubWluSGVpZ2h0OwogICAgICAgICAgICAgICAgdmFyIHByZXYgPSByZWYucHJldjsKCgogICAgICAgICAgICAgICAgY3NzKHRoaXMuJGVsLCB7bWluSGVpZ2h0OiBtaW5IZWlnaHR9KTsKCiAgICAgICAgICAgICAgICBpZiAobWluSGVpZ2h0ICE9PSBwcmV2KSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy4kdXBkYXRlKHRoaXMuJGVsLCAncmVzaXplJyk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKHRoaXMubWluSGVpZ2h0ICYmIHRvRmxvYXQoY3NzKHRoaXMuJGVsLCAnbWluSGVpZ2h0JykpIDwgdGhpcy5taW5IZWlnaHQpIHsKICAgICAgICAgICAgICAgICAgICBjc3ModGhpcy4kZWwsICdtaW5IZWlnaHQnLCB0aGlzLm1pbkhlaWdodCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9LAoKICAgICAgICAgICAgZXZlbnRzOiBbJ3Jlc2l6ZSddCgogICAgICAgIH0KCiAgICB9OwoKICAgIGZ1bmN0aW9uIG9mZnNldEhlaWdodChlbCkgewogICAgICAgIHJldHVybiBlbCAmJiBvZmZzZXQoZWwpLmhlaWdodCB8fCAwOwogICAgfQoKICAgIHZhciBTdmcgPSB7CgogICAgICAgIGFyZ3M6ICdzcmMnLAoKICAgICAgICBwcm9wczogewogICAgICAgICAgICBpZDogQm9vbGVhbiwKICAgICAgICAgICAgaWNvbjogU3RyaW5nLAogICAgICAgICAgICBzcmM6IFN0cmluZywKICAgICAgICAgICAgc3R5bGU6IFN0cmluZywKICAgICAgICAgICAgd2lkdGg6IE51bWJlciwKICAgICAgICAgICAgaGVpZ2h0OiBOdW1iZXIsCiAgICAgICAgICAgIHJhdGlvOiBOdW1iZXIsCiAgICAgICAgICAgIGNsYXNzOiBTdHJpbmcsCiAgICAgICAgICAgIHN0cm9rZUFuaW1hdGlvbjogQm9vbGVhbiwKICAgICAgICAgICAgZm9jdXNhYmxlOiBCb29sZWFuLCAvLyBJRSAxMQogICAgICAgICAgICBhdHRyaWJ1dGVzOiAnbGlzdCcKICAgICAgICB9LAoKICAgICAgICBkYXRhOiB7CiAgICAgICAgICAgIHJhdGlvOiAxLAogICAgICAgICAgICBpbmNsdWRlOiBbJ3N0eWxlJywgJ2NsYXNzJywgJ2ZvY3VzYWJsZSddLAogICAgICAgICAgICBjbGFzczogJycsCiAgICAgICAgICAgIHN0cm9rZUFuaW1hdGlvbjogZmFsc2UKICAgICAgICB9LAoKICAgICAgICBiZWZvcmVDb25uZWN0OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7CiAgICAgICAgICAgIHZhciBhc3NpZ247CgoKICAgICAgICAgICAgdGhpcy5jbGFzcyArPSAnIHVrLXN2Zyc7CgogICAgICAgICAgICBpZiAoIXRoaXMuaWNvbiAmJiBpbmNsdWRlcyh0aGlzLnNyYywgJyMnKSkgewoKICAgICAgICAgICAgICAgIHZhciBwYXJ0cyA9IHRoaXMuc3JjLnNwbGl0KCcjJyk7CgogICAgICAgICAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+IDEpIHsKICAgICAgICAgICAgICAgICAgICAoYXNzaWduID0gcGFydHMsIHRoaXMuc3JjID0gYXNzaWduWzBdLCB0aGlzLmljb24gPSBhc3NpZ25bMV0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB0aGlzLnN2ZyA9IHRoaXMuZ2V0U3ZnKCkudGhlbihmdW5jdGlvbiAoZWwpIHsKICAgICAgICAgICAgICAgIHRoaXMkMS5hcHBseUF0dHJpYnV0ZXMoZWwpOwogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMkMS5zdmdFbCA9IGluc2VydFNWRyhlbCwgdGhpcyQxLiRlbCk7CiAgICAgICAgICAgIH0sIG5vb3ApOwoKICAgICAgICB9LAoKICAgICAgICBkaXNjb25uZWN0ZWQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpczsKCgogICAgICAgICAgICBpZiAoaXNWb2lkRWxlbWVudCh0aGlzLiRlbCkpIHsKICAgICAgICAgICAgICAgIGF0dHIodGhpcy4kZWwsICdoaWRkZW4nLCBudWxsKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKHRoaXMuc3ZnKSB7CiAgICAgICAgICAgICAgICB0aGlzLnN2Zy50aGVuKGZ1bmN0aW9uIChzdmcpIHsgcmV0dXJuICghdGhpcyQxLl9jb25uZWN0ZWQgfHwgc3ZnICE9PSB0aGlzJDEuc3ZnRWwpICYmIHJlbW92ZShzdmcpOyB9LCBub29wKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdGhpcy5zdmcgPSB0aGlzLnN2Z0VsID0gbnVsbDsKCiAgICAgICAgfSwKCiAgICAgICAgdXBkYXRlOiB7CgogICAgICAgICAgICByZWFkOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiAhISh0aGlzLnN0cm9rZUFuaW1hdGlvbiAmJiB0aGlzLnN2Z0VsICYmIGlzVmlzaWJsZSh0aGlzLnN2Z0VsKSk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICB3cml0ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBhcHBseUFuaW1hdGlvbih0aGlzLnN2Z0VsKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHR5cGU6IFsncmVzaXplJ10KCiAgICAgICAgfSwKCiAgICAgICAgbWV0aG9kczogewoKICAgICAgICAgICAgZ2V0U3ZnOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzOwoKICAgICAgICAgICAgICAgIHJldHVybiBsb2FkU1ZHKHRoaXMuc3JjKS50aGVuKGZ1bmN0aW9uIChzdmcpIHsgcmV0dXJuIHBhcnNlU1ZHKHN2ZywgdGhpcyQxLmljb24pIHx8IFByb21pc2UucmVqZWN0KCdTVkcgbm90IGZvdW5kLicpOyB9CiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgYXBwbHlBdHRyaWJ1dGVzOiBmdW5jdGlvbihlbCkgewogICAgICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7CgoKICAgICAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gdGhpcy4kb3B0aW9ucy5wcm9wcykgewogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzW3Byb3BdICYmIGluY2x1ZGVzKHRoaXMuaW5jbHVkZSwgcHJvcCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXR0cihlbCwgcHJvcCwgdGhpc1twcm9wXSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGZvciAodmFyIGF0dHJpYnV0ZSBpbiB0aGlzLmF0dHJpYnV0ZXMpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgcmVmID0gdGhpcy5hdHRyaWJ1dGVzW2F0dHJpYnV0ZV0uc3BsaXQoJzonLCAyKTsKICAgICAgICAgICAgICAgICAgICB2YXIgcHJvcCQxID0gcmVmWzBdOwogICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHJlZlsxXTsKICAgICAgICAgICAgICAgICAgICBhdHRyKGVsLCBwcm9wJDEsIHZhbHVlKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaWQpIHsKICAgICAgICAgICAgICAgICAgICByZW1vdmVBdHRyKGVsLCAnaWQnKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgcHJvcHMgPSBbJ3dpZHRoJywgJ2hlaWdodCddOwogICAgICAgICAgICAgICAgdmFyIGRpbWVuc2lvbnMgPSBbdGhpcy53aWR0aCwgdGhpcy5oZWlnaHRdOwoKICAgICAgICAgICAgICAgIGlmICghZGltZW5zaW9ucy5zb21lKGZ1bmN0aW9uICh2YWwpIHsgcmV0dXJuIHZhbDsgfSkpIHsKICAgICAgICAgICAgICAgICAgICBkaW1lbnNpb25zID0gcHJvcHMubWFwKGZ1bmN0aW9uIChwcm9wKSB7IHJldHVybiBhdHRyKGVsLCBwcm9wKTsgfSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdmFyIHZpZXdCb3ggPSBhdHRyKGVsLCAndmlld0JveCcpOwogICAgICAgICAgICAgICAgaWYgKHZpZXdCb3ggJiYgIWRpbWVuc2lvbnMuc29tZShmdW5jdGlvbiAodmFsKSB7IHJldHVybiB2YWw7IH0pKSB7CiAgICAgICAgICAgICAgICAgICAgZGltZW5zaW9ucyA9IHZpZXdCb3guc3BsaXQoJyAnKS5zbGljZSgyKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBkaW1lbnNpb25zLmZvckVhY2goZnVuY3Rpb24gKHZhbCwgaSkgewogICAgICAgICAgICAgICAgICAgIHZhbCA9ICh2YWwgfCAwKSAqIHRoaXMkMS5yYXRpbzsKICAgICAgICAgICAgICAgICAgICB2YWwgJiYgYXR0cihlbCwgcHJvcHNbaV0sIHZhbCk7CgogICAgICAgICAgICAgICAgICAgIGlmICh2YWwgJiYgIWRpbWVuc2lvbnNbaSBeIDFdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUF0dHIoZWwsIHByb3BzW2kgXiAxXSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgYXR0cihlbCwgJ2RhdGEtc3ZnJywgdGhpcy5pY29uIHx8IHRoaXMuc3JjKTsKCiAgICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgIH07CgogICAgdmFyIHN2Z3MgPSB7fTsKCiAgICBmdW5jdGlvbiBsb2FkU1ZHKHNyYykgewoKICAgICAgICBpZiAoc3Znc1tzcmNdKSB7CiAgICAgICAgICAgIHJldHVybiBzdmdzW3NyY107CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc3Znc1tzcmNdID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewoKICAgICAgICAgICAgaWYgKCFzcmMpIHsKICAgICAgICAgICAgICAgIHJlamVjdCgpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoc3RhcnRzV2l0aChzcmMsICdkYXRhOicpKSB7CiAgICAgICAgICAgICAgICByZXNvbHZlKGRlY29kZVVSSUNvbXBvbmVudChzcmMuc3BsaXQoJywnKVsxXSkpOwogICAgICAgICAgICB9IGVsc2UgewoKICAgICAgICAgICAgICAgIGFqYXgoc3JjKS50aGVuKAogICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICh4aHIpIHsgcmV0dXJuIHJlc29sdmUoeGhyLnJlc3BvbnNlKTsgfSwKICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7IHJldHVybiByZWplY3QoJ1NWRyBub3QgZm91bmQuJyk7IH0KICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICB9CgogICAgICAgIH0pOwogICAgfQoKICAgIGZ1bmN0aW9uIHBhcnNlU1ZHKHN2ZywgaWNvbikgewoKICAgICAgICBpZiAoaWNvbiAmJiBpbmNsdWRlcyhzdmcsICc8c3ltYm9sJykpIHsKICAgICAgICAgICAgc3ZnID0gcGFyc2VTeW1ib2xzKHN2ZywgaWNvbikgfHwgc3ZnOwogICAgICAgIH0KCiAgICAgICAgc3ZnID0gJChzdmcuc3Vic3RyKHN2Zy5pbmRleE9mKCc8c3ZnJykpKTsKICAgICAgICByZXR1cm4gc3ZnICYmIHN2Zy5oYXNDaGlsZE5vZGVzKCkgJiYgc3ZnOwogICAgfQoKICAgIHZhciBzeW1ib2xSZSA9IC88c3ltYm9sKC4qP2lkPShbJyJdKSguKj8pXDJbXl0qPzxcLylzeW1ib2w+L2c7CiAgICB2YXIgc3ltYm9scyA9IHt9OwoKICAgIGZ1bmN0aW9uIHBhcnNlU3ltYm9scyhzdmcsIGljb24pIHsKCiAgICAgICAgaWYgKCFzeW1ib2xzW3N2Z10pIHsKCiAgICAgICAgICAgIHN5bWJvbHNbc3ZnXSA9IHt9OwoKICAgICAgICAgICAgdmFyIG1hdGNoOwogICAgICAgICAgICB3aGlsZSAoKG1hdGNoID0gc3ltYm9sUmUuZXhlYyhzdmcpKSkgewogICAgICAgICAgICAgICAgc3ltYm9sc1tzdmddW21hdGNoWzNdXSA9ICI8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiIgKyAobWF0Y2hbMV0pICsgInN2Zz4iOwogICAgICAgICAgICB9CgogICAgICAgICAgICBzeW1ib2xSZS5sYXN0SW5kZXggPSAwOwoKICAgICAgICB9CgogICAgICAgIHJldHVybiBzeW1ib2xzW3N2Z11baWNvbl07CiAgICB9CgogICAgZnVuY3Rpb24gYXBwbHlBbmltYXRpb24oZWwpIHsKCiAgICAgICAgdmFyIGxlbmd0aCA9IGdldE1heFBhdGhMZW5ndGgoZWwpOwoKICAgICAgICBpZiAobGVuZ3RoKSB7CiAgICAgICAgICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCctLXVrLWFuaW1hdGlvbi1zdHJva2UnLCBsZW5ndGgpOwogICAgICAgIH0KCiAgICB9CgogICAgZnVuY3Rpb24gZ2V0TWF4UGF0aExlbmd0aChlbCkgewogICAgICAgIHJldHVybiBNYXRoLmNlaWwoTWF0aC5tYXguYXBwbHkoTWF0aCwgJCQoJ1tzdHJva2VdJywgZWwpLm1hcChmdW5jdGlvbiAoc3Ryb2tlKSB7IHJldHVybiBzdHJva2UuZ2V0VG90YWxMZW5ndGggJiYgc3Ryb2tlLmdldFRvdGFsTGVuZ3RoKCkgfHwgMDsgfQogICAgICAgICkuY29uY2F0KFswXSkpKTsKICAgIH0KCiAgICBmdW5jdGlvbiBpbnNlcnRTVkcoZWwsIHJvb3QpIHsKICAgICAgICBpZiAoaXNWb2lkRWxlbWVudChyb290KSB8fCByb290LnRhZ05hbWUgPT09ICdDQU5WQVMnKSB7CgogICAgICAgICAgICBhdHRyKHJvb3QsICdoaWRkZW4nLCB0cnVlKTsKCiAgICAgICAgICAgIHZhciBuZXh0ID0gcm9vdC5uZXh0RWxlbWVudFNpYmxpbmc7CiAgICAgICAgICAgIHJldHVybiBlcXVhbHMoZWwsIG5leHQpCiAgICAgICAgICAgICAgICA/IG5leHQKICAgICAgICAgICAgICAgIDogYWZ0ZXIocm9vdCwgZWwpOwoKICAgICAgICB9IGVsc2UgewoKICAgICAgICAgICAgdmFyIGxhc3QgPSByb290Lmxhc3RFbGVtZW50Q2hpbGQ7CiAgICAgICAgICAgIHJldHVybiBlcXVhbHMoZWwsIGxhc3QpCiAgICAgICAgICAgICAgICA/IGxhc3QKICAgICAgICAgICAgICAgIDogYXBwZW5kKHJvb3QsIGVsKTsKCiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGVxdWFscyhlbCwgb3RoZXIpIHsKICAgICAgICByZXR1cm4gYXR0cihlbCwgJ2RhdGEtc3ZnJykgPT09IGF0dHIob3RoZXIsICdkYXRhLXN2ZycpOwogICAgfQoKICAgIHZhciBjbG9zZUljb24gPSAiPHN2ZyB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDE0IDE0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxsaW5lIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMVwiIHgxPVwiMVwiIHkxPVwiMVwiIHgyPVwiMTNcIiB5Mj1cIjEzXCIvPjxsaW5lIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMVwiIHgxPVwiMTNcIiB5MT1cIjFcIiB4Mj1cIjFcIiB5Mj1cIjEzXCIvPjwvc3ZnPiI7CgogICAgdmFyIGNsb3NlTGFyZ2UgPSAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxsaW5lIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuNFwiIHgxPVwiMVwiIHkxPVwiMVwiIHgyPVwiMTlcIiB5Mj1cIjE5XCIvPjxsaW5lIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuNFwiIHgxPVwiMTlcIiB5MT1cIjFcIiB4Mj1cIjFcIiB5Mj1cIjE5XCIvPjwvc3ZnPiI7CgogICAgdmFyIG1hcmtlciA9ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHJlY3QgeD1cIjlcIiB5PVwiNFwiIHdpZHRoPVwiMVwiIGhlaWdodD1cIjExXCIvPjxyZWN0IHg9XCI0XCIgeT1cIjlcIiB3aWR0aD1cIjExXCIgaGVpZ2h0PVwiMVwiLz48L3N2Zz4iOwoKICAgIHZhciBuYXZiYXJUb2dnbGVJY29uID0gIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cmVjdCB5PVwiOVwiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyXCIvPjxyZWN0IHk9XCIzXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjJcIi8+PHJlY3QgeT1cIjE1XCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjJcIi8+PC9zdmc+IjsKCiAgICB2YXIgb3ZlcmxheUljb24gPSAiPHN2ZyB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiB2aWV3Qm94PVwiMCAwIDQwIDQwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxyZWN0IHg9XCIxOVwiIHk9XCIwXCIgd2lkdGg9XCIxXCIgaGVpZ2h0PVwiNDBcIi8+PHJlY3QgeD1cIjBcIiB5PVwiMTlcIiB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiMVwiLz48L3N2Zz4iOwoKICAgIHZhciBwYWdpbmF0aW9uTmV4dCA9ICI8c3ZnIHdpZHRoPVwiN1wiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCA3IDEyXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwb2x5bGluZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjJcIiBwb2ludHM9XCIxIDEgNiA2IDEgMTFcIi8+PC9zdmc+IjsKCiAgICB2YXIgcGFnaW5hdGlvblByZXZpb3VzID0gIjxzdmcgd2lkdGg9XCI3XCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDcgMTJcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBvbHlsaW5lIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMlwiIHBvaW50cz1cIjYgMSAxIDYgNiAxMVwiLz48L3N2Zz4iOwoKICAgIHZhciBzZWFyY2hJY29uID0gIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48Y2lyY2xlIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMVwiIGN4PVwiOVwiIGN5PVwiOVwiIHI9XCI3XCIvPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMVwiIGQ9XCJNMTQsMTQgTDE4LDE4IEwxNCwxNCBaXCIvPjwvc3ZnPiI7CgogICAgdmFyIHNlYXJjaExhcmdlID0gIjxzdmcgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgdmlld0JveD1cIjAgMCA0MCA0MFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48Y2lyY2xlIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuOFwiIGN4PVwiMTcuNVwiIGN5PVwiMTcuNVwiIHI9XCIxNi41XCIvPjxsaW5lIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuOFwiIHgxPVwiMzhcIiB5MT1cIjM5XCIgeDI9XCIyOVwiIHkyPVwiMzBcIi8+PC9zdmc+IjsKCiAgICB2YXIgc2VhcmNoTmF2YmFyID0gIjxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48Y2lyY2xlIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMVwiIGN4PVwiMTAuNVwiIGN5PVwiMTAuNVwiIHI9XCI5LjVcIi8+PGxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4xXCIgeDE9XCIyM1wiIHkxPVwiMjNcIiB4Mj1cIjE3XCIgeTI9XCIxN1wiLz48L3N2Zz4iOwoKICAgIHZhciBzbGlkZW5hdk5leHQgPSAiPHN2ZyB3aWR0aD1cIjE0cHhcIiBoZWlnaHQ9XCIyNHB4XCIgdmlld0JveD1cIjAgMCAxNCAyNFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cG9seWxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS40XCIgcG9pbnRzPVwiMS4yMjUsMjMgMTIuNzc1LDEyIDEuMjI1LDEgXCIvPjwvc3ZnPiI7CgogICAgdmFyIHNsaWRlbmF2TmV4dExhcmdlID0gIjxzdmcgd2lkdGg9XCIyNXB4XCIgaGVpZ2h0PVwiNDBweFwiIHZpZXdCb3g9XCIwIDAgMjUgNDBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBvbHlsaW5lIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjJcIiBwb2ludHM9XCI0LjAwMiwzOC41NDcgMjIuNTI3LDIwLjAyNCA0LDEuNSBcIi8+PC9zdmc+IjsKCiAgICB2YXIgc2xpZGVuYXZQcmV2aW91cyA9ICI8c3ZnIHdpZHRoPVwiMTRweFwiIGhlaWdodD1cIjI0cHhcIiB2aWV3Qm94PVwiMCAwIDE0IDI0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwb2x5bGluZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjRcIiBwb2ludHM9XCIxMi43NzUsMSAxLjIyNSwxMiAxMi43NzUsMjMgXCIvPjwvc3ZnPiI7CgogICAgdmFyIHNsaWRlbmF2UHJldmlvdXNMYXJnZSA9ICI8c3ZnIHdpZHRoPVwiMjVweFwiIGhlaWdodD1cIjQwcHhcIiB2aWV3Qm94PVwiMCAwIDI1IDQwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwb2x5bGluZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIyXCIgcG9pbnRzPVwiMjAuNTI3LDEuNSAyLDIwLjAyNCAyMC41MjUsMzguNTQ3IFwiLz48L3N2Zz4iOwoKICAgIHZhciBzcGlubmVyID0gIjxzdmcgd2lkdGg9XCIzMFwiIGhlaWdodD1cIjMwXCIgdmlld0JveD1cIjAgMCAzMCAzMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48Y2lyY2xlIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIGN4PVwiMTVcIiBjeT1cIjE1XCIgcj1cIjE0XCIvPjwvc3ZnPiI7CgogICAgdmFyIHRvdG9wID0gIjxzdmcgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjEwXCIgdmlld0JveD1cIjAgMCAxOCAxMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cG9seWxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4yXCIgcG9pbnRzPVwiMSA5IDkgMSAxNyA5IFwiLz48L3N2Zz4iOwoKICAgIHZhciBwYXJzZWQgPSB7fTsKICAgIHZhciBpY29ucyA9IHsKICAgICAgICBzcGlubmVyOiBzcGlubmVyLAogICAgICAgIHRvdG9wOiB0b3RvcCwKICAgICAgICBtYXJrZXI6IG1hcmtlciwKICAgICAgICAnY2xvc2UtaWNvbic6IGNsb3NlSWNvbiwKICAgICAgICAnY2xvc2UtbGFyZ2UnOiBjbG9zZUxhcmdlLAogICAgICAgICduYXZiYXItdG9nZ2xlLWljb24nOiBuYXZiYXJUb2dnbGVJY29uLAogICAgICAgICdvdmVybGF5LWljb24nOiBvdmVybGF5SWNvbiwKICAgICAgICAncGFnaW5hdGlvbi1uZXh0JzogcGFnaW5hdGlvbk5leHQsCiAgICAgICAgJ3BhZ2luYXRpb24tcHJldmlvdXMnOiBwYWdpbmF0aW9uUHJldmlvdXMsCiAgICAgICAgJ3NlYXJjaC1pY29uJzogc2VhcmNoSWNvbiwKICAgICAgICAnc2VhcmNoLWxhcmdlJzogc2VhcmNoTGFyZ2UsCiAgICAgICAgJ3NlYXJjaC1uYXZiYXInOiBzZWFyY2hOYXZiYXIsCiAgICAgICAgJ3NsaWRlbmF2LW5leHQnOiBzbGlkZW5hdk5leHQsCiAgICAgICAgJ3NsaWRlbmF2LW5leHQtbGFyZ2UnOiBzbGlkZW5hdk5leHRMYXJnZSwKICAgICAgICAnc2xpZGVuYXYtcHJldmlvdXMnOiBzbGlkZW5hdlByZXZpb3VzLAogICAgICAgICdzbGlkZW5hdi1wcmV2aW91cy1sYXJnZSc6IHNsaWRlbmF2UHJldmlvdXNMYXJnZQogICAgfTsKCiAgICB2YXIgSWNvbiA9IHsKCiAgICAgICAgaW5zdGFsbDogaW5zdGFsbCwKCiAgICAgICAgZXh0ZW5kczogU3ZnLAoKICAgICAgICBhcmdzOiAnaWNvbicsCgogICAgICAgIHByb3BzOiBbJ2ljb24nXSwKCiAgICAgICAgZGF0YTogewogICAgICAgICAgICBpbmNsdWRlOiBbJ2ZvY3VzYWJsZSddCiAgICAgICAgfSwKCiAgICAgICAgaXNJY29uOiB0cnVlLAoKICAgICAgICBiZWZvcmVDb25uZWN0OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgYWRkQ2xhc3ModGhpcy4kZWwsICd1ay1pY29uJyk7CiAgICAgICAgfSwKCiAgICAgICAgbWV0aG9kczogewoKICAgICAgICAgICAgZ2V0U3ZnOiBmdW5jdGlvbigpIHsKCiAgICAgICAgICAgICAgICB2YXIgaWNvbiA9IGdldEljb24oYXBwbHlSdGwodGhpcy5pY29uKSk7CgogICAgICAgICAgICAgICAgaWYgKCFpY29uKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCdJY29uIG5vdCBmb3VuZC4nKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGljb24pOwogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICB9OwoKICAgIHZhciBJY29uQ29tcG9uZW50ID0gewoKICAgICAgICBhcmdzOiBmYWxzZSwKCiAgICAgICAgZXh0ZW5kczogSWNvbiwKCiAgICAgICAgZGF0YTogZnVuY3Rpb24gKHZtKSB7IHJldHVybiAoewogICAgICAgICAgICBpY29uOiBoeXBoZW5hdGUodm0uY29uc3RydWN0b3Iub3B0aW9ucy5uYW1lKQogICAgICAgIH0pOyB9LAoKICAgICAgICBiZWZvcmVDb25uZWN0OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgYWRkQ2xhc3ModGhpcy4kZWwsIHRoaXMuJG5hbWUpOwogICAgICAgIH0KCiAgICB9OwoKICAgIHZhciBTbGlkZW5hdiA9IHsKCiAgICAgICAgZXh0ZW5kczogSWNvbkNvbXBvbmVudCwKCiAgICAgICAgYmVmb3JlQ29ubmVjdDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGFkZENsYXNzKHRoaXMuJGVsLCAndWstc2xpZGVuYXYnKTsKICAgICAgICB9LAoKICAgICAgICBjb21wdXRlZDogewoKICAgICAgICAgICAgaWNvbjogZnVuY3Rpb24ocmVmLCAkZWwpIHsKICAgICAgICAgICAgICAgIHZhciBpY29uID0gcmVmLmljb247CgogICAgICAgICAgICAgICAgcmV0dXJuIGhhc0NsYXNzKCRlbCwgJ3VrLXNsaWRlbmF2LWxhcmdlJykKICAgICAgICAgICAgICAgICAgICA/IChpY29uICsgIi1sYXJnZSIpCiAgICAgICAgICAgICAgICAgICAgOiBpY29uOwogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICB9OwoKICAgIHZhciBTZWFyY2ggPSB7CgogICAgICAgIGV4dGVuZHM6IEljb25Db21wb25lbnQsCgogICAgICAgIGNvbXB1dGVkOiB7CgogICAgICAgICAgICBpY29uOiBmdW5jdGlvbihyZWYsICRlbCkgewogICAgICAgICAgICAgICAgdmFyIGljb24gPSByZWYuaWNvbjsKCiAgICAgICAgICAgICAgICByZXR1cm4gaGFzQ2xhc3MoJGVsLCAndWstc2VhcmNoLWljb24nKSAmJiBwYXJlbnRzKCRlbCwgJy51ay1zZWFyY2gtbGFyZ2UnKS5sZW5ndGgKICAgICAgICAgICAgICAgICAgICA/ICdzZWFyY2gtbGFyZ2UnCiAgICAgICAgICAgICAgICAgICAgOiBwYXJlbnRzKCRlbCwgJy51ay1zZWFyY2gtbmF2YmFyJykubGVuZ3RoCiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3NlYXJjaC1uYXZiYXInCiAgICAgICAgICAgICAgICAgICAgICAgIDogaWNvbjsKICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgfTsKCiAgICB2YXIgQ2xvc2UgPSB7CgogICAgICAgIGV4dGVuZHM6IEljb25Db21wb25lbnQsCgogICAgICAgIGNvbXB1dGVkOiB7CgogICAgICAgICAgICBpY29uOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiAoImNsb3NlLSIgKyAoaGFzQ2xhc3ModGhpcy4kZWwsICd1ay1jbG9zZS1sYXJnZScpID8gJ2xhcmdlJyA6ICdpY29uJykpOwogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICB9OwoKICAgIHZhciBTcGlubmVyID0gewoKICAgICAgICBleHRlbmRzOiBJY29uQ29tcG9uZW50LAoKICAgICAgICBjb25uZWN0ZWQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpczsKCiAgICAgICAgICAgIHRoaXMuc3ZnLnRoZW4oZnVuY3Rpb24gKHN2ZykgeyByZXR1cm4gdGhpcyQxLnJhdGlvICE9PSAxICYmIGNzcygkKCdjaXJjbGUnLCBzdmcpLCAnc3Ryb2tlV2lkdGgnLCAxIC8gdGhpcyQxLnJhdGlvKTsgfSwgbm9vcCk7CiAgICAgICAgfQoKICAgIH07CgogICAgZnVuY3Rpb24gaW5zdGFsbChVSWtpdCkgewogICAgICAgIFVJa2l0Lmljb24uYWRkID0gZnVuY3Rpb24gKG5hbWUsIHN2ZykgewogICAgICAgICAgICB2YXIgb2JqOwoKCiAgICAgICAgICAgIHZhciBhZGRlZCA9IGlzU3RyaW5nKG5hbWUpID8gKCggb2JqID0ge30sIG9ialtuYW1lXSA9IHN2Zywgb2JqICkpIDogbmFtZTsKICAgICAgICAgICAgZWFjaChhZGRlZCwgZnVuY3Rpb24gKHN2ZywgbmFtZSkgewogICAgICAgICAgICAgICAgaWNvbnNbbmFtZV0gPSBzdmc7CiAgICAgICAgICAgICAgICBkZWxldGUgcGFyc2VkW25hbWVdOwogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIGlmIChVSWtpdC5faW5pdGlhbGl6ZWQpIHsKICAgICAgICAgICAgICAgIGFwcGx5KGRvY3VtZW50LmJvZHksIGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gZWFjaChVSWtpdC5nZXRDb21wb25lbnRzKGVsKSwgZnVuY3Rpb24gKGNtcCkgewogICAgICAgICAgICAgICAgICAgICAgICBjbXAuJG9wdGlvbnMuaXNJY29uICYmIGNtcC5pY29uIGluIGFkZGVkICYmIGNtcC4kcmVzZXQoKTsKICAgICAgICAgICAgICAgICAgICB9KTsgfQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0SWNvbihpY29uKSB7CgogICAgICAgIGlmICghaWNvbnNbaWNvbl0pIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICBpZiAoIXBhcnNlZFtpY29uXSkgewogICAgICAgICAgICBwYXJzZWRbaWNvbl0gPSAkKGljb25zW2ljb25dLnRyaW0oKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gcGFyc2VkW2ljb25dLmNsb25lTm9kZSh0cnVlKTsKICAgIH0KCiAgICBmdW5jdGlvbiBhcHBseVJ0bChpY29uKSB7CiAgICAgICAgcmV0dXJuIGlzUnRsID8gc3dhcChzd2FwKGljb24sICdsZWZ0JywgJ3JpZ2h0JyksICdwcmV2aW91cycsICduZXh0JykgOiBpY29uOwogICAgfQoKICAgIHZhciBJbWcgPSB7CgogICAgICAgIGFyZ3M6ICdkYXRhU3JjJywKCiAgICAgICAgcHJvcHM6IHsKICAgICAgICAgICAgZGF0YVNyYzogU3RyaW5nLAogICAgICAgICAgICBkYXRhU3Jjc2V0OiBCb29sZWFuLAogICAgICAgICAgICBzaXplczogU3RyaW5nLAogICAgICAgICAgICB3aWR0aDogTnVtYmVyLAogICAgICAgICAgICBoZWlnaHQ6IE51bWJlciwKICAgICAgICAgICAgb2Zmc2V0VG9wOiBTdHJpbmcsCiAgICAgICAgICAgIG9mZnNldExlZnQ6IFN0cmluZywKICAgICAgICAgICAgdGFyZ2V0OiBTdHJpbmcKICAgICAgICB9LAoKICAgICAgICBkYXRhOiB7CiAgICAgICAgICAgIGRhdGFTcmM6ICcnLAogICAgICAgICAgICBkYXRhU3Jjc2V0OiBmYWxzZSwKICAgICAgICAgICAgc2l6ZXM6IGZhbHNlLAogICAgICAgICAgICB3aWR0aDogZmFsc2UsCiAgICAgICAgICAgIGhlaWdodDogZmFsc2UsCiAgICAgICAgICAgIG9mZnNldFRvcDogJzUwdmgnLAogICAgICAgICAgICBvZmZzZXRMZWZ0OiAwLAogICAgICAgICAgICB0YXJnZXQ6IGZhbHNlCiAgICAgICAgfSwKCiAgICAgICAgY29tcHV0ZWQ6IHsKCiAgICAgICAgICAgIGNhY2hlS2V5OiBmdW5jdGlvbihyZWYpIHsKICAgICAgICAgICAgICAgIHZhciBkYXRhU3JjID0gcmVmLmRhdGFTcmM7CgogICAgICAgICAgICAgICAgcmV0dXJuICgodGhpcy4kbmFtZSkgKyAiLiIgKyBkYXRhU3JjKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHdpZHRoOiBmdW5jdGlvbihyZWYpIHsKICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IHJlZi53aWR0aDsKICAgICAgICAgICAgICAgIHZhciBkYXRhV2lkdGggPSByZWYuZGF0YVdpZHRoOwoKICAgICAgICAgICAgICAgIHJldHVybiB3aWR0aCB8fCBkYXRhV2lkdGg7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBoZWlnaHQ6IGZ1bmN0aW9uKHJlZikgewogICAgICAgICAgICAgICAgdmFyIGhlaWdodCA9IHJlZi5oZWlnaHQ7CiAgICAgICAgICAgICAgICB2YXIgZGF0YUhlaWdodCA9IHJlZi5kYXRhSGVpZ2h0OwoKICAgICAgICAgICAgICAgIHJldHVybiBoZWlnaHQgfHwgZGF0YUhlaWdodDsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHNpemVzOiBmdW5jdGlvbihyZWYpIHsKICAgICAgICAgICAgICAgIHZhciBzaXplcyA9IHJlZi5zaXplczsKICAgICAgICAgICAgICAgIHZhciBkYXRhU2l6ZXMgPSByZWYuZGF0YVNpemVzOwoKICAgICAgICAgICAgICAgIHJldHVybiBzaXplcyB8fCBkYXRhU2l6ZXM7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBpc0ltZzogZnVuY3Rpb24oXywgJGVsKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gaXNJbWcoJGVsKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHRhcmdldDogewoKICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24ocmVmKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IHJlZi50YXJnZXQ7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBbdGhpcy4kZWxdLmNvbmNhdChxdWVyeUFsbCh0YXJnZXQsIHRoaXMuJGVsKSk7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIHdhdGNoOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLm9ic2VydmUoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBvZmZzZXRUb3A6IGZ1bmN0aW9uKHJlZikgewogICAgICAgICAgICAgICAgdmFyIG9mZnNldFRvcCA9IHJlZi5vZmZzZXRUb3A7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRvUHgob2Zmc2V0VG9wLCAnaGVpZ2h0Jyk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBvZmZzZXRMZWZ0OiBmdW5jdGlvbihyZWYpIHsKICAgICAgICAgICAgICAgIHZhciBvZmZzZXRMZWZ0ID0gcmVmLm9mZnNldExlZnQ7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRvUHgob2Zmc2V0TGVmdCwgJ3dpZHRoJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgfSwKCiAgICAgICAgY29ubmVjdGVkOiBmdW5jdGlvbigpIHsKCiAgICAgICAgICAgIGlmIChzdG9yYWdlW3RoaXMuY2FjaGVLZXldKSB7CiAgICAgICAgICAgICAgICBzZXRTcmNBdHRycyh0aGlzLiRlbCwgc3RvcmFnZVt0aGlzLmNhY2hlS2V5XSB8fCB0aGlzLmRhdGFTcmMsIHRoaXMuZGF0YVNyY3NldCwgdGhpcy5zaXplcyk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0ltZyAmJiB0aGlzLndpZHRoICYmIHRoaXMuaGVpZ2h0KSB7CiAgICAgICAgICAgICAgICBzZXRTcmNBdHRycyh0aGlzLiRlbCwgZ2V0UGxhY2Vob2xkZXJJbWFnZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5zaXplcykpOwogICAgICAgICAgICB9CgogICAgICAgICAgICB0aGlzLm9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKHRoaXMubG9hZCwgewogICAgICAgICAgICAgICAgcm9vdE1hcmdpbjogKCh0aGlzLm9mZnNldFRvcCkgKyAicHggIiArICh0aGlzLm9mZnNldExlZnQpICsgInB4IikKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5vYnNlcnZlKTsKCiAgICAgICAgfSwKCiAgICAgICAgZGlzY29ubmVjdGVkOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdGhpcy5vYnNlcnZlci5kaXNjb25uZWN0KCk7CiAgICAgICAgfSwKCiAgICAgICAgdXBkYXRlOiB7CgogICAgICAgICAgICByZWFkOiBmdW5jdGlvbihyZWYpIHsKICAgICAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzOwogICAgICAgICAgICAgICAgdmFyIGltYWdlID0gcmVmLmltYWdlOwoKCiAgICAgICAgICAgICAgICBpZiAoIWltYWdlICYmIGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWQodGhpcy5vYnNlcnZlci50YWtlUmVjb3JkcygpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0ltZykgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpbWFnZSAmJiBpbWFnZS50aGVuKGZ1bmN0aW9uIChpbWcpIHsgcmV0dXJuIGltZyAmJiBpbWcuY3VycmVudFNyYyAhPT0gJycgJiYgc2V0U3JjQXR0cnModGhpcyQxLiRlbCwgY3VycmVudFNyYyhpbWcpKTsgfSk7CgogICAgICAgICAgICB9LAoKICAgICAgICAgICAgd3JpdGU6IGZ1bmN0aW9uKGRhdGEpIHsKCiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhU3Jjc2V0ICYmIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvICE9PSAxKSB7CgogICAgICAgICAgICAgICAgICAgIHZhciBiZ1NpemUgPSBjc3ModGhpcy4kZWwsICdiYWNrZ3JvdW5kU2l6ZScpOwogICAgICAgICAgICAgICAgICAgIGlmIChiZ1NpemUubWF0Y2goL14oYXV0b1xzPykrJC8pIHx8IHRvRmxvYXQoYmdTaXplKSA9PT0gZGF0YS5iZ1NpemUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5iZ1NpemUgPSBnZXRTb3VyY2VTaXplKHRoaXMuZGF0YVNyY3NldCwgdGhpcy5zaXplcyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNzcyh0aGlzLiRlbCwgJ2JhY2tncm91bmRTaXplJywgKChkYXRhLmJnU2l6ZSkgKyAicHgiKSk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBldmVudHM6IFsncmVzaXplJ10KCiAgICAgICAgfSwKCiAgICAgICAgbWV0aG9kczogewoKICAgICAgICAgICAgbG9hZDogZnVuY3Rpb24oZW50cmllcykgewogICAgICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7CgoKICAgICAgICAgICAgICAgIC8vIE9sZCBjaHJvbWl1bSBiYXNlZCBicm93c2VycyAoVUMgQnJvd3NlcikgZGlkIG5vdCBpbXBsZW1lbnQgYGlzSW50ZXJzZWN0aW5nYAogICAgICAgICAgICAgICAgaWYgKCFlbnRyaWVzLnNvbWUoZnVuY3Rpb24gKGVudHJ5KSB7IHJldHVybiBpc1VuZGVmaW5lZChlbnRyeS5pc0ludGVyc2VjdGluZykgfHwgZW50cnkuaXNJbnRlcnNlY3Rpbmc7IH0pKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRoaXMuX2RhdGEuaW1hZ2UgPSBnZXRJbWFnZSh0aGlzLmRhdGFTcmMsIHRoaXMuZGF0YVNyY3NldCwgdGhpcy5zaXplcykudGhlbihmdW5jdGlvbiAoaW1nKSB7CgogICAgICAgICAgICAgICAgICAgIHNldFNyY0F0dHJzKHRoaXMkMS4kZWwsIGN1cnJlbnRTcmMoaW1nKSwgaW1nLnNyY3NldCwgaW1nLnNpemVzKTsKICAgICAgICAgICAgICAgICAgICBzdG9yYWdlW3RoaXMkMS5jYWNoZUtleV0gPSBjdXJyZW50U3JjKGltZyk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGltZzsKCiAgICAgICAgICAgICAgICB9LCBub29wKTsKCiAgICAgICAgICAgICAgICB0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIG9ic2VydmU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7CgogICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9kYXRhLmltYWdlICYmIHRoaXMuX2Nvbm5lY3RlZCkgewogICAgICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0LmZvckVhY2goZnVuY3Rpb24gKGVsKSB7IHJldHVybiB0aGlzJDEub2JzZXJ2ZXIub2JzZXJ2ZShlbCk7IH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICB9OwoKICAgIGZ1bmN0aW9uIHNldFNyY0F0dHJzKGVsLCBzcmMsIHNyY3NldCwgc2l6ZXMpIHsKCiAgICAgICAgaWYgKGlzSW1nKGVsKSkgewogICAgICAgICAgICBzaXplcyAmJiAoZWwuc2l6ZXMgPSBzaXplcyk7CiAgICAgICAgICAgIHNyY3NldCAmJiAoZWwuc3Jjc2V0ID0gc3Jjc2V0KTsKICAgICAgICAgICAgc3JjICYmIChlbC5zcmMgPSBzcmMpOwogICAgICAgIH0gZWxzZSBpZiAoc3JjKSB7CgogICAgICAgICAgICB2YXIgY2hhbmdlID0gIWluY2x1ZGVzKGVsLnN0eWxlLmJhY2tncm91bmRJbWFnZSwgc3JjKTsKICAgICAgICAgICAgaWYgKGNoYW5nZSkgewogICAgICAgICAgICAgICAgY3NzKGVsLCAnYmFja2dyb3VuZEltYWdlJywgKCJ1cmwoIiArIChlc2NhcGUoc3JjKSkgKyAiKSIpKTsKICAgICAgICAgICAgICAgIHRyaWdnZXIoZWwsIGNyZWF0ZUV2ZW50KCdsb2FkJywgZmFsc2UpKTsKICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgfQoKICAgIGZ1bmN0aW9uIGdldFBsYWNlaG9sZGVySW1hZ2Uod2lkdGgsIGhlaWdodCwgc2l6ZXMpIHsKICAgICAgICB2YXIgYXNzaWduOwoKCiAgICAgICAgaWYgKHNpemVzKSB7CiAgICAgICAgICAgICgoYXNzaWduID0gRGltZW5zaW9ucy5yYXRpbyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0sICd3aWR0aCcsIHRvUHgoc2l6ZXNUb1BpeGVsKHNpemVzKSkpLCB3aWR0aCA9IGFzc2lnbi53aWR0aCwgaGVpZ2h0ID0gYXNzaWduLmhlaWdodCkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICgiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIiICsgd2lkdGggKyAiXCIgaGVpZ2h0PVwiIiArIGhlaWdodCArICJcIj48L3N2Zz4iKTsKICAgIH0KCiAgICB2YXIgc2l6ZXNSZSA9IC9ccyooLio/KVxzKihcdyt8Y2FsY1woLio/XCkpXHMqKD86LHwkKS9nOwogICAgZnVuY3Rpb24gc2l6ZXNUb1BpeGVsKHNpemVzKSB7CiAgICAgICAgdmFyIG1hdGNoZXM7CgogICAgICAgIHNpemVzUmUubGFzdEluZGV4ID0gMDsKCiAgICAgICAgd2hpbGUgKChtYXRjaGVzID0gc2l6ZXNSZS5leGVjKHNpemVzKSkpIHsKICAgICAgICAgICAgaWYgKCFtYXRjaGVzWzFdIHx8IHdpbmRvdy5tYXRjaE1lZGlhKG1hdGNoZXNbMV0pLm1hdGNoZXMpIHsKICAgICAgICAgICAgICAgIG1hdGNoZXMgPSBldmFsdWF0ZVNpemUobWF0Y2hlc1syXSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG1hdGNoZXMgfHwgJzEwMHZ3JzsKICAgIH0KCiAgICB2YXIgc2l6ZVJlID0gL1xkKyg/Olx3K3wlKS9nOwogICAgdmFyIGFkZGl0aW9uUmUgPSAvWystXT8oXGQrKS9nOwogICAgZnVuY3Rpb24gZXZhbHVhdGVTaXplKHNpemUpIHsKICAgICAgICByZXR1cm4gc3RhcnRzV2l0aChzaXplLCAnY2FsYycpCiAgICAgICAgICAgID8gc2l6ZQogICAgICAgICAgICAgICAgLnN1YnN0cmluZyg1LCBzaXplLmxlbmd0aCAtIDEpCiAgICAgICAgICAgICAgICAucmVwbGFjZShzaXplUmUsIGZ1bmN0aW9uIChzaXplKSB7IHJldHVybiB0b1B4KHNpemUpOyB9KQogICAgICAgICAgICAgICAgLnJlcGxhY2UoLyAvZywgJycpCiAgICAgICAgICAgICAgICAubWF0Y2goYWRkaXRpb25SZSkKICAgICAgICAgICAgICAgIC5yZWR1Y2UoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEgKyArYjsgfSwgMCkKICAgICAgICAgICAgOiBzaXplOwogICAgfQoKICAgIHZhciBzcmNTZXRSZSA9IC9ccytcZCt3XHMqKD86LHwkKS9nOwogICAgZnVuY3Rpb24gZ2V0U291cmNlU2l6ZShzcmNzZXQsIHNpemVzKSB7CiAgICAgICAgdmFyIHNyY1NpemUgPSB0b1B4KHNpemVzVG9QaXhlbChzaXplcykpOwogICAgICAgIHZhciBkZXNjcmlwdG9ycyA9IChzcmNzZXQubWF0Y2goc3JjU2V0UmUpIHx8IFtdKS5tYXAodG9GbG9hdCkuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYSAtIGI7IH0pOwoKICAgICAgICByZXR1cm4gZGVzY3JpcHRvcnMuZmlsdGVyKGZ1bmN0aW9uIChzaXplKSB7IHJldHVybiBzaXplID49IHNyY1NpemU7IH0pWzBdIHx8IGRlc2NyaXB0b3JzLnBvcCgpIHx8ICcnOwogICAgfQoKICAgIGZ1bmN0aW9uIGlzSW1nKGVsKSB7CiAgICAgICAgcmV0dXJuIGVsLnRhZ05hbWUgPT09ICdJTUcnOwogICAgfQoKICAgIGZ1bmN0aW9uIGN1cnJlbnRTcmMoZWwpIHsKICAgICAgICByZXR1cm4gZWwuY3VycmVudFNyYyB8fCBlbC5zcmM7CiAgICB9CgogICAgdmFyIGtleSA9ICdfX3Rlc3RfXyc7CiAgICB2YXIgc3RvcmFnZTsKCiAgICAvLyB3b3JrYXJvdW5kIGZvciBTYWZhcmkncyBwcml2YXRlIGJyb3dzaW5nIG1vZGUgYW5kIGFjY2Vzc2luZyBzZXNzaW9uU3RvcmFnZSBpbiBCbGluawogICAgdHJ5IHsKICAgICAgICBzdG9yYWdlID0gd2luZG93LnNlc3Npb25TdG9yYWdlIHx8IHt9OwogICAgICAgIHN0b3JhZ2Vba2V5XSA9IDE7CiAgICAgICAgZGVsZXRlIHN0b3JhZ2Vba2V5XTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICBzdG9yYWdlID0ge307CiAgICB9CgogICAgdmFyIE1lZGlhID0gewoKICAgICAgICBwcm9wczogewogICAgICAgICAgICBtZWRpYTogQm9vbGVhbgogICAgICAgIH0sCgogICAgICAgIGRhdGE6IHsKICAgICAgICAgICAgbWVkaWE6IGZhbHNlCiAgICAgICAgfSwKCiAgICAgICAgY29tcHV0ZWQ6IHsKCiAgICAgICAgICAgIG1hdGNoTWVkaWE6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIG1lZGlhID0gdG9NZWRpYSh0aGlzLm1lZGlhKTsKICAgICAgICAgICAgICAgIHJldHVybiAhbWVkaWEgfHwgd2luZG93Lm1hdGNoTWVkaWEobWVkaWEpLm1hdGNoZXM7CiAgICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgIH07CgogICAgZnVuY3Rpb24gdG9NZWRpYSh2YWx1ZSkgewoKICAgICAgICBpZiAoaXNTdHJpbmcodmFsdWUpKSB7CiAgICAgICAgICAgIGlmICh2YWx1ZVswXSA9PT0gJ0AnKSB7CiAgICAgICAgICAgICAgICB2YXIgbmFtZSA9ICJicmVha3BvaW50LSIgKyAodmFsdWUuc3Vic3RyKDEpKTsKICAgICAgICAgICAgICAgIHZhbHVlID0gdG9GbG9hdChnZXRDc3NWYXIobmFtZSkpOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzTmFOKHZhbHVlKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdmFsdWUgJiYgIWlzTmFOKHZhbHVlKSA/ICgiKG1pbi13aWR0aDogIiArIHZhbHVlICsgInB4KSIpIDogZmFsc2U7CiAgICB9CgogICAgdmFyIExlYWRlciA9IHsKCiAgICAgICAgbWl4aW5zOiBbQ2xhc3MsIE1lZGlhXSwKCiAgICAgICAgcHJvcHM6IHsKICAgICAgICAgICAgZmlsbDogU3RyaW5nCiAgICAgICAgfSwKCiAgICAgICAgZGF0YTogewogICAgICAgICAgICBmaWxsOiAnJywKICAgICAgICAgICAgY2xzV3JhcHBlcjogJ3VrLWxlYWRlci1maWxsJywKICAgICAgICAgICAgY2xzSGlkZTogJ3VrLWxlYWRlci1oaWRlJywKICAgICAgICAgICAgYXR0ckZpbGw6ICdkYXRhLWZpbGwnCiAgICAgICAgfSwKCiAgICAgICAgY29tcHV0ZWQ6IHsKCiAgICAgICAgICAgIGZpbGw6IGZ1bmN0aW9uKHJlZikgewogICAgICAgICAgICAgICAgdmFyIGZpbGwgPSByZWYuZmlsbDsKCiAgICAgICAgICAgICAgICByZXR1cm4gZmlsbCB8fCBnZXRDc3NWYXIoJ2xlYWRlci1maWxsLWNvbnRlbnQnKTsKICAgICAgICAgICAgfQoKICAgICAgICB9LAoKICAgICAgICBjb25uZWN0ZWQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgYXNzaWduOwoKICAgICAgICAgICAgKGFzc2lnbiA9IHdyYXBJbm5lcih0aGlzLiRlbCwgKCI8c3BhbiBjbGFzcz1cIiIgKyAodGhpcy5jbHNXcmFwcGVyKSArICJcIj4iKSksIHRoaXMud3JhcHBlciA9IGFzc2lnblswXSk7CiAgICAgICAgfSwKCiAgICAgICAgZGlzY29ubmVjdGVkOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdW53cmFwKHRoaXMud3JhcHBlci5jaGlsZE5vZGVzKTsKICAgICAgICB9LAoKICAgICAgICB1cGRhdGU6IHsKCiAgICAgICAgICAgIHJlYWQ6IGZ1bmN0aW9uKHJlZikgewogICAgICAgICAgICAgICAgdmFyIGNoYW5nZWQgPSByZWYuY2hhbmdlZDsKICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IHJlZi53aWR0aDsKCgogICAgICAgICAgICAgICAgdmFyIHByZXYgPSB3aWR0aDsKCiAgICAgICAgICAgICAgICB3aWR0aCA9IE1hdGguZmxvb3IodGhpcy4kZWwub2Zmc2V0V2lkdGggLyAyKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIHdpZHRoOiB3aWR0aCwKICAgICAgICAgICAgICAgICAgICBmaWxsOiB0aGlzLmZpbGwsCiAgICAgICAgICAgICAgICAgICAgY2hhbmdlZDogY2hhbmdlZCB8fCBwcmV2ICE9PSB3aWR0aCwKICAgICAgICAgICAgICAgICAgICBoaWRlOiAhdGhpcy5tYXRjaE1lZGlhCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgd3JpdGU6IGZ1bmN0aW9uKGRhdGEpIHsKCiAgICAgICAgICAgICAgICB0b2dnbGVDbGFzcyh0aGlzLndyYXBwZXIsIHRoaXMuY2xzSGlkZSwgZGF0YS5oaWRlKTsKCiAgICAgICAgICAgICAgICBpZiAoZGF0YS5jaGFuZ2VkKSB7CiAgICAgICAgICAgICAgICAgICAgZGF0YS5jaGFuZ2VkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgYXR0cih0aGlzLndyYXBwZXIsIHRoaXMuYXR0ckZpbGwsIG5ldyBBcnJheShkYXRhLndpZHRoKS5qb2luKGRhdGEuZmlsbCkpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGV2ZW50czogWydyZXNpemUnXQoKICAgICAgICB9CgogICAgfTsKCiAgICB2YXIgQ29udGFpbmVyID0gewoKICAgICAgICBwcm9wczogewogICAgICAgICAgICBjb250YWluZXI6IEJvb2xlYW4KICAgICAgICB9LAoKICAgICAgICBkYXRhOiB7CiAgICAgICAgICAgIGNvbnRhaW5lcjogdHJ1ZQogICAgICAgIH0sCgogICAgICAgIGNvbXB1dGVkOiB7CgogICAgICAgICAgICBjb250YWluZXI6IGZ1bmN0aW9uKHJlZikgewogICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IHJlZi5jb250YWluZXI7CgogICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lciA9PT0gdHJ1ZSAmJiB0aGlzLiRjb250YWluZXIgfHwgY29udGFpbmVyICYmICQoY29udGFpbmVyKTsKICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgfTsKCiAgICB2YXIgYWN0aXZlJDEgPSBbXTsKCiAgICB2YXIgTW9kYWwgPSB7CgogICAgICAgIG1peGluczogW0NsYXNzLCBDb250YWluZXIsIFRvZ2dsYWJsZV0sCgogICAgICAgIHByb3BzOiB7CiAgICAgICAgICAgIHNlbFBhbmVsOiBTdHJpbmcsCiAgICAgICAgICAgIHNlbENsb3NlOiBTdHJpbmcsCiAgICAgICAgICAgIGVzY0Nsb3NlOiBCb29sZWFuLAogICAgICAgICAgICBiZ0Nsb3NlOiBCb29sZWFuLAogICAgICAgICAgICBzdGFjazogQm9vbGVhbgogICAgICAgIH0sCgogICAgICAgIGRhdGE6IHsKICAgICAgICAgICAgY2xzOiAndWstb3BlbicsCiAgICAgICAgICAgIGVzY0Nsb3NlOiB0cnVlLAogICAgICAgICAgICBiZ0Nsb3NlOiB0cnVlLAogICAgICAgICAgICBvdmVybGF5OiB0cnVlLAogICAgICAgICAgICBzdGFjazogZmFsc2UKICAgICAgICB9LAoKICAgICAgICBjb21wdXRlZDogewoKICAgICAgICAgICAgcGFuZWw6IGZ1bmN0aW9uKHJlZiwgJGVsKSB7CiAgICAgICAgICAgICAgICB2YXIgc2VsUGFuZWwgPSByZWYuc2VsUGFuZWw7CgogICAgICAgICAgICAgICAgcmV0dXJuICQoc2VsUGFuZWwsICRlbCk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICB0cmFuc2l0aW9uRWxlbWVudDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYW5lbDsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGJnQ2xvc2U6IGZ1bmN0aW9uKHJlZikgewogICAgICAgICAgICAgICAgdmFyIGJnQ2xvc2UgPSByZWYuYmdDbG9zZTsKCiAgICAgICAgICAgICAgICByZXR1cm4gYmdDbG9zZSAmJiB0aGlzLnBhbmVsOwogICAgICAgICAgICB9CgogICAgICAgIH0sCgogICAgICAgIGJlZm9yZURpc2Nvbm5lY3Q6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZiAodGhpcy5pc1RvZ2dsZWQoKSkgewogICAgICAgICAgICAgICAgdGhpcy50b2dnbGVOb3codGhpcy4kZWwsIGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIGV2ZW50czogWwoKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgIG5hbWU6ICdjbGljaycsCgogICAgICAgICAgICAgICAgZGVsZWdhdGU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbENsb3NlOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZSgpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICBuYW1lOiAndG9nZ2xlJywKCiAgICAgICAgICAgICAgICBzZWxmOiB0cnVlLAoKICAgICAgICAgICAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uKGUpIHsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGUuZGVmYXVsdFByZXZlbnRlZCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGUoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBuYW1lOiAnYmVmb3Jlc2hvdycsCgogICAgICAgICAgICAgICAgc2VsZjogdHJ1ZSwKCiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbihlKSB7CgogICAgICAgICAgICAgICAgICAgIGlmIChpbmNsdWRlcyhhY3RpdmUkMSwgdGhpcykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnN0YWNrICYmIGFjdGl2ZSQxLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlLmFsbChhY3RpdmUkMS5tYXAoZnVuY3Rpb24gKG1vZGFsKSB7IHJldHVybiBtb2RhbC5oaWRlKCk7IH0pKS50aGVuKHRoaXMuc2hvdyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmUkMS5wdXNoKHRoaXMpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgbmFtZTogJ3Nob3cnLAoKICAgICAgICAgICAgICAgIHNlbGY6IHRydWUsCgogICAgICAgICAgICAgICAgaGFuZGxlcjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7CgoKICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGgod2luZG93KSAtIHdpZHRoKGRvY3VtZW50KSAmJiB0aGlzLm92ZXJsYXkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY3NzKGRvY3VtZW50LmJvZHksICdvdmVyZmxvd1knLCAnc2Nyb2xsJyk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBhZGRDbGFzcyhkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIHRoaXMuY2xzUGFnZSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmJnQ2xvc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgb25jZSh0aGlzLiRlbCwgJ2hpZGUnLCBkZWxheU9uKGRvY3VtZW50LCAnY2xpY2snLCBmdW5jdGlvbiAocmVmKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVmYXVsdFByZXZlbnRlZCA9IHJlZi5kZWZhdWx0UHJldmVudGVkOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IHJlZi50YXJnZXQ7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSBsYXN0KGFjdGl2ZSQxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGVmYXVsdFByZXZlbnRlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGN1cnJlbnQgPT09IHRoaXMkMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICghY3VycmVudC5vdmVybGF5IHx8IHdpdGhpbih0YXJnZXQsIGN1cnJlbnQuJGVsKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhd2l0aGluKHRhcmdldCwgY3VycmVudC5wYW5lbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQuaGlkZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9KSwge3NlbGY6IHRydWV9KTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmVzY0Nsb3NlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG9uY2UodGhpcy4kZWwsICdoaWRlJywgb24oZG9jdW1lbnQsICdrZXlkb3duJywgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50ID0gbGFzdChhY3RpdmUkMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5rZXlDb2RlID09PSAyNyAmJiBjdXJyZW50ID09PSB0aGlzJDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC5oaWRlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pLCB7c2VsZjogdHJ1ZX0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgbmFtZTogJ2hpZGRlbicsCgogICAgICAgICAgICAgICAgc2VsZjogdHJ1ZSwKCiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpczsKCgogICAgICAgICAgICAgICAgICAgIGFjdGl2ZSQxLnNwbGljZShhY3RpdmUkMS5pbmRleE9mKHRoaXMpLCAxKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCFhY3RpdmUkMS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY3NzKGRvY3VtZW50LmJvZHksICdvdmVyZmxvd1knLCAnJyk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoIWFjdGl2ZSQxLnNvbWUoZnVuY3Rpb24gKG1vZGFsKSB7IHJldHVybiBtb2RhbC5jbHNQYWdlID09PSB0aGlzJDEuY2xzUGFnZTsgfSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3MoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCB0aGlzLmNsc1BhZ2UpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9CgogICAgICAgIF0sCgogICAgICAgIG1ldGhvZHM6IHsKCiAgICAgICAgICAgIHRvZ2dsZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pc1RvZ2dsZWQoKSA/IHRoaXMuaGlkZSgpIDogdGhpcy5zaG93KCk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBzaG93OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzOwoKCiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250YWluZXIgJiYgdGhpcy4kZWwucGFyZW50Tm9kZSAhPT0gdGhpcy5jb250YWluZXIpIHsKICAgICAgICAgICAgICAgICAgICBhcHBlbmQodGhpcy5jb250YWluZXIsIHRoaXMuJGVsKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmV0dXJuIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzJDEuc2hvdygpLnRoZW4ocmVzb2x2ZSk7IH0KICAgICAgICAgICAgICAgICAgICAgICAgKTsgfQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9nZ2xlRWxlbWVudCh0aGlzLiRlbCwgdHJ1ZSwgYW5pbWF0ZSQxKHRoaXMpKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGhpZGU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9nZ2xlRWxlbWVudCh0aGlzLiRlbCwgZmFsc2UsIGFuaW1hdGUkMSh0aGlzKSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgIH07CgogICAgZnVuY3Rpb24gYW5pbWF0ZSQxKHJlZikgewogICAgICAgIHZhciB0cmFuc2l0aW9uRWxlbWVudCA9IHJlZi50cmFuc2l0aW9uRWxlbWVudDsKICAgICAgICB2YXIgX3RvZ2dsZSA9IHJlZi5fdG9nZ2xlOwoKICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVsLCBzaG93KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHJldHVybiBvbmNlKGVsLCAnc2hvdyBoaWRlJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgIGVsLl9yZWplY3QgJiYgZWwuX3JlamVjdCgpOwogICAgICAgICAgICAgICAgICAgIGVsLl9yZWplY3QgPSByZWplY3Q7CgogICAgICAgICAgICAgICAgICAgIF90b2dnbGUoZWwsIHNob3cpOwoKICAgICAgICAgICAgICAgICAgICB2YXIgb2ZmID0gb25jZSh0cmFuc2l0aW9uRWxlbWVudCwgJ3RyYW5zaXRpb25zdGFydCcsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgb25jZSh0cmFuc2l0aW9uRWxlbWVudCwgJ3RyYW5zaXRpb25lbmQgdHJhbnNpdGlvbmNhbmNlbCcsIHJlc29sdmUsIHtzZWxmOiB0cnVlfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7CiAgICAgICAgICAgICAgICAgICAgfSwge3NlbGY6IHRydWV9KTsKCiAgICAgICAgICAgICAgICAgICAgdmFyIHRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG9mZigpOwogICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7CiAgICAgICAgICAgICAgICAgICAgfSwgdG9Ncyhjc3ModHJhbnNpdGlvbkVsZW1lbnQsICd0cmFuc2l0aW9uRHVyYXRpb24nKSkpOwoKICAgICAgICAgICAgICAgIH0pOyB9CiAgICAgICAgICAgICk7IH07CiAgICB9CgogICAgdmFyIE1vZGFsJDEgPSB7CgogICAgICAgIGluc3RhbGw6IGluc3RhbGwkMSwKCiAgICAgICAgbWl4aW5zOiBbTW9kYWxdLAoKICAgICAgICBkYXRhOiB7CiAgICAgICAgICAgIGNsc1BhZ2U6ICd1ay1tb2RhbC1wYWdlJywKICAgICAgICAgICAgc2VsUGFuZWw6ICcudWstbW9kYWwtZGlhbG9nJywKICAgICAgICAgICAgc2VsQ2xvc2U6ICcudWstbW9kYWwtY2xvc2UsIC51ay1tb2RhbC1jbG9zZS1kZWZhdWx0LCAudWstbW9kYWwtY2xvc2Utb3V0c2lkZSwgLnVrLW1vZGFsLWNsb3NlLWZ1bGwnCiAgICAgICAgfSwKCiAgICAgICAgZXZlbnRzOiBbCgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBuYW1lOiAnc2hvdycsCgogICAgICAgICAgICAgICAgc2VsZjogdHJ1ZSwKCiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbigpIHsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0NsYXNzKHRoaXMucGFuZWwsICd1ay1tYXJnaW4tYXV0by12ZXJ0aWNhbCcpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGFkZENsYXNzKHRoaXMuJGVsLCAndWstZmxleCcpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNzcyh0aGlzLiRlbCwgJ2Rpc3BsYXknLCAnYmxvY2snKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGhlaWdodCh0aGlzLiRlbCk7IC8vIGZvcmNlIHJlZmxvdwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbmFtZTogJ2hpZGRlbicsCgogICAgICAgICAgICAgICAgc2VsZjogdHJ1ZSwKCiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbigpIHsKCiAgICAgICAgICAgICAgICAgICAgY3NzKHRoaXMuJGVsLCAnZGlzcGxheScsICcnKTsKICAgICAgICAgICAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLiRlbCwgJ3VrLWZsZXgnKTsKCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgXQoKICAgIH07CgogICAgZnVuY3Rpb24gaW5zdGFsbCQxKFVJa2l0KSB7CgogICAgICAgIFVJa2l0Lm1vZGFsLmRpYWxvZyA9IGZ1bmN0aW9uIChjb250ZW50LCBvcHRpb25zKSB7CgogICAgICAgICAgICB2YXIgZGlhbG9nID0gVUlraXQubW9kYWwoKCIgPGRpdiBjbGFzcz1cInVrLW1vZGFsXCI+IDxkaXYgY2xhc3M9XCJ1ay1tb2RhbC1kaWFsb2dcIj4iICsgY29udGVudCArICI8L2Rpdj4gPC9kaXY+ICIpLCBvcHRpb25zKTsKCiAgICAgICAgICAgIGRpYWxvZy5zaG93KCk7CgogICAgICAgICAgICBvbihkaWFsb2cuJGVsLCAnaGlkZGVuJywgZnVuY3Rpb24gKCkgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRpYWxvZy4kZGVzdHJveSh0cnVlKTsgfSk7IH0sIHtzZWxmOiB0cnVlfSk7CgogICAgICAgICAgICByZXR1cm4gZGlhbG9nOwogICAgICAgIH07CgogICAgICAgIFVJa2l0Lm1vZGFsLmFsZXJ0ID0gZnVuY3Rpb24gKG1lc3NhZ2UsIG9wdGlvbnMpIHsKCiAgICAgICAgICAgIG9wdGlvbnMgPSBhc3NpZ24oe2JnQ2xvc2U6IGZhbHNlLCBlc2NDbG9zZTogZmFsc2UsIGxhYmVsczogVUlraXQubW9kYWwubGFiZWxzfSwgb3B0aW9ucyk7CgogICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoCiAgICAgICAgICAgICAgICBmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXR1cm4gb24oVUlraXQubW9kYWwuZGlhbG9nKCgiIDxkaXYgY2xhc3M9XCJ1ay1tb2RhbC1ib2R5XCI+IiArIChpc1N0cmluZyhtZXNzYWdlKSA/IG1lc3NhZ2UgOiBodG1sKG1lc3NhZ2UpKSArICI8L2Rpdj4gPGRpdiBjbGFzcz1cInVrLW1vZGFsLWZvb3RlciB1ay10ZXh0LXJpZ2h0XCI+IDxidXR0b24gY2xhc3M9XCJ1ay1idXR0b24gdWstYnV0dG9uLXByaW1hcnkgdWstbW9kYWwtY2xvc2VcIiBhdXRvZm9jdXM+IiArIChvcHRpb25zLmxhYmVscy5vaykgKyAiPC9idXR0b24+IDwvZGl2PiAiKSwgb3B0aW9ucykuJGVsLCAnaGlkZScsIHJlc29sdmUpOyB9CiAgICAgICAgICAgICk7CiAgICAgICAgfTsKCiAgICAgICAgVUlraXQubW9kYWwuY29uZmlybSA9IGZ1bmN0aW9uIChtZXNzYWdlLCBvcHRpb25zKSB7CgogICAgICAgICAgICBvcHRpb25zID0gYXNzaWduKHtiZ0Nsb3NlOiBmYWxzZSwgZXNjQ2xvc2U6IHRydWUsIGxhYmVsczogVUlraXQubW9kYWwubGFiZWxzfSwgb3B0aW9ucyk7CgogICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewoKICAgICAgICAgICAgICAgIHZhciBjb25maXJtID0gVUlraXQubW9kYWwuZGlhbG9nKCgiIDxmb3JtPiA8ZGl2IGNsYXNzPVwidWstbW9kYWwtYm9keVwiPiIgKyAoaXNTdHJpbmcobWVzc2FnZSkgPyBtZXNzYWdlIDogaHRtbChtZXNzYWdlKSkgKyAiPC9kaXY+IDxkaXYgY2xhc3M9XCJ1ay1tb2RhbC1mb290ZXIgdWstdGV4dC1yaWdodFwiPiA8YnV0dG9uIGNsYXNzPVwidWstYnV0dG9uIHVrLWJ1dHRvbi1kZWZhdWx0IHVrLW1vZGFsLWNsb3NlXCIgdHlwZT1cImJ1dHRvblwiPiIgKyAob3B0aW9ucy5sYWJlbHMuY2FuY2VsKSArICI8L2J1dHRvbj4gPGJ1dHRvbiBjbGFzcz1cInVrLWJ1dHRvbiB1ay1idXR0b24tcHJpbWFyeVwiIGF1dG9mb2N1cz4iICsgKG9wdGlvbnMubGFiZWxzLm9rKSArICI8L2J1dHRvbj4gPC9kaXY+IDwvZm9ybT4gIiksIG9wdGlvbnMpOwoKICAgICAgICAgICAgICAgIHZhciByZXNvbHZlZCA9IGZhbHNlOwoKICAgICAgICAgICAgICAgIG9uKGNvbmZpcm0uJGVsLCAnc3VibWl0JywgJ2Zvcm0nLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGNvbmZpcm0uaGlkZSgpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBvbihjb25maXJtLiRlbCwgJ2hpZGUnLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXNvbHZlZCkgewogICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIH0pOwogICAgICAgIH07CgogICAgICAgIFVJa2l0Lm1vZGFsLnByb21wdCA9IGZ1bmN0aW9uIChtZXNzYWdlLCB2YWx1ZSwgb3B0aW9ucykgewoKICAgICAgICAgICAgb3B0aW9ucyA9IGFzc2lnbih7YmdDbG9zZTogZmFsc2UsIGVzY0Nsb3NlOiB0cnVlLCBsYWJlbHM6IFVJa2l0Lm1vZGFsLmxhYmVsc30sIG9wdGlvbnMpOwoKICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7CgogICAgICAgICAgICAgICAgdmFyIHByb21wdCA9IFVJa2l0Lm1vZGFsLmRpYWxvZygoIiA8Zm9ybSBjbGFzcz1cInVrLWZvcm0tc3RhY2tlZFwiPiA8ZGl2IGNsYXNzPVwidWstbW9kYWwtYm9keVwiPiA8bGFiZWw+IiArIChpc1N0cmluZyhtZXNzYWdlKSA/IG1lc3NhZ2UgOiBodG1sKG1lc3NhZ2UpKSArICI8L2xhYmVsPiA8aW5wdXQgY2xhc3M9XCJ1ay1pbnB1dFwiIGF1dG9mb2N1cz4gPC9kaXY+IDxkaXYgY2xhc3M9XCJ1ay1tb2RhbC1mb290ZXIgdWstdGV4dC1yaWdodFwiPiA8YnV0dG9uIGNsYXNzPVwidWstYnV0dG9uIHVrLWJ1dHRvbi1kZWZhdWx0IHVrLW1vZGFsLWNsb3NlXCIgdHlwZT1cImJ1dHRvblwiPiIgKyAob3B0aW9ucy5sYWJlbHMuY2FuY2VsKSArICI8L2J1dHRvbj4gPGJ1dHRvbiBjbGFzcz1cInVrLWJ1dHRvbiB1ay1idXR0b24tcHJpbWFyeVwiPiIgKyAob3B0aW9ucy5sYWJlbHMub2spICsgIjwvYnV0dG9uPiA8L2Rpdj4gPC9mb3JtPiAiKSwgb3B0aW9ucyksCiAgICAgICAgICAgICAgICAgICAgaW5wdXQgPSAkKCdpbnB1dCcsIHByb21wdC4kZWwpOwoKICAgICAgICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWU7CgogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVkID0gZmFsc2U7CgogICAgICAgICAgICAgICAgb24ocHJvbXB0LiRlbCwgJ3N1Ym1pdCcsICdmb3JtJywgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShpbnB1dC52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIHByb21wdC5oaWRlKCk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG9uKHByb21wdC4kZWwsICdoaWRlJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgIGlmICghcmVzb2x2ZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShudWxsKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIH0pOwogICAgICAgIH07CgogICAgICAgIFVJa2l0Lm1vZGFsLmxhYmVscyA9IHsKICAgICAgICAgICAgb2s6ICdPaycsCiAgICAgICAgICAgIGNhbmNlbDogJ0NhbmNlbCcKICAgICAgICB9OwoKICAgIH0KCiAgICB2YXIgTmF2ID0gewoKICAgICAgICBleHRlbmRzOiBBY2NvcmRpb24sCgogICAgICAgIGRhdGE6IHsKICAgICAgICAgICAgdGFyZ2V0czogJz4gLnVrLXBhcmVudCcsCiAgICAgICAgICAgIHRvZ2dsZTogJz4gYScsCiAgICAgICAgICAgIGNvbnRlbnQ6ICc+IHVsJwogICAgICAgIH0KCiAgICB9OwoKICAgIHZhciBOYXZiYXIgPSB7CgogICAgICAgIG1peGluczogW0NsYXNzLCBGbGV4QnVnXSwKCiAgICAgICAgcHJvcHM6IHsKICAgICAgICAgICAgZHJvcGRvd246IFN0cmluZywKICAgICAgICAgICAgbW9kZTogJ2xpc3QnLAogICAgICAgICAgICBhbGlnbjogU3RyaW5nLAogICAgICAgICAgICBvZmZzZXQ6IE51bWJlciwKICAgICAgICAgICAgYm91bmRhcnk6IEJvb2xlYW4sCiAgICAgICAgICAgIGJvdW5kYXJ5QWxpZ246IEJvb2xlYW4sCiAgICAgICAgICAgIGNsc0Ryb3A6IFN0cmluZywKICAgICAgICAgICAgZGVsYXlTaG93OiBOdW1iZXIsCiAgICAgICAgICAgIGRlbGF5SGlkZTogTnVtYmVyLAogICAgICAgICAgICBkcm9wYmFyOiBCb29sZWFuLAogICAgICAgICAgICBkcm9wYmFyTW9kZTogU3RyaW5nLAogICAgICAgICAgICBkcm9wYmFyQW5jaG9yOiBCb29sZWFuLAogICAgICAgICAgICBkdXJhdGlvbjogTnVtYmVyCiAgICAgICAgfSwKCiAgICAgICAgZGF0YTogewogICAgICAgICAgICBkcm9wZG93bjogJy51ay1uYXZiYXItbmF2ID4gbGknLAogICAgICAgICAgICBhbGlnbjogIWlzUnRsID8gJ2xlZnQnIDogJ3JpZ2h0JywKICAgICAgICAgICAgY2xzRHJvcDogJ3VrLW5hdmJhci1kcm9wZG93bicsCiAgICAgICAgICAgIG1vZGU6IHVuZGVmaW5lZCwKICAgICAgICAgICAgb2Zmc2V0OiB1bmRlZmluZWQsCiAgICAgICAgICAgIGRlbGF5U2hvdzogdW5kZWZpbmVkLAogICAgICAgICAgICBkZWxheUhpZGU6IHVuZGVmaW5lZCwKICAgICAgICAgICAgYm91bmRhcnlBbGlnbjogdW5kZWZpbmVkLAogICAgICAgICAgICBmbGlwOiAneCcsCiAgICAgICAgICAgIGJvdW5kYXJ5OiB0cnVlLAogICAgICAgICAgICBkcm9wYmFyOiBmYWxzZSwKICAgICAgICAgICAgZHJvcGJhck1vZGU6ICdzbGlkZScsCiAgICAgICAgICAgIGRyb3BiYXJBbmNob3I6IGZhbHNlLAogICAgICAgICAgICBkdXJhdGlvbjogMjAwLAogICAgICAgICAgICBmb3JjZUhlaWdodDogdHJ1ZSwKICAgICAgICAgICAgc2VsTWluSGVpZ2h0OiAnLnVrLW5hdmJhci1uYXYgPiBsaSA+IGEsIC51ay1uYXZiYXItaXRlbSwgLnVrLW5hdmJhci10b2dnbGUnCiAgICAgICAgfSwKCiAgICAgICAgY29tcHV0ZWQ6IHsKCiAgICAgICAgICAgIGJvdW5kYXJ5OiBmdW5jdGlvbihyZWYsICRlbCkgewogICAgICAgICAgICAgICAgdmFyIGJvdW5kYXJ5ID0gcmVmLmJvdW5kYXJ5OwogICAgICAgICAgICAgICAgdmFyIGJvdW5kYXJ5QWxpZ24gPSByZWYuYm91bmRhcnlBbGlnbjsKCiAgICAgICAgICAgICAgICByZXR1cm4gKGJvdW5kYXJ5ID09PSB0cnVlIHx8IGJvdW5kYXJ5QWxpZ24pID8gJGVsIDogYm91bmRhcnk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBkcm9wYmFyQW5jaG9yOiBmdW5jdGlvbihyZWYsICRlbCkgewogICAgICAgICAgICAgICAgdmFyIGRyb3BiYXJBbmNob3IgPSByZWYuZHJvcGJhckFuY2hvcjsKCiAgICAgICAgICAgICAgICByZXR1cm4gcXVlcnkoZHJvcGJhckFuY2hvciwgJGVsKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHBvczogZnVuY3Rpb24ocmVmKSB7CiAgICAgICAgICAgICAgICB2YXIgYWxpZ24gPSByZWYuYWxpZ247CgogICAgICAgICAgICAgICAgcmV0dXJuICgiYm90dG9tLSIgKyBhbGlnbik7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBkcm9wZG93bnM6IGZ1bmN0aW9uKHJlZiwgJGVsKSB7CiAgICAgICAgICAgICAgICB2YXIgZHJvcGRvd24gPSByZWYuZHJvcGRvd247CiAgICAgICAgICAgICAgICB2YXIgY2xzRHJvcCA9IHJlZi5jbHNEcm9wOwoKICAgICAgICAgICAgICAgIHJldHVybiAkJCgoZHJvcGRvd24gKyAiIC4iICsgY2xzRHJvcCksICRlbCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgfSwKCiAgICAgICAgYmVmb3JlQ29ubmVjdDogZnVuY3Rpb24oKSB7CgogICAgICAgICAgICB2YXIgcmVmID0gdGhpcy4kcHJvcHM7CiAgICAgICAgICAgIHZhciBkcm9wYmFyID0gcmVmLmRyb3BiYXI7CgogICAgICAgICAgICB0aGlzLmRyb3BiYXIgPSBkcm9wYmFyICYmIChxdWVyeShkcm9wYmFyLCB0aGlzLiRlbCkgfHwgJCgnKyAudWstbmF2YmFyLWRyb3BiYXInLCB0aGlzLiRlbCkgfHwgJCgnPGRpdj48L2Rpdj4nKSk7CgogICAgICAgICAgICBpZiAodGhpcy5kcm9wYmFyKSB7CgogICAgICAgICAgICAgICAgYWRkQ2xhc3ModGhpcy5kcm9wYmFyLCAndWstbmF2YmFyLWRyb3BiYXInKTsKCiAgICAgICAgICAgICAgICBpZiAodGhpcy5kcm9wYmFyTW9kZSA9PT0gJ3NsaWRlJykgewogICAgICAgICAgICAgICAgICAgIGFkZENsYXNzKHRoaXMuZHJvcGJhciwgJ3VrLW5hdmJhci1kcm9wYmFyLXNsaWRlJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgfSwKCiAgICAgICAgZGlzY29ubmVjdGVkOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdGhpcy5kcm9wYmFyICYmIHJlbW92ZSh0aGlzLmRyb3BiYXIpOwogICAgICAgIH0sCgogICAgICAgIHVwZGF0ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzOwoKCiAgICAgICAgICAgIHRoaXMuJGNyZWF0ZSgKICAgICAgICAgICAgICAgICdkcm9wJywKICAgICAgICAgICAgICAgIHRoaXMuZHJvcGRvd25zLmZpbHRlcihmdW5jdGlvbiAoZWwpIHsgcmV0dXJuICF0aGlzJDEuZ2V0RHJvcGRvd24oZWwpOyB9KSwKICAgICAgICAgICAgICAgIGFzc2lnbih7fSwgdGhpcy4kcHJvcHMsIHtib3VuZGFyeTogdGhpcy5ib3VuZGFyeSwgcG9zOiB0aGlzLnBvcywgb2Zmc2V0OiB0aGlzLmRyb3BiYXIgfHwgdGhpcy5vZmZzZXR9KQogICAgICAgICAgICApOwoKICAgICAgICB9LAoKICAgICAgICBldmVudHM6IFsKCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG5hbWU6ICdtb3VzZW92ZXInLAoKICAgICAgICAgICAgICAgIGRlbGVnYXRlOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kcm9wZG93bjsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgaGFuZGxlcjogZnVuY3Rpb24ocmVmKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSByZWYuY3VycmVudDsKCiAgICAgICAgICAgICAgICAgICAgdmFyIGFjdGl2ZSA9IHRoaXMuZ2V0QWN0aXZlKCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGl2ZSAmJiBhY3RpdmUudG9nZ2xlICYmICF3aXRoaW4oYWN0aXZlLnRvZ2dsZS4kZWwsIGN1cnJlbnQpICYmICFhY3RpdmUudHJhY2tlci5tb3Zlc1RvKGFjdGl2ZS4kZWwpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZS5oaWRlKGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9LAoKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbmFtZTogJ21vdXNlbGVhdmUnLAoKICAgICAgICAgICAgICAgIGVsOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kcm9wYmFyOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgYWN0aXZlID0gdGhpcy5nZXRBY3RpdmUoKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGl2ZSAmJiAhdGhpcy5kcm9wZG93bnMuc29tZShmdW5jdGlvbiAoZWwpIHsgcmV0dXJuIG1hdGNoZXMoZWwsICc6aG92ZXInKTsgfSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlLmhpZGUoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBuYW1lOiAnYmVmb3Jlc2hvdycsCgogICAgICAgICAgICAgICAgY2FwdHVyZTogdHJ1ZSwKCiAgICAgICAgICAgICAgICBmaWx0ZXI6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRyb3BiYXI7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uKCkgewoKICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZHJvcGJhci5wYXJlbnROb2RlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyKHRoaXMuZHJvcGJhckFuY2hvciB8fCB0aGlzLiRlbCwgdGhpcy5kcm9wYmFyKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbmFtZTogJ3Nob3cnLAoKICAgICAgICAgICAgICAgIGNhcHR1cmU6IHRydWUsCgogICAgICAgICAgICAgICAgZmlsdGVyOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kcm9wYmFyOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbihfLCBkcm9wKSB7CgogICAgICAgICAgICAgICAgICAgIHZhciAkZWwgPSBkcm9wLiRlbDsKICAgICAgICAgICAgICAgICAgICB2YXIgZGlyID0gZHJvcC5kaXI7CgogICAgICAgICAgICAgICAgICAgIHRoaXMuY2xzRHJvcCAmJiBhZGRDbGFzcygkZWwsICgodGhpcy5jbHNEcm9wKSArICItZHJvcGJhciIpKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGRpciA9PT0gJ2JvdHRvbScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8oJGVsLm9mZnNldEhlaWdodCArIHRvRmxvYXQoY3NzKCRlbCwgJ21hcmdpblRvcCcpKSArIHRvRmxvYXQoY3NzKCRlbCwgJ21hcmdpbkJvdHRvbScpKSwgJGVsKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBuYW1lOiAnYmVmb3JlaGlkZScsCgogICAgICAgICAgICAgICAgZmlsdGVyOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kcm9wYmFyOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbihlLCByZWYpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgJGVsID0gcmVmLiRlbDsKCgogICAgICAgICAgICAgICAgICAgIHZhciBhY3RpdmUgPSB0aGlzLmdldEFjdGl2ZSgpOwoKICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcyh0aGlzLmRyb3BiYXIsICc6aG92ZXInKSAmJiBhY3RpdmUgJiYgYWN0aXZlLiRlbCA9PT0gJGVsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBuYW1lOiAnaGlkZScsCgogICAgICAgICAgICAgICAgZmlsdGVyOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kcm9wYmFyOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbihfLCByZWYpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgJGVsID0gcmVmLiRlbDsKCgogICAgICAgICAgICAgICAgICAgIHZhciBhY3RpdmUgPSB0aGlzLmdldEFjdGl2ZSgpOwoKICAgICAgICAgICAgICAgICAgICBpZiAoIWFjdGl2ZSB8fCBhY3RpdmUgJiYgYWN0aXZlLiRlbCA9PT0gJGVsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvblRvKDApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICBdLAoKICAgICAgICBtZXRob2RzOiB7CgogICAgICAgICAgICBnZXRBY3RpdmU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIHJlZiA9IHRoaXMuZHJvcGRvd25zLm1hcCh0aGlzLmdldERyb3Bkb3duKS5maWx0ZXIoZnVuY3Rpb24gKGRyb3ApIHsgcmV0dXJuIGRyb3AgJiYgZHJvcC5pc0FjdGl2ZSgpOyB9KTsKICAgICAgICAgICAgICAgIHZhciBhY3RpdmUgPSByZWZbMF07CiAgICAgICAgICAgICAgICByZXR1cm4gYWN0aXZlICYmIGluY2x1ZGVzKGFjdGl2ZS5tb2RlLCAnaG92ZXInKSAmJiB3aXRoaW4oYWN0aXZlLnRvZ2dsZS4kZWwsIHRoaXMuJGVsKSAmJiBhY3RpdmU7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICB0cmFuc2l0aW9uVG86IGZ1bmN0aW9uKG5ld0hlaWdodCwgZWwpIHsKICAgICAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzOwoKCiAgICAgICAgICAgICAgICB2YXIgcmVmID0gdGhpczsKICAgICAgICAgICAgICAgIHZhciBkcm9wYmFyID0gcmVmLmRyb3BiYXI7CiAgICAgICAgICAgICAgICB2YXIgb2xkSGVpZ2h0ID0gaXNWaXNpYmxlKGRyb3BiYXIpID8gaGVpZ2h0KGRyb3BiYXIpIDogMDsKCiAgICAgICAgICAgICAgICBlbCA9IG9sZEhlaWdodCA8IG5ld0hlaWdodCAmJiBlbDsKCiAgICAgICAgICAgICAgICBjc3MoZWwsICdjbGlwJywgKCJyZWN0KDAsIiArIChlbC5vZmZzZXRXaWR0aCkgKyAicHgsIiArIG9sZEhlaWdodCArICJweCwwKSIpKTsKCiAgICAgICAgICAgICAgICBoZWlnaHQoZHJvcGJhciwgb2xkSGVpZ2h0KTsKCiAgICAgICAgICAgICAgICBUcmFuc2l0aW9uLmNhbmNlbChbZWwsIGRyb3BiYXJdKTsKICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbCiAgICAgICAgICAgICAgICAgICAgVHJhbnNpdGlvbi5zdGFydChkcm9wYmFyLCB7aGVpZ2h0OiBuZXdIZWlnaHR9LCB0aGlzLmR1cmF0aW9uKSwKICAgICAgICAgICAgICAgICAgICBUcmFuc2l0aW9uLnN0YXJ0KGVsLCB7Y2xpcDogKCJyZWN0KDAsIiArIChlbC5vZmZzZXRXaWR0aCkgKyAicHgsIiArIG5ld0hlaWdodCArICJweCwwKSIpfSwgdGhpcy5kdXJhdGlvbikKICAgICAgICAgICAgICAgIF0pCiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKG5vb3ApCiAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICBjc3MoZWwsIHtjbGlwOiAnJ30pOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzJDEuJHVwZGF0ZShkcm9wYmFyKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGdldERyb3Bkb3duOiBmdW5jdGlvbihlbCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGdldENvbXBvbmVudChlbCwgJ2Ryb3AnKSB8fCB0aGlzLiRnZXRDb21wb25lbnQoZWwsICdkcm9wZG93bicpOwogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICB9OwoKICAgIHZhciBPZmZjYW52YXMgPSB7CgogICAgICAgIG1peGluczogW01vZGFsXSwKCiAgICAgICAgYXJnczogJ21vZGUnLAoKICAgICAgICBwcm9wczogewogICAgICAgICAgICBtb2RlOiBTdHJpbmcsCiAgICAgICAgICAgIGZsaXA6IEJvb2xlYW4sCiAgICAgICAgICAgIG92ZXJsYXk6IEJvb2xlYW4KICAgICAgICB9LAoKICAgICAgICBkYXRhOiB7CiAgICAgICAgICAgIG1vZGU6ICdzbGlkZScsCiAgICAgICAgICAgIGZsaXA6IGZhbHNlLAogICAgICAgICAgICBvdmVybGF5OiBmYWxzZSwKICAgICAgICAgICAgY2xzUGFnZTogJ3VrLW9mZmNhbnZhcy1wYWdlJywKICAgICAgICAgICAgY2xzQ29udGFpbmVyOiAndWstb2ZmY2FudmFzLWNvbnRhaW5lcicsCiAgICAgICAgICAgIHNlbFBhbmVsOiAnLnVrLW9mZmNhbnZhcy1iYXInLAogICAgICAgICAgICBjbHNGbGlwOiAndWstb2ZmY2FudmFzLWZsaXAnLAogICAgICAgICAgICBjbHNDb250YWluZXJBbmltYXRpb246ICd1ay1vZmZjYW52YXMtY29udGFpbmVyLWFuaW1hdGlvbicsCiAgICAgICAgICAgIGNsc1NpZGViYXJBbmltYXRpb246ICd1ay1vZmZjYW52YXMtYmFyLWFuaW1hdGlvbicsCiAgICAgICAgICAgIGNsc01vZGU6ICd1ay1vZmZjYW52YXMnLAogICAgICAgICAgICBjbHNPdmVybGF5OiAndWstb2ZmY2FudmFzLW92ZXJsYXknLAogICAgICAgICAgICBzZWxDbG9zZTogJy51ay1vZmZjYW52YXMtY2xvc2UnLAogICAgICAgICAgICBjb250YWluZXI6IGZhbHNlCiAgICAgICAgfSwKCiAgICAgICAgY29tcHV0ZWQ6IHsKCiAgICAgICAgICAgIGNsc0ZsaXA6IGZ1bmN0aW9uKHJlZikgewogICAgICAgICAgICAgICAgdmFyIGZsaXAgPSByZWYuZmxpcDsKICAgICAgICAgICAgICAgIHZhciBjbHNGbGlwID0gcmVmLmNsc0ZsaXA7CgogICAgICAgICAgICAgICAgcmV0dXJuIGZsaXAgPyBjbHNGbGlwIDogJyc7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBjbHNPdmVybGF5OiBmdW5jdGlvbihyZWYpIHsKICAgICAgICAgICAgICAgIHZhciBvdmVybGF5ID0gcmVmLm92ZXJsYXk7CiAgICAgICAgICAgICAgICB2YXIgY2xzT3ZlcmxheSA9IHJlZi5jbHNPdmVybGF5OwoKICAgICAgICAgICAgICAgIHJldHVybiBvdmVybGF5ID8gY2xzT3ZlcmxheSA6ICcnOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgY2xzTW9kZTogZnVuY3Rpb24ocmVmKSB7CiAgICAgICAgICAgICAgICB2YXIgbW9kZSA9IHJlZi5tb2RlOwogICAgICAgICAgICAgICAgdmFyIGNsc01vZGUgPSByZWYuY2xzTW9kZTsKCiAgICAgICAgICAgICAgICByZXR1cm4gKGNsc01vZGUgKyAiLSIgKyBtb2RlKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGNsc1NpZGViYXJBbmltYXRpb246IGZ1bmN0aW9uKHJlZikgewogICAgICAgICAgICAgICAgdmFyIG1vZGUgPSByZWYubW9kZTsKICAgICAgICAgICAgICAgIHZhciBjbHNTaWRlYmFyQW5pbWF0aW9uID0gcmVmLmNsc1NpZGViYXJBbmltYXRpb247CgogICAgICAgICAgICAgICAgcmV0dXJuIG1vZGUgPT09ICdub25lJyB8fCBtb2RlID09PSAncmV2ZWFsJyA/ICcnIDogY2xzU2lkZWJhckFuaW1hdGlvbjsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGNsc0NvbnRhaW5lckFuaW1hdGlvbjogZnVuY3Rpb24ocmVmKSB7CiAgICAgICAgICAgICAgICB2YXIgbW9kZSA9IHJlZi5tb2RlOwogICAgICAgICAgICAgICAgdmFyIGNsc0NvbnRhaW5lckFuaW1hdGlvbiA9IHJlZi5jbHNDb250YWluZXJBbmltYXRpb247CgogICAgICAgICAgICAgICAgcmV0dXJuIG1vZGUgIT09ICdwdXNoJyAmJiBtb2RlICE9PSAncmV2ZWFsJyA/ICcnIDogY2xzQ29udGFpbmVyQW5pbWF0aW9uOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgdHJhbnNpdGlvbkVsZW1lbnQ6IGZ1bmN0aW9uKHJlZikgewogICAgICAgICAgICAgICAgdmFyIG1vZGUgPSByZWYubW9kZTsKCiAgICAgICAgICAgICAgICByZXR1cm4gbW9kZSA9PT0gJ3JldmVhbCcgPyB0aGlzLnBhbmVsLnBhcmVudE5vZGUgOiB0aGlzLnBhbmVsOwogICAgICAgICAgICB9CgogICAgICAgIH0sCgogICAgICAgIGV2ZW50czogWwoKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgIG5hbWU6ICdjbGljaycsCgogICAgICAgICAgICAgICAgZGVsZWdhdGU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAnYVtocmVmXj0iIyJdJzsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgaGFuZGxlcjogZnVuY3Rpb24ocmVmKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGhhc2ggPSByZWYuY3VycmVudC5oYXNoOwogICAgICAgICAgICAgICAgICAgIHZhciBkZWZhdWx0UHJldmVudGVkID0gcmVmLmRlZmF1bHRQcmV2ZW50ZWQ7CgogICAgICAgICAgICAgICAgICAgIGlmICghZGVmYXVsdFByZXZlbnRlZCAmJiBoYXNoICYmICQoaGFzaCwgZG9jdW1lbnQuYm9keSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG5hbWU6ICd0b3VjaHN0YXJ0JywKCiAgICAgICAgICAgICAgICBwYXNzaXZlOiB0cnVlLAoKICAgICAgICAgICAgICAgIGVsOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYW5lbDsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgaGFuZGxlcjogZnVuY3Rpb24ocmVmKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldFRvdWNoZXMgPSByZWYudGFyZ2V0VG91Y2hlczsKCgogICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRUb3VjaGVzLmxlbmd0aCA9PT0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsaWVudFkgPSB0YXJnZXRUb3VjaGVzWzBdLmNsaWVudFk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBuYW1lOiAndG91Y2htb3ZlJywKCiAgICAgICAgICAgICAgICBzZWxmOiB0cnVlLAogICAgICAgICAgICAgICAgcGFzc2l2ZTogZmFsc2UsCgogICAgICAgICAgICAgICAgZmlsdGVyOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vdmVybGF5OwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICAgICAgZS5jYW5jZWxhYmxlICYmIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBuYW1lOiAndG91Y2htb3ZlJywKCiAgICAgICAgICAgICAgICBwYXNzaXZlOiBmYWxzZSwKCiAgICAgICAgICAgICAgICBlbDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFuZWw7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uKGUpIHsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGUudGFyZ2V0VG91Y2hlcy5sZW5ndGggIT09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgdmFyIGNsaWVudFkgPSBldmVudC50YXJnZXRUb3VjaGVzWzBdLmNsaWVudFkgLSB0aGlzLmNsaWVudFk7CiAgICAgICAgICAgICAgICAgICAgdmFyIHJlZiA9IHRoaXMucGFuZWw7CiAgICAgICAgICAgICAgICAgICAgdmFyIHNjcm9sbFRvcCA9IHJlZi5zY3JvbGxUb3A7CiAgICAgICAgICAgICAgICAgICAgdmFyIHNjcm9sbEhlaWdodCA9IHJlZi5zY3JvbGxIZWlnaHQ7CiAgICAgICAgICAgICAgICAgICAgdmFyIGNsaWVudEhlaWdodCA9IHJlZi5jbGllbnRIZWlnaHQ7CgogICAgICAgICAgICAgICAgICAgIGlmIChjbGllbnRIZWlnaHQgPj0gc2Nyb2xsSGVpZ2h0CiAgICAgICAgICAgICAgICAgICAgICAgIHx8IHNjcm9sbFRvcCA9PT0gMCAmJiBjbGllbnRZID4gMAogICAgICAgICAgICAgICAgICAgICAgICB8fCBzY3JvbGxIZWlnaHQgLSBzY3JvbGxUb3AgPD0gY2xpZW50SGVpZ2h0ICYmIGNsaWVudFkgPCAwCiAgICAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGUuY2FuY2VsYWJsZSAmJiBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBuYW1lOiAnc2hvdycsCgogICAgICAgICAgICAgICAgc2VsZjogdHJ1ZSwKCiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbigpIHsKCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ3JldmVhbCcgJiYgIWhhc0NsYXNzKHRoaXMucGFuZWwucGFyZW50Tm9kZSwgdGhpcy5jbHNNb2RlKSkgewogICAgICAgICAgICAgICAgICAgICAgICB3cmFwQWxsKHRoaXMucGFuZWwsICc8ZGl2PicpOwogICAgICAgICAgICAgICAgICAgICAgICBhZGRDbGFzcyh0aGlzLnBhbmVsLnBhcmVudE5vZGUsIHRoaXMuY2xzTW9kZSk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBjc3MoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCAnb3ZlcmZsb3dZJywgdGhpcy5vdmVybGF5ID8gJ2hpZGRlbicgOiAnJyk7CiAgICAgICAgICAgICAgICAgICAgYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwgdGhpcy5jbHNDb250YWluZXIsIHRoaXMuY2xzRmxpcCk7CiAgICAgICAgICAgICAgICAgICAgY3NzKGRvY3VtZW50LmJvZHksICd0b3VjaC1hY3Rpb24nLCAncGFuLXkgcGluY2gtem9vbScpOwogICAgICAgICAgICAgICAgICAgIGNzcyh0aGlzLiRlbCwgJ2Rpc3BsYXknLCAnYmxvY2snKTsKICAgICAgICAgICAgICAgICAgICBhZGRDbGFzcyh0aGlzLiRlbCwgdGhpcy5jbHNPdmVybGF5KTsKICAgICAgICAgICAgICAgICAgICBhZGRDbGFzcyh0aGlzLnBhbmVsLCB0aGlzLmNsc1NpZGViYXJBbmltYXRpb24sIHRoaXMubW9kZSAhPT0gJ3JldmVhbCcgPyB0aGlzLmNsc01vZGUgOiAnJyk7CgogICAgICAgICAgICAgICAgICAgIGhlaWdodChkb2N1bWVudC5ib2R5KTsgLy8gZm9yY2UgcmVmbG93CiAgICAgICAgICAgICAgICAgICAgYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwgdGhpcy5jbHNDb250YWluZXJBbmltYXRpb24pOwoKICAgICAgICAgICAgICAgICAgICB0aGlzLmNsc0NvbnRhaW5lckFuaW1hdGlvbiAmJiBzdXBwcmVzc1VzZXJTY2FsZSgpOwoKCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBuYW1lOiAnaGlkZScsCgogICAgICAgICAgICAgICAgc2VsZjogdHJ1ZSwKCiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICByZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCB0aGlzLmNsc0NvbnRhaW5lckFuaW1hdGlvbik7CiAgICAgICAgICAgICAgICAgICAgY3NzKGRvY3VtZW50LmJvZHksICd0b3VjaC1hY3Rpb24nLCAnJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBuYW1lOiAnaGlkZGVuJywKCiAgICAgICAgICAgICAgICBzZWxmOiB0cnVlLAoKICAgICAgICAgICAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uKCkgewoKICAgICAgICAgICAgICAgICAgICB0aGlzLmNsc0NvbnRhaW5lckFuaW1hdGlvbiAmJiByZXN1bWVVc2VyU2NhbGUoKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ3JldmVhbCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdW53cmFwKHRoaXMucGFuZWwpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3ModGhpcy5wYW5lbCwgdGhpcy5jbHNTaWRlYmFyQW5pbWF0aW9uLCB0aGlzLmNsc01vZGUpOwogICAgICAgICAgICAgICAgICAgIHJlbW92ZUNsYXNzKHRoaXMuJGVsLCB0aGlzLmNsc092ZXJsYXkpOwogICAgICAgICAgICAgICAgICAgIGNzcyh0aGlzLiRlbCwgJ2Rpc3BsYXknLCAnJyk7CiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3MoZG9jdW1lbnQuYm9keSwgdGhpcy5jbHNDb250YWluZXIsIHRoaXMuY2xzRmxpcCk7CgogICAgICAgICAgICAgICAgICAgIGNzcyhkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsICdvdmVyZmxvd1knLCAnJyk7CgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbmFtZTogJ3N3aXBlTGVmdCBzd2lwZVJpZ2h0JywKCiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbihlKSB7CgogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzVG9nZ2xlZCgpICYmIGVuZHNXaXRoKGUudHlwZSwgJ0xlZnQnKSBeIHRoaXMuZmxpcCkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGUoKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgIF0KCiAgICB9OwoKICAgIC8vIENocm9tZSBpbiByZXNwb25zaXZlIG1vZGUgem9vbXMgcGFnZSB1cG9uIG9wZW5pbmcgb2ZmY2FudmFzCiAgICBmdW5jdGlvbiBzdXBwcmVzc1VzZXJTY2FsZSgpIHsKICAgICAgICBnZXRWaWV3cG9ydCgpLmNvbnRlbnQgKz0gJyx1c2VyLXNjYWxhYmxlPTAnOwogICAgfQoKICAgIGZ1bmN0aW9uIHJlc3VtZVVzZXJTY2FsZSgpIHsKICAgICAgICB2YXIgdmlld3BvcnQgPSBnZXRWaWV3cG9ydCgpOwogICAgICAgIHZpZXdwb3J0LmNvbnRlbnQgPSB2aWV3cG9ydC5jb250ZW50LnJlcGxhY2UoLyx1c2VyLXNjYWxhYmxlPTAkLywgJycpOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldFZpZXdwb3J0KCkgewogICAgICAgIHJldHVybiAkKCdtZXRhW25hbWU9InZpZXdwb3J0Il0nLCBkb2N1bWVudC5oZWFkKSB8fCBhcHBlbmQoZG9jdW1lbnQuaGVhZCwgJzxtZXRhIG5hbWU9InZpZXdwb3J0Ij4nKTsKICAgIH0KCiAgICB2YXIgT3ZlcmZsb3dBdXRvID0gewoKICAgICAgICBtaXhpbnM6IFtDbGFzc10sCgogICAgICAgIHByb3BzOiB7CiAgICAgICAgICAgIHNlbENvbnRhaW5lcjogU3RyaW5nLAogICAgICAgICAgICBzZWxDb250ZW50OiBTdHJpbmcKICAgICAgICB9LAoKICAgICAgICBkYXRhOiB7CiAgICAgICAgICAgIHNlbENvbnRhaW5lcjogJy51ay1tb2RhbCcsCiAgICAgICAgICAgIHNlbENvbnRlbnQ6ICcudWstbW9kYWwtZGlhbG9nJwogICAgICAgIH0sCgogICAgICAgIGNvbXB1dGVkOiB7CgogICAgICAgICAgICBjb250YWluZXI6IGZ1bmN0aW9uKHJlZiwgJGVsKSB7CiAgICAgICAgICAgICAgICB2YXIgc2VsQ29udGFpbmVyID0gcmVmLnNlbENvbnRhaW5lcjsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xvc2VzdCgkZWwsIHNlbENvbnRhaW5lcik7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBjb250ZW50OiBmdW5jdGlvbihyZWYsICRlbCkgewogICAgICAgICAgICAgICAgdmFyIHNlbENvbnRlbnQgPSByZWYuc2VsQ29udGVudDsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xvc2VzdCgkZWwsIHNlbENvbnRlbnQpOwogICAgICAgICAgICB9CgogICAgICAgIH0sCgogICAgICAgIGNvbm5lY3RlZDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGNzcyh0aGlzLiRlbCwgJ21pbkhlaWdodCcsIDE1MCk7CiAgICAgICAgfSwKCiAgICAgICAgdXBkYXRlOiB7CgogICAgICAgICAgICByZWFkOiBmdW5jdGlvbigpIHsKCiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY29udGVudCB8fCAhdGhpcy5jb250YWluZXIpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICBjdXJyZW50OiB0b0Zsb2F0KGNzcyh0aGlzLiRlbCwgJ21heEhlaWdodCcpKSwKICAgICAgICAgICAgICAgICAgICBtYXg6IE1hdGgubWF4KDE1MCwgaGVpZ2h0KHRoaXMuY29udGFpbmVyKSAtIChvZmZzZXQodGhpcy5jb250ZW50KS5oZWlnaHQgLSBoZWlnaHQodGhpcy4kZWwpKSkKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICB3cml0ZTogZnVuY3Rpb24ocmVmKSB7CiAgICAgICAgICAgICAgICB2YXIgY3VycmVudCA9IHJlZi5jdXJyZW50OwogICAgICAgICAgICAgICAgdmFyIG1heCA9IHJlZi5tYXg7CgogICAgICAgICAgICAgICAgY3NzKHRoaXMuJGVsLCAnbWF4SGVpZ2h0JywgbWF4KTsKICAgICAgICAgICAgICAgIGlmIChNYXRoLnJvdW5kKGN1cnJlbnQpICE9PSBNYXRoLnJvdW5kKG1heCkpIHsKICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKHRoaXMuJGVsLCAncmVzaXplJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBldmVudHM6IFsncmVzaXplJ10KCiAgICAgICAgfQoKICAgIH07CgogICAgdmFyIFJlc3BvbnNpdmUgPSB7CgogICAgICAgIHByb3BzOiBbJ3dpZHRoJywgJ2hlaWdodCddLAoKICAgICAgICBjb25uZWN0ZWQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICBhZGRDbGFzcyh0aGlzLiRlbCwgJ3VrLXJlc3BvbnNpdmUtd2lkdGgnKTsKICAgICAgICB9LAoKICAgICAgICB1cGRhdGU6IHsKCiAgICAgICAgICAgIHJlYWQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGlzVmlzaWJsZSh0aGlzLiRlbCkgJiYgdGhpcy53aWR0aCAmJiB0aGlzLmhlaWdodAogICAgICAgICAgICAgICAgICAgID8ge3dpZHRoOiB3aWR0aCh0aGlzLiRlbC5wYXJlbnROb2RlKSwgaGVpZ2h0OiB0aGlzLmhlaWdodH0KICAgICAgICAgICAgICAgICAgICA6IGZhbHNlOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgd3JpdGU6IGZ1bmN0aW9uKGRpbSkgewogICAgICAgICAgICAgICAgaGVpZ2h0KHRoaXMuJGVsLCBEaW1lbnNpb25zLmNvbnRhaW4oewogICAgICAgICAgICAgICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHRoaXMud2lkdGgKICAgICAgICAgICAgICAgIH0sIGRpbSkuaGVpZ2h0KTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGV2ZW50czogWydyZXNpemUnXQoKICAgICAgICB9CgogICAgfTsKCiAgICB2YXIgU2Nyb2xsID0gewoKICAgICAgICBwcm9wczogewogICAgICAgICAgICBkdXJhdGlvbjogTnVtYmVyLAogICAgICAgICAgICBvZmZzZXQ6IE51bWJlcgogICAgICAgIH0sCgogICAgICAgIGRhdGE6IHsKICAgICAgICAgICAgZHVyYXRpb246IDEwMDAsCiAgICAgICAgICAgIG9mZnNldDogMAogICAgICAgIH0sCgogICAgICAgIG1ldGhvZHM6IHsKCiAgICAgICAgICAgIHNjcm9sbFRvOiBmdW5jdGlvbihlbCkgewogICAgICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7CgoKICAgICAgICAgICAgICAgIGVsID0gZWwgJiYgJChlbCkgfHwgZG9jdW1lbnQuYm9keTsKCiAgICAgICAgICAgICAgICB2YXIgZG9jSGVpZ2h0ID0gaGVpZ2h0KGRvY3VtZW50KTsKICAgICAgICAgICAgICAgIHZhciB3aW5IZWlnaHQgPSBoZWlnaHQod2luZG93KTsKCiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gb2Zmc2V0KGVsKS50b3AgLSB0aGlzLm9mZnNldDsKICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgKyB3aW5IZWlnaHQgPiBkb2NIZWlnaHQpIHsKICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBkb2NIZWlnaHQgLSB3aW5IZWlnaHQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCF0cmlnZ2VyKHRoaXMuJGVsLCAnYmVmb3Jlc2Nyb2xsJywgW3RoaXMsIGVsXSkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gRGF0ZS5ub3coKTsKICAgICAgICAgICAgICAgIHZhciBzdGFydFkgPSB3aW5kb3cucGFnZVlPZmZzZXQ7CiAgICAgICAgICAgICAgICB2YXIgc3RlcCA9IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRZID0gc3RhcnRZICsgKHRhcmdldCAtIHN0YXJ0WSkgKiBlYXNlKGNsYW1wKChEYXRlLm5vdygpIC0gc3RhcnQpIC8gdGhpcyQxLmR1cmF0aW9uKSk7CgogICAgICAgICAgICAgICAgICAgIHNjcm9sbFRvcCh3aW5kb3csIGN1cnJlbnRZKTsKCiAgICAgICAgICAgICAgICAgICAgLy8gc2Nyb2xsIG1vcmUgaWYgd2UgaGF2ZSBub3QgcmVhY2hlZCBvdXIgZGVzdGluYXRpb24KICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFkgIT09IHRhcmdldCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcih0aGlzJDEuJGVsLCAnc2Nyb2xsZWQnLCBbdGhpcyQxLCBlbF0pOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIHN0ZXAoKTsKCiAgICAgICAgICAgIH0KCiAgICAgICAgfSwKCiAgICAgICAgZXZlbnRzOiB7CgogICAgICAgICAgICBjbGljazogZnVuY3Rpb24oZSkgewoKICAgICAgICAgICAgICAgIGlmIChlLmRlZmF1bHRQcmV2ZW50ZWQpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUbyhlc2NhcGUoZGVjb2RlVVJJQ29tcG9uZW50KHRoaXMuJGVsLmhhc2gpKS5zdWJzdHIoMSkpOwogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICB9OwoKICAgIGZ1bmN0aW9uIGVhc2UoaykgewogICAgICAgIHJldHVybiAwLjUgKiAoMSAtIE1hdGguY29zKE1hdGguUEkgKiBrKSk7CiAgICB9CgogICAgdmFyIFNjcm9sbHNweSA9IHsKCiAgICAgICAgYXJnczogJ2NscycsCgogICAgICAgIHByb3BzOiB7CiAgICAgICAgICAgIGNsczogU3RyaW5nLAogICAgICAgICAgICB0YXJnZXQ6IFN0cmluZywKICAgICAgICAgICAgaGlkZGVuOiBCb29sZWFuLAogICAgICAgICAgICBvZmZzZXRUb3A6IE51bWJlciwKICAgICAgICAgICAgb2Zmc2V0TGVmdDogTnVtYmVyLAogICAgICAgICAgICByZXBlYXQ6IEJvb2xlYW4sCiAgICAgICAgICAgIGRlbGF5OiBOdW1iZXIKICAgICAgICB9LAoKICAgICAgICBkYXRhOiBmdW5jdGlvbiAoKSB7IHJldHVybiAoewogICAgICAgICAgICBjbHM6IGZhbHNlLAogICAgICAgICAgICB0YXJnZXQ6IGZhbHNlLAogICAgICAgICAgICBoaWRkZW46IHRydWUsCiAgICAgICAgICAgIG9mZnNldFRvcDogMCwKICAgICAgICAgICAgb2Zmc2V0TGVmdDogMCwKICAgICAgICAgICAgcmVwZWF0OiBmYWxzZSwKICAgICAgICAgICAgZGVsYXk6IDAsCiAgICAgICAgICAgIGluVmlld0NsYXNzOiAndWstc2Nyb2xsc3B5LWludmlldycKICAgICAgICB9KTsgfSwKCiAgICAgICAgY29tcHV0ZWQ6IHsKCiAgICAgICAgICAgIGVsZW1lbnRzOiBmdW5jdGlvbihyZWYsICRlbCkgewogICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IHJlZi50YXJnZXQ7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldCA/ICQkKHRhcmdldCwgJGVsKSA6IFskZWxdOwogICAgICAgICAgICB9CgogICAgICAgIH0sCgogICAgICAgIHVwZGF0ZTogWwoKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgIHdyaXRlOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5oaWRkZW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgY3NzKGZpbHRlcih0aGlzLmVsZW1lbnRzLCAoIjpub3QoLiIgKyAodGhpcy5pblZpZXdDbGFzcykgKyAiKSIpKSwgJ3Zpc2liaWxpdHknLCAnaGlkZGVuJyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICByZWFkOiBmdW5jdGlvbihyZWYpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpczsKICAgICAgICAgICAgICAgICAgICB2YXIgdXBkYXRlID0gcmVmLnVwZGF0ZTsKCgogICAgICAgICAgICAgICAgICAgIGlmICghdXBkYXRlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IGVsLl91a1Njcm9sbHNweVN0YXRlOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSB7Y2xzOiBkYXRhKGVsLCAndWstc2Nyb2xsc3B5LWNsYXNzJykgfHwgdGhpcyQxLmNsc307CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNob3cgPSBpc0luVmlldyhlbCwgdGhpcyQxLm9mZnNldFRvcCwgdGhpcyQxLm9mZnNldExlZnQpOwogICAgICAgICAgICAgICAgICAgICAgICBlbC5fdWtTY3JvbGxzcHlTdGF0ZSA9IHN0YXRlOwoKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIHdyaXRlOiBmdW5jdGlvbihkYXRhKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7CgoKICAgICAgICAgICAgICAgICAgICAvLyBMZXQgY2hpbGQgY29tcG9uZW50cyBiZSBhcHBsaWVkIGF0IGxlYXN0IG9uY2UgZmlyc3QKICAgICAgICAgICAgICAgICAgICBpZiAoIWRhdGEudXBkYXRlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEudXBkYXRlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IGVsLl91a1Njcm9sbHNweVN0YXRlOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2xzID0gc3RhdGUuY2xzOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLnNob3cgJiYgIXN0YXRlLmludmlldyAmJiAhc3RhdGUucXVldWVkKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNob3cgPSBmdW5jdGlvbiAoKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcyhlbCwgJ3Zpc2liaWxpdHknLCAnJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkQ2xhc3MoZWwsIHRoaXMkMS5pblZpZXdDbGFzcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9nZ2xlQ2xhc3MoZWwsIGNscyk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIoZWwsICdpbnZpZXcnKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyQxLiR1cGRhdGUoZWwpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5pbnZpZXcgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmFib3J0ICYmIHN0YXRlLmFib3J0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzJDEuZGVsYXkpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUucXVldWVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnByb21pc2UgPSAoZGF0YS5wcm9taXNlIHx8IFByb21pc2UucmVzb2x2ZSgpKS50aGVuKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFzdGF0ZS5pbnZpZXcgJiYgbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBkYXRhLnByb21pc2UgfHwgdGhpcyQxLmVsZW1lbnRzLmxlbmd0aCA9PT0gMSA/IHRoaXMkMS5kZWxheSA6IDApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmFib3J0ID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnF1ZXVlZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3coKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0YXRlLnNob3cgJiYgKHN0YXRlLmludmlldyB8fCBzdGF0ZS5xdWV1ZWQpICYmIHRoaXMkMS5yZXBlYXQpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hYm9ydCAmJiBzdGF0ZS5hYm9ydCgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RhdGUuaW52aWV3KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcyhlbCwgJ3Zpc2liaWxpdHknLCB0aGlzJDEuaGlkZGVuID8gJ2hpZGRlbicgOiAnJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVDbGFzcyhlbCwgdGhpcyQxLmluVmlld0NsYXNzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZUNsYXNzKGVsLCBjbHMpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIoZWwsICdvdXR2aWV3Jyk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyQxLiR1cGRhdGUoZWwpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmludmlldyA9IGZhbHNlOwoKICAgICAgICAgICAgICAgICAgICAgICAgfQoKCiAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBldmVudHM6IFsnc2Nyb2xsJywgJ3Jlc2l6ZSddCgogICAgICAgICAgICB9CgogICAgICAgIF0KCiAgICB9OwoKICAgIHZhciBTY3JvbGxzcHlOYXYgPSB7CgogICAgICAgIHByb3BzOiB7CiAgICAgICAgICAgIGNsczogU3RyaW5nLAogICAgICAgICAgICBjbG9zZXN0OiBTdHJpbmcsCiAgICAgICAgICAgIHNjcm9sbDogQm9vbGVhbiwKICAgICAgICAgICAgb3ZlcmZsb3c6IEJvb2xlYW4sCiAgICAgICAgICAgIG9mZnNldDogTnVtYmVyCiAgICAgICAgfSwKCiAgICAgICAgZGF0YTogewogICAgICAgICAgICBjbHM6ICd1ay1hY3RpdmUnLAogICAgICAgICAgICBjbG9zZXN0OiBmYWxzZSwKICAgICAgICAgICAgc2Nyb2xsOiBmYWxzZSwKICAgICAgICAgICAgb3ZlcmZsb3c6IHRydWUsCiAgICAgICAgICAgIG9mZnNldDogMAogICAgICAgIH0sCgogICAgICAgIGNvbXB1dGVkOiB7CgogICAgICAgICAgICBsaW5rczogZnVuY3Rpb24oXywgJGVsKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJCQoJ2FbaHJlZl49IiMiXScsICRlbCkuZmlsdGVyKGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gZWwuaGFzaDsgfSk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBlbGVtZW50czogZnVuY3Rpb24ocmVmKSB7CiAgICAgICAgICAgICAgICB2YXIgc2VsZWN0b3IgPSByZWYuY2xvc2VzdDsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xvc2VzdCh0aGlzLmxpbmtzLCBzZWxlY3RvciB8fCAnKicpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgdGFyZ2V0czogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJCQodGhpcy5saW5rcy5tYXAoZnVuY3Rpb24gKGVsKSB7IHJldHVybiBlc2NhcGUoZWwuaGFzaCkuc3Vic3RyKDEpOyB9KS5qb2luKCcsJykpOwogICAgICAgICAgICB9CgogICAgICAgIH0sCgogICAgICAgIHVwZGF0ZTogWwoKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgIHJlYWQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNjcm9sbCkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRjcmVhdGUoJ3Njcm9sbCcsIHRoaXMubGlua3MsIHtvZmZzZXQ6IHRoaXMub2Zmc2V0IHx8IDB9KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9LAoKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgIHJlYWQ6IGZ1bmN0aW9uKGRhdGEpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpczsKCgogICAgICAgICAgICAgICAgICAgIHZhciBzY3JvbGwgPSB3aW5kb3cucGFnZVlPZmZzZXQgKyB0aGlzLm9mZnNldCArIDE7CiAgICAgICAgICAgICAgICAgICAgdmFyIG1heCA9IGhlaWdodChkb2N1bWVudCkgLSBoZWlnaHQod2luZG93KSArIHRoaXMub2Zmc2V0OwoKICAgICAgICAgICAgICAgICAgICBkYXRhLmFjdGl2ZSA9IGZhbHNlOwoKICAgICAgICAgICAgICAgICAgICB0aGlzLnRhcmdldHMuZXZlcnkoZnVuY3Rpb24gKGVsLCBpKSB7CgogICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVmID0gb2Zmc2V0KGVsKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRvcCA9IHJlZi50b3A7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYXN0ID0gaSArIDEgPT09IHRoaXMkMS50YXJnZXRzLmxlbmd0aDsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcyQxLm92ZXJmbG93ICYmIChpID09PSAwICYmIHRvcCA+IHNjcm9sbCB8fCBsYXN0ICYmIHRvcCArIGVsLm9mZnNldFRvcCA8IHNjcm9sbCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsYXN0ICYmIG9mZnNldCh0aGlzJDEudGFyZ2V0c1tpICsgMV0pLnRvcCA8PSBzY3JvbGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsID49IG1heCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IHRoaXMkMS50YXJnZXRzLmxlbmd0aCAtIDE7IGogPiBpOyBqLS0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNJblZpZXcodGhpcyQxLnRhcmdldHNbal0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsID0gdGhpcyQxLnRhcmdldHNbal07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEoZGF0YS5hY3RpdmUgPSAkKGZpbHRlcih0aGlzJDEubGlua3MsICgiW2hyZWY9XCIjIiArIChlbC5pZCkgKyAiXCJdIikpKSk7CgogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgd3JpdGU6IGZ1bmN0aW9uKHJlZikgewogICAgICAgICAgICAgICAgICAgIHZhciBhY3RpdmUgPSByZWYuYWN0aXZlOwoKCiAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5rcy5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gZWwuYmx1cigpOyB9KTsKICAgICAgICAgICAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLmVsZW1lbnRzLCB0aGlzLmNscyk7CgogICAgICAgICAgICAgICAgICAgIGlmIChhY3RpdmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcih0aGlzLiRlbCwgJ2FjdGl2ZScsIFthY3RpdmUsIGFkZENsYXNzKHRoaXMuY2xvc2VzdCA/IGNsb3Nlc3QoYWN0aXZlLCB0aGlzLmNsb3Nlc3QpIDogYWN0aXZlLCB0aGlzLmNscyldKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBldmVudHM6IFsnc2Nyb2xsJywgJ3Jlc2l6ZSddCgogICAgICAgICAgICB9CgogICAgICAgIF0KCiAgICB9OwoKICAgIHZhciBTdGlja3kgPSB7CgogICAgICAgIG1peGluczogW0NsYXNzLCBNZWRpYV0sCgogICAgICAgIHByb3BzOiB7CiAgICAgICAgICAgIHRvcDogbnVsbCwKICAgICAgICAgICAgYm90dG9tOiBCb29sZWFuLAogICAgICAgICAgICBvZmZzZXQ6IFN0cmluZywKICAgICAgICAgICAgYW5pbWF0aW9uOiBTdHJpbmcsCiAgICAgICAgICAgIGNsc0FjdGl2ZTogU3RyaW5nLAogICAgICAgICAgICBjbHNJbmFjdGl2ZTogU3RyaW5nLAogICAgICAgICAgICBjbHNGaXhlZDogU3RyaW5nLAogICAgICAgICAgICBjbHNCZWxvdzogU3RyaW5nLAogICAgICAgICAgICBzZWxUYXJnZXQ6IFN0cmluZywKICAgICAgICAgICAgd2lkdGhFbGVtZW50OiBCb29sZWFuLAogICAgICAgICAgICBzaG93T25VcDogQm9vbGVhbiwKICAgICAgICAgICAgdGFyZ2V0T2Zmc2V0OiBOdW1iZXIKICAgICAgICB9LAoKICAgICAgICBkYXRhOiB7CiAgICAgICAgICAgIHRvcDogMCwKICAgICAgICAgICAgYm90dG9tOiBmYWxzZSwKICAgICAgICAgICAgb2Zmc2V0OiAwLAogICAgICAgICAgICBhbmltYXRpb246ICcnLAogICAgICAgICAgICBjbHNBY3RpdmU6ICd1ay1hY3RpdmUnLAogICAgICAgICAgICBjbHNJbmFjdGl2ZTogJycsCiAgICAgICAgICAgIGNsc0ZpeGVkOiAndWstc3RpY2t5LWZpeGVkJywKICAgICAgICAgICAgY2xzQmVsb3c6ICd1ay1zdGlja3ktYmVsb3cnLAogICAgICAgICAgICBzZWxUYXJnZXQ6ICcnLAogICAgICAgICAgICB3aWR0aEVsZW1lbnQ6IGZhbHNlLAogICAgICAgICAgICBzaG93T25VcDogZmFsc2UsCiAgICAgICAgICAgIHRhcmdldE9mZnNldDogZmFsc2UKICAgICAgICB9LAoKICAgICAgICBjb21wdXRlZDogewoKICAgICAgICAgICAgb2Zmc2V0OiBmdW5jdGlvbihyZWYpIHsKICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSByZWYub2Zmc2V0OwoKICAgICAgICAgICAgICAgIHJldHVybiB0b1B4KG9mZnNldCk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBzZWxUYXJnZXQ6IGZ1bmN0aW9uKHJlZiwgJGVsKSB7CiAgICAgICAgICAgICAgICB2YXIgc2VsVGFyZ2V0ID0gcmVmLnNlbFRhcmdldDsKCiAgICAgICAgICAgICAgICByZXR1cm4gc2VsVGFyZ2V0ICYmICQoc2VsVGFyZ2V0LCAkZWwpIHx8ICRlbDsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHdpZHRoRWxlbWVudDogZnVuY3Rpb24ocmVmLCAkZWwpIHsKICAgICAgICAgICAgICAgIHZhciB3aWR0aEVsZW1lbnQgPSByZWYud2lkdGhFbGVtZW50OwoKICAgICAgICAgICAgICAgIHJldHVybiBxdWVyeSh3aWR0aEVsZW1lbnQsICRlbCkgfHwgdGhpcy5wbGFjZWhvbGRlcjsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGlzQWN0aXZlOiB7CgogICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFzQ2xhc3ModGhpcy5zZWxUYXJnZXQsIHRoaXMuY2xzQWN0aXZlKTsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiAhdGhpcy5pc0FjdGl2ZSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlQ2xhc3ModGhpcy5zZWxUYXJnZXQsIHRoaXMuY2xzSW5hY3RpdmUsIHRoaXMuY2xzQWN0aXZlKTsKICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcih0aGlzLiRlbCwgJ2FjdGl2ZScpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXZhbHVlICYmICFoYXNDbGFzcyh0aGlzLnNlbFRhcmdldCwgdGhpcy5jbHNJbmFjdGl2ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZUNsYXNzKHRoaXMuc2VsVGFyZ2V0LCB0aGlzLmNsc0FjdGl2ZSwgdGhpcy5jbHNJbmFjdGl2ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIodGhpcy4kZWwsICdpbmFjdGl2ZScpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0KCiAgICAgICAgfSwKCiAgICAgICAgY29ubmVjdGVkOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdGhpcy5wbGFjZWhvbGRlciA9ICQoJysgLnVrLXN0aWNreS1wbGFjZWhvbGRlcicsIHRoaXMuJGVsKSB8fCAkKCc8ZGl2IGNsYXNzPSJ1ay1zdGlja3ktcGxhY2Vob2xkZXIiPjwvZGl2PicpOwogICAgICAgICAgICB0aGlzLmlzRml4ZWQgPSBmYWxzZTsKICAgICAgICAgICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlOwogICAgICAgIH0sCgogICAgICAgIGRpc2Nvbm5lY3RlZDogZnVuY3Rpb24oKSB7CgogICAgICAgICAgICBpZiAodGhpcy5pc0ZpeGVkKSB7CiAgICAgICAgICAgICAgICB0aGlzLmhpZGUoKTsKICAgICAgICAgICAgICAgIHJlbW92ZUNsYXNzKHRoaXMuc2VsVGFyZ2V0LCB0aGlzLmNsc0luYWN0aXZlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmVtb3ZlKHRoaXMucGxhY2Vob2xkZXIpOwogICAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVyID0gbnVsbDsKICAgICAgICAgICAgdGhpcy53aWR0aEVsZW1lbnQgPSBudWxsOwogICAgICAgIH0sCgogICAgICAgIGV2ZW50czogWwoKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgIG5hbWU6ICdsb2FkIGhhc2hjaGFuZ2UgcG9wc3RhdGUnLAoKICAgICAgICAgICAgICAgIGVsOiB3aW5kb3csCgogICAgICAgICAgICAgICAgaGFuZGxlcjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7CgoKICAgICAgICAgICAgICAgICAgICBpZiAoISh0aGlzLnRhcmdldE9mZnNldCAhPT0gZmFsc2UgJiYgbG9jYXRpb24uaGFzaCAmJiB3aW5kb3cucGFnZVlPZmZzZXQgPiAwKSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gJChsb2NhdGlvbi5oYXNoKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldCkgewogICAgICAgICAgICAgICAgICAgICAgICBmYXN0ZG9tLnJlYWQoZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWYgPSBvZmZzZXQodGFyZ2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b3AgPSByZWYudG9wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsVG9wID0gb2Zmc2V0KHRoaXMkMS4kZWwpLnRvcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbEhlaWdodCA9IHRoaXMkMS4kZWwub2Zmc2V0SGVpZ2h0OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzJDEuaXNGaXhlZCAmJiBlbFRvcCArIGVsSGVpZ2h0ID49IHRvcCAmJiBlbFRvcCA8PSB0b3AgKyB0YXJnZXQub2Zmc2V0SGVpZ2h0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVG9wKHdpbmRvdywgdG9wIC0gZWxIZWlnaHQgLSAoaXNOdW1lcmljKHRoaXMkMS50YXJnZXRPZmZzZXQpID8gdGhpcyQxLnRhcmdldE9mZnNldCA6IDApIC0gdGhpcyQxLm9mZnNldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfQoKICAgICAgICBdLAoKICAgICAgICB1cGRhdGU6IFsKCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICByZWFkOiBmdW5jdGlvbihyZWYsIHR5cGUpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gcmVmLmhlaWdodDsKCgogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzQWN0aXZlICYmIHR5cGUgIT09ICd1cGRhdGUnKSB7CgogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gdGhpcy4kZWwub2Zmc2V0SGVpZ2h0OwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3coKTsKCiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPSAhdGhpcy5pc0FjdGl2ZSA/IHRoaXMuJGVsLm9mZnNldEhlaWdodCA6IGhlaWdodDsKCiAgICAgICAgICAgICAgICAgICAgdGhpcy50b3BPZmZzZXQgPSBvZmZzZXQodGhpcy5pc0ZpeGVkID8gdGhpcy5wbGFjZWhvbGRlciA6IHRoaXMuJGVsKS50b3A7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5ib3R0b21PZmZzZXQgPSB0aGlzLnRvcE9mZnNldCArIGhlaWdodDsKCiAgICAgICAgICAgICAgICAgICAgdmFyIGJvdHRvbSA9IHBhcnNlUHJvcCgnYm90dG9tJywgdGhpcyk7CgogICAgICAgICAgICAgICAgICAgIHRoaXMudG9wID0gTWF0aC5tYXgodG9GbG9hdChwYXJzZVByb3AoJ3RvcCcsIHRoaXMpKSwgdGhpcy50b3BPZmZzZXQpIC0gdGhpcy5vZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5ib3R0b20gPSBib3R0b20gJiYgYm90dG9tIC0gaGVpZ2h0OwogICAgICAgICAgICAgICAgICAgIHRoaXMuaW5hY3RpdmUgPSAhdGhpcy5tYXRjaE1lZGlhOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgICAgICBsYXN0U2Nyb2xsOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbnM6IGNzcyh0aGlzLiRlbCwgWydtYXJnaW5Ub3AnLCAnbWFyZ2luQm90dG9tJywgJ21hcmdpbkxlZnQnLCAnbWFyZ2luUmlnaHQnXSkKICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICB3cml0ZTogZnVuY3Rpb24ocmVmKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGhlaWdodCA9IHJlZi5oZWlnaHQ7CiAgICAgICAgICAgICAgICAgICAgdmFyIG1hcmdpbnMgPSByZWYubWFyZ2luczsKCgogICAgICAgICAgICAgICAgICAgIHZhciByZWYkMSA9IHRoaXM7CiAgICAgICAgICAgICAgICAgICAgdmFyIHBsYWNlaG9sZGVyID0gcmVmJDEucGxhY2Vob2xkZXI7CgogICAgICAgICAgICAgICAgICAgIGNzcyhwbGFjZWhvbGRlciwgYXNzaWduKHtoZWlnaHQ6IGhlaWdodH0sIG1hcmdpbnMpKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCF3aXRoaW4ocGxhY2Vob2xkZXIsIGRvY3VtZW50KSkgewogICAgICAgICAgICAgICAgICAgICAgICBhZnRlcih0aGlzLiRlbCwgcGxhY2Vob2xkZXIpOwogICAgICAgICAgICAgICAgICAgICAgICBhdHRyKHBsYWNlaG9sZGVyLCAnaGlkZGVuJywgJycpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgLy8gZW5zdXJlIGFjdGl2ZS9pbmFjdGl2ZSBjbGFzc2VzIGFyZSBhcHBsaWVkCiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0FjdGl2ZSA9IHRoaXMuaXNBY3RpdmU7CgogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBldmVudHM6IFsncmVzaXplJ10KCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgcmVhZDogZnVuY3Rpb24ocmVmKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHNjcm9sbCA9IHJlZi5zY3JvbGw7IGlmICggc2Nyb2xsID09PSB2b2lkIDAgKSBzY3JvbGwgPSAwOwoKCiAgICAgICAgICAgICAgICAgICAgdGhpcy53aWR0aCA9IChpc1Zpc2libGUodGhpcy53aWR0aEVsZW1lbnQpID8gdGhpcy53aWR0aEVsZW1lbnQgOiB0aGlzLiRlbCkub2Zmc2V0V2lkdGg7CgogICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsID0gd2luZG93LnBhZ2VZT2Zmc2V0OwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgICAgICBkaXI6IHNjcm9sbCA8PSB0aGlzLnNjcm9sbCA/ICdkb3duJyA6ICd1cCcsCiAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbDogdGhpcy5zY3JvbGwsCiAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6IGlzVmlzaWJsZSh0aGlzLiRlbCksCiAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogb2Zmc2V0UG9zaXRpb24odGhpcy5wbGFjZWhvbGRlcilbMF0KICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICB3cml0ZTogZnVuY3Rpb24oZGF0YSwgdHlwZSkgewogICAgICAgICAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzOwoKCiAgICAgICAgICAgICAgICAgICAgdmFyIGluaXRUaW1lc3RhbXAgPSBkYXRhLmluaXRUaW1lc3RhbXA7IGlmICggaW5pdFRpbWVzdGFtcCA9PT0gdm9pZCAwICkgaW5pdFRpbWVzdGFtcCA9IDA7CiAgICAgICAgICAgICAgICAgICAgdmFyIGRpciA9IGRhdGEuZGlyOwogICAgICAgICAgICAgICAgICAgIHZhciBsYXN0RGlyID0gZGF0YS5sYXN0RGlyOwogICAgICAgICAgICAgICAgICAgIHZhciBsYXN0U2Nyb2xsID0gZGF0YS5sYXN0U2Nyb2xsOwogICAgICAgICAgICAgICAgICAgIHZhciBzY3JvbGwgPSBkYXRhLnNjcm9sbDsKICAgICAgICAgICAgICAgICAgICB2YXIgdG9wID0gZGF0YS50b3A7CiAgICAgICAgICAgICAgICAgICAgdmFyIHZpc2libGUgPSBkYXRhLnZpc2libGU7CiAgICAgICAgICAgICAgICAgICAgdmFyIG5vdyA9IHBlcmZvcm1hbmNlLm5vdygpOwoKICAgICAgICAgICAgICAgICAgICBkYXRhLmxhc3RTY3JvbGwgPSBzY3JvbGw7CgogICAgICAgICAgICAgICAgICAgIGlmIChzY3JvbGwgPCAwIHx8IHNjcm9sbCA9PT0gbGFzdFNjcm9sbCB8fCAhdmlzaWJsZSB8fCB0aGlzLmRpc2FibGVkIHx8IHRoaXMuc2hvd09uVXAgJiYgdHlwZSAhPT0gJ3Njcm9sbCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKG5vdyAtIGluaXRUaW1lc3RhbXAgPiAzMDAgfHwgZGlyICE9PSBsYXN0RGlyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuaW5pdFNjcm9sbCA9IHNjcm9sbDsKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5pbml0VGltZXN0YW1wID0gbm93OwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgZGF0YS5sYXN0RGlyID0gZGlyOwoKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaG93T25VcCAmJiBNYXRoLmFicyhkYXRhLmluaXRTY3JvbGwgLSBzY3JvbGwpIDw9IDMwICYmIE1hdGguYWJzKGxhc3RTY3JvbGwgLSBzY3JvbGwpIDw9IDEwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmluYWN0aXZlCiAgICAgICAgICAgICAgICAgICAgICAgIHx8IHNjcm9sbCA8IHRoaXMudG9wCiAgICAgICAgICAgICAgICAgICAgICAgIHx8IHRoaXMuc2hvd09uVXAgJiYgKHNjcm9sbCA8PSB0aGlzLnRvcCB8fCBkaXIgPT09ICdkb3duJyB8fCBkaXIgPT09ICd1cCcgJiYgIXRoaXMuaXNGaXhlZCAmJiBzY3JvbGwgPD0gdGhpcy5ib3R0b21PZmZzZXQpCiAgICAgICAgICAgICAgICAgICAgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNGaXhlZCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBbmltYXRpb24uaW5Qcm9ncmVzcyh0aGlzLiRlbCkgJiYgdG9wID4gc2Nyb2xsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW5pbWF0aW9uLmNhbmNlbCh0aGlzLiRlbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRml4ZWQgPSBmYWxzZTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFuaW1hdGlvbiAmJiBzY3JvbGwgPiB0aGlzLnRvcE9mZnNldCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgQW5pbWF0aW9uLmNhbmNlbCh0aGlzLiRlbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbmltYXRpb24ub3V0KHRoaXMuJGVsLCB0aGlzLmFuaW1hdGlvbikudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzJDEuaGlkZSgpOyB9LCBub29wKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZSgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0ZpeGVkKSB7CgogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZSgpOwoKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYW5pbWF0aW9uKSB7CgogICAgICAgICAgICAgICAgICAgICAgICBBbmltYXRpb24uY2FuY2VsKHRoaXMuJGVsKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIEFuaW1hdGlvbi5pbih0aGlzLiRlbCwgdGhpcy5hbmltYXRpb24pLmNhdGNoKG5vb3ApOwoKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3coKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBldmVudHM6IFsncmVzaXplJywgJ3Njcm9sbCddCgogICAgICAgICAgICB9CgogICAgICAgIF0sCgogICAgICAgIG1ldGhvZHM6IHsKCiAgICAgICAgICAgIHNob3c6IGZ1bmN0aW9uKCkgewoKICAgICAgICAgICAgICAgIHRoaXMuaXNGaXhlZCA9IHRydWU7CiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZSgpOwogICAgICAgICAgICAgICAgYXR0cih0aGlzLnBsYWNlaG9sZGVyLCAnaGlkZGVuJywgbnVsbCk7CgogICAgICAgICAgICB9LAoKICAgICAgICAgICAgaGlkZTogZnVuY3Rpb24oKSB7CgogICAgICAgICAgICAgICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3ModGhpcy4kZWwsIHRoaXMuY2xzRml4ZWQsIHRoaXMuY2xzQmVsb3cpOwogICAgICAgICAgICAgICAgY3NzKHRoaXMuJGVsLCB7cG9zaXRpb246ICcnLCB0b3A6ICcnLCB3aWR0aDogJyd9KTsKICAgICAgICAgICAgICAgIGF0dHIodGhpcy5wbGFjZWhvbGRlciwgJ2hpZGRlbicsICcnKTsKCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uKCkgewoKICAgICAgICAgICAgICAgIHZhciBhY3RpdmUgPSB0aGlzLnRvcCAhPT0gMCB8fCB0aGlzLnNjcm9sbCA+IHRoaXMudG9wOwogICAgICAgICAgICAgICAgdmFyIHRvcCA9IE1hdGgubWF4KDAsIHRoaXMub2Zmc2V0KTsKCiAgICAgICAgICAgICAgICBpZiAodGhpcy5ib3R0b20gJiYgdGhpcy5zY3JvbGwgPiB0aGlzLmJvdHRvbSAtIHRoaXMub2Zmc2V0KSB7CiAgICAgICAgICAgICAgICAgICAgdG9wID0gdGhpcy5ib3R0b20gLSB0aGlzLnNjcm9sbDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBjc3ModGhpcy4kZWwsIHsKICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2ZpeGVkJywKICAgICAgICAgICAgICAgICAgICB0b3A6ICh0b3AgKyAicHgiKSwKICAgICAgICAgICAgICAgICAgICB3aWR0aDogdGhpcy53aWR0aAogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgdGhpcy5pc0FjdGl2ZSA9IGFjdGl2ZTsKICAgICAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHRoaXMuJGVsLCB0aGlzLmNsc0JlbG93LCB0aGlzLnNjcm9sbCA+IHRoaXMuYm90dG9tT2Zmc2V0KTsKICAgICAgICAgICAgICAgIGFkZENsYXNzKHRoaXMuJGVsLCB0aGlzLmNsc0ZpeGVkKTsKCiAgICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgIH07CgogICAgZnVuY3Rpb24gcGFyc2VQcm9wKHByb3AsIHJlZikgewogICAgICAgIHZhciAkcHJvcHMgPSByZWYuJHByb3BzOwogICAgICAgIHZhciAkZWwgPSByZWYuJGVsOwogICAgICAgIHZhciBwcm9wT2Zmc2V0ID0gcmVmWyhwcm9wICsgIk9mZnNldCIpXTsKCgogICAgICAgIHZhciB2YWx1ZSA9ICRwcm9wc1twcm9wXTsKCiAgICAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNOdW1lcmljKHZhbHVlKSAmJiBpc1N0cmluZyh2YWx1ZSkgJiYgdmFsdWUubWF0Y2goL14tP1xkLykpIHsKCiAgICAgICAgICAgIHJldHVybiBwcm9wT2Zmc2V0ICsgdG9QeCh2YWx1ZSk7CgogICAgICAgIH0gZWxzZSB7CgogICAgICAgICAgICByZXR1cm4gb2Zmc2V0KHZhbHVlID09PSB0cnVlID8gJGVsLnBhcmVudE5vZGUgOiBxdWVyeSh2YWx1ZSwgJGVsKSkuYm90dG9tOwoKICAgICAgICB9CiAgICB9CgogICAgdmFyIFN3aXRjaGVyID0gewoKICAgICAgICBtaXhpbnM6IFtUb2dnbGFibGVdLAoKICAgICAgICBhcmdzOiAnY29ubmVjdCcsCgogICAgICAgIHByb3BzOiB7CiAgICAgICAgICAgIGNvbm5lY3Q6IFN0cmluZywKICAgICAgICAgICAgdG9nZ2xlOiBTdHJpbmcsCiAgICAgICAgICAgIGFjdGl2ZTogTnVtYmVyLAogICAgICAgICAgICBzd2lwaW5nOiBCb29sZWFuCiAgICAgICAgfSwKCiAgICAgICAgZGF0YTogewogICAgICAgICAgICBjb25uZWN0OiAnfi51ay1zd2l0Y2hlcicsCiAgICAgICAgICAgIHRvZ2dsZTogJz4gKiA+IDpmaXJzdC1jaGlsZCcsCiAgICAgICAgICAgIGFjdGl2ZTogMCwKICAgICAgICAgICAgc3dpcGluZzogdHJ1ZSwKICAgICAgICAgICAgY2xzOiAndWstYWN0aXZlJywKICAgICAgICAgICAgY2xzQ29udGFpbmVyOiAndWstc3dpdGNoZXInLAogICAgICAgICAgICBhdHRySXRlbTogJ3VrLXN3aXRjaGVyLWl0ZW0nLAogICAgICAgICAgICBxdWV1ZWQ6IHRydWUKICAgICAgICB9LAoKICAgICAgICBjb21wdXRlZDogewoKICAgICAgICAgICAgY29ubmVjdHM6IGZ1bmN0aW9uKHJlZiwgJGVsKSB7CiAgICAgICAgICAgICAgICB2YXIgY29ubmVjdCA9IHJlZi5jb25uZWN0OwoKICAgICAgICAgICAgICAgIHJldHVybiBxdWVyeUFsbChjb25uZWN0LCAkZWwpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgdG9nZ2xlczogZnVuY3Rpb24ocmVmLCAkZWwpIHsKICAgICAgICAgICAgICAgIHZhciB0b2dnbGUgPSByZWYudG9nZ2xlOwoKICAgICAgICAgICAgICAgIHJldHVybiAkJCh0b2dnbGUsICRlbCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgfSwKCiAgICAgICAgZXZlbnRzOiBbCgogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgbmFtZTogJ2NsaWNrJywKCiAgICAgICAgICAgICAgICBkZWxlZ2F0ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgodGhpcy50b2dnbGUpICsgIjpub3QoLnVrLWRpc2FibGVkKSIpOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvdyh0b05vZGVzKHRoaXMuJGVsLmNoaWxkcmVuKS5maWx0ZXIoZnVuY3Rpb24gKGVsKSB7IHJldHVybiB3aXRoaW4oZS5jdXJyZW50LCBlbCk7IH0pWzBdKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBuYW1lOiAnY2xpY2snLAoKICAgICAgICAgICAgICAgIGVsOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0czsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgZGVsZWdhdGU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAoIlsiICsgKHRoaXMuYXR0ckl0ZW0pICsgIl0sW2RhdGEtIiArICh0aGlzLmF0dHJJdGVtKSArICJdIik7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93KGRhdGEoZS5jdXJyZW50LCB0aGlzLmF0dHJJdGVtKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBuYW1lOiAnc3dpcGVSaWdodCBzd2lwZUxlZnQnLAoKICAgICAgICAgICAgICAgIGZpbHRlcjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3dpcGluZzsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgZWw6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbm5lY3RzOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbihyZWYpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHJlZi50eXBlOwoKICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3coZW5kc1dpdGgodHlwZSwgJ0xlZnQnKSA/ICduZXh0JyA6ICdwcmV2aW91cycpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgIF0sCgogICAgICAgIHVwZGF0ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzOwoKCiAgICAgICAgICAgIHRoaXMuY29ubmVjdHMuZm9yRWFjaChmdW5jdGlvbiAobGlzdCkgeyByZXR1cm4gdGhpcyQxLnVwZGF0ZUFyaWEobGlzdC5jaGlsZHJlbik7IH0pOwogICAgICAgICAgICB2YXIgcmVmID0gdGhpcy4kZWw7CiAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IHJlZi5jaGlsZHJlbjsKICAgICAgICAgICAgdGhpcy5zaG93KGZpbHRlcihjaGlsZHJlbiwgKCIuIiArICh0aGlzLmNscykpKVswXSB8fCBjaGlsZHJlblt0aGlzLmFjdGl2ZV0gfHwgY2hpbGRyZW5bMF0pOwoKICAgICAgICAgICAgdGhpcy5zd2lwaW5nICYmIGNzcyh0aGlzLmNvbm5lY3RzLCAndG91Y2gtYWN0aW9uJywgJ3Bhbi15IHBpbmNoLXpvb20nKTsKCiAgICAgICAgfSwKCiAgICAgICAgbWV0aG9kczogewoKICAgICAgICAgICAgaW5kZXg6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuICFpc0VtcHR5KHRoaXMuY29ubmVjdHMpICYmIGluZGV4KGZpbHRlcih0aGlzLmNvbm5lY3RzWzBdLmNoaWxkcmVuLCAoIi4iICsgKHRoaXMuY2xzKSkpWzBdKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHNob3c6IGZ1bmN0aW9uKGl0ZW0pIHsKICAgICAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzOwoKCiAgICAgICAgICAgICAgICB2YXIgcmVmID0gdGhpcy4kZWw7CiAgICAgICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSByZWYuY2hpbGRyZW47CiAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gY2hpbGRyZW4ubGVuZ3RoOwogICAgICAgICAgICAgICAgdmFyIHByZXYgPSB0aGlzLmluZGV4KCk7CiAgICAgICAgICAgICAgICB2YXIgaGFzUHJldiA9IHByZXYgPj0gMDsKICAgICAgICAgICAgICAgIHZhciBkaXIgPSBpdGVtID09PSAncHJldmlvdXMnID8gLTEgOiAxOwoKICAgICAgICAgICAgICAgIHZhciB0b2dnbGUsIGFjdGl2ZSwgbmV4dCA9IGdldEluZGV4KGl0ZW0sIGNoaWxkcmVuLCBwcmV2KTsKCiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrLCBuZXh0ID0gKG5leHQgKyBkaXIgKyBsZW5ndGgpICUgbGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXRjaGVzKHRoaXMudG9nZ2xlc1tuZXh0XSwgJy51ay1kaXNhYmxlZCAqLCAudWstZGlzYWJsZWQsIFtkaXNhYmxlZF0nKSkgewogICAgICAgICAgICAgICAgICAgICAgICB0b2dnbGUgPSB0aGlzLnRvZ2dsZXNbbmV4dF07CiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZSA9IGNoaWxkcmVuW25leHRdOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCFhY3RpdmUgfHwgcHJldiA+PSAwICYmIGhhc0NsYXNzKGFjdGl2ZSwgdGhpcy5jbHMpIHx8IHByZXYgPT09IG5leHQpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3MoY2hpbGRyZW4sIHRoaXMuY2xzKTsKICAgICAgICAgICAgICAgIGFkZENsYXNzKGFjdGl2ZSwgdGhpcy5jbHMpOwogICAgICAgICAgICAgICAgYXR0cih0aGlzLnRvZ2dsZXMsICdhcmlhLWV4cGFuZGVkJywgZmFsc2UpOwogICAgICAgICAgICAgICAgYXR0cih0b2dnbGUsICdhcmlhLWV4cGFuZGVkJywgdHJ1ZSk7CgogICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0cy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0KSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNQcmV2KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMkMS50b2dnbGVOb3cobGlzdC5jaGlsZHJlbltuZXh0XSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyQxLnRvZ2dsZUVsZW1lbnQoW2xpc3QuY2hpbGRyZW5bcHJldl0sIGxpc3QuY2hpbGRyZW5bbmV4dF1dKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgIH07CgogICAgdmFyIFRhYiA9IHsKCiAgICAgICAgbWl4aW5zOiBbQ2xhc3NdLAoKICAgICAgICBleHRlbmRzOiBTd2l0Y2hlciwKCiAgICAgICAgcHJvcHM6IHsKICAgICAgICAgICAgbWVkaWE6IEJvb2xlYW4KICAgICAgICB9LAoKICAgICAgICBkYXRhOiB7CiAgICAgICAgICAgIG1lZGlhOiA5NjAsCiAgICAgICAgICAgIGF0dHJJdGVtOiAndWstdGFiLWl0ZW0nCiAgICAgICAgfSwKCiAgICAgICAgY29ubmVjdGVkOiBmdW5jdGlvbigpIHsKCiAgICAgICAgICAgIHZhciBjbHMgPSBoYXNDbGFzcyh0aGlzLiRlbCwgJ3VrLXRhYi1sZWZ0JykKICAgICAgICAgICAgICAgID8gJ3VrLXRhYi1sZWZ0JwogICAgICAgICAgICAgICAgOiBoYXNDbGFzcyh0aGlzLiRlbCwgJ3VrLXRhYi1yaWdodCcpCiAgICAgICAgICAgICAgICAgICAgPyAndWstdGFiLXJpZ2h0JwogICAgICAgICAgICAgICAgICAgIDogZmFsc2U7CgogICAgICAgICAgICBpZiAoY2xzKSB7CiAgICAgICAgICAgICAgICB0aGlzLiRjcmVhdGUoJ3RvZ2dsZScsIHRoaXMuJGVsLCB7Y2xzOiBjbHMsIG1vZGU6ICdtZWRpYScsIG1lZGlhOiB0aGlzLm1lZGlhfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgfTsKCiAgICB2YXIgVG9nZ2xlID0gewoKICAgICAgICBtaXhpbnM6IFtNZWRpYSwgVG9nZ2xhYmxlXSwKCiAgICAgICAgYXJnczogJ3RhcmdldCcsCgogICAgICAgIHByb3BzOiB7CiAgICAgICAgICAgIGhyZWY6IFN0cmluZywKICAgICAgICAgICAgdGFyZ2V0OiBudWxsLAogICAgICAgICAgICBtb2RlOiAnbGlzdCcKICAgICAgICB9LAoKICAgICAgICBkYXRhOiB7CiAgICAgICAgICAgIGhyZWY6IGZhbHNlLAogICAgICAgICAgICB0YXJnZXQ6IGZhbHNlLAogICAgICAgICAgICBtb2RlOiAnY2xpY2snLAogICAgICAgICAgICBxdWV1ZWQ6IHRydWUKICAgICAgICB9LAoKICAgICAgICBjb21wdXRlZDogewoKICAgICAgICAgICAgdGFyZ2V0OiBmdW5jdGlvbihyZWYsICRlbCkgewogICAgICAgICAgICAgICAgdmFyIGhyZWYgPSByZWYuaHJlZjsKICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSByZWYudGFyZ2V0OwoKICAgICAgICAgICAgICAgIHRhcmdldCA9IHF1ZXJ5QWxsKHRhcmdldCB8fCBocmVmLCAkZWwpOwogICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5sZW5ndGggJiYgdGFyZ2V0IHx8IFskZWxdOwogICAgICAgICAgICB9CgogICAgICAgIH0sCgogICAgICAgIGNvbm5lY3RlZDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHRyaWdnZXIodGhpcy50YXJnZXQsICd1cGRhdGVhcmlhJywgW3RoaXNdKTsKICAgICAgICB9LAoKICAgICAgICBldmVudHM6IFsKCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICBuYW1lOiAocG9pbnRlckVudGVyICsgIiAiICsgcG9pbnRlckxlYXZlKSwKCiAgICAgICAgICAgICAgICBmaWx0ZXI6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmNsdWRlcyh0aGlzLm1vZGUsICdob3ZlcicpOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1RvdWNoKGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlKCgidG9nZ2xlIiArIChlLnR5cGUgPT09IHBvaW50ZXJFbnRlciA/ICdzaG93JyA6ICdoaWRlJykpKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9LAoKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgIG5hbWU6ICdjbGljaycsCgogICAgICAgICAgICAgICAgZmlsdGVyOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5jbHVkZXModGhpcy5tb2RlLCAnY2xpY2snKSB8fCBoYXNUb3VjaCAmJiBpbmNsdWRlcyh0aGlzLm1vZGUsICdob3ZlcicpOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbihlKSB7CgogICAgICAgICAgICAgICAgICAgIC8vIFRPRE8gYmV0dGVyIGlzVG9nZ2xlZCBoYW5kbGluZwogICAgICAgICAgICAgICAgICAgIHZhciBsaW5rOwogICAgICAgICAgICAgICAgICAgIGlmIChjbG9zZXN0KGUudGFyZ2V0LCAnYVtocmVmPSIjIl0sIGFbaHJlZj0iIl0nKQogICAgICAgICAgICAgICAgICAgICAgICB8fCAobGluayA9IGNsb3Nlc3QoZS50YXJnZXQsICdhW2hyZWZdJykpICYmICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAhaXNWaXNpYmxlKHRoaXMudGFyZ2V0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbGluay5oYXNoICYmIG1hdGNoZXModGhpcy50YXJnZXQsIGxpbmsuaGFzaCkKICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZSgpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfQoKICAgICAgICBdLAoKICAgICAgICB1cGRhdGU6IHsKCiAgICAgICAgICAgIHJlYWQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGluY2x1ZGVzKHRoaXMubW9kZSwgJ21lZGlhJykgJiYgdGhpcy5tZWRpYQogICAgICAgICAgICAgICAgICAgID8ge21hdGNoOiB0aGlzLm1hdGNoTWVkaWF9CiAgICAgICAgICAgICAgICAgICAgOiBmYWxzZTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHdyaXRlOiBmdW5jdGlvbihyZWYpIHsKICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IHJlZi5tYXRjaDsKCgogICAgICAgICAgICAgICAgdmFyIHRvZ2dsZWQgPSB0aGlzLmlzVG9nZ2xlZCh0aGlzLnRhcmdldCk7CiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPyAhdG9nZ2xlZCA6IHRvZ2dsZWQpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZSgpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGV2ZW50czogWydyZXNpemUnXQoKICAgICAgICB9LAoKICAgICAgICBtZXRob2RzOiB7CgogICAgICAgICAgICB0b2dnbGU6IGZ1bmN0aW9uKHR5cGUpIHsKICAgICAgICAgICAgICAgIGlmICh0cmlnZ2VyKHRoaXMudGFyZ2V0LCB0eXBlIHx8ICd0b2dnbGUnLCBbdGhpc10pKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGVFbGVtZW50KHRoaXMudGFyZ2V0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgfTsKCiAgICBmdW5jdGlvbiBjb3JlIChVSWtpdCkgewoKICAgICAgICAvLyBjb3JlIGNvbXBvbmVudHMKICAgICAgICBVSWtpdC5jb21wb25lbnQoJ2FjY29yZGlvbicsIEFjY29yZGlvbik7CiAgICAgICAgVUlraXQuY29tcG9uZW50KCdhbGVydCcsIEFsZXJ0KTsKICAgICAgICBVSWtpdC5jb21wb25lbnQoJ2NvdmVyJywgQ292ZXIpOwogICAgICAgIFVJa2l0LmNvbXBvbmVudCgnZHJvcCcsIERyb3ApOwogICAgICAgIFVJa2l0LmNvbXBvbmVudCgnZHJvcGRvd24nLCBEcm9wZG93bik7CiAgICAgICAgVUlraXQuY29tcG9uZW50KCdmb3JtQ3VzdG9tJywgRm9ybUN1c3RvbSk7CiAgICAgICAgVUlraXQuY29tcG9uZW50KCdnaWYnLCBHaWYpOwogICAgICAgIFVJa2l0LmNvbXBvbmVudCgnZ3JpZCcsIEdyaWQpOwogICAgICAgIFVJa2l0LmNvbXBvbmVudCgnaGVpZ2h0TWF0Y2gnLCBIZWlnaHRNYXRjaCk7CiAgICAgICAgVUlraXQuY29tcG9uZW50KCdoZWlnaHRWaWV3cG9ydCcsIEhlaWdodFZpZXdwb3J0KTsKICAgICAgICBVSWtpdC5jb21wb25lbnQoJ2ljb24nLCBJY29uKTsKICAgICAgICBVSWtpdC5jb21wb25lbnQoJ2ltZycsIEltZyk7CiAgICAgICAgVUlraXQuY29tcG9uZW50KCdsZWFkZXInLCBMZWFkZXIpOwogICAgICAgIFVJa2l0LmNvbXBvbmVudCgnbWFyZ2luJywgTWFyZ2luKTsKICAgICAgICBVSWtpdC5jb21wb25lbnQoJ21vZGFsJywgTW9kYWwkMSk7CiAgICAgICAgVUlraXQuY29tcG9uZW50KCduYXYnLCBOYXYpOwogICAgICAgIFVJa2l0LmNvbXBvbmVudCgnbmF2YmFyJywgTmF2YmFyKTsKICAgICAgICBVSWtpdC5jb21wb25lbnQoJ29mZmNhbnZhcycsIE9mZmNhbnZhcyk7CiAgICAgICAgVUlraXQuY29tcG9uZW50KCdvdmVyZmxvd0F1dG8nLCBPdmVyZmxvd0F1dG8pOwogICAgICAgIFVJa2l0LmNvbXBvbmVudCgncmVzcG9uc2l2ZScsIFJlc3BvbnNpdmUpOwogICAgICAgIFVJa2l0LmNvbXBvbmVudCgnc2Nyb2xsJywgU2Nyb2xsKTsKICAgICAgICBVSWtpdC5jb21wb25lbnQoJ3Njcm9sbHNweScsIFNjcm9sbHNweSk7CiAgICAgICAgVUlraXQuY29tcG9uZW50KCdzY3JvbGxzcHlOYXYnLCBTY3JvbGxzcHlOYXYpOwogICAgICAgIFVJa2l0LmNvbXBvbmVudCgnc3RpY2t5JywgU3RpY2t5KTsKICAgICAgICBVSWtpdC5jb21wb25lbnQoJ3N2ZycsIFN2Zyk7CiAgICAgICAgVUlraXQuY29tcG9uZW50KCdzd2l0Y2hlcicsIFN3aXRjaGVyKTsKICAgICAgICBVSWtpdC5jb21wb25lbnQoJ3RhYicsIFRhYik7CiAgICAgICAgVUlraXQuY29tcG9uZW50KCd0b2dnbGUnLCBUb2dnbGUpOwogICAgICAgIFVJa2l0LmNvbXBvbmVudCgndmlkZW8nLCBWaWRlbyk7CgogICAgICAgIC8vIEljb24gY29tcG9uZW50cwogICAgICAgIFVJa2l0LmNvbXBvbmVudCgnY2xvc2UnLCBDbG9zZSk7CiAgICAgICAgVUlraXQuY29tcG9uZW50KCdtYXJrZXInLCBJY29uQ29tcG9uZW50KTsKICAgICAgICBVSWtpdC5jb21wb25lbnQoJ25hdmJhclRvZ2dsZUljb24nLCBJY29uQ29tcG9uZW50KTsKICAgICAgICBVSWtpdC5jb21wb25lbnQoJ292ZXJsYXlJY29uJywgSWNvbkNvbXBvbmVudCk7CiAgICAgICAgVUlraXQuY29tcG9uZW50KCdwYWdpbmF0aW9uTmV4dCcsIEljb25Db21wb25lbnQpOwogICAgICAgIFVJa2l0LmNvbXBvbmVudCgncGFnaW5hdGlvblByZXZpb3VzJywgSWNvbkNvbXBvbmVudCk7CiAgICAgICAgVUlraXQuY29tcG9uZW50KCdzZWFyY2hJY29uJywgU2VhcmNoKTsKICAgICAgICBVSWtpdC5jb21wb25lbnQoJ3NsaWRlbmF2TmV4dCcsIFNsaWRlbmF2KTsKICAgICAgICBVSWtpdC5jb21wb25lbnQoJ3NsaWRlbmF2UHJldmlvdXMnLCBTbGlkZW5hdik7CiAgICAgICAgVUlraXQuY29tcG9uZW50KCdzcGlubmVyJywgU3Bpbm5lcik7CiAgICAgICAgVUlraXQuY29tcG9uZW50KCd0b3RvcCcsIEljb25Db21wb25lbnQpOwoKICAgICAgICAvLyBjb3JlIGZ1bmN0aW9uYWxpdHkKICAgICAgICBVSWtpdC51c2UoQ29yZSk7CgogICAgfQoKICAgIFVJa2l0LnZlcnNpb24gPSAnMy4yLjAnOwoKICAgIGNvcmUoVUlraXQpOwoKICAgIHZhciBDb3VudGRvd24gPSB7CgogICAgICAgIG1peGluczogW0NsYXNzXSwKCiAgICAgICAgcHJvcHM6IHsKICAgICAgICAgICAgZGF0ZTogU3RyaW5nLAogICAgICAgICAgICBjbHNXcmFwcGVyOiBTdHJpbmcKICAgICAgICB9LAoKICAgICAgICBkYXRhOiB7CiAgICAgICAgICAgIGRhdGU6ICcnLAogICAgICAgICAgICBjbHNXcmFwcGVyOiAnLnVrLWNvdW50ZG93bi0ldW5pdCUnCiAgICAgICAgfSwKCiAgICAgICAgY29tcHV0ZWQ6IHsKCiAgICAgICAgICAgIGRhdGU6IGZ1bmN0aW9uKHJlZikgewogICAgICAgICAgICAgICAgdmFyIGRhdGUgPSByZWYuZGF0ZTsKCiAgICAgICAgICAgICAgICByZXR1cm4gRGF0ZS5wYXJzZShkYXRlKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGRheXM6IGZ1bmN0aW9uKHJlZiwgJGVsKSB7CiAgICAgICAgICAgICAgICB2YXIgY2xzV3JhcHBlciA9IHJlZi5jbHNXcmFwcGVyOwoKICAgICAgICAgICAgICAgIHJldHVybiAkKGNsc1dyYXBwZXIucmVwbGFjZSgnJXVuaXQlJywgJ2RheXMnKSwgJGVsKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGhvdXJzOiBmdW5jdGlvbihyZWYsICRlbCkgewogICAgICAgICAgICAgICAgdmFyIGNsc1dyYXBwZXIgPSByZWYuY2xzV3JhcHBlcjsKCiAgICAgICAgICAgICAgICByZXR1cm4gJChjbHNXcmFwcGVyLnJlcGxhY2UoJyV1bml0JScsICdob3VycycpLCAkZWwpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgbWludXRlczogZnVuY3Rpb24ocmVmLCAkZWwpIHsKICAgICAgICAgICAgICAgIHZhciBjbHNXcmFwcGVyID0gcmVmLmNsc1dyYXBwZXI7CgogICAgICAgICAgICAgICAgcmV0dXJuICQoY2xzV3JhcHBlci5yZXBsYWNlKCcldW5pdCUnLCAnbWludXRlcycpLCAkZWwpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgc2Vjb25kczogZnVuY3Rpb24ocmVmLCAkZWwpIHsKICAgICAgICAgICAgICAgIHZhciBjbHNXcmFwcGVyID0gcmVmLmNsc1dyYXBwZXI7CgogICAgICAgICAgICAgICAgcmV0dXJuICQoY2xzV3JhcHBlci5yZXBsYWNlKCcldW5pdCUnLCAnc2Vjb25kcycpLCAkZWwpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgdW5pdHM6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7CgogICAgICAgICAgICAgICAgcmV0dXJuIFsnZGF5cycsICdob3VycycsICdtaW51dGVzJywgJ3NlY29uZHMnXS5maWx0ZXIoZnVuY3Rpb24gKHVuaXQpIHsgcmV0dXJuIHRoaXMkMVt1bml0XTsgfSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgfSwKCiAgICAgICAgY29ubmVjdGVkOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdGhpcy5zdGFydCgpOwogICAgICAgIH0sCgogICAgICAgIGRpc2Nvbm5lY3RlZDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzOwoKICAgICAgICAgICAgdGhpcy5zdG9wKCk7CiAgICAgICAgICAgIHRoaXMudW5pdHMuZm9yRWFjaChmdW5jdGlvbiAodW5pdCkgeyByZXR1cm4gZW1wdHkodGhpcyQxW3VuaXRdKTsgfSk7CiAgICAgICAgfSwKCiAgICAgICAgZXZlbnRzOiBbCgogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgbmFtZTogJ3Zpc2liaWxpdHljaGFuZ2UnLAoKICAgICAgICAgICAgICAgIGVsOiBkb2N1bWVudCwKCiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnQuaGlkZGVuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcCgpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnQoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9CgogICAgICAgIF0sCgogICAgICAgIHVwZGF0ZTogewoKICAgICAgICAgICAgd3JpdGU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7CgoKICAgICAgICAgICAgICAgIHZhciB0aW1lc3BhbiA9IGdldFRpbWVTcGFuKHRoaXMuZGF0ZSk7CgogICAgICAgICAgICAgICAgaWYgKHRpbWVzcGFuLnRvdGFsIDw9IDApIHsKCiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdG9wKCk7CgogICAgICAgICAgICAgICAgICAgIHRpbWVzcGFuLmRheXMKICAgICAgICAgICAgICAgICAgICAgICAgPSB0aW1lc3Bhbi5ob3VycwogICAgICAgICAgICAgICAgICAgICAgICA9IHRpbWVzcGFuLm1pbnV0ZXMKICAgICAgICAgICAgICAgICAgICAgICAgPSB0aW1lc3Bhbi5zZWNvbmRzCiAgICAgICAgICAgICAgICAgICAgICAgID0gMDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB0aGlzLnVuaXRzLmZvckVhY2goZnVuY3Rpb24gKHVuaXQpIHsKCiAgICAgICAgICAgICAgICAgICAgdmFyIGRpZ2l0cyA9IFN0cmluZyhNYXRoLmZsb29yKHRpbWVzcGFuW3VuaXRdKSk7CgogICAgICAgICAgICAgICAgICAgIGRpZ2l0cyA9IGRpZ2l0cy5sZW5ndGggPCAyID8gKCIwIiArIGRpZ2l0cykgOiBkaWdpdHM7CgogICAgICAgICAgICAgICAgICAgIHZhciBlbCA9IHRoaXMkMVt1bml0XTsKICAgICAgICAgICAgICAgICAgICBpZiAoZWwudGV4dENvbnRlbnQgIT09IGRpZ2l0cykgewogICAgICAgICAgICAgICAgICAgICAgICBkaWdpdHMgPSBkaWdpdHMuc3BsaXQoJycpOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpZ2l0cy5sZW5ndGggIT09IGVsLmNoaWxkcmVuLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbChlbCwgZGlnaXRzLm1hcChmdW5jdGlvbiAoKSB7IHJldHVybiAnPHNwYW4+PC9zcGFuPic7IH0pLmpvaW4oJycpKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgZGlnaXRzLmZvckVhY2goZnVuY3Rpb24gKGRpZ2l0LCBpKSB7IHJldHVybiBlbC5jaGlsZHJlbltpXS50ZXh0Q29udGVudCA9IGRpZ2l0OyB9KTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICB9CgogICAgICAgIH0sCgogICAgICAgIG1ldGhvZHM6IHsKCiAgICAgICAgICAgIHN0YXJ0OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzOwoKCiAgICAgICAgICAgICAgICB0aGlzLnN0b3AoKTsKCiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRlICYmIHRoaXMudW5pdHMubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgpOwogICAgICAgICAgICAgICAgICAgIHRoaXMudGltZXIgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzJDEuJGVtaXQoKTsgfSwgMTAwMCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9LAoKICAgICAgICAgICAgc3RvcDogZnVuY3Rpb24oKSB7CgogICAgICAgICAgICAgICAgaWYgKHRoaXMudGltZXIpIHsKICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMudGltZXIpOwogICAgICAgICAgICAgICAgICAgIHRoaXMudGltZXIgPSBudWxsOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgfTsKCiAgICBmdW5jdGlvbiBnZXRUaW1lU3BhbihkYXRlKSB7CgogICAgICAgIHZhciB0b3RhbCA9IGRhdGUgLSBEYXRlLm5vdygpOwoKICAgICAgICByZXR1cm4gewogICAgICAgICAgICB0b3RhbDogdG90YWwsCiAgICAgICAgICAgIHNlY29uZHM6IHRvdGFsIC8gMTAwMCAlIDYwLAogICAgICAgICAgICBtaW51dGVzOiB0b3RhbCAvIDEwMDAgLyA2MCAlIDYwLAogICAgICAgICAgICBob3VyczogdG90YWwgLyAxMDAwIC8gNjAgLyA2MCAlIDI0LAogICAgICAgICAgICBkYXlzOiB0b3RhbCAvIDEwMDAgLyA2MCAvIDYwIC8gMjQKICAgICAgICB9OwogICAgfQoKICAgIHZhciB0YXJnZXRDbGFzcyA9ICd1ay1hbmltYXRpb24tdGFyZ2V0JzsKCiAgICB2YXIgQW5pbWF0ZSA9IHsKCiAgICAgICAgcHJvcHM6IHsKICAgICAgICAgICAgYW5pbWF0aW9uOiBOdW1iZXIKICAgICAgICB9LAoKICAgICAgICBkYXRhOiB7CiAgICAgICAgICAgIGFuaW1hdGlvbjogMTUwCiAgICAgICAgfSwKCiAgICAgICAgY29tcHV0ZWQ6IHsKCiAgICAgICAgICAgIHRhcmdldDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kZWw7CiAgICAgICAgICAgIH0KCiAgICAgICAgfSwKCiAgICAgICAgbWV0aG9kczogewoKICAgICAgICAgICAgYW5pbWF0ZTogZnVuY3Rpb24oYWN0aW9uKSB7CiAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpczsKCgogICAgICAgICAgICAgICAgYWRkU3R5bGUoKTsKCiAgICAgICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSB0b05vZGVzKHRoaXMudGFyZ2V0LmNoaWxkcmVuKTsKICAgICAgICAgICAgICAgIHZhciBwcm9wc0Zyb20gPSBjaGlsZHJlbi5tYXAoZnVuY3Rpb24gKGVsKSB7IHJldHVybiBnZXRQcm9wcyhlbCwgdHJ1ZSk7IH0pOwoKICAgICAgICAgICAgICAgIHZhciBvbGRIZWlnaHQgPSBoZWlnaHQodGhpcy50YXJnZXQpOwogICAgICAgICAgICAgICAgdmFyIG9sZFNjcm9sbFkgPSB3aW5kb3cucGFnZVlPZmZzZXQ7CgogICAgICAgICAgICAgICAgYWN0aW9uKCk7CgogICAgICAgICAgICAgICAgVHJhbnNpdGlvbi5jYW5jZWwodGhpcy50YXJnZXQpOwogICAgICAgICAgICAgICAgY2hpbGRyZW4uZm9yRWFjaChUcmFuc2l0aW9uLmNhbmNlbCk7CgogICAgICAgICAgICAgICAgcmVzZXQodGhpcy50YXJnZXQpOwogICAgICAgICAgICAgICAgdGhpcy4kdXBkYXRlKHRoaXMudGFyZ2V0KTsKICAgICAgICAgICAgICAgIGZhc3Rkb20uZmx1c2goKTsKCiAgICAgICAgICAgICAgICB2YXIgbmV3SGVpZ2h0ID0gaGVpZ2h0KHRoaXMudGFyZ2V0KTsKCiAgICAgICAgICAgICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuLmNvbmNhdCh0b05vZGVzKHRoaXMudGFyZ2V0LmNoaWxkcmVuKS5maWx0ZXIoZnVuY3Rpb24gKGVsKSB7IHJldHVybiAhaW5jbHVkZXMoY2hpbGRyZW4sIGVsKTsgfSkpOwoKICAgICAgICAgICAgICAgIHZhciBwcm9wc1RvID0gY2hpbGRyZW4ubWFwKGZ1bmN0aW9uIChlbCwgaSkgeyByZXR1cm4gZWwucGFyZW50Tm9kZSAmJiBpIGluIHByb3BzRnJvbQogICAgICAgICAgICAgICAgICAgICAgICA/IHByb3BzRnJvbVtpXQogICAgICAgICAgICAgICAgICAgICAgICA/IGlzVmlzaWJsZShlbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZ2V0UG9zaXRpb25XaXRoTWFyZ2luKGVsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7b3BhY2l0eTogMH0KICAgICAgICAgICAgICAgICAgICAgICAgOiB7b3BhY2l0eTogaXNWaXNpYmxlKGVsKSA/IDEgOiAwfQogICAgICAgICAgICAgICAgICAgICAgICA6IGZhbHNlOyB9CiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIHByb3BzRnJvbSA9IHByb3BzVG8ubWFwKGZ1bmN0aW9uIChwcm9wcywgaSkgewogICAgICAgICAgICAgICAgICAgIHZhciBmcm9tID0gY2hpbGRyZW5baV0ucGFyZW50Tm9kZSA9PT0gdGhpcyQxLnRhcmdldAogICAgICAgICAgICAgICAgICAgICAgICA/IHByb3BzRnJvbVtpXSB8fCBnZXRQcm9wcyhjaGlsZHJlbltpXSkKICAgICAgICAgICAgICAgICAgICAgICAgOiBmYWxzZTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGZyb20pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9wcykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGZyb20ub3BhY2l0eTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghKCdvcGFjaXR5JyBpbiBwcm9wcykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcGFjaXR5ID0gZnJvbS5vcGFjaXR5OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGFjaXR5ICUgMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLm9wYWNpdHkgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgZnJvbS5vcGFjaXR5OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnJvbTsKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIGFkZENsYXNzKHRoaXMudGFyZ2V0LCB0YXJnZXRDbGFzcyk7CiAgICAgICAgICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChlbCwgaSkgeyByZXR1cm4gcHJvcHNGcm9tW2ldICYmIGNzcyhlbCwgcHJvcHNGcm9tW2ldKTsgfSk7CiAgICAgICAgICAgICAgICBjc3ModGhpcy50YXJnZXQsICdoZWlnaHQnLCBvbGRIZWlnaHQpOwogICAgICAgICAgICAgICAgc2Nyb2xsVG9wKHdpbmRvdywgb2xkU2Nyb2xsWSk7CgogICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGNoaWxkcmVuLm1hcChmdW5jdGlvbiAoZWwsIGkpIHsgcmV0dXJuIHByb3BzRnJvbVtpXSAmJiBwcm9wc1RvW2ldCiAgICAgICAgICAgICAgICAgICAgICAgID8gVHJhbnNpdGlvbi5zdGFydChlbCwgcHJvcHNUb1tpXSwgdGhpcyQxLmFuaW1hdGlvbiwgJ2Vhc2UnKQogICAgICAgICAgICAgICAgICAgICAgICA6IFByb21pc2UucmVzb2x2ZSgpOyB9CiAgICAgICAgICAgICAgICApLmNvbmNhdChUcmFuc2l0aW9uLnN0YXJ0KHRoaXMudGFyZ2V0LCB7aGVpZ2h0OiBuZXdIZWlnaHR9LCB0aGlzLmFuaW1hdGlvbiwgJ2Vhc2UnKSkpLnRoZW4oZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGVsLCBpKSB7IHJldHVybiBjc3MoZWwsIHtkaXNwbGF5OiBwcm9wc1RvW2ldLm9wYWNpdHkgPT09IDAgPyAnbm9uZScgOiAnJywgekluZGV4OiAnJ30pOyB9KTsKICAgICAgICAgICAgICAgICAgICByZXNldCh0aGlzJDEudGFyZ2V0KTsKICAgICAgICAgICAgICAgICAgICB0aGlzJDEuJHVwZGF0ZSh0aGlzJDEudGFyZ2V0KTsKICAgICAgICAgICAgICAgICAgICBmYXN0ZG9tLmZsdXNoKCk7IC8vIG5lZWRlZCBmb3IgSUUxMQogICAgICAgICAgICAgICAgfSwgbm9vcCk7CgogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKCiAgICBmdW5jdGlvbiBnZXRQcm9wcyhlbCwgb3BhY2l0eSkgewoKICAgICAgICB2YXIgekluZGV4ID0gY3NzKGVsLCAnekluZGV4Jyk7CgogICAgICAgIHJldHVybiBpc1Zpc2libGUoZWwpCiAgICAgICAgICAgID8gYXNzaWduKHsKICAgICAgICAgICAgICAgIGRpc3BsYXk6ICcnLAogICAgICAgICAgICAgICAgb3BhY2l0eTogb3BhY2l0eSA/IGNzcyhlbCwgJ29wYWNpdHknKSA6ICcwJywKICAgICAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJywKICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLAogICAgICAgICAgICAgICAgekluZGV4OiB6SW5kZXggPT09ICdhdXRvJyA/IGluZGV4KGVsKSA6IHpJbmRleAogICAgICAgICAgICB9LCBnZXRQb3NpdGlvbldpdGhNYXJnaW4oZWwpKQogICAgICAgICAgICA6IGZhbHNlOwogICAgfQoKICAgIGZ1bmN0aW9uIHJlc2V0KGVsKSB7CiAgICAgICAgY3NzKGVsLmNoaWxkcmVuLCB7CiAgICAgICAgICAgIGhlaWdodDogJycsCiAgICAgICAgICAgIGxlZnQ6ICcnLAogICAgICAgICAgICBvcGFjaXR5OiAnJywKICAgICAgICAgICAgcG9pbnRlckV2ZW50czogJycsCiAgICAgICAgICAgIHBvc2l0aW9uOiAnJywKICAgICAgICAgICAgdG9wOiAnJywKICAgICAgICAgICAgd2lkdGg6ICcnCiAgICAgICAgfSk7CiAgICAgICAgcmVtb3ZlQ2xhc3MoZWwsIHRhcmdldENsYXNzKTsKICAgICAgICBjc3MoZWwsICdoZWlnaHQnLCAnJyk7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0UG9zaXRpb25XaXRoTWFyZ2luKGVsKSB7CiAgICAgICAgdmFyIHJlZiA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgIHZhciBoZWlnaHQgPSByZWYuaGVpZ2h0OwogICAgICAgIHZhciB3aWR0aCA9IHJlZi53aWR0aDsKICAgICAgICB2YXIgcmVmJDEgPSBwb3NpdGlvbihlbCk7CiAgICAgICAgdmFyIHRvcCA9IHJlZiQxLnRvcDsKICAgICAgICB2YXIgbGVmdCA9IHJlZiQxLmxlZnQ7CiAgICAgICAgdG9wICs9IHRvRmxvYXQoY3NzKGVsLCAnbWFyZ2luVG9wJykpOwoKICAgICAgICByZXR1cm4ge3RvcDogdG9wLCBsZWZ0OiBsZWZ0LCBoZWlnaHQ6IGhlaWdodCwgd2lkdGg6IHdpZHRofTsKICAgIH0KCiAgICB2YXIgc3R5bGU7CgogICAgZnVuY3Rpb24gYWRkU3R5bGUoKSB7CiAgICAgICAgaWYgKHN0eWxlKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgc3R5bGUgPSBhcHBlbmQoZG9jdW1lbnQuaGVhZCwgJzxzdHlsZT4nKS5zaGVldDsKICAgICAgICBzdHlsZS5pbnNlcnRSdWxlKAogICAgICAgICAgICAoIi4iICsgdGFyZ2V0Q2xhc3MgKyAiID4gKiB7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDtcbiAgICAgICAgfSIpLCAwCiAgICAgICAgKTsKICAgIH0KCiAgICB2YXIgRmlsdGVyID0gewoKICAgICAgICBtaXhpbnM6IFtBbmltYXRlXSwKCiAgICAgICAgYXJnczogJ3RhcmdldCcsCgogICAgICAgIHByb3BzOiB7CiAgICAgICAgICAgIHRhcmdldDogQm9vbGVhbiwKICAgICAgICAgICAgc2VsQWN0aXZlOiBCb29sZWFuCiAgICAgICAgfSwKCiAgICAgICAgZGF0YTogewogICAgICAgICAgICB0YXJnZXQ6IG51bGwsCiAgICAgICAgICAgIHNlbEFjdGl2ZTogZmFsc2UsCiAgICAgICAgICAgIGF0dHJJdGVtOiAndWstZmlsdGVyLWNvbnRyb2wnLAogICAgICAgICAgICBjbHM6ICd1ay1hY3RpdmUnLAogICAgICAgICAgICBhbmltYXRpb246IDI1MAogICAgICAgIH0sCgogICAgICAgIGNvbXB1dGVkOiB7CgogICAgICAgICAgICB0b2dnbGVzOiB7CgogICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbihyZWYsICRlbCkgewogICAgICAgICAgICAgICAgICAgIHZhciBhdHRySXRlbSA9IHJlZi5hdHRySXRlbTsKCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQkKCgiWyIgKyAodGhpcy5hdHRySXRlbSkgKyAiXSxbZGF0YS0iICsgKHRoaXMuYXR0ckl0ZW0pICsgIl0iKSwgJGVsKTsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgd2F0Y2g6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU3RhdGUoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICB0YXJnZXQ6IGZ1bmN0aW9uKHJlZiwgJGVsKSB7CiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gcmVmLnRhcmdldDsKCiAgICAgICAgICAgICAgICByZXR1cm4gJCh0YXJnZXQsICRlbCk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBjaGlsZHJlbjogewoKICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvTm9kZXModGhpcy50YXJnZXQgJiYgdGhpcy50YXJnZXQuY2hpbGRyZW4pOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICB3YXRjaDogZnVuY3Rpb24obGlzdCwgb2xkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0VxdWFsTGlzdChsaXN0LCBvbGQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU3RhdGUoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgfSwKCiAgICAgICAgZXZlbnRzOiBbCgogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgbmFtZTogJ2NsaWNrJywKCiAgICAgICAgICAgICAgICBkZWxlZ2F0ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgiWyIgKyAodGhpcy5hdHRySXRlbSkgKyAiXSxbZGF0YS0iICsgKHRoaXMuYXR0ckl0ZW0pICsgIl0iKTsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgaGFuZGxlcjogZnVuY3Rpb24oZSkgewoKICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBseShlLmN1cnJlbnQpOwoKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0KCiAgICAgICAgXSwKCiAgICAgICAgY29ubmVjdGVkOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7CgoKICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSgpOwoKICAgICAgICAgICAgaWYgKHRoaXMuc2VsQWN0aXZlICE9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgdmFyIGFjdGl2ZXMgPSAkJCh0aGlzLnNlbEFjdGl2ZSwgdGhpcy4kZWwpOwogICAgICAgICAgICAgICAgdGhpcy50b2dnbGVzLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7IHJldHVybiB0b2dnbGVDbGFzcyhlbCwgdGhpcyQxLmNscywgaW5jbHVkZXMoYWN0aXZlcywgZWwpKTsgfSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgfSwKCiAgICAgICAgbWV0aG9kczogewoKICAgICAgICAgICAgYXBwbHk6IGZ1bmN0aW9uKGVsKSB7CiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKG1lcmdlU3RhdGUoZWwsIHRoaXMuYXR0ckl0ZW0sIHRoaXMuZ2V0U3RhdGUoKSkpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgZ2V0U3RhdGU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9nZ2xlcwogICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHsgcmV0dXJuIGhhc0NsYXNzKGl0ZW0sIHRoaXMkMS5jbHMpOyB9KQogICAgICAgICAgICAgICAgICAgIC5yZWR1Y2UoZnVuY3Rpb24gKHN0YXRlLCBlbCkgeyByZXR1cm4gbWVyZ2VTdGF0ZShlbCwgdGhpcyQxLmF0dHJJdGVtLCBzdGF0ZSk7IH0sIHtmaWx0ZXI6IHsnJzogJyd9LCBzb3J0OiBbXX0pOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgc2V0U3RhdGU6IGZ1bmN0aW9uKHN0YXRlLCBhbmltYXRlKSB7CiAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpczsKICAgICAgICAgICAgICAgIGlmICggYW5pbWF0ZSA9PT0gdm9pZCAwICkgYW5pbWF0ZSA9IHRydWU7CgoKICAgICAgICAgICAgICAgIHN0YXRlID0gYXNzaWduKHtmaWx0ZXI6IHsnJzogJyd9LCBzb3J0OiBbXX0sIHN0YXRlKTsKCiAgICAgICAgICAgICAgICB0cmlnZ2VyKHRoaXMuJGVsLCAnYmVmb3JlRmlsdGVyJywgW3RoaXMsIHN0YXRlXSk7CgogICAgICAgICAgICAgICAgdmFyIHJlZiA9IHRoaXM7CiAgICAgICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSByZWYuY2hpbGRyZW47CgogICAgICAgICAgICAgICAgdGhpcy50b2dnbGVzLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7IHJldHVybiB0b2dnbGVDbGFzcyhlbCwgdGhpcyQxLmNscywgISFtYXRjaEZpbHRlcihlbCwgdGhpcyQxLmF0dHJJdGVtLCBzdGF0ZSkpOyB9KTsKCiAgICAgICAgICAgICAgICB2YXIgYXBwbHkgPSBmdW5jdGlvbiAoKSB7CgogICAgICAgICAgICAgICAgICAgIHZhciBzZWxlY3RvciA9IGdldFNlbGVjdG9yKHN0YXRlKTsKCiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsgcmV0dXJuIGNzcyhlbCwgJ2Rpc3BsYXknLCBzZWxlY3RvciAmJiAhbWF0Y2hlcyhlbCwgc2VsZWN0b3IpID8gJ25vbmUnIDogJycpOyB9KTsKCiAgICAgICAgICAgICAgICAgICAgdmFyIHJlZiA9IHN0YXRlLnNvcnQ7CiAgICAgICAgICAgICAgICAgICAgdmFyIHNvcnQgPSByZWZbMF07CiAgICAgICAgICAgICAgICAgICAgdmFyIG9yZGVyID0gcmVmWzFdOwoKICAgICAgICAgICAgICAgICAgICBpZiAoc29ydCkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgc29ydGVkID0gc29ydEl0ZW1zKGNoaWxkcmVuLCBzb3J0LCBvcmRlcik7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNFcXVhbChzb3J0ZWQsIGNoaWxkcmVuKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydGVkLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7IHJldHVybiBhcHBlbmQodGhpcyQxLnRhcmdldCwgZWwpOyB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIGlmIChhbmltYXRlKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbmltYXRlKGFwcGx5KS50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRyaWdnZXIodGhpcyQxLiRlbCwgJ2FmdGVyRmlsdGVyJywgW3RoaXMkMV0pOyB9KTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgYXBwbHkoKTsKICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKHRoaXMuJGVsLCAnYWZ0ZXJGaWx0ZXInLCBbdGhpc10pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHVwZGF0ZVN0YXRlOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzOwoKICAgICAgICAgICAgICAgIGZhc3Rkb20ud3JpdGUoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcyQxLnNldFN0YXRlKHRoaXMkMS5nZXRTdGF0ZSgpLCBmYWxzZSk7IH0pOwogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICB9OwoKICAgIGZ1bmN0aW9uIGdldEZpbHRlcihlbCwgYXR0cikgewogICAgICAgIHJldHVybiBwYXJzZU9wdGlvbnMoZGF0YShlbCwgYXR0ciksIFsnZmlsdGVyJ10pOwogICAgfQoKICAgIGZ1bmN0aW9uIG1lcmdlU3RhdGUoZWwsIGF0dHIsIHN0YXRlKSB7CgogICAgICAgIHZhciBmaWx0ZXJCeSA9IGdldEZpbHRlcihlbCwgYXR0cik7CiAgICAgICAgdmFyIGZpbHRlciA9IGZpbHRlckJ5LmZpbHRlcjsKICAgICAgICB2YXIgZ3JvdXAgPSBmaWx0ZXJCeS5ncm91cDsKICAgICAgICB2YXIgc29ydCA9IGZpbHRlckJ5LnNvcnQ7CiAgICAgICAgdmFyIG9yZGVyID0gZmlsdGVyQnkub3JkZXI7IGlmICggb3JkZXIgPT09IHZvaWQgMCApIG9yZGVyID0gJ2FzYyc7CgogICAgICAgIGlmIChmaWx0ZXIgfHwgaXNVbmRlZmluZWQoc29ydCkpIHsKCiAgICAgICAgICAgIGlmIChncm91cCkgewoKICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIpIHsKICAgICAgICAgICAgICAgICAgICBkZWxldGUgc3RhdGUuZmlsdGVyWycnXTsKICAgICAgICAgICAgICAgICAgICBzdGF0ZS5maWx0ZXJbZ3JvdXBdID0gZmlsdGVyOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBkZWxldGUgc3RhdGUuZmlsdGVyW2dyb3VwXTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRW1wdHkoc3RhdGUuZmlsdGVyKSB8fCAnJyBpbiBzdGF0ZS5maWx0ZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuZmlsdGVyID0geycnOiBmaWx0ZXIgfHwgJyd9OwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgc3RhdGUuZmlsdGVyID0geycnOiBmaWx0ZXIgfHwgJyd9OwogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChzb3J0KSkgewogICAgICAgICAgICBzdGF0ZS5zb3J0ID0gW3NvcnQsIG9yZGVyXTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBzdGF0ZTsKICAgIH0KCiAgICBmdW5jdGlvbiBtYXRjaEZpbHRlcihlbCwgYXR0ciwgcmVmKSB7CiAgICAgICAgdmFyIHN0YXRlRmlsdGVyID0gcmVmLmZpbHRlcjsgaWYgKCBzdGF0ZUZpbHRlciA9PT0gdm9pZCAwICkgc3RhdGVGaWx0ZXIgPSB7Jyc6ICcnfTsKICAgICAgICB2YXIgcmVmX3NvcnQgPSByZWYuc29ydDsKICAgICAgICB2YXIgc3RhdGVTb3J0ID0gcmVmX3NvcnRbMF07CiAgICAgICAgdmFyIHN0YXRlT3JkZXIgPSByZWZfc29ydFsxXTsKCgogICAgICAgIHZhciByZWYkMSA9IGdldEZpbHRlcihlbCwgYXR0cik7CiAgICAgICAgdmFyIGZpbHRlciA9IHJlZiQxLmZpbHRlcjsgaWYgKCBmaWx0ZXIgPT09IHZvaWQgMCApIGZpbHRlciA9ICcnOwogICAgICAgIHZhciBncm91cCA9IHJlZiQxLmdyb3VwOyBpZiAoIGdyb3VwID09PSB2b2lkIDAgKSBncm91cCA9ICcnOwogICAgICAgIHZhciBzb3J0ID0gcmVmJDEuc29ydDsKICAgICAgICB2YXIgb3JkZXIgPSByZWYkMS5vcmRlcjsgaWYgKCBvcmRlciA9PT0gdm9pZCAwICkgb3JkZXIgPSAnYXNjJzsKCiAgICAgICAgcmV0dXJuIGlzVW5kZWZpbmVkKHNvcnQpCiAgICAgICAgICAgID8gZ3JvdXAgaW4gc3RhdGVGaWx0ZXIgJiYgZmlsdGVyID09PSBzdGF0ZUZpbHRlcltncm91cF0KICAgICAgICAgICAgICAgIHx8ICFmaWx0ZXIgJiYgZ3JvdXAgJiYgIShncm91cCBpbiBzdGF0ZUZpbHRlcikgJiYgIXN0YXRlRmlsdGVyWycnXQogICAgICAgICAgICA6IHN0YXRlU29ydCA9PT0gc29ydCAmJiBzdGF0ZU9yZGVyID09PSBvcmRlcjsKICAgIH0KCiAgICBmdW5jdGlvbiBpc0VxdWFsTGlzdChsaXN0QSwgbGlzdEIpIHsKICAgICAgICByZXR1cm4gbGlzdEEubGVuZ3RoID09PSBsaXN0Qi5sZW5ndGgKICAgICAgICAgICAgJiYgbGlzdEEuZXZlcnkoZnVuY3Rpb24gKGVsKSB7IHJldHVybiB+bGlzdEIuaW5kZXhPZihlbCk7IH0pOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldFNlbGVjdG9yKHJlZikgewogICAgICAgIHZhciBmaWx0ZXIgPSByZWYuZmlsdGVyOwoKICAgICAgICB2YXIgc2VsZWN0b3IgPSAnJzsKICAgICAgICBlYWNoKGZpbHRlciwgZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiBzZWxlY3RvciArPSB2YWx1ZSB8fCAnJzsgfSk7CiAgICAgICAgcmV0dXJuIHNlbGVjdG9yOwogICAgfQoKICAgIGZ1bmN0aW9uIHNvcnRJdGVtcyhub2Rlcywgc29ydCwgb3JkZXIpIHsKICAgICAgICByZXR1cm4gYXNzaWduKFtdLCBub2Rlcykuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gZGF0YShhLCBzb3J0KS5sb2NhbGVDb21wYXJlKGRhdGEoYiwgc29ydCksIHVuZGVmaW5lZCwge251bWVyaWM6IHRydWV9KSAqIChvcmRlciA9PT0gJ2FzYycgfHwgLTEpOyB9KTsKICAgIH0KCiAgICB2YXIgQW5pbWF0aW9ucyA9IHsKCiAgICAgICAgc2xpZGU6IHsKCiAgICAgICAgICAgIHNob3c6IGZ1bmN0aW9uKGRpcikgewogICAgICAgICAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgICAgICAgICB7dHJhbnNmb3JtOiB0cmFuc2xhdGUoZGlyICogLTEwMCl9LAogICAgICAgICAgICAgICAgICAgIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZSgpfQogICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHBlcmNlbnQ6IGZ1bmN0aW9uKGN1cnJlbnQpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc2xhdGVkKGN1cnJlbnQpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgdHJhbnNsYXRlOiBmdW5jdGlvbihwZXJjZW50LCBkaXIpIHsKICAgICAgICAgICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICAgICAgICAge3RyYW5zZm9ybTogdHJhbnNsYXRlKGRpciAqIC0xMDAgKiBwZXJjZW50KX0sCiAgICAgICAgICAgICAgICAgICAge3RyYW5zZm9ybTogdHJhbnNsYXRlKGRpciAqIDEwMCAqICgxIC0gcGVyY2VudCkpfQogICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgfTsKCiAgICBmdW5jdGlvbiB0cmFuc2xhdGVkKGVsKSB7CiAgICAgICAgcmV0dXJuIE1hdGguYWJzKGNzcyhlbCwgJ3RyYW5zZm9ybScpLnNwbGl0KCcsJylbNF0gLyBlbC5vZmZzZXRXaWR0aCkgfHwgMDsKICAgIH0KCiAgICBmdW5jdGlvbiB0cmFuc2xhdGUodmFsdWUsIHVuaXQpIHsKICAgICAgICBpZiAoIHZhbHVlID09PSB2b2lkIDAgKSB2YWx1ZSA9IDA7CiAgICAgICAgaWYgKCB1bml0ID09PSB2b2lkIDAgKSB1bml0ID0gJyUnOwoKICAgICAgICB2YWx1ZSArPSB2YWx1ZSA/IHVuaXQgOiAnJzsKICAgICAgICByZXR1cm4gaXNJRSA/ICgidHJhbnNsYXRlWCgiICsgdmFsdWUgKyAiKSIpIDogKCJ0cmFuc2xhdGUzZCgiICsgdmFsdWUgKyAiLCAwLCAwKSIpOyAvLyBjdXJyZW50bHkgbm90IHRyYW5zbGF0ZTNkIGluIElFLCB0cmFuc2xhdGUzZCB3aXRoaW4gdHJhbnNsYXRlM2QgZG9lcyBub3Qgd29yayB3aGlsZSB0cmFuc2l0aW9uaW5nCiAgICB9CgogICAgZnVuY3Rpb24gc2NhbGUzZCh2YWx1ZSkgewogICAgICAgIHJldHVybiAoInNjYWxlM2QoIiArIHZhbHVlICsgIiwgIiArIHZhbHVlICsgIiwgMSkiKTsKICAgIH0KCiAgICB2YXIgQW5pbWF0aW9ucyQxID0gYXNzaWduKHt9LCBBbmltYXRpb25zLCB7CgogICAgICAgIGZhZGU6IHsKCiAgICAgICAgICAgIHNob3c6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgICAgICAgICB7b3BhY2l0eTogMH0sCiAgICAgICAgICAgICAgICAgICAge29wYWNpdHk6IDF9CiAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgcGVyY2VudDogZnVuY3Rpb24oY3VycmVudCkgewogICAgICAgICAgICAgICAgcmV0dXJuIDEgLSBjc3MoY3VycmVudCwgJ29wYWNpdHknKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHRyYW5zbGF0ZTogZnVuY3Rpb24ocGVyY2VudCkgewogICAgICAgICAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgICAgICAgICB7b3BhY2l0eTogMSAtIHBlcmNlbnR9LAogICAgICAgICAgICAgICAgICAgIHtvcGFjaXR5OiBwZXJjZW50fQogICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgfQoKICAgICAgICB9LAoKICAgICAgICBzY2FsZTogewoKICAgICAgICAgICAgc2hvdzogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAgICAgICAgIHtvcGFjaXR5OiAwLCB0cmFuc2Zvcm06IHNjYWxlM2QoMSAtIC4yKX0sCiAgICAgICAgICAgICAgICAgICAge29wYWNpdHk6IDEsIHRyYW5zZm9ybTogc2NhbGUzZCgxKX0KICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBwZXJjZW50OiBmdW5jdGlvbihjdXJyZW50KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gMSAtIGNzcyhjdXJyZW50LCAnb3BhY2l0eScpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgdHJhbnNsYXRlOiBmdW5jdGlvbihwZXJjZW50KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAgICAgICAgIHtvcGFjaXR5OiAxIC0gcGVyY2VudCwgdHJhbnNmb3JtOiBzY2FsZTNkKDEgLSAuMiAqIHBlcmNlbnQpfSwKICAgICAgICAgICAgICAgICAgICB7b3BhY2l0eTogcGVyY2VudCwgdHJhbnNmb3JtOiBzY2FsZTNkKDEgLSAuMiArIC4yICogcGVyY2VudCl9CiAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICB9KTsKCiAgICBmdW5jdGlvbiBUcmFuc2l0aW9uZXIocHJldiwgbmV4dCwgZGlyLCByZWYpIHsKICAgICAgICB2YXIgYW5pbWF0aW9uID0gcmVmLmFuaW1hdGlvbjsKICAgICAgICB2YXIgZWFzaW5nID0gcmVmLmVhc2luZzsKCgogICAgICAgIHZhciBwZXJjZW50ID0gYW5pbWF0aW9uLnBlcmNlbnQ7CiAgICAgICAgdmFyIHRyYW5zbGF0ZSA9IGFuaW1hdGlvbi50cmFuc2xhdGU7CiAgICAgICAgdmFyIHNob3cgPSBhbmltYXRpb24uc2hvdzsgaWYgKCBzaG93ID09PSB2b2lkIDAgKSBzaG93ID0gbm9vcDsKICAgICAgICB2YXIgcHJvcHMgPSBzaG93KGRpcik7CiAgICAgICAgdmFyIGRlZmVycmVkID0gbmV3IERlZmVycmVkKCk7CgogICAgICAgIHJldHVybiB7CgogICAgICAgICAgICBkaXI6IGRpciwKCiAgICAgICAgICAgIHNob3c6IGZ1bmN0aW9uKGR1cmF0aW9uLCBwZXJjZW50LCBsaW5lYXIpIHsKICAgICAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzOwogICAgICAgICAgICAgICAgaWYgKCBwZXJjZW50ID09PSB2b2lkIDAgKSBwZXJjZW50ID0gMDsKCgogICAgICAgICAgICAgICAgdmFyIHRpbWluZyA9IGxpbmVhciA/ICdsaW5lYXInIDogZWFzaW5nOwogICAgICAgICAgICAgICAgZHVyYXRpb24gLT0gTWF0aC5yb3VuZChkdXJhdGlvbiAqIGNsYW1wKHBlcmNlbnQsIC0xLCAxKSk7CgogICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUocGVyY2VudCk7CgogICAgICAgICAgICAgICAgdHJpZ2dlclVwZGF0ZShuZXh0LCAnaXRlbWluJywge3BlcmNlbnQ6IHBlcmNlbnQsIGR1cmF0aW9uOiBkdXJhdGlvbiwgdGltaW5nOiB0aW1pbmcsIGRpcjogZGlyfSk7CiAgICAgICAgICAgICAgICB0cmlnZ2VyVXBkYXRlKHByZXYsICdpdGVtb3V0Jywge3BlcmNlbnQ6IDEgLSBwZXJjZW50LCBkdXJhdGlvbjogZHVyYXRpb24sIHRpbWluZzogdGltaW5nLCBkaXI6IGRpcn0pOwoKICAgICAgICAgICAgICAgIFByb21pc2UuYWxsKFsKICAgICAgICAgICAgICAgICAgICBUcmFuc2l0aW9uLnN0YXJ0KG5leHQsIHByb3BzWzFdLCBkdXJhdGlvbiwgdGltaW5nKSwKICAgICAgICAgICAgICAgICAgICBUcmFuc2l0aW9uLnN0YXJ0KHByZXYsIHByb3BzWzBdLCBkdXJhdGlvbiwgdGltaW5nKQogICAgICAgICAgICAgICAgXSkudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcyQxLnJlc2V0KCk7CiAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZSgpOwogICAgICAgICAgICAgICAgfSwgbm9vcCk7CgogICAgICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVkLnByb21pc2U7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBzdG9wOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiBUcmFuc2l0aW9uLnN0b3AoW25leHQsIHByZXZdKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGNhbmNlbDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBUcmFuc2l0aW9uLmNhbmNlbChbbmV4dCwgcHJldl0pOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBwcm9wc1swXSkgewogICAgICAgICAgICAgICAgICAgIGNzcyhbbmV4dCwgcHJldl0sIHByb3AsICcnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGZvcndhcmQ6IGZ1bmN0aW9uKGR1cmF0aW9uLCBwZXJjZW50KSB7CiAgICAgICAgICAgICAgICBpZiAoIHBlcmNlbnQgPT09IHZvaWQgMCApIHBlcmNlbnQgPSB0aGlzLnBlcmNlbnQoKTsKCiAgICAgICAgICAgICAgICBUcmFuc2l0aW9uLmNhbmNlbChbbmV4dCwgcHJldl0pOwogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hvdyhkdXJhdGlvbiwgcGVyY2VudCwgdHJ1ZSk7CgogICAgICAgICAgICB9LAoKICAgICAgICAgICAgdHJhbnNsYXRlOiBmdW5jdGlvbihwZXJjZW50KSB7CgogICAgICAgICAgICAgICAgdGhpcy5yZXNldCgpOwoKICAgICAgICAgICAgICAgIHZhciBwcm9wcyA9IHRyYW5zbGF0ZShwZXJjZW50LCBkaXIpOwogICAgICAgICAgICAgICAgY3NzKG5leHQsIHByb3BzWzFdKTsKICAgICAgICAgICAgICAgIGNzcyhwcmV2LCBwcm9wc1swXSk7CiAgICAgICAgICAgICAgICB0cmlnZ2VyVXBkYXRlKG5leHQsICdpdGVtdHJhbnNsYXRlaW4nLCB7cGVyY2VudDogcGVyY2VudCwgZGlyOiBkaXJ9KTsKICAgICAgICAgICAgICAgIHRyaWdnZXJVcGRhdGUocHJldiwgJ2l0ZW10cmFuc2xhdGVvdXQnLCB7cGVyY2VudDogMSAtIHBlcmNlbnQsIGRpcjogZGlyfSk7CgogICAgICAgICAgICB9LAoKICAgICAgICAgICAgcGVyY2VudDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gcGVyY2VudChwcmV2IHx8IG5leHQsIG5leHQsIGRpcik7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBnZXREaXN0YW5jZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gcHJldiAmJiBwcmV2Lm9mZnNldFdpZHRoOwogICAgICAgICAgICB9CgogICAgICAgIH07CgogICAgfQoKICAgIGZ1bmN0aW9uIHRyaWdnZXJVcGRhdGUoZWwsIHR5cGUsIGRhdGEpIHsKICAgICAgICB0cmlnZ2VyKGVsLCBjcmVhdGVFdmVudCh0eXBlLCBmYWxzZSwgZmFsc2UsIGRhdGEpKTsKICAgIH0KCiAgICB2YXIgU2xpZGVyQXV0b3BsYXkgPSB7CgogICAgICAgIHByb3BzOiB7CiAgICAgICAgICAgIGF1dG9wbGF5OiBCb29sZWFuLAogICAgICAgICAgICBhdXRvcGxheUludGVydmFsOiBOdW1iZXIsCiAgICAgICAgICAgIHBhdXNlT25Ib3ZlcjogQm9vbGVhbgogICAgICAgIH0sCgogICAgICAgIGRhdGE6IHsKICAgICAgICAgICAgYXV0b3BsYXk6IGZhbHNlLAogICAgICAgICAgICBhdXRvcGxheUludGVydmFsOiA3MDAwLAogICAgICAgICAgICBwYXVzZU9uSG92ZXI6IHRydWUKICAgICAgICB9LAoKICAgICAgICBjb25uZWN0ZWQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB0aGlzLmF1dG9wbGF5ICYmIHRoaXMuc3RhcnRBdXRvcGxheSgpOwogICAgICAgIH0sCgogICAgICAgIGRpc2Nvbm5lY3RlZDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHRoaXMuc3RvcEF1dG9wbGF5KCk7CiAgICAgICAgfSwKCiAgICAgICAgdXBkYXRlOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgYXR0cih0aGlzLnNsaWRlcywgJ3RhYmluZGV4JywgJy0xJyk7CiAgICAgICAgfSwKCiAgICAgICAgZXZlbnRzOiBbCgogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgbmFtZTogJ3Zpc2liaWxpdHljaGFuZ2UnLAoKICAgICAgICAgICAgICAgIGVsOiBkb2N1bWVudCwKCiAgICAgICAgICAgICAgICBmaWx0ZXI6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmF1dG9wbGF5OwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnQuaGlkZGVuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcEF1dG9wbGF5KCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydEF1dG9wbGF5KCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfQoKICAgICAgICBdLAoKICAgICAgICBtZXRob2RzOiB7CgogICAgICAgICAgICBzdGFydEF1dG9wbGF5OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzOwoKCiAgICAgICAgICAgICAgICB0aGlzLnN0b3BBdXRvcGxheSgpOwoKICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgKICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7IHJldHVybiAoIXRoaXMkMS5kcmFnZ2FibGUgfHwgISQoJzpmb2N1cycsIHRoaXMkMS4kZWwpKQogICAgICAgICAgICAgICAgICAgICAgICAmJiAoIXRoaXMkMS5wYXVzZU9uSG92ZXIgfHwgIW1hdGNoZXModGhpcyQxLiRlbCwgJzpob3ZlcicpKQogICAgICAgICAgICAgICAgICAgICAgICAmJiAhdGhpcyQxLnN0YWNrLmxlbmd0aAogICAgICAgICAgICAgICAgICAgICAgICAmJiB0aGlzJDEuc2hvdygnbmV4dCcpOyB9LAogICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0b3BsYXlJbnRlcnZhbAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBzdG9wQXV0b3BsYXk6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdGhpcy5pbnRlcnZhbCAmJiBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpOwogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICB9OwoKICAgIHZhciBTbGlkZXJEcmFnID0gewoKICAgICAgICBwcm9wczogewogICAgICAgICAgICBkcmFnZ2FibGU6IEJvb2xlYW4KICAgICAgICB9LAoKICAgICAgICBkYXRhOiB7CiAgICAgICAgICAgIGRyYWdnYWJsZTogdHJ1ZSwKICAgICAgICAgICAgdGhyZXNob2xkOiAxMAogICAgICAgIH0sCgogICAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpczsKCgogICAgICAgICAgICBbJ3N0YXJ0JywgJ21vdmUnLCAnZW5kJ10uZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7CgogICAgICAgICAgICAgICAgdmFyIGZuID0gdGhpcyQxW2tleV07CiAgICAgICAgICAgICAgICB0aGlzJDFba2V5XSA9IGZ1bmN0aW9uIChlKSB7CgogICAgICAgICAgICAgICAgICAgIHZhciBwb3MgPSBnZXRFdmVudFBvcyhlKS54ICogKGlzUnRsID8gLTEgOiAxKTsKCiAgICAgICAgICAgICAgICAgICAgdGhpcyQxLnByZXZQb3MgPSBwb3MgIT09IHRoaXMkMS5wb3MgPyB0aGlzJDEucG9zIDogdGhpcyQxLnByZXZQb3M7CiAgICAgICAgICAgICAgICAgICAgdGhpcyQxLnBvcyA9IHBvczsKCiAgICAgICAgICAgICAgICAgICAgZm4oZSk7CiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgfSk7CgogICAgICAgIH0sCgogICAgICAgIGV2ZW50czogWwoKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgIG5hbWU6IHBvaW50ZXJEb3duLAoKICAgICAgICAgICAgICAgIGRlbGVnYXRlOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxTbGlkZXM7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uKGUpIHsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRyYWdnYWJsZQogICAgICAgICAgICAgICAgICAgICAgICB8fCAhaXNUb3VjaChlKSAmJiBoYXNUZXh0Tm9kZXNPbmx5KGUudGFyZ2V0KQogICAgICAgICAgICAgICAgICAgICAgICB8fCBlLmJ1dHRvbiA+IDAKICAgICAgICAgICAgICAgICAgICAgICAgfHwgdGhpcy5sZW5ndGggPCAyCiAgICAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnQoZSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9LAoKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIGlPUyAxMSBidWc6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODQyNTAKCiAgICAgICAgICAgICAgICBuYW1lOiAndG91Y2htb3ZlJywKICAgICAgICAgICAgICAgIHBhc3NpdmU6IGZhbHNlLAogICAgICAgICAgICAgICAgaGFuZGxlcjogJ21vdmUnLAogICAgICAgICAgICAgICAgZGVsZWdhdGU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbFNsaWRlczsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBuYW1lOiAnZHJhZ3N0YXJ0JywKCiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgIF0sCgogICAgICAgIG1ldGhvZHM6IHsKCiAgICAgICAgICAgIHN0YXJ0OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzOwoKCiAgICAgICAgICAgICAgICB0aGlzLmRyYWcgPSB0aGlzLnBvczsKCiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdHJhbnNpdGlvbmVyKSB7CgogICAgICAgICAgICAgICAgICAgIHRoaXMucGVyY2VudCA9IHRoaXMuX3RyYW5zaXRpb25lci5wZXJjZW50KCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmFnICs9IHRoaXMuX3RyYW5zaXRpb25lci5nZXREaXN0YW5jZSgpICogdGhpcy5wZXJjZW50ICogdGhpcy5kaXI7CgogICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zaXRpb25lci5jYW5jZWwoKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2l0aW9uZXIudHJhbnNsYXRlKHRoaXMucGVyY2VudCk7CgogICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhZ2dpbmcgPSB0cnVlOwoKICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YWNrID0gW107CgogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXZJbmRleCA9IHRoaXMuaW5kZXg7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gU2VlIGFib3ZlIHdvcmthcm91bmQgbm90aWNlCiAgICAgICAgICAgICAgICB2YXIgb2ZmID0gcG9pbnRlck1vdmUgIT09ICd0b3VjaG1vdmUnCiAgICAgICAgICAgICAgICAgICAgPyBvbihkb2N1bWVudCwgcG9pbnRlck1vdmUsIHRoaXMubW92ZSwge3Bhc3NpdmU6IGZhbHNlfSkKICAgICAgICAgICAgICAgICAgICA6IG5vb3A7CiAgICAgICAgICAgICAgICB0aGlzLnVuYmluZE1vdmUgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgb2ZmKCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcyQxLnVuYmluZE1vdmUgPSBudWxsOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIG9uKHdpbmRvdywgJ3Njcm9sbCcsIHRoaXMudW5iaW5kTW92ZSk7CiAgICAgICAgICAgICAgICBvbihkb2N1bWVudCwgcG9pbnRlclVwLCB0aGlzLmVuZCwgdHJ1ZSk7CgogICAgICAgICAgICAgICAgY3NzKHRoaXMubGlzdCwgJ3VzZXJTZWxlY3QnLCAnbm9uZScpOwoKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIG1vdmU6IGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzOwoKCiAgICAgICAgICAgICAgICAvLyBTZWUgYWJvdmUgd29ya2Fyb3VuZCBub3RpY2UKICAgICAgICAgICAgICAgIGlmICghdGhpcy51bmJpbmRNb3ZlKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBkaXN0YW5jZSA9IHRoaXMucG9zIC0gdGhpcy5kcmFnOwoKICAgICAgICAgICAgICAgIGlmIChkaXN0YW5jZSA9PT0gMCB8fCB0aGlzLnByZXZQb3MgPT09IHRoaXMucG9zIHx8ICF0aGlzLmRyYWdnaW5nICYmIE1hdGguYWJzKGRpc3RhbmNlKSA8IHRoaXMudGhyZXNob2xkKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGNzcyh0aGlzLmxpc3QsICdwb2ludGVyRXZlbnRzJywgJ25vbmUnKTsKCiAgICAgICAgICAgICAgICBlLmNhbmNlbGFibGUgJiYgZS5wcmV2ZW50RGVmYXVsdCgpOwoKICAgICAgICAgICAgICAgIHRoaXMuZHJhZ2dpbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgdGhpcy5kaXIgPSAoZGlzdGFuY2UgPCAwID8gMSA6IC0xKTsKCiAgICAgICAgICAgICAgICB2YXIgcmVmID0gdGhpczsKICAgICAgICAgICAgICAgIHZhciBzbGlkZXMgPSByZWYuc2xpZGVzOwogICAgICAgICAgICAgICAgdmFyIHJlZiQxID0gdGhpczsKICAgICAgICAgICAgICAgIHZhciBwcmV2SW5kZXggPSByZWYkMS5wcmV2SW5kZXg7CiAgICAgICAgICAgICAgICB2YXIgZGlzID0gTWF0aC5hYnMoZGlzdGFuY2UpOwogICAgICAgICAgICAgICAgdmFyIG5leHRJbmRleCA9IHRoaXMuZ2V0SW5kZXgocHJldkluZGV4ICsgdGhpcy5kaXIsIHByZXZJbmRleCk7CiAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSB0aGlzLl9nZXREaXN0YW5jZShwcmV2SW5kZXgsIG5leHRJbmRleCkgfHwgc2xpZGVzW3ByZXZJbmRleF0ub2Zmc2V0V2lkdGg7CgogICAgICAgICAgICAgICAgd2hpbGUgKG5leHRJbmRleCAhPT0gcHJldkluZGV4ICYmIGRpcyA+IHdpZHRoKSB7CgogICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhZyAtPSB3aWR0aCAqIHRoaXMuZGlyOwoKICAgICAgICAgICAgICAgICAgICBwcmV2SW5kZXggPSBuZXh0SW5kZXg7CiAgICAgICAgICAgICAgICAgICAgZGlzIC09IHdpZHRoOwogICAgICAgICAgICAgICAgICAgIG5leHRJbmRleCA9IHRoaXMuZ2V0SW5kZXgocHJldkluZGV4ICsgdGhpcy5kaXIsIHByZXZJbmRleCk7CiAgICAgICAgICAgICAgICAgICAgd2lkdGggPSB0aGlzLl9nZXREaXN0YW5jZShwcmV2SW5kZXgsIG5leHRJbmRleCkgfHwgc2xpZGVzW3ByZXZJbmRleF0ub2Zmc2V0V2lkdGg7CgogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRoaXMucGVyY2VudCA9IGRpcyAvIHdpZHRoOwoKICAgICAgICAgICAgICAgIHZhciBwcmV2ID0gc2xpZGVzW3ByZXZJbmRleF07CiAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IHNsaWRlc1tuZXh0SW5kZXhdOwogICAgICAgICAgICAgICAgdmFyIGNoYW5nZWQgPSB0aGlzLmluZGV4ICE9PSBuZXh0SW5kZXg7CiAgICAgICAgICAgICAgICB2YXIgZWRnZSA9IHByZXZJbmRleCA9PT0gbmV4dEluZGV4OwoKICAgICAgICAgICAgICAgIHZhciBpdGVtU2hvd247CgogICAgICAgICAgICAgICAgW3RoaXMuaW5kZXgsIHRoaXMucHJldkluZGV4XS5maWx0ZXIoZnVuY3Rpb24gKGkpIHsgcmV0dXJuICFpbmNsdWRlcyhbbmV4dEluZGV4LCBwcmV2SW5kZXhdLCBpKTsgfSkuZm9yRWFjaChmdW5jdGlvbiAoaSkgewogICAgICAgICAgICAgICAgICAgIHRyaWdnZXIoc2xpZGVzW2ldLCAnaXRlbWhpZGRlbicsIFt0aGlzJDFdKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGVkZ2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVNob3duID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyQxLnByZXZJbmRleCA9IHByZXZJbmRleDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXggPT09IHByZXZJbmRleCAmJiB0aGlzLnByZXZJbmRleCAhPT0gcHJldkluZGV4IHx8IGl0ZW1TaG93bikgewogICAgICAgICAgICAgICAgICAgIHRyaWdnZXIoc2xpZGVzW3RoaXMuaW5kZXhdLCAnaXRlbXNob3duJywgW3RoaXNdKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoY2hhbmdlZCkgewogICAgICAgICAgICAgICAgICAgIHRoaXMucHJldkluZGV4ID0gcHJldkluZGV4OwogICAgICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSBuZXh0SW5kZXg7CgogICAgICAgICAgICAgICAgICAgICFlZGdlICYmIHRyaWdnZXIocHJldiwgJ2JlZm9yZWl0ZW1oaWRlJywgW3RoaXNdKTsKICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKG5leHQsICdiZWZvcmVpdGVtc2hvdycsIFt0aGlzXSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNpdGlvbmVyID0gdGhpcy5fdHJhbnNsYXRlKE1hdGguYWJzKHRoaXMucGVyY2VudCksIHByZXYsICFlZGdlICYmIG5leHQpOwoKICAgICAgICAgICAgICAgIGlmIChjaGFuZ2VkKSB7CiAgICAgICAgICAgICAgICAgICAgIWVkZ2UgJiYgdHJpZ2dlcihwcmV2LCAnaXRlbWhpZGUnLCBbdGhpc10pOwogICAgICAgICAgICAgICAgICAgIHRyaWdnZXIobmV4dCwgJ2l0ZW1zaG93JywgW3RoaXNdKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBlbmQ6IGZ1bmN0aW9uKCkgewoKICAgICAgICAgICAgICAgIG9mZih3aW5kb3csICdzY3JvbGwnLCB0aGlzLnVuYmluZE1vdmUpOwogICAgICAgICAgICAgICAgdGhpcy51bmJpbmRNb3ZlICYmIHRoaXMudW5iaW5kTW92ZSgpOwogICAgICAgICAgICAgICAgb2ZmKGRvY3VtZW50LCBwb2ludGVyVXAsIHRoaXMuZW5kLCB0cnVlKTsKCiAgICAgICAgICAgICAgICBpZiAodGhpcy5kcmFnZ2luZykgewoKICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYWdnaW5nID0gbnVsbDsKCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXggPT09IHRoaXMucHJldkluZGV4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVyY2VudCA9IDEgLSB0aGlzLnBlcmNlbnQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlyICo9IC0xOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaG93KGZhbHNlLCB0aGlzLmluZGV4LCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNpdGlvbmVyID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpckNoYW5nZSA9IChpc1J0bCA/IHRoaXMuZGlyICogKGlzUnRsID8gMSA6IC0xKSA6IHRoaXMuZGlyKSA8IDAgPT09IHRoaXMucHJldlBvcyA+IHRoaXMucG9zOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gZGlyQ2hhbmdlID8gdGhpcy5pbmRleCA6IHRoaXMucHJldkluZGV4OwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpckNoYW5nZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJjZW50ID0gMSAtIHRoaXMucGVyY2VudDsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93KHRoaXMuZGlyID4gMCAmJiAhZGlyQ2hhbmdlIHx8IHRoaXMuZGlyIDwgMCAmJiBkaXJDaGFuZ2UgPyAnbmV4dCcgOiAncHJldmlvdXMnLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGNzcyh0aGlzLmxpc3QsIHt1c2VyU2VsZWN0OiAnJywgcG9pbnRlckV2ZW50czogJyd9KTsKCiAgICAgICAgICAgICAgICB0aGlzLmRyYWcKICAgICAgICAgICAgICAgICAgICA9IHRoaXMucGVyY2VudAogICAgICAgICAgICAgICAgICAgID0gbnVsbDsKCiAgICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgIH07CgogICAgZnVuY3Rpb24gaGFzVGV4dE5vZGVzT25seShlbCkgewogICAgICAgIHJldHVybiAhZWwuY2hpbGRyZW4ubGVuZ3RoICYmIGVsLmNoaWxkTm9kZXMubGVuZ3RoOwogICAgfQoKICAgIHZhciBTbGlkZXJOYXYgPSB7CgogICAgICAgIGRhdGE6IHsKICAgICAgICAgICAgc2VsTmF2OiBmYWxzZQogICAgICAgIH0sCgogICAgICAgIGNvbXB1dGVkOiB7CgogICAgICAgICAgICBuYXY6IGZ1bmN0aW9uKHJlZiwgJGVsKSB7CiAgICAgICAgICAgICAgICB2YXIgc2VsTmF2ID0gcmVmLnNlbE5hdjsKCiAgICAgICAgICAgICAgICByZXR1cm4gJChzZWxOYXYsICRlbCk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBzZWxOYXZJdGVtOiBmdW5jdGlvbihyZWYpIHsKICAgICAgICAgICAgICAgIHZhciBhdHRySXRlbSA9IHJlZi5hdHRySXRlbTsKCiAgICAgICAgICAgICAgICByZXR1cm4gKCJbIiArIGF0dHJJdGVtICsgIl0sW2RhdGEtIiArIGF0dHJJdGVtICsgIl0iKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIG5hdkl0ZW1zOiBmdW5jdGlvbihfLCAkZWwpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkJCh0aGlzLnNlbE5hdkl0ZW0sICRlbCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgfSwKCiAgICAgICAgdXBkYXRlOiB7CgogICAgICAgICAgICB3cml0ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpczsKCgogICAgICAgICAgICAgICAgaWYgKHRoaXMubmF2ICYmIHRoaXMubGVuZ3RoICE9PSB0aGlzLm5hdi5jaGlsZHJlbi5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICBodG1sKHRoaXMubmF2LCB0aGlzLnNsaWRlcy5tYXAoZnVuY3Rpb24gKF8sIGkpIHsgcmV0dXJuICgiPGxpICIgKyAodGhpcyQxLmF0dHJJdGVtKSArICI9XCIiICsgaSArICJcIj48YSBocmVmPVwiI1wiPjwvYT48L2xpPiIpOyB9KS5qb2luKCcnKSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdG9nZ2xlQ2xhc3MoJCQodGhpcy5zZWxOYXZJdGVtLCB0aGlzLiRlbCkuY29uY2F0KHRoaXMubmF2KSwgJ3VrLWhpZGRlbicsICF0aGlzLm1heEluZGV4KTsKCiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZU5hdigpOwoKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGV2ZW50czogWydyZXNpemUnXQoKICAgICAgICB9LAoKICAgICAgICBldmVudHM6IFsKCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICBuYW1lOiAnY2xpY2snLAoKICAgICAgICAgICAgICAgIGRlbGVnYXRlOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxOYXZJdGVtOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvdyhkYXRhKGUuY3VycmVudCwgdGhpcy5hdHRySXRlbSkpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICBuYW1lOiAnaXRlbXNob3cnLAogICAgICAgICAgICAgICAgaGFuZGxlcjogJ3VwZGF0ZU5hdicKCiAgICAgICAgICAgIH0KCiAgICAgICAgXSwKCiAgICAgICAgbWV0aG9kczogewoKICAgICAgICAgICAgdXBkYXRlTmF2OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzOwoKCiAgICAgICAgICAgICAgICB2YXIgaSA9IHRoaXMuZ2V0VmFsaWRJbmRleCgpOwogICAgICAgICAgICAgICAgdGhpcy5uYXZJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgewoKICAgICAgICAgICAgICAgICAgICB2YXIgY21kID0gZGF0YShlbCwgdGhpcyQxLmF0dHJJdGVtKTsKCiAgICAgICAgICAgICAgICAgICAgdG9nZ2xlQ2xhc3MoZWwsIHRoaXMkMS5jbHNBY3RpdmUsIHRvTnVtYmVyKGNtZCkgPT09IGkpOwogICAgICAgICAgICAgICAgICAgIHRvZ2dsZUNsYXNzKGVsLCAndWstaW52aXNpYmxlJywgdGhpcyQxLmZpbml0ZSAmJiAoY21kID09PSAncHJldmlvdXMnICYmIGkgPT09IDAgfHwgY21kID09PSAnbmV4dCcgJiYgaSA+PSB0aGlzJDEubWF4SW5kZXgpKTsKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgfTsKCiAgICB2YXIgU2xpZGVyID0gewoKICAgICAgICBtaXhpbnM6IFtTbGlkZXJBdXRvcGxheSwgU2xpZGVyRHJhZywgU2xpZGVyTmF2XSwKCiAgICAgICAgcHJvcHM6IHsKICAgICAgICAgICAgY2xzQWN0aXZhdGVkOiBCb29sZWFuLAogICAgICAgICAgICBlYXNpbmc6IFN0cmluZywKICAgICAgICAgICAgaW5kZXg6IE51bWJlciwKICAgICAgICAgICAgZmluaXRlOiBCb29sZWFuLAogICAgICAgICAgICB2ZWxvY2l0eTogTnVtYmVyCiAgICAgICAgfSwKCiAgICAgICAgZGF0YTogZnVuY3Rpb24gKCkgeyByZXR1cm4gKHsKICAgICAgICAgICAgZWFzaW5nOiAnZWFzZScsCiAgICAgICAgICAgIGZpbml0ZTogZmFsc2UsCiAgICAgICAgICAgIHZlbG9jaXR5OiAxLAogICAgICAgICAgICBpbmRleDogMCwKICAgICAgICAgICAgcHJldkluZGV4OiAtMSwKICAgICAgICAgICAgc3RhY2s6IFtdLAogICAgICAgICAgICBwZXJjZW50OiAwLAogICAgICAgICAgICBjbHNBY3RpdmU6ICd1ay1hY3RpdmUnLAogICAgICAgICAgICBjbHNBY3RpdmF0ZWQ6IGZhbHNlLAogICAgICAgICAgICBUcmFuc2l0aW9uZXI6IGZhbHNlLAogICAgICAgICAgICB0cmFuc2l0aW9uT3B0aW9uczoge30KICAgICAgICB9KTsgfSwKCiAgICAgICAgY29ubmVjdGVkOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdGhpcy5wcmV2SW5kZXggPSAtMTsKICAgICAgICAgICAgdGhpcy5pbmRleCA9IHRoaXMuZ2V0VmFsaWRJbmRleCh0aGlzLmluZGV4KTsKICAgICAgICAgICAgdGhpcy5zdGFjayA9IFtdOwogICAgICAgIH0sCgogICAgICAgIGRpc2Nvbm5lY3RlZDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHJlbW92ZUNsYXNzKHRoaXMuc2xpZGVzLCB0aGlzLmNsc0FjdGl2ZSk7CiAgICAgICAgfSwKCiAgICAgICAgY29tcHV0ZWQ6IHsKCiAgICAgICAgICAgIGR1cmF0aW9uOiBmdW5jdGlvbihyZWYsICRlbCkgewogICAgICAgICAgICAgICAgdmFyIHZlbG9jaXR5ID0gcmVmLnZlbG9jaXR5OwoKICAgICAgICAgICAgICAgIHJldHVybiBzcGVlZFVwKCRlbC5vZmZzZXRXaWR0aCAvIHZlbG9jaXR5KTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGxpc3Q6IGZ1bmN0aW9uKHJlZiwgJGVsKSB7CiAgICAgICAgICAgICAgICB2YXIgc2VsTGlzdCA9IHJlZi5zZWxMaXN0OwoKICAgICAgICAgICAgICAgIHJldHVybiAkKHNlbExpc3QsICRlbCk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBtYXhJbmRleDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sZW5ndGggLSAxOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgc2VsU2xpZGVzOiBmdW5jdGlvbihyZWYpIHsKICAgICAgICAgICAgICAgIHZhciBzZWxMaXN0ID0gcmVmLnNlbExpc3Q7CgogICAgICAgICAgICAgICAgcmV0dXJuIChzZWxMaXN0ICsgIiA+ICoiKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHNsaWRlczogewoKICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvTm9kZXModGhpcy5saXN0LmNoaWxkcmVuKTsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgd2F0Y2g6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuJHJlc2V0KCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9LAoKICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNsaWRlcy5sZW5ndGg7CiAgICAgICAgICAgIH0KCiAgICAgICAgfSwKCiAgICAgICAgZXZlbnRzOiB7CgogICAgICAgICAgICBpdGVtc2hvd246IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdGhpcy4kdXBkYXRlKHRoaXMubGlzdCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgfSwKCiAgICAgICAgbWV0aG9kczogewoKICAgICAgICAgICAgc2hvdzogZnVuY3Rpb24oaW5kZXgsIGZvcmNlKSB7CiAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpczsKICAgICAgICAgICAgICAgIGlmICggZm9yY2UgPT09IHZvaWQgMCApIGZvcmNlID0gZmFsc2U7CgoKICAgICAgICAgICAgICAgIGlmICh0aGlzLmRyYWdnaW5nIHx8ICF0aGlzLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgcmVmID0gdGhpczsKICAgICAgICAgICAgICAgIHZhciBzdGFjayA9IHJlZi5zdGFjazsKICAgICAgICAgICAgICAgIHZhciBxdWV1ZUluZGV4ID0gZm9yY2UgPyAwIDogc3RhY2subGVuZ3RoOwogICAgICAgICAgICAgICAgdmFyIHJlc2V0ID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZShxdWV1ZUluZGV4LCAxKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzJDEuc2hvdyhzdGFjay5zaGlmdCgpLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIHN0YWNrW2ZvcmNlID8gJ3Vuc2hpZnQnIDogJ3B1c2gnXShpbmRleCk7CgogICAgICAgICAgICAgICAgaWYgKCFmb3JjZSAmJiBzdGFjay5sZW5ndGggPiAxKSB7CgogICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPT09IDIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNpdGlvbmVyLmZvcndhcmQoTWF0aC5taW4odGhpcy5kdXJhdGlvbiwgMjAwKSk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdmFyIHByZXZJbmRleCA9IHRoaXMuaW5kZXg7CiAgICAgICAgICAgICAgICB2YXIgcHJldiA9IGhhc0NsYXNzKHRoaXMuc2xpZGVzLCB0aGlzLmNsc0FjdGl2ZSkgJiYgdGhpcy5zbGlkZXNbcHJldkluZGV4XTsKICAgICAgICAgICAgICAgIHZhciBuZXh0SW5kZXggPSB0aGlzLmdldEluZGV4KGluZGV4LCB0aGlzLmluZGV4KTsKICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gdGhpcy5zbGlkZXNbbmV4dEluZGV4XTsKCiAgICAgICAgICAgICAgICBpZiAocHJldiA9PT0gbmV4dCkgewogICAgICAgICAgICAgICAgICAgIHJlc2V0KCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRoaXMuZGlyID0gZ2V0RGlyZWN0aW9uKGluZGV4LCBwcmV2SW5kZXgpOwogICAgICAgICAgICAgICAgdGhpcy5wcmV2SW5kZXggPSBwcmV2SW5kZXg7CiAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gbmV4dEluZGV4OwoKICAgICAgICAgICAgICAgIHByZXYgJiYgdHJpZ2dlcihwcmV2LCAnYmVmb3JlaXRlbWhpZGUnLCBbdGhpc10pOwogICAgICAgICAgICAgICAgaWYgKCF0cmlnZ2VyKG5leHQsICdiZWZvcmVpdGVtc2hvdycsIFt0aGlzLCBwcmV2XSkpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gdGhpcy5wcmV2SW5kZXg7CiAgICAgICAgICAgICAgICAgICAgcmVzZXQoKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdmFyIHByb21pc2UgPSB0aGlzLl9zaG93KHByZXYsIG5leHQsIGZvcmNlKS50aGVuKGZ1bmN0aW9uICgpIHsKCiAgICAgICAgICAgICAgICAgICAgcHJldiAmJiB0cmlnZ2VyKHByZXYsICdpdGVtaGlkZGVuJywgW3RoaXMkMV0pOwogICAgICAgICAgICAgICAgICAgIHRyaWdnZXIobmV4dCwgJ2l0ZW1zaG93bicsIFt0aGlzJDFdKTsKCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZhc3Rkb20ud3JpdGUoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzJDEuc2hvdyhzdGFjay5zaGlmdCgpLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyQxLl90cmFuc2l0aW9uZXIgPSBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICBwcmV2ICYmIHRyaWdnZXIocHJldiwgJ2l0ZW1oaWRlJywgW3RoaXNdKTsKICAgICAgICAgICAgICAgIHRyaWdnZXIobmV4dCwgJ2l0ZW1zaG93JywgW3RoaXNdKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZTsKCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBnZXRJbmRleDogZnVuY3Rpb24oaW5kZXgsIHByZXYpIHsKICAgICAgICAgICAgICAgIGlmICggaW5kZXggPT09IHZvaWQgMCApIGluZGV4ID0gdGhpcy5pbmRleDsKICAgICAgICAgICAgICAgIGlmICggcHJldiA9PT0gdm9pZCAwICkgcHJldiA9IHRoaXMuaW5kZXg7CgogICAgICAgICAgICAgICAgcmV0dXJuIGNsYW1wKGdldEluZGV4KGluZGV4LCB0aGlzLnNsaWRlcywgcHJldiwgdGhpcy5maW5pdGUpLCAwLCB0aGlzLm1heEluZGV4KTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGdldFZhbGlkSW5kZXg6IGZ1bmN0aW9uKGluZGV4LCBwcmV2SW5kZXgpIHsKICAgICAgICAgICAgICAgIGlmICggaW5kZXggPT09IHZvaWQgMCApIGluZGV4ID0gdGhpcy5pbmRleDsKICAgICAgICAgICAgICAgIGlmICggcHJldkluZGV4ID09PSB2b2lkIDAgKSBwcmV2SW5kZXggPSB0aGlzLnByZXZJbmRleDsKCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRJbmRleChpbmRleCwgcHJldkluZGV4KTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIF9zaG93OiBmdW5jdGlvbihwcmV2LCBuZXh0LCBmb3JjZSkgewoKICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zaXRpb25lciA9IHRoaXMuX2dldFRyYW5zaXRpb25lcigKICAgICAgICAgICAgICAgICAgICBwcmV2LAogICAgICAgICAgICAgICAgICAgIG5leHQsCiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXIsCiAgICAgICAgICAgICAgICAgICAgYXNzaWduKHsKICAgICAgICAgICAgICAgICAgICAgICAgZWFzaW5nOiBmb3JjZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXh0Lm9mZnNldFdpZHRoIDwgNjAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnY3ViaWMtYmV6aWVyKDAuMjUsIDAuNDYsIDAuNDUsIDAuOTQpJyAvKiBlYXNlT3V0UXVhZCAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2N1YmljLWJlemllcigwLjE2NSwgMC44NCwgMC40NCwgMSknIC8qIGVhc2VPdXRRdWFydCAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmVhc2luZwogICAgICAgICAgICAgICAgICAgIH0sIHRoaXMudHJhbnNpdGlvbk9wdGlvbnMpCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIGlmICghZm9yY2UgJiYgIXByZXYpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2l0aW9uZXIudHJhbnNsYXRlKDEpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgcmVmID0gdGhpcy5zdGFjazsKICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSByZWYubGVuZ3RoOwogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zaXRpb25lcltsZW5ndGggPiAxID8gJ2ZvcndhcmQnIDogJ3Nob3cnXShsZW5ndGggPiAxID8gTWF0aC5taW4odGhpcy5kdXJhdGlvbiwgNzUgKyA3NSAvIChsZW5ndGggLSAxKSkgOiB0aGlzLmR1cmF0aW9uLCB0aGlzLnBlcmNlbnQpOwoKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIF9nZXREaXN0YW5jZTogZnVuY3Rpb24ocHJldiwgbmV4dCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldFRyYW5zaXRpb25lcihwcmV2LCBwcmV2ICE9PSBuZXh0ICYmIG5leHQpLmdldERpc3RhbmNlKCk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBfdHJhbnNsYXRlOiBmdW5jdGlvbihwZXJjZW50LCBwcmV2LCBuZXh0KSB7CiAgICAgICAgICAgICAgICBpZiAoIHByZXYgPT09IHZvaWQgMCApIHByZXYgPSB0aGlzLnByZXZJbmRleDsKICAgICAgICAgICAgICAgIGlmICggbmV4dCA9PT0gdm9pZCAwICkgbmV4dCA9IHRoaXMuaW5kZXg7CgogICAgICAgICAgICAgICAgdmFyIHRyYW5zaXRpb25lciA9IHRoaXMuX2dldFRyYW5zaXRpb25lcihwcmV2ICE9PSBuZXh0ID8gcHJldiA6IGZhbHNlLCBuZXh0KTsKICAgICAgICAgICAgICAgIHRyYW5zaXRpb25lci50cmFuc2xhdGUocGVyY2VudCk7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJhbnNpdGlvbmVyOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgX2dldFRyYW5zaXRpb25lcjogZnVuY3Rpb24ocHJldiwgbmV4dCwgZGlyLCBvcHRpb25zKSB7CiAgICAgICAgICAgICAgICBpZiAoIHByZXYgPT09IHZvaWQgMCApIHByZXYgPSB0aGlzLnByZXZJbmRleDsKICAgICAgICAgICAgICAgIGlmICggbmV4dCA9PT0gdm9pZCAwICkgbmV4dCA9IHRoaXMuaW5kZXg7CiAgICAgICAgICAgICAgICBpZiAoIGRpciA9PT0gdm9pZCAwICkgZGlyID0gdGhpcy5kaXIgfHwgMTsKICAgICAgICAgICAgICAgIGlmICggb3B0aW9ucyA9PT0gdm9pZCAwICkgb3B0aW9ucyA9IHRoaXMudHJhbnNpdGlvbk9wdGlvbnM7CgogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzLlRyYW5zaXRpb25lcigKICAgICAgICAgICAgICAgICAgICBpc051bWJlcihwcmV2KSA/IHRoaXMuc2xpZGVzW3ByZXZdIDogcHJldiwKICAgICAgICAgICAgICAgICAgICBpc051bWJlcihuZXh0KSA/IHRoaXMuc2xpZGVzW25leHRdIDogbmV4dCwKICAgICAgICAgICAgICAgICAgICBkaXIgKiAoaXNSdGwgPyAtMSA6IDEpLAogICAgICAgICAgICAgICAgICAgIG9wdGlvbnMKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgIH07CgogICAgZnVuY3Rpb24gZ2V0RGlyZWN0aW9uKGluZGV4LCBwcmV2SW5kZXgpIHsKICAgICAgICByZXR1cm4gaW5kZXggPT09ICduZXh0JwogICAgICAgICAgICA/IDEKICAgICAgICAgICAgOiBpbmRleCA9PT0gJ3ByZXZpb3VzJwogICAgICAgICAgICAgICAgPyAtMQogICAgICAgICAgICAgICAgOiBpbmRleCA8IHByZXZJbmRleAogICAgICAgICAgICAgICAgICAgID8gLTEKICAgICAgICAgICAgICAgICAgICA6IDE7CiAgICB9CgogICAgZnVuY3Rpb24gc3BlZWRVcCh4KSB7CiAgICAgICAgcmV0dXJuIC41ICogeCArIDMwMDsgLy8gcGFyYWJvbGEgdGhyb3VnaCAoNDAwLDUwMDsgNjAwLDYwMDsgMTgwMCwxMjAwKQogICAgfQoKICAgIHZhciBTbGlkZXNob3cgPSB7CgogICAgICAgIG1peGluczogW1NsaWRlcl0sCgogICAgICAgIHByb3BzOiB7CiAgICAgICAgICAgIGFuaW1hdGlvbjogU3RyaW5nCiAgICAgICAgfSwKCiAgICAgICAgZGF0YTogewogICAgICAgICAgICBhbmltYXRpb246ICdzbGlkZScsCiAgICAgICAgICAgIGNsc0FjdGl2YXRlZDogJ3VrLXRyYW5zaXRpb24tYWN0aXZlJywKICAgICAgICAgICAgQW5pbWF0aW9uczogQW5pbWF0aW9ucywKICAgICAgICAgICAgVHJhbnNpdGlvbmVyOiBUcmFuc2l0aW9uZXIKICAgICAgICB9LAoKICAgICAgICBjb21wdXRlZDogewoKICAgICAgICAgICAgYW5pbWF0aW9uOiBmdW5jdGlvbihyZWYpIHsKICAgICAgICAgICAgICAgIHZhciBhbmltYXRpb24gPSByZWYuYW5pbWF0aW9uOwogICAgICAgICAgICAgICAgdmFyIEFuaW1hdGlvbnMgPSByZWYuQW5pbWF0aW9uczsKCiAgICAgICAgICAgICAgICByZXR1cm4gYXNzaWduKGFuaW1hdGlvbiBpbiBBbmltYXRpb25zID8gQW5pbWF0aW9uc1thbmltYXRpb25dIDogQW5pbWF0aW9ucy5zbGlkZSwge25hbWU6IGFuaW1hdGlvbn0pOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgdHJhbnNpdGlvbk9wdGlvbnM6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHthbmltYXRpb246IHRoaXMuYW5pbWF0aW9ufTsKICAgICAgICAgICAgfQoKICAgICAgICB9LAoKICAgICAgICBldmVudHM6IHsKCiAgICAgICAgICAgICdpdGVtc2hvdyBpdGVtaGlkZSBpdGVtc2hvd24gaXRlbWhpZGRlbic6IGZ1bmN0aW9uKHJlZikgewogICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IHJlZi50YXJnZXQ7CgogICAgICAgICAgICAgICAgdGhpcy4kdXBkYXRlKHRhcmdldCk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBiZWZvcmVpdGVtc2hvdzogZnVuY3Rpb24ocmVmKSB7CiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gcmVmLnRhcmdldDsKCiAgICAgICAgICAgICAgICBhZGRDbGFzcyh0YXJnZXQsIHRoaXMuY2xzQWN0aXZlKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGl0ZW1zaG93bjogZnVuY3Rpb24ocmVmKSB7CiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gcmVmLnRhcmdldDsKCiAgICAgICAgICAgICAgICBhZGRDbGFzcyh0YXJnZXQsIHRoaXMuY2xzQWN0aXZhdGVkKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGl0ZW1oaWRkZW46IGZ1bmN0aW9uKHJlZikgewogICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IHJlZi50YXJnZXQ7CgogICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3ModGFyZ2V0LCB0aGlzLmNsc0FjdGl2ZSwgdGhpcy5jbHNBY3RpdmF0ZWQpOwogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICB9OwoKICAgIHZhciBsaWdodGJveFBhbmVsID0gewoKICAgICAgICBtaXhpbnM6IFtDb250YWluZXIsIE1vZGFsLCBUb2dnbGFibGUsIFNsaWRlc2hvd10sCgogICAgICAgIGZ1bmN0aW9uYWw6IHRydWUsCgogICAgICAgIHByb3BzOiB7CiAgICAgICAgICAgIGRlbGF5Q29udHJvbHM6IE51bWJlciwKICAgICAgICAgICAgcHJlbG9hZDogTnVtYmVyLAogICAgICAgICAgICB2aWRlb0F1dG9wbGF5OiBCb29sZWFuLAogICAgICAgICAgICB0ZW1wbGF0ZTogU3RyaW5nCiAgICAgICAgfSwKCiAgICAgICAgZGF0YTogZnVuY3Rpb24gKCkgeyByZXR1cm4gKHsKICAgICAgICAgICAgcHJlbG9hZDogMSwKICAgICAgICAgICAgdmlkZW9BdXRvcGxheTogZmFsc2UsCiAgICAgICAgICAgIGRlbGF5Q29udHJvbHM6IDMwMDAsCiAgICAgICAgICAgIGl0ZW1zOiBbXSwKICAgICAgICAgICAgY2xzOiAndWstb3BlbicsCiAgICAgICAgICAgIGNsc1BhZ2U6ICd1ay1saWdodGJveC1wYWdlJywKICAgICAgICAgICAgc2VsTGlzdDogJy51ay1saWdodGJveC1pdGVtcycsCiAgICAgICAgICAgIGF0dHJJdGVtOiAndWstbGlnaHRib3gtaXRlbScsCiAgICAgICAgICAgIHNlbENsb3NlOiAnLnVrLWNsb3NlLWxhcmdlJywKICAgICAgICAgICAgc2VsQ2FwdGlvbjogJy51ay1saWdodGJveC1jYXB0aW9uJywKICAgICAgICAgICAgcGF1c2VPbkhvdmVyOiBmYWxzZSwKICAgICAgICAgICAgdmVsb2NpdHk6IDIsCiAgICAgICAgICAgIEFuaW1hdGlvbnM6IEFuaW1hdGlvbnMkMSwKICAgICAgICAgICAgdGVtcGxhdGU6ICI8ZGl2IGNsYXNzPVwidWstbGlnaHRib3ggdWstb3ZlcmZsb3ctaGlkZGVuXCI+IDx1bCBjbGFzcz1cInVrLWxpZ2h0Ym94LWl0ZW1zXCI+PC91bD4gPGRpdiBjbGFzcz1cInVrLWxpZ2h0Ym94LXRvb2xiYXIgdWstcG9zaXRpb24tdG9wIHVrLXRleHQtcmlnaHQgdWstdHJhbnNpdGlvbi1zbGlkZS10b3AgdWstdHJhbnNpdGlvbi1vcGFxdWVcIj4gPGJ1dHRvbiBjbGFzcz1cInVrLWxpZ2h0Ym94LXRvb2xiYXItaWNvbiB1ay1jbG9zZS1sYXJnZVwiIHR5cGU9XCJidXR0b25cIiB1ay1jbG9zZT48L2J1dHRvbj4gPC9kaXY+IDxhIGNsYXNzPVwidWstbGlnaHRib3gtYnV0dG9uIHVrLXBvc2l0aW9uLWNlbnRlci1sZWZ0IHVrLXBvc2l0aW9uLW1lZGl1bSB1ay10cmFuc2l0aW9uLWZhZGVcIiBocmVmPVwiI1wiIHVrLXNsaWRlbmF2LXByZXZpb3VzIHVrLWxpZ2h0Ym94LWl0ZW09XCJwcmV2aW91c1wiPjwvYT4gPGEgY2xhc3M9XCJ1ay1saWdodGJveC1idXR0b24gdWstcG9zaXRpb24tY2VudGVyLXJpZ2h0IHVrLXBvc2l0aW9uLW1lZGl1bSB1ay10cmFuc2l0aW9uLWZhZGVcIiBocmVmPVwiI1wiIHVrLXNsaWRlbmF2LW5leHQgdWstbGlnaHRib3gtaXRlbT1cIm5leHRcIj48L2E+IDxkaXYgY2xhc3M9XCJ1ay1saWdodGJveC10b29sYmFyIHVrLWxpZ2h0Ym94LWNhcHRpb24gdWstcG9zaXRpb24tYm90dG9tIHVrLXRleHQtY2VudGVyIHVrLXRyYW5zaXRpb24tc2xpZGUtYm90dG9tIHVrLXRyYW5zaXRpb24tb3BhcXVlXCI+PC9kaXY+IDwvZGl2PiIKICAgICAgICB9KTsgfSwKCiAgICAgICAgY3JlYXRlZDogZnVuY3Rpb24oKSB7CgogICAgICAgICAgICB2YXIgJGVsID0gJCh0aGlzLnRlbXBsYXRlKTsKICAgICAgICAgICAgdmFyIGxpc3QgPSAkKHRoaXMuc2VsTGlzdCwgJGVsKTsKICAgICAgICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFwcGVuZChsaXN0LCAnPGxpPjwvbGk+Jyk7IH0pOwoKICAgICAgICAgICAgdGhpcy4kbW91bnQoYXBwZW5kKHRoaXMuY29udGFpbmVyLCAkZWwpKTsKCiAgICAgICAgfSwKCiAgICAgICAgY29tcHV0ZWQ6IHsKCiAgICAgICAgICAgIGNhcHRpb246IGZ1bmN0aW9uKHJlZiwgJGVsKSB7CiAgICAgICAgICAgICAgICB2YXIgc2VsQ2FwdGlvbiA9IHJlZi5zZWxDYXB0aW9uOwoKICAgICAgICAgICAgICAgIHJldHVybiAkKCcudWstbGlnaHRib3gtY2FwdGlvbicsICRlbCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgfSwKCiAgICAgICAgZXZlbnRzOiBbCgogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgbmFtZTogKHBvaW50ZXJNb3ZlICsgIiAiICsgcG9pbnRlckRvd24gKyAiIGtleWRvd24iKSwKCiAgICAgICAgICAgICAgICBoYW5kbGVyOiAnc2hvd0NvbnRyb2xzJwoKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICBuYW1lOiAnY2xpY2snLAoKICAgICAgICAgICAgICAgIHNlbGY6IHRydWUsCgogICAgICAgICAgICAgICAgZGVsZWdhdGU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbFNsaWRlczsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgaGFuZGxlcjogZnVuY3Rpb24oZSkgewoKICAgICAgICAgICAgICAgICAgICBpZiAoZS5kZWZhdWx0UHJldmVudGVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZSgpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICBuYW1lOiAnc2hvd24nLAoKICAgICAgICAgICAgICAgIHNlbGY6IHRydWUsCgogICAgICAgICAgICAgICAgaGFuZGxlcjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93Q29udHJvbHMoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgbmFtZTogJ2hpZGUnLAoKICAgICAgICAgICAgICAgIHNlbGY6IHRydWUsCgogICAgICAgICAgICAgICAgaGFuZGxlcjogZnVuY3Rpb24oKSB7CgogICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZUNvbnRyb2xzKCk7CgogICAgICAgICAgICAgICAgICAgIHJlbW92ZUNsYXNzKHRoaXMuc2xpZGVzLCB0aGlzLmNsc0FjdGl2ZSk7CiAgICAgICAgICAgICAgICAgICAgVHJhbnNpdGlvbi5zdG9wKHRoaXMuc2xpZGVzKTsKCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgbmFtZTogJ2hpZGRlbicsCgogICAgICAgICAgICAgICAgc2VsZjogdHJ1ZSwKCiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLiRkZXN0cm95KHRydWUpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICBuYW1lOiAna2V5dXAnLAoKICAgICAgICAgICAgICAgIGVsOiBkb2N1bWVudCwKCiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbihlKSB7CgogICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc1RvZ2dsZWQodGhpcy4kZWwpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZS5rZXlDb2RlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3coJ3ByZXZpb3VzJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOToKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvdygnbmV4dCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgIG5hbWU6ICdiZWZvcmVpdGVtc2hvdycsCgogICAgICAgICAgICAgICAgaGFuZGxlcjogZnVuY3Rpb24oZSkgewoKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1RvZ2dsZWQoKSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYWdnYWJsZSA9IGZhbHNlOwoKICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CgogICAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlTm93KHRoaXMuJGVsLCB0cnVlKTsKCiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbmltYXRpb24gPSBBbmltYXRpb25zJDFbJ3NjYWxlJ107CiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3MoZS50YXJnZXQsIHRoaXMuY2xzQWN0aXZlKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YWNrLnNwbGljZSgxLCAwLCB0aGlzLmluZGV4KTsKCiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9LAoKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgIG5hbWU6ICdpdGVtc2hvdycsCgogICAgICAgICAgICAgICAgaGFuZGxlcjogZnVuY3Rpb24ocmVmKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IHJlZi50YXJnZXQ7CgoKICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IGluZGV4KHRhcmdldCk7CiAgICAgICAgICAgICAgICAgICAgdmFyIHJlZiQxID0gdGhpcy5nZXRJdGVtKGkpOwogICAgICAgICAgICAgICAgICAgIHZhciBjYXB0aW9uID0gcmVmJDEuY2FwdGlvbjsKCiAgICAgICAgICAgICAgICAgICAgY3NzKHRoaXMuY2FwdGlvbiwgJ2Rpc3BsYXknLCBjYXB0aW9uID8gJycgOiAnbm9uZScpOwogICAgICAgICAgICAgICAgICAgIGh0bWwodGhpcy5jYXB0aW9uLCBjYXB0aW9uKTsKCiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPD0gdGhpcy5wcmVsb2FkOyBqKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkSXRlbSh0aGlzLmdldEluZGV4KGkgKyBqKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZEl0ZW0odGhpcy5nZXRJbmRleChpIC0gaikpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9LAoKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgIG5hbWU6ICdpdGVtc2hvd24nLAoKICAgICAgICAgICAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhZ2dhYmxlID0gdGhpcy4kcHJvcHMuZHJhZ2dhYmxlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICBuYW1lOiAnaXRlbWxvYWQnLAoKICAgICAgICAgICAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uKF8sIGl0ZW0pIHsKICAgICAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpczsKCgogICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2UgPSBpdGVtLnNvdXJjZTsKICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IGl0ZW0udHlwZTsKICAgICAgICAgICAgICAgICAgICB2YXIgYWx0ID0gaXRlbS5hbHQ7CgogICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0SXRlbShpdGVtLCAnPHNwYW4gdWstc3Bpbm5lcj48L3NwYW4+Jyk7CgogICAgICAgICAgICAgICAgICAgIGlmICghc291cmNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIHZhciBtYXRjaGVzOwoKICAgICAgICAgICAgICAgICAgICAvLyBJbWFnZQogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAnaW1hZ2UnIHx8IHNvdXJjZS5tYXRjaCgvXC4oanAoZSk/Z3xwbmd8Z2lmfHN2Z3x3ZWJwKSgkfFw/KS9pKSkgewoKICAgICAgICAgICAgICAgICAgICAgICAgZ2V0SW1hZ2Uoc291cmNlKS50aGVuKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGltZykgeyByZXR1cm4gdGhpcyQxLnNldEl0ZW0oaXRlbSwgKCI8aW1nIHdpZHRoPVwiIiArIChpbWcud2lkdGgpICsgIlwiIGhlaWdodD1cIiIgKyAoaW1nLmhlaWdodCkgKyAiXCIgc3JjPVwiIiArIHNvdXJjZSArICJcIiBhbHQ9XCIiICsgKGFsdCA/IGFsdCA6ICcnKSArICJcIj4iKSk7IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzJDEuc2V0RXJyb3IoaXRlbSk7IH0KICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFZpZGVvCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAndmlkZW8nIHx8IHNvdXJjZS5tYXRjaCgvXC4obXA0fHdlYm18b2d2KSgkfFw/KS9pKSkgewoKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZpZGVvID0gJCgoIjx2aWRlbyBjb250cm9scyBwbGF5c2lubGluZSIgKyAoaXRlbS5wb3N0ZXIgPyAoIiBwb3N0ZXI9XCIiICsgKGl0ZW0ucG9zdGVyKSArICJcIiIpIDogJycpICsgIiB1ay12aWRlbz1cIiIgKyAodGhpcy52aWRlb0F1dG9wbGF5KSArICJcIj48L3ZpZGVvPiIpKTsKICAgICAgICAgICAgICAgICAgICAgICAgYXR0cih2aWRlbywgJ3NyYycsIHNvdXJjZSk7CgogICAgICAgICAgICAgICAgICAgICAgICBvbmNlKHZpZGVvLCAnZXJyb3IgbG9hZGVkbWV0YWRhdGEnLCBmdW5jdGlvbiAodHlwZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdlcnJvcicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzJDEuc2V0RXJyb3IoaXRlbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIodmlkZW8sIHt3aWR0aDogdmlkZW8udmlkZW9XaWR0aCwgaGVpZ2h0OiB2aWRlby52aWRlb0hlaWdodH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMkMS5zZXRJdGVtKGl0ZW0sIHZpZGVvKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZnJhbWUKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdpZnJhbWUnIHx8IHNvdXJjZS5tYXRjaCgvXC4oaHRtbHxwaHApKCR8XD8pL2kpKSB7CgogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEl0ZW0oaXRlbSwgKCI8aWZyYW1lIGNsYXNzPVwidWstbGlnaHRib3gtaWZyYW1lXCIgc3JjPVwiIiArIHNvdXJjZSArICJcIiBmcmFtZWJvcmRlcj1cIjBcIiBhbGxvd2Z1bGxzY3JlZW4+PC9pZnJhbWU+IikpOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gWW91VHViZQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKG1hdGNoZXMgPSBzb3VyY2UubWF0Y2goL1wvXC8uKj95b3V0dWJlKC1ub2Nvb2tpZSk/XC5bYS16XStcL3dhdGNoXD92PShbXiZcc10rKS8pIHx8IHNvdXJjZS5tYXRjaCgvKCl5b3V0dVwuYmVcLyguKikvKSkpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpZCA9IG1hdGNoZXNbMl07CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZXRJZnJhbWUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB3aWR0aCA9PT0gdm9pZCAwICkgd2lkdGggPSA2NDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGhlaWdodCA9PT0gdm9pZCAwICkgaGVpZ2h0ID0gNDUwOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzJDEuc2V0SXRlbShpdGVtLCBnZXRJZnJhbWUoKCJodHRwczovL3d3dy55b3V0dWJlIiArIChtYXRjaGVzWzFdIHx8ICcnKSArICIuY29tL2VtYmVkLyIgKyBpZCksIHdpZHRoLCBoZWlnaHQsIHRoaXMkMS52aWRlb0F1dG9wbGF5KSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgICAgICAgICBnZXRJbWFnZSgoImh0dHBzOi8vaW1nLnlvdXR1YmUuY29tL3ZpLyIgKyBpZCArICIvbWF4cmVzZGVmYXVsdC5qcGciKSkudGhlbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChyZWYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSByZWYud2lkdGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlaWdodCA9IHJlZi5oZWlnaHQ7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFlvdVR1YmUgZGVmYXVsdCA0MDQgdGh1bWIsIGZhbGwgYmFjayB0byBsb3cgcmVzb2x1dGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aCA9PT0gMTIwICYmIGhlaWdodCA9PT0gOTApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0SW1hZ2UoKCJodHRwczovL2ltZy55b3V0dWJlLmNvbS92aS8iICsgaWQgKyAiLzAuanBnIikpLnRoZW4oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAocmVmKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gcmVmLndpZHRoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZWlnaHQgPSByZWYuaGVpZ2h0OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0SWZyYW1lKHdpZHRoLCBoZWlnaHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SWZyYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SWZyYW1lKHdpZHRoLCBoZWlnaHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJZnJhbWUKICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFZpbWVvCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgobWF0Y2hlcyA9IHNvdXJjZS5tYXRjaCgvKFwvXC8uKj8pdmltZW9cLlthLXpdK1wvKFswLTldKykuKj8vKSkpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIGFqYXgoKCJodHRwczovL3ZpbWVvLmNvbS9hcGkvb2VtYmVkLmpzb24/bWF4d2lkdGg9MTkyMCZ1cmw9IiArIChlbmNvZGVVUkkoc291cmNlKSkpLCB7cmVzcG9uc2VUeXBlOiAnanNvbicsIHdpdGhDcmVkZW50aWFsczogZmFsc2V9KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKHJlZikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVmX3Jlc3BvbnNlID0gcmVmLnJlc3BvbnNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gcmVmX3Jlc3BvbnNlLmhlaWdodDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gcmVmX3Jlc3BvbnNlLndpZHRoOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMkMS5zZXRJdGVtKGl0ZW0sIGdldElmcmFtZSgoImh0dHBzOi8vcGxheWVyLnZpbWVvLmNvbS92aWRlby8iICsgKG1hdGNoZXNbMl0pKSwgd2lkdGgsIGhlaWdodCwgdGhpcyQxLnZpZGVvQXV0b3BsYXkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzJDEuc2V0RXJyb3IoaXRlbSk7IH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9CgogICAgICAgIF0sCgogICAgICAgIG1ldGhvZHM6IHsKCiAgICAgICAgICAgIGxvYWRJdGVtOiBmdW5jdGlvbihpbmRleCkgewogICAgICAgICAgICAgICAgaWYgKCBpbmRleCA9PT0gdm9pZCAwICkgaW5kZXggPSB0aGlzLmluZGV4OwoKCiAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXMuZ2V0SXRlbShpbmRleCk7CgogICAgICAgICAgICAgICAgaWYgKGl0ZW0uY29udGVudCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB0cmlnZ2VyKHRoaXMuJGVsLCAnaXRlbWxvYWQnLCBbaXRlbV0pOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgZ2V0SXRlbTogZnVuY3Rpb24oaW5kZXgpIHsKICAgICAgICAgICAgICAgIGlmICggaW5kZXggPT09IHZvaWQgMCApIGluZGV4ID0gdGhpcy5pbmRleDsKCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtc1tpbmRleF0gfHwge307CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBzZXRJdGVtOiBmdW5jdGlvbihpdGVtLCBjb250ZW50KSB7CiAgICAgICAgICAgICAgICBhc3NpZ24oaXRlbSwge2NvbnRlbnQ6IGNvbnRlbnR9KTsKICAgICAgICAgICAgICAgIHZhciBlbCA9IGh0bWwodGhpcy5zbGlkZXNbdGhpcy5pdGVtcy5pbmRleE9mKGl0ZW0pXSwgY29udGVudCk7CiAgICAgICAgICAgICAgICB0cmlnZ2VyKHRoaXMuJGVsLCAnaXRlbWxvYWRlZCcsIFt0aGlzLCBlbF0pOwogICAgICAgICAgICAgICAgdGhpcy4kdXBkYXRlKGVsKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHNldEVycm9yOiBmdW5jdGlvbihpdGVtKSB7CiAgICAgICAgICAgICAgICB0aGlzLnNldEl0ZW0oaXRlbSwgJzxzcGFuIHVrLWljb249Imljb246IGJvbHQ7IHJhdGlvOiAyIj48L3NwYW4+Jyk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBzaG93Q29udHJvbHM6IGZ1bmN0aW9uKCkgewoKICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmNvbnRyb2xzVGltZXIpOwogICAgICAgICAgICAgICAgdGhpcy5jb250cm9sc1RpbWVyID0gc2V0VGltZW91dCh0aGlzLmhpZGVDb250cm9scywgdGhpcy5kZWxheUNvbnRyb2xzKTsKCiAgICAgICAgICAgICAgICBhZGRDbGFzcyh0aGlzLiRlbCwgJ3VrLWFjdGl2ZScsICd1ay10cmFuc2l0aW9uLWFjdGl2ZScpOwoKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGhpZGVDb250cm9sczogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLiRlbCwgJ3VrLWFjdGl2ZScsICd1ay10cmFuc2l0aW9uLWFjdGl2ZScpOwogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICB9OwoKICAgIGZ1bmN0aW9uIGdldElmcmFtZShzcmMsIHdpZHRoLCBoZWlnaHQsIGF1dG9wbGF5KSB7CiAgICAgICAgcmV0dXJuICgiPGlmcmFtZSBzcmM9XCIiICsgc3JjICsgIlwiIHdpZHRoPVwiIiArIHdpZHRoICsgIlwiIGhlaWdodD1cIiIgKyBoZWlnaHQgKyAiXCIgc3R5bGU9XCJtYXgtd2lkdGg6IDEwMCU7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7XCIgZnJhbWVib3JkZXI9XCIwXCIgYWxsb3dmdWxsc2NyZWVuIHVrLXZpZGVvPVwiYXV0b3BsYXk6ICIgKyBhdXRvcGxheSArICJcIiB1ay1yZXNwb25zaXZlPjwvaWZyYW1lPiIpOwogICAgfQoKICAgIHZhciBMaWdodGJveCA9IHsKCiAgICAgICAgaW5zdGFsbDogaW5zdGFsbCQyLAoKICAgICAgICBwcm9wczoge3RvZ2dsZTogU3RyaW5nfSwKCiAgICAgICAgZGF0YToge3RvZ2dsZTogJ2EnfSwKCiAgICAgICAgY29tcHV0ZWQ6IHsKCiAgICAgICAgICAgIHRvZ2dsZXM6IHsKCiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKHJlZiwgJGVsKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHRvZ2dsZSA9IHJlZi50b2dnbGU7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiAkJCh0b2dnbGUsICRlbCk7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIHdhdGNoOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGUoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBpdGVtczogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdW5pcXVlQnkodGhpcy50b2dnbGVzLm1hcCh0b0l0ZW0pLCAnc291cmNlJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgfSwKCiAgICAgICAgZGlzY29ubmVjdGVkOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdGhpcy5oaWRlKCk7CiAgICAgICAgfSwKCiAgICAgICAgZXZlbnRzOiBbCgogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgbmFtZTogJ2NsaWNrJywKCiAgICAgICAgICAgICAgICBkZWxlZ2F0ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgodGhpcy50b2dnbGUpICsgIjpub3QoLnVrLWRpc2FibGVkKSIpOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgICAgIHZhciBzcmMgPSBkYXRhKGUuY3VycmVudCwgJ2hyZWYnKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3coZmluZEluZGV4KHRoaXMuaXRlbXMsIGZ1bmN0aW9uIChyZWYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZSA9IHJlZi5zb3VyY2U7CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc291cmNlID09PSBzcmM7CiAgICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfQoKICAgICAgICBdLAoKICAgICAgICBtZXRob2RzOiB7CgogICAgICAgICAgICBzaG93OiBmdW5jdGlvbihpbmRleCkgewogICAgICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7CgoKICAgICAgICAgICAgICAgIHRoaXMucGFuZWwgPSB0aGlzLnBhbmVsIHx8IHRoaXMuJGNyZWF0ZSgnbGlnaHRib3hQYW5lbCcsIGFzc2lnbih7fSwgdGhpcy4kcHJvcHMsIHtpdGVtczogdGhpcy5pdGVtc30pKTsKCiAgICAgICAgICAgICAgICBvbih0aGlzLnBhbmVsLiRlbCwgJ2hpZGRlbicsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMkMS5wYW5lbCA9IGZhbHNlOyB9KTsKCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYW5lbC5zaG93KGluZGV4KTsKCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBoaWRlOiBmdW5jdGlvbigpIHsKCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYW5lbCAmJiB0aGlzLnBhbmVsLmhpZGUoKTsKCiAgICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgIH07CgogICAgZnVuY3Rpb24gaW5zdGFsbCQyKFVJa2l0LCBMaWdodGJveCkgewoKICAgICAgICBpZiAoIVVJa2l0LmxpZ2h0Ym94UGFuZWwpIHsKICAgICAgICAgICAgVUlraXQuY29tcG9uZW50KCdsaWdodGJveFBhbmVsJywgbGlnaHRib3hQYW5lbCk7CiAgICAgICAgfQoKICAgICAgICBhc3NpZ24oCiAgICAgICAgICAgIExpZ2h0Ym94LnByb3BzLAogICAgICAgICAgICBVSWtpdC5jb21wb25lbnQoJ2xpZ2h0Ym94UGFuZWwnKS5vcHRpb25zLnByb3BzCiAgICAgICAgKTsKCiAgICB9CgogICAgZnVuY3Rpb24gdG9JdGVtKGVsKSB7CiAgICAgICAgcmV0dXJuIFsnaHJlZicsICdjYXB0aW9uJywgJ3R5cGUnLCAncG9zdGVyJywgJ2FsdCddLnJlZHVjZShmdW5jdGlvbiAob2JqLCBhdHRyKSB7CiAgICAgICAgICAgIG9ialthdHRyID09PSAnaHJlZicgPyAnc291cmNlJyA6IGF0dHJdID0gZGF0YShlbCwgYXR0cik7CiAgICAgICAgICAgIHJldHVybiBvYmo7CiAgICAgICAgfSwge30pOwogICAgfQoKICAgIHZhciBvYmo7CgogICAgdmFyIGNvbnRhaW5lcnMgPSB7fTsKCiAgICB2YXIgTm90aWZpY2F0aW9uID0gewoKICAgICAgICBmdW5jdGlvbmFsOiB0cnVlLAoKICAgICAgICBhcmdzOiBbJ21lc3NhZ2UnLCAnc3RhdHVzJ10sCgogICAgICAgIGRhdGE6IHsKICAgICAgICAgICAgbWVzc2FnZTogJycsCiAgICAgICAgICAgIHN0YXR1czogJycsCiAgICAgICAgICAgIHRpbWVvdXQ6IDUwMDAsCiAgICAgICAgICAgIGdyb3VwOiBudWxsLAogICAgICAgICAgICBwb3M6ICd0b3AtY2VudGVyJywKICAgICAgICAgICAgY2xzQ2xvc2U6ICd1ay1ub3RpZmljYXRpb24tY2xvc2UnLAogICAgICAgICAgICBjbHNNc2c6ICd1ay1ub3RpZmljYXRpb24tbWVzc2FnZScKICAgICAgICB9LAoKICAgICAgICBpbnN0YWxsOiBpbnN0YWxsJDMsCgogICAgICAgIGNvbXB1dGVkOiB7CgogICAgICAgICAgICBtYXJnaW5Qcm9wOiBmdW5jdGlvbihyZWYpIHsKICAgICAgICAgICAgICAgIHZhciBwb3MgPSByZWYucG9zOwoKICAgICAgICAgICAgICAgIHJldHVybiAoIm1hcmdpbiIgKyAoc3RhcnRzV2l0aChwb3MsICd0b3AnKSA/ICdUb3AnIDogJ0JvdHRvbScpKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHN0YXJ0UHJvcHM6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIG9iajsKCiAgICAgICAgICAgICAgICByZXR1cm4gKCBvYmogPSB7b3BhY2l0eTogMH0sIG9ialt0aGlzLm1hcmdpblByb3BdID0gLXRoaXMuJGVsLm9mZnNldEhlaWdodCwgb2JqICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgfSwKCiAgICAgICAgY3JlYXRlZDogZnVuY3Rpb24oKSB7CgogICAgICAgICAgICBpZiAoIWNvbnRhaW5lcnNbdGhpcy5wb3NdKSB7CiAgICAgICAgICAgICAgICBjb250YWluZXJzW3RoaXMucG9zXSA9IGFwcGVuZCh0aGlzLiRjb250YWluZXIsICgiPGRpdiBjbGFzcz1cInVrLW5vdGlmaWNhdGlvbiB1ay1ub3RpZmljYXRpb24tIiArICh0aGlzLnBvcykgKyAiXCI+PC9kaXY+IikpOwogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29udGFpbmVyID0gY3NzKGNvbnRhaW5lcnNbdGhpcy5wb3NdLCAnZGlzcGxheScsICdibG9jaycpOwoKICAgICAgICAgICAgdGhpcy4kbW91bnQoYXBwZW5kKGNvbnRhaW5lciwKICAgICAgICAgICAgICAgICgiPGRpdiBjbGFzcz1cIiIgKyAodGhpcy5jbHNNc2cpICsgKHRoaXMuc3RhdHVzID8gKCIgIiArICh0aGlzLmNsc01zZykgKyAiLSIgKyAodGhpcy5zdGF0dXMpKSA6ICcnKSArICJcIj4gPGEgaHJlZj1cIiNcIiBjbGFzcz1cIiIgKyAodGhpcy5jbHNDbG9zZSkgKyAiXCIgZGF0YS11ay1jbG9zZT48L2E+IDxkaXY+IiArICh0aGlzLm1lc3NhZ2UpICsgIjwvZGl2PiA8L2Rpdj4iKQogICAgICAgICAgICApKTsKCiAgICAgICAgfSwKCiAgICAgICAgY29ubmVjdGVkOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7CiAgICAgICAgICAgIHZhciBvYmo7CgoKICAgICAgICAgICAgdmFyIG1hcmdpbiA9IHRvRmxvYXQoY3NzKHRoaXMuJGVsLCB0aGlzLm1hcmdpblByb3ApKTsKICAgICAgICAgICAgVHJhbnNpdGlvbi5zdGFydCgKICAgICAgICAgICAgICAgIGNzcyh0aGlzLiRlbCwgdGhpcy5zdGFydFByb3BzKSwKICAgICAgICAgICAgICAgICggb2JqID0ge29wYWNpdHk6IDF9LCBvYmpbdGhpcy5tYXJnaW5Qcm9wXSA9IG1hcmdpbiwgb2JqICkKICAgICAgICAgICAgKS50aGVuKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIGlmICh0aGlzJDEudGltZW91dCkgewogICAgICAgICAgICAgICAgICAgIHRoaXMkMS50aW1lciA9IHNldFRpbWVvdXQodGhpcyQxLmNsb3NlLCB0aGlzJDEudGltZW91dCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICB9LAoKICAgICAgICBldmVudHM6ICggb2JqID0gewoKICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICAgIGlmIChjbG9zZXN0KGUudGFyZ2V0LCAnYVtocmVmPSIjIl0sYVtocmVmPSIiXScpKSB7CiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpOwogICAgICAgICAgICB9CgogICAgICAgIH0sIG9ialtwb2ludGVyRW50ZXJdID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgaWYgKHRoaXMudGltZXIpIHsKICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lcik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sIG9ialtwb2ludGVyTGVhdmVdID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgaWYgKHRoaXMudGltZW91dCkgewogICAgICAgICAgICAgICAgICAgIHRoaXMudGltZXIgPSBzZXRUaW1lb3V0KHRoaXMuY2xvc2UsIHRoaXMudGltZW91dCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sIG9iaiApLAoKICAgICAgICBtZXRob2RzOiB7CgogICAgICAgICAgICBjbG9zZTogZnVuY3Rpb24oaW1tZWRpYXRlKSB7CiAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpczsKCgogICAgICAgICAgICAgICAgdmFyIHJlbW92ZUZuID0gZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKHRoaXMkMS4kZWwsICdjbG9zZScsIFt0aGlzJDFdKTsKICAgICAgICAgICAgICAgICAgICByZW1vdmUodGhpcyQxLiRlbCk7CgogICAgICAgICAgICAgICAgICAgIGlmICghY29udGFpbmVyc1t0aGlzJDEucG9zXS5jaGlsZHJlbi5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY3NzKGNvbnRhaW5lcnNbdGhpcyQxLnBvc10sICdkaXNwbGF5JywgJ25vbmUnKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICBpZiAodGhpcy50aW1lcikgewogICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoaW1tZWRpYXRlKSB7CiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlRm4oKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgVHJhbnNpdGlvbi5zdGFydCh0aGlzLiRlbCwgdGhpcy5zdGFydFByb3BzKS50aGVuKHJlbW92ZUZuKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgfTsKCiAgICBmdW5jdGlvbiBpbnN0YWxsJDMoVUlraXQpIHsKICAgICAgICBVSWtpdC5ub3RpZmljYXRpb24uY2xvc2VBbGwgPSBmdW5jdGlvbiAoZ3JvdXAsIGltbWVkaWF0ZSkgewogICAgICAgICAgICBhcHBseShkb2N1bWVudC5ib2R5LCBmdW5jdGlvbiAoZWwpIHsKICAgICAgICAgICAgICAgIHZhciBub3RpZmljYXRpb24gPSBVSWtpdC5nZXRDb21wb25lbnQoZWwsICdub3RpZmljYXRpb24nKTsKICAgICAgICAgICAgICAgIGlmIChub3RpZmljYXRpb24gJiYgKCFncm91cCB8fCBncm91cCA9PT0gbm90aWZpY2F0aW9uLmdyb3VwKSkgewogICAgICAgICAgICAgICAgICAgIG5vdGlmaWNhdGlvbi5jbG9zZShpbW1lZGlhdGUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9OwogICAgfQoKICAgIHZhciBwcm9wcyA9IFsneCcsICd5JywgJ2JneCcsICdiZ3knLCAncm90YXRlJywgJ3NjYWxlJywgJ2NvbG9yJywgJ2JhY2tncm91bmRDb2xvcicsICdib3JkZXJDb2xvcicsICdvcGFjaXR5JywgJ2JsdXInLCAnaHVlJywgJ2dyYXlzY2FsZScsICdpbnZlcnQnLCAnc2F0dXJhdGUnLCAnc2VwaWEnLCAnZm9wYWNpdHknLCAnc3Ryb2tlJ107CgogICAgdmFyIFBhcmFsbGF4ID0gewoKICAgICAgICBtaXhpbnM6IFtNZWRpYV0sCgogICAgICAgIHByb3BzOiBwcm9wcy5yZWR1Y2UoZnVuY3Rpb24gKHByb3BzLCBwcm9wKSB7CiAgICAgICAgICAgIHByb3BzW3Byb3BdID0gJ2xpc3QnOwogICAgICAgICAgICByZXR1cm4gcHJvcHM7CiAgICAgICAgfSwge30pLAoKICAgICAgICBkYXRhOiBwcm9wcy5yZWR1Y2UoZnVuY3Rpb24gKGRhdGEsIHByb3ApIHsKICAgICAgICAgICAgZGF0YVtwcm9wXSA9IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmV0dXJuIGRhdGE7CiAgICAgICAgfSwge30pLAoKICAgICAgICBjb21wdXRlZDogewoKICAgICAgICAgICAgcHJvcHM6IGZ1bmN0aW9uKHByb3BlcnRpZXMsICRlbCkgewogICAgICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7CgoKICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy5yZWR1Y2UoZnVuY3Rpb24gKHByb3BzLCBwcm9wKSB7CgogICAgICAgICAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZChwcm9wZXJ0aWVzW3Byb3BdKSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHM7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICB2YXIgaXNDb2xvciA9IHByb3AubWF0Y2goL2NvbG9yL2kpOwogICAgICAgICAgICAgICAgICAgIHZhciBpc0Nzc1Byb3AgPSBpc0NvbG9yIHx8IHByb3AgPT09ICdvcGFjaXR5JzsKCiAgICAgICAgICAgICAgICAgICAgdmFyIHBvcywgYmdQb3MsIGRpZmY7CiAgICAgICAgICAgICAgICAgICAgdmFyIHN0ZXBzID0gcHJvcGVydGllc1twcm9wXS5zbGljZSgwKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ3NzUHJvcCkgewogICAgICAgICAgICAgICAgICAgICAgICBjc3MoJGVsLCBwcm9wLCAnJyk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoc3RlcHMubGVuZ3RoIDwgMikgewogICAgICAgICAgICAgICAgICAgICAgICBzdGVwcy51bnNoaWZ0KChwcm9wID09PSAnc2NhbGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaXNDc3NQcm9wCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjc3MoJGVsLCBwcm9wKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMCkgfHwgMCk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICB2YXIgdW5pdCA9IGdldFVuaXQoc3RlcHMpOwoKICAgICAgICAgICAgICAgICAgICBpZiAoaXNDb2xvcikgewoKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlZiA9ICRlbC5zdHlsZTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gcmVmLmNvbG9yOwogICAgICAgICAgICAgICAgICAgICAgICBzdGVwcyA9IHN0ZXBzLm1hcChmdW5jdGlvbiAoc3RlcCkgeyByZXR1cm4gcGFyc2VDb2xvcigkZWwsIHN0ZXApOyB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgJGVsLnN0eWxlLmNvbG9yID0gY29sb3I7CgogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRzV2l0aChwcm9wLCAnYmcnKSkgewoKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHIgPSBwcm9wID09PSAnYmd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJzsKICAgICAgICAgICAgICAgICAgICAgICAgc3RlcHMgPSBzdGVwcy5tYXAoZnVuY3Rpb24gKHN0ZXApIHsgcmV0dXJuIHRvUHgoc3RlcCwgYXR0ciwgdGhpcyQxLiRlbCk7IH0pOwoKICAgICAgICAgICAgICAgICAgICAgICAgY3NzKCRlbCwgKCJiYWNrZ3JvdW5kLXBvc2l0aW9uLSIgKyAocHJvcFsyXSkpLCAnJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJnUG9zID0gY3NzKCRlbCwgJ2JhY2tncm91bmRQb3NpdGlvbicpLnNwbGl0KCcgJylbcHJvcFsyXSA9PT0gJ3gnID8gMCA6IDFdOyAvLyBJRSAxMSBjYW4ndCByZWFkIGJhY2tncm91bmQtcG9zaXRpb24tW3h8eV0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzJDEuY292ZXJzKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1pbiA9IE1hdGgubWluLmFwcGx5KE1hdGgsIHN0ZXBzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXggPSBNYXRoLm1heC5hcHBseShNYXRoLCBzdGVwcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZG93biA9IHN0ZXBzLmluZGV4T2YobWluKSA8IHN0ZXBzLmluZGV4T2YobWF4KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmID0gbWF4IC0gbWluOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXBzID0gc3RlcHMubWFwKGZ1bmN0aW9uIChzdGVwKSB7IHJldHVybiBzdGVwIC0gKGRvd24gPyBtaW4gOiBtYXgpOyB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IChkb3duID8gLWRpZmYgOiAwKSArICJweCI7CgogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IGJnUG9zOwoKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAgICAgc3RlcHMgPSBzdGVwcy5tYXAodG9GbG9hdCk7CgogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3AgPT09ICdzdHJva2UnKSB7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN0ZXBzLnNvbWUoZnVuY3Rpb24gKHN0ZXApIHsgcmV0dXJuIHN0ZXA7IH0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHM7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSBnZXRNYXhQYXRoTGVuZ3RoKHRoaXMkMS4kZWwpOwogICAgICAgICAgICAgICAgICAgICAgICBjc3MoJGVsLCAnc3Ryb2tlRGFzaGFycmF5JywgbGVuZ3RoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bml0ID09PSAnJScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXBzID0gc3RlcHMubWFwKGZ1bmN0aW9uIChzdGVwKSB7IHJldHVybiBzdGVwICogbGVuZ3RoIC8gMTAwOyB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgc3RlcHMgPSBzdGVwcy5yZXZlcnNlKCk7CgogICAgICAgICAgICAgICAgICAgICAgICBwcm9wID0gJ3N0cm9rZURhc2hvZmZzZXQnOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgcHJvcHNbcHJvcF0gPSB7c3RlcHM6IHN0ZXBzLCB1bml0OiB1bml0LCBwb3M6IHBvcywgYmdQb3M6IGJnUG9zLCBkaWZmOiBkaWZmfTsKCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzOwoKICAgICAgICAgICAgICAgIH0sIHt9KTsKCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBiZ1Byb3BzOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzOwoKICAgICAgICAgICAgICAgIHJldHVybiBbJ2JneCcsICdiZ3knXS5maWx0ZXIoZnVuY3Rpb24gKGJnKSB7IHJldHVybiBiZyBpbiB0aGlzJDEucHJvcHM7IH0pOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgY292ZXJzOiBmdW5jdGlvbihfLCAkZWwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBjb3ZlcnMoJGVsKTsKICAgICAgICAgICAgfQoKICAgICAgICB9LAoKICAgICAgICBkaXNjb25uZWN0ZWQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICBkZWxldGUgdGhpcy5faW1hZ2U7CiAgICAgICAgfSwKCiAgICAgICAgdXBkYXRlOiB7CgogICAgICAgICAgICByZWFkOiBmdW5jdGlvbihkYXRhKSB7CiAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpczsKCgogICAgICAgICAgICAgICAgZGF0YS5hY3RpdmUgPSB0aGlzLm1hdGNoTWVkaWE7CgogICAgICAgICAgICAgICAgaWYgKCFkYXRhLmFjdGl2ZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIWRhdGEuaW1hZ2UgJiYgdGhpcy5jb3ZlcnMgJiYgdGhpcy5iZ1Byb3BzLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHZhciBzcmMgPSBjc3ModGhpcy4kZWwsICdiYWNrZ3JvdW5kSW1hZ2UnKS5yZXBsYWNlKC9ebm9uZXx1cmxcKFsiJ10/KC4rPylbIiddP1wpJC8sICckMScpOwoKICAgICAgICAgICAgICAgICAgICBpZiAoc3JjKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgaW1nLnNyYyA9IHNyYzsKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5pbWFnZSA9IGltZzsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaW1nLm5hdHVyYWxXaWR0aCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMkMS4kZW1pdCgpOyB9OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgaW1hZ2UgPSBkYXRhLmltYWdlOwoKICAgICAgICAgICAgICAgIGlmICghaW1hZ2UgfHwgIWltYWdlLm5hdHVyYWxXaWR0aCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgZGltRWwgPSB7CiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHRoaXMuJGVsLm9mZnNldFdpZHRoLAogICAgICAgICAgICAgICAgICAgIGhlaWdodDogdGhpcy4kZWwub2Zmc2V0SGVpZ2h0CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgdmFyIGRpbUltYWdlID0gewogICAgICAgICAgICAgICAgICAgIHdpZHRoOiBpbWFnZS5uYXR1cmFsV2lkdGgsCiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBpbWFnZS5uYXR1cmFsSGVpZ2h0CiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIHZhciBkaW0gPSBEaW1lbnNpb25zLmNvdmVyKGRpbUltYWdlLCBkaW1FbCk7CgogICAgICAgICAgICAgICAgdGhpcy5iZ1Byb3BzLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHsKCiAgICAgICAgICAgICAgICAgICAgdmFyIHJlZiA9IHRoaXMkMS5wcm9wc1twcm9wXTsKICAgICAgICAgICAgICAgICAgICB2YXIgZGlmZiA9IHJlZi5kaWZmOwogICAgICAgICAgICAgICAgICAgIHZhciBiZ1BvcyA9IHJlZi5iZ1BvczsKICAgICAgICAgICAgICAgICAgICB2YXIgc3RlcHMgPSByZWYuc3RlcHM7CiAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHIgPSBwcm9wID09PSAnYmd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJzsKICAgICAgICAgICAgICAgICAgICB2YXIgc3BhbiA9IGRpbVthdHRyXSAtIGRpbUVsW2F0dHJdOwoKICAgICAgICAgICAgICAgICAgICBpZiAoc3BhbiA8IGRpZmYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGltRWxbYXR0cl0gPSBkaW1bYXR0cl0gKyBkaWZmIC0gc3BhbjsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNwYW4gPiBkaWZmKSB7CgogICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zUGVyY2VudGFnZSA9IGRpbUVsW2F0dHJdIC8gdG9QeChiZ1BvcywgYXR0ciwgdGhpcyQxLiRlbCk7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9zUGVyY2VudGFnZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyQxLnByb3BzW3Byb3BdLnN0ZXBzID0gc3RlcHMubWFwKGZ1bmN0aW9uIChzdGVwKSB7IHJldHVybiBzdGVwIC0gKHNwYW4gLSBkaWZmKSAvIHBvc1BlcmNlbnRhZ2U7IH0pOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBkaW0gPSBEaW1lbnNpb25zLmNvdmVyKGRpbUltYWdlLCBkaW1FbCk7CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICBkYXRhLmRpbSA9IGRpbTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHdyaXRlOiBmdW5jdGlvbihyZWYpIHsKICAgICAgICAgICAgICAgIHZhciBkaW0gPSByZWYuZGltOwogICAgICAgICAgICAgICAgdmFyIGFjdGl2ZSA9IHJlZi5hY3RpdmU7CgoKICAgICAgICAgICAgICAgIGlmICghYWN0aXZlKSB7CiAgICAgICAgICAgICAgICAgICAgY3NzKHRoaXMuJGVsLCB7YmFja2dyb3VuZFNpemU6ICcnLCBiYWNrZ3JvdW5kUmVwZWF0OiAnJ30pOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBkaW0gJiYgY3NzKHRoaXMuJGVsLCB7CiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZFNpemU6ICgoZGltLndpZHRoKSArICJweCAiICsgKGRpbS5oZWlnaHQpICsgInB4IiksCiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZFJlcGVhdDogJ25vLXJlcGVhdCcKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGV2ZW50czogWydyZXNpemUnXQoKICAgICAgICB9LAoKICAgICAgICBtZXRob2RzOiB7CgogICAgICAgICAgICByZXNldDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpczsKCiAgICAgICAgICAgICAgICBlYWNoKHRoaXMuZ2V0Q3NzKDApLCBmdW5jdGlvbiAoXywgcHJvcCkgeyByZXR1cm4gY3NzKHRoaXMkMS4kZWwsIHByb3AsICcnKTsgfSk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBnZXRDc3M6IGZ1bmN0aW9uKHBlcmNlbnQpIHsKCiAgICAgICAgICAgICAgICB2YXIgcmVmID0gdGhpczsKICAgICAgICAgICAgICAgIHZhciBwcm9wcyA9IHJlZi5wcm9wczsKICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhwcm9wcykucmVkdWNlKGZ1bmN0aW9uIChjc3MsIHByb3ApIHsKCiAgICAgICAgICAgICAgICAgICAgdmFyIHJlZiA9IHByb3BzW3Byb3BdOwogICAgICAgICAgICAgICAgICAgIHZhciBzdGVwcyA9IHJlZi5zdGVwczsKICAgICAgICAgICAgICAgICAgICB2YXIgdW5pdCA9IHJlZi51bml0OwogICAgICAgICAgICAgICAgICAgIHZhciBwb3MgPSByZWYucG9zOwogICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGdldFZhbHVlKHN0ZXBzLCBwZXJjZW50KTsKCiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChwcm9wKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyB0cmFuc2Zvcm1zCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3gnOgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd5JzogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdCA9IHVuaXQgfHwgJ3B4JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcy50cmFuc2Zvcm0gKz0gIiB0cmFuc2xhdGUiICsgKHVjZmlyc3QocHJvcCkpICsgIigiICsgKHRvRmxvYXQodmFsdWUpLnRvRml4ZWQodW5pdCA9PT0gJ3B4JyA/IDAgOiAyKSkgKyB1bml0ICsgIikiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncm90YXRlJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXQgPSB1bml0IHx8ICdkZWcnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzLnRyYW5zZm9ybSArPSAiIHJvdGF0ZSgiICsgKHZhbHVlICsgdW5pdCkgKyAiKSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc2NhbGUnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzLnRyYW5zZm9ybSArPSAiIHNjYWxlKCIgKyB2YWx1ZSArICIpIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmcgaW1hZ2UKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYmd5JzoKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYmd4JzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzc1soImJhY2tncm91bmQtcG9zaXRpb24tIiArIChwcm9wWzJdKSldID0gImNhbGMoIiArIHBvcyArICIgKyAiICsgdmFsdWUgKyAicHgpIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29sb3IKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnY29sb3InOgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdiYWNrZ3JvdW5kQ29sb3InOgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdib3JkZXJDb2xvcic6IHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVmJDEgPSBnZXRTdGVwKHN0ZXBzLCBwZXJjZW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IHJlZiQxWzBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IHJlZiQxWzFdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHAgPSByZWYkMVsyXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3NbcHJvcF0gPSAicmdiYSgiICsgKHN0YXJ0Lm1hcChmdW5jdGlvbiAodmFsdWUsIGkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSArIHAgKiAoZW5kW2ldIC0gdmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaSA9PT0gMyA/IHRvRmxvYXQodmFsdWUpIDogcGFyc2VJbnQodmFsdWUsIDEwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5qb2luKCcsJykpICsgIikiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ1NTIEZpbHRlcgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdibHVyJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXQgPSB1bml0IHx8ICdweCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3MuZmlsdGVyICs9ICIgYmx1cigiICsgKHZhbHVlICsgdW5pdCkgKyAiKSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnaHVlJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXQgPSB1bml0IHx8ICdkZWcnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzLmZpbHRlciArPSAiIGh1ZS1yb3RhdGUoIiArICh2YWx1ZSArIHVuaXQpICsgIikiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ZvcGFjaXR5JzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXQgPSB1bml0IHx8ICclJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcy5maWx0ZXIgKz0gIiBvcGFjaXR5KCIgKyAodmFsdWUgKyB1bml0KSArICIpIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdncmF5c2NhbGUnOgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdpbnZlcnQnOgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzYXR1cmF0ZSc6CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3NlcGlhJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXQgPSB1bml0IHx8ICclJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcy5maWx0ZXIgKz0gIiAiICsgcHJvcCArICIoIiArICh2YWx1ZSArIHVuaXQpICsgIikiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3NbcHJvcF0gPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBjc3M7CgogICAgICAgICAgICAgICAgfSwge3RyYW5zZm9ybTogJycsIGZpbHRlcjogJyd9KTsKCiAgICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgIH07CgogICAgZnVuY3Rpb24gcGFyc2VDb2xvcihlbCwgY29sb3IpIHsKICAgICAgICByZXR1cm4gY3NzKGNzcyhlbCwgJ2NvbG9yJywgY29sb3IpLCAnY29sb3InKQogICAgICAgICAgICAuc3BsaXQoL1soKSxdL2cpCiAgICAgICAgICAgIC5zbGljZSgxLCAtMSkKICAgICAgICAgICAgLmNvbmNhdCgxKQogICAgICAgICAgICAuc2xpY2UoMCwgNCkKICAgICAgICAgICAgLm1hcCh0b0Zsb2F0KTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRTdGVwKHN0ZXBzLCBwZXJjZW50KSB7CiAgICAgICAgdmFyIGNvdW50ID0gc3RlcHMubGVuZ3RoIC0gMTsKICAgICAgICB2YXIgaW5kZXggPSBNYXRoLm1pbihNYXRoLmZsb29yKGNvdW50ICogcGVyY2VudCksIGNvdW50IC0gMSk7CiAgICAgICAgdmFyIHN0ZXAgPSBzdGVwcy5zbGljZShpbmRleCwgaW5kZXggKyAyKTsKCiAgICAgICAgc3RlcC5wdXNoKHBlcmNlbnQgPT09IDEgPyAxIDogcGVyY2VudCAlICgxIC8gY291bnQpICogY291bnQpOwoKICAgICAgICByZXR1cm4gc3RlcDsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRWYWx1ZShzdGVwcywgcGVyY2VudCwgZGlnaXRzKSB7CiAgICAgICAgaWYgKCBkaWdpdHMgPT09IHZvaWQgMCApIGRpZ2l0cyA9IDI7CgogICAgICAgIHZhciByZWYgPSBnZXRTdGVwKHN0ZXBzLCBwZXJjZW50KTsKICAgICAgICB2YXIgc3RhcnQgPSByZWZbMF07CiAgICAgICAgdmFyIGVuZCA9IHJlZlsxXTsKICAgICAgICB2YXIgcCA9IHJlZlsyXTsKICAgICAgICByZXR1cm4gKGlzTnVtYmVyKHN0YXJ0KQogICAgICAgICAgICA/IHN0YXJ0ICsgTWF0aC5hYnMoc3RhcnQgLSBlbmQpICogcCAqIChzdGFydCA8IGVuZCA/IDEgOiAtMSkKICAgICAgICAgICAgOiArZW5kCiAgICAgICAgKS50b0ZpeGVkKGRpZ2l0cyk7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0VW5pdChzdGVwcykgewogICAgICAgIHJldHVybiBzdGVwcy5yZWR1Y2UoZnVuY3Rpb24gKHVuaXQsIHN0ZXApIHsgcmV0dXJuIGlzU3RyaW5nKHN0ZXApICYmIHN0ZXAucmVwbGFjZSgvLXxcZC9nLCAnJykudHJpbSgpIHx8IHVuaXQ7IH0sICcnKTsKICAgIH0KCiAgICBmdW5jdGlvbiBjb3ZlcnMoZWwpIHsKICAgICAgICB2YXIgcmVmID0gZWwuc3R5bGU7CiAgICAgICAgdmFyIGJhY2tncm91bmRTaXplID0gcmVmLmJhY2tncm91bmRTaXplOwogICAgICAgIHZhciBjb3ZlcnMgPSBjc3MoY3NzKGVsLCAnYmFja2dyb3VuZFNpemUnLCAnJyksICdiYWNrZ3JvdW5kU2l6ZScpID09PSAnY292ZXInOwogICAgICAgIGVsLnN0eWxlLmJhY2tncm91bmRTaXplID0gYmFja2dyb3VuZFNpemU7CiAgICAgICAgcmV0dXJuIGNvdmVyczsKICAgIH0KCiAgICB2YXIgUGFyYWxsYXgkMSA9IHsKCiAgICAgICAgbWl4aW5zOiBbUGFyYWxsYXhdLAoKICAgICAgICBwcm9wczogewogICAgICAgICAgICB0YXJnZXQ6IFN0cmluZywKICAgICAgICAgICAgdmlld3BvcnQ6IE51bWJlciwKICAgICAgICAgICAgZWFzaW5nOiBOdW1iZXIKICAgICAgICB9LAoKICAgICAgICBkYXRhOiB7CiAgICAgICAgICAgIHRhcmdldDogZmFsc2UsCiAgICAgICAgICAgIHZpZXdwb3J0OiAxLAogICAgICAgICAgICBlYXNpbmc6IDEKICAgICAgICB9LAoKICAgICAgICBjb21wdXRlZDogewoKICAgICAgICAgICAgdGFyZ2V0OiBmdW5jdGlvbihyZWYsICRlbCkgewogICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IHJlZi50YXJnZXQ7CgogICAgICAgICAgICAgICAgcmV0dXJuIGdldE9mZnNldEVsZW1lbnQodGFyZ2V0ICYmIHF1ZXJ5KHRhcmdldCwgJGVsKSB8fCAkZWwpOwogICAgICAgICAgICB9CgogICAgICAgIH0sCgogICAgICAgIHVwZGF0ZTogewoKICAgICAgICAgICAgcmVhZDogZnVuY3Rpb24ocmVmLCB0eXBlKSB7CiAgICAgICAgICAgICAgICB2YXIgcGVyY2VudCA9IHJlZi5wZXJjZW50OwogICAgICAgICAgICAgICAgdmFyIGFjdGl2ZSA9IHJlZi5hY3RpdmU7CgoKICAgICAgICAgICAgICAgIGlmICh0eXBlICE9PSAnc2Nyb2xsJykgewogICAgICAgICAgICAgICAgICAgIHBlcmNlbnQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIWFjdGl2ZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgcHJldiA9IHBlcmNlbnQ7CiAgICAgICAgICAgICAgICBwZXJjZW50ID0gZWFzZSQxKHNjcm9sbGVkT3Zlcih0aGlzLnRhcmdldCkgLyAodGhpcy52aWV3cG9ydCB8fCAxKSwgdGhpcy5lYXNpbmcpOwoKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgcGVyY2VudDogcGVyY2VudCwKICAgICAgICAgICAgICAgICAgICBzdHlsZTogcHJldiAhPT0gcGVyY2VudCA/IHRoaXMuZ2V0Q3NzKHBlcmNlbnQpIDogZmFsc2UKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICB3cml0ZTogZnVuY3Rpb24ocmVmKSB7CiAgICAgICAgICAgICAgICB2YXIgc3R5bGUgPSByZWYuc3R5bGU7CiAgICAgICAgICAgICAgICB2YXIgYWN0aXZlID0gcmVmLmFjdGl2ZTsKCgogICAgICAgICAgICAgICAgaWYgKCFhY3RpdmUpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2V0KCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHN0eWxlICYmIGNzcyh0aGlzLiRlbCwgc3R5bGUpOwoKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGV2ZW50czogWydzY3JvbGwnLCAncmVzaXplJ10KICAgICAgICB9CgogICAgfTsKCiAgICBmdW5jdGlvbiBlYXNlJDEocGVyY2VudCwgZWFzaW5nKSB7CiAgICAgICAgcmV0dXJuIGNsYW1wKHBlcmNlbnQgKiAoMSAtIChlYXNpbmcgLSBlYXNpbmcgKiBwZXJjZW50KSkpOwogICAgfQoKICAgIC8vIFNWRyBlbGVtZW50cyBkbyBub3QgaW5oZXJpdCBmcm9tIEhUTUxFbGVtZW50CiAgICBmdW5jdGlvbiBnZXRPZmZzZXRFbGVtZW50KGVsKSB7CiAgICAgICAgcmV0dXJuIGVsCiAgICAgICAgICAgID8gJ29mZnNldFRvcCcgaW4gZWwKICAgICAgICAgICAgICAgID8gZWwKICAgICAgICAgICAgICAgIDogZ2V0T2Zmc2V0RWxlbWVudChlbC5wYXJlbnROb2RlKQogICAgICAgICAgICA6IGRvY3VtZW50LmJvZHk7CiAgICB9CgogICAgdmFyIFNsaWRlclJlYWN0aXZlID0gewoKICAgICAgICB1cGRhdGU6IHsKCiAgICAgICAgICAgIHdyaXRlOiBmdW5jdGlvbigpIHsKCiAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGFjay5sZW5ndGggfHwgdGhpcy5kcmFnZ2luZykgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmdldFZhbGlkSW5kZXgodGhpcy5pbmRleCk7CgogICAgICAgICAgICAgICAgaWYgKCF+dGhpcy5wcmV2SW5kZXggfHwgdGhpcy5pbmRleCAhPT0gaW5kZXgpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3coaW5kZXgpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGV2ZW50czogWydyZXNpemUnXQoKICAgICAgICB9CgogICAgfTsKCiAgICBmdW5jdGlvbiBUcmFuc2l0aW9uZXIkMSAocHJldiwgbmV4dCwgZGlyLCByZWYpIHsKICAgICAgICB2YXIgY2VudGVyID0gcmVmLmNlbnRlcjsKICAgICAgICB2YXIgZWFzaW5nID0gcmVmLmVhc2luZzsKICAgICAgICB2YXIgbGlzdCA9IHJlZi5saXN0OwoKCiAgICAgICAgdmFyIGRlZmVycmVkID0gbmV3IERlZmVycmVkKCk7CgogICAgICAgIHZhciBmcm9tID0gcHJldgogICAgICAgICAgICA/IGdldExlZnQocHJldiwgbGlzdCwgY2VudGVyKQogICAgICAgICAgICA6IGdldExlZnQobmV4dCwgbGlzdCwgY2VudGVyKSArIGJvdW5kcyhuZXh0KS53aWR0aCAqIGRpcjsKICAgICAgICB2YXIgdG8gPSBuZXh0CiAgICAgICAgICAgID8gZ2V0TGVmdChuZXh0LCBsaXN0LCBjZW50ZXIpCiAgICAgICAgICAgIDogZnJvbSArIGJvdW5kcyhwcmV2KS53aWR0aCAqIGRpciAqIChpc1J0bCA/IC0xIDogMSk7CgogICAgICAgIHJldHVybiB7CgogICAgICAgICAgICBkaXI6IGRpciwKCiAgICAgICAgICAgIHNob3c6IGZ1bmN0aW9uKGR1cmF0aW9uLCBwZXJjZW50LCBsaW5lYXIpIHsKICAgICAgICAgICAgICAgIGlmICggcGVyY2VudCA9PT0gdm9pZCAwICkgcGVyY2VudCA9IDA7CgoKICAgICAgICAgICAgICAgIHZhciB0aW1pbmcgPSBsaW5lYXIgPyAnbGluZWFyJyA6IGVhc2luZzsKICAgICAgICAgICAgICAgIGR1cmF0aW9uIC09IE1hdGgucm91bmQoZHVyYXRpb24gKiBjbGFtcChwZXJjZW50LCAtMSwgMSkpOwoKICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlKHBlcmNlbnQpOwoKICAgICAgICAgICAgICAgIHByZXYgJiYgdGhpcy51cGRhdGVUcmFuc2xhdGVzKCk7CiAgICAgICAgICAgICAgICBwZXJjZW50ID0gcHJldiA/IHBlcmNlbnQgOiBjbGFtcChwZXJjZW50LCAwLCAxKTsKICAgICAgICAgICAgICAgIHRyaWdnZXJVcGRhdGUkMSh0aGlzLmdldEl0ZW1JbigpLCAnaXRlbWluJywge3BlcmNlbnQ6IHBlcmNlbnQsIGR1cmF0aW9uOiBkdXJhdGlvbiwgdGltaW5nOiB0aW1pbmcsIGRpcjogZGlyfSk7CiAgICAgICAgICAgICAgICBwcmV2ICYmIHRyaWdnZXJVcGRhdGUkMSh0aGlzLmdldEl0ZW1Jbih0cnVlKSwgJ2l0ZW1vdXQnLCB7cGVyY2VudDogMSAtIHBlcmNlbnQsIGR1cmF0aW9uOiBkdXJhdGlvbiwgdGltaW5nOiB0aW1pbmcsIGRpcjogZGlyfSk7CgogICAgICAgICAgICAgICAgVHJhbnNpdGlvbgogICAgICAgICAgICAgICAgICAgIC5zdGFydChsaXN0LCB7dHJhbnNmb3JtOiB0cmFuc2xhdGUoLXRvICogKGlzUnRsID8gLTEgOiAxKSwgJ3B4Jyl9LCBkdXJhdGlvbiwgdGltaW5nKQogICAgICAgICAgICAgICAgICAgIC50aGVuKGRlZmVycmVkLnJlc29sdmUsIG5vb3ApOwoKICAgICAgICAgICAgICAgIHJldHVybiBkZWZlcnJlZC5wcm9taXNlOwoKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHN0b3A6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIFRyYW5zaXRpb24uc3RvcChsaXN0KTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGNhbmNlbDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBUcmFuc2l0aW9uLmNhbmNlbChsaXN0KTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHJlc2V0OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIGNzcyhsaXN0LCAndHJhbnNmb3JtJywgJycpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgZm9yd2FyZDogZnVuY3Rpb24oZHVyYXRpb24sIHBlcmNlbnQpIHsKICAgICAgICAgICAgICAgIGlmICggcGVyY2VudCA9PT0gdm9pZCAwICkgcGVyY2VudCA9IHRoaXMucGVyY2VudCgpOwoKICAgICAgICAgICAgICAgIFRyYW5zaXRpb24uY2FuY2VsKGxpc3QpOwogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hvdyhkdXJhdGlvbiwgcGVyY2VudCwgdHJ1ZSk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICB0cmFuc2xhdGU6IGZ1bmN0aW9uKHBlcmNlbnQpIHsKCiAgICAgICAgICAgICAgICB2YXIgZGlzdGFuY2UgPSB0aGlzLmdldERpc3RhbmNlKCkgKiBkaXIgKiAoaXNSdGwgPyAtMSA6IDEpOwoKICAgICAgICAgICAgICAgIGNzcyhsaXN0LCAndHJhbnNmb3JtJywgdHJhbnNsYXRlKGNsYW1wKAogICAgICAgICAgICAgICAgICAgIC10byArIChkaXN0YW5jZSAtIGRpc3RhbmNlICogcGVyY2VudCksCiAgICAgICAgICAgICAgICAgICAgLWdldFdpZHRoKGxpc3QpLAogICAgICAgICAgICAgICAgICAgIGJvdW5kcyhsaXN0KS53aWR0aAogICAgICAgICAgICAgICAgKSAqIChpc1J0bCA/IC0xIDogMSksICdweCcpKTsKCiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRyYW5zbGF0ZXMoKTsKCiAgICAgICAgICAgICAgICBpZiAocHJldikgewogICAgICAgICAgICAgICAgICAgIHBlcmNlbnQgPSBjbGFtcChwZXJjZW50LCAtMSwgMSk7CiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlclVwZGF0ZSQxKHRoaXMuZ2V0SXRlbUluKCksICdpdGVtdHJhbnNsYXRlaW4nLCB7cGVyY2VudDogcGVyY2VudCwgZGlyOiBkaXJ9KTsKICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyVXBkYXRlJDEodGhpcy5nZXRJdGVtSW4odHJ1ZSksICdpdGVtdHJhbnNsYXRlb3V0Jywge3BlcmNlbnQ6IDEgLSBwZXJjZW50LCBkaXI6IGRpcn0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHBlcmNlbnQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKChjc3MobGlzdCwgJ3RyYW5zZm9ybScpLnNwbGl0KCcsJylbNF0gKiAoaXNSdGwgPyAtMSA6IDEpICsgZnJvbSkgLyAodG8gLSBmcm9tKSk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBnZXREaXN0YW5jZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5hYnModG8gLSBmcm9tKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGdldEl0ZW1JbjogZnVuY3Rpb24ob3V0KSB7CiAgICAgICAgICAgICAgICBpZiAoIG91dCA9PT0gdm9pZCAwICkgb3V0ID0gZmFsc2U7CgoKICAgICAgICAgICAgICAgIHZhciBhY3RpdmVzID0gdGhpcy5nZXRBY3RpdmVzKCk7CiAgICAgICAgICAgICAgICB2YXIgYWxsID0gc29ydEJ5KHNsaWRlcyhsaXN0KSwgJ29mZnNldExlZnQnKTsKICAgICAgICAgICAgICAgIHZhciBpID0gaW5kZXgoYWxsLCBhY3RpdmVzW2RpciAqIChvdXQgPyAtMSA6IDEpID4gMCA/IGFjdGl2ZXMubGVuZ3RoIC0gMSA6IDBdKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gfmkgJiYgYWxsW2kgKyAocHJldiAmJiAhb3V0ID8gZGlyIDogMCldOwoKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGdldEFjdGl2ZXM6IGZ1bmN0aW9uKCkgewoKICAgICAgICAgICAgICAgIHZhciBsZWZ0ID0gZ2V0TGVmdChwcmV2IHx8IG5leHQsIGxpc3QsIGNlbnRlcik7CgogICAgICAgICAgICAgICAgcmV0dXJuIHNvcnRCeShzbGlkZXMobGlzdCkuZmlsdGVyKGZ1bmN0aW9uIChzbGlkZSkgewogICAgICAgICAgICAgICAgICAgIHZhciBzbGlkZUxlZnQgPSBnZXRFbExlZnQoc2xpZGUsIGxpc3QpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBzbGlkZUxlZnQgPj0gbGVmdCAmJiBzbGlkZUxlZnQgKyBib3VuZHMoc2xpZGUpLndpZHRoIDw9IGJvdW5kcyhsaXN0KS53aWR0aCArIGxlZnQ7CiAgICAgICAgICAgICAgICB9KSwgJ29mZnNldExlZnQnKTsKCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICB1cGRhdGVUcmFuc2xhdGVzOiBmdW5jdGlvbigpIHsKCiAgICAgICAgICAgICAgICB2YXIgYWN0aXZlcyA9IHRoaXMuZ2V0QWN0aXZlcygpOwoKICAgICAgICAgICAgICAgIHNsaWRlcyhsaXN0KS5mb3JFYWNoKGZ1bmN0aW9uIChzbGlkZSkgewogICAgICAgICAgICAgICAgICAgIHZhciBpc0FjdGl2ZSA9IGluY2x1ZGVzKGFjdGl2ZXMsIHNsaWRlKTsKCiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlclVwZGF0ZSQxKHNsaWRlLCAoIml0ZW10cmFuc2xhdGUiICsgKGlzQWN0aXZlID8gJ2luJyA6ICdvdXQnKSksIHsKICAgICAgICAgICAgICAgICAgICAgICAgcGVyY2VudDogaXNBY3RpdmUgPyAxIDogMCwKICAgICAgICAgICAgICAgICAgICAgICAgZGlyOiBzbGlkZS5vZmZzZXRMZWZ0IDw9IG5leHQub2Zmc2V0TGVmdCA/IDEgOiAtMQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgfTsKCiAgICB9CgogICAgZnVuY3Rpb24gZ2V0TGVmdChlbCwgbGlzdCwgY2VudGVyKSB7CgogICAgICAgIHZhciBsZWZ0ID0gZ2V0RWxMZWZ0KGVsLCBsaXN0KTsKCiAgICAgICAgcmV0dXJuIGNlbnRlcgogICAgICAgICAgICA/IGxlZnQgLSBjZW50ZXJFbChlbCwgbGlzdCkKICAgICAgICAgICAgOiBNYXRoLm1pbihsZWZ0LCBnZXRNYXgobGlzdCkpOwoKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRNYXgobGlzdCkgewogICAgICAgIHJldHVybiBNYXRoLm1heCgwLCBnZXRXaWR0aChsaXN0KSAtIGJvdW5kcyhsaXN0KS53aWR0aCk7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0V2lkdGgobGlzdCkgewogICAgICAgIHJldHVybiBzbGlkZXMobGlzdCkucmVkdWNlKGZ1bmN0aW9uIChyaWdodCwgZWwpIHsgcmV0dXJuIGJvdW5kcyhlbCkud2lkdGggKyByaWdodDsgfSwgMCk7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0TWF4V2lkdGgobGlzdCkgewogICAgICAgIHJldHVybiBzbGlkZXMobGlzdCkucmVkdWNlKGZ1bmN0aW9uIChyaWdodCwgZWwpIHsgcmV0dXJuIE1hdGgubWF4KHJpZ2h0LCBib3VuZHMoZWwpLndpZHRoKTsgfSwgMCk7CiAgICB9CgogICAgZnVuY3Rpb24gY2VudGVyRWwoZWwsIGxpc3QpIHsKICAgICAgICByZXR1cm4gYm91bmRzKGxpc3QpLndpZHRoIC8gMiAtIGJvdW5kcyhlbCkud2lkdGggLyAyOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldEVsTGVmdChlbCwgbGlzdCkgewogICAgICAgIHJldHVybiAocG9zaXRpb24oZWwpLmxlZnQgKyAoaXNSdGwgPyBib3VuZHMoZWwpLndpZHRoIC0gYm91bmRzKGxpc3QpLndpZHRoIDogMCkpICogKGlzUnRsID8gLTEgOiAxKTsKICAgIH0KCiAgICBmdW5jdGlvbiBib3VuZHMoZWwpIHsKICAgICAgICByZXR1cm4gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICB9CgogICAgZnVuY3Rpb24gdHJpZ2dlclVwZGF0ZSQxKGVsLCB0eXBlLCBkYXRhKSB7CiAgICAgICAgdHJpZ2dlcihlbCwgY3JlYXRlRXZlbnQodHlwZSwgZmFsc2UsIGZhbHNlLCBkYXRhKSk7CiAgICB9CgogICAgZnVuY3Rpb24gc2xpZGVzKGxpc3QpIHsKICAgICAgICByZXR1cm4gdG9Ob2RlcyhsaXN0LmNoaWxkcmVuKTsKICAgIH0KCiAgICB2YXIgU2xpZGVyJDEgPSB7CgogICAgICAgIG1peGluczogW0NsYXNzLCBTbGlkZXIsIFNsaWRlclJlYWN0aXZlXSwKCiAgICAgICAgcHJvcHM6IHsKICAgICAgICAgICAgY2VudGVyOiBCb29sZWFuLAogICAgICAgICAgICBzZXRzOiBCb29sZWFuCiAgICAgICAgfSwKCiAgICAgICAgZGF0YTogewogICAgICAgICAgICBjZW50ZXI6IGZhbHNlLAogICAgICAgICAgICBzZXRzOiBmYWxzZSwKICAgICAgICAgICAgYXR0ckl0ZW06ICd1ay1zbGlkZXItaXRlbScsCiAgICAgICAgICAgIHNlbExpc3Q6ICcudWstc2xpZGVyLWl0ZW1zJywKICAgICAgICAgICAgc2VsTmF2OiAnLnVrLXNsaWRlci1uYXYnLAogICAgICAgICAgICBjbHNDb250YWluZXI6ICd1ay1zbGlkZXItY29udGFpbmVyJywKICAgICAgICAgICAgVHJhbnNpdGlvbmVyOiBUcmFuc2l0aW9uZXIkMQogICAgICAgIH0sCgogICAgICAgIGNvbXB1dGVkOiB7CgogICAgICAgICAgICBhdmdXaWR0aDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0V2lkdGgodGhpcy5saXN0KSAvIHRoaXMubGVuZ3RoOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgZmluaXRlOiBmdW5jdGlvbihyZWYpIHsKICAgICAgICAgICAgICAgIHZhciBmaW5pdGUgPSByZWYuZmluaXRlOwoKICAgICAgICAgICAgICAgIHJldHVybiBmaW5pdGUgfHwgZ2V0V2lkdGgodGhpcy5saXN0KSA8IGJvdW5kcyh0aGlzLmxpc3QpLndpZHRoICsgZ2V0TWF4V2lkdGgodGhpcy5saXN0KSArIHRoaXMuY2VudGVyOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgbWF4SW5kZXg6IGZ1bmN0aW9uKCkgewoKICAgICAgICAgICAgICAgIGlmICghdGhpcy5maW5pdGUgfHwgdGhpcy5jZW50ZXIgJiYgIXRoaXMuc2V0cykgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxlbmd0aCAtIDE7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKHRoaXMuY2VudGVyKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxhc3QodGhpcy5zZXRzKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBjc3ModGhpcy5zbGlkZXMsICdvcmRlcicsICcnKTsKCiAgICAgICAgICAgICAgICB2YXIgbWF4ID0gZ2V0TWF4KHRoaXMubGlzdCk7CiAgICAgICAgICAgICAgICB2YXIgaSA9IHRoaXMubGVuZ3RoOwoKICAgICAgICAgICAgICAgIHdoaWxlIChpLS0pIHsKICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0RWxMZWZ0KHRoaXMubGlzdC5jaGlsZHJlbltpXSwgdGhpcy5saXN0KSA8IG1heCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5taW4oaSArIDEsIHRoaXMubGVuZ3RoIC0gMSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgc2V0czogZnVuY3Rpb24ocmVmKSB7CiAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpczsKICAgICAgICAgICAgICAgIHZhciBzZXRzID0gcmVmLnNldHM7CgoKICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IGJvdW5kcyh0aGlzLmxpc3QpLndpZHRoIC8gKHRoaXMuY2VudGVyID8gMiA6IDEpOwoKICAgICAgICAgICAgICAgIHZhciBsZWZ0ID0gMDsKICAgICAgICAgICAgICAgIHZhciBsZWZ0Q2VudGVyID0gd2lkdGg7CiAgICAgICAgICAgICAgICB2YXIgc2xpZGVMZWZ0ID0gMDsKCiAgICAgICAgICAgICAgICBzZXRzID0gc2V0cyAmJiB0aGlzLnNsaWRlcy5yZWR1Y2UoZnVuY3Rpb24gKHNldHMsIHNsaWRlLCBpKSB7CgogICAgICAgICAgICAgICAgICAgIHZhciByZWYgPSBib3VuZHMoc2xpZGUpOwogICAgICAgICAgICAgICAgICAgIHZhciBzbGlkZVdpZHRoID0gcmVmLndpZHRoOwogICAgICAgICAgICAgICAgICAgIHZhciBzbGlkZVJpZ2h0ID0gc2xpZGVMZWZ0ICsgc2xpZGVXaWR0aDsKCiAgICAgICAgICAgICAgICAgICAgaWYgKHNsaWRlUmlnaHQgPiBsZWZ0KSB7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMkMS5jZW50ZXIgJiYgaSA+IHRoaXMkMS5tYXhJbmRleCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHRoaXMkMS5tYXhJbmRleDsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmNsdWRlcyhzZXRzLCBpKSkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbXAgPSB0aGlzJDEuc2xpZGVzW2kgKyAxXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzJDEuY2VudGVyICYmIGNtcCAmJiBzbGlkZVdpZHRoIDwgbGVmdENlbnRlciAtIGJvdW5kcyhjbXApLndpZHRoIC8gMikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRDZW50ZXIgLT0gc2xpZGVXaWR0aDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdENlbnRlciA9IHdpZHRoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldHMucHVzaChpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gc2xpZGVMZWZ0ICsgd2lkdGggKyAodGhpcyQxLmNlbnRlciA/IHNsaWRlV2lkdGggLyAyIDogMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBzbGlkZUxlZnQgKz0gc2xpZGVXaWR0aDsKCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldHM7CgogICAgICAgICAgICAgICAgfSwgW10pOwoKICAgICAgICAgICAgICAgIHJldHVybiAhaXNFbXB0eShzZXRzKSAmJiBzZXRzOwoKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHRyYW5zaXRpb25PcHRpb25zOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgY2VudGVyOiB0aGlzLmNlbnRlciwKICAgICAgICAgICAgICAgICAgICBsaXN0OiB0aGlzLmxpc3QKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgfSwKCiAgICAgICAgY29ubmVjdGVkOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdG9nZ2xlQ2xhc3ModGhpcy4kZWwsIHRoaXMuY2xzQ29udGFpbmVyLCAhJCgoIi4iICsgKHRoaXMuY2xzQ29udGFpbmVyKSksIHRoaXMuJGVsKSk7CiAgICAgICAgfSwKCiAgICAgICAgdXBkYXRlOiB7CgogICAgICAgICAgICB3cml0ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpczsKCgogICAgICAgICAgICAgICAgJCQoKCJbIiArICh0aGlzLmF0dHJJdGVtKSArICJdLFtkYXRhLSIgKyAodGhpcy5hdHRySXRlbSkgKyAiXSIpLCB0aGlzLiRlbCkuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBkYXRhKGVsLCB0aGlzJDEuYXR0ckl0ZW0pOwogICAgICAgICAgICAgICAgICAgIHRoaXMkMS5tYXhJbmRleCAmJiB0b2dnbGVDbGFzcyhlbCwgJ3VrLWhpZGRlbicsIGlzTnVtZXJpYyhpbmRleCkgJiYgKHRoaXMkMS5zZXRzICYmICFpbmNsdWRlcyh0aGlzJDEuc2V0cywgdG9GbG9hdChpbmRleCkpIHx8IGluZGV4ID4gdGhpcyQxLm1heEluZGV4KSk7CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZHJhZ2dpbmcgJiYgIXRoaXMuc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2V0VHJhbnNpdGlvbmVyKCkudHJhbnNsYXRlKDEpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGV2ZW50czogWydyZXNpemUnXQoKICAgICAgICB9LAoKICAgICAgICBldmVudHM6IHsKCiAgICAgICAgICAgIGJlZm9yZWl0ZW1zaG93OiBmdW5jdGlvbihlKSB7CgogICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRyYWdnaW5nICYmIHRoaXMuc2V0cyAmJiB0aGlzLnN0YWNrLmxlbmd0aCA8IDIgJiYgIWluY2x1ZGVzKHRoaXMuc2V0cywgdGhpcy5pbmRleCkpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gdGhpcy5nZXRWYWxpZEluZGV4KCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdmFyIGRpZmYgPSBNYXRoLmFicygKICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGV4CiAgICAgICAgICAgICAgICAgICAgLSB0aGlzLnByZXZJbmRleAogICAgICAgICAgICAgICAgICAgICsgKHRoaXMuZGlyID4gMCAmJiB0aGlzLmluZGV4IDwgdGhpcy5wcmV2SW5kZXggfHwgdGhpcy5kaXIgPCAwICYmIHRoaXMuaW5kZXggPiB0aGlzLnByZXZJbmRleCA/ICh0aGlzLm1heEluZGV4ICsgMSkgKiB0aGlzLmRpciA6IDApCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIGlmICghdGhpcy5kcmFnZ2luZyAmJiBkaWZmID4gMSkgewoKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpZmY7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YWNrLnNwbGljZSgxLCAwLCB0aGlzLmRpciA+IDAgPyAnbmV4dCcgOiAncHJldmlvdXMnKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdGhpcy5kdXJhdGlvbiA9IHNwZWVkVXAodGhpcy5hdmdXaWR0aCAvIHRoaXMudmVsb2NpdHkpCiAgICAgICAgICAgICAgICAgICAgKiAoYm91bmRzKAogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpciA8IDAgfHwgIXRoaXMuc2xpZGVzW3RoaXMucHJldkluZGV4XQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnNsaWRlc1t0aGlzLmluZGV4XQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnNsaWRlc1t0aGlzLnByZXZJbmRleF0KICAgICAgICAgICAgICAgICAgICApLndpZHRoIC8gdGhpcy5hdmdXaWR0aCk7CgogICAgICAgICAgICAgICAgdGhpcy5yZW9yZGVyKCk7CgogICAgICAgICAgICB9LAoKICAgICAgICAgICAgaXRlbXNob3c6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgIWlzVW5kZWZpbmVkKHRoaXMucHJldkluZGV4KSAmJiBhZGRDbGFzcyh0aGlzLl9nZXRUcmFuc2l0aW9uZXIoKS5nZXRJdGVtSW4oKSwgdGhpcy5jbHNBY3RpdmUpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgaXRlbXNob3duOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzOwoKICAgICAgICAgICAgICAgIHZhciBhY3RpdmVzID0gdGhpcy5fZ2V0VHJhbnNpdGlvbmVyKHRoaXMuaW5kZXgpLmdldEFjdGl2ZXMoKTsKICAgICAgICAgICAgICAgIHRoaXMuc2xpZGVzLmZvckVhY2goZnVuY3Rpb24gKHNsaWRlKSB7IHJldHVybiB0b2dnbGVDbGFzcyhzbGlkZSwgdGhpcyQxLmNsc0FjdGl2ZSwgaW5jbHVkZXMoYWN0aXZlcywgc2xpZGUpKTsgfSk7CiAgICAgICAgICAgICAgICAoIXRoaXMuc2V0cyB8fCBpbmNsdWRlcyh0aGlzLnNldHMsIHRvRmxvYXQodGhpcy5pbmRleCkpKSAmJiB0aGlzLnNsaWRlcy5mb3JFYWNoKGZ1bmN0aW9uIChzbGlkZSkgeyByZXR1cm4gdG9nZ2xlQ2xhc3Moc2xpZGUsIHRoaXMkMS5jbHNBY3RpdmF0ZWQsIGluY2x1ZGVzKGFjdGl2ZXMsIHNsaWRlKSk7IH0pOwogICAgICAgICAgICB9CgogICAgICAgIH0sCgogICAgICAgIG1ldGhvZHM6IHsKCiAgICAgICAgICAgIHJlb3JkZXI6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7CgoKICAgICAgICAgICAgICAgIGNzcyh0aGlzLnNsaWRlcywgJ29yZGVyJywgJycpOwoKICAgICAgICAgICAgICAgIGlmICh0aGlzLmZpbml0ZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmRpciA+IDAgJiYgdGhpcy5zbGlkZXNbdGhpcy5wcmV2SW5kZXhdID8gdGhpcy5wcmV2SW5kZXggOiB0aGlzLmluZGV4OwoKICAgICAgICAgICAgICAgIHRoaXMuc2xpZGVzLmZvckVhY2goZnVuY3Rpb24gKHNsaWRlLCBpKSB7IHJldHVybiBjc3Moc2xpZGUsICdvcmRlcicsIHRoaXMkMS5kaXIgPiAwICYmIGkgPCBpbmRleAogICAgICAgICAgICAgICAgICAgICAgICA/IDEKICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzJDEuZGlyIDwgMCAmJiBpID49IHRoaXMkMS5pbmRleAogICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAtMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnJwogICAgICAgICAgICAgICAgICAgICk7IH0KICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNlbnRlcikgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IHRoaXMuc2xpZGVzW2luZGV4XTsKICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IGJvdW5kcyh0aGlzLmxpc3QpLndpZHRoIC8gMiAtIGJvdW5kcyhuZXh0KS53aWR0aCAvIDI7CiAgICAgICAgICAgICAgICB2YXIgaiA9IDA7CgogICAgICAgICAgICAgICAgd2hpbGUgKHdpZHRoID4gMCkgewogICAgICAgICAgICAgICAgICAgIHZhciBzbGlkZUluZGV4ID0gdGhpcy5nZXRJbmRleCgtLWogKyBpbmRleCwgaW5kZXgpOwogICAgICAgICAgICAgICAgICAgIHZhciBzbGlkZSA9IHRoaXMuc2xpZGVzW3NsaWRlSW5kZXhdOwoKICAgICAgICAgICAgICAgICAgICBjc3Moc2xpZGUsICdvcmRlcicsIHNsaWRlSW5kZXggPiBpbmRleCA/IC0yIDogLTEpOwogICAgICAgICAgICAgICAgICAgIHdpZHRoIC09IGJvdW5kcyhzbGlkZSkud2lkdGg7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9LAoKICAgICAgICAgICAgZ2V0VmFsaWRJbmRleDogZnVuY3Rpb24oaW5kZXgsIHByZXZJbmRleCkgewogICAgICAgICAgICAgICAgaWYgKCBpbmRleCA9PT0gdm9pZCAwICkgaW5kZXggPSB0aGlzLmluZGV4OwogICAgICAgICAgICAgICAgaWYgKCBwcmV2SW5kZXggPT09IHZvaWQgMCApIHByZXZJbmRleCA9IHRoaXMucHJldkluZGV4OwoKCiAgICAgICAgICAgICAgICBpbmRleCA9IHRoaXMuZ2V0SW5kZXgoaW5kZXgsIHByZXZJbmRleCk7CgogICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNldHMpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdmFyIHByZXY7CgogICAgICAgICAgICAgICAgZG8gewoKICAgICAgICAgICAgICAgICAgICBpZiAoaW5jbHVkZXModGhpcy5zZXRzLCBpbmRleCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgcHJldiA9IGluZGV4OwogICAgICAgICAgICAgICAgICAgIGluZGV4ID0gdGhpcy5nZXRJbmRleChpbmRleCArIHRoaXMuZGlyLCBwcmV2SW5kZXgpOwoKICAgICAgICAgICAgICAgIH0gd2hpbGUgKGluZGV4ICE9PSBwcmV2KTsKCiAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CiAgICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgIH07CgogICAgdmFyIFNsaWRlc2hvd1BhcmFsbGF4ID0gewoKICAgICAgICBtaXhpbnM6IFtQYXJhbGxheF0sCgogICAgICAgIGRhdGE6IHsKICAgICAgICAgICAgc2VsSXRlbTogJyFsaScKICAgICAgICB9LAoKICAgICAgICBjb21wdXRlZDogewoKICAgICAgICAgICAgaXRlbTogZnVuY3Rpb24ocmVmLCAkZWwpIHsKICAgICAgICAgICAgICAgIHZhciBzZWxJdGVtID0gcmVmLnNlbEl0ZW07CgogICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5KHNlbEl0ZW0sICRlbCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgfSwKCiAgICAgICAgZXZlbnRzOiBbCgogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgbmFtZTogJ2l0ZW1zaG93bicsCgogICAgICAgICAgICAgICAgc2VsZjogdHJ1ZSwKCiAgICAgICAgICAgICAgICBlbDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXRlbTsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgaGFuZGxlcjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgY3NzKHRoaXMuJGVsLCB0aGlzLmdldENzcyguNSkpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG5hbWU6ICdpdGVtaW4gaXRlbW91dCcsCgogICAgICAgICAgICAgICAgc2VsZjogdHJ1ZSwKCiAgICAgICAgICAgICAgICBlbDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXRlbTsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgaGFuZGxlcjogZnVuY3Rpb24ocmVmKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSByZWYudHlwZTsKICAgICAgICAgICAgICAgICAgICB2YXIgcmVmX2RldGFpbCA9IHJlZi5kZXRhaWw7CiAgICAgICAgICAgICAgICAgICAgdmFyIHBlcmNlbnQgPSByZWZfZGV0YWlsLnBlcmNlbnQ7CiAgICAgICAgICAgICAgICAgICAgdmFyIGR1cmF0aW9uID0gcmVmX2RldGFpbC5kdXJhdGlvbjsKICAgICAgICAgICAgICAgICAgICB2YXIgdGltaW5nID0gcmVmX2RldGFpbC50aW1pbmc7CiAgICAgICAgICAgICAgICAgICAgdmFyIGRpciA9IHJlZl9kZXRhaWwuZGlyOwoKCiAgICAgICAgICAgICAgICAgICAgVHJhbnNpdGlvbi5jYW5jZWwodGhpcy4kZWwpOwogICAgICAgICAgICAgICAgICAgIGNzcyh0aGlzLiRlbCwgdGhpcy5nZXRDc3MoZ2V0Q3VycmVudCh0eXBlLCBkaXIsIHBlcmNlbnQpKSk7CgogICAgICAgICAgICAgICAgICAgIFRyYW5zaXRpb24uc3RhcnQodGhpcy4kZWwsIHRoaXMuZ2V0Q3NzKGlzSW4odHlwZSkKICAgICAgICAgICAgICAgICAgICAgICAgPyAuNQogICAgICAgICAgICAgICAgICAgICAgICA6IGRpciA+IDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwCiAgICAgICAgICAgICAgICAgICAgKSwgZHVyYXRpb24sIHRpbWluZykuY2F0Y2gobm9vcCk7CgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbmFtZTogJ3RyYW5zaXRpb25jYW5jZWxlZCB0cmFuc2l0aW9uZW5kJywKCiAgICAgICAgICAgICAgICBzZWxmOiB0cnVlLAoKICAgICAgICAgICAgICAgIGVsOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICBUcmFuc2l0aW9uLmNhbmNlbCh0aGlzLiRlbCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9LAoKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbmFtZTogJ2l0ZW10cmFuc2xhdGVpbiBpdGVtdHJhbnNsYXRlb3V0JywKCiAgICAgICAgICAgICAgICBzZWxmOiB0cnVlLAoKICAgICAgICAgICAgICAgIGVsOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbihyZWYpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHJlZi50eXBlOwogICAgICAgICAgICAgICAgICAgIHZhciByZWZfZGV0YWlsID0gcmVmLmRldGFpbDsKICAgICAgICAgICAgICAgICAgICB2YXIgcGVyY2VudCA9IHJlZl9kZXRhaWwucGVyY2VudDsKICAgICAgICAgICAgICAgICAgICB2YXIgZGlyID0gcmVmX2RldGFpbC5kaXI7CgogICAgICAgICAgICAgICAgICAgIFRyYW5zaXRpb24uY2FuY2VsKHRoaXMuJGVsKTsKICAgICAgICAgICAgICAgICAgICBjc3ModGhpcy4kZWwsIHRoaXMuZ2V0Q3NzKGdldEN1cnJlbnQodHlwZSwgZGlyLCBwZXJjZW50KSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgIF0KCiAgICB9OwoKICAgIGZ1bmN0aW9uIGlzSW4odHlwZSkgewogICAgICAgIHJldHVybiBlbmRzV2l0aCh0eXBlLCAnaW4nKTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRDdXJyZW50KHR5cGUsIGRpciwgcGVyY2VudCkgewoKICAgICAgICBwZXJjZW50IC89IDI7CgogICAgICAgIHJldHVybiAhaXNJbih0eXBlKQogICAgICAgICAgICA/IGRpciA8IDAKICAgICAgICAgICAgICAgID8gcGVyY2VudAogICAgICAgICAgICAgICAgOiAxIC0gcGVyY2VudAogICAgICAgICAgICA6IGRpciA8IDAKICAgICAgICAgICAgICAgID8gMSAtIHBlcmNlbnQKICAgICAgICAgICAgICAgIDogcGVyY2VudDsKICAgIH0KCiAgICB2YXIgQW5pbWF0aW9ucyQyID0gYXNzaWduKHt9LCBBbmltYXRpb25zLCB7CgogICAgICAgIGZhZGU6IHsKCiAgICAgICAgICAgIHNob3c6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgICAgICAgICB7b3BhY2l0eTogMCwgekluZGV4OiAwfSwKICAgICAgICAgICAgICAgICAgICB7ekluZGV4OiAtMX0KICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBwZXJjZW50OiBmdW5jdGlvbihjdXJyZW50KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gMSAtIGNzcyhjdXJyZW50LCAnb3BhY2l0eScpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgdHJhbnNsYXRlOiBmdW5jdGlvbihwZXJjZW50KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAgICAgICAgIHtvcGFjaXR5OiAxIC0gcGVyY2VudCwgekluZGV4OiAwfSwKICAgICAgICAgICAgICAgICAgICB7ekluZGV4OiAtMX0KICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgIH0KCiAgICAgICAgfSwKCiAgICAgICAgc2NhbGU6IHsKCiAgICAgICAgICAgIHNob3c6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgICAgICAgICB7b3BhY2l0eTogMCwgdHJhbnNmb3JtOiBzY2FsZTNkKDEgKyAuNSksIHpJbmRleDogMH0sCiAgICAgICAgICAgICAgICAgICAge3pJbmRleDogLTF9CiAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgcGVyY2VudDogZnVuY3Rpb24oY3VycmVudCkgewogICAgICAgICAgICAgICAgcmV0dXJuIDEgLSBjc3MoY3VycmVudCwgJ29wYWNpdHknKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHRyYW5zbGF0ZTogZnVuY3Rpb24ocGVyY2VudCkgewogICAgICAgICAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgICAgICAgICB7b3BhY2l0eTogMSAtIHBlcmNlbnQsIHRyYW5zZm9ybTogc2NhbGUzZCgxICsgLjUgKiBwZXJjZW50KSwgekluZGV4OiAwfSwKICAgICAgICAgICAgICAgICAgICB7ekluZGV4OiAtMX0KICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgIH0KCiAgICAgICAgfSwKCiAgICAgICAgcHVsbDogewoKICAgICAgICAgICAgc2hvdzogZnVuY3Rpb24oZGlyKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZGlyIDwgMAogICAgICAgICAgICAgICAgICAgID8gWwogICAgICAgICAgICAgICAgICAgICAgICB7dHJhbnNmb3JtOiB0cmFuc2xhdGUoMzApLCB6SW5kZXg6IC0xfSwKICAgICAgICAgICAgICAgICAgICAgICAge3RyYW5zZm9ybTogdHJhbnNsYXRlKCksIHpJbmRleDogMH0KICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgOiBbCiAgICAgICAgICAgICAgICAgICAgICAgIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtMTAwKSwgekluZGV4OiAwfSwKICAgICAgICAgICAgICAgICAgICAgICAge3RyYW5zZm9ybTogdHJhbnNsYXRlKCksIHpJbmRleDogLTF9CiAgICAgICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHBlcmNlbnQ6IGZ1bmN0aW9uKGN1cnJlbnQsIG5leHQsIGRpcikgewogICAgICAgICAgICAgICAgcmV0dXJuIGRpciA8IDAKICAgICAgICAgICAgICAgICAgICA/IDEgLSB0cmFuc2xhdGVkKG5leHQpCiAgICAgICAgICAgICAgICAgICAgOiB0cmFuc2xhdGVkKGN1cnJlbnQpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgdHJhbnNsYXRlOiBmdW5jdGlvbihwZXJjZW50LCBkaXIpIHsKICAgICAgICAgICAgICAgIHJldHVybiBkaXIgPCAwCiAgICAgICAgICAgICAgICAgICAgPyBbCiAgICAgICAgICAgICAgICAgICAgICAgIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZSgzMCAqIHBlcmNlbnQpLCB6SW5kZXg6IC0xfSwKICAgICAgICAgICAgICAgICAgICAgICAge3RyYW5zZm9ybTogdHJhbnNsYXRlKC0xMDAgKiAoMSAtIHBlcmNlbnQpKSwgekluZGV4OiAwfQogICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICA6IFsKICAgICAgICAgICAgICAgICAgICAgICAge3RyYW5zZm9ybTogdHJhbnNsYXRlKC1wZXJjZW50ICogMTAwKSwgekluZGV4OiAwfSwKICAgICAgICAgICAgICAgICAgICAgICAge3RyYW5zZm9ybTogdHJhbnNsYXRlKDMwICogKDEgLSBwZXJjZW50KSksIHpJbmRleDogLTF9CiAgICAgICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgfQoKICAgICAgICB9LAoKICAgICAgICBwdXNoOiB7CgogICAgICAgICAgICBzaG93OiBmdW5jdGlvbihkaXIpIHsKICAgICAgICAgICAgICAgIHJldHVybiBkaXIgPCAwCiAgICAgICAgICAgICAgICAgICAgPyBbCiAgICAgICAgICAgICAgICAgICAgICAgIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMDApLCB6SW5kZXg6IDB9LAogICAgICAgICAgICAgICAgICAgICAgICB7dHJhbnNmb3JtOiB0cmFuc2xhdGUoKSwgekluZGV4OiAtMX0KICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgOiBbCiAgICAgICAgICAgICAgICAgICAgICAgIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtMzApLCB6SW5kZXg6IC0xfSwKICAgICAgICAgICAgICAgICAgICAgICAge3RyYW5zZm9ybTogdHJhbnNsYXRlKCksIHpJbmRleDogMH0KICAgICAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgcGVyY2VudDogZnVuY3Rpb24oY3VycmVudCwgbmV4dCwgZGlyKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZGlyID4gMAogICAgICAgICAgICAgICAgICAgID8gMSAtIHRyYW5zbGF0ZWQobmV4dCkKICAgICAgICAgICAgICAgICAgICA6IHRyYW5zbGF0ZWQoY3VycmVudCk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICB0cmFuc2xhdGU6IGZ1bmN0aW9uKHBlcmNlbnQsIGRpcikgewogICAgICAgICAgICAgICAgcmV0dXJuIGRpciA8IDAKICAgICAgICAgICAgICAgICAgICA/IFsKICAgICAgICAgICAgICAgICAgICAgICAge3RyYW5zZm9ybTogdHJhbnNsYXRlKHBlcmNlbnQgKiAxMDApLCB6SW5kZXg6IDB9LAogICAgICAgICAgICAgICAgICAgICAgICB7dHJhbnNmb3JtOiB0cmFuc2xhdGUoLTMwICogKDEgLSBwZXJjZW50KSksIHpJbmRleDogLTF9CiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgIDogWwogICAgICAgICAgICAgICAgICAgICAgICB7dHJhbnNmb3JtOiB0cmFuc2xhdGUoLTMwICogcGVyY2VudCksIHpJbmRleDogLTF9LAogICAgICAgICAgICAgICAgICAgICAgICB7dHJhbnNmb3JtOiB0cmFuc2xhdGUoMTAwICogKDEgLSBwZXJjZW50KSksIHpJbmRleDogMH0KICAgICAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICB9KTsKCiAgICB2YXIgU2xpZGVzaG93JDEgPSB7CgogICAgICAgIG1peGluczogW0NsYXNzLCBTbGlkZXNob3csIFNsaWRlclJlYWN0aXZlXSwKCiAgICAgICAgcHJvcHM6IHsKICAgICAgICAgICAgcmF0aW86IFN0cmluZywKICAgICAgICAgICAgbWluSGVpZ2h0OiBOdW1iZXIsCiAgICAgICAgICAgIG1heEhlaWdodDogTnVtYmVyCiAgICAgICAgfSwKCiAgICAgICAgZGF0YTogewogICAgICAgICAgICByYXRpbzogJzE2OjknLAogICAgICAgICAgICBtaW5IZWlnaHQ6IGZhbHNlLAogICAgICAgICAgICBtYXhIZWlnaHQ6IGZhbHNlLAogICAgICAgICAgICBzZWxMaXN0OiAnLnVrLXNsaWRlc2hvdy1pdGVtcycsCiAgICAgICAgICAgIGF0dHJJdGVtOiAndWstc2xpZGVzaG93LWl0ZW0nLAogICAgICAgICAgICBzZWxOYXY6ICcudWstc2xpZGVzaG93LW5hdicsCiAgICAgICAgICAgIEFuaW1hdGlvbnM6IEFuaW1hdGlvbnMkMgogICAgICAgIH0sCgogICAgICAgIHVwZGF0ZTogewoKICAgICAgICAgICAgcmVhZDogZnVuY3Rpb24oKSB7CgogICAgICAgICAgICAgICAgdmFyIHJlZiA9IHRoaXMucmF0aW8uc3BsaXQoJzonKS5tYXAoTnVtYmVyKTsKICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IHJlZlswXTsKICAgICAgICAgICAgICAgIHZhciBoZWlnaHQgPSByZWZbMV07CgogICAgICAgICAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0ICogdGhpcy5saXN0Lm9mZnNldFdpZHRoIC8gd2lkdGggfHwgMDsKCiAgICAgICAgICAgICAgICBpZiAodGhpcy5taW5IZWlnaHQpIHsKICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPSBNYXRoLm1heCh0aGlzLm1pbkhlaWdodCwgaGVpZ2h0KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXhIZWlnaHQpIHsKICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPSBNYXRoLm1pbih0aGlzLm1heEhlaWdodCwgaGVpZ2h0KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4ge2hlaWdodDogaGVpZ2h0IC0gYm94TW9kZWxBZGp1c3QodGhpcy5saXN0LCAnY29udGVudC1ib3gnKX07CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICB3cml0ZTogZnVuY3Rpb24ocmVmKSB7CiAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gcmVmLmhlaWdodDsKCiAgICAgICAgICAgICAgICBoZWlnaHQgPiAwICYmIGNzcyh0aGlzLmxpc3QsICdtaW5IZWlnaHQnLCBoZWlnaHQpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgZXZlbnRzOiBbJ3Jlc2l6ZSddCgogICAgICAgIH0KCiAgICB9OwoKICAgIHZhciBTb3J0YWJsZSA9IHsKCiAgICAgICAgbWl4aW5zOiBbQ2xhc3MsIEFuaW1hdGVdLAoKICAgICAgICBwcm9wczogewogICAgICAgICAgICBncm91cDogU3RyaW5nLAogICAgICAgICAgICB0aHJlc2hvbGQ6IE51bWJlciwKICAgICAgICAgICAgY2xzSXRlbTogU3RyaW5nLAogICAgICAgICAgICBjbHNQbGFjZWhvbGRlcjogU3RyaW5nLAogICAgICAgICAgICBjbHNEcmFnOiBTdHJpbmcsCiAgICAgICAgICAgIGNsc0RyYWdTdGF0ZTogU3RyaW5nLAogICAgICAgICAgICBjbHNCYXNlOiBTdHJpbmcsCiAgICAgICAgICAgIGNsc05vRHJhZzogU3RyaW5nLAogICAgICAgICAgICBjbHNFbXB0eTogU3RyaW5nLAogICAgICAgICAgICBjbHNDdXN0b206IFN0cmluZywKICAgICAgICAgICAgaGFuZGxlOiBTdHJpbmcKICAgICAgICB9LAoKICAgICAgICBkYXRhOiB7CiAgICAgICAgICAgIGdyb3VwOiBmYWxzZSwKICAgICAgICAgICAgdGhyZXNob2xkOiA1LAogICAgICAgICAgICBjbHNJdGVtOiAndWstc29ydGFibGUtaXRlbScsCiAgICAgICAgICAgIGNsc1BsYWNlaG9sZGVyOiAndWstc29ydGFibGUtcGxhY2Vob2xkZXInLAogICAgICAgICAgICBjbHNEcmFnOiAndWstc29ydGFibGUtZHJhZycsCiAgICAgICAgICAgIGNsc0RyYWdTdGF0ZTogJ3VrLWRyYWcnLAogICAgICAgICAgICBjbHNCYXNlOiAndWstc29ydGFibGUnLAogICAgICAgICAgICBjbHNOb0RyYWc6ICd1ay1zb3J0YWJsZS1ub2RyYWcnLAogICAgICAgICAgICBjbHNFbXB0eTogJ3VrLXNvcnRhYmxlLWVtcHR5JywKICAgICAgICAgICAgY2xzQ3VzdG9tOiAnJywKICAgICAgICAgICAgaGFuZGxlOiBmYWxzZQogICAgICAgIH0sCgogICAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpczsKCiAgICAgICAgICAgIFsnaW5pdCcsICdzdGFydCcsICdtb3ZlJywgJ2VuZCddLmZvckVhY2goZnVuY3Rpb24gKGtleSkgewogICAgICAgICAgICAgICAgdmFyIGZuID0gdGhpcyQxW2tleV07CiAgICAgICAgICAgICAgICB0aGlzJDFba2V5XSA9IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcyQxLnNjcm9sbFkgPSB3aW5kb3cucGFnZVlPZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgdmFyIHJlZiA9IGdldEV2ZW50UG9zKGUsICdwYWdlJyk7CiAgICAgICAgICAgICAgICAgICAgdmFyIHggPSByZWYueDsKICAgICAgICAgICAgICAgICAgICB2YXIgeSA9IHJlZi55OwogICAgICAgICAgICAgICAgICAgIHRoaXMkMS5wb3MgPSB7eDogeCwgeTogeX07CgogICAgICAgICAgICAgICAgICAgIGZuKGUpOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfSwKCiAgICAgICAgZXZlbnRzOiB7CgogICAgICAgICAgICBuYW1lOiBwb2ludGVyRG93biwKICAgICAgICAgICAgcGFzc2l2ZTogZmFsc2UsCiAgICAgICAgICAgIGhhbmRsZXI6ICdpbml0JwoKICAgICAgICB9LAoKICAgICAgICB1cGRhdGU6IHsKCiAgICAgICAgICAgIHdyaXRlOiBmdW5jdGlvbigpIHsKCiAgICAgICAgICAgICAgICBpZiAodGhpcy5jbHNFbXB0eSkgewogICAgICAgICAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHRoaXMuJGVsLCB0aGlzLmNsc0VtcHR5LCBpc0VtcHR5KHRoaXMuJGVsLmNoaWxkcmVuKSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgY3NzKHRoaXMuaGFuZGxlID8gJCQodGhpcy5oYW5kbGUsIHRoaXMuJGVsKSA6IHRoaXMuJGVsLmNoaWxkcmVuLCB7dG91Y2hBY3Rpb246ICdub25lJywgdXNlclNlbGVjdDogJ25vbmUnfSk7CgogICAgICAgICAgICAgICAgaWYgKHRoaXMuZHJhZykgewoKICAgICAgICAgICAgICAgICAgICAvLyBjbGFtcCB0byB2aWV3cG9ydAogICAgICAgICAgICAgICAgICAgIHZhciByZWYgPSBvZmZzZXQod2luZG93KTsKICAgICAgICAgICAgICAgICAgICB2YXIgcmlnaHQgPSByZWYucmlnaHQ7CiAgICAgICAgICAgICAgICAgICAgdmFyIGJvdHRvbSA9IHJlZi5ib3R0b207CiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0KHRoaXMuZHJhZywgewogICAgICAgICAgICAgICAgICAgICAgICB0b3A6IGNsYW1wKHRoaXMucG9zLnkgKyB0aGlzLm9yaWdpbi50b3AsIDAsIGJvdHRvbSAtIHRoaXMuZHJhZy5vZmZzZXRIZWlnaHQpLAogICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiBjbGFtcCh0aGlzLnBvcy54ICsgdGhpcy5vcmlnaW4ubGVmdCwgMCwgcmlnaHQgLSB0aGlzLmRyYWcub2Zmc2V0V2lkdGgpCiAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgIHRyYWNrU2Nyb2xsKHRoaXMucG9zKTsKCiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9CgogICAgICAgIH0sCgogICAgICAgIG1ldGhvZHM6IHsKCiAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uKGUpIHsKCiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gZS50YXJnZXQ7CiAgICAgICAgICAgICAgICB2YXIgYnV0dG9uID0gZS5idXR0b247CiAgICAgICAgICAgICAgICB2YXIgZGVmYXVsdFByZXZlbnRlZCA9IGUuZGVmYXVsdFByZXZlbnRlZDsKICAgICAgICAgICAgICAgIHZhciByZWYgPSB0b05vZGVzKHRoaXMuJGVsLmNoaWxkcmVuKS5maWx0ZXIoZnVuY3Rpb24gKGVsKSB7IHJldHVybiB3aXRoaW4odGFyZ2V0LCBlbCk7IH0pOwogICAgICAgICAgICAgICAgdmFyIHBsYWNlaG9sZGVyID0gcmVmWzBdOwoKICAgICAgICAgICAgICAgIGlmICghcGxhY2Vob2xkZXIKICAgICAgICAgICAgICAgICAgICB8fCBkZWZhdWx0UHJldmVudGVkCiAgICAgICAgICAgICAgICAgICAgfHwgYnV0dG9uID4gMAogICAgICAgICAgICAgICAgICAgIHx8IGlzSW5wdXQodGFyZ2V0KQogICAgICAgICAgICAgICAgICAgIHx8IHdpdGhpbih0YXJnZXQsICgiLiIgKyAodGhpcy5jbHNOb0RyYWcpKSkKICAgICAgICAgICAgICAgICAgICB8fCB0aGlzLmhhbmRsZSAmJiAhd2l0aGluKHRhcmdldCwgdGhpcy5oYW5kbGUpCiAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwoKICAgICAgICAgICAgICAgIHRoaXMudG91Y2hlZCA9IFt0aGlzXTsKICAgICAgICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlcjsKICAgICAgICAgICAgICAgIHRoaXMub3JpZ2luID0gYXNzaWduKHt0YXJnZXQ6IHRhcmdldCwgaW5kZXg6IGluZGV4KHBsYWNlaG9sZGVyKX0sIHRoaXMucG9zKTsKCiAgICAgICAgICAgICAgICBvbihkb2N1bWVudCwgcG9pbnRlck1vdmUsIHRoaXMubW92ZSk7CiAgICAgICAgICAgICAgICBvbihkb2N1bWVudCwgcG9pbnRlclVwLCB0aGlzLmVuZCk7CiAgICAgICAgICAgICAgICBvbih3aW5kb3csICdzY3JvbGwnLCB0aGlzLnNjcm9sbCk7CgogICAgICAgICAgICAgICAgaWYgKCF0aGlzLnRocmVzaG9sZCkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnQoZSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9LAoKICAgICAgICAgICAgc3RhcnQ6IGZ1bmN0aW9uKGUpIHsKCiAgICAgICAgICAgICAgICB0aGlzLmRyYWcgPSBhcHBlbmQodGhpcy4kY29udGFpbmVyLCB0aGlzLnBsYWNlaG9sZGVyLm91dGVySFRNTC5yZXBsYWNlKC9ePGxpL2ksICc8ZGl2JykucmVwbGFjZSgvbGk+JC9pLCAnZGl2PicpKTsKCiAgICAgICAgICAgICAgICBjc3ModGhpcy5kcmFnLCBhc3NpZ24oewogICAgICAgICAgICAgICAgICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnLAogICAgICAgICAgICAgICAgICAgIHdpZHRoOiB0aGlzLnBsYWNlaG9sZGVyLm9mZnNldFdpZHRoLAogICAgICAgICAgICAgICAgICAgIGhlaWdodDogdGhpcy5wbGFjZWhvbGRlci5vZmZzZXRIZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nCiAgICAgICAgICAgICAgICB9LCBjc3ModGhpcy5wbGFjZWhvbGRlciwgWydwYWRkaW5nTGVmdCcsICdwYWRkaW5nUmlnaHQnLCAncGFkZGluZ1RvcCcsICdwYWRkaW5nQm90dG9tJ10pKSk7CiAgICAgICAgICAgICAgICBhdHRyKHRoaXMuZHJhZywgJ3VrLW5vLWJvb3QnLCAnJyk7CiAgICAgICAgICAgICAgICBhZGRDbGFzcyh0aGlzLmRyYWcsIHRoaXMuY2xzRHJhZywgdGhpcy5jbHNDdXN0b20pOwoKICAgICAgICAgICAgICAgIGhlaWdodCh0aGlzLmRyYWcuZmlyc3RFbGVtZW50Q2hpbGQsIGhlaWdodCh0aGlzLnBsYWNlaG9sZGVyLmZpcnN0RWxlbWVudENoaWxkKSk7CgogICAgICAgICAgICAgICAgdmFyIHJlZiA9IG9mZnNldCh0aGlzLnBsYWNlaG9sZGVyKTsKICAgICAgICAgICAgICAgIHZhciBsZWZ0ID0gcmVmLmxlZnQ7CiAgICAgICAgICAgICAgICB2YXIgdG9wID0gcmVmLnRvcDsKICAgICAgICAgICAgICAgIGFzc2lnbih0aGlzLm9yaWdpbiwge2xlZnQ6IGxlZnQgLSB0aGlzLnBvcy54LCB0b3A6IHRvcCAtIHRoaXMucG9zLnl9KTsKCiAgICAgICAgICAgICAgICBhZGRDbGFzcyh0aGlzLnBsYWNlaG9sZGVyLCB0aGlzLmNsc1BsYWNlaG9sZGVyKTsKICAgICAgICAgICAgICAgIGFkZENsYXNzKHRoaXMuJGVsLmNoaWxkcmVuLCB0aGlzLmNsc0l0ZW0pOwogICAgICAgICAgICAgICAgYWRkQ2xhc3MoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCB0aGlzLmNsc0RyYWdTdGF0ZSk7CgogICAgICAgICAgICAgICAgdHJpZ2dlcih0aGlzLiRlbCwgJ3N0YXJ0JywgW3RoaXMsIHRoaXMucGxhY2Vob2xkZXJdKTsKCiAgICAgICAgICAgICAgICB0aGlzLm1vdmUoZSk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBtb3ZlOiBmdW5jdGlvbihlKSB7CgogICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRyYWcpIHsKCiAgICAgICAgICAgICAgICAgICAgaWYgKE1hdGguYWJzKHRoaXMucG9zLnggLSB0aGlzLm9yaWdpbi54KSA+IHRoaXMudGhyZXNob2xkIHx8IE1hdGguYWJzKHRoaXMucG9zLnkgLSB0aGlzLm9yaWdpbi55KSA+IHRoaXMudGhyZXNob2xkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnQoZSk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgpOwoKICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSBlLnR5cGUgPT09ICdtb3VzZW1vdmUnID8gZS50YXJnZXQgOiBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KHRoaXMucG9zLnggLSB3aW5kb3cucGFnZVhPZmZzZXQsIHRoaXMucG9zLnkgLSB3aW5kb3cucGFnZVlPZmZzZXQpOwoKICAgICAgICAgICAgICAgIHZhciBzb3J0YWJsZSA9IHRoaXMuZ2V0U29ydGFibGUodGFyZ2V0KTsKICAgICAgICAgICAgICAgIHZhciBwcmV2aW91cyA9IHRoaXMuZ2V0U29ydGFibGUodGhpcy5wbGFjZWhvbGRlcik7CiAgICAgICAgICAgICAgICB2YXIgbW92ZSA9IHNvcnRhYmxlICE9PSBwcmV2aW91czsKCiAgICAgICAgICAgICAgICBpZiAoIXNvcnRhYmxlIHx8IHdpdGhpbih0YXJnZXQsIHRoaXMucGxhY2Vob2xkZXIpIHx8IG1vdmUgJiYgKCFzb3J0YWJsZS5ncm91cCB8fCBzb3J0YWJsZS5ncm91cCAhPT0gcHJldmlvdXMuZ3JvdXApKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRhcmdldCA9IHNvcnRhYmxlLiRlbCA9PT0gdGFyZ2V0LnBhcmVudE5vZGUgJiYgdGFyZ2V0IHx8IHRvTm9kZXMoc29ydGFibGUuJGVsLmNoaWxkcmVuKS5maWx0ZXIoZnVuY3Rpb24gKGVsZW1lbnQpIHsgcmV0dXJuIHdpdGhpbih0YXJnZXQsIGVsZW1lbnQpOyB9KVswXTsKCiAgICAgICAgICAgICAgICBpZiAobW92ZSkgewogICAgICAgICAgICAgICAgICAgIHByZXZpb3VzLnJlbW92ZSh0aGlzLnBsYWNlaG9sZGVyKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRhcmdldCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBzb3J0YWJsZS5pbnNlcnQodGhpcy5wbGFjZWhvbGRlciwgdGFyZ2V0KTsKCiAgICAgICAgICAgICAgICBpZiAoIWluY2x1ZGVzKHRoaXMudG91Y2hlZCwgc29ydGFibGUpKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy50b3VjaGVkLnB1c2goc29ydGFibGUpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGVuZDogZnVuY3Rpb24oZSkgewoKICAgICAgICAgICAgICAgIG9mZihkb2N1bWVudCwgcG9pbnRlck1vdmUsIHRoaXMubW92ZSk7CiAgICAgICAgICAgICAgICBvZmYoZG9jdW1lbnQsIHBvaW50ZXJVcCwgdGhpcy5lbmQpOwogICAgICAgICAgICAgICAgb2ZmKHdpbmRvdywgJ3Njcm9sbCcsIHRoaXMuc2Nyb2xsKTsKCiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZHJhZykgewogICAgICAgICAgICAgICAgICAgIGlmIChlLnR5cGUgPT09ICd0b3VjaGVuZCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZS50YXJnZXQuY2xpY2soKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB1bnRyYWNrU2Nyb2xsKCk7CgogICAgICAgICAgICAgICAgdmFyIHNvcnRhYmxlID0gdGhpcy5nZXRTb3J0YWJsZSh0aGlzLnBsYWNlaG9sZGVyKTsKCiAgICAgICAgICAgICAgICBpZiAodGhpcyA9PT0gc29ydGFibGUpIHsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcmlnaW4uaW5kZXggIT09IGluZGV4KHRoaXMucGxhY2Vob2xkZXIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIodGhpcy4kZWwsICdtb3ZlZCcsIFt0aGlzLCB0aGlzLnBsYWNlaG9sZGVyXSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKHNvcnRhYmxlLiRlbCwgJ2FkZGVkJywgW3NvcnRhYmxlLCB0aGlzLnBsYWNlaG9sZGVyXSk7CiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcih0aGlzLiRlbCwgJ3JlbW92ZWQnLCBbdGhpcywgdGhpcy5wbGFjZWhvbGRlcl0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRyaWdnZXIodGhpcy4kZWwsICdzdG9wJywgW3RoaXMsIHRoaXMucGxhY2Vob2xkZXJdKTsKCiAgICAgICAgICAgICAgICByZW1vdmUodGhpcy5kcmFnKTsKICAgICAgICAgICAgICAgIHRoaXMuZHJhZyA9IG51bGw7CgogICAgICAgICAgICAgICAgdmFyIGNsYXNzZXMgPSB0aGlzLnRvdWNoZWQubWFwKGZ1bmN0aW9uIChzb3J0YWJsZSkgeyByZXR1cm4gKChzb3J0YWJsZS5jbHNQbGFjZWhvbGRlcikgKyAiICIgKyAoc29ydGFibGUuY2xzSXRlbSkpOyB9KS5qb2luKCcgJyk7CiAgICAgICAgICAgICAgICB0aGlzLnRvdWNoZWQuZm9yRWFjaChmdW5jdGlvbiAoc29ydGFibGUpIHsgcmV0dXJuIHJlbW92ZUNsYXNzKHNvcnRhYmxlLiRlbC5jaGlsZHJlbiwgY2xhc3Nlcyk7IH0pOwoKICAgICAgICAgICAgICAgIHJlbW92ZUNsYXNzKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgdGhpcy5jbHNEcmFnU3RhdGUpOwoKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHNjcm9sbDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB2YXIgc2Nyb2xsID0gd2luZG93LnBhZ2VZT2Zmc2V0OwogICAgICAgICAgICAgICAgaWYgKHNjcm9sbCAhPT0gdGhpcy5zY3JvbGxZKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3MueSArPSBzY3JvbGwgLSB0aGlzLnNjcm9sbFk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxZID0gc2Nyb2xsOwogICAgICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGluc2VydDogZnVuY3Rpb24oZWxlbWVudCwgdGFyZ2V0KSB7CiAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpczsKCgogICAgICAgICAgICAgICAgYWRkQ2xhc3ModGhpcy4kZWwuY2hpbGRyZW4sIHRoaXMuY2xzSXRlbSk7CgogICAgICAgICAgICAgICAgdmFyIGluc2VydCA9IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3aXRoaW4oZWxlbWVudCwgdGhpcyQxLiRlbCkgfHwgaXNQcmVkZWNlc3NvcihlbGVtZW50LCB0YXJnZXQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUodGFyZ2V0LCBlbGVtZW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyKHRhcmdldCwgZWxlbWVudCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kKHRoaXMkMS4kZWwsIGVsZW1lbnQpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIGlmICh0aGlzLmFuaW1hdGlvbikgewogICAgICAgICAgICAgICAgICAgIHRoaXMuYW5pbWF0ZShpbnNlcnQpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpbnNlcnQoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICByZW1vdmU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKCiAgICAgICAgICAgICAgICBpZiAoIXdpdGhpbihlbGVtZW50LCB0aGlzLiRlbCkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgY3NzKHRoaXMuaGFuZGxlID8gJCQodGhpcy5oYW5kbGUsIGVsZW1lbnQpIDogZWxlbWVudCwge3RvdWNoQWN0aW9uOiAnJywgdXNlclNlbGVjdDogJyd9KTsKCiAgICAgICAgICAgICAgICBpZiAodGhpcy5hbmltYXRpb24pIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmFuaW1hdGUoZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVtb3ZlKGVsZW1lbnQpOyB9KTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlKGVsZW1lbnQpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGdldFNvcnRhYmxlOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudCAmJiAodGhpcy4kZ2V0Q29tcG9uZW50KGVsZW1lbnQsICdzb3J0YWJsZScpIHx8IHRoaXMuZ2V0U29ydGFibGUoZWxlbWVudC5wYXJlbnROb2RlKSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgIH07CgogICAgZnVuY3Rpb24gaXNQcmVkZWNlc3NvcihlbGVtZW50LCB0YXJnZXQpIHsKICAgICAgICByZXR1cm4gZWxlbWVudC5wYXJlbnROb2RlID09PSB0YXJnZXQucGFyZW50Tm9kZSAmJiBpbmRleChlbGVtZW50KSA+IGluZGV4KHRhcmdldCk7CiAgICB9CgogICAgdmFyIHRyYWNrVGltZXI7CiAgICBmdW5jdGlvbiB0cmFja1Njcm9sbChyZWYpIHsKICAgICAgICB2YXIgeCA9IHJlZi54OwogICAgICAgIHZhciB5ID0gcmVmLnk7CgoKICAgICAgICBjbGVhclRpbWVvdXQodHJhY2tUaW1lcik7CgogICAgICAgIHNjcm9sbFBhcmVudHMoZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludCh4IC0gd2luZG93LnBhZ2VYT2Zmc2V0LCB5IC0gd2luZG93LnBhZ2VZT2Zmc2V0KSkuc29tZShmdW5jdGlvbiAoc2Nyb2xsRWwpIHsKCiAgICAgICAgICAgIHZhciBzY3JvbGwgPSBzY3JvbGxFbC5zY3JvbGxUb3A7CiAgICAgICAgICAgIHZhciBzY3JvbGxIZWlnaHQgPSBzY3JvbGxFbC5zY3JvbGxIZWlnaHQ7CgogICAgICAgICAgICBpZiAoZ2V0U2Nyb2xsaW5nRWxlbWVudCgpID09PSBzY3JvbGxFbCkgewogICAgICAgICAgICAgICAgc2Nyb2xsRWwgPSB3aW5kb3c7CiAgICAgICAgICAgICAgICBzY3JvbGxIZWlnaHQgLT0gd2luZG93LmlubmVySGVpZ2h0OwogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgcmVmID0gb2Zmc2V0KHNjcm9sbEVsKTsKICAgICAgICAgICAgdmFyIHRvcCA9IHJlZi50b3A7CiAgICAgICAgICAgIHZhciBib3R0b20gPSByZWYuYm90dG9tOwoKICAgICAgICAgICAgaWYgKHRvcCA8IHkgJiYgdG9wICsgMzAgPiB5KSB7CiAgICAgICAgICAgICAgICBzY3JvbGwgLT0gNTsKICAgICAgICAgICAgfSBlbHNlIGlmIChib3R0b20gPiB5ICYmIGJvdHRvbSAtIDIwIDwgeSkgewogICAgICAgICAgICAgICAgc2Nyb2xsICs9IDU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChzY3JvbGwgPiAwICYmIHNjcm9sbCA8IHNjcm9sbEhlaWdodCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRyYWNrVGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb3Aoc2Nyb2xsRWwsIHNjcm9sbCk7CiAgICAgICAgICAgICAgICAgICAgdHJhY2tTY3JvbGwoe3g6IHgsIHk6IHl9KTsKICAgICAgICAgICAgICAgIH0sIDEwKTsKICAgICAgICAgICAgfQoKICAgICAgICB9KTsKCiAgICB9CgogICAgZnVuY3Rpb24gdW50cmFja1Njcm9sbCgpIHsKICAgICAgICBjbGVhclRpbWVvdXQodHJhY2tUaW1lcik7CiAgICB9CgogICAgdmFyIG92ZXJmbG93UmUgPSAvYXV0b3xzY3JvbGwvOwoKICAgIGZ1bmN0aW9uIHNjcm9sbFBhcmVudHMoZWxlbWVudCkgewogICAgICAgIHZhciBzY3JvbGxFbCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoKTsKICAgICAgICByZXR1cm4gcGFyZW50cyQxKGVsZW1lbnQsIGZ1bmN0aW9uIChwYXJlbnQpIHsgcmV0dXJuIHBhcmVudCA9PT0gc2Nyb2xsRWwgfHwgb3ZlcmZsb3dSZS50ZXN0KGNzcyhwYXJlbnQsICdvdmVyZmxvdycpKTsgfSk7CiAgICB9CgogICAgZnVuY3Rpb24gcGFyZW50cyQxKGVsZW1lbnQsIGZuKSB7CiAgICAgICAgdmFyIHBhcmVudHMgPSBbXTsKICAgICAgICBkbyB7CiAgICAgICAgICAgIGlmIChmbihlbGVtZW50KSkgewogICAgICAgICAgICAgICAgcGFyZW50cy51bnNoaWZ0KGVsZW1lbnQpOwogICAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSAoZWxlbWVudCAmJiAoZWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudCkpOwogICAgICAgIHJldHVybiBwYXJlbnRzOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldFNjcm9sbGluZ0VsZW1lbnQoKSB7CiAgICAgICAgcmV0dXJuIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OwogICAgfQoKICAgIHZhciBvYmokMTsKCiAgICB2YXIgYWN0aXZlcyA9IFtdOwoKICAgIHZhciBUb29sdGlwID0gewoKICAgICAgICBtaXhpbnM6IFtDb250YWluZXIsIFRvZ2dsYWJsZSwgUG9zaXRpb25dLAoKICAgICAgICBhcmdzOiAndGl0bGUnLAoKICAgICAgICBwcm9wczogewogICAgICAgICAgICBkZWxheTogTnVtYmVyLAogICAgICAgICAgICB0aXRsZTogU3RyaW5nCiAgICAgICAgfSwKCiAgICAgICAgZGF0YTogewogICAgICAgICAgICBwb3M6ICd0b3AnLAogICAgICAgICAgICB0aXRsZTogJycsCiAgICAgICAgICAgIGRlbGF5OiAwLAogICAgICAgICAgICBhbmltYXRpb246IFsndWstYW5pbWF0aW9uLXNjYWxlLXVwJ10sCiAgICAgICAgICAgIGR1cmF0aW9uOiAxMDAsCiAgICAgICAgICAgIGNsczogJ3VrLWFjdGl2ZScsCiAgICAgICAgICAgIGNsc1BvczogJ3VrLXRvb2x0aXAnCiAgICAgICAgfSwKCiAgICAgICAgYmVmb3JlQ29ubmVjdDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHRoaXMuX2hhc1RpdGxlID0gaGFzQXR0cih0aGlzLiRlbCwgJ3RpdGxlJyk7CiAgICAgICAgICAgIGF0dHIodGhpcy4kZWwsIHt0aXRsZTogJycsICdhcmlhLWV4cGFuZGVkJzogZmFsc2V9KTsKICAgICAgICB9LAoKICAgICAgICBkaXNjb25uZWN0ZWQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB0aGlzLmhpZGUoKTsKICAgICAgICAgICAgYXR0cih0aGlzLiRlbCwge3RpdGxlOiB0aGlzLl9oYXNUaXRsZSA/IHRoaXMudGl0bGUgOiBudWxsLCAnYXJpYS1leHBhbmRlZCc6IG51bGx9KTsKICAgICAgICB9LAoKICAgICAgICBtZXRob2RzOiB7CgogICAgICAgICAgICBzaG93OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzOwoKCiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0FjdGl2ZSgpIHx8ICF0aGlzLnRpdGxlKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGFjdGl2ZXMuZm9yRWFjaChmdW5jdGlvbiAoYWN0aXZlKSB7IHJldHVybiBhY3RpdmUuaGlkZSgpOyB9KTsKICAgICAgICAgICAgICAgIGFjdGl2ZXMucHVzaCh0aGlzKTsKCiAgICAgICAgICAgICAgICB0aGlzLl91bmJpbmQgPSBvbihkb2N1bWVudCwgcG9pbnRlclVwLCBmdW5jdGlvbiAoZSkgeyByZXR1cm4gIXdpdGhpbihlLnRhcmdldCwgdGhpcyQxLiRlbCkgJiYgdGhpcyQxLmhpZGUoKTsgfSk7CgogICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc2hvd1RpbWVyKTsKICAgICAgICAgICAgICAgIHRoaXMuc2hvd1RpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcyQxLl9zaG93KCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcyQxLmhpZGVUaW1lciA9IHNldEludGVydmFsKGZ1bmN0aW9uICgpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNWaXNpYmxlKHRoaXMkMS4kZWwpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzJDEuaGlkZSgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIH0sIDE1MCk7CiAgICAgICAgICAgICAgICB9LCB0aGlzLmRlbGF5KTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGhpZGU6IGZ1bmN0aW9uKCkgewoKICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0FjdGl2ZSgpIHx8IG1hdGNoZXModGhpcy4kZWwsICdpbnB1dDpmb2N1cycpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGFjdGl2ZXMuc3BsaWNlKGFjdGl2ZXMuaW5kZXhPZih0aGlzKSwgMSk7CgogICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc2hvd1RpbWVyKTsKICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5oaWRlVGltZXIpOwogICAgICAgICAgICAgICAgYXR0cih0aGlzLiRlbCwgJ2FyaWEtZXhwYW5kZWQnLCBmYWxzZSk7CiAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUVsZW1lbnQodGhpcy50b29sdGlwLCBmYWxzZSk7CiAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXAgJiYgcmVtb3ZlKHRoaXMudG9vbHRpcCk7CiAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXAgPSBmYWxzZTsKICAgICAgICAgICAgICAgIHRoaXMuX3VuYmluZCgpOwoKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIF9zaG93OiBmdW5jdGlvbigpIHsKCiAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXAgPSBhcHBlbmQodGhpcy5jb250YWluZXIsCiAgICAgICAgICAgICAgICAgICAgKCI8ZGl2IGNsYXNzPVwiIiArICh0aGlzLmNsc1BvcykgKyAiXCIgYXJpYS1leHBhbmRlZD1cInRydWVcIiBhcmlhLWhpZGRlbj4gPGRpdiBjbGFzcz1cIiIgKyAodGhpcy5jbHNQb3MpICsgIi1pbm5lclwiPiIgKyAodGhpcy50aXRsZSkgKyAiPC9kaXY+IDwvZGl2PiIpCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIHRoaXMucG9zaXRpb25BdCh0aGlzLnRvb2x0aXAsIHRoaXMuJGVsKTsKCiAgICAgICAgICAgICAgICB0aGlzLm9yaWdpbiA9IHRoaXMuZ2V0QXhpcygpID09PSAneScKICAgICAgICAgICAgICAgICAgICA/ICgoZmxpcFBvc2l0aW9uKHRoaXMuZGlyKSkgKyAiLSIgKyAodGhpcy5hbGlnbikpCiAgICAgICAgICAgICAgICAgICAgOiAoKHRoaXMuYWxpZ24pICsgIi0iICsgKGZsaXBQb3NpdGlvbih0aGlzLmRpcikpKTsKCiAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUVsZW1lbnQodGhpcy50b29sdGlwLCB0cnVlKTsKCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBpc0FjdGl2ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gaW5jbHVkZXMoYWN0aXZlcywgdGhpcyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgfSwKCiAgICAgICAgZXZlbnRzOiAoIG9iaiQxID0gewoKICAgICAgICAgICAgZm9jdXM6ICdzaG93JywKICAgICAgICAgICAgYmx1cjogJ2hpZGUnCgogICAgICAgIH0sIG9iaiQxWyhwb2ludGVyRW50ZXIgKyAiICIgKyBwb2ludGVyTGVhdmUpXSA9IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICBpZiAoaXNUb3VjaChlKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGUudHlwZSA9PT0gcG9pbnRlckVudGVyCiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnNob3coKQogICAgICAgICAgICAgICAgICAgIDogdGhpcy5oaWRlKCk7CiAgICAgICAgICAgIH0sIG9iaiQxW3BvaW50ZXJEb3duXSA9IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICBpZiAoIWlzVG91Y2goZSkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0aGlzLmlzQWN0aXZlKCkKICAgICAgICAgICAgICAgICAgICA/IHRoaXMuaGlkZSgpCiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnNob3coKTsKICAgICAgICAgICAgfSwgb2JqJDEgKQoKICAgIH07CgogICAgdmFyIFVwbG9hZCA9IHsKCiAgICAgICAgcHJvcHM6IHsKICAgICAgICAgICAgYWxsb3c6IFN0cmluZywKICAgICAgICAgICAgY2xzRHJhZ292ZXI6IFN0cmluZywKICAgICAgICAgICAgY29uY3VycmVudDogTnVtYmVyLAogICAgICAgICAgICBtYXhTaXplOiBOdW1iZXIsCiAgICAgICAgICAgIG1ldGhvZDogU3RyaW5nLAogICAgICAgICAgICBtaW1lOiBTdHJpbmcsCiAgICAgICAgICAgIG1zZ0ludmFsaWRNaW1lOiBTdHJpbmcsCiAgICAgICAgICAgIG1zZ0ludmFsaWROYW1lOiBTdHJpbmcsCiAgICAgICAgICAgIG1zZ0ludmFsaWRTaXplOiBTdHJpbmcsCiAgICAgICAgICAgIG11bHRpcGxlOiBCb29sZWFuLAogICAgICAgICAgICBuYW1lOiBTdHJpbmcsCiAgICAgICAgICAgIHBhcmFtczogT2JqZWN0LAogICAgICAgICAgICB0eXBlOiBTdHJpbmcsCiAgICAgICAgICAgIHVybDogU3RyaW5nCiAgICAgICAgfSwKCiAgICAgICAgZGF0YTogewogICAgICAgICAgICBhbGxvdzogZmFsc2UsCiAgICAgICAgICAgIGNsc0RyYWdvdmVyOiAndWstZHJhZ292ZXInLAogICAgICAgICAgICBjb25jdXJyZW50OiAxLAogICAgICAgICAgICBtYXhTaXplOiAwLAogICAgICAgICAgICBtZXRob2Q6ICdQT1NUJywKICAgICAgICAgICAgbWltZTogZmFsc2UsCiAgICAgICAgICAgIG1zZ0ludmFsaWRNaW1lOiAnSW52YWxpZCBGaWxlIFR5cGU6ICVzJywKICAgICAgICAgICAgbXNnSW52YWxpZE5hbWU6ICdJbnZhbGlkIEZpbGUgTmFtZTogJXMnLAogICAgICAgICAgICBtc2dJbnZhbGlkU2l6ZTogJ0ludmFsaWQgRmlsZSBTaXplOiAlcyBLaWxvYnl0ZXMgTWF4JywKICAgICAgICAgICAgbXVsdGlwbGU6IGZhbHNlLAogICAgICAgICAgICBuYW1lOiAnZmlsZXNbXScsCiAgICAgICAgICAgIHBhcmFtczoge30sCiAgICAgICAgICAgIHR5cGU6ICcnLAogICAgICAgICAgICB1cmw6ICcnLAogICAgICAgICAgICBhYm9ydDogbm9vcCwKICAgICAgICAgICAgYmVmb3JlQWxsOiBub29wLAogICAgICAgICAgICBiZWZvcmVTZW5kOiBub29wLAogICAgICAgICAgICBjb21wbGV0ZTogbm9vcCwKICAgICAgICAgICAgY29tcGxldGVBbGw6IG5vb3AsCiAgICAgICAgICAgIGVycm9yOiBub29wLAogICAgICAgICAgICBmYWlsOiBub29wLAogICAgICAgICAgICBsb2FkOiBub29wLAogICAgICAgICAgICBsb2FkRW5kOiBub29wLAogICAgICAgICAgICBsb2FkU3RhcnQ6IG5vb3AsCiAgICAgICAgICAgIHByb2dyZXNzOiBub29wCiAgICAgICAgfSwKCiAgICAgICAgZXZlbnRzOiB7CgogICAgICAgICAgICBjaGFuZ2U6IGZ1bmN0aW9uKGUpIHsKCiAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXMoZS50YXJnZXQsICdpbnB1dFt0eXBlPSJmaWxlIl0nKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CgogICAgICAgICAgICAgICAgaWYgKGUudGFyZ2V0LmZpbGVzKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWQoZS50YXJnZXQuZmlsZXMpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGUudGFyZ2V0LnZhbHVlID0gJyc7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBkcm9wOiBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICBzdG9wKGUpOwoKICAgICAgICAgICAgICAgIHZhciB0cmFuc2ZlciA9IGUuZGF0YVRyYW5zZmVyOwoKICAgICAgICAgICAgICAgIGlmICghdHJhbnNmZXIgfHwgIXRyYW5zZmVyLmZpbGVzKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJlbW92ZUNsYXNzKHRoaXMuJGVsLCB0aGlzLmNsc0RyYWdvdmVyKTsKCiAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZCh0cmFuc2Zlci5maWxlcyk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBkcmFnZW50ZXI6IGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICAgIHN0b3AoZSk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBkcmFnb3ZlcjogZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgICAgc3RvcChlKTsKICAgICAgICAgICAgICAgIGFkZENsYXNzKHRoaXMuJGVsLCB0aGlzLmNsc0RyYWdvdmVyKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGRyYWdsZWF2ZTogZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgICAgc3RvcChlKTsKICAgICAgICAgICAgICAgIHJlbW92ZUNsYXNzKHRoaXMuJGVsLCB0aGlzLmNsc0RyYWdvdmVyKTsKICAgICAgICAgICAgfQoKICAgICAgICB9LAoKICAgICAgICBtZXRob2RzOiB7CgogICAgICAgICAgICB1cGxvYWQ6IGZ1bmN0aW9uKGZpbGVzKSB7CiAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpczsKCgogICAgICAgICAgICAgICAgaWYgKCFmaWxlcy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdHJpZ2dlcih0aGlzLiRlbCwgJ3VwbG9hZCcsIFtmaWxlc10pOwoKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHsKCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF4U2l6ZSAmJiB0aGlzLm1heFNpemUgKiAxMDAwIDwgZmlsZXNbaV0uc2l6ZSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZhaWwodGhpcy5tc2dJbnZhbGlkU2l6ZS5yZXBsYWNlKCclcycsIHRoaXMubWF4U2l6ZSkpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hbGxvdyAmJiAhbWF0Y2gkMSh0aGlzLmFsbG93LCBmaWxlc1tpXS5uYW1lKSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZhaWwodGhpcy5tc2dJbnZhbGlkTmFtZS5yZXBsYWNlKCclcycsIHRoaXMuYWxsb3cpKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWltZSAmJiAhbWF0Y2gkMSh0aGlzLm1pbWUsIGZpbGVzW2ldLnR5cGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmFpbCh0aGlzLm1zZ0ludmFsaWRNaW1lLnJlcGxhY2UoJyVzJywgdGhpcy5taW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSkgewogICAgICAgICAgICAgICAgICAgIGZpbGVzID0gW2ZpbGVzWzBdXTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB0aGlzLmJlZm9yZUFsbCh0aGlzLCBmaWxlcyk7CgogICAgICAgICAgICAgICAgdmFyIGNodW5rcyA9IGNodW5rKGZpbGVzLCB0aGlzLmNvbmN1cnJlbnQpOwogICAgICAgICAgICAgICAgdmFyIHVwbG9hZCA9IGZ1bmN0aW9uIChmaWxlcykgewoKICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwoKICAgICAgICAgICAgICAgICAgICBmaWxlcy5mb3JFYWNoKGZ1bmN0aW9uIChmaWxlKSB7IHJldHVybiBkYXRhLmFwcGVuZCh0aGlzJDEubmFtZSwgZmlsZSk7IH0pOwoKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcyQxLnBhcmFtcykgewogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZChrZXksIHRoaXMkMS5wYXJhbXNba2V5XSk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBhamF4KHRoaXMkMS51cmwsIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiB0aGlzJDEubWV0aG9kLAogICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IHRoaXMkMS50eXBlLAogICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbiAoZW52KSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhociA9IGVudi54aHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIudXBsb2FkICYmIG9uKHhoci51cGxvYWQsICdwcm9ncmVzcycsIHRoaXMkMS5wcm9ncmVzcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ2xvYWRTdGFydCcsICdsb2FkJywgJ2xvYWRFbmQnLCAnYWJvcnQnXS5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7IHJldHVybiBvbih4aHIsIHR5cGUudG9Mb3dlckNhc2UoKSwgdGhpcyQxW3R5cGVdKTsgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzJDEuYmVmb3JlU2VuZChlbnYpOwoKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oCiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICh4aHIpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzJDEuY29tcGxldGUoeGhyKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2h1bmtzLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwbG9hZChjaHVua3Muc2hpZnQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMkMS5jb21wbGV0ZUFsbCh4aHIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGUpIHsgcmV0dXJuIHRoaXMkMS5lcnJvcihlKTsgfQogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICB1cGxvYWQoY2h1bmtzLnNoaWZ0KCkpOwoKICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgfTsKCiAgICBmdW5jdGlvbiBtYXRjaCQxKHBhdHRlcm4sIHBhdGgpIHsKICAgICAgICByZXR1cm4gcGF0aC5tYXRjaChuZXcgUmVnRXhwKCgiXiIgKyAocGF0dGVybi5yZXBsYWNlKC9cLy9nLCAnXFwvJykucmVwbGFjZSgvXCpcKi9nLCAnKFxcL1teXFwvXSspKicpLnJlcGxhY2UoL1wqL2csICdbXlxcL10rJykucmVwbGFjZSgvKCg/IVxcKSlcPy9nLCAnJDEuJykpICsgIiQiKSwgJ2knKSk7CiAgICB9CgogICAgZnVuY3Rpb24gY2h1bmsoZmlsZXMsIHNpemUpIHsKICAgICAgICB2YXIgY2h1bmtzID0gW107CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkgKz0gc2l6ZSkgewogICAgICAgICAgICB2YXIgY2h1bmsgPSBbXTsKICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzaXplOyBqKyspIHsKICAgICAgICAgICAgICAgIGNodW5rLnB1c2goZmlsZXNbaSArIGpdKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjaHVua3MucHVzaChjaHVuayk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBjaHVua3M7CiAgICB9CgogICAgZnVuY3Rpb24gc3RvcChlKSB7CiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICB9CgogICAgVUlraXQuY29tcG9uZW50KCdjb3VudGRvd24nLCBDb3VudGRvd24pOwogICAgVUlraXQuY29tcG9uZW50KCdmaWx0ZXInLCBGaWx0ZXIpOwogICAgVUlraXQuY29tcG9uZW50KCdsaWdodGJveCcsIExpZ2h0Ym94KTsKICAgIFVJa2l0LmNvbXBvbmVudCgnbGlnaHRib3hQYW5lbCcsIGxpZ2h0Ym94UGFuZWwpOwogICAgVUlraXQuY29tcG9uZW50KCdub3RpZmljYXRpb24nLCBOb3RpZmljYXRpb24pOwogICAgVUlraXQuY29tcG9uZW50KCdwYXJhbGxheCcsIFBhcmFsbGF4JDEpOwogICAgVUlraXQuY29tcG9uZW50KCdzbGlkZXInLCBTbGlkZXIkMSk7CiAgICBVSWtpdC5jb21wb25lbnQoJ3NsaWRlclBhcmFsbGF4JywgU2xpZGVzaG93UGFyYWxsYXgpOwogICAgVUlraXQuY29tcG9uZW50KCdzbGlkZXNob3cnLCBTbGlkZXNob3ckMSk7CiAgICBVSWtpdC5jb21wb25lbnQoJ3NsaWRlc2hvd1BhcmFsbGF4JywgU2xpZGVzaG93UGFyYWxsYXgpOwogICAgVUlraXQuY29tcG9uZW50KCdzb3J0YWJsZScsIFNvcnRhYmxlKTsKICAgIFVJa2l0LmNvbXBvbmVudCgndG9vbHRpcCcsIFRvb2x0aXApOwogICAgVUlraXQuY29tcG9uZW50KCd1cGxvYWQnLCBVcGxvYWQpOwoKICAgIHsKICAgICAgICBib290KFVJa2l0KTsKICAgIH0KCiAgICByZXR1cm4gVUlraXQ7Cgp9KSk7Cg==",
  43. {"status":false}
  44. ],
  45. [
  46. "uikit-icons.js_3.2.0",
  47. "LyohIFVJa2l0IDMuMi4wIHwgaHR0cDovL3d3dy5nZXR1aWtpdC5jb20gfCAoYykgMjAxNCAtIDIwMTkgWU9PdGhlbWUgfCBNSVQgTGljZW5zZSAqLwoKKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHsKICAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDoKICAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZSgndWlraXRpY29ucycsIGZhY3RvcnkpIDoKICAgIChnbG9iYWwgPSBnbG9iYWwgfHwgc2VsZiwgZ2xvYmFsLlVJa2l0SWNvbnMgPSBmYWN0b3J5KCkpOwp9KHRoaXMsIGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOwoKICAgIGZ1bmN0aW9uIHBsdWdpbihVSWtpdCkgewoKICAgICAgICBpZiAocGx1Z2luLmluc3RhbGxlZCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBVSWtpdC5pY29uLmFkZCh7CiAgICAgICAgIjUwMHB4IjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTkuNjI0LDExLjg2NmMtMC4xNDEsMC4xMzIsMC40NzksMC42NTgsMC42NjIsMC40MThjMC4wNTEtMC4wNDYsMC42MDctMC42MSwwLjY2Mi0wLjY2NGMwLDAsMC43MzgsMC43MTksMC44MTQsMC43MTkgYzAuMSwwLDAuMjA3LTAuMDU1LDAuMzIyLTAuMTdjMC4yNy0wLjI2OSwwLjEzNS0wLjQxNiwwLjA2Ni0wLjQ5NWwtMC42MzEtMC42MTZsMC42NTgtMC42NjhjMC4xNDYtMC4xNTYsMC4wMjEtMC4zMTQtMC4xLTAuNDQ5IGMtMC4xODItMC4xOC0wLjM1OS0wLjIyNi0wLjQ3MS0wLjEyNWwtMC42NTYsMC42NTRsLTAuNjU0LTAuNjU0Yy0wLjAzMy0wLjAzNC0wLjA4LTAuMDQ1LTAuMTI0LTAuMDQ1IGMtMC4wNzksMC0wLjE5MSwwLjA2OC0wLjMwNywwLjE4MWMtMC4yMDIsMC4yMDItMC4yNDcsMC4zNTEtMC4xMzMsMC40NjJsMC42NjUsMC42NjVMOS42MjQsMTEuODY2elwiLz48cGF0aCBkPVwiTTExLjA2NiwyLjg4NGMtMS4wNjEsMC0yLjE4NSwwLjI0OC0zLjAxMSwwLjYwNGMtMC4wODcsMC4wMzQtMC4xNDEsMC4xMDYtMC4xNSwwLjIwNUM3Ljg5MywzLjc4NCw3LjkxOSwzLjkwOSw3Ljk4Miw0LjA2NiBjMC4wNSwwLjEzNiwwLjE4NywwLjQ3NCwwLjQ1MiwwLjM3MmMwLjg0NC0wLjMyNiwxLjc3OS0wLjUwNywyLjYzMy0wLjUwN2MwLjk2MywwLDEuOSwwLjE5MSwyLjc4MSwwLjU2NCBjMC42OTUsMC4yOTIsMS4zNTcsMC43MTksMi4wNzgsMS4zNGMwLjA1MSwwLjA0NCwwLjEwNSwwLjA2OCwwLjE2NCwwLjA2OGMwLjE0MywwLDAuMjczLTAuMTM3LDAuMzg5LTAuMjcxIGMwLjE5MS0wLjIxNCwwLjMyNC0wLjM5NSwwLjEzNS0wLjU3NWMtMC42ODYtMC42NTQtMS40MzYtMS4xMzgtMi4zNjMtMS41MzNDMTMuMjQsMy4wOTcsMTIuMTY4LDIuODg0LDExLjA2NiwyLjg4NHpcIi8+PHBhdGggZD1cIk0xNi40MywxNS43NDdjLTAuMDkyLTAuMDI4LTAuMjQyLDAuMDUtMC4zMDksMC4xMTlsMCwwYy0wLjY1MiwwLjY1Mi0xLjQyLDEuMTY5LTIuMjY4LDEuNTIxIGMtMC44NzcsMC4zNzEtMS44MTQsMC41NTEtMi43NzksMC41NTFjLTAuOTYxLDAtMS44OTYtMC4xODktMi43NzUtMC41NjRjLTAuODQ4LTAuMzYtMS42MTItMC44NzktMi4yNjgtMS41MyBjLTAuNjgyLTAuNjg4LTEuMTk2LTEuNDU1LTEuNTI5LTIuMjY4Yy0wLjMyNS0wLjc5OS0wLjQ3MS0xLjY0My0wLjQ3MS0xLjY0M2MtMC4wNDUtMC4yNC0wLjI1OC0wLjI0OS0wLjU2Ny0wLjIwMyBjLTAuMTI4LDAuMDIxLTAuNTE5LDAuMDc5LTAuNDgzLDAuMzZ2MC4wMWMwLjEwNSwwLjY0NCwwLjI4OSwxLjI4NCwwLjU0NSwxLjg5NWMwLjQxNywwLjk2OSwxLjAwMiwxLjg0OSwxLjc1NiwyLjYwNCBjMC43NTcsMC43NTQsMS42MzYsMS4zNCwyLjYwNCwxLjc1N0M4LjkwMSwxOC43ODUsOS45NywxOSwxMS4wODgsMTljMS4xMDQsMCwyLjE4Ni0wLjIxNSwzLjE4OC0wLjY0NSBjMS44MzgtMC44OTYsMi42MDQtMS43NTcsMi42MDQtMS43NTdjMC4xODItMC4yMDQsMC4yMjctMC4zMTctMC4xLTAuNjQzQzE2Ljc3OSwxNS45NTYsMTYuNTI1LDE1Ljc3NCwxNi40MywxNS43NDd6XCIvPjxwYXRoIGQ9XCJNNS42MzMsMTMuMjg3YzAuMjkzLDAuNzEsMC43MjMsMS4zNDEsMS4yNjIsMS44ODJjMC41NCwwLjU0LDEuMTcyLDAuOTcxLDEuODgyLDEuMjY0YzAuNzMxLDAuMzAzLDEuNTA5LDAuNDYxLDIuMjk4LDAuNDYxIGMwLjgwMSwwLDEuNTc4LTAuMTU4LDIuMjk3LTAuNDYxYzAuNzExLTAuMjkzLDEuMzQ0LTAuNzI0LDEuODgzLTEuMjY0YzAuNTQzLTAuNTQxLDAuOTcxLTEuMTcyLDEuMjY0LTEuODgyIGMwLjMxNC0wLjcyMSwwLjQ2My0xLjUsMC40NjMtMi4yOThjMC0wLjc5LTAuMTQ4LTEuNTY5LTAuNDYzLTIuMjg5Yy0wLjI5My0wLjY5OS0wLjcyMS0xLjMyOS0xLjI2NC0xLjg4MSBjLTAuNTM5LTAuNTQxLTEuMTcyLTAuOTU5LTEuODY3LTEuMjYzYy0wLjcyMS0wLjMwMy0xLjUtMC40NjEtMi4yOTktMC40NjFjLTAuODAyLDAtMS42MTMsMC4xNTktMi4zMjIsMC40NjEgYy0wLjU3NywwLjI1LTEuNTQ0LDAuODY3LTIuMTE5LDEuNDU0djAuMDEyVjIuMTA4aDguMTZDMTUuMSwyLjEwNCwxNS4xLDEuNjksMTUuMSwxLjU1MkMxNS4xLDEuNDE3LDE1LjEsMSwxNC44MDksMUg1LjkxNSBDNS42NzYsMSw1LjUyNywxLjE5Miw1LjUyNywxLjM4NHY2Ljg0YzAsMC4yMTQsMC4yNzMsMC4zNzIsMC41MjksMC40MjhjMC41LDAuMTA1LDAuNjE0LTAuMDU2LDAuNzM3LTAuMjI0bDAsMCBjMC4xOC0wLjI3MywwLjc3Ni0wLjg4NCwwLjc4Ny0wLjg5NGMwLjkwMS0wLjkwNSwyLjExNy0xLjQwOCwzLjQxNi0xLjQwOGMxLjI4NSwwLDIuNSwwLjUwMSwzLjQxMiwxLjQwOCBjMC45MTQsMC45MTQsMS40MDgsMi4xMjIsMS40MDgsMy40MDVjMCwxLjI4OC0wLjUwOCwyLjQ5Ni0xLjQwOCwzLjQwNWMtMC45LDAuODk2LTIuMTUyLDEuNDA2LTMuNDM4LDEuNDA2IGMtMC44NzcsMC0xLjcxMS0wLjIyOS0yLjQzMy0wLjY3MXYtNC4xNThjMC0wLjU1MywwLjIzNy0xLjE1MSwwLjY0My0xLjYxNGMwLjQ2Mi0wLjUxOSwxLjA5NC0wLjc5OSwxLjc4Mi0wLjc5OSBjMC42NjQsMCwxLjI5MywwLjI1MywxLjc1OCwwLjcxNWMwLjQ1OSwwLjQ1OSwwLjcwOSwxLjA3MSwwLjcwOSwxLjcyM2MwLDEuMzg1LTEuMDk0LDIuNDY4LTIuNDg4LDIuNDY4IGMtMC4yNzMsMC0wLjc2OS0wLjEyMS0wLjc4MS0wLjEyNWMtMC4yODEtMC4wODctMC40MDUsMC4zMDYtMC40MzgsMC40MzZjLTAuMTU5LDAuNDk2LDAuMDc5LDAuNTg1LDAuMTIzLDAuNjA3IGMwLjQ1MiwwLjEzNywwLjc0MywwLjE1NywxLjEyOSwwLjE1N2MxLjk3MywwLDMuNTcyLTEuNiwzLjU3Mi0zLjU3YzAtMS45NjQtMS42LTMuNTUyLTMuNTcyLTMuNTUyYy0wLjk3LDAtMS44NzIsMC4zNi0yLjU0NiwxLjAzOCBjLTAuNjU2LDAuNjMxLTEuMDI3LDEuNDg3LTEuMDI3LDIuMzIydjMuNDM4di0wLjAxMWMtMC4zNzItMC40Mi0wLjczMi0xLjA0MS0wLjk4MS0xLjY4MmMtMC4xMDItMC4yNDgtMC4zMTUtMC4yMDItMC42MDctMC4xMTMgYy0wLjEzNSwwLjAzNS0wLjUxOSwwLjE1Ny0wLjQ0LDAuNDM5QzUuMzcyLDEyLjc5OSw1LjU3NywxMy4xNjQsNS42MzMsMTMuMjg3elwiLz48L3N2Zz4iLAogICAgICAgICJhbGJ1bSI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHJlY3QgeD1cIjVcIiB5PVwiMlwiIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIxXCIvPjxyZWN0IHg9XCIzXCIgeT1cIjRcIiB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMVwiLz48cmVjdCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiB4PVwiMS41XCIgeT1cIjYuNVwiIHdpZHRoPVwiMTdcIiBoZWlnaHQ9XCIxMVwiLz48L3N2Zz4iLAogICAgICAgICJhcnJvdy1kb3duIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cG9seWdvbiBwb2ludHM9XCIxMC41LDE2LjA4IDUuNjMsMTAuNjYgNi4zNywxMCAxMC41LDE0LjU4IDE0LjYzLDEwIDE1LjM3LDEwLjY2XCIvPjxsaW5lIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHgxPVwiMTAuNVwiIHkxPVwiNFwiIHgyPVwiMTAuNVwiIHkyPVwiMTVcIi8+PC9zdmc+IiwKICAgICAgICAiYXJyb3ctbGVmdCI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBvbHlsaW5lIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHBvaW50cz1cIjEwIDE0IDUgOS41IDEwIDVcIi8+PGxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgeDE9XCIxNlwiIHkxPVwiOS41XCIgeDI9XCI1XCIgeTI9XCI5LjUyXCIvPjwvc3ZnPiIsCiAgICAgICAgImFycm93LXJpZ2h0IjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cG9seWxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgcG9pbnRzPVwiMTAgNSAxNSA5LjUgMTAgMTRcIi8+PGxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgeDE9XCI0XCIgeTE9XCI5LjVcIiB4Mj1cIjE1XCIgeTI9XCI5LjVcIi8+PC9zdmc+IiwKICAgICAgICAiYXJyb3ctdXAiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwb2x5Z29uIHBvaW50cz1cIjEwLjUsNCAxNS4zNyw5LjQgMTQuNjMsMTAuMDggMTAuNSw1LjQ5IDYuMzcsMTAuMDggNS42Myw5LjRcIi8+PGxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgeDE9XCIxMC41XCIgeTE9XCIxNlwiIHgyPVwiMTAuNVwiIHkyPVwiNVwiLz48L3N2Zz4iLAogICAgICAgICJiYW4iOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxjaXJjbGUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4xXCIgY3g9XCIxMFwiIGN5PVwiMTBcIiByPVwiOVwiLz48bGluZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiB4MT1cIjRcIiB5MT1cIjMuNVwiIHgyPVwiMTZcIiB5Mj1cIjE2LjVcIi8+PC9zdmc+IiwKICAgICAgICAiYmVoYW5jZSI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk05LjUsMTAuNmMtMC40LTAuNS0wLjktMC45LTEuNi0xLjFjMS43LTEsMi4yLTMuMiwwLjctNC43QzcuOCw0LDYuMyw0LDUuMiw0QzMuNSw0LDEuNyw0LDAsNHYxMmMxLjcsMCwzLjQsMCw1LjIsMCBjMSwwLDIuMSwwLDMuMS0wLjVDMTAuMiwxNC42LDEwLjUsMTIuMyw5LjUsMTAuNkw5LjUsMTAuNnogTTUuNiw2LjFjMS44LDAsMS44LDIuNy0wLjEsMi43Yy0xLDAtMiwwLTIuOSwwVjYuMUg1LjZ6IE0yLjYsMTMuOHYtMy4xIGMxLjEsMCwyLjEsMCwzLjIsMGMyLjEsMCwyLjEsMy4yLDAuMSwzLjJMMi42LDEzLjh6XCIvPjxwYXRoIGQ9XCJNMTkuOSwxMC45QzE5LjcsOS4yLDE4LjcsNy42LDE3LDdjLTQuMi0xLjMtNy4zLDMuNC01LjMsNy4xYzAuOSwxLjcsMi44LDIuMyw0LjcsMi4xYzEuNy0wLjIsMi45LTEuMywzLjQtMi45aC0yLjIgYy0wLjQsMS4zLTIuNCwxLjUtMy41LDAuNmMtMC40LTAuNC0wLjYtMS4xLTAuNi0xLjdIMjBDMjAsMTEuNywxOS45LDEwLjksMTkuOSwxMC45eiBNMTMuNSwxMC42YzAtMS42LDIuMy0yLjcsMy41LTEuNCBjMC40LDAuNCwwLjUsMC45LDAuNiwxLjRIMTMuNUwxMy41LDEwLjZ6XCIvPjxyZWN0IHg9XCIxM1wiIHk9XCI0XCIgd2lkdGg9XCI1XCIgaGVpZ2h0PVwiMS40XCIvPjwvc3ZnPiIsCiAgICAgICAgImJlbGwiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMVwiIGQ9XCJNMTcsMTUuNSBMMywxNS41IEMyLjk5LDE0LjYxIDMuNzksMTMuMzQgNC4xLDEyLjUxIEM0LjU4LDExLjMgNC43MiwxMC4zNSA1LjE5LDcuMDEgQzUuNTQsNC41MyA1Ljg5LDMuMiA3LjI4LDIuMTYgQzguMTMsMS41NiA5LjM3LDEuNSA5LjgxLDEuNSBMOS45NiwxLjUgQzkuOTYsMS41IDExLjYyLDEuNDEgMTIuNjcsMi4xNyBDMTQuMDgsMy4yIDE0LjQyLDQuNTQgMTQuNzcsNy4wMiBDMTUuMjYsMTAuMzUgMTUuNCwxMS4zMSAxNS44NywxMi41MiBDMTYuMiwxMy4zNCAxNy4wMSwxNC42MSAxNywxNS41IEwxNywxNS41IFpcIi8+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgZD1cIk0xMi4zOSwxNiBDMTIuMzksMTcuMzcgMTEuMzUsMTguNDMgOS45MSwxOC40MyBDOC40OCwxOC40MyA3LjQyLDE3LjM3IDcuNDIsMTZcIi8+PC9zdmc+IiwKICAgICAgICAiYm9sZCI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk01LDE1LjMgQzUuNjYsMTUuMyA1LjksMTUgNS45LDE0LjUzIEw1LjksNS41IEM1LjksNC45MiA1LjU2LDQuNyA1LDQuNyBMNSw0IEw4Ljk1LDQgQzEyLjYsNCAxMy43LDUuMzcgMTMuNyw2LjkgQzEzLjcsNy44NyAxMy4xNCw5LjE3IDEwLjg2LDkuNTkgTDEwLjg2LDkuNyBDMTMuMjUsOS44NiAxNC4yOSwxMS4yOCAxNC4zLDEyLjU0IEMxNC4zLDE0LjQ3IDEyLjk0LDE2IDksMTYgTDUsMTYgTDUsMTUuMyBaIE05LDkuMyBDMTEuMTksOS4zIDExLjgsOC41IDExLjg1LDcgQzExLjg1LDUuNjUgMTEuMyw0LjggOSw0LjggTDcuNjcsNC44IEw3LjY3LDkuMyBMOSw5LjMgWiBNOS4xODUsMTUuMjIgQzExLjk3LDE1IDEyLjM5LDE0IDEyLjQsMTIuNTggQzEyLjQsMTEuMTUgMTEuMzksMTAgOSwxMCBMNy42NywxMCBMNy42NywxNSBMOS4xOCwxNSBaXCIvPjwvc3ZnPiIsCiAgICAgICAgImJvbHQiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNNC43NCwyMCBMNy43MywxMiBMMywxMiBMMTUuNDMsMSBMMTIuMzIsOSBMMTcuMDIsOSBMNC43NCwyMCBMNC43NCwyMCBMNC43NCwyMCBaIE05LjE4LDExIEw3LjEsMTYuMzkgTDE0LjQ3LDEwIEwxMC44NiwxMCBMMTIuOTksNC42NyBMNS42MSwxMSBMOS4xOCwxMSBMOS4xOCwxMSBMOS4xOCwxMSBaXCIvPjwvc3ZnPiIsCiAgICAgICAgImJvb2ttYXJrIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cG9seWdvbiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBwb2ludHM9XCI1LjUgMS41IDE1LjUgMS41IDE1LjUgMTcuNSAxMC41IDEyLjUgNS41IDE3LjVcIi8+PC9zdmc+IiwKICAgICAgICAiY2FsZW5kYXIiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNIDIsMyAyLDE3IDE4LDE3IDE4LDMgMiwzIFogTSAxNywxNiAzLDE2IDMsOCAxNyw4IDE3LDE2IFogTSAxNyw3IDMsNyAzLDQgMTcsNCAxNyw3IFpcIi8+PHJlY3Qgd2lkdGg9XCIxXCIgaGVpZ2h0PVwiM1wiIHg9XCI2XCIgeT1cIjJcIi8+PHJlY3Qgd2lkdGg9XCIxXCIgaGVpZ2h0PVwiM1wiIHg9XCIxM1wiIHk9XCIyXCIvPjwvc3ZnPiIsCiAgICAgICAgImNhbWVyYSI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGNpcmNsZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBjeD1cIjEwXCIgY3k9XCIxMC44XCIgcj1cIjMuOFwiLz48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBkPVwiTTEsNC41IEMwLjcsNC41IDAuNSw0LjcgMC41LDUgTDAuNSwxNyBDMC41LDE3LjMgMC43LDE3LjUgMSwxNy41IEwxOSwxNy41IEMxOS4zLDE3LjUgMTkuNSwxNy4zIDE5LjUsMTcgTDE5LjUsNSBDMTkuNSw0LjcgMTkuMyw0LjUgMTksNC41IEwxMy41LDQuNSBMMTMuNSwyLjkgQzEzLjUsMi42IDEzLjMsMi41IDEzLDIuNSBMNywyLjUgQzYuNywyLjUgNi41LDIuNiA2LjUsMi45IEw2LjUsNC41IEwxLDQuNSBMMSw0LjUgWlwiLz48L3N2Zz4iLAogICAgICAgICJjYXJ0IjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48Y2lyY2xlIGN4PVwiNy4zXCIgY3k9XCIxNy4zXCIgcj1cIjEuNFwiLz48Y2lyY2xlIGN4PVwiMTMuM1wiIGN5PVwiMTcuM1wiIHI9XCIxLjRcIi8+PHBvbHlsaW5lIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHBvaW50cz1cIjAgMiAzLjIgNCA1LjMgMTIuNSAxNiAxMi41IDE4IDYuNSA4IDYuNVwiLz48L3N2Zz4iLAogICAgICAgICJjaGVjayI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBvbHlsaW5lIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMVwiIHBvaW50cz1cIjQsMTAgOCwxNSAxNyw0XCIvPjwvc3ZnPiIsCiAgICAgICAgImNoZXZyb24tZG91YmxlLWxlZnQiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwb2x5bGluZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjAzXCIgcG9pbnRzPVwiMTAgMTQgNiAxMCAxMCA2XCIvPjxwb2x5bGluZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjAzXCIgcG9pbnRzPVwiMTQgMTQgMTAgMTAgMTQgNlwiLz48L3N2Zz4iLAogICAgICAgICJjaGV2cm9uLWRvdWJsZS1yaWdodCI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBvbHlsaW5lIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMDNcIiBwb2ludHM9XCIxMCA2IDE0IDEwIDEwIDE0XCIvPjxwb2x5bGluZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjAzXCIgcG9pbnRzPVwiNiA2IDEwIDEwIDYgMTRcIi8+PC9zdmc+IiwKICAgICAgICAiY2hldnJvbi1kb3duIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cG9seWxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4wM1wiIHBvaW50cz1cIjE2IDcgMTAgMTMgNCA3XCIvPjwvc3ZnPiIsCiAgICAgICAgImNoZXZyb24tbGVmdCI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBvbHlsaW5lIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMDNcIiBwb2ludHM9XCIxMyAxNiA3IDEwIDEzIDRcIi8+PC9zdmc+IiwKICAgICAgICAiY2hldnJvbi1yaWdodCI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBvbHlsaW5lIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMDNcIiBwb2ludHM9XCI3IDQgMTMgMTAgNyAxNlwiLz48L3N2Zz4iLAogICAgICAgICJjaGV2cm9uLXVwIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cG9seWxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4wM1wiIHBvaW50cz1cIjQgMTMgMTAgNyAxNiAxM1wiLz48L3N2Zz4iLAogICAgICAgICJjbG9jayI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGNpcmNsZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBjeD1cIjEwXCIgY3k9XCIxMFwiIHI9XCI5XCIvPjxyZWN0IHg9XCI5XCIgeT1cIjRcIiB3aWR0aD1cIjFcIiBoZWlnaHQ9XCI3XCIvPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMVwiIGQ9XCJNMTMuMDE4LDE0LjE5NyBMOS40NDUsMTAuNjI1XCIvPjwvc3ZnPiIsCiAgICAgICAgImNsb3NlIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjA2XCIgZD1cIk0xNiwxNiBMNCw0XCIvPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMDZcIiBkPVwiTTE2LDQgTDQsMTZcIi8+PC9zdmc+IiwKICAgICAgICAiY2xvdWQtZG93bmxvYWQiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMVwiIGQ9XCJNNi41LDE0LjYxIEwzLjc1LDE0LjYxIEMxLjk2LDE0LjYxIDAuNSwxMy4xNyAwLjUsMTEuMzkgQzAuNSw5Ljc2IDEuNzIsOC40MSAzLjMsOC4yIEMzLjM4LDUuMzEgNS43NSwzIDguNjgsMyBDMTEuMTksMyAxMy4zMSw0LjcxIDEzLjg5LDcuMDIgQzE0LjM5LDYuOCAxNC45Myw2LjY4IDE1LjUsNi42OCBDMTcuNzEsNi42OCAxOS41LDguNDUgMTkuNSwxMC42NCBDMTkuNSwxMi44MyAxNy43MSwxNC42IDE1LjUsMTQuNiBMMTIuNSwxNC42XCIvPjxwb2x5bGluZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBwb2ludHM9XCIxMS43NSAxNiA5LjUgMTguMjUgNy4yNSAxNlwiLz48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBkPVwiTTkuNSwxOCBMOS41LDkuNVwiLz48L3N2Zz4iLAogICAgICAgICJjbG91ZC11cGxvYWQiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMVwiIGQ9XCJNNi41LDE0LjYxIEwzLjc1LDE0LjYxIEMxLjk2LDE0LjYxIDAuNSwxMy4xNyAwLjUsMTEuMzkgQzAuNSw5Ljc2IDEuNzIsOC40MSAzLjMxLDguMiBDMy4zOCw1LjMxIDUuNzUsMyA4LjY4LDMgQzExLjE5LDMgMTMuMzEsNC43MSAxMy44OSw3LjAyIEMxNC4zOSw2LjggMTQuOTMsNi42OCAxNS41LDYuNjggQzE3LjcxLDYuNjggMTkuNSw4LjQ1IDE5LjUsMTAuNjQgQzE5LjUsMTIuODMgMTcuNzEsMTQuNiAxNS41LDE0LjYgTDEyLjUsMTQuNlwiLz48cG9seWxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgcG9pbnRzPVwiNy4yNSAxMS43NSA5LjUgOS41IDExLjc1IDExLjc1XCIvPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIGQ9XCJNOS41LDE4IEw5LjUsOS41XCIvPjwvc3ZnPiIsCiAgICAgICAgImNvZGUiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwb2x5bGluZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjAxXCIgcG9pbnRzPVwiMTMsNCAxOSwxMCAxMywxNlwiLz48cG9seWxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4wMVwiIHBvaW50cz1cIjcsNCAxLDEwIDcsMTZcIi8+PC9zdmc+IiwKICAgICAgICAiY29nIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48Y2lyY2xlIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIGN4PVwiOS45OTdcIiBjeT1cIjEwXCIgcj1cIjMuMzFcIi8+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgZD1cIk0xOC40ODgsMTIuMjg1IEwxNi4yMDUsMTYuMjM3IEMxNS4zMjIsMTUuNDk2IDE0LjE4NSwxNS4yODEgMTMuMzAzLDE1Ljc5MSBDMTIuNDI4LDE2LjI4OSAxMi4wNDcsMTcuMzczIDEyLjI0NiwxOC41IEw3LjczNSwxOC41IEM3LjkzOCwxNy4zNzQgNy41NTMsMTYuMjk5IDYuNjg0LDE1Ljc5MSBDNS44MDEsMTUuMjcgNC42NTUsMTUuNDkyIDMuNzczLDE2LjIzNyBMMS41LDEyLjI4NSBDMi41NzMsMTEuODcxIDMuMzE3LDEwLjk5OSAzLjMxNyw5Ljk5MSBDMy4zMDUsOC45OCAyLjU3Myw4LjEyMSAxLjUsNy43MTYgTDMuNzY1LDMuNzg0IEM0LjY0NSw0LjUxNiA1Ljc5NCw0LjczOCA2LjY4Nyw0LjIzMiBDNy41NTUsMy43MjIgNy45MzksMi42MzcgNy43MzUsMS41IEwxMi4yNjMsMS41IEMxMi4wNzIsMi42MzcgMTIuNDQxLDMuNzEgMTMuMzE0LDQuMjIgQzE0LjIwNiw0LjczIDE1LjM0Myw0LjUxNiAxNi4yMjUsMy43OTQgTDE4LjQ4Nyw3LjcxNCBDMTcuNDA0LDguMTE3IDE2LjY2MSw4Ljk4OCAxNi42NywxMC4wMDkgQzE2LjY3MiwxMS4wMTggMTcuNDE1LDExLjg4IDE4LjQ4OCwxMi4yODUgTDE4LjQ4OCwxMi4yODUgWlwiLz48L3N2Zz4iLAogICAgICAgICJjb21tZW50IjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTYsMTguNzEgTDYsMTQgTDEsMTQgTDEsMSBMMTksMSBMMTksMTQgTDEwLjcxLDE0IEw2LDE4LjcxIEw2LDE4LjcxIFogTTIsMTMgTDcsMTMgTDcsMTYuMjkgTDEwLjI5LDEzIEwxOCwxMyBMMTgsMiBMMiwyIEwyLDEzIEwyLDEzIFpcIi8+PC9zdmc+IiwKICAgICAgICAiY29tbWVudGluZyI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBvbHlnb24gZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgcG9pbnRzPVwiMS41LDEuNSAxOC41LDEuNSAxOC41LDEzLjUgMTAuNSwxMy41IDYuNSwxNy41IDYuNSwxMy41IDEuNSwxMy41XCIvPjxjaXJjbGUgY3g9XCIxMFwiIGN5PVwiOFwiIHI9XCIxXCIvPjxjaXJjbGUgY3g9XCI2XCIgY3k9XCI4XCIgcj1cIjFcIi8+PGNpcmNsZSBjeD1cIjE0XCIgY3k9XCI4XCIgcj1cIjFcIi8+PC9zdmc+IiwKICAgICAgICAiY29tbWVudHMiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwb2x5bGluZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBwb2ludHM9XCIyIDAuNSAxOS41IDAuNSAxOS41IDEzXCIvPjxwYXRoIGQ9XCJNNSwxOS43MSBMNSwxNSBMMCwxNSBMMCwyIEwxOCwyIEwxOCwxNSBMOS43MSwxNSBMNSwxOS43MSBMNSwxOS43MSBMNSwxOS43MSBaIE0xLDE0IEw2LDE0IEw2LDE3LjI5IEw5LjI5LDE0IEwxNywxNCBMMTcsMyBMMSwzIEwxLDE0IEwxLDE0IEwxLDE0IFpcIi8+PC9zdmc+IiwKICAgICAgICAiY29weSI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHJlY3QgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgeD1cIjMuNVwiIHk9XCIyLjVcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTZcIi8+PHBvbHlsaW5lIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHBvaW50cz1cIjUgMC41IDE3LjUgMC41IDE3LjUgMTdcIi8+PC9zdmc+IiwKICAgICAgICAiY3JlZGl0LWNhcmQiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxyZWN0IGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHg9XCIxLjVcIiB5PVwiNC41XCIgd2lkdGg9XCIxN1wiIGhlaWdodD1cIjEyXCIvPjxyZWN0IHg9XCIxXCIgeT1cIjdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiM1wiLz48L3N2Zz4iLAogICAgICAgICJkYXRhYmFzZSI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGVsbGlwc2UgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgY3g9XCIxMFwiIGN5PVwiNC42NFwiIHJ4PVwiNy41XCIgcnk9XCIzLjE0XCIvPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIGQ9XCJNMTcuNSw4LjExIEMxNy41LDkuODUgMTQuMTQsMTEuMjUgMTAsMTEuMjUgQzUuODYsMTEuMjUgMi41LDkuODQgMi41LDguMTFcIi8+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgZD1cIk0xNy41LDExLjI1IEMxNy41LDEyLjk5IDE0LjE0LDE0LjM5IDEwLDE0LjM5IEM1Ljg2LDE0LjM5IDIuNSwxMi45OCAyLjUsMTEuMjVcIi8+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgZD1cIk0xNy40OSw0LjY0IEwxNy41LDE0LjM2IEMxNy41LDE2LjEgMTQuMTQsMTcuNSAxMCwxNy41IEM1Ljg2LDE3LjUgMi41LDE2LjA5IDIuNSwxNC4zNiBMMi41LDQuNjRcIi8+PC9zdmc+IiwKICAgICAgICAiZGVza3RvcCI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHJlY3QgeD1cIjhcIiB5PVwiMTVcIiB3aWR0aD1cIjFcIiBoZWlnaHQ9XCIyXCIvPjxyZWN0IHg9XCIxMVwiIHk9XCIxNVwiIHdpZHRoPVwiMVwiIGhlaWdodD1cIjJcIi8+PHJlY3QgeD1cIjVcIiB5PVwiMTZcIiB3aWR0aD1cIjEwXCIgaGVpZ2h0PVwiMVwiLz48cmVjdCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiB4PVwiMS41XCIgeT1cIjMuNVwiIHdpZHRoPVwiMTdcIiBoZWlnaHQ9XCIxMVwiLz48L3N2Zz4iLAogICAgICAgICJkb3dubG9hZCI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBvbHlsaW5lIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHBvaW50cz1cIjE0LDEwIDkuNSwxNC41IDUsMTBcIi8+PHJlY3QgeD1cIjNcIiB5PVwiMTdcIiB3aWR0aD1cIjEzXCIgaGVpZ2h0PVwiMVwiLz48bGluZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiB4MT1cIjkuNVwiIHkxPVwiMTMuOTFcIiB4Mj1cIjkuNVwiIHkyPVwiM1wiLz48L3N2Zz4iLAogICAgICAgICJkcmliYmJsZSI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS40XCIgZD1cIk0xLjMsOC45YzAsMCw1LDAuMSw4LjYtMWMxLjQtMC40LDIuNi0wLjksNC0xLjkgYzEuNC0xLjEsMi41LTIuNSwyLjUtMi41XCIvPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuNFwiIGQ9XCJNMy45LDE2LjZjMCwwLDEuNy0yLjgsMy41LTQuMiBjMS44LTEuMyw0LTIsNS43LTIuMkMxNiwxMCwxOSwxMC42LDE5LDEwLjZcIi8+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS40XCIgZD1cIk02LjksMS42YzAsMCwzLjMsNC42LDQuMiw2LjggYzAuNCwwLjksMS4zLDMuMSwxLjksNS4yYzAuNiwyLDAuOSw0LjQsMC45LDQuNFwiLz48Y2lyY2xlIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuNFwiIGN4PVwiMTBcIiBjeT1cIjEwXCIgcj1cIjlcIi8+PC9zdmc+IiwKICAgICAgICAiZXRzeSI6ICI8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCI+PHBhdGggZD1cIk04LDQuMjZDOCw0LjA3LDgsNCw4LjMxLDRoNC40NmMuNzksMCwxLjIyLjY3LDEuNTMsMS45MWwuMjUsMWguNzZjLjE0LTIuODIuMjYtNCwuMjYtNFMxMy42NSwzLDEyLjUyLDNINi44MUwzLjc1LDIuOTJ2Ljg0bDEsLjJjLjczLjExLjkuMjcsMSwxLDAsMCwuMDYsMiwuMDYsNS4xN3MtLjA2LDUuMTQtLjA2LDUuMTRjMCwuNTktLjIzLjgxLTEsLjk0bC0xLC4ydi44NGwzLjA2LS4xaDUuMTFjMS4xNSwwLDMuODIuMSwzLjgyLjEsMC0uNy40NS0zLjg4LjUxLTQuMjJoLS43M2wtLjc2LDEuNjlhMi4yNSwyLjI1LDAsMCwxLTIuNDUsMS40N0g5LjRjLTEsMC0xLjQ0LS40LTEuNDQtMS4yNFYxMC40NHMyLjE2LDAsMi44Ni4wNmMuNTUsMCwuODUuMTksMS4wNiwxbC4yMywxSDEzTDEyLjksOS45NCwxMyw3LjQxaC0uODVsLS4yOCwxLjEzYy0uMTYuNzQtLjI4Ljg0LTEsMS0xLC4xLTIuODkuMDktMi44OS4wOVpcIi8+PC9zdmc+IiwKICAgICAgICAiZXhwYW5kIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cG9seWdvbiBwb2ludHM9XCIxMyAyIDE4IDIgMTggNyAxNyA3IDE3IDMgMTMgM1wiLz48cG9seWdvbiBwb2ludHM9XCIyIDEzIDMgMTMgMyAxNyA3IDE3IDcgMTggMiAxOFwiLz48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBkPVwiTTExLDkgTDE3LDNcIi8+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4xXCIgZD1cIk0zLDE3IEw5LDExXCIvPjwvc3ZnPiIsCiAgICAgICAgImZhY2Vib29rIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTExLDEwaDIuNmwwLjQtM0gxMVY1LjNjMC0wLjksMC4yLTEuNSwxLjUtMS41SDE0VjEuMWMtMC4zLDAtMS0wLjEtMi4xLTAuMUM5LjYsMSw4LDIuNCw4LDV2Mkg1LjV2M0g4djhoM1YxMHpcIi8+PC9zdmc+IiwKICAgICAgICAiZmlsZS1lZGl0IjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBkPVwiTTE4LjY1LDEuNjggQzE4LjQxLDEuNDUgMTguMTA5LDEuMzMgMTcuODEsMS4zMyBDMTcuNDk5LDEuMzMgMTcuMjA5LDEuNDUgMTYuOTgsMS42OCBMOC45Miw5Ljc2IEw4LDEyLjMzIEwxMC41NSwxMS40MSBMMTguNjUxLDMuMzQgQzE5LjEyLDIuODcgMTkuMTIsMi4xNSAxOC42NSwxLjY4IEwxOC42NSwxLjY4IEwxOC42NSwxLjY4IFpcIi8+PHBvbHlsaW5lIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHBvaW50cz1cIjE2LjUgOC40ODIgMTYuNSAxOC41IDMuNSAxOC41IDMuNSAxLjUgMTQuMjExIDEuNVwiLz48L3N2Zz4iLAogICAgICAgICJmaWxlLXBkZiI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHJlY3QgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgd2lkdGg9XCIxM1wiIGhlaWdodD1cIjE3XCIgeD1cIjMuNVwiIHk9XCIxLjVcIi8+PHBhdGggZD1cIk0xNC42NSAxMS42N2MtLjQ4LjMtMS4zNy0uMTktMS43OS0uMzdhNC42NSA0LjY1IDAgMCAxIDEuNDkuMDZjLjM1LjEuMzYuMjguMy4zMXptLTYuMy4wNmwuNDMtLjc5YTE0LjcgMTQuNyAwIDAgMCAuNzUtMS42NCA1LjQ4IDUuNDggMCAwIDAgMS4yNSAxLjU1bC4yLjE1YTE2LjM2IDE2LjM2IDAgMCAwLTIuNjMuNzN6TTkuNSA1LjMyYy4yIDAgLjMyLjUuMzIuOTdhMS45OSAxLjk5IDAgMCAxLS4yMyAxLjA0IDUuMDUgNS4wNSAwIDAgMS0uMTctMS4zczAtLjcxLjA4LS43MXptLTMuOSA5YTQuMzUgNC4zNSAwIDAgMSAxLjIxLTEuNDZsLjI0LS4yMmE0LjM1IDQuMzUgMCAwIDEtMS40NiAxLjY4em05LjIzLTMuM2EyLjA1IDIuMDUgMCAwIDAtMS4zMi0uMyAxMS4wNyAxMS4wNyAwIDAgMC0xLjU4LjExIDQuMDkgNC4wOSAwIDAgMS0uNzQtLjUgNS4zOSA1LjM5IDAgMCAxLTEuMzItMi4wNiAxMC4zNyAxMC4zNyAwIDAgMCAuMjgtMi42MiAxLjgzIDEuODMgMCAwIDAtLjA3LS4yNS41Ny41NyAwIDAgMC0uNTItLjRIOS40YS41OS41OSAwIDAgMC0uNi4zOCA2Ljk1IDYuOTUgMCAwIDAgLjM3IDMuMTRjLS4yNi42My0xIDIuMTItMSAyLjEyLS4zLjU4LS41NyAxLjA4LS44MiAxLjVsLS44LjQ0QTMuMTEgMy4xMSAwIDAgMCA1IDE0LjE2YS4zOS4zOSAwIDAgMCAuMTUuNDJsLjI0LjEzYzEuMTUuNTYgMi4yOC0xLjc0IDIuNjYtMi40MmEyMy4xIDIzLjEgMCAwIDEgMy41OS0uODUgNC41NiA0LjU2IDAgMCAwIDIuOTEuOC41LjUgMCAwIDAgLjMtLjIxIDEuMSAxLjEgMCAwIDAgLjEyLS43NS44NC44NCAwIDAgMC0uMTQtLjI1elwiLz48L3N2Zz4iLAogICAgICAgICJmaWxlLXRleHQiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxyZWN0IGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHdpZHRoPVwiMTNcIiBoZWlnaHQ9XCIxN1wiIHg9XCIzLjVcIiB5PVwiMS41XCIvPjxsaW5lIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHgxPVwiNlwiIHgyPVwiMTJcIiB5MT1cIjEyLjVcIiB5Mj1cIjEyLjVcIi8+PGxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgeDE9XCI2XCIgeDI9XCIxNFwiIHkxPVwiOC41XCIgeTI9XCI4LjVcIi8+PGxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgeDE9XCI2XCIgeDI9XCIxNFwiIHkxPVwiNi41XCIgeTI9XCI2LjVcIi8+PGxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgeDE9XCI2XCIgeDI9XCIxNFwiIHkxPVwiMTAuNVwiIHkyPVwiMTAuNVwiLz48L3N2Zz4iLAogICAgICAgICJmaWxlIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cmVjdCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiB4PVwiMy41XCIgeT1cIjEuNVwiIHdpZHRoPVwiMTNcIiBoZWlnaHQ9XCIxN1wiLz48L3N2Zz4iLAogICAgICAgICJmbGlja3IiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxjaXJjbGUgY3g9XCI1LjVcIiBjeT1cIjkuNVwiIHI9XCIzLjVcIi8+PGNpcmNsZSBjeD1cIjE0LjVcIiBjeT1cIjkuNVwiIHI9XCIzLjVcIi8+PC9zdmc+IiwKICAgICAgICAiZm9sZGVyIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cG9seWdvbiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBwb2ludHM9XCI5LjUgNS41IDguNSAzLjUgMS41IDMuNSAxLjUgMTYuNSAxOC41IDE2LjUgMTguNSA1LjVcIi8+PC9zdmc+IiwKICAgICAgICAiZm9yd2FyZCI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0yLjQ3LDEzLjExIEM0LjAyLDEwLjAyIDYuMjcsNy44NSA5LjA0LDYuNjEgQzkuNDgsNi40MSAxMC4yNyw2LjEzIDExLDUuOTEgTDExLDIgTDE4Ljg5LDkgTDExLDE2IEwxMSwxMi4xMyBDOS4yNSwxMi40NyA3LjU4LDEzLjE5IDYuMDIsMTQuMjUgQzMuMDMsMTYuMjggMS42MywxOC41NCAxLjYzLDE4LjU0IEMxLjYzLDE4LjU0IDEuMzgsMTUuMjggMi40NywxMy4xMSBMMi40NywxMy4xMSBaIE01LjMsMTMuNTMgQzYuOTIsMTIuNCA5LjA0LDExLjQgMTIsMTAuOTIgTDEyLDEzLjYzIEwxNy4zNiw5IEwxMiw0LjI1IEwxMiw2LjggQzExLjcxLDYuODYgMTAuODYsNy4wMiA5LjY3LDcuNDkgQzYuNzksOC42NSA0LjU4LDEwLjk2IDMuNDksMTMuMDggQzMuMTgsMTMuNyAyLjY4LDE0Ljg3IDIuNDksMTYgQzMuMjgsMTUuMDUgNC40LDE0LjE1IDUuMywxMy41MyBMNS4zLDEzLjUzIFpcIi8+PC9zdmc+IiwKICAgICAgICAiZm91cnNxdWFyZSI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0xNS4yMywyIEMxNS45NiwyIDE2LjQsMi40MSAxNi41LDIuODYgQzE2LjU3LDMuMTUgMTYuNTYsMy40NCAxNi41MSwzLjczIEMxNi40Niw0LjA0IDE0Ljg2LDExLjcyIDE0Ljc1LDEyLjAzIEMxNC41NiwxMi41NiAxNC4xNiwxMi44MiAxMy42MSwxMi44MyBDMTMuMDMsMTIuODQgMTEuMDksMTIuNTEgMTAuNjksMTMgQzEwLjM4LDEzLjM4IDcuNzksMTYuMzkgNi44MSwxNy41MyBDNi42MSwxNy43NiA2LjQsMTcuOTYgNi4wOCwxNy45OSBDNS42OCwxOC4wNCA1LjI5LDE3Ljg3IDUuMTcsMTcuNDUgQzUuMTIsMTcuMjggNS4xLDE3LjA5IDUuMSwxNi45MSBDNS4xLDEyLjQgNC44Niw3LjgxIDUuMTEsMy4zMSBDNS4xNywyLjUgNS44MSwyLjEyIDYuNTMsMiBMMTUuMjMsMiBMMTUuMjMsMiBaIE05Ljc2LDExLjQyIEM5Ljk0LDExLjE5IDEwLjE3LDExLjEgMTAuNDUsMTEuMSBMMTIuODYsMTEuMSBDMTMuMTIsMTEuMSAxMy4zMSwxMC45NCAxMy4zNiwxMC42OSBDMTMuMzcsMTAuNjQgMTMuNjIsOS40MSAxMy43NCw4LjgzIEMxMy44MSw4LjUyIDEzLjUzLDguMjggMTMuMjcsOC4yOCBDMTIuMzUsOC4yOSAxMS40Miw4LjI4IDEwLjUsOC4yOCBDOS44NCw4LjI4IDkuODMsNy42OSA5LjgyLDcuMjEgQzkuOCw2Ljg1IDEwLjEzLDYuNTUgMTAuNSw2LjU1IEMxMS41OSw2LjU2IDEyLjY3LDYuNTUgMTMuNzYsNi41NSBDMTQuMDMsNi41NSAxNC4yMyw2LjQgMTQuMjgsNi4xNCBDMTQuMzQsNS44NyAxNC42Nyw0LjI5IDE0LjY3LDQuMjkgQzE0LjY3LDQuMjkgMTQuODIsMy43NCAxNC4xOSwzLjc0IEw3LjM0LDMuNzQgQzcsMy43NSA2Ljg0LDQuMDIgNi44NCw0LjMzIEM2Ljg0LDcuNTggNi44NSwxNC45NSA2Ljg1LDE0Ljk5IEM2Ljg3LDE1IDguODksMTIuNTEgOS43NiwxMS40MiBMOS43NiwxMS40MiBaXCIvPjwvc3ZnPiIsCiAgICAgICAgImZ1dHVyZSI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBvbHlsaW5lIHBvaW50cz1cIjE5IDIgMTggMiAxOCA2IDE0IDYgMTQgNyAxOSA3IDE5IDJcIi8+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4xXCIgZD1cIk0xOCw2LjU0OCBDMTYuNzA5LDMuMjkgMTMuMzU0LDEgOS42LDEgQzQuNiwxIDAuNiw1IDAuNiwxMCBDMC42LDE1IDQuNiwxOSA5LjYsMTkgQzE0LjYsMTkgMTguNiwxNSAxOC42LDEwXCIvPjxyZWN0IHg9XCI5XCIgeT1cIjRcIiB3aWR0aD1cIjFcIiBoZWlnaHQ9XCI3XCIvPjxwYXRoIGQ9XCJNMTMuMDE4LDE0LjE5NyBMOS40NDUsMTAuNjI1XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4xXCIvPjwvc3ZnPiIsCiAgICAgICAgImdpdC1icmFuY2giOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxjaXJjbGUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4yXCIgY3g9XCI3XCIgY3k9XCIzXCIgcj1cIjJcIi8+PGNpcmNsZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjJcIiBjeD1cIjE0XCIgY3k9XCI2XCIgcj1cIjJcIi8+PGNpcmNsZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjJcIiBjeD1cIjdcIiBjeT1cIjE3XCIgcj1cIjJcIi8+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIGQ9XCJNMTQsOCBDMTQsMTAuNDEgMTIuNDMsMTAuODcgMTAuNTYsMTEuMjUgQzkuMDksMTEuNTQgNywxMi4wNiA3LDE1IEw3LDVcIi8+PC9zdmc+IiwKICAgICAgICAiZ2l0LWZvcmsiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxjaXJjbGUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4yXCIgY3g9XCI1Ljc5XCIgY3k9XCIyLjc5XCIgcj1cIjEuNzlcIi8+PGNpcmNsZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjJcIiBjeD1cIjE0LjE5XCIgY3k9XCIyLjc5XCIgcj1cIjEuNzlcIi8+PGVsbGlwc2UgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4yXCIgY3g9XCIxMC4wM1wiIGN5PVwiMTYuNzlcIiByeD1cIjEuNzlcIiByeT1cIjEuNzlcIi8+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIGQ9XCJNNS43OSw0LjU3IEw1Ljc5LDYuNTYgQzUuNzksOS4xOSAxMC4wMywxMC4yMiAxMC4wMywxMy4zMSBDMTAuMDMsMTQuODYgMTAuMDQsMTQuNTUgMTAuMDQsMTQuNTUgQzEwLjA0LDE0LjM3IDEwLjA0LDE0Ljg2IDEwLjA0LDEzLjMxIEMxMC4wNCwxMC4yMiAxNC4yLDkuMTkgMTQuMiw2LjU2IEwxNC4yLDQuNTdcIi8+PC9zdmc+IiwKICAgICAgICAiZ2l0aHViLWFsdCI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0xMCwwLjUgQzQuNzUsMC41IDAuNSw0Ljc2IDAuNSwxMC4wMSBDMC41LDE1LjI2IDQuNzUsMTkuNTEgMTAsMTkuNTEgQzE1LjI0LDE5LjUxIDE5LjUsMTUuMjYgMTkuNSwxMC4wMSBDMTkuNSw0Ljc2IDE1LjI1LDAuNSAxMCwwLjUgTDEwLDAuNSBaIE0xMi44MSwxNy42OSBDMTIuODEsMTcuNjkgMTIuODEsMTcuNyAxMi43OSwxNy42OSBDMTIuNDcsMTcuNzUgMTIuMzUsMTcuNTkgMTIuMzUsMTcuMzYgTDEyLjM1LDE2LjE3IEMxMi4zNSwxNS40NSAxMi4wOSwxNC45MiAxMS41OCwxNC41NiBDMTIuMiwxNC41MSAxMi43NywxNC4zOSAxMy4yNiwxNC4yMSBDMTMuODcsMTMuOTggMTQuMzYsMTMuNjkgMTQuNzQsMTMuMjkgQzE1LjQyLDEyLjU5IDE1Ljc2LDExLjU1IDE1Ljc2LDEwLjE3IEMxNS43Niw5LjI1IDE1LjQ1LDguNDYgMTQuODMsNy44IEMxNS4xLDcuMDggMTUuMDcsNi4yOSAxNC43NSw1LjQ0IEwxNC41MSw1LjQyIEMxNC4zNCw1LjQgMTQuMDYsNS40NiAxMy42Nyw1LjYxIEMxMy4yNSw1Ljc4IDEyLjc5LDYuMDMgMTIuMzEsNi4zNSBDMTEuNTUsNi4xNiAxMC44MSw2LjA1IDEwLjA5LDYuMDUgQzkuMzYsNi4wNSA4LjYxLDYuMTUgNy44OCw2LjM1IEM3LjI4LDUuOTYgNi43NSw1LjY4IDYuMjYsNS41NCBDNi4wNyw1LjQ3IDUuOSw1LjQ0IDUuNzgsNS40NCBMNS40Miw1LjQ0IEM1LjA2LDYuMjkgNS4wNCw3LjA4IDUuMzIsNy44IEM0LjcsOC40NiA0LjQsOS4yNSA0LjQsMTAuMTcgQzQuNCwxMS45NCA0Ljk2LDEzLjE2IDYuMDgsMTMuODQgQzYuNTMsMTQuMTMgNy4wNSwxNC4zMiA3LjY5LDE0LjQzIEM4LjAzLDE0LjUgOC4zMiwxNC41NCA4LjU1LDE0LjU1IEM4LjA3LDE0Ljg5IDcuODIsMTUuNDIgNy44MiwxNi4xNiBMNy44MiwxNy41MSBDNy44LDE3LjY5IDcuNywxNy44IDcuNTEsMTcuOCBDNC4yMSwxNi43NCAxLjgyLDEzLjY1IDEuODIsMTAuMDEgQzEuODIsNS41IDUuNDksMS44MyAxMCwxLjgzIEMxNC41LDEuODMgMTguMTcsNS41IDE4LjE3LDEwLjAxIEMxOC4xOCwxMy41MyAxNS45NCwxNi41NCAxMi44MSwxNy42OSBMMTIuODEsMTcuNjkgWlwiLz48L3N2Zz4iLAogICAgICAgICJnaXRodWIiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNMTAsMSBDNS4wMywxIDEsNS4wMyAxLDEwIEMxLDEzLjk4IDMuNTgsMTcuMzUgNy4xNiwxOC41NCBDNy42MSwxOC42MiA3Ljc3LDE4LjM0IDcuNzcsMTguMTEgQzcuNzcsMTcuOSA3Ljc2LDE3LjMzIDcuNzYsMTYuNTggQzUuMjYsMTcuMTIgNC43MywxNS4zNyA0LjczLDE1LjM3IEM0LjMyLDE0LjMzIDMuNzMsMTQuMDUgMy43MywxNC4wNSBDMi45MSwxMy41IDMuNzksMTMuNSAzLjc5LDEzLjUgQzQuNjksMTMuNTYgNS4xNywxNC40MyA1LjE3LDE0LjQzIEM1Ljk3LDE1LjggNy4yOCwxNS40MSA3Ljc5LDE1LjE4IEM3Ljg3LDE0LjYgOC4xLDE0LjIgOC4zNiwxMy45OCBDNi4zNiwxMy43NSA0LjI2LDEyLjk4IDQuMjYsOS41MyBDNC4yNiw4LjU1IDQuNjEsNy43NCA1LjE5LDcuMTEgQzUuMSw2Ljg4IDQuNzksNS45NyA1LjI4LDQuNzMgQzUuMjgsNC43MyA2LjA0LDQuNDkgNy43NSw1LjY1IEM4LjQ3LDUuNDUgOS4yNCw1LjM1IDEwLDUuMzUgQzEwLjc2LDUuMzUgMTEuNTMsNS40NSAxMi4yNSw1LjY1IEMxMy45Nyw0LjQ4IDE0LjcyLDQuNzMgMTQuNzIsNC43MyBDMTUuMjEsNS45NyAxNC45LDYuODggMTQuODEsNy4xMSBDMTUuMzksNy43NCAxNS43Myw4LjU0IDE1LjczLDkuNTMgQzE1LjczLDEyLjk5IDEzLjYzLDEzLjc1IDExLjYyLDEzLjk3IEMxMS45NCwxNC4yNSAxMi4yMywxNC44IDEyLjIzLDE1LjY0IEMxMi4yMywxNi44NCAxMi4yMiwxNy44MSAxMi4yMiwxOC4xMSBDMTIuMjIsMTguMzUgMTIuMzgsMTguNjMgMTIuODQsMTguNTQgQzE2LjQyLDE3LjM1IDE5LDEzLjk4IDE5LDEwIEMxOSw1LjAzIDE0Ljk3LDEgMTAsMSBMMTAsMSBaXCIvPjwvc3ZnPiIsCiAgICAgICAgImdpdHRlciI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHJlY3QgeD1cIjMuNVwiIHk9XCIxXCIgd2lkdGg9XCIxLjUzMVwiIGhlaWdodD1cIjExLjQ3MVwiLz48cmVjdCB4PVwiNy4zMjRcIiB5PVwiNC4wNTlcIiB3aWR0aD1cIjEuNTI5XCIgaGVpZ2h0PVwiMTUuMjk0XCIvPjxyZWN0IHg9XCIxMS4xNDhcIiB5PVwiNC4wNTlcIiB3aWR0aD1cIjEuNTI3XCIgaGVpZ2h0PVwiMTUuMjk0XCIvPjxyZWN0IHg9XCIxNC45NzFcIiB5PVwiNC4wNTlcIiB3aWR0aD1cIjEuNTI5XCIgaGVpZ2h0PVwiOC40MTJcIi8+PC9zdmc+IiwKICAgICAgICAiZ29vZ2xlLXBsdXMiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNMTIuOSw5YzAsMi43LTAuNiw1LTMuMiw2LjNjLTMuNywxLjgtOC4xLDAuMi05LjQtMy42Qy0xLjEsNy42LDEuOSwzLjMsNi4xLDNjMS43LTAuMSwzLjIsMC4zLDQuNiwxLjMgYzAuMSwwLjEsMC4zLDAuMiwwLjQsMC40Yy0wLjUsMC41LTEuMiwxLTEuNywxLjZjLTEtMC44LTIuMS0xLjEtMy41LTAuOUM1LDUuNiw0LjIsNiwzLjYsNi43Yy0xLjMsMS4zLTEuNSwzLjQtMC41LDUgYzEsMS43LDIuNiwyLjMsNC42LDEuOWMxLjQtMC4zLDIuNC0xLjIsMi42LTIuNkg2LjlWOUgxMi45elwiLz48cG9seWdvbiBwb2ludHM9XCIyMCw5IDIwLDExIDE4LDExIDE4LDEzIDE2LDEzIDE2LDExIDE0LDExIDE0LDkgMTYsOSAxNiw3IDE4LDcgMTgsOVwiLz48L3N2Zz4iLAogICAgICAgICJnb29nbGUiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNMTcuODYsOS4wOSBDMTguNDYsMTIuMTIgMTcuMTQsMTYuMDUgMTMuODEsMTcuNTYgQzkuNDUsMTkuNTMgNC4xMywxNy42OCAyLjQ3LDEyLjg3IEMwLjY4LDcuNjggNC4yMiwyLjQyIDkuNSwyLjAzIEMxMS41NywxLjg4IDEzLjQyLDIuMzcgMTUuMDUsMy42NSBDMTUuMjIsMy43OCAxNS4zNywzLjkzIDE1LjYxLDQuMTQgQzE0LjksNC44MSAxNC4yMyw1LjQ1IDEzLjUsNi4xNCBDMTIuMjcsNS4wOCAxMC44NCw0LjcyIDkuMjgsNC45OCBDOC4xMiw1LjE3IDcuMTYsNS43NiA2LjM3LDYuNjMgQzQuODgsOC4yNyA0LjYyLDEwLjg2IDUuNzYsMTIuODIgQzYuOTUsMTQuODcgOS4xNywxNS44IDExLjU3LDE1LjI1IEMxMy4yNywxNC44NyAxNC43NiwxMy4zMyAxNC44OSwxMS43NSBMMTAuNTEsMTEuNzUgTDEwLjUxLDkuMDkgTDE3Ljg2LDkuMDkgTDE3Ljg2LDkuMDkgWlwiLz48L3N2Zz4iLAogICAgICAgICJncmlkIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cmVjdCB4PVwiMlwiIHk9XCIyXCIgd2lkdGg9XCIzXCIgaGVpZ2h0PVwiM1wiLz48cmVjdCB4PVwiOFwiIHk9XCIyXCIgd2lkdGg9XCIzXCIgaGVpZ2h0PVwiM1wiLz48cmVjdCB4PVwiMTRcIiB5PVwiMlwiIHdpZHRoPVwiM1wiIGhlaWdodD1cIjNcIi8+PHJlY3QgeD1cIjJcIiB5PVwiOFwiIHdpZHRoPVwiM1wiIGhlaWdodD1cIjNcIi8+PHJlY3QgeD1cIjhcIiB5PVwiOFwiIHdpZHRoPVwiM1wiIGhlaWdodD1cIjNcIi8+PHJlY3QgeD1cIjE0XCIgeT1cIjhcIiB3aWR0aD1cIjNcIiBoZWlnaHQ9XCIzXCIvPjxyZWN0IHg9XCIyXCIgeT1cIjE0XCIgd2lkdGg9XCIzXCIgaGVpZ2h0PVwiM1wiLz48cmVjdCB4PVwiOFwiIHk9XCIxNFwiIHdpZHRoPVwiM1wiIGhlaWdodD1cIjNcIi8+PHJlY3QgeD1cIjE0XCIgeT1cIjE0XCIgd2lkdGg9XCIzXCIgaGVpZ2h0PVwiM1wiLz48L3N2Zz4iLAogICAgICAgICJoYXBweSI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGNpcmNsZSBjeD1cIjEzXCIgY3k9XCI3XCIgcj1cIjFcIi8+PGNpcmNsZSBjeD1cIjdcIiBjeT1cIjdcIiByPVwiMVwiLz48Y2lyY2xlIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIGN4PVwiMTBcIiBjeT1cIjEwXCIgcj1cIjguNVwiLz48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBkPVwiTTE0LjYsMTEuNCBDMTMuOSwxMy4zIDEyLjEsMTQuNSAxMCwxNC41IEM3LjksMTQuNSA2LjEsMTMuMyA1LjQsMTEuNFwiLz48L3N2Zz4iLAogICAgICAgICJoYXNodGFnIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTE1LjQzMSw4IEwxNS42NjEsNyBMMTIuOTExLDcgTDEzLjgzMSwzIEwxMi45MDEsMyBMMTEuOTgsNyBMOS4yOSw3IEwxMC4yMSwzIEw5LjI4MSwzIEw4LjM2MSw3IEw1LjIzLDcgTDUsOCBMOC4xMyw4IEw3LjIxLDEyIEw0LjIzLDEyIEw0LDEzIEw2Ljk4LDEzIEw2LjA2MSwxNyBMNi45OTEsMTcgTDcuOTExLDEzIEwxMC42MDEsMTMgTDkuNjgxLDE3IEwxMC42MTEsMTcgTDExLjUzMSwxMyBMMTQuNDMxLDEzIEwxNC42NjEsMTIgTDExLjc2LDEyIEwxMi42ODEsOCBMMTUuNDMxLDggWiBNMTAuODMxLDEyIEw4LjE0MSwxMiBMOS4wNjEsOCBMMTEuNzUsOCBMMTAuODMxLDEyIFpcIi8+PC9zdmc+IiwKICAgICAgICAiaGVhcnQiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMDNcIiBkPVwiTTEwLDQgQzEwLDQgOC4xLDIgNS43NCwyIEMzLjM4LDIgMSwzLjU1IDEsNi43MyBDMSw4Ljg0IDIuNjcsMTAuNDQgMi42NywxMC40NCBMMTAsMTggTDE3LjMzLDEwLjQ0IEMxNy4zMywxMC40NCAxOSw4Ljg0IDE5LDYuNzMgQzE5LDMuNTUgMTYuNjIsMiAxNC4yNiwyIEMxMS45LDIgMTAsNCAxMCw0IEwxMCw0IFpcIi8+PC9zdmc+IiwKICAgICAgICAiaGlzdG9yeSI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBvbHlsaW5lIGZpbGw9XCIjMDAwXCIgcG9pbnRzPVwiMSAyIDIgMiAyIDYgNiA2IDYgNyAxIDcgMSAyXCIvPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMVwiIGQ9XCJNMi4xLDYuNTQ4IEMzLjM5MSwzLjI5IDYuNzQ2LDEgMTAuNSwxIEMxNS41LDEgMTkuNSw1IDE5LjUsMTAgQzE5LjUsMTUgMTUuNSwxOSAxMC41LDE5IEM1LjUsMTkgMS41LDE1IDEuNSwxMFwiLz48cmVjdCB4PVwiOVwiIHk9XCI0XCIgd2lkdGg9XCIxXCIgaGVpZ2h0PVwiN1wiLz48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBkPVwiTTEzLjAxOCwxNC4xOTcgTDkuNDQ1LDEwLjYyNVwiLz48L3N2Zz4iLAogICAgICAgICJob21lIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cG9seWdvbiBwb2ludHM9XCIxOC42NSAxMS4zNSAxMCAyLjcxIDEuMzUgMTEuMzUgMC42NSAxMC42NSAxMCAxLjI5IDE5LjM1IDEwLjY1XCIvPjxwb2x5Z29uIHBvaW50cz1cIjE1IDQgMTggNCAxOCA3IDE3IDcgMTcgNSAxNSA1XCIvPjxwb2x5Z29uIHBvaW50cz1cIjMgMTEgNCAxMSA0IDE4IDcgMTggNyAxMiAxMiAxMiAxMiAxOCAxNiAxOCAxNiAxMSAxNyAxMSAxNyAxOSAxMSAxOSAxMSAxMyA4IDEzIDggMTkgMyAxOVwiLz48L3N2Zz4iLAogICAgICAgICJpbWFnZSI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGNpcmNsZSBjeD1cIjE2LjFcIiBjeT1cIjYuMVwiIHI9XCIxLjFcIi8+PHJlY3QgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgeD1cIi41XCIgeT1cIjIuNVwiIHdpZHRoPVwiMTlcIiBoZWlnaHQ9XCIxNVwiLz48cG9seWxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4wMVwiIHBvaW50cz1cIjQsMTMgOCw5IDEzLDE0XCIvPjxwb2x5bGluZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjAxXCIgcG9pbnRzPVwiMTEsMTIgMTIuNSwxMC41IDE2LDE0XCIvPjwvc3ZnPiIsCiAgICAgICAgImluZm8iOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNMTIuMTMsMTEuNTkgQzExLjk3LDEyLjg0IDEwLjM1LDE0LjEyIDkuMSwxNC4xNiBDNi4xNywxNC4yIDkuODksOS40NiA4Ljc0LDguMzcgQzkuMyw4LjE2IDEwLjYyLDcuODMgMTAuNjIsOC44MSBDMTAuNjIsOS42MyAxMC4xMiwxMC41NSA5Ljg4LDExLjMyIEM4LjY2LDE1LjE2IDEyLjEzLDExLjE1IDEyLjE0LDExLjE4IEMxMi4xNiwxMS4yMSAxMi4xNiwxMS4zNSAxMi4xMywxMS41OSBDMTIuMDgsMTEuOTUgMTIuMTYsMTEuMzUgMTIuMTMsMTEuNTkgTDEyLjEzLDExLjU5IFogTTExLjU2LDUuNjcgQzExLjU2LDYuNjcgOS4zNiw3LjE1IDkuMzYsNi4wMyBDOS4zNiw1IDExLjU2LDQuNTQgMTEuNTYsNS42NyBMMTEuNTYsNS42NyBaXCIvPjxjaXJjbGUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4xXCIgY3g9XCIxMFwiIGN5PVwiMTBcIiByPVwiOVwiLz48L3N2Zz4iLAogICAgICAgICJpbnN0YWdyYW0iOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNMTMuNTUsMUg2LjQ2QzMuNDUsMSwxLDMuNDQsMSw2LjQ0djcuMTJjMCwzLDIuNDUsNS40NCw1LjQ2LDUuNDRoNy4wOGMzLjAyLDAsNS40Ni0yLjQ0LDUuNDYtNS40NFY2LjQ0IEMxOS4wMSwzLjQ0LDE2LjU2LDEsMTMuNTUsMXogTTE3LjUsMTRjMCwxLjkzLTEuNTcsMy41LTMuNSwzLjVINmMtMS45MywwLTMuNS0xLjU3LTMuNS0zLjVWNmMwLTEuOTMsMS41Ny0zLjUsMy41LTMuNWg4IGMxLjkzLDAsMy41LDEuNTcsMy41LDMuNVYxNHpcIi8+PGNpcmNsZSBjeD1cIjE0Ljg3XCIgY3k9XCI1LjI2XCIgcj1cIjEuMDlcIi8+PHBhdGggZD1cIk0xMC4wMyw1LjQ1Yy0yLjU1LDAtNC42MywyLjA2LTQuNjMsNC42YzAsMi41NSwyLjA3LDQuNjEsNC42Myw0LjYxYzIuNTYsMCw0LjYzLTIuMDYxLDQuNjMtNC42MSBDMTQuNjUsNy41MSwxMi41OCw1LjQ1LDEwLjAzLDUuNDVMMTAuMDMsNS40NUwxMC4wMyw1LjQ1eiBNMTAuMDgsMTNjLTEuNjYsMC0zLTEuMzQtMy0yLjk5YzAtMS42NSwxLjM0LTIuOTksMy0yLjk5czMsMS4zNCwzLDIuOTkgQzEzLjA4LDExLjY2LDExLjc0LDEzLDEwLjA4LDEzTDEwLjA4LDEzTDEwLjA4LDEzelwiLz48L3N2Zz4iLAogICAgICAgICJpdGFsaWMiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNMTIuNjMsNS40OCBMMTAuMTUsMTQuNTIgQzEwLDE1LjA4IDEwLjM3LDE1LjI1IDExLjkyLDE1LjMgTDExLjcyLDE2IEw2LDE2IEw2LjIsMTUuMzEgQzcuNzgsMTUuMjYgOC4xOSwxNS4wOSA4LjM0LDE0LjUzIEwxMC44Miw1LjQ5IEMxMC45Nyw0LjkyIDEwLjYzLDQuNzYgOS4wOSw0LjcxIEw5LjI4LDQgTDE1LDQgTDE0LjgxLDQuNjkgQzEzLjIzLDQuNzUgMTIuNzgsNC45MSAxMi42Myw1LjQ4IEwxMi42Myw1LjQ4IFpcIi8+PC9zdmc+IiwKICAgICAgICAiam9vbWxhIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTcuOCwxMy40bDEuNy0xLjdMNS45LDhjLTAuNi0wLjUtMC42LTEuNSwwLTJjMC42LTAuNiwxLjQtMC42LDIsMGwxLjctMS43Yy0xLTEtMi4zLTEuMy0zLjYtMUM1LjgsMi4yLDQuOCwxLjQsMy43LDEuNCBjLTEuMywwLTIuMywxLTIuMywyLjNjMCwxLjEsMC44LDIsMS44LDIuM2MtMC40LDEuMy0wLjEsMi44LDEsMy44TDcuOCwxMy40TDcuOCwxMy40elwiLz48cGF0aCBkPVwiTTEwLjIsNC4zYzEtMSwyLjUtMS40LDMuOC0xYzAuMi0xLjEsMS4xLTIsMi4zLTJjMS4zLDAsMi4zLDEsMi4zLDIuM2MwLDEuMi0wLjksMi4yLTIsMi4zYzAuNCwxLjMsMCwyLjgtMSwzLjhMMTMuOSw4IGMwLjYtMC41LDAuNi0xLjUsMC0yYy0wLjUtMC42LTEuNS0wLjYtMiwwTDguMiw5LjdMNi41LDhcIi8+PHBhdGggZD1cIk0xNC4xLDE2LjhjLTEuMywwLjQtMi44LDAuMS0zLjgtMWwxLjctMS43YzAuNiwwLjYsMS41LDAuNiwyLDBjMC41LTAuNiwwLjYtMS41LDAtMmwtMy43LTMuN0wxMiw2LjdsMy43LDMuNyBjMSwxLDEuMywyLjQsMSwzLjZjMS4xLDAuMiwyLDEuMSwyLDIuM2MwLDEuMy0xLDIuMy0yLjMsMi4zQzE1LjIsMTguNiwxNC4zLDE3LjgsMTQuMSwxNi44XCIvPjxwYXRoIGQ9XCJNMTMuMiwxMi4ybC0zLjcsMy43Yy0xLDEtMi40LDEuMy0zLjYsMWMtMC4yLDEtMS4yLDEuOC0yLjIsMS44Yy0xLjMsMC0yLjMtMS0yLjMtMi4zYzAtMS4xLDAuOC0yLDEuOC0yLjMgYy0wLjMtMS4zLDAtMi43LDEtMy43bDEuNywxLjdjLTAuNiwwLjYtMC42LDEuNSwwLDJjMC42LDAuNiwxLjQsMC42LDIsMGwzLjctMy43XCIvPjwvc3ZnPiIsCiAgICAgICAgImxhcHRvcCI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHJlY3QgeT1cIjE2XCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjFcIi8+PHJlY3QgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgeD1cIjIuNVwiIHk9XCI0LjVcIiB3aWR0aD1cIjE1XCIgaGVpZ2h0PVwiMTBcIi8+PC9zdmc+IiwKICAgICAgICAibGlmZXNhdmVyIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTEwLDAuNSBDNC43NiwwLjUgMC41LDQuNzYgMC41LDEwIEMwLjUsMTUuMjQgNC43NiwxOS41IDEwLDE5LjUgQzE1LjI0LDE5LjUgMTkuNSwxNS4yNCAxOS41LDEwIEMxOS41LDQuNzYgMTUuMjQsMC41IDEwLDAuNSBMMTAsMC41IFogTTEwLDEuNSBDMTEuNDksMS41IDEyLjg5LDEuODggMTQuMTEsMi41NiBMMTEuODUsNC44MiBDMTEuMjcsNC42MSAxMC42NSw0LjUgMTAsNC41IEM5LjIxLDQuNSA4LjQ3LDQuNjcgNy43OSw0Ljk2IEw1LjU4LDIuNzUgQzYuODcsMS45NSA4LjM4LDEuNSAxMCwxLjUgTDEwLDEuNSBaIE00Ljk2LDcuOCBDNC42Nyw4LjQ4IDQuNSw5LjIxIDQuNSwxMCBDNC41LDEwLjY1IDQuNjEsMTEuMjcgNC44MywxMS44NSBMMi41NiwxNC4xMSBDMS44OCwxMi44OSAxLjUsMTEuNDkgMS41LDEwIEMxLjUsOC4zOCAxLjk1LDYuODcgMi43NSw1LjU4IEw0Ljk2LDcuNzkgTDQuOTYsNy44IEw0Ljk2LDcuOCBaIE0xMCwxOC41IEM4LjI1LDE4LjUgNi42MiwxNy45NyA1LjI3LDE3LjA2IEw3LjQ2LDE0Ljg3IEM4LjIyLDE1LjI3IDkuMDgsMTUuNSAxMCwxNS41IEMxMC43OSwxNS41IDExLjUzLDE1LjMzIDEyLjIxLDE1LjA0IEwxNC40MiwxNy4yNSBDMTMuMTMsMTguMDUgMTEuNjIsMTguNSAxMCwxOC41IEwxMCwxOC41IFogTTEwLDE0LjUgQzcuNTIsMTQuNSA1LjUsMTIuNDggNS41LDEwIEM1LjUsNy41MiA3LjUyLDUuNSAxMCw1LjUgQzEyLjQ4LDUuNSAxNC41LDcuNTIgMTQuNSwxMCBDMTQuNSwxMi40OCAxMi40OCwxNC41IDEwLDE0LjUgTDEwLDE0LjUgWiBNMTUuMDQsMTIuMjEgQzE1LjMzLDExLjUzIDE1LjUsMTAuNzkgMTUuNSwxMCBDMTUuNSw5LjA4IDE1LjI3LDguMjIgMTQuODcsNy40NiBMMTcuMDYsNS4yNyBDMTcuOTcsNi42MiAxOC41LDguMjUgMTguNSwxMCBDMTguNSwxMS42MiAxOC4wNSwxMy4xMyAxNy4yNSwxNC40MiBMMTUuMDQsMTIuMjEgTDE1LjA0LDEyLjIxIFpcIi8+PC9zdmc+IiwKICAgICAgICAibGluayI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4xXCIgZD1cIk0xMC42MjUsMTIuMzc1IEw3LjUyNSwxNS40NzUgQzYuODI1LDE2LjE3NSA1LjkyNSwxNi4xNzUgNS4yMjUsMTUuNDc1IEw0LjUyNSwxNC43NzUgQzMuODI1LDE0LjA3NCAzLjgyNSwxMy4xNzUgNC41MjUsMTIuNDc1IEw3LjYyNSw5LjM3NVwiLz48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBkPVwiTTkuMzI1LDcuMzc1IEwxMi40MjUsNC4yNzUgQzEzLjEyNSwzLjU3NSAxNC4wMjUsMy41NzUgMTQuNzI0LDQuMjc1IEwxNS40MjUsNC45NzUgQzE2LjEyNSw1LjY3NSAxNi4xMjUsNi41NzUgMTUuNDI1LDcuMjc1IEwxMi4zMjUsMTAuMzc1XCIvPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMVwiIGQ9XCJNNy45MjUsMTEuODc1IEwxMS45MjUsNy45NzVcIi8+PC9zdmc+IiwKICAgICAgICAibGlua2VkaW4iOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNNS43NywxNy44OSBMNS43Nyw3LjE3IEwyLjIxLDcuMTcgTDIuMjEsMTcuODkgTDUuNzcsMTcuODkgTDUuNzcsMTcuODkgWiBNMy45OSw1LjcxIEM1LjIzLDUuNzEgNi4wMSw0Ljg5IDYuMDEsMy44NiBDNS45OSwyLjggNS4yNCwyIDQuMDIsMiBDMi44LDIgMiwyLjggMiwzLjg1IEMyLDQuODggMi43Nyw1LjcgMy45Nyw1LjcgTDMuOTksNS43IEwzLjk5LDUuNzEgTDMuOTksNS43MSBaXCIvPjxwYXRoIGQ9XCJNNy43NSwxNy44OSBMMTEuMzEsMTcuODkgTDExLjMxLDExLjkgQzExLjMxLDExLjU4IDExLjMzLDExLjI2IDExLjQzLDExLjAzIEMxMS42OSwxMC4zOSAxMi4yNyw5LjczIDEzLjI2LDkuNzMgQzE0LjU1LDkuNzMgMTUuMDYsMTAuNzEgMTUuMDYsMTIuMTUgTDE1LjA2LDE3Ljg5IEwxOC42MiwxNy44OSBMMTguNjIsMTEuNzQgQzE4LjYyLDguNDUgMTYuODYsNi45MiAxNC41Miw2LjkyIEMxMi42LDYuOTIgMTEuNzUsNy45OSAxMS4yOCw4LjczIEwxMS4zLDguNzMgTDExLjMsNy4xNyBMNy43NSw3LjE3IEM3Ljc5LDguMTcgNy43NSwxNy44OSA3Ljc1LDE3Ljg5IEw3Ljc1LDE3Ljg5IEw3Ljc1LDE3Ljg5IFpcIi8+PC9zdmc+IiwKICAgICAgICAibGlzdCI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHJlY3QgeD1cIjZcIiB5PVwiNFwiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxXCIvPjxyZWN0IHg9XCI2XCIgeT1cIjlcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMVwiLz48cmVjdCB4PVwiNlwiIHk9XCIxNFwiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxXCIvPjxyZWN0IHg9XCIyXCIgeT1cIjRcIiB3aWR0aD1cIjJcIiBoZWlnaHQ9XCIxXCIvPjxyZWN0IHg9XCIyXCIgeT1cIjlcIiB3aWR0aD1cIjJcIiBoZWlnaHQ9XCIxXCIvPjxyZWN0IHg9XCIyXCIgeT1cIjE0XCIgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiMVwiLz48L3N2Zz4iLAogICAgICAgICJsb2NhdGlvbiI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4wMVwiIGQ9XCJNMTAsMC41IEM2LjQxLDAuNSAzLjUsMy4zOSAzLjUsNi45OCBDMy41LDExLjgzIDEwLDE5IDEwLDE5IEMxMCwxOSAxNi41LDExLjgzIDE2LjUsNi45OCBDMTYuNSwzLjM5IDEzLjU5LDAuNSAxMCwwLjUgTDEwLDAuNSBaXCIvPjxjaXJjbGUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgY3g9XCIxMFwiIGN5PVwiNi44XCIgcj1cIjIuM1wiLz48L3N2Zz4iLAogICAgICAgICJsb2NrIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cmVjdCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBoZWlnaHQ9XCIxMFwiIHdpZHRoPVwiMTNcIiB5PVwiOC41XCIgeD1cIjMuNVwiLz48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBkPVwiTTYuNSw4IEw2LjUsNC44OCBDNi41LDMuMDEgOC4wNywxLjUgMTAsMS41IEMxMS45MywxLjUgMTMuNSwzLjAxIDEzLjUsNC44OCBMMTMuNSw4XCIvPjwvc3ZnPiIsCiAgICAgICAgIm1haWwiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwb2x5bGluZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBwb2ludHM9XCIxLjQsNi41IDEwLDExIDE4LjYsNi41XCIvPjxwYXRoIGQ9XCJNIDEsNCAxLDE2IDE5LDE2IDE5LDQgMSw0IFogTSAxOCwxNSAyLDE1IDIsNSAxOCw1IDE4LDE1IFpcIi8+PC9zdmc+IiwKICAgICAgICAibWVudSI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHJlY3QgeD1cIjJcIiB5PVwiNFwiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxXCIvPjxyZWN0IHg9XCIyXCIgeT1cIjlcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMVwiLz48cmVjdCB4PVwiMlwiIHk9XCIxNFwiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxXCIvPjwvc3ZnPiIsCiAgICAgICAgIm1pY3JvcGhvbmUiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxsaW5lIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHgxPVwiMTBcIiB4Mj1cIjEwXCIgeTE9XCIxNi40NFwiIHkyPVwiMTguNVwiLz48bGluZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiB4MT1cIjdcIiB4Mj1cIjEzXCIgeTE9XCIxOC41XCIgeTI9XCIxOC41XCIvPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMVwiIGQ9XCJNMTMuNSA0Ljg5djUuODdhMy41IDMuNSAwIDAgMS03IDBWNC44OWEzLjUgMy41IDAgMCAxIDcgMHpcIi8+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4xXCIgZD1cIk0xNS41IDEwLjM2VjExYTUuNSA1LjUgMCAwIDEtMTEgMHYtLjZcIi8+PC9zdmc+IiwKICAgICAgICAibWludXMtY2lyY2xlIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48Y2lyY2xlIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMVwiIGN4PVwiOS41XCIgY3k9XCI5LjVcIiByPVwiOVwiLz48bGluZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiB4MT1cIjVcIiB5MT1cIjkuNVwiIHgyPVwiMTRcIiB5Mj1cIjkuNVwiLz48L3N2Zz4iLAogICAgICAgICJtaW51cyI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHJlY3QgaGVpZ2h0PVwiMVwiIHdpZHRoPVwiMThcIiB5PVwiOVwiIHg9XCIxXCIvPjwvc3ZnPiIsCiAgICAgICAgIm1vcmUtdmVydGljYWwiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxjaXJjbGUgY3g9XCIxMFwiIGN5PVwiM1wiIHI9XCIyXCIvPjxjaXJjbGUgY3g9XCIxMFwiIGN5PVwiMTBcIiByPVwiMlwiLz48Y2lyY2xlIGN4PVwiMTBcIiBjeT1cIjE3XCIgcj1cIjJcIi8+PC9zdmc+IiwKICAgICAgICAibW9yZSI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGNpcmNsZSBjeD1cIjNcIiBjeT1cIjEwXCIgcj1cIjJcIi8+PGNpcmNsZSBjeD1cIjEwXCIgY3k9XCIxMFwiIHI9XCIyXCIvPjxjaXJjbGUgY3g9XCIxN1wiIGN5PVwiMTBcIiByPVwiMlwiLz48L3N2Zz4iLAogICAgICAgICJtb3ZlIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cG9seWdvbiBwb2ludHM9XCI0LDUgMSw1IDEsOSAyLDkgMiw2IDQsNlwiLz48cG9seWdvbiBwb2ludHM9XCIxLDE2IDIsMTYgMiwxOCA0LDE4IDQsMTkgMSwxOVwiLz48cG9seWdvbiBwb2ludHM9XCIxNCwxNiAxNCwxOSAxMSwxOSAxMSwxOCAxMywxOCAxMywxNlwiLz48cmVjdCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiB4PVwiNS41XCIgeT1cIjEuNVwiIHdpZHRoPVwiMTNcIiBoZWlnaHQ9XCIxM1wiLz48cmVjdCB4PVwiMVwiIHk9XCIxMVwiIHdpZHRoPVwiMVwiIGhlaWdodD1cIjNcIi8+PHJlY3QgeD1cIjZcIiB5PVwiMThcIiB3aWR0aD1cIjNcIiBoZWlnaHQ9XCIxXCIvPjwvc3ZnPiIsCiAgICAgICAgIm51dCI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBvbHlnb24gZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgcG9pbnRzPVwiMi41LDUuNyAxMCwxLjMgMTcuNSw1LjcgMTcuNSwxNC4zIDEwLDE4LjcgMi41LDE0LjNcIi8+PGNpcmNsZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBjeD1cIjEwXCIgY3k9XCIxMFwiIHI9XCIzLjVcIi8+PC9zdmc+IiwKICAgICAgICAicGFnZWtpdCI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBvbHlnb24gcG9pbnRzPVwiMywxIDE3LDEgMTcsMTYgMTAsMTYgMTAsMTMgMTQsMTMgMTQsNCA2LDQgNiwxNiAxMCwxNiAxMCwxOSAzLDE5XCIvPjwvc3ZnPiIsCiAgICAgICAgInBhaW50LWJ1Y2tldCI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0xMC4yMSwxIEwwLDExLjIxIEw4LjEsMTkuMzEgTDE4LjMxLDkuMSBMMTAuMjEsMSBMMTAuMjEsMSBaIE0xNi44OSw5LjEgTDE1LDExIEwxLjcsMTEgTDEwLjIxLDIuNDIgTDE2Ljg5LDkuMSBaXCIvPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMVwiIGQ9XCJNNi40MiwyLjMzIEwxMS43LDcuNjFcIi8+PHBhdGggZD1cIk0xOC40OSwxMiBDMTguNDksMTIgMjAsMTQuMDYgMjAsMTUuMzYgQzIwLDE2LjI4IDE5LjI0LDE3IDE4LjQ5LDE3IEwxOC40OSwxNyBDMTcuNzQsMTcgMTcsMTYuMjggMTcsMTUuMzYgQzE3LDE0LjA2IDE4LjQ5LDEyIDE4LjQ5LDEyIEwxOC40OSwxMiBaXCIvPjwvc3ZnPiIsCiAgICAgICAgInBlbmNpbCI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgZD1cIk0xNy4yNSw2LjAxIEw3LjEyLDE2LjEgTDMuODIsMTcuMiBMNS4wMiwxMy45IEwxNS4xMiwzLjg4IEMxNS43MSwzLjI5IDE2LjY2LDMuMjkgMTcuMjUsMy44OCBDMTcuODMsNC40NyAxNy44Myw1LjQyIDE3LjI1LDYuMDEgTDE3LjI1LDYuMDEgWlwiLz48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBkPVwiTTE1Ljk4LDcuMjY4IEwxMy44NTEsNS4xNDhcIi8+PC9zdmc+IiwKICAgICAgICAicGhvbmUtbGFuZHNjYXBlIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBkPVwiTTE3LDUuNSBDMTcuOCw1LjUgMTguNSw2LjIgMTguNSw3IEwxOC41LDE0IEMxOC41LDE0LjggMTcuOCwxNS41IDE3LDE1LjUgTDMsMTUuNSBDMi4yLDE1LjUgMS41LDE0LjggMS41LDE0IEwxLjUsNyBDMS41LDYuMiAyLjIsNS41IDMsNS41IEwxNyw1LjUgTDE3LDUuNSBMMTcsNS41IFpcIi8+PGNpcmNsZSBjeD1cIjMuOFwiIGN5PVwiMTAuNVwiIHI9XCIuOFwiLz48L3N2Zz4iLAogICAgICAgICJwaG9uZSI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgZD1cIk0xNS41LDE3IEMxNS41LDE3LjggMTQuOCwxOC41IDE0LDE4LjUgTDcsMTguNSBDNi4yLDE4LjUgNS41LDE3LjggNS41LDE3IEw1LjUsMyBDNS41LDIuMiA2LjIsMS41IDcsMS41IEwxNCwxLjUgQzE0LjgsMS41IDE1LjUsMi4yIDE1LjUsMyBMMTUuNSwxNyBMMTUuNSwxNyBMMTUuNSwxNyBaXCIvPjxjaXJjbGUgY3g9XCIxMC41XCIgY3k9XCIxNi41XCIgcj1cIi44XCIvPjwvc3ZnPiIsCiAgICAgICAgInBpbnRlcmVzdCI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0xMC4yMSwxIEM1LjUsMSAzLDQuMTYgMyw3LjYxIEMzLDkuMjEgMy44NSwxMS4yIDUuMjIsMTEuODQgQzUuNDMsMTEuOTQgNS41NCwxMS44OSA1LjU4LDExLjY5IEM1LjYyLDExLjU0IDUuOCwxMC44IDUuODgsMTAuNDUgQzUuOTEsMTAuMzQgNS44OSwxMC4yNCA1LjgsMTAuMTQgQzUuMzYsOS41OSA1LDguNTggNSw3LjY1IEM1LDUuMjQgNi44MiwyLjkxIDkuOTMsMi45MSBDMTIuNjEsMi45MSAxNC40OSw0Ljc0IDE0LjQ5LDcuMzUgQzE0LjQ5LDEwLjMgMTMsMTIuMzUgMTEuMDYsMTIuMzUgQzkuOTksMTIuMzUgOS4xOSwxMS40NyA5LjQ0LDEwLjM4IEM5Ljc1LDkuMDggMTAuMzUsNy42OCAxMC4zNSw2Ljc1IEMxMC4zNSw1LjkxIDkuOSw1LjIxIDguOTcsNS4yMSBDNy44Nyw1LjIxIDYuOTksNi4zNCA2Ljk5LDcuODYgQzYuOTksOC44MyA3LjMyLDkuNDggNy4zMiw5LjQ4IEM3LjMyLDkuNDggNi4yNCwxNC4wNiA2LjA0LDE0LjkxIEM1LjcsMTYuMzUgNi4wOCwxOC43IDYuMTIsMTguOSBDNi4xNCwxOS4wMSA2LjI2LDE5LjA1IDYuMzMsMTguOTUgQzYuNDQsMTguODEgNy43NCwxNi44NSA4LjExLDE1LjQ0IEM4LjI0LDE0LjkzIDguNzksMTIuODQgOC43OSwxMi44NCBDOS4xNSwxMy41MiAxMC4xOSwxNC4wOSAxMS4yOSwxNC4wOSBDMTQuNTgsMTQuMDkgMTYuOTYsMTEuMDYgMTYuOTYsNy4zIEMxNi45NCwzLjcgMTQsMSAxMC4yMSwxXCIvPjwvc3ZnPiIsCiAgICAgICAgInBsYXktY2lyY2xlIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cG9seWdvbiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBwb2ludHM9XCI4LjUgNyAxMy41IDEwIDguNSAxM1wiLz48Y2lyY2xlIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMVwiIGN4PVwiMTBcIiBjeT1cIjEwXCIgcj1cIjlcIi8+PC9zdmc+IiwKICAgICAgICAicGxheSI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBvbHlnb24gZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgcG9pbnRzPVwiNi41LDUgMTQuNSwxMCA2LjUsMTVcIi8+PC9zdmc+IiwKICAgICAgICAicGx1cy1jaXJjbGUiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxjaXJjbGUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4xXCIgY3g9XCI5LjVcIiBjeT1cIjkuNVwiIHI9XCI5XCIvPjxsaW5lIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHgxPVwiOS41XCIgeTE9XCI1XCIgeDI9XCI5LjVcIiB5Mj1cIjE0XCIvPjxsaW5lIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHgxPVwiNVwiIHkxPVwiOS41XCIgeDI9XCIxNFwiIHkyPVwiOS41XCIvPjwvc3ZnPiIsCiAgICAgICAgInBsdXMiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxyZWN0IHg9XCI5XCIgeT1cIjFcIiB3aWR0aD1cIjFcIiBoZWlnaHQ9XCIxN1wiLz48cmVjdCB4PVwiMVwiIHk9XCI5XCIgd2lkdGg9XCIxN1wiIGhlaWdodD1cIjFcIi8+PC9zdmc+IiwKICAgICAgICAicHJpbnQiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwb2x5bGluZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBwb2ludHM9XCI0LjUgMTMuNSAxLjUgMTMuNSAxLjUgNi41IDE4LjUgNi41IDE4LjUgMTMuNSAxNS41IDEzLjVcIi8+PHBvbHlsaW5lIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHBvaW50cz1cIjE1LjUgNi41IDE1LjUgMi41IDQuNSAyLjUgNC41IDYuNVwiLz48cmVjdCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiB3aWR0aD1cIjExXCIgaGVpZ2h0PVwiNlwiIHg9XCI0LjVcIiB5PVwiMTEuNVwiLz48cmVjdCB3aWR0aD1cIjhcIiBoZWlnaHQ9XCIxXCIgeD1cIjZcIiB5PVwiMTNcIi8+PHJlY3Qgd2lkdGg9XCI4XCIgaGVpZ2h0PVwiMVwiIHg9XCI2XCIgeT1cIjE1XCIvPjwvc3ZnPiIsCiAgICAgICAgInB1bGwiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwb2x5Z29uIHBvaW50cz1cIjYuODUsOCA5LjUsMTAuNiAxMi4xNSw4IDEyLjg1LDguNyA5LjUsMTIgNi4xNSw4LjdcIi8+PGxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgeDE9XCI5LjVcIiB5MT1cIjExXCIgeDI9XCI5LjVcIiB5Mj1cIjJcIi8+PHBvbHlsaW5lIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHBvaW50cz1cIjYsNS41IDMuNSw1LjUgMy41LDE4LjUgMTUuNSwxOC41IDE1LjUsNS41IDEzLDUuNVwiLz48L3N2Zz4iLAogICAgICAgICJwdXNoIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cG9seWdvbiBwb2ludHM9XCIxMi4xNSw0IDkuNSwxLjQgNi44NSw0IDYuMTUsMy4zIDkuNSwwIDEyLjg1LDMuM1wiLz48bGluZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiB4MT1cIjkuNVwiIHkxPVwiMTBcIiB4Mj1cIjkuNVwiIHkyPVwiMVwiLz48cG9seWxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgcG9pbnRzPVwiNiA1LjUgMy41IDUuNSAzLjUgMTguNSAxNS41IDE4LjUgMTUuNSA1LjUgMTMgNS41XCIvPjwvc3ZnPiIsCiAgICAgICAgInF1ZXN0aW9uIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48Y2lyY2xlIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMVwiIGN4PVwiMTBcIiBjeT1cIjEwXCIgcj1cIjlcIi8+PGNpcmNsZSBjeD1cIjEwLjQ0XCIgY3k9XCIxNC40MlwiIHI9XCIxLjA1XCIvPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMlwiIGQ9XCJNOC4xNyw3Ljc5IEM4LjE3LDQuNzUgMTIuNzIsNC43MyAxMi43Miw3LjcyIEMxMi43Miw4LjY3IDExLjgxLDkuMTUgMTEuMjMsOS43NSBDMTAuNzUsMTAuMjQgMTAuNTEsMTAuNzMgMTAuNDUsMTEuNCBDMTAuNDQsMTEuNTMgMTAuNDMsMTEuNjQgMTAuNDMsMTEuNzVcIi8+PC9zdmc+IiwKICAgICAgICAicXVvdGUtcmlnaHQiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNMTcuMjcsNy43OSBDMTcuMjcsOS40NSAxNi45NywxMC40MyAxNS45OSwxMi4wMiBDMTQuOTgsMTMuNjQgMTMsMTUuMjMgMTEuNTYsMTUuOTcgTDExLjEsMTUuMDggQzEyLjM0LDE0LjIgMTMuMTQsMTMuNTEgMTQuMDIsMTEuODIgQzE0LjI3LDExLjM0IDE0LjQxLDEwLjkyIDE0LjQ5LDEwLjU0IEMxNC4zLDEwLjU4IDE0LjA5LDEwLjYgMTMuODgsMTAuNiBDMTIuMDYsMTAuNiAxMC41OSw5LjEyIDEwLjU5LDcuMyBDMTAuNTksNS40OCAxMi4wNiw0IDEzLjg4LDQgQzE1LjM5LDQgMTYuNjcsNS4wMiAxNy4wNSw2LjQyIEMxNy4xOSw2LjgyIDE3LjI3LDcuMjcgMTcuMjcsNy43OSBMMTcuMjcsNy43OSBaXCIvPjxwYXRoIGQ9XCJNOC42OCw3Ljc5IEM4LjY4LDkuNDUgOC4zOCwxMC40MyA3LjQsMTIuMDIgQzYuMzksMTMuNjQgNC40MSwxNS4yMyAyLjk3LDE1Ljk3IEwyLjUxLDE1LjA4IEMzLjc1LDE0LjIgNC41NSwxMy41MSA1LjQzLDExLjgyIEM1LjY4LDExLjM0IDUuODIsMTAuOTIgNS45LDEwLjU0IEM1LjcxLDEwLjU4IDUuNSwxMC42IDUuMjksMTAuNiBDMy40NywxMC42IDIsOS4xMiAyLDcuMyBDMiw1LjQ4IDMuNDcsNCA1LjI5LDQgQzYuOCw0IDguMDgsNS4wMiA4LjQ2LDYuNDIgQzguNiw2LjgyIDguNjgsNy4yNyA4LjY4LDcuNzkgTDguNjgsNy43OSBaXCIvPjwvc3ZnPiIsCiAgICAgICAgInJlY2VpdmVyIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjAxXCIgZD1cIk02LjE4OSwxMy42MTFDOC4xMzQsMTUuNTI1IDExLjA5NywxOC4yMzkgMTMuODY3LDE4LjI1N0MxNi40NywxOC4yNzUgMTguMiwxNi4yNDEgMTguMiwxNi4yNDFMMTQuNTA5LDEyLjU1MUwxMS41MzksMTMuNjM5TDYuMTg5LDguMjlMNy4zMTMsNS4zNTVMMy43NiwxLjhDMy43NiwxLjggMS43MzIsMy41MzcgMS43LDYuMDkyQzEuNjY3LDguODA5IDQuMzQ3LDExLjczOCA2LjE4OSwxMy42MTFcIi8+PC9zdmc+IiwKICAgICAgICAicmVkZGl0IjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTE5IDkuMDVhMi41NiAyLjU2IDAgMCAwLTIuNTYtMi41NiAyLjU5IDIuNTkgMCAwIDAtMS44OC44MiAxMC42MyAxMC42MyAwIDAgMC00LjE0LTF2LS4wOGMuNTgtMS42MiAxLjU4LTMuODkgMi43LTQuMS4zOC0uMDguNzcuMTIgMS4xOS41N2ExLjE1IDEuMTUgMCAwIDAtLjA2LjM3IDEuNDggMS40OCAwIDEgMCAxLjUxLTEuNDUgMS40MyAxLjQzIDAgMCAwLS43Ni4xOUEyLjI5IDIuMjkgMCAwIDAgMTIuOTEgMWMtMi4xMS40My0zLjM5IDQuMzgtMy42MyA1LjE5IDAgMCAwIC4xMS0uMDYuMTFhMTAuNjUgMTAuNjUgMCAwIDAtMy43NSAxQTIuNTYgMi41NiAwIDAgMCAxIDkuMDVhMi40MiAyLjQyIDAgMCAwIC43MiAxLjc2QTUuMTggNS4xOCAwIDAgMCAxLjI0IDEzYzAgMy42NiAzLjkyIDYuNjQgOC43MyA2LjY0czguNzQtMyA4Ljc0LTYuNjRhNS4yMyA1LjIzIDAgMCAwLS40Ni0yLjEzQTIuNTggMi41OCAwIDAgMCAxOSA5LjA1em0tMTYuODggMGExLjQ0IDEuNDQgMCAwIDEgMi4yNy0xLjE5IDcuNjggNy42OCAwIDAgMC0yLjA3IDEuOTEgMS4zMyAxLjMzIDAgMCAxLS4yLS43MnpNMTAgMTguNGMtNC4xNyAwLTcuNTUtMi40LTcuNTUtNS40UzUuODMgNy41MyAxMCA3LjUzIDE3LjUgMTAgMTcuNSAxM3MtMy4zOCA1LjQtNy41IDUuNHptNy42OS04LjYxYTcuNjIgNy42MiAwIDAgMC0yLjA5LTEuOTEgMS40MSAxLjQxIDAgMCAxIC44NC0uMjggMS40NyAxLjQ3IDAgMCAxIDEuNDQgMS40NSAxLjM0IDEuMzQgMCAwIDEtLjIxLjcyelwiLz48cGF0aCBkPVwiTTYuNjkgMTIuNThhMS4zOSAxLjM5IDAgMSAxIDEuMzktMS4zOSAxLjM4IDEuMzggMCAwIDEtMS4zOCAxLjM5elwiLz48cGF0aCBkPVwiTTE0LjI2IDExLjJhMS4zOSAxLjM5IDAgMSAxLTEuMzktMS4zOSAxLjM5IDEuMzkgMCAwIDEgMS4zOSAxLjM5elwiLz48cGF0aCBkPVwiTTEzLjA5IDE0Ljg4YS41NC41NCAwIDAgMS0uMDkuNzcgNS4zIDUuMyAwIDAgMS0zLjI2IDEuMTkgNS42MSA1LjYxIDAgMCAxLTMuNC0xLjIyLjU1LjU1IDAgMSAxIC43My0uODMgNC4wOSA0LjA5IDAgMCAwIDUuMjUgMCAuNTYuNTYgMCAwIDEgLjc3LjA5elwiLz48L3N2Zz4iLAogICAgICAgICJyZWZyZXNoIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBkPVwiTTE3LjA4LDExLjE1IEMxNy4wOSwxMS4zMSAxNy4xLDExLjQ3IDE3LjEsMTEuNjQgQzE3LjEsMTUuNTMgMTMuOTQsMTguNjkgMTAuMDUsMTguNjkgQzYuMTYsMTguNjggMywxNS41MyAzLDExLjYzIEMzLDcuNzQgNi4xNiw0LjU4IDEwLjA1LDQuNTggQzEwLjksNC41OCAxMS43MSw0LjczIDEyLjQ2LDVcIi8+PHBvbHlsaW5lIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHBvaW50cz1cIjkuOSAyIDEyLjc5IDQuODkgOS43OSA3LjlcIi8+PC9zdmc+IiwKICAgICAgICAicmVwbHkiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNMTcuNywxMy4xMSBDMTYuMTIsMTAuMDIgMTMuODQsNy44NSAxMS4wMiw2LjYxIEMxMC41Nyw2LjQxIDkuNzUsNi4xMyA5LDUuOTEgTDksMiBMMSw5IEw5LDE2IEw5LDEyLjEzIEMxMC43OCwxMi40NyAxMi41LDEzLjE5IDE0LjA5LDE0LjI1IEMxNy4xMywxNi4yOCAxOC41NiwxOC41NCAxOC41NiwxOC41NCBDMTguNTYsMTguNTQgMTguODEsMTUuMjggMTcuNywxMy4xMSBMMTcuNywxMy4xMSBaIE0xNC44MiwxMy41MyBDMTMuMTcsMTIuNCAxMS4wMSwxMS40IDgsMTAuOTIgTDgsMTMuNjMgTDIuNTUsOSBMOCw0LjI1IEw4LDYuOCBDOC4zLDYuODYgOS4xNiw3LjAyIDEwLjM3LDcuNDkgQzEzLjMsOC42NSAxNS41NCwxMC45NiAxNi42NSwxMy4wOCBDMTYuOTcsMTMuNyAxNy40OCwxNC44NiAxNy42OCwxNiBDMTYuODcsMTUuMDUgMTUuNzMsMTQuMTUgMTQuODIsMTMuNTMgTDE0LjgyLDEzLjUzIFpcIi8+PC9zdmc+IiwKICAgICAgICAicnNzIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48Y2lyY2xlIGN4PVwiMy4xMlwiIGN5PVwiMTYuOFwiIHI9XCIxLjg1XCIvPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMVwiIGQ9XCJNMS41LDguMiBDMS43OCw4LjE4IDIuMDYsOC4xNiAyLjM1LDguMTYgQzcuNTcsOC4xNiAxMS44MSwxMi4zNyAxMS44MSwxNy41NyBDMTEuODEsMTcuODkgMTEuNzksMTguMTkgMTEuNzYsMTguNVwiLz48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBkPVwiTTEuNSwyLjUyIEMxLjc4LDIuNTEgMi4wNiwyLjUgMi4zNSwyLjUgQzEwLjcyLDIuNSAxNy41LDkuMjQgMTcuNSwxNy41NyBDMTcuNSwxNy44OSAxNy40OSwxOC4xOSAxNy40NywxOC41XCIvPjwvc3ZnPiIsCiAgICAgICAgInNlYXJjaCI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGNpcmNsZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBjeD1cIjlcIiBjeT1cIjlcIiByPVwiN1wiLz48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBkPVwiTTE0LDE0IEwxOCwxOCBMMTQsMTQgWlwiLz48L3N2Zz4iLAogICAgICAgICJzZXJ2ZXIiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxyZWN0IHg9XCIzXCIgeT1cIjNcIiB3aWR0aD1cIjFcIiBoZWlnaHQ9XCIyXCIvPjxyZWN0IHg9XCI1XCIgeT1cIjNcIiB3aWR0aD1cIjFcIiBoZWlnaHQ9XCIyXCIvPjxyZWN0IHg9XCI3XCIgeT1cIjNcIiB3aWR0aD1cIjFcIiBoZWlnaHQ9XCIyXCIvPjxyZWN0IHg9XCIxNlwiIHk9XCIzXCIgd2lkdGg9XCIxXCIgaGVpZ2h0PVwiMVwiLz48cmVjdCB4PVwiMTZcIiB5PVwiMTBcIiB3aWR0aD1cIjFcIiBoZWlnaHQ9XCIxXCIvPjxjaXJjbGUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgY3g9XCI5LjlcIiBjeT1cIjE3LjRcIiByPVwiMS40XCIvPjxyZWN0IHg9XCIzXCIgeT1cIjEwXCIgd2lkdGg9XCIxXCIgaGVpZ2h0PVwiMlwiLz48cmVjdCB4PVwiNVwiIHk9XCIxMFwiIHdpZHRoPVwiMVwiIGhlaWdodD1cIjJcIi8+PHJlY3QgeD1cIjkuNVwiIHk9XCIxNFwiIHdpZHRoPVwiMVwiIGhlaWdodD1cIjJcIi8+PHJlY3QgeD1cIjNcIiB5PVwiMTdcIiB3aWR0aD1cIjZcIiBoZWlnaHQ9XCIxXCIvPjxyZWN0IHg9XCIxMVwiIHk9XCIxN1wiIHdpZHRoPVwiNlwiIGhlaWdodD1cIjFcIi8+PHJlY3QgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgeD1cIjEuNVwiIHk9XCIxLjVcIiB3aWR0aD1cIjE3XCIgaGVpZ2h0PVwiNVwiLz48cmVjdCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiB4PVwiMS41XCIgeT1cIjguNVwiIHdpZHRoPVwiMTdcIiBoZWlnaHQ9XCI1XCIvPjwvc3ZnPiIsCiAgICAgICAgInNldHRpbmdzIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48ZWxsaXBzZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBjeD1cIjYuMTFcIiBjeT1cIjMuNTVcIiByeD1cIjIuMTFcIiByeT1cIjIuMTVcIi8+PGVsbGlwc2UgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgY3g9XCI2LjExXCIgY3k9XCIxNS41NVwiIHJ4PVwiMi4xMVwiIHJ5PVwiMi4xNVwiLz48Y2lyY2xlIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIGN4PVwiMTMuMTVcIiBjeT1cIjkuNTVcIiByPVwiMi4xNVwiLz48cmVjdCB4PVwiMVwiIHk9XCIzXCIgd2lkdGg9XCIzXCIgaGVpZ2h0PVwiMVwiLz48cmVjdCB4PVwiMTBcIiB5PVwiM1wiIHdpZHRoPVwiOFwiIGhlaWdodD1cIjFcIi8+PHJlY3QgeD1cIjFcIiB5PVwiOVwiIHdpZHRoPVwiOFwiIGhlaWdodD1cIjFcIi8+PHJlY3QgeD1cIjE1XCIgeT1cIjlcIiB3aWR0aD1cIjNcIiBoZWlnaHQ9XCIxXCIvPjxyZWN0IHg9XCIxXCIgeT1cIjE1XCIgd2lkdGg9XCIzXCIgaGVpZ2h0PVwiMVwiLz48cmVjdCB4PVwiMTBcIiB5PVwiMTVcIiB3aWR0aD1cIjhcIiBoZWlnaHQ9XCIxXCIvPjwvc3ZnPiIsCiAgICAgICAgInNocmluayI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBvbHlnb24gcG9pbnRzPVwiMTEgNCAxMiA0IDEyIDggMTYgOCAxNiA5IDExIDlcIi8+PHBvbHlnb24gcG9pbnRzPVwiNCAxMSA5IDExIDkgMTYgOCAxNiA4IDEyIDQgMTJcIi8+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4xXCIgZD1cIk0xMiw4IEwxOCwyXCIvPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMVwiIGQ9XCJNMiwxOCBMOCwxMlwiLz48L3N2Zz4iLAogICAgICAgICJzaWduLWluIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cG9seWdvbiBwb2ludHM9XCI3IDIgMTcgMiAxNyAxNyA3IDE3IDcgMTYgMTYgMTYgMTYgMyA3IDNcIi8+PHBvbHlnb24gcG9pbnRzPVwiOS4xIDEzLjQgOC41IDEyLjggMTEuMjggMTAgNCAxMCA0IDkgMTEuMjggOSA4LjUgNi4yIDkuMSA1LjYyIDEzIDkuNVwiLz48L3N2Zz4iLAogICAgICAgICJzaWduLW91dCI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBvbHlnb24gcG9pbnRzPVwiMTMuMSAxMy40IDEyLjUgMTIuOCAxNS4yOCAxMCA4IDEwIDggOSAxNS4yOCA5IDEyLjUgNi4yIDEzLjEgNS42MiAxNyA5LjVcIi8+PHBvbHlnb24gcG9pbnRzPVwiMTMgMiAzIDIgMyAxNyAxMyAxNyAxMyAxNiA0IDE2IDQgMyAxMyAzXCIvPjwvc3ZnPiIsCiAgICAgICAgInNvY2lhbCI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4xXCIgeDE9XCIxMy40XCIgeTE9XCIxNFwiIHgyPVwiNi4zXCIgeTI9XCIxMC43XCIvPjxsaW5lIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMVwiIHgxPVwiMTMuNVwiIHkxPVwiNS41XCIgeDI9XCI2LjVcIiB5Mj1cIjguOFwiLz48Y2lyY2xlIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMVwiIGN4PVwiMTUuNVwiIGN5PVwiNC42XCIgcj1cIjIuM1wiLz48Y2lyY2xlIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMVwiIGN4PVwiMTUuNVwiIGN5PVwiMTQuOFwiIHI9XCIyLjNcIi8+PGNpcmNsZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBjeD1cIjQuNVwiIGN5PVwiOS44XCIgcj1cIjIuM1wiLz48L3N2Zz4iLAogICAgICAgICJzb3VuZGNsb3VkIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTE3LjIsOS40Yy0wLjQsMC0wLjgsMC4xLTEuMTAxLDAuMmMtMC4xOTktMi41LTIuMzk5LTQuNS01LTQuNWMtMC42LDAtMS4yLDAuMS0xLjcsMC4zQzkuMiw1LjUsOS4xLDUuNiw5LjEsNS42VjE1aDggYzEuNjAxLDAsMi44MDEtMS4yLDIuODAxLTIuOEMyMCwxMC43LDE4LjcsOS40LDE3LjIsOS40TDE3LjIsOS40elwiLz48cmVjdCB4PVwiNlwiIHk9XCI2LjVcIiB3aWR0aD1cIjEuNVwiIGhlaWdodD1cIjguNVwiLz48cmVjdCB4PVwiM1wiIHk9XCI4XCIgd2lkdGg9XCIxLjVcIiBoZWlnaHQ9XCI3XCIvPjxyZWN0IHk9XCIxMFwiIHdpZHRoPVwiMS41XCIgaGVpZ2h0PVwiNVwiLz48L3N2Zz4iLAogICAgICAgICJzdGFyIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cG9seWdvbiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjAxXCIgcG9pbnRzPVwiMTAgMiAxMi42MyA3LjI3IDE4LjUgOC4xMiAxNC4yNSAxMi4yMiAxNS4yNSAxOCAxMCAxNS4yNyA0Ljc1IDE4IDUuNzUgMTIuMjIgMS41IDguMTIgNy4zNyA3LjI3XCIvPjwvc3ZnPiIsCiAgICAgICAgInN0cmlrZXRocm91Z2giOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNNiwxMy4wMiBMNi42NSwxMy4wMiBDNy42NCwxNS4xNiA4Ljg2LDE2LjEyIDEwLjQxLDE2LjEyIEMxMi4yMiwxNi4xMiAxMi45MiwxNC45MyAxMi45MiwxMy44OSBDMTIuOTIsMTIuNTUgMTEuOTksMTIuMDMgOS43NCwxMS4yMyBDOC4wNSwxMC42NCA2LjIzLDEwLjExIDYuMjMsNy44MyBDNi4yMyw1LjUgOC4wOSw0LjA5IDEwLjQsNC4wOSBDMTEuNDQsNC4wOSAxMi4xMyw0LjMxIDEyLjcyLDQuNTQgTDEzLjMzLDQgTDEzLjgxLDQgTDEzLjgxLDcuNTkgTDEzLjE2LDcuNTkgQzEyLjU1LDUuODggMTEuNTIsNC44OSAxMC4wNyw0Ljg5IEM4Ljg0LDQuODkgNy44OSw1LjY5IDcuODksNy4wMyBDNy44OSw4LjI5IDguODksOC43OCAxMC44OCw5LjQ1IEMxMi41NywxMC4wMyAxNC4zOCwxMC42IDE0LjM4LDEyLjkxIEMxNC4zOCwxNC43NSAxMy4yNywxNi45MyAxMC4xOCwxNi45MyBDOS4xOCwxNi45MyA4LjE3LDE2LjY5IDcuNDYsMTYuMzkgTDYuNTIsMTcgTDYsMTcgTDYsMTMuMDIgTDYsMTMuMDIgWlwiLz48cmVjdCB4PVwiM1wiIHk9XCIxMFwiIHdpZHRoPVwiMTVcIiBoZWlnaHQ9XCIxXCIvPjwvc3ZnPiIsCiAgICAgICAgInRhYmxlIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cmVjdCB4PVwiMVwiIHk9XCIzXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjFcIi8+PHJlY3QgeD1cIjFcIiB5PVwiN1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxXCIvPjxyZWN0IHg9XCIxXCIgeT1cIjExXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjFcIi8+PHJlY3QgeD1cIjFcIiB5PVwiMTVcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMVwiLz48L3N2Zz4iLAogICAgICAgICJ0YWJsZXQtbGFuZHNjYXBlIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBkPVwiTTEuNSw1IEMxLjUsNC4yIDIuMiwzLjUgMywzLjUgTDE3LDMuNSBDMTcuOCwzLjUgMTguNSw0LjIgMTguNSw1IEwxOC41LDE2IEMxOC41LDE2LjggMTcuOCwxNy41IDE3LDE3LjUgTDMsMTcuNSBDMi4yLDE3LjUgMS41LDE2LjggMS41LDE2IEwxLjUsNSBMMS41LDUgTDEuNSw1IFpcIi8+PGNpcmNsZSBjeD1cIjMuN1wiIGN5PVwiMTAuNVwiIHI9XCIuOFwiLz48L3N2Zz4iLAogICAgICAgICJ0YWJsZXQiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIGQ9XCJNNSwxOC41IEM0LjIsMTguNSAzLjUsMTcuOCAzLjUsMTcgTDMuNSwzIEMzLjUsMi4yIDQuMiwxLjUgNSwxLjUgTDE2LDEuNSBDMTYuOCwxLjUgMTcuNSwyLjIgMTcuNSwzIEwxNy41LDE3IEMxNy41LDE3LjggMTYuOCwxOC41IDE2LDE4LjUgTDUsMTguNSBMNSwxOC41IEw1LDE4LjUgWlwiLz48Y2lyY2xlIGN4PVwiMTAuNVwiIGN5PVwiMTYuM1wiIHI9XCIuOFwiLz48L3N2Zz4iLAogICAgICAgICJ0YWciOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMVwiIGQ9XCJNMTcuNSwzLjcxIEwxNy41LDcuNzIgQzE3LjUsNy45NiAxNy40LDguMiAxNy4yMSw4LjM5IEw4LjM5LDE3LjIgQzcuOTksMTcuNiA3LjMzLDE3LjYgNi45MywxNy4yIEwyLjgsMTMuMDcgQzIuNCwxMi42NyAyLjQsMTIuMDEgMi44LDExLjYxIEwxMS42MSwyLjggQzExLjgxLDIuNiAxMi4wOCwyLjUgMTIuMzQsMi41IEwxNi4xOSwyLjUgQzE2LjUyLDIuNSAxNi44NiwyLjYzIDE3LjExLDIuODggQzE3LjM1LDMuMTEgMTcuNDgsMy40IDE3LjUsMy43MSBMMTcuNSwzLjcxIFpcIi8+PGNpcmNsZSBjeD1cIjE0XCIgY3k9XCI2XCIgcj1cIjFcIi8+PC9zdmc+IiwKICAgICAgICAidGh1bWJuYWlscyI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHJlY3QgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgeD1cIjMuNVwiIHk9XCIzLjVcIiB3aWR0aD1cIjVcIiBoZWlnaHQ9XCI1XCIvPjxyZWN0IGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHg9XCIxMS41XCIgeT1cIjMuNVwiIHdpZHRoPVwiNVwiIGhlaWdodD1cIjVcIi8+PHJlY3QgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgeD1cIjExLjVcIiB5PVwiMTEuNVwiIHdpZHRoPVwiNVwiIGhlaWdodD1cIjVcIi8+PHJlY3QgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgeD1cIjMuNVwiIHk9XCIxMS41XCIgd2lkdGg9XCI1XCIgaGVpZ2h0PVwiNVwiLz48L3N2Zz4iLAogICAgICAgICJ0cmFzaCI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBvbHlsaW5lIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHBvaW50cz1cIjYuNSAzIDYuNSAxLjUgMTMuNSAxLjUgMTMuNSAzXCIvPjxwb2x5bGluZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBwb2ludHM9XCI0LjUgNCA0LjUgMTguNSAxNS41IDE4LjUgMTUuNSA0XCIvPjxyZWN0IHg9XCI4XCIgeT1cIjdcIiB3aWR0aD1cIjFcIiBoZWlnaHQ9XCI5XCIvPjxyZWN0IHg9XCIxMVwiIHk9XCI3XCIgd2lkdGg9XCIxXCIgaGVpZ2h0PVwiOVwiLz48cmVjdCB4PVwiMlwiIHk9XCIzXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjFcIi8+PC9zdmc+IiwKICAgICAgICAidHJpYW5nbGUtZG93biI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBvbHlnb24gcG9pbnRzPVwiNSA3IDE1IDcgMTAgMTJcIi8+PC9zdmc+IiwKICAgICAgICAidHJpYW5nbGUtbGVmdCI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBvbHlnb24gcG9pbnRzPVwiMTIgNSA3IDEwIDEyIDE1XCIvPjwvc3ZnPiIsCiAgICAgICAgInRyaWFuZ2xlLXJpZ2h0IjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cG9seWdvbiBwb2ludHM9XCI4IDUgMTMgMTAgOCAxNVwiLz48L3N2Zz4iLAogICAgICAgICJ0cmlhbmdsZS11cCI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBvbHlnb24gcG9pbnRzPVwiNSAxMyAxMCA4IDE1IDEzXCIvPjwvc3ZnPiIsCiAgICAgICAgInRyaXBhZHZpc29yIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTE5LjAyMSw3Ljg2NkMxOS4yNTYsNi44NjIsMjAsNS44NTQsMjAsNS44NTRoLTMuMzQ2QzE0Ljc4MSw0LjY0MSwxMi41MDQsNCw5Ljk4LDRDNy4zNjMsNCw0Ljk5OSw0LjY1MSwzLjEzNSw1Ljg3NkgwXHRjMCwwLDAuNzM4LDAuOTg3LDAuOTc2LDEuOTg4Yy0wLjYxMSwwLjgzNy0wLjk3MywxLjg1Mi0wLjk3MywyLjk2NGMwLDIuNzYzLDIuMjQ5LDUuMDA5LDUuMDExLDUuMDA5XHRjMS41NzYsMCwyLjk3Ni0wLjczNywzLjkwMS0xLjg3OWwxLjA2MywxLjU5OWwxLjA3NS0xLjYxNWMwLjQ3NSwwLjYxMSwxLjEsMS4xMTEsMS44MzgsMS40NTFjMS4yMTMsMC41NDcsMi41NzQsMC42MTIsMy44MjUsMC4xNVx0YzIuNTg5LTAuOTYzLDMuOTEzLTMuODUyLDIuOTY0LTYuNDM5Yy0wLjE3NS0wLjQ2My0wLjQtMC44NzYtMC42NzUtMS4yMzhIMTkuMDIxeiBNMTYuMzgsMTQuNTk0XHRjLTEuMDAyLDAuMzcxLTIuMDg4LDAuMzI4LTMuMDYtMC4xMTljLTAuNjg4LTAuMzE3LTEuMjUyLTAuODE3LTEuNjU3LTEuNDM4Yy0wLjE2NC0wLjI1LTAuMzEzLTAuNTItMC40MTctMC44MTFcdGMtMC4xMjQtMC4zMjgtMC4xODYtMC42NjgtMC4yMTctMS4wMTRjLTAuMDYzLTAuNjg5LDAuMDM3LTEuMzk2LDAuMzM5LTIuMDQzYzAuNDQ4LTAuOTcxLDEuMjUxLTEuNzEsMi4yNS0yLjA3OVx0YzIuMDc1LTAuNzY1LDQuMzc1LDAuMyw1LjE0LDIuMzY2YzAuNzYyLDIuMDY2LTAuMzAxLDQuMzctMi4zNjMsNS4xMzRMMTYuMzgsMTQuNTk0TDE2LjM4LDE0LjU5NHogTTguMzIyLDEzLjA2Nlx0Yy0wLjcyLDEuMDU5LTEuOTM1LDEuNzYtMy4zMDksMS43NmMtMi4yMDcsMC00LjAwMS0xLjc5Ny00LjAwMS0zLjk5NmMwLTIuMjAzLDEuNzk1LTQuMDAyLDQuMDAxLTQuMDAyXHRjMi4yMDQsMCwzLjk5OSwxLjgsMy45OTksNC4wMDJjMCwwLjEzNy0wLjAyNCwwLjI2MS0wLjA0LDAuMzk2Yy0wLjA2NywwLjY3OC0wLjI4NCwxLjMxMy0wLjY0OCwxLjg1M3YtMC4wMTNIOC4zMjJ6IE0yLjQ3MiwxMC43NzVcdGMwLDEuMzY3LDEuMTEyLDIuNDc5LDIuNDc2LDIuNDc5YzEuMzYzLDAsMi40NzItMS4xMSwyLjQ3Mi0yLjQ3OWMwLTEuMzU5LTEuMTEtMi40NjgtMi40NzItMi40NjhcdEMzLjU4NCw4LjMwNiwyLjQ3Myw5LjQxNiwyLjQ3MiwxMC43NzVMMi40NzIsMTAuNzc1eiBNMTIuNTE0LDEwLjc3NWMwLDEuMzY3LDEuMTA0LDIuNDc5LDIuNDcxLDIuNDc5XHRjMS4zNjMsMCwyLjQ3NC0xLjEwOCwyLjQ3NC0yLjQ3OWMwLTEuMzU5LTEuMTEtMi40NjgtMi40NzQtMi40NjhjLTEuMzY0LDAtMi40NzcsMS4xMDktMi40NzcsMi40NjhIMTIuNTE0eiBNMy4zMjQsMTAuNzc1XHRjMC0wLjg5MywwLjcyNi0xLjYxOCwxLjYxNC0xLjYxOGMwLjg4OSwwLDEuNjI1LDAuNzI3LDEuNjI1LDEuNjE4YzAsMC44OTgtMC43MjUsMS42MjctMS42MjUsMS42MjdcdGMtMC45MDEsMC0xLjYyNS0wLjcyOS0xLjYyNS0xLjYyN0gzLjMyNHogTTEzLjM1NCwxMC43NzVjMC0wLjg5MywwLjcyNi0xLjYxOCwxLjYyNy0xLjYxOGMwLjg4NiwwLDEuNjEsMC43MjcsMS42MSwxLjYxOFx0YzAsMC44OTgtMC43MjYsMS42MjctMS42MjYsMS42MjdzLTEuNjI1LTAuNzI5LTEuNjI1LTEuNjI3SDEzLjM1NHogTTkuOTc3LDQuODc1YzEuNzk4LDAsMy40MjUsMC4zMjQsNC44NDksMC45NjhcdGMtMC41MzUsMC4wMTUtMS4wNjEsMC4xMDgtMS41ODYsMC4zYy0xLjI2NCwwLjQ2My0yLjI2NCwxLjM4OC0yLjgxNSwyLjYwNGMtMC4yNjIsMC41NTEtMC4zOTgsMS4xMzMtMC40NDgsMS43Mlx0QzkuNzksNy45MDUsNy42NzcsNS44NzMsNS4wNzYsNS44MkM2LjUwMSw1LjIwOCw4LjE1Myw0Ljg3NSw5Ljk0LDQuODc1SDkuOTc3elwiLz48L3N2Zz4iLAogICAgICAgICJ0dW1ibHIiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNNi44ODUsOC41OThjMCwwLDAsMy4zOTMsMCw0Ljk5NmMwLDAuMjgyLDAsMC42NiwwLjA5NCwwLjk0MmMwLjM3NywxLjUwOSwxLjEzMSwyLjU0NSwyLjU0NSwzLjExIGMxLjMxOSwwLjQ3MiwyLjM1NiwwLjQ3MiwzLjY3NiwwYzAuNTY1LTAuMTg4LDEuMTMyLTAuNjU5LDEuMTMyLTAuNjU5bC0wLjg0OS0yLjI2M2MwLDAtMS4wMzYsMC4zNzgtMS42MDMsMC4yODMgYy0wLjU2NS0wLjA5NC0xLjIyNi0wLjY2LTEuMjI2LTEuNTA4YzAtMS42MDMsMC00LjkwMiwwLTQuOTAyaDIuODI4VjUuNzcxaC0yLjgyOFYySDguMjA1YzAsMC0wLjA5NCwwLjY2LTAuMTg4LDAuOTQyIEM3LjgyOCwzLjc5MSw3LjI2Miw0LjczMyw2LjYwMyw1LjM5NEM1Ljg0OCw2LjE0Nyw1LDYuNDMsNSw2LjQzdjIuMTY4SDYuODg1elwiLz48L3N2Zz4iLAogICAgICAgICJ0diI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHJlY3QgeD1cIjdcIiB5PVwiMTZcIiB3aWR0aD1cIjZcIiBoZWlnaHQ9XCIxXCIvPjxyZWN0IGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHg9XCIuNVwiIHk9XCIzLjVcIiB3aWR0aD1cIjE5XCIgaGVpZ2h0PVwiMTFcIi8+PC9zdmc+IiwKICAgICAgICAidHdpdHRlciI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0xOSw0Ljc0IEMxOC4zMzksNS4wMjkgMTcuNjI2LDUuMjI5IDE2Ljg4MSw1LjMyIEMxNy42NDQsNC44NiAxOC4yMjcsNC4xMzkgMTguNTAzLDMuMjggQzE3Ljc5LDMuNyAxNy4wMDEsNC4wMDkgMTYuMTU5LDQuMTcgQzE1LjQ4NSwzLjQ1IDE0LjUyNiwzIDEzLjQ2NCwzIEMxMS40MjMsMyA5Ljc3MSw0LjY2IDkuNzcxLDYuNyBDOS43NzEsNi45OSA5LjgwNCw3LjI2OSA5Ljg2OCw3LjUzOSBDNi43OTUsNy4zOCA0LjA3Niw1LjkxOSAyLjI1NCwzLjY3OSBDMS45MzYsNC4yMTkgMS43NTQsNC44NiAxLjc1NCw1LjUzOSBDMS43NTQsNi44MiAyLjQwNSw3Ljk1IDMuMzk3LDguNjEgQzIuNzksOC41ODkgMi4yMiw4LjQyOSAxLjcyMyw4LjE0OSBMMS43MjMsOC4xODkgQzEuNzIzLDkuOTc4IDIuOTk3LDExLjQ3OCA0LjY4NiwxMS44MiBDNC4zNzYsMTEuODk5IDQuMDQ5LDExLjkzOSAzLjcxMywxMS45MzkgQzMuNDc1LDExLjkzOSAzLjI0NSwxMS45MTkgMy4wMTgsMTEuODggQzMuNDksMTMuMzQ5IDQuODUyLDE0LjQxOSA2LjQ2OSwxNC40NDkgQzUuMjA1LDE1LjQyOSAzLjYxMiwxNi4wMTkgMS44ODIsMTYuMDE5IEMxLjU4MywxNi4wMTkgMS4yOSwxNi4wMDkgMSwxNS45NjkgQzIuNjM1LDE3LjAxOSA0LjU3NiwxNy42MjkgNi42NjIsMTcuNjI5IEMxMy40NTQsMTcuNjI5IDE3LjE3LDEyIDE3LjE3LDcuMTI5IEMxNy4xNyw2Ljk2OSAxNy4xNjYsNi44MDkgMTcuMTU3LDYuNjQ5IEMxNy44NzksNi4xMjkgMTguNTA0LDUuNDc4IDE5LDQuNzRcIi8+PC9zdmc+IiwKICAgICAgICAidWlraXQiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwb2x5Z29uIHBvaW50cz1cIjE0LjQsMy4xIDExLjMsNS4xIDE1LDcuMyAxNSwxMi45IDEwLDE1LjcgNSwxMi45IDUsOC41IDIsNi44IDIsMTQuOCA5LjksMTkuNSAxOCwxNC44IDE4LDUuM1wiLz48cG9seWdvbiBwb2ludHM9XCI5LjgsNC4yIDYuNywyLjQgOS44LDAuNCAxMi45LDIuM1wiLz48L3N2Zz4iLAogICAgICAgICJ1bmxvY2siOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxyZWN0IGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHg9XCIzLjVcIiB5PVwiOC41XCIgd2lkdGg9XCIxM1wiIGhlaWdodD1cIjEwXCIvPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIGQ9XCJNNi41LDguNSBMNi41LDQuOSBDNi41LDMgOC4xLDEuNSAxMCwxLjUgQzExLjksMS41IDEzLjUsMyAxMy41LDQuOVwiLz48L3N2Zz4iLAogICAgICAgICJ1cGxvYWQiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwb2x5bGluZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBwb2ludHM9XCI1IDggOS41IDMuNSAxNCA4XCIvPjxyZWN0IHg9XCIzXCIgeT1cIjE3XCIgd2lkdGg9XCIxM1wiIGhlaWdodD1cIjFcIi8+PGxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgeDE9XCI5LjVcIiB5MT1cIjE1XCIgeDI9XCI5LjVcIiB5Mj1cIjRcIi8+PC9zdmc+IiwKICAgICAgICAidXNlciI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGNpcmNsZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBjeD1cIjkuOVwiIGN5PVwiNi40XCIgcj1cIjQuNFwiLz48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBkPVwiTTEuNSwxOSBDMi4zLDE0LjUgNS44LDExLjIgMTAsMTEuMiBDMTQuMiwxMS4yIDE3LjcsMTQuNiAxOC41LDE5LjJcIi8+PC9zdmc+IiwKICAgICAgICAidXNlcnMiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxjaXJjbGUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4xXCIgY3g9XCI3LjdcIiBjeT1cIjguNlwiIHI9XCIzLjVcIi8+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4xXCIgZD1cIk0xLDE4LjEgQzEuNywxNC42IDQuNCwxMi4xIDcuNiwxMi4xIEMxMC45LDEyLjEgMTMuNywxNC44IDE0LjMsMTguM1wiLz48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBkPVwiTTExLjQsNCBDMTIuOCwyLjQgMTUuNCwyLjggMTYuMyw0LjcgQzE3LjIsNi42IDE1LjcsOC45IDEzLjYsOC45IEMxNi41LDguOSAxOC44LDExLjMgMTkuMiwxNC4xXCIvPjwvc3ZnPiIsCiAgICAgICAgInZpZGVvLWNhbWVyYSI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBvbHlnb24gZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgcG9pbnRzPVwiMTcuNSA2LjkgMTcuNSAxMy4xIDEzLjUgMTAuNCAxMy41IDE0LjUgMi41IDE0LjUgMi41IDUuNSAxMy41IDUuNSAxMy41IDkuNiAxNy41IDYuOVwiLz48L3N2Zz4iLAogICAgICAgICJ2aW1lbyI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0yLjA2NSw3LjU5QzEuODQsNy4zNjcsMS42NTQsNy4wODIsMS40NjgsNi44MzhjLTAuMzMyLTAuNDItMC4xMzctMC40MTEsMC4yNzQtMC43NzJjMS4wMjYtMC45MSwyLjAwNC0xLjg5NiwzLjEyNy0yLjY4OCBjMS4wMTctMC43MTMsMi4zNjUtMS4xNzMsMy4yODYtMC4wMzljMC44NDksMS4wNDUsMC44NjksMi42MjksMS4wODQsMy44OTFjMC4yMTUsMS4zMDksMC40MjEsMi42NDgsMC44OCwzLjkwMSBjMC4xMjcsMC4zNTIsMC4zNywxLjAxOCwwLjgxLDEuMDc0YzAuNTY3LDAuMDc4LDEuMTQ1LTAuOTE3LDEuNDA4LTEuMjg5YzAuNjg0LTAuOTg3LDEuNjExLTIuMzE3LDEuNDk0LTMuNTg3IGMtMC4xMTUtMS4zNDktMS41NzItMS4wOTUtMi40ODItMC43NzNjMC4xNDYtMS41MTQsMS41NTUtMy4yMTYsMi45MTItMy43OTJjMS40MzktMC41OTcsMy41NzktMC41ODcsNC4zMDIsMS4wMzYgYzAuNzcyLDEuNzU5LDAuMDc4LDMuODAyLTAuNzYzLDUuMzk2Yy0wLjkxOCwxLjczMS0yLjEsMy4zMzMtMy4zNjMsNC44MjljLTEuMTE0LDEuMzI5LTIuNDMyLDIuNzg3LTQuMDkzLDMuNDIyIGMtMS44OTcsMC43MjMtMy4wMjEtMC42ODYtMy42NjctMi4zMThjLTAuNzA1LTEuNzc3LTEuMDU2LTMuNzcxLTEuNTY1LTUuNjIxQzQuODk4LDguNzI2LDQuNjQ0LDcuODM2LDQuMTM2LDcuMTkxIEMzLjQ3Myw2LjM1OCwyLjcyLDcuMTQxLDIuMDY1LDcuNTlDMS45NzcsNy41MDIsMi4xMTUsNy41NTEsMi4wNjUsNy41OUwyLjA2NSw3LjU5elwiLz48L3N2Zz4iLAogICAgICAgICJ3YXJuaW5nIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48Y2lyY2xlIGN4PVwiMTBcIiBjeT1cIjE0XCIgcj1cIjFcIi8+PGNpcmNsZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBjeD1cIjEwXCIgY3k9XCIxMFwiIHI9XCI5XCIvPjxwYXRoIGQ9XCJNMTAuOTcsNy43MiBDMTAuODUsOS41NCAxMC41NiwxMS4yOSAxMC41NiwxMS4yOSBDMTAuNTEsMTEuODcgMTAuMjcsMTIgOS45OSwxMiBDOS42OSwxMiA5LjQ5LDExLjg3IDkuNDMsMTEuMjkgQzkuNDMsMTEuMjkgOS4xNiw5LjU0IDkuMDMsNy43MiBDOC45Niw2LjU0IDkuMDMsNiA5LjAzLDYgQzkuMDMsNS40NSA5LjQ2LDUuMDIgOS45OSw1IEMxMC41Myw1LjAxIDEwLjk3LDUuNDQgMTAuOTcsNiBDMTAuOTcsNiAxMS4wNCw2LjU0IDEwLjk3LDcuNzIgTDEwLjk3LDcuNzIgWlwiLz48L3N2Zz4iLAogICAgICAgICJ3aGF0c2FwcCI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0xNi43LDMuM2MtMS44LTEuOC00LjEtMi44LTYuNy0yLjhjLTUuMiwwLTkuNCw0LjItOS40LDkuNGMwLDEuNywwLjQsMy4zLDEuMyw0LjdsLTEuMyw0LjlsNS0xLjNjMS40LDAuOCwyLjksMS4yLDQuNSwxLjIgbDAsMGwwLDBjNS4yLDAsOS40LTQuMiw5LjQtOS40QzE5LjUsNy40LDE4LjUsNSwxNi43LDMuMyBNMTAuMSwxNy43TDEwLjEsMTcuN2MtMS40LDAtMi44LTAuNC00LTEuMWwtMC4zLTAuMmwtMywwLjhsMC44LTIuOSBsLTAuMi0wLjNjLTAuOC0xLjItMS4yLTIuNy0xLjItNC4yYzAtNC4zLDMuNS03LjgsNy44LTcuOGMyLjEsMCw0LjEsMC44LDUuNSwyLjNjMS41LDEuNSwyLjMsMy40LDIuMyw1LjUgQzE3LjksMTQuMiwxNC40LDE3LjcsMTAuMSwxNy43IE0xNC40LDExLjljLTAuMi0wLjEtMS40LTAuNy0xLjYtMC44Yy0wLjItMC4xLTAuNC0wLjEtMC41LDAuMWMtMC4yLDAuMi0wLjYsMC44LTAuOCwwLjkgYy0wLjEsMC4yLTAuMywwLjItMC41LDAuMWMtMC4yLTAuMS0xLTAuNC0xLjktMS4yYy0wLjctMC42LTEuMi0xLjQtMS4zLTEuNmMtMC4xLTAuMiwwLTAuNCwwLjEtMC41QzgsOC44LDguMSw4LjcsOC4yLDguNSBjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC4xLTAuMiwwLTAuMywwLTAuNEM4LjQsNy42LDcuOSw2LjUsNy43LDZDNy41LDUuNSw3LjMsNS42LDcuMiw1LjZjLTAuMSwwLTAuMywwLTAuNCwwIGMtMC4yLDAtMC40LDAuMS0wLjYsMC4zYy0wLjIsMC4yLTAuOCwwLjgtMC44LDJjMCwxLjIsMC44LDIuMywxLDIuNGMwLjEsMC4yLDEuNywyLjUsNCwzLjVjMC42LDAuMiwxLDAuNCwxLjMsMC41IGMwLjYsMC4yLDEuMSwwLjIsMS41LDAuMWMwLjUtMC4xLDEuNC0wLjYsMS42LTEuMWMwLjItMC41LDAuMi0xLDAuMS0xLjFDMTQuOCwxMi4xLDE0LjYsMTIsMTQuNCwxMS45XCIvPjwvc3ZnPiIsCiAgICAgICAgIndvcmRwcmVzcyI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0xMCwwLjVjLTUuMiwwLTkuNSw0LjMtOS41LDkuNXM0LjMsOS41LDkuNSw5LjVjNS4yLDAsOS41LTQuMyw5LjUtOS41UzE1LjIsMC41LDEwLDAuNUwxMCwwLjVMMTAsMC41eiBNMTUuNiwzLjloLTAuMSBjLTAuOCwwLTEuNCwwLjctMS40LDEuNWMwLDAuNywwLjQsMS4zLDAuOCwxLjljMC4zLDAuNiwwLjcsMS4zLDAuNywyLjNjMCwwLjctMC4zLDEuNS0wLjYsMi43TDE0LjEsMTVsLTMtOC45IGMwLjUsMCwwLjktMC4xLDAuOS0wLjFDMTIuNSw2LDEyLjUsNS4zLDEyLDUuNGMwLDAtMS4zLDAuMS0yLjIsMC4xQzksNS41LDcuNyw1LjQsNy43LDUuNEM3LjIsNS4zLDcuMiw2LDcuNiw2YzAsMCwwLjQsMC4xLDAuOSwwLjEgbDEuMywzLjVMOCwxNUw1LDYuMUM1LjUsNi4xLDUuOSw2LDUuOSw2QzYuNCw2LDYuMyw1LjMsNS45LDUuNGMwLDAtMS4zLDAuMS0yLjIsMC4xYy0wLjIsMC0wLjMsMC0wLjUsMGMxLjUtMi4yLDQtMy43LDYuOS0zLjcgQzEyLjIsMS43LDE0LjEsMi42LDE1LjYsMy45TDE1LjYsMy45TDE1LjYsMy45eiBNMi41LDYuNmwzLjksMTAuOGMtMi43LTEuMy00LjYtNC4yLTQuNi03LjRDMS44LDguOCwyLDcuNiwyLjUsNi42TDIuNSw2LjZMMi41LDYuNiB6IE0xMC4yLDEwLjdsMi41LDYuOWMwLDAsMCwwLjEsMC4xLDAuMUMxMS45LDE4LDExLDE4LjIsMTAsMTguMmMtMC44LDAtMS42LTAuMS0yLjMtMC4zTDEwLjIsMTAuN0wxMC4yLDEwLjdMMTAuMiwxMC43eiBNMTQuMiwxNy4xIGwyLjUtNy4zYzAuNS0xLjIsMC42LTIuMSwwLjYtMi45YzAtMC4zLDAtMC42LTAuMS0wLjhjMC42LDEuMiwxLDIuNSwxLDRDMTguMywxMywxNi42LDE1LjcsMTQuMiwxNy4xTDE0LjIsMTcuMUwxNC4yLDE3LjF6XCIvPjwvc3ZnPiIsCiAgICAgICAgIndvcmxkIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBkPVwiTTEsMTAuNSBMMTksMTAuNVwiLz48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBkPVwiTTIuMzUsMTUuNSBMMTcuNjUsMTUuNVwiLz48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBkPVwiTTIuMzUsNS41IEwxNy41MjMsNS41XCIvPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIGQ9XCJNMTAsMTkuNDYgTDkuOTgsMTkuNDYgQzcuMzEsMTcuMzMgNS42MSwxNC4xNDEgNS42MSwxMC41OCBDNS42MSw3LjAyIDcuMzMsMy44MyAxMCwxLjcgQzEwLjAxLDEuNyA5Ljk5LDEuNyAxMCwxLjcgTDEwLDEuNyBDMTIuNjcsMy44MyAxNC40LDcuMDIgMTQuNCwxMC41OCBDMTQuNCwxNC4xNDEgMTIuNjcsMTcuMzMgMTAsMTkuNDYgTDEwLDE5LjQ2IEwxMCwxOS40NiBMMTAsMTkuNDYgWlwiLz48Y2lyY2xlIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIGN4PVwiMTBcIiBjeT1cIjEwLjVcIiByPVwiOVwiLz48L3N2Zz4iLAogICAgICAgICJ4aW5nIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTQuNCw0LjU2IEM0LjI0LDQuNTYgNC4xMSw0LjYxIDQuMDUsNC43MiBDMy45OCw0LjgzIDMuOTksNC45NyA0LjA3LDUuMTIgTDUuODIsOC4xNiBMNS44Miw4LjE3IEwzLjA2LDEzLjA0IEMyLjk5LDEzLjE4IDIuOTksMTMuMzMgMy4wNiwxMy40NCBDMy4xMiwxMy41NSAzLjI0LDEzLjYyIDMuNCwxMy42MiBMNiwxMy42MiBDNi4zOSwxMy42MiA2LjU3LDEzLjM2IDYuNzEsMTMuMTIgQzYuNzEsMTMuMTIgOS40MSw4LjM1IDkuNTEsOC4xNiBDOS40OSw4LjE0IDcuNzIsNS4wNCA3LjcyLDUuMDQgQzcuNTgsNC44MSA3LjM5LDQuNTYgNi45OSw0LjU2IEw0LjQsNC41NiBMNC40LDQuNTYgWlwiLz48cGF0aCBkPVwiTTE1LjMsMSBDMTQuOTEsMSAxNC43NCwxLjI1IDE0LjYsMS41IEMxNC42LDEuNSA5LjAxLDExLjQyIDguODIsMTEuNzQgQzguODMsMTEuNzYgMTIuNTEsMTguNTEgMTIuNTEsMTguNTEgQzEyLjY0LDE4Ljc0IDEyLjg0LDE5IDEzLjIzLDE5IEwxNS44MiwxOSBDMTUuOTgsMTkgMTYuMSwxOC45NCAxNi4xNiwxOC44MyBDMTYuMjMsMTguNzIgMTYuMjMsMTguNTcgMTYuMTYsMTguNDMgTDEyLjUsMTEuNzQgTDEyLjUsMTEuNzIgTDE4LjI1LDEuNTYgQzE4LjMyLDEuNDIgMTguMzIsMS4yNyAxOC4yNSwxLjE2IEMxOC4yMSwxLjA2IDE4LjA4LDEgMTcuOTMsMSBMMTUuMywxIEwxNS4zLDEgWlwiLz48L3N2Zz4iLAogICAgICAgICJ5ZWxwIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTE3LjE3NSwxNC45NzFjLTAuMTEyLDAuNzctMS42ODYsMi43NjctMi40MDYsMy4wNTRjLTAuMjQ2LDAuMS0wLjQ4NywwLjA3Ni0wLjY3NS0wLjA2OVx0Yy0wLjEyMi0wLjA5Ni0yLjQ0Ni0zLjg1OS0yLjQ0Ni0zLjg1OWMtMC4xOTQtMC4yOTMtMC4xNTctMC42ODIsMC4wODMtMC45NzhjMC4yMzQtMC4yODQsMC41ODEtMC4zOTMsMC44ODEtMC4yNzZcdGMwLjAxNiwwLjAxLDQuMjEsMS4zOTQsNC4zMzIsMS40ODJjMC4xNzgsMC4xNDgsMC4yNjMsMC4zNzksMC4yMjUsMC42NDZMMTcuMTc1LDE0Ljk3MUwxNy4xNzUsMTQuOTcxeiBNMTEuNDY0LDEwLjc4OVx0Yy0wLjIwMy0wLjMwNy0wLjE5OS0wLjY2NiwwLjAwOS0wLjkxNmMwLDAsMi42MjUtMy41NzQsMi43NDUtMy42NTdjMC4yMDMtMC4xMzUsMC40NTItMC4xNDEsMC42OS0wLjAyNVx0YzAuNjkxLDAuMzM1LDIuMDg1LDIuNDA1LDIuMTY3LDMuMTk5djAuMDI3YzAuMDI0LDAuMjcxLTAuMDgyLDAuNDkxLTAuMjczLDAuNjIzYy0wLjEzMiwwLjA4My00LjQzLDEuMTU1LTQuNDMsMS4xNTVcdGMtMC4zMjIsMC4wOTYtMC42OC0wLjA2LTAuODgyLTAuMzgxTDExLjQ2NCwxMC43ODl6IE05LjQ3NSw5LjU2M0M5LjMyLDkuNjA5LDguODQ4LDkuNzU3LDguMjY5LDguODE3YzAsMC0zLjkxNi02LjE2LTQuMDA3LTYuMzUxXHRjLTAuMDU3LTAuMjEyLDAuMDExLTAuNDU1LDAuMjAyLTAuNjVDNS4wNDcsMS4yMTEsOC4yMSwwLjMyNyw5LjAzNywwLjUyOWMwLjI3LDAuMDY5LDAuNDU3LDAuMjM4LDAuNTIyLDAuNDc5XHRjMC4wNDcsMC4yNjYsMC40MzMsNS45ODIsMC40ODgsNy4yNjRDMTAuMDk4LDkuMzY4LDkuNjI5LDkuNTE3LDkuNDc1LDkuNTYzeiBNOS45MjcsMTkuMDY2Yy0wLjA4MywwLjIyNS0wLjI3MywwLjM3My0wLjU0LDAuNDIxXHRjLTAuNzYyLDAuMTMtMy4xNS0wLjc1MS0zLjY0Ny0xLjM0MmMtMC4wOTYtMC4xMzEtMC4xNTUtMC4yNjItMC4xNjctMC4zOTRjLTAuMDExLTAuMDk1LDAtMC4xODksMC4wMzYtMC4yNzJcdGMwLjA2MS0wLjE1NSwyLjkxNy0zLjUzOCwyLjkxNy0zLjUzOGMwLjIxNC0wLjI3MiwwLjU5NS0wLjM1NSwwLjk1Mi0wLjIxM2MwLjM0NSwwLjEzLDAuNTYsMC40MjgsMC41MzYsMC43NDlcdEMxMC4wMTQsMTQuNDc5LDkuOTc3LDE4LjkyMyw5LjkyNywxOS4wNjZ6IE0zLjQ5NSwxMy45MTJjLTAuMjM1LTAuMDA5LTAuNDQ0LTAuMTQ4LTAuNTY4LTAuMzgyYy0wLjA4OS0wLjE3LTAuMTUxLTAuNDUzLTAuMTktMC43OTRcdEMyLjYzLDExLjcwMSwyLjc2MSwxMC4xNDQsMy4wNyw5LjY0OGMwLjE0NS0wLjIyNiwwLjM1Ny0wLjM0NSwwLjU5Mi0wLjMzNmMwLjE1NCwwLDQuMjU1LDEuNjY3LDQuMjU1LDEuNjY3XHRjMC4zMjEsMC4xMTgsMC41MjEsMC40NTMsMC41LDAuODMzYy0wLjAyMywwLjM3LTAuMjM2LDAuNjU1LTAuNTUxLDAuNzM4TDMuNDk1LDEzLjkxMnpcIi8+PC9zdmc+IiwKICAgICAgICAieW91dHViZSI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0xNSw0LjFjMSwwLjEsMi4zLDAsMywwLjhjMC44LDAuOCwwLjksMi4xLDAuOSwzLjFDMTksOS4yLDE5LDEwLjksMTksMTJjLTAuMSwxLjEsMCwyLjQtMC41LDMuNGMtMC41LDEuMS0xLjQsMS41LTIuNSwxLjYgYy0xLjIsMC4xLTguNiwwLjEtMTEsMGMtMS4xLTAuMS0yLjQtMC4xLTMuMi0xYy0wLjctMC44LTAuNy0yLTAuOC0zQzEsMTEuOCwxLDEwLjEsMSw4LjljMC0xLjEsMC0yLjQsMC41LTMuNEMyLDQuNSwzLDQuMyw0LjEsNC4yIEM1LjMsNC4xLDEyLjYsNCwxNSw0LjF6IE04LDcuNXY2bDUuNS0zTDgsNy41elwiLz48L3N2Zz4iCiAgICB9KTsKCiAgICB9CgogICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5VSWtpdCkgewogICAgICAgIHdpbmRvdy5VSWtpdC51c2UocGx1Z2luKTsKICAgIH0KCiAgICByZXR1cm4gcGx1Z2luOwoKfSkpOwo=",
  48. {"status":false}
  49. ],
  50. [
  51. "uikit_3.2.0",
  52. "ZnVuY3Rpb24g0YPRgdGC0LDQvdC+0LLQuNGC0YxVSUtpdCgpCnsKICAgIHZhciB1aWtpdENTUyA9INC80L7QtNGD0LvRjCgidWlraXQubWluLmNzc18zLjIuMCIpWzFdOwogICAgdmFyIHVpa2l0SlMgPSDQvNC+0LTRg9C70YwoInVpa2l0LmpzXzMuMi4wIilbMV07CiAgICB2YXIgdWlraXRJY29uc0pTID0g0LzQvtC00YPQu9GMKCJ1aWtpdC1pY29ucy5qc18zLjIuMCIpWzFdOwoKICAgIHZhciDQstC40LQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpOwogICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCjQstC40LQpOwogICAg0LLQuNC0LmlubmVySFRNTCA9INC80YPRgNC+0LwuYXRvYih1aWtpdENTUyk7CiAgICDQt9Cw0LPRgNGD0LfQuNGC0YzQodC60YDQuNC/0YIo0LzRg9GA0L7QvC5hdG9iKHVpa2l0SlMpKTsKICAgINC30LDQs9GA0YPQt9C40YLRjNCh0LrRgNC40L/RgijQvNGD0YDQvtC8LmF0b2IodWlraXRJY29uc0pTKSk7Cn0KCtC80YPRgNC+0Lwu0L7QsdGL0YfQvdGL0LnQn9GD0YHQui7Qv9C+0LTQv9C40YHQsNGC0Ywo0YPRgdGC0LDQvdC+0LLQuNGC0YxVSUtpdCk7",
  53. {"status":true}
  54. ],
  55. [
  56. "муром.редактор.шрифт-22",
  57. "ZnVuY3Rpb24g0LfQsNC00LDRgtGM0KDQsNC30LzQtdGA0KjRgNC40YTRgtCw0KDQtdC00LDQutGC0L7RgNGDKCkKewogICAgaWYgKNC80YPRgNC+0Lwu0YDQtdC00LDQutGC0L7RgCkKICAgIHsKICAgICAgICDQvNGD0YDQvtC8LtGA0LXQtNCw0LrRgtC+0YAuc2V0Rm9udFNpemUoIjIycHgiKTsKICAgIH0KfQoK0L/RgNC4KNC80YPRgNC+0Lwu0L/Rg9GB0LosINC30LDQtNCw0YLRjNCg0LDQt9C80LXRgNCo0YDQuNGE0YLQsNCg0LXQtNCw0LrRgtC+0YDRgyk7",
  58. {}
  59. ],
  60. [
  61. "lightning-fs.min.js_3.3.2",
  62. "IWZ1bmN0aW9uKHQsZSl7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW10sZSk6Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMuTGlnaHRuaW5nRlM9ZSgpOnQuTGlnaHRuaW5nRlM9ZSgpfShzZWxmLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXt9O2Z1bmN0aW9uIGkocil7aWYoZVtyXSlyZXR1cm4gZVtyXS5leHBvcnRzO3ZhciBuPWVbcl09e2k6cixsOiExLGV4cG9ydHM6e319O3JldHVybiB0W3JdLmNhbGwobi5leHBvcnRzLG4sbi5leHBvcnRzLGkpLG4ubD0hMCxuLmV4cG9ydHN9cmV0dXJuIGkubT10LGkuYz1lLGkuZD1mdW5jdGlvbih0LGUscil7aS5vKHQsZSl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse2VudW1lcmFibGU6ITAsZ2V0OnJ9KX0saS5yPWZ1bmN0aW9uKHQpeyJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LGkudD1mdW5jdGlvbih0LGUpe2lmKDEmZSYmKHQ9aSh0KSksOCZlKXJldHVybiB0O2lmKDQmZSYmIm9iamVjdCI9PXR5cGVvZiB0JiZ0JiZ0Ll9fZXNNb2R1bGUpcmV0dXJuIHQ7dmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihpLnIociksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnR9KSwyJmUmJiJzdHJpbmciIT10eXBlb2YgdClmb3IodmFyIG4gaW4gdClpLmQocixuLGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfS5iaW5kKG51bGwsbikpO3JldHVybiByfSxpLm49ZnVuY3Rpb24odCl7dmFyIGU9dCYmdC5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIHQuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gdH07cmV0dXJuIGkuZChlLCJhIixlKSxlfSxpLm89ZnVuY3Rpb24odCxlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSl9LGkucD0iIixpKGkucz0zKX0oW2Z1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gaSguLi50KXtpZigwPT09dC5sZW5ndGgpcmV0dXJuIiI7bGV0IGU9dC5qb2luKCIvIik7cmV0dXJuIGU9ZS5yZXBsYWNlKC9cL3syLH0vZywiLyIpfWZ1bmN0aW9uIHIodCl7aWYoMD09PXQubGVuZ3RoKXJldHVybltdO2lmKCIvIj09PXQpcmV0dXJuWyIvIl07bGV0IGU9dC5zcGxpdCgiLyIpO3JldHVybiIiPT09ZVtlLmxlbmd0aC0xXSYmZS5wb3AoKSwiLyI9PT10WzBdP2VbMF09Ii8iOiIuIiE9PWVbMF0mJmUudW5zaGlmdCgiLiIpLGV9ZnVuY3Rpb24gbih0LGUpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gdC5wdXNoKGUpLHQ7aWYoIi4iPT09ZSlyZXR1cm4gdDtpZigiLi4iPT09ZSl7aWYoMT09PXQubGVuZ3RoKXtpZigiLyI9PT10WzBdKXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIG5vcm1hbGl6ZSBwYXRoIC0gdHJhdmVyc2VzIGFib3ZlIHJvb3QgZGlyZWN0b3J5Iik7aWYoIi4iPT09dFswXSlyZXR1cm4gdC5wdXNoKGUpLHR9cmV0dXJuIi4uIj09PXRbdC5sZW5ndGgtMV0/KHQucHVzaCgiLi4iKSx0KToodC5wb3AoKSx0KX1yZXR1cm4gdC5wdXNoKGUpLHR9dC5leHBvcnRzPXtqb2luOmksbm9ybWFsaXplOmZ1bmN0aW9uKHQpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4iLiI7bGV0IGU9cih0KTtyZXR1cm4gZT1lLnJlZHVjZShuLFtdKSxpKC4uLmUpfSxzcGxpdDpyLGJhc2VuYW1lOmZ1bmN0aW9uKHQpe2lmKCIvIj09PXQpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZ2V0IGJhc2VuYW1lIG9mICIke3R9ImApO2NvbnN0IGU9dC5sYXN0SW5kZXhPZigiLyIpO3JldHVybi0xPT09ZT90OnQuc2xpY2UoZSsxKX0sZGlybmFtZTpmdW5jdGlvbih0KXtjb25zdCBlPXQubGFzdEluZGV4T2YoIi8iKTtpZigtMT09PWUpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZ2V0IGRpcm5hbWUgb2YgIiR7dH0iYCk7cmV0dXJuIDA9PT1lPyIvIjp0LnNsaWNlKDAsZSl9fX0sZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBpKHQpe3JldHVybiBjbGFzcyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKC4uLmUpe3N1cGVyKC4uLmUpLHRoaXMuY29kZT10LHRoaXMubWVzc2FnZT90aGlzLm1lc3NhZ2U9dCsiOiAiK3RoaXMubWVzc2FnZTp0aGlzLm1lc3NhZ2U9dH19fWNvbnN0IHI9aSgiRUVYSVNUIiksbj1pKCJFTk9FTlQiKSxzPWkoIkVOT1RFTVBUWSIpO3QuZXhwb3J0cz17RUVYSVNUOnIsRU5PRU5UOm4sRU5PVEVNUFRZOnN9fSxmdW5jdGlvbih0LGUsaSl7InVzZSBzdHJpY3QiO2kucihlKSxpLmQoZSwiU3RvcmUiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSxpLmQoZSwiZ2V0IixmdW5jdGlvbigpe3JldHVybiBvfSksaS5kKGUsInNldCIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pLGkuZChlLCJ1cGRhdGUiLGZ1bmN0aW9uKCl7cmV0dXJuIGh9KSxpLmQoZSwiZGVsIixmdW5jdGlvbigpe3JldHVybiBjfSksaS5kKGUsImNsZWFyIixmdW5jdGlvbigpe3JldHVybiB1fSksaS5kKGUsImtleXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KSxpLmQoZSwiY2xvc2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGR9KTtjbGFzcyBye2NvbnN0cnVjdG9yKHQ9ImtleXZhbC1zdG9yZSIsZT0ia2V5dmFsIil7dGhpcy5zdG9yZU5hbWU9ZSx0aGlzLl9kYk5hbWU9dCx0aGlzLl9zdG9yZU5hbWU9ZSx0aGlzLl9pbml0KCl9X2luaXQoKXt0aGlzLl9kYnB8fCh0aGlzLl9kYnA9bmV3IFByb21pc2UoKHQsZSk9Pntjb25zdCBpPWluZGV4ZWREQi5vcGVuKHRoaXMuX2RiTmFtZSwxKTtpLm9uZXJyb3I9KCgpPT5lKGkuZXJyb3IpKSxpLm9uc3VjY2Vzcz0oKCk9PnQoaS5yZXN1bHQpKSxpLm9udXBncmFkZW5lZWRlZD0oKCk9PntpLnJlc3VsdC5jcmVhdGVPYmplY3RTdG9yZSh0aGlzLl9zdG9yZU5hbWUpfSl9KSl9X3dpdGhJREJTdG9yZSh0LGUpe3JldHVybiB0aGlzLl9pbml0KCksdGhpcy5fZGJwLnRoZW4oaT0+bmV3IFByb21pc2UoKHIsbik9Pntjb25zdCBzPWkudHJhbnNhY3Rpb24odGhpcy5zdG9yZU5hbWUsdCk7cy5vbmNvbXBsZXRlPSgoKT0+cigpKSxzLm9uYWJvcnQ9cy5vbmVycm9yPSgoKT0+bihzLmVycm9yKSksZShzLm9iamVjdFN0b3JlKHRoaXMuc3RvcmVOYW1lKSl9KSl9X2Nsb3NlKCl7cmV0dXJuIHRoaXMuX2luaXQoKSx0aGlzLl9kYnAudGhlbih0PT57dC5jbG9zZSgpLHRoaXMuX2RicD12b2lkIDB9KX19bGV0IG47ZnVuY3Rpb24gcygpe3JldHVybiBufHwobj1uZXcgciksbn1mdW5jdGlvbiBvKHQsZT1zKCkpe2xldCBpO3JldHVybiBlLl93aXRoSURCU3RvcmUoInJlYWRvbmx5IixlPT57aT1lLmdldCh0KX0pLnRoZW4oKCk9PmkucmVzdWx0KX1mdW5jdGlvbiBhKHQsZSxpPXMoKSl7cmV0dXJuIGkuX3dpdGhJREJTdG9yZSgicmVhZHdyaXRlIixpPT57aS5wdXQoZSx0KX0pfWZ1bmN0aW9uIGgodCxlLGk9cygpKXtyZXR1cm4gaS5fd2l0aElEQlN0b3JlKCJyZWFkd3JpdGUiLGk9Pntjb25zdCByPWkuZ2V0KHQpO3Iub25zdWNjZXNzPSgoKT0+e2kucHV0KGUoci5yZXN1bHQpLHQpfSl9KX1mdW5jdGlvbiBjKHQsZT1zKCkpe3JldHVybiBlLl93aXRoSURCU3RvcmUoInJlYWR3cml0ZSIsZT0+e2UuZGVsZXRlKHQpfSl9ZnVuY3Rpb24gdSh0PXMoKSl7cmV0dXJuIHQuX3dpdGhJREJTdG9yZSgicmVhZHdyaXRlIix0PT57dC5jbGVhcigpfSl9ZnVuY3Rpb24gbCh0PXMoKSl7Y29uc3QgZT1bXTtyZXR1cm4gdC5fd2l0aElEQlN0b3JlKCJyZWFkb25seSIsdD0+eyh0Lm9wZW5LZXlDdXJzb3J8fHQub3BlbkN1cnNvcikuY2FsbCh0KS5vbnN1Y2Nlc3M9ZnVuY3Rpb24oKXt0aGlzLnJlc3VsdCYmKGUucHVzaCh0aGlzLnJlc3VsdC5rZXkpLHRoaXMucmVzdWx0LmNvbnRpbnVlKCkpfX0pLnRoZW4oKCk9PmUpfWZ1bmN0aW9uIGQodD1zKCkpe3JldHVybiB0Ll9jbG9zZSgpfX0sZnVuY3Rpb24odCxlLGkpe2NvbnN0IHI9aSg0KSxuPWkoNSk7ZnVuY3Rpb24gcyh0LGUpeyJmdW5jdGlvbiI9PXR5cGVvZiB0JiYoZT10KTtyZXR1cm5bKC4uLnQpPT5lKG51bGwsLi4udCksZT1yKGUpXX10LmV4cG9ydHM9Y2xhc3N7Y29uc3RydWN0b3IoLi4udCl7dGhpcy5wcm9taXNlcz1uZXcgbiguLi50KSx0aGlzLnJlYWRGaWxlPXRoaXMucmVhZEZpbGUuYmluZCh0aGlzKSx0aGlzLndyaXRlRmlsZT10aGlzLndyaXRlRmlsZS5iaW5kKHRoaXMpLHRoaXMudW5saW5rPXRoaXMudW5saW5rLmJpbmQodGhpcyksdGhpcy5yZWFkZGlyPXRoaXMucmVhZGRpci5iaW5kKHRoaXMpLHRoaXMubWtkaXI9dGhpcy5ta2Rpci5iaW5kKHRoaXMpLHRoaXMucm1kaXI9dGhpcy5ybWRpci5iaW5kKHRoaXMpLHRoaXMucmVuYW1lPXRoaXMucmVuYW1lLmJpbmQodGhpcyksdGhpcy5zdGF0PXRoaXMuc3RhdC5iaW5kKHRoaXMpLHRoaXMubHN0YXQ9dGhpcy5sc3RhdC5iaW5kKHRoaXMpLHRoaXMucmVhZGxpbms9dGhpcy5yZWFkbGluay5iaW5kKHRoaXMpLHRoaXMuc3ltbGluaz10aGlzLnN5bWxpbmsuYmluZCh0aGlzKX1yZWFkRmlsZSh0LGUsaSl7Y29uc3RbcixuXT1zKGUsaSk7dGhpcy5wcm9taXNlcy5yZWFkRmlsZSh0LGUpLnRoZW4ocikuY2F0Y2gobil9d3JpdGVGaWxlKHQsZSxpLHIpe2NvbnN0W24sb109cyhpLHIpO3RoaXMucHJvbWlzZXMud3JpdGVGaWxlKHQsZSxpKS50aGVuKG4pLmNhdGNoKG8pfXVubGluayh0LGUsaSl7Y29uc3RbcixuXT1zKGUsaSk7dGhpcy5wcm9taXNlcy51bmxpbmsodCxlKS50aGVuKHIpLmNhdGNoKG4pfXJlYWRkaXIodCxlLGkpe2NvbnN0W3Isbl09cyhlLGkpO3RoaXMucHJvbWlzZXMucmVhZGRpcih0LGUpLnRoZW4ocikuY2F0Y2gobil9bWtkaXIodCxlLGkpe2NvbnN0W3Isbl09cyhlLGkpO3RoaXMucHJvbWlzZXMubWtkaXIodCxlKS50aGVuKHIpLmNhdGNoKG4pfXJtZGlyKHQsZSxpKXtjb25zdFtyLG5dPXMoZSxpKTt0aGlzLnByb21pc2VzLnJtZGlyKHQsZSkudGhlbihyKS5jYXRjaChuKX1yZW5hbWUodCxlLGkpe2NvbnN0W3Isbl09cyhpKTt0aGlzLnByb21pc2VzLnJlbmFtZSh0LGUpLnRoZW4ocikuY2F0Y2gobil9c3RhdCh0LGUsaSl7Y29uc3RbcixuXT1zKGUsaSk7dGhpcy5wcm9taXNlcy5zdGF0KHQpLnRoZW4ocikuY2F0Y2gobil9bHN0YXQodCxlLGkpe2NvbnN0W3Isbl09cyhlLGkpO3RoaXMucHJvbWlzZXMubHN0YXQodCkudGhlbihyKS5jYXRjaChuKX1yZWFkbGluayh0LGUsaSl7Y29uc3RbcixuXT1zKGUsaSk7dGhpcy5wcm9taXNlcy5yZWFkbGluayh0KS50aGVuKHIpLmNhdGNoKG4pfXN5bWxpbmsodCxlLGkpe2NvbnN0W3Isbl09cyhpKTt0aGlzLnByb21pc2VzLnN5bWxpbmsodCxlKS50aGVuKHIpLmNhdGNoKG4pfX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLGk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCJleHBlY3RlZCBhIGZ1bmN0aW9uIGJ1dCBnb3QgIit0KTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZT9pOihlPSEwLGk9dC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX19LGZ1bmN0aW9uKHQsZSxpKXtjb25zdHtlbmNvZGU6cixkZWNvZGU6bn09aSg2KSxzPWkoOSksbz1pKDEwKSxhPWkoMTEpLHtFTk9FTlQ6aCxFTk9URU1QVFk6Y309aSgxKSx1PWkoMTIpLGw9aSgxMyksZD1pKDE0KSxwPWkoMCk7aSgxNSk7ZnVuY3Rpb24gZih0LGUpe3JldHVybiB2b2lkIDAhPT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZXx8KGU9e30pLCJzdHJpbmciPT10eXBlb2YgZSYmKGU9e2VuY29kaW5nOmV9KSxbdD1wLm5vcm1hbGl6ZSh0KSxlXX1mdW5jdGlvbiBfKHQsZSl7cmV0dXJuW3Aubm9ybWFsaXplKHQpLHAubm9ybWFsaXplKGUpXX10LmV4cG9ydHM9Y2xhc3N7Y29uc3RydWN0b3IodCx7d2lwZTplLHVybDppfT17fSl7dGhpcy5fbmFtZT10LHRoaXMuX2lkYj1uZXcgdSh0KSx0aGlzLl9tdXRleD1uZXcgZCh0KSx0aGlzLl9jYWNoZT1uZXcgYSh0KSx0aGlzLl9vcHRzPXt3aXBlOmUsdXJsOml9LHRoaXMuX25lZWRzV2lwZT0hIWUsdGhpcy5zYXZlU3VwZXJibG9jaz1zKCgpPT57dGhpcy5fc2F2ZVN1cGVyYmxvY2soKX0sNTAwKSxpJiYodGhpcy5faHR0cD1uZXcgbChpKSksdGhpcy5fb3BlcmF0aW9ucz1uZXcgU2V0LHRoaXMucmVhZEZpbGU9dGhpcy5fd3JhcCh0aGlzLnJlYWRGaWxlLCExKSx0aGlzLndyaXRlRmlsZT10aGlzLl93cmFwKHRoaXMud3JpdGVGaWxlLCEwKSx0aGlzLnVubGluaz10aGlzLl93cmFwKHRoaXMudW5saW5rLCEwKSx0aGlzLnJlYWRkaXI9dGhpcy5fd3JhcCh0aGlzLnJlYWRkaXIsITEpLHRoaXMubWtkaXI9dGhpcy5fd3JhcCh0aGlzLm1rZGlyLCEwKSx0aGlzLnJtZGlyPXRoaXMuX3dyYXAodGhpcy5ybWRpciwhMCksdGhpcy5yZW5hbWU9dGhpcy5fd3JhcCh0aGlzLnJlbmFtZSwhMCksdGhpcy5zdGF0PXRoaXMuX3dyYXAodGhpcy5zdGF0LCExKSx0aGlzLmxzdGF0PXRoaXMuX3dyYXAodGhpcy5sc3RhdCwhMSksdGhpcy5yZWFkbGluaz10aGlzLl93cmFwKHRoaXMucmVhZGxpbmssITEpLHRoaXMuc3ltbGluaz10aGlzLl93cmFwKHRoaXMuc3ltbGluaywhMCksdGhpcy5fZGVhY3RpdmF0aW9uUHJvbWlzZT1udWxsLHRoaXMuX2RlYWN0aXZhdGlvblRpbWVvdXQ9bnVsbCx0aGlzLl9hY3RpdmF0aW9uUHJvbWlzZT1udWxsLHRoaXMuX2FjdGl2YXRlKCkudGhlbigoKT0+ezA9PT10aGlzLl9vcGVyYXRpb25zLnNpemUmJih0aGlzLl9kZWFjdGl2YXRpb25UaW1lb3V0PXNldFRpbWVvdXQodGhpcy5fZGVhY3RpdmF0ZS5iaW5kKHRoaXMpLDEwMCkpfSl9X3dyYXAodCxlKXtyZXR1cm4gYXN5bmMoLi4uaSk9PntsZXQgcj17bmFtZTp0Lm5hbWUsYXJnczppfTt0aGlzLl9vcGVyYXRpb25zLmFkZChyKTt0cnl7cmV0dXJuIGF3YWl0IHRoaXMuX2FjdGl2YXRlKCksYXdhaXQgdC5hcHBseSh0aGlzLGkpfWZpbmFsbHl7dGhpcy5fb3BlcmF0aW9ucy5kZWxldGUociksZSYmdGhpcy5zYXZlU3VwZXJibG9jaygpLDA9PT10aGlzLl9vcGVyYXRpb25zLnNpemUmJih0aGlzLl9kZWFjdGl2YXRpb25UaW1lb3V0PXNldFRpbWVvdXQodGhpcy5fZGVhY3RpdmF0ZS5iaW5kKHRoaXMpLDUwMCkpfX19YXN5bmMgX2FjdGl2YXRlKCl7cmV0dXJuIHRoaXMuX2RlYWN0aXZhdGlvblRpbWVvdXQmJihjbGVhclRpbWVvdXQodGhpcy5fZGVhY3RpdmF0aW9uVGltZW91dCksdGhpcy5fZGVhY3RpdmF0aW9uVGltZW91dD1udWxsKSx0aGlzLl9kZWFjdGl2YXRpb25Qcm9taXNlJiZhd2FpdCB0aGlzLl9kZWFjdGl2YXRpb25Qcm9taXNlLHRoaXMuX2FjdGl2YXRpb25Qcm9taXNlfHwodGhpcy5fYWN0aXZhdGlvblByb21pc2U9dGhpcy5fX2FjdGl2YXRlKCkpLHRoaXMuX2RlYWN0aXZhdGlvblByb21pc2U9bnVsbCx0aGlzLl9hY3RpdmF0aW9uUHJvbWlzZX1hc3luYyBfX2FjdGl2YXRlKCl7aWYodGhpcy5fY2FjaGUuYWN0aXZhdGVkKXJldHVybjt0aGlzLl9uZWVkc1dpcGUmJih0aGlzLl9uZWVkc1dpcGU9ITEsYXdhaXQgdGhpcy5faWRiLndpcGUoKSxhd2FpdCB0aGlzLl9tdXRleC5yZWxlYXNlKHtmb3JjZTohMH0pKSx0aGlzLl9tdXRleC5oYXMoKXx8YXdhaXQgdGhpcy5fbXV0ZXgud2FpdCgpO2NvbnN0IHQ9YXdhaXQgdGhpcy5faWRiLmxvYWRTdXBlcmJsb2NrKCk7aWYodCl0aGlzLl9jYWNoZS5hY3RpdmF0ZSh0KTtlbHNlIGlmKHRoaXMuX2h0dHApe2NvbnN0IHQ9YXdhaXQgdGhpcy5faHR0cC5sb2FkU3VwZXJibG9jaygpO3RoaXMuX2NhY2hlLmFjdGl2YXRlKHQpLGF3YWl0IHRoaXMuX3NhdmVTdXBlcmJsb2NrKCl9ZWxzZSB0aGlzLl9jYWNoZS5hY3RpdmF0ZSgpfWFzeW5jIF9kZWFjdGl2YXRlKCl7cmV0dXJuIHRoaXMuX2FjdGl2YXRpb25Qcm9taXNlJiZhd2FpdCB0aGlzLl9hY3RpdmF0aW9uUHJvbWlzZSx0aGlzLl9kZWFjdGl2YXRpb25Qcm9taXNlfHwodGhpcy5fZGVhY3RpdmF0aW9uUHJvbWlzZT10aGlzLl9fZGVhY3RpdmF0ZSgpKSx0aGlzLl9hY3RpdmF0aW9uUHJvbWlzZT1udWxsLHRoaXMuX2RlYWN0aXZhdGlvblByb21pc2V9YXN5bmMgX19kZWFjdGl2YXRlKCl7YXdhaXQgdGhpcy5fc2F2ZVN1cGVyYmxvY2soKSx0aGlzLl9jYWNoZS5kZWFjdGl2YXRlKCksYXdhaXQgdGhpcy5fbXV0ZXgucmVsZWFzZSgpLGF3YWl0IHRoaXMuX2lkYi5jbG9zZSgpfWFzeW5jIF9zYXZlU3VwZXJibG9jaygpe3RoaXMuX2NhY2hlLmFjdGl2YXRlZCYmKHRoaXMuX2xhc3RTYXZlZEF0PURhdGUubm93KCksYXdhaXQgdGhpcy5faWRiLnNhdmVTdXBlcmJsb2NrKHRoaXMuX2NhY2hlLl9yb290KSl9YXN5bmMgcmVhZEZpbGUodCxlKXtbdCxlXT1mKHQsZSk7Y29uc3R7ZW5jb2Rpbmc6aX09ZTtpZihpJiYidXRmOCIhPT1pKXRocm93IG5ldyBFcnJvcignT25seSAidXRmOCIgZW5jb2RpbmcgaXMgc3VwcG9ydGVkIGluIHJlYWRGaWxlJyk7Y29uc3Qgcj10aGlzLl9jYWNoZS5zdGF0KHQpO2xldCBzPWF3YWl0IHRoaXMuX2lkYi5yZWFkRmlsZShyLmlubyk7cmV0dXJuIXMmJnRoaXMuX2h0dHAmJihzPWF3YWl0IHRoaXMuX2h0dHAucmVhZEZpbGUodCkpLHMmJiJ1dGY4Ij09PWkmJihzPW4ocykpLHN9YXN5bmMgd3JpdGVGaWxlKHQsZSxpKXtbdCxpXT1mKHQsaSk7Y29uc3R7bW9kZTpuLGVuY29kaW5nOnM9InV0ZjgifT1pO2lmKCJzdHJpbmciPT10eXBlb2YgZSl7aWYoInV0ZjgiIT09cyl0aHJvdyBuZXcgRXJyb3IoJ09ubHkgInV0ZjgiIGVuY29kaW5nIGlzIHN1cHBvcnRlZCBpbiB3cml0ZUZpbGUnKTtlPXIoZSl9Y29uc3Qgbz10aGlzLl9jYWNoZS53cml0ZUZpbGUodCxlLHttb2RlOm59KTtyZXR1cm4gYXdhaXQgdGhpcy5faWRiLndyaXRlRmlsZShvLmlubyxlKSxudWxsfWFzeW5jIHVubGluayh0LGUpe1t0LGVdPWYodCxlKTtjb25zdCBpPXRoaXMuX2NhY2hlLnN0YXQodCk7cmV0dXJuIHRoaXMuX2NhY2hlLnVubGluayh0KSxhd2FpdCB0aGlzLl9pZGIudW5saW5rKGkuaW5vKSxudWxsfWFzeW5jIHJlYWRkaXIodCxlKXtyZXR1cm5bdCxlXT1mKHQsZSksdGhpcy5fY2FjaGUucmVhZGRpcih0KX1hc3luYyBta2Rpcih0LGUpe1t0LGVdPWYodCxlKTtjb25zdHttb2RlOmk9NTExfT1lO3JldHVybiBhd2FpdCB0aGlzLl9jYWNoZS5ta2Rpcih0LHttb2RlOml9KSxudWxsfWFzeW5jIHJtZGlyKHQsZSl7aWYoW3QsZV09Zih0LGUpLCIvIj09PXQpdGhyb3cgbmV3IGM7cmV0dXJuIHRoaXMuX2NhY2hlLnJtZGlyKHQpLG51bGx9YXN5bmMgcmVuYW1lKHQsZSl7cmV0dXJuW3QsZV09Xyh0LGUpLHRoaXMuX2NhY2hlLnJlbmFtZSh0LGUpLG51bGx9YXN5bmMgc3RhdCh0LGUpe1t0LGVdPWYodCxlKTtjb25zdCBpPXRoaXMuX2NhY2hlLnN0YXQodCk7cmV0dXJuIG5ldyBvKGkpfWFzeW5jIGxzdGF0KHQsZSl7W3QsZV09Zih0LGUpO2xldCBpPXRoaXMuX2NhY2hlLmxzdGF0KHQpO3JldHVybiBuZXcgbyhpKX1hc3luYyByZWFkbGluayh0LGUpe3JldHVyblt0LGVdPWYodCxlKSx0aGlzLl9jYWNoZS5yZWFkbGluayh0KX1hc3luYyBzeW1saW5rKHQsZSl7cmV0dXJuW3QsZV09Xyh0LGUpLHRoaXMuX2NhY2hlLnN5bWxpbmsodCxlKSxudWxsfX19LGZ1bmN0aW9uKHQsZSxpKXtpKDcpLHQuZXhwb3J0cz17ZW5jb2RlOnQ9PihuZXcgVGV4dEVuY29kZXIpLmVuY29kZSh0KSxkZWNvZGU6dD0+KG5ldyBUZXh0RGVjb2RlcikuZGVjb2RlKHQpfX0sZnVuY3Rpb24odCxlLGkpeyhmdW5jdGlvbih0KXshZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXtpZigidXRmLTgiIT09KHQ9dm9pZCAwPT09dD8idXRmLTgiOnQpKXRocm93IG5ldyBSYW5nZUVycm9yKCJGYWlsZWQgdG8gY29uc3RydWN0ICdUZXh0RW5jb2Rlcic6IFRoZSBlbmNvZGluZyBsYWJlbCBwcm92aWRlZCAoJyIrdCsiJykgaXMgaW52YWxpZC4iKX1mdW5jdGlvbiBpKHQsZSl7aWYoZT12b2lkIDA9PT1lP3tmYXRhbDohMX06ZSwidXRmLTgiIT09KHQ9dm9pZCAwPT09dD8idXRmLTgiOnQpKXRocm93IG5ldyBSYW5nZUVycm9yKCJGYWlsZWQgdG8gY29uc3RydWN0ICdUZXh0RGVjb2Rlcic6IFRoZSBlbmNvZGluZyBsYWJlbCBwcm92aWRlZCAoJyIrdCsiJykgaXMgaW52YWxpZC4iKTtpZihlLmZhdGFsKXRocm93IEVycm9yKCJGYWlsZWQgdG8gY29uc3RydWN0ICdUZXh0RGVjb2Rlcic6IHRoZSAnZmF0YWwnIG9wdGlvbiBpcyB1bnN1cHBvcnRlZC4iKX1pZih0LlRleHRFbmNvZGVyJiZ0LlRleHREZWNvZGVyKXJldHVybiExO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZW5jb2RpbmciLHt2YWx1ZToidXRmLTgifSksZS5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKHQsZSl7aWYoKGU9dm9pZCAwPT09ZT97c3RyZWFtOiExfTplKS5zdHJlYW0pdGhyb3cgRXJyb3IoIkZhaWxlZCB0byBlbmNvZGU6IHRoZSAnc3RyZWFtJyBvcHRpb24gaXMgdW5zdXBwb3J0ZWQuIik7ZT0wO2Zvcih2YXIgaT10Lmxlbmd0aCxyPTAsbj1NYXRoLm1heCgzMixpKyhpPj4xKSs3KSxzPW5ldyBVaW50OEFycmF5KG4+PjM8PDMpO2U8aTspe3ZhciBvPXQuY2hhckNvZGVBdChlKyspO2lmKDU1Mjk2PD1vJiY1NjMxOT49byl7aWYoZTxpKXt2YXIgYT10LmNoYXJDb2RlQXQoZSk7NTYzMjA9PSg2NDUxMiZhKSYmKCsrZSxvPSgoMTAyMyZvKTw8MTApKygxMDIzJmEpKzY1NTM2KX1pZig1NTI5Njw9byYmNTYzMTk+PW8pY29udGludWV9aWYocis0PnMubGVuZ3RoJiYobis9OCxuPShuKj0xK2UvdC5sZW5ndGgqMik+PjM8PDMsKGE9bmV3IFVpbnQ4QXJyYXkobikpLnNldChzKSxzPWEpLDA9PSg0Mjk0OTY3MTY4Jm8pKXNbcisrXT1vO2Vsc2V7aWYoMD09KDQyOTQ5NjUyNDgmbykpc1tyKytdPW8+PjYmMzF8MTkyO2Vsc2UgaWYoMD09KDQyOTQ5MDE3NjAmbykpc1tyKytdPW8+PjEyJjE1fDIyNCxzW3IrK109bz4+NiY2M3wxMjg7ZWxzZXtpZigwIT0oNDI5Mjg3MDE0NCZvKSljb250aW51ZTtzW3IrK109bz4+MTgmN3wyNDAsc1tyKytdPW8+PjEyJjYzfDEyOCxzW3IrK109bz4+NiY2M3wxMjh9c1tyKytdPTYzJm98MTI4fX1yZXR1cm4gcy5zbGljZSgwLHIpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaS5wcm90b3R5cGUsImVuY29kaW5nIix7dmFsdWU6InV0Zi04In0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLnByb3RvdHlwZSwiZmF0YWwiLHt2YWx1ZTohMX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLnByb3RvdHlwZSwiaWdub3JlQk9NIix7dmFsdWU6ITF9KSxpLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24odCxlKXtpZigoZT12b2lkIDA9PT1lP3tzdHJlYW06ITF9OmUpLnN0cmVhbSl0aHJvdyBFcnJvcigiRmFpbGVkIHRvIGRlY29kZTogdGhlICdzdHJlYW0nIG9wdGlvbiBpcyB1bnN1cHBvcnRlZC4iKTtlPTA7Zm9yKHZhciBpPSh0PW5ldyBVaW50OEFycmF5KHQpKS5sZW5ndGgscj1bXTtlPGk7KXt2YXIgbj10W2UrK107aWYoMD09PW4pYnJlYWs7aWYoMD09KDEyOCZuKSlyLnB1c2gobik7ZWxzZSBpZigxOTI9PSgyMjQmbikpe3ZhciBzPTYzJnRbZSsrXTtyLnB1c2goKDMxJm4pPDw2fHMpfWVsc2UgaWYoMjI0PT0oMjQwJm4pKXtzPTYzJnRbZSsrXTt2YXIgbz02MyZ0W2UrK107ci5wdXNoKCgzMSZuKTw8MTJ8czw8NnxvKX1lbHNlIGlmKDI0MD09KDI0OCZuKSl7NjU1MzU8KG49KDcmbik8PDE4fChzPTYzJnRbZSsrXSk8PDEyfChvPTYzJnRbZSsrXSk8PDZ8NjMmdFtlKytdKSYmKG4tPTY1NTM2LHIucHVzaChuPj4+MTAmMTAyM3w1NTI5Niksbj01NjMyMHwxMDIzJm4pLHIucHVzaChuKX19cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxyKX0sdC5UZXh0RW5jb2Rlcj1lLHQuVGV4dERlY29kZXI9aX0oInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnZvaWQgMCE9PXQ/dDp0aGlzKX0pLmNhbGwodGhpcyxpKDgpKX0sZnVuY3Rpb24odCxlKXt2YXIgaTtpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCk7dHJ5e2k9aXx8bmV3IEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl9Y2F0Y2godCl7Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJihpPXdpbmRvdyl9dC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxpKXt2YXIgcjtyZXR1cm4gZnVuY3Rpb24oKXtpZighZSlyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIG49dGhpcyxzPWFyZ3VtZW50cyxvPWkmJiFyO3JldHVybiBjbGVhclRpbWVvdXQocikscj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYocj1udWxsLCFvKXJldHVybiB0LmFwcGx5KG4scyl9LGUpLG8/dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dm9pZCAwfX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMudHlwZT10LnR5cGUsdGhpcy5tb2RlPXQubW9kZSx0aGlzLnNpemU9dC5zaXplLHRoaXMuaW5vPXQuaW5vLHRoaXMubXRpbWVNcz10Lm10aW1lTXMsdGhpcy5jdGltZU1zPXQuY3RpbWVNc3x8dC5tdGltZU1zLHRoaXMudWlkPTEsdGhpcy5naWQ9MSx0aGlzLmRldj0xfWlzRmlsZSgpe3JldHVybiJmaWxlIj09PXRoaXMudHlwZX1pc0RpcmVjdG9yeSgpe3JldHVybiJkaXIiPT09dGhpcy50eXBlfWlzU3ltYm9saWNMaW5rKCl7cmV0dXJuInN5bWxpbmsiPT09dGhpcy50eXBlfX19LGZ1bmN0aW9uKHQsZSxpKXtjb25zdCByPWkoMCkse0VOT0VOVDpuLEVFWElTVDpzLEVOT1RFTVBUWTpvfT1pKDEpLGE9MDt0LmV4cG9ydHM9Y2xhc3N7Y29uc3RydWN0b3IoKXt9X21ha2VSb290KHQ9bmV3IE1hcCl7cmV0dXJuIHQuc2V0KGEse21vZGU6NTExLHR5cGU6ImRpciIsc2l6ZTowLGlubzowLG10aW1lTXM6RGF0ZS5ub3coKX0pLHR9YWN0aXZhdGUodD1udWxsKXt0aGlzLl9yb290PW51bGw9PT10P25ldyBNYXAoW1siLyIsdGhpcy5fbWFrZVJvb3QoKV1dKToic3RyaW5nIj09dHlwZW9mIHQ/bmV3IE1hcChbWyIvIix0aGlzLl9tYWtlUm9vdCh0aGlzLnBhcnNlKHQpKV1dKTp0fWdldCBhY3RpdmF0ZWQoKXtyZXR1cm4hIXRoaXMuX3Jvb3R9ZGVhY3RpdmF0ZSgpe3RoaXMuX3Jvb3Q9dm9pZCAwfXNpemUoKXtyZXR1cm4gdGhpcy5fY291bnRJbm9kZXModGhpcy5fcm9vdC5nZXQoIi8iKSktMX1fY291bnRJbm9kZXModCl7bGV0IGU9MTtmb3IobGV0W2kscl1vZiB0KWkhPT1hJiYoZSs9dGhpcy5fY291bnRJbm9kZXMocikpO3JldHVybiBlfWF1dG9pbmMoKXtyZXR1cm4gdGhpcy5fbWF4SW5vZGUodGhpcy5fcm9vdC5nZXQoIi8iKSkrMX1fbWF4SW5vZGUodCl7bGV0IGU9dC5nZXQoYSkuaW5vO2ZvcihsZXRbaSxyXW9mIHQpaSE9PWEmJihlPU1hdGgubWF4KGUsdGhpcy5fbWF4SW5vZGUocikpKTtyZXR1cm4gZX1wcmludCh0PXRoaXMuX3Jvb3QuZ2V0KCIvIikpe2xldCBlPSIiO2NvbnN0IGk9KHQscik9Pntmb3IobGV0W24sc11vZiB0KXtpZigwPT09biljb250aW51ZTtsZXQgdD1zLmdldChhKSxvPXQubW9kZS50b1N0cmluZyg4KTtlKz1gJHsiXHQiLnJlcGVhdChyKX0ke259XHQke299YCwiZmlsZSI9PT10LnR5cGU/ZSs9YFx0JHt0LnNpemV9XHQke3QubXRpbWVNc31cbmA6KGUrPSJcbiIsaShzLHIrMSkpfX07cmV0dXJuIGkodCwwKSxlfXBhcnNlKHQpe2xldCBlPTA7ZnVuY3Rpb24gaSh0KXtjb25zdCBpPSsrZSxyPTE9PT10Lmxlbmd0aD8iZGlyIjoiZmlsZSI7bGV0W24scyxvXT10O3JldHVybiBuPXBhcnNlSW50KG4sOCkscz1zP3BhcnNlSW50KHMpOjAsbz1vP3BhcnNlSW50KG8pOkRhdGUubm93KCksbmV3IE1hcChbW2Ese21vZGU6bix0eXBlOnIsc2l6ZTpzLG10aW1lTXM6byxpbm86aX1dXSl9bGV0IHI9dC50cmltKCkuc3BsaXQoIlxuIiksbj10aGlzLl9tYWtlUm9vdCgpLHM9W3tpbmRlbnQ6LTEsbm9kZTpufSx7aW5kZW50OjAsbm9kZTpudWxsfV07Zm9yKGxldCB0IG9mIHIpe2xldCBlPXQubWF0Y2goL15cdCovKVswXS5sZW5ndGg7dD10LnNsaWNlKGUpO2xldFtyLC4uLm5dPXQuc3BsaXQoIlx0Iiksbz1pKG4pO2lmKGU8PXNbcy5sZW5ndGgtMV0uaW5kZW50KWZvcig7ZTw9c1tzLmxlbmd0aC0xXS5pbmRlbnQ7KXMucG9wKCk7cy5wdXNoKHtpbmRlbnQ6ZSxub2RlOm99KSxzW3MubGVuZ3RoLTJdLm5vZGUuc2V0KHIsbyl9cmV0dXJuIG59X2xvb2t1cCh0LGU9ITApe2xldCBpPXRoaXMuX3Jvb3Qscz0iLyI7Zm9yKGxldCBvIG9mIHIuc3BsaXQodCkpe2lmKCEoaT1pLmdldChvKSkpdGhyb3cgbmV3IG4odCk7aWYoZSl7Y29uc3QgdD1pLmdldChhKTtpZigic3ltbGluayI9PT10LnR5cGUpe2xldCBlPXQudGFyZ2V0O2Uuc3RhcnRzV2l0aCgiLyIpfHwoZT1yLm5vcm1hbGl6ZShyLmpvaW4ocyxlKSkpLGk9dGhpcy5fbG9va3VwKGUpfXM9cz9yLmpvaW4ocyxvKTpvfX1yZXR1cm4gaX1ta2Rpcih0LHttb2RlOmV9KXtpZigiLyI9PT10KXRocm93IG5ldyBzO2xldCBpPXRoaXMuX2xvb2t1cChyLmRpcm5hbWUodCkpLG49ci5iYXNlbmFtZSh0KTtpZihpLmhhcyhuKSl0aHJvdyBuZXcgcztsZXQgbz1uZXcgTWFwLGg9e21vZGU6ZSx0eXBlOiJkaXIiLHNpemU6MCxtdGltZU1zOkRhdGUubm93KCksaW5vOnRoaXMuYXV0b2luYygpfTtvLnNldChhLGgpLGkuc2V0KG4sbyl9cm1kaXIodCl7aWYodGhpcy5fbG9va3VwKHQpLnNpemU+MSl0aHJvdyBuZXcgbztsZXQgZT10aGlzLl9sb29rdXAoci5kaXJuYW1lKHQpKSxpPXIuYmFzZW5hbWUodCk7ZS5kZWxldGUoaSl9cmVhZGRpcih0KXtyZXR1cm5bLi4udGhpcy5fbG9va3VwKHQpLmtleXMoKV0uZmlsdGVyKHQ9PiJzdHJpbmciPT10eXBlb2YgdCl9d3JpdGVGaWxlKHQsZSx7bW9kZTppfSl7bGV0IG47dHJ5e2xldCBlPXRoaXMuc3RhdCh0KTtudWxsPT09aSYmKGk9ZS5tb2RlKSxuPWUuaW5vfWNhdGNoKHQpe31udWxsPT1pJiYoaT00MzgpLG51bGw9PW4mJihuPXRoaXMuYXV0b2luYygpKTtsZXQgcz10aGlzLl9sb29rdXAoci5kaXJuYW1lKHQpKSxvPXIuYmFzZW5hbWUodCksaD17bW9kZTppLHR5cGU6ImZpbGUiLHNpemU6ZS5sZW5ndGgsbXRpbWVNczpEYXRlLm5vdygpLGlubzpufSxjPW5ldyBNYXA7cmV0dXJuIGMuc2V0KGEsaCkscy5zZXQobyxjKSxofXVubGluayh0KXtsZXQgZT10aGlzLl9sb29rdXAoci5kaXJuYW1lKHQpKSxpPXIuYmFzZW5hbWUodCk7ZS5kZWxldGUoaSl9cmVuYW1lKHQsZSl7bGV0IGk9ci5iYXNlbmFtZShlKSxuPXRoaXMuX2xvb2t1cCh0KTt0aGlzLl9sb29rdXAoci5kaXJuYW1lKGUpKS5zZXQoaSxuKSx0aGlzLnVubGluayh0KX1zdGF0KHQpe3JldHVybiB0aGlzLl9sb29rdXAodCkuZ2V0KGEpfWxzdGF0KHQpe3JldHVybiB0aGlzLl9sb29rdXAodCwhMSkuZ2V0KGEpfXJlYWRsaW5rKHQpe3JldHVybiB0aGlzLl9sb29rdXAodCwhMSkuZ2V0KGEpLnRhcmdldH1zeW1saW5rKHQsZSl7bGV0IGksbjt0cnl7bGV0IHQ9dGhpcy5zdGF0KGUpO251bGw9PT1uJiYobj10Lm1vZGUpLGk9dC5pbm99Y2F0Y2godCl7fW51bGw9PW4mJihuPTQzOCksbnVsbD09aSYmKGk9dGhpcy5hdXRvaW5jKCkpO2xldCBzPXRoaXMuX2xvb2t1cChyLmRpcm5hbWUoZSkpLG89ci5iYXNlbmFtZShlKSxoPXttb2RlOm4sdHlwZToic3ltbGluayIsdGFyZ2V0OnQsc2l6ZTowLG10aW1lTXM6RGF0ZS5ub3coKSxpbm86aX0sYz1uZXcgTWFwO3JldHVybiBjLnNldChhLGgpLHMuc2V0KG8sYyksaH19fSxmdW5jdGlvbih0LGUsaSl7Y29uc3Qgcj1pKDIpO3QuZXhwb3J0cz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9kYXRhYmFzZT10LHRoaXMuX3N0b3JlPW5ldyByLlN0b3JlKHRoaXMuX2RhdGFiYXNlLHRoaXMuX2RhdGFiYXNlKyJfZmlsZXMiKX1zYXZlU3VwZXJibG9jayh0KXtyZXR1cm4gci5zZXQoIiFyb290Iix0LHRoaXMuX3N0b3JlKX1sb2FkU3VwZXJibG9jaygpe3JldHVybiByLmdldCgiIXJvb3QiLHRoaXMuX3N0b3JlKX1yZWFkRmlsZSh0KXtyZXR1cm4gci5nZXQodCx0aGlzLl9zdG9yZSl9d3JpdGVGaWxlKHQsZSl7cmV0dXJuIHIuc2V0KHQsZSx0aGlzLl9zdG9yZSl9dW5saW5rKHQpe3JldHVybiByLmRlbCh0LHRoaXMuX3N0b3JlKX13aXBlKCl7cmV0dXJuIHIuY2xlYXIodGhpcy5fc3RvcmUpfWNsb3NlKCl7cmV0dXJuIHIuY2xvc2UodGhpcy5fc3RvcmUpfX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX3VybD10fWxvYWRTdXBlcmJsb2NrKCl7cmV0dXJuIGZldGNoKHRoaXMuX3VybCsiLy5zdXBlcmJsb2NrLnR4dCIpLnRoZW4odD0+dC50ZXh0KCkpfWFzeW5jIHJlYWRGaWxlKHQpe2NvbnN0IGU9YXdhaXQgZmV0Y2godGhpcy5fdXJsK3QpO2lmKDIwMD09PWUuc3RhdHVzKXJldHVybiBlLmFycmF5QnVmZmVyKCk7dGhyb3cgbmV3IEVycm9yKCJFTk9FTlQiKX19fSxmdW5jdGlvbih0LGUsaSl7Y29uc3Qgcj1pKDIpLG49dD0+bmV3IFByb21pc2UoZT0+c2V0VGltZW91dChlLHQpKTt0LmV4cG9ydHM9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5faWQ9TWF0aC5yYW5kb20oKSx0aGlzLl9kYXRhYmFzZT10LHRoaXMuX3N0b3JlPW5ldyByLlN0b3JlKHRoaXMuX2RhdGFiYXNlKyJfbG9jayIsdGhpcy5fZGF0YWJhc2UrIl9sb2NrIiksdGhpcy5faGFzPSExLHRoaXMuX2tlZXBBbGl2ZVRpbWVvdXQ9bnVsbH1oYXMoKXtyZXR1cm4gdGhpcy5faGFzfWFzeW5jIGFjcXVpcmUoe3R0bDp0PTVlMyxyZWZyZXNoUGVyaW9kOmV9PXt9KXtsZXQgaSxuLHM7aWYoYXdhaXQgci51cGRhdGUoImxvY2siLGU9Pntjb25zdCByPURhdGUubm93KCk7cmV0dXJuIG49ZSYmZS5leHBpcmVzPHIsaT12b2lkIDA9PT1lfHxuLHM9ZSYmZS5ob2xkZXI9PT10aGlzLl9pZCx0aGlzLl9oYXM9aXx8cyxpP3tob2xkZXI6dGhpcy5faWQsZXhwaXJlczpyK3R9OmV9LHRoaXMuX3N0b3JlKSxzKXRocm93IG5ldyBFcnJvcigiTXV0ZXggZG91YmxlLWxvY2tlZCIpO3JldHVybiBpJiZ0aGlzLl9rZWVwQWxpdmUoe3R0bDp0LHJlZnJlc2hQZXJpb2Q6ZX0pLGl9YXN5bmMgd2FpdCh7aW50ZXJ2YWw6dD0xMDAsbGltaXQ6ZT02ZTMsdHRsOmkscmVmcmVzaFBlcmlvZDpyfT17fSl7Zm9yKDtlLS07KXtpZihhd2FpdCB0aGlzLmFjcXVpcmUoe3R0bDppLHJlZnJlc2hQZXJpb2Q6cn0pKXJldHVybiEwO2F3YWl0IG4odCl9dGhyb3cgbmV3IEVycm9yKCJNdXRleCB0aW1lb3V0Iil9YXN5bmMgcmVsZWFzZSh7Zm9yY2U6dD0hMX09e30pe2xldCBlLGksbjtpZih0aGlzLl9zdG9wS2VlcEFsaXZlKCksYXdhaXQgci51cGRhdGUoImxvY2siLHI9PihlPXR8fHImJnIuaG9sZGVyPT09dGhpcy5faWQsaT12b2lkIDA9PT1yLG49ciYmci5ob2xkZXIhPT10aGlzLl9pZCx0aGlzLl9oYXM9IWUsZT92b2lkIDA6ciksdGhpcy5fc3RvcmUpLHRoaXMuX2hhc3x8YXdhaXQgci5jbG9zZSh0aGlzLl9zdG9yZSksIWUmJiF0KXtpZihpKXRocm93IG5ldyBFcnJvcigiTXV0ZXggZG91YmxlLWZyZWVkIik7aWYobil0aHJvdyBuZXcgRXJyb3IoIk11dGV4IGxvc3Qgb3duZXJzaGlwIil9cmV0dXJuIGV9YXN5bmMgX2tlZXBBbGl2ZSh7dHRsOnQ9NWUzLHJlZnJlc2hQZXJpb2Q6ZT0zZTN9PXt9KXt0aGlzLl9rZWVwQWxpdmVUaW1lb3V0PXNldEludGVydmFsKGFzeW5jKCk9PntsZXQgZSxpLG47aWYoYXdhaXQgci51cGRhdGUoImxvY2siLHI9Pntjb25zdCBzPURhdGUubm93KCk7cmV0dXJuIGk9dm9pZCAwPT09cixuPXImJnIuaG9sZGVyIT09dGhpcy5faWQsZT0haSYmIW4sdGhpcy5faGFzPWUsZT97aG9sZGVyOnRoaXMuX2lkLGV4cGlyZXM6cyt0fTpyfSx0aGlzLl9zdG9yZSksZXx8dGhpcy5fc3RvcEtlZXBBbGl2ZSgpLGkpdGhyb3cgbmV3IEVycm9yKCJNdXRleCB3YXMgZGVsZXRlZCIpO2lmKG4pdGhyb3cgbmV3IEVycm9yKCJNdXRleCBsb3N0IG93bmVyc2hpcCIpfSxlKX1fc3RvcEtlZXBBbGl2ZSgpe3RoaXMuX2tlZXBBbGl2ZVRpbWVvdXQmJmNsZWFySW50ZXJ2YWwodGhpcy5fa2VlcEFsaXZlVGltZW91dCl9fX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHBlcmZvcm1hbmNlLm1hcmsoYCR7dH0gc3RhcnRgKSxmdW5jdGlvbigpe3BlcmZvcm1hbmNlLm1hcmsoYCR7dH0gZW5kYCkscGVyZm9ybWFuY2UubWVhc3VyZShgJHt0fWAsYCR7dH0gc3RhcnRgLGAke3R9IGVuZGApfX19XSl9KTs=",
  63. {"status":false}
  64. ],
  65. [
  66. "isomorphic-git.min.js_0.70.0",
  67. "IWZ1bmN0aW9uKHQsZSl7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW10sZSk6Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMuZ2l0PWUoKTp0LmdpdD1lKCl9KHNlbGYsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gcihuKXtpZihlW25dKXJldHVybiBlW25dLmV4cG9ydHM7dmFyIGk9ZVtuXT17aTpuLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIHRbbl0uY2FsbChpLmV4cG9ydHMsaSxpLmV4cG9ydHMsciksaS5sPSEwLGkuZXhwb3J0c31yZXR1cm4gci5tPXQsci5jPWUsci5kPWZ1bmN0aW9uKHQsZSxuKXtyLm8odCxlKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7ZW51bWVyYWJsZTohMCxnZXQ6bn0pfSxyLnI9ZnVuY3Rpb24odCl7InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sci50PWZ1bmN0aW9uKHQsZSl7aWYoMSZlJiYodD1yKHQpKSw4JmUpcmV0dXJuIHQ7aWYoNCZlJiYib2JqZWN0Ij09dHlwZW9mIHQmJnQmJnQuX19lc01vZHVsZSlyZXR1cm4gdDt2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpO2lmKHIucihuKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6dH0pLDImZSYmInN0cmluZyIhPXR5cGVvZiB0KWZvcih2YXIgaSBpbiB0KXIuZChuLGksZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19LmJpbmQobnVsbCxpKSk7cmV0dXJuIG59LHIubj1mdW5jdGlvbih0KXt2YXIgZT10JiZ0Ll9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gdC5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiB0fTtyZXR1cm4gci5kKGUsImEiLGUpLGV9LHIubz1mdW5jdGlvbih0LGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKX0sci5wPSIiLHIoci5zPTEzMyl9KFtmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSksci5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KTtjb25zdCBuPXtGaWxlUmVhZEVycm9yOidDb3VsZCBub3QgcmVhZCBmaWxlICJ7IGZpbGVwYXRoIH0iLicsTWlzc2luZ1JlcXVpcmVkUGFyYW1ldGVyRXJyb3I6J1RoZSBmdW5jdGlvbiAieyBmdW5jdGlvbiB9IiByZXF1aXJlcyBhICJ7IHBhcmFtZXRlciB9IiBwYXJhbWV0ZXIgYnV0IG5vbmUgd2FzIHByb3ZpZGVkLicsSW52YWxpZFJlZk5hbWVFcnJvcjonRmFpbGVkIHRvIHsgdmVyYiB9IHsgbm91biB9ICJ7IHJlZiB9IiBiZWNhdXNlIHRoYXQgbmFtZSB3b3VsZCBub3QgYmUgYSB2YWxpZCBnaXQgcmVmZXJlbmNlLiBBIHZhbGlkIGFsdGVybmF0aXZlIHdvdWxkIGJlICJ7IHN1Z2dlc3Rpb24gfSIuJyxJbnZhbGlkUGFyYW1ldGVyQ29tYmluYXRpb25FcnJvcjonVGhlIGZ1bmN0aW9uICJ7IGZ1bmN0aW9uIH0iIGRvZXNuXCd0IHRha2UgdGhlc2UgcGFyYW1ldGVycyBzaW11bHRhbmVvdXNseTogeyBwYXJhbWV0ZXJzIH0nLFJlZkV4aXN0c0Vycm9yOidGYWlsZWQgdG8gY3JlYXRlIHsgbm91biB9ICJ7IHJlZiB9IiBiZWNhdXNlIHsgbm91biB9ICJ7IHJlZiB9IiBhbHJlYWR5IGV4aXN0cy4nLFJlZk5vdEV4aXN0c0Vycm9yOidGYWlsZWQgdG8geyB2ZXJiIH0geyBub3VuIH0gInsgcmVmIH0iIGJlY2F1c2UgeyBub3VuIH0gInsgcmVmIH0iIGRvZXMgbm90IGV4aXN0cy4nLEJyYW5jaERlbGV0ZUVycm9yOidGYWlsZWQgdG8gZGVsZXRlIGJyYW5jaCAieyByZWYgfSIgYmVjYXVzZSBicmFuY2ggInsgcmVmIH0iIGNoZWNrZWQgb3V0IG5vdy4nLE5vSGVhZENvbW1pdEVycm9yOidGYWlsZWQgdG8gY3JlYXRlIHsgbm91biB9ICJ7IHJlZiB9IiBiZWNhdXNlIHRoZSBIRUFEIHJlZiBjb3VsZCBub3QgYmUgcmVzb2x2ZWQgdG8gYSBjb21taXQuJyxDb21taXROb3RGZXRjaGVkRXJyb3I6J0ZhaWxlZCB0byBjaGVja291dCAieyByZWYgfSIgYmVjYXVzZSBjb21taXQgeyBvaWQgfSBpcyBub3QgYXZhaWxhYmxlIGxvY2FsbHkuIERvIGEgZ2l0IGZldGNoIHRvIG1ha2UgdGhlIGJyYW5jaCBhdmFpbGFibGUgbG9jYWxseS4nLE9iamVjdFR5cGVVbmtub3duRmFpbDonT2JqZWN0IHsgb2lkIH0gaGFzIHVua25vd24gdHlwZSAieyB0eXBlIH0iLicsT2JqZWN0VHlwZUFzc2VydGlvbkZhaWw6Ik9iamVjdCB7IG9pZCB9IHdhcyBhbnRpY2lwYXRlZCB0byBiZSBhIHsgZXhwZWN0ZWQgfSBidXQgaXQgaXMgYSB7IHR5cGUgfS4gVGhpcyBpcyBwcm9iYWJseSBhIGJ1ZyBkZWVwIGluIGlzb21vcnBoaWMtZ2l0ISIsT2JqZWN0VHlwZUFzc2VydGlvbkluVHJlZUZhaWw6J09iamVjdCB7IG9pZCB9IGluIHRyZWUgZm9yICJ7IGVudHJ5cGF0aCB9IiB3YXMgYW4gdW5leHBlY3RlZCBvYmplY3QgdHlwZSAieyB0eXBlIH0iLicsT2JqZWN0VHlwZUFzc2VydGlvbkluUmVmRmFpbDoneyByZWYgfSBpcyBub3QgcG9pbnRpbmcgdG8gYSAieyBleHBlY3RlZCB9IiBvYmplY3QgYnV0IGEgInsgdHlwZSB9IiBvYmplY3QuJyxPYmplY3RUeXBlQXNzZXJ0aW9uSW5QYXRoRmFpbDonRm91bmQgYSBibG9iIHsgb2lkIH0gaW4gdGhlIHBhdGggInsgcGF0aCB9IiB3aGVyZSBhIHRyZWUgd2FzIGV4cGVjdGVkLicsTWlzc2luZ0F1dGhvckVycm9yOiJBdXRob3IgbmFtZSBhbmQgZW1haWwgbXVzdCBiZSBzcGVjaWZpZWQgYXMgYW4gYXJndW1lbnQgb3IgaW4gdGhlIC5naXQvY29uZmlnIGZpbGUuIixNaXNzaW5nQ29tbWl0dGVyRXJyb3I6IkNvbW1pdHRlciBuYW1lIGFuZCBlbWFpbCBtdXN0IGJlIHNwZWNpZmllZCBpZiBhIGNvbW1pdHRlciBvYmplY3QgaXMgcGFzc2VkLiIsTWlzc2luZ1RhZ2dlckVycm9yOiJUYWdnZXIgbmFtZSBhbmQgZW1haWwgbXVzdCBiZSBzcGVjaWZpZWQgYXMgYW4gYXJndW1lbnQgb3IgaW4gdGhlIC5naXQvY29uZmlnIGZpbGUuIixHaXRSb290Tm90Rm91bmRFcnJvcjoiVW5hYmxlIHRvIGZpbmQgZ2l0IHJvb3QgZm9yIHsgZmlsZXBhdGggfS4iLFVucGFyc2VhYmxlU2VydmVyUmVzcG9uc2VGYWlsOidVbnBhcnNhYmxlIHJlc3BvbnNlIGZyb20gc2VydmVyISBFeHBlY3RlZCAidW5wYWNrIG9rIiBvciAidW5wYWNrIFtlcnJvciBtZXNzYWdlXSIgYnV0IHJlY2VpdmVkICJ7IGxpbmUgfSIuJyxJbnZhbGlkRGVwdGhQYXJhbWV0ZXJFcnJvcjoiSW52YWxpZCB2YWx1ZSBmb3IgZGVwdGggcGFyYW1ldGVyOiB7IGRlcHRoIH0iLFJlbW90ZURvZXNOb3RTdXBwb3J0U2hhbGxvd0ZhaWw6IlJlbW90ZSBkb2VzIG5vdCBzdXBwb3J0IHNoYWxsb3cgZmV0Y2hlcy4iLFJlbW90ZURvZXNOb3RTdXBwb3J0RGVlcGVuU2luY2VGYWlsOiJSZW1vdGUgZG9lcyBub3Qgc3VwcG9ydCBzaGFsbG93IGZldGNoZXMgYnkgZGF0ZS4iLFJlbW90ZURvZXNOb3RTdXBwb3J0RGVlcGVuTm90RmFpbDoiUmVtb3RlIGRvZXMgbm90IHN1cHBvcnQgc2hhbGxvdyBmZXRjaGVzIGV4Y2x1ZGluZyBjb21taXRzIHJlYWNoYWJsZSBieSByZWZzLiIsUmVtb3RlRG9lc05vdFN1cHBvcnREZWVwZW5SZWxhdGl2ZUZhaWw6IlJlbW90ZSBkb2VzIG5vdCBzdXBwb3J0IHNoYWxsb3cgZmV0Y2hlcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBzaGFsbG93IGRlcHRoLiIsUmVtb3RlRG9lc05vdFN1cHBvcnRTbWFydEhUVFA6J1JlbW90ZSBkb2VzIG5vdCBzdXBwb3J0IHRoZSAic21hcnQiIEhUVFAgcHJvdG9jb2wsIGFuZCBpc29tb3JwaGljLWdpdCBkb2VzIG5vdCBzdXBwb3J0IHRoZSAiZHVtYiIgSFRUUCBwcm90b2NvbCwgc28gdGhleSBhcmUgaW5jb21wYXRpYmxlLicsQ29ycnVwdFNoYWxsb3dPaWRGYWlsOiJub24tNDAgY2hhcmFjdGVyIHNoYWxsb3cgb2lkOiB7IG9pZCB9IixGYXN0Rm9yd2FyZEZhaWw6IkEgc2ltcGxlIGZhc3QtZm9yd2FyZCBtZXJnZSB3YXMgbm90IHBvc3NpYmxlLiIsTWVyZ2VOb3RTdXBwb3J0ZWRGYWlsOiJNZXJnZXMgd2l0aCBjb25mbGljdHMgYXJlIG5vdCBzdXBwb3J0ZWQgeWV0LiIsRGlyZWN0b3J5U2VwYXJhdG9yc0Vycm9yOiciZmlsZXBhdGgiIHBhcmFtZXRlciBzaG91bGQgbm90IGluY2x1ZGUgbGVhZGluZyBvciB0cmFpbGluZyBkaXJlY3Rvcnkgc2VwYXJhdG9ycyBiZWNhdXNlIHRoZXNlIGNhbiBjYXVzZSBwcm9ibGVtcyBvbiBzb21lIHBsYXRmb3JtcycsUmVzb2x2ZVRyZWVFcnJvcjoiQ291bGQgbm90IHJlc29sdmUgeyBvaWQgfSB0byBhIHRyZWUuIixSZXNvbHZlQ29tbWl0RXJyb3I6IkNvdWxkIG5vdCByZXNvbHZlIHsgb2lkIH0gdG8gYSBjb21taXQuIixEaXJlY3RvcnlJc0FGaWxlRXJyb3I6J1VuYWJsZSB0byByZWFkICJ7IG9pZCB9OnsgZmlsZXBhdGggfSIgYmVjYXVzZSBlbmNvdW50ZXJlZCBhIGZpbGUgd2hlcmUgYSBkaXJlY3Rvcnkgd2FzIGV4cGVjdGVkLicsVHJlZU9yQmxvYk5vdEZvdW5kRXJyb3I6J05vIGZpbGUgb3IgZGlyZWN0b3J5IGZvdW5kIGF0ICJ7IG9pZCB9OnsgZmlsZXBhdGggfSIuJyxOb3RJbXBsZW1lbnRlZEZhaWw6IlRPRE86IHsgdGhpbmcgfSBzdGlsbCBuZWVkcyB0byBiZSBpbXBsZW1lbnRlZCEiLFJlYWRPYmplY3RGYWlsOiJGYWlsZWQgdG8gcmVhZCBnaXQgb2JqZWN0IHdpdGggb2lkIHsgb2lkIH0iLE5vdEFuT2lkRmFpbDonRXhwZWN0ZWQgYSA0MC1jaGFyIGhleCBvYmplY3QgaWQgYnV0IHNhdyAieyB2YWx1ZSB9Ii4nLE5vUmVmc3BlY0NvbmZpZ3VyZWRFcnJvcjonQ291bGQgbm90IGZpbmQgYSBmZXRjaCByZWZzcGVjIGZvciByZW1vdGUgInsgcmVtb3RlIH0iLlxcbk1ha2Ugc3VyZSB0aGUgY29uZmlnIGZpbGUgaGFzIGFuIGVudHJ5IGxpa2UgdGhlIGZvbGxvd2luZzpcXG5bcmVtb3RlICJ7IHJlbW90ZSB9Il1cXG5mZXRjaCA9ICtyZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qJyxNaXNtYXRjaFJlZlZhbHVlRXJyb3I6J1Byb3ZpZGVkIG9sZFZhbHVlIGRvZXNuXFxcJ3QgbWF0Y2ggdGhlIGFjdHVhbCB2YWx1ZSBvZiAieyByZWYgfSIuJyxSZXNvbHZlUmVmRXJyb3I6J0NvdWxkIG5vdCByZXNvbHZlIHJlZmVyZW5jZSAieyByZWYgfSIuJyxFeHBhbmRSZWZFcnJvcjonQ291bGQgbm90IGV4cGFuZCByZWZlcmVuY2UgInsgcmVmIH0iLicsRW1wdHlTZXJ2ZXJSZXNwb25zZUZhaWw6IkVtcHR5IHJlc3BvbnNlIGZyb20gZ2l0IHNlcnZlci4iLEFzc2VydFNlcnZlclJlc3BvbnNlRmFpbDonRXhwZWN0ZWQgInsgZXhwZWN0ZWQgfSIgYnV0IGdvdCAieyBhY3R1YWwgfSIuJyxIVFRQRXJyb3I6IkhUVFAgRXJyb3I6IHsgc3RhdHVzQ29kZSB9IHsgc3RhdHVzTWVzc2FnZSB9IixSZW1vdGVVcmxQYXJzZUVycm9yOidDYW5ub3QgcGFyc2UgcmVtb3RlIFVSTDogInsgdXJsIH0iJyxVbmtub3duVHJhbnNwb3J0RXJyb3I6J0dpdCByZW1vdGUgInsgdXJsIH0iIHVzZXMgYW4gdW5yZWNvZ25pemVkIHRyYW5zcG9ydCBwcm90b2NvbDogInsgdHJhbnNwb3J0IH0iJyxBY3F1aXJlTG9ja0ZpbGVGYWlsOidVbmFibGUgdG8gYWNxdWlyZSBsb2NrZmlsZSAieyBmaWxlbmFtZSB9Ii4gRXhoYXVzdGVkIHRyaWVzLicsRG91YmxlUmVsZWFzZUxvY2tGaWxlRmFpbDonQ2Fubm90IGRvdWJsZS1yZWxlYXNlIGxvY2tmaWxlICJ7IGZpbGVuYW1lIH0iLicsSW50ZXJuYWxGYWlsOiJBbiBpbnRlcm5hbCBlcnJvciBjYXVzZWQgdGhpcyBjb21tYW5kIHRvIGZhaWwuIFBsZWFzZSBmaWxlIGEgYnVnIHJlcG9ydCBhdCBodHRwczovL2dpdGh1Yi5jb20vaXNvbW9ycGhpYy1naXQvaXNvbW9ycGhpYy1naXQvaXNzdWVzIHdpdGggdGhpcyBlcnJvciBtZXNzYWdlOiB7IG1lc3NhZ2UgfSIsVW5rbm93bk9hdXRoMkZvcm1hdDoiSSBkbyBub3Qga25vdyBob3cgeyBjb21wYW55IH0gZXhwZWN0cyBpdHMgQmFzaWMgQXV0aCBoZWFkZXJzIHRvIGJlIGZvcm1hdHRlZCBmb3IgT0F1dGgyIHVzYWdlLiBJZiB5b3UgZG8sIHlvdSBjYW4gdXNlIHRoZSByZWd1bGFyIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBwYXJhbWV0ZXJzIHRvIHNldCB0aGUgYmFzaWMgYXV0aCBoZWFkZXIgeW91cnNlbGYuIixNaXNzaW5nUGFzc3dvcmRUb2tlbkVycm9yOiJNaXNzaW5nIHBhc3N3b3JkIG9yIHRva2VuIixNaXNzaW5nVXNlcm5hbWVFcnJvcjoiTWlzc2luZyB1c2VybmFtZSIsTWl4UGFzc3dvcmRUb2tlbkVycm9yOidDYW5ub3QgbWl4ICJwYXNzd29yZCIgd2l0aCAidG9rZW4iJyxNaXhVc2VybmFtZVBhc3N3b3JkVG9rZW5FcnJvcjonQ2Fubm90IG1peCAidXNlcm5hbWUiIGFuZCAicGFzc3dvcmQiIHdpdGggInRva2VuIicsTWlzc2luZ1Rva2VuRXJyb3I6Ik1pc3NpbmcgdG9rZW4iLE1peFVzZXJuYW1lT2F1dGgyZm9ybWF0TWlzc2luZ1Rva2VuRXJyb3I6J0Nhbm5vdCBtaXggInVzZXJuYW1lIiB3aXRoICJvYXV0aDJmb3JtYXQiLiBNaXNzaW5nIHRva2VuLicsTWl4UGFzc3dvcmRPYXV0aDJmb3JtYXRNaXNzaW5nVG9rZW5FcnJvcjonQ2Fubm90IG1peCAicGFzc3dvcmQiIHdpdGggIm9hdXRoMmZvcm1hdCIuIE1pc3NpbmcgdG9rZW4uJyxNaXhVc2VybmFtZVBhc3N3b3JkT2F1dGgyZm9ybWF0TWlzc2luZ1Rva2VuRXJyb3I6J0Nhbm5vdCBtaXggInVzZXJuYW1lIiBhbmQgInBhc3N3b3JkIiB3aXRoICJvYXV0aDJmb3JtYXQiLiBNaXNzaW5nIHRva2VuLicsTWl4VXNlcm5hbWVPYXV0aDJmb3JtYXRUb2tlbkVycm9yOidDYW5ub3QgbWl4ICJ1c2VybmFtZSIgd2l0aCAib2F1dGgyZm9ybWF0IiBhbmQgInRva2VuIicsTWl4UGFzc3dvcmRPYXV0aDJmb3JtYXRUb2tlbkVycm9yOidDYW5ub3QgbWl4ICJwYXNzd29yZCIgd2l0aCAib2F1dGgyZm9ybWF0IiBhbmQgInRva2VuIicsTWl4VXNlcm5hbWVQYXNzd29yZE9hdXRoMmZvcm1hdFRva2VuRXJyb3I6J0Nhbm5vdCBtaXggInVzZXJuYW1lIiBhbmQgInBhc3N3b3JkIiB3aXRoICJvYXV0aDJmb3JtYXQiIGFuZCAidG9rZW4iJyxNYXhTZWFyY2hEZXB0aEV4Y2VlZGVkOiJNYXhpbXVtIHNlYXJjaCBkZXB0aCBvZiB7IGRlcHRoIH0gZXhjZWVkZWQuIixQdXNoUmVqZWN0ZWROb25GYXN0Rm9yd2FyZDonUHVzaCByZWplY3RlZCBiZWNhdXNlIGl0IHdhcyBub3QgYSBzaW1wbGUgZmFzdC1mb3J3YXJkLiBVc2UgImZvcmNlOiB0cnVlIiB0byBvdmVycmlkZS4nLFB1c2hSZWplY3RlZFRhZ0V4aXN0czonUHVzaCByZWplY3RlZCBiZWNhdXNlIHRhZyBhbHJlYWR5IGV4aXN0cy4gVXNlICJmb3JjZTogdHJ1ZSIgdG8gb3ZlcnJpZGUuJyxBZGRpbmdSZW1vdGVXb3VsZE92ZXJ3cml0ZTonQWRkaW5nIHJlbW90ZSB7IHJlbW90ZSB9IHdvdWxkIG92ZXJ3cml0ZSB0aGUgZXhpc3RpbmcgcmVtb3RlLiBVc2UgImZvcmNlOiB0cnVlIiB0byBvdmVycmlkZS4nLFBsdWdpblVuZGVmaW5lZDonQSBjb21tYW5kIHJlcXVpcmVkIHRoZSAieyBwbHVnaW4gfSIgcGx1Z2luIGJ1dCBpdCB3YXMgdW5kZWZpbmVkLicsQ29yZU5vdEZvdW5kOidObyBwbHVnaW4gY29yZSB3aXRoIHRoZSBuYW1lICJ7IGNvcmUgfSIgaXMgcmVnaXN0ZXJlZC4nLFBsdWdpblNjaGVtYVZpb2xhdGlvbjonU2NoZW1hIGNoZWNrIGZhaWxlZCBmb3IgInsgcGx1Z2luIH0iIHBsdWdpbjsgbWlzc2luZyB7IG1ldGhvZCB9IG1ldGhvZC4nLFBsdWdpblVucmVjb2duaXplZDonVW5yZWNvZ25pemVkIHBsdWdpbiB0eXBlICJ7IHBsdWdpbiB9IicsQW1iaWd1b3VzU2hvcnRPaWQ6J0ZvdW5kIG11bHRpcGxlIG9pZHMgbWF0Y2hpbmcgInsgc2hvcnQgfSIgKHsgbWF0Y2hlcyB9KS4gVXNlIGEgbG9uZ2VyIGFiYnJldmlhdGlvbiBsZW5ndGggdG8gZGlzYW1iaWd1YXRlIHRoZW0uJyxTaG9ydE9pZE5vdEZvdW5kOidDb3VsZCBub3QgZmluZCBhbiBvYmplY3QgbWF0Y2hpbmcgInsgc2hvcnQgfSIuJyxDaGVja291dENvbmZsaWN0RXJyb3I6IllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGNoZWNrb3V0OiB7IGZpbGVwYXRocyB9In0saT17RmlsZVJlYWRFcnJvcjoiRmlsZVJlYWRFcnJvciIsTWlzc2luZ1JlcXVpcmVkUGFyYW1ldGVyRXJyb3I6Ik1pc3NpbmdSZXF1aXJlZFBhcmFtZXRlckVycm9yIixJbnZhbGlkUmVmTmFtZUVycm9yOiJJbnZhbGlkUmVmTmFtZUVycm9yIixJbnZhbGlkUGFyYW1ldGVyQ29tYmluYXRpb25FcnJvcjoiSW52YWxpZFBhcmFtZXRlckNvbWJpbmF0aW9uRXJyb3IiLFJlZkV4aXN0c0Vycm9yOiJSZWZFeGlzdHNFcnJvciIsUmVmTm90RXhpc3RzRXJyb3I6IlJlZk5vdEV4aXN0c0Vycm9yIixCcmFuY2hEZWxldGVFcnJvcjoiQnJhbmNoRGVsZXRlRXJyb3IiLE5vSGVhZENvbW1pdEVycm9yOiJOb0hlYWRDb21taXRFcnJvciIsQ29tbWl0Tm90RmV0Y2hlZEVycm9yOiJDb21taXROb3RGZXRjaGVkRXJyb3IiLE9iamVjdFR5cGVVbmtub3duRmFpbDoiT2JqZWN0VHlwZVVua25vd25GYWlsIixPYmplY3RUeXBlQXNzZXJ0aW9uRmFpbDoiT2JqZWN0VHlwZUFzc2VydGlvbkZhaWwiLE9iamVjdFR5cGVBc3NlcnRpb25JblRyZWVGYWlsOiJPYmplY3RUeXBlQXNzZXJ0aW9uSW5UcmVlRmFpbCIsT2JqZWN0VHlwZUFzc2VydGlvbkluUmVmRmFpbDoiT2JqZWN0VHlwZUFzc2VydGlvbkluUmVmRmFpbCIsT2JqZWN0VHlwZUFzc2VydGlvbkluUGF0aEZhaWw6Ik9iamVjdFR5cGVBc3NlcnRpb25JblBhdGhGYWlsIixNaXNzaW5nQXV0aG9yRXJyb3I6Ik1pc3NpbmdBdXRob3JFcnJvciIsTWlzc2luZ0NvbW1pdHRlckVycm9yOiJNaXNzaW5nQ29tbWl0dGVyRXJyb3IiLE1pc3NpbmdUYWdnZXJFcnJvcjoiTWlzc2luZ1RhZ2dlckVycm9yIixHaXRSb290Tm90Rm91bmRFcnJvcjoiR2l0Um9vdE5vdEZvdW5kRXJyb3IiLFVucGFyc2VhYmxlU2VydmVyUmVzcG9uc2VGYWlsOiJVbnBhcnNlYWJsZVNlcnZlclJlc3BvbnNlRmFpbCIsSW52YWxpZERlcHRoUGFyYW1ldGVyRXJyb3I6IkludmFsaWREZXB0aFBhcmFtZXRlckVycm9yIixSZW1vdGVEb2VzTm90U3VwcG9ydFNoYWxsb3dGYWlsOiJSZW1vdGVEb2VzTm90U3VwcG9ydFNoYWxsb3dGYWlsIixSZW1vdGVEb2VzTm90U3VwcG9ydERlZXBlblNpbmNlRmFpbDoiUmVtb3RlRG9lc05vdFN1cHBvcnREZWVwZW5TaW5jZUZhaWwiLFJlbW90ZURvZXNOb3RTdXBwb3J0RGVlcGVuTm90RmFpbDoiUmVtb3RlRG9lc05vdFN1cHBvcnREZWVwZW5Ob3RGYWlsIixSZW1vdGVEb2VzTm90U3VwcG9ydERlZXBlblJlbGF0aXZlRmFpbDoiUmVtb3RlRG9lc05vdFN1cHBvcnREZWVwZW5SZWxhdGl2ZUZhaWwiLFJlbW90ZURvZXNOb3RTdXBwb3J0U21hcnRIVFRQOiJSZW1vdGVEb2VzTm90U3VwcG9ydFNtYXJ0SFRUUCIsQ29ycnVwdFNoYWxsb3dPaWRGYWlsOiJDb3JydXB0U2hhbGxvd09pZEZhaWwiLEZhc3RGb3J3YXJkRmFpbDoiRmFzdEZvcndhcmRGYWlsIixNZXJnZU5vdFN1cHBvcnRlZEZhaWw6Ik1lcmdlTm90U3VwcG9ydGVkRmFpbCIsRGlyZWN0b3J5U2VwYXJhdG9yc0Vycm9yOiJEaXJlY3RvcnlTZXBhcmF0b3JzRXJyb3IiLFJlc29sdmVUcmVlRXJyb3I6IlJlc29sdmVUcmVlRXJyb3IiLFJlc29sdmVDb21taXRFcnJvcjoiUmVzb2x2ZUNvbW1pdEVycm9yIixEaXJlY3RvcnlJc0FGaWxlRXJyb3I6IkRpcmVjdG9yeUlzQUZpbGVFcnJvciIsVHJlZU9yQmxvYk5vdEZvdW5kRXJyb3I6IlRyZWVPckJsb2JOb3RGb3VuZEVycm9yIixOb3RJbXBsZW1lbnRlZEZhaWw6Ik5vdEltcGxlbWVudGVkRmFpbCIsUmVhZE9iamVjdEZhaWw6IlJlYWRPYmplY3RGYWlsIixOb3RBbk9pZEZhaWw6Ik5vdEFuT2lkRmFpbCIsTm9SZWZzcGVjQ29uZmlndXJlZEVycm9yOiJOb1JlZnNwZWNDb25maWd1cmVkRXJyb3IiLE1pc21hdGNoUmVmVmFsdWVFcnJvcjoiTWlzbWF0Y2hSZWZWYWx1ZUVycm9yIixSZXNvbHZlUmVmRXJyb3I6IlJlc29sdmVSZWZFcnJvciIsRXhwYW5kUmVmRXJyb3I6IkV4cGFuZFJlZkVycm9yIixFbXB0eVNlcnZlclJlc3BvbnNlRmFpbDoiRW1wdHlTZXJ2ZXJSZXNwb25zZUZhaWwiLEFzc2VydFNlcnZlclJlc3BvbnNlRmFpbDoiQXNzZXJ0U2VydmVyUmVzcG9uc2VGYWlsIixIVFRQRXJyb3I6IkhUVFBFcnJvciIsUmVtb3RlVXJsUGFyc2VFcnJvcjoiUmVtb3RlVXJsUGFyc2VFcnJvciIsVW5rbm93blRyYW5zcG9ydEVycm9yOiJVbmtub3duVHJhbnNwb3J0RXJyb3IiLEFjcXVpcmVMb2NrRmlsZUZhaWw6IkFjcXVpcmVMb2NrRmlsZUZhaWwiLERvdWJsZVJlbGVhc2VMb2NrRmlsZUZhaWw6IkRvdWJsZVJlbGVhc2VMb2NrRmlsZUZhaWwiLEludGVybmFsRmFpbDoiSW50ZXJuYWxGYWlsIixVbmtub3duT2F1dGgyRm9ybWF0OiJVbmtub3duT2F1dGgyRm9ybWF0IixNaXNzaW5nUGFzc3dvcmRUb2tlbkVycm9yOiJNaXNzaW5nUGFzc3dvcmRUb2tlbkVycm9yIixNaXNzaW5nVXNlcm5hbWVFcnJvcjoiTWlzc2luZ1VzZXJuYW1lRXJyb3IiLE1peFBhc3N3b3JkVG9rZW5FcnJvcjoiTWl4UGFzc3dvcmRUb2tlbkVycm9yIixNaXhVc2VybmFtZVBhc3N3b3JkVG9rZW5FcnJvcjoiTWl4VXNlcm5hbWVQYXNzd29yZFRva2VuRXJyb3IiLE1pc3NpbmdUb2tlbkVycm9yOiJNaXNzaW5nVG9rZW5FcnJvciIsTWl4VXNlcm5hbWVPYXV0aDJmb3JtYXRNaXNzaW5nVG9rZW5FcnJvcjoiTWl4VXNlcm5hbWVPYXV0aDJmb3JtYXRNaXNzaW5nVG9rZW5FcnJvciIsTWl4UGFzc3dvcmRPYXV0aDJmb3JtYXRNaXNzaW5nVG9rZW5FcnJvcjoiTWl4UGFzc3dvcmRPYXV0aDJmb3JtYXRNaXNzaW5nVG9rZW5FcnJvciIsTWl4VXNlcm5hbWVQYXNzd29yZE9hdXRoMmZvcm1hdE1pc3NpbmdUb2tlbkVycm9yOiJNaXhVc2VybmFtZVBhc3N3b3JkT2F1dGgyZm9ybWF0TWlzc2luZ1Rva2VuRXJyb3IiLE1peFVzZXJuYW1lT2F1dGgyZm9ybWF0VG9rZW5FcnJvcjoiTWl4VXNlcm5hbWVPYXV0aDJmb3JtYXRUb2tlbkVycm9yIixNaXhQYXNzd29yZE9hdXRoMmZvcm1hdFRva2VuRXJyb3I6Ik1peFBhc3N3b3JkT2F1dGgyZm9ybWF0VG9rZW5FcnJvciIsTWl4VXNlcm5hbWVQYXNzd29yZE9hdXRoMmZvcm1hdFRva2VuRXJyb3I6Ik1peFVzZXJuYW1lUGFzc3dvcmRPYXV0aDJmb3JtYXRUb2tlbkVycm9yIixNYXhTZWFyY2hEZXB0aEV4Y2VlZGVkOiJNYXhTZWFyY2hEZXB0aEV4Y2VlZGVkIixQdXNoUmVqZWN0ZWROb25GYXN0Rm9yd2FyZDoiUHVzaFJlamVjdGVkTm9uRmFzdEZvcndhcmQiLFB1c2hSZWplY3RlZFRhZ0V4aXN0czoiUHVzaFJlamVjdGVkVGFnRXhpc3RzIixBZGRpbmdSZW1vdGVXb3VsZE92ZXJ3cml0ZToiQWRkaW5nUmVtb3RlV291bGRPdmVyd3JpdGUiLFBsdWdpblVuZGVmaW5lZDoiUGx1Z2luVW5kZWZpbmVkIixDb3JlTm90Rm91bmQ6IkNvcmVOb3RGb3VuZCIsUGx1Z2luU2NoZW1hVmlvbGF0aW9uOiJQbHVnaW5TY2hlbWFWaW9sYXRpb24iLFBsdWdpblVucmVjb2duaXplZDoiUGx1Z2luVW5yZWNvZ25pemVkIixBbWJpZ3VvdXNTaG9ydE9pZDoiQW1iaWd1b3VzU2hvcnRPaWQiLFNob3J0T2lkTm90Rm91bmQ6IlNob3J0T2lkTm90Rm91bmQiLENoZWNrb3V0Q29uZmxpY3RFcnJvcjoiQ2hlY2tvdXRDb25mbGljdEVycm9yIn07Y2xhc3MgbyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKSx0aGlzLm5hbWU9dCx0aGlzLmNvZGU9dCx0aGlzLmRhdGE9ZSx0aGlzLm1lc3NhZ2U9ZnVuY3Rpb24odCxlKXtsZXQgcj10O2Zvcihjb25zdCB0IG9mIE9iamVjdC5rZXlzKGUpKXtsZXQgbjtuPUFycmF5LmlzQXJyYXkoZVt0XSk/ZVt0XS5qb2luKCIsICIpOlN0cmluZyhlW3RdKSxyPXIucmVwbGFjZShuZXcgUmVnRXhwKGB7ICR7dH0gfWAsImciKSxuKX1yZXR1cm4gcn0oblt0XSxlfHx7fSksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcil9dG9KU09OKCl7cmV0dXJue2NvZGU6dGhpcy5jb2RlLGRhdGE6dGhpcy5kYXRhLGNhbGxlcjp0aGlzLmNhbGxlcixtZXNzYWdlOnRoaXMubWVzc2FnZX19dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5zdGFjay50b1N0cmluZygpfX19LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKHQpe3IuZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBofSk7dmFyIG49cigxNyksaT1yLm4obiksbz1yKDApLGE9cigzMykscz1yKDIzKSx1PXIoNjQpO2Z1bmN0aW9uIGModCxlLHIsbixpLG8sYSl7dHJ5e3ZhciBzPXRbb10oYSksdT1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UodSk6UHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4obixpKX1mdW5jdGlvbiBmKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4saSl7dmFyIG89dC5hcHBseShlLHIpO2Z1bmN0aW9uIGEodCl7YyhvLG4saSxhLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7YyhvLG4saSxhLHMsInRocm93Iix0KX1hKHZvaWQgMCl9KX19Y29uc3QgbD1uZXcgTWFwLGQ9bmV3IFdlYWtNYXA7Y2xhc3MgaHtjb25zdHJ1Y3Rvcih0KXtpZih2b2lkIDA9PT10KXRocm93IG5ldyBvLmIoby5hLlBsdWdpblVuZGVmaW5lZCx7cGx1Z2luOiJmcyJ9KTtyZXR1cm4gZC5oYXModCk/ZC5nZXQodCk6ZC5oYXModC5fb3JpZ2luYWxfdW53cmFwcGVkX2ZzKT9kLmdldCh0Ll9vcmlnaW5hbF91bndyYXBwZWRfZnMpOnZvaWQgMCE9PXQuX29yaWdpbmFsX3Vud3JhcHBlZF9mcz90OihPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsInByb21pc2VzIikmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwicHJvbWlzZXMiKS5lbnVtZXJhYmxlPyh0aGlzLl9yZWFkRmlsZT10LnByb21pc2VzLnJlYWRGaWxlLmJpbmQodC5wcm9taXNlcyksdGhpcy5fd3JpdGVGaWxlPXQucHJvbWlzZXMud3JpdGVGaWxlLmJpbmQodC5wcm9taXNlcyksdGhpcy5fbWtkaXI9dC5wcm9taXNlcy5ta2Rpci5iaW5kKHQucHJvbWlzZXMpLHRoaXMuX3JtZGlyPXQucHJvbWlzZXMucm1kaXIuYmluZCh0LnByb21pc2VzKSx0aGlzLl91bmxpbms9dC5wcm9taXNlcy51bmxpbmsuYmluZCh0LnByb21pc2VzKSx0aGlzLl9zdGF0PXQucHJvbWlzZXMuc3RhdC5iaW5kKHQucHJvbWlzZXMpLHRoaXMuX2xzdGF0PXQucHJvbWlzZXMubHN0YXQuYmluZCh0LnByb21pc2VzKSx0aGlzLl9yZWFkZGlyPXQucHJvbWlzZXMucmVhZGRpci5iaW5kKHQucHJvbWlzZXMpLHRoaXMuX3JlYWRsaW5rPXQucHJvbWlzZXMucmVhZGxpbmsuYmluZCh0LnByb21pc2VzKSx0aGlzLl9zeW1saW5rPXQucHJvbWlzZXMuc3ltbGluay5iaW5kKHQucHJvbWlzZXMpKToodGhpcy5fcmVhZEZpbGU9aSgpKHQucmVhZEZpbGUuYmluZCh0KSksdGhpcy5fd3JpdGVGaWxlPWkoKSh0LndyaXRlRmlsZS5iaW5kKHQpKSx0aGlzLl9ta2Rpcj1pKCkodC5ta2Rpci5iaW5kKHQpKSx0aGlzLl9ybWRpcj1pKCkodC5ybWRpci5iaW5kKHQpKSx0aGlzLl91bmxpbms9aSgpKHQudW5saW5rLmJpbmQodCkpLHRoaXMuX3N0YXQ9aSgpKHQuc3RhdC5iaW5kKHQpKSx0aGlzLl9sc3RhdD1pKCkodC5sc3RhdC5iaW5kKHQpKSx0aGlzLl9yZWFkZGlyPWkoKSh0LnJlYWRkaXIuYmluZCh0KSksdGhpcy5fcmVhZGxpbms9aSgpKHQucmVhZGxpbmsuYmluZCh0KSksdGhpcy5fc3ltbGluaz1pKCkodC5zeW1saW5rLmJpbmQodCkpKSx0aGlzLl9vcmlnaW5hbF91bndyYXBwZWRfZnM9dCx2b2lkIGQuc2V0KHQsdGhpcykpfWV4aXN0cyh0LGU9e30pe3ZhciByPXRoaXM7cmV0dXJuIGYoZnVuY3Rpb24qKCl7dHJ5e3JldHVybiB5aWVsZCByLl9zdGF0KHQpLCEwfWNhdGNoKHQpe2lmKCJFTk9FTlQiPT09dC5jb2RlfHwiRU5PVERJUiI9PT10LmNvZGUpcmV0dXJuITE7dGhyb3cgY29uc29sZS5sb2coJ1VuaGFuZGxlZCBlcnJvciBpbiAiRmlsZVN5c3RlbS5leGlzdHMoKSIgZnVuY3Rpb24nLHQpLHR9fSkoKX1yZWFkKGUscj17fSl7dmFyIG49dGhpcztyZXR1cm4gZihmdW5jdGlvbiooKXt0cnl7bGV0IGk9eWllbGQgbi5fcmVhZEZpbGUoZSxyKTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGkmJihpPXQuZnJvbShpKSksaX1jYXRjaCh0KXtyZXR1cm4gbnVsbH19KSgpfXdyaXRlKHQsZSxyPXt9KXt2YXIgbj10aGlzO3JldHVybiBmKGZ1bmN0aW9uKigpe3RyeXtyZXR1cm4gdm9pZCh5aWVsZCBuLl93cml0ZUZpbGUodCxlLHIpKX1jYXRjaChpKXt5aWVsZCBuLm1rZGlyKE9iamVjdChzLmEpKHQpKSx5aWVsZCBuLl93cml0ZUZpbGUodCxlLHIpfX0pKCl9bWtkaXIodCxlPSExKXt2YXIgcj10aGlzO3JldHVybiBmKGZ1bmN0aW9uKigpe3RyeXtyZXR1cm4gdm9pZCh5aWVsZCByLl9ta2Rpcih0KSl9Y2F0Y2gobil7aWYobnVsbD09PW4pcmV0dXJuO2lmKCJFRVhJU1QiPT09bi5jb2RlKXJldHVybjtpZihlKXRocm93IG47aWYoIkVOT0VOVCI9PT1uLmNvZGUpe2NvbnN0IGU9T2JqZWN0KHMuYSkodCk7aWYoIi4iPT09ZXx8Ii8iPT09ZXx8ZT09PXQpdGhyb3cgbjt5aWVsZCByLm1rZGlyKGUpLHlpZWxkIHIubWtkaXIodCwhMCl9fX0pKCl9cm0odCl7dmFyIGU9dGhpcztyZXR1cm4gZihmdW5jdGlvbiooKXt0cnl7eWllbGQgZS5fdW5saW5rKHQpfWNhdGNoKHQpe2lmKCJFTk9FTlQiIT09dC5jb2RlKXRocm93IHR9fSkoKX1ybWRpcih0KXt2YXIgZT10aGlzO3JldHVybiBmKGZ1bmN0aW9uKigpe3RyeXt5aWVsZCBlLl9ybWRpcih0KX1jYXRjaCh0KXtpZigiRU5PRU5UIiE9PXQuY29kZSl0aHJvdyB0fX0pKCl9cmVhZGRpcih0KXt2YXIgZT10aGlzO3JldHVybiBmKGZ1bmN0aW9uKigpe3RyeXtjb25zdCByPXlpZWxkIGUuX3JlYWRkaXIodCk7cmV0dXJuIHIuc29ydChhLmEpLHJ9Y2F0Y2godCl7cmV0dXJuIkVOT1RESVIiPT09dC5jb2RlP251bGw6W119fSkoKX1yZWFkZGlyRGVlcCh0KXt2YXIgZT10aGlzO3JldHVybiBmKGZ1bmN0aW9uKigpe2NvbnN0IHI9eWllbGQgZS5fcmVhZGRpcih0KTtyZXR1cm4oeWllbGQgUHJvbWlzZS5hbGwoci5tYXAoZnVuY3Rpb24oKXt2YXIgcj1mKGZ1bmN0aW9uKihyKXtjb25zdCBuPXQrIi8iK3I7cmV0dXJuKHlpZWxkIGUuX3N0YXQobikpLmlzRGlyZWN0b3J5KCk/ZS5yZWFkZGlyRGVlcChuKTpufSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiByLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpKSkucmVkdWNlKCh0LGUpPT50LmNvbmNhdChlKSxbXSl9KSgpfWxzdGF0KHQpe3ZhciBlPXRoaXM7cmV0dXJuIGYoZnVuY3Rpb24qKCl7dHJ5e3JldHVybiB5aWVsZCBlLl9sc3RhdCh0KX1jYXRjaCh0KXtpZigiRU5PRU5UIj09PXQuY29kZSlyZXR1cm4gbnVsbDt0aHJvdyB0fX0pKCl9cmVhZGxpbmsodCxlPXtlbmNvZGluZzoiYnVmZmVyIn0pe3ZhciByPXRoaXM7cmV0dXJuIGYoZnVuY3Rpb24qKCl7dHJ5e3JldHVybiByLl9yZWFkbGluayh0LGUpfWNhdGNoKHQpe2lmKCJFTk9FTlQiPT09dC5jb2RlKXJldHVybiBudWxsO3Rocm93IHR9fSkoKX13cml0ZWxpbmsodCxlKXt2YXIgcj10aGlzO3JldHVybiBmKGZ1bmN0aW9uKigpe3JldHVybiByLl9zeW1saW5rKGUudG9TdHJpbmcoInV0ZjgiKSx0KX0pKCl9bG9jayh0LGU9Myl7dmFyIHI9dGhpcztyZXR1cm4gZihmdW5jdGlvbiooKXtpZihsLmhhcyh0KSlyZXR1cm4gY2xlYXJUaW1lb3V0KGwuZ2V0KHQpKSx2b2lkIGwuZGVsZXRlKHQpO2lmKDA9PT1lKXRocm93IG5ldyBvLmIoby5hLkFjcXVpcmVMb2NrRmlsZUZhaWwse2ZpbGVuYW1lOnR9KTt0cnl7eWllbGQgci5fbWtkaXIoYCR7dH0ubG9ja2ApfWNhdGNoKG4peyJFRVhJU1QiPT09bi5jb2RlJiYoeWllbGQgT2JqZWN0KHUuYSkoMTAwKSx5aWVsZCByLmxvY2sodCxlLTEpKX19KSgpfXVubG9jayh0LGU9NTApe3ZhciByPXRoaXM7cmV0dXJuIGYoZnVuY3Rpb24qKCl7aWYobC5oYXModCkpdGhyb3cgbmV3IG8uYihvLmEuRG91YmxlUmVsZWFzZUxvY2tGaWxlRmFpbCx7ZmlsZW5hbWU6dH0pO2wuc2V0KHQsc2V0VGltZW91dChmKGZ1bmN0aW9uKigpe2wuZGVsZXRlKHQpLHlpZWxkIHIuX3JtZGlyKGAke3R9LmxvY2tgKX0pLGUpKX0pKCl9fX0pLmNhbGwodGhpcyxyKDEwKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJuIHQucmVwbGFjZSgvXC9cLlwvL2csIi8iKS5yZXBsYWNlKC9cL3syLH0vZywiLyIpLnJlcGxhY2UoL15cL1wuJC8sIi8iKS5yZXBsYWNlKC9eXC5cLyQvLCIuIikucmVwbGFjZSgvXlwuXC8vLCIiKS5yZXBsYWNlKC9cL1wuJC8sIiIpLnJlcGxhY2UoLyguKylcLyQvLCIkMSIpLnJlcGxhY2UoL14kLywiLiIpfWZ1bmN0aW9uIGkoLi4udCl7cmV0dXJuIG4odC5tYXAobikuam9pbigiLyIpKX1yLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBpfSksci5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KTt2YXIgbj1yKDApO2NvbnN0IGk9bmV3IGNsYXNzIGV4dGVuZHMgTWFwe3NldCh0LGUpeygodCxlKT0+eyJmcyI9PT10JiZPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsInByb21pc2VzIikmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwicHJvbWlzZXMiKS5lbnVtZXJhYmxlJiYoZT1lLnByb21pc2VzKTtjb25zdCByPXtjcmVkZW50aWFsTWFuYWdlcjpbImZpbGwiLCJhcHByb3ZlZCIsInJlamVjdGVkIl0sZW1pdHRlcjpbImVtaXQiXSxmczpbImxzdGF0IiwibWtkaXIiLCJyZWFkZGlyIiwicmVhZEZpbGUiLCJybWRpciIsInN0YXQiLCJ1bmxpbmsiLCJ3cml0ZUZpbGUiXSxwZ3A6WyJzaWduIiwidmVyaWZ5Il0saHR0cDpbXX07aWYoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLHQpKXRocm93IG5ldyBuLmIobi5hLlBsdWdpblVucmVjb2duaXplZCx7cGx1Z2luOnR9KTtmb3IoY29uc3QgaSBvZiByW3RdKWlmKHZvaWQgMD09PWVbaV0pdGhyb3cgbmV3IG4uYihuLmEuUGx1Z2luU2NoZW1hVmlvbGF0aW9uLHtwbHVnaW46dCxtZXRob2Q6aX0pfSkodCxlKSxzdXBlci5zZXQodCxlKX1nZXQodCl7Y29uc3QgZT1uZXcgU2V0KFsiY3JlZGVudGlhbE1hbmFnZXIiLCJmcyIsInBncCJdKTtpZighc3VwZXIuaGFzKHQpJiZlLmhhcyh0KSl0aHJvdyBuZXcgbi5iKG4uYS5QbHVnaW5VbmRlZmluZWQse3BsdWdpbjp0fSk7cmV0dXJuIHN1cGVyLmdldCh0KX19LG89bmV3IE1hcChbWyJkZWZhdWx0IixpXV0pLGE9e2dldCh0KXtpZihvLmhhcyh0KSlyZXR1cm4gby5nZXQodCk7dGhyb3cgbmV3IG4uYihuLmEuQ29yZU5vdEZvdW5kLHtjb3JlOnR9KX0sY3JlYXRlOnQ9Pm8uaGFzKHQpP28uZ2V0KHQpOihvLnNldCh0LG5ldyBNYXApLG8uZ2V0KHQpKX19LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxKSxpPXIoMCk7Y2xhc3Mgb3tjb25zdHJ1Y3Rvcih0KXtpZih0aGlzLnJlZnM9bmV3IE1hcCx0aGlzLnBhcnNlZENvbmZpZz1bXSx0KXtsZXQgZT1udWxsO3RoaXMucGFyc2VkQ29uZmlnPXQudHJpbSgpLnNwbGl0KCJcbiIpLm1hcCh0PT57aWYoL15ccyojLy50ZXN0KHQpKXJldHVybntsaW5lOnQsY29tbWVudDohMH07Y29uc3Qgcj10LmluZGV4T2YoIiAiKTtpZih0LnN0YXJ0c1dpdGgoIl4iKSl7Y29uc3Qgcj10LnNsaWNlKDEpO3JldHVybiB0aGlzLnJlZnMuc2V0KGUrIl57fSIscikse2xpbmU6dCxyZWY6ZSxwZWVsZWQ6cn19e2NvbnN0IG49dC5zbGljZSgwLHIpO3JldHVybiBlPXQuc2xpY2UocisxKSx0aGlzLnJlZnMuc2V0KGUsbikse2xpbmU6dCxyZWY6ZSxvaWQ6bn19fSl9cmV0dXJuIHRoaXN9c3RhdGljIGZyb20odCl7cmV0dXJuIG5ldyBvKHQpfWRlbGV0ZSh0KXt0aGlzLnBhcnNlZENvbmZpZz10aGlzLnBhcnNlZENvbmZpZy5maWx0ZXIoZT0+ZS5yZWYhPT10KSx0aGlzLnJlZnMuZGVsZXRlKHQpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMucGFyc2VkQ29uZmlnLm1hcCgoe2xpbmU6dH0pPT50KS5qb2luKCJcbiIpKyJcbiJ9fXZhciBhPXIoNjcpO2Z1bmN0aW9uIHModCxlKXtjb25zdCByPXQucmVwbGFjZSgvXF5ce1x9JC8sIiIpLG49ZS5yZXBsYWNlKC9cXlx7XH0kLywiIiksaT0tKHI8bil8fCsocj5uKTtyZXR1cm4gMD09PWk/dC5lbmRzV2l0aCgiXnt9Iik/MTotMTppfXZhciB1PXIoMiksYz1yKDI0KTtmdW5jdGlvbiBmKHQsZSxyLG4saSxvLGEpe3RyeXt2YXIgcz10W29dKGEpLHU9cy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCByKHQpfXMuZG9uZT9lKHUpOlByb21pc2UucmVzb2x2ZSh1KS50aGVuKG4saSl9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLGkpe3ZhciBvPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBhKHQpe2YobyxuLGksYSxzLCJuZXh0Iix0KX1mdW5jdGlvbiBzKHQpe2YobyxuLGksYSxzLCJ0aHJvdyIsdCl9YSh2b2lkIDApfSl9fXIuZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBwfSk7Y29uc3QgZD10PT5bYCR7dH1gLGByZWZzLyR7dH1gLGByZWZzL3RhZ3MvJHt0fWAsYHJlZnMvaGVhZHMvJHt0fWAsYHJlZnMvcmVtb3Rlcy8ke3R9YCxgcmVmcy9yZW1vdGVzLyR7dH0vSEVBRGBdLGg9WyJjb25maWciLCJkZXNjcmlwdGlvbiIsImluZGV4Iiwic2hhbGxvdyIsImNvbW1vbmRpciJdO2NsYXNzIHB7c3RhdGljIHVwZGF0ZVJlbW90ZVJlZnMoe2ZzOnQsZ2l0ZGlyOmUscmVtb3RlOnIscmVmczpvLHN5bXJlZnM6cyx0YWdzOmYscmVmc3BlY3M6ZCxwcnVuZTpoPSExLHBydW5lVGFnczpnPSExfSl7cmV0dXJuIGwoZnVuY3Rpb24qKCl7Y29uc3QgbD1uZXcgbi5hKHQpO2Zvcihjb25zdCB0IG9mIG8udmFsdWVzKCkpaWYoIXQubWF0Y2goL1swLTlhLWZdezQwfS8pKXRocm93IG5ldyBpLmIoaS5hLk5vdEFuT2lkRmFpbCx7dmFsdWU6dH0pO2NvbnN0IG09eWllbGQgYy5hLmdldCh7ZnM6bCxnaXRkaXI6ZX0pO2lmKCFkKXtpZigwPT09KGQ9eWllbGQgbS5nZXRhbGwoYHJlbW90ZS4ke3J9LmZldGNoYCkpLmxlbmd0aCl0aHJvdyBuZXcgaS5iKGkuYS5Ob1JlZnNwZWNDb25maWd1cmVkRXJyb3Ise3JlbW90ZTpyfSk7ZC51bnNoaWZ0KGArSEVBRDpyZWZzL3JlbW90ZXMvJHtyfS9IRUFEYCl9Y29uc3QgeT1hLmEuZnJvbShkKSx2PW5ldyBNYXA7aWYoZyl7Y29uc3QgdD15aWVsZCBwLmxpc3RSZWZzKHtmczpsLGdpdGRpcjplLGZpbGVwYXRoOiJyZWZzL3RhZ3MifSk7eWllbGQgcC5kZWxldGVSZWZzKHtmczpsLGdpdGRpcjplLHJlZnM6dC5tYXAodD0+YHJlZnMvdGFncy8ke3R9YCl9KX1pZihmKWZvcihjb25zdCB0IG9mIG8ua2V5cygpKWlmKHQuc3RhcnRzV2l0aCgicmVmcy90YWdzIikmJiF0LmVuZHNXaXRoKCJee30iKSYmISh5aWVsZCBwLmV4aXN0cyh7ZnM6bCxnaXRkaXI6ZSxyZWY6dH0pKSl7Y29uc3QgZT1vLmdldCh0KyJee30iKXx8by5nZXQodCk7di5zZXQodCxlKX1jb25zdCB3PXkudHJhbnNsYXRlKFsuLi5vLmtleXMoKV0pO2Zvcihjb25zdFt0LGVdb2Ygdyl7Y29uc3Qgcj1vLmdldCh0KTt2LnNldChlLHIpfWNvbnN0IGI9eS50cmFuc2xhdGUoWy4uLnMua2V5cygpXSk7Zm9yKGNvbnN0W3QsZV1vZiBiKXtjb25zdCByPXMuZ2V0KHQpLG49eS50cmFuc2xhdGVPbmUocik7biYmdi5zZXQoZSxgcmVmOiAke259YCl9Y29uc3QgXz1bXTtpZihoKXtmb3IoY29uc3QgdCBvZiB5LmxvY2FsTmFtZXNwYWNlcygpKXtjb25zdCByPSh5aWVsZCBwLmxpc3RSZWZzKHtmczpsLGdpdGRpcjplLGZpbGVwYXRoOnR9KSkubWFwKGU9PmAke3R9LyR7ZX1gKTtmb3IoY29uc3QgdCBvZiByKXYuaGFzKHQpfHxfLnB1c2godCl9Xy5sZW5ndGg+MCYmKHlpZWxkIHAuZGVsZXRlUmVmcyh7ZnM6bCxnaXRkaXI6ZSxyZWZzOl99KSl9Zm9yKGNvbnN0W3Qscl1vZiB2KXlpZWxkIGwud3JpdGUoT2JqZWN0KHUuYSkoZSx0KSxgJHtyLnRyaW0oKX1cbmAsInV0ZjgiKTtyZXR1cm57cHJ1bmVkOl99fSkoKX1zdGF0aWMgd3JpdGVSZWYoe2ZzOnQsZ2l0ZGlyOmUscmVmOnIsdmFsdWU6b30pe3JldHVybiBsKGZ1bmN0aW9uKigpe2NvbnN0IGE9bmV3IG4uYSh0KTtpZighby5tYXRjaCgvWzAtOWEtZl17NDB9LykpdGhyb3cgbmV3IGkuYihpLmEuTm90QW5PaWRGYWlsLHt2YWx1ZTpvfSk7eWllbGQgYS53cml0ZShPYmplY3QodS5hKShlLHIpLGAke28udHJpbSgpfVxuYCwidXRmOCIpfSkoKX1zdGF0aWMgd3JpdGVTeW1ib2xpY1JlZih7ZnM6dCxnaXRkaXI6ZSxyZWY6cix2YWx1ZTppfSl7cmV0dXJuIGwoZnVuY3Rpb24qKCl7Y29uc3Qgbz1uZXcgbi5hKHQpO3lpZWxkIG8ud3JpdGUoT2JqZWN0KHUuYSkoZSxyKSwicmVmOiAiK2Ake2kudHJpbSgpfVxuYCwidXRmOCIpfSkoKX1zdGF0aWMgZGVsZXRlUmVmKHtmczp0LGdpdGRpcjplLHJlZjpyfSl7cmV0dXJuIGwoZnVuY3Rpb24qKCl7cmV0dXJuIHAuZGVsZXRlUmVmcyh7ZnM6dCxnaXRkaXI6ZSxyZWZzOltyXX0pfSkoKX1zdGF0aWMgZGVsZXRlUmVmcyh7ZnM6dCxnaXRkaXI6ZSxyZWZzOnJ9KXtyZXR1cm4gbChmdW5jdGlvbiooKXtjb25zdCBpPW5ldyBuLmEodCk7eWllbGQgUHJvbWlzZS5hbGwoci5tYXAodD0+aS5ybShPYmplY3QodS5hKShlLHQpKSkpO2xldCBhPXlpZWxkIGkucmVhZChgJHtlfS9wYWNrZWQtcmVmc2Ase2VuY29kaW5nOiJ1dGY4In0pO2NvbnN0IHM9by5mcm9tKGEpLGM9cy5yZWZzLnNpemU7Zm9yKGNvbnN0IHQgb2YgcilzLnJlZnMuaGFzKHQpJiZzLmRlbGV0ZSh0KTtzLnJlZnMuc2l6ZTxjJiYoYT1zLnRvU3RyaW5nKCkseWllbGQgaS53cml0ZShgJHtlfS9wYWNrZWQtcmVmc2AsYSx7ZW5jb2Rpbmc6InV0ZjgifSkpfSkoKX1zdGF0aWMgcmVzb2x2ZSh7ZnM6dCxnaXRkaXI6ZSxyZWY6cixkZXB0aDpvfSl7cmV0dXJuIGwoZnVuY3Rpb24qKCl7Y29uc3QgYT1uZXcgbi5hKHQpO2lmKHZvaWQgMCE9PW8mJi0xPT09LS1vKXJldHVybiByO2xldCBzO2lmKHIuc3RhcnRzV2l0aCgicmVmOiAiKSlyZXR1cm4gcj1yLnNsaWNlKCJyZWY6ICIubGVuZ3RoKSxwLnJlc29sdmUoe2ZzOmEsZ2l0ZGlyOmUscmVmOnIsZGVwdGg6b30pO2lmKDQwPT09ci5sZW5ndGgmJi9bMC05YS1mXXs0MH0vLnRlc3QocikpcmV0dXJuIHI7Y29uc3QgdT15aWVsZCBwLnBhY2tlZFJlZnMoe2ZzOmEsZ2l0ZGlyOmV9KSxjPWQocikuZmlsdGVyKHQ9PiFoLmluY2x1ZGVzKHQpKTtmb3IoY29uc3QgdCBvZiBjKWlmKHM9KHlpZWxkIGEucmVhZChgJHtlfS8ke3R9YCx7ZW5jb2Rpbmc6InV0ZjgifSkpfHx1LmdldCh0KSlyZXR1cm4gcC5yZXNvbHZlKHtmczphLGdpdGRpcjplLHJlZjpzLnRyaW0oKSxkZXB0aDpvfSk7dGhyb3cgbmV3IGkuYihpLmEuUmVzb2x2ZVJlZkVycm9yLHtyZWY6cn0pfSkoKX1zdGF0aWMgZXhpc3RzKHtmczp0LGdpdGRpcjplLHJlZjpyfSl7cmV0dXJuIGwoZnVuY3Rpb24qKCl7dHJ5e3JldHVybiB5aWVsZCBwLmV4cGFuZCh7ZnM6dCxnaXRkaXI6ZSxyZWY6cn0pLCEwfWNhdGNoKHQpe3JldHVybiExfX0pKCl9c3RhdGljIGV4cGFuZCh7ZnM6dCxnaXRkaXI6ZSxyZWY6cn0pe3JldHVybiBsKGZ1bmN0aW9uKigpe2NvbnN0IG89bmV3IG4uYSh0KTtpZig0MD09PXIubGVuZ3RoJiYvWzAtOWEtZl17NDB9Ly50ZXN0KHIpKXJldHVybiByO2NvbnN0IGE9eWllbGQgcC5wYWNrZWRSZWZzKHtmczpvLGdpdGRpcjplfSkscz1kKHIpO2Zvcihjb25zdCB0IG9mIHMpe2lmKHlpZWxkIG8uZXhpc3RzKGAke2V9LyR7dH1gKSlyZXR1cm4gdDtpZihhLmhhcyh0KSlyZXR1cm4gdH10aHJvdyBuZXcgaS5iKGkuYS5FeHBhbmRSZWZFcnJvcix7cmVmOnJ9KX0pKCl9c3RhdGljIGV4cGFuZEFnYWluc3RNYXAoe3JlZjp0LG1hcDplfSl7cmV0dXJuIGwoZnVuY3Rpb24qKCl7Y29uc3Qgcj1kKHQpO2Zvcihjb25zdCB0IG9mIHIpaWYoeWllbGQgZS5oYXModCkpcmV0dXJuIHQ7dGhyb3cgbmV3IGkuYihpLmEuRXhwYW5kUmVmRXJyb3Ise3JlZjp0fSl9KSgpfXN0YXRpYyByZXNvbHZlQWdhaW5zdE1hcCh7cmVmOnQsZnVsbHJlZjplPXQsZGVwdGg6cixtYXA6bn0pe2lmKHZvaWQgMCE9PXImJi0xPT09LS1yKXJldHVybntmdWxscmVmOmUsb2lkOnR9O2lmKHQuc3RhcnRzV2l0aCgicmVmOiAiKSlyZXR1cm4gdD10LnNsaWNlKCJyZWY6ICIubGVuZ3RoKSxwLnJlc29sdmVBZ2FpbnN0TWFwKHtyZWY6dCxmdWxscmVmOmUsZGVwdGg6cixtYXA6bn0pO2lmKDQwPT09dC5sZW5ndGgmJi9bMC05YS1mXXs0MH0vLnRlc3QodCkpcmV0dXJue2Z1bGxyZWY6ZSxvaWQ6dH07Y29uc3Qgbz1kKHQpO2Zvcihjb25zdCB0IG9mIG8pe2NvbnN0IGU9bi5nZXQodCk7aWYoZSlyZXR1cm4gcC5yZXNvbHZlQWdhaW5zdE1hcCh7cmVmOmUudHJpbSgpLGZ1bGxyZWY6dCxkZXB0aDpyLG1hcDpufSl9dGhyb3cgbmV3IGkuYihpLmEuUmVzb2x2ZVJlZkVycm9yLHtyZWY6dH0pfXN0YXRpYyBwYWNrZWRSZWZzKHtmczp0LGdpdGRpcjplfSl7cmV0dXJuIGwoZnVuY3Rpb24qKCl7Y29uc3Qgcj1uZXcgbi5hKHQpLGk9eWllbGQgci5yZWFkKGAke2V9L3BhY2tlZC1yZWZzYCx7ZW5jb2Rpbmc6InV0ZjgifSk7cmV0dXJuIG8uZnJvbShpKS5yZWZzfSkoKX1zdGF0aWMgbGlzdFJlZnMoe2ZzOnQsZ2l0ZGlyOmUsZmlsZXBhdGg6cn0pe3JldHVybiBsKGZ1bmN0aW9uKigpe2NvbnN0IGk9bmV3IG4uYSh0KSxvPXAucGFja2VkUmVmcyh7ZnM6aSxnaXRkaXI6ZX0pO2xldCBhPW51bGw7dHJ5e2E9KGE9eWllbGQgaS5yZWFkZGlyRGVlcChgJHtlfS8ke3J9YCkpLm1hcCh0PT50LnJlcGxhY2UoYCR7ZX0vJHtyfS9gLCIiKSl9Y2F0Y2godCl7YT1bXX1mb3IobGV0IHQgb2YoeWllbGQgbykua2V5cygpKXQuc3RhcnRzV2l0aChyKSYmKHQ9dC5yZXBsYWNlKHIrIi8iLCIiKSxhLmluY2x1ZGVzKHQpfHxhLnB1c2godCkpO3JldHVybiBhLnNvcnQocyksYX0pKCl9c3RhdGljIGxpc3RCcmFuY2hlcyh7ZnM6dCxnaXRkaXI6ZSxyZW1vdGU6cn0pe3JldHVybiBsKGZ1bmN0aW9uKigpe2NvbnN0IGk9bmV3IG4uYSh0KTtyZXR1cm4gcj9wLmxpc3RSZWZzKHtmczppLGdpdGRpcjplLGZpbGVwYXRoOmByZWZzL3JlbW90ZXMvJHtyfWB9KTpwLmxpc3RSZWZzKHtmczppLGdpdGRpcjplLGZpbGVwYXRoOiJyZWZzL2hlYWRzIn0pfSkoKX1zdGF0aWMgbGlzdFRhZ3Moe2ZzOnQsZ2l0ZGlyOmV9KXtyZXR1cm4gbChmdW5jdGlvbiooKXtjb25zdCByPW5ldyBuLmEodCk7cmV0dXJuKHlpZWxkIHAubGlzdFJlZnMoe2ZzOnIsZ2l0ZGlyOmUsZmlsZXBhdGg6InJlZnMvdGFncyJ9KSkuZmlsdGVyKHQ9PiF0LmVuZHNXaXRoKCJee30iKSl9KSgpfX19LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKHQpe3IuZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBkfSk7dmFyIG49cigxOCksaT1yLm4obiksbz1yKDEpLGE9cigwKSxzPXIoMTYpLHU9cig5NCksYz1yKDk1KSxmPXIoMTIpO2Z1bmN0aW9uIGwodCxlLHIsbixpLG8sYSl7dHJ5e3ZhciBzPXRbb10oYSksdT1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UodSk6UHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4obixpKX1mdW5jdGlvbiBkKHQpe3JldHVybiBoLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBoKCl7dmFyIGU7cmV0dXJuIGU9ZnVuY3Rpb24qKHtmczplLGdpdGRpcjpyLG9pZDpuLGZvcm1hdDpsPSJjb250ZW50In0pe2NvbnN0IGg9bmV3IG8uYShlKSxwPXQ9PmQoe2ZzOmgsZ2l0ZGlyOnIsb2lkOnR9KTtsZXQgZztpZigiNGI4MjVkYzY0MmNiNmViOWEwNjBlNTRiZjhkNjkyODhmYmVlNDkwNCI9PT1uJiYoZz17Zm9ybWF0OiJ3cmFwcGVkIixvYmplY3Q6dC5mcm9tKCJ0cmVlIDBcMCIpfSksZ3x8KGc9eWllbGQgT2JqZWN0KHUuYSkoe2ZzOmgsZ2l0ZGlyOnIsb2lkOm59KSksZ3x8KGc9eWllbGQgT2JqZWN0KGMuYSkoe2ZzOmgsZ2l0ZGlyOnIsb2lkOm4sZ2V0RXh0ZXJuYWxSZWZEZWx0YTpwfSkpLCFnKXRocm93IG5ldyBhLmIoYS5hLlJlYWRPYmplY3RGYWlsLHtvaWQ6bn0pO2lmKCJkZWZsYXRlZCI9PT1sKXJldHVybiBnO3N3aXRjaChnLmZvcm1hdCl7Y2FzZSJkZWZsYXRlZCI6Zy5vYmplY3Q9dC5mcm9tKGkuYS5pbmZsYXRlKGcub2JqZWN0KSksZy5mb3JtYXQ9IndyYXBwZWQiO2Nhc2Uid3JhcHBlZCI6aWYoIndyYXBwZWQiPT09bCYmIndyYXBwZWQiPT09Zy5mb3JtYXQpcmV0dXJuIGc7Y29uc3QgZT1PYmplY3QoZi5hKShnLm9iamVjdCk7aWYoZSE9PW4pdGhyb3cgbmV3IGEuYihhLmEuSW50ZXJuYWxGYWlsLHttZXNzYWdlOmBTSEEgY2hlY2sgZmFpbGVkISBFeHBlY3RlZCAke259LCBjb21wdXRlZCAke2V9YH0pO2NvbnN0e29iamVjdDpyLHR5cGU6b309cy5hLnVud3JhcChnLm9iamVjdCk7Zy50eXBlPW8sZy5vYmplY3Q9cixnLmZvcm1hdD0iY29udGVudCI7Y2FzZSJjb250ZW50IjppZigiY29udGVudCI9PT1sKXJldHVybiBnO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IGEuYihhLmEuSW50ZXJuYWxGYWlsLHttZXNzYWdlOmBpbnZhbGlkIGZvcm1hdCAiJHtnLmZvcm1hdH0iYH0pfX0sKGg9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLGkpe3ZhciBvPWUuYXBwbHkodCxyKTtmdW5jdGlvbiBhKHQpe2wobyxuLGksYSxzLCJuZXh0Iix0KX1mdW5jdGlvbiBzKHQpe2wobyxuLGksYSxzLCJ0aHJvdyIsdCl9YSh2b2lkIDApfSl9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSkuY2FsbCh0aGlzLHIoMTApLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG59KSxyLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pO3ZhciBuLGksbz0idW5kZWZpbmVkIiE9dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZSxhPW8mJm8ubm93P2Z1bmN0aW9uKCl7cmV0dXJuIG8ubm93KCl9OmZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93KCl9O2Z1bmN0aW9uIHModCl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJuYW1lIG11c3QgYmUgbm9uLWVtcHR5Iil9aWYobyYmby5tYXJrKW49ZnVuY3Rpb24odCl7cyh0KSxvLm1hcmsoInN0YXJ0ICIrdCl9LGk9ZnVuY3Rpb24odCl7cyh0KSxvLm1hcmsoImVuZCAiK3QpLG8ubWVhc3VyZSh0LCJzdGFydCAiK3QsImVuZCAiK3QpO3ZhciBlPW8uZ2V0RW50cmllc0J5TmFtZSh0KTtyZXR1cm4gZVtlLmxlbmd0aC0xXX0sZnVuY3Rpb24oKXtyZXR1cm4gby5nZXRFbnRyaWVzQnlUeXBlKCJtZWFzdXJlIil9LGZ1bmN0aW9uKCl7by5jbGVhck1hcmtzKCksby5jbGVhck1lYXN1cmVzKCl9O2Vsc2V7dmFyIHU9e30sYz1bXTtuPWZ1bmN0aW9uKHQpe3ModCk7dmFyIGU9YSgpO3VbIiQiK3RdPWV9LGk9ZnVuY3Rpb24odCl7cyh0KTt2YXIgZT1hKCkscj11WyIkIit0XTtpZighcil0aHJvdyBuZXcgRXJyb3IoIm5vIGtub3duIG1hcms6ICIrdCk7dmFyIG49e3N0YXJ0VGltZTpyLG5hbWU6dCxkdXJhdGlvbjplLXIsZW50cnlUeXBlOiJtZWFzdXJlIn07cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49MCxpPXQubGVuZ3RoO248aTspdFtyPW4raT4+PjFdLnN0YXJ0VGltZTxlLnN0YXJ0VGltZT9uPXIrMTppPXI7dC5zcGxpY2UobiwwLGUpfShjLG4pLG59LGZ1bmN0aW9uKCl7cmV0dXJuIGN9LGZ1bmN0aW9uKCl7dT17fSxjPVtdfX19LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKHQpe3IuZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBsfSk7dmFyIG49cigwKSxpPXIoNDUpLG89cigzNyksYT1yKDE0KSxzPXIoOTkpLHU9cigzNik7ZnVuY3Rpb24gYyh0LGUscixuLGksbyxhKXt0cnl7dmFyIHM9dFtvXShhKSx1PXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZSh1KTpQcm9taXNlLnJlc29sdmUodSkudGhlbihuLGkpfWZ1bmN0aW9uIGYodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obixpKXt2YXIgbz10LmFwcGx5KGUscik7ZnVuY3Rpb24gYSh0KXtjKG8sbixpLGEscywibmV4dCIsdCl9ZnVuY3Rpb24gcyh0KXtjKG8sbixpLGEscywidGhyb3ciLHQpfWEodm9pZCAwKX0pfX1jbGFzcyBse2NvbnN0cnVjdG9yKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSl0aGlzLl9jb21taXQ9ZTtlbHNlIGlmKHQuaXNCdWZmZXIoZSkpdGhpcy5fY29tbWl0PWUudG9TdHJpbmcoInV0ZjgiKTtlbHNle2lmKCJvYmplY3QiIT10eXBlb2YgZSl0aHJvdyBuZXcgbi5iKG4uYS5JbnRlcm5hbEZhaWwse21lc3NhZ2U6ImludmFsaWQgdHlwZSBwYXNzZWQgdG8gR2l0Q29tbWl0IGNvbnN0cnVjdG9yIn0pO3RoaXMuX2NvbW1pdD1sLnJlbmRlcihlKX19c3RhdGljIGZyb21QYXlsb2FkU2lnbmF0dXJlKHtwYXlsb2FkOnQsc2lnbmF0dXJlOmV9KXtjb25zdCByPWwuanVzdEhlYWRlcnModCksbj1sLmp1c3RNZXNzYWdlKHQpLGk9T2JqZWN0KGEuYSkocisiXG5ncGdzaWciK09iamVjdChvLmEpKGUpKyJcbiIrbik7cmV0dXJuIG5ldyBsKGkpfXN0YXRpYyBmcm9tKHQpe3JldHVybiBuZXcgbCh0KX10b09iamVjdCgpe3JldHVybiB0LmZyb20odGhpcy5fY29tbWl0LCJ1dGY4Iil9aGVhZGVycygpe3JldHVybiB0aGlzLnBhcnNlSGVhZGVycygpfW1lc3NhZ2UoKXtyZXR1cm4gbC5qdXN0TWVzc2FnZSh0aGlzLl9jb21taXQpfXBhcnNlKCl7cmV0dXJuIE9iamVjdC5hc3NpZ24oe21lc3NhZ2U6dGhpcy5tZXNzYWdlKCl9LHRoaXMuaGVhZGVycygpKX1zdGF0aWMganVzdE1lc3NhZ2UodCl7cmV0dXJuIE9iamVjdChhLmEpKHQuc2xpY2UodC5pbmRleE9mKCJcblxuIikrMikpfXN0YXRpYyBqdXN0SGVhZGVycyh0KXtyZXR1cm4gdC5zbGljZSgwLHQuaW5kZXhPZigiXG5cbiIpKX1wYXJzZUhlYWRlcnMoKXtjb25zdCB0PWwuanVzdEhlYWRlcnModGhpcy5fY29tbWl0KS5zcGxpdCgiXG4iKSxlPVtdO2Zvcihjb25zdCByIG9mIHQpIiAiPT09clswXT9lW2UubGVuZ3RoLTFdKz0iXG4iK3Iuc2xpY2UoMSk6ZS5wdXNoKHIpO2NvbnN0IHI9e3BhcmVudDpbXX07Zm9yKGNvbnN0IHQgb2YgZSl7Y29uc3QgZT10LnNsaWNlKDAsdC5pbmRleE9mKCIgIikpLG49dC5zbGljZSh0LmluZGV4T2YoIiAiKSsxKTtBcnJheS5pc0FycmF5KHJbZV0pP3JbZV0ucHVzaChuKTpyW2VdPW59cmV0dXJuIHIuYXV0aG9yJiYoci5hdXRob3I9T2JqZWN0KHUuYSkoci5hdXRob3IpKSxyLmNvbW1pdHRlciYmKHIuY29tbWl0dGVyPU9iamVjdCh1LmEpKHIuY29tbWl0dGVyKSkscn1zdGF0aWMgcmVuZGVySGVhZGVycyh0KXtsZXQgZT0iIjtpZih0LnRyZWU/ZSs9YHRyZWUgJHt0LnRyZWV9XG5gOmUrPSJ0cmVlIDRiODI1ZGM2NDJjYjZlYjlhMDYwZTU0YmY4ZDY5Mjg4ZmJlZTQ5MDRcbiIsdC5wYXJlbnQpe2lmKHZvaWQgMD09PXQucGFyZW50Lmxlbmd0aCl0aHJvdyBuZXcgbi5iKG4uYS5JbnRlcm5hbEZhaWwse21lc3NhZ2U6ImNvbW1pdCAncGFyZW50JyBwcm9wZXJ0eSBzaG91bGQgYmUgYW4gYXJyYXkifSk7Zm9yKGNvbnN0IHIgb2YgdC5wYXJlbnQpZSs9YHBhcmVudCAke3J9XG5gfWNvbnN0IHI9dC5hdXRob3I7ZSs9YGF1dGhvciAke09iamVjdChpLmEpKHIpfVxuYDtjb25zdCBhPXQuY29tbWl0dGVyfHx0LmF1dGhvcjtyZXR1cm4gZSs9YGNvbW1pdHRlciAke09iamVjdChpLmEpKGEpfVxuYCx0LmdwZ3NpZyYmKGUrPSJncGdzaWciK09iamVjdChvLmEpKHQuZ3Bnc2lnKSksZX1zdGF0aWMgcmVuZGVyKHQpe3JldHVybiBsLnJlbmRlckhlYWRlcnModCkrIlxuIitPYmplY3QoYS5hKSh0Lm1lc3NhZ2UpfXJlbmRlcigpe3JldHVybiB0aGlzLl9jb21taXR9d2l0aG91dFNpZ25hdHVyZSgpe2NvbnN0IHQ9T2JqZWN0KGEuYSkodGhpcy5fY29tbWl0KTtpZigtMT09PXQuaW5kZXhPZigiXG5ncGdzaWciKSlyZXR1cm4gdDtjb25zdCBlPXQuc2xpY2UoMCx0LmluZGV4T2YoIlxuZ3Bnc2lnIikpLHI9dC5zbGljZSh0LmluZGV4T2YoIi0tLS0tRU5EIFBHUCBTSUdOQVRVUkUtLS0tLVxuIikrIi0tLS0tRU5EIFBHUCBTSUdOQVRVUkUtLS0tLVxuIi5sZW5ndGgpO3JldHVybiBPYmplY3QoYS5hKShlKyJcbiIrcil9aXNvbGF0ZVNpZ25hdHVyZSgpe2NvbnN0IHQ9dGhpcy5fY29tbWl0LnNsaWNlKHRoaXMuX2NvbW1pdC5pbmRleE9mKCItLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLSIpLHRoaXMuX2NvbW1pdC5pbmRleE9mKCItLS0tLUVORCBQR1AgU0lHTkFUVVJFLS0tLS0iKSsiLS0tLS1FTkQgUEdQIFNJR05BVFVSRS0tLS0tIi5sZW5ndGgpO3JldHVybiBPYmplY3Qocy5hKSh0KX1zdGF0aWMgc2lnbih0LGUscil7cmV0dXJuIGYoZnVuY3Rpb24qKCl7Y29uc3Qgbj10LndpdGhvdXRTaWduYXR1cmUoKSxpPWwuanVzdE1lc3NhZ2UodC5fY29tbWl0KTtsZXR7c2lnbmF0dXJlOnN9PXlpZWxkIGUuc2lnbih7cGF5bG9hZDpuLHNlY3JldEtleTpyfSk7cz1PYmplY3QoYS5hKShzKTtjb25zdCB1PWwuanVzdEhlYWRlcnModC5fY29tbWl0KSsiXG5ncGdzaWciK09iamVjdChvLmEpKHMpKyJcbiIraTtyZXR1cm4gbC5mcm9tKHUpfSkoKX1zdGF0aWMgdmVyaWZ5KHQsZSxyKXtyZXR1cm4gZihmdW5jdGlvbiooKXtjb25zdCBuPXQud2l0aG91dFNpZ25hdHVyZSgpLGk9dC5pc29sYXRlU2lnbmF0dXJlKCk7cmV0dXJuIGUudmVyaWZ5KHtwYXlsb2FkOm4scHVibGljS2V5OnIsc2lnbmF0dXJlOml9KX0pKCl9fX0pLmNhbGwodGhpcyxyKDEwKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbih0KXtyLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pO2xldCBuPW51bGw7ZnVuY3Rpb24gaSguLi5lKXtpZihudWxsPT09bil0cnl7bj10JiZ0LmVudiYmdC5lbnYuREVCVUcmJigiKiI9PT10LmVudi5ERUJVR3x8Imlzb21vcnBoaWMtZ2l0Ij09PXQuZW52LkRFQlVHKXx8InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJnZvaWQgMCE9PXdpbmRvdy5sb2NhbFN0b3JhZ2UmJigiKiI9PT13aW5kb3cubG9jYWxTdG9yYWdlLmRlYnVnfHwiaXNvbW9ycGhpYy1naXQiPT09d2luZG93LmxvY2FsU3RvcmFnZS5kZWJ1Zyl9Y2F0Y2godCl7bj0hMX1uJiZjb25zb2xlLmxvZyguLi5lKX19KS5jYWxsKHRoaXMscig0OSkpfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbih0KXtyLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pO3ZhciBuPXIoNTcpLGk9cigzNSk7ZnVuY3Rpb24gbyh0LGUscixuLGksbyxhKXt0cnl7dmFyIHM9dFtvXShhKSx1PXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZSh1KTpQcm9taXNlLnJlc29sdmUodSkudGhlbihuLGkpfWNsYXNzIGF7c3RhdGljIGZsdXNoKCl7cmV0dXJuIHQuZnJvbSgiMDAwMCIsInV0ZjgiKX1zdGF0aWMgZW5jb2RlKGUpeyJzdHJpbmciPT10eXBlb2YgZSYmKGU9dC5mcm9tKGUpKTtjb25zdCByPWUubGVuZ3RoKzQsbj1PYmplY3QoaS5hKSg0LHIpO3JldHVybiB0LmNvbmNhdChbdC5mcm9tKG4sInV0ZjgiKSxlXSl9c3RhdGljIHN0cmVhbVJlYWRlcih0KXtjb25zdCBlPW5ldyBuLmEodCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQscj0odD1mdW5jdGlvbiooKXt0cnl7bGV0IHQ9eWllbGQgZS5yZWFkKDQpO2lmKG51bGw9PXQpcmV0dXJuITA7aWYoMD09PSh0PXBhcnNlSW50KHQudG9TdHJpbmcoInV0ZjgiKSwxNikpKXJldHVybiBudWxsO2NvbnN0IHI9eWllbGQgZS5yZWFkKHQtNCk7cmV0dXJuIG51bGw9PXJ8fHJ9Y2F0Y2godCl7cmV0dXJuIGNvbnNvbGUubG9nKCJlcnJvciIsdCksITB9fSxmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4saSl7dmFyIGE9dC5hcHBseShlLHIpO2Z1bmN0aW9uIHModCl7byhhLG4saSxzLHUsIm5leHQiLHQpfWZ1bmN0aW9uIHUodCl7byhhLG4saSxzLHUsInRocm93Iix0KX1zKHZvaWQgMCl9KX0pO3JldHVybiBmdW5jdGlvbigpe3JldHVybiByLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCl9fX0pLmNhbGwodGhpcyxyKDEwKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbih0KXsKLyohCiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLgogKgogKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8ZmVyb3NzQGZlcm9zcy5vcmc+IDxodHRwOi8vZmVyb3NzLm9yZz4KICogQGxpY2Vuc2UgIE1JVAogKi8KdmFyIG49cig2MiksaT1yKDEwMyksbz1yKDEwNCk7ZnVuY3Rpb24gYSgpe3JldHVybiB1LlRZUEVEX0FSUkFZX1NVUFBPUlQ/MjE0NzQ4MzY0NzoxMDczNzQxODIzfWZ1bmN0aW9uIHModCxlKXtpZihhKCk8ZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGgiKTtyZXR1cm4gdS5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0PW5ldyBVaW50OEFycmF5KGUpKS5fX3Byb3RvX189dS5wcm90b3R5cGU6KG51bGw9PT10JiYodD1uZXcgdShlKSksdC5sZW5ndGg9ZSksdH1mdW5jdGlvbiB1KHQsZSxyKXtpZighKHUuVFlQRURfQVJSQVlfU1VQUE9SVHx8dGhpcyBpbnN0YW5jZW9mIHUpKXJldHVybiBuZXcgdSh0LGUscik7aWYoIm51bWJlciI9PXR5cGVvZiB0KXtpZigic3RyaW5nIj09dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJJZiBlbmNvZGluZyBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyIpO3JldHVybiBsKHRoaXMsdCl9cmV0dXJuIGModGhpcyx0LGUscil9ZnVuY3Rpb24gYyh0LGUscixuKXtpZigibnVtYmVyIj09dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpO3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJmUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9mdW5jdGlvbih0LGUscixuKXtpZihlLmJ5dGVMZW5ndGgscjwwfHxlLmJ5dGVMZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiJ29mZnNldCcgaXMgb3V0IG9mIGJvdW5kcyIpO2lmKGUuYnl0ZUxlbmd0aDxyKyhufHwwKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiJ2xlbmd0aCcgaXMgb3V0IG9mIGJvdW5kcyIpO2U9dm9pZCAwPT09ciYmdm9pZCAwPT09bj9uZXcgVWludDhBcnJheShlKTp2b2lkIDA9PT1uP25ldyBVaW50OEFycmF5KGUscik6bmV3IFVpbnQ4QXJyYXkoZSxyLG4pO3UuVFlQRURfQVJSQVlfU1VQUE9SVD8odD1lKS5fX3Byb3RvX189dS5wcm90b3R5cGU6dD1kKHQsZSk7cmV0dXJuIHR9KHQsZSxyLG4pOiJzdHJpbmciPT10eXBlb2YgZT9mdW5jdGlvbih0LGUscil7InN0cmluZyI9PXR5cGVvZiByJiYiIiE9PXJ8fChyPSJ1dGY4Iik7aWYoIXUuaXNFbmNvZGluZyhyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciZW5jb2RpbmciIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKTt2YXIgbj0wfHAoZSxyKSxpPSh0PXModCxuKSkud3JpdGUoZSxyKTtpIT09biYmKHQ9dC5zbGljZSgwLGkpKTtyZXR1cm4gdH0odCxlLHIpOmZ1bmN0aW9uKHQsZSl7aWYodS5pc0J1ZmZlcihlKSl7dmFyIHI9MHxoKGUubGVuZ3RoKTtyZXR1cm4gMD09PSh0PXModCxyKSkubGVuZ3RoP3Q6KGUuY29weSh0LDAsMCxyKSx0KX1pZihlKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZlLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfHwibGVuZ3RoImluIGUpcmV0dXJuIm51bWJlciIhPXR5cGVvZiBlLmxlbmd0aHx8KG49ZS5sZW5ndGgpIT1uP3ModCwwKTpkKHQsZSk7aWYoIkJ1ZmZlciI9PT1lLnR5cGUmJm8oZS5kYXRhKSlyZXR1cm4gZCh0LGUuZGF0YSl9dmFyIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LiIpfSh0LGUpfWZ1bmN0aW9uIGYodCl7aWYoIm51bWJlciIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJyk7aWYodDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKX1mdW5jdGlvbiBsKHQsZSl7aWYoZihlKSx0PXModCxlPDA/MDowfGgoZSkpLCF1LlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKHZhciByPTA7cjxlOysrcil0W3JdPTA7cmV0dXJuIHR9ZnVuY3Rpb24gZCh0LGUpe3ZhciByPWUubGVuZ3RoPDA/MDowfGgoZS5sZW5ndGgpO3Q9cyh0LHIpO2Zvcih2YXIgbj0wO248cjtuKz0xKXRbbl09MjU1JmVbbl07cmV0dXJuIHR9ZnVuY3Rpb24gaCh0KXtpZih0Pj1hKCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHgiK2EoKS50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfHR9ZnVuY3Rpb24gcCh0LGUpe2lmKHUuaXNCdWZmZXIodCkpcmV0dXJuIHQubGVuZ3RoO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcmJihBcnJheUJ1ZmZlci5pc1ZpZXcodCl8fHQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuIHQuYnl0ZUxlbmd0aDsic3RyaW5nIiE9dHlwZW9mIHQmJih0PSIiK3QpO3ZhciByPXQubGVuZ3RoO2lmKDA9PT1yKXJldHVybiAwO2Zvcih2YXIgbj0hMTs7KXN3aXRjaChlKXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiByO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSB2b2lkIDA6cmV0dXJuIHoodCkubGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gMipyO2Nhc2UiaGV4IjpyZXR1cm4gcj4+PjE7Y2FzZSJiYXNlNjQiOnJldHVybiBIKHQpLmxlbmd0aDtkZWZhdWx0OmlmKG4pcmV0dXJuIHoodCkubGVuZ3RoO2U9KCIiK2UpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gZyh0LGUscil7dmFyIG49ITE7aWYoKHZvaWQgMD09PWV8fGU8MCkmJihlPTApLGU+dGhpcy5sZW5ndGgpcmV0dXJuIiI7aWYoKHZvaWQgMD09PXJ8fHI+dGhpcy5sZW5ndGgpJiYocj10aGlzLmxlbmd0aCkscjw9MClyZXR1cm4iIjtpZigocj4+Pj0wKTw9KGU+Pj49MCkpcmV0dXJuIiI7Zm9yKHR8fCh0PSJ1dGY4Iik7Oylzd2l0Y2godCl7Y2FzZSJoZXgiOnJldHVybiAkKHRoaXMsZSxyKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBqKHRoaXMsZSxyKTtjYXNlImFzY2lpIjpyZXR1cm4gUyh0aGlzLGUscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gUih0aGlzLGUscik7Y2FzZSJiYXNlNjQiOnJldHVybiBPKHRoaXMsZSxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIEEodGhpcyxlLHIpO2RlZmF1bHQ6aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3QpO3Q9KHQrIiIpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gbSh0LGUscil7dmFyIG49dFtlXTt0W2VdPXRbcl0sdFtyXT1ufWZ1bmN0aW9uIHkodCxlLHIsbixpKXtpZigwPT09dC5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiByPyhuPXIscj0wKTpyPjIxNDc0ODM2NDc/cj0yMTQ3NDgzNjQ3OnI8LTIxNDc0ODM2NDgmJihyPS0yMTQ3NDgzNjQ4KSxyPStyLGlzTmFOKHIpJiYocj1pPzA6dC5sZW5ndGgtMSkscjwwJiYocj10Lmxlbmd0aCtyKSxyPj10Lmxlbmd0aCl7aWYoaSlyZXR1cm4tMTtyPXQubGVuZ3RoLTF9ZWxzZSBpZihyPDApe2lmKCFpKXJldHVybi0xO3I9MH1pZigic3RyaW5nIj09dHlwZW9mIGUmJihlPXUuZnJvbShlLG4pKSx1LmlzQnVmZmVyKGUpKXJldHVybiAwPT09ZS5sZW5ndGg/LTE6dih0LGUscixuLGkpO2lmKCJudW1iZXIiPT10eXBlb2YgZSlyZXR1cm4gZSY9MjU1LHUuVFlQRURfQVJSQVlfU1VQUE9SVCYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/aT9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwodCxlLHIpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwodCxlLHIpOnYodCxbZV0scixuLGkpO3Rocm93IG5ldyBUeXBlRXJyb3IoInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpfWZ1bmN0aW9uIHYodCxlLHIsbixpKXt2YXIgbyxhPTEscz10Lmxlbmd0aCx1PWUubGVuZ3RoO2lmKHZvaWQgMCE9PW4mJigidWNzMiI9PT0obj1TdHJpbmcobikudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1ufHwidXRmMTZsZSI9PT1ufHwidXRmLTE2bGUiPT09bikpe2lmKHQubGVuZ3RoPDJ8fGUubGVuZ3RoPDIpcmV0dXJuLTE7YT0yLHMvPTIsdS89MixyLz0yfWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gMT09PWE/dFtlXTp0LnJlYWRVSW50MTZCRShlKmEpfWlmKGkpe3ZhciBmPS0xO2ZvcihvPXI7bzxzO28rKylpZihjKHQsbyk9PT1jKGUsLTE9PT1mPzA6by1mKSl7aWYoLTE9PT1mJiYoZj1vKSxvLWYrMT09PXUpcmV0dXJuIGYqYX1lbHNlLTEhPT1mJiYoby09by1mKSxmPS0xfWVsc2UgZm9yKHIrdT5zJiYocj1zLXUpLG89cjtvPj0wO28tLSl7Zm9yKHZhciBsPSEwLGQ9MDtkPHU7ZCsrKWlmKGModCxvK2QpIT09YyhlLGQpKXtsPSExO2JyZWFrfWlmKGwpcmV0dXJuIG99cmV0dXJuLTF9ZnVuY3Rpb24gdyh0LGUscixuKXtyPU51bWJlcihyKXx8MDt2YXIgaT10Lmxlbmd0aC1yO24/KG49TnVtYmVyKG4pKT5pJiYobj1pKTpuPWk7dmFyIG89ZS5sZW5ndGg7aWYobyUyIT0wKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyIpO24+by8yJiYobj1vLzIpO2Zvcih2YXIgYT0wO2E8bjsrK2Epe3ZhciBzPXBhcnNlSW50KGUuc3Vic3RyKDIqYSwyKSwxNik7aWYoaXNOYU4ocykpcmV0dXJuIGE7dFtyK2FdPXN9cmV0dXJuIGF9ZnVuY3Rpb24gYih0LGUscixuKXtyZXR1cm4gTCh6KGUsdC5sZW5ndGgtciksdCxyLG4pfWZ1bmN0aW9uIF8odCxlLHIsbil7cmV0dXJuIEwoZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9MDtyPHQubGVuZ3RoOysrcillLnB1c2goMjU1JnQuY2hhckNvZGVBdChyKSk7cmV0dXJuIGV9KGUpLHQscixuKX1mdW5jdGlvbiB4KHQsZSxyLG4pe3JldHVybiBfKHQsZSxyLG4pfWZ1bmN0aW9uIEUodCxlLHIsbil7cmV0dXJuIEwoSChlKSx0LHIsbil9ZnVuY3Rpb24gayh0LGUscixuKXtyZXR1cm4gTChmdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuLGksbz1bXSxhPTA7YTx0Lmxlbmd0aCYmISgoZS09Mik8MCk7KythKXI9dC5jaGFyQ29kZUF0KGEpLG49cj4+OCxpPXIlMjU2LG8ucHVzaChpKSxvLnB1c2gobik7cmV0dXJuIG99KGUsdC5sZW5ndGgtciksdCxyLG4pfWZ1bmN0aW9uIE8odCxlLHIpe3JldHVybiAwPT09ZSYmcj09PXQubGVuZ3RoP24uZnJvbUJ5dGVBcnJheSh0KTpuLmZyb21CeXRlQXJyYXkodC5zbGljZShlLHIpKX1mdW5jdGlvbiBqKHQsZSxyKXtyPU1hdGgubWluKHQubGVuZ3RoLHIpO2Zvcih2YXIgbj1bXSxpPWU7aTxyOyl7dmFyIG8sYSxzLHUsYz10W2ldLGY9bnVsbCxsPWM+MjM5PzQ6Yz4yMjM/MzpjPjE5MT8yOjE7aWYoaStsPD1yKXN3aXRjaChsKXtjYXNlIDE6YzwxMjgmJihmPWMpO2JyZWFrO2Nhc2UgMjoxMjg9PSgxOTImKG89dFtpKzFdKSkmJih1PSgzMSZjKTw8Nnw2MyZvKT4xMjcmJihmPXUpO2JyZWFrO2Nhc2UgMzpvPXRbaSsxXSxhPXRbaSsyXSwxMjg9PSgxOTImbykmJjEyOD09KDE5MiZhKSYmKHU9KDE1JmMpPDwxMnwoNjMmbyk8PDZ8NjMmYSk+MjA0NyYmKHU8NTUyOTZ8fHU+NTczNDMpJiYoZj11KTticmVhaztjYXNlIDQ6bz10W2krMV0sYT10W2krMl0scz10W2krM10sMTI4PT0oMTkyJm8pJiYxMjg9PSgxOTImYSkmJjEyOD09KDE5MiZzKSYmKHU9KDE1JmMpPDwxOHwoNjMmbyk8PDEyfCg2MyZhKTw8Nnw2MyZzKT42NTUzNSYmdTwxMTE0MTEyJiYoZj11KX1udWxsPT09Zj8oZj02NTUzMyxsPTEpOmY+NjU1MzUmJihmLT02NTUzNixuLnB1c2goZj4+PjEwJjEwMjN8NTUyOTYpLGY9NTYzMjB8MTAyMyZmKSxuLnB1c2goZiksaSs9bH1yZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoZTw9UClyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsdCk7dmFyIHI9IiIsbj0wO2Zvcig7bjxlOylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyx0LnNsaWNlKG4sbis9UCkpO3JldHVybiByfShuKX1lLkJ1ZmZlcj11LGUuU2xvd0J1ZmZlcj1mdW5jdGlvbih0KXsrdCE9dCYmKHQ9MCk7cmV0dXJuIHUuYWxsb2MoK3QpfSxlLklOU1BFQ1RfTUFYX0JZVEVTPTUwLHUuVFlQRURfQVJSQVlfU1VQUE9SVD12b2lkIDAhPT10LlRZUEVEX0FSUkFZX1NVUFBPUlQ/dC5UWVBFRF9BUlJBWV9TVVBQT1JUOmZ1bmN0aW9uKCl7dHJ5e3ZhciB0PW5ldyBVaW50OEFycmF5KDEpO3JldHVybiB0Ll9fcHJvdG9fXz17X19wcm90b19fOlVpbnQ4QXJyYXkucHJvdG90eXBlLGZvbzpmdW5jdGlvbigpe3JldHVybiA0Mn19LDQyPT09dC5mb28oKSYmImZ1bmN0aW9uIj09dHlwZW9mIHQuc3ViYXJyYXkmJjA9PT10LnN1YmFycmF5KDEsMSkuYnl0ZUxlbmd0aH1jYXRjaCh0KXtyZXR1cm4hMX19KCksZS5rTWF4TGVuZ3RoPWEoKSx1LnBvb2xTaXplPTgxOTIsdS5fYXVnbWVudD1mdW5jdGlvbih0KXtyZXR1cm4gdC5fX3Byb3RvX189dS5wcm90b3R5cGUsdH0sdS5mcm9tPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gYyhudWxsLHQsZSxyKX0sdS5UWVBFRF9BUlJBWV9TVVBQT1JUJiYodS5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLHUuX19wcm90b19fPVVpbnQ4QXJyYXksInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5zcGVjaWVzJiZ1W1N5bWJvbC5zcGVjaWVzXT09PXUmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LFN5bWJvbC5zcGVjaWVzLHt2YWx1ZTpudWxsLGNvbmZpZ3VyYWJsZTohMH0pKSx1LmFsbG9jPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIGYoZSksZTw9MD9zKHQsZSk6dm9pZCAwIT09cj8ic3RyaW5nIj09dHlwZW9mIG4/cyh0LGUpLmZpbGwocixuKTpzKHQsZSkuZmlsbChyKTpzKHQsZSl9KG51bGwsdCxlLHIpfSx1LmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHQpe3JldHVybiBsKG51bGwsdCl9LHUuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKHQpe3JldHVybiBsKG51bGwsdCl9LHUuaXNCdWZmZXI9ZnVuY3Rpb24odCl7cmV0dXJuIShudWxsPT10fHwhdC5faXNCdWZmZXIpfSx1LmNvbXBhcmU9ZnVuY3Rpb24odCxlKXtpZighdS5pc0J1ZmZlcih0KXx8IXUuaXNCdWZmZXIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIG11c3QgYmUgQnVmZmVycyIpO2lmKHQ9PT1lKXJldHVybiAwO2Zvcih2YXIgcj10Lmxlbmd0aCxuPWUubGVuZ3RoLGk9MCxvPU1hdGgubWluKHIsbik7aTxvOysraSlpZih0W2ldIT09ZVtpXSl7cj10W2ldLG49ZVtpXTticmVha31yZXR1cm4gcjxuPy0xOm48cj8xOjB9LHUuaXNFbmNvZGluZz1mdW5jdGlvbih0KXtzd2l0Y2goU3RyaW5nKHQpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sdS5jb25jYXQ9ZnVuY3Rpb24odCxlKXtpZighbyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PXQubGVuZ3RoKXJldHVybiB1LmFsbG9jKDApO3ZhciByO2lmKHZvaWQgMD09PWUpZm9yKGU9MCxyPTA7cjx0Lmxlbmd0aDsrK3IpZSs9dFtyXS5sZW5ndGg7dmFyIG49dS5hbGxvY1Vuc2FmZShlKSxpPTA7Zm9yKHI9MDtyPHQubGVuZ3RoOysrcil7dmFyIGE9dFtyXTtpZighdS5pc0J1ZmZlcihhKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7YS5jb3B5KG4saSksaSs9YS5sZW5ndGh9cmV0dXJuIG59LHUuYnl0ZUxlbmd0aD1wLHUucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCx1LnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxlbmd0aDtpZih0JTIhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzIik7Zm9yKHZhciBlPTA7ZTx0O2UrPTIpbSh0aGlzLGUsZSsxKTtyZXR1cm4gdGhpc30sdS5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5sZW5ndGg7aWYodCU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpO2Zvcih2YXIgZT0wO2U8dDtlKz00KW0odGhpcyxlLGUrMyksbSh0aGlzLGUrMSxlKzIpO3JldHVybiB0aGlzfSx1LnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxlbmd0aDtpZih0JTghPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKHZhciBlPTA7ZTx0O2UrPTgpbSh0aGlzLGUsZSs3KSxtKHRoaXMsZSsxLGUrNiksbSh0aGlzLGUrMixlKzUpLG0odGhpcyxlKzMsZSs0KTtyZXR1cm4gdGhpc30sdS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgdD0wfHRoaXMubGVuZ3RoO3JldHVybiAwPT09dD8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9qKHRoaXMsMCx0KTpnLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdS5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe2lmKCF1LmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PXR8fDA9PT11LmNvbXBhcmUodGhpcyx0KX0sdS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciB0PSIiLHI9ZS5JTlNQRUNUX01BWF9CWVRFUztyZXR1cm4gdGhpcy5sZW5ndGg+MCYmKHQ9dGhpcy50b1N0cmluZygiaGV4IiwwLHIpLm1hdGNoKC8uezJ9L2cpLmpvaW4oIiAiKSx0aGlzLmxlbmd0aD5yJiYodCs9IiAuLi4gIikpLCI8QnVmZmVyICIrdCsiPiJ9LHUucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24odCxlLHIsbixpKXtpZighdS5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7aWYodm9pZCAwPT09ZSYmKGU9MCksdm9pZCAwPT09ciYmKHI9dD90Lmxlbmd0aDowKSx2b2lkIDA9PT1uJiYobj0wKSx2b2lkIDA9PT1pJiYoaT10aGlzLmxlbmd0aCksZTwwfHxyPnQubGVuZ3RofHxuPDB8fGk+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKG4+PWkmJmU+PXIpcmV0dXJuIDA7aWYobj49aSlyZXR1cm4tMTtpZihlPj1yKXJldHVybiAxO2lmKHRoaXM9PT10KXJldHVybiAwO2Zvcih2YXIgbz0oaT4+Pj0wKS0obj4+Pj0wKSxhPShyPj4+PTApLShlPj4+PTApLHM9TWF0aC5taW4obyxhKSxjPXRoaXMuc2xpY2UobixpKSxmPXQuc2xpY2UoZSxyKSxsPTA7bDxzOysrbClpZihjW2xdIT09ZltsXSl7bz1jW2xdLGE9ZltsXTticmVha31yZXR1cm4gbzxhPy0xOmE8bz8xOjB9LHUucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZih0LGUscil9LHUucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB5KHRoaXMsdCxlLHIsITApfSx1LnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHkodGhpcyx0LGUsciwhMSl9LHUucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHZvaWQgMD09PWUpbj0idXRmOCIscj10aGlzLmxlbmd0aCxlPTA7ZWxzZSBpZih2b2lkIDA9PT1yJiYic3RyaW5nIj09dHlwZW9mIGUpbj1lLHI9dGhpcy5sZW5ndGgsZT0wO2Vsc2V7aWYoIWlzRmluaXRlKGUpKXRocm93IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTtlfD0wLGlzRmluaXRlKHIpPyhyfD0wLHZvaWQgMD09PW4mJihuPSJ1dGY4IikpOihuPXIscj12b2lkIDApfXZhciBpPXRoaXMubGVuZ3RoLWU7aWYoKHZvaWQgMD09PXJ8fHI+aSkmJihyPWkpLHQubGVuZ3RoPjAmJihyPDB8fGU8MCl8fGU+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7bnx8KG49InV0ZjgiKTtmb3IodmFyIG89ITE7Oylzd2l0Y2gobil7Y2FzZSJoZXgiOnJldHVybiB3KHRoaXMsdCxlLHIpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIGIodGhpcyx0LGUscik7Y2FzZSJhc2NpaSI6cmV0dXJuIF8odGhpcyx0LGUscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4geCh0aGlzLHQsZSxyKTtjYXNlImJhc2U2NCI6cmV0dXJuIEUodGhpcyx0LGUscik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBrKHRoaXMsdCxlLHIpO2RlZmF1bHQ6aWYobyl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pO249KCIiK24pLnRvTG93ZXJDYXNlKCksbz0hMH19LHUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07dmFyIFA9NDA5NjtmdW5jdGlvbiBTKHQsZSxyKXt2YXIgbj0iIjtyPU1hdGgubWluKHQubGVuZ3RoLHIpO2Zvcih2YXIgaT1lO2k8cjsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmdFtpXSk7cmV0dXJuIG59ZnVuY3Rpb24gUih0LGUscil7dmFyIG49IiI7cj1NYXRoLm1pbih0Lmxlbmd0aCxyKTtmb3IodmFyIGk9ZTtpPHI7KytpKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUodFtpXSk7cmV0dXJuIG59ZnVuY3Rpb24gJCh0LGUscil7dmFyIG49dC5sZW5ndGg7KCFlfHxlPDApJiYoZT0wKSwoIXJ8fHI8MHx8cj5uKSYmKHI9bik7Zm9yKHZhciBpPSIiLG89ZTtvPHI7KytvKWkrPUQodFtvXSk7cmV0dXJuIGl9ZnVuY3Rpb24gQSh0LGUscil7Zm9yKHZhciBuPXQuc2xpY2UoZSxyKSxpPSIiLG89MDtvPG4ubGVuZ3RoO28rPTIpaSs9U3RyaW5nLmZyb21DaGFyQ29kZShuW29dKzI1NipuW28rMV0pO3JldHVybiBpfWZ1bmN0aW9uIFQodCxlLHIpe2lmKHQlMSE9MHx8dDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgaXMgbm90IHVpbnQiKTtpZih0K2U+cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIEkodCxlLHIsbixpLG8pe2lmKCF1LmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZihlPml8fGU8byl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInZhbHVlIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7aWYocituPnQubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBCKHQsZSxyLG4pe2U8MCYmKGU9NjU1MzUrZSsxKTtmb3IodmFyIGk9MCxvPU1hdGgubWluKHQubGVuZ3RoLXIsMik7aTxvOysraSl0W3IraV09KGUmMjU1PDw4KihuP2k6MS1pKSk+Pj44KihuP2k6MS1pKX1mdW5jdGlvbiBGKHQsZSxyLG4pe2U8MCYmKGU9NDI5NDk2NzI5NStlKzEpO2Zvcih2YXIgaT0wLG89TWF0aC5taW4odC5sZW5ndGgtciw0KTtpPG87KytpKXRbcitpXT1lPj4+OCoobj9pOjMtaSkmMjU1fWZ1bmN0aW9uIFUodCxlLHIsbixpLG8pe2lmKHIrbj50Lmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYocjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBNKHQsZSxyLG4sbyl7cmV0dXJuIG98fFUodCwwLHIsNCksaS53cml0ZSh0LGUscixuLDIzLDQpLHIrNH1mdW5jdGlvbiBDKHQsZSxyLG4sbyl7cmV0dXJuIG98fFUodCwwLHIsOCksaS53cml0ZSh0LGUscixuLDUyLDgpLHIrOH11LnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbih0LGUpe3ZhciByLG49dGhpcy5sZW5ndGg7aWYoKHQ9fn50KTwwPyh0Kz1uKTwwJiYodD0wKTp0Pm4mJih0PW4pLChlPXZvaWQgMD09PWU/bjp+fmUpPDA/KGUrPW4pPDAmJihlPTApOmU+biYmKGU9biksZTx0JiYoZT10KSx1LlRZUEVEX0FSUkFZX1NVUFBPUlQpKHI9dGhpcy5zdWJhcnJheSh0LGUpKS5fX3Byb3RvX189dS5wcm90b3R5cGU7ZWxzZXt2YXIgaT1lLXQ7cj1uZXcgdShpLHZvaWQgMCk7Zm9yKHZhciBvPTA7bzxpOysrbylyW29dPXRoaXNbbyt0XX1yZXR1cm4gcn0sdS5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbih0LGUscil7dHw9MCxlfD0wLHJ8fFQodCxlLHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1t0XSxpPTEsbz0wOysrbzxlJiYoaSo9MjU2KTspbis9dGhpc1t0K29dKmk7cmV0dXJuIG59LHUucHJvdG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24odCxlLHIpe3R8PTAsZXw9MCxyfHxUKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbdCstLWVdLGk9MTtlPjAmJihpKj0yNTYpOyluKz10aGlzW3QrLS1lXSppO3JldHVybiBufSx1LnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8VCh0LDEsdGhpcy5sZW5ndGgpLHRoaXNbdF19LHUucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbih0LGUpe3JldHVybiBlfHxUKHQsMix0aGlzLmxlbmd0aCksdGhpc1t0XXx0aGlzW3QrMV08PDh9LHUucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbih0LGUpe3JldHVybiBlfHxUKHQsMix0aGlzLmxlbmd0aCksdGhpc1t0XTw8OHx0aGlzW3QrMV19LHUucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbih0LGUpe3JldHVybiBlfHxUKHQsNCx0aGlzLmxlbmd0aCksKHRoaXNbdF18dGhpc1t0KzFdPDw4fHRoaXNbdCsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbdCszXX0sdS5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV8fFQodCw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW3RdKyh0aGlzW3QrMV08PDE2fHRoaXNbdCsyXTw8OHx0aGlzW3QrM10pfSx1LnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24odCxlLHIpe3R8PTAsZXw9MCxyfHxUKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbdF0saT0xLG89MDsrK288ZSYmKGkqPTI1Nik7KW4rPXRoaXNbdCtvXSppO3JldHVybiBuPj0oaSo9MTI4KSYmKG4tPU1hdGgucG93KDIsOCplKSksbn0sdS5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKHQsZSxyKXt0fD0wLGV8PTAscnx8VCh0LGUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj1lLGk9MSxvPXRoaXNbdCstLW5dO24+MCYmKGkqPTI1Nik7KW8rPXRoaXNbdCstLW5dKmk7cmV0dXJuIG8+PShpKj0xMjgpJiYoby09TWF0aC5wb3coMiw4KmUpKSxvfSx1LnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbih0LGUpe3JldHVybiBlfHxUKHQsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbdF0/LTEqKDI1NS10aGlzW3RdKzEpOnRoaXNbdF19LHUucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKHQsZSl7ZXx8VCh0LDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbdF18dGhpc1t0KzFdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSx1LnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbih0LGUpe2V8fFQodCwyLHRoaXMubGVuZ3RoKTt2YXIgcj10aGlzW3QrMV18dGhpc1t0XTw8ODtyZXR1cm4gMzI3Njgmcj80Mjk0OTAxNzYwfHI6cn0sdS5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8VCh0LDQsdGhpcy5sZW5ndGgpLHRoaXNbdF18dGhpc1t0KzFdPDw4fHRoaXNbdCsyXTw8MTZ8dGhpc1t0KzNdPDwyNH0sdS5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8VCh0LDQsdGhpcy5sZW5ndGgpLHRoaXNbdF08PDI0fHRoaXNbdCsxXTw8MTZ8dGhpc1t0KzJdPDw4fHRoaXNbdCszXX0sdS5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8VCh0LDQsdGhpcy5sZW5ndGgpLGkucmVhZCh0aGlzLHQsITAsMjMsNCl9LHUucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV8fFQodCw0LHRoaXMubGVuZ3RoKSxpLnJlYWQodGhpcyx0LCExLDIzLDQpfSx1LnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8VCh0LDgsdGhpcy5sZW5ndGgpLGkucmVhZCh0aGlzLHQsITAsNTIsOCl9LHUucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbih0LGUpe3JldHVybiBlfHxUKHQsOCx0aGlzLmxlbmd0aCksaS5yZWFkKHRoaXMsdCwhMSw1Miw4KX0sdS5wcm90b3R5cGUud3JpdGVVSW50TEU9ZnVuY3Rpb24odCxlLHIsbil7KHQ9K3QsZXw9MCxyfD0wLG4pfHxJKHRoaXMsdCxlLHIsTWF0aC5wb3coMiw4KnIpLTEsMCk7dmFyIGk9MSxvPTA7Zm9yKHRoaXNbZV09MjU1JnQ7KytvPHImJihpKj0yNTYpOyl0aGlzW2Urb109dC9pJjI1NTtyZXR1cm4gZStyfSx1LnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbih0LGUscixuKXsodD0rdCxlfD0wLHJ8PTAsbil8fEkodGhpcyx0LGUscixNYXRoLnBvdygyLDgqciktMSwwKTt2YXIgaT1yLTEsbz0xO2Zvcih0aGlzW2UraV09MjU1JnQ7LS1pPj0wJiYobyo9MjU2KTspdGhpc1tlK2ldPXQvbyYyNTU7cmV0dXJuIGUrcn0sdS5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZXw9MCxyfHxJKHRoaXMsdCxlLDEsMjU1LDApLHUuVFlQRURfQVJSQVlfU1VQUE9SVHx8KHQ9TWF0aC5mbG9vcih0KSksdGhpc1tlXT0yNTUmdCxlKzF9LHUucHJvdG90eXBlLndyaXRlVUludDE2TEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGV8PTAscnx8SSh0aGlzLHQsZSwyLDY1NTM1LDApLHUuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tlXT0yNTUmdCx0aGlzW2UrMV09dD4+PjgpOkIodGhpcyx0LGUsITApLGUrMn0sdS5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZXw9MCxyfHxJKHRoaXMsdCxlLDIsNjU1MzUsMCksdS5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2VdPXQ+Pj44LHRoaXNbZSsxXT0yNTUmdCk6Qih0aGlzLHQsZSwhMSksZSsyfSx1LnByb3RvdHlwZS53cml0ZVVJbnQzMkxFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlfD0wLHJ8fEkodGhpcyx0LGUsNCw0Mjk0OTY3Mjk1LDApLHUuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tlKzNdPXQ+Pj4yNCx0aGlzW2UrMl09dD4+PjE2LHRoaXNbZSsxXT10Pj4+OCx0aGlzW2VdPTI1NSZ0KTpGKHRoaXMsdCxlLCEwKSxlKzR9LHUucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGV8PTAscnx8SSh0aGlzLHQsZSw0LDQyOTQ5NjcyOTUsMCksdS5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2VdPXQ+Pj4yNCx0aGlzW2UrMV09dD4+PjE2LHRoaXNbZSsyXT10Pj4+OCx0aGlzW2UrM109MjU1JnQpOkYodGhpcyx0LGUsITEpLGUrNH0sdS5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbih0LGUscixuKXtpZih0PSt0LGV8PTAsIW4pe3ZhciBpPU1hdGgucG93KDIsOCpyLTEpO0kodGhpcyx0LGUscixpLTEsLWkpfXZhciBvPTAsYT0xLHM9MDtmb3IodGhpc1tlXT0yNTUmdDsrK288ciYmKGEqPTI1Nik7KXQ8MCYmMD09PXMmJjAhPT10aGlzW2Urby0xXSYmKHM9MSksdGhpc1tlK29dPSh0L2E+PjApLXMmMjU1O3JldHVybiBlK3J9LHUucHJvdG90eXBlLndyaXRlSW50QkU9ZnVuY3Rpb24odCxlLHIsbil7aWYodD0rdCxlfD0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTtJKHRoaXMsdCxlLHIsaS0xLC1pKX12YXIgbz1yLTEsYT0xLHM9MDtmb3IodGhpc1tlK29dPTI1NSZ0Oy0tbz49MCYmKGEqPTI1Nik7KXQ8MCYmMD09PXMmJjAhPT10aGlzW2UrbysxXSYmKHM9MSksdGhpc1tlK29dPSh0L2E+PjApLXMmMjU1O3JldHVybiBlK3J9LHUucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZXw9MCxyfHxJKHRoaXMsdCxlLDEsMTI3LC0xMjgpLHUuVFlQRURfQVJSQVlfU1VQUE9SVHx8KHQ9TWF0aC5mbG9vcih0KSksdDwwJiYodD0yNTUrdCsxKSx0aGlzW2VdPTI1NSZ0LGUrMX0sdS5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlfD0wLHJ8fEkodGhpcyx0LGUsMiwzMjc2NywtMzI3NjgpLHUuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tlXT0yNTUmdCx0aGlzW2UrMV09dD4+PjgpOkIodGhpcyx0LGUsITApLGUrMn0sdS5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlfD0wLHJ8fEkodGhpcyx0LGUsMiwzMjc2NywtMzI3NjgpLHUuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tlXT10Pj4+OCx0aGlzW2UrMV09MjU1JnQpOkIodGhpcyx0LGUsITEpLGUrMn0sdS5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlfD0wLHJ8fEkodGhpcyx0LGUsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx1LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbZV09MjU1JnQsdGhpc1tlKzFdPXQ+Pj44LHRoaXNbZSsyXT10Pj4+MTYsdGhpc1tlKzNdPXQ+Pj4yNCk6Rih0aGlzLHQsZSwhMCksZSs0fSx1LnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGV8PTAscnx8SSh0aGlzLHQsZSw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHQ8MCYmKHQ9NDI5NDk2NzI5NSt0KzEpLHUuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tlXT10Pj4+MjQsdGhpc1tlKzFdPXQ+Pj4xNix0aGlzW2UrMl09dD4+PjgsdGhpc1tlKzNdPTI1NSZ0KTpGKHRoaXMsdCxlLCExKSxlKzR9LHUucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIE0odGhpcyx0LGUsITAscil9LHUucHJvdG90eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIE0odGhpcyx0LGUsITEscil9LHUucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBDKHRoaXMsdCxlLCEwLHIpfSx1LnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gQyh0aGlzLHQsZSwhMSxyKX0sdS5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0LGUscixuKXtpZihyfHwocj0wKSxufHwwPT09bnx8KG49dGhpcy5sZW5ndGgpLGU+PXQubGVuZ3RoJiYoZT10Lmxlbmd0aCksZXx8KGU9MCksbj4wJiZuPHImJihuPXIpLG49PT1yKXJldHVybiAwO2lmKDA9PT10Lmxlbmd0aHx8MD09PXRoaXMubGVuZ3RoKXJldHVybiAwO2lmKGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKHI8MHx8cj49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNvdXJjZVN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZihuPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNvdXJjZUVuZCBvdXQgb2YgYm91bmRzIik7bj50aGlzLmxlbmd0aCYmKG49dGhpcy5sZW5ndGgpLHQubGVuZ3RoLWU8bi1yJiYobj10Lmxlbmd0aC1lK3IpO3ZhciBpLG89bi1yO2lmKHRoaXM9PT10JiZyPGUmJmU8bilmb3IoaT1vLTE7aT49MDstLWkpdFtpK2VdPXRoaXNbaStyXTtlbHNlIGlmKG88MWUzfHwhdS5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcihpPTA7aTxvOysraSl0W2krZV09dGhpc1tpK3JdO2Vsc2UgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwodCx0aGlzLnN1YmFycmF5KHIscitvKSxlKTtyZXR1cm4gb30sdS5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbih0LGUscixuKXtpZigic3RyaW5nIj09dHlwZW9mIHQpe2lmKCJzdHJpbmciPT10eXBlb2YgZT8obj1lLGU9MCxyPXRoaXMubGVuZ3RoKToic3RyaW5nIj09dHlwZW9mIHImJihuPXIscj10aGlzLmxlbmd0aCksMT09PXQubGVuZ3RoKXt2YXIgaT10LmNoYXJDb2RlQXQoMCk7aTwyNTYmJih0PWkpfWlmKHZvaWQgMCE9PW4mJiJzdHJpbmciIT10eXBlb2Ygbil0aHJvdyBuZXcgVHlwZUVycm9yKCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nIik7aWYoInN0cmluZyI9PXR5cGVvZiBuJiYhdS5pc0VuY29kaW5nKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrbil9ZWxzZSJudW1iZXIiPT10eXBlb2YgdCYmKHQmPTI1NSk7aWYoZTwwfHx0aGlzLmxlbmd0aDxlfHx0aGlzLmxlbmd0aDxyKXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihyPD1lKXJldHVybiB0aGlzO3ZhciBvO2lmKGU+Pj49MCxyPXZvaWQgMD09PXI/dGhpcy5sZW5ndGg6cj4+PjAsdHx8KHQ9MCksIm51bWJlciI9PXR5cGVvZiB0KWZvcihvPWU7bzxyOysrbyl0aGlzW29dPXQ7ZWxzZXt2YXIgYT11LmlzQnVmZmVyKHQpP3Q6eihuZXcgdSh0LG4pLnRvU3RyaW5nKCkpLHM9YS5sZW5ndGg7Zm9yKG89MDtvPHItZTsrK28pdGhpc1tvK2VdPWFbbyVzXX1yZXR1cm4gdGhpc307dmFyIE49L1teK1wvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24gRCh0KXtyZXR1cm4gdDwxNj8iMCIrdC50b1N0cmluZygxNik6dC50b1N0cmluZygxNil9ZnVuY3Rpb24geih0LGUpe3ZhciByO2U9ZXx8MS8wO2Zvcih2YXIgbj10Lmxlbmd0aCxpPW51bGwsbz1bXSxhPTA7YTxuOysrYSl7aWYoKHI9dC5jaGFyQ29kZUF0KGEpKT41NTI5NSYmcjw1NzM0NCl7aWYoIWkpe2lmKHI+NTYzMTkpeyhlLT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihhKzE9PT1uKXsoZS09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aT1yO2NvbnRpbnVlfWlmKHI8NTYzMjApeyhlLT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KSxpPXI7Y29udGludWV9cj02NTUzNisoaS01NTI5Njw8MTB8ci01NjMyMCl9ZWxzZSBpJiYoZS09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7aWYoaT1udWxsLHI8MTI4KXtpZigoZS09MSk8MClicmVhaztvLnB1c2gocil9ZWxzZSBpZihyPDIwNDgpe2lmKChlLT0yKTwwKWJyZWFrO28ucHVzaChyPj42fDE5Miw2MyZyfDEyOCl9ZWxzZSBpZihyPDY1NTM2KXtpZigoZS09Myk8MClicmVhaztvLnB1c2gocj4+MTJ8MjI0LHI+PjYmNjN8MTI4LDYzJnJ8MTI4KX1lbHNle2lmKCEocjwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKChlLT00KTwwKWJyZWFrO28ucHVzaChyPj4xOHwyNDAscj4+MTImNjN8MTI4LHI+PjYmNjN8MTI4LDYzJnJ8MTI4KX19cmV0dXJuIG99ZnVuY3Rpb24gSCh0KXtyZXR1cm4gbi50b0J5dGVBcnJheShmdW5jdGlvbih0KXtpZigodD1mdW5jdGlvbih0KXtyZXR1cm4gdC50cmltP3QudHJpbSgpOnQucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfSh0KS5yZXBsYWNlKE4sIiIpKS5sZW5ndGg8MilyZXR1cm4iIjtmb3IoO3QubGVuZ3RoJTQhPTA7KXQrPSI9IjtyZXR1cm4gdH0odCkpfWZ1bmN0aW9uIEwodCxlLHIsbil7Zm9yKHZhciBpPTA7aTxuJiYhKGkrcj49ZS5sZW5ndGh8fGk+PXQubGVuZ3RoKTsrK2kpZVtpK3JdPXRbaV07cmV0dXJuIGl9fSkuY2FsbCh0aGlzLHIoNzYpKX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24odCl7ci5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgbj1yKDApLGk9cig0MCk7ZnVuY3Rpb24gbyh0KXtzd2l0Y2godCl7Y2FzZSIwNDAwMDAiOnJldHVybiJ0cmVlIjtjYXNlIjEwMDY0NCI6Y2FzZSIxMDA3NTUiOmNhc2UiMTIwMDAwIjpyZXR1cm4iYmxvYiI7Y2FzZSIxNjAwMDAiOnJldHVybiJjb21taXQifXRocm93IG5ldyBuLmIobi5hLkludGVybmFsRmFpbCx7bWVzc2FnZTpgVW5leHBlY3RlZCBHaXRUcmVlIGVudHJ5IG1vZGU6ICR7dH1gfSl9ZnVuY3Rpb24gYSh0KXtyZXR1cm4hdC5vaWQmJnQuc2hhJiYodC5vaWQ9dC5zaGEpLHQubW9kZT1mdW5jdGlvbih0KXtpZigibnVtYmVyIj09dHlwZW9mIHQmJih0PXQudG9TdHJpbmcoOCkpLHQubWF0Y2goL14wPzQuKi8pKXJldHVybiIwNDAwMDAiO2lmKHQubWF0Y2goL14xMDA2LiovKSlyZXR1cm4iMTAwNjQ0IjtpZih0Lm1hdGNoKC9eMTAwNy4qLykpcmV0dXJuIjEwMDc1NSI7aWYodC5tYXRjaCgvXjEyMC4qLykpcmV0dXJuIjEyMDAwMCI7aWYodC5tYXRjaCgvXjE2MC4qLykpcmV0dXJuIjE2MDAwMCI7dGhyb3cgbmV3IG4uYihuLmEuSW50ZXJuYWxGYWlsLHttZXNzYWdlOmBDb3VsZCBub3QgdW5kZXJzdGFuZCBmaWxlIG1vZGU6ICR7dH1gfSl9KHQubW9kZSksdC50eXBlfHwodC50eXBlPSJibG9iIiksdH1jbGFzcyBze2NvbnN0cnVjdG9yKGUpe2lmKHQuaXNCdWZmZXIoZSkpdGhpcy5fZW50cmllcz1mdW5jdGlvbih0KXtjb25zdCBlPVtdO2xldCByPTA7Zm9yKDtyPHQubGVuZ3RoOyl7Y29uc3QgaT10LmluZGV4T2YoMzIscik7aWYoLTE9PT1pKXRocm93IG5ldyBuLmIobi5hLkludGVybmFsRmFpbCx7bWVzc2FnZTpgR2l0VHJlZTogRXJyb3IgcGFyc2luZyBidWZmZXIgYXQgYnl0ZSBsb2NhdGlvbiAke3J9OiBDb3VsZCBub3QgZmluZCB0aGUgbmV4dCBzcGFjZSBjaGFyYWN0ZXIuYH0pO2NvbnN0IGE9dC5pbmRleE9mKDAscik7aWYoLTE9PT1hKXRocm93IG5ldyBuLmIobi5hLkludGVybmFsRmFpbCx7bWVzc2FnZTpgR2l0VHJlZTogRXJyb3IgcGFyc2luZyBidWZmZXIgYXQgYnl0ZSBsb2NhdGlvbiAke3J9OiBDb3VsZCBub3QgZmluZCB0aGUgbmV4dCBudWxsIGNoYXJhY3Rlci5gfSk7bGV0IHM9dC5zbGljZShyLGkpLnRvU3RyaW5nKCJ1dGY4Iik7IjQwMDAwIj09PXMmJihzPSIwNDAwMDAiKTtjb25zdCB1PW8ocyksYz10LnNsaWNlKGkrMSxhKS50b1N0cmluZygidXRmOCIpLGY9dC5zbGljZShhKzEsYSsyMSkudG9TdHJpbmcoImhleCIpO3I9YSsyMSxlLnB1c2goe21vZGU6cyxwYXRoOmMsb2lkOmYsdHlwZTp1fSl9cmV0dXJuIGV9KGUpLHRoaXMuX2VudHJpZXMuc29ydChpLmEpO2Vsc2V7aWYoIUFycmF5LmlzQXJyYXkoZSkpdGhyb3cgbmV3IG4uYihuLmEuSW50ZXJuYWxGYWlsLHttZXNzYWdlOiJpbnZhbGlkIHR5cGUgcGFzc2VkIHRvIEdpdFRyZWUgY29uc3RydWN0b3IifSk7dGhpcy5fZW50cmllcz1lLm1hcChhKX19c3RhdGljIGZyb20odCl7cmV0dXJuIG5ldyBzKHQpfXJlbmRlcigpe3JldHVybiB0aGlzLl9lbnRyaWVzLm1hcCh0PT5gJHt0Lm1vZGV9ICR7dC50eXBlfSAke3Qub2lkfSAgICAke3QucGF0aH1gKS5qb2luKCJcbiIpfXRvT2JqZWN0KCl7cmV0dXJuIHQuY29uY2F0KHRoaXMuX2VudHJpZXMubWFwKGU9Pntjb25zdCByPXQuZnJvbShlLm1vZGUucmVwbGFjZSgvXjAvLCIiKSksbj10LmZyb20oIiAiKSxpPXQuZnJvbShlLnBhdGgsInV0ZjgiKSxvPXQuZnJvbShbMF0pLGE9dC5mcm9tKGUub2lkLCJoZXgiKTtyZXR1cm4gdC5jb25jYXQoW3IsbixpLG8sYV0pfSkpfWVudHJpZXMoKXtyZXR1cm4gdGhpcy5fZW50cmllc30qW1N5bWJvbC5pdGVyYXRvcl0oKXtmb3IoY29uc3QgdCBvZiB0aGlzLl9lbnRyaWVzKXlpZWxkIHR9fX0pLmNhbGwodGhpcyxyKDEwKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBvfSk7dmFyIG49cigzNCksaT1yLm4obik7ZnVuY3Rpb24gbyh0KXtyZXR1cm4obmV3IGkuYSkudXBkYXRlKHQpLmRpZ2VzdCgiaGV4Iil9fSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoNDQpLGk9ci5uKG4pLG89cigxKSxhPXIoNjUpO2NvbnN0IHM9KHQsZSk9Pntmb3IoY29uc3QgciBvZiB0KWUuaGFzKHIpfHxlLnNldChyLG5ldyBNYXApLGU9ZS5nZXQocik7cmV0dXJuIGV9O2NsYXNzIHV7Y29uc3RydWN0b3IoKXt0aGlzLl9yb290PW5ldyBNYXB9c2V0KHQsZSl7Y29uc3Qgcj10LnBvcCgpO3ModCx0aGlzLl9yb290KS5zZXQocixlKX1nZXQodCl7Y29uc3QgZT10LnBvcCgpO3JldHVybiBzKHQsdGhpcy5fcm9vdCkuZ2V0KGUpfWhhcyh0KXtjb25zdCBlPXQucG9wKCk7cmV0dXJuIHModCx0aGlzLl9yb290KS5oYXMoZSl9fXZhciBjPXIoNDIpO2Z1bmN0aW9uIGYodCxlLHIsbixpLG8sYSl7dHJ5e3ZhciBzPXRbb10oYSksdT1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UodSk6UHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4obixpKX1mdW5jdGlvbiBsKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4saSl7dmFyIG89dC5hcHBseShlLHIpO2Z1bmN0aW9uIGEodCl7ZihvLG4saSxhLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7ZihvLG4saSxhLHMsInRocm93Iix0KX1hKHZvaWQgMCl9KX19ci5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHl9KTtjb25zdCBkPW5ldyB1LGg9bmV3IHU7bGV0IHA9bnVsbDtmdW5jdGlvbiBnKCl7cmV0dXJuKGc9bChmdW5jdGlvbioodCxlKXtjb25zdCByPXlpZWxkIHQubHN0YXQoZSksbj15aWVsZCB0LnJlYWQoZSksaT1hLmEuZnJvbShuKTtkLnNldChbdCxlXSxpKSxoLnNldChbdCxlXSxyKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gbSgpe3JldHVybihtPWwoZnVuY3Rpb24qKHQsZSl7Y29uc3Qgcj1oLmdldChbdCxlXSk7aWYodm9pZCAwPT09cilyZXR1cm4hMDtjb25zdCBuPXlpZWxkIHQubHN0YXQoZSk7cmV0dXJuIG51bGwhPT1yJiYobnVsbCE9PW4mJk9iamVjdChjLmEpKHIsbikpfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jbGFzcyB5e3N0YXRpYyBhY3F1aXJlKHtmczp0LGdpdGRpcjplfSxyKXtyZXR1cm4gbChmdW5jdGlvbiooKXtjb25zdCBuPW5ldyBvLmEodCksYT1gJHtlfS9pbmRleGA7bGV0IHM7cmV0dXJuIG51bGw9PT1wJiYocD1uZXcgaS5hKHttYXhQZW5kaW5nOjEvMH0pKSx5aWVsZCBwLmFjcXVpcmUoYSxsKGZ1bmN0aW9uKigpeyh5aWVsZCBmdW5jdGlvbih0LGUpe3JldHVybiBtLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0obixhKSkmJih5aWVsZCBmdW5jdGlvbih0LGUpe3JldHVybiBnLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0obixhKSk7Y29uc3QgdD1kLmdldChbbixhXSk7aWYocz15aWVsZCByKHQpLHQuX2RpcnR5KXtjb25zdCBlPXQudG9PYmplY3QoKTt5aWVsZCBuLndyaXRlKGEsZSksaC5zZXQoW24sYV0seWllbGQgbi5sc3RhdChhKSksdC5fZGlydHk9ITF9fSkpLHN9KSgpfX19LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdD0odD0odD10LnJlcGxhY2UoL1xyL2csIiIpKS5yZXBsYWNlKC9eXG4rLywiIikpLnJlcGxhY2UoL1xuKyQvLCIiKSsiXG4ifXIuZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBufSl9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKHQpe3IuZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBjfSk7dmFyIG49cigwKSxpPXIoNDUpLG89cigxNCksYT1yKDM2KTtmdW5jdGlvbiBzKHQsZSxyLG4saSxvLGEpe3RyeXt2YXIgcz10W29dKGEpLHU9cy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCByKHQpfXMuZG9uZT9lKHUpOlByb21pc2UucmVzb2x2ZSh1KS50aGVuKG4saSl9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLGkpe3ZhciBvPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBhKHQpe3MobyxuLGksYSx1LCJuZXh0Iix0KX1mdW5jdGlvbiB1KHQpe3MobyxuLGksYSx1LCJ0aHJvdyIsdCl9YSh2b2lkIDApfSl9fWNsYXNzIGN7Y29uc3RydWN0b3IoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXRoaXMuX3RhZz1lO2Vsc2UgaWYodC5pc0J1ZmZlcihlKSl0aGlzLl90YWc9ZS50b1N0cmluZygidXRmOCIpO2Vsc2V7aWYoIm9iamVjdCIhPXR5cGVvZiBlKXRocm93IG5ldyBuLmIobi5hLkludGVybmFsRmFpbCx7bWVzc2FnZToiaW52YWxpZCB0eXBlIHBhc3NlZCB0byBHaXRBbm5vdGF0ZWRUYWcgY29uc3RydWN0b3IifSk7dGhpcy5fdGFnPWMucmVuZGVyKGUpfX1zdGF0aWMgZnJvbSh0KXtyZXR1cm4gbmV3IGModCl9c3RhdGljIHJlbmRlcih0KXtyZXR1cm5gb2JqZWN0ICR7dC5vYmplY3R9XG50eXBlICR7dC50eXBlfVxudGFnICR7dC50YWd9XG50YWdnZXIgJHtPYmplY3QoaS5hKSh0LnRhZ2dlcil9XG5cbiR7dC5tZXNzYWdlfVxuJHt0LnNpZ25hdHVyZT90LnNpZ25hdHVyZToiIn1gfWp1c3RIZWFkZXJzKCl7cmV0dXJuIHRoaXMuX3RhZy5zbGljZSgwLHRoaXMuX3RhZy5pbmRleE9mKCJcblxuIikpfW1lc3NhZ2UoKXtjb25zdCB0PXRoaXMud2l0aG91dFNpZ25hdHVyZSgpO3JldHVybiB0LnNsaWNlKHQuaW5kZXhPZigiXG5cbiIpKzIpfXBhcnNlKCl7cmV0dXJuIE9iamVjdC5hc3NpZ24odGhpcy5oZWFkZXJzKCkse21lc3NhZ2U6dGhpcy5tZXNzYWdlKCksc2lnbmF0dXJlOnRoaXMuc2lnbmF0dXJlKCl9KX1yZW5kZXIoKXtyZXR1cm4gdGhpcy5fdGFnfWhlYWRlcnMoKXtjb25zdCB0PXRoaXMuanVzdEhlYWRlcnMoKS5zcGxpdCgiXG4iKSxlPVtdO2Zvcihjb25zdCByIG9mIHQpIiAiPT09clswXT9lW2UubGVuZ3RoLTFdKz0iXG4iK3Iuc2xpY2UoMSk6ZS5wdXNoKHIpO2NvbnN0IHI9e307Zm9yKGNvbnN0IHQgb2YgZSl7Y29uc3QgZT10LnNsaWNlKDAsdC5pbmRleE9mKCIgIikpLG49dC5zbGljZSh0LmluZGV4T2YoIiAiKSsxKTtBcnJheS5pc0FycmF5KHJbZV0pP3JbZV0ucHVzaChuKTpyW2VdPW59cmV0dXJuIHIudGFnZ2VyJiYoci50YWdnZXI9T2JqZWN0KGEuYSkoci50YWdnZXIpKSxyLmNvbW1pdHRlciYmKHIuY29tbWl0dGVyPU9iamVjdChhLmEpKHIuY29tbWl0dGVyKSkscn13aXRob3V0U2lnbmF0dXJlKCl7Y29uc3QgdD1PYmplY3Qoby5hKSh0aGlzLl90YWcpO3JldHVybi0xPT09dC5pbmRleE9mKCJcbi0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tIik/dDp0LnNsaWNlKDAsdC5sYXN0SW5kZXhPZigiXG4tLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLSIpKX1zaWduYXR1cmUoKXtjb25zdCB0PXRoaXMuX3RhZy5zbGljZSh0aGlzLl90YWcuaW5kZXhPZigiLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0iKSx0aGlzLl90YWcuaW5kZXhPZigiLS0tLS1FTkQgUEdQIFNJR05BVFVSRS0tLS0tIikrIi0tLS0tRU5EIFBHUCBTSUdOQVRVUkUtLS0tLSIubGVuZ3RoKTtyZXR1cm4gT2JqZWN0KG8uYSkodCl9dG9PYmplY3QoKXtyZXR1cm4gdC5mcm9tKHRoaXMuX3RhZywidXRmOCIpfXN0YXRpYyBzaWduKHQsZSxyKXtyZXR1cm4gdShmdW5jdGlvbiooKXtjb25zdCBuPXQud2l0aG91dFNpZ25hdHVyZSgpKyJcbiI7bGV0e3NpZ25hdHVyZTppfT15aWVsZCBlLnNpZ24oe3BheWxvYWQ6bixzZWNyZXRLZXk6cn0pO2NvbnN0IGE9bisoaT1PYmplY3Qoby5hKShpKSk7cmV0dXJuIGMuZnJvbShhKX0pKCl9c3RhdGljIHZlcmlmeSh0LGUscil7cmV0dXJuIHUoZnVuY3Rpb24qKCl7Y29uc3Qgbj10LndpdGhvdXRTaWduYXR1cmUoKSsiXG4iLGk9dC5zaWduYXR1cmUoKTtyZXR1cm4gZS52ZXJpZnkoe3BheWxvYWQ6bixwdWJsaWNLZXk6cixzaWduYXR1cmU6aX0pfSkoKX19fSkuY2FsbCh0aGlzLHIoMTApLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKHQpe3IuZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIG49cigwKTtjbGFzcyBpe3N0YXRpYyB3cmFwKHt0eXBlOmUsb2JqZWN0OnJ9KXtyZXR1cm4gdC5jb25jYXQoW3QuZnJvbShgJHtlfSAke3IuYnl0ZUxlbmd0aC50b1N0cmluZygpfVwwYCksdC5mcm9tKHIpXSl9c3RhdGljIHVud3JhcChlKXtjb25zdCByPWUuaW5kZXhPZigzMiksaT1lLmluZGV4T2YoMCksbz1lLnNsaWNlKDAscikudG9TdHJpbmcoInV0ZjgiKSxhPWUuc2xpY2UocisxLGkpLnRvU3RyaW5nKCJ1dGY4Iikscz1lLmxlbmd0aC0oaSsxKTtpZihwYXJzZUludChhKSE9PXMpdGhyb3cgbmV3IG4uYihuLmEuSW50ZXJuYWxGYWlsLHttZXNzYWdlOmBMZW5ndGggbWlzbWF0Y2g6IGV4cGVjdGVkICR7YX0gYnl0ZXMgYnV0IGdvdCAke3N9IGluc3RlYWQuYH0pO3JldHVybnt0eXBlOm8sb2JqZWN0OnQuZnJvbShlLnNsaWNlKGkrMSkpfX19fSkuY2FsbCh0aGlzLHIoMTApLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7Y29uc3Qgbj0odCxlKT0+KGZ1bmN0aW9uKC4uLnIpe3JldHVybiBuZXcoMCxlLnByb21pc2VNb2R1bGUpKChuLGkpPT57ZS5tdWx0aUFyZ3M/ci5wdXNoKCguLi50KT0+e2UuZXJyb3JGaXJzdD90WzBdP2kodCk6KHQuc2hpZnQoKSxuKHQpKTpuKHQpfSk6ZS5lcnJvckZpcnN0P3IucHVzaCgodCxlKT0+e3Q/aSh0KTpuKGUpfSk6ci5wdXNoKG4pLHQuYXBwbHkodGhpcyxyKX0pfSk7dC5leHBvcnRzPSh0LGUpPT57ZT1PYmplY3QuYXNzaWduKHtleGNsdWRlOlsvLisoU3luY3xTdHJlYW0pJC9dLGVycm9yRmlyc3Q6ITAscHJvbWlzZU1vZHVsZTpQcm9taXNlfSxlKTtjb25zdCByPXR5cGVvZiB0O2lmKG51bGw9PT10fHwib2JqZWN0IiE9PXImJiJmdW5jdGlvbiIhPT1yKXRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIFxgaW5wdXRcYCB0byBiZSBhIFxgRnVuY3Rpb25cYCBvciBcYE9iamVjdFxgLCBnb3QgXGAke251bGw9PT10PyJudWxsIjpyfVxgYCk7Y29uc3QgaT10PT57Y29uc3Qgcj1lPT4ic3RyaW5nIj09dHlwZW9mIGU/dD09PWU6ZS50ZXN0KHQpO3JldHVybiBlLmluY2x1ZGU/ZS5pbmNsdWRlLnNvbWUocik6IWUuZXhjbHVkZS5zb21lKHIpfTtsZXQgbztvPSJmdW5jdGlvbiI9PT1yP2Z1bmN0aW9uKC4uLnIpe3JldHVybiBlLmV4Y2x1ZGVNYWluP3QoLi4ucik6bih0LGUpLmFwcGx5KHRoaXMscil9Ok9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpKTtmb3IoY29uc3QgciBpbiB0KXtjb25zdCBhPXRbcl07b1tyXT0iZnVuY3Rpb24iPT10eXBlb2YgYSYmaShyKT9uKGEsZSk6YX1yZXR1cm4gb319LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307KDAscigyNSkuYXNzaWduKShuLHIoMTA4KSxyKDExMSkscig4MikpLHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBufSksci5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTtjb25zdCBuPVN5bWJvbCgiR2l0V2Fsa0JldGExU3ltYm9sIiksaT1TeW1ib2woIkdpdFdhbGtCZXRhMlN5bWJvbCIpfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBhfSk7dmFyIG49cig1NCk7Y29uc3QgaT0yKiozMjtmdW5jdGlvbiBvKHQsZSxyLG4pe2lmKHZvaWQgMCE9PXQmJnZvaWQgMCE9PWUpcmV0dXJuW3QsZV07dm9pZCAwPT09ciYmKHI9bi52YWx1ZU9mKCkpO2NvbnN0IGk9TWF0aC5mbG9vcihyLzFlMyk7cmV0dXJuW2ksMWU2KihyLTFlMyppKV19ZnVuY3Rpb24gYSh0KXtjb25zdFtlLHJdPW8odC5jdGltZVNlY29uZHMsdC5jdGltZU5hbm9zZWNvbmRzLHQuY3RpbWVNcyx0LmN0aW1lKSxbYSxzXT1vKHQubXRpbWVTZWNvbmRzLHQubXRpbWVOYW5vc2Vjb25kcyx0Lm10aW1lTXMsdC5tdGltZSk7cmV0dXJue2N0aW1lU2Vjb25kczplJWksY3RpbWVOYW5vc2Vjb25kczpyJWksbXRpbWVTZWNvbmRzOmElaSxtdGltZU5hbm9zZWNvbmRzOnMlaSxkZXY6dC5kZXYlaSxpbm86dC5pbm8laSxtb2RlOk9iamVjdChuLmEpKHQubW9kZSVpKSx1aWQ6dC51aWQlaSxnaWQ6dC5naWQlaSxzaXplOnQuc2l6ZT4tMT90LnNpemUlaTowfX19LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG59KTtjbGFzcyBue2NvbnN0cnVjdG9yKHQpe3RoaXMuYnVmZmVyPXQsdGhpcy5fc3RhcnQ9MH1lb2YoKXtyZXR1cm4gdGhpcy5fc3RhcnQ+PXRoaXMuYnVmZmVyLmxlbmd0aH10ZWxsKCl7cmV0dXJuIHRoaXMuX3N0YXJ0fXNlZWsodCl7dGhpcy5fc3RhcnQ9dH1zbGljZSh0KXtjb25zdCBlPXRoaXMuYnVmZmVyLnNsaWNlKHRoaXMuX3N0YXJ0LHRoaXMuX3N0YXJ0K3QpO3JldHVybiB0aGlzLl9zdGFydCs9dCxlfXRvU3RyaW5nKHQsZSl7Y29uc3Qgcj10aGlzLmJ1ZmZlci50b1N0cmluZyh0LHRoaXMuX3N0YXJ0LHRoaXMuX3N0YXJ0K2UpO3JldHVybiB0aGlzLl9zdGFydCs9ZSxyfXdyaXRlKHQsZSxyKXtjb25zdCBuPXRoaXMuYnVmZmVyLndyaXRlKHQsdGhpcy5fc3RhcnQsZSxyKTtyZXR1cm4gdGhpcy5fc3RhcnQrPWUsbn1yZWFkVUludDgoKXtjb25zdCB0PXRoaXMuYnVmZmVyLnJlYWRVSW50OCh0aGlzLl9zdGFydCk7cmV0dXJuIHRoaXMuX3N0YXJ0Kz0xLHR9d3JpdGVVSW50OCh0KXtjb25zdCBlPXRoaXMuYnVmZmVyLndyaXRlVUludDgodCx0aGlzLl9zdGFydCk7cmV0dXJuIHRoaXMuX3N0YXJ0Kz0xLGV9cmVhZFVJbnQxNkJFKCl7Y29uc3QgdD10aGlzLmJ1ZmZlci5yZWFkVUludDE2QkUodGhpcy5fc3RhcnQpO3JldHVybiB0aGlzLl9zdGFydCs9Mix0fXdyaXRlVUludDE2QkUodCl7Y29uc3QgZT10aGlzLmJ1ZmZlci53cml0ZVVJbnQxNkJFKHQsdGhpcy5fc3RhcnQpO3JldHVybiB0aGlzLl9zdGFydCs9MixlfXJlYWRVSW50MzJCRSgpe2NvbnN0IHQ9dGhpcy5idWZmZXIucmVhZFVJbnQzMkJFKHRoaXMuX3N0YXJ0KTtyZXR1cm4gdGhpcy5fc3RhcnQrPTQsdH13cml0ZVVJbnQzMkJFKHQpe2NvbnN0IGU9dGhpcy5idWZmZXIud3JpdGVVSW50MzJCRSh0LHRoaXMuX3N0YXJ0KTtyZXR1cm4gdGhpcy5fc3RhcnQrPTQsZX19fSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbih0KXtyLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gZn0pO3ZhciBuPXIoMTgpLGk9ci5uKG4pLG89cigxKSxhPXIoMTYpLHM9cig5MyksdT1yKDEyKTtmdW5jdGlvbiBjKHQsZSxyLG4saSxvLGEpe3RyeXt2YXIgcz10W29dKGEpLHU9cy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCByKHQpfXMuZG9uZT9lKHUpOlByb21pc2UucmVzb2x2ZSh1KS50aGVuKG4saSl9ZnVuY3Rpb24gZih0KXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gbCgpe3ZhciBlO3JldHVybiBlPWZ1bmN0aW9uKih7ZnM6ZSxnaXRkaXI6cix0eXBlOm4sb2JqZWN0OmMsZm9ybWF0OmY9ImNvbnRlbnQiLG9pZDpsLGRyeVJ1bjpkPSExfSl7aWYoImRlZmxhdGVkIiE9PWYmJigid3JhcHBlZCIhPT1mJiYoYz1hLmEud3JhcCh7dHlwZTpuLG9iamVjdDpjfSkpLGw9T2JqZWN0KHUuYSkoYyksYz10LmZyb20oaS5hLmRlZmxhdGUoYykpKSwhZCl7Y29uc3QgdD1uZXcgby5hKGUpO3lpZWxkIE9iamVjdChzLmEpKHtmczp0LGdpdGRpcjpyLG9iamVjdDpjLGZvcm1hdDoiZGVmbGF0ZWQiLG9pZDpsfSl9cmV0dXJuIGx9LChsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obixpKXt2YXIgbz1lLmFwcGx5KHQscik7ZnVuY3Rpb24gYSh0KXtjKG8sbixpLGEscywibmV4dCIsdCl9ZnVuY3Rpb24gcyh0KXtjKG8sbixpLGEscywidGhyb3ciLHQpfWEodm9pZCAwKX0pfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pLmNhbGwodGhpcyxyKDEwKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7Y29uc3QgZT1NYXRoLm1heCh0Lmxhc3RJbmRleE9mKCIvIiksdC5sYXN0SW5kZXhPZigiXFwiKSk7cmV0dXJuLTE9PT1lPyIuIjowPT09ZT8iLyI6dC5zbGljZSgwLGUpfXIuZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBufSl9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgbj1yKDEpLGk9cig2Nik7ZnVuY3Rpb24gbyh0LGUscixuLGksbyxhKXt0cnl7dmFyIHM9dFtvXShhKSx1PXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZSh1KTpQcm9taXNlLnJlc29sdmUodSkudGhlbihuLGkpfWZ1bmN0aW9uIGEodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obixpKXt2YXIgYT10LmFwcGx5KGUscik7ZnVuY3Rpb24gcyh0KXtvKGEsbixpLHMsdSwibmV4dCIsdCl9ZnVuY3Rpb24gdSh0KXtvKGEsbixpLHMsdSwidGhyb3ciLHQpfXModm9pZCAwKX0pfX1jbGFzcyBze3N0YXRpYyBnZXQoe2ZzOnQsZ2l0ZGlyOmV9KXtyZXR1cm4gYShmdW5jdGlvbiooKXtjb25zdCByPW5ldyBuLmEodCksbz15aWVsZCByLnJlYWQoYCR7ZX0vY29uZmlnYCx7ZW5jb2Rpbmc6InV0ZjgifSk7cmV0dXJuIGkuYS5mcm9tKG8pfSkoKX1zdGF0aWMgc2F2ZSh7ZnM6dCxnaXRkaXI6ZSxjb25maWc6cn0pe3JldHVybiBhKGZ1bmN0aW9uKigpe2NvbnN0IGk9bmV3IG4uYSh0KTt5aWVsZCBpLndyaXRlKGAke2V9L2NvbmZpZ2Asci50b1N0cmluZygpLHtlbmNvZGluZzoidXRmOCJ9KX0pKCl9fX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj0idW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQ4QXJyYXkmJiJ1bmRlZmluZWQiIT10eXBlb2YgVWludDE2QXJyYXkmJiJ1bmRlZmluZWQiIT10eXBlb2YgSW50MzJBcnJheTtmdW5jdGlvbiBpKHQsZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpfWUuYXNzaWduPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7ZS5sZW5ndGg7KXt2YXIgcj1lLnNoaWZ0KCk7aWYocil7aWYoIm9iamVjdCIhPXR5cGVvZiByKXRocm93IG5ldyBUeXBlRXJyb3IocisibXVzdCBiZSBub24tb2JqZWN0Iik7Zm9yKHZhciBuIGluIHIpaShyLG4pJiYodFtuXT1yW25dKX19cmV0dXJuIHR9LGUuc2hyaW5rQnVmPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGVuZ3RoPT09ZT90OnQuc3ViYXJyYXk/dC5zdWJhcnJheSgwLGUpOih0Lmxlbmd0aD1lLHQpfTt2YXIgbz17YXJyYXlTZXQ6ZnVuY3Rpb24odCxlLHIsbixpKXtpZihlLnN1YmFycmF5JiZ0LnN1YmFycmF5KXQuc2V0KGUuc3ViYXJyYXkocixyK24pLGkpO2Vsc2UgZm9yKHZhciBvPTA7bzxuO28rKyl0W2krb109ZVtyK29dfSxmbGF0dGVuQ2h1bmtzOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLG8sYTtmb3Iobj0wLGU9MCxyPXQubGVuZ3RoO2U8cjtlKyspbis9dFtlXS5sZW5ndGg7Zm9yKGE9bmV3IFVpbnQ4QXJyYXkobiksaT0wLGU9MCxyPXQubGVuZ3RoO2U8cjtlKyspbz10W2VdLGEuc2V0KG8saSksaSs9by5sZW5ndGg7cmV0dXJuIGF9fSxhPXthcnJheVNldDpmdW5jdGlvbih0LGUscixuLGkpe2Zvcih2YXIgbz0wO288bjtvKyspdFtpK29dPWVbcitvXX0sZmxhdHRlbkNodW5rczpmdW5jdGlvbih0KXtyZXR1cm5bXS5jb25jYXQuYXBwbHkoW10sdCl9fTtlLnNldFR5cGVkPWZ1bmN0aW9uKHQpe3Q/KGUuQnVmOD1VaW50OEFycmF5LGUuQnVmMTY9VWludDE2QXJyYXksZS5CdWYzMj1JbnQzMkFycmF5LGUuYXNzaWduKGUsbykpOihlLkJ1Zjg9QXJyYXksZS5CdWYxNj1BcnJheSxlLkJ1ZjMyPUFycmF5LGUuYXNzaWduKGUsYSkpfSxlLnNldFR5cGVkKG4pfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBufSk7Y29uc3Qgbj17bmFtZToiaXNvbW9ycGhpYy1naXQiLHZlcnNpb246IjAuNzAuMCIsYWdlbnQ6ImdpdC9pc29tb3JwaGljLWdpdEAwLjcwLjAifX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2NvbnN0IGU9TWF0aC5tYXgodC5sYXN0SW5kZXhPZigiLyIpLHQubGFzdEluZGV4T2YoIlxcIikpO3JldHVybiBlPi0xJiYodD10LnNsaWNlKGUrMSkpLHR9ci5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG59KX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEpLGk9cig0KSxvPXIoMCksYT1yKDUpLHM9cigyKSx1PXIoMzEpLGM9cigxMSk7ZnVuY3Rpb24gZih0LGUscixuLGksbyxhKXt0cnl7dmFyIHM9dFtvXShhKSx1PXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZSh1KTpQcm9taXNlLnJlc29sdmUodSkudGhlbihuLGkpfWZ1bmN0aW9uIGwodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obixpKXt2YXIgbz10LmFwcGx5KGUscik7ZnVuY3Rpb24gYSh0KXtmKG8sbixpLGEscywibmV4dCIsdCl9ZnVuY3Rpb24gcyh0KXtmKG8sbixpLGEscywidGhyb3ciLHQpfWEodm9pZCAwKX0pfX1jbGFzcyBke2NvbnN0cnVjdG9yKHtmczp0LGdpdGRpcjplLHJlZjpyfSl7Y29uc3QgYT1uZXcgbi5hKHQpO3RoaXMuZnM9YSx0aGlzLmdpdGRpcj1lLHRoaXMubWFwUHJvbWlzZT1sKGZ1bmN0aW9uKigpe2NvbnN0IHQ9bmV3IE1hcDtsZXQgbjt0cnl7bj15aWVsZCBpLmEucmVzb2x2ZSh7ZnM6YSxnaXRkaXI6ZSxyZWY6cn0pfWNhdGNoKHQpe3QuY29kZT09PW8uYS5SZXNvbHZlUmVmRXJyb3ImJihuPSI0YjgyNWRjNjQyY2I2ZWI5YTA2MGU1NGJmOGQ2OTI4OGZiZWU0OTA0Iil9Y29uc3Qgcz15aWVsZCBPYmplY3QodS5hKSh7ZnM6YSxnaXRkaXI6ZSxvaWQ6bn0pO3JldHVybiBzLnR5cGU9InRyZWUiLHQuc2V0KCIuIixzKSx0fSkoKTtjb25zdCBzPXRoaXM7dGhpcy5Db25zdHJ1Y3RFbnRyeT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXtPYmplY3QuYXNzaWduKHRoaXMsdCl9cG9wdWxhdGVTdGF0KCl7dmFyIHQ9dGhpcztyZXR1cm4gbChmdW5jdGlvbiooKXt0LmV4aXN0cyYmKHlpZWxkIHMucG9wdWxhdGVTdGF0KHQpKX0pKCl9cG9wdWxhdGVDb250ZW50KCl7dmFyIHQ9dGhpcztyZXR1cm4gbChmdW5jdGlvbiooKXt0LmV4aXN0cyYmKHlpZWxkIHMucG9wdWxhdGVDb250ZW50KHQpKX0pKCl9cG9wdWxhdGVIYXNoKCl7dmFyIHQ9dGhpcztyZXR1cm4gbChmdW5jdGlvbiooKXt0LmV4aXN0cyYmKHlpZWxkIHMucG9wdWxhdGVIYXNoKHQpKX0pKCl9fX1yZWFkZGlyKHQpe3ZhciBlPXRoaXM7cmV0dXJuIGwoZnVuY3Rpb24qKCl7aWYoIXQuZXhpc3RzKXJldHVybltdO2NvbnN0IHI9dC5mdWxscGF0aCx7ZnM6bixnaXRkaXI6aX09ZSx1PXlpZWxkIGUubWFwUHJvbWlzZSxmPXUuZ2V0KHIpO2lmKCFmKXRocm93IG5ldyBFcnJvcihgTm8gb2JqIGZvciAke3J9YCk7Y29uc3QgbD1mLm9pZDtpZighbCl0aHJvdyBuZXcgRXJyb3IoYE5vIG9pZCBmb3Igb2JqICR7SlNPTi5zdHJpbmdpZnkoZil9YCk7aWYoInRyZWUiIT09Zi50eXBlKXJldHVybiBudWxsO2NvbnN0e3R5cGU6ZCxvYmplY3Q6aH09eWllbGQgT2JqZWN0KGEuYSkoe2ZzOm4sZ2l0ZGlyOmksb2lkOmx9KTtpZihkIT09Zi50eXBlKXRocm93IG5ldyBvLmIoby5hLk9iamVjdFR5cGVBc3NlcnRpb25GYWlsLHtvaWQ6bCxleHBlY3RlZDpmLnR5cGUsdHlwZTpkfSk7Y29uc3QgcD1jLmEuZnJvbShoKTtmb3IoY29uc3QgdCBvZiBwKXUuc2V0KE9iamVjdChzLmEpKHIsdC5wYXRoKSx0KTtyZXR1cm4gcC5lbnRyaWVzKCkubWFwKHQ9Pih7ZnVsbHBhdGg6T2JqZWN0KHMuYSkocix0LnBhdGgpLGJhc2VuYW1lOnQucGF0aCxleGlzdHM6ITB9KSl9KSgpfXBvcHVsYXRlU3RhdCh0KXt2YXIgZT10aGlzO3JldHVybiBsKGZ1bmN0aW9uKigpe2NvbnN0IHI9KHlpZWxkIGUubWFwUHJvbWlzZSkuZ2V0KHQuZnVsbHBhdGgpO2lmKCFyKXRocm93IG5ldyBFcnJvcihgRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5LCBsc3RhdCAnJHt0LmZ1bGxwYXRofSdgKTtjb25zdHttb2RlOm4sdHlwZTppfT1yO09iamVjdC5hc3NpZ24odCx7bW9kZTpuLHR5cGU6aX0pfSkoKX1wb3B1bGF0ZUNvbnRlbnQodCl7dmFyIGU9dGhpcztyZXR1cm4gbChmdW5jdGlvbiooKXtjb25zdCByPXlpZWxkIGUubWFwUHJvbWlzZSx7ZnM6bixnaXRkaXI6aX09ZSxvPXIuZ2V0KHQuZnVsbHBhdGgpO2lmKCFvKXRocm93IG5ldyBFcnJvcihgTm8gb2JqIGZvciAke3QuZnVsbHBhdGh9YCk7Y29uc3Qgcz1vLm9pZDtpZighcyl0aHJvdyBuZXcgRXJyb3IoYE5vIG9pZCBmb3IgZW50cnkgJHtKU09OLnN0cmluZ2lmeShvKX1gKTtjb25zdHt0eXBlOnUsb2JqZWN0OmN9PXlpZWxkIE9iamVjdChhLmEpKHtmczpuLGdpdGRpcjppLG9pZDpzfSk7aWYoInRyZWUiPT09dSl0aHJvdyBuZXcgRXJyb3IoIkVJU0RJUjogaWxsZWdhbCBvcGVyYXRpb24gb24gYSBkaXJlY3RvcnksIHJlYWQiKTtPYmplY3QuYXNzaWduKHQse2NvbnRlbnQ6Y30pfSkoKX1wb3B1bGF0ZUhhc2godCl7dmFyIGU9dGhpcztyZXR1cm4gbChmdW5jdGlvbiooKXtjb25zdCByPSh5aWVsZCBlLm1hcFByb21pc2UpLmdldCh0LmZ1bGxwYXRoKTtpZighcil0aHJvdyBuZXcgRXJyb3IoYEVOT0VOVDogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSwgb3BlbiAnJHt0LmZ1bGxwYXRofSdgKTtjb25zdCBuPXIub2lkO09iamVjdC5hc3NpZ24odCx7b2lkOm59KX0pKCl9fXZhciBoPXIoNTQpO2Z1bmN0aW9uIHAodCxlLHIsbixpLG8sYSl7dHJ5e3ZhciBzPXRbb10oYSksdT1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UodSk6UHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4obixpKX1mdW5jdGlvbiBnKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4saSl7dmFyIG89dC5hcHBseShlLHIpO2Z1bmN0aW9uIGEodCl7cChvLG4saSxhLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7cChvLG4saSxhLHMsInRocm93Iix0KX1hKHZvaWQgMCl9KX19Y2xhc3MgbXtjb25zdHJ1Y3Rvcih7ZnM6dCxnaXRkaXI6ZSxyZWY6cn0pe2NvbnN0IGE9bmV3IG4uYSh0KTt0aGlzLmZzPWEsdGhpcy5naXRkaXI9ZSx0aGlzLm1hcFByb21pc2U9ZyhmdW5jdGlvbiooKXtjb25zdCB0PW5ldyBNYXA7bGV0IG47dHJ5e249eWllbGQgaS5hLnJlc29sdmUoe2ZzOmEsZ2l0ZGlyOmUscmVmOnJ9KX1jYXRjaCh0KXt0LmNvZGU9PT1vLmEuUmVzb2x2ZVJlZkVycm9yJiYobj0iNGI4MjVkYzY0MmNiNmViOWEwNjBlNTRiZjhkNjkyODhmYmVlNDkwNCIpfWNvbnN0IHM9eWllbGQgT2JqZWN0KHUuYSkoe2ZzOmEsZ2l0ZGlyOmUsb2lkOm59KTtyZXR1cm4gcy50eXBlPSJ0cmVlIixzLm1vZGU9IjQwMDAwIix0LnNldCgiLiIscyksdH0pKCk7Y29uc3Qgcz10aGlzO3RoaXMuQ29uc3RydWN0RW50cnk9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fZnVsbHBhdGg9dCx0aGlzLl90eXBlPSExLHRoaXMuX21vZGU9ITEsdGhpcy5fc3RhdD0hMSx0aGlzLl9jb250ZW50PSExLHRoaXMuX29pZD0hMX10eXBlKCl7dmFyIHQ9dGhpcztyZXR1cm4gZyhmdW5jdGlvbiooKXtyZXR1cm4gcy50eXBlKHQpfSkoKX1tb2RlKCl7dmFyIHQ9dGhpcztyZXR1cm4gZyhmdW5jdGlvbiooKXtyZXR1cm4gcy5tb2RlKHQpfSkoKX1zdGF0KCl7dmFyIHQ9dGhpcztyZXR1cm4gZyhmdW5jdGlvbiooKXtyZXR1cm4gcy5zdGF0KHQpfSkoKX1jb250ZW50KCl7dmFyIHQ9dGhpcztyZXR1cm4gZyhmdW5jdGlvbiooKXtyZXR1cm4gcy5jb250ZW50KHQpfSkoKX1vaWQoKXt2YXIgdD10aGlzO3JldHVybiBnKGZ1bmN0aW9uKigpe3JldHVybiBzLm9pZCh0KX0pKCl9fX1yZWFkZGlyKHQpe3ZhciBlPXRoaXM7cmV0dXJuIGcoZnVuY3Rpb24qKCl7Y29uc3Qgcj10Ll9mdWxscGF0aCx7ZnM6bixnaXRkaXI6aX09ZSx1PXlpZWxkIGUubWFwUHJvbWlzZSxmPXUuZ2V0KHIpO2lmKCFmKXRocm93IG5ldyBFcnJvcihgTm8gb2JqIGZvciAke3J9YCk7Y29uc3QgbD1mLm9pZDtpZighbCl0aHJvdyBuZXcgRXJyb3IoYE5vIG9pZCBmb3Igb2JqICR7SlNPTi5zdHJpbmdpZnkoZil9YCk7aWYoInRyZWUiIT09Zi50eXBlKXJldHVybiBudWxsO2NvbnN0e3R5cGU6ZCxvYmplY3Q6aH09eWllbGQgT2JqZWN0KGEuYSkoe2ZzOm4sZ2l0ZGlyOmksb2lkOmx9KTtpZihkIT09Zi50eXBlKXRocm93IG5ldyBvLmIoby5hLk9iamVjdFR5cGVBc3NlcnRpb25GYWlsLHtvaWQ6bCxleHBlY3RlZDpmLnR5cGUsdHlwZTpkfSk7Y29uc3QgcD1jLmEuZnJvbShoKTtmb3IoY29uc3QgdCBvZiBwKXUuc2V0KE9iamVjdChzLmEpKHIsdC5wYXRoKSx0KTtyZXR1cm4gcC5lbnRyaWVzKCkubWFwKHQ9Pk9iamVjdChzLmEpKHIsdC5wYXRoKSl9KSgpfXR5cGUodCl7dmFyIGU9dGhpcztyZXR1cm4gZyhmdW5jdGlvbiooKXtpZighMT09PXQuX3R5cGUpe2NvbnN0IHI9eWllbGQgZS5tYXBQcm9taXNlLHt0eXBlOm59PXIuZ2V0KHQuX2Z1bGxwYXRoKTt0Ll90eXBlPW59cmV0dXJuIHQuX3R5cGV9KSgpfW1vZGUodCl7dmFyIGU9dGhpcztyZXR1cm4gZyhmdW5jdGlvbiooKXtpZighMT09PXQuX21vZGUpe2NvbnN0IHI9eWllbGQgZS5tYXBQcm9taXNlLHttb2RlOm59PXIuZ2V0KHQuX2Z1bGxwYXRoKTt0Ll9tb2RlPU9iamVjdChoLmEpKHBhcnNlSW50KG4sOCkpfXJldHVybiB0Ll9tb2RlfSkoKX1zdGF0KHQpe3JldHVybiBnKGZ1bmN0aW9uKigpe30pKCl9Y29udGVudCh0KXt2YXIgZT10aGlzO3JldHVybiBnKGZ1bmN0aW9uKigpe2lmKCExPT09dC5fY29udGVudCl7Y29uc3Qgcj15aWVsZCBlLm1hcFByb21pc2Use2ZzOm4sZ2l0ZGlyOml9PWUsbz1yLmdldCh0Ll9mdWxscGF0aCkub2lkLHt0eXBlOnMsb2JqZWN0OnV9PXlpZWxkIE9iamVjdChhLmEpKHtmczpuLGdpdGRpcjppLG9pZDpvfSk7dC5fY29udGVudD0iYmxvYiIhPT1zP3ZvaWQgMDp1fXJldHVybiB0Ll9jb250ZW50fSkoKX1vaWQodCl7dmFyIGU9dGhpcztyZXR1cm4gZyhmdW5jdGlvbiooKXtpZighMT09PXQuX29pZCl7Y29uc3Qgcj0oeWllbGQgZS5tYXBQcm9taXNlKS5nZXQodC5fZnVsbHBhdGgpO3QuX29pZD1yLm9pZH1yZXR1cm4gdC5fb2lkfSkoKX19dmFyIHk9cigzKSx2PXIoMTkpO2Z1bmN0aW9uIHcoe3JlZjp0PSJIRUFEIixjb3JlOmU9ImRlZmF1bHQiLGRpcjpyLGdpdGRpcjppLGZzOm99KXtjb25zdCBhPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLHYuYSx7dmFsdWU6ZnVuY3Rpb24oKXtpPWl8fE9iamVjdChzLmEpKHIsIi5naXQiKSxvPXkuYS5nZXQoZSkuZ2V0KCJmcyIpO2NvbnN0IGE9bmV3IG4uYShvKTtyZXR1cm4gbmV3IGQoe2ZzOmEsZ2l0ZGlyOmkscmVmOnR9KX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYSx2LmIse3ZhbHVlOmZ1bmN0aW9uKHtmczplLGdpdGRpcjpyfSl7cmV0dXJuIG5ldyBtKHtmczplLGdpdGRpcjpyLHJlZjp0fSl9fSksT2JqZWN0LmZyZWV6ZShhKSxhfXIuZChlLCJhIixmdW5jdGlvbigpe3JldHVybiB3fSl9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KTt2YXIgbj1yKDU4KTtmdW5jdGlvbiBpKHQsZSxyLG4saSxvLGEpe3RyeXt2YXIgcz10W29dKGEpLHU9cy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCByKHQpfXMuZG9uZT9lKHUpOlByb21pc2UucmVzb2x2ZSh1KS50aGVuKG4saSl9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBhKCl7dmFyIHQ7cmV0dXJuIHQ9ZnVuY3Rpb24qKHQsZSl7Y29uc3Qgcj1PYmplY3Qobi5hKSh0KTtmb3IoOzspe2NvbnN0e3ZhbHVlOnQsZG9uZTpufT15aWVsZCByLm5leHQoKTtpZih0JiYoeWllbGQgZSh0KSksbilicmVha31yLnJldHVybiYmci5yZXR1cm4oKX0sKGE9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLG8pe3ZhciBhPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBzKHQpe2koYSxuLG8scyx1LCJuZXh0Iix0KX1mdW5jdGlvbiB1KHQpe2koYSxuLG8scyx1LCJ0aHJvdyIsdCl9cyh2b2lkIDApfSl9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBmfSk7dmFyIG49cig0NCksaT1yLm4obiksbz1yKDEpLGE9cigyKTtmdW5jdGlvbiBzKHQsZSxyLG4saSxvLGEpe3RyeXt2YXIgcz10W29dKGEpLHU9cy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCByKHQpfXMuZG9uZT9lKHUpOlByb21pc2UucmVzb2x2ZSh1KS50aGVuKG4saSl9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLGkpe3ZhciBvPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBhKHQpe3MobyxuLGksYSx1LCJuZXh0Iix0KX1mdW5jdGlvbiB1KHQpe3MobyxuLGksYSx1LCJ0aHJvdyIsdCl9YSh2b2lkIDApfSl9fWxldCBjPW51bGw7Y2xhc3MgZntzdGF0aWMgcmVhZCh7ZnM6dCxnaXRkaXI6ZX0pe3JldHVybiB1KGZ1bmN0aW9uKigpe2NvbnN0IHI9bmV3IG8uYSh0KTtudWxsPT09YyYmKGM9bmV3IGkuYSk7Y29uc3Qgbj1PYmplY3QoYS5hKShlLCJzaGFsbG93Iikscz1uZXcgU2V0O3JldHVybiB5aWVsZCBjLmFjcXVpcmUobix1KGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgci5yZWFkKG4se2VuY29kaW5nOiJ1dGY4In0pO3JldHVybiBudWxsPT09dD9zOiIiPT09dC50cmltKCk/czp2b2lkIHQudHJpbSgpLnNwbGl0KCJcbiIpLm1hcCh0PT5zLmFkZCh0KSl9KSksc30pKCl9c3RhdGljIHdyaXRlKHtmczp0LGdpdGRpcjplLG9pZHM6cn0pe3JldHVybiB1KGZ1bmN0aW9uKigpe2NvbnN0IG49bmV3IG8uYSh0KTtudWxsPT09YyYmKGM9bmV3IGkuYSk7Y29uc3Qgcz1PYmplY3QoYS5hKShlLCJzaGFsbG93Iik7aWYoci5zaXplPjApe2NvbnN0IHQ9Wy4uLnJdLmpvaW4oIlxuIikrIlxuIjt5aWVsZCBjLmFjcXVpcmUocyx1KGZ1bmN0aW9uKigpe3lpZWxkIG4ud3JpdGUocyx0LHtlbmNvZGluZzoidXRmOCJ9KX0pKX1lbHNlIHlpZWxkIGMuYWNxdWlyZShzLHUoZnVuY3Rpb24qKCl7eWllbGQgbi5ybShzKX0pKX0pKCl9fX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gY30pO3ZhciBuPXIoMTUpLGk9cig3KSxvPXIoMCksYT1yKDExKSxzPXIoNSk7ZnVuY3Rpb24gdSh0LGUscixuLGksbyxhKXt0cnl7dmFyIHM9dFtvXShhKSx1PXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZSh1KTpQcm9taXNlLnJlc29sdmUodSkudGhlbihuLGkpfWZ1bmN0aW9uIGModCl7cmV0dXJuIGYuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGYoKXt2YXIgdDtyZXR1cm4gdD1mdW5jdGlvbiooe2ZzOnQsZ2l0ZGlyOmUsb2lkOnJ9KXtpZigiNGI4MjVkYzY0MmNiNmViOWEwNjBlNTRiZjhkNjkyODhmYmVlNDkwNCI9PT1yKXJldHVybnt0cmVlOmEuYS5mcm9tKFtdKSxvaWQ6cn07Y29uc3R7dHlwZTp1LG9iamVjdDpmfT15aWVsZCBPYmplY3Qocy5hKSh7ZnM6dCxnaXRkaXI6ZSxvaWQ6cn0pO2lmKCJ0YWciPT09dSlyZXR1cm4gYyh7ZnM6dCxnaXRkaXI6ZSxvaWQ6cj1uLmEuZnJvbShmKS5wYXJzZSgpLm9iamVjdH0pO2lmKCJjb21taXQiPT09dSlyZXR1cm4gYyh7ZnM6dCxnaXRkaXI6ZSxvaWQ6cj1pLmEuZnJvbShmKS5wYXJzZSgpLnRyZWV9KTtpZigidHJlZSIhPT11KXRocm93IG5ldyBvLmIoby5hLlJlc29sdmVUcmVlRXJyb3Ise29pZDpyfSk7cmV0dXJue3RyZWU6YS5hLmZyb20oZiksb2lkOnJ9fSwoZj1mdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4saSl7dmFyIG89dC5hcHBseShlLHIpO2Z1bmN0aW9uIGEodCl7dShvLG4saSxhLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7dShvLG4saSxhLHMsInRocm93Iix0KX1hKHZvaWQgMCl9KX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxKSxpPXIoNzMpLG89cig2MCksYT1yKDIpLHM9cigzKSx1PXIoMTkpLGM9cig3NCk7ZnVuY3Rpb24qZih0KXtjb25zdCBlPW5ldyBjLmE7bGV0IHI7Y29uc3Qgbj1bXSxpPXQubGVuZ3RoO2ZvcihsZXQgcj0wO3I8aTtyKyspbltyXT10W3JdLm5leHQoKS52YWx1ZSx2b2lkIDAhPT1uW3JdJiZlLmNvbnNpZGVyKG5bcl0pO2lmKG51bGwhPT1lLnZhbHVlKWZvcig7Oyl7Y29uc3Qgbz1bXTtyPWUudmFsdWUsZS5yZXNldCgpO2ZvcihsZXQgYT0wO2E8aTthKyspdm9pZCAwIT09blthXSYmblthXT09PXI/KG9bYV09blthXSxuW2FdPXRbYV0ubmV4dCgpLnZhbHVlKTpvW2FdPW51bGwsdm9pZCAwIT09blthXSYmZS5jb25zaWRlcihuW2FdKTtpZih5aWVsZCBvLG51bGw9PT1lLnZhbHVlKXJldHVybn19ZnVuY3Rpb24gbCh0LGUscixuLGksbyxhKXt0cnl7dmFyIHM9dFtvXShhKSx1PXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZSh1KTpQcm9taXNlLnJlc29sdmUodSkudGhlbihuLGkpfWZ1bmN0aW9uIGQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obixpKXt2YXIgbz10LmFwcGx5KGUscik7ZnVuY3Rpb24gYSh0KXtsKG8sbixpLGEscywibmV4dCIsdCl9ZnVuY3Rpb24gcyh0KXtsKG8sbixpLGEscywidGhyb3ciLHQpfWEodm9pZCAwKX0pfX1mdW5jdGlvbiBoKHQpe3JldHVybiBwLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBwKCl7cmV0dXJuKHA9ZChmdW5jdGlvbiooe2NvcmU6dD0iZGVmYXVsdCIsZGlyOmUsZ2l0ZGlyOnI9T2JqZWN0KGEuYSkoZSwiLmdpdCIpLGZzOmM9cy5hLmdldCh0KS5nZXQoImZzIiksdHJlZXM6bCxtYXA6aD1mdW5jdGlvbigpe3ZhciB0PWQoZnVuY3Rpb24qKHQsZSl7cmV0dXJuIGV9KTtyZXR1cm4gZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLHJlZHVjZTpwPWZ1bmN0aW9uKCl7dmFyIHQ9ZChmdW5jdGlvbioodCxlKXtjb25zdCByPU9iamVjdChvLmEpKGUpO3JldHVybiB2b2lkIDAhPT10JiZyLnVuc2hpZnQodCkscn0pO3JldHVybiBmdW5jdGlvbihlLHIpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksaXRlcmF0ZTpnPSgodCxlKT0+UHJvbWlzZS5hbGwoWy4uLmVdLm1hcCh0KSkpfSl7dHJ5e2NvbnN0IHQ9bmV3IG4uYShjKSxvPWwubWFwKG49Pm5bdS5iXSh7ZnM6dCxkaXI6ZSxnaXRkaXI6cn0pKSxhPW5ldyBBcnJheShvLmxlbmd0aCkuZmlsbCgiLiIpLHM9T2JqZWN0KGkuYSkoMCxvLmxlbmd0aCksbT1mdW5jdGlvbigpe3ZhciB0PWQoZnVuY3Rpb24qKHQpe3MubWFwKGU9Pnt0W2VdPXRbZV0mJm5ldyBvW2VdLkNvbnN0cnVjdEVudHJ5KHRbZV0pfSk7Y29uc3QgZT0oeWllbGQgUHJvbWlzZS5hbGwocy5tYXAoZT0+dFtlXT9vW2VdLnJlYWRkaXIodFtlXSk6W10pKSkubWFwKHQ9Pm51bGw9PT10P1tdOnQpLm1hcCh0PT50W1N5bWJvbC5pdGVyYXRvcl0oKSk7cmV0dXJue2VudHJpZXM6dCxjaGlsZHJlbjpmKGUpfX0pO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLHk9ZnVuY3Rpb24oKXt2YXIgdD1kKGZ1bmN0aW9uKih0KXtjb25zdHtlbnRyaWVzOmUsY2hpbGRyZW46cn09eWllbGQgbSh0KSxuPWUuZmluZCh0PT50JiZ0Ll9mdWxscGF0aCkuX2Z1bGxwYXRoLGk9eWllbGQgaChuLGUpO2lmKG51bGwhPT1pKXtsZXQgdD15aWVsZCBnKHkscik7cmV0dXJuIHQ9dC5maWx0ZXIodD0+dm9pZCAwIT09dCkscChpLHQpfX0pO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpO3JldHVybiB5KGEpfWNhdGNoKHQpe3Rocm93IHQuY2FsbGVyPSJnaXQud2FsayIsdH19KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXIuZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBofSl9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3JldHVybi0odDxlKXx8Kyh0PmUpfXIuZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBufSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDEwNiksaT1yKDEwNyksbz1yKDc3KS5CdWZmZXIsYT1bMTUxODUwMDI0OSwxODU5Nzc1MzkzLC0xODk0MDA3NTg4LC04OTk0OTc1MTRdLHM9bmV3IEFycmF5KDgwKTtmdW5jdGlvbiB1KCl7dGhpcy5pbml0KCksdGhpcy5fdz1zLGkuY2FsbCh0aGlzLDY0LDU2KX1mdW5jdGlvbiBjKHQpe3JldHVybiB0PDw1fHQ+Pj4yN31mdW5jdGlvbiBmKHQpe3JldHVybiB0PDwzMHx0Pj4+Mn1mdW5jdGlvbiBsKHQsZSxyLG4pe3JldHVybiAwPT09dD9lJnJ8fmUmbjoyPT09dD9lJnJ8ZSZufHImbjplXnJebn1uKHUsaSksdS5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OCx0aGlzLl9lPTMyODUzNzc1MjAsdGhpc30sdS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0KXtmb3IodmFyIGUscj10aGlzLl93LG49MHx0aGlzLl9hLGk9MHx0aGlzLl9iLG89MHx0aGlzLl9jLHM9MHx0aGlzLl9kLHU9MHx0aGlzLl9lLGQ9MDtkPDE2OysrZClyW2RdPXQucmVhZEludDMyQkUoNCpkKTtmb3IoO2Q8ODA7KytkKXJbZF09KGU9cltkLTNdXnJbZC04XV5yW2QtMTRdXnJbZC0xNl0pPDwxfGU+Pj4zMTtmb3IodmFyIGg9MDtoPDgwOysraCl7dmFyIHA9fn4oaC8yMCksZz1jKG4pK2wocCxpLG8scykrdStyW2hdK2FbcF18MDt1PXMscz1vLG89ZihpKSxpPW4sbj1nfXRoaXMuX2E9bit0aGlzLl9hfDAsdGhpcy5fYj1pK3RoaXMuX2J8MCx0aGlzLl9jPW8rdGhpcy5fY3wwLHRoaXMuX2Q9cyt0aGlzLl9kfDAsdGhpcy5fZT11K3RoaXMuX2V8MH0sdS5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgdD1vLmFsbG9jVW5zYWZlKDIwKTtyZXR1cm4gdC53cml0ZUludDMyQkUoMHx0aGlzLl9hLDApLHQud3JpdGVJbnQzMkJFKDB8dGhpcy5fYiw0KSx0LndyaXRlSW50MzJCRSgwfHRoaXMuX2MsOCksdC53cml0ZUludDMyQkUoMHx0aGlzLl9kLDEyKSx0LndyaXRlSW50MzJCRSgwfHRoaXMuX2UsMTYpLHR9LHQuZXhwb3J0cz11fSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtjb25zdCByPWUudG9TdHJpbmcoMTYpO3JldHVybiIwIi5yZXBlYXQodC1yLmxlbmd0aCkrcn1yLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gbn0pfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7Y29uc3RbLGUscixuLG9dPXQubWF0Y2goL14oLiopIDwoLiopPiAoLiopICguKikkLyk7cmV0dXJue25hbWU6ZSxlbWFpbDpyLHRpbWVzdGFtcDpOdW1iZXIobiksdGltZXpvbmVPZmZzZXQ6aShvKX19ZnVuY3Rpb24gaSh0KXtsZXRbLGUscixuXT10Lm1hdGNoKC8oXCt8LSkoXGRcZCkoXGRcZCkvKTtyZXR1cm4gbj0oIisiPT09ZT8xOi0xKSooNjAqTnVtYmVyKHIpK051bWJlcihuKSksMD09PShpPW4pP2k6LWk7dmFyIGl9ci5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG59KX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgiXG4iKS5tYXAodD0+IiAiK3QpLmpvaW4oIlxuIikrIlxuIn1yLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gbn0pfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbih0KXtyLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gb30pO3ZhciBuPXIoMjkpO2Z1bmN0aW9uIGkodCxlLHIsbixpLG8sYSl7dHJ5e3ZhciBzPXRbb10oYSksdT1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UodSk6UHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4obixpKX1mdW5jdGlvbiBvKHQpe3JldHVybiBhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBhKCl7dmFyIGU7cmV0dXJuIGU9ZnVuY3Rpb24qKGUpe2NvbnN0IHI9W107cmV0dXJuIHlpZWxkIE9iamVjdChuLmEpKGUsZT0+ci5wdXNoKHQuZnJvbShlKSkpLHQuY29uY2F0KHIpfSwoYT1mdW5jdGlvbigpe3ZhciB0PXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4sbyl7dmFyIGE9ZS5hcHBseSh0LHIpO2Z1bmN0aW9uIHModCl7aShhLG4sbyxzLHUsIm5leHQiLHQpfWZ1bmN0aW9uIHUodCl7aShhLG4sbyxzLHUsInRocm93Iix0KX1zKHZvaWQgMCl9KX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KS5jYWxsKHRoaXMscigxMCkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtyZXR1cm4gZT1lIGluc3RhbmNlb2YgUmVnRXhwP2U6bmV3IFJlZ0V4cChlLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXVxcXS9nLCJcXCQmIiksImciKSx0LnJlcGxhY2UoZSxyKX12YXIgaT17Y2xlYW46ZnVuY3Rpb24odCl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgYSBzdHJpbmcsIHJlY2VpdmVkOiAiK3QpO3JldHVybiB0PW4odCwiLi8iLCIvIiksdD1uKHQsIi4uIiwiLiIpLHQ9bih0LCIgIiwiLSIpLHQ9bih0LC9eW35eOj8qXFxcLV0vZywiIiksdD1uKHQsL1t+Xjo/KlxcXS9nLCItIiksdD1uKHQsL1t+Xjo/KlxcXC1dJC9nLCIiKSx0PW4odCwiQHsiLCItIiksdD1uKHQsL1wuJC9nLCIiKSx0PW4odCwvXC8kL2csIiIpLHQ9bih0LC9cLmxvY2skL2csIiIpfX07dC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgbj1yKDMzKTtmdW5jdGlvbiBpKHQsZSl7cmV0dXJuIE9iamVjdChuLmEpKHQucGF0aCxlLnBhdGgpfX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24odCl7ci5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHZ9KTt2YXIgbj1yKDk2KSxpPXIubihuKSxvPXIoOTcpLGE9ci5uKG8pLHM9cig2KSx1PXIoMTgpLGM9ci5uKHUpLGY9cigwKSxsPXIoMjEpLGQ9cig5OCksaD1yKDgpLHA9cigxMiksZz1yKDE2KTtmdW5jdGlvbiBtKHQsZSxyLG4saSxvLGEpe3RyeXt2YXIgcz10W29dKGEpLHU9cy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCByKHQpfXMuZG9uZT9lKHUpOlByb21pc2UucmVzb2x2ZSh1KS50aGVuKG4saSl9ZnVuY3Rpb24geSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLGkpe3ZhciBvPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBhKHQpe20obyxuLGksYSxzLCJuZXh0Iix0KX1mdW5jdGlvbiBzKHQpe20obyxuLGksYSxzLCJ0aHJvdyIsdCl9YSh2b2lkIDApfSl9fWNsYXNzIHZ7Y29uc3RydWN0b3IodCl7T2JqZWN0LmFzc2lnbih0aGlzLHQpLHRoaXMub2Zmc2V0Q2FjaGU9e319c3RhdGljIGZyb21JZHgoe2lkeDp0LGdldEV4dGVybmFsUmVmRGVsdGE6ZX0pe3JldHVybiB5KGZ1bmN0aW9uKigpe3MuYSgiZnJvbUlkeCIpO2NvbnN0IHI9bmV3IGwuYSh0KTtpZigiZmY3NDRmNjMiIT09ci5zbGljZSg0KS50b1N0cmluZygiaGV4IikpcmV0dXJuO2NvbnN0IG49ci5yZWFkVUludDMyQkUoKTtpZigyIT09bil0aHJvdyBuZXcgZi5iKGYuYS5JbnRlcm5hbEZhaWwse21lc3NhZ2U6YFVuYWJsZSB0byByZWFkIHZlcnNpb24gJHtufSBwYWNrZmlsZSBJRFguIChPbmx5IHZlcnNpb24gMiBzdXBwb3J0ZWQpYH0pO2lmKHQuYnl0ZUxlbmd0aD4yMTQ3NDgzNjQ4KXRocm93IG5ldyBmLmIoZi5hLkludGVybmFsRmFpbCx7bWVzc2FnZToiVG8ga2VlcCBpbXBsZW1lbnRhdGlvbiBzaW1wbGUsIEkgaGF2ZW4ndCBpbXBsZW1lbnRlZCB0aGUgbGF5ZXIgNSBmZWF0dXJlIG5lZWRlZCB0byBzdXBwb3J0IHBhY2tmaWxlcyA+IDJHQiBpbiBzaXplLiJ9KTtyLnNlZWsoci50ZWxsKCkrMTAyMCk7Y29uc3QgaT1yLnJlYWRVSW50MzJCRSgpO3MuYSgiaGFzaGVzIik7Y29uc3Qgbz1bXTtmb3IobGV0IHQ9MDt0PGk7dCsrKXtjb25zdCBlPXIuc2xpY2UoMjApLnRvU3RyaW5nKCJoZXgiKTtvW3RdPWV9T2JqZWN0KGguYSkoYGhhc2hlcyAke3MuYigiaGFzaGVzIikuZHVyYXRpb259YCksci5zZWVrKHIudGVsbCgpKzQqaSkscy5hKCJvZmZzZXRzIik7Y29uc3QgYT1uZXcgTWFwO2ZvcihsZXQgdD0wO3Q8aTt0KyspYS5zZXQob1t0XSxyLnJlYWRVSW50MzJCRSgpKTtPYmplY3QoaC5hKShgb2Zmc2V0cyAke3MuYigib2Zmc2V0cyIpLmR1cmF0aW9ufWApO2NvbnN0IHU9ci5zbGljZSgyMCkudG9TdHJpbmcoImhleCIpO3JldHVybiBPYmplY3QoaC5hKShgZnJvbUlkeCAke3MuYigiZnJvbUlkeCIpLmR1cmF0aW9ufWApLG5ldyB2KHtoYXNoZXM6byxjcmNzOnt9LG9mZnNldHM6YSxwYWNrZmlsZVNoYTp1LGdldEV4dGVybmFsUmVmRGVsdGE6ZX0pfSkoKX1zdGF0aWMgZnJvbVBhY2soe3BhY2s6dCxnZXRFeHRlcm5hbFJlZkRlbHRhOmUsZW1pdHRlcjpyLGVtaXR0ZXJQcmVmaXg6bn0pe3JldHVybiB5KGZ1bmN0aW9uKigpe2NvbnN0IG89ezE6ImNvbW1pdCIsMjoidHJlZSIsMzoiYmxvYiIsNDoidGFnIiw2OiJvZnMtZGVsdGEiLDc6InJlZi1kZWx0YSJ9LGE9e30sdT10LnNsaWNlKC0yMCkudG9TdHJpbmcoImhleCIpLGM9W10sZj17fSxsPW5ldyBNYXA7bGV0IG09bnVsbCx5PW51bGw7Y29uc3Qgdz17aGFzaDowLHJlYWRTbGljZTowLG9mZnNldHM6MCxjcmNzOjAsc29ydDowfTtsZXQgYj17Y29tbWl0OjAsdHJlZTowLGJsb2I6MCx0YWc6MCwib2ZzLWRlbHRhIjowLCJyZWYtZGVsdGEiOjB9LF89MDtPYmplY3QoaC5hKSgiSW5kZXhpbmcgb2JqZWN0cyIpLE9iamVjdChoLmEpKCJwZXJjZW50XHRtaWxsaXNlY29uZHNcdGJ5dGVzUHJvY2Vzc2VkXHRjb21taXRzXHR0cmVlc1x0YmxvYnNcdHRhZ3NcdG9mcy1kZWx0YXNcdHJlZi1kZWx0YXMiKSxzLmEoInRvdGFsIikscy5hKCJvZmZzZXRzIikscy5hKCJwZXJjZW50IikseWllbGQgT2JqZWN0KGQuYSkoW3RdLCh7ZGF0YTp0LHR5cGU6ZSxyZWZlcmVuY2U6aSxvZmZzZXQ6dSxudW06Y30pPT57bnVsbD09PW0mJihtPWMpO2NvbnN0IGY9TWF0aC5mbG9vcigxMDAqKG0tYykvbSk7ZiE9PXkmJihyJiZyLmVtaXQoYCR7bn1wcm9ncmVzc2Ase3BoYXNlOiJSZWNlaXZpbmcgb2JqZWN0cyIsbG9hZGVkOm0tYyx0b3RhbDptLGxlbmd0aENvbXB1dGFibGU6ITB9KSxPYmplY3QoaC5hKShgJHtmfSVcdCR7TWF0aC5mbG9vcihzLmIoInBlcmNlbnQiKS5kdXJhdGlvbil9XHQke199XHQke2IuY29tbWl0fVx0JHtiLnRyZWV9XHQke2IuYmxvYn1cdCR7Yi50YWd9XHQke2JbIm9mcy1kZWx0YSJdfVx0JHtiWyJyZWYtZGVsdGEiXX1gKSxiPXtjb21taXQ6MCx0cmVlOjAsYmxvYjowLHRhZzowLCJvZnMtZGVsdGEiOjAsInJlZi1kZWx0YSI6MH0sXz0wLHMuYSgicGVyY2VudCIpKSx5PWYsYltlPW9bZV1dKyssXys9dC5ieXRlTGVuZ3RoLFsiY29tbWl0IiwidHJlZSIsImJsb2IiLCJ0YWciXS5pbmNsdWRlcyhlKT9hW3VdPXt0eXBlOmUsb2Zmc2V0OnV9OiJvZnMtZGVsdGEiPT09ZT9hW3VdPXt0eXBlOmUsb2Zmc2V0OnV9OiJyZWYtZGVsdGEiPT09ZSYmKGFbdV09e3R5cGU6ZSxvZmZzZXQ6dX0pfSksdy5vZmZzZXRzPU1hdGguZmxvb3Iocy5iKCJvZmZzZXRzIikuZHVyYXRpb24pLE9iamVjdChoLmEpKCJDb21wdXRpbmcgQ1JDcyIpLHMuYSgiY3JjcyIpO2NvbnN0IHg9T2JqZWN0LmtleXMoYSkubWFwKE51bWJlcik7Zm9yKGNvbnN0W2Uscl1vZiB4LmVudHJpZXMoKSl7Y29uc3Qgbj1lKzE9PT14Lmxlbmd0aD90LmJ5dGVMZW5ndGgtMjA6eFtlKzFdLG89YVtyXSxzPWkuYS5idWYodC5zbGljZShyLG4pKT4+PjA7by5lbmQ9bixvLmNyYz1zfXcuY3Jjcz1NYXRoLmZsb29yKHMuYigiY3JjcyIpLmR1cmF0aW9uKTtjb25zdCBFPW5ldyB2KHtwYWNrOlByb21pc2UucmVzb2x2ZSh0KSxwYWNrZmlsZVNoYTp1LGNyY3M6ZixoYXNoZXM6YyxvZmZzZXRzOmwsZ2V0RXh0ZXJuYWxSZWZEZWx0YTplfSk7T2JqZWN0KGguYSkoIlJlc29sdmluZyBkZWx0YXMiKSxPYmplY3QoaC5hKSgicGVyY2VudDJcdG1pbGxpc2Vjb25kczJcdGNhbGxzVG9SZWFkU2xpY2VcdGNhbGxzVG9HZXRFeHRlcm5hbCIpLHMuYSgicGVyY2VudCIpLHk9bnVsbDtsZXQgaz0wLE89MCxqPTA7Y29uc3QgUD1bMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdLFM9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXTtmb3IobGV0IHQgaW4gYSl7dD1OdW1iZXIodCk7Y29uc3QgZT1NYXRoLmZsb29yKDEwMCprKysvbSk7ZSE9PXkmJihPYmplY3QoaC5hKShgJHtlfSVcdCR7TWF0aC5mbG9vcihzLmIoInBlcmNlbnQiKS5kdXJhdGlvbil9XHQke099XHQke2p9YCksciYmci5lbWl0KGAke259cHJvZ3Jlc3NgLHtwaGFzZToiUmVzb2x2aW5nIGRlbHRhcyIsbG9hZGVkOmssdG90YWw6bSxsZW5ndGhDb21wdXRhYmxlOiEwfSkscy5hKCJwZXJjZW50IiksTz0wLGo9MCkseT1lO2NvbnN0IGk9YVt0XTtpZighaS5vaWQpdHJ5e0UucmVhZERlcHRoPTAsRS5leHRlcm5hbFJlYWREZXB0aD0wLHMuYSgicmVhZFNsaWNlIik7Y29uc3R7dHlwZTplLG9iamVjdDpyfT15aWVsZCBFLnJlYWRTbGljZSh7c3RhcnQ6dH0pLG49cy5iKCJyZWFkU2xpY2UiKS5kdXJhdGlvbjt3LnJlYWRTbGljZSs9bixPKz1FLnJlYWREZXB0aCxqKz1FLmV4dGVybmFsUmVhZERlcHRoLFBbRS5yZWFkRGVwdGhdKz1uLFNbRS5yZWFkRGVwdGhdKz0xLHMuYSgiaGFzaCIpO2NvbnN0IG89T2JqZWN0KHAuYSkoZy5hLndyYXAoe3R5cGU6ZSxvYmplY3Q6cn0pKTt3Lmhhc2grPXMuYigiaGFzaCIpLmR1cmF0aW9uLGkub2lkPW8sYy5wdXNoKG8pLGwuc2V0KG8sdCksZltvXT1pLmNyY31jYXRjaCh0KXtPYmplY3QoaC5hKSgiRVJST1IiLHQpO2NvbnRpbnVlfX1zLmEoInNvcnQiKSxjLnNvcnQoKSx3LnNvcnQ9TWF0aC5mbG9vcihzLmIoInNvcnQiKS5kdXJhdGlvbik7Y29uc3QgUj1zLmIoInRvdGFsIikuZHVyYXRpb247cmV0dXJuIHcuaGFzaD1NYXRoLmZsb29yKHcuaGFzaCksdy5yZWFkU2xpY2U9TWF0aC5mbG9vcih3LnJlYWRTbGljZSksdy5taXNjPU1hdGguZmxvb3IoT2JqZWN0LnZhbHVlcyh3KS5yZWR1Y2UoKHQsZSk9PnQtZSxSKSksT2JqZWN0KGguYSkoT2JqZWN0LmtleXModykuam9pbigiXHQiKSksT2JqZWN0KGguYSkoT2JqZWN0LnZhbHVlcyh3KS5qb2luKCJcdCIpKSxPYmplY3QoaC5hKSgiYnkgZGVwdGg6IiksT2JqZWN0KGguYSkoWzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTFdLmpvaW4oIlx0IikpLE9iamVjdChoLmEpKFMuc2xpY2UoMCwxMikuam9pbigiXHQiKSksT2JqZWN0KGguYSkoUC5tYXAoTWF0aC5mbG9vcikuc2xpY2UoMCwxMikuam9pbigiXHQiKSksRX0pKCl9dG9CdWZmZXIoKXtjb25zdCBlPVtdLHI9KHIsbik9PntlLnB1c2godC5mcm9tKHIsbikpfTtyKCJmZjc0NGY2MyIsImhleCIpLHIoIjAwMDAwMDAyIiwiaGV4Iik7Y29uc3Qgbj1uZXcgbC5hKHQuYWxsb2MoMTAyNCkpO2ZvcihsZXQgdD0wO3Q8MjU2O3QrKyl7bGV0IGU9MDtmb3IoY29uc3QgciBvZiB0aGlzLmhhc2hlcylwYXJzZUludChyLnNsaWNlKDAsMiksMTYpPD10JiZlKys7bi53cml0ZVVJbnQzMkJFKGUpfWUucHVzaChuLmJ1ZmZlcik7Zm9yKGNvbnN0IHQgb2YgdGhpcy5oYXNoZXMpcih0LCJoZXgiKTtjb25zdCBpPW5ldyBsLmEodC5hbGxvYyg0KnRoaXMuaGFzaGVzLmxlbmd0aCkpO2Zvcihjb25zdCB0IG9mIHRoaXMuaGFzaGVzKWkud3JpdGVVSW50MzJCRSh0aGlzLmNyY3NbdF0pO2UucHVzaChpLmJ1ZmZlcik7Y29uc3Qgbz1uZXcgbC5hKHQuYWxsb2MoNCp0aGlzLmhhc2hlcy5sZW5ndGgpKTtmb3IoY29uc3QgdCBvZiB0aGlzLmhhc2hlcylvLndyaXRlVUludDMyQkUodGhpcy5vZmZzZXRzLmdldCh0KSk7ZS5wdXNoKG8uYnVmZmVyKSxyKHRoaXMucGFja2ZpbGVTaGEsImhleCIpO2NvbnN0IGE9dC5jb25jYXQoZSkscz1PYmplY3QocC5hKShhKSx1PXQuYWxsb2MoMjApO3JldHVybiB1LndyaXRlKHMsImhleCIpLHQuY29uY2F0KFthLHVdKX1sb2FkKHtwYWNrOnR9KXt2YXIgZT10aGlzO3JldHVybiB5KGZ1bmN0aW9uKigpe2UucGFjaz10fSkoKX11bmxvYWQoKXt2YXIgdD10aGlzO3JldHVybiB5KGZ1bmN0aW9uKigpe3QucGFjaz1udWxsfSkoKX1yZWFkKHtvaWQ6dH0pe3ZhciBlPXRoaXM7cmV0dXJuIHkoZnVuY3Rpb24qKCl7aWYoIWUub2Zmc2V0cy5nZXQodCkpe2lmKGUuZ2V0RXh0ZXJuYWxSZWZEZWx0YSlyZXR1cm4gZS5leHRlcm5hbFJlYWREZXB0aCsrLGUuZ2V0RXh0ZXJuYWxSZWZEZWx0YSh0KTt0aHJvdyBuZXcgZi5iKGYuYS5JbnRlcm5hbEZhaWwse21lc3NhZ2U6YENvdWxkIG5vdCByZWFkIG9iamVjdCAke3R9IGZyb20gcGFja2ZpbGVgfSl9Y29uc3Qgcj1lLm9mZnNldHMuZ2V0KHQpO3JldHVybiBlLnJlYWRTbGljZSh7c3RhcnQ6cn0pfSkoKX1yZWFkU2xpY2Uoe3N0YXJ0OmV9KXt2YXIgcj10aGlzO3JldHVybiB5KGZ1bmN0aW9uKigpe2lmKHIub2Zmc2V0Q2FjaGVbZV0pcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sci5vZmZzZXRDYWNoZVtlXSk7ci5yZWFkRGVwdGgrKztpZighci5wYWNrKXRocm93IG5ldyBmLmIoZi5hLkludGVybmFsRmFpbCx7bWVzc2FnZToiVHJpZWQgdG8gcmVhZCBmcm9tIGEgR2l0UGFja0luZGV4IHdpdGggbm8gcGFja2ZpbGUgbG9hZGVkIGludG8gbWVtb3J5In0pO2NvbnN0IG49KHlpZWxkIHIucGFjaykuc2xpY2UoZSksaT1uZXcgbC5hKG4pLG89aS5yZWFkVUludDgoKSxzPTExMiZvO2xldCB1PXsxNjoiY29tbWl0IiwzMjoidHJlZSIsNDg6ImJsb2IiLDY0OiJ0YWciLDk2OiJvZnNfZGVsdGEiLDExMjoicmVmX2RlbHRhIn1bc107aWYodm9pZCAwPT09dSl0aHJvdyBuZXcgZi5iKGYuYS5JbnRlcm5hbEZhaWwse21lc3NhZ2U6IlVucmVjb2duaXplZCB0eXBlOiAwYiIrcy50b1N0cmluZygyKX0pO2NvbnN0IGQ9MTUmbztsZXQgaD1kOzEyOCZvJiYoaD1mdW5jdGlvbih0LGUpe2xldCByPWUsbj00LGk9bnVsbDtkb3tyfD0oMTI3JihpPXQucmVhZFVJbnQ4KCkpKTw8bixuKz03fXdoaWxlKDEyOCZpKTtyZXR1cm4gcn0oaSxkKSk7bGV0IHA9bnVsbCxnPW51bGw7aWYoIm9mc19kZWx0YSI9PT11KXtjb25zdCB0PWZ1bmN0aW9uKHQpe2NvbnN0IGU9W107bGV0IHI9MCxuPTA7ZG97Y29uc3QgaT0xMjcmKHI9dC5yZWFkVUludDgoKSk7ZS5wdXNoKGkpLG49MTI4JnJ9d2hpbGUobik7cmV0dXJuIGUucmVkdWNlKCh0LGUpPT50KzE8PDd8ZSwtMSl9KGkpLG49ZS10Oyh7b2JqZWN0OnAsdHlwZTp1fT15aWVsZCByLnJlYWRTbGljZSh7c3RhcnQ6bn0pKX1pZigicmVmX2RlbHRhIj09PXUpe2NvbnN0IHQ9aS5zbGljZSgyMCkudG9TdHJpbmcoImhleCIpOyh7b2JqZWN0OnAsdHlwZTp1fT15aWVsZCByLnJlYWQoe29pZDp0fSkpfWNvbnN0IG09bi5zbGljZShpLnRlbGwoKSk7aWYoKGc9dC5mcm9tKGMuYS5pbmZsYXRlKG0pKSkuYnl0ZUxlbmd0aCE9PWgpdGhyb3cgbmV3IGYuYihmLmEuSW50ZXJuYWxGYWlsLHttZXNzYWdlOmBQYWNrZmlsZSB0b2xkIHVzIG9iamVjdCB3b3VsZCBoYXZlIGxlbmd0aCAke2h9IGJ1dCBpdCBoYWQgbGVuZ3RoICR7Zy5ieXRlTGVuZ3RofWB9KTtyZXR1cm4gcCYmKGc9dC5mcm9tKGEoKShnLHApKSksci5yZWFkRGVwdGg+MyYmKHIub2Zmc2V0Q2FjaGVbZV09e3R5cGU6dSxvYmplY3Q6Z30pLHt0eXBlOnUsZm9ybWF0OiJjb250ZW50IixvYmplY3Q6Z319KSgpfX19KS5jYWxsKHRoaXMscigxMCkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gb30pO3ZhciBuPXIoOCksaT1yKDIwKTtmdW5jdGlvbiBvKHQsZSl7Y29uc3Qgcj1PYmplY3QoaS5hKSh0KSxvPU9iamVjdChpLmEpKGUpLHM9ci5tb2RlIT09by5tb2RlfHxyLm10aW1lU2Vjb25kcyE9PW8ubXRpbWVTZWNvbmRzfHxyLmN0aW1lU2Vjb25kcyE9PW8uY3RpbWVTZWNvbmRzfHxyLnVpZCE9PW8udWlkfHxyLmdpZCE9PW8uZ2lkfHxyLmlubyE9PW8uaW5vfHxyLnNpemUhPT1vLnNpemU7cmV0dXJuIHMmJm4uYS5lbmFibGVkJiZjb25zb2xlLnRhYmxlKFthKHIpLGEobyldKSxzfWZ1bmN0aW9uIGEodCl7cmV0dXJue21vZGU6dC5tb2RlLG10aW1lU2Vjb25kczp0Lm10aW1lU2Vjb25kcyxjdGltZVNlY29uZHM6dC5jdGltZVNlY29uZHMsdWlkOnQudWlkLGdpZDp0LmdpZCxpbm86dC5pbm8sc2l6ZTp0LnNpemV9fX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDApLGk9cig0Nyksbz1yKDQ2KTtmdW5jdGlvbiBhKHQpe2xldCBlPXQubWF0Y2goL15odHRwcz86XC9cLyhbXlwvXSspQC8pO2lmKG51bGw9PWUpcmV0dXJuIG51bGw7ZT1lWzFdO2NvbnN0W3Isbl09ZS5zcGxpdCgiOiIpO3JldHVybnt1cmw6dD10LnJlcGxhY2UoYCR7ZX1AYCwiIiksdXNlcm5hbWU6cixwYXNzd29yZDpufX12YXIgcz1yKDYxKSx1PXIoMjYpLGM9cigzKSxmPXIoNjkpO2Z1bmN0aW9uIGwodCxlLHIsbixpLG8sYSl7dHJ5e3ZhciBzPXRbb10oYSksdT1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UodSk6UHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4obixpKX1mdW5jdGlvbiBkKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4saSl7dmFyIG89dC5hcHBseShlLHIpO2Z1bmN0aW9uIGEodCl7bChvLG4saSxhLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7bChvLG4saSxhLHMsInRocm93Iix0KX1hKHZvaWQgMCl9KX19ci5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHB9KTtjb25zdCBoPSh0LGUpPT50LmVuZHNXaXRoKCI/Iik/YCR7dH0ke2V9YDpgJHt0fS8ke2UucmVwbGFjZSgvXmh0dHBzPzpcL1wvLywiIil9YDtjbGFzcyBwe3N0YXRpYyBjYXBhYmlsaXRpZXMoKXtyZXR1cm4gZChmdW5jdGlvbiooKXtyZXR1cm5bImRpc2NvdmVyIiwiY29ubmVjdCJdfSkoKX1zdGF0aWMgZGlzY292ZXIoe2NvcmU6dCxjb3JzUHJveHk6ZSxzZXJ2aWNlOnIsdXJsOmwsbm9HaXRTdWZmaXg6cCxhdXRoOmcsaGVhZGVyczptfSl7cmV0dXJuIGQoZnVuY3Rpb24qKCl7Y29uc3QgZD1sO2wuZW5kc1dpdGgoIi5naXQiKXx8cHx8KGw9bCs9Ii5naXQiKTtjb25zdCB5PWEobCk7eSYmKGw9eS51cmwsZy51c2VybmFtZT1nLnVzZXJuYW1lfHx5LnVzZXJuYW1lLGcucGFzc3dvcmQ9Zy5wYXNzd29yZHx8eS5wYXNzd29yZCksZSYmKGw9aChlLGwpKTtjb25zdCB2PWMuYS5nZXQodCkuZ2V0KCJodHRwIil8fHMuYTsoInVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3d8fGUpJiYobVsidXNlci1hZ2VudCJdPW1bInVzZXItYWdlbnQiXXx8dS5hLmFnZW50KTtjb25zdCB3PU9iamVjdChvLmEpKGcsISF5KTt3JiYobS5BdXRob3JpemF0aW9uPU9iamVjdChpLmEpKHcpKTtsZXQgYj15aWVsZCB2KHtjb3JlOnQsbWV0aG9kOiJHRVQiLHVybDpgJHtsfS9pbmZvL3JlZnM/c2VydmljZT0ke3J9YCxoZWFkZXJzOm19KTtpZig0MDE9PT1iLnN0YXR1c0NvZGUmJmMuYS5nZXQodCkuaGFzKCJjcmVkZW50aWFsTWFuYWdlciIpKXtjb25zdCBlPWMuYS5nZXQodCkuZ2V0KCJjcmVkZW50aWFsTWFuYWdlciIpO2c9eWllbGQgZS5maWxsKHt1cmw6ZH0pO2NvbnN0IG49T2JqZWN0KG8uYSkoZyk7biYmKG0uQXV0aG9yaXphdGlvbj1PYmplY3QoaS5hKShuKSksNDAxPT09KGI9eWllbGQgdih7Y29yZTp0LG1ldGhvZDoiR0VUIix1cmw6YCR7bH0vaW5mby9yZWZzP3NlcnZpY2U9JHtyfWAsaGVhZGVyczptfSkpLnN0YXR1c0NvZGU/eWllbGQgZS5yZWplY3RlZCh7dXJsOmQsYXV0aDpnfSk6MjAwPT09Yi5zdGF0dXNDb2RlJiYoeWllbGQgZS5hcHByb3ZlZCh7dXJsOmQsYXV0aDpnfSkpfWlmKDIwMCE9PWIuc3RhdHVzQ29kZSl0aHJvdyBuZXcgbi5iKG4uYS5IVFRQRXJyb3Ise3N0YXR1c0NvZGU6Yi5zdGF0dXNDb2RlLHN0YXR1c01lc3NhZ2U6Yi5zdGF0dXNNZXNzYWdlfSk7dHJ5e2NvbnN0IHQ9eWllbGQgT2JqZWN0KGYuYSkoYi5ib2R5LHtzZXJ2aWNlOnJ9KTtyZXR1cm4gdC5hdXRoPWcsdH1jYXRjaCh0KXtpZih0LmNvZGU9PT1uLmEuQXNzZXJ0U2VydmVyUmVzcG9uc2VGYWlsJiZ0LmRhdGEuZXhwZWN0ZWQ9PT1gIyBzZXJ2aWNlPSR7cn1cXG5gJiZiLmhlYWRlcnNbImNvbnRlbnQtdHlwZSJdIT09YGFwcGxpY2F0aW9uL3gtJHtyfS1hZHZlcnRpc2VtZW50YCl0aHJvdyBuZXcgbi5iKG4uYS5SZW1vdGVEb2VzTm90U3VwcG9ydFNtYXJ0SFRUUCx7fSk7dGhyb3cgdH19KSgpfXN0YXRpYyBjb25uZWN0KHtjb3JlOnQsZW1pdHRlcjplLGVtaXR0ZXJQcmVmaXg6cixjb3JzUHJveHk6ZixzZXJ2aWNlOmwsdXJsOnAsbm9HaXRTdWZmaXg6ZyxhdXRoOm0sYm9keTp5LGhlYWRlcnM6dn0pe3JldHVybiBkKGZ1bmN0aW9uKigpe3AuZW5kc1dpdGgoIi5naXQiKXx8Z3x8KHA9cCs9Ii5naXQiKTtjb25zdCBkPWEocCk7ZCYmKHA9ZC51cmwsbS51c2VybmFtZT1tLnVzZXJuYW1lfHxkLnVzZXJuYW1lLG0ucGFzc3dvcmQ9bS5wYXNzd29yZHx8ZC5wYXNzd29yZCksZiYmKHA9aChmLHApKSx2WyJjb250ZW50LXR5cGUiXT1gYXBwbGljYXRpb24veC0ke2x9LXJlcXVlc3RgLHYuYWNjZXB0PWBhcHBsaWNhdGlvbi94LSR7bH0tcmVzdWx0YDtjb25zdCB3PWMuYS5nZXQodCkuZ2V0KCJodHRwIil8fHMuYTsoInVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3d8fGYpJiYodlsidXNlci1hZ2VudCJdPXZbInVzZXItYWdlbnQiXXx8dS5hLmFnZW50KSwobT1PYmplY3Qoby5hKShtLCEhZCkpJiYodi5BdXRob3JpemF0aW9uPU9iamVjdChpLmEpKG0pKTtjb25zdCBiPXlpZWxkIHcoe2NvcmU6dCxlbWl0dGVyOmUsZW1pdHRlclByZWZpeDpyLG1ldGhvZDoiUE9TVCIsdXJsOmAke3B9LyR7bH1gLGJvZHk6eSxoZWFkZXJzOnZ9KTtpZigyMDAhPT1iLnN0YXR1c0NvZGUpdGhyb3cgbmV3IG4uYihuLmEuSFRUUEVycm9yLHtzdGF0dXNDb2RlOmIuc3RhdHVzQ29kZSxzdGF0dXNNZXNzYWdlOmIuc3RhdHVzTWVzc2FnZX0pO3JldHVybiBifSkoKX19fSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz1yKDEwNSl9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih7bmFtZTp0LGVtYWlsOmUsdGltZXN0YW1wOnIsdGltZXpvbmVPZmZzZXQ6bn0pe3JldHVybmAke3R9IDwke2V9PiAke3J9ICR7bj1mdW5jdGlvbih0KXtjb25zdCBlPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNpZ24odCl8fChPYmplY3QuaXModCwtMCk/LTE6MSl9KChyPXQsMD09PXI/cjotcikpO3ZhciByO3Q9TWF0aC5hYnModCk7Y29uc3Qgbj1NYXRoLmZsb29yKHQvNjApO3QtPTYwKm47bGV0IGk9U3RyaW5nKG4pLG89U3RyaW5nKHQpO2kubGVuZ3RoPDImJihpPSIwIitpKTtvLmxlbmd0aDwyJiYobz0iMCIrbyk7cmV0dXJuKC0xPT09ZT8iLSI6IisiKStpK299KG4pfWB9ci5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG59KX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gb30pO3ZhciBuPXIoMCksaT1yKDUyKTtmdW5jdGlvbiBvKHt1c2VybmFtZTp0LHBhc3N3b3JkOmUsdG9rZW46cixvYXV0aDJmb3JtYXQ6b309e30sYT0hMSl7c3dpdGNoKFshIXQsISFlLCEhciwhIW9dLm1hcChOdW1iZXIpLmpvaW4oIiIpKXtjYXNlIjAwMDAiOnJldHVybiBudWxsO2Nhc2UiMTAwMCI6aWYoYSlyZXR1cm57dXNlcm5hbWU6dCxwYXNzd29yZDoiIn07dGhyb3cgbmV3IG4uYihuLmEuTWlzc2luZ1Bhc3N3b3JkVG9rZW5FcnJvcik7Y2FzZSIwMTAwIjp0aHJvdyBuZXcgbi5iKG4uYS5NaXNzaW5nVXNlcm5hbWVFcnJvcik7Y2FzZSIxMTAwIjpyZXR1cm57dXNlcm5hbWU6dCxwYXNzd29yZDplfTtjYXNlIjAwMTAiOnJldHVybnt1c2VybmFtZTpyLHBhc3N3b3JkOiIifTtjYXNlIjEwMTAiOnJldHVybnt1c2VybmFtZTp0LHBhc3N3b3JkOnJ9O2Nhc2UiMDExMCI6dGhyb3cgbmV3IG4uYihuLmEuTWl4UGFzc3dvcmRUb2tlbkVycm9yKTtjYXNlIjExMTAiOnRocm93IG5ldyBuLmIobi5hLk1peFVzZXJuYW1lUGFzc3dvcmRUb2tlbkVycm9yKTtjYXNlIjAwMDEiOnRocm93IG5ldyBuLmIobi5hLk1pc3NpbmdUb2tlbkVycm9yKTtjYXNlIjEwMDEiOnRocm93IG5ldyBuLmIobi5hLk1peFVzZXJuYW1lT2F1dGgyZm9ybWF0TWlzc2luZ1Rva2VuRXJyb3IpO2Nhc2UiMDEwMSI6dGhyb3cgbmV3IG4uYihuLmEuTWl4UGFzc3dvcmRPYXV0aDJmb3JtYXRNaXNzaW5nVG9rZW5FcnJvcik7Y2FzZSIxMTAxIjp0aHJvdyBuZXcgbi5iKG4uYS5NaXhVc2VybmFtZVBhc3N3b3JkT2F1dGgyZm9ybWF0TWlzc2luZ1Rva2VuRXJyb3IpO2Nhc2UiMDAxMSI6cmV0dXJuIE9iamVjdChpLmEpKG8scik7Y2FzZSIxMDExIjp0aHJvdyBuZXcgbi5iKG4uYS5NaXhVc2VybmFtZU9hdXRoMmZvcm1hdFRva2VuRXJyb3IpO2Nhc2UiMDExMSI6dGhyb3cgbmV3IG4uYihuLmEuTWl4UGFzc3dvcmRPYXV0aDJmb3JtYXRUb2tlbkVycm9yKTtjYXNlIjExMTEiOnRocm93IG5ldyBuLmIobi5hLk1peFVzZXJuYW1lUGFzc3dvcmRPYXV0aDJmb3JtYXRUb2tlbkVycm9yKX19fSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBuKHt1c2VybmFtZTplLHBhc3N3b3JkOnJ9KXtyZXR1cm5gQmFzaWMgJHt0LmZyb20oYCR7ZX06JHtyfWApLnRvU3RyaW5nKCJiYXNlNjQiKX1gfXIuZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBufSl9KS5jYWxsKHRoaXMscigxMCkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4saSxvLGEpe3RyeXt2YXIgcz10W29dKGEpLHU9cy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCByKHQpfXMuZG9uZT9lKHUpOlByb21pc2UucmVzb2x2ZSh1KS50aGVuKG4saSl9ci5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTtjbGFzcyBpe2NvbnN0cnVjdG9yKCl7dGhpcy5fcXVldWU9W119d3JpdGUodCl7aWYodGhpcy5fZW5kZWQpdGhyb3cgRXJyb3IoIllvdSBjYW5ub3Qgd3JpdGUgdG8gYSBGSUZPIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBlbmRlZCEiKTtpZih0aGlzLl93YWl0aW5nKXtjb25zdCBlPXRoaXMuX3dhaXRpbmc7dGhpcy5fd2FpdGluZz1udWxsLGUoe3ZhbHVlOnR9KX1lbHNlIHRoaXMuX3F1ZXVlLnB1c2godCl9ZW5kKCl7aWYodGhpcy5fZW5kZWQ9ITAsdGhpcy5fd2FpdGluZyl7Y29uc3QgdD10aGlzLl93YWl0aW5nO3RoaXMuX3dhaXRpbmc9bnVsbCx0KHtkb25lOiEwfSl9fWRlc3Ryb3kodCl7dGhpcy5fZW5kZWQ9ITAsdGhpcy5lcnJvcj10fW5leHQoKXt2YXIgdCxlPXRoaXM7cmV0dXJuKHQ9ZnVuY3Rpb24qKCl7aWYoZS5fcXVldWUubGVuZ3RoPjApcmV0dXJue3ZhbHVlOmUuX3F1ZXVlLnNoaWZ0KCl9O2lmKGUuX2VuZGVkKXJldHVybntkb25lOiEwfTtpZihlLl93YWl0aW5nKXRocm93IEVycm9yKCJZb3UgY2Fubm90IGNhbGwgcmVhZCB1bnRpbCB0aGUgcHJldmlvdXMgY2FsbCB0byByZWFkIGhhcyByZXR1cm5lZCEiKTtyZXR1cm4gbmV3IFByb21pc2UodD0+e2UuX3dhaXRpbmc9dH0pfSxmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGksbyl7dmFyIGE9dC5hcHBseShlLHIpO2Z1bmN0aW9uIHModCl7bihhLGksbyxzLHUsIm5leHQiLHQpfWZ1bmN0aW9uIHUodCl7bihhLGksbyxzLHUsInRocm93Iix0KX1zKHZvaWQgMCl9KX0pKCl9fX0sZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9dC5leHBvcnRzPXt9O2Z1bmN0aW9uIG8oKXt0aHJvdyBuZXcgRXJyb3IoInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBhKCl7dGhyb3cgbmV3IEVycm9yKCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBzKHQpe2lmKHI9PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KHQsMCk7aWYoKHI9PT1vfHwhcikmJnNldFRpbWVvdXQpcmV0dXJuIHI9c2V0VGltZW91dCxzZXRUaW1lb3V0KHQsMCk7dHJ5e3JldHVybiByKHQsMCl9Y2F0Y2goZSl7dHJ5e3JldHVybiByLmNhbGwobnVsbCx0LDApfWNhdGNoKGUpe3JldHVybiByLmNhbGwodGhpcyx0LDApfX19IWZ1bmN0aW9uKCl7dHJ5e3I9ImZ1bmN0aW9uIj09dHlwZW9mIHNldFRpbWVvdXQ/c2V0VGltZW91dDpvfWNhdGNoKHQpe3I9b310cnl7bj0iZnVuY3Rpb24iPT10eXBlb2YgY2xlYXJUaW1lb3V0P2NsZWFyVGltZW91dDphfWNhdGNoKHQpe249YX19KCk7dmFyIHUsYz1bXSxmPSExLGw9LTE7ZnVuY3Rpb24gZCgpe2YmJnUmJihmPSExLHUubGVuZ3RoP2M9dS5jb25jYXQoYyk6bD0tMSxjLmxlbmd0aCYmaCgpKX1mdW5jdGlvbiBoKCl7aWYoIWYpe3ZhciB0PXMoZCk7Zj0hMDtmb3IodmFyIGU9Yy5sZW5ndGg7ZTspe2Zvcih1PWMsYz1bXTsrK2w8ZTspdSYmdVtsXS5ydW4oKTtsPS0xLGU9Yy5sZW5ndGh9dT1udWxsLGY9ITEsZnVuY3Rpb24odCl7aWYobj09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KHQpO2lmKChuPT09YXx8IW4pJiZjbGVhclRpbWVvdXQpcmV0dXJuIG49Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dCh0KTt0cnl7bih0KX1jYXRjaChlKXt0cnl7cmV0dXJuIG4uY2FsbChudWxsLHQpfWNhdGNoKGUpe3JldHVybiBuLmNhbGwodGhpcyx0KX19fSh0KX19ZnVuY3Rpb24gcCh0LGUpe3RoaXMuZnVuPXQsdGhpcy5hcnJheT1lfWZ1bmN0aW9uIGcoKXt9aS5uZXh0VGljaz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciByPTE7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyllW3ItMV09YXJndW1lbnRzW3JdO2MucHVzaChuZXcgcCh0LGUpKSwxIT09Yy5sZW5ndGh8fGZ8fHMoaCl9LHAucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9LGkudGl0bGU9ImJyb3dzZXIiLGkuYnJvd3Nlcj0hMCxpLmVudj17fSxpLmFyZ3Y9W10saS52ZXJzaW9uPSIiLGkudmVyc2lvbnM9e30saS5vbj1nLGkuYWRkTGlzdGVuZXI9ZyxpLm9uY2U9ZyxpLm9mZj1nLGkucmVtb3ZlTGlzdGVuZXI9ZyxpLnJlbW92ZUFsbExpc3RlbmVycz1nLGkuZW1pdD1nLGkucHJlcGVuZExpc3RlbmVyPWcsaS5wcmVwZW5kT25jZUxpc3RlbmVyPWcsaS5saXN0ZW5lcnM9ZnVuY3Rpb24odCl7cmV0dXJuW119LGkuYmluZGluZz1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkIil9LGkuY3dkPWZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxpLmNoZGlyPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkIil9LGkudW1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH19LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KTt2YXIgbj1yKDkyKSxpPXIubihuKSxvPXIoMSksYT1yKDI3KSxzPXIoMjMpLHU9cigyKTtmdW5jdGlvbiBjKHQsZSxyLG4saSxvLGEpe3RyeXt2YXIgcz10W29dKGEpLHU9cy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCByKHQpfXMuZG9uZT9lKHUpOlByb21pc2UucmVzb2x2ZSh1KS50aGVuKG4saSl9Y2xhc3MgZntzdGF0aWMgaXNJZ25vcmVkKHtmczp0LGRpcjplLGdpdGRpcjpyPU9iamVjdCh1LmEpKGUsIi5naXQiKSxmaWxlcGF0aDpufSl7cmV0dXJuKGY9ZnVuY3Rpb24qKCl7Y29uc3Qgcj1uZXcgby5hKHQpO2lmKCIuZ2l0Ij09PU9iamVjdChhLmEpKG4pKXJldHVybiEwO2lmKCIuIj09PW4pcmV0dXJuITE7Y29uc3QgYz1be2dpdGlnbm9yZTpPYmplY3QodS5hKShlLCIuZ2l0aWdub3JlIiksZmlsZXBhdGg6bn1dLGY9bi5zcGxpdCgiLyIpO2ZvcihsZXQgdD0xO3Q8Zi5sZW5ndGg7dCsrKXtjb25zdCByPWYuc2xpY2UoMCx0KS5qb2luKCIvIiksbj1mLnNsaWNlKHQpLmpvaW4oIi8iKTtjLnB1c2goe2dpdGlnbm9yZTpPYmplY3QodS5hKShlLHIsIi5naXRpZ25vcmUiKSxmaWxlcGF0aDpufSl9bGV0IGw9ITE7Zm9yKGNvbnN0IHQgb2YgYyl7bGV0IGU7dHJ5e2U9eWllbGQgci5yZWFkKHQuZ2l0aWdub3JlLCJ1dGY4Iil9Y2F0Y2godCl7aWYoIk5PRU5UIj09PXQuY29kZSljb250aW51ZX1jb25zdCBuPWkoKSgpLmFkZChlKSxvPU9iamVjdChzLmEpKHQuZmlsZXBhdGgpO2lmKCIuIiE9PW8mJm4uaWdub3JlcyhvKSlyZXR1cm4hMDtsPWw/IW4udGVzdCh0LmZpbGVwYXRoKS51bmlnbm9yZWQ6bi50ZXN0KHQuZmlsZXBhdGgpLmlnbm9yZWR9cmV0dXJuIGx9LGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocixuKXt2YXIgaT1mLmFwcGx5KHQsZSk7ZnVuY3Rpb24gbyh0KXtjKGkscixuLG8sYSwibmV4dCIsdCl9ZnVuY3Rpb24gYSh0KXtjKGkscixuLG8sYSwidGhyb3ciLHQpfW8odm9pZCAwKX0pfSkoKTt2YXIgZn19fSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBvfSk7dmFyIG49cigyNyksaT1yKDIzKTtmdW5jdGlvbiBvKHQpe2NvbnN0IGU9bmV3IE1hcCxyPWZ1bmN0aW9uKHQpe2lmKCFlLmhhcyh0KSl7Y29uc3Qgbz17dHlwZToidHJlZSIsZnVsbHBhdGg6dCxiYXNlbmFtZTpPYmplY3Qobi5hKSh0KSxtZXRhZGF0YTp7fSxjaGlsZHJlbjpbXX07ZS5zZXQodCxvKSxvLnBhcmVudD1yKE9iamVjdChpLmEpKHQpKSxvLnBhcmVudCYmby5wYXJlbnQhPT1vJiZvLnBhcmVudC5jaGlsZHJlbi5wdXNoKG8pfXJldHVybiBlLmdldCh0KX0sbz1mdW5jdGlvbih0LG8pe2lmKCFlLmhhcyh0KSl7Y29uc3QgYT17dHlwZToiYmxvYiIsZnVsbHBhdGg6dCxiYXNlbmFtZTpPYmplY3Qobi5hKSh0KSxtZXRhZGF0YTpvLHBhcmVudDpyKE9iamVjdChpLmEpKHQpKSxjaGlsZHJlbjpbXX07YS5wYXJlbnQmJmEucGFyZW50LmNoaWxkcmVuLnB1c2goYSksZS5zZXQodCxhKX1yZXR1cm4gZS5nZXQodCl9O3IoIi4iKTtmb3IoY29uc3QgZSBvZiB0KW8oZS5wYXRoLGUpO3JldHVybiBlfX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pO3ZhciBuPXIoMCk7ZnVuY3Rpb24gaSh0LGUpe3N3aXRjaCh0KXtjYXNlImdpdGh1YiI6cmV0dXJue3VzZXJuYW1lOmUscGFzc3dvcmQ6Ingtb2F1dGgtYmFzaWMifTtjYXNlImdpdGh1YmFwcCI6cmV0dXJue3VzZXJuYW1lOiJ4LWFjY2Vzcy10b2tlbiIscGFzc3dvcmQ6ZX07Y2FzZSJiaXRidWNrZXQiOnJldHVybnt1c2VybmFtZToieC10b2tlbi1hdXRoIixwYXNzd29yZDplfTtjYXNlImdpdGxhYiI6cmV0dXJue3VzZXJuYW1lOiJvYXV0aDIiLHBhc3N3b3JkOmV9O2RlZmF1bHQ6dGhyb3cgbmV3IG4uYihuLmEuVW5rbm93bk9hdXRoMkZvcm1hdCx7Y29tcGFueTp0fSl9fX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pO3ZhciBuPXIoNDgpLGk9cig5KTtmdW5jdGlvbiBvKHQsZSxyLG4saSxvLGEpe3RyeXt2YXIgcz10W29dKGEpLHU9cy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCByKHQpfXMuZG9uZT9lKHUpOlByb21pc2UucmVzb2x2ZSh1KS50aGVuKG4saSl9Y2xhc3MgYXtzdGF0aWMgZGVtdXgodCl7Y29uc3QgZT1pLmEuc3RyZWFtUmVhZGVyKHQpLHI9bmV3IG4uYSxhPW5ldyBuLmEscz1uZXcgbi5hLHU9ZnVuY3Rpb24oKXt2YXIgdCxuPSh0PWZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgZSgpO2lmKG51bGw9PT10KXJldHVybiB1KCk7aWYoITA9PT10KXJldHVybiByLmVuZCgpLHMuZW5kKCksdm9pZCBhLmVuZCgpO3N3aXRjaCh0WzBdKXtjYXNlIDE6YS53cml0ZSh0LnNsaWNlKDEpKTticmVhaztjYXNlIDI6cy53cml0ZSh0LnNsaWNlKDEpKTticmVhaztjYXNlIDM6Y29uc3QgZT10LnNsaWNlKDEpO3JldHVybiBzLndyaXRlKGUpLHZvaWQgYS5kZXN0cm95KG5ldyBFcnJvcihlLnRvU3RyaW5nKCJ1dGY4IikpKTtkZWZhdWx0OnIud3JpdGUodC5zbGljZSgwKSl9dSgpfSxmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4saSl7dmFyIGE9dC5hcHBseShlLHIpO2Z1bmN0aW9uIHModCl7byhhLG4saSxzLHUsIm5leHQiLHQpfWZ1bmN0aW9uIHUodCl7byhhLG4saSxzLHUsInRocm93Iix0KX1zKHZvaWQgMCl9KX0pO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCk7cmV0dXJuIHUoKSx7cGFja2V0bGluZXM6cixwYWNrZmlsZTphLHByb2dyZXNzOnN9fX19LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtsZXQgZT10PjA/dD4+MTI6MDs0IT09ZSYmOCE9PWUmJjEwIT09ZSYmMTQhPT1lJiYoZT04KTtsZXQgcj01MTEmdDtyZXR1cm4gcj03MyZyPzQ5Mzo0MjAsOCE9PWUmJihyPTApLChlPDwxMikrcn1yLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gbn0pfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIG49cigwKTtjbGFzcyBpe2NvbnN0cnVjdG9yKHtyZW1vdGVQYXRoOnQsbG9jYWxQYXRoOmUsZm9yY2U6cixtYXRjaFByZWZpeDpufSl7T2JqZWN0LmFzc2lnbih0aGlzLHtyZW1vdGVQYXRoOnQsbG9jYWxQYXRoOmUsZm9yY2U6cixtYXRjaFByZWZpeDpufSl9c3RhdGljIGZyb20odCl7Y29uc3RbZSxyLG8sYSxzXT10Lm1hdGNoKC9eKFwrPykoLio/KShcKj8pOiguKj8pKFwqPykkLykuc2xpY2UoMSksdT0iKyI9PT1lLGM9IioiPT09bztpZihjIT09KCIqIj09PXMpKXRocm93IG5ldyBuLmIobi5hLkludGVybmFsRmFpbCx7bWVzc2FnZToiSW52YWxpZCByZWZzcGVjIn0pO3JldHVybiBuZXcgaSh7cmVtb3RlUGF0aDpyLGxvY2FsUGF0aDphLGZvcmNlOnUsbWF0Y2hQcmVmaXg6Y30pfXRyYW5zbGF0ZSh0KXtpZih0aGlzLm1hdGNoUHJlZml4KXtpZih0LnN0YXJ0c1dpdGgodGhpcy5yZW1vdGVQYXRoKSlyZXR1cm4gdGhpcy5sb2NhbFBhdGgrdC5yZXBsYWNlKHRoaXMucmVtb3RlUGF0aCwiIil9ZWxzZSBpZih0PT09dGhpcy5yZW1vdGVQYXRoKXJldHVybiB0aGlzLmxvY2FsUGF0aDtyZXR1cm4gbnVsbH1yZXZlcnNlVHJhbnNsYXRlKHQpe2lmKHRoaXMubWF0Y2hQcmVmaXgpe2lmKHQuc3RhcnRzV2l0aCh0aGlzLmxvY2FsUGF0aCkpcmV0dXJuIHRoaXMucmVtb3RlUGF0aCt0LnJlcGxhY2UodGhpcy5sb2NhbFBhdGgsIiIpfWVsc2UgaWYodD09PXRoaXMubG9jYWxQYXRoKXJldHVybiB0aGlzLnJlbW90ZVBhdGg7cmV0dXJuIG51bGx9fX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gc30pO3ZhciBuPXIoNDEpO2Z1bmN0aW9uIGkodCxlLHIsbixpLG8sYSl7dHJ5e3ZhciBzPXRbb10oYSksdT1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UodSk6UHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4obixpKX1jb25zdCBvPW5ldyBNYXA7ZnVuY3Rpb24gYSgpe3ZhciB0O3JldHVybiB0PWZ1bmN0aW9uKih7ZnM6dCxmaWxlbmFtZTplLGdldEV4dGVybmFsUmVmRGVsdGE6cixlbWl0dGVyOmksZW1pdHRlclByZWZpeDpvfSl7Y29uc3QgYT15aWVsZCB0LnJlYWQoZSk7cmV0dXJuIG4uYS5mcm9tSWR4KHtpZHg6YSxnZXRFeHRlcm5hbFJlZkRlbHRhOnJ9KX0sKGE9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLG8pe3ZhciBhPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBzKHQpe2koYSxuLG8scyx1LCJuZXh0Iix0KX1mdW5jdGlvbiB1KHQpe2koYSxuLG8scyx1LCJ0aHJvdyIsdCl9cyh2b2lkIDApfSl9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gcyh7ZnM6dCxmaWxlbmFtZTplLGdldEV4dGVybmFsUmVmRGVsdGE6cixlbWl0dGVyOm4sZW1pdHRlclByZWZpeDppfSl7bGV0IHM9by5nZXQoZSk7cmV0dXJuIHN8fChzPWZ1bmN0aW9uKHQpe3JldHVybiBhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0oe2ZzOnQsZmlsZW5hbWU6ZSxnZXRFeHRlcm5hbFJlZkRlbHRhOnIsZW1pdHRlcjpuLGVtaXR0ZXJQcmVmaXg6aX0pLG8uc2V0KGUscykpLHN9fSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbih0KXtyLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pO3ZhciBuPXIoNTgpO2Z1bmN0aW9uIGkodCxlLHIsbixpLG8sYSl7dHJ5e3ZhciBzPXRbb10oYSksdT1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UodSk6UHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4obixpKX1mdW5jdGlvbiBvKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4sbyl7dmFyIGE9dC5hcHBseShlLHIpO2Z1bmN0aW9uIHModCl7aShhLG4sbyxzLHUsIm5leHQiLHQpfWZ1bmN0aW9uIHUodCl7aShhLG4sbyxzLHUsInRocm93Iix0KX1zKHZvaWQgMCl9KX19Y2xhc3MgYXtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0cmVhbT1PYmplY3Qobi5hKSh0KSx0aGlzLmJ1ZmZlcj1udWxsLHRoaXMuY3Vyc29yPTAsdGhpcy51bmRvQ3Vyc29yPTAsdGhpcy5zdGFydGVkPSExLHRoaXMuX2VuZGVkPSExLHRoaXMuX2Rpc2NhcmRlZEJ5dGVzPTB9ZW9mKCl7cmV0dXJuIHRoaXMuX2VuZGVkJiZ0aGlzLmN1cnNvcj09PXRoaXMuYnVmZmVyLmxlbmd0aH10ZWxsKCl7cmV0dXJuIHRoaXMuX2Rpc2NhcmRlZEJ5dGVzK3RoaXMuY3Vyc29yfWJ5dGUoKXt2YXIgdD10aGlzO3JldHVybiBvKGZ1bmN0aW9uKigpe2lmKCF0LmVvZigpJiYodC5zdGFydGVkfHwoeWllbGQgdC5faW5pdCgpKSx0LmN1cnNvciE9PXQuYnVmZmVyLmxlbmd0aHx8KHlpZWxkIHQuX2xvYWRuZXh0KCksIXQuX2VuZGVkKSkpcmV0dXJuIHQuX21vdmVDdXJzb3IoMSksdC5idWZmZXJbdC51bmRvQ3Vyc29yXX0pKCl9Y2h1bmsoKXt2YXIgdD10aGlzO3JldHVybiBvKGZ1bmN0aW9uKigpe2lmKCF0LmVvZigpJiYodC5zdGFydGVkfHwoeWllbGQgdC5faW5pdCgpKSx0LmN1cnNvciE9PXQuYnVmZmVyLmxlbmd0aHx8KHlpZWxkIHQuX2xvYWRuZXh0KCksIXQuX2VuZGVkKSkpcmV0dXJuIHQuX21vdmVDdXJzb3IodC5idWZmZXIubGVuZ3RoKSx0LmJ1ZmZlci5zbGljZSh0LnVuZG9DdXJzb3IsdC5jdXJzb3IpfSkoKX1yZWFkKHQpe3ZhciBlPXRoaXM7cmV0dXJuIG8oZnVuY3Rpb24qKCl7aWYoIWUuZW9mKCkpcmV0dXJuIGUuc3RhcnRlZHx8KHlpZWxkIGUuX2luaXQoKSksZS5jdXJzb3IrdD5lLmJ1ZmZlci5sZW5ndGgmJihlLl90cmltKCkseWllbGQgZS5fYWNjdW11bGF0ZSh0KSksZS5fbW92ZUN1cnNvcih0KSxlLmJ1ZmZlci5zbGljZShlLnVuZG9DdXJzb3IsZS5jdXJzb3IpfSkoKX1za2lwKHQpe3ZhciBlPXRoaXM7cmV0dXJuIG8oZnVuY3Rpb24qKCl7ZS5lb2YoKXx8KGUuc3RhcnRlZHx8KHlpZWxkIGUuX2luaXQoKSksZS5jdXJzb3IrdD5lLmJ1ZmZlci5sZW5ndGgmJihlLl90cmltKCkseWllbGQgZS5fYWNjdW11bGF0ZSh0KSksZS5fbW92ZUN1cnNvcih0KSl9KSgpfXVuZG8oKXt2YXIgdD10aGlzO3JldHVybiBvKGZ1bmN0aW9uKigpe3QuY3Vyc29yPXQudW5kb0N1cnNvcn0pKCl9X25leHQoKXt2YXIgZT10aGlzO3JldHVybiBvKGZ1bmN0aW9uKigpe2Uuc3RhcnRlZD0hMDtsZXR7ZG9uZTpyLHZhbHVlOm59PXlpZWxkIGUuc3RyZWFtLm5leHQoKTtyZXR1cm4gciYmKGUuX2VuZGVkPSEwKSxuJiYobj10LmZyb20obikpLG59KSgpfV90cmltKCl7dGhpcy5idWZmZXI9dGhpcy5idWZmZXIuc2xpY2UodGhpcy51bmRvQ3Vyc29yKSx0aGlzLmN1cnNvci09dGhpcy51bmRvQ3Vyc29yLHRoaXMuX2Rpc2NhcmRlZEJ5dGVzKz10aGlzLnVuZG9DdXJzb3IsdGhpcy51bmRvQ3Vyc29yPTB9X21vdmVDdXJzb3IodCl7dGhpcy51bmRvQ3Vyc29yPXRoaXMuY3Vyc29yLHRoaXMuY3Vyc29yKz10LHRoaXMuY3Vyc29yPnRoaXMuYnVmZmVyLmxlbmd0aCYmKHRoaXMuY3Vyc29yPXRoaXMuYnVmZmVyLmxlbmd0aCl9X2FjY3VtdWxhdGUoZSl7dmFyIHI9dGhpcztyZXR1cm4gbyhmdW5jdGlvbiooKXtpZihyLl9lbmRlZClyZXR1cm47Y29uc3Qgbj1bci5idWZmZXJdO2Zvcig7ci5jdXJzb3IrZT5zKG4pOyl7Y29uc3QgdD15aWVsZCByLl9uZXh0KCk7aWYoci5fZW5kZWQpYnJlYWs7bi5wdXNoKHQpfXIuYnVmZmVyPXQuY29uY2F0KG4pfSkoKX1fbG9hZG5leHQoKXt2YXIgdD10aGlzO3JldHVybiBvKGZ1bmN0aW9uKigpe3QuX2Rpc2NhcmRlZEJ5dGVzKz10LmJ1ZmZlci5sZW5ndGgsdC51bmRvQ3Vyc29yPTAsdC5jdXJzb3I9MCx0LmJ1ZmZlcj15aWVsZCB0Ll9uZXh0KCl9KSgpfV9pbml0KCl7dmFyIHQ9dGhpcztyZXR1cm4gbyhmdW5jdGlvbiooKXt0LmJ1ZmZlcj15aWVsZCB0Ll9uZXh0KCl9KSgpfX1mdW5jdGlvbiBzKHQpe3JldHVybiB0LnJlZHVjZSgodCxlKT0+dCtlLmxlbmd0aCwwKX19KS5jYWxsKHRoaXMscigxMCkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pO3ZhciBuPXIoNTkpO2Z1bmN0aW9uIGkodCl7cmV0dXJuIHRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdP3RbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk6dFtTeW1ib2wuaXRlcmF0b3JdP3RbU3ltYm9sLml0ZXJhdG9yXSgpOnQubmV4dD90Ok9iamVjdChuLmIpKHQpfX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2lmKHRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKXJldHVybiB0O2NvbnN0IGU9dC5nZXRSZWFkZXIoKTtyZXR1cm57bmV4dDooKT0+ZS5yZWFkKCkscmV0dXJuOigpPT4oZS5yZWxlYXNlTG9jaygpLHt9KSxbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCl7cmV0dXJuIHRoaXN9fX1mdW5jdGlvbiBpKHQpe2xldCBlPVt0XTtyZXR1cm57bmV4dDooKT0+UHJvbWlzZS5yZXNvbHZlKHtkb25lOjA9PT1lLmxlbmd0aCx2YWx1ZTplLnBvcCgpfSkscmV0dXJuOigpPT4oZT1bXSx7fSksW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpe3JldHVybiB0aGlzfX19ci5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG59KSxyLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBufSk7Y29uc3Qgbj12b2lkIDA9PT1BcnJheS5wcm90b3R5cGUuZmxhdD90PT50LnJlZHVjZSgodCxlKT0+dC5jb25jYXQoZSksW10pOnQ9PnQuZmxhdCgpfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbih0KXtyLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pO3ZhciBuPXIoNTkpLGk9cigzOCk7ZnVuY3Rpb24gbyh0LGUscixuLGksbyxhKXt0cnl7dmFyIHM9dFtvXShhKSx1PXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZSh1KTpQcm9taXNlLnJlc29sdmUodSkudGhlbihuLGkpfWZ1bmN0aW9uIGEodCl7cmV0dXJuIHMuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHMoKXt2YXIgZTtyZXR1cm4gZT1mdW5jdGlvbiooe2NvcmU6ZSxlbWl0dGVyOnIsZW1pdHRlclByZWZpeDpvLHVybDphLG1ldGhvZDpzPSJHRVQiLGhlYWRlcnM6dT17fSxib2R5OmN9KXtjJiYoYz15aWVsZCBPYmplY3QoaS5hKShjKSk7Y29uc3QgZj15aWVsZCB0LmZldGNoKGEse21ldGhvZDpzLGhlYWRlcnM6dSxib2R5OmN9KSxsPWYuYm9keSYmZi5ib2R5LmdldFJlYWRlcj9PYmplY3Qobi5hKShmLmJvZHkpOltuZXcgVWludDhBcnJheSh5aWVsZCBmLmFycmF5QnVmZmVyKCkpXTt1PXt9O2Zvcihjb25zdFt0LGVdb2YgZi5oZWFkZXJzLmVudHJpZXMoKSl1W3RdPWU7cmV0dXJue3VybDpmLnVybCxtZXRob2Q6Zi5tZXRob2Qsc3RhdHVzQ29kZTpmLnN0YXR1cyxzdGF0dXNNZXNzYWdlOmYuc3RhdHVzVGV4dCxib2R5OmwsaGVhZGVyczp1fX0sKHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLGkpe3ZhciBhPWUuYXBwbHkodCxyKTtmdW5jdGlvbiBzKHQpe28oYSxuLGkscyx1LCJuZXh0Iix0KX1mdW5jdGlvbiB1KHQpe28oYSxuLGkscyx1LCJ0aHJvdyIsdCl9cyh2b2lkIDApfSl9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSkuY2FsbCh0aGlzLHIoNzYpKX0sZnVuY3Rpb24odCxlKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciByPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIjt0LmV4cG9ydHMudG9CeXRlQXJyYXk9ZnVuY3Rpb24odCl7dmFyIGUsbixpLG8sYSxzO2lmKHQubGVuZ3RoJTQ+MCl0aHJvdyJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Ijtmb3Iocz1bXSxpPShhPShhPXQuaW5kZXhPZigiPSIpKT4wP3QubGVuZ3RoLWE6MCk+MD90Lmxlbmd0aC00OnQubGVuZ3RoLGU9MCxuPTA7ZTxpO2UrPTQsbis9MylvPXIuaW5kZXhPZih0W2VdKTw8MTh8ci5pbmRleE9mKHRbZSsxXSk8PDEyfHIuaW5kZXhPZih0W2UrMl0pPDw2fHIuaW5kZXhPZih0W2UrM10pLHMucHVzaCgoMTY3MTE2ODAmbyk+PjE2KSxzLnB1c2goKDY1MjgwJm8pPj44KSxzLnB1c2goMjU1Jm8pO3JldHVybiAyPT09YT8obz1yLmluZGV4T2YodFtlXSk8PDJ8ci5pbmRleE9mKHRbZSsxXSk+PjQscy5wdXNoKDI1NSZvKSk6MT09PWEmJihvPXIuaW5kZXhPZih0W2VdKTw8MTB8ci5pbmRleE9mKHRbZSsxXSk8PDR8ci5pbmRleE9mKHRbZSsyXSk+PjIscy5wdXNoKG8+PjgmMjU1KSxzLnB1c2goMjU1Jm8pKSxzfSx0LmV4cG9ydHMuZnJvbUJ5dGVBcnJheT1mdW5jdGlvbih0KXt2YXIgZSxuLGksbyxhPXQubGVuZ3RoJTMscz0iIjtmb3IoZT0wLGk9dC5sZW5ndGgtYTtlPGk7ZSs9MyluPSh0W2VdPDwxNikrKHRbZSsxXTw8OCkrdFtlKzJdLHMrPXJbKG89bik+PjE4JjYzXStyW28+PjEyJjYzXStyW28+PjYmNjNdK3JbNjMmb107c3dpdGNoKGEpe2Nhc2UgMTpuPXRbdC5sZW5ndGgtMV0scys9cltuPj4yXSxzKz1yW248PDQmNjNdLHMrPSI9PSI7YnJlYWs7Y2FzZSAyOm49KHRbdC5sZW5ndGgtMl08PDgpK3RbdC5sZW5ndGgtMV0scys9cltuPj4xMF0scys9cltuPj40JjYzXSxzKz1yW248PDImNjNdLHMrPSI9In1yZXR1cm4gc319KCl9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPXsyOiJuZWVkIGRpY3Rpb25hcnkiLDE6InN0cmVhbSBlbmQiLDA6IiIsIi0xIjoiZmlsZSBlcnJvciIsIi0yIjoic3RyZWFtIGVycm9yIiwiLTMiOiJkYXRhIGVycm9yIiwiLTQiOiJpbnN1ZmZpY2llbnQgbWVtb3J5IiwiLTUiOiJidWZmZXIgZXJyb3IiLCItNiI6ImluY29tcGF0aWJsZSB2ZXJzaW9uIn19LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGksbyxhKXt0cnl7dmFyIHM9dFtvXShhKSx1PXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZSh1KTpQcm9taXNlLnJlc29sdmUodSkudGhlbihuLGkpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIG8uYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIG8oKXt2YXIgdDtyZXR1cm4gdD1mdW5jdGlvbioodCl7cmV0dXJuIG5ldyBQcm9taXNlKChlLHIpPT5zZXRUaW1lb3V0KGUsdCkpfSwobz1mdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGksbyl7dmFyIGE9dC5hcHBseShlLHIpO2Z1bmN0aW9uIHModCl7bihhLGksbyxzLHUsIm5leHQiLHQpfWZ1bmN0aW9uIHUodCl7bihhLGksbyxzLHUsInRocm93Iix0KX1zKHZvaWQgMCl9KX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbih0KXtyLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gdX0pO3ZhciBuPXIoMjEpLGk9cig0MCksbz1yKDIwKSxhPXIoMTIpLHM9cigwKTtjbGFzcyB1e2NvbnN0cnVjdG9yKGUpe2lmKHRoaXMuX2RpcnR5PSExLHQuaXNCdWZmZXIoZSkpdGhpcy5fZW50cmllcz1mdW5jdGlvbih0KXtjb25zdCBlPU9iamVjdChhLmEpKHQuc2xpY2UoMCwtMjApKSxyPXQuc2xpY2UoLTIwKS50b1N0cmluZygiaGV4Iik7aWYociE9PWUpdGhyb3cgbmV3IHMuYihzLmEuSW50ZXJuYWxGYWlsLHttZXNzYWdlOmBJbnZhbGlkIGNoZWNrc3VtIGluIEdpdEluZGV4IGJ1ZmZlcjogZXhwZWN0ZWQgJHtyfSBidXQgc2F3ICR7ZX1gfSk7Y29uc3QgaT1uZXcgbi5hKHQpLG89bmV3IE1hcCx1PWkudG9TdHJpbmcoInV0ZjgiLDQpO2lmKCJESVJDIiE9PXUpdGhyb3cgbmV3IHMuYihzLmEuSW50ZXJuYWxGYWlsLHttZXNzYWdlOmBJbmF2bGlkIGRpcmNhY2hlIG1hZ2ljIGZpbGUgbnVtYmVyOiAke3V9YH0pO2NvbnN0IGM9aS5yZWFkVUludDMyQkUoKTtpZigyIT09Yyl0aHJvdyBuZXcgcy5iKHMuYS5JbnRlcm5hbEZhaWwse21lc3NhZ2U6YFVuc3VwcG9ydGVkIGRpcmNhY2hlIHZlcnNpb246ICR7Y31gfSk7Y29uc3QgZj1pLnJlYWRVSW50MzJCRSgpO2xldCBsPTA7Zm9yKDshaS5lb2YoKSYmbDxmOyl7Y29uc3QgZT17fTtlLmN0aW1lU2Vjb25kcz1pLnJlYWRVSW50MzJCRSgpLGUuY3RpbWVOYW5vc2Vjb25kcz1pLnJlYWRVSW50MzJCRSgpLGUubXRpbWVTZWNvbmRzPWkucmVhZFVJbnQzMkJFKCksZS5tdGltZU5hbm9zZWNvbmRzPWkucmVhZFVJbnQzMkJFKCksZS5kZXY9aS5yZWFkVUludDMyQkUoKSxlLmlubz1pLnJlYWRVSW50MzJCRSgpLGUubW9kZT1pLnJlYWRVSW50MzJCRSgpLGUudWlkPWkucmVhZFVJbnQzMkJFKCksZS5naWQ9aS5yZWFkVUludDMyQkUoKSxlLnNpemU9aS5yZWFkVUludDMyQkUoKSxlLm9pZD1pLnNsaWNlKDIwKS50b1N0cmluZygiaGV4Iik7Y29uc3Qgcj1pLnJlYWRVSW50MTZCRSgpO2UuZmxhZ3M9KGQ9cix7YXNzdW1lVmFsaWQ6Qm9vbGVhbigzMjc2OCZkKSxleHRlbmRlZDpCb29sZWFuKDE2Mzg0JmQpLHN0YWdlOigxMjI4OCZkKT4+MTIsbmFtZUxlbmd0aDo0MDk1JmR9KTtjb25zdCBuPXQuaW5kZXhPZigwLGkudGVsbCgpKzEpLWkudGVsbCgpO2lmKG48MSl0aHJvdyBuZXcgcy5iKHMuYS5JbnRlcm5hbEZhaWwse21lc3NhZ2U6YEdvdCBhIHBhdGggbGVuZ3RoIG9mOiAke259YH0pO2UucGF0aD1pLnRvU3RyaW5nKCJ1dGY4IixuKTtsZXQgYT04LShpLnRlbGwoKS0xMiklODtmb3IoMD09PWEmJihhPTgpO2EtLTspe2NvbnN0IHQ9aS5yZWFkVUludDgoKTtpZigwIT09dCl0aHJvdyBuZXcgcy5iKHMuYS5JbnRlcm5hbEZhaWwse21lc3NhZ2U6YEV4cGVjdGVkIDEtOCBudWxsIGNoYXJhY3RlcnMgYnV0IGdvdCAnJHt0fScgYWZ0ZXIgJHtlLnBhdGh9YH0pO2lmKGkuZW9mKCkpdGhyb3cgbmV3IHMuYihzLmEuSW50ZXJuYWxGYWlsLHttZXNzYWdlOiJVbmV4cGVjdGVkIGVuZCBvZiBmaWxlIn0pfW8uc2V0KGUucGF0aCxlKSxsKyt9dmFyIGQ7cmV0dXJuIG99KGUpO2Vsc2V7aWYobnVsbCE9PWUpdGhyb3cgbmV3IHMuYihzLmEuSW50ZXJuYWxGYWlsLHttZXNzYWdlOiJpbnZhbGlkIHR5cGUgcGFzc2VkIHRvIEdpdEluZGV4IGNvbnN0cnVjdG9yIn0pO3RoaXMuX2VudHJpZXM9bmV3IE1hcH19c3RhdGljIGZyb20odCl7cmV0dXJuIG5ldyB1KHQpfWdldCBlbnRyaWVzKCl7cmV0dXJuWy4uLnRoaXMuX2VudHJpZXMudmFsdWVzKCldLnNvcnQoaS5hKX1nZXQgZW50cmllc01hcCgpe3JldHVybiB0aGlzLl9lbnRyaWVzfSpbU3ltYm9sLml0ZXJhdG9yXSgpe2Zvcihjb25zdCB0IG9mIHRoaXMuZW50cmllcyl5aWVsZCB0fWluc2VydCh7ZmlsZXBhdGg6ZSxzdGF0czpyLG9pZDpufSl7cj1PYmplY3Qoby5hKShyKTtjb25zdCBpPXQuZnJvbShlKSxhPXtjdGltZVNlY29uZHM6ci5jdGltZVNlY29uZHMsY3RpbWVOYW5vc2Vjb25kczpyLmN0aW1lTmFub3NlY29uZHMsbXRpbWVTZWNvbmRzOnIubXRpbWVTZWNvbmRzLG10aW1lTmFub3NlY29uZHM6ci5tdGltZU5hbm9zZWNvbmRzLGRldjpyLmRldixpbm86ci5pbm8sbW9kZTpyLm1vZGV8fDMzMTg4LHVpZDpyLnVpZCxnaWQ6ci5naWQsc2l6ZTpyLnNpemUscGF0aDplLG9pZDpuLGZsYWdzOnthc3N1bWVWYWxpZDohMSxleHRlbmRlZDohMSxzdGFnZTowLG5hbWVMZW5ndGg6aS5sZW5ndGg8NDA5NT9pLmxlbmd0aDo0MDk1fX07dGhpcy5fZW50cmllcy5zZXQoYS5wYXRoLGEpLHRoaXMuX2RpcnR5PSEwfWRlbGV0ZSh7ZmlsZXBhdGg6dH0pe2lmKHRoaXMuX2VudHJpZXMuaGFzKHQpKXRoaXMuX2VudHJpZXMuZGVsZXRlKHQpO2Vsc2UgZm9yKGNvbnN0IGUgb2YgdGhpcy5fZW50cmllcy5rZXlzKCkpZS5zdGFydHNXaXRoKHQrIi8iKSYmdGhpcy5fZW50cmllcy5kZWxldGUoZSk7dGhpcy5fZGlydHk9ITB9Y2xlYXIoKXt0aGlzLl9lbnRyaWVzLmNsZWFyKCksdGhpcy5fZGlydHk9ITB9cmVuZGVyKCl7cmV0dXJuIHRoaXMuZW50cmllcy5tYXAodD0+YCR7dC5tb2RlLnRvU3RyaW5nKDgpfSAke3Qub2lkfSAgICAke3QucGF0aH1gKS5qb2luKCJcbiIpfXRvT2JqZWN0KCl7Y29uc3QgZT10LmFsbG9jKDEyKSxyPW5ldyBuLmEoZSk7ci53cml0ZSgiRElSQyIsNCwidXRmOCIpLHIud3JpdGVVSW50MzJCRSgyKSxyLndyaXRlVUludDMyQkUodGhpcy5lbnRyaWVzLmxlbmd0aCk7Y29uc3QgaT10LmNvbmNhdCh0aGlzLmVudHJpZXMubWFwKGU9Pntjb25zdCByPXQuZnJvbShlLnBhdGgpLGk9OCpNYXRoLmNlaWwoKDYyK3IubGVuZ3RoKzEpLzgpLGE9dC5hbGxvYyhpKSxzPW5ldyBuLmEoYSksdT1PYmplY3Qoby5hKShlKTtyZXR1cm4gcy53cml0ZVVJbnQzMkJFKHUuY3RpbWVTZWNvbmRzKSxzLndyaXRlVUludDMyQkUodS5jdGltZU5hbm9zZWNvbmRzKSxzLndyaXRlVUludDMyQkUodS5tdGltZVNlY29uZHMpLHMud3JpdGVVSW50MzJCRSh1Lm10aW1lTmFub3NlY29uZHMpLHMud3JpdGVVSW50MzJCRSh1LmRldikscy53cml0ZVVJbnQzMkJFKHUuaW5vKSxzLndyaXRlVUludDMyQkUodS5tb2RlKSxzLndyaXRlVUludDMyQkUodS51aWQpLHMud3JpdGVVSW50MzJCRSh1LmdpZCkscy53cml0ZVVJbnQzMkJFKHUuc2l6ZSkscy53cml0ZShlLm9pZCwyMCwiaGV4Iikscy53cml0ZVVJbnQxNkJFKGZ1bmN0aW9uKGUpe2NvbnN0IHI9ZS5mbGFncztyZXR1cm4gci5leHRlbmRlZD0hMSxyLm5hbWVMZW5ndGg9TWF0aC5taW4odC5mcm9tKGUucGF0aCkubGVuZ3RoLDQwOTUpLChyLmFzc3VtZVZhbGlkPzMyNzY4OjApKyhyLmV4dGVuZGVkPzE2Mzg0OjApKygoMyZyLnN0YWdlKTw8MTIpKyg0MDk1JnIubmFtZUxlbmd0aCl9KGUpKSxzLndyaXRlKGUucGF0aCxyLmxlbmd0aCwidXRmOCIpLGF9KSkscz10LmNvbmNhdChbZSxpXSksdT1PYmplY3QoYS5hKShzKTtyZXR1cm4gdC5jb25jYXQoW3MsdC5mcm9tKHUsImhleCIpXSl9fX0pLmNhbGwodGhpcyxyKDEwKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpLG8sYSl7dHJ5e3ZhciBzPXRbb10oYSksdT1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UodSk6UHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4obixpKX1mdW5jdGlvbiBpKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGksbyl7dmFyIGE9dC5hcHBseShlLHIpO2Z1bmN0aW9uIHModCl7bihhLGksbyxzLHUsIm5leHQiLHQpfWZ1bmN0aW9uIHUodCl7bihhLGksbyxzLHUsInRocm93Iix0KX1zKHZvaWQgMCl9KX19ci5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGJ9KTtjb25zdCBvPXQ9PntpZigidHJ1ZSI9PT0odD10LnRyaW0oKS50b0xvd2VyQ2FzZSgpKXx8InllcyI9PT10fHwib24iPT09dClyZXR1cm4hMDtpZigiZmFsc2UiPT09dHx8Im5vIj09PXR8fCJvZmYiPT09dClyZXR1cm4hMTt0aHJvdyBFcnJvcihgRXhwZWN0ZWQgJ3RydWUnLCAnZmFsc2UnLCAneWVzJywgJ25vJywgJ29uJywgb3IgJ29mZicsIGJ1dCBnb3QgJHt0fWApfSxhPXtjb3JlOntmaWxlbW9kZTpvLGJhcmU6byxsb2dhbGxyZWZ1cGRhdGVzOm8sc3ltbGlua3M6byxpZ25vcmVjYXNlOm8sYmlnRmlsZVRocmVzaG9sZDp0PT57dD10LnRvTG93ZXJDYXNlKCk7bGV0IGU9cGFyc2VJbnQodCk7cmV0dXJuIHQuZW5kc1dpdGgoImsiKSYmKGUqPTEwMjQpLHQuZW5kc1dpdGgoIm0iKSYmKGUqPTEwNDg1NzYpLHQuZW5kc1dpdGgoImciKSYmKGUqPTEwNzM3NDE4MjQpLGV9fX0scz0vXlxbKFtBLVphLXowLTlfLl0rKSg/OiAiKC4qKSIpP1xdJC8sdT0vXltBLVphLXowLTlfLl0rJC8sYz0vXihbQS1aYS16XVx3KikoPzogKj0gKiguKikpPyQvLGY9L15bQS1aYS16XVx3KiQvLGw9L14oLio/KSggKlsjO10uKikkLyxkPXQ9Pntjb25zdCBlPXMuZXhlYyh0KTtpZihudWxsIT1lKXtjb25zdFt0LHJdPWUuc2xpY2UoMSk7cmV0dXJuW3Qscl19cmV0dXJuIG51bGx9LGg9dD0+e2NvbnN0IGU9Yy5leGVjKHQpO2lmKG51bGwhPWUpe2NvbnN0W3Qscj0idHJ1ZSJdPWUuc2xpY2UoMSksbj1wKHIpO3JldHVyblt0LG0obildfXJldHVybiBudWxsfSxwPXQ9Pntjb25zdCBlPWwuZXhlYyh0KTtpZihudWxsPT1lKXJldHVybiB0O2NvbnN0W3Isbl09ZS5zbGljZSgxKTtyZXR1cm4gZyhyKSYmZyhuKT9gJHtyfSR7bn1gOnJ9LGc9dD0+e3JldHVybih0Lm1hdGNoKC8oPzpefFteXFxdKSIvZyl8fFtdKS5sZW5ndGglMiE9MH0sbT10PT50LnNwbGl0KCIiKS5yZWR1Y2UoKHQsZSxyLG4pPT57Y29uc3QgaT0nIic9PT1lJiYiXFwiIT09bltyLTFdLG89IlxcIj09PWUmJiciJz09PW5bcisxXTtyZXR1cm4gaXx8bz90OnQrZX0sIiIpLHk9dD0+bnVsbCE9dD90LnRvTG93ZXJDYXNlKCk6bnVsbCx2PSh0LGUscik9Plt5KHQpLGUseShyKV0uZmlsdGVyKHQ9Pm51bGwhPXQpLmpvaW4oIi4iKSx3PSh0LGUpPT50LnJlZHVjZSgodCxyLG4pPT5lKHIpP246dCwtMSk7Y2xhc3MgYntjb25zdHJ1Y3Rvcih0KXtsZXQgZT1udWxsLHI9bnVsbDt0aGlzLnBhcnNlZENvbmZpZz10LnNwbGl0KCJcbiIpLm1hcCh0PT57bGV0IG49bnVsbCxpPW51bGw7Y29uc3Qgbz10LnRyaW0oKSxhPWQobykscz1udWxsIT1hO2lmKHMpW2Uscl09YTtlbHNle2NvbnN0IHQ9aChvKTtudWxsIT10JiYoW24saV09dCl9Y29uc3QgdT12KGUscixuKTtyZXR1cm57bGluZTp0LGlzU2VjdGlvbjpzLHNlY3Rpb246ZSxzdWJzZWN0aW9uOnIsbmFtZTpuLHZhbHVlOmkscGF0aDp1fX0pfXN0YXRpYyBmcm9tKHQpe3JldHVybiBuZXcgYih0KX1nZXQodCxlPSExKXt2YXIgcj10aGlzO3JldHVybiBpKGZ1bmN0aW9uKigpe2NvbnN0IG49ci5wYXJzZWRDb25maWcuZmlsdGVyKGU9PmUucGF0aD09PXQudG9Mb3dlckNhc2UoKSkubWFwKCh7c2VjdGlvbjp0LG5hbWU6ZSx2YWx1ZTpyfSk9Pntjb25zdCBuPWFbdF0mJmFbdF1bZV07cmV0dXJuIG4/bihyKTpyfSk7cmV0dXJuIGU/bjpuLnBvcCgpfSkoKX1nZXRhbGwodCl7dmFyIGU9dGhpcztyZXR1cm4gaShmdW5jdGlvbiooKXtyZXR1cm4gZS5nZXQodCwhMCl9KSgpfWdldFN1YnNlY3Rpb25zKHQpe3ZhciBlPXRoaXM7cmV0dXJuIGkoZnVuY3Rpb24qKCl7cmV0dXJuIGUucGFyc2VkQ29uZmlnLmZpbHRlcihlPT5lLnNlY3Rpb249PT10JiZlLmlzU2VjdGlvbikubWFwKHQ9PnQuc3Vic2VjdGlvbil9KSgpfWRlbGV0ZVNlY3Rpb24odCxlKXt2YXIgcj10aGlzO3JldHVybiBpKGZ1bmN0aW9uKigpe3IucGFyc2VkQ29uZmlnPXIucGFyc2VkQ29uZmlnLmZpbHRlcihyPT4hKHIuc2VjdGlvbj09PXQmJnIuc3Vic2VjdGlvbj09PWUpKX0pKCl9YXBwZW5kKHQsZSl7dmFyIHI9dGhpcztyZXR1cm4gaShmdW5jdGlvbiooKXtyZXR1cm4gci5zZXQodCxlLCEwKX0pKCl9c2V0KHQsZSxyPSExKXt2YXIgbj10aGlzO3JldHVybiBpKGZ1bmN0aW9uKigpe2NvbnN0IGk9dyhuLnBhcnNlZENvbmZpZyxlPT5lLnBhdGg9PT10LnRvTG93ZXJDYXNlKCkpO2lmKG51bGw9PWUpLTEhPT1pJiZuLnBhcnNlZENvbmZpZy5zcGxpY2UoaSwxKTtlbHNlIGlmKC0xIT09aSl7Y29uc3QgdD1uLnBhcnNlZENvbmZpZ1tpXSxvPU9iamVjdC5hc3NpZ24oe30sdCx7dmFsdWU6ZSxtb2RpZmllZDohMH0pO3I/bi5wYXJzZWRDb25maWcuc3BsaWNlKGkrMSwwLG8pOm4ucGFyc2VkQ29uZmlnW2ldPW99ZWxzZXtjb25zdCByPXQuc3BsaXQoIi4iKS5zbGljZSgwLC0xKS5qb2luKCIuIikudG9Mb3dlckNhc2UoKSxpPW4ucGFyc2VkQ29uZmlnLmZpbmRJbmRleCh0PT50LnBhdGg9PT1yKSxbbyxhXT1yLnNwbGl0KCIuIikscz10LnNwbGl0KCIuIikucG9wKCksYz17c2VjdGlvbjpvLHN1YnNlY3Rpb246YSxuYW1lOnMsdmFsdWU6ZSxtb2RpZmllZDohMCxwYXRoOnYobyxhLHMpfTtpZih1LnRlc3QobykmJmYudGVzdChzKSlpZihpPj0wKW4ucGFyc2VkQ29uZmlnLnNwbGljZShpKzEsMCxjKTtlbHNle2NvbnN0IHQ9e3NlY3Rpb246byxzdWJzZWN0aW9uOmEsbW9kaWZpZWQ6ITAscGF0aDp2KG8sYSxudWxsKX07bi5wYXJzZWRDb25maWcucHVzaCh0LGMpfX19KSgpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMucGFyc2VkQ29uZmlnLm1hcCgoe2xpbmU6dCxzZWN0aW9uOmUsc3Vic2VjdGlvbjpyLG5hbWU6bix2YWx1ZTppLG1vZGlmaWVkOm89ITF9KT0+bz9udWxsIT1uJiZudWxsIT1pP2BcdCR7bn0gPSAke2l9YDpudWxsIT1yP2BbJHtlfSAiJHtyfSJdYDpgWyR7ZX1dYDp0KS5qb2luKCJcbiIpfX19LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgbj1yKDU1KTtjbGFzcyBpe2NvbnN0cnVjdG9yKHQ9W10pe3RoaXMucnVsZXM9dH1zdGF0aWMgZnJvbSh0KXtjb25zdCBlPVtdO2Zvcihjb25zdCByIG9mIHQpZS5wdXNoKG4uYS5mcm9tKHIpKTtyZXR1cm4gbmV3IGkoZSl9YWRkKHQpe2NvbnN0IGU9bi5hLmZyb20odCk7dGhpcy5ydWxlcy5wdXNoKGUpfXRyYW5zbGF0ZSh0KXtjb25zdCBlPVtdO2Zvcihjb25zdCByIG9mIHRoaXMucnVsZXMpZm9yKGNvbnN0IG4gb2YgdCl7Y29uc3QgdD1yLnRyYW5zbGF0ZShuKTt0JiZlLnB1c2goW24sdF0pfXJldHVybiBlfXRyYW5zbGF0ZU9uZSh0KXtsZXQgZT1udWxsO2Zvcihjb25zdCByIG9mIHRoaXMucnVsZXMpe2NvbnN0IG49ci50cmFuc2xhdGUodCk7biYmKGU9bil9cmV0dXJuIGV9bG9jYWxOYW1lc3BhY2VzKCl7cmV0dXJuIHRoaXMucnVsZXMuZmlsdGVyKHQ9PnQubWF0Y2hQcmVmaXgpLm1hcCh0PT50LmxvY2FsUGF0aC5yZXBsYWNlKC9cLyQvLCIiKSl9fX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gb30pO3ZhciBuPXIoMCksaT1yKDQzKTtjbGFzcyBve3N0YXRpYyBnZXRSZW1vdGVIZWxwZXJGb3Ioe3VybDp0fSl7Y29uc3QgZT1uZXcgTWFwO2Uuc2V0KCJodHRwIixpLmEpLGUuc2V0KCJodHRwcyIsaS5hKTtjb25zdCByPWZ1bmN0aW9uKHt1cmw6dH0pe2NvbnN0IGU9dC5tYXRjaCgvKFx3KykoOlwvXC98OjopKC4qKS8pO2lmKG51bGwhPT1lKXJldHVybiI6Ly8iPT09ZVsyXT97dHJhbnNwb3J0OmVbMV0sYWRkcmVzczplWzBdfToiOjoiPT09ZVsyXT97dHJhbnNwb3J0OmVbMV0sYWRkcmVzczplWzNdfTp2b2lkIDB9KHt1cmw6dH0pO2lmKCFyKXRocm93IG5ldyBuLmIobi5hLlJlbW90ZVVybFBhcnNlRXJyb3Ise3VybDp0fSk7aWYoZS5oYXMoci50cmFuc3BvcnQpKXJldHVybiBlLmdldChyLnRyYW5zcG9ydCk7dGhyb3cgbmV3IG4uYihuLmEuVW5rbm93blRyYW5zcG9ydEVycm9yLHt1cmw6dCx0cmFuc3BvcnQ6ci50cmFuc3BvcnR9KX19fSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBhfSk7dmFyIG49cigwKSxpPXIoOSk7ZnVuY3Rpb24gbyh0LGUscixuLGksbyxhKXt0cnl7dmFyIHM9dFtvXShhKSx1PXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZSh1KTpQcm9taXNlLnJlc29sdmUodSkudGhlbihuLGkpfWZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gcy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gcygpe3ZhciB0O3JldHVybiB0PWZ1bmN0aW9uKih0LHtzZXJ2aWNlOmV9KXtjb25zdCByPW5ldyBTZXQsbz1uZXcgTWFwLGE9bmV3IE1hcCxzPWkuYS5zdHJlYW1SZWFkZXIodCk7bGV0IHU9eWllbGQgcygpO2Zvcig7bnVsbD09PXU7KXU9eWllbGQgcygpO2lmKCEwPT09dSl0aHJvdyBuZXcgbi5iKG4uYS5FbXB0eVNlcnZlclJlc3BvbnNlRmFpbCk7aWYodS50b1N0cmluZygidXRmOCIpLnJlcGxhY2UoL1xuJC8sIiIpIT09YCMgc2VydmljZT0ke2V9YCl0aHJvdyBuZXcgbi5iKG4uYS5Bc3NlcnRTZXJ2ZXJSZXNwb25zZUZhaWwse2V4cGVjdGVkOmAjIHNlcnZpY2U9JHtlfVxcbmAsYWN0dWFsOnUudG9TdHJpbmcoInV0ZjgiKX0pO2xldCBjPXlpZWxkIHMoKTtmb3IoO251bGw9PT1jOyljPXlpZWxkIHMoKTtpZighMD09PWMpcmV0dXJue2NhcGFiaWxpdGllczpyLHJlZnM6byxzeW1yZWZzOmF9O2NvbnN0W2YsbF09Yy50b1N0cmluZygidXRmOCIpLnRyaW0oKS5zcGxpdCgiXDAiKTtsLnNwbGl0KCIgIikubWFwKHQ9PnIuYWRkKHQpKTtjb25zdFtkLGhdPWYuc3BsaXQoIiAiKTtmb3Ioby5zZXQoaCxkKTs7KXtjb25zdCB0PXlpZWxkIHMoKTtpZighMD09PXQpYnJlYWs7aWYobnVsbCE9PXQpe2NvbnN0W2Uscl09dC50b1N0cmluZygidXRmOCIpLnRyaW0oKS5zcGxpdCgiICIpO28uc2V0KHIsZSl9fWZvcihjb25zdCB0IG9mIHIpaWYodC5zdGFydHNXaXRoKCJzeW1yZWY9Iikpe2NvbnN0IGU9dC5tYXRjaCgvc3ltcmVmPShbXjpdKyk6KC4qKS8pOzM9PT1lLmxlbmd0aCYmYS5zZXQoZVsxXSxlWzJdKX1yZXR1cm57Y2FwYWJpbGl0aWVzOnIscmVmczpvLHN5bXJlZnM6YX19LChzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obixpKXt2YXIgYT10LmFwcGx5KGUscik7ZnVuY3Rpb24gcyh0KXtvKGEsbixpLHMsdSwibmV4dCIsdCl9ZnVuY3Rpb24gdSh0KXtvKGEsbixpLHMsdSwidGhyb3ciLHQpfXModm9pZCAwKX0pfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pO3ZhciBuPXIoMTAwKSxpPXIubihuKTtjb25zdCBvPS9eLiooXHI/XG58JCkvZ207ZnVuY3Rpb24gYSh7b3VyQ29udGVudDp0LGJhc2VDb250ZW50OmUsdGhlaXJDb250ZW50OnIsb3VyTmFtZTpuPSJvdXJzIixiYXNlTmFtZTphPSJiYXNlIix0aGVpck5hbWU6cz0idGhlaXJzIixmb3JtYXQ6dT0iZGlmZiIsbWFya2VyU2l6ZTpjPTd9KXtjb25zdCBmPXQubWF0Y2gobyksbD1lLm1hdGNoKG8pLGQ9ci5tYXRjaChvKSxoPWkoKShmLGwsZCk7bGV0IHA9IiIsZz0hMDtmb3IoY29uc3QgdCBvZiBoKXQub2smJihwKz10Lm9rLmpvaW4oIiIpKSx0LmNvbmZsaWN0JiYoZz0hMSxwKz1gJHsiPCIucmVwZWF0KGMpfSAke259XG5gLHArPXQuY29uZmxpY3QuYS5qb2luKCIiKSwiZGlmZjMiPT09dSYmKHArPWAkeyJ8Ii5yZXBlYXQoYyl9ICR7YX1cbmAscCs9dC5jb25mbGljdC5vLmpvaW4oIiIpKSxwKz1gJHsiPSIucmVwZWF0KGMpfVxuYCxwKz10LmNvbmZsaWN0LmIuam9pbigiIikscCs9YCR7Ij4iLnJlcGVhdChjKX0gJHtzfVxuYCk7cmV0dXJue2NsZWFuTWVyZ2U6ZyxtZXJnZWRUZXh0OnB9fX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24odCl7ci5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHB9KTt2YXIgbj1yKDE4KSxpPXIubihuKSxvPXIoMzQpLGE9ci5uKG8pLHM9cigxKSx1PXIoNSksYz1yKDIpLGY9cigzNSksbD1yKDMpLGQ9cigxMDEpO2Z1bmN0aW9uIGgodCxlLHIsbixpLG8sYSl7dHJ5e3ZhciBzPXRbb10oYSksdT1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UodSk6UHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4obixpKX1mdW5jdGlvbiBwKHQpe3JldHVybiBnLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBnKCl7dmFyIGU7cmV0dXJuIGU9ZnVuY3Rpb24qKHtjb3JlOmU9ImRlZmF1bHQiLGRpcjpyLGdpdGRpcjpuPU9iamVjdChjLmEpKHIsIi5naXQiKSxmczpvPWwuYS5nZXQoZSkuZ2V0KCJmcyIpLG9pZHM6aH0pe2NvbnN0IHA9bmV3IHMuYShvKSxnPW5ldyBhLmEsbT1bXTtmdW5jdGlvbiB5KGUscil7Y29uc3Qgbj10LmZyb20oZSxyKTttLnB1c2gobiksZy51cGRhdGUobil9ZnVuY3Rpb24gdih7c3R5cGU6ZSxvYmplY3Q6cn0pe2NvbnN0IG49ZC5hW2VdO2xldCBvPXIubGVuZ3RoLGE9bz4xNT8xMjg6MDtjb25zdCBzPTE1Jm87bz4+Pj00O2xldCB1PShhfG58cykudG9TdHJpbmcoMTYpO2Zvcih5KHUsImhleCIpO2E7KXU9KGE9bz4xMjc/MTI4OjApfDEyNyZvLHkoT2JqZWN0KGYuYSkoMix1KSwiaGV4Iiksbz4+Pj03O3kodC5mcm9tKGkuYS5kZWZsYXRlKHIpKSl9eSgiUEFDSyIpLHkoIjAwMDAwMDAyIiwiaGV4IikseShPYmplY3QoZi5hKSg4LGgubGVuZ3RoKSwiaGV4Iik7Zm9yKGNvbnN0IHQgb2YgaCl7Y29uc3R7dHlwZTplLG9iamVjdDpyfT15aWVsZCBPYmplY3QodS5hKSh7ZnM6cCxnaXRkaXI6bixvaWQ6dH0pO3Yoe3dyaXRlOnksb2JqZWN0OnIsc3R5cGU6ZX0pfWNvbnN0IHc9Zy5kaWdlc3QoKTtyZXR1cm4gbS5wdXNoKHcpLG19LChnPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obixpKXt2YXIgbz1lLmFwcGx5KHQscik7ZnVuY3Rpb24gYSh0KXtoKG8sbixpLGEscywibmV4dCIsdCl9ZnVuY3Rpb24gcyh0KXtoKG8sbixpLGEscywidGhyb3ciLHQpfWEodm9pZCAwKX0pfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pLmNhbGwodGhpcyxyKDEwKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuZChlLCJhIixmdW5jdGlvbigpe3JldHVybiB1fSk7dmFyIG49cigzNyksaT1yKDE0KSxvPXIoNyk7ZnVuY3Rpb24gYSh0LGUscixuLGksbyxhKXt0cnl7dmFyIHM9dFtvXShhKSx1PXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZSh1KTpQcm9taXNlLnJlc29sdmUodSkudGhlbihuLGkpfWZ1bmN0aW9uIHModCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obixpKXt2YXIgbz10LmFwcGx5KGUscik7ZnVuY3Rpb24gcyh0KXthKG8sbixpLHMsdSwibmV4dCIsdCl9ZnVuY3Rpb24gdSh0KXthKG8sbixpLHMsdSwidGhyb3ciLHQpfXModm9pZCAwKX0pfX1jbGFzcyB1IGV4dGVuZHMgby5he3N0YXRpYyBmcm9tKHQpe3JldHVybiBuZXcgdSh0KX1zaWduKHQsZSl7dmFyIHI9dGhpcztyZXR1cm4gcyhmdW5jdGlvbiooKXtjb25zdCBhPXIud2l0aG91dFNpZ25hdHVyZSgpLHM9by5hLmp1c3RIZWFkZXJzKHIuX2NvbW1pdCksdT1vLmEuanVzdE1lc3NhZ2Uoci5fY29tbWl0KSxjPXQua2V5LnJlYWRBcm1vcmVkKGUpLmtleXM7bGV0e3NpZ25hdHVyZTpmfT15aWVsZCB0LnNpZ24oe2RhdGE6dC51dGlsLnN0cjJVaW50OEFycmF5KGEpLHByaXZhdGVLZXlzOmMsZGV0YWNoZWQ6ITAsYXJtb3I6ITB9KTtmPU9iamVjdChpLmEpKGYpO2NvbnN0IGw9cysiXG5ncGdzaWciK09iamVjdChuLmEpKGYpKyJcbiIrdTtyZXR1cm4gby5hLmZyb20obCl9KSgpfWxpc3RTaWduaW5nS2V5cyh0KXt2YXIgZT10aGlzO3JldHVybiBzKGZ1bmN0aW9uKigpe3JldHVybiB0Lm1lc3NhZ2UucmVhZFNpZ25lZENvbnRlbnQoZS53aXRob3V0U2lnbmF0dXJlKCksZS5pc29sYXRlU2lnbmF0dXJlKCkpLmdldFNpZ25pbmdLZXlJZHMoKS5tYXAodD0+dC50b0hleCgpKX0pKCl9dmVyaWZ5KHQsZSl7dmFyIHI9dGhpcztyZXR1cm4gcyhmdW5jdGlvbiooKXtjb25zdCBuPXQua2V5LnJlYWRBcm1vcmVkKGUpLmtleXM7cmV0dXJuIHQubWVzc2FnZS5yZWFkU2lnbmVkQ29udGVudChyLndpdGhvdXRTaWduYXR1cmUoKSxyLmlzb2xhdGVTaWduYXR1cmUoKSkudmVyaWZ5KG4pLnJlZHVjZSgodCxlKT0+dC52YWxpZCYmZS52YWxpZCx7dmFsaWQ6ITB9KX0pKCl9fX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7Y29uc3Qgcj1lLXQ7cmV0dXJuIEFycmF5LmZyb20oe2xlbmd0aDpyfSwoZSxyKT0+dCtyKX1yLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gbn0pfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBufSk7Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMudmFsdWU9bnVsbH1jb25zaWRlcih0KXtudWxsIT10JiYobnVsbD09PXRoaXMudmFsdWU/dGhpcy52YWx1ZT10OnQ8dGhpcy52YWx1ZSYmKHRoaXMudmFsdWU9dCkpfXJlc2V0KCl7dGhpcy52YWx1ZT1udWxsfX19LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gcih0LGUpe2Zvcih2YXIgcj0wLG49dC5sZW5ndGgtMTtuPj0wO24tLSl7dmFyIGk9dFtuXTsiLiI9PT1pP3Quc3BsaWNlKG4sMSk6Ii4uIj09PWk/KHQuc3BsaWNlKG4sMSkscisrKTpyJiYodC5zcGxpY2UobiwxKSxyLS0pfWlmKGUpZm9yKDtyLS07cil0LnVuc2hpZnQoIi4uIik7cmV0dXJuIHR9ZnVuY3Rpb24gbih0LGUpe2lmKHQuZmlsdGVyKXJldHVybiB0LmZpbHRlcihlKTtmb3IodmFyIHI9W10sbj0wO248dC5sZW5ndGg7bisrKWUodFtuXSxuLHQpJiZyLnB1c2godFtuXSk7cmV0dXJuIHJ9ZS5yZXNvbHZlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPSIiLGk9ITEsbz1hcmd1bWVudHMubGVuZ3RoLTE7bz49LTEmJiFpO28tLSl7dmFyIGE9bz49MD9hcmd1bWVudHNbb106dC5jd2QoKTtpZigic3RyaW5nIiE9dHlwZW9mIGEpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGgucmVzb2x2ZSBtdXN0IGJlIHN0cmluZ3MiKTthJiYoZT1hKyIvIitlLGk9Ii8iPT09YS5jaGFyQXQoMCkpfXJldHVybihpPyIvIjoiIikrKGU9cihuKGUuc3BsaXQoIi8iKSxmdW5jdGlvbih0KXtyZXR1cm4hIXR9KSwhaSkuam9pbigiLyIpKXx8Ii4ifSxlLm5vcm1hbGl6ZT1mdW5jdGlvbih0KXt2YXIgbz1lLmlzQWJzb2x1dGUodCksYT0iLyI9PT1pKHQsLTEpO3JldHVybih0PXIobih0LnNwbGl0KCIvIiksZnVuY3Rpb24odCl7cmV0dXJuISF0fSksIW8pLmpvaW4oIi8iKSl8fG98fCh0PSIuIiksdCYmYSYmKHQrPSIvIiksKG8/Ii8iOiIiKSt0fSxlLmlzQWJzb2x1dGU9ZnVuY3Rpb24odCl7cmV0dXJuIi8iPT09dC5jaGFyQXQoMCl9LGUuam9pbj1mdW5jdGlvbigpe3ZhciB0PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtyZXR1cm4gZS5ub3JtYWxpemUobih0LGZ1bmN0aW9uKHQsZSl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLmpvaW4gbXVzdCBiZSBzdHJpbmdzIik7cmV0dXJuIHR9KS5qb2luKCIvIikpfSxlLnJlbGF0aXZlPWZ1bmN0aW9uKHQscil7ZnVuY3Rpb24gbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoJiYiIj09PXRbZV07ZSsrKTtmb3IodmFyIHI9dC5sZW5ndGgtMTtyPj0wJiYiIj09PXRbcl07ci0tKTtyZXR1cm4gZT5yP1tdOnQuc2xpY2UoZSxyLWUrMSl9dD1lLnJlc29sdmUodCkuc3Vic3RyKDEpLHI9ZS5yZXNvbHZlKHIpLnN1YnN0cigxKTtmb3IodmFyIGk9bih0LnNwbGl0KCIvIikpLG89bihyLnNwbGl0KCIvIikpLGE9TWF0aC5taW4oaS5sZW5ndGgsby5sZW5ndGgpLHM9YSx1PTA7dTxhO3UrKylpZihpW3VdIT09b1t1XSl7cz11O2JyZWFrfXZhciBjPVtdO2Zvcih1PXM7dTxpLmxlbmd0aDt1KyspYy5wdXNoKCIuLiIpO3JldHVybihjPWMuY29uY2F0KG8uc2xpY2UocykpKS5qb2luKCIvIil9LGUuc2VwPSIvIixlLmRlbGltaXRlcj0iOiIsZS5kaXJuYW1lPWZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciIT10eXBlb2YgdCYmKHQrPSIiKSwwPT09dC5sZW5ndGgpcmV0dXJuIi4iO2Zvcih2YXIgZT10LmNoYXJDb2RlQXQoMCkscj00Nz09PWUsbj0tMSxpPSEwLG89dC5sZW5ndGgtMTtvPj0xOy0tbylpZig0Nz09PShlPXQuY2hhckNvZGVBdChvKSkpe2lmKCFpKXtuPW87YnJlYWt9fWVsc2UgaT0hMTtyZXR1cm4tMT09PW4/cj8iLyI6Ii4iOnImJjE9PT1uPyIvIjp0LnNsaWNlKDAsbil9LGUuYmFzZW5hbWU9ZnVuY3Rpb24odCxlKXt2YXIgcj1mdW5jdGlvbih0KXsic3RyaW5nIiE9dHlwZW9mIHQmJih0Kz0iIik7dmFyIGUscj0wLG49LTEsaT0hMDtmb3IoZT10Lmxlbmd0aC0xO2U+PTA7LS1lKWlmKDQ3PT09dC5jaGFyQ29kZUF0KGUpKXtpZighaSl7cj1lKzE7YnJlYWt9fWVsc2UtMT09PW4mJihpPSExLG49ZSsxKTtyZXR1cm4tMT09PW4/IiI6dC5zbGljZShyLG4pfSh0KTtyZXR1cm4gZSYmci5zdWJzdHIoLTEqZS5sZW5ndGgpPT09ZSYmKHI9ci5zdWJzdHIoMCxyLmxlbmd0aC1lLmxlbmd0aCkpLHJ9LGUuZXh0bmFtZT1mdW5jdGlvbih0KXsic3RyaW5nIiE9dHlwZW9mIHQmJih0Kz0iIik7Zm9yKHZhciBlPS0xLHI9MCxuPS0xLGk9ITAsbz0wLGE9dC5sZW5ndGgtMTthPj0wOy0tYSl7dmFyIHM9dC5jaGFyQ29kZUF0KGEpO2lmKDQ3IT09cyktMT09PW4mJihpPSExLG49YSsxKSw0Nj09PXM/LTE9PT1lP2U9YToxIT09byYmKG89MSk6LTEhPT1lJiYobz0tMSk7ZWxzZSBpZighaSl7cj1hKzE7YnJlYWt9fXJldHVybi0xPT09ZXx8LTE9PT1ufHwwPT09b3x8MT09PW8mJmU9PT1uLTEmJmU9PT1yKzE/IiI6dC5zbGljZShlLG4pfTt2YXIgaT0iYiI9PT0iYWIiLnN1YnN0cigtMSk/ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0LnN1YnN0cihlLHIpfTpmdW5jdGlvbih0LGUscil7cmV0dXJuIGU8MCYmKGU9dC5sZW5ndGgrZSksdC5zdWJzdHIoZSxyKX19KS5jYWxsKHRoaXMscig0OSkpfSxmdW5jdGlvbih0LGUpe3ZhciByO3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKTt0cnl7cj1yfHxuZXcgRnVuY3Rpb24oInJldHVybiB0aGlzIikoKX1jYXRjaCh0KXsib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmKHI9d2luZG93KX10LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMTApLGk9bi5CdWZmZXI7ZnVuY3Rpb24gbyh0LGUpe2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXX1mdW5jdGlvbiBhKHQsZSxyKXtyZXR1cm4gaSh0LGUscil9aS5mcm9tJiZpLmFsbG9jJiZpLmFsbG9jVW5zYWZlJiZpLmFsbG9jVW5zYWZlU2xvdz90LmV4cG9ydHM9bjoobyhuLGUpLGUuQnVmZmVyPWEpLG8oaSxhKSxhLmZyb209ZnVuY3Rpb24odCxlLHIpe2lmKCJudW1iZXIiPT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlciIpO3JldHVybiBpKHQsZSxyKX0sYS5hbGxvYz1mdW5jdGlvbih0LGUscil7aWYoIm51bWJlciIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTt2YXIgbj1pKHQpO3JldHVybiB2b2lkIDAhPT1lPyJzdHJpbmciPT10eXBlb2Ygcj9uLmZpbGwoZSxyKTpuLmZpbGwoZSk6bi5maWxsKDApLG59LGEuYWxsb2NVbnNhZmU9ZnVuY3Rpb24odCl7aWYoIm51bWJlciIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gaSh0KX0sYS5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24odCl7aWYoIm51bWJlciIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gbi5TbG93QnVmZmVyKHQpfX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPTY1NTM1JnR8MCxvPXQ+Pj4xNiY2NTUzNXwwLGE9MDswIT09cjspe3ItPWE9cj4yZTM/MmUzOnI7ZG97bz1vKyhpPWkrZVtuKytdfDApfDB9d2hpbGUoLS1hKTtpJT02NTUyMSxvJT02NTUyMX1yZXR1cm4gaXxvPDwxNnwwfX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPVtdLHI9MDtyPDI1NjtyKyspe3Q9cjtmb3IodmFyIG49MDtuPDg7bisrKXQ9MSZ0PzM5ODgyOTIzODRedD4+PjE6dD4+PjE7ZVtyXT10fXJldHVybiBlfSgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgbz1uLGE9aStyO3RePS0xO2Zvcih2YXIgcz1pO3M8YTtzKyspdD10Pj4+OF5vWzI1NSYodF5lW3NdKV07cmV0dXJuLTFedH19LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49cigyNSksaT0hMCxvPSEwO3RyeXtTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsWzBdKX1jYXRjaCh0KXtpPSExfXRyeXtTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbmV3IFVpbnQ4QXJyYXkoMSkpfWNhdGNoKHQpe289ITF9Zm9yKHZhciBhPW5ldyBuLkJ1ZjgoMjU2KSxzPTA7czwyNTY7cysrKWFbc109cz49MjUyPzY6cz49MjQ4PzU6cz49MjQwPzQ6cz49MjI0PzM6cz49MTkyPzI6MTtmdW5jdGlvbiB1KHQsZSl7aWYoZTw2NTUzNCYmKHQuc3ViYXJyYXkmJm98fCF0LnN1YmFycmF5JiZpKSlyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLG4uc2hyaW5rQnVmKHQsZSkpO2Zvcih2YXIgcj0iIixhPTA7YTxlO2ErKylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHRbYV0pO3JldHVybiByfWFbMjU0XT1hWzI1NF09MSxlLnN0cmluZzJidWY9ZnVuY3Rpb24odCl7dmFyIGUscixpLG8sYSxzPXQubGVuZ3RoLHU9MDtmb3Iobz0wO288cztvKyspNTUyOTY9PSg2NDUxMiYocj10LmNoYXJDb2RlQXQobykpKSYmbysxPHMmJjU2MzIwPT0oNjQ1MTImKGk9dC5jaGFyQ29kZUF0KG8rMSkpKSYmKHI9NjU1MzYrKHItNTUyOTY8PDEwKSsoaS01NjMyMCksbysrKSx1Kz1yPDEyOD8xOnI8MjA0OD8yOnI8NjU1MzY/Mzo0O2ZvcihlPW5ldyBuLkJ1ZjgodSksYT0wLG89MDthPHU7bysrKTU1Mjk2PT0oNjQ1MTImKHI9dC5jaGFyQ29kZUF0KG8pKSkmJm8rMTxzJiY1NjMyMD09KDY0NTEyJihpPXQuY2hhckNvZGVBdChvKzEpKSkmJihyPTY1NTM2KyhyLTU1Mjk2PDwxMCkrKGktNTYzMjApLG8rKykscjwxMjg/ZVthKytdPXI6cjwyMDQ4PyhlW2ErK109MTkyfHI+Pj42LGVbYSsrXT0xMjh8NjMmcik6cjw2NTUzNj8oZVthKytdPTIyNHxyPj4+MTIsZVthKytdPTEyOHxyPj4+NiY2MyxlW2ErK109MTI4fDYzJnIpOihlW2ErK109MjQwfHI+Pj4xOCxlW2ErK109MTI4fHI+Pj4xMiY2MyxlW2ErK109MTI4fHI+Pj42JjYzLGVbYSsrXT0xMjh8NjMmcik7cmV0dXJuIGV9LGUuYnVmMmJpbnN0cmluZz1mdW5jdGlvbih0KXtyZXR1cm4gdSh0LHQubGVuZ3RoKX0sZS5iaW5zdHJpbmcyYnVmPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgbi5CdWY4KHQubGVuZ3RoKSxyPTAsaT1lLmxlbmd0aDtyPGk7cisrKWVbcl09dC5jaGFyQ29kZUF0KHIpO3JldHVybiBlfSxlLmJ1ZjJzdHJpbmc9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksbyxzPWV8fHQubGVuZ3RoLGM9bmV3IEFycmF5KDIqcyk7Zm9yKG49MCxyPTA7cjxzOylpZigoaT10W3IrK10pPDEyOCljW24rK109aTtlbHNlIGlmKChvPWFbaV0pPjQpY1tuKytdPTY1NTMzLHIrPW8tMTtlbHNle2ZvcihpJj0yPT09bz8zMTozPT09bz8xNTo3O28+MSYmcjxzOylpPWk8PDZ8NjMmdFtyKytdLG8tLTtvPjE/Y1tuKytdPTY1NTMzOmk8NjU1MzY/Y1tuKytdPWk6KGktPTY1NTM2LGNbbisrXT01NTI5NnxpPj4xMCYxMDIzLGNbbisrXT01NjMyMHwxMDIzJmkpfXJldHVybiB1KGMsbil9LGUudXRmOGJvcmRlcj1mdW5jdGlvbih0LGUpe3ZhciByO2ZvcigoZT1lfHx0Lmxlbmd0aCk+dC5sZW5ndGgmJihlPXQubGVuZ3RoKSxyPWUtMTtyPj0wJiYxMjg9PSgxOTImdFtyXSk7KXItLTtyZXR1cm4gcjwwP2U6MD09PXI/ZTpyK2FbdFtyXV0+ZT9yOmV9fSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz1mdW5jdGlvbigpe3RoaXMuaW5wdXQ9bnVsbCx0aGlzLm5leHRfaW49MCx0aGlzLmF2YWlsX2luPTAsdGhpcy50b3RhbF9pbj0wLHRoaXMub3V0cHV0PW51bGwsdGhpcy5uZXh0X291dD0wLHRoaXMuYXZhaWxfb3V0PTAsdGhpcy50b3RhbF9vdXQ9MCx0aGlzLm1zZz0iIix0aGlzLnN0YXRlPW51bGwsdGhpcy5kYXRhX3R5cGU9Mix0aGlzLmFkbGVyPTB9fSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz17Wl9OT19GTFVTSDowLFpfUEFSVElBTF9GTFVTSDoxLFpfU1lOQ19GTFVTSDoyLFpfRlVMTF9GTFVTSDozLFpfRklOSVNIOjQsWl9CTE9DSzo1LFpfVFJFRVM6NixaX09LOjAsWl9TVFJFQU1fRU5EOjEsWl9ORUVEX0RJQ1Q6MixaX0VSUk5POi0xLFpfU1RSRUFNX0VSUk9SOi0yLFpfREFUQV9FUlJPUjotMyxaX0JVRl9FUlJPUjotNSxaX05PX0NPTVBSRVNTSU9OOjAsWl9CRVNUX1NQRUVEOjEsWl9CRVNUX0NPTVBSRVNTSU9OOjksWl9ERUZBVUxUX0NPTVBSRVNTSU9OOi0xLFpfRklMVEVSRUQ6MSxaX0hVRkZNQU5fT05MWToyLFpfUkxFOjMsWl9GSVhFRDo0LFpfREVGQVVMVF9TVFJBVEVHWTowLFpfQklOQVJZOjAsWl9URVhUOjEsWl9VTktOT1dOOjIsWl9ERUZMQVRFRDo4fX0sZnVuY3Rpb24odCxlKXt2YXIgcixuO3QuZXhwb3J0cz1yPXt9LG49InVuZGVmaW5lZCI9PXR5cGVvZiBXZWFrTWFwP251bGw6bmV3IFdlYWtNYXAsci5nZXQ9bj9mdW5jdGlvbih0KXt2YXIgZT1uLmdldCh0LmJ1ZmZlcik7ZXx8bi5zZXQodC5idWZmZXIsZT1uZXcgRGF0YVZpZXcodC5idWZmZXIsMCkpO3JldHVybiBlfTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IERhdGFWaWV3KHQuYnVmZmVyLDApfX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pO3ZhciBuPXIoOSk7ZnVuY3Rpb24gaSh7Y2FwYWJpbGl0aWVzOnQ9W10sd2FudHM6ZT1bXSxoYXZlczpyPVtdLHNoYWxsb3dzOmk9W10sZGVwdGg6bz1udWxsLHNpbmNlOmE9bnVsbCxleGNsdWRlOnM9W119KXtjb25zdCB1PVtdO2U9Wy4uLm5ldyBTZXQoZSldO2xldCBjPWAgJHt0LmpvaW4oIiAiKX1gO2Zvcihjb25zdCB0IG9mIGUpdS5wdXNoKG4uYS5lbmNvZGUoYHdhbnQgJHt0fSR7Y31cbmApKSxjPSIiO2Zvcihjb25zdCB0IG9mIGkpdS5wdXNoKG4uYS5lbmNvZGUoYHNoYWxsb3cgJHt0fVxuYCkpO251bGwhPT1vJiZ1LnB1c2gobi5hLmVuY29kZShgZGVlcGVuICR7b31cbmApKSxudWxsIT09YSYmdS5wdXNoKG4uYS5lbmNvZGUoYGRlZXBlbi1zaW5jZSAke01hdGguZmxvb3IoYS52YWx1ZU9mKCkvMWUzKX1cbmApKTtmb3IoY29uc3QgdCBvZiBzKXUucHVzaChuLmEuZW5jb2RlKGBkZWVwZW4tbm90ICR7dH1cbmApKTt1LnB1c2gobi5hLmZsdXNoKCkpO2Zvcihjb25zdCB0IG9mIHIpdS5wdXNoKG4uYS5lbmNvZGUoYGhhdmUgJHt0fVxuYCkpO3JldHVybiB1LnB1c2gobi5hLmVuY29kZSgiZG9uZVxuIikpLHV9fSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIG49cigwKSxpPXIoNTMpLG89cigyOSk7ZnVuY3Rpb24gYSh0LGUscixuLGksbyxhKXt0cnl7dmFyIHM9dFtvXShhKSx1PXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZSh1KTpQcm9taXNlLnJlc29sdmUodSkudGhlbihuLGkpfWZ1bmN0aW9uIHModCl7cmV0dXJuIHUuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHUoKXt2YXIgdDtyZXR1cm4gdD1mdW5jdGlvbioodCl7Y29uc3R7cGFja2V0bGluZXM6ZSxwYWNrZmlsZTpyLHByb2dyZXNzOmF9PWkuYS5kZW11eCh0KSxzPVtdLHU9W10sYz1bXTtsZXQgZj0hMSxsPSExO3JldHVybiBuZXcgUHJvbWlzZSgodCxpKT0+e09iamVjdChvLmEpKGUsZT0+e2NvbnN0IG89ZS50b1N0cmluZygidXRmOCIpLnRyaW0oKTtpZihvLnN0YXJ0c1dpdGgoInNoYWxsb3ciKSl7Y29uc3QgdD1vLnNsaWNlKC00MSkudHJpbSgpOzQwIT09dC5sZW5ndGgmJmkobmV3IG4uYihuLmEuQ29ycnVwdFNoYWxsb3dPaWRGYWlsLHtvaWQ6dH0pKSxzLnB1c2godCl9ZWxzZSBpZihvLnN0YXJ0c1dpdGgoInVuc2hhbGxvdyIpKXtjb25zdCB0PW8uc2xpY2UoLTQxKS50cmltKCk7NDAhPT10Lmxlbmd0aCYmaShuZXcgbi5iKG4uYS5Db3JydXB0U2hhbGxvd09pZEZhaWwse29pZDp0fSkpLHUucHVzaCh0KX1lbHNlIGlmKG8uc3RhcnRzV2l0aCgiQUNLIikpe2NvbnN0Wyx0LGVdPW8uc3BsaXQoIiAiKTtjLnB1c2goe29pZDp0LHN0YXR1czplfSksZXx8KGw9ITApfWVsc2Ugby5zdGFydHNXaXRoKCJOQUsiKSYmKGY9ITAsbD0hMCk7bCYmdCh7c2hhbGxvd3M6cyx1bnNoYWxsb3dzOnUsYWNrczpjLG5hazpmLHBhY2tmaWxlOnIscHJvZ3Jlc3M6YX0pfSl9KX0sKHU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLGkpe3ZhciBvPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBzKHQpe2EobyxuLGkscyx1LCJuZXh0Iix0KX1mdW5jdGlvbiB1KHQpe2EobyxuLGkscyx1LCJ0aHJvdyIsdCl9cyh2b2lkIDApfSl9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbih0KXtyLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gZ30pO3ZhciBuPXIoMjgpLGk9cigzMiksbz1yKDEpLGE9cigwKSxzPXIoMTEpLHU9cigyMiksYz1yKDI3KSxmPXIoMiksbD1yKDcwKSxkPXIoMyk7ZnVuY3Rpb24gaCh0LGUscixuLGksbyxhKXt0cnl7dmFyIHM9dFtvXShhKSx1PXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZSh1KTpQcm9taXNlLnJlc29sdmUodSkudGhlbihuLGkpfWZ1bmN0aW9uIHAodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obixpKXt2YXIgbz10LmFwcGx5KGUscik7ZnVuY3Rpb24gYSh0KXtoKG8sbixpLGEscywibmV4dCIsdCl9ZnVuY3Rpb24gcyh0KXtoKG8sbixpLGEscywidGhyb3ciLHQpfWEodm9pZCAwKX0pfX1mdW5jdGlvbiBnKHQpe3JldHVybiBtLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBtKCl7cmV0dXJuKG09cChmdW5jdGlvbiooe2NvcmU6dD0iZGVmYXVsdCIsZGlyOmUsZ2l0ZGlyOnI9T2JqZWN0KGYuYSkoZSwiLmdpdCIpLGZzOmw9ZC5hLmdldCh0KS5nZXQoImZzIiksb3VyT2lkOmgsYmFzZU9pZDpnLHRoZWlyT2lkOm0sb3VyTmFtZTp2PSJvdXJzIixiYXNlTmFtZTpiPSJiYXNlIix0aGVpck5hbWU6Xz0idGhlaXJzIixkcnlSdW46eD0hMX0pe2NvbnN0IEU9bmV3IG8uYShsKSxrPU9iamVjdChuLmEpKHtyZWY6aH0pLE89T2JqZWN0KG4uYSkoe3JlZjpnfSksaj1PYmplY3Qobi5hKSh7cmVmOm19KTt2YXIgUCxTO3JldHVybih5aWVsZCBPYmplY3QoaS5hKSh7Y29yZTp0LGZzOkUsZGlyOmUsZ2l0ZGlyOnIsdHJlZXM6W2ssTyxqXSxtYXA6KFM9cChmdW5jdGlvbioodCxbZSxuLGldKXtjb25zdCBvPU9iamVjdChjLmEpKHQpO3N3aXRjaChgJHt5aWVsZCB5KGUsbil9LSR7eWllbGQgeShpLG4pfWApe2Nhc2UiZmFsc2UtZmFsc2UiOnJldHVybnttb2RlOnlpZWxkIG4ubW9kZSgpLHBhdGg6byxvaWQ6eWllbGQgbi5vaWQoKSx0eXBlOnlpZWxkIG4udHlwZSgpfTtjYXNlImZhbHNlLXRydWUiOnJldHVybiBpP3ttb2RlOnlpZWxkIGkubW9kZSgpLHBhdGg6byxvaWQ6eWllbGQgaS5vaWQoKSx0eXBlOnlpZWxkIGkudHlwZSgpfTp2b2lkIDA7Y2FzZSJ0cnVlLWZhbHNlIjpyZXR1cm4gZT97bW9kZTp5aWVsZCBlLm1vZGUoKSxwYXRoOm8sb2lkOnlpZWxkIGUub2lkKCksdHlwZTp5aWVsZCBlLnR5cGUoKX06dm9pZCAwO2Nhc2UidHJ1ZS10cnVlIjppZihlJiZuJiZpJiYiYmxvYiI9PT0oeWllbGQgZS50eXBlKCkpJiYiYmxvYiI9PT0oeWllbGQgbi50eXBlKCkpJiYiYmxvYiI9PT0oeWllbGQgaS50eXBlKCkpKXJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KHtmczpFLGdpdGRpcjpyLHBhdGg6byxvdXJzOmUsYmFzZTpuLHRoZWlyczppLG91ck5hbWU6dixiYXNlTmFtZTpiLHRoZWlyTmFtZTpffSk7dGhyb3cgbmV3IGEuYihhLmEuTWVyZ2VOb3RTdXBwb3J0ZWRGYWlsKX19KSxmdW5jdGlvbih0LGUpe3JldHVybiBTLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLHJlZHVjZTooUD1wKGZ1bmN0aW9uKih0LGUpe2NvbnN0IG49ZS5maWx0ZXIoQm9vbGVhbik7aWYoIXR8fCJ0cmVlIiE9PXQudHlwZXx8MCE9PW4ubGVuZ3RoKXtpZihuLmxlbmd0aD4wKXtjb25zdCBlPW5ldyBzLmEobikudG9PYmplY3QoKSxpPXlpZWxkIE9iamVjdCh1LmEpKHtmczpFLGdpdGRpcjpyLHR5cGU6InRyZWUiLG9iamVjdDplLGRyeVJ1bjp4fSk7dC5vaWQ9aX1yZXR1cm4gdH19KSxmdW5jdGlvbih0LGUpe3JldHVybiBQLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSkpLm9pZH0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24geSh0LGUpe3JldHVybiB2LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiB2KCl7cmV0dXJuKHY9cChmdW5jdGlvbioodCxlKXtyZXR1cm4hKCF0JiYhZSkmJighKCF0fHxlKXx8KCEodHx8IWUpfHwoInRyZWUiIT09KHlpZWxkIHQudHlwZSgpKXx8InRyZWUiIT09KHlpZWxkIGUudHlwZSgpKSkmJigoeWllbGQgdC50eXBlKCkpIT09KHlpZWxkIGUudHlwZSgpKXx8KHlpZWxkIHQubW9kZSgpKSE9PSh5aWVsZCBlLm1vZGUoKSl8fCh5aWVsZCB0Lm9pZCgpKSE9PSh5aWVsZCBlLm9pZCgpKSkpKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gdygpe3JldHVybih3PXAoZnVuY3Rpb24qKHtmczplLGdpdGRpcjpyLHBhdGg6bixvdXJzOmksYmFzZTpvLHRoZWlyczpzLG91ck5hbWU6Yyx0aGVpck5hbWU6ZixiYXNlTmFtZTpkLGZvcm1hdDpoLG1hcmtlclNpemU6cCxkcnlSdW46Z30pe2NvbnN0IG09KHlpZWxkIG8ubW9kZSgpKT09PSh5aWVsZCBpLm1vZGUoKSk/eWllbGQgcy5tb2RlKCk6eWllbGQgaS5tb2RlKCk7aWYoKHlpZWxkIGkub2lkKCkpPT09KHlpZWxkIHMub2lkKCkpKXJldHVybnttb2RlOm0scGF0aDpuLG9pZDp5aWVsZCBpLm9pZCgpLHR5cGU6ImJsb2IifTtpZigoeWllbGQgaS5vaWQoKSk9PT0oeWllbGQgby5vaWQoKSkpcmV0dXJue21vZGU6bSxwYXRoOm4sb2lkOnlpZWxkIHMub2lkKCksdHlwZToiYmxvYiJ9O2lmKCh5aWVsZCBzLm9pZCgpKT09PSh5aWVsZCBvLm9pZCgpKSlyZXR1cm57bW9kZTptLHBhdGg6bixvaWQ6eWllbGQgaS5vaWQoKSx0eXBlOiJibG9iIn07Y29uc3R7bWVyZ2VkVGV4dDp5LGNsZWFuTWVyZ2U6dn09T2JqZWN0KGwuYSkoe291ckNvbnRlbnQ6KHlpZWxkIGkuY29udGVudCgpKS50b1N0cmluZygidXRmOCIpLGJhc2VDb250ZW50Oih5aWVsZCBvLmNvbnRlbnQoKSkudG9TdHJpbmcoInV0ZjgiKSx0aGVpckNvbnRlbnQ6KHlpZWxkIHMuY29udGVudCgpKS50b1N0cmluZygidXRmOCIpLG91ck5hbWU6Yyx0aGVpck5hbWU6ZixiYXNlTmFtZTpkLGZvcm1hdDpoLG1hcmtlclNpemU6cH0pO2lmKCF2KXRocm93IG5ldyBhLmIoYS5hLk1lcmdlTm90U3VwcG9ydGVkRmFpbCk7cmV0dXJue21vZGU6bSxwYXRoOm4sb2lkOnlpZWxkIE9iamVjdCh1LmEpKHtmczplLGdpdGRpcjpyLHR5cGU6ImJsb2IiLG9iamVjdDp0LmZyb20oeSwidXRmOCIpLGRyeVJ1bjpnfSksdHlwZToiYmxvYiJ9fSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KS5jYWxsKHRoaXMscigxMCkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcH0pO3ZhciBuPXIoNCksaT1yKDMwKSxvPXIoMSksYT1yKDE1KSxzPXIoNyksdT1yKDApLGM9cig1KSxmPXIoMiksbD1yKDMpO2Z1bmN0aW9uIGQodCxlLHIsbixpLG8sYSl7dHJ5e3ZhciBzPXRbb10oYSksdT1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UodSk6UHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4obixpKX1mdW5jdGlvbiBoKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4saSl7dmFyIG89dC5hcHBseShlLHIpO2Z1bmN0aW9uIGEodCl7ZChvLG4saSxhLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7ZChvLG4saSxhLHMsInRocm93Iix0KX1hKHZvaWQgMCl9KX19ZnVuY3Rpb24gcCh0KXtyZXR1cm4gZy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gZygpe3JldHVybihnPWgoZnVuY3Rpb24qKHtjb3JlOnQ9ImRlZmF1bHQiLGRpcjplLGdpdGRpcjpyPU9iamVjdChmLmEpKGUsIi5naXQiKSxmczpkPWwuYS5nZXQodCkuZ2V0KCJmcyIpLHN0YXJ0OnAsZmluaXNoOmd9KXtjb25zdCBtPW5ldyBvLmEoZCkseT15aWVsZCBpLmEucmVhZCh7ZnM6bSxnaXRkaXI6cn0pLHY9bmV3IFNldCx3PW5ldyBTZXQ7Zm9yKGNvbnN0IHQgb2YgcCl2LmFkZCh5aWVsZCBuLmEucmVzb2x2ZSh7ZnM6bSxnaXRkaXI6cixyZWY6dH0pKTtmb3IoY29uc3QgdCBvZiBnKXRyeXtjb25zdCBlPXlpZWxkIG4uYS5yZXNvbHZlKHtmczptLGdpdGRpcjpyLHJlZjp0fSk7dy5hZGQoZSl9Y2F0Y2godCl7fWNvbnN0IGI9bmV3IFNldDtmdW5jdGlvbiBfKHQpe3JldHVybiB4LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiB4KCl7cmV0dXJuKHg9aChmdW5jdGlvbioodCl7Yi5hZGQodCk7Y29uc3R7dHlwZTplLG9iamVjdDpufT15aWVsZCBPYmplY3QoYy5hKSh7ZnM6bSxnaXRkaXI6cixvaWQ6dH0pO2lmKCJ0YWciPT09ZSl7cmV0dXJuIF8oYS5hLmZyb20obikuaGVhZGVycygpLm9iamVjdCl9aWYoImNvbW1pdCIhPT1lKXRocm93IG5ldyB1LmIodS5hLk9iamVjdFR5cGVBc3NlcnRpb25GYWlsLHtvaWQ6dCx0eXBlOmUsZXhwZWN0ZWQ6ImNvbW1pdCJ9KTtpZigheS5oYXModCkpe2NvbnN0IGU9cy5hLmZyb20obikuaGVhZGVycygpLnBhcmVudDtmb3IodCBvZiBlKXcuaGFzKHQpfHxiLmhhcyh0KXx8KHlpZWxkIF8odCkpfX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Zm9yKGNvbnN0IHQgb2Ygdil5aWVsZCBfKHQpO3JldHVybiBifSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGR9KTt2YXIgbj1yKDEpLGk9cigxNSksbz1yKDcpLGE9cigxMSkscz1yKDUpLHU9cigyKSxjPXIoMyk7ZnVuY3Rpb24gZih0LGUscixuLGksbyxhKXt0cnl7dmFyIHM9dFtvXShhKSx1PXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZSh1KTpQcm9taXNlLnJlc29sdmUodSkudGhlbihuLGkpfWZ1bmN0aW9uIGwodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obixpKXt2YXIgbz10LmFwcGx5KGUscik7ZnVuY3Rpb24gYSh0KXtmKG8sbixpLGEscywibmV4dCIsdCl9ZnVuY3Rpb24gcyh0KXtmKG8sbixpLGEscywidGhyb3ciLHQpfWEodm9pZCAwKX0pfX1mdW5jdGlvbiBkKHQpe3JldHVybiBoLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBoKCl7cmV0dXJuKGg9bChmdW5jdGlvbiooe2NvcmU6dD0iZGVmYXVsdCIsZGlyOmUsZ2l0ZGlyOnI9T2JqZWN0KHUuYSkoZSwiLmdpdCIpLGZzOmY9Yy5hLmdldCh0KS5nZXQoImZzIiksb2lkczpkfSl7Y29uc3QgaD1uZXcgbi5hKGYpLHA9bmV3IFNldDtmdW5jdGlvbiBnKHQpe3JldHVybiBtLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBtKCl7cmV0dXJuKG09bChmdW5jdGlvbioodCl7cC5hZGQodCk7Y29uc3R7dHlwZTplLG9iamVjdDpufT15aWVsZCBPYmplY3Qocy5hKSh7ZnM6aCxnaXRkaXI6cixvaWQ6dH0pO2lmKCJ0YWciPT09ZSl7Y29uc3QgdD1pLmEuZnJvbShuKS5oZWFkZXJzKCkub2JqZWN0O3lpZWxkIGcodCl9ZWxzZSBpZigiY29tbWl0Ij09PWUpe2NvbnN0IHQ9by5hLmZyb20obikuaGVhZGVycygpLnRyZWU7eWllbGQgZyh0KX1lbHNlIGlmKCJ0cmVlIj09PWUpe2NvbnN0IHQ9YS5hLmZyb20obik7Zm9yKGNvbnN0IGUgb2YgdCkiYmxvYiIhPT1lLnR5cGUmJiJ0cmVlIiE9PWUudHlwZXx8cC5hZGQoZS5vaWQpLCJ0cmVlIj09PWUudHlwZSYmKHlpZWxkIGcoZS5vaWQpKX19KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZvcihjb25zdCB0IG9mIGQpeWllbGQgZyh0KTtyZXR1cm4gcH0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBvfSk7dmFyIG49cig5KTtmdW5jdGlvbiBpKHQsZSxyLG4saSxvLGEpe3RyeXt2YXIgcz10W29dKGEpLHU9cy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCByKHQpfXMuZG9uZT9lKHUpOlByb21pc2UucmVzb2x2ZSh1KS50aGVuKG4saSl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gYS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gYSgpe3ZhciB0O3JldHVybiB0PWZ1bmN0aW9uKih7Y2FwYWJpbGl0aWVzOnQ9W10sdHJpcGxldHM6ZT1bXX0pe2NvbnN0IHI9W107bGV0IGk9YFwwICR7dC5qb2luKCIgIil9YDtmb3IoY29uc3QgdCBvZiBlKXIucHVzaChuLmEuZW5jb2RlKGAke3Qub2xkb2lkfSAke3Qub2lkfSAke3QuZnVsbFJlZn0ke2l9XG5gKSksaT0iIjtyZXR1cm4gci5wdXNoKG4uYS5mbHVzaCgpKSxyfSwoYT1mdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4sbyl7dmFyIGE9dC5hcHBseShlLHIpO2Z1bmN0aW9uIHModCl7aShhLG4sbyxzLHUsIm5leHQiLHQpfWZ1bmN0aW9uIHUodCl7aShhLG4sbyxzLHUsInRocm93Iix0KX1zKHZvaWQgMCl9KX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KTt2YXIgbj1yKDApLGk9cig5KTtmdW5jdGlvbiBvKHQsZSxyLG4saSxvLGEpe3RyeXt2YXIgcz10W29dKGEpLHU9cy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCByKHQpfXMuZG9uZT9lKHUpOlByb21pc2UucmVzb2x2ZSh1KS50aGVuKG4saSl9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gcy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gcygpe3ZhciB0O3JldHVybiB0PWZ1bmN0aW9uKih0KXtjb25zdCBlPXt9O2xldCByPSIiO2NvbnN0IG89aS5hLnN0cmVhbVJlYWRlcih0KTtsZXQgYT15aWVsZCBvKCk7Zm9yKDshMCE9PWE7KW51bGwhPT1hJiYocis9YS50b1N0cmluZygidXRmOCIpKyJcbiIpLGE9eWllbGQgbygpO2NvbnN0IHM9ci50b1N0cmluZygidXRmOCIpLnNwbGl0KCJcbiIpO2lmKCEoYT1zLnNoaWZ0KCkpLnN0YXJ0c1dpdGgoInVucGFjayAiKSl0aHJvdyBuZXcgbi5iKG4uYS5VbnBhcnNlYWJsZVNlcnZlclJlc3BvbnNlRmFpbCx7bGluZTphfSk7InVucGFjayBvayI9PT1hP2Uub2s9WyJ1bnBhY2siXTplLmVycm9ycz1bYS50cmltKCldO2Zvcihjb25zdCB0IG9mIHMpe2NvbnN0IHI9dC5zbGljZSgwLDIpLG49dC5zbGljZSgzKTsib2siPT09cj8oZS5vaz1lLm9rfHxbXSxlLm9rLnB1c2gobikpOiJuZyI9PT1yJiYoZS5lcnJvcnM9ZS5lcnJvcnN8fFtdLGUuZXJyb3JzLnB1c2gobikpfXJldHVybiBlfSwocz1mdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4saSl7dmFyIGE9dC5hcHBseShlLHIpO2Z1bmN0aW9uIHModCl7byhhLG4saSxzLHUsIm5leHQiLHQpfWZ1bmN0aW9uIHUodCl7byhhLG4saSxzLHUsInRocm93Iix0KX1zKHZvaWQgMCl9KX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2lmKHZvaWQgMD09PWUpe2NvbnN0IHI9dC5pbmRleE9mKCI6Iik7cj4tMT8oZT10LnNsaWNlKHIrMSksdD10LnNsaWNlKDAscikpOmU9IiJ9cmV0dXJue3VzZXJuYW1lOnQscGFzc3dvcmQ6ZX19ci5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG59KX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3Q6W3RdfWNvbnN0IG49L15ccyskLyxpPS9eXFwhLyxvPS9eXFwjLyxhPS9ccj9cbi9nLHM9L15cLipcL3xeXC4rJC8sdT0iLyIsYz0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbD9TeW1ib2wuZm9yKCJub2RlLWlnbm9yZSIpOiJub2RlLWlnbm9yZSIsZj0odCxlLHIpPT5PYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyfSksbD0vKFswLXpdKS0oWzAtel0pL2csZD1bWy9cXD9ccyskLyx0PT4wPT09dC5pbmRleE9mKCJcXCIpPyIgIjoiIl0sWy9cXFxzL2csKCk9PiIgIl0sWy9bXFxeJC58KisoKXtdL2csdD0+YFxcJHt0fWBdLFsvXFsoW15cXVwvXSopKCR8XF0pL2csKHQsZSxyKT0+Il0iPT09cj9gWyR7KHQ9PnQucmVwbGFjZShsLCh0LGUscik9PmUuY2hhckNvZGVBdCgwKTw9ci5jaGFyQ29kZUF0KDApP3Q6IiIpKShlKX1dYDpgXFwke3R9YF0sWy8oPyFcXClcPy9nLCgpPT4iW14vXSJdLFsvXlwvLywoKT0+Il4iXSxbL1wvL2csKCk9PiJcXC8iXSxbL15cXipcXFwqXFxcKlxcXC8vLCgpPT4iXig/Oi4qXFwvKT8iXSxbLyg/OlteKl0pJC8sdD0+L1wvJC8udGVzdCh0KT9gJHt0fSRgOmAke3R9KD89JHxcXC8kKWBdLFsvXig/PVteXl0pLyxmdW5jdGlvbigpe3JldHVybi9cLyg/ISQpLy50ZXN0KHRoaXMpPyJeIjoiKD86XnxcXC8pIn1dLFsvXFxcL1xcXCpcXFwqKD89XFxcL3wkKS9nLCh0LGUscik9PmUrNjxyLmxlbmd0aD8iKD86XFwvW15cXC9dKykqIjoiXFwvLisiXSxbLyhefFteXFxdKylcXFwqKD89LispL2csKHQsZSk9PmAke2V9W15cXC9dKmBdLFsvKFxefFxcXC8pP1xcXCokLywodCxlKT0+e3JldHVybmAke2U/YCR7ZX1bXi9dK2A6IlteL10qIn0oPz0kfFxcLyQpYH1dLFsvXFxcXFxcL2csKCk9PiJcXCJdXSxoPU9iamVjdC5jcmVhdGUobnVsbCkscD10PT4ic3RyaW5nIj09dHlwZW9mIHQsZz10PT50JiZwKHQpJiYhbi50ZXN0KHQpJiYwIT09dC5pbmRleE9mKCIjIiksbT10PT50LnNwbGl0KGEpO2NsYXNzIHl7Y29uc3RydWN0b3IodCxlLHIsbil7dGhpcy5vcmlnaW49dCx0aGlzLnBhdHRlcm49ZSx0aGlzLm5lZ2F0aXZlPXIsdGhpcy5yZWdleD1ufX1jb25zdCB2PSh0LGUpPT57Y29uc3Qgcj10O2xldCBuPSExOzA9PT10LmluZGV4T2YoIiEiKSYmKG49ITAsdD10LnN1YnN0cigxKSk7Y29uc3QgYT0oKHQsZSxyKT0+e2NvbnN0IG49aFt0XTtpZihuKXJldHVybiBuO2NvbnN0IGk9ZC5yZWR1Y2UoKGUscik9PmUucmVwbGFjZShyWzBdLHJbMV0uYmluZCh0KSksdCk7cmV0dXJuIGhbdF09cj9uZXcgUmVnRXhwKGksImkiKTpuZXcgUmVnRXhwKGkpfSkodD10LnJlcGxhY2UoaSwiISIpLnJlcGxhY2UobywiIyIpLDAsZSk7cmV0dXJuIG5ldyB5KHIsdCxuLGEpfSx3PSh0LGUpPT57dGhyb3cgbmV3IGUodCl9LGI9KHQsZSxyKT0+e2lmKCFwKHQpKXJldHVybiByKGBwYXRoIG11c3QgYmUgYSBzdHJpbmcsIGJ1dCBnb3QgXGAke2V9XGBgLFR5cGVFcnJvcik7aWYoIXQpcmV0dXJuIHIoInBhdGggbXVzdCBub3QgYmUgZW1wdHkiLFR5cGVFcnJvcik7aWYoYi5pc05vdFJlbGF0aXZlKHQpKXtyZXR1cm4gcihgcGF0aCBzaG91bGQgYmUgYSAkeyJgcGF0aC5yZWxhdGl2ZSgpYGQifSBzdHJpbmcsIGJ1dCBnb3QgIiR7ZX0iYCxSYW5nZUVycm9yKX1yZXR1cm4hMH0sXz10PT5zLnRlc3QodCk7Yi5pc05vdFJlbGF0aXZlPV8sYi5jb252ZXJ0PXQ9PnQ7Y2xhc3MgeHtjb25zdHJ1Y3Rvcih7aWdub3JlY2FzZTp0PSEwfT17fSl7dGhpcy5fcnVsZXM9W10sdGhpcy5faWdub3JlY2FzZT10LGYodGhpcyxjLCEwKSx0aGlzLl9pbml0Q2FjaGUoKX1faW5pdENhY2hlKCl7dGhpcy5faWdub3JlQ2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl90ZXN0Q2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKX1fYWRkUGF0dGVybih0KXtpZih0JiZ0W2NdKXJldHVybiB0aGlzLl9ydWxlcz10aGlzLl9ydWxlcy5jb25jYXQodC5fcnVsZXMpLHZvaWQodGhpcy5fYWRkZWQ9ITApO2lmKGcodCkpe2NvbnN0IGU9dih0LHRoaXMuX2lnbm9yZWNhc2UpO3RoaXMuX2FkZGVkPSEwLHRoaXMuX3J1bGVzLnB1c2goZSl9fWFkZCh0KXtyZXR1cm4gdGhpcy5fYWRkZWQ9ITEscihwKHQpP20odCk6dCkuZm9yRWFjaCh0aGlzLl9hZGRQYXR0ZXJuLHRoaXMpLHRoaXMuX2FkZGVkJiZ0aGlzLl9pbml0Q2FjaGUoKSx0aGlzfWFkZFBhdHRlcm4odCl7cmV0dXJuIHRoaXMuYWRkKHQpfV90ZXN0T25lKHQsZSl7bGV0IHI9ITEsbj0hMTtyZXR1cm4gdGhpcy5fcnVsZXMuZm9yRWFjaChpPT57Y29uc3R7bmVnYXRpdmU6b309aTtuPT09byYmciE9PW58fG8mJiFyJiYhbiYmIWV8fGkucmVnZXgudGVzdCh0KSYmKHI9IW8sbj1vKX0pLHtpZ25vcmVkOnIsdW5pZ25vcmVkOm59fV90ZXN0KHQsZSxyLG4pe2NvbnN0IGk9dCYmYi5jb252ZXJ0KHQpO3JldHVybiBiKGksdCx3KSx0aGlzLl90KGksZSxyLG4pfV90KHQsZSxyLG4pe2lmKHQgaW4gZSlyZXR1cm4gZVt0XTtpZihufHwobj10LnNwbGl0KHUpKSxuLnBvcCgpLCFuLmxlbmd0aClyZXR1cm4gZVt0XT10aGlzLl90ZXN0T25lKHQscik7Y29uc3QgaT10aGlzLl90KG4uam9pbih1KSt1LGUscixuKTtyZXR1cm4gZVt0XT1pLmlnbm9yZWQ/aTp0aGlzLl90ZXN0T25lKHQscil9aWdub3Jlcyh0KXtyZXR1cm4gdGhpcy5fdGVzdCh0LHRoaXMuX2lnbm9yZUNhY2hlLCExKS5pZ25vcmVkfWNyZWF0ZUZpbHRlcigpe3JldHVybiB0PT4hdGhpcy5pZ25vcmVzKHQpfWZpbHRlcih0KXtyZXR1cm4gcih0KS5maWx0ZXIodGhpcy5jcmVhdGVGaWx0ZXIoKSl9dGVzdCh0KXtyZXR1cm4gdGhpcy5fdGVzdCh0LHRoaXMuX3Rlc3RDYWNoZSwhMCl9fWNvbnN0IEU9dD0+bmV3IHgodCksaz0oKT0+ITE7aWYoRS5pc1BhdGhWYWxpZD10PT5iKHQmJmIuY29udmVydCh0KSx0LGspLEUuZGVmYXVsdD1FLHQuZXhwb3J0cz1FLHZvaWQgMCE9PWUmJihlLmVudiYmZS5lbnYuSUdOT1JFX1RFU1RfV0lOMzJ8fCJ3aW4zMiI9PT1lLnBsYXRmb3JtKSl7Y29uc3QgdD10PT4vXlxcXFxcP1xcLy50ZXN0KHQpfHwvWyI8PnxcdTAwMDAtXHUwMDFGXSsvdS50ZXN0KHQpP3Q6dC5yZXBsYWNlKC9cXC9nLCIvIik7Yi5jb252ZXJ0PXQ7Y29uc3QgZT0vXlthLXpdOlwvL2k7Yi5pc05vdFJlbGF0aXZlPXQ9PmUudGVzdCh0KXx8Xyh0KX19KS5jYWxsKHRoaXMscig0OSkpfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBhfSk7dmFyIG49cigxKSxpPXIoMCk7ZnVuY3Rpb24gbyh0LGUscixuLGksbyxhKXt0cnl7dmFyIHM9dFtvXShhKSx1PXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZSh1KTpQcm9taXNlLnJlc29sdmUodSkudGhlbihuLGkpfWZ1bmN0aW9uIGEodCl7cmV0dXJuIHMuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHMoKXt2YXIgdDtyZXR1cm4gdD1mdW5jdGlvbiooe2ZzOnQsZ2l0ZGlyOmUsdHlwZTpyLG9iamVjdDpvLGZvcm1hdDphLG9pZDpzfSl7Y29uc3QgdT1uZXcgbi5hKHQpO2lmKCJkZWZsYXRlZCIhPT1hKXRocm93IG5ldyBpLmIoaS5hLkludGVybmFsRmFpbCx7bWVzc2FnZToiR2l0T2JqZWN0U3RvcmVMb29zZSBleHBlY3RzIG9iamVjdHMgdG8gd3JpdGUgdG8gYmUgaW4gZGVmbGF0ZWQgZm9ybWF0In0pO2NvbnN0IGM9YCR7ZX0vJHtgb2JqZWN0cy8ke3Muc2xpY2UoMCwyKX0vJHtzLnNsaWNlKDIpfWB9YDsoeWllbGQgdS5leGlzdHMoYykpfHwoeWllbGQgdS53cml0ZShjLG8pKX0sKHM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLGkpe3ZhciBhPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBzKHQpe28oYSxuLGkscyx1LCJuZXh0Iix0KX1mdW5jdGlvbiB1KHQpe28oYSxuLGkscyx1LCJ0aHJvdyIsdCl9cyh2b2lkIDApfSl9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBvfSk7dmFyIG49cigxKTtmdW5jdGlvbiBpKHQsZSxyLG4saSxvLGEpe3RyeXt2YXIgcz10W29dKGEpLHU9cy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCByKHQpfXMuZG9uZT9lKHUpOlByb21pc2UucmVzb2x2ZSh1KS50aGVuKG4saSl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gYS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gYSgpe3ZhciB0O3JldHVybiB0PWZ1bmN0aW9uKih7ZnM6dCxnaXRkaXI6ZSxvaWQ6cn0pe2NvbnN0IGk9bmV3IG4uYSh0KSxvPWBvYmplY3RzLyR7ci5zbGljZSgwLDIpfS8ke3Iuc2xpY2UoMil9YCxhPXlpZWxkIGkucmVhZChgJHtlfS8ke299YCk7cmV0dXJuIGE/e29iamVjdDphLGZvcm1hdDoiZGVmbGF0ZWQiLHNvdXJjZTpvfTpudWxsfSwoYT1mdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4sbyl7dmFyIGE9dC5hcHBseShlLHIpO2Z1bmN0aW9uIHModCl7aShhLG4sbyxzLHUsIm5leHQiLHQpfWZ1bmN0aW9uIHUodCl7aShhLG4sbyxzLHUsInRocm93Iix0KX1zKHZvaWQgMCl9KX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KTt2YXIgbj1yKDEpLGk9cigwKSxvPXIoNTYpLGE9cigyKTtmdW5jdGlvbiBzKHQsZSxyLG4saSxvLGEpe3RyeXt2YXIgcz10W29dKGEpLHU9cy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCByKHQpfXMuZG9uZT9lKHUpOlByb21pc2UucmVzb2x2ZSh1KS50aGVuKG4saSl9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gYy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gYygpe3ZhciB0O3JldHVybiB0PWZ1bmN0aW9uKih7ZnM6dCxnaXRkaXI6ZSxvaWQ6cixmb3JtYXQ6cz0iY29udGVudCIsZ2V0RXh0ZXJuYWxSZWZEZWx0YTp1fSl7Y29uc3QgYz1uZXcgbi5hKHQpO2xldCBmPXlpZWxkIGMucmVhZGRpcihPYmplY3QoYS5hKShlLCJvYmplY3RzL3BhY2siKSk7Zj1mLmZpbHRlcih0PT50LmVuZHNXaXRoKCIuaWR4IikpO2Zvcihjb25zdCB0IG9mIGYpe2NvbnN0IG49YCR7ZX0vb2JqZWN0cy9wYWNrLyR7dH1gLGE9eWllbGQgT2JqZWN0KG8uYSkoe2ZzOmMsZmlsZW5hbWU6bixnZXRFeHRlcm5hbFJlZkRlbHRhOnV9KTtpZihhLmVycm9yKXRocm93IG5ldyBpLmIoaS5hLkludGVybmFsRmFpbCx7bWVzc2FnZTphLmVycm9yfSk7aWYoYS5vZmZzZXRzLmhhcyhyKSl7aWYoIWEucGFjayl7Y29uc3QgdD1uLnJlcGxhY2UoL2lkeCQvLCJwYWNrIik7YS5wYWNrPWMucmVhZCh0KX1jb25zdCBlPXlpZWxkIGEucmVhZCh7b2lkOnIsZ2V0RXh0ZXJuYWxSZWZEZWx0YTp1fSk7cmV0dXJuIGUuZm9ybWF0PSJjb250ZW50IixlLnNvdXJjZT1gb2JqZWN0cy9wYWNrLyR7dC5yZXBsYWNlKC9pZHgkLywicGFjayIpfWAsZX19cmV0dXJuIG51bGx9LChjPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obixpKXt2YXIgbz10LmFwcGx5KGUscik7ZnVuY3Rpb24gYSh0KXtzKG8sbixpLGEsdSwibmV4dCIsdCl9ZnVuY3Rpb24gdSh0KXtzKG8sbixpLGEsdSwidGhyb3ciLHQpfWEodm9pZCAwKX0pfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuO249ZnVuY3Rpb24odCl7dC52ZXJzaW9uPSIxLjIuMCI7dmFyIGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPW5ldyBBcnJheSgyNTYpLHI9MDsyNTYhPXI7KytyKXQ9MSYodD0xJih0PTEmKHQ9MSYodD0xJih0PTEmKHQ9MSYodD0xJih0PXIpPy0zMDY2NzQ5MTJedD4+PjE6dD4+PjEpPy0zMDY2NzQ5MTJedD4+PjE6dD4+PjEpPy0zMDY2NzQ5MTJedD4+PjE6dD4+PjEpPy0zMDY2NzQ5MTJedD4+PjE6dD4+PjEpPy0zMDY2NzQ5MTJedD4+PjE6dD4+PjEpPy0zMDY2NzQ5MTJedD4+PjE6dD4+PjEpPy0zMDY2NzQ5MTJedD4+PjE6dD4+PjEpPy0zMDY2NzQ5MTJedD4+PjE6dD4+PjEsZVtyXT10O3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgSW50MzJBcnJheT9uZXcgSW50MzJBcnJheShlKTplfSgpO3QudGFibGU9ZSx0LmJzdHI9ZnVuY3Rpb24odCxyKXtmb3IodmFyIG49LTFecixpPXQubGVuZ3RoLTEsbz0wO288aTspbj0obj1uPj4+OF5lWzI1NSYobl50LmNoYXJDb2RlQXQobysrKSldKT4+PjheZVsyNTUmKG5edC5jaGFyQ29kZUF0KG8rKykpXTtyZXR1cm4gbz09PWkmJihuPW4+Pj44XmVbMjU1JihuXnQuY2hhckNvZGVBdChvKSldKSwtMV5ufSx0LmJ1Zj1mdW5jdGlvbih0LHIpe2lmKHQubGVuZ3RoPjFlNClyZXR1cm4gZnVuY3Rpb24odCxyKXtmb3IodmFyIG49LTFecixpPXQubGVuZ3RoLTcsbz0wO288aTspbj0obj0obj0obj0obj0obj0obj0obj1uPj4+OF5lWzI1NSYobl50W28rK10pXSk+Pj44XmVbMjU1JihuXnRbbysrXSldKT4+PjheZVsyNTUmKG5edFtvKytdKV0pPj4+OF5lWzI1NSYobl50W28rK10pXSk+Pj44XmVbMjU1JihuXnRbbysrXSldKT4+PjheZVsyNTUmKG5edFtvKytdKV0pPj4+OF5lWzI1NSYobl50W28rK10pXSk+Pj44XmVbMjU1JihuXnRbbysrXSldO2Zvcig7bzxpKzc7KW49bj4+PjheZVsyNTUmKG5edFtvKytdKV07cmV0dXJuLTFebn0odCxyKTtmb3IodmFyIG49LTFecixpPXQubGVuZ3RoLTMsbz0wO288aTspbj0obj0obj0obj1uPj4+OF5lWzI1NSYobl50W28rK10pXSk+Pj44XmVbMjU1JihuXnRbbysrXSldKT4+PjheZVsyNTUmKG5edFtvKytdKV0pPj4+OF5lWzI1NSYobl50W28rK10pXTtmb3IoO288aSszOyluPW4+Pj44XmVbMjU1JihuXnRbbysrXSldO3JldHVybi0xXm59LHQuc3RyPWZ1bmN0aW9uKHQscil7Zm9yKHZhciBuLGksbz0tMV5yLGE9MCxzPXQubGVuZ3RoO2E8czspKG49dC5jaGFyQ29kZUF0KGErKykpPDEyOD9vPW8+Pj44XmVbMjU1JihvXm4pXTpuPDIwNDg/bz0obz1vPj4+OF5lWzI1NSYob14oMTkyfG4+PjYmMzEpKV0pPj4+OF5lWzI1NSYob14oMTI4fDYzJm4pKV06bj49NTUyOTYmJm48NTczNDQ/KG49NjQrKDEwMjMmbiksaT0xMDIzJnQuY2hhckNvZGVBdChhKyspLG89KG89KG89KG89bz4+PjheZVsyNTUmKG9eKDI0MHxuPj44JjcpKV0pPj4+OF5lWzI1NSYob14oMTI4fG4+PjImNjMpKV0pPj4+OF5lWzI1NSYob14oMTI4fGk+PjYmMTV8KDMmbik8PDQpKV0pPj4+OF5lWzI1NSYob14oMTI4fDYzJmkpKV0pOm89KG89KG89bz4+PjheZVsyNTUmKG9eKDIyNHxuPj4xMiYxNSkpXSk+Pj44XmVbMjU1JihvXigxMjh8bj4+NiY2MykpXSk+Pj44XmVbMjU1JihvXigxMjh8NjMmbikpXTtyZXR1cm4tMV5vfX0sInVuZGVmaW5lZCI9PXR5cGVvZiBET19OT1RfRVhQT1JUX0NSQz9uKGUpOm4oe30pfSxmdW5jdGlvbih0LGUscil7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSx1LGMsZixsPXtzaXplOm51bGwsYnVmZmVyOm51bGx9LGQ9e3NpemU6bnVsbCxidWZmZXI6bnVsbH07cyh0LGwpLHMobC5idWZmZXIsZCksdD1kLmJ1ZmZlcixmPWk9MCxyPW4uY3JlYXRlKGQuc2l6ZSksYz10Lmxlbmd0aDtmb3IoO2Y8YzspMTI4Jih1PXRbZisrXSk/aCgpOnAoKTtyZXR1cm4gcjtmdW5jdGlvbiBoKCl7bi53cml0ZVVJbnQzMkxFKG8sMCwwKSxuLndyaXRlVUludDMyTEUoYSwwLDApO2Zvcih2YXIgcyxjLGw9MSxkPTA7ZDw0OysrZCl1JmwmJihvWzMtZF09dFtmKytdKSxsPDw9MTtmb3IoZD0wO2Q8MzsrK2QpdSZsJiYoYVszLWRdPXRbZisrXSksbDw8PTE7YVswXT0wLHM9bi5yZWFkVUludDMyQkUoYSwwKXx8NjU1MzYsYz1uLnJlYWRVSW50MzJCRShvLDApLG4uY29weShlLHIsaSxjLGMrcyksaSs9c31mdW5jdGlvbiBwKCl7bi5jb3B5KHQscixpLGYsdStmKSxmKz11LGkrPXV9fTt2YXIgbj1yKDExNiksaT1uZXcocigxMjcpKSxvPW4uY3JlYXRlKDQpLGE9bi5jcmVhdGUoNCk7ZnVuY3Rpb24gcyh0LGUpe3ZhciByPSExLG89MCxhPTA7aS5vbmRhdGE9ZnVuY3Rpb24odCl7YT10LHI9ITB9O2Rve2kud3JpdGUodFtvKytdKX13aGlsZSghcik7ZS5zaXplPWEsZS5idWZmZXI9bi5zdWJhcnJheSh0LG8pfX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24odCl7ci5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KTt2YXIgbj1yKDE4KSxpPXIubihuKSxvPXIoMzQpLGE9ci5uKG8pLHM9cigwKSx1PXIoNTcpO2Z1bmN0aW9uIGModCxlLHIsbixpLG8sYSl7dHJ5e3ZhciBzPXRbb10oYSksdT1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UodSk6UHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4obixpKX1mdW5jdGlvbiBmKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4saSl7dmFyIG89dC5hcHBseShlLHIpO2Z1bmN0aW9uIGEodCl7YyhvLG4saSxhLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7YyhvLG4saSxhLHMsInRocm93Iix0KX1hKHZvaWQgMCl9KX19ZnVuY3Rpb24gbCh0LGUpe3JldHVybiBkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBkKCl7cmV0dXJuKGQ9ZihmdW5jdGlvbioodCxlKXtjb25zdCByPW5ldyB1LmEodCksbj1uZXcgYS5hO2xldCBvPXlpZWxkIHIucmVhZCg0KTtpZihuLnVwZGF0ZShvKSwiUEFDSyIhPT0obz1vLnRvU3RyaW5nKCJ1dGY4IikpKXRocm93IG5ldyBzLmIocy5hLkludGVybmFsRmFpbCx7bWVzc2FnZTpgSW52YWxpZCBQQUNLIGhlYWRlciAnJHtvfSdgfSk7bGV0IGM9eWllbGQgci5yZWFkKDQpO2lmKG4udXBkYXRlKGMpLDIhPT0oYz1jLnJlYWRVSW50MzJCRSgwKSkpdGhyb3cgbmV3IHMuYihzLmEuSW50ZXJuYWxGYWlsLHttZXNzYWdlOmBJbnZhbGlkIHBhY2tmaWxlIHZlcnNpb246ICR7Y31gfSk7bGV0IGY9eWllbGQgci5yZWFkKDQpO2lmKG4udXBkYXRlKGYpLCEoKGY9Zi5yZWFkVUludDMyQkUoMCkpPDEpKWZvcig7IXIuZW9mKCkmJmYtLTspe2NvbnN0IHQ9ci50ZWxsKCkse3R5cGU6byxsZW5ndGg6YSxvZnM6dSxyZWZlcmVuY2U6Y309eWllbGQgaChyLG4pLGw9bmV3IGkuYS5JbmZsYXRlO2Zvcig7IWwucmVzdWx0Oyl7Y29uc3QgaT15aWVsZCByLmNodW5rKCk7aWYoci5lbmRlZClicmVhaztpZihsLnB1c2goaSwhMSksbC5lcnIpdGhyb3cgbmV3IHMuYihzLmEuSW50ZXJuYWxGYWlsLHttZXNzYWdlOmBQYWtvIGVycm9yOiAke2wubXNnfWB9KTtpZihsLnJlc3VsdCl7aWYobC5yZXN1bHQubGVuZ3RoIT09YSl0aHJvdyBuZXcgcy5iKHMuYS5JbnRlcm5hbEZhaWwse21lc3NhZ2U6IkluZmxhdGVkIG9iamVjdCBzaXplIGlzIGRpZmZlcmVudCBmcm9tIHRoYXQgc3RhdGVkIGluIHBhY2tmaWxlLiJ9KTt5aWVsZCByLnVuZG8oKTtjb25zdCBkPXlpZWxkIHIucmVhZChpLmxlbmd0aC1sLnN0cm0uYXZhaWxfaW4pO24udXBkYXRlKGQpO2NvbnN0IGg9ci50ZWxsKCk7ZSh7ZGF0YTpsLnJlc3VsdCx0eXBlOm8sbnVtOmYsb2Zmc2V0OnQsZW5kOmgscmVmZXJlbmNlOmMsb2ZzOnV9KX1lbHNlIG4udXBkYXRlKGkpfX19KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gcC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gcCgpe3JldHVybihwPWYoZnVuY3Rpb24qKGUscil7bGV0IG49eWllbGQgZS5ieXRlKCk7ci51cGRhdGUodC5mcm9tKFtuXSkpO2NvbnN0IGk9bj4+NCY3O2xldCBvLGEscz0xNSZuO2lmKDEyOCZuKXtsZXQgaT00O2Rve249eWllbGQgZS5ieXRlKCksci51cGRhdGUodC5mcm9tKFtuXSkpLHN8PSgxMjcmbik8PGksaSs9N313aGlsZSgxMjgmbil9aWYoNj09PWkpe2xldCBpPTA7bz0wO2NvbnN0IHM9W107ZG97bj15aWVsZCBlLmJ5dGUoKSxyLnVwZGF0ZSh0LmZyb20oW25dKSksb3w9KDEyNyZuKTw8aSxpKz03LHMucHVzaChuKX13aGlsZSgxMjgmbik7YT10LmZyb20ocyl9aWYoNz09PWkpe2NvbnN0IHQ9eWllbGQgZS5yZWFkKDIwKTtyLnVwZGF0ZSh0KSxhPXR9cmV0dXJue3R5cGU6aSxsZW5ndGg6cyxvZnM6byxyZWZlcmVuY2U6YX19KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pLmNhbGwodGhpcyxyKDEwKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJuIHQuc3BsaXQoIlxuIikubWFwKHQ9PnQucmVwbGFjZSgvXiAvLCIiKSkuam9pbigiXG4iKX1yLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gbn0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigxMjgpO2Z1bmN0aW9uIGkodCxlKXtmb3IodmFyIHI9W10saT10Lmxlbmd0aCxvPWUubGVuZ3RoLGE9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgbih0LGUpO3IuY29tcG9zZSgpO2Zvcih2YXIgaSxvLGE9ci5nZXRzZXMoKSxzPXQubGVuZ3RoLTEsdT1lLmxlbmd0aC0xLGM9YS5sZW5ndGgtMTtjPj0wOy0tYylhW2NdLnQ9PT1yLlNFU19DT01NT04/KG8/KG8uY2hhaW49e2ZpbGUxaW5kZXg6cyxmaWxlMmluZGV4OnUsY2hhaW46bnVsbH0sbz1vLmNoYWluKTpvPWk9e2ZpbGUxaW5kZXg6cyxmaWxlMmluZGV4OnUsY2hhaW46bnVsbH0scy0tLHUtLSk6YVtjXS50PT09ci5TRVNfREVMRVRFP3MtLTphW2NdLnQ9PT1yLlNFU19BREQmJnUtLTt2YXIgZj17ZmlsZTFpbmRleDotMSxmaWxlMmluZGV4Oi0xLGNoYWluOm51bGx9O3JldHVybiBvPyhvLmNoYWluPWYsaSk6Zn0odCxlKTtudWxsIT09YTthPWEuY2hhaW4pe3ZhciBzPWktYS5maWxlMWluZGV4LTEsdT1vLWEuZmlsZTJpbmRleC0xO2k9YS5maWxlMWluZGV4LG89YS5maWxlMmluZGV4LChzfHx1KSYmci5wdXNoKHtmaWxlMTpbaSsxLHNdLGZpbGUyOltvKzEsdV19KX1yZXR1cm4gci5yZXZlcnNlKCkscn10LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVtdLG89W3QsZSxyXSxhPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixvPWkoZSx0KSxhPWkoZSxyKSxzPVtdO2Z1bmN0aW9uIHUodCxlKXtzLnB1c2goW3QuZmlsZTFbMF0sZSx0LmZpbGUxWzFdLHQuZmlsZTJbMF0sdC5maWxlMlsxXV0pfWZvcihuPTA7bjxvLmxlbmd0aDtuKyspdShvW25dLDApO2ZvcihuPTA7bjxhLmxlbmd0aDtuKyspdShhW25dLDIpO3Muc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0WzBdLWVbMF19KTt2YXIgYz1bXSxmPTA7ZnVuY3Rpb24gbCh0KXt0PmYmJihjLnB1c2goWzEsZix0LWZdKSxmPXQpfWZvcih2YXIgZD0wO2Q8cy5sZW5ndGg7ZCsrKXtmb3IodmFyIGg9ZCxwPXNbZF0sZz1wWzBdLG09ZytwWzJdO2Q8cy5sZW5ndGgtMTspe3ZhciB5PXNbZCsxXSx2PXlbMF07aWYodj5tKWJyZWFrO209TWF0aC5tYXgobSx2K3lbMl0pLGQrK31pZihsKGcpLGg9PWQpcFs0XT4wJiZjLnB1c2goW3BbMV0scFszXSxwWzRdXSk7ZWxzZXt2YXIgdz17MDpbdC5sZW5ndGgsLTEsZS5sZW5ndGgsLTFdLDI6W3IubGVuZ3RoLC0xLGUubGVuZ3RoLC0xXX07Zm9yKG49aDtuPD1kO24rKyl7dmFyIGI9d1socD1zW25dKVsxXV0sXz1wWzBdLHg9XytwWzJdLEU9cFszXSxrPUUrcFs0XTtiWzBdPU1hdGgubWluKEUsYlswXSksYlsxXT1NYXRoLm1heChrLGJbMV0pLGJbMl09TWF0aC5taW4oXyxiWzJdKSxiWzNdPU1hdGgubWF4KHgsYlszXSl9dmFyIE89d1swXVswXSsoZy13WzBdWzJdKSxqPXdbMF1bMV0rKG0td1swXVszXSksUD13WzJdWzBdKyhnLXdbMl1bMl0pLFM9d1syXVsxXSsobS13WzJdWzNdKTtjLnB1c2goWy0xLE8sai1PLGcsbS1nLFAsUy1QXSl9Zj1tfXJldHVybiBsKGUubGVuZ3RoKSxjfSh0LGUscikscz1bXTtmdW5jdGlvbiB1KCl7cy5sZW5ndGgmJm4ucHVzaCh7b2s6c30pLHM9W119ZnVuY3Rpb24gYyh0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylzLnB1c2godFtlXSl9ZnVuY3Rpb24gZihlKXtpZihlWzJdIT1lWzZdKXJldHVybiEwO2Zvcih2YXIgbj1lWzFdLGk9ZVs1XSxvPTA7bzxlWzJdO28rKylpZih0W28rbl0hPXJbbytpXSlyZXR1cm4hMDtyZXR1cm4hMX1mb3IodmFyIGw9MDtsPGEubGVuZ3RoO2wrKyl7dmFyIGQ9YVtsXSxoPWRbMF07LTE9PWg/ZihkKT8odSgpLG4ucHVzaCh7Y29uZmxpY3Q6e2E6dC5zbGljZShkWzFdLGRbMV0rZFsyXSksYUluZGV4OmRbMV0sbzplLnNsaWNlKGRbM10sZFszXStkWzRdKSxvSW5kZXg6ZFszXSxiOnIuc2xpY2UoZFs1XSxkWzVdK2RbNl0pLGJJbmRleDpkWzVdfX0pKTpjKG9bMF0uc2xpY2UoZFsxXSxkWzFdK2RbMl0pKTpjKG9baF0uc2xpY2UoZFsxXSxkWzFdK2RbMl0pKX1yZXR1cm4gdSgpLG59fSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBufSk7Y29uc3Qgbj17Y29tbWl0OjE2LHRyZWU6MzIsYmxvYjo0OCx0YWc6NjQsb2ZzX2RlbHRhOjk2LHJlZl9kZWx0YToxMTJ9fSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2NvbnN0IHI9IndpbjMyIj09PWUucGxhdGZvcm0sbj1yPyJcXFxcKyI6IlxcLyIsaT1yPyJcXFxcIjoiLyIsbz0iKCg/OlteL10qKD86L3wkKSkqKSIsYT0iKFteL10qKSIscz1gKCg/OlteJHtpfV0qKD86JHtpfXwkKSkqKWAsdT1gKFteJHtpfV0qKWA7dC5leHBvcnRzPWZ1bmN0aW9uKHQse2V4dGVuZGVkOmU9ITEsZ2xvYnN0YXI6cj0hMSxzdHJpY3Q6aT0hMSxmaWxlcGF0aDpjPSExLGZsYWdzOmY9IiJ9PXt9KXtsZXQgbD0iIixkPSIiLGg9e3JlZ2V4OiIiLHNlZ21lbnRzOltdfSxwPSExLGc9ITE7Y29uc3QgbT1bXTtmdW5jdGlvbiB5KHQse3NwbGl0OmUsbGFzdDpyLG9ubHk6aX09e30peyJwYXRoIiE9PWkmJihsKz10KSxjJiYicmVnZXgiIT09aSYmKGgucmVnZXgrPSJcXC8iPT09dD9uOnQsZT8ociYmKGQrPXQpLCIiIT09ZCYmKGYuaW5jbHVkZXMoImciKXx8KGQ9YF4ke2R9JGApLGguc2VnbWVudHMucHVzaChuZXcgUmVnRXhwKGQsZikpKSxkPSIiKTpkKz10KX1sZXQgdix3O2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKWlmKHY9dFtuXSx3PXRbbisxXSxbIlxcIiwiJCIsIl4iLCIuIiwiPSJdLmluY2x1ZGVzKHYpKXkoYFxcJHt2fWApO2Vsc2UgaWYoIi8iIT09dilpZigiKCIhPT12KWlmKCIpIiE9PXYpaWYoInwiIT09dilpZigiKyIhPT12KWlmKCJAIj09PXYmJmUmJiIoIj09PXcpbS5wdXNoKHYpO2Vsc2UgaWYoIiEiIT09dilpZigiPyIhPT12KWlmKCJbIiE9PXYpaWYoIl0iIT09dilpZigieyIhPT12KWlmKCJ9IiE9PXYpaWYoIiwiIT09dilpZigiKiIhPT12KXkodik7ZWxzZXtpZigiKCI9PT13JiZlKXttLnB1c2godik7Y29udGludWV9bGV0IGk9dFtuLTFdLGM9MTtmb3IoOyIqIj09PXRbbisxXTspYysrLG4rKztsZXQgZj10W24rMV07aWYocil7Yz4xJiYoIi8iPT09aXx8dm9pZCAwPT09aSkmJigiLyI9PT1mfHx2b2lkIDA9PT1mKT8oeShvLHtvbmx5OiJyZWdleCJ9KSx5KHMse29ubHk6InBhdGgiLGxhc3Q6ITAsc3BsaXQ6ITB9KSxuKyspOih5KGEse29ubHk6InJlZ2V4In0pLHkodSx7b25seToicGF0aCJ9KSl9ZWxzZSB5KCIuKiIpfWVsc2V7aWYocCl7eSgifCIpO2NvbnRpbnVlfXkoYFxcJHt2fWApfWVsc2V7aWYoZSl7cD0hMSx5KCIpIik7Y29udGludWV9eShgXFwke3Z9YCl9ZWxzZXtpZihlKXtwPSEwLHkoIigiKTtjb250aW51ZX15KGBcXCR7dn1gKX1lbHNle2lmKGUpe2c9ITEseSh2KTtjb250aW51ZX15KGBcXCR7dn1gKX1lbHNle2lmKGcmJiI6Ij09PXcpe24rKztsZXQgZT0iIjtmb3IoOyI6IiE9PXRbKytuXTspZSs9dFtuXTsiYWxudW0iPT09ZT95KCIoXFx3fFxcZCkiKToic3BhY2UiPT09ZT95KCJcXHMiKToiZGlnaXQiPT09ZSYmeSgiXFxkIiksbisrO2NvbnRpbnVlfWlmKGUpe2c9ITAseSh2KTtjb250aW51ZX15KGBcXCR7dn1gKX1lbHNle2lmKGUpeyIoIj09PXc/bS5wdXNoKHYpOnkoIi4iKTtjb250aW51ZX15KGBcXCR7dn1gKX1lbHNle2lmKGUpe2lmKGcpe3koIl4iKTtjb250aW51ZX1pZigiKCI9PT13KXttLnB1c2godikseSgiKD8hIiksbisrO2NvbnRpbnVlfXkoYFxcJHt2fWApO2NvbnRpbnVlfXkoYFxcJHt2fWApfWVsc2V7aWYoIigiPT09dyYmZSl7bS5wdXNoKHYpO2NvbnRpbnVlfXkoYFxcJHt2fWApfWVsc2V7aWYobS5sZW5ndGgpe3kodik7Y29udGludWV9eShgXFwke3Z9YCl9ZWxzZXtpZihtLmxlbmd0aCl7eSh2KTtsZXQgdD1tLnBvcCgpO3koIkAiPT09dD8iezF9IjoiISI9PT10PyIoW14vXSopIjp0KTtjb250aW51ZX15KGBcXCR7dn1gKX1lbHNle2lmKG0ubGVuZ3RoKXt5KHYpO2NvbnRpbnVlfXkoYFxcJHt2fWApfWVsc2UgeShgXFwke3Z9YCx7c3BsaXQ6ITB9KSwiLyIhPT13fHxpfHwobCs9Ij8iKTtmLmluY2x1ZGVzKCJnIil8fChsPWBeJHtsfSRgLGQ9YF4ke2R9JGAsYyYmKGgucmVnZXg9YF4ke2gucmVnZXh9JGApKTtjb25zdCBiPXtyZWdleDpuZXcgUmVnRXhwKGwsZil9O3JldHVybiBjJiYoaC5zZWdtZW50cy5wdXNoKG5ldyBSZWdFeHAoZCxmKSksaC5yZWdleD1uZXcgUmVnRXhwKGgucmVnZXgsZiksaC5nbG9ic3Rhcj1uZXcgUmVnRXhwKGYuaW5jbHVkZXMoImciKT9zOmBeJHtzfSRgLGYpLGIucGF0aD1oKSxifX0pLmNhbGwodGhpcyxyKDQ5KSl9LGZ1bmN0aW9uKHQsZSl7ZS5yZWFkPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIG8sYSxzPTgqaS1uLTEsdT0oMTw8cyktMSxjPXU+PjEsZj0tNyxsPXI/aS0xOjAsZD1yPy0xOjEsaD10W2UrbF07Zm9yKGwrPWQsbz1oJigxPDwtZiktMSxoPj49LWYsZis9cztmPjA7bz0yNTYqbyt0W2UrbF0sbCs9ZCxmLT04KTtmb3IoYT1vJigxPDwtZiktMSxvPj49LWYsZis9bjtmPjA7YT0yNTYqYSt0W2UrbF0sbCs9ZCxmLT04KTtpZigwPT09bylvPTEtYztlbHNle2lmKG89PT11KXJldHVybiBhP05hTjoxLzAqKGg/LTE6MSk7YSs9TWF0aC5wb3coMixuKSxvLT1jfXJldHVybihoPy0xOjEpKmEqTWF0aC5wb3coMixvLW4pfSxlLndyaXRlPWZ1bmN0aW9uKHQsZSxyLG4saSxvKXt2YXIgYSxzLHUsYz04Km8taS0xLGY9KDE8PGMpLTEsbD1mPj4xLGQ9MjM9PT1pP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxoPW4/MDpvLTEscD1uPzE6LTEsZz1lPDB8fDA9PT1lJiYxL2U8MD8xOjA7Zm9yKGU9TWF0aC5hYnMoZSksaXNOYU4oZSl8fGU9PT0xLzA/KHM9aXNOYU4oZSk/MTowLGE9Zik6KGE9TWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMiksZSoodT1NYXRoLnBvdygyLC1hKSk8MSYmKGEtLSx1Kj0yKSwoZSs9YStsPj0xP2QvdTpkKk1hdGgucG93KDIsMS1sKSkqdT49MiYmKGErKyx1Lz0yKSxhK2w+PWY/KHM9MCxhPWYpOmErbD49MT8ocz0oZSp1LTEpKk1hdGgucG93KDIsaSksYSs9bCk6KHM9ZSpNYXRoLnBvdygyLGwtMSkqTWF0aC5wb3coMixpKSxhPTApKTtpPj04O3RbcitoXT0yNTUmcyxoKz1wLHMvPTI1NixpLT04KTtmb3IoYT1hPDxpfHMsYys9aTtjPjA7dFtyK2hdPTI1NSZhLGgrPXAsYS89MjU2LGMtPTgpO3RbcitoLXBdfD0xMjgqZ319LGZ1bmN0aW9uKHQsZSl7dmFyIHI9e30udG9TdHJpbmc7dC5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHQpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PXIuY2FsbCh0KX19LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe3ZhciByPWZ1bmN0aW9uKHQpe3Q9dHx8e30sdGhpcy5Qcm9taXNlPXQuUHJvbWlzZXx8UHJvbWlzZSx0aGlzLnF1ZXVlcz17fSx0aGlzLmRvbWFpbnM9e30sdGhpcy5kb21haW5SZWVudHJhbnQ9dC5kb21haW5SZWVudHJhbnR8fCExLHRoaXMudGltZW91dD10LnRpbWVvdXR8fHIuREVGQVVMVF9USU1FT1VULHRoaXMubWF4UGVuZGluZz10Lm1heFBlbmRpbmd8fHIuREVGQVVMVF9NQVhfUEVORElOR307ci5ERUZBVUxUX1RJTUVPVVQ9MCxyLkRFRkFVTFRfTUFYX1BFTkRJTkc9MWUzLHIucHJvdG90eXBlLmFjcXVpcmU9ZnVuY3Rpb24odCxyLG4saSl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdGhpcy5fYWNxdWlyZUJhdGNoKHQscixuLGkpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiByKXRocm93IG5ldyBFcnJvcigiWW91IG11c3QgcGFzcyBhIGZ1bmN0aW9uIHRvIGV4ZWN1dGUiKTt2YXIgbz1udWxsLGE9bnVsbCxzPW51bGw7ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihpPW4sbj1udWxsLHM9bmV3IHRoaXMuUHJvbWlzZShmdW5jdGlvbih0LGUpe289dCxhPWV9KSksaT1pfHx7fTt2YXIgdT0hMSxjPW51bGwsZj10aGlzLGw9ZnVuY3Rpb24oZSxyLGkpe2UmJigwPT09Zi5xdWV1ZXNbdF0ubGVuZ3RoJiZkZWxldGUgZi5xdWV1ZXNbdF0sZGVsZXRlIGYuZG9tYWluc1t0XSksdXx8KHM/cj9hKHIpOm8oaSk6ImZ1bmN0aW9uIj09dHlwZW9mIG4mJm4ocixpKSx1PSEwKSxlJiZmLnF1ZXVlc1t0XSYmZi5xdWV1ZXNbdF0ubGVuZ3RoPjAmJmYucXVldWVzW3RdLnNoaWZ0KCkoKX0sZD1mdW5jdGlvbihuKXtpZih1KXJldHVybiBsKG4pO2lmKGMmJihjbGVhclRpbWVvdXQoYyksYz1udWxsKSxuJiYoZi5kb21haW5zW3RdPWUuZG9tYWluKSwxPT09ci5sZW5ndGgpe3ZhciBpPSExO3IoZnVuY3Rpb24odCxlKXtpfHwoaT0hMCxsKG4sdCxlKSl9KX1lbHNlIGYuX3Byb21pc2VUcnkoZnVuY3Rpb24oKXtyZXR1cm4gcigpfSkudGhlbihmdW5jdGlvbih0KXtsKG4sdm9pZCAwLHQpfSxmdW5jdGlvbih0KXtsKG4sdCl9KX07aWYoZS5kb21haW4mJihkPWUuZG9tYWluLmJpbmQoZCkpLGYucXVldWVzW3RdKWlmKGYuZG9tYWluUmVlbnRyYW50JiZlLmRvbWFpbiYmZS5kb21haW49PT1mLmRvbWFpbnNbdF0pZCghMSk7ZWxzZSBpZihmLnF1ZXVlc1t0XS5sZW5ndGg+PWYubWF4UGVuZGluZylsKCExLG5ldyBFcnJvcigiVG9vIG11Y2ggcGVuZGluZyB0YXNrcyIpKTtlbHNle3ZhciBoPWZ1bmN0aW9uKCl7ZCghMCl9O2kuc2tpcFF1ZXVlP2YucXVldWVzW3RdLnVuc2hpZnQoaCk6Zi5xdWV1ZXNbdF0ucHVzaChoKTt2YXIgcD1pLnRpbWVvdXR8fGYudGltZW91dDtwJiYoYz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yz1udWxsLGwoITEsbmV3IEVycm9yKCJhc3luYy1sb2NrIHRpbWVkIG91dCIpKX0scCkpfWVsc2UgZi5xdWV1ZXNbdF09W10sZCghMCk7cmV0dXJuIHN8fHZvaWQgMH0sci5wcm90b3R5cGUuX2FjcXVpcmVCYXRjaD1mdW5jdGlvbih0LGUscixuKXsiZnVuY3Rpb24iIT10eXBlb2YgciYmKG49cixyPW51bGwpO3ZhciBpPXRoaXMsbz1lO2lmKHQucmV2ZXJzZSgpLmZvckVhY2goZnVuY3Rpb24odCl7bz1mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyKXtpLmFjcXVpcmUodCxlLHIsbil9fSh0LG8pfSksImZ1bmN0aW9uIiE9dHlwZW9mIHIpcmV0dXJuIG5ldyB0aGlzLlByb21pc2UoZnVuY3Rpb24odCxlKXsxPT09by5sZW5ndGg/byhmdW5jdGlvbihyLG4pe3I/ZShyKTp0KG4pfSk6dChvKCkpfSk7byhyKX0sci5wcm90b3R5cGUuaXNCdXN5PWZ1bmN0aW9uKHQpe3JldHVybiB0PyEhdGhpcy5xdWV1ZXNbdF06T2JqZWN0LmtleXModGhpcy5xdWV1ZXMpLmxlbmd0aD4wfSxyLnByb3RvdHlwZS5fcHJvbWlzZVRyeT1mdW5jdGlvbih0KXt0cnl7cmV0dXJuIHRoaXMuUHJvbWlzZS5yZXNvbHZlKHQoKSl9Y2F0Y2godCl7cmV0dXJuIHRoaXMuUHJvbWlzZS5yZWplY3QodCl9fSx0LmV4cG9ydHM9cn0pLmNhbGwodGhpcyxyKDQ5KSl9LGZ1bmN0aW9uKHQsZSl7ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5jcmVhdGU/dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dC5zdXBlcl89ZSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KX06dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dC5zdXBlcl89ZTt2YXIgcj1mdW5jdGlvbigpe307ci5wcm90b3R5cGU9ZS5wcm90b3R5cGUsdC5wcm90b3R5cGU9bmV3IHIsdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dH19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDc3KS5CdWZmZXI7ZnVuY3Rpb24gaSh0LGUpe3RoaXMuX2Jsb2NrPW4uYWxsb2ModCksdGhpcy5fZmluYWxTaXplPWUsdGhpcy5fYmxvY2tTaXplPXQsdGhpcy5fbGVuPTB9aS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsZSl7InN0cmluZyI9PXR5cGVvZiB0JiYoZT1lfHwidXRmOCIsdD1uLmZyb20odCxlKSk7Zm9yKHZhciByPXRoaXMuX2Jsb2NrLGk9dGhpcy5fYmxvY2tTaXplLG89dC5sZW5ndGgsYT10aGlzLl9sZW4scz0wO3M8bzspe2Zvcih2YXIgdT1hJWksYz1NYXRoLm1pbihvLXMsaS11KSxmPTA7ZjxjO2YrKylyW3UrZl09dFtzK2ZdO3MrPWMsKGErPWMpJWk9PTAmJnRoaXMuX3VwZGF0ZShyKX1yZXR1cm4gdGhpcy5fbGVuKz1vLHRoaXN9LGkucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9sZW4ldGhpcy5fYmxvY2tTaXplO3RoaXMuX2Jsb2NrW2VdPTEyOCx0aGlzLl9ibG9jay5maWxsKDAsZSsxKSxlPj10aGlzLl9maW5hbFNpemUmJih0aGlzLl91cGRhdGUodGhpcy5fYmxvY2spLHRoaXMuX2Jsb2NrLmZpbGwoMCkpO3ZhciByPTgqdGhpcy5fbGVuO2lmKHI8PTQyOTQ5NjcyOTUpdGhpcy5fYmxvY2sud3JpdGVVSW50MzJCRShyLHRoaXMuX2Jsb2NrU2l6ZS00KTtlbHNle3ZhciBuPSg0Mjk0OTY3Mjk1JnIpPj4+MCxpPShyLW4pLzQyOTQ5NjcyOTY7dGhpcy5fYmxvY2sud3JpdGVVSW50MzJCRShpLHRoaXMuX2Jsb2NrU2l6ZS04KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkJFKG4sdGhpcy5fYmxvY2tTaXplLTQpfXRoaXMuX3VwZGF0ZSh0aGlzLl9ibG9jayk7dmFyIG89dGhpcy5faGFzaCgpO3JldHVybiB0P28udG9TdHJpbmcodCk6b30saS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX3VwZGF0ZSBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzIil9LHQuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTA5KSxpPXIoMjUpLG89cig4MCksYT1yKDYzKSxzPXIoODEpLHU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxjPTAsZj0tMSxsPTAsZD04O2Z1bmN0aW9uIGgodCl7aWYoISh0aGlzIGluc3RhbmNlb2YgaCkpcmV0dXJuIG5ldyBoKHQpO3RoaXMub3B0aW9ucz1pLmFzc2lnbih7bGV2ZWw6ZixtZXRob2Q6ZCxjaHVua1NpemU6MTYzODQsd2luZG93Qml0czoxNSxtZW1MZXZlbDo4LHN0cmF0ZWd5OmwsdG86IiJ9LHR8fHt9KTt2YXIgZT10aGlzLm9wdGlvbnM7ZS5yYXcmJmUud2luZG93Qml0cz4wP2Uud2luZG93Qml0cz0tZS53aW5kb3dCaXRzOmUuZ3ppcCYmZS53aW5kb3dCaXRzPjAmJmUud2luZG93Qml0czwxNiYmKGUud2luZG93Qml0cys9MTYpLHRoaXMuZXJyPTAsdGhpcy5tc2c9IiIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IHMsdGhpcy5zdHJtLmF2YWlsX291dD0wO3ZhciByPW4uZGVmbGF0ZUluaXQyKHRoaXMuc3RybSxlLmxldmVsLGUubWV0aG9kLGUud2luZG93Qml0cyxlLm1lbUxldmVsLGUuc3RyYXRlZ3kpO2lmKHIhPT1jKXRocm93IG5ldyBFcnJvcihhW3JdKTtpZihlLmhlYWRlciYmbi5kZWZsYXRlU2V0SGVhZGVyKHRoaXMuc3RybSxlLmhlYWRlciksZS5kaWN0aW9uYXJ5KXt2YXIgcDtpZihwPSJzdHJpbmciPT10eXBlb2YgZS5kaWN0aW9uYXJ5P28uc3RyaW5nMmJ1ZihlLmRpY3Rpb25hcnkpOiJbb2JqZWN0IEFycmF5QnVmZmVyXSI9PT11LmNhbGwoZS5kaWN0aW9uYXJ5KT9uZXcgVWludDhBcnJheShlLmRpY3Rpb25hcnkpOmUuZGljdGlvbmFyeSwocj1uLmRlZmxhdGVTZXREaWN0aW9uYXJ5KHRoaXMuc3RybSxwKSkhPT1jKXRocm93IG5ldyBFcnJvcihhW3JdKTt0aGlzLl9kaWN0X3NldD0hMH19ZnVuY3Rpb24gcCh0LGUpe3ZhciByPW5ldyBoKGUpO2lmKHIucHVzaCh0LCEwKSxyLmVycil0aHJvdyByLm1zZ3x8YVtyLmVycl07cmV0dXJuIHIucmVzdWx0fWgucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24odCxlKXt2YXIgcixhLHM9dGhpcy5zdHJtLGY9dGhpcy5vcHRpb25zLmNodW5rU2l6ZTtpZih0aGlzLmVuZGVkKXJldHVybiExO2E9ZT09PX5+ZT9lOiEwPT09ZT80OjAsInN0cmluZyI9PXR5cGVvZiB0P3MuaW5wdXQ9by5zdHJpbmcyYnVmKHQpOiJbb2JqZWN0IEFycmF5QnVmZmVyXSI9PT11LmNhbGwodCk/cy5pbnB1dD1uZXcgVWludDhBcnJheSh0KTpzLmlucHV0PXQscy5uZXh0X2luPTAscy5hdmFpbF9pbj1zLmlucHV0Lmxlbmd0aDtkb3tpZigwPT09cy5hdmFpbF9vdXQmJihzLm91dHB1dD1uZXcgaS5CdWY4KGYpLHMubmV4dF9vdXQ9MCxzLmF2YWlsX291dD1mKSwxIT09KHI9bi5kZWZsYXRlKHMsYSkpJiZyIT09YylyZXR1cm4gdGhpcy5vbkVuZChyKSx0aGlzLmVuZGVkPSEwLCExOzAhPT1zLmF2YWlsX291dCYmKDAhPT1zLmF2YWlsX2lufHw0IT09YSYmMiE9PWEpfHwoInN0cmluZyI9PT10aGlzLm9wdGlvbnMudG8/dGhpcy5vbkRhdGEoby5idWYyYmluc3RyaW5nKGkuc2hyaW5rQnVmKHMub3V0cHV0LHMubmV4dF9vdXQpKSk6dGhpcy5vbkRhdGEoaS5zaHJpbmtCdWYocy5vdXRwdXQscy5uZXh0X291dCkpKX13aGlsZSgocy5hdmFpbF9pbj4wfHwwPT09cy5hdmFpbF9vdXQpJiYxIT09cik7cmV0dXJuIDQ9PT1hPyhyPW4uZGVmbGF0ZUVuZCh0aGlzLnN0cm0pLHRoaXMub25FbmQociksdGhpcy5lbmRlZD0hMCxyPT09Yyk6MiE9PWF8fCh0aGlzLm9uRW5kKGMpLHMuYXZhaWxfb3V0PTAsITApfSxoLnByb3RvdHlwZS5vbkRhdGE9ZnVuY3Rpb24odCl7dGhpcy5jaHVua3MucHVzaCh0KX0saC5wcm90b3R5cGUub25FbmQ9ZnVuY3Rpb24odCl7dD09PWMmJigic3RyaW5nIj09PXRoaXMub3B0aW9ucy50bz90aGlzLnJlc3VsdD10aGlzLmNodW5rcy5qb2luKCIiKTp0aGlzLnJlc3VsdD1pLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpKSx0aGlzLmNodW5rcz1bXSx0aGlzLmVycj10LHRoaXMubXNnPXRoaXMuc3RybS5tc2d9LGUuRGVmbGF0ZT1oLGUuZGVmbGF0ZT1wLGUuZGVmbGF0ZVJhdz1mdW5jdGlvbih0LGUpe3JldHVybihlPWV8fHt9KS5yYXc9ITAscCh0LGUpfSxlLmd6aXA9ZnVuY3Rpb24odCxlKXtyZXR1cm4oZT1lfHx7fSkuZ3ppcD0hMCxwKHQsZSl9fSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGk9cigyNSksbz1yKDExMCksYT1yKDc4KSxzPXIoNzkpLHU9cig2MyksYz0wLGY9MSxsPTMsZD00LGg9NSxwPTAsZz0xLG09LTIseT0tMyx2PS01LHc9LTEsYj0xLF89Mix4PTMsRT00LGs9MCxPPTIsaj04LFA9OSxTPTE1LFI9OCwkPTI4NixBPTMwLFQ9MTksST0yKiQrMSxCPTE1LEY9MyxVPTI1OCxNPVUrRisxLEM9MzIsTj00MixEPTY5LHo9NzMsSD05MSxMPTEwMyxHPTExMyxxPTY2NixXPTEsWT0yLFo9MyxLPTQsVj0zO2Z1bmN0aW9uIFgodCxlKXtyZXR1cm4gdC5tc2c9dVtlXSxlfWZ1bmN0aW9uIEoodCl7cmV0dXJuKHQ8PDEpLSh0PjQ/OTowKX1mdW5jdGlvbiBRKHQpe2Zvcih2YXIgZT10Lmxlbmd0aDstLWU+PTA7KXRbZV09MH1mdW5jdGlvbiB0dCh0KXt2YXIgZT10LnN0YXRlLHI9ZS5wZW5kaW5nO3I+dC5hdmFpbF9vdXQmJihyPXQuYXZhaWxfb3V0KSwwIT09ciYmKGkuYXJyYXlTZXQodC5vdXRwdXQsZS5wZW5kaW5nX2J1ZixlLnBlbmRpbmdfb3V0LHIsdC5uZXh0X291dCksdC5uZXh0X291dCs9cixlLnBlbmRpbmdfb3V0Kz1yLHQudG90YWxfb3V0Kz1yLHQuYXZhaWxfb3V0LT1yLGUucGVuZGluZy09ciwwPT09ZS5wZW5kaW5nJiYoZS5wZW5kaW5nX291dD0wKSl9ZnVuY3Rpb24gZXQodCxlKXtvLl90cl9mbHVzaF9ibG9jayh0LHQuYmxvY2tfc3RhcnQ+PTA/dC5ibG9ja19zdGFydDotMSx0LnN0cnN0YXJ0LXQuYmxvY2tfc3RhcnQsZSksdC5ibG9ja19zdGFydD10LnN0cnN0YXJ0LHR0KHQuc3RybSl9ZnVuY3Rpb24gcnQodCxlKXt0LnBlbmRpbmdfYnVmW3QucGVuZGluZysrXT1lfWZ1bmN0aW9uIG50KHQsZSl7dC5wZW5kaW5nX2J1Zlt0LnBlbmRpbmcrK109ZT4+PjgmMjU1LHQucGVuZGluZ19idWZbdC5wZW5kaW5nKytdPTI1NSZlfWZ1bmN0aW9uIGl0KHQsZSl7dmFyIHIsbixpPXQubWF4X2NoYWluX2xlbmd0aCxvPXQuc3Ryc3RhcnQsYT10LnByZXZfbGVuZ3RoLHM9dC5uaWNlX21hdGNoLHU9dC5zdHJzdGFydD50Lndfc2l6ZS1NP3Quc3Ryc3RhcnQtKHQud19zaXplLU0pOjAsYz10LndpbmRvdyxmPXQud19tYXNrLGw9dC5wcmV2LGQ9dC5zdHJzdGFydCtVLGg9Y1tvK2EtMV0scD1jW28rYV07dC5wcmV2X2xlbmd0aD49dC5nb29kX21hdGNoJiYoaT4+PTIpLHM+dC5sb29rYWhlYWQmJihzPXQubG9va2FoZWFkKTtkb3tpZihjWyhyPWUpK2FdPT09cCYmY1tyK2EtMV09PT1oJiZjW3JdPT09Y1tvXSYmY1srK3JdPT09Y1tvKzFdKXtvKz0yLHIrKztkb3t9d2hpbGUoY1srK29dPT09Y1srK3JdJiZjWysrb109PT1jWysrcl0mJmNbKytvXT09PWNbKytyXSYmY1srK29dPT09Y1srK3JdJiZjWysrb109PT1jWysrcl0mJmNbKytvXT09PWNbKytyXSYmY1srK29dPT09Y1srK3JdJiZjWysrb109PT1jWysrcl0mJm88ZCk7aWYobj1VLShkLW8pLG89ZC1VLG4+YSl7aWYodC5tYXRjaF9zdGFydD1lLGE9bixuPj1zKWJyZWFrO2g9Y1tvK2EtMV0scD1jW28rYV19fX13aGlsZSgoZT1sW2UmZl0pPnUmJjAhPS0taSk7cmV0dXJuIGE8PXQubG9va2FoZWFkP2E6dC5sb29rYWhlYWR9ZnVuY3Rpb24gb3QodCl7dmFyIGUscixuLG8sdSxjLGYsbCxkLGgscD10Lndfc2l6ZTtkb3tpZihvPXQud2luZG93X3NpemUtdC5sb29rYWhlYWQtdC5zdHJzdGFydCx0LnN0cnN0YXJ0Pj1wKyhwLU0pKXtpLmFycmF5U2V0KHQud2luZG93LHQud2luZG93LHAscCwwKSx0Lm1hdGNoX3N0YXJ0LT1wLHQuc3Ryc3RhcnQtPXAsdC5ibG9ja19zdGFydC09cCxlPXI9dC5oYXNoX3NpemU7ZG97bj10LmhlYWRbLS1lXSx0LmhlYWRbZV09bj49cD9uLXA6MH13aGlsZSgtLXIpO2U9cj1wO2Rve249dC5wcmV2Wy0tZV0sdC5wcmV2W2VdPW4+PXA/bi1wOjB9d2hpbGUoLS1yKTtvKz1wfWlmKDA9PT10LnN0cm0uYXZhaWxfaW4pYnJlYWs7aWYoYz10LnN0cm0sZj10LndpbmRvdyxsPXQuc3Ryc3RhcnQrdC5sb29rYWhlYWQsZD1vLGg9dm9pZCAwLChoPWMuYXZhaWxfaW4pPmQmJihoPWQpLHI9MD09PWg/MDooYy5hdmFpbF9pbi09aCxpLmFycmF5U2V0KGYsYy5pbnB1dCxjLm5leHRfaW4saCxsKSwxPT09Yy5zdGF0ZS53cmFwP2MuYWRsZXI9YShjLmFkbGVyLGYsaCxsKToyPT09Yy5zdGF0ZS53cmFwJiYoYy5hZGxlcj1zKGMuYWRsZXIsZixoLGwpKSxjLm5leHRfaW4rPWgsYy50b3RhbF9pbis9aCxoKSx0Lmxvb2thaGVhZCs9cix0Lmxvb2thaGVhZCt0Lmluc2VydD49Rilmb3IodT10LnN0cnN0YXJ0LXQuaW5zZXJ0LHQuaW5zX2g9dC53aW5kb3dbdV0sdC5pbnNfaD0odC5pbnNfaDw8dC5oYXNoX3NoaWZ0XnQud2luZG93W3UrMV0pJnQuaGFzaF9tYXNrO3QuaW5zZXJ0JiYodC5pbnNfaD0odC5pbnNfaDw8dC5oYXNoX3NoaWZ0XnQud2luZG93W3UrRi0xXSkmdC5oYXNoX21hc2ssdC5wcmV2W3UmdC53X21hc2tdPXQuaGVhZFt0Lmluc19oXSx0LmhlYWRbdC5pbnNfaF09dSx1KyssdC5pbnNlcnQtLSwhKHQubG9va2FoZWFkK3QuaW5zZXJ0PEYpKTspO313aGlsZSh0Lmxvb2thaGVhZDxNJiYwIT09dC5zdHJtLmF2YWlsX2luKX1mdW5jdGlvbiBhdCh0LGUpe2Zvcih2YXIgcixuOzspe2lmKHQubG9va2FoZWFkPE0pe2lmKG90KHQpLHQubG9va2FoZWFkPE0mJmU9PT1jKXJldHVybiBXO2lmKDA9PT10Lmxvb2thaGVhZClicmVha31pZihyPTAsdC5sb29rYWhlYWQ+PUYmJih0Lmluc19oPSh0Lmluc19oPDx0Lmhhc2hfc2hpZnRedC53aW5kb3dbdC5zdHJzdGFydCtGLTFdKSZ0Lmhhc2hfbWFzayxyPXQucHJldlt0LnN0cnN0YXJ0JnQud19tYXNrXT10LmhlYWRbdC5pbnNfaF0sdC5oZWFkW3QuaW5zX2hdPXQuc3Ryc3RhcnQpLDAhPT1yJiZ0LnN0cnN0YXJ0LXI8PXQud19zaXplLU0mJih0Lm1hdGNoX2xlbmd0aD1pdCh0LHIpKSx0Lm1hdGNoX2xlbmd0aD49RilpZihuPW8uX3RyX3RhbGx5KHQsdC5zdHJzdGFydC10Lm1hdGNoX3N0YXJ0LHQubWF0Y2hfbGVuZ3RoLUYpLHQubG9va2FoZWFkLT10Lm1hdGNoX2xlbmd0aCx0Lm1hdGNoX2xlbmd0aDw9dC5tYXhfbGF6eV9tYXRjaCYmdC5sb29rYWhlYWQ+PUYpe3QubWF0Y2hfbGVuZ3RoLS07ZG97dC5zdHJzdGFydCsrLHQuaW5zX2g9KHQuaW5zX2g8PHQuaGFzaF9zaGlmdF50LndpbmRvd1t0LnN0cnN0YXJ0K0YtMV0pJnQuaGFzaF9tYXNrLHI9dC5wcmV2W3Quc3Ryc3RhcnQmdC53X21hc2tdPXQuaGVhZFt0Lmluc19oXSx0LmhlYWRbdC5pbnNfaF09dC5zdHJzdGFydH13aGlsZSgwIT0tLXQubWF0Y2hfbGVuZ3RoKTt0LnN0cnN0YXJ0Kyt9ZWxzZSB0LnN0cnN0YXJ0Kz10Lm1hdGNoX2xlbmd0aCx0Lm1hdGNoX2xlbmd0aD0wLHQuaW5zX2g9dC53aW5kb3dbdC5zdHJzdGFydF0sdC5pbnNfaD0odC5pbnNfaDw8dC5oYXNoX3NoaWZ0XnQud2luZG93W3Quc3Ryc3RhcnQrMV0pJnQuaGFzaF9tYXNrO2Vsc2Ugbj1vLl90cl90YWxseSh0LDAsdC53aW5kb3dbdC5zdHJzdGFydF0pLHQubG9va2FoZWFkLS0sdC5zdHJzdGFydCsrO2lmKG4mJihldCh0LCExKSwwPT09dC5zdHJtLmF2YWlsX291dCkpcmV0dXJuIFd9cmV0dXJuIHQuaW5zZXJ0PXQuc3Ryc3RhcnQ8Ri0xP3Quc3Ryc3RhcnQ6Ri0xLGU9PT1kPyhldCh0LCEwKSwwPT09dC5zdHJtLmF2YWlsX291dD9aOkspOnQubGFzdF9saXQmJihldCh0LCExKSwwPT09dC5zdHJtLmF2YWlsX291dCk/VzpZfWZ1bmN0aW9uIHN0KHQsZSl7Zm9yKHZhciByLG4saTs7KXtpZih0Lmxvb2thaGVhZDxNKXtpZihvdCh0KSx0Lmxvb2thaGVhZDxNJiZlPT09YylyZXR1cm4gVztpZigwPT09dC5sb29rYWhlYWQpYnJlYWt9aWYocj0wLHQubG9va2FoZWFkPj1GJiYodC5pbnNfaD0odC5pbnNfaDw8dC5oYXNoX3NoaWZ0XnQud2luZG93W3Quc3Ryc3RhcnQrRi0xXSkmdC5oYXNoX21hc2sscj10LnByZXZbdC5zdHJzdGFydCZ0LndfbWFza109dC5oZWFkW3QuaW5zX2hdLHQuaGVhZFt0Lmluc19oXT10LnN0cnN0YXJ0KSx0LnByZXZfbGVuZ3RoPXQubWF0Y2hfbGVuZ3RoLHQucHJldl9tYXRjaD10Lm1hdGNoX3N0YXJ0LHQubWF0Y2hfbGVuZ3RoPUYtMSwwIT09ciYmdC5wcmV2X2xlbmd0aDx0Lm1heF9sYXp5X21hdGNoJiZ0LnN0cnN0YXJ0LXI8PXQud19zaXplLU0mJih0Lm1hdGNoX2xlbmd0aD1pdCh0LHIpLHQubWF0Y2hfbGVuZ3RoPD01JiYodC5zdHJhdGVneT09PWJ8fHQubWF0Y2hfbGVuZ3RoPT09RiYmdC5zdHJzdGFydC10Lm1hdGNoX3N0YXJ0PjQwOTYpJiYodC5tYXRjaF9sZW5ndGg9Ri0xKSksdC5wcmV2X2xlbmd0aD49RiYmdC5tYXRjaF9sZW5ndGg8PXQucHJldl9sZW5ndGgpe2k9dC5zdHJzdGFydCt0Lmxvb2thaGVhZC1GLG49by5fdHJfdGFsbHkodCx0LnN0cnN0YXJ0LTEtdC5wcmV2X21hdGNoLHQucHJldl9sZW5ndGgtRiksdC5sb29rYWhlYWQtPXQucHJldl9sZW5ndGgtMSx0LnByZXZfbGVuZ3RoLT0yO2RveysrdC5zdHJzdGFydDw9aSYmKHQuaW5zX2g9KHQuaW5zX2g8PHQuaGFzaF9zaGlmdF50LndpbmRvd1t0LnN0cnN0YXJ0K0YtMV0pJnQuaGFzaF9tYXNrLHI9dC5wcmV2W3Quc3Ryc3RhcnQmdC53X21hc2tdPXQuaGVhZFt0Lmluc19oXSx0LmhlYWRbdC5pbnNfaF09dC5zdHJzdGFydCl9d2hpbGUoMCE9LS10LnByZXZfbGVuZ3RoKTtpZih0Lm1hdGNoX2F2YWlsYWJsZT0wLHQubWF0Y2hfbGVuZ3RoPUYtMSx0LnN0cnN0YXJ0KyssbiYmKGV0KHQsITEpLDA9PT10LnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gV31lbHNlIGlmKHQubWF0Y2hfYXZhaWxhYmxlKXtpZigobj1vLl90cl90YWxseSh0LDAsdC53aW5kb3dbdC5zdHJzdGFydC0xXSkpJiZldCh0LCExKSx0LnN0cnN0YXJ0KyssdC5sb29rYWhlYWQtLSwwPT09dC5zdHJtLmF2YWlsX291dClyZXR1cm4gV31lbHNlIHQubWF0Y2hfYXZhaWxhYmxlPTEsdC5zdHJzdGFydCsrLHQubG9va2FoZWFkLS19cmV0dXJuIHQubWF0Y2hfYXZhaWxhYmxlJiYobj1vLl90cl90YWxseSh0LDAsdC53aW5kb3dbdC5zdHJzdGFydC0xXSksdC5tYXRjaF9hdmFpbGFibGU9MCksdC5pbnNlcnQ9dC5zdHJzdGFydDxGLTE/dC5zdHJzdGFydDpGLTEsZT09PWQ/KGV0KHQsITApLDA9PT10LnN0cm0uYXZhaWxfb3V0P1o6Syk6dC5sYXN0X2xpdCYmKGV0KHQsITEpLDA9PT10LnN0cm0uYXZhaWxfb3V0KT9XOll9ZnVuY3Rpb24gdXQodCxlLHIsbixpKXt0aGlzLmdvb2RfbGVuZ3RoPXQsdGhpcy5tYXhfbGF6eT1lLHRoaXMubmljZV9sZW5ndGg9cix0aGlzLm1heF9jaGFpbj1uLHRoaXMuZnVuYz1pfWZ1bmN0aW9uIGN0KCl7dGhpcy5zdHJtPW51bGwsdGhpcy5zdGF0dXM9MCx0aGlzLnBlbmRpbmdfYnVmPW51bGwsdGhpcy5wZW5kaW5nX2J1Zl9zaXplPTAsdGhpcy5wZW5kaW5nX291dD0wLHRoaXMucGVuZGluZz0wLHRoaXMud3JhcD0wLHRoaXMuZ3poZWFkPW51bGwsdGhpcy5nemluZGV4PTAsdGhpcy5tZXRob2Q9aix0aGlzLmxhc3RfZmx1c2g9LTEsdGhpcy53X3NpemU9MCx0aGlzLndfYml0cz0wLHRoaXMud19tYXNrPTAsdGhpcy53aW5kb3c9bnVsbCx0aGlzLndpbmRvd19zaXplPTAsdGhpcy5wcmV2PW51bGwsdGhpcy5oZWFkPW51bGwsdGhpcy5pbnNfaD0wLHRoaXMuaGFzaF9zaXplPTAsdGhpcy5oYXNoX2JpdHM9MCx0aGlzLmhhc2hfbWFzaz0wLHRoaXMuaGFzaF9zaGlmdD0wLHRoaXMuYmxvY2tfc3RhcnQ9MCx0aGlzLm1hdGNoX2xlbmd0aD0wLHRoaXMucHJldl9tYXRjaD0wLHRoaXMubWF0Y2hfYXZhaWxhYmxlPTAsdGhpcy5zdHJzdGFydD0wLHRoaXMubWF0Y2hfc3RhcnQ9MCx0aGlzLmxvb2thaGVhZD0wLHRoaXMucHJldl9sZW5ndGg9MCx0aGlzLm1heF9jaGFpbl9sZW5ndGg9MCx0aGlzLm1heF9sYXp5X21hdGNoPTAsdGhpcy5sZXZlbD0wLHRoaXMuc3RyYXRlZ3k9MCx0aGlzLmdvb2RfbWF0Y2g9MCx0aGlzLm5pY2VfbWF0Y2g9MCx0aGlzLmR5bl9sdHJlZT1uZXcgaS5CdWYxNigyKkkpLHRoaXMuZHluX2R0cmVlPW5ldyBpLkJ1ZjE2KDIqKDIqQSsxKSksdGhpcy5ibF90cmVlPW5ldyBpLkJ1ZjE2KDIqKDIqVCsxKSksUSh0aGlzLmR5bl9sdHJlZSksUSh0aGlzLmR5bl9kdHJlZSksUSh0aGlzLmJsX3RyZWUpLHRoaXMubF9kZXNjPW51bGwsdGhpcy5kX2Rlc2M9bnVsbCx0aGlzLmJsX2Rlc2M9bnVsbCx0aGlzLmJsX2NvdW50PW5ldyBpLkJ1ZjE2KEIrMSksdGhpcy5oZWFwPW5ldyBpLkJ1ZjE2KDIqJCsxKSxRKHRoaXMuaGVhcCksdGhpcy5oZWFwX2xlbj0wLHRoaXMuaGVhcF9tYXg9MCx0aGlzLmRlcHRoPW5ldyBpLkJ1ZjE2KDIqJCsxKSxRKHRoaXMuZGVwdGgpLHRoaXMubF9idWY9MCx0aGlzLmxpdF9idWZzaXplPTAsdGhpcy5sYXN0X2xpdD0wLHRoaXMuZF9idWY9MCx0aGlzLm9wdF9sZW49MCx0aGlzLnN0YXRpY19sZW49MCx0aGlzLm1hdGNoZXM9MCx0aGlzLmluc2VydD0wLHRoaXMuYmlfYnVmPTAsdGhpcy5iaV92YWxpZD0wfWZ1bmN0aW9uIGZ0KHQpe3ZhciBlO3JldHVybiB0JiZ0LnN0YXRlPyh0LnRvdGFsX2luPXQudG90YWxfb3V0PTAsdC5kYXRhX3R5cGU9TywoZT10LnN0YXRlKS5wZW5kaW5nPTAsZS5wZW5kaW5nX291dD0wLGUud3JhcDwwJiYoZS53cmFwPS1lLndyYXApLGUuc3RhdHVzPWUud3JhcD9OOkcsdC5hZGxlcj0yPT09ZS53cmFwPzA6MSxlLmxhc3RfZmx1c2g9YyxvLl90cl9pbml0KGUpLHApOlgodCxtKX1mdW5jdGlvbiBsdCh0KXt2YXIgZSxyPWZ0KHQpO3JldHVybiByPT09cCYmKChlPXQuc3RhdGUpLndpbmRvd19zaXplPTIqZS53X3NpemUsUShlLmhlYWQpLGUubWF4X2xhenlfbWF0Y2g9bltlLmxldmVsXS5tYXhfbGF6eSxlLmdvb2RfbWF0Y2g9bltlLmxldmVsXS5nb29kX2xlbmd0aCxlLm5pY2VfbWF0Y2g9bltlLmxldmVsXS5uaWNlX2xlbmd0aCxlLm1heF9jaGFpbl9sZW5ndGg9bltlLmxldmVsXS5tYXhfY2hhaW4sZS5zdHJzdGFydD0wLGUuYmxvY2tfc3RhcnQ9MCxlLmxvb2thaGVhZD0wLGUuaW5zZXJ0PTAsZS5tYXRjaF9sZW5ndGg9ZS5wcmV2X2xlbmd0aD1GLTEsZS5tYXRjaF9hdmFpbGFibGU9MCxlLmluc19oPTApLHJ9ZnVuY3Rpb24gZHQodCxlLHIsbixvLGEpe2lmKCF0KXJldHVybiBtO3ZhciBzPTE7aWYoZT09PXcmJihlPTYpLG48MD8ocz0wLG49LW4pOm4+MTUmJihzPTIsbi09MTYpLG88MXx8bz5QfHxyIT09anx8bjw4fHxuPjE1fHxlPDB8fGU+OXx8YTwwfHxhPkUpcmV0dXJuIFgodCxtKTs4PT09biYmKG49OSk7dmFyIHU9bmV3IGN0O3JldHVybiB0LnN0YXRlPXUsdS5zdHJtPXQsdS53cmFwPXMsdS5nemhlYWQ9bnVsbCx1LndfYml0cz1uLHUud19zaXplPTE8PHUud19iaXRzLHUud19tYXNrPXUud19zaXplLTEsdS5oYXNoX2JpdHM9bys3LHUuaGFzaF9zaXplPTE8PHUuaGFzaF9iaXRzLHUuaGFzaF9tYXNrPXUuaGFzaF9zaXplLTEsdS5oYXNoX3NoaWZ0PX5+KCh1Lmhhc2hfYml0cytGLTEpL0YpLHUud2luZG93PW5ldyBpLkJ1ZjgoMip1Lndfc2l6ZSksdS5oZWFkPW5ldyBpLkJ1ZjE2KHUuaGFzaF9zaXplKSx1LnByZXY9bmV3IGkuQnVmMTYodS53X3NpemUpLHUubGl0X2J1ZnNpemU9MTw8bys2LHUucGVuZGluZ19idWZfc2l6ZT00KnUubGl0X2J1ZnNpemUsdS5wZW5kaW5nX2J1Zj1uZXcgaS5CdWY4KHUucGVuZGluZ19idWZfc2l6ZSksdS5kX2J1Zj0xKnUubGl0X2J1ZnNpemUsdS5sX2J1Zj0zKnUubGl0X2J1ZnNpemUsdS5sZXZlbD1lLHUuc3RyYXRlZ3k9YSx1Lm1ldGhvZD1yLGx0KHQpfW49W25ldyB1dCgwLDAsMCwwLGZ1bmN0aW9uKHQsZSl7dmFyIHI9NjU1MzU7Zm9yKHI+dC5wZW5kaW5nX2J1Zl9zaXplLTUmJihyPXQucGVuZGluZ19idWZfc2l6ZS01KTs7KXtpZih0Lmxvb2thaGVhZDw9MSl7aWYob3QodCksMD09PXQubG9va2FoZWFkJiZlPT09YylyZXR1cm4gVztpZigwPT09dC5sb29rYWhlYWQpYnJlYWt9dC5zdHJzdGFydCs9dC5sb29rYWhlYWQsdC5sb29rYWhlYWQ9MDt2YXIgbj10LmJsb2NrX3N0YXJ0K3I7aWYoKDA9PT10LnN0cnN0YXJ0fHx0LnN0cnN0YXJ0Pj1uKSYmKHQubG9va2FoZWFkPXQuc3Ryc3RhcnQtbix0LnN0cnN0YXJ0PW4sZXQodCwhMSksMD09PXQuc3RybS5hdmFpbF9vdXQpKXJldHVybiBXO2lmKHQuc3Ryc3RhcnQtdC5ibG9ja19zdGFydD49dC53X3NpemUtTSYmKGV0KHQsITEpLDA9PT10LnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gV31yZXR1cm4gdC5pbnNlcnQ9MCxlPT09ZD8oZXQodCwhMCksMD09PXQuc3RybS5hdmFpbF9vdXQ/WjpLKToodC5zdHJzdGFydD50LmJsb2NrX3N0YXJ0JiYoZXQodCwhMSksdC5zdHJtLmF2YWlsX291dCksVyl9KSxuZXcgdXQoNCw0LDgsNCxhdCksbmV3IHV0KDQsNSwxNiw4LGF0KSxuZXcgdXQoNCw2LDMyLDMyLGF0KSxuZXcgdXQoNCw0LDE2LDE2LHN0KSxuZXcgdXQoOCwxNiwzMiwzMixzdCksbmV3IHV0KDgsMTYsMTI4LDEyOCxzdCksbmV3IHV0KDgsMzIsMTI4LDI1NixzdCksbmV3IHV0KDMyLDEyOCwyNTgsMTAyNCxzdCksbmV3IHV0KDMyLDI1OCwyNTgsNDA5NixzdCldLGUuZGVmbGF0ZUluaXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZHQodCxlLGosUyxSLGspfSxlLmRlZmxhdGVJbml0Mj1kdCxlLmRlZmxhdGVSZXNldD1sdCxlLmRlZmxhdGVSZXNldEtlZXA9ZnQsZS5kZWZsYXRlU2V0SGVhZGVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQmJnQuc3RhdGU/MiE9PXQuc3RhdGUud3JhcD9tOih0LnN0YXRlLmd6aGVhZD1lLHApOm19LGUuZGVmbGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByLGksYSx1O2lmKCF0fHwhdC5zdGF0ZXx8ZT5ofHxlPDApcmV0dXJuIHQ/WCh0LG0pOm07aWYoaT10LnN0YXRlLCF0Lm91dHB1dHx8IXQuaW5wdXQmJjAhPT10LmF2YWlsX2lufHxpLnN0YXR1cz09PXEmJmUhPT1kKXJldHVybiBYKHQsMD09PXQuYXZhaWxfb3V0P3Y6bSk7aWYoaS5zdHJtPXQscj1pLmxhc3RfZmx1c2gsaS5sYXN0X2ZsdXNoPWUsaS5zdGF0dXM9PT1OKWlmKDI9PT1pLndyYXApdC5hZGxlcj0wLHJ0KGksMzEpLHJ0KGksMTM5KSxydChpLDgpLGkuZ3poZWFkPyhydChpLChpLmd6aGVhZC50ZXh0PzE6MCkrKGkuZ3poZWFkLmhjcmM/MjowKSsoaS5nemhlYWQuZXh0cmE/NDowKSsoaS5nemhlYWQubmFtZT84OjApKyhpLmd6aGVhZC5jb21tZW50PzE2OjApKSxydChpLDI1NSZpLmd6aGVhZC50aW1lKSxydChpLGkuZ3poZWFkLnRpbWU+PjgmMjU1KSxydChpLGkuZ3poZWFkLnRpbWU+PjE2JjI1NSkscnQoaSxpLmd6aGVhZC50aW1lPj4yNCYyNTUpLHJ0KGksOT09PWkubGV2ZWw/MjppLnN0cmF0ZWd5Pj1ffHxpLmxldmVsPDI/NDowKSxydChpLDI1NSZpLmd6aGVhZC5vcyksaS5nemhlYWQuZXh0cmEmJmkuZ3poZWFkLmV4dHJhLmxlbmd0aCYmKHJ0KGksMjU1JmkuZ3poZWFkLmV4dHJhLmxlbmd0aCkscnQoaSxpLmd6aGVhZC5leHRyYS5sZW5ndGg+PjgmMjU1KSksaS5nemhlYWQuaGNyYyYmKHQuYWRsZXI9cyh0LmFkbGVyLGkucGVuZGluZ19idWYsaS5wZW5kaW5nLDApKSxpLmd6aW5kZXg9MCxpLnN0YXR1cz1EKToocnQoaSwwKSxydChpLDApLHJ0KGksMCkscnQoaSwwKSxydChpLDApLHJ0KGksOT09PWkubGV2ZWw/MjppLnN0cmF0ZWd5Pj1ffHxpLmxldmVsPDI/NDowKSxydChpLFYpLGkuc3RhdHVzPUcpO2Vsc2V7dmFyIHk9aisoaS53X2JpdHMtODw8NCk8PDg7eXw9KGkuc3RyYXRlZ3k+PV98fGkubGV2ZWw8Mj8wOmkubGV2ZWw8Nj8xOjY9PT1pLmxldmVsPzI6Myk8PDYsMCE9PWkuc3Ryc3RhcnQmJih5fD1DKSx5Kz0zMS15JTMxLGkuc3RhdHVzPUcsbnQoaSx5KSwwIT09aS5zdHJzdGFydCYmKG50KGksdC5hZGxlcj4+PjE2KSxudChpLDY1NTM1JnQuYWRsZXIpKSx0LmFkbGVyPTF9aWYoaS5zdGF0dXM9PT1EKWlmKGkuZ3poZWFkLmV4dHJhKXtmb3IoYT1pLnBlbmRpbmc7aS5nemluZGV4PCg2NTUzNSZpLmd6aGVhZC5leHRyYS5sZW5ndGgpJiYoaS5wZW5kaW5nIT09aS5wZW5kaW5nX2J1Zl9zaXplfHwoaS5nemhlYWQuaGNyYyYmaS5wZW5kaW5nPmEmJih0LmFkbGVyPXModC5hZGxlcixpLnBlbmRpbmdfYnVmLGkucGVuZGluZy1hLGEpKSx0dCh0KSxhPWkucGVuZGluZyxpLnBlbmRpbmchPT1pLnBlbmRpbmdfYnVmX3NpemUpKTspcnQoaSwyNTUmaS5nemhlYWQuZXh0cmFbaS5nemluZGV4XSksaS5nemluZGV4Kys7aS5nemhlYWQuaGNyYyYmaS5wZW5kaW5nPmEmJih0LmFkbGVyPXModC5hZGxlcixpLnBlbmRpbmdfYnVmLGkucGVuZGluZy1hLGEpKSxpLmd6aW5kZXg9PT1pLmd6aGVhZC5leHRyYS5sZW5ndGgmJihpLmd6aW5kZXg9MCxpLnN0YXR1cz16KX1lbHNlIGkuc3RhdHVzPXo7aWYoaS5zdGF0dXM9PT16KWlmKGkuZ3poZWFkLm5hbWUpe2E9aS5wZW5kaW5nO2Rve2lmKGkucGVuZGluZz09PWkucGVuZGluZ19idWZfc2l6ZSYmKGkuZ3poZWFkLmhjcmMmJmkucGVuZGluZz5hJiYodC5hZGxlcj1zKHQuYWRsZXIsaS5wZW5kaW5nX2J1ZixpLnBlbmRpbmctYSxhKSksdHQodCksYT1pLnBlbmRpbmcsaS5wZW5kaW5nPT09aS5wZW5kaW5nX2J1Zl9zaXplKSl7dT0xO2JyZWFrfXU9aS5nemluZGV4PGkuZ3poZWFkLm5hbWUubGVuZ3RoPzI1NSZpLmd6aGVhZC5uYW1lLmNoYXJDb2RlQXQoaS5nemluZGV4KyspOjAscnQoaSx1KX13aGlsZSgwIT09dSk7aS5nemhlYWQuaGNyYyYmaS5wZW5kaW5nPmEmJih0LmFkbGVyPXModC5hZGxlcixpLnBlbmRpbmdfYnVmLGkucGVuZGluZy1hLGEpKSwwPT09dSYmKGkuZ3ppbmRleD0wLGkuc3RhdHVzPUgpfWVsc2UgaS5zdGF0dXM9SDtpZihpLnN0YXR1cz09PUgpaWYoaS5nemhlYWQuY29tbWVudCl7YT1pLnBlbmRpbmc7ZG97aWYoaS5wZW5kaW5nPT09aS5wZW5kaW5nX2J1Zl9zaXplJiYoaS5nemhlYWQuaGNyYyYmaS5wZW5kaW5nPmEmJih0LmFkbGVyPXModC5hZGxlcixpLnBlbmRpbmdfYnVmLGkucGVuZGluZy1hLGEpKSx0dCh0KSxhPWkucGVuZGluZyxpLnBlbmRpbmc9PT1pLnBlbmRpbmdfYnVmX3NpemUpKXt1PTE7YnJlYWt9dT1pLmd6aW5kZXg8aS5nemhlYWQuY29tbWVudC5sZW5ndGg/MjU1JmkuZ3poZWFkLmNvbW1lbnQuY2hhckNvZGVBdChpLmd6aW5kZXgrKyk6MCxydChpLHUpfXdoaWxlKDAhPT11KTtpLmd6aGVhZC5oY3JjJiZpLnBlbmRpbmc+YSYmKHQuYWRsZXI9cyh0LmFkbGVyLGkucGVuZGluZ19idWYsaS5wZW5kaW5nLWEsYSkpLDA9PT11JiYoaS5zdGF0dXM9TCl9ZWxzZSBpLnN0YXR1cz1MO2lmKGkuc3RhdHVzPT09TCYmKGkuZ3poZWFkLmhjcmM/KGkucGVuZGluZysyPmkucGVuZGluZ19idWZfc2l6ZSYmdHQodCksaS5wZW5kaW5nKzI8PWkucGVuZGluZ19idWZfc2l6ZSYmKHJ0KGksMjU1JnQuYWRsZXIpLHJ0KGksdC5hZGxlcj4+OCYyNTUpLHQuYWRsZXI9MCxpLnN0YXR1cz1HKSk6aS5zdGF0dXM9RyksMCE9PWkucGVuZGluZyl7aWYodHQodCksMD09PXQuYXZhaWxfb3V0KXJldHVybiBpLmxhc3RfZmx1c2g9LTEscH1lbHNlIGlmKDA9PT10LmF2YWlsX2luJiZKKGUpPD1KKHIpJiZlIT09ZClyZXR1cm4gWCh0LHYpO2lmKGkuc3RhdHVzPT09cSYmMCE9PXQuYXZhaWxfaW4pcmV0dXJuIFgodCx2KTtpZigwIT09dC5hdmFpbF9pbnx8MCE9PWkubG9va2FoZWFkfHxlIT09YyYmaS5zdGF0dXMhPT1xKXt2YXIgdz1pLnN0cmF0ZWd5PT09Xz9mdW5jdGlvbih0LGUpe2Zvcih2YXIgcjs7KXtpZigwPT09dC5sb29rYWhlYWQmJihvdCh0KSwwPT09dC5sb29rYWhlYWQpKXtpZihlPT09YylyZXR1cm4gVzticmVha31pZih0Lm1hdGNoX2xlbmd0aD0wLHI9by5fdHJfdGFsbHkodCwwLHQud2luZG93W3Quc3Ryc3RhcnRdKSx0Lmxvb2thaGVhZC0tLHQuc3Ryc3RhcnQrKyxyJiYoZXQodCwhMSksMD09PXQuc3RybS5hdmFpbF9vdXQpKXJldHVybiBXfXJldHVybiB0Lmluc2VydD0wLGU9PT1kPyhldCh0LCEwKSwwPT09dC5zdHJtLmF2YWlsX291dD9aOkspOnQubGFzdF9saXQmJihldCh0LCExKSwwPT09dC5zdHJtLmF2YWlsX291dCk/VzpZfShpLGUpOmkuc3RyYXRlZ3k9PT14P2Z1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG4saSxhLHM9dC53aW5kb3c7Oyl7aWYodC5sb29rYWhlYWQ8PVUpe2lmKG90KHQpLHQubG9va2FoZWFkPD1VJiZlPT09YylyZXR1cm4gVztpZigwPT09dC5sb29rYWhlYWQpYnJlYWt9aWYodC5tYXRjaF9sZW5ndGg9MCx0Lmxvb2thaGVhZD49RiYmdC5zdHJzdGFydD4wJiYobj1zW2k9dC5zdHJzdGFydC0xXSk9PT1zWysraV0mJm49PT1zWysraV0mJm49PT1zWysraV0pe2E9dC5zdHJzdGFydCtVO2Rve313aGlsZShuPT09c1srK2ldJiZuPT09c1srK2ldJiZuPT09c1srK2ldJiZuPT09c1srK2ldJiZuPT09c1srK2ldJiZuPT09c1srK2ldJiZuPT09c1srK2ldJiZuPT09c1srK2ldJiZpPGEpO3QubWF0Y2hfbGVuZ3RoPVUtKGEtaSksdC5tYXRjaF9sZW5ndGg+dC5sb29rYWhlYWQmJih0Lm1hdGNoX2xlbmd0aD10Lmxvb2thaGVhZCl9aWYodC5tYXRjaF9sZW5ndGg+PUY/KHI9by5fdHJfdGFsbHkodCwxLHQubWF0Y2hfbGVuZ3RoLUYpLHQubG9va2FoZWFkLT10Lm1hdGNoX2xlbmd0aCx0LnN0cnN0YXJ0Kz10Lm1hdGNoX2xlbmd0aCx0Lm1hdGNoX2xlbmd0aD0wKToocj1vLl90cl90YWxseSh0LDAsdC53aW5kb3dbdC5zdHJzdGFydF0pLHQubG9va2FoZWFkLS0sdC5zdHJzdGFydCsrKSxyJiYoZXQodCwhMSksMD09PXQuc3RybS5hdmFpbF9vdXQpKXJldHVybiBXfXJldHVybiB0Lmluc2VydD0wLGU9PT1kPyhldCh0LCEwKSwwPT09dC5zdHJtLmF2YWlsX291dD9aOkspOnQubGFzdF9saXQmJihldCh0LCExKSwwPT09dC5zdHJtLmF2YWlsX291dCk/VzpZfShpLGUpOm5baS5sZXZlbF0uZnVuYyhpLGUpO2lmKHchPT1aJiZ3IT09S3x8KGkuc3RhdHVzPXEpLHc9PT1XfHx3PT09WilyZXR1cm4gMD09PXQuYXZhaWxfb3V0JiYoaS5sYXN0X2ZsdXNoPS0xKSxwO2lmKHc9PT1ZJiYoZT09PWY/by5fdHJfYWxpZ24oaSk6ZSE9PWgmJihvLl90cl9zdG9yZWRfYmxvY2soaSwwLDAsITEpLGU9PT1sJiYoUShpLmhlYWQpLDA9PT1pLmxvb2thaGVhZCYmKGkuc3Ryc3RhcnQ9MCxpLmJsb2NrX3N0YXJ0PTAsaS5pbnNlcnQ9MCkpKSx0dCh0KSwwPT09dC5hdmFpbF9vdXQpKXJldHVybiBpLmxhc3RfZmx1c2g9LTEscH1yZXR1cm4gZSE9PWQ/cDppLndyYXA8PTA/ZzooMj09PWkud3JhcD8ocnQoaSwyNTUmdC5hZGxlcikscnQoaSx0LmFkbGVyPj44JjI1NSkscnQoaSx0LmFkbGVyPj4xNiYyNTUpLHJ0KGksdC5hZGxlcj4+MjQmMjU1KSxydChpLDI1NSZ0LnRvdGFsX2luKSxydChpLHQudG90YWxfaW4+PjgmMjU1KSxydChpLHQudG90YWxfaW4+PjE2JjI1NSkscnQoaSx0LnRvdGFsX2luPj4yNCYyNTUpKToobnQoaSx0LmFkbGVyPj4+MTYpLG50KGksNjU1MzUmdC5hZGxlcikpLHR0KHQpLGkud3JhcD4wJiYoaS53cmFwPS1pLndyYXApLDAhPT1pLnBlbmRpbmc/cDpnKX0sZS5kZWZsYXRlRW5kPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiB0JiZ0LnN0YXRlPyhlPXQuc3RhdGUuc3RhdHVzKSE9PU4mJmUhPT1EJiZlIT09eiYmZSE9PUgmJmUhPT1MJiZlIT09RyYmZSE9PXE/WCh0LG0pOih0LnN0YXRlPW51bGwsZT09PUc/WCh0LHkpOnApOm19LGUuZGVmbGF0ZVNldERpY3Rpb25hcnk9ZnVuY3Rpb24odCxlKXt2YXIgcixuLG8scyx1LGMsZixsLGQ9ZS5sZW5ndGg7aWYoIXR8fCF0LnN0YXRlKXJldHVybiBtO2lmKDI9PT0ocz0ocj10LnN0YXRlKS53cmFwKXx8MT09PXMmJnIuc3RhdHVzIT09Tnx8ci5sb29rYWhlYWQpcmV0dXJuIG07Zm9yKDE9PT1zJiYodC5hZGxlcj1hKHQuYWRsZXIsZSxkLDApKSxyLndyYXA9MCxkPj1yLndfc2l6ZSYmKDA9PT1zJiYoUShyLmhlYWQpLHIuc3Ryc3RhcnQ9MCxyLmJsb2NrX3N0YXJ0PTAsci5pbnNlcnQ9MCksbD1uZXcgaS5CdWY4KHIud19zaXplKSxpLmFycmF5U2V0KGwsZSxkLXIud19zaXplLHIud19zaXplLDApLGU9bCxkPXIud19zaXplKSx1PXQuYXZhaWxfaW4sYz10Lm5leHRfaW4sZj10LmlucHV0LHQuYXZhaWxfaW49ZCx0Lm5leHRfaW49MCx0LmlucHV0PWUsb3Qocik7ci5sb29rYWhlYWQ+PUY7KXtuPXIuc3Ryc3RhcnQsbz1yLmxvb2thaGVhZC0oRi0xKTtkb3tyLmluc19oPShyLmluc19oPDxyLmhhc2hfc2hpZnReci53aW5kb3dbbitGLTFdKSZyLmhhc2hfbWFzayxyLnByZXZbbiZyLndfbWFza109ci5oZWFkW3IuaW5zX2hdLHIuaGVhZFtyLmluc19oXT1uLG4rK313aGlsZSgtLW8pO3Iuc3Ryc3RhcnQ9bixyLmxvb2thaGVhZD1GLTEsb3Qocil9cmV0dXJuIHIuc3Ryc3RhcnQrPXIubG9va2FoZWFkLHIuYmxvY2tfc3RhcnQ9ci5zdHJzdGFydCxyLmluc2VydD1yLmxvb2thaGVhZCxyLmxvb2thaGVhZD0wLHIubWF0Y2hfbGVuZ3RoPXIucHJldl9sZW5ndGg9Ri0xLHIubWF0Y2hfYXZhaWxhYmxlPTAsdC5uZXh0X2luPWMsdC5pbnB1dD1mLHQuYXZhaWxfaW49dSxyLndyYXA9cyxwfSxlLmRlZmxhdGVJbmZvPSJwYWtvIGRlZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpIn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDI1KSxpPTQsbz0wLGE9MSxzPTI7ZnVuY3Rpb24gdSh0KXtmb3IodmFyIGU9dC5sZW5ndGg7LS1lPj0wOyl0W2VdPTB9dmFyIGM9MCxmPTEsbD0yLGQ9MjksaD0yNTYscD1oKzErZCxnPTMwLG09MTkseT0yKnArMSx2PTE1LHc9MTYsYj03LF89MjU2LHg9MTYsRT0xNyxrPTE4LE89WzAsMCwwLDAsMCwwLDAsMCwxLDEsMSwxLDIsMiwyLDIsMywzLDMsMyw0LDQsNCw0LDUsNSw1LDUsMF0saj1bMCwwLDAsMCwxLDEsMiwyLDMsMyw0LDQsNSw1LDYsNiw3LDcsOCw4LDksOSwxMCwxMCwxMSwxMSwxMiwxMiwxMywxM10sUD1bMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDMsN10sUz1bMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0sUj1uZXcgQXJyYXkoMioocCsyKSk7dShSKTt2YXIgJD1uZXcgQXJyYXkoMipnKTt1KCQpO3ZhciBBPW5ldyBBcnJheSg1MTIpO3UoQSk7dmFyIFQ9bmV3IEFycmF5KDI1Nik7dShUKTt2YXIgST1uZXcgQXJyYXkoZCk7dShJKTt2YXIgQixGLFUsTT1uZXcgQXJyYXkoZyk7ZnVuY3Rpb24gQyh0LGUscixuLGkpe3RoaXMuc3RhdGljX3RyZWU9dCx0aGlzLmV4dHJhX2JpdHM9ZSx0aGlzLmV4dHJhX2Jhc2U9cix0aGlzLmVsZW1zPW4sdGhpcy5tYXhfbGVuZ3RoPWksdGhpcy5oYXNfc3RyZWU9dCYmdC5sZW5ndGh9ZnVuY3Rpb24gTih0LGUpe3RoaXMuZHluX3RyZWU9dCx0aGlzLm1heF9jb2RlPTAsdGhpcy5zdGF0X2Rlc2M9ZX1mdW5jdGlvbiBEKHQpe3JldHVybiB0PDI1Nj9BW3RdOkFbMjU2Kyh0Pj4+NyldfWZ1bmN0aW9uIHoodCxlKXt0LnBlbmRpbmdfYnVmW3QucGVuZGluZysrXT0yNTUmZSx0LnBlbmRpbmdfYnVmW3QucGVuZGluZysrXT1lPj4+OCYyNTV9ZnVuY3Rpb24gSCh0LGUscil7dC5iaV92YWxpZD53LXI/KHQuYmlfYnVmfD1lPDx0LmJpX3ZhbGlkJjY1NTM1LHoodCx0LmJpX2J1ZiksdC5iaV9idWY9ZT4+dy10LmJpX3ZhbGlkLHQuYmlfdmFsaWQrPXItdyk6KHQuYmlfYnVmfD1lPDx0LmJpX3ZhbGlkJjY1NTM1LHQuYmlfdmFsaWQrPXIpfWZ1bmN0aW9uIEwodCxlLHIpe0godCxyWzIqZV0sclsyKmUrMV0pfWZ1bmN0aW9uIEcodCxlKXt2YXIgcj0wO2Rve3J8PTEmdCx0Pj4+PTEscjw8PTF9d2hpbGUoLS1lPjApO3JldHVybiByPj4+MX1mdW5jdGlvbiBxKHQsZSxyKXt2YXIgbixpLG89bmV3IEFycmF5KHYrMSksYT0wO2ZvcihuPTE7bjw9djtuKyspb1tuXT1hPWErcltuLTFdPDwxO2ZvcihpPTA7aTw9ZTtpKyspe3ZhciBzPXRbMippKzFdOzAhPT1zJiYodFsyKmldPUcob1tzXSsrLHMpKX19ZnVuY3Rpb24gVyh0KXt2YXIgZTtmb3IoZT0wO2U8cDtlKyspdC5keW5fbHRyZWVbMiplXT0wO2ZvcihlPTA7ZTxnO2UrKyl0LmR5bl9kdHJlZVsyKmVdPTA7Zm9yKGU9MDtlPG07ZSsrKXQuYmxfdHJlZVsyKmVdPTA7dC5keW5fbHRyZWVbMipfXT0xLHQub3B0X2xlbj10LnN0YXRpY19sZW49MCx0Lmxhc3RfbGl0PXQubWF0Y2hlcz0wfWZ1bmN0aW9uIFkodCl7dC5iaV92YWxpZD44P3oodCx0LmJpX2J1Zik6dC5iaV92YWxpZD4wJiYodC5wZW5kaW5nX2J1Zlt0LnBlbmRpbmcrK109dC5iaV9idWYpLHQuYmlfYnVmPTAsdC5iaV92YWxpZD0wfWZ1bmN0aW9uIFoodCxlLHIsbil7dmFyIGk9MiplLG89MipyO3JldHVybiB0W2ldPHRbb118fHRbaV09PT10W29dJiZuW2VdPD1uW3JdfWZ1bmN0aW9uIEsodCxlLHIpe2Zvcih2YXIgbj10LmhlYXBbcl0saT1yPDwxO2k8PXQuaGVhcF9sZW4mJihpPHQuaGVhcF9sZW4mJlooZSx0LmhlYXBbaSsxXSx0LmhlYXBbaV0sdC5kZXB0aCkmJmkrKywhWihlLG4sdC5oZWFwW2ldLHQuZGVwdGgpKTspdC5oZWFwW3JdPXQuaGVhcFtpXSxyPWksaTw8PTE7dC5oZWFwW3JdPW59ZnVuY3Rpb24gVih0LGUscil7dmFyIG4saSxvLGEscz0wO2lmKDAhPT10Lmxhc3RfbGl0KWRve249dC5wZW5kaW5nX2J1Zlt0LmRfYnVmKzIqc108PDh8dC5wZW5kaW5nX2J1Zlt0LmRfYnVmKzIqcysxXSxpPXQucGVuZGluZ19idWZbdC5sX2J1ZitzXSxzKyssMD09PW4/TCh0LGksZSk6KEwodCwobz1UW2ldKStoKzEsZSksMCE9PShhPU9bb10pJiZIKHQsaS09SVtvXSxhKSxMKHQsbz1EKC0tbiksciksMCE9PShhPWpbb10pJiZIKHQsbi09TVtvXSxhKSl9d2hpbGUoczx0Lmxhc3RfbGl0KTtMKHQsXyxlKX1mdW5jdGlvbiBYKHQsZSl7dmFyIHIsbixpLG89ZS5keW5fdHJlZSxhPWUuc3RhdF9kZXNjLnN0YXRpY190cmVlLHM9ZS5zdGF0X2Rlc2MuaGFzX3N0cmVlLHU9ZS5zdGF0X2Rlc2MuZWxlbXMsYz0tMTtmb3IodC5oZWFwX2xlbj0wLHQuaGVhcF9tYXg9eSxyPTA7cjx1O3IrKykwIT09b1syKnJdPyh0LmhlYXBbKyt0LmhlYXBfbGVuXT1jPXIsdC5kZXB0aFtyXT0wKTpvWzIqcisxXT0wO2Zvcig7dC5oZWFwX2xlbjwyOylvWzIqKGk9dC5oZWFwWysrdC5oZWFwX2xlbl09YzwyPysrYzowKV09MSx0LmRlcHRoW2ldPTAsdC5vcHRfbGVuLS0scyYmKHQuc3RhdGljX2xlbi09YVsyKmkrMV0pO2ZvcihlLm1heF9jb2RlPWMscj10LmhlYXBfbGVuPj4xO3I+PTE7ci0tKUsodCxvLHIpO2k9dTtkb3tyPXQuaGVhcFsxXSx0LmhlYXBbMV09dC5oZWFwW3QuaGVhcF9sZW4tLV0sSyh0LG8sMSksbj10LmhlYXBbMV0sdC5oZWFwWy0tdC5oZWFwX21heF09cix0LmhlYXBbLS10LmhlYXBfbWF4XT1uLG9bMippXT1vWzIqcl0rb1syKm5dLHQuZGVwdGhbaV09KHQuZGVwdGhbcl0+PXQuZGVwdGhbbl0/dC5kZXB0aFtyXTp0LmRlcHRoW25dKSsxLG9bMipyKzFdPW9bMipuKzFdPWksdC5oZWFwWzFdPWkrKyxLKHQsbywxKX13aGlsZSh0LmhlYXBfbGVuPj0yKTt0LmhlYXBbLS10LmhlYXBfbWF4XT10LmhlYXBbMV0sZnVuY3Rpb24odCxlKXt2YXIgcixuLGksbyxhLHMsdT1lLmR5bl90cmVlLGM9ZS5tYXhfY29kZSxmPWUuc3RhdF9kZXNjLnN0YXRpY190cmVlLGw9ZS5zdGF0X2Rlc2MuaGFzX3N0cmVlLGQ9ZS5zdGF0X2Rlc2MuZXh0cmFfYml0cyxoPWUuc3RhdF9kZXNjLmV4dHJhX2Jhc2UscD1lLnN0YXRfZGVzYy5tYXhfbGVuZ3RoLGc9MDtmb3Iobz0wO288PXY7bysrKXQuYmxfY291bnRbb109MDtmb3IodVsyKnQuaGVhcFt0LmhlYXBfbWF4XSsxXT0wLHI9dC5oZWFwX21heCsxO3I8eTtyKyspKG89dVsyKnVbMioobj10LmhlYXBbcl0pKzFdKzFdKzEpPnAmJihvPXAsZysrKSx1WzIqbisxXT1vLG4+Y3x8KHQuYmxfY291bnRbb10rKyxhPTAsbj49aCYmKGE9ZFtuLWhdKSxzPXVbMipuXSx0Lm9wdF9sZW4rPXMqKG8rYSksbCYmKHQuc3RhdGljX2xlbis9cyooZlsyKm4rMV0rYSkpKTtpZigwIT09Zyl7ZG97Zm9yKG89cC0xOzA9PT10LmJsX2NvdW50W29dOylvLS07dC5ibF9jb3VudFtvXS0tLHQuYmxfY291bnRbbysxXSs9Mix0LmJsX2NvdW50W3BdLS0sZy09Mn13aGlsZShnPjApO2ZvcihvPXA7MCE9PW87by0tKWZvcihuPXQuYmxfY291bnRbb107MCE9PW47KShpPXQuaGVhcFstLXJdKT5jfHwodVsyKmkrMV0hPT1vJiYodC5vcHRfbGVuKz0oby11WzIqaSsxXSkqdVsyKmldLHVbMippKzFdPW8pLG4tLSl9fSh0LGUpLHEobyxjLHQuYmxfY291bnQpfWZ1bmN0aW9uIEoodCxlLHIpe3ZhciBuLGksbz0tMSxhPWVbMV0scz0wLHU9NyxjPTQ7Zm9yKDA9PT1hJiYodT0xMzgsYz0zKSxlWzIqKHIrMSkrMV09NjU1MzUsbj0wO248PXI7bisrKWk9YSxhPWVbMioobisxKSsxXSwrK3M8dSYmaT09PWF8fChzPGM/dC5ibF90cmVlWzIqaV0rPXM6MCE9PWk/KGkhPT1vJiZ0LmJsX3RyZWVbMippXSsrLHQuYmxfdHJlZVsyKnhdKyspOnM8PTEwP3QuYmxfdHJlZVsyKkVdKys6dC5ibF90cmVlWzIqa10rKyxzPTAsbz1pLDA9PT1hPyh1PTEzOCxjPTMpOmk9PT1hPyh1PTYsYz0zKToodT03LGM9NCkpfWZ1bmN0aW9uIFEodCxlLHIpe3ZhciBuLGksbz0tMSxhPWVbMV0scz0wLHU9NyxjPTQ7Zm9yKDA9PT1hJiYodT0xMzgsYz0zKSxuPTA7bjw9cjtuKyspaWYoaT1hLGE9ZVsyKihuKzEpKzFdLCEoKytzPHUmJmk9PT1hKSl7aWYoczxjKWRve0wodCxpLHQuYmxfdHJlZSl9d2hpbGUoMCE9LS1zKTtlbHNlIDAhPT1pPyhpIT09byYmKEwodCxpLHQuYmxfdHJlZSkscy0tKSxMKHQseCx0LmJsX3RyZWUpLEgodCxzLTMsMikpOnM8PTEwPyhMKHQsRSx0LmJsX3RyZWUpLEgodCxzLTMsMykpOihMKHQsayx0LmJsX3RyZWUpLEgodCxzLTExLDcpKTtzPTAsbz1pLDA9PT1hPyh1PTEzOCxjPTMpOmk9PT1hPyh1PTYsYz0zKToodT03LGM9NCl9fXUoTSk7dmFyIHR0PSExO2Z1bmN0aW9uIGV0KHQsZSxyLGkpe0godCwoYzw8MSkrKGk/MTowKSwzKSxmdW5jdGlvbih0LGUscixpKXtZKHQpLGkmJih6KHQscikseih0LH5yKSksbi5hcnJheVNldCh0LnBlbmRpbmdfYnVmLHQud2luZG93LGUscix0LnBlbmRpbmcpLHQucGVuZGluZys9cn0odCxlLHIsITApfWUuX3RyX2luaXQ9ZnVuY3Rpb24odCl7dHR8fCghZnVuY3Rpb24oKXt2YXIgdCxlLHIsbixpLG89bmV3IEFycmF5KHYrMSk7Zm9yKHI9MCxuPTA7bjxkLTE7bisrKWZvcihJW25dPXIsdD0wO3Q8MTw8T1tuXTt0KyspVFtyKytdPW47Zm9yKFRbci0xXT1uLGk9MCxuPTA7bjwxNjtuKyspZm9yKE1bbl09aSx0PTA7dDwxPDxqW25dO3QrKylBW2krK109bjtmb3IoaT4+PTc7bjxnO24rKylmb3IoTVtuXT1pPDw3LHQ9MDt0PDE8PGpbbl0tNzt0KyspQVsyNTYraSsrXT1uO2ZvcihlPTA7ZTw9djtlKyspb1tlXT0wO2Zvcih0PTA7dDw9MTQzOylSWzIqdCsxXT04LHQrKyxvWzhdKys7Zm9yKDt0PD0yNTU7KVJbMip0KzFdPTksdCsrLG9bOV0rKztmb3IoO3Q8PTI3OTspUlsyKnQrMV09Nyx0Kyssb1s3XSsrO2Zvcig7dDw9Mjg3OylSWzIqdCsxXT04LHQrKyxvWzhdKys7Zm9yKHEoUixwKzEsbyksdD0wO3Q8Zzt0KyspJFsyKnQrMV09NSwkWzIqdF09Ryh0LDUpO0I9bmV3IEMoUixPLGgrMSxwLHYpLEY9bmV3IEMoJCxqLDAsZyx2KSxVPW5ldyBDKG5ldyBBcnJheSgwKSxQLDAsbSxiKX0oKSx0dD0hMCksdC5sX2Rlc2M9bmV3IE4odC5keW5fbHRyZWUsQiksdC5kX2Rlc2M9bmV3IE4odC5keW5fZHRyZWUsRiksdC5ibF9kZXNjPW5ldyBOKHQuYmxfdHJlZSxVKSx0LmJpX2J1Zj0wLHQuYmlfdmFsaWQ9MCxXKHQpfSxlLl90cl9zdG9yZWRfYmxvY2s9ZXQsZS5fdHJfZmx1c2hfYmxvY2s9ZnVuY3Rpb24odCxlLHIsbil7dmFyIHUsYyxkPTA7dC5sZXZlbD4wPyh0LnN0cm0uZGF0YV90eXBlPT09cyYmKHQuc3RybS5kYXRhX3R5cGU9ZnVuY3Rpb24odCl7dmFyIGUscj00MDkzNjI0NDQ3O2ZvcihlPTA7ZTw9MzE7ZSsrLHI+Pj49MSlpZigxJnImJjAhPT10LmR5bl9sdHJlZVsyKmVdKXJldHVybiBvO2lmKDAhPT10LmR5bl9sdHJlZVsxOF18fDAhPT10LmR5bl9sdHJlZVsyMF18fDAhPT10LmR5bl9sdHJlZVsyNl0pcmV0dXJuIGE7Zm9yKGU9MzI7ZTxoO2UrKylpZigwIT09dC5keW5fbHRyZWVbMiplXSlyZXR1cm4gYTtyZXR1cm4gb30odCkpLFgodCx0LmxfZGVzYyksWCh0LHQuZF9kZXNjKSxkPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihKKHQsdC5keW5fbHRyZWUsdC5sX2Rlc2MubWF4X2NvZGUpLEoodCx0LmR5bl9kdHJlZSx0LmRfZGVzYy5tYXhfY29kZSksWCh0LHQuYmxfZGVzYyksZT1tLTE7ZT49MyYmMD09PXQuYmxfdHJlZVsyKlNbZV0rMV07ZS0tKTtyZXR1cm4gdC5vcHRfbGVuKz0zKihlKzEpKzUrNSs0LGV9KHQpLHU9dC5vcHRfbGVuKzMrNz4+PjMsKGM9dC5zdGF0aWNfbGVuKzMrNz4+PjMpPD11JiYodT1jKSk6dT1jPXIrNSxyKzQ8PXUmJi0xIT09ZT9ldCh0LGUscixuKTp0LnN0cmF0ZWd5PT09aXx8Yz09PXU/KEgodCwoZjw8MSkrKG4/MTowKSwzKSxWKHQsUiwkKSk6KEgodCwobDw8MSkrKG4/MTowKSwzKSxmdW5jdGlvbih0LGUscixuKXt2YXIgaTtmb3IoSCh0LGUtMjU3LDUpLEgodCxyLTEsNSksSCh0LG4tNCw0KSxpPTA7aTxuO2krKylIKHQsdC5ibF90cmVlWzIqU1tpXSsxXSwzKTtRKHQsdC5keW5fbHRyZWUsZS0xKSxRKHQsdC5keW5fZHRyZWUsci0xKX0odCx0LmxfZGVzYy5tYXhfY29kZSsxLHQuZF9kZXNjLm1heF9jb2RlKzEsZCsxKSxWKHQsdC5keW5fbHRyZWUsdC5keW5fZHRyZWUpKSxXKHQpLG4mJlkodCl9LGUuX3RyX3RhbGx5PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdC5wZW5kaW5nX2J1Zlt0LmRfYnVmKzIqdC5sYXN0X2xpdF09ZT4+PjgmMjU1LHQucGVuZGluZ19idWZbdC5kX2J1ZisyKnQubGFzdF9saXQrMV09MjU1JmUsdC5wZW5kaW5nX2J1Zlt0LmxfYnVmK3QubGFzdF9saXRdPTI1NSZyLHQubGFzdF9saXQrKywwPT09ZT90LmR5bl9sdHJlZVsyKnJdKys6KHQubWF0Y2hlcysrLGUtLSx0LmR5bl9sdHJlZVsyKihUW3JdK2grMSldKyssdC5keW5fZHRyZWVbMipEKGUpXSsrKSx0Lmxhc3RfbGl0PT09dC5saXRfYnVmc2l6ZS0xfSxlLl90cl9hbGlnbj1mdW5jdGlvbih0KXtIKHQsZjw8MSwzKSxMKHQsXyxSKSxmdW5jdGlvbih0KXsxNj09PXQuYmlfdmFsaWQ/KHoodCx0LmJpX2J1ZiksdC5iaV9idWY9MCx0LmJpX3ZhbGlkPTApOnQuYmlfdmFsaWQ+PTgmJih0LnBlbmRpbmdfYnVmW3QucGVuZGluZysrXT0yNTUmdC5iaV9idWYsdC5iaV9idWY+Pj04LHQuYmlfdmFsaWQtPTgpfSh0KX19LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxMTIpLGk9cigyNSksbz1yKDgwKSxhPXIoODIpLHM9cig2MyksdT1yKDgxKSxjPXIoMTE1KSxmPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gbCh0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBsKSlyZXR1cm4gbmV3IGwodCk7dGhpcy5vcHRpb25zPWkuYXNzaWduKHtjaHVua1NpemU6MTYzODQsd2luZG93Qml0czowLHRvOiIifSx0fHx7fSk7dmFyIGU9dGhpcy5vcHRpb25zO2UucmF3JiZlLndpbmRvd0JpdHM+PTAmJmUud2luZG93Qml0czwxNiYmKGUud2luZG93Qml0cz0tZS53aW5kb3dCaXRzLDA9PT1lLndpbmRvd0JpdHMmJihlLndpbmRvd0JpdHM9LTE1KSksIShlLndpbmRvd0JpdHM+PTAmJmUud2luZG93Qml0czwxNil8fHQmJnQud2luZG93Qml0c3x8KGUud2luZG93Qml0cys9MzIpLGUud2luZG93Qml0cz4xNSYmZS53aW5kb3dCaXRzPDQ4JiYwPT0oMTUmZS53aW5kb3dCaXRzKSYmKGUud2luZG93Qml0c3w9MTUpLHRoaXMuZXJyPTAsdGhpcy5tc2c9IiIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IHUsdGhpcy5zdHJtLmF2YWlsX291dD0wO3ZhciByPW4uaW5mbGF0ZUluaXQyKHRoaXMuc3RybSxlLndpbmRvd0JpdHMpO2lmKHIhPT1hLlpfT0spdGhyb3cgbmV3IEVycm9yKHNbcl0pO2lmKHRoaXMuaGVhZGVyPW5ldyBjLG4uaW5mbGF0ZUdldEhlYWRlcih0aGlzLnN0cm0sdGhpcy5oZWFkZXIpLGUuZGljdGlvbmFyeSYmKCJzdHJpbmciPT10eXBlb2YgZS5kaWN0aW9uYXJ5P2UuZGljdGlvbmFyeT1vLnN0cmluZzJidWYoZS5kaWN0aW9uYXJ5KToiW29iamVjdCBBcnJheUJ1ZmZlcl0iPT09Zi5jYWxsKGUuZGljdGlvbmFyeSkmJihlLmRpY3Rpb25hcnk9bmV3IFVpbnQ4QXJyYXkoZS5kaWN0aW9uYXJ5KSksZS5yYXcmJihyPW4uaW5mbGF0ZVNldERpY3Rpb25hcnkodGhpcy5zdHJtLGUuZGljdGlvbmFyeSkpIT09YS5aX09LKSl0aHJvdyBuZXcgRXJyb3Ioc1tyXSl9ZnVuY3Rpb24gZCh0LGUpe3ZhciByPW5ldyBsKGUpO2lmKHIucHVzaCh0LCEwKSxyLmVycil0aHJvdyByLm1zZ3x8c1tyLmVycl07cmV0dXJuIHIucmVzdWx0fWwucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24odCxlKXt2YXIgcixzLHUsYyxsLGQ9dGhpcy5zdHJtLGg9dGhpcy5vcHRpb25zLmNodW5rU2l6ZSxwPXRoaXMub3B0aW9ucy5kaWN0aW9uYXJ5LGc9ITE7aWYodGhpcy5lbmRlZClyZXR1cm4hMTtzPWU9PT1+fmU/ZTohMD09PWU/YS5aX0ZJTklTSDphLlpfTk9fRkxVU0gsInN0cmluZyI9PXR5cGVvZiB0P2QuaW5wdXQ9by5iaW5zdHJpbmcyYnVmKHQpOiJbb2JqZWN0IEFycmF5QnVmZmVyXSI9PT1mLmNhbGwodCk/ZC5pbnB1dD1uZXcgVWludDhBcnJheSh0KTpkLmlucHV0PXQsZC5uZXh0X2luPTAsZC5hdmFpbF9pbj1kLmlucHV0Lmxlbmd0aDtkb3tpZigwPT09ZC5hdmFpbF9vdXQmJihkLm91dHB1dD1uZXcgaS5CdWY4KGgpLGQubmV4dF9vdXQ9MCxkLmF2YWlsX291dD1oKSwocj1uLmluZmxhdGUoZCxhLlpfTk9fRkxVU0gpKT09PWEuWl9ORUVEX0RJQ1QmJnAmJihyPW4uaW5mbGF0ZVNldERpY3Rpb25hcnkodGhpcy5zdHJtLHApKSxyPT09YS5aX0JVRl9FUlJPUiYmITA9PT1nJiYocj1hLlpfT0ssZz0hMSksciE9PWEuWl9TVFJFQU1fRU5EJiZyIT09YS5aX09LKXJldHVybiB0aGlzLm9uRW5kKHIpLHRoaXMuZW5kZWQ9ITAsITE7ZC5uZXh0X291dCYmKDAhPT1kLmF2YWlsX291dCYmciE9PWEuWl9TVFJFQU1fRU5EJiYoMCE9PWQuYXZhaWxfaW58fHMhPT1hLlpfRklOSVNIJiZzIT09YS5aX1NZTkNfRkxVU0gpfHwoInN0cmluZyI9PT10aGlzLm9wdGlvbnMudG8/KHU9by51dGY4Ym9yZGVyKGQub3V0cHV0LGQubmV4dF9vdXQpLGM9ZC5uZXh0X291dC11LGw9by5idWYyc3RyaW5nKGQub3V0cHV0LHUpLGQubmV4dF9vdXQ9YyxkLmF2YWlsX291dD1oLWMsYyYmaS5hcnJheVNldChkLm91dHB1dCxkLm91dHB1dCx1LGMsMCksdGhpcy5vbkRhdGEobCkpOnRoaXMub25EYXRhKGkuc2hyaW5rQnVmKGQub3V0cHV0LGQubmV4dF9vdXQpKSkpLDA9PT1kLmF2YWlsX2luJiYwPT09ZC5hdmFpbF9vdXQmJihnPSEwKX13aGlsZSgoZC5hdmFpbF9pbj4wfHwwPT09ZC5hdmFpbF9vdXQpJiZyIT09YS5aX1NUUkVBTV9FTkQpO3JldHVybiByPT09YS5aX1NUUkVBTV9FTkQmJihzPWEuWl9GSU5JU0gpLHM9PT1hLlpfRklOSVNIPyhyPW4uaW5mbGF0ZUVuZCh0aGlzLnN0cm0pLHRoaXMub25FbmQociksdGhpcy5lbmRlZD0hMCxyPT09YS5aX09LKTpzIT09YS5aX1NZTkNfRkxVU0h8fCh0aGlzLm9uRW5kKGEuWl9PSyksZC5hdmFpbF9vdXQ9MCwhMCl9LGwucHJvdG90eXBlLm9uRGF0YT1mdW5jdGlvbih0KXt0aGlzLmNodW5rcy5wdXNoKHQpfSxsLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbih0KXt0PT09YS5aX09LJiYoInN0cmluZyI9PT10aGlzLm9wdGlvbnMudG8/dGhpcy5yZXN1bHQ9dGhpcy5jaHVua3Muam9pbigiIik6dGhpcy5yZXN1bHQ9aS5mbGF0dGVuQ2h1bmtzKHRoaXMuY2h1bmtzKSksdGhpcy5jaHVua3M9W10sdGhpcy5lcnI9dCx0aGlzLm1zZz10aGlzLnN0cm0ubXNnfSxlLkluZmxhdGU9bCxlLmluZmxhdGU9ZCxlLmluZmxhdGVSYXc9ZnVuY3Rpb24odCxlKXtyZXR1cm4oZT1lfHx7fSkucmF3PSEwLGQodCxlKX0sZS51bmd6aXA9ZH0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDI1KSxpPXIoNzgpLG89cig3OSksYT1yKDExMykscz1yKDExNCksdT0wLGM9MSxmPTIsbD00LGQ9NSxoPTYscD0wLGc9MSxtPTIseT0tMix2PS0zLHc9LTQsYj0tNSxfPTgseD0xLEU9MixrPTMsTz00LGo9NSxQPTYsUz03LFI9OCwkPTksQT0xMCxUPTExLEk9MTIsQj0xMyxGPTE0LFU9MTUsTT0xNixDPTE3LE49MTgsRD0xOSx6PTIwLEg9MjEsTD0yMixHPTIzLHE9MjQsVz0yNSxZPTI2LFo9MjcsSz0yOCxWPTI5LFg9MzAsSj0zMSxRPTMyLHR0PTg1MixldD01OTIscnQ9MTU7ZnVuY3Rpb24gbnQodCl7cmV0dXJuKHQ+Pj4yNCYyNTUpKyh0Pj4+OCY2NTI4MCkrKCg2NTI4MCZ0KTw8OCkrKCgyNTUmdCk8PDI0KX1mdW5jdGlvbiBpdCgpe3RoaXMubW9kZT0wLHRoaXMubGFzdD0hMSx0aGlzLndyYXA9MCx0aGlzLmhhdmVkaWN0PSExLHRoaXMuZmxhZ3M9MCx0aGlzLmRtYXg9MCx0aGlzLmNoZWNrPTAsdGhpcy50b3RhbD0wLHRoaXMuaGVhZD1udWxsLHRoaXMud2JpdHM9MCx0aGlzLndzaXplPTAsdGhpcy53aGF2ZT0wLHRoaXMud25leHQ9MCx0aGlzLndpbmRvdz1udWxsLHRoaXMuaG9sZD0wLHRoaXMuYml0cz0wLHRoaXMubGVuZ3RoPTAsdGhpcy5vZmZzZXQ9MCx0aGlzLmV4dHJhPTAsdGhpcy5sZW5jb2RlPW51bGwsdGhpcy5kaXN0Y29kZT1udWxsLHRoaXMubGVuYml0cz0wLHRoaXMuZGlzdGJpdHM9MCx0aGlzLm5jb2RlPTAsdGhpcy5ubGVuPTAsdGhpcy5uZGlzdD0wLHRoaXMuaGF2ZT0wLHRoaXMubmV4dD1udWxsLHRoaXMubGVucz1uZXcgbi5CdWYxNigzMjApLHRoaXMud29yaz1uZXcgbi5CdWYxNigyODgpLHRoaXMubGVuZHluPW51bGwsdGhpcy5kaXN0ZHluPW51bGwsdGhpcy5zYW5lPTAsdGhpcy5iYWNrPTAsdGhpcy53YXM9MH1mdW5jdGlvbiBvdCh0KXt2YXIgZTtyZXR1cm4gdCYmdC5zdGF0ZT8oZT10LnN0YXRlLHQudG90YWxfaW49dC50b3RhbF9vdXQ9ZS50b3RhbD0wLHQubXNnPSIiLGUud3JhcCYmKHQuYWRsZXI9MSZlLndyYXApLGUubW9kZT14LGUubGFzdD0wLGUuaGF2ZWRpY3Q9MCxlLmRtYXg9MzI3NjgsZS5oZWFkPW51bGwsZS5ob2xkPTAsZS5iaXRzPTAsZS5sZW5jb2RlPWUubGVuZHluPW5ldyBuLkJ1ZjMyKHR0KSxlLmRpc3Rjb2RlPWUuZGlzdGR5bj1uZXcgbi5CdWYzMihldCksZS5zYW5lPTEsZS5iYWNrPS0xLHApOnl9ZnVuY3Rpb24gYXQodCl7dmFyIGU7cmV0dXJuIHQmJnQuc3RhdGU/KChlPXQuc3RhdGUpLndzaXplPTAsZS53aGF2ZT0wLGUud25leHQ9MCxvdCh0KSk6eX1mdW5jdGlvbiBzdCh0LGUpe3ZhciByLG47cmV0dXJuIHQmJnQuc3RhdGU/KG49dC5zdGF0ZSxlPDA/KHI9MCxlPS1lKToocj0xKyhlPj40KSxlPDQ4JiYoZSY9MTUpKSxlJiYoZTw4fHxlPjE1KT95OihudWxsIT09bi53aW5kb3cmJm4ud2JpdHMhPT1lJiYobi53aW5kb3c9bnVsbCksbi53cmFwPXIsbi53Yml0cz1lLGF0KHQpKSk6eX1mdW5jdGlvbiB1dCh0LGUpe3ZhciByLG47cmV0dXJuIHQ/KG49bmV3IGl0LHQuc3RhdGU9bixuLndpbmRvdz1udWxsLChyPXN0KHQsZSkpIT09cCYmKHQuc3RhdGU9bnVsbCkscik6eX12YXIgY3QsZnQsbHQ9ITA7ZnVuY3Rpb24gZHQodCl7aWYobHQpe3ZhciBlO2ZvcihjdD1uZXcgbi5CdWYzMig1MTIpLGZ0PW5ldyBuLkJ1ZjMyKDMyKSxlPTA7ZTwxNDQ7KXQubGVuc1tlKytdPTg7Zm9yKDtlPDI1NjspdC5sZW5zW2UrK109OTtmb3IoO2U8MjgwOyl0LmxlbnNbZSsrXT03O2Zvcig7ZTwyODg7KXQubGVuc1tlKytdPTg7Zm9yKHMoYyx0LmxlbnMsMCwyODgsY3QsMCx0Lndvcmsse2JpdHM6OX0pLGU9MDtlPDMyOyl0LmxlbnNbZSsrXT01O3MoZix0LmxlbnMsMCwzMixmdCwwLHQud29yayx7Yml0czo1fSksbHQ9ITF9dC5sZW5jb2RlPWN0LHQubGVuYml0cz05LHQuZGlzdGNvZGU9ZnQsdC5kaXN0Yml0cz01fWZ1bmN0aW9uIGh0KHQsZSxyLGkpe3ZhciBvLGE9dC5zdGF0ZTtyZXR1cm4gbnVsbD09PWEud2luZG93JiYoYS53c2l6ZT0xPDxhLndiaXRzLGEud25leHQ9MCxhLndoYXZlPTAsYS53aW5kb3c9bmV3IG4uQnVmOChhLndzaXplKSksaT49YS53c2l6ZT8obi5hcnJheVNldChhLndpbmRvdyxlLHItYS53c2l6ZSxhLndzaXplLDApLGEud25leHQ9MCxhLndoYXZlPWEud3NpemUpOigobz1hLndzaXplLWEud25leHQpPmkmJihvPWkpLG4uYXJyYXlTZXQoYS53aW5kb3csZSxyLWksbyxhLnduZXh0KSwoaS09byk/KG4uYXJyYXlTZXQoYS53aW5kb3csZSxyLWksaSwwKSxhLnduZXh0PWksYS53aGF2ZT1hLndzaXplKTooYS53bmV4dCs9byxhLnduZXh0PT09YS53c2l6ZSYmKGEud25leHQ9MCksYS53aGF2ZTxhLndzaXplJiYoYS53aGF2ZSs9bykpKSwwfWUuaW5mbGF0ZVJlc2V0PWF0LGUuaW5mbGF0ZVJlc2V0Mj1zdCxlLmluZmxhdGVSZXNldEtlZXA9b3QsZS5pbmZsYXRlSW5pdD1mdW5jdGlvbih0KXtyZXR1cm4gdXQodCxydCl9LGUuaW5mbGF0ZUluaXQyPXV0LGUuaW5mbGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByLHR0LGV0LHJ0LGl0LG90LGF0LHN0LHV0LGN0LGZ0LGx0LHB0LGd0LG10LHl0LHZ0LHd0LGJ0LF90LHh0LEV0LGt0LE90LGp0PTAsUHQ9bmV3IG4uQnVmOCg0KSxTdD1bMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV07aWYoIXR8fCF0LnN0YXRlfHwhdC5vdXRwdXR8fCF0LmlucHV0JiYwIT09dC5hdmFpbF9pbilyZXR1cm4geTsocj10LnN0YXRlKS5tb2RlPT09SSYmKHIubW9kZT1CKSxpdD10Lm5leHRfb3V0LGV0PXQub3V0cHV0LGF0PXQuYXZhaWxfb3V0LHJ0PXQubmV4dF9pbix0dD10LmlucHV0LG90PXQuYXZhaWxfaW4sc3Q9ci5ob2xkLHV0PXIuYml0cyxjdD1vdCxmdD1hdCxFdD1wO3Q6Zm9yKDs7KXN3aXRjaChyLm1vZGUpe2Nhc2UgeDppZigwPT09ci53cmFwKXtyLm1vZGU9QjticmVha31mb3IoO3V0PDE2Oyl7aWYoMD09PW90KWJyZWFrIHQ7b3QtLSxzdCs9dHRbcnQrK108PHV0LHV0Kz04fWlmKDImci53cmFwJiYzNTYxNT09PXN0KXtyLmNoZWNrPTAsUHRbMF09MjU1JnN0LFB0WzFdPXN0Pj4+OCYyNTUsci5jaGVjaz1vKHIuY2hlY2ssUHQsMiwwKSxzdD0wLHV0PTAsci5tb2RlPUU7YnJlYWt9aWYoci5mbGFncz0wLHIuaGVhZCYmKHIuaGVhZC5kb25lPSExKSwhKDEmci53cmFwKXx8KCgoMjU1JnN0KTw8OCkrKHN0Pj44KSklMzEpe3QubXNnPSJpbmNvcnJlY3QgaGVhZGVyIGNoZWNrIixyLm1vZGU9WDticmVha31pZigoMTUmc3QpIT09Xyl7dC5tc2c9InVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIixyLm1vZGU9WDticmVha31pZih1dC09NCx4dD04KygxNSYoc3Q+Pj49NCkpLDA9PT1yLndiaXRzKXIud2JpdHM9eHQ7ZWxzZSBpZih4dD5yLndiaXRzKXt0Lm1zZz0iaW52YWxpZCB3aW5kb3cgc2l6ZSIsci5tb2RlPVg7YnJlYWt9ci5kbWF4PTE8PHh0LHQuYWRsZXI9ci5jaGVjaz0xLHIubW9kZT01MTImc3Q/QTpJLHN0PTAsdXQ9MDticmVhaztjYXNlIEU6Zm9yKDt1dDwxNjspe2lmKDA9PT1vdClicmVhayB0O290LS0sc3QrPXR0W3J0KytdPDx1dCx1dCs9OH1pZihyLmZsYWdzPXN0LCgyNTUmci5mbGFncykhPT1fKXt0Lm1zZz0idW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QiLHIubW9kZT1YO2JyZWFrfWlmKDU3MzQ0JnIuZmxhZ3Mpe3QubXNnPSJ1bmtub3duIGhlYWRlciBmbGFncyBzZXQiLHIubW9kZT1YO2JyZWFrfXIuaGVhZCYmKHIuaGVhZC50ZXh0PXN0Pj44JjEpLDUxMiZyLmZsYWdzJiYoUHRbMF09MjU1JnN0LFB0WzFdPXN0Pj4+OCYyNTUsci5jaGVjaz1vKHIuY2hlY2ssUHQsMiwwKSksc3Q9MCx1dD0wLHIubW9kZT1rO2Nhc2Ugazpmb3IoO3V0PDMyOyl7aWYoMD09PW90KWJyZWFrIHQ7b3QtLSxzdCs9dHRbcnQrK108PHV0LHV0Kz04fXIuaGVhZCYmKHIuaGVhZC50aW1lPXN0KSw1MTImci5mbGFncyYmKFB0WzBdPTI1NSZzdCxQdFsxXT1zdD4+PjgmMjU1LFB0WzJdPXN0Pj4+MTYmMjU1LFB0WzNdPXN0Pj4+MjQmMjU1LHIuY2hlY2s9byhyLmNoZWNrLFB0LDQsMCkpLHN0PTAsdXQ9MCxyLm1vZGU9TztjYXNlIE86Zm9yKDt1dDwxNjspe2lmKDA9PT1vdClicmVhayB0O290LS0sc3QrPXR0W3J0KytdPDx1dCx1dCs9OH1yLmhlYWQmJihyLmhlYWQueGZsYWdzPTI1NSZzdCxyLmhlYWQub3M9c3Q+PjgpLDUxMiZyLmZsYWdzJiYoUHRbMF09MjU1JnN0LFB0WzFdPXN0Pj4+OCYyNTUsci5jaGVjaz1vKHIuY2hlY2ssUHQsMiwwKSksc3Q9MCx1dD0wLHIubW9kZT1qO2Nhc2UgajppZigxMDI0JnIuZmxhZ3Mpe2Zvcig7dXQ8MTY7KXtpZigwPT09b3QpYnJlYWsgdDtvdC0tLHN0Kz10dFtydCsrXTw8dXQsdXQrPTh9ci5sZW5ndGg9c3Qsci5oZWFkJiYoci5oZWFkLmV4dHJhX2xlbj1zdCksNTEyJnIuZmxhZ3MmJihQdFswXT0yNTUmc3QsUHRbMV09c3Q+Pj44JjI1NSxyLmNoZWNrPW8oci5jaGVjayxQdCwyLDApKSxzdD0wLHV0PTB9ZWxzZSByLmhlYWQmJihyLmhlYWQuZXh0cmE9bnVsbCk7ci5tb2RlPVA7Y2FzZSBQOmlmKDEwMjQmci5mbGFncyYmKChsdD1yLmxlbmd0aCk+b3QmJihsdD1vdCksbHQmJihyLmhlYWQmJih4dD1yLmhlYWQuZXh0cmFfbGVuLXIubGVuZ3RoLHIuaGVhZC5leHRyYXx8KHIuaGVhZC5leHRyYT1uZXcgQXJyYXkoci5oZWFkLmV4dHJhX2xlbikpLG4uYXJyYXlTZXQoci5oZWFkLmV4dHJhLHR0LHJ0LGx0LHh0KSksNTEyJnIuZmxhZ3MmJihyLmNoZWNrPW8oci5jaGVjayx0dCxsdCxydCkpLG90LT1sdCxydCs9bHQsci5sZW5ndGgtPWx0KSxyLmxlbmd0aCkpYnJlYWsgdDtyLmxlbmd0aD0wLHIubW9kZT1TO2Nhc2UgUzppZigyMDQ4JnIuZmxhZ3Mpe2lmKDA9PT1vdClicmVhayB0O2x0PTA7ZG97eHQ9dHRbcnQrbHQrK10sci5oZWFkJiZ4dCYmci5sZW5ndGg8NjU1MzYmJihyLmhlYWQubmFtZSs9U3RyaW5nLmZyb21DaGFyQ29kZSh4dCkpfXdoaWxlKHh0JiZsdDxvdCk7aWYoNTEyJnIuZmxhZ3MmJihyLmNoZWNrPW8oci5jaGVjayx0dCxsdCxydCkpLG90LT1sdCxydCs9bHQseHQpYnJlYWsgdH1lbHNlIHIuaGVhZCYmKHIuaGVhZC5uYW1lPW51bGwpO3IubGVuZ3RoPTAsci5tb2RlPVI7Y2FzZSBSOmlmKDQwOTYmci5mbGFncyl7aWYoMD09PW90KWJyZWFrIHQ7bHQ9MDtkb3t4dD10dFtydCtsdCsrXSxyLmhlYWQmJnh0JiZyLmxlbmd0aDw2NTUzNiYmKHIuaGVhZC5jb21tZW50Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKHh0KSl9d2hpbGUoeHQmJmx0PG90KTtpZig1MTImci5mbGFncyYmKHIuY2hlY2s9byhyLmNoZWNrLHR0LGx0LHJ0KSksb3QtPWx0LHJ0Kz1sdCx4dClicmVhayB0fWVsc2Ugci5oZWFkJiYoci5oZWFkLmNvbW1lbnQ9bnVsbCk7ci5tb2RlPSQ7Y2FzZSAkOmlmKDUxMiZyLmZsYWdzKXtmb3IoO3V0PDE2Oyl7aWYoMD09PW90KWJyZWFrIHQ7b3QtLSxzdCs9dHRbcnQrK108PHV0LHV0Kz04fWlmKHN0IT09KDY1NTM1JnIuY2hlY2spKXt0Lm1zZz0iaGVhZGVyIGNyYyBtaXNtYXRjaCIsci5tb2RlPVg7YnJlYWt9c3Q9MCx1dD0wfXIuaGVhZCYmKHIuaGVhZC5oY3JjPXIuZmxhZ3M+PjkmMSxyLmhlYWQuZG9uZT0hMCksdC5hZGxlcj1yLmNoZWNrPTAsci5tb2RlPUk7YnJlYWs7Y2FzZSBBOmZvcig7dXQ8MzI7KXtpZigwPT09b3QpYnJlYWsgdDtvdC0tLHN0Kz10dFtydCsrXTw8dXQsdXQrPTh9dC5hZGxlcj1yLmNoZWNrPW50KHN0KSxzdD0wLHV0PTAsci5tb2RlPVQ7Y2FzZSBUOmlmKDA9PT1yLmhhdmVkaWN0KXJldHVybiB0Lm5leHRfb3V0PWl0LHQuYXZhaWxfb3V0PWF0LHQubmV4dF9pbj1ydCx0LmF2YWlsX2luPW90LHIuaG9sZD1zdCxyLmJpdHM9dXQsbTt0LmFkbGVyPXIuY2hlY2s9MSxyLm1vZGU9STtjYXNlIEk6aWYoZT09PWR8fGU9PT1oKWJyZWFrIHQ7Y2FzZSBCOmlmKHIubGFzdCl7c3Q+Pj49NyZ1dCx1dC09NyZ1dCxyLm1vZGU9WjticmVha31mb3IoO3V0PDM7KXtpZigwPT09b3QpYnJlYWsgdDtvdC0tLHN0Kz10dFtydCsrXTw8dXQsdXQrPTh9c3dpdGNoKHIubGFzdD0xJnN0LHV0LT0xLDMmKHN0Pj4+PTEpKXtjYXNlIDA6ci5tb2RlPUY7YnJlYWs7Y2FzZSAxOmlmKGR0KHIpLHIubW9kZT16LGU9PT1oKXtzdD4+Pj0yLHV0LT0yO2JyZWFrIHR9YnJlYWs7Y2FzZSAyOnIubW9kZT1DO2JyZWFrO2Nhc2UgMzp0Lm1zZz0iaW52YWxpZCBibG9jayB0eXBlIixyLm1vZGU9WH1zdD4+Pj0yLHV0LT0yO2JyZWFrO2Nhc2UgRjpmb3Ioc3Q+Pj49NyZ1dCx1dC09NyZ1dDt1dDwzMjspe2lmKDA9PT1vdClicmVhayB0O290LS0sc3QrPXR0W3J0KytdPDx1dCx1dCs9OH1pZigoNjU1MzUmc3QpIT0oc3Q+Pj4xNl42NTUzNSkpe3QubXNnPSJpbnZhbGlkIHN0b3JlZCBibG9jayBsZW5ndGhzIixyLm1vZGU9WDticmVha31pZihyLmxlbmd0aD02NTUzNSZzdCxzdD0wLHV0PTAsci5tb2RlPVUsZT09PWgpYnJlYWsgdDtjYXNlIFU6ci5tb2RlPU07Y2FzZSBNOmlmKGx0PXIubGVuZ3RoKXtpZihsdD5vdCYmKGx0PW90KSxsdD5hdCYmKGx0PWF0KSwwPT09bHQpYnJlYWsgdDtuLmFycmF5U2V0KGV0LHR0LHJ0LGx0LGl0KSxvdC09bHQscnQrPWx0LGF0LT1sdCxpdCs9bHQsci5sZW5ndGgtPWx0O2JyZWFrfXIubW9kZT1JO2JyZWFrO2Nhc2UgQzpmb3IoO3V0PDE0Oyl7aWYoMD09PW90KWJyZWFrIHQ7b3QtLSxzdCs9dHRbcnQrK108PHV0LHV0Kz04fWlmKHIubmxlbj0yNTcrKDMxJnN0KSxzdD4+Pj01LHV0LT01LHIubmRpc3Q9MSsoMzEmc3QpLHN0Pj4+PTUsdXQtPTUsci5uY29kZT00KygxNSZzdCksc3Q+Pj49NCx1dC09NCxyLm5sZW4+Mjg2fHxyLm5kaXN0PjMwKXt0Lm1zZz0idG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHMiLHIubW9kZT1YO2JyZWFrfXIuaGF2ZT0wLHIubW9kZT1OO2Nhc2UgTjpmb3IoO3IuaGF2ZTxyLm5jb2RlOyl7Zm9yKDt1dDwzOyl7aWYoMD09PW90KWJyZWFrIHQ7b3QtLSxzdCs9dHRbcnQrK108PHV0LHV0Kz04fXIubGVuc1tTdFtyLmhhdmUrK11dPTcmc3Qsc3Q+Pj49Myx1dC09M31mb3IoO3IuaGF2ZTwxOTspci5sZW5zW1N0W3IuaGF2ZSsrXV09MDtpZihyLmxlbmNvZGU9ci5sZW5keW4sci5sZW5iaXRzPTcsa3Q9e2JpdHM6ci5sZW5iaXRzfSxFdD1zKHUsci5sZW5zLDAsMTksci5sZW5jb2RlLDAsci53b3JrLGt0KSxyLmxlbmJpdHM9a3QuYml0cyxFdCl7dC5tc2c9ImludmFsaWQgY29kZSBsZW5ndGhzIHNldCIsci5tb2RlPVg7YnJlYWt9ci5oYXZlPTAsci5tb2RlPUQ7Y2FzZSBEOmZvcig7ci5oYXZlPHIubmxlbityLm5kaXN0Oyl7Zm9yKDt5dD0oanQ9ci5sZW5jb2RlW3N0JigxPDxyLmxlbmJpdHMpLTFdKT4+PjE2JjI1NSx2dD02NTUzNSZqdCwhKChtdD1qdD4+PjI0KTw9dXQpOyl7aWYoMD09PW90KWJyZWFrIHQ7b3QtLSxzdCs9dHRbcnQrK108PHV0LHV0Kz04fWlmKHZ0PDE2KXN0Pj4+PW10LHV0LT1tdCxyLmxlbnNbci5oYXZlKytdPXZ0O2Vsc2V7aWYoMTY9PT12dCl7Zm9yKE90PW10KzI7dXQ8T3Q7KXtpZigwPT09b3QpYnJlYWsgdDtvdC0tLHN0Kz10dFtydCsrXTw8dXQsdXQrPTh9aWYoc3Q+Pj49bXQsdXQtPW10LDA9PT1yLmhhdmUpe3QubXNnPSJpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0IixyLm1vZGU9WDticmVha314dD1yLmxlbnNbci5oYXZlLTFdLGx0PTMrKDMmc3QpLHN0Pj4+PTIsdXQtPTJ9ZWxzZSBpZigxNz09PXZ0KXtmb3IoT3Q9bXQrMzt1dDxPdDspe2lmKDA9PT1vdClicmVhayB0O290LS0sc3QrPXR0W3J0KytdPDx1dCx1dCs9OH11dC09bXQseHQ9MCxsdD0zKyg3JihzdD4+Pj1tdCkpLHN0Pj4+PTMsdXQtPTN9ZWxzZXtmb3IoT3Q9bXQrNzt1dDxPdDspe2lmKDA9PT1vdClicmVhayB0O290LS0sc3QrPXR0W3J0KytdPDx1dCx1dCs9OH11dC09bXQseHQ9MCxsdD0xMSsoMTI3JihzdD4+Pj1tdCkpLHN0Pj4+PTcsdXQtPTd9aWYoci5oYXZlK2x0PnIubmxlbityLm5kaXN0KXt0Lm1zZz0iaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCIsci5tb2RlPVg7YnJlYWt9Zm9yKDtsdC0tOylyLmxlbnNbci5oYXZlKytdPXh0fX1pZihyLm1vZGU9PT1YKWJyZWFrO2lmKDA9PT1yLmxlbnNbMjU2XSl7dC5tc2c9ImludmFsaWQgY29kZSAtLSBtaXNzaW5nIGVuZC1vZi1ibG9jayIsci5tb2RlPVg7YnJlYWt9aWYoci5sZW5iaXRzPTksa3Q9e2JpdHM6ci5sZW5iaXRzfSxFdD1zKGMsci5sZW5zLDAsci5ubGVuLHIubGVuY29kZSwwLHIud29yayxrdCksci5sZW5iaXRzPWt0LmJpdHMsRXQpe3QubXNnPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RocyBzZXQiLHIubW9kZT1YO2JyZWFrfWlmKHIuZGlzdGJpdHM9NixyLmRpc3Rjb2RlPXIuZGlzdGR5bixrdD17Yml0czpyLmRpc3RiaXRzfSxFdD1zKGYsci5sZW5zLHIubmxlbixyLm5kaXN0LHIuZGlzdGNvZGUsMCxyLndvcmssa3QpLHIuZGlzdGJpdHM9a3QuYml0cyxFdCl7dC5tc2c9ImludmFsaWQgZGlzdGFuY2VzIHNldCIsci5tb2RlPVg7YnJlYWt9aWYoci5tb2RlPXosZT09PWgpYnJlYWsgdDtjYXNlIHo6ci5tb2RlPUg7Y2FzZSBIOmlmKG90Pj02JiZhdD49MjU4KXt0Lm5leHRfb3V0PWl0LHQuYXZhaWxfb3V0PWF0LHQubmV4dF9pbj1ydCx0LmF2YWlsX2luPW90LHIuaG9sZD1zdCxyLmJpdHM9dXQsYSh0LGZ0KSxpdD10Lm5leHRfb3V0LGV0PXQub3V0cHV0LGF0PXQuYXZhaWxfb3V0LHJ0PXQubmV4dF9pbix0dD10LmlucHV0LG90PXQuYXZhaWxfaW4sc3Q9ci5ob2xkLHV0PXIuYml0cyxyLm1vZGU9PT1JJiYoci5iYWNrPS0xKTticmVha31mb3Ioci5iYWNrPTA7eXQ9KGp0PXIubGVuY29kZVtzdCYoMTw8ci5sZW5iaXRzKS0xXSk+Pj4xNiYyNTUsdnQ9NjU1MzUmanQsISgobXQ9anQ+Pj4yNCk8PXV0KTspe2lmKDA9PT1vdClicmVhayB0O290LS0sc3QrPXR0W3J0KytdPDx1dCx1dCs9OH1pZih5dCYmMD09KDI0MCZ5dCkpe2Zvcih3dD1tdCxidD15dCxfdD12dDt5dD0oanQ9ci5sZW5jb2RlW190Kygoc3QmKDE8PHd0K2J0KS0xKT4+d3QpXSk+Pj4xNiYyNTUsdnQ9NjU1MzUmanQsISh3dCsobXQ9anQ+Pj4yNCk8PXV0KTspe2lmKDA9PT1vdClicmVhayB0O290LS0sc3QrPXR0W3J0KytdPDx1dCx1dCs9OH1zdD4+Pj13dCx1dC09d3Qsci5iYWNrKz13dH1pZihzdD4+Pj1tdCx1dC09bXQsci5iYWNrKz1tdCxyLmxlbmd0aD12dCwwPT09eXQpe3IubW9kZT1ZO2JyZWFrfWlmKDMyJnl0KXtyLmJhY2s9LTEsci5tb2RlPUk7YnJlYWt9aWYoNjQmeXQpe3QubXNnPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUiLHIubW9kZT1YO2JyZWFrfXIuZXh0cmE9MTUmeXQsci5tb2RlPUw7Y2FzZSBMOmlmKHIuZXh0cmEpe2ZvcihPdD1yLmV4dHJhO3V0PE90Oyl7aWYoMD09PW90KWJyZWFrIHQ7b3QtLSxzdCs9dHRbcnQrK108PHV0LHV0Kz04fXIubGVuZ3RoKz1zdCYoMTw8ci5leHRyYSktMSxzdD4+Pj1yLmV4dHJhLHV0LT1yLmV4dHJhLHIuYmFjays9ci5leHRyYX1yLndhcz1yLmxlbmd0aCxyLm1vZGU9RztjYXNlIEc6Zm9yKDt5dD0oanQ9ci5kaXN0Y29kZVtzdCYoMTw8ci5kaXN0Yml0cyktMV0pPj4+MTYmMjU1LHZ0PTY1NTM1Jmp0LCEoKG10PWp0Pj4+MjQpPD11dCk7KXtpZigwPT09b3QpYnJlYWsgdDtvdC0tLHN0Kz10dFtydCsrXTw8dXQsdXQrPTh9aWYoMD09KDI0MCZ5dCkpe2Zvcih3dD1tdCxidD15dCxfdD12dDt5dD0oanQ9ci5kaXN0Y29kZVtfdCsoKHN0JigxPDx3dCtidCktMSk+Pnd0KV0pPj4+MTYmMjU1LHZ0PTY1NTM1Jmp0LCEod3QrKG10PWp0Pj4+MjQpPD11dCk7KXtpZigwPT09b3QpYnJlYWsgdDtvdC0tLHN0Kz10dFtydCsrXTw8dXQsdXQrPTh9c3Q+Pj49d3QsdXQtPXd0LHIuYmFjays9d3R9aWYoc3Q+Pj49bXQsdXQtPW10LHIuYmFjays9bXQsNjQmeXQpe3QubXNnPSJpbnZhbGlkIGRpc3RhbmNlIGNvZGUiLHIubW9kZT1YO2JyZWFrfXIub2Zmc2V0PXZ0LHIuZXh0cmE9MTUmeXQsci5tb2RlPXE7Y2FzZSBxOmlmKHIuZXh0cmEpe2ZvcihPdD1yLmV4dHJhO3V0PE90Oyl7aWYoMD09PW90KWJyZWFrIHQ7b3QtLSxzdCs9dHRbcnQrK108PHV0LHV0Kz04fXIub2Zmc2V0Kz1zdCYoMTw8ci5leHRyYSktMSxzdD4+Pj1yLmV4dHJhLHV0LT1yLmV4dHJhLHIuYmFjays9ci5leHRyYX1pZihyLm9mZnNldD5yLmRtYXgpe3QubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsci5tb2RlPVg7YnJlYWt9ci5tb2RlPVc7Y2FzZSBXOmlmKDA9PT1hdClicmVhayB0O2lmKGx0PWZ0LWF0LHIub2Zmc2V0Pmx0KXtpZigobHQ9ci5vZmZzZXQtbHQpPnIud2hhdmUmJnIuc2FuZSl7dC5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixyLm1vZGU9WDticmVha31sdD5yLnduZXh0PyhsdC09ci53bmV4dCxwdD1yLndzaXplLWx0KTpwdD1yLnduZXh0LWx0LGx0PnIubGVuZ3RoJiYobHQ9ci5sZW5ndGgpLGd0PXIud2luZG93fWVsc2UgZ3Q9ZXQscHQ9aXQtci5vZmZzZXQsbHQ9ci5sZW5ndGg7bHQ+YXQmJihsdD1hdCksYXQtPWx0LHIubGVuZ3RoLT1sdDtkb3tldFtpdCsrXT1ndFtwdCsrXX13aGlsZSgtLWx0KTswPT09ci5sZW5ndGgmJihyLm1vZGU9SCk7YnJlYWs7Y2FzZSBZOmlmKDA9PT1hdClicmVhayB0O2V0W2l0KytdPXIubGVuZ3RoLGF0LS0sci5tb2RlPUg7YnJlYWs7Y2FzZSBaOmlmKHIud3JhcCl7Zm9yKDt1dDwzMjspe2lmKDA9PT1vdClicmVhayB0O290LS0sc3R8PXR0W3J0KytdPDx1dCx1dCs9OH1pZihmdC09YXQsdC50b3RhbF9vdXQrPWZ0LHIudG90YWwrPWZ0LGZ0JiYodC5hZGxlcj1yLmNoZWNrPXIuZmxhZ3M/byhyLmNoZWNrLGV0LGZ0LGl0LWZ0KTppKHIuY2hlY2ssZXQsZnQsaXQtZnQpKSxmdD1hdCwoci5mbGFncz9zdDpudChzdCkpIT09ci5jaGVjayl7dC5tc2c9ImluY29ycmVjdCBkYXRhIGNoZWNrIixyLm1vZGU9WDticmVha31zdD0wLHV0PTB9ci5tb2RlPUs7Y2FzZSBLOmlmKHIud3JhcCYmci5mbGFncyl7Zm9yKDt1dDwzMjspe2lmKDA9PT1vdClicmVhayB0O290LS0sc3QrPXR0W3J0KytdPDx1dCx1dCs9OH1pZihzdCE9PSg0Mjk0OTY3Mjk1JnIudG90YWwpKXt0Lm1zZz0iaW5jb3JyZWN0IGxlbmd0aCBjaGVjayIsci5tb2RlPVg7YnJlYWt9c3Q9MCx1dD0wfXIubW9kZT1WO2Nhc2UgVjpFdD1nO2JyZWFrIHQ7Y2FzZSBYOkV0PXY7YnJlYWsgdDtjYXNlIEo6cmV0dXJuIHc7Y2FzZSBROmRlZmF1bHQ6cmV0dXJuIHl9cmV0dXJuIHQubmV4dF9vdXQ9aXQsdC5hdmFpbF9vdXQ9YXQsdC5uZXh0X2luPXJ0LHQuYXZhaWxfaW49b3Qsci5ob2xkPXN0LHIuYml0cz11dCwoci53c2l6ZXx8ZnQhPT10LmF2YWlsX291dCYmci5tb2RlPFgmJihyLm1vZGU8Wnx8ZSE9PWwpKSYmaHQodCx0Lm91dHB1dCx0Lm5leHRfb3V0LGZ0LXQuYXZhaWxfb3V0KT8oci5tb2RlPUosdyk6KGN0LT10LmF2YWlsX2luLGZ0LT10LmF2YWlsX291dCx0LnRvdGFsX2luKz1jdCx0LnRvdGFsX291dCs9ZnQsci50b3RhbCs9ZnQsci53cmFwJiZmdCYmKHQuYWRsZXI9ci5jaGVjaz1yLmZsYWdzP28oci5jaGVjayxldCxmdCx0Lm5leHRfb3V0LWZ0KTppKHIuY2hlY2ssZXQsZnQsdC5uZXh0X291dC1mdCkpLHQuZGF0YV90eXBlPXIuYml0cysoci5sYXN0PzY0OjApKyhyLm1vZGU9PT1JPzEyODowKSsoci5tb2RlPT09enx8ci5tb2RlPT09VT8yNTY6MCksKDA9PT1jdCYmMD09PWZ0fHxlPT09bCkmJkV0PT09cCYmKEV0PWIpLEV0KX0sZS5pbmZsYXRlRW5kPWZ1bmN0aW9uKHQpe2lmKCF0fHwhdC5zdGF0ZSlyZXR1cm4geTt2YXIgZT10LnN0YXRlO3JldHVybiBlLndpbmRvdyYmKGUud2luZG93PW51bGwpLHQuc3RhdGU9bnVsbCxwfSxlLmluZmxhdGVHZXRIZWFkZXI9ZnVuY3Rpb24odCxlKXt2YXIgcjtyZXR1cm4gdCYmdC5zdGF0ZT8wPT0oMiYocj10LnN0YXRlKS53cmFwKT95OihyLmhlYWQ9ZSxlLmRvbmU9ITEscCk6eX0sZS5pbmZsYXRlU2V0RGljdGlvbmFyeT1mdW5jdGlvbih0LGUpe3ZhciByLG49ZS5sZW5ndGg7cmV0dXJuIHQmJnQuc3RhdGU/MCE9PShyPXQuc3RhdGUpLndyYXAmJnIubW9kZSE9PVQ/eTpyLm1vZGU9PT1UJiZpKDEsZSxuLDApIT09ci5jaGVjaz92Omh0KHQsZSxuLG4pPyhyLm1vZGU9Six3KTooci5oYXZlZGljdD0xLHApOnl9LGUuaW5mbGF0ZUluZm89InBha28gaW5mbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdCkifSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxvLGEscyx1LGMsZixsLGQsaCxwLGcsbSx5LHYsdyxiLF8seCxFLGssTyxqO3I9dC5zdGF0ZSxuPXQubmV4dF9pbixPPXQuaW5wdXQsaT1uKyh0LmF2YWlsX2luLTUpLG89dC5uZXh0X291dCxqPXQub3V0cHV0LGE9by0oZS10LmF2YWlsX291dCkscz1vKyh0LmF2YWlsX291dC0yNTcpLHU9ci5kbWF4LGM9ci53c2l6ZSxmPXIud2hhdmUsbD1yLnduZXh0LGQ9ci53aW5kb3csaD1yLmhvbGQscD1yLmJpdHMsZz1yLmxlbmNvZGUsbT1yLmRpc3Rjb2RlLHk9KDE8PHIubGVuYml0cyktMSx2PSgxPDxyLmRpc3RiaXRzKS0xO3Q6ZG97cDwxNSYmKGgrPU9bbisrXTw8cCxwKz04LGgrPU9bbisrXTw8cCxwKz04KSx3PWdbaCZ5XTtlOmZvcig7Oyl7aWYoaD4+Pj1iPXc+Pj4yNCxwLT1iLDA9PT0oYj13Pj4+MTYmMjU1KSlqW28rK109NjU1MzUmdztlbHNle2lmKCEoMTYmYikpe2lmKDA9PSg2NCZiKSl7dz1nWyg2NTUzNSZ3KSsoaCYoMTw8YiktMSldO2NvbnRpbnVlIGV9aWYoMzImYil7ci5tb2RlPTEyO2JyZWFrIHR9dC5tc2c9ImludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZSIsci5tb2RlPTMwO2JyZWFrIHR9Xz02NTUzNSZ3LChiJj0xNSkmJihwPGImJihoKz1PW24rK108PHAscCs9OCksXys9aCYoMTw8YiktMSxoPj4+PWIscC09YikscDwxNSYmKGgrPU9bbisrXTw8cCxwKz04LGgrPU9bbisrXTw8cCxwKz04KSx3PW1baCZ2XTtyOmZvcig7Oyl7aWYoaD4+Pj1iPXc+Pj4yNCxwLT1iLCEoMTYmKGI9dz4+PjE2JjI1NSkpKXtpZigwPT0oNjQmYikpe3c9bVsoNjU1MzUmdykrKGgmKDE8PGIpLTEpXTtjb250aW51ZSByfXQubXNnPSJpbnZhbGlkIGRpc3RhbmNlIGNvZGUiLHIubW9kZT0zMDticmVhayB0fWlmKHg9NjU1MzUmdyxwPChiJj0xNSkmJihoKz1PW24rK108PHAsKHArPTgpPGImJihoKz1PW24rK108PHAscCs9OCkpLCh4Kz1oJigxPDxiKS0xKT51KXt0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLHIubW9kZT0zMDticmVhayB0fWlmKGg+Pj49YixwLT1iLHg+KGI9by1hKSl7aWYoKGI9eC1iKT5mJiZyLnNhbmUpe3QubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsci5tb2RlPTMwO2JyZWFrIHR9aWYoRT0wLGs9ZCwwPT09bCl7aWYoRSs9Yy1iLGI8Xyl7Xy09Yjtkb3tqW28rK109ZFtFKytdfXdoaWxlKC0tYik7RT1vLXgsaz1qfX1lbHNlIGlmKGw8Yil7aWYoRSs9YytsLWIsKGItPWwpPF8pe18tPWI7ZG97altvKytdPWRbRSsrXX13aGlsZSgtLWIpO2lmKEU9MCxsPF8pe18tPWI9bDtkb3tqW28rK109ZFtFKytdfXdoaWxlKC0tYik7RT1vLXgsaz1qfX19ZWxzZSBpZihFKz1sLWIsYjxfKXtfLT1iO2Rve2pbbysrXT1kW0UrK119d2hpbGUoLS1iKTtFPW8teCxrPWp9Zm9yKDtfPjI7KWpbbysrXT1rW0UrK10saltvKytdPWtbRSsrXSxqW28rK109a1tFKytdLF8tPTM7XyYmKGpbbysrXT1rW0UrK10sXz4xJiYoaltvKytdPWtbRSsrXSkpfWVsc2V7RT1vLXg7ZG97altvKytdPWpbRSsrXSxqW28rK109altFKytdLGpbbysrXT1qW0UrK10sXy09M313aGlsZShfPjIpO18mJihqW28rK109altFKytdLF8+MSYmKGpbbysrXT1qW0UrK10pKX1icmVha319YnJlYWt9fXdoaWxlKG48aSYmbzxzKTtuLT1fPXA+PjMsaCY9KDE8PChwLT1fPDwzKSktMSx0Lm5leHRfaW49bix0Lm5leHRfb3V0PW8sdC5hdmFpbF9pbj1uPGk/aS1uKzU6NS0obi1pKSx0LmF2YWlsX291dD1vPHM/cy1vKzI1NzoyNTctKG8tcyksci5ob2xkPWgsci5iaXRzPXB9fSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMjUpLGk9WzMsNCw1LDYsNyw4LDksMTAsMTEsMTMsMTUsMTcsMTksMjMsMjcsMzEsMzUsNDMsNTEsNTksNjcsODMsOTksMTE1LDEzMSwxNjMsMTk1LDIyNywyNTgsMCwwXSxvPVsxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNywxNywxNywxNywxOCwxOCwxOCwxOCwxOSwxOSwxOSwxOSwyMCwyMCwyMCwyMCwyMSwyMSwyMSwyMSwxNiw3Miw3OF0sYT1bMSwyLDMsNCw1LDcsOSwxMywxNywyNSwzMyw0OSw2NSw5NywxMjksMTkzLDI1NywzODUsNTEzLDc2OSwxMDI1LDE1MzcsMjA0OSwzMDczLDQwOTcsNjE0NSw4MTkzLDEyMjg5LDE2Mzg1LDI0NTc3LDAsMF0scz1bMTYsMTYsMTYsMTYsMTcsMTcsMTgsMTgsMTksMTksMjAsMjAsMjEsMjEsMjIsMjIsMjMsMjMsMjQsMjQsMjUsMjUsMjYsMjYsMjcsMjcsMjgsMjgsMjksMjksNjQsNjRdO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscix1LGMsZixsLGQpe3ZhciBoLHAsZyxtLHksdix3LGIsXyx4PWQuYml0cyxFPTAsaz0wLE89MCxqPTAsUD0wLFM9MCxSPTAsJD0wLEE9MCxUPTAsST1udWxsLEI9MCxGPW5ldyBuLkJ1ZjE2KDE2KSxVPW5ldyBuLkJ1ZjE2KDE2KSxNPW51bGwsQz0wO2ZvcihFPTA7RTw9MTU7RSsrKUZbRV09MDtmb3Ioaz0wO2s8dTtrKyspRltlW3Ira11dKys7Zm9yKFA9eCxqPTE1O2o+PTEmJjA9PT1GW2pdO2otLSk7aWYoUD5qJiYoUD1qKSwwPT09ailyZXR1cm4gY1tmKytdPTIwOTcxNTIwLGNbZisrXT0yMDk3MTUyMCxkLmJpdHM9MSwwO2ZvcihPPTE7TzxqJiYwPT09RltPXTtPKyspO2ZvcihQPE8mJihQPU8pLCQ9MSxFPTE7RTw9MTU7RSsrKWlmKCQ8PD0xLCgkLT1GW0VdKTwwKXJldHVybi0xO2lmKCQ+MCYmKDA9PT10fHwxIT09aikpcmV0dXJuLTE7Zm9yKFVbMV09MCxFPTE7RTwxNTtFKyspVVtFKzFdPVVbRV0rRltFXTtmb3Ioaz0wO2s8dTtrKyspMCE9PWVbcitrXSYmKGxbVVtlW3Ira11dKytdPWspO2lmKDA9PT10PyhJPU09bCx2PTE5KToxPT09dD8oST1pLEItPTI1NyxNPW8sQy09MjU3LHY9MjU2KTooST1hLE09cyx2PS0xKSxUPTAsaz0wLEU9Tyx5PWYsUz1QLFI9MCxnPS0xLG09KEE9MTw8UCktMSwxPT09dCYmQT44NTJ8fDI9PT10JiZBPjU5MilyZXR1cm4gMTtmb3IoOzspe3c9RS1SLGxba108dj8oYj0wLF89bFtrXSk6bFtrXT52PyhiPU1bQytsW2tdXSxfPUlbQitsW2tdXSk6KGI9OTYsXz0wKSxoPTE8PEUtUixPPXA9MTw8Uztkb3tjW3krKFQ+PlIpKyhwLT1oKV09dzw8MjR8Yjw8MTZ8X3wwfXdoaWxlKDAhPT1wKTtmb3IoaD0xPDxFLTE7VCZoOyloPj49MTtpZigwIT09aD8oVCY9aC0xLFQrPWgpOlQ9MCxrKyssMD09LS1GW0VdKXtpZihFPT09ailicmVhaztFPWVbcitsW2tdXX1pZihFPlAmJihUJm0pIT09Zyl7Zm9yKDA9PT1SJiYoUj1QKSx5Kz1PLCQ9MTw8KFM9RS1SKTtTK1I8aiYmISgoJC09RltTK1JdKTw9MCk7KVMrKywkPDw9MTtpZihBKz0xPDxTLDE9PT10JiZBPjg1Mnx8Mj09PXQmJkE+NTkyKXJldHVybiAxO2NbZz1UJm1dPVA8PDI0fFM8PDE2fHktZnwwfX1yZXR1cm4gMCE9PVQmJihjW3krVF09RS1SPDwyNHw2NDw8MTZ8MCksZC5iaXRzPVAsMH19LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dGhpcy50ZXh0PTAsdGhpcy50aW1lPTAsdGhpcy54ZmxhZ3M9MCx0aGlzLm9zPTAsdGhpcy5leHRyYT1udWxsLHRoaXMuZXh0cmFfbGVuPTAsdGhpcy5uYW1lPSIiLHRoaXMuY29tbWVudD0iIix0aGlzLmhjcmM9MCx0aGlzLmRvbmU9ITF9fSxmdW5jdGlvbih0LGUscil7dmFyIG49e307ZnVuY3Rpb24gaSh0LGUpe2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXX10LmV4cG9ydHM9bixuLmZyb209cigxMTcpLG4udG89cigxMTgpLG4uaXM9cigxMjApLG4uc3ViYXJyYXk9cigxMjEpLG4uam9pbj1yKDEyMiksbi5jb3B5PXIoMTIzKSxuLmNyZWF0ZT1yKDEyNCksaShyKDEyNSksbiksaShyKDEyNiksbil9LGZ1bmN0aW9uKHQsZSxyKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBuZXcgVWludDhBcnJheSh0KTtyZXR1cm4gaVtlfHwidXRmOCJdKHQpfTt2YXIgbj1yKDYyKSxpPXtoZXg6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLzIscj1uZXcgVWludDhBcnJheShlKSxuPSIiLGk9MCxvPXQubGVuZ3RoO2k8bzsrK2kpbis9dC5jaGFyQXQoaSksaT4wJiZpJTI9PTEmJihyW2k+Pj4xXT1wYXJzZUludChuLDE2KSxuPSIiKTtyZXR1cm4gcn0sdXRmODpmdW5jdGlvbih0KXtmb3IodmFyIGUscixuPVtdLGk9MCxvPXQubGVuZ3RoO2k8bzsrK2kpaWYoMTI4JihyPXQuY2hhckNvZGVBdChpKSkpe2U9ZW5jb2RlVVJJQ29tcG9uZW50KHQuY2hhckF0KGkpKS5zdWJzdHIoMSkuc3BsaXQoIiUiKTtmb3IodmFyIGE9MCxzPWUubGVuZ3RoO2E8czsrK2EpbltuLmxlbmd0aF09cGFyc2VJbnQoZVthXSwxNil9ZWxzZSBuW24ubGVuZ3RoXT1yO3JldHVybiBuZXcgVWludDhBcnJheShuKX0sYmFzZTY0OmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgVWludDhBcnJheShuLnRvQnl0ZUFycmF5KHQpKX19fSxmdW5jdGlvbih0LGUscil7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG9bZXx8InV0ZjgiXSh0KX07dmFyIG49cig2MiksaT1yKDExOSksbz17aGV4OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPSIiLG49MCxpPXQubGVuZ3RoO248aTsrK24pZT10W25dLHIrPSgoMjQwJmUpPj4+NCkudG9TdHJpbmcoMTYpLHIrPSgxNSZlKS50b1N0cmluZygxNik7cmV0dXJuIHJ9LHV0Zjg6ZnVuY3Rpb24odCl7cmV0dXJuIGkodCl9LGJhc2U2NDpmdW5jdGlvbih0KXtyZXR1cm4gbi5mcm9tQnl0ZUFycmF5KHQpfX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxvKXtlPXZvaWQgMD09PWU/MDplLG89dm9pZCAwPT09bz90Lmxlbmd0aDpvO3ZhciBjLGYsbD0wLGQ9MDtuLmxlbmd0aD1yLmxlbmd0aD0wO2Zvcig7bDx0Lmxlbmd0aDspZj10W2xdLCFkJiYxMjgmZj8oYz1zKGYpLGQrPWMsYzw4JiYobltuLmxlbmd0aF09ZiZhWzYtY10pKTpkPyhuW24ubGVuZ3RoXT1mJmFbNl0sIS0tZCYmbi5sZW5ndGgmJihyW3IubGVuZ3RoXT1pKHUobikpLG4ubGVuZ3RoPTApKTpyW3IubGVuZ3RoXT1pKGYpLCsrbDtuLmxlbmd0aCYmIWQmJihyW3IubGVuZ3RoXT1pKHUobikpLG4ubGVuZ3RoPTApO3JldHVybiByLmpvaW4oIiIpfTt2YXIgcj1bXSxuPVtdLGk9U3RyaW5nLmZyb21DaGFyQ29kZSxvPVs2NCwzMiwxNiw4LDQsMiwxXSxhPVswLDEsMyw3LDE1LDMxLDYzLDEyN107ZnVuY3Rpb24gcyh0KXtmb3IodmFyIGU9MDtlPDcmJnQmb1tlXTsrK2UpO3JldHVybiBlfWZ1bmN0aW9uIHUodCl7Zm9yKHZhciBlPTAscj0wLG49dC5sZW5ndGg7cjxuOysrcillfD10W3JdPDw2KihuLXItMSk7cmV0dXJuIGV9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQuc3ViYXJyYXkoZXx8MCxyfHx0Lmxlbmd0aCl9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCF0Lmxlbmd0aClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7dmFyIHI9dm9pZCAwIT09ZT9lOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZSs9dFtyXS5ieXRlTGVuZ3RoO3JldHVybiBlfSh0KSxuPW5ldyBVaW50OEFycmF5KHIpLGk9dFswXSxvPWkubGVuZ3RoLGE9MCxzPTAsdT0wO2Zvcig7dTxyOylzIT09bz9uW3UrK109aVtzKytdOihzPTAsaT10WysrYV0sbz1pJiZpLmxlbmd0aCk7cmV0dXJuIG59fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixpLG8pe2lmKG49YXJndW1lbnRzLmxlbmd0aDwzPzA6bixpPWFyZ3VtZW50cy5sZW5ndGg8ND8wOmksKG89YXJndW1lbnRzLmxlbmd0aDw1P3QubGVuZ3RoOm8pPT09aSlyZXR1cm47aWYoMD09PWUubGVuZ3RofHwwPT09dC5sZW5ndGgpcmV0dXJuO28+dC5sZW5ndGgmJihvPXQubGVuZ3RoKTtlLmxlbmd0aC1uPG8taSYmKG89ZS5sZW5ndGgtbitpKTtpZih0LmJ1ZmZlciE9PWUuYnVmZmVyKXJldHVybiBmdW5jdGlvbih0LGUscixuLGkpe2Zvcih2YXIgbz1pLW4rcixhPXIscz1uO2E8bzsrK2EsKytzKWVbYV09dFtzXX0odCxlLG4saSxvKTtyZXR1cm4gZnVuY3Rpb24odCxlLG4saSxvKXtmb3IodmFyIGE9bytpLHM9bmV3IFVpbnQ4QXJyYXkoci5jYWxsKHQsaSxhKSksdT0wO2k8YTsrK2ksKyt1KWVbbisrXT1zW3VdfSh0LGUsbixpLG8pfTt2YXIgcj1bXS5zbGljZX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBVaW50OEFycmF5KHQpfX0sZnVuY3Rpb24odCxlLHIpe3QuZXhwb3J0cz17cmVhZFVJbnQ4OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbZV19LHJlYWRJbnQ4OmZ1bmN0aW9uKHQsZSl7dmFyIHI9dFtlXTtyZXR1cm4gcjwxMjg/cjpyLTI1Nn0scmVhZFVJbnQxNkxFOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uZ2V0KHQpLmdldFVpbnQxNihlK3QuYnl0ZU9mZnNldCwhMCl9LHJlYWRVSW50MzJMRTpmdW5jdGlvbih0LGUpe3JldHVybiBuLmdldCh0KS5nZXRVaW50MzIoZSt0LmJ5dGVPZmZzZXQsITApfSxyZWFkSW50MTZMRTpmdW5jdGlvbih0LGUpe3JldHVybiBuLmdldCh0KS5nZXRJbnQxNihlK3QuYnl0ZU9mZnNldCwhMCl9LHJlYWRJbnQzMkxFOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uZ2V0KHQpLmdldEludDMyKGUrdC5ieXRlT2Zmc2V0LCEwKX0scmVhZEZsb2F0TEU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5nZXQodCkuZ2V0RmxvYXQzMihlK3QuYnl0ZU9mZnNldCwhMCl9LHJlYWREb3VibGVMRTpmdW5jdGlvbih0LGUpe3JldHVybiBuLmdldCh0KS5nZXRGbG9hdDY0KGUrdC5ieXRlT2Zmc2V0LCEwKX0scmVhZFVJbnQxNkJFOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uZ2V0KHQpLmdldFVpbnQxNihlK3QuYnl0ZU9mZnNldCwhMSl9LHJlYWRVSW50MzJCRTpmdW5jdGlvbih0LGUpe3JldHVybiBuLmdldCh0KS5nZXRVaW50MzIoZSt0LmJ5dGVPZmZzZXQsITEpfSxyZWFkSW50MTZCRTpmdW5jdGlvbih0LGUpe3JldHVybiBuLmdldCh0KS5nZXRJbnQxNihlK3QuYnl0ZU9mZnNldCwhMSl9LHJlYWRJbnQzMkJFOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uZ2V0KHQpLmdldEludDMyKGUrdC5ieXRlT2Zmc2V0LCExKX0scmVhZEZsb2F0QkU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5nZXQodCkuZ2V0RmxvYXQzMihlK3QuYnl0ZU9mZnNldCwhMSl9LHJlYWREb3VibGVCRTpmdW5jdGlvbih0LGUpe3JldHVybiBuLmdldCh0KS5nZXRGbG9hdDY0KGUrdC5ieXRlT2Zmc2V0LCExKX19O3ZhciBuPXIoODMpfSxmdW5jdGlvbih0LGUscil7dC5leHBvcnRzPXt3cml0ZVVJbnQ4OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFtyXT1lfSx3cml0ZUludDg6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0W3JdPWU8MD9lKzI1NjplfSx3cml0ZVVJbnQxNkxFOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbi5nZXQodCkuc2V0VWludDE2KHIrdC5ieXRlT2Zmc2V0LGUsITApfSx3cml0ZVVJbnQzMkxFOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbi5nZXQodCkuc2V0VWludDMyKHIrdC5ieXRlT2Zmc2V0LGUsITApfSx3cml0ZUludDE2TEU6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuLmdldCh0KS5zZXRJbnQxNihyK3QuYnl0ZU9mZnNldCxlLCEwKX0sd3JpdGVJbnQzMkxFOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbi5nZXQodCkuc2V0SW50MzIocit0LmJ5dGVPZmZzZXQsZSwhMCl9LHdyaXRlRmxvYXRMRTpmdW5jdGlvbih0LGUscil7cmV0dXJuIG4uZ2V0KHQpLnNldEZsb2F0MzIocit0LmJ5dGVPZmZzZXQsZSwhMCl9LHdyaXRlRG91YmxlTEU6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuLmdldCh0KS5zZXRGbG9hdDY0KHIrdC5ieXRlT2Zmc2V0LGUsITApfSx3cml0ZVVJbnQxNkJFOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbi5nZXQodCkuc2V0VWludDE2KHIrdC5ieXRlT2Zmc2V0LGUsITEpfSx3cml0ZVVJbnQzMkJFOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbi5nZXQodCkuc2V0VWludDMyKHIrdC5ieXRlT2Zmc2V0LGUsITEpfSx3cml0ZUludDE2QkU6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuLmdldCh0KS5zZXRJbnQxNihyK3QuYnl0ZU9mZnNldCxlLCExKX0sd3JpdGVJbnQzMkJFOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbi5nZXQodCkuc2V0SW50MzIocit0LmJ5dGVPZmZzZXQsZSwhMSl9LHdyaXRlRmxvYXRCRTpmdW5jdGlvbih0LGUscil7cmV0dXJuIG4uZ2V0KHQpLnNldEZsb2F0MzIocit0LmJ5dGVPZmZzZXQsZSwhMSl9LHdyaXRlRG91YmxlQkU6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuLmdldCh0KS5zZXRGbG9hdDY0KHIrdC5ieXRlT2Zmc2V0LGUsITEpfX07dmFyIG49cig4Myl9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWk7dmFyIHI9MTI4LG49MTI3O2Z1bmN0aW9uIGkoKXt0aGlzLmFjY3VtPVtdfWkucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHQpe3ZhciBlLGksbz10JnIsYT10aGlzLmFjY3VtO2lmKGFbYS5sZW5ndGhdPXQmbixvKXJldHVybjtlPWEubGVuZ3RoLGk9MDtmb3IodmFyIHM9MDtzPGU7KytzKWl8PWFbc108PDcqcztyZXR1cm4gYS5sZW5ndGg9MCx2b2lkIHRoaXMub25kYXRhKGkpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9dCxvPWUsYT1pLmxlbmd0aCxzPW8ubGVuZ3RoLHU9ITEsYz1udWxsLGY9YSsxLGw9W10sZD1bXSxoPVtdLHA9IiIsZz1mdW5jdGlvbih0LGUscil7cmV0dXJue3g6dCx5OmUsazpyfX0sbT1mdW5jdGlvbih0LGUpe3JldHVybntlbGVtOnQsdDplfX0seT1mdW5jdGlvbih0LGUscil7dmFyIG4sdSxjO2ZvcihuPWU+cj9sW3QtMStmXTpsW3QrMStmXSx1PShjPU1hdGgubWF4KGUscikpLXQ7dTxhJiZjPHMmJmlbdV09PT1vW2NdOykrK3UsKytjO3JldHVybiBsW3QrZl09ZC5sZW5ndGgsZFtkLmxlbmd0aF09bmV3IGcodSxjLG4pLGN9O3JldHVybiBhPj1zJiYocj1pLG49YSxpPW8sbz1yLGE9cyxzPW4sdT0hMCxmPWErMSkse1NFU19ERUxFVEU6LTEsU0VTX0NPTU1PTjowLFNFU19BREQ6MSxlZGl0ZGlzdGFuY2U6ZnVuY3Rpb24oKXtyZXR1cm4gY30sZ2V0bGNzOmZ1bmN0aW9uKCl7cmV0dXJuIHB9LGdldHNlczpmdW5jdGlvbigpe3JldHVybiBofSxjb21wb3NlOmZ1bmN0aW9uKCl7dmFyIHQsZSxyLG4sdix3LGIsXztmb3IodD1zLWEsZT1hK3MrMyxyPXt9LGI9MDtiPGU7KytiKXJbYl09LTEsbFtiXT0tMTtuPS0xO2Rve2ZvcihfPS0rK247Xzw9dC0xOysrXylyW18rZl09eShfLHJbXy0xK2ZdKzEscltfKzErZl0pO2ZvcihfPXQrbjtfPj10KzE7LS1fKXJbXytmXT15KF8scltfLTErZl0rMSxyW18rMStmXSk7clt0K2ZdPXkodCxyW3QtMStmXSsxLHJbdCsxK2ZdKX13aGlsZShyW3QrZl0hPT1zKTtmb3IoYz10KzIqbix2PWxbdCtmXSx3PVtdOy0xIT09djspd1t3Lmxlbmd0aF09bmV3IGcoZFt2XS54LGRbdl0ueSxudWxsKSx2PWRbdl0uazshZnVuY3Rpb24odCl7dmFyIGUscixuO2ZvcigxLGU9cj0wLG49dC5sZW5ndGgtMTtuPj0wOy0tbilmb3IoO2U8dFtuXS54fHxyPHRbbl0ueTspdFtuXS55LXRbbl0ueD5yLWU/KGhbaC5sZW5ndGhdPW5ldyBtKG9bcl0sdT8tMToxKSwwLCsrcik6dFtuXS55LXRbbl0ueDxyLWU/KGhbaC5sZW5ndGhdPW5ldyBtKGlbZV0sdT8xOi0xKSwwLCsrZSk6KGhbaC5sZW5ndGhdPW5ldyBtKGlbZV0sMCkscCs9aVtlXSwwLDAsKytlLCsrcil9KHcpfX19fSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbih0KXtyLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gb30pO3ZhciBuPXIoMTMyKTtmdW5jdGlvbiBpKHQsZSxyLG4saSxvLGEpe3RyeXt2YXIgcz10W29dKGEpLHU9cy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCByKHQpfXMuZG9uZT9lKHUpOlByb21pc2UucmVzb2x2ZSh1KS50aGVuKG4saSl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gYS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gYSgpe3ZhciBlO3JldHVybiBlPWZ1bmN0aW9uKih7Y29yZTplPSJkZWZhdWx0IixvYmplY3Q6cn0pe3RyeXsic3RyaW5nIj09dHlwZW9mIHImJihyPXQuZnJvbShyLCJ1dGY4IikpO2NvbnN0IGU9ImJsb2IiLHtvaWQ6aSxvYmplY3Q6b309eWllbGQgT2JqZWN0KG4uYSkoe3R5cGU6ImJsb2IiLGZvcm1hdDoiY29udGVudCIsb2JqZWN0OnJ9KTtyZXR1cm57b2lkOmksdHlwZTplLG9iamVjdDpvLGZvcm1hdDoid3JhcHBlZCJ9fWNhdGNoKHQpe3Rocm93IHQuY2FsbGVyPSJnaXQuaGFzaEJsb2IiLHR9fSwoYT1mdW5jdGlvbigpe3ZhciB0PXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4sbyl7dmFyIGE9ZS5hcHBseSh0LHIpO2Z1bmN0aW9uIHModCl7aShhLG4sbyxzLHUsIm5leHQiLHQpfWZ1bmN0aW9uIHUodCl7aShhLG4sbyxzLHUsInRocm93Iix0KX1zKHZvaWQgMCl9KX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KS5jYWxsKHRoaXMscigxMCkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24odCl7ci5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGR9KTt2YXIgbj1yKDEpLGk9cigxNSksbz1yKDcpLGE9cigwKSxzPXIoMTEpLHU9cigyMiksYz1yKDIpLGY9cigzKTtmdW5jdGlvbiBsKHQsZSxyLG4saSxvLGEpe3RyeXt2YXIgcz10W29dKGEpLHU9cy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCByKHQpfXMuZG9uZT9lKHUpOlByb21pc2UucmVzb2x2ZSh1KS50aGVuKG4saSl9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gaC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gaCgpe3ZhciBlO3JldHVybiBlPWZ1bmN0aW9uKih7Y29yZTplPSJkZWZhdWx0IixkaXI6cixnaXRkaXI6bD1PYmplY3QoYy5hKShyLCIuZ2l0IiksZnM6ZD1mLmEuZ2V0KGUpLmdldCgiZnMiKSx0eXBlOmgsb2JqZWN0OnAsZm9ybWF0Omc9InBhcnNlZCIsb2lkOm0sZW5jb2Rpbmc6eX0pe3RyeXtjb25zdCBlPW5ldyBuLmEoZCk7aWYoInBhcnNlZCI9PT1nKXN3aXRjaChoKXtjYXNlImNvbW1pdCI6cD1vLmEuZnJvbShwKS50b09iamVjdCgpO2JyZWFrO2Nhc2UidHJlZSI6cD1zLmEuZnJvbShwLmVudHJpZXMpLnRvT2JqZWN0KCk7YnJlYWs7Y2FzZSJibG9iIjpwPXQuZnJvbShwLHkpO2JyZWFrO2Nhc2UidGFnIjpwPWkuYS5mcm9tKHApLnRvT2JqZWN0KCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgYS5iKGEuYS5PYmplY3RUeXBlVW5rbm93bkZhaWwse3R5cGU6aH0pfWNvbnN0IHI9InBhcnNlZCI9PT1nPyJjb250ZW50IjpnO3JldHVybiBtPXlpZWxkIE9iamVjdCh1LmEpKHtmczplLGdpdGRpcjpsLHR5cGU6aCxvYmplY3Q6cCxvaWQ6bSxmb3JtYXQ6cn0pfWNhdGNoKHQpe3Rocm93IHQuY2FsbGVyPSJnaXQud3JpdGVPYmplY3QiLHR9fSwoaD1mdW5jdGlvbigpe3ZhciB0PXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4saSl7dmFyIG89ZS5hcHBseSh0LHIpO2Z1bmN0aW9uIGEodCl7bChvLG4saSxhLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7bChvLG4saSxhLHMsInRocm93Iix0KX1hKHZvaWQgMCl9KX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KS5jYWxsKHRoaXMscigxMCkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe2NvbnN0IG49cig3NSksaT17InsiOiJ9IiwiKCI6IikiLCJbIjoiXSJ9LG89L1xcKC4pfCheIXxcKnxbXF0uKyldXD98XFtbXlxcXF1dK1xdfFx7W15cXH1dK1x9fFwoXD9bOiE9XVteXFwpXStcKXxcKFtefF0rXHxbXlxcKV0rXCl8KFxcKS58KFtAPyErKl1cKC4qXCkpKS8sYT0vXFwoLil8KF4hfFsqP3t9KClbXF1dfFwoXD8pLztmdW5jdGlvbiBzKHQse3N0cmljdDplPSEwfT17fSl7aWYoIiI9PT10KXJldHVybiExO2xldCByLG49ZT9vOmE7Zm9yKDtyPW4uZXhlYyh0KTspe2lmKHJbMl0pcmV0dXJuITA7bGV0IGU9ci5pbmRleCtyWzBdLmxlbmd0aCxuPXJbMV0sbz1uP2lbbl06bnVsbDtpZihuJiZvKXtsZXQgcj10LmluZGV4T2YobyxlKTstMSE9PXImJihlPXIrMSl9dD10LnNsaWNlKGUpfXJldHVybiExfXQuZXhwb3J0cz1mdW5jdGlvbih0LGU9e30pe2xldCByLGk9ZnVuY3Rpb24odCx7c3RyaWN0OmU9ITF9PXt9KXt0PW4ubm9ybWFsaXplKHQpLnJlcGxhY2UoL1wvfFxcLywiLyIpLC9bXHtcW10uKltcL10qLipbXH1cXV0kLy50ZXN0KHQpJiYodCs9Ii8iKSx0Kz0iYSI7ZG97dD1uLmRpcm5hbWUodCl9d2hpbGUocyh0LHtzdHJpY3Q6ZX0pfHwvKF58W15cXF0pKFtce1xbXXxcKFteXCldKyQpLy50ZXN0KHQpKTtyZXR1cm4gdC5yZXBsYWNlKC9cXChbXCpcP1x8XFtcXVwoXClce1x9XSkvZywiJDEiKX0odCxlKSxvPXModCxlKTtyZXR1cm4iLiIhPWk/KHI9dC5zdWJzdHIoaS5sZW5ndGgpKS5zdGFydHNXaXRoKCIvIikmJihyPXIuc3Vic3RyKDEpKTpyPXQsb3x8KHI9Ii4iIT09KGk9bi5kaXJuYW1lKHQpKT90LnN1YnN0cihpLmxlbmd0aCk6dCksci5zdGFydHNXaXRoKCIuLyIpJiYocj1yLnN1YnN0cigyKSksci5zdGFydHNXaXRoKCIvIikmJihyPXIuc3Vic3RyKDEpKSx7YmFzZTppLGdsb2I6cixpc0dsb2I6b319fSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBhfSk7dmFyIG49cigxNiksaT1yKDEyKTtmdW5jdGlvbiBvKHQsZSxyLG4saSxvLGEpe3RyeXt2YXIgcz10W29dKGEpLHU9cy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCByKHQpfXMuZG9uZT9lKHUpOlByb21pc2UucmVzb2x2ZSh1KS50aGVuKG4saSl9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gcy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gcygpe3ZhciB0O3JldHVybiB0PWZ1bmN0aW9uKih7dHlwZTp0LG9iamVjdDplLGZvcm1hdDpyPSJjb250ZW50IixvaWQ6b30pe3JldHVybiJkZWZsYXRlZCIhPT1yJiYoIndyYXBwZWQiIT09ciYmKGU9bi5hLndyYXAoe3R5cGU6dCxvYmplY3Q6ZX0pKSxvPU9iamVjdChpLmEpKGUpKSx7b2lkOm8sb2JqZWN0OmV9fSwocz1mdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4saSl7dmFyIGE9dC5hcHBseShlLHIpO2Z1bmN0aW9uIHModCl7byhhLG4saSxzLHUsIm5leHQiLHQpfWZ1bmN0aW9uIHUodCl7byhhLG4saSxzLHUsInRocm93Iix0KX1zKHZvaWQgMCl9KX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5yKGUpO3ZhciBuPXIoOTEpLGk9cig1Miksbz1yKDUwKSxhPXIoMTMpLHM9cigxKSx1PXIoMCksYz1yKDIyKSxmPXIoMiksbD1yKDMpO2Z1bmN0aW9uIGQodCxlLHIsbixpLG8sYSl7dHJ5e3ZhciBzPXRbb10oYSksdT1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UodSk6UHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4obixpKX1mdW5jdGlvbiBoKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4saSl7dmFyIG89dC5hcHBseShlLHIpO2Z1bmN0aW9uIGEodCl7ZChvLG4saSxhLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7ZChvLG4saSxhLHMsInRocm93Iix0KX1hKHZvaWQgMCl9KX19ZnVuY3Rpb24gcCh0KXtyZXR1cm4gZy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gZygpe3JldHVybihnPWgoZnVuY3Rpb24qKHtjb3JlOnQ9ImRlZmF1bHQiLGRpcjplLGdpdGRpcjpyPU9iamVjdChmLmEpKGUsIi5naXQiKSxmczpuPWwuYS5nZXQodCkuZ2V0KCJmcyIpLGZpbGVwYXRoOml9KXt0cnl7Y29uc3QgdD1uZXcgcy5hKG4pO3lpZWxkIGEuYS5hY3F1aXJlKHtmczp0LGdpdGRpcjpyfSxmdW5jdGlvbigpe3ZhciBuPWgoZnVuY3Rpb24qKG4pe3lpZWxkIG0oe2RpcjplLGdpdGRpcjpyLGZzOnQsZmlsZXBhdGg6aSxpbmRleDpufSl9KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSl9Y2F0Y2godCl7dGhyb3cgdC5jYWxsZXI9ImdpdC5hZGQiLHR9fSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBtKHQpe3JldHVybiB5LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiB5KCl7cmV0dXJuKHk9aChmdW5jdGlvbiooe2Rpcjp0LGdpdGRpcjplLGZzOnIsZmlsZXBhdGg6bixpbmRleDppfSl7aWYoeWllbGQgby5hLmlzSWdub3JlZCh7ZnM6cixkaXI6dCxnaXRkaXI6ZSxmaWxlcGF0aDpufSkpcmV0dXJuO2NvbnN0IGE9eWllbGQgci5sc3RhdChPYmplY3QoZi5hKSh0LG4pKTtpZighYSl0aHJvdyBuZXcgdS5iKHUuYS5GaWxlUmVhZEVycm9yLHtmaWxlcGF0aDpufSk7aWYoYS5pc0RpcmVjdG9yeSgpKXtjb25zdCBvPSh5aWVsZCByLnJlYWRkaXIoT2JqZWN0KGYuYSkodCxuKSkpLm1hcChvPT5tKHtkaXI6dCxnaXRkaXI6ZSxmczpyLGZpbGVwYXRoOk9iamVjdChmLmEpKG4sbyksaW5kZXg6aX0pKTt5aWVsZCBQcm9taXNlLmFsbChvKX1lbHNle2NvbnN0IG89YS5pc1N5bWJvbGljTGluaygpP3lpZWxkIHIucmVhZGxpbmsoT2JqZWN0KGYuYSkodCxuKSk6eWllbGQgci5yZWFkKE9iamVjdChmLmEpKHQsbikpO2lmKG51bGw9PT1vKXRocm93IG5ldyB1LmIodS5hLkZpbGVSZWFkRXJyb3Ise2ZpbGVwYXRoOm59KTtjb25zdCBzPXlpZWxkIE9iamVjdChjLmEpKHtmczpyLGdpdGRpcjplLHR5cGU6ImJsb2IiLG9iamVjdDpvfSk7aS5pbnNlcnQoe2ZpbGVwYXRoOm4sc3RhdHM6YSxvaWQ6c30pfX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIHY9cigzOSksdz1yLm4odiksYj1yKDI0KTtmdW5jdGlvbiBfKHQsZSxyLG4saSxvLGEpe3RyeXt2YXIgcz10W29dKGEpLHU9cy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCByKHQpfXMuZG9uZT9lKHUpOlByb21pc2UucmVzb2x2ZSh1KS50aGVuKG4saSl9ZnVuY3Rpb24geCh0KXtyZXR1cm4gRS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gRSgpe3ZhciB0O3JldHVybiB0PWZ1bmN0aW9uKih7Y29yZTp0PSJkZWZhdWx0IixkaXI6ZSxnaXRkaXI6cj1PYmplY3QoZi5hKShlLCIuZ2l0IiksZnM6bj1sLmEuZ2V0KHQpLmdldCgiZnMiKSxyZW1vdGU6aSx1cmw6byxmb3JjZTphPSExfSl7dHJ5e2NvbnN0IHQ9bmV3IHMuYShuKTtpZih2b2lkIDA9PT1pKXRocm93IG5ldyB1LmIodS5hLk1pc3NpbmdSZXF1aXJlZFBhcmFtZXRlckVycm9yLHtmdW5jdGlvbjoiYWRkUmVtb3RlIixwYXJhbWV0ZXI6InJlbW90ZSJ9KTtpZih2b2lkIDA9PT1vKXRocm93IG5ldyB1LmIodS5hLk1pc3NpbmdSZXF1aXJlZFBhcmFtZXRlckVycm9yLHtmdW5jdGlvbjoiYWRkUmVtb3RlIixwYXJhbWV0ZXI6InVybCJ9KTtpZihpIT09dy5hLmNsZWFuKGkpKXRocm93IG5ldyB1LmIodS5hLkludmFsaWRSZWZOYW1lRXJyb3Ise3ZlcmI6ImFkZCIsbm91bjoicmVtb3RlIixyZWY6aSxzdWdnZXN0aW9uOncuYS5jbGVhbihpKX0pO2NvbnN0IGU9eWllbGQgYi5hLmdldCh7ZnM6dCxnaXRkaXI6cn0pO2lmKCFhJiYoeWllbGQgZS5nZXRTdWJzZWN0aW9ucygicmVtb3RlIikpLmluY2x1ZGVzKGkpJiZvIT09KHlpZWxkIGUuZ2V0KGByZW1vdGUuJHtpfS51cmxgKSkpdGhyb3cgbmV3IHUuYih1LmEuQWRkaW5nUmVtb3RlV291bGRPdmVyd3JpdGUse3JlbW90ZTppfSk7eWllbGQgZS5zZXQoYHJlbW90ZS4ke2l9LnVybGAsbykseWllbGQgZS5zZXQoYHJlbW90ZS4ke2l9LmZldGNoYCxgK3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvJHtpfS8qYCkseWllbGQgYi5hLnNhdmUoe2ZzOnQsZ2l0ZGlyOnIsY29uZmlnOmV9KX1jYXRjaCh0KXt0aHJvdyB0LmNhbGxlcj0iZ2l0LmFkZFJlbW90ZSIsdH19LChFPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obixpKXt2YXIgbz10LmFwcGx5KGUscik7ZnVuY3Rpb24gYSh0KXtfKG8sbixpLGEscywibmV4dCIsdCl9ZnVuY3Rpb24gcyh0KXtfKG8sbixpLGEscywidGhyb3ciLHQpfWEodm9pZCAwKX0pfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBrPXIoNCksTz1yKDE1KSxqPXIoNSk7ZnVuY3Rpb24gUCh0LGUscixuLGksbyxhKXt0cnl7dmFyIHM9dFtvXShhKSx1PXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZSh1KTpQcm9taXNlLnJlc29sdmUodSkudGhlbihuLGkpfWZ1bmN0aW9uIFModCl7cmV0dXJuIFIuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFIoKXt2YXIgdDtyZXR1cm4gdD1mdW5jdGlvbioodCl7Y29uc3R7Y29yZTplPSJkZWZhdWx0IixkaXI6cixnaXRkaXI6bj1PYmplY3QoZi5hKShyLCIuZ2l0IiksZnM6aT1sLmEuZ2V0KGUpLmdldCgiZnMiKSxhbGw6bz0hMSxhcHBlbmQ6YT0hMSxwYXRoOnUsdmFsdWU6Y309dDt0cnl7Y29uc3QgZT1uZXcgcy5hKGkpLHI9eWllbGQgYi5hLmdldCh7ZnM6ZSxnaXRkaXI6bn0pO2lmKHZvaWQgMD09PWMmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCwidmFsdWUiKSlyZXR1cm4gbz9yLmdldGFsbCh1KTpyLmdldCh1KTthP3lpZWxkIHIuYXBwZW5kKHUsYyk6eWllbGQgci5zZXQodSxjKSx5aWVsZCBiLmEuc2F2ZSh7ZnM6ZSxnaXRkaXI6bixjb25maWc6cn0pfWNhdGNoKHQpe3Rocm93IHQuY2FsbGVyPSJnaXQuY29uZmlnIix0fX0sKFI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLGkpe3ZhciBvPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBhKHQpe1AobyxuLGksYSxzLCJuZXh0Iix0KX1mdW5jdGlvbiBzKHQpe1AobyxuLGksYSxzLCJ0aHJvdyIsdCl9YSh2b2lkIDApfSl9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gJCh0LGUscixuLGksbyxhKXt0cnl7dmFyIHM9dFtvXShhKSx1PXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZSh1KTpQcm9taXNlLnJlc29sdmUodSkudGhlbihuLGkpfWZ1bmN0aW9uIEEodCl7cmV0dXJuIFQuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFQoKXt2YXIgdDtyZXR1cm4gdD1mdW5jdGlvbiooe2ZzOnQsZ2l0ZGlyOmUsYXV0aG9yOnI9e319KXtsZXR7bmFtZTpuLGVtYWlsOmksZGF0ZTpvLHRpbWVzdGFtcDphLHRpbWV6b25lT2Zmc2V0OnN9PXI7aWYobj1ufHwoeWllbGQgUyh7ZnM6dCxnaXRkaXI6ZSxwYXRoOiJ1c2VyLm5hbWUifSkpLGk9aXx8KHlpZWxkIFMoe2ZzOnQsZ2l0ZGlyOmUscGF0aDoidXNlci5lbWFpbCJ9KSksdm9pZCAwIT09biYmdm9pZCAwIT09aSlyZXR1cm4gbz1vfHxuZXcgRGF0ZSxhPW51bGwhPWE/YTpNYXRoLmZsb29yKG8udmFsdWVPZigpLzFlMykscz1udWxsIT1zP3M6by5nZXRUaW1lem9uZU9mZnNldCgpLHtuYW1lOm4sZW1haWw6aSxkYXRlOm8sdGltZXN0YW1wOmEsdGltZXpvbmVPZmZzZXQ6c319LChUPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obixpKXt2YXIgbz10LmFwcGx5KGUscik7ZnVuY3Rpb24gYSh0KXskKG8sbixpLGEscywibmV4dCIsdCl9ZnVuY3Rpb24gcyh0KXskKG8sbixpLGEscywidGhyb3ciLHQpfWEodm9pZCAwKX0pfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEkodCxlLHIsbixpLG8sYSl7dHJ5e3ZhciBzPXRbb10oYSksdT1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UodSk6UHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4obixpKX1mdW5jdGlvbiBCKHQpe3JldHVybiBGLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBGKCl7dmFyIHQ7cmV0dXJuIHQ9ZnVuY3Rpb24qKHtjb3JlOnQ9ImRlZmF1bHQiLGRpcjplLGdpdGRpcjpyPU9iamVjdChmLmEpKGUsIi5naXQiKSxmczpuPWwuYS5nZXQodCkuZ2V0KCJmcyIpLHJlZjppLHRhZ2dlcjpvLG1lc3NhZ2U6YT1pLHNpZ25hdHVyZTpkLG9iamVjdDpoLHNpZ25pbmdLZXk6cCxmb3JjZTpnPSExfSl7dHJ5e2NvbnN0IGU9bmV3IHMuYShuKTtpZih2b2lkIDA9PT1pKXRocm93IG5ldyB1LmIodS5hLk1pc3NpbmdSZXF1aXJlZFBhcmFtZXRlckVycm9yLHtmdW5jdGlvbjoiYW5ub3RhdGVkVGFnIixwYXJhbWV0ZXI6InJlZiJ9KTtpZihpPWkuc3RhcnRzV2l0aCgicmVmcy90YWdzLyIpP2k6YHJlZnMvdGFncy8ke2l9YCwhZyYmKHlpZWxkIGsuYS5leGlzdHMoe2ZzOmUsZ2l0ZGlyOnIscmVmOml9KSkpdGhyb3cgbmV3IHUuYih1LmEuUmVmRXhpc3RzRXJyb3Ise25vdW46InRhZyIscmVmOml9KTtjb25zdCBmPXlpZWxkIGsuYS5yZXNvbHZlKHtmczplLGdpdGRpcjpyLHJlZjpofHwiSEVBRCJ9KTtpZihkJiZwKXRocm93IG5ldyB1LmIodS5hLkludmFsaWRQYXJhbWV0ZXJDb21iaW5hdGlvbkVycm9yLHtmdW5jdGlvbjoiYW5ub3RhdGVkVGFnIixwYXJhbWV0ZXJzOlsic2lnbmF0dXJlIiwic2lnbmluZ0tleSJdfSk7aWYodm9pZCAwPT09KG89eWllbGQgQSh7ZnM6ZSxnaXRkaXI6cixhdXRob3I6b30pKSl0aHJvdyBuZXcgdS5iKHUuYS5NaXNzaW5nVGFnZ2VyRXJyb3IpO2NvbnN0e3R5cGU6bX09eWllbGQgT2JqZWN0KGouYSkoe2ZzOmUsZ2l0ZGlyOnIsb2lkOmZ9KTtsZXQgeT1PLmEuZnJvbSh7b2JqZWN0OmYsdHlwZTptLHRhZzppLnJlcGxhY2UoInJlZnMvdGFncy8iLCIiKSx0YWdnZXI6byxtZXNzYWdlOmEsc2lnbmF0dXJlOmR9KTtpZihwKXtjb25zdCBlPWwuYS5nZXQodCkuZ2V0KCJwZ3AiKTt5PXlpZWxkIE8uYS5zaWduKHksZSxwKX1jb25zdCB2PXlpZWxkIE9iamVjdChjLmEpKHtmczplLGdpdGRpcjpyLHR5cGU6InRhZyIsb2JqZWN0OnkudG9PYmplY3QoKX0pO3lpZWxkIGsuYS53cml0ZVJlZih7ZnM6ZSxnaXRkaXI6cixyZWY6aSx2YWx1ZTp2fSl9Y2F0Y2godCl7dGhyb3cgdC5jYWxsZXI9ImdpdC5hbm5vdGF0ZWRUYWciLHR9fSwoRj1mdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4saSl7dmFyIG89dC5hcHBseShlLHIpO2Z1bmN0aW9uIGEodCl7SShvLG4saSxhLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7SShvLG4saSxhLHMsInRocm93Iix0KX1hKHZvaWQgMCl9KX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBVKHQsZSxyLG4saSxvLGEpe3RyeXt2YXIgcz10W29dKGEpLHU9cy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCByKHQpfXMuZG9uZT9lKHUpOlByb21pc2UucmVzb2x2ZSh1KS50aGVuKG4saSl9ZnVuY3Rpb24gTSh0KXtyZXR1cm4gQy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gQygpe3ZhciB0O3JldHVybiB0PWZ1bmN0aW9uKih7Y29yZTp0PSJkZWZhdWx0IixkaXI6ZSxnaXRkaXI6cj1PYmplY3QoZi5hKShlLCIuZ2l0IiksZnM6bj1sLmEuZ2V0KHQpLmdldCgiZnMiKSxyZWY6aSxjaGVja291dDpvPSExfSl7dHJ5e2NvbnN0IHQ9bmV3IHMuYShuKTtpZih2b2lkIDA9PT1pKXRocm93IG5ldyB1LmIodS5hLk1pc3NpbmdSZXF1aXJlZFBhcmFtZXRlckVycm9yLHtmdW5jdGlvbjoiYnJhbmNoIixwYXJhbWV0ZXI6InJlZiJ9KTtpZihpIT09dy5hLmNsZWFuKGkpKXRocm93IG5ldyB1LmIodS5hLkludmFsaWRSZWZOYW1lRXJyb3Ise3ZlcmI6ImNyZWF0ZSIsbm91bjoiYnJhbmNoIixyZWY6aSxzdWdnZXN0aW9uOncuYS5jbGVhbihpKX0pO2NvbnN0IGU9YHJlZnMvaGVhZHMvJHtpfWA7aWYoeWllbGQgay5hLmV4aXN0cyh7ZnM6dCxnaXRkaXI6cixyZWY6ZX0pKXRocm93IG5ldyB1LmIodS5hLlJlZkV4aXN0c0Vycm9yLHtub3VuOiJicmFuY2giLHJlZjppfSk7bGV0IGE7dHJ5e2E9eWllbGQgay5hLnJlc29sdmUoe2ZzOnQsZ2l0ZGlyOnIscmVmOiJIRUFEIn0pfWNhdGNoKHQpe31hJiYoeWllbGQgay5hLndyaXRlUmVmKHtmczp0LGdpdGRpcjpyLHJlZjplLHZhbHVlOmF9KSksbyYmKHlpZWxkIGsuYS53cml0ZVN5bWJvbGljUmVmKHtmczp0LGdpdGRpcjpyLHJlZjoiSEVBRCIsdmFsdWU6ZX0pKX1jYXRjaCh0KXt0aHJvdyB0LmNhbGxlcj0iZ2l0LmJyYW5jaCIsdH19LChDPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obixpKXt2YXIgbz10LmFwcGx5KGUscik7ZnVuY3Rpb24gYSh0KXtVKG8sbixpLGEscywibmV4dCIsdCl9ZnVuY3Rpb24gcyh0KXtVKG8sbixpLGEscywidGhyb3ciLHQpfWEodm9pZCAwKX0pfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBOPXIoMTAyKSxEPXIubihOKSx6PXIoMTMxKSxIPXIubih6KTtjb25zdCBMPXQ9Pntjb25zdCBlPUgoKSh0KS5iYXNlO3JldHVybiIuIj09PWU/IiI6ZX0sRz0odCxlKT0+Ii4iPT09dHx8bnVsbD09ZXx8MD09PWUubGVuZ3RofHwiLiI9PT1lfHwoZS5sZW5ndGg+PXQubGVuZ3RoP2Uuc3RhcnRzV2l0aCh0KTp0LnN0YXJ0c1dpdGgoZSkpO3ZhciBxPXIoMjgpLFc9cig0MiksWT1yKDgpLFo9cigyMCksSz1yKDEyKSxWPXIoMTYpO2Z1bmN0aW9uIFgodCxlLHIsbixpLG8sYSl7dHJ5e3ZhciBzPXRbb10oYSksdT1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UodSk6UHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4obixpKX1mdW5jdGlvbiBKKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4saSl7dmFyIG89dC5hcHBseShlLHIpO2Z1bmN0aW9uIGEodCl7WChvLG4saSxhLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7WChvLG4saSxhLHMsInRocm93Iix0KX1hKHZvaWQgMCl9KX19Y2xhc3MgUXtjb25zdHJ1Y3Rvcih7ZnM6dCxkaXI6ZSxnaXRkaXI6cn0pe2NvbnN0IG49bmV3IHMuYSh0KTt0aGlzLmZzPW4sdGhpcy5kaXI9ZSx0aGlzLmdpdGRpcj1yO2NvbnN0IGk9dGhpczt0aGlzLkNvbnN0cnVjdEVudHJ5PWNsYXNze2NvbnN0cnVjdG9yKHQpe09iamVjdC5hc3NpZ24odGhpcyx0KX1wb3B1bGF0ZVN0YXQoKXt2YXIgdD10aGlzO3JldHVybiBKKGZ1bmN0aW9uKigpe3QuZXhpc3RzJiYoeWllbGQgaS5wb3B1bGF0ZVN0YXQodCkpfSkoKX1wb3B1bGF0ZUNvbnRlbnQoKXt2YXIgdD10aGlzO3JldHVybiBKKGZ1bmN0aW9uKigpe3QuZXhpc3RzJiYoeWllbGQgaS5wb3B1bGF0ZUNvbnRlbnQodCkpfSkoKX1wb3B1bGF0ZUhhc2goKXt2YXIgdD10aGlzO3JldHVybiBKKGZ1bmN0aW9uKigpe3QuZXhpc3RzJiYoeWllbGQgaS5wb3B1bGF0ZUhhc2godCkpfSkoKX19fXJlYWRkaXIodCl7dmFyIGU9dGhpcztyZXR1cm4gSihmdW5jdGlvbiooKXtpZighdC5leGlzdHMpcmV0dXJuW107Y29uc3Qgcj10LmZ1bGxwYXRoLHtmczpuLGRpcjppfT1lLG89eWllbGQgbi5yZWFkZGlyKE9iamVjdChmLmEpKGkscikpO3JldHVybiBudWxsPT09bz9udWxsOm8ubWFwKHQ9Pih7ZnVsbHBhdGg6T2JqZWN0KGYuYSkocix0KSxiYXNlbmFtZTp0LGV4aXN0czohMH0pKX0pKCl9cG9wdWxhdGVTdGF0KHQpe3ZhciBlPXRoaXM7cmV0dXJuIEooZnVuY3Rpb24qKCl7aWYoIXQuZXhpc3RzKXJldHVybjtjb25zdHtmczpyLGRpcjpufT1lO2xldCBpPXlpZWxkIHIubHN0YXQoYCR7bn0vJHt0LmZ1bGxwYXRofWApLG89aS5pc0RpcmVjdG9yeSgpPyJ0cmVlIjoiYmxvYiI7aWYoImJsb2IiIT09b3x8aS5pc0ZpbGUoKXx8aS5pc1N5bWJvbGljTGluaygpfHwobz0ic3BlY2lhbCIpLCFpKXRocm93IG5ldyBFcnJvcihgRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5LCBsc3RhdCAnJHt0LmZ1bGxwYXRofSdgKTtpPU9iamVjdChaLmEpKGkpLE9iamVjdC5hc3NpZ24odCx7dHlwZTpvfSxpKX0pKCl9cG9wdWxhdGVDb250ZW50KHQpe3ZhciBlPXRoaXM7cmV0dXJuIEooZnVuY3Rpb24qKCl7aWYoIXQuZXhpc3RzKXJldHVybjtjb25zdHtmczpyLGRpcjpufT1lLGk9eWllbGQgci5yZWFkKGAke259LyR7dC5mdWxscGF0aH1gKTstMT09PXQuc2l6ZSYmKHQuc2l6ZT1pLmxlbmd0aCksT2JqZWN0LmFzc2lnbih0LHtjb250ZW50Oml9KX0pKCl9cG9wdWxhdGVIYXNoKHQpe3ZhciBlPXRoaXM7cmV0dXJuIEooZnVuY3Rpb24qKCl7aWYoIXQuZXhpc3RzKXJldHVybjtjb25zdHtmczpyLGdpdGRpcjpufT1lLGk9eWllbGQgYS5hLmFjcXVpcmUoe2ZzOnIsZ2l0ZGlyOm59LGZ1bmN0aW9uKCl7dmFyIGU9SihmdW5jdGlvbiooZSl7Y29uc3Qgcj1lLmVudHJpZXNNYXAuZ2V0KHQuZnVsbHBhdGgpO2lmKHQudHlwZXx8KHlpZWxkIHQucG9wdWxhdGVTdGF0KCkpLCFyfHxPYmplY3QoVy5hKSh0LHIpKXtPYmplY3QoWS5hKShgSU5ERVggQ0FDSEUgTUlTUzogY2FsY3VsYXRpbmcgU0hBIGZvciAke3QuZnVsbHBhdGh9YCksdC5jb250ZW50fHwoeWllbGQgdC5wb3B1bGF0ZUNvbnRlbnQoKSk7Y29uc3Qgbj1PYmplY3QoSy5hKShWLmEud3JhcCh7dHlwZToiYmxvYiIsb2JqZWN0OnQuY29udGVudH0pKTtyZXR1cm4gciYmbj09PXIub2lkJiZlLmluc2VydCh7ZmlsZXBhdGg6dC5mdWxscGF0aCxzdGF0czp0LG9pZDpufSksbn1yZXR1cm4gci5vaWR9KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSk7T2JqZWN0LmFzc2lnbih0LHtvaWQ6aX0pfSkoKX19ZnVuY3Rpb24gdHQodCxlLHIsbixpLG8sYSl7dHJ5e3ZhciBzPXRbb10oYSksdT1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UodSk6UHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4obixpKX1mdW5jdGlvbiBldCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLGkpe3ZhciBvPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBhKHQpe3R0KG8sbixpLGEscywibmV4dCIsdCl9ZnVuY3Rpb24gcyh0KXt0dChvLG4saSxhLHMsInRocm93Iix0KX1hKHZvaWQgMCl9KX19Y2xhc3MgcnR7Y29uc3RydWN0b3Ioe2ZzOnQsZGlyOmUsZ2l0ZGlyOnJ9KXtjb25zdCBuPW5ldyBzLmEodCk7dGhpcy5mcz1uLHRoaXMuZGlyPWUsdGhpcy5naXRkaXI9cjtjb25zdCBpPXRoaXM7dGhpcy5Db25zdHJ1Y3RFbnRyeT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9mdWxscGF0aD10LHRoaXMuX3R5cGU9ITEsdGhpcy5fbW9kZT0hMSx0aGlzLl9zdGF0PSExLHRoaXMuX2NvbnRlbnQ9ITEsdGhpcy5fb2lkPSExfXR5cGUoKXt2YXIgdD10aGlzO3JldHVybiBldChmdW5jdGlvbiooKXtyZXR1cm4gaS50eXBlKHQpfSkoKX1tb2RlKCl7dmFyIHQ9dGhpcztyZXR1cm4gZXQoZnVuY3Rpb24qKCl7cmV0dXJuIGkubW9kZSh0KX0pKCl9c3RhdCgpe3ZhciB0PXRoaXM7cmV0dXJuIGV0KGZ1bmN0aW9uKigpe3JldHVybiBpLnN0YXQodCl9KSgpfWNvbnRlbnQoKXt2YXIgdD10aGlzO3JldHVybiBldChmdW5jdGlvbiooKXtyZXR1cm4gaS5jb250ZW50KHQpfSkoKX1vaWQoKXt2YXIgdD10aGlzO3JldHVybiBldChmdW5jdGlvbiooKXtyZXR1cm4gaS5vaWQodCl9KSgpfX19cmVhZGRpcih0KXt2YXIgZT10aGlzO3JldHVybiBldChmdW5jdGlvbiooKXtjb25zdCByPXQuX2Z1bGxwYXRoLHtmczpuLGRpcjppfT1lLG89eWllbGQgbi5yZWFkZGlyKE9iamVjdChmLmEpKGkscikpO3JldHVybiBudWxsPT09bz9udWxsOm8ubWFwKHQ9Pk9iamVjdChmLmEpKHIsdCkpfSkoKX10eXBlKHQpe3JldHVybiBldChmdW5jdGlvbiooKXtyZXR1cm4hMT09PXQuX3R5cGUmJih5aWVsZCB0LnN0YXQoKSksdC5fdHlwZX0pKCl9bW9kZSh0KXtyZXR1cm4gZXQoZnVuY3Rpb24qKCl7cmV0dXJuITE9PT10Ll9tb2RlJiYoeWllbGQgdC5zdGF0KCkpLHQuX21vZGV9KSgpfXN0YXQodCl7dmFyIGU9dGhpcztyZXR1cm4gZXQoZnVuY3Rpb24qKCl7aWYoITE9PT10Ll9zdGF0KXtjb25zdHtmczpyLGRpcjpufT1lO2xldCBpPXlpZWxkIHIubHN0YXQoYCR7bn0vJHt0Ll9mdWxscGF0aH1gKTtpZighaSl0aHJvdyBuZXcgRXJyb3IoYEVOT0VOVDogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSwgbHN0YXQgJyR7dC5fZnVsbHBhdGh9J2ApO2xldCBvPWkuaXNEaXJlY3RvcnkoKT8idHJlZSI6ImJsb2IiOyJibG9iIiE9PW98fGkuaXNGaWxlKCl8fGkuaXNTeW1ib2xpY0xpbmsoKXx8KG89InNwZWNpYWwiKSx0Ll90eXBlPW8saT1PYmplY3QoWi5hKShpKSx0Ll9tb2RlPWkubW9kZSwtMT09PWkuc2l6ZSYmdC5fYWN0dWFsU2l6ZSYmKGkuc2l6ZT10Ll9hY3R1YWxTaXplKSx0Ll9zdGF0PWl9cmV0dXJuIHQuX3N0YXR9KSgpfWNvbnRlbnQodCl7dmFyIGU9dGhpcztyZXR1cm4gZXQoZnVuY3Rpb24qKCl7aWYoITE9PT10Ll9jb250ZW50KXtjb25zdHtmczpyLGRpcjpufT1lO2lmKCJ0cmVlIj09PSh5aWVsZCB0LnR5cGUoKSkpdC5fY29udGVudD12b2lkIDA7ZWxzZXtjb25zdCBlPXlpZWxkIHIucmVhZChgJHtufS8ke3QuX2Z1bGxwYXRofWApO3QuX2FjdHVhbFNpemU9ZS5sZW5ndGgsdC5fc3RhdCYmLTE9PT10Ll9zdGF0LnNpemUmJih0Ll9zdGF0LnNpemU9dC5fYWN0dWFsU2l6ZSksdC5fY29udGVudD1lfX1yZXR1cm4gdC5fY29udGVudH0pKCl9b2lkKHQpe3ZhciBlPXRoaXM7cmV0dXJuIGV0KGZ1bmN0aW9uKigpe2lmKCExPT09dC5fb2lkKXtjb25zdHtmczpyLGdpdGRpcjpufT1lO2xldCBpO3lpZWxkIGEuYS5hY3F1aXJlKHtmczpyLGdpdGRpcjpufSxmdW5jdGlvbigpe3ZhciBlPWV0KGZ1bmN0aW9uKihlKXtjb25zdCByPWUuZW50cmllc01hcC5nZXQodC5fZnVsbHBhdGgpLG49eWllbGQgdC5zdGF0KCk7aWYoIXJ8fE9iamVjdChXLmEpKG4scikpe09iamVjdChZLmEpKGBJTkRFWCBDQUNIRSBNSVNTOiBjYWxjdWxhdGluZyBTSEEgZm9yICR7dC5fZnVsbHBhdGh9YCksdm9pZCAwPT09KHlpZWxkIHQuY29udGVudCgpKT9pPXZvaWQgMDooaT1PYmplY3QoSy5hKShWLmEud3JhcCh7dHlwZToiYmxvYiIsb2JqZWN0OnlpZWxkIHQuY29udGVudCgpfSkpLHImJmk9PT1yLm9pZCYmZS5pbnNlcnQoe2ZpbGVwYXRoOnQuX2Z1bGxwYXRoLHN0YXRzOm4sb2lkOml9KSl9ZWxzZSBpPXIub2lkfSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLHQuX29pZD1pfXJldHVybiB0Ll9vaWR9KSgpfX12YXIgbnQ9cigxOSk7ZnVuY3Rpb24gaXQoe2NvcmU6dD0iZGVmYXVsdCIsZGlyOmUsZ2l0ZGlyOnIsZnM6bn09e30pe2NvbnN0IGk9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGksbnQuYSx7dmFsdWU6ZnVuY3Rpb24oKXtyPXJ8fE9iamVjdChmLmEpKGUsIi5naXQiKSxuPWwuYS5nZXQodCkuZ2V0KCJmcyIpO2NvbnN0IGk9bmV3IHMuYShuKTtyZXR1cm4gbmV3IFEoe2ZzOmksZGlyOmUsZ2l0ZGlyOnJ9KX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxudC5iLHt2YWx1ZTpmdW5jdGlvbih7ZnM6dCxkaXI6ZSxnaXRkaXI6cn0pe3JldHVybiBuZXcgcnQoe2ZzOnQsZGlyOmUsZ2l0ZGlyOnJ9KX19KSxPYmplY3QuZnJlZXplKGkpLGl9dmFyIG90PXIoMzIpO2Z1bmN0aW9uIGF0KHQsZSxyLG4saSxvLGEpe3RyeXt2YXIgcz10W29dKGEpLHU9cy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCByKHQpfXMuZG9uZT9lKHUpOlByb21pc2UucmVzb2x2ZSh1KS50aGVuKG4saSl9ZnVuY3Rpb24gc3QodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obixpKXt2YXIgbz10LmFwcGx5KGUscik7ZnVuY3Rpb24gYSh0KXthdChvLG4saSxhLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7YXQobyxuLGksYSxzLCJ0aHJvdyIsdCl9YSh2b2lkIDApfSl9fWZ1bmN0aW9uIHV0KHQpe3JldHVybiBjdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gY3QoKXtyZXR1cm4oY3Q9c3QoZnVuY3Rpb24qKHtjb3JlOnQ9ImRlZmF1bHQiLGRpcjplLGdpdGRpcjpyPU9iamVjdChmLmEpKGUsIi5naXQiKSxmczpuPWwuYS5nZXQodCkuZ2V0KCJmcyIpLGVtaXR0ZXI6aT1sLmEuZ2V0KHQpLmdldCgiZW1pdHRlciIpLGVtaXR0ZXJQcmVmaXg6bz0iIixyZW1vdGU6Yz0ib3JpZ2luIixyZWY6ZCxmaWxlcGF0aHM6aD1bIi4iXSxwYXR0ZXJuOnA9bnVsbCxub0NoZWNrb3V0Omc9ITF9KXt0cnl7Y29uc3QgdD1uZXcgcy5hKG4pO2lmKHZvaWQgMD09PWQpdGhyb3cgbmV3IHUuYih1LmEuTWlzc2luZ1JlcXVpcmVkUGFyYW1ldGVyRXJyb3Ise2Z1bmN0aW9uOiJjaGVja291dCIscGFyYW1ldGVyOiJyZWYifSk7bGV0IGwsbT0iIjtwJiYoKG09TChwKSkmJihwPXAucmVwbGFjZShtKyIvIiwiIikpLGw9RCgpKHAse2dsb2JzdGFyOiEwLGV4dGVuZGVkOiEwfSkpO2NvbnN0IHk9aC5tYXAodD0+T2JqZWN0KGYuYSkodCxtKSk7bGV0IHY7dHJ5e3Y9eWllbGQgay5hLnJlc29sdmUoe2ZzOnQsZ2l0ZGlyOnIscmVmOmR9KX1jYXRjaChlKXtjb25zdCBuPWAke2N9LyR7ZH1gO3Y9eWllbGQgay5hLnJlc29sdmUoe2ZzOnQsZ2l0ZGlyOnIscmVmOm59KSx5aWVsZCBTKHtnaXRkaXI6cixmczp0LHBhdGg6YGJyYW5jaC4ke2R9LnJlbW90ZWAsdmFsdWU6YCR7Y31gfSkseWllbGQgUyh7Z2l0ZGlyOnIsZnM6dCxwYXRoOmBicmFuY2guJHtkfS5tZXJnZWAsdmFsdWU6YHJlZnMvaGVhZHMvJHtkfWB9KSx5aWVsZCB0LndyaXRlKGAke3J9L3JlZnMvaGVhZHMvJHtkfWAsdisiXG4iKX1jb25zdCB3PXlpZWxkIGsuYS5leHBhbmQoe2ZzOnQsZ2l0ZGlyOnIscmVmOmR9KTtpZighZyl7bGV0IG49MDt5aWVsZCBhLmEuYWNxdWlyZSh7ZnM6dCxnaXRkaXI6cn0sZnVuY3Rpb24oKXt2YXIgYT1zdChmdW5jdGlvbiooYSl7Zm9yKGNvbnN0IHIgb2YgYSl0cnl7eWllbGQgdC5ybShPYmplY3QoZi5hKShlLHIucGF0aCkpLGkmJmkuZW1pdChgJHtvfXByb2dyZXNzYCx7cGhhc2U6IlVwZGF0aW5nIHdvcmtkaXIiLGxvYWRlZDorK24sbGVuZ3RoQ29tcHV0YWJsZTohMX0pfWNhdGNoKHQpe31hLmNsZWFyKCk7dHJ5e3lpZWxkIE9iamVjdChvdC5hKSh7ZnM6dCxkaXI6ZSxnaXRkaXI6cix0cmVlczpbT2JqZWN0KHEuYSkoe3JlZjpkfSksaXQoKV0sbWFwOihzPXN0KGZ1bmN0aW9uKihyLFtzLGNdKXtpZigheS5zb21lKHQ9Pkcocix0KSkpcmV0dXJuIG51bGw7aWYoIi4iPT09cilyZXR1cm47aWYoIXMpcmV0dXJuO2lmKGwpe2xldCB0PSExO2Zvcihjb25zdCBlIG9mIHkpe2NvbnN0IG49ci5yZXBsYWNlKGUrIi8iLCIiKTtpZihsLnJlZ2V4LnRlc3Qobikpe3Q9ITA7YnJlYWt9fWlmKCF0KXJldHVybn1jb25zdCBmPWAke2V9LyR7cn1gO3N3aXRjaCh5aWVsZCBzLnR5cGUoKSl7Y2FzZSJ0cmVlIjpjfHwoeWllbGQgdC5ta2RpcihmKSk7YnJlYWs7Y2FzZSJjb21taXQiOmNvbnNvbGUubG9nKG5ldyB1LmIodS5hLk5vdEltcGxlbWVudGVkRmFpbCx7dGhpbmc6InN1Ym1vZHVsZSBzdXBwb3J0In0pKTticmVhaztjYXNlImJsb2IiOntpZigzMzE4OD09PSh5aWVsZCBzLm1vZGUoKSkpeWllbGQgdC53cml0ZShmLHlpZWxkIHMuY29udGVudCgpKTtlbHNlIGlmKDMzMjYxPT09KHlpZWxkIHMubW9kZSgpKSl5aWVsZCB0LndyaXRlKGYseWllbGQgcy5jb250ZW50KCkse21vZGU6NTExfSk7ZWxzZXtpZig0MDk2MCE9PSh5aWVsZCBzLm1vZGUoKSkpdGhyb3cgbmV3IHUuYih1LmEuSW50ZXJuYWxGYWlsLHttZXNzYWdlOmBJbnZhbGlkIG1vZGUgIiR7eWllbGQgcy5tb2RlKCl9IiBkZXRlY3RlZCBpbiBibG9iICR7eWllbGQgcy5vaWQoKX1gfSk7eWllbGQgdC53cml0ZWxpbmsoZix5aWVsZCBzLmNvbnRlbnQoKSl9Y29uc3QgZT15aWVsZCB0LmxzdGF0KGYpOzMzMjYxPT09KHlpZWxkIHMubW9kZSgpKSYmKGUubW9kZT0zMzI2MSksYS5pbnNlcnQoe2ZpbGVwYXRoOnIsc3RhdHM6ZSxvaWQ6eWllbGQgcy5vaWQoKX0pLGkmJmkuZW1pdChgJHtvfXByb2dyZXNzYCx7cGhhc2U6IlVwZGF0aW5nIHdvcmtkaXIiLGxvYWRlZDorK24sbGVuZ3RoQ29tcHV0YWJsZTohMX0pO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IHUuYih1LmEuT2JqZWN0VHlwZUFzc2VydGlvbkluVHJlZUZhaWwse3R5cGU6eWllbGQgcy50eXBlKCksb2lkOnlpZWxkIHMub2lkKCksZW50cnlwYXRoOnJ9KX19KSxmdW5jdGlvbih0LGUpe3JldHVybiBzLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSl9Y2F0Y2godCl7dGhyb3cgdC5jb2RlPT09dS5hLlJlYWRPYmplY3RGYWlsJiZ0LmRhdGEub2lkPT09dj9uZXcgdS5iKHUuYS5Db21taXROb3RGZXRjaGVkRXJyb3Ise3JlZjpkLG9pZDp2fSk6dH12YXIgc30pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gYS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKX1jb25zdCBiPXcuc3RhcnRzV2l0aCgicmVmcy9oZWFkcyIpP2ByZWY6ICR7d31gOnY7eWllbGQgdC53cml0ZShgJHtyfS9IRUFEYCxgJHtifVxuYCl9Y2F0Y2godCl7dGhyb3cgdC5jYWxsZXI9ImdpdC5jaGVja291dCIsdH19KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBmdD1yKDYwKSxsdD1yKDMzKSxkdD1yKDUxKTtmdW5jdGlvbiBodCh0LGUscixuLGksbyxhKXt0cnl7dmFyIHM9dFtvXShhKSx1PXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZSh1KTpQcm9taXNlLnJlc29sdmUodSkudGhlbihuLGkpfWZ1bmN0aW9uIHB0KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4saSl7dmFyIG89dC5hcHBseShlLHIpO2Z1bmN0aW9uIGEodCl7aHQobyxuLGksYSxzLCJuZXh0Iix0KX1mdW5jdGlvbiBzKHQpe2h0KG8sbixpLGEscywidGhyb3ciLHQpfWEodm9pZCAwKX0pfX1jbGFzcyBndHtjb25zdHJ1Y3Rvcih7ZnM6dCxnaXRkaXI6ZX0pe2NvbnN0IHI9bmV3IHMuYSh0KTt0aGlzLnRyZWVQcm9taXNlPWEuYS5hY3F1aXJlKHtmczpyLGdpdGRpcjplfSxmdW5jdGlvbigpe3ZhciB0PXB0KGZ1bmN0aW9uKih0KXtyZXR1cm4gT2JqZWN0KGR0LmEpKHQuZW50cmllcyl9KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSk7Y29uc3Qgbj10aGlzO3RoaXMuQ29uc3RydWN0RW50cnk9Y2xhc3N7Y29uc3RydWN0b3IodCl7T2JqZWN0LmFzc2lnbih0aGlzLHQpfXBvcHVsYXRlU3RhdCgpe3ZhciB0PXRoaXM7cmV0dXJuIHB0KGZ1bmN0aW9uKigpe3QuZXhpc3RzJiYoeWllbGQgbi5wb3B1bGF0ZVN0YXQodCkpfSkoKX1wb3B1bGF0ZUNvbnRlbnQoKXt2YXIgdD10aGlzO3JldHVybiBwdChmdW5jdGlvbiooKXt0LmV4aXN0cyYmKHlpZWxkIG4ucG9wdWxhdGVDb250ZW50KHQpKX0pKCl9cG9wdWxhdGVIYXNoKCl7dmFyIHQ9dGhpcztyZXR1cm4gcHQoZnVuY3Rpb24qKCl7dC5leGlzdHMmJih5aWVsZCBuLnBvcHVsYXRlSGFzaCh0KSl9KSgpfX19cmVhZGRpcih0KXt2YXIgZT10aGlzO3JldHVybiBwdChmdW5jdGlvbiooKXtpZighdC5leGlzdHMpcmV0dXJuW107Y29uc3Qgcj10LmZ1bGxwYXRoLG49KHlpZWxkIGUudHJlZVByb21pc2UpLmdldChyKTtpZighbilyZXR1cm4gbnVsbDtpZigiYmxvYiI9PT1uLnR5cGUpcmV0dXJuIG51bGw7aWYoInRyZWUiIT09bi50eXBlKXRocm93IG5ldyBFcnJvcihgRU5PVERJUjogbm90IGEgZGlyZWN0b3J5LCBzY2FuZGlyICcke3J9J2ApO3JldHVybiBuLmNoaWxkcmVuLm1hcCh0PT4oe2Z1bGxwYXRoOnQuZnVsbHBhdGgsYmFzZW5hbWU6dC5iYXNlbmFtZSxleGlzdHM6ITB9KSkuc29ydCgodCxlKT0+T2JqZWN0KGx0LmEpKHQuZnVsbHBhdGgsZS5mdWxscGF0aCkpfSkoKX1wb3B1bGF0ZVN0YXQodCl7dmFyIGU9dGhpcztyZXR1cm4gcHQoZnVuY3Rpb24qKCl7Y29uc3Qgcj0oeWllbGQgZS50cmVlUHJvbWlzZSkuZ2V0KHQuZnVsbHBhdGgpO2lmKCFyKXRocm93IG5ldyBFcnJvcihgRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5LCBsc3RhdCAnJHt0LmZ1bGxwYXRofSdgKTtjb25zdCBuPSJ0cmVlIj09PXIudHlwZT97fTpPYmplY3QoWi5hKShyLm1ldGFkYXRhKTtPYmplY3QuYXNzaWduKHQse3R5cGU6ci50eXBlfSxuKX0pKCl9cG9wdWxhdGVDb250ZW50KHQpe3JldHVybiBwdChmdW5jdGlvbiooKXt9KSgpfXBvcHVsYXRlSGFzaCh0KXt2YXIgZT10aGlzO3JldHVybiBwdChmdW5jdGlvbiooKXtjb25zdCByPSh5aWVsZCBlLnRyZWVQcm9taXNlKS5nZXQodC5mdWxscGF0aCk7aWYoIXIpcmV0dXJuIG51bGw7aWYoInRyZWUiPT09ci50eXBlKXRocm93IG5ldyBFcnJvcigiRUlTRElSOiBpbGxlZ2FsIG9wZXJhdGlvbiBvbiBhIGRpcmVjdG9yeSwgcmVhZCIpO09iamVjdC5hc3NpZ24odCx7b2lkOnIubWV0YWRhdGEub2lkfSl9KSgpfX1mdW5jdGlvbiBtdCh0LGUscixuLGksbyxhKXt0cnl7dmFyIHM9dFtvXShhKSx1PXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZSh1KTpQcm9taXNlLnJlc29sdmUodSkudGhlbihuLGkpfWZ1bmN0aW9uIHl0KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4saSl7dmFyIG89dC5hcHBseShlLHIpO2Z1bmN0aW9uIGEodCl7bXQobyxuLGksYSxzLCJuZXh0Iix0KX1mdW5jdGlvbiBzKHQpe210KG8sbixpLGEscywidGhyb3ciLHQpfWEodm9pZCAwKX0pfX1jbGFzcyB2dHtjb25zdHJ1Y3Rvcih7ZnM6dCxnaXRkaXI6ZX0pe2NvbnN0IHI9bmV3IHMuYSh0KTt0aGlzLnRyZWVQcm9taXNlPWEuYS5hY3F1aXJlKHtmczpyLGdpdGRpcjplfSxmdW5jdGlvbigpe3ZhciB0PXl0KGZ1bmN0aW9uKih0KXtyZXR1cm4gT2JqZWN0KGR0LmEpKHQuZW50cmllcyl9KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSk7Y29uc3Qgbj10aGlzO3RoaXMuQ29uc3RydWN0RW50cnk9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fZnVsbHBhdGg9dCx0aGlzLl90eXBlPSExLHRoaXMuX21vZGU9ITEsdGhpcy5fc3RhdD0hMSx0aGlzLl9vaWQ9ITF9dHlwZSgpe3ZhciB0PXRoaXM7cmV0dXJuIHl0KGZ1bmN0aW9uKigpe3JldHVybiBuLnR5cGUodCl9KSgpfW1vZGUoKXt2YXIgdD10aGlzO3JldHVybiB5dChmdW5jdGlvbiooKXtyZXR1cm4gbi5tb2RlKHQpfSkoKX1zdGF0KCl7dmFyIHQ9dGhpcztyZXR1cm4geXQoZnVuY3Rpb24qKCl7cmV0dXJuIG4uc3RhdCh0KX0pKCl9Y29udGVudCgpe3ZhciB0PXRoaXM7cmV0dXJuIHl0KGZ1bmN0aW9uKigpe3JldHVybiBuLmNvbnRlbnQodCl9KSgpfW9pZCgpe3ZhciB0PXRoaXM7cmV0dXJuIHl0KGZ1bmN0aW9uKigpe3JldHVybiBuLm9pZCh0KX0pKCl9fX1yZWFkZGlyKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHl0KGZ1bmN0aW9uKigpe2NvbnN0IHI9dC5fZnVsbHBhdGgsbj0oeWllbGQgZS50cmVlUHJvbWlzZSkuZ2V0KHIpO2lmKCFuKXJldHVybiBudWxsO2lmKCJibG9iIj09PW4udHlwZSlyZXR1cm4gbnVsbDtpZigidHJlZSIhPT1uLnR5cGUpdGhyb3cgbmV3IEVycm9yKGBFTk9URElSOiBub3QgYSBkaXJlY3RvcnksIHNjYW5kaXIgJyR7cn0nYCk7cmV0dXJuIG4uY2hpbGRyZW4ubWFwKHQ9PnQuZnVsbHBhdGgpLnNvcnQoKHQsZSk9Pk9iamVjdChsdC5hKSh0LmZ1bGxwYXRoLGUuZnVsbHBhdGgpKX0pKCl9dHlwZSh0KXtyZXR1cm4geXQoZnVuY3Rpb24qKCl7cmV0dXJuITE9PT10Ll90eXBlJiYoeWllbGQgdC5zdGF0KCkpLHQuX3R5cGV9KSgpfW1vZGUodCl7cmV0dXJuIHl0KGZ1bmN0aW9uKigpe3JldHVybiExPT09dC5fbW9kZSYmKHlpZWxkIHQuc3RhdCgpKSx0Ll9tb2RlfSkoKX1zdGF0KHQpe3ZhciBlPXRoaXM7cmV0dXJuIHl0KGZ1bmN0aW9uKigpe2lmKCExPT09dC5fc3RhdCl7Y29uc3Qgcj0oeWllbGQgZS50cmVlUHJvbWlzZSkuZ2V0KHQuX2Z1bGxwYXRoKTtpZighcil0aHJvdyBuZXcgRXJyb3IoYEVOT0VOVDogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSwgbHN0YXQgJyR7dC5fZnVsbHBhdGh9J2ApO2NvbnN0IG49InRyZWUiPT09ci50eXBlP3t9Ok9iamVjdChaLmEpKHIubWV0YWRhdGEpO3QuX3R5cGU9ci50eXBlLHQuX21vZGU9bi5tb2RlLCJ0cmVlIj09PXIudHlwZT90Ll9zdGF0PXZvaWQgMDp0Ll9zdGF0PW59cmV0dXJuIHQuX3N0YXR9KSgpfWNvbnRlbnQodCl7cmV0dXJuIHl0KGZ1bmN0aW9uKigpe30pKCl9b2lkKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHl0KGZ1bmN0aW9uKigpe2lmKCExPT09dC5fb2lkKXtjb25zdCByPSh5aWVsZCBlLnRyZWVQcm9taXNlKS5nZXQodC5fZnVsbHBhdGgpO3QuX29pZD1yLm1ldGFkYXRhLm9pZH1yZXR1cm4gdC5fb2lkfSkoKX19ZnVuY3Rpb24gd3Qoe2NvcmU6dD0iZGVmYXVsdCIsZGlyOmUsZ2l0ZGlyOnIsZnM6bn09e30pe2NvbnN0IGk9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGksbnQuYSx7dmFsdWU6ZnVuY3Rpb24oKXtyPXJ8fE9iamVjdChmLmEpKGUsIi5naXQiKSxuPWwuYS5nZXQodCkuZ2V0KCJmcyIpO2NvbnN0IGk9bmV3IHMuYShuKTtyZXR1cm4gbmV3IGd0KHtmczppLGdpdGRpcjpyfSl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGksbnQuYix7dmFsdWU6ZnVuY3Rpb24oe2ZzOnQsZ2l0ZGlyOmV9KXtyZXR1cm4gbmV3IHZ0KHtmczp0LGdpdGRpcjplfSl9fSksT2JqZWN0LmZyZWV6ZShpKSxpfWZ1bmN0aW9uIGJ0KHQsZSxyLG4saSxvLGEpe3RyeXt2YXIgcz10W29dKGEpLHU9cy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCByKHQpfXMuZG9uZT9lKHUpOlByb21pc2UucmVzb2x2ZSh1KS50aGVuKG4saSl9ZnVuY3Rpb24gX3QodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obixpKXt2YXIgbz10LmFwcGx5KGUscik7ZnVuY3Rpb24gYSh0KXtidChvLG4saSxhLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7YnQobyxuLGksYSxzLCJ0aHJvdyIsdCl9YSh2b2lkIDApfSl9fWZ1bmN0aW9uIHh0KHQpe3JldHVybiBFdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gRXQoKXtyZXR1cm4oRXQ9X3QoZnVuY3Rpb24qKHtjb3JlOnQ9ImRlZmF1bHQiLGRpcjplLGdpdGRpcjpyPU9iamVjdChmLmEpKGUsIi5naXQiKSxmczpuPWwuYS5nZXQodCkuZ2V0KCJmcyIpLGVtaXR0ZXI6aT1sLmEuZ2V0KHQpLmdldCgiZW1pdHRlciIpLGVtaXR0ZXJQcmVmaXg6bz0iIixyZW1vdGU6Yz0ib3JpZ2luIixyZWY6ZD0iSEVBRCIsZmlsZXBhdGhzOmg9WyIuIl0sbm9DaGVja291dDpwPSExLG5vVXBkYXRlSGVhZDpnPSExLGRyeVJ1bjptPSExLGRlYnVnOnk9ITEsZm9yY2U6dj0hMX0pe3RyeXtjb25zdCB0PW5ldyBzLmEobik7bGV0IGY7dHJ5e2Y9eWllbGQgay5hLnJlc29sdmUoe2ZzOnQsZ2l0ZGlyOnIscmVmOmR9KX1jYXRjaChlKXtpZigiSEVBRCI9PT1kKXRocm93IGU7Y29uc3Qgbj1gJHtjfS8ke2R9YDtmPXlpZWxkIGsuYS5yZXNvbHZlKHtmczp0LGdpdGRpcjpyLHJlZjpufSkseWllbGQgUyh7Z2l0ZGlyOnIsZnM6dCxwYXRoOmBicmFuY2guJHtkfS5yZW1vdGVgLHZhbHVlOmAke2N9YH0pLHlpZWxkIFMoe2dpdGRpcjpyLGZzOnQscGF0aDpgYnJhbmNoLiR7ZH0ubWVyZ2VgLHZhbHVlOmByZWZzL2hlYWRzLyR7ZH1gfSkseWllbGQgdC53cml0ZShgJHtyfS9yZWZzL2hlYWRzLyR7ZH1gLGYrIlxuIil9aWYoIXApe2xldCBuO3RyeXtuPXlpZWxkIGZ1bmN0aW9uKHQpe3JldHVybiBrdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KHtmczp0LGRpcjplLGdpdGRpcjpyLHJlZjpkLGZvcmNlOnYsZmlsZXBhdGhzOmgsZW1pdHRlcjppLGVtaXR0ZXJQcmVmaXg6b30pfWNhdGNoKHQpe3Rocm93IHQuY29kZT09PXUuYS5SZWFkT2JqZWN0RmFpbCYmdC5kYXRhLm9pZD09PWY/bmV3IHUuYih1LmEuQ29tbWl0Tm90RmV0Y2hlZEVycm9yLHtyZWY6ZCxvaWQ6Zn0pOnR9Y29uc3Qgcz1uLmZpbHRlcigoW3RdKT0+ImNvbmZsaWN0Ij09PXQpLm1hcCgoW3QsZV0pPT5lKTtpZihzLmxlbmd0aD4wKXRocm93IG5ldyB1LmIodS5hLkNoZWNrb3V0Q29uZmxpY3RFcnJvcix7ZmlsZXBhdGhzOnN9KTtjb25zdCBjPW4uZmlsdGVyKChbdF0pPT4iZXJyb3IiPT09dCkubWFwKChbdCxlXSk9PmUpO2lmKGMubGVuZ3RoPjApdGhyb3cgbmV3IHUuYih1LmEuSW50ZXJuYWxGYWlsLHttZXNzYWdlOmN9KTtpZihtKXJldHVybiB5P246dm9pZCAwO2xldCBsPTA7Y29uc3QgcD1uLmxlbmd0aDt5aWVsZCBhLmEuYWNxdWlyZSh7ZnM6dCxnaXRkaXI6cn0sZnVuY3Rpb24oKXt2YXIgcj1fdChmdW5jdGlvbioocil7eWllbGQgUHJvbWlzZS5hbGwobi5maWx0ZXIoKFt0XSk9PiJkZWxldGUiPT09dHx8ImRlbGV0ZS1pbmRleCI9PT10KS5tYXAoZnVuY3Rpb24oKXt2YXIgbj1fdChmdW5jdGlvbiooW24sYV0pe2NvbnN0IHM9YCR7ZX0vJHthfWA7ImRlbGV0ZSI9PT1uJiYoeWllbGQgdC5ybShzKSksci5kZWxldGUoe2ZpbGVwYXRoOmF9KSxpJiZpLmVtaXQoYCR7b31wcm9ncmVzc2Ase3BoYXNlOiJVcGRhdGluZyB3b3JrZGlyIixsb2FkZWQ6KytsLHRvdGFsOnB9KX0pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSl9KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSk7Zm9yKGNvbnN0W3IsYV1vZiBuKWlmKCJybWRpciI9PT1yKXtjb25zdCByPWAke2V9LyR7YX1gO3RyeXt5aWVsZCB0LnJtZGlyKHIpLGkmJmkuZW1pdChgJHtvfXByb2dyZXNzYCx7cGhhc2U6IlVwZGF0aW5nIHdvcmtkaXIiLGxvYWRlZDorK2wsdG90YWw6cH0pfWNhdGNoKHQpe2lmKCJFTk9URU1QVFkiIT09dC5jb2RlKXRocm93IHQ7Y29uc29sZS5sb2coYERpZCBub3QgZGVsZXRlICR7YX0gYmVjYXVzZSBkaXJlY3RvcnkgaXMgbm90IGVtcHR5YCl9fXlpZWxkIFByb21pc2UuYWxsKG4uZmlsdGVyKChbdF0pPT4ibWtkaXIiPT09dCkubWFwKGZ1bmN0aW9uKCl7dmFyIHI9X3QoZnVuY3Rpb24qKFtyLG5dKXtjb25zdCBhPWAke2V9LyR7bn1gO3lpZWxkIHQubWtkaXIoYSksaSYmaS5lbWl0KGAke299cHJvZ3Jlc3NgLHtwaGFzZToiVXBkYXRpbmcgd29ya2RpciIsbG9hZGVkOisrbCx0b3RhbDpwfSl9KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSkpLHlpZWxkIGEuYS5hY3F1aXJlKHtmczp0LGdpdGRpcjpyfSxmdW5jdGlvbigpe3ZhciBhPV90KGZ1bmN0aW9uKihhKXt5aWVsZCBQcm9taXNlLmFsbChuLmZpbHRlcigoW3RdKT0+ImNyZWF0ZSI9PT10fHwiY3JlYXRlLWluZGV4Ij09PXR8fCJ1cGRhdGUiPT09dCkubWFwKGZ1bmN0aW9uKCl7dmFyIG49X3QoZnVuY3Rpb24qKFtuLHMsYyxmLGRdKXtjb25zdCBoPWAke2V9LyR7c31gO3RyeXtpZigiY3JlYXRlLWluZGV4IiE9PW4pe2NvbnN0e29iamVjdDplfT15aWVsZCBPYmplY3Qoai5hKSh7ZnM6dCxnaXRkaXI6cixvaWQ6Y30pO2lmKGQmJih5aWVsZCB0LnJtKGgpKSwzMzE4OD09PWYpeWllbGQgdC53cml0ZShoLGUpO2Vsc2UgaWYoMzMyNjE9PT1mKXlpZWxkIHQud3JpdGUoaCxlLHttb2RlOjUxMX0pO2Vsc2V7aWYoNDA5NjAhPT1mKXRocm93IG5ldyB1LmIodS5hLkludGVybmFsRmFpbCx7bWVzc2FnZTpgSW52YWxpZCBtb2RlIDBvJHtmLnRvU3RyaW5nKDgpfSBkZXRlY3RlZCBpbiBibG9iICR7Y31gfSk7eWllbGQgdC53cml0ZWxpbmsoaCxlKX19Y29uc3QgZT15aWVsZCB0LmxzdGF0KGgpOzMzMjYxPT09ZiYmKGUubW9kZT00OTMpLGEuaW5zZXJ0KHtmaWxlcGF0aDpzLHN0YXRzOmUsb2lkOmN9KSxpJiZpLmVtaXQoYCR7b31wcm9ncmVzc2Ase3BoYXNlOiJVcGRhdGluZyB3b3JrZGlyIixsb2FkZWQ6KytsLHRvdGFsOnB9KX1jYXRjaCh0KXtjb25zb2xlLmxvZyh0KX19KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSkpfSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpfWlmKCJIRUFEIj09PWR8fCFnKXtjb25zdCBlPXlpZWxkIGsuYS5leHBhbmQoe2ZzOnQsZ2l0ZGlyOnIscmVmOmR9KTtlLnN0YXJ0c1dpdGgoInJlZnMvaGVhZHMiKT95aWVsZCBrLmEud3JpdGVTeW1ib2xpY1JlZih7ZnM6dCxnaXRkaXI6cixyZWY6IkhFQUQiLHZhbHVlOmV9KTp5aWVsZCBrLmEud3JpdGVSZWYoe2ZzOnQsZ2l0ZGlyOnIscmVmOiJIRUFEIix2YWx1ZTpmfSl9fWNhdGNoKHQpe3Rocm93IHQuY2FsbGVyPSJnaXQuY2hlY2tvdXQiLHR9fSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBrdCgpe3JldHVybihrdD1fdChmdW5jdGlvbiooe2ZzOnQsZGlyOmUsZ2l0ZGlyOnIscmVmOm4sZm9yY2U6aSxmaWxlcGF0aHM6byxlbWl0dGVyOmEsZW1pdHRlclByZWZpeDpzfSl7bGV0IGM9MDtyZXR1cm4gT2JqZWN0KG90LmEpKHtmczp0LGRpcjplLGdpdGRpcjpyLHRyZWVzOltPYmplY3QocS5hKSh7cmVmOm59KSxpdCgpLHd0KCldLG1hcDoobD1fdChmdW5jdGlvbioodCxbZSxyLG5dKXtpZigiLiIhPT10KXtpZighby5zb21lKGU9PkcodCxlKSkpcmV0dXJuIG51bGw7c3dpdGNoKGEmJmEuZW1pdChgJHtzfXByb2dyZXNzYCx7cGhhc2U6IkFuYWx5emluZyB3b3JrZGlyIixsb2FkZWQ6KytjLGxlbmd0aENvbXB1dGFibGU6ITF9KSxbISFuLCEhZSwhIXJdLm1hcChOdW1iZXIpLmpvaW4oIiIpKXtjYXNlIjAwMCI6cmV0dXJuO2Nhc2UiMDAxIjpyZXR1cm4gaSYmby5pbmNsdWRlcyh0KT9bImRlbGV0ZSIsdF06dm9pZCAwO2Nhc2UiMDEwIjpzd2l0Y2goeWllbGQgZS50eXBlKCkpe2Nhc2UidHJlZSI6cmV0dXJuWyJta2RpciIsdF07Y2FzZSJibG9iIjpyZXR1cm5bImNyZWF0ZSIsdCx5aWVsZCBlLm9pZCgpLHlpZWxkIGUubW9kZSgpXTtjYXNlImNvbW1pdCI6cmV0dXJuIHZvaWQgY29uc29sZS5sb2cobmV3IHUuYih1LmEuTm90SW1wbGVtZW50ZWRGYWlsLHt0aGluZzoic3VibW9kdWxlIHN1cHBvcnQifSkpO2RlZmF1bHQ6cmV0dXJuWyJlcnJvciIsYG5ldyBlbnRyeSBVbmhhbmRsZWQgdHlwZSAke3lpZWxkIGUudHlwZSgpfWBdfWNhc2UiMDExIjpzd2l0Y2goYCR7eWllbGQgZS50eXBlKCl9LSR7eWllbGQgci50eXBlKCl9YCl7Y2FzZSJ0cmVlLXRyZWUiOnJldHVybjtjYXNlInRyZWUtYmxvYiI6Y2FzZSJibG9iLXRyZWUiOnJldHVyblsiY29uZmxpY3QiLHRdO2Nhc2UiYmxvYi1ibG9iIjpyZXR1cm4oeWllbGQgZS5vaWQoKSkhPT0oeWllbGQgci5vaWQoKSk/aT9bInVwZGF0ZSIsdCx5aWVsZCBlLm9pZCgpLHlpZWxkIGUubW9kZSgpLCh5aWVsZCBlLm1vZGUoKSkhPT0oeWllbGQgci5tb2RlKCkpXTpbImNvbmZsaWN0Iix0XTooeWllbGQgZS5tb2RlKCkpIT09KHlpZWxkIHIubW9kZSgpKT9pP1sidXBkYXRlIix0LHlpZWxkIGUub2lkKCkseWllbGQgZS5tb2RlKCksITBdOlsiY29uZmxpY3QiLHRdOlsiY3JlYXRlLWluZGV4Iix0LHlpZWxkIGUub2lkKCkseWllbGQgZS5tb2RlKCldO2Nhc2UiY29tbWl0LXRyZWUiOnJldHVybiB2b2lkIGNvbnNvbGUubG9nKG5ldyB1LmIodS5hLk5vdEltcGxlbWVudGVkRmFpbCx7dGhpbmc6InN1Ym1vZHVsZSBzdXBwb3J0In0pKTtjYXNlImNvbW1pdC1ibG9iIjpyZXR1cm5bImNvbmZsaWN0Iix0XTtkZWZhdWx0OnJldHVyblsiZXJyb3IiLGBuZXcgZW50cnkgVW5oYW5kbGVkIHR5cGUgJHtlLnR5cGV9YF19Y2FzZSIxMDAiOnJldHVyblsiZGVsZXRlLWluZGV4Iix0XTtjYXNlIjEwMSI6c3dpdGNoKHlpZWxkIG4udHlwZSgpKXtjYXNlInRyZWUiOnJldHVyblsicm1kaXIiLHRdO2Nhc2UiYmxvYiI6cmV0dXJuKHlpZWxkIG4ub2lkKCkpIT09KHlpZWxkIHIub2lkKCkpP2k/WyJkZWxldGUiLHRdOlsiY29uZmxpY3QiLHRdOlsiZGVsZXRlIix0XTtkZWZhdWx0OnJldHVybltgZGVsZXRlIGVudHJ5IFVuaGFuZGxlZCB0eXBlICR7eWllbGQgbi50eXBlKCl9YF19Y2FzZSIxMTAiOmNhc2UiMTExIjpzd2l0Y2goYCR7eWllbGQgbi50eXBlKCl9LSR7eWllbGQgZS50eXBlKCl9YCl7Y2FzZSJ0cmVlLXRyZWUiOnJldHVybjtjYXNlImJsb2ItYmxvYiI6aWYocil7aWYoKHlpZWxkIHIub2lkKCkpIT09KHlpZWxkIG4ub2lkKCkpJiYoeWllbGQgci5vaWQoKSkhPT0oeWllbGQgZS5vaWQoKSkpcmV0dXJuIGk/WyJ1cGRhdGUiLHQseWllbGQgZS5vaWQoKSx5aWVsZCBlLm1vZGUoKSwoeWllbGQgZS5tb2RlKCkpIT09KHlpZWxkIHIubW9kZSgpKV06WyJjb25mbGljdCIsdF19ZWxzZSBpZihpKXJldHVyblsidXBkYXRlIix0LHlpZWxkIGUub2lkKCkseWllbGQgZS5tb2RlKCksKHlpZWxkIGUubW9kZSgpKSE9PSh5aWVsZCBuLm1vZGUoKSldO3JldHVybih5aWVsZCBlLm1vZGUoKSkhPT0oeWllbGQgbi5tb2RlKCkpP1sidXBkYXRlIix0LHlpZWxkIGUub2lkKCkseWllbGQgZS5tb2RlKCksITBdOih5aWVsZCBlLm9pZCgpKSE9PSh5aWVsZCBuLm9pZCgpKT9bInVwZGF0ZSIsdCx5aWVsZCBlLm9pZCgpLHlpZWxkIGUubW9kZSgpLCExXTp2b2lkIDA7Y2FzZSJ0cmVlLWJsb2IiOnJldHVyblsidXBkYXRlLWRpci10by1ibG9iIix0LHlpZWxkIGUub2lkKCldO2Nhc2UiYmxvYi10cmVlIjpyZXR1cm5bInVwZGF0ZS1ibG9iLXRvLXRyZWUiLHRdO2RlZmF1bHQ6cmV0dXJuWyJlcnJvciIsYHVwZGF0ZSBlbnRyeSBVbmhhbmRsZWQgdHlwZSAke3lpZWxkIG4udHlwZSgpfS0ke3lpZWxkIGUudHlwZSgpfWBdfX19fSksZnVuY3Rpb24odCxlKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxyZWR1Y2U6KGY9X3QoZnVuY3Rpb24qKHQsZSl7cmV0dXJuIGU9T2JqZWN0KGZ0LmEpKGUpLHQ/dCYmInJtZGlyIj09PXRbMF0/KGUucHVzaCh0KSxlKTooZS51bnNoaWZ0KHQpLGUpOmV9KSxmdW5jdGlvbih0LGUpe3JldHVybiBmLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSk7dmFyIGYsbH0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIE90PXIoNjgpLGp0PXIoMzApLFB0PXIoNyksU3Q9cig0MSk7ZnVuY3Rpb24gUnQodCxlLHIsbixpLG8sYSl7dHJ5e3ZhciBzPXRbb10oYSksdT1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UodSk6UHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4obixpKX1mdW5jdGlvbiAkdCgpe3ZhciB0O3JldHVybiB0PWZ1bmN0aW9uKih7ZnM6dCxnaXRkaXI6ZSxvaWQ6cn0pe2NvbnN0IG49bmV3IHMuYSh0KSxpPWBvYmplY3RzLyR7ci5zbGljZSgwLDIpfS8ke3Iuc2xpY2UoMil9YDtyZXR1cm4gbi5leGlzdHMoYCR7ZX0vJHtpfWApfSwoJHQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLGkpe3ZhciBvPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBhKHQpe1J0KG8sbixpLGEscywibmV4dCIsdCl9ZnVuY3Rpb24gcyh0KXtSdChvLG4saSxhLHMsInRocm93Iix0KX1hKHZvaWQgMCl9KX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgQXQ9cig1Nik7ZnVuY3Rpb24gVHQodCxlLHIsbixpLG8sYSl7dHJ5e3ZhciBzPXRbb10oYSksdT1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UodSk6UHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4obixpKX1mdW5jdGlvbiBJdCgpe3ZhciB0O3JldHVybiB0PWZ1bmN0aW9uKih7ZnM6dCxnaXRkaXI6ZSxvaWQ6cixnZXRFeHRlcm5hbFJlZkRlbHRhOm59KXtjb25zdCBpPW5ldyBzLmEodCk7bGV0IG89eWllbGQgaS5yZWFkZGlyKE9iamVjdChmLmEpKGUsIm9iamVjdHMvcGFjayIpKTtvPW8uZmlsdGVyKHQ9PnQuZW5kc1dpdGgoIi5pZHgiKSk7Zm9yKGNvbnN0IHQgb2Ygbyl7Y29uc3Qgbz1gJHtlfS9vYmplY3RzL3BhY2svJHt0fWAsYT15aWVsZCBPYmplY3QoQXQuYSkoe2ZzOmksZmlsZW5hbWU6byxnZXRFeHRlcm5hbFJlZkRlbHRhOm59KTtpZihhLmVycm9yKXRocm93IG5ldyB1LmIodS5hLkludGVybmFsRmFpbCx7bWVzc2FnZTphLmVycm9yfSk7aWYoYS5vZmZzZXRzLmhhcyhyKSlyZXR1cm4hMH1yZXR1cm4hMX0sKEl0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obixpKXt2YXIgbz10LmFwcGx5KGUscik7ZnVuY3Rpb24gYSh0KXtUdChvLG4saSxhLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7VHQobyxuLGksYSxzLCJ0aHJvdyIsdCl9YSh2b2lkIDApfSl9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gQnQodCxlLHIsbixpLG8sYSl7dHJ5e3ZhciBzPXRbb10oYSksdT1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UodSk6UHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4obixpKX1mdW5jdGlvbiBGdCh0KXtyZXR1cm4gVXQuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFV0KCl7dmFyIHQ7cmV0dXJuIHQ9ZnVuY3Rpb24qKHtmczp0LGdpdGRpcjplLG9pZDpyLGZvcm1hdDpuPSJjb250ZW50In0pe2NvbnN0IGk9bmV3IHMuYSh0KSxvPXQ9Pk9iamVjdChqLmEpKHtmczppLGdpdGRpcjplLG9pZDp0fSk7bGV0IGE9eWllbGQgZnVuY3Rpb24odCl7cmV0dXJuICR0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0oe2ZzOmksZ2l0ZGlyOmUsb2lkOnJ9KTtyZXR1cm4gYXx8KGE9eWllbGQgZnVuY3Rpb24odCl7cmV0dXJuIEl0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0oe2ZzOmksZ2l0ZGlyOmUsb2lkOnIsZ2V0RXh0ZXJuYWxSZWZEZWx0YTpvfSkpLGF9LChVdD1mdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4saSl7dmFyIG89dC5hcHBseShlLHIpO2Z1bmN0aW9uIGEodCl7QnQobyxuLGksYSxzLCJuZXh0Iix0KX1mdW5jdGlvbiBzKHQpe0J0KG8sbixpLGEscywidGhyb3ciLHQpfWEodm9pZCAwKX0pfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IE10PW5ldyBSZWdFeHAoIl5yZWZzLyhoZWFkcy98dGFncy98cmVtb3Rlcy8pPyguKikiKTtmdW5jdGlvbiBDdCh0KXtjb25zdCBlPU10LmV4ZWModCk7cmV0dXJuIGU/InJlbW90ZXMvIj09PWVbMV0mJnQuZW5kc1dpdGgoIi9IRUFEIik/ZVsyXS5zbGljZSgwLC01KTplWzJdOnR9dmFyIE50PXIoMzgpO2Z1bmN0aW9uIER0KHQsZSl7Y29uc3Qgcj10Lm1hcCh0PT50LnNwbGl0KCI9IiwxKVswXSk7cmV0dXJuIGUuZmlsdGVyKHQ9Pntjb25zdCBlPXQuc3BsaXQoIj0iLDEpWzBdO3JldHVybiByLmluY2x1ZGVzKGUpfSl9dmFyIHp0PXIoMjkpLEh0PXIoMjYpLEx0PXIoNDgpO2Z1bmN0aW9uIEd0KHQsZSxyLG4saSxvLGEpe3RyeXt2YXIgcz10W29dKGEpLHU9cy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCByKHQpfXMuZG9uZT9lKHUpOlByb21pc2UucmVzb2x2ZSh1KS50aGVuKG4saSl9ZnVuY3Rpb24gcXQodCl7Y29uc3QgZT10LmluZGV4T2YoIlxyIikscj10LmluZGV4T2YoIlxuIik7cmV0dXJuLTE9PT1lJiYtMT09PXI/LTE6LTE9PT1lP3IrMTotMT09PXI/ZSsxOnI9PT1lKzE/cisxOk1hdGgubWluKGUscikrMX1mdW5jdGlvbiBXdCh0KXtjb25zdCBlPW5ldyBMdC5hO2xldCByPSIiO3ZhciBuO3JldHVybihuPWZ1bmN0aW9uKigpe3lpZWxkIE9iamVjdCh6dC5hKSh0LHQ9Pntmb3IodD10LnRvU3RyaW5nKCJ1dGY4Iikscis9dDs7KXtjb25zdCB0PXF0KHIpO2lmKC0xPT09dClicmVhaztlLndyaXRlKHIuc2xpY2UoMCx0KSkscj1yLnNsaWNlKHQpfX0pLHIubGVuZ3RoPjAmJmUud3JpdGUociksZS5lbmQoKX0sZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyLGkpe3ZhciBvPW4uYXBwbHkodCxlKTtmdW5jdGlvbiBhKHQpe0d0KG8scixpLGEscywibmV4dCIsdCl9ZnVuY3Rpb24gcyh0KXtHdChvLHIsaSxhLHMsInRocm93Iix0KX1hKHZvaWQgMCl9KX0pKCksZX12YXIgWXQ9cig4NSksWnQ9cig4NCk7ZnVuY3Rpb24gS3QodCxlLHIsbixpLG8sYSl7dHJ5e3ZhciBzPXRbb10oYSksdT1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UodSk6UHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4obixpKX1mdW5jdGlvbiBWdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLGkpe3ZhciBvPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBhKHQpe0t0KG8sbixpLGEscywibmV4dCIsdCl9ZnVuY3Rpb24gcyh0KXtLdChvLG4saSxhLHMsInRocm93Iix0KX1hKHZvaWQgMCl9KX19ZnVuY3Rpb24gWHQodCl7cmV0dXJuIEp0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBKdCgpe3JldHVybihKdD1WdChmdW5jdGlvbiooe2NvcmU6dD0iZGVmYXVsdCIsZGlyOmUsZ2l0ZGlyOnI9T2JqZWN0KGYuYSkoZSwiLmdpdCIpLGZzOm49bC5hLmdldCh0KS5nZXQoImZzIiksZW1pdHRlcjppPWwuYS5nZXQodCkuZ2V0KCJlbWl0dGVyIiksZW1pdHRlclByZWZpeDpvPSIiLHJlZjphPSJIRUFEIixyZWZzOnUscmVtb3RlOmMsdXJsOmQsbm9HaXRTdWZmaXg6aD0hMSxjb3JzUHJveHk6cCxhdXRoVXNlcm5hbWU6ZyxhdXRoUGFzc3dvcmQ6bSx1c2VybmFtZTp5PWcscGFzc3dvcmQ6dj1tLHRva2VuOncsb2F1dGgyZm9ybWF0OmIsZGVwdGg6Xz1udWxsLHNpbmNlOng9bnVsbCxleGNsdWRlOkU9W10scmVsYXRpdmU6az0hMSx0YWdzOk89ITEsc2luZ2xlQnJhbmNoOlA9ITEsaGVhZGVyczpTPXt9LHBydW5lOlI9ITEscHJ1bmVUYWdzOiQ9ITEsb25wcm9ncmVzczpBfSl7dHJ5e3ZvaWQgMCE9PUEmJmNvbnNvbGUud2FybigiVGhlIGBvbnByb2dyZXNzYCBjYWxsYmFjayBoYXMgYmVlbiBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHRoZSBtb3JlIGdlbmVyaWMgYGVtaXR0ZXJgIEV2ZW50RW1pdHRlciBhcmd1bWVudCBpbnN0ZWFkLiIpO2NvbnN0IGU9bmV3IHMuYShuKSxsPXlpZWxkIGZ1bmN0aW9uKHQpe3JldHVybiBRdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KHtjb3JlOnQsZ2l0ZGlyOnIsZnM6ZSxlbWl0dGVyOmksZW1pdHRlclByZWZpeDpvLHJlZjphLHJlZnM6dSxyZW1vdGU6Yyx1cmw6ZCxub0dpdFN1ZmZpeDpoLGNvcnNQcm94eTpwLHVzZXJuYW1lOnkscGFzc3dvcmQ6dix0b2tlbjp3LG9hdXRoMmZvcm1hdDpiLGRlcHRoOl8sc2luY2U6eCxleGNsdWRlOkUscmVsYXRpdmU6ayx0YWdzOk8sc2luZ2xlQnJhbmNoOlAsaGVhZGVyczpTLHBydW5lOlIscHJ1bmVUYWdzOiR9KTtpZihudWxsPT09bClyZXR1cm57ZGVmYXVsdEJyYW5jaDpudWxsLGZldGNoSGVhZDpudWxsLGZldGNoSGVhZERlc2NyaXB0aW9uOm51bGx9O2lmKGkpe2NvbnN0IHQ9V3QobC5wcm9ncmVzcyk7T2JqZWN0KHp0LmEpKHQsdD0+e2kuZW1pdChgJHtvfW1lc3NhZ2VgLHQudHJpbSgpKSxpLmVtaXQoYCR7b31yYXdtZXNzYWdlYCx0KTtjb25zdCBlPXQubWF0Y2goLyhbXjpdKikuKlwoKFxkKz8pXC8oXGQrPylcKS8pO2UmJmkuZW1pdChgJHtvfXByb2dyZXNzYCx7cGhhc2U6ZVsxXS50cmltKCksbG9hZGVkOnBhcnNlSW50KGVbMl0sMTApLHRvdGFsOnBhcnNlSW50KGVbM10sMTApLGxlbmd0aENvbXB1dGFibGU6ITB9KX0pfWNvbnN0IGc9eWllbGQgT2JqZWN0KE50LmEpKGwucGFja2ZpbGUpLG09Zy5zbGljZSgtMjApLnRvU3RyaW5nKCJoZXgiKSxUPXtkZWZhdWx0QnJhbmNoOmwuSEVBRCxmZXRjaEhlYWQ6bC5GRVRDSF9IRUFELm9pZCxmZXRjaEhlYWREZXNjcmlwdGlvbjpsLkZFVENIX0hFQUQuZGVzY3JpcHRpb259O2lmKGwuaGVhZGVycyYmKFQuaGVhZGVycz1sLmhlYWRlcnMpLFImJihULnBydW5lZD1sLnBydW5lZCksIiIhPT1tJiYiNTA0MTQzNGIwMDAwMDAwMjAwMDAwMDAwIiE9PWcuc2xpY2UoMCwxMikudG9TdHJpbmcoImhleCIpKXtULnBhY2tmaWxlPWBvYmplY3RzL3BhY2svcGFjay0ke219LnBhY2tgO2NvbnN0IHQ9T2JqZWN0KGYuYSkocixULnBhY2tmaWxlKTt5aWVsZCBlLndyaXRlKHQsZyk7Y29uc3Qgbj10PT5PYmplY3Qoai5hKSh7ZnM6ZSxnaXRkaXI6cixvaWQ6dH0pLGE9eWllbGQgU3QuYS5mcm9tUGFjayh7cGFjazpnLGdldEV4dGVybmFsUmVmRGVsdGE6bixlbWl0dGVyOmksZW1pdHRlclByZWZpeDpvfSk7eWllbGQgZS53cml0ZSh0LnJlcGxhY2UoL1wucGFjayQvLCIuaWR4IiksYS50b0J1ZmZlcigpKX1yZXR1cm4gVH1jYXRjaCh0KXt0aHJvdyB0LmNhbGxlcj0iZ2l0LmZldGNoIix0fX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gUXQoKXtyZXR1cm4oUXQ9VnQoZnVuY3Rpb24qKHtjb3JlOnQsZ2l0ZGlyOmUsZnM6cixlbWl0dGVyOm4sZW1pdHRlclByZWZpeDppLHJlZjpvLHJlZnM6YT1bb10scmVtb3RlOmMsdXJsOmYsbm9HaXRTdWZmaXg6bCxjb3JzUHJveHk6ZCx1c2VybmFtZTpoLHBhc3N3b3JkOnAsdG9rZW46ZyxvYXV0aDJmb3JtYXQ6bSxkZXB0aDp5LHNpbmNlOnYsZXhjbHVkZTp3LHJlbGF0aXZlOmIsdGFnczpfLHNpbmdsZUJyYW5jaDp4LGhlYWRlcnM6RSxwcnVuZTpPLHBydW5lVGFnczpQfSl7Y29uc3QgUj1uZXcgcy5hKHIpO2lmKG51bGwhPT15KXtpZihOdW1iZXIuaXNOYU4ocGFyc2VJbnQoeSkpKXRocm93IG5ldyB1LmIodS5hLkludmFsaWREZXB0aFBhcmFtZXRlckVycm9yLHtkZXB0aDp5fSk7eT1wYXJzZUludCh5KX1jPWN8fCJvcmlnaW4iLHZvaWQgMD09PWYmJihmPXlpZWxkIFMoe2ZzOlIsZ2l0ZGlyOmUscGF0aDpgcmVtb3RlLiR7Y30udXJsYH0pKSx2b2lkIDA9PT1kJiYoZD15aWVsZCBTKHtmczpSLGdpdGRpcjplLHBhdGg6Imh0dHAuY29yc1Byb3h5In0pKTtsZXQgJD17dXNlcm5hbWU6aCxwYXNzd29yZDpwLHRva2VuOmcsb2F1dGgyZm9ybWF0Om19O2NvbnN0IEE9T3QuYS5nZXRSZW1vdGVIZWxwZXJGb3Ioe3VybDpmfSksVD15aWVsZCBBLmRpc2NvdmVyKHtjb3JlOnQsY29yc1Byb3h5OmQsc2VydmljZToiZ2l0LXVwbG9hZC1wYWNrIix1cmw6Zixub0dpdFN1ZmZpeDpsLGF1dGg6JCxoZWFkZXJzOkV9KTskPVQuYXV0aDtjb25zdCBJPVQucmVmcztpZigwPT09SS5zaXplKXJldHVybiBudWxsO2lmKG51bGwhPT15JiYhVC5jYXBhYmlsaXRpZXMuaGFzKCJzaGFsbG93IikpdGhyb3cgbmV3IHUuYih1LmEuUmVtb3RlRG9lc05vdFN1cHBvcnRTaGFsbG93RmFpbCk7aWYobnVsbCE9PXYmJiFULmNhcGFiaWxpdGllcy5oYXMoImRlZXBlbi1zaW5jZSIpKXRocm93IG5ldyB1LmIodS5hLlJlbW90ZURvZXNOb3RTdXBwb3J0RGVlcGVuU2luY2VGYWlsKTtpZih3Lmxlbmd0aD4wJiYhVC5jYXBhYmlsaXRpZXMuaGFzKCJkZWVwZW4tbm90IikpdGhyb3cgbmV3IHUuYih1LmEuUmVtb3RlRG9lc05vdFN1cHBvcnREZWVwZW5Ob3RGYWlsKTtpZighMD09PWImJiFULmNhcGFiaWxpdGllcy5oYXMoImRlZXBlbi1yZWxhdGl2ZSIpKXRocm93IG5ldyB1LmIodS5hLlJlbW90ZURvZXNOb3RTdXBwb3J0RGVlcGVuUmVsYXRpdmVGYWlsKTtjb25zdHtvaWQ6QixmdWxscmVmOkZ9PWsuYS5yZXNvbHZlQWdhaW5zdE1hcCh7cmVmOm8sbWFwOkl9KTtmb3IoY29uc3QgdCBvZiBJLmtleXMoKSl0PT09Rnx8IkhFQUQiPT09dHx8dC5zdGFydHNXaXRoKCJyZWZzL2hlYWRzLyIpfHxfJiZ0LnN0YXJ0c1dpdGgoInJlZnMvdGFncy8iKXx8SS5kZWxldGUodCk7Y29uc3QgVT1EdChbLi4uVC5jYXBhYmlsaXRpZXNdLFsibXVsdGlfYWNrX2RldGFpbGVkIiwibm8tZG9uZSIsInNpZGUtYmFuZC02NGsiLCJvZnMtZGVsdGEiLGBhZ2VudD0ke0h0LmEuYWdlbnR9YF0pO2ImJlUucHVzaCgiZGVlcGVuLXJlbGF0aXZlIik7Y29uc3QgTT14P1tCXTpJLnZhbHVlcygpLEM9eD9hOnlpZWxkIGsuYS5saXN0UmVmcyh7ZnM6UixnaXRkaXI6ZSxmaWxlcGF0aDoicmVmcyJ9KTtsZXQgTj1bXTtmb3IobGV0IHQgb2YgQyl0cnl7dD15aWVsZCBrLmEuZXhwYW5kKHtmczpSLGdpdGRpcjplLHJlZjp0fSk7Y29uc3Qgcj15aWVsZCBrLmEucmVzb2x2ZSh7ZnM6UixnaXRkaXI6ZSxyZWY6dH0pOyh5aWVsZCBGdCh7ZnM6UixnaXRkaXI6ZSxvaWQ6cn0pKSYmTi5wdXNoKHIpfWNhdGNoKHQpe31OPVsuLi5uZXcgU2V0KE4pXTtjb25zdCBEPXlpZWxkIGp0LmEucmVhZCh7ZnM6UixnaXRkaXI6ZX0pLHo9VC5jYXBhYmlsaXRpZXMuaGFzKCJzaGFsbG93Iik/Wy4uLkRdOltdLEg9T2JqZWN0KFp0LmEpKHtjYXBhYmlsaXRpZXM6VSx3YW50czpNLGhhdmVzOk4sc2hhbGxvd3M6eixkZXB0aDp5LHNpbmNlOnYsZXhjbHVkZTp3fSksTD15aWVsZCBPYmplY3QoTnQuYSkoSCksRz15aWVsZCBBLmNvbm5lY3Qoe2NvcmU6dCxlbWl0dGVyOm4sZW1pdHRlclByZWZpeDppLGNvcnNQcm94eTpkLHNlcnZpY2U6ImdpdC11cGxvYWQtcGFjayIsdXJsOmYsbm9HaXRTdWZmaXg6bCxhdXRoOiQsYm9keTpbTF0saGVhZGVyczpFfSkscT15aWVsZCBPYmplY3QoWXQuYSkoRy5ib2R5KTtHLmhlYWRlcnMmJihxLmhlYWRlcnM9Ry5oZWFkZXJzKTtmb3IoY29uc3QgdCBvZiBxLnNoYWxsb3dzKWlmKCFELmhhcyh0KSl0cnl7Y29uc3R7b2JqZWN0OnJ9PXlpZWxkIE9iamVjdChqLmEpKHtmczpSLGdpdGRpcjplLG9pZDp0fSksbj1uZXcgUHQuYShyKSxpPXlpZWxkIFByb21pc2UuYWxsKG4uaGVhZGVycygpLnBhcmVudC5tYXAodD0+RnQoe2ZzOlIsZ2l0ZGlyOmUsb2lkOnR9KSkpOzA9PT1pLmxlbmd0aHx8aS5ldmVyeSh0PT50KXx8RC5hZGQodCl9Y2F0Y2goZSl7RC5hZGQodCl9Zm9yKGNvbnN0IHQgb2YgcS51bnNoYWxsb3dzKUQuZGVsZXRlKHQpO2lmKHlpZWxkIGp0LmEud3JpdGUoe2ZzOlIsZ2l0ZGlyOmUsb2lkczpEfSkseCl7Y29uc3QgdD1uZXcgTWFwKFtbRixCXV0pLHI9bmV3IE1hcDtsZXQgbj0xMCxpPUY7Zm9yKDtuLS07KXtjb25zdCB0PVQuc3ltcmVmcy5nZXQoaSk7aWYodm9pZCAwPT09dClicmVhaztyLnNldChpLHQpLGk9dH10LnNldChpLEkuZ2V0KGkpKTtjb25zdHtwcnVuZWQ6b309eWllbGQgay5hLnVwZGF0ZVJlbW90ZVJlZnMoe2ZzOlIsZ2l0ZGlyOmUscmVtb3RlOmMscmVmczp0LHN5bXJlZnM6cix0YWdzOl8scHJ1bmU6T30pO08mJihxLnBydW5lZD1vKX1lbHNle2NvbnN0e3BydW5lZDp0fT15aWVsZCBrLmEudXBkYXRlUmVtb3RlUmVmcyh7ZnM6UixnaXRkaXI6ZSxyZW1vdGU6YyxyZWZzOkksc3ltcmVmczpULnN5bXJlZnMsdGFnczpfLHBydW5lOk8scHJ1bmVUYWdzOlB9KTtPJiYocS5wcnVuZWQ9dCl9aWYocS5IRUFEPVQuc3ltcmVmcy5nZXQoIkhFQUQiKSx2b2lkIDA9PT1xLkhFQUQpe2NvbnN0e29pZDp0fT1rLmEucmVzb2x2ZUFnYWluc3RNYXAoe3JlZjoiSEVBRCIsbWFwOkl9KTtmb3IoY29uc3RbZSxyXW9mIEkuZW50cmllcygpKWlmKCJIRUFEIiE9PWUmJnI9PT10KXtxLkhFQUQ9ZTticmVha319Y29uc3QgVz1GLnN0YXJ0c1dpdGgoInJlZnMvdGFncyIpPyJ0YWciOiJicmFuY2giO3JldHVybiBxLkZFVENIX0hFQUQ9e29pZDpCLGRlc2NyaXB0aW9uOmAke1d9ICcke0N0KEYpfScgb2YgJHtmfWB9LHF9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHRlKHQsZSxyLG4saSxvLGEpe3RyeXt2YXIgcz10W29dKGEpLHU9cy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCByKHQpfXMuZG9uZT9lKHUpOlByb21pc2UucmVzb2x2ZSh1KS50aGVuKG4saSl9ZnVuY3Rpb24gZWUodCl7cmV0dXJuIHJlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiByZSgpe3ZhciB0O3JldHVybiB0PWZ1bmN0aW9uKih7Y29yZTp0PSJkZWZhdWx0IixiYXJlOmU9ITEsZGlyOnIsZ2l0ZGlyOm49KGU/cjpPYmplY3QoZi5hKShyLCIuZ2l0IikpLGZzOmk9bC5hLmdldCh0KS5nZXQoImZzIiksbm9PdmVyd3JpdGU6bz0hMX0pe3RyeXtjb25zdCB0PW5ldyBzLmEoaSk7aWYobyYmKHlpZWxkIHQuZXhpc3RzKG4rIi9jb25maWciKSkpcmV0dXJuO2xldCByPVsiaG9va3MiLCJpbmZvIiwib2JqZWN0cy9pbmZvIiwib2JqZWN0cy9wYWNrIiwicmVmcy9oZWFkcyIsInJlZnMvdGFncyJdO3I9ci5tYXAodD0+bisiLyIrdCk7Zm9yKGNvbnN0IGUgb2Ygcil5aWVsZCB0Lm1rZGlyKGUpO3lpZWxkIHQud3JpdGUobisiL2NvbmZpZyIsIltjb3JlXVxuXHRyZXBvc2l0b3J5Zm9ybWF0dmVyc2lvbiA9IDBcblx0ZmlsZW1vZGUgPSBmYWxzZVxuIitgXHRiYXJlID0gJHtlfVxuYCsoZT8iIjoiXHRsb2dhbGxyZWZ1cGRhdGVzID0gdHJ1ZVxuIikrIlx0c3ltbGlua3MgPSBmYWxzZVxuXHRpZ25vcmVjYXNlID0gdHJ1ZVxuIikseWllbGQgdC53cml0ZShuKyIvSEVBRCIsInJlZjogcmVmcy9oZWFkcy9tYXN0ZXJcbiIpfWNhdGNoKHQpe3Rocm93IHQuY2FsbGVyPSJnaXQuaW5pdCIsdH19LChyZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4saSl7dmFyIG89dC5hcHBseShlLHIpO2Z1bmN0aW9uIGEodCl7dGUobyxuLGksYSxzLCJuZXh0Iix0KX1mdW5jdGlvbiBzKHQpe3RlKG8sbixpLGEscywidGhyb3ciLHQpfWEodm9pZCAwKX0pfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIG5lKHQsZSxyLG4saSxvLGEpe3RyeXt2YXIgcz10W29dKGEpLHU9cy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCByKHQpfXMuZG9uZT9lKHUpOlByb21pc2UucmVzb2x2ZSh1KS50aGVuKG4saSl9ZnVuY3Rpb24gaWUodCl7cmV0dXJuIG9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBvZSgpe3ZhciB0O3JldHVybiB0PWZ1bmN0aW9uKih7Y29yZTp0PSJkZWZhdWx0IixkaXI6ZSxnaXRkaXI6cj1PYmplY3QoZi5hKShlLCIuZ2l0IiksZnM6bj1sLmEuZ2V0KHQpLmdldCgiZnMiKSxlbWl0dGVyOmk9bC5hLmdldCh0KS5nZXQoImVtaXR0ZXIiKSxlbWl0dGVyUHJlZml4Om89IiIsdXJsOmEsbm9HaXRTdWZmaXg6dT0hMSxjb3JzUHJveHk6YyxyZWY6ZCxyZW1vdGU6aD0ib3JpZ2luIixhdXRoVXNlcm5hbWU6cCxhdXRoUGFzc3dvcmQ6Zyx1c2VybmFtZTptLHBhc3N3b3JkOnksdG9rZW46dixvYXV0aDJmb3JtYXQ6dyxkZXB0aDpiLHNpbmNlOl8sZXhjbHVkZTp4PVtdLHJlbGF0aXZlOkU9ITEsc2luZ2xlQnJhbmNoOms9ITEsbm9DaGVja291dDpPPSExLG5vVGFnczpqPSExLGhlYWRlcnM6UD17fSxvbnByb2dyZXNzOlJ9KXt0cnl7dm9pZCAwIT09UiYmY29uc29sZS53YXJuKCJUaGUgYG9ucHJvZ3Jlc3NgIGNhbGxiYWNrIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgdGhlIG1vcmUgZ2VuZXJpYyBgZW1pdHRlcmAgRXZlbnRFbWl0dGVyIGFyZ3VtZW50IGluc3RlYWQuIik7Y29uc3QgZj1uZXcgcy5hKG4pO209dm9pZCAwPT09bT9wOm0seT12b2lkIDA9PT15P2c6eSx5aWVsZCBlZSh7Z2l0ZGlyOnIsZnM6Zn0pLHlpZWxkIFMoe2dpdGRpcjpyLGZzOmYscGF0aDpgcmVtb3RlLiR7aH0udXJsYCx2YWx1ZTphfSkseWllbGQgUyh7Z2l0ZGlyOnIsZnM6ZixwYXRoOmByZW1vdGUuJHtofS5mZXRjaGAsdmFsdWU6YCtyZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzLyR7aH0vKmB9KSxjJiYoeWllbGQgUyh7Z2l0ZGlyOnIsZnM6ZixwYXRoOiJodHRwLmNvcnNQcm94eSIsdmFsdWU6Y30pKTtjb25zdHtkZWZhdWx0QnJhbmNoOmwsZmV0Y2hIZWFkOiR9PXlpZWxkIFh0KHtjb3JlOnQsZ2l0ZGlyOnIsZnM6ZixlbWl0dGVyOmksZW1pdHRlclByZWZpeDpvLG5vR2l0U3VmZml4OnUscmVmOmQscmVtb3RlOmgsdXNlcm5hbWU6bSxwYXNzd29yZDp5LHRva2VuOnYsb2F1dGgyZm9ybWF0OncsZGVwdGg6YixzaW5jZTpfLGV4Y2x1ZGU6eCxyZWxhdGl2ZTpFLHNpbmdsZUJyYW5jaDprLGhlYWRlcnM6UCx0YWdzOiFqfSk7aWYobnVsbD09PSQpcmV0dXJuO2Q9KGQ9ZHx8bCkucmVwbGFjZSgicmVmcy9oZWFkcy8iLCIiKSx5aWVsZCB1dCh7ZGlyOmUsZ2l0ZGlyOnIsZnM6ZixlbWl0dGVyOmksZW1pdHRlclByZWZpeDpvLHJlZjpkLHJlbW90ZTpoLG5vQ2hlY2tvdXQ6T30pfWNhdGNoKHQpe3Rocm93IHQuY2FsbGVyPSJnaXQuY2xvbmUiLHR9fSwob2U9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLGkpe3ZhciBvPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBhKHQpe25lKG8sbixpLGEscywibmV4dCIsdCl9ZnVuY3Rpb24gcyh0KXtuZShvLG4saSxhLHMsInRocm93Iix0KX1hKHZvaWQgMCl9KX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgYWU9cigxMSk7ZnVuY3Rpb24gc2UodCxlLHIsbixpLG8sYSl7dHJ5e3ZhciBzPXRbb10oYSksdT1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UodSk6UHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4obixpKX1mdW5jdGlvbiB1ZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLGkpe3ZhciBvPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBhKHQpe3NlKG8sbixpLGEscywibmV4dCIsdCl9ZnVuY3Rpb24gcyh0KXtzZShvLG4saSxhLHMsInRocm93Iix0KX1hKHZvaWQgMCl9KX19ZnVuY3Rpb24gY2UodCl7cmV0dXJuIGZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBmZSgpe3JldHVybihmZT11ZShmdW5jdGlvbiooe2NvcmU6dD0iZGVmYXVsdCIsZGlyOmUsZ2l0ZGlyOnI9T2JqZWN0KGYuYSkoZSwiLmdpdCIpLGZzOm49bC5hLmdldCh0KS5nZXQoImZzIiksbWVzc2FnZTppLGF1dGhvcjpvLGNvbW1pdHRlcjpkLHNpZ25pbmdLZXk6aCxkcnlSdW46cD0hMSxub1VwZGF0ZUJyYW5jaDpnPSExLHJlZjptLHBhcmVudDp5LHRyZWU6dn0pe3RyeXtjb25zdCBlPW5ldyBzLmEobik7aWYobXx8KG09eWllbGQgay5hLnJlc29sdmUoe2ZzOmUsZ2l0ZGlyOnIscmVmOiJIRUFEIixkZXB0aDoyfSkpLHZvaWQgMD09PWkpdGhyb3cgbmV3IHUuYih1LmEuTWlzc2luZ1JlcXVpcmVkUGFyYW1ldGVyRXJyb3Ise2Z1bmN0aW9uOiJjb21taXQiLHBhcmFtZXRlcjoibWVzc2FnZSJ9KTtpZih2b2lkIDA9PT0obz15aWVsZCBBKHtmczplLGdpdGRpcjpyLGF1dGhvcjpvfSkpKXRocm93IG5ldyB1LmIodS5hLk1pc3NpbmdBdXRob3JFcnJvcik7aWYoKGQ9T2JqZWN0LmFzc2lnbih7fSxkfHxvKSkuZGF0ZT1kLmRhdGV8fG8uZGF0ZSx2b2lkIDA9PT0oZD15aWVsZCBBKHtmczplLGdpdGRpcjpyLGF1dGhvcjpkfSkpKXRocm93IG5ldyB1LmIodS5hLk1pc3NpbmdDb21taXR0ZXJFcnJvcik7cmV0dXJuIGEuYS5hY3F1aXJlKHtmczplLGdpdGRpcjpyfSxmdW5jdGlvbigpe3ZhciBuPXVlKGZ1bmN0aW9uKihuKXtjb25zdCBhPU9iamVjdChkdC5hKShuLmVudHJpZXMpLmdldCgiLiIpO2lmKHZ8fCh2PXlpZWxkIGxlKHtmczplLGdpdGRpcjpyLGlub2RlOmEsZHJ5UnVuOnB9KSksIXkpdHJ5e3k9W3lpZWxkIGsuYS5yZXNvbHZlKHtmczplLGdpdGRpcjpyLHJlZjptfSldfWNhdGNoKHQpe3k9W119bGV0IHM9UHQuYS5mcm9tKHt0cmVlOnYscGFyZW50OnksYXV0aG9yOm8sY29tbWl0dGVyOmQsbWVzc2FnZTppfSk7aWYoaCl7Y29uc3QgZT1sLmEuZ2V0KHQpLmdldCgicGdwIik7cz15aWVsZCBQdC5hLnNpZ24ocyxlLGgpfWNvbnN0IHU9eWllbGQgT2JqZWN0KGMuYSkoe2ZzOmUsZ2l0ZGlyOnIsdHlwZToiY29tbWl0IixvYmplY3Q6cy50b09iamVjdCgpLGRyeVJ1bjpwfSk7cmV0dXJuIGd8fHB8fCh5aWVsZCBrLmEud3JpdGVSZWYoe2ZzOmUsZ2l0ZGlyOnIscmVmOm0sdmFsdWU6dX0pKSx1fSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpfWNhdGNoKHQpe3Rocm93IHQuY2FsbGVyPSJnaXQuY29tbWl0Iix0fX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gbGUodCl7cmV0dXJuIGRlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBkZSgpe3JldHVybihkZT11ZShmdW5jdGlvbiooe2ZzOnQsZ2l0ZGlyOmUsaW5vZGU6cixkcnlSdW46bn0pe2NvbnN0IGk9ci5jaGlsZHJlbjtmb3IoY29uc3QgciBvZiBpKSJ0cmVlIj09PXIudHlwZSYmKHIubWV0YWRhdGEubW9kZT0iMDQwMDAwIixyLm1ldGFkYXRhLm9pZD15aWVsZCBsZSh7ZnM6dCxnaXRkaXI6ZSxpbm9kZTpyLGRyeVJ1bjpufSkpO2NvbnN0IG89aS5tYXAodD0+KHttb2RlOnQubWV0YWRhdGEubW9kZSxwYXRoOnQuYmFzZW5hbWUsb2lkOnQubWV0YWRhdGEub2lkLHR5cGU6dC50eXBlfSkpLGE9YWUuYS5mcm9tKG8pO3JldHVybiB5aWVsZCBPYmplY3QoYy5hKSh7ZnM6dCxnaXRkaXI6ZSx0eXBlOiJ0cmVlIixvYmplY3Q6YS50b09iamVjdCgpLGRyeVJ1bjpufSl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGhlKHQsZSxyLG4saSxvLGEpe3RyeXt2YXIgcz10W29dKGEpLHU9cy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCByKHQpfXMuZG9uZT9lKHUpOlByb21pc2UucmVzb2x2ZSh1KS50aGVuKG4saSl9ZnVuY3Rpb24gcGUodCl7cmV0dXJuIGdlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBnZSgpe3ZhciB0O3JldHVybiB0PWZ1bmN0aW9uKih7Y29yZTp0PSJkZWZhdWx0IixkaXI6ZSxnaXRkaXI6cj1PYmplY3QoZi5hKShlLCIuZ2l0IiksZnM6bj1sLmEuZ2V0KHQpLmdldCgiZnMiKSxmdWxsbmFtZTppPSExfSl7dHJ5e2NvbnN0IHQ9bmV3IHMuYShuKSxlPXlpZWxkIGsuYS5yZXNvbHZlKHtmczp0LGdpdGRpcjpyLHJlZjoiSEVBRCIsZGVwdGg6Mn0pO2lmKCFlLnN0YXJ0c1dpdGgoInJlZnMvIikpcmV0dXJuO3JldHVybiBpP2U6Q3QoZSl9Y2F0Y2godCl7dGhyb3cgdC5jYWxsZXI9ImdpdC5jdXJyZW50QnJhbmNoIix0fX0sKGdlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obixpKXt2YXIgbz10LmFwcGx5KGUscik7ZnVuY3Rpb24gYSh0KXtoZShvLG4saSxhLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7aGUobyxuLGksYSxzLCJ0aHJvdyIsdCl9YSh2b2lkIDApfSl9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gbWUodCxlLHIsbixpLG8sYSl7dHJ5e3ZhciBzPXRbb10oYSksdT1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UodSk6UHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4obixpKX1mdW5jdGlvbiB5ZSh0KXtyZXR1cm4gdmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHZlKCl7dmFyIHQ7cmV0dXJuIHQ9ZnVuY3Rpb24qKHtjb3JlOnQ9ImRlZmF1bHQiLGRpcjplLGdpdGRpcjpyPU9iamVjdChmLmEpKGUsIi5naXQiKSxmczpuPWwuYS5nZXQodCkuZ2V0KCJmcyIpLHJlZjppfSl7dHJ5e2NvbnN0IHQ9bmV3IHMuYShuKTtpZih2b2lkIDA9PT1pKXRocm93IG5ldyB1LmIodS5hLk1pc3NpbmdSZXF1aXJlZFBhcmFtZXRlckVycm9yLHtmdW5jdGlvbjoiZGVsZXRlQnJhbmNoIixwYXJhbWV0ZXI6InJlZiJ9KTtpZihpIT09dy5hLmNsZWFuKGkpKXRocm93IG5ldyB1LmIodS5hLkludmFsaWRSZWZOYW1lRXJyb3Ise3ZlcmI6ImRlbGV0ZSIsbm91bjoiYnJhbmNoIixyZWY6aSxzdWdnZXN0aW9uOncuYS5jbGVhbihpKX0pO2lmKCEoeWllbGQgdC5leGlzdHMoYCR7cn0vcmVmcy9oZWFkcy8ke2l9YCkpKXRocm93IG5ldyB1LmIodS5hLlJlZk5vdEV4aXN0c0Vycm9yLHt2ZXJiOiJkZWxldGUiLG5vdW46ImJyYW5jaCIscmVmOml9KTtpZihpPT09KHlpZWxkIHBlKHtmczp0LGdpdGRpcjpyfSkpKXRocm93IG5ldyB1LmIodS5hLkJyYW5jaERlbGV0ZUVycm9yLHtyZWY6aX0pO3lpZWxkIHQucm0oYCR7cn0vcmVmcy9oZWFkcy8ke2l9YCl9Y2F0Y2godCl7dGhyb3cgdC5jYWxsZXI9ImdpdC5kZWxldGVCcmFuY2giLHR9fSwodmU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLGkpe3ZhciBvPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBhKHQpe21lKG8sbixpLGEscywibmV4dCIsdCl9ZnVuY3Rpb24gcyh0KXttZShvLG4saSxhLHMsInRocm93Iix0KX1hKHZvaWQgMCl9KX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiB3ZSh0LGUscixuLGksbyxhKXt0cnl7dmFyIHM9dFtvXShhKSx1PXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZSh1KTpQcm9taXNlLnJlc29sdmUodSkudGhlbihuLGkpfWZ1bmN0aW9uIGJlKHQpe3JldHVybiBfZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gX2UoKXt2YXIgdDtyZXR1cm4gdD1mdW5jdGlvbiooe2NvcmU6dD0iZGVmYXVsdCIsZGlyOmUsZ2l0ZGlyOnI9T2JqZWN0KGYuYSkoZSwiLmdpdCIpLGZzOm49bC5hLmdldCh0KS5nZXQoImZzIikscmVmOml9KXt0cnl7Y29uc3QgdD1uZXcgcy5hKG4pO3lpZWxkIGsuYS5kZWxldGVSZWYoe2ZzOnQsZ2l0ZGlyOnIscmVmOml9KX1jYXRjaCh0KXt0aHJvdyB0LmNhbGxlcj0iZ2l0LmRlbGV0ZVJlZiIsdH19LChfZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4saSl7dmFyIG89dC5hcHBseShlLHIpO2Z1bmN0aW9uIGEodCl7d2UobyxuLGksYSxzLCJuZXh0Iix0KX1mdW5jdGlvbiBzKHQpe3dlKG8sbixpLGEscywidGhyb3ciLHQpfWEodm9pZCAwKX0pfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHhlKHQsZSxyLG4saSxvLGEpe3RyeXt2YXIgcz10W29dKGEpLHU9cy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCByKHQpfXMuZG9uZT9lKHUpOlByb21pc2UucmVzb2x2ZSh1KS50aGVuKG4saSl9ZnVuY3Rpb24gRWUodCl7cmV0dXJuIGtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBrZSgpe3ZhciB0O3JldHVybiB0PWZ1bmN0aW9uKih7Y29yZTp0PSJkZWZhdWx0IixkaXI6ZSxnaXRkaXI6cj1PYmplY3QoZi5hKShlLCIuZ2l0IiksZnM6bj1sLmEuZ2V0KHQpLmdldCgiZnMiKSxyZW1vdGU6aX0pe3RyeXtjb25zdCB0PW5ldyBzLmEobik7aWYodm9pZCAwPT09aSl0aHJvdyBuZXcgdS5iKHUuYS5NaXNzaW5nUmVxdWlyZWRQYXJhbWV0ZXJFcnJvcix7ZnVuY3Rpb246ImRlbGV0ZVJlbW90ZSIscGFyYW1ldGVyOiJyZW1vdGUifSk7Y29uc3QgZT15aWVsZCBiLmEuZ2V0KHtmczp0LGdpdGRpcjpyfSk7eWllbGQgZS5kZWxldGVTZWN0aW9uKCJyZW1vdGUiLGkpLHlpZWxkIGIuYS5zYXZlKHtmczp0LGdpdGRpcjpyLGNvbmZpZzplfSl9Y2F0Y2godCl7dGhyb3cgdC5jYWxsZXI9ImdpdC5kZWxldGVSZW1vdGUiLHR9fSwoa2U9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLGkpe3ZhciBvPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBhKHQpe3hlKG8sbixpLGEscywibmV4dCIsdCl9ZnVuY3Rpb24gcyh0KXt4ZShvLG4saSxhLHMsInRocm93Iix0KX1hKHZvaWQgMCl9KX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBPZSh0LGUscixuLGksbyxhKXt0cnl7dmFyIHM9dFtvXShhKSx1PXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZSh1KTpQcm9taXNlLnJlc29sdmUodSkudGhlbihuLGkpfWZ1bmN0aW9uIGplKHQpe3JldHVybiBQZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gUGUoKXt2YXIgdDtyZXR1cm4gdD1mdW5jdGlvbiooe2NvcmU6dD0iZGVmYXVsdCIsZGlyOmUsZ2l0ZGlyOnI9T2JqZWN0KGYuYSkoZSwiLmdpdCIpLGZzOm49bC5hLmdldCh0KS5nZXQoImZzIikscmVmOml9KXt0cnl7Y29uc3QgdD1uZXcgcy5hKG4pO2lmKHZvaWQgMD09PWkpdGhyb3cgbmV3IHUuYih1LmEuTWlzc2luZ1JlcXVpcmVkUGFyYW1ldGVyRXJyb3Ise2Z1bmN0aW9uOiJkZWxldGVUYWciLHBhcmFtZXRlcjoicmVmIn0pO2k9aS5zdGFydHNXaXRoKCJyZWZzL3RhZ3MvIik/aTpgcmVmcy90YWdzLyR7aX1gLHlpZWxkIGJlKHtmczp0LGdpdGRpcjpyLHJlZjppfSl9Y2F0Y2godCl7dGhyb3cgdC5jYWxsZXI9ImdpdC5kZWxldGVUYWciLHR9fSwoUGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLGkpe3ZhciBvPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBhKHQpe09lKG8sbixpLGEscywibmV4dCIsdCl9ZnVuY3Rpb24gcyh0KXtPZShvLG4saSxhLHMsInRocm93Iix0KX1hKHZvaWQgMCl9KX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBTZSh0LGUscixuLGksbyxhKXt0cnl7dmFyIHM9dFtvXShhKSx1PXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZSh1KTpQcm9taXNlLnJlc29sdmUodSkudGhlbihuLGkpfWZ1bmN0aW9uIFJlKCl7dmFyIHQ7cmV0dXJuIHQ9ZnVuY3Rpb24qKHtmczp0LGdpdGRpcjplLG9pZDpyfSl7Y29uc3Qgbj1uZXcgcy5hKHQpLGk9ci5zbGljZSgwLDIpO3JldHVybih5aWVsZCBuLnJlYWRkaXIoYCR7ZX0vb2JqZWN0cy8ke2l9YCkpLm1hcCh0PT5gJHtpfSR7dH1gKS5maWx0ZXIodD0+dC5zdGFydHNXaXRoKHIpKX0sKFJlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obixpKXt2YXIgbz10LmFwcGx5KGUscik7ZnVuY3Rpb24gYSh0KXtTZShvLG4saSxhLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7U2UobyxuLGksYSxzLCJ0aHJvdyIsdCl9YSh2b2lkIDApfSl9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gJGUodCxlLHIsbixpLG8sYSl7dHJ5e3ZhciBzPXRbb10oYSksdT1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UodSk6UHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4obixpKX1mdW5jdGlvbiBBZSgpe3ZhciB0O3JldHVybiB0PWZ1bmN0aW9uKih7ZnM6dCxnaXRkaXI6ZSxvaWQ6cixnZXRFeHRlcm5hbFJlZkRlbHRhOm59KXtjb25zdCBpPW5ldyBzLmEodCksbz1bXTtsZXQgYT15aWVsZCBpLnJlYWRkaXIoT2JqZWN0KGYuYSkoZSwib2JqZWN0cy9wYWNrIikpO2E9YS5maWx0ZXIodD0+dC5lbmRzV2l0aCgiLmlkeCIpKTtmb3IoY29uc3QgdCBvZiBhKXtjb25zdCBhPWAke2V9L29iamVjdHMvcGFjay8ke3R9YCxzPXlpZWxkIE9iamVjdChBdC5hKSh7ZnM6aSxmaWxlbmFtZTphLGdldEV4dGVybmFsUmVmRGVsdGE6bn0pO2lmKHMuZXJyb3IpdGhyb3cgbmV3IHUuYih1LmEuSW50ZXJuYWxGYWlsLHttZXNzYWdlOnMuZXJyb3J9KTtmb3IoY29uc3QgdCBvZiBzLm9mZnNldHMua2V5cygpKXQuc3RhcnRzV2l0aChyKSYmby5wdXNoKHQpfXJldHVybiBvfSwoQWU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLGkpe3ZhciBvPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBhKHQpeyRlKG8sbixpLGEscywibmV4dCIsdCl9ZnVuY3Rpb24gcyh0KXskZShvLG4saSxhLHMsInRocm93Iix0KX1hKHZvaWQgMCl9KX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBUZSh0LGUscixuLGksbyxhKXt0cnl7dmFyIHM9dFtvXShhKSx1PXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZSh1KTpQcm9taXNlLnJlc29sdmUodSkudGhlbihuLGkpfWZ1bmN0aW9uIEllKCl7dmFyIHQ7cmV0dXJuIHQ9ZnVuY3Rpb24qKHtmczp0LGdpdGRpcjplLG9pZDpyfSl7Y29uc3Qgbj1uZXcgcy5hKHQpLGk9eWllbGQgZnVuY3Rpb24odCl7cmV0dXJuIFJlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0oe2ZzOm4sZ2l0ZGlyOmUsb2lkOnJ9KSxvPXlpZWxkIGZ1bmN0aW9uKHQpe3JldHVybiBBZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KHtmczpuLGdpdGRpcjplLG9pZDpyLGdldEV4dGVybmFsUmVmRGVsdGE6cj0+T2JqZWN0KGouYSkoe2ZzOnQsZ2l0ZGlyOmUsb2lkOnJ9KX0pLGE9aS5jb25jYXQobyk7aWYoMT09PWEubGVuZ3RoKXJldHVybiBhWzBdO2lmKGEubGVuZ3RoPjEpdGhyb3cgbmV3IHUuYih1LmEuQW1iaWd1b3VzU2hvcnRPaWQse3Nob3J0OnIsbWF0Y2hlczphLmpvaW4oIiwgIil9KTt0aHJvdyBuZXcgdS5iKHUuYS5TaG9ydE9pZE5vdEZvdW5kLHtzaG9ydDpyfSl9LChJZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4saSl7dmFyIG89dC5hcHBseShlLHIpO2Z1bmN0aW9uIGEodCl7VGUobyxuLGksYSxzLCJuZXh0Iix0KX1mdW5jdGlvbiBzKHQpe1RlKG8sbixpLGEscywidGhyb3ciLHQpfWEodm9pZCAwKX0pfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEJlKHQsZSxyLG4saSxvLGEpe3RyeXt2YXIgcz10W29dKGEpLHU9cy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCByKHQpfXMuZG9uZT9lKHUpOlByb21pc2UucmVzb2x2ZSh1KS50aGVuKG4saSl9ZnVuY3Rpb24gRmUodCl7cmV0dXJuIFVlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBVZSgpe3ZhciB0O3JldHVybiB0PWZ1bmN0aW9uKih7Y29yZTp0PSJkZWZhdWx0IixkaXI6ZSxnaXRkaXI6cj1PYmplY3QoZi5hKShlLCIuZ2l0IiksZnM6bj1sLmEuZ2V0KHQpLmdldCgiZnMiKSxvaWQ6aX0pe3RyeXtjb25zdCB0PW5ldyBzLmEobik7cmV0dXJuIHlpZWxkIGZ1bmN0aW9uKHQpe3JldHVybiBJZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KHtmczp0LGdpdGRpcjpyLG9pZDppfSl9Y2F0Y2godCl7dGhyb3cgdC5jYWxsZXI9ImdpdC5leHBhbmRPaWQiLHR9fSwoVWU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLGkpe3ZhciBvPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBhKHQpe0JlKG8sbixpLGEscywibmV4dCIsdCl9ZnVuY3Rpb24gcyh0KXtCZShvLG4saSxhLHMsInRocm93Iix0KX1hKHZvaWQgMCl9KX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBNZSh0LGUscixuLGksbyxhKXt0cnl7dmFyIHM9dFtvXShhKSx1PXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZSh1KTpQcm9taXNlLnJlc29sdmUodSkudGhlbihuLGkpfWZ1bmN0aW9uIENlKHQpe3JldHVybiBOZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gTmUoKXt2YXIgdDtyZXR1cm4gdD1mdW5jdGlvbiooe2NvcmU6dD0iZGVmYXVsdCIsZGlyOmUsZ2l0ZGlyOnI9T2JqZWN0KGYuYSkoZSwiLmdpdCIpLGZzOm49bC5hLmdldCh0KS5nZXQoImZzIikscmVmOml9KXt0cnl7Y29uc3QgdD1uZXcgcy5hKG4pO3JldHVybiB5aWVsZCBrLmEuZXhwYW5kKHtmczp0LGdpdGRpcjpyLHJlZjppfSl9Y2F0Y2godCl7dGhyb3cgdC5jYWxsZXI9ImdpdC5leHBhbmRSZWYiLHR9fSwoTmU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLGkpe3ZhciBvPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBhKHQpe01lKG8sbixpLGEscywibmV4dCIsdCl9ZnVuY3Rpb24gcyh0KXtNZShvLG4saSxhLHMsInRocm93Iix0KX1hKHZvaWQgMCl9KX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBEZSh0LGUscixuLGksbyxhKXt0cnl7dmFyIHM9dFtvXShhKSx1PXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZSh1KTpQcm9taXNlLnJlc29sdmUodSkudGhlbihuLGkpfWZ1bmN0aW9uIHplKHQpe3JldHVybiBIZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gSGUoKXt2YXIgdDtyZXR1cm4gdD1mdW5jdGlvbiooe2NvcmU6dD0iZGVmYXVsdCIsZGlyOmUsZ2l0ZGlyOnI9T2JqZWN0KGYuYSkoZSwiLmdpdCIpLGZzOm49bC5hLmdldCh0KS5nZXQoImZzIiksb2lkczppfSl7dHJ5e2NvbnN0IHQ9bmV3IHMuYShuKSxlPXt9LG89aS5sZW5ndGg7bGV0IGE9aS5tYXAoKHQsZSk9Pih7aW5kZXg6ZSxvaWQ6dH0pKTtmb3IoO2EubGVuZ3RoOyl7Y29uc3Qgbj1uZXcgU2V0O2Zvcihjb25zdCB0IG9mIGEpe2NvbnN0e29pZDpyLGluZGV4Oml9PXQ7ZVtyXXx8KGVbcl09bmV3IFNldCksZVtyXS5hZGQoaSksZVtyXS5zaXplPT09byYmbi5hZGQocil9aWYobi5zaXplPjApcmV0dXJuWy4uLm5dO2NvbnN0IGk9W107Zm9yKGNvbnN0IGUgb2YgYSl7Y29uc3R7b2lkOm4saW5kZXg6b309ZTt0cnl7Y29uc3R7b2JqZWN0OmV9PXlpZWxkIE9iamVjdChqLmEpKHtmczp0LGdpdGRpcjpyLG9pZDpufSksYT1QdC5hLmZyb20oZSkse3BhcmVudDpzfT1hLnBhcnNlSGVhZGVycygpO2Zvcihjb25zdCB0IG9mIHMpaS5wdXNoKHtvaWQ6dCxpbmRleDpvfSl9Y2F0Y2godCl7fX1hPWl9cmV0dXJuW119Y2F0Y2godCl7dGhyb3cgdC5jYWxsZXI9ImdpdC5maW5kTWVyZ2VCYXNlIix0fX0sKEhlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obixpKXt2YXIgbz10LmFwcGx5KGUscik7ZnVuY3Rpb24gYSh0KXtEZShvLG4saSxhLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7RGUobyxuLGksYSxzLCJ0aHJvdyIsdCl9YSh2b2lkIDApfSl9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIExlPXIoMjMpO2Z1bmN0aW9uIEdlKHQsZSxyLG4saSxvLGEpe3RyeXt2YXIgcz10W29dKGEpLHU9cy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCByKHQpfXMuZG9uZT9lKHUpOlByb21pc2UucmVzb2x2ZSh1KS50aGVuKG4saSl9ZnVuY3Rpb24gcWUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obixpKXt2YXIgbz10LmFwcGx5KGUscik7ZnVuY3Rpb24gYSh0KXtHZShvLG4saSxhLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7R2UobyxuLGksYSxzLCJ0aHJvdyIsdCl9YSh2b2lkIDApfSl9fWZ1bmN0aW9uIFdlKHQpe3JldHVybiBZZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gWWUoKXtyZXR1cm4oWWU9cWUoZnVuY3Rpb24qKHtjb3JlOnQ9ImRlZmF1bHQiLGZzOmU9bC5hLmdldCh0KS5nZXQoImZzIiksZmlsZXBhdGg6cn0pe3RyeXtyZXR1cm4gWmUobmV3IHMuYShlKSxyKX1jYXRjaCh0KXt0aHJvdyB0LmNhbGxlcj0iZ2l0LmZpbmRSb290Iix0fX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gWmUodCxlKXtyZXR1cm4gS2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEtlKCl7cmV0dXJuKEtlPXFlKGZ1bmN0aW9uKih0LGUpe2lmKHlpZWxkIHQuZXhpc3RzKE9iamVjdChmLmEpKGUsIi5naXQiKSkpcmV0dXJuIGU7e2NvbnN0IHI9T2JqZWN0KExlLmEpKGUpO2lmKHI9PT1lKXRocm93IG5ldyB1LmIodS5hLkdpdFJvb3ROb3RGb3VuZEVycm9yLHtmaWxlcGF0aDplfSk7cmV0dXJuIFplKHQscil9fSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgVmU9cig0Myk7ZnVuY3Rpb24gWGUodCxlLHIsbixpLG8sYSl7dHJ5e3ZhciBzPXRbb10oYSksdT1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UodSk6UHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4obixpKX1mdW5jdGlvbiBKZSh0KXtyZXR1cm4gUWUuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFFlKCl7dmFyIHQ7cmV0dXJuIHQ9ZnVuY3Rpb24qKHtjb3JlOnQ9ImRlZmF1bHQiLGNvcnNQcm94eTplLHVybDpyLGF1dGhVc2VybmFtZTpuLGF1dGhQYXNzd29yZDppLG5vR2l0U3VmZml4Om89ITEsdXNlcm5hbWU6YT1uLHBhc3N3b3JkOnM9aSx0b2tlbjp1LG9hdXRoMmZvcm1hdDpjLGhlYWRlcnM6Zj17fSxmb3JQdXNoOmw9ITF9KXt0cnl7bGV0IG49e3VzZXJuYW1lOmEscGFzc3dvcmQ6cyx0b2tlbjp1LG9hdXRoMmZvcm1hdDpjfTtjb25zdCBpPXlpZWxkIFZlLmEuZGlzY292ZXIoe2NvcmU6dCxjb3JzUHJveHk6ZSxzZXJ2aWNlOmw/ImdpdC1yZWNlaXZlLXBhY2siOiJnaXQtdXBsb2FkLXBhY2siLHVybDpyLG5vR2l0U3VmZml4Om8sYXV0aDpuLGhlYWRlcnM6Zn0pO249aS5hdXRoO2NvbnN0IGQ9e2NhcGFiaWxpdGllczpbLi4uaS5jYXBhYmlsaXRpZXNdfTtmb3IoY29uc3RbdCxlXW9mIGkucmVmcyl7Y29uc3Qgcj10LnNwbGl0KCIvIiksbj1yLnBvcCgpO2xldCBpPWQ7Zm9yKGNvbnN0IHQgb2YgcilpW3RdPWlbdF18fHt9LGk9aVt0XTtpW25dPWV9Zm9yKGNvbnN0W3QsZV1vZiBpLnN5bXJlZnMpe2NvbnN0IHI9dC5zcGxpdCgiLyIpLG49ci5wb3AoKTtsZXQgaT1kO2Zvcihjb25zdCB0IG9mIHIpaVt0XT1pW3RdfHx7fSxpPWlbdF07aVtuXT1lfXJldHVybiBkfWNhdGNoKHQpe3Rocm93IHQuY2FsbGVyPSJnaXQuZ2V0UmVtb3RlSW5mbyIsdH19LChRZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4saSl7dmFyIG89dC5hcHBseShlLHIpO2Z1bmN0aW9uIGEodCl7WGUobyxuLGksYSxzLCJuZXh0Iix0KX1mdW5jdGlvbiBzKHQpe1hlKG8sbixpLGEscywidGhyb3ciLHQpfWEodm9pZCAwKX0pfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciB0cj1yKDEyOSk7ZnVuY3Rpb24gZXIodCxlLHIsbixpLG8sYSl7dHJ5e3ZhciBzPXRbb10oYSksdT1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UodSk6UHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4obixpKX1mdW5jdGlvbiBycih0KXtyZXR1cm4gbnIuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIG5yKCl7dmFyIHQ7cmV0dXJuIHQ9ZnVuY3Rpb24qKHtjb3JlOnQ9ImRlZmF1bHQiLGRpcjplLGdpdGRpcjpyPU9iamVjdChmLmEpKGUsIi5naXQiKSxmczpuPWwuYS5nZXQodCkuZ2V0KCJmcyIpLGVtaXR0ZXI6aT1sLmEuZ2V0KHQpLmdldCgiZW1pdHRlciIpLGVtaXR0ZXJQcmVmaXg6bz0iIixmaWxlcGF0aDphfSl7dHJ5e2NvbnN0IHQ9bmV3IHMuYShuKTthPU9iamVjdChmLmEpKGUsYSk7Y29uc3QgdT15aWVsZCB0LnJlYWQoYSksYz1lPT5PYmplY3Qoai5hKSh7ZnM6dCxnaXRkaXI6cixvaWQ6ZX0pLGw9eWllbGQgU3QuYS5mcm9tUGFjayh7cGFjazp1LGdldEV4dGVybmFsUmVmRGVsdGE6YyxlbWl0dGVyOmksZW1pdHRlclByZWZpeDpvfSk7eWllbGQgdC53cml0ZShhLnJlcGxhY2UoL1wucGFjayQvLCIuaWR4IiksbC50b0J1ZmZlcigpKX1jYXRjaCh0KXt0aHJvdyB0LmNhbGxlcj0iZ2l0LmluZGV4UGFjayIsdH19LChucj1mdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4saSl7dmFyIG89dC5hcHBseShlLHIpO2Z1bmN0aW9uIGEodCl7ZXIobyxuLGksYSxzLCJuZXh0Iix0KX1mdW5jdGlvbiBzKHQpe2VyKG8sbixpLGEscywidGhyb3ciLHQpfWEodm9pZCAwKX0pfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGlyKHQsZSxyLG4saSxvLGEpe3RyeXt2YXIgcz10W29dKGEpLHU9cy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCByKHQpfXMuZG9uZT9lKHUpOlByb21pc2UucmVzb2x2ZSh1KS50aGVuKG4saSl9ZnVuY3Rpb24gb3IodCl7cmV0dXJuIGFyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBhcigpe3ZhciB0O3JldHVybiB0PWZ1bmN0aW9uKih7Y29yZTp0PSJkZWZhdWx0IixkaXI6ZSxnaXRkaXI6cj1PYmplY3QoZi5hKShlLCIuZ2l0IiksZnM6bj1sLmEuZ2V0KHQpLmdldCgiZnMiKSxvaWQ6aSxhbmNlc3RvcjpvLGRlcHRoOmE9LTF9KXt0cnl7Y29uc3QgdD1uZXcgcy5hKG4pLGU9eWllbGQganQuYS5yZWFkKHtmczp0LGdpdGRpcjpyfSk7aWYoIWkpdGhyb3cgbmV3IHUuYih1LmEuTWlzc2luZ1JlcXVpcmVkUGFyYW1ldGVyRXJyb3Ise2Z1bmN0aW9uOiJpc0Rlc2NlbmRlbnQiLHBhcmFtZXRlcjoib2lkIn0pO2lmKCFvKXRocm93IG5ldyB1LmIodS5hLk1pc3NpbmdSZXF1aXJlZFBhcmFtZXRlckVycm9yLHtmdW5jdGlvbjoiaXNEZXNjZW5kZW50IixwYXJhbWV0ZXI6ImFuY2VzdG9yIn0pO2lmKGk9PT1vKXJldHVybiExO2NvbnN0IGM9W2ldLGY9bmV3IFNldDtsZXQgbD0wO2Zvcig7Yy5sZW5ndGg7KXtpZihsKys9PT1hKXRocm93IG5ldyB1LmIodS5hLk1heFNlYXJjaERlcHRoRXhjZWVkZWQse2RlcHRoOmF9KTtjb25zdCBuPWMuc2hpZnQoKSx7dHlwZTppLG9iamVjdDpzfT15aWVsZCBPYmplY3Qoai5hKSh7ZnM6dCxnaXRkaXI6cixvaWQ6bn0pO2lmKCJjb21taXQiIT09aSl0aHJvdyBuZXcgdS5iKHUuYS5SZXNvbHZlQ29tbWl0RXJyb3Ise29pZDpufSk7Y29uc3QgZD1QdC5hLmZyb20ocykucGFyc2UoKTtmb3IoY29uc3QgdCBvZiBkLnBhcmVudClpZih0PT09bylyZXR1cm4hMDtpZighZS5oYXMobikpZm9yKGNvbnN0IHQgb2YgZC5wYXJlbnQpZi5oYXModCl8fChjLnB1c2godCksZi5hZGQodCkpfXJldHVybiExfWNhdGNoKHQpe3Rocm93IHQuY2FsbGVyPSJnaXQuaXNEZXNjZW5kZW50Iix0fX0sKGFyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obixpKXt2YXIgbz10LmFwcGx5KGUscik7ZnVuY3Rpb24gYSh0KXtpcihvLG4saSxhLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7aXIobyxuLGksYSxzLCJ0aHJvdyIsdCl9YSh2b2lkIDApfSl9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gc3IodCxlLHIsbixpLG8sYSl7dHJ5e3ZhciBzPXRbb10oYSksdT1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UodSk6UHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4obixpKX1mdW5jdGlvbiB1cih0KXtyZXR1cm4gY3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGNyKCl7dmFyIHQ7cmV0dXJuIHQ9ZnVuY3Rpb24qKHtjb3JlOnQ9ImRlZmF1bHQiLGRpcjplLGdpdGRpcjpyPU9iamVjdChmLmEpKGUsIi5naXQiKSxmczpuPWwuYS5nZXQodCkuZ2V0KCJmcyIpLHJlbW90ZTppfSl7dHJ5e2NvbnN0IHQ9bmV3IHMuYShuKTtyZXR1cm4gay5hLmxpc3RCcmFuY2hlcyh7ZnM6dCxnaXRkaXI6cixyZW1vdGU6aX0pfWNhdGNoKHQpe3Rocm93IHQuY2FsbGVyPSJnaXQubGlzdEJyYW5jaGVzIix0fX0sKGNyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obixpKXt2YXIgbz10LmFwcGx5KGUscik7ZnVuY3Rpb24gYSh0KXtzcihvLG4saSxhLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7c3IobyxuLGksYSxzLCJ0aHJvdyIsdCl9YSh2b2lkIDApfSl9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIGZyPXIoMzEpO2Z1bmN0aW9uIGxyKHQsZSxyLG4saSxvLGEpe3RyeXt2YXIgcz10W29dKGEpLHU9cy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCByKHQpfXMuZG9uZT9lKHUpOlByb21pc2UucmVzb2x2ZSh1KS50aGVuKG4saSl9ZnVuY3Rpb24gZHIodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obixpKXt2YXIgbz10LmFwcGx5KGUscik7ZnVuY3Rpb24gYSh0KXtscihvLG4saSxhLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7bHIobyxuLGksYSxzLCJ0aHJvdyIsdCl9YSh2b2lkIDApfSl9fWZ1bmN0aW9uIGhyKHQpe3JldHVybiBwci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gcHIoKXtyZXR1cm4ocHI9ZHIoZnVuY3Rpb24qKHtjb3JlOnQ9ImRlZmF1bHQiLGRpcjplLGdpdGRpcjpyPU9iamVjdChmLmEpKGUsIi5naXQiKSxmczpuPWwuYS5nZXQodCkuZ2V0KCJmcyIpLG9pZDppLGZvcm1hdDpvPSJwYXJzZWQiLGZpbGVwYXRoOmEsZW5jb2Rpbmc6Y30pe3RyeXtjb25zdCB0PW5ldyBzLmEobik7aWYodm9pZCAwIT09YSl7aWYoYS5zdGFydHNXaXRoKCIvIil8fGEuZW5kc1dpdGgoIi8iKSl0aHJvdyBuZXcgdS5iKHUuYS5EaXJlY3RvcnlTZXBhcmF0b3JzRXJyb3IpO2NvbnN0IGU9aSxuPXlpZWxkIE9iamVjdChmci5hKSh7ZnM6dCxnaXRkaXI6cixvaWQ6aX0pLG89bi50cmVlO2lmKCIiPT09YSlpPW4ub2lkO2Vsc2V7Y29uc3Qgbj1hLnNwbGl0KCIvIik7aT15aWVsZCBncih7ZnM6dCxnaXRkaXI6cix0cmVlOm8scGF0aEFycmF5Om4sb2lkOmUsZmlsZXBhdGg6YX0pfX1jb25zdCBlPSJwYXJzZWQiPT09bz8iY29udGVudCI6byxmPXlpZWxkIE9iamVjdChqLmEpKHtmczp0LGdpdGRpcjpyLG9pZDppLGZvcm1hdDplfSk7aWYoZi5vaWQ9aSwicGFyc2VkIj09PW8pc3dpdGNoKGYuZm9ybWF0PSJwYXJzZWQiLGYudHlwZSl7Y2FzZSJjb21taXQiOmYub2JqZWN0PVB0LmEuZnJvbShmLm9iamVjdCkucGFyc2UoKTticmVhaztjYXNlInRyZWUiOmYub2JqZWN0PXtlbnRyaWVzOmFlLmEuZnJvbShmLm9iamVjdCkuZW50cmllcygpfTticmVhaztjYXNlImJsb2IiOmM/Zi5vYmplY3Q9Zi5vYmplY3QudG9TdHJpbmcoYyk6Zi5mb3JtYXQ9ImNvbnRlbnQiO2JyZWFrO2Nhc2UidGFnIjpmLm9iamVjdD1PLmEuZnJvbShmLm9iamVjdCkucGFyc2UoKTticmVhaztkZWZhdWx0OnRocm93IG5ldyB1LmIodS5hLk9iamVjdFR5cGVVbmtub3duRmFpbCx7dHlwZTpmLnR5cGV9KX1yZXR1cm4gZn1jYXRjaCh0KXt0aHJvdyB0LmNhbGxlcj0iZ2l0LnJlYWRPYmplY3QiLHR9fSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBncih0KXtyZXR1cm4gbXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIG1yKCl7cmV0dXJuKG1yPWRyKGZ1bmN0aW9uKih7ZnM6dCxnaXRkaXI6ZSx0cmVlOnIscGF0aEFycmF5Om4sb2lkOmksZmlsZXBhdGg6b30pe2NvbnN0IGE9bi5zaGlmdCgpO2Zvcihjb25zdCBzIG9mIHIpaWYocy5wYXRoPT09YSl7aWYoMD09PW4ubGVuZ3RoKXJldHVybiBzLm9pZDt7Y29uc3R7dHlwZTphLG9iamVjdDpjfT15aWVsZCBPYmplY3Qoai5hKSh7ZnM6dCxnaXRkaXI6ZSxvaWQ6cy5vaWR9KTtpZigiYmxvYiI9PT1hKXRocm93IG5ldyB1LmIodS5hLkRpcmVjdG9yeUlzQUZpbGVFcnJvcix7b2lkOmksZmlsZXBhdGg6b30pO2lmKCJ0cmVlIiE9PWEpdGhyb3cgbmV3IHUuYih1LmEuT2JqZWN0VHlwZUFzc2VydGlvbkluVHJlZUZhaWwse29pZDpzLm9pZCxlbnRyeXBhdGg6byx0eXBlOmF9KTtyZXR1cm4gZ3Ioe2ZzOnQsZ2l0ZGlyOmUsdHJlZTpyPWFlLmEuZnJvbShjKSxwYXRoQXJyYXk6bixvaWQ6aSxmaWxlcGF0aDpvfSl9fXRocm93IG5ldyB1LmIodS5hLlRyZWVPckJsb2JOb3RGb3VuZEVycm9yLHtvaWQ6aSxmaWxlcGF0aDpvfSl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHlyKHQsZSxyLG4saSxvLGEpe3RyeXt2YXIgcz10W29dKGEpLHU9cy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCByKHQpfXMuZG9uZT9lKHUpOlByb21pc2UucmVzb2x2ZSh1KS50aGVuKG4saSl9ZnVuY3Rpb24gdnIodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obixpKXt2YXIgbz10LmFwcGx5KGUscik7ZnVuY3Rpb24gYSh0KXt5cihvLG4saSxhLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7eXIobyxuLGksYSxzLCJ0aHJvdyIsdCl9YSh2b2lkIDApfSl9fWZ1bmN0aW9uIHdyKHQpe3JldHVybiBici5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gYnIoKXtyZXR1cm4oYnI9dnIoZnVuY3Rpb24qKHtjb3JlOnQ9ImRlZmF1bHQiLGRpcjplLGdpdGRpcjpyPU9iamVjdChmLmEpKGUsIi5naXQiKSxmczpuPWwuYS5nZXQodCkuZ2V0KCJmcyIpLHJlZjppfSl7dHJ5e2NvbnN0IHQ9bmV3IHMuYShuKTtpZihpKXtjb25zdCBlPXlpZWxkIGsuYS5yZXNvbHZlKHtnaXRkaXI6cixmczp0LHJlZjppfSksbj1bXTtyZXR1cm4geWllbGQgX3Ioe2dpdGRpcjpyLGZzOnQsb2lkOmUsZmlsZW5hbWVzOm4scHJlZml4OiIifSksbn1yZXR1cm4gYS5hLmFjcXVpcmUoe2ZzOnQsZ2l0ZGlyOnJ9LGZ1bmN0aW9uKCl7dmFyIHQ9dnIoZnVuY3Rpb24qKHQpe3JldHVybiB0LmVudHJpZXMubWFwKHQ9PnQucGF0aCl9KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSl9Y2F0Y2godCl7dGhyb3cgdC5jYWxsZXI9ImdpdC5saXN0RmlsZXMiLHR9fSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBfcih0KXtyZXR1cm4geHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHhyKCl7cmV0dXJuKHhyPXZyKGZ1bmN0aW9uKih7Z2l0ZGlyOnQsZnM6ZSxvaWQ6cixmaWxlbmFtZXM6bixwcmVmaXg6aX0pe2NvbnN0e29iamVjdDpvfT15aWVsZCBocih7Z2l0ZGlyOnQsZnM6ZSxvaWQ6cixmaWxlcGF0aDoiIn0pO2Zvcihjb25zdCByIG9mIG8uZW50cmllcykidHJlZSI9PT1yLnR5cGU/eWllbGQgX3Ioe2dpdGRpcjp0LGZzOmUsb2lkOnIub2lkLGZpbGVuYW1lczpuLHByZWZpeDpPYmplY3QoZi5hKShpLHIucGF0aCl9KTpuLnB1c2goT2JqZWN0KGYuYSkoaSxyLnBhdGgpKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gRXIodCxlLHIsbixpLG8sYSl7dHJ5e3ZhciBzPXRbb10oYSksdT1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UodSk6UHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4obixpKX1mdW5jdGlvbiBrcih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLGkpe3ZhciBvPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBhKHQpe0VyKG8sbixpLGEscywibmV4dCIsdCl9ZnVuY3Rpb24gcyh0KXtFcihvLG4saSxhLHMsInRocm93Iix0KX1hKHZvaWQgMCl9KX19ZnVuY3Rpb24gT3IodCl7cmV0dXJuIGpyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBqcigpe3JldHVybihqcj1rcihmdW5jdGlvbiooe2NvcmU6dD0iZGVmYXVsdCIsZGlyOmUsZ2l0ZGlyOnI9T2JqZWN0KGYuYSkoZSwiLmdpdCIpLGZzOm49bC5hLmdldCh0KS5nZXQoImZzIil9KXt0cnl7Y29uc3QgdD1uZXcgcy5hKG4pLGU9eWllbGQgYi5hLmdldCh7ZnM6dCxnaXRkaXI6cn0pLGk9eWllbGQgZS5nZXRTdWJzZWN0aW9ucygicmVtb3RlIik7cmV0dXJuIFByb21pc2UuYWxsKGkubWFwKGZ1bmN0aW9uKCl7dmFyIHQ9a3IoZnVuY3Rpb24qKHQpe3JldHVybntyZW1vdGU6dCx1cmw6eWllbGQgZS5nZXQoYHJlbW90ZS4ke3R9LnVybGApfX0pO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSl9Y2F0Y2godCl7dGhyb3cgdC5jYWxsZXI9ImdpdC5saXN0UmVtb3RlcyIsdH19KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFByKHQsZSxyLG4saSxvLGEpe3RyeXt2YXIgcz10W29dKGEpLHU9cy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCByKHQpfXMuZG9uZT9lKHUpOlByb21pc2UucmVzb2x2ZSh1KS50aGVuKG4saSl9ZnVuY3Rpb24gU3IodCl7cmV0dXJuIFJyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBScigpe3ZhciB0O3JldHVybiB0PWZ1bmN0aW9uKih7Y29yZTp0PSJkZWZhdWx0IixkaXI6ZSxnaXRkaXI6cj1PYmplY3QoZi5hKShlLCIuZ2l0IiksZnM6bj1sLmEuZ2V0KHQpLmdldCgiZnMiKX0pe3RyeXtjb25zdCB0PW5ldyBzLmEobik7cmV0dXJuIGsuYS5saXN0VGFncyh7ZnM6dCxnaXRkaXI6cn0pfWNhdGNoKHQpe3Rocm93IHQuY2FsbGVyPSJnaXQubGlzdFRhZ3MiLHR9fSwoUnI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLGkpe3ZhciBvPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBhKHQpe1ByKG8sbixpLGEscywibmV4dCIsdCl9ZnVuY3Rpb24gcyh0KXtQcihvLG4saSxhLHMsInRocm93Iix0KX1hKHZvaWQgMCl9KX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiAkcih0LGUpe3JldHVybiB0LmNvbW1pdHRlci50aW1lc3RhbXAtZS5jb21taXR0ZXIudGltZXN0YW1wfWZ1bmN0aW9uIEFyKHQsZSxyLG4saSxvLGEpe3RyeXt2YXIgcz10W29dKGEpLHU9cy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCByKHQpfXMuZG9uZT9lKHUpOlByb21pc2UucmVzb2x2ZSh1KS50aGVuKG4saSl9ZnVuY3Rpb24gVHIodCl7cmV0dXJuIElyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBJcigpe3ZhciB0O3JldHVybiB0PWZ1bmN0aW9uKih7ZnM6dCxnaXRkaXI6ZSxvaWQ6cixzaWduaW5nOm59KXt0cnl7Y29uc3R7dHlwZTppLG9iamVjdDpvfT15aWVsZCBPYmplY3Qoai5hKSh7ZnM6dCxnaXRkaXI6ZSxvaWQ6cn0pO2lmKCJjb21taXQiIT09aSl0aHJvdyBuZXcgdS5iKHUuYS5PYmplY3RUeXBlQXNzZXJ0aW9uRmFpbCx7b2lkOnIsZXhwZWN0ZWQ6ImNvbW1pdCIsdHlwZTppfSk7Y29uc3QgYT1QdC5hLmZyb20obykscz1PYmplY3QuYXNzaWduKHtvaWQ6cn0sYS5wYXJzZSgpKTtyZXR1cm4gbiYmKHMucGF5bG9hZD1hLndpdGhvdXRTaWduYXR1cmUoKSksc31jYXRjaCh0KXtyZXR1cm57b2lkOnIsZXJyb3I6dH19fSwoSXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLGkpe3ZhciBvPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBhKHQpe0FyKG8sbixpLGEscywibmV4dCIsdCl9ZnVuY3Rpb24gcyh0KXtBcihvLG4saSxhLHMsInRocm93Iix0KX1hKHZvaWQgMCl9KX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBCcih0LGUscixuLGksbyxhKXt0cnl7dmFyIHM9dFtvXShhKSx1PXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZSh1KTpQcm9taXNlLnJlc29sdmUodSkudGhlbihuLGkpfWZ1bmN0aW9uIEZyKHQpe3JldHVybiBVci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gVXIoKXt2YXIgdDtyZXR1cm4gdD1mdW5jdGlvbiooe2NvcmU6dD0iZGVmYXVsdCIsZGlyOmUsZ2l0ZGlyOnI9T2JqZWN0KGYuYSkoZSwiLmdpdCIpLGZzOm49bC5hLmdldCh0KS5nZXQoImZzIikscmVmOmk9IkhFQUQiLGRlcHRoOm8sc2luY2U6YSxzaWduaW5nOnU9ITF9KXt0cnl7Y29uc3QgdD1uZXcgcy5hKG4pLGU9dm9pZCAwPT09YT92b2lkIDA6TWF0aC5mbG9vcihhLnZhbHVlT2YoKS8xZTMpLGM9W10sZj15aWVsZCBqdC5hLnJlYWQoe2ZzOnQsZ2l0ZGlyOnJ9KSxsPXlpZWxkIGsuYS5yZXNvbHZlKHtmczp0LGdpdGRpcjpyLHJlZjppfSksZD1beWllbGQgVHIoe2ZzOnQsZ2l0ZGlyOnIsb2lkOmwsc2lnbmluZzp1fSldO2Zvcig7Oyl7Y29uc3Qgbj1kLnBvcCgpO2lmKG4uZXJyb3Ipe2MucHVzaChuKTticmVha31pZih2b2lkIDAhPT1lJiZuLmNvbW1pdHRlci50aW1lc3RhbXA8PWUpYnJlYWs7aWYoYy5wdXNoKG4pLHZvaWQgMCE9PW8mJmMubGVuZ3RoPT09bylicmVhaztpZighZi5oYXMobi5vaWQpKWZvcihjb25zdCBlIG9mIG4ucGFyZW50KXtjb25zdCBuPXlpZWxkIFRyKHtmczp0LGdpdGRpcjpyLG9pZDplLHNpZ25pbmc6dX0pO2QubWFwKHQ9PnQub2lkKS5pbmNsdWRlcyhuLm9pZCl8fGQucHVzaChuKX1pZigwPT09ZC5sZW5ndGgpYnJlYWs7ZC5zb3J0KCRyKX1yZXR1cm4gY31jYXRjaCh0KXt0aHJvdyB0LmNhbGxlcj0iZ2l0LmxvZyIsdH19LChVcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4saSl7dmFyIG89dC5hcHBseShlLHIpO2Z1bmN0aW9uIGEodCl7QnIobyxuLGksYSxzLCJuZXh0Iix0KX1mdW5jdGlvbiBzKHQpe0JyKG8sbixpLGEscywidGhyb3ciLHQpfWEodm9pZCAwKX0pfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBNcj1yKDg2KTtmdW5jdGlvbiBDcih0LGUscixuLGksbyxhKXt0cnl7dmFyIHM9dFtvXShhKSx1PXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZSh1KTpQcm9taXNlLnJlc29sdmUodSkudGhlbihuLGkpfWZ1bmN0aW9uIE5yKHQpe3JldHVybiBEci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gRHIoKXt2YXIgdDtyZXR1cm4gdD1mdW5jdGlvbiooe2NvcmU6dD0iZGVmYXVsdCIsZGlyOmUsZ2l0ZGlyOnI9T2JqZWN0KGYuYSkoZSwiLmdpdCIpLGZzOm49bC5hLmdldCh0KS5nZXQoImZzIiksb3VyczppLHRoZWlyczpvLGZhc3RGb3J3YXJkT25seTphPSExLGRyeVJ1bjpjPSExLG5vVXBkYXRlQnJhbmNoOmQ9ITEsbWVzc2FnZTpoLGF1dGhvcjpwLGNvbW1pdHRlcjpnLHNpZ25pbmdLZXk6bX0pe3RyeXtjb25zdCBmPW5ldyBzLmEobik7dm9pZCAwPT09aSYmKGk9eWllbGQgcGUoe2ZzOmYsZ2l0ZGlyOnIsZnVsbG5hbWU6ITB9KSksaT15aWVsZCBrLmEuZXhwYW5kKHtmczpmLGdpdGRpcjpyLHJlZjppfSksbz15aWVsZCBrLmEuZXhwYW5kKHtmczpmLGdpdGRpcjpyLHJlZjpvfSk7Y29uc3QgbD15aWVsZCBrLmEucmVzb2x2ZSh7ZnM6ZixnaXRkaXI6cixyZWY6aX0pLHk9eWllbGQgay5hLnJlc29sdmUoe2ZzOmYsZ2l0ZGlyOnIscmVmOm99KSx2PXlpZWxkIHplKHtjb3JlOnQsZGlyOmUsZ2l0ZGlyOnIsZnM6ZixvaWRzOltsLHldfSk7aWYoMSE9PXYubGVuZ3RoKXRocm93IG5ldyB1LmIodS5hLk1lcmdlTm90U3VwcG9ydGVkRmFpbCk7Y29uc3Qgdz12WzBdO2lmKHc9PT15KXJldHVybntvaWQ6bCxhbHJlYWR5TWVyZ2VkOiEwfTtpZih3PT09bClyZXR1cm4gY3x8ZHx8KHlpZWxkIGsuYS53cml0ZVJlZih7ZnM6ZixnaXRkaXI6cixyZWY6aSx2YWx1ZTp5fSkpLHtvaWQ6eSxmYXN0Rm9yd2FyZDohMH07e2lmKGEpdGhyb3cgbmV3IHUuYih1LmEuRmFzdEZvcndhcmRGYWlsKTtjb25zdCBlPXlpZWxkIE9iamVjdChNci5hKSh7Y29yZTp0LGZzOmYsZ2l0ZGlyOnIsb3VyT2lkOmwsdGhlaXJPaWQ6eSxiYXNlT2lkOncsb3VyTmFtZTppLGJhc2VOYW1lOiJiYXNlIix0aGVpck5hbWU6byxkcnlSdW46Y30pO3JldHVybiBofHwoaD1gTWVyZ2UgYnJhbmNoICcke0N0KG8pfScgaW50byAke0N0KGkpfWApLHtvaWQ6eWllbGQgY2Uoe2ZzOmYsZ2l0ZGlyOnIsbWVzc2FnZTpoLHJlZjppLHRyZWU6ZSxwYXJlbnQ6W2wseV0sYXV0aG9yOnAsY29tbWl0dGVyOmcsc2lnbmluZ0tleTptLGRyeVJ1bjpjLG5vVXBkYXRlQnJhbmNoOmR9KSx0cmVlOmUsbWVyZ2VDb21taXQ6ITB9fX1jYXRjaCh0KXt0aHJvdyB0LmNhbGxlcj0iZ2l0Lm1lcmdlIix0fX0sKERyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obixpKXt2YXIgbz10LmFwcGx5KGUscik7ZnVuY3Rpb24gYSh0KXtDcihvLG4saSxhLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7Q3IobyxuLGksYSxzLCJ0aHJvdyIsdCl9YSh2b2lkIDApfSl9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIHpyPXIoNzEpO2Z1bmN0aW9uIEhyKHQsZSxyLG4saSxvLGEpe3RyeXt2YXIgcz10W29dKGEpLHU9cy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCByKHQpfXMuZG9uZT9lKHUpOlByb21pc2UucmVzb2x2ZSh1KS50aGVuKG4saSl9ZnVuY3Rpb24gTHIodCl7cmV0dXJuIEdyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBHcigpe3ZhciB0O3JldHVybiB0PWZ1bmN0aW9uKih7Y29yZTp0PSJkZWZhdWx0IixkaXI6ZSxnaXRkaXI6cj1PYmplY3QoZi5hKShlLCIuZ2l0IiksZnM6bj1sLmEuZ2V0KHQpLmdldCgiZnMiKSxvaWRzOmksd3JpdGU6bz0hMX0pe3RyeXtjb25zdCBlPW5ldyBzLmEobiksYT15aWVsZCBPYmplY3QoenIuYSkoe2NvcmU6dCxnaXRkaXI6cixmczplLG9pZHM6aX0pLHU9eWllbGQgT2JqZWN0KE50LmEpKGEpLGM9YHBhY2stJHt1LnNsaWNlKC0yMCkudG9TdHJpbmcoImhleCIpfS5wYWNrYDtyZXR1cm4gbz8oeWllbGQgZS53cml0ZShPYmplY3QoZi5hKShyLGBvYmplY3RzL3BhY2svJHtjfWApLHUpLHtmaWxlbmFtZTpjfSk6e2ZpbGVuYW1lOmMscGFja2ZpbGU6dX19Y2F0Y2godCl7dGhyb3cgdC5jYWxsZXI9ImdpdC5wYWNrT2JqZWN0cyIsdH19LChHcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4saSl7dmFyIG89dC5hcHBseShlLHIpO2Z1bmN0aW9uIGEodCl7SHIobyxuLGksYSxzLCJuZXh0Iix0KX1mdW5jdGlvbiBzKHQpe0hyKG8sbixpLGEscywidGhyb3ciLHQpfWEodm9pZCAwKX0pfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHFyKHQsZSxyLG4saSxvLGEpe3RyeXt2YXIgcz10W29dKGEpLHU9cy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCByKHQpfXMuZG9uZT9lKHUpOlByb21pc2UucmVzb2x2ZSh1KS50aGVuKG4saSl9ZnVuY3Rpb24gV3IodCl7cmV0dXJuIFlyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBZcigpe3ZhciB0O3JldHVybiB0PWZ1bmN0aW9uKih7Y29yZTp0PSJkZWZhdWx0IixkaXI6ZSxnaXRkaXI6cj1PYmplY3QoZi5hKShlLCIuZ2l0IiksZnM6bj1sLmEuZ2V0KHQpLmdldCgiZnMiKSxyZWY6aSxmYXN0Rm9yd2FyZE9ubHk6bz0hMSxub0dpdFN1ZmZpeDphPSExLGNvcnNQcm94eTp1LGVtaXR0ZXI6Yz1sLmEuZ2V0KHQpLmdldCgiZW1pdHRlciIpLGVtaXR0ZXJQcmVmaXg6ZD0iIixhdXRoVXNlcm5hbWU6aCxhdXRoUGFzc3dvcmQ6cCx1c2VybmFtZTpnPWgscGFzc3dvcmQ6bT1wLHRva2VuOnksb2F1dGgyZm9ybWF0OnYsc2luZ2xlQnJhbmNoOncsaGVhZGVyczpiPXt9LGF1dGhvcjpfLGNvbW1pdHRlcjp4LHNpZ25pbmdLZXk6RSxmYXN0Oms9ITF9KXt0cnl7Y29uc3QgdD1uZXcgcy5hKG4pO2l8fChpPXlpZWxkIHBlKHtmczp0LGdpdGRpcjpyfSkpO2NvbnN0IGY9eWllbGQgUyh7Z2l0ZGlyOnIsZnM6dCxwYXRoOmBicmFuY2guJHtpfS5yZW1vdGVgfSkse2ZldGNoSGVhZDpsLGZldGNoSGVhZERlc2NyaXB0aW9uOmh9PXlpZWxkIFh0KHtkaXI6ZSxnaXRkaXI6cixmczp0LGVtaXR0ZXI6YyxlbWl0dGVyUHJlZml4OmQsbm9HaXRTdWZmaXg6YSxjb3JzUHJveHk6dSxyZWY6aSxyZW1vdGU6Zix1c2VybmFtZTpnLHBhc3N3b3JkOm0sdG9rZW46eSxvYXV0aDJmb3JtYXQ6dixzaW5nbGVCcmFuY2g6dyxoZWFkZXJzOmJ9KTt5aWVsZCBOcih7Z2l0ZGlyOnIsZnM6dCxvdXJzOmksdGhlaXJzOmwsZmFzdEZvcndhcmRPbmx5Om8sbWVzc2FnZTpgTWVyZ2UgJHtofWAsYXV0aG9yOl8sY29tbWl0dGVyOngsc2lnbmluZ0tleTpFfSksaz95aWVsZCB4dCh7ZGlyOmUsZ2l0ZGlyOnIsZnM6dCxyZWY6aSxlbWl0dGVyOmMsZW1pdHRlclByZWZpeDpkfSk6eWllbGQgdXQoe2RpcjplLGdpdGRpcjpyLGZzOnQscmVmOmksZW1pdHRlcjpjLGVtaXR0ZXJQcmVmaXg6ZH0pfWNhdGNoKHQpe3Rocm93IHQuY2FsbGVyPSJnaXQucHVsbCIsdH19LChZcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4saSl7dmFyIG89dC5hcHBseShlLHIpO2Z1bmN0aW9uIGEodCl7cXIobyxuLGksYSxzLCJuZXh0Iix0KX1mdW5jdGlvbiBzKHQpe3FyKG8sbixpLGEscywidGhyb3ciLHQpfWEodm9pZCAwKX0pfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBacj1yKDUzKSxLcj1yKDkwKSxWcj1yKDg5KSxYcj1yKDg3KSxKcj1yKDg4KTtmdW5jdGlvbiBRcih0LGUscixuLGksbyxhKXt0cnl7dmFyIHM9dFtvXShhKSx1PXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZSh1KTpQcm9taXNlLnJlc29sdmUodSkudGhlbihuLGkpfWZ1bmN0aW9uIHRuKHQpe3JldHVybiBlbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gZW4oKXt2YXIgdDtyZXR1cm4gdD1mdW5jdGlvbiooe2NvcmU6dD0iZGVmYXVsdCIsZGlyOmUsZ2l0ZGlyOnI9T2JqZWN0KGYuYSkoZSwiLmdpdCIpLGZzOm49bC5hLmdldCh0KS5nZXQoImZzIiksZW1pdHRlcjppPWwuYS5nZXQodCkuZ2V0KCJlbWl0dGVyIiksZW1pdHRlclByZWZpeDpvPSIiLHJlZjphLHJlbW90ZVJlZjpjLHJlbW90ZTpkPSJvcmlnaW4iLHVybDpoLGZvcmNlOnA9ITEsbm9HaXRTdWZmaXg6Zz0hMSxjb3JzUHJveHk6bSxhdXRoVXNlcm5hbWU6eSxhdXRoUGFzc3dvcmQ6dix1c2VybmFtZTp3PXkscGFzc3dvcmQ6Yj12LHRva2VuOl8sb2F1dGgyZm9ybWF0OngsaGVhZGVyczpFPXt9fSl7dHJ5e2NvbnN0IGU9bmV3IHMuYShuKTtsZXQgZjt2b2lkIDA9PT1oJiYoaD15aWVsZCBTKHtmczplLGdpdGRpcjpyLHBhdGg6YHJlbW90ZS4ke2R9LnVybGB9KSksdm9pZCAwPT09bSYmKG09eWllbGQgUyh7ZnM6ZSxnaXRkaXI6cixwYXRoOiJodHRwLmNvcnNQcm94eSJ9KSksZj1hP3lpZWxkIGsuYS5leHBhbmQoe2ZzOmUsZ2l0ZGlyOnIscmVmOmF9KTp5aWVsZCBrLmEucmVzb2x2ZSh7ZnM6ZSxnaXRkaXI6cixyZWY6IkhFQUQiLGRlcHRoOjJ9KTtjb25zdCBsPXlpZWxkIGsuYS5yZXNvbHZlKHtmczplLGdpdGRpcjpyLHJlZjpmfSk7bGV0IHk9e3VzZXJuYW1lOncscGFzc3dvcmQ6Yix0b2tlbjpfLG9hdXRoMmZvcm1hdDp4fTtjb25zdCB2PU90LmEuZ2V0UmVtb3RlSGVscGVyRm9yKHt1cmw6aH0pLE89eWllbGQgdi5kaXNjb3Zlcih7Y29yZTp0LGNvcnNQcm94eTptLHNlcnZpY2U6ImdpdC1yZWNlaXZlLXBhY2siLHVybDpoLG5vR2l0U3VmZml4OmcsYXV0aDp5LGhlYWRlcnM6RX0pO2xldCBqO2lmKHk9Ty5hdXRoLGMpdHJ5e2o9eWllbGQgay5hLmV4cGFuZEFnYWluc3RNYXAoe3JlZjpjLG1hcDpPLnJlZnN9KX1jYXRjaCh0KXtpZih0LmNvZGUhPT11LmEuRXhwYW5kUmVmRXJyb3IpdGhyb3cgdDtqPWMuc3RhcnRzV2l0aCgicmVmcy8iKT9jOmByZWZzL2hlYWRzLyR7Y31gfWVsc2Ugaj1mO2NvbnN0IFA9Ty5yZWZzLmdldChqKXx8IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLFI9Wy4uLk8ucmVmcy52YWx1ZXMoKV0sJD15aWVsZCB6ZSh7ZnM6ZSxnaXRkaXI6cixvaWRzOltsLFBdfSk7Zm9yKGNvbnN0IHQgb2YgJClSLnB1c2godCk7Y29uc3QgQT15aWVsZCBPYmplY3QoWHIuYSkoe2ZzOmUsZ2l0ZGlyOnIsc3RhcnQ6W2xdLGZpbmlzaDpSfSksVD15aWVsZCBPYmplY3QoSnIuYSkoe2ZzOmUsZ2l0ZGlyOnIsb2lkczpBfSk7aWYoIXApe2lmKGYuc3RhcnRzV2l0aCgicmVmcy90YWdzIikmJiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiE9PVApdGhyb3cgbmV3IHUuYih1LmEuUHVzaFJlamVjdGVkVGFnRXhpc3RzLHt9KTtpZigiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIhPT1sJiYiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIhPT1QJiYhKHlpZWxkIG9yKHtmczplLGdpdGRpcjpyLG9pZDpsLGFuY2VzdG9yOlB9KSkpdGhyb3cgbmV3IHUuYih1LmEuUHVzaFJlamVjdGVkTm9uRmFzdEZvcndhcmQse30pfWNvbnN0IEk9RHQoWy4uLk8uY2FwYWJpbGl0aWVzXSxbInJlcG9ydC1zdGF0dXMiLCJzaWRlLWJhbmQtNjRrIixgYWdlbnQ9JHtIdC5hLmFnZW50fWBdKSxCPXlpZWxkIE9iamVjdChWci5hKSh7Y2FwYWJpbGl0aWVzOkksdHJpcGxldHM6W3tvbGRvaWQ6UCxvaWQ6bCxmdWxsUmVmOmp9XX0pLEY9eWllbGQgT2JqZWN0KHpyLmEpKHtmczplLGdpdGRpcjpyLG9pZHM6Wy4uLlRdfSksVT15aWVsZCB2LmNvbm5lY3Qoe2NvcmU6dCxlbWl0dGVyOmksZW1pdHRlclByZWZpeDpvLGNvcnNQcm94eTptLHNlcnZpY2U6ImdpdC1yZWNlaXZlLXBhY2siLHVybDpoLG5vR2l0U3VmZml4OmcsYXV0aDp5LGhlYWRlcnM6RSxib2R5OlsuLi5CLC4uLkZdfSkse3BhY2tmaWxlOk0scHJvZ3Jlc3M6Q309eWllbGQgWnIuYS5kZW11eChVLmJvZHkpO2lmKGkpe2NvbnN0IHQ9V3QoQyk7T2JqZWN0KHp0LmEpKHQsdD0+e2kuZW1pdChgJHtvfW1lc3NhZ2VgLHQpfSl9Y29uc3QgTj15aWVsZCBPYmplY3QoS3IuYSkoTSk7cmV0dXJuIFUuaGVhZGVycyYmKE4uaGVhZGVycz1VLmhlYWRlcnMpLE59Y2F0Y2godCl7dGhyb3cgdC5jYWxsZXI9ImdpdC5wdXNoIix0fX0sKGVuPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obixpKXt2YXIgbz10LmFwcGx5KGUscik7ZnVuY3Rpb24gYSh0KXtRcihvLG4saSxhLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7UXIobyxuLGksYSxzLCJ0aHJvdyIsdCl9YSh2b2lkIDApfSl9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gcm4odCxlLHIsbixpLG8sYSl7dHJ5e3ZhciBzPXRbb10oYSksdT1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UodSk6UHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4obixpKX1mdW5jdGlvbiBubih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLGkpe3ZhciBvPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBhKHQpe3JuKG8sbixpLGEscywibmV4dCIsdCl9ZnVuY3Rpb24gcyh0KXtybihvLG4saSxhLHMsInRocm93Iix0KX1hKHZvaWQgMCl9KX19ZnVuY3Rpb24gb24odCl7cmV0dXJuIGFuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBhbigpe3JldHVybihhbj1ubihmdW5jdGlvbiooe2NvcmU6dD0iZGVmYXVsdCIsZGlyOmUsZ2l0ZGlyOnI9T2JqZWN0KGYuYSkoZSwiLmdpdCIpLGZzOm49bC5hLmdldCh0KS5nZXQoImZzIiksZmlsZXBhdGg6aX0pe3RyeXtjb25zdCB0PW5ldyBzLmEobik7eWllbGQgYS5hLmFjcXVpcmUoe2ZzOnQsZ2l0ZGlyOnJ9LGZ1bmN0aW9uKCl7dmFyIHQ9bm4oZnVuY3Rpb24qKHQpe3QuZGVsZXRlKHtmaWxlcGF0aDppfSl9KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSl9Y2F0Y2godCl7dGhyb3cgdC5jYWxsZXI9ImdpdC5yZW1vdmUiLHR9fSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBzbih0LGUscixuLGksbyxhKXt0cnl7dmFyIHM9dFtvXShhKSx1PXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZSh1KTpQcm9taXNlLnJlc29sdmUodSkudGhlbihuLGkpfWZ1bmN0aW9uIHVuKHQpe3JldHVybiBjbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gY24oKXt2YXIgdDtyZXR1cm4gdD1mdW5jdGlvbiooe2dpdGRpcjp0LHR5cGU6ZSxvYmplY3Q6cn0pe3JldHVybiBPYmplY3QoSy5hKShWLmEud3JhcCh7dHlwZTplLG9iamVjdDpyfSkpfSwoY249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLGkpe3ZhciBvPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBhKHQpe3NuKG8sbixpLGEscywibmV4dCIsdCl9ZnVuY3Rpb24gcyh0KXtzbihvLG4saSxhLHMsInRocm93Iix0KX1hKHZvaWQgMCl9KX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBmbih0LGUscixuLGksbyxhKXt0cnl7dmFyIHM9dFtvXShhKSx1PXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZSh1KTpQcm9taXNlLnJlc29sdmUodSkudGhlbihuLGkpfWZ1bmN0aW9uIGxuKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4saSl7dmFyIG89dC5hcHBseShlLHIpO2Z1bmN0aW9uIGEodCl7Zm4obyxuLGksYSxzLCJuZXh0Iix0KX1mdW5jdGlvbiBzKHQpe2ZuKG8sbixpLGEscywidGhyb3ciLHQpfWEodm9pZCAwKX0pfX1mdW5jdGlvbiBkbih0KXtyZXR1cm4gaG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGhuKCl7cmV0dXJuKGhuPWxuKGZ1bmN0aW9uKih7Y29yZTp0PSJkZWZhdWx0IixkaXI6ZSxnaXRkaXI6cj1PYmplY3QoZi5hKShlLCIuZ2l0IiksZnM6bj1sLmEuZ2V0KHQpLmdldCgiZnMiKSxmaWxlcGF0aDppLHJlZjpvPSJIRUFEIn0pe3RyeXtjb25zdCB0PW5ldyBzLmEobik7bGV0IHUsYz15aWVsZCBrLmEucmVzb2x2ZSh7ZnM6dCxnaXRkaXI6cixyZWY6b30pO3RyeXtjb25zdCBlPXlpZWxkIGhyKHtnaXRkaXI6cixmczp0LG9pZDpjLGZpbGVwYXRoOmksZm9ybWF0OiJkZWZsYXRlZCJ9KTtjPWUmJmUub2lkfWNhdGNoKHQpe2M9bnVsbH1sZXQgbD17Y3RpbWU6bmV3IERhdGUoMCksbXRpbWU6bmV3IERhdGUoMCksZGV2OjAsaW5vOjAsbW9kZTowLHVpZDowLGdpZDowLHNpemU6MH07Y29uc3QgZD1lJiYoeWllbGQgdC5yZWFkKE9iamVjdChmLmEpKGUsaSkpKTtkJiYodT15aWVsZCB1bih7Z2l0ZGlyOnIsdHlwZToiYmxvYiIsb2JqZWN0OmR9KSxjPT09dSYmKGw9eWllbGQgdC5sc3RhdChPYmplY3QoZi5hKShlLGkpKSkpLHlpZWxkIGEuYS5hY3F1aXJlKHtmczp0LGdpdGRpcjpyfSxmdW5jdGlvbigpe3ZhciB0PWxuKGZ1bmN0aW9uKih0KXt0LmRlbGV0ZSh7ZmlsZXBhdGg6aX0pLGMmJnQuaW5zZXJ0KHtmaWxlcGF0aDppLHN0YXRzOmwsb2lkOmN9KX0pO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKX1jYXRjaCh0KXt0aHJvdyB0LmNhbGxlcj0iZ2l0LnJlc2V0Iix0fX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gcG4odCxlLHIsbixpLG8sYSl7dHJ5e3ZhciBzPXRbb10oYSksdT1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UodSk6UHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4obixpKX1mdW5jdGlvbiBnbih0KXtyZXR1cm4gbW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIG1uKCl7dmFyIHQ7cmV0dXJuIHQ9ZnVuY3Rpb24qKHtjb3JlOnQ9ImRlZmF1bHQiLGRpcjplLGdpdGRpcjpyPU9iamVjdChmLmEpKGUsIi5naXQiKSxmczpuPWwuYS5nZXQodCkuZ2V0KCJmcyIpLHJlZjppLGRlcHRoOm99KXt0cnl7Y29uc3QgdD1uZXcgcy5hKG4pO3JldHVybiB5aWVsZCBrLmEucmVzb2x2ZSh7ZnM6dCxnaXRkaXI6cixyZWY6aSxkZXB0aDpvfSl9Y2F0Y2godCl7dGhyb3cgdC5jYWxsZXI9ImdpdC5yZXNvbHZlUmVmIix0fX0sKG1uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obixpKXt2YXIgbz10LmFwcGx5KGUscik7ZnVuY3Rpb24gYSh0KXtwbihvLG4saSxhLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7cG4obyxuLGksYSxzLCJ0aHJvdyIsdCl9YSh2b2lkIDApfSl9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIHluPXIoNzIpO2Z1bmN0aW9uIHZuKHQsZSxyLG4saSxvLGEpe3RyeXt2YXIgcz10W29dKGEpLHU9cy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCByKHQpfXMuZG9uZT9lKHUpOlByb21pc2UucmVzb2x2ZSh1KS50aGVuKG4saSl9ZnVuY3Rpb24gd24odCl7cmV0dXJuIGJuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBibigpe3ZhciB0O3JldHVybiB0PWZ1bmN0aW9uKih7Y29yZTp0PSJkZWZhdWx0IixkaXI6ZSxnaXRkaXI6cj1PYmplY3QoZi5hKShlLCIuZ2l0IiksZnM6bj1sLmEuZ2V0KHQpLmdldCgiZnMiKSxwcml2YXRlS2V5czppLG9wZW5wZ3A6b30pe3RyeXtjb25zdCBlPW5ldyBzLmEobiksYT15aWVsZCBrLmEucmVzb2x2ZSh7ZnM6ZSxnaXRkaXI6cixyZWY6IkhFQUQifSkse3R5cGU6ZCxvYmplY3Q6aH09eWllbGQgT2JqZWN0KGouYSkoe2ZzOmUsZ2l0ZGlyOnIsb2lkOmF9KTtpZigiY29tbWl0IiE9PWQpdGhyb3cgbmV3IHUuYih1LmEuT2JqZWN0VHlwZUFzc2VydGlvbkluUmVmRmFpbCx7ZXhwZWN0ZWQ6ImNvbW1pdCIscmVmOiJIRUFEIix0eXBlOmR9KTtsZXQgcDtpZihvKXA9eW4uYS5mcm9tKGgpLHA9eWllbGQgcC5zaWduKG8saSk7ZWxzZXtjb25zdCBlPWwuYS5nZXQodCkuZ2V0KCJwZ3AiKTtwPVB0LmEuZnJvbShoKSxwPXlpZWxkIFB0LmEuc2lnbihwLGUsaSl9Y29uc3QgZz15aWVsZCBPYmplY3QoYy5hKSh7ZnM6ZSxnaXRkaXI6cix0eXBlOiJjb21taXQiLG9iamVjdDpwLnRvT2JqZWN0KCl9KSxtPXlpZWxkIGsuYS5yZXNvbHZlKHtmczplLGdpdGRpcjpyLHJlZjoiSEVBRCIsZGVwdGg6Mn0pO3lpZWxkIGUud3JpdGUoT2JqZWN0KGYuYSkocixtKSxnKyJcbiIpfWNhdGNoKHQpe3Rocm93IHQuY2FsbGVyPSJnaXQuc2lnbiIsdH19LChibj1mdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4saSl7dmFyIG89dC5hcHBseShlLHIpO2Z1bmN0aW9uIGEodCl7dm4obyxuLGksYSxzLCJuZXh0Iix0KX1mdW5jdGlvbiBzKHQpe3ZuKG8sbixpLGEscywidGhyb3ciLHQpfWEodm9pZCAwKX0pfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIF9uKHQsZSxyLG4saSxvLGEpe3RyeXt2YXIgcz10W29dKGEpLHU9cy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCByKHQpfXMuZG9uZT9lKHUpOlByb21pc2UucmVzb2x2ZSh1KS50aGVuKG4saSl9ZnVuY3Rpb24geG4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obixpKXt2YXIgbz10LmFwcGx5KGUscik7ZnVuY3Rpb24gYSh0KXtfbihvLG4saSxhLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7X24obyxuLGksYSxzLCJ0aHJvdyIsdCl9YSh2b2lkIDApfSl9fWZ1bmN0aW9uIEVuKHQpe3JldHVybiBrbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24ga24oKXtyZXR1cm4oa249eG4oZnVuY3Rpb24qKHtjb3JlOnQ9ImRlZmF1bHQiLGRpcjplLGdpdGRpcjpyPU9iamVjdChmLmEpKGUsIi5naXQiKSxmczpuPWwuYS5nZXQodCkuZ2V0KCJmcyIpLGZpbGVwYXRoOml9KXt0cnl7Y29uc3QgdD1uZXcgcy5hKG4pO2lmKHlpZWxkIG8uYS5pc0lnbm9yZWQoe2dpdGRpcjpyLGRpcjplLGZpbGVwYXRoOmksZnM6dH0pKXJldHVybiJpZ25vcmVkIjtjb25zdCB1PXlpZWxkIGZ1bmN0aW9uKHQpe3JldHVybiBQbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KHtmczp0LGdpdGRpcjpyfSksYz15aWVsZCBPbih7ZnM6dCxnaXRkaXI6cix0cmVlOnUscGF0aDppfSksbD15aWVsZCBhLmEuYWNxdWlyZSh7ZnM6dCxnaXRkaXI6cn0sZnVuY3Rpb24oKXt2YXIgdD14bihmdW5jdGlvbioodCl7Zm9yKGNvbnN0IGUgb2YgdClpZihlLnBhdGg9PT1pKXJldHVybiBlO3JldHVybiBudWxsfSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLGQ9eWllbGQgdC5sc3RhdChPYmplY3QoZi5hKShlLGkpKSxoPW51bGwhPT1jLHA9bnVsbCE9PWwsZz1udWxsIT09ZCxtPWZ1bmN0aW9uKCl7dmFyIG49eG4oZnVuY3Rpb24qKCl7aWYocCYmIU9iamVjdChXLmEpKGwsZCkpcmV0dXJuIGwub2lkO3tjb25zdCBuPXlpZWxkIHQucmVhZChPYmplY3QoZi5hKShlLGkpKSxvPXlpZWxkIHVuKHtnaXRkaXI6cix0eXBlOiJibG9iIixvYmplY3Q6bn0pO3JldHVybiBwJiZsLm9pZD09PW8mJi0xIT09ZC5zaXplJiZhLmEuYWNxdWlyZSh7ZnM6dCxnaXRkaXI6cn0sZnVuY3Rpb24oKXt2YXIgdD14bihmdW5jdGlvbioodCl7dC5pbnNlcnQoe2ZpbGVwYXRoOmksc3RhdHM6ZCxvaWQ6b30pfSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLG99fSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKTtpZighaCYmIWcmJiFwKXJldHVybiJhYnNlbnQiO2lmKCFoJiYhZyYmcClyZXR1cm4iKmFic2VudCI7aWYoIWgmJmcmJiFwKXJldHVybiIqYWRkZWQiO2lmKCFoJiZnJiZwKXtyZXR1cm4oeWllbGQgbSgpKT09PWwub2lkPyJhZGRlZCI6IiphZGRlZCJ9aWYoaCYmIWcmJiFwKXJldHVybiJkZWxldGVkIjtpZihoJiYhZyYmcClyZXR1cm4gbC5vaWQsIipkZWxldGVkIjtpZihoJiZnJiYhcCl7cmV0dXJuKHlpZWxkIG0oKSk9PT1jPyIqdW5kZWxldGVkIjoiKnVuZGVsZXRlbW9kaWZpZWQifWlmKGgmJmcmJnApe2NvbnN0IHQ9eWllbGQgbSgpO3JldHVybiB0PT09Yz90PT09bC5vaWQ/InVubW9kaWZpZWQiOiIqdW5tb2RpZmllZCI6dD09PWwub2lkPyJtb2RpZmllZCI6Iiptb2RpZmllZCJ9fWNhdGNoKHQpe3Rocm93IHQuY2FsbGVyPSJnaXQuc3RhdHVzIix0fX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gT24odCl7cmV0dXJuIGpuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBqbigpe3JldHVybihqbj14bihmdW5jdGlvbiooe2ZzOnQsZ2l0ZGlyOmUsdHJlZTpyLHBhdGg6bn0peyJzdHJpbmciPT10eXBlb2YgbiYmKG49bi5zcGxpdCgiLyIpKTtjb25zdCBpPW4uc2hpZnQoKTtmb3IoY29uc3QgbyBvZiByKWlmKG8ucGF0aD09PWkpe2lmKDA9PT1uLmxlbmd0aClyZXR1cm4gby5vaWQ7Y29uc3R7dHlwZTpyLG9iamVjdDppfT15aWVsZCBPYmplY3Qoai5hKSh7ZnM6dCxnaXRkaXI6ZSxvaWQ6by5vaWR9KTtpZigidHJlZSI9PT1yKXtyZXR1cm4gT24oe2ZzOnQsZ2l0ZGlyOmUsdHJlZTphZS5hLmZyb20oaSkscGF0aDpufSl9aWYoImJsb2IiPT09cil0aHJvdyBuZXcgdS5iKHUuYS5PYmplY3RUeXBlQXNzZXJ0aW9uSW5QYXRoRmFpbCx7b2lkOm8ub2lkLHBhdGg6bi5qb2luKCIvIil9KX1yZXR1cm4gbnVsbH0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gUG4oKXtyZXR1cm4oUG49eG4oZnVuY3Rpb24qKHtmczp0LGdpdGRpcjplfSl7bGV0IHI7dHJ5e3I9eWllbGQgay5hLnJlc29sdmUoe2ZzOnQsZ2l0ZGlyOmUscmVmOiJIRUFEIn0pfWNhdGNoKHQpe2lmKHQuY29kZT09PXUuYS5SZXNvbHZlUmVmRXJyb3IpcmV0dXJuW119Y29uc3R7dHlwZTpuLG9iamVjdDppfT15aWVsZCBPYmplY3Qoai5hKSh7ZnM6dCxnaXRkaXI6ZSxvaWQ6cn0pO2lmKCJjb21taXQiIT09bil0aHJvdyBuZXcgdS5iKHUuYS5SZXNvbHZlQ29tbWl0RXJyb3Ise29pZDpyfSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBTbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KHtmczp0LGdpdGRpcjplLG9pZDpyPVB0LmEuZnJvbShpKS5wYXJzZUhlYWRlcnMoKS50cmVlfSl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFNuKCl7cmV0dXJuKFNuPXhuKGZ1bmN0aW9uKih7ZnM6dCxnaXRkaXI6ZSxvaWQ6cn0pe2NvbnN0e3R5cGU6bixvYmplY3Q6aX09eWllbGQgT2JqZWN0KGouYSkoe2ZzOnQsZ2l0ZGlyOmUsb2lkOnJ9KTtpZigidHJlZSIhPT1uKXRocm93IG5ldyB1LmIodS5hLlJlc29sdmVUcmVlRXJyb3Ise29pZDpyfSk7cmV0dXJuIGFlLmEuZnJvbShpKS5lbnRyaWVzKCl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFJuKHQsZSxyLG4saSxvLGEpe3RyeXt2YXIgcz10W29dKGEpLHU9cy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCByKHQpfXMuZG9uZT9lKHUpOlByb21pc2UucmVzb2x2ZSh1KS50aGVuKG4saSl9ZnVuY3Rpb24gJG4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obixpKXt2YXIgbz10LmFwcGx5KGUscik7ZnVuY3Rpb24gYSh0KXtSbihvLG4saSxhLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7Um4obyxuLGksYSxzLCJ0aHJvdyIsdCl9YSh2b2lkIDApfSl9fWZ1bmN0aW9uIEFuKHQpe3JldHVybiBUbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gVG4oKXtyZXR1cm4oVG49JG4oZnVuY3Rpb24qKHtjb3JlOnQ9ImRlZmF1bHQiLGRpcjplLGdpdGRpcjpyPU9iamVjdChmLmEpKGUsIi5naXQiKSxmczpuPWwuYS5nZXQodCkuZ2V0KCJmcyIpLHJlZjppPSJIRUFEIixmaWxlcGF0aHM6YT1bIi4iXSxwYXR0ZXJuOnU9bnVsbH0pe3RyeXtjb25zdCB0PW5ldyBzLmEobik7bGV0IGwsZD0iIjt1JiYoKGQ9TCh1KSkmJih1PXUucmVwbGFjZShkKyIvIiwiIikpLGw9RCgpKHUse2dsb2JzdGFyOiEwLGV4dGVuZGVkOiEwfSkpO2NvbnN0IGg9YS5tYXAodD0+T2JqZWN0KGYuYSkodCxkKSk7cmV0dXJuIHlpZWxkIE9iamVjdChvdC5hKSh7ZnM6dCxkaXI6ZSxnaXRkaXI6cix0cmVlczpbT2JqZWN0KHEuYSkoe3JlZjppfSksaXQoKSx3dCgpXSxtYXA6KGM9JG4oZnVuY3Rpb24qKHIsW24saSxhXSl7aWYoIW4mJiFhJiZpJiYoeWllbGQgby5hLmlzSWdub3JlZCh7ZnM6dCxkaXI6ZSxmaWxlcGF0aDpyfSkpKXJldHVybiBudWxsO2lmKCFoLnNvbWUodD0+RyhyLHQpKSlyZXR1cm4gbnVsbDtpZihsKXtsZXQgdD0hMTtmb3IoY29uc3QgZSBvZiBoKXtjb25zdCBuPXIucmVwbGFjZShlKyIvIiwiIik7aWYobC5yZWdleC50ZXN0KG4pKXt0PSEwO2JyZWFrfX1pZighdClyZXR1cm59Y29uc3Qgcz1uJiYoeWllbGQgbi50eXBlKCkpO2lmKCJ0cmVlIj09PXN8fCJzcGVjaWFsIj09PXMpcmV0dXJuO2NvbnN0IHU9aSYmKHlpZWxkIGkudHlwZSgpKTtpZigidHJlZSI9PT11fHwic3BlY2lhbCI9PT11KXJldHVybjtjb25zdCBjPWEmJih5aWVsZCBhLnR5cGUoKSk7aWYoInRyZWUiPT09Y3x8InNwZWNpYWwiPT09YylyZXR1cm47Y29uc3QgZj1uP3lpZWxkIG4ub2lkKCk6dm9pZCAwLGQ9YT95aWVsZCBhLm9pZCgpOnZvaWQgMDtsZXQgcDtufHwhaXx8YT9pJiYocD15aWVsZCBpLm9pZCgpKTpwPSI0MiI7Y29uc3QgZz1bdm9pZCAwLGYscCxkXSxtPWcubWFwKHQ9PmcuaW5kZXhPZih0KSk7cmV0dXJuIG0uc2hpZnQoKSxbciwuLi5tXX0pLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGMuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9KX1jYXRjaCh0KXt0aHJvdyB0LmNhbGxlcj0iZ2l0LnN0YXR1c01hdHJpeCIsdH12YXIgY30pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gSW4odCxlLHIsbixpLG8sYSl7dHJ5e3ZhciBzPXRbb10oYSksdT1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UodSk6UHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4obixpKX1mdW5jdGlvbiBCbih0KXtyZXR1cm4gRm4uYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEZuKCl7dmFyIHQ7cmV0dXJuIHQ9ZnVuY3Rpb24qKHtjb3JlOnQ9ImRlZmF1bHQiLGRpcjplLGdpdGRpcjpyPU9iamVjdChmLmEpKGUsIi5naXQiKSxmczpuPWwuYS5nZXQodCkuZ2V0KCJmcyIpLHJlZjppLG9iamVjdDpvLGZvcmNlOmE9ITF9KXt0cnl7Y29uc3QgdD1uZXcgcy5hKG4pO2lmKHZvaWQgMD09PWkpdGhyb3cgbmV3IHUuYih1LmEuTWlzc2luZ1JlcXVpcmVkUGFyYW1ldGVyRXJyb3Ise2Z1bmN0aW9uOiJ0YWciLHBhcmFtZXRlcjoicmVmIn0pO2k9aS5zdGFydHNXaXRoKCJyZWZzL3RhZ3MvIik/aTpgcmVmcy90YWdzLyR7aX1gO2NvbnN0IGU9eWllbGQgay5hLnJlc29sdmUoe2ZzOnQsZ2l0ZGlyOnIscmVmOm98fCJIRUFEIn0pO2lmKCFhJiYoeWllbGQgay5hLmV4aXN0cyh7ZnM6dCxnaXRkaXI6cixyZWY6aX0pKSl0aHJvdyBuZXcgdS5iKHUuYS5SZWZFeGlzdHNFcnJvcix7bm91bjoidGFnIixyZWY6aX0pO3lpZWxkIGsuYS53cml0ZVJlZih7ZnM6dCxnaXRkaXI6cixyZWY6aSx2YWx1ZTplfSl9Y2F0Y2godCl7dGhyb3cgdC5jYWxsZXI9ImdpdC50YWciLHR9fSwoRm49ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLGkpe3ZhciBvPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBhKHQpe0luKG8sbixpLGEscywibmV4dCIsdCl9ZnVuY3Rpb24gcyh0KXtJbihvLG4saSxhLHMsInRocm93Iix0KX1hKHZvaWQgMCl9KX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBVbih0LGUscixuLGksbyxhKXt0cnl7dmFyIHM9dFtvXShhKSx1PXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZSh1KTpQcm9taXNlLnJlc29sdmUodSkudGhlbihuLGkpfWZ1bmN0aW9uIE1uKHQpe3JldHVybiBDbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gQ24oKXt2YXIgdDtyZXR1cm4gdD1mdW5jdGlvbiooe2NvcmU6dD0iZGVmYXVsdCIsZGlyOmUsZ2l0ZGlyOnI9T2JqZWN0KGYuYSkoZSwiLmdpdCIpLGZzOm49bC5hLmdldCh0KS5nZXQoImZzIikscmVmOmkscHVibGljS2V5czpvLG9wZW5wZ3A6YX0pe3RyeXtjb25zdCBlPW5ldyBzLmEobiksYz15aWVsZCBrLmEucmVzb2x2ZSh7ZnM6ZSxnaXRkaXI6cixyZWY6aX0pLHt0eXBlOmYsb2JqZWN0OmR9PXlpZWxkIE9iamVjdChqLmEpKHtmczplLGdpdGRpcjpyLG9pZDpjfSk7aWYoImNvbW1pdCIhPT1mJiYidGFnIiE9PWYpdGhyb3cgbmV3IHUuYih1LmEuT2JqZWN0VHlwZUFzc2VydGlvbkluUmVmRmFpbCx7ZXhwZWN0ZWQ6ImNvbW1pdC90YWciLHJlZjppLHR5cGU6Zn0pO2lmKGEpe2NvbnN0IHQ9eW4uYS5mcm9tKGQpLGU9eWllbGQgdC5saXN0U2lnbmluZ0tleXMoYSk7cmV0dXJuISEoeWllbGQgdC52ZXJpZnkoYSxvKSkmJmV9e2NvbnN0IGU9bC5hLmdldCh0KS5nZXQoInBncCIpO2lmKCJjb21taXQiPT09Zil7Y29uc3QgdD1QdC5hLmZyb20oZCkse3ZhbGlkOnIsaW52YWxpZDpufT15aWVsZCBQdC5hLnZlcmlmeSh0LGUsbyk7cmV0dXJuIShuLmxlbmd0aD4wKSYmcn1pZigidGFnIj09PWYpe2NvbnN0IHQ9Ty5hLmZyb20oZCkse3ZhbGlkOnIsaW52YWxpZDpufT15aWVsZCBPLmEudmVyaWZ5KHQsZSxvKTtyZXR1cm4hKG4ubGVuZ3RoPjApJiZyfX19Y2F0Y2godCl7dGhyb3cgdC5jYWxsZXI9ImdpdC52ZXJpZnkiLHR9fSwoQ249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLGkpe3ZhciBvPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBhKHQpe1VuKG8sbixpLGEscywibmV4dCIsdCl9ZnVuY3Rpb24gcyh0KXtVbihvLG4saSxhLHMsInRocm93Iix0KX1hKHZvaWQgMCl9KX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBObigpe3RyeXtyZXR1cm4gSHQuYS52ZXJzaW9ufWNhdGNoKHQpe3Rocm93IHQuY2FsbGVyPSJnaXQudmVyc2lvbiIsdH19dmFyIERuPXIoNzMpLHpuPXIoNzQpLEhuPXIoMjcpO2Z1bmN0aW9uKkxuKHQpe2NvbnN0IGU9bmV3IHpuLmE7bGV0IHI7Y29uc3Qgbj1bXSxpPXQubGVuZ3RoO2ZvcihsZXQgcj0wO3I8aTtyKyspbltyXT10W3JdLm5leHQoKS52YWx1ZSx2b2lkIDAhPT1uW3JdJiZlLmNvbnNpZGVyKG5bcl0uZnVsbHBhdGgpO2lmKG51bGwhPT1lLnZhbHVlKWZvcig7Oyl7Y29uc3Qgbz1bXTtyPWUudmFsdWUsZS5yZXNldCgpO2ZvcihsZXQgYT0wO2E8aTthKyspdm9pZCAwIT09blthXSYmblthXS5mdWxscGF0aD09PXI/KG9bYV09blthXSxuW2FdPXRbYV0ubmV4dCgpLnZhbHVlKTpvW2FdPXtmdWxscGF0aDpyLGJhc2VuYW1lOk9iamVjdChIbi5hKShyKSxleGlzdHM6ITF9LHZvaWQgMCE9PW5bYV0mJmUuY29uc2lkZXIoblthXS5mdWxscGF0aCk7aWYoeWllbGQgbyxudWxsPT09ZS52YWx1ZSlyZXR1cm59fWZ1bmN0aW9uIEduKHQsZSxyLG4saSxvLGEpe3RyeXt2YXIgcz10W29dKGEpLHU9cy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCByKHQpfXMuZG9uZT9lKHUpOlByb21pc2UucmVzb2x2ZSh1KS50aGVuKG4saSl9ZnVuY3Rpb24gcW4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obixpKXt2YXIgbz10LmFwcGx5KGUscik7ZnVuY3Rpb24gYSh0KXtHbihvLG4saSxhLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7R24obyxuLGksYSxzLCJ0aHJvdyIsdCl9YSh2b2lkIDApfSl9fWZ1bmN0aW9uIFduKHQpe3JldHVybiBZbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gWW4oKXtyZXR1cm4oWW49cW4oZnVuY3Rpb24qKHt0cmVlczp0LGZpbHRlcjplPXFuKGZ1bmN0aW9uKigpe3JldHVybiEwfSksbWFwOnI9ZnVuY3Rpb24oKXt2YXIgdD1xbihmdW5jdGlvbioodCl7cmV0dXJuIHR9KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxyZWR1Y2U6bj1mdW5jdGlvbigpe3ZhciB0PXFuKGZ1bmN0aW9uKih0LGUpe2NvbnN0IHI9T2JqZWN0KGZ0LmEpKGUpO3JldHVybiB2b2lkIDAhPT10JiZyLnVuc2hpZnQodCkscn0pO3JldHVybiBmdW5jdGlvbihlLHIpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksaXRlcmF0ZTppPSgodCxlKT0+UHJvbWlzZS5hbGwoWy4uLmVdLm1hcCh0KSkpfSl7dHJ5e2NvbnN0IG89dC5tYXAodD0+dFtudC5hXSgpKSxhPW5ldyBBcnJheShvLmxlbmd0aCkuZmlsbCh7ZnVsbHBhdGg6Ii4iLGJhc2VuYW1lOiIuIixleGlzdHM6ITB9KSxzPU9iamVjdChEbi5hKSgwLG8ubGVuZ3RoKSx1PWZ1bmN0aW9uKCl7dmFyIHQ9cW4oZnVuY3Rpb24qKHQpe2NvbnN0IGU9eWllbGQgUHJvbWlzZS5hbGwocy5tYXAoZT0+b1tlXS5yZWFkZGlyKHRbZV0pKSk7cy5tYXAoZT0+e3RbZV09bmV3IG9bZV0uQ29uc3RydWN0RW50cnkodFtlXSl9KTtjb25zdCByPWUubWFwKHQ9Pm51bGw9PT10P1tdOnQpLm1hcCh0PT50W1N5bWJvbC5pdGVyYXRvcl0oKSk7cmV0dXJue2VudHJ5OnQsY2hpbGRyZW46TG4ocil9fSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksYz1mdW5jdGlvbigpe3ZhciB0PXFuKGZ1bmN0aW9uKih0KXtjb25zdHtjaGlsZHJlbjpvLGVudHJ5OmF9PXlpZWxkIHUodCk7aWYoeWllbGQgZShhKSl7Y29uc3QgdD15aWVsZCByKGEpO2xldCBlPXlpZWxkIGkoYyxvKTtyZXR1cm4gZT1lLmZpbHRlcih0PT52b2lkIDAhPT10KSxuKHQsZSl9fSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCk7cmV0dXJuIGMoYSl9Y2F0Y2godCl7dGhyb3cgdC5jYWxsZXI9ImdpdC53YWxrIix0fX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIFpuPXIoMTMwKTtmdW5jdGlvbiBLbih0LGUscixuLGksbyxhKXt0cnl7dmFyIHM9dFtvXShhKSx1PXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZSh1KTpQcm9taXNlLnJlc29sdmUodSkudGhlbihuLGkpfWZ1bmN0aW9uIFZuKHQpe3JldHVybiBYbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gWG4oKXt2YXIgdDtyZXR1cm4gdD1mdW5jdGlvbiooe2NvcmU6dD0iZGVmYXVsdCIsZGlyOmUsZ2l0ZGlyOnI9T2JqZWN0KGYuYSkoZSwiLmdpdCIpLGZzOm49bC5hLmdldCh0KS5nZXQoImZzIikscmVmOmksdmFsdWU6byxmb3JjZTphPSExLHN5bWJvbGljOmM9ITF9KXt0cnl7Y29uc3QgdD1uZXcgcy5hKG4pO2lmKGkhPT13LmEuY2xlYW4oaSkpdGhyb3cgbmV3IHUuYih1LmEuSW52YWxpZFJlZk5hbWVFcnJvcix7dmVyYjoid3JpdGUiLG5vdW46InJlZiIscmVmOmksc3VnZ2VzdGlvbjp3LmEuY2xlYW4oaSl9KTtpZighYSYmKHlpZWxkIGsuYS5leGlzdHMoe2ZzOnQsZ2l0ZGlyOnIscmVmOml9KSkpdGhyb3cgbmV3IHUuYih1LmEuUmVmRXhpc3RzRXJyb3Ise25vdW46InJlZiIscmVmOml9KTtjP3lpZWxkIGsuYS53cml0ZVN5bWJvbGljUmVmKHtmczp0LGdpdGRpcjpyLHJlZjppLHZhbHVlOm99KToobz15aWVsZCBrLmEucmVzb2x2ZSh7ZnM6dCxnaXRkaXI6cixyZWY6b30pLHlpZWxkIGsuYS53cml0ZVJlZih7ZnM6dCxnaXRkaXI6cixyZWY6aSx2YWx1ZTpvfSkpfWNhdGNoKHQpe3Rocm93IHQuY2FsbGVyPSJnaXQud3JpdGVSZWYiLHR9fSwoWG49ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLGkpe3ZhciBvPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBhKHQpe0tuKG8sbixpLGEscywibmV4dCIsdCl9ZnVuY3Rpb24gcyh0KXtLbihvLG4saSxhLHMsInRocm93Iix0KX1hKHZvaWQgMCl9KX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yLmQoZSwidXRpbHMiLGZ1bmN0aW9uKCl7cmV0dXJuIEpufSksci5kKGUsImFkZCIsZnVuY3Rpb24oKXtyZXR1cm4gcH0pLHIuZChlLCJhZGRSZW1vdGUiLGZ1bmN0aW9uKCl7cmV0dXJuIHh9KSxyLmQoZSwiYW5ub3RhdGVkVGFnIixmdW5jdGlvbigpe3JldHVybiBCfSksci5kKGUsImJyYW5jaCIsZnVuY3Rpb24oKXtyZXR1cm4gTX0pLHIuZChlLCJjaGVja291dCIsZnVuY3Rpb24oKXtyZXR1cm4gdXR9KSxyLmQoZSwiZmFzdENoZWNrb3V0IixmdW5jdGlvbigpe3JldHVybiB4dH0pLHIuZChlLCJjbG9uZSIsZnVuY3Rpb24oKXtyZXR1cm4gaWV9KSxyLmQoZSwiY29tbWl0IixmdW5jdGlvbigpe3JldHVybiBjZX0pLHIuZChlLCJjb25maWciLGZ1bmN0aW9uKCl7cmV0dXJuIFN9KSxyLmQoZSwiY3VycmVudEJyYW5jaCIsZnVuY3Rpb24oKXtyZXR1cm4gcGV9KSxyLmQoZSwiZGVsZXRlQnJhbmNoIixmdW5jdGlvbigpe3JldHVybiB5ZX0pLHIuZChlLCJkZWxldGVSZWYiLGZ1bmN0aW9uKCl7cmV0dXJuIGJlfSksci5kKGUsImRlbGV0ZVJlbW90ZSIsZnVuY3Rpb24oKXtyZXR1cm4gRWV9KSxyLmQoZSwiZGVsZXRlVGFnIixmdW5jdGlvbigpe3JldHVybiBqZX0pLHIuZChlLCJleHBhbmRPaWQiLGZ1bmN0aW9uKCl7cmV0dXJuIEZlfSksci5kKGUsImV4cGFuZFJlZiIsZnVuY3Rpb24oKXtyZXR1cm4gQ2V9KSxyLmQoZSwiZmV0Y2giLGZ1bmN0aW9uKCl7cmV0dXJuIFh0fSksci5kKGUsImZpbmRNZXJnZUJhc2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHplfSksci5kKGUsImZpbmRSb290IixmdW5jdGlvbigpe3JldHVybiBXZX0pLHIuZChlLCJnZXRSZW1vdGVJbmZvIixmdW5jdGlvbigpe3JldHVybiBKZX0pLHIuZChlLCJoYXNoQmxvYiIsZnVuY3Rpb24oKXtyZXR1cm4gdHIuYX0pLHIuZChlLCJpbmRleFBhY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHJyfSksci5kKGUsImluaXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGVlfSksci5kKGUsImlzRGVzY2VuZGVudCIsZnVuY3Rpb24oKXtyZXR1cm4gb3J9KSxyLmQoZSwibGlzdEJyYW5jaGVzIixmdW5jdGlvbigpe3JldHVybiB1cn0pLHIuZChlLCJsaXN0RmlsZXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHdyfSksci5kKGUsImxpc3RSZW1vdGVzIixmdW5jdGlvbigpe3JldHVybiBPcn0pLHIuZChlLCJsaXN0VGFncyIsZnVuY3Rpb24oKXtyZXR1cm4gU3J9KSxyLmQoZSwibG9nIixmdW5jdGlvbigpe3JldHVybiBGcn0pLHIuZChlLCJtZXJnZSIsZnVuY3Rpb24oKXtyZXR1cm4gTnJ9KSxyLmQoZSwicGFja09iamVjdHMiLGZ1bmN0aW9uKCl7cmV0dXJuIExyfSksci5kKGUsInB1bGwiLGZ1bmN0aW9uKCl7cmV0dXJuIFdyfSksci5kKGUsInB1c2giLGZ1bmN0aW9uKCl7cmV0dXJuIHRufSksci5kKGUsInJlYWRPYmplY3QiLGZ1bmN0aW9uKCl7cmV0dXJuIGhyfSksci5kKGUsInJlbW92ZSIsZnVuY3Rpb24oKXtyZXR1cm4gb259KSxyLmQoZSwicmVzZXRJbmRleCIsZnVuY3Rpb24oKXtyZXR1cm4gZG59KSxyLmQoZSwicmVzb2x2ZVJlZiIsZnVuY3Rpb24oKXtyZXR1cm4gZ259KSxyLmQoZSwic2lnbiIsZnVuY3Rpb24oKXtyZXR1cm4gd259KSxyLmQoZSwic3RhdHVzIixmdW5jdGlvbigpe3JldHVybiBFbn0pLHIuZChlLCJzdGF0dXNNYXRyaXgiLGZ1bmN0aW9uKCl7cmV0dXJuIEFufSksci5kKGUsInRhZyIsZnVuY3Rpb24oKXtyZXR1cm4gQm59KSxyLmQoZSwidmVyaWZ5IixmdW5jdGlvbigpe3JldHVybiBNbn0pLHIuZChlLCJ2ZXJzaW9uIixmdW5jdGlvbigpe3JldHVybiBObn0pLHIuZChlLCJ3YWxrQmV0YTEiLGZ1bmN0aW9uKCl7cmV0dXJuIFdufSksci5kKGUsIndhbGtCZXRhMiIsZnVuY3Rpb24oKXtyZXR1cm4gb3QuYX0pLHIuZChlLCJ3cml0ZU9iamVjdCIsZnVuY3Rpb24oKXtyZXR1cm4gWm4uYX0pLHIuZChlLCJ3cml0ZVJlZiIsZnVuY3Rpb24oKXtyZXR1cm4gVm59KSxyLmQoZSwiV09SS0RJUiIsZnVuY3Rpb24oKXtyZXR1cm4gaXR9KSxyLmQoZSwiU1RBR0UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0fSksci5kKGUsIlRSRUUiLGZ1bmN0aW9uKCl7cmV0dXJuIHEuYX0pLHIuZChlLCJFIixmdW5jdGlvbigpe3JldHVybiB1LmF9KSxyLmQoZSwicGx1Z2lucyIsZnVuY3Rpb24oKXtyZXR1cm4gbC5ifSksci5kKGUsImNvcmVzIixmdW5jdGlvbigpe3JldHVybiBsLmF9KTtjb25zdCBKbj17YXV0aDpuLmEsb2F1dGgyOmkuYX19XSl9KTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9YnVuZGxlLnVtZC5taW4uanMubWFw",
  68. {"status":false}
  69. ],
  70. [
  71. "isomorphic-git_0.70.0",
  72. "ZnVuY3Rpb24g0YPRgdGC0LDQvdC+0LLQuNGC0YxJc29tb3JwaGljR2l0KCkKewogICAgdmFyIGxpZ2h0bmluZ0ZTSlMgPSDQvNC+0LTRg9C70YwoImxpZ2h0bmluZy1mcy5taW4uanNfMy4zLjIiKVsxXTsKICAgIHZhciBpc29tb3JwaGljR2l0SlMgPSDQvNC+0LTRg9C70YwoImlzb21vcnBoaWMtZ2l0Lm1pbi5qc18wLjcwLjAiKVsxXTsKCiAgICBldmFsKNC80YPRgNC+0LwuYXRvYihsaWdodG5pbmdGU0pTKSk7CiAgICBldmFsKNC80YPRgNC+0LwuYXRvYihpc29tb3JwaGljR2l0SlMpKTsKICAgIAogICAgd2luZG93LmZzID0gbmV3IExpZ2h0bmluZ0ZTKCJmcyIpOwogICAgd2luZG93LnBmcyA9IHdpbmRvdy5mcy5wcm9taXNlczsKICAgIGdpdC5wbHVnaW5zLnNldCgiZnMiLCB3aW5kb3cuZnMpOwp9CgrQv9GA0Lgo0LzRg9GA0L7QvC7QvtCx0YvRh9C90YvQudCf0YPRgdC6LCDRg9GB0YLQsNC90L7QstC40YLRjElzb21vcnBoaWNHaXQpOw==",
  73. {}
  74. ],
  75. [
  76. "хранилище",
  77. "dmFyIHVybCA9ICJodHRwczovL2dpdGxhYi5jb20va29ybmVyci9kYXQiOwp2YXIgZGlyID0gIi8iOwp2YXIgY29udGVudHMgPSAiVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgVHVsYSI7CnZhciBmaWxlTmFtZSA9IG51bGw7CnZhciDRhNCw0LnQu9GLID0gbnVsbDsKCmZ1bmN0aW9uINCy0YvQstC10YHRgtC40KHQv9C40YHQvtC60KTQsNC50LvQvtCyKNGE0LDQudC70YspCnsKICAgIGNvbnNvbGUubG9nKCLQpNCw0LnQu9C+0LI6ICciICsg0YTQsNC50LvRiy5sZW5ndGggKyAiJyIpOwogICAgZm9yICh2YXIg0L3QvtC80LXRgCA9IDA7INC90L7QvNC10YAgPCDRhNCw0LnQu9GLLmxlbmd0aDsgKyvQvdC+0LzQtdGAKQogICAgewogICAgICAgIHZhciDQuNC80Y8gPSDRhNCw0LnQu9GLW9C90L7QvNC10YBdOwogICAgICAgIGNvbnNvbGUubG9nKCLQndC+0LzQtdGAOiAnIiArINC90L7QvNC10YAgKyAiJyDQmNC80Y86ICciICsg0LjQvNGPICsgIiciKTsKICAgIH0KfQoKYXN5bmMgZnVuY3Rpb24g0YHQutC70L7QvdC40YDQvtCy0LDRgtGMKCkKewogICAgYXdhaXQgZ2l0LmNsb25lKHsKICAgICAgICBkaXI6IGRpciwKICAgICAgICB1cmw6IHVybCwKICAgICAgICByZWY6ICJtYXN0ZXIiLAogICAgICAgIHNpbmdsZUJyYW5jaDogdHJ1ZSwKICAgICAgICBkZXB0aDogMTAwMCwKICAgIH0pOwp9Cgphc3luYyBmdW5jdGlvbiDQvtCx0L3QvtCy0LjRgtGMKCkKewogICAgYXdhaXQgZ2l0LnB1bGwoewogICAgICAgIGRpcjogZGlyLAogICAgICAgIHVybDogdXJsLAogICAgICAgIHNpbmdsZUJyYW5jaDogdHJ1ZSwKICAgIH0pOwp9Cgphc3luYyBmdW5jdGlvbiDRgdC/0LjRgdC+0LrQpNCw0LnQu9C+0LIoKQp7CiAgICByZXR1cm4gYXdhaXQgd2luZG93LnBmcy5yZWFkZGlyKGRpcik7Cn0KCmFzeW5jIGZ1bmN0aW9uINC/0L7Qu9GD0YfQuNGC0YzQodC/0LjRgdC+0LrQpNCw0LnQu9C+0LIoKQp7CiAgICB2YXIg0YTQsNC50LvRiyA9IGF3YWl0INGB0L/QuNGB0L7QutCk0LDQudC70L7QsigpOwogICAgaWYgKCHRhNCw0LnQu9GLLmxlbmd0aCkKICAgIHsKICAgICAgICBjb25zb2xlLmxvZygi0KTQsNC50LvQvtCyINC90LXRgi4g0JrQu9C+0L3QuNGA0YPQtdC8Iik7CiAgICAgICAgYXdhaXQg0YHQutC70L7QvdC40YDQvtCy0LDRgtGMKCk7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgY29uc29sZS5sb2coItCk0LDQudC70Ysg0LXRgdGC0YwuINCe0LHQvdC+0LLQu9GP0LXQvCIpOwogICAgICAgIGF3YWl0INC+0LHQvdC+0LLQuNGC0YwoKTsKICAgIH0KICAgIHJldHVybiBhd2FpdCDRgdC/0LjRgdC+0LrQpNCw0LnQu9C+0LIoKTsKfQoKYXN5bmMgZnVuY3Rpb24g0YHQvtC00LXRgNC20LjQvNC+0LXQpNCw0LnQu9CwKNC/0YPRgtGMKQp7CiAgICByZXR1cm4gYXdhaXQgd2luZG93LnBmcy5yZWFkRmlsZSjQv9GD0YLRjCwgeyJlbmNvZGluZyI6ICJ1dGY4In0pOwp9Cgphc3luYyBmdW5jdGlvbiDQv9GA0L7QstC10YDQuNGC0YzQpdGA0LDQvdC40LvQuNGJ0LUoKQp7CiAgICBmaWxlTmFtZSA9INC80YPRgNC+0LwudXVpZCgpOwogICAgdmFyINGE0LDQudC70YsgPSBhd2FpdCDQv9C+0LvRg9GH0LjRgtGMQ9C/0LjRgdC+0LrQpNCw0LnQu9C+0LIoKTsKICAgINCy0YvQstC10YHRgtC40KHQv9C40YHQvtC60KTQsNC50LvQvtCyKNGE0LDQudC70YspOwogICAgCiAgICAvLyDQlNC+0LHQsNCy0LjRgtGMLgogICAgYXdhaXQgd2luZG93LnBmcy53cml0ZUZpbGUoZGlyICsgZmlsZU5hbWUsIGNvbnRlbnRzKTsKICAgIGF3YWl0IGdpdC5hZGQoewogICAgICAgIGRpcjogZGlyLAogICAgICAgIGZpbGVwYXRoOiBmaWxlTmFtZSwKICAgIH0pOwogICAgdmFyIHNoYSA9IGF3YWl0IGdpdC5jb21taXQoewogICAgICAgIGRpcjogZGlyLAogICAgICAgIG1lc3NhZ2U6ICJBZGQgIiArIGZpbGVOYW1lLAogICAgICAgIGF1dGhvcjogewogICAgICAgICAgICBuYW1lOiAidGVzdC1pc29tb3JwaGljLWdpdCIsCiAgICAgICAgICAgIGVtYWlsOiAidGVzdEBpc29tb3JwaGljLWdpdC5vcmciCiAgICAgICAgfSwKICAgIH0pOwogICAgY29uc29sZS5sb2coItCa0L7QvNC40YIg0YEg0YXRjdGI0LXQvCBTSEE6ICciICsgc2hhICsgIiciKTsKICAgIAogICAgLy8g0J7RgtC/0YDQsNCy0LjRgtGMLgogICAgdmFyINC40LzRjyA9ICJrb3JuZXJyIjsKICAgIGNvbnNvbGUubG9nKCLQntGC0L/RgNCw0LLQu9GP0LXQvCDQutCw0LogJyIgKyDQuNC80Y8gKyAiJyIpOwogICAgdmFyINGA0LXQt9GD0LvRjNGC0LDRgiA9IGF3YWl0IGdpdC5wdXNoKHsKICAgICAgICBkaXI6IGRpciwKICAgICAgICByZW1vdGU6ICJvcmlnaW4iLAogICAgICAgIHJlZjogIm1hc3RlciIsCiAgICAgICAgdXNlcm5hbWU6INC40LzRjywKICAgICAgICBwYXNzd29yZDog0L/QsNGA0L7Qu9GMLAogICAgfSk7CiAgICBjb25zb2xlLmxvZygi0KDQtdC30YPQu9GM0YLQsNGCINC+0YLQv9GA0LDQstC60LguIE9LOiAnIiArINGA0LXQt9GD0LvRjNGC0LDRgi5vayArICInINCe0YjQuNCx0LrQuDogJyIgKyDRgNC10LfRg9C70YzRgtCw0YIuZXJyb3JzICsgIiciKTsKfQoKLy/Qv9GA0Lgo0LzRg9GA0L7QvC7QvtCx0YvRh9C90YvQudCf0YPRgdC6LCDQv9GA0L7QstC10YDQuNGC0YzQpdGA0LDQvdC40LvQuNGJ0LUpOwoKLy/Qv9GA0Lgo0L/QvtC70YPRh9C40YLRjCwg0L7QsdC90L7QstC40YLRjNCh0L/QuNGB0L7QutCk0LDQudC70L7Qsik7",
  78. {}
  79. ],
  80. [
  81. "интерфейс",
  82. "ZnVuY3Rpb24g0Y3QuyjQuNC80Y8pCnsKICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCjQuNC80Y8pOwp9Cgphc3luYyBmdW5jdGlvbiDQvtCx0L3QvtCy0LjRgtGM0KHQvtC+0LHRidC10L3QuNGPKCkKewogICAg0Y3Quygi0L/QvtC70YPRh9C40YLRjC3Qt9Cw0LPRgNGD0LfQutCwIikuaGlkZGVuID0gZmFsc2U7CiAgICB2YXIg0YTQsNC50LvRiyA9IGF3YWl0INC/0L7Qu9GD0YfQuNGC0YzQodC/0LjRgdC+0LrQpNCw0LnQu9C+0LIoKTsKICAgINCy0YvQstC10YHRgtC40KHQv9C40YHQvtC60KTQsNC50LvQvtCyKNGE0LDQudC70YspOwogICAgZm9yICh2YXIg0L3QvtC80LXRgCBpbiDRhNCw0LnQu9GLKQogICAgewogICAgICAgIHZhciDQuNC80Y8gPSDRhNCw0LnQu9GLW9C90L7QvNC10YBdOwogICAgICAgIGlmICjQuNC80Y8ubGVuZ3RoID09IDM2KQogICAgICAgIHsKICAgICAgICAgICAgdmFyINGB0L7QtNC10YDQttC40LzQvtC1ID0gYXdhaXQg0YHQvtC00LXRgNC20LjQvNC+0LXQpNCw0LnQu9CwKGRpciArINC40LzRjyk7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCLQpNCw0LnQuyAnIiArINC40LzRjyArICInOiAnIiArINGB0L7QtNC10YDQttC40LzQvtC1ICsgIiciKTsKICAgICAgICB9CiAgICB9CiAgICDRjdC7KCLQv9C+0LvRg9GH0LjRgtGMLdC30LDQs9GA0YPQt9C60LAiKS5oaWRkZW4gPSB0cnVlOwp9CgpmdW5jdGlvbiDRgdC+0LfQtNCw0YLRjNCY0L3RgtC10YDRhNC10LnRgSgpCnsKICAgIHZhciDRjdC60YDQsNC9ID0g0YHQvtC30LTQsNGC0YzQrdC60YDQsNC9KCLQuNC90YLQtdGA0YTQtdC50YEiKTsKICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQo0Y3QutGA0LDQvSk7CiAgICB2YXIg0LLQuNC0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsKICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQo0LLQuNC0KTsKICAgIAogICAgLy8g0KHRgtGA0YPQutGC0YPRgNCwLgoKICAgINGN0LrRgNCw0L0uaW5uZXJIVE1MID0KYAo8ZGl2IGNsYXNzPSJ1ay1jb250YWluZXIgdWstcGFkZGluZy1zbWFsbCB1ay13aWR0aC0xLTNAbSI+CiAgICA8aW5wdXQgaWQ9ItC40LzRjyIgcGxhY2Vob2xkZXI9ItCY0LzRjyIgY2xhc3M9InVrLWlucHV0IHVrLW1hcmdpbi1zbWFsbC1ib3R0b20iPjwvaW5wdXQ+CiAgICA8aW5wdXQgaWQ9ItC/0LDRgNC+0LvRjCIgcGxhY2Vob2xkZXI9ItCf0LDRgNC+0LvRjCIgdHlwZT0icGFzc3dvcmQiIGNsYXNzPSJ1ay1pbnB1dCB1ay1tYXJnaW4tc21hbGwtYm90dG9tIj48L2lucHV0PgogICAgPGJ1dHRvbiBpZD0i0L/QvtC70YPRh9C40YLRjCIgY2xhc3M9InVrLWJ1dHRvbiB1ay1idXR0b24tZGVmYXVsdCI+0J/QvtC70YPRh9C40YLRjDwvYnV0dG9uPiA8ZGl2IGlkPSLQv9C+0LvRg9GH0LjRgtGMLdC30LDQs9GA0YPQt9C60LAiIHVrLXNwaW5uZXIgaGlkZGVuPjwvZGl2PgogICAgPGhyIGNsYXNzPSJ1ay1kaXZpZGVyLWljb24iPiAgICAKICAgIDxpbnB1dCBpZD0i0YHQvtC+0LHRidC10L3QuNC1IiBwbGFjZWhvbGRlcj0i0KHQvtC+0LHRidC10L3QuNC1IiBjbGFzcz0idWstaW5wdXQgdWstbWFyZ2luLXNtYWxsLWJvdHRvbSI+PC9pbnB1dD4KICAgIDxidXR0b24gaWQ9ItC+0YLQv9GA0LDQstC40YLRjCIgY2xhc3M9InVrLWJ1dHRvbiB1ay1idXR0b24tZGVmYXVsdCI+0J7RgtC/0YDQsNCy0LjRgtGMPC9idXR0b24+IDxkaXYgaWQ9ItC+0YLQv9GA0LDQstC40YLRjC3Qt9Cw0LPRgNGD0LfQutCwIiB1ay1zcGlubmVyIGhpZGRlbj48L2Rpdj4KICAgIDxociBjbGFzcz0idWstZGl2aWRlci1pY29uIj4KICAgIDxkaXYgY2xhc3M9InVrLXBhbmVsIHVrLXBhbmVsLXNjcm9sbGFibGUiPgogICAgPHVsIGNsYXNzPSJ1ay1saXN0IHVrLWxpc3Qtc3RyaXBlZCI+CiAgICAgICAgPGxpPtGC0LXQutGB0YItMTwvbGk+CiAgICAgICAgPGxpPtGC0LXQutGB0YItMjwvbGk+CiAgICAgICAgPGxpPtGC0LXQutGB0YItMzwvbGk+CiAgICAgICAgPGxpPtGC0LXQutGB0YItNDwvbGk+CiAgICAgICAgPGxpPtGC0LXQutGB0YItNTwvbGk+CiAgICAgICAgPGxpPtGC0LXQutGB0YItNjwvbGk+CiAgICAgICAgPGxpPtGC0LXQutGB0YItNzwvbGk+CiAgICAgICAgPGxpPtGC0LXQutGB0YItODwvbGk+CiAgICA8L3VsPgo8L2Rpdj4KYDsKCiAgICDRjdC7KCLQv9C+0LvRg9GH0LjRgtGMIikub25jbGljayA9INC+0LHQvdC+0LLQuNGC0YzQodC+0L7QsdGJ0LXQvdC40Y87CiAgICAvL2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCLQvtGC0L/RgNCw0LLQuNGC0YwiKS5vbmNsaWNrID0g0L7RgtC/0YDQsNCy0LjRgtGM0KHQvtC+0L7QsdGJ0LXQvdC40LU7CgogICAgLy8g0JLQuNC0LgogICAgCiAgICDQstC40LQuaW5uZXJIVE1MID0KYApgOwp9CgrQv9GA0Lgo0LzRg9GA0L7QvC7QvtCx0YvRh9C90YvQudCf0YPRgdC6LCDRgdC+0LfQtNCw0YLRjNCY0L3RgtC10YDRhNC10LnRgSk7",
  83. {}
  84. ],
  85. ];
  86. Object.defineProperty(murom, "modules", {
  87. get: function()
  88. {
  89. return муром.модули;
  90. },
  91. set: function(значения)
  92. {
  93. муром.модули = значения;
  94. }
  95. });
  96. var загрузочныйМодуль = муром.модули[0];
  97. var код = atob(загрузочныйМодуль[1]);
  98. eval(код);
  99. </script>
  100. </body>
  101. </html>