3N2rk3yzChsJp4wCS5VLo5Q3ifLmDChfbzQ · data · qwe?main.e3350ff4d88d534234ef.js?4?0?1
{
    "qwe?main.e3350ff4d88d534234ef.js?4?0?1": "base64:ZSBwcmV2aW91cyBvbmUgdG8gY3JlYXRlIGEgbmV3IG9uZS4iKTtsaT10LmdldCh5aSk7dmFyIGU9dC5nZXQoam8sbnVsbCk7ZSYmZS5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSkpfShNZS5jcmVhdGUoe3Byb3ZpZGVyczphLG5hbWU6cn0pKX1yZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dmkoKTtpZighZSl0aHJvdyBuZXcgRXJyb3IoIk5vIHBsYXRmb3JtIGV4aXN0cyEiKTtpZighZS5pbmplY3Rvci5nZXQodCxudWxsKSl0aHJvdyBuZXcgRXJyb3IoIkEgcGxhdGZvcm0gd2l0aCBhIGRpZmZlcmVudCBjb25maWd1cmF0aW9uIGhhcyBiZWVuIGNyZWF0ZWQuIFBsZWFzZSBkZXN0cm95IGl0IGZpcnN0LiIpO3JldHVybiBlfShvKX19ZnVuY3Rpb24gdmkoKXtyZXR1cm4gbGkmJiFsaS5kZXN0cm95ZWQ/bGk6bnVsbH12YXIgeWk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX2luamVjdG9yPXQsdGhpcy5fbW9kdWxlcz1bXSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3llZD0hMX1yZXR1cm4gdC5wcm90b3R5cGUuYm9vdHN0cmFwTW9kdWxlRmFjdG9yeT1mdW5jdGlvbih0LGUpe3ZhciBuLHI9dGhpcyxvPSJub29wIj09PShuPWU/ZS5uZ1pvbmU6dm9pZCAwKT9uZXcgc2k6KCJ6b25lLmpzIj09PW4/dm9pZCAwOm4pfHxuZXcgbmkoe2VuYWJsZUxvbmdTdGFja1RyYWNlOmVlKCl9KSxpPVt7cHJvdmlkZTpuaSx1c2VWYWx1ZTpvfV07cmV0dXJuIG8ucnVuKChmdW5jdGlvbigpe3ZhciBlPU1lLmNyZWF0ZSh7cHJvdmlkZXJzOmkscGFyZW50OnIuaW5qZWN0b3IsbmFtZTp0Lm1vZHVsZVR5cGUubmFtZX0pLG49dC5jcmVhdGUoZSksYT1uLmluamVjdG9yLmdldCgkdCxudWxsKTtpZighYSl0aHJvdyBuZXcgRXJyb3IoIk5vIEVycm9ySGFuZGxlci4gSXMgcGxhdGZvcm0gbW9kdWxlIChCcm93c2VyTW9kdWxlKSBpbmNsdWRlZD8iKTtyZXR1cm4gVm8mJkVvKG4uaW5qZWN0b3IuZ2V0KExvLFNvKXx8U28pLG4ub25EZXN0cm95KChmdW5jdGlvbigpe3JldHVybiB3aShyLl9tb2R1bGVzLG4pfSkpLG8ucnVuT3V0c2lkZUFuZ3VsYXIoKGZ1bmN0aW9uKCl7cmV0dXJuIG8ub25FcnJvci5zdWJzY3JpYmUoe25leHQ6ZnVuY3Rpb24odCl7YS5oYW5kbGVFcnJvcih0KX19KX0pKSxmdW5jdGlvbih0LGUsbyl7dHJ5e3ZhciBpPSgoYT1uLmluamVjdG9yLmdldChBbykpLnJ1bkluaXRpYWxpemVycygpLGEuZG9uZVByb21pc2UudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gci5fbW9kdWxlRG9Cb290c3RyYXAobiksbn0pKSk7cmV0dXJuIEtlKGkpP2kuY2F0Y2goKGZ1bmN0aW9uKG4pe3Rocm93IGUucnVuT3V0c2lkZUFuZ3VsYXIoKGZ1bmN0aW9uKCl7cmV0dXJuIHQuaGFuZGxlRXJyb3Iobil9KSksbn0pKTppfWNhdGNoKHUpe3Rocm93IGUucnVuT3V0c2lkZUFuZ3VsYXIoKGZ1bmN0aW9uKCl7cmV0dXJuIHQuaGFuZGxlRXJyb3IodSl9KSksdX12YXIgYX0oYSxvKX0pKX0sdC5wcm90b3R5cGUuYm9vdHN0cmFwTW9kdWxlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpczt2b2lkIDA9PT1lJiYoZT1bXSk7dmFyIHI9bWkoe30sZSk7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdC5nZXQoUW8pLmNyZWF0ZUNvbXBpbGVyKFtlXSkuY29tcGlsZU1vZHVsZUFzeW5jKG4pfSh0aGlzLmluamVjdG9yLHIsdCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIG4uYm9vdHN0cmFwTW9kdWxlRmFjdG9yeSh0LHIpfSkpfSx0LnByb3RvdHlwZS5fbW9kdWxlRG9Cb290c3RyYXA9ZnVuY3Rpb24odCl7dmFyIGU9dC5pbmplY3Rvci5nZXQoX2kpO2lmKHQuX2Jvb3RzdHJhcENvbXBvbmVudHMubGVuZ3RoPjApdC5fYm9vdHN0cmFwQ29tcG9uZW50cy5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gZS5ib290c3RyYXAodCl9KSk7ZWxzZXtpZighdC5pbnN0YW5jZS5uZ0RvQm9vdHN0cmFwKXRocm93IG5ldyBFcnJvcigiVGhlIG1vZHVsZSAiK3l0KHQuaW5zdGFuY2UuY29uc3RydWN0b3IpKycgd2FzIGJvb3RzdHJhcHBlZCwgYnV0IGl0IGRvZXMgbm90IGRlY2xhcmUgIkBOZ01vZHVsZS5ib290c3RyYXAiIGNvbXBvbmVudHMgbm9yIGEgIm5nRG9Cb290c3RyYXAiIG1ldGhvZC4gUGxlYXNlIGRlZmluZSBvbmUgb2YgdGhlc2UuJyk7dC5pbnN0YW5jZS5uZ0RvQm9vdHN0cmFwKGUpfXRoaXMuX21vZHVsZXMucHVzaCh0KX0sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMucHVzaCh0KX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpbmplY3RvciIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbmplY3Rvcn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7aWYodGhpcy5fZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiVGhlIHBsYXRmb3JtIGhhcyBhbHJlYWR5IGJlZW4gZGVzdHJveWVkISIpO3RoaXMuX21vZHVsZXMuc2xpY2UoKS5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kZXN0cm95KCl9KSksdGhpcy5fZGVzdHJveUxpc3RlbmVycy5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSkpLHRoaXMuX2Rlc3Ryb3llZD0hMH0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHR9KCk7ZnVuY3Rpb24gbWkodCxlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lLnJlZHVjZShtaSx0KTpPYmplY3Qoci5fX2Fzc2lnbikoe30sdCxlKX12YXIgX2k9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsbyxpKXt2YXIgYT10aGlzO3RoaXMuX3pvbmU9dCx0aGlzLl9jb25zb2xlPWUsdGhpcy5faW5qZWN0b3I9bix0aGlzLl9leGNlcHRpb25IYW5kbGVyPXIsdGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPW8sdGhpcy5faW5pdFN0YXR1cz1pLHRoaXMuX2Jvb3RzdHJhcExpc3RlbmVycz1bXSx0aGlzLl92aWV3cz1bXSx0aGlzLl9ydW5uaW5nVGljaz0hMSx0aGlzLl9lbmZvcmNlTm9OZXdDaGFuZ2VzPSExLHRoaXMuX3N0YWJsZT0hMCx0aGlzLmNvbXBvbmVudFR5cGVzPVtdLHRoaXMuY29tcG9uZW50cz1bXSx0aGlzLl9lbmZvcmNlTm9OZXdDaGFuZ2VzPWVlKCksdGhpcy5fem9uZS5vbk1pY3JvdGFza0VtcHR5LnN1YnNjcmliZSh7bmV4dDpmdW5jdGlvbigpe2EuX3pvbmUucnVuKChmdW5jdGlvbigpe2EudGljaygpfSkpfX0pO3ZhciB1PW5ldyB4KChmdW5jdGlvbih0KXthLl9zdGFibGU9YS5fem9uZS5pc1N0YWJsZSYmIWEuX3pvbmUuaGFzUGVuZGluZ01hY3JvdGFza3MmJiFhLl96b25lLmhhc1BlbmRpbmdNaWNyb3Rhc2tzLGEuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKGZ1bmN0aW9uKCl7dC5uZXh0KGEuX3N0YWJsZSksdC5jb21wbGV0ZSgpfSkpfSkpLGw9bmV3IHgoKGZ1bmN0aW9uKHQpe3ZhciBlO2EuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKGZ1bmN0aW9uKCl7ZT1hLl96b25lLm9uU3RhYmxlLnN1YnNjcmliZSgoZnVuY3Rpb24oKXtuaS5hc3NlcnROb3RJbkFuZ3VsYXJab25lKCksZWkoKGZ1bmN0aW9uKCl7YS5fc3RhYmxlfHxhLl96b25lLmhhc1BlbmRpbmdNYWNyb3Rhc2tzfHxhLl96b25lLmhhc1BlbmRpbmdNaWNyb3Rhc2tzfHwoYS5fc3RhYmxlPSEwLHQubmV4dCghMCkpfSkpfSkpfSkpO3ZhciBuPWEuX3pvbmUub25VbnN0YWJsZS5zdWJzY3JpYmUoKGZ1bmN0aW9uKCl7bmkuYXNzZXJ0SW5Bbmd1bGFyWm9uZSgpLGEuX3N0YWJsZSYmKGEuX3N0YWJsZT0hMSxhLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKChmdW5jdGlvbigpe3QubmV4dCghMSl9KSkpfSkpO3JldHVybiBmdW5jdGlvbigpe2UudW5zdWJzY3JpYmUoKSxuLnVuc3Vic2NyaWJlKCl9fSkpO3RoaXMuaXNTdGFibGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07dmFyIG49TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHI9bnVsbCxvPXRbdC5sZW5ndGgtMV07cmV0dXJuIEEobyk/KHI9dC5wb3AoKSx0Lmxlbmd0aD4xJiYibnVtYmVyIj09dHlwZW9mIHRbdC5sZW5ndGgtMV0mJihuPXQucG9wKCkpKToibnVtYmVyIj09dHlwZW9mIG8mJihuPXQucG9wKCkpLG51bGw9PT1yJiYxPT09dC5sZW5ndGgmJnRbMF1pbnN0YW5jZW9mIHg/dFswXTokKG4pKHEodCxyKSl9KHUsbC5waXBlKChmdW5jdGlvbih0KXtyZXR1cm4gWCgpKChlPWl0LGZ1bmN0aW9uKHQpe3ZhciBuO249ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpmdW5jdGlvbigpe3JldHVybiBlfTt2YXIgcj1PYmplY3QuY3JlYXRlKHQscnQpO3JldHVybiByLnNvdXJjZT10LHIuc3ViamVjdEZhY3Rvcnk9bixyfSkodCkpO3ZhciBlfSkpKX12YXIgZTtyZXR1cm4gZT10LHQucHJvdG90eXBlLmJvb3RzdHJhcD1mdW5jdGlvbih0LGUpe3ZhciBuLHI9dGhpcztpZighdGhpcy5faW5pdFN0YXR1cy5kb25lKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGJvb3RzdHJhcCBhcyB0aGVyZSBhcmUgc3RpbGwgYXN5bmNocm9ub3VzIGluaXRpYWxpemVycyBydW5uaW5nLiBCb290c3RyYXAgY29tcG9uZW50cyBpbiB0aGUgYG5nRG9Cb290c3RyYXBgIG1ldGhvZCBvZiB0aGUgcm9vdCBtb2R1bGUuIik7bj10IGluc3RhbmNlb2YgWGU/dDp0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodCksdGhpcy5jb21wb25lbnRUeXBlcy5wdXNoKG4uY29tcG9uZW50VHlwZSk7dmFyIG89biBpbnN0YW5jZW9mIGFuP251bGw6dGhpcy5faW5qZWN0b3IuZ2V0KEh0KSxpPW4uY3JlYXRlKE1lLk5VTEwsW10sZXx8bi5zZWxlY3RvcixvKTtpLm9uRGVzdHJveSgoZnVuY3Rpb24oKXtyLl91bmxvYWRDb21wb25lbnQoaSl9KSk7dmFyIGE9aS5pbmplY3Rvci5nZXQoY2ksbnVsbCk7cmV0dXJuIGEmJmkuaW5qZWN0b3IuZ2V0KGZpKS5yZWdpc3RlckFwcGxpY2F0aW9uKGkubG9jYXRpb24ubmF0aXZlRWxlbWVudCxhKSx0aGlzLl9sb2FkQ29tcG9uZW50KGkpLGVlKCkmJnRoaXMuX2NvbnNvbGUubG9nKCJBbmd1bGFyIGlzIHJ1bm5pbmcgaW4gdGhlIGRldmVsb3BtZW50IG1vZGUuIENhbGwgZW5hYmxlUHJvZE1vZGUoKSB0byBlbmFibGUgdGhlIHByb2R1Y3Rpb24gbW9kZS4iKSxpfSx0LnByb3RvdHlwZS50aWNrPWZ1bmN0aW9uKCl7dmFyIHQsbixvLGksYT10aGlzO2lmKHRoaXMuX3J1bm5pbmdUaWNrKXRocm93IG5ldyBFcnJvcigiQXBwbGljYXRpb25SZWYudGljayBpcyBjYWxsZWQgcmVjdXJzaXZlbHkiKTt2YXIgdT1lLl90aWNrU2NvcGUoKTt0cnl7dGhpcy5fcnVubmluZ1RpY2s9ITA7dHJ5e2Zvcih2YXIgbD1PYmplY3Qoci5fX3ZhbHVlcykodGhpcy5fdmlld3MpLHM9bC5uZXh0KCk7IXMuZG9uZTtzPWwubmV4dCgpKXMudmFsdWUuZGV0ZWN0Q2hhbmdlcygpfWNhdGNoKGgpe3Q9e2Vycm9yOmh9fWZpbmFsbHl7dHJ5e3MmJiFzLmRvbmUmJihuPWwucmV0dXJuKSYmbi5jYWxsKGwpfWZpbmFsbHl7aWYodCl0aHJvdyB0LmVycm9yfX1pZih0aGlzLl9lbmZvcmNlTm9OZXdDaGFuZ2VzKXRyeXtmb3IodmFyIGM9T2JqZWN0KHIuX192YWx1ZXMpKHRoaXMuX3ZpZXdzKSxmPWMubmV4dCgpOyFmLmRvbmU7Zj1jLm5leHQoKSlmLnZhbHVlLmNoZWNrTm9DaGFuZ2VzKCl9Y2F0Y2gocCl7bz17ZXJyb3I6cH19ZmluYWxseXt0cnl7ZiYmIWYuZG9uZSYmKGk9Yy5yZXR1cm4pJiZpLmNhbGwoYyl9ZmluYWxseXtpZihvKXRocm93IG8uZXJyb3J9fX1jYXRjaChkKXt0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKChmdW5jdGlvbigpe3JldHVybiBhLl9leGNlcHRpb25IYW5kbGVyLmhhbmRsZUVycm9yKGQpfSkpfWZpbmFsbHl7dGhpcy5fcnVubmluZ1RpY2s9ITEsWG8odSl9fSx0LnByb3RvdHlwZS5hdHRhY2hWaWV3PWZ1bmN0aW9uKHQpe3ZhciBlPXQ7dGhpcy5fdmlld3MucHVzaChlKSxlLmF0dGFjaFRvQXBwUmVmKHRoaXMpfSx0LnByb3RvdHlwZS5kZXRhY2hWaWV3PWZ1bmN0aW9uKHQpe3ZhciBlPXQ7d2kodGhpcy5fdmlld3MsZSksZS5kZXRhY2hGcm9tQXBwUmVmKCl9LHQucHJvdG90eXBlLl9sb2FkQ29tcG9uZW50PWZ1bmN0aW9uKHQpe3RoaXMuYXR0YWNoVmlldyh0Lmhvc3RWaWV3KSx0aGlzLnRpY2soKSx0aGlzLmNvbXBvbmVudHMucHVzaCh0KSx0aGlzLl9pbmplY3Rvci5nZXQoRG8sW10pLmNvbmNhdCh0aGlzLl9ib290c3RyYXBMaXN0ZW5lcnMpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlKHQpfSkpfSx0LnByb3RvdHlwZS5fdW5sb2FkQ29tcG9uZW50PWZ1bmN0aW9uKHQpe3RoaXMuZGV0YWNoVmlldyh0Lmhvc3RWaWV3KSx3aSh0aGlzLmNvbXBvbmVudHMsdCl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fdmlld3Muc2xpY2UoKS5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kZXN0cm95KCl9KSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwidmlld0NvdW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZpZXdzLmxlbmd0aH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0Ll90aWNrU2NvcGU9JG8oIkFwcGxpY2F0aW9uUmVmI3RpY2soKSIpLHR9KCk7ZnVuY3Rpb24gd2kodCxlKXt2YXIgbj10LmluZGV4T2YoZSk7bj4tMSYmdC5zcGxpY2UobiwxKX12YXIgYmk9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXt9fSgpLHhpPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7fX0oKSxDaT17ZmFjdG9yeVBhdGhQcmVmaXg6IiIsZmFjdG9yeVBhdGhTdWZmaXg6Ii5uZ2ZhY3RvcnkifSxTaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl9jb21waWxlcj10LHRoaXMuX2NvbmZpZz1lfHxDaX1yZXR1cm4gdC5wcm90b3R5cGUubG9hZD1mdW5jdGlvbih0KXtyZXR1cm4hVm8mJnRoaXMuX2NvbXBpbGVyIGluc3RhbmNlb2YgV28/dGhpcy5sb2FkRmFjdG9yeSh0KTp0aGlzLmxvYWRBbmRDb21waWxlKHQpfSx0LnByb3RvdHlwZS5sb2FkQW5kQ29tcGlsZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG89T2JqZWN0KHIuX19yZWFkKSh0LnNwbGl0KCIjIiksMiksaT1vWzBdLGE9b1sxXTtyZXR1cm4gdm9pZCAwPT09YSYmKGE9ImRlZmF1bHQiKSxuKCJ6bjhQIikoaSkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHRbYV19KSkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIEVpKHQsaSxhKX0pKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gZS5fY29tcGlsZXIuY29tcGlsZU1vZHVsZUFzeW5jKHQpfSkpfSx0LnByb3RvdHlwZS5sb2FkRmFjdG9yeT1mdW5jdGlvbih0KXt2YXIgZT1PYmplY3Qoci5fX3JlYWQpKHQuc3BsaXQoIiMiKSwyKSxvPWVbMF0saT1lWzFdLGE9Ik5nRmFjdG9yeSI7cmV0dXJuIHZvaWQgMD09PWkmJihpPSJkZWZhdWx0IixhPSIiKSxuKCJ6bjhQIikodGhpcy5fY29uZmlnLmZhY3RvcnlQYXRoUHJlZml4K28rdGhpcy5fY29uZmlnLmZhY3RvcnlQYXRoU3VmZml4KS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gdFtpK2FdfSkpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiBFaSh0LG8saSl9KSl9LHR9KCk7ZnVuY3Rpb24gRWkodCxlLG4pe2lmKCF0KXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgJyIrbisiJyBpbiAnIitlKyInIik7cmV0dXJuIHR9dmFyIE9pPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dGhpcy5uYW1lPXQsdGhpcy5jYWxsYmFjaz1lfX0oKSxUaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMubGlzdGVuZXJzPVtdLHRoaXMucGFyZW50PW51bGwsdGhpcy5fZGVidWdDb250ZXh0PW4sdGhpcy5uYXRpdmVOb2RlPXQsZSYmZSBpbnN0YW5jZW9mIFBpJiZlLmFkZENoaWxkKHRoaXMpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImluamVjdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnQ29udGV4dC5pbmplY3Rvcn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNvbXBvbmVudEluc3RhbmNlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnQ29udGV4dC5jb21wb25lbnR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb250ZXh0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnQ29udGV4dC5jb250ZXh0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicmVmZXJlbmNlcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWJ1Z0NvbnRleHQucmVmZXJlbmNlc30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInByb3ZpZGVyVG9rZW5zIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnQ29udGV4dC5wcm92aWRlclRva2Vuc30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0fSgpLFBpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBvPXQuY2FsbCh0aGlzLGUsbixyKXx8dGhpcztyZXR1cm4gby5wcm9wZXJ0aWVzPXt9LG8uYXR0cmlidXRlcz17fSxvLmNsYXNzZXM9e30sby5zdHlsZXM9e30sby5jaGlsZE5vZGVzPVtdLG8ubmF0aXZlRWxlbWVudD1lLG99cmV0dXJuIE9iamVjdChyLl9fZXh0ZW5kcykoZSx0KSxlLnByb3RvdHlwZS5hZGRDaGlsZD1mdW5jdGlvbih0KXt0JiYodGhpcy5jaGlsZE5vZGVzLnB1c2godCksdC5wYXJlbnQ9dGhpcyl9LGUucHJvdG90eXBlLnJlbW92ZUNoaWxkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY2hpbGROb2Rlcy5pbmRleE9mKHQpOy0xIT09ZSYmKHQucGFyZW50PW51bGwsdGhpcy5jaGlsZE5vZGVzLnNwbGljZShlLDEpKX0sZS5wcm90b3R5cGUuaW5zZXJ0Q2hpbGRyZW5BZnRlcj1mdW5jdGlvbih0LGUpe3ZhciBuLG89dGhpcyxpPXRoaXMuY2hpbGROb2Rlcy5pbmRleE9mKHQpOy0xIT09aSYmKChuPXRoaXMuY2hpbGROb2Rlcykuc3BsaWNlLmFwcGx5KG4sT2JqZWN0KHIuX19zcHJlYWQpKFtpKzEsMF0sZSkpLGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5wYXJlbnQmJmUucGFyZW50LnJlbW92ZUNoaWxkKGUpLHQucGFyZW50PW99KSkpfSxlLnByb3RvdHlwZS5pbnNlcnRCZWZvcmU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLmNoaWxkTm9kZXMuaW5kZXhPZih0KTstMT09PW4/dGhpcy5hZGRDaGlsZChlKTooZS5wYXJlbnQmJmUucGFyZW50LnJlbW92ZUNoaWxkKGUpLGUucGFyZW50PXRoaXMsdGhpcy5jaGlsZE5vZGVzLnNwbGljZShuLDAsZSkpfSxlLnByb3RvdHlwZS5xdWVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5xdWVyeUFsbCh0KVswXXx8bnVsbH0sZS5wcm90b3R5cGUucXVlcnlBbGw9ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIGZ1bmN0aW9uIHQoZSxuLHIpe2UuY2hpbGROb2Rlcy5mb3JFYWNoKChmdW5jdGlvbihlKXtlIGluc3RhbmNlb2YgUGkmJihuKGUpJiZyLnB1c2goZSksdChlLG4scikpfSkpfSh0aGlzLHQsZSksZX0sZS5wcm90b3R5cGUucXVlcnlBbGxOb2Rlcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gZnVuY3Rpb24gdChlLG4scil7ZSBpbnN0YW5jZW9mIFBpJiZlLmNoaWxkTm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7bihlKSYmci5wdXNoKGUpLGUgaW5zdGFuY2VvZiBQaSYmdChlLG4scil9KSl9KHRoaXMsdCxlKSxlfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImNoaWxkcmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGROb2Rlcy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgZX0pKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS50cmlnZ2VyRXZlbnRIYW5kbGVyPWZ1bmN0aW9uKHQsZSl7dGhpcy5saXN0ZW5lcnMuZm9yRWFjaCgoZnVuY3Rpb24obil7bi5uYW1lPT10JiZuLmNhbGxiYWNrKGUpfSkpfSxlfShUaSksa2k9bmV3IE1hcCxBaT1mdW5jdGlvbih0KXtyZXR1cm4ga2kuZ2V0KHQpfHxudWxsfTtmdW5jdGlvbiBJaSh0KXtraS5zZXQodC5uYXRpdmVOb2RlLHQpfXZhciBSaT1naShudWxsLCJjb3JlIixbe3Byb3ZpZGU6Tm8sdXNlVmFsdWU6InVua25vd24ifSx7cHJvdmlkZTp5aSxkZXBzOltNZV19LHtwcm92aWRlOmZpLGRlcHM6W119LHtwcm92aWRlOlVvLGRlcHM6W119XSk7ZnVuY3Rpb24gTWkoKXtyZXR1cm4ga259ZnVuY3Rpb24gamkoKXtyZXR1cm4gQW59ZnVuY3Rpb24gTmkodCl7cmV0dXJuIHQ/KFZvJiZFbyh0KSx0KTpTb31mdW5jdGlvbiBEaSh0KXt2YXIgZT1bXTtyZXR1cm4gdC5vblN0YWJsZS5zdWJzY3JpYmUoKGZ1bmN0aW9uKCl7Zm9yKDtlLmxlbmd0aDspZS5wb3AoKSgpfSkpLGZ1bmN0aW9uKHQpe2UucHVzaCh0KX19dmFyIFVpPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe319KCk7ZnVuY3Rpb24gTGkodCxlLG4scixvLGkpe3R8PTE7dmFyIGE9Y3IoZSk7cmV0dXJue25vZGVJbmRleDotMSxwYXJlbnQ6bnVsbCxyZW5kZXJQYXJlbnQ6bnVsbCxiaW5kaW5nSW5kZXg6LTEsb3V0cHV0SW5kZXg6LTEsZmxhZ3M6dCxjaGVja0luZGV4Oi0xLGNoaWxkRmxhZ3M6MCxkaXJlY3RDaGlsZEZsYWdzOjAsY2hpbGRNYXRjaGVkUXVlcmllczowLG1hdGNoZWRRdWVyaWVzOmEubWF0Y2hlZFF1ZXJpZXMsbWF0Y2hlZFF1ZXJ5SWRzOmEubWF0Y2hlZFF1ZXJ5SWRzLHJlZmVyZW5jZXM6YS5yZWZlcmVuY2VzLG5nQ29udGVudEluZGV4Om4sY2hpbGRDb3VudDpyLGJpbmRpbmdzOltdLGJpbmRpbmdGbGFnczowLG91dHB1dHM6W10sZWxlbWVudDp7bnM6bnVsbCxuYW1lOm51bGwsYXR0cnM6bnVsbCx0ZW1wbGF0ZTppP2RyKGkpOm51bGwsY29tcG9uZW50UHJvdmlkZXI6bnVsbCxjb21wb25lbnRWaWV3Om51bGwsY29tcG9uZW50UmVuZGVyZXJUeXBlOm51bGwscHVibGljUHJvdmlkZXJzOm51bGwsYWxsUHJvdmlkZXJzOm51bGwsaGFuZGxlRXZlbnQ6b3x8cW59LHByb3ZpZGVyOm51bGwsdGV4dDpudWxsLHF1ZXJ5Om51bGwsbmdDb250ZW50Om51bGx9fWZ1bmN0aW9uIFZpKHQsZSxuLG8saSxhLHUsbCxzLGMsZixoKXt2YXIgcDt2b2lkIDA9PT11JiYodT1bXSksY3x8KGM9cW4pO3ZhciBkPWNyKG4pLGc9ZC5tYXRjaGVkUXVlcmllcyx2PWQucmVmZXJlbmNlcyx5PWQubWF0Y2hlZFF1ZXJ5SWRzLG09bnVsbCxfPW51bGw7YSYmKG09KHA9T2JqZWN0KHIuX19yZWFkKShicihhKSwyKSlbMF0sXz1wWzFdKSxsPWx8fFtdO2Zvcih2YXIgdz1uZXcgQXJyYXkobC5sZW5ndGgpLGI9MDtiPGwubGVuZ3RoO2IrKyl7dmFyIHg9T2JqZWN0KHIuX19yZWFkKShsW2JdLDMpLEM9eFswXSxTPXhbMV0sRT14WzJdLE89T2JqZWN0KHIuX19yZWFkKShicihTKSwyKSxUPU9bMF0sUD1PWzFdLGs9dm9pZCAwLEE9dm9pZCAwO3N3aXRjaCgxNSZDKXtjYXNlIDQ6QT1FO2JyZWFrO2Nhc2UgMTpjYXNlIDg6az1FfXdbYl09e2ZsYWdzOkMsbnM6VCxuYW1lOlAsbm9uTWluaWZpZWROYW1lOlAsc2VjdXJpdHlDb250ZXh0Omssc3VmZml4OkF9fXM9c3x8W107dmFyIEk9bmV3IEFycmF5KHMubGVuZ3RoKTtmb3IoYj0wO2I8cy5sZW5ndGg7YisrKXt2YXIgUj1PYmplY3Qoci5fX3JlYWQpKHNbYl0sMik7SVtiXT17dHlwZTowLHRhcmdldDpSWzBdLGV2ZW50TmFtZTpSWzFdLHByb3BOYW1lOm51bGx9fXZhciBNPSh1PXV8fFtdKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdChyLl9fcmVhZCkodCwyKSxuPWVbMF0sbz1lWzFdLGk9T2JqZWN0KHIuX19yZWFkKShicihuKSwyKTtyZXR1cm5baVswXSxpWzFdLG9dfSkpO3JldHVybiBoPWZ1bmN0aW9uKHQpe2lmKHQmJnQuaWQ9PT1Lbil7dmFyIGU9bnVsbCE9dC5lbmNhcHN1bGF0aW9uJiZ0LmVuY2Fwc3VsYXRpb24hPT1adC5Ob25lfHx0LnN0eWxlcy5sZW5ndGh8fE9iamVjdC5rZXlzKHQuZGF0YSkubGVuZ3RoO3QuaWQ9ZT8iYyIrJG4rKzpZbn1yZXR1cm4gdCYmdC5pZD09PVluJiYodD1udWxsKSx0fHxudWxsfShoKSxmJiYoZXw9MzM1NTQ0MzIpLHtub2RlSW5kZXg6LTEscGFyZW50Om51bGwscmVuZGVyUGFyZW50Om51bGwsYmluZGluZ0luZGV4Oi0xLG91dHB1dEluZGV4Oi0xLGNoZWNrSW5kZXg6dCxmbGFnczplfD0xLGNoaWxkRmxhZ3M6MCxkaXJlY3RDaGlsZEZsYWdzOjAsY2hpbGRNYXRjaGVkUXVlcmllczowLG1hdGNoZWRRdWVyaWVzOmcsbWF0Y2hlZFF1ZXJ5SWRzOnkscmVmZXJlbmNlczp2LG5nQ29udGVudEluZGV4Om8sY2hpbGRDb3VudDppLGJpbmRpbmdzOncsYmluZGluZ0ZsYWdzOnhyKHcpLG91dHB1dHM6SSxlbGVtZW50OntuczptLG5hbWU6XyxhdHRyczpNLHRlbXBsYXRlOm51bGwsY29tcG9uZW50UHJvdmlkZXI6bnVsbCxjb21wb25lbnRWaWV3OmZ8fG51bGwsY29tcG9uZW50UmVuZGVyZXJUeXBlOmgscHVibGljUHJvdmlkZXJzOm51bGwsYWxsUHJvdmlkZXJzOm51bGwsaGFuZGxlRXZlbnQ6Y3x8cW59LHByb3ZpZGVyOm51bGwsdGV4dDpudWxsLHF1ZXJ5Om51bGwsbmdDb250ZW50Om51bGx9fWZ1bmN0aW9uIEhpKHQsZSxuKXt2YXIgbyxpPW4uZWxlbWVudCxhPXQucm9vdC5zZWxlY3Rvck9yTm9kZSx1PXQucmVuZGVyZXI7aWYodC5wYXJlbnR8fCFhKXtvPWkubmFtZT91LmNyZWF0ZUVsZW1lbnQoaS5uYW1lLGkubnMpOnUuY3JlYXRlQ29tbWVudCgiIik7dmFyIGw9aHIodCxlLG4pO2wmJnUuYXBwZW5kQ2hpbGQobCxvKX1lbHNlIG89dS5zZWxlY3RSb290RWxlbWVudChhLCEhaS5jb21wb25lbnRSZW5kZXJlclR5cGUmJmkuY29tcG9uZW50UmVuZGVyZXJUeXBlLmVuY2Fwc3VsYXRpb249PT1adC5TaGFkb3dEb20pO2lmKGkuYXR0cnMpZm9yKHZhciBzPTA7czxpLmF0dHJzLmxlbmd0aDtzKyspe3ZhciBjPU9iamVjdChyLl9fcmVhZCkoaS5hdHRyc1tzXSwzKTt1LnNldEF0dHJpYnV0ZShvLGNbMV0sY1syXSxjWzBdKX1yZXR1cm4gb31mdW5jdGlvbiB6aSh0LGUsbixyKXtmb3IodmFyIG89MDtvPG4ub3V0cHV0cy5sZW5ndGg7bysrKXt2YXIgaT1uLm91dHB1dHNbb10sYT1GaSh0LG4ubm9kZUluZGV4LChmPWkuZXZlbnROYW1lLChjPWkudGFyZ2V0KT9jKyI6IitmOmYpKSx1PWkudGFyZ2V0LGw9dDsiY29tcG9uZW50Ij09PWkudGFyZ2V0JiYodT1udWxsLGw9ZSk7dmFyIHM9bC5yZW5kZXJlci5saXN0ZW4odXx8cixpLmV2ZW50TmFtZSxhKTt0LmRpc3Bvc2FibGVzW24ub3V0cHV0SW5kZXgrb109c312YXIgYyxmfWZ1bmN0aW9uIEZpKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIG9yKHQsZSxuLHIpfX1mdW5jdGlvbiBCaSh0LGUsbixyKXtpZighdHIodCxlLG4scikpcmV0dXJuITE7dmFyIG89ZS5iaW5kaW5nc1tuXSxpPXpuKHQsZS5ub2RlSW5kZXgpLGE9aS5yZW5kZXJFbGVtZW50LHU9by5uYW1lO3N3aXRjaCgxNSZvLmZsYWdzKXtjYXNlIDE6IWZ1bmN0aW9uKHQsZSxuLHIsbyxpKXt2YXIgYT1lLnNlY3VyaXR5Q29udGV4dCx1PWE/dC5yb290LnNhbml0aXplci5zYW5pdGl6ZShhLGkpOmk7dT1udWxsIT11P3UudG9TdHJpbmcoKTpudWxsO3ZhciBsPXQucmVuZGVyZXI7bnVsbCE9aT9sLnNldEF0dHJpYnV0ZShuLG8sdSxyKTpsLnJlbW92ZUF0dHJpYnV0ZShuLG8scil9KHQsbyxhLG8ubnMsdSxyKTticmVhaztjYXNlIDI6IWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvPXQucmVuZGVyZXI7cj9vLmFkZENsYXNzKGUsbik6by5yZW1vdmVDbGFzcyhlLG4pfSh0LGEsdSxyKTticmVhaztjYXNlIDQ6IWZ1bmN0aW9uKHQsZSxuLHIsbyl7dmFyIGk9dC5yb290LnNhbml0aXplci5zYW5pdGl6ZShDZS5TVFlMRSxvKTtpZihudWxsIT1pKXtpPWkudG9TdHJpbmcoKTt2YXIgYT1lLnN1ZmZpeDtudWxsIT1hJiYoaSs9YSl9ZWxzZSBpPW51bGw7dmFyIHU9dC5yZW5kZXJlcjtudWxsIT1pP3Uuc2V0U3R5bGUobixyLGkpOnUucmVtb3ZlU3R5bGUobixyKX0odCxvLGEsdSxyKTticmVhaztjYXNlIDg6IWZ1bmN0aW9uKHQsZSxuLHIsbyl7dmFyIGk9ZS5zZWN1cml0eUNvbnRleHQsYT1pP3Qucm9vdC5zYW5pdGl6ZXIuc2FuaXRpemUoaSxvKTpvO3QucmVuZGVyZXIuc2V0UHJvcGVydHkobixyLGEpfSgzMzU1NDQzMiZlLmZsYWdzJiYzMiZvLmZsYWdzP2kuY29tcG9uZW50Vmlldzp0LG8sYSx1LHIpfXJldHVybiEwfWZ1bmN0aW9uIFppKHQpe2Zvcih2YXIgZT10LmRlZi5ub2RlTWF0Y2hlZFF1ZXJpZXM7dC5wYXJlbnQmJnNyKHQpOyl7dmFyIG49dC5wYXJlbnROb2RlRGVmO3Q9dC5wYXJlbnQ7Zm9yKHZhciByPW4ubm9kZUluZGV4K24uY2hpbGRDb3VudCxvPTA7bzw9cjtvKyspNjcxMDg4NjQmKGk9dC5kZWYubm9kZXNbb10pLmZsYWdzJiY1MzY4NzA5MTImaS5mbGFncyYmKGkucXVlcnkuZmlsdGVySWQmZSk9PT1pLnF1ZXJ5LmZpbHRlcklkJiZabih0LG8pLnNldERpcnR5KCksISgxJmkuZmxhZ3MmJm8raS5jaGlsZENvdW50PG4ubm9kZUluZGV4KSYmNjcxMDg4NjQmaS5jaGlsZEZsYWdzJiY1MzY4NzA5MTImaS5jaGlsZEZsYWdzfHwobys9aS5jaGlsZENvdW50KX1pZigxMzQyMTc3MjgmdC5kZWYubm9kZUZsYWdzKWZvcihvPTA7bzx0LmRlZi5ub2Rlcy5sZW5ndGg7bysrKXt2YXIgaTsxMzQyMTc3MjgmKGk9dC5kZWYubm9kZXNbb10pLmZsYWdzJiY1MzY4NzA5MTImaS5mbGFncyYmWm4odCxvKS5zZXREaXJ0eSgpLG8rPWkuY2hpbGRDb3VudH19ZnVuY3Rpb24gR2kodCxlKXt2YXIgbj1abih0LGUubm9kZUluZGV4KTtpZihuLmRpcnR5KXt2YXIgcixvPXZvaWQgMDtpZig2NzEwODg2NCZlLmZsYWdzKXt2YXIgaT1lLnBhcmVudC5wYXJlbnQ7bz1xaSh0LGkubm9kZUluZGV4LGkubm9kZUluZGV4K2kuY2hpbGRDb3VudCxlLnF1ZXJ5LFtdKSxyPUZuKHQsZS5wYXJlbnQubm9kZUluZGV4KS5pbnN0YW5jZX1lbHNlIDEzNDIxNzcyOCZlLmZsYWdzJiYobz1xaSh0LDAsdC5kZWYubm9kZXMubGVuZ3RoLTEsZS5xdWVyeSxbXSkscj10LmNvbXBvbmVudCk7bi5yZXNldChvKTtmb3IodmFyIGE9ZS5xdWVyeS5iaW5kaW5ncyx1PSExLGw9MDtsPGEubGVuZ3RoO2wrKyl7dmFyIHM9YVtsXSxjPXZvaWQgMDtzd2l0Y2gocy5iaW5kaW5nVHlwZSl7Y2FzZSAwOmM9bi5maXJzdDticmVhaztjYXNlIDE6Yz1uLHU9ITB9cltzLnByb3BOYW1lXT1jfXUmJm4ubm90aWZ5T25DaGFuZ2VzKCl9fWZ1bmN0aW9uIHFpKHQsZSxuLHIsbyl7Zm9yKHZhciBpPWU7aTw9bjtpKyspe3ZhciBhPXQuZGVmLm5vZGVzW2ldLHU9YS5tYXRjaGVkUXVlcmllc1tyLmlkXTtpZihudWxsIT11JiZvLnB1c2goV2kodCxhLHUpKSwxJmEuZmxhZ3MmJmEuZWxlbWVudC50ZW1wbGF0ZSYmKGEuZWxlbWVudC50ZW1wbGF0ZS5ub2RlTWF0Y2hlZFF1ZXJpZXMmci5maWx0ZXJJZCk9PT1yLmZpbHRlcklkKXt2YXIgbD16bih0LGkpO2lmKChhLmNoaWxkTWF0Y2hlZFF1ZXJpZXMmci5maWx0ZXJJZCk9PT1yLmZpbHRlcklkJiYocWkodCxpKzEsaSthLmNoaWxkQ291bnQscixvKSxpKz1hLmNoaWxkQ291bnQpLDE2Nzc3MjE2JmEuZmxhZ3MpZm9yKHZhciBzPWwudmlld0NvbnRhaW5lci5fZW1iZWRkZWRWaWV3cyxjPTA7YzxzLmxlbmd0aDtjKyspe3ZhciBmPXNbY10saD1pcihmKTtoJiZoPT09bCYmcWkoZiwwLGYuZGVmLm5vZGVzLmxlbmd0aC0xLHIsbyl9dmFyIHA9bC50ZW1wbGF0ZS5fcHJvamVjdGVkVmlld3M7aWYocClmb3IoYz0wO2M8cC5sZW5ndGg7YysrKXt2YXIgZD1wW2NdO3FpKGQsMCxkLmRlZi5ub2Rlcy5sZW5ndGgtMSxyLG8pfX0oYS5jaGlsZE1hdGNoZWRRdWVyaWVzJnIuZmlsdGVySWQpIT09ci5maWx0ZXJJZCYmKGkrPWEuY2hpbGRDb3VudCl9cmV0dXJuIG99ZnVuY3Rpb24gV2kodCxlLG4pe2lmKG51bGwhPW4pc3dpdGNoKG4pe2Nhc2UgMTpyZXR1cm4gem4odCxlLm5vZGVJbmRleCkucmVuZGVyRWxlbWVudDtjYXNlIDA6cmV0dXJuIG5ldyBsbih6bih0LGUubm9kZUluZGV4KS5yZW5kZXJFbGVtZW50KTtjYXNlIDI6cmV0dXJuIHpuKHQsZS5ub2RlSW5kZXgpLnRlbXBsYXRlO2Nhc2UgMzpyZXR1cm4gem4odCxlLm5vZGVJbmRleCkudmlld0NvbnRhaW5lcjtjYXNlIDQ6cmV0dXJuIEZuKHQsZS5ub2RlSW5kZXgpLmluc3RhbmNlfX1mdW5jdGlvbiBRaSh0LGUsbil7dmFyIHI9aHIodCxlLG4pO3ImJnlyKHQsbi5uZ0NvbnRlbnQuaW5kZXgsMSxyLG51bGwsdm9pZCAwKX1mdW5jdGlvbiBLaSh0LGUsbil7Zm9yKHZhciByPW5ldyBBcnJheShuLmxlbmd0aC0xKSxvPTE7bzxuLmxlbmd0aDtvKyspcltvLTFdPXtmbGFnczo4LG5hbWU6bnVsbCxuczpudWxsLG5vbk1pbmlmaWVkTmFtZTpudWxsLHNlY3VyaXR5Q29udGV4dDpudWxsLHN1ZmZpeDpuW29dfTtyZXR1cm57bm9kZUluZGV4Oi0xLHBhcmVudDpudWxsLHJlbmRlclBhcmVudDpudWxsLGJpbmRpbmdJbmRleDotMSxvdXRwdXRJbmRleDotMSxjaGVja0luZGV4OnQsZmxhZ3M6MixjaGlsZEZsYWdzOjAsZGlyZWN0Q2hpbGRGbGFnczowLGNoaWxkTWF0Y2hlZFF1ZXJpZXM6MCxtYXRjaGVkUXVlcmllczp7fSxtYXRjaGVkUXVlcnlJZHM6MCxyZWZlcmVuY2VzOnt9LG5nQ29udGVudEluZGV4OmUsY2hpbGRDb3VudDowLGJpbmRpbmdzOnIsYmluZGluZ0ZsYWdzOjgsb3V0cHV0czpbXSxlbGVtZW50Om51bGwscHJvdmlkZXI6bnVsbCx0ZXh0OntwcmVmaXg6blswXX0scXVlcnk6bnVsbCxuZ0NvbnRlbnQ6bnVsbH19ZnVuY3Rpb24gWWkodCxlLG4pe3ZhciByLG89dC5yZW5kZXJlcjtyPW8uY3JlYXRlVGV4dChuLnRleHQucHJlZml4KTt2YXIgaT1ocih0LGUsbik7cmV0dXJuIGkmJm8uYXBwZW5kQ2hpbGQoaSxyKSx7cmVuZGVyVGV4dDpyfX1mdW5jdGlvbiBKaSh0LGUpe3JldHVybihudWxsIT10P3QudG9TdHJpbmcoKToiIikrZS5zdWZmaXh9ZnVuY3Rpb24gJGkodCxlLG4scil7Zm9yKHZhciBvPTAsaT0wLGE9MCx1PTAsbD0wLHM9bnVsbCxjPW51bGwsZj0hMSxoPSExLHA9bnVsbCxkPTA7ZDxlLmxlbmd0aDtkKyspe3ZhciBnPWVbZF07aWYoZy5ub2RlSW5kZXg9ZCxnLnBhcmVudD1zLGcuYmluZGluZ0luZGV4PW8sZy5vdXRwdXRJbmRleD1pLGcucmVuZGVyUGFyZW50PWMsYXw9Zy5mbGFncyxsfD1nLm1hdGNoZWRRdWVyeUlkcyxnLmVsZW1lbnQpe3ZhciB2PWcuZWxlbWVudDt2LnB1YmxpY1Byb3ZpZGVycz1zP3MuZWxlbWVudC5wdWJsaWNQcm92aWRlcnM6T2JqZWN0LmNyZWF0ZShudWxsKSx2LmFsbFByb3ZpZGVycz12LnB1YmxpY1Byb3ZpZGVycyxmPSExLGg9ITEsZy5lbGVtZW50LnRlbXBsYXRlJiYobHw9Zy5lbGVtZW50LnRlbXBsYXRlLm5vZGVNYXRjaGVkUXVlcmllcyl9aWYodGEocyxnLGUubGVuZ3RoKSxvKz1nLmJpbmRpbmdzLmxlbmd0aCxpKz1nLm91dHB1dHMubGVuZ3RoLCFjJiYzJmcuZmxhZ3MmJihwPWcpLDIwMjI0JmcuZmxhZ3Mpe2Z8fChmPSEwLHMuZWxlbWVudC5wdWJsaWNQcm92aWRlcnM9T2JqZWN0LmNyZWF0ZShzLmVsZW1lbnQucHVibGljUHJvdmlkZXJzKSxzLmVsZW1lbnQuYWxsUHJvdmlkZXJzPXMuZWxlbWVudC5wdWJsaWNQcm92aWRlcnMpO3ZhciB5PTAhPSgzMjc2OCZnLmZsYWdzKTswPT0oODE5MiZnLmZsYWdzKXx8eT9zLmVsZW1lbnQucHVibGljUHJvdmlkZXJzW1FuKGcucHJvdmlkZXIudG9rZW4pXT1nOihofHwoaD0hMCxzLmVsZW1lbnQuYWxsUHJvdmlkZXJzPU9iamVjdC5jcmVhdGUocy5lbGVtZW50LnB1YmxpY1Byb3ZpZGVycykpLHMuZWxlbWVudC5hbGxQcm92aWRlcnNbUW4oZy5wcm92aWRlci50b2tlbildPWcpLHkmJihzLmVsZW1lbnQuY29tcG9uZW50UHJvdmlkZXI9Zyl9aWYocz8ocy5jaGlsZEZsYWdzfD1nLmZsYWdzLHMuZGlyZWN0Q2hpbGRGbGFnc3w9Zy5mbGFncyxzLmNoaWxkTWF0Y2hlZFF1ZXJpZXN8PWcubWF0Y2hlZFF1ZXJ5SWRzLGcuZWxlbWVudCYmZy5lbGVtZW50LnRlbXBsYXRlJiYocy5jaGlsZE1hdGNoZWRRdWVyaWVzfD1nLmVsZW1lbnQudGVtcGxhdGUubm9kZU1hdGNoZWRRdWVyaWVzKSk6dXw9Zy5mbGFncyxnLmNoaWxkQ291bnQ+MClzPWcsWGkoZyl8fChjPWcpO2Vsc2UgZm9yKDtzJiZkPT09cy5ub2RlSW5kZXgrcy5jaGlsZENvdW50Oyl7dmFyIG09cy5wYXJlbnQ7bSYmKG0uY2hpbGRGbGFnc3w9cy5jaGlsZEZsYWdzLG0uY2hpbGRNYXRjaGVkUXVlcmllc3w9cy5jaGlsZE1hdGNoZWRRdWVyaWVzKSxjPShzPW0pJiZYaShzKT9zLnJlbmRlclBhcmVudDpzfX1yZXR1cm57ZmFjdG9yeTpudWxsLG5vZGVGbGFnczphLHJvb3ROb2RlRmxhZ3M6dSxub2RlTWF0Y2hlZFF1ZXJpZXM6bCxmbGFnczp0LG5vZGVzOmUsdXBkYXRlRGlyZWN0aXZlczpufHxxbix1cGRhdGVSZW5kZXJlcjpyfHxxbixoYW5kbGVFdmVudDpmdW5jdGlvbih0LG4scixvKXtyZXR1cm4gZVtuXS5lbGVtZW50LmhhbmRsZUV2ZW50KHQscixvKX0sYmluZGluZ0NvdW50Om8sb3V0cHV0Q291bnQ6aSxsYXN0UmVuZGVyUm9vdE5vZGU6cH19ZnVuY3Rpb24gWGkodCl7cmV0dXJuIDAhPSgxJnQuZmxhZ3MpJiZudWxsPT09dC5lbGVtZW50Lm5hbWV9ZnVuY3Rpb24gdGEodCxlLG4pe3ZhciByPWUuZWxlbWVudCYmZS5lbGVtZW50LnRlbXBsYXRlO2lmKHIpe2lmKCFyLmxhc3RSZW5kZXJSb290Tm9kZSl0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgU3RhdGU6IEVtYmVkZGVkIHRlbXBsYXRlcyB3aXRob3V0IG5vZGVzIGFyZSBub3QgYWxsb3dlZCEiKTtpZihyLmxhc3RSZW5kZXJSb290Tm9kZSYmMTY3NzcyMTYmci5sYXN0UmVuZGVyUm9vdE5vZGUuZmxhZ3MpdGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIFN0YXRlOiBMYXN0IHJvb3Qgbm9kZSBvZiBhIHRlbXBsYXRlIGNhbid0IGhhdmUgZW1iZWRkZWQgdmlld3MsIGF0IGluZGV4ICIrZS5ub2RlSW5kZXgrIiEiKX1pZigyMDIyNCZlLmZsYWdzJiYwPT0oMSYodD90LmZsYWdzOjApKSl0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgU3RhdGU6IFN0YXRpY1Byb3ZpZGVyL0RpcmVjdGl2ZSBub2RlcyBuZWVkIHRvIGJlIGNoaWxkcmVuIG9mIGVsZW1lbnRzIG9yIGFuY2hvcnMsIGF0IGluZGV4ICIrZS5ub2RlSW5kZXgrIiEiKTtpZihlLnF1ZXJ5KXtpZig2NzEwODg2NCZlLmZsYWdzJiYoIXR8fDA9PSgxNjM4NCZ0LmZsYWdzKSkpdGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIFN0YXRlOiBDb250ZW50IFF1ZXJ5IG5vZGVzIG5lZWQgdG8gYmUgY2hpbGRyZW4gb2YgZGlyZWN0aXZlcywgYXQgaW5kZXggIitlLm5vZGVJbmRleCsiISIpO2lmKDEzNDIxNzcyOCZlLmZsYWdzJiZ0KXRocm93IG5ldyBFcnJvcigiSWxsZWdhbCBTdGF0ZTogVmlldyBRdWVyeSBub2RlcyBoYXZlIHRvIGJlIHRvcCBsZXZlbCBub2RlcywgYXQgaW5kZXggIitlLm5vZGVJbmRleCsiISIpfWlmKGUuY2hpbGRDb3VudCl7dmFyIG89dD90Lm5vZGVJbmRleCt0LmNoaWxkQ291bnQ6bi0xO2lmKGUubm9kZUluZGV4PD1vJiZlLm5vZGVJbmRleCtlLmNoaWxkQ291bnQ+byl0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgU3RhdGU6IGNoaWxkQ291bnQgb2Ygbm9kZSBsZWFkcyBvdXRzaWRlIG9mIHBhcmVudCwgYXQgaW5kZXggIitlLm5vZGVJbmRleCsiISIpfX1mdW5jdGlvbiBlYSh0LGUsbixyKXt2YXIgbz1vYSh0LnJvb3QsdC5yZW5kZXJlcix0LGUsbik7cmV0dXJuIGlhKG8sdC5jb21wb25lbnQsciksYWEobyksb31mdW5jdGlvbiBuYSh0LGUsbil7dmFyIHI9b2EodCx0LnJlbmRlcmVyLG51bGwsbnVsbCxlKTtyZXR1cg=="
}

