@filens/converter-client 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as u } from "./index-
|
|
1
|
+
import { t as u } from "./index-DAiLvyaW.js";
|
|
2
2
|
const V = "dmFyIE9hPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgSWE9KFNlLGtlLE1lKT0+a2UgaW4gU2U/T2EoU2Usa2Use2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOk1lfSk6U2Vba2VdPU1lO3ZhciBFZT0oU2Usa2UsTWUpPT5JYShTZSx0eXBlb2Yga2UhPSJzeW1ib2wiP2tlKyIiOmtlLE1lKTsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gU2UoZCl7cmV0dXJuIGQmJmQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGQsImRlZmF1bHQiKT9kLmRlZmF1bHQ6ZH1mdW5jdGlvbiBrZShkKXtpZihkLl9fZXNNb2R1bGUpcmV0dXJuIGQ7dmFyIGw9ZC5kZWZhdWx0O2lmKHR5cGVvZiBsPT0iZnVuY3Rpb24iKXt2YXIgYz1mdW5jdGlvbiB1KCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiB1P1JlZmxlY3QuY29uc3RydWN0KGwsYXJndW1lbnRzLHRoaXMuY29uc3RydWN0b3IpOmwuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjLnByb3RvdHlwZT1sLnByb3RvdHlwZX1lbHNlIGM9e307cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3Qua2V5cyhkKS5mb3JFYWNoKGZ1bmN0aW9uKHUpe3ZhciBtPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZCx1KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYyx1LG0uZ2V0P206e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGRbdV19fSl9KSxjfXZhciBNZT17ZXhwb3J0czp7fX0sTHI9e30sTnI9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsZGVmYXVsdDpMcn0pLEF0PWtlKE5yKTsoZnVuY3Rpb24oZCxsKXt2YXIgYz0oKCk9Pnt2YXIgdSxtPXR5cGVvZiBkb2N1bWVudDwidSI/KHU9ZG9jdW1lbnQuY3VycmVudFNjcmlwdCk9PW51bGw/dm9pZCAwOnUuc3JjOnZvaWQgMDtyZXR1cm4gdHlwZW9mIF9fZmlsZW5hbWU8InUiJiYobXx8KG09X19maWxlbmFtZSkpLGZ1bmN0aW9uKHc9e30pe3ZhciBQLHI9dyxTLEQ7bmV3IFByb21pc2UoKGUsdCk9PntTPWUsRD10fSk7dmFyIEM9dHlwZW9mIHdpbmRvdz09Im9iamVjdCIsYj10eXBlb2YgaW1wb3J0U2NyaXB0cz09ImZ1bmN0aW9uIiwkPXR5cGVvZiBwcm9jZXNzPT0ib2JqZWN0IiYmdHlwZW9mIHByb2Nlc3MudmVyc2lvbnM9PSJvYmplY3QiJiZ0eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlPT0ic3RyaW5nIixIPU9iamVjdC5hc3NpZ24oe30sciksWj0iLi90aGlzLnByb2dyYW0iLFI9IiI7ZnVuY3Rpb24gVihlKXtyZXR1cm4gci5sb2NhdGVGaWxlP3IubG9jYXRlRmlsZShlLFIpOlIrZX12YXIgSixsZSxRO2lmKCQpe3ZhciBmZT1BdCxtZT1BdDtSPV9fZGlybmFtZSsiLyIsSj0oZSx0KT0+KGU9T3QoZSk/bmV3IFVSTChlKTptZS5ub3JtYWxpemUoZSksZmUucmVhZEZpbGVTeW5jKGUsdD92b2lkIDA6InV0ZjgiKSksUT1lPT57dmFyIHQ9SihlLCEwKTtyZXR1cm4gdC5idWZmZXJ8fCh0PW5ldyBVaW50OEFycmF5KHQpKSx0fSxsZT0oZSx0LG4saT0hMCk9PntlPU90KGUpP25ldyBVUkwoZSk6bWUubm9ybWFsaXplKGUpLGZlLnJlYWRGaWxlKGUsaT92b2lkIDA6InV0ZjgiLChfLHMpPT57Xz9uKF8pOnQoaT9zLmJ1ZmZlcjpzKX0pfSwhci50aGlzUHJvZ3JhbSYmcHJvY2Vzcy5hcmd2Lmxlbmd0aD4xJiYoWj1wcm9jZXNzLmFyZ3ZbMV0ucmVwbGFjZSgvXFwvZywiLyIpKSxwcm9jZXNzLmFyZ3Yuc2xpY2UoMil9ZWxzZShDfHxiKSYmKGI/Uj1zZWxmLmxvY2F0aW9uLmhyZWY6dHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQuY3VycmVudFNjcmlwdCYmKFI9ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMpLG0mJihSPW0pLFIuc3RhcnRzV2l0aCgiYmxvYjoiKT9SPSIiOlI9Ui5zdWJzdHIoMCxSLnJlcGxhY2UoL1s/I10uKi8sIiIpLmxhc3RJbmRleE9mKCIvIikrMSksSj1lPT57dmFyIHQ9bmV3IFhNTEh0dHBSZXF1ZXN0O3JldHVybiB0Lm9wZW4oIkdFVCIsZSwhMSksdC5zZW5kKG51bGwpLHQucmVzcG9uc2VUZXh0fSxiJiYoUT1lPT57dmFyIHQ9bmV3IFhNTEh0dHBSZXF1ZXN0O3JldHVybiB0Lm9wZW4oIkdFVCIsZSwhMSksdC5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIix0LnNlbmQobnVsbCksbmV3IFVpbnQ4QXJyYXkodC5yZXNwb25zZSl9KSxsZT0oZSx0LG4pPT57aWYoT3QoZSkpe3ZhciBpPW5ldyBYTUxIdHRwUmVxdWVzdDtpLm9wZW4oIkdFVCIsZSwhMCksaS5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIixpLm9ubG9hZD0oKT0+e2lmKGkuc3RhdHVzPT0yMDB8fGkuc3RhdHVzPT0wJiZpLnJlc3BvbnNlKXt0KGkucmVzcG9uc2UpO3JldHVybn1uKCl9LGkub25lcnJvcj1uLGkuc2VuZChudWxsKTtyZXR1cm59ZmV0Y2goZSx7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pLnRoZW4oXz0+Xy5vaz9fLmFycmF5QnVmZmVyKCk6UHJvbWlzZS5yZWplY3QobmV3IEVycm9yKF8uc3RhdHVzKyIgOiAiK18udXJsKSkpLnRoZW4odCxuKX0pO3ZhciBoZT1yLnByaW50fHxjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLF9lPXIucHJpbnRFcnJ8fGNvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlKTtPYmplY3QuYXNzaWduKHIsSCksSD1udWxsLHIuYXJndW1lbnRzJiZyLmFyZ3VtZW50cyxyLnRoaXNQcm9ncmFtJiYoWj1yLnRoaXNQcm9ncmFtKSxyLnF1aXQmJnIucXVpdDt2YXIgY2U7ci53YXNtQmluYXJ5JiYoY2U9ci53YXNtQmluYXJ5KTt2YXIgZWUseGU9ITEsaixZLGdlLFVlLEYsTSxSZSxRZTtmdW5jdGlvbiBwZSgpe3ZhciBlPWVlLmJ1ZmZlcjtyLkhFQVA4PWo9bmV3IEludDhBcnJheShlKSxyLkhFQVAxNj1nZT1uZXcgSW50MTZBcnJheShlKSxyLkhFQVBVOD1ZPW5ldyBVaW50OEFycmF5KGUpLHIuSEVBUFUxNj1VZT1uZXcgVWludDE2QXJyYXkoZSksci5IRUFQMzI9Rj1uZXcgSW50MzJBcnJheShlKSxyLkhFQVBVMzI9TT1uZXcgVWludDMyQXJyYXkoZSksci5IRUFQRjMyPVJlPW5ldyBGbG9hdDMyQXJyYXkoZSksci5IRUFQRjY0PVFlPW5ldyBGbG9hdDY0QXJyYXkoZSl9dmFyIGZ0PVtdLGh0PVtdLEJlPVtdO2Z1bmN0aW9uIFRlKCl7aWYoci5wcmVSdW4pZm9yKHR5cGVvZiByLnByZVJ1bj09ImZ1bmN0aW9uIiYmKHIucHJlUnVuPVtyLnByZVJ1bl0pO3IucHJlUnVuLmxlbmd0aDspZXQoci5wcmVSdW4uc2hpZnQoKSk7SXQoZnQpfWZ1bmN0aW9uIGN0KCl7IXIubm9GU0luaXQmJiFvLmluaXQuaW5pdGlhbGl6ZWQmJm8uaW5pdCgpLG8uaWdub3JlUGVybWlzc2lvbnM9ITEsSXQoaHQpfWZ1bmN0aW9uIE9lKCl7aWYoci5wb3N0UnVuKWZvcih0eXBlb2Ygci5wb3N0UnVuPT0iZnVuY3Rpb24iJiYoci5wb3N0UnVuPVtyLnBvc3RSdW5dKTtyLnBvc3RSdW4ubGVuZ3RoOylkdChyLnBvc3RSdW4uc2hpZnQoKSk7SXQoQmUpfWZ1bmN0aW9uIGV0KGUpe2Z0LnVuc2hpZnQoZSl9ZnVuY3Rpb24gdHQoZSl7aHQudW5zaGlmdChlKX1mdW5jdGlvbiBkdChlKXtCZS51bnNoaWZ0KGUpfXZhciB2ZT0wLEllPW51bGw7ZnVuY3Rpb24gcWUoZSl7dmFyIHQ7dmUrKywodD1yLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMpPT1udWxsfHx0LmNhbGwocix2ZSl9ZnVuY3Rpb24gamUoZSl7dmFyIHQ7aWYodmUtLSwodD1yLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMpPT1udWxsfHx0LmNhbGwocix2ZSksdmU9PTAmJkllKXt2YXIgbj1JZTtJZT1udWxsLG4oKX19ZnVuY3Rpb24gRGUoZSl7dmFyIHQ7KHQ9ci5vbkFib3J0KT09bnVsbHx8dC5jYWxsKHIsZSksZT0iQWJvcnRlZCgiK2UrIikiLF9lKGUpLHhlPSEwLGUrPSIuIEJ1aWxkIHdpdGggLXNBU1NFUlRJT05TIGZvciBtb3JlIGluZm8uIjt2YXIgbj1uZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKGUpO3Rocm93IEQobiksbn12YXIgeG49ImRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCwiLFBuPWU9PmUuc3RhcnRzV2l0aCh4biksT3Q9ZT0+ZS5zdGFydHNXaXRoKCJmaWxlOi8vIik7ZnVuY3Rpb24gQW4oKXt2YXIgZT0ibGliaGVpZi53YXNtIjtyZXR1cm4gUG4oZSk/ZTpWKGUpfXZhciB1dDtmdW5jdGlvbiAkbihlKXtpZihlPT11dCYmY2UpcmV0dXJuIG5ldyBVaW50OEFycmF5KGNlKTtpZihRKXJldHVybiBRKGUpO3Rocm93J3N5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkOiB5b3UgY2FuIHByZWxvYWQgaXQgdG8gTW9kdWxlWyJ3YXNtQmluYXJ5Il0gbWFudWFsbHksIG9yIGVtY2MucHkgd2lsbCBkbyB0aGF0IGZvciB5b3Ugd2hlbiBnZW5lcmF0aW5nIEhUTUwgKGJ1dCBub3QgSlMpJ31mdW5jdGlvbiBGbihlLHQpe3ZhciBuLGk9JG4oZSk7bj1uZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGkpO3ZhciBfPW5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShuLHQpO3JldHVybltfLG5dfWZ1bmN0aW9uIFRuKCl7cmV0dXJue2E6Q2F9fWZ1bmN0aW9uIERuKCl7dmFyIGU9VG4oKTtmdW5jdGlvbiB0KGksXyl7cmV0dXJuIGE9aS5leHBvcnRzLGVlPWEuUSxwZSgpLCRyPWEuVCx0dChhLlIpLGplKCksYX1pZihxZSgpLHIuaW5zdGFudGlhdGVXYXNtKXRyeXtyZXR1cm4gci5pbnN0YW50aWF0ZVdhc20oZSx0KX1jYXRjaChpKXtfZShgTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogJHtpfWApLEQoaSl9dXR8fCh1dD1BbigpKTt2YXIgbj1Gbih1dCxlKTtyZXR1cm4gdChuWzBdKX12YXIgTyx0ZSxJdD1lPT57Zm9yKDtlLmxlbmd0aD4wOyllLnNoaWZ0KCkocil9O3Iubm9FeGl0UnVudGltZTt2YXIgZ3I9dHlwZW9mIFRleHREZWNvZGVyPCJ1Ij9uZXcgVGV4dERlY29kZXIoInV0ZjgiKTp2b2lkIDAsR2U9KGUsdCxuKT0+e2Zvcih2YXIgaT10K24sXz10O2VbX10mJiEoXz49aSk7KSsrXztpZihfLXQ+MTYmJmUuYnVmZmVyJiZncilyZXR1cm4gZ3IuZGVjb2RlKGUuc3ViYXJyYXkodCxfKSk7Zm9yKHZhciBzPSIiO3Q8Xzspe3ZhciBmPWVbdCsrXTtpZighKGYmMTI4KSl7cys9U3RyaW5nLmZyb21DaGFyQ29kZShmKTtjb250aW51ZX12YXIgaD1lW3QrK10mNjM7aWYoKGYmMjI0KT09MTkyKXtzKz1TdHJpbmcuZnJvbUNoYXJDb2RlKChmJjMxKTw8NnxoKTtjb250aW51ZX12YXIgZz1lW3QrK10mNjM7aWYoKGYmMjQwKT09MjI0P2Y9KGYmMTUpPDwxMnxoPDw2fGc6Zj0oZiY3KTw8MTh8aDw8MTJ8Zzw8NnxlW3QrK10mNjMsZjw2NTUzNilzKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGYpO2Vsc2V7dmFyIHY9Zi02NTUzNjtzKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2fHY+PjEwLDU2MzIwfHYmMTAyMyl9fXJldHVybiBzfSxIZT0oZSx0KT0+ZT9HZShZLGUsdCk6IiIsQ249KGUsdCxuLGkpPT57RGUoYEFzc2VydGlvbiBmYWlsZWQ6ICR7SGUoZSl9LCBhdDogYCtbdD9IZSh0KToidW5rbm93biBmaWxlbmFtZSIsbixpP0hlKGkpOiJ1bmtub3duIGZ1bmN0aW9uIl0pfTtjbGFzcyBTbntjb25zdHJ1Y3Rvcih0KXt0aGlzLmV4Y1B0cj10LHRoaXMucHRyPXQtMjR9c2V0X3R5cGUodCl7TVt0aGlzLnB0cis0Pj4yXT10fWdldF90eXBlKCl7cmV0dXJuIE1bdGhpcy5wdHIrND4+Ml19c2V0X2Rlc3RydWN0b3IodCl7TVt0aGlzLnB0cis4Pj4yXT10fWdldF9kZXN0cnVjdG9yKCl7cmV0dXJuIE1bdGhpcy5wdHIrOD4+Ml19c2V0X2NhdWdodCh0KXt0PXQ/MTowLGpbdGhpcy5wdHIrMTJdPXR9Z2V0X2NhdWdodCgpe3JldHVybiBqW3RoaXMucHRyKzEyXSE9MH1zZXRfcmV0aHJvd24odCl7dD10PzE6MCxqW3RoaXMucHRyKzEzXT10fWdldF9yZXRocm93bigpe3JldHVybiBqW3RoaXMucHRyKzEzXSE9MH1pbml0KHQsbil7dGhpcy5zZXRfYWRqdXN0ZWRfcHRyKDApLHRoaXMuc2V0X3R5cGUodCksdGhpcy5zZXRfZGVzdHJ1Y3RvcihuKX1zZXRfYWRqdXN0ZWRfcHRyKHQpe01bdGhpcy5wdHIrMTY+PjJdPXR9Z2V0X2FkanVzdGVkX3B0cigpe3JldHVybiBNW3RoaXMucHRyKzE2Pj4yXX1nZXRfZXhjZXB0aW9uX3B0cigpe3ZhciB0PU1hKHRoaXMuZ2V0X3R5cGUoKSk7aWYodClyZXR1cm4gTVt0aGlzLmV4Y1B0cj4+Ml07dmFyIG49dGhpcy5nZXRfYWRqdXN0ZWRfcHRyKCk7cmV0dXJuIG4hPT0wP246dGhpcy5leGNQdHJ9fXZhciBwcj0wLE1uPShlLHQsbik9Pnt2YXIgaT1uZXcgU24oZSk7dGhyb3cgaS5pbml0KHQsbikscHI9ZSxwcn07ZnVuY3Rpb24gbXQoKXt2YXIgZT1GWytyZS52YXJhcmdzPj4yXTtyZXR1cm4gcmUudmFyYXJncys9NCxlfXZhciBWZT1tdCxXPXtpc0FiczplPT5lLmNoYXJBdCgwKT09PSIvIixzcGxpdFBhdGg6ZT0+e3ZhciB0PS9eKFwvP3wpKFtcc1xTXSo/KSgoPzpcLnsxLDJ9fFteXC9dKz98KShcLlteLlwvXSp8KSkoPzpbXC9dKikkLztyZXR1cm4gdC5leGVjKGUpLnNsaWNlKDEpfSxub3JtYWxpemVBcnJheTooZSx0KT0+e2Zvcih2YXIgbj0wLGk9ZS5sZW5ndGgtMTtpPj0wO2ktLSl7dmFyIF89ZVtpXTtfPT09Ii4iP2Uuc3BsaWNlKGksMSk6Xz09PSIuLiI/KGUuc3BsaWNlKGksMSksbisrKTpuJiYoZS5zcGxpY2UoaSwxKSxuLS0pfWlmKHQpZm9yKDtuO24tLSllLnVuc2hpZnQoIi4uIik7cmV0dXJuIGV9LG5vcm1hbGl6ZTplPT57dmFyIHQ9Vy5pc0FicyhlKSxuPWUuc3Vic3RyKC0xKT09PSIvIjtyZXR1cm4gZT1XLm5vcm1hbGl6ZUFycmF5KGUuc3BsaXQoIi8iKS5maWx0ZXIoaT0+ISFpKSwhdCkuam9pbigiLyIpLCFlJiYhdCYmKGU9Ii4iKSxlJiZuJiYoZSs9Ii8iKSwodD8iLyI6IiIpK2V9LGRpcm5hbWU6ZT0+e3ZhciB0PVcuc3BsaXRQYXRoKGUpLG49dFswXSxpPXRbMV07cmV0dXJuIW4mJiFpPyIuIjooaSYmKGk9aS5zdWJzdHIoMCxpLmxlbmd0aC0xKSksbitpKX0sYmFzZW5hbWU6ZT0+e2lmKGU9PT0iLyIpcmV0dXJuIi8iO2U9Vy5ub3JtYWxpemUoZSksZT1lLnJlcGxhY2UoL1wvJC8sIiIpO3ZhciB0PWUubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4gdD09PS0xP2U6ZS5zdWJzdHIodCsxKX0sam9pbjooLi4uZSk9Plcubm9ybWFsaXplKGUuam9pbigiLyIpKSxqb2luMjooZSx0KT0+Vy5ub3JtYWxpemUoZSsiLyIrdCl9LFVuPSgpPT57aWYodHlwZW9mIGNyeXB0bz09Im9iamVjdCImJnR5cGVvZiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzPT0iZnVuY3Rpb24iKXJldHVybiBpPT5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGkpO2lmKCQpdHJ5e3ZhciBlPUF0LHQ9ZS5yYW5kb21GaWxsU3luYztpZih0KXJldHVybiBpPT5lLnJhbmRvbUZpbGxTeW5jKGkpO3ZhciBuPWUucmFuZG9tQnl0ZXM7cmV0dXJuIGk9PihpLnNldChuKGkuYnl0ZUxlbmd0aCkpLGkpfWNhdGNoe31EZSgiaW5pdFJhbmRvbURldmljZSIpfSx2cj1lPT4odnI9VW4oKSkoZSksUGU9e3Jlc29sdmU6KC4uLmUpPT57Zm9yKHZhciB0PSIiLG49ITEsaT1lLmxlbmd0aC0xO2k+PS0xJiYhbjtpLS0pe3ZhciBfPWk+PTA/ZVtpXTpvLmN3ZCgpO2lmKHR5cGVvZiBfIT0ic3RyaW5nIil0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncyIpO2lmKCFfKXJldHVybiIiO3Q9XysiLyIrdCxuPVcuaXNBYnMoXyl9cmV0dXJuIHQ9Vy5ub3JtYWxpemVBcnJheSh0LnNwbGl0KCIvIikuZmlsdGVyKHM9PiEhcyksIW4pLmpvaW4oIi8iKSwobj8iLyI6IiIpK3R8fCIuIn0scmVsYXRpdmU6KGUsdCk9PntlPVBlLnJlc29sdmUoZSkuc3Vic3RyKDEpLHQ9UGUucmVzb2x2ZSh0KS5zdWJzdHIoMSk7ZnVuY3Rpb24gbih2KXtmb3IodmFyIHk9MDt5PHYubGVuZ3RoJiZ2W3ldPT09IiI7eSsrKTtmb3IodmFyIEE9di5sZW5ndGgtMTtBPj0wJiZ2W0FdPT09IiI7QS0tKTtyZXR1cm4geT5BP1tdOnYuc2xpY2UoeSxBLXkrMSl9Zm9yKHZhciBpPW4oZS5zcGxpdCgiLyIpKSxfPW4odC5zcGxpdCgiLyIpKSxzPU1hdGgubWluKGkubGVuZ3RoLF8ubGVuZ3RoKSxmPXMsaD0wO2g8cztoKyspaWYoaVtoXSE9PV9baF0pe2Y9aDticmVha31mb3IodmFyIGc9W10saD1mO2g8aS5sZW5ndGg7aCsrKWcucHVzaCgiLi4iKTtyZXR1cm4gZz1nLmNvbmNhdChfLnNsaWNlKGYpKSxnLmpvaW4oIi8iKX19LGp0PVtdLEh0PWU9Pntmb3IodmFyIHQ9MCxuPTA7bjxlLmxlbmd0aDsrK24pe3ZhciBpPWUuY2hhckNvZGVBdChuKTtpPD0xMjc/dCsrOmk8PTIwNDc/dCs9MjppPj01NTI5NiYmaTw9NTczNDM/KHQrPTQsKytuKTp0Kz0zfXJldHVybiB0fSx6dD0oZSx0LG4saSk9PntpZighKGk+MCkpcmV0dXJuIDA7Zm9yKHZhciBfPW4scz1uK2ktMSxmPTA7ZjxlLmxlbmd0aDsrK2Ype3ZhciBoPWUuY2hhckNvZGVBdChmKTtpZihoPj01NTI5NiYmaDw9NTczNDMpe3ZhciBnPWUuY2hhckNvZGVBdCgrK2YpO2g9NjU1MzYrKChoJjEwMjMpPDwxMCl8ZyYxMDIzfWlmKGg8PTEyNyl7aWYobj49cylicmVhazt0W24rK109aH1lbHNlIGlmKGg8PTIwNDcpe2lmKG4rMT49cylicmVhazt0W24rK109MTkyfGg+PjYsdFtuKytdPTEyOHxoJjYzfWVsc2UgaWYoaDw9NjU1MzUpe2lmKG4rMj49cylicmVhazt0W24rK109MjI0fGg+PjEyLHRbbisrXT0xMjh8aD4+NiY2Myx0W24rK109MTI4fGgmNjN9ZWxzZXtpZihuKzM+PXMpYnJlYWs7dFtuKytdPTI0MHxoPj4xOCx0W24rK109MTI4fGg+PjEyJjYzLHRbbisrXT0xMjh8aD4+NiY2Myx0W24rK109MTI4fGgmNjN9fXJldHVybiB0W25dPTAsbi1ffTtmdW5jdGlvbiBndChlLHQsbil7dmFyIGk9SHQoZSkrMSxfPW5ldyBBcnJheShpKSxzPXp0KGUsXywwLF8ubGVuZ3RoKTtyZXR1cm4gdCYmKF8ubGVuZ3RoPXMpLF99dmFyIFJuPSgpPT57aWYoIWp0Lmxlbmd0aCl7dmFyIGU9bnVsbDtpZigkKXt2YXIgdD0yNTYsbj1CdWZmZXIuYWxsb2ModCksaT0wLF89cHJvY2Vzcy5zdGRpbi5mZDt0cnl7aT1mZS5yZWFkU3luYyhfLG4sMCx0KX1jYXRjaChzKXtpZihzLnRvU3RyaW5nKCkuaW5jbHVkZXMoIkVPRiIpKWk9MDtlbHNlIHRocm93IHN9aT4wJiYoZT1uLnNsaWNlKDAsaSkudG9TdHJpbmcoInV0Zi04IikpfWVsc2UgdHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cucHJvbXB0PT0iZnVuY3Rpb24iJiYoZT13aW5kb3cucHJvbXB0KCJJbnB1dDogIiksZSE9PW51bGwmJihlKz1gCmApKTtpZighZSlyZXR1cm4gbnVsbDtqdD1ndChlLCEwKX1yZXR1cm4ganQuc2hpZnQoKX0semU9e3R0eXM6W10saW5pdCgpe30sc2h1dGRvd24oKXt9LHJlZ2lzdGVyKGUsdCl7emUudHR5c1tlXT17aW5wdXQ6W10sb3V0cHV0OltdLG9wczp0fSxvLnJlZ2lzdGVyRGV2aWNlKGUsemUuc3RyZWFtX29wcyl9LHN0cmVhbV9vcHM6e29wZW4oZSl7dmFyIHQ9emUudHR5c1tlLm5vZGUucmRldl07aWYoIXQpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig0Myk7ZS50dHk9dCxlLnNlZWthYmxlPSExfSxjbG9zZShlKXtlLnR0eS5vcHMuZnN5bmMoZS50dHkpfSxmc3luYyhlKXtlLnR0eS5vcHMuZnN5bmMoZS50dHkpfSxyZWFkKGUsdCxuLGksXyl7aWYoIWUudHR5fHwhZS50dHkub3BzLmdldF9jaGFyKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNjApO2Zvcih2YXIgcz0wLGY9MDtmPGk7ZisrKXt2YXIgaDt0cnl7aD1lLnR0eS5vcHMuZ2V0X2NoYXIoZS50dHkpfWNhdGNoe3Rocm93IG5ldyBvLkVycm5vRXJyb3IoMjkpfWlmKGg9PT12b2lkIDAmJnM9PT0wKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNik7aWYoaD09bnVsbClicmVhaztzKyssdFtuK2ZdPWh9cmV0dXJuIHMmJihlLm5vZGUudGltZXN0YW1wPURhdGUubm93KCkpLHN9LHdyaXRlKGUsdCxuLGksXyl7aWYoIWUudHR5fHwhZS50dHkub3BzLnB1dF9jaGFyKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNjApO3RyeXtmb3IodmFyIHM9MDtzPGk7cysrKWUudHR5Lm9wcy5wdXRfY2hhcihlLnR0eSx0W24rc10pfWNhdGNoe3Rocm93IG5ldyBvLkVycm5vRXJyb3IoMjkpfXJldHVybiBpJiYoZS5ub2RlLnRpbWVzdGFtcD1EYXRlLm5vdygpKSxzfX0sZGVmYXVsdF90dHlfb3BzOntnZXRfY2hhcihlKXtyZXR1cm4gUm4oKX0scHV0X2NoYXIoZSx0KXt0PT09bnVsbHx8dD09PTEwPyhoZShHZShlLm91dHB1dCwwKSksZS5vdXRwdXQ9W10pOnQhPTAmJmUub3V0cHV0LnB1c2godCl9LGZzeW5jKGUpe2Uub3V0cHV0JiZlLm91dHB1dC5sZW5ndGg+MCYmKGhlKEdlKGUub3V0cHV0LDApKSxlLm91dHB1dD1bXSl9LGlvY3RsX3RjZ2V0cyhlKXtyZXR1cm57Y19pZmxhZzoyNTg1NixjX29mbGFnOjUsY19jZmxhZzoxOTEsY19sZmxhZzozNTM4NyxjX2NjOlszLDI4LDEyNywyMSw0LDAsMSwwLDE3LDE5LDI2LDAsMTgsMTUsMjMsMjIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF19fSxpb2N0bF90Y3NldHMoZSx0LG4pe3JldHVybiAwfSxpb2N0bF90aW9jZ3dpbnN6KGUpe3JldHVyblsyNCw4MF19fSxkZWZhdWx0X3R0eTFfb3BzOntwdXRfY2hhcihlLHQpe3Q9PT1udWxsfHx0PT09MTA/KF9lKEdlKGUub3V0cHV0LDApKSxlLm91dHB1dD1bXSk6dCE9MCYmZS5vdXRwdXQucHVzaCh0KX0sZnN5bmMoZSl7ZS5vdXRwdXQmJmUub3V0cHV0Lmxlbmd0aD4wJiYoX2UoR2UoZS5vdXRwdXQsMCkpLGUub3V0cHV0PVtdKX19fSx5cj1lPT57RGUoKX0sVT17b3BzX3RhYmxlOm51bGwsbW91bnQoZSl7cmV0dXJuIFUuY3JlYXRlTm9kZShudWxsLCIvIiwxNjg5NSwwKX0sY3JlYXRlTm9kZShlLHQsbixpKXtpZihvLmlzQmxrZGV2KG4pfHxvLmlzRklGTyhuKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDYzKTtVLm9wc190YWJsZXx8KFUub3BzX3RhYmxlPXtkaXI6e25vZGU6e2dldGF0dHI6VS5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6VS5ub2RlX29wcy5zZXRhdHRyLGxvb2t1cDpVLm5vZGVfb3BzLmxvb2t1cCxta25vZDpVLm5vZGVfb3BzLm1rbm9kLHJlbmFtZTpVLm5vZGVfb3BzLnJlbmFtZSx1bmxpbms6VS5ub2RlX29wcy51bmxpbmsscm1kaXI6VS5ub2RlX29wcy5ybWRpcixyZWFkZGlyOlUubm9kZV9vcHMucmVhZGRpcixzeW1saW5rOlUubm9kZV9vcHMuc3ltbGlua30sc3RyZWFtOntsbHNlZWs6VS5zdHJlYW1fb3BzLmxsc2Vla319LGZpbGU6e25vZGU6e2dldGF0dHI6VS5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6VS5ub2RlX29wcy5zZXRhdHRyfSxzdHJlYW06e2xsc2VlazpVLnN0cmVhbV9vcHMubGxzZWVrLHJlYWQ6VS5zdHJlYW1fb3BzLnJlYWQsd3JpdGU6VS5zdHJlYW1fb3BzLndyaXRlLGFsbG9jYXRlOlUuc3RyZWFtX29wcy5hbGxvY2F0ZSxtbWFwOlUuc3RyZWFtX29wcy5tbWFwLG1zeW5jOlUuc3RyZWFtX29wcy5tc3luY319LGxpbms6e25vZGU6e2dldGF0dHI6VS5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6VS5ub2RlX29wcy5zZXRhdHRyLHJlYWRsaW5rOlUubm9kZV9vcHMucmVhZGxpbmt9LHN0cmVhbTp7fX0sY2hyZGV2Ontub2RlOntnZXRhdHRyOlUubm9kZV9vcHMuZ2V0YXR0cixzZXRhdHRyOlUubm9kZV9vcHMuc2V0YXR0cn0sc3RyZWFtOm8uY2hyZGV2X3N0cmVhbV9vcHN9fSk7dmFyIF89by5jcmVhdGVOb2RlKGUsdCxuLGkpO3JldHVybiBvLmlzRGlyKF8ubW9kZSk/KF8ubm9kZV9vcHM9VS5vcHNfdGFibGUuZGlyLm5vZGUsXy5zdHJlYW1fb3BzPVUub3BzX3RhYmxlLmRpci5zdHJlYW0sXy5jb250ZW50cz17fSk6by5pc0ZpbGUoXy5tb2RlKT8oXy5ub2RlX29wcz1VLm9wc190YWJsZS5maWxlLm5vZGUsXy5zdHJlYW1fb3BzPVUub3BzX3RhYmxlLmZpbGUuc3RyZWFtLF8udXNlZEJ5dGVzPTAsXy5jb250ZW50cz1udWxsKTpvLmlzTGluayhfLm1vZGUpPyhfLm5vZGVfb3BzPVUub3BzX3RhYmxlLmxpbmsubm9kZSxfLnN0cmVhbV9vcHM9VS5vcHNfdGFibGUubGluay5zdHJlYW0pOm8uaXNDaHJkZXYoXy5tb2RlKSYmKF8ubm9kZV9vcHM9VS5vcHNfdGFibGUuY2hyZGV2Lm5vZGUsXy5zdHJlYW1fb3BzPVUub3BzX3RhYmxlLmNocmRldi5zdHJlYW0pLF8udGltZXN0YW1wPURhdGUubm93KCksZSYmKGUuY29udGVudHNbdF09XyxlLnRpbWVzdGFtcD1fLnRpbWVzdGFtcCksX30sZ2V0RmlsZURhdGFBc1R5cGVkQXJyYXkoZSl7cmV0dXJuIGUuY29udGVudHM/ZS5jb250ZW50cy5zdWJhcnJheT9lLmNvbnRlbnRzLnN1YmFycmF5KDAsZS51c2VkQnl0ZXMpOm5ldyBVaW50OEFycmF5KGUuY29udGVudHMpOm5ldyBVaW50OEFycmF5KDApfSxleHBhbmRGaWxlU3RvcmFnZShlLHQpe3ZhciBuPWUuY29udGVudHM/ZS5jb250ZW50cy5sZW5ndGg6MDtpZighKG4+PXQpKXt2YXIgaT0xMDQ4NTc2O3Q9TWF0aC5tYXgodCxuKihuPGk/MjoxLjEyNSk+Pj4wKSxuIT0wJiYodD1NYXRoLm1heCh0LDI1NikpO3ZhciBfPWUuY29udGVudHM7ZS5jb250ZW50cz1uZXcgVWludDhBcnJheSh0KSxlLnVzZWRCeXRlcz4wJiZlLmNvbnRlbnRzLnNldChfLnN1YmFycmF5KDAsZS51c2VkQnl0ZXMpLDApfX0scmVzaXplRmlsZVN0b3JhZ2UoZSx0KXtpZihlLnVzZWRCeXRlcyE9dClpZih0PT0wKWUuY29udGVudHM9bnVsbCxlLnVzZWRCeXRlcz0wO2Vsc2V7dmFyIG49ZS5jb250ZW50cztlLmNvbnRlbnRzPW5ldyBVaW50OEFycmF5KHQpLG4mJmUuY29udGVudHMuc2V0KG4uc3ViYXJyYXkoMCxNYXRoLm1pbih0LGUudXNlZEJ5dGVzKSkpLGUudXNlZEJ5dGVzPXR9fSxub2RlX29wczp7Z2V0YXR0cihlKXt2YXIgdD17fTtyZXR1cm4gdC5kZXY9by5pc0NocmRldihlLm1vZGUpP2UuaWQ6MSx0Lmlubz1lLmlkLHQubW9kZT1lLm1vZGUsdC5ubGluaz0xLHQudWlkPTAsdC5naWQ9MCx0LnJkZXY9ZS5yZGV2LG8uaXNEaXIoZS5tb2RlKT90LnNpemU9NDA5NjpvLmlzRmlsZShlLm1vZGUpP3Quc2l6ZT1lLnVzZWRCeXRlczpvLmlzTGluayhlLm1vZGUpP3Quc2l6ZT1lLmxpbmsubGVuZ3RoOnQuc2l6ZT0wLHQuYXRpbWU9bmV3IERhdGUoZS50aW1lc3RhbXApLHQubXRpbWU9bmV3IERhdGUoZS50aW1lc3RhbXApLHQuY3RpbWU9bmV3IERhdGUoZS50aW1lc3RhbXApLHQuYmxrc2l6ZT00MDk2LHQuYmxvY2tzPU1hdGguY2VpbCh0LnNpemUvdC5ibGtzaXplKSx0fSxzZXRhdHRyKGUsdCl7dC5tb2RlIT09dm9pZCAwJiYoZS5tb2RlPXQubW9kZSksdC50aW1lc3RhbXAhPT12b2lkIDAmJihlLnRpbWVzdGFtcD10LnRpbWVzdGFtcCksdC5zaXplIT09dm9pZCAwJiZVLnJlc2l6ZUZpbGVTdG9yYWdlKGUsdC5zaXplKX0sbG9va3VwKGUsdCl7dGhyb3cgby5nZW5lcmljRXJyb3JzWzQ0XX0sbWtub2QoZSx0LG4saSl7cmV0dXJuIFUuY3JlYXRlTm9kZShlLHQsbixpKX0scmVuYW1lKGUsdCxuKXtpZihvLmlzRGlyKGUubW9kZSkpe3ZhciBpO3RyeXtpPW8ubG9va3VwTm9kZSh0LG4pfWNhdGNoe31pZihpKWZvcih2YXIgXyBpbiBpLmNvbnRlbnRzKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNTUpfWRlbGV0ZSBlLnBhcmVudC5jb250ZW50c1tlLm5hbWVdLGUucGFyZW50LnRpbWVzdGFtcD1EYXRlLm5vdygpLGUubmFtZT1uLHQuY29udGVudHNbbl09ZSx0LnRpbWVzdGFtcD1lLnBhcmVudC50aW1lc3RhbXB9LHVubGluayhlLHQpe2RlbGV0ZSBlLmNvbnRlbnRzW3RdLGUudGltZXN0YW1wPURhdGUubm93KCl9LHJtZGlyKGUsdCl7dmFyIG49by5sb29rdXBOb2RlKGUsdCk7Zm9yKHZhciBpIGluIG4uY29udGVudHMpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig1NSk7ZGVsZXRlIGUuY29udGVudHNbdF0sZS50aW1lc3RhbXA9RGF0ZS5ub3coKX0scmVhZGRpcihlKXt2YXIgdD1bIi4iLCIuLiJdO2Zvcih2YXIgbiBvZiBPYmplY3Qua2V5cyhlLmNvbnRlbnRzKSl0LnB1c2gobik7cmV0dXJuIHR9LHN5bWxpbmsoZSx0LG4pe3ZhciBpPVUuY3JlYXRlTm9kZShlLHQsNDE0NzEsMCk7cmV0dXJuIGkubGluaz1uLGl9LHJlYWRsaW5rKGUpe2lmKCFvLmlzTGluayhlLm1vZGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMjgpO3JldHVybiBlLmxpbmt9fSxzdHJlYW1fb3BzOntyZWFkKGUsdCxuLGksXyl7dmFyIHM9ZS5ub2RlLmNvbnRlbnRzO2lmKF8+PWUubm9kZS51c2VkQnl0ZXMpcmV0dXJuIDA7dmFyIGY9TWF0aC5taW4oZS5ub2RlLnVzZWRCeXRlcy1fLGkpO2lmKGY+OCYmcy5zdWJhcnJheSl0LnNldChzLnN1YmFycmF5KF8sXytmKSxuKTtlbHNlIGZvcih2YXIgaD0wO2g8ZjtoKyspdFtuK2hdPXNbXytoXTtyZXR1cm4gZn0sd3JpdGUoZSx0LG4saSxfLHMpe2lmKHQuYnVmZmVyPT09ai5idWZmZXImJihzPSExKSwhaSlyZXR1cm4gMDt2YXIgZj1lLm5vZGU7aWYoZi50aW1lc3RhbXA9RGF0ZS5ub3coKSx0LnN1YmFycmF5JiYoIWYuY29udGVudHN8fGYuY29udGVudHMuc3ViYXJyYXkpKXtpZihzKXJldHVybiBmLmNvbnRlbnRzPXQuc3ViYXJyYXkobixuK2kpLGYudXNlZEJ5dGVzPWksaTtpZihmLnVzZWRCeXRlcz09PTAmJl89PT0wKXJldHVybiBmLmNvbnRlbnRzPXQuc2xpY2UobixuK2kpLGYudXNlZEJ5dGVzPWksaTtpZihfK2k8PWYudXNlZEJ5dGVzKXJldHVybiBmLmNvbnRlbnRzLnNldCh0LnN1YmFycmF5KG4sbitpKSxfKSxpfWlmKFUuZXhwYW5kRmlsZVN0b3JhZ2UoZixfK2kpLGYuY29udGVudHMuc3ViYXJyYXkmJnQuc3ViYXJyYXkpZi5jb250ZW50cy5zZXQodC5zdWJhcnJheShuLG4raSksXyk7ZWxzZSBmb3IodmFyIGg9MDtoPGk7aCsrKWYuY29udGVudHNbXytoXT10W24raF07cmV0dXJuIGYudXNlZEJ5dGVzPU1hdGgubWF4KGYudXNlZEJ5dGVzLF8raSksaX0sbGxzZWVrKGUsdCxuKXt2YXIgaT10O2lmKG49PT0xP2krPWUucG9zaXRpb246bj09PTImJm8uaXNGaWxlKGUubm9kZS5tb2RlKSYmKGkrPWUubm9kZS51c2VkQnl0ZXMpLGk8MCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTtyZXR1cm4gaX0sYWxsb2NhdGUoZSx0LG4pe1UuZXhwYW5kRmlsZVN0b3JhZ2UoZS5ub2RlLHQrbiksZS5ub2RlLnVzZWRCeXRlcz1NYXRoLm1heChlLm5vZGUudXNlZEJ5dGVzLHQrbil9LG1tYXAoZSx0LG4saSxfKXtpZighby5pc0ZpbGUoZS5ub2RlLm1vZGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDMpO3ZhciBzLGYsaD1lLm5vZGUuY29udGVudHM7aWYoIShfJjIpJiZoLmJ1ZmZlcj09PWouYnVmZmVyKWY9ITEscz1oLmJ5dGVPZmZzZXQ7ZWxzZXtpZigobj4wfHxuK3Q8aC5sZW5ndGgpJiYoaC5zdWJhcnJheT9oPWguc3ViYXJyYXkobixuK3QpOmg9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoaCxuLG4rdCkpLGY9ITAscz15cigpLCFzKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDgpO2ouc2V0KGgscyl9cmV0dXJue3B0cjpzLGFsbG9jYXRlZDpmfX0sbXN5bmMoZSx0LG4saSxfKXtyZXR1cm4gVS5zdHJlYW1fb3BzLndyaXRlKGUsdCwwLGksbiwhMSksMH19fSxPbj0oZSx0LG4saSk9Pnt2YXIgXz1gYWwgJHtlfWA7bGUoZSxzPT57dChuZXcgVWludDhBcnJheShzKSksXyYmamUoKX0scz0+e2lmKG4pbigpO2Vsc2UgdGhyb3dgTG9hZGluZyBkYXRhIGZpbGUgIiR7ZX0iIGZhaWxlZC5gfSksXyYmcWUoKX0sSW49KGUsdCxuLGksXyxzKT0+e28uY3JlYXRlRGF0YUZpbGUoZSx0LG4saSxfLHMpfSxqbj1yLnByZWxvYWRQbHVnaW5zfHxbXSxIbj0oZSx0LG4saSk9Pnt0eXBlb2YgQnJvd3NlcjwidSImJkJyb3dzZXIuaW5pdCgpO3ZhciBfPSExO3JldHVybiBqbi5mb3JFYWNoKHM9PntffHxzLmNhbkhhbmRsZSh0KSYmKHMuaGFuZGxlKGUsdCxuLGkpLF89ITApfSksX30sem49KGUsdCxuLGksXyxzLGYsaCxnLHYpPT57dmFyIHk9dD9QZS5yZXNvbHZlKFcuam9pbjIoZSx0KSk6ZTtmdW5jdGlvbiBBKGspe2Z1bmN0aW9uIHgoVCl7dj09bnVsbHx8digpLGh8fEluKGUsdCxULGksXyxnKSxzPT1udWxsfHxzKCksamUoKX1IbihrLHkseCwoKT0+e2Y9PW51bGx8fGYoKSxqZSgpfSl8fHgoayl9cWUoKSx0eXBlb2Ygbj09InN0cmluZyI/T24obixBLGYpOkEobil9LExuPWU9Pnt2YXIgdD17cjowLCJyKyI6Mix3OjU3NywidysiOjU3OCxhOjEwODksImErIjoxMDkwfSxuPXRbZV07aWYodHlwZW9mIG4+InUiKXRocm93IG5ldyBFcnJvcihgVW5rbm93biBmaWxlIG9wZW4gbW9kZTogJHtlfWApO3JldHVybiBufSxMdD0oZSx0KT0+e3ZhciBuPTA7cmV0dXJuIGUmJihufD0zNjUpLHQmJihufD0xNDYpLG59LG89e3Jvb3Q6bnVsbCxtb3VudHM6W10sZGV2aWNlczp7fSxzdHJlYW1zOltdLG5leHRJbm9kZToxLG5hbWVUYWJsZTpudWxsLGN1cnJlbnRQYXRoOiIvIixpbml0aWFsaXplZDohMSxpZ25vcmVQZXJtaXNzaW9uczohMCxFcnJub0Vycm9yOmNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMubmFtZT0iRXJybm9FcnJvciIsdGhpcy5lcnJubz1lfX0sZ2VuZXJpY0Vycm9yczp7fSxmaWxlc3lzdGVtczpudWxsLHN5bmNGU1JlcXVlc3RzOjAsRlNTdHJlYW06Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnNoYXJlZD17fX1nZXQgb2JqZWN0KCl7cmV0dXJuIHRoaXMubm9kZX1zZXQgb2JqZWN0KGUpe3RoaXMubm9kZT1lfWdldCBpc1JlYWQoKXtyZXR1cm4odGhpcy5mbGFncyYyMDk3MTU1KSE9PTF9Z2V0IGlzV3JpdGUoKXtyZXR1cm4odGhpcy5mbGFncyYyMDk3MTU1KSE9PTB9Z2V0IGlzQXBwZW5kKCl7cmV0dXJuIHRoaXMuZmxhZ3MmMTAyNH1nZXQgZmxhZ3MoKXtyZXR1cm4gdGhpcy5zaGFyZWQuZmxhZ3N9c2V0IGZsYWdzKGUpe3RoaXMuc2hhcmVkLmZsYWdzPWV9Z2V0IHBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuc2hhcmVkLnBvc2l0aW9ufXNldCBwb3NpdGlvbihlKXt0aGlzLnNoYXJlZC5wb3NpdGlvbj1lfX0sRlNOb2RlOmNsYXNze2NvbnN0cnVjdG9yKGUsdCxuLGkpe2V8fChlPXRoaXMpLHRoaXMucGFyZW50PWUsdGhpcy5tb3VudD1lLm1vdW50LHRoaXMubW91bnRlZD1udWxsLHRoaXMuaWQ9by5uZXh0SW5vZGUrKyx0aGlzLm5hbWU9dCx0aGlzLm1vZGU9bix0aGlzLm5vZGVfb3BzPXt9LHRoaXMuc3RyZWFtX29wcz17fSx0aGlzLnJkZXY9aSx0aGlzLnJlYWRNb2RlPTM2NSx0aGlzLndyaXRlTW9kZT0xNDZ9Z2V0IHJlYWQoKXtyZXR1cm4odGhpcy5tb2RlJnRoaXMucmVhZE1vZGUpPT09dGhpcy5yZWFkTW9kZX1zZXQgcmVhZChlKXtlP3RoaXMubW9kZXw9dGhpcy5yZWFkTW9kZTp0aGlzLm1vZGUmPX50aGlzLnJlYWRNb2RlfWdldCB3cml0ZSgpe3JldHVybih0aGlzLm1vZGUmdGhpcy53cml0ZU1vZGUpPT09dGhpcy53cml0ZU1vZGV9c2V0IHdyaXRlKGUpe2U/dGhpcy5tb2RlfD10aGlzLndyaXRlTW9kZTp0aGlzLm1vZGUmPX50aGlzLndyaXRlTW9kZX1nZXQgaXNGb2xkZXIoKXtyZXR1cm4gby5pc0Rpcih0aGlzLm1vZGUpfWdldCBpc0RldmljZSgpe3JldHVybiBvLmlzQ2hyZGV2KHRoaXMubW9kZSl9fSxsb29rdXBQYXRoKGUsdD17fSl7aWYoZT1QZS5yZXNvbHZlKGUpLCFlKXJldHVybntwYXRoOiIiLG5vZGU6bnVsbH07dmFyIG49e2ZvbGxvd19tb3VudDohMCxyZWN1cnNlX2NvdW50OjB9O2lmKHQ9T2JqZWN0LmFzc2lnbihuLHQpLHQucmVjdXJzZV9jb3VudD44KXRocm93IG5ldyBvLkVycm5vRXJyb3IoMzIpO2Zvcih2YXIgaT1lLnNwbGl0KCIvIikuZmlsdGVyKEE9PiEhQSksXz1vLnJvb3Qscz0iLyIsZj0wO2Y8aS5sZW5ndGg7ZisrKXt2YXIgaD1mPT09aS5sZW5ndGgtMTtpZihoJiZ0LnBhcmVudClicmVhaztpZihfPW8ubG9va3VwTm9kZShfLGlbZl0pLHM9Vy5qb2luMihzLGlbZl0pLG8uaXNNb3VudHBvaW50KF8pJiYoIWh8fGgmJnQuZm9sbG93X21vdW50KSYmKF89Xy5tb3VudGVkLnJvb3QpLCFofHx0LmZvbGxvdylmb3IodmFyIGc9MDtvLmlzTGluayhfLm1vZGUpOyl7dmFyIHY9by5yZWFkbGluayhzKTtzPVBlLnJlc29sdmUoVy5kaXJuYW1lKHMpLHYpO3ZhciB5PW8ubG9va3VwUGF0aChzLHtyZWN1cnNlX2NvdW50OnQucmVjdXJzZV9jb3VudCsxfSk7aWYoXz15Lm5vZGUsZysrPjQwKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMzIpfX1yZXR1cm57cGF0aDpzLG5vZGU6X319LGdldFBhdGgoZSl7Zm9yKHZhciB0Ozspe2lmKG8uaXNSb290KGUpKXt2YXIgbj1lLm1vdW50Lm1vdW50cG9pbnQ7cmV0dXJuIHQ/bltuLmxlbmd0aC0xXSE9PSIvIj9gJHtufS8ke3R9YDpuK3Q6bn10PXQ/YCR7ZS5uYW1lfS8ke3R9YDplLm5hbWUsZT1lLnBhcmVudH19LGhhc2hOYW1lKGUsdCl7Zm9yKHZhciBuPTAsaT0wO2k8dC5sZW5ndGg7aSsrKW49KG48PDUpLW4rdC5jaGFyQ29kZUF0KGkpfDA7cmV0dXJuKGUrbj4+PjApJW8ubmFtZVRhYmxlLmxlbmd0aH0saGFzaEFkZE5vZGUoZSl7dmFyIHQ9by5oYXNoTmFtZShlLnBhcmVudC5pZCxlLm5hbWUpO2UubmFtZV9uZXh0PW8ubmFtZVRhYmxlW3RdLG8ubmFtZVRhYmxlW3RdPWV9LGhhc2hSZW1vdmVOb2RlKGUpe3ZhciB0PW8uaGFzaE5hbWUoZS5wYXJlbnQuaWQsZS5uYW1lKTtpZihvLm5hbWVUYWJsZVt0XT09PWUpby5uYW1lVGFibGVbdF09ZS5uYW1lX25leHQ7ZWxzZSBmb3IodmFyIG49by5uYW1lVGFibGVbdF07bjspe2lmKG4ubmFtZV9uZXh0PT09ZSl7bi5uYW1lX25leHQ9ZS5uYW1lX25leHQ7YnJlYWt9bj1uLm5hbWVfbmV4dH19LGxvb2t1cE5vZGUoZSx0KXt2YXIgbj1vLm1heUxvb2t1cChlKTtpZihuKXRocm93IG5ldyBvLkVycm5vRXJyb3Iobik7Zm9yKHZhciBpPW8uaGFzaE5hbWUoZS5pZCx0KSxfPW8ubmFtZVRhYmxlW2ldO187Xz1fLm5hbWVfbmV4dCl7dmFyIHM9Xy5uYW1lO2lmKF8ucGFyZW50LmlkPT09ZS5pZCYmcz09PXQpcmV0dXJuIF99cmV0dXJuIG8ubG9va3VwKGUsdCl9LGNyZWF0ZU5vZGUoZSx0LG4saSl7dmFyIF89bmV3IG8uRlNOb2RlKGUsdCxuLGkpO3JldHVybiBvLmhhc2hBZGROb2RlKF8pLF99LGRlc3Ryb3lOb2RlKGUpe28uaGFzaFJlbW92ZU5vZGUoZSl9LGlzUm9vdChlKXtyZXR1cm4gZT09PWUucGFyZW50fSxpc01vdW50cG9pbnQoZSl7cmV0dXJuISFlLm1vdW50ZWR9LGlzRmlsZShlKXtyZXR1cm4oZSY2MTQ0MCk9PT0zMjc2OH0saXNEaXIoZSl7cmV0dXJuKGUmNjE0NDApPT09MTYzODR9LGlzTGluayhlKXtyZXR1cm4oZSY2MTQ0MCk9PT00MDk2MH0saXNDaHJkZXYoZSl7cmV0dXJuKGUmNjE0NDApPT09ODE5Mn0saXNCbGtkZXYoZSl7cmV0dXJuKGUmNjE0NDApPT09MjQ1NzZ9LGlzRklGTyhlKXtyZXR1cm4oZSY2MTQ0MCk9PT00MDk2fSxpc1NvY2tldChlKXtyZXR1cm4oZSY0OTE1Mik9PT00OTE1Mn0sZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmcoZSl7dmFyIHQ9WyJyIiwidyIsInJ3Il1bZSYzXTtyZXR1cm4gZSY1MTImJih0Kz0idyIpLHR9LG5vZGVQZXJtaXNzaW9ucyhlLHQpe3JldHVybiBvLmlnbm9yZVBlcm1pc3Npb25zPzA6dC5pbmNsdWRlcygiciIpJiYhKGUubW9kZSYyOTIpfHx0LmluY2x1ZGVzKCJ3IikmJiEoZS5tb2RlJjE0Nil8fHQuaW5jbHVkZXMoIngiKSYmIShlLm1vZGUmNzMpPzI6MH0sbWF5TG9va3VwKGUpe2lmKCFvLmlzRGlyKGUubW9kZSkpcmV0dXJuIDU0O3ZhciB0PW8ubm9kZVBlcm1pc3Npb25zKGUsIngiKTtyZXR1cm4gdHx8KGUubm9kZV9vcHMubG9va3VwPzA6Mil9LG1heUNyZWF0ZShlLHQpe3RyeXt2YXIgbj1vLmxvb2t1cE5vZGUoZSx0KTtyZXR1cm4gMjB9Y2F0Y2h7fXJldHVybiBvLm5vZGVQZXJtaXNzaW9ucyhlLCJ3eCIpfSxtYXlEZWxldGUoZSx0LG4pe3ZhciBpO3RyeXtpPW8ubG9va3VwTm9kZShlLHQpfWNhdGNoKHMpe3JldHVybiBzLmVycm5vfXZhciBfPW8ubm9kZVBlcm1pc3Npb25zKGUsInd4Iik7aWYoXylyZXR1cm4gXztpZihuKXtpZighby5pc0RpcihpLm1vZGUpKXJldHVybiA1NDtpZihvLmlzUm9vdChpKXx8by5nZXRQYXRoKGkpPT09by5jd2QoKSlyZXR1cm4gMTB9ZWxzZSBpZihvLmlzRGlyKGkubW9kZSkpcmV0dXJuIDMxO3JldHVybiAwfSxtYXlPcGVuKGUsdCl7cmV0dXJuIGU/by5pc0xpbmsoZS5tb2RlKT8zMjpvLmlzRGlyKGUubW9kZSkmJihvLmZsYWdzVG9QZXJtaXNzaW9uU3RyaW5nKHQpIT09InIifHx0JjUxMik/MzE6by5ub2RlUGVybWlzc2lvbnMoZSxvLmZsYWdzVG9QZXJtaXNzaW9uU3RyaW5nKHQpKTo0NH0sTUFYX09QRU5fRkRTOjQwOTYsbmV4dGZkKCl7Zm9yKHZhciBlPTA7ZTw9by5NQVhfT1BFTl9GRFM7ZSsrKWlmKCFvLnN0cmVhbXNbZV0pcmV0dXJuIGU7dGhyb3cgbmV3IG8uRXJybm9FcnJvcigzMyl9LGdldFN0cmVhbUNoZWNrZWQoZSl7dmFyIHQ9by5nZXRTdHJlYW0oZSk7aWYoIXQpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig4KTtyZXR1cm4gdH0sZ2V0U3RyZWFtOmU9Pm8uc3RyZWFtc1tlXSxjcmVhdGVTdHJlYW0oZSx0PS0xKXtyZXR1cm4gZT1PYmplY3QuYXNzaWduKG5ldyBvLkZTU3RyZWFtLGUpLHQ9PS0xJiYodD1vLm5leHRmZCgpKSxlLmZkPXQsby5zdHJlYW1zW3RdPWUsZX0sY2xvc2VTdHJlYW0oZSl7by5zdHJlYW1zW2VdPW51bGx9LGR1cFN0cmVhbShlLHQ9LTEpe3ZhciBuLGksXz1vLmNyZWF0ZVN0cmVhbShlLHQpO3JldHVybihpPShuPV8uc3RyZWFtX29wcyk9PW51bGw/dm9pZCAwOm4uZHVwKT09bnVsbHx8aS5jYWxsKG4sXyksX30sY2hyZGV2X3N0cmVhbV9vcHM6e29wZW4oZSl7dmFyIHQsbixpPW8uZ2V0RGV2aWNlKGUubm9kZS5yZGV2KTtlLnN0cmVhbV9vcHM9aS5zdHJlYW1fb3BzLChuPSh0PWUuc3RyZWFtX29wcykub3Blbik9PW51bGx8fG4uY2FsbCh0LGUpfSxsbHNlZWsoKXt0aHJvdyBuZXcgby5FcnJub0Vycm9yKDcwKX19LG1ham9yOmU9PmU+PjgsbWlub3I6ZT0+ZSYyNTUsbWFrZWRldjooZSx0KT0+ZTw8OHx0LHJlZ2lzdGVyRGV2aWNlKGUsdCl7by5kZXZpY2VzW2VdPXtzdHJlYW1fb3BzOnR9fSxnZXREZXZpY2U6ZT0+by5kZXZpY2VzW2VdLGdldE1vdW50cyhlKXtmb3IodmFyIHQ9W10sbj1bZV07bi5sZW5ndGg7KXt2YXIgaT1uLnBvcCgpO3QucHVzaChpKSxuLnB1c2goLi4uaS5tb3VudHMpfXJldHVybiB0fSxzeW5jZnMoZSx0KXt0eXBlb2YgZT09ImZ1bmN0aW9uIiYmKHQ9ZSxlPSExKSxvLnN5bmNGU1JlcXVlc3RzKyssby5zeW5jRlNSZXF1ZXN0cz4xJiZfZShgd2FybmluZzogJHtvLnN5bmNGU1JlcXVlc3RzfSBGUy5zeW5jZnMgb3BlcmF0aW9ucyBpbiBmbGlnaHQgYXQgb25jZSwgcHJvYmFibHkganVzdCBkb2luZyBleHRyYSB3b3JrYCk7dmFyIG49by5nZXRNb3VudHMoby5yb290Lm1vdW50KSxpPTA7ZnVuY3Rpb24gXyhmKXtyZXR1cm4gby5zeW5jRlNSZXF1ZXN0cy0tLHQoZil9ZnVuY3Rpb24gcyhmKXtpZihmKXJldHVybiBzLmVycm9yZWQ/dm9pZCAwOihzLmVycm9yZWQ9ITAsXyhmKSk7KytpPj1uLmxlbmd0aCYmXyhudWxsKX1uLmZvckVhY2goZj0+e2lmKCFmLnR5cGUuc3luY2ZzKXJldHVybiBzKG51bGwpO2YudHlwZS5zeW5jZnMoZixlLHMpfSl9LG1vdW50KGUsdCxuKXt2YXIgaT1uPT09Ii8iLF89IW4scztpZihpJiZvLnJvb3QpdGhyb3cgbmV3IG8uRXJybm9FcnJvcigxMCk7aWYoIWkmJiFfKXt2YXIgZj1vLmxvb2t1cFBhdGgobix7Zm9sbG93X21vdW50OiExfSk7aWYobj1mLnBhdGgscz1mLm5vZGUsby5pc01vdW50cG9pbnQocykpdGhyb3cgbmV3IG8uRXJybm9FcnJvcigxMCk7aWYoIW8uaXNEaXIocy5tb2RlKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDU0KX12YXIgaD17dHlwZTplLG9wdHM6dCxtb3VudHBvaW50Om4sbW91bnRzOltdfSxnPWUubW91bnQoaCk7cmV0dXJuIGcubW91bnQ9aCxoLnJvb3Q9ZyxpP28ucm9vdD1nOnMmJihzLm1vdW50ZWQ9aCxzLm1vdW50JiZzLm1vdW50Lm1vdW50cy5wdXNoKGgpKSxnfSx1bm1vdW50KGUpe3ZhciB0PW8ubG9va3VwUGF0aChlLHtmb2xsb3dfbW91bnQ6ITF9KTtpZighby5pc01vdW50cG9pbnQodC5ub2RlKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTt2YXIgbj10Lm5vZGUsaT1uLm1vdW50ZWQsXz1vLmdldE1vdW50cyhpKTtPYmplY3Qua2V5cyhvLm5hbWVUYWJsZSkuZm9yRWFjaChmPT57Zm9yKHZhciBoPW8ubmFtZVRhYmxlW2ZdO2g7KXt2YXIgZz1oLm5hbWVfbmV4dDtfLmluY2x1ZGVzKGgubW91bnQpJiZvLmRlc3Ryb3lOb2RlKGgpLGg9Z319KSxuLm1vdW50ZWQ9bnVsbDt2YXIgcz1uLm1vdW50Lm1vdW50cy5pbmRleE9mKGkpO24ubW91bnQubW91bnRzLnNwbGljZShzLDEpfSxsb29rdXAoZSx0KXtyZXR1cm4gZS5ub2RlX29wcy5sb29rdXAoZSx0KX0sbWtub2QoZSx0LG4pe3ZhciBpPW8ubG9va3VwUGF0aChlLHtwYXJlbnQ6ITB9KSxfPWkubm9kZSxzPVcuYmFzZW5hbWUoZSk7aWYoIXN8fHM9PT0iLiJ8fHM9PT0iLi4iKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMjgpO3ZhciBmPW8ubWF5Q3JlYXRlKF8scyk7aWYoZil0aHJvdyBuZXcgby5FcnJub0Vycm9yKGYpO2lmKCFfLm5vZGVfb3BzLm1rbm9kKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNjMpO3JldHVybiBfLm5vZGVfb3BzLm1rbm9kKF8scyx0LG4pfSxjcmVhdGUoZSx0KXtyZXR1cm4gdD10IT09dm9pZCAwP3Q6NDM4LHQmPTQwOTUsdHw9MzI3Njgsby5ta25vZChlLHQsMCl9LG1rZGlyKGUsdCl7cmV0dXJuIHQ9dCE9PXZvaWQgMD90OjUxMSx0Jj0xMDIzLHR8PTE2Mzg0LG8ubWtub2QoZSx0LDApfSxta2RpclRyZWUoZSx0KXtmb3IodmFyIG49ZS5zcGxpdCgiLyIpLGk9IiIsXz0wO188bi5sZW5ndGg7KytfKWlmKG5bX10pe2krPSIvIituW19dO3RyeXtvLm1rZGlyKGksdCl9Y2F0Y2gocyl7aWYocy5lcnJubyE9MjApdGhyb3cgc319fSxta2RldihlLHQsbil7cmV0dXJuIHR5cGVvZiBuPiJ1IiYmKG49dCx0PTQzOCksdHw9ODE5MixvLm1rbm9kKGUsdCxuKX0sc3ltbGluayhlLHQpe2lmKCFQZS5yZXNvbHZlKGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDQpO3ZhciBuPW8ubG9va3VwUGF0aCh0LHtwYXJlbnQ6ITB9KSxpPW4ubm9kZTtpZighaSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQ0KTt2YXIgXz1XLmJhc2VuYW1lKHQpLHM9by5tYXlDcmVhdGUoaSxfKTtpZihzKXRocm93IG5ldyBvLkVycm5vRXJyb3Iocyk7aWYoIWkubm9kZV9vcHMuc3ltbGluayl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDYzKTtyZXR1cm4gaS5ub2RlX29wcy5zeW1saW5rKGksXyxlKX0scmVuYW1lKGUsdCl7dmFyIG49Vy5kaXJuYW1lKGUpLGk9Vy5kaXJuYW1lKHQpLF89Vy5iYXNlbmFtZShlKSxzPVcuYmFzZW5hbWUodCksZixoLGc7aWYoZj1vLmxvb2t1cFBhdGgoZSx7cGFyZW50OiEwfSksaD1mLm5vZGUsZj1vLmxvb2t1cFBhdGgodCx7cGFyZW50OiEwfSksZz1mLm5vZGUsIWh8fCFnKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDQpO2lmKGgubW91bnQhPT1nLm1vdW50KXRocm93IG5ldyBvLkVycm5vRXJyb3IoNzUpO3ZhciB2PW8ubG9va3VwTm9kZShoLF8pLHk9UGUucmVsYXRpdmUoZSxpKTtpZih5LmNoYXJBdCgwKSE9PSIuIil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTtpZih5PVBlLnJlbGF0aXZlKHQsbikseS5jaGFyQXQoMCkhPT0iLiIpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig1NSk7dmFyIEE7dHJ5e0E9by5sb29rdXBOb2RlKGcscyl9Y2F0Y2h7fWlmKHYhPT1BKXt2YXIgaz1vLmlzRGlyKHYubW9kZSkseD1vLm1heURlbGV0ZShoLF8sayk7aWYoeCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKHgpO2lmKHg9QT9vLm1heURlbGV0ZShnLHMsayk6by5tYXlDcmVhdGUoZyxzKSx4KXRocm93IG5ldyBvLkVycm5vRXJyb3IoeCk7aWYoIWgubm9kZV9vcHMucmVuYW1lKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNjMpO2lmKG8uaXNNb3VudHBvaW50KHYpfHxBJiZvLmlzTW91bnRwb2ludChBKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDEwKTtpZihnIT09aCYmKHg9by5ub2RlUGVybWlzc2lvbnMoaCwidyIpLHgpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoeCk7by5oYXNoUmVtb3ZlTm9kZSh2KTt0cnl7aC5ub2RlX29wcy5yZW5hbWUodixnLHMpLHYucGFyZW50PWd9Y2F0Y2goVCl7dGhyb3cgVH1maW5hbGx5e28uaGFzaEFkZE5vZGUodil9fX0scm1kaXIoZSl7dmFyIHQ9by5sb29rdXBQYXRoKGUse3BhcmVudDohMH0pLG49dC5ub2RlLGk9Vy5iYXNlbmFtZShlKSxfPW8ubG9va3VwTm9kZShuLGkpLHM9by5tYXlEZWxldGUobixpLCEwKTtpZihzKXRocm93IG5ldyBvLkVycm5vRXJyb3Iocyk7aWYoIW4ubm9kZV9vcHMucm1kaXIpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig2Myk7aWYoby5pc01vdW50cG9pbnQoXykpdGhyb3cgbmV3IG8uRXJybm9FcnJvcigxMCk7bi5ub2RlX29wcy5ybWRpcihuLGkpLG8uZGVzdHJveU5vZGUoXyl9LHJlYWRkaXIoZSl7dmFyIHQ9by5sb29rdXBQYXRoKGUse2ZvbGxvdzohMH0pLG49dC5ub2RlO2lmKCFuLm5vZGVfb3BzLnJlYWRkaXIpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig1NCk7cmV0dXJuIG4ubm9kZV9vcHMucmVhZGRpcihuKX0sdW5saW5rKGUpe3ZhciB0PW8ubG9va3VwUGF0aChlLHtwYXJlbnQ6ITB9KSxuPXQubm9kZTtpZighbil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQ0KTt2YXIgaT1XLmJhc2VuYW1lKGUpLF89by5sb29rdXBOb2RlKG4saSkscz1vLm1heURlbGV0ZShuLGksITEpO2lmKHMpdGhyb3cgbmV3IG8uRXJybm9FcnJvcihzKTtpZighbi5ub2RlX29wcy51bmxpbmspdGhyb3cgbmV3IG8uRXJybm9FcnJvcig2Myk7aWYoby5pc01vdW50cG9pbnQoXykpdGhyb3cgbmV3IG8uRXJybm9FcnJvcigxMCk7bi5ub2RlX29wcy51bmxpbmsobixpKSxvLmRlc3Ryb3lOb2RlKF8pfSxyZWFkbGluayhlKXt2YXIgdD1vLmxvb2t1cFBhdGgoZSksbj10Lm5vZGU7aWYoIW4pdGhyb3cgbmV3IG8uRXJybm9FcnJvcig0NCk7aWYoIW4ubm9kZV9vcHMucmVhZGxpbmspdGhyb3cgbmV3IG8uRXJybm9FcnJvcigyOCk7cmV0dXJuIFBlLnJlc29sdmUoby5nZXRQYXRoKG4ucGFyZW50KSxuLm5vZGVfb3BzLnJlYWRsaW5rKG4pKX0sc3RhdChlLHQpe3ZhciBuPW8ubG9va3VwUGF0aChlLHtmb2xsb3c6IXR9KSxpPW4ubm9kZTtpZighaSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQ0KTtpZighaS5ub2RlX29wcy5nZXRhdHRyKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNjMpO3JldHVybiBpLm5vZGVfb3BzLmdldGF0dHIoaSl9LGxzdGF0KGUpe3JldHVybiBvLnN0YXQoZSwhMCl9LGNobW9kKGUsdCxuKXt2YXIgaTtpZih0eXBlb2YgZT09InN0cmluZyIpe3ZhciBfPW8ubG9va3VwUGF0aChlLHtmb2xsb3c6IW59KTtpPV8ubm9kZX1lbHNlIGk9ZTtpZighaS5ub2RlX29wcy5zZXRhdHRyKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNjMpO2kubm9kZV9vcHMuc2V0YXR0cihpLHttb2RlOnQmNDA5NXxpLm1vZGUmLTQwOTYsdGltZXN0YW1wOkRhdGUubm93KCl9KX0sbGNobW9kKGUsdCl7by5jaG1vZChlLHQsITApfSxmY2htb2QoZSx0KXt2YXIgbj1vLmdldFN0cmVhbUNoZWNrZWQoZSk7by5jaG1vZChuLm5vZGUsdCl9LGNob3duKGUsdCxuLGkpe3ZhciBfO2lmKHR5cGVvZiBlPT0ic3RyaW5nIil7dmFyIHM9by5sb29rdXBQYXRoKGUse2ZvbGxvdzohaX0pO189cy5ub2RlfWVsc2UgXz1lO2lmKCFfLm5vZGVfb3BzLnNldGF0dHIpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig2Myk7Xy5ub2RlX29wcy5zZXRhdHRyKF8se3RpbWVzdGFtcDpEYXRlLm5vdygpfSl9LGxjaG93bihlLHQsbil7by5jaG93bihlLHQsbiwhMCl9LGZjaG93bihlLHQsbil7dmFyIGk9by5nZXRTdHJlYW1DaGVja2VkKGUpO28uY2hvd24oaS5ub2RlLHQsbil9LHRydW5jYXRlKGUsdCl7aWYodDwwKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMjgpO3ZhciBuO2lmKHR5cGVvZiBlPT0ic3RyaW5nIil7dmFyIGk9by5sb29rdXBQYXRoKGUse2ZvbGxvdzohMH0pO249aS5ub2RlfWVsc2Ugbj1lO2lmKCFuLm5vZGVfb3BzLnNldGF0dHIpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig2Myk7aWYoby5pc0RpcihuLm1vZGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMzEpO2lmKCFvLmlzRmlsZShuLm1vZGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMjgpO3ZhciBfPW8ubm9kZVBlcm1pc3Npb25zKG4sInciKTtpZihfKXRocm93IG5ldyBvLkVycm5vRXJyb3IoXyk7bi5ub2RlX29wcy5zZXRhdHRyKG4se3NpemU6dCx0aW1lc3RhbXA6RGF0ZS5ub3coKX0pfSxmdHJ1bmNhdGUoZSx0KXt2YXIgbj1vLmdldFN0cmVhbUNoZWNrZWQoZSk7aWYoIShuLmZsYWdzJjIwOTcxNTUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMjgpO28udHJ1bmNhdGUobi5ub2RlLHQpfSx1dGltZShlLHQsbil7dmFyIGk9by5sb29rdXBQYXRoKGUse2ZvbGxvdzohMH0pLF89aS5ub2RlO18ubm9kZV9vcHMuc2V0YXR0cihfLHt0aW1lc3RhbXA6TWF0aC5tYXgodCxuKX0pfSxvcGVuKGUsdCxuKXtpZihlPT09IiIpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig0NCk7dD10eXBlb2YgdD09InN0cmluZyI/TG4odCk6dCx0JjY0PyhuPXR5cGVvZiBuPiJ1Ij80Mzg6bixuPW4mNDA5NXwzMjc2OCk6bj0wO3ZhciBpO2lmKHR5cGVvZiBlPT0ib2JqZWN0IilpPWU7ZWxzZXtlPVcubm9ybWFsaXplKGUpO3RyeXt2YXIgXz1vLmxvb2t1cFBhdGgoZSx7Zm9sbG93OiEodCYxMzEwNzIpfSk7aT1fLm5vZGV9Y2F0Y2h7fX12YXIgcz0hMTtpZih0JjY0KWlmKGkpe2lmKHQmMTI4KXRocm93IG5ldyBvLkVycm5vRXJyb3IoMjApfWVsc2UgaT1vLm1rbm9kKGUsbiwwKSxzPSEwO2lmKCFpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDQpO2lmKG8uaXNDaHJkZXYoaS5tb2RlKSYmKHQmPS01MTMpLHQmNjU1MzYmJiFvLmlzRGlyKGkubW9kZSkpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig1NCk7aWYoIXMpe3ZhciBmPW8ubWF5T3BlbihpLHQpO2lmKGYpdGhyb3cgbmV3IG8uRXJybm9FcnJvcihmKX10JjUxMiYmIXMmJm8udHJ1bmNhdGUoaSwwKSx0Jj0tMTMxNzEzO3ZhciBoPW8uY3JlYXRlU3RyZWFtKHtub2RlOmkscGF0aDpvLmdldFBhdGgoaSksZmxhZ3M6dCxzZWVrYWJsZTohMCxwb3NpdGlvbjowLHN0cmVhbV9vcHM6aS5zdHJlYW1fb3BzLHVuZ290dGVuOltdLGVycm9yOiExfSk7cmV0dXJuIGguc3RyZWFtX29wcy5vcGVuJiZoLnN0cmVhbV9vcHMub3BlbihoKSxyLmxvZ1JlYWRGaWxlcyYmISh0JjEpJiYoby5yZWFkRmlsZXN8fChvLnJlYWRGaWxlcz17fSksZSBpbiBvLnJlYWRGaWxlc3x8KG8ucmVhZEZpbGVzW2VdPTEpKSxofSxjbG9zZShlKXtpZihvLmlzQ2xvc2VkKGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoOCk7ZS5nZXRkZW50cyYmKGUuZ2V0ZGVudHM9bnVsbCk7dHJ5e2Uuc3RyZWFtX29wcy5jbG9zZSYmZS5zdHJlYW1fb3BzLmNsb3NlKGUpfWNhdGNoKHQpe3Rocm93IHR9ZmluYWxseXtvLmNsb3NlU3RyZWFtKGUuZmQpfWUuZmQ9bnVsbH0saXNDbG9zZWQoZSl7cmV0dXJuIGUuZmQ9PT1udWxsfSxsbHNlZWsoZSx0LG4pe2lmKG8uaXNDbG9zZWQoZSkpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig4KTtpZighZS5zZWVrYWJsZXx8IWUuc3RyZWFtX29wcy5sbHNlZWspdGhyb3cgbmV3IG8uRXJybm9FcnJvcig3MCk7aWYobiE9MCYmbiE9MSYmbiE9Mil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTtyZXR1cm4gZS5wb3NpdGlvbj1lLnN0cmVhbV9vcHMubGxzZWVrKGUsdCxuKSxlLnVuZ290dGVuPVtdLGUucG9zaXRpb259LHJlYWQoZSx0LG4saSxfKXtpZihpPDB8fF88MCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTtpZihvLmlzQ2xvc2VkKGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoOCk7aWYoKGUuZmxhZ3MmMjA5NzE1NSk9PT0xKXRocm93IG5ldyBvLkVycm5vRXJyb3IoOCk7aWYoby5pc0RpcihlLm5vZGUubW9kZSkpdGhyb3cgbmV3IG8uRXJybm9FcnJvcigzMSk7aWYoIWUuc3RyZWFtX29wcy5yZWFkKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMjgpO3ZhciBzPXR5cGVvZiBfPCJ1IjtpZighcylfPWUucG9zaXRpb247ZWxzZSBpZighZS5zZWVrYWJsZSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDcwKTt2YXIgZj1lLnN0cmVhbV9vcHMucmVhZChlLHQsbixpLF8pO3JldHVybiBzfHwoZS5wb3NpdGlvbis9ZiksZn0sd3JpdGUoZSx0LG4saSxfLHMpe2lmKGk8MHx8XzwwKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMjgpO2lmKG8uaXNDbG9zZWQoZSkpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig4KTtpZighKGUuZmxhZ3MmMjA5NzE1NSkpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig4KTtpZihvLmlzRGlyKGUubm9kZS5tb2RlKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDMxKTtpZighZS5zdHJlYW1fb3BzLndyaXRlKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMjgpO2Uuc2Vla2FibGUmJmUuZmxhZ3MmMTAyNCYmby5sbHNlZWsoZSwwLDIpO3ZhciBmPXR5cGVvZiBfPCJ1IjtpZighZilfPWUucG9zaXRpb247ZWxzZSBpZighZS5zZWVrYWJsZSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDcwKTt2YXIgaD1lLnN0cmVhbV9vcHMud3JpdGUoZSx0LG4saSxfLHMpO3JldHVybiBmfHwoZS5wb3NpdGlvbis9aCksaH0sYWxsb2NhdGUoZSx0LG4pe2lmKG8uaXNDbG9zZWQoZSkpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig4KTtpZih0PDB8fG48PTApdGhyb3cgbmV3IG8uRXJybm9FcnJvcigyOCk7aWYoIShlLmZsYWdzJjIwOTcxNTUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoOCk7aWYoIW8uaXNGaWxlKGUubm9kZS5tb2RlKSYmIW8uaXNEaXIoZS5ub2RlLm1vZGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDMpO2lmKCFlLnN0cmVhbV9vcHMuYWxsb2NhdGUpdGhyb3cgbmV3IG8uRXJybm9FcnJvcigxMzgpO2Uuc3RyZWFtX29wcy5hbGxvY2F0ZShlLHQsbil9LG1tYXAoZSx0LG4saSxfKXtpZihpJjImJiEoXyYyKSYmKGUuZmxhZ3MmMjA5NzE1NSkhPT0yKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMik7aWYoKGUuZmxhZ3MmMjA5NzE1NSk9PT0xKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMik7aWYoIWUuc3RyZWFtX29wcy5tbWFwKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDMpO3JldHVybiBlLnN0cmVhbV9vcHMubW1hcChlLHQsbixpLF8pfSxtc3luYyhlLHQsbixpLF8pe3JldHVybiBlLnN0cmVhbV9vcHMubXN5bmM/ZS5zdHJlYW1fb3BzLm1zeW5jKGUsdCxuLGksXyk6MH0saW9jdGwoZSx0LG4pe2lmKCFlLnN0cmVhbV9vcHMuaW9jdGwpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig1OSk7cmV0dXJuIGUuc3RyZWFtX29wcy5pb2N0bChlLHQsbil9LHJlYWRGaWxlKGUsdD17fSl7aWYodC5mbGFncz10LmZsYWdzfHwwLHQuZW5jb2Rpbmc9dC5lbmNvZGluZ3x8ImJpbmFyeSIsdC5lbmNvZGluZyE9PSJ1dGY4IiYmdC5lbmNvZGluZyE9PSJiaW5hcnkiKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBlbmNvZGluZyB0eXBlICIke3QuZW5jb2Rpbmd9ImApO3ZhciBuLGk9by5vcGVuKGUsdC5mbGFncyksXz1vLnN0YXQoZSkscz1fLnNpemUsZj1uZXcgVWludDhBcnJheShzKTtyZXR1cm4gby5yZWFkKGksZiwwLHMsMCksdC5lbmNvZGluZz09PSJ1dGY4Ij9uPUdlKGYsMCk6dC5lbmNvZGluZz09PSJiaW5hcnkiJiYobj1mKSxvLmNsb3NlKGkpLG59LHdyaXRlRmlsZShlLHQsbj17fSl7bi5mbGFncz1uLmZsYWdzfHw1Nzc7dmFyIGk9by5vcGVuKGUsbi5mbGFncyxuLm1vZGUpO2lmKHR5cGVvZiB0PT0ic3RyaW5nIil7dmFyIF89bmV3IFVpbnQ4QXJyYXkoSHQodCkrMSkscz16dCh0LF8sMCxfLmxlbmd0aCk7by53cml0ZShpLF8sMCxzLHZvaWQgMCxuLmNhbk93bil9ZWxzZSBpZihBcnJheUJ1ZmZlci5pc1ZpZXcodCkpby53cml0ZShpLHQsMCx0LmJ5dGVMZW5ndGgsdm9pZCAwLG4uY2FuT3duKTtlbHNlIHRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgZGF0YSB0eXBlIik7by5jbG9zZShpKX0sY3dkOigpPT5vLmN1cnJlbnRQYXRoLGNoZGlyKGUpe3ZhciB0PW8ubG9va3VwUGF0aChlLHtmb2xsb3c6ITB9KTtpZih0Lm5vZGU9PT1udWxsKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDQpO2lmKCFvLmlzRGlyKHQubm9kZS5tb2RlKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDU0KTt2YXIgbj1vLm5vZGVQZXJtaXNzaW9ucyh0Lm5vZGUsIngiKTtpZihuKXRocm93IG5ldyBvLkVycm5vRXJyb3Iobik7by5jdXJyZW50UGF0aD10LnBhdGh9LGNyZWF0ZURlZmF1bHREaXJlY3Rvcmllcygpe28ubWtkaXIoIi90bXAiKSxvLm1rZGlyKCIvaG9tZSIpLG8ubWtkaXIoIi9ob21lL3dlYl91c2VyIil9LGNyZWF0ZURlZmF1bHREZXZpY2VzKCl7by5ta2RpcigiL2RldiIpLG8ucmVnaXN0ZXJEZXZpY2Uoby5tYWtlZGV2KDEsMykse3JlYWQ6KCk9PjAsd3JpdGU6KGksXyxzLGYsaCk9PmZ9KSxvLm1rZGV2KCIvZGV2L251bGwiLG8ubWFrZWRldigxLDMpKSx6ZS5yZWdpc3RlcihvLm1ha2VkZXYoNSwwKSx6ZS5kZWZhdWx0X3R0eV9vcHMpLHplLnJlZ2lzdGVyKG8ubWFrZWRldig2LDApLHplLmRlZmF1bHRfdHR5MV9vcHMpLG8ubWtkZXYoIi9kZXYvdHR5IixvLm1ha2VkZXYoNSwwKSksby5ta2RldigiL2Rldi90dHkxIixvLm1ha2VkZXYoNiwwKSk7dmFyIGU9bmV3IFVpbnQ4QXJyYXkoMTAyNCksdD0wLG49KCk9Pih0PT09MCYmKHQ9dnIoZSkuYnl0ZUxlbmd0aCksZVstLXRdKTtvLmNyZWF0ZURldmljZSgiL2RldiIsInJhbmRvbSIsbiksby5jcmVhdGVEZXZpY2UoIi9kZXYiLCJ1cmFuZG9tIixuKSxvLm1rZGlyKCIvZGV2L3NobSIpLG8ubWtkaXIoIi9kZXYvc2htL3RtcCIpfSxjcmVhdGVTcGVjaWFsRGlyZWN0b3JpZXMoKXtvLm1rZGlyKCIvcHJvYyIpO3ZhciBlPW8ubWtkaXIoIi9wcm9jL3NlbGYiKTtvLm1rZGlyKCIvcHJvYy9zZWxmL2ZkIiksby5tb3VudCh7bW91bnQoKXt2YXIgdD1vLmNyZWF0ZU5vZGUoZSwiZmQiLDE2ODk1LDczKTtyZXR1cm4gdC5ub2RlX29wcz17bG9va3VwKG4saSl7dmFyIF89K2kscz1vLmdldFN0cmVhbUNoZWNrZWQoXyksZj17cGFyZW50Om51bGwsbW91bnQ6e21vdW50cG9pbnQ6ImZha2UifSxub2RlX29wczp7cmVhZGxpbms6KCk9PnMucGF0aH19O3JldHVybiBmLnBhcmVudD1mLGZ9fSx0fX0se30sIi9wcm9jL3NlbGYvZmQiKX0sY3JlYXRlU3RhbmRhcmRTdHJlYW1zKCl7ci5zdGRpbj9vLmNyZWF0ZURldmljZSgiL2RldiIsInN0ZGluIixyLnN0ZGluKTpvLnN5bWxpbmsoIi9kZXYvdHR5IiwiL2Rldi9zdGRpbiIpLHIuc3Rkb3V0P28uY3JlYXRlRGV2aWNlKCIvZGV2Iiwic3Rkb3V0IixudWxsLHIuc3Rkb3V0KTpvLnN5bWxpbmsoIi9kZXYvdHR5IiwiL2Rldi9zdGRvdXQiKSxyLnN0ZGVycj9vLmNyZWF0ZURldmljZSgiL2RldiIsInN0ZGVyciIsbnVsbCxyLnN0ZGVycik6by5zeW1saW5rKCIvZGV2L3R0eTEiLCIvZGV2L3N0ZGVyciIpLG8ub3BlbigiL2Rldi9zdGRpbiIsMCksby5vcGVuKCIvZGV2L3N0ZG91dCIsMSksby5vcGVuKCIvZGV2L3N0ZGVyciIsMSl9LHN0YXRpY0luaXQoKXtbNDRdLmZvckVhY2goZT0+e28uZ2VuZXJpY0Vycm9yc1tlXT1uZXcgby5FcnJub0Vycm9yKGUpLG8uZ2VuZXJpY0Vycm9yc1tlXS5zdGFjaz0iPGdlbmVyaWMgZXJyb3IsIG5vIHN0YWNrPiJ9KSxvLm5hbWVUYWJsZT1uZXcgQXJyYXkoNDA5Niksby5tb3VudChVLHt9LCIvIiksby5jcmVhdGVEZWZhdWx0RGlyZWN0b3JpZXMoKSxvLmNyZWF0ZURlZmF1bHREZXZpY2VzKCksby5jcmVhdGVTcGVjaWFsRGlyZWN0b3JpZXMoKSxvLmZpbGVzeXN0ZW1zPXtNRU1GUzpVfX0saW5pdChlLHQsbil7by5pbml0LmluaXRpYWxpemVkPSEwLHIuc3RkaW49ZXx8ci5zdGRpbixyLnN0ZG91dD10fHxyLnN0ZG91dCxyLnN0ZGVycj1ufHxyLnN0ZGVycixvLmNyZWF0ZVN0YW5kYXJkU3RyZWFtcygpfSxxdWl0KCl7by5pbml0LmluaXRpYWxpemVkPSExO2Zvcih2YXIgZT0wO2U8by5zdHJlYW1zLmxlbmd0aDtlKyspe3ZhciB0PW8uc3RyZWFtc1tlXTt0JiZvLmNsb3NlKHQpfX0sZmluZE9iamVjdChlLHQpe3ZhciBuPW8uYW5hbHl6ZVBhdGgoZSx0KTtyZXR1cm4gbi5leGlzdHM/bi5vYmplY3Q6bnVsbH0sYW5hbHl6ZVBhdGgoZSx0KXt0cnl7dmFyIG49by5sb29rdXBQYXRoKGUse2ZvbGxvdzohdH0pO2U9bi5wYXRofWNhdGNoe312YXIgaT17aXNSb290OiExLGV4aXN0czohMSxlcnJvcjowLG5hbWU6bnVsbCxwYXRoOm51bGwsb2JqZWN0Om51bGwscGFyZW50RXhpc3RzOiExLHBhcmVudFBhdGg6bnVsbCxwYXJlbnRPYmplY3Q6bnVsbH07dHJ5e3ZhciBuPW8ubG9va3VwUGF0aChlLHtwYXJlbnQ6ITB9KTtpLnBhcmVudEV4aXN0cz0hMCxpLnBhcmVudFBhdGg9bi5wYXRoLGkucGFyZW50T2JqZWN0PW4ubm9kZSxpLm5hbWU9Vy5iYXNlbmFtZShlKSxuPW8ubG9va3VwUGF0aChlLHtmb2xsb3c6IXR9KSxpLmV4aXN0cz0hMCxpLnBhdGg9bi5wYXRoLGkub2JqZWN0PW4ubm9kZSxpLm5hbWU9bi5ub2RlLm5hbWUsaS5pc1Jvb3Q9bi5wYXRoPT09Ii8ifWNhdGNoKF8pe2kuZXJyb3I9Xy5lcnJub31yZXR1cm4gaX0sY3JlYXRlUGF0aChlLHQsbixpKXtlPXR5cGVvZiBlPT0ic3RyaW5nIj9lOm8uZ2V0UGF0aChlKTtmb3IodmFyIF89dC5zcGxpdCgiLyIpLnJldmVyc2UoKTtfLmxlbmd0aDspe3ZhciBzPV8ucG9wKCk7aWYocyl7dmFyIGY9Vy5qb2luMihlLHMpO3RyeXtvLm1rZGlyKGYpfWNhdGNoe31lPWZ9fXJldHVybiBmfSxjcmVhdGVGaWxlKGUsdCxuLGksXyl7dmFyIHM9Vy5qb2luMih0eXBlb2YgZT09InN0cmluZyI/ZTpvLmdldFBhdGgoZSksdCksZj1MdChpLF8pO3JldHVybiBvLmNyZWF0ZShzLGYpfSxjcmVhdGVEYXRhRmlsZShlLHQsbixpLF8scyl7dmFyIGY9dDtlJiYoZT10eXBlb2YgZT09InN0cmluZyI/ZTpvLmdldFBhdGgoZSksZj10P1cuam9pbjIoZSx0KTplKTt2YXIgaD1MdChpLF8pLGc9by5jcmVhdGUoZixoKTtpZihuKXtpZih0eXBlb2Ygbj09InN0cmluZyIpe2Zvcih2YXIgdj1uZXcgQXJyYXkobi5sZW5ndGgpLHk9MCxBPW4ubGVuZ3RoO3k8QTsrK3kpdlt5XT1uLmNoYXJDb2RlQXQoeSk7bj12fW8uY2htb2QoZyxofDE0Nik7dmFyIGs9by5vcGVuKGcsNTc3KTtvLndyaXRlKGssbiwwLG4ubGVuZ3RoLDAscyksby5jbG9zZShrKSxvLmNobW9kKGcsaCl9fSxjcmVhdGVEZXZpY2UoZSx0LG4saSl7dmFyIF89Vy5qb2luMih0eXBlb2YgZT09InN0cmluZyI/ZTpvLmdldFBhdGgoZSksdCkscz1MdCghIW4sISFpKTtvLmNyZWF0ZURldmljZS5tYWpvcnx8KG8uY3JlYXRlRGV2aWNlLm1ham9yPTY0KTt2YXIgZj1vLm1ha2VkZXYoby5jcmVhdGVEZXZpY2UubWFqb3IrKywwKTtyZXR1cm4gby5yZWdpc3RlckRldmljZShmLHtvcGVuKGgpe2guc2Vla2FibGU9ITF9LGNsb3NlKGgpe3ZhciBnOyhnPWk9PW51bGw/dm9pZCAwOmkuYnVmZmVyKSE9bnVsbCYmZy5sZW5ndGgmJmkoMTApfSxyZWFkKGgsZyx2LHksQSl7Zm9yKHZhciBrPTAseD0wO3g8eTt4Kyspe3ZhciBUO3RyeXtUPW4oKX1jYXRjaHt0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI5KX1pZihUPT09dm9pZCAwJiZrPT09MCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDYpO2lmKFQ9PW51bGwpYnJlYWs7aysrLGdbdit4XT1UfXJldHVybiBrJiYoaC5ub2RlLnRpbWVzdGFtcD1EYXRlLm5vdygpKSxrfSx3cml0ZShoLGcsdix5LEEpe2Zvcih2YXIgaz0wO2s8eTtrKyspdHJ5e2koZ1t2K2tdKX1jYXRjaHt0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI5KX1yZXR1cm4geSYmKGgubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSksa319KSxvLm1rZGV2KF8scyxmKX0sZm9yY2VMb2FkRmlsZShlKXtpZihlLmlzRGV2aWNlfHxlLmlzRm9sZGVyfHxlLmxpbmt8fGUuY29udGVudHMpcmV0dXJuITA7aWYodHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1Iil0aHJvdyBuZXcgRXJyb3IoIkxhenkgbG9hZGluZyBzaG91bGQgaGF2ZSBiZWVuIHBlcmZvcm1lZCAoY29udGVudHMgc2V0KSBpbiBjcmVhdGVMYXp5RmlsZSwgYnV0IGl0IHdhcyBub3QuIExhenkgbG9hZGluZyBvbmx5IHdvcmtzIGluIHdlYiB3b3JrZXJzLiBVc2UgLS1lbWJlZC1maWxlIG9yIC0tcHJlbG9hZC1maWxlIGluIGVtY2Mgb24gdGhlIG1haW4gdGhyZWFkLiIpO2lmKEopdHJ5e2UuY29udGVudHM9Z3QoSihlLnVybCksITApLGUudXNlZEJ5dGVzPWUuY29udGVudHMubGVuZ3RofWNhdGNoe3Rocm93IG5ldyBvLkVycm5vRXJyb3IoMjkpfWVsc2UgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgbG9hZCB3aXRob3V0IHJlYWQoKSBvciBYTUxIdHRwUmVxdWVzdC4iKX0sY3JlYXRlTGF6eUZpbGUoZSx0LG4saSxfKXtjbGFzcyBze2NvbnN0cnVjdG9yKCl7dGhpcy5sZW5ndGhLbm93bj0hMSx0aGlzLmNodW5rcz1bXX1nZXQoeCl7aWYoISh4PnRoaXMubGVuZ3RoLTF8fHg8MCkpe3ZhciBUPXgldGhpcy5jaHVua1NpemUsSz14L3RoaXMuY2h1bmtTaXplfDA7cmV0dXJuIHRoaXMuZ2V0dGVyKEspW1RdfX1zZXREYXRhR2V0dGVyKHgpe3RoaXMuZ2V0dGVyPXh9Y2FjaGVMZW5ndGgoKXt2YXIgeD1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoeC5vcGVuKCJIRUFEIixuLCExKSx4LnNlbmQobnVsbCksISh4LnN0YXR1cz49MjAwJiZ4LnN0YXR1czwzMDB8fHguc3RhdHVzPT09MzA0KSl0aHJvdyBuZXcgRXJyb3IoIkNvdWxkbid0IGxvYWQgIituKyIuIFN0YXR1czogIit4LnN0YXR1cyk7dmFyIFQ9TnVtYmVyKHguZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtbGVuZ3RoIikpLEsscT0oSz14LmdldFJlc3BvbnNlSGVhZGVyKCJBY2NlcHQtUmFuZ2VzIikpJiZLPT09ImJ5dGVzIixHPShLPXguZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtRW5jb2RpbmciKSkmJks9PT0iZ3ppcCIscD0xMDI0KjEwMjQ7cXx8KHA9VCk7dmFyIEU9KE4sYWUpPT57aWYoTj5hZSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcmFuZ2UgKCIrTisiLCAiK2FlKyIpIG9yIG5vIGJ5dGVzIHJlcXVlc3RlZCEiKTtpZihhZT5ULTEpdGhyb3cgbmV3IEVycm9yKCJvbmx5ICIrVCsiIGJ5dGVzIGF2YWlsYWJsZSEgcHJvZ3JhbW1lciBlcnJvciEiKTt2YXIgWD1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoWC5vcGVuKCJHRVQiLG4sITEpLFQhPT1wJiZYLnNldFJlcXVlc3RIZWFkZXIoIlJhbmdlIiwiYnl0ZXM9IitOKyItIithZSksWC5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIixYLm92ZXJyaWRlTWltZVR5cGUmJlgub3ZlcnJpZGVNaW1lVHlwZSgidGV4dC9wbGFpbjsgY2hhcnNldD14LXVzZXItZGVmaW5lZCIpLFguc2VuZChudWxsKSwhKFguc3RhdHVzPj0yMDAmJlguc3RhdHVzPDMwMHx8WC5zdGF0dXM9PT0zMDQpKXRocm93IG5ldyBFcnJvcigiQ291bGRuJ3QgbG9hZCAiK24rIi4gU3RhdHVzOiAiK1guc3RhdHVzKTtyZXR1cm4gWC5yZXNwb25zZSE9PXZvaWQgMD9uZXcgVWludDhBcnJheShYLnJlc3BvbnNlfHxbXSk6Z3QoWC5yZXNwb25zZVRleHR8fCIiLCEwKX0sST10aGlzO0kuc2V0RGF0YUdldHRlcihOPT57dmFyIGFlPU4qcCxYPShOKzEpKnAtMTtpZihYPU1hdGgubWluKFgsVC0xKSx0eXBlb2YgSS5jaHVua3NbTl0+InUiJiYoSS5jaHVua3NbTl09RShhZSxYKSksdHlwZW9mIEkuY2h1bmtzW05dPiJ1Iil0aHJvdyBuZXcgRXJyb3IoImRvWEhSIGZhaWxlZCEiKTtyZXR1cm4gSS5jaHVua3NbTl19KSwoR3x8IVQpJiYocD1UPTEsVD10aGlzLmdldHRlcigwKS5sZW5ndGgscD1ULGhlKCJMYXp5RmlsZXMgb24gZ3ppcCBmb3JjZXMgZG93bmxvYWQgb2YgdGhlIHdob2xlIGZpbGUgd2hlbiBsZW5ndGggaXMgYWNjZXNzZWQiKSksdGhpcy5fbGVuZ3RoPVQsdGhpcy5fY2h1bmtTaXplPXAsdGhpcy5sZW5ndGhLbm93bj0hMH1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMubGVuZ3RoS25vd258fHRoaXMuY2FjaGVMZW5ndGgoKSx0aGlzLl9sZW5ndGh9Z2V0IGNodW5rU2l6ZSgpe3JldHVybiB0aGlzLmxlbmd0aEtub3dufHx0aGlzLmNhY2hlTGVuZ3RoKCksdGhpcy5fY2h1bmtTaXplfX1pZih0eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUiKXtpZighYil0aHJvdyJDYW5ub3QgZG8gc3luY2hyb25vdXMgYmluYXJ5IFhIUnMgb3V0c2lkZSB3ZWJ3b3JrZXJzIGluIG1vZGVybiBicm93c2Vycy4gVXNlIC0tZW1iZWQtZmlsZSBvciAtLXByZWxvYWQtZmlsZSBpbiBlbWNjIjt2YXIgZj1uZXcgcyxoPXtpc0RldmljZTohMSxjb250ZW50czpmfX1lbHNlIHZhciBoPXtpc0RldmljZTohMSx1cmw6bn07dmFyIGc9by5jcmVhdGVGaWxlKGUsdCxoLGksXyk7aC5jb250ZW50cz9nLmNvbnRlbnRzPWguY29udGVudHM6aC51cmwmJihnLmNvbnRlbnRzPW51bGwsZy51cmw9aC51cmwpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGcse3VzZWRCeXRlczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGVudHMubGVuZ3RofX19KTt2YXIgdj17fSx5PU9iamVjdC5rZXlzKGcuc3RyZWFtX29wcyk7eS5mb3JFYWNoKGs9Pnt2YXIgeD1nLnN0cmVhbV9vcHNba107dltrXT0oLi4uVCk9PihvLmZvcmNlTG9hZEZpbGUoZykseCguLi5UKSl9KTtmdW5jdGlvbiBBKGsseCxULEsscSl7dmFyIEc9ay5ub2RlLmNvbnRlbnRzO2lmKHE+PUcubGVuZ3RoKXJldHVybiAwO3ZhciBwPU1hdGgubWluKEcubGVuZ3RoLXEsSyk7aWYoRy5zbGljZSlmb3IodmFyIEU9MDtFPHA7RSsrKXhbVCtFXT1HW3ErRV07ZWxzZSBmb3IodmFyIEU9MDtFPHA7RSsrKXhbVCtFXT1HLmdldChxK0UpO3JldHVybiBwfXJldHVybiB2LnJlYWQ9KGsseCxULEsscSk9PihvLmZvcmNlTG9hZEZpbGUoZyksQShrLHgsVCxLLHEpKSx2Lm1tYXA9KGsseCxULEsscSk9PntvLmZvcmNlTG9hZEZpbGUoZyk7dmFyIEc9eXIoKTtpZighRyl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQ4KTtyZXR1cm4gQShrLGosRyx4LFQpLHtwdHI6RyxhbGxvY2F0ZWQ6ITB9fSxnLnN0cmVhbV9vcHM9dixnfX0scmU9e0RFRkFVTFRfUE9MTE1BU0s6NSxjYWxjdWxhdGVBdChlLHQsbil7aWYoVy5pc0Ficyh0KSlyZXR1cm4gdDt2YXIgaTtpZihlPT09LTEwMClpPW8uY3dkKCk7ZWxzZXt2YXIgXz1yZS5nZXRTdHJlYW1Gcm9tRkQoZSk7aT1fLnBhdGh9aWYodC5sZW5ndGg9PTApe2lmKCFuKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDQpO3JldHVybiBpfXJldHVybiBXLmpvaW4yKGksdCl9LGRvU3RhdChlLHQsbil7dmFyIGk9ZSh0KTtGW24+PjJdPWkuZGV2LEZbbis0Pj4yXT1pLm1vZGUsTVtuKzg+PjJdPWkubmxpbmssRltuKzEyPj4yXT1pLnVpZCxGW24rMTY+PjJdPWkuZ2lkLEZbbisyMD4+Ml09aS5yZGV2LHRlPVtpLnNpemU+Pj4wLChPPWkuc2l6ZSwrTWF0aC5hYnMoTyk+PTE/Tz4wPytNYXRoLmZsb29yKE8vNDI5NDk2NzI5Nik+Pj4wOn5+K01hdGguY2VpbCgoTy0rKH5+Tz4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLEZbbisyND4+Ml09dGVbMF0sRltuKzI4Pj4yXT10ZVsxXSxGW24rMzI+PjJdPTQwOTYsRltuKzM2Pj4yXT1pLmJsb2Nrczt2YXIgXz1pLmF0aW1lLmdldFRpbWUoKSxzPWkubXRpbWUuZ2V0VGltZSgpLGY9aS5jdGltZS5nZXRUaW1lKCk7cmV0dXJuIHRlPVtNYXRoLmZsb29yKF8vMWUzKT4+PjAsKE89TWF0aC5mbG9vcihfLzFlMyksK01hdGguYWJzKE8pPj0xP08+MD8rTWF0aC5mbG9vcihPLzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKE8tKyh+fk8+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxGW24rNDA+PjJdPXRlWzBdLEZbbis0ND4+Ml09dGVbMV0sTVtuKzQ4Pj4yXT1fJTFlMyoxZTMsdGU9W01hdGguZmxvb3Iocy8xZTMpPj4+MCwoTz1NYXRoLmZsb29yKHMvMWUzKSwrTWF0aC5hYnMoTyk+PTE/Tz4wPytNYXRoLmZsb29yKE8vNDI5NDk2NzI5Nik+Pj4wOn5+K01hdGguY2VpbCgoTy0rKH5+Tz4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLEZbbis1Nj4+Ml09dGVbMF0sRltuKzYwPj4yXT10ZVsxXSxNW24rNjQ+PjJdPXMlMWUzKjFlMyx0ZT1bTWF0aC5mbG9vcihmLzFlMyk+Pj4wLChPPU1hdGguZmxvb3IoZi8xZTMpLCtNYXRoLmFicyhPKT49MT9PPjA/K01hdGguZmxvb3IoTy80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChPLSsofn5PPj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0sRltuKzcyPj4yXT10ZVswXSxGW24rNzY+PjJdPXRlWzFdLE1bbis4MD4+Ml09ZiUxZTMqMWUzLHRlPVtpLmlubz4+PjAsKE89aS5pbm8sK01hdGguYWJzKE8pPj0xP08+MD8rTWF0aC5mbG9vcihPLzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKE8tKyh+fk8+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxGW24rODg+PjJdPXRlWzBdLEZbbis5Mj4+Ml09dGVbMV0sMH0sZG9Nc3luYyhlLHQsbixpLF8pe2lmKCFvLmlzRmlsZSh0Lm5vZGUubW9kZSkpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig0Myk7aWYoaSYyKXJldHVybiAwO3ZhciBzPVkuc2xpY2UoZSxlK24pO28ubXN5bmModCxzLF8sbixpKX0sZ2V0U3RyZWFtRnJvbUZEKGUpe3ZhciB0PW8uZ2V0U3RyZWFtQ2hlY2tlZChlKTtyZXR1cm4gdH0sdmFyYXJnczp2b2lkIDAsZ2V0U3RyKGUpe3ZhciB0PUhlKGUpO3JldHVybiB0fX07ZnVuY3Rpb24gTm4oZSx0LG4pe3JlLnZhcmFyZ3M9bjt0cnl7dmFyIGk9cmUuZ2V0U3RyZWFtRnJvbUZEKGUpO3N3aXRjaCh0KXtjYXNlIDA6e3ZhciBfPW10KCk7aWYoXzwwKXJldHVybi0yODtmb3IoO28uc3RyZWFtc1tfXTspXysrO3ZhciBzO3JldHVybiBzPW8uZHVwU3RyZWFtKGksXykscy5mZH1jYXNlIDE6Y2FzZSAyOnJldHVybiAwO2Nhc2UgMzpyZXR1cm4gaS5mbGFncztjYXNlIDQ6e3ZhciBfPW10KCk7cmV0dXJuIGkuZmxhZ3N8PV8sMH1jYXNlIDEyOnt2YXIgXz1WZSgpLGY9MDtyZXR1cm4gZ2VbXytmPj4xXT0yLDB9Y2FzZSAxMzpjYXNlIDE0OnJldHVybiAwfXJldHVybi0yOH1jYXRjaChoKXtpZih0eXBlb2Ygbz4idSJ8fGgubmFtZSE9PSJFcnJub0Vycm9yIil0aHJvdyBoO3JldHVybi1oLmVycm5vfX1mdW5jdGlvbiBXbihlLHQsbil7cmUudmFyYXJncz1uO3RyeXt2YXIgaT1yZS5nZXRTdHJlYW1Gcm9tRkQoZSk7c3dpdGNoKHQpe2Nhc2UgMjE1MDk6cmV0dXJuIGkudHR5PzA6LTU5O2Nhc2UgMjE1MDU6e2lmKCFpLnR0eSlyZXR1cm4tNTk7aWYoaS50dHkub3BzLmlvY3RsX3RjZ2V0cyl7dmFyIF89aS50dHkub3BzLmlvY3RsX3RjZ2V0cyhpKSxzPVZlKCk7RltzPj4yXT1fLmNfaWZsYWd8fDAsRltzKzQ+PjJdPV8uY19vZmxhZ3x8MCxGW3MrOD4+Ml09Xy5jX2NmbGFnfHwwLEZbcysxMj4+Ml09Xy5jX2xmbGFnfHwwO2Zvcih2YXIgZj0wO2Y8MzI7ZisrKWpbcytmKzE3XT1fLmNfY2NbZl18fDA7cmV0dXJuIDB9cmV0dXJuIDB9Y2FzZSAyMTUxMDpjYXNlIDIxNTExOmNhc2UgMjE1MTI6cmV0dXJuIGkudHR5PzA6LTU5O2Nhc2UgMjE1MDY6Y2FzZSAyMTUwNzpjYXNlIDIxNTA4OntpZighaS50dHkpcmV0dXJuLTU5O2lmKGkudHR5Lm9wcy5pb2N0bF90Y3NldHMpe2Zvcih2YXIgcz1WZSgpLGg9RltzPj4yXSxnPUZbcys0Pj4yXSx2PUZbcys4Pj4yXSx5PUZbcysxMj4+Ml0sQT1bXSxmPTA7ZjwzMjtmKyspQS5wdXNoKGpbcytmKzE3XSk7cmV0dXJuIGkudHR5Lm9wcy5pb2N0bF90Y3NldHMoaS50dHksdCx7Y19pZmxhZzpoLGNfb2ZsYWc6ZyxjX2NmbGFnOnYsY19sZmxhZzp5LGNfY2M6QX0pfXJldHVybiAwfWNhc2UgMjE1MTk6e2lmKCFpLnR0eSlyZXR1cm4tNTk7dmFyIHM9VmUoKTtyZXR1cm4gRltzPj4yXT0wLDB9Y2FzZSAyMTUyMDpyZXR1cm4gaS50dHk/LTI4Oi01OTtjYXNlIDIxNTMxOnt2YXIgcz1WZSgpO3JldHVybiBvLmlvY3RsKGksdCxzKX1jYXNlIDIxNTIzOntpZighaS50dHkpcmV0dXJuLTU5O2lmKGkudHR5Lm9wcy5pb2N0bF90aW9jZ3dpbnN6KXt2YXIgaz1pLnR0eS5vcHMuaW9jdGxfdGlvY2d3aW5zeihpLnR0eSkscz1WZSgpO2dlW3M+PjFdPWtbMF0sZ2VbcysyPj4xXT1rWzFdfXJldHVybiAwfWNhc2UgMjE1MjQ6cmV0dXJuIGkudHR5PzA6LTU5O2Nhc2UgMjE1MTU6cmV0dXJuIGkudHR5PzA6LTU5O2RlZmF1bHQ6cmV0dXJuLTI4fX1jYXRjaCh4KXtpZih0eXBlb2Ygbz4idSJ8fHgubmFtZSE9PSJFcnJub0Vycm9yIil0aHJvdyB4O3JldHVybi14LmVycm5vfX1mdW5jdGlvbiBCbihlLHQsbixpKXtyZS52YXJhcmdzPWk7dHJ5e3Q9cmUuZ2V0U3RyKHQpLHQ9cmUuY2FsY3VsYXRlQXQoZSx0KTt2YXIgXz1pP210KCk6MDtyZXR1cm4gby5vcGVuKHQsbixfKS5mZH1jYXRjaChzKXtpZih0eXBlb2Ygbz4idSJ8fHMubmFtZSE9PSJFcnJub0Vycm9yIil0aHJvdyBzO3JldHVybi1zLmVycm5vfX1mdW5jdGlvbiBxbihlLHQsbil7dHJ5e3JldHVybiB0PXJlLmdldFN0cih0KSx0PXJlLmNhbGN1bGF0ZUF0KGUsdCksbj09PTA/by51bmxpbmsodCk6bj09PTUxMj9vLnJtZGlyKHQpOkRlKCJJbnZhbGlkIGZsYWdzIHBhc3NlZCB0byB1bmxpbmthdCIpLDB9Y2F0Y2goaSl7aWYodHlwZW9mIG8+InUifHxpLm5hbWUhPT0iRXJybm9FcnJvciIpdGhyb3cgaTtyZXR1cm4taS5lcnJub319dmFyIEduPSgpPT57RGUoIiIpfSxwdD17fSxOdD1lPT57Zm9yKDtlLmxlbmd0aDspe3ZhciB0PWUucG9wKCksbj1lLnBvcCgpO24odCl9fTtmdW5jdGlvbiBydChlKXtyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUoTVtlPj4yXSl9dmFyIFllPXt9LExlPXt9LHZ0PXt9LHdyLHl0PWU9Pnt0aHJvdyBuZXcgd3IoZSl9LFd0PShlLHQsbik9PntlLmZvckVhY2goZnVuY3Rpb24oaCl7dnRbaF09dH0pO2Z1bmN0aW9uIGkoaCl7dmFyIGc9bihoKTtnLmxlbmd0aCE9PWUubGVuZ3RoJiZ5dCgiTWlzbWF0Y2hlZCB0eXBlIGNvbnZlcnRlciBjb3VudCIpO2Zvcih2YXIgdj0wO3Y8ZS5sZW5ndGg7Kyt2KXllKGVbdl0sZ1t2XSl9dmFyIF89bmV3IEFycmF5KHQubGVuZ3RoKSxzPVtdLGY9MDt0LmZvckVhY2goKGgsZyk9PntMZS5oYXNPd25Qcm9wZXJ0eShoKT9fW2ddPUxlW2hdOihzLnB1c2goaCksWWUuaGFzT3duUHJvcGVydHkoaCl8fChZZVtoXT1bXSksWWVbaF0ucHVzaCgoKT0+e19bZ109TGVbaF0sKytmLGY9PT1zLmxlbmd0aCYmaShfKX0pKX0pLHMubGVuZ3RoPT09MCYmaShfKX0sVm49ZT0+e3ZhciB0PXB0W2VdO2RlbGV0ZSBwdFtlXTt2YXIgbj10LnJhd0NvbnN0cnVjdG9yLGk9dC5yYXdEZXN0cnVjdG9yLF89dC5maWVsZHMscz1fLm1hcChmPT5mLmdldHRlclJldHVyblR5cGUpLmNvbmNhdChfLm1hcChmPT5mLnNldHRlckFyZ3VtZW50VHlwZSkpO1d0KFtlXSxzLGY9Pnt2YXIgaD17fTtyZXR1cm4gXy5mb3JFYWNoKChnLHYpPT57dmFyIHk9Zy5maWVsZE5hbWUsQT1mW3ZdLGs9Zy5nZXR0ZXIseD1nLmdldHRlckNvbnRleHQsVD1mW3YrXy5sZW5ndGhdLEs9Zy5zZXR0ZXIscT1nLnNldHRlckNvbnRleHQ7aFt5XT17cmVhZDpHPT5BLmZyb21XaXJlVHlwZShrKHgsRykpLHdyaXRlOihHLHApPT57dmFyIEU9W107SyhxLEcsVC50b1dpcmVUeXBlKEUscCkpLE50KEUpfX19KSxbe25hbWU6dC5uYW1lLGZyb21XaXJlVHlwZTpnPT57dmFyIHY9e307Zm9yKHZhciB5IGluIGgpdlt5XT1oW3ldLnJlYWQoZyk7cmV0dXJuIGkoZyksdn0sdG9XaXJlVHlwZTooZyx2KT0+e2Zvcih2YXIgeSBpbiBoKWlmKCEoeSBpbiB2KSl0aHJvdyBuZXcgVHlwZUVycm9yKGBNaXNzaW5nIGZpZWxkOiAiJHt5fSJgKTt2YXIgQT1uKCk7Zm9yKHkgaW4gaCloW3ldLndyaXRlKEEsdlt5XSk7cmV0dXJuIGchPT1udWxsJiZnLnB1c2goaSxBKSxBfSxhcmdQYWNrQWR2YW5jZTp3ZSxyZWFkVmFsdWVGcm9tUG9pbnRlcjpydCxkZXN0cnVjdG9yRnVuY3Rpb246aX1dfSl9LFluPShlLHQsbixpLF8pPT57fSxYbj0oKT0+e2Zvcih2YXIgZT1uZXcgQXJyYXkoMjU2KSx0PTA7dDwyNTY7Kyt0KWVbdF09U3RyaW5nLmZyb21DaGFyQ29kZSh0KTticj1lfSxicixuZT1lPT57Zm9yKHZhciB0PSIiLG49ZTtZW25dOyl0Kz1icltZW24rK11dO3JldHVybiB0fSxudCx6PWU9Pnt0aHJvdyBuZXcgbnQoZSl9O2Z1bmN0aW9uIEpuKGUsdCxuPXt9KXt2YXIgaT10Lm5hbWU7aWYoZXx8eihgdHlwZSAiJHtpfSIgbXVzdCBoYXZlIGEgcG9zaXRpdmUgaW50ZWdlciB0eXBlaWQgcG9pbnRlcmApLExlLmhhc093blByb3BlcnR5KGUpKXtpZihuLmlnbm9yZUR1cGxpY2F0ZVJlZ2lzdHJhdGlvbnMpcmV0dXJuO3ooYENhbm5vdCByZWdpc3RlciB0eXBlICcke2l9JyB0d2ljZWApfWlmKExlW2VdPXQsZGVsZXRlIHZ0W2VdLFllLmhhc093blByb3BlcnR5KGUpKXt2YXIgXz1ZZVtlXTtkZWxldGUgWWVbZV0sXy5mb3JFYWNoKHM9PnMoKSl9fWZ1bmN0aW9uIHllKGUsdCxuPXt9KXtpZighKCJhcmdQYWNrQWR2YW5jZSJpbiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWdpc3RlclR5cGUgcmVnaXN0ZXJlZEluc3RhbmNlIHJlcXVpcmVzIGFyZ1BhY2tBZHZhbmNlIik7cmV0dXJuIEpuKGUsdCxuKX12YXIgd2U9OCxLbj0oZSx0LG4saSk9Pnt0PW5lKHQpLHllKGUse25hbWU6dCxmcm9tV2lyZVR5cGU6ZnVuY3Rpb24oXyl7cmV0dXJuISFffSx0b1dpcmVUeXBlOmZ1bmN0aW9uKF8scyl7cmV0dXJuIHM/bjppfSxhcmdQYWNrQWR2YW5jZTp3ZSxyZWFkVmFsdWVGcm9tUG9pbnRlcjpmdW5jdGlvbihfKXtyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUoWVtfXSl9LGRlc3RydWN0b3JGdW5jdGlvbjpudWxsfSl9LFpuPWU9Pih7Y291bnQ6ZS5jb3VudCxkZWxldGVTY2hlZHVsZWQ6ZS5kZWxldGVTY2hlZHVsZWQscHJlc2VydmVQb2ludGVyT25EZWxldGU6ZS5wcmVzZXJ2ZVBvaW50ZXJPbkRlbGV0ZSxwdHI6ZS5wdHIscHRyVHlwZTplLnB0clR5cGUsc21hcnRQdHI6ZS5zbWFydFB0cixzbWFydFB0clR5cGU6ZS5zbWFydFB0clR5cGV9KSxCdD1lPT57ZnVuY3Rpb24gdChuKXtyZXR1cm4gbi4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcy5uYW1lfXoodChlKSsiIGluc3RhbmNlIGFscmVhZHkgZGVsZXRlZCIpfSxxdD0hMSxFcj1lPT57fSxRbj1lPT57ZS5zbWFydFB0cj9lLnNtYXJ0UHRyVHlwZS5yYXdEZXN0cnVjdG9yKGUuc21hcnRQdHIpOmUucHRyVHlwZS5yZWdpc3RlcmVkQ2xhc3MucmF3RGVzdHJ1Y3RvcihlLnB0cil9LGtyPWU9PntlLmNvdW50LnZhbHVlLT0xO3ZhciB0PWUuY291bnQudmFsdWU9PT0wO3QmJlFuKGUpfSx4cj0oZSx0LG4pPT57aWYodD09PW4pcmV0dXJuIGU7aWYobi5iYXNlQ2xhc3M9PT12b2lkIDApcmV0dXJuIG51bGw7dmFyIGk9eHIoZSx0LG4uYmFzZUNsYXNzKTtyZXR1cm4gaT09PW51bGw/bnVsbDpuLmRvd25jYXN0KGkpfSxQcj17fSxlaT0oKT0+T2JqZWN0LmtleXMob3QpLmxlbmd0aCx0aT0oKT0+e3ZhciBlPVtdO2Zvcih2YXIgdCBpbiBvdClvdC5oYXNPd25Qcm9wZXJ0eSh0KSYmZS5wdXNoKG90W3RdKTtyZXR1cm4gZX0saXQ9W10sR3Q9KCk9Pntmb3IoO2l0Lmxlbmd0aDspe3ZhciBlPWl0LnBvcCgpO2UuJCQuZGVsZXRlU2NoZWR1bGVkPSExLGUuZGVsZXRlKCl9fSxhdCxyaT1lPT57YXQ9ZSxpdC5sZW5ndGgmJmF0JiZhdChHdCl9LG5pPSgpPT57ci5nZXRJbmhlcml0ZWRJbnN0YW5jZUNvdW50PWVpLHIuZ2V0TGl2ZUluaGVyaXRlZEluc3RhbmNlcz10aSxyLmZsdXNoUGVuZGluZ0RlbGV0ZXM9R3Qsci5zZXREZWxheUZ1bmN0aW9uPXJpfSxvdD17fSxpaT0oZSx0KT0+e2Zvcih0PT09dm9pZCAwJiZ6KCJwdHIgc2hvdWxkIG5vdCBiZSB1bmRlZmluZWQiKTtlLmJhc2VDbGFzczspdD1lLnVwY2FzdCh0KSxlPWUuYmFzZUNsYXNzO3JldHVybiB0fSxhaT0oZSx0KT0+KHQ9aWkoZSx0KSxvdFt0XSksd3Q9KGUsdCk9PnsoIXQucHRyVHlwZXx8IXQucHRyKSYmeXQoIm1ha2VDbGFzc0hhbmRsZSByZXF1aXJlcyBwdHIgYW5kIHB0clR5cGUiKTt2YXIgbj0hIXQuc21hcnRQdHJUeXBlLGk9ISF0LnNtYXJ0UHRyO3JldHVybiBuIT09aSYmeXQoIkJvdGggc21hcnRQdHJUeXBlIGFuZCBzbWFydFB0ciBtdXN0IGJlIHNwZWNpZmllZCIpLHQuY291bnQ9e3ZhbHVlOjF9LF90KE9iamVjdC5jcmVhdGUoZSx7JCQ6e3ZhbHVlOnQsd3JpdGFibGU6ITB9fSkpfTtmdW5jdGlvbiBvaShlKXt2YXIgdD10aGlzLmdldFBvaW50ZWUoZSk7aWYoIXQpcmV0dXJuIHRoaXMuZGVzdHJ1Y3RvcihlKSxudWxsO3ZhciBuPWFpKHRoaXMucmVnaXN0ZXJlZENsYXNzLHQpO2lmKG4hPT12b2lkIDApe2lmKG4uJCQuY291bnQudmFsdWU9PT0wKXJldHVybiBuLiQkLnB0cj10LG4uJCQuc21hcnRQdHI9ZSxuLmNsb25lKCk7dmFyIGk9bi5jbG9uZSgpO3JldHVybiB0aGlzLmRlc3RydWN0b3IoZSksaX1mdW5jdGlvbiBfKCl7cmV0dXJuIHRoaXMuaXNTbWFydFBvaW50ZXI/d3QodGhpcy5yZWdpc3RlcmVkQ2xhc3MuaW5zdGFuY2VQcm90b3R5cGUse3B0clR5cGU6dGhpcy5wb2ludGVlVHlwZSxwdHI6dCxzbWFydFB0clR5cGU6dGhpcyxzbWFydFB0cjplfSk6d3QodGhpcy5yZWdpc3RlcmVkQ2xhc3MuaW5zdGFuY2VQcm90b3R5cGUse3B0clR5cGU6dGhpcyxwdHI6ZX0pfXZhciBzPXRoaXMucmVnaXN0ZXJlZENsYXNzLmdldEFjdHVhbFR5cGUodCksZj1QcltzXTtpZighZilyZXR1cm4gXy5jYWxsKHRoaXMpO3ZhciBoO3RoaXMuaXNDb25zdD9oPWYuY29uc3RQb2ludGVyVHlwZTpoPWYucG9pbnRlclR5cGU7dmFyIGc9eHIodCx0aGlzLnJlZ2lzdGVyZWRDbGFzcyxoLnJlZ2lzdGVyZWRDbGFzcyk7cmV0dXJuIGc9PT1udWxsP18uY2FsbCh0aGlzKTp0aGlzLmlzU21hcnRQb2ludGVyP3d0KGgucmVnaXN0ZXJlZENsYXNzLmluc3RhbmNlUHJvdG90eXBlLHtwdHJUeXBlOmgscHRyOmcsc21hcnRQdHJUeXBlOnRoaXMsc21hcnRQdHI6ZX0pOnd0KGgucmVnaXN0ZXJlZENsYXNzLmluc3RhbmNlUHJvdG90eXBlLHtwdHJUeXBlOmgscHRyOmd9KX12YXIgX3Q9ZT0+dHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5PiJ1Ij8oX3Q9dD0+dCxlKToocXQ9bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KHQ9Pntrcih0LiQkKX0pLF90PXQ9Pnt2YXIgbj10LiQkLGk9ISFuLnNtYXJ0UHRyO2lmKGkpe3ZhciBfPXskJDpufTtxdC5yZWdpc3Rlcih0LF8sdCl9cmV0dXJuIHR9LEVyPXQ9PnF0LnVucmVnaXN0ZXIodCksX3QoZSkpLF9pPSgpPT57T2JqZWN0LmFzc2lnbihidC5wcm90b3R5cGUse2lzQWxpYXNPZihlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBidCl8fCEoZSBpbnN0YW5jZW9mIGJ0KSlyZXR1cm4hMTt2YXIgdD10aGlzLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLG49dGhpcy4kJC5wdHI7ZS4kJD1lLiQkO2Zvcih2YXIgaT1lLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLF89ZS4kJC5wdHI7dC5iYXNlQ2xhc3M7KW49dC51cGNhc3QobiksdD10LmJhc2VDbGFzcztmb3IoO2kuYmFzZUNsYXNzOylfPWkudXBjYXN0KF8pLGk9aS5iYXNlQ2xhc3M7cmV0dXJuIHQ9PT1pJiZuPT09X30sY2xvbmUoKXtpZih0aGlzLiQkLnB0cnx8QnQodGhpcyksdGhpcy4kJC5wcmVzZXJ2ZVBvaW50ZXJPbkRlbGV0ZSlyZXR1cm4gdGhpcy4kJC5jb3VudC52YWx1ZSs9MSx0aGlzO3ZhciBlPV90KE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLHskJDp7dmFsdWU6Wm4odGhpcy4kJCl9fSkpO3JldHVybiBlLiQkLmNvdW50LnZhbHVlKz0xLGUuJCQuZGVsZXRlU2NoZWR1bGVkPSExLGV9LGRlbGV0ZSgpe3RoaXMuJCQucHRyfHxCdCh0aGlzKSx0aGlzLiQkLmRlbGV0ZVNjaGVkdWxlZCYmIXRoaXMuJCQucHJlc2VydmVQb2ludGVyT25EZWxldGUmJnooIk9iamVjdCBhbHJlYWR5IHNjaGVkdWxlZCBmb3IgZGVsZXRpb24iKSxFcih0aGlzKSxrcih0aGlzLiQkKSx0aGlzLiQkLnByZXNlcnZlUG9pbnRlck9uRGVsZXRlfHwodGhpcy4kJC5zbWFydFB0cj12b2lkIDAsdGhpcy4kJC5wdHI9dm9pZCAwKX0saXNEZWxldGVkKCl7cmV0dXJuIXRoaXMuJCQucHRyfSxkZWxldGVMYXRlcigpe3JldHVybiB0aGlzLiQkLnB0cnx8QnQodGhpcyksdGhpcy4kJC5kZWxldGVTY2hlZHVsZWQmJiF0aGlzLiQkLnByZXNlcnZlUG9pbnRlck9uRGVsZXRlJiZ6KCJPYmplY3QgYWxyZWFkeSBzY2hlZHVsZWQgZm9yIGRlbGV0aW9uIiksaXQucHVzaCh0aGlzKSxpdC5sZW5ndGg9PT0xJiZhdCYmYXQoR3QpLHRoaXMuJCQuZGVsZXRlU2NoZWR1bGVkPSEwLHRoaXN9fSl9O2Z1bmN0aW9uIGJ0KCl7fXZhciBzdD0oZSx0KT0+T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIm5hbWUiLHt2YWx1ZTplfSksc2k9KGUsdCxuKT0+e2lmKGVbdF0ub3ZlcmxvYWRUYWJsZT09PXZvaWQgMCl7dmFyIGk9ZVt0XTtlW3RdPWZ1bmN0aW9uKC4uLl8pe3JldHVybiBlW3RdLm92ZXJsb2FkVGFibGUuaGFzT3duUHJvcGVydHkoXy5sZW5ndGgpfHx6KGBGdW5jdGlvbiAnJHtufScgY2FsbGVkIHdpdGggYW4gaW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzICgke18ubGVuZ3RofSkgLSBleHBlY3RzIG9uZSBvZiAoJHtlW3RdLm92ZXJsb2FkVGFibGV9KSFgKSxlW3RdLm92ZXJsb2FkVGFibGVbXy5sZW5ndGhdLmFwcGx5KHRoaXMsXyl9LGVbdF0ub3ZlcmxvYWRUYWJsZT1bXSxlW3RdLm92ZXJsb2FkVGFibGVbaS5hcmdDb3VudF09aX19LFZ0PShlLHQsbik9PntyLmhhc093blByb3BlcnR5KGUpPygobj09PXZvaWQgMHx8cltlXS5vdmVybG9hZFRhYmxlIT09dm9pZCAwJiZyW2VdLm92ZXJsb2FkVGFibGVbbl0hPT12b2lkIDApJiZ6KGBDYW5ub3QgcmVnaXN0ZXIgcHVibGljIG5hbWUgJyR7ZX0nIHR3aWNlYCksc2kocixlLGUpLHIuaGFzT3duUHJvcGVydHkobikmJnooYENhbm5vdCByZWdpc3RlciBtdWx0aXBsZSBvdmVybG9hZHMgb2YgYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIG51bWJlciBvZiBhcmd1bWVudHMgKCR7bn0pIWApLHJbZV0ub3ZlcmxvYWRUYWJsZVtuXT10KToocltlXT10LG4hPT12b2lkIDAmJihyW2VdLm51bUFyZ3VtZW50cz1uKSl9LGxpPTQ4LGZpPTU3LGhpPWU9PntpZihlPT09dm9pZCAwKXJldHVybiJfdW5rbm93biI7ZT1lLnJlcGxhY2UoL1teYS16QS1aMC05X10vZywiJCIpO3ZhciB0PWUuY2hhckNvZGVBdCgwKTtyZXR1cm4gdD49bGkmJnQ8PWZpP2BfJHtlfWA6ZX07ZnVuY3Rpb24gY2koZSx0LG4saSxfLHMsZixoKXt0aGlzLm5hbWU9ZSx0aGlzLmNvbnN0cnVjdG9yPXQsdGhpcy5pbnN0YW5jZVByb3RvdHlwZT1uLHRoaXMucmF3RGVzdHJ1Y3Rvcj1pLHRoaXMuYmFzZUNsYXNzPV8sdGhpcy5nZXRBY3R1YWxUeXBlPXMsdGhpcy51cGNhc3Q9Zix0aGlzLmRvd25jYXN0PWgsdGhpcy5wdXJlVmlydHVhbEZ1bmN0aW9ucz1bXX12YXIgWXQ9KGUsdCxuKT0+e2Zvcig7dCE9PW47KXQudXBjYXN0fHx6KGBFeHBlY3RlZCBudWxsIG9yIGluc3RhbmNlIG9mICR7bi5uYW1lfSwgZ290IGFuIGluc3RhbmNlIG9mICR7dC5uYW1lfWApLGU9dC51cGNhc3QoZSksdD10LmJhc2VDbGFzcztyZXR1cm4gZX07ZnVuY3Rpb24gZGkoZSx0KXtpZih0PT09bnVsbClyZXR1cm4gdGhpcy5pc1JlZmVyZW5jZSYmeihgbnVsbCBpcyBub3QgYSB2YWxpZCAke3RoaXMubmFtZX1gKSwwO3QuJCR8fHooYENhbm5vdCBwYXNzICIke1p0KHQpfSIgYXMgYSAke3RoaXMubmFtZX1gKSx0LiQkLnB0cnx8eihgQ2Fubm90IHBhc3MgZGVsZXRlZCBvYmplY3QgYXMgYSBwb2ludGVyIG9mIHR5cGUgJHt0aGlzLm5hbWV9YCk7dmFyIG49dC4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcyxpPVl0KHQuJCQucHRyLG4sdGhpcy5yZWdpc3RlcmVkQ2xhc3MpO3JldHVybiBpfWZ1bmN0aW9uIHVpKGUsdCl7dmFyIG47aWYodD09PW51bGwpcmV0dXJuIHRoaXMuaXNSZWZlcmVuY2UmJnooYG51bGwgaXMgbm90IGEgdmFsaWQgJHt0aGlzLm5hbWV9YCksdGhpcy5pc1NtYXJ0UG9pbnRlcj8obj10aGlzLnJhd0NvbnN0cnVjdG9yKCksZSE9PW51bGwmJmUucHVzaCh0aGlzLnJhd0Rlc3RydWN0b3Isbiksbik6MDsoIXR8fCF0LiQkKSYmeihgQ2Fubm90IHBhc3MgIiR7WnQodCl9IiBhcyBhICR7dGhpcy5uYW1lfWApLHQuJCQucHRyfHx6KGBDYW5ub3QgcGFzcyBkZWxldGVkIG9iamVjdCBhcyBhIHBvaW50ZXIgb2YgdHlwZSAke3RoaXMubmFtZX1gKSwhdGhpcy5pc0NvbnN0JiZ0LiQkLnB0clR5cGUuaXNDb25zdCYmeihgQ2Fubm90IGNvbnZlcnQgYXJndW1lbnQgb2YgdHlwZSAke3QuJCQuc21hcnRQdHJUeXBlP3QuJCQuc21hcnRQdHJUeXBlLm5hbWU6dC4kJC5wdHJUeXBlLm5hbWV9IHRvIHBhcmFtZXRlciB0eXBlICR7dGhpcy5uYW1lfWApO3ZhciBpPXQuJCQucHRyVHlwZS5yZWdpc3RlcmVkQ2xhc3M7aWYobj1ZdCh0LiQkLnB0cixpLHRoaXMucmVnaXN0ZXJlZENsYXNzKSx0aGlzLmlzU21hcnRQb2ludGVyKXN3aXRjaCh0LiQkLnNtYXJ0UHRyPT09dm9pZCAwJiZ6KCJQYXNzaW5nIHJhdyBwb2ludGVyIHRvIHNtYXJ0IHBvaW50ZXIgaXMgaWxsZWdhbCIpLHRoaXMuc2hhcmluZ1BvbGljeSl7Y2FzZSAwOnQuJCQuc21hcnRQdHJUeXBlPT09dGhpcz9uPXQuJCQuc21hcnRQdHI6eihgQ2Fubm90IGNvbnZlcnQgYXJndW1lbnQgb2YgdHlwZSAke3QuJCQuc21hcnRQdHJUeXBlP3QuJCQuc21hcnRQdHJUeXBlLm5hbWU6dC4kJC5wdHJUeXBlLm5hbWV9IHRvIHBhcmFtZXRlciB0eXBlICR7dGhpcy5uYW1lfWApO2JyZWFrO2Nhc2UgMTpuPXQuJCQuc21hcnRQdHI7YnJlYWs7Y2FzZSAyOmlmKHQuJCQuc21hcnRQdHJUeXBlPT09dGhpcyluPXQuJCQuc21hcnRQdHI7ZWxzZXt2YXIgXz10LmNsb25lKCk7bj10aGlzLnJhd1NoYXJlKG4sc2UudG9IYW5kbGUoKCk9Pl8uZGVsZXRlKCkpKSxlIT09bnVsbCYmZS5wdXNoKHRoaXMucmF3RGVzdHJ1Y3RvcixuKX1icmVhaztkZWZhdWx0OnooIlVuc3VwcG9ydGluZyBzaGFyaW5nIHBvbGljeSIpfXJldHVybiBufWZ1bmN0aW9uIG1pKGUsdCl7aWYodD09PW51bGwpcmV0dXJuIHRoaXMuaXNSZWZlcmVuY2UmJnooYG51bGwgaXMgbm90IGEgdmFsaWQgJHt0aGlzLm5hbWV9YCksMDt0LiQkfHx6KGBDYW5ub3QgcGFzcyAiJHtadCh0KX0iIGFzIGEgJHt0aGlzLm5hbWV9YCksdC4kJC5wdHJ8fHooYENhbm5vdCBwYXNzIGRlbGV0ZWQgb2JqZWN0IGFzIGEgcG9pbnRlciBvZiB0eXBlICR7dGhpcy5uYW1lfWApLHQuJCQucHRyVHlwZS5pc0NvbnN0JiZ6KGBDYW5ub3QgY29udmVydCBhcmd1bWVudCBvZiB0eXBlICR7dC4kJC5wdHJUeXBlLm5hbWV9IHRvIHBhcmFtZXRlciB0eXBlICR7dGhpcy5uYW1lfWApO3ZhciBuPXQuJCQucHRyVHlwZS5yZWdpc3RlcmVkQ2xhc3MsaT1ZdCh0LiQkLnB0cixuLHRoaXMucmVnaXN0ZXJlZENsYXNzKTtyZXR1cm4gaX12YXIgZ2k9KCk9PntPYmplY3QuYXNzaWduKEV0LnByb3RvdHlwZSx7Z2V0UG9pbnRlZShlKXtyZXR1cm4gdGhpcy5yYXdHZXRQb2ludGVlJiYoZT10aGlzLnJhd0dldFBvaW50ZWUoZSkpLGV9LGRlc3RydWN0b3IoZSl7dmFyIHQ7KHQ9dGhpcy5yYXdEZXN0cnVjdG9yKT09bnVsbHx8dC5jYWxsKHRoaXMsZSl9LGFyZ1BhY2tBZHZhbmNlOndlLHJlYWRWYWx1ZUZyb21Qb2ludGVyOnJ0LGZyb21XaXJlVHlwZTpvaX0pfTtmdW5jdGlvbiBFdChlLHQsbixpLF8scyxmLGgsZyx2LHkpe3RoaXMubmFtZT1lLHRoaXMucmVnaXN0ZXJlZENsYXNzPXQsdGhpcy5pc1JlZmVyZW5jZT1uLHRoaXMuaXNDb25zdD1pLHRoaXMuaXNTbWFydFBvaW50ZXI9Xyx0aGlzLnBvaW50ZWVUeXBlPXMsdGhpcy5zaGFyaW5nUG9saWN5PWYsdGhpcy5yYXdHZXRQb2ludGVlPWgsdGhpcy5yYXdDb25zdHJ1Y3Rvcj1nLHRoaXMucmF3U2hhcmU9dix0aGlzLnJhd0Rlc3RydWN0b3I9eSwhXyYmdC5iYXNlQ2xhc3M9PT12b2lkIDA/aT8odGhpcy50b1dpcmVUeXBlPWRpLHRoaXMuZGVzdHJ1Y3RvckZ1bmN0aW9uPW51bGwpOih0aGlzLnRvV2lyZVR5cGU9bWksdGhpcy5kZXN0cnVjdG9yRnVuY3Rpb249bnVsbCk6dGhpcy50b1dpcmVUeXBlPXVpfXZhciBBcj0oZSx0LG4pPT57ci5oYXNPd25Qcm9wZXJ0eShlKXx8eXQoIlJlcGxhY2luZyBub25leGlzdGVudCBwdWJsaWMgc3ltYm9sIikscltlXS5vdmVybG9hZFRhYmxlIT09dm9pZCAwJiZuIT09dm9pZCAwP3JbZV0ub3ZlcmxvYWRUYWJsZVtuXT10OihyW2VdPXQscltlXS5hcmdDb3VudD1uKX0scGk9KGUsdCxuKT0+e2U9ZS5yZXBsYWNlKC9wL2csImkiKTt2YXIgaT1yWyJkeW5DYWxsXyIrZV07cmV0dXJuIGkodCwuLi5uKX0sa3Q9W10sJHIsRnI9ZT0+e3ZhciB0PWt0W2VdO3JldHVybiB0fHwoZT49a3QubGVuZ3RoJiYoa3QubGVuZ3RoPWUrMSksa3RbZV09dD0kci5nZXQoZSkpLHR9LHZpPShlLHQsbj1bXSk9PntpZihlLmluY2x1ZGVzKCJqIikpcmV0dXJuIHBpKGUsdCxuKTt2YXIgaT1Gcih0KSguLi5uKTtyZXR1cm4gaX0seWk9KGUsdCk9PiguLi5uKT0+dmkoZSx0LG4pLEFlPShlLHQpPT57ZT1uZShlKTtmdW5jdGlvbiBuKCl7cmV0dXJuIGUuaW5jbHVkZXMoImoiKT95aShlLHQpOkZyKHQpfXZhciBpPW4oKTtyZXR1cm4gdHlwZW9mIGkhPSJmdW5jdGlvbiImJnooYHVua25vd24gZnVuY3Rpb24gcG9pbnRlciB3aXRoIHNpZ25hdHVyZSAke2V9OiAke3R9YCksaX0sd2k9KGUsdCk9Pnt2YXIgbj1zdCh0LGZ1bmN0aW9uKGkpe3RoaXMubmFtZT10LHRoaXMubWVzc2FnZT1pO3ZhciBfPW5ldyBFcnJvcihpKS5zdGFjaztfIT09dm9pZCAwJiYodGhpcy5zdGFjaz10aGlzLnRvU3RyaW5nKCkrYApgK18ucmVwbGFjZSgvXkVycm9yKDpbXlxuXSopP1xuLywiIikpfSk7cmV0dXJuIG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUpLG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yPW4sbi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlPT09dm9pZCAwP3RoaXMubmFtZTpgJHt0aGlzLm5hbWV9OiAke3RoaXMubWVzc2FnZX1gfSxufSxUcixEcj1lPT57dmFyIHQ9U2EoZSksbj1uZSh0KTtyZXR1cm4gQ2UodCksbn0sQ3I9KGUsdCk9Pnt2YXIgbj1bXSxpPXt9O2Z1bmN0aW9uIF8ocyl7aWYoIWlbc10mJiFMZVtzXSl7aWYodnRbc10pe3Z0W3NdLmZvckVhY2goXyk7cmV0dXJufW4ucHVzaChzKSxpW3NdPSEwfX10aHJvdyB0LmZvckVhY2goXyksbmV3IFRyKGAke2V9OiBgK24ubWFwKERyKS5qb2luKFsiLCAiXSkpfSxiaT0oZSx0LG4saSxfLHMsZixoLGcsdix5LEEsayk9Pnt5PW5lKHkpLHM9QWUoXyxzKSxoJiYoaD1BZShmLGgpKSx2JiYodj1BZShnLHYpKSxrPUFlKEEsayk7dmFyIHg9aGkoeSk7VnQoeCxmdW5jdGlvbigpe0NyKGBDYW5ub3QgY29uc3RydWN0ICR7eX0gZHVlIHRvIHVuYm91bmQgdHlwZXNgLFtpXSl9KSxXdChbZSx0LG5dLGk/W2ldOltdLFQ9Pnt2YXIgSztUPVRbMF07dmFyIHEsRztpPyhxPVQucmVnaXN0ZXJlZENsYXNzLEc9cS5pbnN0YW5jZVByb3RvdHlwZSk6Rz1idC5wcm90b3R5cGU7dmFyIHA9c3QoeSxmdW5jdGlvbiguLi50cil7aWYoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpIT09RSl0aHJvdyBuZXcgbnQoIlVzZSAnbmV3JyB0byBjb25zdHJ1Y3QgIit5KTtpZihJLmNvbnN0cnVjdG9yX2JvZHk9PT12b2lkIDApdGhyb3cgbmV3IG50KHkrIiBoYXMgbm8gYWNjZXNzaWJsZSBjb25zdHJ1Y3RvciIpO3ZhciB6cj1JLmNvbnN0cnVjdG9yX2JvZHlbdHIubGVuZ3RoXTtpZih6cj09PXZvaWQgMCl0aHJvdyBuZXcgbnQoYFRyaWVkIHRvIGludm9rZSBjdG9yIG9mICR7eX0gd2l0aCBpbnZhbGlkIG51bWJlciBvZiBwYXJhbWV0ZXJzICgke3RyLmxlbmd0aH0pIC0gZXhwZWN0ZWQgKCR7T2JqZWN0LmtleXMoSS5jb25zdHJ1Y3Rvcl9ib2R5KS50b1N0cmluZygpfSkgcGFyYW1ldGVycyBpbnN0ZWFkIWApO3JldHVybiB6ci5hcHBseSh0aGlzLHRyKX0pLEU9T2JqZWN0LmNyZWF0ZShHLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6cH19KTtwLnByb3RvdHlwZT1FO3ZhciBJPW5ldyBjaSh5LHAsRSxrLHEscyxoLHYpO0kuYmFzZUNsYXNzJiYoKEs9SS5iYXNlQ2xhc3MpLl9fZGVyaXZlZENsYXNzZXMhPW51bGx8fChLLl9fZGVyaXZlZENsYXNzZXM9W10pLEkuYmFzZUNsYXNzLl9fZGVyaXZlZENsYXNzZXMucHVzaChJKSk7dmFyIE49bmV3IEV0KHksSSwhMCwhMSwhMSksYWU9bmV3IEV0KHkrIioiLEksITEsITEsITEpLFg9bmV3IEV0KHkrIiBjb25zdCoiLEksITEsITAsITEpO3JldHVybiBQcltlXT17cG9pbnRlclR5cGU6YWUsY29uc3RQb2ludGVyVHlwZTpYfSxBcih4LHApLFtOLGFlLFhdfSl9LFh0PVtdLCRlPVtdLEp0PWU9PntlPjkmJi0tJGVbZSsxXT09PTAmJigkZVtlXT12b2lkIDAsWHQucHVzaChlKSl9LEVpPSgpPT4kZS5sZW5ndGgvMi01LVh0Lmxlbmd0aCxraT0oKT0+eyRlLnB1c2goMCwxLHZvaWQgMCwxLG51bGwsMSwhMCwxLCExLDEpLHIuY291bnRfZW12YWxfaGFuZGxlcz1FaX0sc2U9e3RvVmFsdWU6ZT0+KGV8fHooIkNhbm5vdCB1c2UgZGVsZXRlZCB2YWwuIGhhbmRsZSA9ICIrZSksJGVbZV0pLHRvSGFuZGxlOmU9Pntzd2l0Y2goZSl7Y2FzZSB2b2lkIDA6cmV0dXJuIDI7Y2FzZSBudWxsOnJldHVybiA0O2Nhc2UhMDpyZXR1cm4gNjtjYXNlITE6cmV0dXJuIDg7ZGVmYXVsdDp7Y29uc3QgdD1YdC5wb3AoKXx8JGUubGVuZ3RoO3JldHVybiAkZVt0XT1lLCRlW3QrMV09MSx0fX19fSx4aT17bmFtZToiZW1zY3JpcHRlbjo6dmFsIixmcm9tV2lyZVR5cGU6ZT0+e3ZhciB0PXNlLnRvVmFsdWUoZSk7cmV0dXJuIEp0KGUpLHR9LHRvV2lyZVR5cGU6KGUsdCk9PnNlLnRvSGFuZGxlKHQpLGFyZ1BhY2tBZHZhbmNlOndlLHJlYWRWYWx1ZUZyb21Qb2ludGVyOnJ0LGRlc3RydWN0b3JGdW5jdGlvbjpudWxsfSxQaT1lPT55ZShlLHhpKSxBaT0oZSx0LG4pPT57c3dpdGNoKHQpe2Nhc2UgMTpyZXR1cm4gbj9mdW5jdGlvbihpKXtyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUoaltpXSl9OmZ1bmN0aW9uKGkpe3JldHVybiB0aGlzLmZyb21XaXJlVHlwZShZW2ldKX07Y2FzZSAyOnJldHVybiBuP2Z1bmN0aW9uKGkpe3JldHVybiB0aGlzLmZyb21XaXJlVHlwZShnZVtpPj4xXSl9OmZ1bmN0aW9uKGkpe3JldHVybiB0aGlzLmZyb21XaXJlVHlwZShVZVtpPj4xXSl9O2Nhc2UgNDpyZXR1cm4gbj9mdW5jdGlvbihpKXtyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUoRltpPj4yXSl9OmZ1bmN0aW9uKGkpe3JldHVybiB0aGlzLmZyb21XaXJlVHlwZShNW2k+PjJdKX07ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKGBpbnZhbGlkIGludGVnZXIgd2lkdGggKCR7dH0pOiAke2V9YCl9fSwkaT0oZSx0LG4saSk9Pnt0PW5lKHQpO2Z1bmN0aW9uIF8oKXt9Xy52YWx1ZXM9e30seWUoZSx7bmFtZTp0LGNvbnN0cnVjdG9yOl8sZnJvbVdpcmVUeXBlOmZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLnZhbHVlc1tzXX0sdG9XaXJlVHlwZToocyxmKT0+Zi52YWx1ZSxhcmdQYWNrQWR2YW5jZTp3ZSxyZWFkVmFsdWVGcm9tUG9pbnRlcjpBaSh0LG4saSksZGVzdHJ1Y3RvckZ1bmN0aW9uOm51bGx9KSxWdCh0LF8pfSxLdD0oZSx0KT0+e3ZhciBuPUxlW2VdO3JldHVybiBuPT09dm9pZCAwJiZ6KGAke3R9IGhhcyB1bmtub3duIHR5cGUgJHtEcihlKX1gKSxufSxGaT0oZSx0LG4pPT57dmFyIGk9S3QoZSwiZW51bSIpO3Q9bmUodCk7dmFyIF89aS5jb25zdHJ1Y3RvcixzPU9iamVjdC5jcmVhdGUoaS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUse3ZhbHVlOnt2YWx1ZTpufSxjb25zdHJ1Y3Rvcjp7dmFsdWU6c3QoYCR7aS5uYW1lfV8ke3R9YCxmdW5jdGlvbigpe30pfX0pO18udmFsdWVzW25dPXMsX1t0XT1zfSxadD1lPT57aWYoZT09PW51bGwpcmV0dXJuIm51bGwiO3ZhciB0PXR5cGVvZiBlO3JldHVybiB0PT09Im9iamVjdCJ8fHQ9PT0iYXJyYXkifHx0PT09ImZ1bmN0aW9uIj9lLnRvU3RyaW5nKCk6IiIrZX0sVGk9KGUsdCk9Pntzd2l0Y2godCl7Y2FzZSA0OnJldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUoUmVbbj4+Ml0pfTtjYXNlIDg6cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLmZyb21XaXJlVHlwZShRZVtuPj4zXSl9O2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcihgaW52YWxpZCBmbG9hdCB3aWR0aCAoJHt0fSk6ICR7ZX1gKX19LERpPShlLHQsbik9Pnt0PW5lKHQpLHllKGUse25hbWU6dCxmcm9tV2lyZVR5cGU6aT0+aSx0b1dpcmVUeXBlOihpLF8pPT5fLGFyZ1BhY2tBZHZhbmNlOndlLHJlYWRWYWx1ZUZyb21Qb2ludGVyOlRpKHQsbiksZGVzdHJ1Y3RvckZ1bmN0aW9uOm51bGx9KX07ZnVuY3Rpb24gQ2koZSl7Zm9yKHZhciB0PTE7dDxlLmxlbmd0aDsrK3QpaWYoZVt0XSE9PW51bGwmJmVbdF0uZGVzdHJ1Y3RvckZ1bmN0aW9uPT09dm9pZCAwKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFNpKGUsdCxuLGksXyxzKXt2YXIgZj10Lmxlbmd0aDtmPDImJnooImFyZ1R5cGVzIGFycmF5IHNpemUgbWlzbWF0Y2ghIE11c3QgYXQgbGVhc3QgZ2V0IHJldHVybiB2YWx1ZSBhbmQgJ3RoaXMnIHR5cGVzISIpLHRbMV07dmFyIGg9Q2kodCksZz10WzBdLm5hbWUhPT0idm9pZCIsdj1mLTIseT1uZXcgQXJyYXkodiksQT1bXSxrPVtdLHg9ZnVuY3Rpb24oLi4uVCl7VC5sZW5ndGghPT12JiZ6KGBmdW5jdGlvbiAke2V9IGNhbGxlZCB3aXRoICR7VC5sZW5ndGh9IGFyZ3VtZW50cywgZXhwZWN0ZWQgJHt2fWApLGsubGVuZ3RoPTA7dmFyIEs7QS5sZW5ndGg9MSxBWzBdPV87Zm9yKHZhciBxPTA7cTx2OysrcSl5W3FdPXRbcSsyXS50b1dpcmVUeXBlKGssVFtxXSksQS5wdXNoKHlbcV0pO3ZhciBHPWkoLi4uQSk7ZnVuY3Rpb24gcChFKXtpZihoKU50KGspO2Vsc2UgZm9yKHZhciBJPTI7STx0Lmxlbmd0aDtJKyspe3ZhciBOPUk9PT0xP0s6eVtJLTJdO3RbSV0uZGVzdHJ1Y3RvckZ1bmN0aW9uIT09bnVsbCYmdFtJXS5kZXN0cnVjdG9yRnVuY3Rpb24oTil9aWYoZylyZXR1cm4gdFswXS5mcm9tV2lyZVR5cGUoRSl9cmV0dXJuIHAoRyl9O3JldHVybiBzdChlLHgpfXZhciBNaT0oZSx0KT0+e2Zvcih2YXIgbj1bXSxpPTA7aTxlO2krKyluLnB1c2goTVt0K2kqND4+Ml0pO3JldHVybiBufSxVaT1lPT57ZT1lLnRyaW0oKTtjb25zdCB0PWUuaW5kZXhPZigiKCIpO3JldHVybiB0IT09LTE/ZS5zdWJzdHIoMCx0KTplfSxSaT0oZSx0LG4saSxfLHMsZik9Pnt2YXIgaD1NaSh0LG4pO2U9bmUoZSksZT1VaShlKSxfPUFlKGksXyksVnQoZSxmdW5jdGlvbigpe0NyKGBDYW5ub3QgY2FsbCAke2V9IGR1ZSB0byB1bmJvdW5kIHR5cGVzYCxoKX0sdC0xKSxXdChbXSxoLGc9Pnt2YXIgdj1bZ1swXSxudWxsXS5jb25jYXQoZy5zbGljZSgxKSk7cmV0dXJuIEFyKGUsU2koZSx2LG51bGwsXyxzKSx0LTEpLFtdfSl9LE9pPShlLHQsbik9Pntzd2l0Y2godCl7Y2FzZSAxOnJldHVybiBuP2k9PmpbaV06aT0+WVtpXTtjYXNlIDI6cmV0dXJuIG4/aT0+Z2VbaT4+MV06aT0+VWVbaT4+MV07Y2FzZSA0OnJldHVybiBuP2k9PkZbaT4+Ml06aT0+TVtpPj4yXTtkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoYGludmFsaWQgaW50ZWdlciB3aWR0aCAoJHt0fSk6ICR7ZX1gKX19LElpPShlLHQsbixpLF8pPT57dD1uZSh0KTt2YXIgcz15PT55O2lmKGk9PT0wKXt2YXIgZj0zMi04Km47cz15PT55PDxmPj4+Zn12YXIgaD10LmluY2x1ZGVzKCJ1bnNpZ25lZCIpLGc9KHksQSk9Pnt9LHY7aD92PWZ1bmN0aW9uKHksQSl7cmV0dXJuIGcoQSx0aGlzLm5hbWUpLEE+Pj4wfTp2PWZ1bmN0aW9uKHksQSl7cmV0dXJuIGcoQSx0aGlzLm5hbWUpLEF9LHllKGUse25hbWU6dCxmcm9tV2lyZVR5cGU6cyx0b1dpcmVUeXBlOnYsYXJnUGFja0FkdmFuY2U6d2UscmVhZFZhbHVlRnJvbVBvaW50ZXI6T2kodCxuLGkhPT0wKSxkZXN0cnVjdG9yRnVuY3Rpb246bnVsbH0pfSxqaT0oZSx0LG4pPT57dmFyIGk9W0ludDhBcnJheSxVaW50OEFycmF5LEludDE2QXJyYXksVWludDE2QXJyYXksSW50MzJBcnJheSxVaW50MzJBcnJheSxGbG9hdDMyQXJyYXksRmxvYXQ2NEFycmF5XSxfPWlbdF07ZnVuY3Rpb24gcyhmKXt2YXIgaD1NW2Y+PjJdLGc9TVtmKzQ+PjJdO3JldHVybiBuZXcgXyhqLmJ1ZmZlcixnLGgpfW49bmUobikseWUoZSx7bmFtZTpuLGZyb21XaXJlVHlwZTpzLGFyZ1BhY2tBZHZhbmNlOndlLHJlYWRWYWx1ZUZyb21Qb2ludGVyOnN9LHtpZ25vcmVEdXBsaWNhdGVSZWdpc3RyYXRpb25zOiEwfSl9LEhpPShlLHQsbik9Pnp0KGUsWSx0LG4pLHppPShlLHQpPT57dD1uZSh0KTt2YXIgbj10PT09InN0ZDo6c3RyaW5nIjt5ZShlLHtuYW1lOnQsZnJvbVdpcmVUeXBlKGkpe3ZhciBfPU1baT4+Ml0scz1pKzQsZjtpZihuKWZvcih2YXIgaD1zLGc9MDtnPD1fOysrZyl7dmFyIHY9cytnO2lmKGc9PV98fFlbdl09PTApe3ZhciB5PXYtaCxBPUhlKGgseSk7Zj09PXZvaWQgMD9mPUE6KGYrPSJcMCIsZis9QSksaD12KzF9fWVsc2V7Zm9yKHZhciBrPW5ldyBBcnJheShfKSxnPTA7ZzxfOysrZylrW2ddPVN0cmluZy5mcm9tQ2hhckNvZGUoWVtzK2ddKTtmPWsuam9pbigiIil9cmV0dXJuIENlKGkpLGZ9LHRvV2lyZVR5cGUoaSxfKXtfIGluc3RhbmNlb2YgQXJyYXlCdWZmZXImJihfPW5ldyBVaW50OEFycmF5KF8pKTt2YXIgcyxmPXR5cGVvZiBfPT0ic3RyaW5nIjtmfHxfIGluc3RhbmNlb2YgVWludDhBcnJheXx8XyBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5fHxfIGluc3RhbmNlb2YgSW50OEFycmF5fHx6KCJDYW5ub3QgcGFzcyBub24tc3RyaW5nIHRvIHN0ZDo6c3RyaW5nIiksbiYmZj9zPUh0KF8pOnM9Xy5sZW5ndGg7dmFyIGg9T3IoNCtzKzEpLGc9aCs0O2lmKE1baD4+Ml09cyxuJiZmKUhpKF8sZyxzKzEpO2Vsc2UgaWYoZilmb3IodmFyIHY9MDt2PHM7Kyt2KXt2YXIgeT1fLmNoYXJDb2RlQXQodik7eT4yNTUmJihDZShnKSx6KCJTdHJpbmcgaGFzIFVURi0xNiBjb2RlIHVuaXRzIHRoYXQgZG8gbm90IGZpdCBpbiA4IGJpdHMiKSksWVtnK3ZdPXl9ZWxzZSBmb3IodmFyIHY9MDt2PHM7Kyt2KVlbZyt2XT1fW3ZdO3JldHVybiBpIT09bnVsbCYmaS5wdXNoKENlLGgpLGh9LGFyZ1BhY2tBZHZhbmNlOndlLHJlYWRWYWx1ZUZyb21Qb2ludGVyOnJ0LGRlc3RydWN0b3JGdW5jdGlvbihpKXtDZShpKX19KX0sU3I9dHlwZW9mIFRleHREZWNvZGVyPCJ1Ij9uZXcgVGV4dERlY29kZXIoInV0Zi0xNmxlIik6dm9pZCAwLExpPShlLHQpPT57Zm9yKHZhciBuPWUsaT1uPj4xLF89aSt0LzI7IShpPj1fKSYmVWVbaV07KSsraTtpZihuPWk8PDEsbi1lPjMyJiZTcilyZXR1cm4gU3IuZGVjb2RlKFkuc3ViYXJyYXkoZSxuKSk7Zm9yKHZhciBzPSIiLGY9MDshKGY+PXQvMik7KytmKXt2YXIgaD1nZVtlK2YqMj4+MV07aWYoaD09MClicmVhaztzKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGgpfXJldHVybiBzfSxOaT0oZSx0LG4pPT57aWYobiE9bnVsbHx8KG49MjE0NzQ4MzY0NyksbjwyKXJldHVybiAwO24tPTI7Zm9yKHZhciBpPXQsXz1uPGUubGVuZ3RoKjI/bi8yOmUubGVuZ3RoLHM9MDtzPF87KytzKXt2YXIgZj1lLmNoYXJDb2RlQXQocyk7Z2VbdD4+MV09Zix0Kz0yfXJldHVybiBnZVt0Pj4xXT0wLHQtaX0sV2k9ZT0+ZS5sZW5ndGgqMixCaT0oZSx0KT0+e2Zvcih2YXIgbj0wLGk9IiI7IShuPj10LzQpOyl7dmFyIF89RltlK24qND4+Ml07aWYoXz09MClicmVhaztpZigrK24sXz49NjU1MzYpe3ZhciBzPV8tNjU1MzY7aSs9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NnxzPj4xMCw1NjMyMHxzJjEwMjMpfWVsc2UgaSs9U3RyaW5nLmZyb21DaGFyQ29kZShfKX1yZXR1cm4gaX0scWk9KGUsdCxuKT0+e2lmKG4hPW51bGx8fChuPTIxNDc0ODM2NDcpLG48NClyZXR1cm4gMDtmb3IodmFyIGk9dCxfPWkrbi00LHM9MDtzPGUubGVuZ3RoOysrcyl7dmFyIGY9ZS5jaGFyQ29kZUF0KHMpO2lmKGY+PTU1Mjk2JiZmPD01NzM0Myl7dmFyIGg9ZS5jaGFyQ29kZUF0KCsrcyk7Zj02NTUzNisoKGYmMTAyMyk8PDEwKXxoJjEwMjN9aWYoRlt0Pj4yXT1mLHQrPTQsdCs0Pl8pYnJlYWt9cmV0dXJuIEZbdD4+Ml09MCx0LWl9LEdpPWU9Pntmb3IodmFyIHQ9MCxuPTA7bjxlLmxlbmd0aDsrK24pe3ZhciBpPWUuY2hhckNvZGVBdChuKTtpPj01NTI5NiYmaTw9NTczNDMmJisrbix0Kz00fXJldHVybiB0fSxWaT0oZSx0LG4pPT57bj1uZShuKTt2YXIgaSxfLHMsZjt0PT09Mj8oaT1MaSxfPU5pLGY9V2kscz1oPT5VZVtoPj4xXSk6dD09PTQmJihpPUJpLF89cWksZj1HaSxzPWg9Pk1baD4+Ml0pLHllKGUse25hbWU6bixmcm9tV2lyZVR5cGU6aD0+e2Zvcih2YXIgZz1NW2g+PjJdLHYseT1oKzQsQT0wO0E8PWc7KytBKXt2YXIgaz1oKzQrQSp0O2lmKEE9PWd8fHMoayk9PTApe3ZhciB4PWsteSxUPWkoeSx4KTt2PT09dm9pZCAwP3Y9VDoodis9IlwwIix2Kz1UKSx5PWsrdH19cmV0dXJuIENlKGgpLHZ9LHRvV2lyZVR5cGU6KGgsZyk9Pnt0eXBlb2YgZyE9InN0cmluZyImJnooYENhbm5vdCBwYXNzIG5vbi1zdHJpbmcgdG8gQysrIHN0cmluZyB0eXBlICR7bn1gKTt2YXIgdj1mKGcpLHk9T3IoNCt2K3QpO3JldHVybiBNW3k+PjJdPXYvdCxfKGcseSs0LHYrdCksaCE9PW51bGwmJmgucHVzaChDZSx5KSx5fSxhcmdQYWNrQWR2YW5jZTp3ZSxyZWFkVmFsdWVGcm9tUG9pbnRlcjpydCxkZXN0cnVjdG9yRnVuY3Rpb24oaCl7Q2UoaCl9fSl9LFlpPShlLHQsbixpLF8scyk9PntwdFtlXT17bmFtZTpuZSh0KSxyYXdDb25zdHJ1Y3RvcjpBZShuLGkpLHJhd0Rlc3RydWN0b3I6QWUoXyxzKSxmaWVsZHM6W119fSxYaT0oZSx0LG4saSxfLHMsZixoLGcsdik9PntwdFtlXS5maWVsZHMucHVzaCh7ZmllbGROYW1lOm5lKHQpLGdldHRlclJldHVyblR5cGU6bixnZXR0ZXI6QWUoaSxfKSxnZXR0ZXJDb250ZXh0OnMsc2V0dGVyQXJndW1lbnRUeXBlOmYsc2V0dGVyOkFlKGgsZyksc2V0dGVyQ29udGV4dDp2fSl9LEppPShlLHQpPT57dD1uZSh0KSx5ZShlLHtpc1ZvaWQ6ITAsbmFtZTp0LGFyZ1BhY2tBZHZhbmNlOjAsZnJvbVdpcmVUeXBlOigpPT57fSx0b1dpcmVUeXBlOihuLGkpPT57fX0pfSxLaT0oZSx0LG4pPT5ZLmNvcHlXaXRoaW4oZSx0LHQrbiksWmk9e30sTXI9ZT0+e3ZhciB0PVppW2VdO3JldHVybiB0PT09dm9pZCAwP25lKGUpOnR9LFF0PVtdLFFpPShlLHQsbixpLF8pPT4oZT1RdFtlXSx0PXNlLnRvVmFsdWUodCksbj1NcihuKSxlKHQsdFtuXSxpLF8pKSxlYT1lPT57dmFyIHQ9UXQubGVuZ3RoO3JldHVybiBRdC5wdXNoKGUpLHR9LHRhPShlLHQpPT57Zm9yKHZhciBuPW5ldyBBcnJheShlKSxpPTA7aTxlOysraSluW2ldPUt0KE1bdCtpKjQ+PjJdLCJwYXJhbWV0ZXIgIitpKTtyZXR1cm4gbn0scmE9UmVmbGVjdC5jb25zdHJ1Y3QsbmE9KGUsdCxuKT0+e3ZhciBpPVtdLF89ZS50b1dpcmVUeXBlKGksbik7cmV0dXJuIGkubGVuZ3RoJiYoTVt0Pj4yXT1zZS50b0hhbmRsZShpKSksX30saWE9KGUsdCxuKT0+e3ZhciBpPXRhKGUsdCksXz1pLnNoaWZ0KCk7ZS0tO3ZhciBzPW5ldyBBcnJheShlKSxmPShnLHYseSxBKT0+e2Zvcih2YXIgaz0wLHg9MDt4PGU7Kyt4KXNbeF09aVt4XS5yZWFkVmFsdWVGcm9tUG9pbnRlcihBK2spLGsrPWlbeF0uYXJnUGFja0FkdmFuY2U7dmFyIFQ9bj09PTE/cmEodixzKTp2LmFwcGx5KGcscyk7cmV0dXJuIG5hKF8seSxUKX0saD1gbWV0aG9kQ2FsbGVyPCgke2kubWFwKGc9PmcubmFtZSkuam9pbigiLCAiKX0pID0+ICR7Xy5uYW1lfT5gO3JldHVybiBlYShzdChoLGYpKX0sYWE9ZT0+e2U+OSYmKCRlW2UrMV0rPTEpfSxvYT0oKT0+c2UudG9IYW5kbGUoW10pLF9hPWU9PnNlLnRvSGFuZGxlKE1yKGUpKSxzYT0oKT0+c2UudG9IYW5kbGUoe30pLGxhPWU9Pnt2YXIgdD1zZS50b1ZhbHVlKGUpO050KHQpLEp0KGUpfSxmYT0oZSx0LG4pPT57ZT1zZS50b1ZhbHVlKGUpLHQ9c2UudG9WYWx1ZSh0KSxuPXNlLnRvVmFsdWUobiksZVt0XT1ufSxoYT0oZSx0KT0+e2U9S3QoZSwiX2VtdmFsX3Rha2VfdmFsdWUiKTt2YXIgbj1lLnJlYWRWYWx1ZUZyb21Qb2ludGVyKHQpO3JldHVybiBzZS50b0hhbmRsZShuKX0sY2E9KCk9PjIxNDc0ODM2NDgsZGE9ZT0+e3ZhciB0PWVlLmJ1ZmZlcixuPShlLXQuYnl0ZUxlbmd0aCs2NTUzNSkvNjU1MzY7dHJ5e3JldHVybiBlZS5ncm93KG4pLHBlKCksMX1jYXRjaHt9fSx1YT1lPT57dmFyIHQ9WS5sZW5ndGg7ZT4+Pj0wO3ZhciBuPWNhKCk7aWYoZT5uKXJldHVybiExO2Zvcih2YXIgaT0oZyx2KT0+Zysodi1nJXYpJXYsXz0xO188PTQ7Xyo9Mil7dmFyIHM9dCooMSsuMi9fKTtzPU1hdGgubWluKHMsZSsxMDA2NjMyOTYpO3ZhciBmPU1hdGgubWluKG4saShNYXRoLm1heChlLHMpLDY1NTM2KSksaD1kYShmKTtpZihoKXJldHVybiEwfXJldHVybiExfSxlcj17fSxtYT0oKT0+Wnx8Ii4vdGhpcy5wcm9ncmFtIixsdD0oKT0+e2lmKCFsdC5zdHJpbmdzKXt2YXIgZT0odHlwZW9mIG5hdmlnYXRvcj09Im9iamVjdCImJm5hdmlnYXRvci5sYW5ndWFnZXMmJm5hdmlnYXRvci5sYW5ndWFnZXNbMF18fCJDIikucmVwbGFjZSgiLSIsIl8iKSsiLlVURi04Iix0PXtVU0VSOiJ3ZWJfdXNlciIsTE9HTkFNRToid2ViX3VzZXIiLFBBVEg6Ii8iLFBXRDoiLyIsSE9NRToiL2hvbWUvd2ViX3VzZXIiLExBTkc6ZSxfOm1hKCl9O2Zvcih2YXIgbiBpbiBlcillcltuXT09PXZvaWQgMD9kZWxldGUgdFtuXTp0W25dPWVyW25dO3ZhciBpPVtdO2Zvcih2YXIgbiBpbiB0KWkucHVzaChgJHtufT0ke3Rbbl19YCk7bHQuc3RyaW5ncz1pfXJldHVybiBsdC5zdHJpbmdzfSxnYT0oZSx0KT0+e2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7KytuKWpbdCsrXT1lLmNoYXJDb2RlQXQobik7alt0XT0wfSxwYT0oZSx0KT0+e3ZhciBuPTA7cmV0dXJuIGx0KCkuZm9yRWFjaCgoaSxfKT0+e3ZhciBzPXQrbjtNW2UrXyo0Pj4yXT1zLGdhKGkscyksbis9aS5sZW5ndGgrMX0pLDB9LHZhPShlLHQpPT57dmFyIG49bHQoKTtNW2U+PjJdPW4ubGVuZ3RoO3ZhciBpPTA7cmV0dXJuIG4uZm9yRWFjaChfPT5pKz1fLmxlbmd0aCsxKSxNW3Q+PjJdPWksMH07ZnVuY3Rpb24geWEoZSl7dHJ5e3ZhciB0PXJlLmdldFN0cmVhbUZyb21GRChlKTtyZXR1cm4gby5jbG9zZSh0KSwwfWNhdGNoKG4pe2lmKHR5cGVvZiBvPiJ1Inx8bi5uYW1lIT09IkVycm5vRXJyb3IiKXRocm93IG47cmV0dXJuIG4uZXJybm99fXZhciB3YT0oZSx0LG4saSk9Pntmb3IodmFyIF89MCxzPTA7czxuO3MrKyl7dmFyIGY9TVt0Pj4yXSxoPU1bdCs0Pj4yXTt0Kz04O3ZhciBnPW8ucmVhZChlLGosZixoLGkpO2lmKGc8MClyZXR1cm4tMTtpZihfKz1nLGc8aClicmVha31yZXR1cm4gX307ZnVuY3Rpb24gYmEoZSx0LG4saSl7dHJ5e3ZhciBfPXJlLmdldFN0cmVhbUZyb21GRChlKSxzPXdhKF8sdCxuKTtyZXR1cm4gTVtpPj4yXT1zLDB9Y2F0Y2goZil7aWYodHlwZW9mIG8+InUifHxmLm5hbWUhPT0iRXJybm9FcnJvciIpdGhyb3cgZjtyZXR1cm4gZi5lcnJub319dmFyIEVhPShlLHQpPT50KzIwOTcxNTI+Pj4wPDQxOTQzMDUtISFlPyhlPj4+MCkrdCo0Mjk0OTY3Mjk2Ok5hTjtmdW5jdGlvbiBrYShlLHQsbixpLF8pe3ZhciBzPUVhKHQsbik7dHJ5e2lmKGlzTmFOKHMpKXJldHVybiA2MTt2YXIgZj1yZS5nZXRTdHJlYW1Gcm9tRkQoZSk7cmV0dXJuIG8ubGxzZWVrKGYscyxpKSx0ZT1bZi5wb3NpdGlvbj4+PjAsKE89Zi5wb3NpdGlvbiwrTWF0aC5hYnMoTyk+PTE/Tz4wPytNYXRoLmZsb29yKE8vNDI5NDk2NzI5Nik+Pj4wOn5+K01hdGguY2VpbCgoTy0rKH5+Tz4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLEZbXz4+Ml09dGVbMF0sRltfKzQ+PjJdPXRlWzFdLGYuZ2V0ZGVudHMmJnM9PT0wJiZpPT09MCYmKGYuZ2V0ZGVudHM9bnVsbCksMH1jYXRjaChoKXtpZih0eXBlb2Ygbz4idSJ8fGgubmFtZSE9PSJFcnJub0Vycm9yIil0aHJvdyBoO3JldHVybiBoLmVycm5vfX12YXIgeGE9KGUsdCxuLGkpPT57Zm9yKHZhciBfPTAscz0wO3M8bjtzKyspe3ZhciBmPU1bdD4+Ml0saD1NW3QrND4+Ml07dCs9ODt2YXIgZz1vLndyaXRlKGUsaixmLGgsaSk7aWYoZzwwKXJldHVybi0xO18rPWd9cmV0dXJuIF99O2Z1bmN0aW9uIFBhKGUsdCxuLGkpe3RyeXt2YXIgXz1yZS5nZXRTdHJlYW1Gcm9tRkQoZSkscz14YShfLHQsbik7cmV0dXJuIE1baT4+Ml09cywwfWNhdGNoKGYpe2lmKHR5cGVvZiBvPiJ1Inx8Zi5uYW1lIT09IkVycm5vRXJyb3IiKXRocm93IGY7cmV0dXJuIGYuZXJybm99fXZhciB4dD1lPT5lJTQ9PT0wJiYoZSUxMDAhPT0wfHxlJTQwMD09PTApLEFhPShlLHQpPT57Zm9yKHZhciBuPTAsaT0wO2k8PXQ7bis9ZVtpKytdKTtyZXR1cm4gbn0sVXI9WzMxLDI5LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxScj1bMzEsMjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdLCRhPShlLHQpPT57Zm9yKHZhciBuPW5ldyBEYXRlKGUuZ2V0VGltZSgpKTt0PjA7KXt2YXIgaT14dChuLmdldEZ1bGxZZWFyKCkpLF89bi5nZXRNb250aCgpLHM9KGk/VXI6UnIpW19dO2lmKHQ+cy1uLmdldERhdGUoKSl0LT1zLW4uZ2V0RGF0ZSgpKzEsbi5zZXREYXRlKDEpLF88MTE/bi5zZXRNb250aChfKzEpOihuLnNldE1vbnRoKDApLG4uc2V0RnVsbFllYXIobi5nZXRGdWxsWWVhcigpKzEpKTtlbHNlIHJldHVybiBuLnNldERhdGUobi5nZXREYXRlKCkrdCksbn1yZXR1cm4gbn0sRmE9KGUsdCk9PntqLnNldChlLHQpfSxUYT0oZSx0LG4saSk9Pnt2YXIgXz1NW2krNDA+PjJdLHM9e3RtX3NlYzpGW2k+PjJdLHRtX21pbjpGW2krND4+Ml0sdG1faG91cjpGW2krOD4+Ml0sdG1fbWRheTpGW2krMTI+PjJdLHRtX21vbjpGW2krMTY+PjJdLHRtX3llYXI6RltpKzIwPj4yXSx0bV93ZGF5OkZbaSsyND4+Ml0sdG1feWRheTpGW2krMjg+PjJdLHRtX2lzZHN0OkZbaSszMj4+Ml0sdG1fZ210b2ZmOkZbaSszNj4+Ml0sdG1fem9uZTpfP0hlKF8pOiIifSxmPUhlKG4pLGg9eyIlYyI6IiVhICViICVkICVIOiVNOiVTICVZIiwiJUQiOiIlbS8lZC8leSIsIiVGIjoiJVktJW0tJWQiLCIlaCI6IiViIiwiJXIiOiIlSTolTTolUyAlcCIsIiVSIjoiJUg6JU0iLCIlVCI6IiVIOiVNOiVTIiwiJXgiOiIlbS8lZC8leSIsIiVYIjoiJUg6JU06JVMiLCIlRWMiOiIlYyIsIiVFQyI6IiVDIiwiJUV4IjoiJW0vJWQvJXkiLCIlRVgiOiIlSDolTTolUyIsIiVFeSI6IiV5IiwiJUVZIjoiJVkiLCIlT2QiOiIlZCIsIiVPZSI6IiVlIiwiJU9IIjoiJUgiLCIlT0kiOiIlSSIsIiVPbSI6IiVtIiwiJU9NIjoiJU0iLCIlT1MiOiIlUyIsIiVPdSI6IiV1IiwiJU9VIjoiJVUiLCIlT1YiOiIlViIsIiVPdyI6IiV3IiwiJU9XIjoiJVciLCIlT3kiOiIleSJ9O2Zvcih2YXIgZyBpbiBoKWY9Zi5yZXBsYWNlKG5ldyBSZWdFeHAoZywiZyIpLGhbZ10pO3ZhciB2PVsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSx5PVsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXTtmdW5jdGlvbiBBKHAsRSxJKXtmb3IodmFyIE49dHlwZW9mIHA9PSJudW1iZXIiP3AudG9TdHJpbmcoKTpwfHwiIjtOLmxlbmd0aDxFOylOPUlbMF0rTjtyZXR1cm4gTn1mdW5jdGlvbiBrKHAsRSl7cmV0dXJuIEEocCxFLCIwIil9ZnVuY3Rpb24geChwLEUpe2Z1bmN0aW9uIEkoYWUpe3JldHVybiBhZTwwPy0xOmFlPjA/MTowfXZhciBOO3JldHVybihOPUkocC5nZXRGdWxsWWVhcigpLUUuZ2V0RnVsbFllYXIoKSkpPT09MCYmKE49SShwLmdldE1vbnRoKCktRS5nZXRNb250aCgpKSk9PT0wJiYoTj1JKHAuZ2V0RGF0ZSgpLUUuZ2V0RGF0ZSgpKSksTn1mdW5jdGlvbiBUKHApe3N3aXRjaChwLmdldERheSgpKXtjYXNlIDA6cmV0dXJuIG5ldyBEYXRlKHAuZ2V0RnVsbFllYXIoKS0xLDExLDI5KTtjYXNlIDE6cmV0dXJuIHA7Y2FzZSAyOnJldHVybiBuZXcgRGF0ZShwLmdldEZ1bGxZZWFyKCksMCwzKTtjYXNlIDM6cmV0dXJuIG5ldyBEYXRlKHAuZ2V0RnVsbFllYXIoKSwwLDIpO2Nhc2UgNDpyZXR1cm4gbmV3IERhdGUocC5nZXRGdWxsWWVhcigpLDAsMSk7Y2FzZSA1OnJldHVybiBuZXcgRGF0ZShwLmdldEZ1bGxZZWFyKCktMSwxMSwzMSk7Y2FzZSA2OnJldHVybiBuZXcgRGF0ZShwLmdldEZ1bGxZZWFyKCktMSwxMSwzMCl9fWZ1bmN0aW9uIEsocCl7dmFyIEU9JGEobmV3IERhdGUocC50bV95ZWFyKzE5MDAsMCwxKSxwLnRtX3lkYXkpLEk9bmV3IERhdGUoRS5nZXRGdWxsWWVhcigpLDAsNCksTj1uZXcgRGF0ZShFLmdldEZ1bGxZZWFyKCkrMSwwLDQpLGFlPVQoSSksWD1UKE4pO3JldHVybiB4KGFlLEUpPD0wP3goWCxFKTw9MD9FLmdldEZ1bGxZZWFyKCkrMTpFLmdldEZ1bGxZZWFyKCk6RS5nZXRGdWxsWWVhcigpLTF9dmFyIHE9eyIlYSI6cD0+dltwLnRtX3dkYXldLnN1YnN0cmluZygwLDMpLCIlQSI6cD0+dltwLnRtX3dkYXldLCIlYiI6cD0+eVtwLnRtX21vbl0uc3Vic3RyaW5nKDAsMyksIiVCIjpwPT55W3AudG1fbW9uXSwiJUMiOnA9Pnt2YXIgRT1wLnRtX3llYXIrMTkwMDtyZXR1cm4gayhFLzEwMHwwLDIpfSwiJWQiOnA9PmsocC50bV9tZGF5LDIpLCIlZSI6cD0+QShwLnRtX21kYXksMiwiICIpLCIlZyI6cD0+SyhwKS50b1N0cmluZygpLnN1YnN0cmluZygyKSwiJUciOkssIiVIIjpwPT5rKHAudG1faG91ciwyKSwiJUkiOnA9Pnt2YXIgRT1wLnRtX2hvdXI7cmV0dXJuIEU9PTA/RT0xMjpFPjEyJiYoRS09MTIpLGsoRSwyKX0sIiVqIjpwPT5rKHAudG1fbWRheStBYSh4dChwLnRtX3llYXIrMTkwMCk/VXI6UnIscC50bV9tb24tMSksMyksIiVtIjpwPT5rKHAudG1fbW9uKzEsMiksIiVNIjpwPT5rKHAudG1fbWluLDIpLCIlbiI6KCk9PmAKYCwiJXAiOnA9PnAudG1faG91cj49MCYmcC50bV9ob3VyPDEyPyJBTSI6IlBNIiwiJVMiOnA9PmsocC50bV9zZWMsMiksIiV0IjooKT0+IgkiLCIldSI6cD0+cC50bV93ZGF5fHw3LCIlVSI6cD0+e3ZhciBFPXAudG1feWRheSs3LXAudG1fd2RheTtyZXR1cm4gayhNYXRoLmZsb29yKEUvNyksMil9LCIlViI6cD0+e3ZhciBFPU1hdGguZmxvb3IoKHAudG1feWRheSs3LShwLnRtX3dkYXkrNiklNykvNyk7aWYoKHAudG1fd2RheSszNzEtcC50bV95ZGF5LTIpJTc8PTImJkUrKyxFKXtpZihFPT01Myl7dmFyIEk9KHAudG1fd2RheSszNzEtcC50bV95ZGF5KSU3O0khPTQmJihJIT0zfHwheHQocC50bV95ZWFyKSkmJihFPTEpfX1lbHNle0U9NTI7dmFyIE49KHAudG1fd2RheSs3LXAudG1feWRheS0xKSU3OyhOPT00fHxOPT01JiZ4dChwLnRtX3llYXIlNDAwLTEpKSYmRSsrfXJldHVybiBrKEUsMil9LCIldyI6cD0+cC50bV93ZGF5LCIlVyI6cD0+e3ZhciBFPXAudG1feWRheSs3LShwLnRtX3dkYXkrNiklNztyZXR1cm4gayhNYXRoLmZsb29yKEUvNyksMil9LCIleSI6cD0+KHAudG1feWVhcisxOTAwKS50b1N0cmluZygpLnN1YnN0cmluZygyKSwiJVkiOnA9PnAudG1feWVhcisxOTAwLCIleiI6cD0+e3ZhciBFPXAudG1fZ210b2ZmLEk9RT49MDtyZXR1cm4gRT1NYXRoLmFicyhFKS82MCxFPUUvNjAqMTAwK0UlNjAsKEk/IisiOiItIikrKCIwMDAwIitFKS5zbGljZSgtNCl9LCIlWiI6cD0+cC50bV96b25lLCIlJSI6KCk9PiIlIn07Zj1mLnJlcGxhY2UoLyUlL2csIlwwXDAiKTtmb3IodmFyIGcgaW4gcSlmLmluY2x1ZGVzKGcpJiYoZj1mLnJlcGxhY2UobmV3IFJlZ0V4cChnLCJnIikscVtnXShzKSkpO2Y9Zi5yZXBsYWNlKC9cMFwwL2csIiUiKTt2YXIgRz1ndChmLCExKTtyZXR1cm4gRy5sZW5ndGg+dD8wOihGYShHLGUpLEcubGVuZ3RoLTEpfSxEYT0oZSx0LG4saSxfKT0+VGEoZSx0LG4saSk7by5jcmVhdGVQcmVsb2FkZWRGaWxlPXpuLG8uc3RhdGljSW5pdCgpLHdyPXIuSW50ZXJuYWxFcnJvcj1jbGFzcyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLHRoaXMubmFtZT0iSW50ZXJuYWxFcnJvciJ9fSxYbigpLG50PXIuQmluZGluZ0Vycm9yPWNsYXNzIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy5uYW1lPSJCaW5kaW5nRXJyb3IifX0sX2koKSxuaSgpLGdpKCksVHI9ci5VbmJvdW5kVHlwZUVycm9yPXdpKEVycm9yLCJVbmJvdW5kVHlwZUVycm9yIiksa2koKTt2YXIgQ2E9e2I6Q24sazpNbixyOk5uLEI6V24sRjpCbixFOnFuLEM6R24sdzpWbix6OlluLEs6S24sbzpiaSxKOlBpLGo6JGksYTpGaSx2OkRpLGQ6UmksaTpJaSxmOmppLHU6emkscTpWaSx4OllpLG46WGksTDpKaSxJOktpLE46UWksYzpKdCxPOmlhLFA6YWEsbTpvYSxoOl9hLGw6c2EsTTpsYSxnOmZhLGU6aGEsRDp1YSxHOnBhLEg6dmEsczp5YSx0OmJhLHk6a2EscDpQYSxBOkRhfSxhPURuKCk7YS5SLHIuX21lbWNweT1hLlMsci5faGVpZl9uY2x4X2NvbG9yX3Byb2ZpbGVfYWxsb2M9YS5VLHIuX2hlaWZfbmNseF9jb2xvcl9wcm9maWxlX2ZyZWU9YS5WLHIuX2hlaWZfdGFpX3RpbWVzdGFtcF9wYWNrZXRfY29weT1hLlc7dmFyIENlPXIuX2ZyZWU9YS5YO3IuX2hlaWZfY29sb3JfY29udmVyc2lvbl9vcHRpb25zX3NldF9kZWZhdWx0cz1hLlksci5faGVpZl9uY2x4X2NvbG9yX3Byb2ZpbGVfc2V0X2NvbG9yX3ByaW1hcmllcz1hLlosci5faGVpZl9uY2x4X2NvbG9yX3Byb2ZpbGVfc2V0X3RyYW5zZmVyX2NoYXJhY3RlcmlzdGljcz1hLl8sci5faGVpZl9uY2x4X2NvbG9yX3Byb2ZpbGVfc2V0X21hdHJpeF9jb2VmZmljaWVudHM9YS4kLHIuX2hlaWZfaW5pdD1hLmFhLHIuX2hlaWZfZGVpbml0PWEuYmEsci5faGVpZl9sb2FkX3BsdWdpbj1hLmNhLHIuX2hlaWZfdW5sb2FkX3BsdWdpbj1hLmRhLHIuX2hlaWZfbG9hZF9wbHVnaW5zPWEuZWEsci5faGVpZl9nZXRfcGx1Z2luX2RpcmVjdG9yaWVzPWEuZmEsci5faGVpZl9mcmVlX3BsdWdpbl9kaXJlY3Rvcmllcz1hLmdhLHIuX2hlaWZfZ2V0X3ZlcnNpb25fbnVtYmVyPWEuaGEsci5faGVpZl9jb250ZXh0X2FsbG9jPWEuaWEsci5faGVpZl9jb250ZXh0X2ZyZWU9YS5qYSxyLl9oZWlmX2NvbnRleHRfZ2V0X251bWJlcl9vZl90b3BfbGV2ZWxfaW1hZ2VzPWEua2Esci5faGVpZl9pbWFnZV9oYW5kbGVfcmVsZWFzZT1hLmxhLHIuX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF93aWR0aD1hLm1hLHIuX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9oZWlnaHQ9YS5uYSxyLl9oZWlmX2ltYWdlX2hhbmRsZV9pc19wcmltYXJ5X2ltYWdlPWEub2Esci5faGVpZl9pbWFnZV9yZWxlYXNlPWEucGEsci5faGVpZl9pbWFnZV9oYW5kbGVfaGFzX2FscGhhX2NoYW5uZWw9YS5xYSxyLl9oZWlmX2ltYWdlX2hhbmRsZV9pc19wcmVtdWx0aXBsaWVkX2FscGhhPWEucmEsci5faGVpZl9jb250ZXh0X2dldF9udW1iZXJfb2ZfaXRlbXM9YS5zYSxyLl9oZWlmX2l0ZW1faXNfaXRlbV9oaWRkZW49YS50YSxyLl9oZWlmX2dldF92ZXJzaW9uPWEudWEsci5faGVpZl9jb250ZXh0X3JlYWRfZnJvbV9tZW1vcnk9YS52YSxyLl9oZWlmX2NoZWNrX2ZpbGV0eXBlPWEud2Esci5faGVpZl9jb250ZXh0X2dldF9saXN0X29mX3RvcF9sZXZlbF9pbWFnZV9JRHM9YS54YSxyLl9oZWlmX2NvbnRleHRfZ2V0X2ltYWdlX2hhbmRsZT1hLnlhLHIuX2hlaWZfY29udGV4dF9nZXRfcHJpbWFyeV9pbWFnZV9oYW5kbGU9YS56YSxyLl9oZWlmX2RlY29kZV9pbWFnZT1hLkFhLHIuX2hlaWZfaW1hZ2VfZ2V0X2Nocm9tYV9mb3JtYXQ9YS5CYSxyLl9oZWlmX2ltYWdlX2dldF9jb2xvcnNwYWNlPWEuQ2Esci5faGVpZl9pbWFnZV9oYXNfY2hhbm5lbD1hLkRhLHIuX2hlaWZfaW1hZ2VfZ2V0X3BsYW5lX3JlYWRvbmx5Mj1hLkVhLHIuX2hlaWZfaW1hZ2VfZ2V0X3dpZHRoPWEuRmEsci5faGVpZl9pbWFnZV9nZXRfaGVpZ2h0PWEuR2Esci5faGVpZl9pbWFnZV9nZXRfYml0c19wZXJfcGl4ZWxfcmFuZ2U9YS5IYSxyLl9oZWlmX2NvbnRleHRfZ2V0X2xpc3Rfb2ZfaXRlbV9JRHM9YS5JYSxyLl9oZWlmX2l0ZW1fZ2V0X2l0ZW1fdHlwZT1hLkphO3ZhciBPcj1yLl9tYWxsb2M9YS5LYTtyLl9oZWlmX2l0ZW1fZ2V0X21pbWVfaXRlbV9jb250ZW50X3R5cGU9YS5MYSxyLl9oZWlmX2l0ZW1fZ2V0X21pbWVfaXRlbV9jb250ZW50X2VuY29kaW5nPWEuTWEsci5faGVpZl9pdGVtX2dldF91cmlfaXRlbV91cmlfdHlwZT1hLk5hLHIuX2hlaWZfaXRlbV9nZXRfaXRlbV9uYW1lPWEuT2Esci5faGVpZl9nZXRfdmVyc2lvbl9udW1iZXJfbWFqb3I9YS5QYSxyLl9oZWlmX2dldF92ZXJzaW9uX251bWJlcl9taW5vcj1hLlFhLHIuX2hlaWZfZ2V0X3ZlcnNpb25fbnVtYmVyX21haW50ZW5hbmNlPWEuUmEsci5faGVpZl9yZWdpc3Rlcl9kZWNvZGVyX3BsdWdpbj1hLlNhLHIuX2hlaWZfcmVnaXN0ZXJfZW5jb2Rlcl9wbHVnaW49YS5UYSxyLl9oZWlmX3N0cmluZ19yZWxlYXNlPWEuVWEsci5faGVpZl9yZWdpc3Rlcl9kZWNvZGVyPWEuVmEsci5faGVpZl9pbWFnZV9nZXRfcHJpbWFyeV93aWR0aD1hLldhLHIuX2hlaWZfaW1hZ2VfZ2V0X3ByaW1hcnlfaGVpZ2h0PWEuWGEsci5faGVpZl9pbWFnZV9jcm9wPWEuWWEsci5faGVpZl9pbWFnZV9leHRyYWN0X2FyZWE9YS5aYSxyLl9oZWlmX2ltYWdlX2dldF9iaXRzX3Blcl9waXhlbD1hLl9hLHIuX2hlaWZfaW1hZ2VfZ2V0X3BsYW5lX3JlYWRvbmx5PWEuJGEsci5faGVpZl9pbWFnZV9nZXRfcGxhbmU9YS5hYixyLl9oZWlmX2ltYWdlX2dldF9wbGFuZTI9YS5iYixyLl9oZWlmX2ltYWdlX3NjYWxlX2ltYWdlPWEuY2Isci5faGVpZl9pbWFnZV9leHRlbmRfdG9fc2l6ZV9maWxsX3dpdGhfemVybz1hLmRiLHIuX2hlaWZfaW1hZ2VfZ2V0X2RlY29kaW5nX3dhcm5pbmdzPWEuZWIsci5faGVpZl9pbWFnZV9hZGRfZGVjb2Rpbmdfd2FybmluZz1hLmZiLHIuX2hlaWZfaW1hZ2VfZ2V0X3BpeGVsX2FzcGVjdF9yYXRpbz1hLmdiLHIuX2hlaWZfaW1hZ2Vfc2V0X3BpeGVsX2FzcGVjdF9yYXRpbz1hLmhiLHIuX2hlaWZfaW1hZ2VfaGFuZGxlX3NldF9waXhlbF9hc3BlY3RfcmF0aW89YS5pYixyLl9oZWlmX2ltYWdlX2NyZWF0ZT1hLmpiLHIuX2hlaWZfaW1hZ2VfYWRkX3BsYW5lPWEua2Isci5faGVpZl9pbWFnZV9hZGRfcGxhbmVfc2FmZT1hLmxiLHIuX2hlaWZfaW1hZ2Vfc2V0X3ByZW11bHRpcGxpZWRfYWxwaGE9YS5tYixyLl9oZWlmX2ltYWdlX2lzX3ByZW11bHRpcGxpZWRfYWxwaGE9YS5uYixyLl9oZWlmX2ltYWdlX2V4dGVuZF9wYWRkaW5nX3RvX3NpemU9YS5vYixyLl9oZWlmX2NvbG9yX2NvbnZlcnNpb25fb3B0aW9uc19leHRfYWxsb2M9YS5wYixyLl9oZWlmX2NvbG9yX2NvbnZlcnNpb25fb3B0aW9uc19leHRfY29weT1hLnFiLHIuX2hlaWZfY29sb3JfY29udmVyc2lvbl9vcHRpb25zX2V4dF9mcmVlPWEucmIsci5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X2NvbG9yX3Byb2ZpbGVfdHlwZT1hLnNiLHIuX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9yYXdfY29sb3JfcHJvZmlsZV9zaXplPWEudGIsci5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X3Jhd19jb2xvcl9wcm9maWxlPWEudWIsci5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X25jbHhfY29sb3JfcHJvZmlsZT1hLnZiLHIuX2hlaWZfaW1hZ2VfZ2V0X2NvbG9yX3Byb2ZpbGVfdHlwZT1hLndiLHIuX2hlaWZfaW1hZ2VfZ2V0X3Jhd19jb2xvcl9wcm9maWxlX3NpemU9YS54YixyLl9oZWlmX2ltYWdlX2dldF9yYXdfY29sb3JfcHJvZmlsZT1hLnliLHIuX2hlaWZfaW1hZ2VfZ2V0X25jbHhfY29sb3JfcHJvZmlsZT1hLnpiLHIuX2hlaWZfaW1hZ2Vfc2V0X3Jhd19jb2xvcl9wcm9maWxlPWEuQWIsci5faGVpZl9pbWFnZV9zZXRfbmNseF9jb2xvcl9wcm9maWxlPWEuQmIsci5faGVpZl9pbWFnZV9oYXNfY29udGVudF9saWdodF9sZXZlbD1hLkNiLHIuX2hlaWZfaW1hZ2VfaGFuZGxlX2hhc19jb250ZW50X2xpZ2h0X2xldmVsPWEuRGIsci5faGVpZl9pbWFnZV9nZXRfY29udGVudF9saWdodF9sZXZlbD1hLkViLHIuX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9jb250ZW50X2xpZ2h0X2xldmVsPWEuRmIsci5faGVpZl9pbWFnZV9zZXRfY29udGVudF9saWdodF9sZXZlbD1hLkdiLHIuX2hlaWZfaW1hZ2VfaGFuZGxlX3NldF9jb250ZW50X2xpZ2h0X2xldmVsPWEuSGIsci5faGVpZl9pbWFnZV9oYXNfbWFzdGVyaW5nX2Rpc3BsYXlfY29sb3VyX3ZvbHVtZT1hLkliLHIuX2hlaWZfaW1hZ2VfaGFuZGxlX2hhc19tYXN0ZXJpbmdfZGlzcGxheV9jb2xvdXJfdm9sdW1lPWEuSmIsci5faGVpZl9pbWFnZV9nZXRfbWFzdGVyaW5nX2Rpc3BsYXlfY29sb3VyX3ZvbHVtZT1hLktiLHIuX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9tYXN0ZXJpbmdfZGlzcGxheV9jb2xvdXJfdm9sdW1lPWEuTGIsci5faGVpZl9pbWFnZV9zZXRfbWFzdGVyaW5nX2Rpc3BsYXlfY29sb3VyX3ZvbHVtZT1hLk1iLHIuX2hlaWZfaW1hZ2VfaGFuZGxlX3NldF9tYXN0ZXJpbmdfZGlzcGxheV9jb2xvdXJfdm9sdW1lPWEuTmIsci5faGVpZl9pbWFnZV9oYXNfYW1iaWVudF92aWV3aW5nX2Vudmlyb25tZW50PWEuT2Isci5faGVpZl9pbWFnZV9oYW5kbGVfaGFzX2FtYmllbnRfdmlld2luZ19lbnZpcm9ubWVudD1hLlBiLHIuX2hlaWZfaW1hZ2VfZ2V0X2FtYmllbnRfdmlld2luZ19lbnZpcm9ubWVudD1hLlFiLHIuX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9hbWJpZW50X3ZpZXdpbmdfZW52aXJvbm1lbnQ9YS5SYixyLl9oZWlmX2ltYWdlX3NldF9hbWJpZW50X3ZpZXdpbmdfZW52aXJvbm1lbnQ9YS5TYixyLl9oZWlmX2ltYWdlX2hhbmRsZV9zZXRfYW1iaWVudF92aWV3aW5nX2Vudmlyb25tZW50PWEuVGIsci5faGVpZl9pbWFnZV9oYXNfbm9taW5hbF9kaWZmdXNlX3doaXRlX2x1bWluYW5jZT1hLlViLHIuX2hlaWZfaW1hZ2VfZ2V0X25vbWluYWxfZGlmZnVzZV93aGl0ZV9sdW1pbmFuY2U9YS5WYixyLl9oZWlmX2ltYWdlX3NldF9ub21pbmFsX2RpZmZ1c2Vfd2hpdGVfbHVtaW5hbmNlPWEuV2Isci5faGVpZl9pbWFnZV9oYW5kbGVfaGFzX25vbWluYWxfZGlmZnVzZV93aGl0ZV9sdW1pbmFuY2U9YS5YYixyLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfbm9taW5hbF9kaWZmdXNlX3doaXRlX2x1bWluYW5jZT1hLlliLHIuX2hlaWZfaW1hZ2VfaGFuZGxlX3NldF9ub21pbmFsX2RpZmZ1c2Vfd2hpdGVfbHVtaW5hbmNlPWEuWmIsci5faGVpZl9tYXN0ZXJpbmdfZGlzcGxheV9jb2xvdXJfdm9sdW1lX2RlY29kZT1hLl9iLHIuX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9udW1iZXJfb2ZfcmVnaW9uX2l0ZW1zPWEuJGIsci5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X2xpc3Rfb2ZfcmVnaW9uX2l0ZW1faWRzPWEuYWMsci5faGVpZl9jb250ZXh0X2dldF9yZWdpb25faXRlbT1hLmJjLHIuX2hlaWZfcmVnaW9uX2l0ZW1fZ2V0X2lkPWEuY2Msci5faGVpZl9yZWdpb25faXRlbV9yZWxlYXNlPWEuZGMsci5faGVpZl9yZWdpb25faXRlbV9nZXRfcmVmZXJlbmNlX3NpemU9YS5lYyxyLl9oZWlmX3JlZ2lvbl9pdGVtX2dldF9udW1iZXJfb2ZfcmVnaW9ucz1hLmZjLHIuX2hlaWZfcmVnaW9uX2l0ZW1fZ2V0X2xpc3Rfb2ZfcmVnaW9ucz1hLmdjLHIuX2hlaWZfcmVnaW9uX3JlbGVhc2U9YS5oYyxyLl9oZWlmX3JlZ2lvbl9yZWxlYXNlX21hbnk9YS5pYyxyLl9oZWlmX3JlZ2lvbl9nZXRfdHlwZT1hLmpjLHIuX2hlaWZfcmVnaW9uX2dldF9wb2ludD1hLmtjLHIuX2hlaWZfcmVnaW9uX2dldF9wb2ludF90cmFuc2Zvcm1lZD1hLmxjLHIuX2hlaWZfcmVnaW9uX2dldF9yZWN0YW5nbGU9YS5tYyxyLl9oZWlmX3JlZ2lvbl9nZXRfcmVjdGFuZ2xlX3RyYW5zZm9ybWVkPWEubmMsci5faGVpZl9yZWdpb25fZ2V0X2VsbGlwc2U9YS5vYyxyLl9oZWlmX3JlZ2lvbl9nZXRfZWxsaXBzZV90cmFuc2Zvcm1lZD1hLnBjLHIuX2hlaWZfcmVnaW9uX2dldF9wb2x5Z29uX251bV9wb2ludHM9YS5xYyxyLl9oZWlmX3JlZ2lvbl9nZXRfcG9seWdvbl9wb2ludHM9YS5yYyxyLl9oZWlmX3JlZ2lvbl9nZXRfcG9seWdvbl9wb2ludHNfdHJhbnNmb3JtZWQ9YS5zYyxyLl9oZWlmX3JlZ2lvbl9nZXRfcG9seWxpbmVfbnVtX3BvaW50cz1hLnRjLHIuX2hlaWZfcmVnaW9uX2dldF9wb2x5bGluZV9wb2ludHM9YS51YyxyLl9oZWlmX3JlZ2lvbl9nZXRfcG9seWxpbmVfcG9pbnRzX3RyYW5zZm9ybWVkPWEudmMsci5faGVpZl9yZWdpb25fZ2V0X3JlZmVyZW5jZWRfbWFza19JRD1hLndjLHIuX2hlaWZfcmVnaW9uX2dldF9pbmxpbmVfbWFza19kYXRhX2xlbj1hLnhjLHIuX2hlaWZfcmVnaW9uX2l0ZW1fYWRkX3JlZ2lvbl9pbmxpbmVfbWFza19kYXRhPWEueWMsci5faGVpZl9yZWdpb25fZ2V0X21hc2tfaW1hZ2U9YS56YyxyLl9oZWlmX2ltYWdlX2hhbmRsZV9hZGRfcmVnaW9uX2l0ZW09YS5BYyxyLl9oZWlmX3JlZ2lvbl9pdGVtX2FkZF9yZWdpb25fcG9pbnQ9YS5CYyxyLl9oZWlmX3JlZ2lvbl9pdGVtX2FkZF9yZWdpb25fcmVjdGFuZ2xlPWEuQ2Msci5faGVpZl9yZWdpb25faXRlbV9hZGRfcmVnaW9uX2VsbGlwc2U9YS5EYyxyLl9oZWlmX3JlZ2lvbl9pdGVtX2FkZF9yZWdpb25fcG9seWdvbj1hLkVjLHIuX2hlaWZfcmVnaW9uX2l0ZW1fYWRkX3JlZ2lvbl9wb2x5bGluZT1hLkZjLHIuX2hlaWZfcmVnaW9uX2l0ZW1fYWRkX3JlZ2lvbl9yZWZlcmVuY2VkX21hc2s9YS5HYyxyLl9oZWlmX3JlZ2lvbl9nZXRfaW5saW5lX21hc2tfZGF0YT1hLkhjLHIuX2hlaWZfcmVnaW9uX2l0ZW1fYWRkX3JlZ2lvbl9pbmxpbmVfbWFzaz1hLkljLHIuX2hlaWZfaXRlbV9nZXRfcHJvcGVydGllc19vZl90eXBlPWEuSmMsci5faGVpZl9pdGVtX2dldF90cmFuc2Zvcm1hdGlvbl9wcm9wZXJ0aWVzPWEuS2Msci5faGVpZl9pdGVtX2dldF9wcm9wZXJ0eV90eXBlPWEuTGMsci5faGVpZl9pdGVtX2dldF9wcm9wZXJ0eV91c2VyX2Rlc2NyaXB0aW9uPWEuTWMsci5faGVpZl9pdGVtX2FkZF9wcm9wZXJ0eV91c2VyX2Rlc2NyaXB0aW9uPWEuTmMsci5faGVpZl9wcm9wZXJ0eV91c2VyX2Rlc2NyaXB0aW9uX3JlbGVhc2U9YS5PYyxyLl9oZWlmX2l0ZW1fZ2V0X3Byb3BlcnR5X3RyYW5zZm9ybV9taXJyb3I9YS5QYyxyLl9oZWlmX2l0ZW1fZ2V0X3Byb3BlcnR5X3RyYW5zZm9ybV9yb3RhdGlvbl9jY3c9YS5RYyxyLl9oZWlmX2l0ZW1fZ2V0X3Byb3BlcnR5X3RyYW5zZm9ybV9jcm9wX2JvcmRlcnM9YS5SYyxyLl9oZWlmX2l0ZW1fYWRkX3Jhd19wcm9wZXJ0eT1hLlNjLHIuX2hlaWZfaXRlbV9nZXRfcHJvcGVydHlfcmF3X3NpemU9YS5UYyxyLl9oZWlmX2l0ZW1fZ2V0X3Byb3BlcnR5X3Jhd19kYXRhPWEuVWMsci5faGVpZl9pdGVtX2dldF9wcm9wZXJ0eV91dWlkX3R5cGU9YS5WYyxyLl9oZWlmX2ltYWdlX2hhbmRsZV9oYXNfY2FtZXJhX2ludHJpbnNpY19tYXRyaXg9YS5XYyxyLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfY2FtZXJhX2ludHJpbnNpY19tYXRyaXg9YS5YYyxyLl9oZWlmX2ltYWdlX2hhbmRsZV9oYXNfY2FtZXJhX2V4dHJpbnNpY19tYXRyaXg9YS5ZYyxyLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfY2FtZXJhX2V4dHJpbnNpY19tYXRyaXg9YS5aYyxyLl9oZWlmX2NhbWVyYV9leHRyaW5zaWNfbWF0cml4X3JlbGVhc2U9YS5fYyxyLl9oZWlmX2NhbWVyYV9leHRyaW5zaWNfbWF0cml4X2dldF9yb3RhdGlvbl9tYXRyaXg9YS4kYyxyLl9oZWlmX2ltYWdlX3NldF9iYXllcl9wYXR0ZXJuPWEuYWQsci5faGVpZl9pbWFnZV9hZGRfYmF5ZXJfY29tcG9uZW50PWEuYmQsci5faGVpZl9pbWFnZV9nZXRfYmF5ZXJfcGF0dGVybl9zaXplPWEuY2Qsci5faGVpZl9pbWFnZV9nZXRfYmF5ZXJfcGF0dGVybj1hLmRkLHIuX2hlaWZfcG9sYXJpemF0aW9uX2FuZ2xlX25vX2ZpbHRlcj1hLmVkLHIuX2hlaWZfcG9sYXJpemF0aW9uX2FuZ2xlX2lzX25vX2ZpbHRlcj1hLmZkLHIuX2hlaWZfaW1hZ2VfYWRkX3BvbGFyaXphdGlvbl9wYXR0ZXJuPWEuZ2Qsci5faGVpZl9pbWFnZV9nZXRfbnVtYmVyX29mX3BvbGFyaXphdGlvbl9wYXR0ZXJucz1hLmhkLHIuX2hlaWZfaW1hZ2VfZ2V0X3BvbGFyaXphdGlvbl9wYXR0ZXJuX2luZm89YS5pZCxyLl9oZWlmX2ltYWdlX2dldF9wb2xhcml6YXRpb25fcGF0dGVybl9kYXRhPWEuamQsci5faGVpZl9pbWFnZV9nZXRfcG9sYXJpemF0aW9uX3BhdHRlcm5faW5kZXhfZm9yX2NvbXBvbmVudD1hLmtkLHIuX2hlaWZfaW1hZ2VfYWRkX3NlbnNvcl9iYWRfcGl4ZWxzX21hcD1hLmxkLHIuX2hlaWZfaW1hZ2VfZ2V0X251bWJlcl9vZl9zZW5zb3JfYmFkX3BpeGVsc19tYXBzPWEubWQsci5faGVpZl9pbWFnZV9nZXRfc2Vuc29yX2JhZF9waXhlbHNfbWFwX2luZm89YS5uZCxyLl9oZWlmX2ltYWdlX2dldF9zZW5zb3JfYmFkX3BpeGVsc19tYXBfZGF0YT1hLm9kLHIuX2hlaWZfaW1hZ2VfYWRkX3NlbnNvcl9udWM9YS5wZCxyLl9oZWlmX2ltYWdlX2dldF9udW1iZXJfb2Zfc2Vuc29yX251Y3M9YS5xZCxyLl9oZWlmX2ltYWdlX2dldF9zZW5zb3JfbnVjX2luZm89YS5yZCxyLl9oZWlmX2ltYWdlX2dldF9zZW5zb3JfbnVjX2RhdGE9YS5zZCxyLl9oZWlmX2ltYWdlX3NldF9jaHJvbWFfbG9jYXRpb249YS50ZCxyLl9oZWlmX2ltYWdlX2hhc19jaHJvbWFfbG9jYXRpb249YS51ZCxyLl9oZWlmX2ltYWdlX2dldF9jaHJvbWFfbG9jYXRpb249YS52ZCxyLl9oZWlmX2l0ZW1fc2V0X2l0ZW1fbmFtZT1hLndkLHIuX2hlaWZfaXRlbV9nZXRfaXRlbV9kYXRhPWEueGQsci5faGVpZl9yZWxlYXNlX2l0ZW1fZGF0YT1hLnlkLHIuX2hlaWZfaXRlbV9nZXRfcHJvcGVydHlfZXh0ZW5kZWRfbGFuZ3VhZ2U9YS56ZCxyLl9oZWlmX2l0ZW1fc2V0X3Byb3BlcnR5X2V4dGVuZGVkX2xhbmd1YWdlPWEuQWQsci5faGVpZl9jb250ZXh0X2dldF9pdGVtX3JlZmVyZW5jZXM9YS5CZCxyLl9oZWlmX3JlbGVhc2VfaXRlbV9yZWZlcmVuY2VzPWEuQ2Qsci5faGVpZl9jb250ZXh0X2FkZF9pdGVtX3JlZmVyZW5jZT1hLkRkLHIuX2hlaWZfY29udGV4dF9hZGRfaXRlbV9yZWZlcmVuY2VzPWEuRWQsci5faGVpZl9jb250ZXh0X2FkZF9pdGVtPWEuRmQsci5faGVpZl9jb250ZXh0X2FkZF9taW1lX2l0ZW09YS5HZCxyLl9oZWlmX2NvbnRleHRfYWRkX3ByZWNvbXByZXNzZWRfbWltZV9pdGVtPWEuSGQsci5faGVpZl9jb250ZXh0X2FkZF91cmlfaXRlbT1hLklkLHIuX2hlaWZfY29udGV4dF9oYXNfc2VxdWVuY2U9YS5KZCxyLl9oZWlmX2NvbnRleHRfZ2V0X3NlcXVlbmNlX3RpbWVzY2FsZT1hLktkLHIuX2hlaWZfY29udGV4dF9nZXRfc2VxdWVuY2VfZHVyYXRpb249YS5MZCxyLl9oZWlmX3RyYWNrX3JlbGVhc2U9YS5NZCxyLl9oZWlmX2NvbnRleHRfbnVtYmVyX29mX3NlcXVlbmNlX3RyYWNrcz1hLk5kLHIuX2hlaWZfY29udGV4dF9nZXRfdHJhY2tfaWRzPWEuT2Qsci5faGVpZl90cmFja19nZXRfaWQ9YS5QZCxyLl9oZWlmX2NvbnRleHRfZ2V0X3RyYWNrPWEuUWQsci5faGVpZl90cmFja19nZXRfdHJhY2tfaGFuZGxlcl90eXBlPWEuUmQsci5faGVpZl90cmFja19nZXRfYXV4aWxpYXJ5X2luZm9fdHlwZT1hLlNkLHIuX2hlaWZfdHJhY2tfZ2V0X2F1eGlsaWFyeV9pbmZvX3R5cGVfdXJuPWEuVGQsci5faGVpZl90cmFja19oYXNfYWxwaGFfY2hhbm5lbD1hLlVkLHIuX2hlaWZfdHJhY2tfZ2V0X3RpbWVzY2FsZT1hLlZkLHIuX2hlaWZfdHJhY2tfZ2V0X251bWJlcl9vZl9yZXBldGl0aW9ucz1hLldkLHIuX2hlaWZfdHJhY2tfZ2V0X2ltYWdlX3Jlc29sdXRpb249YS5YZCxyLl9oZWlmX3RyYWNrX2RlY29kZV9uZXh0X2ltYWdlPWEuWWQsci5faGVpZl9kZWNvZGluZ19vcHRpb25zX2FsbG9jPWEuWmQsci5faGVpZl9kZWNvZGluZ19vcHRpb25zX2NvcHk9YS5fZCxyLl9oZWlmX2RlY29kaW5nX29wdGlvbnNfZnJlZT1hLiRkLHIuX2hlaWZfaW1hZ2VfZ2V0X2R1cmF0aW9uPWEuYWUsci5faGVpZl90cmFja19nZXRfc2FtcGxlX2VudHJ5X3R5cGVfb2ZfZmlyc3RfY2x1c3Rlcj1hLmJlLHIuX2hlaWZfdHJhY2tfZ2V0X3VyaW1fc2FtcGxlX2VudHJ5X3VyaV9vZl9maXJzdF9jbHVzdGVyPWEuY2Usci5faGVpZl90cmFja19nZXRfbmV4dF9yYXdfc2VxdWVuY2Vfc2FtcGxlPWEuZGUsci5faGVpZl9yYXdfc2VxdWVuY2Vfc2FtcGxlX3JlbGVhc2U9YS5lZSxyLl9oZWlmX3RhaV90aW1lc3RhbXBfcGFja2V0X3JlbGVhc2U9YS5mZSxyLl9oZWlmX3Jhd19zZXF1ZW5jZV9zYW1wbGVfZ2V0X2RhdGE9YS5nZSxyLl9oZWlmX3Jhd19zZXF1ZW5jZV9zYW1wbGVfZ2V0X2RhdGFfc2l6ZT1hLmhlLHIuX2hlaWZfcmF3X3NlcXVlbmNlX3NhbXBsZV9nZXRfZHVyYXRpb249YS5pZSxyLl9oZWlmX2NvbnRleHRfc2V0X3NlcXVlbmNlX3RpbWVzY2FsZT1hLmplLHIuX2hlaWZfY29udGV4dF9zZXRfbnVtYmVyX29mX3NlcXVlbmNlX3JlcGV0aXRpb25zPWEua2Usci5faGVpZl90cmFja19vcHRpb25zX2FsbG9jPWEubGUsci5faGVpZl90cmFja19vcHRpb25zX3JlbGVhc2U9YS5tZSxyLl9oZWlmX3RhaV9jbG9ja19pbmZvX3JlbGVhc2U9YS5uZSxyLl9oZWlmX3RyYWNrX29wdGlvbnNfc2V0X3RpbWVzY2FsZT1hLm9lLHIuX2hlaWZfdHJhY2tfb3B0aW9uc19zZXRfaW50ZXJsZWF2ZWRfc2FtcGxlX2F1eF9pbmZvcz1hLnBlLHIuX2hlaWZfdHJhY2tfb3B0aW9uc19lbmFibGVfc2FtcGxlX3RhaV90aW1lc3RhbXBzPWEucWUsci5faGVpZl90YWlfY2xvY2tfaW5mb19hbGxvYz1hLnJlLHIuX2hlaWZfdGFpX2Nsb2NrX2luZm9fY29weT1hLnNlLHIuX2hlaWZfdHJhY2tfb3B0aW9uc19lbmFibGVfc2FtcGxlX2dpbWlfY29udGVudF9pZHM9YS50ZSxyLl9oZWlmX3RyYWNrX29wdGlvbnNfc2V0X2dpbWlfdHJhY2tfaWQ9YS51ZSxyLl9oZWlmX3NlcXVlbmNlX2VuY29kaW5nX29wdGlvbnNfYWxsb2M9YS52ZSxyLl9oZWlmX3NlcXVlbmNlX2VuY29kaW5nX29wdGlvbnNfY29weT1hLndlLHIuX2hlaWZfc2VxdWVuY2VfZW5jb2Rpbmdfb3B0aW9uc19yZWxlYXNlPWEueGUsci5faGVpZl9jb250ZXh0X2FkZF92aXN1YWxfc2VxdWVuY2VfdHJhY2s9YS55ZSxyLl9oZWlmX2ltYWdlX3NldF9kdXJhdGlvbj1hLnplLHIuX2hlaWZfdHJhY2tfZW5jb2RlX2VuZF9vZl9zZXF1ZW5jZT1hLkFlLHIuX2hlaWZfdHJhY2tfZW5jb2RlX3NlcXVlbmNlX2ltYWdlPWEuQmUsci5faGVpZl9jb250ZXh0X2FkZF91cmlfbWV0YWRhdGFfc2VxdWVuY2VfdHJhY2s9YS5DZSxyLl9oZWlmX3Jhd19zZXF1ZW5jZV9zYW1wbGVfYWxsb2M9YS5EZSxyLl9oZWlmX3Jhd19zZXF1ZW5jZV9zYW1wbGVfc2V0X2RhdGE9YS5FZSxyLl9oZWlmX3Jhd19zZXF1ZW5jZV9zYW1wbGVfc2V0X2R1cmF0aW9uPWEuRmUsci5faGVpZl90cmFja19hZGRfcmF3X3NlcXVlbmNlX3NhbXBsZT1hLkdlLHIuX2hlaWZfdHJhY2tfZ2V0X251bWJlcl9vZl9zYW1wbGVfYXV4X2luZm9zPWEuSGUsci5faGVpZl90cmFja19nZXRfc2FtcGxlX2F1eF9pbmZvX3R5cGVzPWEuSWUsci5faGVpZl90cmFja19nZXRfZ2ltaV90cmFja19jb250ZW50X2lkPWEuSmUsci5faGVpZl9pbWFnZV9nZXRfZ2ltaV9zYW1wbGVfY29udGVudF9pZD1hLktlLHIuX2hlaWZfcmF3X3NlcXVlbmNlX3NhbXBsZV9nZXRfZ2ltaV9zYW1wbGVfY29udGVudF9pZD1hLkxlLHIuX2hlaWZfaW1hZ2Vfc2V0X2dpbWlfc2FtcGxlX2NvbnRlbnRfaWQ9YS5NZSxyLl9oZWlmX3Jhd19zZXF1ZW5jZV9zYW1wbGVfc2V0X2dpbWlfc2FtcGxlX2NvbnRlbnRfaWQ9YS5OZSxyLl9oZWlmX3Jhd19zZXF1ZW5jZV9zYW1wbGVfaGFzX3RhaV90aW1lc3RhbXA9YS5PZSxyLl9oZWlmX3Jhd19zZXF1ZW5jZV9zYW1wbGVfZ2V0X3RhaV90aW1lc3RhbXA9YS5QZSxyLl9oZWlmX3Jhd19zZXF1ZW5jZV9zYW1wbGVfc2V0X3RhaV90aW1lc3RhbXA9YS5RZSxyLl9oZWlmX3RhaV90aW1lc3RhbXBfcGFja2V0X2FsbG9jPWEuUmUsci5faGVpZl90cmFja19nZXRfdGFpX2Nsb2NrX2luZm9fb2ZfZmlyc3RfY2x1c3Rlcj1hLlNlLHIuX2hlaWZfdHJhY2tfYWRkX3JlZmVyZW5jZV90b190cmFjaz1hLlRlLHIuX2hlaWZfdHJhY2tfZ2V0X251bWJlcl9vZl90cmFja19yZWZlcmVuY2VfdHlwZXM9YS5VZSxyLl9oZWlmX3RyYWNrX2dldF90cmFja19yZWZlcmVuY2VfdHlwZXM9YS5WZSxyLl9oZWlmX3RyYWNrX2dldF9udW1iZXJfb2ZfdHJhY2tfcmVmZXJlbmNlX29mX3R5cGU9YS5XZSxyLl9oZWlmX3RyYWNrX2dldF9yZWZlcmVuY2VzX2Zyb21fdHJhY2s9YS5YZSxyLl9oZWlmX3RyYWNrX2ZpbmRfcmVmZXJyaW5nX3RyYWNrcz1hLlllLHIuX2hlaWZfaXRlbV9zZXRfcHJvcGVydHlfdGFpX2Nsb2NrX2luZm89YS5aZSxyLl9oZWlmX2l0ZW1fZ2V0X3Byb3BlcnR5X3RhaV9jbG9ja19pbmZvPWEuX2Usci5faGVpZl9pdGVtX3NldF9wcm9wZXJ0eV90YWlfdGltZXN0YW1wPWEuJGUsci5faGVpZl9pdGVtX2dldF9wcm9wZXJ0eV90YWlfdGltZXN0YW1wPWEuYWYsci5faGVpZl9pbWFnZV9zZXRfdGFpX3RpbWVzdGFtcD1hLmJmLHIuX2hlaWZfaW1hZ2VfZ2V0X3RhaV90aW1lc3RhbXA9YS5jZixyLl9oZWlmX3JlYWRfbWFpbl9icmFuZD1hLmRmLHIuX2hlaWZfZm91cmNjX3RvX2JyYW5kPWEuZWYsci5faGVpZl9yZWFkX21pbm9yX3ZlcnNpb25fYnJhbmQ9YS5mZixyLl9oZWlmX2JyYW5kX3RvX2ZvdXJjYz1hLmdmLHIuX2hlaWZfaGFzX2NvbXBhdGlibGVfYnJhbmQ9YS5oZixyLl9oZWlmX2dldF9nbG9iYWxfc2VjdXJpdHlfbGltaXRzPWEuamYsci5faGVpZl9saXN0X2NvbXBhdGlibGVfYnJhbmRzPWEua2Ysci5faGVpZl9mcmVlX2xpc3Rfb2ZfY29tcGF0aWJsZV9icmFuZHM9YS5sZixyLl9oZWlmX2dldF9maWxlX21pbWVfdHlwZT1hLm1mLHIuX2hlaWZfaGFzX2NvbXBhdGlibGVfZmlsZXR5cGU9YS5uZixyLl9oZWlmX2NoZWNrX2pwZWdfZmlsZXR5cGU9YS5vZixyLl9oZWlmX21haW5fYnJhbmQ9YS5wZixyLl9oZWlmX21ldGFkYXRhX2NvbXByZXNzaW9uX21ldGhvZF9zdXBwb3J0ZWQ9YS5xZixyLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfbnVtYmVyX29mX21ldGFkYXRhX2Jsb2Nrcz1hLnJmLHIuX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9saXN0X29mX21ldGFkYXRhX2Jsb2NrX0lEcz1hLnNmLHIuX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9tZXRhZGF0YV90eXBlPWEudGYsci5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X21ldGFkYXRhX2NvbnRlbnRfdHlwZT1hLnVmLHIuX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9tZXRhZGF0YV9zaXplPWEudmYsci5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X21ldGFkYXRhPWEud2Ysci5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X21ldGFkYXRhX2l0ZW1fdXJpX3R5cGU9YS54ZixyLl9oZWlmX2NvbnRleHRfYWRkX2V4aWZfbWV0YWRhdGE9YS55ZixyLl9oZWlmX2NvbnRleHRfYWRkX1hNUF9tZXRhZGF0YT1hLnpmLHIuX2hlaWZfY29udGV4dF9hZGRfWE1QX21ldGFkYXRhMj1hLkFmLHIuX2hlaWZfY29udGV4dF9hZGRfZ2VuZXJpY19tZXRhZGF0YT1hLkJmLHIuX2hlaWZfY29udGV4dF9hZGRfZ2VuZXJpY191cmlfbWV0YWRhdGE9YS5DZixyLl9oZWlmX2ltYWdlX2hhbmRsZV9oYXNfZGVwdGhfaW1hZ2U9YS5EZixyLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfbnVtYmVyX29mX2RlcHRoX2ltYWdlcz1hLkVmLHIuX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9saXN0X29mX2RlcHRoX2ltYWdlX0lEcz1hLkZmLHIuX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9kZXB0aF9pbWFnZV9oYW5kbGU9YS5HZixyLl9oZWlmX2RlcHRoX3JlcHJlc2VudGF0aW9uX2luZm9fZnJlZT1hLkhmLHIuX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9kZXB0aF9pbWFnZV9yZXByZXNlbnRhdGlvbl9pbmZvPWEuSWYsci5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X251bWJlcl9vZl90aHVtYm5haWxzPWEuSmYsci5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X2xpc3Rfb2ZfdGh1bWJuYWlsX0lEcz1hLktmLHIuX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF90aHVtYm5haWw9YS5MZixyLl9oZWlmX2NvbnRleHRfZW5jb2RlX3RodW1ibmFpbD1hLk1mLHIuX2hlaWZfZW5jb2Rpbmdfb3B0aW9uc19hbGxvYz1hLk5mLHIuX2hlaWZfZW5jb2Rpbmdfb3B0aW9uc19jb3B5PWEuT2Ysci5faGVpZl9lbmNvZGluZ19vcHRpb25zX2ZyZWU9YS5QZixyLl9oZWlmX2NvbnRleHRfYXNzaWduX3RodW1ibmFpbD1hLlFmLHIuX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9udW1iZXJfb2ZfYXV4aWxpYXJ5X2ltYWdlcz1hLlJmLHIuX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9saXN0X29mX2F1eGlsaWFyeV9pbWFnZV9JRHM9YS5TZixyLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfYXV4aWxpYXJ5X3R5cGU9YS5UZixyLl9oZWlmX2ltYWdlX2hhbmRsZV9yZWxlYXNlX2F1eGlsaWFyeV90eXBlPWEuVWYsci5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X2F1eGlsaWFyeV9pbWFnZV9oYW5kbGU9YS5WZixyLl9oZWlmX2ltYWdlX2hhbmRsZV9mcmVlX2F1eGlsaWFyeV90eXBlcz1hLldmLHIuX2hlaWZfY29udGV4dF9nZXRfZW50aXR5X2dyb3Vwcz1hLlhmLHIuX2hlaWZfZW50aXR5X2dyb3Vwc19yZWxlYXNlPWEuWWYsci5faGVpZl9nZXRfZGlzYWJsZWRfc2VjdXJpdHlfbGltaXRzPWEuWmYsci5faGVpZl9jb250ZXh0X2dldF9zZWN1cml0eV9saW1pdHM9YS5fZixyLl9oZWlmX2NvbnRleHRfc2V0X3NlY3VyaXR5X2xpbWl0cz1hLiRmLHIuX2hlaWZfY29udGV4dF9zZXRfbWF4aW11bV9pbWFnZV9zaXplX2xpbWl0PWEuYWcsci5faGVpZl9oYXZlX2VuY29kZXJfZm9yX2Zvcm1hdD1hLmJnLHIuX2hlaWZfZ2V0X2VuY29kZXJfZGVzY3JpcHRvcnM9YS5jZyxyLl9oZWlmX2VuY29kZXJfZGVzY3JpcHRvcl9nZXRfbmFtZT1hLmRnLHIuX2hlaWZfZW5jb2Rlcl9kZXNjcmlwdG9yX2dldF9pZF9uYW1lPWEuZWcsci5faGVpZl9lbmNvZGVyX2Rlc2NyaXB0b3JfZ2V0X2NvbXByZXNzaW9uX2Zvcm1hdD1hLmZnLHIuX2hlaWZfZW5jb2Rlcl9kZXNjcmlwdG9yX3N1cHBvcnRzX2xvc3N5X2NvbXByZXNzaW9uPWEuZ2csci5faGVpZl9lbmNvZGVyX2Rlc2NyaXB0b3Jfc3VwcG9ydHNfbG9zc2xlc3NfY29tcHJlc3Npb249YS5oZyxyLl9oZWlmX2NvbnRleHRfZ2V0X2VuY29kZXI9YS5pZyxyLl9oZWlmX2NvbnRleHRfZ2V0X2VuY29kZXJfZm9yX2Zvcm1hdD1hLmpnLHIuX2hlaWZfZW5jb2Rlcl9yZWxlYXNlPWEua2csci5faGVpZl9lbmNvZGVyX2dldF9uYW1lPWEubGcsci5faGVpZl9lbmNvZGVyX3NldF9sb3NzeV9xdWFsaXR5PWEubWcsci5faGVpZl9lbmNvZGVyX3NldF9sb3NzbGVzcz1hLm5nLHIuX2hlaWZfZW5jb2Rlcl9zZXRfbG9nZ2luZ19sZXZlbD1hLm9nLHIuX2hlaWZfZW5jb2Rlcl9saXN0X3BhcmFtZXRlcnM9YS5wZyxyLl9oZWlmX2VuY29kZXJfcGFyYW1ldGVyX2dldF9uYW1lPWEucWcsci5faGVpZl9lbmNvZGVyX3BhcmFtZXRlcl9nZXRfdHlwZT1hLnJnLHIuX2hlaWZfZW5jb2Rlcl9wYXJhbWV0ZXJfZ2V0X3ZhbGlkX2ludGVnZXJfcmFuZ2U9YS5zZyxyLl9oZWlmX2VuY29kZXJfcGFyYW1ldGVyX2dldF92YWxpZF9pbnRlZ2VyX3ZhbHVlcz1hLnRnLHIuX2hlaWZfZW5jb2Rlcl9wYXJhbWV0ZXJfZ2V0X3ZhbGlkX3N0cmluZ192YWx1ZXM9YS51ZyxyLl9oZWlmX2VuY29kZXJfc2V0X3BhcmFtZXRlcl9pbnRlZ2VyPWEudmcsci5faGVpZl9lbmNvZGVyX2dldF9wYXJhbWV0ZXJfaW50ZWdlcj1hLndnLHIuX2hlaWZfZW5jb2Rlcl9wYXJhbWV0ZXJfaW50ZWdlcl92YWxpZF9yYW5nZT1hLnhnLHIuX2hlaWZfZW5jb2Rlcl9zZXRfcGFyYW1ldGVyX2Jvb2xlYW49YS55ZyxyLl9oZWlmX2VuY29kZXJfZ2V0X3BhcmFtZXRlcl9ib29sZWFuPWEuemcsci5faGVpZl9lbmNvZGVyX3NldF9wYXJhbWV0ZXJfc3RyaW5nPWEuQWcsci5faGVpZl9lbmNvZGVyX2dldF9wYXJhbWV0ZXJfc3RyaW5nPWEuQmcsci5faGVpZl9lbmNvZGVyX3BhcmFtZXRlcl9zdHJpbmdfdmFsaWRfdmFsdWVzPWEuQ2csci5faGVpZl9lbmNvZGVyX3BhcmFtZXRlcl9pbnRlZ2VyX3ZhbGlkX3ZhbHVlcz1hLkRnLHIuX2hlaWZfZW5jb2Rlcl9zZXRfcGFyYW1ldGVyPWEuRWcsci5faGVpZl9lbmNvZGVyX2dldF9wYXJhbWV0ZXI9YS5GZyxyLl9oZWlmX2VuY29kZXJfaGFzX2RlZmF1bHQ9YS5HZyxyLl9oZWlmX29yaWVudGF0aW9uX2NvbmNhdD1hLkhnLHIuX2hlaWZfY29udGV4dF9lbmNvZGVfaW1hZ2U9YS5JZyxyLl9oZWlmX2NvbnRleHRfYWRkX292ZXJsYXlfaW1hZ2U9YS5KZyxyLl9oZWlmX2NvbnRleHRfc2V0X3ByaW1hcnlfaW1hZ2U9YS5LZyxyLl9oZWlmX2NvbnRleHRfc2V0X21ham9yX2JyYW5kPWEuTGcsci5faGVpZl9jb250ZXh0X2FkZF9jb21wYXRpYmxlX2JyYW5kPWEuTWcsci5faGVpZl9jb250ZXh0X3NldF91bmlmPWEuTmcsci5faGVpZl9lbmNvZGVyX2Rlc2NyaXB0b3Jfc3VwcG9ydGVzX2xvc3N5X2NvbXByZXNzaW9uPWEuT2csci5faGVpZl9lbmNvZGVyX2Rlc2NyaXB0b3Jfc3VwcG9ydGVzX2xvc3NsZXNzX2NvbXByZXNzaW9uPWEuUGcsci5faGVpZl9jb250ZXh0X2dldF9lbmNvZGVyX2Rlc2NyaXB0b3JzPWEuUWcsci5faGVpZl9jb250ZXh0X3NldF9tYXhfZGVjb2RpbmdfdGhyZWFkcz1hLlJnLHIuX2hlaWZfY29udGV4dF9nZXRfbWF4X2RlY29kaW5nX3RocmVhZHM9YS5TZyxyLl9oZWlmX2hhdmVfZGVjb2Rlcl9mb3JfZm9ybWF0PWEuVGcsci5faGVpZl9nZXRfZGVjb2Rlcl9kZXNjcmlwdG9ycz1hLlVnLHIuX2hlaWZfZGVjb2Rlcl9kZXNjcmlwdG9yX2dldF9uYW1lPWEuVmcsci5faGVpZl9kZWNvZGVyX2Rlc2NyaXB0b3JfZ2V0X2lkX25hbWU9YS5XZyxyLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfaXRlbV9pZD1hLlhnLHIuX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9sdW1hX2JpdHNfcGVyX3BpeGVsPWEuWWcsci5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X2Nocm9tYV9iaXRzX3Blcl9waXhlbD1hLlpnLHIuX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9wcmVmZXJyZWRfZGVjb2RpbmdfY29sb3JzcGFjZT1hLl9nLHIuX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9pc3BlX3dpZHRoPWEuJGcsci5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X2lzcGVfaGVpZ2h0PWEuYWgsci5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X3BpeGVsX2FzcGVjdF9yYXRpbz1hLmJoLHIuX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9jb250ZXh0PWEuY2gsci5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X2dpbWlfY29udGVudF9pZD1hLmRoLHIuX2hlaWZfaW1hZ2VfaGFuZGxlX3NldF9naW1pX2NvbnRlbnRfaWQ9YS5laCxyLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfbnVtYmVyX29mX2NtcGRfY29tcG9uZW50cz1hLmZoLHIuX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9jbXBkX2NvbXBvbmVudF90eXBlPWEuZ2gsci5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X2NtcGRfY29tcG9uZW50X3R5cGVfdXJpPWEuaGgsci5faGVpZl9pbWFnZV9oYW5kbGVfaGFzX2dpbWlfY29tcG9uZW50X2NvbnRlbnRfaWRzPWEuaWgsci5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X2dpbWlfY29tcG9uZW50X2NvbnRlbnRfaWQ9YS5qaCxyLl9oZWlmX2ltYWdlX2hhbmRsZV9zZXRfZ2ltaV9jb21wb25lbnRfY29udGVudF9pZD1hLmtoLHIuX2hlaWZfY29udGV4dF9yZWFkX2Zyb21fZmlsZT1hLmxoLHIuX2hlaWZfY29udGV4dF9yZWFkX2Zyb21fbWVtb3J5X3dpdGhvdXRfY29weT1hLm1oLHIuX2hlaWZfY29udGV4dF9yZWFkX2Zyb21fcmVhZGVyPWEubmgsci5faGVpZl9jb250ZXh0X2lzX3RvcF9sZXZlbF9pbWFnZV9JRD1hLm9oLHIuX2hlaWZfY29udGV4dF9nZXRfcHJpbWFyeV9pbWFnZV9JRD1hLnBoLHIuX2hlaWZfY29udGV4dF9kZWJ1Z19kdW1wX2JveGVzX3RvX2ZpbGU9YS5xaCxyLl9oZWlmX2NvbnRleHRfc2V0X3dyaXRlX21pbmlfZm9ybWF0PWEucmgsci5faGVpZl9jb250ZXh0X3dyaXRlX3RvX2ZpbGU9YS5zaCxyLl9oZWlmX2NvbnRleHRfd3JpdGU9YS50aCxyLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfaW1hZ2VfdGlsaW5nPWEudWgsci5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X2dyaWRfaW1hZ2VfdGlsZV9pZD1hLnZoLHIuX2hlaWZfaW1hZ2VfaGFuZGxlX2RlY29kZV9pbWFnZV90aWxlPWEud2gsci5faGVpZl9jb250ZXh0X2VuY29kZV9ncmlkPWEueGgsci5faGVpZl9jb250ZXh0X2FkZF9ncmlkX2ltYWdlPWEueWgsci5faGVpZl9jb250ZXh0X2FkZF9pbWFnZV90aWxlPWEuemgsci5faGVpZl9pbWFnZV9nZXRfbnVtYmVyX29mX3VzZWRfY29tcG9uZW50cz1hLkFoLHIuX2hlaWZfaW1hZ2VfZ2V0X3VzZWRfY29tcG9uZW50X2lkcz1hLkJoLHIuX2hlaWZfaW1hZ2VfZ2V0X2NvbXBvbmVudF9jaGFubmVsPWEuQ2gsci5faGVpZl9pbWFnZV9nZXRfY29tcG9uZW50X3dpZHRoPWEuRGgsci5faGVpZl9pbWFnZV9nZXRfY29tcG9uZW50X2hlaWdodD1hLkVoLHIuX2hlaWZfaW1hZ2VfZ2V0X2NvbXBvbmVudF9iaXRzX3Blcl9waXhlbD1hLkZoLHIuX2hlaWZfaW1hZ2VfZ2V0X2NvbXBvbmVudF90eXBlPWEuR2gsci5faGVpZl9pbWFnZV9nZXRfY29tcG9uZW50X2RhdGF0eXBlPWEuSGgsci5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X251bWJlcl9vZl9jb21wb25lbnRzPWEuSWgsci5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X3VzZWRfY29tcG9uZW50X2lkcz1hLkpoLHIuX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9jb21wb25lbnRfdHlwZT1hLktoLHIuX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9jb21wb25lbnRfYml0c19wZXJfcGl4ZWw9YS5MaCxyLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfY29tcG9uZW50X2RhdGF0eXBlPWEuTWgsci5faGVpZl9pbWFnZV9hZGRfY29tcG9uZW50PWEuTmgsci5faGVpZl9pbWFnZV9nZXRfY29tcG9uZW50X3JlYWRvbmx5PWEuT2gsci5faGVpZl9pbWFnZV9nZXRfY29tcG9uZW50PWEuUGgsci5faGVpZl9pbWFnZV9nZXRfY29tcG9uZW50X3VpbnQxNl9yZWFkb25seT1hLlFoLHIuX2hlaWZfaW1hZ2VfZ2V0X2NvbXBvbmVudF91aW50MTY9YS5SaCxyLl9oZWlmX2ltYWdlX2dldF9jb21wb25lbnRfdWludDMyX3JlYWRvbmx5PWEuU2gsci5faGVpZl9pbWFnZV9nZXRfY29tcG9uZW50X3VpbnQzMj1hLlRoLHIuX2hlaWZfaW1hZ2VfZ2V0X2NvbXBvbmVudF91aW50NjRfcmVhZG9ubHk9YS5VaCxyLl9oZWlmX2ltYWdlX2dldF9jb21wb25lbnRfdWludDY0PWEuVmgsci5faGVpZl9pbWFnZV9nZXRfY29tcG9uZW50X2ludDhfcmVhZG9ubHk9YS5XaCxyLl9oZWlmX2ltYWdlX2dldF9jb21wb25lbnRfaW50OD1hLlhoLHIuX2hlaWZfaW1hZ2VfZ2V0X2NvbXBvbmVudF9pbnQxNl9yZWFkb25seT1hLlloLHIuX2hlaWZfaW1hZ2VfZ2V0X2NvbXBvbmVudF9pbnQxNj1hLlpoLHIuX2hlaWZfaW1hZ2VfZ2V0X2NvbXBvbmVudF9pbnQzMl9yZWFkb25seT1hLl9oLHIuX2hlaWZfaW1hZ2VfZ2V0X2NvbXBvbmVudF9pbnQzMj1hLiRoLHIuX2hlaWZfaW1hZ2VfZ2V0X2NvbXBvbmVudF9pbnQ2NF9yZWFkb25seT1hLmFpLHIuX2hlaWZfaW1hZ2VfZ2V0X2NvbXBvbmVudF9pbnQ2ND1hLmJpLHIuX2hlaWZfaW1hZ2VfZ2V0X2NvbXBvbmVudF9mbG9hdDMyX3JlYWRvbmx5PWEuY2ksci5faGVpZl9pbWFnZV9nZXRfY29tcG9uZW50X2Zsb2F0MzI9YS5kaSxyLl9oZWlmX2ltYWdlX2dldF9jb21wb25lbnRfZmxvYXQ2NF9yZWFkb25seT1hLmVpLHIuX2hlaWZfaW1hZ2VfZ2V0X2NvbXBvbmVudF9mbG9hdDY0PWEuZmksci5faGVpZl9pbWFnZV9nZXRfY29tcG9uZW50X2NvbXBsZXgzMl9yZWFkb25seT1hLmdpLHIuX2hlaWZfaW1hZ2VfZ2V0X2NvbXBvbmVudF9jb21wbGV4MzI9YS5oaSxyLl9oZWlmX2ltYWdlX2dldF9jb21wb25lbnRfY29tcGxleDY0X3JlYWRvbmx5PWEuaWksci5faGVpZl9pbWFnZV9nZXRfY29tcG9uZW50X2NvbXBsZXg2ND1hLmppLHIuX2hlaWZfaW1hZ2Vfc2V0X2dpbWlfY29tcG9uZW50X2NvbnRlbnRfaWQ9YS5raSxyLl9oZWlmX3VuY2lfaW1hZ2VfcGFyYW1ldGVyc19hbGxvYz1hLmxpLHIuX2hlaWZfdW5jaV9pbWFnZV9wYXJhbWV0ZXJzX2NvcHk9YS5taSxyLl9oZWlmX3VuY2lfaW1hZ2VfcGFyYW1ldGVyc19yZWxlYXNlPWEubmksci5faGVpZl9jb250ZXh0X2FkZF9lbXB0eV91bmNpX2ltYWdlPWEub2ksci5faGVpZl9pbWFnZV9oYW5kbGVfYWRkX3RleHRfaXRlbT1hLnBpLHIuX2hlaWZfdGV4dF9pdGVtX3JlbGVhc2U9YS5xaSxyLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfbnVtYmVyX29mX3RleHRfaXRlbXM9YS5yaSxyLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfbGlzdF9vZl90ZXh0X2l0ZW1faWRzPWEuc2ksci5faGVpZl9jb250ZXh0X2dldF90ZXh0X2l0ZW09YS50aSxyLl9oZWlmX3RleHRfaXRlbV9nZXRfaWQ9YS51aSxyLl9oZWlmX3RleHRfaXRlbV9nZXRfY29udGVudD1hLnZpLHIuX2hlaWZfdGV4dF9pdGVtX2dldF9wcm9wZXJ0eV9leHRlbmRlZF9sYW5ndWFnZT1hLndpLHIuX2hlaWZfdGV4dF9pdGVtX3NldF9leHRlbmRlZF9sYW5ndWFnZT1hLnhpLHIuX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9vbWFmX2ltYWdlX3Byb2plY3Rpb249YS55aSxyLl9oZWlmX2ltYWdlX2hhbmRsZV9zZXRfb21hZl9pbWFnZV9wcm9qZWN0aW9uPWEuemksci5faGVpZl9pbWFnZV9nZXRfb21hZl9pbWFnZV9wcm9qZWN0aW9uPWEuQWksci5faGVpZl9pbWFnZV9zZXRfb21hZl9pbWFnZV9wcm9qZWN0aW9uPWEuQmksci5fZGUyNjVfbmV3X2RlY29kZXI9YS5DaSxyLl9kZTI2NV9zZXRfcGFyYW1ldGVyX2Jvb2w9YS5EaSxyLl9kZTI2NV9nZXRfdmVyc2lvbj1hLkVpLHIuX2RlMjY1X2luaXQ9YS5GaSxyLl9kZTI2NV9mcmVlPWEuR2ksci5fZGUyNjVfZnJlZV9kZWNvZGVyPWEuSGksci5fZGUyNjVfcHVzaF9OQUw9YS5JaSxyLl9kZTI2NV9mbHVzaF9kYXRhPWEuSmksci5fZGUyNjVfZGVjb2RlPWEuS2ksci5fZGUyNjVfZ2V0X25leHRfcGljdHVyZT1hLkxpLHIuX2RlMjY1X2dldF9pbWFnZV91c2VyX2RhdGE9YS5NaSxyLl9kZTI2NV9nZXRfY2hyb21hX2Zvcm1hdD1hLk5pLHIuX2RlMjY1X2dldF9pbWFnZV93aWR0aD1hLk9pLHIuX2RlMjY1X2dldF9pbWFnZV9oZWlnaHQ9YS5QaSxyLl9kZTI2NV9nZXRfYml0c19wZXJfcGl4ZWw9YS5RaSxyLl9kZTI2NV9nZXRfaW1hZ2VfcGxhbmU9YS5SaSxyLl9kZTI2NV9nZXRfaW1hZ2VfY29sb3VyX3ByaW1hcmllcz1hLlNpLHIuX2RlMjY1X2dldF9pbWFnZV90cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3M9YS5UaSxyLl9kZTI2NV9nZXRfaW1hZ2VfbWF0cml4X2NvZWZmaWNpZW50cz1hLlVpLHIuX2RlMjY1X2dldF9pbWFnZV9mdWxsX3JhbmdlX2ZsYWc9YS5WaSxyLl9kZTI2NV9yZWxlYXNlX25leHRfcGljdHVyZT1hLldpO3ZhciBTYT1hLlhpLE1hPWEuWWk7ci5keW5DYWxsX2ppPWEuWmksci5keW5DYWxsX2lpaj1hLl9pLHIuZHluQ2FsbF9qaWpqPWEuJGksci5keW5DYWxsX3Zpamo9YS5haixyLmR5bkNhbGxfamlqaT1hLmJqLHIuZHluQ2FsbF92aWlqaWk9YS5jaixyLmR5bkNhbGxfaWlpaWlqPWEuZGosci5keW5DYWxsX2lpaWlpamo9YS5laixyLmR5bkNhbGxfaWlpaWlpamo9YS5maixyLl9oZWlmX2Vycm9yX251bGxfcG9pbnRlcl9hcmd1bWVudD0xMDU5OTIsci5faGVpZl9lcnJvcl9vdXRfb2ZfbWVtb3J5PTEwNjAwNCxyLl9oZWlmX2Vycm9yX2ludGVybmFsX2V4Y2VwdGlvbj0xMDYwMTYsci5faGVpZl9lcnJvcl9zdWNjZXNzPTEwODI4MCxyLl9oZWlmX2Vycm9yX29rPTEwODcyMCxyLl9oZWlmX2Vycm9yX2ludmFsaWRfcGFyYW1ldGVyX3ZhbHVlPTEwODc0NCxyLl9oZWlmX2Vycm9yX3Vuc3VwcG9ydGVkX3BhcmFtZXRlcj0xMDg3MzI7dmFyIFB0O0llPWZ1bmN0aW9uIGUoKXtQdHx8SXIoKSxQdHx8KEllPWUpfTtmdW5jdGlvbiBJcigpe2lmKHZlPjB8fChUZSgpLHZlPjApKXJldHVybjtmdW5jdGlvbiBlKCl7UHR8fChQdD0hMCxyLmNhbGxlZFJ1bj0hMCwheGUmJihjdCgpLFMociksci5vblJ1bnRpbWVJbml0aWFsaXplZCYmci5vblJ1bnRpbWVJbml0aWFsaXplZCgpLE9lKCkpKX1yLnNldFN0YXR1cz8oci5zZXRTdGF0dXMoIlJ1bm5pbmcuLi4iKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe3Iuc2V0U3RhdHVzKCIiKX0sMSksZSgpfSwxKSk6ZSgpfWlmKHIucHJlSW5pdClmb3IodHlwZW9mIHIucHJlSW5pdD09ImZ1bmN0aW9uIiYmKHIucHJlSW5pdD1bci5wcmVJbml0XSk7ci5wcmVJbml0Lmxlbmd0aD4wOylyLnByZUluaXQucG9wKCkoKTtJcigpO2Z1bmN0aW9uIGpyKGUpe2Zvcih2YXIgdD1uZXcgQXJyYXlCdWZmZXIoZS5sZW5ndGgpLG49bmV3IFVpbnQ4QXJyYXkodCksaT0wLF89ZS5sZW5ndGg7aTxfO2krKyluW2ldPWUuY2hhckNvZGVBdChpKTtyZXR1cm4gdH12YXIgYmU9ZnVuY3Rpb24oZSl7dGhpcy5oYW5kbGU9ZSx0aGlzLmltZz1udWxsfTtiZS5wcm90b3R5cGUuZnJlZT1mdW5jdGlvbigpe3RoaXMuaGFuZGxlJiYoci5oZWlmX2ltYWdlX2hhbmRsZV9yZWxlYXNlKHRoaXMuaGFuZGxlKSx0aGlzLmhhbmRsZT1udWxsKX0sYmUucHJvdG90eXBlLl9lbnN1cmVJbWFnZT1mdW5jdGlvbigpe2lmKCF0aGlzLmltZyl7dmFyIGU9ci5oZWlmX2pzX2RlY29kZV9pbWFnZSh0aGlzLmhhbmRsZSxyLmhlaWZfY29sb3JzcGFjZS5oZWlmX2NvbG9yc3BhY2VfWUNiQ3Isci5oZWlmX2Nocm9tYS5oZWlmX2Nocm9tYV80MjApO2lmKCFlfHxlLmNvZGUpe2NvbnNvbGUubG9nKCJEZWNvZGluZyBpbWFnZSBmYWlsZWQiLHRoaXMuaGFuZGxlLGUpO3JldHVybn10aGlzLmRhdGE9bmV3IFVpbnQ4QXJyYXkoanIoZS5kYXRhKSksZGVsZXRlIGUuZGF0YSx0aGlzLmltZz1lLGUuYWxwaGEhPT12b2lkIDAmJih0aGlzLmFscGhhPW5ldyBVaW50OEFycmF5KGpyKGUuYWxwaGEpKSxkZWxldGUgZS5hbHBoYSl9fSxiZS5wcm90b3R5cGUuZ2V0X3dpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHIuaGVpZl9pbWFnZV9oYW5kbGVfZ2V0X3dpZHRoKHRoaXMuaGFuZGxlKX0sYmUucHJvdG90eXBlLmdldF9oZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5oZWlmX2ltYWdlX2hhbmRsZV9nZXRfaGVpZ2h0KHRoaXMuaGFuZGxlKX0sYmUucHJvdG90eXBlLmlzX3ByaW1hcnk9ZnVuY3Rpb24oKXtyZXR1cm4hIXIuaGVpZl9pbWFnZV9oYW5kbGVfaXNfcHJpbWFyeV9pbWFnZSh0aGlzLmhhbmRsZSl9LGJlLnByb3RvdHlwZS5oYXNfYWxwaGFfY2hhbm5lbD1mdW5jdGlvbigpe3JldHVybiEhci5oZWlmX2ltYWdlX2hhbmRsZV9oYXNfYWxwaGFfY2hhbm5lbCh0aGlzLmhhbmRsZSl9LGJlLnByb3RvdHlwZS5pc19wcmVtdWx0aXBsaWVkX2FscGhhPWZ1bmN0aW9uKCl7cmV0dXJuISFyLmhlaWZfaW1hZ2VfaGFuZGxlX2lzX3ByZW11bHRpcGxpZWRfYWxwaGEodGhpcy5oYW5kbGUpfSxiZS5wcm90b3R5cGUuZGlzcGxheT1mdW5jdGlvbihlLHQpe3RoaXMuZ2V0X3dpZHRoKCksdGhpcy5nZXRfaGVpZ2h0KCksc2V0VGltZW91dCgoYXN5bmMgZnVuY3Rpb24oKXtpZighdGhpcy5pbWcpe3ZhciBuPWF3YWl0IHIuaGVpZl9qc19kZWNvZGVfaW1hZ2UyKHRoaXMuaGFuZGxlLHIuaGVpZl9jb2xvcnNwYWNlLmhlaWZfY29sb3JzcGFjZV9SR0Isci5oZWlmX2Nocm9tYS5oZWlmX2Nocm9tYV9pbnRlcmxlYXZlZF9SR0JBKTtpZighbnx8bi5jb2RlKXtjb25zb2xlLmxvZygiRGVjb2RpbmcgaW1hZ2UgZmFpbGVkIix0aGlzLmhhbmRsZSxuKSx0KG51bGwpO3JldHVybn1mb3IobGV0IGkgb2Ygbi5jaGFubmVscylpZihpLmlkPT1yLmhlaWZfY2hhbm5lbC5oZWlmX2NoYW5uZWxfaW50ZXJsZWF2ZWQpaWYoaS5zdHJpZGU9PWkud2lkdGgqNCllLmRhdGEuc2V0KGkuZGF0YSk7ZWxzZSBmb3IobGV0IF89MDtfPGkuaGVpZ2h0O18rKyl7bGV0IHM9aS5kYXRhLnNsaWNlKF8qaS5zdHJpZGUsXyppLnN0cmlkZStpLndpZHRoKjQpLGY9XyppLndpZHRoKjQ7ZS5kYXRhLnNldChzLGYpfXIuaGVpZl9pbWFnZV9yZWxlYXNlKG4uaW1hZ2UpfXQoZSl9KS5iaW5kKHRoaXMpLDApfTt2YXIgSHI9ZnVuY3Rpb24oKXt0aGlzLmRlY29kZXI9bnVsbH07SHIucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihlKXtpZih0aGlzLmRlY29kZXImJnIuaGVpZl9jb250ZXh0X2ZyZWUodGhpcy5kZWNvZGVyKSx0aGlzLmRlY29kZXI9ci5oZWlmX2NvbnRleHRfYWxsb2MoKSwhdGhpcy5kZWNvZGVyKXJldHVybiBjb25zb2xlLmxvZygiQ291bGQgbm90IGNyZWF0ZSBIRUlGIGNvbnRleHQiKSxbXTt2YXIgdD1yLmhlaWZfY29udGV4dF9yZWFkX2Zyb21fbWVtb3J5KHRoaXMuZGVjb2RlcixlKTtpZih0LmNvZGUhPT1yLmhlaWZfZXJyb3JfY29kZS5oZWlmX2Vycm9yX09rKXJldHVybiBjb25zb2xlLmxvZygiQ291bGQgbm90IHBhcnNlIEhFSUYgZmlsZSIsdC5tZXNzYWdlKSxbXTt2YXIgbj1yLmhlaWZfanNfY29udGV4dF9nZXRfbGlzdF9vZl90b3BfbGV2ZWxfaW1hZ2VfSURzKHRoaXMuZGVjb2Rlcik7aWYoIW58fG4uY29kZSlyZXR1cm4gY29uc29sZS5sb2coIkVycm9yIGxvYWRpbmcgaW1hZ2UgaWRzIixuKSxbXTtpZighbi5sZW5ndGgpcmV0dXJuIGNvbnNvbGUubG9nKCJObyBpbWFnZXMgZm91bmQiKSxbXTtmb3IodmFyIGk9W10sXz0wO188bi5sZW5ndGg7XysrKXt2YXIgcz1yLmhlaWZfanNfY29udGV4dF9nZXRfaW1hZ2VfaGFuZGxlKHRoaXMuZGVjb2RlcixuW19dKTtpZighc3x8cy5jb2RlKXtjb25zb2xlLmxvZygiQ291bGQgbm90IGdldCBpbWFnZSBkYXRhIGZvciBpZCIsbltfXSxzKTtjb250aW51ZX1pLnB1c2gobmV3IGJlKHMpKX1yZXR1cm4gaX07dmFyIFVhPWZ1bmN0aW9uKGUpe3JldHVybiBlLmNoYXJDb2RlQXQoMCk8PDI0fGUuY2hhckNvZGVBdCgxKTw8MTZ8ZS5jaGFyQ29kZUF0KDIpPDw4fGUuY2hhckNvZGVBdCgzKX07ci5IZWlmSW1hZ2U9YmUsci5IZWlmRGVjb2Rlcj1IcixyLmZvdXJjYz1VYTtjb25zdCBSYT1bImhlaWZfZXJyb3JfY29kZSIsImhlaWZfc3ViZXJyb3JfY29kZSIsImhlaWZfY29tcHJlc3Npb25fZm9ybWF0IiwiaGVpZl9jaHJvbWEiLCJoZWlmX2NvbG9yc3BhY2UiLCJoZWlmX2NoYW5uZWwiXTtmb3IoY29uc3QgZSBvZiBSYSlmb3IoY29uc3QgdCBpbiByW2VdKSFyW2VdLmhhc093blByb3BlcnR5KHQpfHx0PT09InZhbHVlcyJ8fChyW3RdPXJbZV1bdF0pO2Zvcihjb25zdCBlIGluIHIpZS5pbmRleE9mKCJfaGVpZl8iKSE9PTB8fHJbZS5zbGljZSgxKV0hPT12b2lkIDB8fChyW2Uuc2xpY2UoMSldPXJbZV0pO3JldHVybiBQPXIsUH19KSgpO2QuZXhwb3J0cz1jfSkoTWUpO3ZhciBXcj1NZS5leHBvcnRzLEJyPVNlKFdyKSxvZT1VaW50OEFycmF5LE5lPVVpbnQxNkFycmF5LHFyPUludDMyQXJyYXkscnI9bmV3IG9lKFswLDAsMCwwLDAsMCwwLDAsMSwxLDEsMSwyLDIsMiwyLDMsMywzLDMsNCw0LDQsNCw1LDUsNSw1LDAsMCwwLDBdKSxucj1uZXcgb2UoWzAsMCwwLDAsMSwxLDIsMiwzLDMsNCw0LDUsNSw2LDYsNyw3LDgsOCw5LDksMTAsMTAsMTEsMTEsMTIsMTIsMTMsMTMsMCwwXSksR3I9bmV3IG9lKFsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSksaXI9ZnVuY3Rpb24oZCxsKXtmb3IodmFyIGM9bmV3IE5lKDMxKSx1PTA7dTwzMTsrK3UpY1t1XT1sKz0xPDxkW3UtMV07Zm9yKHZhciBtPW5ldyBxcihjWzMwXSksdT0xO3U8MzA7Kyt1KWZvcih2YXIgdz1jW3VdO3c8Y1t1KzFdOysrdyltW3ddPXctY1t1XTw8NXx1O3JldHVybntiOmMscjptfX0sYXI9aXIocnIsMiksb3I9YXIuYixWcj1hci5yO29yWzI4XT0yNTgsVnJbMjU4XT0yODtmb3IodmFyIFlyPWlyKG5yLDApLFhyPVlyLmIsJHQ9bmV3IE5lKDMyNzY4KSxCPTA7QjwzMjc2ODsrK0Ipe3ZhciBGZT0oQiY0MzY5MCk+PjF8KEImMjE4NDUpPDwxO0ZlPShGZSY1MjQyOCk+PjJ8KEZlJjEzMTA3KTw8MixGZT0oRmUmNjE2ODApPj40fChGZSYzODU1KTw8NCwkdFtCXT0oKEZlJjY1MjgwKT4+OHwoRmUmMjU1KTw8OCk+PjF9Zm9yKHZhciBYZT1mdW5jdGlvbihkLGwsYyl7Zm9yKHZhciB1PWQubGVuZ3RoLG09MCx3PW5ldyBOZShsKTttPHU7KyttKWRbbV0mJisrd1tkW21dLTFdO3ZhciBQPW5ldyBOZShsKTtmb3IobT0xO208bDsrK20pUFttXT1QW20tMV0rd1ttLTFdPDwxO3ZhciByO2lmKGMpe3I9bmV3IE5lKDE8PGwpO3ZhciBTPTE1LWw7Zm9yKG09MDttPHU7KyttKWlmKGRbbV0pZm9yKHZhciBEPW08PDR8ZFttXSxDPWwtZFttXSxiPVBbZFttXS0xXSsrPDxDLCQ9YnwoMTw8QyktMTtiPD0kOysrYilyWyR0W2JdPj5TXT1EfWVsc2UgZm9yKHI9bmV3IE5lKHUpLG09MDttPHU7KyttKWRbbV0mJihyW21dPSR0W1BbZFttXS0xXSsrXT4+MTUtZFttXSk7cmV0dXJuIHJ9LEplPW5ldyBvZSgyODgpLEI9MDtCPDE0NDsrK0IpSmVbQl09ODtmb3IodmFyIEI9MTQ0O0I8MjU2OysrQilKZVtCXT05O2Zvcih2YXIgQj0yNTY7QjwyODA7KytCKUplW0JdPTc7Zm9yKHZhciBCPTI4MDtCPDI4ODsrK0IpSmVbQl09ODtmb3IodmFyIF9yPW5ldyBvZSgzMiksQj0wO0I8MzI7KytCKV9yW0JdPTU7dmFyIEpyPVhlKEplLDksMSksS3I9WGUoX3IsNSwxKSxGdD1mdW5jdGlvbihkKXtmb3IodmFyIGw9ZFswXSxjPTE7YzxkLmxlbmd0aDsrK2MpZFtjXT5sJiYobD1kW2NdKTtyZXR1cm4gbH0sZGU9ZnVuY3Rpb24oZCxsLGMpe3ZhciB1PWwvOHwwO3JldHVybihkW3VdfGRbdSsxXTw8OCk+PihsJjcpJmN9LFR0PWZ1bmN0aW9uKGQsbCl7dmFyIGM9bC84fDA7cmV0dXJuKGRbY118ZFtjKzFdPDw4fGRbYysyXTw8MTYpPj4obCY3KX0sWnI9ZnVuY3Rpb24oZCl7cmV0dXJuKGQrNykvOHwwfSxRcj1mdW5jdGlvbihkLGwsYyl7cmV0dXJuKGM9PW51bGx8fGM+ZC5sZW5ndGgpJiYoYz1kLmxlbmd0aCksbmV3IG9lKGQuc3ViYXJyYXkobCxjKSl9LGVuPVsidW5leHBlY3RlZCBFT0YiLCJpbnZhbGlkIGJsb2NrIHR5cGUiLCJpbnZhbGlkIGxlbmd0aC9saXRlcmFsIiwiaW52YWxpZCBkaXN0YW5jZSIsInN0cmVhbSBmaW5pc2hlZCIsIm5vIHN0cmVhbSBoYW5kbGVyIiwsIm5vIGNhbGxiYWNrIiwiaW52YWxpZCBVVEYtOCBkYXRhIiwiZXh0cmEgZmllbGQgdG9vIGxvbmciLCJkYXRlIG5vdCBpbiByYW5nZSAxOTgwLTIwOTkiLCJmaWxlbmFtZSB0b28gbG9uZyIsInN0cmVhbSBmaW5pc2hpbmciLCJpbnZhbGlkIHppcCBkYXRhIl0sdWU9ZnVuY3Rpb24oZCxsLGMpe3ZhciB1PW5ldyBFcnJvcihsfHxlbltkXSk7aWYodS5jb2RlPWQsRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHUsdWUpLCFjKXRocm93IHU7cmV0dXJuIHV9LHRuPWZ1bmN0aW9uKGQsbCxjLHUpe3ZhciBtPWQubGVuZ3RoLHc9MDtpZighbXx8bC5mJiYhbC5sKXJldHVybiBjfHxuZXcgb2UoMCk7dmFyIFA9IWMscj1QfHxsLmkhPTIsUz1sLmk7UCYmKGM9bmV3IG9lKG0qMykpO3ZhciBEPWZ1bmN0aW9uKHFlKXt2YXIgamU9Yy5sZW5ndGg7aWYocWU+amUpe3ZhciBEZT1uZXcgb2UoTWF0aC5tYXgoamUqMixxZSkpO0RlLnNldChjKSxjPURlfX0sQz1sLmZ8fDAsYj1sLnB8fDAsJD1sLmJ8fDAsSD1sLmwsWj1sLmQsUj1sLm0sVj1sLm4sSj1tKjg7ZG97aWYoIUgpe0M9ZGUoZCxiLDEpO3ZhciBsZT1kZShkLGIrMSwzKTtpZihiKz0zLGxlKWlmKGxlPT0xKUg9SnIsWj1LcixSPTksVj01O2Vsc2UgaWYobGU9PTIpe3ZhciBoZT1kZShkLGIsMzEpKzI1NyxfZT1kZShkLGIrMTAsMTUpKzQsY2U9aGUrZGUoZCxiKzUsMzEpKzE7Yis9MTQ7Zm9yKHZhciBlZT1uZXcgb2UoY2UpLHhlPW5ldyBvZSgxOSksaj0wO2o8X2U7KytqKXhlW0dyW2pdXT1kZShkLGIraiozLDcpO2IrPV9lKjM7Zm9yKHZhciBZPUZ0KHhlKSxnZT0oMTw8WSktMSxVZT1YZSh4ZSxZLDEpLGo9MDtqPGNlOyl7dmFyIEY9VWVbZGUoZCxiLGdlKV07Yis9RiYxNTt2YXIgUT1GPj40O2lmKFE8MTYpZWVbaisrXT1RO2Vsc2V7dmFyIE09MCxSZT0wO2ZvcihRPT0xNj8oUmU9MytkZShkLGIsMyksYis9MixNPWVlW2otMV0pOlE9PTE3PyhSZT0zK2RlKGQsYiw3KSxiKz0zKTpRPT0xOCYmKFJlPTExK2RlKGQsYiwxMjcpLGIrPTcpO1JlLS07KWVlW2orK109TX19dmFyIFFlPWVlLnN1YmFycmF5KDAsaGUpLHBlPWVlLnN1YmFycmF5KGhlKTtSPUZ0KFFlKSxWPUZ0KHBlKSxIPVhlKFFlLFIsMSksWj1YZShwZSxWLDEpfWVsc2UgdWUoMSk7ZWxzZXt2YXIgUT1acihiKSs0LGZlPWRbUS00XXxkW1EtM108PDgsbWU9UStmZTtpZihtZT5tKXtTJiZ1ZSgwKTticmVha31yJiZEKCQrZmUpLGMuc2V0KGQuc3ViYXJyYXkoUSxtZSksJCksbC5iPSQrPWZlLGwucD1iPW1lKjgsbC5mPUM7Y29udGludWV9aWYoYj5KKXtTJiZ1ZSgwKTticmVha319ciYmRCgkKzEzMTA3Mik7Zm9yKHZhciBmdD0oMTw8UiktMSxodD0oMTw8ViktMSxCZT1iOztCZT1iKXt2YXIgTT1IW1R0KGQsYikmZnRdLFRlPU0+PjQ7aWYoYis9TSYxNSxiPkope1MmJnVlKDApO2JyZWFrfWlmKE18fHVlKDIpLFRlPDI1NiljWyQrK109VGU7ZWxzZSBpZihUZT09MjU2KXtCZT1iLEg9bnVsbDticmVha31lbHNle3ZhciBjdD1UZS0yNTQ7aWYoVGU+MjY0KXt2YXIgaj1UZS0yNTcsT2U9cnJbal07Y3Q9ZGUoZCxiLCgxPDxPZSktMSkrb3Jbal0sYis9T2V9dmFyIGV0PVpbVHQoZCxiKSZodF0sdHQ9ZXQ+PjQ7ZXR8fHVlKDMpLGIrPWV0JjE1O3ZhciBwZT1Yclt0dF07aWYodHQ+Myl7dmFyIE9lPW5yW3R0XTtwZSs9VHQoZCxiKSYoMTw8T2UpLTEsYis9T2V9aWYoYj5KKXtTJiZ1ZSgwKTticmVha31yJiZEKCQrMTMxMDcyKTt2YXIgZHQ9JCtjdDtpZigkPHBlKXt2YXIgdmU9dy1wZSxJZT1NYXRoLm1pbihwZSxkdCk7Zm9yKHZlKyQ8MCYmdWUoMyk7JDxJZTsrKyQpY1skXT11W3ZlKyRdfWZvcig7JDxkdDsrKyQpY1skXT1jWyQtcGVdfX1sLmw9SCxsLnA9QmUsbC5iPSQsbC5mPUMsSCYmKEM9MSxsLm09UixsLmQ9WixsLm49Vil9d2hpbGUoIUMpO3JldHVybiAkIT1jLmxlbmd0aCYmUD9RcihjLDAsJCk6Yy5zdWJhcnJheSgwLCQpfSxybj1uZXcgb2UoMCksbm49ZnVuY3Rpb24oZCl7KGRbMF0hPTMxfHxkWzFdIT0xMzl8fGRbMl0hPTgpJiZ1ZSg2LCJpbnZhbGlkIGd6aXAgZGF0YSIpO3ZhciBsPWRbM10sYz0xMDtsJjQmJihjKz0oZFsxMF18ZFsxMV08PDgpKzIpO2Zvcih2YXIgdT0obD4+MyYxKSsobD4+NCYxKTt1PjA7dS09IWRbYysrXSk7cmV0dXJuIGMrKGwmMil9LGFuPWZ1bmN0aW9uKGQpe3ZhciBsPWQubGVuZ3RoO3JldHVybihkW2wtNF18ZFtsLTNdPDw4fGRbbC0yXTw8MTZ8ZFtsLTFdPDwyNCk+Pj4wfTtmdW5jdGlvbiBvbihkLGwpe3ZhciBjPW5uKGQpO3JldHVybiBjKzg+ZC5sZW5ndGgmJnVlKDYsImludmFsaWQgZ3ppcCBkYXRhIiksdG4oZC5zdWJhcnJheShjLC04KSx7aToyfSxuZXcgb2UoYW4oZCkpLGwpfXZhciBfbj10eXBlb2YgVGV4dERlY29kZXI8InUiJiZuZXcgVGV4dERlY29kZXIsc249MDt0cnl7X24uZGVjb2RlKHJuLHtzdHJlYW06ITB9KSxzbj0xfWNhdGNoe31hc3luYyBmdW5jdGlvbiBzcihkKXt2YXIgYztpZigoKGM9ZC5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIikpPT1udWxsP3ZvaWQgMDpjLnNwbGl0KCI7IiwxKVswXSkhPT0iYXBwbGljYXRpb24vd2FzbStnemlwIilyZXR1cm4gZDtpZih0eXBlb2YgRGVjb21wcmVzc2lvblN0cmVhbTwidSImJmQuYm9keSlyZXR1cm4gbmV3IFJlc3BvbnNlKGQuYm9keS5waXBlVGhyb3VnaChuZXcgRGVjb21wcmVzc2lvblN0cmVhbSgiZ3ppcCIpKSx7aGVhZGVyczp7ImNvbnRlbnQtdHlwZSI6ImFwcGxpY2F0aW9uL3dhc20ifX0pO2NvbnN0IGw9b24obmV3IFVpbnQ4QXJyYXkoYXdhaXQgZC5hcnJheUJ1ZmZlcigpKSk7cmV0dXJuIG5ldyBSZXNwb25zZShsLHtoZWFkZXJzOnsiY29udGVudC10eXBlIjoiYXBwbGljYXRpb24vd2FzbSJ9fSl9Y29uc3QgbG49NjQqMTAyNCoxMDI0LGxyPTY0ZTYsRHQ9NCoxMDI0KjEwMjQ7ZnVuY3Rpb24gZm4oZCxsLGMsdSl7aWYoIWwubGVuZ3RofHxsLmxlbmd0aD5sbil0aHJvdyBuZXcgRXJyb3IoIkhFSUYgaW5wdXQgZXhjZWVkcyB0aGUgNjQgTWlCIHByZXZpZXcgbGltaXQgb3IgaXMgZW1wdHkuIik7bGV0IG09MCx3PTAsUD0wLHI9MCxTPTAsRD0wLEM9MCxiPTA7Y29uc3QgJD1SPT57Y29uc3QgVj1kLl9tYWxsb2MoUik7aWYoIVYpdGhyb3cgbmV3IEVycm9yKCJIRUlGIGRlY29kZXIgY291bGQgbm90IGFsbG9jYXRlIGl0cyBidWZmZXIuIik7cmV0dXJuIFZ9LEg9KFIsVj0hMSk9Pntjb25zdCBKPWQuSEVBUFUzMltQLzRdO2lmKEomJiEoViYmSj09PTEwKSl0aHJvdyBuZXcgRXJyb3IoYEhFSUYgJHtSfSBmYWlsZWQgKGNvZGUgJHtKfSkuYCk7cmV0dXJuIEo9PT0wfSxaPShSLFYpPT57aWYoUjw9MHx8Vjw9MHx8Uj4xNjM4NHx8Vj4xNjM4NHx8UipWPmxyKXRocm93IG5ldyBFcnJvcigiSEVJRiBpbWFnZSBkaW1lbnNpb25zIGV4Y2VlZCB0aGUgcHJldmlldyBsaW1pdC4iKX07dHJ5e2lmKG09ZC5faGVpZl9jb250ZXh0X2FsbG9jKCksIW0pdGhyb3cgbmV3IEVycm9yKCJIRUlGIGRlY29kZXIgY291bGQgbm90IGNyZWF0ZSBpdHMgY29udGV4dC4iKTtjb25zdCBSPWQuX2hlaWZfY29udGV4dF9nZXRfc2VjdXJpdHlfbGltaXRzKG0pO2lmKCFSfHxkLkhFQVBVOFtSXTwyKXRocm93IG5ldyBFcnJvcigiSEVJRiBkZWNvZGVyIGRvZXMgbm90IGV4cG9zZSB0aGUgcmVxdWlyZWQgcmVzb3VyY2UgbGltaXRzLiIpO2NvbnN0IFY9KGVlLHhlKT0+e2NvbnN0IGo9bmV3IERhdGFWaWV3KGQuSEVBUFU4LmJ1ZmZlciksWT1qLmdldEJpZ1VpbnQ2NChSK2VlLCEwKTsoIVl8fFk+QmlnSW50KHhlKSkmJmouc2V0QmlnVWludDY0KFIrZWUsQmlnSW50KHhlKSwhMCl9O1YoOCxsciksVig0MCw1MTIqMTAyNCoxMDI0KSxWKDY0LDEwMjQqMTAyNCoxMDI0KTtjb25zdCBKPWQuSEVBUFUzMlsoUiszMikvNF07aWYoKCFKfHxKPkR0KSYmKGQuSEVBUFUzMlsoUiszMikvNF09RHQpLGQuX2hlaWZfY29udGV4dF9zZXRfbWF4X2RlY29kaW5nX3RocmVhZHMobSwyKSxQPSQoNjQpLHc9JChsLmxlbmd0aCksZC5IRUFQVTguc2V0KGwsdyksZC5IRUFQVTguZmlsbCgwLFAsUCs2NCksZC5faGVpZl9jb250ZXh0X3JlYWRfZnJvbV9tZW1vcnlfd2l0aG91dF9jb3B5KFAsbSx3LGwubGVuZ3RoLDApLEgoImNvbnRhaW5lciBwYXJzaW5nIiksZC5faGVpZl9jb250ZXh0X2dldF9wcmltYXJ5X2ltYWdlX2hhbmRsZShQLG0sUCszMiksSCgicHJpbWFyeSBpbWFnZSBzZWxlY3Rpb24iKSxyPWQuSEVBUFUzMlsoUCszMikvNF0sIXIpdGhyb3cgbmV3IEVycm9yKCJIRUlGIGZpbGUgY29udGFpbnMgbm8gcHJpbWFyeSBpbWFnZS4iKTtaKGQuX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF93aWR0aChyKSxkLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfaGVpZ2h0KHIpKSxaKGQuX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9pc3BlX3dpZHRoKHIpLGQuX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9pc3BlX2hlaWdodChyKSk7Y29uc3QgbGU9ZC5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X3Jhd19jb2xvcl9wcm9maWxlX3NpemUocik7aWYobGU+RHQpdGhyb3cgbmV3IEVycm9yKCJIRUlGIElDQyBwcm9maWxlIGV4Y2VlZHMgaXRzIGxpbWl0LiIpO2lmKGxlJiYoYj0kKGxlKSxkLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfcmF3X2NvbG9yX3Byb2ZpbGUoUCxyLGIpLEgoIklDQyBwcm9maWxlIHJlYWRpbmciKSksRD1kLl9oZWlmX2RlY29kaW5nX29wdGlvbnNfYWxsb2MoKSwhRHx8ZC5IRUFQVThbRF08MTApdGhyb3cgbmV3IEVycm9yKCJIRUlGIGRlY29kZXIgY2Fubm90IHByZXNlcnZlIHNvdXJjZSBjb2xvciBwcm9maWxlcy4iKTtpZihkLkhFQVBVOFtEKzY5XT0xLGQuSEVBUFUzMlsoRCs2NCkvNF09MixkLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfbmNseF9jb2xvcl9wcm9maWxlKFAscixQKzM2KSxIKCJjb2xvciBwcm9maWxlIHJlYWRpbmciLCEwKSYmKEM9ZC5IRUFQVTMyWyhQKzM2KS80XSksIUMmJnUpe2NvbnN0IGVlPXUobCxkLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfaXRlbV9pZChyKSk7aWYoZWUpe2lmKEM9ZC5faGVpZl9uY2x4X2NvbG9yX3Byb2ZpbGVfYWxsb2MoKSwhQyl0aHJvdyBuZXcgRXJyb3IoIkhFSUYgZGVjb2RlciBjb3VsZCBub3QgYWxsb2NhdGUgaXRzIGNvbG9yIHByb2ZpbGUuIik7ZC5IRUFQVTMyWyhDKzQpLzRdPWVlLnByaW1hcmllcyxkLkhFQVBVMzJbKEMrOCkvNF09ZWUudHJhbnNmZXIsZC5IRUFQVTMyWyhDKzEyKS80XT1lZS5tYXRyaXgsZC5IRUFQVThbQysxNl09ZWUuZnVsbFJhbmdlPzE6MH19Q3x8KGQuX2hlaWZfZGVjb2RlX2ltYWdlKFAscixQKzQwLDk5LDk5LEQpLEgoIm5hdGl2ZSBwaXhlbCBkZWNvZGluZyIpLFM9ZC5IRUFQVTMyWyhQKzQwKS80XSxkLl9oZWlmX2ltYWdlX2dldF9uY2x4X2NvbG9yX3Byb2ZpbGUoUCxTLFArMzYpLEgoImJpdHN0cmVhbSBjb2xvciBwcm9maWxlIHJlYWRpbmciLCEwKSYmKEM9ZC5IRUFQVTMyWyhQKzM2KS80XSksZC5faGVpZl9pbWFnZV9yZWxlYXNlKFMpLFM9MCksQyYmKGQuSEVBUFUzMlsoRCs1NikvNF09Qyk7Y29uc3QgUT1NYXRoLm1heChkLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfbHVtYV9iaXRzX3Blcl9waXhlbChyKSxkLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfY2hyb21hX2JpdHNfcGVyX3BpeGVsKHIpKT44O2QuX2hlaWZfZGVjb2RlX2ltYWdlKFAscixQKzQwLDEsUT8xNToxMSxEKSxIKCJwaXhlbCBkZWNvZGluZyIpLFM9ZC5IRUFQVTMyWyhQKzQwKS80XTtjb25zdCBmZT1kLl9oZWlmX2ltYWdlX2dldF93aWR0aChTLDEwKSxtZT1kLl9oZWlmX2ltYWdlX2dldF9oZWlnaHQoUywxMCk7WihmZSxtZSk7Y29uc3QgaGU9ZC5faGVpZl9pbWFnZV9nZXRfYml0c19wZXJfcGl4ZWxfcmFuZ2UoUywxMCksX2U9ZC5faGVpZl9pbWFnZV9nZXRfcGxhbmVfcmVhZG9ubHkoUywxMCxQKzQ0KSxjZT1kLkhFQVBVMzJbKFArNDQpLzRdO2lmKCFfZXx8aGU8OHx8aGU+MTZ8fCFRJiZoZSE9PTh8fGNlPGZlKjQqKFE/MjoxKXx8Y2U+ZmUqNCooUT8yOjEpKzQwOTZ8fF9lK2NlKm1lPmQuSEVBUFU4Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkhFSUYgZGVjb2RlciByZXR1cm5lZCBhbiBpbnZhbGlkIHBpeGVsIHBsYW5lLiIpO3JldHVybiBjKHt3aWR0aDpmZSxoZWlnaHQ6bWUsc3RyaWRlOmNlLGJpdHM6aGUscHJpbWFyaWVzOkM/ZC5IRUFQVTMyWyhDKzQpLzRdOjEsdHJhbnNmZXI6Qz9kLkhFQVBVMzJbKEMrOCkvNF06MTMsaWNjOmQuSEVBUFU4LnN1YmFycmF5KGIsYitsZSkscGl4ZWxzOmQuSEVBUFU4LnN1YmFycmF5KF9lLF9lK2NlKm1lKX0pfWZpbmFsbHl7UyYmZC5faGVpZl9pbWFnZV9yZWxlYXNlKFMpLEQmJmQuX2hlaWZfZGVjb2Rpbmdfb3B0aW9uc19mcmVlKEQpLEMmJmQuX2hlaWZfbmNseF9jb2xvcl9wcm9maWxlX2ZyZWUoQyksciYmZC5faGVpZl9pbWFnZV9oYW5kbGVfcmVsZWFzZShyKSxtJiZkLl9oZWlmX2NvbnRleHRfZnJlZShtKTtmb3IoY29uc3QgUiBvZltiLHcsUF0pUiYmZC5fZnJlZShSKX19YXN5bmMgZnVuY3Rpb24gaG4oZCxsPWdsb2JhbFRoaXMuZmV0Y2gpe2NvbnN0IGM9dHlwZW9mIGQ9PSJmdW5jdGlvbiI/YXdhaXQgZCgpOmF3YWl0IGQ7aWYoYyBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5Lk1vZHVsZSlyZXR1cm4gYztpZih0eXBlb2YgYz09InN0cmluZyJ8fGNuKGMpKXtpZighbCl0aHJvdyBuZXcgRXJyb3IoIkEgZmV0Y2ggaW1wbGVtZW50YXRpb24gaXMgcmVxdWlyZWQgdG8gbG9hZCBjb252ZXJ0ZXIgV0FTTSBmcm9tIGEgVVJMLiIpO3JldHVybiBmcihhd2FpdCBsKFN0cmluZyhjKSkpfXJldHVybiB0eXBlb2YgUmVzcG9uc2U8InUiJiZjIGluc3RhbmNlb2YgUmVzcG9uc2U/ZnIoYyk6V2ViQXNzZW1ibHkuY29tcGlsZShjKX1mdW5jdGlvbiBjbihkKXtyZXR1cm4gdHlwZW9mIFVSTDwidSImJmQgaW5zdGFuY2VvZiBVUkx9YXN5bmMgZnVuY3Rpb24gZnIoZCl7dmFyIGM7aWYoIWQub2spdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggY29udmVydGVyIFdBU006ICR7ZC5zdGF0dXN9ICR7ZC5zdGF0dXNUZXh0fWAudHJpbSgpKTtjb25zdCBsPWF3YWl0IHNyKGQpO3JldHVybiB0eXBlb2YgV2ViQXNzZW1ibHkuY29tcGlsZVN0cmVhbWluZz09ImZ1bmN0aW9uIiYmKChjPWwuaGVhZGVycy5nZXQoImNvbnRlbnQtdHlwZSIpKT09bnVsbD92b2lkIDA6Yy5zcGxpdCgiOyIsMSlbMF0pPT09ImFwcGxpY2F0aW9uL3dhc20iP1dlYkFzc2VtYmx5LmNvbXBpbGVTdHJlYW1pbmcobCk6V2ViQXNzZW1ibHkuY29tcGlsZShhd2FpdCBsLmFycmF5QnVmZmVyKCkpfWNsYXNzIGRuIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IobCl7c3VwZXIoYFdBU0kgZXhpdGVkIHdpdGggY29kZSAke2x9YCksdGhpcy5jb2RlPWx9fWNvbnN0IEw9MCxpZT04LHVuPTIwLGhyPTI4LEtlPTMxLFplPTQ0LGNyPTU0LEN0PTU1LGRyPTIsU3Q9MyxNdD00LHVyPTEsbW49Mixnbj00LHBuPTgsbXI9MTtjbGFzcyB2bntjb25zdHJ1Y3RvcihsKXtFZSh0aGlzLCJpbXBvcnRzIix7YXJnc19nZXQ6KGwsYyk9PnRoaXMuYXJnc0dldChsLGMpLGFyZ3Nfc2l6ZXNfZ2V0OihsLGMpPT50aGlzLmFyZ3NTaXplc0dldChsLGMpLGNsb2NrX3RpbWVfZ2V0OihsLGMsdSk9PnRoaXMuY2xvY2tUaW1lR2V0KHUpLGVudmlyb25fZ2V0OihsLGMpPT5MLGVudmlyb25fc2l6ZXNfZ2V0OihsLGMpPT50aGlzLmVudmlyb25TaXplc0dldChsLGMpLGZkX2Nsb3NlOmw9PnRoaXMuZmRDbG9zZShsKSxmZF9mZHN0YXRfZ2V0OihsLGMpPT50aGlzLmZkRmRzdGF0R2V0KGwsYyksZmRfZmRzdGF0X3NldF9mbGFnczoobCxjKT0+TCxmZF9maWxlc3RhdF9nZXQ6KGwsYyk9PnRoaXMuZmRGaWxlc3RhdEdldChsLGMpLGZkX3ByZWFkOihsLGMsdSxtLHcpPT50aGlzLmZkUmVhZChsLGMsdSx3LE51bWJlcihtKSwhMSksZmRfcHJlc3RhdF9kaXJfbmFtZToobCxjLHUpPT50aGlzLmZkUHJlc3RhdERpck5hbWUobCxjLHUpLGZkX3ByZXN0YXRfZ2V0OihsLGMpPT50aGlzLmZkUHJlc3RhdEdldChsLGMpLGZkX3JlYWQ6KGwsYyx1LG0pPT50aGlzLmZkUmVhZChsLGMsdSxtKSxmZF9zZWVrOihsLGMsdSxtKT0+dGhpcy5mZFNlZWsobCxjLHUsbSksZmRfdGVsbDoobCxjKT0+dGhpcy5mZFRlbGwobCxjKSxmZF93cml0ZToobCxjLHUsbSk9PnRoaXMuZmRXcml0ZShsLGMsdSxtKSxwYXRoX2NyZWF0ZV9kaXJlY3Rvcnk6KGwsYyx1KT0+dGhpcy5wYXRoQ3JlYXRlRGlyZWN0b3J5KGwsYyx1KSxwYXRoX2ZpbGVzdGF0X2dldDoobCxjLHUsbSx3KT0+dGhpcy5wYXRoRmlsZXN0YXRHZXQobCx1LG0sdykscGF0aF9vcGVuOihsLGMsdSxtLHcsUCxyLFMsRCk9PnRoaXMucGF0aE9wZW4obCx1LG0sdyxTLEQpLHBhdGhfcmVtb3ZlX2RpcmVjdG9yeToobCxjLHUpPT50aGlzLnBhdGhSZW1vdmVEaXJlY3RvcnkobCxjLHUpLHBhdGhfdW5saW5rX2ZpbGU6KGwsYyx1KT0+dGhpcy5wYXRoVW5saW5rRmlsZShsLGMsdSkscG9sbF9vbmVvZmY6KGwsYyx1LG0pPT50aGlzLnBvbGxPbmVvZmYobSkscHJvY19leGl0Omw9Pnt0aHJvdyBuZXcgZG4obCl9LHJhbmRvbV9nZXQ6KGwsYyk9PnRoaXMucmFuZG9tR2V0KGwsYyksc2NoZWRfeWllbGQ6KCk9Pkx9KTtFZSh0aGlzLCJpbnN0YW5jZSIpO0VlKHRoaXMsImNhcHR1cmVTdGRpbyIpO0VlKHRoaXMsInN0ZGlvIix7MTpbXSwyOltdfSk7RWUodGhpcywiYXJncyIpO0VlKHRoaXMsImZpbGVzIixuZXcgTWFwKTtFZSh0aGlzLCJkaXJzIixuZXcgU2V0KFsiLyIsIi93b3JrIl0pKTtFZSh0aGlzLCJmZHMiLG5ldyBNYXAoW1swLHtraW5kOiJzdGRpbyIsZmQ6MCxwb3NpdGlvbjowfV0sWzEse2tpbmQ6InN0ZGlvIixmZDoxLHBvc2l0aW9uOjB9XSxbMix7a2luZDoic3RkaW8iLGZkOjIscG9zaXRpb246MH1dLFszLHtraW5kOiJkaXIiLHBhdGg6Ii93b3JrIixwb3NpdGlvbjowfV1dKSk7RWUodGhpcywibmV4dEZkIiw0KTt0aGlzLmFyZ3M9bC5hcmdzLHRoaXMuY2FwdHVyZVN0ZGlvPWwuY2FwdHVyZVN0ZGlvPz8hMTtmb3IoY29uc3RbYyx1XW9mIE9iamVjdC5lbnRyaWVzKGwuZmlsZXMpKXRoaXMud3JpdGVJbml0aWFsRmlsZShjLHUpfXNldEluc3RhbmNlKGwpe3RoaXMuaW5zdGFuY2U9bH1yZWFkU3RkaW8obCl7cmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShuZXcgVWludDhBcnJheSh0aGlzLnN0ZGlvW2xdKSl9cmVhZEZpbGUobCl7Y29uc3QgYz10aGlzLmZpbGVzLmdldChXZShsKSk7aWYoIWMpdGhyb3cgbmV3IEVycm9yKGBXQVNNIGZpbGUgd2FzIG5vdCB3cml0dGVuOiAke2x9YCk7Y29uc3QgdT1uZXcgVWludDhBcnJheShjLmJ5dGVMZW5ndGgpO3JldHVybiB1LnNldChjKSx1fXJlYWRGaWxlSWZQcmVzZW50KGwpe3JldHVybiB0aGlzLmZpbGVzLmhhcyhXZShsKSk/dGhpcy5yZWFkRmlsZShsKTp2b2lkIDB9Z2V0IG1lbW9yeSgpe3ZhciBjO2NvbnN0IGw9KGM9dGhpcy5pbnN0YW5jZSk9PW51bGw/dm9pZCAwOmMuZXhwb3J0cy5tZW1vcnk7aWYoIShsIGluc3RhbmNlb2YgV2ViQXNzZW1ibHkuTWVtb3J5KSl0aHJvdyBuZXcgRXJyb3IoIldBU00gaW5zdGFuY2UgZGlkIG5vdCBleHBvcnQgbWVtb3J5LiIpO3JldHVybiBsfWdldCBieXRlcygpe3JldHVybiBuZXcgVWludDhBcnJheSh0aGlzLm1lbW9yeS5idWZmZXIpfWdldCB2aWV3KCl7cmV0dXJuIG5ldyBEYXRhVmlldyh0aGlzLm1lbW9yeS5idWZmZXIpfWFyZ3NTaXplc0dldChsLGMpe3JldHVybiB0aGlzLnZpZXcuc2V0VWludDMyKGwsdGhpcy5hcmdzLmxlbmd0aCwhMCksdGhpcy52aWV3LnNldFVpbnQzMihjLHluKHRoaXMuYXJncyksITApLEx9YXJnc0dldChsLGMpe3JldHVybiB0aGlzLndyaXRlU3RyaW5nTGlzdCh0aGlzLmFyZ3MsbCxjKX1lbnZpcm9uU2l6ZXNHZXQobCxjKXtyZXR1cm4gdGhpcy52aWV3LnNldFVpbnQzMihsLDAsITApLHRoaXMudmlldy5zZXRVaW50MzIoYywwLCEwKSxMfWNsb2NrVGltZUdldChsKXtyZXR1cm4gdGhpcy52aWV3LnNldEJpZ1VpbnQ2NChsLEJpZ0ludChEYXRlLm5vdygpKSoxMDAwMDAwbiwhMCksTH1mZENsb3NlKGwpe3JldHVybiBsPD0zfHx0aGlzLmZkcy5kZWxldGUobCk/TDppZX1mZEZkc3RhdEdldChsLGMpe2NvbnN0IHU9dGhpcy5mZHMuZ2V0KGwpO3JldHVybiB1Pyh0aGlzLmJ5dGVzLmZpbGwoMCxjLGMrMjQpLHRoaXMuYnl0ZXNbY109d24odSksdGhpcy52aWV3LnNldEJpZ1VpbnQ2NChjKzgsMHhmZmZmZmZmZmZmZmZmZmZmbiwhMCksdGhpcy52aWV3LnNldEJpZ1VpbnQ2NChjKzE2LDB4ZmZmZmZmZmZmZmZmZmZmZm4sITApLEwpOmllfWZkRmlsZXN0YXRHZXQobCxjKXt2YXIgbTtjb25zdCB1PXRoaXMuZmRzLmdldChsKTtyZXR1cm4gdT91LmtpbmQ9PT0iZmlsZSI/KHRoaXMud3JpdGVGaWxlc3RhdChjLE10LCgobT10aGlzLmZpbGVzLmdldCh1LnBhdGgpKT09bnVsbD92b2lkIDA6bS5ieXRlTGVuZ3RoKT8/MCksTCk6dS5raW5kPT09ImRpciI/KHRoaXMud3JpdGVGaWxlc3RhdChjLFN0LDApLEwpOih0aGlzLndyaXRlRmlsZXN0YXQoYyxkciwwKSxMKTppZX1mZFByZXN0YXRHZXQobCxjKXtjb25zdCB1PXRoaXMuZmRzLmdldChsKTtyZXR1cm4hdXx8dS5raW5kIT09ImRpciJ8fHUucGF0aCE9PSIvd29yayI/aWU6KHRoaXMuYnl0ZXMuZmlsbCgwLGMsYys4KSx0aGlzLnZpZXcuc2V0VWludDMyKGMrNCx1LnBhdGgubGVuZ3RoLCEwKSxMKX1mZFByZXN0YXREaXJOYW1lKGwsYyx1KXtjb25zdCBtPXRoaXMuZmRzLmdldChsKTtpZighbXx8bS5raW5kIT09ImRpciIpcmV0dXJuIGllO2NvbnN0IHc9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKG0ucGF0aCk7cmV0dXJuIHRoaXMuYnl0ZXMuc2V0KHcuc3ViYXJyYXkoMCx1KSxjKSxMfWZkUmVhZChsLGMsdSxtLHcsUD0hMCl7Y29uc3Qgcj10aGlzLmZkcy5nZXQobCk7aWYoIXIpcmV0dXJuIGllO2lmKHIua2luZCE9PSJmaWxlIilyZXR1cm4gdGhpcy52aWV3LnNldFVpbnQzMihtLDAsITApLHIua2luZD09PSJkaXIiP0tlOkw7Y29uc3QgUz10aGlzLmZpbGVzLmdldChyLnBhdGgpPz9uZXcgVWludDhBcnJheTtsZXQgRD13Pz9yLnBvc2l0aW9uLEM9MDtmb3IoY29uc3RbYiwkXW9mIHRoaXMuaW92cyhjLHUpKXtjb25zdCBIPVMuc3ViYXJyYXkoRCxEKyQpO2lmKHRoaXMuYnl0ZXMuc2V0KEgsYiksRCs9SC5ieXRlTGVuZ3RoLEMrPUguYnl0ZUxlbmd0aCxILmJ5dGVMZW5ndGg8JClicmVha31yZXR1cm4gUCYmdz09PXZvaWQgMCYmKHIucG9zaXRpb249RCksdGhpcy52aWV3LnNldFVpbnQzMihtLEMsITApLEx9ZmRTZWVrKGwsYyx1LG0pe3ZhciBTO2NvbnN0IHc9dGhpcy5mZHMuZ2V0KGwpO2lmKCF3fHx3LmtpbmQhPT0iZmlsZSIpcmV0dXJuKHc9PW51bGw/dm9pZCAwOncua2luZCk9PT0iZGlyIj9LZTppZTtpZih1IT09MCYmdSE9PTEmJnUhPT0yKXJldHVybiBocjtjb25zdCByPSh1PT09MD8wOnU9PT0xP3cucG9zaXRpb246dT09PTI/KChTPXRoaXMuZmlsZXMuZ2V0KHcucGF0aCkpPT1udWxsP3ZvaWQgMDpTLmJ5dGVMZW5ndGgpPz8wOi0xKStOdW1iZXIoYyk7cmV0dXJuIU51bWJlci5pc1NhZmVJbnRlZ2VyKHIpfHxyPDA/aHI6KHcucG9zaXRpb249cix0aGlzLnZpZXcuc2V0QmlnVWludDY0KG0sQmlnSW50KHIpLCEwKSxMKX1mZFRlbGwobCxjKXtjb25zdCB1PXRoaXMuZmRzLmdldChsKTtyZXR1cm4hdXx8dS5raW5kIT09ImZpbGUiPyh1PT1udWxsP3ZvaWQgMDp1LmtpbmQpPT09ImRpciI/S2U6aWU6KHRoaXMudmlldy5zZXRCaWdVaW50NjQoYyxCaWdJbnQodS5wb3NpdGlvbiksITApLEwpfWZkV3JpdGUobCxjLHUsbSl7Y29uc3Qgdz10aGlzLmZkcy5nZXQobCk7aWYoIXcpcmV0dXJuIGllO2xldCBQPTA7aWYody5raW5kPT09InN0ZGlvIil7Zm9yKGNvbnN0W3IsU11vZiB0aGlzLmlvdnMoYyx1KSl7Y29uc3QgRD10aGlzLmNhcHR1cmVTdGRpbz90aGlzLnN0ZGlvW3cuZmRdOnZvaWQgMDtpZihEKXtjb25zdCBDPXIrTWF0aC5taW4oUyxNYXRoLm1heCgwLDEwNDg1NzYtRC5sZW5ndGgpKSxiPXRoaXMuYnl0ZXM7Zm9yKGxldCAkPXI7JDxDOyQrKylELnB1c2goYlskXSl9UCs9U31yZXR1cm4gdGhpcy52aWV3LnNldFVpbnQzMihtLFAsITApLEx9aWYody5raW5kIT09ImZpbGUiKXJldHVybiBLZTtmb3IoY29uc3RbcixTXW9mIHRoaXMuaW92cyhjLHUpKXtjb25zdCBEPXRoaXMuYnl0ZXMuc3ViYXJyYXkocixyK1MpO3RoaXMud3JpdGVGaWxlQ2h1bmsodyxEKSxQKz1TfXJldHVybiB0aGlzLnZpZXcuc2V0VWludDMyKG0sUCwhMCksTH1wYXRoQ3JlYXRlRGlyZWN0b3J5KGwsYyx1KXtjb25zdCBtPXRoaXMucmVhZFBhdGgobCxjLHUpO3JldHVybiBtPyh0aGlzLmVuc3VyZVBhcmVudERpcihtKSx0aGlzLmZpbGVzLmhhcyhtKT9jcjoodGhpcy5kaXJzLmFkZChtKSxMKSk6aWV9cGF0aEZpbGVzdGF0R2V0KGwsYyx1LG0pe3ZhciBQO2NvbnN0IHc9dGhpcy5yZWFkUGF0aChsLGMsdSk7cmV0dXJuIHc/dGhpcy5maWxlcy5oYXModyk/KHRoaXMud3JpdGVGaWxlc3RhdChtLE10LCgoUD10aGlzLmZpbGVzLmdldCh3KSk9PW51bGw/dm9pZCAwOlAuYnl0ZUxlbmd0aCk/PzApLEwpOnRoaXMuZGlycy5oYXModyk/KHRoaXMud3JpdGVGaWxlc3RhdChtLFN0LDApLEwpOlplOmllfXBhdGhPcGVuKGwsYyx1LG0sdyxQKXt2YXIgRDtjb25zdCByPXRoaXMucmVhZFBhdGgobCxjLHUpO2lmKCFyKXJldHVybiBpZTtpZihtJnVyJiZtJmduJiYodGhpcy5maWxlcy5oYXMocil8fHRoaXMuZGlycy5oYXMocikpKXJldHVybiB1bjtpZighIShtJm1uKSlyZXR1cm4gdGhpcy5kaXJzLmhhcyhyKT90aGlzLm9wZW5EZXNjcmlwdG9yKHtraW5kOiJkaXIiLHBhdGg6cixwb3NpdGlvbjowfSxQKTp0aGlzLmZpbGVzLmhhcyhyKT9jcjpaZTtpZih0aGlzLmZpbGVzLmhhcyhyKSltJnBuJiZ0aGlzLmZpbGVzLnNldChyLG5ldyBVaW50OEFycmF5KTtlbHNle2lmKCEobSZ1cikpcmV0dXJuIHRoaXMuZGlycy5oYXMocik/S2U6WmU7dGhpcy5lbnN1cmVQYXJlbnREaXIociksdGhpcy5maWxlcy5zZXQocixuZXcgVWludDhBcnJheSl9cmV0dXJuIHRoaXMub3BlbkRlc2NyaXB0b3Ioe2tpbmQ6ImZpbGUiLHBhdGg6cixwb3NpdGlvbjp3Jm1yPygoRD10aGlzLmZpbGVzLmdldChyKSk9PW51bGw/dm9pZCAwOkQuYnl0ZUxlbmd0aCk/PzA6MCxhcHBlbmQ6ISEodyZtcil9LFApfXBhdGhSZW1vdmVEaXJlY3RvcnkobCxjLHUpe2NvbnN0IG09dGhpcy5yZWFkUGF0aChsLGMsdSk7aWYoIW0pcmV0dXJuIGllO2lmKG09PT0iLyJ8fG09PT0iL3dvcmsiKXJldHVybiBDdDtmb3IoY29uc3QgdyBvZiB0aGlzLmRpcnMpaWYodyE9PW0mJlV0KHcpPT09bSlyZXR1cm4gQ3Q7Zm9yKGNvbnN0IHcgb2YgdGhpcy5maWxlcy5rZXlzKCkpaWYoVXQodyk9PT1tKXJldHVybiBDdDtyZXR1cm4gdGhpcy5kaXJzLmRlbGV0ZShtKT9MOlplfXBhdGhVbmxpbmtGaWxlKGwsYyx1KXtjb25zdCBtPXRoaXMucmVhZFBhdGgobCxjLHUpO3JldHVybiBtP3RoaXMuZmlsZXMuZGVsZXRlKG0pP0w6WmU6aWV9cG9sbE9uZW9mZihsKXtyZXR1cm4gdGhpcy52aWV3LnNldFVpbnQzMihsLDAsITApLEx9cmFuZG9tR2V0KGwsYyl7Y29uc3QgdT10aGlzLmJ5dGVzLnN1YmFycmF5KGwsbCtjKSxtPWdsb2JhbFRoaXMuY3J5cHRvO2lmKG0hPW51bGwmJm0uZ2V0UmFuZG9tVmFsdWVzKW0uZ2V0UmFuZG9tVmFsdWVzKHUpO2Vsc2UgZm9yKGxldCB3PTA7dzx1Lmxlbmd0aDt3Kz0xKXVbd109TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjI1Nik7cmV0dXJuIEx9d3JpdGVTdHJpbmdMaXN0KGwsYyx1KXtsZXQgbT11O2ZvcihsZXQgdz0wO3c8bC5sZW5ndGg7dys9MSl7Y29uc3QgUD1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUobFt3XSk7dGhpcy52aWV3LnNldFVpbnQzMihjK3cqNCxtLCEwKSx0aGlzLmJ5dGVzLnNldChQLG0pLHRoaXMuYnl0ZXNbbStQLmJ5dGVMZW5ndGhdPTAsbSs9UC5ieXRlTGVuZ3RoKzF9cmV0dXJuIEx9aW92cyhsLGMpe2NvbnN0IHU9W107Zm9yKGxldCBtPTA7bTxjO20rPTEpe2NvbnN0IHc9bCttKjg7dS5wdXNoKFt0aGlzLnZpZXcuZ2V0VWludDMyKHcsITApLHRoaXMudmlldy5nZXRVaW50MzIodys0LCEwKV0pfXJldHVybiB1fXJlYWRQYXRoKGwsYyx1KXtjb25zdCBtPXRoaXMuZmRzLmdldChsKTtpZighbXx8bS5raW5kIT09ImRpciIpcmV0dXJuIG51bGw7Y29uc3Qgdz1uZXcgVGV4dERlY29kZXIoKS5kZWNvZGUodGhpcy5ieXRlcy5zdWJhcnJheShjLGMrdSkpO3JldHVybiBibihtLnBhdGgsdyl9b3BlbkRlc2NyaXB0b3IobCxjKXtjb25zdCB1PXRoaXMubmV4dEZkKys7cmV0dXJuIHRoaXMuZmRzLnNldCh1LGwpLHRoaXMudmlldy5zZXRVaW50MzIoYyx1LCEwKSxMfXdyaXRlRmlsZXN0YXQobCxjLHUpe3RoaXMuYnl0ZXMuZmlsbCgwLGwsbCs2NCksdGhpcy5ieXRlc1tsKzE2XT1jLHRoaXMudmlldy5zZXRCaWdVaW50NjQobCsyNCwxbiwhMCksdGhpcy52aWV3LnNldEJpZ1VpbnQ2NChsKzMyLEJpZ0ludCh1KSwhMCl9d3JpdGVJbml0aWFsRmlsZShsLGMpe2NvbnN0IHU9V2UobCk7dGhpcy5lbnN1cmVQYXJlbnREaXIodSk7Y29uc3QgbT1uZXcgVWludDhBcnJheShjLmJ5dGVMZW5ndGgpO20uc2V0KGMpLHRoaXMuZmlsZXMuc2V0KHUsbSl9ZW5zdXJlUGFyZW50RGlyKGwpe2NvbnN0IGM9VXQobCk7Yz09PWx8fHRoaXMuZGlycy5oYXMoYyl8fCh0aGlzLmVuc3VyZVBhcmVudERpcihjKSx0aGlzLmRpcnMuYWRkKGMpKX13cml0ZUZpbGVDaHVuayhsLGMpe2lmKCFjLmJ5dGVMZW5ndGgpcmV0dXJuO2NvbnN0IHU9dGhpcy5maWxlcy5nZXQobC5wYXRoKT8/bmV3IFVpbnQ4QXJyYXksbT1sLmFwcGVuZD91LmJ5dGVMZW5ndGg6bC5wb3NpdGlvbix3PU1hdGgubWF4KHUuYnl0ZUxlbmd0aCxtK2MuYnl0ZUxlbmd0aCk7bGV0IFA7aWYodzw9dS5idWZmZXIuYnl0ZUxlbmd0aClQPW5ldyBVaW50OEFycmF5KHUuYnVmZmVyLDAsdyk7ZWxzZXtjb25zdCByPW5ldyBVaW50OEFycmF5KE1hdGgubWF4KHcsdS5idWZmZXIuYnl0ZUxlbmd0aCoyKSk7ci5zZXQodSksUD1yLnN1YmFycmF5KDAsdyl9UC5zZXQoYyxtKSx0aGlzLmZpbGVzLnNldChsLnBhdGgsUCksbC5wb3NpdGlvbj1tK2MuYnl0ZUxlbmd0aH19ZnVuY3Rpb24geW4oZCl7cmV0dXJuIGQucmVkdWNlKChsLGMpPT5sK25ldyBUZXh0RW5jb2RlcigpLmVuY29kZShjKS5ieXRlTGVuZ3RoKzEsMCl9ZnVuY3Rpb24gd24oZCl7c3dpdGNoKGQua2luZCl7Y2FzZSJkaXIiOnJldHVybiBTdDtjYXNlImZpbGUiOnJldHVybiBNdDtkZWZhdWx0OnJldHVybiBkcn19ZnVuY3Rpb24gYm4oZCxsKXtyZXR1cm4gbC5zdGFydHNXaXRoKCIvIik/V2UobCk6V2UoYCR7ZH0vJHtsfWApfWZ1bmN0aW9uIFdlKGQpe2NvbnN0IGw9W107Zm9yKGNvbnN0IGMgb2YgZC5yZXBsYWNlKC9cXC9nLCIvIikuc3BsaXQoIi8iKSlpZighKCFjfHxjPT09Ii4iKSl7aWYoYz09PSIuLiIpe2wucG9wKCk7Y29udGludWV9bC5wdXNoKGMpfXJldHVybmAvJHtsLmpvaW4oIi8iKX1gfWZ1bmN0aW9uIFV0KGQpe2NvbnN0IGw9V2UoZCk7aWYobD09PSIvIilyZXR1cm4iLyI7Y29uc3QgYz1sLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuIGM8PTA/Ii8iOmwuc2xpY2UoMCxjKX1hc3luYyBmdW5jdGlvbiBFbihkKXtjb25zdCBsPWF3YWl0IGhuKGQpLGM9bmV3IHZuKHthcmdzOlsiY29udmVydGVyLWltYWdlIl0sZmlsZXM6e319KSx1PWF3YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKGwse3dhc2lfc25hcHNob3RfcHJldmlldzE6Yy5pbXBvcnRzfSk7Yy5zZXRJbnN0YW5jZSh1KTtjb25zdCBtPXUuZXhwb3J0cztpZih0eXBlb2YgbS5maWxlbnNfaW1hZ2Vfbm9ybWFsaXplX2hlaWYhPSJmdW5jdGlvbiJ8fHR5cGVvZiBtLmZpbGVuc19pbWFnZV9oZWlmX3Byb2ZpbGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJVcGRhdGUgdGhlIGltYWdlIFdBU00gY29yZSB0byBkZWNvZGUgSEVJRiBjb2xvciBwcm9maWxlcy4iKTtjb25zdCB3PShyLFMsRCk9PntsZXQgQz0wLGI9MCwkPTA7dHJ5e2lmKEM9bS5maWxlbnNfaW1hZ2VfYWxsb2Mocik+Pj4wLCFDKXRocm93IG5ldyBFcnJvcigiSW1hZ2UgY29yZSBjb3VsZCBub3QgYWxsb2NhdGUgaXRzIGlucHV0IGJ1ZmZlci4iKTtjb25zdCBIPW5ldyBVaW50OEFycmF5KG0ubWVtb3J5LmJ1ZmZlcik7UyhILEMpO2NvbnN0IFo9RChDKTtpZihiPU51bWJlcihaJjB4ZmZmZmZmZmZuKSwkPU51bWJlcihaPj4zMm4pLCFifHwkPDR8fGIrJD5tLm1lbW9yeS5idWZmZXIuYnl0ZUxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkltYWdlIGNvcmUgcmV0dXJuZWQgYW4gaW52YWxpZCBIRUlGIHJlc3VsdC4iKTtjb25zdCBSPW5ldyBVaW50OEFycmF5KG0ubWVtb3J5LmJ1ZmZlcixiLCQpLFY9bmV3IERhdGFWaWV3KFIuYnVmZmVyLFIuYnl0ZU9mZnNldCkuZ2V0VWludDMyKDAsITApO2lmKFY+JC00KXRocm93IG5ldyBFcnJvcigiSW1hZ2UgY29yZSByZXR1cm5lZCBpbnZhbGlkIEhFSUYgbWV0YWRhdGEuIik7Y29uc3QgSj1KU09OLnBhcnNlKG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShSLnN1YmFycmF5KDQsNCtWKSkpO2lmKCFKLm9rKXRocm93IG5ldyBFcnJvcihKLmVycm9yTWVzc2FnZXx8IkhFSUYgY29sb3IgY29udmVyc2lvbiBmYWlsZWQuIik7cmV0dXJue3N0YXR1czpKLGJ5dGVzOlIuc2xpY2UoNCtWKX19ZmluYWxseXtiJiYkJiZtLmZpbGVuc19pbWFnZV9mcmVlKGIsJCksQyYmbS5maWxlbnNfaW1hZ2VfZnJlZShDLHIpfX07cmV0dXJuIE9iamVjdC5hc3NpZ24ocj0+e2NvbnN0e2ljYzpTLHBpeGVsczpELC4uLkN9PXIsYj1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoey4uLkMsaWNjTGVuZ3RoOlMubGVuZ3RofSkpLCQ9NCtiLmxlbmd0aCtTLmxlbmd0aCtELmxlbmd0aDtyZXR1cm4gdygkLChILFopPT57bmV3IERhdGFWaWV3KEguYnVmZmVyKS5zZXRVaW50MzIoWixiLmxlbmd0aCwhMCksSC5zZXQoYixaKzQpLEguc2V0KFMsWis0K2IubGVuZ3RoKSxILnNldChELForNCtiLmxlbmd0aCtTLmxlbmd0aCl9LEg9Pm0uZmlsZW5zX2ltYWdlX25vcm1hbGl6ZV9oZWlmKEgsJCkpLmJ5dGVzfSx7cmVhZENvbG9yUHJvZmlsZShyLFMpe3JldHVybiB3KHIubGVuZ3RoLChELEMpPT5ELnNldChyLEMpLEQ9Pm0uZmlsZW5zX2ltYWdlX2hlaWZfcHJvZmlsZShELHIubGVuZ3RoLFMpKS5zdGF0dXMucHJvZmlsZX19KX1jb25zdCBSdD1zZWxmO1J0Lm9ubWVzc2FnZT1hc3luYyh7ZGF0YTpkfSk9Pnt0cnl7aWYoIVsiaGVpYyIsImhlaWYiXS5pbmNsdWRlcyhkLmZvcm1hdCkpdGhyb3cgbmV3IEVycm9yKCJPbmx5IEhFSUMvSEVJRiBpbWFnZSBkZWNvZGluZyBpcyBidW5kbGVkLiIpO2NvbnN0IGw9YXdhaXQgRW4oZC5pbWFnZVdhc21VcmwpLGM9YXdhaXQga24oZC5pbnB1dCxkLndhc21VcmwsbCk7UnQucG9zdE1lc3NhZ2Uoe3NvdXJjZTpjLGZvcm1hdDoicG5nIixjb250ZW50VHlwZToiaW1hZ2UvcG5nIn0sW2MuYnVmZmVyXSl9Y2F0Y2gobCl7UnQucG9zdE1lc3NhZ2Uoe2Vycm9yOmwgaW5zdGFuY2VvZiBFcnJvcj9sLm1lc3NhZ2U6U3RyaW5nKGwpfSl9fTthc3luYyBmdW5jdGlvbiBrbihkLGwsYyl7Y29uc3QgdT1hd2FpdCBmZXRjaChsKTtpZighdS5vayl0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkIHRoZSBIRUlGIGRlY29kZXI6ICR7dS5zdGF0dXN9LmApO2NvbnN0IG09YXdhaXQgQnIoe3dhc21CaW5hcnk6bmV3IFVpbnQ4QXJyYXkoYXdhaXQoYXdhaXQgc3IodSkpLmFycmF5QnVmZmVyKCkpfSk7cmV0dXJuIGZuKG0sZCxjLGMucmVhZENvbG9yUHJvZmlsZSl9fSkoKTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVkaWEtd29ya2VyLVR4SEU3bnVQLmpzLm1hcAo=", p = (Z) => Uint8Array.from(atob(Z), (X) => X.charCodeAt(0)), G = typeof self < "u" && self.Blob && new Blob([p(V)], { type: "text/javascript;charset=utf-8" });
|
|
3
3
|
function Y(Z) {
|
|
4
4
|
let X;
|
package/dist/wasm-client.d.ts
CHANGED
|
@@ -7,6 +7,8 @@ export interface WasmConverterClientOptions {
|
|
|
7
7
|
imageWasm?: WasmModuleSource;
|
|
8
8
|
/** Loaded only when the core requests Office password decryption. */
|
|
9
9
|
officeWasm?: WasmModuleSource;
|
|
10
|
+
/** Loaded on demand for EPS, PS and Illustrator previews. */
|
|
11
|
+
postscriptWasm?: WasmModuleSource;
|
|
10
12
|
fetch?: typeof fetch;
|
|
11
13
|
}
|
|
12
14
|
export interface WasmCoreMetrics {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@filens/converter-client",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Optional WASM, HTTP, and mock converter client adapters for @filens multi-format preview routes.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"test:unit": "vitest run"
|
|
32
32
|
},
|
|
33
33
|
"peerDependencies": {
|
|
34
|
-
"@filens/core": "^0.1.
|
|
34
|
+
"@filens/core": "^0.1.1"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@filens/core": "file:../core"
|