Changelog:

{
    "2019.12.03 20:21": "base64:ZSBwcmV2aW91cyBvbmUgdG8gY3JlYXRlIGEgbmV3IG9uZS4iKTtsaT10LmdldCh5aSk7dmFyIGU9dC5nZXQoam8sbnVsbCk7ZSYmZS5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSkpfShNZS5jcmVhdGUoe3Byb3ZpZGVyczphLG5hbWU6cn0pKX1yZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dmkoKTtpZighZSl0aHJvdyBuZXcgRXJyb3IoIk5vIHBsYXRmb3JtIGV4aXN0cyEiKTtpZighZS5pbmplY3Rvci5nZXQodCxudWxsKSl0aHJvdyBuZXcgRXJyb3IoIkEgcGxhdGZvcm0gd2l0aCBhIGRpZmZlcmVudCBjb25maWd1cmF0aW9uIGhhcyBiZWVuIGNyZWF0ZWQuIFBsZWFzZSBkZXN0cm95IGl0IGZpcnN0LiIpO3JldHVybiBlfShvKX19ZnVuY3Rpb24gdmkoKXtyZXR1cm4gbGkmJiFsaS5kZXN0cm95ZWQ/bGk6bnVsbH12YXIgeWk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX2luamVjdG9yPXQsdGhpcy5fbW9kdWxlcz1bXSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3llZD0hMX1yZXR1cm4gdC5wcm90b3R5cGUuYm9vdHN0cmFwTW9kdWxlRmFjdG9yeT1mdW5jdGlvbih0LGUpe3ZhciBuLHI9dGhpcyxvPSJub29wIj09PShuPWU/ZS5uZ1pvbmU6dm9pZCAwKT9uZXcgc2k6KCJ6b25lLmpzIj09PW4/dm9pZCAwOm4pfHxuZXcgbmkoe2VuYWJsZUxvbmdTdGFja1RyYWNlOmVlKCl9KSxpPVt7cHJvdmlkZTpuaSx1c2VWYWx1ZTpvfV07cmV0dXJuIG8ucnVuKChmdW5jdGlvbigpe3ZhciBlPU1lLmNyZWF0ZSh7cHJvdmlkZXJzOmkscGFyZW50OnIuaW5qZWN0b3IsbmFtZTp0Lm1vZHVsZVR5cGUubmFtZX0pLG49dC5jcmVhdGUoZSksYT1uLmluamVjdG9yLmdldCgkdCxudWxsKTtpZighYSl0aHJvdyBuZXcgRXJyb3IoIk5vIEVycm9ySGFuZGxlci4gSXMgcGxhdGZvcm0gbW9kdWxlIChCcm93c2VyTW9kdWxlKSBpbmNsdWRlZD8iKTtyZXR1cm4gVm8mJkVvKG4uaW5qZWN0b3IuZ2V0KExvLFNvKXx8U28pLG4ub25EZXN0cm95KChmdW5jdGlvbigpe3JldHVybiB3aShyLl9tb2R1bGVzLG4pfSkpLG8ucnVuT3V0c2lkZUFuZ3VsYXIoKGZ1bmN0aW9uKCl7cmV0dXJuIG8ub25FcnJvci5zdWJzY3JpYmUoe25leHQ6ZnVuY3Rpb24odCl7YS5oYW5kbGVFcnJvcih0KX19KX0pKSxmdW5jdGlvbih0LGUsbyl7dHJ5e3ZhciBpPSgoYT1uLmluamVjdG9yLmdldChBbykpLnJ1bkluaXRpYWxpemVycygpLGEuZG9uZVByb21pc2UudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gci5fbW9kdWxlRG9Cb290c3RyYXAobiksbn0pKSk7cmV0dXJuIEtlKGkpP2kuY2F0Y2goKGZ1bmN0aW9uKG4pe3Rocm93IGUucnVuT3V0c2lkZUFuZ3VsYXIoKGZ1bmN0aW9uKCl7cmV0dXJuIHQuaGFuZGxlRXJyb3Iobil9KSksbn0pKTppfWNhdGNoKHUpe3Rocm93IGUucnVuT3V0c2lkZUFuZ3VsYXIoKGZ1bmN0aW9uKCl7cmV0dXJuIHQuaGFuZGxlRXJyb3IodSl9KSksdX12YXIgYX0oYSxvKX0pKX0sdC5wcm90b3R5cGUuYm9vdHN0cmFwTW9kdWxlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpczt2b2lkIDA9PT1lJiYoZT1bXSk7dmFyIHI9bWkoe30sZSk7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdC5nZXQoUW8pLmNyZWF0ZUNvbXBpbGVyKFtlXSkuY29tcGlsZU1vZHVsZUFzeW5jKG4pfSh0aGlzLmluamVjdG9yLHIsdCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIG4uYm9vdHN0cmFwTW9kdWxlRmFjdG9yeSh0LHIpfSkpfSx0LnByb3RvdHlwZS5fbW9kdWxlRG9Cb290c3RyYXA9ZnVuY3Rpb24odCl7dmFyIGU9dC5pbmplY3Rvci5nZXQoX2kpO2lmKHQuX2Jvb3RzdHJhcENvbXBvbmVudHMubGVuZ3RoPjApdC5fYm9vdHN0cmFwQ29tcG9uZW50cy5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gZS5ib290c3RyYXAodCl9KSk7ZWxzZXtpZighdC5pbnN0YW5jZS5uZ0RvQm9vdHN0cmFwKXRocm93IG5ldyBFcnJvcigiVGhlIG1vZHVsZSAiK3l0KHQuaW5zdGFuY2UuY29uc3RydWN0b3IpKycgd2FzIGJvb3RzdHJhcHBlZCwgYnV0IGl0IGRvZXMgbm90IGRlY2xhcmUgIkBOZ01vZHVsZS5ib290c3RyYXAiIGNvbXBvbmVudHMgbm9yIGEgIm5nRG9Cb290c3RyYXAiIG1ldGhvZC4gUGxlYXNlIGRlZmluZSBvbmUgb2YgdGhlc2UuJyk7dC5pbnN0YW5jZS5uZ0RvQm9vdHN0cmFwKGUpfXRoaXMuX21vZHVsZXMucHVzaCh0KX0sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMucHVzaCh0KX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpbmplY3RvciIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbmplY3Rvcn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7aWYodGhpcy5fZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiVGhlIHBsYXRmb3JtIGhhcyBhbHJlYWR5IGJlZW4gZGVzdHJveWVkISIpO3RoaXMuX21vZHVsZXMuc2xpY2UoKS5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kZXN0cm95KCl9KSksdGhpcy5fZGVzdHJveUxpc3RlbmVycy5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSkpLHRoaXMuX2Rlc3Ryb3llZD0hMH0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHR9KCk7ZnVuY3Rpb24gbWkodCxlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lLnJlZHVjZShtaSx0KTpPYmplY3Qoci5fX2Fzc2lnbikoe30sdCxlKX12YXIgX2k9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsbyxpKXt2YXIgYT10aGlzO3RoaXMuX3pvbmU9dCx0aGlzLl9jb25zb2xlPWUsdGhpcy5faW5qZWN0b3I9bix0aGlzLl9leGNlcHRpb25IYW5kbGVyPXIsdGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPW8sdGhpcy5faW5pdFN0YXR1cz1pLHRoaXMuX2Jvb3RzdHJhcExpc3RlbmVycz1bXSx0aGlzLl92aWV3cz1bXSx0aGlzLl9ydW5uaW5nVGljaz0hMSx0aGlzLl9lbmZvcmNlTm9OZXdDaGFuZ2VzPSExLHRoaXMuX3N0YWJsZT0hMCx0aGlzLmNvbXBvbmVudFR5cGVzPVtdLHRoaXMuY29tcG9uZW50cz1bXSx0aGlzLl9lbmZvcmNlTm9OZXdDaGFuZ2VzPWVlKCksdGhpcy5fem9uZS5vbk1pY3JvdGFza0VtcHR5LnN1YnNjcmliZSh7bmV4dDpmdW5jdGlvbigpe2EuX3pvbmUucnVuKChmdW5jdGlvbigpe2EudGljaygpfSkpfX0pO3ZhciB1PW5ldyB4KChmdW5jdGlvbih0KXthLl9zdGFibGU9YS5fem9uZS5pc1N0YWJsZSYmIWEuX3pvbmUuaGFzUGVuZGluZ01hY3JvdGFza3MmJiFhLl96b25lLmhhc1BlbmRpbmdNaWNyb3Rhc2tzLGEuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKGZ1bmN0aW9uKCl7dC5uZXh0KGEuX3N0YWJsZSksdC5jb21wbGV0ZSgpfSkpfSkpLGw9bmV3IHgoKGZ1bmN0aW9uKHQpe3ZhciBlO2EuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKGZ1bmN0aW9uKCl7ZT1hLl96b25lLm9uU3RhYmxlLnN1YnNjcmliZSgoZnVuY3Rpb24oKXtuaS5hc3NlcnROb3RJbkFuZ3VsYXJab25lKCksZWkoKGZ1bmN0aW9uKCl7YS5fc3RhYmxlfHxhLl96b25lLmhhc1BlbmRpbmdNYWNyb3Rhc2tzfHxhLl96b25lLmhhc1BlbmRpbmdNaWNyb3Rhc2tzfHwoYS5fc3RhYmxlPSEwLHQubmV4dCghMCkpfSkpfSkpfSkpO3ZhciBuPWEuX3pvbmUub25VbnN0YWJsZS5zdWJzY3JpYmUoKGZ1bmN0aW9uKCl7bmkuYXNzZXJ0SW5Bbmd1bGFyWm9uZSgpLGEuX3N0YWJsZSYmKGEuX3N0YWJsZT0hMSxhLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKChmdW5jdGlvbigpe3QubmV4dCghMSl9KSkpfSkpO3JldHVybiBmdW5jdGlvbigpe2UudW5zdWJzY3JpYmUoKSxuLnVuc3Vic2NyaWJlKCl9fSkpO3RoaXMuaXNTdGFibGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07dmFyIG49TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHI9bnVsbCxvPXRbdC5sZW5ndGgtMV07cmV0dXJuIEEobyk/KHI9dC5wb3AoKSx0Lmxlbmd0aD4xJiYibnVtYmVyIj09dHlwZW9mIHRbdC5sZW5ndGgtMV0mJihuPXQucG9wKCkpKToibnVtYmVyIj09dHlwZW9mIG8mJihuPXQucG9wKCkpLG51bGw9PT1yJiYxPT09dC5sZW5ndGgmJnRbMF1pbnN0YW5jZW9mIHg/dFswXTokKG4pKHEodCxyKSl9KHUsbC5waXBlKChmdW5jdGlvbih0KXtyZXR1cm4gWCgpKChlPWl0LGZ1bmN0aW9uKHQpe3ZhciBuO249ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpmdW5jdGlvbigpe3JldHVybiBlfTt2YXIgcj1PYmplY3QuY3JlYXRlKHQscnQpO3JldHVybiByLnNvdXJjZT10LHIuc3ViamVjdEZhY3Rvcnk9bixyfSkodCkpO3ZhciBlfSkpKX12YXIgZTtyZXR1cm4gZT10LHQucHJvdG90eXBlLmJvb3RzdHJhcD1mdW5jdGlvbih0LGUpe3ZhciBuLHI9dGhpcztpZighdGhpcy5faW5pdFN0YXR1cy5kb25lKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGJvb3RzdHJhcCBhcyB0aGVyZSBhcmUgc3RpbGwgYXN5bmNocm9ub3VzIGluaXRpYWxpemVycyBydW5uaW5nLiBCb290c3RyYXAgY29tcG9uZW50cyBpbiB0aGUgYG5nRG9Cb290c3RyYXBgIG1ldGhvZCBvZiB0aGUgcm9vdCBtb2R1bGUuIik7bj10IGluc3RhbmNlb2YgWGU/dDp0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodCksdGhpcy5jb21wb25lbnRUeXBlcy5wdXNoKG4uY29tcG9uZW50VHlwZSk7dmFyIG89biBpbnN0YW5jZW9mIGFuP251bGw6dGhpcy5faW5qZWN0b3IuZ2V0KEh0KSxpPW4uY3JlYXRlKE1lLk5VTEwsW10sZXx8bi5zZWxlY3RvcixvKTtpLm9uRGVzdHJveSgoZnVuY3Rpb24oKXtyLl91bmxvYWRDb21wb25lbnQoaSl9KSk7dmFyIGE9aS5pbmplY3Rvci5nZXQoY2ksbnVsbCk7cmV0dXJuIGEmJmkuaW5qZWN0b3IuZ2V0KGZpKS5yZWdpc3RlckFwcGxpY2F0aW9uKGkubG9jYXRpb24ubmF0aXZlRWxlbWVudCxhKSx0aGlzLl9sb2FkQ29tcG9uZW50KGkpLGVlKCkmJnRoaXMuX2NvbnNvbGUubG9nKCJBbmd1bGFyIGlzIHJ1bm5pbmcgaW4gdGhlIGRldmVsb3BtZW50IG1vZGUuIENhbGwgZW5hYmxlUHJvZE1vZGUoKSB0byBlbmFibGUgdGhlIHByb2R1Y3Rpb24gbW9kZS4iKSxpfSx0LnByb3RvdHlwZS50aWNrPWZ1bmN0aW9uKCl7dmFyIHQsbixvLGksYT10aGlzO2lmKHRoaXMuX3J1bm5pbmdUaWNrKXRocm93IG5ldyBFcnJvcigiQXBwbGljYXRpb25SZWYudGljayBpcyBjYWxsZWQgcmVjdXJzaXZlbHkiKTt2YXIgdT1lLl90aWNrU2NvcGUoKTt0cnl7dGhpcy5fcnVubmluZ1RpY2s9ITA7dHJ5e2Zvcih2YXIgbD1PYmplY3Qoci5fX3ZhbHVlcykodGhpcy5fdmlld3MpLHM9bC5uZXh0KCk7IXMuZG9uZTtzPWwubmV4dCgpKXMudmFsdWUuZGV0ZWN0Q2hhbmdlcygpfWNhdGNoKGgpe3Q9e2Vycm9yOmh9fWZpbmFsbHl7dHJ5e3MmJiFzLmRvbmUmJihuPWwucmV0dXJuKSYmbi5jYWxsKGwpfWZpbmFsbHl7aWYodCl0aHJvdyB0LmVycm9yfX1pZih0aGlzLl9lbmZvcmNlTm9OZXdDaGFuZ2VzKXRyeXtmb3IodmFyIGM9T2JqZWN0KHIuX192YWx1ZXMpKHRoaXMuX3ZpZXdzKSxmPWMubmV4dCgpOyFmLmRvbmU7Zj1jLm5leHQoKSlmLnZhbHVlLmNoZWNrTm9DaGFuZ2VzKCl9Y2F0Y2gocCl7bz17ZXJyb3I6cH19ZmluYWxseXt0cnl7ZiYmIWYuZG9uZSYmKGk9Yy5yZXR1cm4pJiZpLmNhbGwoYyl9ZmluYWxseXtpZihvKXRocm93IG8uZXJyb3J9fX1jYXRjaChkKXt0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKChmdW5jdGlvbigpe3JldHVybiBhLl9leGNlcHRpb25IYW5kbGVyLmhhbmRsZUVycm9yKGQpfSkpfWZpbmFsbHl7dGhpcy5fcnVubmluZ1RpY2s9ITEsWG8odSl9fSx0LnByb3RvdHlwZS5hdHRhY2hWaWV3PWZ1bmN0aW9uKHQpe3ZhciBlPXQ7dGhpcy5fdmlld3MucHVzaChlKSxlLmF0dGFjaFRvQXBwUmVmKHRoaXMpfSx0LnByb3RvdHlwZS5kZXRhY2hWaWV3PWZ1bmN0aW9uKHQpe3ZhciBlPXQ7d2kodGhpcy5fdmlld3MsZSksZS5kZXRhY2hGcm9tQXBwUmVmKCl9LHQucHJvdG90eXBlLl9sb2FkQ29tcG9uZW50PWZ1bmN0aW9uKHQpe3RoaXMuYXR0YWNoVmlldyh0Lmhvc3RWaWV3KSx0aGlzLnRpY2soKSx0aGlzLmNvbXBvbmVudHMucHVzaCh0KSx0aGlzLl9pbmplY3Rvci5nZXQoRG8sW10pLmNvbmNhdCh0aGlzLl9ib290c3RyYXBMaXN0ZW5lcnMpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlKHQpfSkpfSx0LnByb3RvdHlwZS5fdW5sb2FkQ29tcG9uZW50PWZ1bmN0aW9uKHQpe3RoaXMuZGV0YWNoVmlldyh0Lmhvc3RWaWV3KSx3aSh0aGlzLmNvbXBvbmVudHMsdCl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fdmlld3Muc2xpY2UoKS5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kZXN0cm95KCl9KSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwidmlld0NvdW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZpZXdzLmxlbmd0aH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0Ll90aWNrU2NvcGU9JG8oIkFwcGxpY2F0aW9uUmVmI3RpY2soKSIpLHR9KCk7ZnVuY3Rpb24gd2kodCxlKXt2YXIgbj10LmluZGV4T2YoZSk7bj4tMSYmdC5zcGxpY2UobiwxKX12YXIgYmk9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXt9fSgpLHhpPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7fX0oKSxDaT17ZmFjdG9yeVBhdGhQcmVmaXg6IiIsZmFjdG9yeVBhdGhTdWZmaXg6Ii5uZ2ZhY3RvcnkifSxTaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl9jb21waWxlcj10LHRoaXMuX2NvbmZpZz1lfHxDaX1yZXR1cm4gdC5wcm90b3R5cGUubG9hZD1mdW5jdGlvbih0KXtyZXR1cm4hVm8mJnRoaXMuX2NvbXBpbGVyIGluc3RhbmNlb2YgV28/dGhpcy5sb2FkRmFjdG9yeSh0KTp0aGlzLmxvYWRBbmRDb21waWxlKHQpfSx0LnByb3RvdHlwZS5sb2FkQW5kQ29tcGlsZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG89T2JqZWN0KHIuX19yZWFkKSh0LnNwbGl0KCIjIiksMiksaT1vWzBdLGE9b1sxXTtyZXR1cm4gdm9pZCAwPT09YSYmKGE9ImRlZmF1bHQiKSxuKCJ6bjhQIikoaSkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHRbYV19KSkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIEVpKHQsaSxhKX0pKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gZS5fY29tcGlsZXIuY29tcGlsZU1vZHVsZUFzeW5jKHQpfSkpfSx0LnByb3RvdHlwZS5sb2FkRmFjdG9yeT1mdW5jdGlvbih0KXt2YXIgZT1PYmplY3Qoci5fX3JlYWQpKHQuc3BsaXQoIiMiKSwyKSxvPWVbMF0saT1lWzFdLGE9Ik5nRmFjdG9yeSI7cmV0dXJuIHZvaWQgMD09PWkmJihpPSJkZWZhdWx0IixhPSIiKSxuKCJ6bjhQIikodGhpcy5fY29uZmlnLmZhY3RvcnlQYXRoUHJlZml4K28rdGhpcy5fY29uZmlnLmZhY3RvcnlQYXRoU3VmZml4KS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gdFtpK2FdfSkpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiBFaSh0LG8saSl9KSl9LHR9KCk7ZnVuY3Rpb24gRWkodCxlLG4pe2lmKCF0KXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgJyIrbisiJyBpbiAnIitlKyInIik7cmV0dXJuIHR9dmFyIE9pPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dGhpcy5uYW1lPXQsdGhpcy5jYWxsYmFjaz1lfX0oKSxUaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMubGlzdGVuZXJzPVtdLHRoaXMucGFyZW50PW51bGwsdGhpcy5fZGVidWdDb250ZXh0PW4sdGhpcy5uYXRpdmVOb2RlPXQsZSYmZSBpbnN0YW5jZW9mIFBpJiZlLmFkZENoaWxkKHRoaXMpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImluamVjdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnQ29udGV4dC5pbmplY3Rvcn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNvbXBvbmVudEluc3RhbmNlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnQ29udGV4dC5jb21wb25lbnR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb250ZXh0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnQ29udGV4dC5jb250ZXh0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicmVmZXJlbmNlcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWJ1Z0NvbnRleHQucmVmZXJlbmNlc30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInByb3ZpZGVyVG9rZW5zIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnQ29udGV4dC5wcm92aWRlclRva2Vuc30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0fSgpLFBpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBvPXQuY2FsbCh0aGlzLGUsbixyKXx8dGhpcztyZXR1cm4gby5wcm9wZXJ0aWVzPXt9LG8uYXR0cmlidXRlcz17fSxvLmNsYXNzZXM9e30sby5zdHlsZXM9e30sby5jaGlsZE5vZGVzPVtdLG8ubmF0aXZlRWxlbWVudD1lLG99cmV0dXJuIE9iamVjdChyLl9fZXh0ZW5kcykoZSx0KSxlLnByb3RvdHlwZS5hZGRDaGlsZD1mdW5jdGlvbih0KXt0JiYodGhpcy5jaGlsZE5vZGVzLnB1c2godCksdC5wYXJlbnQ9dGhpcyl9LGUucHJvdG90eXBlLnJlbW92ZUNoaWxkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY2hpbGROb2Rlcy5pbmRleE9mKHQpOy0xIT09ZSYmKHQucGFyZW50PW51bGwsdGhpcy5jaGlsZE5vZGVzLnNwbGljZShlLDEpKX0sZS5wcm90b3R5cGUuaW5zZXJ0Q2hpbGRyZW5BZnRlcj1mdW5jdGlvbih0LGUpe3ZhciBuLG89dGhpcyxpPXRoaXMuY2hpbGROb2Rlcy5pbmRleE9mKHQpOy0xIT09aSYmKChuPXRoaXMuY2hpbGROb2Rlcykuc3BsaWNlLmFwcGx5KG4sT2JqZWN0KHIuX19zcHJlYWQpKFtpKzEsMF0sZSkpLGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5wYXJlbnQmJmUucGFyZW50LnJlbW92ZUNoaWxkKGUpLHQucGFyZW50PW99KSkpfSxlLnByb3RvdHlwZS5pbnNlcnRCZWZvcmU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLmNoaWxkTm9kZXMuaW5kZXhPZih0KTstMT09PW4/dGhpcy5hZGRDaGlsZChlKTooZS5wYXJlbnQmJmUucGFyZW50LnJlbW92ZUNoaWxkKGUpLGUucGFyZW50PXRoaXMsdGhpcy5jaGlsZE5vZGVzLnNwbGljZShuLDAsZSkpfSxlLnByb3RvdHlwZS5xdWVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5xdWVyeUFsbCh0KVswXXx8bnVsbH0sZS5wcm90b3R5cGUucXVlcnlBbGw9ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIGZ1bmN0aW9uIHQoZSxuLHIpe2UuY2hpbGROb2Rlcy5mb3JFYWNoKChmdW5jdGlvbihlKXtlIGluc3RhbmNlb2YgUGkmJihuKGUpJiZyLnB1c2goZSksdChlLG4scikpfSkpfSh0aGlzLHQsZSksZX0sZS5wcm90b3R5cGUucXVlcnlBbGxOb2Rlcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gZnVuY3Rpb24gdChlLG4scil7ZSBpbnN0YW5jZW9mIFBpJiZlLmNoaWxkTm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7bihlKSYmci5wdXNoKGUpLGUgaW5zdGFuY2VvZiBQaSYmdChlLG4scil9KSl9KHRoaXMsdCxlKSxlfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImNoaWxkcmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGROb2Rlcy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgZX0pKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS50cmlnZ2VyRXZlbnRIYW5kbGVyPWZ1bmN0aW9uKHQsZSl7dGhpcy5saXN0ZW5lcnMuZm9yRWFjaCgoZnVuY3Rpb24obil7bi5uYW1lPT10JiZuLmNhbGxiYWNrKGUpfSkpfSxlfShUaSksa2k9bmV3IE1hcCxBaT1mdW5jdGlvbih0KXtyZXR1cm4ga2kuZ2V0KHQpfHxudWxsfTtmdW5jdGlvbiBJaSh0KXtraS5zZXQodC5uYXRpdmVOb2RlLHQpfXZhciBSaT1naShudWxsLCJjb3JlIixbe3Byb3ZpZGU6Tm8sdXNlVmFsdWU6InVua25vd24ifSx7cHJvdmlkZTp5aSxkZXBzOltNZV19LHtwcm92aWRlOmZpLGRlcHM6W119LHtwcm92aWRlOlVvLGRlcHM6W119XSk7ZnVuY3Rpb24gTWkoKXtyZXR1cm4ga259ZnVuY3Rpb24gamkoKXtyZXR1cm4gQW59ZnVuY3Rpb24gTmkodCl7cmV0dXJuIHQ/KFZvJiZFbyh0KSx0KTpTb31mdW5jdGlvbiBEaSh0KXt2YXIgZT1bXTtyZXR1cm4gdC5vblN0YWJsZS5zdWJzY3JpYmUoKGZ1bmN0aW9uKCl7Zm9yKDtlLmxlbmd0aDspZS5wb3AoKSgpfSkpLGZ1bmN0aW9uKHQpe2UucHVzaCh0KX19dmFyIFVpPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe319KCk7ZnVuY3Rpb24gTGkodCxlLG4scixvLGkpe3R8PTE7dmFyIGE9Y3IoZSk7cmV0dXJue25vZGVJbmRleDotMSxwYXJlbnQ6bnVsbCxyZW5kZXJQYXJlbnQ6bnVsbCxiaW5kaW5nSW5kZXg6LTEsb3V0cHV0SW5kZXg6LTEsZmxhZ3M6dCxjaGVja0luZGV4Oi0xLGNoaWxkRmxhZ3M6MCxkaXJlY3RDaGlsZEZsYWdzOjAsY2hpbGRNYXRjaGVkUXVlcmllczowLG1hdGNoZWRRdWVyaWVzOmEubWF0Y2hlZFF1ZXJpZXMsbWF0Y2hlZFF1ZXJ5SWRzOmEubWF0Y2hlZFF1ZXJ5SWRzLHJlZmVyZW5jZXM6YS5yZWZlcmVuY2VzLG5nQ29udGVudEluZGV4Om4sY2hpbGRDb3VudDpyLGJpbmRpbmdzOltdLGJpbmRpbmdGbGFnczowLG91dHB1dHM6W10sZWxlbWVudDp7bnM6bnVsbCxuYW1lOm51bGwsYXR0cnM6bnVsbCx0ZW1wbGF0ZTppP2RyKGkpOm51bGwsY29tcG9uZW50UHJvdmlkZXI6bnVsbCxjb21wb25lbnRWaWV3Om51bGwsY29tcG9uZW50UmVuZGVyZXJUeXBlOm51bGwscHVibGljUHJvdmlkZXJzOm51bGwsYWxsUHJvdmlkZXJzOm51bGwsaGFuZGxlRXZlbnQ6b3x8cW59LHByb3ZpZGVyOm51bGwsdGV4dDpudWxsLHF1ZXJ5Om51bGwsbmdDb250ZW50Om51bGx9fWZ1bmN0aW9uIFZpKHQsZSxuLG8saSxhLHUsbCxzLGMsZixoKXt2YXIgcDt2b2lkIDA9PT11JiYodT1bXSksY3x8KGM9cW4pO3ZhciBkPWNyKG4pLGc9ZC5tYXRjaGVkUXVlcmllcyx2PWQucmVmZXJlbmNlcyx5PWQubWF0Y2hlZFF1ZXJ5SWRzLG09bnVsbCxfPW51bGw7YSYmKG09KHA9T2JqZWN0KHIuX19yZWFkKShicihhKSwyKSlbMF0sXz1wWzFdKSxsPWx8fFtdO2Zvcih2YXIgdz1uZXcgQXJyYXkobC5sZW5ndGgpLGI9MDtiPGwubGVuZ3RoO2IrKyl7dmFyIHg9T2JqZWN0KHIuX19yZWFkKShsW2JdLDMpLEM9eFswXSxTPXhbMV0sRT14WzJdLE89T2JqZWN0KHIuX19yZWFkKShicihTKSwyKSxUPU9bMF0sUD1PWzFdLGs9dm9pZCAwLEE9dm9pZCAwO3N3aXRjaCgxNSZDKXtjYXNlIDQ6QT1FO2JyZWFrO2Nhc2UgMTpjYXNlIDg6az1FfXdbYl09e2ZsYWdzOkMsbnM6VCxuYW1lOlAsbm9uTWluaWZpZWROYW1lOlAsc2VjdXJpdHlDb250ZXh0Omssc3VmZml4OkF9fXM9c3x8W107dmFyIEk9bmV3IEFycmF5KHMubGVuZ3RoKTtmb3IoYj0wO2I8cy5sZW5ndGg7YisrKXt2YXIgUj1PYmplY3Qoci5fX3JlYWQpKHNbYl0sMik7SVtiXT17dHlwZTowLHRhcmdldDpSWzBdLGV2ZW50TmFtZTpSWzFdLHByb3BOYW1lOm51bGx9fXZhciBNPSh1PXV8fFtdKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdChyLl9fcmVhZCkodCwyKSxuPWVbMF0sbz1lWzFdLGk9T2JqZWN0KHIuX19yZWFkKShicihuKSwyKTtyZXR1cm5baVswXSxpWzFdLG9dfSkpO3JldHVybiBoPWZ1bmN0aW9uKHQpe2lmKHQmJnQuaWQ9PT1Lbil7dmFyIGU9bnVsbCE9dC5lbmNhcHN1bGF0aW9uJiZ0LmVuY2Fwc3VsYXRpb24hPT1adC5Ob25lfHx0LnN0eWxlcy5sZW5ndGh8fE9iamVjdC5rZXlzKHQuZGF0YSkubGVuZ3RoO3QuaWQ9ZT8iYyIrJG4rKzpZbn1yZXR1cm4gdCYmdC5pZD09PVluJiYodD1udWxsKSx0fHxudWxsfShoKSxmJiYoZXw9MzM1NTQ0MzIpLHtub2RlSW5kZXg6LTEscGFyZW50Om51bGwscmVuZGVyUGFyZW50Om51bGwsYmluZGluZ0luZGV4Oi0xLG91dHB1dEluZGV4Oi0xLGNoZWNrSW5kZXg6dCxmbGFnczplfD0xLGNoaWxkRmxhZ3M6MCxkaXJlY3RDaGlsZEZsYWdzOjAsY2hpbGRNYXRjaGVkUXVlcmllczowLG1hdGNoZWRRdWVyaWVzOmcsbWF0Y2hlZFF1ZXJ5SWRzOnkscmVmZXJlbmNlczp2LG5nQ29udGVudEluZGV4Om8sY2hpbGRDb3VudDppLGJpbmRpbmdzOncsYmluZGluZ0ZsYWdzOnhyKHcpLG91dHB1dHM6SSxlbGVtZW50OntuczptLG5hbWU6XyxhdHRyczpNLHRlbXBsYXRlOm51bGwsY29tcG9uZW50UHJvdmlkZXI6bnVsbCxjb21wb25lbnRWaWV3OmZ8fG51bGwsY29tcG9uZW50UmVuZGVyZXJUeXBlOmgscHVibGljUHJvdmlkZXJzOm51bGwsYWxsUHJvdmlkZXJzOm51bGwsaGFuZGxlRXZlbnQ6Y3x8cW59LHByb3ZpZGVyOm51bGwsdGV4dDpudWxsLHF1ZXJ5Om51bGwsbmdDb250ZW50Om51bGx9fWZ1bmN0aW9uIEhpKHQsZSxuKXt2YXIgbyxpPW4uZWxlbWVudCxhPXQucm9vdC5zZWxlY3Rvck9yTm9kZSx1PXQucmVuZGVyZXI7aWYodC5wYXJlbnR8fCFhKXtvPWkubmFtZT91LmNyZWF0ZUVsZW1lbnQoaS5uYW1lLGkubnMpOnUuY3JlYXRlQ29tbWVudCgiIik7dmFyIGw9aHIodCxlLG4pO2wmJnUuYXBwZW5kQ2hpbGQobCxvKX1lbHNlIG89dS5zZWxlY3RSb290RWxlbWVudChhLCEhaS5jb21wb25lbnRSZW5kZXJlclR5cGUmJmkuY29tcG9uZW50UmVuZGVyZXJUeXBlLmVuY2Fwc3VsYXRpb249PT1adC5TaGFkb3dEb20pO2lmKGkuYXR0cnMpZm9yKHZhciBzPTA7czxpLmF0dHJzLmxlbmd0aDtzKyspe3ZhciBjPU9iamVjdChyLl9fcmVhZCkoaS5hdHRyc1tzXSwzKTt1LnNldEF0dHJpYnV0ZShvLGNbMV0sY1syXSxjWzBdKX1yZXR1cm4gb31mdW5jdGlvbiB6aSh0LGUsbixyKXtmb3IodmFyIG89MDtvPG4ub3V0cHV0cy5sZW5ndGg7bysrKXt2YXIgaT1uLm91dHB1dHNbb10sYT1GaSh0LG4ubm9kZUluZGV4LChmPWkuZXZlbnROYW1lLChjPWkudGFyZ2V0KT9jKyI6IitmOmYpKSx1PWkudGFyZ2V0LGw9dDsiY29tcG9uZW50Ij09PWkudGFyZ2V0JiYodT1udWxsLGw9ZSk7dmFyIHM9bC5yZW5kZXJlci5saXN0ZW4odXx8cixpLmV2ZW50TmFtZSxhKTt0LmRpc3Bvc2FibGVzW24ub3V0cHV0SW5kZXgrb109c312YXIgYyxmfWZ1bmN0aW9uIEZpKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIG9yKHQsZSxuLHIpfX1mdW5jdGlvbiBCaSh0LGUsbixyKXtpZighdHIodCxlLG4scikpcmV0dXJuITE7dmFyIG89ZS5iaW5kaW5nc1tuXSxpPXpuKHQsZS5ub2RlSW5kZXgpLGE9aS5yZW5kZXJFbGVtZW50LHU9by5uYW1lO3N3aXRjaCgxNSZvLmZsYWdzKXtjYXNlIDE6IWZ1bmN0aW9uKHQsZSxuLHIsbyxpKXt2YXIgYT1lLnNlY3VyaXR5Q29udGV4dCx1PWE/dC5yb290LnNhbml0aXplci5zYW5pdGl6ZShhLGkpOmk7dT1udWxsIT11P3UudG9TdHJpbmcoKTpudWxsO3ZhciBsPXQucmVuZGVyZXI7bnVsbCE9aT9sLnNldEF0dHJpYnV0ZShuLG8sdSxyKTpsLnJlbW92ZUF0dHJpYnV0ZShuLG8scil9KHQsbyxhLG8ubnMsdSxyKTticmVhaztjYXNlIDI6IWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvPXQucmVuZGVyZXI7cj9vLmFkZENsYXNzKGUsbik6by5yZW1vdmVDbGFzcyhlLG4pfSh0LGEsdSxyKTticmVhaztjYXNlIDQ6IWZ1bmN0aW9uKHQsZSxuLHIsbyl7dmFyIGk9dC5yb290LnNhbml0aXplci5zYW5pdGl6ZShDZS5TVFlMRSxvKTtpZihudWxsIT1pKXtpPWkudG9TdHJpbmcoKTt2YXIgYT1lLnN1ZmZpeDtudWxsIT1hJiYoaSs9YSl9ZWxzZSBpPW51bGw7dmFyIHU9dC5yZW5kZXJlcjtudWxsIT1pP3Uuc2V0U3R5bGUobixyLGkpOnUucmVtb3ZlU3R5bGUobixyKX0odCxvLGEsdSxyKTticmVhaztjYXNlIDg6IWZ1bmN0aW9uKHQsZSxuLHIsbyl7dmFyIGk9ZS5zZWN1cml0eUNvbnRleHQsYT1pP3Qucm9vdC5zYW5pdGl6ZXIuc2FuaXRpemUoaSxvKTpvO3QucmVuZGVyZXIuc2V0UHJvcGVydHkobixyLGEpfSgzMzU1NDQzMiZlLmZsYWdzJiYzMiZvLmZsYWdzP2kuY29tcG9uZW50Vmlldzp0LG8sYSx1LHIpfXJldHVybiEwfWZ1bmN0aW9uIFppKHQpe2Zvcih2YXIgZT10LmRlZi5ub2RlTWF0Y2hlZFF1ZXJpZXM7dC5wYXJlbnQmJnNyKHQpOyl7dmFyIG49dC5wYXJlbnROb2RlRGVmO3Q9dC5wYXJlbnQ7Zm9yKHZhciByPW4ubm9kZUluZGV4K24uY2hpbGRDb3VudCxvPTA7bzw9cjtvKyspNjcxMDg4NjQmKGk9dC5kZWYubm9kZXNbb10pLmZsYWdzJiY1MzY4NzA5MTImaS5mbGFncyYmKGkucXVlcnkuZmlsdGVySWQmZSk9PT1pLnF1ZXJ5LmZpbHRlcklkJiZabih0LG8pLnNldERpcnR5KCksISgxJmkuZmxhZ3MmJm8raS5jaGlsZENvdW50PG4ubm9kZUluZGV4KSYmNjcxMDg4NjQmaS5jaGlsZEZsYWdzJiY1MzY4NzA5MTImaS5jaGlsZEZsYWdzfHwobys9aS5jaGlsZENvdW50KX1pZigxMzQyMTc3MjgmdC5kZWYubm9kZUZsYWdzKWZvcihvPTA7bzx0LmRlZi5ub2Rlcy5sZW5ndGg7bysrKXt2YXIgaTsxMzQyMTc3MjgmKGk9dC5kZWYubm9kZXNbb10pLmZsYWdzJiY1MzY4NzA5MTImaS5mbGFncyYmWm4odCxvKS5zZXREaXJ0eSgpLG8rPWkuY2hpbGRDb3VudH19ZnVuY3Rpb24gR2kodCxlKXt2YXIgbj1abih0LGUubm9kZUluZGV4KTtpZihuLmRpcnR5KXt2YXIgcixvPXZvaWQgMDtpZig2NzEwODg2NCZlLmZsYWdzKXt2YXIgaT1lLnBhcmVudC5wYXJlbnQ7bz1xaSh0LGkubm9kZUluZGV4LGkubm9kZUluZGV4K2kuY2hpbGRDb3VudCxlLnF1ZXJ5LFtdKSxyPUZuKHQsZS5wYXJlbnQubm9kZUluZGV4KS5pbnN0YW5jZX1lbHNlIDEzNDIxNzcyOCZlLmZsYWdzJiYobz1xaSh0LDAsdC5kZWYubm9kZXMubGVuZ3RoLTEsZS5xdWVyeSxbXSkscj10LmNvbXBvbmVudCk7bi5yZXNldChvKTtmb3IodmFyIGE9ZS5xdWVyeS5iaW5kaW5ncyx1PSExLGw9MDtsPGEubGVuZ3RoO2wrKyl7dmFyIHM9YVtsXSxjPXZvaWQgMDtzd2l0Y2gocy5iaW5kaW5nVHlwZSl7Y2FzZSAwOmM9bi5maXJzdDticmVhaztjYXNlIDE6Yz1uLHU9ITB9cltzLnByb3BOYW1lXT1jfXUmJm4ubm90aWZ5T25DaGFuZ2VzKCl9fWZ1bmN0aW9uIHFpKHQsZSxuLHIsbyl7Zm9yKHZhciBpPWU7aTw9bjtpKyspe3ZhciBhPXQuZGVmLm5vZGVzW2ldLHU9YS5tYXRjaGVkUXVlcmllc1tyLmlkXTtpZihudWxsIT11JiZvLnB1c2goV2kodCxhLHUpKSwxJmEuZmxhZ3MmJmEuZWxlbWVudC50ZW1wbGF0ZSYmKGEuZWxlbWVudC50ZW1wbGF0ZS5ub2RlTWF0Y2hlZFF1ZXJpZXMmci5maWx0ZXJJZCk9PT1yLmZpbHRlcklkKXt2YXIgbD16bih0LGkpO2lmKChhLmNoaWxkTWF0Y2hlZFF1ZXJpZXMmci5maWx0ZXJJZCk9PT1yLmZpbHRlcklkJiYocWkodCxpKzEsaSthLmNoaWxkQ291bnQscixvKSxpKz1hLmNoaWxkQ291bnQpLDE2Nzc3MjE2JmEuZmxhZ3MpZm9yKHZhciBzPWwudmlld0NvbnRhaW5lci5fZW1iZWRkZWRWaWV3cyxjPTA7YzxzLmxlbmd0aDtjKyspe3ZhciBmPXNbY10saD1pcihmKTtoJiZoPT09bCYmcWkoZiwwLGYuZGVmLm5vZGVzLmxlbmd0aC0xLHIsbyl9dmFyIHA9bC50ZW1wbGF0ZS5fcHJvamVjdGVkVmlld3M7aWYocClmb3IoYz0wO2M8cC5sZW5ndGg7YysrKXt2YXIgZD1wW2NdO3FpKGQsMCxkLmRlZi5ub2Rlcy5sZW5ndGgtMSxyLG8pfX0oYS5jaGlsZE1hdGNoZWRRdWVyaWVzJnIuZmlsdGVySWQpIT09ci5maWx0ZXJJZCYmKGkrPWEuY2hpbGRDb3VudCl9cmV0dXJuIG99ZnVuY3Rpb24gV2kodCxlLG4pe2lmKG51bGwhPW4pc3dpdGNoKG4pe2Nhc2UgMTpyZXR1cm4gem4odCxlLm5vZGVJbmRleCkucmVuZGVyRWxlbWVudDtjYXNlIDA6cmV0dXJuIG5ldyBsbih6bih0LGUubm9kZUluZGV4KS5yZW5kZXJFbGVtZW50KTtjYXNlIDI6cmV0dXJuIHpuKHQsZS5ub2RlSW5kZXgpLnRlbXBsYXRlO2Nhc2UgMzpyZXR1cm4gem4odCxlLm5vZGVJbmRleCkudmlld0NvbnRhaW5lcjtjYXNlIDQ6cmV0dXJuIEZuKHQsZS5ub2RlSW5kZXgpLmluc3RhbmNlfX1mdW5jdGlvbiBRaSh0LGUsbil7dmFyIHI9aHIodCxlLG4pO3ImJnlyKHQsbi5uZ0NvbnRlbnQuaW5kZXgsMSxyLG51bGwsdm9pZCAwKX1mdW5jdGlvbiBLaSh0LGUsbil7Zm9yKHZhciByPW5ldyBBcnJheShuLmxlbmd0aC0xKSxvPTE7bzxuLmxlbmd0aDtvKyspcltvLTFdPXtmbGFnczo4LG5hbWU6bnVsbCxuczpudWxsLG5vbk1pbmlmaWVkTmFtZTpudWxsLHNlY3VyaXR5Q29udGV4dDpudWxsLHN1ZmZpeDpuW29dfTtyZXR1cm57bm9kZUluZGV4Oi0xLHBhcmVudDpudWxsLHJlbmRlclBhcmVudDpudWxsLGJpbmRpbmdJbmRleDotMSxvdXRwdXRJbmRleDotMSxjaGVja0luZGV4OnQsZmxhZ3M6MixjaGlsZEZsYWdzOjAsZGlyZWN0Q2hpbGRGbGFnczowLGNoaWxkTWF0Y2hlZFF1ZXJpZXM6MCxtYXRjaGVkUXVlcmllczp7fSxtYXRjaGVkUXVlcnlJZHM6MCxyZWZlcmVuY2VzOnt9LG5nQ29udGVudEluZGV4OmUsY2hpbGRDb3VudDowLGJpbmRpbmdzOnIsYmluZGluZ0ZsYWdzOjgsb3V0cHV0czpbXSxlbGVtZW50Om51bGwscHJvdmlkZXI6bnVsbCx0ZXh0OntwcmVmaXg6blswXX0scXVlcnk6bnVsbCxuZ0NvbnRlbnQ6bnVsbH19ZnVuY3Rpb24gWWkodCxlLG4pe3ZhciByLG89dC5yZW5kZXJlcjtyPW8uY3JlYXRlVGV4dChuLnRleHQucHJlZml4KTt2YXIgaT1ocih0LGUsbik7cmV0dXJuIGkmJm8uYXBwZW5kQ2hpbGQoaSxyKSx7cmVuZGVyVGV4dDpyfX1mdW5jdGlvbiBKaSh0LGUpe3JldHVybihudWxsIT10P3QudG9TdHJpbmcoKToiIikrZS5zdWZmaXh9ZnVuY3Rpb24gJGkodCxlLG4scil7Zm9yKHZhciBvPTAsaT0wLGE9MCx1PTAsbD0wLHM9bnVsbCxjPW51bGwsZj0hMSxoPSExLHA9bnVsbCxkPTA7ZDxlLmxlbmd0aDtkKyspe3ZhciBnPWVbZF07aWYoZy5ub2RlSW5kZXg9ZCxnLnBhcmVudD1zLGcuYmluZGluZ0luZGV4PW8sZy5vdXRwdXRJbmRleD1pLGcucmVuZGVyUGFyZW50PWMsYXw9Zy5mbGFncyxsfD1nLm1hdGNoZWRRdWVyeUlkcyxnLmVsZW1lbnQpe3ZhciB2PWcuZWxlbWVudDt2LnB1YmxpY1Byb3ZpZGVycz1zP3MuZWxlbWVudC5wdWJsaWNQcm92aWRlcnM6T2JqZWN0LmNyZWF0ZShudWxsKSx2LmFsbFByb3ZpZGVycz12LnB1YmxpY1Byb3ZpZGVycyxmPSExLGg9ITEsZy5lbGVtZW50LnRlbXBsYXRlJiYobHw9Zy5lbGVtZW50LnRlbXBsYXRlLm5vZGVNYXRjaGVkUXVlcmllcyl9aWYodGEocyxnLGUubGVuZ3RoKSxvKz1nLmJpbmRpbmdzLmxlbmd0aCxpKz1nLm91dHB1dHMubGVuZ3RoLCFjJiYzJmcuZmxhZ3MmJihwPWcpLDIwMjI0JmcuZmxhZ3Mpe2Z8fChmPSEwLHMuZWxlbWVudC5wdWJsaWNQcm92aWRlcnM9T2JqZWN0LmNyZWF0ZShzLmVsZW1lbnQucHVibGljUHJvdmlkZXJzKSxzLmVsZW1lbnQuYWxsUHJvdmlkZXJzPXMuZWxlbWVudC5wdWJsaWNQcm92aWRlcnMpO3ZhciB5PTAhPSgzMjc2OCZnLmZsYWdzKTswPT0oODE5MiZnLmZsYWdzKXx8eT9zLmVsZW1lbnQucHVibGljUHJvdmlkZXJzW1FuKGcucHJvdmlkZXIudG9rZW4pXT1nOihofHwoaD0hMCxzLmVsZW1lbnQuYWxsUHJvdmlkZXJzPU9iamVjdC5jcmVhdGUocy5lbGVtZW50LnB1YmxpY1Byb3ZpZGVycykpLHMuZWxlbWVudC5hbGxQcm92aWRlcnNbUW4oZy5wcm92aWRlci50b2tlbildPWcpLHkmJihzLmVsZW1lbnQuY29tcG9uZW50UHJvdmlkZXI9Zyl9aWYocz8ocy5jaGlsZEZsYWdzfD1nLmZsYWdzLHMuZGlyZWN0Q2hpbGRGbGFnc3w9Zy5mbGFncyxzLmNoaWxkTWF0Y2hlZFF1ZXJpZXN8PWcubWF0Y2hlZFF1ZXJ5SWRzLGcuZWxlbWVudCYmZy5lbGVtZW50LnRlbXBsYXRlJiYocy5jaGlsZE1hdGNoZWRRdWVyaWVzfD1nLmVsZW1lbnQudGVtcGxhdGUubm9kZU1hdGNoZWRRdWVyaWVzKSk6dXw9Zy5mbGFncyxnLmNoaWxkQ291bnQ+MClzPWcsWGkoZyl8fChjPWcpO2Vsc2UgZm9yKDtzJiZkPT09cy5ub2RlSW5kZXgrcy5jaGlsZENvdW50Oyl7dmFyIG09cy5wYXJlbnQ7bSYmKG0uY2hpbGRGbGFnc3w9cy5jaGlsZEZsYWdzLG0uY2hpbGRNYXRjaGVkUXVlcmllc3w9cy5jaGlsZE1hdGNoZWRRdWVyaWVzKSxjPShzPW0pJiZYaShzKT9zLnJlbmRlclBhcmVudDpzfX1yZXR1cm57ZmFjdG9yeTpudWxsLG5vZGVGbGFnczphLHJvb3ROb2RlRmxhZ3M6dSxub2RlTWF0Y2hlZFF1ZXJpZXM6bCxmbGFnczp0LG5vZGVzOmUsdXBkYXRlRGlyZWN0aXZlczpufHxxbix1cGRhdGVSZW5kZXJlcjpyfHxxbixoYW5kbGVFdmVudDpmdW5jdGlvbih0LG4scixvKXtyZXR1cm4gZVtuXS5lbGVtZW50LmhhbmRsZUV2ZW50KHQscixvKX0sYmluZGluZ0NvdW50Om8sb3V0cHV0Q291bnQ6aSxsYXN0UmVuZGVyUm9vdE5vZGU6cH19ZnVuY3Rpb24gWGkodCl7cmV0dXJuIDAhPSgxJnQuZmxhZ3MpJiZudWxsPT09dC5lbGVtZW50Lm5hbWV9ZnVuY3Rpb24gdGEodCxlLG4pe3ZhciByPWUuZWxlbWVudCYmZS5lbGVtZW50LnRlbXBsYXRlO2lmKHIpe2lmKCFyLmxhc3RSZW5kZXJSb290Tm9kZSl0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgU3RhdGU6IEVtYmVkZGVkIHRlbXBsYXRlcyB3aXRob3V0IG5vZGVzIGFyZSBub3QgYWxsb3dlZCEiKTtpZihyLmxhc3RSZW5kZXJSb290Tm9kZSYmMTY3NzcyMTYmci5sYXN0UmVuZGVyUm9vdE5vZGUuZmxhZ3MpdGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIFN0YXRlOiBMYXN0IHJvb3Qgbm9kZSBvZiBhIHRlbXBsYXRlIGNhbid0IGhhdmUgZW1iZWRkZWQgdmlld3MsIGF0IGluZGV4ICIrZS5ub2RlSW5kZXgrIiEiKX1pZigyMDIyNCZlLmZsYWdzJiYwPT0oMSYodD90LmZsYWdzOjApKSl0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgU3RhdGU6IFN0YXRpY1Byb3ZpZGVyL0RpcmVjdGl2ZSBub2RlcyBuZWVkIHRvIGJlIGNoaWxkcmVuIG9mIGVsZW1lbnRzIG9yIGFuY2hvcnMsIGF0IGluZGV4ICIrZS5ub2RlSW5kZXgrIiEiKTtpZihlLnF1ZXJ5KXtpZig2NzEwODg2NCZlLmZsYWdzJiYoIXR8fDA9PSgxNjM4NCZ0LmZsYWdzKSkpdGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIFN0YXRlOiBDb250ZW50IFF1ZXJ5IG5vZGVzIG5lZWQgdG8gYmUgY2hpbGRyZW4gb2YgZGlyZWN0aXZlcywgYXQgaW5kZXggIitlLm5vZGVJbmRleCsiISIpO2lmKDEzNDIxNzcyOCZlLmZsYWdzJiZ0KXRocm93IG5ldyBFcnJvcigiSWxsZWdhbCBTdGF0ZTogVmlldyBRdWVyeSBub2RlcyBoYXZlIHRvIGJlIHRvcCBsZXZlbCBub2RlcywgYXQgaW5kZXggIitlLm5vZGVJbmRleCsiISIpfWlmKGUuY2hpbGRDb3VudCl7dmFyIG89dD90Lm5vZGVJbmRleCt0LmNoaWxkQ291bnQ6bi0xO2lmKGUubm9kZUluZGV4PD1vJiZlLm5vZGVJbmRleCtlLmNoaWxkQ291bnQ+byl0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgU3RhdGU6IGNoaWxkQ291bnQgb2Ygbm9kZSBsZWFkcyBvdXRzaWRlIG9mIHBhcmVudCwgYXQgaW5kZXggIitlLm5vZGVJbmRleCsiISIpfX1mdW5jdGlvbiBlYSh0LGUsbixyKXt2YXIgbz1vYSh0LnJvb3QsdC5yZW5kZXJlcix0LGUsbik7cmV0dXJuIGlhKG8sdC5jb21wb25lbnQsciksYWEobyksb31mdW5jdGlvbiBuYSh0LGUsbil7dmFyIHI9b2EodCx0LnJlbmRlcmVyLG51bGwsbnVsbCxlKTtyZXR1cg=="
}

github/deemru/w8io/c3f4982 
3.18 ms