1
0
mirror of https://github.com/laurent22/joplin.git synced 2024-12-18 09:35:20 +02:00
joplin/packages/app-mobile/pluginAssets/mermaid/mermaid.min.js.base64.js

1 line
3.7 MiB

module.exports = `KGZ1bmN0aW9uKHdBLGQwKXt0eXBlb2YgZXhwb3J0cz09Im9iamVjdCImJnR5cGVvZiBtb2R1bGU8InUiP21vZHVsZS5leHBvcnRzPWQwKCk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoZDApOih3QT10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp3QXx8c2VsZix3QS5tZXJtYWlkPWQwKCkpfSkodGhpcyxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB3QShpKXtmb3IodmFyIGE9W10sZj0xO2Y8YXJndW1lbnRzLmxlbmd0aDtmKyspYVtmLTFdPWFyZ3VtZW50c1tmXTt2YXIgcD1BcnJheS5mcm9tKHR5cGVvZiBpPT0ic3RyaW5nIj9baV06aSk7cFtwLmxlbmd0aC0xXT1wW3AubGVuZ3RoLTFdLnJlcGxhY2UoL1xyP1xuKFtcdCBdKikkLywiIik7dmFyIHY9cC5yZWR1Y2UoZnVuY3Rpb24oRSxDKXt2YXIgQT1DLm1hdGNoKC9cbihbXHQgXSt8KD8hXHMpLikvZyk7cmV0dXJuIEE/RS5jb25jYXQoQS5tYXAoZnVuY3Rpb24oUCl7dmFyIEYsajtyZXR1cm4oaj0oRj1QLm1hdGNoKC9bXHQgXS9nKSk9PT1udWxsfHxGPT09dm9pZCAwP3ZvaWQgMDpGLmxlbmd0aCkhPT1udWxsJiZqIT09dm9pZCAwP2o6MH0pKTpFfSxbXSk7aWYodi5sZW5ndGgpe3ZhciBtPW5ldyBSZWdFeHAoYApbCSBde2ArTWF0aC5taW4uYXBwbHkoTWF0aCx2KSsifSIsImciKTtwPXAubWFwKGZ1bmN0aW9uKEUpe3JldHVybiBFLnJlcGxhY2UobSxgCmApfSl9cFswXT1wWzBdLnJlcGxhY2UoL15ccj9cbi8sIiIpO3ZhciBiPXBbMF07cmV0dXJuIGEuZm9yRWFjaChmdW5jdGlvbihFLEMpe3ZhciBBPWIubWF0Y2goLyg/Ol58XG4pKCAqKSQvKSxQPUE/QVsxXToiIixGPUU7dHlwZW9mIEU9PSJzdHJpbmciJiZFLmluY2x1ZGVzKGAKYCkmJihGPVN0cmluZyhFKS5zcGxpdChgCmApLm1hcChmdW5jdGlvbihqLFIpe3JldHVybiBSPT09MD9qOiIiK1Aran0pLmpvaW4oYApgKSksYis9RitwW0MrMV19KSxifXZhciBkMD10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9O2Z1bmN0aW9uIFBFKGkpe3JldHVybiBpJiZpLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLCJkZWZhdWx0Iik/aS5kZWZhdWx0Oml9dmFyIEFMdD17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKGksYSl7KGZ1bmN0aW9uKGYscCl7aS5leHBvcnRzPXAoKX0pKGQwLGZ1bmN0aW9uKCl7dmFyIGY9MWUzLHA9NmU0LHY9MzZlNSxtPSJtaWxsaXNlY29uZCIsYj0ic2Vjb25kIixFPSJtaW51dGUiLEM9ImhvdXIiLEE9ImRheSIsUD0id2VlayIsRj0ibW9udGgiLGo9InF1YXJ0ZXIiLFI9InllYXIiLEg9ImRhdGUiLFk9IkludmFsaWQgRGF0ZSIscnQ9L14oXGR7NH0pWy0vXT8oXGR7MSwyfSk/Wy0vXT8oXGR7MCwyfSlbVHRcc10qKFxkezEsMn0pPzo/KFxkezEsMn0pPzo/KFxkezEsMn0pP1suOl0/KFxkKyk/JC8sSj0vXFsoW15cXV0rKV18WXsxLDR9fE17MSw0fXxEezEsMn18ZHsxLDR9fEh7MSwyfXxoezEsMn18YXxBfG17MSwyfXxzezEsMn18WnsxLDJ9fFNTUy9nLGl0PXtuYW1lOiJlbiIsd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLG1vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxvcmRpbmFsOmZ1bmN0aW9uKEN0KXt2YXIgdHQ9WyJ0aCIsInN0IiwibmQiLCJyZCJdLFB0PUN0JTEwMDtyZXR1cm4iWyIrQ3QrKHR0WyhQdC0yMCklMTBdfHx0dFtQdF18fHR0WzBdKSsiXSJ9fSxmdD1mdW5jdGlvbihDdCx0dCxQdCl7dmFyIHB0PVN0cmluZyhDdCk7cmV0dXJuIXB0fHxwdC5sZW5ndGg+PXR0P0N0OiIiK0FycmF5KHR0KzEtcHQubGVuZ3RoKS5qb2luKFB0KStDdH0sVHQ9e3M6ZnQsejpmdW5jdGlvbihDdCl7dmFyIHR0PS1DdC51dGNPZmZzZXQoKSxQdD1NYXRoLmFicyh0dCkscHQ9TWF0aC5mbG9vcihQdC82MCksRnQ9UHQlNjA7cmV0dXJuKHR0PD0wPyIrIjoiLSIpK2Z0KHB0LDIsIjAiKSsiOiIrZnQoRnQsMiwiMCIpfSxtOmZ1bmN0aW9uIEN0KHR0LFB0KXtpZih0dC5kYXRlKCk8UHQuZGF0ZSgpKXJldHVybi1DdChQdCx0dCk7dmFyIHB0PTEyKihQdC55ZWFyKCktdHQueWVhcigpKSsoUHQubW9udGgoKS10dC5tb250aCgpKSxGdD10dC5jbG9uZSgpLmFkZChwdCxGKSxYPVB0LUZ0PDAsUnQ9dHQuY2xvbmUoKS5hZGQocHQrKFg/LTE6MSksRik7cmV0dXJuKygtKHB0KyhQdC1GdCkvKFg/RnQtUnQ6UnQtRnQpKXx8MCl9LGE6ZnVuY3Rpb24oQ3Qpe3JldHVybiBDdDwwP01hdGguY2VpbChDdCl8fDA6TWF0aC5mbG9vcihDdCl9LHA6ZnVuY3Rpb24oQ3Qpe3JldHVybntNOkYseTpSLHc6UCxkOkEsRDpILGg6QyxtOkUsczpiLG1zOm0sUTpqfVtDdF18fFN0cmluZyhDdHx8IiIpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvcyQvLCIiKX0sdTpmdW5jdGlvbihDdCl7cmV0dXJuIEN0PT09dm9pZCAwfX0sa3Q9ImVuIixtdD17fTttdFtrdF09aXQ7dmFyIGN0PWZ1bmN0aW9uKEN0KXtyZXR1cm4gQ3QgaW5zdGFuY2VvZiBodH0seXQ9ZnVuY3Rpb24gQ3QodHQsUHQscHQpe3ZhciBGdDtpZighdHQpcmV0dXJuIGt0O2lmKHR5cGVvZiB0dD09InN0cmluZyIpe3ZhciBYPXR0LnRvTG93ZXJDYXNlKCk7bXRbWF0mJihGdD1YKSxQdCYmKG10W1hdPVB0LEZ0PVgpO3ZhciBSdD10dC5zcGxpdCgiLSIpO2lmKCFGdCYmUnQubGVuZ3RoPjEpcmV0dXJuIEN0KFJ0WzBdKX1lbHNle3ZhciBCdD10dC5uYW1lO210W0J0XT10dCxGdD1CdH1yZXR1cm4hcHQmJkZ0JiYoa3Q9RnQpLEZ0fHwhcHQmJmt0fSxzdD1mdW5jdGlvbihDdCx0dCl7aWYoY3QoQ3QpKXJldHVybiBDdC5jbG9uZSgpO3ZhciBQdD10eXBlb2YgdHQ9PSJvYmplY3QiP3R0Ont9O3JldHVybiBQdC5kYXRlPUN0LFB0LmFyZ3M9YXJndW1lbnRzLG5ldyBodChQdCl9LHh0PVR0O3h0Lmw9eXQseHQuaT1jdCx4dC53PWZ1bmN0aW9uKEN0LHR0KXtyZXR1cm4gc3QoQ3Qse2xvY2FsZTp0dC4kTCx1dGM6dHQuJHUseDp0dC4keCwkb2Zmc2V0OnR0LiRvZmZzZXR9KX07dmFyIGh0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gQ3QoUHQpe3RoaXMuJEw9eXQoUHQubG9jYWxlLG51bGwsITApLHRoaXMucGFyc2UoUHQpfXZhciB0dD1DdC5wcm90b3R5cGU7cmV0dXJuIHR0LnBhcnNlPWZ1bmN0aW9uKFB0KXt0aGlzLiRkPWZ1bmN0aW9uKHB0KXt2YXIgRnQ9cHQuZGF0ZSxYPXB0LnV0YztpZihGdD09PW51bGwpcmV0dXJuIG5ldyBEYXRlKE5hTik7aWYoeHQudShGdCkpcmV0dXJuIG5ldyBEYXRlO2lmKEZ0IGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gbmV3IERhdGUoRnQpO2lmKHR5cGVvZiBGdD09InN0cmluZyImJiEvWiQvaS50ZXN0KEZ0KSl7dmFyIFJ0PUZ0Lm1hdGNoKHJ0KTtpZihSdCl7dmFyIEJ0PVJ0WzJdLTF8fDAsdnQ9KFJ0WzddfHwiMCIpLnN1YnN0cmluZygwLDMpO3JldHVybiBYP25ldyBEYXRlKERhdGUuVVRDKFJ0WzFdLEJ0LFJ0WzNdfHwxLFJ0WzRdfHwwLFJ0WzVdfHwwLFJ0WzZdfHwwLHZ0KSk6bmV3IERhdGUoUnRbMV0sQnQsUnRbM118fDEsUnRbNF18fDAsUnRbNV18fDAsUnRbNl18fDAsdnQpfX1yZXR1cm4gbmV3IERhdGUoRnQpfShQdCksdGhpcy4keD1QdC54fHx7fSx0aGlzLmluaXQoKX0sdHQuaW5pdD1mdW5jdGlvbigpe3ZhciBQdD10aGlzLiRkO3RoaXMuJHk9UHQuZ2V0RnVsbFllYXIoKSx0aGlzLiRNPVB0LmdldE1vbnRoKCksdGhpcy4kRD1QdC5nZXREYXRlKCksdGhpcy4kVz1QdC5nZXREYXkoKSx0aGlzLiRIPVB0LmdldEhvdXJzKCksdGhpcy4kbT1QdC5nZXRNaW51dGVzKCksdGhpcy4kcz1QdC5nZXRTZWNvbmRzKCksdGhpcy4kbXM9UHQuZ2V0TWlsbGlzZWNvbmRzKCl9LHR0LiR1dGlscz1mdW5jdGlvbigpe3JldHVybiB4dH0sdHQuaXNWYWxpZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkLnRvU3RyaW5nKCkhPT1ZfSx0dC5pc1NhbWU9ZnVuY3Rpb24oUHQscHQpe3ZhciBGdD1zdChQdCk7cmV0dXJuIHRoaXMuc3RhcnRPZihwdCk8PUZ0JiZGdDw9dGhpcy5lbmRPZihwdCl9LHR0LmlzQWZ0ZXI9ZnVuY3Rpb24oUHQscHQpe3JldHVybiBzdChQdCk8dGhpcy5zdGFydE9mKHB0KX0sdHQuaXNCZWZvcmU9ZnVuY3Rpb24oUHQscHQpe3JldHVybiB0aGlzLmVuZE9mKHB0KTxzdChQdCl9LHR0LiRnPWZ1bmN0aW9uKFB0LHB0LEZ0KXtyZXR1cm4geHQudShQdCk/dGhpc1twdF06dGhpcy5zZXQoRnQsUHQpfSx0dC51bml4PWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZmxvb3IodGhpcy52YWx1ZU9mKCkvMWUzKX0sdHQudmFsdWVPZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkLmdldFRpbWUoKX0sdHQuc3RhcnRPZj1mdW5jdGlvbihQdCxwdCl7dmFyIEZ0PXRoaXMsWD0hIXh0LnUocHQpfHxwdCxSdD14dC5wKFB0KSxCdD1mdW5jdGlvbihBZSxuZSl7dmFyIGtlPXh0LncoRnQuJHU/RGF0ZS5VVEMoRnQuJHksbmUsQWUpOm5ldyBEYXRlKEZ0LiR5LG5lLEFlKSxGdCk7cmV0dXJuIFg/a2U6a2UuZW5kT2YoQSl9LHZ0PWZ1bmN0aW9uKEFlLG5lKXtyZXR1cm4geHQudyhGdC50b0RhdGUoKVtBZV0uYXBwbHkoRnQudG9EYXRlKCJzIiksKFg/WzAsMCwwLDBdOlsyMyw1OSw1OSw5OTldKS5zbGljZShuZSkpLEZ0KX0sT3Q9dGhpcy4kVyxWdD10aGlzLiRNLHFlPXRoaXMuJEQsX249InNldCIrKHRoaXMuJHU/IlVUQyI6IiIpO3N3aXRjaChSdCl7Y2FzZSBSOnJldHVybiBYP0J0KDEsMCk6QnQoMzEsMTEpO2Nhc2UgRjpyZXR1cm4gWD9CdCgxLFZ0KTpCdCgwLFZ0KzEpO2Nhc2UgUDp2YXIgVGU9dGhpcy4kbG9jYWxlKCkud2Vla1N0YXJ0fHwwLFduPShPdDxUZT9PdCs3Ok90KS1UZTtyZXR1cm4gQnQoWD9xZS1XbjpxZSsoNi1XbiksVnQpO2Nhc2UgQTpjYXNlIEg6cmV0dXJuIHZ0KF9uKyJIb3VycyIsMCk7Y2FzZSBDOnJldHVybiB2dChfbisiTWludXRlcyIsMSk7Y2FzZSBFOnJldHVybiB2dChfbisiU2Vjb25kcyIsMik7Y2FzZSBiOnJldHVybiB2dChfbisiTWlsbGlzZWNvbmRzIiwzKTtkZWZhdWx0OnJldHVybiB0aGlzLmNsb25lKCl9fSx0dC5lbmRPZj1mdW5jdGlvbihQdCl7cmV0dXJuIHRoaXMuc3RhcnRPZihQdCwhMSl9LHR0LiRzZXQ9ZnVuY3Rpb24oUHQscHQpe3ZhciBGdCxYPXh0LnAoUHQpLFJ0PSJzZXQiKyh0aGlzLiR1PyJVVEMiOiIiKSxCdD0oRnQ9e30sRnRbQV09UnQrIkRhdGUiLEZ0W0hdPVJ0KyJEYXRlIixGdFtGXT1SdCsiTW9udGgiLEZ0W1JdPVJ0KyJGdWxsWWVhciIsRnRbQ109UnQrIkhvdXJzIixGdFtFXT1SdCsiTWludXRlcyIsRnRbYl09UnQrIlNlY29uZHMiLEZ0W21dPVJ0KyJNaWxsaXNlY29uZHMiLEZ0KVtYXSx2dD1YPT09QT90aGlzLiREKyhwdC10aGlzLiRXKTpwdDtpZihYPT09Rnx8WD09PVIpe3ZhciBPdD10aGlzLmNsb25lKCkuc2V0KEgsMSk7T3QuJGRbQnRdKHZ0KSxPdC5pbml0KCksdGhpcy4kZD1PdC5zZXQoSCxNYXRoLm1pbih0aGlzLiRELE90LmRheXNJbk1vbnRoKCkpKS4kZH1lbHNlIEJ0JiZ0aGlzLiRkW0J0XSh2dCk7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXN9LHR0LnNldD1mdW5jdGlvbihQdCxwdCl7cmV0dXJuIHRoaXMuY2xvbmUoKS4kc2V0KFB0LHB0KX0sdHQuZ2V0PWZ1bmN0aW9uKFB0KXtyZXR1cm4gdGhpc1t4dC5wKFB0KV0oKX0sdHQuYWRkPWZ1bmN0aW9uKFB0LHB0KXt2YXIgRnQsWD10aGlzO1B0PU51bWJlcihQdCk7dmFyIFJ0PXh0LnAocHQpLEJ0PWZ1bmN0aW9uKFZ0KXt2YXIgcWU9c3QoWCk7cmV0dXJuIHh0LncocWUuZGF0ZShxZS5kYXRlKCkrTWF0aC5yb3VuZChWdCpQdCkpLFgpfTtpZihSdD09PUYpcmV0dXJuIHRoaXMuc2V0KEYsdGhpcy4kTStQdCk7aWYoUnQ9PT1SKXJldHVybiB0aGlzLnNldChSLHRoaXMuJHkrUHQpO2lmKFJ0PT09QSlyZXR1cm4gQnQoMSk7aWYoUnQ9PT1QKXJldHVybiBCdCg3KTt2YXIgdnQ9KEZ0PXt9LEZ0W0VdPXAsRnRbQ109dixGdFtiXT1mLEZ0KVtSdF18fDEsT3Q9dGhpcy4kZC5nZXRUaW1lKCkrUHQqdnQ7cmV0dXJuIHh0LncoT3QsdGhpcyl9LHR0LnN1YnRyYWN0PWZ1bmN0aW9uKFB0LHB0KXtyZXR1cm4gdGhpcy5hZGQoLTEqUHQscHQpfSx0dC5mb3JtYXQ9ZnVuY3Rpb24oUHQpe3ZhciBwdD10aGlzLEZ0PXRoaXMuJGxvY2FsZSgpO2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gRnQuaW52YWxpZERhdGV8fFk7dmFyIFg9UHR8fCJZWVlZLU1NLUREVEhIOm1tOnNzWiIsUnQ9eHQueih0aGlzKSxCdD10aGlzLiRILHZ0PXRoaXMuJG0sT3Q9dGhpcy4kTSxWdD1GdC53ZWVrZGF5cyxxZT1GdC5tb250aHMsX249ZnVuY3Rpb24obmUsa2UsVmUsRWUpe3JldHVybiBuZSYmKG5lW2tlXXx8bmUocHQsWCkpfHxWZVtrZV0uc2xpY2UoMCxFZSl9LFRlPWZ1bmN0aW9uKG5lKXtyZXR1cm4geHQucyhCdCUxMnx8MTIsbmUsIjAiKX0sV249RnQubWVyaWRpZW18fGZ1bmN0aW9uKG5lLGtlLFZlKXt2YXIgRWU9bmU8MTI/IkFNIjoiUE0iO3JldHVybiBWZT9FZS50b0xvd2VyQ2FzZSgpOkVlfSxBZT17WVk6U3RyaW5nKHRoaXMuJHkpLnNsaWNlKC0yKSxZWVlZOnRoaXMuJHksTTpPdCsxLE1NOnh0LnMoT3QrMSwyLCIwIiksTU1NOl9uKEZ0Lm1vbnRoc1Nob3J0LE90LHFlLDMpLE1NTU06X24ocWUsT3QpLEQ6dGhpcy4kRCxERDp4dC5zKHRoaXMuJEQsMiwiMCIpLGQ6U3RyaW5nKHRoaXMuJFcpLGRkOl9uKEZ0LndlZWtkYXlzTWluLHRoaXMuJFcsVnQsMiksZGRkOl9uKEZ0LndlZWtkYXlzU2hvcnQsdGhpcy4kVyxWdCwzKSxkZGRkOlZ0W3RoaXMuJFddLEg6U3RyaW5nKEJ0KSxISDp4dC5zKEJ0LDIsIjAiKSxoOlRlKDEpLGhoOlRlKDIpLGE6V24oQnQsdnQsITApLEE6V24oQnQsdnQsITEpLG06U3RyaW5nKHZ0KSxtbTp4dC5zKHZ0LDIsIjAiKSxzOlN0cmluZyh0aGlzLiRzKSxzczp4dC5zKHRoaXMuJHMsMiwiMCIpLFNTUzp4dC5zKHRoaXMuJG1zLDMsIjAiKSxaOlJ0fTtyZXR1cm4gWC5yZXBsYWNlKEosZnVuY3Rpb24obmUsa2Upe3JldHVybiBrZXx8QWVbbmVdfHxSdC5yZXBsYWNlKCI6IiwiIil9KX0sdHQudXRjT2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIDE1Ki1NYXRoLnJvdW5kKHRoaXMuJGQuZ2V0VGltZXpvbmVPZmZzZXQoKS8xNSl9LHR0LmRpZmY9ZnVuY3Rpb24oUHQscHQsRnQpe3ZhciBYLFJ0PXh0LnAocHQpLEJ0PXN0KFB0KSx2dD0oQnQudXRjT2Zmc2V0KCktdGhpcy51dGNPZmZzZXQoKSkqcCxPdD10aGlzLUJ0LFZ0PXh0Lm0odGhpcyxCdCk7cmV0dXJuIFZ0PShYPXt9LFhbUl09VnQvMTIsWFtGXT1WdCxYW2pdPVZ0LzMsWFtQXT0oT3QtdnQpLzYwNDhlNSxYW0FdPShPdC12dCkvODY0ZTUsWFtDXT1PdC92LFhbRV09T3QvcCxYW2JdPU90L2YsWClbUnRdfHxPdCxGdD9WdDp4dC5hKFZ0KX0sdHQuZGF5c0luTW9udGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbmRPZihGKS4kRH0sdHQuJGxvY2FsZT1mdW5jdGlvbigpe3JldHVybiBtdFt0aGlzLiRMXX0sdHQubG9jYWxlPWZ1bmN0aW9uKFB0LHB0KXtpZighUHQpcmV0dXJuIHRoaXMuJEw7dmFyIEZ0PXRoaXMuY2xvbmUoKSxYPXl0KFB0LHB0LCEwKTtyZXR1cm4gWCYmKEZ0LiRMPVgpLEZ0fSx0dC5jbG9uZT1mdW5jdGlvbigpe3JldHVybiB4dC53KHRoaXMuJGQsdGhpcyl9LHR0LnRvRGF0ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSl9LHR0LnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzVmFsaWQoKT90aGlzLnRvSVNPU3RyaW5nKCk6bnVsbH0sdHQudG9JU09TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC50b0lTT1N0cmluZygpfSx0dC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkLnRvVVRDU3RyaW5nKCl9LEN0fSgpLGR0PWh0LnByb3RvdHlwZTtyZXR1cm4gc3QucHJvdG90eXBlPWR0LFtbIiRtcyIsbV0sWyIkcyIsYl0sWyIkbSIsRV0sWyIkSCIsQ10sWyIkVyIsQV0sWyIkTSIsRl0sWyIkeSIsUl0sWyIkRCIsSF1dLmZvckVhY2goZnVuY3Rpb24oQ3Qpe2R0W0N0WzFdXT1mdW5jdGlvbih0dCl7cmV0dXJuIHRoaXMuJGcodHQsQ3RbMF0sQ3RbMV0pfX0pLHN0LmV4dGVuZD1mdW5jdGlvbihDdCx0dCl7cmV0dXJuIEN0LiRpfHwoQ3QodHQsaHQsc3QpLEN0LiRpPSEwKSxzdH0sc3QubG9jYWxlPXl0LHN0LmlzRGF5anM9Y3Qsc3QudW5peD1mdW5jdGlvbihDdCl7cmV0dXJuIHN0KDFlMypDdCl9LHN0LmVuPW10W2t0XSxzdC5Mcz1tdCxzdC5wPXt9LHN0fSl9KShBTHQpO3ZhciBxNWU9QUx0LmV4cG9ydHM7Y29uc3QgdXA9UEUocTVlKSxnNT17dHJhY2U6MCxkZWJ1ZzoxLGluZm86Mix3YXJuOjMsZXJyb3I6NCxmYXRhbDo1fSxXdD17dHJhY2U6KC4uLmkpPT57fSxkZWJ1ZzooLi4uaSk9Pnt9LGluZm86KC4uLmkpPT57fSx3YXJuOiguLi5pKT0+e30sZXJyb3I6KC4uLmkpPT57fSxmYXRhbDooLi4uaSk9Pnt9fSx6ZnQ9ZnVuY3Rpb24oaT0iZmF0YWwiKXtsZXQgYT1nNS5mYXRhbDt0eXBlb2YgaT09InN0cmluZyI/KGk9aS50b0xvd2VyQ2FzZSgpLGkgaW4gZzUmJihhPWc1W2ldKSk6dHlwZW9mIGk9PSJudW1iZXIiJiYoYT1pKSxXdC50cmFjZT0oKT0+e30sV3QuZGVidWc9KCk9Pnt9LFd0LmluZm89KCk9Pnt9LFd0Lndhcm49KCk9Pnt9LFd0LmVycm9yPSgpPT57fSxXdC5mYXRhbD0oKT0+e30sYTw9ZzUuZmF0YWwmJihXdC5mYXRhbD1jb25zb2xlLmVycm9yP2NvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlLFkyKCJGQVRBTCIpLCJjb2xvcjogb3JhbmdlIik6Y29uc29sZS5sb2cuYmluZChjb25zb2xlLCJceDFCWzM1bSIsWTIoIkZBVEFMIikpKSxhPD1nNS5lcnJvciYmKFd0LmVycm9yPWNvbnNvbGUuZXJyb3I/Y29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUsWTIoIkVSUk9SIiksImNvbG9yOiBvcmFuZ2UiKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIlx4MUJbMzFtIixZMigiRVJST1IiKSkpLGE8PWc1Lndhcm4mJihXdC53YXJuPWNvbnNvbGUud2Fybj9jb25zb2xlLndhcm4uYmluZChjb25zb2xlLFkyKCJXQVJOIiksImNvbG9yOiBvcmFuZ2UiKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIlx4MUJbMzNtIixZMigiV0FSTiIpKSksYTw9ZzUuaW5mbyYmKFd0LmluZm89Y29uc29sZS5pbmZvP2NvbnNvbGUuaW5mby5iaW5kKGNvbnNvbGUsWTIoIklORk8iKSwiY29sb3I6IGxpZ2h0Ymx1ZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiXHgxQlszNG0iLFkyKCJJTkZPIikpKSxhPD1nNS5kZWJ1ZyYmKFd0LmRlYnVnPWNvbnNvbGUuZGVidWc/Y29uc29sZS5kZWJ1Zy5iaW5kKGNvbnNvbGUsWTIoIkRFQlVHIiksImNvbG9yOiBsaWdodGdyZWVuIik6Y29uc29sZS5sb2cuYmluZChjb25zb2xlLCJceDFCWzMybSIsWTIoIkRFQlVHIikpKSxhPD1nNS50cmFjZSYmKFd0LnRyYWNlPWNvbnNvbGUuZGVidWc/Y29uc29sZS5kZWJ1Zy5iaW5kKGNvbnNvbGUsWTIoIlRSQUNFIiksImNvbG9yOiBsaWdodGdyZWVuIik6Y29uc29sZS5sb2cuYmluZChjb25zb2xlLCJceDFCWzMybSIsWTIoIlRSQUNFIikpKX0sWTI9aT0+YCVjJHt1cCgpLmZvcm1hdCgic3MuU1NTIil9IDogJHtpfSA6IGA7dmFyIHFmdD17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkocWZ0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgWHg9cWZ0LnNhbml0aXplVXJsPXZvaWQgMCxINWU9L14oW15cd10qKShqYXZhc2NyaXB0fGRhdGF8dmJzY3JpcHQpL2ltLFY1ZT0vJiMoXHcrKSheXHd8Oyk/L2csRzVlPS8mKG5ld2xpbmV8dGFiKTsvZ2ksVTVlPS9bXHUwMDAwLVx1MDAxRlx1MDA3Ri1cdTAwOUZcdTIwMDAtXHUyMDBEXHVGRUZGXS9naW0sVzVlPS9eLisoOnwmY29sb247KS9naW0sSzVlPVsiLiIsIi8iXTtmdW5jdGlvbiBZNWUoaSl7cmV0dXJuIEs1ZS5pbmRleE9mKGlbMF0pPi0xfWZ1bmN0aW9uIFg1ZShpKXtyZXR1cm4gaS5yZXBsYWNlKFY1ZSxmdW5jdGlvbihhLGYpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGYpfSl9ZnVuY3Rpb24gUTVlKGkpe3ZhciBhPVg1ZShpfHwiIikucmVwbGFjZShHNWUsIiIpLnJlcGxhY2UoVTVlLCIiKS50cmltKCk7aWYoIWEpcmV0dXJuImFib3V0OmJsYW5rIjtpZihZNWUoYSkpcmV0dXJuIGE7dmFyIGY9YS5tYXRjaChXNWUpO2lmKCFmKXJldHVybiBhO3ZhciBwPWZbMF07cmV0dXJuIEg1ZS50ZXN0KHApPyJhYm91dDpibGFuayI6YX1YeD1xZnQuc2FuaXRpemVVcmw9UTVlO2Z1bmN0aW9uIGZVKGksYSl7cmV0dXJuIGk9PW51bGx8fGE9PW51bGw/TmFOOmk8YT8tMTppPmE/MTppPj1hPzA6TmFOfWZ1bmN0aW9uIFo1ZShpLGEpe3JldHVybiBpPT1udWxsfHxhPT1udWxsP05hTjphPGk/LTE6YT5pPzE6YT49aT8wOk5hTn1mdW5jdGlvbiBIZnQoaSl7bGV0IGEsZixwO2kubGVuZ3RoIT09Mj8oYT1mVSxmPShFLEMpPT5mVShpKEUpLEMpLHA9KEUsQyk9PmkoRSktQyk6KGE9aT09PWZVfHxpPT09WjVlP2k6SjVlLGY9aSxwPWkpO2Z1bmN0aW9uIHYoRSxDLEE9MCxQPUUubGVuZ3RoKXtpZihBPFApe2lmKGEoQyxDKSE9PTApcmV0dXJuIFA7ZG97Y29uc3QgRj1BK1A+Pj4xO2YoRVtGXSxDKTwwP0E9RisxOlA9Rn13aGlsZShBPFApfXJldHVybiBBfWZ1bmN0aW9uIG0oRSxDLEE9MCxQPUUubGVuZ3RoKXtpZihBPFApe2lmKGEoQyxDKSE9PTApcmV0dXJuIFA7ZG97Y29uc3QgRj1BK1A+Pj4xO2YoRVtGXSxDKTw9MD9BPUYrMTpQPUZ9d2hpbGUoQTxQKX1yZXR1cm4gQX1mdW5jdGlvbiBiKEUsQyxBPTAsUD1FLmxlbmd0aCl7Y29uc3QgRj12KEUsQyxBLFAtMSk7cmV0dXJuIEY+QSYmcChFW0YtMV0sQyk+LXAoRVtGXSxDKT9GLTE6Rn1yZXR1cm57bGVmdDp2LGNlbnRlcjpiLHJpZ2h0Om19fWZ1bmN0aW9uIEo1ZSgpe3JldHVybiAwfWZ1bmN0aW9uIHQ2ZShpKXtyZXR1cm4gaT09PW51bGw/TmFOOitpfWNvbnN0IGU2ZT1IZnQoZlUpLnJpZ2h0O0hmdCh0NmUpLmNlbnRlcjtjb25zdCBuNmU9ZTZlO2NsYXNzIExMdCBleHRlbmRzIE1hcHtjb25zdHJ1Y3RvcihhLGY9czZlKXtpZihzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse19pbnRlcm46e3ZhbHVlOm5ldyBNYXB9LF9rZXk6e3ZhbHVlOmZ9fSksYSE9bnVsbClmb3IoY29uc3RbcCx2XW9mIGEpdGhpcy5zZXQocCx2KX1nZXQoYSl7cmV0dXJuIHN1cGVyLmdldChNTHQodGhpcyxhKSl9aGFzKGEpe3JldHVybiBzdXBlci5oYXMoTUx0KHRoaXMsYSkpfXNldChhLGYpe3JldHVybiBzdXBlci5zZXQocjZlKHRoaXMsYSksZil9ZGVsZXRlKGEpe3JldHVybiBzdXBlci5kZWxldGUoaTZlKHRoaXMsYSkpfX1mdW5jdGlvbiBNTHQoe19pbnRlcm46aSxfa2V5OmF9LGYpe2NvbnN0IHA9YShmKTtyZXR1cm4gaS5oYXMocCk/aS5nZXQocCk6Zn1mdW5jdGlvbiByNmUoe19pbnRlcm46aSxfa2V5OmF9LGYpe2NvbnN0IHA9YShmKTtyZXR1cm4gaS5oYXMocCk/aS5nZXQocCk6KGkuc2V0KHAsZiksZil9ZnVuY3Rpb24gaTZlKHtfaW50ZXJuOmksX2tleTphfSxmKXtjb25zdCBwPWEoZik7cmV0dXJuIGkuaGFzKHApJiYoZj1pLmdldChwKSxpLmRlbGV0ZShwKSksZn1mdW5jdGlvbiBzNmUoaSl7cmV0dXJuIGkhPT1udWxsJiZ0eXBlb2YgaT09Im9iamVjdCI/aS52YWx1ZU9mKCk6aX12YXIgVmZ0PU1hdGguc3FydCg1MCksR2Z0PU1hdGguc3FydCgxMCksVWZ0PU1hdGguc3FydCgyKTtmdW5jdGlvbiBhNmUoaSxhLGYpe3ZhciBwLHY9LTEsbSxiLEU7aWYoYT0rYSxpPStpLGY9K2YsaT09PWEmJmY+MClyZXR1cm5baV07aWYoKHA9YTxpKSYmKG09aSxpPWEsYT1tKSwoRT1ETHQoaSxhLGYpKT09PTB8fCFpc0Zpbml0ZShFKSlyZXR1cm5bXTtpZihFPjApe2xldCBDPU1hdGgucm91bmQoaS9FKSxBPU1hdGgucm91bmQoYS9FKTtmb3IoQypFPGkmJisrQyxBKkU+YSYmLS1BLGI9bmV3IEFycmF5KG09QS1DKzEpOysrdjxtOyliW3ZdPShDK3YpKkV9ZWxzZXtFPS1FO2xldCBDPU1hdGgucm91bmQoaSpFKSxBPU1hdGgucm91bmQoYSpFKTtmb3IoQy9FPGkmJisrQyxBL0U+YSYmLS1BLGI9bmV3IEFycmF5KG09QS1DKzEpOysrdjxtOyliW3ZdPShDK3YpL0V9cmV0dXJuIHAmJmIucmV2ZXJzZSgpLGJ9ZnVuY3Rpb24gREx0KGksYSxmKXt2YXIgcD0oYS1pKS9NYXRoLm1heCgwLGYpLHY9TWF0aC5mbG9vcihNYXRoLmxvZyhwKS9NYXRoLkxOMTApLG09cC9NYXRoLnBvdygxMCx2KTtyZXR1cm4gdj49MD8obT49VmZ0PzEwOm0+PUdmdD81Om0+PVVmdD8yOjEpKk1hdGgucG93KDEwLHYpOi1NYXRoLnBvdygxMCwtdikvKG0+PVZmdD8xMDptPj1HZnQ/NTptPj1VZnQ/MjoxKX1mdW5jdGlvbiBXZnQoaSxhLGYpe3ZhciBwPU1hdGguYWJzKGEtaSkvTWF0aC5tYXgoMCxmKSx2PU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2cocCkvTWF0aC5MTjEwKSksbT1wL3Y7cmV0dXJuIG0+PVZmdD92Kj0xMDptPj1HZnQ/dio9NTptPj1VZnQmJih2Kj0yKSxhPGk/LXY6dn1mdW5jdGlvbiBvNmUoaSxhKXtsZXQgZjtpZihhPT09dm9pZCAwKWZvcihjb25zdCBwIG9mIGkpcCE9bnVsbCYmKGY8cHx8Zj09PXZvaWQgMCYmcD49cCkmJihmPXApO2Vsc2V7bGV0IHA9LTE7Zm9yKGxldCB2IG9mIGkpKHY9YSh2LCsrcCxpKSkhPW51bGwmJihmPHZ8fGY9PT12b2lkIDAmJnY+PXYpJiYoZj12KX1yZXR1cm4gZn1mdW5jdGlvbiBjNmUoaSxhKXtsZXQgZjtpZihhPT09dm9pZCAwKWZvcihjb25zdCBwIG9mIGkpcCE9bnVsbCYmKGY+cHx8Zj09PXZvaWQgMCYmcD49cCkmJihmPXApO2Vsc2V7bGV0IHA9LTE7Zm9yKGxldCB2IG9mIGkpKHY9YSh2LCsrcCxpKSkhPW51bGwmJihmPnZ8fGY9PT12b2lkIDAmJnY+PXYpJiYoZj12KX1yZXR1cm4gZn1mdW5jdGlvbiB1NmUoaSl7cmV0dXJuIGl9dmFyIGRVPTEsS2Z0PTIsWWZ0PTMsZ1U9NCxJTHQ9MWUtNjtmdW5jdGlvbiBsNmUoaSl7cmV0dXJuInRyYW5zbGF0ZSgiK2krIiwwKSJ9ZnVuY3Rpb24gaDZlKGkpe3JldHVybiJ0cmFuc2xhdGUoMCwiK2krIikifWZ1bmN0aW9uIGY2ZShpKXtyZXR1cm4gYT0+K2koYSl9ZnVuY3Rpb24gZDZlKGksYSl7cmV0dXJuIGE9TWF0aC5tYXgoMCxpLmJhbmR3aWR0aCgpLWEqMikvMixpLnJvdW5kKCkmJihhPU1hdGgucm91bmQoYSkpLGY9PitpKGYpK2F9ZnVuY3Rpb24gZzZlKCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIE9MdChpLGEpe3ZhciBmPVtdLHA9bnVsbCx2PW51bGwsbT02LGI9NixFPTMsQz10eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93LmRldmljZVBpeGVsUmF0aW8+MT8wOi41LEE9aT09PWRVfHxpPT09Z1U/LTE6MSxQPWk9PT1nVXx8aT09PUtmdD8ieCI6InkiLEY9aT09PWRVfHxpPT09WWZ0P2w2ZTpoNmU7ZnVuY3Rpb24gaihSKXt2YXIgSD1wPz8oYS50aWNrcz9hLnRpY2tzLmFwcGx5KGEsZik6YS5kb21haW4oKSksWT12Pz8oYS50aWNrRm9ybWF0P2EudGlja0Zvcm1hdC5hcHBseShhLGYpOnU2ZSkscnQ9TWF0aC5tYXgobSwwKStFLEo9YS5yYW5nZSgpLGl0PStKWzBdK0MsZnQ9K0pbSi5sZW5ndGgtMV0rQyxUdD0oYS5iYW5kd2lkdGg/ZDZlOmY2ZSkoYS5jb3B5KCksQyksa3Q9Ui5zZWxlY3Rpb24/Ui5zZWxlY3Rpb24oKTpSLG10PWt0LnNlbGVjdEFsbCgiLmRvbWFpbiIpLmRhdGEoW251bGxdKSxjdD1rdC5zZWxlY3RBbGwoIi50aWNrIikuZGF0YShILGEpLm9yZGVyKCkseXQ9Y3QuZXhpdCgpLHN0PWN0LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0aWNrIikseHQ9Y3Quc2VsZWN0KCJsaW5lIiksaHQ9Y3Quc2VsZWN0KCJ0ZXh0Iik7bXQ9bXQubWVyZ2UobXQuZW50ZXIoKS5pbnNlcnQoInBhdGgiLCIudGljayIpLmF0dHIoImNsYXNzIiwiZG9tYWluIikuYXR0cigic3Ryb2tlIiwiY3VycmVudENvbG9yIikpLGN0PWN0Lm1lcmdlKHN0KSx4dD14dC5tZXJnZShzdC5hcHBlbmQoImxpbmUiKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKS5hdHRyKFArIjIiLEEqbSkpLGh0PWh0Lm1lcmdlKHN0LmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCJjdXJyZW50Q29sb3IiKS5hdHRyKFAsQSpydCkuYXR0cigiZHkiLGk9PT1kVT8iMGVtIjppPT09WWZ0PyIwLjcxZW0iOiIwLjMyZW0iKSksUiE9PWt0JiYobXQ9bXQudHJhbnNpdGlvbihSKSxjdD1jdC50cmFuc2l0aW9uKFIpLHh0PXh0LnRyYW5zaXRpb24oUiksaHQ9aHQudHJhbnNpdGlvbihSKSx5dD15dC50cmFuc2l0aW9uKFIpLmF0dHIoIm9wYWNpdHkiLElMdCkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihkdCl7cmV0dXJuIGlzRmluaXRlKGR0PVR0KGR0KSk/RihkdCtDKTp0aGlzLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIil9KSxzdC5hdHRyKCJvcGFjaXR5IixJTHQpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZHQpe3ZhciBDdD10aGlzLnBhcmVudE5vZGUuX19heGlzO3JldHVybiBGKChDdCYmaXNGaW5pdGUoQ3Q9Q3QoZHQpKT9DdDpUdChkdCkpK0MpfSkpLHl0LnJlbW92ZSgpLG10LmF0dHIoImQiLGk9PT1nVXx8aT09PUtmdD9iPyJNIitBKmIrIiwiK2l0KyJIIitDKyJWIitmdCsiSCIrQSpiOiJNIitDKyIsIitpdCsiViIrZnQ6Yj8iTSIraXQrIiwiK0EqYisiViIrQysiSCIrZnQrIlYiK0EqYjoiTSIraXQrIiwiK0MrIkgiK2Z0KSxjdC5hdHRyKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGR0KXtyZXR1cm4gRihUdChkdCkrQyl9KSx4dC5hdHRyKFArIjIiLEEqbSksaHQuYXR0cihQLEEqcnQpLnRleHQoWSksa3QuZmlsdGVyKGc2ZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsaT09PUtmdD8ic3RhcnQiOmk9PT1nVT8iZW5kIjoibWlkZGxlIiksa3QuZWFjaChmdW5jdGlvbigpe3RoaXMuX19heGlzPVR0fSl9cmV0dXJuIGouc2NhbGU9ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9UixqKTphfSxqLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIGY9QXJyYXkuZnJvbShhcmd1bWVudHMpLGp9LGoudGlja0FyZ3VtZW50cz1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1SPT1udWxsP1tdOkFycmF5LmZyb20oUiksaik6Zi5zbGljZSgpfSxqLnRpY2tWYWx1ZXM9ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9Uj09bnVsbD9udWxsOkFycmF5LmZyb20oUiksaik6cCYmcC5zbGljZSgpfSxqLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9UixqKTp2fSxqLnRpY2tTaXplPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPWI9K1Isaik6bX0sai50aWNrU2l6ZUlubmVyPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPStSLGopOm19LGoudGlja1NpemVPdXRlcj1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj0rUixqKTpifSxqLnRpY2tQYWRkaW5nPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPStSLGopOkV9LGoub2Zmc2V0PWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhDPStSLGopOkN9LGp9ZnVuY3Rpb24gcDZlKGkpe3JldHVybiBPTHQoZFUsaSl9ZnVuY3Rpb24gYjZlKGkpe3JldHVybiBPTHQoWWZ0LGkpfXZhciB2NmU9e3ZhbHVlOigpPT57fX07ZnVuY3Rpb24gTkx0KCl7Zm9yKHZhciBpPTAsYT1hcmd1bWVudHMubGVuZ3RoLGY9e30scDtpPGE7KytpKXtpZighKHA9YXJndW1lbnRzW2ldKyIiKXx8cCBpbiBmfHwvW1xzLl0vLnRlc3QocCkpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrcCk7ZltwXT1bXX1yZXR1cm4gbmV3IHBVKGYpfWZ1bmN0aW9uIHBVKGkpe3RoaXMuXz1pfWZ1bmN0aW9uIHc2ZShpLGEpe3JldHVybiBpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24oZil7dmFyIHA9IiIsdj1mLmluZGV4T2YoIi4iKTtpZih2Pj0wJiYocD1mLnNsaWNlKHYrMSksZj1mLnNsaWNlKDAsdikpLGYmJiFhLmhhc093blByb3BlcnR5KGYpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2YpO3JldHVybnt0eXBlOmYsbmFtZTpwfX0pfXBVLnByb3RvdHlwZT1OTHQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpwVSxvbjpmdW5jdGlvbihpLGEpe3ZhciBmPXRoaXMuXyxwPXc2ZShpKyIiLGYpLHYsbT0tMSxiPXAubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK208YjspaWYoKHY9KGk9cFttXSkudHlwZSkmJih2PW02ZShmW3ZdLGkubmFtZSkpKXJldHVybiB2O3JldHVybn1pZihhIT1udWxsJiZ0eXBlb2YgYSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrYSk7Zm9yKDsrK208YjspaWYodj0oaT1wW21dKS50eXBlKWZbdl09UEx0KGZbdl0saS5uYW1lLGEpO2Vsc2UgaWYoYT09bnVsbClmb3IodiBpbiBmKWZbdl09UEx0KGZbdl0saS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGk9e30sYT10aGlzLl87Zm9yKHZhciBmIGluIGEpaVtmXT1hW2ZdLnNsaWNlKCk7cmV0dXJuIG5ldyBwVShpKX0sY2FsbDpmdW5jdGlvbihpLGEpe2lmKCh2PWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIGY9bmV3IEFycmF5KHYpLHA9MCx2LG07cDx2OysrcClmW3BdPWFyZ3VtZW50c1twKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoaSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIraSk7Zm9yKG09dGhpcy5fW2ldLHA9MCx2PW0ubGVuZ3RoO3A8djsrK3ApbVtwXS52YWx1ZS5hcHBseShhLGYpfSxhcHBseTpmdW5jdGlvbihpLGEsZil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShpKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitpKTtmb3IodmFyIHA9dGhpcy5fW2ldLHY9MCxtPXAubGVuZ3RoO3Y8bTsrK3YpcFt2XS52YWx1ZS5hcHBseShhLGYpfX07ZnVuY3Rpb24gbTZlKGksYSl7Zm9yKHZhciBmPTAscD1pLmxlbmd0aCx2O2Y8cDsrK2YpaWYoKHY9aVtmXSkubmFtZT09PWEpcmV0dXJuIHYudmFsdWV9ZnVuY3Rpb24gUEx0KGksYSxmKXtmb3IodmFyIHA9MCx2PWkubGVuZ3RoO3A8djsrK3ApaWYoaVtwXS5uYW1lPT09YSl7aVtwXT12NmUsaT1pLnNsaWNlKDAscCkuY29uY2F0KGkuc2xpY2UocCsxKSk7YnJlYWt9cmV0dXJuIGYhPW51bGwmJmkucHVzaCh7bmFtZTphLHZhbHVlOmZ9KSxpfXZhciBYZnQ9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiO2NvbnN0IEZMdD17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6WGZ0LHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn07ZnVuY3Rpb24gYlUoaSl7dmFyIGE9aSs9IiIsZj1hLmluZGV4T2YoIjoiKTtyZXR1cm4gZj49MCYmKGE9aS5zbGljZSgwLGYpKSE9PSJ4bWxucyImJihpPWkuc2xpY2UoZisxKSksRkx0Lmhhc093blByb3BlcnR5KGEpP3tzcGFjZTpGTHRbYV0sbG9jYWw6aX06aX1mdW5jdGlvbiB5NmUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vd25lckRvY3VtZW50LGY9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIGY9PT1YZnQmJmEuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PVhmdD9hLmNyZWF0ZUVsZW1lbnQoaSk6YS5jcmVhdGVFbGVtZW50TlMoZixpKX19ZnVuY3Rpb24geDZlKGkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGkuc3BhY2UsaS5sb2NhbCl9fWZ1bmN0aW9uIEJMdChpKXt2YXIgYT1iVShpKTtyZXR1cm4oYS5sb2NhbD94NmU6eTZlKShhKX1mdW5jdGlvbiBrNmUoKXt9ZnVuY3Rpb24gUWZ0KGkpe3JldHVybiBpPT1udWxsP2s2ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IoaSl9fWZ1bmN0aW9uIEU2ZShpKXt0eXBlb2YgaSE9ImZ1bmN0aW9uIiYmKGk9UWZ0KGkpKTtmb3IodmFyIGE9dGhpcy5fZ3JvdXBzLGY9YS5sZW5ndGgscD1uZXcgQXJyYXkoZiksdj0wO3Y8ZjsrK3YpZm9yKHZhciBtPWFbdl0sYj1tLmxlbmd0aCxFPXBbdl09bmV3IEFycmF5KGIpLEMsQSxQPTA7UDxiOysrUCkoQz1tW1BdKSYmKEE9aS5jYWxsKEMsQy5fX2RhdGFfXyxQLG0pKSYmKCJfX2RhdGFfXyJpbiBDJiYoQS5fX2RhdGFfXz1DLl9fZGF0YV9fKSxFW1BdPUEpO3JldHVybiBuZXcgbmcocCx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBSTHQoaSl7cmV0dXJuIGk9PW51bGw/W106QXJyYXkuaXNBcnJheShpKT9pOkFycmF5LmZyb20oaSl9ZnVuY3Rpb24gVDZlKCl7cmV0dXJuW119ZnVuY3Rpb24gakx0KGkpe3JldHVybiBpPT1udWxsP1Q2ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoaSl9fWZ1bmN0aW9uIF82ZShpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gUkx0KGkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19ZnVuY3Rpb24gQzZlKGkpe3R5cGVvZiBpPT0iZnVuY3Rpb24iP2k9XzZlKGkpOmk9akx0KGkpO2Zvcih2YXIgYT10aGlzLl9ncm91cHMsZj1hLmxlbmd0aCxwPVtdLHY9W10sbT0wO208ZjsrK20pZm9yKHZhciBiPWFbbV0sRT1iLmxlbmd0aCxDLEE9MDtBPEU7KytBKShDPWJbQV0pJiYocC5wdXNoKGkuY2FsbChDLEMuX19kYXRhX18sQSxiKSksdi5wdXNoKEMpKTtyZXR1cm4gbmV3IG5nKHAsdil9ZnVuY3Rpb24gJEx0KGkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMoaSl9fWZ1bmN0aW9uIHpMdChpKXtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGEubWF0Y2hlcyhpKX19dmFyIFM2ZT1BcnJheS5wcm90b3R5cGUuZmluZDtmdW5jdGlvbiBBNmUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFM2ZS5jYWxsKHRoaXMuY2hpbGRyZW4saSl9fWZ1bmN0aW9uIEw2ZSgpe3JldHVybiB0aGlzLmZpcnN0RWxlbWVudENoaWxkfWZ1bmN0aW9uIE02ZShpKXtyZXR1cm4gdGhpcy5zZWxlY3QoaT09bnVsbD9MNmU6QTZlKHR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6ekx0KGkpKSl9dmFyIEQ2ZT1BcnJheS5wcm90b3R5cGUuZmlsdGVyO2Z1bmN0aW9uIEk2ZSgpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4pfWZ1bmN0aW9uIE82ZShpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gRDZlLmNhbGwodGhpcy5jaGlsZHJlbixpKX19ZnVuY3Rpb24gTjZlKGkpe3JldHVybiB0aGlzLnNlbGVjdEFsbChpPT1udWxsP0k2ZTpPNmUodHlwZW9mIGk9PSJmdW5jdGlvbiI/aTp6THQoaSkpKX1mdW5jdGlvbiBQNmUoaSl7dHlwZW9mIGkhPSJmdW5jdGlvbiImJihpPSRMdChpKSk7Zm9yKHZhciBhPXRoaXMuX2dyb3VwcyxmPWEubGVuZ3RoLHA9bmV3IEFycmF5KGYpLHY9MDt2PGY7Kyt2KWZvcih2YXIgbT1hW3ZdLGI9bS5sZW5ndGgsRT1wW3ZdPVtdLEMsQT0wO0E8YjsrK0EpKEM9bVtBXSkmJmkuY2FsbChDLEMuX19kYXRhX18sQSxtKSYmRS5wdXNoKEMpO3JldHVybiBuZXcgbmcocCx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBxTHQoaSl7cmV0dXJuIG5ldyBBcnJheShpLmxlbmd0aCl9ZnVuY3Rpb24gRjZlKCl7cmV0dXJuIG5ldyBuZyh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChxTHQpLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIHZVKGksYSl7dGhpcy5vd25lckRvY3VtZW50PWkub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1pLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PWksdGhpcy5fX2RhdGFfXz1hfXZVLnByb3RvdHlwZT17Y29uc3RydWN0b3I6dlUsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoaSx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGksYSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoaSxhKX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihpKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IoaSl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKGkpfX07ZnVuY3Rpb24gQjZlKGkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBpfX1mdW5jdGlvbiBSNmUoaSxhLGYscCx2LG0pe2Zvcih2YXIgYj0wLEUsQz1hLmxlbmd0aCxBPW0ubGVuZ3RoO2I8QTsrK2IpKEU9YVtiXSk/KEUuX19kYXRhX189bVtiXSxwW2JdPUUpOmZbYl09bmV3IHZVKGksbVtiXSk7Zm9yKDtiPEM7KytiKShFPWFbYl0pJiYodltiXT1FKX1mdW5jdGlvbiBqNmUoaSxhLGYscCx2LG0sYil7dmFyIEUsQyxBPW5ldyBNYXAsUD1hLmxlbmd0aCxGPW0ubGVuZ3RoLGo9bmV3IEFycmF5KFApLFI7Zm9yKEU9MDtFPFA7KytFKShDPWFbRV0pJiYoaltFXT1SPWIuY2FsbChDLEMuX19kYXRhX18sRSxhKSsiIixBLmhhcyhSKT92W0VdPUM6QS5zZXQoUixDKSk7Zm9yKEU9MDtFPEY7KytFKVI9Yi5jYWxsKGksbVtFXSxFLG0pKyIiLChDPUEuZ2V0KFIpKT8ocFtFXT1DLEMuX19kYXRhX189bVtFXSxBLmRlbGV0ZShSKSk6ZltFXT1uZXcgdlUoaSxtW0VdKTtmb3IoRT0wO0U8UDsrK0UpKEM9YVtFXSkmJkEuZ2V0KGpbRV0pPT09QyYmKHZbRV09Qyl9ZnVuY3Rpb24gJDZlKGkpe3JldHVybiBpLl9fZGF0YV9ffWZ1bmN0aW9uIHo2ZShpLGEpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBBcnJheS5mcm9tKHRoaXMsJDZlKTt2YXIgZj1hP2o2ZTpSNmUscD10aGlzLl9wYXJlbnRzLHY9dGhpcy5fZ3JvdXBzO3R5cGVvZiBpIT0iZnVuY3Rpb24iJiYoaT1CNmUoaSkpO2Zvcih2YXIgbT12Lmxlbmd0aCxiPW5ldyBBcnJheShtKSxFPW5ldyBBcnJheShtKSxDPW5ldyBBcnJheShtKSxBPTA7QTxtOysrQSl7dmFyIFA9cFtBXSxGPXZbQV0saj1GLmxlbmd0aCxSPXE2ZShpLmNhbGwoUCxQJiZQLl9fZGF0YV9fLEEscCkpLEg9Ui5sZW5ndGgsWT1FW0FdPW5ldyBBcnJheShIKSxydD1iW0FdPW5ldyBBcnJheShIKSxKPUNbQV09bmV3IEFycmF5KGopO2YoUCxGLFkscnQsSixSLGEpO2Zvcih2YXIgaXQ9MCxmdD0wLFR0LGt0O2l0PEg7KytpdClpZihUdD1ZW2l0XSl7Zm9yKGl0Pj1mdCYmKGZ0PWl0KzEpOyEoa3Q9cnRbZnRdKSYmKytmdDxIOyk7VHQuX25leHQ9a3R8fG51bGx9fXJldHVybiBiPW5ldyBuZyhiLHApLGIuX2VudGVyPUUsYi5fZXhpdD1DLGJ9ZnVuY3Rpb24gcTZlKGkpe3JldHVybiB0eXBlb2YgaT09Im9iamVjdCImJiJsZW5ndGgiaW4gaT9pOkFycmF5LmZyb20oaSl9ZnVuY3Rpb24gSDZlKCl7cmV0dXJuIG5ldyBuZyh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKHFMdCksdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gVjZlKGksYSxmKXt2YXIgcD10aGlzLmVudGVyKCksdj10aGlzLG09dGhpcy5leGl0KCk7cmV0dXJuIHR5cGVvZiBpPT0iZnVuY3Rpb24iPyhwPWkocCkscCYmKHA9cC5zZWxlY3Rpb24oKSkpOnA9cC5hcHBlbmQoaSsiIiksYSE9bnVsbCYmKHY9YSh2KSx2JiYodj12LnNlbGVjdGlvbigpKSksZj09bnVsbD9tLnJlbW92ZSgpOmYobSkscCYmdj9wLm1lcmdlKHYpLm9yZGVyKCk6dn1mdW5jdGlvbiBHNmUoaSl7Zm9yKHZhciBhPWkuc2VsZWN0aW9uP2kuc2VsZWN0aW9uKCk6aSxmPXRoaXMuX2dyb3VwcyxwPWEuX2dyb3Vwcyx2PWYubGVuZ3RoLG09cC5sZW5ndGgsYj1NYXRoLm1pbih2LG0pLEU9bmV3IEFycmF5KHYpLEM9MDtDPGI7KytDKWZvcih2YXIgQT1mW0NdLFA9cFtDXSxGPUEubGVuZ3RoLGo9RVtDXT1uZXcgQXJyYXkoRiksUixIPTA7SDxGOysrSCkoUj1BW0hdfHxQW0hdKSYmKGpbSF09Uik7Zm9yKDtDPHY7KytDKUVbQ109ZltDXTtyZXR1cm4gbmV3IG5nKEUsdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gVTZlKCl7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxhPS0xLGY9aS5sZW5ndGg7KythPGY7KWZvcih2YXIgcD1pW2FdLHY9cC5sZW5ndGgtMSxtPXBbdl0sYjstLXY+PTA7KShiPXBbdl0pJiYobSYmYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihtKV40JiZtLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGIsbSksbT1iKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBXNmUoaSl7aXx8KGk9SzZlKTtmdW5jdGlvbiBhKEYsail7cmV0dXJuIEYmJmo/aShGLl9fZGF0YV9fLGouX19kYXRhX18pOiFGLSFqfWZvcih2YXIgZj10aGlzLl9ncm91cHMscD1mLmxlbmd0aCx2PW5ldyBBcnJheShwKSxtPTA7bTxwOysrbSl7Zm9yKHZhciBiPWZbbV0sRT1iLmxlbmd0aCxDPXZbbV09bmV3IEFycmF5KEUpLEEsUD0wO1A8RTsrK1ApKEE9YltQXSkmJihDW1BdPUEpO0Muc29ydChhKX1yZXR1cm4gbmV3IG5nKHYsdGhpcy5fcGFyZW50cykub3JkZXIoKX1mdW5jdGlvbiBLNmUoaSxhKXtyZXR1cm4gaTxhPy0xOmk+YT8xOmk+PWE/MDpOYU59ZnVuY3Rpb24gWTZlKCl7dmFyIGk9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxpLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfWZ1bmN0aW9uIFg2ZSgpe3JldHVybiBBcnJheS5mcm9tKHRoaXMpfWZ1bmN0aW9uIFE2ZSgpe2Zvcih2YXIgaT10aGlzLl9ncm91cHMsYT0wLGY9aS5sZW5ndGg7YTxmOysrYSlmb3IodmFyIHA9aVthXSx2PTAsbT1wLmxlbmd0aDt2PG07Kyt2KXt2YXIgYj1wW3ZdO2lmKGIpcmV0dXJuIGJ9cmV0dXJuIG51bGx9ZnVuY3Rpb24gWjZlKCl7bGV0IGk9MDtmb3IoY29uc3QgYSBvZiB0aGlzKSsraTtyZXR1cm4gaX1mdW5jdGlvbiBKNmUoKXtyZXR1cm4hdGhpcy5ub2RlKCl9ZnVuY3Rpb24gdHhlKGkpe2Zvcih2YXIgYT10aGlzLl9ncm91cHMsZj0wLHA9YS5sZW5ndGg7ZjxwOysrZilmb3IodmFyIHY9YVtmXSxtPTAsYj12Lmxlbmd0aCxFO208YjsrK20pKEU9dlttXSkmJmkuY2FsbChFLEUuX19kYXRhX18sbSx2KTtyZXR1cm4gdGhpc31mdW5jdGlvbiBleGUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoaSl9fWZ1bmN0aW9uIG54ZShpKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCl9fWZ1bmN0aW9uIHJ4ZShpLGEpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGksYSl9fWZ1bmN0aW9uIGl4ZShpLGEpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoaS5zcGFjZSxpLmxvY2FsLGEpfX1mdW5jdGlvbiBzeGUoaSxhKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZj1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtmPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKGkpOnRoaXMuc2V0QXR0cmlidXRlKGksZil9fWZ1bmN0aW9uIGF4ZShpLGEpe3JldHVybiBmdW5jdGlvbigpe3ZhciBmPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO2Y9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhpLnNwYWNlLGkubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoaS5zcGFjZSxpLmxvY2FsLGYpfX1mdW5jdGlvbiBveGUoaSxhKXt2YXIgZj1iVShpKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBwPXRoaXMubm9kZSgpO3JldHVybiBmLmxvY2FsP3AuZ2V0QXR0cmlidXRlTlMoZi5zcGFjZSxmLmxvY2FsKTpwLmdldEF0dHJpYnV0ZShmKX1yZXR1cm4gdGhpcy5lYWNoKChhPT1udWxsP2YubG9jYWw/bnhlOmV4ZTp0eXBlb2YgYT09ImZ1bmN0aW9uIj9mLmxvY2FsP2F4ZTpzeGU6Zi5sb2NhbD9peGU6cnhlKShmLGEpKX1mdW5jdGlvbiBITHQoaSl7cmV0dXJuIGkub3duZXJEb2N1bWVudCYmaS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxpLmRvY3VtZW50JiZpfHxpLmRlZmF1bHRWaWV3fWZ1bmN0aW9uIGN4ZShpKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGkpfX1mdW5jdGlvbiB1eGUoaSxhLGYpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoaSxhLGYpfX1mdW5jdGlvbiBseGUoaSxhLGYpe3JldHVybiBmdW5jdGlvbigpe3ZhciBwPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3A9PW51bGw/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShpKTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KGkscCxmKX19ZnVuY3Rpb24gaHhlKGksYSxmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgoYT09bnVsbD9jeGU6dHlwZW9mIGE9PSJmdW5jdGlvbiI/bHhlOnV4ZSkoaSxhLGY/PyIiKSk6bUEodGhpcy5ub2RlKCksaSl9ZnVuY3Rpb24gbUEoaSxhKXtyZXR1cm4gaS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGEpfHxITHQoaSkuZ2V0Q29tcHV0ZWRTdHlsZShpLG51bGwpLmdldFByb3BlcnR5VmFsdWUoYSl9ZnVuY3Rpb24gZnhlKGkpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW2ldfX1mdW5jdGlvbiBkeGUoaSxhKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW2ldPWF9fWZ1bmN0aW9uIGd4ZShpLGEpe3JldHVybiBmdW5jdGlvbigpe3ZhciBmPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO2Y9PW51bGw/ZGVsZXRlIHRoaXNbaV06dGhpc1tpXT1mfX1mdW5jdGlvbiBweGUoaSxhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgoYT09bnVsbD9meGU6dHlwZW9mIGE9PSJmdW5jdGlvbiI/Z3hlOmR4ZSkoaSxhKSk6dGhpcy5ub2RlKClbaV19ZnVuY3Rpb24gVkx0KGkpe3JldHVybiBpLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBaZnQoaSl7cmV0dXJuIGkuY2xhc3NMaXN0fHxuZXcgR0x0KGkpfWZ1bmN0aW9uIEdMdChpKXt0aGlzLl9ub2RlPWksdGhpcy5fbmFtZXM9Vkx0KGkuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9R0x0LnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKGkpe3ZhciBhPXRoaXMuX25hbWVzLmluZGV4T2YoaSk7YTwwJiYodGhpcy5fbmFtZXMucHVzaChpKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24oaSl7dmFyIGE9dGhpcy5fbmFtZXMuaW5kZXhPZihpKTthPj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKGEsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YoaSk+PTB9fTtmdW5jdGlvbiBVTHQoaSxhKXtmb3IodmFyIGY9WmZ0KGkpLHA9LTEsdj1hLmxlbmd0aDsrK3A8djspZi5hZGQoYVtwXSl9ZnVuY3Rpb24gV0x0KGksYSl7Zm9yKHZhciBmPVpmdChpKSxwPS0xLHY9YS5sZW5ndGg7KytwPHY7KWYucmVtb3ZlKGFbcF0pfWZ1bmN0aW9uIGJ4ZShpKXtyZXR1cm4gZnVuY3Rpb24oKXtVTHQodGhpcyxpKX19ZnVuY3Rpb24gdnhlKGkpe3JldHVybiBmdW5jdGlvbigpe1dMdCh0aGlzLGkpfX1mdW5jdGlvbiB3eGUoaSxhKXtyZXR1cm4gZnVuY3Rpb24oKXsoYS5hcHBseSh0aGlzLGFyZ3VtZW50cyk/VUx0OldMdCkodGhpcyxpKX19ZnVuY3Rpb24gbXhlKGksYSl7dmFyIGY9Vkx0KGkrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBwPVpmdCh0aGlzLm5vZGUoKSksdj0tMSxtPWYubGVuZ3RoOysrdjxtOylpZighcC5jb250YWlucyhmW3ZdKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgYT09ImZ1bmN0aW9uIj93eGU6YT9ieGU6dnhlKShmLGEpKX1mdW5jdGlvbiB5eGUoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIHh4ZShpKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWl9fWZ1bmN0aW9uIGt4ZShpKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PWE/PyIifX1mdW5jdGlvbiBFeGUoaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGk9PW51bGw/eXhlOih0eXBlb2YgaT09ImZ1bmN0aW9uIj9reGU6eHhlKShpKSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9ZnVuY3Rpb24gVHhlKCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24gX3hlKGkpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPWl9fWZ1bmN0aW9uIEN4ZShpKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1hPz8iIn19ZnVuY3Rpb24gU3hlKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChpPT1udWxsP1R4ZToodHlwZW9mIGk9PSJmdW5jdGlvbiI/Q3hlOl94ZSkoaSkpOnRoaXMubm9kZSgpLmlubmVySFRNTH1mdW5jdGlvbiBBeGUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gTHhlKCl7cmV0dXJuIHRoaXMuZWFjaChBeGUpfWZ1bmN0aW9uIE14ZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIER4ZSgpe3JldHVybiB0aGlzLmVhY2goTXhlKX1mdW5jdGlvbiBJeGUoaSl7dmFyIGE9dHlwZW9mIGk9PSJmdW5jdGlvbiI/aTpCTHQoaSk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoYS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9ZnVuY3Rpb24gT3hlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gTnhlKGksYSl7dmFyIGY9dHlwZW9mIGk9PSJmdW5jdGlvbiI/aTpCTHQoaSkscD1hPT1udWxsP094ZTp0eXBlb2YgYT09ImZ1bmN0aW9uIj9hOlFmdChhKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoZi5hcHBseSh0aGlzLGFyZ3VtZW50cykscC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9ZnVuY3Rpb24gUHhlKCl7dmFyIGk9dGhpcy5wYXJlbnROb2RlO2kmJmkucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gRnhlKCl7cmV0dXJuIHRoaXMuZWFjaChQeGUpfWZ1bmN0aW9uIEJ4ZSgpe3ZhciBpPXRoaXMuY2xvbmVOb2RlKCExKSxhPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gYT9hLmluc2VydEJlZm9yZShpLHRoaXMubmV4dFNpYmxpbmcpOml9ZnVuY3Rpb24gUnhlKCl7dmFyIGk9dGhpcy5jbG9uZU5vZGUoITApLGE9dGhpcy5wYXJlbnROb2RlO3JldHVybiBhP2EuaW5zZXJ0QmVmb3JlKGksdGhpcy5uZXh0U2libGluZyk6aX1mdW5jdGlvbiBqeGUoaSl7cmV0dXJuIHRoaXMuc2VsZWN0KGk/UnhlOkJ4ZSl9ZnVuY3Rpb24gJHhlKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixpKTp0aGlzLm5vZGUoKS5fX2RhdGFfX31mdW5jdGlvbiB6eGUoaSl7cmV0dXJuIGZ1bmN0aW9uKGEpe2kuY2FsbCh0aGlzLGEsdGhpcy5fX2RhdGFfXyl9fWZ1bmN0aW9uIHF4ZShpKXtyZXR1cm4gaS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKGEpe3ZhciBmPSIiLHA9YS5pbmRleE9mKCIuIik7cmV0dXJuIHA+PTAmJihmPWEuc2xpY2UocCsxKSxhPWEuc2xpY2UoMCxwKSkse3R5cGU6YSxuYW1lOmZ9fSl9ZnVuY3Rpb24gSHhlKGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuX19vbjtpZihhKXtmb3IodmFyIGY9MCxwPS0xLHY9YS5sZW5ndGgsbTtmPHY7KytmKW09YVtmXSwoIWkudHlwZXx8bS50eXBlPT09aS50eXBlKSYmbS5uYW1lPT09aS5uYW1lP3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihtLnR5cGUsbS5saXN0ZW5lcixtLm9wdGlvbnMpOmFbKytwXT1tOysrcD9hLmxlbmd0aD1wOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBWeGUoaSxhLGYpe3JldHVybiBmdW5jdGlvbigpe3ZhciBwPXRoaXMuX19vbix2LG09enhlKGEpO2lmKHApe2Zvcih2YXIgYj0wLEU9cC5sZW5ndGg7YjxFOysrYilpZigodj1wW2JdKS50eXBlPT09aS50eXBlJiZ2Lm5hbWU9PT1pLm5hbWUpe3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih2LnR5cGUsdi5saXN0ZW5lcix2Lm9wdGlvbnMpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcih2LnR5cGUsdi5saXN0ZW5lcj1tLHYub3B0aW9ucz1mKSx2LnZhbHVlPWE7cmV0dXJufX10aGlzLmFkZEV2ZW50TGlzdGVuZXIoaS50eXBlLG0sZiksdj17dHlwZTppLnR5cGUsbmFtZTppLm5hbWUsdmFsdWU6YSxsaXN0ZW5lcjptLG9wdGlvbnM6Zn0scD9wLnB1c2godik6dGhpcy5fX29uPVt2XX19ZnVuY3Rpb24gR3hlKGksYSxmKXt2YXIgcD1xeGUoaSsiIiksdixtPXAubGVuZ3RoLGI7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgRT10aGlzLm5vZGUoKS5fX29uO2lmKEUpe2Zvcih2YXIgQz0wLEE9RS5sZW5ndGgsUDtDPEE7KytDKWZvcih2PTAsUD1FW0NdO3Y8bTsrK3YpaWYoKGI9cFt2XSkudHlwZT09PVAudHlwZSYmYi5uYW1lPT09UC5uYW1lKXJldHVybiBQLnZhbHVlfXJldHVybn1mb3IoRT1hP1Z4ZTpIeGUsdj0wO3Y8bTsrK3YpdGhpcy5lYWNoKEUocFt2XSxhLGYpKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBLTHQoaSxhLGYpe3ZhciBwPUhMdChpKSx2PXAuQ3VzdG9tRXZlbnQ7dHlwZW9mIHY9PSJmdW5jdGlvbiI/dj1uZXcgdihhLGYpOih2PXAuZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50IiksZj8odi5pbml0RXZlbnQoYSxmLmJ1YmJsZXMsZi5jYW5jZWxhYmxlKSx2LmRldGFpbD1mLmRldGFpbCk6di5pbml0RXZlbnQoYSwhMSwhMSkpLGkuZGlzcGF0Y2hFdmVudCh2KX1mdW5jdGlvbiBVeGUoaSxhKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gS0x0KHRoaXMsaSxhKX19ZnVuY3Rpb24gV3hlKGksYSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEtMdCh0aGlzLGksYS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBLeGUoaSxhKXtyZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgYT09ImZ1bmN0aW9uIj9XeGU6VXhlKShpLGEpKX1mdW5jdGlvbipZeGUoKXtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLGE9MCxmPWkubGVuZ3RoO2E8ZjsrK2EpZm9yKHZhciBwPWlbYV0sdj0wLG09cC5sZW5ndGgsYjt2PG07Kyt2KShiPXBbdl0pJiYoeWllbGQgYil9dmFyIEpmdD1bbnVsbF07ZnVuY3Rpb24gbmcoaSxhKXt0aGlzLl9ncm91cHM9aSx0aGlzLl9wYXJlbnRzPWF9ZnVuY3Rpb24geU4oKXtyZXR1cm4gbmV3IG5nKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sSmZ0KX1mdW5jdGlvbiBYeGUoKXtyZXR1cm4gdGhpc31uZy5wcm90b3R5cGU9eU4ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpuZyxzZWxlY3Q6RTZlLHNlbGVjdEFsbDpDNmUsc2VsZWN0Q2hpbGQ6TTZlLHNlbGVjdENoaWxkcmVuOk42ZSxmaWx0ZXI6UDZlLGRhdGE6ejZlLGVudGVyOkY2ZSxleGl0Okg2ZSxqb2luOlY2ZSxtZXJnZTpHNmUsc2VsZWN0aW9uOlh4ZSxvcmRlcjpVNmUsc29ydDpXNmUsY2FsbDpZNmUsbm9kZXM6WDZlLG5vZGU6UTZlLHNpemU6WjZlLGVtcHR5Oko2ZSxlYWNoOnR4ZSxhdHRyOm94ZSxzdHlsZTpoeGUscHJvcGVydHk6cHhlLGNsYXNzZWQ6bXhlLHRleHQ6RXhlLGh0bWw6U3hlLHJhaXNlOkx4ZSxsb3dlcjpEeGUsYXBwZW5kOkl4ZSxpbnNlcnQ6TnhlLHJlbW92ZTpGeGUsY2xvbmU6anhlLGRhdHVtOiR4ZSxvbjpHeGUsZGlzcGF0Y2g6S3hlLFtTeW1ib2wuaXRlcmF0b3JdOll4ZX07ZnVuY3Rpb24geHIoaSl7cmV0dXJuIHR5cGVvZiBpPT0ic3RyaW5nIj9uZXcgbmcoW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGkpXV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBuZyhbW2ldXSxKZnQpfWZ1bmN0aW9uIFlMdChpKXtyZXR1cm4gdHlwZW9mIGk9PSJzdHJpbmciP25ldyBuZyhbZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChpKV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBuZyhbUkx0KGkpXSxKZnQpfWZ1bmN0aW9uIHhOKGksYSxmKXtpLnByb3RvdHlwZT1hLnByb3RvdHlwZT1mLGYuY29uc3RydWN0b3I9aX1mdW5jdGlvbiB3VShpLGEpe3ZhciBmPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpO2Zvcih2YXIgcCBpbiBhKWZbcF09YVtwXTtyZXR1cm4gZn1mdW5jdGlvbiBGRSgpe312YXIga049LjcsbVU9MS9rTix5QT0iXFxzKihbKy1dP1xcZCspXFxzKiIsRU49IlxccyooWystXT8oPzpcXGQqXFwuKT9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLHMzPSJcXHMqKFsrLV0/KD86XFxkKlxcLik/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsUXhlPS9eIyhbMC05YS1mXXszLDh9KSQvLFp4ZT1uZXcgUmVnRXhwKGBecmdiXFwoJHt5QX0sJHt5QX0sJHt5QX1cXCkkYCksSnhlPW5ldyBSZWdFeHAoYF5yZ2JcXCgke3MzfSwke3MzfSwke3MzfVxcKSRgKSx0a2U9bmV3IFJlZ0V4cChgXnJnYmFcXCgke3lBfSwke3lBfSwke3lBfSwke0VOfVxcKSRgKSxla2U9bmV3IFJlZ0V4cChgXnJnYmFcXCgke3MzfSwke3MzfSwke3MzfSwke0VOfVxcKSRgKSxua2U9bmV3IFJlZ0V4cChgXmhzbFxcKCR7RU59LCR7czN9LCR7czN9XFwpJGApLHJrZT1uZXcgUmVnRXhwKGBeaHNsYVxcKCR7RU59LCR7czN9LCR7czN9LCR7RU59XFwpJGApLFhMdD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTt4TihGRSxCRSx7Y29weShpKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLGkpfSxkaXNwbGF5YWJsZSgpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpRTHQsZm9ybWF0SGV4OlFMdCxmb3JtYXRIZXg4OmlrZSxmb3JtYXRIc2w6c2tlLGZvcm1hdFJnYjpaTHQsdG9TdHJpbmc6Wkx0fSk7ZnVuY3Rpb24gUUx0KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gaWtlKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4OCgpfWZ1bmN0aW9uIHNrZSgpe3JldHVybiBpTXQodGhpcykuZm9ybWF0SHNsKCl9ZnVuY3Rpb24gWkx0KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gQkUoaSl7dmFyIGEsZjtyZXR1cm4gaT0oaSsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKGE9UXhlLmV4ZWMoaSkpPyhmPWFbMV0ubGVuZ3RoLGE9cGFyc2VJbnQoYVsxXSwxNiksZj09PTY/Skx0KGEpOmY9PT0zP25ldyBnMChhPj44JjE1fGE+PjQmMjQwLGE+PjQmMTV8YSYyNDAsKGEmMTUpPDw0fGEmMTUsMSk6Zj09PTg/eVUoYT4+MjQmMjU1LGE+PjE2JjI1NSxhPj44JjI1NSwoYSYyNTUpLzI1NSk6Zj09PTQ/eVUoYT4+MTImMTV8YT4+OCYyNDAsYT4+OCYxNXxhPj40JjI0MCxhPj40JjE1fGEmMjQwLCgoYSYxNSk8PDR8YSYxNSkvMjU1KTpudWxsKTooYT1aeGUuZXhlYyhpKSk/bmV3IGcwKGFbMV0sYVsyXSxhWzNdLDEpOihhPUp4ZS5leGVjKGkpKT9uZXcgZzAoYVsxXSoyNTUvMTAwLGFbMl0qMjU1LzEwMCxhWzNdKjI1NS8xMDAsMSk6KGE9dGtlLmV4ZWMoaSkpP3lVKGFbMV0sYVsyXSxhWzNdLGFbNF0pOihhPWVrZS5leGVjKGkpKT95VShhWzFdKjI1NS8xMDAsYVsyXSoyNTUvMTAwLGFbM10qMjU1LzEwMCxhWzRdKTooYT1ua2UuZXhlYyhpKSk/ck10KGFbMV0sYVsyXS8xMDAsYVszXS8xMDAsMSk6KGE9cmtlLmV4ZWMoaSkpP3JNdChhWzFdLGFbMl0vMTAwLGFbM10vMTAwLGFbNF0pOlhMdC5oYXNPd25Qcm9wZXJ0eShpKT9KTHQoWEx0W2ldKTppPT09InRyYW5zcGFyZW50Ij9uZXcgZzAoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBKTHQoaSl7cmV0dXJuIG5ldyBnMChpPj4xNiYyNTUsaT4+OCYyNTUsaSYyNTUsMSl9ZnVuY3Rpb24geVUoaSxhLGYscCl7cmV0dXJuIHA8PTAmJihpPWE9Zj1OYU4pLG5ldyBnMChpLGEsZixwKX1mdW5jdGlvbiB0TXQoaSl7cmV0dXJuIGkgaW5zdGFuY2VvZiBGRXx8KGk9QkUoaSkpLGk/KGk9aS5yZ2IoKSxuZXcgZzAoaS5yLGkuZyxpLmIsaS5vcGFjaXR5KSk6bmV3IGcwfWZ1bmN0aW9uIHQxdChpLGEsZixwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/dE10KGkpOm5ldyBnMChpLGEsZixwPz8xKX1mdW5jdGlvbiBnMChpLGEsZixwKXt0aGlzLnI9K2ksdGhpcy5nPSthLHRoaXMuYj0rZix0aGlzLm9wYWNpdHk9K3B9eE4oZzAsdDF0LHdVKEZFLHticmlnaHRlcihpKXtyZXR1cm4gaT1pPT1udWxsP21VOk1hdGgucG93KG1VLGkpLG5ldyBnMCh0aGlzLnIqaSx0aGlzLmcqaSx0aGlzLmIqaSx0aGlzLm9wYWNpdHkpfSxkYXJrZXIoaSl7cmV0dXJuIGk9aT09bnVsbD9rTjpNYXRoLnBvdyhrTixpKSxuZXcgZzAodGhpcy5yKmksdGhpcy5nKmksdGhpcy5iKmksdGhpcy5vcGFjaXR5KX0scmdiKCl7cmV0dXJuIHRoaXN9LGNsYW1wKCl7cmV0dXJuIG5ldyBnMChSRSh0aGlzLnIpLFJFKHRoaXMuZyksUkUodGhpcy5iKSx4VSh0aGlzLm9wYWNpdHkpKX0sZGlzcGxheWFibGUoKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OmVNdCxmb3JtYXRIZXg6ZU10LGZvcm1hdEhleDg6YWtlLGZvcm1hdFJnYjpuTXQsdG9TdHJpbmc6bk10fSkpO2Z1bmN0aW9uIGVNdCgpe3JldHVybmAjJHtqRSh0aGlzLnIpfSR7akUodGhpcy5nKX0ke2pFKHRoaXMuYil9YH1mdW5jdGlvbiBha2UoKXtyZXR1cm5gIyR7akUodGhpcy5yKX0ke2pFKHRoaXMuZyl9JHtqRSh0aGlzLmIpfSR7akUoKGlzTmFOKHRoaXMub3BhY2l0eSk/MTp0aGlzLm9wYWNpdHkpKjI1NSl9YH1mdW5jdGlvbiBuTXQoKXtjb25zdCBpPXhVKHRoaXMub3BhY2l0eSk7cmV0dXJuYCR7aT09PTE/InJnYigiOiJyZ2JhKCJ9JHtSRSh0aGlzLnIpfSwgJHtSRSh0aGlzLmcpfSwgJHtSRSh0aGlzLmIpfSR7aT09PTE/IikiOmAsICR7aX0pYH1gfWZ1bmN0aW9uIHhVKGkpe3JldHVybiBpc05hTihpKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxpKSl9ZnVuY3Rpb24gUkUoaSl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoaSl8fDApKX1mdW5jdGlvbiBqRShpKXtyZXR1cm4gaT1SRShpKSwoaTwxNj8iMCI6IiIpK2kudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIHJNdChpLGEsZixwKXtyZXR1cm4gcDw9MD9pPWE9Zj1OYU46Zjw9MHx8Zj49MT9pPWE9TmFOOmE8PTAmJihpPU5hTiksbmV3IFd3KGksYSxmLHApfWZ1bmN0aW9uIGlNdChpKXtpZihpIGluc3RhbmNlb2YgV3cpcmV0dXJuIG5ldyBXdyhpLmgsaS5zLGkubCxpLm9wYWNpdHkpO2lmKGkgaW5zdGFuY2VvZiBGRXx8KGk9QkUoaSkpLCFpKXJldHVybiBuZXcgV3c7aWYoaSBpbnN0YW5jZW9mIFd3KXJldHVybiBpO2k9aS5yZ2IoKTt2YXIgYT1pLnIvMjU1LGY9aS5nLzI1NSxwPWkuYi8yNTUsdj1NYXRoLm1pbihhLGYscCksbT1NYXRoLm1heChhLGYscCksYj1OYU4sRT1tLXYsQz0obSt2KS8yO3JldHVybiBFPyhhPT09bT9iPShmLXApL0UrKGY8cCkqNjpmPT09bT9iPShwLWEpL0UrMjpiPShhLWYpL0UrNCxFLz1DPC41P20rdjoyLW0tdixiKj02MCk6RT1DPjAmJkM8MT8wOmIsbmV3IFd3KGIsRSxDLGkub3BhY2l0eSl9ZnVuY3Rpb24gb2tlKGksYSxmLHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9pTXQoaSk6bmV3IFd3KGksYSxmLHA/PzEpfWZ1bmN0aW9uIFd3KGksYSxmLHApe3RoaXMuaD0raSx0aGlzLnM9K2EsdGhpcy5sPStmLHRoaXMub3BhY2l0eT0rcH14TihXdyxva2Usd1UoRkUse2JyaWdodGVyKGkpe3JldHVybiBpPWk9PW51bGw/bVU6TWF0aC5wb3cobVUsaSksbmV3IFd3KHRoaXMuaCx0aGlzLnMsdGhpcy5sKmksdGhpcy5vcGFjaXR5KX0sZGFya2VyKGkpe3JldHVybiBpPWk9PW51bGw/a046TWF0aC5wb3coa04saSksbmV3IFd3KHRoaXMuaCx0aGlzLnMsdGhpcy5sKmksdGhpcy5vcGFjaXR5KX0scmdiKCl7dmFyIGk9dGhpcy5oJTM2MCsodGhpcy5oPDApKjM2MCxhPWlzTmFOKGkpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLGY9dGhpcy5sLHA9ZisoZjwuNT9mOjEtZikqYSx2PTIqZi1wO3JldHVybiBuZXcgZzAoZTF0KGk+PTI0MD9pLTI0MDppKzEyMCx2LHApLGUxdChpLHYscCksZTF0KGk8MTIwP2krMjQwOmktMTIwLHYscCksdGhpcy5vcGFjaXR5KX0sY2xhbXAoKXtyZXR1cm4gbmV3IFd3KHNNdCh0aGlzLmgpLGtVKHRoaXMucyksa1UodGhpcy5sKSx4VSh0aGlzLm9wYWNpdHkpKX0sZGlzcGxheWFibGUoKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbCgpe2NvbnN0IGk9eFUodGhpcy5vcGFjaXR5KTtyZXR1cm5gJHtpPT09MT8iaHNsKCI6ImhzbGEoIn0ke3NNdCh0aGlzLmgpfSwgJHtrVSh0aGlzLnMpKjEwMH0lLCAke2tVKHRoaXMubCkqMTAwfSUke2k9PT0xPyIpIjpgLCAke2l9KWB9YH19KSk7ZnVuY3Rpb24gc010KGkpe3JldHVybiBpPShpfHwwKSUzNjAsaTwwP2krMzYwOml9ZnVuY3Rpb24ga1UoaSl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oMSxpfHwwKSl9ZnVuY3Rpb24gZTF0KGksYSxmKXtyZXR1cm4oaTw2MD9hKyhmLWEpKmkvNjA6aTwxODA/ZjppPDI0MD9hKyhmLWEpKigyNDAtaSkvNjA6YSkqMjU1fWNvbnN0IGNrZT1NYXRoLlBJLzE4MCx1a2U9MTgwL01hdGguUEksRVU9MTgsYU10PS45NjQyMixvTXQ9MSxjTXQ9LjgyNTIxLHVNdD00LzI5LHhBPTYvMjksbE10PTMqeEEqeEEsbGtlPXhBKnhBKnhBO2Z1bmN0aW9uIGhNdChpKXtpZihpIGluc3RhbmNlb2YgYTMpcmV0dXJuIG5ldyBhMyhpLmwsaS5hLGkuYixpLm9wYWNpdHkpO2lmKGkgaW5zdGFuY2VvZiBwNSlyZXR1cm4gZk10KGkpO2kgaW5zdGFuY2VvZiBnMHx8KGk9dE10KGkpKTt2YXIgYT1zMXQoaS5yKSxmPXMxdChpLmcpLHA9czF0KGkuYiksdj1uMXQoKC4yMjI1MDQ1KmErLjcxNjg3ODYqZisuMDYwNjE2OSpwKS9vTXQpLG0sYjtyZXR1cm4gYT09PWYmJmY9PT1wP209Yj12OihtPW4xdCgoLjQzNjA3NDcqYSsuMzg1MDY0OSpmKy4xNDMwODA0KnApL2FNdCksYj1uMXQoKC4wMTM5MzIyKmErLjA5NzEwNDUqZisuNzE0MTczMypwKS9jTXQpKSxuZXcgYTMoMTE2KnYtMTYsNTAwKihtLXYpLDIwMCoodi1iKSxpLm9wYWNpdHkpfWZ1bmN0aW9uIGhrZShpLGEsZixwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/aE10KGkpOm5ldyBhMyhpLGEsZixwPz8xKX1mdW5jdGlvbiBhMyhpLGEsZixwKXt0aGlzLmw9K2ksdGhpcy5hPSthLHRoaXMuYj0rZix0aGlzLm9wYWNpdHk9K3B9eE4oYTMsaGtlLHdVKEZFLHticmlnaHRlcihpKXtyZXR1cm4gbmV3IGEzKHRoaXMubCtFVSooaT8/MSksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxkYXJrZXIoaSl7cmV0dXJuIG5ldyBhMyh0aGlzLmwtRVUqKGk/PzEpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiKCl7dmFyIGk9KHRoaXMubCsxNikvMTE2LGE9aXNOYU4odGhpcy5hKT9pOmkrdGhpcy5hLzUwMCxmPWlzTmFOKHRoaXMuYik/aTppLXRoaXMuYi8yMDA7cmV0dXJuIGE9YU10KnIxdChhKSxpPW9NdCpyMXQoaSksZj1jTXQqcjF0KGYpLG5ldyBnMChpMXQoMy4xMzM4NTYxKmEtMS42MTY4NjY3KmktLjQ5MDYxNDYqZiksaTF0KC0uOTc4NzY4NCphKzEuOTE2MTQxNSppKy4wMzM0NTQqZiksaTF0KC4wNzE5NDUzKmEtLjIyODk5MTQqaSsxLjQwNTI0MjcqZiksdGhpcy5vcGFjaXR5KX19KSk7ZnVuY3Rpb24gbjF0KGkpe3JldHVybiBpPmxrZT9NYXRoLnBvdyhpLDEvMyk6aS9sTXQrdU10fWZ1bmN0aW9uIHIxdChpKXtyZXR1cm4gaT54QT9pKmkqaTpsTXQqKGktdU10KX1mdW5jdGlvbiBpMXQoaSl7cmV0dXJuIDI1NSooaTw9LjAwMzEzMDg/MTIuOTIqaToxLjA1NSpNYXRoLnBvdyhpLDEvMi40KS0uMDU1KX1mdW5jdGlvbiBzMXQoaSl7cmV0dXJuKGkvPTI1NSk8PS4wNDA0NT9pLzEyLjkyOk1hdGgucG93KChpKy4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gZmtlKGkpe2lmKGkgaW5zdGFuY2VvZiBwNSlyZXR1cm4gbmV3IHA1KGkuaCxpLmMsaS5sLGkub3BhY2l0eSk7aWYoaSBpbnN0YW5jZW9mIGEzfHwoaT1oTXQoaSkpLGkuYT09PTAmJmkuYj09PTApcmV0dXJuIG5ldyBwNShOYU4sMDxpLmwmJmkubDwxMDA/MDpOYU4saS5sLGkub3BhY2l0eSk7dmFyIGE9TWF0aC5hdGFuMihpLmIsaS5hKSp1a2U7cmV0dXJuIG5ldyBwNShhPDA/YSszNjA6YSxNYXRoLnNxcnQoaS5hKmkuYStpLmIqaS5iKSxpLmwsaS5vcGFjaXR5KX1mdW5jdGlvbiBhMXQoaSxhLGYscCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP2ZrZShpKTpuZXcgcDUoaSxhLGYscD8/MSl9ZnVuY3Rpb24gcDUoaSxhLGYscCl7dGhpcy5oPStpLHRoaXMuYz0rYSx0aGlzLmw9K2YsdGhpcy5vcGFjaXR5PStwfWZ1bmN0aW9uIGZNdChpKXtpZihpc05hTihpLmgpKXJldHVybiBuZXcgYTMoaS5sLDAsMCxpLm9wYWNpdHkpO3ZhciBhPWkuaCpja2U7cmV0dXJuIG5ldyBhMyhpLmwsTWF0aC5jb3MoYSkqaS5jLE1hdGguc2luKGEpKmkuYyxpLm9wYWNpdHkpfXhOKHA1LGExdCx3VShGRSx7YnJpZ2h0ZXIoaSl7cmV0dXJuIG5ldyBwNSh0aGlzLmgsdGhpcy5jLHRoaXMubCtFVSooaT8/MSksdGhpcy5vcGFjaXR5KX0sZGFya2VyKGkpe3JldHVybiBuZXcgcDUodGhpcy5oLHRoaXMuYyx0aGlzLmwtRVUqKGk/PzEpLHRoaXMub3BhY2l0eSl9LHJnYigpe3JldHVybiBmTXQodGhpcykucmdiKCl9fSkpO2NvbnN0IFRVPWk9PigpPT5pO2Z1bmN0aW9uIGRNdChpLGEpe3JldHVybiBmdW5jdGlvbihmKXtyZXR1cm4gaStmKmF9fWZ1bmN0aW9uIGRrZShpLGEsZil7cmV0dXJuIGk9TWF0aC5wb3coaSxmKSxhPU1hdGgucG93KGEsZiktaSxmPTEvZixmdW5jdGlvbihwKXtyZXR1cm4gTWF0aC5wb3coaStwKmEsZil9fWZ1bmN0aW9uIGdrZShpLGEpe3ZhciBmPWEtaTtyZXR1cm4gZj9kTXQoaSxmPjE4MHx8ZjwtMTgwP2YtMzYwKk1hdGgucm91bmQoZi8zNjApOmYpOlRVKGlzTmFOKGkpP2E6aSl9ZnVuY3Rpb24gcGtlKGkpe3JldHVybihpPStpKT09MT9UTjpmdW5jdGlvbihhLGYpe3JldHVybiBmLWE/ZGtlKGEsZixpKTpUVShpc05hTihhKT9mOmEpfX1mdW5jdGlvbiBUTihpLGEpe3ZhciBmPWEtaTtyZXR1cm4gZj9kTXQoaSxmKTpUVShpc05hTihpKT9hOmkpfWNvbnN0IF9VPWZ1bmN0aW9uIGkoYSl7dmFyIGY9cGtlKGEpO2Z1bmN0aW9uIHAodixtKXt2YXIgYj1mKCh2PXQxdCh2KSkuciwobT10MXQobSkpLnIpLEU9Zih2LmcsbS5nKSxDPWYodi5iLG0uYiksQT1UTih2Lm9wYWNpdHksbS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oUCl7cmV0dXJuIHYucj1iKFApLHYuZz1FKFApLHYuYj1DKFApLHYub3BhY2l0eT1BKFApLHYrIiJ9fXJldHVybiBwLmdhbW1hPWkscH0oMSk7ZnVuY3Rpb24gYmtlKGksYSl7YXx8KGE9W10pO3ZhciBmPWk/TWF0aC5taW4oYS5sZW5ndGgsaS5sZW5ndGgpOjAscD1hLnNsaWNlKCksdjtyZXR1cm4gZnVuY3Rpb24obSl7Zm9yKHY9MDt2PGY7Kyt2KXBbdl09aVt2XSooMS1tKSthW3ZdKm07cmV0dXJuIHB9fWZ1bmN0aW9uIHZrZShpKXtyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KGkpJiYhKGkgaW5zdGFuY2VvZiBEYXRhVmlldyl9ZnVuY3Rpb24gd2tlKGksYSl7dmFyIGY9YT9hLmxlbmd0aDowLHA9aT9NYXRoLm1pbihmLGkubGVuZ3RoKTowLHY9bmV3IEFycmF5KHApLG09bmV3IEFycmF5KGYpLGI7Zm9yKGI9MDtiPHA7KytiKXZbYl09dTF0KGlbYl0sYVtiXSk7Zm9yKDtiPGY7KytiKW1bYl09YVtiXTtyZXR1cm4gZnVuY3Rpb24oRSl7Zm9yKGI9MDtiPHA7KytiKW1bYl09dltiXShFKTtyZXR1cm4gbX19ZnVuY3Rpb24gbWtlKGksYSl7dmFyIGY9bmV3IERhdGU7cmV0dXJuIGk9K2ksYT0rYSxmdW5jdGlvbihwKXtyZXR1cm4gZi5zZXRUaW1lKGkqKDEtcCkrYSpwKSxmfX1mdW5jdGlvbiBLdyhpLGEpe3JldHVybiBpPStpLGE9K2EsZnVuY3Rpb24oZil7cmV0dXJuIGkqKDEtZikrYSpmfX1mdW5jdGlvbiB5a2UoaSxhKXt2YXIgZj17fSxwPXt9LHY7KGk9PT1udWxsfHx0eXBlb2YgaSE9Im9iamVjdCIpJiYoaT17fSksKGE9PT1udWxsfHx0eXBlb2YgYSE9Im9iamVjdCIpJiYoYT17fSk7Zm9yKHYgaW4gYSl2IGluIGk/Zlt2XT11MXQoaVt2XSxhW3ZdKTpwW3ZdPWFbdl07cmV0dXJuIGZ1bmN0aW9uKG0pe2Zvcih2IGluIGYpcFt2XT1mW3ZdKG0pO3JldHVybiBwfX12YXIgbzF0PS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxjMXQ9bmV3IFJlZ0V4cChvMXQuc291cmNlLCJnIik7ZnVuY3Rpb24geGtlKGkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBpfX1mdW5jdGlvbiBra2UoaSl7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBpKGEpKyIifX1mdW5jdGlvbiBnTXQoaSxhKXt2YXIgZj1vMXQubGFzdEluZGV4PWMxdC5sYXN0SW5kZXg9MCxwLHYsbSxiPS0xLEU9W10sQz1bXTtmb3IoaT1pKyIiLGE9YSsiIjsocD1vMXQuZXhlYyhpKSkmJih2PWMxdC5leGVjKGEpKTspKG09di5pbmRleCk+ZiYmKG09YS5zbGljZShmLG0pLEVbYl0/RVtiXSs9bTpFWysrYl09bSksKHA9cFswXSk9PT0odj12WzBdKT9FW2JdP0VbYl0rPXY6RVsrK2JdPXY6KEVbKytiXT1udWxsLEMucHVzaCh7aTpiLHg6S3cocCx2KX0pKSxmPWMxdC5sYXN0SW5kZXg7cmV0dXJuIGY8YS5sZW5ndGgmJihtPWEuc2xpY2UoZiksRVtiXT9FW2JdKz1tOkVbKytiXT1tKSxFLmxlbmd0aDwyP0NbMF0/a2tlKENbMF0ueCk6eGtlKGEpOihhPUMubGVuZ3RoLGZ1bmN0aW9uKEEpe2Zvcih2YXIgUD0wLEY7UDxhOysrUClFWyhGPUNbUF0pLmldPUYueChBKTtyZXR1cm4gRS5qb2luKCIiKX0pfWZ1bmN0aW9uIHUxdChpLGEpe3ZhciBmPXR5cGVvZiBhLHA7cmV0dXJuIGE9PW51bGx8fGY9PT0iYm9vbGVhbiI/VFUoYSk6KGY9PT0ibnVtYmVyIj9LdzpmPT09InN0cmluZyI/KHA9QkUoYSkpPyhhPXAsX1UpOmdNdDphIGluc3RhbmNlb2YgQkU/X1U6YSBpbnN0YW5jZW9mIERhdGU/bWtlOnZrZShhKT9ia2U6QXJyYXkuaXNBcnJheShhKT93a2U6dHlwZW9mIGEudmFsdWVPZiE9ImZ1bmN0aW9uIiYmdHlwZW9mIGEudG9TdHJpbmchPSJmdW5jdGlvbiJ8fGlzTmFOKGEpP3lrZTpLdykoaSxhKX1mdW5jdGlvbiBFa2UoaSxhKXtyZXR1cm4gaT0raSxhPSthLGZ1bmN0aW9uKGYpe3JldHVybiBNYXRoLnJvdW5kKGkqKDEtZikrYSpmKX19dmFyIHBNdD0xODAvTWF0aC5QSSxsMXQ9e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX07ZnVuY3Rpb24gYk10KGksYSxmLHAsdixtKXt2YXIgYixFLEM7cmV0dXJuKGI9TWF0aC5zcXJ0KGkqaSthKmEpKSYmKGkvPWIsYS89YiksKEM9aSpmK2EqcCkmJihmLT1pKkMscC09YSpDKSwoRT1NYXRoLnNxcnQoZipmK3AqcCkpJiYoZi89RSxwLz1FLEMvPUUpLGkqcDxhKmYmJihpPS1pLGE9LWEsQz0tQyxiPS1iKSx7dHJhbnNsYXRlWDp2LHRyYW5zbGF0ZVk6bSxyb3RhdGU6TWF0aC5hdGFuMihhLGkpKnBNdCxza2V3WDpNYXRoLmF0YW4oQykqcE10LHNjYWxlWDpiLHNjYWxlWTpFfX12YXIgQ1U7ZnVuY3Rpb24gVGtlKGkpe2NvbnN0IGE9bmV3KHR5cGVvZiBET01NYXRyaXg9PSJmdW5jdGlvbiI/RE9NTWF0cml4OldlYktpdENTU01hdHJpeCkoaSsiIik7cmV0dXJuIGEuaXNJZGVudGl0eT9sMXQ6Yk10KGEuYSxhLmIsYS5jLGEuZCxhLmUsYS5mKX1mdW5jdGlvbiBfa2UoaSl7cmV0dXJuIGk9PW51bGx8fChDVXx8KENVPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLENVLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIixpKSwhKGk9Q1UudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSkpP2wxdDooaT1pLm1hdHJpeCxiTXQoaS5hLGkuYixpLmMsaS5kLGkuZSxpLmYpKX1mdW5jdGlvbiB2TXQoaSxhLGYscCl7ZnVuY3Rpb24gdihBKXtyZXR1cm4gQS5sZW5ndGg/QS5wb3AoKSsiICI6IiJ9ZnVuY3Rpb24gbShBLFAsRixqLFIsSCl7aWYoQSE9PUZ8fFAhPT1qKXt2YXIgWT1SLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsYSxudWxsLGYpO0gucHVzaCh7aTpZLTQseDpLdyhBLEYpfSx7aTpZLTIseDpLdyhQLGopfSl9ZWxzZShGfHxqKSYmUi5wdXNoKCJ0cmFuc2xhdGUoIitGK2EraitmKX1mdW5jdGlvbiBiKEEsUCxGLGope0EhPT1QPyhBLVA+MTgwP1ArPTM2MDpQLUE+MTgwJiYoQSs9MzYwKSxqLnB1c2goe2k6Ri5wdXNoKHYoRikrInJvdGF0ZSgiLG51bGwscCktMix4Okt3KEEsUCl9KSk6UCYmRi5wdXNoKHYoRikrInJvdGF0ZSgiK1ArcCl9ZnVuY3Rpb24gRShBLFAsRixqKXtBIT09UD9qLnB1c2goe2k6Ri5wdXNoKHYoRikrInNrZXdYKCIsbnVsbCxwKS0yLHg6S3coQSxQKX0pOlAmJkYucHVzaCh2KEYpKyJza2V3WCgiK1ArcCl9ZnVuY3Rpb24gQyhBLFAsRixqLFIsSCl7aWYoQSE9PUZ8fFAhPT1qKXt2YXIgWT1SLnB1c2godihSKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7SC5wdXNoKHtpOlktNCx4Okt3KEEsRil9LHtpOlktMix4Okt3KFAsail9KX1lbHNlKEYhPT0xfHxqIT09MSkmJlIucHVzaCh2KFIpKyJzY2FsZSgiK0YrIiwiK2orIikiKX1yZXR1cm4gZnVuY3Rpb24oQSxQKXt2YXIgRj1bXSxqPVtdO3JldHVybiBBPWkoQSksUD1pKFApLG0oQS50cmFuc2xhdGVYLEEudHJhbnNsYXRlWSxQLnRyYW5zbGF0ZVgsUC50cmFuc2xhdGVZLEYsaiksYihBLnJvdGF0ZSxQLnJvdGF0ZSxGLGopLEUoQS5za2V3WCxQLnNrZXdYLEYsaiksQyhBLnNjYWxlWCxBLnNjYWxlWSxQLnNjYWxlWCxQLnNjYWxlWSxGLGopLEE9UD1udWxsLGZ1bmN0aW9uKFIpe2Zvcih2YXIgSD0tMSxZPWoubGVuZ3RoLHJ0OysrSDxZOylGWyhydD1qW0hdKS5pXT1ydC54KFIpO3JldHVybiBGLmpvaW4oIiIpfX19dmFyIENrZT12TXQoVGtlLCJweCwgIiwicHgpIiwiZGVnKSIpLFNrZT12TXQoX2tlLCIsICIsIikiLCIpIik7ZnVuY3Rpb24gQWtlKGkpe3JldHVybiBmdW5jdGlvbihhLGYpe3ZhciBwPWkoKGE9YTF0KGEpKS5oLChmPWExdChmKSkuaCksdj1UTihhLmMsZi5jKSxtPVROKGEubCxmLmwpLGI9VE4oYS5vcGFjaXR5LGYub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKEUpe3JldHVybiBhLmg9cChFKSxhLmM9dihFKSxhLmw9bShFKSxhLm9wYWNpdHk9YihFKSxhKyIifX19Y29uc3QgTGtlPUFrZShna2UpO3ZhciBrQT0wLF9OPTAsQ049MCx3TXQ9MWUzLFNVLFNOLEFVPTAsJEU9MCxMVT0wLEFOPXR5cGVvZiBwZXJmb3JtYW5jZT09Im9iamVjdCImJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLG1NdD10eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbihpKXtzZXRUaW1lb3V0KGksMTcpfTtmdW5jdGlvbiBoMXQoKXtyZXR1cm4gJEV8fChtTXQoTWtlKSwkRT1BTi5ub3coKStMVSl9ZnVuY3Rpb24gTWtlKCl7JEU9MH1mdW5jdGlvbiBNVSgpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9TVUucHJvdG90eXBlPXlNdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk1VLHJlc3RhcnQ6ZnVuY3Rpb24oaSxhLGYpe2lmKHR5cGVvZiBpIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7Zj0oZj09bnVsbD9oMXQoKTorZikrKGE9PW51bGw/MDorYSksIXRoaXMuX25leHQmJlNOIT09dGhpcyYmKFNOP1NOLl9uZXh0PXRoaXM6U1U9dGhpcyxTTj10aGlzKSx0aGlzLl9jYWxsPWksdGhpcy5fdGltZT1mLGYxdCgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxmMXQoKSl9fTtmdW5jdGlvbiB5TXQoaSxhLGYpe3ZhciBwPW5ldyBNVTtyZXR1cm4gcC5yZXN0YXJ0KGksYSxmKSxwfWZ1bmN0aW9uIERrZSgpe2gxdCgpLCsra0E7Zm9yKHZhciBpPVNVLGE7aTspKGE9JEUtaS5fdGltZSk+PTAmJmkuX2NhbGwuY2FsbCh2b2lkIDAsYSksaT1pLl9uZXh0Oy0ta0F9ZnVuY3Rpb24geE10KCl7JEU9KEFVPUFOLm5vdygpKStMVSxrQT1fTj0wO3RyeXtEa2UoKX1maW5hbGx5e2tBPTAsT2tlKCksJEU9MH19ZnVuY3Rpb24gSWtlKCl7dmFyIGk9QU4ubm93KCksYT1pLUFVO2E+d010JiYoTFUtPWEsQVU9aSl9ZnVuY3Rpb24gT2tlKCl7Zm9yKHZhciBpLGE9U1UsZixwPTEvMDthOylhLl9jYWxsPyhwPmEuX3RpbWUmJihwPWEuX3RpbWUpLGk9YSxhPWEuX25leHQpOihmPWEuX25leHQsYS5fbmV4dD1udWxsLGE9aT9pLl9uZXh0PWY6U1U9Zik7U049aSxmMXQocCl9ZnVuY3Rpb24gZjF0KGkpe2lmKCFrQSl7X04mJihfTj1jbGVhclRpbWVvdXQoX04pKTt2YXIgYT1pLSRFO2E+MjQ/KGk8MS8wJiYoX049c2V0VGltZW91dCh4TXQsaS1BTi5ub3coKS1MVSkpLENOJiYoQ049Y2xlYXJJbnRlcnZhbChDTikpKTooQ058fChBVT1BTi5ub3coKSxDTj1zZXRJbnRlcnZhbChJa2Usd010KSksa0E9MSxtTXQoeE10KSl9fWZ1bmN0aW9uIGtNdChpLGEsZil7dmFyIHA9bmV3IE1VO3JldHVybiBhPWE9PW51bGw/MDorYSxwLnJlc3RhcnQodj0+e3Auc3RvcCgpLGkodithKX0sYSxmKSxwfXZhciBOa2U9Tkx0KCJzdGFydCIsImVuZCIsImNhbmNlbCIsImludGVycnVwdCIpLFBrZT1bXSxFTXQ9MCxUTXQ9MSxkMXQ9MixEVT0zLF9NdD00LGcxdD01LElVPTY7ZnVuY3Rpb24gT1UoaSxhLGYscCx2LG0pe3ZhciBiPWkuX190cmFuc2l0aW9uO2lmKCFiKWkuX190cmFuc2l0aW9uPXt9O2Vsc2UgaWYoZiBpbiBiKXJldHVybjtGa2UoaSxmLHtuYW1lOmEsaW5kZXg6cCxncm91cDp2LG9uOk5rZSx0d2VlbjpQa2UsdGltZTptLnRpbWUsZGVsYXk6bS5kZWxheSxkdXJhdGlvbjptLmR1cmF0aW9uLGVhc2U6bS5lYXNlLHRpbWVyOm51bGwsc3RhdGU6RU10fSl9ZnVuY3Rpb24gcDF0KGksYSl7dmFyIGY9WXcoaSxhKTtpZihmLnN0YXRlPkVNdCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBmfWZ1bmN0aW9uIG8zKGksYSl7dmFyIGY9WXcoaSxhKTtpZihmLnN0YXRlPkRVKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiBmfWZ1bmN0aW9uIFl3KGksYSl7dmFyIGY9aS5fX3RyYW5zaXRpb247aWYoIWZ8fCEoZj1mW2FdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIGZ9ZnVuY3Rpb24gRmtlKGksYSxmKXt2YXIgcD1pLl9fdHJhbnNpdGlvbix2O3BbYV09ZixmLnRpbWVyPXlNdChtLDAsZi50aW1lKTtmdW5jdGlvbiBtKEEpe2Yuc3RhdGU9VE10LGYudGltZXIucmVzdGFydChiLGYuZGVsYXksZi50aW1lKSxmLmRlbGF5PD1BJiZiKEEtZi5kZWxheSl9ZnVuY3Rpb24gYihBKXt2YXIgUCxGLGosUjtpZihmLnN0YXRlIT09VE10KXJldHVybiBDKCk7Zm9yKFAgaW4gcClpZihSPXBbUF0sUi5uYW1lPT09Zi5uYW1lKXtpZihSLnN0YXRlPT09RFUpcmV0dXJuIGtNdChiKTtSLnN0YXRlPT09X010PyhSLnN0YXRlPUlVLFIudGltZXIuc3RvcCgpLFIub24uY2FsbCgiaW50ZXJydXB0IixpLGkuX19kYXRhX18sUi5pbmRleCxSLmdyb3VwKSxkZWxldGUgcFtQXSk6K1A8YSYmKFIuc3RhdGU9SVUsUi50aW1lci5zdG9wKCksUi5vbi5jYWxsKCJjYW5jZWwiLGksaS5fX2RhdGFfXyxSLmluZGV4LFIuZ3JvdXApLGRlbGV0ZSBwW1BdKX1pZihrTXQoZnVuY3Rpb24oKXtmLnN0YXRlPT09RFUmJihmLnN0YXRlPV9NdCxmLnRpbWVyLnJlc3RhcnQoRSxmLmRlbGF5LGYudGltZSksRShBKSl9KSxmLnN0YXRlPWQxdCxmLm9uLmNhbGwoInN0YXJ0IixpLGkuX19kYXRhX18sZi5pbmRleCxmLmdyb3VwKSxmLnN0YXRlPT09ZDF0KXtmb3IoZi5zdGF0ZT1EVSx2PW5ldyBBcnJheShqPWYudHdlZW4ubGVuZ3RoKSxQPTAsRj0tMTtQPGo7KytQKShSPWYudHdlZW5bUF0udmFsdWUuY2FsbChpLGkuX19kYXRhX18sZi5pbmRleCxmLmdyb3VwKSkmJih2WysrRl09Uik7di5sZW5ndGg9RisxfX1mdW5jdGlvbiBFKEEpe2Zvcih2YXIgUD1BPGYuZHVyYXRpb24/Zi5lYXNlLmNhbGwobnVsbCxBL2YuZHVyYXRpb24pOihmLnRpbWVyLnJlc3RhcnQoQyksZi5zdGF0ZT1nMXQsMSksRj0tMSxqPXYubGVuZ3RoOysrRjxqOyl2W0ZdLmNhbGwoaSxQKTtmLnN0YXRlPT09ZzF0JiYoZi5vbi5jYWxsKCJlbmQiLGksaS5fX2RhdGFfXyxmLmluZGV4LGYuZ3JvdXApLEMoKSl9ZnVuY3Rpb24gQygpe2Yuc3RhdGU9SVUsZi50aW1lci5zdG9wKCksZGVsZXRlIHBbYV07Zm9yKHZhciBBIGluIHApcmV0dXJuO2RlbGV0ZSBpLl9fdHJhbnNpdGlvbn19ZnVuY3Rpb24gQmtlKGksYSl7dmFyIGY9aS5fX3RyYW5zaXRpb24scCx2LG09ITAsYjtpZihmKXthPWE9PW51bGw/bnVsbDphKyIiO2ZvcihiIGluIGYpe2lmKChwPWZbYl0pLm5hbWUhPT1hKXttPSExO2NvbnRpbnVlfXY9cC5zdGF0ZT5kMXQmJnAuc3RhdGU8ZzF0LHAuc3RhdGU9SVUscC50aW1lci5zdG9wKCkscC5vbi5jYWxsKHY/ImludGVycnVwdCI6ImNhbmNlbCIsaSxpLl9fZGF0YV9fLHAuaW5kZXgscC5ncm91cCksZGVsZXRlIGZbYl19bSYmZGVsZXRlIGkuX190cmFuc2l0aW9ufX1mdW5jdGlvbiBSa2UoaSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe0JrZSh0aGlzLGkpfSl9ZnVuY3Rpb24gamtlKGksYSl7dmFyIGYscDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdj1vMyh0aGlzLGkpLG09di50d2VlbjtpZihtIT09Zil7cD1mPW07Zm9yKHZhciBiPTAsRT1wLmxlbmd0aDtiPEU7KytiKWlmKHBbYl0ubmFtZT09PWEpe3A9cC5zbGljZSgpLHAuc3BsaWNlKGIsMSk7YnJlYWt9fXYudHdlZW49cH19ZnVuY3Rpb24gJGtlKGksYSxmKXt2YXIgcCx2O2lmKHR5cGVvZiBmIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbT1vMyh0aGlzLGkpLGI9bS50d2VlbjtpZihiIT09cCl7dj0ocD1iKS5zbGljZSgpO2Zvcih2YXIgRT17bmFtZTphLHZhbHVlOmZ9LEM9MCxBPXYubGVuZ3RoO0M8QTsrK0MpaWYodltDXS5uYW1lPT09YSl7dltDXT1FO2JyZWFrfUM9PT1BJiZ2LnB1c2goRSl9bS50d2Vlbj12fX1mdW5jdGlvbiB6a2UoaSxhKXt2YXIgZj10aGlzLl9pZDtpZihpKz0iIixhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgcD1Zdyh0aGlzLm5vZGUoKSxmKS50d2Vlbix2PTAsbT1wLmxlbmd0aCxiO3Y8bTsrK3YpaWYoKGI9cFt2XSkubmFtZT09PWkpcmV0dXJuIGIudmFsdWU7cmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuZWFjaCgoYT09bnVsbD9qa2U6JGtlKShmLGksYSkpfWZ1bmN0aW9uIGIxdChpLGEsZil7dmFyIHA9aS5faWQ7cmV0dXJuIGkuZWFjaChmdW5jdGlvbigpe3ZhciB2PW8zKHRoaXMscCk7KHYudmFsdWV8fCh2LnZhbHVlPXt9KSlbYV09Zi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxmdW5jdGlvbih2KXtyZXR1cm4gWXcodixwKS52YWx1ZVthXX19ZnVuY3Rpb24gQ010KGksYSl7dmFyIGY7cmV0dXJuKHR5cGVvZiBhPT0ibnVtYmVyIj9LdzphIGluc3RhbmNlb2YgQkU/X1U6KGY9QkUoYSkpPyhhPWYsX1UpOmdNdCkoaSxhKX1mdW5jdGlvbiBxa2UoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoaSl9fWZ1bmN0aW9uIEhrZShpKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCl9fWZ1bmN0aW9uIFZrZShpLGEsZil7dmFyIHAsdj1mKyIiLG07cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRBdHRyaWJ1dGUoaSk7cmV0dXJuIGI9PT12P251bGw6Yj09PXA/bTptPWEocD1iLGYpfX1mdW5jdGlvbiBHa2UoaSxhLGYpe3ZhciBwLHY9ZisiIixtO3JldHVybiBmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0QXR0cmlidXRlTlMoaS5zcGFjZSxpLmxvY2FsKTtyZXR1cm4gYj09PXY/bnVsbDpiPT09cD9tOm09YShwPWIsZil9fWZ1bmN0aW9uIFVrZShpLGEsZil7dmFyIHAsdixtO3JldHVybiBmdW5jdGlvbigpe3ZhciBiLEU9Zih0aGlzKSxDO3JldHVybiBFPT1udWxsP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoaSk6KGI9dGhpcy5nZXRBdHRyaWJ1dGUoaSksQz1FKyIiLGI9PT1DP251bGw6Yj09PXAmJkM9PT12P206KHY9QyxtPWEocD1iLEUpKSl9fWZ1bmN0aW9uIFdrZShpLGEsZil7dmFyIHAsdixtO3JldHVybiBmdW5jdGlvbigpe3ZhciBiLEU9Zih0aGlzKSxDO3JldHVybiBFPT1udWxsP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhpLnNwYWNlLGkubG9jYWwpOihiPXRoaXMuZ2V0QXR0cmlidXRlTlMoaS5zcGFjZSxpLmxvY2FsKSxDPUUrIiIsYj09PUM/bnVsbDpiPT09cCYmQz09PXY/bToodj1DLG09YShwPWIsRSkpKX19ZnVuY3Rpb24gS2tlKGksYSl7dmFyIGY9YlUoaSkscD1mPT09InRyYW5zZm9ybSI/U2tlOkNNdDtyZXR1cm4gdGhpcy5hdHRyVHdlZW4oaSx0eXBlb2YgYT09ImZ1bmN0aW9uIj8oZi5sb2NhbD9Xa2U6VWtlKShmLHAsYjF0KHRoaXMsImF0dHIuIitpLGEpKTphPT1udWxsPyhmLmxvY2FsP0hrZTpxa2UpKGYpOihmLmxvY2FsP0drZTpWa2UpKGYscCxhKSl9ZnVuY3Rpb24gWWtlKGksYSl7cmV0dXJuIGZ1bmN0aW9uKGYpe3RoaXMuc2V0QXR0cmlidXRlKGksYS5jYWxsKHRoaXMsZikpfX1mdW5jdGlvbiBYa2UoaSxhKXtyZXR1cm4gZnVuY3Rpb24oZil7dGhpcy5zZXRBdHRyaWJ1dGVOUyhpLnNwYWNlLGkubG9jYWwsYS5jYWxsKHRoaXMsZikpfX1mdW5jdGlvbiBRa2UoaSxhKXt2YXIgZixwO2Z1bmN0aW9uIHYoKXt2YXIgbT1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbSE9PXAmJihmPShwPW0pJiZYa2UoaSxtKSksZn1yZXR1cm4gdi5fdmFsdWU9YSx2fWZ1bmN0aW9uIFprZShpLGEpe3ZhciBmLHA7ZnVuY3Rpb24gdigpe3ZhciBtPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBtIT09cCYmKGY9KHA9bSkmJllrZShpLG0pKSxmfXJldHVybiB2Ll92YWx1ZT1hLHZ9ZnVuY3Rpb24gSmtlKGksYSl7dmFyIGY9ImF0dHIuIitpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4oZj10aGlzLnR3ZWVuKGYpKSYmZi5fdmFsdWU7aWYoYT09bnVsbClyZXR1cm4gdGhpcy50d2VlbihmLG51bGwpO2lmKHR5cGVvZiBhIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjt2YXIgcD1iVShpKTtyZXR1cm4gdGhpcy50d2VlbihmLChwLmxvY2FsP1FrZTpaa2UpKHAsYSkpfWZ1bmN0aW9uIHQ4ZShpLGEpe3JldHVybiBmdW5jdGlvbigpe3AxdCh0aGlzLGkpLmRlbGF5PSthLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gZThlKGksYSl7cmV0dXJuIGE9K2EsZnVuY3Rpb24oKXtwMXQodGhpcyxpKS5kZWxheT1hfX1mdW5jdGlvbiBuOGUoaSl7dmFyIGE9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCh0eXBlb2YgaT09ImZ1bmN0aW9uIj90OGU6ZThlKShhLGkpKTpZdyh0aGlzLm5vZGUoKSxhKS5kZWxheX1mdW5jdGlvbiByOGUoaSxhKXtyZXR1cm4gZnVuY3Rpb24oKXtvMyh0aGlzLGkpLmR1cmF0aW9uPSthLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gaThlKGksYSl7cmV0dXJuIGE9K2EsZnVuY3Rpb24oKXtvMyh0aGlzLGkpLmR1cmF0aW9uPWF9fWZ1bmN0aW9uIHM4ZShpKXt2YXIgYT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKHR5cGVvZiBpPT0iZnVuY3Rpb24iP3I4ZTppOGUpKGEsaSkpOll3KHRoaXMubm9kZSgpLGEpLmR1cmF0aW9ufWZ1bmN0aW9uIGE4ZShpLGEpe2lmKHR5cGVvZiBhIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtvMyh0aGlzLGkpLmVhc2U9YX19ZnVuY3Rpb24gbzhlKGkpe3ZhciBhPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChhOGUoYSxpKSk6WXcodGhpcy5ub2RlKCksYSkuZWFzZX1mdW5jdGlvbiBjOGUoaSxhKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZj1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZih0eXBlb2YgZiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7bzModGhpcyxpKS5lYXNlPWZ9fWZ1bmN0aW9uIHU4ZShpKXtpZih0eXBlb2YgaSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMuZWFjaChjOGUodGhpcy5faWQsaSkpfWZ1bmN0aW9uIGw4ZShpKXt0eXBlb2YgaSE9ImZ1bmN0aW9uIiYmKGk9JEx0KGkpKTtmb3IodmFyIGE9dGhpcy5fZ3JvdXBzLGY9YS5sZW5ndGgscD1uZXcgQXJyYXkoZiksdj0wO3Y8ZjsrK3YpZm9yKHZhciBtPWFbdl0sYj1tLmxlbmd0aCxFPXBbdl09W10sQyxBPTA7QTxiOysrQSkoQz1tW0FdKSYmaS5jYWxsKEMsQy5fX2RhdGFfXyxBLG0pJiZFLnB1c2goQyk7cmV0dXJuIG5ldyBiNShwLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9ZnVuY3Rpb24gaDhlKGkpe2lmKGkuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgYT10aGlzLl9ncm91cHMsZj1pLl9ncm91cHMscD1hLmxlbmd0aCx2PWYubGVuZ3RoLG09TWF0aC5taW4ocCx2KSxiPW5ldyBBcnJheShwKSxFPTA7RTxtOysrRSlmb3IodmFyIEM9YVtFXSxBPWZbRV0sUD1DLmxlbmd0aCxGPWJbRV09bmV3IEFycmF5KFApLGosUj0wO1I8UDsrK1IpKGo9Q1tSXXx8QVtSXSkmJihGW1JdPWopO2Zvcig7RTxwOysrRSliW0VdPWFbRV07cmV0dXJuIG5ldyBiNShiLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9ZnVuY3Rpb24gZjhlKGkpe3JldHVybihpKyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoZnVuY3Rpb24oYSl7dmFyIGY9YS5pbmRleE9mKCIuIik7cmV0dXJuIGY+PTAmJihhPWEuc2xpY2UoMCxmKSksIWF8fGE9PT0ic3RhcnQifSl9ZnVuY3Rpb24gZDhlKGksYSxmKXt2YXIgcCx2LG09ZjhlKGEpP3AxdDpvMztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYj1tKHRoaXMsaSksRT1iLm9uO0UhPT1wJiYodj0ocD1FKS5jb3B5KCkpLm9uKGEsZiksYi5vbj12fX1mdW5jdGlvbiBnOGUoaSxhKXt2YXIgZj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP1l3KHRoaXMubm9kZSgpLGYpLm9uLm9uKGkpOnRoaXMuZWFjaChkOGUoZixpLGEpKX1mdW5jdGlvbiBwOGUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgZiBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrZiE9PWkpcmV0dXJuO2EmJmEucmVtb3ZlQ2hpbGQodGhpcyl9fWZ1bmN0aW9uIGI4ZSgpe3JldHVybiB0aGlzLm9uKCJlbmQucmVtb3ZlIixwOGUodGhpcy5faWQpKX1mdW5jdGlvbiB2OGUoaSl7dmFyIGE9dGhpcy5fbmFtZSxmPXRoaXMuX2lkO3R5cGVvZiBpIT0iZnVuY3Rpb24iJiYoaT1RZnQoaSkpO2Zvcih2YXIgcD10aGlzLl9ncm91cHMsdj1wLmxlbmd0aCxtPW5ldyBBcnJheSh2KSxiPTA7Yjx2OysrYilmb3IodmFyIEU9cFtiXSxDPUUubGVuZ3RoLEE9bVtiXT1uZXcgQXJyYXkoQyksUCxGLGo9MDtqPEM7KytqKShQPUVbal0pJiYoRj1pLmNhbGwoUCxQLl9fZGF0YV9fLGosRSkpJiYoIl9fZGF0YV9fImluIFAmJihGLl9fZGF0YV9fPVAuX19kYXRhX18pLEFbal09RixPVShBW2pdLGEsZixqLEEsWXcoUCxmKSkpO3JldHVybiBuZXcgYjUobSx0aGlzLl9wYXJlbnRzLGEsZil9ZnVuY3Rpb24gdzhlKGkpe3ZhciBhPXRoaXMuX25hbWUsZj10aGlzLl9pZDt0eXBlb2YgaSE9ImZ1bmN0aW9uIiYmKGk9akx0KGkpKTtmb3IodmFyIHA9dGhpcy5fZ3JvdXBzLHY9cC5sZW5ndGgsbT1bXSxiPVtdLEU9MDtFPHY7KytFKWZvcih2YXIgQz1wW0VdLEE9Qy5sZW5ndGgsUCxGPTA7RjxBOysrRilpZihQPUNbRl0pe2Zvcih2YXIgaj1pLmNhbGwoUCxQLl9fZGF0YV9fLEYsQyksUixIPVl3KFAsZiksWT0wLHJ0PWoubGVuZ3RoO1k8cnQ7KytZKShSPWpbWV0pJiZPVShSLGEsZixZLGosSCk7bS5wdXNoKGopLGIucHVzaChQKX1yZXR1cm4gbmV3IGI1KG0sYixhLGYpfXZhciBtOGU9eU4ucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIHk4ZSgpe3JldHVybiBuZXcgbThlKHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiB4OGUoaSxhKXt2YXIgZixwLHY7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG09bUEodGhpcyxpKSxiPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGkpLG1BKHRoaXMsaSkpO3JldHVybiBtPT09Yj9udWxsOm09PT1mJiZiPT09cD92OnY9YShmPW0scD1iKX19ZnVuY3Rpb24gU010KGkpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoaSl9fWZ1bmN0aW9uIGs4ZShpLGEsZil7dmFyIHAsdj1mKyIiLG07cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGI9bUEodGhpcyxpKTtyZXR1cm4gYj09PXY/bnVsbDpiPT09cD9tOm09YShwPWIsZil9fWZ1bmN0aW9uIEU4ZShpLGEsZil7dmFyIHAsdixtO3JldHVybiBmdW5jdGlvbigpe3ZhciBiPW1BKHRoaXMsaSksRT1mKHRoaXMpLEM9RSsiIjtyZXR1cm4gRT09bnVsbCYmKEM9RT0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShpKSxtQSh0aGlzLGkpKSksYj09PUM/bnVsbDpiPT09cCYmQz09PXY/bToodj1DLG09YShwPWIsRSkpfX1mdW5jdGlvbiBUOGUoaSxhKXt2YXIgZixwLHYsbT0ic3R5bGUuIithLGI9ImVuZC4iK20sRTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgQz1vMyh0aGlzLGkpLEE9Qy5vbixQPUMudmFsdWVbbV09PW51bGw/RXx8KEU9U010KGEpKTp2b2lkIDA7KEEhPT1mfHx2IT09UCkmJihwPShmPUEpLmNvcHkoKSkub24oYix2PVApLEMub249cH19ZnVuY3Rpb24gXzhlKGksYSxmKXt2YXIgcD0oaSs9IiIpPT0idHJhbnNmb3JtIj9Da2U6Q010O3JldHVybiBhPT1udWxsP3RoaXMuc3R5bGVUd2VlbihpLHg4ZShpLHApKS5vbigiZW5kLnN0eWxlLiIraSxTTXQoaSkpOnR5cGVvZiBhPT0iZnVuY3Rpb24iP3RoaXMuc3R5bGVUd2VlbihpLEU4ZShpLHAsYjF0KHRoaXMsInN0eWxlLiIraSxhKSkpLmVhY2goVDhlKHRoaXMuX2lkLGkpKTp0aGlzLnN0eWxlVHdlZW4oaSxrOGUoaSxwLGEpLGYpLm9uKCJlbmQuc3R5bGUuIitpLG51bGwpfWZ1bmN0aW9uIEM4ZShpLGEsZil7cmV0dXJuIGZ1bmN0aW9uKHApe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoaSxhLmNhbGwodGhpcyxwKSxmKX19ZnVuY3Rpb24gUzhlKGksYSxmKXt2YXIgcCx2O2Z1bmN0aW9uIG0oKXt2YXIgYj1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gYiE9PXYmJihwPSh2PWIpJiZDOGUoaSxiLGYpKSxwfXJldHVybiBtLl92YWx1ZT1hLG19ZnVuY3Rpb24gQThlKGksYSxmKXt2YXIgcD0ic3R5bGUuIisoaSs9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4ocD10aGlzLnR3ZWVuKHApKSYmcC5fdmFsdWU7aWYoYT09bnVsbClyZXR1cm4gdGhpcy50d2VlbihwLG51bGwpO2lmKHR5cGVvZiBhIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihwLFM4ZShpLGEsZj8/IiIpKX1mdW5jdGlvbiBMOGUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1pfX1mdW5jdGlvbiBNOGUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9aSh0aGlzKTt0aGlzLnRleHRDb250ZW50PWE/PyIifX1mdW5jdGlvbiBEOGUoaSl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLHR5cGVvZiBpPT0iZnVuY3Rpb24iP004ZShiMXQodGhpcywidGV4dCIsaSkpOkw4ZShpPT1udWxsPyIiOmkrIiIpKX1mdW5jdGlvbiBJOGUoaSl7cmV0dXJuIGZ1bmN0aW9uKGEpe3RoaXMudGV4dENvbnRlbnQ9aS5jYWxsKHRoaXMsYSl9fWZ1bmN0aW9uIE84ZShpKXt2YXIgYSxmO2Z1bmN0aW9uIHAoKXt2YXIgdj1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gdiE9PWYmJihhPShmPXYpJiZJOGUodikpLGF9cmV0dXJuIHAuX3ZhbHVlPWkscH1mdW5jdGlvbiBOOGUoaSl7dmFyIGE9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4oYT10aGlzLnR3ZWVuKGEpKSYmYS5fdmFsdWU7aWYoaT09bnVsbClyZXR1cm4gdGhpcy50d2VlbihhLG51bGwpO2lmKHR5cGVvZiBpIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihhLE84ZShpKSl9ZnVuY3Rpb24gUDhlKCl7Zm9yKHZhciBpPXRoaXMuX25hbWUsYT10aGlzLl9pZCxmPUFNdCgpLHA9dGhpcy5fZ3JvdXBzLHY9cC5sZW5ndGgsbT0wO208djsrK20pZm9yKHZhciBiPXBbbV0sRT1iLmxlbmd0aCxDLEE9MDtBPEU7KytBKWlmKEM9YltBXSl7dmFyIFA9WXcoQyxhKTtPVShDLGksZixBLGIse3RpbWU6UC50aW1lK1AuZGVsYXkrUC5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOlAuZHVyYXRpb24sZWFzZTpQLmVhc2V9KX1yZXR1cm4gbmV3IGI1KHAsdGhpcy5fcGFyZW50cyxpLGYpfWZ1bmN0aW9uIEY4ZSgpe3ZhciBpLGEsZj10aGlzLHA9Zi5faWQsdj1mLnNpemUoKTtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obSxiKXt2YXIgRT17dmFsdWU6Yn0sQz17dmFsdWU6ZnVuY3Rpb24oKXstLXY9PT0wJiZtKCl9fTtmLmVhY2goZnVuY3Rpb24oKXt2YXIgQT1vMyh0aGlzLHApLFA9QS5vbjtQIT09aSYmKGE9KGk9UCkuY29weSgpLGEuXy5jYW5jZWwucHVzaChFKSxhLl8uaW50ZXJydXB0LnB1c2goRSksYS5fLmVuZC5wdXNoKEMpKSxBLm9uPWF9KSx2PT09MCYmbSgpfSl9dmFyIEI4ZT0wO2Z1bmN0aW9uIGI1KGksYSxmLHApe3RoaXMuX2dyb3Vwcz1pLHRoaXMuX3BhcmVudHM9YSx0aGlzLl9uYW1lPWYsdGhpcy5faWQ9cH1mdW5jdGlvbiBBTXQoKXtyZXR1cm4rK0I4ZX12YXIgdjU9eU4ucHJvdG90eXBlO2I1LnByb3RvdHlwZT17Y29uc3RydWN0b3I6YjUsc2VsZWN0OnY4ZSxzZWxlY3RBbGw6dzhlLHNlbGVjdENoaWxkOnY1LnNlbGVjdENoaWxkLHNlbGVjdENoaWxkcmVuOnY1LnNlbGVjdENoaWxkcmVuLGZpbHRlcjpsOGUsbWVyZ2U6aDhlLHNlbGVjdGlvbjp5OGUsdHJhbnNpdGlvbjpQOGUsY2FsbDp2NS5jYWxsLG5vZGVzOnY1Lm5vZGVzLG5vZGU6djUubm9kZSxzaXplOnY1LnNpemUsZW1wdHk6djUuZW1wdHksZWFjaDp2NS5lYWNoLG9uOmc4ZSxhdHRyOktrZSxhdHRyVHdlZW46SmtlLHN0eWxlOl84ZSxzdHlsZVR3ZWVuOkE4ZSx0ZXh0OkQ4ZSx0ZXh0VHdlZW46TjhlLHJlbW92ZTpiOGUsdHdlZW46emtlLGRlbGF5Om44ZSxkdXJhdGlvbjpzOGUsZWFzZTpvOGUsZWFzZVZhcnlpbmc6dThlLGVuZDpGOGUsW1N5bWJvbC5pdGVyYXRvcl06djVbU3ltYm9sLml0ZXJhdG9yXX07ZnVuY3Rpb24gUjhlKGkpe3JldHVybigoaSo9Mik8PTE/aSppKmk6KGktPTIpKmkqaSsyKS8yfXZhciBqOGU9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOlI4ZX07ZnVuY3Rpb24gJDhlKGksYSl7Zm9yKHZhciBmOyEoZj1pLl9fdHJhbnNpdGlvbil8fCEoZj1mW2FdKTspaWYoIShpPWkucGFyZW50Tm9kZSkpdGhyb3cgbmV3IEVycm9yKGB0cmFuc2l0aW9uICR7YX0gbm90IGZvdW5kYCk7cmV0dXJuIGZ9ZnVuY3Rpb24gejhlKGkpe3ZhciBhLGY7aSBpbnN0YW5jZW9mIGI1PyhhPWkuX2lkLGk9aS5fbmFtZSk6KGE9QU10KCksKGY9ajhlKS50aW1lPWgxdCgpLGk9aT09bnVsbD9udWxsOmkrIiIpO2Zvcih2YXIgcD10aGlzLl9ncm91cHMsdj1wLmxlbmd0aCxtPTA7bTx2OysrbSlmb3IodmFyIGI9cFttXSxFPWIubGVuZ3RoLEMsQT0wO0E8RTsrK0EpKEM9YltBXSkmJk9VKEMsaSxhLEEsYixmfHwkOGUoQyxhKSk7cmV0dXJuIG5ldyBiNShwLHRoaXMuX3BhcmVudHMsaSxhKX15Ti5wcm90b3R5cGUuaW50ZXJydXB0PVJrZSx5Ti5wcm90b3R5cGUudHJhbnNpdGlvbj16OGU7Y29uc3QgdjF0PU1hdGguUEksdzF0PTIqdjF0LHpFPTFlLTYscThlPXcxdC16RTtmdW5jdGlvbiBtMXQoKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiB5MXQoKXtyZXR1cm4gbmV3IG0xdH1tMXQucHJvdG90eXBlPXkxdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm0xdCxtb3ZlVG86ZnVuY3Rpb24oaSxhKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2kpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K2EpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl94MSE9PW51bGwmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl8rPSJaIil9LGxpbmVUbzpmdW5jdGlvbihpLGEpe3RoaXMuXys9IkwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rYSl9LHF1YWRyYXRpY0N1cnZlVG86ZnVuY3Rpb24oaSxhLGYscCl7dGhpcy5fKz0iUSIrICtpKyIsIisgK2ErIiwiKyh0aGlzLl94MT0rZikrIiwiKyh0aGlzLl95MT0rcCl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24oaSxhLGYscCx2LG0pe3RoaXMuXys9IkMiKyAraSsiLCIrICthKyIsIisgK2YrIiwiKyArcCsiLCIrKHRoaXMuX3gxPSt2KSsiLCIrKHRoaXMuX3kxPSttKX0sYXJjVG86ZnVuY3Rpb24oaSxhLGYscCx2KXtpPStpLGE9K2EsZj0rZixwPStwLHY9K3Y7dmFyIG09dGhpcy5feDEsYj10aGlzLl95MSxFPWYtaSxDPXAtYSxBPW0taSxQPWItYSxGPUEqQStQKlA7aWYodjwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK3YpO2lmKHRoaXMuX3gxPT09bnVsbCl0aGlzLl8rPSJNIisodGhpcy5feDE9aSkrIiwiKyh0aGlzLl95MT1hKTtlbHNlIGlmKEY+ekUpaWYoIShNYXRoLmFicyhQKkUtQypBKT56RSl8fCF2KXRoaXMuXys9IkwiKyh0aGlzLl94MT1pKSsiLCIrKHRoaXMuX3kxPWEpO2Vsc2V7dmFyIGo9Zi1tLFI9cC1iLEg9RSpFK0MqQyxZPWoqaitSKlIscnQ9TWF0aC5zcXJ0KEgpLEo9TWF0aC5zcXJ0KEYpLGl0PXYqTWF0aC50YW4oKHYxdC1NYXRoLmFjb3MoKEgrRi1ZKS8oMipydCpKKSkpLzIpLGZ0PWl0L0osVHQ9aXQvcnQ7TWF0aC5hYnMoZnQtMSk+ekUmJih0aGlzLl8rPSJMIisoaStmdCpBKSsiLCIrKGErZnQqUCkpLHRoaXMuXys9IkEiK3YrIiwiK3YrIiwwLDAsIisgKyhQKmo+QSpSKSsiLCIrKHRoaXMuX3gxPWkrVHQqRSkrIiwiKyh0aGlzLl95MT1hK1R0KkMpfX0sYXJjOmZ1bmN0aW9uKGksYSxmLHAsdixtKXtpPStpLGE9K2EsZj0rZixtPSEhbTt2YXIgYj1mKk1hdGguY29zKHApLEU9ZipNYXRoLnNpbihwKSxDPWkrYixBPWErRSxQPTFebSxGPW0/cC12OnYtcDtpZihmPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrZik7dGhpcy5feDE9PT1udWxsP3RoaXMuXys9Ik0iK0MrIiwiK0E6KE1hdGguYWJzKHRoaXMuX3gxLUMpPnpFfHxNYXRoLmFicyh0aGlzLl95MS1BKT56RSkmJih0aGlzLl8rPSJMIitDKyIsIitBKSxmJiYoRjwwJiYoRj1GJXcxdCt3MXQpLEY+cThlP3RoaXMuXys9IkEiK2YrIiwiK2YrIiwwLDEsIitQKyIsIisoaS1iKSsiLCIrKGEtRSkrIkEiK2YrIiwiK2YrIiwwLDEsIitQKyIsIisodGhpcy5feDE9QykrIiwiKyh0aGlzLl95MT1BKTpGPnpFJiYodGhpcy5fKz0iQSIrZisiLCIrZisiLDAsIisgKyhGPj12MXQpKyIsIitQKyIsIisodGhpcy5feDE9aStmKk1hdGguY29zKHYpKSsiLCIrKHRoaXMuX3kxPWErZipNYXRoLnNpbih2KSkpKX0scmVjdDpmdW5jdGlvbihpLGEsZixwKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2kpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K2EpKyJoIisgK2YrInYiKyArcCsiaCIrLWYrIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTtmdW5jdGlvbiBIOGUoaSl7aWYoIWkub2spdGhyb3cgbmV3IEVycm9yKGkuc3RhdHVzKyIgIitpLnN0YXR1c1RleHQpO3JldHVybiBpLnRleHQoKX1mdW5jdGlvbiBWOGUoaSxhKXtyZXR1cm4gZmV0Y2goaSxhKS50aGVuKEg4ZSl9ZnVuY3Rpb24gRzhlKGkpe3JldHVybihhLGYpPT5WOGUoYSxmKS50aGVuKHA9Pm5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcocCxpKSl9dmFyIFU4ZT1HOGUoImltYWdlL3N2Zyt4bWwiKTtmdW5jdGlvbiBXOGUoaSl7cmV0dXJuIE1hdGguYWJzKGk9TWF0aC5yb3VuZChpKSk+PTFlMjE/aS50b0xvY2FsZVN0cmluZygiZW4iKS5yZXBsYWNlKC8sL2csIiIpOmkudG9TdHJpbmcoMTApfWZ1bmN0aW9uIE5VKGksYSl7aWYoKGY9KGk9YT9pLnRvRXhwb25lbnRpYWwoYS0xKTppLnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciBmLHA9aS5zbGljZSgwLGYpO3JldHVybltwLmxlbmd0aD4xP3BbMF0rcC5zbGljZSgyKTpwLCtpLnNsaWNlKGYrMSldfWZ1bmN0aW9uIEVBKGkpe3JldHVybiBpPU5VKE1hdGguYWJzKGkpKSxpP2lbMV06TmFOfWZ1bmN0aW9uIEs4ZShpLGEpe3JldHVybiBmdW5jdGlvbihmLHApe2Zvcih2YXIgdj1mLmxlbmd0aCxtPVtdLGI9MCxFPWlbMF0sQz0wO3Y+MCYmRT4wJiYoQytFKzE+cCYmKEU9TWF0aC5tYXgoMSxwLUMpKSxtLnB1c2goZi5zdWJzdHJpbmcodi09RSx2K0UpKSwhKChDKz1FKzEpPnApKTspRT1pW2I9KGIrMSklaS5sZW5ndGhdO3JldHVybiBtLnJldmVyc2UoKS5qb2luKGEpfX1mdW5jdGlvbiBZOGUoaSl7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24oZil7cmV0dXJuIGlbK2ZdfSl9fXZhciBYOGU9L14oPzooLik/KFs8Pj1eXSkpPyhbK1wtKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyh+KT8oW2EteiVdKT8kL2k7ZnVuY3Rpb24gUFUoaSl7aWYoIShhPVg4ZS5leGVjKGkpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK2kpO3ZhciBhO3JldHVybiBuZXcgeDF0KHtmaWxsOmFbMV0sYWxpZ246YVsyXSxzaWduOmFbM10sc3ltYm9sOmFbNF0semVybzphWzVdLHdpZHRoOmFbNl0sY29tbWE6YVs3XSxwcmVjaXNpb246YVs4XSYmYVs4XS5zbGljZSgxKSx0cmltOmFbOV0sdHlwZTphWzEwXX0pfVBVLnByb3RvdHlwZT14MXQucHJvdG90eXBlO2Z1bmN0aW9uIHgxdChpKXt0aGlzLmZpbGw9aS5maWxsPT09dm9pZCAwPyIgIjppLmZpbGwrIiIsdGhpcy5hbGlnbj1pLmFsaWduPT09dm9pZCAwPyI+IjppLmFsaWduKyIiLHRoaXMuc2lnbj1pLnNpZ249PT12b2lkIDA/Ii0iOmkuc2lnbisiIix0aGlzLnN5bWJvbD1pLnN5bWJvbD09PXZvaWQgMD8iIjppLnN5bWJvbCsiIix0aGlzLnplcm89ISFpLnplcm8sdGhpcy53aWR0aD1pLndpZHRoPT09dm9pZCAwP3ZvaWQgMDoraS53aWR0aCx0aGlzLmNvbW1hPSEhaS5jb21tYSx0aGlzLnByZWNpc2lvbj1pLnByZWNpc2lvbj09PXZvaWQgMD92b2lkIDA6K2kucHJlY2lzaW9uLHRoaXMudHJpbT0hIWkudHJpbSx0aGlzLnR5cGU9aS50eXBlPT09dm9pZCAwPyIiOmkudHlwZSsiIn14MXQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKHRoaXMud2lkdGg9PT12b2lkIDA/IiI6TWF0aC5tYXgoMSx0aGlzLndpZHRofDApKSsodGhpcy5jb21tYT8iLCI6IiIpKyh0aGlzLnByZWNpc2lvbj09PXZvaWQgMD8iIjoiLiIrTWF0aC5tYXgoMCx0aGlzLnByZWNpc2lvbnwwKSkrKHRoaXMudHJpbT8ifiI6IiIpK3RoaXMudHlwZX07ZnVuY3Rpb24gUThlKGkpe3Q6Zm9yKHZhciBhPWkubGVuZ3RoLGY9MSxwPS0xLHY7ZjxhOysrZilzd2l0Y2goaVtmXSl7Y2FzZSIuIjpwPXY9ZjticmVhaztjYXNlIjAiOnA9PT0wJiYocD1mKSx2PWY7YnJlYWs7ZGVmYXVsdDppZighK2lbZl0pYnJlYWsgdDtwPjAmJihwPTApO2JyZWFrfXJldHVybiBwPjA/aS5zbGljZSgwLHApK2kuc2xpY2UodisxKTppfXZhciBMTXQ7ZnVuY3Rpb24gWjhlKGksYSl7dmFyIGY9TlUoaSxhKTtpZighZilyZXR1cm4gaSsiIjt2YXIgcD1mWzBdLHY9ZlsxXSxtPXYtKExNdD1NYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3Iodi8zKSkpKjMpKzEsYj1wLmxlbmd0aDtyZXR1cm4gbT09PWI/cDptPmI/cCtuZXcgQXJyYXkobS1iKzEpLmpvaW4oIjAiKTptPjA/cC5zbGljZSgwLG0pKyIuIitwLnNsaWNlKG0pOiIwLiIrbmV3IEFycmF5KDEtbSkuam9pbigiMCIpK05VKGksTWF0aC5tYXgoMCxhK20tMSkpWzBdfWZ1bmN0aW9uIE1NdChpLGEpe3ZhciBmPU5VKGksYSk7aWYoIWYpcmV0dXJuIGkrIiI7dmFyIHA9ZlswXSx2PWZbMV07cmV0dXJuIHY8MD8iMC4iK25ldyBBcnJheSgtdikuam9pbigiMCIpK3A6cC5sZW5ndGg+disxP3Auc2xpY2UoMCx2KzEpKyIuIitwLnNsaWNlKHYrMSk6cCtuZXcgQXJyYXkodi1wLmxlbmd0aCsyKS5qb2luKCIwIil9Y29uc3QgRE10PXsiJSI6KGksYSk9PihpKjEwMCkudG9GaXhlZChhKSxiOmk9Pk1hdGgucm91bmQoaSkudG9TdHJpbmcoMiksYzppPT5pKyIiLGQ6VzhlLGU6KGksYSk9PmkudG9FeHBvbmVudGlhbChhKSxmOihpLGEpPT5pLnRvRml4ZWQoYSksZzooaSxhKT0+aS50b1ByZWNpc2lvbihhKSxvOmk9Pk1hdGgucm91bmQoaSkudG9TdHJpbmcoOCkscDooaSxhKT0+TU10KGkqMTAwLGEpLHI6TU10LHM6WjhlLFg6aT0+TWF0aC5yb3VuZChpKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSx4Omk9Pk1hdGgucm91bmQoaSkudG9TdHJpbmcoMTYpfTtmdW5jdGlvbiBJTXQoaSl7cmV0dXJuIGl9dmFyIE9NdD1BcnJheS5wcm90b3R5cGUubWFwLE5NdD1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIsK1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl07ZnVuY3Rpb24gSjhlKGkpe3ZhciBhPWkuZ3JvdXBpbmc9PT12b2lkIDB8fGkudGhvdXNhbmRzPT09dm9pZCAwP0lNdDpLOGUoT010LmNhbGwoaS5ncm91cGluZyxOdW1iZXIpLGkudGhvdXNhbmRzKyIiKSxmPWkuY3VycmVuY3k9PT12b2lkIDA/IiI6aS5jdXJyZW5jeVswXSsiIixwPWkuY3VycmVuY3k9PT12b2lkIDA/IiI6aS5jdXJyZW5jeVsxXSsiIix2PWkuZGVjaW1hbD09PXZvaWQgMD8iLiI6aS5kZWNpbWFsKyIiLG09aS5udW1lcmFscz09PXZvaWQgMD9JTXQ6WThlKE9NdC5jYWxsKGkubnVtZXJhbHMsU3RyaW5nKSksYj1pLnBlcmNlbnQ9PT12b2lkIDA/IiUiOmkucGVyY2VudCsiIixFPWkubWludXM9PT12b2lkIDA/IuKIkiI6aS5taW51cysiIixDPWkubmFuPT09dm9pZCAwPyJOYU4iOmkubmFuKyIiO2Z1bmN0aW9uIEEoRil7Rj1QVShGKTt2YXIgaj1GLmZpbGwsUj1GLmFsaWduLEg9Ri5zaWduLFk9Ri5zeW1ib2wscnQ9Ri56ZXJvLEo9Ri53aWR0aCxpdD1GLmNvbW1hLGZ0PUYucHJlY2lzaW9uLFR0PUYudHJpbSxrdD1GLnR5cGU7a3Q9PT0ibiI/KGl0PSEwLGt0PSJnIik6RE10W2t0XXx8KGZ0PT09dm9pZCAwJiYoZnQ9MTIpLFR0PSEwLGt0PSJnIiksKHJ0fHxqPT09IjAiJiZSPT09Ij0iKSYmKHJ0PSEwLGo9IjAiLFI9Ij0iKTt2YXIgbXQ9WT09PSIkIj9mOlk9PT0iIyImJi9bYm94WF0vLnRlc3Qoa3QpPyIwIitrdC50b0xvd2VyQ2FzZSgpOiIiLGN0PVk9PT0iJCI/cDovWyVwXS8udGVzdChrdCk/YjoiIix5dD1ETXRba3RdLHN0PS9bZGVmZ3BycyVdLy50ZXN0KGt0KTtmdD1mdD09PXZvaWQgMD82Oi9bZ3Byc10vLnRlc3Qoa3QpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsZnQpKTpNYXRoLm1heCgwLE1hdGgubWluKDIwLGZ0KSk7ZnVuY3Rpb24geHQoaHQpe3ZhciBkdD1tdCxDdD1jdCx0dCxQdCxwdDtpZihrdD09PSJjIilDdD15dChodCkrQ3QsaHQ9IiI7ZWxzZXtodD0raHQ7dmFyIEZ0PWh0PDB8fDEvaHQ8MDtpZihodD1pc05hTihodCk/Qzp5dChNYXRoLmFicyhodCksZnQpLFR0JiYoaHQ9UThlKGh0KSksRnQmJitodD09MCYmSCE9PSIrIiYmKEZ0PSExKSxkdD0oRnQ/SD09PSIoIj9IOkU6SD09PSItInx8SD09PSIoIj8iIjpIKStkdCxDdD0oa3Q9PT0icyI/Tk10WzgrTE10LzNdOiIiKStDdCsoRnQmJkg9PT0iKCI/IikiOiIiKSxzdCl7Zm9yKHR0PS0xLFB0PWh0Lmxlbmd0aDsrK3R0PFB0OylpZihwdD1odC5jaGFyQ29kZUF0KHR0KSw0OD5wdHx8cHQ+NTcpe0N0PShwdD09PTQ2P3YraHQuc2xpY2UodHQrMSk6aHQuc2xpY2UodHQpKStDdCxodD1odC5zbGljZSgwLHR0KTticmVha319fWl0JiYhcnQmJihodD1hKGh0LDEvMCkpO3ZhciBYPWR0Lmxlbmd0aCtodC5sZW5ndGgrQ3QubGVuZ3RoLFJ0PVg8Sj9uZXcgQXJyYXkoSi1YKzEpLmpvaW4oaik6IiI7c3dpdGNoKGl0JiZydCYmKGh0PWEoUnQraHQsUnQubGVuZ3RoP0otQ3QubGVuZ3RoOjEvMCksUnQ9IiIpLFIpe2Nhc2UiPCI6aHQ9ZHQraHQrQ3QrUnQ7YnJlYWs7Y2FzZSI9IjpodD1kdCtSdCtodCtDdDticmVhaztjYXNlIl4iOmh0PVJ0LnNsaWNlKDAsWD1SdC5sZW5ndGg+PjEpK2R0K2h0K0N0K1J0LnNsaWNlKFgpO2JyZWFrO2RlZmF1bHQ6aHQ9UnQrZHQraHQrQ3Q7YnJlYWt9cmV0dXJuIG0oaHQpfXJldHVybiB4dC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBGKyIifSx4dH1mdW5jdGlvbiBQKEYsail7dmFyIFI9QSgoRj1QVShGKSxGLnR5cGU9ImYiLEYpKSxIPU1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihFQShqKS8zKSkpKjMsWT1NYXRoLnBvdygxMCwtSCkscnQ9Tk10WzgrSC8zXTtyZXR1cm4gZnVuY3Rpb24oSil7cmV0dXJuIFIoWSpKKStydH19cmV0dXJue2Zvcm1hdDpBLGZvcm1hdFByZWZpeDpQfX12YXIgRlUsUE10LEZNdDt0N2Uoe3Rob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdfSk7ZnVuY3Rpb24gdDdlKGkpe3JldHVybiBGVT1KOGUoaSksUE10PUZVLmZvcm1hdCxGTXQ9RlUuZm9ybWF0UHJlZml4LEZVfWZ1bmN0aW9uIGU3ZShpKXtyZXR1cm4gTWF0aC5tYXgoMCwtRUEoTWF0aC5hYnMoaSkpKX1mdW5jdGlvbiBuN2UoaSxhKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoRUEoYSkvMykpKSozLUVBKE1hdGguYWJzKGkpKSl9ZnVuY3Rpb24gcjdlKGksYSl7cmV0dXJuIGk9TWF0aC5hYnMoaSksYT1NYXRoLmFicyhhKS1pLE1hdGgubWF4KDAsRUEoYSktRUEoaSkpKzF9ZnVuY3Rpb24gazF0KGksYSl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6dGhpcy5yYW5nZShpKTticmVhaztkZWZhdWx0OnRoaXMucmFuZ2UoYSkuZG9tYWluKGkpO2JyZWFrfXJldHVybiB0aGlzfWNvbnN0IEJNdD1TeW1ib2woImltcGxpY2l0Iik7ZnVuY3Rpb24gRTF0KCl7dmFyIGk9bmV3IExMdCxhPVtdLGY9W10scD1CTXQ7ZnVuY3Rpb24gdihtKXtsZXQgYj1pLmdldChtKTtpZihiPT09dm9pZCAwKXtpZihwIT09Qk10KXJldHVybiBwO2kuc2V0KG0sYj1hLnB1c2gobSktMSl9cmV0dXJuIGZbYiVmLmxlbmd0aF19cmV0dXJuIHYuZG9tYWluPWZ1bmN0aW9uKG0pe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBhLnNsaWNlKCk7YT1bXSxpPW5ldyBMTHQ7Zm9yKGNvbnN0IGIgb2YgbSlpLmhhcyhiKXx8aS5zZXQoYixhLnB1c2goYiktMSk7cmV0dXJuIHZ9LHYucmFuZ2U9ZnVuY3Rpb24obSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9QXJyYXkuZnJvbShtKSx2KTpmLnNsaWNlKCl9LHYudW5rbm93bj1mdW5jdGlvbihtKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD1tLHYpOnB9LHYuY29weT1mdW5jdGlvbigpe3JldHVybiBFMXQoYSxmKS51bmtub3duKHApfSxrMXQuYXBwbHkodixhcmd1bWVudHMpLHZ9ZnVuY3Rpb24gaTdlKGkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBpfX1mdW5jdGlvbiBzN2UoaSl7cmV0dXJuK2l9dmFyIFJNdD1bMCwxXTtmdW5jdGlvbiBUQShpKXtyZXR1cm4gaX1mdW5jdGlvbiBUMXQoaSxhKXtyZXR1cm4oYS09aT0raSk/ZnVuY3Rpb24oZil7cmV0dXJuKGYtaSkvYX06aTdlKGlzTmFOKGEpP05hTjouNSl9ZnVuY3Rpb24gYTdlKGksYSl7dmFyIGY7cmV0dXJuIGk+YSYmKGY9aSxpPWEsYT1mKSxmdW5jdGlvbihwKXtyZXR1cm4gTWF0aC5tYXgoaSxNYXRoLm1pbihhLHApKX19ZnVuY3Rpb24gbzdlKGksYSxmKXt2YXIgcD1pWzBdLHY9aVsxXSxtPWFbMF0sYj1hWzFdO3JldHVybiB2PHA/KHA9VDF0KHYscCksbT1mKGIsbSkpOihwPVQxdChwLHYpLG09ZihtLGIpKSxmdW5jdGlvbihFKXtyZXR1cm4gbShwKEUpKX19ZnVuY3Rpb24gYzdlKGksYSxmKXt2YXIgcD1NYXRoLm1pbihpLmxlbmd0aCxhLmxlbmd0aCktMSx2PW5ldyBBcnJheShwKSxtPW5ldyBBcnJheShwKSxiPS0xO2ZvcihpW3BdPGlbMF0mJihpPWkuc2xpY2UoKS5yZXZlcnNlKCksYT1hLnNsaWNlKCkucmV2ZXJzZSgpKTsrK2I8cDspdltiXT1UMXQoaVtiXSxpW2IrMV0pLG1bYl09ZihhW2JdLGFbYisxXSk7cmV0dXJuIGZ1bmN0aW9uKEUpe3ZhciBDPW42ZShpLEUsMSxwKS0xO3JldHVybiBtW0NdKHZbQ10oRSkpfX1mdW5jdGlvbiBqTXQoaSxhKXtyZXR1cm4gYS5kb21haW4oaS5kb21haW4oKSkucmFuZ2UoaS5yYW5nZSgpKS5pbnRlcnBvbGF0ZShpLmludGVycG9sYXRlKCkpLmNsYW1wKGkuY2xhbXAoKSkudW5rbm93bihpLnVua25vd24oKSl9ZnVuY3Rpb24gdTdlKCl7dmFyIGk9Uk10LGE9Uk10LGY9dTF0LHAsdixtLGI9VEEsRSxDLEE7ZnVuY3Rpb24gUCgpe3ZhciBqPU1hdGgubWluKGkubGVuZ3RoLGEubGVuZ3RoKTtyZXR1cm4gYiE9PVRBJiYoYj1hN2UoaVswXSxpW2otMV0pKSxFPWo+Mj9jN2U6bzdlLEM9QT1udWxsLEZ9ZnVuY3Rpb24gRihqKXtyZXR1cm4gaj09bnVsbHx8aXNOYU4oaj0raik/bTooQ3x8KEM9RShpLm1hcChwKSxhLGYpKSkocChiKGopKSl9cmV0dXJuIEYuaW52ZXJ0PWZ1bmN0aW9uKGope3JldHVybiBiKHYoKEF8fChBPUUoYSxpLm1hcChwKSxLdykpKShqKSkpfSxGLmRvbWFpbj1mdW5jdGlvbihqKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1BcnJheS5mcm9tKGosczdlKSxQKCkpOmkuc2xpY2UoKX0sRi5yYW5nZT1mdW5jdGlvbihqKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1BcnJheS5mcm9tKGopLFAoKSk6YS5zbGljZSgpfSxGLnJhbmdlUm91bmQ9ZnVuY3Rpb24oail7cmV0dXJuIGE9QXJyYXkuZnJvbShqKSxmPUVrZSxQKCl9LEYuY2xhbXA9ZnVuY3Rpb24oail7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9aj8hMDpUQSxQKCkpOmIhPT1UQX0sRi5pbnRlcnBvbGF0ZT1mdW5jdGlvbihqKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1qLFAoKSk6Zn0sRi51bmtub3duPWZ1bmN0aW9uKGope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPWosRik6bX0sZnVuY3Rpb24oaixSKXtyZXR1cm4gcD1qLHY9UixQKCl9fWZ1bmN0aW9uICRNdCgpe3JldHVybiB1N2UoKShUQSxUQSl9ZnVuY3Rpb24gbDdlKGksYSxmLHApe3ZhciB2PVdmdChpLGEsZiksbTtzd2l0Y2gocD1QVShwPz8iLGYiKSxwLnR5cGUpe2Nhc2UicyI6e3ZhciBiPU1hdGgubWF4KE1hdGguYWJzKGkpLE1hdGguYWJzKGEpKTtyZXR1cm4gcC5wcmVjaXNpb249PW51bGwmJiFpc05hTihtPW43ZSh2LGIpKSYmKHAucHJlY2lzaW9uPW0pLEZNdChwLGIpfWNhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOntwLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKG09cjdlKHYsTWF0aC5tYXgoTWF0aC5hYnMoaSksTWF0aC5hYnMoYSkpKSkmJihwLnByZWNpc2lvbj1tLShwLnR5cGU9PT0iZSIpKTticmVha31jYXNlImYiOmNhc2UiJSI6e3AucHJlY2lzaW9uPT1udWxsJiYhaXNOYU4obT1lN2UodikpJiYocC5wcmVjaXNpb249bS0ocC50eXBlPT09IiUiKSoyKTticmVha319cmV0dXJuIFBNdChwKX1mdW5jdGlvbiBoN2UoaSl7dmFyIGE9aS5kb21haW47cmV0dXJuIGkudGlja3M9ZnVuY3Rpb24oZil7dmFyIHA9YSgpO3JldHVybiBhNmUocFswXSxwW3AubGVuZ3RoLTFdLGY/PzEwKX0saS50aWNrRm9ybWF0PWZ1bmN0aW9uKGYscCl7dmFyIHY9YSgpO3JldHVybiBsN2UodlswXSx2W3YubGVuZ3RoLTFdLGY/PzEwLHApfSxpLm5pY2U9ZnVuY3Rpb24oZil7Zj09bnVsbCYmKGY9MTApO3ZhciBwPWEoKSx2PTAsbT1wLmxlbmd0aC0xLGI9cFt2XSxFPXBbbV0sQyxBLFA9MTA7Zm9yKEU8YiYmKEE9YixiPUUsRT1BLEE9dix2PW0sbT1BKTtQLS0gPjA7KXtpZihBPURMdChiLEUsZiksQT09PUMpcmV0dXJuIHBbdl09YixwW21dPUUsYShwKTtpZihBPjApYj1NYXRoLmZsb29yKGIvQSkqQSxFPU1hdGguY2VpbChFL0EpKkE7ZWxzZSBpZihBPDApYj1NYXRoLmNlaWwoYipBKS9BLEU9TWF0aC5mbG9vcihFKkEpL0E7ZWxzZSBicmVhaztDPUF9cmV0dXJuIGl9LGl9ZnVuY3Rpb24gQlUoKXt2YXIgaT0kTXQoKTtyZXR1cm4gaS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGpNdChpLEJVKCkpfSxrMXQuYXBwbHkoaSxhcmd1bWVudHMpLGg3ZShpKX1mdW5jdGlvbiBmN2UoaSxhKXtpPWkuc2xpY2UoKTt2YXIgZj0wLHA9aS5sZW5ndGgtMSx2PWlbZl0sbT1pW3BdLGI7cmV0dXJuIG08diYmKGI9ZixmPXAscD1iLGI9dix2PW0sbT1iKSxpW2ZdPWEuZmxvb3IodiksaVtwXT1hLmNlaWwobSksaX12YXIgXzF0PW5ldyBEYXRlLEMxdD1uZXcgRGF0ZTtmdW5jdGlvbiByZyhpLGEsZixwKXtmdW5jdGlvbiB2KG0pe3JldHVybiBpKG09YXJndW1lbnRzLmxlbmd0aD09PTA/bmV3IERhdGU6bmV3IERhdGUoK20pKSxtfXJldHVybiB2LmZsb29yPWZ1bmN0aW9uKG0pe3JldHVybiBpKG09bmV3IERhdGUoK20pKSxtfSx2LmNlaWw9ZnVuY3Rpb24obSl7cmV0dXJuIGkobT1uZXcgRGF0ZShtLTEpKSxhKG0sMSksaShtKSxtfSx2LnJvdW5kPWZ1bmN0aW9uKG0pe3ZhciBiPXYobSksRT12LmNlaWwobSk7cmV0dXJuIG0tYjxFLW0/YjpFfSx2Lm9mZnNldD1mdW5jdGlvbihtLGIpe3JldHVybiBhKG09bmV3IERhdGUoK20pLGI9PW51bGw/MTpNYXRoLmZsb29yKGIpKSxtfSx2LnJhbmdlPWZ1bmN0aW9uKG0sYixFKXt2YXIgQz1bXSxBO2lmKG09di5jZWlsKG0pLEU9RT09bnVsbD8xOk1hdGguZmxvb3IoRSksIShtPGIpfHwhKEU+MCkpcmV0dXJuIEM7ZG8gQy5wdXNoKEE9bmV3IERhdGUoK20pKSxhKG0sRSksaShtKTt3aGlsZShBPG0mJm08Yik7cmV0dXJuIEN9LHYuZmlsdGVyPWZ1bmN0aW9uKG0pe3JldHVybiByZyhmdW5jdGlvbihiKXtpZihiPj1iKWZvcig7aShiKSwhbShiKTspYi5zZXRUaW1lKGItMSl9LGZ1bmN0aW9uKGIsRSl7aWYoYj49YilpZihFPDApZm9yKDsrK0U8PTA7KWZvcig7YShiLC0xKSwhbShiKTspO2Vsc2UgZm9yKDstLUU+PTA7KWZvcig7YShiLDEpLCFtKGIpOyk7fSl9LGYmJih2LmNvdW50PWZ1bmN0aW9uKG0sYil7cmV0dXJuIF8xdC5zZXRUaW1lKCttKSxDMXQuc2V0VGltZSgrYiksaShfMXQpLGkoQzF0KSxNYXRoLmZsb29yKGYoXzF0LEMxdCkpfSx2LmV2ZXJ5PWZ1bmN0aW9uKG0pe3JldHVybiBtPU1hdGguZmxvb3IobSksIWlzRmluaXRlKG0pfHwhKG0+MCk/bnVsbDptPjE/di5maWx0ZXIocD9mdW5jdGlvbihiKXtyZXR1cm4gcChiKSVtPT09MH06ZnVuY3Rpb24oYil7cmV0dXJuIHYuY291bnQoMCxiKSVtPT09MH0pOnZ9KSx2fXZhciBSVT1yZyhmdW5jdGlvbigpe30sZnVuY3Rpb24oaSxhKXtpLnNldFRpbWUoK2krYSl9LGZ1bmN0aW9uKGksYSl7cmV0dXJuIGEtaX0pO1JVLmV2ZXJ5PWZ1bmN0aW9uKGkpe3JldHVybiBpPU1hdGguZmxvb3IoaSksIWlzRmluaXRlKGkpfHwhKGk+MCk/bnVsbDppPjE/cmcoZnVuY3Rpb24oYSl7YS5zZXRUaW1lKE1hdGguZmxvb3IoYS9pKSppKX0sZnVuY3Rpb24oYSxmKXthLnNldFRpbWUoK2ErZippKX0sZnVuY3Rpb24oYSxmKXtyZXR1cm4oZi1hKS9pfSk6UlV9O2NvbnN0IGQ3ZT1SVTtSVS5yYW5nZTtjb25zdCB3NT0xZTMsYzM9dzUqNjAscUU9YzMqNjAsSEU9cUUqMjQsUzF0PUhFKjcsek10PUhFKjMwLEExdD1IRSozNjU7dmFyIHFNdD1yZyhmdW5jdGlvbihpKXtpLnNldFRpbWUoaS1pLmdldE1pbGxpc2Vjb25kcygpKX0sZnVuY3Rpb24oaSxhKXtpLnNldFRpbWUoK2krYSp3NSl9LGZ1bmN0aW9uKGksYSl7cmV0dXJuKGEtaSkvdzV9LGZ1bmN0aW9uKGkpe3JldHVybiBpLmdldFVUQ1NlY29uZHMoKX0pO2NvbnN0IExOPXFNdDtxTXQucmFuZ2U7dmFyIEhNdD1yZyhmdW5jdGlvbihpKXtpLnNldFRpbWUoaS1pLmdldE1pbGxpc2Vjb25kcygpLWkuZ2V0U2Vjb25kcygpKnc1KX0sZnVuY3Rpb24oaSxhKXtpLnNldFRpbWUoK2krYSpjMyl9LGZ1bmN0aW9uKGksYSl7cmV0dXJuKGEtaSkvYzN9LGZ1bmN0aW9uKGkpe3JldHVybiBpLmdldE1pbnV0ZXMoKX0pO2NvbnN0IGpVPUhNdDtITXQucmFuZ2U7dmFyIFZNdD1yZyhmdW5jdGlvbihpKXtpLnNldFRpbWUoaS1pLmdldE1pbGxpc2Vjb25kcygpLWkuZ2V0U2Vjb25kcygpKnc1LWkuZ2V0TWludXRlcygpKmMzKX0sZnVuY3Rpb24oaSxhKXtpLnNldFRpbWUoK2krYSpxRSl9LGZ1bmN0aW9uKGksYSl7cmV0dXJuKGEtaSkvcUV9LGZ1bmN0aW9uKGkpe3JldHVybiBpLmdldEhvdXJzKCl9KTtjb25zdCAkVT1WTXQ7Vk10LnJhbmdlO3ZhciBHTXQ9cmcoaT0+aS5zZXRIb3VycygwLDAsMCwwKSwoaSxhKT0+aS5zZXREYXRlKGkuZ2V0RGF0ZSgpK2EpLChpLGEpPT4oYS1pLShhLmdldFRpbWV6b25lT2Zmc2V0KCktaS5nZXRUaW1lem9uZU9mZnNldCgpKSpjMykvSEUsaT0+aS5nZXREYXRlKCktMSk7Y29uc3QgX0E9R010O0dNdC5yYW5nZTtmdW5jdGlvbiBWRShpKXtyZXR1cm4gcmcoZnVuY3Rpb24oYSl7YS5zZXREYXRlKGEuZ2V0RGF0ZSgpLShhLmdldERheSgpKzctaSklNyksYS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oYSxmKXthLnNldERhdGUoYS5nZXREYXRlKCkrZio3KX0sZnVuY3Rpb24oYSxmKXtyZXR1cm4oZi1hLShmLmdldFRpbWV6b25lT2Zmc2V0KCktYS5nZXRUaW1lem9uZU9mZnNldCgpKSpjMykvUzF0fSl9dmFyIE1OPVZFKDApLEROPVZFKDEpLFVNdD1WRSgyKSxXTXQ9VkUoMyksR0U9VkUoNCksS010PVZFKDUpLFlNdD1WRSg2KTtNTi5yYW5nZSxETi5yYW5nZSxVTXQucmFuZ2UsV010LnJhbmdlLEdFLnJhbmdlLEtNdC5yYW5nZSxZTXQucmFuZ2U7dmFyIFhNdD1yZyhmdW5jdGlvbihpKXtpLnNldERhdGUoMSksaS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oaSxhKXtpLnNldE1vbnRoKGkuZ2V0TW9udGgoKSthKX0sZnVuY3Rpb24oaSxhKXtyZXR1cm4gYS5nZXRNb250aCgpLWkuZ2V0TW9udGgoKSsoYS5nZXRGdWxsWWVhcigpLWkuZ2V0RnVsbFllYXIoKSkqMTJ9LGZ1bmN0aW9uKGkpe3JldHVybiBpLmdldE1vbnRoKCl9KTtjb25zdCB6VT1YTXQ7WE10LnJhbmdlO3ZhciBMMXQ9cmcoZnVuY3Rpb24oaSl7aS5zZXRNb250aCgwLDEpLGkuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGksYSl7aS5zZXRGdWxsWWVhcihpLmdldEZ1bGxZZWFyKCkrYSl9LGZ1bmN0aW9uKGksYSl7cmV0dXJuIGEuZ2V0RnVsbFllYXIoKS1pLmdldEZ1bGxZZWFyKCl9LGZ1bmN0aW9uKGkpe3JldHVybiBpLmdldEZ1bGxZZWFyKCl9KTtMMXQuZXZlcnk9ZnVuY3Rpb24oaSl7cmV0dXJuIWlzRmluaXRlKGk9TWF0aC5mbG9vcihpKSl8fCEoaT4wKT9udWxsOnJnKGZ1bmN0aW9uKGEpe2Euc2V0RnVsbFllYXIoTWF0aC5mbG9vcihhLmdldEZ1bGxZZWFyKCkvaSkqaSksYS5zZXRNb250aCgwLDEpLGEuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGEsZil7YS5zZXRGdWxsWWVhcihhLmdldEZ1bGxZZWFyKCkrZippKX0pfTtjb25zdCBVRT1MMXQ7TDF0LnJhbmdlO3ZhciBRTXQ9cmcoZnVuY3Rpb24oaSl7aS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oaSxhKXtpLnNldFVUQ0RhdGUoaS5nZXRVVENEYXRlKCkrYSl9LGZ1bmN0aW9uKGksYSl7cmV0dXJuKGEtaSkvSEV9LGZ1bmN0aW9uKGkpe3JldHVybiBpLmdldFVUQ0RhdGUoKS0xfSk7Y29uc3QgWk10PVFNdDtRTXQucmFuZ2U7ZnVuY3Rpb24gV0UoaSl7cmV0dXJuIHJnKGZ1bmN0aW9uKGEpe2Euc2V0VVRDRGF0ZShhLmdldFVUQ0RhdGUoKS0oYS5nZXRVVENEYXkoKSs3LWkpJTcpLGEuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGEsZil7YS5zZXRVVENEYXRlKGEuZ2V0VVRDRGF0ZSgpK2YqNyl9LGZ1bmN0aW9uKGEsZil7cmV0dXJuKGYtYSkvUzF0fSl9dmFyIEpNdD1XRSgwKSxxVT1XRSgxKSxnN2U9V0UoMikscDdlPVdFKDMpLENBPVdFKDQpLGI3ZT1XRSg1KSx2N2U9V0UoNik7Sk10LnJhbmdlLHFVLnJhbmdlLGc3ZS5yYW5nZSxwN2UucmFuZ2UsQ0EucmFuZ2UsYjdlLnJhbmdlLHY3ZS5yYW5nZTt2YXIgTTF0PXJnKGZ1bmN0aW9uKGkpe2kuc2V0VVRDTW9udGgoMCwxKSxpLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihpLGEpe2kuc2V0VVRDRnVsbFllYXIoaS5nZXRVVENGdWxsWWVhcigpK2EpfSxmdW5jdGlvbihpLGEpe3JldHVybiBhLmdldFVUQ0Z1bGxZZWFyKCktaS5nZXRVVENGdWxsWWVhcigpfSxmdW5jdGlvbihpKXtyZXR1cm4gaS5nZXRVVENGdWxsWWVhcigpfSk7TTF0LmV2ZXJ5PWZ1bmN0aW9uKGkpe3JldHVybiFpc0Zpbml0ZShpPU1hdGguZmxvb3IoaSkpfHwhKGk+MCk/bnVsbDpyZyhmdW5jdGlvbihhKXthLnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IoYS5nZXRVVENGdWxsWWVhcigpL2kpKmkpLGEuc2V0VVRDTW9udGgoMCwxKSxhLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihhLGYpe2Euc2V0VVRDRnVsbFllYXIoYS5nZXRVVENGdWxsWWVhcigpK2YqaSl9KX07Y29uc3QgSU49TTF0O00xdC5yYW5nZTtmdW5jdGlvbiB3N2UoaSxhLGYscCx2LG0pe2NvbnN0IGI9W1tMTiwxLHc1XSxbTE4sNSw1Knc1XSxbTE4sMTUsMTUqdzVdLFtMTiwzMCwzMCp3NV0sW20sMSxjM10sW20sNSw1KmMzXSxbbSwxNSwxNSpjM10sW20sMzAsMzAqYzNdLFt2LDEscUVdLFt2LDMsMypxRV0sW3YsNiw2KnFFXSxbdiwxMiwxMipxRV0sW3AsMSxIRV0sW3AsMiwyKkhFXSxbZiwxLFMxdF0sW2EsMSx6TXRdLFthLDMsMyp6TXRdLFtpLDEsQTF0XV07ZnVuY3Rpb24gRShBLFAsRil7Y29uc3Qgaj1QPEE7aiYmKFtBLFBdPVtQLEFdKTtjb25zdCBSPUYmJnR5cGVvZiBGLnJhbmdlPT0iZnVuY3Rpb24iP0Y6QyhBLFAsRiksSD1SP1IucmFuZ2UoQSwrUCsxKTpbXTtyZXR1cm4gaj9ILnJldmVyc2UoKTpIfWZ1bmN0aW9uIEMoQSxQLEYpe2NvbnN0IGo9TWF0aC5hYnMoUC1BKS9GLFI9SGZ0KChbLCxydF0pPT5ydCkucmlnaHQoYixqKTtpZihSPT09Yi5sZW5ndGgpcmV0dXJuIGkuZXZlcnkoV2Z0KEEvQTF0LFAvQTF0LEYpKTtpZihSPT09MClyZXR1cm4gZDdlLmV2ZXJ5KE1hdGgubWF4KFdmdChBLFAsRiksMSkpO2NvbnN0W0gsWV09YltqL2JbUi0xXVsyXTxiW1JdWzJdL2o/Ui0xOlJdO3JldHVybiBILmV2ZXJ5KFkpfXJldHVybltFLENdfWNvbnN0W203ZSx5N2VdPXc3ZShVRSx6VSxNTixfQSwkVSxqVSk7ZnVuY3Rpb24gRDF0KGkpe2lmKDA8PWkueSYmaS55PDEwMCl7dmFyIGE9bmV3IERhdGUoLTEsaS5tLGkuZCxpLkgsaS5NLGkuUyxpLkwpO3JldHVybiBhLnNldEZ1bGxZZWFyKGkueSksYX1yZXR1cm4gbmV3IERhdGUoaS55LGkubSxpLmQsaS5ILGkuTSxpLlMsaS5MKX1mdW5jdGlvbiBJMXQoaSl7aWYoMDw9aS55JiZpLnk8MTAwKXt2YXIgYT1uZXcgRGF0ZShEYXRlLlVUQygtMSxpLm0saS5kLGkuSCxpLk0saS5TLGkuTCkpO3JldHVybiBhLnNldFVUQ0Z1bGxZZWFyKGkueSksYX1yZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoaS55LGkubSxpLmQsaS5ILGkuTSxpLlMsaS5MKSl9ZnVuY3Rpb24gT04oaSxhLGYpe3JldHVybnt5OmksbTphLGQ6ZixIOjAsTTowLFM6MCxMOjB9fWZ1bmN0aW9uIHg3ZShpKXt2YXIgYT1pLmRhdGVUaW1lLGY9aS5kYXRlLHA9aS50aW1lLHY9aS5wZXJpb2RzLG09aS5kYXlzLGI9aS5zaG9ydERheXMsRT1pLm1vbnRocyxDPWkuc2hvcnRNb250aHMsQT1OTih2KSxQPVBOKHYpLEY9Tk4obSksaj1QTihtKSxSPU5OKGIpLEg9UE4oYiksWT1OTihFKSxydD1QTihFKSxKPU5OKEMpLGl0PVBOKEMpLGZ0PXthOkZ0LEE6WCxiOlJ0LEI6QnQsYzpudWxsLGQ6c0R0LGU6c0R0LGY6VjdlLGc6dEVlLEc6bkVlLEg6ejdlLEk6cTdlLGo6SDdlLEw6YUR0LG06RzdlLE06VTdlLHA6dnQscTpPdCxROmZEdCxzOmREdCxTOlc3ZSx1Oks3ZSxVOlk3ZSxWOlg3ZSx3OlE3ZSxXOlo3ZSx4Om51bGwsWDpudWxsLHk6SjdlLFk6ZUVlLFo6ckVlLCIlIjpoRHR9LFR0PXthOlZ0LEE6cWUsYjpfbixCOlRlLGM6bnVsbCxkOmNEdCxlOmNEdCxmOm9FZSxnOnZFZSxHOm1FZSxIOmlFZSxJOnNFZSxqOmFFZSxMOnVEdCxtOmNFZSxNOnVFZSxwOlduLHE6QWUsUTpmRHQsczpkRHQsUzpsRWUsdTpoRWUsVTpmRWUsVjpkRWUsdzpnRWUsVzpwRWUseDpudWxsLFg6bnVsbCx5OmJFZSxZOndFZSxaOnlFZSwiJSI6aER0fSxrdD17YTp4dCxBOmh0LGI6ZHQsQjpDdCxjOnR0LGQ6ckR0LGU6ckR0LGY6QjdlLGc6bkR0LEc6ZUR0LEg6aUR0LEk6aUR0LGo6TzdlLEw6RjdlLG06STdlLE06TjdlLHA6c3QscTpEN2UsUTpqN2UsczokN2UsUzpQN2UsdTpDN2UsVTpTN2UsVjpBN2UsdzpfN2UsVzpMN2UseDpQdCxYOnB0LHk6bkR0LFk6ZUR0LFo6TTdlLCIlIjpSN2V9O2Z0Lng9bXQoZixmdCksZnQuWD1tdChwLGZ0KSxmdC5jPW10KGEsZnQpLFR0Lng9bXQoZixUdCksVHQuWD1tdChwLFR0KSxUdC5jPW10KGEsVHQpO2Z1bmN0aW9uIG10KG5lLGtlKXtyZXR1cm4gZnVuY3Rpb24oVmUpe3ZhciBFZT1bXSxIZT0tMSxDZT0wLCRlPW5lLmxlbmd0aCx5ZSxmbixZdDtmb3IoVmUgaW5zdGFuY2VvZiBEYXRlfHwoVmU9bmV3IERhdGUoK1ZlKSk7KytIZTwkZTspbmUuY2hhckNvZGVBdChIZSk9PT0zNyYmKEVlLnB1c2gobmUuc2xpY2UoQ2UsSGUpKSwoZm49dER0W3llPW5lLmNoYXJBdCgrK0hlKV0pIT1udWxsP3llPW5lLmNoYXJBdCgrK0hlKTpmbj15ZT09PSJlIj8iICI6IjAiLChZdD1rZVt5ZV0pJiYoeWU9WXQoVmUsZm4pKSxFZS5wdXNoKHllKSxDZT1IZSsxKTtyZXR1cm4gRWUucHVzaChuZS5zbGljZShDZSxIZSkpLEVlLmpvaW4oIiIpfX1mdW5jdGlvbiBjdChuZSxrZSl7cmV0dXJuIGZ1bmN0aW9uKFZlKXt2YXIgRWU9T04oMTkwMCx2b2lkIDAsMSksSGU9eXQoRWUsbmUsVmUrPSIiLDApLENlLCRlO2lmKEhlIT1WZS5sZW5ndGgpcmV0dXJuIG51bGw7aWYoIlEiaW4gRWUpcmV0dXJuIG5ldyBEYXRlKEVlLlEpO2lmKCJzImluIEVlKXJldHVybiBuZXcgRGF0ZShFZS5zKjFlMysoIkwiaW4gRWU/RWUuTDowKSk7aWYoa2UmJiEoIloiaW4gRWUpJiYoRWUuWj0wKSwicCJpbiBFZSYmKEVlLkg9RWUuSCUxMitFZS5wKjEyKSxFZS5tPT09dm9pZCAwJiYoRWUubT0icSJpbiBFZT9FZS5xOjApLCJWImluIEVlKXtpZihFZS5WPDF8fEVlLlY+NTMpcmV0dXJuIG51bGw7InciaW4gRWV8fChFZS53PTEpLCJaImluIEVlPyhDZT1JMXQoT04oRWUueSwwLDEpKSwkZT1DZS5nZXRVVENEYXkoKSxDZT0kZT40fHwkZT09PTA/cVUuY2VpbChDZSk6cVUoQ2UpLENlPVpNdC5vZmZzZXQoQ2UsKEVlLlYtMSkqNyksRWUueT1DZS5nZXRVVENGdWxsWWVhcigpLEVlLm09Q2UuZ2V0VVRDTW9udGgoKSxFZS5kPUNlLmdldFVUQ0RhdGUoKSsoRWUudys2KSU3KTooQ2U9RDF0KE9OKEVlLnksMCwxKSksJGU9Q2UuZ2V0RGF5KCksQ2U9JGU+NHx8JGU9PT0wP0ROLmNlaWwoQ2UpOkROKENlKSxDZT1fQS5vZmZzZXQoQ2UsKEVlLlYtMSkqNyksRWUueT1DZS5nZXRGdWxsWWVhcigpLEVlLm09Q2UuZ2V0TW9udGgoKSxFZS5kPUNlLmdldERhdGUoKSsoRWUudys2KSU3KX1lbHNlKCJXImluIEVlfHwiVSJpbiBFZSkmJigidyJpbiBFZXx8KEVlLnc9InUiaW4gRWU/RWUudSU3OiJXImluIEVlPzE6MCksJGU9IloiaW4gRWU/STF0KE9OKEVlLnksMCwxKSkuZ2V0VVRDRGF5KCk6RDF0KE9OKEVlLnksMCwxKSkuZ2V0RGF5KCksRWUubT0wLEVlLmQ9IlciaW4gRWU/KEVlLncrNiklNytFZS5XKjctKCRlKzUpJTc6RWUudytFZS5VKjctKCRlKzYpJTcpO3JldHVybiJaImluIEVlPyhFZS5IKz1FZS5aLzEwMHwwLEVlLk0rPUVlLlolMTAwLEkxdChFZSkpOkQxdChFZSl9fWZ1bmN0aW9uIHl0KG5lLGtlLFZlLEVlKXtmb3IodmFyIEhlPTAsQ2U9a2UubGVuZ3RoLCRlPVZlLmxlbmd0aCx5ZSxmbjtIZTxDZTspe2lmKEVlPj0kZSlyZXR1cm4tMTtpZih5ZT1rZS5jaGFyQ29kZUF0KEhlKyspLHllPT09Mzcpe2lmKHllPWtlLmNoYXJBdChIZSsrKSxmbj1rdFt5ZSBpbiB0RHQ/a2UuY2hhckF0KEhlKyspOnllXSwhZm58fChFZT1mbihuZSxWZSxFZSkpPDApcmV0dXJuLTF9ZWxzZSBpZih5ZSE9VmUuY2hhckNvZGVBdChFZSsrKSlyZXR1cm4tMX1yZXR1cm4gRWV9ZnVuY3Rpb24gc3QobmUsa2UsVmUpe3ZhciBFZT1BLmV4ZWMoa2Uuc2xpY2UoVmUpKTtyZXR1cm4gRWU/KG5lLnA9UC5nZXQoRWVbMF0udG9Mb3dlckNhc2UoKSksVmUrRWVbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB4dChuZSxrZSxWZSl7dmFyIEVlPVIuZXhlYyhrZS5zbGljZShWZSkpO3JldHVybiBFZT8obmUudz1ILmdldChFZVswXS50b0xvd2VyQ2FzZSgpKSxWZStFZVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGh0KG5lLGtlLFZlKXt2YXIgRWU9Ri5leGVjKGtlLnNsaWNlKFZlKSk7cmV0dXJuIEVlPyhuZS53PWouZ2V0KEVlWzBdLnRvTG93ZXJDYXNlKCkpLFZlK0VlWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZHQobmUsa2UsVmUpe3ZhciBFZT1KLmV4ZWMoa2Uuc2xpY2UoVmUpKTtyZXR1cm4gRWU/KG5lLm09aXQuZ2V0KEVlWzBdLnRvTG93ZXJDYXNlKCkpLFZlK0VlWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQ3QobmUsa2UsVmUpe3ZhciBFZT1ZLmV4ZWMoa2Uuc2xpY2UoVmUpKTtyZXR1cm4gRWU/KG5lLm09cnQuZ2V0KEVlWzBdLnRvTG93ZXJDYXNlKCkpLFZlK0VlWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdHQobmUsa2UsVmUpe3JldHVybiB5dChuZSxhLGtlLFZlKX1mdW5jdGlvbiBQdChuZSxrZSxWZSl7cmV0dXJuIHl0KG5lLGYsa2UsVmUpfWZ1bmN0aW9uIHB0KG5lLGtlLFZlKXtyZXR1cm4geXQobmUscCxrZSxWZSl9ZnVuY3Rpb24gRnQobmUpe3JldHVybiBiW25lLmdldERheSgpXX1mdW5jdGlvbiBYKG5lKXtyZXR1cm4gbVtuZS5nZXREYXkoKV19ZnVuY3Rpb24gUnQobmUpe3JldHVybiBDW25lLmdldE1vbnRoKCldfWZ1bmN0aW9uIEJ0KG5lKXtyZXR1cm4gRVtuZS5nZXRNb250aCgpXX1mdW5jdGlvbiB2dChuZSl7cmV0dXJuIHZbKyhuZS5nZXRIb3VycygpPj0xMildfWZ1bmN0aW9uIE90KG5lKXtyZXR1cm4gMSt+fihuZS5nZXRNb250aCgpLzMpfWZ1bmN0aW9uIFZ0KG5lKXtyZXR1cm4gYltuZS5nZXRVVENEYXkoKV19ZnVuY3Rpb24gcWUobmUpe3JldHVybiBtW25lLmdldFVUQ0RheSgpXX1mdW5jdGlvbiBfbihuZSl7cmV0dXJuIENbbmUuZ2V0VVRDTW9udGgoKV19ZnVuY3Rpb24gVGUobmUpe3JldHVybiBFW25lLmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIFduKG5lKXtyZXR1cm4gdlsrKG5lLmdldFVUQ0hvdXJzKCk+PTEyKV19ZnVuY3Rpb24gQWUobmUpe3JldHVybiAxK35+KG5lLmdldFVUQ01vbnRoKCkvMyl9cmV0dXJue2Zvcm1hdDpmdW5jdGlvbihuZSl7dmFyIGtlPW10KG5lKz0iIixmdCk7cmV0dXJuIGtlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIG5lfSxrZX0scGFyc2U6ZnVuY3Rpb24obmUpe3ZhciBrZT1jdChuZSs9IiIsITEpO3JldHVybiBrZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBuZX0sa2V9LHV0Y0Zvcm1hdDpmdW5jdGlvbihuZSl7dmFyIGtlPW10KG5lKz0iIixUdCk7cmV0dXJuIGtlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIG5lfSxrZX0sdXRjUGFyc2U6ZnVuY3Rpb24obmUpe3ZhciBrZT1jdChuZSs9IiIsITApO3JldHVybiBrZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBuZX0sa2V9fX12YXIgdER0PXsiLSI6IiIsXzoiICIsMDoiMCJ9LFExPS9eXHMqXGQrLyxrN2U9L14lLyxFN2U9L1tcXF4kKis/fFtcXSgpLnt9XS9nO2Z1bmN0aW9uIEZjKGksYSxmKXt2YXIgcD1pPDA/Ii0iOiIiLHY9KHA/LWk6aSkrIiIsbT12Lmxlbmd0aDtyZXR1cm4gcCsobTxmP25ldyBBcnJheShmLW0rMSkuam9pbihhKSt2OnYpfWZ1bmN0aW9uIFQ3ZShpKXtyZXR1cm4gaS5yZXBsYWNlKEU3ZSwiXFwkJiIpfWZ1bmN0aW9uIE5OKGkpe3JldHVybiBuZXcgUmVnRXhwKCJeKD86IitpLm1hcChUN2UpLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBQTihpKXtyZXR1cm4gbmV3IE1hcChpLm1hcCgoYSxmKT0+W2EudG9Mb3dlckNhc2UoKSxmXSkpfWZ1bmN0aW9uIF83ZShpLGEsZil7dmFyIHA9UTEuZXhlYyhhLnNsaWNlKGYsZisxKSk7cmV0dXJuIHA/KGkudz0rcFswXSxmK3BbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBDN2UoaSxhLGYpe3ZhciBwPVExLmV4ZWMoYS5zbGljZShmLGYrMSkpO3JldHVybiBwPyhpLnU9K3BbMF0sZitwWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUzdlKGksYSxmKXt2YXIgcD1RMS5leGVjKGEuc2xpY2UoZixmKzIpKTtyZXR1cm4gcD8oaS5VPStwWzBdLGYrcFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEE3ZShpLGEsZil7dmFyIHA9UTEuZXhlYyhhLnNsaWNlKGYsZisyKSk7cmV0dXJuIHA/KGkuVj0rcFswXSxmK3BbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBMN2UoaSxhLGYpe3ZhciBwPVExLmV4ZWMoYS5zbGljZShmLGYrMikpO3JldHVybiBwPyhpLlc9K3BbMF0sZitwWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZUR0KGksYSxmKXt2YXIgcD1RMS5leGVjKGEuc2xpY2UoZixmKzQpKTtyZXR1cm4gcD8oaS55PStwWzBdLGYrcFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG5EdChpLGEsZil7dmFyIHA9UTEuZXhlYyhhLnNsaWNlKGYsZisyKSk7cmV0dXJuIHA/KGkueT0rcFswXSsoK3BbMF0+Njg/MTkwMDoyZTMpLGYrcFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE03ZShpLGEsZil7dmFyIHA9L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWMoYS5zbGljZShmLGYrNikpO3JldHVybiBwPyhpLlo9cFsxXT8wOi0ocFsyXSsocFszXXx8IjAwIikpLGYrcFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEQ3ZShpLGEsZil7dmFyIHA9UTEuZXhlYyhhLnNsaWNlKGYsZisxKSk7cmV0dXJuIHA/KGkucT1wWzBdKjMtMyxmK3BbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBJN2UoaSxhLGYpe3ZhciBwPVExLmV4ZWMoYS5zbGljZShmLGYrMikpO3JldHVybiBwPyhpLm09cFswXS0xLGYrcFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHJEdChpLGEsZil7dmFyIHA9UTEuZXhlYyhhLnNsaWNlKGYsZisyKSk7cmV0dXJuIHA/KGkuZD0rcFswXSxmK3BbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBPN2UoaSxhLGYpe3ZhciBwPVExLmV4ZWMoYS5zbGljZShmLGYrMykpO3JldHVybiBwPyhpLm09MCxpLmQ9K3BbMF0sZitwWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gaUR0KGksYSxmKXt2YXIgcD1RMS5leGVjKGEuc2xpY2UoZixmKzIpKTtyZXR1cm4gcD8oaS5IPStwWzBdLGYrcFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE43ZShpLGEsZil7dmFyIHA9UTEuZXhlYyhhLnNsaWNlKGYsZisyKSk7cmV0dXJuIHA/KGkuTT0rcFswXSxmK3BbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBQN2UoaSxhLGYpe3ZhciBwPVExLmV4ZWMoYS5zbGljZShmLGYrMikpO3JldHVybiBwPyhpLlM9K3BbMF0sZitwWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRjdlKGksYSxmKXt2YXIgcD1RMS5leGVjKGEuc2xpY2UoZixmKzMpKTtyZXR1cm4gcD8oaS5MPStwWzBdLGYrcFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEI3ZShpLGEsZil7dmFyIHA9UTEuZXhlYyhhLnNsaWNlKGYsZis2KSk7cmV0dXJuIHA/KGkuTD1NYXRoLmZsb29yKHBbMF0vMWUzKSxmK3BbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBSN2UoaSxhLGYpe3ZhciBwPWs3ZS5leGVjKGEuc2xpY2UoZixmKzEpKTtyZXR1cm4gcD9mK3BbMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIGo3ZShpLGEsZil7dmFyIHA9UTEuZXhlYyhhLnNsaWNlKGYpKTtyZXR1cm4gcD8oaS5RPStwWzBdLGYrcFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uICQ3ZShpLGEsZil7dmFyIHA9UTEuZXhlYyhhLnNsaWNlKGYpKTtyZXR1cm4gcD8oaS5zPStwWzBdLGYrcFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHNEdChpLGEpe3JldHVybiBGYyhpLmdldERhdGUoKSxhLDIpfWZ1bmN0aW9uIHo3ZShpLGEpe3JldHVybiBGYyhpLmdldEhvdXJzKCksYSwyKX1mdW5jdGlvbiBxN2UoaSxhKXtyZXR1cm4gRmMoaS5nZXRIb3VycygpJTEyfHwxMixhLDIpfWZ1bmN0aW9uIEg3ZShpLGEpe3JldHVybiBGYygxK19BLmNvdW50KFVFKGkpLGkpLGEsMyl9ZnVuY3Rpb24gYUR0KGksYSl7cmV0dXJuIEZjKGkuZ2V0TWlsbGlzZWNvbmRzKCksYSwzKX1mdW5jdGlvbiBWN2UoaSxhKXtyZXR1cm4gYUR0KGksYSkrIjAwMCJ9ZnVuY3Rpb24gRzdlKGksYSl7cmV0dXJuIEZjKGkuZ2V0TW9udGgoKSsxLGEsMil9ZnVuY3Rpb24gVTdlKGksYSl7cmV0dXJuIEZjKGkuZ2V0TWludXRlcygpLGEsMil9ZnVuY3Rpb24gVzdlKGksYSl7cmV0dXJuIEZjKGkuZ2V0U2Vjb25kcygpLGEsMil9ZnVuY3Rpb24gSzdlKGkpe3ZhciBhPWkuZ2V0RGF5KCk7cmV0dXJuIGE9PT0wPzc6YX1mdW5jdGlvbiBZN2UoaSxhKXtyZXR1cm4gRmMoTU4uY291bnQoVUUoaSktMSxpKSxhLDIpfWZ1bmN0aW9uIG9EdChpKXt2YXIgYT1pLmdldERheSgpO3JldHVybiBhPj00fHxhPT09MD9HRShpKTpHRS5jZWlsKGkpfWZ1bmN0aW9uIFg3ZShpLGEpe3JldHVybiBpPW9EdChpKSxGYyhHRS5jb3VudChVRShpKSxpKSsoVUUoaSkuZ2V0RGF5KCk9PT00KSxhLDIpfWZ1bmN0aW9uIFE3ZShpKXtyZXR1cm4gaS5nZXREYXkoKX1mdW5jdGlvbiBaN2UoaSxhKXtyZXR1cm4gRmMoRE4uY291bnQoVUUoaSktMSxpKSxhLDIpfWZ1bmN0aW9uIEo3ZShpLGEpe3JldHVybiBGYyhpLmdldEZ1bGxZZWFyKCklMTAwLGEsMil9ZnVuY3Rpb24gdEVlKGksYSl7cmV0dXJuIGk9b0R0KGkpLEZjKGkuZ2V0RnVsbFllYXIoKSUxMDAsYSwyKX1mdW5jdGlvbiBlRWUoaSxhKXtyZXR1cm4gRmMoaS5nZXRGdWxsWWVhcigpJTFlNCxhLDQpfWZ1bmN0aW9uIG5FZShpLGEpe3ZhciBmPWkuZ2V0RGF5KCk7cmV0dXJuIGk9Zj49NHx8Zj09PTA/R0UoaSk6R0UuY2VpbChpKSxGYyhpLmdldEZ1bGxZZWFyKCklMWU0LGEsNCl9ZnVuY3Rpb24gckVlKGkpe3ZhciBhPWkuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4oYT4wPyItIjooYSo9LTEsIisiKSkrRmMoYS82MHwwLCIwIiwyKStGYyhhJTYwLCIwIiwyKX1mdW5jdGlvbiBjRHQoaSxhKXtyZXR1cm4gRmMoaS5nZXRVVENEYXRlKCksYSwyKX1mdW5jdGlvbiBpRWUoaSxhKXtyZXR1cm4gRmMoaS5nZXRVVENIb3VycygpLGEsMil9ZnVuY3Rpb24gc0VlKGksYSl7cmV0dXJuIEZjKGkuZ2V0VVRDSG91cnMoKSUxMnx8MTIsYSwyKX1mdW5jdGlvbiBhRWUoaSxhKXtyZXR1cm4gRmMoMStaTXQuY291bnQoSU4oaSksaSksYSwzKX1mdW5jdGlvbiB1RHQoaSxhKXtyZXR1cm4gRmMoaS5nZXRVVENNaWxsaXNlY29uZHMoKSxhLDMpfWZ1bmN0aW9uIG9FZShpLGEpe3JldHVybiB1RHQoaSxhKSsiMDAwIn1mdW5jdGlvbiBjRWUoaSxhKXtyZXR1cm4gRmMoaS5nZXRVVENNb250aCgpKzEsYSwyKX1mdW5jdGlvbiB1RWUoaSxhKXtyZXR1cm4gRmMoaS5nZXRVVENNaW51dGVzKCksYSwyKX1mdW5jdGlvbiBsRWUoaSxhKXtyZXR1cm4gRmMoaS5nZXRVVENTZWNvbmRzKCksYSwyKX1mdW5jdGlvbiBoRWUoaSl7dmFyIGE9aS5nZXRVVENEYXkoKTtyZXR1cm4gYT09PTA/NzphfWZ1bmN0aW9uIGZFZShpLGEpe3JldHVybiBGYyhKTXQuY291bnQoSU4oaSktMSxpKSxhLDIpfWZ1bmN0aW9uIGxEdChpKXt2YXIgYT1pLmdldFVUQ0RheSgpO3JldHVybiBhPj00fHxhPT09MD9DQShpKTpDQS5jZWlsKGkpfWZ1bmN0aW9uIGRFZShpLGEpe3JldHVybiBpPWxEdChpKSxGYyhDQS5jb3VudChJTihpKSxpKSsoSU4oaSkuZ2V0VVRDRGF5KCk9PT00KSxhLDIpfWZ1bmN0aW9uIGdFZShpKXtyZXR1cm4gaS5nZXRVVENEYXkoKX1mdW5jdGlvbiBwRWUoaSxhKXtyZXR1cm4gRmMocVUuY291bnQoSU4oaSktMSxpKSxhLDIpfWZ1bmN0aW9uIGJFZShpLGEpe3JldHVybiBGYyhpLmdldFVUQ0Z1bGxZZWFyKCklMTAwLGEsMil9ZnVuY3Rpb24gdkVlKGksYSl7cmV0dXJuIGk9bER0KGkpLEZjKGkuZ2V0VVRDRnVsbFllYXIoKSUxMDAsYSwyKX1mdW5jdGlvbiB3RWUoaSxhKXtyZXR1cm4gRmMoaS5nZXRVVENGdWxsWWVhcigpJTFlNCxhLDQpfWZ1bmN0aW9uIG1FZShpLGEpe3ZhciBmPWkuZ2V0VVRDRGF5KCk7cmV0dXJuIGk9Zj49NHx8Zj09PTA/Q0EoaSk6Q0EuY2VpbChpKSxGYyhpLmdldFVUQ0Z1bGxZZWFyKCklMWU0LGEsNCl9ZnVuY3Rpb24geUVlKCl7cmV0dXJuIiswMDAwIn1mdW5jdGlvbiBoRHQoKXtyZXR1cm4iJSJ9ZnVuY3Rpb24gZkR0KGkpe3JldHVybitpfWZ1bmN0aW9uIGREdChpKXtyZXR1cm4gTWF0aC5mbG9vcigraS8xZTMpfXZhciBTQSxIVTt4RWUoe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KTtmdW5jdGlvbiB4RWUoaSl7cmV0dXJuIFNBPXg3ZShpKSxIVT1TQS5mb3JtYXQsU0EucGFyc2UsU0EudXRjRm9ybWF0LFNBLnV0Y1BhcnNlLFNBfWZ1bmN0aW9uIGtFZShpKXtyZXR1cm4gbmV3IERhdGUoaSl9ZnVuY3Rpb24gRUVlKGkpe3JldHVybiBpIGluc3RhbmNlb2YgRGF0ZT8raTorbmV3IERhdGUoK2kpfWZ1bmN0aW9uIGdEdChpLGEsZixwLHYsbSxiLEUsQyxBKXt2YXIgUD0kTXQoKSxGPVAuaW52ZXJ0LGo9UC5kb21haW4sUj1BKCIuJUwiKSxIPUEoIjolUyIpLFk9QSgiJUk6JU0iKSxydD1BKCIlSSAlcCIpLEo9QSgiJWEgJWQiKSxpdD1BKCIlYiAlZCIpLGZ0PUEoIiVCIiksVHQ9QSgiJVkiKTtmdW5jdGlvbiBrdChtdCl7cmV0dXJuKEMobXQpPG10P1I6RShtdCk8bXQ/SDpiKG10KTxtdD9ZOm0obXQpPG10P3J0OnAobXQpPG10P3YobXQpPG10P0o6aXQ6ZihtdCk8bXQ/ZnQ6VHQpKG10KX1yZXR1cm4gUC5pbnZlcnQ9ZnVuY3Rpb24obXQpe3JldHVybiBuZXcgRGF0ZShGKG10KSl9LFAuZG9tYWluPWZ1bmN0aW9uKG10KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9qKEFycmF5LmZyb20obXQsRUVlKSk6aigpLm1hcChrRWUpfSxQLnRpY2tzPWZ1bmN0aW9uKG10KXt2YXIgY3Q9aigpO3JldHVybiBpKGN0WzBdLGN0W2N0Lmxlbmd0aC0xXSxtdD8/MTApfSxQLnRpY2tGb3JtYXQ9ZnVuY3Rpb24obXQsY3Qpe3JldHVybiBjdD09bnVsbD9rdDpBKGN0KX0sUC5uaWNlPWZ1bmN0aW9uKG10KXt2YXIgY3Q9aigpO3JldHVybighbXR8fHR5cGVvZiBtdC5yYW5nZSE9ImZ1bmN0aW9uIikmJihtdD1hKGN0WzBdLGN0W2N0Lmxlbmd0aC0xXSxtdD8/MTApKSxtdD9qKGY3ZShjdCxtdCkpOlB9LFAuY29weT1mdW5jdGlvbigpe3JldHVybiBqTXQoUCxnRHQoaSxhLGYscCx2LG0sYixFLEMsQSkpfSxQfWZ1bmN0aW9uIFRFZSgpe3JldHVybiBrMXQuYXBwbHkoZ0R0KG03ZSx5N2UsVUUselUsTU4sX0EsJFUsalUsTE4sSFUpLmRvbWFpbihbbmV3IERhdGUoMmUzLDAsMSksbmV3IERhdGUoMmUzLDAsMildKSxhcmd1bWVudHMpfWZ1bmN0aW9uIF9FZShpKXtmb3IodmFyIGE9aS5sZW5ndGgvNnwwLGY9bmV3IEFycmF5KGEpLHA9MDtwPGE7KWZbcF09IiMiK2kuc2xpY2UocCo2LCsrcCo2KTtyZXR1cm4gZn1jb25zdCBDRWU9X0VlKCI0ZTc5YTdmMjhlMmNlMTU3NTk3NmI3YjI1OWExNGZlZGM5NDlhZjdhYTFmZjlkYTc5Yzc1NWZiYWIwYWIiKTtmdW5jdGlvbiBKaChpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaX19Y29uc3QgcER0PU1hdGguYWJzLHAwPU1hdGguYXRhbjIsS0U9TWF0aC5jb3MsU0VlPU1hdGgubWF4LE8xdD1NYXRoLm1pbix1Mz1NYXRoLnNpbixBQT1NYXRoLnNxcnQsYjA9MWUtMTIsRk49TWF0aC5QSSxWVT1GTi8yLEdVPTIqRk47ZnVuY3Rpb24gQUVlKGkpe3JldHVybiBpPjE/MDppPC0xP0ZOOk1hdGguYWNvcyhpKX1mdW5jdGlvbiBiRHQoaSl7cmV0dXJuIGk+PTE/VlU6aTw9LTE/LVZVOk1hdGguYXNpbihpKX1mdW5jdGlvbiBMRWUoaSl7cmV0dXJuIGkuaW5uZXJSYWRpdXN9ZnVuY3Rpb24gTUVlKGkpe3JldHVybiBpLm91dGVyUmFkaXVzfWZ1bmN0aW9uIERFZShpKXtyZXR1cm4gaS5zdGFydEFuZ2xlfWZ1bmN0aW9uIElFZShpKXtyZXR1cm4gaS5lbmRBbmdsZX1mdW5jdGlvbiBPRWUoaSl7cmV0dXJuIGkmJmkucGFkQW5nbGV9ZnVuY3Rpb24gTkVlKGksYSxmLHAsdixtLGIsRSl7dmFyIEM9Zi1pLEE9cC1hLFA9Yi12LEY9RS1tLGo9RipDLVAqQTtpZighKGoqajxiMCkpcmV0dXJuIGo9KFAqKGEtbSktRiooaS12KSkvaixbaStqKkMsYStqKkFdfWZ1bmN0aW9uIFVVKGksYSxmLHAsdixtLGIpe3ZhciBFPWktZixDPWEtcCxBPShiP206LW0pL0FBKEUqRStDKkMpLFA9QSpDLEY9LUEqRSxqPWkrUCxSPWErRixIPWYrUCxZPXArRixydD0oaitIKS8yLEo9KFIrWSkvMixpdD1ILWosZnQ9WS1SLFR0PWl0Kml0K2Z0KmZ0LGt0PXYtbSxtdD1qKlktSCpSLGN0PShmdDwwPy0xOjEpKkFBKFNFZSgwLGt0Kmt0KlR0LW10Km10KSkseXQ9KG10KmZ0LWl0KmN0KS9UdCxzdD0oLW10Kml0LWZ0KmN0KS9UdCx4dD0obXQqZnQraXQqY3QpL1R0LGh0PSgtbXQqaXQrZnQqY3QpL1R0LGR0PXl0LXJ0LEN0PXN0LUosdHQ9eHQtcnQsUHQ9aHQtSjtyZXR1cm4gZHQqZHQrQ3QqQ3Q+dHQqdHQrUHQqUHQmJih5dD14dCxzdD1odCkse2N4Onl0LGN5OnN0LHgwMTotUCx5MDE6LUYseDExOnl0Kih2L2t0LTEpLHkxMTpzdCoodi9rdC0xKX19ZnVuY3Rpb24gTEEoKXt2YXIgaT1MRWUsYT1NRWUsZj1KaCgwKSxwPW51bGwsdj1ERWUsbT1JRWUsYj1PRWUsRT1udWxsO2Z1bmN0aW9uIEMoKXt2YXIgQSxQLEY9K2kuYXBwbHkodGhpcyxhcmd1bWVudHMpLGo9K2EuYXBwbHkodGhpcyxhcmd1bWVudHMpLFI9di5hcHBseSh0aGlzLGFyZ3VtZW50cyktVlUsSD1tLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1WVSxZPXBEdChILVIpLHJ0PUg+UjtpZihFfHwoRT1BPXkxdCgpKSxqPEYmJihQPWosaj1GLEY9UCksIShqPmIwKSlFLm1vdmVUbygwLDApO2Vsc2UgaWYoWT5HVS1iMClFLm1vdmVUbyhqKktFKFIpLGoqdTMoUikpLEUuYXJjKDAsMCxqLFIsSCwhcnQpLEY+YjAmJihFLm1vdmVUbyhGKktFKEgpLEYqdTMoSCkpLEUuYXJjKDAsMCxGLEgsUixydCkpO2Vsc2V7dmFyIEo9UixpdD1ILGZ0PVIsVHQ9SCxrdD1ZLG10PVksY3Q9Yi5hcHBseSh0aGlzLGFyZ3VtZW50cykvMix5dD1jdD5iMCYmKHA/K3AuYXBwbHkodGhpcyxhcmd1bWVudHMpOkFBKEYqRitqKmopKSxzdD1PMXQocER0KGotRikvMiwrZi5hcHBseSh0aGlzLGFyZ3VtZW50cykpLHh0PXN0LGh0PXN0LGR0LEN0O2lmKHl0PmIwKXt2YXIgdHQ9YkR0KHl0L0YqdTMoY3QpKSxQdD1iRHQoeXQvaip1MyhjdCkpOyhrdC09dHQqMik+YjA/KHR0Kj1ydD8xOi0xLGZ0Kz10dCxUdC09dHQpOihrdD0wLGZ0PVR0PShSK0gpLzIpLChtdC09UHQqMik+YjA/KFB0Kj1ydD8xOi0xLEorPVB0LGl0LT1QdCk6KG10PTAsSj1pdD0oUitIKS8yKX12YXIgcHQ9aipLRShKKSxGdD1qKnUzKEopLFg9RipLRShUdCksUnQ9Rip1MyhUdCk7aWYoc3Q+YjApe3ZhciBCdD1qKktFKGl0KSx2dD1qKnUzKGl0KSxPdD1GKktFKGZ0KSxWdD1GKnUzKGZ0KSxxZTtpZihZPEZOJiYocWU9TkVlKHB0LEZ0LE90LFZ0LEJ0LHZ0LFgsUnQpKSl7dmFyIF9uPXB0LXFlWzBdLFRlPUZ0LXFlWzFdLFduPUJ0LXFlWzBdLEFlPXZ0LXFlWzFdLG5lPTEvdTMoQUVlKChfbipXbitUZSpBZSkvKEFBKF9uKl9uK1RlKlRlKSpBQShXbipXbitBZSpBZSkpKS8yKSxrZT1BQShxZVswXSpxZVswXStxZVsxXSpxZVsxXSk7eHQ9TzF0KHN0LChGLWtlKS8obmUtMSkpLGh0PU8xdChzdCwoai1rZSkvKG5lKzEpKX19bXQ+YjA/aHQ+YjA/KGR0PVVVKE90LFZ0LHB0LEZ0LGosaHQscnQpLEN0PVVVKEJ0LHZ0LFgsUnQsaixodCxydCksRS5tb3ZlVG8oZHQuY3grZHQueDAxLGR0LmN5K2R0LnkwMSksaHQ8c3Q/RS5hcmMoZHQuY3gsZHQuY3ksaHQscDAoZHQueTAxLGR0LngwMSkscDAoQ3QueTAxLEN0LngwMSksIXJ0KTooRS5hcmMoZHQuY3gsZHQuY3ksaHQscDAoZHQueTAxLGR0LngwMSkscDAoZHQueTExLGR0LngxMSksIXJ0KSxFLmFyYygwLDAsaixwMChkdC5jeStkdC55MTEsZHQuY3grZHQueDExKSxwMChDdC5jeStDdC55MTEsQ3QuY3grQ3QueDExKSwhcnQpLEUuYXJjKEN0LmN4LEN0LmN5LGh0LHAwKEN0LnkxMSxDdC54MTEpLHAwKEN0LnkwMSxDdC54MDEpLCFydCkpKTooRS5tb3ZlVG8ocHQsRnQpLEUuYXJjKDAsMCxqLEosaXQsIXJ0KSk6RS5tb3ZlVG8ocHQsRnQpLCEoRj5iMCl8fCEoa3Q+YjApP0UubGluZVRvKFgsUnQpOnh0PmIwPyhkdD1VVShYLFJ0LEJ0LHZ0LEYsLXh0LHJ0KSxDdD1VVShwdCxGdCxPdCxWdCxGLC14dCxydCksRS5saW5lVG8oZHQuY3grZHQueDAxLGR0LmN5K2R0LnkwMSkseHQ8c3Q/RS5hcmMoZHQuY3gsZHQuY3kseHQscDAoZHQueTAxLGR0LngwMSkscDAoQ3QueTAxLEN0LngwMSksIXJ0KTooRS5hcmMoZHQuY3gsZHQuY3kseHQscDAoZHQueTAxLGR0LngwMSkscDAoZHQueTExLGR0LngxMSksIXJ0KSxFLmFyYygwLDAsRixwMChkdC5jeStkdC55MTEsZHQuY3grZHQueDExKSxwMChDdC5jeStDdC55MTEsQ3QuY3grQ3QueDExKSxydCksRS5hcmMoQ3QuY3gsQ3QuY3kseHQscDAoQ3QueTExLEN0LngxMSkscDAoQ3QueTAxLEN0LngwMSksIXJ0KSkpOkUuYXJjKDAsMCxGLFR0LGZ0LHJ0KX1pZihFLmNsb3NlUGF0aCgpLEEpcmV0dXJuIEU9bnVsbCxBKyIifHxudWxsfXJldHVybiBDLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIEE9KCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK2EuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLFA9KCt2LmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK20uYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLUZOLzI7cmV0dXJuW0tFKFApKkEsdTMoUCkqQV19LEMuaW5uZXJSYWRpdXM9ZnVuY3Rpb24oQSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIEE9PSJmdW5jdGlvbiI/QTpKaCgrQSksQyk6aX0sQy5vdXRlclJhZGl1cz1mdW5jdGlvbihBKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10eXBlb2YgQT09ImZ1bmN0aW9uIj9BOkpoKCtBKSxDKTphfSxDLmNvcm5lclJhZGl1cz1mdW5jdGlvbihBKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj10eXBlb2YgQT09ImZ1bmN0aW9uIj9BOkpoKCtBKSxDKTpmfSxDLnBhZFJhZGl1cz1mdW5jdGlvbihBKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD1BPT1udWxsP251bGw6dHlwZW9mIEE9PSJmdW5jdGlvbiI/QTpKaCgrQSksQyk6cH0sQy5zdGFydEFuZ2xlPWZ1bmN0aW9uKEEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PXR5cGVvZiBBPT0iZnVuY3Rpb24iP0E6SmgoK0EpLEMpOnZ9LEMuZW5kQW5nbGU9ZnVuY3Rpb24oQSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09dHlwZW9mIEE9PSJmdW5jdGlvbiI/QTpKaCgrQSksQyk6bX0sQy5wYWRBbmdsZT1mdW5jdGlvbihBKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj10eXBlb2YgQT09ImZ1bmN0aW9uIj9BOkpoKCtBKSxDKTpifSxDLmNvbnRleHQ9ZnVuY3Rpb24oQSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9QT8/bnVsbCxDKTpFfSxDfWZ1bmN0aW9uIHZEdChpKXtyZXR1cm4gdHlwZW9mIGk9PSJvYmplY3QiJiYibGVuZ3RoImluIGk/aTpBcnJheS5mcm9tKGkpfWZ1bmN0aW9uIHdEdChpKXt0aGlzLl9jb250ZXh0PWl9d0R0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGksYSl7c3dpdGNoKGk9K2ksYT0rYSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhpLGEpOnRoaXMuX2NvbnRleHQubW92ZVRvKGksYSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp0aGlzLl9jb250ZXh0LmxpbmVUbyhpLGEpO2JyZWFrfX19O2Z1bmN0aW9uIGlnKGkpe3JldHVybiBuZXcgd0R0KGkpfWZ1bmN0aW9uIFBFZShpKXtyZXR1cm4gaVswXX1mdW5jdGlvbiBGRWUoaSl7cmV0dXJuIGlbMV19ZnVuY3Rpb24gWUUoaSxhKXt2YXIgZj1KaCghMCkscD1udWxsLHY9aWcsbT1udWxsO2k9dHlwZW9mIGk9PSJmdW5jdGlvbiI/aTppPT09dm9pZCAwP1BFZTpKaChpKSxhPXR5cGVvZiBhPT0iZnVuY3Rpb24iP2E6YT09PXZvaWQgMD9GRWU6SmgoYSk7ZnVuY3Rpb24gYihFKXt2YXIgQyxBPShFPXZEdChFKSkubGVuZ3RoLFAsRj0hMSxqO2ZvcihwPT1udWxsJiYobT12KGo9eTF0KCkpKSxDPTA7Qzw9QTsrK0MpIShDPEEmJmYoUD1FW0NdLEMsRSkpPT09RiYmKChGPSFGKT9tLmxpbmVTdGFydCgpOm0ubGluZUVuZCgpKSxGJiZtLnBvaW50KCtpKFAsQyxFKSwrYShQLEMsRSkpO2lmKGopcmV0dXJuIG09bnVsbCxqKyIifHxudWxsfXJldHVybiBiLng9ZnVuY3Rpb24oRSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIEU9PSJmdW5jdGlvbiI/RTpKaCgrRSksYik6aX0sYi55PWZ1bmN0aW9uKEUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXR5cGVvZiBFPT0iZnVuY3Rpb24iP0U6SmgoK0UpLGIpOmF9LGIuZGVmaW5lZD1mdW5jdGlvbihFKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj10eXBlb2YgRT09ImZ1bmN0aW9uIj9FOkpoKCEhRSksYik6Zn0sYi5jdXJ2ZT1mdW5jdGlvbihFKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj1FLHAhPW51bGwmJihtPXYocCkpLGIpOnZ9LGIuY29udGV4dD1mdW5jdGlvbihFKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRT09bnVsbD9wPW09bnVsbDptPXYocD1FKSxiKTpwfSxifWZ1bmN0aW9uIEJFZShpLGEpe3JldHVybiBhPGk/LTE6YT5pPzE6YT49aT8wOk5hTn1mdW5jdGlvbiBSRWUoaSl7cmV0dXJuIGl9ZnVuY3Rpb24gakVlKCl7dmFyIGk9UkVlLGE9QkVlLGY9bnVsbCxwPUpoKDApLHY9SmgoR1UpLG09SmgoMCk7ZnVuY3Rpb24gYihFKXt2YXIgQyxBPShFPXZEdChFKSkubGVuZ3RoLFAsRixqPTAsUj1uZXcgQXJyYXkoQSksSD1uZXcgQXJyYXkoQSksWT0rcC5hcHBseSh0aGlzLGFyZ3VtZW50cykscnQ9TWF0aC5taW4oR1UsTWF0aC5tYXgoLUdVLHYuYXBwbHkodGhpcyxhcmd1bWVudHMpLVkpKSxKLGl0PU1hdGgubWluKE1hdGguYWJzKHJ0KS9BLG0uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxmdD1pdCoocnQ8MD8tMToxKSxUdDtmb3IoQz0wO0M8QTsrK0MpKFR0PUhbUltDXT1DXT0raShFW0NdLEMsRSkpPjAmJihqKz1UdCk7Zm9yKGEhPW51bGw/Ui5zb3J0KGZ1bmN0aW9uKGt0LG10KXtyZXR1cm4gYShIW2t0XSxIW210XSl9KTpmIT1udWxsJiZSLnNvcnQoZnVuY3Rpb24oa3QsbXQpe3JldHVybiBmKEVba3RdLEVbbXRdKX0pLEM9MCxGPWo/KHJ0LUEqZnQpL2o6MDtDPEE7KytDLFk9SilQPVJbQ10sVHQ9SFtQXSxKPVkrKFR0PjA/VHQqRjowKStmdCxIW1BdPXtkYXRhOkVbUF0saW5kZXg6Qyx2YWx1ZTpUdCxzdGFydEFuZ2xlOlksZW5kQW5nbGU6SixwYWRBbmdsZTppdH07cmV0dXJuIEh9cmV0dXJuIGIudmFsdWU9ZnVuY3Rpb24oRSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIEU9PSJmdW5jdGlvbiI/RTpKaCgrRSksYik6aX0sYi5zb3J0VmFsdWVzPWZ1bmN0aW9uKEUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPUUsZj1udWxsLGIpOmF9LGIuc29ydD1mdW5jdGlvbihFKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1FLGE9bnVsbCxiKTpmfSxiLnN0YXJ0QW5nbGU9ZnVuY3Rpb24oRSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9dHlwZW9mIEU9PSJmdW5jdGlvbiI/RTpKaCgrRSksYik6cH0sYi5lbmRBbmdsZT1mdW5jdGlvbihFKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj10eXBlb2YgRT09ImZ1bmN0aW9uIj9FOkpoKCtFKSxiKTp2fSxiLnBhZEFuZ2xlPWZ1bmN0aW9uKEUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPXR5cGVvZiBFPT0iZnVuY3Rpb24iP0U6SmgoK0UpLGIpOm19LGJ9Y2xhc3MgbUR0e2NvbnN0cnVjdG9yKGEsZil7dGhpcy5fY29udGV4dD1hLHRoaXMuX3g9Zn1hcmVhU3RhcnQoKXt0aGlzLl9saW5lPTB9YXJlYUVuZCgpe3RoaXMuX2xpbmU9TmFOfWxpbmVTdGFydCgpe3RoaXMuX3BvaW50PTB9bGluZUVuZCgpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX1wb2ludChhLGYpe3N3aXRjaChhPSthLGY9K2YsdGhpcy5fcG9pbnQpe2Nhc2UgMDp7dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGEsZik6dGhpcy5fY29udGV4dC5tb3ZlVG8oYSxmKTticmVha31jYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0Ont0aGlzLl94P3RoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0aGlzLl94MD0odGhpcy5feDArYSkvMix0aGlzLl95MCx0aGlzLl94MCxmLGEsZik6dGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHRoaXMuX3gwLHRoaXMuX3kwPSh0aGlzLl95MCtmKS8yLGEsdGhpcy5feTAsYSxmKTticmVha319dGhpcy5feDA9YSx0aGlzLl95MD1mfX1mdW5jdGlvbiAkRWUoaSl7cmV0dXJuIG5ldyBtRHQoaSwhMCl9ZnVuY3Rpb24gekVlKGkpe3JldHVybiBuZXcgbUR0KGksITEpfWZ1bmN0aW9uIFF4KCl7fWZ1bmN0aW9uIFdVKGksYSxmKXtpLl9jb250ZXh0LmJlemllckN1cnZlVG8oKDIqaS5feDAraS5feDEpLzMsKDIqaS5feTAraS5feTEpLzMsKGkuX3gwKzIqaS5feDEpLzMsKGkuX3kwKzIqaS5feTEpLzMsKGkuX3gwKzQqaS5feDErYSkvNiwoaS5feTArNCppLl95MStmKS82KX1mdW5jdGlvbiBLVShpKXt0aGlzLl9jb250ZXh0PWl9S1UucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMzpXVSh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKTtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpO2JyZWFrfSh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oaSxhKXtzd2l0Y2goaT0raSxhPSthLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGksYSk6dGhpcy5fY29udGV4dC5tb3ZlVG8oaSxhKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9jb250ZXh0LmxpbmVUbygoNSp0aGlzLl94MCt0aGlzLl94MSkvNiwoNSp0aGlzLl95MCt0aGlzLl95MSkvNik7ZGVmYXVsdDpXVSh0aGlzLGksYSk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9aSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1hfX07ZnVuY3Rpb24gTUEoaSl7cmV0dXJuIG5ldyBLVShpKX1mdW5jdGlvbiB5RHQoaSl7dGhpcy5fY29udGV4dD1pfXlEdC5wcm90b3R5cGU9e2FyZWFTdGFydDpReCxhcmVhRW5kOlF4LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gyKzIqdGhpcy5feDMpLzMsKHRoaXMuX3kyKzIqdGhpcy5feTMpLzMpLHRoaXMuX2NvbnRleHQubGluZVRvKCh0aGlzLl94MysyKnRoaXMuX3gyKS8zLCh0aGlzLl95MysyKnRoaXMuX3kyKS8zKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMzp7dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCk7YnJlYWt9fX0scG9pbnQ6ZnVuY3Rpb24oaSxhKXtzd2l0Y2goaT0raSxhPSthLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mj1pLHRoaXMuX3kyPWE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDM9aSx0aGlzLl95Mz1hO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g0PWksdGhpcy5feTQ9YSx0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDArNCp0aGlzLl94MStpKS82LCh0aGlzLl95MCs0KnRoaXMuX3kxK2EpLzYpO2JyZWFrO2RlZmF1bHQ6V1UodGhpcyxpLGEpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPWksdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9YX19O2Z1bmN0aW9uIHFFZShpKXtyZXR1cm4gbmV3IHlEdChpKX1mdW5jdGlvbiB4RHQoaSl7dGhpcy5fY29udGV4dD1pfXhEdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0zKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oaSxhKXtzd2l0Y2goaT0raSxhPSthLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Mzt2YXIgZj0odGhpcy5feDArNCp0aGlzLl94MStpKS82LHA9KHRoaXMuX3kwKzQqdGhpcy5feTErYSkvNjt0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGYscCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZixwKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OldVKHRoaXMsaSxhKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT1pLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWF9fTtmdW5jdGlvbiBIRWUoaSl7cmV0dXJuIG5ldyB4RHQoaSl9ZnVuY3Rpb24ga0R0KGksYSl7dGhpcy5fYmFzaXM9bmV3IEtVKGkpLHRoaXMuX2JldGE9YX1rRHQucHJvdG90eXBlPXtsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W10sdGhpcy5fYmFzaXMubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgaT10aGlzLl94LGE9dGhpcy5feSxmPWkubGVuZ3RoLTE7aWYoZj4wKWZvcih2YXIgcD1pWzBdLHY9YVswXSxtPWlbZl0tcCxiPWFbZl0tdixFPS0xLEM7KytFPD1mOylDPUUvZix0aGlzLl9iYXNpcy5wb2ludCh0aGlzLl9iZXRhKmlbRV0rKDEtdGhpcy5fYmV0YSkqKHArQyptKSx0aGlzLl9iZXRhKmFbRV0rKDEtdGhpcy5fYmV0YSkqKHYrQypiKSk7dGhpcy5feD10aGlzLl95PW51bGwsdGhpcy5fYmFzaXMubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbihpLGEpe3RoaXMuX3gucHVzaCgraSksdGhpcy5feS5wdXNoKCthKX19O2NvbnN0IFZFZT1mdW5jdGlvbiBpKGEpe2Z1bmN0aW9uIGYocCl7cmV0dXJuIGE9PT0xP25ldyBLVShwKTpuZXcga0R0KHAsYSl9cmV0dXJuIGYuYmV0YT1mdW5jdGlvbihwKXtyZXR1cm4gaSgrcCl9LGZ9KC44NSk7ZnVuY3Rpb24gWVUoaSxhLGYpe2kuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhpLl94MStpLl9rKihpLl94Mi1pLl94MCksaS5feTEraS5fayooaS5feTItaS5feTApLGkuX3gyK2kuX2sqKGkuX3gxLWEpLGkuX3kyK2kuX2sqKGkuX3kxLWYpLGkuX3gyLGkuX3kyKX1mdW5jdGlvbiBOMXQoaSxhKXt0aGlzLl9jb250ZXh0PWksdGhpcy5faz0oMS1hKS82fU4xdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6WVUodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihpLGEpe3N3aXRjaChpPStpLGE9K2EsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oaSxhKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhpLGEpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gxPWksdGhpcy5feTE9YTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OllVKHRoaXMsaSxhKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1pLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWF9fTtjb25zdCBHRWU9ZnVuY3Rpb24gaShhKXtmdW5jdGlvbiBmKHApe3JldHVybiBuZXcgTjF0KHAsYSl9cmV0dXJuIGYudGVuc2lvbj1mdW5jdGlvbihwKXtyZXR1cm4gaSgrcCl9LGZ9KDApO2Z1bmN0aW9uIFAxdChpLGEpe3RoaXMuX2NvbnRleHQ9aSx0aGlzLl9rPSgxLWEpLzZ9UDF0LnByb3RvdHlwZT17YXJlYVN0YXJ0OlF4LGFyZWFFbmQ6UXgsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp7dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAyOnt0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDM6e3RoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpO2JyZWFrfX19LHBvaW50OmZ1bmN0aW9uKGksYSl7c3dpdGNoKGk9K2ksYT0rYSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9aSx0aGlzLl95Mz1hO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PWksdGhpcy5feTQ9YSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9aSx0aGlzLl95NT1hO2JyZWFrO2RlZmF1bHQ6WVUodGhpcyxpLGEpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWksdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9YX19O2NvbnN0IFVFZT1mdW5jdGlvbiBpKGEpe2Z1bmN0aW9uIGYocCl7cmV0dXJuIG5ldyBQMXQocCxhKX1yZXR1cm4gZi50ZW5zaW9uPWZ1bmN0aW9uKHApe3JldHVybiBpKCtwKX0sZn0oMCk7ZnVuY3Rpb24gRjF0KGksYSl7dGhpcy5fY29udGV4dD1pLHRoaXMuX2s9KDEtYSkvNn1GMXQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MykmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGksYSl7c3dpdGNoKGk9K2ksYT0rYSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6WVUodGhpcyxpLGEpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWksdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9YX19O2NvbnN0IFdFZT1mdW5jdGlvbiBpKGEpe2Z1bmN0aW9uIGYocCl7cmV0dXJuIG5ldyBGMXQocCxhKX1yZXR1cm4gZi50ZW5zaW9uPWZ1bmN0aW9uKHApe3JldHVybiBpKCtwKX0sZn0oMCk7ZnVuY3Rpb24gQjF0KGksYSxmKXt2YXIgcD1pLl94MSx2PWkuX3kxLG09aS5feDIsYj1pLl95MjtpZihpLl9sMDFfYT5iMCl7dmFyIEU9MippLl9sMDFfMmErMyppLl9sMDFfYSppLl9sMTJfYStpLl9sMTJfMmEsQz0zKmkuX2wwMV9hKihpLl9sMDFfYStpLl9sMTJfYSk7cD0ocCpFLWkuX3gwKmkuX2wxMl8yYStpLl94MippLl9sMDFfMmEpL0Msdj0odipFLWkuX3kwKmkuX2wxMl8yYStpLl95MippLl9sMDFfMmEpL0N9aWYoaS5fbDIzX2E+YjApe3ZhciBBPTIqaS5fbDIzXzJhKzMqaS5fbDIzX2EqaS5fbDEyX2EraS5fbDEyXzJhLFA9MyppLl9sMjNfYSooaS5fbDIzX2EraS5fbDEyX2EpO209KG0qQStpLl94MSppLl9sMjNfMmEtYSppLl9sMTJfMmEpL1AsYj0oYipBK2kuX3kxKmkuX2wyM18yYS1mKmkuX2wxMl8yYSkvUH1pLl9jb250ZXh0LmJlemllckN1cnZlVG8ocCx2LG0sYixpLl94MixpLl95Mil9ZnVuY3Rpb24gRUR0KGksYSl7dGhpcy5fY29udGV4dD1pLHRoaXMuX2FscGhhPWF9RUR0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKTticmVha30odGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGksYSl7aWYoaT0raSxhPSthLHRoaXMuX3BvaW50KXt2YXIgZj10aGlzLl94Mi1pLHA9dGhpcy5feTItYTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KGYqZitwKnAsdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oaSxhKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhpLGEpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6QjF0KHRoaXMsaSxhKTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9aSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1hfX07Y29uc3QgS0VlPWZ1bmN0aW9uIGkoYSl7ZnVuY3Rpb24gZihwKXtyZXR1cm4gYT9uZXcgRUR0KHAsYSk6bmV3IE4xdChwLDApfXJldHVybiBmLmFscGhhPWZ1bmN0aW9uKHApe3JldHVybiBpKCtwKX0sZn0oLjUpO2Z1bmN0aW9uIFREdChpLGEpe3RoaXMuX2NvbnRleHQ9aSx0aGlzLl9hbHBoYT1hfVREdC5wcm90b3R5cGU9e2FyZWFTdGFydDpReCxhcmVhRW5kOlF4LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSxwb2ludDpmdW5jdGlvbihpLGEpe2lmKGk9K2ksYT0rYSx0aGlzLl9wb2ludCl7dmFyIGY9dGhpcy5feDItaSxwPXRoaXMuX3kyLWE7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhmKmYrcCpwLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz1pLHRoaXMuX3kzPWE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9aSx0aGlzLl95ND1hKTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT1pLHRoaXMuX3k1PWE7YnJlYWs7ZGVmYXVsdDpCMXQodGhpcyxpLGEpO2JyZWFrfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1pLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWF9fTtjb25zdCBZRWU9ZnVuY3Rpb24gaShhKXtmdW5jdGlvbiBmKHApe3JldHVybiBhP25ldyBURHQocCxhKTpuZXcgUDF0KHAsMCl9cmV0dXJuIGYuYWxwaGE9ZnVuY3Rpb24ocCl7cmV0dXJuIGkoK3ApfSxmfSguNSk7ZnVuY3Rpb24gX0R0KGksYSl7dGhpcy5fY29udGV4dD1pLHRoaXMuX2FscGhhPWF9X0R0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTMpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihpLGEpe2lmKGk9K2ksYT0rYSx0aGlzLl9wb2ludCl7dmFyIGY9dGhpcy5feDItaSxwPXRoaXMuX3kyLWE7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhmKmYrcCpwLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpCMXQodGhpcyxpLGEpO2JyZWFrfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1pLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWF9fTtjb25zdCBYRWU9ZnVuY3Rpb24gaShhKXtmdW5jdGlvbiBmKHApe3JldHVybiBhP25ldyBfRHQocCxhKTpuZXcgRjF0KHAsMCl9cmV0dXJuIGYuYWxwaGE9ZnVuY3Rpb24ocCl7cmV0dXJuIGkoK3ApfSxmfSguNSk7ZnVuY3Rpb24gQ0R0KGkpe3RoaXMuX2NvbnRleHQ9aX1DRHQucHJvdG90eXBlPXthcmVhU3RhcnQ6UXgsYXJlYUVuZDpReCxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LHBvaW50OmZ1bmN0aW9uKGksYSl7aT0raSxhPSthLHRoaXMuX3BvaW50P3RoaXMuX2NvbnRleHQubGluZVRvKGksYSk6KHRoaXMuX3BvaW50PTEsdGhpcy5fY29udGV4dC5tb3ZlVG8oaSxhKSl9fTtmdW5jdGlvbiBRRWUoaSl7cmV0dXJuIG5ldyBDRHQoaSl9ZnVuY3Rpb24gU0R0KGkpe3JldHVybiBpPDA/LTE6MX1mdW5jdGlvbiBBRHQoaSxhLGYpe3ZhciBwPWkuX3gxLWkuX3gwLHY9YS1pLl94MSxtPShpLl95MS1pLl95MCkvKHB8fHY8MCYmLTApLGI9KGYtaS5feTEpLyh2fHxwPDAmJi0wKSxFPShtKnYrYipwKS8ocCt2KTtyZXR1cm4oU0R0KG0pK1NEdChiKSkqTWF0aC5taW4oTWF0aC5hYnMobSksTWF0aC5hYnMoYiksLjUqTWF0aC5hYnMoRSkpfHwwfWZ1bmN0aW9uIExEdChpLGEpe3ZhciBmPWkuX3gxLWkuX3gwO3JldHVybiBmPygzKihpLl95MS1pLl95MCkvZi1hKS8yOmF9ZnVuY3Rpb24gUjF0KGksYSxmKXt2YXIgcD1pLl94MCx2PWkuX3kwLG09aS5feDEsYj1pLl95MSxFPShtLXApLzM7aS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHArRSx2K0UqYSxtLUUsYi1FKmYsbSxiKX1mdW5jdGlvbiBYVShpKXt0aGlzLl9jb250ZXh0PWl9WFUucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5fdDA9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWs7Y2FzZSAzOlIxdCh0aGlzLHRoaXMuX3QwLExEdCh0aGlzLHRoaXMuX3QwKSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihpLGEpe3ZhciBmPU5hTjtpZihpPStpLGE9K2EsIShpPT09dGhpcy5feDEmJmE9PT10aGlzLl95MSkpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhpLGEpOnRoaXMuX2NvbnRleHQubW92ZVRvKGksYSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsUjF0KHRoaXMsTER0KHRoaXMsZj1BRHQodGhpcyxpLGEpKSxmKTticmVhaztkZWZhdWx0OlIxdCh0aGlzLHRoaXMuX3QwLGY9QUR0KHRoaXMsaSxhKSk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9aSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1hLHRoaXMuX3QwPWZ9fX07ZnVuY3Rpb24gTUR0KGkpe3RoaXMuX2NvbnRleHQ9bmV3IEREdChpKX0oTUR0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFhVLnByb3RvdHlwZSkpLnBvaW50PWZ1bmN0aW9uKGksYSl7WFUucHJvdG90eXBlLnBvaW50LmNhbGwodGhpcyxhLGkpfTtmdW5jdGlvbiBERHQoaSl7dGhpcy5fY29udGV4dD1pfUREdC5wcm90b3R5cGU9e21vdmVUbzpmdW5jdGlvbihpLGEpe3RoaXMuX2NvbnRleHQubW92ZVRvKGEsaSl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LGxpbmVUbzpmdW5jdGlvbihpLGEpe3RoaXMuX2NvbnRleHQubGluZVRvKGEsaSl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24oaSxhLGYscCx2LG0pe3RoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhhLGkscCxmLG0sdil9fTtmdW5jdGlvbiBaRWUoaSl7cmV0dXJuIG5ldyBYVShpKX1mdW5jdGlvbiBKRWUoaSl7cmV0dXJuIG5ldyBNRHQoaSl9ZnVuY3Rpb24gSUR0KGkpe3RoaXMuX2NvbnRleHQ9aX1JRHQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIGk9dGhpcy5feCxhPXRoaXMuX3ksZj1pLmxlbmd0aDtpZihmKWlmKHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oaVswXSxhWzBdKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhpWzBdLGFbMF0pLGY9PT0yKXRoaXMuX2NvbnRleHQubGluZVRvKGlbMV0sYVsxXSk7ZWxzZSBmb3IodmFyIHA9T0R0KGkpLHY9T0R0KGEpLG09MCxiPTE7YjxmOysrbSwrK2IpdGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHBbMF1bbV0sdlswXVttXSxwWzFdW21dLHZbMV1bbV0saVtiXSxhW2JdKTsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJmY9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSx0aGlzLl94PXRoaXMuX3k9bnVsbH0scG9pbnQ6ZnVuY3Rpb24oaSxhKXt0aGlzLl94LnB1c2goK2kpLHRoaXMuX3kucHVzaCgrYSl9fTtmdW5jdGlvbiBPRHQoaSl7dmFyIGEsZj1pLmxlbmd0aC0xLHAsdj1uZXcgQXJyYXkoZiksbT1uZXcgQXJyYXkoZiksYj1uZXcgQXJyYXkoZik7Zm9yKHZbMF09MCxtWzBdPTIsYlswXT1pWzBdKzIqaVsxXSxhPTE7YTxmLTE7KythKXZbYV09MSxtW2FdPTQsYlthXT00KmlbYV0rMippW2ErMV07Zm9yKHZbZi0xXT0yLG1bZi0xXT03LGJbZi0xXT04KmlbZi0xXStpW2ZdLGE9MTthPGY7KythKXA9dlthXS9tW2EtMV0sbVthXS09cCxiW2FdLT1wKmJbYS0xXTtmb3IodltmLTFdPWJbZi0xXS9tW2YtMV0sYT1mLTI7YT49MDstLWEpdlthXT0oYlthXS12W2ErMV0pL21bYV07Zm9yKG1bZi0xXT0oaVtmXSt2W2YtMV0pLzIsYT0wO2E8Zi0xOysrYSltW2FdPTIqaVthKzFdLXZbYSsxXTtyZXR1cm5bdixtXX1mdW5jdGlvbiB0OWUoaSl7cmV0dXJuIG5ldyBJRHQoaSl9ZnVuY3Rpb24gUVUoaSxhKXt0aGlzLl9jb250ZXh0PWksdGhpcy5fdD1hfVFVLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9dGhpcy5feT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA8dGhpcy5fdCYmdGhpcy5fdDwxJiZ0aGlzLl9wb2ludD09PTImJnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsdGhpcy5feSksKHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU+PTAmJih0aGlzLl90PTEtdGhpcy5fdCx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSl9LHBvaW50OmZ1bmN0aW9uKGksYSl7c3dpdGNoKGk9K2ksYT0rYSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhpLGEpOnRoaXMuX2NvbnRleHQubW92ZVRvKGksYSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp7aWYodGhpcy5fdDw9MCl0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LGEpLHRoaXMuX2NvbnRleHQubGluZVRvKGksYSk7ZWxzZXt2YXIgZj10aGlzLl94KigxLXRoaXMuX3QpK2kqdGhpcy5fdDt0aGlzLl9jb250ZXh0LmxpbmVUbyhmLHRoaXMuX3kpLHRoaXMuX2NvbnRleHQubGluZVRvKGYsYSl9YnJlYWt9fXRoaXMuX3g9aSx0aGlzLl95PWF9fTtmdW5jdGlvbiBlOWUoaSl7cmV0dXJuIG5ldyBRVShpLC41KX1mdW5jdGlvbiBuOWUoaSl7cmV0dXJuIG5ldyBRVShpLDApfWZ1bmN0aW9uIHI5ZShpKXtyZXR1cm4gbmV3IFFVKGksMSl9ZnVuY3Rpb24gQk4oaSxhLGYpe3RoaXMuaz1pLHRoaXMueD1hLHRoaXMueT1mfUJOLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Qk4sc2NhbGU6ZnVuY3Rpb24oaSl7cmV0dXJuIGk9PT0xP3RoaXM6bmV3IEJOKHRoaXMuayppLHRoaXMueCx0aGlzLnkpfSx0cmFuc2xhdGU6ZnVuY3Rpb24oaSxhKXtyZXR1cm4gaT09PTAmYT09PTA/dGhpczpuZXcgQk4odGhpcy5rLHRoaXMueCt0aGlzLmsqaSx0aGlzLnkrdGhpcy5rKmEpfSxhcHBseTpmdW5jdGlvbihpKXtyZXR1cm5baVswXSp0aGlzLmsrdGhpcy54LGlbMV0qdGhpcy5rK3RoaXMueV19LGFwcGx5WDpmdW5jdGlvbihpKXtyZXR1cm4gaSp0aGlzLmsrdGhpcy54fSxhcHBseVk6ZnVuY3Rpb24oaSl7cmV0dXJuIGkqdGhpcy5rK3RoaXMueX0saW52ZXJ0OmZ1bmN0aW9uKGkpe3JldHVyblsoaVswXS10aGlzLngpL3RoaXMuaywoaVsxXS10aGlzLnkpL3RoaXMua119LGludmVydFg6ZnVuY3Rpb24oaSl7cmV0dXJuKGktdGhpcy54KS90aGlzLmt9LGludmVydFk6ZnVuY3Rpb24oaSl7cmV0dXJuKGktdGhpcy55KS90aGlzLmt9LHJlc2NhbGVYOmZ1bmN0aW9uKGkpe3JldHVybiBpLmNvcHkoKS5kb21haW4oaS5yYW5nZSgpLm1hcCh0aGlzLmludmVydFgsdGhpcykubWFwKGkuaW52ZXJ0LGkpKX0scmVzY2FsZVk6ZnVuY3Rpb24oaSl7cmV0dXJuIGkuY29weSgpLmRvbWFpbihpLnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WSx0aGlzKS5tYXAoaS5pbnZlcnQsaSkpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJ0cmFuc2xhdGUoIit0aGlzLngrIiwiK3RoaXMueSsiKSBzY2FsZSgiK3RoaXMuaysiKSJ9fSxCTi5wcm90b3R5cGU7LyohIEBsaWNlbnNlIERPTVB1cmlmeSAzLjAuNSB8IChjKSBDdXJlNTMgYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyB8IFJlbGVhc2VkIHVuZGVyIHRoZSBBcGFjaGUgbGljZW5zZSAyLjAgYW5kIE1vemlsbGEgUHVibGljIExpY2Vuc2UgMi4wIHwgZ2l0aHViLmNvbS9jdXJlNTMvRE9NUHVyaWZ5L2Jsb2IvMy4wLjUvTElDRU5TRSAqL2NvbnN0e2VudHJpZXM6TkR0LHNldFByb3RvdHlwZU9mOlBEdCxpc0Zyb3plbjppOWUsZ2V0UHJvdG90eXBlT2Y6czllLGdldE93blByb3BlcnR5RGVzY3JpcHRvcjphOWV9PU9iamVjdDtsZXR7ZnJlZXplOnNnLHNlYWw6WHcsY3JlYXRlOm85ZX09T2JqZWN0LHthcHBseTpqMXQsY29uc3RydWN0OiQxdH09dHlwZW9mIFJlZmxlY3Q8InUiJiZSZWZsZWN0O2oxdHx8KGoxdD1mdW5jdGlvbihhLGYscCl7cmV0dXJuIGEuYXBwbHkoZixwKX0pLHNnfHwoc2c9ZnVuY3Rpb24oYSl7cmV0dXJuIGF9KSxYd3x8KFh3PWZ1bmN0aW9uKGEpe3JldHVybiBhfSksJDF0fHwoJDF0PWZ1bmN0aW9uKGEsZil7cmV0dXJuIG5ldyBhKC4uLmYpfSk7Y29uc3QgYzllPVgyKEFycmF5LnByb3RvdHlwZS5mb3JFYWNoKSxGRHQ9WDIoQXJyYXkucHJvdG90eXBlLnBvcCksUk49WDIoQXJyYXkucHJvdG90eXBlLnB1c2gpLFpVPVgyKFN0cmluZy5wcm90b3R5cGUudG9Mb3dlckNhc2UpLHoxdD1YMihTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nKSx1OWU9WDIoU3RyaW5nLnByb3RvdHlwZS5tYXRjaCksUXc9WDIoU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKSxsOWU9WDIoU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mKSxoOWU9WDIoU3RyaW5nLnByb3RvdHlwZS50cmltKSxJYj1YMihSZWdFeHAucHJvdG90eXBlLnRlc3QpLGpOPWY5ZShUeXBlRXJyb3IpO2Z1bmN0aW9uIFgyKGkpe3JldHVybiBmdW5jdGlvbihhKXtmb3IodmFyIGY9YXJndW1lbnRzLmxlbmd0aCxwPW5ldyBBcnJheShmPjE/Zi0xOjApLHY9MTt2PGY7disrKXBbdi0xXT1hcmd1bWVudHNbdl07cmV0dXJuIGoxdChpLGEscCl9fWZ1bmN0aW9uIGY5ZShpKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShhKSxwPTA7cDxhO3ArKylmW3BdPWFyZ3VtZW50c1twXTtyZXR1cm4gJDF0KGksZil9fWZ1bmN0aW9uIF9vKGksYSxmKXt2YXIgcDtmPShwPWYpIT09bnVsbCYmcCE9PXZvaWQgMD9wOlpVLFBEdCYmUER0KGksbnVsbCk7bGV0IHY9YS5sZW5ndGg7Zm9yKDt2LS07KXtsZXQgbT1hW3ZdO2lmKHR5cGVvZiBtPT0ic3RyaW5nIil7Y29uc3QgYj1mKG0pO2IhPT1tJiYoaTllKGEpfHwoYVt2XT1iKSxtPWIpfWlbbV09ITB9cmV0dXJuIGl9ZnVuY3Rpb24gREEoaSl7Y29uc3QgYT1vOWUobnVsbCk7Zm9yKGNvbnN0W2YscF1vZiBORHQoaSkpYVtmXT1wO3JldHVybiBhfWZ1bmN0aW9uIEpVKGksYSl7Zm9yKDtpIT09bnVsbDspe2NvbnN0IHA9YTllKGksYSk7aWYocCl7aWYocC5nZXQpcmV0dXJuIFgyKHAuZ2V0KTtpZih0eXBlb2YgcC52YWx1ZT09ImZ1bmN0aW9uIilyZXR1cm4gWDIocC52YWx1ZSl9aT1zOWUoaSl9ZnVuY3Rpb24gZihwKXtyZXR1cm4gY29uc29sZS53YXJuKCJmYWxsYmFjayB2YWx1ZSBmb3IiLHApLG51bGx9cmV0dXJuIGZ9Y29uc3QgQkR0PXNnKFsiYSIsImFiYnIiLCJhY3JvbnltIiwiYWRkcmVzcyIsImFyZWEiLCJhcnRpY2xlIiwiYXNpZGUiLCJhdWRpbyIsImIiLCJiZGkiLCJiZG8iLCJiaWciLCJibGluayIsImJsb2NrcXVvdGUiLCJib2R5IiwiYnIiLCJidXR0b24iLCJjYW52YXMiLCJjYXB0aW9uIiwiY2VudGVyIiwiY2l0ZSIsImNvZGUiLCJjb2wiLCJjb2xncm91cCIsImNvbnRlbnQiLCJkYXRhIiwiZGF0YWxpc3QiLCJkZCIsImRlY29yYXRvciIsImRlbCIsImRldGFpbHMiLCJkZm4iLCJkaWFsb2ciLCJkaXIiLCJkaXYiLCJkbCIsImR0IiwiZWxlbWVudCIsImVtIiwiZmllbGRzZXQiLCJmaWdjYXB0aW9uIiwiZmlndXJlIiwiZm9udCIsImZvb3RlciIsImZvcm0iLCJoMSIsImgyIiwiaDMiLCJoNCIsImg1IiwiaDYiLCJoZWFkIiwiaGVhZGVyIiwiaGdyb3VwIiwiaHIiLCJodG1sIiwiaSIsImltZyIsImlucHV0IiwiaW5zIiwia2JkIiwibGFiZWwiLCJsZWdlbmQiLCJsaSIsIm1haW4iLCJtYXAiLCJtYXJrIiwibWFycXVlZSIsIm1lbnUiLCJtZW51aXRlbSIsIm1ldGVyIiwibmF2Iiwibm9iciIsIm9sIiwib3B0Z3JvdXAiLCJvcHRpb24iLCJvdXRwdXQiLCJwIiwicGljdHVyZSIsInByZSIsInByb2dyZXNzIiwicSIsInJwIiwicnQiLCJydWJ5IiwicyIsInNhbXAiLCJzZWN0aW9uIiwic2VsZWN0Iiwic2hhZG93Iiwic21hbGwiLCJzb3VyY2UiLCJzcGFjZXIiLCJzcGFuIiwic3RyaWtlIiwic3Ryb25nIiwic3R5bGUiLCJzdWIiLCJzdW1tYXJ5Iiwic3VwIiwidGFibGUiLCJ0Ym9keSIsInRkIiwidGVtcGxhdGUiLCJ0ZXh0YXJlYSIsInRmb290IiwidGgiLCJ0aGVhZCIsInRpbWUiLCJ0ciIsInRyYWNrIiwidHQiLCJ1IiwidWwiLCJ2YXIiLCJ2aWRlbyIsIndiciJdKSxxMXQ9c2coWyJzdmciLCJhIiwiYWx0Z2x5cGgiLCJhbHRnbHlwaGRlZiIsImFsdGdseXBoaXRlbSIsImFuaW1hdGVjb2xvciIsImFuaW1hdGVtb3Rpb24iLCJhbmltYXRldHJhbnNmb3JtIiwiY2lyY2xlIiwiY2xpcHBhdGgiLCJkZWZzIiwiZGVzYyIsImVsbGlwc2UiLCJmaWx0ZXIiLCJmb250IiwiZyIsImdseXBoIiwiZ2x5cGhyZWYiLCJoa2VybiIsImltYWdlIiwibGluZSIsImxpbmVhcmdyYWRpZW50IiwibWFya2VyIiwibWFzayIsIm1ldGFkYXRhIiwibXBhdGgiLCJwYXRoIiwicGF0dGVybiIsInBvbHlnb24iLCJwb2x5bGluZSIsInJhZGlhbGdyYWRpZW50IiwicmVjdCIsInN0b3AiLCJzdHlsZSIsInN3aXRjaCIsInN5bWJvbCIsInRleHQiLCJ0ZXh0cGF0aCIsInRpdGxlIiwidHJlZiIsInRzcGFuIiwidmlldyIsInZrZXJuIl0pLEgxdD1zZyhbImZlQmxlbmQiLCJmZUNvbG9yTWF0cml4IiwiZmVDb21wb25lbnRUcmFuc2ZlciIsImZlQ29tcG9zaXRlIiwiZmVDb252b2x2ZU1hdHJpeCIsImZlRGlmZnVzZUxpZ2h0aW5nIiwiZmVEaXNwbGFjZW1lbnRNYXAiLCJmZURpc3RhbnRMaWdodCIsImZlRHJvcFNoYWRvdyIsImZlRmxvb2QiLCJmZUZ1bmNBIiwiZmVGdW5jQiIsImZlRnVuY0ciLCJmZUZ1bmNSIiwiZmVHYXVzc2lhbkJsdXIiLCJmZUltYWdlIiwiZmVNZXJnZSIsImZlTWVyZ2VOb2RlIiwiZmVNb3JwaG9sb2d5IiwiZmVPZmZzZXQiLCJmZVBvaW50TGlnaHQiLCJmZVNwZWN1bGFyTGlnaHRpbmciLCJmZVNwb3RMaWdodCIsImZlVGlsZSIsImZlVHVyYnVsZW5jZSJdKSxkOWU9c2coWyJhbmltYXRlIiwiY29sb3ItcHJvZmlsZSIsImN1cnNvciIsImRpc2NhcmQiLCJmb250LWZhY2UiLCJmb250LWZhY2UtZm9ybWF0IiwiZm9udC1mYWNlLW5hbWUiLCJmb250LWZhY2Utc3JjIiwiZm9udC1mYWNlLXVyaSIsImZvcmVpZ25vYmplY3QiLCJoYXRjaCIsImhhdGNocGF0aCIsIm1lc2giLCJtZXNoZ3JhZGllbnQiLCJtZXNocGF0Y2giLCJtZXNocm93IiwibWlzc2luZy1nbHlwaCIsInNjcmlwdCIsInNldCIsInNvbGlkY29sb3IiLCJ1bmtub3duIiwidXNlIl0pLFYxdD1zZyhbIm1hdGgiLCJtZW5jbG9zZSIsIm1lcnJvciIsIm1mZW5jZWQiLCJtZnJhYyIsIm1nbHlwaCIsIm1pIiwibWxhYmVsZWR0ciIsIm1tdWx0aXNjcmlwdHMiLCJtbiIsIm1vIiwibW92ZXIiLCJtcGFkZGVkIiwibXBoYW50b20iLCJtcm9vdCIsIm1yb3ciLCJtcyIsIm1zcGFjZSIsIm1zcXJ0IiwibXN0eWxlIiwibXN1YiIsIm1zdXAiLCJtc3Vic3VwIiwibXRhYmxlIiwibXRkIiwibXRleHQiLCJtdHIiLCJtdW5kZXIiLCJtdW5kZXJvdmVyIiwibXByZXNjcmlwdHMiXSksZzllPXNnKFsibWFjdGlvbiIsIm1hbGlnbmdyb3VwIiwibWFsaWdubWFyayIsIm1sb25nZGl2IiwibXNjYXJyaWVzIiwibXNjYXJyeSIsIm1zZ3JvdXAiLCJtc3RhY2siLCJtc2xpbmUiLCJtc3JvdyIsInNlbWFudGljcyIsImFubm90YXRpb24iLCJhbm5vdGF0aW9uLXhtbCIsIm1wcmVzY3JpcHRzIiwibm9uZSJdKSxSRHQ9c2coWyIjdGV4dCJdKSxqRHQ9c2coWyJhY2NlcHQiLCJhY3Rpb24iLCJhbGlnbiIsImFsdCIsImF1dG9jYXBpdGFsaXplIiwiYXV0b2NvbXBsZXRlIiwiYXV0b3BpY3R1cmVpbnBpY3R1cmUiLCJhdXRvcGxheSIsImJhY2tncm91bmQiLCJiZ2NvbG9yIiwiYm9yZGVyIiwiY2FwdHVyZSIsImNlbGxwYWRkaW5nIiwiY2VsbHNwYWNpbmciLCJjaGVja2VkIiwiY2l0ZSIsImNsYXNzIiwiY2xlYXIiLCJjb2xvciIsImNvbHMiLCJjb2xzcGFuIiwiY29udHJvbHMiLCJjb250cm9sc2xpc3QiLCJjb29yZHMiLCJjcm9zc29yaWdpbiIsImRhdGV0aW1lIiwiZGVjb2RpbmciLCJkZWZhdWx0IiwiZGlyIiwiZGlzYWJsZWQiLCJkaXNhYmxlcGljdHVyZWlucGljdHVyZSIsImRpc2FibGVyZW1vdGVwbGF5YmFjayIsImRvd25sb2FkIiwiZHJhZ2dhYmxlIiwiZW5jdHlwZSIsImVudGVya2V5aGludCIsImZhY2UiLCJmb3IiLCJoZWFkZXJzIiwiaGVpZ2h0IiwiaGlkZGVuIiwiaGlnaCIsImhyZWYiLCJocmVmbGFuZyIsImlkIiwiaW5wdXRtb2RlIiwiaW50ZWdyaXR5IiwiaXNtYXAiLCJraW5kIiwibGFiZWwiLCJsYW5nIiwibGlzdCIsImxvYWRpbmciLCJsb29wIiwibG93IiwibWF4IiwibWF4bGVuZ3RoIiwibWVkaWEiLCJtZXRob2QiLCJtaW4iLCJtaW5sZW5ndGgiLCJtdWx0aXBsZSIsIm11dGVkIiwibmFtZSIsIm5vbmNlIiwibm9zaGFkZSIsIm5vdmFsaWRhdGUiLCJub3dyYXAiLCJvcGVuIiwib3B0aW11bSIsInBhdHRlcm4iLCJwbGFjZWhvbGRlciIsInBsYXlzaW5saW5lIiwicG9zdGVyIiwicHJlbG9hZCIsInB1YmRhdGUiLCJyYWRpb2dyb3VwIiwicmVhZG9ubHkiLCJyZWwiLCJyZXF1aXJlZCIsInJldiIsInJldmVyc2VkIiwicm9sZSIsInJvd3MiLCJyb3dzcGFuIiwic3BlbGxjaGVjayIsInNjb3BlIiwic2VsZWN0ZWQiLCJzaGFwZSIsInNpemUiLCJzaXplcyIsInNwYW4iLCJzcmNsYW5nIiwic3RhcnQiLCJzcmMiLCJzcmNzZXQiLCJzdGVwIiwic3R5bGUiLCJzdW1tYXJ5IiwidGFiaW5kZXgiLCJ0aXRsZSIsInRyYW5zbGF0ZSIsInR5cGUiLCJ1c2VtYXAiLCJ2YWxpZ24iLCJ2YWx1ZSIsIndpZHRoIiwieG1sbnMiLCJzbG90Il0pLEcxdD1zZyhbImFjY2VudC1oZWlnaHQiLCJhY2N1bXVsYXRlIiwiYWRkaXRpdmUiLCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJhc2NlbnQiLCJhdHRyaWJ1dGVuYW1lIiwiYXR0cmlidXRldHlwZSIsImF6aW11dGgiLCJiYXNlZnJlcXVlbmN5IiwiYmFzZWxpbmUtc2hpZnQiLCJiZWdpbiIsImJpYXMiLCJieSIsImNsYXNzIiwiY2xpcCIsImNsaXBwYXRodW5pdHMiLCJjbGlwLXBhdGgiLCJjbGlwLXJ1bGUiLCJjb2xvciIsImNvbG9yLWludGVycG9sYXRpb24iLCJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMiLCJjb2xvci1wcm9maWxlIiwiY29sb3ItcmVuZGVyaW5nIiwiY3giLCJjeSIsImQiLCJkeCIsImR5IiwiZGlmZnVzZWNvbnN0YW50IiwiZGlyZWN0aW9uIiwiZGlzcGxheSIsImRpdmlzb3IiLCJkdXIiLCJlZGdlbW9kZSIsImVsZXZhdGlvbiIsImVuZCIsImZpbGwiLCJmaWxsLW9wYWNpdHkiLCJmaWxsLXJ1bGUiLCJmaWx0ZXIiLCJmaWx0ZXJ1bml0cyIsImZsb29kLWNvbG9yIiwiZmxvb2Qtb3BhY2l0eSIsImZvbnQtZmFtaWx5IiwiZm9udC1zaXplIiwiZm9udC1zaXplLWFkanVzdCIsImZvbnQtc3RyZXRjaCIsImZvbnQtc3R5bGUiLCJmb250LXZhcmlhbnQiLCJmb250LXdlaWdodCIsImZ4IiwiZnkiLCJnMSIsImcyIiwiZ2x5cGgtbmFtZSIsImdseXBocmVmIiwiZ3JhZGllbnR1bml0cyIsImdyYWRpZW50dHJhbnNmb3JtIiwiaGVpZ2h0IiwiaHJlZiIsImlkIiwiaW1hZ2UtcmVuZGVyaW5nIiwiaW4iLCJpbjIiLCJrIiwiazEiLCJrMiIsImszIiwiazQiLCJrZXJuaW5nIiwia2V5cG9pbnRzIiwia2V5c3BsaW5lcyIsImtleXRpbWVzIiwibGFuZyIsImxlbmd0aGFkanVzdCIsImxldHRlci1zcGFjaW5nIiwia2VybmVsbWF0cml4Iiwia2VybmVsdW5pdGxlbmd0aCIsImxpZ2h0aW5nLWNvbG9yIiwibG9jYWwiLCJtYXJrZXItZW5kIiwibWFya2VyLW1pZCIsIm1hcmtlci1zdGFydCIsIm1hcmtlcmhlaWdodCIsIm1hcmtlcnVuaXRzIiwibWFya2Vyd2lkdGgiLCJtYXNrY29udGVudHVuaXRzIiwibWFza3VuaXRzIiwibWF4IiwibWFzayIsIm1lZGlhIiwibWV0aG9kIiwibW9kZSIsIm1pbiIsIm5hbWUiLCJudW1vY3RhdmVzIiwib2Zmc2V0Iiwib3BlcmF0b3IiLCJvcGFjaXR5Iiwib3JkZXIiLCJvcmllbnQiLCJvcmllbnRhdGlvbiIsIm9yaWdpbiIsIm92ZXJmbG93IiwicGFpbnQtb3JkZXIiLCJwYXRoIiwicGF0aGxlbmd0aCIsInBhdHRlcm5jb250ZW50dW5pdHMiLCJwYXR0ZXJudHJhbnNmb3JtIiwicGF0dGVybnVuaXRzIiwicG9pbnRzIiwicHJlc2VydmVhbHBoYSIsInByZXNlcnZlYXNwZWN0cmF0aW8iLCJwcmltaXRpdmV1bml0cyIsInIiLCJyeCIsInJ5IiwicmFkaXVzIiwicmVmeCIsInJlZnkiLCJyZXBlYXRjb3VudCIsInJlcGVhdGR1ciIsInJlc3RhcnQiLCJyZXN1bHQiLCJyb3RhdGUiLCJzY2FsZSIsInNlZWQiLCJzaGFwZS1yZW5kZXJpbmciLCJzcGVjdWxhcmNvbnN0YW50Iiwic3BlY3VsYXJleHBvbmVudCIsInNwcmVhZG1ldGhvZCIsInN0YXJ0b2Zmc2V0Iiwic3RkZGV2aWF0aW9uIiwic3RpdGNodGlsZXMiLCJzdG9wLWNvbG9yIiwic3RvcC1vcGFjaXR5Iiwic3Ryb2tlLWRhc2hhcnJheSIsInN0cm9rZS1kYXNob2Zmc2V0Iiwic3Ryb2tlLWxpbmVjYXAiLCJzdHJva2UtbGluZWpvaW4iLCJzdHJva2UtbWl0ZXJsaW1pdCIsInN0cm9rZS1vcGFjaXR5Iiwic3Ryb2tlIiwic3Ryb2tlLXdpZHRoIiwic3R5bGUiLCJzdXJmYWNlc2NhbGUiLCJzeXN0ZW1sYW5ndWFnZSIsInRhYmluZGV4IiwidGFyZ2V0eCIsInRhcmdldHkiLCJ0cmFuc2Zvcm0iLCJ0cmFuc2Zvcm0tb3JpZ2luIiwidGV4dC1hbmNob3IiLCJ0ZXh0LWRlY29yYXRpb24iLCJ0ZXh0LXJlbmRlcmluZyIsInRleHRsZW5ndGgiLCJ0eXBlIiwidTEiLCJ1MiIsInVuaWNvZGUiLCJ2YWx1ZXMiLCJ2aWV3Ym94IiwidmlzaWJpbGl0eSIsInZlcnNpb24iLCJ2ZXJ0LWFkdi15IiwidmVydC1vcmlnaW4teCIsInZlcnQtb3JpZ2luLXkiLCJ3aWR0aCIsIndvcmQtc3BhY2luZyIsIndyYXAiLCJ3cml0aW5nLW1vZGUiLCJ4Y2hhbm5lbHNlbGVjdG9yIiwieWNoYW5uZWxzZWxlY3RvciIsIngiLCJ4MSIsIngyIiwieG1sbnMiLCJ5IiwieTEiLCJ5MiIsInoiLCJ6b29tYW5kcGFuIl0pLCREdD1zZyhbImFjY2VudCIsImFjY2VudHVuZGVyIiwiYWxpZ24iLCJiZXZlbGxlZCIsImNsb3NlIiwiY29sdW1uc2FsaWduIiwiY29sdW1ubGluZXMiLCJjb2x1bW5zcGFuIiwiZGVub21hbGlnbiIsImRlcHRoIiwiZGlyIiwiZGlzcGxheSIsImRpc3BsYXlzdHlsZSIsImVuY29kaW5nIiwiZmVuY2UiLCJmcmFtZSIsImhlaWdodCIsImhyZWYiLCJpZCIsImxhcmdlb3AiLCJsZW5ndGgiLCJsaW5ldGhpY2tuZXNzIiwibHNwYWNlIiwibHF1b3RlIiwibWF0aGJhY2tncm91bmQiLCJtYXRoY29sb3IiLCJtYXRoc2l6ZSIsIm1hdGh2YXJpYW50IiwibWF4c2l6ZSIsIm1pbnNpemUiLCJtb3ZhYmxlbGltaXRzIiwibm90YXRpb24iLCJudW1hbGlnbiIsIm9wZW4iLCJyb3dhbGlnbiIsInJvd2xpbmVzIiwicm93c3BhY2luZyIsInJvd3NwYW4iLCJyc3BhY2UiLCJycXVvdGUiLCJzY3JpcHRsZXZlbCIsInNjcmlwdG1pbnNpemUiLCJzY3JpcHRzaXplbXVsdGlwbGllciIsInNlbGVjdGlvbiIsInNlcGFyYXRvciIsInNlcGFyYXRvcnMiLCJzdHJldGNoeSIsInN1YnNjcmlwdHNoaWZ0Iiwic3Vwc2NyaXB0c2hpZnQiLCJzeW1tZXRyaWMiLCJ2b2Zmc2V0Iiwid2lkdGgiLCJ4bWxucyJdKSx0Vz1zZyhbInhsaW5rOmhyZWYiLCJ4bWw6aWQiLCJ4bGluazp0aXRsZSIsInhtbDpzcGFjZSIsInhtbG5zOnhsaW5rIl0pLHA5ZT1YdygvXHtce1tcd1xXXSp8W1x3XFddKlx9XH0vZ20pLGI5ZT1YdygvPCVbXHdcV10qfFtcd1xXXSolPi9nbSksdjllPVh3KC9cJHtbXHdcV10qfS9nbSksdzllPVh3KC9eZGF0YS1bXC1cdy5cdTAwQjctXHVGRkZGXS8pLG05ZT1YdygvXmFyaWEtW1wtXHddKyQvKSx6RHQ9WHcoL14oPzooPzooPzpmfGh0KXRwcz98bWFpbHRvfHRlbHxjYWxsdG98c21zfGNpZHx4bXBwKTp8W15hLXpdfFthLXorLlwtXSsoPzpbXmEteisuXC06XXwkKSkvaSkseTllPVh3KC9eKD86XHcrc2NyaXB0fGRhdGEpOi9pKSx4OWU9WHcoL1tcdTAwMDAtXHUwMDIwXHUwMEEwXHUxNjgwXHUxODBFXHUyMDAwLVx1MjAyOVx1MjA1Rlx1MzAwMF0vZykscUR0PVh3KC9eaHRtbCQvaSk7dmFyIEhEdD1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxNVVNUQUNIRV9FWFBSOnA5ZSxFUkJfRVhQUjpiOWUsVE1QTElUX0VYUFI6djllLERBVEFfQVRUUjp3OWUsQVJJQV9BVFRSOm05ZSxJU19BTExPV0VEX1VSSTp6RHQsSVNfU0NSSVBUX09SX0RBVEE6eTllLEFUVFJfV0hJVEVTUEFDRTp4OWUsRE9DVFlQRV9OQU1FOnFEdH0pO2NvbnN0IGs5ZT0oKT0+dHlwZW9mIHdpbmRvdz4idSI/bnVsbDp3aW5kb3csRTllPWZ1bmN0aW9uKGEsZil7aWYodHlwZW9mIGEhPSJvYmplY3QifHx0eXBlb2YgYS5jcmVhdGVQb2xpY3khPSJmdW5jdGlvbiIpcmV0dXJuIG51bGw7bGV0IHA9bnVsbDtjb25zdCB2PSJkYXRhLXR0LXBvbGljeS1zdWZmaXgiO2YmJmYuaGFzQXR0cmlidXRlKHYpJiYocD1mLmdldEF0dHJpYnV0ZSh2KSk7Y29uc3QgbT0iZG9tcHVyaWZ5IisocD8iIyIrcDoiIik7dHJ5e3JldHVybiBhLmNyZWF0ZVBvbGljeShtLHtjcmVhdGVIVE1MKGIpe3JldHVybiBifSxjcmVhdGVTY3JpcHRVUkwoYil7cmV0dXJuIGJ9fSl9Y2F0Y2h7cmV0dXJuIGNvbnNvbGUud2FybigiVHJ1c3RlZFR5cGVzIHBvbGljeSAiK20rIiBjb3VsZCBub3QgYmUgY3JlYXRlZC4iKSxudWxsfX07ZnVuY3Rpb24gVkR0KCl7bGV0IGk9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOms5ZSgpO2NvbnN0IGE9Vmk9PlZEdChWaSk7aWYoYS52ZXJzaW9uPSIzLjAuNSIsYS5yZW1vdmVkPVtdLCFpfHwhaS5kb2N1bWVudHx8aS5kb2N1bWVudC5ub2RlVHlwZSE9PTkpcmV0dXJuIGEuaXNTdXBwb3J0ZWQ9ITEsYTtjb25zdCBmPWkuZG9jdW1lbnQscD1mLmN1cnJlbnRTY3JpcHQ7bGV0e2RvY3VtZW50OnZ9PWk7Y29uc3R7RG9jdW1lbnRGcmFnbWVudDptLEhUTUxUZW1wbGF0ZUVsZW1lbnQ6YixOb2RlOkUsRWxlbWVudDpDLE5vZGVGaWx0ZXI6QSxOYW1lZE5vZGVNYXA6UD1pLk5hbWVkTm9kZU1hcHx8aS5Nb3pOYW1lZEF0dHJNYXAsSFRNTEZvcm1FbGVtZW50OkYsRE9NUGFyc2VyOmosdHJ1c3RlZFR5cGVzOlJ9PWksSD1DLnByb3RvdHlwZSxZPUpVKEgsImNsb25lTm9kZSIpLHJ0PUpVKEgsIm5leHRTaWJsaW5nIiksSj1KVShILCJjaGlsZE5vZGVzIiksaXQ9SlUoSCwicGFyZW50Tm9kZSIpO2lmKHR5cGVvZiBiPT0iZnVuY3Rpb24iKXtjb25zdCBWaT12LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7VmkuY29udGVudCYmVmkuY29udGVudC5vd25lckRvY3VtZW50JiYodj1WaS5jb250ZW50Lm93bmVyRG9jdW1lbnQpfWxldCBmdCxUdD0iIjtjb25zdHtpbXBsZW1lbnRhdGlvbjprdCxjcmVhdGVOb2RlSXRlcmF0b3I6bXQsY3JlYXRlRG9jdW1lbnRGcmFnbWVudDpjdCxnZXRFbGVtZW50c0J5VGFnTmFtZTp5dH09dix7aW1wb3J0Tm9kZTpzdH09ZjtsZXQgeHQ9e307YS5pc1N1cHBvcnRlZD10eXBlb2YgTkR0PT0iZnVuY3Rpb24iJiZ0eXBlb2YgaXQ9PSJmdW5jdGlvbiImJmt0JiZrdC5jcmVhdGVIVE1MRG9jdW1lbnQhPT12b2lkIDA7Y29uc3R7TVVTVEFDSEVfRVhQUjpodCxFUkJfRVhQUjpkdCxUTVBMSVRfRVhQUjpDdCxEQVRBX0FUVFI6dHQsQVJJQV9BVFRSOlB0LElTX1NDUklQVF9PUl9EQVRBOnB0LEFUVFJfV0hJVEVTUEFDRTpGdH09SER0O2xldHtJU19BTExPV0VEX1VSSTpYfT1IRHQsUnQ9bnVsbDtjb25zdCBCdD1fbyh7fSxbLi4uQkR0LC4uLnExdCwuLi5IMXQsLi4uVjF0LC4uLlJEdF0pO2xldCB2dD1udWxsO2NvbnN0IE90PV9vKHt9LFsuLi5qRHQsLi4uRzF0LC4uLiREdCwuLi50V10pO2xldCBWdD1PYmplY3Quc2VhbChPYmplY3QuY3JlYXRlKG51bGwse3RhZ05hbWVDaGVjazp7d3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsdmFsdWU6bnVsbH0sYXR0cmlidXRlTmFtZUNoZWNrOnt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx2YWx1ZTpudWxsfSxhbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHM6e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLHZhbHVlOiExfX0pKSxxZT1udWxsLF9uPW51bGwsVGU9ITAsV249ITAsQWU9ITEsbmU9ITAsa2U9ITEsVmU9ITEsRWU9ITEsSGU9ITEsQ2U9ITEsJGU9ITEseWU9ITEsZm49ITAsWXQ9ITE7Y29uc3QgTWk9InVzZXItY29udGVudC0iO2xldCBxdD0hMCx6aT0hMSxTZT17fSxraT1udWxsO2NvbnN0IFJpPV9vKHt9LFsiYW5ub3RhdGlvbi14bWwiLCJhdWRpbyIsImNvbGdyb3VwIiwiZGVzYyIsImZvcmVpZ25vYmplY3QiLCJoZWFkIiwiaWZyYW1lIiwibWF0aCIsIm1pIiwibW4iLCJtbyIsIm1zIiwibXRleHQiLCJub2VtYmVkIiwibm9mcmFtZXMiLCJub3NjcmlwdCIsInBsYWludGV4dCIsInNjcmlwdCIsInN0eWxlIiwic3ZnIiwidGVtcGxhdGUiLCJ0aGVhZCIsInRpdGxlIiwidmlkZW8iLCJ4bXAiXSk7bGV0IHBpPW51bGw7Y29uc3QgYmk9X28oe30sWyJhdWRpbyIsInZpZGVvIiwiaW1nIiwic291cmNlIiwiaW1hZ2UiLCJ0cmFjayJdKTtsZXQgZG49bnVsbDtjb25zdCBObj1fbyh7fSxbImFsdCIsImNsYXNzIiwiZm9yIiwiaWQiLCJsYWJlbCIsIm5hbWUiLCJwYXR0ZXJuIiwicGxhY2Vob2xkZXIiLCJyb2xlIiwic3VtbWFyeSIsInRpdGxlIiwidmFsdWUiLCJzdHlsZSIsInhtbG5zIl0pLFdyPSJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIixMaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGlzPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjtsZXQgVHM9aXMsQWE9ITEsWGk9bnVsbDtjb25zdCBHYT1fbyh7fSxbV3IsTGksaXNdLHoxdCk7bGV0IF9yO2NvbnN0IHFyPVsiYXBwbGljYXRpb24veGh0bWwreG1sIiwidGV4dC9odG1sIl0sT2k9InRleHQvaHRtbCI7bGV0IGdyLEpzPW51bGw7Y29uc3QgVm49di5jcmVhdGVFbGVtZW50KCJmb3JtIiksWGM9ZnVuY3Rpb24oS2Upe3JldHVybiBLZSBpbnN0YW5jZW9mIFJlZ0V4cHx8S2UgaW5zdGFuY2VvZiBGdW5jdGlvbn0sRXI9ZnVuY3Rpb24oS2Upe2lmKCEoSnMmJkpzPT09S2UpKXtpZigoIUtlfHx0eXBlb2YgS2UhPSJvYmplY3QiKSYmKEtlPXt9KSxLZT1EQShLZSksX3I9cXIuaW5kZXhPZihLZS5QQVJTRVJfTUVESUFfVFlQRSk9PT0tMT9fcj1PaTpfcj1LZS5QQVJTRVJfTUVESUFfVFlQRSxncj1fcj09PSJhcHBsaWNhdGlvbi94aHRtbCt4bWwiP3oxdDpaVSxSdD0iQUxMT1dFRF9UQUdTImluIEtlP19vKHt9LEtlLkFMTE9XRURfVEFHUyxncik6QnQsdnQ9IkFMTE9XRURfQVRUUiJpbiBLZT9fbyh7fSxLZS5BTExPV0VEX0FUVFIsZ3IpOk90LFhpPSJBTExPV0VEX05BTUVTUEFDRVMiaW4gS2U/X28oe30sS2UuQUxMT1dFRF9OQU1FU1BBQ0VTLHoxdCk6R2EsZG49IkFERF9VUklfU0FGRV9BVFRSImluIEtlP19vKERBKE5uKSxLZS5BRERfVVJJX1NBRkVfQVRUUixncik6Tm4scGk9IkFERF9EQVRBX1VSSV9UQUdTImluIEtlP19vKERBKGJpKSxLZS5BRERfREFUQV9VUklfVEFHUyxncik6Ymksa2k9IkZPUkJJRF9DT05URU5UUyJpbiBLZT9fbyh7fSxLZS5GT1JCSURfQ09OVEVOVFMsZ3IpOlJpLHFlPSJGT1JCSURfVEFHUyJpbiBLZT9fbyh7fSxLZS5GT1JCSURfVEFHUyxncik6e30sX249IkZPUkJJRF9BVFRSImluIEtlP19vKHt9LEtlLkZPUkJJRF9BVFRSLGdyKTp7fSxTZT0iVVNFX1BST0ZJTEVTImluIEtlP0tlLlVTRV9QUk9GSUxFUzohMSxUZT1LZS5BTExPV19BUklBX0FUVFIhPT0hMSxXbj1LZS5BTExPV19EQVRBX0FUVFIhPT0hMSxBZT1LZS5BTExPV19VTktOT1dOX1BST1RPQ09MU3x8ITEsbmU9S2UuQUxMT1dfU0VMRl9DTE9TRV9JTl9BVFRSIT09ITEsa2U9S2UuU0FGRV9GT1JfVEVNUExBVEVTfHwhMSxWZT1LZS5XSE9MRV9ET0NVTUVOVHx8ITEsQ2U9S2UuUkVUVVJOX0RPTXx8ITEsJGU9S2UuUkVUVVJOX0RPTV9GUkFHTUVOVHx8ITEseWU9S2UuUkVUVVJOX1RSVVNURURfVFlQRXx8ITEsSGU9S2UuRk9SQ0VfQk9EWXx8ITEsZm49S2UuU0FOSVRJWkVfRE9NIT09ITEsWXQ9S2UuU0FOSVRJWkVfTkFNRURfUFJPUFN8fCExLHF0PUtlLktFRVBfQ09OVEVOVCE9PSExLHppPUtlLklOX1BMQUNFfHwhMSxYPUtlLkFMTE9XRURfVVJJX1JFR0VYUHx8ekR0LFRzPUtlLk5BTUVTUEFDRXx8aXMsVnQ9S2UuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkd8fHt9LEtlLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HJiZYYyhLZS5DVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2spJiYoVnQudGFnTmFtZUNoZWNrPUtlLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayksS2UuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcmJlhjKEtlLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjaykmJihWdC5hdHRyaWJ1dGVOYW1lQ2hlY2s9S2UuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrKSxLZS5DVVNUT01fRUxFTUVOVF9IQU5ETElORyYmdHlwZW9mIEtlLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cz09ImJvb2xlYW4iJiYoVnQuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzPUtlLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cyksa2UmJihXbj0hMSksJGUmJihDZT0hMCksU2UmJihSdD1fbyh7fSxbLi4uUkR0XSksdnQ9W10sU2UuaHRtbD09PSEwJiYoX28oUnQsQkR0KSxfbyh2dCxqRHQpKSxTZS5zdmc9PT0hMCYmKF9vKFJ0LHExdCksX28odnQsRzF0KSxfbyh2dCx0VykpLFNlLnN2Z0ZpbHRlcnM9PT0hMCYmKF9vKFJ0LEgxdCksX28odnQsRzF0KSxfbyh2dCx0VykpLFNlLm1hdGhNbD09PSEwJiYoX28oUnQsVjF0KSxfbyh2dCwkRHQpLF9vKHZ0LHRXKSkpLEtlLkFERF9UQUdTJiYoUnQ9PT1CdCYmKFJ0PURBKFJ0KSksX28oUnQsS2UuQUREX1RBR1MsZ3IpKSxLZS5BRERfQVRUUiYmKHZ0PT09T3QmJih2dD1EQSh2dCkpLF9vKHZ0LEtlLkFERF9BVFRSLGdyKSksS2UuQUREX1VSSV9TQUZFX0FUVFImJl9vKGRuLEtlLkFERF9VUklfU0FGRV9BVFRSLGdyKSxLZS5GT1JCSURfQ09OVEVOVFMmJihraT09PVJpJiYoa2k9REEoa2kpKSxfbyhraSxLZS5GT1JCSURfQ09OVEVOVFMsZ3IpKSxxdCYmKFJ0WyIjdGV4dCJdPSEwKSxWZSYmX28oUnQsWyJodG1sIiwiaGVhZCIsImJvZHkiXSksUnQudGFibGUmJihfbyhSdCxbInRib2R5Il0pLGRlbGV0ZSBxZS50Ym9keSksS2UuVFJVU1RFRF9UWVBFU19QT0xJQ1kpe2lmKHR5cGVvZiBLZS5UUlVTVEVEX1RZUEVTX1BPTElDWS5jcmVhdGVIVE1MIT0iZnVuY3Rpb24iKXRocm93IGpOKCdUUlVTVEVEX1RZUEVTX1BPTElDWSBjb25maWd1cmF0aW9uIG9wdGlvbiBtdXN0IHByb3ZpZGUgYSAiY3JlYXRlSFRNTCIgaG9vay4nKTtpZih0eXBlb2YgS2UuVFJVU1RFRF9UWVBFU19QT0xJQ1kuY3JlYXRlU2NyaXB0VVJMIT0iZnVuY3Rpb24iKXRocm93IGpOKCdUUlVTVEVEX1RZUEVTX1BPTElDWSBjb25maWd1cmF0aW9uIG9wdGlvbiBtdXN0IHByb3ZpZGUgYSAiY3JlYXRlU2NyaXB0VVJMIiBob29rLicpO2Z0PUtlLlRSVVNURURfVFlQRVNfUE9MSUNZLFR0PWZ0LmNyZWF0ZUhUTUwoIiIpfWVsc2UgZnQ9PT12b2lkIDAmJihmdD1FOWUoUixwKSksZnQhPT1udWxsJiZ0eXBlb2YgVHQ9PSJzdHJpbmciJiYoVHQ9ZnQuY3JlYXRlSFRNTCgiIikpO3NnJiZzZyhLZSksSnM9S2V9fSxNYz1fbyh7fSxbIm1pIiwibW8iLCJtbiIsIm1zIiwibXRleHQiXSksYnA9X28oe30sWyJmb3JlaWdub2JqZWN0IiwiZGVzYyIsInRpdGxlIiwiYW5ub3RhdGlvbi14bWwiXSksZm09X28oe30sWyJ0aXRsZSIsInN0eWxlIiwiZm9udCIsImEiLCJzY3JpcHQiXSksVDA9X28oe30scTF0KTtfbyhUMCxIMXQpLF9vKFQwLGQ5ZSk7Y29uc3QgRmQ9X28oe30sVjF0KTtfbyhGZCxnOWUpO2NvbnN0IE5vPWZ1bmN0aW9uKEtlKXtsZXQga3I9aXQoS2UpOygha3J8fCFrci50YWdOYW1lKSYmKGtyPXtuYW1lc3BhY2VVUkk6VHMsdGFnTmFtZToidGVtcGxhdGUifSk7Y29uc3Qgbmk9WlUoS2UudGFnTmFtZSksZW89WlUoa3IudGFnTmFtZSk7cmV0dXJuIFhpW0tlLm5hbWVzcGFjZVVSSV0/S2UubmFtZXNwYWNlVVJJPT09TGk/a3IubmFtZXNwYWNlVVJJPT09aXM/bmk9PT0ic3ZnIjprci5uYW1lc3BhY2VVUkk9PT1Xcj9uaT09PSJzdmciJiYoZW89PT0iYW5ub3RhdGlvbi14bWwifHxNY1tlb10pOiEhVDBbbmldOktlLm5hbWVzcGFjZVVSST09PVdyP2tyLm5hbWVzcGFjZVVSST09PWlzP25pPT09Im1hdGgiOmtyLm5hbWVzcGFjZVVSST09PUxpP25pPT09Im1hdGgiJiZicFtlb106ISFGZFtuaV06S2UubmFtZXNwYWNlVVJJPT09aXM/a3IubmFtZXNwYWNlVVJJPT09TGkmJiFicFtlb118fGtyLm5hbWVzcGFjZVVSST09PVdyJiYhTWNbZW9dPyExOiFGZFtuaV0mJihmbVtuaV18fCFUMFtuaV0pOiEhKF9yPT09ImFwcGxpY2F0aW9uL3hodG1sK3htbCImJlhpW0tlLm5hbWVzcGFjZVVSSV0pOiExfSx0YT1mdW5jdGlvbihLZSl7Uk4oYS5yZW1vdmVkLHtlbGVtZW50OktlfSk7dHJ5e0tlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoS2UpfWNhdGNoe0tlLnJlbW92ZSgpfX0sYnU9ZnVuY3Rpb24oS2Usa3Ipe3RyeXtSTihhLnJlbW92ZWQse2F0dHJpYnV0ZTprci5nZXRBdHRyaWJ1dGVOb2RlKEtlKSxmcm9tOmtyfSl9Y2F0Y2h7Uk4oYS5yZW1vdmVkLHthdHRyaWJ1dGU6bnVsbCxmcm9tOmtyfSl9aWYoa3IucmVtb3ZlQXR0cmlidXRlKEtlKSxLZT09PSJpcyImJiF2dFtLZV0paWYoQ2V8fCRlKXRyeXt0YShrcil9Y2F0Y2h7fWVsc2UgdHJ5e2tyLnNldEF0dHJpYnV0ZShLZSwiIil9Y2F0Y2h7fX0sUHU9ZnVuY3Rpb24oS2Upe2xldCBrcixuaTtpZihIZSlLZT0iPHJlbW92ZT48L3JlbW92ZT4iK0tlO2Vsc2V7Y29uc3QgSnU9dTllKEtlLC9eW1xyXG5cdCBdKy8pO25pPUp1JiZKdVswXX1fcj09PSJhcHBsaWNhdGlvbi94aHRtbCt4bWwiJiZUcz09PWlzJiYoS2U9JzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj48aGVhZD48L2hlYWQ+PGJvZHk+JytLZSsiPC9ib2R5PjwvaHRtbD4iKTtjb25zdCBlbz1mdD9mdC5jcmVhdGVIVE1MKEtlKTpLZTtpZihUcz09PWlzKXRyeXtrcj1uZXcgaigpLnBhcnNlRnJvbVN0cmluZyhlbyxfcil9Y2F0Y2h7fWlmKCFrcnx8IWtyLmRvY3VtZW50RWxlbWVudCl7a3I9a3QuY3JlYXRlRG9jdW1lbnQoVHMsInRlbXBsYXRlIixudWxsKTt0cnl7a3IuZG9jdW1lbnRFbGVtZW50LmlubmVySFRNTD1BYT9UdDplb31jYXRjaHt9fWNvbnN0IERjPWtyLmJvZHl8fGtyLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gS2UmJm5pJiZEYy5pbnNlcnRCZWZvcmUodi5jcmVhdGVUZXh0Tm9kZShuaSksRGMuY2hpbGROb2Rlc1swXXx8bnVsbCksVHM9PT1pcz95dC5jYWxsKGtyLFZlPyJodG1sIjoiYm9keSIpWzBdOlZlP2tyLmRvY3VtZW50RWxlbWVudDpEY30sbG89ZnVuY3Rpb24oS2Upe3JldHVybiBtdC5jYWxsKEtlLm93bmVyRG9jdW1lbnR8fEtlLEtlLEEuU0hPV19FTEVNRU5UfEEuU0hPV19DT01NRU5UfEEuU0hPV19URVhULG51bGwsITEpfSxtbz1mdW5jdGlvbihLZSl7cmV0dXJuIEtlIGluc3RhbmNlb2YgRiYmKHR5cGVvZiBLZS5ub2RlTmFtZSE9InN0cmluZyJ8fHR5cGVvZiBLZS50ZXh0Q29udGVudCE9InN0cmluZyJ8fHR5cGVvZiBLZS5yZW1vdmVDaGlsZCE9ImZ1bmN0aW9uInx8IShLZS5hdHRyaWJ1dGVzIGluc3RhbmNlb2YgUCl8fHR5cGVvZiBLZS5yZW1vdmVBdHRyaWJ1dGUhPSJmdW5jdGlvbiJ8fHR5cGVvZiBLZS5zZXRBdHRyaWJ1dGUhPSJmdW5jdGlvbiJ8fHR5cGVvZiBLZS5uYW1lc3BhY2VVUkkhPSJzdHJpbmcifHx0eXBlb2YgS2UuaW5zZXJ0QmVmb3JlIT0iZnVuY3Rpb24ifHx0eXBlb2YgS2UuaGFzQ2hpbGROb2RlcyE9ImZ1bmN0aW9uIil9LE9zPWZ1bmN0aW9uKEtlKXtyZXR1cm4gdHlwZW9mIEU9PSJvYmplY3QiP0tlIGluc3RhbmNlb2YgRTpLZSYmdHlwZW9mIEtlPT0ib2JqZWN0IiYmdHlwZW9mIEtlLm5vZGVUeXBlPT0ibnVtYmVyIiYmdHlwZW9mIEtlLm5vZGVOYW1lPT0ic3RyaW5nIn0sVGw9ZnVuY3Rpb24oS2Usa3Isbmkpe3h0W0tlXSYmYzllKHh0W0tlXSxlbz0+e2VvLmNhbGwoYSxrcixuaSxKcyl9KX0sRnU9ZnVuY3Rpb24oS2Upe2xldCBrcjtpZihUbCgiYmVmb3JlU2FuaXRpemVFbGVtZW50cyIsS2UsbnVsbCksbW8oS2UpKXJldHVybiB0YShLZSksITA7Y29uc3Qgbmk9Z3IoS2Uubm9kZU5hbWUpO2lmKFRsKCJ1cG9uU2FuaXRpemVFbGVtZW50IixLZSx7dGFnTmFtZTpuaSxhbGxvd2VkVGFnczpSdH0pLEtlLmhhc0NoaWxkTm9kZXMoKSYmIU9zKEtlLmZpcnN0RWxlbWVudENoaWxkKSYmKCFPcyhLZS5jb250ZW50KXx8IU9zKEtlLmNvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQpKSYmSWIoLzxbL1x3XS9nLEtlLmlubmVySFRNTCkmJkliKC88Wy9cd10vZyxLZS50ZXh0Q29udGVudCkpcmV0dXJuIHRhKEtlKSwhMDtpZighUnRbbmldfHxxZVtuaV0pe2lmKCFxZVtuaV0mJm5kKG5pKSYmKFZ0LnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCYmSWIoVnQudGFnTmFtZUNoZWNrLG5pKXx8VnQudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24mJlZ0LnRhZ05hbWVDaGVjayhuaSkpKXJldHVybiExO2lmKHF0JiYha2lbbmldKXtjb25zdCBlbz1pdChLZSl8fEtlLnBhcmVudE5vZGUsRGM9SihLZSl8fEtlLmNoaWxkTm9kZXM7aWYoRGMmJmVvKXtjb25zdCBKdT1EYy5sZW5ndGg7Zm9yKGxldCBRbz1KdS0xO1FvPj0wOy0tUW8pZW8uaW5zZXJ0QmVmb3JlKFkoRGNbUW9dLCEwKSxydChLZSkpfX1yZXR1cm4gdGEoS2UpLCEwfXJldHVybiBLZSBpbnN0YW5jZW9mIEMmJiFObyhLZSl8fChuaT09PSJub3NjcmlwdCJ8fG5pPT09Im5vZW1iZWQifHxuaT09PSJub2ZyYW1lcyIpJiZJYigvPFwvbm8oc2NyaXB0fGVtYmVkfGZyYW1lcykvaSxLZS5pbm5lckhUTUwpPyh0YShLZSksITApOihrZSYmS2Uubm9kZVR5cGU9PT0zJiYoa3I9S2UudGV4dENvbnRlbnQsa3I9UXcoa3IsaHQsIiAiKSxrcj1RdyhrcixkdCwiICIpLGtyPVF3KGtyLEN0LCIgIiksS2UudGV4dENvbnRlbnQhPT1rciYmKFJOKGEucmVtb3ZlZCx7ZWxlbWVudDpLZS5jbG9uZU5vZGUoKX0pLEtlLnRleHRDb250ZW50PWtyKSksVGwoImFmdGVyU2FuaXRpemVFbGVtZW50cyIsS2UsbnVsbCksITEpfSx6bz1mdW5jdGlvbihLZSxrcixuaSl7aWYoZm4mJihrcj09PSJpZCJ8fGtyPT09Im5hbWUiKSYmKG5pIGluIHZ8fG5pIGluIFZuKSlyZXR1cm4hMTtpZighKFduJiYhX25ba3JdJiZJYih0dCxrcikpKXtpZighKFRlJiZJYihQdCxrcikpKXtpZighdnRba3JdfHxfbltrcl0pe2lmKCEobmQoS2UpJiYoVnQudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZJYihWdC50YWdOYW1lQ2hlY2ssS2UpfHxWdC50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmVnQudGFnTmFtZUNoZWNrKEtlKSkmJihWdC5hdHRyaWJ1dGVOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJkliKFZ0LmF0dHJpYnV0ZU5hbWVDaGVjayxrcil8fFZ0LmF0dHJpYnV0ZU5hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZWdC5hdHRyaWJ1dGVOYW1lQ2hlY2soa3IpKXx8a3I9PT0iaXMiJiZWdC5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMmJihWdC50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJkliKFZ0LnRhZ05hbWVDaGVjayxuaSl8fFZ0LnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZWdC50YWdOYW1lQ2hlY2sobmkpKSkpcmV0dXJuITF9ZWxzZSBpZighZG5ba3JdKXtpZighSWIoWCxRdyhuaSxGdCwiIikpKXtpZighKChrcj09PSJzcmMifHxrcj09PSJ4bGluazpocmVmInx8a3I9PT0iaHJlZiIpJiZLZSE9PSJzY3JpcHQiJiZsOWUobmksImRhdGE6Iik9PT0wJiZwaVtLZV0pKXtpZighKEFlJiYhSWIocHQsUXcobmksRnQsIiIpKSkpe2lmKG5pKXJldHVybiExfX19fX19cmV0dXJuITB9LG5kPWZ1bmN0aW9uKEtlKXtyZXR1cm4gS2UuaW5kZXhPZigiLSIpPjB9LHNmPWZ1bmN0aW9uKEtlKXtsZXQga3IsbmksZW8sRGM7VGwoImJlZm9yZVNhbml0aXplQXR0cmlidXRlcyIsS2UsbnVsbCk7Y29uc3R7YXR0cmlidXRlczpKdX09S2U7aWYoIUp1KXJldHVybjtjb25zdCBRbz17YXR0ck5hbWU6IiIsYXR0clZhbHVlOiIiLGtlZXBBdHRyOiEwLGFsbG93ZWRBdHRyaWJ1dGVzOnZ0fTtmb3IoRGM9SnUubGVuZ3RoO0RjLS07KXtrcj1KdVtEY107Y29uc3R7bmFtZTpqZixuYW1lc3BhY2VVUkk6cmh9PWtyO2lmKG5pPWpmPT09InZhbHVlIj9rci52YWx1ZTpoOWUoa3IudmFsdWUpLGVvPWdyKGpmKSxRby5hdHRyTmFtZT1lbyxRby5hdHRyVmFsdWU9bmksUW8ua2VlcEF0dHI9ITAsUW8uZm9yY2VLZWVwQXR0cj12b2lkIDAsVGwoInVwb25TYW5pdGl6ZUF0dHJpYnV0ZSIsS2UsUW8pLG5pPVFvLmF0dHJWYWx1ZSxRby5mb3JjZUtlZXBBdHRyfHwoYnUoamYsS2UpLCFRby5rZWVwQXR0cikpY29udGludWU7aWYoIW5lJiZJYigvXC8+L2ksbmkpKXtidShqZixLZSk7Y29udGludWV9a2UmJihuaT1RdyhuaSxodCwiICIpLG5pPVF3KG5pLGR0LCIgIiksbmk9UXcobmksQ3QsIiAiKSk7Y29uc3QgZG09Z3IoS2Uubm9kZU5hbWUpO2lmKHpvKGRtLGVvLG5pKSl7aWYoWXQmJihlbz09PSJpZCJ8fGVvPT09Im5hbWUiKSYmKGJ1KGpmLEtlKSxuaT1NaStuaSksZnQmJnR5cGVvZiBSPT0ib2JqZWN0IiYmdHlwZW9mIFIuZ2V0QXR0cmlidXRlVHlwZT09ImZ1bmN0aW9uIiYmIXJoKXN3aXRjaChSLmdldEF0dHJpYnV0ZVR5cGUoZG0sZW8pKXtjYXNlIlRydXN0ZWRIVE1MIjp7bmk9ZnQuY3JlYXRlSFRNTChuaSk7YnJlYWt9Y2FzZSJUcnVzdGVkU2NyaXB0VVJMIjp7bmk9ZnQuY3JlYXRlU2NyaXB0VVJMKG5pKTticmVha319dHJ5e3JoP0tlLnNldEF0dHJpYnV0ZU5TKHJoLGpmLG5pKTpLZS5zZXRBdHRyaWJ1dGUoamYsbmkpLEZEdChhLnJlbW92ZWQpfWNhdGNoe319fVRsKCJhZnRlclNhbml0aXplQXR0cmlidXRlcyIsS2UsbnVsbCl9LGxsPWZ1bmN0aW9uIFZpKEtlKXtsZXQga3I7Y29uc3Qgbmk9bG8oS2UpO2ZvcihUbCgiYmVmb3JlU2FuaXRpemVTaGFkb3dET00iLEtlLG51bGwpO2tyPW5pLm5leHROb2RlKCk7KVRsKCJ1cG9uU2FuaXRpemVTaGFkb3dOb2RlIixrcixudWxsKSwhRnUoa3IpJiYoa3IuY29udGVudCBpbnN0YW5jZW9mIG0mJlZpKGtyLmNvbnRlbnQpLHNmKGtyKSk7VGwoImFmdGVyU2FuaXRpemVTaGFkb3dET00iLEtlLG51bGwpfTtyZXR1cm4gYS5zYW5pdGl6ZT1mdW5jdGlvbihWaSl7bGV0IEtlPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSxrcixuaSxlbyxEYztpZihBYT0hVmksQWEmJihWaT0iPCEtLT4iKSx0eXBlb2YgVmkhPSJzdHJpbmciJiYhT3MoVmkpKWlmKHR5cGVvZiBWaS50b1N0cmluZz09ImZ1bmN0aW9uIil7aWYoVmk9VmkudG9TdHJpbmcoKSx0eXBlb2YgVmkhPSJzdHJpbmciKXRocm93IGpOKCJkaXJ0eSBpcyBub3QgYSBzdHJpbmcsIGFib3J0aW5nIil9ZWxzZSB0aHJvdyBqTigidG9TdHJpbmcgaXMgbm90IGEgZnVuY3Rpb24iKTtpZighYS5pc1N1cHBvcnRlZClyZXR1cm4gVmk7aWYoRWV8fEVyKEtlKSxhLnJlbW92ZWQ9W10sdHlwZW9mIFZpPT0ic3RyaW5nIiYmKHppPSExKSx6aSl7aWYoVmkubm9kZU5hbWUpe2NvbnN0IGpmPWdyKFZpLm5vZGVOYW1lKTtpZighUnRbamZdfHxxZVtqZl0pdGhyb3cgak4oInJvb3Qgbm9kZSBpcyBmb3JiaWRkZW4gYW5kIGNhbm5vdCBiZSBzYW5pdGl6ZWQgaW4tcGxhY2UiKX19ZWxzZSBpZihWaSBpbnN0YW5jZW9mIEUpa3I9UHUoIjwhLS0tLT4iKSxuaT1rci5vd25lckRvY3VtZW50LmltcG9ydE5vZGUoVmksITApLG5pLm5vZGVUeXBlPT09MSYmbmkubm9kZU5hbWU9PT0iQk9EWSJ8fG5pLm5vZGVOYW1lPT09IkhUTUwiP2tyPW5pOmtyLmFwcGVuZENoaWxkKG5pKTtlbHNle2lmKCFDZSYmIWtlJiYhVmUmJlZpLmluZGV4T2YoIjwiKT09PS0xKXJldHVybiBmdCYmeWU/ZnQuY3JlYXRlSFRNTChWaSk6Vmk7aWYoa3I9UHUoVmkpLCFrcilyZXR1cm4gQ2U/bnVsbDp5ZT9UdDoiIn1rciYmSGUmJnRhKGtyLmZpcnN0Q2hpbGQpO2NvbnN0IEp1PWxvKHppP1ZpOmtyKTtmb3IoO2VvPUp1Lm5leHROb2RlKCk7KUZ1KGVvKXx8KGVvLmNvbnRlbnQgaW5zdGFuY2VvZiBtJiZsbChlby5jb250ZW50KSxzZihlbykpO2lmKHppKXJldHVybiBWaTtpZihDZSl7aWYoJGUpZm9yKERjPWN0LmNhbGwoa3Iub3duZXJEb2N1bWVudCk7a3IuZmlyc3RDaGlsZDspRGMuYXBwZW5kQ2hpbGQoa3IuZmlyc3RDaGlsZCk7ZWxzZSBEYz1rcjtyZXR1cm4odnQuc2hhZG93cm9vdHx8dnQuc2hhZG93cm9vdG1vZGUpJiYoRGM9c3QuY2FsbChmLERjLCEwKSksRGN9bGV0IFFvPVZlP2tyLm91dGVySFRNTDprci5pbm5lckhUTUw7cmV0dXJuIFZlJiZSdFsiIWRvY3R5cGUiXSYma3Iub3duZXJEb2N1bWVudCYma3Iub3duZXJEb2N1bWVudC5kb2N0eXBlJiZrci5vd25lckRvY3VtZW50LmRvY3R5cGUubmFtZSYmSWIocUR0LGtyLm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lKSYmKFFvPSI8IURPQ1RZUEUgIitrci5vd25lckRvY3VtZW50LmRvY3R5cGUubmFtZStgPgpgK1FvKSxrZSYmKFFvPVF3KFFvLGh0LCIgIiksUW89UXcoUW8sZHQsIiAiKSxRbz1RdyhRbyxDdCwiICIpKSxmdCYmeWU/ZnQuY3JlYXRlSFRNTChRbyk6UW99LGEuc2V0Q29uZmlnPWZ1bmN0aW9uKFZpKXtFcihWaSksRWU9ITB9LGEuY2xlYXJDb25maWc9ZnVuY3Rpb24oKXtKcz1udWxsLEVlPSExfSxhLmlzVmFsaWRBdHRyaWJ1dGU9ZnVuY3Rpb24oVmksS2Usa3Ipe0pzfHxFcih7fSk7Y29uc3Qgbmk9Z3IoVmkpLGVvPWdyKEtlKTtyZXR1cm4gem8obmksZW8sa3IpfSxhLmFkZEhvb2s9ZnVuY3Rpb24oVmksS2Upe3R5cGVvZiBLZT09ImZ1bmN0aW9uIiYmKHh0W1ZpXT14dFtWaV18fFtdLFJOKHh0W1ZpXSxLZSkpfSxhLnJlbW92ZUhvb2s9ZnVuY3Rpb24oVmkpe2lmKHh0W1ZpXSlyZXR1cm4gRkR0KHh0W1ZpXSl9LGEucmVtb3ZlSG9va3M9ZnVuY3Rpb24oVmkpe3h0W1ZpXSYmKHh0W1ZpXT1bXSl9LGEucmVtb3ZlQWxsSG9va3M9ZnVuY3Rpb24oKXt4dD17fX0sYX12YXIgZVc9VkR0KCk7Y29uc3QgJE49LzxiclxzKlwvPz4vZ2ksVDllPWk9Pmk/V0R0KGkpLnJlcGxhY2UoL1xcbi9nLCIjYnIjIikuc3BsaXQoIiNiciMiKTpbIiJdLEdEdD1pPT5lVy5zYW5pdGl6ZShpKSxVRHQ9KGksYSk9Pnt2YXIgZjtpZigoKGY9YS5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDpmLmh0bWxMYWJlbHMpIT09ITEpe2NvbnN0IHA9YS5zZWN1cml0eUxldmVsO3A9PT0iYW50aXNjcmlwdCJ8fHA9PT0ic3RyaWN0Ij9pPUdEdChpKTpwIT09Imxvb3NlIiYmKGk9V0R0KGkpLGk9aS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKSxpPWkucmVwbGFjZSgvPS9nLCImZXF1YWxzOyIpLGk9QTllKGkpKX1yZXR1cm4gaX0sdjA9KGksYSk9PmkmJihhLmRvbXB1cmlmeUNvbmZpZz9pPWVXLnNhbml0aXplKFVEdChpLGEpLGEuZG9tcHVyaWZ5Q29uZmlnKS50b1N0cmluZygpOmk9ZVcuc2FuaXRpemUoVUR0KGksYSkse0ZPUkJJRF9UQUdTOlsic3R5bGUiXX0pLnRvU3RyaW5nKCksaSksXzllPShpLGEpPT50eXBlb2YgaT09InN0cmluZyI/djAoaSxhKTppLmZsYXQoKS5tYXAoZj0+djAoZixhKSksQzllPWk9PiROLnRlc3QoaSksUzllPWk9Pmkuc3BsaXQoJE4pLEE5ZT1pPT5pLnJlcGxhY2UoLyNiciMvZywiPGJyLz4iKSxXRHQ9aT0+aS5yZXBsYWNlKCROLCIjYnIjIiksTDllPWk9PntsZXQgYT0iIjtyZXR1cm4gaSYmKGE9d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gsYT1hLnJlcGxhY2VBbGwoL1woL2csIlxcKCIpLGE9YS5yZXBsYWNlQWxsKC9cKS9nLCJcXCkiKSksYX0sdTE9aT0+IShpPT09ITF8fFsiZmFsc2UiLCJudWxsIiwiMCJdLmluY2x1ZGVzKFN0cmluZyhpKS50cmltKCkudG9Mb3dlckNhc2UoKSkpLE05ZT1mdW5jdGlvbiguLi5pKXtjb25zdCBhPWkuZmlsdGVyKGY9PiFpc05hTihmKSk7cmV0dXJuIE1hdGgubWF4KC4uLmEpfSxEOWU9ZnVuY3Rpb24oLi4uaSl7Y29uc3QgYT1pLmZpbHRlcihmPT4haXNOYU4oZikpO3JldHVybiBNYXRoLm1pbiguLi5hKX0sek49ZnVuY3Rpb24oaSl7bGV0IGE9aTtpZihpLnNwbGl0KCJ+IikubGVuZ3RoLTE+PTIpe2xldCBmPWE7ZG8gYT1mLGY9YS5yZXBsYWNlKC9+KFteXHMsOjtdKyl+LywiPCQxPiIpO3doaWxlKGYhPWEpO3JldHVybiB6TihmKX1lbHNlIHJldHVybiBhfSx1aT17Z2V0Um93czpUOWUsc2FuaXRpemVUZXh0OnYwLHNhbml0aXplVGV4dE9yQXJyYXk6XzllLGhhc0JyZWFrczpDOWUsc3BsaXRCcmVha3M6UzllLGxpbmVCcmVha1JlZ2V4OiROLHJlbW92ZVNjcmlwdDpHRHQsZ2V0VXJsOkw5ZSxldmFsdWF0ZTp1MSxnZXRNYXg6TTllLGdldE1pbjpEOWV9LG5XPXttaW46e3I6MCxnOjAsYjowLHM6MCxsOjAsYTowfSxtYXg6e3I6MjU1LGc6MjU1LGI6MjU1LGg6MzYwLHM6MTAwLGw6MTAwLGE6MX0sY2xhbXA6e3I6aT0+aT49MjU1PzI1NTppPDA/MDppLGc6aT0+aT49MjU1PzI1NTppPDA/MDppLGI6aT0+aT49MjU1PzI1NTppPDA/MDppLGg6aT0+aSUzNjAsczppPT5pPj0xMDA/MTAwOmk8MD8wOmksbDppPT5pPj0xMDA/MTAwOmk8MD8wOmksYTppPT5pPj0xPzE6aTwwPzA6aX0sdG9MaW5lYXI6aT0+e2NvbnN0IGE9aS8yNTU7cmV0dXJuIGk+LjAzOTI4P01hdGgucG93KChhKy4wNTUpLzEuMDU1LDIuNCk6YS8xMi45Mn0saHVlMnJnYjooaSxhLGYpPT4oZjwwJiYoZis9MSksZj4xJiYoZi09MSksZjwxLzY/aSsoYS1pKSo2KmY6ZjwxLzI/YTpmPDIvMz9pKyhhLWkpKigyLzMtZikqNjppKSxoc2wycmdiOih7aDppLHM6YSxsOmZ9LHApPT57aWYoIWEpcmV0dXJuIGYqMi41NTtpLz0zNjAsYS89MTAwLGYvPTEwMDtjb25zdCB2PWY8LjU/ZiooMSthKTpmK2EtZiphLG09MipmLXY7c3dpdGNoKHApe2Nhc2UiciI6cmV0dXJuIG5XLmh1ZTJyZ2IobSx2LGkrMS8zKSoyNTU7Y2FzZSJnIjpyZXR1cm4gblcuaHVlMnJnYihtLHYsaSkqMjU1O2Nhc2UiYiI6cmV0dXJuIG5XLmh1ZTJyZ2IobSx2LGktMS8zKSoyNTV9fSxyZ2IyaHNsOih7cjppLGc6YSxiOmZ9LHApPT57aS89MjU1LGEvPTI1NSxmLz0yNTU7Y29uc3Qgdj1NYXRoLm1heChpLGEsZiksbT1NYXRoLm1pbihpLGEsZiksYj0odittKS8yO2lmKHA9PT0ibCIpcmV0dXJuIGIqMTAwO2lmKHY9PT1tKXJldHVybiAwO2NvbnN0IEU9di1tLEM9Yj4uNT9FLygyLXYtbSk6RS8odittKTtpZihwPT09InMiKXJldHVybiBDKjEwMDtzd2l0Y2godil7Y2FzZSBpOnJldHVybigoYS1mKS9FKyhhPGY/NjowKSkqNjA7Y2FzZSBhOnJldHVybigoZi1pKS9FKzIpKjYwO2Nhc2UgZjpyZXR1cm4oKGktYSkvRSs0KSo2MDtkZWZhdWx0OnJldHVybi0xfX19LGthPXtjaGFubmVsOm5XLGxhbmc6e2NsYW1wOihpLGEsZik9PmE+Zj9NYXRoLm1pbihhLE1hdGgubWF4KGYsaSkpOk1hdGgubWluKGYsTWF0aC5tYXgoYSxpKSkscm91bmQ6aT0+TWF0aC5yb3VuZChpKjFlMTApLzFlMTB9LHVuaXQ6e2RlYzJoZXg6aT0+e2NvbnN0IGE9TWF0aC5yb3VuZChpKS50b1N0cmluZygxNik7cmV0dXJuIGEubGVuZ3RoPjE/YTpgMCR7YX1gfX19LFp4PXt9O2ZvcihsZXQgaT0wO2k8PTI1NTtpKyspWnhbaV09a2EudW5pdC5kZWMyaGV4KGkpO2NvbnN0IHcwPXtBTEw6MCxSR0I6MSxIU0w6Mn07Y2xhc3MgSTlle2NvbnN0cnVjdG9yKCl7dGhpcy50eXBlPXcwLkFMTH1nZXQoKXtyZXR1cm4gdGhpcy50eXBlfXNldChhKXtpZih0aGlzLnR5cGUmJnRoaXMudHlwZSE9PWEpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2hhbmdlIGJvdGggUkdCIGFuZCBIU0wgY2hhbm5lbHMgYXQgdGhlIHNhbWUgdGltZSIpO3RoaXMudHlwZT1hfXJlc2V0KCl7dGhpcy50eXBlPXcwLkFMTH1pcyhhKXtyZXR1cm4gdGhpcy50eXBlPT09YX19Y29uc3QgTzllPUk5ZTtjbGFzcyBOOWV7Y29uc3RydWN0b3IoYSxmKXt0aGlzLmNvbG9yPWYsdGhpcy5jaGFuZ2VkPSExLHRoaXMuZGF0YT1hLHRoaXMudHlwZT1uZXcgTzllfXNldChhLGYpe3JldHVybiB0aGlzLmNvbG9yPWYsdGhpcy5jaGFuZ2VkPSExLHRoaXMuZGF0YT1hLHRoaXMudHlwZS50eXBlPXcwLkFMTCx0aGlzfV9lbnN1cmVIU0woKXtjb25zdCBhPXRoaXMuZGF0YSx7aDpmLHM6cCxsOnZ9PWE7Zj09PXZvaWQgMCYmKGEuaD1rYS5jaGFubmVsLnJnYjJoc2woYSwiaCIpKSxwPT09dm9pZCAwJiYoYS5zPWthLmNoYW5uZWwucmdiMmhzbChhLCJzIikpLHY9PT12b2lkIDAmJihhLmw9a2EuY2hhbm5lbC5yZ2IyaHNsKGEsImwiKSl9X2Vuc3VyZVJHQigpe2NvbnN0IGE9dGhpcy5kYXRhLHtyOmYsZzpwLGI6dn09YTtmPT09dm9pZCAwJiYoYS5yPWthLmNoYW5uZWwuaHNsMnJnYihhLCJyIikpLHA9PT12b2lkIDAmJihhLmc9a2EuY2hhbm5lbC5oc2wycmdiKGEsImciKSksdj09PXZvaWQgMCYmKGEuYj1rYS5jaGFubmVsLmhzbDJyZ2IoYSwiYiIpKX1nZXQgcigpe2NvbnN0IGE9dGhpcy5kYXRhLGY9YS5yO3JldHVybiF0aGlzLnR5cGUuaXModzAuSFNMKSYmZiE9PXZvaWQgMD9mOih0aGlzLl9lbnN1cmVIU0woKSxrYS5jaGFubmVsLmhzbDJyZ2IoYSwiciIpKX1nZXQgZygpe2NvbnN0IGE9dGhpcy5kYXRhLGY9YS5nO3JldHVybiF0aGlzLnR5cGUuaXModzAuSFNMKSYmZiE9PXZvaWQgMD9mOih0aGlzLl9lbnN1cmVIU0woKSxrYS5jaGFubmVsLmhzbDJyZ2IoYSwiZyIpKX1nZXQgYigpe2NvbnN0IGE9dGhpcy5kYXRhLGY9YS5iO3JldHVybiF0aGlzLnR5cGUuaXModzAuSFNMKSYmZiE9PXZvaWQgMD9mOih0aGlzLl9lbnN1cmVIU0woKSxrYS5jaGFubmVsLmhzbDJyZ2IoYSwiYiIpKX1nZXQgaCgpe2NvbnN0IGE9dGhpcy5kYXRhLGY9YS5oO3JldHVybiF0aGlzLnR5cGUuaXModzAuUkdCKSYmZiE9PXZvaWQgMD9mOih0aGlzLl9lbnN1cmVSR0IoKSxrYS5jaGFubmVsLnJnYjJoc2woYSwiaCIpKX1nZXQgcygpe2NvbnN0IGE9dGhpcy5kYXRhLGY9YS5zO3JldHVybiF0aGlzLnR5cGUuaXModzAuUkdCKSYmZiE9PXZvaWQgMD9mOih0aGlzLl9lbnN1cmVSR0IoKSxrYS5jaGFubmVsLnJnYjJoc2woYSwicyIpKX1nZXQgbCgpe2NvbnN0IGE9dGhpcy5kYXRhLGY9YS5sO3JldHVybiF0aGlzLnR5cGUuaXModzAuUkdCKSYmZiE9PXZvaWQgMD9mOih0aGlzLl9lbnN1cmVSR0IoKSxrYS5jaGFubmVsLnJnYjJoc2woYSwibCIpKX1nZXQgYSgpe3JldHVybiB0aGlzLmRhdGEuYX1zZXQgcihhKXt0aGlzLnR5cGUuc2V0KHcwLlJHQiksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5yPWF9c2V0IGcoYSl7dGhpcy50eXBlLnNldCh3MC5SR0IpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEuZz1hfXNldCBiKGEpe3RoaXMudHlwZS5zZXQodzAuUkdCKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmI9YX1zZXQgaChhKXt0aGlzLnR5cGUuc2V0KHcwLkhTTCksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5oPWF9c2V0IHMoYSl7dGhpcy50eXBlLnNldCh3MC5IU0wpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEucz1hfXNldCBsKGEpe3RoaXMudHlwZS5zZXQodzAuSFNMKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmw9YX1zZXQgYShhKXt0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmE9YX19Y29uc3QgUDllPU45ZSxyVz1uZXcgUDllKHtyOjAsZzowLGI6MCxhOjB9LCJ0cmFuc3BhcmVudCIpLEtEdD17cmU6L14jKCg/OlthLWYwLTldezJ9KXsyLDR9fFthLWYwLTldezN9KSQvaSxwYXJzZTppPT57aWYoaS5jaGFyQ29kZUF0KDApIT09MzUpcmV0dXJuO2NvbnN0IGE9aS5tYXRjaChLRHQucmUpO2lmKCFhKXJldHVybjtjb25zdCBmPWFbMV0scD1wYXJzZUludChmLDE2KSx2PWYubGVuZ3RoLG09diU0PT09MCxiPXY+NCxFPWI/MToxNyxDPWI/ODo0LEE9bT8wOi0xLFA9Yj8yNTU6MTU7cmV0dXJuIHJXLnNldCh7cjoocD4+QyooQSszKSZQKSpFLGc6KHA+PkMqKEErMikmUCkqRSxiOihwPj5DKihBKzEpJlApKkUsYTptPyhwJlApKkUvMjU1OjF9LGkpfSxzdHJpbmdpZnk6aT0+e2NvbnN0e3I6YSxnOmYsYjpwLGE6dn09aTtyZXR1cm4gdjwxP2AjJHtaeFtNYXRoLnJvdW5kKGEpXX0ke1p4W01hdGgucm91bmQoZildfSR7WnhbTWF0aC5yb3VuZChwKV19JHtaeFtNYXRoLnJvdW5kKHYqMjU1KV19YDpgIyR7WnhbTWF0aC5yb3VuZChhKV19JHtaeFtNYXRoLnJvdW5kKGYpXX0ke1p4W01hdGgucm91bmQocCldfWB9fSxxTj1LRHQsaVc9e3JlOi9eaHNsYT9cKFxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplLT9cZCspPyg/OmRlZ3xncmFkfHJhZHx0dXJuKT8pXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmUtP1xkKyk/JSlccyo/KD86LHxccylccyo/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZS0/XGQrKT8lKSg/OlxzKj8oPzosfFwvKVxzKj9cKz8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplLT9cZCspPyglKT8pKT9ccyo/XCkkL2ksaHVlUmU6L14oLis/KShkZWd8Z3JhZHxyYWR8dHVybikkL2ksX2h1ZTJkZWc6aT0+e2NvbnN0IGE9aS5tYXRjaChpVy5odWVSZSk7aWYoYSl7Y29uc3RbLGYscF09YTtzd2l0Y2gocCl7Y2FzZSJncmFkIjpyZXR1cm4ga2EuY2hhbm5lbC5jbGFtcC5oKHBhcnNlRmxvYXQoZikqLjkpO2Nhc2UicmFkIjpyZXR1cm4ga2EuY2hhbm5lbC5jbGFtcC5oKHBhcnNlRmxvYXQoZikqMTgwL01hdGguUEkpO2Nhc2UidHVybiI6cmV0dXJuIGthLmNoYW5uZWwuY2xhbXAuaChwYXJzZUZsb2F0KGYpKjM2MCl9fXJldHVybiBrYS5jaGFubmVsLmNsYW1wLmgocGFyc2VGbG9hdChpKSl9LHBhcnNlOmk9Pntjb25zdCBhPWkuY2hhckNvZGVBdCgwKTtpZihhIT09MTA0JiZhIT09NzIpcmV0dXJuO2NvbnN0IGY9aS5tYXRjaChpVy5yZSk7aWYoIWYpcmV0dXJuO2NvbnN0WyxwLHYsbSxiLEVdPWY7cmV0dXJuIHJXLnNldCh7aDppVy5faHVlMmRlZyhwKSxzOmthLmNoYW5uZWwuY2xhbXAucyhwYXJzZUZsb2F0KHYpKSxsOmthLmNoYW5uZWwuY2xhbXAubChwYXJzZUZsb2F0KG0pKSxhOmI/a2EuY2hhbm5lbC5jbGFtcC5hKEU/cGFyc2VGbG9hdChiKS8xMDA6cGFyc2VGbG9hdChiKSk6MX0saSl9LHN0cmluZ2lmeTppPT57Y29uc3R7aDphLHM6ZixsOnAsYTp2fT1pO3JldHVybiB2PDE/YGhzbGEoJHtrYS5sYW5nLnJvdW5kKGEpfSwgJHtrYS5sYW5nLnJvdW5kKGYpfSUsICR7a2EubGFuZy5yb3VuZChwKX0lLCAke3Z9KWA6YGhzbCgke2thLmxhbmcucm91bmQoYSl9LCAke2thLmxhbmcucm91bmQoZil9JSwgJHtrYS5sYW5nLnJvdW5kKHApfSUpYH19LHNXPWlXLGFXPXtjb2xvcnM6e2FsaWNlYmx1ZToiI2YwZjhmZiIsYW50aXF1ZXdoaXRlOiIjZmFlYmQ3IixhcXVhOiIjMDBmZmZmIixhcXVhbWFyaW5lOiIjN2ZmZmQ0IixhenVyZToiI2YwZmZmZiIsYmVpZ2U6IiNmNWY1ZGMiLGJpc3F1ZToiI2ZmZTRjNCIsYmxhY2s6IiMwMDAwMDAiLGJsYW5jaGVkYWxtb25kOiIjZmZlYmNkIixibHVlOiIjMDAwMGZmIixibHVldmlvbGV0OiIjOGEyYmUyIixicm93bjoiI2E1MmEyYSIsYnVybHl3b29kOiIjZGViODg3IixjYWRldGJsdWU6IiM1ZjllYTAiLGNoYXJ0cmV1c2U6IiM3ZmZmMDAiLGNob2NvbGF0ZToiI2QyNjkxZSIsY29yYWw6IiNmZjdmNTAiLGNvcm5mbG93ZXJibHVlOiIjNjQ5NWVkIixjb3Juc2lsazoiI2ZmZjhkYyIsY3JpbXNvbjoiI2RjMTQzYyIsY3lhbmFxdWE6IiMwMGZmZmYiLGRhcmtibHVlOiIjMDAwMDhiIixkYXJrY3lhbjoiIzAwOGI4YiIsZGFya2dvbGRlbnJvZDoiI2I4ODYwYiIsZGFya2dyYXk6IiNhOWE5YTkiLGRhcmtncmVlbjoiIzAwNjQwMCIsZGFya2dyZXk6IiNhOWE5YTkiLGRhcmtraGFraToiI2JkYjc2YiIsZGFya21hZ2VudGE6IiM4YjAwOGIiLGRhcmtvbGl2ZWdyZWVuOiIjNTU2YjJmIixkYXJrb3JhbmdlOiIjZmY4YzAwIixkYXJrb3JjaGlkOiIjOTkzMmNjIixkYXJrcmVkOiIjOGIwMDAwIixkYXJrc2FsbW9uOiIjZTk5NjdhIixkYXJrc2VhZ3JlZW46IiM4ZmJjOGYiLGRhcmtzbGF0ZWJsdWU6IiM0ODNkOGIiLGRhcmtzbGF0ZWdyYXk6IiMyZjRmNGYiLGRhcmtzbGF0ZWdyZXk6IiMyZjRmNGYiLGRhcmt0dXJxdW9pc2U6IiMwMGNlZDEiLGRhcmt2aW9sZXQ6IiM5NDAwZDMiLGRlZXBwaW5rOiIjZmYxNDkzIixkZWVwc2t5Ymx1ZToiIzAwYmZmZiIsZGltZ3JheToiIzY5Njk2OSIsZGltZ3JleToiIzY5Njk2OSIsZG9kZ2VyYmx1ZToiIzFlOTBmZiIsZmlyZWJyaWNrOiIjYjIyMjIyIixmbG9yYWx3aGl0ZToiI2ZmZmFmMCIsZm9yZXN0Z3JlZW46IiMyMjhiMjIiLGZ1Y2hzaWE6IiNmZjAwZmYiLGdhaW5zYm9ybzoiI2RjZGNkYyIsZ2hvc3R3aGl0ZToiI2Y4ZjhmZiIsZ29sZDoiI2ZmZDcwMCIsZ29sZGVucm9kOiIjZGFhNTIwIixncmF5OiIjODA4MDgwIixncmVlbjoiIzAwODAwMCIsZ3JlZW55ZWxsb3c6IiNhZGZmMmYiLGdyZXk6IiM4MDgwODAiLGhvbmV5ZGV3OiIjZjBmZmYwIixob3RwaW5rOiIjZmY2OWI0IixpbmRpYW5yZWQ6IiNjZDVjNWMiLGluZGlnbzoiIzRiMDA4MiIsaXZvcnk6IiNmZmZmZjAiLGtoYWtpOiIjZjBlNjhjIixsYXZlbmRlcjoiI2U2ZTZmYSIsbGF2ZW5kZXJibHVzaDoiI2ZmZjBmNSIsbGF3bmdyZWVuOiIjN2NmYzAwIixsZW1vbmNoaWZmb246IiNmZmZhY2QiLGxpZ2h0Ymx1ZToiI2FkZDhlNiIsbGlnaHRjb3JhbDoiI2YwODA4MCIsbGlnaHRjeWFuOiIjZTBmZmZmIixsaWdodGdvbGRlbnJvZHllbGxvdzoiI2ZhZmFkMiIsbGlnaHRncmF5OiIjZDNkM2QzIixsaWdodGdyZWVuOiIjOTBlZTkwIixsaWdodGdyZXk6IiNkM2QzZDMiLGxpZ2h0cGluazoiI2ZmYjZjMSIsbGlnaHRzYWxtb246IiNmZmEwN2EiLGxpZ2h0c2VhZ3JlZW46IiMyMGIyYWEiLGxpZ2h0c2t5Ymx1ZToiIzg3Y2VmYSIsbGlnaHRzbGF0ZWdyYXk6IiM3Nzg4OTkiLGxpZ2h0c2xhdGVncmV5OiIjNzc4ODk5IixsaWdodHN0ZWVsYmx1ZToiI2IwYzRkZSIsbGlnaHR5ZWxsb3c6IiNmZmZmZTAiLGxpbWU6IiMwMGZmMDAiLGxpbWVncmVlbjoiIzMyY2QzMiIsbGluZW46IiNmYWYwZTYiLG1hZ2VudGE6IiNmZjAwZmYiLG1hcm9vbjoiIzgwMDAwMCIsbWVkaXVtYXF1YW1hcmluZToiIzY2Y2RhYSIsbWVkaXVtYmx1ZToiIzAwMDBjZCIsbWVkaXVtb3JjaGlkOiIjYmE1NWQzIixtZWRpdW1wdXJwbGU6IiM5MzcwZGIiLG1lZGl1bXNlYWdyZWVuOiIjM2NiMzcxIixtZWRpdW1zbGF0ZWJsdWU6IiM3YjY4ZWUiLG1lZGl1bXNwcmluZ2dyZWVuOiIjMDBmYTlhIixtZWRpdW10dXJxdW9pc2U6IiM0OGQxY2MiLG1lZGl1bXZpb2xldHJlZDoiI2M3MTU4NSIsbWlkbmlnaHRibHVlOiIjMTkxOTcwIixtaW50Y3JlYW06IiNmNWZmZmEiLG1pc3R5cm9zZToiI2ZmZTRlMSIsbW9jY2FzaW46IiNmZmU0YjUiLG5hdmFqb3doaXRlOiIjZmZkZWFkIixuYXZ5OiIjMDAwMDgwIixvbGRsYWNlOiIjZmRmNWU2IixvbGl2ZToiIzgwODAwMCIsb2xpdmVkcmFiOiIjNmI4ZTIzIixvcmFuZ2U6IiNmZmE1MDAiLG9yYW5nZXJlZDoiI2ZmNDUwMCIsb3JjaGlkOiIjZGE3MGQ2IixwYWxlZ29sZGVucm9kOiIjZWVlOGFhIixwYWxlZ3JlZW46IiM5OGZiOTgiLHBhbGV0dXJxdW9pc2U6IiNhZmVlZWUiLHBhbGV2aW9sZXRyZWQ6IiNkYjcwOTMiLHBhcGF5YXdoaXA6IiNmZmVmZDUiLHBlYWNocHVmZjoiI2ZmZGFiOSIscGVydToiI2NkODUzZiIscGluazoiI2ZmYzBjYiIscGx1bToiI2RkYTBkZCIscG93ZGVyYmx1ZToiI2IwZTBlNiIscHVycGxlOiIjODAwMDgwIixyZWJlY2NhcHVycGxlOiIjNjYzMzk5IixyZWQ6IiNmZjAwMDAiLHJvc3licm93bjoiI2JjOGY4ZiIscm95YWxibHVlOiIjNDE2OWUxIixzYWRkbGVicm93bjoiIzhiNDUxMyIsc2FsbW9uOiIjZmE4MDcyIixzYW5keWJyb3duOiIjZjRhNDYwIixzZWFncmVlbjoiIzJlOGI1NyIsc2Vhc2hlbGw6IiNmZmY1ZWUiLHNpZW5uYToiI2EwNTIyZCIsc2lsdmVyOiIjYzBjMGMwIixza3libHVlOiIjODdjZWViIixzbGF0ZWJsdWU6IiM2YTVhY2QiLHNsYXRlZ3JheToiIzcwODA5MCIsc2xhdGVncmV5OiIjNzA4MDkwIixzbm93OiIjZmZmYWZhIixzcHJpbmdncmVlbjoiIzAwZmY3ZiIsdGFuOiIjZDJiNDhjIix0ZWFsOiIjMDA4MDgwIix0aGlzdGxlOiIjZDhiZmQ4Iix0cmFuc3BhcmVudDoiIzAwMDAwMDAwIix0dXJxdW9pc2U6IiM0MGUwZDAiLHZpb2xldDoiI2VlODJlZSIsd2hlYXQ6IiNmNWRlYjMiLHdoaXRlOiIjZmZmZmZmIix3aGl0ZXNtb2tlOiIjZjVmNWY1Iix5ZWxsb3c6IiNmZmZmMDAiLHllbGxvd2dyZWVuOiIjOWFjZDMyIn0scGFyc2U6aT0+e2k9aS50b0xvd2VyQ2FzZSgpO2NvbnN0IGE9YVcuY29sb3JzW2ldO2lmKGEpcmV0dXJuIHFOLnBhcnNlKGEpfSxzdHJpbmdpZnk6aT0+e2NvbnN0IGE9cU4uc3RyaW5naWZ5KGkpO2Zvcihjb25zdCBmIGluIGFXLmNvbG9ycylpZihhVy5jb2xvcnNbZl09PT1hKXJldHVybiBmfX0sWUR0PWFXLFhEdD17cmU6L15yZ2JhP1woXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpKD86XHMqPyg/Oix8XC8pXHMqP1wrPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpKT9ccyo/XCkkL2kscGFyc2U6aT0+e2NvbnN0IGE9aS5jaGFyQ29kZUF0KDApO2lmKGEhPT0xMTQmJmEhPT04MilyZXR1cm47Y29uc3QgZj1pLm1hdGNoKFhEdC5yZSk7aWYoIWYpcmV0dXJuO2NvbnN0WyxwLHYsbSxiLEUsQyxBLFBdPWY7cmV0dXJuIHJXLnNldCh7cjprYS5jaGFubmVsLmNsYW1wLnIodj9wYXJzZUZsb2F0KHApKjIuNTU6cGFyc2VGbG9hdChwKSksZzprYS5jaGFubmVsLmNsYW1wLmcoYj9wYXJzZUZsb2F0KG0pKjIuNTU6cGFyc2VGbG9hdChtKSksYjprYS5jaGFubmVsLmNsYW1wLmIoQz9wYXJzZUZsb2F0KEUpKjIuNTU6cGFyc2VGbG9hdChFKSksYTpBP2thLmNoYW5uZWwuY2xhbXAuYShQP3BhcnNlRmxvYXQoQSkvMTAwOnBhcnNlRmxvYXQoQSkpOjF9LGkpfSxzdHJpbmdpZnk6aT0+e2NvbnN0e3I6YSxnOmYsYjpwLGE6dn09aTtyZXR1cm4gdjwxP2ByZ2JhKCR7a2EubGFuZy5yb3VuZChhKX0sICR7a2EubGFuZy5yb3VuZChmKX0sICR7a2EubGFuZy5yb3VuZChwKX0sICR7a2EubGFuZy5yb3VuZCh2KX0pYDpgcmdiKCR7a2EubGFuZy5yb3VuZChhKX0sICR7a2EubGFuZy5yb3VuZChmKX0sICR7a2EubGFuZy5yb3VuZChwKX0pYH19LG9XPVhEdCxadz17Zm9ybWF0OntrZXl3b3JkOllEdCxoZXg6cU4scmdiOm9XLHJnYmE6b1csaHNsOnNXLGhzbGE6c1d9LHBhcnNlOmk9PntpZih0eXBlb2YgaSE9InN0cmluZyIpcmV0dXJuIGk7Y29uc3QgYT1xTi5wYXJzZShpKXx8b1cucGFyc2UoaSl8fHNXLnBhcnNlKGkpfHxZRHQucGFyc2UoaSk7aWYoYSlyZXR1cm4gYTt0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGNvbG9yIGZvcm1hdDogIiR7aX0iYCl9LHN0cmluZ2lmeTppPT4haS5jaGFuZ2VkJiZpLmNvbG9yP2kuY29sb3I6aS50eXBlLmlzKHcwLkhTTCl8fGkuZGF0YS5yPT09dm9pZCAwP3NXLnN0cmluZ2lmeShpKTppLmE8MXx8IU51bWJlci5pc0ludGVnZXIoaS5yKXx8IU51bWJlci5pc0ludGVnZXIoaS5nKXx8IU51bWJlci5pc0ludGVnZXIoaS5iKT9vVy5zdHJpbmdpZnkoaSk6cU4uc3RyaW5naWZ5KGkpfSxRRHQ9KGksYSk9Pntjb25zdCBmPVp3LnBhcnNlKGkpO2Zvcihjb25zdCBwIGluIGEpZltwXT1rYS5jaGFubmVsLmNsYW1wW3BdKGFbcF0pO3JldHVybiBady5zdHJpbmdpZnkoZil9LElBPShpLGEsZj0wLHA9MSk9PntpZih0eXBlb2YgaSE9Im51bWJlciIpcmV0dXJuIFFEdChpLHthfSk7Y29uc3Qgdj1yVy5zZXQoe3I6a2EuY2hhbm5lbC5jbGFtcC5yKGkpLGc6a2EuY2hhbm5lbC5jbGFtcC5nKGEpLGI6a2EuY2hhbm5lbC5jbGFtcC5iKGYpLGE6a2EuY2hhbm5lbC5jbGFtcC5hKHApfSk7cmV0dXJuIFp3LnN0cmluZ2lmeSh2KX0sRjllPShpLGEpPT5rYS5sYW5nLnJvdW5kKFp3LnBhcnNlKGkpW2FdKSxCOWU9aT0+e2NvbnN0e3I6YSxnOmYsYjpwfT1ady5wYXJzZShpKSx2PS4yMTI2KmthLmNoYW5uZWwudG9MaW5lYXIoYSkrLjcxNTIqa2EuY2hhbm5lbC50b0xpbmVhcihmKSsuMDcyMiprYS5jaGFubmVsLnRvTGluZWFyKHApO3JldHVybiBrYS5sYW5nLnJvdW5kKHYpfSxSOWU9aT0+QjllKGkpPj0uNSxYRT1pPT4hUjllKGkpLFpEdD0oaSxhLGYpPT57Y29uc3QgcD1ady5wYXJzZShpKSx2PXBbYV0sbT1rYS5jaGFubmVsLmNsYW1wW2FdKHYrZik7cmV0dXJuIHYhPT1tJiYocFthXT1tKSxady5zdHJpbmdpZnkocCl9LFNzPShpLGEpPT5aRHQoaSwibCIsYSksWXM9KGksYSk9PlpEdChpLCJsIiwtYSksbW49KGksYSk9Pntjb25zdCBmPVp3LnBhcnNlKGkpLHA9e307Zm9yKGNvbnN0IHYgaW4gYSlhW3ZdJiYocFt2XT1mW3ZdK2Fbdl0pO3JldHVybiBRRHQoaSxwKX0sajllPShpLGEsZj01MCk9Pntjb25zdHtyOnAsZzp2LGI6bSxhOmJ9PVp3LnBhcnNlKGkpLHtyOkUsZzpDLGI6QSxhOlB9PVp3LnBhcnNlKGEpLEY9Zi8xMDAsaj1GKjItMSxSPWItUCxZPSgoaipSPT09LTE/ajooaitSKS8oMStqKlIpKSsxKS8yLHJ0PTEtWSxKPXAqWStFKnJ0LGl0PXYqWStDKnJ0LGZ0PW0qWStBKnJ0LFR0PWIqRitQKigxLUYpO3JldHVybiBJQShKLGl0LGZ0LFR0KX0samk9KGksYT0xMDApPT57Y29uc3QgZj1ady5wYXJzZShpKTtyZXR1cm4gZi5yPTI1NS1mLnIsZi5nPTI1NS1mLmcsZi5iPTI1NS1mLmIsajllKGYsaSxhKX0sYWc9KGksYSk9PmE/bW4oaSx7czotNDAsbDoxMH0pOm1uKGkse3M6LTQwLGw6LTEwfSksY1c9IiNmZmZmZmYiLHVXPSIjZjJmMmYyIjtsZXQgJDllPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5iYWNrZ3JvdW5kPSIjZjRmNGY0Iix0aGlzLnByaW1hcnlDb2xvcj0iI2ZmZjRkZCIsdGhpcy5ub3RlQmtnQ29sb3I9IiNmZmY1YWQiLHRoaXMubm90ZVRleHRDb2xvcj0iIzMzMyIsdGhpcy5USEVNRV9DT0xPUl9MSU1JVD0xMix0aGlzLmZvbnRGYW1pbHk9JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsdGhpcy5mb250U2l6ZT0iMTZweCJ9dXBkYXRlQ29sb3JzKCl7aWYodGhpcy5wcmltYXJ5VGV4dENvbG9yPXRoaXMucHJpbWFyeVRleHRDb2xvcnx8KHRoaXMuZGFya01vZGU/IiNlZWUiOiIjMzMzIiksdGhpcy5zZWNvbmRhcnlDb2xvcj10aGlzLnNlY29uZGFyeUNvbG9yfHxtbih0aGlzLnByaW1hcnlDb2xvcix7aDotMTIwfSksdGhpcy50ZXJ0aWFyeUNvbG9yPXRoaXMudGVydGlhcnlDb2xvcnx8bW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTgwLGw6NX0pLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yfHxhZyh0aGlzLnByaW1hcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yPXRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3J8fGFnKHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yPXRoaXMudGVydGlhcnlCb3JkZXJDb2xvcnx8YWcodGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMubm90ZUJvcmRlckNvbG9yPXRoaXMubm90ZUJvcmRlckNvbG9yfHxhZyh0aGlzLm5vdGVCa2dDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLm5vdGVCa2dDb2xvcj10aGlzLm5vdGVCa2dDb2xvcnx8IiNmZmY1YWQiLHRoaXMubm90ZVRleHRDb2xvcj10aGlzLm5vdGVUZXh0Q29sb3J8fCIjMzMzIix0aGlzLnNlY29uZGFyeVRleHRDb2xvcj10aGlzLnNlY29uZGFyeVRleHRDb2xvcnx8amkodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj10aGlzLnRlcnRpYXJ5VGV4dENvbG9yfHxqaSh0aGlzLnRlcnRpYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPXRoaXMubGluZUNvbG9yfHxqaSh0aGlzLmJhY2tncm91bmQpLHRoaXMuYXJyb3doZWFkQ29sb3I9dGhpcy5hcnJvd2hlYWRDb2xvcnx8amkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj10aGlzLnRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuYm9yZGVyMj10aGlzLmJvcmRlcjJ8fHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcix0aGlzLm5vZGVCa2c9dGhpcy5ub2RlQmtnfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLm1haW5Ca2c9dGhpcy5tYWluQmtnfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLm5vZGVCb3JkZXI9dGhpcy5ub2RlQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLmNsdXN0ZXJCa2c9dGhpcy5jbHVzdGVyQmtnfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuY2x1c3RlckJvcmRlcnx8dGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmRlZmF1bHRMaW5rQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMudGl0bGVDb2xvcj10aGlzLnRpdGxlQ29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPXRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZHx8KHRoaXMuZGFya01vZGU/WXModGhpcy5zZWNvbmRhcnlDb2xvciwzMCk6dGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy5ub2RlVGV4dENvbG9yPXRoaXMubm9kZVRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuYWN0b3JCb3JkZXI9dGhpcy5hY3RvckJvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5hY3RvckJrZz10aGlzLmFjdG9yQmtnfHx0aGlzLm1haW5Ca2csdGhpcy5hY3RvclRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLmFjdG9yTGluZUNvbG9yfHwiZ3JleSIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPXRoaXMubGFiZWxCb3hCa2dDb2xvcnx8dGhpcy5hY3RvckJrZyx0aGlzLnNpZ25hbENvbG9yPXRoaXMuc2lnbmFsQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMuc2lnbmFsVGV4dENvbG9yPXRoaXMuc2lnbmFsVGV4dENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9dGhpcy5sYWJlbEJveEJvcmRlckNvbG9yfHx0aGlzLmFjdG9yQm9yZGVyLHRoaXMubGFiZWxUZXh0Q29sb3I9dGhpcy5sYWJlbFRleHRDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy5sb29wVGV4dENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPXRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yfHxZcyh0aGlzLnNlY29uZGFyeUNvbG9yLDEwKSx0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj10aGlzLmFjdGl2YXRpb25Ca2dDb2xvcnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnNlcXVlbmNlTnVtYmVyQ29sb3I9dGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yfHxqaSh0aGlzLmxpbmVDb2xvciksdGhpcy5zZWN0aW9uQmtnQ29sb3I9dGhpcy5zZWN0aW9uQmtnQ29sb3J8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj10aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcnx8IndoaXRlIix0aGlzLnNlY3Rpb25Ca2dDb2xvcj10aGlzLnNlY3Rpb25Ca2dDb2xvcnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9dGhpcy5zZWN0aW9uQmtnQ29sb3IyfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmV4Y2x1ZGVCa2dDb2xvcj10aGlzLmV4Y2x1ZGVCa2dDb2xvcnx8IiNlZWVlZWUiLHRoaXMudGFza0JvcmRlckNvbG9yPXRoaXMudGFza0JvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnRhc2tCa2dDb2xvcj10aGlzLnRhc2tCa2dDb2xvcnx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9dGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPXRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yfHxTcyh0aGlzLnByaW1hcnlDb2xvciwyMyksdGhpcy5ncmlkQ29sb3I9dGhpcy5ncmlkQ29sb3J8fCJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj10aGlzLmRvbmVUYXNrQmtnQ29sb3J8fCJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj10aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3J8fCJncmV5Iix0aGlzLmNyaXRCb3JkZXJDb2xvcj10aGlzLmNyaXRCb3JkZXJDb2xvcnx8IiNmZjg4ODgiLHRoaXMuY3JpdEJrZ0NvbG9yPXRoaXMuY3JpdEJrZ0NvbG9yfHwicmVkIix0aGlzLnRvZGF5TGluZUNvbG9yPXRoaXMudG9kYXlMaW5lQ29sb3J8fCJyZWQiLHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPXRoaXMudGFza1RleHREYXJrQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj10aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3J8fCIjMDAzMTYzIix0aGlzLnBlcnNvbkJvcmRlcj10aGlzLnBlcnNvbkJvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5wZXJzb25Ca2c9dGhpcy5wZXJzb25Ca2d8fHRoaXMubWFpbkJrZyx0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLmNvbXBvc2l0ZUJvcmRlcj10aGlzLmNvbXBvc2l0ZUJvcmRlcnx8dGhpcy5ub2RlQm9yZGVyLHRoaXMuaW5uZXJFbmRCYWNrZ3JvdW5kPXRoaXMubm9kZUJvcmRlcix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuY1NjYWxlMD10aGlzLmNTY2FsZTB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuY1NjYWxlMT10aGlzLmNTY2FsZTF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jU2NhbGUyPXRoaXMuY1NjYWxlMnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuY1NjYWxlMz10aGlzLmNTY2FsZTN8fG1uKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMwfSksdGhpcy5jU2NhbGU0PXRoaXMuY1NjYWxlNHx8bW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmNTY2FsZTU9dGhpcy5jU2NhbGU1fHxtbih0aGlzLnByaW1hcnlDb2xvcix7aDo5MH0pLHRoaXMuY1NjYWxlNj10aGlzLmNTY2FsZTZ8fG1uKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuY1NjYWxlNz10aGlzLmNTY2FsZTd8fG1uKHRoaXMucHJpbWFyeUNvbG9yLHtoOjE1MH0pLHRoaXMuY1NjYWxlOD10aGlzLmNTY2FsZTh8fG1uKHRoaXMucHJpbWFyeUNvbG9yLHtoOjIxMCxsOjE1MH0pLHRoaXMuY1NjYWxlOT10aGlzLmNTY2FsZTl8fG1uKHRoaXMucHJpbWFyeUNvbG9yLHtoOjI3MH0pLHRoaXMuY1NjYWxlMTA9dGhpcy5jU2NhbGUxMHx8bW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MzAwfSksdGhpcy5jU2NhbGUxMT10aGlzLmNTY2FsZTExfHxtbih0aGlzLnByaW1hcnlDb2xvcix7aDozMzB9KSx0aGlzLmRhcmtNb2RlKWZvcihsZXQgZj0wO2Y8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtmKyspdGhpc1siY1NjYWxlIitmXT1Zcyh0aGlzWyJjU2NhbGUiK2ZdLDc1KTtlbHNlIGZvcihsZXQgZj0wO2Y8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtmKyspdGhpc1siY1NjYWxlIitmXT1Zcyh0aGlzWyJjU2NhbGUiK2ZdLDI1KTtmb3IobGV0IGY9MDtmPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7ZisrKXRoaXNbImNTY2FsZUludiIrZl09dGhpc1siY1NjYWxlSW52IitmXXx8amkodGhpc1siY1NjYWxlIitmXSk7Zm9yKGxldCBmPTA7Zjx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO2YrKyl0aGlzLmRhcmtNb2RlP3RoaXNbImNTY2FsZVBlZXIiK2ZdPXRoaXNbImNTY2FsZVBlZXIiK2ZdfHxTcyh0aGlzWyJjU2NhbGUiK2ZdLDEwKTp0aGlzWyJjU2NhbGVQZWVyIitmXT10aGlzWyJjU2NhbGVQZWVyIitmXXx8WXModGhpc1siY1NjYWxlIitmXSwxMCk7dGhpcy5zY2FsZUxhYmVsQ29sb3I9dGhpcy5zY2FsZUxhYmVsQ29sb3J8fHRoaXMubGFiZWxUZXh0Q29sb3I7Zm9yKGxldCBmPTA7Zjx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO2YrKyl0aGlzWyJjU2NhbGVMYWJlbCIrZl09dGhpc1siY1NjYWxlTGFiZWwiK2ZdfHx0aGlzLnNjYWxlTGFiZWxDb2xvcjtjb25zdCBhPXRoaXMuZGFya01vZGU/LTQ6LTE7Zm9yKGxldCBmPTA7Zjw1O2YrKyl0aGlzWyJzdXJmYWNlIitmXT10aGlzWyJzdXJmYWNlIitmXXx8bW4odGhpcy5tYWluQmtnLHtoOjE4MCxzOi0xNSxsOmEqKDUrZiozKX0pLHRoaXNbInN1cmZhY2VQZWVyIitmXT10aGlzWyJzdXJmYWNlUGVlciIrZl18fG1uKHRoaXMubWFpbkJrZyx7aDoxODAsczotMTUsbDphKig4K2YqMyl9KTt0aGlzLmNsYXNzVGV4dD10aGlzLmNsYXNzVGV4dHx8dGhpcy50ZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5maWxsVHlwZTB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZmlsbFR5cGUxPXRoaXMuZmlsbFR5cGUxfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZmlsbFR5cGUyPXRoaXMuZmlsbFR5cGUyfHxtbih0aGlzLnByaW1hcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGUzPXRoaXMuZmlsbFR5cGUzfHxtbih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9dGhpcy5maWxsVHlwZTR8fG1uKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU1PXRoaXMuZmlsbFR5cGU1fHxtbih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU2PXRoaXMuZmlsbFR5cGU2fHxtbih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz10aGlzLmZpbGxUeXBlN3x8bW4odGhpcy5zZWNvbmRhcnlDb2xvcix7aDoxMjh9KSx0aGlzLnBpZTE9dGhpcy5waWUxfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnBpZTI9dGhpcy5waWUyfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMucGllMz10aGlzLnBpZTN8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLnBpZTQ9dGhpcy5waWU0fHxtbih0aGlzLnByaW1hcnlDb2xvcix7bDotMTB9KSx0aGlzLnBpZTU9dGhpcy5waWU1fHxtbih0aGlzLnNlY29uZGFyeUNvbG9yLHtsOi0xMH0pLHRoaXMucGllNj10aGlzLnBpZTZ8fG1uKHRoaXMudGVydGlhcnlDb2xvcix7bDotMTB9KSx0aGlzLnBpZTc9dGhpcy5waWU3fHxtbih0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi0xMH0pLHRoaXMucGllOD10aGlzLnBpZTh8fG1uKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MCxsOi0xMH0pLHRoaXMucGllOT10aGlzLnBpZTl8fG1uKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMCxsOjB9KSx0aGlzLnBpZTEwPXRoaXMucGllMTB8fG1uKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwLGw6LTIwfSksdGhpcy5waWUxMT10aGlzLnBpZTExfHxtbih0aGlzLnByaW1hcnlDb2xvcix7aDotNjAsbDotMjB9KSx0aGlzLnBpZTEyPXRoaXMucGllMTJ8fG1uKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMCxsOi0xMH0pLHRoaXMucGllVGl0bGVUZXh0U2l6ZT10aGlzLnBpZVRpdGxlVGV4dFNpemV8fCIyNXB4Iix0aGlzLnBpZVRpdGxlVGV4dENvbG9yPXRoaXMucGllVGl0bGVUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTZWN0aW9uVGV4dFNpemU9dGhpcy5waWVTZWN0aW9uVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3I9dGhpcy5waWVTZWN0aW9uVGV4dENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnBpZUxlZ2VuZFRleHRTaXplPXRoaXMucGllTGVnZW5kVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZUxlZ2VuZFRleHRDb2xvcj10aGlzLnBpZUxlZ2VuZFRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVN0cm9rZUNvbG9yPXRoaXMucGllU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVTdHJva2VXaWR0aD10aGlzLnBpZVN0cm9rZVdpZHRofHwiMnB4Iix0aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGg9dGhpcy5waWVPdXRlclN0cm9rZVdpZHRofHwiMnB4Iix0aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3I9dGhpcy5waWVPdXRlclN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllT3BhY2l0eT10aGlzLnBpZU9wYWNpdHl8fCIwLjciLHRoaXMucXVhZHJhbnQxRmlsbD10aGlzLnF1YWRyYW50MUZpbGx8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucXVhZHJhbnQyRmlsbD10aGlzLnF1YWRyYW50MkZpbGx8fG1uKHRoaXMucHJpbWFyeUNvbG9yLHtyOjUsZzo1LGI6NX0pLHRoaXMucXVhZHJhbnQzRmlsbD10aGlzLnF1YWRyYW50M0ZpbGx8fG1uKHRoaXMucHJpbWFyeUNvbG9yLHtyOjEwLGc6MTAsYjoxMH0pLHRoaXMucXVhZHJhbnQ0RmlsbD10aGlzLnF1YWRyYW50NEZpbGx8fG1uKHRoaXMucHJpbWFyeUNvbG9yLHtyOjE1LGc6MTUsYjoxNX0pLHRoaXMucXVhZHJhbnQxVGV4dEZpbGw9dGhpcy5xdWFkcmFudDFUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnQyVGV4dEZpbGw9dGhpcy5xdWFkcmFudDJUZXh0RmlsbHx8bW4odGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi01LGc6LTUsYjotNX0pLHRoaXMucXVhZHJhbnQzVGV4dEZpbGw9dGhpcy5xdWFkcmFudDNUZXh0RmlsbHx8bW4odGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi0xMCxnOi0xMCxiOi0xMH0pLHRoaXMucXVhZHJhbnQ0VGV4dEZpbGw9dGhpcy5xdWFkcmFudDRUZXh0RmlsbHx8bW4odGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi0xNSxnOi0xNSxiOi0xNX0pLHRoaXMucXVhZHJhbnRQb2ludEZpbGw9dGhpcy5xdWFkcmFudFBvaW50RmlsbHx8WEUodGhpcy5xdWFkcmFudDFGaWxsKT9Tcyh0aGlzLnF1YWRyYW50MUZpbGwpOllzKHRoaXMucXVhZHJhbnQxRmlsbCksdGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGw9dGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsPXRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsPXRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGx8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucXVhZHJhbnRUaXRsZUZpbGw9dGhpcy5xdWFkcmFudFRpdGxlRmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kPXRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3I9dGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZT10aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZXx8IjEiLHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3I9dGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVsYXRpb25Db2xvcj10aGlzLnJlbGF0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQ9dGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZHx8KHRoaXMuZGFya01vZGU/WXModGhpcy5zZWNvbmRhcnlDb2xvciwzMCk6dGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy5yZWxhdGlvbkxhYmVsQ29sb3I9dGhpcy5yZWxhdGlvbkxhYmVsQ29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5naXQwPXRoaXMuZ2l0MHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5naXQxPXRoaXMuZ2l0MXx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmdpdDI9dGhpcy5naXQyfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5naXQzPXRoaXMuZ2l0M3x8bW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTMwfSksdGhpcy5naXQ0PXRoaXMuZ2l0NHx8bW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwfSksdGhpcy5naXQ1PXRoaXMuZ2l0NXx8bW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTkwfSksdGhpcy5naXQ2PXRoaXMuZ2l0Nnx8bW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmdpdDc9dGhpcy5naXQ3fHxtbih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLmRhcmtNb2RlPyh0aGlzLmdpdDA9U3ModGhpcy5naXQwLDI1KSx0aGlzLmdpdDE9U3ModGhpcy5naXQxLDI1KSx0aGlzLmdpdDI9U3ModGhpcy5naXQyLDI1KSx0aGlzLmdpdDM9U3ModGhpcy5naXQzLDI1KSx0aGlzLmdpdDQ9U3ModGhpcy5naXQ0LDI1KSx0aGlzLmdpdDU9U3ModGhpcy5naXQ1LDI1KSx0aGlzLmdpdDY9U3ModGhpcy5naXQ2LDI1KSx0aGlzLmdpdDc9U3ModGhpcy5naXQ3LDI1KSk6KHRoaXMuZ2l0MD1Zcyh0aGlzLmdpdDAsMjUpLHRoaXMuZ2l0MT1Zcyh0aGlzLmdpdDEsMjUpLHRoaXMuZ2l0Mj1Zcyh0aGlzLmdpdDIsMjUpLHRoaXMuZ2l0Mz1Zcyh0aGlzLmdpdDMsMjUpLHRoaXMuZ2l0ND1Zcyh0aGlzLmdpdDQsMjUpLHRoaXMuZ2l0NT1Zcyh0aGlzLmdpdDUsMjUpLHRoaXMuZ2l0Nj1Zcyh0aGlzLmdpdDYsMjUpLHRoaXMuZ2l0Nz1Zcyh0aGlzLmdpdDcsMjUpKSx0aGlzLmdpdEludjA9dGhpcy5naXRJbnYwfHxqaSh0aGlzLmdpdDApLHRoaXMuZ2l0SW52MT10aGlzLmdpdEludjF8fGppKHRoaXMuZ2l0MSksdGhpcy5naXRJbnYyPXRoaXMuZ2l0SW52Mnx8amkodGhpcy5naXQyKSx0aGlzLmdpdEludjM9dGhpcy5naXRJbnYzfHxqaSh0aGlzLmdpdDMpLHRoaXMuZ2l0SW52ND10aGlzLmdpdEludjR8fGppKHRoaXMuZ2l0NCksdGhpcy5naXRJbnY1PXRoaXMuZ2l0SW52NXx8amkodGhpcy5naXQ1KSx0aGlzLmdpdEludjY9dGhpcy5naXRJbnY2fHxqaSh0aGlzLmdpdDYpLHRoaXMuZ2l0SW52Nz10aGlzLmdpdEludjd8fGppKHRoaXMuZ2l0NyksdGhpcy5icmFuY2hMYWJlbENvbG9yPXRoaXMuYnJhbmNoTGFiZWxDb2xvcnx8KHRoaXMuZGFya01vZGU/ImJsYWNrIjp0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmdpdEJyYW5jaExhYmVsMD10aGlzLmdpdEJyYW5jaExhYmVsMHx8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwxPXRoaXMuZ2l0QnJhbmNoTGFiZWwxfHx0aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDI9dGhpcy5naXRCcmFuY2hMYWJlbDJ8fHRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMz10aGlzLmdpdEJyYW5jaExhYmVsM3x8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw0PXRoaXMuZ2l0QnJhbmNoTGFiZWw0fHx0aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDU9dGhpcy5naXRCcmFuY2hMYWJlbDV8fHRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNj10aGlzLmdpdEJyYW5jaExhYmVsNnx8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw3PXRoaXMuZ2l0QnJhbmNoTGFiZWw3fHx0aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy50YWdMYWJlbENvbG9yPXRoaXMudGFnTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kPXRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnRhZ0xhYmVsQm9yZGVyPXRoaXMudGFnQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnRhZ0xhYmVsRm9udFNpemU9dGhpcy50YWdMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5jb21taXRMYWJlbENvbG9yPXRoaXMuY29tbWl0TGFiZWxDb2xvcnx8dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3IsdGhpcy5jb21taXRMYWJlbEJhY2tncm91bmQ9dGhpcy5jb21taXRMYWJlbEJhY2tncm91bmR8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jb21taXRMYWJlbEZvbnRTaXplPXRoaXMuY29tbWl0TGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkfHxjVyx0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW49dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVufHx1V31jYWxjdWxhdGUoYSl7aWYodHlwZW9mIGEhPSJvYmplY3QiKXt0aGlzLnVwZGF0ZUNvbG9ycygpO3JldHVybn1jb25zdCBmPU9iamVjdC5rZXlzKGEpO2YuZm9yRWFjaChwPT57dGhpc1twXT1hW3BdfSksdGhpcy51cGRhdGVDb2xvcnMoKSxmLmZvckVhY2gocD0+e3RoaXNbcF09YVtwXX0pfX07Y29uc3QgejllPWk9Pntjb25zdCBhPW5ldyAkOWU7cmV0dXJuIGEuY2FsY3VsYXRlKGkpLGF9O2xldCBxOWU9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmJhY2tncm91bmQ9IiMzMzMiLHRoaXMucHJpbWFyeUNvbG9yPSIjMWYyMDIwIix0aGlzLnNlY29uZGFyeUNvbG9yPVNzKHRoaXMucHJpbWFyeUNvbG9yLDE2KSx0aGlzLnRlcnRpYXJ5Q29sb3I9bW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTE2MH0pLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPWppKHRoaXMuYmFja2dyb3VuZCksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj1hZyh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj1hZyh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5wcmltYXJ5VGV4dENvbG9yPWppKHRoaXMucHJpbWFyeUNvbG9yKSx0aGlzLnNlY29uZGFyeVRleHRDb2xvcj1qaSh0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yPWppKHRoaXMudGVydGlhcnlDb2xvciksdGhpcy5saW5lQ29sb3I9amkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj1qaSh0aGlzLmJhY2tncm91bmQpLHRoaXMubWFpbkJrZz0iIzFmMjAyMCIsdGhpcy5zZWNvbmRCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubWFpbkNvbnRyYXN0Q29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kYXJrVGV4dENvbG9yPVNzKGppKCIjMzIzRDQ3IiksMTApLHRoaXMubGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmJvcmRlcjE9IiM4MUIxREIiLHRoaXMuYm9yZGVyMj1JQSgyNTUsMjU1LDI1NSwuMjUpLHRoaXMuYXJyb3doZWFkQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4Iix0aGlzLmxhYmVsQmFja2dyb3VuZD0iIzE4MTgxOCIsdGhpcy50ZXh0Q29sb3I9IiNjY2MiLHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ9MTIsdGhpcy5ub2RlQmtnPSJjYWxjdWxhdGVkIix0aGlzLm5vZGVCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGl0bGVDb2xvcj0iI0Y5RkZGRSIsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQmtnPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yTGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJibGFjayIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9WXMoIiNFQUU4RDkiLDMwKSx0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPSIjRUFFOEQ5Iix0aGlzLmV4Y2x1ZGVCa2dDb2xvcj1Zcyh0aGlzLnNlY3Rpb25Ca2dDb2xvciwxMCksdGhpcy50YXNrQm9yZGVyQ29sb3I9SUEoMjU1LDI1NSwyNTUsNzApLHRoaXMudGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRMaWdodENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9IiMwMDMxNjMiLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPUlBKDI1NSwyNTUsMjU1LDUwKSx0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj0iIzgxQjFEQiIsdGhpcy5ncmlkQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPSJncmV5Iix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iI0U4MzczNyIsdGhpcy5jcml0QmtnQ29sb3I9IiNFODM3MzciLHRoaXMudGFza1RleHREYXJrQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9IiNEQjU3NTciLHRoaXMucGVyc29uQm9yZGVyPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucGVyc29uQmtnPXRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZXJyb3JCa2dDb2xvcj0iI2E0NDE0MSIsdGhpcy5lcnJvclRleHRDb2xvcj0iI2RkZCJ9dXBkYXRlQ29sb3JzKCl7dGhpcy5zZWNvbmRCa2c9U3ModGhpcy5tYWluQmtnLDE2KSx0aGlzLmxpbmVDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMuYXJyb3doZWFkQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLm5vZGVCa2c9dGhpcy5tYWluQmtnLHRoaXMubm9kZUJvcmRlcj10aGlzLmJvcmRlcjEsdGhpcy5jbHVzdGVyQmtnPXRoaXMuc2Vjb25kQmtnLHRoaXMuY2x1c3RlckJvcmRlcj10aGlzLmJvcmRlcjIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD1Tcyh0aGlzLmxhYmVsQmFja2dyb3VuZCwyNSksdGhpcy5hY3RvckJvcmRlcj10aGlzLmJvcmRlcjEsdGhpcy5hY3RvckJrZz10aGlzLm1haW5Ca2csdGhpcy5hY3RvclRleHRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMuYWN0b3JMaW5lQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLnNpZ25hbENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5zaWduYWxUZXh0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5hY3RvckJrZyx0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9dGhpcy5hY3RvckJvcmRlcix0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5ub3RlQm9yZGVyQ29sb3I9dGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcix0aGlzLm5vdGVCa2dDb2xvcj10aGlzLnNlY29uZEJrZyx0aGlzLm5vdGVUZXh0Q29sb3I9dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3IsdGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3I9dGhpcy5ib3JkZXIxLHRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yPXRoaXMuc2Vjb25kQmtnLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPXRoaXMuYmFja2dyb3VuZCx0aGlzLnRhc2tCa2dDb2xvcj1Tcyh0aGlzLm1haW5Ca2csMjMpLHRoaXMudGFza1RleHRDb2xvcj10aGlzLmRhcmtUZXh0Q29sb3IsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMuZ3JpZENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5kb25lVGFza0JrZ0NvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy50YXNrVGV4dERhcmtDb2xvcj10aGlzLmRhcmtUZXh0Q29sb3IsdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3I9dGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zdGF0ZUxhYmVsQ29sb3I9dGhpcy5zdGF0ZUxhYmVsQ29sb3J8fHRoaXMuc3RhdGVCa2d8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnN0YXRlQmtnPXRoaXMuc3RhdGVCa2d8fHRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yPXRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3J8fHRoaXMuc3RhdGVCa2csdGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlQmFja2dyb3VuZHx8dGhpcy5iYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5hbHRCYWNrZ3JvdW5kPXRoaXMuYWx0QmFja2dyb3VuZHx8IiM1NTUiLHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfHx0aGlzLm1haW5Ca2csdGhpcy5jb21wb3NpdGVCb3JkZXI9dGhpcy5jb21wb3NpdGVCb3JkZXJ8fHRoaXMubm9kZUJvcmRlcix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPSIjZjRmNGY0Iix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMuZmlsbFR5cGUwPXRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZmlsbFR5cGUxPXRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTI9bW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlMz1tbih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9bW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTU9bW4odGhpcy5zZWNvbmRhcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNj1tbih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz1tbih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjEyOH0pLHRoaXMuY1NjYWxlMT10aGlzLmNTY2FsZTF8fCIjMGIwMDAwIix0aGlzLmNTY2FsZTI9dGhpcy5jU2NhbGUyfHwiIzRkMTAzNyIsdGhpcy5jU2NhbGUzPXRoaXMuY1NjYWxlM3x8IiMzZjUyNTgiLHRoaXMuY1NjYWxlND10aGlzLmNTY2FsZTR8fCIjNGYyZjFiIix0aGlzLmNTY2FsZTU9dGhpcy5jU2NhbGU1fHwiIzZlMGEwYSIsdGhpcy5jU2NhbGU2PXRoaXMuY1NjYWxlNnx8IiMzYjAwNDgiLHRoaXMuY1NjYWxlNz10aGlzLmNTY2FsZTd8fCIjOTk1YTAxIix0aGlzLmNTY2FsZTg9dGhpcy5jU2NhbGU4fHwiIzE1NDcwNiIsdGhpcy5jU2NhbGU5PXRoaXMuY1NjYWxlOXx8IiMxNjE3MjIiLHRoaXMuY1NjYWxlMTA9dGhpcy5jU2NhbGUxMHx8IiMwMDI5NmYiLHRoaXMuY1NjYWxlMTE9dGhpcy5jU2NhbGUxMXx8IiMwMTYyOWMiLHRoaXMuY1NjYWxlMTI9dGhpcy5jU2NhbGUxMnx8IiMwMTAwMjkiLHRoaXMuY1NjYWxlMD10aGlzLmNTY2FsZTB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuY1NjYWxlMT10aGlzLmNTY2FsZTF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jU2NhbGUyPXRoaXMuY1NjYWxlMnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuY1NjYWxlMz10aGlzLmNTY2FsZTN8fG1uKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMwfSksdGhpcy5jU2NhbGU0PXRoaXMuY1NjYWxlNHx8bW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmNTY2FsZTU9dGhpcy5jU2NhbGU1fHxtbih0aGlzLnByaW1hcnlDb2xvcix7aDo5MH0pLHRoaXMuY1NjYWxlNj10aGlzLmNTY2FsZTZ8fG1uKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuY1NjYWxlNz10aGlzLmNTY2FsZTd8fG1uKHRoaXMucHJpbWFyeUNvbG9yLHtoOjE1MH0pLHRoaXMuY1NjYWxlOD10aGlzLmNTY2FsZTh8fG1uKHRoaXMucHJpbWFyeUNvbG9yLHtoOjIxMH0pLHRoaXMuY1NjYWxlOT10aGlzLmNTY2FsZTl8fG1uKHRoaXMucHJpbWFyeUNvbG9yLHtoOjI3MH0pLHRoaXMuY1NjYWxlMTA9dGhpcy5jU2NhbGUxMHx8bW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MzAwfSksdGhpcy5jU2NhbGUxMT10aGlzLmNTY2FsZTExfHxtbih0aGlzLnByaW1hcnlDb2xvcix7aDozMzB9KTtmb3IobGV0IGE9MDthPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7YSsrKXRoaXNbImNTY2FsZUludiIrYV09dGhpc1siY1NjYWxlSW52IithXXx8amkodGhpc1siY1NjYWxlIithXSk7Zm9yKGxldCBhPTA7YTx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO2ErKyl0aGlzWyJjU2NhbGVQZWVyIithXT10aGlzWyJjU2NhbGVQZWVyIithXXx8U3ModGhpc1siY1NjYWxlIithXSwxMCk7Zm9yKGxldCBhPTA7YTw1O2ErKyl0aGlzWyJzdXJmYWNlIithXT10aGlzWyJzdXJmYWNlIithXXx8bW4odGhpcy5tYWluQmtnLHtoOjMwLHM6LTMwLGw6LSgtMTArYSo0KX0pLHRoaXNbInN1cmZhY2VQZWVyIithXT10aGlzWyJzdXJmYWNlUGVlciIrYV18fG1uKHRoaXMubWFpbkJrZyx7aDozMCxzOi0zMCxsOi0oLTcrYSo0KX0pO3RoaXMuc2NhbGVMYWJlbENvbG9yPXRoaXMuc2NhbGVMYWJlbENvbG9yfHwodGhpcy5kYXJrTW9kZT8iYmxhY2siOnRoaXMubGFiZWxUZXh0Q29sb3IpO2ZvcihsZXQgYT0wO2E8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDthKyspdGhpc1siY1NjYWxlTGFiZWwiK2FdPXRoaXNbImNTY2FsZUxhYmVsIithXXx8dGhpcy5zY2FsZUxhYmVsQ29sb3I7Zm9yKGxldCBhPTA7YTx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO2ErKyl0aGlzWyJwaWUiK2FdPXRoaXNbImNTY2FsZSIrYV07dGhpcy5waWVUaXRsZVRleHRTaXplPXRoaXMucGllVGl0bGVUZXh0U2l6ZXx8IjI1cHgiLHRoaXMucGllVGl0bGVUZXh0Q29sb3I9dGhpcy5waWVUaXRsZVRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZT10aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllU2VjdGlvblRleHRDb2xvcj10aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMucGllTGVnZW5kVGV4dFNpemU9dGhpcy5waWVMZWdlbmRUZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllTGVnZW5kVGV4dENvbG9yPXRoaXMucGllTGVnZW5kVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU3Ryb2tlQ29sb3I9dGhpcy5waWVTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZVN0cm9rZVdpZHRoPXRoaXMucGllU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3V0ZXJTdHJva2VXaWR0aD10aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3V0ZXJTdHJva2VDb2xvcj10aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVPcGFjaXR5PXRoaXMucGllT3BhY2l0eXx8IjAuNyIsdGhpcy5xdWFkcmFudDFGaWxsPXRoaXMucXVhZHJhbnQxRmlsbHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5xdWFkcmFudDJGaWxsPXRoaXMucXVhZHJhbnQyRmlsbHx8bW4odGhpcy5wcmltYXJ5Q29sb3Ise3I6NSxnOjUsYjo1fSksdGhpcy5xdWFkcmFudDNGaWxsPXRoaXMucXVhZHJhbnQzRmlsbHx8bW4odGhpcy5wcmltYXJ5Q29sb3Ise3I6MTAsZzoxMCxiOjEwfSksdGhpcy5xdWFkcmFudDRGaWxsPXRoaXMucXVhZHJhbnQ0RmlsbHx8bW4odGhpcy5wcmltYXJ5Q29sb3Ise3I6MTUsZzoxNSxiOjE1fSksdGhpcy5xdWFkcmFudDFUZXh0RmlsbD10aGlzLnF1YWRyYW50MVRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudDJUZXh0RmlsbD10aGlzLnF1YWRyYW50MlRleHRGaWxsfHxtbih0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTUsZzotNSxiOi01fSksdGhpcy5xdWFkcmFudDNUZXh0RmlsbD10aGlzLnF1YWRyYW50M1RleHRGaWxsfHxtbih0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTEwLGc6LTEwLGI6LTEwfSksdGhpcy5xdWFkcmFudDRUZXh0RmlsbD10aGlzLnF1YWRyYW50NFRleHRGaWxsfHxtbih0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTE1LGc6LTE1LGI6LTE1fSksdGhpcy5xdWFkcmFudFBvaW50RmlsbD10aGlzLnF1YWRyYW50UG9pbnRGaWxsfHxYRSh0aGlzLnF1YWRyYW50MUZpbGwpP1NzKHRoaXMucXVhZHJhbnQxRmlsbCk6WXModGhpcy5xdWFkcmFudDFGaWxsKSx0aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbD10aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsPXRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsPXRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGx8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudFRpdGxlRmlsbD10aGlzLnF1YWRyYW50VGl0bGVGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5jbGFzc1RleHQ9dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kPXRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3I9dGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZT10aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZXx8IjEiLHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3I9dGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVsYXRpb25Db2xvcj10aGlzLnJlbGF0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQ9dGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZHx8KHRoaXMuZGFya01vZGU/WXModGhpcy5zZWNvbmRhcnlDb2xvciwzMCk6dGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy5yZWxhdGlvbkxhYmVsQ29sb3I9dGhpcy5yZWxhdGlvbkxhYmVsQ29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5naXQwPVNzKHRoaXMuc2Vjb25kYXJ5Q29sb3IsMjApLHRoaXMuZ2l0MT1Tcyh0aGlzLnBpZTJ8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsMjApLHRoaXMuZ2l0Mj1Tcyh0aGlzLnBpZTN8fHRoaXMudGVydGlhcnlDb2xvciwyMCksdGhpcy5naXQzPVNzKHRoaXMucGllNHx8bW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTMwfSksMjApLHRoaXMuZ2l0ND1Tcyh0aGlzLnBpZTV8fG1uKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MH0pLDIwKSx0aGlzLmdpdDU9U3ModGhpcy5waWU2fHxtbih0aGlzLnByaW1hcnlDb2xvcix7aDotOTB9KSwxMCksdGhpcy5naXQ2PVNzKHRoaXMucGllN3x8bW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSwxMCksdGhpcy5naXQ3PVNzKHRoaXMucGllOHx8bW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksMjApLHRoaXMuZ2l0SW52MD10aGlzLmdpdEludjB8fGppKHRoaXMuZ2l0MCksdGhpcy5naXRJbnYxPXRoaXMuZ2l0SW52MXx8amkodGhpcy5naXQxKSx0aGlzLmdpdEludjI9dGhpcy5naXRJbnYyfHxqaSh0aGlzLmdpdDIpLHRoaXMuZ2l0SW52Mz10aGlzLmdpdEludjN8fGppKHRoaXMuZ2l0MyksdGhpcy5naXRJbnY0PXRoaXMuZ2l0SW52NHx8amkodGhpcy5naXQ0KSx0aGlzLmdpdEludjU9dGhpcy5naXRJbnY1fHxqaSh0aGlzLmdpdDUpLHRoaXMuZ2l0SW52Nj10aGlzLmdpdEludjZ8fGppKHRoaXMuZ2l0NiksdGhpcy5naXRJbnY3PXRoaXMuZ2l0SW52N3x8amkodGhpcy5naXQ3KSx0aGlzLmdpdEJyYW5jaExhYmVsMD10aGlzLmdpdEJyYW5jaExhYmVsMHx8amkodGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5naXRCcmFuY2hMYWJlbDE9dGhpcy5naXRCcmFuY2hMYWJlbDF8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDI9dGhpcy5naXRCcmFuY2hMYWJlbDJ8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDM9dGhpcy5naXRCcmFuY2hMYWJlbDN8fGppKHRoaXMubGFiZWxUZXh0Q29sb3IpLHRoaXMuZ2l0QnJhbmNoTGFiZWw0PXRoaXMuZ2l0QnJhbmNoTGFiZWw0fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw1PXRoaXMuZ2l0QnJhbmNoTGFiZWw1fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw2PXRoaXMuZ2l0QnJhbmNoTGFiZWw2fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw3PXRoaXMuZ2l0QnJhbmNoTGFiZWw3fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMudGFnTGFiZWxDb2xvcj10aGlzLnRhZ0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnRhZ0xhYmVsQmFja2dyb3VuZD10aGlzLnRhZ0xhYmVsQmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy50YWdMYWJlbEJvcmRlcj10aGlzLnRhZ0JvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy50YWdMYWJlbEZvbnRTaXplPXRoaXMudGFnTGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuY29tbWl0TGFiZWxDb2xvcj10aGlzLmNvbW1pdExhYmVsQ29sb3J8fHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yLHRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kPXRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZT10aGlzLmNvbW1pdExhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZD10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZHx8U3ModGhpcy5iYWNrZ3JvdW5kLDEyKSx0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW49dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVufHxTcyh0aGlzLmJhY2tncm91bmQsMil9Y2FsY3VsYXRlKGEpe2lmKHR5cGVvZiBhIT0ib2JqZWN0Iil7dGhpcy51cGRhdGVDb2xvcnMoKTtyZXR1cm59Y29uc3QgZj1PYmplY3Qua2V5cyhhKTtmLmZvckVhY2gocD0+e3RoaXNbcF09YVtwXX0pLHRoaXMudXBkYXRlQ29sb3JzKCksZi5mb3JFYWNoKHA9Pnt0aGlzW3BdPWFbcF19KX19O2NvbnN0IEg5ZT1pPT57Y29uc3QgYT1uZXcgcTllO3JldHVybiBhLmNhbGN1bGF0ZShpKSxhfTtsZXQgVjllPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5iYWNrZ3JvdW5kPSIjZjRmNGY0Iix0aGlzLnByaW1hcnlDb2xvcj0iI0VDRUNGRiIsdGhpcy5zZWNvbmRhcnlDb2xvcj1tbih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLnNlY29uZGFyeUNvbG9yPSIjZmZmZmRlIix0aGlzLnRlcnRpYXJ5Q29sb3I9bW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTE2MH0pLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPWFnKHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3I9YWcodGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3I9YWcodGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMucHJpbWFyeVRleHRDb2xvcj1qaSh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9amkodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj1qaSh0aGlzLnRlcnRpYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPWppKHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9amkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLmJhY2tncm91bmQ9IndoaXRlIix0aGlzLm1haW5Ca2c9IiNFQ0VDRkYiLHRoaXMuc2Vjb25kQmtnPSIjZmZmZmRlIix0aGlzLmxpbmVDb2xvcj0iIzMzMzMzMyIsdGhpcy5ib3JkZXIxPSIjOTM3MERCIix0aGlzLmJvcmRlcjI9IiNhYWFhMzMiLHRoaXMuYXJyb3doZWFkQ29sb3I9IiMzMzMzMzMiLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4Iix0aGlzLmxhYmVsQmFja2dyb3VuZD0iI2U4ZThlOCIsdGhpcy50ZXh0Q29sb3I9IiMzMzMiLHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ9MTIsdGhpcy5ub2RlQmtnPSJjYWxjdWxhdGVkIix0aGlzLm5vZGVCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGl0bGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQmtnPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yVGV4dENvbG9yPSJibGFjayIsdGhpcy5hY3RvckxpbmVDb2xvcj0iZ3JleSIsdGhpcy5zaWduYWxDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxvb3BUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCa2dDb2xvcj0iI2ZmZjVhZCIsdGhpcy5ub3RlVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj0iIzY2NiIsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9IiNmNGY0ZjQiLHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPSJjYWxjdWxhdGVkIix0aGlzLmV4Y2x1ZGVCa2dDb2xvcj0iI2VlZWVlZSIsdGhpcy50YXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMudGFza1RleHREYXJrQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ncmlkQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5jcml0QmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPUlBKDEwMiwxMDIsMjU1LC40OSksdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9IndoaXRlIix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9IiNmZmY0MDAiLHRoaXMudGFza0JvcmRlckNvbG9yPSIjNTM0ZmJjIix0aGlzLnRhc2tCa2dDb2xvcj0iIzhhOTBkZCIsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9IndoaXRlIix0aGlzLnRhc2tUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHREYXJrQ29sb3I9ImJsYWNrIix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9IiMwMDMxNjMiLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPSIjNTM0ZmJjIix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj0iI2JmYzdmZiIsdGhpcy5ncmlkQ29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPSJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj0iZ3JleSIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9IiNmZjg4ODgiLHRoaXMuY3JpdEJrZ0NvbG9yPSJyZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9InJlZCIsdGhpcy5wZXJzb25Cb3JkZXI9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5wZXJzb25Ca2c9dGhpcy5tYWluQmtnLHRoaXMubGFiZWxDb2xvcj0iYmxhY2siLHRoaXMuZXJyb3JCa2dDb2xvcj0iIzU1MjIyMiIsdGhpcy5lcnJvclRleHRDb2xvcj0iIzU1MjIyMiIsdGhpcy51cGRhdGVDb2xvcnMoKX11cGRhdGVDb2xvcnMoKXt0aGlzLmNTY2FsZTA9dGhpcy5jU2NhbGUwfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmNTY2FsZTE9dGhpcy5jU2NhbGUxfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY1NjYWxlMj10aGlzLmNTY2FsZTJ8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmNTY2FsZTM9dGhpcy5jU2NhbGUzfHxtbih0aGlzLnByaW1hcnlDb2xvcix7aDozMH0pLHRoaXMuY1NjYWxlND10aGlzLmNTY2FsZTR8fG1uKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwfSksdGhpcy5jU2NhbGU1PXRoaXMuY1NjYWxlNXx8bW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6OTB9KSx0aGlzLmNTY2FsZTY9dGhpcy5jU2NhbGU2fHxtbih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLmNTY2FsZTc9dGhpcy5jU2NhbGU3fHxtbih0aGlzLnByaW1hcnlDb2xvcix7aDoxNTB9KSx0aGlzLmNTY2FsZTg9dGhpcy5jU2NhbGU4fHxtbih0aGlzLnByaW1hcnlDb2xvcix7aDoyMTB9KSx0aGlzLmNTY2FsZTk9dGhpcy5jU2NhbGU5fHxtbih0aGlzLnByaW1hcnlDb2xvcix7aDoyNzB9KSx0aGlzLmNTY2FsZTEwPXRoaXMuY1NjYWxlMTB8fG1uKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMwMH0pLHRoaXMuY1NjYWxlMTE9dGhpcy5jU2NhbGUxMXx8bW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MzMwfSksdGhpc1siY1NjYWxlUGVlcjEiXT10aGlzWyJjU2NhbGVQZWVyMSJdfHxZcyh0aGlzLnNlY29uZGFyeUNvbG9yLDQ1KSx0aGlzWyJjU2NhbGVQZWVyMiJdPXRoaXNbImNTY2FsZVBlZXIyIl18fFlzKHRoaXMudGVydGlhcnlDb2xvciw0MCk7Zm9yKGxldCBhPTA7YTx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO2ErKyl0aGlzWyJjU2NhbGUiK2FdPVlzKHRoaXNbImNTY2FsZSIrYV0sMTApLHRoaXNbImNTY2FsZVBlZXIiK2FdPXRoaXNbImNTY2FsZVBlZXIiK2FdfHxZcyh0aGlzWyJjU2NhbGUiK2FdLDI1KTtmb3IobGV0IGE9MDthPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7YSsrKXRoaXNbImNTY2FsZUludiIrYV09dGhpc1siY1NjYWxlSW52IithXXx8bW4odGhpc1siY1NjYWxlIithXSx7aDoxODB9KTtmb3IobGV0IGE9MDthPDU7YSsrKXRoaXNbInN1cmZhY2UiK2FdPXRoaXNbInN1cmZhY2UiK2FdfHxtbih0aGlzLm1haW5Ca2cse2g6MzAsbDotKDUrYSo1KX0pLHRoaXNbInN1cmZhY2VQZWVyIithXT10aGlzWyJzdXJmYWNlUGVlciIrYV18fG1uKHRoaXMubWFpbkJrZyx7aDozMCxsOi0oNythKjUpfSk7aWYodGhpcy5zY2FsZUxhYmVsQ29sb3I9dGhpcy5zY2FsZUxhYmVsQ29sb3IhPT0iY2FsY3VsYXRlZCImJnRoaXMuc2NhbGVMYWJlbENvbG9yP3RoaXMuc2NhbGVMYWJlbENvbG9yOnRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5sYWJlbFRleHRDb2xvciE9PSJjYWxjdWxhdGVkIil7dGhpcy5jU2NhbGVMYWJlbDA9dGhpcy5jU2NhbGVMYWJlbDB8fGppKHRoaXMubGFiZWxUZXh0Q29sb3IpLHRoaXMuY1NjYWxlTGFiZWwzPXRoaXMuY1NjYWxlTGFiZWwzfHxqaSh0aGlzLmxhYmVsVGV4dENvbG9yKTtmb3IobGV0IGE9MDthPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7YSsrKXRoaXNbImNTY2FsZUxhYmVsIithXT10aGlzWyJjU2NhbGVMYWJlbCIrYV18fHRoaXMubGFiZWxUZXh0Q29sb3J9dGhpcy5ub2RlQmtnPXRoaXMubWFpbkJrZyx0aGlzLm5vZGVCb3JkZXI9dGhpcy5ib3JkZXIxLHRoaXMuY2x1c3RlckJrZz10aGlzLnNlY29uZEJrZyx0aGlzLmNsdXN0ZXJCb3JkZXI9dGhpcy5ib3JkZXIyLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLnRpdGxlQ29sb3I9dGhpcy50ZXh0Q29sb3IsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPXRoaXMubGFiZWxCYWNrZ3JvdW5kLHRoaXMuYWN0b3JCb3JkZXI9U3ModGhpcy5ib3JkZXIxLDIzKSx0aGlzLmFjdG9yQmtnPXRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5hY3RvckJrZyx0aGlzLnNpZ25hbENvbG9yPXRoaXMudGV4dENvbG9yLHRoaXMuc2lnbmFsVGV4dENvbG9yPXRoaXMudGV4dENvbG9yLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj10aGlzLmFjdG9yQm9yZGVyLHRoaXMubGFiZWxUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLm5vdGVCb3JkZXJDb2xvcj10aGlzLmJvcmRlcjIsdGhpcy5ub3RlVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiI2YwZjBmMCIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLmNvbXBvc2l0ZUJvcmRlcj10aGlzLmNvbXBvc2l0ZUJvcmRlcnx8dGhpcy5ub2RlQm9yZGVyLHRoaXMuaW5uZXJFbmRCYWNrZ3JvdW5kPXRoaXMubm9kZUJvcmRlcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuZXJyb3JCa2dDb2xvcj10aGlzLmVycm9yQmtnQ29sb3J8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmVycm9yVGV4dENvbG9yPXRoaXMuZXJyb3JUZXh0Q29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMuY2xhc3NUZXh0PXRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZmlsbFR5cGUyPW1uKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9bW4odGhpcy5zZWNvbmRhcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGU0PW1uKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU1PW1uKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9bW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5maWxsVHlwZTc9bW4odGhpcy5zZWNvbmRhcnlDb2xvcix7aDoxMjh9KSx0aGlzLnBpZTE9dGhpcy5waWUxfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnBpZTI9dGhpcy5waWUyfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMucGllMz10aGlzLnBpZTN8fG1uKHRoaXMudGVydGlhcnlDb2xvcix7bDotNDB9KSx0aGlzLnBpZTQ9dGhpcy5waWU0fHxtbih0aGlzLnByaW1hcnlDb2xvcix7bDotMTB9KSx0aGlzLnBpZTU9dGhpcy5waWU1fHxtbih0aGlzLnNlY29uZGFyeUNvbG9yLHtsOi0zMH0pLHRoaXMucGllNj10aGlzLnBpZTZ8fG1uKHRoaXMudGVydGlhcnlDb2xvcix7bDotMjB9KSx0aGlzLnBpZTc9dGhpcy5waWU3fHxtbih0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi0yMH0pLHRoaXMucGllOD10aGlzLnBpZTh8fG1uKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MCxsOi00MH0pLHRoaXMucGllOT10aGlzLnBpZTl8fG1uKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMCxsOi00MH0pLHRoaXMucGllMTA9dGhpcy5waWUxMHx8bW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotNDB9KSx0aGlzLnBpZTExPXRoaXMucGllMTF8fG1uKHRoaXMucHJpbWFyeUNvbG9yLHtoOi05MCxsOi00MH0pLHRoaXMucGllMTI9dGhpcy5waWUxMnx8bW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6LTMwfSksdGhpcy5waWVUaXRsZVRleHRTaXplPXRoaXMucGllVGl0bGVUZXh0U2l6ZXx8IjI1cHgiLHRoaXMucGllVGl0bGVUZXh0Q29sb3I9dGhpcy5waWVUaXRsZVRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZT10aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllU2VjdGlvblRleHRDb2xvcj10aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMucGllTGVnZW5kVGV4dFNpemU9dGhpcy5waWVMZWdlbmRUZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllTGVnZW5kVGV4dENvbG9yPXRoaXMucGllTGVnZW5kVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU3Ryb2tlQ29sb3I9dGhpcy5waWVTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZVN0cm9rZVdpZHRoPXRoaXMucGllU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3V0ZXJTdHJva2VXaWR0aD10aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3V0ZXJTdHJva2VDb2xvcj10aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVPcGFjaXR5PXRoaXMucGllT3BhY2l0eXx8IjAuNyIsdGhpcy5xdWFkcmFudDFGaWxsPXRoaXMucXVhZHJhbnQxRmlsbHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5xdWFkcmFudDJGaWxsPXRoaXMucXVhZHJhbnQyRmlsbHx8bW4odGhpcy5wcmltYXJ5Q29sb3Ise3I6NSxnOjUsYjo1fSksdGhpcy5xdWFkcmFudDNGaWxsPXRoaXMucXVhZHJhbnQzRmlsbHx8bW4odGhpcy5wcmltYXJ5Q29sb3Ise3I6MTAsZzoxMCxiOjEwfSksdGhpcy5xdWFkcmFudDRGaWxsPXRoaXMucXVhZHJhbnQ0RmlsbHx8bW4odGhpcy5wcmltYXJ5Q29sb3Ise3I6MTUsZzoxNSxiOjE1fSksdGhpcy5xdWFkcmFudDFUZXh0RmlsbD10aGlzLnF1YWRyYW50MVRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudDJUZXh0RmlsbD10aGlzLnF1YWRyYW50MlRleHRGaWxsfHxtbih0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTUsZzotNSxiOi01fSksdGhpcy5xdWFkcmFudDNUZXh0RmlsbD10aGlzLnF1YWRyYW50M1RleHRGaWxsfHxtbih0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTEwLGc6LTEwLGI6LTEwfSksdGhpcy5xdWFkcmFudDRUZXh0RmlsbD10aGlzLnF1YWRyYW50NFRleHRGaWxsfHxtbih0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTE1LGc6LTE1LGI6LTE1fSksdGhpcy5xdWFkcmFudFBvaW50RmlsbD10aGlzLnF1YWRyYW50UG9pbnRGaWxsfHxYRSh0aGlzLnF1YWRyYW50MUZpbGwpP1NzKHRoaXMucXVhZHJhbnQxRmlsbCk6WXModGhpcy5xdWFkcmFudDFGaWxsKSx0aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbD10aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsPXRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsPXRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGx8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudFRpdGxlRmlsbD10aGlzLnF1YWRyYW50VGl0bGVGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQ9dGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcj10aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplfHwiMSIsdGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcj10aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZWxhdGlvbkNvbG9yPXRoaXMucmVsYXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZD10aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLmxhYmVsQmFja2dyb3VuZCx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmdpdDA9dGhpcy5naXQwfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmdpdDE9dGhpcy5naXQxfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZ2l0Mj10aGlzLmdpdDJ8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmdpdDM9dGhpcy5naXQzfHxtbih0aGlzLnByaW1hcnlDb2xvcix7aDotMzB9KSx0aGlzLmdpdDQ9dGhpcy5naXQ0fHxtbih0aGlzLnByaW1hcnlDb2xvcix7aDotNjB9KSx0aGlzLmdpdDU9dGhpcy5naXQ1fHxtbih0aGlzLnByaW1hcnlDb2xvcix7aDotOTB9KSx0aGlzLmdpdDY9dGhpcy5naXQ2fHxtbih0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLHRoaXMuZ2l0Nz10aGlzLmdpdDd8fG1uKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuZGFya01vZGU/KHRoaXMuZ2l0MD1Tcyh0aGlzLmdpdDAsMjUpLHRoaXMuZ2l0MT1Tcyh0aGlzLmdpdDEsMjUpLHRoaXMuZ2l0Mj1Tcyh0aGlzLmdpdDIsMjUpLHRoaXMuZ2l0Mz1Tcyh0aGlzLmdpdDMsMjUpLHRoaXMuZ2l0ND1Tcyh0aGlzLmdpdDQsMjUpLHRoaXMuZ2l0NT1Tcyh0aGlzLmdpdDUsMjUpLHRoaXMuZ2l0Nj1Tcyh0aGlzLmdpdDYsMjUpLHRoaXMuZ2l0Nz1Tcyh0aGlzLmdpdDcsMjUpKToodGhpcy5naXQwPVlzKHRoaXMuZ2l0MCwyNSksdGhpcy5naXQxPVlzKHRoaXMuZ2l0MSwyNSksdGhpcy5naXQyPVlzKHRoaXMuZ2l0MiwyNSksdGhpcy5naXQzPVlzKHRoaXMuZ2l0MywyNSksdGhpcy5naXQ0PVlzKHRoaXMuZ2l0NCwyNSksdGhpcy5naXQ1PVlzKHRoaXMuZ2l0NSwyNSksdGhpcy5naXQ2PVlzKHRoaXMuZ2l0NiwyNSksdGhpcy5naXQ3PVlzKHRoaXMuZ2l0NywyNSkpLHRoaXMuZ2l0SW52MD10aGlzLmdpdEludjB8fFlzKGppKHRoaXMuZ2l0MCksMjUpLHRoaXMuZ2l0SW52MT10aGlzLmdpdEludjF8fGppKHRoaXMuZ2l0MSksdGhpcy5naXRJbnYyPXRoaXMuZ2l0SW52Mnx8amkodGhpcy5naXQyKSx0aGlzLmdpdEludjM9dGhpcy5naXRJbnYzfHxqaSh0aGlzLmdpdDMpLHRoaXMuZ2l0SW52ND10aGlzLmdpdEludjR8fGppKHRoaXMuZ2l0NCksdGhpcy5naXRJbnY1PXRoaXMuZ2l0SW52NXx8amkodGhpcy5naXQ1KSx0aGlzLmdpdEludjY9dGhpcy5naXRJbnY2fHxqaSh0aGlzLmdpdDYpLHRoaXMuZ2l0SW52Nz10aGlzLmdpdEludjd8fGppKHRoaXMuZ2l0NyksdGhpcy5naXRCcmFuY2hMYWJlbDA9dGhpcy5naXRCcmFuY2hMYWJlbDB8fGppKHRoaXMubGFiZWxUZXh0Q29sb3IpLHRoaXMuZ2l0QnJhbmNoTGFiZWwxPXRoaXMuZ2l0QnJhbmNoTGFiZWwxfHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwyPXRoaXMuZ2l0QnJhbmNoTGFiZWwyfHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwzPXRoaXMuZ2l0QnJhbmNoTGFiZWwzfHxqaSh0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmdpdEJyYW5jaExhYmVsND10aGlzLmdpdEJyYW5jaExhYmVsNHx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNT10aGlzLmdpdEJyYW5jaExhYmVsNXx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNj10aGlzLmdpdEJyYW5jaExhYmVsNnx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNz10aGlzLmdpdEJyYW5jaExhYmVsN3x8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLnRhZ0xhYmVsQ29sb3I9dGhpcy50YWdMYWJlbENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy50YWdMYWJlbEJhY2tncm91bmQ9dGhpcy50YWdMYWJlbEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMudGFnTGFiZWxCb3JkZXI9dGhpcy50YWdCb3JkZXJ8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMudGFnTGFiZWxGb250U2l6ZT10aGlzLnRhZ0xhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmNvbW1pdExhYmVsQ29sb3I9dGhpcy5jb21taXRMYWJlbENvbG9yfHx0aGlzLnNlY29uZGFyeVRleHRDb2xvcix0aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZD10aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZHx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmNvbW1pdExhYmVsRm9udFNpemU9dGhpcy5jb21taXRMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGQ9dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGR8fGNXLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbj10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW58fHVXfWNhbGN1bGF0ZShhKXtpZih0eXBlb2YgYSE9Im9iamVjdCIpe3RoaXMudXBkYXRlQ29sb3JzKCk7cmV0dXJufWNvbnN0IGY9T2JqZWN0LmtleXMoYSk7Zi5mb3JFYWNoKHA9Pnt0aGlzW3BdPWFbcF19KSx0aGlzLnVwZGF0ZUNvbG9ycygpLGYuZm9yRWFjaChwPT57dGhpc1twXT1hW3BdfSl9fTtjb25zdCBKRHQ9aT0+e2NvbnN0IGE9bmV3IFY5ZTtyZXR1cm4gYS5jYWxjdWxhdGUoaSksYX07bGV0IEc5ZT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuYmFja2dyb3VuZD0iI2Y0ZjRmNCIsdGhpcy5wcmltYXJ5Q29sb3I9IiNjZGU0OTgiLHRoaXMuc2Vjb25kYXJ5Q29sb3I9IiNjZGZmYjIiLHRoaXMuYmFja2dyb3VuZD0id2hpdGUiLHRoaXMubWFpbkJrZz0iI2NkZTQ5OCIsdGhpcy5zZWNvbmRCa2c9IiNjZGZmYjIiLHRoaXMubGluZUNvbG9yPSJncmVlbiIsdGhpcy5ib3JkZXIxPSIjMTM1NDBjIix0aGlzLmJvcmRlcjI9IiM2ZWFhNDkiLHRoaXMuYXJyb3doZWFkQ29sb3I9ImdyZWVuIix0aGlzLmZvbnRGYW1pbHk9JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsdGhpcy5mb250U2l6ZT0iMTZweCIsdGhpcy50ZXJ0aWFyeUNvbG9yPVNzKCIjY2RlNDk4IiwxMCksdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I9YWcodGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj1hZyh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj1hZyh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5wcmltYXJ5VGV4dENvbG9yPWppKHRoaXMucHJpbWFyeUNvbG9yKSx0aGlzLnNlY29uZGFyeVRleHRDb2xvcj1qaSh0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yPWppKHRoaXMucHJpbWFyeUNvbG9yKSx0aGlzLmxpbmVDb2xvcj1qaSh0aGlzLmJhY2tncm91bmQpLHRoaXMudGV4dENvbG9yPWppKHRoaXMuYmFja2dyb3VuZCksdGhpcy5USEVNRV9DT0xPUl9MSU1JVD0xMix0aGlzLm5vZGVCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubm9kZUJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQmtnPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuZGVmYXVsdExpbmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50aXRsZUNvbG9yPSIjMzMzIix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9IiNlOGU4ZTgiLHRoaXMuYWN0b3JCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JUZXh0Q29sb3I9ImJsYWNrIix0aGlzLmFjdG9yTGluZUNvbG9yPSJncmV5Iix0aGlzLnNpZ25hbENvbG9yPSIjMzMzIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iIzMzMyIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9IiMzMjY5MzIiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSIjNjY2Iix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iI2Y0ZjRmNCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9IiM2ZWFhNDkiLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPSIjNmVhYTQ5Iix0aGlzLmV4Y2x1ZGVCa2dDb2xvcj0iI2VlZWVlZSIsdGhpcy50YXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza0JrZ0NvbG9yPSIjNDg3ZTNhIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0id2hpdGUiLHRoaXMudGFza1RleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iYmxhY2siLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj0iIzAwMzE2MyIsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmdyaWRDb2xvcj0ibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPSJncmV5Iix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iI2ZmODg4OCIsdGhpcy5jcml0QmtnQ29sb3I9InJlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0icmVkIix0aGlzLnBlcnNvbkJvcmRlcj10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnBlcnNvbkJrZz10aGlzLm1haW5Ca2csdGhpcy5sYWJlbENvbG9yPSJibGFjayIsdGhpcy5lcnJvckJrZ0NvbG9yPSIjNTUyMjIyIix0aGlzLmVycm9yVGV4dENvbG9yPSIjNTUyMjIyIn11cGRhdGVDb2xvcnMoKXt0aGlzLmFjdG9yQm9yZGVyPVlzKHRoaXMubWFpbkJrZywyMCksdGhpcy5hY3RvckJrZz10aGlzLm1haW5Ca2csdGhpcy5sYWJlbEJveEJrZ0NvbG9yPXRoaXMuYWN0b3JCa2csdGhpcy5sYWJlbFRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMubG9vcFRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMubm90ZUJvcmRlckNvbG9yPXRoaXMuYm9yZGVyMix0aGlzLm5vdGVUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmNTY2FsZTA9dGhpcy5jU2NhbGUwfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmNTY2FsZTE9dGhpcy5jU2NhbGUxfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY1NjYWxlMj10aGlzLmNTY2FsZTJ8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmNTY2FsZTM9dGhpcy5jU2NhbGUzfHxtbih0aGlzLnByaW1hcnlDb2xvcix7aDozMH0pLHRoaXMuY1NjYWxlND10aGlzLmNTY2FsZTR8fG1uKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwfSksdGhpcy5jU2NhbGU1PXRoaXMuY1NjYWxlNXx8bW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6OTB9KSx0aGlzLmNTY2FsZTY9dGhpcy5jU2NhbGU2fHxtbih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLmNTY2FsZTc9dGhpcy5jU2NhbGU3fHxtbih0aGlzLnByaW1hcnlDb2xvcix7aDoxNTB9KSx0aGlzLmNTY2FsZTg9dGhpcy5jU2NhbGU4fHxtbih0aGlzLnByaW1hcnlDb2xvcix7aDoyMTB9KSx0aGlzLmNTY2FsZTk9dGhpcy5jU2NhbGU5fHxtbih0aGlzLnByaW1hcnlDb2xvcix7aDoyNzB9KSx0aGlzLmNTY2FsZTEwPXRoaXMuY1NjYWxlMTB8fG1uKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMwMH0pLHRoaXMuY1NjYWxlMTE9dGhpcy5jU2NhbGUxMXx8bW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MzMwfSksdGhpc1siY1NjYWxlUGVlcjEiXT10aGlzWyJjU2NhbGVQZWVyMSJdfHxZcyh0aGlzLnNlY29uZGFyeUNvbG9yLDQ1KSx0aGlzWyJjU2NhbGVQZWVyMiJdPXRoaXNbImNTY2FsZVBlZXIyIl18fFlzKHRoaXMudGVydGlhcnlDb2xvciw0MCk7Zm9yKGxldCBhPTA7YTx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO2ErKyl0aGlzWyJjU2NhbGUiK2FdPVlzKHRoaXNbImNTY2FsZSIrYV0sMTApLHRoaXNbImNTY2FsZVBlZXIiK2FdPXRoaXNbImNTY2FsZVBlZXIiK2FdfHxZcyh0aGlzWyJjU2NhbGUiK2FdLDI1KTtmb3IobGV0IGE9MDthPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7YSsrKXRoaXNbImNTY2FsZUludiIrYV09dGhpc1siY1NjYWxlSW52IithXXx8bW4odGhpc1siY1NjYWxlIithXSx7aDoxODB9KTt0aGlzLnNjYWxlTGFiZWxDb2xvcj10aGlzLnNjYWxlTGFiZWxDb2xvciE9PSJjYWxjdWxhdGVkIiYmdGhpcy5zY2FsZUxhYmVsQ29sb3I/dGhpcy5zY2FsZUxhYmVsQ29sb3I6dGhpcy5sYWJlbFRleHRDb2xvcjtmb3IobGV0IGE9MDthPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7YSsrKXRoaXNbImNTY2FsZUxhYmVsIithXT10aGlzWyJjU2NhbGVMYWJlbCIrYV18fHRoaXMuc2NhbGVMYWJlbENvbG9yO2ZvcihsZXQgYT0wO2E8NTthKyspdGhpc1sic3VyZmFjZSIrYV09dGhpc1sic3VyZmFjZSIrYV18fG1uKHRoaXMubWFpbkJrZyx7aDozMCxzOi0zMCxsOi0oNSthKjUpfSksdGhpc1sic3VyZmFjZVBlZXIiK2FdPXRoaXNbInN1cmZhY2VQZWVyIithXXx8bW4odGhpcy5tYWluQmtnLHtoOjMwLHM6LTMwLGw6LSg4K2EqNSl9KTt0aGlzLm5vZGVCa2c9dGhpcy5tYWluQmtnLHRoaXMubm9kZUJvcmRlcj10aGlzLmJvcmRlcjEsdGhpcy5jbHVzdGVyQmtnPXRoaXMuc2Vjb25kQmtnLHRoaXMuY2x1c3RlckJvcmRlcj10aGlzLmJvcmRlcjIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMudGFza0JvcmRlckNvbG9yPXRoaXMuYm9yZGVyMSx0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPXRoaXMudGFza0JvcmRlckNvbG9yLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPXRoaXMubWFpbkJrZyx0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiI2YwZjBmMCIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLmNvbXBvc2l0ZUJvcmRlcj10aGlzLmNvbXBvc2l0ZUJvcmRlcnx8dGhpcy5ub2RlQm9yZGVyLHRoaXMuaW5uZXJFbmRCYWNrZ3JvdW5kPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuc3BlY2lhbFN0YXRlQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5lcnJvckJrZ0NvbG9yPXRoaXMuZXJyb3JCa2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZXJyb3JUZXh0Q29sb3I9dGhpcy5lcnJvclRleHRDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5jbGFzc1RleHQ9dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuZmlsbFR5cGUwPXRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZmlsbFR5cGUxPXRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTI9bW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlMz1tbih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9bW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTU9bW4odGhpcy5zZWNvbmRhcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNj1tbih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz1tbih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjEyOH0pLHRoaXMucGllMT10aGlzLnBpZTF8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucGllMj10aGlzLnBpZTJ8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5waWUzPXRoaXMucGllM3x8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMucGllND10aGlzLnBpZTR8fG1uKHRoaXMucHJpbWFyeUNvbG9yLHtsOi0zMH0pLHRoaXMucGllNT10aGlzLnBpZTV8fG1uKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2w6LTMwfSksdGhpcy5waWU2PXRoaXMucGllNnx8bW4odGhpcy50ZXJ0aWFyeUNvbG9yLHtoOjQwLGw6LTQwfSksdGhpcy5waWU3PXRoaXMucGllN3x8bW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotMTB9KSx0aGlzLnBpZTg9dGhpcy5waWU4fHxtbih0aGlzLnByaW1hcnlDb2xvcix7aDotNjAsbDotMTB9KSx0aGlzLnBpZTk9dGhpcy5waWU5fHxtbih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDowfSksdGhpcy5waWUxMD10aGlzLnBpZTEwfHxtbih0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi01MH0pLHRoaXMucGllMTE9dGhpcy5waWUxMXx8bW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwLGw6LTUwfSksdGhpcy5waWUxMj10aGlzLnBpZTEyfHxtbih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDotNTB9KSx0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoPXRoaXMucGllT3V0ZXJTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yPXRoaXMucGllT3V0ZXJTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZU9wYWNpdHk9dGhpcy5waWVPcGFjaXR5fHwiMC43Iix0aGlzLnF1YWRyYW50MUZpbGw9dGhpcy5xdWFkcmFudDFGaWxsfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnF1YWRyYW50MkZpbGw9dGhpcy5xdWFkcmFudDJGaWxsfHxtbih0aGlzLnByaW1hcnlDb2xvcix7cjo1LGc6NSxiOjV9KSx0aGlzLnF1YWRyYW50M0ZpbGw9dGhpcy5xdWFkcmFudDNGaWxsfHxtbih0aGlzLnByaW1hcnlDb2xvcix7cjoxMCxnOjEwLGI6MTB9KSx0aGlzLnF1YWRyYW50NEZpbGw9dGhpcy5xdWFkcmFudDRGaWxsfHxtbih0aGlzLnByaW1hcnlDb2xvcix7cjoxNSxnOjE1LGI6MTV9KSx0aGlzLnF1YWRyYW50MVRleHRGaWxsPXRoaXMucXVhZHJhbnQxVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50MlRleHRGaWxsPXRoaXMucXVhZHJhbnQyVGV4dEZpbGx8fG1uKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotNSxnOi01LGI6LTV9KSx0aGlzLnF1YWRyYW50M1RleHRGaWxsPXRoaXMucXVhZHJhbnQzVGV4dEZpbGx8fG1uKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTAsZzotMTAsYjotMTB9KSx0aGlzLnF1YWRyYW50NFRleHRGaWxsPXRoaXMucXVhZHJhbnQ0VGV4dEZpbGx8fG1uKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTUsZzotMTUsYjotMTV9KSx0aGlzLnF1YWRyYW50UG9pbnRGaWxsPXRoaXMucXVhZHJhbnRQb2ludEZpbGx8fFhFKHRoaXMucXVhZHJhbnQxRmlsbCk/U3ModGhpcy5xdWFkcmFudDFGaWxsKTpZcyh0aGlzLnF1YWRyYW50MUZpbGwpLHRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsPXRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50VGl0bGVGaWxsPXRoaXMucXVhZHJhbnRUaXRsZUZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZD10aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemU9dGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemV8fCIxIix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZCx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmdpdDA9dGhpcy5naXQwfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmdpdDE9dGhpcy5naXQxfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZ2l0Mj10aGlzLmdpdDJ8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmdpdDM9dGhpcy5naXQzfHxtbih0aGlzLnByaW1hcnlDb2xvcix7aDotMzB9KSx0aGlzLmdpdDQ9dGhpcy5naXQ0fHxtbih0aGlzLnByaW1hcnlDb2xvcix7aDotNjB9KSx0aGlzLmdpdDU9dGhpcy5naXQ1fHxtbih0aGlzLnByaW1hcnlDb2xvcix7aDotOTB9KSx0aGlzLmdpdDY9dGhpcy5naXQ2fHxtbih0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLHRoaXMuZ2l0Nz10aGlzLmdpdDd8fG1uKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuZGFya01vZGU/KHRoaXMuZ2l0MD1Tcyh0aGlzLmdpdDAsMjUpLHRoaXMuZ2l0MT1Tcyh0aGlzLmdpdDEsMjUpLHRoaXMuZ2l0Mj1Tcyh0aGlzLmdpdDIsMjUpLHRoaXMuZ2l0Mz1Tcyh0aGlzLmdpdDMsMjUpLHRoaXMuZ2l0ND1Tcyh0aGlzLmdpdDQsMjUpLHRoaXMuZ2l0NT1Tcyh0aGlzLmdpdDUsMjUpLHRoaXMuZ2l0Nj1Tcyh0aGlzLmdpdDYsMjUpLHRoaXMuZ2l0Nz1Tcyh0aGlzLmdpdDcsMjUpKToodGhpcy5naXQwPVlzKHRoaXMuZ2l0MCwyNSksdGhpcy5naXQxPVlzKHRoaXMuZ2l0MSwyNSksdGhpcy5naXQyPVlzKHRoaXMuZ2l0MiwyNSksdGhpcy5naXQzPVlzKHRoaXMuZ2l0MywyNSksdGhpcy5naXQ0PVlzKHRoaXMuZ2l0NCwyNSksdGhpcy5naXQ1PVlzKHRoaXMuZ2l0NSwyNSksdGhpcy5naXQ2PVlzKHRoaXMuZ2l0NiwyNSksdGhpcy5naXQ3PVlzKHRoaXMuZ2l0NywyNSkpLHRoaXMuZ2l0SW52MD10aGlzLmdpdEludjB8fGppKHRoaXMuZ2l0MCksdGhpcy5naXRJbnYxPXRoaXMuZ2l0SW52MXx8amkodGhpcy5naXQxKSx0aGlzLmdpdEludjI9dGhpcy5naXRJbnYyfHxqaSh0aGlzLmdpdDIpLHRoaXMuZ2l0SW52Mz10aGlzLmdpdEludjN8fGppKHRoaXMuZ2l0MyksdGhpcy5naXRJbnY0PXRoaXMuZ2l0SW52NHx8amkodGhpcy5naXQ0KSx0aGlzLmdpdEludjU9dGhpcy5naXRJbnY1fHxqaSh0aGlzLmdpdDUpLHRoaXMuZ2l0SW52Nj10aGlzLmdpdEludjZ8fGppKHRoaXMuZ2l0NiksdGhpcy5naXRJbnY3PXRoaXMuZ2l0SW52N3x8amkodGhpcy5naXQ3KSx0aGlzLmdpdEJyYW5jaExhYmVsMD10aGlzLmdpdEJyYW5jaExhYmVsMHx8amkodGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5naXRCcmFuY2hMYWJlbDE9dGhpcy5naXRCcmFuY2hMYWJlbDF8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDI9dGhpcy5naXRCcmFuY2hMYWJlbDJ8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDM9dGhpcy5naXRCcmFuY2hMYWJlbDN8fGppKHRoaXMubGFiZWxUZXh0Q29sb3IpLHRoaXMuZ2l0QnJhbmNoTGFiZWw0PXRoaXMuZ2l0QnJhbmNoTGFiZWw0fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw1PXRoaXMuZ2l0QnJhbmNoTGFiZWw1fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw2PXRoaXMuZ2l0QnJhbmNoTGFiZWw2fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw3PXRoaXMuZ2l0QnJhbmNoTGFiZWw3fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMudGFnTGFiZWxDb2xvcj10aGlzLnRhZ0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnRhZ0xhYmVsQmFja2dyb3VuZD10aGlzLnRhZ0xhYmVsQmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy50YWdMYWJlbEJvcmRlcj10aGlzLnRhZ0JvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy50YWdMYWJlbEZvbnRTaXplPXRoaXMudGFnTGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuY29tbWl0TGFiZWxDb2xvcj10aGlzLmNvbW1pdExhYmVsQ29sb3J8fHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yLHRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kPXRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZT10aGlzLmNvbW1pdExhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZD10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZHx8Y1csdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVuPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbnx8dVd9Y2FsY3VsYXRlKGEpe2lmKHR5cGVvZiBhIT0ib2JqZWN0Iil7dGhpcy51cGRhdGVDb2xvcnMoKTtyZXR1cm59Y29uc3QgZj1PYmplY3Qua2V5cyhhKTtmLmZvckVhY2gocD0+e3RoaXNbcF09YVtwXX0pLHRoaXMudXBkYXRlQ29sb3JzKCksZi5mb3JFYWNoKHA9Pnt0aGlzW3BdPWFbcF19KX19O2NvbnN0IFU5ZT1pPT57Y29uc3QgYT1uZXcgRzllO3JldHVybiBhLmNhbGN1bGF0ZShpKSxhfTtjbGFzcyBXOWV7Y29uc3RydWN0b3IoKXt0aGlzLnByaW1hcnlDb2xvcj0iI2VlZSIsdGhpcy5jb250cmFzdD0iIzcwNzA3MCIsdGhpcy5zZWNvbmRhcnlDb2xvcj1Tcyh0aGlzLmNvbnRyYXN0LDU1KSx0aGlzLmJhY2tncm91bmQ9IiNmZmZmZmYiLHRoaXMudGVydGlhcnlDb2xvcj1tbih0aGlzLnByaW1hcnlDb2xvcix7aDotMTYwfSksdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I9YWcodGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj1hZyh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj1hZyh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5wcmltYXJ5VGV4dENvbG9yPWppKHRoaXMucHJpbWFyeUNvbG9yKSx0aGlzLnNlY29uZGFyeVRleHRDb2xvcj1qaSh0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yPWppKHRoaXMudGVydGlhcnlDb2xvciksdGhpcy5saW5lQ29sb3I9amkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj1qaSh0aGlzLmJhY2tncm91bmQpLHRoaXMubWFpbkJrZz0iI2VlZSIsdGhpcy5zZWNvbmRCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubGluZUNvbG9yPSIjNjY2Iix0aGlzLmJvcmRlcjE9IiM5OTkiLHRoaXMuYm9yZGVyMj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlPSIjZmZhIix0aGlzLnRleHQ9IiMzMzMiLHRoaXMuY3JpdGljYWw9IiNkNDIiLHRoaXMuZG9uZT0iI2JiYiIsdGhpcy5hcnJvd2hlYWRDb2xvcj0iIzMzMzMzMyIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgiLHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ9MTIsdGhpcy5ub2RlQmtnPSJjYWxjdWxhdGVkIix0aGlzLm5vZGVCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGl0bGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPSJ3aGl0ZSIsdGhpcy5hY3RvckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvclRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckxpbmVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxvb3BUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj0iIzY2NiIsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9IiNmNGY0ZjQiLHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iY2FsY3VsYXRlZCIsdGhpcy5leGNsdWRlQmtnQ29sb3I9IiNlZWVlZWUiLHRoaXMudGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9IndoaXRlIix0aGlzLnRhc2tUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHREYXJrQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj0iIzAwMzE2MyIsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmdyaWRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuY3JpdEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5wZXJzb25Cb3JkZXI9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5wZXJzb25Ca2c9dGhpcy5tYWluQmtnLHRoaXMubGFiZWxDb2xvcj0iYmxhY2siLHRoaXMuZXJyb3JCa2dDb2xvcj0iIzU1MjIyMiIsdGhpcy5lcnJvclRleHRDb2xvcj0iIzU1MjIyMiJ9dXBkYXRlQ29sb3JzKCl7dGhpcy5zZWNvbmRCa2c9U3ModGhpcy5jb250cmFzdCw1NSksdGhpcy5ib3JkZXIyPXRoaXMuY29udHJhc3QsdGhpcy5hY3RvckJvcmRlcj1Tcyh0aGlzLmJvcmRlcjEsMjMpLHRoaXMuYWN0b3JCa2c9dGhpcy5tYWluQmtnLHRoaXMuYWN0b3JUZXh0Q29sb3I9dGhpcy50ZXh0LHRoaXMuYWN0b3JMaW5lQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5zaWduYWxDb2xvcj10aGlzLnRleHQsdGhpcy5zaWduYWxUZXh0Q29sb3I9dGhpcy50ZXh0LHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmFjdG9yQmtnLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj10aGlzLmFjdG9yQm9yZGVyLHRoaXMubGFiZWxUZXh0Q29sb3I9dGhpcy50ZXh0LHRoaXMubG9vcFRleHRDb2xvcj10aGlzLnRleHQsdGhpcy5ub3RlQm9yZGVyQ29sb3I9IiM5OTkiLHRoaXMubm90ZUJrZ0NvbG9yPSIjNjY2Iix0aGlzLm5vdGVUZXh0Q29sb3I9IiNmZmYiLHRoaXMuY1NjYWxlMD10aGlzLmNTY2FsZTB8fCIjNTU1Iix0aGlzLmNTY2FsZTE9dGhpcy5jU2NhbGUxfHwiI0Y0RjRGNCIsdGhpcy5jU2NhbGUyPXRoaXMuY1NjYWxlMnx8IiM1NTUiLHRoaXMuY1NjYWxlMz10aGlzLmNTY2FsZTN8fCIjQkJCIix0aGlzLmNTY2FsZTQ9dGhpcy5jU2NhbGU0fHwiIzc3NyIsdGhpcy5jU2NhbGU1PXRoaXMuY1NjYWxlNXx8IiM5OTkiLHRoaXMuY1NjYWxlNj10aGlzLmNTY2FsZTZ8fCIjREREIix0aGlzLmNTY2FsZTc9dGhpcy5jU2NhbGU3fHwiI0ZGRiIsdGhpcy5jU2NhbGU4PXRoaXMuY1NjYWxlOHx8IiNEREQiLHRoaXMuY1NjYWxlOT10aGlzLmNTY2FsZTl8fCIjQkJCIix0aGlzLmNTY2FsZTEwPXRoaXMuY1NjYWxlMTB8fCIjOTk5Iix0aGlzLmNTY2FsZTExPXRoaXMuY1NjYWxlMTF8fCIjNzc3Ijtmb3IobGV0IGE9MDthPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7YSsrKXRoaXNbImNTY2FsZUludiIrYV09dGhpc1siY1NjYWxlSW52IithXXx8amkodGhpc1siY1NjYWxlIithXSk7Zm9yKGxldCBhPTA7YTx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO2ErKyl0aGlzLmRhcmtNb2RlP3RoaXNbImNTY2FsZVBlZXIiK2FdPXRoaXNbImNTY2FsZVBlZXIiK2FdfHxTcyh0aGlzWyJjU2NhbGUiK2FdLDEwKTp0aGlzWyJjU2NhbGVQZWVyIithXT10aGlzWyJjU2NhbGVQZWVyIithXXx8WXModGhpc1siY1NjYWxlIithXSwxMCk7dGhpcy5zY2FsZUxhYmVsQ29sb3I9dGhpcy5zY2FsZUxhYmVsQ29sb3J8fCh0aGlzLmRhcmtNb2RlPyJibGFjayI6dGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5jU2NhbGVMYWJlbDA9dGhpcy5jU2NhbGVMYWJlbDB8fHRoaXMuY1NjYWxlMSx0aGlzLmNTY2FsZUxhYmVsMj10aGlzLmNTY2FsZUxhYmVsMnx8dGhpcy5jU2NhbGUxO2ZvcihsZXQgYT0wO2E8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDthKyspdGhpc1siY1NjYWxlTGFiZWwiK2FdPXRoaXNbImNTY2FsZUxhYmVsIithXXx8dGhpcy5zY2FsZUxhYmVsQ29sb3I7Zm9yKGxldCBhPTA7YTw1O2ErKyl0aGlzWyJzdXJmYWNlIithXT10aGlzWyJzdXJmYWNlIithXXx8bW4odGhpcy5tYWluQmtnLHtsOi0oNSthKjUpfSksdGhpc1sic3VyZmFjZVBlZXIiK2FdPXRoaXNbInN1cmZhY2VQZWVyIithXXx8bW4odGhpcy5tYWluQmtnLHtsOi0oOCthKjUpfSk7dGhpcy5ub2RlQmtnPXRoaXMubWFpbkJrZyx0aGlzLm5vZGVCb3JkZXI9dGhpcy5ib3JkZXIxLHRoaXMuY2x1c3RlckJrZz10aGlzLnNlY29uZEJrZyx0aGlzLmNsdXN0ZXJCb3JkZXI9dGhpcy5ib3JkZXIyLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLnRpdGxlQ29sb3I9dGhpcy50ZXh0LHRoaXMuc2VjdGlvbkJrZ0NvbG9yPVNzKHRoaXMuY29udHJhc3QsMzApLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj1Tcyh0aGlzLmNvbnRyYXN0LDMwKSx0aGlzLnRhc2tCb3JkZXJDb2xvcj1Zcyh0aGlzLmNvbnRyYXN0LDEwKSx0aGlzLnRhc2tCa2dDb2xvcj10aGlzLmNvbnRyYXN0LHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0TGlnaHRDb2xvcix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPXRoaXMudGV4dCx0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9dGhpcy50YXNrQm9yZGVyQ29sb3IsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9dGhpcy5tYWluQmtnLHRoaXMuZ3JpZENvbG9yPVNzKHRoaXMuYm9yZGVyMSwzMCksdGhpcy5kb25lVGFza0JrZ0NvbG9yPXRoaXMuZG9uZSx0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5jcml0QmtnQ29sb3I9dGhpcy5jcml0aWNhbCx0aGlzLmNyaXRCb3JkZXJDb2xvcj1Zcyh0aGlzLmNyaXRCa2dDb2xvciwxMCksdGhpcy50b2RheUxpbmVDb2xvcj10aGlzLmNyaXRCa2dDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8IiMwMDAiLHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3I9dGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zdGF0ZUxhYmVsQ29sb3I9dGhpcy5zdGF0ZUxhYmVsQ29sb3J8fHRoaXMuc3RhdGVCa2d8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnN0YXRlQmtnPXRoaXMuc3RhdGVCa2d8fHRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yPXRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3J8fHRoaXMuc3RhdGVCa2csdGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlQmFja2dyb3VuZHx8dGhpcy5iYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5hbHRCYWNrZ3JvdW5kPXRoaXMuYWx0QmFja2dyb3VuZHx8IiNmNGY0ZjQiLHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfHx0aGlzLm1haW5Ca2csdGhpcy5zdGF0ZUJvcmRlcj10aGlzLnN0YXRlQm9yZGVyfHwiIzAwMCIsdGhpcy5pbm5lckVuZEJhY2tncm91bmQ9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5zcGVjaWFsU3RhdGVDb2xvcj0iIzIyMiIsdGhpcy5lcnJvckJrZ0NvbG9yPXRoaXMuZXJyb3JCa2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZXJyb3JUZXh0Q29sb3I9dGhpcy5lcnJvclRleHRDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLmNsYXNzVGV4dD10aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj1tbih0aGlzLnByaW1hcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGUzPW1uKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlND1tbih0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT1tbih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU2PW1uKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyOH0pLHRoaXMuZmlsbFR5cGU3PW1uKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSk7Zm9yKGxldCBhPTA7YTx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO2ErKyl0aGlzWyJwaWUiK2FdPXRoaXNbImNTY2FsZSIrYV07dGhpcy5waWUxMj10aGlzLnBpZTAsdGhpcy5waWVUaXRsZVRleHRTaXplPXRoaXMucGllVGl0bGVUZXh0U2l6ZXx8IjI1cHgiLHRoaXMucGllVGl0bGVUZXh0Q29sb3I9dGhpcy5waWVUaXRsZVRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZT10aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllU2VjdGlvblRleHRDb2xvcj10aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMucGllTGVnZW5kVGV4dFNpemU9dGhpcy5waWVMZWdlbmRUZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllTGVnZW5kVGV4dENvbG9yPXRoaXMucGllTGVnZW5kVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU3Ryb2tlQ29sb3I9dGhpcy5waWVTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZVN0cm9rZVdpZHRoPXRoaXMucGllU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3V0ZXJTdHJva2VXaWR0aD10aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3V0ZXJTdHJva2VDb2xvcj10aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVPcGFjaXR5PXRoaXMucGllT3BhY2l0eXx8IjAuNyIsdGhpcy5xdWFkcmFudDFGaWxsPXRoaXMucXVhZHJhbnQxRmlsbHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5xdWFkcmFudDJGaWxsPXRoaXMucXVhZHJhbnQyRmlsbHx8bW4odGhpcy5wcmltYXJ5Q29sb3Ise3I6NSxnOjUsYjo1fSksdGhpcy5xdWFkcmFudDNGaWxsPXRoaXMucXVhZHJhbnQzRmlsbHx8bW4odGhpcy5wcmltYXJ5Q29sb3Ise3I6MTAsZzoxMCxiOjEwfSksdGhpcy5xdWFkcmFudDRGaWxsPXRoaXMucXVhZHJhbnQ0RmlsbHx8bW4odGhpcy5wcmltYXJ5Q29sb3Ise3I6MTUsZzoxNSxiOjE1fSksdGhpcy5xdWFkcmFudDFUZXh0RmlsbD10aGlzLnF1YWRyYW50MVRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudDJUZXh0RmlsbD10aGlzLnF1YWRyYW50MlRleHRGaWxsfHxtbih0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTUsZzotNSxiOi01fSksdGhpcy5xdWFkcmFudDNUZXh0RmlsbD10aGlzLnF1YWRyYW50M1RleHRGaWxsfHxtbih0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTEwLGc6LTEwLGI6LTEwfSksdGhpcy5xdWFkcmFudDRUZXh0RmlsbD10aGlzLnF1YWRyYW50NFRleHRGaWxsfHxtbih0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTE1LGc6LTE1LGI6LTE1fSksdGhpcy5xdWFkcmFudFBvaW50RmlsbD10aGlzLnF1YWRyYW50UG9pbnRGaWxsfHxYRSh0aGlzLnF1YWRyYW50MUZpbGwpP1NzKHRoaXMucXVhZHJhbnQxRmlsbCk6WXModGhpcy5xdWFkcmFudDFGaWxsKSx0aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbD10aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsPXRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsPXRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGx8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudFRpdGxlRmlsbD10aGlzLnF1YWRyYW50VGl0bGVGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQ9dGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcj10aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplfHwiMSIsdGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcj10aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZWxhdGlvbkNvbG9yPXRoaXMucmVsYXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZD10aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQsdGhpcy5yZWxhdGlvbkxhYmVsQ29sb3I9dGhpcy5yZWxhdGlvbkxhYmVsQ29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5naXQwPVlzKHRoaXMucGllMSwyNSl8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZ2l0MT10aGlzLnBpZTJ8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5naXQyPXRoaXMucGllM3x8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZ2l0Mz10aGlzLnBpZTR8fG1uKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0zMH0pLHRoaXMuZ2l0ND10aGlzLnBpZTV8fG1uKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MH0pLHRoaXMuZ2l0NT10aGlzLnBpZTZ8fG1uKHRoaXMucHJpbWFyeUNvbG9yLHtoOi05MH0pLHRoaXMuZ2l0Nj10aGlzLnBpZTd8fG1uKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwfSksdGhpcy5naXQ3PXRoaXMucGllOHx8bW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksdGhpcy5naXRJbnYwPXRoaXMuZ2l0SW52MHx8amkodGhpcy5naXQwKSx0aGlzLmdpdEludjE9dGhpcy5naXRJbnYxfHxqaSh0aGlzLmdpdDEpLHRoaXMuZ2l0SW52Mj10aGlzLmdpdEludjJ8fGppKHRoaXMuZ2l0MiksdGhpcy5naXRJbnYzPXRoaXMuZ2l0SW52M3x8amkodGhpcy5naXQzKSx0aGlzLmdpdEludjQ9dGhpcy5naXRJbnY0fHxqaSh0aGlzLmdpdDQpLHRoaXMuZ2l0SW52NT10aGlzLmdpdEludjV8fGppKHRoaXMuZ2l0NSksdGhpcy5naXRJbnY2PXRoaXMuZ2l0SW52Nnx8amkodGhpcy5naXQ2KSx0aGlzLmdpdEludjc9dGhpcy5naXRJbnY3fHxqaSh0aGlzLmdpdDcpLHRoaXMuYnJhbmNoTGFiZWxDb2xvcj10aGlzLmJyYW5jaExhYmVsQ29sb3J8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDA9dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwxPSJ3aGl0ZSIsdGhpcy5naXRCcmFuY2hMYWJlbDI9dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwzPSJ3aGl0ZSIsdGhpcy5naXRCcmFuY2hMYWJlbDQ9dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw1PXRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNj10aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDc9dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMudGFnTGFiZWxDb2xvcj10aGlzLnRhZ0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnRhZ0xhYmVsQmFja2dyb3VuZD10aGlzLnRhZ0xhYmVsQmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy50YWdMYWJlbEJvcmRlcj10aGlzLnRhZ0JvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy50YWdMYWJlbEZvbnRTaXplPXRoaXMudGFnTGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuY29tbWl0TGFiZWxDb2xvcj10aGlzLmNvbW1pdExhYmVsQ29sb3J8fHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yLHRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kPXRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZT10aGlzLmNvbW1pdExhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZD10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZHx8Y1csdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVuPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbnx8dVd9Y2FsY3VsYXRlKGEpe2lmKHR5cGVvZiBhIT0ib2JqZWN0Iil7dGhpcy51cGRhdGVDb2xvcnMoKTtyZXR1cm59Y29uc3QgZj1PYmplY3Qua2V5cyhhKTtmLmZvckVhY2gocD0+e3RoaXNbcF09YVtwXX0pLHRoaXMudXBkYXRlQ29sb3JzKCksZi5mb3JFYWNoKHA9Pnt0aGlzW3BdPWFbcF19KX19Y29uc3QgbTU9e2Jhc2U6e2dldFRoZW1lVmFyaWFibGVzOno5ZX0sZGFyazp7Z2V0VGhlbWVWYXJpYWJsZXM6SDllfSxkZWZhdWx0OntnZXRUaGVtZVZhcmlhYmxlczpKRHR9LGZvcmVzdDp7Z2V0VGhlbWVWYXJpYWJsZXM6VTllfSxuZXV0cmFsOntnZXRUaGVtZVZhcmlhYmxlczppPT57Y29uc3QgYT1uZXcgVzllO3JldHVybiBhLmNhbGN1bGF0ZShpKSxhfX19LEp4PXtmbG93Y2hhcnQ6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LGRpYWdyYW1QYWRkaW5nOjgsaHRtbExhYmVsczohMCxub2RlU3BhY2luZzo1MCxyYW5rU3BhY2luZzo1MCxjdXJ2ZToiYmFzaXMiLHBhZGRpbmc6MTUsZGVmYXVsdFJlbmRlcmVyOiJkYWdyZS13cmFwcGVyIix3cmFwcGluZ1dpZHRoOjIwMH0sc2VxdWVuY2U6e3VzZU1heFdpZHRoOiEwLGhpZGVVbnVzZWRQYXJ0aWNpcGFudHM6ITEsYWN0aXZhdGlvbldpZHRoOjEwLGRpYWdyYW1NYXJnaW5YOjUwLGRpYWdyYW1NYXJnaW5ZOjEwLGFjdG9yTWFyZ2luOjUwLHdpZHRoOjE1MCxoZWlnaHQ6NjUsYm94TWFyZ2luOjEwLGJveFRleHRNYXJnaW46NSxub3RlTWFyZ2luOjEwLG1lc3NhZ2VNYXJnaW46MzUsbWVzc2FnZUFsaWduOiJjZW50ZXIiLG1pcnJvckFjdG9yczohMCxmb3JjZU1lbnVzOiExLGJvdHRvbU1hcmdpbkFkajoxLHJpZ2h0QW5nbGVzOiExLHNob3dTZXF1ZW5jZU51bWJlcnM6ITEsYWN0b3JGb250U2l6ZToxNCxhY3RvckZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxhY3RvckZvbnRXZWlnaHQ6NDAwLG5vdGVGb250U2l6ZToxNCxub3RlRm9udEZhbWlseTonInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyxub3RlRm9udFdlaWdodDo0MDAsbm90ZUFsaWduOiJjZW50ZXIiLG1lc3NhZ2VGb250U2l6ZToxNixtZXNzYWdlRm9udEZhbWlseTonInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyxtZXNzYWdlRm9udFdlaWdodDo0MDAsd3JhcDohMSx3cmFwUGFkZGluZzoxMCxsYWJlbEJveFdpZHRoOjUwLGxhYmVsQm94SGVpZ2h0OjIwfSxnYW50dDp7dXNlTWF4V2lkdGg6ITAsdGl0bGVUb3BNYXJnaW46MjUsYmFySGVpZ2h0OjIwLGJhckdhcDo0LHRvcFBhZGRpbmc6NTAscmlnaHRQYWRkaW5nOjc1LGxlZnRQYWRkaW5nOjc1LGdyaWRMaW5lU3RhcnRQYWRkaW5nOjM1LGZvbnRTaXplOjExLHNlY3Rpb25Gb250U2l6ZToxMSxudW1iZXJTZWN0aW9uU3R5bGVzOjQsYXhpc0Zvcm1hdDoiJVktJW0tJWQiLHRvcEF4aXM6ITEsZGlzcGxheU1vZGU6IiIsd2Vla2RheToic3VuZGF5In0sam91cm5leTp7dXNlTWF4V2lkdGg6ITAsZGlhZ3JhbU1hcmdpblg6NTAsZGlhZ3JhbU1hcmdpblk6MTAsbGVmdE1hcmdpbjoxNTAsd2lkdGg6MTUwLGhlaWdodDo1MCxib3hNYXJnaW46MTAsYm94VGV4dE1hcmdpbjo1LG5vdGVNYXJnaW46MTAsbWVzc2FnZU1hcmdpbjozNSxtZXNzYWdlQWxpZ246ImNlbnRlciIsYm90dG9tTWFyZ2luQWRqOjEscmlnaHRBbmdsZXM6ITEsdGFza0ZvbnRTaXplOjE0LHRhc2tGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsdGFza01hcmdpbjo1MCxhY3RpdmF0aW9uV2lkdGg6MTAsdGV4dFBsYWNlbWVudDoiZm8iLGFjdG9yQ29sb3VyczpbIiM4RkJDOEYiLCIjN0NGQzAwIiwiIzAwRkZGRiIsIiMyMEIyQUEiLCIjQjBFMEU2IiwiI0ZGRkZFMCJdLHNlY3Rpb25GaWxsczpbIiMxOTE5NzAiLCIjOEIwMDhCIiwiIzRCMDA4MiIsIiMyRjRGNEYiLCIjODAwMDAwIiwiIzhCNDUxMyIsIiMwMDAwOEIiXSxzZWN0aW9uQ29sb3VyczpbIiNmZmYiXX0sY2xhc3M6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LGFycm93TWFya2VyQWJzb2x1dGU6ITEsZGl2aWRlck1hcmdpbjoxMCxwYWRkaW5nOjUsdGV4dEhlaWdodDoxMCxkZWZhdWx0UmVuZGVyZXI6ImRhZ3JlLXdyYXBwZXIiLGh0bWxMYWJlbHM6ITF9LHN0YXRlOnt1c2VNYXhXaWR0aDohMCx0aXRsZVRvcE1hcmdpbjoyNSxkaXZpZGVyTWFyZ2luOjEwLHNpemVVbml0OjUscGFkZGluZzo4LHRleHRIZWlnaHQ6MTAsdGl0bGVTaGlmdDotMTUsbm90ZU1hcmdpbjoxMCxmb3JrV2lkdGg6NzAsZm9ya0hlaWdodDo3LG1pbmlQYWRkaW5nOjIsZm9udFNpemVGYWN0b3I6NS4wMixmb250U2l6ZToyNCxsYWJlbEhlaWdodDoxNixlZGdlTGVuZ3RoRmFjdG9yOiIyMCIsY29tcG9zaXRUaXRsZVNpemU6MzUscmFkaXVzOjUsZGVmYXVsdFJlbmRlcmVyOiJkYWdyZS13cmFwcGVyIn0sZXI6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LGRpYWdyYW1QYWRkaW5nOjIwLGxheW91dERpcmVjdGlvbjoiVEIiLG1pbkVudGl0eVdpZHRoOjEwMCxtaW5FbnRpdHlIZWlnaHQ6NzUsZW50aXR5UGFkZGluZzoxNSxzdHJva2U6ImdyYXkiLGZpbGw6ImhvbmV5ZGV3Iixmb250U2l6ZToxMn0scGllOnt1c2VNYXhXaWR0aDohMCx0ZXh0UG9zaXRpb246Ljc1fSxxdWFkcmFudENoYXJ0Ont1c2VNYXhXaWR0aDohMCxjaGFydFdpZHRoOjUwMCxjaGFydEhlaWdodDo1MDAsdGl0bGVGb250U2l6ZToyMCx0aXRsZVBhZGRpbmc6MTAscXVhZHJhbnRQYWRkaW5nOjUseEF4aXNMYWJlbFBhZGRpbmc6NSx5QXhpc0xhYmVsUGFkZGluZzo1LHhBeGlzTGFiZWxGb250U2l6ZToxNix5QXhpc0xhYmVsRm9udFNpemU6MTYscXVhZHJhbnRMYWJlbEZvbnRTaXplOjE2LHF1YWRyYW50VGV4dFRvcFBhZGRpbmc6NSxwb2ludFRleHRQYWRkaW5nOjUscG9pbnRMYWJlbEZvbnRTaXplOjEyLHBvaW50UmFkaXVzOjUseEF4aXNQb3NpdGlvbjoidG9wIix5QXhpc1Bvc2l0aW9uOiJsZWZ0IixxdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlV2lkdGg6MSxxdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGg6Mn0scmVxdWlyZW1lbnQ6e3VzZU1heFdpZHRoOiEwLHJlY3RfZmlsbDoiI2Y5ZjlmOSIsdGV4dF9jb2xvcjoiIzMzMyIscmVjdF9ib3JkZXJfc2l6ZToiMC41cHgiLHJlY3RfYm9yZGVyX2NvbG9yOiIjYmJiIixyZWN0X21pbl93aWR0aDoyMDAscmVjdF9taW5faGVpZ2h0OjIwMCxmb250U2l6ZToxNCxyZWN0X3BhZGRpbmc6MTAsbGluZV9oZWlnaHQ6MjB9LG1pbmRtYXA6e3VzZU1heFdpZHRoOiEwLHBhZGRpbmc6MTAsbWF4Tm9kZVdpZHRoOjIwMH0sdGltZWxpbmU6e3VzZU1heFdpZHRoOiEwLGRpYWdyYW1NYXJnaW5YOjUwLGRpYWdyYW1NYXJnaW5ZOjEwLGxlZnRNYXJnaW46MTUwLHdpZHRoOjE1MCxoZWlnaHQ6NTAsYm94TWFyZ2luOjEwLGJveFRleHRNYXJnaW46NSxub3RlTWFyZ2luOjEwLG1lc3NhZ2VNYXJnaW46MzUsbWVzc2FnZUFsaWduOiJjZW50ZXIiLGJvdHRvbU1hcmdpbkFkajoxLHJpZ2h0QW5nbGVzOiExLHRhc2tGb250U2l6ZToxNCx0YXNrRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLHRhc2tNYXJnaW46NTAsYWN0aXZhdGlvbldpZHRoOjEwLHRleHRQbGFjZW1lbnQ6ImZvIixhY3RvckNvbG91cnM6WyIjOEZCQzhGIiwiIzdDRkMwMCIsIiMwMEZGRkYiLCIjMjBCMkFBIiwiI0IwRTBFNiIsIiNGRkZGRTAiXSxzZWN0aW9uRmlsbHM6WyIjMTkxOTcwIiwiIzhCMDA4QiIsIiM0QjAwODIiLCIjMkY0RjRGIiwiIzgwMDAwMCIsIiM4QjQ1MTMiLCIjMDAwMDhCIl0sc2VjdGlvbkNvbG91cnM6WyIjZmZmIl0sZGlzYWJsZU11bHRpY29sb3I6ITF9LGdpdEdyYXBoOnt1c2VNYXhXaWR0aDohMCx0aXRsZVRvcE1hcmdpbjoyNSxkaWFncmFtUGFkZGluZzo4LG5vZGVMYWJlbDp7d2lkdGg6NzUsaGVpZ2h0OjEwMCx4Oi0yNSx5OjB9LG1haW5CcmFuY2hOYW1lOiJtYWluIixtYWluQnJhbmNoT3JkZXI6MCxzaG93Q29tbWl0TGFiZWw6ITAsc2hvd0JyYW5jaGVzOiEwLHJvdGF0ZUNvbW1pdExhYmVsOiEwLGFycm93TWFya2VyQWJzb2x1dGU6ITF9LGM0Ont1c2VNYXhXaWR0aDohMCxkaWFncmFtTWFyZ2luWDo1MCxkaWFncmFtTWFyZ2luWToxMCxjNFNoYXBlTWFyZ2luOjUwLGM0U2hhcGVQYWRkaW5nOjIwLHdpZHRoOjIxNixoZWlnaHQ6NjAsYm94TWFyZ2luOjEwLGM0U2hhcGVJblJvdzo0LG5leHRMaW5lUGFkZGluZ1g6MCxjNEJvdW5kYXJ5SW5Sb3c6MixwZXJzb25Gb250U2l6ZToxNCxwZXJzb25Gb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicscGVyc29uRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9wZXJzb25Gb250U2l6ZToxNCxleHRlcm5hbF9wZXJzb25Gb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfcGVyc29uRm9udFdlaWdodDoibm9ybWFsIixzeXN0ZW1Gb250U2l6ZToxNCxzeXN0ZW1Gb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsc3lzdGVtRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9zeXN0ZW1Gb250U2l6ZToxNCxleHRlcm5hbF9zeXN0ZW1Gb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfc3lzdGVtRm9udFdlaWdodDoibm9ybWFsIixzeXN0ZW1fZGJGb250U2l6ZToxNCxzeXN0ZW1fZGJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsc3lzdGVtX2RiRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9zeXN0ZW1fZGJGb250U2l6ZToxNCxleHRlcm5hbF9zeXN0ZW1fZGJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfc3lzdGVtX2RiRm9udFdlaWdodDoibm9ybWFsIixzeXN0ZW1fcXVldWVGb250U2l6ZToxNCxzeXN0ZW1fcXVldWVGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsc3lzdGVtX3F1ZXVlRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9zeXN0ZW1fcXVldWVGb250U2l6ZToxNCxleHRlcm5hbF9zeXN0ZW1fcXVldWVGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlRm9udFdlaWdodDoibm9ybWFsIixib3VuZGFyeUZvbnRTaXplOjE0LGJvdW5kYXJ5Rm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLGJvdW5kYXJ5Rm9udFdlaWdodDoibm9ybWFsIixtZXNzYWdlRm9udFNpemU6MTIsbWVzc2FnZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxtZXNzYWdlRm9udFdlaWdodDoibm9ybWFsIixjb250YWluZXJGb250U2l6ZToxNCxjb250YWluZXJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsY29udGFpbmVyRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9jb250YWluZXJGb250U2l6ZToxNCxleHRlcm5hbF9jb250YWluZXJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfY29udGFpbmVyRm9udFdlaWdodDoibm9ybWFsIixjb250YWluZXJfZGJGb250U2l6ZToxNCxjb250YWluZXJfZGJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsY29udGFpbmVyX2RiRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9jb250YWluZXJfZGJGb250U2l6ZToxNCxleHRlcm5hbF9jb250YWluZXJfZGJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfY29udGFpbmVyX2RiRm9udFdlaWdodDoibm9ybWFsIixjb250YWluZXJfcXVldWVGb250U2l6ZToxNCxjb250YWluZXJfcXVldWVGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsY29udGFpbmVyX3F1ZXVlRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9jb250YWluZXJfcXVldWVGb250U2l6ZToxNCxleHRlcm5hbF9jb250YWluZXJfcXVldWVGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlRm9udFdlaWdodDoibm9ybWFsIixjb21wb25lbnRGb250U2l6ZToxNCxjb21wb25lbnRGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsY29tcG9uZW50Rm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9jb21wb25lbnRGb250U2l6ZToxNCxleHRlcm5hbF9jb21wb25lbnRGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfY29tcG9uZW50Rm9udFdlaWdodDoibm9ybWFsIixjb21wb25lbnRfZGJGb250U2l6ZToxNCxjb21wb25lbnRfZGJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsY29tcG9uZW50X2RiRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9jb21wb25lbnRfZGJGb250U2l6ZToxNCxleHRlcm5hbF9jb21wb25lbnRfZGJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfY29tcG9uZW50X2RiRm9udFdlaWdodDoibm9ybWFsIixjb21wb25lbnRfcXVldWVGb250U2l6ZToxNCxjb21wb25lbnRfcXVldWVGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsY29tcG9uZW50X3F1ZXVlRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250U2l6ZToxNCxleHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlRm9udFdlaWdodDoibm9ybWFsIix3cmFwOiEwLHdyYXBQYWRkaW5nOjEwLHBlcnNvbl9iZ19jb2xvcjoiIzA4NDI3QiIscGVyc29uX2JvcmRlcl9jb2xvcjoiIzA3M0I2RiIsZXh0ZXJuYWxfcGVyc29uX2JnX2NvbG9yOiIjNjg2ODY4IixleHRlcm5hbF9wZXJzb25fYm9yZGVyX2NvbG9yOiIjOEE4QThBIixzeXN0ZW1fYmdfY29sb3I6IiMxMTY4QkQiLHN5c3RlbV9ib3JkZXJfY29sb3I6IiMzQzdGQzAiLHN5c3RlbV9kYl9iZ19jb2xvcjoiIzExNjhCRCIsc3lzdGVtX2RiX2JvcmRlcl9jb2xvcjoiIzNDN0ZDMCIsc3lzdGVtX3F1ZXVlX2JnX2NvbG9yOiIjMTE2OEJEIixzeXN0ZW1fcXVldWVfYm9yZGVyX2NvbG9yOiIjM0M3RkMwIixleHRlcm5hbF9zeXN0ZW1fYmdfY29sb3I6IiM5OTk5OTkiLGV4dGVybmFsX3N5c3RlbV9ib3JkZXJfY29sb3I6IiM4QThBOEEiLGV4dGVybmFsX3N5c3RlbV9kYl9iZ19jb2xvcjoiIzk5OTk5OSIsZXh0ZXJuYWxfc3lzdGVtX2RiX2JvcmRlcl9jb2xvcjoiIzhBOEE4QSIsZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlX2JnX2NvbG9yOiIjOTk5OTk5IixleHRlcm5hbF9zeXN0ZW1fcXVldWVfYm9yZGVyX2NvbG9yOiIjOEE4QThBIixjb250YWluZXJfYmdfY29sb3I6IiM0MzhERDUiLGNvbnRhaW5lcl9ib3JkZXJfY29sb3I6IiMzQzdGQzAiLGNvbnRhaW5lcl9kYl9iZ19jb2xvcjoiIzQzOERENSIsY29udGFpbmVyX2RiX2JvcmRlcl9jb2xvcjoiIzNDN0ZDMCIsY29udGFpbmVyX3F1ZXVlX2JnX2NvbG9yOiIjNDM4REQ1Iixjb250YWluZXJfcXVldWVfYm9yZGVyX2NvbG9yOiIjM0M3RkMwIixleHRlcm5hbF9jb250YWluZXJfYmdfY29sb3I6IiNCM0IzQjMiLGV4dGVybmFsX2NvbnRhaW5lcl9ib3JkZXJfY29sb3I6IiNBNkE2QTYiLGV4dGVybmFsX2NvbnRhaW5lcl9kYl9iZ19jb2xvcjoiI0IzQjNCMyIsZXh0ZXJuYWxfY29udGFpbmVyX2RiX2JvcmRlcl9jb2xvcjoiI0E2QTZBNiIsZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlX2JnX2NvbG9yOiIjQjNCM0IzIixleHRlcm5hbF9jb250YWluZXJfcXVldWVfYm9yZGVyX2NvbG9yOiIjQTZBNkE2Iixjb21wb25lbnRfYmdfY29sb3I6IiM4NUJCRjAiLGNvbXBvbmVudF9ib3JkZXJfY29sb3I6IiM3OEE4RDgiLGNvbXBvbmVudF9kYl9iZ19jb2xvcjoiIzg1QkJGMCIsY29tcG9uZW50X2RiX2JvcmRlcl9jb2xvcjoiIzc4QThEOCIsY29tcG9uZW50X3F1ZXVlX2JnX2NvbG9yOiIjODVCQkYwIixjb21wb25lbnRfcXVldWVfYm9yZGVyX2NvbG9yOiIjNzhBOEQ4IixleHRlcm5hbF9jb21wb25lbnRfYmdfY29sb3I6IiNDQ0NDQ0MiLGV4dGVybmFsX2NvbXBvbmVudF9ib3JkZXJfY29sb3I6IiNCRkJGQkYiLGV4dGVybmFsX2NvbXBvbmVudF9kYl9iZ19jb2xvcjoiI0NDQ0NDQyIsZXh0ZXJuYWxfY29tcG9uZW50X2RiX2JvcmRlcl9jb2xvcjoiI0JGQkZCRiIsZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlX2JnX2NvbG9yOiIjQ0NDQ0NDIixleHRlcm5hbF9jb21wb25lbnRfcXVldWVfYm9yZGVyX2NvbG9yOiIjQkZCRkJGIn0sc2Fua2V5Ont1c2VNYXhXaWR0aDohMCx3aWR0aDo2MDAsaGVpZ2h0OjQwMCxsaW5rQ29sb3I6ImdyYWRpZW50Iixub2RlQWxpZ25tZW50OiJqdXN0aWZ5IixzaG93VmFsdWVzOiEwLHByZWZpeDoiIixzdWZmaXg6IiJ9LHRoZW1lOiJkZWZhdWx0IixtYXhUZXh0U2l6ZTo1ZTQsZGFya01vZGU6ITEsZm9udEZhbWlseTonInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmOycsbG9nTGV2ZWw6NSxzZWN1cml0eUxldmVsOiJzdHJpY3QiLHN0YXJ0T25Mb2FkOiEwLGFycm93TWFya2VyQWJzb2x1dGU6ITEsc2VjdXJlOlsic2VjdXJlIiwic2VjdXJpdHlMZXZlbCIsInN0YXJ0T25Mb2FkIiwibWF4VGV4dFNpemUiXSxkZXRlcm1pbmlzdGljSWRzOiExLGZvbnRTaXplOjE2fSx0SXQ9ey4uLkp4LGRldGVybWluaXN0aWNJRFNlZWQ6dm9pZCAwLHRoZW1lQ1NTOnZvaWQgMCx0aGVtZVZhcmlhYmxlczptNS5kZWZhdWx0LmdldFRoZW1lVmFyaWFibGVzKCksc2VxdWVuY2U6ey4uLkp4LnNlcXVlbmNlLG1lc3NhZ2VGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5tZXNzYWdlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLm1lc3NhZ2VGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMubWVzc2FnZUZvbnRXZWlnaHR9fSxub3RlRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMubm90ZUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5ub3RlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLm5vdGVGb250V2VpZ2h0fX0sYWN0b3JGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5hY3RvckZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5hY3RvckZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5hY3RvckZvbnRXZWlnaHR9fX0sZ2FudHQ6ey4uLkp4LmdhbnR0LHRpY2tJbnRlcnZhbDp2b2lkIDAsdXNlV2lkdGg6dm9pZCAwfSxjNDp7Li4uSnguYzQsdXNlV2lkdGg6dm9pZCAwLHBlcnNvbkZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLnBlcnNvbkZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5wZXJzb25Gb250U2l6ZSxmb250V2VpZ2h0OnRoaXMucGVyc29uRm9udFdlaWdodH19LGV4dGVybmFsX3BlcnNvbkZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmV4dGVybmFsX3BlcnNvbkZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5leHRlcm5hbF9wZXJzb25Gb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZXh0ZXJuYWxfcGVyc29uRm9udFdlaWdodH19LHN5c3RlbUZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLnN5c3RlbUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5zeXN0ZW1Gb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuc3lzdGVtRm9udFdlaWdodH19LGV4dGVybmFsX3N5c3RlbUZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmV4dGVybmFsX3N5c3RlbUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5leHRlcm5hbF9zeXN0ZW1Gb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZXh0ZXJuYWxfc3lzdGVtRm9udFdlaWdodH19LHN5c3RlbV9kYkZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLnN5c3RlbV9kYkZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5zeXN0ZW1fZGJGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuc3lzdGVtX2RiRm9udFdlaWdodH19LGV4dGVybmFsX3N5c3RlbV9kYkZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmV4dGVybmFsX3N5c3RlbV9kYkZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5leHRlcm5hbF9zeXN0ZW1fZGJGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZXh0ZXJuYWxfc3lzdGVtX2RiRm9udFdlaWdodH19LHN5c3RlbV9xdWV1ZUZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLnN5c3RlbV9xdWV1ZUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5zeXN0ZW1fcXVldWVGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuc3lzdGVtX3F1ZXVlRm9udFdlaWdodH19LGV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5leHRlcm5hbF9zeXN0ZW1fcXVldWVGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlRm9udFdlaWdodH19LGNvbnRhaW5lckZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmNvbnRhaW5lckZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5jb250YWluZXJGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuY29udGFpbmVyRm9udFdlaWdodH19LGV4dGVybmFsX2NvbnRhaW5lckZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmV4dGVybmFsX2NvbnRhaW5lckZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5leHRlcm5hbF9jb250YWluZXJGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyRm9udFdlaWdodH19LGNvbnRhaW5lcl9kYkZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmNvbnRhaW5lcl9kYkZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5jb250YWluZXJfZGJGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuY29udGFpbmVyX2RiRm9udFdlaWdodH19LGV4dGVybmFsX2NvbnRhaW5lcl9kYkZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmV4dGVybmFsX2NvbnRhaW5lcl9kYkZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5leHRlcm5hbF9jb250YWluZXJfZGJGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyX2RiRm9udFdlaWdodH19LGNvbnRhaW5lcl9xdWV1ZUZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmNvbnRhaW5lcl9xdWV1ZUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5jb250YWluZXJfcXVldWVGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuY29udGFpbmVyX3F1ZXVlRm9udFdlaWdodH19LGV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5leHRlcm5hbF9jb250YWluZXJfcXVldWVGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlRm9udFdlaWdodH19LGNvbXBvbmVudEZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmNvbXBvbmVudEZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5jb21wb25lbnRGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuY29tcG9uZW50Rm9udFdlaWdodH19LGV4dGVybmFsX2NvbXBvbmVudEZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmV4dGVybmFsX2NvbXBvbmVudEZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5leHRlcm5hbF9jb21wb25lbnRGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50Rm9udFdlaWdodH19LGNvbXBvbmVudF9kYkZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmNvbXBvbmVudF9kYkZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5jb21wb25lbnRfZGJGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuY29tcG9uZW50X2RiRm9udFdlaWdodH19LGV4dGVybmFsX2NvbXBvbmVudF9kYkZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmV4dGVybmFsX2NvbXBvbmVudF9kYkZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5leHRlcm5hbF9jb21wb25lbnRfZGJGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50X2RiRm9udFdlaWdodH19LGNvbXBvbmVudF9xdWV1ZUZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmNvbXBvbmVudF9xdWV1ZUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5jb21wb25lbnRfcXVldWVGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuY29tcG9uZW50X3F1ZXVlRm9udFdlaWdodH19LGV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5leHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlRm9udFdlaWdodH19LGJvdW5kYXJ5Rm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuYm91bmRhcnlGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuYm91bmRhcnlGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuYm91bmRhcnlGb250V2VpZ2h0fX0sbWVzc2FnZUZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLm1lc3NhZ2VGb250RmFtaWx5LGZvbnRTaXplOnRoaXMubWVzc2FnZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5tZXNzYWdlRm9udFdlaWdodH19fSxwaWU6ey4uLkp4LnBpZSx1c2VXaWR0aDo5ODR9LHJlcXVpcmVtZW50OnsuLi5KeC5yZXF1aXJlbWVudCx1c2VXaWR0aDp2b2lkIDB9LGdpdEdyYXBoOnsuLi5KeC5naXRHcmFwaCx1c2VNYXhXaWR0aDohMX0sc2Fua2V5OnsuLi5KeC5zYW5rZXksdXNlTWF4V2lkdGg6ITF9fSxlSXQ9KGksYT0iIik9Pk9iamVjdC5rZXlzKGkpLnJlZHVjZSgoZixwKT0+QXJyYXkuaXNBcnJheShpW3BdKT9mOnR5cGVvZiBpW3BdPT0ib2JqZWN0IiYmaVtwXSE9PW51bGw/Wy4uLmYsYStwLC4uLmVJdChpW3BdLCIiKV06Wy4uLmYsYStwXSxbXSksSzllPW5ldyBTZXQoZUl0KHRJdCwiIikpLElmPXRJdCxuSXQ9L14tezN9XHMqW1xuXHJdKC4qPylbXG5ccl0tezN9XHMqW1xuXHJdKy9zLGxXPS8lezJ9e1xzKig/OihcdyspXHMqOnwoXHcrKSlccyooPzooXHcrKXwoKD86KD8hfSV7Mn0pLnxccj9cbikqKSk/XHMqKD86fSV7Mn0pPy9naSxZOWU9L1xzKiUlLipcbi9nbTtjbGFzcyBySXQgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihhKXtzdXBlcihhKSx0aGlzLm5hbWU9IlVua25vd25EaWFncmFtRXJyb3IifX1jb25zdCBPQT17fSxoVz1mdW5jdGlvbihpLGEpe2k9aS5yZXBsYWNlKG5JdCwiIikucmVwbGFjZShsVywiIikucmVwbGFjZShZOWUsYApgKTtmb3IoY29uc3RbZix7ZGV0ZWN0b3I6cH1db2YgT2JqZWN0LmVudHJpZXMoT0EpKWlmKHAoaSxhKSlyZXR1cm4gZjt0aHJvdyBuZXcgckl0KGBObyBkaWFncmFtIHR5cGUgZGV0ZWN0ZWQgbWF0Y2hpbmcgZ2l2ZW4gY29uZmlndXJhdGlvbiBmb3IgdGV4dDogJHtpfWApfSxpSXQ9KC4uLmkpPT57Zm9yKGNvbnN0e2lkOmEsZGV0ZWN0b3I6Zixsb2FkZXI6cH1vZiBpKXNJdChhLGYscCl9LHNJdD0oaSxhLGYpPT57T0FbaV0/V3QuZXJyb3IoYERldGVjdG9yIHdpdGgga2V5ICR7aX0gYWxyZWFkeSBleGlzdHNgKTpPQVtpXT17ZGV0ZWN0b3I6YSxsb2FkZXI6Zn0sV3QuZGVidWcoYERldGVjdG9yIHdpdGgga2V5ICR7aX0gYWRkZWQke2Y/IiB3aXRoIGxvYWRlciI6IiJ9YCl9LFg5ZT1pPT5PQVtpXS5sb2FkZXIsVTF0PShpLGEse2RlcHRoOmY9MixjbG9iYmVyOnA9ITF9PXt9KT0+e2NvbnN0IHY9e2RlcHRoOmYsY2xvYmJlcjpwfTtyZXR1cm4gQXJyYXkuaXNBcnJheShhKSYmIUFycmF5LmlzQXJyYXkoaSk/KGEuZm9yRWFjaChtPT5VMXQoaSxtLHYpKSxpKTpBcnJheS5pc0FycmF5KGEpJiZBcnJheS5pc0FycmF5KGkpPyhhLmZvckVhY2gobT0+e2kuaW5jbHVkZXMobSl8fGkucHVzaChtKX0pLGkpOmk9PT12b2lkIDB8fGY8PTA/aSE9bnVsbCYmdHlwZW9mIGk9PSJvYmplY3QiJiZ0eXBlb2YgYT09Im9iamVjdCI/T2JqZWN0LmFzc2lnbihpLGEpOmE6KGEhPT12b2lkIDAmJnR5cGVvZiBpPT0ib2JqZWN0IiYmdHlwZW9mIGE9PSJvYmplY3QiJiZPYmplY3Qua2V5cyhhKS5mb3JFYWNoKG09Pnt0eXBlb2YgYVttXT09Im9iamVjdCImJihpW21dPT09dm9pZCAwfHx0eXBlb2YgaVttXT09Im9iamVjdCIpPyhpW21dPT09dm9pZCAwJiYoaVttXT1BcnJheS5pc0FycmF5KGFbbV0pP1tdOnt9KSxpW21dPVUxdChpW21dLGFbbV0se2RlcHRoOmYtMSxjbG9iYmVyOnB9KSk6KHB8fHR5cGVvZiBpW21dIT0ib2JqZWN0IiYmdHlwZW9mIGFbbV0hPSJvYmplY3QiKSYmKGlbbV09YVttXSl9KSxpKX0sWjE9VTF0O3ZhciBROWU9dHlwZW9mIGdsb2JhbD09Im9iamVjdCImJmdsb2JhbCYmZ2xvYmFsLk9iamVjdD09PU9iamVjdCYmZ2xvYmFsO2NvbnN0IGFJdD1ROWU7dmFyIFo5ZT10eXBlb2Ygc2VsZj09Im9iamVjdCImJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLEo5ZT1hSXR8fFo5ZXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKTtjb25zdCBKdz1KOWU7dmFyIHRUZT1Kdy5TeW1ib2w7Y29uc3QgUTI9dFRlO3ZhciBvSXQ9T2JqZWN0LnByb3RvdHlwZSxlVGU9b0l0Lmhhc093blByb3BlcnR5LG5UZT1vSXQudG9TdHJpbmcsSE49UTI/UTIudG9TdHJpbmdUYWc6dm9pZCAwO2Z1bmN0aW9uIHJUZShpKXt2YXIgYT1lVGUuY2FsbChpLEhOKSxmPWlbSE5dO3RyeXtpW0hOXT12b2lkIDA7dmFyIHA9ITB9Y2F0Y2h7fXZhciB2PW5UZS5jYWxsKGkpO3JldHVybiBwJiYoYT9pW0hOXT1mOmRlbGV0ZSBpW0hOXSksdn12YXIgaVRlPU9iamVjdC5wcm90b3R5cGUsc1RlPWlUZS50b1N0cmluZztmdW5jdGlvbiBhVGUoaSl7cmV0dXJuIHNUZS5jYWxsKGkpfXZhciBvVGU9IltvYmplY3QgTnVsbF0iLGNUZT0iW29iamVjdCBVbmRlZmluZWRdIixjSXQ9UTI/UTIudG9TdHJpbmdUYWc6dm9pZCAwO2Z1bmN0aW9uIFFFKGkpe3JldHVybiBpPT1udWxsP2k9PT12b2lkIDA/Y1RlOm9UZTpjSXQmJmNJdCBpbiBPYmplY3QoaSk/clRlKGkpOmFUZShpKX1mdW5jdGlvbiBPYihpKXt2YXIgYT10eXBlb2YgaTtyZXR1cm4gaSE9bnVsbCYmKGE9PSJvYmplY3QifHxhPT0iZnVuY3Rpb24iKX12YXIgdVRlPSJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIixsVGU9IltvYmplY3QgRnVuY3Rpb25dIixoVGU9IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIixmVGU9IltvYmplY3QgUHJveHldIjtmdW5jdGlvbiBOQShpKXtpZighT2IoaSkpcmV0dXJuITE7dmFyIGE9UUUoaSk7cmV0dXJuIGE9PWxUZXx8YT09aFRlfHxhPT11VGV8fGE9PWZUZX12YXIgZFRlPUp3WyJfX2NvcmUtanNfc2hhcmVkX18iXTtjb25zdCBXMXQ9ZFRlO3ZhciB1SXQ9ZnVuY3Rpb24oKXt2YXIgaT0vW14uXSskLy5leGVjKFcxdCYmVzF0LmtleXMmJlcxdC5rZXlzLklFX1BST1RPfHwiIik7cmV0dXJuIGk/IlN5bWJvbChzcmMpXzEuIitpOiIifSgpO2Z1bmN0aW9uIGdUZShpKXtyZXR1cm4hIXVJdCYmdUl0IGluIGl9dmFyIHBUZT1GdW5jdGlvbi5wcm90b3R5cGUsYlRlPXBUZS50b1N0cmluZztmdW5jdGlvbiBaRShpKXtpZihpIT1udWxsKXt0cnl7cmV0dXJuIGJUZS5jYWxsKGkpfWNhdGNoe310cnl7cmV0dXJuIGkrIiJ9Y2F0Y2h7fX1yZXR1cm4iIn12YXIgdlRlPS9bXFxeJC4qKz8oKVtcXXt9fF0vZyx3VGU9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC8sbVRlPUZ1bmN0aW9uLnByb3RvdHlwZSx5VGU9T2JqZWN0LnByb3RvdHlwZSx4VGU9bVRlLnRvU3RyaW5nLGtUZT15VGUuaGFzT3duUHJvcGVydHksRVRlPVJlZ0V4cCgiXiIreFRlLmNhbGwoa1RlKS5yZXBsYWNlKHZUZSwiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csIiQxLio/IikrIiQiKTtmdW5jdGlvbiBUVGUoaSl7aWYoIU9iKGkpfHxnVGUoaSkpcmV0dXJuITE7dmFyIGE9TkEoaSk/RVRlOndUZTtyZXR1cm4gYS50ZXN0KFpFKGkpKX1mdW5jdGlvbiBfVGUoaSxhKXtyZXR1cm4gaT09bnVsbD92b2lkIDA6aVthXX1mdW5jdGlvbiBKRShpLGEpe3ZhciBmPV9UZShpLGEpO3JldHVybiBUVGUoZik/Zjp2b2lkIDB9dmFyIENUZT1KRShPYmplY3QsImNyZWF0ZSIpO2NvbnN0IFZOPUNUZTtmdW5jdGlvbiBTVGUoKXt0aGlzLl9fZGF0YV9fPVZOP1ZOKG51bGwpOnt9LHRoaXMuc2l6ZT0wfWZ1bmN0aW9uIEFUZShpKXt2YXIgYT10aGlzLmhhcyhpKSYmZGVsZXRlIHRoaXMuX19kYXRhX19baV07cmV0dXJuIHRoaXMuc2l6ZS09YT8xOjAsYX12YXIgTFRlPSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIixNVGU9T2JqZWN0LnByb3RvdHlwZSxEVGU9TVRlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIElUZShpKXt2YXIgYT10aGlzLl9fZGF0YV9fO2lmKFZOKXt2YXIgZj1hW2ldO3JldHVybiBmPT09TFRlP3ZvaWQgMDpmfXJldHVybiBEVGUuY2FsbChhLGkpP2FbaV06dm9pZCAwfXZhciBPVGU9T2JqZWN0LnByb3RvdHlwZSxOVGU9T1RlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIFBUZShpKXt2YXIgYT10aGlzLl9fZGF0YV9fO3JldHVybiBWTj9hW2ldIT09dm9pZCAwOk5UZS5jYWxsKGEsaSl9dmFyIEZUZT0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI7ZnVuY3Rpb24gQlRlKGksYSl7dmFyIGY9dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyhpKT8wOjEsZltpXT1WTiYmYT09PXZvaWQgMD9GVGU6YSx0aGlzfWZ1bmN0aW9uIHQ5KGkpe3ZhciBhPS0xLGY9aT09bnVsbD8wOmkubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KythPGY7KXt2YXIgcD1pW2FdO3RoaXMuc2V0KHBbMF0scFsxXSl9fXQ5LnByb3RvdHlwZS5jbGVhcj1TVGUsdDkucHJvdG90eXBlLmRlbGV0ZT1BVGUsdDkucHJvdG90eXBlLmdldD1JVGUsdDkucHJvdG90eXBlLmhhcz1QVGUsdDkucHJvdG90eXBlLnNldD1CVGU7ZnVuY3Rpb24gUlRlKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH1mdW5jdGlvbiBQQShpLGEpe3JldHVybiBpPT09YXx8aSE9PWkmJmEhPT1hfWZ1bmN0aW9uIGZXKGksYSl7Zm9yKHZhciBmPWkubGVuZ3RoO2YtLTspaWYoUEEoaVtmXVswXSxhKSlyZXR1cm4gZjtyZXR1cm4tMX12YXIgalRlPUFycmF5LnByb3RvdHlwZSwkVGU9alRlLnNwbGljZTtmdW5jdGlvbiB6VGUoaSl7dmFyIGE9dGhpcy5fX2RhdGFfXyxmPWZXKGEsaSk7aWYoZjwwKXJldHVybiExO3ZhciBwPWEubGVuZ3RoLTE7cmV0dXJuIGY9PXA/YS5wb3AoKTokVGUuY2FsbChhLGYsMSksLS10aGlzLnNpemUsITB9ZnVuY3Rpb24gcVRlKGkpe3ZhciBhPXRoaXMuX19kYXRhX18sZj1mVyhhLGkpO3JldHVybiBmPDA/dm9pZCAwOmFbZl1bMV19ZnVuY3Rpb24gSFRlKGkpe3JldHVybiBmVyh0aGlzLl9fZGF0YV9fLGkpPi0xfWZ1bmN0aW9uIFZUZShpLGEpe3ZhciBmPXRoaXMuX19kYXRhX18scD1mVyhmLGkpO3JldHVybiBwPDA/KCsrdGhpcy5zaXplLGYucHVzaChbaSxhXSkpOmZbcF1bMV09YSx0aGlzfWZ1bmN0aW9uIHk1KGkpe3ZhciBhPS0xLGY9aT09bnVsbD8wOmkubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KythPGY7KXt2YXIgcD1pW2FdO3RoaXMuc2V0KHBbMF0scFsxXSl9fXk1LnByb3RvdHlwZS5jbGVhcj1SVGUseTUucHJvdG90eXBlLmRlbGV0ZT16VGUseTUucHJvdG90eXBlLmdldD1xVGUseTUucHJvdG90eXBlLmhhcz1IVGUseTUucHJvdG90eXBlLnNldD1WVGU7dmFyIEdUZT1KRShKdywiTWFwIik7Y29uc3QgR049R1RlO2Z1bmN0aW9uIFVUZSgpe3RoaXMuc2l6ZT0wLHRoaXMuX19kYXRhX189e2hhc2g6bmV3IHQ5LG1hcDpuZXcoR058fHk1KSxzdHJpbmc6bmV3IHQ5fX1mdW5jdGlvbiBXVGUoaSl7dmFyIGE9dHlwZW9mIGk7cmV0dXJuIGE9PSJzdHJpbmcifHxhPT0ibnVtYmVyInx8YT09InN5bWJvbCJ8fGE9PSJib29sZWFuIj9pIT09Il9fcHJvdG9fXyI6aT09PW51bGx9ZnVuY3Rpb24gZFcoaSxhKXt2YXIgZj1pLl9fZGF0YV9fO3JldHVybiBXVGUoYSk/Zlt0eXBlb2YgYT09InN0cmluZyI/InN0cmluZyI6Imhhc2giXTpmLm1hcH1mdW5jdGlvbiBLVGUoaSl7dmFyIGE9ZFcodGhpcyxpKS5kZWxldGUoaSk7cmV0dXJuIHRoaXMuc2l6ZS09YT8xOjAsYX1mdW5jdGlvbiBZVGUoaSl7cmV0dXJuIGRXKHRoaXMsaSkuZ2V0KGkpfWZ1bmN0aW9uIFhUZShpKXtyZXR1cm4gZFcodGhpcyxpKS5oYXMoaSl9ZnVuY3Rpb24gUVRlKGksYSl7dmFyIGY9ZFcodGhpcyxpKSxwPWYuc2l6ZTtyZXR1cm4gZi5zZXQoaSxhKSx0aGlzLnNpemUrPWYuc2l6ZT09cD8wOjEsdGhpc31mdW5jdGlvbiB4NShpKXt2YXIgYT0tMSxmPWk9PW51bGw/MDppLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrYTxmOyl7dmFyIHA9aVthXTt0aGlzLnNldChwWzBdLHBbMV0pfX14NS5wcm90b3R5cGUuY2xlYXI9VVRlLHg1LnByb3RvdHlwZS5kZWxldGU9S1RlLHg1LnByb3RvdHlwZS5nZXQ9WVRlLHg1LnByb3RvdHlwZS5oYXM9WFRlLHg1LnByb3RvdHlwZS5zZXQ9UVRlO3ZhciBaVGU9IkV4cGVjdGVkIGEgZnVuY3Rpb24iO2Z1bmN0aW9uIEZBKGksYSl7aWYodHlwZW9mIGkhPSJmdW5jdGlvbiJ8fGEhPW51bGwmJnR5cGVvZiBhIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoWlRlKTt2YXIgZj1mdW5jdGlvbigpe3ZhciBwPWFyZ3VtZW50cyx2PWE/YS5hcHBseSh0aGlzLHApOnBbMF0sbT1mLmNhY2hlO2lmKG0uaGFzKHYpKXJldHVybiBtLmdldCh2KTt2YXIgYj1pLmFwcGx5KHRoaXMscCk7cmV0dXJuIGYuY2FjaGU9bS5zZXQodixiKXx8bSxifTtyZXR1cm4gZi5jYWNoZT1uZXcoRkEuQ2FjaGV8fHg1KSxmfUZBLkNhY2hlPXg1O2Z1bmN0aW9uIEpUZSgpe3RoaXMuX19kYXRhX189bmV3IHk1LHRoaXMuc2l6ZT0wfWZ1bmN0aW9uIHRfZShpKXt2YXIgYT10aGlzLl9fZGF0YV9fLGY9YS5kZWxldGUoaSk7cmV0dXJuIHRoaXMuc2l6ZT1hLnNpemUsZn1mdW5jdGlvbiBlX2UoaSl7cmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGkpfWZ1bmN0aW9uIG5fZShpKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoaSl9dmFyIHJfZT0yMDA7ZnVuY3Rpb24gaV9lKGksYSl7dmFyIGY9dGhpcy5fX2RhdGFfXztpZihmIGluc3RhbmNlb2YgeTUpe3ZhciBwPWYuX19kYXRhX187aWYoIUdOfHxwLmxlbmd0aDxyX2UtMSlyZXR1cm4gcC5wdXNoKFtpLGFdKSx0aGlzLnNpemU9KytmLnNpemUsdGhpcztmPXRoaXMuX19kYXRhX189bmV3IHg1KHApfXJldHVybiBmLnNldChpLGEpLHRoaXMuc2l6ZT1mLnNpemUsdGhpc31mdW5jdGlvbiB0bShpKXt2YXIgYT10aGlzLl9fZGF0YV9fPW5ldyB5NShpKTt0aGlzLnNpemU9YS5zaXplfXRtLnByb3RvdHlwZS5jbGVhcj1KVGUsdG0ucHJvdG90eXBlLmRlbGV0ZT10X2UsdG0ucHJvdG90eXBlLmdldD1lX2UsdG0ucHJvdG90eXBlLmhhcz1uX2UsdG0ucHJvdG90eXBlLnNldD1pX2U7dmFyIHNfZT1mdW5jdGlvbigpe3RyeXt2YXIgaT1KRShPYmplY3QsImRlZmluZVByb3BlcnR5Iik7cmV0dXJuIGkoe30sIiIse30pLGl9Y2F0Y2h7fX0oKTtjb25zdCBnVz1zX2U7ZnVuY3Rpb24gcFcoaSxhLGYpe2E9PSJfX3Byb3RvX18iJiZnVz9nVyhpLGEse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOmYsd3JpdGFibGU6ITB9KTppW2FdPWZ9ZnVuY3Rpb24gSzF0KGksYSxmKXsoZiE9PXZvaWQgMCYmIVBBKGlbYV0sZil8fGY9PT12b2lkIDAmJiEoYSBpbiBpKSkmJnBXKGksYSxmKX1mdW5jdGlvbiBhX2UoaSl7cmV0dXJuIGZ1bmN0aW9uKGEsZixwKXtmb3IodmFyIHY9LTEsbT1PYmplY3QoYSksYj1wKGEpLEU9Yi5sZW5ndGg7RS0tOyl7dmFyIEM9YltpP0U6Kyt2XTtpZihmKG1bQ10sQyxtKT09PSExKWJyZWFrfXJldHVybiBhfX12YXIgb19lPWFfZSgpO2NvbnN0IFkxdD1vX2U7dmFyIGxJdD10eXBlb2YgZXhwb3J0cz09Im9iamVjdCImJmV4cG9ydHMmJiFleHBvcnRzLm5vZGVUeXBlJiZleHBvcnRzLGhJdD1sSXQmJnR5cGVvZiBtb2R1bGU9PSJvYmplY3QiJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSxjX2U9aEl0JiZoSXQuZXhwb3J0cz09PWxJdCxmSXQ9Y19lP0p3LkJ1ZmZlcjp2b2lkIDAsZEl0PWZJdD9mSXQuYWxsb2NVbnNhZmU6dm9pZCAwO2Z1bmN0aW9uIGdJdChpLGEpe2lmKGEpcmV0dXJuIGkuc2xpY2UoKTt2YXIgZj1pLmxlbmd0aCxwPWRJdD9kSXQoZik6bmV3IGkuY29uc3RydWN0b3IoZik7cmV0dXJuIGkuY29weShwKSxwfXZhciB1X2U9SncuVWludDhBcnJheTtjb25zdCBiVz11X2U7ZnVuY3Rpb24gWDF0KGkpe3ZhciBhPW5ldyBpLmNvbnN0cnVjdG9yKGkuYnl0ZUxlbmd0aCk7cmV0dXJuIG5ldyBiVyhhKS5zZXQobmV3IGJXKGkpKSxhfWZ1bmN0aW9uIHBJdChpLGEpe3ZhciBmPWE/WDF0KGkuYnVmZmVyKTppLmJ1ZmZlcjtyZXR1cm4gbmV3IGkuY29uc3RydWN0b3IoZixpLmJ5dGVPZmZzZXQsaS5sZW5ndGgpfWZ1bmN0aW9uIGJJdChpLGEpe3ZhciBmPS0xLHA9aS5sZW5ndGg7Zm9yKGF8fChhPUFycmF5KHApKTsrK2Y8cDspYVtmXT1pW2ZdO3JldHVybiBhfXZhciB2SXQ9T2JqZWN0LmNyZWF0ZSxsX2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBpKCl7fXJldHVybiBmdW5jdGlvbihhKXtpZighT2IoYSkpcmV0dXJue307aWYodkl0KXJldHVybiB2SXQoYSk7aS5wcm90b3R5cGU9YTt2YXIgZj1uZXcgaTtyZXR1cm4gaS5wcm90b3R5cGU9dm9pZCAwLGZ9fSgpO2NvbnN0IGhfZT1sX2U7ZnVuY3Rpb24gd0l0KGksYSl7cmV0dXJuIGZ1bmN0aW9uKGYpe3JldHVybiBpKGEoZikpfX12YXIgZl9lPXdJdChPYmplY3QuZ2V0UHJvdG90eXBlT2YsT2JqZWN0KTtjb25zdCBRMXQ9Zl9lO3ZhciBkX2U9T2JqZWN0LnByb3RvdHlwZTtmdW5jdGlvbiB2VyhpKXt2YXIgYT1pJiZpLmNvbnN0cnVjdG9yLGY9dHlwZW9mIGE9PSJmdW5jdGlvbiImJmEucHJvdG90eXBlfHxkX2U7cmV0dXJuIGk9PT1mfWZ1bmN0aW9uIG1JdChpKXtyZXR1cm4gdHlwZW9mIGkuY29uc3RydWN0b3I9PSJmdW5jdGlvbiImJiF2VyhpKT9oX2UoUTF0KGkpKTp7fX1mdW5jdGlvbiBsMyhpKXtyZXR1cm4gaSE9bnVsbCYmdHlwZW9mIGk9PSJvYmplY3QifXZhciBnX2U9IltvYmplY3QgQXJndW1lbnRzXSI7ZnVuY3Rpb24geUl0KGkpe3JldHVybiBsMyhpKSYmUUUoaSk9PWdfZX12YXIgeEl0PU9iamVjdC5wcm90b3R5cGUscF9lPXhJdC5oYXNPd25Qcm9wZXJ0eSxiX2U9eEl0LnByb3BlcnR5SXNFbnVtZXJhYmxlLHZfZT15SXQoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKT95SXQ6ZnVuY3Rpb24oaSl7cmV0dXJuIGwzKGkpJiZwX2UuY2FsbChpLCJjYWxsZWUiKSYmIWJfZS5jYWxsKGksImNhbGxlZSIpfTtjb25zdCBCQT12X2U7dmFyIHdfZT1BcnJheS5pc0FycmF5O2NvbnN0IE9mPXdfZTt2YXIgbV9lPTkwMDcxOTkyNTQ3NDA5OTE7ZnVuY3Rpb24gWjF0KGkpe3JldHVybiB0eXBlb2YgaT09Im51bWJlciImJmk+LTEmJmklMT09MCYmaTw9bV9lfWZ1bmN0aW9uIHRrKGkpe3JldHVybiBpIT1udWxsJiZaMXQoaS5sZW5ndGgpJiYhTkEoaSl9ZnVuY3Rpb24ga0l0KGkpe3JldHVybiBsMyhpKSYmdGsoaSl9ZnVuY3Rpb24geV9lKCl7cmV0dXJuITF9dmFyIEVJdD10eXBlb2YgZXhwb3J0cz09Im9iamVjdCImJmV4cG9ydHMmJiFleHBvcnRzLm5vZGVUeXBlJiZleHBvcnRzLFRJdD1FSXQmJnR5cGVvZiBtb2R1bGU9PSJvYmplY3QiJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSx4X2U9VEl0JiZUSXQuZXhwb3J0cz09PUVJdCxfSXQ9eF9lP0p3LkJ1ZmZlcjp2b2lkIDAsa19lPV9JdD9fSXQuaXNCdWZmZXI6dm9pZCAwLEVfZT1rX2V8fHlfZTtjb25zdCBSQT1FX2U7dmFyIFRfZT0iW29iamVjdCBPYmplY3RdIixfX2U9RnVuY3Rpb24ucHJvdG90eXBlLENfZT1PYmplY3QucHJvdG90eXBlLENJdD1fX2UudG9TdHJpbmcsU19lPUNfZS5oYXNPd25Qcm9wZXJ0eSxBX2U9Q0l0LmNhbGwoT2JqZWN0KTtmdW5jdGlvbiBTSXQoaSl7aWYoIWwzKGkpfHxRRShpKSE9VF9lKXJldHVybiExO3ZhciBhPVExdChpKTtpZihhPT09bnVsbClyZXR1cm4hMDt2YXIgZj1TX2UuY2FsbChhLCJjb25zdHJ1Y3RvciIpJiZhLmNvbnN0cnVjdG9yO3JldHVybiB0eXBlb2YgZj09ImZ1bmN0aW9uIiYmZiBpbnN0YW5jZW9mIGYmJkNJdC5jYWxsKGYpPT1BX2V9dmFyIExfZT0iW29iamVjdCBBcmd1bWVudHNdIixNX2U9IltvYmplY3QgQXJyYXldIixEX2U9IltvYmplY3QgQm9vbGVhbl0iLElfZT0iW29iamVjdCBEYXRlXSIsT19lPSJbb2JqZWN0IEVycm9yXSIsTl9lPSJbb2JqZWN0IEZ1bmN0aW9uXSIsUF9lPSJbb2JqZWN0IE1hcF0iLEZfZT0iW29iamVjdCBOdW1iZXJdIixCX2U9IltvYmplY3QgT2JqZWN0XSIsUl9lPSJbb2JqZWN0IFJlZ0V4cF0iLGpfZT0iW29iamVjdCBTZXRdIiwkX2U9IltvYmplY3QgU3RyaW5nXSIsel9lPSJbb2JqZWN0IFdlYWtNYXBdIixxX2U9IltvYmplY3QgQXJyYXlCdWZmZXJdIixIX2U9IltvYmplY3QgRGF0YVZpZXddIixWX2U9IltvYmplY3QgRmxvYXQzMkFycmF5XSIsR19lPSJbb2JqZWN0IEZsb2F0NjRBcnJheV0iLFVfZT0iW29iamVjdCBJbnQ4QXJyYXldIixXX2U9IltvYmplY3QgSW50MTZBcnJheV0iLEtfZT0iW29iamVjdCBJbnQzMkFycmF5XSIsWV9lPSJbb2JqZWN0IFVpbnQ4QXJyYXldIixYX2U9IltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIixRX2U9IltvYmplY3QgVWludDE2QXJyYXldIixaX2U9IltvYmplY3QgVWludDMyQXJyYXldIixrbD17fTtrbFtWX2VdPWtsW0dfZV09a2xbVV9lXT1rbFtXX2VdPWtsW0tfZV09a2xbWV9lXT1rbFtYX2VdPWtsW1FfZV09a2xbWl9lXT0hMCxrbFtMX2VdPWtsW01fZV09a2xbcV9lXT1rbFtEX2VdPWtsW0hfZV09a2xbSV9lXT1rbFtPX2VdPWtsW05fZV09a2xbUF9lXT1rbFtGX2VdPWtsW0JfZV09a2xbUl9lXT1rbFtqX2VdPWtsWyRfZV09a2xbel9lXT0hMTtmdW5jdGlvbiBKX2UoaSl7cmV0dXJuIGwzKGkpJiZaMXQoaS5sZW5ndGgpJiYhIWtsW1FFKGkpXX1mdW5jdGlvbiB3VyhpKXtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGkoYSl9fXZhciBBSXQ9dHlwZW9mIGV4cG9ydHM9PSJvYmplY3QiJiZleHBvcnRzJiYhZXhwb3J0cy5ub2RlVHlwZSYmZXhwb3J0cyxVTj1BSXQmJnR5cGVvZiBtb2R1bGU9PSJvYmplY3QiJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSx0Q2U9VU4mJlVOLmV4cG9ydHM9PT1BSXQsSjF0PXRDZSYmYUl0LnByb2Nlc3MsZUNlPWZ1bmN0aW9uKCl7dHJ5e3ZhciBpPVVOJiZVTi5yZXF1aXJlJiZVTi5yZXF1aXJlKCJ1dGlsIikudHlwZXM7cmV0dXJuIGl8fEoxdCYmSjF0LmJpbmRpbmcmJkoxdC5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2h7fX0oKTtjb25zdCBqQT1lQ2U7dmFyIExJdD1qQSYmakEuaXNUeXBlZEFycmF5LG5DZT1MSXQ/d1coTEl0KTpKX2U7Y29uc3QgbVc9bkNlO2Z1bmN0aW9uIHRkdChpLGEpe2lmKCEoYT09PSJjb25zdHJ1Y3RvciImJnR5cGVvZiBpW2FdPT0iZnVuY3Rpb24iKSYmYSE9Il9fcHJvdG9fXyIpcmV0dXJuIGlbYV19dmFyIHJDZT1PYmplY3QucHJvdG90eXBlLGlDZT1yQ2UuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24geVcoaSxhLGYpe3ZhciBwPWlbYV07KCEoaUNlLmNhbGwoaSxhKSYmUEEocCxmKSl8fGY9PT12b2lkIDAmJiEoYSBpbiBpKSkmJnBXKGksYSxmKX1mdW5jdGlvbiBXTihpLGEsZixwKXt2YXIgdj0hZjtmfHwoZj17fSk7Zm9yKHZhciBtPS0xLGI9YS5sZW5ndGg7KyttPGI7KXt2YXIgRT1hW21dLEM9cD9wKGZbRV0saVtFXSxFLGYsaSk6dm9pZCAwO0M9PT12b2lkIDAmJihDPWlbRV0pLHY/cFcoZixFLEMpOnlXKGYsRSxDKX1yZXR1cm4gZn1mdW5jdGlvbiBzQ2UoaSxhKXtmb3IodmFyIGY9LTEscD1BcnJheShpKTsrK2Y8aTspcFtmXT1hKGYpO3JldHVybiBwfXZhciBhQ2U9OTAwNzE5OTI1NDc0MDk5MSxvQ2U9L14oPzowfFsxLTldXGQqKSQvO2Z1bmN0aW9uIHhXKGksYSl7dmFyIGY9dHlwZW9mIGk7cmV0dXJuIGE9YT8/YUNlLCEhYSYmKGY9PSJudW1iZXIifHxmIT0ic3ltYm9sIiYmb0NlLnRlc3QoaSkpJiZpPi0xJiZpJTE9PTAmJmk8YX12YXIgY0NlPU9iamVjdC5wcm90b3R5cGUsdUNlPWNDZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBNSXQoaSxhKXt2YXIgZj1PZihpKSxwPSFmJiZCQShpKSx2PSFmJiYhcCYmUkEoaSksbT0hZiYmIXAmJiF2JiZtVyhpKSxiPWZ8fHB8fHZ8fG0sRT1iP3NDZShpLmxlbmd0aCxTdHJpbmcpOltdLEM9RS5sZW5ndGg7Zm9yKHZhciBBIGluIGkpKGF8fHVDZS5jYWxsKGksQSkpJiYhKGImJihBPT0ibGVuZ3RoInx8diYmKEE9PSJvZmZzZXQifHxBPT0icGFyZW50Iil8fG0mJihBPT0iYnVmZmVyInx8QT09ImJ5dGVMZW5ndGgifHxBPT0iYnl0ZU9mZnNldCIpfHx4VyhBLEMpKSkmJkUucHVzaChBKTtyZXR1cm4gRX1mdW5jdGlvbiBsQ2UoaSl7dmFyIGE9W107aWYoaSE9bnVsbClmb3IodmFyIGYgaW4gT2JqZWN0KGkpKWEucHVzaChmKTtyZXR1cm4gYX12YXIgaENlPU9iamVjdC5wcm90b3R5cGUsZkNlPWhDZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBkQ2UoaSl7aWYoIU9iKGkpKXJldHVybiBsQ2UoaSk7dmFyIGE9dlcoaSksZj1bXTtmb3IodmFyIHAgaW4gaSlwPT0iY29uc3RydWN0b3IiJiYoYXx8IWZDZS5jYWxsKGkscCkpfHxmLnB1c2gocCk7cmV0dXJuIGZ9ZnVuY3Rpb24gZTkoaSl7cmV0dXJuIHRrKGkpP01JdChpLCEwKTpkQ2UoaSl9ZnVuY3Rpb24gZ0NlKGkpe3JldHVybiBXTihpLGU5KGkpKX1mdW5jdGlvbiBwQ2UoaSxhLGYscCx2LG0sYil7dmFyIEU9dGR0KGksZiksQz10ZHQoYSxmKSxBPWIuZ2V0KEMpO2lmKEEpe0sxdChpLGYsQSk7cmV0dXJufXZhciBQPW0/bShFLEMsZisiIixpLGEsYik6dm9pZCAwLEY9UD09PXZvaWQgMDtpZihGKXt2YXIgaj1PZihDKSxSPSFqJiZSQShDKSxIPSFqJiYhUiYmbVcoQyk7UD1DLGp8fFJ8fEg/T2YoRSk/UD1FOmtJdChFKT9QPWJJdChFKTpSPyhGPSExLFA9Z0l0KEMsITApKTpIPyhGPSExLFA9cEl0KEMsITApKTpQPVtdOlNJdChDKXx8QkEoQyk/KFA9RSxCQShFKT9QPWdDZShFKTooIU9iKEUpfHxOQShFKSkmJihQPW1JdChDKSkpOkY9ITF9RiYmKGIuc2V0KEMsUCksdihQLEMscCxtLGIpLGIuZGVsZXRlKEMpKSxLMXQoaSxmLFApfWZ1bmN0aW9uIERJdChpLGEsZixwLHYpe2khPT1hJiZZMXQoYSxmdW5jdGlvbihtLGIpe2lmKHZ8fCh2PW5ldyB0bSksT2IobSkpcENlKGksYSxiLGYsREl0LHAsdik7ZWxzZXt2YXIgRT1wP3AodGR0KGksYiksbSxiKyIiLGksYSx2KTp2b2lkIDA7RT09PXZvaWQgMCYmKEU9bSksSzF0KGksYixFKX19LGU5KX1mdW5jdGlvbiBuOShpKXtyZXR1cm4gaX1mdW5jdGlvbiBiQ2UoaSxhLGYpe3N3aXRjaChmLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBpLmNhbGwoYSk7Y2FzZSAxOnJldHVybiBpLmNhbGwoYSxmWzBdKTtjYXNlIDI6cmV0dXJuIGkuY2FsbChhLGZbMF0sZlsxXSk7Y2FzZSAzOnJldHVybiBpLmNhbGwoYSxmWzBdLGZbMV0sZlsyXSl9cmV0dXJuIGkuYXBwbHkoYSxmKX12YXIgSUl0PU1hdGgubWF4O2Z1bmN0aW9uIE9JdChpLGEsZil7cmV0dXJuIGE9SUl0KGE9PT12b2lkIDA/aS5sZW5ndGgtMTphLDApLGZ1bmN0aW9uKCl7Zm9yKHZhciBwPWFyZ3VtZW50cyx2PS0xLG09SUl0KHAubGVuZ3RoLWEsMCksYj1BcnJheShtKTsrK3Y8bTspYlt2XT1wW2Erdl07dj0tMTtmb3IodmFyIEU9QXJyYXkoYSsxKTsrK3Y8YTspRVt2XT1wW3ZdO3JldHVybiBFW2FdPWYoYiksYkNlKGksdGhpcyxFKX19ZnVuY3Rpb24gJEEoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGl9fXZhciB2Q2U9Z1c/ZnVuY3Rpb24oaSxhKXtyZXR1cm4gZ1coaSwidG9TdHJpbmciLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTokQShhKSx3cml0YWJsZTohMH0pfTpuOTtjb25zdCB3Q2U9dkNlO3ZhciBtQ2U9ODAwLHlDZT0xNix4Q2U9RGF0ZS5ub3c7ZnVuY3Rpb24ga0NlKGkpe3ZhciBhPTAsZj0wO3JldHVybiBmdW5jdGlvbigpe3ZhciBwPXhDZSgpLHY9eUNlLShwLWYpO2lmKGY9cCx2PjApe2lmKCsrYT49bUNlKXJldHVybiBhcmd1bWVudHNbMF19ZWxzZSBhPTA7cmV0dXJuIGkuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9fXZhciBFQ2U9a0NlKHdDZSk7Y29uc3QgTkl0PUVDZTtmdW5jdGlvbiBrVyhpLGEpe3JldHVybiBOSXQoT0l0KGksYSxuOSksaSsiIil9ZnVuY3Rpb24gS04oaSxhLGYpe2lmKCFPYihmKSlyZXR1cm4hMTt2YXIgcD10eXBlb2YgYTtyZXR1cm4ocD09Im51bWJlciI/dGsoZikmJnhXKGEsZi5sZW5ndGgpOnA9PSJzdHJpbmciJiZhIGluIGYpP1BBKGZbYV0saSk6ITF9ZnVuY3Rpb24gVENlKGkpe3JldHVybiBrVyhmdW5jdGlvbihhLGYpe3ZhciBwPS0xLHY9Zi5sZW5ndGgsbT12PjE/Zlt2LTFdOnZvaWQgMCxiPXY+Mj9mWzJdOnZvaWQgMDtmb3IobT1pLmxlbmd0aD4zJiZ0eXBlb2YgbT09ImZ1bmN0aW9uIj8odi0tLG0pOnZvaWQgMCxiJiZLTihmWzBdLGZbMV0sYikmJihtPXY8Mz92b2lkIDA6bSx2PTEpLGE9T2JqZWN0KGEpOysrcDx2Oyl7dmFyIEU9ZltwXTtFJiZpKGEsRSxwLG0pfXJldHVybiBhfSl9dmFyIF9DZT1UQ2UoZnVuY3Rpb24oaSxhLGYpe0RJdChpLGEsZil9KTtjb25zdCBFVz1fQ2UsUEl0PSLigIsiLENDZT17Y3VydmVCYXNpczpNQSxjdXJ2ZUJhc2lzQ2xvc2VkOnFFZSxjdXJ2ZUJhc2lzT3BlbjpIRWUsY3VydmVCdW1wWDokRWUsY3VydmVCdW1wWTp6RWUsY3VydmVCdW5kbGU6VkVlLGN1cnZlQ2FyZGluYWxDbG9zZWQ6VUVlLGN1cnZlQ2FyZGluYWxPcGVuOldFZSxjdXJ2ZUNhcmRpbmFsOkdFZSxjdXJ2ZUNhdG11bGxSb21DbG9zZWQ6WUVlLGN1cnZlQ2F0bXVsbFJvbU9wZW46WEVlLGN1cnZlQ2F0bXVsbFJvbTpLRWUsY3VydmVMaW5lYXI6aWcsY3VydmVMaW5lYXJDbG9zZWQ6UUVlLGN1cnZlTW9ub3RvbmVYOlpFZSxjdXJ2ZU1vbm90b25lWTpKRWUsY3VydmVOYXR1cmFsOnQ5ZSxjdXJ2ZVN0ZXA6ZTllLGN1cnZlU3RlcEFmdGVyOnI5ZSxjdXJ2ZVN0ZXBCZWZvcmU6bjllfSxTQ2U9L1xzKig/OihcdyspKD89Oik6fChcdyspKVxzKig/OihcdyspfCgoPzooPyF9JXsyfSkufFxyP1xuKSopKT9ccyooPzp9JXsyfSk/L2dpLEFDZT1mdW5jdGlvbihpLGEpe2NvbnN0IGY9Rkl0KGksLyg/OmluaXRcYil8KD86aW5pdGlhbGl6ZVxiKS8pO2xldCBwPXt9O2lmKEFycmF5LmlzQXJyYXkoZikpe2NvbnN0IG09Zi5tYXAoYj0+Yi5hcmdzKTtZTihtKSxwPVoxKHAsWy4uLm1dKX1lbHNlIHA9Zi5hcmdzO2lmKCFwKXJldHVybjtsZXQgdj1oVyhpLGEpO3JldHVyblsiY29uZmlnIl0uZm9yRWFjaChtPT57cFttXSE9PXZvaWQgMCYmKHY9PT0iZmxvd2NoYXJ0LXYyIiYmKHY9ImZsb3djaGFydCIpLHBbdl09cFttXSxkZWxldGUgcFttXSl9KSxwfSxGSXQ9ZnVuY3Rpb24oaSxhPW51bGwpe3RyeXtjb25zdCBmPW5ldyBSZWdFeHAoYFslXXsyfSg/IVt7XSR7U0NlLnNvdXJjZX0pKD89W31dWyVdezJ9KS4qCmAsImlnIik7aT1pLnRyaW0oKS5yZXBsYWNlKGYsIiIpLnJlcGxhY2UoLycvZ20sJyInKSxXdC5kZWJ1ZyhgRGV0ZWN0aW5nIGRpYWdyYW0gZGlyZWN0aXZlJHthIT09bnVsbD8iIHR5cGU6IithOiIifSBiYXNlZCBvbiB0aGUgdGV4dDoke2l9YCk7bGV0IHA7Y29uc3Qgdj1bXTtmb3IoOyhwPWxXLmV4ZWMoaSkpIT09bnVsbDspaWYocC5pbmRleD09PWxXLmxhc3RJbmRleCYmbFcubGFzdEluZGV4KysscCYmIWF8fGEmJnBbMV0mJnBbMV0ubWF0Y2goYSl8fGEmJnBbMl0mJnBbMl0ubWF0Y2goYSkpe2NvbnN0IG09cFsxXT9wWzFdOnBbMl0sYj1wWzNdP3BbM10udHJpbSgpOnBbNF0/SlNPTi5wYXJzZShwWzRdLnRyaW0oKSk6bnVsbDt2LnB1c2goe3R5cGU6bSxhcmdzOmJ9KX1yZXR1cm4gdi5sZW5ndGg9PT0wJiZ2LnB1c2goe3R5cGU6aSxhcmdzOm51bGx9KSx2Lmxlbmd0aD09PTE/dlswXTp2fWNhdGNoKGYpe3JldHVybiBXdC5lcnJvcihgRVJST1I6ICR7Zi5tZXNzYWdlfSAtIFVuYWJsZSB0byBwYXJzZSBkaXJlY3RpdmUKICAgICAgJHthIT09bnVsbD8iIHR5cGU6IithOiIifSBiYXNlZCBvbiB0aGUgdGV4dDoke2l9YCkse3R5cGU6bnVsbCxhcmdzOm51bGx9fX0sTENlPWZ1bmN0aW9uKGksYSl7Zm9yKGNvbnN0W2YscF1vZiBhLmVudHJpZXMoKSlpZihwLm1hdGNoKGkpKXJldHVybiBmO3JldHVybi0xfTtmdW5jdGlvbiBaMihpLGEpe2lmKCFpKXJldHVybiBhO2NvbnN0IGY9YGN1cnZlJHtpLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2kuc2xpY2UoMSl9YDtyZXR1cm4gQ0NlW2ZdfHxhfWZ1bmN0aW9uIE1DZShpLGEpe2NvbnN0IGY9aS50cmltKCk7aWYoZilyZXR1cm4gYS5zZWN1cml0eUxldmVsIT09Imxvb3NlIj9YeChmKTpmfWNvbnN0IERDZT0oaSwuLi5hKT0+e2NvbnN0IGY9aS5zcGxpdCgiLiIpLHA9Zi5sZW5ndGgtMSx2PWZbcF07bGV0IG09d2luZG93O2ZvcihsZXQgYj0wO2I8cDtiKyspaWYobT1tW2ZbYl1dLCFtKXJldHVybjttW3ZdKC4uLmEpfTtmdW5jdGlvbiBUVyhpLGEpe3JldHVybiBpJiZhP01hdGguc3FydChNYXRoLnBvdyhhLngtaS54LDIpK01hdGgucG93KGEueS1pLnksMikpOjB9ZnVuY3Rpb24gSUNlKGkpe2xldCBhLGY9MDtpLmZvckVhY2gobT0+e2YrPVRXKG0sYSksYT1tfSk7bGV0IHA9Zi8yLHY7cmV0dXJuIGE9dm9pZCAwLGkuZm9yRWFjaChtPT57aWYoYSYmIXYpe2NvbnN0IGI9VFcobSxhKTtpZihiPHApcC09YjtlbHNle2NvbnN0IEU9cC9iO0U8PTAmJih2PWEpLEU+PTEmJih2PXt4Om0ueCx5Om0ueX0pLEU+MCYmRTwxJiYodj17eDooMS1FKSphLngrRSptLngseTooMS1FKSphLnkrRSptLnl9KX19YT1tfSksdn1mdW5jdGlvbiBPQ2UoaSl7cmV0dXJuIGkubGVuZ3RoPT09MT9pWzBdOklDZShpKX1jb25zdCBOQ2U9KGksYSxmKT0+e2xldCBwO1d0LmluZm8oYG91ciBwb2ludHMgJHtKU09OLnN0cmluZ2lmeShhKX1gKSxhWzBdIT09ZiYmKGE9YS5yZXZlcnNlKCkpO2xldCBtPTI1LGI7cD12b2lkIDAsYS5mb3JFYWNoKFA9PntpZihwJiYhYil7Y29uc3QgRj1UVyhQLHApO2lmKEY8bSltLT1GO2Vsc2V7Y29uc3Qgaj1tL0Y7ajw9MCYmKGI9cCksaj49MSYmKGI9e3g6UC54LHk6UC55fSksaj4wJiZqPDEmJihiPXt4OigxLWopKnAueCtqKlAueCx5OigxLWopKnAueStqKlAueX0pfX1wPVB9KTtjb25zdCBFPWk/MTA6NSxDPU1hdGguYXRhbjIoYVswXS55LWIueSxhWzBdLngtYi54KSxBPXt4OjAseTowfTtyZXR1cm4gQS54PU1hdGguc2luKEMpKkUrKGFbMF0ueCtiLngpLzIsQS55PS1NYXRoLmNvcyhDKSpFKyhhWzBdLnkrYi55KS8yLEF9O2Z1bmN0aW9uIFBDZShpLGEsZil7bGV0IHA9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShmKSksdjtXdC5pbmZvKCJvdXIgcG9pbnRzIixwKSxhIT09InN0YXJ0X2xlZnQiJiZhIT09InN0YXJ0X3JpZ2h0IiYmKHA9cC5yZXZlcnNlKCkpLHAuZm9yRWFjaChGPT57dj1GfSk7bGV0IGI9MjUraSxFO3Y9dm9pZCAwLHAuZm9yRWFjaChGPT57aWYodiYmIUUpe2NvbnN0IGo9VFcoRix2KTtpZihqPGIpYi09ajtlbHNle2NvbnN0IFI9Yi9qO1I8PTAmJihFPXYpLFI+PTEmJihFPXt4OkYueCx5OkYueX0pLFI+MCYmUjwxJiYoRT17eDooMS1SKSp2LngrUipGLngseTooMS1SKSp2LnkrUipGLnl9KX19dj1GfSk7Y29uc3QgQz0xMCtpKi41LEE9TWF0aC5hdGFuMihwWzBdLnktRS55LHBbMF0ueC1FLngpLFA9e3g6MCx5OjB9O3JldHVybiBQLng9TWF0aC5zaW4oQSkqQysocFswXS54K0UueCkvMixQLnk9LU1hdGguY29zKEEpKkMrKHBbMF0ueStFLnkpLzIsYT09PSJzdGFydF9sZWZ0IiYmKFAueD1NYXRoLnNpbihBK01hdGguUEkpKkMrKHBbMF0ueCtFLngpLzIsUC55PS1NYXRoLmNvcyhBK01hdGguUEkpKkMrKHBbMF0ueStFLnkpLzIpLGE9PT0iZW5kX3JpZ2h0IiYmKFAueD1NYXRoLnNpbihBLU1hdGguUEkpKkMrKHBbMF0ueCtFLngpLzItNSxQLnk9LU1hdGguY29zKEEtTWF0aC5QSSkqQysocFswXS55K0UueSkvMi01KSxhPT09ImVuZF9sZWZ0IiYmKFAueD1NYXRoLnNpbihBKSpDKyhwWzBdLngrRS54KS8yLTUsUC55PS1NYXRoLmNvcyhBKSpDKyhwWzBdLnkrRS55KS8yLTUpLFB9ZnVuY3Rpb24gZW0oaSl7bGV0IGE9IiIsZj0iIjtmb3IoY29uc3QgcCBvZiBpKXAhPT12b2lkIDAmJihwLnN0YXJ0c1dpdGgoImNvbG9yOiIpfHxwLnN0YXJ0c1dpdGgoInRleHQtYWxpZ246Iik/Zj1mK3ArIjsiOmE9YStwKyI7Iik7cmV0dXJue3N0eWxlOmEsbGFiZWxTdHlsZTpmfX1sZXQgQkl0PTA7Y29uc3QgUkl0PSgpPT4oQkl0KyssImlkLSIrTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsMTIpKyItIitCSXQpO2Z1bmN0aW9uIEZDZShpKXtsZXQgYT0iIjtjb25zdCBmPSIwMTIzNDU2Nzg5YWJjZGVmIixwPWYubGVuZ3RoO2ZvcihsZXQgdj0wO3Y8aTt2KyspYSs9Zi5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKnApKTtyZXR1cm4gYX1jb25zdCBqSXQ9aT0+RkNlKGkubGVuZ3RoKSxCQ2U9ZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MCxmaWxsOnZvaWQgMCxhbmNob3I6InN0YXJ0IixzdHlsZToiIzY2NiIsd2lkdGg6MTAwLGhlaWdodDoxMDAsdGV4dE1hcmdpbjowLHJ4OjAscnk6MCx2YWxpZ246dm9pZCAwfX0sUkNlPWZ1bmN0aW9uKGksYSl7Y29uc3QgZj1hLnRleHQucmVwbGFjZSh1aS5saW5lQnJlYWtSZWdleCwiICIpLFsscF09ekEoYS5mb250U2l6ZSksdj1pLmFwcGVuZCgidGV4dCIpO3YuYXR0cigieCIsYS54KSx2LmF0dHIoInkiLGEueSksdi5zdHlsZSgidGV4dC1hbmNob3IiLGEuYW5jaG9yKSx2LnN0eWxlKCJmb250LWZhbWlseSIsYS5mb250RmFtaWx5KSx2LnN0eWxlKCJmb250LXNpemUiLHApLHYuc3R5bGUoImZvbnQtd2VpZ2h0IixhLmZvbnRXZWlnaHQpLHYuYXR0cigiZmlsbCIsYS5maWxsKSxhLmNsYXNzIT09dm9pZCAwJiZ2LmF0dHIoImNsYXNzIixhLmNsYXNzKTtjb25zdCBtPXYuYXBwZW5kKCJ0c3BhbiIpO3JldHVybiBtLmF0dHIoIngiLGEueCthLnRleHRNYXJnaW4qMiksbS5hdHRyKCJmaWxsIixhLmZpbGwpLG0udGV4dChmKSx2fSwkSXQ9RkEoKGksYSxmKT0+e2lmKCFpfHwoZj1PYmplY3QuYXNzaWduKHtmb250U2l6ZToxMixmb250V2VpZ2h0OjQwMCxmb250RmFtaWx5OiJBcmlhbCIsam9pbldpdGg6Ijxici8+In0sZiksdWkubGluZUJyZWFrUmVnZXgudGVzdChpKSkpcmV0dXJuIGk7Y29uc3QgcD1pLnNwbGl0KCIgIiksdj1bXTtsZXQgbT0iIjtyZXR1cm4gcC5mb3JFYWNoKChiLEUpPT57Y29uc3QgQz1oMyhgJHtifSBgLGYpLEE9aDMobSxmKTtpZihDPmEpe2NvbnN0e2h5cGhlbmF0ZWRTdHJpbmdzOmoscmVtYWluaW5nV29yZDpSfT1qQ2UoYixhLCItIixmKTt2LnB1c2gobSwuLi5qKSxtPVJ9ZWxzZSBBK0M+PWE/KHYucHVzaChtKSxtPWIpOm09W20sYl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAiKTtFKzE9PT1wLmxlbmd0aCYmdi5wdXNoKG0pfSksdi5maWx0ZXIoYj0+YiE9PSIiKS5qb2luKGYuam9pbldpdGgpfSwoaSxhLGYpPT5gJHtpfSR7YX0ke2YuZm9udFNpemV9JHtmLmZvbnRXZWlnaHR9JHtmLmZvbnRGYW1pbHl9JHtmLmpvaW5XaXRofWApLGpDZT1GQSgoaSxhLGY9Ii0iLHApPT57cD1PYmplY3QuYXNzaWduKHtmb250U2l6ZToxMixmb250V2VpZ2h0OjQwMCxmb250RmFtaWx5OiJBcmlhbCIsbWFyZ2luOjB9LHApO2NvbnN0IHY9Wy4uLmldLG09W107bGV0IGI9IiI7cmV0dXJuIHYuZm9yRWFjaCgoRSxDKT0+e2NvbnN0IEE9YCR7Yn0ke0V9YDtpZihoMyhBLHApPj1hKXtjb25zdCBGPUMrMSxqPXYubGVuZ3RoPT09RixSPWAke0F9JHtmfWA7bS5wdXNoKGo/QTpSKSxiPSIifWVsc2UgYj1BfSkse2h5cGhlbmF0ZWRTdHJpbmdzOm0scmVtYWluaW5nV29yZDpifX0sKGksYSxmPSItIixwKT0+YCR7aX0ke2F9JHtmfSR7cC5mb250U2l6ZX0ke3AuZm9udFdlaWdodH0ke3AuZm9udEZhbWlseX1gKTtmdW5jdGlvbiBlZHQoaSxhKXtyZXR1cm4gYT1PYmplY3QuYXNzaWduKHtmb250U2l6ZToxMixmb250V2VpZ2h0OjQwMCxmb250RmFtaWx5OiJBcmlhbCIsbWFyZ2luOjE1fSxhKSxuZHQoaSxhKS5oZWlnaHR9ZnVuY3Rpb24gaDMoaSxhKXtyZXR1cm4gYT1PYmplY3QuYXNzaWduKHtmb250U2l6ZToxMixmb250V2VpZ2h0OjQwMCxmb250RmFtaWx5OiJBcmlhbCJ9LGEpLG5kdChpLGEpLndpZHRofWNvbnN0IG5kdD1GQSgoaSxhKT0+e2E9T2JqZWN0LmFzc2lnbih7Zm9udFNpemU6MTIsZm9udFdlaWdodDo0MDAsZm9udEZhbWlseToiQXJpYWwifSxhKTtjb25zdHtmb250U2l6ZTpmLGZvbnRGYW1pbHk6cCxmb250V2VpZ2h0OnZ9PWE7aWYoIWkpcmV0dXJue3dpZHRoOjAsaGVpZ2h0OjB9O2NvbnN0WyxtXT16QShmKSxiPVsic2Fucy1zZXJpZiIscF0sRT1pLnNwbGl0KHVpLmxpbmVCcmVha1JlZ2V4KSxDPVtdLEE9eHIoImJvZHkiKTtpZighQS5yZW1vdmUpcmV0dXJue3dpZHRoOjAsaGVpZ2h0OjAsbGluZUhlaWdodDowfTtjb25zdCBQPUEuYXBwZW5kKCJzdmciKTtmb3IoY29uc3QgaiBvZiBiKXtsZXQgUj0wO2NvbnN0IEg9e3dpZHRoOjAsaGVpZ2h0OjAsbGluZUhlaWdodDowfTtmb3IoY29uc3QgWSBvZiBFKXtjb25zdCBydD1CQ2UoKTtydC50ZXh0PVl8fFBJdDtjb25zdCBKPVJDZShQLHJ0KS5zdHlsZSgiZm9udC1zaXplIixtKS5zdHlsZSgiZm9udC13ZWlnaHQiLHYpLnN0eWxlKCJmb250LWZhbWlseSIsaiksaXQ9KEouX2dyb3Vwc3x8SilbMF1bMF0uZ2V0QkJveCgpO2lmKGl0LndpZHRoPT09MCYmaXQuaGVpZ2h0PT09MCl0aHJvdyBuZXcgRXJyb3IoInN2ZyBlbGVtZW50IG5vdCBpbiByZW5kZXIgdHJlZSIpO0gud2lkdGg9TWF0aC5yb3VuZChNYXRoLm1heChILndpZHRoLGl0LndpZHRoKSksUj1NYXRoLnJvdW5kKGl0LmhlaWdodCksSC5oZWlnaHQrPVIsSC5saW5lSGVpZ2h0PU1hdGgucm91bmQoTWF0aC5tYXgoSC5saW5lSGVpZ2h0LFIpKX1DLnB1c2goSCl9UC5yZW1vdmUoKTtjb25zdCBGPWlzTmFOKENbMV0uaGVpZ2h0KXx8aXNOYU4oQ1sxXS53aWR0aCl8fGlzTmFOKENbMV0ubGluZUhlaWdodCl8fENbMF0uaGVpZ2h0PkNbMV0uaGVpZ2h0JiZDWzBdLndpZHRoPkNbMV0ud2lkdGgmJkNbMF0ubGluZUhlaWdodD5DWzFdLmxpbmVIZWlnaHQ/MDoxO3JldHVybiBDW0ZdfSwoaSxhKT0+YCR7aX0ke2EuZm9udFNpemV9JHthLmZvbnRXZWlnaHR9JHthLmZvbnRGYW1pbHl9YCksJENlPWNsYXNze2NvbnN0cnVjdG9yKGEsZil7dGhpcy5kZXRlcm1pbmlzdGljPWEsdGhpcy5zZWVkPWYsdGhpcy5jb3VudD1mP2YubGVuZ3RoOjB9bmV4dCgpe3JldHVybiB0aGlzLmRldGVybWluaXN0aWM/dGhpcy5jb3VudCsrOkRhdGUubm93KCl9fTtsZXQgX1c7Y29uc3QgekNlPWZ1bmN0aW9uKGkpe3JldHVybiBfVz1fV3x8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksaT1lc2NhcGUoaSkucmVwbGFjZSgvJTI2L2csIiYiKS5yZXBsYWNlKC8lMjMvZywiIyIpLnJlcGxhY2UoLyUzQi9nLCI7IiksX1cuaW5uZXJIVE1MPWksdW5lc2NhcGUoX1cudGV4dENvbnRlbnQpfSxZTj1pPT57aWYoV3QuZGVidWcoInNhbml0aXplRGlyZWN0aXZlIGNhbGxlZCB3aXRoIixpKSwhKHR5cGVvZiBpIT0ib2JqZWN0Inx8aT09bnVsbCkpe2lmKEFycmF5LmlzQXJyYXkoaSkpe2kuZm9yRWFjaChhPT5ZTihhKSk7cmV0dXJufWZvcihjb25zdCBhIG9mIE9iamVjdC5rZXlzKGkpKXtpZihXdC5kZWJ1ZygiQ2hlY2tpbmcga2V5IixhKSxhLnN0YXJ0c1dpdGgoIl9fIil8fGEuaW5jbHVkZXMoInByb3RvIil8fGEuaW5jbHVkZXMoImNvbnN0ciIpfHwhSzllLmhhcyhhKXx8aVthXT09bnVsbCl7V3QuZGVidWcoInNhbml0aXplIGRlbGV0aW5nIGtleTogIixhKSxkZWxldGUgaVthXTtjb250aW51ZX1pZih0eXBlb2YgaVthXT09Im9iamVjdCIpe1d0LmRlYnVnKCJzYW5pdGl6aW5nIG9iamVjdCIsYSksWU4oaVthXSk7Y29udGludWV9Y29uc3QgZj1bInRoZW1lQ1NTIiwiZm9udEZhbWlseSIsImFsdEZvbnRGYW1pbHkiXTtmb3IoY29uc3QgcCBvZiBmKWEuaW5jbHVkZXMocCkmJihXdC5kZWJ1Zygic2FuaXRpemluZyBjc3Mgb3B0aW9uIixhKSxpW2FdPXpJdChpW2FdKSl9aWYoaS50aGVtZVZhcmlhYmxlcylmb3IoY29uc3QgYSBvZiBPYmplY3Qua2V5cyhpLnRoZW1lVmFyaWFibGVzKSl7Y29uc3QgZj1pLnRoZW1lVmFyaWFibGVzW2FdO2YhPW51bGwmJmYubWF0Y2gmJiFmLm1hdGNoKC9eW1xkICIjJSgpLC47QS1aYS16XSskLykmJihpLnRoZW1lVmFyaWFibGVzW2FdPSIiKX1XdC5kZWJ1ZygiQWZ0ZXIgc2FuaXRpemF0aW9uIixpKX19LHpJdD1pPT57bGV0IGE9MCxmPTA7Zm9yKGNvbnN0IHAgb2YgaSl7aWYoYTxmKXJldHVybiJ7IC8qIEVSUk9SOiBVbmJhbGFuY2VkIENTUyAqLyB9IjtwPT09InsiP2ErKzpwPT09In0iJiZmKyt9cmV0dXJuIGEhPT1mPyJ7IC8qIEVSUk9SOiBVbmJhbGFuY2VkIENTUyAqLyB9IjppfTtmdW5jdGlvbiBxSXQoaSl7cmV0dXJuInN0ciJpbiBpfWNvbnN0IHFDZT0oaSxhLGYscCk9PntpZighcClyZXR1cm47Y29uc3Qgdj1pLm5vZGUoKS5nZXRCQm94KCk7aS5hcHBlbmQoInRleHQiKS50ZXh0KHApLmF0dHIoIngiLHYueCt2LndpZHRoLzIpLmF0dHIoInkiLC1mKS5hdHRyKCJjbGFzcyIsYSl9LHpBPWk9PntpZih0eXBlb2YgaT09Im51bWJlciIpcmV0dXJuW2ksaSsicHgiXTtjb25zdCBhPXBhcnNlSW50KGksMTApO3JldHVybiBOdW1iZXIuaXNOYU4oYSk/W3ZvaWQgMCx2b2lkIDBdOmk9PT1TdHJpbmcoYSk/W2EsaSsicHgiXTpbYSxpXX07ZnVuY3Rpb24gSEl0KGksYSl7cmV0dXJuIEVXKHt9LGksYSl9Y29uc3QgdG89e2Fzc2lnbldpdGhEZXB0aDpaMSx3cmFwTGFiZWw6JEl0LGNhbGN1bGF0ZVRleHRIZWlnaHQ6ZWR0LGNhbGN1bGF0ZVRleHRXaWR0aDpoMyxjYWxjdWxhdGVUZXh0RGltZW5zaW9uczpuZHQsY2xlYW5BbmRNZXJnZTpISXQsZGV0ZWN0SW5pdDpBQ2UsZGV0ZWN0RGlyZWN0aXZlOkZJdCxpc1N1YnN0cmluZ0luQXJyYXk6TENlLGludGVycG9sYXRlVG9DdXJ2ZTpaMixjYWxjTGFiZWxQb3NpdGlvbjpPQ2UsY2FsY0NhcmRpbmFsaXR5UG9zaXRpb246TkNlLGNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb246UENlLGZvcm1hdFVybDpNQ2UsZ2V0U3R5bGVzRnJvbUFycmF5OmVtLGdlbmVyYXRlSWQ6Ukl0LHJhbmRvbTpqSXQscnVuRnVuYzpEQ2UsZW50aXR5RGVjb2RlOnpDZSxpbml0SWRHZW5lcmF0b3I6JENlLHNhbml0aXplRGlyZWN0aXZlOllOLHNhbml0aXplQ3NzOnpJdCxpbnNlcnRUaXRsZTpxQ2UscGFyc2VGb250U2l6ZTp6QX07dmFyIFZJdD0iY29tbSIsR0l0PSJydWxlIixVSXQ9ImRlY2wiLEhDZT0iQGltcG9ydCIsVkNlPSJAa2V5ZnJhbWVzIixHQ2U9TWF0aC5hYnMscmR0PVN0cmluZy5mcm9tQ2hhckNvZGU7ZnVuY3Rpb24gV0l0KGkpe3JldHVybiBpLnRyaW0oKX1mdW5jdGlvbiBpZHQoaSxhLGYpe3JldHVybiBpLnJlcGxhY2UoYSxmKX1mdW5jdGlvbiBVQ2UoaSxhKXtyZXR1cm4gaS5pbmRleE9mKGEpfWZ1bmN0aW9uIFhOKGksYSl7cmV0dXJuIGkuY2hhckNvZGVBdChhKXwwfWZ1bmN0aW9uIFFOKGksYSxmKXtyZXR1cm4gaS5zbGljZShhLGYpfWZ1bmN0aW9uIGVrKGkpe3JldHVybiBpLmxlbmd0aH1mdW5jdGlvbiBLSXQoaSl7cmV0dXJuIGkubGVuZ3RofWZ1bmN0aW9uIENXKGksYSl7cmV0dXJuIGEucHVzaChpKSxpfXZhciBTVz0xLHFBPTEsWUl0PTAsSjI9MCxOZj0wLEhBPSIiO2Z1bmN0aW9uIHNkdChpLGEsZixwLHYsbSxiKXtyZXR1cm57dmFsdWU6aSxyb290OmEscGFyZW50OmYsdHlwZTpwLHByb3BzOnYsY2hpbGRyZW46bSxsaW5lOlNXLGNvbHVtbjpxQSxsZW5ndGg6YixyZXR1cm46IiJ9fWZ1bmN0aW9uIFdDZSgpe3JldHVybiBOZn1mdW5jdGlvbiBLQ2UoKXtyZXR1cm4gTmY9SjI+MD9YTihIQSwtLUoyKTowLHFBLS0sTmY9PT0xMCYmKHFBPTEsU1ctLSksTmZ9ZnVuY3Rpb24gbm0oKXtyZXR1cm4gTmY9SjI8WUl0P1hOKEhBLEoyKyspOjAscUErKyxOZj09PTEwJiYocUE9MSxTVysrKSxOZn1mdW5jdGlvbiByOSgpe3JldHVybiBYTihIQSxKMil9ZnVuY3Rpb24gQVcoKXtyZXR1cm4gSjJ9ZnVuY3Rpb24gTFcoaSxhKXtyZXR1cm4gUU4oSEEsaSxhKX1mdW5jdGlvbiBhZHQoaSl7c3dpdGNoKGkpe2Nhc2UgMDpjYXNlIDk6Y2FzZSAxMDpjYXNlIDEzOmNhc2UgMzI6cmV0dXJuIDU7Y2FzZSAzMzpjYXNlIDQzOmNhc2UgNDQ6Y2FzZSA0NzpjYXNlIDYyOmNhc2UgNjQ6Y2FzZSAxMjY6Y2FzZSA1OTpjYXNlIDEyMzpjYXNlIDEyNTpyZXR1cm4gNDtjYXNlIDU4OnJldHVybiAzO2Nhc2UgMzQ6Y2FzZSAzOTpjYXNlIDQwOmNhc2UgOTE6cmV0dXJuIDI7Y2FzZSA0MTpjYXNlIDkzOnJldHVybiAxfXJldHVybiAwfWZ1bmN0aW9uIFlDZShpKXtyZXR1cm4gU1c9cUE9MSxZSXQ9ZWsoSEE9aSksSjI9MCxbXX1mdW5jdGlvbiBYQ2UoaSl7cmV0dXJuIEhBPSIiLGl9ZnVuY3Rpb24gb2R0KGkpe3JldHVybiBXSXQoTFcoSjItMSxjZHQoaT09PTkxP2krMjppPT09NDA/aSsxOmkpKSl9ZnVuY3Rpb24gUUNlKGkpe2Zvcig7KE5mPXI5KCkpJiZOZjwzMzspbm0oKTtyZXR1cm4gYWR0KGkpPjJ8fGFkdChOZik+Mz8iIjoiICJ9ZnVuY3Rpb24gWkNlKGksYSl7Zm9yKDstLWEmJm5tKCkmJiEoTmY8NDh8fE5mPjEwMnx8TmY+NTcmJk5mPDY1fHxOZj43MCYmTmY8OTcpOyk7cmV0dXJuIExXKGksQVcoKSsoYTw2JiZyOSgpPT0zMiYmbm0oKT09MzIpKX1mdW5jdGlvbiBjZHQoaSl7Zm9yKDtubSgpOylzd2l0Y2goTmYpe2Nhc2UgaTpyZXR1cm4gSjI7Y2FzZSAzNDpjYXNlIDM5OmkhPT0zNCYmaSE9PTM5JiZjZHQoTmYpO2JyZWFrO2Nhc2UgNDA6aT09PTQxJiZjZHQoaSk7YnJlYWs7Y2FzZSA5MjpubSgpO2JyZWFrfXJldHVybiBKMn1mdW5jdGlvbiBKQ2UoaSxhKXtmb3IoO25tKCkmJmkrTmYhPT00NysxMDspaWYoaStOZj09PTQyKzQyJiZyOSgpPT09NDcpYnJlYWs7cmV0dXJuIi8qIitMVyhhLEoyLTEpKyIqIityZHQoaT09PTQ3P2k6bm0oKSl9ZnVuY3Rpb24gdFNlKGkpe2Zvcig7IWFkdChyOSgpKTspbm0oKTtyZXR1cm4gTFcoaSxKMil9ZnVuY3Rpb24gZVNlKGkpe3JldHVybiBYQ2UoTVcoIiIsbnVsbCxudWxsLG51bGwsWyIiXSxpPVlDZShpKSwwLFswXSxpKSl9ZnVuY3Rpb24gTVcoaSxhLGYscCx2LG0sYixFLEMpe2Zvcih2YXIgQT0wLFA9MCxGPWIsaj0wLFI9MCxIPTAsWT0xLHJ0PTEsSj0xLGl0PTAsZnQ9IiIsVHQ9dixrdD1tLG10PXAsY3Q9ZnQ7cnQ7KXN3aXRjaChIPWl0LGl0PW5tKCkpe2Nhc2UgNDA6aWYoSCE9MTA4JiZYTihjdCxGLTEpPT01OCl7VUNlKGN0Kz1pZHQob2R0KGl0KSwiJiIsIiZcZiIpLCImXGYiKSE9LTEmJihKPS0xKTticmVha31jYXNlIDM0OmNhc2UgMzk6Y2FzZSA5MTpjdCs9b2R0KGl0KTticmVhaztjYXNlIDk6Y2FzZSAxMDpjYXNlIDEzOmNhc2UgMzI6Y3QrPVFDZShIKTticmVhaztjYXNlIDkyOmN0Kz1aQ2UoQVcoKS0xLDcpO2NvbnRpbnVlO2Nhc2UgNDc6c3dpdGNoKHI5KCkpe2Nhc2UgNDI6Y2FzZSA0NzpDVyhuU2UoSkNlKG5tKCksQVcoKSksYSxmKSxDKTticmVhaztkZWZhdWx0OmN0Kz0iLyJ9YnJlYWs7Y2FzZSAxMjMqWTpFW0ErK109ZWsoY3QpKko7Y2FzZSAxMjUqWTpjYXNlIDU5OmNhc2UgMDpzd2l0Y2goaXQpe2Nhc2UgMDpjYXNlIDEyNTpydD0wO2Nhc2UgNTkrUDpSPjAmJmVrKGN0KS1GJiZDVyhSPjMyP1FJdChjdCsiOyIscCxmLEYtMSk6UUl0KGlkdChjdCwiICIsIiIpKyI7IixwLGYsRi0yKSxDKTticmVhaztjYXNlIDU5OmN0Kz0iOyI7ZGVmYXVsdDppZihDVyhtdD1YSXQoY3QsYSxmLEEsUCx2LEUsZnQsVHQ9W10sa3Q9W10sRiksbSksaXQ9PT0xMjMpaWYoUD09PTApTVcoY3QsYSxtdCxtdCxUdCxtLEYsRSxrdCk7ZWxzZSBzd2l0Y2goaj09PTk5JiZYTihjdCwzKT09PTExMD8xMDA6ail7Y2FzZSAxMDA6Y2FzZSAxMDk6Y2FzZSAxMTU6TVcoaSxtdCxtdCxwJiZDVyhYSXQoaSxtdCxtdCwwLDAsdixFLGZ0LHYsVHQ9W10sRiksa3QpLHYsa3QsRixFLHA/VHQ6a3QpO2JyZWFrO2RlZmF1bHQ6TVcoY3QsbXQsbXQsbXQsWyIiXSxrdCwwLEUsa3QpfX1BPVA9Uj0wLFk9Sj0xLGZ0PWN0PSIiLEY9YjticmVhaztjYXNlIDU4OkY9MStlayhjdCksUj1IO2RlZmF1bHQ6aWYoWTwxKXtpZihpdD09MTIzKS0tWTtlbHNlIGlmKGl0PT0xMjUmJlkrKz09MCYmS0NlKCk9PTEyNSljb250aW51ZX1zd2l0Y2goY3QrPXJkdChpdCksaXQqWSl7Y2FzZSAzODpKPVA+MD8xOihjdCs9IlxmIiwtMSk7YnJlYWs7Y2FzZSA0NDpFW0ErK109KGVrKGN0KS0xKSpKLEo9MTticmVhaztjYXNlIDY0OnI5KCk9PT00NSYmKGN0Kz1vZHQobm0oKSkpLGo9cjkoKSxQPUY9ZWsoZnQ9Y3QrPXRTZShBVygpKSksaXQrKzticmVhaztjYXNlIDQ1Okg9PT00NSYmZWsoY3QpPT0yJiYoWT0wKX19cmV0dXJuIG19ZnVuY3Rpb24gWEl0KGksYSxmLHAsdixtLGIsRSxDLEEsUCl7Zm9yKHZhciBGPXYtMSxqPXY9PT0wP206WyIiXSxSPUtJdChqKSxIPTAsWT0wLHJ0PTA7SDxwOysrSClmb3IodmFyIEo9MCxpdD1RTihpLEYrMSxGPUdDZShZPWJbSF0pKSxmdD1pO0o8UjsrK0opKGZ0PVdJdChZPjA/altKXSsiICIraXQ6aWR0KGl0LC8mXGYvZyxqW0pdKSkpJiYoQ1tydCsrXT1mdCk7cmV0dXJuIHNkdChpLGEsZix2PT09MD9HSXQ6RSxDLEEsUCl9ZnVuY3Rpb24gblNlKGksYSxmKXtyZXR1cm4gc2R0KGksYSxmLFZJdCxyZHQoV0NlKCkpLFFOKGksMiwtMiksMCl9ZnVuY3Rpb24gUUl0KGksYSxmLHApe3JldHVybiBzZHQoaSxhLGYsVUl0LFFOKGksMCxwKSxRTihpLHArMSwtMSkscCl9ZnVuY3Rpb24gdWR0KGksYSl7Zm9yKHZhciBmPSIiLHA9S0l0KGkpLHY9MDt2PHA7disrKWYrPWEoaVt2XSx2LGksYSl8fCIiO3JldHVybiBmfWZ1bmN0aW9uIHJTZShpLGEsZixwKXtzd2l0Y2goaS50eXBlKXtjYXNlIEhDZTpjYXNlIFVJdDpyZXR1cm4gaS5yZXR1cm49aS5yZXR1cm58fGkudmFsdWU7Y2FzZSBWSXQ6cmV0dXJuIiI7Y2FzZSBWQ2U6cmV0dXJuIGkucmV0dXJuPWkudmFsdWUrInsiK3VkdChpLmNoaWxkcmVuLHApKyJ9IjtjYXNlIEdJdDppLnZhbHVlPWkucHJvcHMuam9pbigiLCIpfXJldHVybiBlayhmPXVkdChpLmNoaWxkcmVuLHApKT9pLnJldHVybj1pLnZhbHVlKyJ7IitmKyJ9IjoiIn1jb25zdCBaSXQ9IjEwLjQuMCIsaTk9T2JqZWN0LmZyZWV6ZShJZik7bGV0IGxwPVoxKHt9LGk5KSxKSXQsVkE9W10sWk49WjEoe30saTkpO2NvbnN0IERXPShpLGEpPT57bGV0IGY9WjEoe30saSkscD17fTtmb3IoY29uc3QgdiBvZiBhKW5PdCh2KSxwPVoxKHAsdik7aWYoZj1aMShmLHApLHAudGhlbWUmJnAudGhlbWUgaW4gbTUpe2NvbnN0IHY9WjEoe30sSkl0KSxtPVoxKHYudGhlbWVWYXJpYWJsZXN8fHt9LHAudGhlbWVWYXJpYWJsZXMpO2YudGhlbWUmJmYudGhlbWUgaW4gbTUmJihmLnRoZW1lVmFyaWFibGVzPW01W2YudGhlbWVdLmdldFRoZW1lVmFyaWFibGVzKG0pKX1yZXR1cm4gWk49ZixpT3QoWk4pLFpOfSxpU2U9aT0+KGxwPVoxKHt9LGk5KSxscD1aMShscCxpKSxpLnRoZW1lJiZtNVtpLnRoZW1lXSYmKGxwLnRoZW1lVmFyaWFibGVzPW01W2kudGhlbWVdLmdldFRoZW1lVmFyaWFibGVzKGkudGhlbWVWYXJpYWJsZXMpKSxEVyhscCxWQSksbHApLHNTZT1pPT57Skl0PVoxKHt9LGkpfSxhU2U9aT0+KGxwPVoxKGxwLGkpLERXKGxwLFZBKSxscCksdE90PSgpPT5aMSh7fSxscCksZU90PWk9PihpT3QoaSksWjEoWk4saSksRGUoKSksRGU9KCk9PloxKHt9LFpOKSxuT3Q9aT0+e2kmJihbInNlY3VyZSIsLi4ubHAuc2VjdXJlPz9bXV0uZm9yRWFjaChhPT57T2JqZWN0Lmhhc093bihpLGEpJiYoV3QuZGVidWcoYERlbmllZCBhdHRlbXB0IHRvIG1vZGlmeSBhIHNlY3VyZSBrZXkgJHthfWAsaVthXSksZGVsZXRlIGlbYV0pfSksT2JqZWN0LmtleXMoaSkuZm9yRWFjaChhPT57YS5zdGFydHNXaXRoKCJfXyIpJiZkZWxldGUgaVthXX0pLE9iamVjdC5rZXlzKGkpLmZvckVhY2goYT0+e3R5cGVvZiBpW2FdPT0ic3RyaW5nIiYmKGlbYV0uaW5jbHVkZXMoIjwiKXx8aVthXS5pbmNsdWRlcygiPiIpfHxpW2FdLmluY2x1ZGVzKCJ1cmwoZGF0YToiKSkmJmRlbGV0ZSBpW2FdLHR5cGVvZiBpW2FdPT0ib2JqZWN0IiYmbk90KGlbYV0pfSkpfSxJVz1pPT57WU4oaSksaS5mb250RmFtaWx5JiYoIWkudGhlbWVWYXJpYWJsZXN8fCFpLnRoZW1lVmFyaWFibGVzLmZvbnRGYW1pbHkpJiYoaS50aGVtZVZhcmlhYmxlcz17Zm9udEZhbWlseTppLmZvbnRGYW1pbHl9KSxWQS5wdXNoKGkpLERXKGxwLFZBKX0sT1c9KGk9bHApPT57VkE9W10sRFcoaSxWQSl9LG9TZT17TEFaWV9MT0FEX0RFUFJFQ0FURUQ6IlRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgbGF6eUxvYWRlZERpYWdyYW1zIGFuZCBsb2FkRXh0ZXJuYWxEaWFncmFtc0F0U3RhcnR1cCBhcmUgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSByZWdpc3RlckV4dGVybmFsRGlhZ3JhbXMgaW5zdGVhZC4ifSxyT3Q9e30sY1NlPWk9PntyT3RbaV18fChXdC53YXJuKG9TZVtpXSksck90W2ldPSEwKX0saU90PWk9PntpJiYoaS5sYXp5TG9hZGVkRGlhZ3JhbXN8fGkubG9hZEV4dGVybmFsRGlhZ3JhbXNBdFN0YXJ0dXApJiZjU2UoIkxBWllfTE9BRF9ERVBSRUNBVEVEIil9LHNPdD0iYzQiLHVTZT17aWQ6c090LGRldGVjdG9yOmk9Pi9eXHMqQzRDb250ZXh0fEM0Q29udGFpbmVyfEM0Q29tcG9uZW50fEM0RHluYW1pY3xDNERlcGxveW1lbnQvLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PkVEZSk7cmV0dXJue2lkOnNPdCxkaWFncmFtOml9fX0sYU90PSJmbG93Y2hhcnQiLGxTZT17aWQ6YU90LGRldGVjdG9yOihpLGEpPT57dmFyIGYscDtyZXR1cm4oKGY9YT09bnVsbD92b2lkIDA6YS5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDpmLmRlZmF1bHRSZW5kZXJlcik9PT0iZGFncmUtd3JhcHBlciJ8fCgocD1hPT1udWxsP3ZvaWQgMDphLmZsb3djaGFydCk9PW51bGw/dm9pZCAwOnAuZGVmYXVsdFJlbmRlcmVyKT09PSJlbGsiPyExOi9eXHMqZ3JhcGgvLnRlc3QoaSl9LGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5BJGUpO3JldHVybntpZDphT3QsZGlhZ3JhbTppfX19LG9PdD0iZmxvd2NoYXJ0LXYyIixoU2U9e2lkOm9PdCxkZXRlY3RvcjooaSxhKT0+e3ZhciBmLHAsdjtyZXR1cm4oKGY9YT09bnVsbD92b2lkIDA6YS5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDpmLmRlZmF1bHRSZW5kZXJlcik9PT0iZGFncmUtZDMifHwoKHA9YT09bnVsbD92b2lkIDA6YS5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDpwLmRlZmF1bHRSZW5kZXJlcik9PT0iZWxrIj8hMTovXlxzKmdyYXBoLy50ZXN0KGkpJiYoKHY9YT09bnVsbD92b2lkIDA6YS5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDp2LmRlZmF1bHRSZW5kZXJlcik9PT0iZGFncmUtd3JhcHBlciI/ITA6L15ccypmbG93Y2hhcnQvLnRlc3QoaSl9LGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5MJGUpO3JldHVybntpZDpvT3QsZGlhZ3JhbTppfX19LGNPdD0iZXIiLGZTZT17aWQ6Y090LGRldGVjdG9yOmk9Pi9eXHMqZXJEaWFncmFtLy50ZXN0KGkpLGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5uemUpO3JldHVybntpZDpjT3QsZGlhZ3JhbTppfX19LHVPdD0iZ2l0R3JhcGgiLGRTZT17aWQ6dU90LGRldGVjdG9yOmk9Pi9eXHMqZ2l0R3JhcGgvLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PkF6ZSk7cmV0dXJue2lkOnVPdCxkaWFncmFtOml9fX0sbE90PSJnYW50dCIsZ1NlPXtpZDpsT3QsZGV0ZWN0b3I6aT0+L15ccypnYW50dC8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+d3FlKTtyZXR1cm57aWQ6bE90LGRpYWdyYW06aX19fSxoT3Q9ImluZm8iLHBTZT17aWQ6aE90LGRldGVjdG9yOmk9Pi9eXHMqaW5mby8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+eXFlKTtyZXR1cm57aWQ6aE90LGRpYWdyYW06aX19fSxmT3Q9InBpZSIsYlNlPXtpZDpmT3QsZGV0ZWN0b3I6aT0+L15ccypwaWUvLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PkNxZSk7cmV0dXJue2lkOmZPdCxkaWFncmFtOml9fX0sZE90PSJxdWFkcmFudENoYXJ0Iix2U2U9e2lkOmRPdCxkZXRlY3RvcjppPT4vXlxzKnF1YWRyYW50Q2hhcnQvLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PnFxZSk7cmV0dXJue2lkOmRPdCxkaWFncmFtOml9fX0sZ090PSJyZXF1aXJlbWVudCIsd1NlPXtpZDpnT3QsZGV0ZWN0b3I6aT0+L15ccypyZXF1aXJlbWVudChEaWFncmFtKT8vLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PlpxZSk7cmV0dXJue2lkOmdPdCxkaWFncmFtOml9fX0scE90PSJzZXF1ZW5jZSIsbVNlPXtpZDpwT3QsZGV0ZWN0b3I6aT0+L15ccypzZXF1ZW5jZURpYWdyYW0vLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PnNWZSk7cmV0dXJue2lkOnBPdCxkaWFncmFtOml9fX0sYk90PSJjbGFzcyIseVNlPXtpZDpiT3QsZGV0ZWN0b3I6KGksYSk9Pnt2YXIgZjtyZXR1cm4oKGY9YT09bnVsbD92b2lkIDA6YS5jbGFzcyk9PW51bGw/dm9pZCAwOmYuZGVmYXVsdFJlbmRlcmVyKT09PSJkYWdyZS13cmFwcGVyIj8hMTovXlxzKmNsYXNzRGlhZ3JhbS8udGVzdChpKX0sbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PlNWZSk7cmV0dXJue2lkOmJPdCxkaWFncmFtOml9fX0sdk90PSJjbGFzc0RpYWdyYW0iLHhTZT17aWQ6dk90LGRldGVjdG9yOihpLGEpPT57dmFyIGY7cmV0dXJuL15ccypjbGFzc0RpYWdyYW0vLnRlc3QoaSkmJigoZj1hPT1udWxsP3ZvaWQgMDphLmNsYXNzKT09bnVsbD92b2lkIDA6Zi5kZWZhdWx0UmVuZGVyZXIpPT09ImRhZ3JlLXdyYXBwZXIiPyEwOi9eXHMqY2xhc3NEaWFncmFtLXYyLy50ZXN0KGkpfSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+T1ZlKTtyZXR1cm57aWQ6dk90LGRpYWdyYW06aX19fSx3T3Q9InN0YXRlIixrU2U9e2lkOndPdCxkZXRlY3RvcjooaSxhKT0+e3ZhciBmO3JldHVybigoZj1hPT1udWxsP3ZvaWQgMDphLnN0YXRlKT09bnVsbD92b2lkIDA6Zi5kZWZhdWx0UmVuZGVyZXIpPT09ImRhZ3JlLXdyYXBwZXIiPyExOi9eXHMqc3RhdGVEaWFncmFtLy50ZXN0KGkpfSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+eEdlKTtyZXR1cm57aWQ6d090LGRpYWdyYW06aX19fSxtT3Q9InN0YXRlRGlhZ3JhbSIsRVNlPXtpZDptT3QsZGV0ZWN0b3I6KGksYSk9Pnt2YXIgZjtyZXR1cm4hISgvXlxzKnN0YXRlRGlhZ3JhbS12Mi8udGVzdChpKXx8L15ccypzdGF0ZURpYWdyYW0vLnRlc3QoaSkmJigoZj1hPT1udWxsP3ZvaWQgMDphLnN0YXRlKT09bnVsbD92b2lkIDA6Zi5kZWZhdWx0UmVuZGVyZXIpPT09ImRhZ3JlLXdyYXBwZXIiKX0sbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PiRHZSk7cmV0dXJue2lkOm1PdCxkaWFncmFtOml9fX0seU90PSJqb3VybmV5IixUU2U9e2lkOnlPdCxkZXRlY3RvcjppPT4vXlxzKmpvdXJuZXkvLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PmFVZSk7cmV0dXJue2lkOnlPdCxkaWFncmFtOml9fX0sbGR0PWk9Pnt2YXIgdjtjb25zdHtzZWN1cml0eUxldmVsOmF9PURlKCk7bGV0IGY9eHIoImJvZHkiKTtpZihhPT09InNhbmRib3giKXtjb25zdCBiPSgodj14cihgI2kke2l9YCkubm9kZSgpKT09bnVsbD92b2lkIDA6di5jb250ZW50RG9jdW1lbnQpPz9kb2N1bWVudDtmPXhyKGIuYm9keSl9cmV0dXJuIGYuc2VsZWN0KGAjJHtpfWApfSxfU2U9ZnVuY3Rpb24oaSxhKXtmb3IobGV0IGYgb2YgYSlpLmF0dHIoZlswXSxmWzFdKX0sQ1NlPWZ1bmN0aW9uKGksYSxmKXtsZXQgcD1uZXcgTWFwO3JldHVybiBmPyhwLnNldCgid2lkdGgiLCIxMDAlIikscC5zZXQoInN0eWxlIixgbWF4LXdpZHRoOiAke2F9cHg7YCkpOihwLnNldCgiaGVpZ2h0IixpKSxwLnNldCgid2lkdGgiLGEpKSxwfSxvZz1mdW5jdGlvbihpLGEsZixwKXtjb25zdCB2PUNTZShhLGYscCk7X1NlKGksdil9LHM5PWZ1bmN0aW9uKGksYSxmLHApe2NvbnN0IHY9YS5ub2RlKCkuZ2V0QkJveCgpLG09di53aWR0aCxiPXYuaGVpZ2h0O1d0LmluZm8oYFNWRyBib3VuZHM6ICR7bX14JHtifWAsdik7bGV0IEU9MCxDPTA7V3QuaW5mbyhgR3JhcGggYm91bmRzOiAke0V9eCR7Q31gLGkpLEU9bStmKjIsQz1iK2YqMixXdC5pbmZvKGBDYWxjdWxhdGVkIGJvdW5kczogJHtFfXgke0N9YCksb2coYSxDLEUscCk7Y29uc3QgQT1gJHt2LngtZn0gJHt2LnktZn0gJHt2LndpZHRoKzIqZn0gJHt2LmhlaWdodCsyKmZ9YDthLmF0dHIoInZpZXdCb3giLEEpfSx4T3Q9e2RyYXc6KGksYSxmKT0+e1d0LmRlYnVnKGByZW5lcmluZyBzdmcgZm9yIHN5bnRheCBlcnJvcgpgKTtjb25zdCBwPWxkdChhKTtwLmF0dHIoInZpZXdCb3giLCIwIDAgMjQxMiA1MTIiKSxvZyhwLDEwMCw1MTIsITApO2NvbnN0IHY9cC5hcHBlbmQoImciKTt2LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtNDExLjMxMywxMjMuMzEzYzYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNXMtMTYuMzc1LTYuMjUtMjIuNjI1LDBsLTMyLDMyLTkuMzc1LDkuMzc1LTIwLjY4OC0yMC42ODhjLTEyLjQ4NC0xMi41LTMyLjc2Ni0xMi41LTQ1LjI1LDBsLTE2LDE2Yy0xLjI2MSwxLjI2MS0yLjMwNCwyLjY0OC0zLjMxLDQuMDUxLTIxLjczOS04LjU2MS00NS4zMjQtMTMuNDI2LTcwLjA2NS0xMy40MjYtMTA1Ljg2NywwLTE5Miw4Ni4xMzMtMTkyLDE5MnM4Ni4xMzMsMTkyIDE5MiwxOTIgMTkyLTg2LjEzMyAxOTItMTkyYzAtMjQuNzQxLTQuODY0LTQ4LjMyNy0xMy40MjYtNzAuMDY1IDEuNDAyLTEuMDA3IDIuNzktMi4wNDkgNC4wNTEtMy4zMWwxNi0xNmMxMi41LTEyLjQ5MiAxMi41LTMyLjc1OCAwLTQ1LjI1bC0yMC42ODgtMjAuNjg4IDkuMzc1LTkuMzc1IDMyLjAwMS0zMS45OTl6bS0yMTkuMzEzLDEwMC42ODdjLTUyLjkzOCwwLTk2LDQzLjA2My05Niw5NiAwLDguODM2LTcuMTY0LDE2LTE2LDE2cy0xNi03LjE2NC0xNi0xNmMwLTcwLjU3OCA1Ny40MjItMTI4IDEyOC0xMjggOC44MzYsMCAxNiw3LjE2NCAxNiwxNnMtNy4xNjQsMTYtMTYsMTZ6Iiksdi5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQ1OS4wMiwxNDguOThjLTYuMjUtNi4yNS0xNi4zNzUtNi4yNS0yMi42MjUsMHMtNi4yNSwxNi4zNzUgMCwyMi42MjVsMTYsMTZjMy4xMjUsMy4xMjUgNy4yMTksNC42ODggMTEuMzEzLDQuNjg4IDQuMDk0LDAgOC4xODgtMS41NjMgMTEuMzEzLTQuNjg4IDYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNWwtMTYuMDAxLTE2eiIpLHYuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm0zNDAuMzk1LDc1LjYwNWMzLjEyNSwzLjEyNSA3LjIxOSw0LjY4OCAxMS4zMTMsNC42ODggNC4wOTQsMCA4LjE4OC0xLjU2MyAxMS4zMTMtNC42ODggNi4yNS02LjI1IDYuMjUtMTYuMzc1IDAtMjIuNjI1bC0xNi0xNmMtNi4yNS02LjI1LTE2LjM3NS02LjI1LTIyLjYyNSwwcy02LjI1LDE2LjM3NSAwLDIyLjYyNWwxNS45OTksMTZ6Iiksdi5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQwMCw2NGM4Ljg0NCwwIDE2LTcuMTY0IDE2LTE2di0zMmMwLTguODM2LTcuMTU2LTE2LTE2LTE2LTguODQ0LDAtMTYsNy4xNjQtMTYsMTZ2MzJjMCw4LjgzNiA3LjE1NiwxNiAxNiwxNnoiKSx2LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtNDk2LDk2LjU4NmgtMzJjLTguODQ0LDAtMTYsNy4xNjQtMTYsMTYgMCw4LjgzNiA3LjE1NiwxNiAxNiwxNmgzMmM4Ljg0NCwwIDE2LTcuMTY0IDE2LTE2IDAtOC44MzYtNy4xNTYtMTYtMTYtMTZ6Iiksdi5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQzNi45OCw3NS42MDVjMy4xMjUsMy4xMjUgNy4yMTksNC42ODggMTEuMzEzLDQuNjg4IDQuMDk0LDAgOC4xODgtMS41NjMgMTEuMzEzLTQuNjg4bDMyLTMyYzYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNXMtMTYuMzc1LTYuMjUtMjIuNjI1LDBsLTMyLDMyYy02LjI1MSw2LjI1LTYuMjUxLDE2LjM3NS0wLjAwMSwyMi42MjV6Iiksdi5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImVycm9yLXRleHQiKS5hdHRyKCJ4IiwxNDQwKS5hdHRyKCJ5IiwyNTApLmF0dHIoImZvbnQtc2l6ZSIsIjE1MHB4Iikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dCgiU3ludGF4IGVycm9yIGluIHRleHQiKSx2LmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItdGV4dCIpLmF0dHIoIngiLDEyNTApLmF0dHIoInkiLDQwMCkuYXR0cigiZm9udC1zaXplIiwiMTAwcHgiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KGBtZXJtYWlkIHZlcnNpb24gJHtmfWApfX0sU1NlPXhPdCxBU2U9e2RiOnt9LHJlbmRlcmVyOnhPdCxwYXJzZXI6e3BhcnNlcjp7eXk6e319LHBhcnNlOigpPT57fX19LGtPdD0iZmxvd2NoYXJ0LWVsayIsTFNlPXtpZDprT3QsZGV0ZWN0b3I6KGksYSk9Pnt2YXIgZjtyZXR1cm4hISgvXlxzKmZsb3djaGFydC1lbGsvLnRlc3QoaSl8fC9eXHMqZmxvd2NoYXJ0fGdyYXBoLy50ZXN0KGkpJiYoKGY9YT09bnVsbD92b2lkIDA6YS5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDpmLmRlZmF1bHRSZW5kZXJlcik9PT0iZWxrIil9LGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5rVWUpO3JldHVybntpZDprT3QsZGlhZ3JhbTppfX19LEVPdD0idGltZWxpbmUiLE1TZT17aWQ6RU90LGRldGVjdG9yOmk9Pi9eXHMqdGltZWxpbmUvLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PnpVZSk7cmV0dXJue2lkOkVPdCxkaWFncmFtOml9fX0sVE90PSJtaW5kbWFwIixEU2U9e2lkOlRPdCxkZXRlY3RvcjppPT4vXlxzKm1pbmRtYXAvLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PnZXZSk7cmV0dXJue2lkOlRPdCxkaWFncmFtOml9fX0sX090PSJzYW5rZXkiLElTZT17aWQ6X090LGRldGVjdG9yOmk9Pi9eXHMqc2Fua2V5LWJldGEvLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PldXZSk7cmV0dXJue2lkOl9PdCxkaWFncmFtOml9fX0sTlc9e30sT1NlPShpLGEsZik9PntsZXQgcD0iIjtyZXR1cm4gaSBpbiBOVyYmTldbaV0/cD1OV1tpXShmKTpXdC53YXJuKGBObyB0aGVtZSBmb3VuZCBmb3IgJHtpfWApLGAgJiB7CiAgICBmb250LWZhbWlseTogJHtmLmZvbnRGYW1pbHl9OwogICAgZm9udC1zaXplOiAke2YuZm9udFNpemV9OwogICAgZmlsbDogJHtmLnRleHRDb2xvcn0KICB9CgogIC8qIENsYXNzZXMgY29tbW9uIGZvciBtdWx0aXBsZSBkaWFncmFtcyAqLwoKICAmIC5lcnJvci1pY29uIHsKICAgIGZpbGw6ICR7Zi5lcnJvckJrZ0NvbG9yfTsKICB9CiAgJiAuZXJyb3ItdGV4dCB7CiAgICBmaWxsOiAke2YuZXJyb3JUZXh0Q29sb3J9OwogICAgc3Ryb2tlOiAke2YuZXJyb3JUZXh0Q29sb3J9OwogIH0KCiAgJiAuZWRnZS10aGlja25lc3Mtbm9ybWFsIHsKICAgIHN0cm9rZS13aWR0aDogMnB4OwogIH0KICAmIC5lZGdlLXRoaWNrbmVzcy10aGljayB7CiAgICBzdHJva2Utd2lkdGg6IDMuNXB4CiAgfQogICYgLmVkZ2UtcGF0dGVybi1zb2xpZCB7CiAgICBzdHJva2UtZGFzaGFycmF5OiAwOwogIH0KCiAgJiAuZWRnZS1wYXR0ZXJuLWRhc2hlZHsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDM7CiAgfQogIC5lZGdlLXBhdHRlcm4tZG90dGVkIHsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDI7CiAgfQoKICAmIC5tYXJrZXIgewogICAgZmlsbDogJHtmLmxpbmVDb2xvcn07CiAgICBzdHJva2U6ICR7Zi5saW5lQ29sb3J9OwogIH0KICAmIC5tYXJrZXIuY3Jvc3MgewogICAgc3Ryb2tlOiAke2YubGluZUNvbG9yfTsKICB9CgogICYgc3ZnIHsKICAgIGZvbnQtZmFtaWx5OiAke2YuZm9udEZhbWlseX07CiAgICBmb250LXNpemU6ICR7Zi5mb250U2l6ZX07CiAgfQoKICAke3B9CgogICR7YX0KYH0sTlNlPShpLGEpPT57YSE9PXZvaWQgMCYmKE5XW2ldPWEpfSxQU2U9T1NlO2xldCBoZHQ9IiIsUFc9IiIsZmR0PSIiO2NvbnN0IGRkdD1pPT52MChpLERlKCkpLGNnPWZ1bmN0aW9uKCl7aGR0PSIiLGZkdD0iIixQVz0iIn0sbTA9ZnVuY3Rpb24oaSl7aGR0PWRkdChpKS5yZXBsYWNlKC9eXHMrL2csIiIpfSx1Zz1mdW5jdGlvbigpe3JldHVybiBoZHR8fFBXfSxsZz1mdW5jdGlvbihpKXtmZHQ9ZGR0KGkpLnJlcGxhY2UoL1xuXHMrL2csYApgKX0saGc9ZnVuY3Rpb24oKXtyZXR1cm4gZmR0fSxOYj1mdW5jdGlvbihpKXtQVz1kZHQoaSl9LGhwPWZ1bmN0aW9uKCl7cmV0dXJuIFBXfSxDT3Q9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGNsZWFyOmNnLGRlZmF1bHQ6e2dldEFjY1RpdGxlOnVnLHNldEFjY1RpdGxlOm0wLGdldERpYWdyYW1UaXRsZTpocCxzZXREaWFncmFtVGl0bGU6TmIsZ2V0QWNjRGVzY3JpcHRpb246aGcsc2V0QWNjRGVzY3JpcHRpb246bGcsY2xlYXI6Y2d9LGdldEFjY0Rlc2NyaXB0aW9uOmhnLGdldEFjY1RpdGxlOnVnLGdldERpYWdyYW1UaXRsZTpocCxzZXRBY2NEZXNjcmlwdGlvbjpsZyxzZXRBY2NUaXRsZTptMCxzZXREaWFncmFtVGl0bGU6TmJ9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7bGV0IGE5PXt9O2NvbnN0IEZXPWZ1bmN0aW9uKGksYSxmLHApe1d0LmRlYnVnKCJwYXJzZURpcmVjdGl2ZSBpcyBiZWluZyBjYWxsZWQiLGEsZixwKTt0cnl7aWYoYSE9PXZvaWQgMClzd2l0Y2goYT1hLnRyaW0oKSxmKXtjYXNlIm9wZW5fZGlyZWN0aXZlIjphOT17fTticmVhaztjYXNlInR5cGVfZGlyZWN0aXZlIjppZighYTkpdGhyb3cgbmV3IEVycm9yKCJjdXJyZW50RGlyZWN0aXZlIGlzIHVuZGVmaW5lZCIpO2E5LnR5cGU9YS50b0xvd2VyQ2FzZSgpO2JyZWFrO2Nhc2UiYXJnX2RpcmVjdGl2ZSI6aWYoIWE5KXRocm93IG5ldyBFcnJvcigiY3VycmVudERpcmVjdGl2ZSBpcyB1bmRlZmluZWQiKTthOS5hcmdzPUpTT04ucGFyc2UoYSk7YnJlYWs7Y2FzZSJjbG9zZV9kaXJlY3RpdmUiOkZTZShpLGE5LHApLGE5PXZvaWQgMDticmVha319Y2F0Y2godil7V3QuZXJyb3IoYEVycm9yIHdoaWxlIHJlbmRlcmluZyBzZXF1ZW5jZURpYWdyYW0gZGlyZWN0aXZlOiAke2F9IGppc29uIGNvbnRleHQ6ICR7Zn1gKSxXdC5lcnJvcih2Lm1lc3NhZ2UpfX0sRlNlPWZ1bmN0aW9uKGksYSxmKXtzd2l0Y2goV3QuaW5mbyhgRGlyZWN0aXZlIHR5cGU9JHthLnR5cGV9IHdpdGggYXJnczpgLGEuYXJncyksYS50eXBlKXtjYXNlImluaXQiOmNhc2UiaW5pdGlhbGl6ZSI6e1siY29uZmlnIl0uZm9yRWFjaChwPT57YS5hcmdzW3BdIT09dm9pZCAwJiYoZj09PSJmbG93Y2hhcnQtdjIiJiYoZj0iZmxvd2NoYXJ0IiksYS5hcmdzW2ZdPWEuYXJnc1twXSxkZWxldGUgYS5hcmdzW3BdKX0pLElXKGEuYXJncyk7YnJlYWt9Y2FzZSJ3cmFwIjpjYXNlIm5vd3JhcCI6aSYmaS5zZXRXcmFwJiZpLnNldFdyYXAoYS50eXBlPT09IndyYXAiKTticmVhaztjYXNlInRoZW1lQ3NzIjpXdC53YXJuKCJ0aGVtZUNzcyBlbmNvdW50ZXJlZCIpO2JyZWFrO2RlZmF1bHQ6V3Qud2FybihgVW5oYW5kbGVkIGRpcmVjdGl2ZTogc291cmNlOiAnJSV7JHthLnR5cGV9OiAke0pTT04uc3RyaW5naWZ5KGEuYXJncz9hLmFyZ3M6e30pfX0lJWAsYSk7YnJlYWt9fSxCU2U9V3QsUlNlPXpmdCxKTj1EZSxqU2U9aT0+djAoaSxKTigpKSxTT3Q9czksJFNlPSgpPT5DT3QselNlPShpLGEsZixwKT0+RlcoaSxhLGYscCksQlc9e30sUlc9KGksYSxmKT0+e2lmKEJXW2ldKXRocm93IG5ldyBFcnJvcihgRGlhZ3JhbSAke2l9IGFscmVhZHkgcmVnaXN0ZXJlZC5gKTtCV1tpXT1hLGYmJnNJdChpLGYpLE5TZShpLGEuc3R5bGVzKSxhLmluamVjdFV0aWxzJiZhLmluamVjdFV0aWxzKEJTZSxSU2UsSk4salNlLFNPdCwkU2UoKSx6U2UpfSxnZHQ9aT0+e2lmKGkgaW4gQlcpcmV0dXJuIEJXW2ldO3Rocm93IG5ldyBxU2UoaSl9O2NsYXNzIHFTZSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGEpe3N1cGVyKGBEaWFncmFtICR7YX0gbm90IGZvdW5kLmApfX1sZXQgQU90PSExO2NvbnN0IHBkdD0oKT0+e0FPdHx8KEFPdD0hMCxSVygiZXJyb3IiLEFTZSxpPT5pLnRvTG93ZXJDYXNlKCkudHJpbSgpPT09ImVycm9yIiksUlcoIi0tLSIse2RiOntjbGVhcjooKT0+e319LHN0eWxlczp7fSxyZW5kZXJlcjp7fSxwYXJzZXI6e3BhcnNlcjp7eXk6e319LHBhcnNlOigpPT57dGhyb3cgbmV3IEVycm9yKCJEaWFncmFtcyBiZWdpbm5pbmcgd2l0aCAtLS0gYXJlIG5vdCB2YWxpZC4gSWYgeW91IHdlcmUgdHJ5aW5nIHRvIHVzZSBhIFlBTUwgZnJvbnQtbWF0dGVyLCBwbGVhc2UgZW5zdXJlIHRoYXQgeW91J3ZlIGNvcnJlY3RseSBvcGVuZWQgYW5kIGNsb3NlZCB0aGUgWUFNTCBmcm9udC1tYXR0ZXIgd2l0aCB1bi1pbmRlbnRlZCBgLS0tYCBibG9ja3MiKX19LGluaXQ6KCk9Pm51bGx9LGk9PmkudG9Mb3dlckNhc2UoKS50cmltU3RhcnQoKS5zdGFydHNXaXRoKCItLS0iKSksaUl0KHVTZSx4U2UseVNlLGZTZSxnU2UscFNlLGJTZSx3U2UsbVNlLExTZSxoU2UsbFNlLERTZSxNU2UsZFNlLEVTZSxrU2UsVFNlLHZTZSxJU2UpKX07LyohIGpzLXlhbWwgNC4xLjAgaHR0cHM6Ly9naXRodWIuY29tL25vZGVjYS9qcy15YW1sIEBsaWNlbnNlIE1JVCAqL2Z1bmN0aW9uIExPdChpKXtyZXR1cm4gdHlwZW9mIGk+InUifHxpPT09bnVsbH1mdW5jdGlvbiBIU2UoaSl7cmV0dXJuIHR5cGVvZiBpPT0ib2JqZWN0IiYmaSE9PW51bGx9ZnVuY3Rpb24gVlNlKGkpe3JldHVybiBBcnJheS5pc0FycmF5KGkpP2k6TE90KGkpP1tdOltpXX1mdW5jdGlvbiBHU2UoaSxhKXt2YXIgZixwLHYsbTtpZihhKWZvcihtPU9iamVjdC5rZXlzKGEpLGY9MCxwPW0ubGVuZ3RoO2Y8cDtmKz0xKXY9bVtmXSxpW3ZdPWFbdl07cmV0dXJuIGl9ZnVuY3Rpb24gVVNlKGksYSl7dmFyIGY9IiIscDtmb3IocD0wO3A8YTtwKz0xKWYrPWk7cmV0dXJuIGZ9ZnVuY3Rpb24gV1NlKGkpe3JldHVybiBpPT09MCYmTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZPT09MS9pfXZhciBLU2U9TE90LFlTZT1IU2UsWFNlPVZTZSxRU2U9VVNlLFpTZT1XU2UsSlNlPUdTZSxmZz17aXNOb3RoaW5nOktTZSxpc09iamVjdDpZU2UsdG9BcnJheTpYU2UscmVwZWF0OlFTZSxpc05lZ2F0aXZlWmVybzpaU2UsZXh0ZW5kOkpTZX07ZnVuY3Rpb24gTU90KGksYSl7dmFyIGY9IiIscD1pLnJlYXNvbnx8Iih1bmtub3duIHJlYXNvbikiO3JldHVybiBpLm1hcms/KGkubWFyay5uYW1lJiYoZis9J2luICInK2kubWFyay5uYW1lKyciICcpLGYrPSIoIisoaS5tYXJrLmxpbmUrMSkrIjoiKyhpLm1hcmsuY29sdW1uKzEpKyIpIiwhYSYmaS5tYXJrLnNuaXBwZXQmJihmKz1gCgpgK2kubWFyay5zbmlwcGV0KSxwKyIgIitmKTpwfWZ1bmN0aW9uIHRQKGksYSl7RXJyb3IuY2FsbCh0aGlzKSx0aGlzLm5hbWU9IllBTUxFeGNlcHRpb24iLHRoaXMucmVhc29uPWksdGhpcy5tYXJrPWEsdGhpcy5tZXNzYWdlPU1PdCh0aGlzLCExKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9bmV3IEVycm9yKCkuc3RhY2t8fCIifXRQLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksdFAucHJvdG90eXBlLmNvbnN0cnVjdG9yPXRQLHRQLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5uYW1lKyI6ICIrTU90KHRoaXMsYSl9O3ZhciBrNT10UDtmdW5jdGlvbiBiZHQoaSxhLGYscCx2KXt2YXIgbT0iIixiPSIiLEU9TWF0aC5mbG9vcih2LzIpLTE7cmV0dXJuIHAtYT5FJiYobT0iIC4uLiAiLGE9cC1FK20ubGVuZ3RoKSxmLXA+RSYmKGI9IiAuLi4iLGY9cCtFLWIubGVuZ3RoKSx7c3RyOm0raS5zbGljZShhLGYpLnJlcGxhY2UoL1x0L2csIuKGkiIpK2IscG9zOnAtYSttLmxlbmd0aH19ZnVuY3Rpb24gdmR0KGksYSl7cmV0dXJuIGZnLnJlcGVhdCgiICIsYS1pLmxlbmd0aCkraX1mdW5jdGlvbiB0QWUoaSxhKXtpZihhPU9iamVjdC5jcmVhdGUoYXx8bnVsbCksIWkuYnVmZmVyKXJldHVybiBudWxsO2EubWF4TGVuZ3RofHwoYS5tYXhMZW5ndGg9NzkpLHR5cGVvZiBhLmluZGVudCE9Im51bWJlciImJihhLmluZGVudD0xKSx0eXBlb2YgYS5saW5lc0JlZm9yZSE9Im51bWJlciImJihhLmxpbmVzQmVmb3JlPTMpLHR5cGVvZiBhLmxpbmVzQWZ0ZXIhPSJudW1iZXIiJiYoYS5saW5lc0FmdGVyPTIpO2Zvcih2YXIgZj0vXHI/XG58XHJ8XDAvZyxwPVswXSx2PVtdLG0sYj0tMTttPWYuZXhlYyhpLmJ1ZmZlcik7KXYucHVzaChtLmluZGV4KSxwLnB1c2gobS5pbmRleCttWzBdLmxlbmd0aCksaS5wb3NpdGlvbjw9bS5pbmRleCYmYjwwJiYoYj1wLmxlbmd0aC0yKTtiPDAmJihiPXAubGVuZ3RoLTEpO3ZhciBFPSIiLEMsQSxQPU1hdGgubWluKGkubGluZSthLmxpbmVzQWZ0ZXIsdi5sZW5ndGgpLnRvU3RyaW5nKCkubGVuZ3RoLEY9YS5tYXhMZW5ndGgtKGEuaW5kZW50K1ArMyk7Zm9yKEM9MTtDPD1hLmxpbmVzQmVmb3JlJiYhKGItQzwwKTtDKyspQT1iZHQoaS5idWZmZXIscFtiLUNdLHZbYi1DXSxpLnBvc2l0aW9uLShwW2JdLXBbYi1DXSksRiksRT1mZy5yZXBlYXQoIiAiLGEuaW5kZW50KSt2ZHQoKGkubGluZS1DKzEpLnRvU3RyaW5nKCksUCkrIiB8ICIrQS5zdHIrYApgK0U7Zm9yKEE9YmR0KGkuYnVmZmVyLHBbYl0sdltiXSxpLnBvc2l0aW9uLEYpLEUrPWZnLnJlcGVhdCgiICIsYS5pbmRlbnQpK3ZkdCgoaS5saW5lKzEpLnRvU3RyaW5nKCksUCkrIiB8ICIrQS5zdHIrYApgLEUrPWZnLnJlcGVhdCgiLSIsYS5pbmRlbnQrUCszK0EucG9zKStgXgpgLEM9MTtDPD1hLmxpbmVzQWZ0ZXImJiEoYitDPj12Lmxlbmd0aCk7QysrKUE9YmR0KGkuYnVmZmVyLHBbYitDXSx2W2IrQ10saS5wb3NpdGlvbi0ocFtiXS1wW2IrQ10pLEYpLEUrPWZnLnJlcGVhdCgiICIsYS5pbmRlbnQpK3ZkdCgoaS5saW5lK0MrMSkudG9TdHJpbmcoKSxQKSsiIHwgIitBLnN0citgCmA7cmV0dXJuIEUucmVwbGFjZSgvXG4kLywiIil9dmFyIGVBZT10QWUsbkFlPVsia2luZCIsIm11bHRpIiwicmVzb2x2ZSIsImNvbnN0cnVjdCIsImluc3RhbmNlT2YiLCJwcmVkaWNhdGUiLCJyZXByZXNlbnQiLCJyZXByZXNlbnROYW1lIiwiZGVmYXVsdFN0eWxlIiwic3R5bGVBbGlhc2VzIl0sckFlPVsic2NhbGFyIiwic2VxdWVuY2UiLCJtYXBwaW5nIl07ZnVuY3Rpb24gaUFlKGkpe3ZhciBhPXt9O3JldHVybiBpIT09bnVsbCYmT2JqZWN0LmtleXMoaSkuZm9yRWFjaChmdW5jdGlvbihmKXtpW2ZdLmZvckVhY2goZnVuY3Rpb24ocCl7YVtTdHJpbmcocCldPWZ9KX0pLGF9ZnVuY3Rpb24gc0FlKGksYSl7aWYoYT1hfHx7fSxPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe2lmKG5BZS5pbmRleE9mKGYpPT09LTEpdGhyb3cgbmV3IGs1KCdVbmtub3duIG9wdGlvbiAiJytmKyciIGlzIG1ldCBpbiBkZWZpbml0aW9uIG9mICInK2krJyIgWUFNTCB0eXBlLicpfSksdGhpcy5vcHRpb25zPWEsdGhpcy50YWc9aSx0aGlzLmtpbmQ9YS5raW5kfHxudWxsLHRoaXMucmVzb2x2ZT1hLnJlc29sdmV8fGZ1bmN0aW9uKCl7cmV0dXJuITB9LHRoaXMuY29uc3RydWN0PWEuY29uc3RydWN0fHxmdW5jdGlvbihmKXtyZXR1cm4gZn0sdGhpcy5pbnN0YW5jZU9mPWEuaW5zdGFuY2VPZnx8bnVsbCx0aGlzLnByZWRpY2F0ZT1hLnByZWRpY2F0ZXx8bnVsbCx0aGlzLnJlcHJlc2VudD1hLnJlcHJlc2VudHx8bnVsbCx0aGlzLnJlcHJlc2VudE5hbWU9YS5yZXByZXNlbnROYW1lfHxudWxsLHRoaXMuZGVmYXVsdFN0eWxlPWEuZGVmYXVsdFN0eWxlfHxudWxsLHRoaXMubXVsdGk9YS5tdWx0aXx8ITEsdGhpcy5zdHlsZUFsaWFzZXM9aUFlKGEuc3R5bGVBbGlhc2VzfHxudWxsKSxyQWUuaW5kZXhPZih0aGlzLmtpbmQpPT09LTEpdGhyb3cgbmV3IGs1KCdVbmtub3duIGtpbmQgIicrdGhpcy5raW5kKyciIGlzIHNwZWNpZmllZCBmb3IgIicraSsnIiBZQU1MIHR5cGUuJyl9dmFyIHkwPXNBZTtmdW5jdGlvbiBET3QoaSxhKXt2YXIgZj1bXTtyZXR1cm4gaVthXS5mb3JFYWNoKGZ1bmN0aW9uKHApe3ZhciB2PWYubGVuZ3RoO2YuZm9yRWFjaChmdW5jdGlvbihtLGIpe20udGFnPT09cC50YWcmJm0ua2luZD09PXAua2luZCYmbS5tdWx0aT09PXAubXVsdGkmJih2PWIpfSksZlt2XT1wfSksZn1mdW5jdGlvbiBhQWUoKXt2YXIgaT17c2NhbGFyOnt9LHNlcXVlbmNlOnt9LG1hcHBpbmc6e30sZmFsbGJhY2s6e30sbXVsdGk6e3NjYWxhcjpbXSxzZXF1ZW5jZTpbXSxtYXBwaW5nOltdLGZhbGxiYWNrOltdfX0sYSxmO2Z1bmN0aW9uIHAodil7di5tdWx0aT8oaS5tdWx0aVt2LmtpbmRdLnB1c2godiksaS5tdWx0aS5mYWxsYmFjay5wdXNoKHYpKTppW3Yua2luZF1bdi50YWddPWkuZmFsbGJhY2tbdi50YWddPXZ9Zm9yKGE9MCxmPWFyZ3VtZW50cy5sZW5ndGg7YTxmO2ErPTEpYXJndW1lbnRzW2FdLmZvckVhY2gocCk7cmV0dXJuIGl9ZnVuY3Rpb24gd2R0KGkpe3JldHVybiB0aGlzLmV4dGVuZChpKX13ZHQucHJvdG90eXBlLmV4dGVuZD1mdW5jdGlvbihhKXt2YXIgZj1bXSxwPVtdO2lmKGEgaW5zdGFuY2VvZiB5MClwLnB1c2goYSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGEpKXA9cC5jb25jYXQoYSk7ZWxzZSBpZihhJiYoQXJyYXkuaXNBcnJheShhLmltcGxpY2l0KXx8QXJyYXkuaXNBcnJheShhLmV4cGxpY2l0KSkpYS5pbXBsaWNpdCYmKGY9Zi5jb25jYXQoYS5pbXBsaWNpdCkpLGEuZXhwbGljaXQmJihwPXAuY29uY2F0KGEuZXhwbGljaXQpKTtlbHNlIHRocm93IG5ldyBrNSgiU2NoZW1hLmV4dGVuZCBhcmd1bWVudCBzaG91bGQgYmUgYSBUeXBlLCBbIFR5cGUgXSwgb3IgYSBzY2hlbWEgZGVmaW5pdGlvbiAoeyBpbXBsaWNpdDogWy4uLl0sIGV4cGxpY2l0OiBbLi4uXSB9KSIpO2YuZm9yRWFjaChmdW5jdGlvbihtKXtpZighKG0gaW5zdGFuY2VvZiB5MCkpdGhyb3cgbmV3IGs1KCJTcGVjaWZpZWQgbGlzdCBvZiBZQU1MIHR5cGVzIChvciBhIHNpbmdsZSBUeXBlIG9iamVjdCkgY29udGFpbnMgYSBub24tVHlwZSBvYmplY3QuIik7aWYobS5sb2FkS2luZCYmbS5sb2FkS2luZCE9PSJzY2FsYXIiKXRocm93IG5ldyBrNSgiVGhlcmUgaXMgYSBub24tc2NhbGFyIHR5cGUgaW4gdGhlIGltcGxpY2l0IGxpc3Qgb2YgYSBzY2hlbWEuIEltcGxpY2l0IHJlc29sdmluZyBvZiBzdWNoIHR5cGVzIGlzIG5vdCBzdXBwb3J0ZWQuIik7aWYobS5tdWx0aSl0aHJvdyBuZXcgazUoIlRoZXJlIGlzIGEgbXVsdGkgdHlwZSBpbiB0aGUgaW1wbGljaXQgbGlzdCBvZiBhIHNjaGVtYS4gTXVsdGkgdGFncyBjYW4gb25seSBiZSBsaXN0ZWQgYXMgZXhwbGljaXQuIil9KSxwLmZvckVhY2goZnVuY3Rpb24obSl7aWYoIShtIGluc3RhbmNlb2YgeTApKXRocm93IG5ldyBrNSgiU3BlY2lmaWVkIGxpc3Qgb2YgWUFNTCB0eXBlcyAob3IgYSBzaW5nbGUgVHlwZSBvYmplY3QpIGNvbnRhaW5zIGEgbm9uLVR5cGUgb2JqZWN0LiIpfSk7dmFyIHY9T2JqZWN0LmNyZWF0ZSh3ZHQucHJvdG90eXBlKTtyZXR1cm4gdi5pbXBsaWNpdD0odGhpcy5pbXBsaWNpdHx8W10pLmNvbmNhdChmKSx2LmV4cGxpY2l0PSh0aGlzLmV4cGxpY2l0fHxbXSkuY29uY2F0KHApLHYuY29tcGlsZWRJbXBsaWNpdD1ET3QodiwiaW1wbGljaXQiKSx2LmNvbXBpbGVkRXhwbGljaXQ9RE90KHYsImV4cGxpY2l0Iiksdi5jb21waWxlZFR5cGVNYXA9YUFlKHYuY29tcGlsZWRJbXBsaWNpdCx2LmNvbXBpbGVkRXhwbGljaXQpLHZ9O3ZhciBvQWU9d2R0LGNBZT1uZXcgeTAoInRhZzp5YW1sLm9yZywyMDAyOnN0ciIse2tpbmQ6InNjYWxhciIsY29uc3RydWN0OmZ1bmN0aW9uKGkpe3JldHVybiBpIT09bnVsbD9pOiIifX0pLHVBZT1uZXcgeTAoInRhZzp5YW1sLm9yZywyMDAyOnNlcSIse2tpbmQ6InNlcXVlbmNlIixjb25zdHJ1Y3Q6ZnVuY3Rpb24oaSl7cmV0dXJuIGkhPT1udWxsP2k6W119fSksbEFlPW5ldyB5MCgidGFnOnlhbWwub3JnLDIwMDI6bWFwIix7a2luZDoibWFwcGluZyIsY29uc3RydWN0OmZ1bmN0aW9uKGkpe3JldHVybiBpIT09bnVsbD9pOnt9fX0pLGhBZT1uZXcgb0FlKHtleHBsaWNpdDpbY0FlLHVBZSxsQWVdfSk7ZnVuY3Rpb24gZkFlKGkpe2lmKGk9PT1udWxsKXJldHVybiEwO3ZhciBhPWkubGVuZ3RoO3JldHVybiBhPT09MSYmaT09PSJ+Inx8YT09PTQmJihpPT09Im51bGwifHxpPT09Ik51bGwifHxpPT09Ik5VTEwiKX1mdW5jdGlvbiBkQWUoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBnQWUoaSl7cmV0dXJuIGk9PT1udWxsfXZhciBwQWU9bmV3IHkwKCJ0YWc6eWFtbC5vcmcsMjAwMjpudWxsIix7a2luZDoic2NhbGFyIixyZXNvbHZlOmZBZSxjb25zdHJ1Y3Q6ZEFlLHByZWRpY2F0ZTpnQWUscmVwcmVzZW50OntjYW5vbmljYWw6ZnVuY3Rpb24oKXtyZXR1cm4ifiJ9LGxvd2VyY2FzZTpmdW5jdGlvbigpe3JldHVybiJudWxsIn0sdXBwZXJjYXNlOmZ1bmN0aW9uKCl7cmV0dXJuIk5VTEwifSxjYW1lbGNhc2U6ZnVuY3Rpb24oKXtyZXR1cm4iTnVsbCJ9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIiJ9fSxkZWZhdWx0U3R5bGU6Imxvd2VyY2FzZSJ9KTtmdW5jdGlvbiBiQWUoaSl7aWYoaT09PW51bGwpcmV0dXJuITE7dmFyIGE9aS5sZW5ndGg7cmV0dXJuIGE9PT00JiYoaT09PSJ0cnVlInx8aT09PSJUcnVlInx8aT09PSJUUlVFIil8fGE9PT01JiYoaT09PSJmYWxzZSJ8fGk9PT0iRmFsc2UifHxpPT09IkZBTFNFIil9ZnVuY3Rpb24gdkFlKGkpe3JldHVybiBpPT09InRydWUifHxpPT09IlRydWUifHxpPT09IlRSVUUifWZ1bmN0aW9uIHdBZShpKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGkpPT09IltvYmplY3QgQm9vbGVhbl0ifXZhciBtQWU9bmV3IHkwKCJ0YWc6eWFtbC5vcmcsMjAwMjpib29sIix7a2luZDoic2NhbGFyIixyZXNvbHZlOmJBZSxjb25zdHJ1Y3Q6dkFlLHByZWRpY2F0ZTp3QWUscmVwcmVzZW50Ontsb3dlcmNhc2U6ZnVuY3Rpb24oaSl7cmV0dXJuIGk/InRydWUiOiJmYWxzZSJ9LHVwcGVyY2FzZTpmdW5jdGlvbihpKXtyZXR1cm4gaT8iVFJVRSI6IkZBTFNFIn0sY2FtZWxjYXNlOmZ1bmN0aW9uKGkpe3JldHVybiBpPyJUcnVlIjoiRmFsc2UifX0sZGVmYXVsdFN0eWxlOiJsb3dlcmNhc2UifSk7ZnVuY3Rpb24geUFlKGkpe3JldHVybiA0ODw9aSYmaTw9NTd8fDY1PD1pJiZpPD03MHx8OTc8PWkmJmk8PTEwMn1mdW5jdGlvbiB4QWUoaSl7cmV0dXJuIDQ4PD1pJiZpPD01NX1mdW5jdGlvbiBrQWUoaSl7cmV0dXJuIDQ4PD1pJiZpPD01N31mdW5jdGlvbiBFQWUoaSl7aWYoaT09PW51bGwpcmV0dXJuITE7dmFyIGE9aS5sZW5ndGgsZj0wLHA9ITEsdjtpZighYSlyZXR1cm4hMTtpZih2PWlbZl0sKHY9PT0iLSJ8fHY9PT0iKyIpJiYodj1pWysrZl0pLHY9PT0iMCIpe2lmKGYrMT09PWEpcmV0dXJuITA7aWYodj1pWysrZl0sdj09PSJiIil7Zm9yKGYrKztmPGE7ZisrKWlmKHY9aVtmXSx2IT09Il8iKXtpZih2IT09IjAiJiZ2IT09IjEiKXJldHVybiExO3A9ITB9cmV0dXJuIHAmJnYhPT0iXyJ9aWYodj09PSJ4Iil7Zm9yKGYrKztmPGE7ZisrKWlmKHY9aVtmXSx2IT09Il8iKXtpZigheUFlKGkuY2hhckNvZGVBdChmKSkpcmV0dXJuITE7cD0hMH1yZXR1cm4gcCYmdiE9PSJfIn1pZih2PT09Im8iKXtmb3IoZisrO2Y8YTtmKyspaWYodj1pW2ZdLHYhPT0iXyIpe2lmKCF4QWUoaS5jaGFyQ29kZUF0KGYpKSlyZXR1cm4hMTtwPSEwfXJldHVybiBwJiZ2IT09Il8ifX1pZih2PT09Il8iKXJldHVybiExO2Zvcig7ZjxhO2YrKylpZih2PWlbZl0sdiE9PSJfIil7aWYoIWtBZShpLmNoYXJDb2RlQXQoZikpKXJldHVybiExO3A9ITB9cmV0dXJuISghcHx8dj09PSJfIil9ZnVuY3Rpb24gVEFlKGkpe3ZhciBhPWksZj0xLHA7aWYoYS5pbmRleE9mKCJfIikhPT0tMSYmKGE9YS5yZXBsYWNlKC9fL2csIiIpKSxwPWFbMF0sKHA9PT0iLSJ8fHA9PT0iKyIpJiYocD09PSItIiYmKGY9LTEpLGE9YS5zbGljZSgxKSxwPWFbMF0pLGE9PT0iMCIpcmV0dXJuIDA7aWYocD09PSIwIil7aWYoYVsxXT09PSJiIilyZXR1cm4gZipwYXJzZUludChhLnNsaWNlKDIpLDIpO2lmKGFbMV09PT0ieCIpcmV0dXJuIGYqcGFyc2VJbnQoYS5zbGljZSgyKSwxNik7aWYoYVsxXT09PSJvIilyZXR1cm4gZipwYXJzZUludChhLnNsaWNlKDIpLDgpfXJldHVybiBmKnBhcnNlSW50KGEsMTApfWZ1bmN0aW9uIF9BZShpKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGkpPT09IltvYmplY3QgTnVtYmVyXSImJmklMT09PTAmJiFmZy5pc05lZ2F0aXZlWmVybyhpKX12YXIgQ0FlPW5ldyB5MCgidGFnOnlhbWwub3JnLDIwMDI6aW50Iix7a2luZDoic2NhbGFyIixyZXNvbHZlOkVBZSxjb25zdHJ1Y3Q6VEFlLHByZWRpY2F0ZTpfQWUscmVwcmVzZW50OntiaW5hcnk6ZnVuY3Rpb24oaSl7cmV0dXJuIGk+PTA/IjBiIitpLnRvU3RyaW5nKDIpOiItMGIiK2kudG9TdHJpbmcoMikuc2xpY2UoMSl9LG9jdGFsOmZ1bmN0aW9uKGkpe3JldHVybiBpPj0wPyIwbyIraS50b1N0cmluZyg4KToiLTBvIitpLnRvU3RyaW5nKDgpLnNsaWNlKDEpfSxkZWNpbWFsOmZ1bmN0aW9uKGkpe3JldHVybiBpLnRvU3RyaW5nKDEwKX0saGV4YWRlY2ltYWw6ZnVuY3Rpb24oaSl7cmV0dXJuIGk+PTA/IjB4IitpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpOiItMHgiK2kudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkuc2xpY2UoMSl9fSxkZWZhdWx0U3R5bGU6ImRlY2ltYWwiLHN0eWxlQWxpYXNlczp7YmluYXJ5OlsyLCJiaW4iXSxvY3RhbDpbOCwib2N0Il0sZGVjaW1hbDpbMTAsImRlYyJdLGhleGFkZWNpbWFsOlsxNiwiaGV4Il19fSksU0FlPW5ldyBSZWdFeHAoIl4oPzpbLStdPyg/OlswLTldWzAtOV9dKikoPzpcXC5bMC05X10qKT8oPzpbZUVdWy0rXT9bMC05XSspP3xcXC5bMC05X10rKD86W2VFXVstK10/WzAtOV0rKT98Wy0rXT9cXC4oPzppbmZ8SW5mfElORil8XFwuKD86bmFufE5hTnxOQU4pKSQiKTtmdW5jdGlvbiBBQWUoaSl7cmV0dXJuIShpPT09bnVsbHx8IVNBZS50ZXN0KGkpfHxpW2kubGVuZ3RoLTFdPT09Il8iKX1mdW5jdGlvbiBMQWUoaSl7dmFyIGEsZjtyZXR1cm4gYT1pLnJlcGxhY2UoL18vZywiIikudG9Mb3dlckNhc2UoKSxmPWFbMF09PT0iLSI/LTE6MSwiKy0iLmluZGV4T2YoYVswXSk+PTAmJihhPWEuc2xpY2UoMSkpLGE9PT0iLmluZiI/Zj09PTE/TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOk51bWJlci5ORUdBVElWRV9JTkZJTklUWTphPT09Ii5uYW4iP05hTjpmKnBhcnNlRmxvYXQoYSwxMCl9dmFyIE1BZT0vXlstK10/WzAtOV0rZS87ZnVuY3Rpb24gREFlKGksYSl7dmFyIGY7aWYoaXNOYU4oaSkpc3dpdGNoKGEpe2Nhc2UibG93ZXJjYXNlIjpyZXR1cm4iLm5hbiI7Y2FzZSJ1cHBlcmNhc2UiOnJldHVybiIuTkFOIjtjYXNlImNhbWVsY2FzZSI6cmV0dXJuIi5OYU4ifWVsc2UgaWYoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZPT09aSlzd2l0Y2goYSl7Y2FzZSJsb3dlcmNhc2UiOnJldHVybiIuaW5mIjtjYXNlInVwcGVyY2FzZSI6cmV0dXJuIi5JTkYiO2Nhc2UiY2FtZWxjYXNlIjpyZXR1cm4iLkluZiJ9ZWxzZSBpZihOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk9PT1pKXN3aXRjaChhKXtjYXNlImxvd2VyY2FzZSI6cmV0dXJuIi0uaW5mIjtjYXNlInVwcGVyY2FzZSI6cmV0dXJuIi0uSU5GIjtjYXNlImNhbWVsY2FzZSI6cmV0dXJuIi0uSW5mIn1lbHNlIGlmKGZnLmlzTmVnYXRpdmVaZXJvKGkpKXJldHVybiItMC4wIjtyZXR1cm4gZj1pLnRvU3RyaW5nKDEwKSxNQWUudGVzdChmKT9mLnJlcGxhY2UoImUiLCIuZSIpOmZ9ZnVuY3Rpb24gSUFlKGkpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaSk9PT0iW29iamVjdCBOdW1iZXJdIiYmKGklMSE9PTB8fGZnLmlzTmVnYXRpdmVaZXJvKGkpKX12YXIgT0FlPW5ldyB5MCgidGFnOnlhbWwub3JnLDIwMDI6ZmxvYXQiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6QUFlLGNvbnN0cnVjdDpMQWUscHJlZGljYXRlOklBZSxyZXByZXNlbnQ6REFlLGRlZmF1bHRTdHlsZToibG93ZXJjYXNlIn0pLElPdD1oQWUuZXh0ZW5kKHtpbXBsaWNpdDpbcEFlLG1BZSxDQWUsT0FlXX0pLE5BZT1JT3QsT090PW5ldyBSZWdFeHAoIl4oWzAtOV1bMC05XVswLTldWzAtOV0pLShbMC05XVswLTldKS0oWzAtOV1bMC05XSkkIiksTk90PW5ldyBSZWdFeHAoIl4oWzAtOV1bMC05XVswLTldWzAtOV0pLShbMC05XVswLTldPyktKFswLTldWzAtOV0/KSg/OltUdF18WyBcXHRdKykoWzAtOV1bMC05XT8pOihbMC05XVswLTldKTooWzAtOV1bMC05XSkoPzpcXC4oWzAtOV0qKSk/KD86WyBcXHRdKihafChbLStdKShbMC05XVswLTldPykoPzo6KFswLTldWzAtOV0pKT8pKT8kIik7ZnVuY3Rpb24gUEFlKGkpe3JldHVybiBpPT09bnVsbD8hMTpPT3QuZXhlYyhpKSE9PW51bGx8fE5PdC5leGVjKGkpIT09bnVsbH1mdW5jdGlvbiBGQWUoaSl7dmFyIGEsZixwLHYsbSxiLEUsQz0wLEE9bnVsbCxQLEYsajtpZihhPU9PdC5leGVjKGkpLGE9PT1udWxsJiYoYT1OT3QuZXhlYyhpKSksYT09PW51bGwpdGhyb3cgbmV3IEVycm9yKCJEYXRlIHJlc29sdmUgZXJyb3IiKTtpZihmPSthWzFdLHA9K2FbMl0tMSx2PSthWzNdLCFhWzRdKXJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyhmLHAsdikpO2lmKG09K2FbNF0sYj0rYVs1XSxFPSthWzZdLGFbN10pe2ZvcihDPWFbN10uc2xpY2UoMCwzKTtDLmxlbmd0aDwzOylDKz0iMCI7Qz0rQ31yZXR1cm4gYVs5XSYmKFA9K2FbMTBdLEY9KyhhWzExXXx8MCksQT0oUCo2MCtGKSo2ZTQsYVs5XT09PSItIiYmKEE9LUEpKSxqPW5ldyBEYXRlKERhdGUuVVRDKGYscCx2LG0sYixFLEMpKSxBJiZqLnNldFRpbWUoai5nZXRUaW1lKCktQSksan1mdW5jdGlvbiBCQWUoaSl7cmV0dXJuIGkudG9JU09TdHJpbmcoKX12YXIgUkFlPW5ldyB5MCgidGFnOnlhbWwub3JnLDIwMDI6dGltZXN0YW1wIix7a2luZDoic2NhbGFyIixyZXNvbHZlOlBBZSxjb25zdHJ1Y3Q6RkFlLGluc3RhbmNlT2Y6RGF0ZSxyZXByZXNlbnQ6QkFlfSk7ZnVuY3Rpb24gakFlKGkpe3JldHVybiBpPT09Ijw8Inx8aT09PW51bGx9dmFyICRBZT1uZXcgeTAoInRhZzp5YW1sLm9yZywyMDAyOm1lcmdlIix7a2luZDoic2NhbGFyIixyZXNvbHZlOmpBZX0pLG1kdD1gQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0KXHJgO2Z1bmN0aW9uIHpBZShpKXtpZihpPT09bnVsbClyZXR1cm4hMTt2YXIgYSxmLHA9MCx2PWkubGVuZ3RoLG09bWR0O2ZvcihmPTA7Zjx2O2YrKylpZihhPW0uaW5kZXhPZihpLmNoYXJBdChmKSksIShhPjY0KSl7aWYoYTwwKXJldHVybiExO3ArPTZ9cmV0dXJuIHAlOD09PTB9ZnVuY3Rpb24gcUFlKGkpe3ZhciBhLGYscD1pLnJlcGxhY2UoL1tcclxuPV0vZywiIiksdj1wLmxlbmd0aCxtPW1kdCxiPTAsRT1bXTtmb3IoYT0wO2E8djthKyspYSU0PT09MCYmYSYmKEUucHVzaChiPj4xNiYyNTUpLEUucHVzaChiPj44JjI1NSksRS5wdXNoKGImMjU1KSksYj1iPDw2fG0uaW5kZXhPZihwLmNoYXJBdChhKSk7cmV0dXJuIGY9diU0KjYsZj09PTA/KEUucHVzaChiPj4xNiYyNTUpLEUucHVzaChiPj44JjI1NSksRS5wdXNoKGImMjU1KSk6Zj09PTE4PyhFLnB1c2goYj4+MTAmMjU1KSxFLnB1c2goYj4+MiYyNTUpKTpmPT09MTImJkUucHVzaChiPj40JjI1NSksbmV3IFVpbnQ4QXJyYXkoRSl9ZnVuY3Rpb24gSEFlKGkpe3ZhciBhPSIiLGY9MCxwLHYsbT1pLmxlbmd0aCxiPW1kdDtmb3IocD0wO3A8bTtwKyspcCUzPT09MCYmcCYmKGErPWJbZj4+MTgmNjNdLGErPWJbZj4+MTImNjNdLGErPWJbZj4+NiY2M10sYSs9YltmJjYzXSksZj0oZjw8OCkraVtwXTtyZXR1cm4gdj1tJTMsdj09PTA/KGErPWJbZj4+MTgmNjNdLGErPWJbZj4+MTImNjNdLGErPWJbZj4+NiY2M10sYSs9YltmJjYzXSk6dj09PTI/KGErPWJbZj4+MTAmNjNdLGErPWJbZj4+NCY2M10sYSs9YltmPDwyJjYzXSxhKz1iWzY0XSk6dj09PTEmJihhKz1iW2Y+PjImNjNdLGErPWJbZjw8NCY2M10sYSs9Yls2NF0sYSs9Yls2NF0pLGF9ZnVuY3Rpb24gVkFlKGkpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaSk9PT0iW29iamVjdCBVaW50OEFycmF5XSJ9dmFyIEdBZT1uZXcgeTAoInRhZzp5YW1sLm9yZywyMDAyOmJpbmFyeSIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTp6QWUsY29uc3RydWN0OnFBZSxwcmVkaWNhdGU6VkFlLHJlcHJlc2VudDpIQWV9KSxVQWU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxXQWU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztmdW5jdGlvbiBLQWUoaSl7aWYoaT09PW51bGwpcmV0dXJuITA7dmFyIGE9W10sZixwLHYsbSxiLEU9aTtmb3IoZj0wLHA9RS5sZW5ndGg7ZjxwO2YrPTEpe2lmKHY9RVtmXSxiPSExLFdBZS5jYWxsKHYpIT09IltvYmplY3QgT2JqZWN0XSIpcmV0dXJuITE7Zm9yKG0gaW4gdilpZihVQWUuY2FsbCh2LG0pKWlmKCFiKWI9ITA7ZWxzZSByZXR1cm4hMTtpZighYilyZXR1cm4hMTtpZihhLmluZGV4T2YobSk9PT0tMSlhLnB1c2gobSk7ZWxzZSByZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBZQWUoaSl7cmV0dXJuIGkhPT1udWxsP2k6W119dmFyIFhBZT1uZXcgeTAoInRhZzp5YW1sLm9yZywyMDAyOm9tYXAiLHtraW5kOiJzZXF1ZW5jZSIscmVzb2x2ZTpLQWUsY29uc3RydWN0OllBZX0pLFFBZT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIFpBZShpKXtpZihpPT09bnVsbClyZXR1cm4hMDt2YXIgYSxmLHAsdixtLGI9aTtmb3IobT1uZXcgQXJyYXkoYi5sZW5ndGgpLGE9MCxmPWIubGVuZ3RoO2E8ZjthKz0xKXtpZihwPWJbYV0sUUFlLmNhbGwocCkhPT0iW29iamVjdCBPYmplY3RdInx8KHY9T2JqZWN0LmtleXMocCksdi5sZW5ndGghPT0xKSlyZXR1cm4hMTttW2FdPVt2WzBdLHBbdlswXV1dfXJldHVybiEwfWZ1bmN0aW9uIEpBZShpKXtpZihpPT09bnVsbClyZXR1cm5bXTt2YXIgYSxmLHAsdixtLGI9aTtmb3IobT1uZXcgQXJyYXkoYi5sZW5ndGgpLGE9MCxmPWIubGVuZ3RoO2E8ZjthKz0xKXA9YlthXSx2PU9iamVjdC5rZXlzKHApLG1bYV09W3ZbMF0scFt2WzBdXV07cmV0dXJuIG19dmFyIHRMZT1uZXcgeTAoInRhZzp5YW1sLm9yZywyMDAyOnBhaXJzIix7a2luZDoic2VxdWVuY2UiLHJlc29sdmU6WkFlLGNvbnN0cnVjdDpKQWV9KSxlTGU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBuTGUoaSl7aWYoaT09PW51bGwpcmV0dXJuITA7dmFyIGEsZj1pO2ZvcihhIGluIGYpaWYoZUxlLmNhbGwoZixhKSYmZlthXSE9PW51bGwpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gckxlKGkpe3JldHVybiBpIT09bnVsbD9pOnt9fXZhciBpTGU9bmV3IHkwKCJ0YWc6eWFtbC5vcmcsMjAwMjpzZXQiLHtraW5kOiJtYXBwaW5nIixyZXNvbHZlOm5MZSxjb25zdHJ1Y3Q6ckxlfSksc0xlPU5BZS5leHRlbmQoe2ltcGxpY2l0OltSQWUsJEFlXSxleHBsaWNpdDpbR0FlLFhBZSx0TGUsaUxlXX0pLG5rPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksalc9MSxQT3Q9MixGT3Q9MywkVz00LHlkdD0xLGFMZT0yLEJPdD0zLG9MZT0vW1x4MDAtXHgwOFx4MEJceDBDXHgwRS1ceDFGXHg3Ri1ceDg0XHg4Ni1ceDlGXHVGRkZFXHVGRkZGXXxbXHVEODAwLVx1REJGRl0oPyFbXHVEQzAwLVx1REZGRl0pfCg/OlteXHVEODAwLVx1REJGRl18XilbXHVEQzAwLVx1REZGRl0vLGNMZT0vW1x4ODVcdTIwMjhcdTIwMjldLyx1TGU9L1ssXFtcXVx7XH1dLyxST3Q9L14oPzohfCEhfCFbYS16XC1dKyEpJC9pLGpPdD0vXig/OiF8W14sXFtcXVx7XH1dKSg/OiVbMC05YS1mXXsyfXxbMC05YS16XC0jO1wvXD86QCY9XCtcJCxfXC4hflwqJ1woXClcW1xdXSkqJC9pO2Z1bmN0aW9uICRPdChpKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGkpfWZ1bmN0aW9uIGYzKGkpe3JldHVybiBpPT09MTB8fGk9PT0xM31mdW5jdGlvbiBvOShpKXtyZXR1cm4gaT09PTl8fGk9PT0zMn1mdW5jdGlvbiBmcChpKXtyZXR1cm4gaT09PTl8fGk9PT0zMnx8aT09PTEwfHxpPT09MTN9ZnVuY3Rpb24gR0EoaSl7cmV0dXJuIGk9PT00NHx8aT09PTkxfHxpPT09OTN8fGk9PT0xMjN8fGk9PT0xMjV9ZnVuY3Rpb24gbExlKGkpe3ZhciBhO3JldHVybiA0ODw9aSYmaTw9NTc/aS00ODooYT1pfDMyLDk3PD1hJiZhPD0xMDI/YS05NysxMDotMSl9ZnVuY3Rpb24gaExlKGkpe3JldHVybiBpPT09MTIwPzI6aT09PTExNz80Omk9PT04NT84OjB9ZnVuY3Rpb24gZkxlKGkpe3JldHVybiA0ODw9aSYmaTw9NTc/aS00ODotMX1mdW5jdGlvbiB6T3QoaSl7cmV0dXJuIGk9PT00OD8iXDAiOmk9PT05Nz8iXHgwNyI6aT09PTk4PyJcYiI6aT09PTExNnx8aT09PTk/IgkiOmk9PT0xMTA/YApgOmk9PT0xMTg/Ilx2IjppPT09MTAyPyJcZiI6aT09PTExND8iXHIiOmk9PT0xMDE/Ilx4MUIiOmk9PT0zMj8iICI6aT09PTM0PyciJzppPT09NDc/Ii8iOmk9PT05Mj8iXFwiOmk9PT03OD8iwoUiOmk9PT05NT8iwqAiOmk9PT03Nj8iXHUyMDI4IjppPT09ODA/Ilx1MjAyOSI6IiJ9ZnVuY3Rpb24gZExlKGkpe3JldHVybiBpPD02NTUzNT9TdHJpbmcuZnJvbUNoYXJDb2RlKGkpOlN0cmluZy5mcm9tQ2hhckNvZGUoKGktNjU1MzY+PjEwKSs1NTI5NiwoaS02NTUzNiYxMDIzKSs1NjMyMCl9Zm9yKHZhciBxT3Q9bmV3IEFycmF5KDI1NiksSE90PW5ldyBBcnJheSgyNTYpLFVBPTA7VUE8MjU2O1VBKyspcU90W1VBXT16T3QoVUEpPzE6MCxIT3RbVUFdPXpPdChVQSk7ZnVuY3Rpb24gZ0xlKGksYSl7dGhpcy5pbnB1dD1pLHRoaXMuZmlsZW5hbWU9YS5maWxlbmFtZXx8bnVsbCx0aGlzLnNjaGVtYT1hLnNjaGVtYXx8c0xlLHRoaXMub25XYXJuaW5nPWEub25XYXJuaW5nfHxudWxsLHRoaXMubGVnYWN5PWEubGVnYWN5fHwhMSx0aGlzLmpzb249YS5qc29ufHwhMSx0aGlzLmxpc3RlbmVyPWEubGlzdGVuZXJ8fG51bGwsdGhpcy5pbXBsaWNpdFR5cGVzPXRoaXMuc2NoZW1hLmNvbXBpbGVkSW1wbGljaXQsdGhpcy50eXBlTWFwPXRoaXMuc2NoZW1hLmNvbXBpbGVkVHlwZU1hcCx0aGlzLmxlbmd0aD1pLmxlbmd0aCx0aGlzLnBvc2l0aW9uPTAsdGhpcy5saW5lPTAsdGhpcy5saW5lU3RhcnQ9MCx0aGlzLmxpbmVJbmRlbnQ9MCx0aGlzLmZpcnN0VGFiSW5MaW5lPS0xLHRoaXMuZG9jdW1lbnRzPVtdfWZ1bmN0aW9uIFZPdChpLGEpe3ZhciBmPXtuYW1lOmkuZmlsZW5hbWUsYnVmZmVyOmkuaW5wdXQuc2xpY2UoMCwtMSkscG9zaXRpb246aS5wb3NpdGlvbixsaW5lOmkubGluZSxjb2x1bW46aS5wb3NpdGlvbi1pLmxpbmVTdGFydH07cmV0dXJuIGYuc25pcHBldD1lQWUoZiksbmV3IGs1KGEsZil9ZnVuY3Rpb24gRnMoaSxhKXt0aHJvdyBWT3QoaSxhKX1mdW5jdGlvbiB6VyhpLGEpe2kub25XYXJuaW5nJiZpLm9uV2FybmluZy5jYWxsKG51bGwsVk90KGksYSkpfXZhciBHT3Q9e1lBTUw6ZnVuY3Rpb24oYSxmLHApe3ZhciB2LG0sYjthLnZlcnNpb24hPT1udWxsJiZGcyhhLCJkdXBsaWNhdGlvbiBvZiAlWUFNTCBkaXJlY3RpdmUiKSxwLmxlbmd0aCE9PTEmJkZzKGEsIllBTUwgZGlyZWN0aXZlIGFjY2VwdHMgZXhhY3RseSBvbmUgYXJndW1lbnQiKSx2PS9eKFswLTldKylcLihbMC05XSspJC8uZXhlYyhwWzBdKSx2PT09bnVsbCYmRnMoYSwiaWxsLWZvcm1lZCBhcmd1bWVudCBvZiB0aGUgWUFNTCBkaXJlY3RpdmUiKSxtPXBhcnNlSW50KHZbMV0sMTApLGI9cGFyc2VJbnQodlsyXSwxMCksbSE9PTEmJkZzKGEsInVuYWNjZXB0YWJsZSBZQU1MIHZlcnNpb24gb2YgdGhlIGRvY3VtZW50IiksYS52ZXJzaW9uPXBbMF0sYS5jaGVja0xpbmVCcmVha3M9YjwyLGIhPT0xJiZiIT09MiYmelcoYSwidW5zdXBwb3J0ZWQgWUFNTCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudCIpfSxUQUc6ZnVuY3Rpb24oYSxmLHApe3ZhciB2LG07cC5sZW5ndGghPT0yJiZGcyhhLCJUQUcgZGlyZWN0aXZlIGFjY2VwdHMgZXhhY3RseSB0d28gYXJndW1lbnRzIiksdj1wWzBdLG09cFsxXSxST3QudGVzdCh2KXx8RnMoYSwiaWxsLWZvcm1lZCB0YWcgaGFuZGxlIChmaXJzdCBhcmd1bWVudCkgb2YgdGhlIFRBRyBkaXJlY3RpdmUiKSxuay5jYWxsKGEudGFnTWFwLHYpJiZGcyhhLCd0aGVyZSBpcyBhIHByZXZpb3VzbHkgZGVjbGFyZWQgc3VmZml4IGZvciAiJyt2KyciIHRhZyBoYW5kbGUnKSxqT3QudGVzdChtKXx8RnMoYSwiaWxsLWZvcm1lZCB0YWcgcHJlZml4IChzZWNvbmQgYXJndW1lbnQpIG9mIHRoZSBUQUcgZGlyZWN0aXZlIik7dHJ5e209ZGVjb2RlVVJJQ29tcG9uZW50KG0pfWNhdGNoe0ZzKGEsInRhZyBwcmVmaXggaXMgbWFsZm9ybWVkOiAiK20pfWEudGFnTWFwW3ZdPW19fTtmdW5jdGlvbiByayhpLGEsZixwKXt2YXIgdixtLGIsRTtpZihhPGYpe2lmKEU9aS5pbnB1dC5zbGljZShhLGYpLHApZm9yKHY9MCxtPUUubGVuZ3RoO3Y8bTt2Kz0xKWI9RS5jaGFyQ29kZUF0KHYpLGI9PT05fHwzMjw9YiYmYjw9MTExNDExMXx8RnMoaSwiZXhwZWN0ZWQgdmFsaWQgSlNPTiBjaGFyYWN0ZXIiKTtlbHNlIG9MZS50ZXN0KEUpJiZGcyhpLCJ0aGUgc3RyZWFtIGNvbnRhaW5zIG5vbi1wcmludGFibGUgY2hhcmFjdGVycyIpO2kucmVzdWx0Kz1FfX1mdW5jdGlvbiBVT3QoaSxhLGYscCl7dmFyIHYsbSxiLEU7Zm9yKGZnLmlzT2JqZWN0KGYpfHxGcyhpLCJjYW5ub3QgbWVyZ2UgbWFwcGluZ3M7IHRoZSBwcm92aWRlZCBzb3VyY2Ugb2JqZWN0IGlzIHVuYWNjZXB0YWJsZSIpLHY9T2JqZWN0LmtleXMoZiksYj0wLEU9di5sZW5ndGg7YjxFO2IrPTEpbT12W2JdLG5rLmNhbGwoYSxtKXx8KGFbbV09ZlttXSxwW21dPSEwKX1mdW5jdGlvbiBXQShpLGEsZixwLHYsbSxiLEUsQyl7dmFyIEEsUDtpZihBcnJheS5pc0FycmF5KHYpKWZvcih2PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHYpLEE9MCxQPXYubGVuZ3RoO0E8UDtBKz0xKUFycmF5LmlzQXJyYXkodltBXSkmJkZzKGksIm5lc3RlZCBhcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW5zaWRlIGtleXMiKSx0eXBlb2Ygdj09Im9iamVjdCImJiRPdCh2W0FdKT09PSJbb2JqZWN0IE9iamVjdF0iJiYodltBXT0iW29iamVjdCBPYmplY3RdIik7aWYodHlwZW9mIHY9PSJvYmplY3QiJiYkT3Qodik9PT0iW29iamVjdCBPYmplY3RdIiYmKHY9IltvYmplY3QgT2JqZWN0XSIpLHY9U3RyaW5nKHYpLGE9PT1udWxsJiYoYT17fSkscD09PSJ0YWc6eWFtbC5vcmcsMjAwMjptZXJnZSIpaWYoQXJyYXkuaXNBcnJheShtKSlmb3IoQT0wLFA9bS5sZW5ndGg7QTxQO0ErPTEpVU90KGksYSxtW0FdLGYpO2Vsc2UgVU90KGksYSxtLGYpO2Vsc2UhaS5qc29uJiYhbmsuY2FsbChmLHYpJiZuay5jYWxsKGEsdikmJihpLmxpbmU9Ynx8aS5saW5lLGkubGluZVN0YXJ0PUV8fGkubGluZVN0YXJ0LGkucG9zaXRpb249Q3x8aS5wb3NpdGlvbixGcyhpLCJkdXBsaWNhdGVkIG1hcHBpbmcga2V5IikpLHY9PT0iX19wcm90b19fIj9PYmplY3QuZGVmaW5lUHJvcGVydHkoYSx2LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTptfSk6YVt2XT1tLGRlbGV0ZSBmW3ZdO3JldHVybiBhfWZ1bmN0aW9uIHhkdChpKXt2YXIgYTthPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKSxhPT09MTA/aS5wb3NpdGlvbisrOmE9PT0xMz8oaS5wb3NpdGlvbisrLGkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKT09PTEwJiZpLnBvc2l0aW9uKyspOkZzKGksImEgbGluZSBicmVhayBpcyBleHBlY3RlZCIpLGkubGluZSs9MSxpLmxpbmVTdGFydD1pLnBvc2l0aW9uLGkuZmlyc3RUYWJJbkxpbmU9LTF9ZnVuY3Rpb24gUGYoaSxhLGYpe2Zvcih2YXIgcD0wLHY9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pO3YhPT0wOyl7Zm9yKDtvOSh2KTspdj09PTkmJmkuZmlyc3RUYWJJbkxpbmU9PT0tMSYmKGkuZmlyc3RUYWJJbkxpbmU9aS5wb3NpdGlvbiksdj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKTtpZihhJiZ2PT09MzUpZG8gdj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKTt3aGlsZSh2IT09MTAmJnYhPT0xMyYmdiE9PTApO2lmKGYzKHYpKWZvcih4ZHQoaSksdj1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbikscCsrLGkubGluZUluZGVudD0wO3Y9PT0zMjspaS5saW5lSW5kZW50Kyssdj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKTtlbHNlIGJyZWFrfXJldHVybiBmIT09LTEmJnAhPT0wJiZpLmxpbmVJbmRlbnQ8ZiYmelcoaSwiZGVmaWNpZW50IGluZGVudGF0aW9uIikscH1mdW5jdGlvbiBxVyhpKXt2YXIgYT1pLnBvc2l0aW9uLGY7cmV0dXJuIGY9aS5pbnB1dC5jaGFyQ29kZUF0KGEpLCEhKChmPT09NDV8fGY9PT00NikmJmY9PT1pLmlucHV0LmNoYXJDb2RlQXQoYSsxKSYmZj09PWkuaW5wdXQuY2hhckNvZGVBdChhKzIpJiYoYSs9MyxmPWkuaW5wdXQuY2hhckNvZGVBdChhKSxmPT09MHx8ZnAoZikpKX1mdW5jdGlvbiBrZHQoaSxhKXthPT09MT9pLnJlc3VsdCs9IiAiOmE+MSYmKGkucmVzdWx0Kz1mZy5yZXBlYXQoYApgLGEtMSkpfWZ1bmN0aW9uIHBMZShpLGEsZil7dmFyIHAsdixtLGIsRSxDLEEsUCxGPWkua2luZCxqPWkucmVzdWx0LFI7aWYoUj1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbiksZnAoUil8fEdBKFIpfHxSPT09MzV8fFI9PT0zOHx8Uj09PTQyfHxSPT09MzN8fFI9PT0xMjR8fFI9PT02Mnx8Uj09PTM5fHxSPT09MzR8fFI9PT0zN3x8Uj09PTY0fHxSPT09OTZ8fChSPT09NjN8fFI9PT00NSkmJih2PWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKzEpLGZwKHYpfHxmJiZHQSh2KSkpcmV0dXJuITE7Zm9yKGkua2luZD0ic2NhbGFyIixpLnJlc3VsdD0iIixtPWI9aS5wb3NpdGlvbixFPSExO1IhPT0wOyl7aWYoUj09PTU4KXtpZih2PWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKzEpLGZwKHYpfHxmJiZHQSh2KSlicmVha31lbHNlIGlmKFI9PT0zNSl7aWYocD1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbi0xKSxmcChwKSlicmVha31lbHNle2lmKGkucG9zaXRpb249PT1pLmxpbmVTdGFydCYmcVcoaSl8fGYmJkdBKFIpKWJyZWFrO2lmKGYzKFIpKWlmKEM9aS5saW5lLEE9aS5saW5lU3RhcnQsUD1pLmxpbmVJbmRlbnQsUGYoaSwhMSwtMSksaS5saW5lSW5kZW50Pj1hKXtFPSEwLFI9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pO2NvbnRpbnVlfWVsc2V7aS5wb3NpdGlvbj1iLGkubGluZT1DLGkubGluZVN0YXJ0PUEsaS5saW5lSW5kZW50PVA7YnJlYWt9fUUmJihyayhpLG0sYiwhMSksa2R0KGksaS5saW5lLUMpLG09Yj1pLnBvc2l0aW9uLEU9ITEpLG85KFIpfHwoYj1pLnBvc2l0aW9uKzEpLFI9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbil9cmV0dXJuIHJrKGksbSxiLCExKSxpLnJlc3VsdD8hMDooaS5raW5kPUYsaS5yZXN1bHQ9aiwhMSl9ZnVuY3Rpb24gYkxlKGksYSl7dmFyIGYscCx2O2lmKGY9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLGYhPT0zOSlyZXR1cm4hMTtmb3IoaS5raW5kPSJzY2FsYXIiLGkucmVzdWx0PSIiLGkucG9zaXRpb24rKyxwPXY9aS5wb3NpdGlvbjsoZj1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbikpIT09MDspaWYoZj09PTM5KWlmKHJrKGkscCxpLnBvc2l0aW9uLCEwKSxmPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pLGY9PT0zOSlwPWkucG9zaXRpb24saS5wb3NpdGlvbisrLHY9aS5wb3NpdGlvbjtlbHNlIHJldHVybiEwO2Vsc2UgZjMoZik/KHJrKGkscCx2LCEwKSxrZHQoaSxQZihpLCExLGEpKSxwPXY9aS5wb3NpdGlvbik6aS5wb3NpdGlvbj09PWkubGluZVN0YXJ0JiZxVyhpKT9GcyhpLCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgZG9jdW1lbnQgd2l0aGluIGEgc2luZ2xlIHF1b3RlZCBzY2FsYXIiKTooaS5wb3NpdGlvbisrLHY9aS5wb3NpdGlvbik7RnMoaSwidW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBzaW5nbGUgcXVvdGVkIHNjYWxhciIpfWZ1bmN0aW9uIHZMZShpLGEpe3ZhciBmLHAsdixtLGIsRTtpZihFPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKSxFIT09MzQpcmV0dXJuITE7Zm9yKGkua2luZD0ic2NhbGFyIixpLnJlc3VsdD0iIixpLnBvc2l0aW9uKyssZj1wPWkucG9zaXRpb247KEU9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pKSE9PTA7KXtpZihFPT09MzQpcmV0dXJuIHJrKGksZixpLnBvc2l0aW9uLCEwKSxpLnBvc2l0aW9uKyssITA7aWYoRT09PTkyKXtpZihyayhpLGYsaS5wb3NpdGlvbiwhMCksRT1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSxmMyhFKSlQZihpLCExLGEpO2Vsc2UgaWYoRTwyNTYmJnFPdFtFXSlpLnJlc3VsdCs9SE90W0VdLGkucG9zaXRpb24rKztlbHNlIGlmKChiPWhMZShFKSk+MCl7Zm9yKHY9YixtPTA7dj4wO3YtLSlFPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pLChiPWxMZShFKSk+PTA/bT0obTw8NCkrYjpGcyhpLCJleHBlY3RlZCBoZXhhZGVjaW1hbCBjaGFyYWN0ZXIiKTtpLnJlc3VsdCs9ZExlKG0pLGkucG9zaXRpb24rK31lbHNlIEZzKGksInVua25vd24gZXNjYXBlIHNlcXVlbmNlIik7Zj1wPWkucG9zaXRpb259ZWxzZSBmMyhFKT8ocmsoaSxmLHAsITApLGtkdChpLFBmKGksITEsYSkpLGY9cD1pLnBvc2l0aW9uKTppLnBvc2l0aW9uPT09aS5saW5lU3RhcnQmJnFXKGkpP0ZzKGksInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBkb2N1bWVudCB3aXRoaW4gYSBkb3VibGUgcXVvdGVkIHNjYWxhciIpOihpLnBvc2l0aW9uKysscD1pLnBvc2l0aW9uKX1GcyhpLCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIGRvdWJsZSBxdW90ZWQgc2NhbGFyIil9ZnVuY3Rpb24gd0xlKGksYSl7dmFyIGY9ITAscCx2LG0sYj1pLnRhZyxFLEM9aS5hbmNob3IsQSxQLEYsaixSLEg9T2JqZWN0LmNyZWF0ZShudWxsKSxZLHJ0LEosaXQ7aWYoaXQ9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLGl0PT09OTEpUD05MyxSPSExLEU9W107ZWxzZSBpZihpdD09PTEyMylQPTEyNSxSPSEwLEU9e307ZWxzZSByZXR1cm4hMTtmb3IoaS5hbmNob3IhPT1udWxsJiYoaS5hbmNob3JNYXBbaS5hbmNob3JdPUUpLGl0PWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO2l0IT09MDspe2lmKFBmKGksITAsYSksaXQ9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLGl0PT09UClyZXR1cm4gaS5wb3NpdGlvbisrLGkudGFnPWIsaS5hbmNob3I9QyxpLmtpbmQ9Uj8ibWFwcGluZyI6InNlcXVlbmNlIixpLnJlc3VsdD1FLCEwO2Y/aXQ9PT00NCYmRnMoaSwiZXhwZWN0ZWQgdGhlIG5vZGUgY29udGVudCwgYnV0IGZvdW5kICcsJyIpOkZzKGksIm1pc3NlZCBjb21tYSBiZXR3ZWVuIGZsb3cgY29sbGVjdGlvbiBlbnRyaWVzIikscnQ9WT1KPW51bGwsRj1qPSExLGl0PT09NjMmJihBPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKzEpLGZwKEEpJiYoRj1qPSEwLGkucG9zaXRpb24rKyxQZihpLCEwLGEpKSkscD1pLmxpbmUsdj1pLmxpbmVTdGFydCxtPWkucG9zaXRpb24sS0EoaSxhLGpXLCExLCEwKSxydD1pLnRhZyxZPWkucmVzdWx0LFBmKGksITAsYSksaXQ9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLChqfHxpLmxpbmU9PT1wKSYmaXQ9PT01OCYmKEY9ITAsaXQ9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbiksUGYoaSwhMCxhKSxLQShpLGEsalcsITEsITApLEo9aS5yZXN1bHQpLFI/V0EoaSxFLEgscnQsWSxKLHAsdixtKTpGP0UucHVzaChXQShpLG51bGwsSCxydCxZLEoscCx2LG0pKTpFLnB1c2goWSksUGYoaSwhMCxhKSxpdD1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbiksaXQ9PT00ND8oZj0hMCxpdD1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSk6Zj0hMX1GcyhpLCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIGZsb3cgY29sbGVjdGlvbiIpfWZ1bmN0aW9uIG1MZShpLGEpe3ZhciBmLHAsdj15ZHQsbT0hMSxiPSExLEU9YSxDPTAsQT0hMSxQLEY7aWYoRj1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbiksRj09PTEyNClwPSExO2Vsc2UgaWYoRj09PTYyKXA9ITA7ZWxzZSByZXR1cm4hMTtmb3IoaS5raW5kPSJzY2FsYXIiLGkucmVzdWx0PSIiO0YhPT0wOylpZihGPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pLEY9PT00M3x8Rj09PTQ1KXlkdD09PXY/dj1GPT09NDM/Qk90OmFMZTpGcyhpLCJyZXBlYXQgb2YgYSBjaG9tcGluZyBtb2RlIGlkZW50aWZpZXIiKTtlbHNlIGlmKChQPWZMZShGKSk+PTApUD09PTA/RnMoaSwiYmFkIGV4cGxpY2l0IGluZGVudGF0aW9uIHdpZHRoIG9mIGEgYmxvY2sgc2NhbGFyOyBpdCBjYW5ub3QgYmUgbGVzcyB0aGFuIG9uZSIpOmI/RnMoaSwicmVwZWF0IG9mIGFuIGluZGVudGF0aW9uIHdpZHRoIGlkZW50aWZpZXIiKTooRT1hK1AtMSxiPSEwKTtlbHNlIGJyZWFrO2lmKG85KEYpKXtkbyBGPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO3doaWxlKG85KEYpKTtpZihGPT09MzUpZG8gRj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKTt3aGlsZSghZjMoRikmJkYhPT0wKX1mb3IoO0YhPT0wOyl7Zm9yKHhkdChpKSxpLmxpbmVJbmRlbnQ9MCxGPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKTsoIWJ8fGkubGluZUluZGVudDxFKSYmRj09PTMyOylpLmxpbmVJbmRlbnQrKyxGPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO2lmKCFiJiZpLmxpbmVJbmRlbnQ+RSYmKEU9aS5saW5lSW5kZW50KSxmMyhGKSl7QysrO2NvbnRpbnVlfWlmKGkubGluZUluZGVudDxFKXt2PT09Qk90P2kucmVzdWx0Kz1mZy5yZXBlYXQoYApgLG0/MStDOkMpOnY9PT15ZHQmJm0mJihpLnJlc3VsdCs9YApgKTticmVha31mb3IocD9vOShGKT8oQT0hMCxpLnJlc3VsdCs9ZmcucmVwZWF0KGAKYCxtPzErQzpDKSk6QT8oQT0hMSxpLnJlc3VsdCs9ZmcucmVwZWF0KGAKYCxDKzEpKTpDPT09MD9tJiYoaS5yZXN1bHQrPSIgIik6aS5yZXN1bHQrPWZnLnJlcGVhdChgCmAsQyk6aS5yZXN1bHQrPWZnLnJlcGVhdChgCmAsbT8xK0M6QyksbT0hMCxiPSEwLEM9MCxmPWkucG9zaXRpb247IWYzKEYpJiZGIT09MDspRj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKTtyayhpLGYsaS5wb3NpdGlvbiwhMSl9cmV0dXJuITB9ZnVuY3Rpb24gV090KGksYSl7dmFyIGYscD1pLnRhZyx2PWkuYW5jaG9yLG09W10sYixFPSExLEM7aWYoaS5maXJzdFRhYkluTGluZSE9PS0xKXJldHVybiExO2ZvcihpLmFuY2hvciE9PW51bGwmJihpLmFuY2hvck1hcFtpLmFuY2hvcl09bSksQz1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbik7QyE9PTAmJihpLmZpcnN0VGFiSW5MaW5lIT09LTEmJihpLnBvc2l0aW9uPWkuZmlyc3RUYWJJbkxpbmUsRnMoaSwidGFiIGNoYXJhY3RlcnMgbXVzdCBub3QgYmUgdXNlZCBpbiBpbmRlbnRhdGlvbiIpKSwhKEMhPT00NXx8KGI9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24rMSksIWZwKGIpKSkpOyl7aWYoRT0hMCxpLnBvc2l0aW9uKyssUGYoaSwhMCwtMSkmJmkubGluZUluZGVudDw9YSl7bS5wdXNoKG51bGwpLEM9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pO2NvbnRpbnVlfWlmKGY9aS5saW5lLEtBKGksYSxGT3QsITEsITApLG0ucHVzaChpLnJlc3VsdCksUGYoaSwhMCwtMSksQz1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbiksKGkubGluZT09PWZ8fGkubGluZUluZGVudD5hKSYmQyE9PTApRnMoaSwiYmFkIGluZGVudGF0aW9uIG9mIGEgc2VxdWVuY2UgZW50cnkiKTtlbHNlIGlmKGkubGluZUluZGVudDxhKWJyZWFrfXJldHVybiBFPyhpLnRhZz1wLGkuYW5jaG9yPXYsaS5raW5kPSJzZXF1ZW5jZSIsaS5yZXN1bHQ9bSwhMCk6ITF9ZnVuY3Rpb24geUxlKGksYSxmKXt2YXIgcCx2LG0sYixFLEMsQT1pLnRhZyxQPWkuYW5jaG9yLEY9e30saj1PYmplY3QuY3JlYXRlKG51bGwpLFI9bnVsbCxIPW51bGwsWT1udWxsLHJ0PSExLEo9ITEsaXQ7aWYoaS5maXJzdFRhYkluTGluZSE9PS0xKXJldHVybiExO2ZvcihpLmFuY2hvciE9PW51bGwmJihpLmFuY2hvck1hcFtpLmFuY2hvcl09RiksaXQ9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pO2l0IT09MDspe2lmKCFydCYmaS5maXJzdFRhYkluTGluZSE9PS0xJiYoaS5wb3NpdGlvbj1pLmZpcnN0VGFiSW5MaW5lLEZzKGksInRhYiBjaGFyYWN0ZXJzIG11c3Qgbm90IGJlIHVzZWQgaW4gaW5kZW50YXRpb24iKSkscD1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbisxKSxtPWkubGluZSwoaXQ9PT02M3x8aXQ9PT01OCkmJmZwKHApKWl0PT09NjM/KHJ0JiYoV0EoaSxGLGosUixILG51bGwsYixFLEMpLFI9SD1ZPW51bGwpLEo9ITAscnQ9ITAsdj0hMCk6cnQ/KHJ0PSExLHY9ITApOkZzKGksImluY29tcGxldGUgZXhwbGljaXQgbWFwcGluZyBwYWlyOyBhIGtleSBub2RlIGlzIG1pc3NlZDsgb3IgZm9sbG93ZWQgYnkgYSBub24tdGFidWxhdGVkIGVtcHR5IGxpbmUiKSxpLnBvc2l0aW9uKz0xLGl0PXA7ZWxzZXtpZihiPWkubGluZSxFPWkubGluZVN0YXJ0LEM9aS5wb3NpdGlvbiwhS0EoaSxmLFBPdCwhMSwhMCkpYnJlYWs7aWYoaS5saW5lPT09bSl7Zm9yKGl0PWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKTtvOShpdCk7KWl0PWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO2lmKGl0PT09NTgpaXQ9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbiksZnAoaXQpfHxGcyhpLCJhIHdoaXRlc3BhY2UgY2hhcmFjdGVyIGlzIGV4cGVjdGVkIGFmdGVyIHRoZSBrZXktdmFsdWUgc2VwYXJhdG9yIHdpdGhpbiBhIGJsb2NrIG1hcHBpbmciKSxydCYmKFdBKGksRixqLFIsSCxudWxsLGIsRSxDKSxSPUg9WT1udWxsKSxKPSEwLHJ0PSExLHY9ITEsUj1pLnRhZyxIPWkucmVzdWx0O2Vsc2UgaWYoSilGcyhpLCJjYW4gbm90IHJlYWQgYW4gaW1wbGljaXQgbWFwcGluZyBwYWlyOyBhIGNvbG9uIGlzIG1pc3NlZCIpO2Vsc2UgcmV0dXJuIGkudGFnPUEsaS5hbmNob3I9UCwhMH1lbHNlIGlmKEopRnMoaSwiY2FuIG5vdCByZWFkIGEgYmxvY2sgbWFwcGluZyBlbnRyeTsgYSBtdWx0aWxpbmUga2V5IG1heSBub3QgYmUgYW4gaW1wbGljaXQga2V5Iik7ZWxzZSByZXR1cm4gaS50YWc9QSxpLmFuY2hvcj1QLCEwfWlmKChpLmxpbmU9PT1tfHxpLmxpbmVJbmRlbnQ+YSkmJihydCYmKGI9aS5saW5lLEU9aS5saW5lU3RhcnQsQz1pLnBvc2l0aW9uKSxLQShpLGEsJFcsITAsdikmJihydD9IPWkucmVzdWx0Olk9aS5yZXN1bHQpLHJ0fHwoV0EoaSxGLGosUixILFksYixFLEMpLFI9SD1ZPW51bGwpLFBmKGksITAsLTEpLGl0PWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKSksKGkubGluZT09PW18fGkubGluZUluZGVudD5hKSYmaXQhPT0wKUZzKGksImJhZCBpbmRlbnRhdGlvbiBvZiBhIG1hcHBpbmcgZW50cnkiKTtlbHNlIGlmKGkubGluZUluZGVudDxhKWJyZWFrfXJldHVybiBydCYmV0EoaSxGLGosUixILG51bGwsYixFLEMpLEomJihpLnRhZz1BLGkuYW5jaG9yPVAsaS5raW5kPSJtYXBwaW5nIixpLnJlc3VsdD1GKSxKfWZ1bmN0aW9uIHhMZShpKXt2YXIgYSxmPSExLHA9ITEsdixtLGI7aWYoYj1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbiksYiE9PTMzKXJldHVybiExO2lmKGkudGFnIT09bnVsbCYmRnMoaSwiZHVwbGljYXRpb24gb2YgYSB0YWcgcHJvcGVydHkiKSxiPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pLGI9PT02MD8oZj0hMCxiPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pKTpiPT09MzM/KHA9ITAsdj0iISEiLGI9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbikpOnY9IiEiLGE9aS5wb3NpdGlvbixmKXtkbyBiPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO3doaWxlKGIhPT0wJiZiIT09NjIpO2kucG9zaXRpb248aS5sZW5ndGg/KG09aS5pbnB1dC5zbGljZShhLGkucG9zaXRpb24pLGI9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbikpOkZzKGksInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgdmVyYmF0aW0gdGFnIil9ZWxzZXtmb3IoO2IhPT0wJiYhZnAoYik7KWI9PT0zMyYmKHA/RnMoaSwidGFnIHN1ZmZpeCBjYW5ub3QgY29udGFpbiBleGNsYW1hdGlvbiBtYXJrcyIpOih2PWkuaW5wdXQuc2xpY2UoYS0xLGkucG9zaXRpb24rMSksUk90LnRlc3Qodil8fEZzKGksIm5hbWVkIHRhZyBoYW5kbGUgY2Fubm90IGNvbnRhaW4gc3VjaCBjaGFyYWN0ZXJzIikscD0hMCxhPWkucG9zaXRpb24rMSkpLGI9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7bT1pLmlucHV0LnNsaWNlKGEsaS5wb3NpdGlvbiksdUxlLnRlc3QobSkmJkZzKGksInRhZyBzdWZmaXggY2Fubm90IGNvbnRhaW4gZmxvdyBpbmRpY2F0b3IgY2hhcmFjdGVycyIpfW0mJiFqT3QudGVzdChtKSYmRnMoaSwidGFnIG5hbWUgY2Fubm90IGNvbnRhaW4gc3VjaCBjaGFyYWN0ZXJzOiAiK20pO3RyeXttPWRlY29kZVVSSUNvbXBvbmVudChtKX1jYXRjaHtGcyhpLCJ0YWcgbmFtZSBpcyBtYWxmb3JtZWQ6ICIrbSl9cmV0dXJuIGY/aS50YWc9bTpuay5jYWxsKGkudGFnTWFwLHYpP2kudGFnPWkudGFnTWFwW3ZdK206dj09PSIhIj9pLnRhZz0iISIrbTp2PT09IiEhIj9pLnRhZz0idGFnOnlhbWwub3JnLDIwMDI6IittOkZzKGksJ3VuZGVjbGFyZWQgdGFnIGhhbmRsZSAiJyt2KyciJyksITB9ZnVuY3Rpb24ga0xlKGkpe3ZhciBhLGY7aWYoZj1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbiksZiE9PTM4KXJldHVybiExO2ZvcihpLmFuY2hvciE9PW51bGwmJkZzKGksImR1cGxpY2F0aW9uIG9mIGFuIGFuY2hvciBwcm9wZXJ0eSIpLGY9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbiksYT1pLnBvc2l0aW9uO2YhPT0wJiYhZnAoZikmJiFHQShmKTspZj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKTtyZXR1cm4gaS5wb3NpdGlvbj09PWEmJkZzKGksIm5hbWUgb2YgYW4gYW5jaG9yIG5vZGUgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIiKSxpLmFuY2hvcj1pLmlucHV0LnNsaWNlKGEsaS5wb3NpdGlvbiksITB9ZnVuY3Rpb24gRUxlKGkpe3ZhciBhLGYscDtpZihwPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKSxwIT09NDIpcmV0dXJuITE7Zm9yKHA9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbiksYT1pLnBvc2l0aW9uO3AhPT0wJiYhZnAocCkmJiFHQShwKTspcD1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKTtyZXR1cm4gaS5wb3NpdGlvbj09PWEmJkZzKGksIm5hbWUgb2YgYW4gYWxpYXMgbm9kZSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGNoYXJhY3RlciIpLGY9aS5pbnB1dC5zbGljZShhLGkucG9zaXRpb24pLG5rLmNhbGwoaS5hbmNob3JNYXAsZil8fEZzKGksJ3VuaWRlbnRpZmllZCBhbGlhcyAiJytmKyciJyksaS5yZXN1bHQ9aS5hbmNob3JNYXBbZl0sUGYoaSwhMCwtMSksITB9ZnVuY3Rpb24gS0EoaSxhLGYscCx2KXt2YXIgbSxiLEUsQz0xLEE9ITEsUD0hMSxGLGosUixILFkscnQ7aWYoaS5saXN0ZW5lciE9PW51bGwmJmkubGlzdGVuZXIoIm9wZW4iLGkpLGkudGFnPW51bGwsaS5hbmNob3I9bnVsbCxpLmtpbmQ9bnVsbCxpLnJlc3VsdD1udWxsLG09Yj1FPSRXPT09Znx8Rk90PT09ZixwJiZQZihpLCEwLC0xKSYmKEE9ITAsaS5saW5lSW5kZW50PmE/Qz0xOmkubGluZUluZGVudD09PWE/Qz0wOmkubGluZUluZGVudDxhJiYoQz0tMSkpLEM9PT0xKWZvcig7eExlKGkpfHxrTGUoaSk7KVBmKGksITAsLTEpPyhBPSEwLEU9bSxpLmxpbmVJbmRlbnQ+YT9DPTE6aS5saW5lSW5kZW50PT09YT9DPTA6aS5saW5lSW5kZW50PGEmJihDPS0xKSk6RT0hMTtpZihFJiYoRT1BfHx2KSwoQz09PTF8fCRXPT09ZikmJihqVz09PWZ8fFBPdD09PWY/WT1hOlk9YSsxLHJ0PWkucG9zaXRpb24taS5saW5lU3RhcnQsQz09PTE/RSYmKFdPdChpLHJ0KXx8eUxlKGkscnQsWSkpfHx3TGUoaSxZKT9QPSEwOihiJiZtTGUoaSxZKXx8YkxlKGksWSl8fHZMZShpLFkpP1A9ITA6RUxlKGkpPyhQPSEwLChpLnRhZyE9PW51bGx8fGkuYW5jaG9yIT09bnVsbCkmJkZzKGksImFsaWFzIG5vZGUgc2hvdWxkIG5vdCBoYXZlIGFueSBwcm9wZXJ0aWVzIikpOnBMZShpLFksalc9PT1mKSYmKFA9ITAsaS50YWc9PT1udWxsJiYoaS50YWc9Ij8iKSksaS5hbmNob3IhPT1udWxsJiYoaS5hbmNob3JNYXBbaS5hbmNob3JdPWkucmVzdWx0KSk6Qz09PTAmJihQPUUmJldPdChpLHJ0KSkpLGkudGFnPT09bnVsbClpLmFuY2hvciE9PW51bGwmJihpLmFuY2hvck1hcFtpLmFuY2hvcl09aS5yZXN1bHQpO2Vsc2UgaWYoaS50YWc9PT0iPyIpe2ZvcihpLnJlc3VsdCE9PW51bGwmJmkua2luZCE9PSJzY2FsYXIiJiZGcyhpLCd1bmFjY2VwdGFibGUgbm9kZSBraW5kIGZvciAhPD8+IHRhZzsgaXQgc2hvdWxkIGJlICJzY2FsYXIiLCBub3QgIicraS5raW5kKyciJyksRj0wLGo9aS5pbXBsaWNpdFR5cGVzLmxlbmd0aDtGPGo7Ris9MSlpZihIPWkuaW1wbGljaXRUeXBlc1tGXSxILnJlc29sdmUoaS5yZXN1bHQpKXtpLnJlc3VsdD1ILmNvbnN0cnVjdChpLnJlc3VsdCksaS50YWc9SC50YWcsaS5hbmNob3IhPT1udWxsJiYoaS5hbmNob3JNYXBbaS5hbmNob3JdPWkucmVzdWx0KTticmVha319ZWxzZSBpZihpLnRhZyE9PSIhIil7aWYobmsuY2FsbChpLnR5cGVNYXBbaS5raW5kfHwiZmFsbGJhY2siXSxpLnRhZykpSD1pLnR5cGVNYXBbaS5raW5kfHwiZmFsbGJhY2siXVtpLnRhZ107ZWxzZSBmb3IoSD1udWxsLFI9aS50eXBlTWFwLm11bHRpW2kua2luZHx8ImZhbGxiYWNrIl0sRj0wLGo9Ui5sZW5ndGg7RjxqO0YrPTEpaWYoaS50YWcuc2xpY2UoMCxSW0ZdLnRhZy5sZW5ndGgpPT09UltGXS50YWcpe0g9UltGXTticmVha31IfHxGcyhpLCJ1bmtub3duIHRhZyAhPCIraS50YWcrIj4iKSxpLnJlc3VsdCE9PW51bGwmJkgua2luZCE9PWkua2luZCYmRnMoaSwidW5hY2NlcHRhYmxlIG5vZGUga2luZCBmb3IgITwiK2kudGFnKyc+IHRhZzsgaXQgc2hvdWxkIGJlICInK0gua2luZCsnIiwgbm90ICInK2kua2luZCsnIicpLEgucmVzb2x2ZShpLnJlc3VsdCxpLnRhZyk/KGkucmVzdWx0PUguY29uc3RydWN0KGkucmVzdWx0LGkudGFnKSxpLmFuY2hvciE9PW51bGwmJihpLmFuY2hvck1hcFtpLmFuY2hvcl09aS5yZXN1bHQpKTpGcyhpLCJjYW5ub3QgcmVzb2x2ZSBhIG5vZGUgd2l0aCAhPCIraS50YWcrIj4gZXhwbGljaXQgdGFnIil9cmV0dXJuIGkubGlzdGVuZXIhPT1udWxsJiZpLmxpc3RlbmVyKCJjbG9zZSIsaSksaS50YWchPT1udWxsfHxpLmFuY2hvciE9PW51bGx8fFB9ZnVuY3Rpb24gVExlKGkpe3ZhciBhPWkucG9zaXRpb24sZixwLHYsbT0hMSxiO2ZvcihpLnZlcnNpb249bnVsbCxpLmNoZWNrTGluZUJyZWFrcz1pLmxlZ2FjeSxpLnRhZ01hcD1PYmplY3QuY3JlYXRlKG51bGwpLGkuYW5jaG9yTWFwPU9iamVjdC5jcmVhdGUobnVsbCk7KGI9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pKSE9PTAmJihQZihpLCEwLC0xKSxiPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKSwhKGkubGluZUluZGVudD4wfHxiIT09MzcpKTspe2ZvcihtPSEwLGI9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbiksZj1pLnBvc2l0aW9uO2IhPT0wJiYhZnAoYik7KWI9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7Zm9yKHA9aS5pbnB1dC5zbGljZShmLGkucG9zaXRpb24pLHY9W10scC5sZW5ndGg8MSYmRnMoaSwiZGlyZWN0aXZlIG5hbWUgbXVzdCBub3QgYmUgbGVzcyB0aGFuIG9uZSBjaGFyYWN0ZXIgaW4gbGVuZ3RoIik7YiE9PTA7KXtmb3IoO285KGIpOyliPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO2lmKGI9PT0zNSl7ZG8gYj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKTt3aGlsZShiIT09MCYmIWYzKGIpKTticmVha31pZihmMyhiKSlicmVhaztmb3IoZj1pLnBvc2l0aW9uO2IhPT0wJiYhZnAoYik7KWI9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7di5wdXNoKGkuaW5wdXQuc2xpY2UoZixpLnBvc2l0aW9uKSl9YiE9PTAmJnhkdChpKSxuay5jYWxsKEdPdCxwKT9HT3RbcF0oaSxwLHYpOnpXKGksJ3Vua25vd24gZG9jdW1lbnQgZGlyZWN0aXZlICInK3ArJyInKX1pZihQZihpLCEwLC0xKSxpLmxpbmVJbmRlbnQ9PT0wJiZpLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbik9PT00NSYmaS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24rMSk9PT00NSYmaS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24rMik9PT00NT8oaS5wb3NpdGlvbis9MyxQZihpLCEwLC0xKSk6bSYmRnMoaSwiZGlyZWN0aXZlcyBlbmQgbWFyayBpcyBleHBlY3RlZCIpLEtBKGksaS5saW5lSW5kZW50LTEsJFcsITEsITApLFBmKGksITAsLTEpLGkuY2hlY2tMaW5lQnJlYWtzJiZjTGUudGVzdChpLmlucHV0LnNsaWNlKGEsaS5wb3NpdGlvbikpJiZ6VyhpLCJub24tQVNDSUkgbGluZSBicmVha3MgYXJlIGludGVycHJldGVkIGFzIGNvbnRlbnQiKSxpLmRvY3VtZW50cy5wdXNoKGkucmVzdWx0KSxpLnBvc2l0aW9uPT09aS5saW5lU3RhcnQmJnFXKGkpKXtpLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbik9PT00NiYmKGkucG9zaXRpb24rPTMsUGYoaSwhMCwtMSkpO3JldHVybn1pZihpLnBvc2l0aW9uPGkubGVuZ3RoLTEpRnMoaSwiZW5kIG9mIHRoZSBzdHJlYW0gb3IgYSBkb2N1bWVudCBzZXBhcmF0b3IgaXMgZXhwZWN0ZWQiKTtlbHNlIHJldHVybn1mdW5jdGlvbiBLT3QoaSxhKXtpPVN0cmluZyhpKSxhPWF8fHt9LGkubGVuZ3RoIT09MCYmKGkuY2hhckNvZGVBdChpLmxlbmd0aC0xKSE9PTEwJiZpLmNoYXJDb2RlQXQoaS5sZW5ndGgtMSkhPT0xMyYmKGkrPWAKYCksaS5jaGFyQ29kZUF0KDApPT09NjUyNzkmJihpPWkuc2xpY2UoMSkpKTt2YXIgZj1uZXcgZ0xlKGksYSkscD1pLmluZGV4T2YoIlwwIik7Zm9yKHAhPT0tMSYmKGYucG9zaXRpb249cCxGcyhmLCJudWxsIGJ5dGUgaXMgbm90IGFsbG93ZWQgaW4gaW5wdXQiKSksZi5pbnB1dCs9IlwwIjtmLmlucHV0LmNoYXJDb2RlQXQoZi5wb3NpdGlvbik9PT0zMjspZi5saW5lSW5kZW50Kz0xLGYucG9zaXRpb24rPTE7Zm9yKDtmLnBvc2l0aW9uPGYubGVuZ3RoLTE7KVRMZShmKTtyZXR1cm4gZi5kb2N1bWVudHN9ZnVuY3Rpb24gX0xlKGksYSxmKXthIT09bnVsbCYmdHlwZW9mIGE9PSJvYmplY3QiJiZ0eXBlb2YgZj4idSImJihmPWEsYT1udWxsKTt2YXIgcD1LT3QoaSxmKTtpZih0eXBlb2YgYSE9ImZ1bmN0aW9uIilyZXR1cm4gcDtmb3IodmFyIHY9MCxtPXAubGVuZ3RoO3Y8bTt2Kz0xKWEocFt2XSl9ZnVuY3Rpb24gQ0xlKGksYSl7dmFyIGY9S090KGksYSk7aWYoZi5sZW5ndGghPT0wKXtpZihmLmxlbmd0aD09PTEpcmV0dXJuIGZbMF07dGhyb3cgbmV3IGs1KCJleHBlY3RlZCBhIHNpbmdsZSBkb2N1bWVudCBpbiB0aGUgc3RyZWFtLCBidXQgZm91bmQgbW9yZSIpfX12YXIgU0xlPV9MZSxBTGU9Q0xlLExMZT17bG9hZEFsbDpTTGUsbG9hZDpBTGV9LE1MZT1JT3QsRExlPUxMZS5sb2FkO2Z1bmN0aW9uIFlPdChpLGEsZil7dmFyIG0sYjtjb25zdCBwPWkubWF0Y2gobkl0KTtpZighcClyZXR1cm4gaTtjb25zdCB2PURMZShwWzFdLHtzY2hlbWE6TUxlfSk7cmV0dXJuIHYhPW51bGwmJnYudGl0bGUmJigobT1hLnNldERpYWdyYW1UaXRsZSk9PW51bGx8fG0uY2FsbChhLHYudGl0bGUudG9TdHJpbmcoKSkpLHYhPW51bGwmJnYuZGlzcGxheU1vZGUmJigoYj1hLnNldERpc3BsYXlNb2RlKT09bnVsbHx8Yi5jYWxsKGEsdi5kaXNwbGF5TW9kZS50b1N0cmluZygpKSksdiE9bnVsbCYmdi5jb25maWcmJihmPT1udWxsfHxmKHYuY29uZmlnKSksaS5zbGljZShwWzBdLmxlbmd0aCl9Y29uc3QgSUxlPWk9PmkudHJpbVN0YXJ0KCkucmVwbGFjZSgvXlxzKiUlKD8heylbXlxuXStcbj8vZ20sIiIpO2NsYXNzIFhPdHtjb25zdHJ1Y3RvcihhKXt0aGlzLnRleHQ9YSx0aGlzLnR5cGU9ImdyYXBoIix0aGlzLnRleHQrPWAKYDtjb25zdCBmPURlKCk7dHJ5e3RoaXMudHlwZT1oVyhhLGYpfWNhdGNoKG0pe3RoaXMudHlwZT0iZXJyb3IiLHRoaXMuZGV0ZWN0RXJyb3I9bX1jb25zdCBwPWdkdCh0aGlzLnR5cGUpO1d0LmRlYnVnKCJUeXBlICIrdGhpcy50eXBlKSx0aGlzLmRiPXAuZGIsdGhpcy5yZW5kZXJlcj1wLnJlbmRlcmVyLHRoaXMucGFyc2VyPXAucGFyc2VyO2NvbnN0IHY9dGhpcy5wYXJzZXIucGFyc2UuYmluZCh0aGlzLnBhcnNlcik7dGhpcy5wYXJzZXIucGFyc2U9bT0+dihJTGUoWU90KG0sdGhpcy5kYixJVykpKSx0aGlzLnBhcnNlci5wYXJzZXIueXk9dGhpcy5kYix0aGlzLmluaXQ9cC5pbml0LHRoaXMucGFyc2UoKX1wYXJzZSgpe3ZhciBhLGYscDtpZih0aGlzLmRldGVjdEVycm9yKXRocm93IHRoaXMuZGV0ZWN0RXJyb3I7KGY9KGE9dGhpcy5kYikuY2xlYXIpPT1udWxsfHxmLmNhbGwoYSksKHA9dGhpcy5pbml0KT09bnVsbHx8cC5jYWxsKHRoaXMsRGUoKSksdGhpcy5wYXJzZXIucGFyc2UodGhpcy50ZXh0KX1hc3luYyByZW5kZXIoYSxmKXthd2FpdCB0aGlzLnJlbmRlcmVyLmRyYXcodGhpcy50ZXh0LGEsZix0aGlzKX1nZXRQYXJzZXIoKXtyZXR1cm4gdGhpcy5wYXJzZXJ9Z2V0VHlwZSgpe3JldHVybiB0aGlzLnR5cGV9fWNvbnN0IEVkdD1hc3luYyBpPT57Y29uc3QgYT1oVyhpLERlKCkpO3RyeXtnZHQoYSl9Y2F0Y2h7Y29uc3QgcD1YOWUoYSk7aWYoIXApdGhyb3cgbmV3IHJJdChgRGlhZ3JhbSAke2F9IG5vdCBmb3VuZC5gKTtjb25zdHtpZDp2LGRpYWdyYW06bX09YXdhaXQgcCgpO1JXKHYsbSl9cmV0dXJuIG5ldyBYT3QoaSl9O2xldCBUZHQ9W107Y29uc3QgT0xlPWk9PntUZHQucHVzaChpKX0sTkxlPSgpPT57VGR0LmZvckVhY2goaT0+e2koKX0pLFRkdD1bXX07dmFyIFBMZT13SXQoT2JqZWN0LmtleXMsT2JqZWN0KTtjb25zdCBGTGU9UExlO3ZhciBCTGU9T2JqZWN0LnByb3RvdHlwZSxSTGU9QkxlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIFFPdChpKXtpZighdlcoaSkpcmV0dXJuIEZMZShpKTt2YXIgYT1bXTtmb3IodmFyIGYgaW4gT2JqZWN0KGkpKVJMZS5jYWxsKGksZikmJmYhPSJjb25zdHJ1Y3RvciImJmEucHVzaChmKTtyZXR1cm4gYX12YXIgakxlPUpFKEp3LCJEYXRhVmlldyIpO2NvbnN0IF9kdD1qTGU7dmFyICRMZT1KRShKdywiUHJvbWlzZSIpO2NvbnN0IENkdD0kTGU7dmFyIHpMZT1KRShKdywiU2V0Iik7Y29uc3QgWUE9ekxlO3ZhciBxTGU9SkUoSncsIldlYWtNYXAiKTtjb25zdCBTZHQ9cUxlO3ZhciBaT3Q9IltvYmplY3QgTWFwXSIsSExlPSJbb2JqZWN0IE9iamVjdF0iLEpPdD0iW29iamVjdCBQcm9taXNlXSIsdE50PSJbb2JqZWN0IFNldF0iLGVOdD0iW29iamVjdCBXZWFrTWFwXSIsbk50PSJbb2JqZWN0IERhdGFWaWV3XSIsVkxlPVpFKF9kdCksR0xlPVpFKEdOKSxVTGU9WkUoQ2R0KSxXTGU9WkUoWUEpLEtMZT1aRShTZHQpLGM5PVFFOyhfZHQmJmM5KG5ldyBfZHQobmV3IEFycmF5QnVmZmVyKDEpKSkhPW5OdHx8R04mJmM5KG5ldyBHTikhPVpPdHx8Q2R0JiZjOShDZHQucmVzb2x2ZSgpKSE9Sk90fHxZQSYmYzkobmV3IFlBKSE9dE50fHxTZHQmJmM5KG5ldyBTZHQpIT1lTnQpJiYoYzk9ZnVuY3Rpb24oaSl7dmFyIGE9UUUoaSksZj1hPT1ITGU/aS5jb25zdHJ1Y3Rvcjp2b2lkIDAscD1mP1pFKGYpOiIiO2lmKHApc3dpdGNoKHApe2Nhc2UgVkxlOnJldHVybiBuTnQ7Y2FzZSBHTGU6cmV0dXJuIFpPdDtjYXNlIFVMZTpyZXR1cm4gSk90O2Nhc2UgV0xlOnJldHVybiB0TnQ7Y2FzZSBLTGU6cmV0dXJuIGVOdH1yZXR1cm4gYX0pO2NvbnN0IFhBPWM5O3ZhciBZTGU9IltvYmplY3QgTWFwXSIsWExlPSJbb2JqZWN0IFNldF0iLFFMZT1PYmplY3QucHJvdG90eXBlLFpMZT1RTGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gZVAoaSl7aWYoaT09bnVsbClyZXR1cm4hMDtpZih0ayhpKSYmKE9mKGkpfHx0eXBlb2YgaT09InN0cmluZyJ8fHR5cGVvZiBpLnNwbGljZT09ImZ1bmN0aW9uInx8UkEoaSl8fG1XKGkpfHxCQShpKSkpcmV0dXJuIWkubGVuZ3RoO3ZhciBhPVhBKGkpO2lmKGE9PVlMZXx8YT09WExlKXJldHVybiFpLnNpemU7aWYodlcoaSkpcmV0dXJuIVFPdChpKS5sZW5ndGg7Zm9yKHZhciBmIGluIGkpaWYoWkxlLmNhbGwoaSxmKSlyZXR1cm4hMTtyZXR1cm4hMH1jb25zdCBKTGU9ImdyYXBoaWNzLWRvY3VtZW50IGRvY3VtZW50IjtmdW5jdGlvbiB0TWUoaSxhKXtpLmF0dHIoInJvbGUiLEpMZSksYSE9PSIiJiZpLmF0dHIoImFyaWEtcm9sZWRlc2NyaXB0aW9uIixhKX1mdW5jdGlvbiBlTWUoaSxhLGYscCl7aWYoaS5pbnNlcnQhPT12b2lkIDApe2lmKGYpe2NvbnN0IHY9YGNoYXJ0LWRlc2MtJHtwfWA7aS5hdHRyKCJhcmlhLWRlc2NyaWJlZGJ5Iix2KSxpLmluc2VydCgiZGVzYyIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImlkIix2KS50ZXh0KGYpfWlmKGEpe2NvbnN0IHY9YGNoYXJ0LXRpdGxlLSR7cH1gO2kuYXR0cigiYXJpYS1sYWJlbGxlZGJ5Iix2KSxpLmluc2VydCgidGl0bGUiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJpZCIsdikudGV4dChhKX19fWNvbnN0IHJOdD1bImdyYXBoIiwiZmxvd2NoYXJ0IiwiZmxvd2NoYXJ0LXYyIiwiZmxvd2NoYXJ0LWVsayIsInN0YXRlRGlhZ3JhbSIsInN0YXRlRGlhZ3JhbS12MiJdLG5NZT01ZTQsck1lPSJncmFwaCBUQjthW01heGltdW0gdGV4dCBzaXplIGluIGRpYWdyYW0gZXhjZWVkZWRdO3N0eWxlIGEgZmlsbDojZmFhIixpTWU9InNhbmRib3giLHNNZT0ibG9vc2UiLGFNZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLG9NZT0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsY01lPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIix1TWU9IjEwMCUiLGxNZT0iMTAwJSIsaE1lPSJib3JkZXI6MDttYXJnaW46MDsiLGZNZT0ibWFyZ2luOjAiLGRNZT0iYWxsb3ctdG9wLW5hdmlnYXRpb24tYnktdXNlci1hY3RpdmF0aW9uIGFsbG93LXBvcHVwcyIsZ01lPSdUaGUgImlmcmFtZSIgdGFnIGlzIG5vdCBzdXBwb3J0ZWQgYnkgeW91ciBicm93c2VyLicscE1lPVsiZm9yZWlnbm9iamVjdCJdLGJNZT1bImRvbWluYW50LWJhc2VsaW5lIl07YXN5bmMgZnVuY3Rpb24gdk1lKGksYSl7cGR0KCk7dHJ5e2F3YWl0IEVkdChpKX1jYXRjaChmKXtpZihhIT1udWxsJiZhLnN1cHByZXNzRXJyb3JzKXJldHVybiExO3Rocm93IGZ9cmV0dXJuITB9Y29uc3Qgd01lPWZ1bmN0aW9uKGkpe2xldCBhPWk7cmV0dXJuIGE9YS5yZXBsYWNlKC9zdHlsZS4qOlxTKiMuKjsvZyxmdW5jdGlvbihmKXtyZXR1cm4gZi5zdWJzdHJpbmcoMCxmLmxlbmd0aC0xKX0pLGE9YS5yZXBsYWNlKC9jbGFzc0RlZi4qOlxTKiMuKjsvZyxmdW5jdGlvbihmKXtyZXR1cm4gZi5zdWJzdHJpbmcoMCxmLmxlbmd0aC0xKX0pLGE9YS5yZXBsYWNlKC8jXHcrOy9nLGZ1bmN0aW9uKGYpe2NvbnN0IHA9Zi5zdWJzdHJpbmcoMSxmLmxlbmd0aC0xKTtyZXR1cm4vXlwrP1xkKyQvLnRlc3QocCk/Iu+sgsKwwrAiK3ArIsK2w58iOiLvrILCsCIrcCsiwrbDnyJ9KSxhfSxuUD1mdW5jdGlvbihpKXtyZXR1cm4gaS5yZXBsYWNlKC/vrILCsMKwL2csIiYjIikucmVwbGFjZSgv76yCwrAvZywiJiIpLnJlcGxhY2UoL8K2w58vZywiOyIpfSxpTnQ9KGksYSxmPVtdKT0+YAouJHtpfSAke2F9IHsgJHtmLmpvaW4oIiAhaW1wb3J0YW50OyAiKX0gIWltcG9ydGFudDsgfWAsbU1lPShpLGEsZj17fSk9Pnt2YXIgdjtsZXQgcD0iIjtpZihpLnRoZW1lQ1NTIT09dm9pZCAwJiYocCs9YAoke2kudGhlbWVDU1N9YCksaS5mb250RmFtaWx5IT09dm9pZCAwJiYocCs9YAo6cm9vdCB7IC0tbWVybWFpZC1mb250LWZhbWlseTogJHtpLmZvbnRGYW1pbHl9fWApLGkuYWx0Rm9udEZhbWlseSE9PXZvaWQgMCYmKHArPWAKOnJvb3QgeyAtLW1lcm1haWQtYWx0LWZvbnQtZmFtaWx5OiAke2kuYWx0Rm9udEZhbWlseX19YCksIWVQKGYpJiZyTnQuaW5jbHVkZXMoYSkpe2NvbnN0IEM9aS5odG1sTGFiZWxzfHwoKHY9aS5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDp2Lmh0bWxMYWJlbHMpP1siPiAqIiwic3BhbiJdOlsicmVjdCIsInBvbHlnb24iLCJlbGxpcHNlIiwiY2lyY2xlIiwicGF0aCJdO2Zvcihjb25zdCBBIGluIGYpe2NvbnN0IFA9ZltBXTtlUChQLnN0eWxlcyl8fEMuZm9yRWFjaChGPT57cCs9aU50KFAuaWQsRixQLnN0eWxlcyl9KSxlUChQLnRleHRTdHlsZXMpfHwocCs9aU50KFAuaWQsInRzcGFuIixQLnRleHRTdHlsZXMpKX19cmV0dXJuIHB9LHlNZT0oaSxhLGYscCk9Pntjb25zdCB2PW1NZShpLGEsZiksbT1QU2UoYSx2LGkudGhlbWVWYXJpYWJsZXMpO3JldHVybiB1ZHQoZVNlKGAke3B9eyR7bX19YCksclNlKX0seE1lPShpPSIiLGEsZik9PntsZXQgcD1pO3JldHVybiFmJiYhYSYmKHA9cC5yZXBsYWNlKC9tYXJrZXItZW5kPSJ1cmxcKFtcZCsuLzo9P0EtWmEtei1dKj8jL2csJ21hcmtlci1lbmQ9InVybCgjJykpLHA9blAocCkscD1wLnJlcGxhY2UoLzxicj4vZywiPGJyLz4iKSxwfSxrTWU9KGk9IiIsYSk9Pnt2YXIgdixtO2NvbnN0IGY9KG09KHY9YT09bnVsbD92b2lkIDA6YS52aWV3Qm94KT09bnVsbD92b2lkIDA6di5iYXNlVmFsKSE9bnVsbCYmbS5oZWlnaHQ/YS52aWV3Qm94LmJhc2VWYWwuaGVpZ2h0KyJweCI6bE1lLHA9YnRvYSgnPGJvZHkgc3R5bGU9IicrZk1lKyciPicraSsiPC9ib2R5PiIpO3JldHVybmA8aWZyYW1lIHN0eWxlPSJ3aWR0aDoke3VNZX07aGVpZ2h0OiR7Zn07JHtoTWV9IiBzcmM9ImRhdGE6dGV4dC9odG1sO2Jhc2U2NCwke3B9IiBzYW5kYm94PSIke2RNZX0iPgogICR7Z01lfQo8L2lmcmFtZT5gfSxzTnQ9KGksYSxmLHAsdik9Pntjb25zdCBtPWkuYXBwZW5kKCJkaXYiKTttLmF0dHIoImlkIixmKSxwJiZtLmF0dHIoInN0eWxlIixwKTtjb25zdCBiPW0uYXBwZW5kKCJzdmciKS5hdHRyKCJpZCIsYSkuYXR0cigid2lkdGgiLCIxMDAlIikuYXR0cigieG1sbnMiLGFNZSk7cmV0dXJuIHYmJmIuYXR0cigieG1sbnM6eGxpbmsiLHYpLGIuYXBwZW5kKCJnIiksaX07ZnVuY3Rpb24gYU50KGksYSl7cmV0dXJuIGkuYXBwZW5kKCJpZnJhbWUiKS5hdHRyKCJpZCIsYSkuYXR0cigic3R5bGUiLCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyIpLmF0dHIoInNhbmRib3giLCIiKX1jb25zdCBFTWU9KGksYSxmLHApPT57dmFyIHYsbSxiOyh2PWkuZ2V0RWxlbWVudEJ5SWQoYSkpPT1udWxsfHx2LnJlbW92ZSgpLChtPWkuZ2V0RWxlbWVudEJ5SWQoZikpPT1udWxsfHxtLnJlbW92ZSgpLChiPWkuZ2V0RWxlbWVudEJ5SWQocCkpPT1udWxsfHxiLnJlbW92ZSgpfSxUTWU9YXN5bmMgZnVuY3Rpb24oaSxhLGYpe3ZhciBDdCx0dCxQdCxwdDtwZHQoKSxPVygpLFlPdChhLHt9LElXKTtjb25zdCBwPXRvLmRldGVjdEluaXQoYSk7cCYmSVcocCk7Y29uc3Qgdj1EZSgpO1d0LmRlYnVnKHYpLGEubGVuZ3RoPigodj09bnVsbD92b2lkIDA6di5tYXhUZXh0U2l6ZSk/P25NZSkmJihhPXJNZSksYT1hLnJlcGxhY2UoL1xyXG4/L2csYApgKSxhPWEucmVwbGFjZSgvPChcdyspKFtePl0qKT4vZywoRnQsWCxSdCk9PiI8IitYK1J0LnJlcGxhY2UoLz0iKFteIl0qKSIvZywiPSckMSciKSsiPiIpO2NvbnN0IG09IiMiK2ksYj0iaSIraSxFPSIjIitiLEM9ImQiK2ksQT0iIyIrQztsZXQgUD14cigiYm9keSIpO2NvbnN0IEY9di5zZWN1cml0eUxldmVsPT09aU1lLGo9di5zZWN1cml0eUxldmVsPT09c01lLFI9di5mb250RmFtaWx5O2lmKGYhPT12b2lkIDApe2lmKGYmJihmLmlubmVySFRNTD0iIiksRil7Y29uc3QgRnQ9YU50KHhyKGYpLGIpO1A9eHIoRnQubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keSksUC5ub2RlKCkuc3R5bGUubWFyZ2luPTB9ZWxzZSBQPXhyKGYpO3NOdChQLGksQyxgZm9udC1mYW1pbHk6ICR7Un1gLG9NZSl9ZWxzZXtpZihFTWUoZG9jdW1lbnQsaSxDLGIpLEYpe2NvbnN0IEZ0PWFOdCh4cigiYm9keSIpLGIpO1A9eHIoRnQubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keSksUC5ub2RlKCkuc3R5bGUubWFyZ2luPTB9ZWxzZSBQPXhyKCJib2R5Iik7c050KFAsaSxDKX1hPXdNZShhKTtsZXQgSCxZO3RyeXtIPWF3YWl0IEVkdChhKX1jYXRjaChGdCl7SD1uZXcgWE90KCJlcnJvciIpLFk9RnR9Y29uc3QgcnQ9UC5zZWxlY3QoQSkubm9kZSgpLEo9SC50eXBlLGl0PXJ0LmZpcnN0Q2hpbGQsZnQ9aXQuZmlyc3RDaGlsZCxUdD1yTnQuaW5jbHVkZXMoSik/SC5yZW5kZXJlci5nZXRDbGFzc2VzKGEsSCk6e30sa3Q9eU1lKHYsSixUdCxtKSxtdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO210LmlubmVySFRNTD1rdCxpdC5pbnNlcnRCZWZvcmUobXQsZnQpO3RyeXthd2FpdCBILnJlbmRlcmVyLmRyYXcoYSxpLFpJdCxIKX1jYXRjaChGdCl7dGhyb3cgU1NlLmRyYXcoYSxpLFpJdCksRnR9Y29uc3QgY3Q9UC5zZWxlY3QoYCR7QX0gc3ZnYCkseXQ9KHR0PShDdD1ILmRiKS5nZXRBY2NUaXRsZSk9PW51bGw/dm9pZCAwOnR0LmNhbGwoQ3QpLHN0PShwdD0oUHQ9SC5kYikuZ2V0QWNjRGVzY3JpcHRpb24pPT1udWxsP3ZvaWQgMDpwdC5jYWxsKFB0KTtDTWUoSixjdCx5dCxzdCksUC5zZWxlY3QoYFtpZD0iJHtpfSJdYCkuc2VsZWN0QWxsKCJmb3JlaWdub2JqZWN0ID4gKiIpLmF0dHIoInhtbG5zIixjTWUpO2xldCB4dD1QLnNlbGVjdChBKS5ub2RlKCkuaW5uZXJIVE1MO2lmKFd0LmRlYnVnKCJjb25maWcuYXJyb3dNYXJrZXJBYnNvbHV0ZSIsdi5hcnJvd01hcmtlckFic29sdXRlKSx4dD14TWUoeHQsRix1MSh2LmFycm93TWFya2VyQWJzb2x1dGUpKSxGKXtjb25zdCBGdD1QLnNlbGVjdChBKyIgc3ZnIikubm9kZSgpO3h0PWtNZSh4dCxGdCl9ZWxzZSBqfHwoeHQ9ZVcuc2FuaXRpemUoeHQse0FERF9UQUdTOnBNZSxBRERfQVRUUjpiTWV9KSk7aWYoTkxlKCksWSl0aHJvdyBZO2NvbnN0IGR0PXhyKEY/RTpBKS5ub2RlKCk7cmV0dXJuIGR0JiYicmVtb3ZlImluIGR0JiZkdC5yZW1vdmUoKSx7c3ZnOnh0LGJpbmRGdW5jdGlvbnM6SC5kYi5iaW5kRnVuY3Rpb25zfX07ZnVuY3Rpb24gX01lKGk9e30pe3ZhciBmO2khPW51bGwmJmkuZm9udEZhbWlseSYmISgoZj1pLnRoZW1lVmFyaWFibGVzKSE9bnVsbCYmZi5mb250RmFtaWx5KSYmKGkudGhlbWVWYXJpYWJsZXN8fChpLnRoZW1lVmFyaWFibGVzPXt9KSxpLnRoZW1lVmFyaWFibGVzLmZvbnRGYW1pbHk9aS5mb250RmFtaWx5KSxzU2UoaSksaSE9bnVsbCYmaS50aGVtZSYmaS50aGVtZSBpbiBtNT9pLnRoZW1lVmFyaWFibGVzPW01W2kudGhlbWVdLmdldFRoZW1lVmFyaWFibGVzKGkudGhlbWVWYXJpYWJsZXMpOmkmJihpLnRoZW1lVmFyaWFibGVzPW01LmRlZmF1bHQuZ2V0VGhlbWVWYXJpYWJsZXMoaS50aGVtZVZhcmlhYmxlcykpO2NvbnN0IGE9dHlwZW9mIGk9PSJvYmplY3QiP2lTZShpKTp0T3QoKTt6ZnQoYS5sb2dMZXZlbCkscGR0KCl9ZnVuY3Rpb24gQ01lKGksYSxmLHApe3RNZShhLGkpLGVNZShhLGYscCxhLmF0dHIoImlkIikpfWNvbnN0IEoxPU9iamVjdC5mcmVlemUoe3JlbmRlcjpUTWUscGFyc2U6dk1lLHBhcnNlRGlyZWN0aXZlOkZXLGdldERpYWdyYW1Gcm9tVGV4dDpFZHQsaW5pdGlhbGl6ZTpfTWUsZ2V0Q29uZmlnOkRlLHNldENvbmZpZzplT3QsZ2V0U2l0ZUNvbmZpZzp0T3QsdXBkYXRlU2l0ZUNvbmZpZzphU2UscmVzZXQ6KCk9PntPVygpfSxnbG9iYWxSZXNldDooKT0+e09XKGk5KX0sZGVmYXVsdENvbmZpZzppOX0pO3pmdChEZSgpLmxvZ0xldmVsKSxPVyhEZSgpKTtjb25zdCBTTWU9YXN5bmMoKT0+e1d0LmRlYnVnKCJMb2FkaW5nIHJlZ2lzdGVyZWQgZGlhZ3JhbXMiKTtjb25zdCBhPShhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoT2JqZWN0LmVudHJpZXMoT0EpLm1hcChhc3luYyhbZix7ZGV0ZWN0b3I6cCxsb2FkZXI6dn1dKT0+e2lmKHYpdHJ5e2dkdChmKX1jYXRjaHt0cnl7Y29uc3R7ZGlhZ3JhbTpiLGlkOkV9PWF3YWl0IHYoKTtSVyhFLGIscCl9Y2F0Y2goYil7dGhyb3cgV3QuZXJyb3IoYEZhaWxlZCB0byBsb2FkIGV4dGVybmFsIGRpYWdyYW0gd2l0aCBrZXkgJHtmfS4gUmVtb3ZpbmcgZnJvbSBkZXRlY3RvcnMuYCksZGVsZXRlIE9BW2ZdLGJ9fX0pKSkuZmlsdGVyKGY9PmYuc3RhdHVzPT09InJlamVjdGVkIik7aWYoYS5sZW5ndGg+MCl7V3QuZXJyb3IoYEZhaWxlZCB0byBsb2FkICR7YS5sZW5ndGh9IGV4dGVybmFsIGRpYWdyYW1zYCk7Zm9yKGNvbnN0IGYgb2YgYSlXdC5lcnJvcihmKTt0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkICR7YS5sZW5ndGh9IGV4dGVybmFsIGRpYWdyYW1zYCl9fSxBTWU9KGksYSxmKT0+e1d0Lndhcm4oaSkscUl0KGkpPyhmJiZmKGkuc3RyLGkuaGFzaCksYS5wdXNoKHsuLi5pLG1lc3NhZ2U6aS5zdHIsZXJyb3I6aX0pKTooZiYmZihpKSxpIGluc3RhbmNlb2YgRXJyb3ImJmEucHVzaCh7c3RyOmkubWVzc2FnZSxtZXNzYWdlOmkubWVzc2FnZSxoYXNoOmkubmFtZSxlcnJvcjppfSkpfSxvTnQ9YXN5bmMgZnVuY3Rpb24oaT17cXVlcnlTZWxlY3RvcjoiLm1lcm1haWQifSl7dHJ5e2F3YWl0IExNZShpKX1jYXRjaChhKXtpZihxSXQoYSkmJld0LmVycm9yKGEuc3RyKSxQYi5wYXJzZUVycm9yJiZQYi5wYXJzZUVycm9yKGEpLCFpLnN1cHByZXNzRXJyb3JzKXRocm93IFd0LmVycm9yKCJVc2UgdGhlIHN1cHByZXNzRXJyb3JzIG9wdGlvbiB0byBzdXBwcmVzcyB0aGVzZSBlcnJvcnMiKSxhfX0sTE1lPWFzeW5jIGZ1bmN0aW9uKHtwb3N0UmVuZGVyQ2FsbGJhY2s6aSxxdWVyeVNlbGVjdG9yOmEsbm9kZXM6Zn09e3F1ZXJ5U2VsZWN0b3I6Ii5tZXJtYWlkIn0pe2NvbnN0IHA9SjEuZ2V0Q29uZmlnKCk7V3QuZGVidWcoYCR7aT8iIjoiTm8gIn1DYWxsYmFjayBmdW5jdGlvbiBmb3VuZGApO2xldCB2O2lmKGYpdj1mO2Vsc2UgaWYoYSl2PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIk5vZGVzIGFuZCBxdWVyeVNlbGVjdG9yIGFyZSBib3RoIHVuZGVmaW5lZCIpO1d0LmRlYnVnKGBGb3VuZCAke3YubGVuZ3RofSBkaWFncmFtc2ApLChwPT1udWxsP3ZvaWQgMDpwLnN0YXJ0T25Mb2FkKSE9PXZvaWQgMCYmKFd0LmRlYnVnKCJTdGFydCBPbiBMb2FkOiAiKyhwPT1udWxsP3ZvaWQgMDpwLnN0YXJ0T25Mb2FkKSksSjEudXBkYXRlU2l0ZUNvbmZpZyh7c3RhcnRPbkxvYWQ6cD09bnVsbD92b2lkIDA6cC5zdGFydE9uTG9hZH0pKTtjb25zdCBtPW5ldyB0by5pbml0SWRHZW5lcmF0b3IocC5kZXRlcm1pbmlzdGljSWRzLHAuZGV0ZXJtaW5pc3RpY0lEU2VlZCk7bGV0IGI7Y29uc3QgRT1bXTtmb3IoY29uc3QgQyBvZiBBcnJheS5mcm9tKHYpKXtXdC5pbmZvKCJSZW5kZXJpbmcgZGlhZ3JhbTogIitDLmlkKTsvKiEgQ2hlY2sgaWYgcHJldmlvdXNseSBwcm9jZXNzZWQgKi9pZihDLmdldEF0dHJpYnV0ZSgiZGF0YS1wcm9jZXNzZWQiKSljb250aW51ZTtDLnNldEF0dHJpYnV0ZSgiZGF0YS1wcm9jZXNzZWQiLCJ0cnVlIik7Y29uc3QgQT1gbWVybWFpZC0ke20ubmV4dCgpfWA7Yj1DLmlubmVySFRNTCxiPXdBKHRvLmVudGl0eURlY29kZShiKSkudHJpbSgpLnJlcGxhY2UoLzxiclxzKlwvPz4vZ2ksIjxici8+Iik7Y29uc3QgUD10by5kZXRlY3RJbml0KGIpO1AmJld0LmRlYnVnKCJEZXRlY3RlZCBlYXJseSByZWluaXQ6ICIsUCk7dHJ5e2NvbnN0e3N2ZzpGLGJpbmRGdW5jdGlvbnM6an09YXdhaXQgaE50KEEsYixDKTtDLmlubmVySFRNTD1GLGkmJmF3YWl0IGkoQSksaiYmaihDKX1jYXRjaChGKXtBTWUoRixFLFBiLnBhcnNlRXJyb3IpfX1pZihFLmxlbmd0aD4wKXRocm93IEVbMF19LGNOdD1mdW5jdGlvbihpKXtKMS5pbml0aWFsaXplKGkpfSxNTWU9YXN5bmMgZnVuY3Rpb24oaSxhLGYpe1d0Lndhcm4oIm1lcm1haWQuaW5pdCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHJ1biBpbnN0ZWFkLiIpLGkmJmNOdChpKTtjb25zdCBwPXtwb3N0UmVuZGVyQ2FsbGJhY2s6ZixxdWVyeVNlbGVjdG9yOiIubWVybWFpZCJ9O3R5cGVvZiBhPT0ic3RyaW5nIj9wLnF1ZXJ5U2VsZWN0b3I9YTphJiYoYSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50P3Aubm9kZXM9W2FdOnAubm9kZXM9YSksYXdhaXQgb050KHApfSxETWU9YXN5bmMoaSx7bGF6eUxvYWQ6YT0hMH09e30pPT57aUl0KC4uLmkpLGE9PT0hMSYmYXdhaXQgU01lKCl9LHVOdD1mdW5jdGlvbigpe2lmKFBiLnN0YXJ0T25Mb2FkKXtjb25zdHtzdGFydE9uTG9hZDppfT1KMS5nZXRDb25maWcoKTtpJiZQYi5ydW4oKS5jYXRjaChhPT5XdC5lcnJvcigiTWVybWFpZCBmYWlsZWQgdG8gaW5pdGlhbGl6ZSIsYSkpfX07aWYodHlwZW9mIGRvY3VtZW50PCJ1Iil7LyohCiAqIFdhaXQgZm9yIGRvY3VtZW50IGxvYWRlZCBiZWZvcmUgc3RhcnRpbmcgdGhlIGV4ZWN1dGlvbgogKi93aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsdU50LCExKX1jb25zdCBJTWU9ZnVuY3Rpb24oaSl7UGIucGFyc2VFcnJvcj1pfSxIVz1bXTtsZXQgQWR0PSExO2NvbnN0IGxOdD1hc3luYygpPT57aWYoIUFkdCl7Zm9yKEFkdD0hMDtIVy5sZW5ndGg+MDspe2NvbnN0IGk9SFcuc2hpZnQoKTtpZihpKXRyeXthd2FpdCBpKCl9Y2F0Y2goYSl7V3QuZXJyb3IoIkVycm9yIGV4ZWN1dGluZyBxdWV1ZSIsYSl9fUFkdD0hMX19LE9NZT1hc3luYyhpLGEpPT5uZXcgUHJvbWlzZSgoZixwKT0+e2NvbnN0IHY9KCk9Pm5ldyBQcm9taXNlKChtLGIpPT57SjEucGFyc2UoaSxhKS50aGVuKEU9PnttKEUpLGYoRSl9LEU9Pnt2YXIgQztXdC5lcnJvcigiRXJyb3IgcGFyc2luZyIsRSksKEM9UGIucGFyc2VFcnJvcik9PW51bGx8fEMuY2FsbChQYixFKSxiKEUpLHAoRSl9KX0pO0hXLnB1c2godiksbE50KCkuY2F0Y2gocCl9KSxoTnQ9KGksYSxmKT0+bmV3IFByb21pc2UoKHAsdik9Pntjb25zdCBtPSgpPT5uZXcgUHJvbWlzZSgoYixFKT0+e0oxLnJlbmRlcihpLGEsZikudGhlbihDPT57YihDKSxwKEMpfSxDPT57dmFyIEE7V3QuZXJyb3IoIkVycm9yIHBhcnNpbmciLEMpLChBPVBiLnBhcnNlRXJyb3IpPT1udWxsfHxBLmNhbGwoUGIsQyksRShDKSx2KEMpfSl9KTtIVy5wdXNoKG0pLGxOdCgpLmNhdGNoKHYpfSksUGI9e3N0YXJ0T25Mb2FkOiEwLG1lcm1haWRBUEk6SjEscGFyc2U6T01lLHJlbmRlcjpoTnQsaW5pdDpNTWUscnVuOm9OdCxyZWdpc3RlckV4dGVybmFsRGlhZ3JhbXM6RE1lLGluaXRpYWxpemU6Y050LHBhcnNlRXJyb3I6dm9pZCAwLGNvbnRlbnRMb2FkZWQ6dU50LHNldFBhcnNlRXJyb3JIYW5kbGVyOklNZSxkZXRlY3RUeXBlOmhXfTt2YXIgVlc9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihHYSxfcixxcixPaSl7Zm9yKHFyPXFyfHx7fSxPaT1HYS5sZW5ndGg7T2ktLTtxcltHYVtPaV1dPV9yKTtyZXR1cm4gcXJ9LGE9WzEsNl0sZj1bMSw3XSxwPVsxLDhdLHY9WzEsOV0sbT1bMSwxNl0sYj1bMSwxMV0sRT1bMSwxMl0sQz1bMSwxM10sQT1bMSwxNF0sUD1bMSwxNV0sRj1bMSwyN10saj1bMSwzM10sUj1bMSwzNF0sSD1bMSwzNV0sWT1bMSwzNl0scnQ9WzEsMzddLEo9WzEsNzJdLGl0PVsxLDczXSxmdD1bMSw3NF0sVHQ9WzEsNzVdLGt0PVsxLDc2XSxtdD1bMSw3N10sY3Q9WzEsNzhdLHl0PVsxLDM4XSxzdD1bMSwzOV0seHQ9WzEsNDBdLGh0PVsxLDQxXSxkdD1bMSw0Ml0sQ3Q9WzEsNDNdLHR0PVsxLDQ0XSxQdD1bMSw0NV0scHQ9WzEsNDZdLEZ0PVsxLDQ3XSxYPVsxLDQ4XSxSdD1bMSw0OV0sQnQ9WzEsNTBdLHZ0PVsxLDUxXSxPdD1bMSw1Ml0sVnQ9WzEsNTNdLHFlPVsxLDU0XSxfbj1bMSw1NV0sVGU9WzEsNTZdLFduPVsxLDU3XSxBZT1bMSw1OV0sbmU9WzEsNjBdLGtlPVsxLDYxXSxWZT1bMSw2Ml0sRWU9WzEsNjNdLEhlPVsxLDY0XSxDZT1bMSw2NV0sJGU9WzEsNjZdLHllPVsxLDY3XSxmbj1bMSw2OF0sWXQ9WzEsNjldLE1pPVsyNCw1Ml0scXQ9WzI0LDQ0LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0XSx6aT1bMTUsMjQsNDQsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODRdLFNlPVsxLDk0XSxraT1bMSw5NV0sUmk9WzEsOTZdLHBpPVsxLDk3XSxiaT1bMTUsMjQsNTJdLGRuPVs3LDgsOSwxMCwxOCwyMiwyNSwyNiwyNywyOF0sTm49WzE1LDI0LDQzLDUyXSxXcj1bMTUsMjQsNDMsNTIsODYsODcsODksOTBdLExpPVsxNSw0M10saXM9WzQ0LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0XSxUcz17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsbWVybWFpZERvYzo0LGRpcmVjdGlvbjo1LGRpcmVjdGl2ZTo2LGRpcmVjdGlvbl90Yjo3LGRpcmVjdGlvbl9idDo4LGRpcmVjdGlvbl9ybDo5LGRpcmVjdGlvbl9scjoxMCxncmFwaENvbmZpZzoxMSxvcGVuRGlyZWN0aXZlOjEyLHR5cGVEaXJlY3RpdmU6MTMsY2xvc2VEaXJlY3RpdmU6MTQsTkVXTElORToxNSwiOiI6MTYsYXJnRGlyZWN0aXZlOjE3LG9wZW5fZGlyZWN0aXZlOjE4LHR5cGVfZGlyZWN0aXZlOjE5LGFyZ19kaXJlY3RpdmU6MjAsY2xvc2VfZGlyZWN0aXZlOjIxLEM0X0NPTlRFWFQ6MjIsc3RhdGVtZW50czoyMyxFT0Y6MjQsQzRfQ09OVEFJTkVSOjI1LEM0X0NPTVBPTkVOVDoyNixDNF9EWU5BTUlDOjI3LEM0X0RFUExPWU1FTlQ6Mjgsb3RoZXJTdGF0ZW1lbnRzOjI5LGRpYWdyYW1TdGF0ZW1lbnRzOjMwLG90aGVyU3RhdGVtZW50OjMxLHRpdGxlOjMyLGFjY0Rlc2NyaXB0aW9uOjMzLGFjY190aXRsZTozNCxhY2NfdGl0bGVfdmFsdWU6MzUsYWNjX2Rlc2NyOjM2LGFjY19kZXNjcl92YWx1ZTozNyxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjM4LGJvdW5kYXJ5U3RhdGVtZW50OjM5LGJvdW5kYXJ5U3RhcnRTdGF0ZW1lbnQ6NDAsYm91bmRhcnlTdG9wU3RhdGVtZW50OjQxLGJvdW5kYXJ5U3RhcnQ6NDIsTEJSQUNFOjQzLEVOVEVSUFJJU0VfQk9VTkRBUlk6NDQsYXR0cmlidXRlczo0NSxTWVNURU1fQk9VTkRBUlk6NDYsQk9VTkRBUlk6NDcsQ09OVEFJTkVSX0JPVU5EQVJZOjQ4LE5PREU6NDksTk9ERV9MOjUwLE5PREVfUjo1MSxSQlJBQ0U6NTIsZGlhZ3JhbVN0YXRlbWVudDo1MyxQRVJTT046NTQsUEVSU09OX0VYVDo1NSxTWVNURU06NTYsU1lTVEVNX0RCOjU3LFNZU1RFTV9RVUVVRTo1OCxTWVNURU1fRVhUOjU5LFNZU1RFTV9FWFRfREI6NjAsU1lTVEVNX0VYVF9RVUVVRTo2MSxDT05UQUlORVI6NjIsQ09OVEFJTkVSX0RCOjYzLENPTlRBSU5FUl9RVUVVRTo2NCxDT05UQUlORVJfRVhUOjY1LENPTlRBSU5FUl9FWFRfREI6NjYsQ09OVEFJTkVSX0VYVF9RVUVVRTo2NyxDT01QT05FTlQ6NjgsQ09NUE9ORU5UX0RCOjY5LENPTVBPTkVOVF9RVUVVRTo3MCxDT01QT05FTlRfRVhUOjcxLENPTVBPTkVOVF9FWFRfREI6NzIsQ09NUE9ORU5UX0VYVF9RVUVVRTo3MyxSRUw6NzQsQklSRUw6NzUsUkVMX1U6NzYsUkVMX0Q6NzcsUkVMX0w6NzgsUkVMX1I6NzksUkVMX0I6ODAsUkVMX0lOREVYOjgxLFVQREFURV9FTF9TVFlMRTo4MixVUERBVEVfUkVMX1NUWUxFOjgzLFVQREFURV9MQVlPVVRfQ09ORklHOjg0LGF0dHJpYnV0ZTo4NSxTVFI6ODYsU1RSX0tFWTo4NyxTVFJfVkFMVUU6ODgsQVRUUklCVVRFOjg5LEFUVFJJQlVURV9FTVBUWTo5MCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNzoiZGlyZWN0aW9uX3RiIiw4OiJkaXJlY3Rpb25fYnQiLDk6ImRpcmVjdGlvbl9ybCIsMTA6ImRpcmVjdGlvbl9sciIsMTU6Ik5FV0xJTkUiLDE2OiI6IiwxODoib3Blbl9kaXJlY3RpdmUiLDE5OiJ0eXBlX2RpcmVjdGl2ZSIsMjA6ImFyZ19kaXJlY3RpdmUiLDIxOiJjbG9zZV9kaXJlY3RpdmUiLDIyOiJDNF9DT05URVhUIiwyNDoiRU9GIiwyNToiQzRfQ09OVEFJTkVSIiwyNjoiQzRfQ09NUE9ORU5UIiwyNzoiQzRfRFlOQU1JQyIsMjg6IkM0X0RFUExPWU1FTlQiLDMyOiJ0aXRsZSIsMzM6ImFjY0Rlc2NyaXB0aW9uIiwzNDoiYWNjX3RpdGxlIiwzNToiYWNjX3RpdGxlX3ZhbHVlIiwzNjoiYWNjX2Rlc2NyIiwzNzoiYWNjX2Rlc2NyX3ZhbHVlIiwzODoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsNDM6IkxCUkFDRSIsNDQ6IkVOVEVSUFJJU0VfQk9VTkRBUlkiLDQ2OiJTWVNURU1fQk9VTkRBUlkiLDQ3OiJCT1VOREFSWSIsNDg6IkNPTlRBSU5FUl9CT1VOREFSWSIsNDk6Ik5PREUiLDUwOiJOT0RFX0wiLDUxOiJOT0RFX1IiLDUyOiJSQlJBQ0UiLDU0OiJQRVJTT04iLDU1OiJQRVJTT05fRVhUIiw1NjoiU1lTVEVNIiw1NzoiU1lTVEVNX0RCIiw1ODoiU1lTVEVNX1FVRVVFIiw1OToiU1lTVEVNX0VYVCIsNjA6IlNZU1RFTV9FWFRfREIiLDYxOiJTWVNURU1fRVhUX1FVRVVFIiw2MjoiQ09OVEFJTkVSIiw2MzoiQ09OVEFJTkVSX0RCIiw2NDoiQ09OVEFJTkVSX1FVRVVFIiw2NToiQ09OVEFJTkVSX0VYVCIsNjY6IkNPTlRBSU5FUl9FWFRfREIiLDY3OiJDT05UQUlORVJfRVhUX1FVRVVFIiw2ODoiQ09NUE9ORU5UIiw2OToiQ09NUE9ORU5UX0RCIiw3MDoiQ09NUE9ORU5UX1FVRVVFIiw3MToiQ09NUE9ORU5UX0VYVCIsNzI6IkNPTVBPTkVOVF9FWFRfREIiLDczOiJDT01QT05FTlRfRVhUX1FVRVVFIiw3NDoiUkVMIiw3NToiQklSRUwiLDc2OiJSRUxfVSIsNzc6IlJFTF9EIiw3ODoiUkVMX0wiLDc5OiJSRUxfUiIsODA6IlJFTF9CIiw4MToiUkVMX0lOREVYIiw4MjoiVVBEQVRFX0VMX1NUWUxFIiw4MzoiVVBEQVRFX1JFTF9TVFlMRSIsODQ6IlVQREFURV9MQVlPVVRfQ09ORklHIiw4NjoiU1RSIiw4NzoiU1RSX0tFWSIsODg6IlNUUl9WQUxVRSIsODk6IkFUVFJJQlVURSIsOTA6IkFUVFJJQlVURV9FTVBUWSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywxXSxbMywxXSxbMywyXSxbNSwxXSxbNSwxXSxbNSwxXSxbNSwxXSxbNCwxXSxbNiw0XSxbNiw2XSxbMTIsMV0sWzEzLDFdLFsxNywxXSxbMTQsMV0sWzExLDRdLFsxMSw0XSxbMTEsNF0sWzExLDRdLFsxMSw0XSxbMjMsMV0sWzIzLDFdLFsyMywyXSxbMjksMV0sWzI5LDJdLFsyOSwzXSxbMzEsMV0sWzMxLDFdLFszMSwyXSxbMzEsMl0sWzMxLDFdLFszOSwzXSxbNDAsM10sWzQwLDNdLFs0MCw0XSxbNDIsMl0sWzQyLDJdLFs0MiwyXSxbNDIsMl0sWzQyLDJdLFs0MiwyXSxbNDIsMl0sWzQxLDFdLFszMCwxXSxbMzAsMl0sWzMwLDNdLFs1MywyXSxbNTMsMl0sWzUzLDJdLFs1MywyXSxbNTMsMl0sWzUzLDJdLFs1MywyXSxbNTMsMl0sWzUzLDJdLFs1MywyXSxbNTMsMl0sWzUzLDJdLFs1MywyXSxbNTMsMl0sWzUzLDJdLFs1MywyXSxbNTMsMl0sWzUzLDJdLFs1MywyXSxbNTMsMl0sWzUzLDFdLFs1MywyXSxbNTMsMl0sWzUzLDJdLFs1MywyXSxbNTMsMl0sWzUzLDJdLFs1MywyXSxbNTMsMl0sWzUzLDJdLFs1MywyXSxbNTMsMl0sWzQ1LDFdLFs0NSwyXSxbODUsMV0sWzg1LDJdLFs4NSwxXSxbODUsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oX3IscXIsT2ksZ3IsSnMsVm4sWGMpe3ZhciBFcj1Wbi5sZW5ndGgtMTtzd2l0Y2goSnMpe2Nhc2UgNDpnci5zZXREaXJlY3Rpb24oIlRCIik7YnJlYWs7Y2FzZSA1OmdyLnNldERpcmVjdGlvbigiQlQiKTticmVhaztjYXNlIDY6Z3Iuc2V0RGlyZWN0aW9uKCJSTCIpO2JyZWFrO2Nhc2UgNzpnci5zZXREaXJlY3Rpb24oIkxSIik7YnJlYWs7Y2FzZSAxMTpnci5wYXJzZURpcmVjdGl2ZSgiJSV7Iiwib3Blbl9kaXJlY3RpdmUiKTticmVhaztjYXNlIDEyOmJyZWFrO2Nhc2UgMTM6Vm5bRXJdPVZuW0VyXS50cmltKCkucmVwbGFjZSgvJy9nLCciJyksZ3IucGFyc2VEaXJlY3RpdmUoVm5bRXJdLCJhcmdfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAxNDpnci5wYXJzZURpcmVjdGl2ZSgifSUlIiwiY2xvc2VfZGlyZWN0aXZlIiwiYzRDb250ZXh0Iik7YnJlYWs7Y2FzZSAxNTpjYXNlIDE2OmNhc2UgMTc6Y2FzZSAxODpjYXNlIDE5OmdyLnNldEM0VHlwZShWbltFci0zXSk7YnJlYWs7Y2FzZSAyNjpnci5zZXRUaXRsZShWbltFcl0uc3Vic3RyaW5nKDYpKSx0aGlzLiQ9Vm5bRXJdLnN1YnN0cmluZyg2KTticmVhaztjYXNlIDI3OmdyLnNldEFjY0Rlc2NyaXB0aW9uKFZuW0VyXS5zdWJzdHJpbmcoMTUpKSx0aGlzLiQ9Vm5bRXJdLnN1YnN0cmluZygxNSk7YnJlYWs7Y2FzZSAyODp0aGlzLiQ9Vm5bRXJdLnRyaW0oKSxnci5zZXRUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMjk6Y2FzZSAzMDp0aGlzLiQ9Vm5bRXJdLnRyaW0oKSxnci5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgMzU6Y2FzZSAzNjpWbltFcl0uc3BsaWNlKDIsMCwiRU5URVJQUklTRSIpLGdyLmFkZFBlcnNvbk9yU3lzdGVtQm91bmRhcnkoLi4uVm5bRXJdKSx0aGlzLiQ9Vm5bRXJdO2JyZWFrO2Nhc2UgMzc6Z3IuYWRkUGVyc29uT3JTeXN0ZW1Cb3VuZGFyeSguLi5WbltFcl0pLHRoaXMuJD1WbltFcl07YnJlYWs7Y2FzZSAzODpWbltFcl0uc3BsaWNlKDIsMCwiQ09OVEFJTkVSIiksZ3IuYWRkQ29udGFpbmVyQm91bmRhcnkoLi4uVm5bRXJdKSx0aGlzLiQ9Vm5bRXJdO2JyZWFrO2Nhc2UgMzk6Z3IuYWRkRGVwbG95bWVudE5vZGUoIm5vZGUiLC4uLlZuW0VyXSksdGhpcy4kPVZuW0VyXTticmVhaztjYXNlIDQwOmdyLmFkZERlcGxveW1lbnROb2RlKCJub2RlTCIsLi4uVm5bRXJdKSx0aGlzLiQ9Vm5bRXJdO2JyZWFrO2Nhc2UgNDE6Z3IuYWRkRGVwbG95bWVudE5vZGUoIm5vZGVSIiwuLi5WbltFcl0pLHRoaXMuJD1WbltFcl07YnJlYWs7Y2FzZSA0Mjpnci5wb3BCb3VuZGFyeVBhcnNlU3RhY2soKTticmVhaztjYXNlIDQ2OmdyLmFkZFBlcnNvbk9yU3lzdGVtKCJwZXJzb24iLC4uLlZuW0VyXSksdGhpcy4kPVZuW0VyXTticmVhaztjYXNlIDQ3OmdyLmFkZFBlcnNvbk9yU3lzdGVtKCJleHRlcm5hbF9wZXJzb24iLC4uLlZuW0VyXSksdGhpcy4kPVZuW0VyXTticmVhaztjYXNlIDQ4OmdyLmFkZFBlcnNvbk9yU3lzdGVtKCJzeXN0ZW0iLC4uLlZuW0VyXSksdGhpcy4kPVZuW0VyXTticmVhaztjYXNlIDQ5OmdyLmFkZFBlcnNvbk9yU3lzdGVtKCJzeXN0ZW1fZGIiLC4uLlZuW0VyXSksdGhpcy4kPVZuW0VyXTticmVhaztjYXNlIDUwOmdyLmFkZFBlcnNvbk9yU3lzdGVtKCJzeXN0ZW1fcXVldWUiLC4uLlZuW0VyXSksdGhpcy4kPVZuW0VyXTticmVhaztjYXNlIDUxOmdyLmFkZFBlcnNvbk9yU3lzdGVtKCJleHRlcm5hbF9zeXN0ZW0iLC4uLlZuW0VyXSksdGhpcy4kPVZuW0VyXTticmVhaztjYXNlIDUyOmdyLmFkZFBlcnNvbk9yU3lzdGVtKCJleHRlcm5hbF9zeXN0ZW1fZGIiLC4uLlZuW0VyXSksdGhpcy4kPVZuW0VyXTticmVhaztjYXNlIDUzOmdyLmFkZFBlcnNvbk9yU3lzdGVtKCJleHRlcm5hbF9zeXN0ZW1fcXVldWUiLC4uLlZuW0VyXSksdGhpcy4kPVZuW0VyXTticmVhaztjYXNlIDU0OmdyLmFkZENvbnRhaW5lcigiY29udGFpbmVyIiwuLi5WbltFcl0pLHRoaXMuJD1WbltFcl07YnJlYWs7Y2FzZSA1NTpnci5hZGRDb250YWluZXIoImNvbnRhaW5lcl9kYiIsLi4uVm5bRXJdKSx0aGlzLiQ9Vm5bRXJdO2JyZWFrO2Nhc2UgNTY6Z3IuYWRkQ29udGFpbmVyKCJjb250YWluZXJfcXVldWUiLC4uLlZuW0VyXSksdGhpcy4kPVZuW0VyXTticmVhaztjYXNlIDU3OmdyLmFkZENvbnRhaW5lcigiZXh0ZXJuYWxfY29udGFpbmVyIiwuLi5WbltFcl0pLHRoaXMuJD1WbltFcl07YnJlYWs7Y2FzZSA1ODpnci5hZGRDb250YWluZXIoImV4dGVybmFsX2NvbnRhaW5lcl9kYiIsLi4uVm5bRXJdKSx0aGlzLiQ9Vm5bRXJdO2JyZWFrO2Nhc2UgNTk6Z3IuYWRkQ29udGFpbmVyKCJleHRlcm5hbF9jb250YWluZXJfcXVldWUiLC4uLlZuW0VyXSksdGhpcy4kPVZuW0VyXTticmVhaztjYXNlIDYwOmdyLmFkZENvbXBvbmVudCgiY29tcG9uZW50IiwuLi5WbltFcl0pLHRoaXMuJD1WbltFcl07YnJlYWs7Y2FzZSA2MTpnci5hZGRDb21wb25lbnQoImNvbXBvbmVudF9kYiIsLi4uVm5bRXJdKSx0aGlzLiQ9Vm5bRXJdO2JyZWFrO2Nhc2UgNjI6Z3IuYWRkQ29tcG9uZW50KCJjb21wb25lbnRfcXVldWUiLC4uLlZuW0VyXSksdGhpcy4kPVZuW0VyXTticmVhaztjYXNlIDYzOmdyLmFkZENvbXBvbmVudCgiZXh0ZXJuYWxfY29tcG9uZW50IiwuLi5WbltFcl0pLHRoaXMuJD1WbltFcl07YnJlYWs7Y2FzZSA2NDpnci5hZGRDb21wb25lbnQoImV4dGVybmFsX2NvbXBvbmVudF9kYiIsLi4uVm5bRXJdKSx0aGlzLiQ9Vm5bRXJdO2JyZWFrO2Nhc2UgNjU6Z3IuYWRkQ29tcG9uZW50KCJleHRlcm5hbF9jb21wb25lbnRfcXVldWUiLC4uLlZuW0VyXSksdGhpcy4kPVZuW0VyXTticmVhaztjYXNlIDY3OmdyLmFkZFJlbCgicmVsIiwuLi5WbltFcl0pLHRoaXMuJD1WbltFcl07YnJlYWs7Y2FzZSA2ODpnci5hZGRSZWwoImJpcmVsIiwuLi5WbltFcl0pLHRoaXMuJD1WbltFcl07YnJlYWs7Y2FzZSA2OTpnci5hZGRSZWwoInJlbF91IiwuLi5WbltFcl0pLHRoaXMuJD1WbltFcl07YnJlYWs7Y2FzZSA3MDpnci5hZGRSZWwoInJlbF9kIiwuLi5WbltFcl0pLHRoaXMuJD1WbltFcl07YnJlYWs7Y2FzZSA3MTpnci5hZGRSZWwoInJlbF9sIiwuLi5WbltFcl0pLHRoaXMuJD1WbltFcl07YnJlYWs7Y2FzZSA3Mjpnci5hZGRSZWwoInJlbF9yIiwuLi5WbltFcl0pLHRoaXMuJD1WbltFcl07YnJlYWs7Y2FzZSA3Mzpnci5hZGRSZWwoInJlbF9iIiwuLi5WbltFcl0pLHRoaXMuJD1WbltFcl07YnJlYWs7Y2FzZSA3NDpWbltFcl0uc3BsaWNlKDAsMSksZ3IuYWRkUmVsKCJyZWwiLC4uLlZuW0VyXSksdGhpcy4kPVZuW0VyXTticmVhaztjYXNlIDc1OmdyLnVwZGF0ZUVsU3R5bGUoInVwZGF0ZV9lbF9zdHlsZSIsLi4uVm5bRXJdKSx0aGlzLiQ9Vm5bRXJdO2JyZWFrO2Nhc2UgNzY6Z3IudXBkYXRlUmVsU3R5bGUoInVwZGF0ZV9yZWxfc3R5bGUiLC4uLlZuW0VyXSksdGhpcy4kPVZuW0VyXTticmVhaztjYXNlIDc3OmdyLnVwZGF0ZUxheW91dENvbmZpZygidXBkYXRlX2xheW91dF9jb25maWciLC4uLlZuW0VyXSksdGhpcy4kPVZuW0VyXTticmVhaztjYXNlIDc4OnRoaXMuJD1bVm5bRXJdXTticmVhaztjYXNlIDc5OlZuW0VyXS51bnNoaWZ0KFZuW0VyLTFdKSx0aGlzLiQ9Vm5bRXJdO2JyZWFrO2Nhc2UgODA6Y2FzZSA4Mjp0aGlzLiQ9Vm5bRXJdLnRyaW0oKTticmVhaztjYXNlIDgxOmxldCBNYz17fTtNY1tWbltFci0xXS50cmltKCldPVZuW0VyXS50cmltKCksdGhpcy4kPU1jO2JyZWFrO2Nhc2UgODM6dGhpcy4kPSIiO2JyZWFrfX0sdGFibGU6W3szOjEsNDoyLDU6Myw2OjQsNzphLDg6Ziw5OnAsMTA6diwxMTo1LDEyOjEwLDE4Om0sMjI6YiwyNTpFLDI2OkMsMjc6QSwyODpQfSx7MTpbM119LHsxOlsyLDFdfSx7MTpbMiwyXX0sezM6MTcsNDoyLDU6Myw2OjQsNzphLDg6Ziw5OnAsMTA6diwxMTo1LDEyOjEwLDE4Om0sMjI6YiwyNTpFLDI2OkMsMjc6QSwyODpQfSx7MTpbMiw4XX0sezE6WzIsNF19LHsxOlsyLDVdfSx7MTpbMiw2XX0sezE6WzIsN119LHsxMzoxOCwxOTpbMSwxOV19LHsxNTpbMSwyMF19LHsxNTpbMSwyMV19LHsxNTpbMSwyMl19LHsxNTpbMSwyM119LHsxNTpbMSwyNF19LHsxOTpbMiwxMV19LHsxOlsyLDNdfSx7MTQ6MjUsMTY6WzEsMjZdLDIxOkZ9LGkoWzE2LDIxXSxbMiwxMl0pLHsyMzoyOCwyOToyOSwzMDozMCwzMTozMSwzMjpqLDMzOlIsMzQ6SCwzNjpZLDM4OnJ0LDM5OjU4LDQwOjcwLDQyOjcxLDQ0OkosNDY6aXQsNDc6ZnQsNDg6VHQsNDk6a3QsNTA6bXQsNTE6Y3QsNTM6MzIsNTQ6eXQsNTU6c3QsNTY6eHQsNTc6aHQsNTg6ZHQsNTk6Q3QsNjA6dHQsNjE6UHQsNjI6cHQsNjM6RnQsNjQ6WCw2NTpSdCw2NjpCdCw2Nzp2dCw2ODpPdCw2OTpWdCw3MDpxZSw3MTpfbiw3MjpUZSw3MzpXbiw3NDpBZSw3NTpuZSw3NjprZSw3NzpWZSw3ODpFZSw3OTpIZSw4MDpDZSw4MTokZSw4Mjp5ZSw4Mzpmbiw4NDpZdH0sezIzOjc5LDI5OjI5LDMwOjMwLDMxOjMxLDMyOmosMzM6UiwzNDpILDM2OlksMzg6cnQsMzk6NTgsNDA6NzAsNDI6NzEsNDQ6Siw0NjppdCw0NzpmdCw0ODpUdCw0OTprdCw1MDptdCw1MTpjdCw1MzozMiw1NDp5dCw1NTpzdCw1Njp4dCw1NzpodCw1ODpkdCw1OTpDdCw2MDp0dCw2MTpQdCw2MjpwdCw2MzpGdCw2NDpYLDY1OlJ0LDY2OkJ0LDY3OnZ0LDY4Ok90LDY5OlZ0LDcwOnFlLDcxOl9uLDcyOlRlLDczOlduLDc0OkFlLDc1Om5lLDc2OmtlLDc3OlZlLDc4OkVlLDc5OkhlLDgwOkNlLDgxOiRlLDgyOnllLDgzOmZuLDg0Oll0fSx7MjM6ODAsMjk6MjksMzA6MzAsMzE6MzEsMzI6aiwzMzpSLDM0OkgsMzY6WSwzODpydCwzOTo1OCw0MDo3MCw0Mjo3MSw0NDpKLDQ2Oml0LDQ3OmZ0LDQ4OlR0LDQ5Omt0LDUwOm10LDUxOmN0LDUzOjMyLDU0Onl0LDU1OnN0LDU2Onh0LDU3Omh0LDU4OmR0LDU5OkN0LDYwOnR0LDYxOlB0LDYyOnB0LDYzOkZ0LDY0OlgsNjU6UnQsNjY6QnQsNjc6dnQsNjg6T3QsNjk6VnQsNzA6cWUsNzE6X24sNzI6VGUsNzM6V24sNzQ6QWUsNzU6bmUsNzY6a2UsNzc6VmUsNzg6RWUsNzk6SGUsODA6Q2UsODE6JGUsODI6eWUsODM6Zm4sODQ6WXR9LHsyMzo4MSwyOToyOSwzMDozMCwzMTozMSwzMjpqLDMzOlIsMzQ6SCwzNjpZLDM4OnJ0LDM5OjU4LDQwOjcwLDQyOjcxLDQ0OkosNDY6aXQsNDc6ZnQsNDg6VHQsNDk6a3QsNTA6bXQsNTE6Y3QsNTM6MzIsNTQ6eXQsNTU6c3QsNTY6eHQsNTc6aHQsNTg6ZHQsNTk6Q3QsNjA6dHQsNjE6UHQsNjI6cHQsNjM6RnQsNjQ6WCw2NTpSdCw2NjpCdCw2Nzp2dCw2ODpPdCw2OTpWdCw3MDpxZSw3MTpfbiw3MjpUZSw3MzpXbiw3NDpBZSw3NTpuZSw3NjprZSw3NzpWZSw3ODpFZSw3OTpIZSw4MDpDZSw4MTokZSw4Mjp5ZSw4Mzpmbiw4NDpZdH0sezIzOjgyLDI5OjI5LDMwOjMwLDMxOjMxLDMyOmosMzM6UiwzNDpILDM2OlksMzg6cnQsMzk6NTgsNDA6NzAsNDI6NzEsNDQ6Siw0NjppdCw0NzpmdCw0ODpUdCw0OTprdCw1MDptdCw1MTpjdCw1MzozMiw1NDp5dCw1NTpzdCw1Njp4dCw1NzpodCw1ODpkdCw1OTpDdCw2MDp0dCw2MTpQdCw2MjpwdCw2MzpGdCw2NDpYLDY1OlJ0LDY2OkJ0LDY3OnZ0LDY4Ok90LDY5OlZ0LDcwOnFlLDcxOl9uLDcyOlRlLDczOlduLDc0OkFlLDc1Om5lLDc2OmtlLDc3OlZlLDc4OkVlLDc5OkhlLDgwOkNlLDgxOiRlLDgyOnllLDgzOmZuLDg0Oll0fSx7MTU6WzEsODNdfSx7MTc6ODQsMjA6WzEsODVdfSx7MTU6WzIsMTRdfSx7MjQ6WzEsODZdfSxpKE1pLFsyLDIwXSx7NTM6MzIsMzk6NTgsNDA6NzAsNDI6NzEsMzA6ODcsNDQ6Siw0NjppdCw0NzpmdCw0ODpUdCw0OTprdCw1MDptdCw1MTpjdCw1NDp5dCw1NTpzdCw1Njp4dCw1NzpodCw1ODpkdCw1OTpDdCw2MDp0dCw2MTpQdCw2MjpwdCw2MzpGdCw2NDpYLDY1OlJ0LDY2OkJ0LDY3OnZ0LDY4Ok90LDY5OlZ0LDcwOnFlLDcxOl9uLDcyOlRlLDczOlduLDc0OkFlLDc1Om5lLDc2OmtlLDc3OlZlLDc4OkVlLDc5OkhlLDgwOkNlLDgxOiRlLDgyOnllLDgzOmZuLDg0Oll0fSksaShNaSxbMiwyMV0pLGkocXQsWzIsMjNdLHsxNTpbMSw4OF19KSxpKE1pLFsyLDQzXSx7MTU6WzEsODldfSksaSh6aSxbMiwyNl0pLGkoemksWzIsMjddKSx7MzU6WzEsOTBdfSx7Mzc6WzEsOTFdfSxpKHppLFsyLDMwXSksezQ1OjkyLDg1OjkzLDg2OlNlLDg3OmtpLDg5OlJpLDkwOnBpfSx7NDU6OTgsODU6OTMsODY6U2UsODc6a2ksODk6UmksOTA6cGl9LHs0NTo5OSw4NTo5Myw4NjpTZSw4NzpraSw4OTpSaSw5MDpwaX0sezQ1OjEwMCw4NTo5Myw4NjpTZSw4NzpraSw4OTpSaSw5MDpwaX0sezQ1OjEwMSw4NTo5Myw4NjpTZSw4NzpraSw4OTpSaSw5MDpwaX0sezQ1OjEwMiw4NTo5Myw4NjpTZSw4NzpraSw4OTpSaSw5MDpwaX0sezQ1OjEwMyw4NTo5Myw4NjpTZSw4NzpraSw4OTpSaSw5MDpwaX0sezQ1OjEwNCw4NTo5Myw4NjpTZSw4NzpraSw4OTpSaSw5MDpwaX0sezQ1OjEwNSw4NTo5Myw4NjpTZSw4NzpraSw4OTpSaSw5MDpwaX0sezQ1OjEwNiw4NTo5Myw4NjpTZSw4NzpraSw4OTpSaSw5MDpwaX0sezQ1OjEwNyw4NTo5Myw4NjpTZSw4NzpraSw4OTpSaSw5MDpwaX0sezQ1OjEwOCw4NTo5Myw4NjpTZSw4NzpraSw4OTpSaSw5MDpwaX0sezQ1OjEwOSw4NTo5Myw4NjpTZSw4NzpraSw4OTpSaSw5MDpwaX0sezQ1OjExMCw4NTo5Myw4NjpTZSw4NzpraSw4OTpSaSw5MDpwaX0sezQ1OjExMSw4NTo5Myw4NjpTZSw4NzpraSw4OTpSaSw5MDpwaX0sezQ1OjExMiw4NTo5Myw4NjpTZSw4NzpraSw4OTpSaSw5MDpwaX0sezQ1OjExMyw4NTo5Myw4NjpTZSw4NzpraSw4OTpSaSw5MDpwaX0sezQ1OjExNCw4NTo5Myw4NjpTZSw4NzpraSw4OTpSaSw5MDpwaX0sezQ1OjExNSw4NTo5Myw4NjpTZSw4NzpraSw4OTpSaSw5MDpwaX0sezQ1OjExNiw4NTo5Myw4NjpTZSw4NzpraSw4OTpSaSw5MDpwaX0saShiaSxbMiw2Nl0pLHs0NToxMTcsODU6OTMsODY6U2UsODc6a2ksODk6UmksOTA6cGl9LHs0NToxMTgsODU6OTMsODY6U2UsODc6a2ksODk6UmksOTA6cGl9LHs0NToxMTksODU6OTMsODY6U2UsODc6a2ksODk6UmksOTA6cGl9LHs0NToxMjAsODU6OTMsODY6U2UsODc6a2ksODk6UmksOTA6cGl9LHs0NToxMjEsODU6OTMsODY6U2UsODc6a2ksODk6UmksOTA6cGl9LHs0NToxMjIsODU6OTMsODY6U2UsODc6a2ksODk6UmksOTA6cGl9LHs0NToxMjMsODU6OTMsODY6U2UsODc6a2ksODk6UmksOTA6cGl9LHs0NToxMjQsODU6OTMsODY6U2UsODc6a2ksODk6UmksOTA6cGl9LHs0NToxMjUsODU6OTMsODY6U2UsODc6a2ksODk6UmksOTA6cGl9LHs0NToxMjYsODU6OTMsODY6U2UsODc6a2ksODk6UmksOTA6cGl9LHs0NToxMjcsODU6OTMsODY6U2UsODc6a2ksODk6UmksOTA6cGl9LHszMDoxMjgsMzk6NTgsNDA6NzAsNDI6NzEsNDQ6Siw0NjppdCw0NzpmdCw0ODpUdCw0OTprdCw1MDptdCw1MTpjdCw1MzozMiw1NDp5dCw1NTpzdCw1Njp4dCw1NzpodCw1ODpkdCw1OTpDdCw2MDp0dCw2MTpQdCw2MjpwdCw2MzpGdCw2NDpYLDY1OlJ0LDY2OkJ0LDY3OnZ0LDY4Ok90LDY5OlZ0LDcwOnFlLDcxOl9uLDcyOlRlLDczOlduLDc0OkFlLDc1Om5lLDc2OmtlLDc3OlZlLDc4OkVlLDc5OkhlLDgwOkNlLDgxOiRlLDgyOnllLDgzOmZuLDg0Oll0fSx7MTU6WzEsMTMwXSw0MzpbMSwxMjldfSx7NDU6MTMxLDg1OjkzLDg2OlNlLDg3OmtpLDg5OlJpLDkwOnBpfSx7NDU6MTMyLDg1OjkzLDg2OlNlLDg3OmtpLDg5OlJpLDkwOnBpfSx7NDU6MTMzLDg1OjkzLDg2OlNlLDg3OmtpLDg5OlJpLDkwOnBpfSx7NDU6MTM0LDg1OjkzLDg2OlNlLDg3OmtpLDg5OlJpLDkwOnBpfSx7NDU6MTM1LDg1OjkzLDg2OlNlLDg3OmtpLDg5OlJpLDkwOnBpfSx7NDU6MTM2LDg1OjkzLDg2OlNlLDg3OmtpLDg5OlJpLDkwOnBpfSx7NDU6MTM3LDg1OjkzLDg2OlNlLDg3OmtpLDg5OlJpLDkwOnBpfSx7MjQ6WzEsMTM4XX0sezI0OlsxLDEzOV19LHsyNDpbMSwxNDBdfSx7MjQ6WzEsMTQxXX0saShkbixbMiw5XSksezE0OjE0MiwyMTpGfSx7MjE6WzIsMTNdfSx7MTpbMiwxNV19LGkoTWksWzIsMjJdKSxpKHF0LFsyLDI0XSx7MzE6MzEsMjk6MTQzLDMyOmosMzM6UiwzNDpILDM2OlksMzg6cnR9KSxpKE1pLFsyLDQ0XSx7Mjk6MjksMzA6MzAsMzE6MzEsNTM6MzIsMzk6NTgsNDA6NzAsNDI6NzEsMjM6MTQ0LDMyOmosMzM6UiwzNDpILDM2OlksMzg6cnQsNDQ6Siw0NjppdCw0NzpmdCw0ODpUdCw0OTprdCw1MDptdCw1MTpjdCw1NDp5dCw1NTpzdCw1Njp4dCw1NzpodCw1ODpkdCw1OTpDdCw2MDp0dCw2MTpQdCw2MjpwdCw2MzpGdCw2NDpYLDY1OlJ0LDY2OkJ0LDY3OnZ0LDY4Ok90LDY5OlZ0LDcwOnFlLDcxOl9uLDcyOlRlLDczOlduLDc0OkFlLDc1Om5lLDc2OmtlLDc3OlZlLDc4OkVlLDc5OkhlLDgwOkNlLDgxOiRlLDgyOnllLDgzOmZuLDg0Oll0fSksaSh6aSxbMiwyOF0pLGkoemksWzIsMjldKSxpKGJpLFsyLDQ2XSksaShObixbMiw3OF0sezg1OjkzLDQ1OjE0NSw4NjpTZSw4NzpraSw4OTpSaSw5MDpwaX0pLGkoV3IsWzIsODBdKSx7ODg6WzEsMTQ2XX0saShXcixbMiw4Ml0pLGkoV3IsWzIsODNdKSxpKGJpLFsyLDQ3XSksaShiaSxbMiw0OF0pLGkoYmksWzIsNDldKSxpKGJpLFsyLDUwXSksaShiaSxbMiw1MV0pLGkoYmksWzIsNTJdKSxpKGJpLFsyLDUzXSksaShiaSxbMiw1NF0pLGkoYmksWzIsNTVdKSxpKGJpLFsyLDU2XSksaShiaSxbMiw1N10pLGkoYmksWzIsNThdKSxpKGJpLFsyLDU5XSksaShiaSxbMiw2MF0pLGkoYmksWzIsNjFdKSxpKGJpLFsyLDYyXSksaShiaSxbMiw2M10pLGkoYmksWzIsNjRdKSxpKGJpLFsyLDY1XSksaShiaSxbMiw2N10pLGkoYmksWzIsNjhdKSxpKGJpLFsyLDY5XSksaShiaSxbMiw3MF0pLGkoYmksWzIsNzFdKSxpKGJpLFsyLDcyXSksaShiaSxbMiw3M10pLGkoYmksWzIsNzRdKSxpKGJpLFsyLDc1XSksaShiaSxbMiw3Nl0pLGkoYmksWzIsNzddKSx7NDE6MTQ3LDUyOlsxLDE0OF19LHsxNTpbMSwxNDldfSx7NDM6WzEsMTUwXX0saShMaSxbMiwzNV0pLGkoTGksWzIsMzZdKSxpKExpLFsyLDM3XSksaShMaSxbMiwzOF0pLGkoTGksWzIsMzldKSxpKExpLFsyLDQwXSksaShMaSxbMiw0MV0pLHsxOlsyLDE2XX0sezE6WzIsMTddfSx7MTpbMiwxOF19LHsxOlsyLDE5XX0sezE1OlsxLDE1MV19LGkocXQsWzIsMjVdKSxpKE1pLFsyLDQ1XSksaShObixbMiw3OV0pLGkoV3IsWzIsODFdKSxpKGJpLFsyLDMxXSksaShiaSxbMiw0Ml0pLGkoaXMsWzIsMzJdKSxpKGlzLFsyLDMzXSx7MTU6WzEsMTUyXX0pLGkoZG4sWzIsMTBdKSxpKGlzLFsyLDM0XSldLGRlZmF1bHRBY3Rpb25zOnsyOlsyLDFdLDM6WzIsMl0sNTpbMiw4XSw2OlsyLDRdLDc6WzIsNV0sODpbMiw2XSw5OlsyLDddLDE2OlsyLDExXSwxNzpbMiwzXSwyNzpbMiwxNF0sODU6WzIsMTNdLDg2OlsyLDE1XSwxMzg6WzIsMTZdLDEzOTpbMiwxN10sMTQwOlsyLDE4XSwxNDE6WzIsMTldfSxwYXJzZUVycm9yOmZ1bmN0aW9uKF9yLHFyKXtpZihxci5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKF9yKTtlbHNle3ZhciBPaT1uZXcgRXJyb3IoX3IpO3Rocm93IE9pLmhhc2g9cXIsT2l9fSxwYXJzZTpmdW5jdGlvbihfcil7dmFyIHFyPXRoaXMsT2k9WzBdLGdyPVtdLEpzPVtudWxsXSxWbj1bXSxYYz10aGlzLnRhYmxlLEVyPSIiLE1jPTAsYnA9MCxmbT0yLFQwPTEsRmQ9Vm4uc2xpY2UuY2FsbChhcmd1bWVudHMsMSksTm89T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSx0YT17eXk6e319O2Zvcih2YXIgYnUgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxidSkmJih0YS55eVtidV09dGhpcy55eVtidV0pO05vLnNldElucHV0KF9yLHRhLnl5KSx0YS55eS5sZXhlcj1Obyx0YS55eS5wYXJzZXI9dGhpcyx0eXBlb2YgTm8ueXlsbG9jPiJ1IiYmKE5vLnl5bGxvYz17fSk7dmFyIFB1PU5vLnl5bGxvYztWbi5wdXNoKFB1KTt2YXIgbG89Tm8ub3B0aW9ucyYmTm8ub3B0aW9ucy5yYW5nZXM7dHlwZW9mIHRhLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPXRhLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIG1vKCl7dmFyIG5pO3JldHVybiBuaT1nci5wb3AoKXx8Tm8ubGV4KCl8fFQwLHR5cGVvZiBuaSE9Im51bWJlciImJihuaSBpbnN0YW5jZW9mIEFycmF5JiYoZ3I9bmksbmk9Z3IucG9wKCkpLG5pPXFyLnN5bWJvbHNfW25pXXx8bmkpLG5pfWZvcih2YXIgT3MsVGwsRnUsem8sbmQ9e30sc2YsbGwsVmksS2U7Oyl7aWYoVGw9T2lbT2kubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbVGxdP0Z1PXRoaXMuZGVmYXVsdEFjdGlvbnNbVGxdOigoT3M9PT1udWxsfHx0eXBlb2YgT3M+InUiKSYmKE9zPW1vKCkpLEZ1PVhjW1RsXSYmWGNbVGxdW09zXSksdHlwZW9mIEZ1PiJ1Inx8IUZ1Lmxlbmd0aHx8IUZ1WzBdKXt2YXIga3I9IiI7S2U9W107Zm9yKHNmIGluIFhjW1RsXSl0aGlzLnRlcm1pbmFsc19bc2ZdJiZzZj5mbSYmS2UucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW3NmXSsiJyIpO05vLnNob3dQb3NpdGlvbj9rcj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhNYysxKStgOgpgK05vLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArS2Uuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tPc118fE9zKSsiJyI6a3I9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoTWMrMSkrIjogVW5leHBlY3RlZCAiKyhPcz09VDA/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bT3NdfHxPcykrIiciKSx0aGlzLnBhcnNlRXJyb3Ioa3Ise3RleHQ6Tm8ubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW09zXXx8T3MsbGluZTpOby55eWxpbmVubyxsb2M6UHUsZXhwZWN0ZWQ6S2V9KX1pZihGdVswXWluc3RhbmNlb2YgQXJyYXkmJkZ1Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrVGwrIiwgdG9rZW46ICIrT3MpO3N3aXRjaChGdVswXSl7Y2FzZSAxOk9pLnB1c2goT3MpLEpzLnB1c2goTm8ueXl0ZXh0KSxWbi5wdXNoKE5vLnl5bGxvYyksT2kucHVzaChGdVsxXSksT3M9bnVsbCxicD1Oby55eWxlbmcsRXI9Tm8ueXl0ZXh0LE1jPU5vLnl5bGluZW5vLFB1PU5vLnl5bGxvYzticmVhaztjYXNlIDI6aWYobGw9dGhpcy5wcm9kdWN0aW9uc19bRnVbMV1dWzFdLG5kLiQ9SnNbSnMubGVuZ3RoLWxsXSxuZC5fJD17Zmlyc3RfbGluZTpWbltWbi5sZW5ndGgtKGxsfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6Vm5bVm4ubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46Vm5bVm4ubGVuZ3RoLShsbHx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpWbltWbi5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LGxvJiYobmQuXyQucmFuZ2U9W1ZuW1ZuLmxlbmd0aC0obGx8fDEpXS5yYW5nZVswXSxWbltWbi5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx6bz10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkobmQsW0VyLGJwLE1jLHRhLnl5LEZ1WzFdLEpzLFZuXS5jb25jYXQoRmQpKSx0eXBlb2Ygem88InUiKXJldHVybiB6bztsbCYmKE9pPU9pLnNsaWNlKDAsLTEqbGwqMiksSnM9SnMuc2xpY2UoMCwtMSpsbCksVm49Vm4uc2xpY2UoMCwtMSpsbCkpLE9pLnB1c2godGhpcy5wcm9kdWN0aW9uc19bRnVbMV1dWzBdKSxKcy5wdXNoKG5kLiQpLFZuLnB1c2gobmQuXyQpLFZpPVhjW09pW09pLmxlbmd0aC0yXV1bT2lbT2kubGVuZ3RoLTFdXSxPaS5wdXNoKFZpKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sQWE9ZnVuY3Rpb24oKXt2YXIgR2E9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24ocXIsT2kpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IocXIsT2kpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKHFyKX0sc2V0SW5wdXQ6ZnVuY3Rpb24oX3IscXIpe3JldHVybiB0aGlzLnl5PXFyfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1fcix0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgX3I9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPV9yLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1fcix0aGlzLm1hdGNoZWQrPV9yO3ZhciBxcj1fci5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIHFyPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxfcn0sdW5wdXQ6ZnVuY3Rpb24oX3Ipe3ZhciBxcj1fci5sZW5ndGgsT2k9X3Iuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1fcit0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtcXIpLHRoaXMub2Zmc2V0LT1xcjt2YXIgZ3I9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksT2kubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1PaS5sZW5ndGgtMSk7dmFyIEpzPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpPaT8oT2kubGVuZ3RoPT09Z3IubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStncltnci5sZW5ndGgtT2kubGVuZ3RoXS5sZW5ndGgtT2lbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1xcn0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtKc1swXSxKc1swXSt0aGlzLnl5bGVuZy1xcl0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKF9yKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoX3IpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIF9yPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oX3IubGVuZ3RoPjIwPyIuLi4iOiIiKStfci5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciBfcj10aGlzLm1hdGNoO3JldHVybiBfci5sZW5ndGg8MjAmJihfcis9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtX3IubGVuZ3RoKSksKF9yLnN1YnN0cigwLDIwKSsoX3IubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBfcj10aGlzLnBhc3RJbnB1dCgpLHFyPW5ldyBBcnJheShfci5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBfcit0aGlzLnVwY29taW5nSW5wdXQoKStgCmArcXIrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKF9yLHFyKXt2YXIgT2ksZ3IsSnM7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKEpzPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKEpzLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLGdyPV9yWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxnciYmKHRoaXMueXlsaW5lbm8rPWdyLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOmdyP2dyW2dyLmxlbmd0aC0xXS5sZW5ndGgtZ3JbZ3IubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rX3JbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9X3JbMF0sdGhpcy5tYXRjaCs9X3JbMF0sdGhpcy5tYXRjaGVzPV9yLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKF9yWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1fclswXSxPaT10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxxcix0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxPaSlyZXR1cm4gT2k7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIFZuIGluIEpzKXRoaXNbVm5dPUpzW1ZuXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBfcixxcixPaSxncjt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBKcz10aGlzLl9jdXJyZW50UnVsZXMoKSxWbj0wO1ZuPEpzLmxlbmd0aDtWbisrKWlmKE9pPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbSnNbVm5dXSksT2kmJighcXJ8fE9pWzBdLmxlbmd0aD5xclswXS5sZW5ndGgpKXtpZihxcj1PaSxncj1Wbix0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihfcj10aGlzLnRlc3RfbWF0Y2goT2ksSnNbVm5dKSxfciE9PSExKXJldHVybiBfcjtpZih0aGlzLl9iYWNrdHJhY2spe3FyPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIHFyPyhfcj10aGlzLnRlc3RfbWF0Y2gocXIsSnNbZ3JdKSxfciE9PSExP19yOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgcXI9dGhpcy5uZXh0KCk7cmV0dXJuIHFyfHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbihxcil7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHFyKX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgcXI9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gcXI+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbihxcil7cmV0dXJuIHFyPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMocXJ8fDApLHFyPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbcXJdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKHFyKXt0aGlzLmJlZ2luKHFyKX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6e30scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihxcixPaSxncixKcyl7c3dpdGNoKGdyKXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oIm9wZW5fZGlyZWN0aXZlIiksMTg7Y2FzZSAxOnJldHVybiA3O2Nhc2UgMjpyZXR1cm4gODtjYXNlIDM6cmV0dXJuIDk7Y2FzZSA0OnJldHVybiAxMDtjYXNlIDU6cmV0dXJuIHRoaXMuYmVnaW4oInR5cGVfZGlyZWN0aXZlIiksMTk7Y2FzZSA2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiYXJnX2RpcmVjdGl2ZSIpLDE2O2Nhc2UgNzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSwyMTtjYXNlIDg6cmV0dXJuIDIwO2Nhc2UgOTpyZXR1cm4gMzI7Y2FzZSAxMDpyZXR1cm4gMzM7Y2FzZSAxMTpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMzQ7Y2FzZSAxMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2Nhc2UgMTM6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDM2O2Nhc2UgMTQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDE1OnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDE2OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE3OnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDE4OmJyZWFrO2Nhc2UgMTk6YzticmVhaztjYXNlIDIwOnJldHVybiAxNTtjYXNlIDIxOmJyZWFrO2Nhc2UgMjI6cmV0dXJuIDIyO2Nhc2UgMjM6cmV0dXJuIDI1O2Nhc2UgMjQ6cmV0dXJuIDI2O2Nhc2UgMjU6cmV0dXJuIDI3O2Nhc2UgMjY6cmV0dXJuIDI4O2Nhc2UgMjc6cmV0dXJuIHRoaXMuYmVnaW4oInBlcnNvbl9leHQiKSw1NTtjYXNlIDI4OnJldHVybiB0aGlzLmJlZ2luKCJwZXJzb24iKSw1NDtjYXNlIDI5OnJldHVybiB0aGlzLmJlZ2luKCJzeXN0ZW1fZXh0X3F1ZXVlIiksNjE7Y2FzZSAzMDpyZXR1cm4gdGhpcy5iZWdpbigic3lzdGVtX2V4dF9kYiIpLDYwO2Nhc2UgMzE6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbV9leHQiKSw1OTtjYXNlIDMyOnJldHVybiB0aGlzLmJlZ2luKCJzeXN0ZW1fcXVldWUiKSw1ODtjYXNlIDMzOnJldHVybiB0aGlzLmJlZ2luKCJzeXN0ZW1fZGIiKSw1NztjYXNlIDM0OnJldHVybiB0aGlzLmJlZ2luKCJzeXN0ZW0iKSw1NjtjYXNlIDM1OnJldHVybiB0aGlzLmJlZ2luKCJib3VuZGFyeSIpLDQ3O2Nhc2UgMzY6cmV0dXJuIHRoaXMuYmVnaW4oImVudGVycHJpc2VfYm91bmRhcnkiKSw0NDtjYXNlIDM3OnJldHVybiB0aGlzLmJlZ2luKCJzeXN0ZW1fYm91bmRhcnkiKSw0NjtjYXNlIDM4OnJldHVybiB0aGlzLmJlZ2luKCJjb250YWluZXJfZXh0X3F1ZXVlIiksNjc7Y2FzZSAzOTpyZXR1cm4gdGhpcy5iZWdpbigiY29udGFpbmVyX2V4dF9kYiIpLDY2O2Nhc2UgNDA6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lcl9leHQiKSw2NTtjYXNlIDQxOnJldHVybiB0aGlzLmJlZ2luKCJjb250YWluZXJfcXVldWUiKSw2NDtjYXNlIDQyOnJldHVybiB0aGlzLmJlZ2luKCJjb250YWluZXJfZGIiKSw2MztjYXNlIDQzOnJldHVybiB0aGlzLmJlZ2luKCJjb250YWluZXIiKSw2MjtjYXNlIDQ0OnJldHVybiB0aGlzLmJlZ2luKCJjb250YWluZXJfYm91bmRhcnkiKSw0ODtjYXNlIDQ1OnJldHVybiB0aGlzLmJlZ2luKCJjb21wb25lbnRfZXh0X3F1ZXVlIiksNzM7Y2FzZSA0NjpyZXR1cm4gdGhpcy5iZWdpbigiY29tcG9uZW50X2V4dF9kYiIpLDcyO2Nhc2UgNDc6cmV0dXJuIHRoaXMuYmVnaW4oImNvbXBvbmVudF9leHQiKSw3MTtjYXNlIDQ4OnJldHVybiB0aGlzLmJlZ2luKCJjb21wb25lbnRfcXVldWUiKSw3MDtjYXNlIDQ5OnJldHVybiB0aGlzLmJlZ2luKCJjb21wb25lbnRfZGIiKSw2OTtjYXNlIDUwOnJldHVybiB0aGlzLmJlZ2luKCJjb21wb25lbnQiKSw2ODtjYXNlIDUxOnJldHVybiB0aGlzLmJlZ2luKCJub2RlIiksNDk7Y2FzZSA1MjpyZXR1cm4gdGhpcy5iZWdpbigibm9kZSIpLDQ5O2Nhc2UgNTM6cmV0dXJuIHRoaXMuYmVnaW4oIm5vZGVfbCIpLDUwO2Nhc2UgNTQ6cmV0dXJuIHRoaXMuYmVnaW4oIm5vZGVfciIpLDUxO2Nhc2UgNTU6cmV0dXJuIHRoaXMuYmVnaW4oInJlbCIpLDc0O2Nhc2UgNTY6cmV0dXJuIHRoaXMuYmVnaW4oImJpcmVsIiksNzU7Y2FzZSA1NzpyZXR1cm4gdGhpcy5iZWdpbigicmVsX3UiKSw3NjtjYXNlIDU4OnJldHVybiB0aGlzLmJlZ2luKCJyZWxfdSIpLDc2O2Nhc2UgNTk6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF9kIiksNzc7Y2FzZSA2MDpyZXR1cm4gdGhpcy5iZWdpbigicmVsX2QiKSw3NztjYXNlIDYxOnJldHVybiB0aGlzLmJlZ2luKCJyZWxfbCIpLDc4O2Nhc2UgNjI6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF9sIiksNzg7Y2FzZSA2MzpyZXR1cm4gdGhpcy5iZWdpbigicmVsX3IiKSw3OTtjYXNlIDY0OnJldHVybiB0aGlzLmJlZ2luKCJyZWxfciIpLDc5O2Nhc2UgNjU6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF9iIiksODA7Y2FzZSA2NjpyZXR1cm4gdGhpcy5iZWdpbigicmVsX2luZGV4IiksODE7Y2FzZSA2NzpyZXR1cm4gdGhpcy5iZWdpbigidXBkYXRlX2VsX3N0eWxlIiksODI7Y2FzZSA2ODpyZXR1cm4gdGhpcy5iZWdpbigidXBkYXRlX3JlbF9zdHlsZSIpLDgzO2Nhc2UgNjk6cmV0dXJuIHRoaXMuYmVnaW4oInVwZGF0ZV9sYXlvdXRfY29uZmlnIiksODQ7Y2FzZSA3MDpyZXR1cm4iRU9GX0lOX1NUUlVDVCI7Y2FzZSA3MTpyZXR1cm4gdGhpcy5iZWdpbigiYXR0cmlidXRlIiksIkFUVFJJQlVURV9FTVBUWSI7Y2FzZSA3Mjp0aGlzLmJlZ2luKCJhdHRyaWJ1dGUiKTticmVhaztjYXNlIDczOnRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA3NDpyZXR1cm4gOTA7Y2FzZSA3NTpicmVhaztjYXNlIDc2OnJldHVybiA5MDtjYXNlIDc3OnRoaXMuYmVnaW4oInN0cmluZyIpO2JyZWFrO2Nhc2UgNzg6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNzk6cmV0dXJuIlNUUiI7Y2FzZSA4MDp0aGlzLmJlZ2luKCJzdHJpbmdfa3YiKTticmVhaztjYXNlIDgxOnJldHVybiB0aGlzLmJlZ2luKCJzdHJpbmdfa3Zfa2V5IiksIlNUUl9LRVkiO2Nhc2UgODI6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oInN0cmluZ19rdl92YWx1ZSIpO2JyZWFrO2Nhc2UgODM6cmV0dXJuIlNUUl9WQUxVRSI7Y2FzZSA4NDp0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgODU6cmV0dXJuIlNUUiI7Y2FzZSA4NjpyZXR1cm4iTEJSQUNFIjtjYXNlIDg3OnJldHVybiJSQlJBQ0UiO2Nhc2UgODg6cmV0dXJuIlNQQUNFIjtjYXNlIDg5OnJldHVybiJFT0wiO2Nhc2UgOTA6cmV0dXJuIDI0fX0scnVsZXM6Wy9eKD86JSVceykvLC9eKD86LipkaXJlY3Rpb25ccytUQlteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytCVFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytMUlteXG5dKikvLC9eKD86KCg/Oig/IVx9JSUpW146Ll0pKikpLywvXig/OjopLywvXig/Olx9JSUpLywvXig/OigoPzooPyFcfSUlKS58XG4pKikpLywvXig/OnRpdGxlXHNbXiNcbjtdKykvLC9eKD86YWNjRGVzY3JpcHRpb25cc1teI1xuO10rKS8sL14oPzphY2NUaXRsZVxzKjpccyopLywvXig/Oig/IVxufHwpKlteXG5dKikvLC9eKD86YWNjRGVzY3Jccyo6XHMqKS8sL14oPzooPyFcbnx8KSpbXlxuXSopLywvXig/OmFjY0Rlc2NyXHMqXHtccyopLywvXig/OltcfV0pLywvXig/OlteXH1dKikvLC9eKD86JSUoPyFceykqW15cbl0qKFxyP1xuPykrKS8sL14oPzolJVteXG5dKihccj9cbikqKS8sL14oPzpccyooXHI/XG4pKykvLC9eKD86XHMrKS8sL14oPzpDNENvbnRleHRcYikvLC9eKD86QzRDb250YWluZXJcYikvLC9eKD86QzRDb21wb25lbnRcYikvLC9eKD86QzREeW5hbWljXGIpLywvXig/OkM0RGVwbG95bWVudFxiKS8sL14oPzpQZXJzb25fRXh0XGIpLywvXig/OlBlcnNvblxiKS8sL14oPzpTeXN0ZW1RdWV1ZV9FeHRcYikvLC9eKD86U3lzdGVtRGJfRXh0XGIpLywvXig/OlN5c3RlbV9FeHRcYikvLC9eKD86U3lzdGVtUXVldWVcYikvLC9eKD86U3lzdGVtRGJcYikvLC9eKD86U3lzdGVtXGIpLywvXig/OkJvdW5kYXJ5XGIpLywvXig/OkVudGVycHJpc2VfQm91bmRhcnlcYikvLC9eKD86U3lzdGVtX0JvdW5kYXJ5XGIpLywvXig/OkNvbnRhaW5lclF1ZXVlX0V4dFxiKS8sL14oPzpDb250YWluZXJEYl9FeHRcYikvLC9eKD86Q29udGFpbmVyX0V4dFxiKS8sL14oPzpDb250YWluZXJRdWV1ZVxiKS8sL14oPzpDb250YWluZXJEYlxiKS8sL14oPzpDb250YWluZXJcYikvLC9eKD86Q29udGFpbmVyX0JvdW5kYXJ5XGIpLywvXig/OkNvbXBvbmVudFF1ZXVlX0V4dFxiKS8sL14oPzpDb21wb25lbnREYl9FeHRcYikvLC9eKD86Q29tcG9uZW50X0V4dFxiKS8sL14oPzpDb21wb25lbnRRdWV1ZVxiKS8sL14oPzpDb21wb25lbnREYlxiKS8sL14oPzpDb21wb25lbnRcYikvLC9eKD86RGVwbG95bWVudF9Ob2RlXGIpLywvXig/Ok5vZGVcYikvLC9eKD86Tm9kZV9MXGIpLywvXig/Ok5vZGVfUlxiKS8sL14oPzpSZWxcYikvLC9eKD86QmlSZWxcYikvLC9eKD86UmVsX1VwXGIpLywvXig/OlJlbF9VXGIpLywvXig/OlJlbF9Eb3duXGIpLywvXig/OlJlbF9EXGIpLywvXig/OlJlbF9MZWZ0XGIpLywvXig/OlJlbF9MXGIpLywvXig/OlJlbF9SaWdodFxiKS8sL14oPzpSZWxfUlxiKS8sL14oPzpSZWxfQmFja1xiKS8sL14oPzpSZWxJbmRleFxiKS8sL14oPzpVcGRhdGVFbGVtZW50U3R5bGVcYikvLC9eKD86VXBkYXRlUmVsU3R5bGVcYikvLC9eKD86VXBkYXRlTGF5b3V0Q29uZmlnXGIpLywvXig/OiQpLywvXig/OlsoXVsgXSpbLF0pLywvXig/OlsoXSkvLC9eKD86WyldKS8sL14oPzosLCkvLC9eKD86LCkvLC9eKD86WyBdKlsiXVsiXSkvLC9eKD86WyBdKlsiXSkvLC9eKD86WyJdKS8sL14oPzpbXiJdKikvLC9eKD86WyBdKltcJF0pLywvXig/OltePV0qKS8sL14oPzpbPV1bIF0qWyJdKS8sL14oPzpbXiJdKykvLC9eKD86WyJdKS8sL14oPzpbXixdKykvLC9eKD86XHspLywvXig/Olx9KS8sL14oPzpbXHNdKykvLC9eKD86W1xuXHJdKykvLC9eKD86JCkvXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbMTYsMTddLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbMTRdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbMTJdLGluY2x1c2l2ZTohMX0sY2xvc2VfZGlyZWN0aXZlOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LGFyZ19kaXJlY3RpdmU6e3J1bGVzOls3LDhdLGluY2x1c2l2ZTohMX0sdHlwZV9kaXJlY3RpdmU6e3J1bGVzOls2LDddLGluY2x1c2l2ZTohMX0sb3Blbl9kaXJlY3RpdmU6e3J1bGVzOls1XSxpbmNsdXNpdmU6ITF9LHN0cmluZ19rdl92YWx1ZTp7cnVsZXM6WzgzLDg0XSxpbmNsdXNpdmU6ITF9LHN0cmluZ19rdl9rZXk6e3J1bGVzOls4Ml0saW5jbHVzaXZlOiExfSxzdHJpbmdfa3Y6e3J1bGVzOls4MV0saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOls3OCw3OV0saW5jbHVzaXZlOiExfSxhdHRyaWJ1dGU6e3J1bGVzOls3Myw3NCw3NSw3Niw3Nyw4MCw4NV0saW5jbHVzaXZlOiExfSx1cGRhdGVfbGF5b3V0X2NvbmZpZzp7cnVsZXM6WzcwLDcxLDcyLDczXSxpbmNsdXNpdmU6ITF9LHVwZGF0ZV9yZWxfc3R5bGU6e3J1bGVzOls3MCw3MSw3Miw3M10saW5jbHVzaXZlOiExfSx1cGRhdGVfZWxfc3R5bGU6e3J1bGVzOls3MCw3MSw3Miw3M10saW5jbHVzaXZlOiExfSxyZWxfYjp7cnVsZXM6WzcwLDcxLDcyLDczXSxpbmNsdXNpdmU6ITF9LHJlbF9yOntydWxlczpbNzAsNzEsNzIsNzNdLGluY2x1c2l2ZTohMX0scmVsX2w6e3J1bGVzOls3MCw3MSw3Miw3M10saW5jbHVzaXZlOiExfSxyZWxfZDp7cnVsZXM6WzcwLDcxLDcyLDczXSxpbmNsdXNpdmU6ITF9LHJlbF91OntydWxlczpbNzAsNzEsNzIsNzNdLGluY2x1c2l2ZTohMX0scmVsX2JpOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LHJlbDp7cnVsZXM6WzcwLDcxLDcyLDczXSxpbmNsdXNpdmU6ITF9LG5vZGVfcjp7cnVsZXM6WzcwLDcxLDcyLDczXSxpbmNsdXNpdmU6ITF9LG5vZGVfbDp7cnVsZXM6WzcwLDcxLDcyLDczXSxpbmNsdXNpdmU6ITF9LG5vZGU6e3J1bGVzOls3MCw3MSw3Miw3M10saW5jbHVzaXZlOiExfSxpbmRleDp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxyZWxfaW5kZXg6e3J1bGVzOls3MCw3MSw3Miw3M10saW5jbHVzaXZlOiExfSxjb21wb25lbnRfZXh0X3F1ZXVlOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LGNvbXBvbmVudF9leHRfZGI6e3J1bGVzOls3MCw3MSw3Miw3M10saW5jbHVzaXZlOiExfSxjb21wb25lbnRfZXh0OntydWxlczpbNzAsNzEsNzIsNzNdLGluY2x1c2l2ZTohMX0sY29tcG9uZW50X3F1ZXVlOntydWxlczpbNzAsNzEsNzIsNzNdLGluY2x1c2l2ZTohMX0sY29tcG9uZW50X2RiOntydWxlczpbNzAsNzEsNzIsNzNdLGluY2x1c2l2ZTohMX0sY29tcG9uZW50OntydWxlczpbNzAsNzEsNzIsNzNdLGluY2x1c2l2ZTohMX0sY29udGFpbmVyX2JvdW5kYXJ5OntydWxlczpbNzAsNzEsNzIsNzNdLGluY2x1c2l2ZTohMX0sY29udGFpbmVyX2V4dF9xdWV1ZTp7cnVsZXM6WzcwLDcxLDcyLDczXSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9leHRfZGI6e3J1bGVzOls3MCw3MSw3Miw3M10saW5jbHVzaXZlOiExfSxjb250YWluZXJfZXh0OntydWxlczpbNzAsNzEsNzIsNzNdLGluY2x1c2l2ZTohMX0sY29udGFpbmVyX3F1ZXVlOntydWxlczpbNzAsNzEsNzIsNzNdLGluY2x1c2l2ZTohMX0sY29udGFpbmVyX2RiOntydWxlczpbNzAsNzEsNzIsNzNdLGluY2x1c2l2ZTohMX0sY29udGFpbmVyOntydWxlczpbNzAsNzEsNzIsNzNdLGluY2x1c2l2ZTohMX0sYmlyZWw6e3J1bGVzOls3MCw3MSw3Miw3M10saW5jbHVzaXZlOiExfSxzeXN0ZW1fYm91bmRhcnk6e3J1bGVzOls3MCw3MSw3Miw3M10saW5jbHVzaXZlOiExfSxlbnRlcnByaXNlX2JvdW5kYXJ5OntydWxlczpbNzAsNzEsNzIsNzNdLGluY2x1c2l2ZTohMX0sYm91bmRhcnk6e3J1bGVzOls3MCw3MSw3Miw3M10saW5jbHVzaXZlOiExfSxzeXN0ZW1fZXh0X3F1ZXVlOntydWxlczpbNzAsNzEsNzIsNzNdLGluY2x1c2l2ZTohMX0sc3lzdGVtX2V4dF9kYjp7cnVsZXM6WzcwLDcxLDcyLDczXSxpbmNsdXNpdmU6ITF9LHN5c3RlbV9leHQ6e3J1bGVzOls3MCw3MSw3Miw3M10saW5jbHVzaXZlOiExfSxzeXN0ZW1fcXVldWU6e3J1bGVzOls3MCw3MSw3Miw3M10saW5jbHVzaXZlOiExfSxzeXN0ZW1fZGI6e3J1bGVzOls3MCw3MSw3Miw3M10saW5jbHVzaXZlOiExfSxzeXN0ZW06e3J1bGVzOls3MCw3MSw3Miw3M10saW5jbHVzaXZlOiExfSxwZXJzb25fZXh0OntydWxlczpbNzAsNzEsNzIsNzNdLGluY2x1c2l2ZTohMX0scGVyc29uOntydWxlczpbNzAsNzEsNzIsNzNdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw5LDEwLDExLDEzLDE1LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDg2LDg3LDg4LDg5LDkwXSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIEdhfSgpO1RzLmxleGVyPUFhO2Z1bmN0aW9uIFhpKCl7dGhpcy55eT17fX1yZXR1cm4gWGkucHJvdG90eXBlPVRzLFRzLlBhcnNlcj1YaSxuZXcgWGl9KCk7VlcucGFyc2VyPVZXO2NvbnN0IE5NZT1WVztsZXQgcm09W10saWs9WyIiXSxkZz0iZ2xvYmFsIixpbT0iIixkMz1be2FsaWFzOiJnbG9iYWwiLGxhYmVsOnt0ZXh0OiJnbG9iYWwifSx0eXBlOnt0ZXh0OiJnbG9iYWwifSx0YWdzOm51bGwsbGluazpudWxsLHBhcmVudEJvdW5kYXJ5OiIifV0sclA9W10sTGR0PSIiLE1kdD0hMSxHVz00LFVXPTI7dmFyIGZOdDtjb25zdCBQTWU9ZnVuY3Rpb24oKXtyZXR1cm4gZk50fSxGTWU9ZnVuY3Rpb24oaSl7Zk50PXYwKGksRGUoKSl9LEJNZT1mdW5jdGlvbihpLGEsZil7SjEucGFyc2VEaXJlY3RpdmUodGhpcyxpLGEsZil9LFJNZT1mdW5jdGlvbihpLGEsZixwLHYsbSxiLEUsQyl7aWYoaT09bnVsbHx8YT09PXZvaWQgMHx8YT09PW51bGx8fGY9PT12b2lkIDB8fGY9PT1udWxsfHxwPT09dm9pZCAwfHxwPT09bnVsbClyZXR1cm47bGV0IEE9e307Y29uc3QgUD1yUC5maW5kKEY9PkYuZnJvbT09PWEmJkYudG89PT1mKTtpZihQP0E9UDpyUC5wdXNoKEEpLEEudHlwZT1pLEEuZnJvbT1hLEEudG89ZixBLmxhYmVsPXt0ZXh0OnB9LHY9PW51bGwpQS50ZWNobj17dGV4dDoiIn07ZWxzZSBpZih0eXBlb2Ygdj09Im9iamVjdCIpe2xldFtGLGpdPU9iamVjdC5lbnRyaWVzKHYpWzBdO0FbRl09e3RleHQ6an19ZWxzZSBBLnRlY2huPXt0ZXh0OnZ9O2lmKG09PW51bGwpQS5kZXNjcj17dGV4dDoiIn07ZWxzZSBpZih0eXBlb2YgbT09Im9iamVjdCIpe2xldFtGLGpdPU9iamVjdC5lbnRyaWVzKG0pWzBdO0FbRl09e3RleHQ6an19ZWxzZSBBLmRlc2NyPXt0ZXh0Om19O2lmKHR5cGVvZiBiPT0ib2JqZWN0Iil7bGV0W0Ysal09T2JqZWN0LmVudHJpZXMoYilbMF07QVtGXT1qfWVsc2UgQS5zcHJpdGU9YjtpZih0eXBlb2YgRT09Im9iamVjdCIpe2xldFtGLGpdPU9iamVjdC5lbnRyaWVzKEUpWzBdO0FbRl09an1lbHNlIEEudGFncz1FO2lmKHR5cGVvZiBDPT0ib2JqZWN0Iil7bGV0W0Ysal09T2JqZWN0LmVudHJpZXMoQylbMF07QVtGXT1qfWVsc2UgQS5saW5rPUM7QS53cmFwPXNrKCl9LGpNZT1mdW5jdGlvbihpLGEsZixwLHYsbSxiKXtpZihhPT09bnVsbHx8Zj09PW51bGwpcmV0dXJuO2xldCBFPXt9O2NvbnN0IEM9cm0uZmluZChBPT5BLmFsaWFzPT09YSk7aWYoQyYmYT09PUMuYWxpYXM/RT1DOihFLmFsaWFzPWEscm0ucHVzaChFKSksZj09bnVsbD9FLmxhYmVsPXt0ZXh0OiIifTpFLmxhYmVsPXt0ZXh0OmZ9LHA9PW51bGwpRS5kZXNjcj17dGV4dDoiIn07ZWxzZSBpZih0eXBlb2YgcD09Im9iamVjdCIpe2xldFtBLFBdPU9iamVjdC5lbnRyaWVzKHApWzBdO0VbQV09e3RleHQ6UH19ZWxzZSBFLmRlc2NyPXt0ZXh0OnB9O2lmKHR5cGVvZiB2PT0ib2JqZWN0Iil7bGV0W0EsUF09T2JqZWN0LmVudHJpZXModilbMF07RVtBXT1QfWVsc2UgRS5zcHJpdGU9djtpZih0eXBlb2YgbT09Im9iamVjdCIpe2xldFtBLFBdPU9iamVjdC5lbnRyaWVzKG0pWzBdO0VbQV09UH1lbHNlIEUudGFncz1tO2lmKHR5cGVvZiBiPT0ib2JqZWN0Iil7bGV0W0EsUF09T2JqZWN0LmVudHJpZXMoYilbMF07RVtBXT1QfWVsc2UgRS5saW5rPWI7RS50eXBlQzRTaGFwZT17dGV4dDppfSxFLnBhcmVudEJvdW5kYXJ5PWRnLEUud3JhcD1zaygpfSwkTWU9ZnVuY3Rpb24oaSxhLGYscCx2LG0sYixFKXtpZihhPT09bnVsbHx8Zj09PW51bGwpcmV0dXJuO2xldCBDPXt9O2NvbnN0IEE9cm0uZmluZChQPT5QLmFsaWFzPT09YSk7aWYoQSYmYT09PUEuYWxpYXM/Qz1BOihDLmFsaWFzPWEscm0ucHVzaChDKSksZj09bnVsbD9DLmxhYmVsPXt0ZXh0OiIifTpDLmxhYmVsPXt0ZXh0OmZ9LHA9PW51bGwpQy50ZWNobj17dGV4dDoiIn07ZWxzZSBpZih0eXBlb2YgcD09Im9iamVjdCIpe2xldFtQLEZdPU9iamVjdC5lbnRyaWVzKHApWzBdO0NbUF09e3RleHQ6Rn19ZWxzZSBDLnRlY2huPXt0ZXh0OnB9O2lmKHY9PW51bGwpQy5kZXNjcj17dGV4dDoiIn07ZWxzZSBpZih0eXBlb2Ygdj09Im9iamVjdCIpe2xldFtQLEZdPU9iamVjdC5lbnRyaWVzKHYpWzBdO0NbUF09e3RleHQ6Rn19ZWxzZSBDLmRlc2NyPXt0ZXh0OnZ9O2lmKHR5cGVvZiBtPT0ib2JqZWN0Iil7bGV0W1AsRl09T2JqZWN0LmVudHJpZXMobSlbMF07Q1tQXT1GfWVsc2UgQy5zcHJpdGU9bTtpZih0eXBlb2YgYj09Im9iamVjdCIpe2xldFtQLEZdPU9iamVjdC5lbnRyaWVzKGIpWzBdO0NbUF09Rn1lbHNlIEMudGFncz1iO2lmKHR5cGVvZiBFPT0ib2JqZWN0Iil7bGV0W1AsRl09T2JqZWN0LmVudHJpZXMoRSlbMF07Q1tQXT1GfWVsc2UgQy5saW5rPUU7Qy53cmFwPXNrKCksQy50eXBlQzRTaGFwZT17dGV4dDppfSxDLnBhcmVudEJvdW5kYXJ5PWRnfSx6TWU9ZnVuY3Rpb24oaSxhLGYscCx2LG0sYixFKXtpZihhPT09bnVsbHx8Zj09PW51bGwpcmV0dXJuO2xldCBDPXt9O2NvbnN0IEE9cm0uZmluZChQPT5QLmFsaWFzPT09YSk7aWYoQSYmYT09PUEuYWxpYXM/Qz1BOihDLmFsaWFzPWEscm0ucHVzaChDKSksZj09bnVsbD9DLmxhYmVsPXt0ZXh0OiIifTpDLmxhYmVsPXt0ZXh0OmZ9LHA9PW51bGwpQy50ZWNobj17dGV4dDoiIn07ZWxzZSBpZih0eXBlb2YgcD09Im9iamVjdCIpe2xldFtQLEZdPU9iamVjdC5lbnRyaWVzKHApWzBdO0NbUF09e3RleHQ6Rn19ZWxzZSBDLnRlY2huPXt0ZXh0OnB9O2lmKHY9PW51bGwpQy5kZXNjcj17dGV4dDoiIn07ZWxzZSBpZih0eXBlb2Ygdj09Im9iamVjdCIpe2xldFtQLEZdPU9iamVjdC5lbnRyaWVzKHYpWzBdO0NbUF09e3RleHQ6Rn19ZWxzZSBDLmRlc2NyPXt0ZXh0OnZ9O2lmKHR5cGVvZiBtPT0ib2JqZWN0Iil7bGV0W1AsRl09T2JqZWN0LmVudHJpZXMobSlbMF07Q1tQXT1GfWVsc2UgQy5zcHJpdGU9bTtpZih0eXBlb2YgYj09Im9iamVjdCIpe2xldFtQLEZdPU9iamVjdC5lbnRyaWVzKGIpWzBdO0NbUF09Rn1lbHNlIEMudGFncz1iO2lmKHR5cGVvZiBFPT0ib2JqZWN0Iil7bGV0W1AsRl09T2JqZWN0LmVudHJpZXMoRSlbMF07Q1tQXT1GfWVsc2UgQy5saW5rPUU7Qy53cmFwPXNrKCksQy50eXBlQzRTaGFwZT17dGV4dDppfSxDLnBhcmVudEJvdW5kYXJ5PWRnfSxxTWU9ZnVuY3Rpb24oaSxhLGYscCx2KXtpZihpPT09bnVsbHx8YT09PW51bGwpcmV0dXJuO2xldCBtPXt9O2NvbnN0IGI9ZDMuZmluZChFPT5FLmFsaWFzPT09aSk7aWYoYiYmaT09PWIuYWxpYXM/bT1iOihtLmFsaWFzPWksZDMucHVzaChtKSksYT09bnVsbD9tLmxhYmVsPXt0ZXh0OiIifTptLmxhYmVsPXt0ZXh0OmF9LGY9PW51bGwpbS50eXBlPXt0ZXh0OiJzeXN0ZW0ifTtlbHNlIGlmKHR5cGVvZiBmPT0ib2JqZWN0Iil7bGV0W0UsQ109T2JqZWN0LmVudHJpZXMoZilbMF07bVtFXT17dGV4dDpDfX1lbHNlIG0udHlwZT17dGV4dDpmfTtpZih0eXBlb2YgcD09Im9iamVjdCIpe2xldFtFLENdPU9iamVjdC5lbnRyaWVzKHApWzBdO21bRV09Q31lbHNlIG0udGFncz1wO2lmKHR5cGVvZiB2PT0ib2JqZWN0Iil7bGV0W0UsQ109T2JqZWN0LmVudHJpZXModilbMF07bVtFXT1DfWVsc2UgbS5saW5rPXY7bS5wYXJlbnRCb3VuZGFyeT1kZyxtLndyYXA9c2soKSxpbT1kZyxkZz1pLGlrLnB1c2goaW0pfSxITWU9ZnVuY3Rpb24oaSxhLGYscCx2KXtpZihpPT09bnVsbHx8YT09PW51bGwpcmV0dXJuO2xldCBtPXt9O2NvbnN0IGI9ZDMuZmluZChFPT5FLmFsaWFzPT09aSk7aWYoYiYmaT09PWIuYWxpYXM/bT1iOihtLmFsaWFzPWksZDMucHVzaChtKSksYT09bnVsbD9tLmxhYmVsPXt0ZXh0OiIifTptLmxhYmVsPXt0ZXh0OmF9LGY9PW51bGwpbS50eXBlPXt0ZXh0OiJjb250YWluZXIifTtlbHNlIGlmKHR5cGVvZiBmPT0ib2JqZWN0Iil7bGV0W0UsQ109T2JqZWN0LmVudHJpZXMoZilbMF07bVtFXT17dGV4dDpDfX1lbHNlIG0udHlwZT17dGV4dDpmfTtpZih0eXBlb2YgcD09Im9iamVjdCIpe2xldFtFLENdPU9iamVjdC5lbnRyaWVzKHApWzBdO21bRV09Q31lbHNlIG0udGFncz1wO2lmKHR5cGVvZiB2PT0ib2JqZWN0Iil7bGV0W0UsQ109T2JqZWN0LmVudHJpZXModilbMF07bVtFXT1DfWVsc2UgbS5saW5rPXY7bS5wYXJlbnRCb3VuZGFyeT1kZyxtLndyYXA9c2soKSxpbT1kZyxkZz1pLGlrLnB1c2goaW0pfSxWTWU9ZnVuY3Rpb24oaSxhLGYscCx2LG0sYixFKXtpZihhPT09bnVsbHx8Zj09PW51bGwpcmV0dXJuO2xldCBDPXt9O2NvbnN0IEE9ZDMuZmluZChQPT5QLmFsaWFzPT09YSk7aWYoQSYmYT09PUEuYWxpYXM/Qz1BOihDLmFsaWFzPWEsZDMucHVzaChDKSksZj09bnVsbD9DLmxhYmVsPXt0ZXh0OiIifTpDLmxhYmVsPXt0ZXh0OmZ9LHA9PW51bGwpQy50eXBlPXt0ZXh0OiJub2RlIn07ZWxzZSBpZih0eXBlb2YgcD09Im9iamVjdCIpe2xldFtQLEZdPU9iamVjdC5lbnRyaWVzKHApWzBdO0NbUF09e3RleHQ6Rn19ZWxzZSBDLnR5cGU9e3RleHQ6cH07aWYodj09bnVsbClDLmRlc2NyPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiB2PT0ib2JqZWN0Iil7bGV0W1AsRl09T2JqZWN0LmVudHJpZXModilbMF07Q1tQXT17dGV4dDpGfX1lbHNlIEMuZGVzY3I9e3RleHQ6dn07aWYodHlwZW9mIGI9PSJvYmplY3QiKXtsZXRbUCxGXT1PYmplY3QuZW50cmllcyhiKVswXTtDW1BdPUZ9ZWxzZSBDLnRhZ3M9YjtpZih0eXBlb2YgRT09Im9iamVjdCIpe2xldFtQLEZdPU9iamVjdC5lbnRyaWVzKEUpWzBdO0NbUF09Rn1lbHNlIEMubGluaz1FO0Mubm9kZVR5cGU9aSxDLnBhcmVudEJvdW5kYXJ5PWRnLEMud3JhcD1zaygpLGltPWRnLGRnPWEsaWsucHVzaChpbSl9LEdNZT1mdW5jdGlvbigpe2RnPWltLGlrLnBvcCgpLGltPWlrLnBvcCgpLGlrLnB1c2goaW0pfSxVTWU9ZnVuY3Rpb24oaSxhLGYscCx2LG0sYixFLEMsQSxQKXtsZXQgRj1ybS5maW5kKGo9PmouYWxpYXM9PT1hKTtpZighKEY9PT12b2lkIDAmJihGPWQzLmZpbmQoaj0+ai5hbGlhcz09PWEpLEY9PT12b2lkIDApKSl7aWYoZiE9bnVsbClpZih0eXBlb2YgZj09Im9iamVjdCIpe2xldFtqLFJdPU9iamVjdC5lbnRyaWVzKGYpWzBdO0Zbal09Un1lbHNlIEYuYmdDb2xvcj1mO2lmKHAhPW51bGwpaWYodHlwZW9mIHA9PSJvYmplY3QiKXtsZXRbaixSXT1PYmplY3QuZW50cmllcyhwKVswXTtGW2pdPVJ9ZWxzZSBGLmZvbnRDb2xvcj1wO2lmKHYhPW51bGwpaWYodHlwZW9mIHY9PSJvYmplY3QiKXtsZXRbaixSXT1PYmplY3QuZW50cmllcyh2KVswXTtGW2pdPVJ9ZWxzZSBGLmJvcmRlckNvbG9yPXY7aWYobSE9bnVsbClpZih0eXBlb2YgbT09Im9iamVjdCIpe2xldFtqLFJdPU9iamVjdC5lbnRyaWVzKG0pWzBdO0Zbal09Un1lbHNlIEYuc2hhZG93aW5nPW07aWYoYiE9bnVsbClpZih0eXBlb2YgYj09Im9iamVjdCIpe2xldFtqLFJdPU9iamVjdC5lbnRyaWVzKGIpWzBdO0Zbal09Un1lbHNlIEYuc2hhcGU9YjtpZihFIT1udWxsKWlmKHR5cGVvZiBFPT0ib2JqZWN0Iil7bGV0W2osUl09T2JqZWN0LmVudHJpZXMoRSlbMF07RltqXT1SfWVsc2UgRi5zcHJpdGU9RTtpZihDIT1udWxsKWlmKHR5cGVvZiBDPT0ib2JqZWN0Iil7bGV0W2osUl09T2JqZWN0LmVudHJpZXMoQylbMF07RltqXT1SfWVsc2UgRi50ZWNobj1DO2lmKEEhPW51bGwpaWYodHlwZW9mIEE9PSJvYmplY3QiKXtsZXRbaixSXT1PYmplY3QuZW50cmllcyhBKVswXTtGW2pdPVJ9ZWxzZSBGLmxlZ2VuZFRleHQ9QTtpZihQIT1udWxsKWlmKHR5cGVvZiBQPT0ib2JqZWN0Iil7bGV0W2osUl09T2JqZWN0LmVudHJpZXMoUClbMF07RltqXT1SfWVsc2UgRi5sZWdlbmRTcHJpdGU9UH19LFdNZT1mdW5jdGlvbihpLGEsZixwLHYsbSxiKXtjb25zdCBFPXJQLmZpbmQoQz0+Qy5mcm9tPT09YSYmQy50bz09PWYpO2lmKEUhPT12b2lkIDApe2lmKHAhPW51bGwpaWYodHlwZW9mIHA9PSJvYmplY3QiKXtsZXRbQyxBXT1PYmplY3QuZW50cmllcyhwKVswXTtFW0NdPUF9ZWxzZSBFLnRleHRDb2xvcj1wO2lmKHYhPW51bGwpaWYodHlwZW9mIHY9PSJvYmplY3QiKXtsZXRbQyxBXT1PYmplY3QuZW50cmllcyh2KVswXTtFW0NdPUF9ZWxzZSBFLmxpbmVDb2xvcj12O2lmKG0hPW51bGwpaWYodHlwZW9mIG09PSJvYmplY3QiKXtsZXRbQyxBXT1PYmplY3QuZW50cmllcyhtKVswXTtFW0NdPXBhcnNlSW50KEEpfWVsc2UgRS5vZmZzZXRYPXBhcnNlSW50KG0pO2lmKGIhPW51bGwpaWYodHlwZW9mIGI9PSJvYmplY3QiKXtsZXRbQyxBXT1PYmplY3QuZW50cmllcyhiKVswXTtFW0NdPXBhcnNlSW50KEEpfWVsc2UgRS5vZmZzZXRZPXBhcnNlSW50KGIpfX0sS01lPWZ1bmN0aW9uKGksYSxmKXtsZXQgcD1HVyx2PVVXO2lmKHR5cGVvZiBhPT0ib2JqZWN0Iil7Y29uc3QgbT1PYmplY3QudmFsdWVzKGEpWzBdO3A9cGFyc2VJbnQobSl9ZWxzZSBwPXBhcnNlSW50KGEpO2lmKHR5cGVvZiBmPT0ib2JqZWN0Iil7Y29uc3QgbT1PYmplY3QudmFsdWVzKGYpWzBdO3Y9cGFyc2VJbnQobSl9ZWxzZSB2PXBhcnNlSW50KGYpO3A+PTEmJihHVz1wKSx2Pj0xJiYoVVc9dil9LFlNZT1mdW5jdGlvbigpe3JldHVybiBHV30sWE1lPWZ1bmN0aW9uKCl7cmV0dXJuIFVXfSxRTWU9ZnVuY3Rpb24oKXtyZXR1cm4gZGd9LFpNZT1mdW5jdGlvbigpe3JldHVybiBpbX0sZE50PWZ1bmN0aW9uKGkpe3JldHVybiBpPT1udWxsP3JtOnJtLmZpbHRlcihhPT5hLnBhcmVudEJvdW5kYXJ5PT09aSl9LEpNZT1mdW5jdGlvbihpKXtyZXR1cm4gcm0uZmluZChhPT5hLmFsaWFzPT09aSl9LHREZT1mdW5jdGlvbihpKXtyZXR1cm4gT2JqZWN0LmtleXMoZE50KGkpKX0sZURlPWZ1bmN0aW9uKGkpe3JldHVybiBpPT1udWxsP2QzOmQzLmZpbHRlcihhPT5hLnBhcmVudEJvdW5kYXJ5PT09aSl9LG5EZT1mdW5jdGlvbigpe3JldHVybiByUH0sckRlPWZ1bmN0aW9uKCl7cmV0dXJuIExkdH0saURlPWZ1bmN0aW9uKGkpe01kdD1pfSxzaz1mdW5jdGlvbigpe3JldHVybiBNZHR9LGdOdD17YWRkUGVyc29uT3JTeXN0ZW06ak1lLGFkZFBlcnNvbk9yU3lzdGVtQm91bmRhcnk6cU1lLGFkZENvbnRhaW5lcjokTWUsYWRkQ29udGFpbmVyQm91bmRhcnk6SE1lLGFkZENvbXBvbmVudDp6TWUsYWRkRGVwbG95bWVudE5vZGU6Vk1lLHBvcEJvdW5kYXJ5UGFyc2VTdGFjazpHTWUsYWRkUmVsOlJNZSx1cGRhdGVFbFN0eWxlOlVNZSx1cGRhdGVSZWxTdHlsZTpXTWUsdXBkYXRlTGF5b3V0Q29uZmlnOktNZSxhdXRvV3JhcDpzayxzZXRXcmFwOmlEZSxnZXRDNFNoYXBlQXJyYXk6ZE50LGdldEM0U2hhcGU6Sk1lLGdldEM0U2hhcGVLZXlzOnREZSxnZXRCb3VuZGFyeXM6ZURlLGdldEN1cnJlbnRCb3VuZGFyeVBhcnNlOlFNZSxnZXRQYXJlbnRCb3VuZGFyeVBhcnNlOlpNZSxnZXRSZWxzOm5EZSxnZXRUaXRsZTpyRGUsZ2V0QzRUeXBlOlBNZSxnZXRDNFNoYXBlSW5Sb3c6WU1lLGdldEM0Qm91bmRhcnlJblJvdzpYTWUsc2V0QWNjVGl0bGU6bTAsZ2V0QWNjVGl0bGU6dWcsZ2V0QWNjRGVzY3JpcHRpb246aGcsc2V0QWNjRGVzY3JpcHRpb246bGcscGFyc2VEaXJlY3RpdmU6Qk1lLGdldENvbmZpZzooKT0+RGUoKS5jNCxjbGVhcjpmdW5jdGlvbigpe3JtPVtdLGQzPVt7YWxpYXM6Imdsb2JhbCIsbGFiZWw6e3RleHQ6Imdsb2JhbCJ9LHR5cGU6e3RleHQ6Imdsb2JhbCJ9LHRhZ3M6bnVsbCxsaW5rOm51bGwscGFyZW50Qm91bmRhcnk6IiJ9XSxpbT0iIixkZz0iZ2xvYmFsIixpaz1bIiJdLHJQPVtdLGlrPVsiIl0sTGR0PSIiLE1kdD0hMSxHVz00LFVXPTJ9LExJTkVUWVBFOntTT0xJRDowLERPVFRFRDoxLE5PVEU6MixTT0xJRF9DUk9TUzozLERPVFRFRF9DUk9TUzo0LFNPTElEX09QRU46NSxET1RURURfT1BFTjo2LExPT1BfU1RBUlQ6MTAsTE9PUF9FTkQ6MTEsQUxUX1NUQVJUOjEyLEFMVF9FTFNFOjEzLEFMVF9FTkQ6MTQsT1BUX1NUQVJUOjE1LE9QVF9FTkQ6MTYsQUNUSVZFX1NUQVJUOjE3LEFDVElWRV9FTkQ6MTgsUEFSX1NUQVJUOjE5LFBBUl9BTkQ6MjAsUEFSX0VORDoyMSxSRUNUX1NUQVJUOjIyLFJFQ1RfRU5EOjIzLFNPTElEX1BPSU5UOjI0LERPVFRFRF9QT0lOVDoyNX0sQVJST1dUWVBFOntGSUxMRUQ6MCxPUEVOOjF9LFBMQUNFTUVOVDp7TEVGVE9GOjAsUklHSFRPRjoxLE9WRVI6Mn0sc2V0VGl0bGU6ZnVuY3Rpb24oaSl7TGR0PXYwKGksRGUoKSl9LHNldEM0VHlwZTpGTWV9LFdXPShpLGEpPT57Y29uc3QgZj1pLmFwcGVuZCgicmVjdCIpO2lmKGYuYXR0cigieCIsYS54KSxmLmF0dHIoInkiLGEueSksZi5hdHRyKCJmaWxsIixhLmZpbGwpLGYuYXR0cigic3Ryb2tlIixhLnN0cm9rZSksZi5hdHRyKCJ3aWR0aCIsYS53aWR0aCksZi5hdHRyKCJoZWlnaHQiLGEuaGVpZ2h0KSxhLnJ4IT09dm9pZCAwJiZmLmF0dHIoInJ4IixhLnJ4KSxhLnJ5IT09dm9pZCAwJiZmLmF0dHIoInJ5IixhLnJ5KSxhLmF0dHJzIT09dm9pZCAwKWZvcihjb25zdCBwIGluIGEuYXR0cnMpZi5hdHRyKHAsYS5hdHRyc1twXSk7cmV0dXJuIGEuY2xhc3MhPT12b2lkIDAmJmYuYXR0cigiY2xhc3MiLGEuY2xhc3MpLGZ9LHBOdD0oaSxhKT0+e2NvbnN0IGY9e3g6YS5zdGFydHgseTphLnN0YXJ0eSx3aWR0aDphLnN0b3B4LWEuc3RhcnR4LGhlaWdodDphLnN0b3B5LWEuc3RhcnR5LGZpbGw6YS5maWxsLHN0cm9rZTphLnN0cm9rZSxjbGFzczoicmVjdCJ9O1dXKGksZikubG93ZXIoKX0sc0RlPShpLGEpPT57Y29uc3QgZj1hLnRleHQucmVwbGFjZSgkTiwiICIpLHA9aS5hcHBlbmQoInRleHQiKTtwLmF0dHIoIngiLGEueCkscC5hdHRyKCJ5IixhLnkpLHAuYXR0cigiY2xhc3MiLCJsZWdlbmQiKSxwLnN0eWxlKCJ0ZXh0LWFuY2hvciIsYS5hbmNob3IpLGEuY2xhc3MhPT12b2lkIDAmJnAuYXR0cigiY2xhc3MiLGEuY2xhc3MpO2NvbnN0IHY9cC5hcHBlbmQoInRzcGFuIik7cmV0dXJuIHYuYXR0cigieCIsYS54K2EudGV4dE1hcmdpbioyKSx2LnRleHQoZikscH0sYURlPShpLGEsZixwKT0+e2NvbnN0IHY9aS5hcHBlbmQoImltYWdlIik7di5hdHRyKCJ4IixhKSx2LmF0dHIoInkiLGYpO2NvbnN0IG09WHgocCk7di5hdHRyKCJ4bGluazpocmVmIixtKX0sb0RlPShpLGEsZixwKT0+e2NvbnN0IHY9aS5hcHBlbmQoInVzZSIpO3YuYXR0cigieCIsYSksdi5hdHRyKCJ5IixmKTtjb25zdCBtPVh4KHApO3YuYXR0cigieGxpbms6aHJlZiIsYCMke219YCl9LHU5PSgpPT4oe3g6MCx5OjAsd2lkdGg6MTAwLGhlaWdodDoxMDAsZmlsbDoiI0VERjJBRSIsc3Ryb2tlOiIjNjY2IixhbmNob3I6InN0YXJ0IixyeDowLHJ5OjB9KSxEZHQ9KCk9Pih7eDowLHk6MCx3aWR0aDoxMDAsaGVpZ2h0OjEwMCwidGV4dC1hbmNob3IiOiJzdGFydCIsc3R5bGU6IiM2NjYiLHRleHRNYXJnaW46MCxyeDowLHJ5OjAsdHNwYW46ITB9KSxJZHQ9ZnVuY3Rpb24oaSxhKXtyZXR1cm4gV1coaSxhKX0sYk50PWZ1bmN0aW9uKGksYSxmLHAsdixtKXtjb25zdCBiPWkuYXBwZW5kKCJpbWFnZSIpO2IuYXR0cigid2lkdGgiLGEpLGIuYXR0cigiaGVpZ2h0IixmKSxiLmF0dHIoIngiLHApLGIuYXR0cigieSIsdik7bGV0IEU9bS5zdGFydHNXaXRoKCJkYXRhOmltYWdlL3BuZztiYXNlNjQiKT9tOlh4KG0pO2IuYXR0cigieGxpbms6aHJlZiIsRSl9LGNEZT0oaSxhLGYpPT57Y29uc3QgcD1pLmFwcGVuZCgiZyIpO2xldCB2PTA7Zm9yKGxldCBtIG9mIGEpe2xldCBiPW0udGV4dENvbG9yP20udGV4dENvbG9yOiIjNDQ0NDQ0IixFPW0ubGluZUNvbG9yP20ubGluZUNvbG9yOiIjNDQ0NDQ0IixDPW0ub2Zmc2V0WD9wYXJzZUludChtLm9mZnNldFgpOjAsQT1tLm9mZnNldFk/cGFyc2VJbnQobS5vZmZzZXRZKTowLFA9IiI7aWYodj09PTApe2xldCBqPXAuYXBwZW5kKCJsaW5lIik7ai5hdHRyKCJ4MSIsbS5zdGFydFBvaW50LngpLGouYXR0cigieTEiLG0uc3RhcnRQb2ludC55KSxqLmF0dHIoIngyIixtLmVuZFBvaW50LngpLGouYXR0cigieTIiLG0uZW5kUG9pbnQueSksai5hdHRyKCJzdHJva2Utd2lkdGgiLCIxIiksai5hdHRyKCJzdHJva2UiLEUpLGouc3R5bGUoImZpbGwiLCJub25lIiksbS50eXBlIT09InJlbF9iIiYmai5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrUCsiI2Fycm93aGVhZCkiKSwobS50eXBlPT09ImJpcmVsInx8bS50eXBlPT09InJlbF9iIikmJmouYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrUCsiI2Fycm93ZW5kKSIpLHY9LTF9ZWxzZXtsZXQgaj1wLmFwcGVuZCgicGF0aCIpO2ouYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxIikuYXR0cigic3Ryb2tlIixFKS5hdHRyKCJkIiwiTXN0YXJ0eCxzdGFydHkgUWNvbnRyb2x4LGNvbnRyb2x5IHN0b3B4LHN0b3B5ICIucmVwbGFjZUFsbCgic3RhcnR4IixtLnN0YXJ0UG9pbnQueCkucmVwbGFjZUFsbCgic3RhcnR5IixtLnN0YXJ0UG9pbnQueSkucmVwbGFjZUFsbCgiY29udHJvbHgiLG0uc3RhcnRQb2ludC54KyhtLmVuZFBvaW50LngtbS5zdGFydFBvaW50LngpLzItKG0uZW5kUG9pbnQueC1tLnN0YXJ0UG9pbnQueCkvNCkucmVwbGFjZUFsbCgiY29udHJvbHkiLG0uc3RhcnRQb2ludC55KyhtLmVuZFBvaW50LnktbS5zdGFydFBvaW50LnkpLzIpLnJlcGxhY2VBbGwoInN0b3B4IixtLmVuZFBvaW50LngpLnJlcGxhY2VBbGwoInN0b3B5IixtLmVuZFBvaW50LnkpKSxtLnR5cGUhPT0icmVsX2IiJiZqLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitQKyIjYXJyb3doZWFkKSIpLChtLnR5cGU9PT0iYmlyZWwifHxtLnR5cGU9PT0icmVsX2IiKSYmai5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitQKyIjYXJyb3dlbmQpIil9bGV0IEY9Zi5tZXNzYWdlRm9udCgpO0U1KGYpKG0ubGFiZWwudGV4dCxwLE1hdGgubWluKG0uc3RhcnRQb2ludC54LG0uZW5kUG9pbnQueCkrTWF0aC5hYnMobS5lbmRQb2ludC54LW0uc3RhcnRQb2ludC54KS8yK0MsTWF0aC5taW4obS5zdGFydFBvaW50LnksbS5lbmRQb2ludC55KStNYXRoLmFicyhtLmVuZFBvaW50LnktbS5zdGFydFBvaW50LnkpLzIrQSxtLmxhYmVsLndpZHRoLG0ubGFiZWwuaGVpZ2h0LHtmaWxsOmJ9LEYpLG0udGVjaG4mJm0udGVjaG4udGV4dCE9PSIiJiYoRj1mLm1lc3NhZ2VGb250KCksRTUoZikoIlsiK20udGVjaG4udGV4dCsiXSIscCxNYXRoLm1pbihtLnN0YXJ0UG9pbnQueCxtLmVuZFBvaW50LngpK01hdGguYWJzKG0uZW5kUG9pbnQueC1tLnN0YXJ0UG9pbnQueCkvMitDLE1hdGgubWluKG0uc3RhcnRQb2ludC55LG0uZW5kUG9pbnQueSkrTWF0aC5hYnMobS5lbmRQb2ludC55LW0uc3RhcnRQb2ludC55KS8yK2YubWVzc2FnZUZvbnRTaXplKzUrQSxNYXRoLm1heChtLmxhYmVsLndpZHRoLG0udGVjaG4ud2lkdGgpLG0udGVjaG4uaGVpZ2h0LHtmaWxsOmIsImZvbnQtc3R5bGUiOiJpdGFsaWMifSxGKSl9fSx1RGU9ZnVuY3Rpb24oaSxhLGYpe2NvbnN0IHA9aS5hcHBlbmQoImciKTtsZXQgdj1hLmJnQ29sb3I/YS5iZ0NvbG9yOiJub25lIixtPWEuYm9yZGVyQ29sb3I/YS5ib3JkZXJDb2xvcjoiIzQ0NDQ0NCIsYj1hLmZvbnRDb2xvcj9hLmZvbnRDb2xvcjoiYmxhY2siLEU9eyJzdHJva2Utd2lkdGgiOjEsInN0cm9rZS1kYXNoYXJyYXkiOiI3LjAsNy4wIn07YS5ub2RlVHlwZSYmKEU9eyJzdHJva2Utd2lkdGgiOjF9KTtsZXQgQz17eDphLngseTphLnksZmlsbDp2LHN0cm9rZTptLHdpZHRoOmEud2lkdGgsaGVpZ2h0OmEuaGVpZ2h0LHJ4OjIuNSxyeToyLjUsYXR0cnM6RX07SWR0KHAsQyk7bGV0IEE9Zi5ib3VuZGFyeUZvbnQoKTtBLmZvbnRXZWlnaHQ9ImJvbGQiLEEuZm9udFNpemU9QS5mb250U2l6ZSsyLEEuZm9udENvbG9yPWIsRTUoZikoYS5sYWJlbC50ZXh0LHAsYS54LGEueSthLmxhYmVsLlksYS53aWR0aCxhLmhlaWdodCx7ZmlsbDoiIzQ0NDQ0NCJ9LEEpLGEudHlwZSYmYS50eXBlLnRleHQhPT0iIiYmKEE9Zi5ib3VuZGFyeUZvbnQoKSxBLmZvbnRDb2xvcj1iLEU1KGYpKGEudHlwZS50ZXh0LHAsYS54LGEueSthLnR5cGUuWSxhLndpZHRoLGEuaGVpZ2h0LHtmaWxsOiIjNDQ0NDQ0In0sQSkpLGEuZGVzY3ImJmEuZGVzY3IudGV4dCE9PSIiJiYoQT1mLmJvdW5kYXJ5Rm9udCgpLEEuZm9udFNpemU9QS5mb250U2l6ZS0yLEEuZm9udENvbG9yPWIsRTUoZikoYS5kZXNjci50ZXh0LHAsYS54LGEueSthLmRlc2NyLlksYS53aWR0aCxhLmhlaWdodCx7ZmlsbDoiIzQ0NDQ0NCJ9LEEpKX0sbERlPWZ1bmN0aW9uKGksYSxmKXt2YXIgRjtsZXQgcD1hLmJnQ29sb3I/YS5iZ0NvbG9yOmZbYS50eXBlQzRTaGFwZS50ZXh0KyJfYmdfY29sb3IiXSx2PWEuYm9yZGVyQ29sb3I/YS5ib3JkZXJDb2xvcjpmW2EudHlwZUM0U2hhcGUudGV4dCsiX2JvcmRlcl9jb2xvciJdLG09YS5mb250Q29sb3I/YS5mb250Q29sb3I6IiNGRkZGRkYiLGI9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBREFBQUFBd0NBSUFBQURZWUc3UUFBQUNEMGxFUVZSNFh1MllvVTRFTVJDR1QrNGo4QWk4QWhhSDRRSGdBVWpRdUZNRUNVZ01JVWd3SkFnTWhnUXNBWVVpSkNpUUlCQlkrRUlUc2pmVGRtZTZWMjR2NGM4dnlHYmIrWmpPdE4wYk5jdmpRWG1rSDgzV3ZZQld0bzZQTG02djdwN3VIMS93MmZYRCtQQnljWDFQdjJsM0lkRG0vdm43eCtkWFFpQXViUnpvVVJhN2dSWldkMGlHUklpSmJPbmhuZllCUVpOSmpOYnV5WTJlSkc4ZmtERTNiYkc0ZXA2TUhVQXNnWXhtRTNuVnM2VnNCV0pTR2Njc09sRlBtTElWaU16TE9CN3BDVk8yQXRISk1vaEg3Rmg2enFpdFFLN20wckp2QVZZZ0djRXBlLy9QTGREejY1c000cEY5TjdJQ2NYREtJQjVOdjZqN3REME5vU2RNMlFyVTlHZzBld0UxTHFCaEhSM0JCZHZqMnZhcG5pZGpIeEQvcTZ2ZDdQdmhyMzFBd2NZOGVYTVRYQUtFQ1paSkZYdUVxMjdhTGdRSzV1TE1vaENlbkdHdUdld094U2pCdllCcWVHNkIrTnFpYmxnZ2RqbmMrWlhEeStGTkZwRnp3NzZPM1VCQVJPdVhoNkZvaUFjZjVnOWVUdlVnenkwbldnNkk4Y1hIUlVwZzViT1ZCQ28rS0RwRmFqT2YyM0dnUG1lN1JTUStsYWNJRU5VZ0o2Z2cxazZIamdPbHFuTHFpcDR0RXVodjBoTkVNWFVEMGNseVhFM3A2cFpBMFMybm52VGxYd0xKRVpXbGI3Y1RRSDErVVNnVE40VmhBZW5tL3dlYTFPQ0FPbXFvNmZFMVdDYjlXU0tCYWgrcmJVV1BXQW1FMlJ2azBBcGlCNDVlT3lOQXpVOHhjVHZqOEt2a0tFb09hSVllSE5BM1p1eWdBdkZNVU8wQUFBQUFTVVZPUks1Q1lJST0iO3N3aXRjaChhLnR5cGVDNFNoYXBlLnRleHQpe2Nhc2UicGVyc29uIjpiPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQURBQUFBQXdDQUlBQUFEWVlHN1FBQUFDRDBsRVFWUjRYdTJZb1U0RU1SQ0dUKzRqOEFpOEFoYUg0UUhnQVVqUXVGTUVDVWdNSVVnd0pBZ01oZ1FzQVlVaUpDaVFJQkJZK0VJVHNqZlRkbWU2VjI0djRjOHZ5R2JiK1pqT3ROMGJOY3ZqUVhta0g4M1d2WUJXdG82UExtNnY3cDd1SDEvdzJmWEQrUEJ5Y1gxUHYybDNJZERtL3ZuN3grZFhRaUF1YlJ6b1VSYTdnUlpXZDBpR1JJaUpiT25obmZZQlFaTkpqTmJ1eVkyZUpHOGZrREUzYmJHNGVwNk1IVUFzZ1l4bUUzblZzNlZzQldKU0djY3NPbEZQbUxJVmlNekxPQjdwQ1ZPMkF0SEpNb2hIN0ZoNnpxaXRRSzdtMHJKdkFWWWdHY0VwZS8vUExkRHo2NXNNNHBGOU43SUNjWERLSUI1TnY2ajd0RDBOb1NkTTJRclU5R2cwZXdFMUxxQmhIUjNCQmR2ajJ2YXBuaWRqSHhEL3E2dmQ3UHZocjMxQXdjWThlWE1UWEFLRUNaWkpGWHVFcTI3YUxnUUs1dUxNb2hDZW5HR3VHZXdPeFNqQnZZQnFlRzZCK05xaWJsZ2dkam5jK1pYRHkrRk5GcEZ6dzc2TzNVQkFST3VYaDZGb2lBY2Y1ZzllVHZVZ3p5MG5XZzZJOGNYSFJVcGc1Yk9WQkNvK0tEcEZhak9mMjNHZ1BtZTdSU1ErbGFjSUVOVWdKNmdnMWs2SGpnT2xxbkxxaXA0dEV1aHYwaE5FTVhVRDBjbHlYRTNwNnBaQTBTMm5udlRsWHdMSkVaV2xiN2NUUUgxK1VTZ1RONFZoQWVubS93ZWExT0NBT21xbzZmRTFXQ2I5V1NLQmFoK3JiVVdQV0FtRTJSdmswQXBpQjQ1ZU95TkF6VTh4Y1R2ajhLdmtLRW9PYUlZZUhOQTNadXlnQXZGTVVPMEFBQUFBU1VWT1JLNUNZSUk9IjticmVhaztjYXNlImV4dGVybmFsX3BlcnNvbiI6Yj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFEQUFBQUF3Q0FJQUFBRFlZRzdRQUFBQjZFbEVRVlI0WHUyWUxZK0VNQkNHOStkV3IwYWowV2cwR28xR28wK2o4WGR2MnVUQ3Z2MWdwdDBlYkhLUHVoRGFlVzQ2MDVaOW1Kdng0QWRYVXlUVWRkMDh6K3U2ZmxtV1pSbkhzV2thZms5RHB0QXdEUHUrZjBlQVl0dTJQRWFHV3VqNWZDSVpyQkFDMmVMQkFuUkNzRWtreG1lYUpwN2lESjJRTURkSHNMZzhTeEtGRUphQW84bEFYbm11T0ZJaFRNcHh4S0FUZWJvNFVpRmtudU5vNE9uaVNJWFF5UnhFQTNZc25qR0NWRWpWWEQ3eUxVQXF4QkdVeVB2L1k0VzJiZU1nR3VTN2tWUUlCeWNIMGZEK29pNXBlelFFVHhkSEttUUtHazFlUUVZbGRLK2p3NUd4UGZaOXo3TWswUW5oZjFXMW0zdy8vRVVuNUJEbVNac2JSNDRRUUxCRXFyQkhxT3JtU0thUUF4ZG5MQXJDcnhaY003QTdaS3M0aW9ScThMRkMrTnBDM1dDQkpzdnBWdzVlZG05aUVYRnV5TmZ4WEFnU3dmckZRMWMwaU5kYThBZGVqdlVnbmt0T3RKUVF4bWNmRnpHZ2xjNVdWQ2o3b0RnRnFVMThib2VGU3M1MkNVaDhMRThCSVZRRFQxQUJyQjBIdGdTRVlsWDVkb0puQ3d2OVRYb2NLQ2FLYm53aGRES1BxNGxmM1N3VTNITHE0Vi8rV1loSFZNYS8zYjRJbGZ5aWtBZHVDa2NCYzdtUTMvei9RcS9jVHVpa2hrekIxMkFlL21jSkM5VStWbzhFajFnV0F0Z2JlR2dGc0FNSHI1MEJJV09MQ2JlenZocEJGVWRZNkVKdUovUURXMFhvTVg2MHpaMEFBQUFBU1VWT1JLNUNZSUk9IjticmVha31jb25zdCBFPWkuYXBwZW5kKCJnIik7RS5hdHRyKCJjbGFzcyIsInBlcnNvbi1tYW4iKTtjb25zdCBDPXU5KCk7c3dpdGNoKGEudHlwZUM0U2hhcGUudGV4dCl7Y2FzZSJwZXJzb24iOmNhc2UiZXh0ZXJuYWxfcGVyc29uIjpjYXNlInN5c3RlbSI6Y2FzZSJleHRlcm5hbF9zeXN0ZW0iOmNhc2UiY29udGFpbmVyIjpjYXNlImV4dGVybmFsX2NvbnRhaW5lciI6Y2FzZSJjb21wb25lbnQiOmNhc2UiZXh0ZXJuYWxfY29tcG9uZW50IjpDLng9YS54LEMueT1hLnksQy5maWxsPXAsQy53aWR0aD1hLndpZHRoLEMuaGVpZ2h0PWEuaGVpZ2h0LEMuc3Ryb2tlPXYsQy5yeD0yLjUsQy5yeT0yLjUsQy5hdHRycz17InN0cm9rZS13aWR0aCI6LjV9LElkdChFLEMpO2JyZWFrO2Nhc2Uic3lzdGVtX2RiIjpjYXNlImV4dGVybmFsX3N5c3RlbV9kYiI6Y2FzZSJjb250YWluZXJfZGIiOmNhc2UiZXh0ZXJuYWxfY29udGFpbmVyX2RiIjpjYXNlImNvbXBvbmVudF9kYiI6Y2FzZSJleHRlcm5hbF9jb21wb25lbnRfZGIiOkUuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIscCkuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41IikuYXR0cigic3Ryb2tlIix2KS5hdHRyKCJkIiwiTXN0YXJ0eCxzdGFydHljMCwtMTAgaGFsZiwtMTAgaGFsZiwtMTBjMCwwIGhhbGYsMCBoYWxmLDEwbDAsaGVpZ2h0YzAsMTAgLWhhbGYsMTAgLWhhbGYsMTBjMCwwIC1oYWxmLDAgLWhhbGYsLTEwbDAsLWhlaWdodCIucmVwbGFjZUFsbCgic3RhcnR4IixhLngpLnJlcGxhY2VBbGwoInN0YXJ0eSIsYS55KS5yZXBsYWNlQWxsKCJoYWxmIixhLndpZHRoLzIpLnJlcGxhY2VBbGwoImhlaWdodCIsYS5oZWlnaHQpKSxFLmFwcGVuZCgicGF0aCIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41IikuYXR0cigic3Ryb2tlIix2KS5hdHRyKCJkIiwiTXN0YXJ0eCxzdGFydHljMCwxMCBoYWxmLDEwIGhhbGYsMTBjMCwwIGhhbGYsMCBoYWxmLC0xMCIucmVwbGFjZUFsbCgic3RhcnR4IixhLngpLnJlcGxhY2VBbGwoInN0YXJ0eSIsYS55KS5yZXBsYWNlQWxsKCJoYWxmIixhLndpZHRoLzIpKTticmVhaztjYXNlInN5c3RlbV9xdWV1ZSI6Y2FzZSJleHRlcm5hbF9zeXN0ZW1fcXVldWUiOmNhc2UiY29udGFpbmVyX3F1ZXVlIjpjYXNlImV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZSI6Y2FzZSJjb21wb25lbnRfcXVldWUiOmNhc2UiZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlIjpFLmFwcGVuZCgicGF0aCIpLmF0dHIoImZpbGwiLHApLmF0dHIoInN0cm9rZS13aWR0aCIsIjAuNSIpLmF0dHIoInN0cm9rZSIsdikuYXR0cigiZCIsIk1zdGFydHgsc3RhcnR5bHdpZHRoLDBjNSwwIDUsaGFsZiA1LGhhbGZjMCwwIDAsaGFsZiAtNSxoYWxmbC13aWR0aCwwYy01LDAgLTUsLWhhbGYgLTUsLWhhbGZjMCwwIDAsLWhhbGYgNSwtaGFsZiIucmVwbGFjZUFsbCgic3RhcnR4IixhLngpLnJlcGxhY2VBbGwoInN0YXJ0eSIsYS55KS5yZXBsYWNlQWxsKCJ3aWR0aCIsYS53aWR0aCkucmVwbGFjZUFsbCgiaGFsZiIsYS5oZWlnaHQvMikpLEUuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIwLjUiKS5hdHRyKCJzdHJva2UiLHYpLmF0dHIoImQiLCJNc3RhcnR4LHN0YXJ0eWMtNSwwIC01LGhhbGYgLTUsaGFsZmMwLGhhbGYgNSxoYWxmIDUsaGFsZiIucmVwbGFjZUFsbCgic3RhcnR4IixhLngrYS53aWR0aCkucmVwbGFjZUFsbCgic3RhcnR5IixhLnkpLnJlcGxhY2VBbGwoImhhbGYiLGEuaGVpZ2h0LzIpKTticmVha31sZXQgQT1tRGUoZixhLnR5cGVDNFNoYXBlLnRleHQpO3N3aXRjaChFLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLG0pLmF0dHIoImZvbnQtZmFtaWx5IixBLmZvbnRGYW1pbHkpLmF0dHIoImZvbnQtc2l6ZSIsQS5mb250U2l6ZS0yKS5hdHRyKCJmb250LXN0eWxlIiwiaXRhbGljIikuYXR0cigibGVuZ3RoQWRqdXN0Iiwic3BhY2luZyIpLmF0dHIoInRleHRMZW5ndGgiLGEudHlwZUM0U2hhcGUud2lkdGgpLmF0dHIoIngiLGEueCthLndpZHRoLzItYS50eXBlQzRTaGFwZS53aWR0aC8yKS5hdHRyKCJ5IixhLnkrYS50eXBlQzRTaGFwZS5ZKS50ZXh0KCI8PCIrYS50eXBlQzRTaGFwZS50ZXh0KyI+PiIpLGEudHlwZUM0U2hhcGUudGV4dCl7Y2FzZSJwZXJzb24iOmNhc2UiZXh0ZXJuYWxfcGVyc29uIjpiTnQoRSw0OCw0OCxhLngrYS53aWR0aC8yLTI0LGEueSthLmltYWdlLlksYik7YnJlYWt9bGV0IFA9ZlthLnR5cGVDNFNoYXBlLnRleHQrIkZvbnQiXSgpO3JldHVybiBQLmZvbnRXZWlnaHQ9ImJvbGQiLFAuZm9udFNpemU9UC5mb250U2l6ZSsyLFAuZm9udENvbG9yPW0sRTUoZikoYS5sYWJlbC50ZXh0LEUsYS54LGEueSthLmxhYmVsLlksYS53aWR0aCxhLmhlaWdodCx7ZmlsbDptfSxQKSxQPWZbYS50eXBlQzRTaGFwZS50ZXh0KyJGb250Il0oKSxQLmZvbnRDb2xvcj1tLGEudGVjaG4mJigoRj1hLnRlY2huKT09bnVsbD92b2lkIDA6Ri50ZXh0KSE9PSIiP0U1KGYpKGEudGVjaG4udGV4dCxFLGEueCxhLnkrYS50ZWNobi5ZLGEud2lkdGgsYS5oZWlnaHQse2ZpbGw6bSwiZm9udC1zdHlsZSI6Iml0YWxpYyJ9LFApOmEudHlwZSYmYS50eXBlLnRleHQhPT0iIiYmRTUoZikoYS50eXBlLnRleHQsRSxhLngsYS55K2EudHlwZS5ZLGEud2lkdGgsYS5oZWlnaHQse2ZpbGw6bSwiZm9udC1zdHlsZSI6Iml0YWxpYyJ9LFApLGEuZGVzY3ImJmEuZGVzY3IudGV4dCE9PSIiJiYoUD1mLnBlcnNvbkZvbnQoKSxQLmZvbnRDb2xvcj1tLEU1KGYpKGEuZGVzY3IudGV4dCxFLGEueCxhLnkrYS5kZXNjci5ZLGEud2lkdGgsYS5oZWlnaHQse2ZpbGw6bX0sUCkpLGEuaGVpZ2h0fSxoRGU9ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoInN5bWJvbCIpLmF0dHIoImlkIiwiZGF0YWJhc2UiKS5hdHRyKCJmaWxsLXJ1bGUiLCJldmVub2RkIikuYXR0cigiY2xpcC1ydWxlIiwiZXZlbm9kZCIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKC41KSIpLmF0dHIoImQiLCJNMTIuMjU4LjAwMWwuMjU2LjAwNC4yNTUuMDA1LjI1My4wMDguMjUxLjAxLjI0OS4wMTIuMjQ3LjAxNS4yNDYuMDE2LjI0Mi4wMTkuMjQxLjAyLjIzOS4wMjMuMjM2LjAyNC4yMzMuMDI3LjIzMS4wMjguMjI5LjAzMS4yMjUuMDMyLjIyMy4wMzQuMjIuMDM2LjIxNy4wMzguMjE0LjA0LjIxMS4wNDEuMjA4LjA0My4yMDUuMDQ1LjIwMS4wNDYuMTk4LjA0OC4xOTQuMDUuMTkxLjA1MS4xODcuMDUzLjE4My4wNTQuMTguMDU2LjE3NS4wNTcuMTcyLjA1OS4xNjguMDYuMTYzLjA2MS4xNi4wNjMuMTU1LjA2NC4xNS4wNjYuMDc0LjAzMy4wNzMuMDMzLjA3MS4wMzQuMDcuMDM0LjA2OS4wMzUuMDY4LjAzNS4wNjcuMDM1LjA2Ni4wMzUuMDY0LjAzNi4wNjQuMDM2LjA2Mi4wMzYuMDYuMDM2LjA2LjAzNy4wNTguMDM3LjA1OC4wMzcuMDU1LjAzOC4wNTUuMDM4LjA1My4wMzguMDUyLjAzOC4wNTEuMDM5LjA1LjAzOS4wNDguMDM5LjA0Ny4wMzkuMDQ1LjA0LjA0NC4wNC4wNDMuMDQuMDQxLjA0LjA0LjA0MS4wMzkuMDQxLjAzNy4wNDEuMDM2LjA0MS4wMzQuMDQxLjAzMy4wNDIuMDMyLjA0Mi4wMy4wNDIuMDI5LjA0Mi4wMjcuMDQyLjAyNi4wNDMuMDI0LjA0My4wMjMuMDQzLjAyMS4wNDMuMDIuMDQzLjAxOC4wNDQuMDE3LjA0My4wMTUuMDQ0LjAxMy4wNDQuMDEyLjA0NC4wMTEuMDQ1LjAwOS4wNDQuMDA3LjA0NS4wMDYuMDQ1LjAwNC4wNDUuMDAyLjA0NS4wMDEuMDQ1djE3bC0uMDAxLjA0NS0uMDAyLjA0NS0uMDA0LjA0NS0uMDA2LjA0NS0uMDA3LjA0NS0uMDA5LjA0NC0uMDExLjA0NS0uMDEyLjA0NC0uMDEzLjA0NC0uMDE1LjA0NC0uMDE3LjA0My0uMDE4LjA0NC0uMDIuMDQzLS4wMjEuMDQzLS4wMjMuMDQzLS4wMjQuMDQzLS4wMjYuMDQzLS4wMjcuMDQyLS4wMjkuMDQyLS4wMy4wNDItLjAzMi4wNDItLjAzMy4wNDItLjAzNC4wNDEtLjAzNi4wNDEtLjAzNy4wNDEtLjAzOS4wNDEtLjA0LjA0MS0uMDQxLjA0LS4wNDMuMDQtLjA0NC4wNC0uMDQ1LjA0LS4wNDcuMDM5LS4wNDguMDM5LS4wNS4wMzktLjA1MS4wMzktLjA1Mi4wMzgtLjA1My4wMzgtLjA1NS4wMzgtLjA1NS4wMzgtLjA1OC4wMzctLjA1OC4wMzctLjA2LjAzNy0uMDYuMDM2LS4wNjIuMDM2LS4wNjQuMDM2LS4wNjQuMDM2LS4wNjYuMDM1LS4wNjcuMDM1LS4wNjguMDM1LS4wNjkuMDM1LS4wNy4wMzQtLjA3MS4wMzQtLjA3My4wMzMtLjA3NC4wMzMtLjE1LjA2Ni0uMTU1LjA2NC0uMTYuMDYzLS4xNjMuMDYxLS4xNjguMDYtLjE3Mi4wNTktLjE3NS4wNTctLjE4LjA1Ni0uMTgzLjA1NC0uMTg3LjA1My0uMTkxLjA1MS0uMTk0LjA1LS4xOTguMDQ4LS4yMDEuMDQ2LS4yMDUuMDQ1LS4yMDguMDQzLS4yMTEuMDQxLS4yMTQuMDQtLjIxNy4wMzgtLjIyLjAzNi0uMjIzLjAzNC0uMjI1LjAzMi0uMjI5LjAzMS0uMjMxLjAyOC0uMjMzLjAyNy0uMjM2LjAyNC0uMjM5LjAyMy0uMjQxLjAyLS4yNDIuMDE5LS4yNDYuMDE2LS4yNDcuMDE1LS4yNDkuMDEyLS4yNTEuMDEtLjI1My4wMDgtLjI1NS4wMDUtLjI1Ni4wMDQtLjI1OC4wMDEtLjI1OC0uMDAxLS4yNTYtLjAwNC0uMjU1LS4wMDUtLjI1My0uMDA4LS4yNTEtLjAxLS4yNDktLjAxMi0uMjQ3LS4wMTUtLjI0NS0uMDE2LS4yNDMtLjAxOS0uMjQxLS4wMi0uMjM4LS4wMjMtLjIzNi0uMDI0LS4yMzQtLjAyNy0uMjMxLS4wMjgtLjIyOC0uMDMxLS4yMjYtLjAzMi0uMjIzLS4wMzQtLjIyLS4wMzYtLjIxNy0uMDM4LS4yMTQtLjA0LS4yMTEtLjA0MS0uMjA4LS4wNDMtLjIwNC0uMDQ1LS4yMDEtLjA0Ni0uMTk4LS4wNDgtLjE5NS0uMDUtLjE5LS4wNTEtLjE4Ny0uMDUzLS4xODQtLjA1NC0uMTc5LS4wNTYtLjE3Ni0uMDU3LS4xNzItLjA1OS0uMTY3LS4wNi0uMTY0LS4wNjEtLjE1OS0uMDYzLS4xNTUtLjA2NC0uMTUxLS4wNjYtLjA3NC0uMDMzLS4wNzItLjAzMy0uMDcyLS4wMzQtLjA3LS4wMzQtLjA2OS0uMDM1LS4wNjgtLjAzNS0uMDY3LS4wMzUtLjA2Ni0uMDM1LS4wNjQtLjAzNi0uMDYzLS4wMzYtLjA2Mi0uMDM2LS4wNjEtLjAzNi0uMDYtLjAzNy0uMDU4LS4wMzctLjA1Ny0uMDM3LS4wNTYtLjAzOC0uMDU1LS4wMzgtLjA1My0uMDM4LS4wNTItLjAzOC0uMDUxLS4wMzktLjA0OS0uMDM5LS4wNDktLjAzOS0uMDQ2LS4wMzktLjA0Ni0uMDQtLjA0NC0uMDQtLjA0My0uMDQtLjA0MS0uMDQtLjA0LS4wNDEtLjAzOS0uMDQxLS4wMzctLjA0MS0uMDM2LS4wNDEtLjAzNC0uMDQxLS4wMzMtLjA0Mi0uMDMyLS4wNDItLjAzLS4wNDItLjAyOS0uMDQyLS4wMjctLjA0Mi0uMDI2LS4wNDMtLjAyNC0uMDQzLS4wMjMtLjA0My0uMDIxLS4wNDMtLjAyLS4wNDMtLjAxOC0uMDQ0LS4wMTctLjA0My0uMDE1LS4wNDQtLjAxMy0uMDQ0LS4wMTItLjA0NC0uMDExLS4wNDUtLjAwOS0uMDQ0LS4wMDctLjA0NS0uMDA2LS4wNDUtLjAwNC0uMDQ1LS4wMDItLjA0NS0uMDAxLS4wNDV2LTE3bC4wMDEtLjA0NS4wMDItLjA0NS4wMDQtLjA0NS4wMDYtLjA0NS4wMDctLjA0NS4wMDktLjA0NC4wMTEtLjA0NS4wMTItLjA0NC4wMTMtLjA0NC4wMTUtLjA0NC4wMTctLjA0My4wMTgtLjA0NC4wMi0uMDQzLjAyMS0uMDQzLjAyMy0uMDQzLjAyNC0uMDQzLjAyNi0uMDQzLjAyNy0uMDQyLjAyOS0uMDQyLjAzLS4wNDIuMDMyLS4wNDIuMDMzLS4wNDIuMDM0LS4wNDEuMDM2LS4wNDEuMDM3LS4wNDEuMDM5LS4wNDEuMDQtLjA0MS4wNDEtLjA0LjA0My0uMDQuMDQ0LS4wNC4wNDYtLjA0LjA0Ni0uMDM5LjA0OS0uMDM5LjA0OS0uMDM5LjA1MS0uMDM5LjA1Mi0uMDM4LjA1My0uMDM4LjA1NS0uMDM4LjA1Ni0uMDM4LjA1Ny0uMDM3LjA1OC0uMDM3LjA2LS4wMzcuMDYxLS4wMzYuMDYyLS4wMzYuMDYzLS4wMzYuMDY0LS4wMzYuMDY2LS4wMzUuMDY3LS4wMzUuMDY4LS4wMzUuMDY5LS4wMzUuMDctLjAzNC4wNzItLjAzNC4wNzItLjAzMy4wNzQtLjAzMy4xNTEtLjA2Ni4xNTUtLjA2NC4xNTktLjA2My4xNjQtLjA2MS4xNjctLjA2LjE3Mi0uMDU5LjE3Ni0uMDU3LjE3OS0uMDU2LjE4NC0uMDU0LjE4Ny0uMDUzLjE5LS4wNTEuMTk1LS4wNS4xOTgtLjA0OC4yMDEtLjA0Ni4yMDQtLjA0NS4yMDgtLjA0My4yMTEtLjA0MS4yMTQtLjA0LjIxNy0uMDM4LjIyLS4wMzYuMjIzLS4wMzQuMjI2LS4wMzIuMjI4LS4wMzEuMjMxLS4wMjguMjM0LS4wMjcuMjM2LS4wMjQuMjM4LS4wMjMuMjQxLS4wMi4yNDMtLjAxOS4yNDUtLjAxNi4yNDctLjAxNS4yNDktLjAxMi4yNTEtLjAxLjI1My0uMDA4LjI1NS0uMDA1LjI1Ni0uMDA0LjI1OC0uMDAxLjI1OC4wMDF6bS05LjI1OCAyMC40OTl2LjAxbC4wMDEuMDIxLjAwMy4wMjEuMDA0LjAyMi4wMDUuMDIxLjAwNi4wMjIuMDA3LjAyMi4wMDkuMDIzLjAxLjAyMi4wMTEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTUuMDIzLjAxNi4wMjQuMDE3LjAyMy4wMTguMDI0LjAxOS4wMjQuMDIxLjAyNC4wMjIuMDI1LjAyMy4wMjQuMDI0LjAyNS4wNTIuMDQ5LjA1Ni4wNS4wNjEuMDUxLjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTEuMDc5LjA1Mi4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTEuMTA1LjA1Mi4xMS4wNTIuMTE0LjA1MS4xMTkuMDUxLjEyMy4wNTEuMTI3LjA1LjEzMS4wNS4xMzUuMDUuMTM5LjA0OC4xNDQuMDQ5LjE0Ny4wNDcuMTUyLjA0Ny4xNTUuMDQ3LjE2LjA0NS4xNjMuMDQ1LjE2Ny4wNDMuMTcxLjA0My4xNzYuMDQxLjE3OC4wNDEuMTgzLjAzOS4xODcuMDM5LjE5LjAzNy4xOTQuMDM1LjE5Ny4wMzUuMjAyLjAzMy4yMDQuMDMxLjIwOS4wMy4yMTIuMDI5LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjEuMjMuMDIuMjMzLjAxOC4yMzYuMDE2LjI0LjAxNS4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDUuMjU2LjAwNC4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDQuMjU0LS4wMDUuMjUtLjAwOC4yNDctLjAxMS4yNDQtLjAxMi4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyMS4yMjYtLjAyMS4yMjQtLjAyNC4yMi0uMDI2LjIxNi0uMDI3LjIxMi0uMDI4LjIxLS4wMzEuMjA1LS4wMzEuMjAyLS4wMzQuMTk4LS4wMzQuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wNC4xNzktLjA0LjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQ0LjE2My0uMDQ1LjE2LS4wNDYuMTU1LS4wNDYuMTUyLS4wNDcuMTQ4LS4wNDguMTQzLS4wNDkuMTM5LS4wNDkuMTM2LS4wNS4xMzEtLjA1LjEyNi0uMDUuMTIzLS4wNTEuMTE4LS4wNTIuMTE0LS4wNTEuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1My4wODMtLjA1MS4wNzktLjA1Mi4wNzQtLjA1Mi4wNy0uMDUxLjA2NS0uMDUxLjA2LS4wNTEuMDU2LS4wNS4wNTEtLjA1LjAyMy0uMDI0LjAyMy0uMDI1LjAyMS0uMDI0LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjQuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMy4wMS0uMDIyLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxdi00LjEyN2wtLjA3Ny4wNTUtLjA4LjA1My0uMDgzLjA1NC0uMDg1LjA1My0uMDg3LjA1Mi0uMDkuMDUyLS4wOTMuMDUxLS4wOTUuMDUtLjA5Ny4wNS0uMS4wNDktLjEwMi4wNDktLjEwNS4wNDgtLjEwNi4wNDctLjEwOS4wNDctLjExMS4wNDYtLjExNC4wNDUtLjExNS4wNDUtLjExOC4wNDQtLjEyLjA0My0uMTIyLjA0Mi0uMTI0LjA0Mi0uMTI2LjA0MS0uMTI4LjA0LS4xMy4wNC0uMTMyLjAzOC0uMTM0LjAzOC0uMTM1LjAzNy0uMTM4LjAzNy0uMTM5LjAzNS0uMTQyLjAzNS0uMTQzLjAzNC0uMTQ0LjAzMy0uMTQ3LjAzMi0uMTQ4LjAzMS0uMTUuMDMtLjE1MS4wMy0uMTUzLjAyOS0uMTU0LjAyNy0uMTU2LjAyNy0uMTU4LjAyNi0uMTU5LjAyNS0uMTYxLjAyNC0uMTYyLjAyMy0uMTYzLjAyMi0uMTY1LjAyMS0uMTY2LjAyLS4xNjcuMDE5LS4xNjkuMDE4LS4xNjkuMDE3LS4xNzEuMDE2LS4xNzMuMDE1LS4xNzMuMDE0LS4xNzUuMDEzLS4xNzUuMDEyLS4xNzcuMDExLS4xNzguMDEtLjE3OS4wMDgtLjE3OS4wMDgtLjE4MS4wMDYtLjE4Mi4wMDUtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDJoLS4zN2wtLjE4NC0uMDAyLS4xODQtLjAwMy0uMTgyLS4wMDQtLjE4Mi0uMDA1LS4xODEtLjAwNi0uMTc5LS4wMDgtLjE3OS0uMDA4LS4xNzgtLjAxLS4xNzYtLjAxMS0uMTc2LS4wMTItLjE3NS0uMDEzLS4xNzMtLjAxNC0uMTcyLS4wMTUtLjE3MS0uMDE2LS4xNy0uMDE3LS4xNjktLjAxOC0uMTY3LS4wMTktLjE2Ni0uMDItLjE2NS0uMDIxLS4xNjMtLjAyMi0uMTYyLS4wMjMtLjE2MS0uMDI0LS4xNTktLjAyNS0uMTU3LS4wMjYtLjE1Ni0uMDI3LS4xNTUtLjAyNy0uMTUzLS4wMjktLjE1MS0uMDMtLjE1LS4wMy0uMTQ4LS4wMzEtLjE0Ni0uMDMyLS4xNDUtLjAzMy0uMTQzLS4wMzQtLjE0MS0uMDM1LS4xNC0uMDM1LS4xMzctLjAzNy0uMTM2LS4wMzctLjEzNC0uMDM4LS4xMzItLjAzOC0uMTMtLjA0LS4xMjgtLjA0LS4xMjYtLjA0MS0uMTI0LS4wNDItLjEyMi0uMDQyLS4xMi0uMDQ0LS4xMTctLjA0My0uMTE2LS4wNDUtLjExMy0uMDQ1LS4xMTItLjA0Ni0uMTA5LS4wNDctLjEwNi0uMDQ3LS4xMDUtLjA0OC0uMTAyLS4wNDktLjEtLjA0OS0uMDk3LS4wNS0uMDk1LS4wNS0uMDkzLS4wNTItLjA5LS4wNTEtLjA4Ny0uMDUyLS4wODUtLjA1My0uMDgzLS4wNTQtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTI3em0wLTUuNjU0di4wMTFsLjAwMS4wMjEuMDAzLjAyMS4wMDQuMDIxLjAwNS4wMjIuMDA2LjAyMi4wMDcuMDIyLjAwOS4wMjIuMDEuMDIyLjAxMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNS4wMjQuMDE2LjAyMy4wMTcuMDI0LjAxOC4wMjQuMDE5LjAyNC4wMjEuMDI0LjAyMi4wMjQuMDIzLjAyNS4wMjQuMDI0LjA1Mi4wNS4wNTYuMDUuMDYxLjA1LjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTIuMDc5LjA1MS4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTIuMTA1LjA1Mi4xMS4wNTEuMTE0LjA1MS4xMTkuMDUyLjEyMy4wNS4xMjcuMDUxLjEzMS4wNS4xMzUuMDQ5LjEzOS4wNDkuMTQ0LjA0OC4xNDcuMDQ4LjE1Mi4wNDcuMTU1LjA0Ni4xNi4wNDUuMTYzLjA0NS4xNjcuMDQ0LjE3MS4wNDIuMTc2LjA0Mi4xNzguMDQuMTgzLjA0LjE4Ny4wMzguMTkuMDM3LjE5NC4wMzYuMTk3LjAzNC4yMDIuMDMzLjIwNC4wMzIuMjA5LjAzLjIxMi4wMjguMjE2LjAyNy4yMTkuMDI1LjIyMi4wMjQuMjI2LjAyMi4yMy4wMi4yMzMuMDE4LjIzNi4wMTYuMjQuMDE0LjI0My4wMTIuMjQ2LjAxLjI0OS4wMDguMjUzLjAwNi4yNTYuMDAzLjI1OS4wMDEuMjYtLjAwMS4yNTctLjAwMy4yNTQtLjAwNi4yNS0uMDA4LjI0Ny0uMDEuMjQ0LS4wMTIuMjQxLS4wMTUuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMi4yMjYtLjAyMi4yMjQtLjAyNC4yMi0uMDI1LjIxNi0uMDI3LjIxMi0uMDI5LjIxLS4wMy4yMDUtLjAzMi4yMDItLjAzMy4xOTgtLjAzNS4xOTQtLjAzNi4xOTEtLjAzNy4xODctLjAzOS4xODMtLjAzOS4xNzktLjA0MS4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0NC4xNjMtLjA0NS4xNi0uMDQ1LjE1NS0uMDQ3LjE1Mi0uMDQ3LjE0OC0uMDQ4LjE0My0uMDQ4LjEzOS0uMDUuMTM2LS4wNDkuMTMxLS4wNS4xMjYtLjA1MS4xMjMtLjA1MS4xMTgtLjA1MS4xMTQtLjA1Mi4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUxLjA3LS4wNTIuMDY1LS4wNTEuMDYtLjA1LjA1Ni0uMDUxLjA1MS0uMDQ5LjAyMy0uMDI1LjAyMy0uMDI0LjAyMS0uMDI1LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjMuMDEzLS4wMjQuMDEyLS4wMjIuMDEtLjAyMy4wMS0uMDIzLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIxLjAwNC0uMDIyLjAwMS0uMDIxLjAwMS0uMDIxdi00LjEzOWwtLjA3Ny4wNTQtLjA4LjA1NC0uMDgzLjA1NC0uMDg1LjA1Mi0uMDg3LjA1My0uMDkuMDUxLS4wOTMuMDUxLS4wOTUuMDUxLS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ5LS4xMDUuMDQ4LS4xMDYuMDQ3LS4xMDkuMDQ3LS4xMTEuMDQ2LS4xMTQuMDQ1LS4xMTUuMDQ0LS4xMTguMDQ0LS4xMi4wNDQtLjEyMi4wNDItLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDM5LS4xMzIuMDM5LS4xMzQuMDM4LS4xMzUuMDM3LS4xMzguMDM2LS4xMzkuMDM2LS4xNDIuMDM1LS4xNDMuMDMzLS4xNDQuMDMzLS4xNDcuMDMzLS4xNDguMDMxLS4xNS4wMy0uMTUxLjAzLS4xNTMuMDI4LS4xNTQuMDI4LS4xNTYuMDI3LS4xNTguMDI2LS4xNTkuMDI1LS4xNjEuMDI0LS4xNjIuMDIzLS4xNjMuMDIyLS4xNjUuMDIxLS4xNjYuMDItLjE2Ny4wMTktLjE2OS4wMTgtLjE2OS4wMTctLjE3MS4wMTYtLjE3My4wMTUtLjE3My4wMTQtLjE3NS4wMTMtLjE3NS4wMTItLjE3Ny4wMTEtLjE3OC4wMDktLjE3OS4wMDktLjE3OS4wMDctLjE4MS4wMDctLjE4Mi4wMDUtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDJoLS4zN2wtLjE4NC0uMDAyLS4xODQtLjAwMy0uMTgyLS4wMDQtLjE4Mi0uMDA1LS4xODEtLjAwNy0uMTc5LS4wMDctLjE3OS0uMDA5LS4xNzgtLjAwOS0uMTc2LS4wMTEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjItLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjUtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjgtLjE1My0uMDI4LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMxLS4xNDYtLjAzMy0uMTQ1LS4wMzMtLjE0My0uMDMzLS4xNDEtLjAzNS0uMTQtLjAzNi0uMTM3LS4wMzYtLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzktLjEzLS4wMzktLjEyOC0uMDQtLjEyNi0uMDQxLS4xMjQtLjA0Mi0uMTIyLS4wNDMtLjEyLS4wNDMtLjExNy0uMDQ0LS4xMTYtLjA0NC0uMTEzLS4wNDYtLjExMi0uMDQ2LS4xMDktLjA0Ni0uMTA2LS4wNDctLjEwNS0uMDQ4LS4xMDItLjA0OS0uMS0uMDQ5LS4wOTctLjA1LS4wOTUtLjA1MS0uMDkzLS4wNTEtLjA5LS4wNTEtLjA4Ny0uMDUzLS4wODUtLjA1Mi0uMDgzLS4wNTQtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTM5em0wLTUuNjY2di4wMTFsLjAwMS4wMi4wMDMuMDIyLjAwNC4wMjEuMDA1LjAyMi4wMDYuMDIxLjAwNy4wMjIuMDA5LjAyMy4wMS4wMjIuMDExLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE1LjAyMy4wMTYuMDI0LjAxNy4wMjQuMDE4LjAyMy4wMTkuMDI0LjAyMS4wMjUuMDIyLjAyNC4wMjMuMDI0LjAyNC4wMjUuMDUyLjA1LjA1Ni4wNS4wNjEuMDUuMDY2LjA1MS4wNy4wNTEuMDc1LjA1Mi4wNzkuMDUxLjA4NC4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ny4wNTIuMTAyLjA1Mi4xMDUuMDUxLjExLjA1Mi4xMTQuMDUxLjExOS4wNTEuMTIzLjA1MS4xMjcuMDUuMTMxLjA1LjEzNS4wNS4xMzkuMDQ5LjE0NC4wNDguMTQ3LjA0OC4xNTIuMDQ3LjE1NS4wNDYuMTYuMDQ1LjE2My4wNDUuMTY3LjA0My4xNzEuMDQzLjE3Ni4wNDIuMTc4LjA0LjE4My4wNC4xODcuMDM4LjE5LjAzNy4xOTQuMDM2LjE5Ny4wMzQuMjAyLjAzMy4yMDQuMDMyLjIwOS4wMy4yMTIuMDI4LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjEuMjMuMDIuMjMzLjAxOC4yMzYuMDE3LjI0LjAxNC4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDYuMjU2LjAwMy4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDMuMjU0LS4wMDYuMjUtLjAwOC4yNDctLjAxLjI0NC0uMDEzLjI0MS0uMDE0LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIuMjI2LS4wMjIuMjI0LS4wMjQuMjItLjAyNS4yMTYtLjAyNy4yMTItLjAyOS4yMS0uMDMuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzUuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wMzkuMTc5LS4wNDEuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDQuMTYzLS4wNDUuMTYtLjA0NS4xNTUtLjA0Ny4xNTItLjA0Ny4xNDgtLjA0OC4xNDMtLjA0OS4xMzktLjA0OS4xMzYtLjA0OS4xMzEtLjA1MS4xMjYtLjA1LjEyMy0uMDUxLjExOC0uMDUyLjExNC0uMDUxLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTIuMDgzLS4wNTIuMDc5LS4wNTIuMDc0LS4wNTIuMDctLjA1MS4wNjUtLjA1MS4wNi0uMDUxLjA1Ni0uMDUuMDUxLS4wNDkuMDIzLS4wMjUuMDIzLS4wMjUuMDIxLS4wMjQuMDItLjAyNC4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyNC4wMTUtLjAyMy4wMTQtLjAyNC4wMTMtLjAyMy4wMTItLjAyMy4wMS0uMDIyLjAxLS4wMjMuMDA4LS4wMjIuMDA2LS4wMjIuMDA2LS4wMjIuMDA0LS4wMjIuMDA0LS4wMjEuMDAxLS4wMjEuMDAxLS4wMjF2LTQuMTUzbC0uMDc3LjA1NC0uMDguMDU0LS4wODMuMDUzLS4wODUuMDUzLS4wODcuMDUzLS4wOS4wNTEtLjA5My4wNTEtLjA5NS4wNTEtLjA5Ny4wNS0uMS4wNDktLjEwMi4wNDgtLjEwNS4wNDgtLjEwNi4wNDgtLjEwOS4wNDYtLjExMS4wNDYtLjExNC4wNDYtLjExNS4wNDQtLjExOC4wNDQtLjEyLjA0My0uMTIyLjA0My0uMTI0LjA0Mi0uMTI2LjA0MS0uMTI4LjA0LS4xMy4wMzktLjEzMi4wMzktLjEzNC4wMzgtLjEzNS4wMzctLjEzOC4wMzYtLjEzOS4wMzYtLjE0Mi4wMzQtLjE0My4wMzQtLjE0NC4wMzMtLjE0Ny4wMzItLjE0OC4wMzItLjE1LjAzLS4xNTEuMDMtLjE1My4wMjgtLjE1NC4wMjgtLjE1Ni4wMjctLjE1OC4wMjYtLjE1OS4wMjQtLjE2MS4wMjQtLjE2Mi4wMjMtLjE2My4wMjMtLjE2NS4wMjEtLjE2Ni4wMi0uMTY3LjAxOS0uMTY5LjAxOC0uMTY5LjAxNy0uMTcxLjAxNi0uMTczLjAxNS0uMTczLjAxNC0uMTc1LjAxMy0uMTc1LjAxMi0uMTc3LjAxLS4xNzguMDEtLjE3OS4wMDktLjE3OS4wMDctLjE4MS4wMDYtLjE4Mi4wMDYtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDEtLjE4NS4wMDEtLjE4NS0uMDAxLS4xODQtLjAwMS0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNi0uMTgxLS4wMDYtLjE3OS0uMDA3LS4xNzktLjAwOS0uMTc4LS4wMS0uMTc2LS4wMS0uMTc2LS4wMTItLjE3NS0uMDEzLS4xNzMtLjAxNC0uMTcyLS4wMTUtLjE3MS0uMDE2LS4xNy0uMDE3LS4xNjktLjAxOC0uMTY3LS4wMTktLjE2Ni0uMDItLjE2NS0uMDIxLS4xNjMtLjAyMy0uMTYyLS4wMjMtLjE2MS0uMDI0LS4xNTktLjAyNC0uMTU3LS4wMjYtLjE1Ni0uMDI3LS4xNTUtLjAyOC0uMTUzLS4wMjgtLjE1MS0uMDMtLjE1LS4wMy0uMTQ4LS4wMzItLjE0Ni0uMDMyLS4xNDUtLjAzMy0uMTQzLS4wMzQtLjE0MS0uMDM0LS4xNC0uMDM2LS4xMzctLjAzNi0uMTM2LS4wMzctLjEzNC0uMDM4LS4xMzItLjAzOS0uMTMtLjAzOS0uMTI4LS4wNDEtLjEyNi0uMDQxLS4xMjQtLjA0MS0uMTIyLS4wNDMtLjEyLS4wNDMtLjExNy0uMDQ0LS4xMTYtLjA0NC0uMTEzLS4wNDYtLjExMi0uMDQ2LS4xMDktLjA0Ni0uMTA2LS4wNDgtLjEwNS0uMDQ4LS4xMDItLjA0OC0uMS0uMDUtLjA5Ny0uMDQ5LS4wOTUtLjA1MS0uMDkzLS4wNTEtLjA5LS4wNTItLjA4Ny0uMDUyLS4wODUtLjA1My0uMDgzLS4wNTMtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTUzem04Ljc0LTguMTc5bC0uMjU3LjAwNC0uMjU0LjAwNS0uMjUuMDA4LS4yNDcuMDExLS4yNDQuMDEyLS4yNDEuMDE0LS4yMzcuMDE2LS4yMzMuMDE4LS4yMzEuMDIxLS4yMjYuMDIyLS4yMjQuMDIzLS4yMi4wMjYtLjIxNi4wMjctLjIxMi4wMjgtLjIxLjAzMS0uMjA1LjAzMi0uMjAyLjAzMy0uMTk4LjAzNC0uMTk0LjAzNi0uMTkxLjAzOC0uMTg3LjAzOC0uMTgzLjA0LS4xNzkuMDQxLS4xNzUuMDQyLS4xNzIuMDQzLS4xNjguMDQzLS4xNjMuMDQ1LS4xNi4wNDYtLjE1NS4wNDYtLjE1Mi4wNDgtLjE0OC4wNDgtLjE0My4wNDgtLjEzOS4wNDktLjEzNi4wNS0uMTMxLjA1LS4xMjYuMDUxLS4xMjMuMDUxLS4xMTguMDUxLS4xMTQuMDUyLS4xMS4wNTItLjEwNi4wNTItLjEwMS4wNTItLjA5Ni4wNTItLjA5Mi4wNTItLjA4OC4wNTItLjA4My4wNTItLjA3OS4wNTItLjA3NC4wNTEtLjA3LjA1Mi0uMDY1LjA1MS0uMDYuMDUtLjA1Ni4wNS0uMDUxLjA1LS4wMjMuMDI1LS4wMjMuMDI0LS4wMjEuMDI0LS4wMi4wMjUtLjAxOS4wMjQtLjAxOC4wMjQtLjAxNy4wMjMtLjAxNS4wMjQtLjAxNC4wMjMtLjAxMy4wMjMtLjAxMi4wMjMtLjAxLjAyMy0uMDEuMDIyLS4wMDguMDIyLS4wMDYuMDIzLS4wMDYuMDIxLS4wMDQuMDIyLS4wMDQuMDIxLS4wMDEuMDIxLS4wMDEuMDIxLjAwMS4wMjEuMDAxLjAyMS4wMDQuMDIxLjAwNC4wMjIuMDA2LjAyMS4wMDYuMDIzLjAwOC4wMjIuMDEuMDIyLjAxLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE0LjAyMy4wMTUuMDI0LjAxNy4wMjMuMDE4LjAyNC4wMTkuMDI0LjAyLjAyNS4wMjEuMDI0LjAyMy4wMjQuMDIzLjAyNS4wNTEuMDUuMDU2LjA1LjA2LjA1LjA2NS4wNTEuMDcuMDUyLjA3NC4wNTEuMDc5LjA1Mi4wODMuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTYuMDUyLjEwMS4wNTIuMTA2LjA1Mi4xMS4wNTIuMTE0LjA1Mi4xMTguMDUxLjEyMy4wNTEuMTI2LjA1MS4xMzEuMDUuMTM2LjA1LjEzOS4wNDkuMTQzLjA0OC4xNDguMDQ4LjE1Mi4wNDguMTU1LjA0Ni4xNi4wNDYuMTYzLjA0NS4xNjguMDQzLjE3Mi4wNDMuMTc1LjA0Mi4xNzkuMDQxLjE4My4wNC4xODcuMDM4LjE5MS4wMzguMTk0LjAzNi4xOTguMDM0LjIwMi4wMzMuMjA1LjAzMi4yMS4wMzEuMjEyLjAyOC4yMTYuMDI3LjIyLjAyNi4yMjQuMDIzLjIyNi4wMjIuMjMxLjAyMS4yMzMuMDE4LjIzNy4wMTYuMjQxLjAxNC4yNDQuMDEyLjI0Ny4wMTEuMjUuMDA4LjI1NC4wMDUuMjU3LjAwNC4yNi4wMDEuMjYtLjAwMS4yNTctLjAwNC4yNTQtLjAwNS4yNS0uMDA4LjI0Ny0uMDExLjI0NC0uMDEyLjI0MS0uMDE0LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIxLjIyNi0uMDIyLjIyNC0uMDIzLjIyLS4wMjYuMjE2LS4wMjcuMjEyLS4wMjguMjEtLjAzMS4yMDUtLjAzMi4yMDItLjAzMy4xOTgtLjAzNC4xOTQtLjAzNi4xOTEtLjAzOC4xODctLjAzOC4xODMtLjA0LjE3OS0uMDQxLjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQzLjE2My0uMDQ1LjE2LS4wNDYuMTU1LS4wNDYuMTUyLS4wNDguMTQ4LS4wNDguMTQzLS4wNDguMTM5LS4wNDkuMTM2LS4wNS4xMzEtLjA1LjEyNi0uMDUxLjEyMy0uMDUxLjExOC0uMDUxLjExNC0uMDUyLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTIuMDgzLS4wNTIuMDc5LS4wNTIuMDc0LS4wNTEuMDctLjA1Mi4wNjUtLjA1MS4wNi0uMDUuMDU2LS4wNS4wNTEtLjA1LjAyMy0uMDI1LjAyMy0uMDI0LjAyMS0uMDI0LjAyLS4wMjUuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjMuMDE1LS4wMjQuMDE0LS4wMjMuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMy4wMS0uMDIyLjAwOC0uMDIyLjAwNi0uMDIzLjAwNi0uMDIxLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxLS4wMDEtLjAyMS0uMDAxLS4wMjEtLjAwNC0uMDIxLS4wMDQtLjAyMi0uMDA2LS4wMjEtLjAwNi0uMDIzLS4wMDgtLjAyMi0uMDEtLjAyMi0uMDEtLjAyMy0uMDEyLS4wMjMtLjAxMy0uMDIzLS4wMTQtLjAyMy0uMDE1LS4wMjQtLjAxNy0uMDIzLS4wMTgtLjAyNC0uMDE5LS4wMjQtLjAyLS4wMjUtLjAyMS0uMDI0LS4wMjMtLjAyNC0uMDIzLS4wMjUtLjA1MS0uMDUtLjA1Ni0uMDUtLjA2LS4wNS0uMDY1LS4wNTEtLjA3LS4wNTItLjA3NC0uMDUxLS4wNzktLjA1Mi0uMDgzLS4wNTItLjA4OC0uMDUyLS4wOTItLjA1Mi0uMDk2LS4wNTItLjEwMS0uMDUyLS4xMDYtLjA1Mi0uMTEtLjA1Mi0uMTE0LS4wNTItLjExOC0uMDUxLS4xMjMtLjA1MS0uMTI2LS4wNTEtLjEzMS0uMDUtLjEzNi0uMDUtLjEzOS0uMDQ5LS4xNDMtLjA0OC0uMTQ4LS4wNDgtLjE1Mi0uMDQ4LS4xNTUtLjA0Ni0uMTYtLjA0Ni0uMTYzLS4wNDUtLjE2OC0uMDQzLS4xNzItLjA0My0uMTc1LS4wNDItLjE3OS0uMDQxLS4xODMtLjA0LS4xODctLjAzOC0uMTkxLS4wMzgtLjE5NC0uMDM2LS4xOTgtLjAzNC0uMjAyLS4wMzMtLjIwNS0uMDMyLS4yMS0uMDMxLS4yMTItLjAyOC0uMjE2LS4wMjctLjIyLS4wMjYtLjIyNC0uMDIzLS4yMjYtLjAyMi0uMjMxLS4wMjEtLjIzMy0uMDE4LS4yMzctLjAxNi0uMjQxLS4wMTQtLjI0NC0uMDEyLS4yNDctLjAxMS0uMjUtLjAwOC0uMjU0LS4wMDUtLjI1Ny0uMDA0LS4yNi0uMDAxLS4yNi4wMDF6Iil9LGZEZT1mdW5jdGlvbihpKXtpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgic3ltYm9sIikuYXR0cigiaWQiLCJjb21wdXRlciIpLmF0dHIoIndpZHRoIiwiMjQiKS5hdHRyKCJoZWlnaHQiLCIyNCIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKC41KSIpLmF0dHIoImQiLCJNMiAydjEzaDIwdi0xM2gtMjB6bTE4IDExaC0xNnYtOWgxNnY5em0tMTAuMjI4IDZsLjQ2Ni0xaDMuNTI0bC40NjcgMWgtNC40NTd6bTE0LjIyOCAzaC0yNGwyLTZoMi4xMDRsLTEuMzMgNGgxOC40NWwtMS4yOTctNGgyLjA3M2wyIDZ6bS01LTEwaC0xNHYtN2gxNHY3eiIpfSxkRGU9ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoInN5bWJvbCIpLmF0dHIoImlkIiwiY2xvY2siKS5hdHRyKCJ3aWR0aCIsIjI0IikuYXR0cigiaGVpZ2h0IiwiMjQiKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSguNSkiKS5hdHRyKCJkIiwiTTEyIDJjNS41MTQgMCAxMCA0LjQ4NiAxMCAxMHMtNC40ODYgMTAtMTAgMTAtMTAtNC40ODYtMTAtMTAgNC40ODYtMTAgMTAtMTB6bTAtMmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnM1LjM3MyAxMiAxMiAxMiAxMi01LjM3MyAxMi0xMi01LjM3My0xMi0xMi0xMnptNS44NDggMTIuNDU5Yy4yMDIuMDM4LjIwMi4zMzMuMDAxLjM3Mi0xLjkwNy4zNjEtNi4wNDUgMS4xMTEtNi41NDcgMS4xMTEtLjcxOSAwLTEuMzAxLS41ODItMS4zMDEtMS4zMDEgMC0uNTEyLjc3LTUuNDQ3IDEuMTI1LTcuNDQ1LjAzNC0uMTkyLjMxMi0uMTgxLjM0My4wMTRsLjk4NSA2LjIzOCA1LjM5NCAxLjAxMXoiKX0sZ0RlPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFycm93aGVhZCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTIpLmF0dHIoIm1hcmtlckhlaWdodCIsMTIpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAxMCA1IEwgMCAxMCB6Iil9LHBEZT1mdW5jdGlvbihpKXtpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhcnJvd2VuZCIpLmF0dHIoInJlZlgiLDEpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTIpLmF0dHIoIm1hcmtlckhlaWdodCIsMTIpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxMCAwIEwgMCA1IEwgMTAgMTAgeiIpfSxiRGU9ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZmlsbGVkLWhlYWQiKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMTQsNyBMOSwxIFoiKX0sdkRlPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsInNlcXVlbmNlbnVtYmVyIikuYXR0cigicmVmWCIsMTUpLmF0dHIoInJlZlkiLDE1KS5hdHRyKCJtYXJrZXJXaWR0aCIsNjApLmF0dHIoIm1hcmtlckhlaWdodCIsNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwxNSkuYXR0cigiY3kiLDE1KS5hdHRyKCJyIiw2KX0sd0RlPWZ1bmN0aW9uKGkpe2NvbnN0IGY9aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiY3Jvc3NoZWFkIikuYXR0cigibWFya2VyV2lkdGgiLDE1KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hdHRyKCJyZWZYIiwxNikuYXR0cigicmVmWSIsNCk7Zi5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIiwiYmxhY2siKS5hdHRyKCJzdHJva2UiLCIjMDAwMDAwIikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIwLCAwIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigiZCIsIk0gOSwyIFYgNiBMMTYsNCBaIiksZi5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZSIsIiMwMDAwMDAiKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjAsIDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHgiKS5hdHRyKCJkIiwiTSAwLDEgTCA2LDcgTSA2LDEgTCAwLDciKX0sbURlPShpLGEpPT4oe2ZvbnRGYW1pbHk6aVthKyJGb250RmFtaWx5Il0sZm9udFNpemU6aVthKyJGb250U2l6ZSJdLGZvbnRXZWlnaHQ6aVthKyJGb250V2VpZ2h0Il19KSxFNT1mdW5jdGlvbigpe2Z1bmN0aW9uIGkodixtLGIsRSxDLEEsUCl7Y29uc3QgRj1tLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGIrQy8yKS5hdHRyKCJ5IixFK0EvMis1KS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KHYpO3AoRixQKX1mdW5jdGlvbiBhKHYsbSxiLEUsQyxBLFAsRil7Y29uc3R7Zm9udFNpemU6aixmb250RmFtaWx5OlIsZm9udFdlaWdodDpIfT1GLFk9di5zcGxpdCh1aS5saW5lQnJlYWtSZWdleCk7Zm9yKGxldCBydD0wO3J0PFkubGVuZ3RoO3J0Kyspe2NvbnN0IEo9cnQqai1qKihZLmxlbmd0aC0xKS8yLGl0PW0uYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsYitDLzIpLmF0dHIoInkiLEUpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuc3R5bGUoImZvbnQtc2l6ZSIsaikuc3R5bGUoImZvbnQtd2VpZ2h0IixIKS5zdHlsZSgiZm9udC1mYW1pbHkiLFIpO2l0LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJkeSIsSikudGV4dChZW3J0XSkuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWF0aGVtYXRpY2FsIikscChpdCxQKX19ZnVuY3Rpb24gZih2LG0sYixFLEMsQSxQLEYpe2NvbnN0IGo9bS5hcHBlbmQoInN3aXRjaCIpLEg9ai5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4IixiKS5hdHRyKCJ5IixFKS5hdHRyKCJ3aWR0aCIsQykuYXR0cigiaGVpZ2h0IixBKS5hcHBlbmQoInhodG1sOmRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUiKS5zdHlsZSgiaGVpZ2h0IiwiMTAwJSIpLnN0eWxlKCJ3aWR0aCIsIjEwMCUiKTtILmFwcGVuZCgiZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KHYpLGEodixqLGIsRSxDLEEsUCxGKSxwKEgsUCl9ZnVuY3Rpb24gcCh2LG0pe2Zvcihjb25zdCBiIGluIG0pbS5oYXNPd25Qcm9wZXJ0eShiKSYmdi5hdHRyKGIsbVtiXSl9cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiB2LnRleHRQbGFjZW1lbnQ9PT0iZm8iP2Y6di50ZXh0UGxhY2VtZW50PT09Im9sZCI/aTphfX0oKSxnMz17ZHJhd1JlY3Q6SWR0LGRyYXdCb3VuZGFyeTp1RGUsZHJhd0M0U2hhcGU6bERlLGRyYXdSZWxzOmNEZSxkcmF3SW1hZ2U6Yk50LGluc2VydEFycm93SGVhZDpnRGUsaW5zZXJ0QXJyb3dFbmQ6cERlLGluc2VydEFycm93RmlsbGVkSGVhZDpiRGUsaW5zZXJ0RHluYW1pY051bWJlcjp2RGUsaW5zZXJ0QXJyb3dDcm9zc0hlYWQ6d0RlLGluc2VydERhdGFiYXNlSWNvbjpoRGUsaW5zZXJ0Q29tcHV0ZXJJY29uOmZEZSxpbnNlcnRDbG9ja0ljb246ZERlfTtsZXQgS1c9MCxZVz0wLHZOdD00LE9kdD0yO1ZXLnl5PWdOdDtsZXQgRXM9e307Y2xhc3Mgd050e2NvbnN0cnVjdG9yKGEpe3RoaXMubmFtZT0iIix0aGlzLmRhdGE9e30sdGhpcy5kYXRhLnN0YXJ0eD12b2lkIDAsdGhpcy5kYXRhLnN0b3B4PXZvaWQgMCx0aGlzLmRhdGEuc3RhcnR5PXZvaWQgMCx0aGlzLmRhdGEuc3RvcHk9dm9pZCAwLHRoaXMuZGF0YS53aWR0aExpbWl0PXZvaWQgMCx0aGlzLm5leHREYXRhPXt9LHRoaXMubmV4dERhdGEuc3RhcnR4PXZvaWQgMCx0aGlzLm5leHREYXRhLnN0b3B4PXZvaWQgMCx0aGlzLm5leHREYXRhLnN0YXJ0eT12b2lkIDAsdGhpcy5uZXh0RGF0YS5zdG9weT12b2lkIDAsdGhpcy5uZXh0RGF0YS5jbnQ9MCxOZHQoYS5kYi5nZXRDb25maWcoKSl9c2V0RGF0YShhLGYscCx2KXt0aGlzLm5leHREYXRhLnN0YXJ0eD10aGlzLmRhdGEuc3RhcnR4PWEsdGhpcy5uZXh0RGF0YS5zdG9weD10aGlzLmRhdGEuc3RvcHg9Zix0aGlzLm5leHREYXRhLnN0YXJ0eT10aGlzLmRhdGEuc3RhcnR5PXAsdGhpcy5uZXh0RGF0YS5zdG9weT10aGlzLmRhdGEuc3RvcHk9dn11cGRhdGVWYWwoYSxmLHAsdil7YVtmXT09PXZvaWQgMD9hW2ZdPXA6YVtmXT12KHAsYVtmXSl9aW5zZXJ0KGEpe3RoaXMubmV4dERhdGEuY250PXRoaXMubmV4dERhdGEuY250KzE7bGV0IGY9dGhpcy5uZXh0RGF0YS5zdGFydHg9PT10aGlzLm5leHREYXRhLnN0b3B4P3RoaXMubmV4dERhdGEuc3RvcHgrYS5tYXJnaW46dGhpcy5uZXh0RGF0YS5zdG9weCthLm1hcmdpbioyLHA9ZithLndpZHRoLHY9dGhpcy5uZXh0RGF0YS5zdGFydHkrYS5tYXJnaW4qMixtPXYrYS5oZWlnaHQ7KGY+PXRoaXMuZGF0YS53aWR0aExpbWl0fHxwPj10aGlzLmRhdGEud2lkdGhMaW1pdHx8dGhpcy5uZXh0RGF0YS5jbnQ+dk50KSYmKGY9dGhpcy5uZXh0RGF0YS5zdGFydHgrYS5tYXJnaW4rRXMubmV4dExpbmVQYWRkaW5nWCx2PXRoaXMubmV4dERhdGEuc3RvcHkrYS5tYXJnaW4qMix0aGlzLm5leHREYXRhLnN0b3B4PXA9ZithLndpZHRoLHRoaXMubmV4dERhdGEuc3RhcnR5PXRoaXMubmV4dERhdGEuc3RvcHksdGhpcy5uZXh0RGF0YS5zdG9weT1tPXYrYS5oZWlnaHQsdGhpcy5uZXh0RGF0YS5jbnQ9MSksYS54PWYsYS55PXYsdGhpcy51cGRhdGVWYWwodGhpcy5kYXRhLCJzdGFydHgiLGYsTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKHRoaXMuZGF0YSwic3RhcnR5Iix2LE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbCh0aGlzLmRhdGEsInN0b3B4IixwLE1hdGgubWF4KSx0aGlzLnVwZGF0ZVZhbCh0aGlzLmRhdGEsInN0b3B5IixtLE1hdGgubWF4KSx0aGlzLnVwZGF0ZVZhbCh0aGlzLm5leHREYXRhLCJzdGFydHgiLGYsTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKHRoaXMubmV4dERhdGEsInN0YXJ0eSIsdixNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwodGhpcy5uZXh0RGF0YSwic3RvcHgiLHAsTWF0aC5tYXgpLHRoaXMudXBkYXRlVmFsKHRoaXMubmV4dERhdGEsInN0b3B5IixtLE1hdGgubWF4KX1pbml0KGEpe3RoaXMubmFtZT0iIix0aGlzLmRhdGE9e3N0YXJ0eDp2b2lkIDAsc3RvcHg6dm9pZCAwLHN0YXJ0eTp2b2lkIDAsc3RvcHk6dm9pZCAwLHdpZHRoTGltaXQ6dm9pZCAwfSx0aGlzLm5leHREYXRhPXtzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMCxjbnQ6MH0sTmR0KGEuZGIuZ2V0Q29uZmlnKCkpfWJ1bXBMYXN0TWFyZ2luKGEpe3RoaXMuZGF0YS5zdG9weCs9YSx0aGlzLmRhdGEuc3RvcHkrPWF9fWNvbnN0IE5kdD1mdW5jdGlvbihpKXtaMShFcyxpKSxpLmZvbnRGYW1pbHkmJihFcy5wZXJzb25Gb250RmFtaWx5PUVzLnN5c3RlbUZvbnRGYW1pbHk9RXMubWVzc2FnZUZvbnRGYW1pbHk9aS5mb250RmFtaWx5KSxpLmZvbnRTaXplJiYoRXMucGVyc29uRm9udFNpemU9RXMuc3lzdGVtRm9udFNpemU9RXMubWVzc2FnZUZvbnRTaXplPWkuZm9udFNpemUpLGkuZm9udFdlaWdodCYmKEVzLnBlcnNvbkZvbnRXZWlnaHQ9RXMuc3lzdGVtRm9udFdlaWdodD1Fcy5tZXNzYWdlRm9udFdlaWdodD1pLmZvbnRXZWlnaHQpfSxpUD0oaSxhKT0+KHtmb250RmFtaWx5OmlbYSsiRm9udEZhbWlseSJdLGZvbnRTaXplOmlbYSsiRm9udFNpemUiXSxmb250V2VpZ2h0OmlbYSsiRm9udFdlaWdodCJdfSksWFc9aT0+KHtmb250RmFtaWx5OmkuYm91bmRhcnlGb250RmFtaWx5LGZvbnRTaXplOmkuYm91bmRhcnlGb250U2l6ZSxmb250V2VpZ2h0OmkuYm91bmRhcnlGb250V2VpZ2h0fSkseURlPWk9Pih7Zm9udEZhbWlseTppLm1lc3NhZ2VGb250RmFtaWx5LGZvbnRTaXplOmkubWVzc2FnZUZvbnRTaXplLGZvbnRXZWlnaHQ6aS5tZXNzYWdlRm9udFdlaWdodH0pO2Z1bmN0aW9uIHNtKGksYSxmLHAsdil7aWYoIWFbaV0ud2lkdGgpaWYoZilhW2ldLnRleHQ9JEl0KGFbaV0udGV4dCx2LHApLGFbaV0udGV4dExpbmVzPWFbaV0udGV4dC5zcGxpdCh1aS5saW5lQnJlYWtSZWdleCkubGVuZ3RoLGFbaV0ud2lkdGg9dixhW2ldLmhlaWdodD1lZHQoYVtpXS50ZXh0LHApO2Vsc2V7bGV0IG09YVtpXS50ZXh0LnNwbGl0KHVpLmxpbmVCcmVha1JlZ2V4KTthW2ldLnRleHRMaW5lcz1tLmxlbmd0aDtsZXQgYj0wO2FbaV0uaGVpZ2h0PTAsYVtpXS53aWR0aD0wO2Zvcihjb25zdCBFIG9mIG0pYVtpXS53aWR0aD1NYXRoLm1heChoMyhFLHApLGFbaV0ud2lkdGgpLGI9ZWR0KEUscCksYVtpXS5oZWlnaHQ9YVtpXS5oZWlnaHQrYn19Y29uc3QgbU50PWZ1bmN0aW9uKGksYSxmKXthLng9Zi5kYXRhLnN0YXJ0eCxhLnk9Zi5kYXRhLnN0YXJ0eSxhLndpZHRoPWYuZGF0YS5zdG9weC1mLmRhdGEuc3RhcnR4LGEuaGVpZ2h0PWYuZGF0YS5zdG9weS1mLmRhdGEuc3RhcnR5LGEubGFiZWwueT1Fcy5jNFNoYXBlTWFyZ2luLTM1O2xldCBwPWEud3JhcCYmRXMud3JhcCx2PVhXKEVzKTt2LmZvbnRTaXplPXYuZm9udFNpemUrMix2LmZvbnRXZWlnaHQ9ImJvbGQiO2xldCBtPWgzKGEubGFiZWwudGV4dCx2KTtzbSgibGFiZWwiLGEscCx2LG0pLGczLmRyYXdCb3VuZGFyeShpLGEsRXMpfSx5TnQ9ZnVuY3Rpb24oaSxhLGYscCl7bGV0IHY9MDtmb3IoY29uc3QgbSBvZiBwKXt2PTA7Y29uc3QgYj1mW21dO2xldCBFPWlQKEVzLGIudHlwZUM0U2hhcGUudGV4dCk7c3dpdGNoKEUuZm9udFNpemU9RS5mb250U2l6ZS0yLGIudHlwZUM0U2hhcGUud2lkdGg9aDMoIsKrIitiLnR5cGVDNFNoYXBlLnRleHQrIsK7IixFKSxiLnR5cGVDNFNoYXBlLmhlaWdodD1FLmZvbnRTaXplKzIsYi50eXBlQzRTaGFwZS5ZPUVzLmM0U2hhcGVQYWRkaW5nLHY9Yi50eXBlQzRTaGFwZS5ZK2IudHlwZUM0U2hhcGUuaGVpZ2h0LTQsYi5pbWFnZT17d2lkdGg6MCxoZWlnaHQ6MCxZOjB9LGIudHlwZUM0U2hhcGUudGV4dCl7Y2FzZSJwZXJzb24iOmNhc2UiZXh0ZXJuYWxfcGVyc29uIjpiLmltYWdlLndpZHRoPTQ4LGIuaW1hZ2UuaGVpZ2h0PTQ4LGIuaW1hZ2UuWT12LHY9Yi5pbWFnZS5ZK2IuaW1hZ2UuaGVpZ2h0O2JyZWFrfWIuc3ByaXRlJiYoYi5pbWFnZS53aWR0aD00OCxiLmltYWdlLmhlaWdodD00OCxiLmltYWdlLlk9dix2PWIuaW1hZ2UuWStiLmltYWdlLmhlaWdodCk7bGV0IEM9Yi53cmFwJiZFcy53cmFwLEE9RXMud2lkdGgtRXMuYzRTaGFwZVBhZGRpbmcqMixQPWlQKEVzLGIudHlwZUM0U2hhcGUudGV4dCk7aWYoUC5mb250U2l6ZT1QLmZvbnRTaXplKzIsUC5mb250V2VpZ2h0PSJib2xkIixzbSgibGFiZWwiLGIsQyxQLEEpLGIubGFiZWwuWT12Kzgsdj1iLmxhYmVsLlkrYi5sYWJlbC5oZWlnaHQsYi50eXBlJiZiLnR5cGUudGV4dCE9PSIiKXtiLnR5cGUudGV4dD0iWyIrYi50eXBlLnRleHQrIl0iO2xldCBSPWlQKEVzLGIudHlwZUM0U2hhcGUudGV4dCk7c20oInR5cGUiLGIsQyxSLEEpLGIudHlwZS5ZPXYrNSx2PWIudHlwZS5ZK2IudHlwZS5oZWlnaHR9ZWxzZSBpZihiLnRlY2huJiZiLnRlY2huLnRleHQhPT0iIil7Yi50ZWNobi50ZXh0PSJbIitiLnRlY2huLnRleHQrIl0iO2xldCBSPWlQKEVzLGIudGVjaG4udGV4dCk7c20oInRlY2huIixiLEMsUixBKSxiLnRlY2huLlk9dis1LHY9Yi50ZWNobi5ZK2IudGVjaG4uaGVpZ2h0fWxldCBGPXYsaj1iLmxhYmVsLndpZHRoO2lmKGIuZGVzY3ImJmIuZGVzY3IudGV4dCE9PSIiKXtsZXQgUj1pUChFcyxiLnR5cGVDNFNoYXBlLnRleHQpO3NtKCJkZXNjciIsYixDLFIsQSksYi5kZXNjci5ZPXYrMjAsdj1iLmRlc2NyLlkrYi5kZXNjci5oZWlnaHQsaj1NYXRoLm1heChiLmxhYmVsLndpZHRoLGIuZGVzY3Iud2lkdGgpLEY9di1iLmRlc2NyLnRleHRMaW5lcyo1fWo9aitFcy5jNFNoYXBlUGFkZGluZyxiLndpZHRoPU1hdGgubWF4KGIud2lkdGh8fEVzLndpZHRoLGosRXMud2lkdGgpLGIuaGVpZ2h0PU1hdGgubWF4KGIuaGVpZ2h0fHxFcy5oZWlnaHQsRixFcy5oZWlnaHQpLGIubWFyZ2luPWIubWFyZ2lufHxFcy5jNFNoYXBlTWFyZ2luLGkuaW5zZXJ0KGIpLGczLmRyYXdDNFNoYXBlKGEsYixFcyl9aS5idW1wTGFzdE1hcmdpbihFcy5jNFNoYXBlTWFyZ2luKX07bGV0IHR2PWNsYXNze2NvbnN0cnVjdG9yKGEsZil7dGhpcy54PWEsdGhpcy55PWZ9fSx4TnQ9ZnVuY3Rpb24oaSxhKXtsZXQgZj1pLngscD1pLnksdj1hLngsbT1hLnksYj1mK2kud2lkdGgvMixFPXAraS5oZWlnaHQvMixDPU1hdGguYWJzKGYtdiksQT1NYXRoLmFicyhwLW0pLFA9QS9DLEY9aS5oZWlnaHQvaS53aWR0aCxqPW51bGw7cmV0dXJuIHA9PW0mJmY8dj9qPW5ldyB0dihmK2kud2lkdGgsRSk6cD09bSYmZj52P2o9bmV3IHR2KGYsRSk6Zj09diYmcDxtP2o9bmV3IHR2KGIscCtpLmhlaWdodCk6Zj09diYmcD5tJiYoaj1uZXcgdHYoYixwKSksZj52JiZwPG0/Rj49UD9qPW5ldyB0dihmLEUrUCppLndpZHRoLzIpOmo9bmV3IHR2KGItQy9BKmkuaGVpZ2h0LzIscCtpLmhlaWdodCk6Zjx2JiZwPG0/Rj49UD9qPW5ldyB0dihmK2kud2lkdGgsRStQKmkud2lkdGgvMik6aj1uZXcgdHYoYitDL0EqaS5oZWlnaHQvMixwK2kuaGVpZ2h0KTpmPHYmJnA+bT9GPj1QP2o9bmV3IHR2KGYraS53aWR0aCxFLVAqaS53aWR0aC8yKTpqPW5ldyB0dihiK2kuaGVpZ2h0LzIqQy9BLHApOmY+diYmcD5tJiYoRj49UD9qPW5ldyB0dihmLEUtaS53aWR0aC8yKlApOmo9bmV3IHR2KGItaS5oZWlnaHQvMipDL0EscCkpLGp9LHhEZT1mdW5jdGlvbihpLGEpe2xldCBmPXt4OjAseTowfTtmLng9YS54K2Eud2lkdGgvMixmLnk9YS55K2EuaGVpZ2h0LzI7bGV0IHA9eE50KGksZik7Zi54PWkueCtpLndpZHRoLzIsZi55PWkueStpLmhlaWdodC8yO2xldCB2PXhOdChhLGYpO3JldHVybntzdGFydFBvaW50OnAsZW5kUG9pbnQ6dn19O2NvbnN0IGtEZT1mdW5jdGlvbihpLGEsZixwKXtsZXQgdj0wO2ZvcihsZXQgbSBvZiBhKXt2PXYrMTtsZXQgYj1tLndyYXAmJkVzLndyYXAsRT15RGUoRXMpO3AuZGIuZ2V0QzRUeXBlKCk9PT0iQzREeW5hbWljIiYmKG0ubGFiZWwudGV4dD12KyI6ICIrbS5sYWJlbC50ZXh0KTtsZXQgQT1oMyhtLmxhYmVsLnRleHQsRSk7c20oImxhYmVsIixtLGIsRSxBKSxtLnRlY2huJiZtLnRlY2huLnRleHQhPT0iIiYmKEE9aDMobS50ZWNobi50ZXh0LEUpLHNtKCJ0ZWNobiIsbSxiLEUsQSkpLG0uZGVzY3ImJm0uZGVzY3IudGV4dCE9PSIiJiYoQT1oMyhtLmRlc2NyLnRleHQsRSksc20oImRlc2NyIixtLGIsRSxBKSk7bGV0IFA9ZihtLmZyb20pLEY9ZihtLnRvKSxqPXhEZShQLEYpO20uc3RhcnRQb2ludD1qLnN0YXJ0UG9pbnQsbS5lbmRQb2ludD1qLmVuZFBvaW50fWczLmRyYXdSZWxzKGksYSxFcyl9O2Z1bmN0aW9uIGtOdChpLGEsZixwLHYpe2xldCBtPW5ldyB3TnQodik7bS5kYXRhLndpZHRoTGltaXQ9Zi5kYXRhLndpZHRoTGltaXQvTWF0aC5taW4oT2R0LHAubGVuZ3RoKTtmb3IobGV0W2IsRV1vZiBwLmVudHJpZXMoKSl7bGV0IEM9MDtFLmltYWdlPXt3aWR0aDowLGhlaWdodDowLFk6MH0sRS5zcHJpdGUmJihFLmltYWdlLndpZHRoPTQ4LEUuaW1hZ2UuaGVpZ2h0PTQ4LEUuaW1hZ2UuWT1DLEM9RS5pbWFnZS5ZK0UuaW1hZ2UuaGVpZ2h0KTtsZXQgQT1FLndyYXAmJkVzLndyYXAsUD1YVyhFcyk7aWYoUC5mb250U2l6ZT1QLmZvbnRTaXplKzIsUC5mb250V2VpZ2h0PSJib2xkIixzbSgibGFiZWwiLEUsQSxQLG0uZGF0YS53aWR0aExpbWl0KSxFLmxhYmVsLlk9Qys4LEM9RS5sYWJlbC5ZK0UubGFiZWwuaGVpZ2h0LEUudHlwZSYmRS50eXBlLnRleHQhPT0iIil7RS50eXBlLnRleHQ9IlsiK0UudHlwZS50ZXh0KyJdIjtsZXQgSD1YVyhFcyk7c20oInR5cGUiLEUsQSxILG0uZGF0YS53aWR0aExpbWl0KSxFLnR5cGUuWT1DKzUsQz1FLnR5cGUuWStFLnR5cGUuaGVpZ2h0fWlmKEUuZGVzY3ImJkUuZGVzY3IudGV4dCE9PSIiKXtsZXQgSD1YVyhFcyk7SC5mb250U2l6ZT1ILmZvbnRTaXplLTIsc20oImRlc2NyIixFLEEsSCxtLmRhdGEud2lkdGhMaW1pdCksRS5kZXNjci5ZPUMrMjAsQz1FLmRlc2NyLlkrRS5kZXNjci5oZWlnaHR9aWYoYj09MHx8YiVPZHQ9PT0wKXtsZXQgSD1mLmRhdGEuc3RhcnR4K0VzLmRpYWdyYW1NYXJnaW5YLFk9Zi5kYXRhLnN0b3B5K0VzLmRpYWdyYW1NYXJnaW5ZK0M7bS5zZXREYXRhKEgsSCxZLFkpfWVsc2V7bGV0IEg9bS5kYXRhLnN0b3B4IT09bS5kYXRhLnN0YXJ0eD9tLmRhdGEuc3RvcHgrRXMuZGlhZ3JhbU1hcmdpblg6bS5kYXRhLnN0YXJ0eCxZPW0uZGF0YS5zdGFydHk7bS5zZXREYXRhKEgsSCxZLFkpfW0ubmFtZT1FLmFsaWFzO2xldCBGPXYuZGIuZ2V0QzRTaGFwZUFycmF5KEUuYWxpYXMpLGo9di5kYi5nZXRDNFNoYXBlS2V5cyhFLmFsaWFzKTtqLmxlbmd0aD4wJiZ5TnQobSxpLEYsaiksYT1FLmFsaWFzO2xldCBSPXYuZGIuZ2V0Qm91bmRhcnlzKGEpO1IubGVuZ3RoPjAmJmtOdChpLGEsbSxSLHYpLEUuYWxpYXMhPT0iZ2xvYmFsIiYmbU50KGksRSxtKSxmLmRhdGEuc3RvcHk9TWF0aC5tYXgobS5kYXRhLnN0b3B5K0VzLmM0U2hhcGVNYXJnaW4sZi5kYXRhLnN0b3B5KSxmLmRhdGEuc3RvcHg9TWF0aC5tYXgobS5kYXRhLnN0b3B4K0VzLmM0U2hhcGVNYXJnaW4sZi5kYXRhLnN0b3B4KSxLVz1NYXRoLm1heChLVyxmLmRhdGEuc3RvcHgpLFlXPU1hdGgubWF4KFlXLGYuZGF0YS5zdG9weSl9fWNvbnN0IEVOdD17ZHJhd1BlcnNvbk9yU3lzdGVtQXJyYXk6eU50LGRyYXdCb3VuZGFyeTptTnQsc2V0Q29uZjpOZHQsZHJhdzpmdW5jdGlvbihpLGEsZixwKXtFcz1EZSgpLmM0O2NvbnN0IHY9RGUoKS5zZWN1cml0eUxldmVsO2xldCBtO3Y9PT0ic2FuZGJveCImJihtPXhyKCIjaSIrYSkpO2NvbnN0IGI9eHIodj09PSJzYW5kYm94Ij9tLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHk6ImJvZHkiKTtsZXQgRT1wLmRiO3AuZGIuc2V0V3JhcChFcy53cmFwKSx2TnQ9RS5nZXRDNFNoYXBlSW5Sb3coKSxPZHQ9RS5nZXRDNEJvdW5kYXJ5SW5Sb3coKSxXdC5kZWJ1ZyhgQzoke0pTT04uc3RyaW5naWZ5KEVzLG51bGwsMil9YCk7Y29uc3QgQz12PT09InNhbmRib3giP2Iuc2VsZWN0KGBbaWQ9IiR7YX0iXWApOnhyKGBbaWQ9IiR7YX0iXWApO2czLmluc2VydENvbXB1dGVySWNvbihDKSxnMy5pbnNlcnREYXRhYmFzZUljb24oQyksZzMuaW5zZXJ0Q2xvY2tJY29uKEMpO2xldCBBPW5ldyB3TnQocCk7QS5zZXREYXRhKEVzLmRpYWdyYW1NYXJnaW5YLEVzLmRpYWdyYW1NYXJnaW5YLEVzLmRpYWdyYW1NYXJnaW5ZLEVzLmRpYWdyYW1NYXJnaW5ZKSxBLmRhdGEud2lkdGhMaW1pdD1zY3JlZW4uYXZhaWxXaWR0aCxLVz1Fcy5kaWFncmFtTWFyZ2luWCxZVz1Fcy5kaWFncmFtTWFyZ2luWTtjb25zdCBQPXAuZGIuZ2V0VGl0bGUoKTtsZXQgRj1wLmRiLmdldEJvdW5kYXJ5cygiIik7a050KEMsIiIsQSxGLHApLGczLmluc2VydEFycm93SGVhZChDKSxnMy5pbnNlcnRBcnJvd0VuZChDKSxnMy5pbnNlcnRBcnJvd0Nyb3NzSGVhZChDKSxnMy5pbnNlcnRBcnJvd0ZpbGxlZEhlYWQoQyksa0RlKEMscC5kYi5nZXRSZWxzKCkscC5kYi5nZXRDNFNoYXBlLHApLEEuZGF0YS5zdG9weD1LVyxBLmRhdGEuc3RvcHk9WVc7Y29uc3Qgaj1BLmRhdGE7bGV0IEg9ai5zdG9weS1qLnN0YXJ0eSsyKkVzLmRpYWdyYW1NYXJnaW5ZO2NvbnN0IHJ0PWouc3RvcHgtai5zdGFydHgrMipFcy5kaWFncmFtTWFyZ2luWDtQJiZDLmFwcGVuZCgidGV4dCIpLnRleHQoUCkuYXR0cigieCIsKGouc3RvcHgtai5zdGFydHgpLzItNCpFcy5kaWFncmFtTWFyZ2luWCkuYXR0cigieSIsai5zdGFydHkrRXMuZGlhZ3JhbU1hcmdpblkpLG9nKEMsSCxydCxFcy51c2VNYXhXaWR0aCk7Y29uc3QgSj1QPzYwOjA7Qy5hdHRyKCJ2aWV3Qm94IixqLnN0YXJ0eC1Fcy5kaWFncmFtTWFyZ2luWCsiIC0iKyhFcy5kaWFncmFtTWFyZ2luWStKKSsiICIrcnQrIiAiKyhIK0opKSxXdC5kZWJ1ZygibW9kZWxzOiIsail9fSxFRGU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpOTWUsZGI6Z050LHJlbmRlcmVyOkVOdCxzdHlsZXM6aT0+YC5wZXJzb24gewogICAgc3Ryb2tlOiAke2kucGVyc29uQm9yZGVyfTsKICAgIGZpbGw6ICR7aS5wZXJzb25Ca2d9OwogIH0KYCxpbml0Omk9PntFTnQuc2V0Q29uZihpLmM0KX19fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBQZHQ9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbih6YixvcyxBcyxtYSl7Zm9yKEFzPUFzfHx7fSxtYT16Yi5sZW5ndGg7bWEtLTtBc1t6YlttYV1dPW9zKTtyZXR1cm4gQXN9LGE9WzEsOV0sZj1bMSw3XSxwPVsxLDZdLHY9WzEsOF0sbT1bMSwyMCwyMSwyMiwyMywzOCw0NSw0Nyw0OSw1Myw2OSw5Miw5Myw5NCw5NSw5Niw5NywxMTAsMTEzLDExNCwxMTcsMTE5LDEyMiwxMjMsMTI0LDEyOSwxMzAsMTMxLDEzMl0sYj1bMiwxMF0sRT1bMSwyMF0sQz1bMSwyMV0sQT1bMSwyMl0sUD1bMSwyM10sRj1bMSwzMF0saj1bMSwzMl0sUj1bMSwzM10sSD1bMSwzNF0sWT1bMSw1Nl0scnQ9WzEsNTVdLEo9WzEsMzZdLGl0PVsxLDM3XSxmdD1bMSwzOF0sVHQ9WzEsMzldLGt0PVsxLDQwXSxtdD1bMSw1MV0sY3Q9WzEsNTNdLHl0PVsxLDQ5XSxzdD1bMSw1NF0seHQ9WzEsNTBdLGh0PVsxLDU3XSxkdD1bMSw1Ml0sQ3Q9WzEsNThdLHR0PVsxLDU5XSxQdD1bMSw0MV0scHQ9WzEsNDJdLEZ0PVsxLDQzXSxYPVsxLDQ0XSxSdD1bMSw2Ml0sQnQ9WzEsNjddLHZ0PVsxLDIwLDIxLDIyLDIzLDM4LDQzLDQ1LDQ3LDQ5LDUzLDY5LDkyLDkzLDk0LDk1LDk2LDk3LDExMCwxMTMsMTE0LDExNywxMTksMTIyLDEyMywxMjQsMTI5LDEzMCwxMzEsMTMyXSxPdD1bMSw3MV0sVnQ9WzEsNzBdLHFlPVsxLDcyXSxfbj1bMjAsMjEsMjMsODQsODZdLFRlPVsxLDk4XSxXbj1bMSwxMDNdLEFlPVsxLDEwMl0sbmU9WzEsOTldLGtlPVsxLDk1XSxWZT1bMSwxMDFdLEVlPVsxLDk3XSxIZT1bMSwxMDRdLENlPVsxLDEwMF0sJGU9WzEsMTA1XSx5ZT1bMSw5Nl0sZm49WzIwLDIxLDIyLDIzLDg0LDg2XSxZdD1bMjAsMjEsMjIsMjMsNTUsODQsODZdLE1pPVsyMCwyMSwyMiwyMyw0MCw1Myw1NSw1Nyw1OSw2MSw2Myw2NSw2Nyw2OSw3Miw3NCw3Niw3Nyw3OSw4NCw4Niw5NywxMTAsMTEzLDExNCwxMTcsMTE5LDEyMiwxMjMsMTI0XSxxdD1bMjAsMjEsMjNdLHppPVsyMCwyMSwyMyw1Myw2OSw4NCw4Niw5NywxMTAsMTEzLDExNCwxMTcsMTE5LDEyMiwxMjMsMTI0XSxTZT1bMSwxMiwyMCwyMSwyMiwyMywyNCwzOCw0Myw0NSw0Nyw0OSw1Myw2OSw5Miw5Myw5NCw5NSw5Niw5NywxMTAsMTEzLDExNCwxMTcsMTE5LDEyMiwxMjMsMTI0LDEyOSwxMzAsMTMxLDEzMl0sa2k9WzUzLDY5LDk3LDExMCwxMTMsMTE0LDExNywxMTksMTIyLDEyMywxMjRdLFJpPVsxLDEzNF0scGk9WzEsMTMzXSxiaT1bMSwxNDFdLGRuPVsxLDE1NV0sTm49WzEsMTU2XSxXcj1bMSwxNTddLExpPVsxLDE1OF0saXM9WzEsMTQzXSxUcz1bMSwxNDVdLEFhPVsxLDE0OV0sWGk9WzEsMTUwXSxHYT1bMSwxNTFdLF9yPVsxLDE1Ml0scXI9WzEsMTUzXSxPaT1bMSwxNTRdLGdyPVsxLDE1OV0sSnM9WzEsMTYwXSxWbj1bMSwxMzldLFhjPVsxLDE0MF0sRXI9WzEsMTQ3XSxNYz1bMSwxNDJdLGJwPVsxLDE0Nl0sZm09WzEsMTQ0XSxUMD1bMjAsMjEsMjIsMjMsMzgsNDMsNDUsNDcsNDksNTMsNjksOTIsOTMsOTQsOTUsOTYsOTcsMTEwLDExMywxMTQsMTE3LDExOSwxMjIsMTIzLDEyNCwxMjksMTMwLDEzMSwxMzJdLEZkPVsxLDE2Ml0sTm89WzIwLDIxLDIyLDIzLDI2LDUzLDY5LDk3LDExMywxMTQsMTE3LDExOSwxMjIsMTIzLDEyNF0sdGE9WzEsMTgyXSxidT1bMSwxNzhdLFB1PVsxLDE3OV0sbG89WzEsMTgzXSxtbz1bMSwxODBdLE9zPVsxLDE4MV0sVGw9WzEyLDIxLDIyLDI0XSxGdT1bODYsMTI0LDEyN10sem89WzIwLDIxLDIyLDIzLDI0LDI2LDM4LDQwLDQzLDUzLDY5LDg0LDkyLDkzLDk0LDk1LDk2LDk3LDk4LDExMywxMTcsMTE5LDEyMiwxMjMsMTI0XSxuZD1bMjIsMTE0XSxzZj1bNDIsNTgsNjAsNjIsNjQsNjYsNzEsNzMsNzUsNzYsNzgsODAsMTI0LDEyNSwxMjZdLGxsPVsxLDI1MF0sVmk9WzEsMjQ4XSxLZT1bMSwyNTJdLGtyPVsxLDI0Nl0sbmk9WzEsMjQ3XSxlbz1bMSwyNDldLERjPVsxLDI1MV0sSnU9WzEsMjUzXSxRbz1bMSwyNzBdLGpmPVsyMCwyMSwyMywxMTRdLHJoPVsyMCwyMSwyMiwyMyw2OSw5MiwxMTMsMTE0LDExNywxMTgsMTE5LDEyMF0sZG09e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLG1lcm1haWREb2M6NCxkaXJlY3RpdmU6NSxvcGVuRGlyZWN0aXZlOjYsdHlwZURpcmVjdGl2ZTo3LGNsb3NlRGlyZWN0aXZlOjgsc2VwYXJhdG9yOjksIjoiOjEwLGFyZ0RpcmVjdGl2ZToxMSxvcGVuX2RpcmVjdGl2ZToxMix0eXBlX2RpcmVjdGl2ZToxMyxhcmdfZGlyZWN0aXZlOjE0LGNsb3NlX2RpcmVjdGl2ZToxNSxncmFwaENvbmZpZzoxNixkb2N1bWVudDoxNyxsaW5lOjE4LHN0YXRlbWVudDoxOSxTRU1JOjIwLE5FV0xJTkU6MjEsU1BBQ0U6MjIsRU9GOjIzLEdSQVBIOjI0LE5PRElSOjI1LERJUjoyNixGaXJzdFN0bXRTZXBlcmF0b3I6MjcsZW5kaW5nOjI4LGVuZFRva2VuOjI5LHNwYWNlTGlzdDozMCxzcGFjZUxpc3ROZXdsaW5lOjMxLHZlcnRpY2VTdGF0ZW1lbnQ6MzIsc3R5bGVTdGF0ZW1lbnQ6MzMsbGlua1N0eWxlU3RhdGVtZW50OjM0LGNsYXNzRGVmU3RhdGVtZW50OjM1LGNsYXNzU3RhdGVtZW50OjM2LGNsaWNrU3RhdGVtZW50OjM3LHN1YmdyYXBoOjM4LHRleHROb1RhZ3M6MzksU1FTOjQwLHRleHQ6NDEsU1FFOjQyLGVuZDo0MyxkaXJlY3Rpb246NDQsYWNjX3RpdGxlOjQ1LGFjY190aXRsZV92YWx1ZTo0NixhY2NfZGVzY3I6NDcsYWNjX2Rlc2NyX3ZhbHVlOjQ4LGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6NDksbGluazo1MCxub2RlOjUxLHN0eWxlZFZlcnRleDo1MixBTVA6NTMsdmVydGV4OjU0LFNUWUxFX1NFUEFSQVRPUjo1NSxpZFN0cmluZzo1NixET1VCTEVDSVJDTEVTVEFSVDo1NyxET1VCTEVDSVJDTEVFTkQ6NTgsUFM6NTksUEU6NjAsIigtIjo2MSwiLSkiOjYyLFNUQURJVU1TVEFSVDo2MyxTVEFESVVNRU5EOjY0LFNVQlJPVVRJTkVTVEFSVDo2NSxTVUJST1VUSU5FRU5EOjY2LFZFUlRFWF9XSVRIX1BST1BTX1NUQVJUOjY3LCJOT0RFX1NUUklOR1tmaWVsZF0iOjY4LENPTE9OOjY5LCJOT0RFX1NUUklOR1t2YWx1ZV0iOjcwLFBJUEU6NzEsQ1lMSU5ERVJTVEFSVDo3MixDWUxJTkRFUkVORDo3MyxESUFNT05EX1NUQVJUOjc0LERJQU1PTkRfU1RPUDo3NSxUQUdFTkQ6NzYsVFJBUFNUQVJUOjc3LFRSQVBFTkQ6NzgsSU5WVFJBUFNUQVJUOjc5LElOVlRSQVBFTkQ6ODAsbGlua1N0YXRlbWVudDo4MSxhcnJvd1RleHQ6ODIsVEVTVFNUUjo4MyxTVEFSVF9MSU5LOjg0LGVkZ2VUZXh0Ojg1LExJTks6ODYsZWRnZVRleHRUb2tlbjo4NyxTVFI6ODgsTURfU1RSOjg5LHRleHRUb2tlbjo5MCxrZXl3b3Jkczo5MSxTVFlMRTo5MixMSU5LU1RZTEU6OTMsQ0xBU1NERUY6OTQsQ0xBU1M6OTUsQ0xJQ0s6OTYsRE9XTjo5NyxVUDo5OCx0ZXh0Tm9UYWdzVG9rZW46OTksc3R5bGVzT3B0OjEwMCwiaWRTdHJpbmdbdmVydGV4XSI6MTAxLCJpZFN0cmluZ1tjbGFzc10iOjEwMixDQUxMQkFDS05BTUU6MTAzLENBTExCQUNLQVJHUzoxMDQsSFJFRjoxMDUsTElOS19UQVJHRVQ6MTA2LCJTVFJbbGlua10iOjEwNywiU1RSW3Rvb2x0aXBdIjoxMDgsYWxwaGFOdW06MTA5LERFRkFVTFQ6MTEwLG51bUxpc3Q6MTExLElOVEVSUE9MQVRFOjExMixOVU06MTEzLENPTU1BOjExNCxzdHlsZToxMTUsc3R5bGVDb21wb25lbnQ6MTE2LE5PREVfU1RSSU5HOjExNyxVTklUOjExOCxCUktUOjExOSxQQ1Q6MTIwLGlkU3RyaW5nVG9rZW46MTIxLE1JTlVTOjEyMixNVUxUOjEyMyxVTklDT0RFX1RFWFQ6MTI0LFRFWFQ6MTI1LFRBR1NUQVJUOjEyNixFREdFX1RFWFQ6MTI3LGFscGhhTnVtVG9rZW46MTI4LGRpcmVjdGlvbl90YjoxMjksZGlyZWN0aW9uX2J0OjEzMCxkaXJlY3Rpb25fcmw6MTMxLGRpcmVjdGlvbl9scjoxMzIsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDEwOiI6IiwxMjoib3Blbl9kaXJlY3RpdmUiLDEzOiJ0eXBlX2RpcmVjdGl2ZSIsMTQ6ImFyZ19kaXJlY3RpdmUiLDE1OiJjbG9zZV9kaXJlY3RpdmUiLDIwOiJTRU1JIiwyMToiTkVXTElORSIsMjI6IlNQQUNFIiwyMzoiRU9GIiwyNDoiR1JBUEgiLDI1OiJOT0RJUiIsMjY6IkRJUiIsMzg6InN1YmdyYXBoIiw0MDoiU1FTIiw0MjoiU1FFIiw0MzoiZW5kIiw0NToiYWNjX3RpdGxlIiw0NjoiYWNjX3RpdGxlX3ZhbHVlIiw0NzoiYWNjX2Rlc2NyIiw0ODoiYWNjX2Rlc2NyX3ZhbHVlIiw0OToiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsNTM6IkFNUCIsNTU6IlNUWUxFX1NFUEFSQVRPUiIsNTc6IkRPVUJMRUNJUkNMRVNUQVJUIiw1ODoiRE9VQkxFQ0lSQ0xFRU5EIiw1OToiUFMiLDYwOiJQRSIsNjE6IigtIiw2MjoiLSkiLDYzOiJTVEFESVVNU1RBUlQiLDY0OiJTVEFESVVNRU5EIiw2NToiU1VCUk9VVElORVNUQVJUIiw2NjoiU1VCUk9VVElORUVORCIsNjc6IlZFUlRFWF9XSVRIX1BST1BTX1NUQVJUIiw2ODoiTk9ERV9TVFJJTkdbZmllbGRdIiw2OToiQ09MT04iLDcwOiJOT0RFX1NUUklOR1t2YWx1ZV0iLDcxOiJQSVBFIiw3MjoiQ1lMSU5ERVJTVEFSVCIsNzM6IkNZTElOREVSRU5EIiw3NDoiRElBTU9ORF9TVEFSVCIsNzU6IkRJQU1PTkRfU1RPUCIsNzY6IlRBR0VORCIsNzc6IlRSQVBTVEFSVCIsNzg6IlRSQVBFTkQiLDc5OiJJTlZUUkFQU1RBUlQiLDgwOiJJTlZUUkFQRU5EIiw4MzoiVEVTVFNUUiIsODQ6IlNUQVJUX0xJTksiLDg2OiJMSU5LIiw4ODoiU1RSIiw4OToiTURfU1RSIiw5MjoiU1RZTEUiLDkzOiJMSU5LU1RZTEUiLDk0OiJDTEFTU0RFRiIsOTU6IkNMQVNTIiw5NjoiQ0xJQ0siLDk3OiJET1dOIiw5ODoiVVAiLDEwMToiaWRTdHJpbmdbdmVydGV4XSIsMTAyOiJpZFN0cmluZ1tjbGFzc10iLDEwMzoiQ0FMTEJBQ0tOQU1FIiwxMDQ6IkNBTExCQUNLQVJHUyIsMTA1OiJIUkVGIiwxMDY6IkxJTktfVEFSR0VUIiwxMDc6IlNUUltsaW5rXSIsMTA4OiJTVFJbdG9vbHRpcF0iLDExMDoiREVGQVVMVCIsMTEyOiJJTlRFUlBPTEFURSIsMTEzOiJOVU0iLDExNDoiQ09NTUEiLDExNzoiTk9ERV9TVFJJTkciLDExODoiVU5JVCIsMTE5OiJCUktUIiwxMjA6IlBDVCIsMTIyOiJNSU5VUyIsMTIzOiJNVUxUIiwxMjQ6IlVOSUNPREVfVEVYVCIsMTI1OiJURVhUIiwxMjY6IlRBR1NUQVJUIiwxMjc6IkVER0VfVEVYVCIsMTI5OiJkaXJlY3Rpb25fdGIiLDEzMDoiZGlyZWN0aW9uX2J0IiwxMzE6ImRpcmVjdGlvbl9ybCIsMTMyOiJkaXJlY3Rpb25fbHIifSxwcm9kdWN0aW9uc186WzAsWzMsMV0sWzMsMl0sWzUsNF0sWzUsNl0sWzYsMV0sWzcsMV0sWzExLDFdLFs4LDFdLFs0LDJdLFsxNywwXSxbMTcsMl0sWzE4LDFdLFsxOCwxXSxbMTgsMV0sWzE4LDFdLFsxOCwxXSxbMTYsMl0sWzE2LDJdLFsxNiwyXSxbMTYsM10sWzI4LDJdLFsyOCwxXSxbMjksMV0sWzI5LDFdLFsyOSwxXSxbMjcsMV0sWzI3LDFdLFsyNywyXSxbMzEsMl0sWzMxLDJdLFszMSwxXSxbMzEsMV0sWzMwLDJdLFszMCwxXSxbMTksMl0sWzE5LDJdLFsxOSwyXSxbMTksMl0sWzE5LDJdLFsxOSwyXSxbMTksOV0sWzE5LDZdLFsxOSw0XSxbMTksMV0sWzE5LDJdLFsxOSwyXSxbMTksMV0sWzksMV0sWzksMV0sWzksMV0sWzMyLDNdLFszMiw0XSxbMzIsMl0sWzMyLDFdLFs1MSwxXSxbNTEsNV0sWzUyLDFdLFs1MiwzXSxbNTQsNF0sWzU0LDRdLFs1NCw2XSxbNTQsNF0sWzU0LDRdLFs1NCw0XSxbNTQsOF0sWzU0LDRdLFs1NCw0XSxbNTQsNF0sWzU0LDZdLFs1NCw0XSxbNTQsNF0sWzU0LDRdLFs1NCw0XSxbNTQsNF0sWzU0LDFdLFs1MCwyXSxbNTAsM10sWzUwLDNdLFs1MCwxXSxbNTAsM10sWzg1LDFdLFs4NSwyXSxbODUsMV0sWzg1LDFdLFs4MSwxXSxbODIsM10sWzQxLDFdLFs0MSwyXSxbNDEsMV0sWzQxLDFdLFs5MSwxXSxbOTEsMV0sWzkxLDFdLFs5MSwxXSxbOTEsMV0sWzkxLDFdLFs5MSwxXSxbOTEsMV0sWzkxLDFdLFs5MSwxXSxbOTEsMV0sWzM5LDFdLFszOSwyXSxbMzksMV0sWzM5LDFdLFszNSw1XSxbMzYsNV0sWzM3LDJdLFszNyw0XSxbMzcsM10sWzM3LDVdLFszNywzXSxbMzcsNV0sWzM3LDVdLFszNyw3XSxbMzcsMl0sWzM3LDRdLFszNywyXSxbMzcsNF0sWzM3LDRdLFszNyw2XSxbMzMsNV0sWzM0LDVdLFszNCw1XSxbMzQsOV0sWzM0LDldLFszNCw3XSxbMzQsN10sWzExMSwxXSxbMTExLDNdLFsxMDAsMV0sWzEwMCwzXSxbMTE1LDFdLFsxMTUsMl0sWzExNiwxXSxbMTE2LDFdLFsxMTYsMV0sWzExNiwxXSxbMTE2LDFdLFsxMTYsMV0sWzExNiwxXSxbMTE2LDFdLFsxMjEsMV0sWzEyMSwxXSxbMTIxLDFdLFsxMjEsMV0sWzEyMSwxXSxbMTIxLDFdLFsxMjEsMV0sWzEyMSwxXSxbMTIxLDFdLFsxMjEsMV0sWzEyMSwxXSxbOTAsMV0sWzkwLDFdLFs5MCwxXSxbOTAsMV0sWzk5LDFdLFs5OSwxXSxbOTksMV0sWzk5LDFdLFs5OSwxXSxbOTksMV0sWzk5LDFdLFs5OSwxXSxbOTksMV0sWzk5LDFdLFs5OSwxXSxbODcsMV0sWzg3LDFdLFsxMjgsMV0sWzEyOCwxXSxbMTI4LDFdLFsxMjgsMV0sWzEyOCwxXSxbMTI4LDFdLFsxMjgsMV0sWzEyOCwxXSxbMTI4LDFdLFsxMjgsMV0sWzEyOCwxXSxbNTYsMV0sWzU2LDJdLFsxMDksMV0sWzEwOSwyXSxbNDQsMV0sWzQ0LDFdLFs0NCwxXSxbNDQsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24ob3MsQXMsbWEsdmksUWMsbWUsYmcpe3ZhciBPZT1tZS5sZW5ndGgtMTtzd2l0Y2goUWMpe2Nhc2UgNTp2aS5wYXJzZURpcmVjdGl2ZSgiJSV7Iiwib3Blbl9kaXJlY3RpdmUiKTticmVhaztjYXNlIDY6dmkucGFyc2VEaXJlY3RpdmUobWVbT2VdLCJ0eXBlX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgNzptZVtPZV09bWVbT2VdLnRyaW0oKS5yZXBsYWNlKC8nL2csJyInKSx2aS5wYXJzZURpcmVjdGl2ZShtZVtPZV0sImFyZ19kaXJlY3RpdmUiKTticmVhaztjYXNlIDg6dmkucGFyc2VEaXJlY3RpdmUoIn0lJSIsImNsb3NlX2RpcmVjdGl2ZSIsImZsb3djaGFydCIpO2JyZWFrO2Nhc2UgMTA6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMTE6KCFBcnJheS5pc0FycmF5KG1lW09lXSl8fG1lW09lXS5sZW5ndGg+MCkmJm1lW09lLTFdLnB1c2gobWVbT2VdKSx0aGlzLiQ9bWVbT2UtMV07YnJlYWs7Y2FzZSAxMjpjYXNlIDE4NDp0aGlzLiQ9bWVbT2VdO2JyZWFrO2Nhc2UgMTk6dmkuc2V0RGlyZWN0aW9uKCJUQiIpLHRoaXMuJD0iVEIiO2JyZWFrO2Nhc2UgMjA6dmkuc2V0RGlyZWN0aW9uKG1lW09lLTFdKSx0aGlzLiQ9bWVbT2UtMV07YnJlYWs7Y2FzZSAzNTp0aGlzLiQ9bWVbT2UtMV0ubm9kZXM7YnJlYWs7Y2FzZSAzNjpjYXNlIDM3OmNhc2UgMzg6Y2FzZSAzOTpjYXNlIDQwOnRoaXMuJD1bXTticmVhaztjYXNlIDQxOnRoaXMuJD12aS5hZGRTdWJHcmFwaChtZVtPZS02XSxtZVtPZS0xXSxtZVtPZS00XSk7YnJlYWs7Y2FzZSA0Mjp0aGlzLiQ9dmkuYWRkU3ViR3JhcGgobWVbT2UtM10sbWVbT2UtMV0sbWVbT2UtM10pO2JyZWFrO2Nhc2UgNDM6dGhpcy4kPXZpLmFkZFN1YkdyYXBoKHZvaWQgMCxtZVtPZS0xXSx2b2lkIDApO2JyZWFrO2Nhc2UgNDU6dGhpcy4kPW1lW09lXS50cmltKCksdmkuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDQ2OmNhc2UgNDc6dGhpcy4kPW1lW09lXS50cmltKCksdmkuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDUxOnZpLmFkZExpbmsobWVbT2UtMl0uc3RtdCxtZVtPZV0sbWVbT2UtMV0pLHRoaXMuJD17c3RtdDptZVtPZV0sbm9kZXM6bWVbT2VdLmNvbmNhdChtZVtPZS0yXS5ub2Rlcyl9O2JyZWFrO2Nhc2UgNTI6dmkuYWRkTGluayhtZVtPZS0zXS5zdG10LG1lW09lLTFdLG1lW09lLTJdKSx0aGlzLiQ9e3N0bXQ6bWVbT2UtMV0sbm9kZXM6bWVbT2UtMV0uY29uY2F0KG1lW09lLTNdLm5vZGVzKX07YnJlYWs7Y2FzZSA1Mzp0aGlzLiQ9e3N0bXQ6bWVbT2UtMV0sbm9kZXM6bWVbT2UtMV19O2JyZWFrO2Nhc2UgNTQ6dGhpcy4kPXtzdG10Om1lW09lXSxub2RlczptZVtPZV19O2JyZWFrO2Nhc2UgNTU6dGhpcy4kPVttZVtPZV1dO2JyZWFrO2Nhc2UgNTY6dGhpcy4kPW1lW09lLTRdLmNvbmNhdChtZVtPZV0pO2JyZWFrO2Nhc2UgNTc6dGhpcy4kPW1lW09lXTticmVhaztjYXNlIDU4OnRoaXMuJD1tZVtPZS0yXSx2aS5zZXRDbGFzcyhtZVtPZS0yXSxtZVtPZV0pO2JyZWFrO2Nhc2UgNTk6dGhpcy4kPW1lW09lLTNdLHZpLmFkZFZlcnRleChtZVtPZS0zXSxtZVtPZS0xXSwic3F1YXJlIik7YnJlYWs7Y2FzZSA2MDp0aGlzLiQ9bWVbT2UtM10sdmkuYWRkVmVydGV4KG1lW09lLTNdLG1lW09lLTFdLCJkb3VibGVjaXJjbGUiKTticmVhaztjYXNlIDYxOnRoaXMuJD1tZVtPZS01XSx2aS5hZGRWZXJ0ZXgobWVbT2UtNV0sbWVbT2UtMl0sImNpcmNsZSIpO2JyZWFrO2Nhc2UgNjI6dGhpcy4kPW1lW09lLTNdLHZpLmFkZFZlcnRleChtZVtPZS0zXSxtZVtPZS0xXSwiZWxsaXBzZSIpO2JyZWFrO2Nhc2UgNjM6dGhpcy4kPW1lW09lLTNdLHZpLmFkZFZlcnRleChtZVtPZS0zXSxtZVtPZS0xXSwic3RhZGl1bSIpO2JyZWFrO2Nhc2UgNjQ6dGhpcy4kPW1lW09lLTNdLHZpLmFkZFZlcnRleChtZVtPZS0zXSxtZVtPZS0xXSwic3Vicm91dGluZSIpO2JyZWFrO2Nhc2UgNjU6dGhpcy4kPW1lW09lLTddLHZpLmFkZFZlcnRleChtZVtPZS03XSxtZVtPZS0xXSwicmVjdCIsdm9pZCAwLHZvaWQgMCx2b2lkIDAsT2JqZWN0LmZyb21FbnRyaWVzKFtbbWVbT2UtNV0sbWVbT2UtM11dXSkpO2JyZWFrO2Nhc2UgNjY6dGhpcy4kPW1lW09lLTNdLHZpLmFkZFZlcnRleChtZVtPZS0zXSxtZVtPZS0xXSwiY3lsaW5kZXIiKTticmVhaztjYXNlIDY3OnRoaXMuJD1tZVtPZS0zXSx2aS5hZGRWZXJ0ZXgobWVbT2UtM10sbWVbT2UtMV0sInJvdW5kIik7YnJlYWs7Y2FzZSA2ODp0aGlzLiQ9bWVbT2UtM10sdmkuYWRkVmVydGV4KG1lW09lLTNdLG1lW09lLTFdLCJkaWFtb25kIik7YnJlYWs7Y2FzZSA2OTp0aGlzLiQ9bWVbT2UtNV0sdmkuYWRkVmVydGV4KG1lW09lLTVdLG1lW09lLTJdLCJoZXhhZ29uIik7YnJlYWs7Y2FzZSA3MDp0aGlzLiQ9bWVbT2UtM10sdmkuYWRkVmVydGV4KG1lW09lLTNdLG1lW09lLTFdLCJvZGQiKTticmVhaztjYXNlIDcxOnRoaXMuJD1tZVtPZS0zXSx2aS5hZGRWZXJ0ZXgobWVbT2UtM10sbWVbT2UtMV0sInRyYXBlem9pZCIpO2JyZWFrO2Nhc2UgNzI6dGhpcy4kPW1lW09lLTNdLHZpLmFkZFZlcnRleChtZVtPZS0zXSxtZVtPZS0xXSwiaW52X3RyYXBlem9pZCIpO2JyZWFrO2Nhc2UgNzM6dGhpcy4kPW1lW09lLTNdLHZpLmFkZFZlcnRleChtZVtPZS0zXSxtZVtPZS0xXSwibGVhbl9yaWdodCIpO2JyZWFrO2Nhc2UgNzQ6dGhpcy4kPW1lW09lLTNdLHZpLmFkZFZlcnRleChtZVtPZS0zXSxtZVtPZS0xXSwibGVhbl9sZWZ0Iik7YnJlYWs7Y2FzZSA3NTp0aGlzLiQ9bWVbT2VdLHZpLmFkZFZlcnRleChtZVtPZV0pO2JyZWFrO2Nhc2UgNzY6bWVbT2UtMV0udGV4dD1tZVtPZV0sdGhpcy4kPW1lW09lLTFdO2JyZWFrO2Nhc2UgNzc6Y2FzZSA3ODptZVtPZS0yXS50ZXh0PW1lW09lLTFdLHRoaXMuJD1tZVtPZS0yXTticmVhaztjYXNlIDc5OnRoaXMuJD1tZVtPZV07YnJlYWs7Y2FzZSA4MDp2YXIgYWY9dmkuZGVzdHJ1Y3RMaW5rKG1lW09lXSxtZVtPZS0yXSk7dGhpcy4kPXt0eXBlOmFmLnR5cGUsc3Ryb2tlOmFmLnN0cm9rZSxsZW5ndGg6YWYubGVuZ3RoLHRleHQ6bWVbT2UtMV19O2JyZWFrO2Nhc2UgODE6dGhpcy4kPXt0ZXh0Om1lW09lXSx0eXBlOiJ0ZXh0In07YnJlYWs7Y2FzZSA4Mjp0aGlzLiQ9e3RleHQ6bWVbT2UtMV0udGV4dCsiIittZVtPZV0sdHlwZTptZVtPZS0xXS50eXBlfTticmVhaztjYXNlIDgzOnRoaXMuJD17dGV4dDptZVtPZV0sdHlwZToic3RyaW5nIn07YnJlYWs7Y2FzZSA4NDp0aGlzLiQ9e3RleHQ6bWVbT2VdLHR5cGU6Im1hcmtkb3duIn07YnJlYWs7Y2FzZSA4NTp2YXIgYWY9dmkuZGVzdHJ1Y3RMaW5rKG1lW09lXSk7dGhpcy4kPXt0eXBlOmFmLnR5cGUsc3Ryb2tlOmFmLnN0cm9rZSxsZW5ndGg6YWYubGVuZ3RofTticmVhaztjYXNlIDg2OnRoaXMuJD1tZVtPZS0xXTticmVhaztjYXNlIDg3OnRoaXMuJD17dGV4dDptZVtPZV0sdHlwZToidGV4dCJ9O2JyZWFrO2Nhc2UgODg6dGhpcy4kPXt0ZXh0Om1lW09lLTFdLnRleHQrIiIrbWVbT2VdLHR5cGU6bWVbT2UtMV0udHlwZX07YnJlYWs7Y2FzZSA4OTp0aGlzLiQ9e3RleHQ6bWVbT2VdLHR5cGU6InN0cmluZyJ9O2JyZWFrO2Nhc2UgOTA6Y2FzZSAxMDU6dGhpcy4kPXt0ZXh0Om1lW09lXSx0eXBlOiJtYXJrZG93biJ9O2JyZWFrO2Nhc2UgMTAyOnRoaXMuJD17dGV4dDptZVtPZV0sdHlwZToidGV4dCJ9O2JyZWFrO2Nhc2UgMTAzOnRoaXMuJD17dGV4dDptZVtPZS0xXS50ZXh0KyIiK21lW09lXSx0eXBlOm1lW09lLTFdLnR5cGV9O2JyZWFrO2Nhc2UgMTA0OnRoaXMuJD17dGV4dDptZVtPZV0sdHlwZToidGV4dCJ9O2JyZWFrO2Nhc2UgMTA2OnRoaXMuJD1tZVtPZS00XSx2aS5hZGRDbGFzcyhtZVtPZS0yXSxtZVtPZV0pO2JyZWFrO2Nhc2UgMTA3OnRoaXMuJD1tZVtPZS00XSx2aS5zZXRDbGFzcyhtZVtPZS0yXSxtZVtPZV0pO2JyZWFrO2Nhc2UgMTA4OmNhc2UgMTE2OnRoaXMuJD1tZVtPZS0xXSx2aS5zZXRDbGlja0V2ZW50KG1lW09lLTFdLG1lW09lXSk7YnJlYWs7Y2FzZSAxMDk6Y2FzZSAxMTc6dGhpcy4kPW1lW09lLTNdLHZpLnNldENsaWNrRXZlbnQobWVbT2UtM10sbWVbT2UtMl0pLHZpLnNldFRvb2x0aXAobWVbT2UtM10sbWVbT2VdKTticmVhaztjYXNlIDExMDp0aGlzLiQ9bWVbT2UtMl0sdmkuc2V0Q2xpY2tFdmVudChtZVtPZS0yXSxtZVtPZS0xXSxtZVtPZV0pO2JyZWFrO2Nhc2UgMTExOnRoaXMuJD1tZVtPZS00XSx2aS5zZXRDbGlja0V2ZW50KG1lW09lLTRdLG1lW09lLTNdLG1lW09lLTJdKSx2aS5zZXRUb29sdGlwKG1lW09lLTRdLG1lW09lXSk7YnJlYWs7Y2FzZSAxMTI6dGhpcy4kPW1lW09lLTJdLHZpLnNldExpbmsobWVbT2UtMl0sbWVbT2VdKTticmVhaztjYXNlIDExMzp0aGlzLiQ9bWVbT2UtNF0sdmkuc2V0TGluayhtZVtPZS00XSxtZVtPZS0yXSksdmkuc2V0VG9vbHRpcChtZVtPZS00XSxtZVtPZV0pO2JyZWFrO2Nhc2UgMTE0OnRoaXMuJD1tZVtPZS00XSx2aS5zZXRMaW5rKG1lW09lLTRdLG1lW09lLTJdLG1lW09lXSk7YnJlYWs7Y2FzZSAxMTU6dGhpcy4kPW1lW09lLTZdLHZpLnNldExpbmsobWVbT2UtNl0sbWVbT2UtNF0sbWVbT2VdKSx2aS5zZXRUb29sdGlwKG1lW09lLTZdLG1lW09lLTJdKTticmVhaztjYXNlIDExODp0aGlzLiQ9bWVbT2UtMV0sdmkuc2V0TGluayhtZVtPZS0xXSxtZVtPZV0pO2JyZWFrO2Nhc2UgMTE5OnRoaXMuJD1tZVtPZS0zXSx2aS5zZXRMaW5rKG1lW09lLTNdLG1lW09lLTJdKSx2aS5zZXRUb29sdGlwKG1lW09lLTNdLG1lW09lXSk7YnJlYWs7Y2FzZSAxMjA6dGhpcy4kPW1lW09lLTNdLHZpLnNldExpbmsobWVbT2UtM10sbWVbT2UtMl0sbWVbT2VdKTticmVhaztjYXNlIDEyMTp0aGlzLiQ9bWVbT2UtNV0sdmkuc2V0TGluayhtZVtPZS01XSxtZVtPZS00XSxtZVtPZV0pLHZpLnNldFRvb2x0aXAobWVbT2UtNV0sbWVbT2UtMl0pO2JyZWFrO2Nhc2UgMTIyOnRoaXMuJD1tZVtPZS00XSx2aS5hZGRWZXJ0ZXgobWVbT2UtMl0sdm9pZCAwLHZvaWQgMCxtZVtPZV0pO2JyZWFrO2Nhc2UgMTIzOnRoaXMuJD1tZVtPZS00XSx2aS51cGRhdGVMaW5rKFttZVtPZS0yXV0sbWVbT2VdKTticmVhaztjYXNlIDEyNDp0aGlzLiQ9bWVbT2UtNF0sdmkudXBkYXRlTGluayhtZVtPZS0yXSxtZVtPZV0pO2JyZWFrO2Nhc2UgMTI1OnRoaXMuJD1tZVtPZS04XSx2aS51cGRhdGVMaW5rSW50ZXJwb2xhdGUoW21lW09lLTZdXSxtZVtPZS0yXSksdmkudXBkYXRlTGluayhbbWVbT2UtNl1dLG1lW09lXSk7YnJlYWs7Y2FzZSAxMjY6dGhpcy4kPW1lW09lLThdLHZpLnVwZGF0ZUxpbmtJbnRlcnBvbGF0ZShtZVtPZS02XSxtZVtPZS0yXSksdmkudXBkYXRlTGluayhtZVtPZS02XSxtZVtPZV0pO2JyZWFrO2Nhc2UgMTI3OnRoaXMuJD1tZVtPZS02XSx2aS51cGRhdGVMaW5rSW50ZXJwb2xhdGUoW21lW09lLTRdXSxtZVtPZV0pO2JyZWFrO2Nhc2UgMTI4OnRoaXMuJD1tZVtPZS02XSx2aS51cGRhdGVMaW5rSW50ZXJwb2xhdGUobWVbT2UtNF0sbWVbT2VdKTticmVhaztjYXNlIDEyOTpjYXNlIDEzMTp0aGlzLiQ9W21lW09lXV07YnJlYWs7Y2FzZSAxMzA6Y2FzZSAxMzI6bWVbT2UtMl0ucHVzaChtZVtPZV0pLHRoaXMuJD1tZVtPZS0yXTticmVhaztjYXNlIDEzNDp0aGlzLiQ9bWVbT2UtMV0rbWVbT2VdO2JyZWFrO2Nhc2UgMTgyOnRoaXMuJD1tZVtPZV07YnJlYWs7Y2FzZSAxODM6dGhpcy4kPW1lW09lLTFdKyIiK21lW09lXTticmVhaztjYXNlIDE4NTp0aGlzLiQ9bWVbT2UtMV0rIiIrbWVbT2VdO2JyZWFrO2Nhc2UgMTg2OnRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiVEIifTticmVhaztjYXNlIDE4Nzp0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IkJUIn07YnJlYWs7Y2FzZSAxODg6dGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJSTCJ9O2JyZWFrO2Nhc2UgMTg5OnRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiTFIifTticmVha319LHRhYmxlOlt7MzoxLDQ6Miw1OjMsNjo1LDEyOmEsMTY6NCwyMTpmLDIyOnAsMjQ6dn0sezE6WzNdfSx7MTpbMiwxXX0sezM6MTAsNDoyLDU6Myw2OjUsMTI6YSwxNjo0LDIxOmYsMjI6cCwyNDp2fSxpKG0sYix7MTc6MTF9KSx7NzoxMiwxMzpbMSwxM119LHsxNjoxNCwyMTpmLDIyOnAsMjQ6dn0sezE2OjE1LDIxOmYsMjI6cCwyNDp2fSx7MjU6WzEsMTZdLDI2OlsxLDE3XX0sezEzOlsyLDVdfSx7MTpbMiwyXX0sezE6WzIsOV0sMTg6MTgsMTk6MTksMjA6RSwyMTpDLDIyOkEsMjM6UCwzMjoyNCwzMzoyNSwzNDoyNiwzNToyNywzNjoyOCwzNzoyOSwzODpGLDQ0OjMxLDQ1OmosNDc6Uiw0OTpILDUxOjM1LDUyOjQ1LDUzOlksNTQ6NDYsNTY6NDcsNjk6cnQsOTI6Siw5MzppdCw5NDpmdCw5NTpUdCw5NjprdCw5NzptdCwxMTA6Y3QsMTEzOnl0LDExNDpzdCwxMTc6eHQsMTE5Omh0LDEyMTo0OCwxMjI6ZHQsMTIzOkN0LDEyNDp0dCwxMjk6UHQsMTMwOnB0LDEzMTpGdCwxMzI6WH0sezg6NjAsMTA6WzEsNjFdLDE1OlJ0fSxpKFsxMCwxNV0sWzIsNl0pLGkobSxbMiwxN10pLGkobSxbMiwxOF0pLGkobSxbMiwxOV0pLHsyMDpbMSw2NF0sMjE6WzEsNjVdLDIyOkJ0LDI3OjYzLDMwOjY2fSxpKHZ0LFsyLDExXSksaSh2dCxbMiwxMl0pLGkodnQsWzIsMTNdKSxpKHZ0LFsyLDE0XSksaSh2dCxbMiwxNV0pLGkodnQsWzIsMTZdKSx7OTo2OCwyMDpPdCwyMTpWdCwyMzpxZSw1MDo2OSw4MTo3Myw4NDpbMSw3NF0sODY6WzEsNzVdfSx7OTo3NiwyMDpPdCwyMTpWdCwyMzpxZX0sezk6NzcsMjA6T3QsMjE6VnQsMjM6cWV9LHs5Ojc4LDIwOk90LDIxOlZ0LDIzOnFlfSx7OTo3OSwyMDpPdCwyMTpWdCwyMzpxZX0sezk6ODAsMjA6T3QsMjE6VnQsMjM6cWV9LHs5OjgyLDIwOk90LDIxOlZ0LDIyOlsxLDgxXSwyMzpxZX0saSh2dCxbMiw0NF0pLHs0NjpbMSw4M119LHs0ODpbMSw4NF19LGkodnQsWzIsNDddKSxpKF9uLFsyLDU0XSx7MzA6ODUsMjI6QnR9KSx7MjI6WzEsODZdfSx7MjI6WzEsODddfSx7MjI6WzEsODhdfSx7MjI6WzEsODldfSx7MjY6VGUsNTM6V24sNjk6QWUsODg6WzEsOTNdLDk3Om5lLDEwMzpbMSw5MF0sMTA1OlsxLDkxXSwxMDk6OTIsMTEzOmtlLDExNDpWZSwxMTc6RWUsMTE5OkhlLDEyMjpDZSwxMjM6JGUsMTI0OnllLDEyODo5NH0saSh2dCxbMiwxODZdKSxpKHZ0LFsyLDE4N10pLGkodnQsWzIsMTg4XSksaSh2dCxbMiwxODldKSxpKGZuLFsyLDU1XSksaShmbixbMiw1N10sezU1OlsxLDEwNl19KSxpKFl0LFsyLDc1XSx7MTIxOjExOSw0MDpbMSwxMDddLDUzOlksNTc6WzEsMTA4XSw1OTpbMSwxMDldLDYxOlsxLDExMF0sNjM6WzEsMTExXSw2NTpbMSwxMTJdLDY3OlsxLDExM10sNjk6cnQsNzI6WzEsMTE0XSw3NDpbMSwxMTVdLDc2OlsxLDExNl0sNzc6WzEsMTE3XSw3OTpbMSwxMThdLDk3Om10LDExMDpjdCwxMTM6eXQsMTE0OnN0LDExNzp4dCwxMTk6aHQsMTIyOmR0LDEyMzpDdCwxMjQ6dHR9KSxpKE1pLFsyLDE4Ml0pLGkoTWksWzIsMTQzXSksaShNaSxbMiwxNDRdKSxpKE1pLFsyLDE0NV0pLGkoTWksWzIsMTQ2XSksaShNaSxbMiwxNDddKSxpKE1pLFsyLDE0OF0pLGkoTWksWzIsMTQ5XSksaShNaSxbMiwxNTBdKSxpKE1pLFsyLDE1MV0pLGkoTWksWzIsMTUyXSksaShNaSxbMiwxNTNdKSx7OToxMjAsMjA6T3QsMjE6VnQsMjM6cWV9LHsxMToxMjEsMTQ6WzEsMTIyXX0saShxdCxbMiw4XSksaShtLFsyLDIwXSksaShtLFsyLDI2XSksaShtLFsyLDI3XSksezIxOlsxLDEyM119LGkoemksWzIsMzRdLHszMDoxMjQsMjI6QnR9KSxpKHZ0LFsyLDM1XSksezUxOjEyNSw1Mjo0NSw1MzpZLDU0OjQ2LDU2OjQ3LDY5OnJ0LDk3Om10LDExMDpjdCwxMTM6eXQsMTE0OnN0LDExNzp4dCwxMTk6aHQsMTIxOjQ4LDEyMjpkdCwxMjM6Q3QsMTI0OnR0fSxpKFNlLFsyLDQ4XSksaShTZSxbMiw0OV0pLGkoU2UsWzIsNTBdKSxpKGtpLFsyLDc5XSx7ODI6MTI2LDcxOlsxLDEyOF0sODM6WzEsMTI3XX0pLHs4NToxMjksODc6MTMwLDg4OlsxLDEzMV0sODk6WzEsMTMyXSwxMjQ6UmksMTI3OnBpfSxpKFs1Myw2OSw3MSw4Myw5NywxMTAsMTEzLDExNCwxMTcsMTE5LDEyMiwxMjMsMTI0XSxbMiw4NV0pLGkodnQsWzIsMzZdKSxpKHZ0LFsyLDM3XSksaSh2dCxbMiwzOF0pLGkodnQsWzIsMzldKSxpKHZ0LFsyLDQwXSksezIyOmJpLDI0OmRuLDI2Ok5uLDM4OldyLDM5OjEzNSw0MzpMaSw1Mzppcyw2OTpUcyw4NDpBYSw4ODpbMSwxMzddLDg5OlsxLDEzOF0sOTE6MTQ4LDkyOlhpLDkzOkdhLDk0Ol9yLDk1OnFyLDk2Ok9pLDk3OmdyLDk4OkpzLDk5OjEzNiwxMTM6Vm4sMTE3OlhjLDExOTpFciwxMjI6TWMsMTIzOmJwLDEyNDpmbX0saShUMCxiLHsxNzoxNjF9KSxpKHZ0LFsyLDQ1XSksaSh2dCxbMiw0Nl0pLGkoX24sWzIsNTNdLHs1MzpGZH0pLHs1MzpZLDU2OjE2Myw2OTpydCw5NzptdCwxMTA6Y3QsMTEzOnl0LDExNDpzdCwxMTc6eHQsMTE5Omh0LDEyMTo0OCwxMjI6ZHQsMTIzOkN0LDEyNDp0dH0sezExMDpbMSwxNjRdLDExMToxNjUsMTEzOlsxLDE2Nl19LHs1MzpZLDU2OjE2Nyw2OTpydCw5NzptdCwxMTA6Y3QsMTEzOnl0LDExNDpzdCwxMTc6eHQsMTE5Omh0LDEyMTo0OCwxMjI6ZHQsMTIzOkN0LDEyNDp0dH0sezUzOlksNTY6MTY4LDY5OnJ0LDk3Om10LDExMDpjdCwxMTM6eXQsMTE0OnN0LDExNzp4dCwxMTk6aHQsMTIxOjQ4LDEyMjpkdCwxMjM6Q3QsMTI0OnR0fSxpKHF0LFsyLDEwOF0sezIyOlsxLDE2OV0sMTA0OlsxLDE3MF19KSx7ODg6WzEsMTcxXX0saShxdCxbMiwxMTZdLHsxMjg6MTczLDIyOlsxLDE3Ml0sMjY6VGUsNTM6V24sNjk6QWUsOTc6bmUsMTEzOmtlLDExNDpWZSwxMTc6RWUsMTE5OkhlLDEyMjpDZSwxMjM6JGUsMTI0OnllfSksaShxdCxbMiwxMThdLHsyMjpbMSwxNzRdfSksaShObyxbMiwxODRdKSxpKE5vLFsyLDE3MV0pLGkoTm8sWzIsMTcyXSksaShObyxbMiwxNzNdKSxpKE5vLFsyLDE3NF0pLGkoTm8sWzIsMTc1XSksaShObyxbMiwxNzZdKSxpKE5vLFsyLDE3N10pLGkoTm8sWzIsMTc4XSksaShObyxbMiwxNzldKSxpKE5vLFsyLDE4MF0pLGkoTm8sWzIsMTgxXSksezUzOlksNTY6MTc1LDY5OnJ0LDk3Om10LDExMDpjdCwxMTM6eXQsMTE0OnN0LDExNzp4dCwxMTk6aHQsMTIxOjQ4LDEyMjpkdCwxMjM6Q3QsMTI0OnR0fSx7NDE6MTc2LDc2OnRhLDg4OmJ1LDg5OlB1LDkwOjE3NywxMjQ6bG8sMTI1Om1vLDEyNjpPc30sezQxOjE4NCw3Njp0YSw4ODpidSw4OTpQdSw5MDoxNzcsMTI0OmxvLDEyNTptbywxMjY6T3N9LHs0MToxODYsNTk6WzEsMTg1XSw3Njp0YSw4ODpidSw4OTpQdSw5MDoxNzcsMTI0OmxvLDEyNTptbywxMjY6T3N9LHs0MToxODcsNzY6dGEsODg6YnUsODk6UHUsOTA6MTc3LDEyNDpsbywxMjU6bW8sMTI2Ok9zfSx7NDE6MTg4LDc2OnRhLDg4OmJ1LDg5OlB1LDkwOjE3NywxMjQ6bG8sMTI1Om1vLDEyNjpPc30sezQxOjE4OSw3Njp0YSw4ODpidSw4OTpQdSw5MDoxNzcsMTI0OmxvLDEyNTptbywxMjY6T3N9LHsxMTc6WzEsMTkwXX0sezQxOjE5MSw3Njp0YSw4ODpidSw4OTpQdSw5MDoxNzcsMTI0OmxvLDEyNTptbywxMjY6T3N9LHs0MToxOTIsNzQ6WzEsMTkzXSw3Njp0YSw4ODpidSw4OTpQdSw5MDoxNzcsMTI0OmxvLDEyNTptbywxMjY6T3N9LHs0MToxOTQsNzY6dGEsODg6YnUsODk6UHUsOTA6MTc3LDEyNDpsbywxMjU6bW8sMTI2Ok9zfSx7NDE6MTk1LDc2OnRhLDg4OmJ1LDg5OlB1LDkwOjE3NywxMjQ6bG8sMTI1Om1vLDEyNjpPc30sezQxOjE5Niw3Njp0YSw4ODpidSw4OTpQdSw5MDoxNzcsMTI0OmxvLDEyNTptbywxMjY6T3N9LGkoTWksWzIsMTgzXSksaShUbCxbMiwzXSksezg6MTk3LDE1OlJ0fSx7MTU6WzIsN119LGkobSxbMiwyOF0pLGkoemksWzIsMzNdKSxpKF9uLFsyLDUxXSx7MzA6MTk4LDIyOkJ0fSksaShraSxbMiw3Nl0sezIyOlsxLDE5OV19KSx7MjI6WzEsMjAwXX0sezQxOjIwMSw3Njp0YSw4ODpidSw4OTpQdSw5MDoxNzcsMTI0OmxvLDEyNTptbywxMjY6T3N9LHs4NjpbMSwyMDJdLDg3OjIwMywxMjQ6UmksMTI3OnBpfSxpKEZ1LFsyLDgxXSksaShGdSxbMiw4M10pLGkoRnUsWzIsODRdKSxpKEZ1LFsyLDE2OV0pLGkoRnUsWzIsMTcwXSksezk6MjA1LDIwOk90LDIxOlZ0LDIyOmJpLDIzOnFlLDI0OmRuLDI2Ok5uLDM4OldyLDQwOlsxLDIwNF0sNDM6TGksNTM6aXMsNjk6VHMsODQ6QWEsOTE6MTQ4LDkyOlhpLDkzOkdhLDk0Ol9yLDk1OnFyLDk2Ok9pLDk3OmdyLDk4OkpzLDk5OjIwNiwxMTM6Vm4sMTE3OlhjLDExOTpFciwxMjI6TWMsMTIzOmJwLDEyNDpmbX0saSh6byxbMiwxMDJdKSxpKHpvLFsyLDEwNF0pLGkoem8sWzIsMTA1XSksaSh6byxbMiwxNThdKSxpKHpvLFsyLDE1OV0pLGkoem8sWzIsMTYwXSksaSh6byxbMiwxNjFdKSxpKHpvLFsyLDE2Ml0pLGkoem8sWzIsMTYzXSksaSh6byxbMiwxNjRdKSxpKHpvLFsyLDE2NV0pLGkoem8sWzIsMTY2XSksaSh6byxbMiwxNjddKSxpKHpvLFsyLDE2OF0pLGkoem8sWzIsOTFdKSxpKHpvLFsyLDkyXSksaSh6byxbMiw5M10pLGkoem8sWzIsOTRdKSxpKHpvLFsyLDk1XSksaSh6byxbMiw5Nl0pLGkoem8sWzIsOTddKSxpKHpvLFsyLDk4XSksaSh6byxbMiw5OV0pLGkoem8sWzIsMTAwXSksaSh6byxbMiwxMDFdKSx7MTg6MTgsMTk6MTksMjA6RSwyMTpDLDIyOkEsMjM6UCwzMjoyNCwzMzoyNSwzNDoyNiwzNToyNywzNjoyOCwzNzoyOSwzODpGLDQzOlsxLDIwN10sNDQ6MzEsNDU6aiw0NzpSLDQ5OkgsNTE6MzUsNTI6NDUsNTM6WSw1NDo0Niw1Njo0Nyw2OTpydCw5MjpKLDkzOml0LDk0OmZ0LDk1OlR0LDk2Omt0LDk3Om10LDExMDpjdCwxMTM6eXQsMTE0OnN0LDExNzp4dCwxMTk6aHQsMTIxOjQ4LDEyMjpkdCwxMjM6Q3QsMTI0OnR0LDEyOTpQdCwxMzA6cHQsMTMxOkZ0LDEzMjpYfSx7MjI6QnQsMzA6MjA4fSx7MjI6WzEsMjA5XSw1MzpZLDY5OnJ0LDk3Om10LDExMDpjdCwxMTM6eXQsMTE0OnN0LDExNzp4dCwxMTk6aHQsMTIxOjExOSwxMjI6ZHQsMTIzOkN0LDEyNDp0dH0sezIyOlsxLDIxMF19LHsyMjpbMSwyMTFdLDExNDpbMSwyMTJdfSxpKG5kLFsyLDEyOV0pLHsyMjpbMSwyMTNdLDUzOlksNjk6cnQsOTc6bXQsMTEwOmN0LDExMzp5dCwxMTQ6c3QsMTE3Onh0LDExOTpodCwxMjE6MTE5LDEyMjpkdCwxMjM6Q3QsMTI0OnR0fSx7MjI6WzEsMjE0XSw1MzpZLDY5OnJ0LDk3Om10LDExMDpjdCwxMTM6eXQsMTE0OnN0LDExNzp4dCwxMTk6aHQsMTIxOjExOSwxMjI6ZHQsMTIzOkN0LDEyNDp0dH0sezg4OlsxLDIxNV19LGkocXQsWzIsMTEwXSx7MjI6WzEsMjE2XX0pLGkocXQsWzIsMTEyXSx7MjI6WzEsMjE3XX0pLHs4ODpbMSwyMThdfSxpKE5vLFsyLDE4NV0pLHs4ODpbMSwyMTldLDEwNjpbMSwyMjBdfSxpKGZuLFsyLDU4XSx7MTIxOjExOSw1MzpZLDY5OnJ0LDk3Om10LDExMDpjdCwxMTM6eXQsMTE0OnN0LDExNzp4dCwxMTk6aHQsMTIyOmR0LDEyMzpDdCwxMjQ6dHR9KSx7NDI6WzEsMjIxXSw3Njp0YSw5MDoyMjIsMTI0OmxvLDEyNTptbywxMjY6T3N9LGkoc2YsWzIsODddKSxpKHNmLFsyLDg5XSksaShzZixbMiw5MF0pLGkoc2YsWzIsMTU0XSksaShzZixbMiwxNTVdKSxpKHNmLFsyLDE1Nl0pLGkoc2YsWzIsMTU3XSksezU4OlsxLDIyM10sNzY6dGEsOTA6MjIyLDEyNDpsbywxMjU6bW8sMTI2Ok9zfSx7NDE6MjI0LDc2OnRhLDg4OmJ1LDg5OlB1LDkwOjE3NywxMjQ6bG8sMTI1Om1vLDEyNjpPc30sezYwOlsxLDIyNV0sNzY6dGEsOTA6MjIyLDEyNDpsbywxMjU6bW8sMTI2Ok9zfSx7NjI6WzEsMjI2XSw3Njp0YSw5MDoyMjIsMTI0OmxvLDEyNTptbywxMjY6T3N9LHs2NDpbMSwyMjddLDc2OnRhLDkwOjIyMiwxMjQ6bG8sMTI1Om1vLDEyNjpPc30sezY2OlsxLDIyOF0sNzY6dGEsOTA6MjIyLDEyNDpsbywxMjU6bW8sMTI2Ok9zfSx7Njk6WzEsMjI5XX0sezczOlsxLDIzMF0sNzY6dGEsOTA6MjIyLDEyNDpsbywxMjU6bW8sMTI2Ok9zfSx7NzU6WzEsMjMxXSw3Njp0YSw5MDoyMjIsMTI0OmxvLDEyNTptbywxMjY6T3N9LHs0MToyMzIsNzY6dGEsODg6YnUsODk6UHUsOTA6MTc3LDEyNDpsbywxMjU6bW8sMTI2Ok9zfSx7NDI6WzEsMjMzXSw3Njp0YSw5MDoyMjIsMTI0OmxvLDEyNTptbywxMjY6T3N9LHs3Njp0YSw3ODpbMSwyMzRdLDgwOlsxLDIzNV0sOTA6MjIyLDEyNDpsbywxMjU6bW8sMTI2Ok9zfSx7NzY6dGEsNzg6WzEsMjM3XSw4MDpbMSwyMzZdLDkwOjIyMiwxMjQ6bG8sMTI1Om1vLDEyNjpPc30sezk6MjM4LDIwOk90LDIxOlZ0LDIzOnFlfSxpKF9uLFsyLDUyXSx7NTM6RmR9KSxpKGtpLFsyLDc4XSksaShraSxbMiw3N10pLHs3MTpbMSwyMzldLDc2OnRhLDkwOjIyMiwxMjQ6bG8sMTI1Om1vLDEyNjpPc30saShraSxbMiw4MF0pLGkoRnUsWzIsODJdKSx7NDE6MjQwLDc2OnRhLDg4OmJ1LDg5OlB1LDkwOjE3NywxMjQ6bG8sMTI1Om1vLDEyNjpPc30saShUMCxiLHsxNzoyNDF9KSxpKHpvLFsyLDEwM10pLGkodnQsWzIsNDNdKSx7NTI6MjQyLDUzOlksNTQ6NDYsNTY6NDcsNjk6cnQsOTc6bXQsMTEwOmN0LDExMzp5dCwxMTQ6c3QsMTE3Onh0LDExOTpodCwxMjE6NDgsMTIyOmR0LDEyMzpDdCwxMjQ6dHR9LHsyMjpsbCw2OTpWaSw5MjpLZSwxMDA6MjQzLDExMzprciwxMTU6MjQ0LDExNjoyNDUsMTE3Om5pLDExODplbywxMTk6RGMsMTIwOkp1fSx7MjI6bGwsNjk6VmksOTI6S2UsMTAwOjI1NCwxMTI6WzEsMjU1XSwxMTM6a3IsMTE1OjI0NCwxMTY6MjQ1LDExNzpuaSwxMTg6ZW8sMTE5OkRjLDEyMDpKdX0sezIyOmxsLDY5OlZpLDkyOktlLDEwMDoyNTYsMTEyOlsxLDI1N10sMTEzOmtyLDExNToyNDQsMTE2OjI0NSwxMTc6bmksMTE4OmVvLDExOTpEYywxMjA6SnV9LHsxMTM6WzEsMjU4XX0sezIyOmxsLDY5OlZpLDkyOktlLDEwMDoyNTksMTEzOmtyLDExNToyNDQsMTE2OjI0NSwxMTc6bmksMTE4OmVvLDExOTpEYywxMjA6SnV9LHs1MzpZLDU2OjI2MCw2OTpydCw5NzptdCwxMTA6Y3QsMTEzOnl0LDExNDpzdCwxMTc6eHQsMTE5Omh0LDEyMTo0OCwxMjI6ZHQsMTIzOkN0LDEyNDp0dH0saShxdCxbMiwxMDldKSx7ODg6WzEsMjYxXX0sezg4OlsxLDI2Ml0sMTA2OlsxLDI2M119LGkocXQsWzIsMTE3XSksaShxdCxbMiwxMTldLHsyMjpbMSwyNjRdfSksaShxdCxbMiwxMjBdKSxpKFl0LFsyLDU5XSksaShzZixbMiw4OF0pLGkoWXQsWzIsNjBdKSx7NjA6WzEsMjY1XSw3Njp0YSw5MDoyMjIsMTI0OmxvLDEyNTptbywxMjY6T3N9LGkoWXQsWzIsNjddKSxpKFl0LFsyLDYyXSksaShZdCxbMiw2M10pLGkoWXQsWzIsNjRdKSx7MTE3OlsxLDI2Nl19LGkoWXQsWzIsNjZdKSxpKFl0LFsyLDY4XSksezc1OlsxLDI2N10sNzY6dGEsOTA6MjIyLDEyNDpsbywxMjU6bW8sMTI2Ok9zfSxpKFl0LFsyLDcwXSksaShZdCxbMiw3MV0pLGkoWXQsWzIsNzNdKSxpKFl0LFsyLDcyXSksaShZdCxbMiw3NF0pLGkoVGwsWzIsNF0pLGkoWzIyLDUzLDY5LDk3LDExMCwxMTMsMTE0LDExNywxMTksMTIyLDEyMywxMjRdLFsyLDg2XSksezQyOlsxLDI2OF0sNzY6dGEsOTA6MjIyLDEyNDpsbywxMjU6bW8sMTI2Ok9zfSx7MTg6MTgsMTk6MTksMjA6RSwyMTpDLDIyOkEsMjM6UCwzMjoyNCwzMzoyNSwzNDoyNiwzNToyNywzNjoyOCwzNzoyOSwzODpGLDQzOlsxLDI2OV0sNDQ6MzEsNDU6aiw0NzpSLDQ5OkgsNTE6MzUsNTI6NDUsNTM6WSw1NDo0Niw1Njo0Nyw2OTpydCw5MjpKLDkzOml0LDk0OmZ0LDk1OlR0LDk2Omt0LDk3Om10LDExMDpjdCwxMTM6eXQsMTE0OnN0LDExNzp4dCwxMTk6aHQsMTIxOjQ4LDEyMjpkdCwxMjM6Q3QsMTI0OnR0LDEyOTpQdCwxMzA6cHQsMTMxOkZ0LDEzMjpYfSxpKGZuLFsyLDU2XSksaShxdCxbMiwxMjJdLHsxMTQ6UW99KSxpKGpmLFsyLDEzMV0sezExNjoyNzEsMjI6bGwsNjk6VmksOTI6S2UsMTEzOmtyLDExNzpuaSwxMTg6ZW8sMTE5OkRjLDEyMDpKdX0pLGkocmgsWzIsMTMzXSksaShyaCxbMiwxMzVdKSxpKHJoLFsyLDEzNl0pLGkocmgsWzIsMTM3XSksaShyaCxbMiwxMzhdKSxpKHJoLFsyLDEzOV0pLGkocmgsWzIsMTQwXSksaShyaCxbMiwxNDFdKSxpKHJoLFsyLDE0Ml0pLGkocXQsWzIsMTIzXSx7MTE0OlFvfSksezIyOlsxLDI3Ml19LGkocXQsWzIsMTI0XSx7MTE0OlFvfSksezIyOlsxLDI3M119LGkobmQsWzIsMTMwXSksaShxdCxbMiwxMDZdLHsxMTQ6UW99KSxpKHF0LFsyLDEwN10sezEyMToxMTksNTM6WSw2OTpydCw5NzptdCwxMTA6Y3QsMTEzOnl0LDExNDpzdCwxMTc6eHQsMTE5Omh0LDEyMjpkdCwxMjM6Q3QsMTI0OnR0fSksaShxdCxbMiwxMTFdKSxpKHF0LFsyLDExM10sezIyOlsxLDI3NF19KSxpKHF0LFsyLDExNF0pLHsxMDY6WzEsMjc1XX0sezYwOlsxLDI3Nl19LHs3MTpbMSwyNzddfSx7NzU6WzEsMjc4XX0sezk6Mjc5LDIwOk90LDIxOlZ0LDIzOnFlfSxpKHZ0LFsyLDQyXSksezIyOmxsLDY5OlZpLDkyOktlLDExMzprciwxMTU6MjgwLDExNjoyNDUsMTE3Om5pLDExODplbywxMTk6RGMsMTIwOkp1fSxpKHJoLFsyLDEzNF0pLHsyNjpUZSw1MzpXbiw2OTpBZSw5NzpuZSwxMDk6MjgxLDExMzprZSwxMTQ6VmUsMTE3OkVlLDExOTpIZSwxMjI6Q2UsMTIzOiRlLDEyNDp5ZSwxMjg6OTR9LHsyNjpUZSw1MzpXbiw2OTpBZSw5NzpuZSwxMDk6MjgyLDExMzprZSwxMTQ6VmUsMTE3OkVlLDExOTpIZSwxMjI6Q2UsMTIzOiRlLDEyNDp5ZSwxMjg6OTR9LHsxMDY6WzEsMjgzXX0saShxdCxbMiwxMjFdKSxpKFl0LFsyLDYxXSksezQxOjI4NCw3Njp0YSw4ODpidSw4OTpQdSw5MDoxNzcsMTI0OmxvLDEyNTptbywxMjY6T3N9LGkoWXQsWzIsNjldKSxpKFQwLGIsezE3OjI4NX0pLGkoamYsWzIsMTMyXSx7MTE2OjI3MSwyMjpsbCw2OTpWaSw5MjpLZSwxMTM6a3IsMTE3Om5pLDExODplbywxMTk6RGMsMTIwOkp1fSksaShxdCxbMiwxMjddLHsxMjg6MTczLDIyOlsxLDI4Nl0sMjY6VGUsNTM6V24sNjk6QWUsOTc6bmUsMTEzOmtlLDExNDpWZSwxMTc6RWUsMTE5OkhlLDEyMjpDZSwxMjM6JGUsMTI0OnllfSksaShxdCxbMiwxMjhdLHsxMjg6MTczLDIyOlsxLDI4N10sMjY6VGUsNTM6V24sNjk6QWUsOTc6bmUsMTEzOmtlLDExNDpWZSwxMTc6RWUsMTE5OkhlLDEyMjpDZSwxMjM6JGUsMTI0OnllfSksaShxdCxbMiwxMTVdKSx7NDI6WzEsMjg4XSw3Njp0YSw5MDoyMjIsMTI0OmxvLDEyNTptbywxMjY6T3N9LHsxODoxOCwxOToxOSwyMDpFLDIxOkMsMjI6QSwyMzpQLDMyOjI0LDMzOjI1LDM0OjI2LDM1OjI3LDM2OjI4LDM3OjI5LDM4OkYsNDM6WzEsMjg5XSw0NDozMSw0NTpqLDQ3OlIsNDk6SCw1MTozNSw1Mjo0NSw1MzpZLDU0OjQ2LDU2OjQ3LDY5OnJ0LDkyOkosOTM6aXQsOTQ6ZnQsOTU6VHQsOTY6a3QsOTc6bXQsMTEwOmN0LDExMzp5dCwxMTQ6c3QsMTE3Onh0LDExOTpodCwxMjE6NDgsMTIyOmR0LDEyMzpDdCwxMjQ6dHQsMTI5OlB0LDEzMDpwdCwxMzE6RnQsMTMyOlh9LHsyMjpsbCw2OTpWaSw5MjpLZSwxMDA6MjkwLDExMzprciwxMTU6MjQ0LDExNjoyNDUsMTE3Om5pLDExODplbywxMTk6RGMsMTIwOkp1fSx7MjI6bGwsNjk6VmksOTI6S2UsMTAwOjI5MSwxMTM6a3IsMTE1OjI0NCwxMTY6MjQ1LDExNzpuaSwxMTg6ZW8sMTE5OkRjLDEyMDpKdX0saShZdCxbMiw2NV0pLGkodnQsWzIsNDFdKSxpKHF0LFsyLDEyNV0sezExNDpRb30pLGkocXQsWzIsMTI2XSx7MTE0OlFvfSldLGRlZmF1bHRBY3Rpb25zOnsyOlsyLDFdLDk6WzIsNV0sMTA6WzIsMl0sMTIyOlsyLDddfSxwYXJzZUVycm9yOmZ1bmN0aW9uKG9zLEFzKXtpZihBcy5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKG9zKTtlbHNle3ZhciBtYT1uZXcgRXJyb3Iob3MpO3Rocm93IG1hLmhhc2g9QXMsbWF9fSxwYXJzZTpmdW5jdGlvbihvcyl7dmFyIEFzPXRoaXMsbWE9WzBdLHZpPVtdLFFjPVtudWxsXSxtZT1bXSxiZz10aGlzLnRhYmxlLE9lPSIiLGFmPTAsZms9MCxrMz0yLGdtPTEsQTk9bWUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksYXU9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSx2Zz17eXk6e319O2Zvcih2YXIgZGsgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxkaykmJih2Zy55eVtka109dGhpcy55eVtka10pO2F1LnNldElucHV0KG9zLHZnLnl5KSx2Zy55eS5sZXhlcj1hdSx2Zy55eS5wYXJzZXI9dGhpcyx0eXBlb2YgYXUueXlsbG9jPiJ1IiYmKGF1Lnl5bGxvYz17fSk7dmFyIHZwPWF1Lnl5bGxvYzttZS5wdXNoKHZwKTt2YXIgTDk9YXUub3B0aW9ucyYmYXUub3B0aW9ucy5yYW5nZXM7dHlwZW9mIHZnLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPXZnLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIE05KCl7dmFyIG5vO3JldHVybiBubz12aS5wb3AoKXx8YXUubGV4KCl8fGdtLHR5cGVvZiBubyE9Im51bWJlciImJihubyBpbnN0YW5jZW9mIEFycmF5JiYodmk9bm8sbm89dmkucG9wKCkpLG5vPUFzLnN5bWJvbHNfW25vXXx8bm8pLG5vfWZvcih2YXIgJGYsb3YsQmQsRTMsY3Y9e30sdXYsd2csUjUsb3U7Oyl7aWYob3Y9bWFbbWEubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbb3ZdP0JkPXRoaXMuZGVmYXVsdEFjdGlvbnNbb3ZdOigoJGY9PT1udWxsfHx0eXBlb2YgJGY+InUiKSYmKCRmPU05KCkpLEJkPWJnW292XSYmYmdbb3ZdWyRmXSksdHlwZW9mIEJkPiJ1Inx8IUJkLmxlbmd0aHx8IUJkWzBdKXt2YXIgajU9IiI7b3U9W107Zm9yKHV2IGluIGJnW292XSl0aGlzLnRlcm1pbmFsc19bdXZdJiZ1dj5rMyYmb3UucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW3V2XSsiJyIpO2F1LnNob3dQb3NpdGlvbj9qNT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhhZisxKStgOgpgK2F1LnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArb3Uuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1skZl18fCRmKSsiJyI6ajU9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYWYrMSkrIjogVW5leHBlY3RlZCAiKygkZj09Z20/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bJGZdfHwkZikrIiciKSx0aGlzLnBhcnNlRXJyb3IoajUse3RleHQ6YXUubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfWyRmXXx8JGYsbGluZTphdS55eWxpbmVubyxsb2M6dnAsZXhwZWN0ZWQ6b3V9KX1pZihCZFswXWluc3RhbmNlb2YgQXJyYXkmJkJkLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrb3YrIiwgdG9rZW46ICIrJGYpO3N3aXRjaChCZFswXSl7Y2FzZSAxOm1hLnB1c2goJGYpLFFjLnB1c2goYXUueXl0ZXh0KSxtZS5wdXNoKGF1Lnl5bGxvYyksbWEucHVzaChCZFsxXSksJGY9bnVsbCxmaz1hdS55eWxlbmcsT2U9YXUueXl0ZXh0LGFmPWF1Lnl5bGluZW5vLHZwPWF1Lnl5bGxvYzticmVhaztjYXNlIDI6aWYod2c9dGhpcy5wcm9kdWN0aW9uc19bQmRbMV1dWzFdLGN2LiQ9UWNbUWMubGVuZ3RoLXdnXSxjdi5fJD17Zmlyc3RfbGluZTptZVttZS5sZW5ndGgtKHdnfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6bWVbbWUubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46bWVbbWUubGVuZ3RoLSh3Z3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjptZVttZS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LEw5JiYoY3YuXyQucmFuZ2U9W21lW21lLmxlbmd0aC0od2d8fDEpXS5yYW5nZVswXSxtZVttZS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxFMz10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoY3YsW09lLGZrLGFmLHZnLnl5LEJkWzFdLFFjLG1lXS5jb25jYXQoQTkpKSx0eXBlb2YgRTM8InUiKXJldHVybiBFMzt3ZyYmKG1hPW1hLnNsaWNlKDAsLTEqd2cqMiksUWM9UWMuc2xpY2UoMCwtMSp3ZyksbWU9bWUuc2xpY2UoMCwtMSp3ZykpLG1hLnB1c2godGhpcy5wcm9kdWN0aW9uc19bQmRbMV1dWzBdKSxRYy5wdXNoKGN2LiQpLG1lLnB1c2goY3YuXyQpLFI1PWJnW21hW21hLmxlbmd0aC0yXV1bbWFbbWEubGVuZ3RoLTFdXSxtYS5wdXNoKFI1KTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sUzk9ZnVuY3Rpb24oKXt2YXIgemI9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24oQXMsbWEpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoQXMsbWEpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKEFzKX0sc2V0SW5wdXQ6ZnVuY3Rpb24ob3MsQXMpe3JldHVybiB0aGlzLnl5PUFzfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1vcyx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgb3M9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPW9zLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1vcyx0aGlzLm1hdGNoZWQrPW9zO3ZhciBBcz1vcy5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIEFzPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxvc30sdW5wdXQ6ZnVuY3Rpb24ob3Mpe3ZhciBBcz1vcy5sZW5ndGgsbWE9b3Muc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1vcyt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtQXMpLHRoaXMub2Zmc2V0LT1Bczt2YXIgdmk9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksbWEubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1tYS5sZW5ndGgtMSk7dmFyIFFjPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjptYT8obWEubGVuZ3RoPT09dmkubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKSt2aVt2aS5sZW5ndGgtbWEubGVuZ3RoXS5sZW5ndGgtbWFbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1Bc30sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtRY1swXSxRY1swXSt0aGlzLnl5bGVuZy1Bc10pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKG9zKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2Uob3MpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIG9zPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4ob3MubGVuZ3RoPjIwPyIuLi4iOiIiKStvcy5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciBvcz10aGlzLm1hdGNoO3JldHVybiBvcy5sZW5ndGg8MjAmJihvcys9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtb3MubGVuZ3RoKSksKG9zLnN1YnN0cigwLDIwKSsob3MubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBvcz10aGlzLnBhc3RJbnB1dCgpLEFzPW5ldyBBcnJheShvcy5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBvcyt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArQXMrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKG9zLEFzKXt2YXIgbWEsdmksUWM7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKFFjPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKFFjLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLHZpPW9zWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSx2aSYmKHRoaXMueXlsaW5lbm8rPXZpLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnZpP3ZpW3ZpLmxlbmd0aC0xXS5sZW5ndGgtdmlbdmkubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rb3NbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9b3NbMF0sdGhpcy5tYXRjaCs9b3NbMF0sdGhpcy5tYXRjaGVzPW9zLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKG9zWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1vc1swXSxtYT10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxBcyx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxtYSlyZXR1cm4gbWE7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIG1lIGluIFFjKXRoaXNbbWVdPVFjW21lXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBvcyxBcyxtYSx2aTt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBRYz10aGlzLl9jdXJyZW50UnVsZXMoKSxtZT0wO21lPFFjLmxlbmd0aDttZSsrKWlmKG1hPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbUWNbbWVdXSksbWEmJighQXN8fG1hWzBdLmxlbmd0aD5Bc1swXS5sZW5ndGgpKXtpZihBcz1tYSx2aT1tZSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihvcz10aGlzLnRlc3RfbWF0Y2gobWEsUWNbbWVdKSxvcyE9PSExKXJldHVybiBvcztpZih0aGlzLl9iYWNrdHJhY2spe0FzPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIEFzPyhvcz10aGlzLnRlc3RfbWF0Y2goQXMsUWNbdmldKSxvcyE9PSExP29zOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgQXM9dGhpcy5uZXh0KCk7cmV0dXJuIEFzfHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbihBcyl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKEFzKX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgQXM9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gQXM+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbihBcyl7cmV0dXJuIEFzPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoQXN8fDApLEFzPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbQXNdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKEFzKXt0aGlzLmJlZ2luKEFzKX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6e30scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihBcyxtYSx2aSxRYyl7c3dpdGNoKHZpKXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oIm9wZW5fZGlyZWN0aXZlIiksMTI7Y2FzZSAxOnJldHVybiB0aGlzLmJlZ2luKCJ0eXBlX2RpcmVjdGl2ZSIpLDEzO2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImFyZ19kaXJlY3RpdmUiKSwxMDtjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksMTU7Y2FzZSA0OnJldHVybiAxNDtjYXNlIDU6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDQ1O2Nhc2UgNjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2Nhc2UgNzpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksNDc7Y2FzZSA4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7Y2FzZSA5OnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDEwOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDExOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDEyOnRoaXMuYmVnaW4oImNhbGxiYWNrbmFtZSIpO2JyZWFrO2Nhc2UgMTM6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTQ6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImNhbGxiYWNrYXJncyIpO2JyZWFrO2Nhc2UgMTU6cmV0dXJuIDEwMztjYXNlIDE2OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE3OnJldHVybiAxMDQ7Y2FzZSAxODpyZXR1cm4iTURfU1RSIjtjYXNlIDE5OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDIwOnRoaXMuYmVnaW4oIm1kX3N0cmluZyIpO2JyZWFrO2Nhc2UgMjE6cmV0dXJuIlNUUiI7Y2FzZSAyMjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyMzp0aGlzLnB1c2hTdGF0ZSgic3RyaW5nIik7YnJlYWs7Y2FzZSAyNDpyZXR1cm4gOTI7Y2FzZSAyNTpyZXR1cm4gMTEwO2Nhc2UgMjY6cmV0dXJuIDkzO2Nhc2UgMjc6cmV0dXJuIDExMjtjYXNlIDI4OnJldHVybiA5NDtjYXNlIDI5OnJldHVybiA5NTtjYXNlIDMwOnJldHVybiAxMDU7Y2FzZSAzMTp0aGlzLmJlZ2luKCJjbGljayIpO2JyZWFrO2Nhc2UgMzI6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzM6cmV0dXJuIDk2O2Nhc2UgMzQ6cmV0dXJuIEFzLmxleC5maXJzdEdyYXBoKCkmJnRoaXMuYmVnaW4oImRpciIpLDI0O2Nhc2UgMzU6cmV0dXJuIEFzLmxleC5maXJzdEdyYXBoKCkmJnRoaXMuYmVnaW4oImRpciIpLDI0O2Nhc2UgMzY6cmV0dXJuIEFzLmxleC5maXJzdEdyYXBoKCkmJnRoaXMuYmVnaW4oImRpciIpLDI0O2Nhc2UgMzc6cmV0dXJuIDM4O2Nhc2UgMzg6cmV0dXJuIDQzO2Nhc2UgMzk6cmV0dXJuIDEwNjtjYXNlIDQwOnJldHVybiAxMDY7Y2FzZSA0MTpyZXR1cm4gMTA2O2Nhc2UgNDI6cmV0dXJuIDEwNjtjYXNlIDQzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMjU7Y2FzZSA0NDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDI2O2Nhc2UgNDU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwyNjtjYXNlIDQ2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMjY7Y2FzZSA0NzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDI2O2Nhc2UgNDg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwyNjtjYXNlIDQ5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMjY7Y2FzZSA1MDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDI2O2Nhc2UgNTE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwyNjtjYXNlIDUyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMjY7Y2FzZSA1MzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDI2O2Nhc2UgNTQ6cmV0dXJuIDEyOTtjYXNlIDU1OnJldHVybiAxMzA7Y2FzZSA1NjpyZXR1cm4gMTMxO2Nhc2UgNTc6cmV0dXJuIDEzMjtjYXNlIDU4OnJldHVybiAxMTM7Y2FzZSA1OTpyZXR1cm4gMTE5O2Nhc2UgNjA6cmV0dXJuIDU1O2Nhc2UgNjE6cmV0dXJuIDY5O2Nhc2UgNjI6cmV0dXJuIDUzO2Nhc2UgNjM6cmV0dXJuIDIwO2Nhc2UgNjQ6cmV0dXJuIDExNDtjYXNlIDY1OnJldHVybiAxMjM7Y2FzZSA2NjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDg2O2Nhc2UgNjc6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJlZGdlVGV4dCIpLDg0O2Nhc2UgNjg6cmV0dXJuIDEyNztjYXNlIDY5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksODY7Y2FzZSA3MDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRoaWNrRWRnZVRleHQiKSw4NDtjYXNlIDcxOnJldHVybiAxMjc7Y2FzZSA3MjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDg2O2Nhc2UgNzM6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJkb3R0ZWRFZGdlVGV4dCIpLDg0O2Nhc2UgNzQ6cmV0dXJuIDEyNztjYXNlIDc1OnJldHVybiA4NjtjYXNlIDc2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNjI7Y2FzZSA3NzpyZXR1cm4iVEVYVCI7Y2FzZSA3ODpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImVsbGlwc2VUZXh0IiksNjE7Y2FzZSA3OTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDY0O2Nhc2UgODA6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0ZXh0IiksNjM7Y2FzZSA4MTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDY2O2Nhc2UgODI6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0ZXh0IiksNjU7Y2FzZSA4MzpyZXR1cm4gNjc7Y2FzZSA4NDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw3NjtjYXNlIDg1OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNzM7Y2FzZSA4NjpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw3MjtjYXNlIDg3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNTg7Y2FzZSA4ODpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw1NztjYXNlIDg5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNzg7Y2FzZSA5MDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDgwO2Nhc2UgOTE6cmV0dXJuIDEyNTtjYXNlIDkyOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidHJhcFRleHQiKSw3NztjYXNlIDkzOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidHJhcFRleHQiKSw3OTtjYXNlIDk0OnJldHVybiAxMjY7Y2FzZSA5NTpyZXR1cm4gNzY7Y2FzZSA5NjpyZXR1cm4gOTg7Y2FzZSA5NzpyZXR1cm4iU0VQIjtjYXNlIDk4OnJldHVybiA5NztjYXNlIDk5OnJldHVybiAxMjM7Y2FzZSAxMDA6cmV0dXJuIDExOTtjYXNlIDEwMTpyZXR1cm4gNTM7Y2FzZSAxMDI6cmV0dXJuIDExNztjYXNlIDEwMzpyZXR1cm4gMTIyO2Nhc2UgMTA0OnJldHVybiAxMjQ7Y2FzZSAxMDU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw3MTtjYXNlIDEwNjpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw3MTtjYXNlIDEwNzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDYwO2Nhc2UgMTA4OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGV4dCIpLDU5O2Nhc2UgMTA5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNDI7Y2FzZSAxMTA6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0ZXh0IiksNDA7Y2FzZSAxMTE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw3NTtjYXNlIDExMjpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw3NDtjYXNlIDExMzpyZXR1cm4iVEVYVCI7Y2FzZSAxMTQ6cmV0dXJuIlFVT1RFIjtjYXNlIDExNTpyZXR1cm4gMjE7Y2FzZSAxMTY6cmV0dXJuIDIyO2Nhc2UgMTE3OnJldHVybiAyM319LHJ1bGVzOlsvXig/OiUlXHspLywvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS8sL14oPzo6KS8sL14oPzpcfSUlKS8sL14oPzooKD86KD8hXH0lJSkufFxuKSopKS8sL14oPzphY2NUaXRsZVxzKjpccyopLywvXig/Oig/IVxufHwpKlteXG5dKikvLC9eKD86YWNjRGVzY3Jccyo6XHMqKS8sL14oPzooPyFcbnx8KSpbXlxuXSopLywvXig/OmFjY0Rlc2NyXHMqXHtccyopLywvXig/OltcfV0pLywvXig/OlteXH1dKikvLC9eKD86Y2FsbFtcc10rKS8sL14oPzpcKFtcc10qXCkpLywvXig/OlwoKS8sL14oPzpbXihdKikvLC9eKD86XCkpLywvXig/OlteKV0qKS8sL14oPzpbXmAiXSspLywvXig/OltgXVsiXSkvLC9eKD86WyJdW2BdKS8sL14oPzpbXiJdKykvLC9eKD86WyJdKS8sL14oPzpbIl0pLywvXig/OnN0eWxlXGIpLywvXig/OmRlZmF1bHRcYikvLC9eKD86bGlua1N0eWxlXGIpLywvXig/OmludGVycG9sYXRlXGIpLywvXig/OmNsYXNzRGVmXGIpLywvXig/OmNsYXNzXGIpLywvXig/OmhyZWZbXHNdKS8sL14oPzpjbGlja1tcc10rKS8sL14oPzpbXHNcbl0pLywvXig/OlteXHNcbl0qKS8sL14oPzpmbG93Y2hhcnQtZWxrXGIpLywvXig/OmdyYXBoXGIpLywvXig/OmZsb3djaGFydFxiKS8sL14oPzpzdWJncmFwaFxiKS8sL14oPzplbmRcYlxzKikvLC9eKD86X3NlbGZcYikvLC9eKD86X2JsYW5rXGIpLywvXig/Ol9wYXJlbnRcYikvLC9eKD86X3RvcFxiKS8sL14oPzooXHI/XG4pKlxzKlxuKS8sL14oPzpccypMUlxiKS8sL14oPzpccypSTFxiKS8sL14oPzpccypUQlxiKS8sL14oPzpccypCVFxiKS8sL14oPzpccypURFxiKS8sL14oPzpccypCUlxiKS8sL14oPzpccyo8KS8sL14oPzpccyo+KS8sL14oPzpccypcXikvLC9eKD86XHMqdlxiKS8sL14oPzouKmRpcmVjdGlvblxzK1RCW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK0JUW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK1JMW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK0xSW15cbl0qKS8sL14oPzpbMC05XSspLywvXig/OiMpLywvXig/Ojo6OikvLC9eKD86OikvLC9eKD86JikvLC9eKD86OykvLC9eKD86LCkvLC9eKD86XCopLywvXig/OlxzKlt4bzxdPy0tK1steG8+XVxzKikvLC9eKD86XHMqW3hvPF0/LS1ccyopLywvXig/OlteLV18LSg/IS0pKykvLC9eKD86XHMqW3hvPF0/PT0rWz14bz5dXHMqKS8sL14oPzpccypbeG88XT89PVxzKikvLC9eKD86W149XXw9KD8hKSkvLC9eKD86XHMqW3hvPF0/LT9cListW3hvPl0/XHMqKS8sL14oPzpccypbeG88XT8tXC5ccyopLywvXig/OlteXC5dfFwuKD8hKSkvLC9eKD86XHMqfn5bXH5dK1xzKikvLC9eKD86Wy0vXCldW1wpXSkvLC9eKD86W15cKFwpXFtcXVx7XH1dfCg/IVwpKykpLywvXig/OlwoLSkvLC9eKD86XF1cKSkvLC9eKD86XChcWykvLC9eKD86XF1cXSkvLC9eKD86XFtcWykvLC9eKD86XFtcfCkvLC9eKD86PikvLC9eKD86XClcXSkvLC9eKD86XFtcKCkvLC9eKD86XClcKVwpKS8sL14oPzpcKFwoXCgpLywvXig/OltcXCg/PVxdKV1bXF1dKS8sL14oPzpcLyg/PVxdKVxdKS8sL14oPzpcLyg/IVxdKXxcXCg/IVxdKXxbXlxcXFtcXVwoXClce1x9XC9dKykvLC9eKD86XFtcLykvLC9eKD86XFtcXCkvLC9eKD86PCkvLC9eKD86PikvLC9eKD86XF4pLywvXig/OlxcXHwpLywvXig/OnZcYikvLC9eKD86XCopLywvXig/OiMpLywvXig/OiYpLywvXig/OihbQS1aYS16MC05ISJcIyQlJicqK1wuYD9cXF9cL118LSg/PVteXD5cLVwuXSl8KD8hKSkrKS8sL14oPzotKS8sL14oPzpbXHUwMEFBXHUwMEI1XHUwMEJBXHUwMEMwLVx1MDBENlx1MDBEOC1cdTAwRjZdfFtcdTAwRjgtXHUwMkMxXHUwMkM2LVx1MDJEMVx1MDJFMC1cdTAyRTRcdTAyRUNcdTAyRUVcdTAzNzAtXHUwMzc0XHUwMzc2XHUwMzc3XXxbXHUwMzdBLVx1MDM3RFx1MDM4Nlx1MDM4OC1cdTAzOEFcdTAzOENcdTAzOEUtXHUwM0ExXHUwM0EzLVx1MDNGNV18W1x1MDNGNy1cdTA0ODFcdTA0OEEtXHUwNTI3XHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdcdTA1RDAtXHUwNUVBXXxbXHUwNUYwLVx1MDVGMlx1MDYyMC1cdTA2NEFcdTA2NkVcdTA2NkZcdTA2NzEtXHUwNkQzXHUwNkQ1XHUwNkU1XHUwNkU2XHUwNkVFXXxbXHUwNkVGXHUwNkZBLVx1MDZGQ1x1MDZGRlx1MDcxMFx1MDcxMi1cdTA3MkZcdTA3NEQtXHUwN0E1XHUwN0IxXHUwN0NBLVx1MDdFQV18W1x1MDdGNFx1MDdGNVx1MDdGQVx1MDgwMC1cdTA4MTVcdTA4MUFcdTA4MjRcdTA4MjhcdTA4NDAtXHUwODU4XHUwOEEwXXxbXHUwOEEyLVx1MDhBQ1x1MDkwNC1cdTA5MzlcdTA5M0RcdTA5NTBcdTA5NTgtXHUwOTYxXHUwOTcxLVx1MDk3N118W1x1MDk3OS1cdTA5N0ZcdTA5ODUtXHUwOThDXHUwOThGXHUwOTkwXHUwOTkzLVx1MDlBOFx1MDlBQS1cdTA5QjBcdTA5QjJdfFtcdTA5QjYtXHUwOUI5XHUwOUJEXHUwOUNFXHUwOURDXHUwOUREXHUwOURGLVx1MDlFMVx1MDlGMFx1MDlGMVx1MEEwNS1cdTBBMEFdfFtcdTBBMEZcdTBBMTBcdTBBMTMtXHUwQTI4XHUwQTJBLVx1MEEzMFx1MEEzMlx1MEEzM1x1MEEzNVx1MEEzNlx1MEEzOFx1MEEzOV18W1x1MEE1OS1cdTBBNUNcdTBBNUVcdTBBNzItXHUwQTc0XHUwQTg1LVx1MEE4RFx1MEE4Ri1cdTBBOTFcdTBBOTMtXHUwQUE4XXxbXHUwQUFBLVx1MEFCMFx1MEFCMlx1MEFCM1x1MEFCNS1cdTBBQjlcdTBBQkRcdTBBRDBcdTBBRTBcdTBBRTFcdTBCMDUtXHUwQjBDXXxbXHUwQjBGXHUwQjEwXHUwQjEzLVx1MEIyOFx1MEIyQS1cdTBCMzBcdTBCMzJcdTBCMzNcdTBCMzUtXHUwQjM5XHUwQjNEXHUwQjVDXXxbXHUwQjVEXHUwQjVGLVx1MEI2MVx1MEI3MVx1MEI4M1x1MEI4NS1cdTBCOEFcdTBCOEUtXHUwQjkwXHUwQjkyLVx1MEI5NVx1MEI5OV18W1x1MEI5QVx1MEI5Q1x1MEI5RVx1MEI5Rlx1MEJBM1x1MEJBNFx1MEJBOC1cdTBCQUFcdTBCQUUtXHUwQkI5XHUwQkQwXXxbXHUwQzA1LVx1MEMwQ1x1MEMwRS1cdTBDMTBcdTBDMTItXHUwQzI4XHUwQzJBLVx1MEMzM1x1MEMzNS1cdTBDMzlcdTBDM0RdfFtcdTBDNThcdTBDNTlcdTBDNjBcdTBDNjFcdTBDODUtXHUwQzhDXHUwQzhFLVx1MEM5MFx1MEM5Mi1cdTBDQThcdTBDQUEtXHUwQ0IzXXxbXHUwQ0I1LVx1MENCOVx1MENCRFx1MENERVx1MENFMFx1MENFMVx1MENGMVx1MENGMlx1MEQwNS1cdTBEMENcdTBEMEUtXHUwRDEwXXxbXHUwRDEyLVx1MEQzQVx1MEQzRFx1MEQ0RVx1MEQ2MFx1MEQ2MVx1MEQ3QS1cdTBEN0ZcdTBEODUtXHUwRDk2XHUwRDlBLVx1MERCMV18W1x1MERCMy1cdTBEQkJcdTBEQkRcdTBEQzAtXHUwREM2XHUwRTAxLVx1MEUzMFx1MEUzMlx1MEUzM1x1MEU0MC1cdTBFNDZcdTBFODFdfFtcdTBFODJcdTBFODRcdTBFODdcdTBFODhcdTBFOEFcdTBFOERcdTBFOTQtXHUwRTk3XHUwRTk5LVx1MEU5Rlx1MEVBMS1cdTBFQTNdfFtcdTBFQTVcdTBFQTdcdTBFQUFcdTBFQUJcdTBFQUQtXHUwRUIwXHUwRUIyXHUwRUIzXHUwRUJEXHUwRUMwLVx1MEVDNFx1MEVDNl18W1x1MEVEQy1cdTBFREZcdTBGMDBcdTBGNDAtXHUwRjQ3XHUwRjQ5LVx1MEY2Q1x1MEY4OC1cdTBGOENcdTEwMDAtXHUxMDJBXXxbXHUxMDNGXHUxMDUwLVx1MTA1NVx1MTA1QS1cdTEwNURcdTEwNjFcdTEwNjVcdTEwNjZcdTEwNkUtXHUxMDcwXHUxMDc1LVx1MTA4MV18W1x1MTA4RVx1MTBBMC1cdTEwQzVcdTEwQzdcdTEwQ0RcdTEwRDAtXHUxMEZBXHUxMEZDLVx1MTI0OFx1MTI0QS1cdTEyNERdfFtcdTEyNTAtXHUxMjU2XHUxMjU4XHUxMjVBLVx1MTI1RFx1MTI2MC1cdTEyODhcdTEyOEEtXHUxMjhEXHUxMjkwLVx1MTJCMF18W1x1MTJCMi1cdTEyQjVcdTEyQjgtXHUxMkJFXHUxMkMwXHUxMkMyLVx1MTJDNVx1MTJDOC1cdTEyRDZcdTEyRDgtXHUxMzEwXXxbXHUxMzEyLVx1MTMxNVx1MTMxOC1cdTEzNUFcdTEzODAtXHUxMzhGXHUxM0EwLVx1MTNGNFx1MTQwMS1cdTE2NkNdfFtcdTE2NkYtXHUxNjdGXHUxNjgxLVx1MTY5QVx1MTZBMC1cdTE2RUFcdTE3MDAtXHUxNzBDXHUxNzBFLVx1MTcxMV18W1x1MTcyMC1cdTE3MzFcdTE3NDAtXHUxNzUxXHUxNzYwLVx1MTc2Q1x1MTc2RS1cdTE3NzBcdTE3ODAtXHUxN0IzXHUxN0Q3XXxbXHUxN0RDXHUxODIwLVx1MTg3N1x1MTg4MC1cdTE4QThcdTE4QUFcdTE4QjAtXHUxOEY1XHUxOTAwLVx1MTkxQ118W1x1MTk1MC1cdTE5NkRcdTE5NzAtXHUxOTc0XHUxOTgwLVx1MTlBQlx1MTlDMS1cdTE5QzdcdTFBMDAtXHUxQTE2XXxbXHUxQTIwLVx1MUE1NFx1MUFBN1x1MUIwNS1cdTFCMzNcdTFCNDUtXHUxQjRCXHUxQjgzLVx1MUJBMFx1MUJBRVx1MUJBRl18W1x1MUJCQS1cdTFCRTVcdTFDMDAtXHUxQzIzXHUxQzRELVx1MUM0Rlx1MUM1QS1cdTFDN0RcdTFDRTktXHUxQ0VDXXxbXHUxQ0VFLVx1MUNGMVx1MUNGNVx1MUNGNlx1MUQwMC1cdTFEQkZcdTFFMDAtXHUxRjE1XHUxRjE4LVx1MUYxRF18W1x1MUYyMC1cdTFGNDVcdTFGNDgtXHUxRjREXHUxRjUwLVx1MUY1N1x1MUY1OVx1MUY1Qlx1MUY1RFx1MUY1Ri1cdTFGN0RdfFtcdTFGODAtXHUxRkI0XHUxRkI2LVx1MUZCQ1x1MUZCRVx1MUZDMi1cdTFGQzRcdTFGQzYtXHUxRkNDXHUxRkQwLVx1MUZEM118W1x1MUZENi1cdTFGREJcdTFGRTAtXHUxRkVDXHUxRkYyLVx1MUZGNFx1MUZGNi1cdTFGRkNcdTIwNzFcdTIwN0ZdfFtcdTIwOTAtXHUyMDlDXHUyMTAyXHUyMTA3XHUyMTBBLVx1MjExM1x1MjExNVx1MjExOS1cdTIxMURcdTIxMjRcdTIxMjZcdTIxMjhdfFtcdTIxMkEtXHUyMTJEXHUyMTJGLVx1MjEzOVx1MjEzQy1cdTIxM0ZcdTIxNDUtXHUyMTQ5XHUyMTRFXHUyMTgzXHUyMTg0XXxbXHUyQzAwLVx1MkMyRVx1MkMzMC1cdTJDNUVcdTJDNjAtXHUyQ0U0XHUyQ0VCLVx1MkNFRVx1MkNGMlx1MkNGM118W1x1MkQwMC1cdTJEMjVcdTJEMjdcdTJEMkRcdTJEMzAtXHUyRDY3XHUyRDZGXHUyRDgwLVx1MkQ5Nlx1MkRBMC1cdTJEQTZdfFtcdTJEQTgtXHUyREFFXHUyREIwLVx1MkRCNlx1MkRCOC1cdTJEQkVcdTJEQzAtXHUyREM2XHUyREM4LVx1MkRDRV18W1x1MkREMC1cdTJERDZcdTJERDgtXHUyRERFXHUyRTJGXHUzMDA1XHUzMDA2XHUzMDMxLVx1MzAzNVx1MzAzQlx1MzAzQ118W1x1MzA0MS1cdTMwOTZcdTMwOUQtXHUzMDlGXHUzMEExLVx1MzBGQVx1MzBGQy1cdTMwRkZcdTMxMDUtXHUzMTJEXXxbXHUzMTMxLVx1MzE4RVx1MzFBMC1cdTMxQkFcdTMxRjAtXHUzMUZGXHUzNDAwLVx1NERCNVx1NEUwMC1cdTlGQ0NdfFtcdUEwMDAtXHVBNDhDXHVBNEQwLVx1QTRGRFx1QTUwMC1cdUE2MENcdUE2MTAtXHVBNjFGXHVBNjJBXHVBNjJCXXxbXHVBNjQwLVx1QTY2RVx1QTY3Ri1cdUE2OTdcdUE2QTAtXHVBNkU1XHVBNzE3LVx1QTcxRlx1QTcyMi1cdUE3ODhdfFtcdUE3OEItXHVBNzhFXHVBNzkwLVx1QTc5M1x1QTdBMC1cdUE3QUFcdUE3RjgtXHVBODAxXHVBODAzLVx1QTgwNV18W1x1QTgwNy1cdUE4MEFcdUE4MEMtXHVBODIyXHVBODQwLVx1QTg3M1x1QTg4Mi1cdUE4QjNcdUE4RjItXHVBOEY3XHVBOEZCXXxbXHVBOTBBLVx1QTkyNVx1QTkzMC1cdUE5NDZcdUE5NjAtXHVBOTdDXHVBOTg0LVx1QTlCMlx1QTlDRlx1QUEwMC1cdUFBMjhdfFtcdUFBNDAtXHVBQTQyXHVBQTQ0LVx1QUE0Qlx1QUE2MC1cdUFBNzZcdUFBN0FcdUFBODAtXHVBQUFGXHVBQUIxXHVBQUI1XXxbXHVBQUI2XHVBQUI5LVx1QUFCRFx1QUFDMFx1QUFDMlx1QUFEQi1cdUFBRERcdUFBRTAtXHVBQUVBXHVBQUYyLVx1QUFGNF18W1x1QUIwMS1cdUFCMDZcdUFCMDktXHVBQjBFXHVBQjExLVx1QUIxNlx1QUIyMC1cdUFCMjZcdUFCMjgtXHVBQjJFXXxbXHVBQkMwLVx1QUJFMlx1QUMwMC1cdUQ3QTNcdUQ3QjAtXHVEN0M2XHVEN0NCLVx1RDdGQlx1RjkwMC1cdUZBNkRdfFtcdUZBNzAtXHVGQUQ5XHVGQjAwLVx1RkIwNlx1RkIxMy1cdUZCMTdcdUZCMURcdUZCMUYtXHVGQjI4XHVGQjJBLVx1RkIzNl18W1x1RkIzOC1cdUZCM0NcdUZCM0VcdUZCNDBcdUZCNDFcdUZCNDNcdUZCNDRcdUZCNDYtXHVGQkIxXHVGQkQzLVx1RkQzRF18W1x1RkQ1MC1cdUZEOEZcdUZEOTItXHVGREM3XHVGREYwLVx1RkRGQlx1RkU3MC1cdUZFNzRcdUZFNzYtXHVGRUZDXXxbXHVGRjIxLVx1RkYzQVx1RkY0MS1cdUZGNUFcdUZGNjYtXHVGRkJFXHVGRkMyLVx1RkZDN1x1RkZDQS1cdUZGQ0ZdfFtcdUZGRDItXHVGRkQ3XHVGRkRBLVx1RkZEQ10pLywvXig/Olx8KS8sL14oPzpcfCkvLC9eKD86XCkpLywvXig/OlwoKS8sL14oPzpcXSkvLC9eKD86XFspLywvXig/OihcfSkpLywvXig/Olx7KS8sL14oPzpbXlxbXF1cKFwpXHtcfVx8XCJdKykvLC9eKD86IikvLC9eKD86KFxyP1xuKSspLywvXig/OlxzKS8sL14oPzokKS9dLGNvbmRpdGlvbnM6e2Nsb3NlX2RpcmVjdGl2ZTp7cnVsZXM6WzIwLDIzLDc1LDc4LDgwLDgyLDg2LDg4LDkyLDkzLDEwNiwxMDgsMTEwLDExMl0saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0LDIwLDIzLDc1LDc4LDgwLDgyLDg2LDg4LDkyLDkzLDEwNiwxMDgsMTEwLDExMl0saW5jbHVzaXZlOiExfSx0eXBlX2RpcmVjdGl2ZTp7cnVsZXM6WzIsMywyMCwyMyw3NSw3OCw4MCw4Miw4Niw4OCw5Miw5MywxMDYsMTA4LDExMCwxMTJdLGluY2x1c2l2ZTohMX0sb3Blbl9kaXJlY3RpdmU6e3J1bGVzOlsxLDIwLDIzLDc1LDc4LDgwLDgyLDg2LDg4LDkyLDkzLDEwNiwxMDgsMTEwLDExMl0saW5jbHVzaXZlOiExfSxjYWxsYmFja2FyZ3M6e3J1bGVzOlsxNiwxNywyMCwyMyw3NSw3OCw4MCw4Miw4Niw4OCw5Miw5MywxMDYsMTA4LDExMCwxMTJdLGluY2x1c2l2ZTohMX0sY2FsbGJhY2tuYW1lOntydWxlczpbMTMsMTQsMTUsMjAsMjMsNzUsNzgsODAsODIsODYsODgsOTIsOTMsMTA2LDEwOCwxMTAsMTEyXSxpbmNsdXNpdmU6ITF9LGhyZWY6e3J1bGVzOlsyMCwyMyw3NSw3OCw4MCw4Miw4Niw4OCw5Miw5MywxMDYsMTA4LDExMCwxMTJdLGluY2x1c2l2ZTohMX0sY2xpY2s6e3J1bGVzOlsyMCwyMywzMiwzMyw3NSw3OCw4MCw4Miw4Niw4OCw5Miw5MywxMDYsMTA4LDExMCwxMTJdLGluY2x1c2l2ZTohMX0sZG90dGVkRWRnZVRleHQ6e3J1bGVzOlsyMCwyMyw3Miw3NCw3NSw3OCw4MCw4Miw4Niw4OCw5Miw5MywxMDYsMTA4LDExMCwxMTJdLGluY2x1c2l2ZTohMX0sdGhpY2tFZGdlVGV4dDp7cnVsZXM6WzIwLDIzLDY5LDcxLDc1LDc4LDgwLDgyLDg2LDg4LDkyLDkzLDEwNiwxMDgsMTEwLDExMl0saW5jbHVzaXZlOiExfSxlZGdlVGV4dDp7cnVsZXM6WzIwLDIzLDY2LDY4LDc1LDc4LDgwLDgyLDg2LDg4LDkyLDkzLDEwNiwxMDgsMTEwLDExMl0saW5jbHVzaXZlOiExfSx0cmFwVGV4dDp7cnVsZXM6WzIwLDIzLDc1LDc4LDgwLDgyLDg2LDg4LDg5LDkwLDkxLDkyLDkzLDEwNiwxMDgsMTEwLDExMl0saW5jbHVzaXZlOiExfSxlbGxpcHNlVGV4dDp7cnVsZXM6WzIwLDIzLDc1LDc2LDc3LDc4LDgwLDgyLDg2LDg4LDkyLDkzLDEwNiwxMDgsMTEwLDExMl0saW5jbHVzaXZlOiExfSx0ZXh0OntydWxlczpbMjAsMjMsNzUsNzgsNzksODAsODEsODIsODUsODYsODcsODgsOTIsOTMsMTA1LDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExLDExMiwxMTNdLGluY2x1c2l2ZTohMX0sdmVydGV4OntydWxlczpbMjAsMjMsNzUsNzgsODAsODIsODYsODgsOTIsOTMsMTA2LDEwOCwxMTAsMTEyXSxpbmNsdXNpdmU6ITF9LGRpcjp7cnVsZXM6WzIwLDIzLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDc1LDc4LDgwLDgyLDg2LDg4LDkyLDkzLDEwNiwxMDgsMTEwLDExMl0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbMTAsMTEsMjAsMjMsNzUsNzgsODAsODIsODYsODgsOTIsOTMsMTA2LDEwOCwxMTAsMTEyXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzgsMjAsMjMsNzUsNzgsODAsODIsODYsODgsOTIsOTMsMTA2LDEwOCwxMTAsMTEyXSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzYsMjAsMjMsNzUsNzgsODAsODIsODYsODgsOTIsOTMsMTA2LDEwOCwxMTAsMTEyXSxpbmNsdXNpdmU6ITF9LG1kX3N0cmluZzp7cnVsZXM6WzE4LDE5LDIwLDIzLDc1LDc4LDgwLDgyLDg2LDg4LDkyLDkzLDEwNiwxMDgsMTEwLDExMl0saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOlsyMCwyMSwyMiwyMyw3NSw3OCw4MCw4Miw4Niw4OCw5Miw5MywxMDYsMTA4LDExMCwxMTJdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsNSw3LDksMTIsMjAsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjksNzAsNzIsNzMsNzUsNzgsODAsODIsODMsODQsODYsODgsOTIsOTMsOTQsOTUsOTYsOTcsOTgsOTksMTAwLDEwMSwxMDIsMTAzLDEwNCwxMDYsMTA4LDExMCwxMTIsMTE0LDExNSwxMTYsMTE3XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIHpifSgpO2RtLmxleGVyPVM5O2Z1bmN0aW9uIHgzKCl7dGhpcy55eT17fX1yZXR1cm4geDMucHJvdG90eXBlPWRtLGRtLlBhcnNlcj14MyxuZXcgeDN9KCk7UGR0LnBhcnNlcj1QZHQ7Y29uc3QgRmR0PVBkdCxURGU9ImZsb3djaGFydC0iO2xldCBUTnQ9MCxCZHQ9RGUoKSxFbD17fSxsOT1bXSxRQT17fSxUNT1bXSxRVz17fSxaVz17fSxKVz0wLFJkdD0hMCxldix0SyxlSz1bXTtjb25zdCBuSz1pPT51aS5zYW5pdGl6ZVRleHQoaSxCZHQpLF9OdD1mdW5jdGlvbihpLGEsZil7SjEucGFyc2VEaXJlY3RpdmUodGhpcyxpLGEsZil9LHNQPWZ1bmN0aW9uKGkpe2NvbnN0IGE9T2JqZWN0LmtleXMoRWwpO2Zvcihjb25zdCBmIG9mIGEpaWYoRWxbZl0uaWQ9PT1pKXJldHVybiBFbFtmXS5kb21JZDtyZXR1cm4gaX0sQ050PWZ1bmN0aW9uKGksYSxmLHAsdixtLGI9e30pe2xldCBFLEM9aTtDIT09dm9pZCAwJiZDLnRyaW0oKS5sZW5ndGghPT0wJiYoRWxbQ109PT12b2lkIDAmJihFbFtDXT17aWQ6QyxsYWJlbFR5cGU6InRleHQiLGRvbUlkOlREZStDKyItIitUTnQsc3R5bGVzOltdLGNsYXNzZXM6W119KSxUTnQrKyxhIT09dm9pZCAwPyhCZHQ9RGUoKSxFPW5LKGEudGV4dC50cmltKCkpLEVsW0NdLmxhYmVsVHlwZT1hLnR5cGUsRVswXT09PSciJyYmRVtFLmxlbmd0aC0xXT09PSciJyYmKEU9RS5zdWJzdHJpbmcoMSxFLmxlbmd0aC0xKSksRWxbQ10udGV4dD1FKTpFbFtDXS50ZXh0PT09dm9pZCAwJiYoRWxbQ10udGV4dD1pKSxmIT09dm9pZCAwJiYoRWxbQ10udHlwZT1mKSxwIT1udWxsJiZwLmZvckVhY2goZnVuY3Rpb24oQSl7RWxbQ10uc3R5bGVzLnB1c2goQSl9KSx2IT1udWxsJiZ2LmZvckVhY2goZnVuY3Rpb24oQSl7RWxbQ10uY2xhc3Nlcy5wdXNoKEEpfSksbSE9PXZvaWQgMCYmKEVsW0NdLmRpcj1tKSxFbFtDXS5wcm9wcz09PXZvaWQgMD9FbFtDXS5wcm9wcz1iOmIhPT12b2lkIDAmJk9iamVjdC5hc3NpZ24oRWxbQ10ucHJvcHMsYikpfSxTTnQ9ZnVuY3Rpb24oaSxhLGYpe2NvbnN0IG09e3N0YXJ0OmksZW5kOmEsdHlwZTp2b2lkIDAsdGV4dDoiIixsYWJlbFR5cGU6InRleHQifTtXdC5pbmZvKCJhYmM3OCBHb3QgZWRnZS4uLiIsbSk7Y29uc3QgYj1mLnRleHQ7YiE9PXZvaWQgMCYmKG0udGV4dD1uSyhiLnRleHQudHJpbSgpKSxtLnRleHRbMF09PT0nIicmJm0udGV4dFttLnRleHQubGVuZ3RoLTFdPT09JyInJiYobS50ZXh0PW0udGV4dC5zdWJzdHJpbmcoMSxtLnRleHQubGVuZ3RoLTEpKSxtLmxhYmVsVHlwZT1iLnR5cGUpLGYhPT12b2lkIDAmJihtLnR5cGU9Zi50eXBlLG0uc3Ryb2tlPWYuc3Ryb2tlLG0ubGVuZ3RoPWYubGVuZ3RoKSxsOS5wdXNoKG0pfSxBTnQ9ZnVuY3Rpb24oaSxhLGYpe1d0LmluZm8oImFkZExpbmsgKGFiYzc4KSIsaSxhLGYpO2xldCBwLHY7Zm9yKHA9MDtwPGkubGVuZ3RoO3ArKylmb3Iodj0wO3Y8YS5sZW5ndGg7disrKVNOdChpW3BdLGFbdl0sZil9LExOdD1mdW5jdGlvbihpLGEpe2kuZm9yRWFjaChmdW5jdGlvbihmKXtmPT09ImRlZmF1bHQiP2w5LmRlZmF1bHRJbnRlcnBvbGF0ZT1hOmw5W2ZdLmludGVycG9sYXRlPWF9KX0sTU50PWZ1bmN0aW9uKGksYSl7aS5mb3JFYWNoKGZ1bmN0aW9uKGYpe2Y9PT0iZGVmYXVsdCI/bDkuZGVmYXVsdFN0eWxlPWE6KHRvLmlzU3Vic3RyaW5nSW5BcnJheSgiZmlsbCIsYSk9PT0tMSYmYS5wdXNoKCJmaWxsOm5vbmUiKSxsOVtmXS5zdHlsZT1hKX0pfSxETnQ9ZnVuY3Rpb24oaSxhKXtpLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihmKXtRQVtmXT09PXZvaWQgMCYmKFFBW2ZdPXtpZDpmLHN0eWxlczpbXSx0ZXh0U3R5bGVzOltdfSksYSE9bnVsbCYmYS5mb3JFYWNoKGZ1bmN0aW9uKHApe2lmKHAubWF0Y2goImNvbG9yIikpe2NvbnN0IHY9cC5yZXBsYWNlKCJmaWxsIiwiYmdGaWxsIikucmVwbGFjZSgiY29sb3IiLCJmaWxsIik7UUFbZl0udGV4dFN0eWxlcy5wdXNoKHYpfVFBW2ZdLnN0eWxlcy5wdXNoKHApfSl9KX0sSU50PWZ1bmN0aW9uKGkpe2V2PWksZXYubWF0Y2goLy4qPC8pJiYoZXY9IlJMIiksZXYubWF0Y2goLy4qXF4vKSYmKGV2PSJCVCIpLGV2Lm1hdGNoKC8uKj4vKSYmKGV2PSJMUiIpLGV2Lm1hdGNoKC8uKnYvKSYmKGV2PSJUQiIpLGV2PT09IlREIiYmKGV2PSJUQiIpfSxySz1mdW5jdGlvbihpLGEpe2kuc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe2xldCBwPWY7RWxbcF0hPT12b2lkIDAmJkVsW3BdLmNsYXNzZXMucHVzaChhKSxRV1twXSE9PXZvaWQgMCYmUVdbcF0uY2xhc3Nlcy5wdXNoKGEpfSl9LF9EZT1mdW5jdGlvbihpLGEpe2kuc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe2EhPT12b2lkIDAmJihaV1t0Sz09PSJnZW4tMSI/c1AoZik6Zl09bksoYSkpfSl9LENEZT1mdW5jdGlvbihpLGEsZil7bGV0IHA9c1AoaSk7aWYoRGUoKS5zZWN1cml0eUxldmVsIT09Imxvb3NlInx8YT09PXZvaWQgMClyZXR1cm47bGV0IHY9W107aWYodHlwZW9mIGY9PSJzdHJpbmciKXt2PWYuc3BsaXQoLywoPz0oPzooPzpbXiJdKiIpezJ9KSpbXiJdKiQpLyk7Zm9yKGxldCBtPTA7bTx2Lmxlbmd0aDttKyspe2xldCBiPXZbbV0udHJpbSgpO2IuY2hhckF0KDApPT09JyInJiZiLmNoYXJBdChiLmxlbmd0aC0xKT09PSciJyYmKGI9Yi5zdWJzdHIoMSxiLmxlbmd0aC0yKSksdlttXT1ifX12Lmxlbmd0aD09PTAmJnYucHVzaChpKSxFbFtpXSE9PXZvaWQgMCYmKEVsW2ldLmhhdmVDYWxsYmFjaz0hMCxlSy5wdXNoKGZ1bmN0aW9uKCl7Y29uc3QgbT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbaWQ9IiR7cH0iXWApO20hPT1udWxsJiZtLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpe3RvLnJ1bkZ1bmMoYSwuLi52KX0sITEpfSkpfSxPTnQ9ZnVuY3Rpb24oaSxhLGYpe2kuc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKHApe0VsW3BdIT09dm9pZCAwJiYoRWxbcF0ubGluaz10by5mb3JtYXRVcmwoYSxCZHQpLEVsW3BdLmxpbmtUYXJnZXQ9Zil9KSxySyhpLCJjbGlja2FibGUiKX0sTk50PWZ1bmN0aW9uKGkpe2lmKFpXLmhhc093blByb3BlcnR5KGkpKXJldHVybiBaV1tpXX0sUE50PWZ1bmN0aW9uKGksYSxmKXtpLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihwKXtDRGUocCxhLGYpfSkscksoaSwiY2xpY2thYmxlIil9LEZOdD1mdW5jdGlvbihpKXtlSy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EoaSl9KX0sQk50PWZ1bmN0aW9uKCl7cmV0dXJuIGV2LnRyaW0oKX0sUk50PWZ1bmN0aW9uKCl7cmV0dXJuIEVsfSxqTnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbDl9LCROdD1mdW5jdGlvbigpe3JldHVybiBRQX0sek50PWZ1bmN0aW9uKGkpe2xldCBhPXhyKCIubWVybWFpZFRvb2x0aXAiKTsoYS5fZ3JvdXBzfHxhKVswXVswXT09PW51bGwmJihhPXhyKCJib2R5IikuYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsIm1lcm1haWRUb29sdGlwIikuc3R5bGUoIm9wYWNpdHkiLDApKSx4cihpKS5zZWxlY3QoInN2ZyIpLnNlbGVjdEFsbCgiZy5ub2RlIikub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXtjb25zdCB2PXhyKHRoaXMpO2lmKHYuYXR0cigidGl0bGUiKT09PW51bGwpcmV0dXJuO2NvbnN0IGI9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTthLnRyYW5zaXRpb24oKS5kdXJhdGlvbigyMDApLnN0eWxlKCJvcGFjaXR5IiwiLjkiKSxhLnRleHQodi5hdHRyKCJ0aXRsZSIpKS5zdHlsZSgibGVmdCIsd2luZG93LnNjcm9sbFgrYi5sZWZ0KyhiLnJpZ2h0LWIubGVmdCkvMisicHgiKS5zdHlsZSgidG9wIix3aW5kb3cuc2Nyb2xsWStiLnRvcC0xNCtkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCsicHgiKSxhLmh0bWwoYS5odG1sKCkucmVwbGFjZSgvJmx0O2JyXC8mZ3Q7L2csIjxici8+IikpLHYuY2xhc3NlZCgiaG92ZXIiLCEwKX0pLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oKXthLnRyYW5zaXRpb24oKS5kdXJhdGlvbig1MDApLnN0eWxlKCJvcGFjaXR5IiwwKSx4cih0aGlzKS5jbGFzc2VkKCJob3ZlciIsITEpfSl9O2VLLnB1c2goek50KTtjb25zdCBxTnQ9ZnVuY3Rpb24oaT0iZ2VuLTEiKXtFbD17fSxRQT17fSxsOT1bXSxlSz1bek50XSxUNT1bXSxRVz17fSxKVz0wLFpXPXt9LFJkdD0hMCx0Sz1pLGNnKCl9LEhOdD1pPT57dEs9aXx8Imdlbi0yIn0sVk50PWZ1bmN0aW9uKCl7cmV0dXJuImZpbGw6I2ZmYTtzdHJva2U6ICNmNjY7IHN0cm9rZS13aWR0aDogM3B4OyBzdHJva2UtZGFzaGFycmF5OiA1LCA1O2ZpbGw6I2ZmYTtzdHJva2U6ICM2NjY7In0sR050PWZ1bmN0aW9uKGksYSxmKXtsZXQgcD1pLnRleHQudHJpbSgpLHY9Zi50ZXh0O2k9PT1mJiZmLnRleHQubWF0Y2goL1xzLykmJihwPXZvaWQgMCk7ZnVuY3Rpb24gbShQKXtjb25zdCBGPXtib29sZWFuOnt9LG51bWJlcjp7fSxzdHJpbmc6e319LGo9W107bGV0IFI7cmV0dXJue25vZGVMaXN0OlAuZmlsdGVyKGZ1bmN0aW9uKFkpe2NvbnN0IHJ0PXR5cGVvZiBZO3JldHVybiBZLnN0bXQmJlkuc3RtdD09PSJkaXIiPyhSPVkudmFsdWUsITEpOlkudHJpbSgpPT09IiI/ITE6cnQgaW4gRj9GW3J0XS5oYXNPd25Qcm9wZXJ0eShZKT8hMTpGW3J0XVtZXT0hMDpqLmluY2x1ZGVzKFkpPyExOmoucHVzaChZKX0pLGRpcjpSfX1sZXQgYj1bXTtjb25zdHtub2RlTGlzdDpFLGRpcjpDfT1tKGIuY29uY2F0LmFwcGx5KGIsYSkpO2lmKGI9RSx0Sz09PSJnZW4tMSIpZm9yKGxldCBQPTA7UDxiLmxlbmd0aDtQKyspYltQXT1zUChiW1BdKTtwPXB8fCJzdWJHcmFwaCIrSlcsdj12fHwiIix2PW5LKHYpLEpXPUpXKzE7Y29uc3QgQT17aWQ6cCxub2RlczpiLHRpdGxlOnYudHJpbSgpLGNsYXNzZXM6W10sZGlyOkMsbGFiZWxUeXBlOmYudHlwZX07cmV0dXJuIFd0LmluZm8oIkFkZGluZyIsQS5pZCxBLm5vZGVzLEEuZGlyKSxBLm5vZGVzPXRQdChBLFQ1KS5ub2RlcyxUNS5wdXNoKEEpLFFXW3BdPUEscH0sU0RlPWZ1bmN0aW9uKGkpe2Zvcihjb25zdFthLGZdb2YgVDUuZW50cmllcygpKWlmKGYuaWQ9PT1pKXJldHVybiBhO3JldHVybi0xfTtsZXQgYVA9LTE7Y29uc3QgVU50PVtdLFdOdD1mdW5jdGlvbihpLGEpe2NvbnN0IGY9VDVbYV0ubm9kZXM7aWYoYVA9YVArMSxhUD4yZTMpcmV0dXJuO2lmKFVOdFthUF09YSxUNVthXS5pZD09PWkpcmV0dXJue3Jlc3VsdDohMCxjb3VudDowfTtsZXQgcD0wLHY9MTtmb3IoO3A8Zi5sZW5ndGg7KXtjb25zdCBtPVNEZShmW3BdKTtpZihtPj0wKXtjb25zdCBiPVdOdChpLG0pO2lmKGIucmVzdWx0KXJldHVybntyZXN1bHQ6ITAsY291bnQ6ditiLmNvdW50fTt2PXYrYi5jb3VudH1wPXArMX1yZXR1cm57cmVzdWx0OiExLGNvdW50OnZ9fSxLTnQ9ZnVuY3Rpb24oaSl7cmV0dXJuIFVOdFtpXX0sWU50PWZ1bmN0aW9uKCl7YVA9LTEsVDUubGVuZ3RoPjAmJldOdCgibm9uZSIsVDUubGVuZ3RoLTEpfSxYTnQ9ZnVuY3Rpb24oKXtyZXR1cm4gVDV9LFFOdD0oKT0+UmR0PyhSZHQ9ITEsITApOiExLEFEZT1pPT57bGV0IGE9aS50cmltKCksZj0iYXJyb3dfb3BlbiI7c3dpdGNoKGFbMF0pe2Nhc2UiPCI6Zj0iYXJyb3dfcG9pbnQiLGE9YS5zbGljZSgxKTticmVhaztjYXNlIngiOmY9ImFycm93X2Nyb3NzIixhPWEuc2xpY2UoMSk7YnJlYWs7Y2FzZSJvIjpmPSJhcnJvd19jaXJjbGUiLGE9YS5zbGljZSgxKTticmVha31sZXQgcD0ibm9ybWFsIjtyZXR1cm4gYS5pbmNsdWRlcygiPSIpJiYocD0idGhpY2siKSxhLmluY2x1ZGVzKCIuIikmJihwPSJkb3R0ZWQiKSx7dHlwZTpmLHN0cm9rZTpwfX0sTERlPShpLGEpPT57Y29uc3QgZj1hLmxlbmd0aDtsZXQgcD0wO2ZvcihsZXQgdj0wO3Y8ZjsrK3YpYVt2XT09PWkmJisrcDtyZXR1cm4gcH0sTURlPWk9Pntjb25zdCBhPWkudHJpbSgpO2xldCBmPWEuc2xpY2UoMCwtMSkscD0iYXJyb3dfb3BlbiI7c3dpdGNoKGEuc2xpY2UoLTEpKXtjYXNlIngiOnA9ImFycm93X2Nyb3NzIixhWzBdPT09IngiJiYocD0iZG91YmxlXyIrcCxmPWYuc2xpY2UoMSkpO2JyZWFrO2Nhc2UiPiI6cD0iYXJyb3dfcG9pbnQiLGFbMF09PT0iPCImJihwPSJkb3VibGVfIitwLGY9Zi5zbGljZSgxKSk7YnJlYWs7Y2FzZSJvIjpwPSJhcnJvd19jaXJjbGUiLGFbMF09PT0ibyImJihwPSJkb3VibGVfIitwLGY9Zi5zbGljZSgxKSk7YnJlYWt9bGV0IHY9Im5vcm1hbCIsbT1mLmxlbmd0aC0xO2ZbMF09PT0iPSImJih2PSJ0aGljayIpLGZbMF09PT0ifiImJih2PSJpbnZpc2libGUiKTtsZXQgYj1MRGUoIi4iLGYpO3JldHVybiBiJiYodj0iZG90dGVkIixtPWIpLHt0eXBlOnAsc3Ryb2tlOnYsbGVuZ3RoOm19fSxaTnQ9KGksYSk9Pntjb25zdCBmPU1EZShpKTtsZXQgcDtpZihhKXtpZihwPUFEZShhKSxwLnN0cm9rZSE9PWYuc3Ryb2tlKXJldHVybnt0eXBlOiJJTlZBTElEIixzdHJva2U6IklOVkFMSUQifTtpZihwLnR5cGU9PT0iYXJyb3dfb3BlbiIpcC50eXBlPWYudHlwZTtlbHNle2lmKHAudHlwZSE9PWYudHlwZSlyZXR1cm57dHlwZToiSU5WQUxJRCIsc3Ryb2tlOiJJTlZBTElEIn07cC50eXBlPSJkb3VibGVfIitwLnR5cGV9cmV0dXJuIHAudHlwZT09PSJkb3VibGVfYXJyb3ciJiYocC50eXBlPSJkb3VibGVfYXJyb3dfcG9pbnQiKSxwLmxlbmd0aD1mLmxlbmd0aCxwfXJldHVybiBmfSxKTnQ9KGksYSk9PntsZXQgZj0hMTtyZXR1cm4gaS5mb3JFYWNoKHA9PntwLm5vZGVzLmluZGV4T2YoYSk+PTAmJihmPSEwKX0pLGZ9LHRQdD0oaSxhKT0+e2NvbnN0IGY9W107cmV0dXJuIGkubm9kZXMuZm9yRWFjaCgocCx2KT0+e0pOdChhLHApfHxmLnB1c2goaS5ub2Rlc1t2XSl9KSx7bm9kZXM6Zn19LGVQdD17Zmlyc3RHcmFwaDpRTnR9LGg5PXtwYXJzZURpcmVjdGl2ZTpfTnQsZGVmYXVsdENvbmZpZzooKT0+aTkuZmxvd2NoYXJ0LHNldEFjY1RpdGxlOm0wLGdldEFjY1RpdGxlOnVnLGdldEFjY0Rlc2NyaXB0aW9uOmhnLHNldEFjY0Rlc2NyaXB0aW9uOmxnLGFkZFZlcnRleDpDTnQsbG9va1VwRG9tSWQ6c1AsYWRkTGluazpBTnQsdXBkYXRlTGlua0ludGVycG9sYXRlOkxOdCx1cGRhdGVMaW5rOk1OdCxhZGRDbGFzczpETnQsc2V0RGlyZWN0aW9uOklOdCxzZXRDbGFzczpySyxzZXRUb29sdGlwOl9EZSxnZXRUb29sdGlwOk5OdCxzZXRDbGlja0V2ZW50OlBOdCxzZXRMaW5rOk9OdCxiaW5kRnVuY3Rpb25zOkZOdCxnZXREaXJlY3Rpb246Qk50LGdldFZlcnRpY2VzOlJOdCxnZXRFZGdlczpqTnQsZ2V0Q2xhc3NlczokTnQsY2xlYXI6cU50LHNldEdlbjpITnQsZGVmYXVsdFN0eWxlOlZOdCxhZGRTdWJHcmFwaDpHTnQsZ2V0RGVwdGhGaXJzdFBvczpLTnQsaW5kZXhOb2RlczpZTnQsZ2V0U3ViR3JhcGhzOlhOdCxkZXN0cnVjdExpbms6Wk50LGxleDplUHQsZXhpc3RzOkpOdCxtYWtlVW5pcTp0UHQsc2V0RGlhZ3JhbVRpdGxlOk5iLGdldERpYWdyYW1UaXRsZTpocH0sRERlPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxhZGRDbGFzczpETnQsYWRkTGluazpBTnQsYWRkU2luZ2xlTGluazpTTnQsYWRkU3ViR3JhcGg6R050LGFkZFZlcnRleDpDTnQsYmluZEZ1bmN0aW9uczpGTnQsY2xlYXI6cU50LGRlZmF1bHQ6aDksZGVmYXVsdFN0eWxlOlZOdCxkZXN0cnVjdExpbms6Wk50LGZpcnN0R3JhcGg6UU50LGdldENsYXNzZXM6JE50LGdldERlcHRoRmlyc3RQb3M6S050LGdldERpcmVjdGlvbjpCTnQsZ2V0RWRnZXM6ak50LGdldFN1YkdyYXBoczpYTnQsZ2V0VG9vbHRpcDpOTnQsZ2V0VmVydGljZXM6Uk50LGluZGV4Tm9kZXM6WU50LGxleDplUHQsbG9va1VwRG9tSWQ6c1AscGFyc2VEaXJlY3RpdmU6X050LHNldENsYXNzOnJLLHNldENsaWNrRXZlbnQ6UE50LHNldERpcmVjdGlvbjpJTnQsc2V0R2VuOkhOdCxzZXRMaW5rOk9OdCx1cGRhdGVMaW5rOk1OdCx1cGRhdGVMaW5rSW50ZXJwb2xhdGU6TE50fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBJRGU9IltvYmplY3QgU3ltYm9sXSI7ZnVuY3Rpb24gZjkoaSl7cmV0dXJuIHR5cGVvZiBpPT0ic3ltYm9sInx8bDMoaSkmJlFFKGkpPT1JRGV9ZnVuY3Rpb24gWkEoaSxhKXtmb3IodmFyIGY9LTEscD1pPT1udWxsPzA6aS5sZW5ndGgsdj1BcnJheShwKTsrK2Y8cDspdltmXT1hKGlbZl0sZixpKTtyZXR1cm4gdn12YXIgT0RlPTEvMCxuUHQ9UTI/UTIucHJvdG90eXBlOnZvaWQgMCxyUHQ9blB0P25QdC50b1N0cmluZzp2b2lkIDA7ZnVuY3Rpb24gaVB0KGkpe2lmKHR5cGVvZiBpPT0ic3RyaW5nIilyZXR1cm4gaTtpZihPZihpKSlyZXR1cm4gWkEoaSxpUHQpKyIiO2lmKGY5KGkpKXJldHVybiByUHQ/clB0LmNhbGwoaSk6IiI7dmFyIGE9aSsiIjtyZXR1cm4gYT09IjAiJiYxL2k9PS1PRGU/Ii0wIjphfXZhciBORGU9L1xzLztmdW5jdGlvbiBQRGUoaSl7Zm9yKHZhciBhPWkubGVuZ3RoO2EtLSYmTkRlLnRlc3QoaS5jaGFyQXQoYSkpOyk7cmV0dXJuIGF9dmFyIEZEZT0vXlxzKy87ZnVuY3Rpb24gQkRlKGkpe3JldHVybiBpJiZpLnNsaWNlKDAsUERlKGkpKzEpLnJlcGxhY2UoRkRlLCIiKX12YXIgc1B0PTAvMCxSRGU9L15bLStdMHhbMC05YS1mXSskL2ksakRlPS9eMGJbMDFdKyQvaSwkRGU9L14wb1swLTddKyQvaSx6RGU9cGFyc2VJbnQ7ZnVuY3Rpb24gcURlKGkpe2lmKHR5cGVvZiBpPT0ibnVtYmVyIilyZXR1cm4gaTtpZihmOShpKSlyZXR1cm4gc1B0O2lmKE9iKGkpKXt2YXIgYT10eXBlb2YgaS52YWx1ZU9mPT0iZnVuY3Rpb24iP2kudmFsdWVPZigpOmk7aT1PYihhKT9hKyIiOmF9aWYodHlwZW9mIGkhPSJzdHJpbmciKXJldHVybiBpPT09MD9pOitpO2k9QkRlKGkpO3ZhciBmPWpEZS50ZXN0KGkpO3JldHVybiBmfHwkRGUudGVzdChpKT96RGUoaS5zbGljZSgyKSxmPzI6OCk6UkRlLnRlc3QoaSk/c1B0OitpfXZhciBhUHQ9MS8wLEhEZT0xNzk3NjkzMTM0ODYyMzE1N2UyOTI7ZnVuY3Rpb24gaUsoaSl7aWYoIWkpcmV0dXJuIGk9PT0wP2k6MDtpZihpPXFEZShpKSxpPT09YVB0fHxpPT09LWFQdCl7dmFyIGE9aTwwPy0xOjE7cmV0dXJuIGEqSERlfXJldHVybiBpPT09aT9pOjB9ZnVuY3Rpb24gVkRlKGkpe3ZhciBhPWlLKGkpLGY9YSUxO3JldHVybiBhPT09YT9mP2EtZjphOjB9ZnVuY3Rpb24gR0RlKCl7fWZ1bmN0aW9uIG9QdChpLGEpe2Zvcih2YXIgZj0tMSxwPWk9PW51bGw/MDppLmxlbmd0aDsrK2Y8cCYmYShpW2ZdLGYsaSkhPT0hMTspO3JldHVybiBpfWZ1bmN0aW9uIGNQdChpLGEsZixwKXtmb3IodmFyIHY9aS5sZW5ndGgsbT1mKyhwPzE6LTEpO3A/bS0tOisrbTx2OylpZihhKGlbbV0sbSxpKSlyZXR1cm4gbTtyZXR1cm4tMX1mdW5jdGlvbiBVRGUoaSl7cmV0dXJuIGkhPT1pfWZ1bmN0aW9uIFdEZShpLGEsZil7Zm9yKHZhciBwPWYtMSx2PWkubGVuZ3RoOysrcDx2OylpZihpW3BdPT09YSlyZXR1cm4gcDtyZXR1cm4tMX1mdW5jdGlvbiBLRGUoaSxhLGYpe3JldHVybiBhPT09YT9XRGUoaSxhLGYpOmNQdChpLFVEZSxmKX1mdW5jdGlvbiBZRGUoaSxhKXt2YXIgZj1pPT1udWxsPzA6aS5sZW5ndGg7cmV0dXJuISFmJiZLRGUoaSxhLDApPi0xfWZ1bmN0aW9uIEZiKGkpe3JldHVybiB0ayhpKT9NSXQoaSk6UU90KGkpfXZhciBYRGU9L1wufFxbKD86W15bXF1dKnwoWyInXSkoPzooPyFcMSlbXlxcXXxcXC4pKj9cMSlcXS8sUURlPS9eXHcqJC87ZnVuY3Rpb24gamR0KGksYSl7aWYoT2YoaSkpcmV0dXJuITE7dmFyIGY9dHlwZW9mIGk7cmV0dXJuIGY9PSJudW1iZXIifHxmPT0ic3ltYm9sInx8Zj09ImJvb2xlYW4ifHxpPT1udWxsfHxmOShpKT8hMDpRRGUudGVzdChpKXx8IVhEZS50ZXN0KGkpfHxhIT1udWxsJiZpIGluIE9iamVjdChhKX12YXIgWkRlPTUwMDtmdW5jdGlvbiBKRGUoaSl7dmFyIGE9RkEoaSxmdW5jdGlvbihwKXtyZXR1cm4gZi5zaXplPT09WkRlJiZmLmNsZWFyKCkscH0pLGY9YS5jYWNoZTtyZXR1cm4gYX12YXIgdEllPS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCQpKS9nLGVJZT0vXFwoXFwpPy9nLG5JZT1KRGUoZnVuY3Rpb24oaSl7dmFyIGE9W107cmV0dXJuIGkuY2hhckNvZGVBdCgwKT09PTQ2JiZhLnB1c2goIiIpLGkucmVwbGFjZSh0SWUsZnVuY3Rpb24oZixwLHYsbSl7YS5wdXNoKHY/bS5yZXBsYWNlKGVJZSwiJDEiKTpwfHxmKX0pLGF9KTtjb25zdCBySWU9bkllO2Z1bmN0aW9uIHVQdChpKXtyZXR1cm4gaT09bnVsbD8iIjppUHQoaSl9ZnVuY3Rpb24gc0soaSxhKXtyZXR1cm4gT2YoaSk/aTpqZHQoaSxhKT9baV06ckllKHVQdChpKSl9dmFyIGlJZT0xLzA7ZnVuY3Rpb24gb1AoaSl7aWYodHlwZW9mIGk9PSJzdHJpbmcifHxmOShpKSlyZXR1cm4gaTt2YXIgYT1pKyIiO3JldHVybiBhPT0iMCImJjEvaT09LWlJZT8iLTAiOmF9ZnVuY3Rpb24gYUsoaSxhKXthPXNLKGEsaSk7Zm9yKHZhciBmPTAscD1hLmxlbmd0aDtpIT1udWxsJiZmPHA7KWk9aVtvUChhW2YrK10pXTtyZXR1cm4gZiYmZj09cD9pOnZvaWQgMH1mdW5jdGlvbiBzSWUoaSxhLGYpe3ZhciBwPWk9PW51bGw/dm9pZCAwOmFLKGksYSk7cmV0dXJuIHA9PT12b2lkIDA/ZjpwfWZ1bmN0aW9uICRkdChpLGEpe2Zvcih2YXIgZj0tMSxwPWEubGVuZ3RoLHY9aS5sZW5ndGg7KytmPHA7KWlbditmXT1hW2ZdO3JldHVybiBpfXZhciBsUHQ9UTI/UTIuaXNDb25jYXRTcHJlYWRhYmxlOnZvaWQgMDtmdW5jdGlvbiBhSWUoaSl7cmV0dXJuIE9mKGkpfHxCQShpKXx8ISEobFB0JiZpJiZpW2xQdF0pfWZ1bmN0aW9uIG9LKGksYSxmLHAsdil7dmFyIG09LTEsYj1pLmxlbmd0aDtmb3IoZnx8KGY9YUllKSx2fHwodj1bXSk7KyttPGI7KXt2YXIgRT1pW21dO2E+MCYmZihFKT9hPjE/b0soRSxhLTEsZixwLHYpOiRkdCh2LEUpOnB8fCh2W3YubGVuZ3RoXT1FKX1yZXR1cm4gdn1mdW5jdGlvbiBKQShpKXt2YXIgYT1pPT1udWxsPzA6aS5sZW5ndGg7cmV0dXJuIGE/b0soaSwxKTpbXX1mdW5jdGlvbiBvSWUoaSl7cmV0dXJuIE5JdChPSXQoaSx2b2lkIDAsSkEpLGkrIiIpfWZ1bmN0aW9uIGNJZShpLGEsZixwKXt2YXIgdj0tMSxtPWk9PW51bGw/MDppLmxlbmd0aDtmb3IocCYmbSYmKGY9aVsrK3ZdKTsrK3Y8bTspZj1hKGYsaVt2XSx2LGkpO3JldHVybiBmfWZ1bmN0aW9uIHVJZShpLGEpe3JldHVybiBpJiZXTihhLEZiKGEpLGkpfWZ1bmN0aW9uIGxJZShpLGEpe3JldHVybiBpJiZXTihhLGU5KGEpLGkpfWZ1bmN0aW9uIGhQdChpLGEpe2Zvcih2YXIgZj0tMSxwPWk9PW51bGw/MDppLmxlbmd0aCx2PTAsbT1bXTsrK2Y8cDspe3ZhciBiPWlbZl07YShiLGYsaSkmJihtW3YrK109Yil9cmV0dXJuIG19ZnVuY3Rpb24gZlB0KCl7cmV0dXJuW119dmFyIGhJZT1PYmplY3QucHJvdG90eXBlLGZJZT1oSWUucHJvcGVydHlJc0VudW1lcmFibGUsZFB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsZEllPWRQdD9mdW5jdGlvbihpKXtyZXR1cm4gaT09bnVsbD9bXTooaT1PYmplY3QoaSksaFB0KGRQdChpKSxmdW5jdGlvbihhKXtyZXR1cm4gZkllLmNhbGwoaSxhKX0pKX06ZlB0O2NvbnN0IHpkdD1kSWU7ZnVuY3Rpb24gZ0llKGksYSl7cmV0dXJuIFdOKGksemR0KGkpLGEpfXZhciBwSWU9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxiSWU9cEllP2Z1bmN0aW9uKGkpe2Zvcih2YXIgYT1bXTtpOykkZHQoYSx6ZHQoaSkpLGk9UTF0KGkpO3JldHVybiBhfTpmUHQ7Y29uc3QgZ1B0PWJJZTtmdW5jdGlvbiB2SWUoaSxhKXtyZXR1cm4gV04oaSxnUHQoaSksYSl9ZnVuY3Rpb24gcFB0KGksYSxmKXt2YXIgcD1hKGkpO3JldHVybiBPZihpKT9wOiRkdChwLGYoaSkpfWZ1bmN0aW9uIHFkdChpKXtyZXR1cm4gcFB0KGksRmIsemR0KX1mdW5jdGlvbiB3SWUoaSl7cmV0dXJuIHBQdChpLGU5LGdQdCl9dmFyIG1JZT1PYmplY3QucHJvdG90eXBlLHlJZT1tSWUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24geEllKGkpe3ZhciBhPWkubGVuZ3RoLGY9bmV3IGkuY29uc3RydWN0b3IoYSk7cmV0dXJuIGEmJnR5cGVvZiBpWzBdPT0ic3RyaW5nIiYmeUllLmNhbGwoaSwiaW5kZXgiKSYmKGYuaW5kZXg9aS5pbmRleCxmLmlucHV0PWkuaW5wdXQpLGZ9ZnVuY3Rpb24ga0llKGksYSl7dmFyIGY9YT9YMXQoaS5idWZmZXIpOmkuYnVmZmVyO3JldHVybiBuZXcgaS5jb25zdHJ1Y3RvcihmLGkuYnl0ZU9mZnNldCxpLmJ5dGVMZW5ndGgpfXZhciBFSWU9L1x3KiQvO2Z1bmN0aW9uIFRJZShpKXt2YXIgYT1uZXcgaS5jb25zdHJ1Y3RvcihpLnNvdXJjZSxFSWUuZXhlYyhpKSk7cmV0dXJuIGEubGFzdEluZGV4PWkubGFzdEluZGV4LGF9dmFyIGJQdD1RMj9RMi5wcm90b3R5cGU6dm9pZCAwLHZQdD1iUHQ/YlB0LnZhbHVlT2Y6dm9pZCAwO2Z1bmN0aW9uIF9JZShpKXtyZXR1cm4gdlB0P09iamVjdCh2UHQuY2FsbChpKSk6e319dmFyIENJZT0iW29iamVjdCBCb29sZWFuXSIsU0llPSJbb2JqZWN0IERhdGVdIixBSWU9IltvYmplY3QgTWFwXSIsTEllPSJbb2JqZWN0IE51bWJlcl0iLE1JZT0iW29iamVjdCBSZWdFeHBdIixESWU9IltvYmplY3QgU2V0XSIsSUllPSJbb2JqZWN0IFN0cmluZ10iLE9JZT0iW29iamVjdCBTeW1ib2xdIixOSWU9IltvYmplY3QgQXJyYXlCdWZmZXJdIixQSWU9IltvYmplY3QgRGF0YVZpZXddIixGSWU9IltvYmplY3QgRmxvYXQzMkFycmF5XSIsQkllPSJbb2JqZWN0IEZsb2F0NjRBcnJheV0iLFJJZT0iW29iamVjdCBJbnQ4QXJyYXldIixqSWU9IltvYmplY3QgSW50MTZBcnJheV0iLCRJZT0iW29iamVjdCBJbnQzMkFycmF5XSIsekllPSJbb2JqZWN0IFVpbnQ4QXJyYXldIixxSWU9IltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIixISWU9IltvYmplY3QgVWludDE2QXJyYXldIixWSWU9IltvYmplY3QgVWludDMyQXJyYXldIjtmdW5jdGlvbiBHSWUoaSxhLGYpe3ZhciBwPWkuY29uc3RydWN0b3I7c3dpdGNoKGEpe2Nhc2UgTkllOnJldHVybiBYMXQoaSk7Y2FzZSBDSWU6Y2FzZSBTSWU6cmV0dXJuIG5ldyBwKCtpKTtjYXNlIFBJZTpyZXR1cm4ga0llKGksZik7Y2FzZSBGSWU6Y2FzZSBCSWU6Y2FzZSBSSWU6Y2FzZSBqSWU6Y2FzZSAkSWU6Y2FzZSB6SWU6Y2FzZSBxSWU6Y2FzZSBISWU6Y2FzZSBWSWU6cmV0dXJuIHBJdChpLGYpO2Nhc2UgQUllOnJldHVybiBuZXcgcDtjYXNlIExJZTpjYXNlIElJZTpyZXR1cm4gbmV3IHAoaSk7Y2FzZSBNSWU6cmV0dXJuIFRJZShpKTtjYXNlIERJZTpyZXR1cm4gbmV3IHA7Y2FzZSBPSWU6cmV0dXJuIF9JZShpKX19dmFyIFVJZT0iW29iamVjdCBNYXBdIjtmdW5jdGlvbiBXSWUoaSl7cmV0dXJuIGwzKGkpJiZYQShpKT09VUllfXZhciB3UHQ9akEmJmpBLmlzTWFwLEtJZT13UHQ/d1cod1B0KTpXSWU7Y29uc3QgWUllPUtJZTt2YXIgWEllPSJbb2JqZWN0IFNldF0iO2Z1bmN0aW9uIFFJZShpKXtyZXR1cm4gbDMoaSkmJlhBKGkpPT1YSWV9dmFyIG1QdD1qQSYmakEuaXNTZXQsWkllPW1QdD93VyhtUHQpOlFJZTtjb25zdCBKSWU9WkllO3ZhciB0T2U9MSxlT2U9MixuT2U9NCx5UHQ9IltvYmplY3QgQXJndW1lbnRzXSIsck9lPSJbb2JqZWN0IEFycmF5XSIsaU9lPSJbb2JqZWN0IEJvb2xlYW5dIixzT2U9IltvYmplY3QgRGF0ZV0iLGFPZT0iW29iamVjdCBFcnJvcl0iLHhQdD0iW29iamVjdCBGdW5jdGlvbl0iLG9PZT0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLGNPZT0iW29iamVjdCBNYXBdIix1T2U9IltvYmplY3QgTnVtYmVyXSIsa1B0PSJbb2JqZWN0IE9iamVjdF0iLGxPZT0iW29iamVjdCBSZWdFeHBdIixoT2U9IltvYmplY3QgU2V0XSIsZk9lPSJbb2JqZWN0IFN0cmluZ10iLGRPZT0iW29iamVjdCBTeW1ib2xdIixnT2U9IltvYmplY3QgV2Vha01hcF0iLHBPZT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLGJPZT0iW29iamVjdCBEYXRhVmlld10iLHZPZT0iW29iamVjdCBGbG9hdDMyQXJyYXldIix3T2U9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsbU9lPSJbb2JqZWN0IEludDhBcnJheV0iLHlPZT0iW29iamVjdCBJbnQxNkFycmF5XSIseE9lPSJbb2JqZWN0IEludDMyQXJyYXldIixrT2U9IltvYmplY3QgVWludDhBcnJheV0iLEVPZT0iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLFRPZT0iW29iamVjdCBVaW50MTZBcnJheV0iLF9PZT0iW29iamVjdCBVaW50MzJBcnJheV0iLHVsPXt9O3VsW3lQdF09dWxbck9lXT11bFtwT2VdPXVsW2JPZV09dWxbaU9lXT11bFtzT2VdPXVsW3ZPZV09dWxbd09lXT11bFttT2VdPXVsW3lPZV09dWxbeE9lXT11bFtjT2VdPXVsW3VPZV09dWxba1B0XT11bFtsT2VdPXVsW2hPZV09dWxbZk9lXT11bFtkT2VdPXVsW2tPZV09dWxbRU9lXT11bFtUT2VdPXVsW19PZV09ITAsdWxbYU9lXT11bFt4UHRdPXVsW2dPZV09ITE7ZnVuY3Rpb24gY1AoaSxhLGYscCx2LG0pe3ZhciBiLEU9YSZ0T2UsQz1hJmVPZSxBPWEmbk9lO2lmKGYmJihiPXY/ZihpLHAsdixtKTpmKGkpKSxiIT09dm9pZCAwKXJldHVybiBiO2lmKCFPYihpKSlyZXR1cm4gaTt2YXIgUD1PZihpKTtpZihQKXtpZihiPXhJZShpKSwhRSlyZXR1cm4gYkl0KGksYil9ZWxzZXt2YXIgRj1YQShpKSxqPUY9PXhQdHx8Rj09b09lO2lmKFJBKGkpKXJldHVybiBnSXQoaSxFKTtpZihGPT1rUHR8fEY9PXlQdHx8aiYmIXYpe2lmKGI9Q3x8aj97fTptSXQoaSksIUUpcmV0dXJuIEM/dkllKGksbEllKGIsaSkpOmdJZShpLHVJZShiLGkpKX1lbHNle2lmKCF1bFtGXSlyZXR1cm4gdj9pOnt9O2I9R0llKGksRixFKX19bXx8KG09bmV3IHRtKTt2YXIgUj1tLmdldChpKTtpZihSKXJldHVybiBSO20uc2V0KGksYiksSkllKGkpP2kuZm9yRWFjaChmdW5jdGlvbihydCl7Yi5hZGQoY1AocnQsYSxmLHJ0LGksbSkpfSk6WUllKGkpJiZpLmZvckVhY2goZnVuY3Rpb24ocnQsSil7Yi5zZXQoSixjUChydCxhLGYsSixpLG0pKX0pO3ZhciBIPUE/Qz93SWU6cWR0OkM/ZTk6RmIsWT1QP3ZvaWQgMDpIKGkpO3JldHVybiBvUHQoWXx8aSxmdW5jdGlvbihydCxKKXtZJiYoSj1ydCxydD1pW0pdKSx5VyhiLEosY1AocnQsYSxmLEosaSxtKSl9KSxifXZhciBDT2U9NDtmdW5jdGlvbiBTT2UoaSl7cmV0dXJuIGNQKGksQ09lKX12YXIgQU9lPTEsTE9lPTQ7ZnVuY3Rpb24gTU9lKGkpe3JldHVybiBjUChpLEFPZXxMT2UpfXZhciBET2U9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iO2Z1bmN0aW9uIElPZShpKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5zZXQoaSxET2UpLHRoaXN9ZnVuY3Rpb24gT09lKGkpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhpKX1mdW5jdGlvbiB1UChpKXt2YXIgYT0tMSxmPWk9PW51bGw/MDppLmxlbmd0aDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgeDU7KythPGY7KXRoaXMuYWRkKGlbYV0pfXVQLnByb3RvdHlwZS5hZGQ9dVAucHJvdG90eXBlLnB1c2g9SU9lLHVQLnByb3RvdHlwZS5oYXM9T09lO2Z1bmN0aW9uIE5PZShpLGEpe2Zvcih2YXIgZj0tMSxwPWk9PW51bGw/MDppLmxlbmd0aDsrK2Y8cDspaWYoYShpW2ZdLGYsaSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gRVB0KGksYSl7cmV0dXJuIGkuaGFzKGEpfXZhciBQT2U9MSxGT2U9MjtmdW5jdGlvbiBUUHQoaSxhLGYscCx2LG0pe3ZhciBiPWYmUE9lLEU9aS5sZW5ndGgsQz1hLmxlbmd0aDtpZihFIT1DJiYhKGImJkM+RSkpcmV0dXJuITE7dmFyIEE9bS5nZXQoaSksUD1tLmdldChhKTtpZihBJiZQKXJldHVybiBBPT1hJiZQPT1pO3ZhciBGPS0xLGo9ITAsUj1mJkZPZT9uZXcgdVA6dm9pZCAwO2ZvcihtLnNldChpLGEpLG0uc2V0KGEsaSk7KytGPEU7KXt2YXIgSD1pW0ZdLFk9YVtGXTtpZihwKXZhciBydD1iP3AoWSxILEYsYSxpLG0pOnAoSCxZLEYsaSxhLG0pO2lmKHJ0IT09dm9pZCAwKXtpZihydCljb250aW51ZTtqPSExO2JyZWFrfWlmKFIpe2lmKCFOT2UoYSxmdW5jdGlvbihKLGl0KXtpZighRVB0KFIsaXQpJiYoSD09PUp8fHYoSCxKLGYscCxtKSkpcmV0dXJuIFIucHVzaChpdCl9KSl7aj0hMTticmVha319ZWxzZSBpZighKEg9PT1ZfHx2KEgsWSxmLHAsbSkpKXtqPSExO2JyZWFrfX1yZXR1cm4gbS5kZWxldGUoaSksbS5kZWxldGUoYSksan1mdW5jdGlvbiBCT2UoaSl7dmFyIGE9LTEsZj1BcnJheShpLnNpemUpO3JldHVybiBpLmZvckVhY2goZnVuY3Rpb24ocCx2KXtmWysrYV09W3YscF19KSxmfWZ1bmN0aW9uIEhkdChpKXt2YXIgYT0tMSxmPUFycmF5KGkuc2l6ZSk7cmV0dXJuIGkuZm9yRWFjaChmdW5jdGlvbihwKXtmWysrYV09cH0pLGZ9dmFyIFJPZT0xLGpPZT0yLCRPZT0iW29iamVjdCBCb29sZWFuXSIsek9lPSJbb2JqZWN0IERhdGVdIixxT2U9IltvYmplY3QgRXJyb3JdIixIT2U9IltvYmplY3QgTWFwXSIsVk9lPSJbb2JqZWN0IE51bWJlcl0iLEdPZT0iW29iamVjdCBSZWdFeHBdIixVT2U9IltvYmplY3QgU2V0XSIsV09lPSJbb2JqZWN0IFN0cmluZ10iLEtPZT0iW29iamVjdCBTeW1ib2xdIixZT2U9IltvYmplY3QgQXJyYXlCdWZmZXJdIixYT2U9IltvYmplY3QgRGF0YVZpZXddIixfUHQ9UTI/UTIucHJvdG90eXBlOnZvaWQgMCxWZHQ9X1B0P19QdC52YWx1ZU9mOnZvaWQgMDtmdW5jdGlvbiBRT2UoaSxhLGYscCx2LG0sYil7c3dpdGNoKGYpe2Nhc2UgWE9lOmlmKGkuYnl0ZUxlbmd0aCE9YS5ieXRlTGVuZ3RofHxpLmJ5dGVPZmZzZXQhPWEuYnl0ZU9mZnNldClyZXR1cm4hMTtpPWkuYnVmZmVyLGE9YS5idWZmZXI7Y2FzZSBZT2U6cmV0dXJuIShpLmJ5dGVMZW5ndGghPWEuYnl0ZUxlbmd0aHx8IW0obmV3IGJXKGkpLG5ldyBiVyhhKSkpO2Nhc2UgJE9lOmNhc2Ugek9lOmNhc2UgVk9lOnJldHVybiBQQSgraSwrYSk7Y2FzZSBxT2U6cmV0dXJuIGkubmFtZT09YS5uYW1lJiZpLm1lc3NhZ2U9PWEubWVzc2FnZTtjYXNlIEdPZTpjYXNlIFdPZTpyZXR1cm4gaT09YSsiIjtjYXNlIEhPZTp2YXIgRT1CT2U7Y2FzZSBVT2U6dmFyIEM9cCZST2U7aWYoRXx8KEU9SGR0KSxpLnNpemUhPWEuc2l6ZSYmIUMpcmV0dXJuITE7dmFyIEE9Yi5nZXQoaSk7aWYoQSlyZXR1cm4gQT09YTtwfD1qT2UsYi5zZXQoaSxhKTt2YXIgUD1UUHQoRShpKSxFKGEpLHAsdixtLGIpO3JldHVybiBiLmRlbGV0ZShpKSxQO2Nhc2UgS09lOmlmKFZkdClyZXR1cm4gVmR0LmNhbGwoaSk9PVZkdC5jYWxsKGEpfXJldHVybiExfXZhciBaT2U9MSxKT2U9T2JqZWN0LnByb3RvdHlwZSx0TmU9Sk9lLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIGVOZShpLGEsZixwLHYsbSl7dmFyIGI9ZiZaT2UsRT1xZHQoaSksQz1FLmxlbmd0aCxBPXFkdChhKSxQPUEubGVuZ3RoO2lmKEMhPVAmJiFiKXJldHVybiExO2Zvcih2YXIgRj1DO0YtLTspe3ZhciBqPUVbRl07aWYoIShiP2ogaW4gYTp0TmUuY2FsbChhLGopKSlyZXR1cm4hMX12YXIgUj1tLmdldChpKSxIPW0uZ2V0KGEpO2lmKFImJkgpcmV0dXJuIFI9PWEmJkg9PWk7dmFyIFk9ITA7bS5zZXQoaSxhKSxtLnNldChhLGkpO2Zvcih2YXIgcnQ9YjsrK0Y8Qzspe2o9RVtGXTt2YXIgSj1pW2pdLGl0PWFbal07aWYocCl2YXIgZnQ9Yj9wKGl0LEosaixhLGksbSk6cChKLGl0LGosaSxhLG0pO2lmKCEoZnQ9PT12b2lkIDA/Sj09PWl0fHx2KEosaXQsZixwLG0pOmZ0KSl7WT0hMTticmVha31ydHx8KHJ0PWo9PSJjb25zdHJ1Y3RvciIpfWlmKFkmJiFydCl7dmFyIFR0PWkuY29uc3RydWN0b3Isa3Q9YS5jb25zdHJ1Y3RvcjtUdCE9a3QmJiJjb25zdHJ1Y3RvciJpbiBpJiYiY29uc3RydWN0b3IiaW4gYSYmISh0eXBlb2YgVHQ9PSJmdW5jdGlvbiImJlR0IGluc3RhbmNlb2YgVHQmJnR5cGVvZiBrdD09ImZ1bmN0aW9uIiYma3QgaW5zdGFuY2VvZiBrdCkmJihZPSExKX1yZXR1cm4gbS5kZWxldGUoaSksbS5kZWxldGUoYSksWX12YXIgbk5lPTEsQ1B0PSJbb2JqZWN0IEFyZ3VtZW50c10iLFNQdD0iW29iamVjdCBBcnJheV0iLGNLPSJbb2JqZWN0IE9iamVjdF0iLHJOZT1PYmplY3QucHJvdG90eXBlLEFQdD1yTmUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gaU5lKGksYSxmLHAsdixtKXt2YXIgYj1PZihpKSxFPU9mKGEpLEM9Yj9TUHQ6WEEoaSksQT1FP1NQdDpYQShhKTtDPUM9PUNQdD9jSzpDLEE9QT09Q1B0P2NLOkE7dmFyIFA9Qz09Y0ssRj1BPT1jSyxqPUM9PUE7aWYoaiYmUkEoaSkpe2lmKCFSQShhKSlyZXR1cm4hMTtiPSEwLFA9ITF9aWYoaiYmIVApcmV0dXJuIG18fChtPW5ldyB0bSksYnx8bVcoaSk/VFB0KGksYSxmLHAsdixtKTpRT2UoaSxhLEMsZixwLHYsbSk7aWYoIShmJm5OZSkpe3ZhciBSPVAmJkFQdC5jYWxsKGksIl9fd3JhcHBlZF9fIiksSD1GJiZBUHQuY2FsbChhLCJfX3dyYXBwZWRfXyIpO2lmKFJ8fEgpe3ZhciBZPVI/aS52YWx1ZSgpOmkscnQ9SD9hLnZhbHVlKCk6YTtyZXR1cm4gbXx8KG09bmV3IHRtKSx2KFkscnQsZixwLG0pfX1yZXR1cm4gaj8obXx8KG09bmV3IHRtKSxlTmUoaSxhLGYscCx2LG0pKTohMX1mdW5jdGlvbiBHZHQoaSxhLGYscCx2KXtyZXR1cm4gaT09PWE/ITA6aT09bnVsbHx8YT09bnVsbHx8IWwzKGkpJiYhbDMoYSk/aSE9PWkmJmEhPT1hOmlOZShpLGEsZixwLEdkdCx2KX12YXIgc05lPTEsYU5lPTI7ZnVuY3Rpb24gb05lKGksYSxmLHApe3ZhciB2PWYubGVuZ3RoLG09dixiPSFwO2lmKGk9PW51bGwpcmV0dXJuIW07Zm9yKGk9T2JqZWN0KGkpO3YtLTspe3ZhciBFPWZbdl07aWYoYiYmRVsyXT9FWzFdIT09aVtFWzBdXTohKEVbMF1pbiBpKSlyZXR1cm4hMX1mb3IoOysrdjxtOyl7RT1mW3ZdO3ZhciBDPUVbMF0sQT1pW0NdLFA9RVsxXTtpZihiJiZFWzJdKXtpZihBPT09dm9pZCAwJiYhKEMgaW4gaSkpcmV0dXJuITF9ZWxzZXt2YXIgRj1uZXcgdG07aWYocCl2YXIgaj1wKEEsUCxDLGksYSxGKTtpZighKGo9PT12b2lkIDA/R2R0KFAsQSxzTmV8YU5lLHAsRik6aikpcmV0dXJuITF9fXJldHVybiEwfWZ1bmN0aW9uIExQdChpKXtyZXR1cm4gaT09PWkmJiFPYihpKX1mdW5jdGlvbiBjTmUoaSl7Zm9yKHZhciBhPUZiKGkpLGY9YS5sZW5ndGg7Zi0tOyl7dmFyIHA9YVtmXSx2PWlbcF07YVtmXT1bcCx2LExQdCh2KV19cmV0dXJuIGF9ZnVuY3Rpb24gTVB0KGksYSl7cmV0dXJuIGZ1bmN0aW9uKGYpe3JldHVybiBmPT1udWxsPyExOmZbaV09PT1hJiYoYSE9PXZvaWQgMHx8aSBpbiBPYmplY3QoZikpfX1mdW5jdGlvbiB1TmUoaSl7dmFyIGE9Y05lKGkpO3JldHVybiBhLmxlbmd0aD09MSYmYVswXVsyXT9NUHQoYVswXVswXSxhWzBdWzFdKTpmdW5jdGlvbihmKXtyZXR1cm4gZj09PWl8fG9OZShmLGksYSl9fWZ1bmN0aW9uIGxOZShpLGEpe3JldHVybiBpIT1udWxsJiZhIGluIE9iamVjdChpKX1mdW5jdGlvbiBEUHQoaSxhLGYpe2E9c0soYSxpKTtmb3IodmFyIHA9LTEsdj1hLmxlbmd0aCxtPSExOysrcDx2Oyl7dmFyIGI9b1AoYVtwXSk7aWYoIShtPWkhPW51bGwmJmYoaSxiKSkpYnJlYWs7aT1pW2JdfXJldHVybiBtfHwrK3AhPXY/bToodj1pPT1udWxsPzA6aS5sZW5ndGgsISF2JiZaMXQodikmJnhXKGIsdikmJihPZihpKXx8QkEoaSkpKX1mdW5jdGlvbiBJUHQoaSxhKXtyZXR1cm4gaSE9bnVsbCYmRFB0KGksYSxsTmUpfXZhciBoTmU9MSxmTmU9MjtmdW5jdGlvbiBkTmUoaSxhKXtyZXR1cm4gamR0KGkpJiZMUHQoYSk/TVB0KG9QKGkpLGEpOmZ1bmN0aW9uKGYpe3ZhciBwPXNJZShmLGkpO3JldHVybiBwPT09dm9pZCAwJiZwPT09YT9JUHQoZixpKTpHZHQoYSxwLGhOZXxmTmUpfX1mdW5jdGlvbiBnTmUoaSl7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsP3ZvaWQgMDphW2ldfX1mdW5jdGlvbiBwTmUoaSl7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBhSyhhLGkpfX1mdW5jdGlvbiBiTmUoaSl7cmV0dXJuIGpkdChpKT9nTmUob1AoaSkpOnBOZShpKX1mdW5jdGlvbiBhayhpKXtyZXR1cm4gdHlwZW9mIGk9PSJmdW5jdGlvbiI/aTppPT1udWxsP245OnR5cGVvZiBpPT0ib2JqZWN0Ij9PZihpKT9kTmUoaVswXSxpWzFdKTp1TmUoaSk6Yk5lKGkpfWZ1bmN0aW9uIFVkdChpLGEpe3JldHVybiBpJiZZMXQoaSxhLEZiKX1mdW5jdGlvbiB2TmUoaSxhKXtyZXR1cm4gZnVuY3Rpb24oZixwKXtpZihmPT1udWxsKXJldHVybiBmO2lmKCF0ayhmKSlyZXR1cm4gaShmLHApO2Zvcih2YXIgdj1mLmxlbmd0aCxtPWE/djotMSxiPU9iamVjdChmKTsoYT9tLS06KyttPHYpJiZwKGJbbV0sbSxiKSE9PSExOyk7cmV0dXJuIGZ9fXZhciB3TmU9dk5lKFVkdCk7Y29uc3QgdUs9d05lO3ZhciBtTmU9ZnVuY3Rpb24oKXtyZXR1cm4gSncuRGF0ZS5ub3coKX07Y29uc3QgT1B0PW1OZTt2YXIgTlB0PU9iamVjdC5wcm90b3R5cGUseU5lPU5QdC5oYXNPd25Qcm9wZXJ0eSx4TmU9a1coZnVuY3Rpb24oaSxhKXtpPU9iamVjdChpKTt2YXIgZj0tMSxwPWEubGVuZ3RoLHY9cD4yP2FbMl06dm9pZCAwO2Zvcih2JiZLTihhWzBdLGFbMV0sdikmJihwPTEpOysrZjxwOylmb3IodmFyIG09YVtmXSxiPWU5KG0pLEU9LTEsQz1iLmxlbmd0aDsrK0U8Qzspe3ZhciBBPWJbRV0sUD1pW0FdOyhQPT09dm9pZCAwfHxQQShQLE5QdFtBXSkmJiF5TmUuY2FsbChpLEEpKSYmKGlbQV09bVtBXSl9cmV0dXJuIGl9KTtjb25zdCB0TD14TmU7ZnVuY3Rpb24ga05lKGksYSxmKXtmb3IodmFyIHA9LTEsdj1pPT1udWxsPzA6aS5sZW5ndGg7KytwPHY7KWlmKGYoYSxpW3BdKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBsSyhpKXt2YXIgYT1pPT1udWxsPzA6aS5sZW5ndGg7cmV0dXJuIGE/aVthLTFdOnZvaWQgMH1mdW5jdGlvbiBXZHQoaSl7cmV0dXJuIHR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6bjl9ZnVuY3Rpb24gY3IoaSxhKXt2YXIgZj1PZihpKT9vUHQ6dUs7cmV0dXJuIGYoaSxXZHQoYSkpfWZ1bmN0aW9uIEVOZShpLGEpe3ZhciBmPVtdO3JldHVybiB1SyhpLGZ1bmN0aW9uKHAsdixtKXthKHAsdixtKSYmZi5wdXNoKHApfSksZn1mdW5jdGlvbiBfNShpLGEpe3ZhciBmPU9mKGkpP2hQdDpFTmU7cmV0dXJuIGYoaSxhayhhKSl9ZnVuY3Rpb24gVE5lKGkpe3JldHVybiBmdW5jdGlvbihhLGYscCl7dmFyIHY9T2JqZWN0KGEpO2lmKCF0ayhhKSl7dmFyIG09YWsoZik7YT1GYihhKSxmPWZ1bmN0aW9uKEUpe3JldHVybiBtKHZbRV0sRSx2KX19dmFyIGI9aShhLGYscCk7cmV0dXJuIGI+LTE/dlttP2FbYl06Yl06dm9pZCAwfX12YXIgX05lPU1hdGgubWF4O2Z1bmN0aW9uIENOZShpLGEsZil7dmFyIHA9aT09bnVsbD8wOmkubGVuZ3RoO2lmKCFwKXJldHVybi0xO3ZhciB2PWY9PW51bGw/MDpWRGUoZik7cmV0dXJuIHY8MCYmKHY9X05lKHArdiwwKSksY1B0KGksYWsoYSksdil9dmFyIFNOZT1UTmUoQ05lKTtjb25zdCBLZHQ9U05lO2Z1bmN0aW9uIFBQdChpLGEpe3ZhciBmPS0xLHA9dGsoaSk/QXJyYXkoaS5sZW5ndGgpOltdO3JldHVybiB1SyhpLGZ1bmN0aW9uKHYsbSxiKXtwWysrZl09YSh2LG0sYil9KSxwfWZ1bmN0aW9uIEZmKGksYSl7dmFyIGY9T2YoaSk/WkE6UFB0O3JldHVybiBmKGksYWsoYSkpfWZ1bmN0aW9uIEFOZShpLGEpe3JldHVybiBpPT1udWxsP2k6WTF0KGksV2R0KGEpLGU5KX1mdW5jdGlvbiBMTmUoaSxhKXtyZXR1cm4gaSYmVWR0KGksV2R0KGEpKX1mdW5jdGlvbiBNTmUoaSxhKXtyZXR1cm4gaT5hfXZhciBETmU9T2JqZWN0LnByb3RvdHlwZSxJTmU9RE5lLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIE9OZShpLGEpe3JldHVybiBpIT1udWxsJiZJTmUuY2FsbChpLGEpfWZ1bmN0aW9uIFZhKGksYSl7cmV0dXJuIGkhPW51bGwmJkRQdChpLGEsT05lKX1mdW5jdGlvbiBOTmUoaSxhKXtyZXR1cm4gWkEoYSxmdW5jdGlvbihmKXtyZXR1cm4gaVtmXX0pfWZ1bmN0aW9uIEM1KGkpe3JldHVybiBpPT1udWxsP1tdOk5OZShpLEZiKGkpKX1mdW5jdGlvbiB0ZihpKXtyZXR1cm4gaT09PXZvaWQgMH1mdW5jdGlvbiBGUHQoaSxhKXtyZXR1cm4gaTxhfWZ1bmN0aW9uIGhLKGksYSl7dmFyIGY9e307cmV0dXJuIGE9YWsoYSksVWR0KGksZnVuY3Rpb24ocCx2LG0pe3BXKGYsdixhKHAsdixtKSl9KSxmfWZ1bmN0aW9uIFlkdChpLGEsZil7Zm9yKHZhciBwPS0xLHY9aS5sZW5ndGg7KytwPHY7KXt2YXIgbT1pW3BdLGI9YShtKTtpZihiIT1udWxsJiYoRT09PXZvaWQgMD9iPT09YiYmIWY5KGIpOmYoYixFKSkpdmFyIEU9YixDPW19cmV0dXJuIEN9ZnVuY3Rpb24gZDkoaSl7cmV0dXJuIGkmJmkubGVuZ3RoP1lkdChpLG45LE1OZSk6dm9pZCAwfWZ1bmN0aW9uIGxQKGkpe3JldHVybiBpJiZpLmxlbmd0aD9ZZHQoaSxuOSxGUHQpOnZvaWQgMH1mdW5jdGlvbiBYZHQoaSxhKXtyZXR1cm4gaSYmaS5sZW5ndGg/WWR0KGksYWsoYSksRlB0KTp2b2lkIDB9ZnVuY3Rpb24gUE5lKGksYSxmLHApe2lmKCFPYihpKSlyZXR1cm4gaTthPXNLKGEsaSk7Zm9yKHZhciB2PS0xLG09YS5sZW5ndGgsYj1tLTEsRT1pO0UhPW51bGwmJisrdjxtOyl7dmFyIEM9b1AoYVt2XSksQT1mO2lmKEM9PT0iX19wcm90b19fInx8Qz09PSJjb25zdHJ1Y3RvciJ8fEM9PT0icHJvdG90eXBlIilyZXR1cm4gaTtpZih2IT1iKXt2YXIgUD1FW0NdO0E9cD9wKFAsQyxFKTp2b2lkIDAsQT09PXZvaWQgMCYmKEE9T2IoUCk/UDp4VyhhW3YrMV0pP1tdOnt9KX15VyhFLEMsQSksRT1FW0NdfXJldHVybiBpfWZ1bmN0aW9uIEZOZShpLGEsZil7Zm9yKHZhciBwPS0xLHY9YS5sZW5ndGgsbT17fTsrK3A8djspe3ZhciBiPWFbcF0sRT1hSyhpLGIpO2YoRSxiKSYmUE5lKG0sc0soYixpKSxFKX1yZXR1cm4gbX1mdW5jdGlvbiBCTmUoaSxhKXt2YXIgZj1pLmxlbmd0aDtmb3IoaS5zb3J0KGEpO2YtLTspaVtmXT1pW2ZdLnZhbHVlO3JldHVybiBpfWZ1bmN0aW9uIFJOZShpLGEpe2lmKGkhPT1hKXt2YXIgZj1pIT09dm9pZCAwLHA9aT09PW51bGwsdj1pPT09aSxtPWY5KGkpLGI9YSE9PXZvaWQgMCxFPWE9PT1udWxsLEM9YT09PWEsQT1mOShhKTtpZighRSYmIUEmJiFtJiZpPmF8fG0mJmImJkMmJiFFJiYhQXx8cCYmYiYmQ3x8IWYmJkN8fCF2KXJldHVybiAxO2lmKCFwJiYhbSYmIUEmJmk8YXx8QSYmZiYmdiYmIXAmJiFtfHxFJiZmJiZ2fHwhYiYmdnx8IUMpcmV0dXJuLTF9cmV0dXJuIDB9ZnVuY3Rpb24gak5lKGksYSxmKXtmb3IodmFyIHA9LTEsdj1pLmNyaXRlcmlhLG09YS5jcml0ZXJpYSxiPXYubGVuZ3RoLEU9Zi5sZW5ndGg7KytwPGI7KXt2YXIgQz1STmUodltwXSxtW3BdKTtpZihDKXtpZihwPj1FKXJldHVybiBDO3ZhciBBPWZbcF07cmV0dXJuIEMqKEE9PSJkZXNjIj8tMToxKX19cmV0dXJuIGkuaW5kZXgtYS5pbmRleH1mdW5jdGlvbiAkTmUoaSxhLGYpe2EubGVuZ3RoP2E9WkEoYSxmdW5jdGlvbihtKXtyZXR1cm4gT2YobSk/ZnVuY3Rpb24oYil7cmV0dXJuIGFLKGIsbS5sZW5ndGg9PT0xP21bMF06bSl9Om19KTphPVtuOV07dmFyIHA9LTE7YT1aQShhLHdXKGFrKSk7dmFyIHY9UFB0KGksZnVuY3Rpb24obSxiLEUpe3ZhciBDPVpBKGEsZnVuY3Rpb24oQSl7cmV0dXJuIEEobSl9KTtyZXR1cm57Y3JpdGVyaWE6QyxpbmRleDorK3AsdmFsdWU6bX19KTtyZXR1cm4gQk5lKHYsZnVuY3Rpb24obSxiKXtyZXR1cm4gak5lKG0sYixmKX0pfWZ1bmN0aW9uIHpOZShpLGEpe3JldHVybiBGTmUoaSxhLGZ1bmN0aW9uKGYscCl7cmV0dXJuIElQdChpLHApfSl9dmFyIHFOZT1vSWUoZnVuY3Rpb24oaSxhKXtyZXR1cm4gaT09bnVsbD97fTp6TmUoaSxhKX0pO2NvbnN0IGhQPXFOZTt2YXIgSE5lPU1hdGguY2VpbCxWTmU9TWF0aC5tYXg7ZnVuY3Rpb24gR05lKGksYSxmLHApe2Zvcih2YXIgdj0tMSxtPVZOZShITmUoKGEtaSkvKGZ8fDEpKSwwKSxiPUFycmF5KG0pO20tLTspYltwP206Kyt2XT1pLGkrPWY7cmV0dXJuIGJ9ZnVuY3Rpb24gVU5lKGkpe3JldHVybiBmdW5jdGlvbihhLGYscCl7cmV0dXJuIHAmJnR5cGVvZiBwIT0ibnVtYmVyIiYmS04oYSxmLHApJiYoZj1wPXZvaWQgMCksYT1pSyhhKSxmPT09dm9pZCAwPyhmPWEsYT0wKTpmPWlLKGYpLHA9cD09PXZvaWQgMD9hPGY/MTotMTppSyhwKSxHTmUoYSxmLHAsaSl9fXZhciBXTmU9VU5lKCk7Y29uc3QgZzk9V05lO2Z1bmN0aW9uIEtOZShpLGEsZixwLHYpe3JldHVybiB2KGksZnVuY3Rpb24obSxiLEUpe2Y9cD8ocD0hMSxtKTphKGYsbSxiLEUpfSksZn1mdW5jdGlvbiBmUChpLGEsZil7dmFyIHA9T2YoaSk/Y0llOktOZSx2PWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gcChpLGFrKGEpLGYsdix1Syl9dmFyIFlOZT1rVyhmdW5jdGlvbihpLGEpe2lmKGk9PW51bGwpcmV0dXJuW107dmFyIGY9YS5sZW5ndGg7cmV0dXJuIGY+MSYmS04oaSxhWzBdLGFbMV0pP2E9W106Zj4yJiZLTihhWzBdLGFbMV0sYVsyXSkmJihhPVthWzBdXSksJE5lKGksb0soYSwxKSxbXSl9KTtjb25zdCBkUD1ZTmU7dmFyIFhOZT0xLzAsUU5lPVlBJiYxL0hkdChuZXcgWUEoWywtMF0pKVsxXT09WE5lP2Z1bmN0aW9uKGkpe3JldHVybiBuZXcgWUEoaSl9OkdEZTtjb25zdCBaTmU9UU5lO3ZhciBKTmU9MjAwO2Z1bmN0aW9uIHRQZShpLGEsZil7dmFyIHA9LTEsdj1ZRGUsbT1pLmxlbmd0aCxiPSEwLEU9W10sQz1FO2lmKGYpYj0hMSx2PWtOZTtlbHNlIGlmKG0+PUpOZSl7dmFyIEE9YT9udWxsOlpOZShpKTtpZihBKXJldHVybiBIZHQoQSk7Yj0hMSx2PUVQdCxDPW5ldyB1UH1lbHNlIEM9YT9bXTpFO3Q6Zm9yKDsrK3A8bTspe3ZhciBQPWlbcF0sRj1hP2EoUCk6UDtpZihQPWZ8fFAhPT0wP1A6MCxiJiZGPT09Ril7Zm9yKHZhciBqPUMubGVuZ3RoO2otLTspaWYoQ1tqXT09PUYpY29udGludWUgdDthJiZDLnB1c2goRiksRS5wdXNoKFApfWVsc2UgdihDLEYsZil8fChDIT09RSYmQy5wdXNoKEYpLEUucHVzaChQKSl9cmV0dXJuIEV9dmFyIGVQZT1rVyhmdW5jdGlvbihpKXtyZXR1cm4gdFBlKG9LKGksMSxrSXQsITApKX0pO2NvbnN0IG5QZT1lUGU7dmFyIHJQZT0wO2Z1bmN0aW9uIGZLKGkpe3ZhciBhPSsrclBlO3JldHVybiB1UHQoaSkrYX1mdW5jdGlvbiBpUGUoaSxhLGYpe2Zvcih2YXIgcD0tMSx2PWkubGVuZ3RoLG09YS5sZW5ndGgsYj17fTsrK3A8djspe3ZhciBFPXA8bT9hW3BdOnZvaWQgMDtmKGIsaVtwXSxFKX1yZXR1cm4gYn1mdW5jdGlvbiBzUGUoaSxhKXtyZXR1cm4gaVBlKGl8fFtdLGF8fFtdLHlXKX12YXIgYVBlPSJcMCIscDk9IlwwIixCUHQ9IgEiO2NsYXNzIGwxe2NvbnN0cnVjdG9yKGE9e30pe3RoaXMuX2lzRGlyZWN0ZWQ9VmEoYSwiZGlyZWN0ZWQiKT9hLmRpcmVjdGVkOiEwLHRoaXMuX2lzTXVsdGlncmFwaD1WYShhLCJtdWx0aWdyYXBoIik/YS5tdWx0aWdyYXBoOiExLHRoaXMuX2lzQ29tcG91bmQ9VmEoYSwiY29tcG91bmQiKT9hLmNvbXBvdW5kOiExLHRoaXMuX2xhYmVsPXZvaWQgMCx0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm49JEEodm9pZCAwKSx0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm49JEEodm9pZCAwKSx0aGlzLl9ub2Rlcz17fSx0aGlzLl9pc0NvbXBvdW5kJiYodGhpcy5fcGFyZW50PXt9LHRoaXMuX2NoaWxkcmVuPXt9LHRoaXMuX2NoaWxkcmVuW3A5XT17fSksdGhpcy5faW49e30sdGhpcy5fcHJlZHM9e30sdGhpcy5fb3V0PXt9LHRoaXMuX3N1Y3M9e30sdGhpcy5fZWRnZU9ianM9e30sdGhpcy5fZWRnZUxhYmVscz17fX1pc0RpcmVjdGVkKCl7cmV0dXJuIHRoaXMuX2lzRGlyZWN0ZWR9aXNNdWx0aWdyYXBoKCl7cmV0dXJuIHRoaXMuX2lzTXVsdGlncmFwaH1pc0NvbXBvdW5kKCl7cmV0dXJuIHRoaXMuX2lzQ29tcG91bmR9c2V0R3JhcGgoYSl7cmV0dXJuIHRoaXMuX2xhYmVsPWEsdGhpc31ncmFwaCgpe3JldHVybiB0aGlzLl9sYWJlbH1zZXREZWZhdWx0Tm9kZUxhYmVsKGEpe3JldHVybiBOQShhKXx8KGE9JEEoYSkpLHRoaXMuX2RlZmF1bHROb2RlTGFiZWxGbj1hLHRoaXN9bm9kZUNvdW50KCl7cmV0dXJuIHRoaXMuX25vZGVDb3VudH1ub2Rlcygpe3JldHVybiBGYih0aGlzLl9ub2Rlcyl9c291cmNlcygpe3ZhciBhPXRoaXM7cmV0dXJuIF81KHRoaXMubm9kZXMoKSxmdW5jdGlvbihmKXtyZXR1cm4gZVAoYS5faW5bZl0pfSl9c2lua3MoKXt2YXIgYT10aGlzO3JldHVybiBfNSh0aGlzLm5vZGVzKCksZnVuY3Rpb24oZil7cmV0dXJuIGVQKGEuX291dFtmXSl9KX1zZXROb2RlcyhhLGYpe3ZhciBwPWFyZ3VtZW50cyx2PXRoaXM7cmV0dXJuIGNyKGEsZnVuY3Rpb24obSl7cC5sZW5ndGg+MT92LnNldE5vZGUobSxmKTp2LnNldE5vZGUobSl9KSx0aGlzfXNldE5vZGUoYSxmKXtyZXR1cm4gVmEodGhpcy5fbm9kZXMsYSk/KGFyZ3VtZW50cy5sZW5ndGg+MSYmKHRoaXMuX25vZGVzW2FdPWYpLHRoaXMpOih0aGlzLl9ub2Rlc1thXT1hcmd1bWVudHMubGVuZ3RoPjE/Zjp0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm4oYSksdGhpcy5faXNDb21wb3VuZCYmKHRoaXMuX3BhcmVudFthXT1wOSx0aGlzLl9jaGlsZHJlblthXT17fSx0aGlzLl9jaGlsZHJlbltwOV1bYV09ITApLHRoaXMuX2luW2FdPXt9LHRoaXMuX3ByZWRzW2FdPXt9LHRoaXMuX291dFthXT17fSx0aGlzLl9zdWNzW2FdPXt9LCsrdGhpcy5fbm9kZUNvdW50LHRoaXMpfW5vZGUoYSl7cmV0dXJuIHRoaXMuX25vZGVzW2FdfWhhc05vZGUoYSl7cmV0dXJuIFZhKHRoaXMuX25vZGVzLGEpfXJlbW92ZU5vZGUoYSl7dmFyIGY9dGhpcztpZihWYSh0aGlzLl9ub2RlcyxhKSl7dmFyIHA9ZnVuY3Rpb24odil7Zi5yZW1vdmVFZGdlKGYuX2VkZ2VPYmpzW3ZdKX07ZGVsZXRlIHRoaXMuX25vZGVzW2FdLHRoaXMuX2lzQ29tcG91bmQmJih0aGlzLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChhKSxkZWxldGUgdGhpcy5fcGFyZW50W2FdLGNyKHRoaXMuY2hpbGRyZW4oYSksZnVuY3Rpb24odil7Zi5zZXRQYXJlbnQodil9KSxkZWxldGUgdGhpcy5fY2hpbGRyZW5bYV0pLGNyKEZiKHRoaXMuX2luW2FdKSxwKSxkZWxldGUgdGhpcy5faW5bYV0sZGVsZXRlIHRoaXMuX3ByZWRzW2FdLGNyKEZiKHRoaXMuX291dFthXSkscCksZGVsZXRlIHRoaXMuX291dFthXSxkZWxldGUgdGhpcy5fc3Vjc1thXSwtLXRoaXMuX25vZGVDb3VudH1yZXR1cm4gdGhpc31zZXRQYXJlbnQoYSxmKXtpZighdGhpcy5faXNDb21wb3VuZCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgcGFyZW50IGluIGEgbm9uLWNvbXBvdW5kIGdyYXBoIik7aWYodGYoZikpZj1wOTtlbHNle2YrPSIiO2Zvcih2YXIgcD1mOyF0ZihwKTtwPXRoaXMucGFyZW50KHApKWlmKHA9PT1hKXRocm93IG5ldyBFcnJvcigiU2V0dGluZyAiK2YrIiBhcyBwYXJlbnQgb2YgIithKyIgd291bGQgY3JlYXRlIGEgY3ljbGUiKTt0aGlzLnNldE5vZGUoZil9cmV0dXJuIHRoaXMuc2V0Tm9kZShhKSx0aGlzLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChhKSx0aGlzLl9wYXJlbnRbYV09Zix0aGlzLl9jaGlsZHJlbltmXVthXT0hMCx0aGlzfV9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChhKXtkZWxldGUgdGhpcy5fY2hpbGRyZW5bdGhpcy5fcGFyZW50W2FdXVthXX1wYXJlbnQoYSl7aWYodGhpcy5faXNDb21wb3VuZCl7dmFyIGY9dGhpcy5fcGFyZW50W2FdO2lmKGYhPT1wOSlyZXR1cm4gZn19Y2hpbGRyZW4oYSl7aWYodGYoYSkmJihhPXA5KSx0aGlzLl9pc0NvbXBvdW5kKXt2YXIgZj10aGlzLl9jaGlsZHJlblthXTtpZihmKXJldHVybiBGYihmKX1lbHNle2lmKGE9PT1wOSlyZXR1cm4gdGhpcy5ub2RlcygpO2lmKHRoaXMuaGFzTm9kZShhKSlyZXR1cm5bXX19cHJlZGVjZXNzb3JzKGEpe3ZhciBmPXRoaXMuX3ByZWRzW2FdO2lmKGYpcmV0dXJuIEZiKGYpfXN1Y2Nlc3NvcnMoYSl7dmFyIGY9dGhpcy5fc3Vjc1thXTtpZihmKXJldHVybiBGYihmKX1uZWlnaGJvcnMoYSl7dmFyIGY9dGhpcy5wcmVkZWNlc3NvcnMoYSk7aWYoZilyZXR1cm4gblBlKGYsdGhpcy5zdWNjZXNzb3JzKGEpKX1pc0xlYWYoYSl7dmFyIGY7cmV0dXJuIHRoaXMuaXNEaXJlY3RlZCgpP2Y9dGhpcy5zdWNjZXNzb3JzKGEpOmY9dGhpcy5uZWlnaGJvcnMoYSksZi5sZW5ndGg9PT0wfWZpbHRlck5vZGVzKGEpe3ZhciBmPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHtkaXJlY3RlZDp0aGlzLl9pc0RpcmVjdGVkLG11bHRpZ3JhcGg6dGhpcy5faXNNdWx0aWdyYXBoLGNvbXBvdW5kOnRoaXMuX2lzQ29tcG91bmR9KTtmLnNldEdyYXBoKHRoaXMuZ3JhcGgoKSk7dmFyIHA9dGhpcztjcih0aGlzLl9ub2RlcyxmdW5jdGlvbihiLEUpe2EoRSkmJmYuc2V0Tm9kZShFLGIpfSksY3IodGhpcy5fZWRnZU9ianMsZnVuY3Rpb24oYil7Zi5oYXNOb2RlKGIudikmJmYuaGFzTm9kZShiLncpJiZmLnNldEVkZ2UoYixwLmVkZ2UoYikpfSk7dmFyIHY9e307ZnVuY3Rpb24gbShiKXt2YXIgRT1wLnBhcmVudChiKTtyZXR1cm4gRT09PXZvaWQgMHx8Zi5oYXNOb2RlKEUpPyh2W2JdPUUsRSk6RSBpbiB2P3ZbRV06bShFKX1yZXR1cm4gdGhpcy5faXNDb21wb3VuZCYmY3IoZi5ub2RlcygpLGZ1bmN0aW9uKGIpe2Yuc2V0UGFyZW50KGIsbShiKSl9KSxmfXNldERlZmF1bHRFZGdlTGFiZWwoYSl7cmV0dXJuIE5BKGEpfHwoYT0kQShhKSksdGhpcy5fZGVmYXVsdEVkZ2VMYWJlbEZuPWEsdGhpc31lZGdlQ291bnQoKXtyZXR1cm4gdGhpcy5fZWRnZUNvdW50fWVkZ2VzKCl7cmV0dXJuIEM1KHRoaXMuX2VkZ2VPYmpzKX1zZXRQYXRoKGEsZil7dmFyIHA9dGhpcyx2PWFyZ3VtZW50cztyZXR1cm4gZlAoYSxmdW5jdGlvbihtLGIpe3JldHVybiB2Lmxlbmd0aD4xP3Auc2V0RWRnZShtLGIsZik6cC5zZXRFZGdlKG0sYiksYn0pLHRoaXN9c2V0RWRnZSgpe3ZhciBhLGYscCx2LG09ITEsYj1hcmd1bWVudHNbMF07dHlwZW9mIGI9PSJvYmplY3QiJiZiIT09bnVsbCYmInYiaW4gYj8oYT1iLnYsZj1iLncscD1iLm5hbWUsYXJndW1lbnRzLmxlbmd0aD09PTImJih2PWFyZ3VtZW50c1sxXSxtPSEwKSk6KGE9YixmPWFyZ3VtZW50c1sxXSxwPWFyZ3VtZW50c1szXSxhcmd1bWVudHMubGVuZ3RoPjImJih2PWFyZ3VtZW50c1syXSxtPSEwKSksYT0iIithLGY9IiIrZix0ZihwKXx8KHA9IiIrcCk7dmFyIEU9Z1AodGhpcy5faXNEaXJlY3RlZCxhLGYscCk7aWYoVmEodGhpcy5fZWRnZUxhYmVscyxFKSlyZXR1cm4gbSYmKHRoaXMuX2VkZ2VMYWJlbHNbRV09diksdGhpcztpZighdGYocCkmJiF0aGlzLl9pc011bHRpZ3JhcGgpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0IGEgbmFtZWQgZWRnZSB3aGVuIGlzTXVsdGlncmFwaCA9IGZhbHNlIik7dGhpcy5zZXROb2RlKGEpLHRoaXMuc2V0Tm9kZShmKSx0aGlzLl9lZGdlTGFiZWxzW0VdPW0/djp0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm4oYSxmLHApO3ZhciBDPW9QZSh0aGlzLl9pc0RpcmVjdGVkLGEsZixwKTtyZXR1cm4gYT1DLnYsZj1DLncsT2JqZWN0LmZyZWV6ZShDKSx0aGlzLl9lZGdlT2Jqc1tFXT1DLFJQdCh0aGlzLl9wcmVkc1tmXSxhKSxSUHQodGhpcy5fc3Vjc1thXSxmKSx0aGlzLl9pbltmXVtFXT1DLHRoaXMuX291dFthXVtFXT1DLHRoaXMuX2VkZ2VDb3VudCsrLHRoaXN9ZWRnZShhLGYscCl7dmFyIHY9YXJndW1lbnRzLmxlbmd0aD09PTE/UWR0KHRoaXMuX2lzRGlyZWN0ZWQsYXJndW1lbnRzWzBdKTpnUCh0aGlzLl9pc0RpcmVjdGVkLGEsZixwKTtyZXR1cm4gdGhpcy5fZWRnZUxhYmVsc1t2XX1oYXNFZGdlKGEsZixwKXt2YXIgdj1hcmd1bWVudHMubGVuZ3RoPT09MT9RZHQodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOmdQKHRoaXMuX2lzRGlyZWN0ZWQsYSxmLHApO3JldHVybiBWYSh0aGlzLl9lZGdlTGFiZWxzLHYpfXJlbW92ZUVkZ2UoYSxmLHApe3ZhciB2PWFyZ3VtZW50cy5sZW5ndGg9PT0xP1FkdCh0aGlzLl9pc0RpcmVjdGVkLGFyZ3VtZW50c1swXSk6Z1AodGhpcy5faXNEaXJlY3RlZCxhLGYscCksbT10aGlzLl9lZGdlT2Jqc1t2XTtyZXR1cm4gbSYmKGE9bS52LGY9bS53LGRlbGV0ZSB0aGlzLl9lZGdlTGFiZWxzW3ZdLGRlbGV0ZSB0aGlzLl9lZGdlT2Jqc1t2XSxqUHQodGhpcy5fcHJlZHNbZl0sYSksalB0KHRoaXMuX3N1Y3NbYV0sZiksZGVsZXRlIHRoaXMuX2luW2ZdW3ZdLGRlbGV0ZSB0aGlzLl9vdXRbYV1bdl0sdGhpcy5fZWRnZUNvdW50LS0pLHRoaXN9aW5FZGdlcyhhLGYpe3ZhciBwPXRoaXMuX2luW2FdO2lmKHApe3ZhciB2PUM1KHApO3JldHVybiBmP181KHYsZnVuY3Rpb24obSl7cmV0dXJuIG0udj09PWZ9KTp2fX1vdXRFZGdlcyhhLGYpe3ZhciBwPXRoaXMuX291dFthXTtpZihwKXt2YXIgdj1DNShwKTtyZXR1cm4gZj9fNSh2LGZ1bmN0aW9uKG0pe3JldHVybiBtLnc9PT1mfSk6dn19bm9kZUVkZ2VzKGEsZil7dmFyIHA9dGhpcy5pbkVkZ2VzKGEsZik7aWYocClyZXR1cm4gcC5jb25jYXQodGhpcy5vdXRFZGdlcyhhLGYpKX19bDEucHJvdG90eXBlLl9ub2RlQ291bnQ9MCxsMS5wcm90b3R5cGUuX2VkZ2VDb3VudD0wO2Z1bmN0aW9uIFJQdChpLGEpe2lbYV0/aVthXSsrOmlbYV09MX1mdW5jdGlvbiBqUHQoaSxhKXstLWlbYV18fGRlbGV0ZSBpW2FdfWZ1bmN0aW9uIGdQKGksYSxmLHApe3ZhciB2PSIiK2EsbT0iIitmO2lmKCFpJiZ2Pm0pe3ZhciBiPXY7dj1tLG09Yn1yZXR1cm4gditCUHQrbStCUHQrKHRmKHApP2FQZTpwKX1mdW5jdGlvbiBvUGUoaSxhLGYscCl7dmFyIHY9IiIrYSxtPSIiK2Y7aWYoIWkmJnY+bSl7dmFyIGI9djt2PW0sbT1ifXZhciBFPXt2LHc6bX07cmV0dXJuIHAmJihFLm5hbWU9cCksRX1mdW5jdGlvbiBRZHQoaSxhKXtyZXR1cm4gZ1AoaSxhLnYsYS53LGEubmFtZSl9Y2xhc3MgY1Ble2NvbnN0cnVjdG9yKCl7dmFyIGE9e307YS5fbmV4dD1hLl9wcmV2PWEsdGhpcy5fc2VudGluZWw9YX1kZXF1ZXVlKCl7dmFyIGE9dGhpcy5fc2VudGluZWwsZj1hLl9wcmV2O2lmKGYhPT1hKXJldHVybiAkUHQoZiksZn1lbnF1ZXVlKGEpe3ZhciBmPXRoaXMuX3NlbnRpbmVsO2EuX3ByZXYmJmEuX25leHQmJiRQdChhKSxhLl9uZXh0PWYuX25leHQsZi5fbmV4dC5fcHJldj1hLGYuX25leHQ9YSxhLl9wcmV2PWZ9dG9TdHJpbmcoKXtmb3IodmFyIGE9W10sZj10aGlzLl9zZW50aW5lbCxwPWYuX3ByZXY7cCE9PWY7KWEucHVzaChKU09OLnN0cmluZ2lmeShwLHVQZSkpLHA9cC5fcHJldjtyZXR1cm4iWyIrYS5qb2luKCIsICIpKyJdIn19ZnVuY3Rpb24gJFB0KGkpe2kuX3ByZXYuX25leHQ9aS5fbmV4dCxpLl9uZXh0Ll9wcmV2PWkuX3ByZXYsZGVsZXRlIGkuX25leHQsZGVsZXRlIGkuX3ByZXZ9ZnVuY3Rpb24gdVBlKGksYSl7aWYoaSE9PSJfbmV4dCImJmkhPT0iX3ByZXYiKXJldHVybiBhfXZhciBsUGU9JEEoMSk7ZnVuY3Rpb24gaFBlKGksYSl7aWYoaS5ub2RlQ291bnQoKTw9MSlyZXR1cm5bXTt2YXIgZj1kUGUoaSxhfHxsUGUpLHA9ZlBlKGYuZ3JhcGgsZi5idWNrZXRzLGYuemVyb0lkeCk7cmV0dXJuIEpBKEZmKHAsZnVuY3Rpb24odil7cmV0dXJuIGkub3V0RWRnZXModi52LHYudyl9KSl9ZnVuY3Rpb24gZlBlKGksYSxmKXtmb3IodmFyIHA9W10sdj1hW2EubGVuZ3RoLTFdLG09YVswXSxiO2kubm9kZUNvdW50KCk7KXtmb3IoO2I9bS5kZXF1ZXVlKCk7KVpkdChpLGEsZixiKTtmb3IoO2I9di5kZXF1ZXVlKCk7KVpkdChpLGEsZixiKTtpZihpLm5vZGVDb3VudCgpKXtmb3IodmFyIEU9YS5sZW5ndGgtMjtFPjA7LS1FKWlmKGI9YVtFXS5kZXF1ZXVlKCksYil7cD1wLmNvbmNhdChaZHQoaSxhLGYsYiwhMCkpO2JyZWFrfX19cmV0dXJuIHB9ZnVuY3Rpb24gWmR0KGksYSxmLHAsdil7dmFyIG09dj9bXTp2b2lkIDA7cmV0dXJuIGNyKGkuaW5FZGdlcyhwLnYpLGZ1bmN0aW9uKGIpe3ZhciBFPWkuZWRnZShiKSxDPWkubm9kZShiLnYpO3YmJm0ucHVzaCh7djpiLnYsdzpiLnd9KSxDLm91dC09RSxKZHQoYSxmLEMpfSksY3IoaS5vdXRFZGdlcyhwLnYpLGZ1bmN0aW9uKGIpe3ZhciBFPWkuZWRnZShiKSxDPWIudyxBPWkubm9kZShDKTtBLmluLT1FLEpkdChhLGYsQSl9KSxpLnJlbW92ZU5vZGUocC52KSxtfWZ1bmN0aW9uIGRQZShpLGEpe3ZhciBmPW5ldyBsMSxwPTAsdj0wO2NyKGkubm9kZXMoKSxmdW5jdGlvbihFKXtmLnNldE5vZGUoRSx7djpFLGluOjAsb3V0OjB9KX0pLGNyKGkuZWRnZXMoKSxmdW5jdGlvbihFKXt2YXIgQz1mLmVkZ2UoRS52LEUudyl8fDAsQT1hKEUpLFA9QytBO2Yuc2V0RWRnZShFLnYsRS53LFApLHY9TWF0aC5tYXgodixmLm5vZGUoRS52KS5vdXQrPUEpLHA9TWF0aC5tYXgocCxmLm5vZGUoRS53KS5pbis9QSl9KTt2YXIgbT1nOSh2K3ArMykubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBjUGV9KSxiPXArMTtyZXR1cm4gY3IoZi5ub2RlcygpLGZ1bmN0aW9uKEUpe0pkdChtLGIsZi5ub2RlKEUpKX0pLHtncmFwaDpmLGJ1Y2tldHM6bSx6ZXJvSWR4OmJ9fWZ1bmN0aW9uIEpkdChpLGEsZil7Zi5vdXQ/Zi5pbj9pW2Yub3V0LWYuaW4rYV0uZW5xdWV1ZShmKTppW2kubGVuZ3RoLTFdLmVucXVldWUoZik6aVswXS5lbnF1ZXVlKGYpfWZ1bmN0aW9uIGdQZShpKXt2YXIgYT1pLmdyYXBoKCkuYWN5Y2xpY2VyPT09ImdyZWVkeSI/aFBlKGksZihpKSk6cFBlKGkpO2NyKGEsZnVuY3Rpb24ocCl7dmFyIHY9aS5lZGdlKHApO2kucmVtb3ZlRWRnZShwKSx2LmZvcndhcmROYW1lPXAubmFtZSx2LnJldmVyc2VkPSEwLGkuc2V0RWRnZShwLncscC52LHYsZksoInJldiIpKX0pO2Z1bmN0aW9uIGYocCl7cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiBwLmVkZ2Uodikud2VpZ2h0fX19ZnVuY3Rpb24gcFBlKGkpe3ZhciBhPVtdLGY9e30scD17fTtmdW5jdGlvbiB2KG0pe1ZhKHAsbSl8fChwW21dPSEwLGZbbV09ITAsY3IoaS5vdXRFZGdlcyhtKSxmdW5jdGlvbihiKXtWYShmLGIudyk/YS5wdXNoKGIpOnYoYi53KX0pLGRlbGV0ZSBmW21dKX1yZXR1cm4gY3IoaS5ub2RlcygpLHYpLGF9ZnVuY3Rpb24gYlBlKGkpe2NyKGkuZWRnZXMoKSxmdW5jdGlvbihhKXt2YXIgZj1pLmVkZ2UoYSk7aWYoZi5yZXZlcnNlZCl7aS5yZW1vdmVFZGdlKGEpO3ZhciBwPWYuZm9yd2FyZE5hbWU7ZGVsZXRlIGYucmV2ZXJzZWQsZGVsZXRlIGYuZm9yd2FyZE5hbWUsaS5zZXRFZGdlKGEudyxhLnYsZixwKX19KX1mdW5jdGlvbiBlTChpLGEsZixwKXt2YXIgdjtkbyB2PWZLKHApO3doaWxlKGkuaGFzTm9kZSh2KSk7cmV0dXJuIGYuZHVtbXk9YSxpLnNldE5vZGUodixmKSx2fWZ1bmN0aW9uIHZQZShpKXt2YXIgYT1uZXcgbDEoKS5zZXRHcmFwaChpLmdyYXBoKCkpO3JldHVybiBjcihpLm5vZGVzKCksZnVuY3Rpb24oZil7YS5zZXROb2RlKGYsaS5ub2RlKGYpKX0pLGNyKGkuZWRnZXMoKSxmdW5jdGlvbihmKXt2YXIgcD1hLmVkZ2UoZi52LGYudyl8fHt3ZWlnaHQ6MCxtaW5sZW46MX0sdj1pLmVkZ2UoZik7YS5zZXRFZGdlKGYudixmLncse3dlaWdodDpwLndlaWdodCt2LndlaWdodCxtaW5sZW46TWF0aC5tYXgocC5taW5sZW4sdi5taW5sZW4pfSl9KSxhfWZ1bmN0aW9uIHpQdChpKXt2YXIgYT1uZXcgbDEoe211bHRpZ3JhcGg6aS5pc011bHRpZ3JhcGgoKX0pLnNldEdyYXBoKGkuZ3JhcGgoKSk7cmV0dXJuIGNyKGkubm9kZXMoKSxmdW5jdGlvbihmKXtpLmNoaWxkcmVuKGYpLmxlbmd0aHx8YS5zZXROb2RlKGYsaS5ub2RlKGYpKX0pLGNyKGkuZWRnZXMoKSxmdW5jdGlvbihmKXthLnNldEVkZ2UoZixpLmVkZ2UoZikpfSksYX1mdW5jdGlvbiBxUHQoaSxhKXt2YXIgZj1pLngscD1pLnksdj1hLngtZixtPWEueS1wLGI9aS53aWR0aC8yLEU9aS5oZWlnaHQvMjtpZighdiYmIW0pdGhyb3cgbmV3IEVycm9yKCJOb3QgcG9zc2libGUgdG8gZmluZCBpbnRlcnNlY3Rpb24gaW5zaWRlIG9mIHRoZSByZWN0YW5nbGUiKTt2YXIgQyxBO3JldHVybiBNYXRoLmFicyhtKSpiPk1hdGguYWJzKHYpKkU/KG08MCYmKEU9LUUpLEM9RSp2L20sQT1FKToodjwwJiYoYj0tYiksQz1iLEE9YiptL3YpLHt4OmYrQyx5OnArQX19ZnVuY3Rpb24gZEsoaSl7dmFyIGE9RmYoZzkoVlB0KGkpKzEpLGZ1bmN0aW9uKCl7cmV0dXJuW119KTtyZXR1cm4gY3IoaS5ub2RlcygpLGZ1bmN0aW9uKGYpe3ZhciBwPWkubm9kZShmKSx2PXAucmFuazt0Zih2KXx8KGFbdl1bcC5vcmRlcl09Zil9KSxhfWZ1bmN0aW9uIHdQZShpKXt2YXIgYT1sUChGZihpLm5vZGVzKCksZnVuY3Rpb24oZil7cmV0dXJuIGkubm9kZShmKS5yYW5rfSkpO2NyKGkubm9kZXMoKSxmdW5jdGlvbihmKXt2YXIgcD1pLm5vZGUoZik7VmEocCwicmFuayIpJiYocC5yYW5rLT1hKX0pfWZ1bmN0aW9uIG1QZShpKXt2YXIgYT1sUChGZihpLm5vZGVzKCksZnVuY3Rpb24obSl7cmV0dXJuIGkubm9kZShtKS5yYW5rfSkpLGY9W107Y3IoaS5ub2RlcygpLGZ1bmN0aW9uKG0pe3ZhciBiPWkubm9kZShtKS5yYW5rLWE7ZltiXXx8KGZbYl09W10pLGZbYl0ucHVzaChtKX0pO3ZhciBwPTAsdj1pLmdyYXBoKCkubm9kZVJhbmtGYWN0b3I7Y3IoZixmdW5jdGlvbihtLGIpe3RmKG0pJiZiJXYhPT0wPy0tcDpwJiZjcihtLGZ1bmN0aW9uKEUpe2kubm9kZShFKS5yYW5rKz1wfSl9KX1mdW5jdGlvbiBIUHQoaSxhLGYscCl7dmFyIHY9e3dpZHRoOjAsaGVpZ2h0OjB9O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj00JiYodi5yYW5rPWYsdi5vcmRlcj1wKSxlTChpLCJib3JkZXIiLHYsYSl9ZnVuY3Rpb24gVlB0KGkpe3JldHVybiBkOShGZihpLm5vZGVzKCksZnVuY3Rpb24oYSl7dmFyIGY9aS5ub2RlKGEpLnJhbms7aWYoIXRmKGYpKXJldHVybiBmfSkpfWZ1bmN0aW9uIHlQZShpLGEpe3ZhciBmPXtsaHM6W10scmhzOltdfTtyZXR1cm4gY3IoaSxmdW5jdGlvbihwKXthKHApP2YubGhzLnB1c2gocCk6Zi5yaHMucHVzaChwKX0pLGZ9ZnVuY3Rpb24geFBlKGksYSl7dmFyIGY9T1B0KCk7dHJ5e3JldHVybiBhKCl9ZmluYWxseXtjb25zb2xlLmxvZyhpKyIgdGltZTogIisoT1B0KCktZikrIm1zIil9fWZ1bmN0aW9uIGtQZShpLGEpe3JldHVybiBhKCl9ZnVuY3Rpb24gRVBlKGkpe2Z1bmN0aW9uIGEoZil7dmFyIHA9aS5jaGlsZHJlbihmKSx2PWkubm9kZShmKTtpZihwLmxlbmd0aCYmY3IocCxhKSxWYSh2LCJtaW5SYW5rIikpe3YuYm9yZGVyTGVmdD1bXSx2LmJvcmRlclJpZ2h0PVtdO2Zvcih2YXIgbT12Lm1pblJhbmssYj12Lm1heFJhbmsrMTttPGI7KyttKUdQdChpLCJib3JkZXJMZWZ0IiwiX2JsIixmLHYsbSksR1B0KGksImJvcmRlclJpZ2h0IiwiX2JyIixmLHYsbSl9fWNyKGkuY2hpbGRyZW4oKSxhKX1mdW5jdGlvbiBHUHQoaSxhLGYscCx2LG0pe3ZhciBiPXt3aWR0aDowLGhlaWdodDowLHJhbms6bSxib3JkZXJUeXBlOmF9LEU9dlthXVttLTFdLEM9ZUwoaSwiYm9yZGVyIixiLGYpO3ZbYV1bbV09QyxpLnNldFBhcmVudChDLHApLEUmJmkuc2V0RWRnZShFLEMse3dlaWdodDoxfSl9ZnVuY3Rpb24gVFBlKGkpe3ZhciBhPWkuZ3JhcGgoKS5yYW5rZGlyLnRvTG93ZXJDYXNlKCk7KGE9PT0ibHIifHxhPT09InJsIikmJlVQdChpKX1mdW5jdGlvbiBfUGUoaSl7dmFyIGE9aS5ncmFwaCgpLnJhbmtkaXIudG9Mb3dlckNhc2UoKTsoYT09PSJidCJ8fGE9PT0icmwiKSYmQ1BlKGkpLChhPT09ImxyInx8YT09PSJybCIpJiYoU1BlKGkpLFVQdChpKSl9ZnVuY3Rpb24gVVB0KGkpe2NyKGkubm9kZXMoKSxmdW5jdGlvbihhKXtXUHQoaS5ub2RlKGEpKX0pLGNyKGkuZWRnZXMoKSxmdW5jdGlvbihhKXtXUHQoaS5lZGdlKGEpKX0pfWZ1bmN0aW9uIFdQdChpKXt2YXIgYT1pLndpZHRoO2kud2lkdGg9aS5oZWlnaHQsaS5oZWlnaHQ9YX1mdW5jdGlvbiBDUGUoaSl7Y3IoaS5ub2RlcygpLGZ1bmN0aW9uKGEpe3QwdChpLm5vZGUoYSkpfSksY3IoaS5lZGdlcygpLGZ1bmN0aW9uKGEpe3ZhciBmPWkuZWRnZShhKTtjcihmLnBvaW50cyx0MHQpLFZhKGYsInkiKSYmdDB0KGYpfSl9ZnVuY3Rpb24gdDB0KGkpe2kueT0taS55fWZ1bmN0aW9uIFNQZShpKXtjcihpLm5vZGVzKCksZnVuY3Rpb24oYSl7ZTB0KGkubm9kZShhKSl9KSxjcihpLmVkZ2VzKCksZnVuY3Rpb24oYSl7dmFyIGY9aS5lZGdlKGEpO2NyKGYucG9pbnRzLGUwdCksVmEoZiwieCIpJiZlMHQoZil9KX1mdW5jdGlvbiBlMHQoaSl7dmFyIGE9aS54O2kueD1pLnksaS55PWF9ZnVuY3Rpb24gQVBlKGkpe2kuZ3JhcGgoKS5kdW1teUNoYWlucz1bXSxjcihpLmVkZ2VzKCksZnVuY3Rpb24oYSl7TFBlKGksYSl9KX1mdW5jdGlvbiBMUGUoaSxhKXt2YXIgZj1hLnYscD1pLm5vZGUoZikucmFuayx2PWEudyxtPWkubm9kZSh2KS5yYW5rLGI9YS5uYW1lLEU9aS5lZGdlKGEpLEM9RS5sYWJlbFJhbms7aWYobSE9PXArMSl7aS5yZW1vdmVFZGdlKGEpO3ZhciBBLFAsRjtmb3IoRj0wLCsrcDtwPG07KytGLCsrcClFLnBvaW50cz1bXSxQPXt3aWR0aDowLGhlaWdodDowLGVkZ2VMYWJlbDpFLGVkZ2VPYmo6YSxyYW5rOnB9LEE9ZUwoaSwiZWRnZSIsUCwiX2QiKSxwPT09QyYmKFAud2lkdGg9RS53aWR0aCxQLmhlaWdodD1FLmhlaWdodCxQLmR1bW15PSJlZGdlLWxhYmVsIixQLmxhYmVscG9zPUUubGFiZWxwb3MpLGkuc2V0RWRnZShmLEEse3dlaWdodDpFLndlaWdodH0sYiksRj09PTAmJmkuZ3JhcGgoKS5kdW1teUNoYWlucy5wdXNoKEEpLGY9QTtpLnNldEVkZ2UoZix2LHt3ZWlnaHQ6RS53ZWlnaHR9LGIpfX1mdW5jdGlvbiBNUGUoaSl7Y3IoaS5ncmFwaCgpLmR1bW15Q2hhaW5zLGZ1bmN0aW9uKGEpe3ZhciBmPWkubm9kZShhKSxwPWYuZWRnZUxhYmVsLHY7Zm9yKGkuc2V0RWRnZShmLmVkZ2VPYmoscCk7Zi5kdW1teTspdj1pLnN1Y2Nlc3NvcnMoYSlbMF0saS5yZW1vdmVOb2RlKGEpLHAucG9pbnRzLnB1c2goe3g6Zi54LHk6Zi55fSksZi5kdW1teT09PSJlZGdlLWxhYmVsIiYmKHAueD1mLngscC55PWYueSxwLndpZHRoPWYud2lkdGgscC5oZWlnaHQ9Zi5oZWlnaHQpLGE9dixmPWkubm9kZShhKX0pfWZ1bmN0aW9uIG4wdChpKXt2YXIgYT17fTtmdW5jdGlvbiBmKHApe3ZhciB2PWkubm9kZShwKTtpZihWYShhLHApKXJldHVybiB2LnJhbms7YVtwXT0hMDt2YXIgbT1sUChGZihpLm91dEVkZ2VzKHApLGZ1bmN0aW9uKGIpe3JldHVybiBmKGIudyktaS5lZGdlKGIpLm1pbmxlbn0pKTtyZXR1cm4obT09PU51bWJlci5QT1NJVElWRV9JTkZJTklUWXx8bT09PXZvaWQgMHx8bT09PW51bGwpJiYobT0wKSx2LnJhbms9bX1jcihpLnNvdXJjZXMoKSxmKX1mdW5jdGlvbiBwUChpLGEpe3JldHVybiBpLm5vZGUoYS53KS5yYW5rLWkubm9kZShhLnYpLnJhbmstaS5lZGdlKGEpLm1pbmxlbn1mdW5jdGlvbiBLUHQoaSl7dmFyIGE9bmV3IGwxKHtkaXJlY3RlZDohMX0pLGY9aS5ub2RlcygpWzBdLHA9aS5ub2RlQ291bnQoKTthLnNldE5vZGUoZix7fSk7Zm9yKHZhciB2LG07RFBlKGEsaSk8cDspdj1JUGUoYSxpKSxtPWEuaGFzTm9kZSh2LnYpP3BQKGksdik6LXBQKGksdiksT1BlKGEsaSxtKTtyZXR1cm4gYX1mdW5jdGlvbiBEUGUoaSxhKXtmdW5jdGlvbiBmKHApe2NyKGEubm9kZUVkZ2VzKHApLGZ1bmN0aW9uKHYpe3ZhciBtPXYudixiPXA9PT1tP3YudzptOyFpLmhhc05vZGUoYikmJiFwUChhLHYpJiYoaS5zZXROb2RlKGIse30pLGkuc2V0RWRnZShwLGIse30pLGYoYikpfSl9cmV0dXJuIGNyKGkubm9kZXMoKSxmKSxpLm5vZGVDb3VudCgpfWZ1bmN0aW9uIElQZShpLGEpe3JldHVybiBYZHQoYS5lZGdlcygpLGZ1bmN0aW9uKGYpe2lmKGkuaGFzTm9kZShmLnYpIT09aS5oYXNOb2RlKGYudykpcmV0dXJuIHBQKGEsZil9KX1mdW5jdGlvbiBPUGUoaSxhLGYpe2NyKGkubm9kZXMoKSxmdW5jdGlvbihwKXthLm5vZGUocCkucmFuays9Zn0pfWZ1bmN0aW9uIE5QZSgpe31OUGUucHJvdG90eXBlPW5ldyBFcnJvcjtmdW5jdGlvbiBZUHQoaSxhLGYpe09mKGEpfHwoYT1bYV0pO3ZhciBwPShpLmlzRGlyZWN0ZWQoKT9pLnN1Y2Nlc3NvcnM6aS5uZWlnaGJvcnMpLmJpbmQoaSksdj1bXSxtPXt9O3JldHVybiBjcihhLGZ1bmN0aW9uKGIpe2lmKCFpLmhhc05vZGUoYikpdGhyb3cgbmV3IEVycm9yKCJHcmFwaCBkb2VzIG5vdCBoYXZlIG5vZGU6ICIrYik7WFB0KGksYixmPT09InBvc3QiLG0scCx2KX0pLHZ9ZnVuY3Rpb24gWFB0KGksYSxmLHAsdixtKXtWYShwLGEpfHwocFthXT0hMCxmfHxtLnB1c2goYSksY3IodihhKSxmdW5jdGlvbihiKXtYUHQoaSxiLGYscCx2LG0pfSksZiYmbS5wdXNoKGEpKX1mdW5jdGlvbiBQUGUoaSxhKXtyZXR1cm4gWVB0KGksYSwicG9zdCIpfWZ1bmN0aW9uIEZQZShpLGEpe3JldHVybiBZUHQoaSxhLCJwcmUiKX1iOS5pbml0TG93TGltVmFsdWVzPWkwdCxiOS5pbml0Q3V0VmFsdWVzPXIwdCxiOS5jYWxjQ3V0VmFsdWU9UVB0LGI5LmxlYXZlRWRnZT1KUHQsYjkuZW50ZXJFZGdlPXRGdCxiOS5leGNoYW5nZUVkZ2VzPWVGdDtmdW5jdGlvbiBiOShpKXtpPXZQZShpKSxuMHQoaSk7dmFyIGE9S1B0KGkpO2kwdChhKSxyMHQoYSxpKTtmb3IodmFyIGYscDtmPUpQdChhKTspcD10RnQoYSxpLGYpLGVGdChhLGksZixwKX1mdW5jdGlvbiByMHQoaSxhKXt2YXIgZj1QUGUoaSxpLm5vZGVzKCkpO2Y9Zi5zbGljZSgwLGYubGVuZ3RoLTEpLGNyKGYsZnVuY3Rpb24ocCl7QlBlKGksYSxwKX0pfWZ1bmN0aW9uIEJQZShpLGEsZil7dmFyIHA9aS5ub2RlKGYpLHY9cC5wYXJlbnQ7aS5lZGdlKGYsdikuY3V0dmFsdWU9UVB0KGksYSxmKX1mdW5jdGlvbiBRUHQoaSxhLGYpe3ZhciBwPWkubm9kZShmKSx2PXAucGFyZW50LG09ITAsYj1hLmVkZ2UoZix2KSxFPTA7cmV0dXJuIGJ8fChtPSExLGI9YS5lZGdlKHYsZikpLEU9Yi53ZWlnaHQsY3IoYS5ub2RlRWRnZXMoZiksZnVuY3Rpb24oQyl7dmFyIEE9Qy52PT09ZixQPUE/Qy53OkMudjtpZihQIT09dil7dmFyIEY9QT09PW0saj1hLmVkZ2UoQykud2VpZ2h0O2lmKEUrPUY/ajotaixqUGUoaSxmLFApKXt2YXIgUj1pLmVkZ2UoZixQKS5jdXR2YWx1ZTtFKz1GPy1SOlJ9fX0pLEV9ZnVuY3Rpb24gaTB0KGksYSl7YXJndW1lbnRzLmxlbmd0aDwyJiYoYT1pLm5vZGVzKClbMF0pLFpQdChpLHt9LDEsYSl9ZnVuY3Rpb24gWlB0KGksYSxmLHAsdil7dmFyIG09ZixiPWkubm9kZShwKTtyZXR1cm4gYVtwXT0hMCxjcihpLm5laWdoYm9ycyhwKSxmdW5jdGlvbihFKXtWYShhLEUpfHwoZj1aUHQoaSxhLGYsRSxwKSl9KSxiLmxvdz1tLGIubGltPWYrKyx2P2IucGFyZW50PXY6ZGVsZXRlIGIucGFyZW50LGZ9ZnVuY3Rpb24gSlB0KGkpe3JldHVybiBLZHQoaS5lZGdlcygpLGZ1bmN0aW9uKGEpe3JldHVybiBpLmVkZ2UoYSkuY3V0dmFsdWU8MH0pfWZ1bmN0aW9uIHRGdChpLGEsZil7dmFyIHA9Zi52LHY9Zi53O2EuaGFzRWRnZShwLHYpfHwocD1mLncsdj1mLnYpO3ZhciBtPWkubm9kZShwKSxiPWkubm9kZSh2KSxFPW0sQz0hMTttLmxpbT5iLmxpbSYmKEU9YixDPSEwKTt2YXIgQT1fNShhLmVkZ2VzKCksZnVuY3Rpb24oUCl7cmV0dXJuIEM9PT1uRnQoaSxpLm5vZGUoUC52KSxFKSYmQyE9PW5GdChpLGkubm9kZShQLncpLEUpfSk7cmV0dXJuIFhkdChBLGZ1bmN0aW9uKFApe3JldHVybiBwUChhLFApfSl9ZnVuY3Rpb24gZUZ0KGksYSxmLHApe3ZhciB2PWYudixtPWYudztpLnJlbW92ZUVkZ2UodixtKSxpLnNldEVkZ2UocC52LHAudyx7fSksaTB0KGkpLHIwdChpLGEpLFJQZShpLGEpfWZ1bmN0aW9uIFJQZShpLGEpe3ZhciBmPUtkdChpLm5vZGVzKCksZnVuY3Rpb24odil7cmV0dXJuIWEubm9kZSh2KS5wYXJlbnR9KSxwPUZQZShpLGYpO3A9cC5zbGljZSgxKSxjcihwLGZ1bmN0aW9uKHYpe3ZhciBtPWkubm9kZSh2KS5wYXJlbnQsYj1hLmVkZ2UodixtKSxFPSExO2J8fChiPWEuZWRnZShtLHYpLEU9ITApLGEubm9kZSh2KS5yYW5rPWEubm9kZShtKS5yYW5rKyhFP2IubWlubGVuOi1iLm1pbmxlbil9KX1mdW5jdGlvbiBqUGUoaSxhLGYpe3JldHVybiBpLmhhc0VkZ2UoYSxmKX1mdW5jdGlvbiBuRnQoaSxhLGYpe3JldHVybiBmLmxvdzw9YS5saW0mJmEubGltPD1mLmxpbX1mdW5jdGlvbiAkUGUoaSl7c3dpdGNoKGkuZ3JhcGgoKS5yYW5rZXIpe2Nhc2UibmV0d29yay1zaW1wbGV4IjpyRnQoaSk7YnJlYWs7Y2FzZSJ0aWdodC10cmVlIjpxUGUoaSk7YnJlYWs7Y2FzZSJsb25nZXN0LXBhdGgiOnpQZShpKTticmVhaztkZWZhdWx0OnJGdChpKX19dmFyIHpQZT1uMHQ7ZnVuY3Rpb24gcVBlKGkpe24wdChpKSxLUHQoaSl9ZnVuY3Rpb24gckZ0KGkpe2I5KGkpfWZ1bmN0aW9uIEhQZShpKXt2YXIgYT1lTChpLCJyb290Iix7fSwiX3Jvb3QiKSxmPVZQZShpKSxwPWQ5KEM1KGYpKS0xLHY9MipwKzE7aS5ncmFwaCgpLm5lc3RpbmdSb290PWEsY3IoaS5lZGdlcygpLGZ1bmN0aW9uKGIpe2kuZWRnZShiKS5taW5sZW4qPXZ9KTt2YXIgbT1HUGUoaSkrMTtjcihpLmNoaWxkcmVuKCksZnVuY3Rpb24oYil7aUZ0KGksYSx2LG0scCxmLGIpfSksaS5ncmFwaCgpLm5vZGVSYW5rRmFjdG9yPXZ9ZnVuY3Rpb24gaUZ0KGksYSxmLHAsdixtLGIpe3ZhciBFPWkuY2hpbGRyZW4oYik7aWYoIUUubGVuZ3RoKXtiIT09YSYmaS5zZXRFZGdlKGEsYix7d2VpZ2h0OjAsbWlubGVuOmZ9KTtyZXR1cm59dmFyIEM9SFB0KGksIl9idCIpLEE9SFB0KGksIl9iYiIpLFA9aS5ub2RlKGIpO2kuc2V0UGFyZW50KEMsYiksUC5ib3JkZXJUb3A9QyxpLnNldFBhcmVudChBLGIpLFAuYm9yZGVyQm90dG9tPUEsY3IoRSxmdW5jdGlvbihGKXtpRnQoaSxhLGYscCx2LG0sRik7dmFyIGo9aS5ub2RlKEYpLFI9ai5ib3JkZXJUb3A/ai5ib3JkZXJUb3A6RixIPWouYm9yZGVyQm90dG9tP2ouYm9yZGVyQm90dG9tOkYsWT1qLmJvcmRlclRvcD9wOjIqcCxydD1SIT09SD8xOnYtbVtiXSsxO2kuc2V0RWRnZShDLFIse3dlaWdodDpZLG1pbmxlbjpydCxuZXN0aW5nRWRnZTohMH0pLGkuc2V0RWRnZShILEEse3dlaWdodDpZLG1pbmxlbjpydCxuZXN0aW5nRWRnZTohMH0pfSksaS5wYXJlbnQoYil8fGkuc2V0RWRnZShhLEMse3dlaWdodDowLG1pbmxlbjp2K21bYl19KX1mdW5jdGlvbiBWUGUoaSl7dmFyIGE9e307ZnVuY3Rpb24gZihwLHYpe3ZhciBtPWkuY2hpbGRyZW4ocCk7bSYmbS5sZW5ndGgmJmNyKG0sZnVuY3Rpb24oYil7ZihiLHYrMSl9KSxhW3BdPXZ9cmV0dXJuIGNyKGkuY2hpbGRyZW4oKSxmdW5jdGlvbihwKXtmKHAsMSl9KSxhfWZ1bmN0aW9uIEdQZShpKXtyZXR1cm4gZlAoaS5lZGdlcygpLGZ1bmN0aW9uKGEsZil7cmV0dXJuIGEraS5lZGdlKGYpLndlaWdodH0sMCl9ZnVuY3Rpb24gVVBlKGkpe3ZhciBhPWkuZ3JhcGgoKTtpLnJlbW92ZU5vZGUoYS5uZXN0aW5nUm9vdCksZGVsZXRlIGEubmVzdGluZ1Jvb3QsY3IoaS5lZGdlcygpLGZ1bmN0aW9uKGYpe3ZhciBwPWkuZWRnZShmKTtwLm5lc3RpbmdFZGdlJiZpLnJlbW92ZUVkZ2UoZil9KX1mdW5jdGlvbiBXUGUoaSxhLGYpe3ZhciBwPXt9LHY7Y3IoZixmdW5jdGlvbihtKXtmb3IodmFyIGI9aS5wYXJlbnQobSksRSxDO2I7KXtpZihFPWkucGFyZW50KGIpLEU/KEM9cFtFXSxwW0VdPWIpOihDPXYsdj1iKSxDJiZDIT09Yil7YS5zZXRFZGdlKEMsYik7cmV0dXJufWI9RX19KX1mdW5jdGlvbiBLUGUoaSxhLGYpe3ZhciBwPVlQZShpKSx2PW5ldyBsMSh7Y29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cm9vdDpwfSkuc2V0RGVmYXVsdE5vZGVMYWJlbChmdW5jdGlvbihtKXtyZXR1cm4gaS5ub2RlKG0pfSk7cmV0dXJuIGNyKGkubm9kZXMoKSxmdW5jdGlvbihtKXt2YXIgYj1pLm5vZGUobSksRT1pLnBhcmVudChtKTsoYi5yYW5rPT09YXx8Yi5taW5SYW5rPD1hJiZhPD1iLm1heFJhbmspJiYodi5zZXROb2RlKG0pLHYuc2V0UGFyZW50KG0sRXx8cCksY3IoaVtmXShtKSxmdW5jdGlvbihDKXt2YXIgQT1DLnY9PT1tP0MudzpDLnYsUD12LmVkZ2UoQSxtKSxGPXRmKFApPzA6UC53ZWlnaHQ7di5zZXRFZGdlKEEsbSx7d2VpZ2h0OmkuZWRnZShDKS53ZWlnaHQrRn0pfSksVmEoYiwibWluUmFuayIpJiZ2LnNldE5vZGUobSx7Ym9yZGVyTGVmdDpiLmJvcmRlckxlZnRbYV0sYm9yZGVyUmlnaHQ6Yi5ib3JkZXJSaWdodFthXX0pKX0pLHZ9ZnVuY3Rpb24gWVBlKGkpe2Zvcih2YXIgYTtpLmhhc05vZGUoYT1mSygiX3Jvb3QiKSk7KTtyZXR1cm4gYX1mdW5jdGlvbiBYUGUoaSxhKXtmb3IodmFyIGY9MCxwPTE7cDxhLmxlbmd0aDsrK3ApZis9UVBlKGksYVtwLTFdLGFbcF0pO3JldHVybiBmfWZ1bmN0aW9uIFFQZShpLGEsZil7Zm9yKHZhciBwPXNQZShmLEZmKGYsZnVuY3Rpb24oQSxQKXtyZXR1cm4gUH0pKSx2PUpBKEZmKGEsZnVuY3Rpb24oQSl7cmV0dXJuIGRQKEZmKGkub3V0RWRnZXMoQSksZnVuY3Rpb24oUCl7cmV0dXJue3BvczpwW1Aud10sd2VpZ2h0OmkuZWRnZShQKS53ZWlnaHR9fSksInBvcyIpfSkpLG09MTttPGYubGVuZ3RoOyltPDw9MTt2YXIgYj0yKm0tMTttLT0xO3ZhciBFPUZmKG5ldyBBcnJheShiKSxmdW5jdGlvbigpe3JldHVybiAwfSksQz0wO3JldHVybiBjcih2LmZvckVhY2goZnVuY3Rpb24oQSl7dmFyIFA9QS5wb3MrbTtFW1BdKz1BLndlaWdodDtmb3IodmFyIEY9MDtQPjA7KVAlMiYmKEYrPUVbUCsxXSksUD1QLTE+PjEsRVtQXSs9QS53ZWlnaHQ7Qys9QS53ZWlnaHQqRn0pKSxDfWZ1bmN0aW9uIFpQZShpKXt2YXIgYT17fSxmPV81KGkubm9kZXMoKSxmdW5jdGlvbihFKXtyZXR1cm4haS5jaGlsZHJlbihFKS5sZW5ndGh9KSxwPWQ5KEZmKGYsZnVuY3Rpb24oRSl7cmV0dXJuIGkubm9kZShFKS5yYW5rfSkpLHY9RmYoZzkocCsxKSxmdW5jdGlvbigpe3JldHVybltdfSk7ZnVuY3Rpb24gbShFKXtpZighVmEoYSxFKSl7YVtFXT0hMDt2YXIgQz1pLm5vZGUoRSk7dltDLnJhbmtdLnB1c2goRSksY3IoaS5zdWNjZXNzb3JzKEUpLG0pfX12YXIgYj1kUChmLGZ1bmN0aW9uKEUpe3JldHVybiBpLm5vZGUoRSkucmFua30pO3JldHVybiBjcihiLG0pLHZ9ZnVuY3Rpb24gSlBlKGksYSl7cmV0dXJuIEZmKGEsZnVuY3Rpb24oZil7dmFyIHA9aS5pbkVkZ2VzKGYpO2lmKHAubGVuZ3RoKXt2YXIgdj1mUChwLGZ1bmN0aW9uKG0sYil7dmFyIEU9aS5lZGdlKGIpLEM9aS5ub2RlKGIudik7cmV0dXJue3N1bTptLnN1bStFLndlaWdodCpDLm9yZGVyLHdlaWdodDptLndlaWdodCtFLndlaWdodH19LHtzdW06MCx3ZWlnaHQ6MH0pO3JldHVybnt2OmYsYmFyeWNlbnRlcjp2LnN1bS92LndlaWdodCx3ZWlnaHQ6di53ZWlnaHR9fWVsc2UgcmV0dXJue3Y6Zn19KX1mdW5jdGlvbiB0RmUoaSxhKXt2YXIgZj17fTtjcihpLGZ1bmN0aW9uKHYsbSl7dmFyIGI9Zlt2LnZdPXtpbmRlZ3JlZTowLGluOltdLG91dDpbXSx2czpbdi52XSxpOm19O3RmKHYuYmFyeWNlbnRlcil8fChiLmJhcnljZW50ZXI9di5iYXJ5Y2VudGVyLGIud2VpZ2h0PXYud2VpZ2h0KX0pLGNyKGEuZWRnZXMoKSxmdW5jdGlvbih2KXt2YXIgbT1mW3Yudl0sYj1mW3Yud107IXRmKG0pJiYhdGYoYikmJihiLmluZGVncmVlKyssbS5vdXQucHVzaChmW3Yud10pKX0pO3ZhciBwPV81KGYsZnVuY3Rpb24odil7cmV0dXJuIXYuaW5kZWdyZWV9KTtyZXR1cm4gZUZlKHApfWZ1bmN0aW9uIGVGZShpKXt2YXIgYT1bXTtmdW5jdGlvbiBmKG0pe3JldHVybiBmdW5jdGlvbihiKXtiLm1lcmdlZHx8KHRmKGIuYmFyeWNlbnRlcil8fHRmKG0uYmFyeWNlbnRlcil8fGIuYmFyeWNlbnRlcj49bS5iYXJ5Y2VudGVyKSYmbkZlKG0sYil9fWZ1bmN0aW9uIHAobSl7cmV0dXJuIGZ1bmN0aW9uKGIpe2IuaW4ucHVzaChtKSwtLWIuaW5kZWdyZWU9PT0wJiZpLnB1c2goYil9fWZvcig7aS5sZW5ndGg7KXt2YXIgdj1pLnBvcCgpO2EucHVzaCh2KSxjcih2LmluLnJldmVyc2UoKSxmKHYpKSxjcih2Lm91dCxwKHYpKX1yZXR1cm4gRmYoXzUoYSxmdW5jdGlvbihtKXtyZXR1cm4hbS5tZXJnZWR9KSxmdW5jdGlvbihtKXtyZXR1cm4gaFAobSxbInZzIiwiaSIsImJhcnljZW50ZXIiLCJ3ZWlnaHQiXSl9KX1mdW5jdGlvbiBuRmUoaSxhKXt2YXIgZj0wLHA9MDtpLndlaWdodCYmKGYrPWkuYmFyeWNlbnRlcippLndlaWdodCxwKz1pLndlaWdodCksYS53ZWlnaHQmJihmKz1hLmJhcnljZW50ZXIqYS53ZWlnaHQscCs9YS53ZWlnaHQpLGkudnM9YS52cy5jb25jYXQoaS52cyksaS5iYXJ5Y2VudGVyPWYvcCxpLndlaWdodD1wLGkuaT1NYXRoLm1pbihhLmksaS5pKSxhLm1lcmdlZD0hMH1mdW5jdGlvbiByRmUoaSxhKXt2YXIgZj15UGUoaSxmdW5jdGlvbihQKXtyZXR1cm4gVmEoUCwiYmFyeWNlbnRlciIpfSkscD1mLmxocyx2PWRQKGYucmhzLGZ1bmN0aW9uKFApe3JldHVybi1QLml9KSxtPVtdLGI9MCxFPTAsQz0wO3Auc29ydChpRmUoISFhKSksQz1zRnQobSx2LEMpLGNyKHAsZnVuY3Rpb24oUCl7Qys9UC52cy5sZW5ndGgsbS5wdXNoKFAudnMpLGIrPVAuYmFyeWNlbnRlcipQLndlaWdodCxFKz1QLndlaWdodCxDPXNGdChtLHYsQyl9KTt2YXIgQT17dnM6SkEobSl9O3JldHVybiBFJiYoQS5iYXJ5Y2VudGVyPWIvRSxBLndlaWdodD1FKSxBfWZ1bmN0aW9uIHNGdChpLGEsZil7Zm9yKHZhciBwO2EubGVuZ3RoJiYocD1sSyhhKSkuaTw9ZjspYS5wb3AoKSxpLnB1c2gocC52cyksZisrO3JldHVybiBmfWZ1bmN0aW9uIGlGZShpKXtyZXR1cm4gZnVuY3Rpb24oYSxmKXtyZXR1cm4gYS5iYXJ5Y2VudGVyPGYuYmFyeWNlbnRlcj8tMTphLmJhcnljZW50ZXI+Zi5iYXJ5Y2VudGVyPzE6aT9mLmktYS5pOmEuaS1mLml9fWZ1bmN0aW9uIGFGdChpLGEsZixwKXt2YXIgdj1pLmNoaWxkcmVuKGEpLG09aS5ub2RlKGEpLGI9bT9tLmJvcmRlckxlZnQ6dm9pZCAwLEU9bT9tLmJvcmRlclJpZ2h0OnZvaWQgMCxDPXt9O2ImJih2PV81KHYsZnVuY3Rpb24oSCl7cmV0dXJuIEghPT1iJiZIIT09RX0pKTt2YXIgQT1KUGUoaSx2KTtjcihBLGZ1bmN0aW9uKEgpe2lmKGkuY2hpbGRyZW4oSC52KS5sZW5ndGgpe3ZhciBZPWFGdChpLEgudixmLHApO0NbSC52XT1ZLFZhKFksImJhcnljZW50ZXIiKSYmYUZlKEgsWSl9fSk7dmFyIFA9dEZlKEEsZik7c0ZlKFAsQyk7dmFyIEY9ckZlKFAscCk7aWYoYiYmKEYudnM9SkEoW2IsRi52cyxFXSksaS5wcmVkZWNlc3NvcnMoYikubGVuZ3RoKSl7dmFyIGo9aS5ub2RlKGkucHJlZGVjZXNzb3JzKGIpWzBdKSxSPWkubm9kZShpLnByZWRlY2Vzc29ycyhFKVswXSk7VmEoRiwiYmFyeWNlbnRlciIpfHwoRi5iYXJ5Y2VudGVyPTAsRi53ZWlnaHQ9MCksRi5iYXJ5Y2VudGVyPShGLmJhcnljZW50ZXIqRi53ZWlnaHQrai5vcmRlcitSLm9yZGVyKS8oRi53ZWlnaHQrMiksRi53ZWlnaHQrPTJ9cmV0dXJuIEZ9ZnVuY3Rpb24gc0ZlKGksYSl7Y3IoaSxmdW5jdGlvbihmKXtmLnZzPUpBKGYudnMubWFwKGZ1bmN0aW9uKHApe3JldHVybiBhW3BdP2FbcF0udnM6cH0pKX0pfWZ1bmN0aW9uIGFGZShpLGEpe3RmKGkuYmFyeWNlbnRlcik/KGkuYmFyeWNlbnRlcj1hLmJhcnljZW50ZXIsaS53ZWlnaHQ9YS53ZWlnaHQpOihpLmJhcnljZW50ZXI9KGkuYmFyeWNlbnRlcippLndlaWdodCthLmJhcnljZW50ZXIqYS53ZWlnaHQpLyhpLndlaWdodCthLndlaWdodCksaS53ZWlnaHQrPWEud2VpZ2h0KX1mdW5jdGlvbiBvRmUoaSl7dmFyIGE9VlB0KGkpLGY9b0Z0KGksZzkoMSxhKzEpLCJpbkVkZ2VzIikscD1vRnQoaSxnOShhLTEsLTEsLTEpLCJvdXRFZGdlcyIpLHY9WlBlKGkpO2NGdChpLHYpO2Zvcih2YXIgbT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksYixFPTAsQz0wO0M8NDsrK0UsKytDKXtjRmUoRSUyP2Y6cCxFJTQ+PTIpLHY9ZEsoaSk7dmFyIEE9WFBlKGksdik7QTxtJiYoQz0wLGI9TU9lKHYpLG09QSl9Y0Z0KGksYil9ZnVuY3Rpb24gb0Z0KGksYSxmKXtyZXR1cm4gRmYoYSxmdW5jdGlvbihwKXtyZXR1cm4gS1BlKGkscCxmKX0pfWZ1bmN0aW9uIGNGZShpLGEpe3ZhciBmPW5ldyBsMTtjcihpLGZ1bmN0aW9uKHApe3ZhciB2PXAuZ3JhcGgoKS5yb290LG09YUZ0KHAsdixmLGEpO2NyKG0udnMsZnVuY3Rpb24oYixFKXtwLm5vZGUoYikub3JkZXI9RX0pLFdQZShwLGYsbS52cyl9KX1mdW5jdGlvbiBjRnQoaSxhKXtjcihhLGZ1bmN0aW9uKGYpe2NyKGYsZnVuY3Rpb24ocCx2KXtpLm5vZGUocCkub3JkZXI9dn0pfSl9ZnVuY3Rpb24gdUZlKGkpe3ZhciBhPWhGZShpKTtjcihpLmdyYXBoKCkuZHVtbXlDaGFpbnMsZnVuY3Rpb24oZil7Zm9yKHZhciBwPWkubm9kZShmKSx2PXAuZWRnZU9iaixtPWxGZShpLGEsdi52LHYudyksYj1tLnBhdGgsRT1tLmxjYSxDPTAsQT1iW0NdLFA9ITA7ZiE9PXYudzspe2lmKHA9aS5ub2RlKGYpLFApe2Zvcig7KEE9YltDXSkhPT1FJiZpLm5vZGUoQSkubWF4UmFuazxwLnJhbms7KUMrKztBPT09RSYmKFA9ITEpfWlmKCFQKXtmb3IoO0M8Yi5sZW5ndGgtMSYmaS5ub2RlKEE9YltDKzFdKS5taW5SYW5rPD1wLnJhbms7KUMrKztBPWJbQ119aS5zZXRQYXJlbnQoZixBKSxmPWkuc3VjY2Vzc29ycyhmKVswXX19KX1mdW5jdGlvbiBsRmUoaSxhLGYscCl7dmFyIHY9W10sbT1bXSxiPU1hdGgubWluKGFbZl0ubG93LGFbcF0ubG93KSxFPU1hdGgubWF4KGFbZl0ubGltLGFbcF0ubGltKSxDLEE7Qz1mO2RvIEM9aS5wYXJlbnQoQyksdi5wdXNoKEMpO3doaWxlKEMmJihhW0NdLmxvdz5ifHxFPmFbQ10ubGltKSk7Zm9yKEE9QyxDPXA7KEM9aS5wYXJlbnQoQykpIT09QTspbS5wdXNoKEMpO3JldHVybntwYXRoOnYuY29uY2F0KG0ucmV2ZXJzZSgpKSxsY2E6QX19ZnVuY3Rpb24gaEZlKGkpe3ZhciBhPXt9LGY9MDtmdW5jdGlvbiBwKHYpe3ZhciBtPWY7Y3IoaS5jaGlsZHJlbih2KSxwKSxhW3ZdPXtsb3c6bSxsaW06ZisrfX1yZXR1cm4gY3IoaS5jaGlsZHJlbigpLHApLGF9ZnVuY3Rpb24gZkZlKGksYSl7dmFyIGY9e307ZnVuY3Rpb24gcCh2LG0pe3ZhciBiPTAsRT0wLEM9di5sZW5ndGgsQT1sSyhtKTtyZXR1cm4gY3IobSxmdW5jdGlvbihQLEYpe3ZhciBqPWdGZShpLFApLFI9aj9pLm5vZGUoaikub3JkZXI6Qzsoanx8UD09PUEpJiYoY3IobS5zbGljZShFLEYrMSksZnVuY3Rpb24oSCl7Y3IoaS5wcmVkZWNlc3NvcnMoSCksZnVuY3Rpb24oWSl7dmFyIHJ0PWkubm9kZShZKSxKPXJ0Lm9yZGVyOyhKPGJ8fFI8SikmJiEocnQuZHVtbXkmJmkubm9kZShIKS5kdW1teSkmJnVGdChmLFksSCl9KX0pLEU9RisxLGI9Uil9KSxtfXJldHVybiBmUChhLHApLGZ9ZnVuY3Rpb24gZEZlKGksYSl7dmFyIGY9e307ZnVuY3Rpb24gcChtLGIsRSxDLEEpe3ZhciBQO2NyKGc5KGIsRSksZnVuY3Rpb24oRil7UD1tW0ZdLGkubm9kZShQKS5kdW1teSYmY3IoaS5wcmVkZWNlc3NvcnMoUCksZnVuY3Rpb24oail7dmFyIFI9aS5ub2RlKGopO1IuZHVtbXkmJihSLm9yZGVyPEN8fFIub3JkZXI+QSkmJnVGdChmLGosUCl9KX0pfWZ1bmN0aW9uIHYobSxiKXt2YXIgRT0tMSxDLEE9MDtyZXR1cm4gY3IoYixmdW5jdGlvbihQLEYpe2lmKGkubm9kZShQKS5kdW1teT09PSJib3JkZXIiKXt2YXIgaj1pLnByZWRlY2Vzc29ycyhQKTtqLmxlbmd0aCYmKEM9aS5ub2RlKGpbMF0pLm9yZGVyLHAoYixBLEYsRSxDKSxBPUYsRT1DKX1wKGIsQSxiLmxlbmd0aCxDLG0ubGVuZ3RoKX0pLGJ9cmV0dXJuIGZQKGEsdiksZn1mdW5jdGlvbiBnRmUoaSxhKXtpZihpLm5vZGUoYSkuZHVtbXkpcmV0dXJuIEtkdChpLnByZWRlY2Vzc29ycyhhKSxmdW5jdGlvbihmKXtyZXR1cm4gaS5ub2RlKGYpLmR1bW15fSl9ZnVuY3Rpb24gdUZ0KGksYSxmKXtpZihhPmYpe3ZhciBwPWE7YT1mLGY9cH12YXIgdj1pW2FdO3Z8fChpW2FdPXY9e30pLHZbZl09ITB9ZnVuY3Rpb24gcEZlKGksYSxmKXtpZihhPmYpe3ZhciBwPWE7YT1mLGY9cH1yZXR1cm4gVmEoaVthXSxmKX1mdW5jdGlvbiBiRmUoaSxhLGYscCl7dmFyIHY9e30sbT17fSxiPXt9O3JldHVybiBjcihhLGZ1bmN0aW9uKEUpe2NyKEUsZnVuY3Rpb24oQyxBKXt2W0NdPUMsbVtDXT1DLGJbQ109QX0pfSksY3IoYSxmdW5jdGlvbihFKXt2YXIgQz0tMTtjcihFLGZ1bmN0aW9uKEEpe3ZhciBQPXAoQSk7aWYoUC5sZW5ndGgpe1A9ZFAoUCxmdW5jdGlvbihZKXtyZXR1cm4gYltZXX0pO2Zvcih2YXIgRj0oUC5sZW5ndGgtMSkvMixqPU1hdGguZmxvb3IoRiksUj1NYXRoLmNlaWwoRik7ajw9UjsrK2ope3ZhciBIPVBbal07bVtBXT09PUEmJkM8YltIXSYmIXBGZShmLEEsSCkmJihtW0hdPUEsbVtBXT12W0FdPXZbSF0sQz1iW0hdKX19fSl9KSx7cm9vdDp2LGFsaWduOm19fWZ1bmN0aW9uIHZGZShpLGEsZixwLHYpe3ZhciBtPXt9LGI9d0ZlKGksYSxmLHYpLEU9dj8iYm9yZGVyTGVmdCI6ImJvcmRlclJpZ2h0IjtmdW5jdGlvbiBDKEYsail7Zm9yKHZhciBSPWIubm9kZXMoKSxIPVIucG9wKCksWT17fTtIOylZW0hdP0YoSCk6KFlbSF09ITAsUi5wdXNoKEgpLFI9Ui5jb25jYXQoaihIKSkpLEg9Ui5wb3AoKX1mdW5jdGlvbiBBKEYpe21bRl09Yi5pbkVkZ2VzKEYpLnJlZHVjZShmdW5jdGlvbihqLFIpe3JldHVybiBNYXRoLm1heChqLG1bUi52XStiLmVkZ2UoUikpfSwwKX1mdW5jdGlvbiBQKEYpe3ZhciBqPWIub3V0RWRnZXMoRikucmVkdWNlKGZ1bmN0aW9uKEgsWSl7cmV0dXJuIE1hdGgubWluKEgsbVtZLnddLWIuZWRnZShZKSl9LE51bWJlci5QT1NJVElWRV9JTkZJTklUWSksUj1pLm5vZGUoRik7aiE9PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSYmUi5ib3JkZXJUeXBlIT09RSYmKG1bRl09TWF0aC5tYXgobVtGXSxqKSl9cmV0dXJuIEMoQSxiLnByZWRlY2Vzc29ycy5iaW5kKGIpKSxDKFAsYi5zdWNjZXNzb3JzLmJpbmQoYikpLGNyKHAsZnVuY3Rpb24oRil7bVtGXT1tW2ZbRl1dfSksbX1mdW5jdGlvbiB3RmUoaSxhLGYscCl7dmFyIHY9bmV3IGwxLG09aS5ncmFwaCgpLGI9RUZlKG0ubm9kZXNlcCxtLmVkZ2VzZXAscCk7cmV0dXJuIGNyKGEsZnVuY3Rpb24oRSl7dmFyIEM7Y3IoRSxmdW5jdGlvbihBKXt2YXIgUD1mW0FdO2lmKHYuc2V0Tm9kZShQKSxDKXt2YXIgRj1mW0NdLGo9di5lZGdlKEYsUCk7di5zZXRFZGdlKEYsUCxNYXRoLm1heChiKGksQSxDKSxqfHwwKSl9Qz1BfSl9KSx2fWZ1bmN0aW9uIG1GZShpLGEpe3JldHVybiBYZHQoQzUoYSksZnVuY3Rpb24oZil7dmFyIHA9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLHY9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO3JldHVybiBBTmUoZixmdW5jdGlvbihtLGIpe3ZhciBFPVRGZShpLGIpLzI7cD1NYXRoLm1heChtK0UscCksdj1NYXRoLm1pbihtLUUsdil9KSxwLXZ9KX1mdW5jdGlvbiB5RmUoaSxhKXt2YXIgZj1DNShhKSxwPWxQKGYpLHY9ZDkoZik7Y3IoWyJ1IiwiZCJdLGZ1bmN0aW9uKG0pe2NyKFsibCIsInIiXSxmdW5jdGlvbihiKXt2YXIgRT1tK2IsQz1pW0VdLEE7aWYoQyE9PWEpe3ZhciBQPUM1KEMpO0E9Yj09PSJsIj9wLWxQKFApOnYtZDkoUCksQSYmKGlbRV09aEsoQyxmdW5jdGlvbihGKXtyZXR1cm4gRitBfSkpfX0pfSl9ZnVuY3Rpb24geEZlKGksYSl7cmV0dXJuIGhLKGkudWwsZnVuY3Rpb24oZixwKXtpZihhKXJldHVybiBpW2EudG9Mb3dlckNhc2UoKV1bcF07dmFyIHY9ZFAoRmYoaSxwKSk7cmV0dXJuKHZbMV0rdlsyXSkvMn0pfWZ1bmN0aW9uIGtGZShpKXt2YXIgYT1kSyhpKSxmPUVXKGZGZShpLGEpLGRGZShpLGEpKSxwPXt9LHY7Y3IoWyJ1IiwiZCJdLGZ1bmN0aW9uKGIpe3Y9Yj09PSJ1Ij9hOkM1KGEpLnJldmVyc2UoKSxjcihbImwiLCJyIl0sZnVuY3Rpb24oRSl7RT09PSJyIiYmKHY9RmYodixmdW5jdGlvbihGKXtyZXR1cm4gQzUoRikucmV2ZXJzZSgpfSkpO3ZhciBDPShiPT09InUiP2kucHJlZGVjZXNzb3JzOmkuc3VjY2Vzc29ycykuYmluZChpKSxBPWJGZShpLHYsZixDKSxQPXZGZShpLHYsQS5yb290LEEuYWxpZ24sRT09PSJyIik7RT09PSJyIiYmKFA9aEsoUCxmdW5jdGlvbihGKXtyZXR1cm4tRn0pKSxwW2IrRV09UH0pfSk7dmFyIG09bUZlKGkscCk7cmV0dXJuIHlGZShwLG0pLHhGZShwLGkuZ3JhcGgoKS5hbGlnbil9ZnVuY3Rpb24gRUZlKGksYSxmKXtyZXR1cm4gZnVuY3Rpb24ocCx2LG0pe3ZhciBiPXAubm9kZSh2KSxFPXAubm9kZShtKSxDPTAsQTtpZihDKz1iLndpZHRoLzIsVmEoYiwibGFiZWxwb3MiKSlzd2l0Y2goYi5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpKXtjYXNlImwiOkE9LWIud2lkdGgvMjticmVhaztjYXNlInIiOkE9Yi53aWR0aC8yO2JyZWFrfWlmKEEmJihDKz1mP0E6LUEpLEE9MCxDKz0oYi5kdW1teT9hOmkpLzIsQys9KEUuZHVtbXk/YTppKS8yLEMrPUUud2lkdGgvMixWYShFLCJsYWJlbHBvcyIpKXN3aXRjaChFLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkpe2Nhc2UibCI6QT1FLndpZHRoLzI7YnJlYWs7Y2FzZSJyIjpBPS1FLndpZHRoLzI7YnJlYWt9cmV0dXJuIEEmJihDKz1mP0E6LUEpLEE9MCxDfX1mdW5jdGlvbiBURmUoaSxhKXtyZXR1cm4gaS5ub2RlKGEpLndpZHRofWZ1bmN0aW9uIF9GZShpKXtpPXpQdChpKSxDRmUoaSksTE5lKGtGZShpKSxmdW5jdGlvbihhLGYpe2kubm9kZShmKS54PWF9KX1mdW5jdGlvbiBDRmUoaSl7dmFyIGE9ZEsoaSksZj1pLmdyYXBoKCkucmFua3NlcCxwPTA7Y3IoYSxmdW5jdGlvbih2KXt2YXIgbT1kOShGZih2LGZ1bmN0aW9uKGIpe3JldHVybiBpLm5vZGUoYikuaGVpZ2h0fSkpO2NyKHYsZnVuY3Rpb24oYil7aS5ub2RlKGIpLnk9cCttLzJ9KSxwKz1tK2Z9KX1mdW5jdGlvbiBuTChpLGEpe3ZhciBmPWEmJmEuZGVidWdUaW1pbmc/eFBlOmtQZTtmKCJsYXlvdXQiLGZ1bmN0aW9uKCl7dmFyIHA9ZigiICBidWlsZExheW91dEdyYXBoIixmdW5jdGlvbigpe3JldHVybiBCRmUoaSl9KTtmKCIgIHJ1bkxheW91dCIsZnVuY3Rpb24oKXtTRmUocCxmKX0pLGYoIiAgdXBkYXRlSW5wdXRHcmFwaCIsZnVuY3Rpb24oKXtBRmUoaSxwKX0pfSl9ZnVuY3Rpb24gU0ZlKGksYSl7YSgiICAgIG1ha2VTcGFjZUZvckVkZ2VMYWJlbHMiLGZ1bmN0aW9uKCl7UkZlKGkpfSksYSgiICAgIHJlbW92ZVNlbGZFZGdlcyIsZnVuY3Rpb24oKXtXRmUoaSl9KSxhKCIgICAgYWN5Y2xpYyIsZnVuY3Rpb24oKXtnUGUoaSl9KSxhKCIgICAgbmVzdGluZ0dyYXBoLnJ1biIsZnVuY3Rpb24oKXtIUGUoaSl9KSxhKCIgICAgcmFuayIsZnVuY3Rpb24oKXskUGUoelB0KGkpKX0pLGEoIiAgICBpbmplY3RFZGdlTGFiZWxQcm94aWVzIixmdW5jdGlvbigpe2pGZShpKX0pLGEoIiAgICByZW1vdmVFbXB0eVJhbmtzIixmdW5jdGlvbigpe21QZShpKX0pLGEoIiAgICBuZXN0aW5nR3JhcGguY2xlYW51cCIsZnVuY3Rpb24oKXtVUGUoaSl9KSxhKCIgICAgbm9ybWFsaXplUmFua3MiLGZ1bmN0aW9uKCl7d1BlKGkpfSksYSgiICAgIGFzc2lnblJhbmtNaW5NYXgiLGZ1bmN0aW9uKCl7JEZlKGkpfSksYSgiICAgIHJlbW92ZUVkZ2VMYWJlbFByb3hpZXMiLGZ1bmN0aW9uKCl7ekZlKGkpfSksYSgiICAgIG5vcm1hbGl6ZS5ydW4iLGZ1bmN0aW9uKCl7QVBlKGkpfSksYSgiICAgIHBhcmVudER1bW15Q2hhaW5zIixmdW5jdGlvbigpe3VGZShpKX0pLGEoIiAgICBhZGRCb3JkZXJTZWdtZW50cyIsZnVuY3Rpb24oKXtFUGUoaSl9KSxhKCIgICAgb3JkZXIiLGZ1bmN0aW9uKCl7b0ZlKGkpfSksYSgiICAgIGluc2VydFNlbGZFZGdlcyIsZnVuY3Rpb24oKXtLRmUoaSl9KSxhKCIgICAgYWRqdXN0Q29vcmRpbmF0ZVN5c3RlbSIsZnVuY3Rpb24oKXtUUGUoaSl9KSxhKCIgICAgcG9zaXRpb24iLGZ1bmN0aW9uKCl7X0ZlKGkpfSksYSgiICAgIHBvc2l0aW9uU2VsZkVkZ2VzIixmdW5jdGlvbigpe1lGZShpKX0pLGEoIiAgICByZW1vdmVCb3JkZXJOb2RlcyIsZnVuY3Rpb24oKXtVRmUoaSl9KSxhKCIgICAgbm9ybWFsaXplLnVuZG8iLGZ1bmN0aW9uKCl7TVBlKGkpfSksYSgiICAgIGZpeHVwRWRnZUxhYmVsQ29vcmRzIixmdW5jdGlvbigpe1ZGZShpKX0pLGEoIiAgICB1bmRvQ29vcmRpbmF0ZVN5c3RlbSIsZnVuY3Rpb24oKXtfUGUoaSl9KSxhKCIgICAgdHJhbnNsYXRlR3JhcGgiLGZ1bmN0aW9uKCl7cUZlKGkpfSksYSgiICAgIGFzc2lnbk5vZGVJbnRlcnNlY3RzIixmdW5jdGlvbigpe0hGZShpKX0pLGEoIiAgICByZXZlcnNlUG9pbnRzIixmdW5jdGlvbigpe0dGZShpKX0pLGEoIiAgICBhY3ljbGljLnVuZG8iLGZ1bmN0aW9uKCl7YlBlKGkpfSl9ZnVuY3Rpb24gQUZlKGksYSl7Y3IoaS5ub2RlcygpLGZ1bmN0aW9uKGYpe3ZhciBwPWkubm9kZShmKSx2PWEubm9kZShmKTtwJiYocC54PXYueCxwLnk9di55LGEuY2hpbGRyZW4oZikubGVuZ3RoJiYocC53aWR0aD12LndpZHRoLHAuaGVpZ2h0PXYuaGVpZ2h0KSl9KSxjcihpLmVkZ2VzKCksZnVuY3Rpb24oZil7dmFyIHA9aS5lZGdlKGYpLHY9YS5lZGdlKGYpO3AucG9pbnRzPXYucG9pbnRzLFZhKHYsIngiKSYmKHAueD12LngscC55PXYueSl9KSxpLmdyYXBoKCkud2lkdGg9YS5ncmFwaCgpLndpZHRoLGkuZ3JhcGgoKS5oZWlnaHQ9YS5ncmFwaCgpLmhlaWdodH12YXIgTEZlPVsibm9kZXNlcCIsImVkZ2VzZXAiLCJyYW5rc2VwIiwibWFyZ2lueCIsIm1hcmdpbnkiXSxNRmU9e3JhbmtzZXA6NTAsZWRnZXNlcDoyMCxub2Rlc2VwOjUwLHJhbmtkaXI6InRiIn0sREZlPVsiYWN5Y2xpY2VyIiwicmFua2VyIiwicmFua2RpciIsImFsaWduIl0sSUZlPVsid2lkdGgiLCJoZWlnaHQiXSxPRmU9e3dpZHRoOjAsaGVpZ2h0OjB9LE5GZT1bIm1pbmxlbiIsIndlaWdodCIsIndpZHRoIiwiaGVpZ2h0IiwibGFiZWxvZmZzZXQiXSxQRmU9e21pbmxlbjoxLHdlaWdodDoxLHdpZHRoOjAsaGVpZ2h0OjAsbGFiZWxvZmZzZXQ6MTAsbGFiZWxwb3M6InIifSxGRmU9WyJsYWJlbHBvcyJdO2Z1bmN0aW9uIEJGZShpKXt2YXIgYT1uZXcgbDEoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KSxmPWEwdChpLmdyYXBoKCkpO3JldHVybiBhLnNldEdyYXBoKEVXKHt9LE1GZSxzMHQoZixMRmUpLGhQKGYsREZlKSkpLGNyKGkubm9kZXMoKSxmdW5jdGlvbihwKXt2YXIgdj1hMHQoaS5ub2RlKHApKTthLnNldE5vZGUocCx0TChzMHQodixJRmUpLE9GZSkpLGEuc2V0UGFyZW50KHAsaS5wYXJlbnQocCkpfSksY3IoaS5lZGdlcygpLGZ1bmN0aW9uKHApe3ZhciB2PWEwdChpLmVkZ2UocCkpO2Euc2V0RWRnZShwLEVXKHt9LFBGZSxzMHQodixORmUpLGhQKHYsRkZlKSkpfSksYX1mdW5jdGlvbiBSRmUoaSl7dmFyIGE9aS5ncmFwaCgpO2EucmFua3NlcC89MixjcihpLmVkZ2VzKCksZnVuY3Rpb24oZil7dmFyIHA9aS5lZGdlKGYpO3AubWlubGVuKj0yLHAubGFiZWxwb3MudG9Mb3dlckNhc2UoKSE9PSJjIiYmKGEucmFua2Rpcj09PSJUQiJ8fGEucmFua2Rpcj09PSJCVCI/cC53aWR0aCs9cC5sYWJlbG9mZnNldDpwLmhlaWdodCs9cC5sYWJlbG9mZnNldCl9KX1mdW5jdGlvbiBqRmUoaSl7Y3IoaS5lZGdlcygpLGZ1bmN0aW9uKGEpe3ZhciBmPWkuZWRnZShhKTtpZihmLndpZHRoJiZmLmhlaWdodCl7dmFyIHA9aS5ub2RlKGEudiksdj1pLm5vZGUoYS53KSxtPXtyYW5rOih2LnJhbmstcC5yYW5rKS8yK3AucmFuayxlOmF9O2VMKGksImVkZ2UtcHJveHkiLG0sIl9lcCIpfX0pfWZ1bmN0aW9uICRGZShpKXt2YXIgYT0wO2NyKGkubm9kZXMoKSxmdW5jdGlvbihmKXt2YXIgcD1pLm5vZGUoZik7cC5ib3JkZXJUb3AmJihwLm1pblJhbms9aS5ub2RlKHAuYm9yZGVyVG9wKS5yYW5rLHAubWF4UmFuaz1pLm5vZGUocC5ib3JkZXJCb3R0b20pLnJhbmssYT1kOShhLHAubWF4UmFuaykpfSksaS5ncmFwaCgpLm1heFJhbms9YX1mdW5jdGlvbiB6RmUoaSl7Y3IoaS5ub2RlcygpLGZ1bmN0aW9uKGEpe3ZhciBmPWkubm9kZShhKTtmLmR1bW15PT09ImVkZ2UtcHJveHkiJiYoaS5lZGdlKGYuZSkubGFiZWxSYW5rPWYucmFuayxpLnJlbW92ZU5vZGUoYSkpfSl9ZnVuY3Rpb24gcUZlKGkpe3ZhciBhPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxmPTAscD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksdj0wLG09aS5ncmFwaCgpLGI9bS5tYXJnaW54fHwwLEU9bS5tYXJnaW55fHwwO2Z1bmN0aW9uIEMoQSl7dmFyIFA9QS54LEY9QS55LGo9QS53aWR0aCxSPUEuaGVpZ2h0O2E9TWF0aC5taW4oYSxQLWovMiksZj1NYXRoLm1heChmLFArai8yKSxwPU1hdGgubWluKHAsRi1SLzIpLHY9TWF0aC5tYXgodixGK1IvMil9Y3IoaS5ub2RlcygpLGZ1bmN0aW9uKEEpe0MoaS5ub2RlKEEpKX0pLGNyKGkuZWRnZXMoKSxmdW5jdGlvbihBKXt2YXIgUD1pLmVkZ2UoQSk7VmEoUCwieCIpJiZDKFApfSksYS09YixwLT1FLGNyKGkubm9kZXMoKSxmdW5jdGlvbihBKXt2YXIgUD1pLm5vZGUoQSk7UC54LT1hLFAueS09cH0pLGNyKGkuZWRnZXMoKSxmdW5jdGlvbihBKXt2YXIgUD1pLmVkZ2UoQSk7Y3IoUC5wb2ludHMsZnVuY3Rpb24oRil7Ri54LT1hLEYueS09cH0pLFZhKFAsIngiKSYmKFAueC09YSksVmEoUCwieSIpJiYoUC55LT1wKX0pLG0ud2lkdGg9Zi1hK2IsbS5oZWlnaHQ9di1wK0V9ZnVuY3Rpb24gSEZlKGkpe2NyKGkuZWRnZXMoKSxmdW5jdGlvbihhKXt2YXIgZj1pLmVkZ2UoYSkscD1pLm5vZGUoYS52KSx2PWkubm9kZShhLncpLG0sYjtmLnBvaW50cz8obT1mLnBvaW50c1swXSxiPWYucG9pbnRzW2YucG9pbnRzLmxlbmd0aC0xXSk6KGYucG9pbnRzPVtdLG09dixiPXApLGYucG9pbnRzLnVuc2hpZnQocVB0KHAsbSkpLGYucG9pbnRzLnB1c2gocVB0KHYsYikpfSl9ZnVuY3Rpb24gVkZlKGkpe2NyKGkuZWRnZXMoKSxmdW5jdGlvbihhKXt2YXIgZj1pLmVkZ2UoYSk7aWYoVmEoZiwieCIpKXN3aXRjaCgoZi5sYWJlbHBvcz09PSJsInx8Zi5sYWJlbHBvcz09PSJyIikmJihmLndpZHRoLT1mLmxhYmVsb2Zmc2V0KSxmLmxhYmVscG9zKXtjYXNlImwiOmYueC09Zi53aWR0aC8yK2YubGFiZWxvZmZzZXQ7YnJlYWs7Y2FzZSJyIjpmLngrPWYud2lkdGgvMitmLmxhYmVsb2Zmc2V0O2JyZWFrfX0pfWZ1bmN0aW9uIEdGZShpKXtjcihpLmVkZ2VzKCksZnVuY3Rpb24oYSl7dmFyIGY9aS5lZGdlKGEpO2YucmV2ZXJzZWQmJmYucG9pbnRzLnJldmVyc2UoKX0pfWZ1bmN0aW9uIFVGZShpKXtjcihpLm5vZGVzKCksZnVuY3Rpb24oYSl7aWYoaS5jaGlsZHJlbihhKS5sZW5ndGgpe3ZhciBmPWkubm9kZShhKSxwPWkubm9kZShmLmJvcmRlclRvcCksdj1pLm5vZGUoZi5ib3JkZXJCb3R0b20pLG09aS5ub2RlKGxLKGYuYm9yZGVyTGVmdCkpLGI9aS5ub2RlKGxLKGYuYm9yZGVyUmlnaHQpKTtmLndpZHRoPU1hdGguYWJzKGIueC1tLngpLGYuaGVpZ2h0PU1hdGguYWJzKHYueS1wLnkpLGYueD1tLngrZi53aWR0aC8yLGYueT1wLnkrZi5oZWlnaHQvMn19KSxjcihpLm5vZGVzKCksZnVuY3Rpb24oYSl7aS5ub2RlKGEpLmR1bW15PT09ImJvcmRlciImJmkucmVtb3ZlTm9kZShhKX0pfWZ1bmN0aW9uIFdGZShpKXtjcihpLmVkZ2VzKCksZnVuY3Rpb24oYSl7aWYoYS52PT09YS53KXt2YXIgZj1pLm5vZGUoYS52KTtmLnNlbGZFZGdlc3x8KGYuc2VsZkVkZ2VzPVtdKSxmLnNlbGZFZGdlcy5wdXNoKHtlOmEsbGFiZWw6aS5lZGdlKGEpfSksaS5yZW1vdmVFZGdlKGEpfX0pfWZ1bmN0aW9uIEtGZShpKXt2YXIgYT1kSyhpKTtjcihhLGZ1bmN0aW9uKGYpe3ZhciBwPTA7Y3IoZixmdW5jdGlvbih2LG0pe3ZhciBiPWkubm9kZSh2KTtiLm9yZGVyPW0rcCxjcihiLnNlbGZFZGdlcyxmdW5jdGlvbihFKXtlTChpLCJzZWxmZWRnZSIse3dpZHRoOkUubGFiZWwud2lkdGgsaGVpZ2h0OkUubGFiZWwuaGVpZ2h0LHJhbms6Yi5yYW5rLG9yZGVyOm0rICsrcCxlOkUuZSxsYWJlbDpFLmxhYmVsfSwiX3NlIil9KSxkZWxldGUgYi5zZWxmRWRnZXN9KX0pfWZ1bmN0aW9uIFlGZShpKXtjcihpLm5vZGVzKCksZnVuY3Rpb24oYSl7dmFyIGY9aS5ub2RlKGEpO2lmKGYuZHVtbXk9PT0ic2VsZmVkZ2UiKXt2YXIgcD1pLm5vZGUoZi5lLnYpLHY9cC54K3Aud2lkdGgvMixtPXAueSxiPWYueC12LEU9cC5oZWlnaHQvMjtpLnNldEVkZ2UoZi5lLGYubGFiZWwpLGkucmVtb3ZlTm9kZShhKSxmLmxhYmVsLnBvaW50cz1be3g6disyKmIvMyx5Om0tRX0se3g6dis1KmIvNix5Om0tRX0se3g6ditiLHk6bX0se3g6dis1KmIvNix5Om0rRX0se3g6disyKmIvMyx5Om0rRX1dLGYubGFiZWwueD1mLngsZi5sYWJlbC55PWYueX19KX1mdW5jdGlvbiBzMHQoaSxhKXtyZXR1cm4gaEsoaFAoaSxhKSxOdW1iZXIpfWZ1bmN0aW9uIGEwdChpKXt2YXIgYT17fTtyZXR1cm4gY3IoaSxmdW5jdGlvbihmLHApe2FbcC50b0xvd2VyQ2FzZSgpXT1mfSksYX1mdW5jdGlvbiBsRnQoaSxhKXtyZXR1cm4hIWkuY2hpbGRyZW4oYSkubGVuZ3RofWZ1bmN0aW9uIGhGdChpKXtyZXR1cm4gbzB0KGkudikrIjoiK28wdChpLncpKyI6IitvMHQoaS5uYW1lKX12YXIgWEZlPS86L2c7ZnVuY3Rpb24gbzB0KGkpe3JldHVybiBpP1N0cmluZyhpKS5yZXBsYWNlKFhGZSwiXFw6Iik6IiJ9ZnVuY3Rpb24gcDMoaSxhKXthJiZpLmF0dHIoInN0eWxlIixhKX1mdW5jdGlvbiBmRnQoaSxhLGYpe2EmJmkuYXR0cigiY2xhc3MiLGEpLmF0dHIoImNsYXNzIixmKyIgIitpLmF0dHIoImNsYXNzIikpfWZ1bmN0aW9uIGFtKGksYSl7dmFyIGY9YS5ncmFwaCgpO2lmKFNJdChmKSl7dmFyIHA9Zi50cmFuc2l0aW9uO2lmKE5BKHApKXJldHVybiBwKGkpfXJldHVybiBpfXZhciBjMHQ9e25vcm1hbDpaRmUsdmVlOkpGZSx1bmRpcmVjdGVkOnRCZX07ZnVuY3Rpb24gUUZlKGkpe2MwdD1pfWZ1bmN0aW9uIFpGZShpLGEsZixwKXt2YXIgdj1pLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGEpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw5KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInN0cm9rZVdpZHRoIikuYXR0cigibWFya2VyV2lkdGgiLDgpLmF0dHIoIm1hcmtlckhlaWdodCIsNikuYXR0cigib3JpZW50IiwiYXV0byIpLG09di5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAxMCA1IEwgMCAxMCB6Iikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKTtwMyhtLGZbcCsiU3R5bGUiXSksZltwKyJDbGFzcyJdJiZtLmF0dHIoImNsYXNzIixmW3ArIkNsYXNzIl0pfWZ1bmN0aW9uIEpGZShpLGEsZixwKXt2YXIgdj1pLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGEpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw5KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInN0cm9rZVdpZHRoIikuYXR0cigibWFya2VyV2lkdGgiLDgpLmF0dHIoIm1hcmtlckhlaWdodCIsNikuYXR0cigib3JpZW50IiwiYXV0byIpLG09di5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAxMCA1IEwgMCAxMCBMIDQgNSB6Iikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKTtwMyhtLGZbcCsiU3R5bGUiXSksZltwKyJDbGFzcyJdJiZtLmF0dHIoImNsYXNzIixmW3ArIkNsYXNzIl0pfWZ1bmN0aW9uIHRCZShpLGEsZixwKXt2YXIgdj1pLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGEpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw5KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInN0cm9rZVdpZHRoIikuYXR0cigibWFya2VyV2lkdGgiLDgpLmF0dHIoIm1hcmtlckhlaWdodCIsNikuYXR0cigib3JpZW50IiwiYXV0byIpLG09di5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDUgTCAxMCA1Iikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKTtwMyhtLGZbcCsiU3R5bGUiXSksZltwKyJDbGFzcyJdJiZtLmF0dHIoImNsYXNzIixmW3ArIkNsYXNzIl0pfWZ1bmN0aW9uIHUwdChpLGEpe3ZhciBmPWkuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigid2lkdGgiLCIxMDAwMDAiKSxwPWYuYXBwZW5kKCJ4aHRtbDpkaXYiKTtwLmF0dHIoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpO3ZhciB2PWEubGFiZWw7c3dpdGNoKHR5cGVvZiB2KXtjYXNlImZ1bmN0aW9uIjpwLmluc2VydCh2KTticmVhaztjYXNlIm9iamVjdCI6cC5pbnNlcnQoZnVuY3Rpb24oKXtyZXR1cm4gdn0pO2JyZWFrO2RlZmF1bHQ6cC5odG1sKHYpfXAzKHAsYS5sYWJlbFN0eWxlKSxwLnN0eWxlKCJkaXNwbGF5IiwiaW5saW5lLWJsb2NrIikscC5zdHlsZSgid2hpdGUtc3BhY2UiLCJub3dyYXAiKTt2YXIgbT1wLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gZi5hdHRyKCJ3aWR0aCIsbS53aWR0aCkuYXR0cigiaGVpZ2h0IixtLmhlaWdodCksZn1mdW5jdGlvbiBlQmUoaSxhKXt2YXIgZj1pO3JldHVybiBmLm5vZGUoKS5hcHBlbmRDaGlsZChhLmxhYmVsKSxwMyhmLGEubGFiZWxTdHlsZSksZn1mdW5jdGlvbiBuQmUoaSxhKXtmb3IodmFyIGY9aS5hcHBlbmQoInRleHQiKSxwPXJCZShhLmxhYmVsKS5zcGxpdChgCmApLHY9MDt2PHAubGVuZ3RoO3YrKylmLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpLmF0dHIoImR5IiwiMWVtIikuYXR0cigieCIsIjEiKS50ZXh0KHBbdl0pO3JldHVybiBwMyhmLGEubGFiZWxTdHlsZSksZn1mdW5jdGlvbiByQmUoaSl7Zm9yKHZhciBhPSIiLGY9ITEscCx2PTA7djxpLmxlbmd0aDsrK3YpaWYocD1pW3ZdLGYpe3N3aXRjaChwKXtjYXNlIm4iOmErPWAKYDticmVhaztkZWZhdWx0OmErPXB9Zj0hMX1lbHNlIHA9PT0iXFwiP2Y9ITA6YSs9cDtyZXR1cm4gYX1mdW5jdGlvbiBsMHQoaSxhLGYpe3ZhciBwPWEubGFiZWwsdj1pLmFwcGVuZCgiZyIpO2EubGFiZWxUeXBlPT09InN2ZyI/ZUJlKHYsYSk6dHlwZW9mIHAhPSJzdHJpbmcifHxhLmxhYmVsVHlwZT09PSJodG1sIj91MHQodixhKTpuQmUodixhKTt2YXIgbT12Lm5vZGUoKS5nZXRCQm94KCksYjtzd2l0Y2goZil7Y2FzZSJ0b3AiOmI9LWEuaGVpZ2h0LzI7YnJlYWs7Y2FzZSJib3R0b20iOmI9YS5oZWlnaHQvMi1tLmhlaWdodDticmVhaztkZWZhdWx0OmI9LW0uaGVpZ2h0LzJ9cmV0dXJuIHYuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLW0ud2lkdGgvMisiLCIrYisiKSIpLHZ9dmFyIGgwdD1mdW5jdGlvbihpLGEpe3ZhciBmPWEubm9kZXMoKS5maWx0ZXIoZnVuY3Rpb24obSl7cmV0dXJuIGxGdChhLG0pfSkscD1pLnNlbGVjdEFsbCgiZy5jbHVzdGVyIikuZGF0YShmLGZ1bmN0aW9uKG0pe3JldHVybiBtfSk7YW0ocC5leGl0KCksYSkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpO3ZhciB2PXAuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNsdXN0ZXIiKS5hdHRyKCJpZCIsZnVuY3Rpb24obSl7dmFyIGI9YS5ub2RlKG0pO3JldHVybiBiLmlkfSkuc3R5bGUoIm9wYWNpdHkiLDApLmVhY2goZnVuY3Rpb24obSl7dmFyIGI9YS5ub2RlKG0pLEU9eHIodGhpcyk7eHIodGhpcykuYXBwZW5kKCJyZWN0Iik7dmFyIEM9RS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIik7bDB0KEMsYixiLmNsdXN0ZXJMYWJlbFBvcyl9KTtyZXR1cm4gcD1wLm1lcmdlKHYpLHA9YW0ocCxhKS5zdHlsZSgib3BhY2l0eSIsMSkscC5zZWxlY3RBbGwoInJlY3QiKS5lYWNoKGZ1bmN0aW9uKG0pe3ZhciBiPWEubm9kZShtKSxFPXhyKHRoaXMpO3AzKEUsYi5zdHlsZSl9KSxwfTtmdW5jdGlvbiBpQmUoaSl7aDB0PWl9bGV0IGYwdD1mdW5jdGlvbihpLGEpe3ZhciBmPWkuc2VsZWN0QWxsKCJnLmVkZ2VMYWJlbCIpLmRhdGEoYS5lZGdlcygpLGZ1bmN0aW9uKHYpe3JldHVybiBoRnQodil9KS5jbGFzc2VkKCJ1cGRhdGUiLCEwKTtmLmV4aXQoKS5yZW1vdmUoKSxmLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiZWRnZUxhYmVsIiwhMCkuc3R5bGUoIm9wYWNpdHkiLDApLGY9aS5zZWxlY3RBbGwoImcuZWRnZUxhYmVsIiksZi5lYWNoKGZ1bmN0aW9uKHYpe3ZhciBtPXhyKHRoaXMpO20uc2VsZWN0KCIubGFiZWwiKS5yZW1vdmUoKTt2YXIgYj1hLmVkZ2UodiksRT1sMHQobSxhLmVkZ2UodiksMCkuY2xhc3NlZCgibGFiZWwiLCEwKSxDPUUubm9kZSgpLmdldEJCb3goKTtiLmxhYmVsSWQmJkUuYXR0cigiaWQiLGIubGFiZWxJZCksVmEoYiwid2lkdGgiKXx8KGIud2lkdGg9Qy53aWR0aCksVmEoYiwiaGVpZ2h0Iil8fChiLmhlaWdodD1DLmhlaWdodCl9KTt2YXIgcDtyZXR1cm4gZi5leGl0P3A9Zi5leGl0KCk6cD1mLnNlbGVjdEFsbChudWxsKSxhbShwLGEpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKSxmfTtmdW5jdGlvbiBzQmUoaSl7ZjB0PWl9ZnVuY3Rpb24gZEZ0KGksYSl7cmV0dXJuIGkuaW50ZXJzZWN0KGEpfXZhciBkMHQ9ZnVuY3Rpb24oaSxhLGYpe3ZhciBwPWkuc2VsZWN0QWxsKCJnLmVkZ2VQYXRoIikuZGF0YShhLmVkZ2VzKCksZnVuY3Rpb24oYil7cmV0dXJuIGhGdChiKX0pLmNsYXNzZWQoInVwZGF0ZSIsITApLHY9bEJlKHAsYSk7aEJlKHAsYSk7dmFyIG09cC5tZXJnZSE9PXZvaWQgMD9wLm1lcmdlKHYpOnA7cmV0dXJuIGFtKG0sYSkuc3R5bGUoIm9wYWNpdHkiLDEpLG0uZWFjaChmdW5jdGlvbihiKXt2YXIgRT14cih0aGlzKSxDPWEuZWRnZShiKTtDLmVsZW09dGhpcyxDLmlkJiZFLmF0dHIoImlkIixDLmlkKSxmRnQoRSxDLmNsYXNzLChFLmNsYXNzZWQoInVwZGF0ZSIpPyJ1cGRhdGUgIjoiIikrImVkZ2VQYXRoIil9KSxtLnNlbGVjdEFsbCgicGF0aC5wYXRoIikuZWFjaChmdW5jdGlvbihiKXt2YXIgRT1hLmVkZ2UoYik7RS5hcnJvd2hlYWRJZD1mSygiYXJyb3doZWFkIik7dmFyIEM9eHIodGhpcykuYXR0cigibWFya2VyLWVuZCIsZnVuY3Rpb24oKXtyZXR1cm4idXJsKCIrb0JlKGxvY2F0aW9uLmhyZWYsRS5hcnJvd2hlYWRJZCkrIikifSkuc3R5bGUoImZpbGwiLCJub25lIik7YW0oQyxhKS5hdHRyKCJkIixmdW5jdGlvbihBKXtyZXR1cm4gY0JlKGEsQSl9KSxwMyhDLEUuc3R5bGUpfSksbS5zZWxlY3RBbGwoImRlZnMgKiIpLnJlbW92ZSgpLG0uc2VsZWN0QWxsKCJkZWZzIikuZWFjaChmdW5jdGlvbihiKXt2YXIgRT1hLmVkZ2UoYiksQz1mW0UuYXJyb3doZWFkXTtDKHhyKHRoaXMpLEUuYXJyb3doZWFkSWQsRSwiYXJyb3doZWFkIil9KSxtfTtmdW5jdGlvbiBhQmUoaSl7ZDB0PWl9ZnVuY3Rpb24gb0JlKGksYSl7dmFyIGY9aS5zcGxpdCgiIyIpWzBdO3JldHVybiBmKyIjIithfWZ1bmN0aW9uIGNCZShpLGEpe3ZhciBmPWkuZWRnZShhKSxwPWkubm9kZShhLnYpLHY9aS5ub2RlKGEudyksbT1mLnBvaW50cy5zbGljZSgxLGYucG9pbnRzLmxlbmd0aC0xKTtyZXR1cm4gbS51bnNoaWZ0KGRGdChwLG1bMF0pKSxtLnB1c2goZEZ0KHYsbVttLmxlbmd0aC0xXSkpLGdGdChmLG0pfWZ1bmN0aW9uIGdGdChpLGEpe3ZhciBmPShZRXx8VThlLmxpbmUpKCkueChmdW5jdGlvbihwKXtyZXR1cm4gcC54fSkueShmdW5jdGlvbihwKXtyZXR1cm4gcC55fSk7cmV0dXJuKGYuY3VydmV8fGYuaW50ZXJwb2xhdGUpKGkuY3VydmUpLGYoYSl9ZnVuY3Rpb24gdUJlKGkpe3ZhciBhPWkuZ2V0QkJveCgpLGY9aS5vd25lclNWR0VsZW1lbnQuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpLm11bHRpcGx5KGkuZ2V0U2NyZWVuQ1RNKCkpLnRyYW5zbGF0ZShhLndpZHRoLzIsYS5oZWlnaHQvMik7cmV0dXJue3g6Zi5lLHk6Zi5mfX1mdW5jdGlvbiBsQmUoaSxhKXt2YXIgZj1pLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJlZGdlUGF0aCIpLnN0eWxlKCJvcGFjaXR5IiwwKTtyZXR1cm4gZi5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsInBhdGgiKS5hdHRyKCJkIixmdW5jdGlvbihwKXt2YXIgdj1hLmVkZ2UocCksbT1hLm5vZGUocC52KS5lbGVtLGI9Zzkodi5wb2ludHMubGVuZ3RoKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdUJlKG0pfSk7cmV0dXJuIGdGdCh2LGIpfSksZi5hcHBlbmQoImRlZnMiKSxmfWZ1bmN0aW9uIGhCZShpLGEpe3ZhciBmPWkuZXhpdCgpO2FtKGYsYSkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpfXZhciBnMHQ9ZnVuY3Rpb24oaSxhLGYpe3ZhciBwPWEubm9kZXMoKS5maWx0ZXIoZnVuY3Rpb24oYil7cmV0dXJuIWxGdChhLGIpfSksdj1pLnNlbGVjdEFsbCgiZy5ub2RlIikuZGF0YShwLGZ1bmN0aW9uKGIpe3JldHVybiBifSkuY2xhc3NlZCgidXBkYXRlIiwhMCk7di5leGl0KCkucmVtb3ZlKCksdi5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSIpLnN0eWxlKCJvcGFjaXR5IiwwKSx2PWkuc2VsZWN0QWxsKCJnLm5vZGUiKSx2LmVhY2goZnVuY3Rpb24oYil7dmFyIEU9YS5ub2RlKGIpLEM9eHIodGhpcyk7ZkZ0KEMsRS5jbGFzcywoQy5jbGFzc2VkKCJ1cGRhdGUiKT8idXBkYXRlICI6IiIpKyJub2RlIiksQy5zZWxlY3QoImcubGFiZWwiKS5yZW1vdmUoKTt2YXIgQT1DLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKSxQPWwwdChBLEUpLEY9ZltFLnNoYXBlXSxqPWhQKFAubm9kZSgpLmdldEJCb3goKSwid2lkdGgiLCJoZWlnaHQiKTtFLmVsZW09dGhpcyxFLmlkJiZDLmF0dHIoImlkIixFLmlkKSxFLmxhYmVsSWQmJkEuYXR0cigiaWQiLEUubGFiZWxJZCksVmEoRSwid2lkdGgiKSYmKGoud2lkdGg9RS53aWR0aCksVmEoRSwiaGVpZ2h0IikmJihqLmhlaWdodD1FLmhlaWdodCksai53aWR0aCs9RS5wYWRkaW5nTGVmdCtFLnBhZGRpbmdSaWdodCxqLmhlaWdodCs9RS5wYWRkaW5nVG9wK0UucGFkZGluZ0JvdHRvbSxBLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhFLnBhZGRpbmdMZWZ0LUUucGFkZGluZ1JpZ2h0KS8yKyIsIisoRS5wYWRkaW5nVG9wLUUucGFkZGluZ0JvdHRvbSkvMisiKSIpO3ZhciBSPXhyKHRoaXMpO1Iuc2VsZWN0KCIubGFiZWwtY29udGFpbmVyIikucmVtb3ZlKCk7dmFyIEg9RihSLGosRSkuY2xhc3NlZCgibGFiZWwtY29udGFpbmVyIiwhMCk7cDMoSCxFLnN0eWxlKTt2YXIgWT1ILm5vZGUoKS5nZXRCQm94KCk7RS53aWR0aD1ZLndpZHRoLEUuaGVpZ2h0PVkuaGVpZ2h0fSk7dmFyIG07cmV0dXJuIHYuZXhpdD9tPXYuZXhpdCgpOm09di5zZWxlY3RBbGwobnVsbCksYW0obSxhKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCksdn07ZnVuY3Rpb24gZkJlKGkpe2cwdD1pfWZ1bmN0aW9uIGRCZShpLGEpe3ZhciBmPWkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIXhyKHRoaXMpLmNsYXNzZWQoInVwZGF0ZSIpfSk7ZnVuY3Rpb24gcCh2KXt2YXIgbT1hLm5vZGUodik7cmV0dXJuInRyYW5zbGF0ZSgiK20ueCsiLCIrbS55KyIpIn1mLmF0dHIoInRyYW5zZm9ybSIscCksYW0oaSxhKS5zdHlsZSgib3BhY2l0eSIsMSkuYXR0cigidHJhbnNmb3JtIixwKSxhbShmLnNlbGVjdEFsbCgicmVjdCIpLGEpLmF0dHIoIndpZHRoIixmdW5jdGlvbih2KXtyZXR1cm4gYS5ub2RlKHYpLndpZHRofSkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih2KXtyZXR1cm4gYS5ub2RlKHYpLmhlaWdodH0pLmF0dHIoIngiLGZ1bmN0aW9uKHYpe3ZhciBtPWEubm9kZSh2KTtyZXR1cm4tbS53aWR0aC8yfSkuYXR0cigieSIsZnVuY3Rpb24odil7dmFyIG09YS5ub2RlKHYpO3JldHVybi1tLmhlaWdodC8yfSl9ZnVuY3Rpb24gZ0JlKGksYSl7dmFyIGY9aS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4heHIodGhpcykuY2xhc3NlZCgidXBkYXRlIil9KTtmdW5jdGlvbiBwKHYpe3ZhciBtPWEuZWRnZSh2KTtyZXR1cm4gVmEobSwieCIpPyJ0cmFuc2xhdGUoIittLngrIiwiK20ueSsiKSI6IiJ9Zi5hdHRyKCJ0cmFuc2Zvcm0iLHApLGFtKGksYSkuc3R5bGUoIm9wYWNpdHkiLDEpLmF0dHIoInRyYW5zZm9ybSIscCl9ZnVuY3Rpb24gcEJlKGksYSl7dmFyIGY9aS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4heHIodGhpcykuY2xhc3NlZCgidXBkYXRlIil9KTtmdW5jdGlvbiBwKHYpe3ZhciBtPWEubm9kZSh2KTtyZXR1cm4idHJhbnNsYXRlKCIrbS54KyIsIittLnkrIikifWYuYXR0cigidHJhbnNmb3JtIixwKSxhbShpLGEpLnN0eWxlKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLHApfWZ1bmN0aW9uIHBGdChpLGEsZixwKXt2YXIgdj1pLngsbT1pLnksYj12LXAueCxFPW0tcC55LEM9TWF0aC5zcXJ0KGEqYSpFKkUrZipmKmIqYiksQT1NYXRoLmFicyhhKmYqYi9DKTtwLng8diYmKEE9LUEpO3ZhciBQPU1hdGguYWJzKGEqZipFL0MpO3JldHVybiBwLnk8bSYmKFA9LVApLHt4OnYrQSx5Om0rUH19ZnVuY3Rpb24gYkJlKGksYSxmKXtyZXR1cm4gcEZ0KGksYSxhLGYpfWZ1bmN0aW9uIHZCZShpLGEsZixwKXt2YXIgdixtLGIsRSxDLEEsUCxGLGosUixILFkscnQsSixpdDtpZih2PWEueS1pLnksYj1pLngtYS54LEM9YS54KmkueS1pLngqYS55LGo9dipmLngrYipmLnkrQyxSPXYqcC54K2IqcC55K0MsIShqIT09MCYmUiE9PTAmJmJGdChqLFIpKSYmKG09cC55LWYueSxFPWYueC1wLngsQT1wLngqZi55LWYueCpwLnksUD1tKmkueCtFKmkueStBLEY9bSphLngrRSphLnkrQSwhKFAhPT0wJiZGIT09MCYmYkZ0KFAsRikpJiYoSD12KkUtbSpiLEghPT0wKSkpcmV0dXJuIFk9TWF0aC5hYnMoSC8yKSxydD1iKkEtRSpDLEo9cnQ8MD8ocnQtWSkvSDoocnQrWSkvSCxydD1tKkMtdipBLGl0PXJ0PDA/KHJ0LVkpL0g6KHJ0K1kpL0gse3g6Six5Oml0fX1mdW5jdGlvbiBiRnQoaSxhKXtyZXR1cm4gaSphPjB9ZnVuY3Rpb24gYjMoaSxhLGYpe3ZhciBwPWkueCx2PWkueSxtPVtdLGI9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLEU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO2EuZm9yRWFjaChmdW5jdGlvbihIKXtiPU1hdGgubWluKGIsSC54KSxFPU1hdGgubWluKEUsSC55KX0pO2Zvcih2YXIgQz1wLWkud2lkdGgvMi1iLEE9di1pLmhlaWdodC8yLUUsUD0wO1A8YS5sZW5ndGg7UCsrKXt2YXIgRj1hW1BdLGo9YVtQPGEubGVuZ3RoLTE/UCsxOjBdLFI9dkJlKGksZix7eDpDK0YueCx5OkErRi55fSx7eDpDK2oueCx5OkErai55fSk7UiYmbS5wdXNoKFIpfXJldHVybiBtLmxlbmd0aD8obS5sZW5ndGg+MSYmbS5zb3J0KGZ1bmN0aW9uKEgsWSl7dmFyIHJ0PUgueC1mLngsSj1ILnktZi55LGl0PU1hdGguc3FydChydCpydCtKKkopLGZ0PVkueC1mLngsVHQ9WS55LWYueSxrdD1NYXRoLnNxcnQoZnQqZnQrVHQqVHQpO3JldHVybiBpdDxrdD8tMTppdD09PWt0PzA6MX0pLG1bMF0pOihjb25zb2xlLmxvZygiTk8gSU5URVJTRUNUSU9OIEZPVU5ELCBSRVRVUk4gTk9ERSBDRU5URVIiLGkpLGkpfWZ1bmN0aW9uIHAwdChpLGEpe3ZhciBmPWkueCxwPWkueSx2PWEueC1mLG09YS55LXAsYj1pLndpZHRoLzIsRT1pLmhlaWdodC8yLEMsQTtyZXR1cm4gTWF0aC5hYnMobSkqYj5NYXRoLmFicyh2KSpFPyhtPDAmJihFPS1FKSxDPW09PT0wPzA6RSp2L20sQT1FKToodjwwJiYoYj0tYiksQz1iLEE9dj09PTA/MDpiKm0vdikse3g6ZitDLHk6cCtBfX12YXIgYjB0PXtyZWN0Om1CZSxlbGxpcHNlOnlCZSxjaXJjbGU6eEJlLGRpYW1vbmQ6a0JlfTtmdW5jdGlvbiB3QmUoaSl7YjB0PWl9ZnVuY3Rpb24gbUJlKGksYSxmKXt2YXIgcD1pLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInJ4IixmLnJ4KS5hdHRyKCJyeSIsZi5yeSkuYXR0cigieCIsLWEud2lkdGgvMikuYXR0cigieSIsLWEuaGVpZ2h0LzIpLmF0dHIoIndpZHRoIixhLndpZHRoKS5hdHRyKCJoZWlnaHQiLGEuaGVpZ2h0KTtyZXR1cm4gZi5pbnRlcnNlY3Q9ZnVuY3Rpb24odil7cmV0dXJuIHAwdChmLHYpfSxwfWZ1bmN0aW9uIHlCZShpLGEsZil7dmFyIHA9YS53aWR0aC8yLHY9YS5oZWlnaHQvMixtPWkuaW5zZXJ0KCJlbGxpcHNlIiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIsLWEud2lkdGgvMikuYXR0cigieSIsLWEuaGVpZ2h0LzIpLmF0dHIoInJ4IixwKS5hdHRyKCJyeSIsdik7cmV0dXJuIGYuaW50ZXJzZWN0PWZ1bmN0aW9uKGIpe3JldHVybiBwRnQoZixwLHYsYil9LG19ZnVuY3Rpb24geEJlKGksYSxmKXt2YXIgcD1NYXRoLm1heChhLndpZHRoLGEuaGVpZ2h0KS8yLHY9aS5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLC1hLndpZHRoLzIpLmF0dHIoInkiLC1hLmhlaWdodC8yKS5hdHRyKCJyIixwKTtyZXR1cm4gZi5pbnRlcnNlY3Q9ZnVuY3Rpb24obSl7cmV0dXJuIGJCZShmLHAsbSl9LHZ9ZnVuY3Rpb24ga0JlKGksYSxmKXt2YXIgcD1hLndpZHRoKk1hdGguU1FSVDIvMix2PWEuaGVpZ2h0Kk1hdGguU1FSVDIvMixtPVt7eDowLHk6LXZ9LHt4Oi1wLHk6MH0se3g6MCx5OnZ9LHt4OnAseTowfV0sYj1pLmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIsbS5tYXAoZnVuY3Rpb24oRSl7cmV0dXJuIEUueCsiLCIrRS55fSkuam9pbigiICIpKTtyZXR1cm4gZi5pbnRlcnNlY3Q9ZnVuY3Rpb24oRSl7cmV0dXJuIGIzKGYsbSxFKX0sYn1mdW5jdGlvbiBFQmUoKXt2YXIgaT1mdW5jdGlvbihhLGYpe0NCZShmKTt2YXIgcD1iUChhLCJvdXRwdXQiKSx2PWJQKHAsImNsdXN0ZXJzIiksbT1iUChwLCJlZGdlUGF0aHMiKSxiPWYwdChiUChwLCJlZGdlTGFiZWxzIiksZiksRT1nMHQoYlAocCwibm9kZXMiKSxmLGIwdCk7bkwoZikscEJlKEUsZiksZ0JlKGIsZiksZDB0KG0sZixjMHQpO3ZhciBDPWgwdCh2LGYpO2RCZShDLGYpLFNCZShmKX07cmV0dXJuIGkuY3JlYXRlTm9kZXM9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGZCZShhKSxpKTpnMHR9LGkuY3JlYXRlQ2x1c3RlcnM9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGlCZShhKSxpKTpoMHR9LGkuY3JlYXRlRWRnZUxhYmVscz1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oc0JlKGEpLGkpOmYwdH0saS5jcmVhdGVFZGdlUGF0aHM9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGFCZShhKSxpKTpkMHR9LGkuc2hhcGVzPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3QmUoYSksaSk6YjB0fSxpLmFycm93cz1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUUZlKGEpLGkpOmMwdH0saX12YXIgVEJlPXtwYWRkaW5nTGVmdDoxMCxwYWRkaW5nUmlnaHQ6MTAscGFkZGluZ1RvcDoxMCxwYWRkaW5nQm90dG9tOjEwLHJ4OjAscnk6MCxzaGFwZToicmVjdCJ9LF9CZT17YXJyb3doZWFkOiJub3JtYWwiLGN1cnZlOmlnfTtmdW5jdGlvbiBDQmUoaSl7aS5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGY9aS5ub2RlKGEpOyFWYShmLCJsYWJlbCIpJiYhaS5jaGlsZHJlbihhKS5sZW5ndGgmJihmLmxhYmVsPWEpLFZhKGYsInBhZGRpbmdYIikmJnRMKGYse3BhZGRpbmdMZWZ0OmYucGFkZGluZ1gscGFkZGluZ1JpZ2h0OmYucGFkZGluZ1h9KSxWYShmLCJwYWRkaW5nWSIpJiZ0TChmLHtwYWRkaW5nVG9wOmYucGFkZGluZ1kscGFkZGluZ0JvdHRvbTpmLnBhZGRpbmdZfSksVmEoZiwicGFkZGluZyIpJiZ0TChmLHtwYWRkaW5nTGVmdDpmLnBhZGRpbmcscGFkZGluZ1JpZ2h0OmYucGFkZGluZyxwYWRkaW5nVG9wOmYucGFkZGluZyxwYWRkaW5nQm90dG9tOmYucGFkZGluZ30pLHRMKGYsVEJlKSxjcihbInBhZGRpbmdMZWZ0IiwicGFkZGluZ1JpZ2h0IiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iXSxmdW5jdGlvbihwKXtmW3BdPU51bWJlcihmW3BdKX0pLFZhKGYsIndpZHRoIikmJihmLl9wcmV2V2lkdGg9Zi53aWR0aCksVmEoZiwiaGVpZ2h0IikmJihmLl9wcmV2SGVpZ2h0PWYuaGVpZ2h0KX0pLGkuZWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBmPWkuZWRnZShhKTtWYShmLCJsYWJlbCIpfHwoZi5sYWJlbD0iIiksdEwoZixfQmUpfSl9ZnVuY3Rpb24gU0JlKGkpe2NyKGkubm9kZXMoKSxmdW5jdGlvbihhKXt2YXIgZj1pLm5vZGUoYSk7VmEoZiwiX3ByZXZXaWR0aCIpP2Yud2lkdGg9Zi5fcHJldldpZHRoOmRlbGV0ZSBmLndpZHRoLFZhKGYsIl9wcmV2SGVpZ2h0Iik/Zi5oZWlnaHQ9Zi5fcHJldkhlaWdodDpkZWxldGUgZi5oZWlnaHQsZGVsZXRlIGYuX3ByZXZXaWR0aCxkZWxldGUgZi5fcHJldkhlaWdodH0pfWZ1bmN0aW9uIGJQKGksYSl7dmFyIGY9aS5zZWxlY3QoImcuIithKTtyZXR1cm4gZi5lbXB0eSgpJiYoZj1pLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixhKSksZn1mdW5jdGlvbiB2RnQoaSxhLGYpe2NvbnN0IHA9YS53aWR0aCx2PWEuaGVpZ2h0LG09KHArdikqLjksYj1be3g6bS8yLHk6MH0se3g6bSx5Oi1tLzJ9LHt4Om0vMix5Oi1tfSx7eDowLHk6LW0vMn1dLEU9UzUoaSxtLG0sYik7cmV0dXJuIGYuaW50ZXJzZWN0PWZ1bmN0aW9uKEMpe3JldHVybiBiMyhmLGIsQyl9LEV9ZnVuY3Rpb24gd0Z0KGksYSxmKXtjb25zdCB2PWEuaGVpZ2h0LG09di80LGI9YS53aWR0aCsyKm0sRT1be3g6bSx5OjB9LHt4OmItbSx5OjB9LHt4OmIseTotdi8yfSx7eDpiLW0seTotdn0se3g6bSx5Oi12fSx7eDowLHk6LXYvMn1dLEM9UzUoaSxiLHYsRSk7cmV0dXJuIGYuaW50ZXJzZWN0PWZ1bmN0aW9uKEEpe3JldHVybiBiMyhmLEUsQSl9LEN9ZnVuY3Rpb24gbUZ0KGksYSxmKXtjb25zdCBwPWEud2lkdGgsdj1hLmhlaWdodCxtPVt7eDotdi8yLHk6MH0se3g6cCx5OjB9LHt4OnAseTotdn0se3g6LXYvMix5Oi12fSx7eDowLHk6LXYvMn1dLGI9UzUoaSxwLHYsbSk7cmV0dXJuIGYuaW50ZXJzZWN0PWZ1bmN0aW9uKEUpe3JldHVybiBiMyhmLG0sRSl9LGJ9ZnVuY3Rpb24geUZ0KGksYSxmKXtjb25zdCBwPWEud2lkdGgsdj1hLmhlaWdodCxtPVt7eDotMip2LzYseTowfSx7eDpwLXYvNix5OjB9LHt4OnArMip2LzYseTotdn0se3g6di82LHk6LXZ9XSxiPVM1KGkscCx2LG0pO3JldHVybiBmLmludGVyc2VjdD1mdW5jdGlvbihFKXtyZXR1cm4gYjMoZixtLEUpfSxifWZ1bmN0aW9uIHhGdChpLGEsZil7Y29uc3QgcD1hLndpZHRoLHY9YS5oZWlnaHQsbT1be3g6Mip2LzYseTowfSx7eDpwK3YvNix5OjB9LHt4OnAtMip2LzYseTotdn0se3g6LXYvNix5Oi12fV0sYj1TNShpLHAsdixtKTtyZXR1cm4gZi5pbnRlcnNlY3Q9ZnVuY3Rpb24oRSl7cmV0dXJuIGIzKGYsbSxFKX0sYn1mdW5jdGlvbiBrRnQoaSxhLGYpe2NvbnN0IHA9YS53aWR0aCx2PWEuaGVpZ2h0LG09W3t4Oi0yKnYvNix5OjB9LHt4OnArMip2LzYseTowfSx7eDpwLXYvNix5Oi12fSx7eDp2LzYseTotdn1dLGI9UzUoaSxwLHYsbSk7cmV0dXJuIGYuaW50ZXJzZWN0PWZ1bmN0aW9uKEUpe3JldHVybiBiMyhmLG0sRSl9LGJ9ZnVuY3Rpb24gRUZ0KGksYSxmKXtjb25zdCBwPWEud2lkdGgsdj1hLmhlaWdodCxtPVt7eDp2LzYseTowfSx7eDpwLXYvNix5OjB9LHt4OnArMip2LzYseTotdn0se3g6LTIqdi82LHk6LXZ9XSxiPVM1KGkscCx2LG0pO3JldHVybiBmLmludGVyc2VjdD1mdW5jdGlvbihFKXtyZXR1cm4gYjMoZixtLEUpfSxifWZ1bmN0aW9uIFRGdChpLGEsZil7Y29uc3QgcD1hLndpZHRoLHY9YS5oZWlnaHQsbT1be3g6MCx5OjB9LHt4OnArdi8yLHk6MH0se3g6cCx5Oi12LzJ9LHt4OnArdi8yLHk6LXZ9LHt4OjAseTotdn1dLGI9UzUoaSxwLHYsbSk7cmV0dXJuIGYuaW50ZXJzZWN0PWZ1bmN0aW9uKEUpe3JldHVybiBiMyhmLG0sRSl9LGJ9ZnVuY3Rpb24gX0Z0KGksYSxmKXtjb25zdCBwPWEuaGVpZ2h0LHY9YS53aWR0aCtwLzQsbT1pLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInJ4IixwLzIpLmF0dHIoInJ5IixwLzIpLmF0dHIoIngiLC12LzIpLmF0dHIoInkiLC1wLzIpLmF0dHIoIndpZHRoIix2KS5hdHRyKCJoZWlnaHQiLHApO3JldHVybiBmLmludGVyc2VjdD1mdW5jdGlvbihiKXtyZXR1cm4gcDB0KGYsYil9LG19ZnVuY3Rpb24gQ0Z0KGksYSxmKXtjb25zdCBwPWEud2lkdGgsdj1hLmhlaWdodCxtPVt7eDowLHk6MH0se3g6cCx5OjB9LHt4OnAseTotdn0se3g6MCx5Oi12fSx7eDowLHk6MH0se3g6LTgseTowfSx7eDpwKzgseTowfSx7eDpwKzgseTotdn0se3g6LTgseTotdn0se3g6LTgseTowfV0sYj1TNShpLHAsdixtKTtyZXR1cm4gZi5pbnRlcnNlY3Q9ZnVuY3Rpb24oRSl7cmV0dXJuIGIzKGYsbSxFKX0sYn1mdW5jdGlvbiBTRnQoaSxhLGYpe2NvbnN0IHA9YS53aWR0aCx2PXAvMixtPXYvKDIuNStwLzUwKSxiPWEuaGVpZ2h0K20sRT0iTSAwLCIrbSsiIGEgIit2KyIsIittKyIgMCwwLDAgIitwKyIgMCBhICIrdisiLCIrbSsiIDAsMCwwICIrLXArIiAwIGwgMCwiK2IrIiBhICIrdisiLCIrbSsiIDAsMCwwICIrcCsiIDAgbCAwLCIrLWIsQz1pLmF0dHIoImxhYmVsLW9mZnNldC15IixtKS5pbnNlcnQoInBhdGgiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJkIixFKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistcC8yKyIsIistKGIvMittKSsiKSIpO3JldHVybiBmLmludGVyc2VjdD1mdW5jdGlvbihBKXtjb25zdCBQPXAwdChmLEEpLEY9UC54LWYueDtpZih2IT0wJiYoTWF0aC5hYnMoRik8Zi53aWR0aC8yfHxNYXRoLmFicyhGKT09Zi53aWR0aC8yJiZNYXRoLmFicyhQLnktZi55KT5mLmhlaWdodC8yLW0pKXtsZXQgaj1tKm0qKDEtRipGLyh2KnYpKTtqIT0wJiYoaj1NYXRoLnNxcnQoaikpLGo9bS1qLEEueS1mLnk+MCYmKGo9LWopLFAueSs9an1yZXR1cm4gUH0sQ31mdW5jdGlvbiBBQmUoaSl7aS5zaGFwZXMoKS5xdWVzdGlvbj12RnQsaS5zaGFwZXMoKS5oZXhhZ29uPXdGdCxpLnNoYXBlcygpLnN0YWRpdW09X0Z0LGkuc2hhcGVzKCkuc3Vicm91dGluZT1DRnQsaS5zaGFwZXMoKS5jeWxpbmRlcj1TRnQsaS5zaGFwZXMoKS5yZWN0X2xlZnRfaW52X2Fycm93PW1GdCxpLnNoYXBlcygpLmxlYW5fcmlnaHQ9eUZ0LGkuc2hhcGVzKCkubGVhbl9sZWZ0PXhGdCxpLnNoYXBlcygpLnRyYXBlem9pZD1rRnQsaS5zaGFwZXMoKS5pbnZfdHJhcGV6b2lkPUVGdCxpLnNoYXBlcygpLnJlY3RfcmlnaHRfaW52X2Fycm93PVRGdH1mdW5jdGlvbiBMQmUoaSl7aSh7cXVlc3Rpb246dkZ0fSksaSh7aGV4YWdvbjp3RnR9KSxpKHtzdGFkaXVtOl9GdH0pLGkoe3N1YnJvdXRpbmU6Q0Z0fSksaSh7Y3lsaW5kZXI6U0Z0fSksaSh7cmVjdF9sZWZ0X2ludl9hcnJvdzptRnR9KSxpKHtsZWFuX3JpZ2h0OnlGdH0pLGkoe2xlYW5fbGVmdDp4RnR9KSxpKHt0cmFwZXpvaWQ6a0Z0fSksaSh7aW52X3RyYXBlem9pZDpFRnR9KSxpKHtyZWN0X3JpZ2h0X2ludl9hcnJvdzpURnR9KX1mdW5jdGlvbiBTNShpLGEsZixwKXtyZXR1cm4gaS5pbnNlcnQoInBvbHlnb24iLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJwb2ludHMiLHAubWFwKGZ1bmN0aW9uKHYpe3JldHVybiB2LngrIiwiK3YueX0pLmpvaW4oIiAiKSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWEvMisiLCIrZi8yKyIpIil9Y29uc3QgTUJlPXthZGRUb1JlbmRlcjpBQmUsYWRkVG9SZW5kZXJWMjpMQmV9LEFGdD17fSxEQmU9ZnVuY3Rpb24oaSl7Y29uc3QgYT1PYmplY3Qua2V5cyhpKTtmb3IoY29uc3QgZiBvZiBhKUFGdFtmXT1pW2ZdfSxMRnQ9ZnVuY3Rpb24oaSxhLGYscCx2LG0pe2NvbnN0IGI9cD9wLnNlbGVjdChgW2lkPSIke2Z9Il1gKTp4cihgW2lkPSIke2Z9Il1gKSxFPXZ8fGRvY3VtZW50O09iamVjdC5rZXlzKGkpLmZvckVhY2goZnVuY3Rpb24oQSl7Y29uc3QgUD1pW0FdO2xldCBGPSJkZWZhdWx0IjtQLmNsYXNzZXMubGVuZ3RoPjAmJihGPVAuY2xhc3Nlcy5qb2luKCIgIikpO2NvbnN0IGo9ZW0oUC5zdHlsZXMpO2xldCBSPVAudGV4dCE9PXZvaWQgMD9QLnRleHQ6UC5pZCxIO2lmKHUxKERlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtjb25zdCBKPXtsYWJlbDpSLnJlcGxhY2UoL2ZhW2JscnNdPzpmYS1bXHctXSsvZyxpdD0+YDxpIGNsYXNzPScke2l0LnJlcGxhY2UoIjoiLCIgIil9Jz48L2k+YCl9O0g9dTB0KGIsSikubm9kZSgpLEgucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChIKX1lbHNle2NvbnN0IEo9RS5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGV4dCIpO0ouc2V0QXR0cmlidXRlKCJzdHlsZSIsai5sYWJlbFN0eWxlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IikpO2NvbnN0IGl0PVIuc3BsaXQodWkubGluZUJyZWFrUmVnZXgpO2Zvcihjb25zdCBmdCBvZiBpdCl7Y29uc3QgVHQ9RS5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidHNwYW4iKTtUdC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwieG1sOnNwYWNlIiwicHJlc2VydmUiKSxUdC5zZXRBdHRyaWJ1dGUoImR5IiwiMWVtIiksVHQuc2V0QXR0cmlidXRlKCJ4IiwiMSIpLFR0LnRleHRDb250ZW50PWZ0LEouYXBwZW5kQ2hpbGQoVHQpfUg9Sn1sZXQgWT0wLHJ0PSIiO3N3aXRjaChQLnR5cGUpe2Nhc2Uicm91bmQiOlk9NSxydD0icmVjdCI7YnJlYWs7Y2FzZSJzcXVhcmUiOnJ0PSJyZWN0IjticmVhaztjYXNlImRpYW1vbmQiOnJ0PSJxdWVzdGlvbiI7YnJlYWs7Y2FzZSJoZXhhZ29uIjpydD0iaGV4YWdvbiI7YnJlYWs7Y2FzZSJvZGQiOnJ0PSJyZWN0X2xlZnRfaW52X2Fycm93IjticmVhaztjYXNlImxlYW5fcmlnaHQiOnJ0PSJsZWFuX3JpZ2h0IjticmVhaztjYXNlImxlYW5fbGVmdCI6cnQ9ImxlYW5fbGVmdCI7YnJlYWs7Y2FzZSJ0cmFwZXpvaWQiOnJ0PSJ0cmFwZXpvaWQiO2JyZWFrO2Nhc2UiaW52X3RyYXBlem9pZCI6cnQ9Imludl90cmFwZXpvaWQiO2JyZWFrO2Nhc2Uib2RkX3JpZ2h0IjpydD0icmVjdF9sZWZ0X2ludl9hcnJvdyI7YnJlYWs7Y2FzZSJjaXJjbGUiOnJ0PSJjaXJjbGUiO2JyZWFrO2Nhc2UiZWxsaXBzZSI6cnQ9ImVsbGlwc2UiO2JyZWFrO2Nhc2Uic3RhZGl1bSI6cnQ9InN0YWRpdW0iO2JyZWFrO2Nhc2Uic3Vicm91dGluZSI6cnQ9InN1YnJvdXRpbmUiO2JyZWFrO2Nhc2UiY3lsaW5kZXIiOnJ0PSJjeWxpbmRlciI7YnJlYWs7Y2FzZSJncm91cCI6cnQ9InJlY3QiO2JyZWFrO2RlZmF1bHQ6cnQ9InJlY3QifVd0Lndhcm4oIkFkZGluZyBub2RlIixQLmlkLFAuZG9tSWQpLGEuc2V0Tm9kZShtLmRiLmxvb2tVcERvbUlkKFAuaWQpLHtsYWJlbFR5cGU6InN2ZyIsbGFiZWxTdHlsZTpqLmxhYmVsU3R5bGUsc2hhcGU6cnQsbGFiZWw6SCxyeDpZLHJ5OlksY2xhc3M6RixzdHlsZTpqLnN0eWxlLGlkOm0uZGIubG9va1VwRG9tSWQoUC5pZCl9KX0pfSxNRnQ9ZnVuY3Rpb24oaSxhLGYpe2xldCBwPTAsdixtO2lmKGkuZGVmYXVsdFN0eWxlIT09dm9pZCAwKXtjb25zdCBiPWVtKGkuZGVmYXVsdFN0eWxlKTt2PWIuc3R5bGUsbT1iLmxhYmVsU3R5bGV9aS5mb3JFYWNoKGZ1bmN0aW9uKGIpe3ArKztjb25zdCBFPSJMLSIrYi5zdGFydCsiLSIrYi5lbmQsQz0iTFMtIitiLnN0YXJ0LEE9IkxFLSIrYi5lbmQsUD17fTtiLnR5cGU9PT0iYXJyb3dfb3BlbiI/UC5hcnJvd2hlYWQ9Im5vbmUiOlAuYXJyb3doZWFkPSJub3JtYWwiO2xldCBGPSIiLGo9IiI7aWYoYi5zdHlsZSE9PXZvaWQgMCl7Y29uc3QgUj1lbShiLnN0eWxlKTtGPVIuc3R5bGUsaj1SLmxhYmVsU3R5bGV9ZWxzZSBzd2l0Y2goYi5zdHJva2Upe2Nhc2Uibm9ybWFsIjpGPSJmaWxsOm5vbmUiLHYhPT12b2lkIDAmJihGPXYpLG0hPT12b2lkIDAmJihqPW0pO2JyZWFrO2Nhc2UiZG90dGVkIjpGPSJmaWxsOm5vbmU7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtZGFzaGFycmF5OjM7IjticmVhaztjYXNlInRoaWNrIjpGPSIgc3Ryb2tlLXdpZHRoOiAzLjVweDtmaWxsOm5vbmUiO2JyZWFrfVAuc3R5bGU9RixQLmxhYmVsU3R5bGU9aixiLmludGVycG9sYXRlIT09dm9pZCAwP1AuY3VydmU9WjIoYi5pbnRlcnBvbGF0ZSxpZyk6aS5kZWZhdWx0SW50ZXJwb2xhdGUhPT12b2lkIDA/UC5jdXJ2ZT1aMihpLmRlZmF1bHRJbnRlcnBvbGF0ZSxpZyk6UC5jdXJ2ZT1aMihBRnQuY3VydmUsaWcpLGIudGV4dD09PXZvaWQgMD9iLnN0eWxlIT09dm9pZCAwJiYoUC5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIpOihQLmFycm93aGVhZFN0eWxlPSJmaWxsOiAjMzMzIixQLmxhYmVscG9zPSJjIix1MShEZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKT8oUC5sYWJlbFR5cGU9Imh0bWwiLFAubGFiZWw9YDxzcGFuIGlkPSJMLSR7RX0iIGNsYXNzPSJlZGdlTGFiZWwgTC0ke0N9JyBMLSR7QX0iIHN0eWxlPSIke1AubGFiZWxTdHlsZX0iPiR7Yi50ZXh0LnJlcGxhY2UoL2ZhW2JscnNdPzpmYS1bXHctXSsvZyxSPT5gPGkgY2xhc3M9JyR7Ui5yZXBsYWNlKCI6IiwiICIpfSc+PC9pPmApfTwvc3Bhbj5gKTooUC5sYWJlbFR5cGU9InRleHQiLFAubGFiZWw9Yi50ZXh0LnJlcGxhY2UodWkubGluZUJyZWFrUmVnZXgsYApgKSxiLnN0eWxlPT09dm9pZCAwJiYoUC5zdHlsZT1QLnN0eWxlfHwic3Ryb2tlOiAjMzMzOyBzdHJva2Utd2lkdGg6IDEuNXB4O2ZpbGw6bm9uZSIpLFAubGFiZWxTdHlsZT1QLmxhYmVsU3R5bGUucmVwbGFjZSgiY29sb3I6IiwiZmlsbDoiKSkpLFAuaWQ9RSxQLmNsYXNzPUMrIiAiK0EsUC5taW5sZW49Yi5sZW5ndGh8fDEsYS5zZXRFZGdlKGYuZGIubG9va1VwRG9tSWQoYi5zdGFydCksZi5kYi5sb29rVXBEb21JZChiLmVuZCksUCxwKX0pfSxJQmU9e3NldENvbmY6REJlLGFkZFZlcnRpY2VzOkxGdCxhZGRFZGdlczpNRnQsZ2V0Q2xhc3NlczpmdW5jdGlvbihpLGEpe3JldHVybiBXdC5pbmZvKCJFeHRyYWN0aW5nIGNsYXNzZXMiKSxhLmRiLmdldENsYXNzZXMoKX0sZHJhdzpmdW5jdGlvbihpLGEsZixwKXtXdC5pbmZvKCJEcmF3aW5nIGZsb3djaGFydCIpO2NvbnN0e3NlY3VyaXR5TGV2ZWw6dixmbG93Y2hhcnQ6bX09RGUoKTtsZXQgYjt2PT09InNhbmRib3giJiYoYj14cigiI2kiK2EpKTtjb25zdCBFPXhyKHY9PT0ic2FuZGJveCI/Yi5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5IiksQz12PT09InNhbmRib3giP2Iubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQ7bGV0IEE9cC5kYi5nZXREaXJlY3Rpb24oKTtBPT09dm9pZCAwJiYoQT0iVEQiKTtjb25zdCBQPW0ubm9kZVNwYWNpbmd8fDUwLEY9bS5yYW5rU3BhY2luZ3x8NTAsaj1uZXcgbDEoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cmFua2RpcjpBLG5vZGVzZXA6UCxyYW5rc2VwOkYsbWFyZ2lueDo4LG1hcmdpbnk6OH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKXtyZXR1cm57fX0pO2xldCBSO2NvbnN0IEg9cC5kYi5nZXRTdWJHcmFwaHMoKTtmb3IobGV0IG10PUgubGVuZ3RoLTE7bXQ+PTA7bXQtLSlSPUhbbXRdLHAuZGIuYWRkVmVydGV4KFIuaWQsUi50aXRsZSwiZ3JvdXAiLHZvaWQgMCxSLmNsYXNzZXMpO2NvbnN0IFk9cC5kYi5nZXRWZXJ0aWNlcygpO1d0Lndhcm4oIkdldCB2ZXJ0aWNlcyIsWSk7Y29uc3QgcnQ9cC5kYi5nZXRFZGdlcygpO2xldCBKPTA7Zm9yKEo9SC5sZW5ndGgtMTtKPj0wO0otLSl7Uj1IW0pdLFlMdCgiY2x1c3RlciIpLmFwcGVuZCgidGV4dCIpO2ZvcihsZXQgbXQ9MDttdDxSLm5vZGVzLmxlbmd0aDttdCsrKVd0Lndhcm4oIlNldHRpbmcgc3ViZ3JhcGgiLFIubm9kZXNbbXRdLHAuZGIubG9va1VwRG9tSWQoUi5ub2Rlc1ttdF0pLHAuZGIubG9va1VwRG9tSWQoUi5pZCkpLGouc2V0UGFyZW50KHAuZGIubG9va1VwRG9tSWQoUi5ub2Rlc1ttdF0pLHAuZGIubG9va1VwRG9tSWQoUi5pZCkpfUxGdChZLGosYSxFLEMscCksTUZ0KHJ0LGoscCk7Y29uc3QgaXQ9bmV3IEVCZTtNQmUuYWRkVG9SZW5kZXIoaXQpLGl0LmFycm93cygpLm5vbmU9ZnVuY3Rpb24oY3QseXQsc3QseHQpe2NvbnN0IGR0PWN0LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHl0KS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJzdHJva2VXaWR0aCIpLmF0dHIoIm1hcmtlcldpZHRoIiw4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDYpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAwIDAgTCAwIDAgeiIpO3AzKGR0LHN0W3h0KyJTdHlsZSJdKX0saXQuYXJyb3dzKCkubm9ybWFsPWZ1bmN0aW9uKGN0LHl0KXtjdC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIix5dCkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJtYXJrZXJXaWR0aCIsOCkuYXR0cigibWFya2VySGVpZ2h0Iiw2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMTAgNSBMIDAgMTAgeiIpLmF0dHIoImNsYXNzIiwiYXJyb3doZWFkUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIil9O2NvbnN0IGZ0PUUuc2VsZWN0KGBbaWQ9IiR7YX0iXWApLFR0PUUuc2VsZWN0KCIjIithKyIgZyIpO2ZvcihpdChUdCxqKSxUdC5zZWxlY3RBbGwoImcubm9kZSIpLmF0dHIoInRpdGxlIixmdW5jdGlvbigpe3JldHVybiBwLmRiLmdldFRvb2x0aXAodGhpcy5pZCl9KSxwLmRiLmluZGV4Tm9kZXMoInN1YkdyYXBoIitKKSxKPTA7SjxILmxlbmd0aDtKKyspaWYoUj1IW0pdLFIudGl0bGUhPT0idW5kZWZpbmVkIil7Y29uc3QgbXQ9Qy5xdWVyeVNlbGVjdG9yQWxsKCIjIithKycgW2lkPSInK3AuZGIubG9va1VwRG9tSWQoUi5pZCkrJyJdIHJlY3QnKSxjdD1DLnF1ZXJ5U2VsZWN0b3JBbGwoIiMiK2ErJyBbaWQ9IicrcC5kYi5sb29rVXBEb21JZChSLmlkKSsnIl0nKSx5dD1tdFswXS54LmJhc2VWYWwudmFsdWUsc3Q9bXRbMF0ueS5iYXNlVmFsLnZhbHVlLHh0PW10WzBdLndpZHRoLmJhc2VWYWwudmFsdWUsZHQ9eHIoY3RbMF0pLnNlbGVjdCgiLmxhYmVsIik7ZHQuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7eXQreHQvMn0sICR7c3QrMTR9KWApLGR0LmF0dHIoImlkIixhKyJUZXh0Iik7Zm9yKGxldCBDdD0wO0N0PFIuY2xhc3Nlcy5sZW5ndGg7Q3QrKyljdFswXS5jbGFzc0xpc3QuYWRkKFIuY2xhc3Nlc1tDdF0pfWlmKCFtLmh0bWxMYWJlbHMpe2NvbnN0IG10PUMucXVlcnlTZWxlY3RvckFsbCgnW2lkPSInK2ErJyJdIC5lZGdlTGFiZWwgLmxhYmVsJyk7Zm9yKGNvbnN0IGN0IG9mIG10KXtjb25zdCB5dD1jdC5nZXRCQm94KCksc3Q9Qy5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicmVjdCIpO3N0LnNldEF0dHJpYnV0ZSgicngiLDApLHN0LnNldEF0dHJpYnV0ZSgicnkiLDApLHN0LnNldEF0dHJpYnV0ZSgid2lkdGgiLHl0LndpZHRoKSxzdC5zZXRBdHRyaWJ1dGUoImhlaWdodCIseXQuaGVpZ2h0KSxjdC5pbnNlcnRCZWZvcmUoc3QsY3QuZmlyc3RDaGlsZCl9fXM5KGosZnQsbS5kaWFncmFtUGFkZGluZyxtLnVzZU1heFdpZHRoKSxPYmplY3Qua2V5cyhZKS5mb3JFYWNoKGZ1bmN0aW9uKG10KXtjb25zdCBjdD1ZW210XTtpZihjdC5saW5rKXtjb25zdCB5dD1FLnNlbGVjdCgiIyIrYSsnIFtpZD0iJytwLmRiLmxvb2tVcERvbUlkKG10KSsnIl0nKTtpZih5dCl7Y29uc3Qgc3Q9Qy5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYSIpO3N0LnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImNsYXNzIixjdC5jbGFzc2VzLmpvaW4oIiAiKSksc3Quc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiaHJlZiIsY3QubGluayksc3Quc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicmVsIiwibm9vcGVuZXIiKSx2PT09InNhbmRib3giP3N0LnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRhcmdldCIsIl90b3AiKTpjdC5saW5rVGFyZ2V0JiZzdC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0YXJnZXQiLGN0LmxpbmtUYXJnZXQpO2NvbnN0IHh0PXl0Lmluc2VydChmdW5jdGlvbigpe3JldHVybiBzdH0sIjpmaXJzdC1jaGlsZCIpLGh0PXl0LnNlbGVjdCgiLmxhYmVsLWNvbnRhaW5lciIpO2h0JiZ4dC5hcHBlbmQoZnVuY3Rpb24oKXtyZXR1cm4gaHQubm9kZSgpfSk7Y29uc3QgZHQ9eXQuc2VsZWN0KCIubGFiZWwiKTtkdCYmeHQuYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIGR0Lm5vZGUoKX0pfX19KX19O2Z1bmN0aW9uIEE1KGkpe3ZhciBhPXtvcHRpb25zOntkaXJlY3RlZDppLmlzRGlyZWN0ZWQoKSxtdWx0aWdyYXBoOmkuaXNNdWx0aWdyYXBoKCksY29tcG91bmQ6aS5pc0NvbXBvdW5kKCl9LG5vZGVzOk9CZShpKSxlZGdlczpOQmUoaSl9O3JldHVybiB0ZihpLmdyYXBoKCkpfHwoYS52YWx1ZT1TT2UoaS5ncmFwaCgpKSksYX1mdW5jdGlvbiBPQmUoaSl7cmV0dXJuIEZmKGkubm9kZXMoKSxmdW5jdGlvbihhKXt2YXIgZj1pLm5vZGUoYSkscD1pLnBhcmVudChhKSx2PXt2OmF9O3JldHVybiB0ZihmKXx8KHYudmFsdWU9ZiksdGYocCl8fCh2LnBhcmVudD1wKSx2fSl9ZnVuY3Rpb24gTkJlKGkpe3JldHVybiBGZihpLmVkZ2VzKCksZnVuY3Rpb24oYSl7dmFyIGY9aS5lZGdlKGEpLHA9e3Y6YS52LHc6YS53fTtyZXR1cm4gdGYoYS5uYW1lKXx8KHAubmFtZT1hLm5hbWUpLHRmKGYpfHwocC52YWx1ZT1mKSxwfSl9Y29uc3QgUEJlPShpLGEsZixwKT0+e2EuZm9yRWFjaCh2PT57RkJlW3ZdKGksZixwKX0pfSxGQmU9e2V4dGVuc2lvbjooaSxhLGYpPT57V3QudHJhY2UoIk1ha2luZyBtYXJrZXJzIGZvciAiLGYpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsYSsiLWV4dGVuc2lvblN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgZXh0ZW5zaW9uICIrYSkuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDcgTDE4LDEzIFYgMSBaIiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixhKyItZXh0ZW5zaW9uRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgZXh0ZW5zaW9uICIrYSkuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEsMSBWIDEzIEwxOCw3IFoiKX0sY29tcG9zaXRpb246KGksYSk9PntpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGErIi1jb21wb3NpdGlvblN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgY29tcG9zaXRpb24gIithKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGErIi1jb21wb3NpdGlvbkVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNvbXBvc2l0aW9uICIrYSkuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKX0sYWdncmVnYXRpb246KGksYSk9PntpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGErIi1hZ2dyZWdhdGlvblN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgYWdncmVnYXRpb24gIithKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGErIi1hZ2dyZWdhdGlvbkVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGFnZ3JlZ2F0aW9uICIrYSkuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKX0sZGVwZW5kZW5jeTooaSxhKT0+e2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsYSsiLWRlcGVuZGVuY3lTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGRlcGVuZGVuY3kgIithKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDUsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsYSsiLWRlcGVuZGVuY3lFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBkZXBlbmRlbmN5ICIrYSkuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDE0LDcgTDksMSBaIil9LGxvbGxpcG9wOihpLGEpPT57aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixhKyItbG9sbGlwb3BTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGxvbGxpcG9wICIrYSkuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY3giLDYpLmF0dHIoImN5Iiw3KS5hdHRyKCJyIiw2KX0scG9pbnQ6KGksYSk9PntpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGErIi1wb2ludEVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyICIrYSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDEwKS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDEyKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDEyKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMTAgNSBMIDAgMTAgeiIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKSxpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGErIi1wb2ludFN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIithKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMikuYXR0cigibWFya2VySGVpZ2h0IiwxMikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgNSBMIDEwIDEwIEwgMTAgMCB6IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpfSxjaXJjbGU6KGksYSk9PntpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGErIi1jaXJjbGVFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciAiK2EpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiwxMSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMSkuYXR0cigibWFya2VySGVpZ2h0IiwxMSkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLCI1IikuYXR0cigiY3kiLCI1IikuYXR0cigiciIsIjUiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIiksaS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixhKyItY2lyY2xlU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciAiK2EpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiwtMSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMSkuYXR0cigibWFya2VySGVpZ2h0IiwxMSkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLCI1IikuYXR0cigiY3kiLCI1IikuYXR0cigiciIsIjUiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIil9LGNyb3NzOihpLGEpPT57aS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixhKyItY3Jvc3NFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBjcm9zcyAiK2EpLmF0dHIoInZpZXdCb3giLCIwIDAgMTEgMTEiKS5hdHRyKCJyZWZYIiwxMikuYXR0cigicmVmWSIsNS4yKS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIGwgOSw5IE0gMTAsMSBsIC05LDkiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIiksaS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixhKyItY3Jvc3NTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNyb3NzICIrYSkuYXR0cigidmlld0JveCIsIjAgMCAxMSAxMSIpLmF0dHIoInJlZlgiLC0xKS5hdHRyKCJyZWZZIiw1LjIpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDEgbCA5LDkgTSAxMCwxIGwgLTksOSIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKX0sYmFyYjooaSxhKT0+e2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsYSsiLWJhcmJFbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE0KS5hdHRyKCJtYXJrZXJVbml0cyIsInN0cm9rZVdpZHRoIikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE5LDcgTDksMTMgTDE0LDcgTDksMSBaIil9fSxERnQ9UEJlO2Z1bmN0aW9uIEJCZShpLGEpe2EmJmkuYXR0cigic3R5bGUiLGEpfWZ1bmN0aW9uIFJCZShpKXtjb25zdCBhPXhyKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJmb3JlaWduT2JqZWN0IikpLGY9YS5hcHBlbmQoInhodG1sOmRpdiIpLHA9aS5sYWJlbCx2PWkuaXNOb2RlPyJub2RlTGFiZWwiOiJlZGdlTGFiZWwiO3JldHVybiBmLmh0bWwoJzxzcGFuIGNsYXNzPSInK3YrJyIgJysoaS5sYWJlbFN0eWxlPydzdHlsZT0iJytpLmxhYmVsU3R5bGUrJyInOiIiKSsiPiIrcCsiPC9zcGFuPiIpLEJCZShmLGkubGFiZWxTdHlsZSksZi5zdHlsZSgiZGlzcGxheSIsImlubGluZS1ibG9jayIpLGYuc3R5bGUoIndoaXRlLXNwYWNlIiwibm93cmFwIiksZi5hdHRyKCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiKSxhLm5vZGUoKX1jb25zdCBkcD0oaSxhLGYscCk9PntsZXQgdj1pfHwiIjtpZih0eXBlb2Ygdj09Im9iamVjdCImJih2PXZbMF0pLHUxKERlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXt2PXYucmVwbGFjZSgvXFxufFxuL2csIjxiciAvPiIpLFd0LmluZm8oInZlcnRleFRleHQiK3YpO2NvbnN0IG09e2lzTm9kZTpwLGxhYmVsOm5QKHYpLnJlcGxhY2UoL2ZhW2JscnNdPzpmYS1bXHctXSsvZyxFPT5gPGkgY2xhc3M9JyR7RS5yZXBsYWNlKCI6IiwiICIpfSc+PC9pPmApLGxhYmVsU3R5bGU6YS5yZXBsYWNlKCJmaWxsOiIsImNvbG9yOiIpfTtyZXR1cm4gUkJlKG0pfWVsc2V7Y29uc3QgbT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGV4dCIpO20uc2V0QXR0cmlidXRlKCJzdHlsZSIsYS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpKTtsZXQgYj1bXTt0eXBlb2Ygdj09InN0cmluZyI/Yj12LnNwbGl0KC9cXG58XG58PGJyXHMqXC8/Pi9naSk6QXJyYXkuaXNBcnJheSh2KT9iPXY6Yj1bXTtmb3IoY29uc3QgRSBvZiBiKXtjb25zdCBDPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0c3BhbiIpO0Muc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsInhtbDpzcGFjZSIsInByZXNlcnZlIiksQy5zZXRBdHRyaWJ1dGUoImR5IiwiMWVtIiksQy5zZXRBdHRyaWJ1dGUoIngiLCIwIiksZj9DLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJ0aXRsZS1yb3ciKTpDLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJyb3ciKSxDLnRleHRDb250ZW50PUUudHJpbSgpLG0uYXBwZW5kQ2hpbGQoQyl9cmV0dXJuIG19fTtmdW5jdGlvbiBqQmUoaSxhKXt2YXJ7aW5jbHVkZUltYWdlQWx0OmY9ITB9PWF8fHt9O3JldHVybiBJRnQoaSxmKX1mdW5jdGlvbiBJRnQoaSxhKXtyZXR1cm4gaSYmdHlwZW9mIGk9PSJvYmplY3QiJiYoaS52YWx1ZXx8KGE/aS5hbHQ6IiIpfHwiY2hpbGRyZW4iaW4gaSYmT0Z0KGkuY2hpbGRyZW4sYSl8fEFycmF5LmlzQXJyYXkoaSkmJk9GdChpLGEpKXx8IiJ9ZnVuY3Rpb24gT0Z0KGksYSl7Zm9yKHZhciBmPVtdLHA9LTE7KytwPGkubGVuZ3RoOylmW3BdPUlGdChpW3BdLGEpO3JldHVybiBmLmpvaW4oIiIpfWZ1bmN0aW9uIHYzKGksYSxmLHApe2NvbnN0IHY9aS5sZW5ndGg7bGV0IG09MCxiO2lmKGE8MD9hPS1hPnY/MDp2K2E6YT1hPnY/djphLGY9Zj4wP2Y6MCxwLmxlbmd0aDwxZTQpYj1BcnJheS5mcm9tKHApLGIudW5zaGlmdChhLGYpLFtdLnNwbGljZS5hcHBseShpLGIpO2Vsc2UgZm9yKGYmJltdLnNwbGljZS5hcHBseShpLFthLGZdKTttPHAubGVuZ3RoOyliPXAuc2xpY2UobSxtKzFlNCksYi51bnNoaWZ0KGEsMCksW10uc3BsaWNlLmFwcGx5KGksYiksbSs9MWU0LGErPTFlNH1mdW5jdGlvbiBudihpLGEpe3JldHVybiBpLmxlbmd0aD4wPyh2MyhpLGkubGVuZ3RoLDAsYSksaSk6YX1jb25zdCBORnQ9e30uaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gJEJlKGkpe2NvbnN0IGE9e307bGV0IGY9LTE7Zm9yKDsrK2Y8aS5sZW5ndGg7KXpCZShhLGlbZl0pO3JldHVybiBhfWZ1bmN0aW9uIHpCZShpLGEpe2xldCBmO2ZvcihmIGluIGEpe2NvbnN0IHY9KE5GdC5jYWxsKGksZik/aVtmXTp2b2lkIDApfHwoaVtmXT17fSksbT1hW2ZdO2xldCBiO2ZvcihiIGluIG0pe05GdC5jYWxsKHYsYil8fCh2W2JdPVtdKTtjb25zdCBFPW1bYl07cUJlKHZbYl0sQXJyYXkuaXNBcnJheShFKT9FOkU/W0VdOltdKX19fWZ1bmN0aW9uIHFCZShpLGEpe2xldCBmPS0xO2NvbnN0IHA9W107Zm9yKDsrK2Y8YS5sZW5ndGg7KShhW2ZdLmFkZD09PSJhZnRlciI/aTpwKS5wdXNoKGFbZl0pO3YzKGksMCwwLHApfWNvbnN0IEhCZT0vWyEtLzotQFstYHstflx1MDBBMVx1MDBBN1x1MDBBQlx1MDBCNlx1MDBCN1x1MDBCQlx1MDBCRlx1MDM3RVx1MDM4N1x1MDU1QS1cdTA1NUZcdTA1ODlcdTA1OEFcdTA1QkVcdTA1QzBcdTA1QzNcdTA1QzZcdTA1RjNcdTA1RjRcdTA2MDlcdTA2MEFcdTA2MENcdTA2MERcdTA2MUJcdTA2MUVcdTA2MUZcdTA2NkEtXHUwNjZEXHUwNkQ0XHUwNzAwLVx1MDcwRFx1MDdGNy1cdTA3RjlcdTA4MzAtXHUwODNFXHUwODVFXHUwOTY0XHUwOTY1XHUwOTcwXHUwOUZEXHUwQTc2XHUwQUYwXHUwQzc3XHUwQzg0XHUwREY0XHUwRTRGXHUwRTVBXHUwRTVCXHUwRjA0LVx1MEYxMlx1MEYxNFx1MEYzQS1cdTBGM0RcdTBGODVcdTBGRDAtXHUwRkQ0XHUwRkQ5XHUwRkRBXHUxMDRBLVx1MTA0Rlx1MTBGQlx1MTM2MC1cdTEzNjhcdTE0MDBcdTE2NkVcdTE2OUJcdTE2OUNcdTE2RUItXHUxNkVEXHUxNzM1XHUxNzM2XHUxN0Q0LVx1MTdENlx1MTdEOC1cdTE3REFcdTE4MDAtXHUxODBBXHUxOTQ0XHUxOTQ1XHUxQTFFXHUxQTFGXHUxQUEwLVx1MUFBNlx1MUFBOC1cdTFBQURcdTFCNUEtXHUxQjYwXHUxQkZDLVx1MUJGRlx1MUMzQi1cdTFDM0ZcdTFDN0VcdTFDN0ZcdTFDQzAtXHUxQ0M3XHUxQ0QzXHUyMDEwLVx1MjAyN1x1MjAzMC1cdTIwNDNcdTIwNDUtXHUyMDUxXHUyMDUzLVx1MjA1RVx1MjA3RFx1MjA3RVx1MjA4RFx1MjA4RVx1MjMwOC1cdTIzMEJcdTIzMjlcdTIzMkFcdTI3NjgtXHUyNzc1XHUyN0M1XHUyN0M2XHUyN0U2LVx1MjdFRlx1Mjk4My1cdTI5OThcdTI5RDgtXHUyOURCXHUyOUZDXHUyOUZEXHUyQ0Y5LVx1MkNGQ1x1MkNGRVx1MkNGRlx1MkQ3MFx1MkUwMC1cdTJFMkVcdTJFMzAtXHUyRTRGXHUyRTUyXHUzMDAxLVx1MzAwM1x1MzAwOC1cdTMwMTFcdTMwMTQtXHUzMDFGXHUzMDMwXHUzMDNEXHUzMEEwXHUzMEZCXHVBNEZFXHVBNEZGXHVBNjBELVx1QTYwRlx1QTY3M1x1QTY3RVx1QTZGMi1cdUE2RjdcdUE4NzQtXHVBODc3XHVBOENFXHVBOENGXHVBOEY4LVx1QThGQVx1QThGQ1x1QTkyRVx1QTkyRlx1QTk1Rlx1QTlDMS1cdUE5Q0RcdUE5REVcdUE5REZcdUFBNUMtXHVBQTVGXHVBQURFXHVBQURGXHVBQUYwXHVBQUYxXHVBQkVCXHVGRDNFXHVGRDNGXHVGRTEwLVx1RkUxOVx1RkUzMC1cdUZFNTJcdUZFNTQtXHVGRTYxXHVGRTYzXHVGRTY4XHVGRTZBXHVGRTZCXHVGRjAxLVx1RkYwM1x1RkYwNS1cdUZGMEFcdUZGMEMtXHVGRjBGXHVGRjFBXHVGRjFCXHVGRjFGXHVGRjIwXHVGRjNCLVx1RkYzRFx1RkYzRlx1RkY1Qlx1RkY1RFx1RkY1Ri1cdUZGNjVdLyx3Mz1vaygvW0EtWmEtel0vKSx2MHQ9b2soL1xkLyksVkJlPW9rKC9bXGRBLUZhLWZdLyksb209b2soL1tcZEEtWmEtel0vKSxHQmU9b2soL1shLS86LUBbLWB7LX5dLyksUEZ0PW9rKC9bIy0nKitcLS05PT9BLVpeLX5dLyk7ZnVuY3Rpb24gdzB0KGkpe3JldHVybiBpIT09bnVsbCYmKGk8MzJ8fGk9PT0xMjcpfWZ1bmN0aW9uIHJ2KGkpe3JldHVybiBpIT09bnVsbCYmKGk8MHx8aT09PTMyKX1mdW5jdGlvbiBqYShpKXtyZXR1cm4gaSE9PW51bGwmJmk8LTJ9ZnVuY3Rpb24gQmYoaSl7cmV0dXJuIGk9PT0tMnx8aT09PS0xfHxpPT09MzJ9Y29uc3QgVUJlPW9rKC9ccy8pLFdCZT1vayhIQmUpO2Z1bmN0aW9uIG9rKGkpe3JldHVybiBhO2Z1bmN0aW9uIGEoZil7cmV0dXJuIGYhPT1udWxsJiZpLnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShmKSl9fWZ1bmN0aW9uIFF1KGksYSxmLHApe2NvbnN0IHY9cD9wLTE6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO2xldCBtPTA7cmV0dXJuIGI7ZnVuY3Rpb24gYihDKXtyZXR1cm4gQmYoQyk/KGkuZW50ZXIoZiksRShDKSk6YShDKX1mdW5jdGlvbiBFKEMpe3JldHVybiBCZihDKSYmbSsrPHY/KGkuY29uc3VtZShDKSxFKTooaS5leGl0KGYpLGEoQykpfX1jb25zdCBLQmU9e3Rva2VuaXplOllCZX07ZnVuY3Rpb24gWUJlKGkpe2NvbnN0IGE9aS5hdHRlbXB0KHRoaXMucGFyc2VyLmNvbnN0cnVjdHMuY29udGVudEluaXRpYWwscCx2KTtsZXQgZjtyZXR1cm4gYTtmdW5jdGlvbiBwKEUpe2lmKEU9PT1udWxsKXtpLmNvbnN1bWUoRSk7cmV0dXJufXJldHVybiBpLmVudGVyKCJsaW5lRW5kaW5nIiksaS5jb25zdW1lKEUpLGkuZXhpdCgibGluZUVuZGluZyIpLFF1KGksYSwibGluZVByZWZpeCIpfWZ1bmN0aW9uIHYoRSl7cmV0dXJuIGkuZW50ZXIoInBhcmFncmFwaCIpLG0oRSl9ZnVuY3Rpb24gbShFKXtjb25zdCBDPWkuZW50ZXIoImNodW5rVGV4dCIse2NvbnRlbnRUeXBlOiJ0ZXh0IixwcmV2aW91czpmfSk7cmV0dXJuIGYmJihmLm5leHQ9QyksZj1DLGIoRSl9ZnVuY3Rpb24gYihFKXtpZihFPT09bnVsbCl7aS5leGl0KCJjaHVua1RleHQiKSxpLmV4aXQoInBhcmFncmFwaCIpLGkuY29uc3VtZShFKTtyZXR1cm59cmV0dXJuIGphKEUpPyhpLmNvbnN1bWUoRSksaS5leGl0KCJjaHVua1RleHQiKSxtKTooaS5jb25zdW1lKEUpLGIpfX1jb25zdCBYQmU9e3Rva2VuaXplOlFCZX0sRkZ0PXt0b2tlbml6ZTpaQmV9O2Z1bmN0aW9uIFFCZShpKXtjb25zdCBhPXRoaXMsZj1bXTtsZXQgcD0wLHYsbSxiO3JldHVybiBFO2Z1bmN0aW9uIEUoZnQpe2lmKHA8Zi5sZW5ndGgpe2NvbnN0IFR0PWZbcF07cmV0dXJuIGEuY29udGFpbmVyU3RhdGU9VHRbMV0saS5hdHRlbXB0KFR0WzBdLmNvbnRpbnVhdGlvbixDLEEpKGZ0KX1yZXR1cm4gQShmdCl9ZnVuY3Rpb24gQyhmdCl7aWYocCsrLGEuY29udGFpbmVyU3RhdGUuX2Nsb3NlRmxvdyl7YS5jb250YWluZXJTdGF0ZS5fY2xvc2VGbG93PXZvaWQgMCx2JiZpdCgpO2NvbnN0IFR0PWEuZXZlbnRzLmxlbmd0aDtsZXQga3Q9VHQsbXQ7Zm9yKDtrdC0tOylpZihhLmV2ZW50c1trdF1bMF09PT0iZXhpdCImJmEuZXZlbnRzW2t0XVsxXS50eXBlPT09ImNodW5rRmxvdyIpe210PWEuZXZlbnRzW2t0XVsxXS5lbmQ7YnJlYWt9SihwKTtsZXQgY3Q9VHQ7Zm9yKDtjdDxhLmV2ZW50cy5sZW5ndGg7KWEuZXZlbnRzW2N0XVsxXS5lbmQ9T2JqZWN0LmFzc2lnbih7fSxtdCksY3QrKztyZXR1cm4gdjMoYS5ldmVudHMsa3QrMSwwLGEuZXZlbnRzLnNsaWNlKFR0KSksYS5ldmVudHMubGVuZ3RoPWN0LEEoZnQpfXJldHVybiBFKGZ0KX1mdW5jdGlvbiBBKGZ0KXtpZihwPT09Zi5sZW5ndGgpe2lmKCF2KXJldHVybiBqKGZ0KTtpZih2LmN1cnJlbnRDb25zdHJ1Y3QmJnYuY3VycmVudENvbnN0cnVjdC5jb25jcmV0ZSlyZXR1cm4gSChmdCk7YS5pbnRlcnJ1cHQ9ISEodi5jdXJyZW50Q29uc3RydWN0JiYhdi5fZ2ZtVGFibGVEeW5hbWljSW50ZXJydXB0SGFjayl9cmV0dXJuIGEuY29udGFpbmVyU3RhdGU9e30saS5jaGVjayhGRnQsUCxGKShmdCl9ZnVuY3Rpb24gUChmdCl7cmV0dXJuIHYmJml0KCksSihwKSxqKGZ0KX1mdW5jdGlvbiBGKGZ0KXtyZXR1cm4gYS5wYXJzZXIubGF6eVthLm5vdygpLmxpbmVdPXAhPT1mLmxlbmd0aCxiPWEubm93KCkub2Zmc2V0LEgoZnQpfWZ1bmN0aW9uIGooZnQpe3JldHVybiBhLmNvbnRhaW5lclN0YXRlPXt9LGkuYXR0ZW1wdChGRnQsUixIKShmdCl9ZnVuY3Rpb24gUihmdCl7cmV0dXJuIHArKyxmLnB1c2goW2EuY3VycmVudENvbnN0cnVjdCxhLmNvbnRhaW5lclN0YXRlXSksaihmdCl9ZnVuY3Rpb24gSChmdCl7aWYoZnQ9PT1udWxsKXt2JiZpdCgpLEooMCksaS5jb25zdW1lKGZ0KTtyZXR1cm59cmV0dXJuIHY9dnx8YS5wYXJzZXIuZmxvdyhhLm5vdygpKSxpLmVudGVyKCJjaHVua0Zsb3ciLHtjb250ZW50VHlwZToiZmxvdyIscHJldmlvdXM6bSxfdG9rZW5pemVyOnZ9KSxZKGZ0KX1mdW5jdGlvbiBZKGZ0KXtpZihmdD09PW51bGwpe3J0KGkuZXhpdCgiY2h1bmtGbG93IiksITApLEooMCksaS5jb25zdW1lKGZ0KTtyZXR1cm59cmV0dXJuIGphKGZ0KT8oaS5jb25zdW1lKGZ0KSxydChpLmV4aXQoImNodW5rRmxvdyIpKSxwPTAsYS5pbnRlcnJ1cHQ9dm9pZCAwLEUpOihpLmNvbnN1bWUoZnQpLFkpfWZ1bmN0aW9uIHJ0KGZ0LFR0KXtjb25zdCBrdD1hLnNsaWNlU3RyZWFtKGZ0KTtpZihUdCYma3QucHVzaChudWxsKSxmdC5wcmV2aW91cz1tLG0mJihtLm5leHQ9ZnQpLG09ZnQsdi5kZWZpbmVTa2lwKGZ0LnN0YXJ0KSx2LndyaXRlKGt0KSxhLnBhcnNlci5sYXp5W2Z0LnN0YXJ0LmxpbmVdKXtsZXQgbXQ9di5ldmVudHMubGVuZ3RoO2Zvcig7bXQtLTspaWYodi5ldmVudHNbbXRdWzFdLnN0YXJ0Lm9mZnNldDxiJiYoIXYuZXZlbnRzW210XVsxXS5lbmR8fHYuZXZlbnRzW210XVsxXS5lbmQub2Zmc2V0PmIpKXJldHVybjtjb25zdCBjdD1hLmV2ZW50cy5sZW5ndGg7bGV0IHl0PWN0LHN0LHh0O2Zvcig7eXQtLTspaWYoYS5ldmVudHNbeXRdWzBdPT09ImV4aXQiJiZhLmV2ZW50c1t5dF1bMV0udHlwZT09PSJjaHVua0Zsb3ciKXtpZihzdCl7eHQ9YS5ldmVudHNbeXRdWzFdLmVuZDticmVha31zdD0hMH1mb3IoSihwKSxtdD1jdDttdDxhLmV2ZW50cy5sZW5ndGg7KWEuZXZlbnRzW210XVsxXS5lbmQ9T2JqZWN0LmFzc2lnbih7fSx4dCksbXQrKzt2MyhhLmV2ZW50cyx5dCsxLDAsYS5ldmVudHMuc2xpY2UoY3QpKSxhLmV2ZW50cy5sZW5ndGg9bXR9fWZ1bmN0aW9uIEooZnQpe2xldCBUdD1mLmxlbmd0aDtmb3IoO1R0LS0gPmZ0Oyl7Y29uc3Qga3Q9ZltUdF07YS5jb250YWluZXJTdGF0ZT1rdFsxXSxrdFswXS5leGl0LmNhbGwoYSxpKX1mLmxlbmd0aD1mdH1mdW5jdGlvbiBpdCgpe3Yud3JpdGUoW251bGxdKSxtPXZvaWQgMCx2PXZvaWQgMCxhLmNvbnRhaW5lclN0YXRlLl9jbG9zZUZsb3c9dm9pZCAwfX1mdW5jdGlvbiBaQmUoaSxhLGYpe3JldHVybiBRdShpLGkuYXR0ZW1wdCh0aGlzLnBhcnNlci5jb25zdHJ1Y3RzLmRvY3VtZW50LGEsZiksImxpbmVQcmVmaXgiLHRoaXMucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKT92b2lkIDA6NCl9ZnVuY3Rpb24gQkZ0KGkpe2lmKGk9PT1udWxsfHxydihpKXx8VUJlKGkpKXJldHVybiAxO2lmKFdCZShpKSlyZXR1cm4gMn1mdW5jdGlvbiBtMHQoaSxhLGYpe2NvbnN0IHA9W107bGV0IHY9LTE7Zm9yKDsrK3Y8aS5sZW5ndGg7KXtjb25zdCBtPWlbdl0ucmVzb2x2ZUFsbDttJiYhcC5pbmNsdWRlcyhtKSYmKGE9bShhLGYpLHAucHVzaChtKSl9cmV0dXJuIGF9Y29uc3QgeTB0PXtuYW1lOiJhdHRlbnRpb24iLHRva2VuaXplOnRSZSxyZXNvbHZlQWxsOkpCZX07ZnVuY3Rpb24gSkJlKGksYSl7bGV0IGY9LTEscCx2LG0sYixFLEMsQSxQO2Zvcig7KytmPGkubGVuZ3RoOylpZihpW2ZdWzBdPT09ImVudGVyIiYmaVtmXVsxXS50eXBlPT09ImF0dGVudGlvblNlcXVlbmNlIiYmaVtmXVsxXS5fY2xvc2Upe2ZvcihwPWY7cC0tOylpZihpW3BdWzBdPT09ImV4aXQiJiZpW3BdWzFdLnR5cGU9PT0iYXR0ZW50aW9uU2VxdWVuY2UiJiZpW3BdWzFdLl9vcGVuJiZhLnNsaWNlU2VyaWFsaXplKGlbcF1bMV0pLmNoYXJDb2RlQXQoMCk9PT1hLnNsaWNlU2VyaWFsaXplKGlbZl1bMV0pLmNoYXJDb2RlQXQoMCkpe2lmKChpW3BdWzFdLl9jbG9zZXx8aVtmXVsxXS5fb3BlbikmJihpW2ZdWzFdLmVuZC5vZmZzZXQtaVtmXVsxXS5zdGFydC5vZmZzZXQpJTMmJiEoKGlbcF1bMV0uZW5kLm9mZnNldC1pW3BdWzFdLnN0YXJ0Lm9mZnNldCtpW2ZdWzFdLmVuZC5vZmZzZXQtaVtmXVsxXS5zdGFydC5vZmZzZXQpJTMpKWNvbnRpbnVlO0M9aVtwXVsxXS5lbmQub2Zmc2V0LWlbcF1bMV0uc3RhcnQub2Zmc2V0PjEmJmlbZl1bMV0uZW5kLm9mZnNldC1pW2ZdWzFdLnN0YXJ0Lm9mZnNldD4xPzI6MTtjb25zdCBGPU9iamVjdC5hc3NpZ24oe30saVtwXVsxXS5lbmQpLGo9T2JqZWN0LmFzc2lnbih7fSxpW2ZdWzFdLnN0YXJ0KTtSRnQoRiwtQyksUkZ0KGosQyksYj17dHlwZTpDPjE/InN0cm9uZ1NlcXVlbmNlIjoiZW1waGFzaXNTZXF1ZW5jZSIsc3RhcnQ6RixlbmQ6T2JqZWN0LmFzc2lnbih7fSxpW3BdWzFdLmVuZCl9LEU9e3R5cGU6Qz4xPyJzdHJvbmdTZXF1ZW5jZSI6ImVtcGhhc2lzU2VxdWVuY2UiLHN0YXJ0Ok9iamVjdC5hc3NpZ24oe30saVtmXVsxXS5zdGFydCksZW5kOmp9LG09e3R5cGU6Qz4xPyJzdHJvbmdUZXh0IjoiZW1waGFzaXNUZXh0IixzdGFydDpPYmplY3QuYXNzaWduKHt9LGlbcF1bMV0uZW5kKSxlbmQ6T2JqZWN0LmFzc2lnbih7fSxpW2ZdWzFdLnN0YXJ0KX0sdj17dHlwZTpDPjE/InN0cm9uZyI6ImVtcGhhc2lzIixzdGFydDpPYmplY3QuYXNzaWduKHt9LGIuc3RhcnQpLGVuZDpPYmplY3QuYXNzaWduKHt9LEUuZW5kKX0saVtwXVsxXS5lbmQ9T2JqZWN0LmFzc2lnbih7fSxiLnN0YXJ0KSxpW2ZdWzFdLnN0YXJ0PU9iamVjdC5hc3NpZ24oe30sRS5lbmQpLEE9W10saVtwXVsxXS5lbmQub2Zmc2V0LWlbcF1bMV0uc3RhcnQub2Zmc2V0JiYoQT1udihBLFtbImVudGVyIixpW3BdWzFdLGFdLFsiZXhpdCIsaVtwXVsxXSxhXV0pKSxBPW52KEEsW1siZW50ZXIiLHYsYV0sWyJlbnRlciIsYixhXSxbImV4aXQiLGIsYV0sWyJlbnRlciIsbSxhXV0pLEE9bnYoQSxtMHQoYS5wYXJzZXIuY29uc3RydWN0cy5pbnNpZGVTcGFuLm51bGwsaS5zbGljZShwKzEsZiksYSkpLEE9bnYoQSxbWyJleGl0IixtLGFdLFsiZW50ZXIiLEUsYV0sWyJleGl0IixFLGFdLFsiZXhpdCIsdixhXV0pLGlbZl1bMV0uZW5kLm9mZnNldC1pW2ZdWzFdLnN0YXJ0Lm9mZnNldD8oUD0yLEE9bnYoQSxbWyJlbnRlciIsaVtmXVsxXSxhXSxbImV4aXQiLGlbZl1bMV0sYV1dKSk6UD0wLHYzKGkscC0xLGYtcCszLEEpLGY9cCtBLmxlbmd0aC1QLTI7YnJlYWt9fWZvcihmPS0xOysrZjxpLmxlbmd0aDspaVtmXVsxXS50eXBlPT09ImF0dGVudGlvblNlcXVlbmNlIiYmKGlbZl1bMV0udHlwZT0iZGF0YSIpO3JldHVybiBpfWZ1bmN0aW9uIHRSZShpLGEpe2NvbnN0IGY9dGhpcy5wYXJzZXIuY29uc3RydWN0cy5hdHRlbnRpb25NYXJrZXJzLm51bGwscD10aGlzLnByZXZpb3VzLHY9QkZ0KHApO2xldCBtO3JldHVybiBiO2Z1bmN0aW9uIGIoQyl7cmV0dXJuIGkuZW50ZXIoImF0dGVudGlvblNlcXVlbmNlIiksbT1DLEUoQyl9ZnVuY3Rpb24gRShDKXtpZihDPT09bSlyZXR1cm4gaS5jb25zdW1lKEMpLEU7Y29uc3QgQT1pLmV4aXQoImF0dGVudGlvblNlcXVlbmNlIiksUD1CRnQoQyksRj0hUHx8UD09PTImJnZ8fGYuaW5jbHVkZXMoQyksaj0hdnx8dj09PTImJlB8fGYuaW5jbHVkZXMocCk7cmV0dXJuIEEuX29wZW49ISEobT09PTQyP0Y6RiYmKHZ8fCFqKSksQS5fY2xvc2U9ISEobT09PTQyP2o6aiYmKFB8fCFGKSksYShDKX19ZnVuY3Rpb24gUkZ0KGksYSl7aS5jb2x1bW4rPWEsaS5vZmZzZXQrPWEsaS5fYnVmZmVySW5kZXgrPWF9Y29uc3QgZVJlPXtuYW1lOiJhdXRvbGluayIsdG9rZW5pemU6blJlfTtmdW5jdGlvbiBuUmUoaSxhLGYpe2xldCBwPTE7cmV0dXJuIHY7ZnVuY3Rpb24gdihIKXtyZXR1cm4gaS5lbnRlcigiYXV0b2xpbmsiKSxpLmVudGVyKCJhdXRvbGlua01hcmtlciIpLGkuY29uc3VtZShIKSxpLmV4aXQoImF1dG9saW5rTWFya2VyIiksaS5lbnRlcigiYXV0b2xpbmtQcm90b2NvbCIpLG19ZnVuY3Rpb24gbShIKXtyZXR1cm4gdzMoSCk/KGkuY29uc3VtZShIKSxiKTpQRnQoSCk/QShIKTpmKEgpfWZ1bmN0aW9uIGIoSCl7cmV0dXJuIEg9PT00M3x8SD09PTQ1fHxIPT09NDZ8fG9tKEgpP0UoSCk6QShIKX1mdW5jdGlvbiBFKEgpe3JldHVybiBIPT09NTg/KGkuY29uc3VtZShIKSxDKTooSD09PTQzfHxIPT09NDV8fEg9PT00Nnx8b20oSCkpJiZwKys8MzI/KGkuY29uc3VtZShIKSxFKTpBKEgpfWZ1bmN0aW9uIEMoSCl7cmV0dXJuIEg9PT02Mj8oaS5leGl0KCJhdXRvbGlua1Byb3RvY29sIiksUihIKSk6SD09PW51bGx8fEg9PT0zMnx8SD09PTYwfHx3MHQoSCk/ZihIKTooaS5jb25zdW1lKEgpLEMpfWZ1bmN0aW9uIEEoSCl7cmV0dXJuIEg9PT02ND8oaS5jb25zdW1lKEgpLHA9MCxQKTpQRnQoSCk/KGkuY29uc3VtZShIKSxBKTpmKEgpfWZ1bmN0aW9uIFAoSCl7cmV0dXJuIG9tKEgpP0YoSCk6ZihIKX1mdW5jdGlvbiBGKEgpe3JldHVybiBIPT09NDY/KGkuY29uc3VtZShIKSxwPTAsUCk6SD09PTYyPyhpLmV4aXQoImF1dG9saW5rUHJvdG9jb2wiKS50eXBlPSJhdXRvbGlua0VtYWlsIixSKEgpKTpqKEgpfWZ1bmN0aW9uIGooSCl7cmV0dXJuKEg9PT00NXx8b20oSCkpJiZwKys8NjM/KGkuY29uc3VtZShIKSxIPT09NDU/ajpGKTpmKEgpfWZ1bmN0aW9uIFIoSCl7cmV0dXJuIGkuZW50ZXIoImF1dG9saW5rTWFya2VyIiksaS5jb25zdW1lKEgpLGkuZXhpdCgiYXV0b2xpbmtNYXJrZXIiKSxpLmV4aXQoImF1dG9saW5rIiksYX19Y29uc3QgZ0s9e3Rva2VuaXplOnJSZSxwYXJ0aWFsOiEwfTtmdW5jdGlvbiByUmUoaSxhLGYpe3JldHVybiBRdShpLHAsImxpbmVQcmVmaXgiKTtmdW5jdGlvbiBwKHYpe3JldHVybiB2PT09bnVsbHx8amEodik/YSh2KTpmKHYpfX1jb25zdCBqRnQ9e25hbWU6ImJsb2NrUXVvdGUiLHRva2VuaXplOmlSZSxjb250aW51YXRpb246e3Rva2VuaXplOnNSZX0sZXhpdDphUmV9O2Z1bmN0aW9uIGlSZShpLGEsZil7Y29uc3QgcD10aGlzO3JldHVybiB2O2Z1bmN0aW9uIHYoYil7aWYoYj09PTYyKXtjb25zdCBFPXAuY29udGFpbmVyU3RhdGU7cmV0dXJuIEUub3Blbnx8KGkuZW50ZXIoImJsb2NrUXVvdGUiLHtfY29udGFpbmVyOiEwfSksRS5vcGVuPSEwKSxpLmVudGVyKCJibG9ja1F1b3RlUHJlZml4IiksaS5lbnRlcigiYmxvY2tRdW90ZU1hcmtlciIpLGkuY29uc3VtZShiKSxpLmV4aXQoImJsb2NrUXVvdGVNYXJrZXIiKSxtfXJldHVybiBmKGIpfWZ1bmN0aW9uIG0oYil7cmV0dXJuIEJmKGIpPyhpLmVudGVyKCJibG9ja1F1b3RlUHJlZml4V2hpdGVzcGFjZSIpLGkuY29uc3VtZShiKSxpLmV4aXQoImJsb2NrUXVvdGVQcmVmaXhXaGl0ZXNwYWNlIiksaS5leGl0KCJibG9ja1F1b3RlUHJlZml4IiksYSk6KGkuZXhpdCgiYmxvY2tRdW90ZVByZWZpeCIpLGEoYikpfX1mdW5jdGlvbiBzUmUoaSxhLGYpe3JldHVybiBRdShpLGkuYXR0ZW1wdChqRnQsYSxmKSwibGluZVByZWZpeCIsdGhpcy5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpP3ZvaWQgMDo0KX1mdW5jdGlvbiBhUmUoaSl7aS5leGl0KCJibG9ja1F1b3RlIil9Y29uc3QgJEZ0PXtuYW1lOiJjaGFyYWN0ZXJFc2NhcGUiLHRva2VuaXplOm9SZX07ZnVuY3Rpb24gb1JlKGksYSxmKXtyZXR1cm4gcDtmdW5jdGlvbiBwKG0pe3JldHVybiBpLmVudGVyKCJjaGFyYWN0ZXJFc2NhcGUiKSxpLmVudGVyKCJlc2NhcGVNYXJrZXIiKSxpLmNvbnN1bWUobSksaS5leGl0KCJlc2NhcGVNYXJrZXIiKSx2fWZ1bmN0aW9uIHYobSl7cmV0dXJuIEdCZShtKT8oaS5lbnRlcigiY2hhcmFjdGVyRXNjYXBlVmFsdWUiKSxpLmNvbnN1bWUobSksaS5leGl0KCJjaGFyYWN0ZXJFc2NhcGVWYWx1ZSIpLGkuZXhpdCgiY2hhcmFjdGVyRXNjYXBlIiksYSk6ZihtKX19Y29uc3QgekZ0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImkiKTtmdW5jdGlvbiB4MHQoaSl7Y29uc3QgYT0iJiIraSsiOyI7ekZ0LmlubmVySFRNTD1hO2NvbnN0IGY9ekZ0LnRleHRDb250ZW50O3JldHVybiBmLmNoYXJDb2RlQXQoZi5sZW5ndGgtMSk9PT01OSYmaSE9PSJzZW1pInx8Zj09PWE/ITE6Zn1jb25zdCBxRnQ9e25hbWU6ImNoYXJhY3RlclJlZmVyZW5jZSIsdG9rZW5pemU6Y1JlfTtmdW5jdGlvbiBjUmUoaSxhLGYpe2NvbnN0IHA9dGhpcztsZXQgdj0wLG0sYjtyZXR1cm4gRTtmdW5jdGlvbiBFKEYpe3JldHVybiBpLmVudGVyKCJjaGFyYWN0ZXJSZWZlcmVuY2UiKSxpLmVudGVyKCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXIiKSxpLmNvbnN1bWUoRiksaS5leGl0KCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXIiKSxDfWZ1bmN0aW9uIEMoRil7cmV0dXJuIEY9PT0zNT8oaS5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyTnVtZXJpYyIpLGkuY29uc3VtZShGKSxpLmV4aXQoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlck51bWVyaWMiKSxBKTooaS5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlVmFsdWUiKSxtPTMxLGI9b20sUChGKSl9ZnVuY3Rpb24gQShGKXtyZXR1cm4gRj09PTg4fHxGPT09MTIwPyhpLmVudGVyKCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJIZXhhZGVjaW1hbCIpLGkuY29uc3VtZShGKSxpLmV4aXQoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlckhleGFkZWNpbWFsIiksaS5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlVmFsdWUiKSxtPTYsYj1WQmUsUCk6KGkuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZVZhbHVlIiksbT03LGI9djB0LFAoRikpfWZ1bmN0aW9uIFAoRil7bGV0IGo7cmV0dXJuIEY9PT01OSYmdj8oaj1pLmV4aXQoImNoYXJhY3RlclJlZmVyZW5jZVZhbHVlIiksYj09PW9tJiYheDB0KHAuc2xpY2VTZXJpYWxpemUoaikpP2YoRik6KGkuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlciIpLGkuY29uc3VtZShGKSxpLmV4aXQoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlciIpLGkuZXhpdCgiY2hhcmFjdGVyUmVmZXJlbmNlIiksYSkpOmIoRikmJnYrKzxtPyhpLmNvbnN1bWUoRiksUCk6ZihGKX19Y29uc3QgSEZ0PXtuYW1lOiJjb2RlRmVuY2VkIix0b2tlbml6ZTp1UmUsY29uY3JldGU6ITB9O2Z1bmN0aW9uIHVSZShpLGEsZil7Y29uc3QgcD10aGlzLHY9e3Rva2VuaXplOmt0LHBhcnRpYWw6ITB9LG09e3Rva2VuaXplOlR0LHBhcnRpYWw6ITB9LGI9dGhpcy5ldmVudHNbdGhpcy5ldmVudHMubGVuZ3RoLTFdLEU9YiYmYlsxXS50eXBlPT09ImxpbmVQcmVmaXgiP2JbMl0uc2xpY2VTZXJpYWxpemUoYlsxXSwhMCkubGVuZ3RoOjA7bGV0IEM9MCxBO3JldHVybiBQO2Z1bmN0aW9uIFAobXQpe3JldHVybiBpLmVudGVyKCJjb2RlRmVuY2VkIiksaS5lbnRlcigiY29kZUZlbmNlZEZlbmNlIiksaS5lbnRlcigiY29kZUZlbmNlZEZlbmNlU2VxdWVuY2UiKSxBPW10LEYobXQpfWZ1bmN0aW9uIEYobXQpe3JldHVybiBtdD09PUE/KGkuY29uc3VtZShtdCksQysrLEYpOihpLmV4aXQoImNvZGVGZW5jZWRGZW5jZVNlcXVlbmNlIiksQzwzP2YobXQpOlF1KGksaiwid2hpdGVzcGFjZSIpKG10KSl9ZnVuY3Rpb24gaihtdCl7cmV0dXJuIG10PT09bnVsbHx8amEobXQpP3J0KG10KTooaS5lbnRlcigiY29kZUZlbmNlZEZlbmNlSW5mbyIpLGkuZW50ZXIoImNodW5rU3RyaW5nIix7Y29udGVudFR5cGU6InN0cmluZyJ9KSxSKG10KSl9ZnVuY3Rpb24gUihtdCl7cmV0dXJuIG10PT09bnVsbHx8cnYobXQpPyhpLmV4aXQoImNodW5rU3RyaW5nIiksaS5leGl0KCJjb2RlRmVuY2VkRmVuY2VJbmZvIiksUXUoaSxILCJ3aGl0ZXNwYWNlIikobXQpKTptdD09PTk2JiZtdD09PUE/ZihtdCk6KGkuY29uc3VtZShtdCksUil9ZnVuY3Rpb24gSChtdCl7cmV0dXJuIG10PT09bnVsbHx8amEobXQpP3J0KG10KTooaS5lbnRlcigiY29kZUZlbmNlZEZlbmNlTWV0YSIpLGkuZW50ZXIoImNodW5rU3RyaW5nIix7Y29udGVudFR5cGU6InN0cmluZyJ9KSxZKG10KSl9ZnVuY3Rpb24gWShtdCl7cmV0dXJuIG10PT09bnVsbHx8amEobXQpPyhpLmV4aXQoImNodW5rU3RyaW5nIiksaS5leGl0KCJjb2RlRmVuY2VkRmVuY2VNZXRhIikscnQobXQpKTptdD09PTk2JiZtdD09PUE/ZihtdCk6KGkuY29uc3VtZShtdCksWSl9ZnVuY3Rpb24gcnQobXQpe3JldHVybiBpLmV4aXQoImNvZGVGZW5jZWRGZW5jZSIpLHAuaW50ZXJydXB0P2EobXQpOkoobXQpfWZ1bmN0aW9uIEoobXQpe3JldHVybiBtdD09PW51bGw/ZnQobXQpOmphKG10KT9pLmF0dGVtcHQobSxpLmF0dGVtcHQodixmdCxFP1F1KGksSiwibGluZVByZWZpeCIsRSsxKTpKKSxmdCkobXQpOihpLmVudGVyKCJjb2RlRmxvd1ZhbHVlIiksaXQobXQpKX1mdW5jdGlvbiBpdChtdCl7cmV0dXJuIG10PT09bnVsbHx8amEobXQpPyhpLmV4aXQoImNvZGVGbG93VmFsdWUiKSxKKG10KSk6KGkuY29uc3VtZShtdCksaXQpfWZ1bmN0aW9uIGZ0KG10KXtyZXR1cm4gaS5leGl0KCJjb2RlRmVuY2VkIiksYShtdCl9ZnVuY3Rpb24gVHQobXQsY3QseXQpe2NvbnN0IHN0PXRoaXM7cmV0dXJuIHh0O2Z1bmN0aW9uIHh0KGR0KXtyZXR1cm4gbXQuZW50ZXIoImxpbmVFbmRpbmciKSxtdC5jb25zdW1lKGR0KSxtdC5leGl0KCJsaW5lRW5kaW5nIiksaHR9ZnVuY3Rpb24gaHQoZHQpe3JldHVybiBzdC5wYXJzZXIubGF6eVtzdC5ub3coKS5saW5lXT95dChkdCk6Y3QoZHQpfX1mdW5jdGlvbiBrdChtdCxjdCx5dCl7bGV0IHN0PTA7cmV0dXJuIFF1KG10LHh0LCJsaW5lUHJlZml4Iix0aGlzLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygiY29kZUluZGVudGVkIik/dm9pZCAwOjQpO2Z1bmN0aW9uIHh0KEN0KXtyZXR1cm4gbXQuZW50ZXIoImNvZGVGZW5jZWRGZW5jZSIpLG10LmVudGVyKCJjb2RlRmVuY2VkRmVuY2VTZXF1ZW5jZSIpLGh0KEN0KX1mdW5jdGlvbiBodChDdCl7cmV0dXJuIEN0PT09QT8obXQuY29uc3VtZShDdCksc3QrKyxodCk6c3Q8Qz95dChDdCk6KG10LmV4aXQoImNvZGVGZW5jZWRGZW5jZVNlcXVlbmNlIiksUXUobXQsZHQsIndoaXRlc3BhY2UiKShDdCkpfWZ1bmN0aW9uIGR0KEN0KXtyZXR1cm4gQ3Q9PT1udWxsfHxqYShDdCk/KG10LmV4aXQoImNvZGVGZW5jZWRGZW5jZSIpLGN0KEN0KSk6eXQoQ3QpfX19Y29uc3QgazB0PXtuYW1lOiJjb2RlSW5kZW50ZWQiLHRva2VuaXplOmhSZX0sbFJlPXt0b2tlbml6ZTpmUmUscGFydGlhbDohMH07ZnVuY3Rpb24gaFJlKGksYSxmKXtjb25zdCBwPXRoaXM7cmV0dXJuIHY7ZnVuY3Rpb24gdihBKXtyZXR1cm4gaS5lbnRlcigiY29kZUluZGVudGVkIiksUXUoaSxtLCJsaW5lUHJlZml4Iiw0KzEpKEEpfWZ1bmN0aW9uIG0oQSl7Y29uc3QgUD1wLmV2ZW50c1twLmV2ZW50cy5sZW5ndGgtMV07cmV0dXJuIFAmJlBbMV0udHlwZT09PSJsaW5lUHJlZml4IiYmUFsyXS5zbGljZVNlcmlhbGl6ZShQWzFdLCEwKS5sZW5ndGg+PTQ/YihBKTpmKEEpfWZ1bmN0aW9uIGIoQSl7cmV0dXJuIEE9PT1udWxsP0MoQSk6amEoQSk/aS5hdHRlbXB0KGxSZSxiLEMpKEEpOihpLmVudGVyKCJjb2RlRmxvd1ZhbHVlIiksRShBKSl9ZnVuY3Rpb24gRShBKXtyZXR1cm4gQT09PW51bGx8fGphKEEpPyhpLmV4aXQoImNvZGVGbG93VmFsdWUiKSxiKEEpKTooaS5jb25zdW1lKEEpLEUpfWZ1bmN0aW9uIEMoQSl7cmV0dXJuIGkuZXhpdCgiY29kZUluZGVudGVkIiksYShBKX19ZnVuY3Rpb24gZlJlKGksYSxmKXtjb25zdCBwPXRoaXM7cmV0dXJuIHY7ZnVuY3Rpb24gdihiKXtyZXR1cm4gcC5wYXJzZXIubGF6eVtwLm5vdygpLmxpbmVdP2YoYik6amEoYik/KGkuZW50ZXIoImxpbmVFbmRpbmciKSxpLmNvbnN1bWUoYiksaS5leGl0KCJsaW5lRW5kaW5nIiksdik6UXUoaSxtLCJsaW5lUHJlZml4Iiw0KzEpKGIpfWZ1bmN0aW9uIG0oYil7Y29uc3QgRT1wLmV2ZW50c1twLmV2ZW50cy5sZW5ndGgtMV07cmV0dXJuIEUmJkVbMV0udHlwZT09PSJsaW5lUHJlZml4IiYmRVsyXS5zbGljZVNlcmlhbGl6ZShFWzFdLCEwKS5sZW5ndGg+PTQ/YShiKTpqYShiKT92KGIpOmYoYil9fWNvbnN0IGRSZT17bmFtZToiY29kZVRleHQiLHRva2VuaXplOmJSZSxyZXNvbHZlOmdSZSxwcmV2aW91czpwUmV9O2Z1bmN0aW9uIGdSZShpKXtsZXQgYT1pLmxlbmd0aC00LGY9MyxwLHY7aWYoKGlbZl1bMV0udHlwZT09PSJsaW5lRW5kaW5nInx8aVtmXVsxXS50eXBlPT09InNwYWNlIikmJihpW2FdWzFdLnR5cGU9PT0ibGluZUVuZGluZyJ8fGlbYV1bMV0udHlwZT09PSJzcGFjZSIpKXtmb3IocD1mOysrcDxhOylpZihpW3BdWzFdLnR5cGU9PT0iY29kZVRleHREYXRhIil7aVtmXVsxXS50eXBlPSJjb2RlVGV4dFBhZGRpbmciLGlbYV1bMV0udHlwZT0iY29kZVRleHRQYWRkaW5nIixmKz0yLGEtPTI7YnJlYWt9fWZvcihwPWYtMSxhKys7KytwPD1hOyl2PT09dm9pZCAwP3AhPT1hJiZpW3BdWzFdLnR5cGUhPT0ibGluZUVuZGluZyImJih2PXApOihwPT09YXx8aVtwXVsxXS50eXBlPT09ImxpbmVFbmRpbmciKSYmKGlbdl1bMV0udHlwZT0iY29kZVRleHREYXRhIixwIT09disyJiYoaVt2XVsxXS5lbmQ9aVtwLTFdWzFdLmVuZCxpLnNwbGljZSh2KzIscC12LTIpLGEtPXAtdi0yLHA9disyKSx2PXZvaWQgMCk7cmV0dXJuIGl9ZnVuY3Rpb24gcFJlKGkpe3JldHVybiBpIT09OTZ8fHRoaXMuZXZlbnRzW3RoaXMuZXZlbnRzLmxlbmd0aC0xXVsxXS50eXBlPT09ImNoYXJhY3RlckVzY2FwZSJ9ZnVuY3Rpb24gYlJlKGksYSxmKXtsZXQgcD0wLHYsbTtyZXR1cm4gYjtmdW5jdGlvbiBiKEYpe3JldHVybiBpLmVudGVyKCJjb2RlVGV4dCIpLGkuZW50ZXIoImNvZGVUZXh0U2VxdWVuY2UiKSxFKEYpfWZ1bmN0aW9uIEUoRil7cmV0dXJuIEY9PT05Nj8oaS5jb25zdW1lKEYpLHArKyxFKTooaS5leGl0KCJjb2RlVGV4dFNlcXVlbmNlIiksQyhGKSl9ZnVuY3Rpb24gQyhGKXtyZXR1cm4gRj09PW51bGw/ZihGKTpGPT09OTY/KG09aS5lbnRlcigiY29kZVRleHRTZXF1ZW5jZSIpLHY9MCxQKEYpKTpGPT09MzI/KGkuZW50ZXIoInNwYWNlIiksaS5jb25zdW1lKEYpLGkuZXhpdCgic3BhY2UiKSxDKTpqYShGKT8oaS5lbnRlcigibGluZUVuZGluZyIpLGkuY29uc3VtZShGKSxpLmV4aXQoImxpbmVFbmRpbmciKSxDKTooaS5lbnRlcigiY29kZVRleHREYXRhIiksQShGKSl9ZnVuY3Rpb24gQShGKXtyZXR1cm4gRj09PW51bGx8fEY9PT0zMnx8Rj09PTk2fHxqYShGKT8oaS5leGl0KCJjb2RlVGV4dERhdGEiKSxDKEYpKTooaS5jb25zdW1lKEYpLEEpfWZ1bmN0aW9uIFAoRil7cmV0dXJuIEY9PT05Nj8oaS5jb25zdW1lKEYpLHYrKyxQKTp2PT09cD8oaS5leGl0KCJjb2RlVGV4dFNlcXVlbmNlIiksaS5leGl0KCJjb2RlVGV4dCIpLGEoRikpOihtLnR5cGU9ImNvZGVUZXh0RGF0YSIsQShGKSl9fWZ1bmN0aW9uIFZGdChpKXtjb25zdCBhPXt9O2xldCBmPS0xLHAsdixtLGIsRSxDLEE7Zm9yKDsrK2Y8aS5sZW5ndGg7KXtmb3IoO2YgaW4gYTspZj1hW2ZdO2lmKHA9aVtmXSxmJiZwWzFdLnR5cGU9PT0iY2h1bmtGbG93IiYmaVtmLTFdWzFdLnR5cGU9PT0ibGlzdEl0ZW1QcmVmaXgiJiYoQz1wWzFdLl90b2tlbml6ZXIuZXZlbnRzLG09MCxtPEMubGVuZ3RoJiZDW21dWzFdLnR5cGU9PT0ibGluZUVuZGluZ0JsYW5rIiYmKG0rPTIpLG08Qy5sZW5ndGgmJkNbbV1bMV0udHlwZT09PSJjb250ZW50IikpZm9yKDsrK208Qy5sZW5ndGgmJkNbbV1bMV0udHlwZSE9PSJjb250ZW50IjspQ1ttXVsxXS50eXBlPT09ImNodW5rVGV4dCImJihDW21dWzFdLl9pc0luRmlyc3RDb250ZW50T2ZMaXN0SXRlbT0hMCxtKyspO2lmKHBbMF09PT0iZW50ZXIiKXBbMV0uY29udGVudFR5cGUmJihPYmplY3QuYXNzaWduKGEsdlJlKGksZikpLGY9YVtmXSxBPSEwKTtlbHNlIGlmKHBbMV0uX2NvbnRhaW5lcil7Zm9yKG09Zix2PXZvaWQgMDttLS0mJihiPWlbbV0sYlsxXS50eXBlPT09ImxpbmVFbmRpbmcifHxiWzFdLnR5cGU9PT0ibGluZUVuZGluZ0JsYW5rIik7KWJbMF09PT0iZW50ZXIiJiYodiYmKGlbdl1bMV0udHlwZT0ibGluZUVuZGluZ0JsYW5rIiksYlsxXS50eXBlPSJsaW5lRW5kaW5nIix2PW0pO3YmJihwWzFdLmVuZD1PYmplY3QuYXNzaWduKHt9LGlbdl1bMV0uc3RhcnQpLEU9aS5zbGljZSh2LGYpLEUudW5zaGlmdChwKSx2MyhpLHYsZi12KzEsRSkpfX1yZXR1cm4hQX1mdW5jdGlvbiB2UmUoaSxhKXtjb25zdCBmPWlbYV1bMV0scD1pW2FdWzJdO2xldCB2PWEtMTtjb25zdCBtPVtdLGI9Zi5fdG9rZW5pemVyfHxwLnBhcnNlcltmLmNvbnRlbnRUeXBlXShmLnN0YXJ0KSxFPWIuZXZlbnRzLEM9W10sQT17fTtsZXQgUCxGLGo9LTEsUj1mLEg9MCxZPTA7Y29uc3QgcnQ9W1ldO2Zvcig7Ujspe2Zvcig7aVsrK3ZdWzFdIT09UjspO20ucHVzaCh2KSxSLl90b2tlbml6ZXJ8fChQPXAuc2xpY2VTdHJlYW0oUiksUi5uZXh0fHxQLnB1c2gobnVsbCksRiYmYi5kZWZpbmVTa2lwKFIuc3RhcnQpLFIuX2lzSW5GaXJzdENvbnRlbnRPZkxpc3RJdGVtJiYoYi5fZ2ZtVGFza2xpc3RGaXJzdENvbnRlbnRPZkxpc3RJdGVtPSEwKSxiLndyaXRlKFApLFIuX2lzSW5GaXJzdENvbnRlbnRPZkxpc3RJdGVtJiYoYi5fZ2ZtVGFza2xpc3RGaXJzdENvbnRlbnRPZkxpc3RJdGVtPXZvaWQgMCkpLEY9UixSPVIubmV4dH1mb3IoUj1mOysrajxFLmxlbmd0aDspRVtqXVswXT09PSJleGl0IiYmRVtqLTFdWzBdPT09ImVudGVyIiYmRVtqXVsxXS50eXBlPT09RVtqLTFdWzFdLnR5cGUmJkVbal1bMV0uc3RhcnQubGluZSE9PUVbal1bMV0uZW5kLmxpbmUmJihZPWorMSxydC5wdXNoKFkpLFIuX3Rva2VuaXplcj12b2lkIDAsUi5wcmV2aW91cz12b2lkIDAsUj1SLm5leHQpO2ZvcihiLmV2ZW50cz1bXSxSPyhSLl90b2tlbml6ZXI9dm9pZCAwLFIucHJldmlvdXM9dm9pZCAwKTpydC5wb3AoKSxqPXJ0Lmxlbmd0aDtqLS07KXtjb25zdCBKPUUuc2xpY2UocnRbal0scnRbaisxXSksaXQ9bS5wb3AoKTtDLnVuc2hpZnQoW2l0LGl0K0oubGVuZ3RoLTFdKSx2MyhpLGl0LDIsSil9Zm9yKGo9LTE7KytqPEMubGVuZ3RoOylBW0grQ1tqXVswXV09SCtDW2pdWzFdLEgrPUNbal1bMV0tQ1tqXVswXS0xO3JldHVybiBBfWNvbnN0IHdSZT17dG9rZW5pemU6eFJlLHJlc29sdmU6eVJlfSxtUmU9e3Rva2VuaXplOmtSZSxwYXJ0aWFsOiEwfTtmdW5jdGlvbiB5UmUoaSl7cmV0dXJuIFZGdChpKSxpfWZ1bmN0aW9uIHhSZShpLGEpe2xldCBmO3JldHVybiBwO2Z1bmN0aW9uIHAoRSl7cmV0dXJuIGkuZW50ZXIoImNvbnRlbnQiKSxmPWkuZW50ZXIoImNodW5rQ29udGVudCIse2NvbnRlbnRUeXBlOiJjb250ZW50In0pLHYoRSl9ZnVuY3Rpb24gdihFKXtyZXR1cm4gRT09PW51bGw/bShFKTpqYShFKT9pLmNoZWNrKG1SZSxiLG0pKEUpOihpLmNvbnN1bWUoRSksdil9ZnVuY3Rpb24gbShFKXtyZXR1cm4gaS5leGl0KCJjaHVua0NvbnRlbnQiKSxpLmV4aXQoImNvbnRlbnQiKSxhKEUpfWZ1bmN0aW9uIGIoRSl7cmV0dXJuIGkuY29uc3VtZShFKSxpLmV4aXQoImNodW5rQ29udGVudCIpLGYubmV4dD1pLmVudGVyKCJjaHVua0NvbnRlbnQiLHtjb250ZW50VHlwZToiY29udGVudCIscHJldmlvdXM6Zn0pLGY9Zi5uZXh0LHZ9fWZ1bmN0aW9uIGtSZShpLGEsZil7Y29uc3QgcD10aGlzO3JldHVybiB2O2Z1bmN0aW9uIHYoYil7cmV0dXJuIGkuZXhpdCgiY2h1bmtDb250ZW50IiksaS5lbnRlcigibGluZUVuZGluZyIpLGkuY29uc3VtZShiKSxpLmV4aXQoImxpbmVFbmRpbmciKSxRdShpLG0sImxpbmVQcmVmaXgiKX1mdW5jdGlvbiBtKGIpe2lmKGI9PT1udWxsfHxqYShiKSlyZXR1cm4gZihiKTtjb25zdCBFPXAuZXZlbnRzW3AuZXZlbnRzLmxlbmd0aC0xXTtyZXR1cm4hcC5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpJiZFJiZFWzFdLnR5cGU9PT0ibGluZVByZWZpeCImJkVbMl0uc2xpY2VTZXJpYWxpemUoRVsxXSwhMCkubGVuZ3RoPj00P2EoYik6aS5pbnRlcnJ1cHQocC5wYXJzZXIuY29uc3RydWN0cy5mbG93LGYsYSkoYil9fWZ1bmN0aW9uIEdGdChpLGEsZixwLHYsbSxiLEUsQyl7Y29uc3QgQT1DfHxOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7bGV0IFA9MDtyZXR1cm4gRjtmdW5jdGlvbiBGKEope3JldHVybiBKPT09NjA/KGkuZW50ZXIocCksaS5lbnRlcih2KSxpLmVudGVyKG0pLGkuY29uc3VtZShKKSxpLmV4aXQobSksaik6Sj09PW51bGx8fEo9PT00MXx8dzB0KEopP2YoSik6KGkuZW50ZXIocCksaS5lbnRlcihiKSxpLmVudGVyKEUpLGkuZW50ZXIoImNodW5rU3RyaW5nIix7Y29udGVudFR5cGU6InN0cmluZyJ9KSxZKEopKX1mdW5jdGlvbiBqKEope3JldHVybiBKPT09NjI/KGkuZW50ZXIobSksaS5jb25zdW1lKEopLGkuZXhpdChtKSxpLmV4aXQodiksaS5leGl0KHApLGEpOihpLmVudGVyKEUpLGkuZW50ZXIoImNodW5rU3RyaW5nIix7Y29udGVudFR5cGU6InN0cmluZyJ9KSxSKEopKX1mdW5jdGlvbiBSKEope3JldHVybiBKPT09NjI/KGkuZXhpdCgiY2h1bmtTdHJpbmciKSxpLmV4aXQoRSksaihKKSk6Sj09PW51bGx8fEo9PT02MHx8amEoSik/ZihKKTooaS5jb25zdW1lKEopLEo9PT05Mj9IOlIpfWZ1bmN0aW9uIEgoSil7cmV0dXJuIEo9PT02MHx8Sj09PTYyfHxKPT09OTI/KGkuY29uc3VtZShKKSxSKTpSKEopfWZ1bmN0aW9uIFkoSil7cmV0dXJuIEo9PT00MD8rK1A+QT9mKEopOihpLmNvbnN1bWUoSiksWSk6Sj09PTQxP1AtLT8oaS5jb25zdW1lKEopLFkpOihpLmV4aXQoImNodW5rU3RyaW5nIiksaS5leGl0KEUpLGkuZXhpdChiKSxpLmV4aXQocCksYShKKSk6Sj09PW51bGx8fHJ2KEopP1A/ZihKKTooaS5leGl0KCJjaHVua1N0cmluZyIpLGkuZXhpdChFKSxpLmV4aXQoYiksaS5leGl0KHApLGEoSikpOncwdChKKT9mKEopOihpLmNvbnN1bWUoSiksSj09PTkyP3J0OlkpfWZ1bmN0aW9uIHJ0KEope3JldHVybiBKPT09NDB8fEo9PT00MXx8Sj09PTkyPyhpLmNvbnN1bWUoSiksWSk6WShKKX19ZnVuY3Rpb24gVUZ0KGksYSxmLHAsdixtKXtjb25zdCBiPXRoaXM7bGV0IEU9MCxDO3JldHVybiBBO2Z1bmN0aW9uIEEoUil7cmV0dXJuIGkuZW50ZXIocCksaS5lbnRlcih2KSxpLmNvbnN1bWUoUiksaS5leGl0KHYpLGkuZW50ZXIobSksUH1mdW5jdGlvbiBQKFIpe3JldHVybiBSPT09bnVsbHx8Uj09PTkxfHxSPT09OTMmJiFDfHxSPT09OTQmJiFFJiYiX2hpZGRlbkZvb3Rub3RlU3VwcG9ydCJpbiBiLnBhcnNlci5jb25zdHJ1Y3RzfHxFPjk5OT9mKFIpOlI9PT05Mz8oaS5leGl0KG0pLGkuZW50ZXIodiksaS5jb25zdW1lKFIpLGkuZXhpdCh2KSxpLmV4aXQocCksYSk6amEoUik/KGkuZW50ZXIoImxpbmVFbmRpbmciKSxpLmNvbnN1bWUoUiksaS5leGl0KCJsaW5lRW5kaW5nIiksUCk6KGkuZW50ZXIoImNodW5rU3RyaW5nIix7Y29udGVudFR5cGU6InN0cmluZyJ9KSxGKFIpKX1mdW5jdGlvbiBGKFIpe3JldHVybiBSPT09bnVsbHx8Uj09PTkxfHxSPT09OTN8fGphKFIpfHxFKys+OTk5PyhpLmV4aXQoImNodW5rU3RyaW5nIiksUChSKSk6KGkuY29uc3VtZShSKSxDPUN8fCFCZihSKSxSPT09OTI/ajpGKX1mdW5jdGlvbiBqKFIpe3JldHVybiBSPT09OTF8fFI9PT05Mnx8Uj09PTkzPyhpLmNvbnN1bWUoUiksRSsrLEYpOkYoUil9fWZ1bmN0aW9uIFdGdChpLGEsZixwLHYsbSl7bGV0IGI7cmV0dXJuIEU7ZnVuY3Rpb24gRShqKXtyZXR1cm4gaS5lbnRlcihwKSxpLmVudGVyKHYpLGkuY29uc3VtZShqKSxpLmV4aXQodiksYj1qPT09NDA/NDE6aixDfWZ1bmN0aW9uIEMoail7cmV0dXJuIGo9PT1iPyhpLmVudGVyKHYpLGkuY29uc3VtZShqKSxpLmV4aXQodiksaS5leGl0KHApLGEpOihpLmVudGVyKG0pLEEoaikpfWZ1bmN0aW9uIEEoail7cmV0dXJuIGo9PT1iPyhpLmV4aXQobSksQyhiKSk6aj09PW51bGw/ZihqKTpqYShqKT8oaS5lbnRlcigibGluZUVuZGluZyIpLGkuY29uc3VtZShqKSxpLmV4aXQoImxpbmVFbmRpbmciKSxRdShpLEEsImxpbmVQcmVmaXgiKSk6KGkuZW50ZXIoImNodW5rU3RyaW5nIix7Y29udGVudFR5cGU6InN0cmluZyJ9KSxQKGopKX1mdW5jdGlvbiBQKGope3JldHVybiBqPT09Ynx8aj09PW51bGx8fGphKGopPyhpLmV4aXQoImNodW5rU3RyaW5nIiksQShqKSk6KGkuY29uc3VtZShqKSxqPT09OTI/RjpQKX1mdW5jdGlvbiBGKGope3JldHVybiBqPT09Ynx8aj09PTkyPyhpLmNvbnN1bWUoaiksUCk6UChqKX19ZnVuY3Rpb24gdlAoaSxhKXtsZXQgZjtyZXR1cm4gcDtmdW5jdGlvbiBwKHYpe3JldHVybiBqYSh2KT8oaS5lbnRlcigibGluZUVuZGluZyIpLGkuY29uc3VtZSh2KSxpLmV4aXQoImxpbmVFbmRpbmciKSxmPSEwLHApOkJmKHYpP1F1KGkscCxmPyJsaW5lUHJlZml4IjoibGluZVN1ZmZpeCIpKHYpOmEodil9fWZ1bmN0aW9uIHJMKGkpe3JldHVybiBpLnJlcGxhY2UoL1tcdFxuXHIgXSsvZywiICIpLnJlcGxhY2UoL14gfCAkL2csIiIpLnRvTG93ZXJDYXNlKCkudG9VcHBlckNhc2UoKX1jb25zdCBFUmU9e25hbWU6ImRlZmluaXRpb24iLHRva2VuaXplOl9SZX0sVFJlPXt0b2tlbml6ZTpDUmUscGFydGlhbDohMH07ZnVuY3Rpb24gX1JlKGksYSxmKXtjb25zdCBwPXRoaXM7bGV0IHY7cmV0dXJuIG07ZnVuY3Rpb24gbShDKXtyZXR1cm4gaS5lbnRlcigiZGVmaW5pdGlvbiIpLFVGdC5jYWxsKHAsaSxiLGYsImRlZmluaXRpb25MYWJlbCIsImRlZmluaXRpb25MYWJlbE1hcmtlciIsImRlZmluaXRpb25MYWJlbFN0cmluZyIpKEMpfWZ1bmN0aW9uIGIoQyl7cmV0dXJuIHY9ckwocC5zbGljZVNlcmlhbGl6ZShwLmV2ZW50c1twLmV2ZW50cy5sZW5ndGgtMV1bMV0pLnNsaWNlKDEsLTEpKSxDPT09NTg/KGkuZW50ZXIoImRlZmluaXRpb25NYXJrZXIiKSxpLmNvbnN1bWUoQyksaS5leGl0KCJkZWZpbml0aW9uTWFya2VyIiksdlAoaSxHRnQoaSxpLmF0dGVtcHQoVFJlLFF1KGksRSwid2hpdGVzcGFjZSIpLFF1KGksRSwid2hpdGVzcGFjZSIpKSxmLCJkZWZpbml0aW9uRGVzdGluYXRpb24iLCJkZWZpbml0aW9uRGVzdGluYXRpb25MaXRlcmFsIiwiZGVmaW5pdGlvbkRlc3RpbmF0aW9uTGl0ZXJhbE1hcmtlciIsImRlZmluaXRpb25EZXN0aW5hdGlvblJhdyIsImRlZmluaXRpb25EZXN0aW5hdGlvblN0cmluZyIpKSk6ZihDKX1mdW5jdGlvbiBFKEMpe3JldHVybiBDPT09bnVsbHx8amEoQyk/KGkuZXhpdCgiZGVmaW5pdGlvbiIpLHAucGFyc2VyLmRlZmluZWQuaW5jbHVkZXModil8fHAucGFyc2VyLmRlZmluZWQucHVzaCh2KSxhKEMpKTpmKEMpfX1mdW5jdGlvbiBDUmUoaSxhLGYpe3JldHVybiBwO2Z1bmN0aW9uIHAoYil7cmV0dXJuIHJ2KGIpP3ZQKGksdikoYik6ZihiKX1mdW5jdGlvbiB2KGIpe3JldHVybiBiPT09MzR8fGI9PT0zOXx8Yj09PTQwP1dGdChpLFF1KGksbSwid2hpdGVzcGFjZSIpLGYsImRlZmluaXRpb25UaXRsZSIsImRlZmluaXRpb25UaXRsZU1hcmtlciIsImRlZmluaXRpb25UaXRsZVN0cmluZyIpKGIpOmYoYil9ZnVuY3Rpb24gbShiKXtyZXR1cm4gYj09PW51bGx8fGphKGIpP2EoYik6ZihiKX19Y29uc3QgU1JlPXtuYW1lOiJoYXJkQnJlYWtFc2NhcGUiLHRva2VuaXplOkFSZX07ZnVuY3Rpb24gQVJlKGksYSxmKXtyZXR1cm4gcDtmdW5jdGlvbiBwKG0pe3JldHVybiBpLmVudGVyKCJoYXJkQnJlYWtFc2NhcGUiKSxpLmVudGVyKCJlc2NhcGVNYXJrZXIiKSxpLmNvbnN1bWUobSksdn1mdW5jdGlvbiB2KG0pe3JldHVybiBqYShtKT8oaS5leGl0KCJlc2NhcGVNYXJrZXIiKSxpLmV4aXQoImhhcmRCcmVha0VzY2FwZSIpLGEobSkpOmYobSl9fWNvbnN0IExSZT17bmFtZToiaGVhZGluZ0F0eCIsdG9rZW5pemU6RFJlLHJlc29sdmU6TVJlfTtmdW5jdGlvbiBNUmUoaSxhKXtsZXQgZj1pLmxlbmd0aC0yLHA9Myx2LG07cmV0dXJuIGlbcF1bMV0udHlwZT09PSJ3aGl0ZXNwYWNlIiYmKHArPTIpLGYtMj5wJiZpW2ZdWzFdLnR5cGU9PT0id2hpdGVzcGFjZSImJihmLT0yKSxpW2ZdWzFdLnR5cGU9PT0iYXR4SGVhZGluZ1NlcXVlbmNlIiYmKHA9PT1mLTF8fGYtND5wJiZpW2YtMl1bMV0udHlwZT09PSJ3aGl0ZXNwYWNlIikmJihmLT1wKzE9PT1mPzI6NCksZj5wJiYodj17dHlwZToiYXR4SGVhZGluZ1RleHQiLHN0YXJ0OmlbcF1bMV0uc3RhcnQsZW5kOmlbZl1bMV0uZW5kfSxtPXt0eXBlOiJjaHVua1RleHQiLHN0YXJ0OmlbcF1bMV0uc3RhcnQsZW5kOmlbZl1bMV0uZW5kLGNvbnRlbnRUeXBlOiJ0ZXh0In0sdjMoaSxwLGYtcCsxLFtbImVudGVyIix2LGFdLFsiZW50ZXIiLG0sYV0sWyJleGl0IixtLGFdLFsiZXhpdCIsdixhXV0pKSxpfWZ1bmN0aW9uIERSZShpLGEsZil7Y29uc3QgcD10aGlzO2xldCB2PTA7cmV0dXJuIG07ZnVuY3Rpb24gbShQKXtyZXR1cm4gaS5lbnRlcigiYXR4SGVhZGluZyIpLGkuZW50ZXIoImF0eEhlYWRpbmdTZXF1ZW5jZSIpLGIoUCl9ZnVuY3Rpb24gYihQKXtyZXR1cm4gUD09PTM1JiZ2Kys8Nj8oaS5jb25zdW1lKFApLGIpOlA9PT1udWxsfHxydihQKT8oaS5leGl0KCJhdHhIZWFkaW5nU2VxdWVuY2UiKSxwLmludGVycnVwdD9hKFApOkUoUCkpOmYoUCl9ZnVuY3Rpb24gRShQKXtyZXR1cm4gUD09PTM1PyhpLmVudGVyKCJhdHhIZWFkaW5nU2VxdWVuY2UiKSxDKFApKTpQPT09bnVsbHx8amEoUCk/KGkuZXhpdCgiYXR4SGVhZGluZyIpLGEoUCkpOkJmKFApP1F1KGksRSwid2hpdGVzcGFjZSIpKFApOihpLmVudGVyKCJhdHhIZWFkaW5nVGV4dCIpLEEoUCkpfWZ1bmN0aW9uIEMoUCl7cmV0dXJuIFA9PT0zNT8oaS5jb25zdW1lKFApLEMpOihpLmV4aXQoImF0eEhlYWRpbmdTZXF1ZW5jZSIpLEUoUCkpfWZ1bmN0aW9uIEEoUCl7cmV0dXJuIFA9PT1udWxsfHxQPT09MzV8fHJ2KFApPyhpLmV4aXQoImF0eEhlYWRpbmdUZXh0IiksRShQKSk6KGkuY29uc3VtZShQKSxBKX19Y29uc3QgSVJlPVsiYWRkcmVzcyIsImFydGljbGUiLCJhc2lkZSIsImJhc2UiLCJiYXNlZm9udCIsImJsb2NrcXVvdGUiLCJib2R5IiwiY2FwdGlvbiIsImNlbnRlciIsImNvbCIsImNvbGdyb3VwIiwiZGQiLCJkZXRhaWxzIiwiZGlhbG9nIiwiZGlyIiwiZGl2IiwiZGwiLCJkdCIsImZpZWxkc2V0IiwiZmlnY2FwdGlvbiIsImZpZ3VyZSIsImZvb3RlciIsImZvcm0iLCJmcmFtZSIsImZyYW1lc2V0IiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2IiwiaGVhZCIsImhlYWRlciIsImhyIiwiaHRtbCIsImlmcmFtZSIsImxlZ2VuZCIsImxpIiwibGluayIsIm1haW4iLCJtZW51IiwibWVudWl0ZW0iLCJuYXYiLCJub2ZyYW1lcyIsIm9sIiwib3B0Z3JvdXAiLCJvcHRpb24iLCJwIiwicGFyYW0iLCJzZWN0aW9uIiwic3VtbWFyeSIsInRhYmxlIiwidGJvZHkiLCJ0ZCIsInRmb290IiwidGgiLCJ0aGVhZCIsInRpdGxlIiwidHIiLCJ0cmFjayIsInVsIl0sS0Z0PVsicHJlIiwic2NyaXB0Iiwic3R5bGUiLCJ0ZXh0YXJlYSJdLE9SZT17bmFtZToiaHRtbEZsb3ciLHRva2VuaXplOkZSZSxyZXNvbHZlVG86UFJlLGNvbmNyZXRlOiEwfSxOUmU9e3Rva2VuaXplOkJSZSxwYXJ0aWFsOiEwfTtmdW5jdGlvbiBQUmUoaSl7bGV0IGE9aS5sZW5ndGg7Zm9yKDthLS0mJiEoaVthXVswXT09PSJlbnRlciImJmlbYV1bMV0udHlwZT09PSJodG1sRmxvdyIpOyk7cmV0dXJuIGE+MSYmaVthLTJdWzFdLnR5cGU9PT0ibGluZVByZWZpeCImJihpW2FdWzFdLnN0YXJ0PWlbYS0yXVsxXS5zdGFydCxpW2ErMV1bMV0uc3RhcnQ9aVthLTJdWzFdLnN0YXJ0LGkuc3BsaWNlKGEtMiwyKSksaX1mdW5jdGlvbiBGUmUoaSxhLGYpe2NvbnN0IHA9dGhpcztsZXQgdixtLGIsRSxDO3JldHVybiBBO2Z1bmN0aW9uIEEoT3Qpe3JldHVybiBpLmVudGVyKCJodG1sRmxvdyIpLGkuZW50ZXIoImh0bWxGbG93RGF0YSIpLGkuY29uc3VtZShPdCksUH1mdW5jdGlvbiBQKE90KXtyZXR1cm4gT3Q9PT0zMz8oaS5jb25zdW1lKE90KSxGKTpPdD09PTQ3PyhpLmNvbnN1bWUoT3QpLEgpOk90PT09NjM/KGkuY29uc3VtZShPdCksdj0zLHAuaW50ZXJydXB0P2E6UnQpOnczKE90KT8oaS5jb25zdW1lKE90KSxiPVN0cmluZy5mcm9tQ2hhckNvZGUoT3QpLG09ITAsWSk6ZihPdCl9ZnVuY3Rpb24gRihPdCl7cmV0dXJuIE90PT09NDU/KGkuY29uc3VtZShPdCksdj0yLGopOk90PT09OTE/KGkuY29uc3VtZShPdCksdj01LGI9IkNEQVRBWyIsRT0wLFIpOnczKE90KT8oaS5jb25zdW1lKE90KSx2PTQscC5pbnRlcnJ1cHQ/YTpSdCk6ZihPdCl9ZnVuY3Rpb24gaihPdCl7cmV0dXJuIE90PT09NDU/KGkuY29uc3VtZShPdCkscC5pbnRlcnJ1cHQ/YTpSdCk6ZihPdCl9ZnVuY3Rpb24gUihPdCl7cmV0dXJuIE90PT09Yi5jaGFyQ29kZUF0KEUrKyk/KGkuY29uc3VtZShPdCksRT09PWIubGVuZ3RoP3AuaW50ZXJydXB0P2E6aHQ6Uik6ZihPdCl9ZnVuY3Rpb24gSChPdCl7cmV0dXJuIHczKE90KT8oaS5jb25zdW1lKE90KSxiPVN0cmluZy5mcm9tQ2hhckNvZGUoT3QpLFkpOmYoT3QpfWZ1bmN0aW9uIFkoT3Qpe3JldHVybiBPdD09PW51bGx8fE90PT09NDd8fE90PT09NjJ8fHJ2KE90KT9PdCE9PTQ3JiZtJiZLRnQuaW5jbHVkZXMoYi50b0xvd2VyQ2FzZSgpKT8odj0xLHAuaW50ZXJydXB0P2EoT3QpOmh0KE90KSk6SVJlLmluY2x1ZGVzKGIudG9Mb3dlckNhc2UoKSk/KHY9NixPdD09PTQ3PyhpLmNvbnN1bWUoT3QpLHJ0KTpwLmludGVycnVwdD9hKE90KTpodChPdCkpOih2PTcscC5pbnRlcnJ1cHQmJiFwLnBhcnNlci5sYXp5W3Aubm93KCkubGluZV0/ZihPdCk6bT9pdChPdCk6SihPdCkpOk90PT09NDV8fG9tKE90KT8oaS5jb25zdW1lKE90KSxiKz1TdHJpbmcuZnJvbUNoYXJDb2RlKE90KSxZKTpmKE90KX1mdW5jdGlvbiBydChPdCl7cmV0dXJuIE90PT09NjI/KGkuY29uc3VtZShPdCkscC5pbnRlcnJ1cHQ/YTpodCk6ZihPdCl9ZnVuY3Rpb24gSihPdCl7cmV0dXJuIEJmKE90KT8oaS5jb25zdW1lKE90KSxKKTpzdChPdCl9ZnVuY3Rpb24gaXQoT3Qpe3JldHVybiBPdD09PTQ3PyhpLmNvbnN1bWUoT3QpLHN0KTpPdD09PTU4fHxPdD09PTk1fHx3MyhPdCk/KGkuY29uc3VtZShPdCksZnQpOkJmKE90KT8oaS5jb25zdW1lKE90KSxpdCk6c3QoT3QpfWZ1bmN0aW9uIGZ0KE90KXtyZXR1cm4gT3Q9PT00NXx8T3Q9PT00Nnx8T3Q9PT01OHx8T3Q9PT05NXx8b20oT3QpPyhpLmNvbnN1bWUoT3QpLGZ0KTpUdChPdCl9ZnVuY3Rpb24gVHQoT3Qpe3JldHVybiBPdD09PTYxPyhpLmNvbnN1bWUoT3QpLGt0KTpCZihPdCk/KGkuY29uc3VtZShPdCksVHQpOml0KE90KX1mdW5jdGlvbiBrdChPdCl7cmV0dXJuIE90PT09bnVsbHx8T3Q9PT02MHx8T3Q9PT02MXx8T3Q9PT02Mnx8T3Q9PT05Nj9mKE90KTpPdD09PTM0fHxPdD09PTM5PyhpLmNvbnN1bWUoT3QpLEM9T3QsbXQpOkJmKE90KT8oaS5jb25zdW1lKE90KSxrdCk6KEM9bnVsbCxjdChPdCkpfWZ1bmN0aW9uIG10KE90KXtyZXR1cm4gT3Q9PT1udWxsfHxqYShPdCk/ZihPdCk6T3Q9PT1DPyhpLmNvbnN1bWUoT3QpLHl0KTooaS5jb25zdW1lKE90KSxtdCl9ZnVuY3Rpb24gY3QoT3Qpe3JldHVybiBPdD09PW51bGx8fE90PT09MzR8fE90PT09Mzl8fE90PT09NjB8fE90PT09NjF8fE90PT09NjJ8fE90PT09OTZ8fHJ2KE90KT9UdChPdCk6KGkuY29uc3VtZShPdCksY3QpfWZ1bmN0aW9uIHl0KE90KXtyZXR1cm4gT3Q9PT00N3x8T3Q9PT02Mnx8QmYoT3QpP2l0KE90KTpmKE90KX1mdW5jdGlvbiBzdChPdCl7cmV0dXJuIE90PT09NjI/KGkuY29uc3VtZShPdCkseHQpOmYoT3QpfWZ1bmN0aW9uIHh0KE90KXtyZXR1cm4gQmYoT3QpPyhpLmNvbnN1bWUoT3QpLHh0KTpPdD09PW51bGx8fGphKE90KT9odChPdCk6ZihPdCl9ZnVuY3Rpb24gaHQoT3Qpe3JldHVybiBPdD09PTQ1JiZ2PT09Mj8oaS5jb25zdW1lKE90KSxQdCk6T3Q9PT02MCYmdj09PTE/KGkuY29uc3VtZShPdCkscHQpOk90PT09NjImJnY9PT00PyhpLmNvbnN1bWUoT3QpLEJ0KTpPdD09PTYzJiZ2PT09Mz8oaS5jb25zdW1lKE90KSxSdCk6T3Q9PT05MyYmdj09PTU/KGkuY29uc3VtZShPdCksWCk6amEoT3QpJiYodj09PTZ8fHY9PT03KT9pLmNoZWNrKE5SZSxCdCxkdCkoT3QpOk90PT09bnVsbHx8amEoT3QpP2R0KE90KTooaS5jb25zdW1lKE90KSxodCl9ZnVuY3Rpb24gZHQoT3Qpe3JldHVybiBpLmV4aXQoImh0bWxGbG93RGF0YSIpLEN0KE90KX1mdW5jdGlvbiBDdChPdCl7cmV0dXJuIE90PT09bnVsbD92dChPdCk6amEoT3QpP2kuYXR0ZW1wdCh7dG9rZW5pemU6dHQscGFydGlhbDohMH0sQ3QsdnQpKE90KTooaS5lbnRlcigiaHRtbEZsb3dEYXRhIiksaHQoT3QpKX1mdW5jdGlvbiB0dChPdCxWdCxxZSl7cmV0dXJuIF9uO2Z1bmN0aW9uIF9uKFduKXtyZXR1cm4gT3QuZW50ZXIoImxpbmVFbmRpbmciKSxPdC5jb25zdW1lKFduKSxPdC5leGl0KCJsaW5lRW5kaW5nIiksVGV9ZnVuY3Rpb24gVGUoV24pe3JldHVybiBwLnBhcnNlci5sYXp5W3Aubm93KCkubGluZV0/cWUoV24pOlZ0KFduKX19ZnVuY3Rpb24gUHQoT3Qpe3JldHVybiBPdD09PTQ1PyhpLmNvbnN1bWUoT3QpLFJ0KTpodChPdCl9ZnVuY3Rpb24gcHQoT3Qpe3JldHVybiBPdD09PTQ3PyhpLmNvbnN1bWUoT3QpLGI9IiIsRnQpOmh0KE90KX1mdW5jdGlvbiBGdChPdCl7cmV0dXJuIE90PT09NjImJktGdC5pbmNsdWRlcyhiLnRvTG93ZXJDYXNlKCkpPyhpLmNvbnN1bWUoT3QpLEJ0KTp3MyhPdCkmJmIubGVuZ3RoPDg/KGkuY29uc3VtZShPdCksYis9U3RyaW5nLmZyb21DaGFyQ29kZShPdCksRnQpOmh0KE90KX1mdW5jdGlvbiBYKE90KXtyZXR1cm4gT3Q9PT05Mz8oaS5jb25zdW1lKE90KSxSdCk6aHQoT3QpfWZ1bmN0aW9uIFJ0KE90KXtyZXR1cm4gT3Q9PT02Mj8oaS5jb25zdW1lKE90KSxCdCk6T3Q9PT00NSYmdj09PTI/KGkuY29uc3VtZShPdCksUnQpOmh0KE90KX1mdW5jdGlvbiBCdChPdCl7cmV0dXJuIE90PT09bnVsbHx8amEoT3QpPyhpLmV4aXQoImh0bWxGbG93RGF0YSIpLHZ0KE90KSk6KGkuY29uc3VtZShPdCksQnQpfWZ1bmN0aW9uIHZ0KE90KXtyZXR1cm4gaS5leGl0KCJodG1sRmxvdyIpLGEoT3QpfX1mdW5jdGlvbiBCUmUoaSxhLGYpe3JldHVybiBwO2Z1bmN0aW9uIHAodil7cmV0dXJuIGkuZXhpdCgiaHRtbEZsb3dEYXRhIiksaS5lbnRlcigibGluZUVuZGluZ0JsYW5rIiksaS5jb25zdW1lKHYpLGkuZXhpdCgibGluZUVuZGluZ0JsYW5rIiksaS5hdHRlbXB0KGdLLGEsZil9fWNvbnN0IFJSZT17bmFtZToiaHRtbFRleHQiLHRva2VuaXplOmpSZX07ZnVuY3Rpb24galJlKGksYSxmKXtjb25zdCBwPXRoaXM7bGV0IHYsbSxiLEU7cmV0dXJuIEM7ZnVuY3Rpb24gQyh2dCl7cmV0dXJuIGkuZW50ZXIoImh0bWxUZXh0IiksaS5lbnRlcigiaHRtbFRleHREYXRhIiksaS5jb25zdW1lKHZ0KSxBfWZ1bmN0aW9uIEEodnQpe3JldHVybiB2dD09PTMzPyhpLmNvbnN1bWUodnQpLFApOnZ0PT09NDc/KGkuY29uc3VtZSh2dCksY3QpOnZ0PT09NjM/KGkuY29uc3VtZSh2dCksa3QpOnczKHZ0KT8oaS5jb25zdW1lKHZ0KSx4dCk6Zih2dCl9ZnVuY3Rpb24gUCh2dCl7cmV0dXJuIHZ0PT09NDU/KGkuY29uc3VtZSh2dCksRik6dnQ9PT05MT8oaS5jb25zdW1lKHZ0KSxtPSJDREFUQVsiLGI9MCxydCk6dzModnQpPyhpLmNvbnN1bWUodnQpLFR0KTpmKHZ0KX1mdW5jdGlvbiBGKHZ0KXtyZXR1cm4gdnQ9PT00NT8oaS5jb25zdW1lKHZ0KSxqKTpmKHZ0KX1mdW5jdGlvbiBqKHZ0KXtyZXR1cm4gdnQ9PT1udWxsfHx2dD09PTYyP2YodnQpOnZ0PT09NDU/KGkuY29uc3VtZSh2dCksUik6SCh2dCl9ZnVuY3Rpb24gUih2dCl7cmV0dXJuIHZ0PT09bnVsbHx8dnQ9PT02Mj9mKHZ0KTpIKHZ0KX1mdW5jdGlvbiBIKHZ0KXtyZXR1cm4gdnQ9PT1udWxsP2YodnQpOnZ0PT09NDU/KGkuY29uc3VtZSh2dCksWSk6amEodnQpPyhFPUgsWCh2dCkpOihpLmNvbnN1bWUodnQpLEgpfWZ1bmN0aW9uIFkodnQpe3JldHVybiB2dD09PTQ1PyhpLmNvbnN1bWUodnQpLEJ0KTpIKHZ0KX1mdW5jdGlvbiBydCh2dCl7cmV0dXJuIHZ0PT09bS5jaGFyQ29kZUF0KGIrKyk/KGkuY29uc3VtZSh2dCksYj09PW0ubGVuZ3RoP0o6cnQpOmYodnQpfWZ1bmN0aW9uIEoodnQpe3JldHVybiB2dD09PW51bGw/Zih2dCk6dnQ9PT05Mz8oaS5jb25zdW1lKHZ0KSxpdCk6amEodnQpPyhFPUosWCh2dCkpOihpLmNvbnN1bWUodnQpLEopfWZ1bmN0aW9uIGl0KHZ0KXtyZXR1cm4gdnQ9PT05Mz8oaS5jb25zdW1lKHZ0KSxmdCk6Sih2dCl9ZnVuY3Rpb24gZnQodnQpe3JldHVybiB2dD09PTYyP0J0KHZ0KTp2dD09PTkzPyhpLmNvbnN1bWUodnQpLGZ0KTpKKHZ0KX1mdW5jdGlvbiBUdCh2dCl7cmV0dXJuIHZ0PT09bnVsbHx8dnQ9PT02Mj9CdCh2dCk6amEodnQpPyhFPVR0LFgodnQpKTooaS5jb25zdW1lKHZ0KSxUdCl9ZnVuY3Rpb24ga3QodnQpe3JldHVybiB2dD09PW51bGw/Zih2dCk6dnQ9PT02Mz8oaS5jb25zdW1lKHZ0KSxtdCk6amEodnQpPyhFPWt0LFgodnQpKTooaS5jb25zdW1lKHZ0KSxrdCl9ZnVuY3Rpb24gbXQodnQpe3JldHVybiB2dD09PTYyP0J0KHZ0KTprdCh2dCl9ZnVuY3Rpb24gY3QodnQpe3JldHVybiB3Myh2dCk/KGkuY29uc3VtZSh2dCkseXQpOmYodnQpfWZ1bmN0aW9uIHl0KHZ0KXtyZXR1cm4gdnQ9PT00NXx8b20odnQpPyhpLmNvbnN1bWUodnQpLHl0KTpzdCh2dCl9ZnVuY3Rpb24gc3QodnQpe3JldHVybiBqYSh2dCk/KEU9c3QsWCh2dCkpOkJmKHZ0KT8oaS5jb25zdW1lKHZ0KSxzdCk6QnQodnQpfWZ1bmN0aW9uIHh0KHZ0KXtyZXR1cm4gdnQ9PT00NXx8b20odnQpPyhpLmNvbnN1bWUodnQpLHh0KTp2dD09PTQ3fHx2dD09PTYyfHxydih2dCk/aHQodnQpOmYodnQpfWZ1bmN0aW9uIGh0KHZ0KXtyZXR1cm4gdnQ9PT00Nz8oaS5jb25zdW1lKHZ0KSxCdCk6dnQ9PT01OHx8dnQ9PT05NXx8dzModnQpPyhpLmNvbnN1bWUodnQpLGR0KTpqYSh2dCk/KEU9aHQsWCh2dCkpOkJmKHZ0KT8oaS5jb25zdW1lKHZ0KSxodCk6QnQodnQpfWZ1bmN0aW9uIGR0KHZ0KXtyZXR1cm4gdnQ9PT00NXx8dnQ9PT00Nnx8dnQ9PT01OHx8dnQ9PT05NXx8b20odnQpPyhpLmNvbnN1bWUodnQpLGR0KTpDdCh2dCl9ZnVuY3Rpb24gQ3QodnQpe3JldHVybiB2dD09PTYxPyhpLmNvbnN1bWUodnQpLHR0KTpqYSh2dCk/KEU9Q3QsWCh2dCkpOkJmKHZ0KT8oaS5jb25zdW1lKHZ0KSxDdCk6aHQodnQpfWZ1bmN0aW9uIHR0KHZ0KXtyZXR1cm4gdnQ9PT1udWxsfHx2dD09PTYwfHx2dD09PTYxfHx2dD09PTYyfHx2dD09PTk2P2YodnQpOnZ0PT09MzR8fHZ0PT09Mzk/KGkuY29uc3VtZSh2dCksdj12dCxQdCk6amEodnQpPyhFPXR0LFgodnQpKTpCZih2dCk/KGkuY29uc3VtZSh2dCksdHQpOihpLmNvbnN1bWUodnQpLHY9dm9pZCAwLEZ0KX1mdW5jdGlvbiBQdCh2dCl7cmV0dXJuIHZ0PT09dj8oaS5jb25zdW1lKHZ0KSxwdCk6dnQ9PT1udWxsP2YodnQpOmphKHZ0KT8oRT1QdCxYKHZ0KSk6KGkuY29uc3VtZSh2dCksUHQpfWZ1bmN0aW9uIHB0KHZ0KXtyZXR1cm4gdnQ9PT02Mnx8dnQ9PT00N3x8cnYodnQpP2h0KHZ0KTpmKHZ0KX1mdW5jdGlvbiBGdCh2dCl7cmV0dXJuIHZ0PT09bnVsbHx8dnQ9PT0zNHx8dnQ9PT0zOXx8dnQ9PT02MHx8dnQ9PT02MXx8dnQ9PT05Nj9mKHZ0KTp2dD09PTYyfHxydih2dCk/aHQodnQpOihpLmNvbnN1bWUodnQpLEZ0KX1mdW5jdGlvbiBYKHZ0KXtyZXR1cm4gaS5leGl0KCJodG1sVGV4dERhdGEiKSxpLmVudGVyKCJsaW5lRW5kaW5nIiksaS5jb25zdW1lKHZ0KSxpLmV4aXQoImxpbmVFbmRpbmciKSxRdShpLFJ0LCJsaW5lUHJlZml4IixwLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygiY29kZUluZGVudGVkIik/dm9pZCAwOjQpfWZ1bmN0aW9uIFJ0KHZ0KXtyZXR1cm4gaS5lbnRlcigiaHRtbFRleHREYXRhIiksRSh2dCl9ZnVuY3Rpb24gQnQodnQpe3JldHVybiB2dD09PTYyPyhpLmNvbnN1bWUodnQpLGkuZXhpdCgiaHRtbFRleHREYXRhIiksaS5leGl0KCJodG1sVGV4dCIpLGEpOmYodnQpfX1jb25zdCBFMHQ9e25hbWU6ImxhYmVsRW5kIix0b2tlbml6ZTpHUmUscmVzb2x2ZVRvOlZSZSxyZXNvbHZlQWxsOkhSZX0sJFJlPXt0b2tlbml6ZTpVUmV9LHpSZT17dG9rZW5pemU6V1JlfSxxUmU9e3Rva2VuaXplOktSZX07ZnVuY3Rpb24gSFJlKGkpe2xldCBhPS0xLGY7Zm9yKDsrK2E8aS5sZW5ndGg7KWY9aVthXVsxXSwoZi50eXBlPT09ImxhYmVsSW1hZ2UifHxmLnR5cGU9PT0ibGFiZWxMaW5rInx8Zi50eXBlPT09ImxhYmVsRW5kIikmJihpLnNwbGljZShhKzEsZi50eXBlPT09ImxhYmVsSW1hZ2UiPzQ6MiksZi50eXBlPSJkYXRhIixhKyspO3JldHVybiBpfWZ1bmN0aW9uIFZSZShpLGEpe2xldCBmPWkubGVuZ3RoLHA9MCx2LG0sYixFO2Zvcig7Zi0tOylpZih2PWlbZl1bMV0sbSl7aWYodi50eXBlPT09ImxpbmsifHx2LnR5cGU9PT0ibGFiZWxMaW5rIiYmdi5faW5hY3RpdmUpYnJlYWs7aVtmXVswXT09PSJlbnRlciImJnYudHlwZT09PSJsYWJlbExpbmsiJiYodi5faW5hY3RpdmU9ITApfWVsc2UgaWYoYil7aWYoaVtmXVswXT09PSJlbnRlciImJih2LnR5cGU9PT0ibGFiZWxJbWFnZSJ8fHYudHlwZT09PSJsYWJlbExpbmsiKSYmIXYuX2JhbGFuY2VkJiYobT1mLHYudHlwZSE9PSJsYWJlbExpbmsiKSl7cD0yO2JyZWFrfX1lbHNlIHYudHlwZT09PSJsYWJlbEVuZCImJihiPWYpO2NvbnN0IEM9e3R5cGU6aVttXVsxXS50eXBlPT09ImxhYmVsTGluayI/ImxpbmsiOiJpbWFnZSIsc3RhcnQ6T2JqZWN0LmFzc2lnbih7fSxpW21dWzFdLnN0YXJ0KSxlbmQ6T2JqZWN0LmFzc2lnbih7fSxpW2kubGVuZ3RoLTFdWzFdLmVuZCl9LEE9e3R5cGU6ImxhYmVsIixzdGFydDpPYmplY3QuYXNzaWduKHt9LGlbbV1bMV0uc3RhcnQpLGVuZDpPYmplY3QuYXNzaWduKHt9LGlbYl1bMV0uZW5kKX0sUD17dHlwZToibGFiZWxUZXh0IixzdGFydDpPYmplY3QuYXNzaWduKHt9LGlbbStwKzJdWzFdLmVuZCksZW5kOk9iamVjdC5hc3NpZ24oe30saVtiLTJdWzFdLnN0YXJ0KX07cmV0dXJuIEU9W1siZW50ZXIiLEMsYV0sWyJlbnRlciIsQSxhXV0sRT1udihFLGkuc2xpY2UobSsxLG0rcCszKSksRT1udihFLFtbImVudGVyIixQLGFdXSksRT1udihFLG0wdChhLnBhcnNlci5jb25zdHJ1Y3RzLmluc2lkZVNwYW4ubnVsbCxpLnNsaWNlKG0rcCs0LGItMyksYSkpLEU9bnYoRSxbWyJleGl0IixQLGFdLGlbYi0yXSxpW2ItMV0sWyJleGl0IixBLGFdXSksRT1udihFLGkuc2xpY2UoYisxKSksRT1udihFLFtbImV4aXQiLEMsYV1dKSx2MyhpLG0saS5sZW5ndGgsRSksaX1mdW5jdGlvbiBHUmUoaSxhLGYpe2NvbnN0IHA9dGhpcztsZXQgdj1wLmV2ZW50cy5sZW5ndGgsbSxiO2Zvcig7di0tOylpZigocC5ldmVudHNbdl1bMV0udHlwZT09PSJsYWJlbEltYWdlInx8cC5ldmVudHNbdl1bMV0udHlwZT09PSJsYWJlbExpbmsiKSYmIXAuZXZlbnRzW3ZdWzFdLl9iYWxhbmNlZCl7bT1wLmV2ZW50c1t2XVsxXTticmVha31yZXR1cm4gRTtmdW5jdGlvbiBFKFApe3JldHVybiBtP20uX2luYWN0aXZlP0EoUCk6KGI9cC5wYXJzZXIuZGVmaW5lZC5pbmNsdWRlcyhyTChwLnNsaWNlU2VyaWFsaXplKHtzdGFydDptLmVuZCxlbmQ6cC5ub3coKX0pKSksaS5lbnRlcigibGFiZWxFbmQiKSxpLmVudGVyKCJsYWJlbE1hcmtlciIpLGkuY29uc3VtZShQKSxpLmV4aXQoImxhYmVsTWFya2VyIiksaS5leGl0KCJsYWJlbEVuZCIpLEMpOmYoUCl9ZnVuY3Rpb24gQyhQKXtyZXR1cm4gUD09PTQwP2kuYXR0ZW1wdCgkUmUsYSxiP2E6QSkoUCk6UD09PTkxP2kuYXR0ZW1wdCh6UmUsYSxiP2kuYXR0ZW1wdChxUmUsYSxBKTpBKShQKTpiP2EoUCk6QShQKX1mdW5jdGlvbiBBKFApe3JldHVybiBtLl9iYWxhbmNlZD0hMCxmKFApfX1mdW5jdGlvbiBVUmUoaSxhLGYpe3JldHVybiBwO2Z1bmN0aW9uIHAoQyl7cmV0dXJuIGkuZW50ZXIoInJlc291cmNlIiksaS5lbnRlcigicmVzb3VyY2VNYXJrZXIiKSxpLmNvbnN1bWUoQyksaS5leGl0KCJyZXNvdXJjZU1hcmtlciIpLHZQKGksdil9ZnVuY3Rpb24gdihDKXtyZXR1cm4gQz09PTQxP0UoQyk6R0Z0KGksbSxmLCJyZXNvdXJjZURlc3RpbmF0aW9uIiwicmVzb3VyY2VEZXN0aW5hdGlvbkxpdGVyYWwiLCJyZXNvdXJjZURlc3RpbmF0aW9uTGl0ZXJhbE1hcmtlciIsInJlc291cmNlRGVzdGluYXRpb25SYXciLCJyZXNvdXJjZURlc3RpbmF0aW9uU3RyaW5nIiwzMikoQyl9ZnVuY3Rpb24gbShDKXtyZXR1cm4gcnYoQyk/dlAoaSxiKShDKTpFKEMpfWZ1bmN0aW9uIGIoQyl7cmV0dXJuIEM9PT0zNHx8Qz09PTM5fHxDPT09NDA/V0Z0KGksdlAoaSxFKSxmLCJyZXNvdXJjZVRpdGxlIiwicmVzb3VyY2VUaXRsZU1hcmtlciIsInJlc291cmNlVGl0bGVTdHJpbmciKShDKTpFKEMpfWZ1bmN0aW9uIEUoQyl7cmV0dXJuIEM9PT00MT8oaS5lbnRlcigicmVzb3VyY2VNYXJrZXIiKSxpLmNvbnN1bWUoQyksaS5leGl0KCJyZXNvdXJjZU1hcmtlciIpLGkuZXhpdCgicmVzb3VyY2UiKSxhKTpmKEMpfX1mdW5jdGlvbiBXUmUoaSxhLGYpe2NvbnN0IHA9dGhpcztyZXR1cm4gdjtmdW5jdGlvbiB2KGIpe3JldHVybiBVRnQuY2FsbChwLGksbSxmLCJyZWZlcmVuY2UiLCJyZWZlcmVuY2VNYXJrZXIiLCJyZWZlcmVuY2VTdHJpbmciKShiKX1mdW5jdGlvbiBtKGIpe3JldHVybiBwLnBhcnNlci5kZWZpbmVkLmluY2x1ZGVzKHJMKHAuc2xpY2VTZXJpYWxpemUocC5ldmVudHNbcC5ldmVudHMubGVuZ3RoLTFdWzFdKS5zbGljZSgxLC0xKSkpP2EoYik6ZihiKX19ZnVuY3Rpb24gS1JlKGksYSxmKXtyZXR1cm4gcDtmdW5jdGlvbiBwKG0pe3JldHVybiBpLmVudGVyKCJyZWZlcmVuY2UiKSxpLmVudGVyKCJyZWZlcmVuY2VNYXJrZXIiKSxpLmNvbnN1bWUobSksaS5leGl0KCJyZWZlcmVuY2VNYXJrZXIiKSx2fWZ1bmN0aW9uIHYobSl7cmV0dXJuIG09PT05Mz8oaS5lbnRlcigicmVmZXJlbmNlTWFya2VyIiksaS5jb25zdW1lKG0pLGkuZXhpdCgicmVmZXJlbmNlTWFya2VyIiksaS5leGl0KCJyZWZlcmVuY2UiKSxhKTpmKG0pfX1jb25zdCBZUmU9e25hbWU6ImxhYmVsU3RhcnRJbWFnZSIsdG9rZW5pemU6WFJlLHJlc29sdmVBbGw6RTB0LnJlc29sdmVBbGx9O2Z1bmN0aW9uIFhSZShpLGEsZil7Y29uc3QgcD10aGlzO3JldHVybiB2O2Z1bmN0aW9uIHYoRSl7cmV0dXJuIGkuZW50ZXIoImxhYmVsSW1hZ2UiKSxpLmVudGVyKCJsYWJlbEltYWdlTWFya2VyIiksaS5jb25zdW1lKEUpLGkuZXhpdCgibGFiZWxJbWFnZU1hcmtlciIpLG19ZnVuY3Rpb24gbShFKXtyZXR1cm4gRT09PTkxPyhpLmVudGVyKCJsYWJlbE1hcmtlciIpLGkuY29uc3VtZShFKSxpLmV4aXQoImxhYmVsTWFya2VyIiksaS5leGl0KCJsYWJlbEltYWdlIiksYik6ZihFKX1mdW5jdGlvbiBiKEUpe3JldHVybiBFPT09OTQmJiJfaGlkZGVuRm9vdG5vdGVTdXBwb3J0ImluIHAucGFyc2VyLmNvbnN0cnVjdHM/ZihFKTphKEUpfX1jb25zdCBRUmU9e25hbWU6ImxhYmVsU3RhcnRMaW5rIix0b2tlbml6ZTpaUmUscmVzb2x2ZUFsbDpFMHQucmVzb2x2ZUFsbH07ZnVuY3Rpb24gWlJlKGksYSxmKXtjb25zdCBwPXRoaXM7cmV0dXJuIHY7ZnVuY3Rpb24gdihiKXtyZXR1cm4gaS5lbnRlcigibGFiZWxMaW5rIiksaS5lbnRlcigibGFiZWxNYXJrZXIiKSxpLmNvbnN1bWUoYiksaS5leGl0KCJsYWJlbE1hcmtlciIpLGkuZXhpdCgibGFiZWxMaW5rIiksbX1mdW5jdGlvbiBtKGIpe3JldHVybiBiPT09OTQmJiJfaGlkZGVuRm9vdG5vdGVTdXBwb3J0ImluIHAucGFyc2VyLmNvbnN0cnVjdHM/ZihiKTphKGIpfX1jb25zdCBUMHQ9e25hbWU6ImxpbmVFbmRpbmciLHRva2VuaXplOkpSZX07ZnVuY3Rpb24gSlJlKGksYSl7cmV0dXJuIGY7ZnVuY3Rpb24gZihwKXtyZXR1cm4gaS5lbnRlcigibGluZUVuZGluZyIpLGkuY29uc3VtZShwKSxpLmV4aXQoImxpbmVFbmRpbmciKSxRdShpLGEsImxpbmVQcmVmaXgiKX19Y29uc3QgcEs9e25hbWU6InRoZW1hdGljQnJlYWsiLHRva2VuaXplOnRqZX07ZnVuY3Rpb24gdGplKGksYSxmKXtsZXQgcD0wLHY7cmV0dXJuIG07ZnVuY3Rpb24gbShDKXtyZXR1cm4gaS5lbnRlcigidGhlbWF0aWNCcmVhayIpLHY9QyxiKEMpfWZ1bmN0aW9uIGIoQyl7cmV0dXJuIEM9PT12PyhpLmVudGVyKCJ0aGVtYXRpY0JyZWFrU2VxdWVuY2UiKSxFKEMpKTpCZihDKT9RdShpLGIsIndoaXRlc3BhY2UiKShDKTpwPDN8fEMhPT1udWxsJiYhamEoQyk/ZihDKTooaS5leGl0KCJ0aGVtYXRpY0JyZWFrIiksYShDKSl9ZnVuY3Rpb24gRShDKXtyZXR1cm4gQz09PXY/KGkuY29uc3VtZShDKSxwKyssRSk6KGkuZXhpdCgidGhlbWF0aWNCcmVha1NlcXVlbmNlIiksYihDKSl9fWNvbnN0IGdwPXtuYW1lOiJsaXN0Iix0b2tlbml6ZTpyamUsY29udGludWF0aW9uOnt0b2tlbml6ZTppamV9LGV4aXQ6YWplfSxlamU9e3Rva2VuaXplOm9qZSxwYXJ0aWFsOiEwfSxuamU9e3Rva2VuaXplOnNqZSxwYXJ0aWFsOiEwfTtmdW5jdGlvbiByamUoaSxhLGYpe2NvbnN0IHA9dGhpcyx2PXAuZXZlbnRzW3AuZXZlbnRzLmxlbmd0aC0xXTtsZXQgbT12JiZ2WzFdLnR5cGU9PT0ibGluZVByZWZpeCI/dlsyXS5zbGljZVNlcmlhbGl6ZSh2WzFdLCEwKS5sZW5ndGg6MCxiPTA7cmV0dXJuIEU7ZnVuY3Rpb24gRShSKXtjb25zdCBIPXAuY29udGFpbmVyU3RhdGUudHlwZXx8KFI9PT00Mnx8Uj09PTQzfHxSPT09NDU/Imxpc3RVbm9yZGVyZWQiOiJsaXN0T3JkZXJlZCIpO2lmKEg9PT0ibGlzdFVub3JkZXJlZCI/IXAuY29udGFpbmVyU3RhdGUubWFya2VyfHxSPT09cC5jb250YWluZXJTdGF0ZS5tYXJrZXI6djB0KFIpKXtpZihwLmNvbnRhaW5lclN0YXRlLnR5cGV8fChwLmNvbnRhaW5lclN0YXRlLnR5cGU9SCxpLmVudGVyKEgse19jb250YWluZXI6ITB9KSksSD09PSJsaXN0VW5vcmRlcmVkIilyZXR1cm4gaS5lbnRlcigibGlzdEl0ZW1QcmVmaXgiKSxSPT09NDJ8fFI9PT00NT9pLmNoZWNrKHBLLGYsQSkoUik6QShSKTtpZighcC5pbnRlcnJ1cHR8fFI9PT00OSlyZXR1cm4gaS5lbnRlcigibGlzdEl0ZW1QcmVmaXgiKSxpLmVudGVyKCJsaXN0SXRlbVZhbHVlIiksQyhSKX1yZXR1cm4gZihSKX1mdW5jdGlvbiBDKFIpe3JldHVybiB2MHQoUikmJisrYjwxMD8oaS5jb25zdW1lKFIpLEMpOighcC5pbnRlcnJ1cHR8fGI8MikmJihwLmNvbnRhaW5lclN0YXRlLm1hcmtlcj9SPT09cC5jb250YWluZXJTdGF0ZS5tYXJrZXI6Uj09PTQxfHxSPT09NDYpPyhpLmV4aXQoImxpc3RJdGVtVmFsdWUiKSxBKFIpKTpmKFIpfWZ1bmN0aW9uIEEoUil7cmV0dXJuIGkuZW50ZXIoImxpc3RJdGVtTWFya2VyIiksaS5jb25zdW1lKFIpLGkuZXhpdCgibGlzdEl0ZW1NYXJrZXIiKSxwLmNvbnRhaW5lclN0YXRlLm1hcmtlcj1wLmNvbnRhaW5lclN0YXRlLm1hcmtlcnx8UixpLmNoZWNrKGdLLHAuaW50ZXJydXB0P2Y6UCxpLmF0dGVtcHQoZWplLGosRikpfWZ1bmN0aW9uIFAoUil7cmV0dXJuIHAuY29udGFpbmVyU3RhdGUuaW5pdGlhbEJsYW5rTGluZT0hMCxtKyssaihSKX1mdW5jdGlvbiBGKFIpe3JldHVybiBCZihSKT8oaS5lbnRlcigibGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlIiksaS5jb25zdW1lKFIpLGkuZXhpdCgibGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlIiksaik6ZihSKX1mdW5jdGlvbiBqKFIpe3JldHVybiBwLmNvbnRhaW5lclN0YXRlLnNpemU9bStwLnNsaWNlU2VyaWFsaXplKGkuZXhpdCgibGlzdEl0ZW1QcmVmaXgiKSwhMCkubGVuZ3RoLGEoUil9fWZ1bmN0aW9uIGlqZShpLGEsZil7Y29uc3QgcD10aGlzO3JldHVybiBwLmNvbnRhaW5lclN0YXRlLl9jbG9zZUZsb3c9dm9pZCAwLGkuY2hlY2soZ0ssdixtKTtmdW5jdGlvbiB2KEUpe3JldHVybiBwLmNvbnRhaW5lclN0YXRlLmZ1cnRoZXJCbGFua0xpbmVzPXAuY29udGFpbmVyU3RhdGUuZnVydGhlckJsYW5rTGluZXN8fHAuY29udGFpbmVyU3RhdGUuaW5pdGlhbEJsYW5rTGluZSxRdShpLGEsImxpc3RJdGVtSW5kZW50IixwLmNvbnRhaW5lclN0YXRlLnNpemUrMSkoRSl9ZnVuY3Rpb24gbShFKXtyZXR1cm4gcC5jb250YWluZXJTdGF0ZS5mdXJ0aGVyQmxhbmtMaW5lc3x8IUJmKEUpPyhwLmNvbnRhaW5lclN0YXRlLmZ1cnRoZXJCbGFua0xpbmVzPXZvaWQgMCxwLmNvbnRhaW5lclN0YXRlLmluaXRpYWxCbGFua0xpbmU9dm9pZCAwLGIoRSkpOihwLmNvbnRhaW5lclN0YXRlLmZ1cnRoZXJCbGFua0xpbmVzPXZvaWQgMCxwLmNvbnRhaW5lclN0YXRlLmluaXRpYWxCbGFua0xpbmU9dm9pZCAwLGkuYXR0ZW1wdChuamUsYSxiKShFKSl9ZnVuY3Rpb24gYihFKXtyZXR1cm4gcC5jb250YWluZXJTdGF0ZS5fY2xvc2VGbG93PSEwLHAuaW50ZXJydXB0PXZvaWQgMCxRdShpLGkuYXR0ZW1wdChncCxhLGYpLCJsaW5lUHJlZml4IixwLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygiY29kZUluZGVudGVkIik/dm9pZCAwOjQpKEUpfX1mdW5jdGlvbiBzamUoaSxhLGYpe2NvbnN0IHA9dGhpcztyZXR1cm4gUXUoaSx2LCJsaXN0SXRlbUluZGVudCIscC5jb250YWluZXJTdGF0ZS5zaXplKzEpO2Z1bmN0aW9uIHYobSl7Y29uc3QgYj1wLmV2ZW50c1twLmV2ZW50cy5sZW5ndGgtMV07cmV0dXJuIGImJmJbMV0udHlwZT09PSJsaXN0SXRlbUluZGVudCImJmJbMl0uc2xpY2VTZXJpYWxpemUoYlsxXSwhMCkubGVuZ3RoPT09cC5jb250YWluZXJTdGF0ZS5zaXplP2EobSk6ZihtKX19ZnVuY3Rpb24gYWplKGkpe2kuZXhpdCh0aGlzLmNvbnRhaW5lclN0YXRlLnR5cGUpfWZ1bmN0aW9uIG9qZShpLGEsZil7Y29uc3QgcD10aGlzO3JldHVybiBRdShpLHYsImxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZSIscC5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpP3ZvaWQgMDo0KzEpO2Z1bmN0aW9uIHYobSl7Y29uc3QgYj1wLmV2ZW50c1twLmV2ZW50cy5sZW5ndGgtMV07cmV0dXJuIUJmKG0pJiZiJiZiWzFdLnR5cGU9PT0ibGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlIj9hKG0pOmYobSl9fWNvbnN0IFlGdD17bmFtZToic2V0ZXh0VW5kZXJsaW5lIix0b2tlbml6ZTp1amUscmVzb2x2ZVRvOmNqZX07ZnVuY3Rpb24gY2plKGksYSl7bGV0IGY9aS5sZW5ndGgscCx2LG07Zm9yKDtmLS07KWlmKGlbZl1bMF09PT0iZW50ZXIiKXtpZihpW2ZdWzFdLnR5cGU9PT0iY29udGVudCIpe3A9ZjticmVha31pW2ZdWzFdLnR5cGU9PT0icGFyYWdyYXBoIiYmKHY9Zil9ZWxzZSBpW2ZdWzFdLnR5cGU9PT0iY29udGVudCImJmkuc3BsaWNlKGYsMSksIW0mJmlbZl1bMV0udHlwZT09PSJkZWZpbml0aW9uIiYmKG09Zik7Y29uc3QgYj17dHlwZToic2V0ZXh0SGVhZGluZyIsc3RhcnQ6T2JqZWN0LmFzc2lnbih7fSxpW3ZdWzFdLnN0YXJ0KSxlbmQ6T2JqZWN0LmFzc2lnbih7fSxpW2kubGVuZ3RoLTFdWzFdLmVuZCl9O3JldHVybiBpW3ZdWzFdLnR5cGU9InNldGV4dEhlYWRpbmdUZXh0IixtPyhpLnNwbGljZSh2LDAsWyJlbnRlciIsYixhXSksaS5zcGxpY2UobSsxLDAsWyJleGl0IixpW3BdWzFdLGFdKSxpW3BdWzFdLmVuZD1PYmplY3QuYXNzaWduKHt9LGlbbV1bMV0uZW5kKSk6aVtwXVsxXT1iLGkucHVzaChbImV4aXQiLGIsYV0pLGl9ZnVuY3Rpb24gdWplKGksYSxmKXtjb25zdCBwPXRoaXM7bGV0IHY9cC5ldmVudHMubGVuZ3RoLG0sYjtmb3IoO3YtLTspaWYocC5ldmVudHNbdl1bMV0udHlwZSE9PSJsaW5lRW5kaW5nIiYmcC5ldmVudHNbdl1bMV0udHlwZSE9PSJsaW5lUHJlZml4IiYmcC5ldmVudHNbdl1bMV0udHlwZSE9PSJjb250ZW50Iil7Yj1wLmV2ZW50c1t2XVsxXS50eXBlPT09InBhcmFncmFwaCI7YnJlYWt9cmV0dXJuIEU7ZnVuY3Rpb24gRShQKXtyZXR1cm4hcC5wYXJzZXIubGF6eVtwLm5vdygpLmxpbmVdJiYocC5pbnRlcnJ1cHR8fGIpPyhpLmVudGVyKCJzZXRleHRIZWFkaW5nTGluZSIpLGkuZW50ZXIoInNldGV4dEhlYWRpbmdMaW5lU2VxdWVuY2UiKSxtPVAsQyhQKSk6ZihQKX1mdW5jdGlvbiBDKFApe3JldHVybiBQPT09bT8oaS5jb25zdW1lKFApLEMpOihpLmV4aXQoInNldGV4dEhlYWRpbmdMaW5lU2VxdWVuY2UiKSxRdShpLEEsImxpbmVTdWZmaXgiKShQKSl9ZnVuY3Rpb24gQShQKXtyZXR1cm4gUD09PW51bGx8fGphKFApPyhpLmV4aXQoInNldGV4dEhlYWRpbmdMaW5lIiksYShQKSk6ZihQKX19Y29uc3QgbGplPXt0b2tlbml6ZTpoamV9O2Z1bmN0aW9uIGhqZShpKXtjb25zdCBhPXRoaXMsZj1pLmF0dGVtcHQoZ0sscCxpLmF0dGVtcHQodGhpcy5wYXJzZXIuY29uc3RydWN0cy5mbG93SW5pdGlhbCx2LFF1KGksaS5hdHRlbXB0KHRoaXMucGFyc2VyLmNvbnN0cnVjdHMuZmxvdyx2LGkuYXR0ZW1wdCh3UmUsdikpLCJsaW5lUHJlZml4IikpKTtyZXR1cm4gZjtmdW5jdGlvbiBwKG0pe2lmKG09PT1udWxsKXtpLmNvbnN1bWUobSk7cmV0dXJufXJldHVybiBpLmVudGVyKCJsaW5lRW5kaW5nQmxhbmsiKSxpLmNvbnN1bWUobSksaS5leGl0KCJsaW5lRW5kaW5nQmxhbmsiKSxhLmN1cnJlbnRDb25zdHJ1Y3Q9dm9pZCAwLGZ9ZnVuY3Rpb24gdihtKXtpZihtPT09bnVsbCl7aS5jb25zdW1lKG0pO3JldHVybn1yZXR1cm4gaS5lbnRlcigibGluZUVuZGluZyIpLGkuY29uc3VtZShtKSxpLmV4aXQoImxpbmVFbmRpbmciKSxhLmN1cnJlbnRDb25zdHJ1Y3Q9dm9pZCAwLGZ9fWNvbnN0IGZqZT17cmVzb2x2ZUFsbDpRRnQoKX0sZGplPVhGdCgic3RyaW5nIiksZ2plPVhGdCgidGV4dCIpO2Z1bmN0aW9uIFhGdChpKXtyZXR1cm57dG9rZW5pemU6YSxyZXNvbHZlQWxsOlFGdChpPT09InRleHQiP3BqZTp2b2lkIDApfTtmdW5jdGlvbiBhKGYpe2NvbnN0IHA9dGhpcyx2PXRoaXMucGFyc2VyLmNvbnN0cnVjdHNbaV0sbT1mLmF0dGVtcHQodixiLEUpO3JldHVybiBiO2Z1bmN0aW9uIGIoUCl7cmV0dXJuIEEoUCk/bShQKTpFKFApfWZ1bmN0aW9uIEUoUCl7aWYoUD09PW51bGwpe2YuY29uc3VtZShQKTtyZXR1cm59cmV0dXJuIGYuZW50ZXIoImRhdGEiKSxmLmNvbnN1bWUoUCksQ31mdW5jdGlvbiBDKFApe3JldHVybiBBKFApPyhmLmV4aXQoImRhdGEiKSxtKFApKTooZi5jb25zdW1lKFApLEMpfWZ1bmN0aW9uIEEoUCl7aWYoUD09PW51bGwpcmV0dXJuITA7Y29uc3QgRj12W1BdO2xldCBqPS0xO2lmKEYpZm9yKDsrK2o8Ri5sZW5ndGg7KXtjb25zdCBSPUZbal07aWYoIVIucHJldmlvdXN8fFIucHJldmlvdXMuY2FsbChwLHAucHJldmlvdXMpKXJldHVybiEwfXJldHVybiExfX19ZnVuY3Rpb24gUUZ0KGkpe3JldHVybiBhO2Z1bmN0aW9uIGEoZixwKXtsZXQgdj0tMSxtO2Zvcig7Kyt2PD1mLmxlbmd0aDspbT09PXZvaWQgMD9mW3ZdJiZmW3ZdWzFdLnR5cGU9PT0iZGF0YSImJihtPXYsdisrKTooIWZbdl18fGZbdl1bMV0udHlwZSE9PSJkYXRhIikmJih2IT09bSsyJiYoZlttXVsxXS5lbmQ9Zlt2LTFdWzFdLmVuZCxmLnNwbGljZShtKzIsdi1tLTIpLHY9bSsyKSxtPXZvaWQgMCk7cmV0dXJuIGk/aShmLHApOmZ9fWZ1bmN0aW9uIHBqZShpLGEpe2xldCBmPTA7Zm9yKDsrK2Y8PWkubGVuZ3RoOylpZigoZj09PWkubGVuZ3RofHxpW2ZdWzFdLnR5cGU9PT0ibGluZUVuZGluZyIpJiZpW2YtMV1bMV0udHlwZT09PSJkYXRhIil7Y29uc3QgcD1pW2YtMV1bMV0sdj1hLnNsaWNlU3RyZWFtKHApO2xldCBtPXYubGVuZ3RoLGI9LTEsRT0wLEM7Zm9yKDttLS07KXtjb25zdCBBPXZbbV07aWYodHlwZW9mIEE9PSJzdHJpbmciKXtmb3IoYj1BLmxlbmd0aDtBLmNoYXJDb2RlQXQoYi0xKT09PTMyOylFKyssYi0tO2lmKGIpYnJlYWs7Yj0tMX1lbHNlIGlmKEE9PT0tMilDPSEwLEUrKztlbHNlIGlmKEEhPT0tMSl7bSsrO2JyZWFrfX1pZihFKXtjb25zdCBBPXt0eXBlOmY9PT1pLmxlbmd0aHx8Q3x8RTwyPyJsaW5lU3VmZml4IjoiaGFyZEJyZWFrVHJhaWxpbmciLHN0YXJ0OntsaW5lOnAuZW5kLmxpbmUsY29sdW1uOnAuZW5kLmNvbHVtbi1FLG9mZnNldDpwLmVuZC5vZmZzZXQtRSxfaW5kZXg6cC5zdGFydC5faW5kZXgrbSxfYnVmZmVySW5kZXg6bT9iOnAuc3RhcnQuX2J1ZmZlckluZGV4K2J9LGVuZDpPYmplY3QuYXNzaWduKHt9LHAuZW5kKX07cC5lbmQ9T2JqZWN0LmFzc2lnbih7fSxBLnN0YXJ0KSxwLnN0YXJ0Lm9mZnNldD09PXAuZW5kLm9mZnNldD9PYmplY3QuYXNzaWduKHAsQSk6KGkuc3BsaWNlKGYsMCxbImVudGVyIixBLGFdLFsiZXhpdCIsQSxhXSksZis9Mil9ZisrfXJldHVybiBpfWZ1bmN0aW9uIGJqZShpLGEsZil7bGV0IHA9T2JqZWN0LmFzc2lnbihmP09iamVjdC5hc3NpZ24oe30sZik6e2xpbmU6MSxjb2x1bW46MSxvZmZzZXQ6MH0se19pbmRleDowLF9idWZmZXJJbmRleDotMX0pO2NvbnN0IHY9e30sbT1bXTtsZXQgYj1bXSxFPVtdO2NvbnN0IEM9e2NvbnN1bWU6aXQsZW50ZXI6ZnQsZXhpdDpUdCxhdHRlbXB0OmN0KGt0KSxjaGVjazpjdChtdCksaW50ZXJydXB0OmN0KG10LHtpbnRlcnJ1cHQ6ITB9KX0sQT17cHJldmlvdXM6bnVsbCxjb2RlOm51bGwsY29udGFpbmVyU3RhdGU6e30sZXZlbnRzOltdLHBhcnNlcjppLHNsaWNlU3RyZWFtOlIsc2xpY2VTZXJpYWxpemU6aixub3c6SCxkZWZpbmVTa2lwOlksd3JpdGU6Rn07bGV0IFA9YS50b2tlbml6ZS5jYWxsKEEsQyk7cmV0dXJuIGEucmVzb2x2ZUFsbCYmbS5wdXNoKGEpLEE7ZnVuY3Rpb24gRihodCl7cmV0dXJuIGI9bnYoYixodCkscnQoKSxiW2IubGVuZ3RoLTFdIT09bnVsbD9bXTooeXQoYSwwKSxBLmV2ZW50cz1tMHQobSxBLmV2ZW50cyxBKSxBLmV2ZW50cyl9ZnVuY3Rpb24gaihodCxkdCl7cmV0dXJuIHdqZShSKGh0KSxkdCl9ZnVuY3Rpb24gUihodCl7cmV0dXJuIHZqZShiLGh0KX1mdW5jdGlvbiBIKCl7cmV0dXJuIE9iamVjdC5hc3NpZ24oe30scCl9ZnVuY3Rpb24gWShodCl7dltodC5saW5lXT1odC5jb2x1bW4seHQoKX1mdW5jdGlvbiBydCgpe2xldCBodDtmb3IoO3AuX2luZGV4PGIubGVuZ3RoOyl7Y29uc3QgZHQ9YltwLl9pbmRleF07aWYodHlwZW9mIGR0PT0ic3RyaW5nIilmb3IoaHQ9cC5faW5kZXgscC5fYnVmZmVySW5kZXg8MCYmKHAuX2J1ZmZlckluZGV4PTApO3AuX2luZGV4PT09aHQmJnAuX2J1ZmZlckluZGV4PGR0Lmxlbmd0aDspSihkdC5jaGFyQ29kZUF0KHAuX2J1ZmZlckluZGV4KSk7ZWxzZSBKKGR0KX19ZnVuY3Rpb24gSihodCl7UD1QKGh0KX1mdW5jdGlvbiBpdChodCl7amEoaHQpPyhwLmxpbmUrKyxwLmNvbHVtbj0xLHAub2Zmc2V0Kz1odD09PS0zPzI6MSx4dCgpKTpodCE9PS0xJiYocC5jb2x1bW4rKyxwLm9mZnNldCsrKSxwLl9idWZmZXJJbmRleDwwP3AuX2luZGV4Kys6KHAuX2J1ZmZlckluZGV4KysscC5fYnVmZmVySW5kZXg9PT1iW3AuX2luZGV4XS5sZW5ndGgmJihwLl9idWZmZXJJbmRleD0tMSxwLl9pbmRleCsrKSksQS5wcmV2aW91cz1odH1mdW5jdGlvbiBmdChodCxkdCl7Y29uc3QgQ3Q9ZHR8fHt9O3JldHVybiBDdC50eXBlPWh0LEN0LnN0YXJ0PUgoKSxBLmV2ZW50cy5wdXNoKFsiZW50ZXIiLEN0LEFdKSxFLnB1c2goQ3QpLEN0fWZ1bmN0aW9uIFR0KGh0KXtjb25zdCBkdD1FLnBvcCgpO3JldHVybiBkdC5lbmQ9SCgpLEEuZXZlbnRzLnB1c2goWyJleGl0IixkdCxBXSksZHR9ZnVuY3Rpb24ga3QoaHQsZHQpe3l0KGh0LGR0LmZyb20pfWZ1bmN0aW9uIG10KGh0LGR0KXtkdC5yZXN0b3JlKCl9ZnVuY3Rpb24gY3QoaHQsZHQpe3JldHVybiBDdDtmdW5jdGlvbiBDdCh0dCxQdCxwdCl7bGV0IEZ0LFgsUnQsQnQ7cmV0dXJuIEFycmF5LmlzQXJyYXkodHQpP090KHR0KToidG9rZW5pemUiaW4gdHQ/T3QoW3R0XSk6dnQodHQpO2Z1bmN0aW9uIHZ0KFRlKXtyZXR1cm4gV247ZnVuY3Rpb24gV24oQWUpe2NvbnN0IG5lPUFlIT09bnVsbCYmVGVbQWVdLGtlPUFlIT09bnVsbCYmVGUubnVsbCxWZT1bLi4uQXJyYXkuaXNBcnJheShuZSk/bmU6bmU/W25lXTpbXSwuLi5BcnJheS5pc0FycmF5KGtlKT9rZTprZT9ba2VdOltdXTtyZXR1cm4gT3QoVmUpKEFlKX19ZnVuY3Rpb24gT3QoVGUpe3JldHVybiBGdD1UZSxYPTAsVGUubGVuZ3RoPT09MD9wdDpWdChUZVtYXSl9ZnVuY3Rpb24gVnQoVGUpe3JldHVybiBXbjtmdW5jdGlvbiBXbihBZSl7cmV0dXJuIEJ0PXN0KCksUnQ9VGUsVGUucGFydGlhbHx8KEEuY3VycmVudENvbnN0cnVjdD1UZSksVGUubmFtZSYmQS5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoVGUubmFtZSk/X24oKTpUZS50b2tlbml6ZS5jYWxsKGR0P09iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShBKSxkdCk6QSxDLHFlLF9uKShBZSl9fWZ1bmN0aW9uIHFlKFRlKXtyZXR1cm4gaHQoUnQsQnQpLFB0fWZ1bmN0aW9uIF9uKFRlKXtyZXR1cm4gQnQucmVzdG9yZSgpLCsrWDxGdC5sZW5ndGg/VnQoRnRbWF0pOnB0fX19ZnVuY3Rpb24geXQoaHQsZHQpe2h0LnJlc29sdmVBbGwmJiFtLmluY2x1ZGVzKGh0KSYmbS5wdXNoKGh0KSxodC5yZXNvbHZlJiZ2MyhBLmV2ZW50cyxkdCxBLmV2ZW50cy5sZW5ndGgtZHQsaHQucmVzb2x2ZShBLmV2ZW50cy5zbGljZShkdCksQSkpLGh0LnJlc29sdmVUbyYmKEEuZXZlbnRzPWh0LnJlc29sdmVUbyhBLmV2ZW50cyxBKSl9ZnVuY3Rpb24gc3QoKXtjb25zdCBodD1IKCksZHQ9QS5wcmV2aW91cyxDdD1BLmN1cnJlbnRDb25zdHJ1Y3QsdHQ9QS5ldmVudHMubGVuZ3RoLFB0PUFycmF5LmZyb20oRSk7cmV0dXJue3Jlc3RvcmU6cHQsZnJvbTp0dH07ZnVuY3Rpb24gcHQoKXtwPWh0LEEucHJldmlvdXM9ZHQsQS5jdXJyZW50Q29uc3RydWN0PUN0LEEuZXZlbnRzLmxlbmd0aD10dCxFPVB0LHh0KCl9fWZ1bmN0aW9uIHh0KCl7cC5saW5lIGluIHYmJnAuY29sdW1uPDImJihwLmNvbHVtbj12W3AubGluZV0scC5vZmZzZXQrPXZbcC5saW5lXS0xKX19ZnVuY3Rpb24gdmplKGksYSl7Y29uc3QgZj1hLnN0YXJ0Ll9pbmRleCxwPWEuc3RhcnQuX2J1ZmZlckluZGV4LHY9YS5lbmQuX2luZGV4LG09YS5lbmQuX2J1ZmZlckluZGV4O2xldCBiO3JldHVybiBmPT09dj9iPVtpW2ZdLnNsaWNlKHAsbSldOihiPWkuc2xpY2UoZix2KSxwPi0xJiYoYlswXT1iWzBdLnNsaWNlKHApKSxtPjAmJmIucHVzaChpW3ZdLnNsaWNlKDAsbSkpKSxifWZ1bmN0aW9uIHdqZShpLGEpe2xldCBmPS0xO2NvbnN0IHA9W107bGV0IHY7Zm9yKDsrK2Y8aS5sZW5ndGg7KXtjb25zdCBtPWlbZl07bGV0IGI7aWYodHlwZW9mIG09PSJzdHJpbmciKWI9bTtlbHNlIHN3aXRjaChtKXtjYXNlLTU6e2I9IlxyIjticmVha31jYXNlLTQ6e2I9YApgO2JyZWFrfWNhc2UtMzp7Yj1gXHIKYDticmVha31jYXNlLTI6e2I9YT8iICI6IgkiO2JyZWFrfWNhc2UtMTp7aWYoIWEmJnYpY29udGludWU7Yj0iICI7YnJlYWt9ZGVmYXVsdDpiPVN0cmluZy5mcm9tQ2hhckNvZGUobSl9dj1tPT09LTIscC5wdXNoKGIpfXJldHVybiBwLmpvaW4oIiIpfWNvbnN0IG1qZT17WzQyXTpncCxbNDNdOmdwLFs0NV06Z3AsWzQ4XTpncCxbNDldOmdwLFs1MF06Z3AsWzUxXTpncCxbNTJdOmdwLFs1M106Z3AsWzU0XTpncCxbNTVdOmdwLFs1Nl06Z3AsWzU3XTpncCxbNjJdOmpGdH0seWplPXtbOTFdOkVSZX0seGplPXtbLTJdOmswdCxbLTFdOmswdCxbMzJdOmswdH0sa2plPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxhdHRlbnRpb25NYXJrZXJzOntudWxsOls0Miw5NV19LGNvbnRlbnRJbml0aWFsOnlqZSxkaXNhYmxlOntudWxsOltdfSxkb2N1bWVudDptamUsZmxvdzp7WzM1XTpMUmUsWzQyXTpwSyxbNDVdOltZRnQscEtdLFs2MF06T1JlLFs2MV06WUZ0LFs5NV06cEssWzk2XTpIRnQsWzEyNl06SEZ0fSxmbG93SW5pdGlhbDp4amUsaW5zaWRlU3Bhbjp7bnVsbDpbeTB0LGZqZV19LHN0cmluZzp7WzM4XTpxRnQsWzkyXTokRnR9LHRleHQ6e1stNV06VDB0LFstNF06VDB0LFstM106VDB0LFszM106WVJlLFszOF06cUZ0LFs0Ml06eTB0LFs2MF06W2VSZSxSUmVdLFs5MV06UVJlLFs5Ml06W1NSZSwkRnRdLFs5M106RTB0LFs5NV06eTB0LFs5Nl06ZFJlfX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTtmdW5jdGlvbiBFamUoaT17fSl7Y29uc3QgYT0kQmUoW2tqZV0uY29uY2F0KGkuZXh0ZW5zaW9uc3x8W10pKSxmPXtkZWZpbmVkOltdLGxhenk6e30sY29uc3RydWN0czphLGNvbnRlbnQ6cChLQmUpLGRvY3VtZW50OnAoWEJlKSxmbG93OnAobGplKSxzdHJpbmc6cChkamUpLHRleHQ6cChnamUpfTtyZXR1cm4gZjtmdW5jdGlvbiBwKHYpe3JldHVybiBtO2Z1bmN0aW9uIG0oYil7cmV0dXJuIGJqZShmLHYsYil9fX1jb25zdCBaRnQ9L1tcMFx0XG5ccl0vZztmdW5jdGlvbiBUamUoKXtsZXQgaT0xLGE9IiIsZj0hMCxwO3JldHVybiB2O2Z1bmN0aW9uIHYobSxiLEUpe2NvbnN0IEM9W107bGV0IEEsUCxGLGosUjtmb3IobT1hK20udG9TdHJpbmcoYiksRj0wLGE9IiIsZiYmKG0uY2hhckNvZGVBdCgwKT09PTY1Mjc5JiZGKyssZj12b2lkIDApO0Y8bS5sZW5ndGg7KXtpZihaRnQubGFzdEluZGV4PUYsQT1aRnQuZXhlYyhtKSxqPUEmJkEuaW5kZXghPT12b2lkIDA/QS5pbmRleDptLmxlbmd0aCxSPW0uY2hhckNvZGVBdChqKSwhQSl7YT1tLnNsaWNlKEYpO2JyZWFrfWlmKFI9PT0xMCYmRj09PWomJnApQy5wdXNoKC0zKSxwPXZvaWQgMDtlbHNlIHN3aXRjaChwJiYoQy5wdXNoKC01KSxwPXZvaWQgMCksRjxqJiYoQy5wdXNoKG0uc2xpY2UoRixqKSksaSs9ai1GKSxSKXtjYXNlIDA6e0MucHVzaCg2NTUzMyksaSsrO2JyZWFrfWNhc2UgOTp7Zm9yKFA9TWF0aC5jZWlsKGkvNCkqNCxDLnB1c2goLTIpO2krKzxQOylDLnB1c2goLTEpO2JyZWFrfWNhc2UgMTA6e0MucHVzaCgtNCksaT0xO2JyZWFrfWRlZmF1bHQ6cD0hMCxpPTF9Rj1qKzF9cmV0dXJuIEUmJihwJiZDLnB1c2goLTUpLGEmJkMucHVzaChhKSxDLnB1c2gobnVsbCkpLEN9fWZ1bmN0aW9uIF9qZShpKXtmb3IoOyFWRnQoaSk7KTtyZXR1cm4gaX1mdW5jdGlvbiBKRnQoaSxhKXtjb25zdCBmPU51bWJlci5wYXJzZUludChpLGEpO3JldHVybiBmPDl8fGY9PT0xMXx8Zj4xMyYmZjwzMnx8Zj4xMjYmJmY8MTYwfHxmPjU1Mjk1JiZmPDU3MzQ0fHxmPjY0OTc1JiZmPDY1MDA4fHwoZiY2NTUzNSk9PT02NTUzNXx8KGYmNjU1MzUpPT09NjU1MzR8fGY+MTExNDExMT8i77+9IjpTdHJpbmcuZnJvbUNoYXJDb2RlKGYpfWNvbnN0IENqZT0vXFwoWyEtLzotQFstYHstfl0pfCYoIyg/OlxkezEsN318eFtcZGEtZl17MSw2fSl8W1xkYS16XXsxLDMxfSk7L2dpO2Z1bmN0aW9uIFNqZShpKXtyZXR1cm4gaS5yZXBsYWNlKENqZSxBamUpfWZ1bmN0aW9uIEFqZShpLGEsZil7aWYoYSlyZXR1cm4gYTtpZihmLmNoYXJDb2RlQXQoMCk9PT0zNSl7Y29uc3Qgdj1mLmNoYXJDb2RlQXQoMSksbT12PT09MTIwfHx2PT09ODg7cmV0dXJuIEpGdChmLnNsaWNlKG0/MjoxKSxtPzE2OjEwKX1yZXR1cm4geDB0KGYpfHxpfWZ1bmN0aW9uIGJLKGkpe3JldHVybiFpfHx0eXBlb2YgaSE9Im9iamVjdCI/IiI6InBvc2l0aW9uImluIGl8fCJ0eXBlImluIGk/dEJ0KGkucG9zaXRpb24pOiJzdGFydCJpbiBpfHwiZW5kImluIGk/dEJ0KGkpOiJsaW5lImluIGl8fCJjb2x1bW4iaW4gaT9fMHQoaSk6IiJ9ZnVuY3Rpb24gXzB0KGkpe3JldHVybiBlQnQoaSYmaS5saW5lKSsiOiIrZUJ0KGkmJmkuY29sdW1uKX1mdW5jdGlvbiB0QnQoaSl7cmV0dXJuIF8wdChpJiZpLnN0YXJ0KSsiLSIrXzB0KGkmJmkuZW5kKX1mdW5jdGlvbiBlQnQoaSl7cmV0dXJuIGkmJnR5cGVvZiBpPT0ibnVtYmVyIj9pOjF9Y29uc3QgbkJ0PXt9Lmhhc093blByb3BlcnR5LHJCdD1mdW5jdGlvbihpLGEsZil7cmV0dXJuIHR5cGVvZiBhIT0ic3RyaW5nIiYmKGY9YSxhPXZvaWQgMCksTGplKGYpKF9qZShFamUoZikuZG9jdW1lbnQoKS53cml0ZShUamUoKShpLGEsITApKSkpfTtmdW5jdGlvbiBMamUoaSl7Y29uc3QgYT17dHJhbnNmb3JtczpbXSxjYW5Db250YWluRW9sczpbImVtcGhhc2lzIiwiZnJhZ21lbnQiLCJoZWFkaW5nIiwicGFyYWdyYXBoIiwic3Ryb25nIl0sZW50ZXI6e2F1dG9saW5rOkUocXQpLGF1dG9saW5rUHJvdG9jb2w6aHQsYXV0b2xpbmtFbWFpbDpodCxhdHhIZWFkaW5nOkUoeWUpLGJsb2NrUXVvdGU6RShWZSksY2hhcmFjdGVyRXNjYXBlOmh0LGNoYXJhY3RlclJlZmVyZW5jZTpodCxjb2RlRmVuY2VkOkUoRWUpLGNvZGVGZW5jZWRGZW5jZUluZm86Qyxjb2RlRmVuY2VkRmVuY2VNZXRhOkMsY29kZUluZGVudGVkOkUoRWUsQyksY29kZVRleHQ6RShIZSxDKSxjb2RlVGV4dERhdGE6aHQsZGF0YTpodCxjb2RlRmxvd1ZhbHVlOmh0LGRlZmluaXRpb246RShDZSksZGVmaW5pdGlvbkRlc3RpbmF0aW9uU3RyaW5nOkMsZGVmaW5pdGlvbkxhYmVsU3RyaW5nOkMsZGVmaW5pdGlvblRpdGxlU3RyaW5nOkMsZW1waGFzaXM6RSgkZSksaGFyZEJyZWFrRXNjYXBlOkUoZm4pLGhhcmRCcmVha1RyYWlsaW5nOkUoZm4pLGh0bWxGbG93OkUoWXQsQyksaHRtbEZsb3dEYXRhOmh0LGh0bWxUZXh0OkUoWXQsQyksaHRtbFRleHREYXRhOmh0LGltYWdlOkUoTWkpLGxhYmVsOkMsbGluazpFKHF0KSxsaXN0SXRlbTpFKFNlKSxsaXN0SXRlbVZhbHVlOkgsbGlzdE9yZGVyZWQ6RSh6aSxSKSxsaXN0VW5vcmRlcmVkOkUoemkpLHBhcmFncmFwaDpFKGtpKSxyZWZlcmVuY2U6X24scmVmZXJlbmNlU3RyaW5nOkMscmVzb3VyY2VEZXN0aW5hdGlvblN0cmluZzpDLHJlc291cmNlVGl0bGVTdHJpbmc6QyxzZXRleHRIZWFkaW5nOkUoeWUpLHN0cm9uZzpFKFJpKSx0aGVtYXRpY0JyZWFrOkUoYmkpfSxleGl0OnthdHhIZWFkaW5nOlAoKSxhdHhIZWFkaW5nU2VxdWVuY2U6Y3QsYXV0b2xpbms6UCgpLGF1dG9saW5rRW1haWw6a2UsYXV0b2xpbmtQcm90b2NvbDpuZSxibG9ja1F1b3RlOlAoKSxjaGFyYWN0ZXJFc2NhcGVWYWx1ZTpkdCxjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJIZXhhZGVjaW1hbDpXbixjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJOdW1lcmljOlduLGNoYXJhY3RlclJlZmVyZW5jZVZhbHVlOkFlLGNvZGVGZW5jZWQ6UChpdCksY29kZUZlbmNlZEZlbmNlOkosY29kZUZlbmNlZEZlbmNlSW5mbzpZLGNvZGVGZW5jZWRGZW5jZU1ldGE6cnQsY29kZUZsb3dWYWx1ZTpkdCxjb2RlSW5kZW50ZWQ6UChmdCksY29kZVRleHQ6UChGdCksY29kZVRleHREYXRhOmR0LGRhdGE6ZHQsZGVmaW5pdGlvbjpQKCksZGVmaW5pdGlvbkRlc3RpbmF0aW9uU3RyaW5nOm10LGRlZmluaXRpb25MYWJlbFN0cmluZzpUdCxkZWZpbml0aW9uVGl0bGVTdHJpbmc6a3QsZW1waGFzaXM6UCgpLGhhcmRCcmVha0VzY2FwZTpQKHR0KSxoYXJkQnJlYWtUcmFpbGluZzpQKHR0KSxodG1sRmxvdzpQKFB0KSxodG1sRmxvd0RhdGE6ZHQsaHRtbFRleHQ6UChwdCksaHRtbFRleHREYXRhOmR0LGltYWdlOlAoUnQpLGxhYmVsOnZ0LGxhYmVsVGV4dDpCdCxsaW5lRW5kaW5nOkN0LGxpbms6UChYKSxsaXN0SXRlbTpQKCksbGlzdE9yZGVyZWQ6UCgpLGxpc3RVbm9yZGVyZWQ6UCgpLHBhcmFncmFwaDpQKCkscmVmZXJlbmNlU3RyaW5nOlRlLHJlc291cmNlRGVzdGluYXRpb25TdHJpbmc6T3QscmVzb3VyY2VUaXRsZVN0cmluZzpWdCxyZXNvdXJjZTpxZSxzZXRleHRIZWFkaW5nOlAoeHQpLHNldGV4dEhlYWRpbmdMaW5lU2VxdWVuY2U6c3Qsc2V0ZXh0SGVhZGluZ1RleHQ6eXQsc3Ryb25nOlAoKSx0aGVtYXRpY0JyZWFrOlAoKX19O2lCdChhLChpfHx7fSkubWRhc3RFeHRlbnNpb25zfHxbXSk7Y29uc3QgZj17fTtyZXR1cm4gcDtmdW5jdGlvbiBwKGRuKXtsZXQgTm49e3R5cGU6InJvb3QiLGNoaWxkcmVuOltdfTtjb25zdCBXcj17c3RhY2s6W05uXSx0b2tlblN0YWNrOltdLGNvbmZpZzphLGVudGVyOkEsZXhpdDpGLGJ1ZmZlcjpDLHJlc3VtZTpqLHNldERhdGE6bSxnZXREYXRhOmJ9LExpPVtdO2xldCBpcz0tMTtmb3IoOysraXM8ZG4ubGVuZ3RoOylpZihkbltpc11bMV0udHlwZT09PSJsaXN0T3JkZXJlZCJ8fGRuW2lzXVsxXS50eXBlPT09Imxpc3RVbm9yZGVyZWQiKWlmKGRuW2lzXVswXT09PSJlbnRlciIpTGkucHVzaChpcyk7ZWxzZXtjb25zdCBUcz1MaS5wb3AoKTtpcz12KGRuLFRzLGlzKX1mb3IoaXM9LTE7Kytpczxkbi5sZW5ndGg7KXtjb25zdCBUcz1hW2RuW2lzXVswXV07bkJ0LmNhbGwoVHMsZG5baXNdWzFdLnR5cGUpJiZUc1tkbltpc11bMV0udHlwZV0uY2FsbChPYmplY3QuYXNzaWduKHtzbGljZVNlcmlhbGl6ZTpkbltpc11bMl0uc2xpY2VTZXJpYWxpemV9LFdyKSxkbltpc11bMV0pfWlmKFdyLnRva2VuU3RhY2subGVuZ3RoPjApe2NvbnN0IFRzPVdyLnRva2VuU3RhY2tbV3IudG9rZW5TdGFjay5sZW5ndGgtMV07KFRzWzFdfHxzQnQpLmNhbGwoV3Isdm9pZCAwLFRzWzBdKX1mb3IoTm4ucG9zaXRpb249e3N0YXJ0OmNrKGRuLmxlbmd0aD4wP2RuWzBdWzFdLnN0YXJ0OntsaW5lOjEsY29sdW1uOjEsb2Zmc2V0OjB9KSxlbmQ6Y2soZG4ubGVuZ3RoPjA/ZG5bZG4ubGVuZ3RoLTJdWzFdLmVuZDp7bGluZToxLGNvbHVtbjoxLG9mZnNldDowfSl9LGlzPS0xOysraXM8YS50cmFuc2Zvcm1zLmxlbmd0aDspTm49YS50cmFuc2Zvcm1zW2lzXShObil8fE5uO3JldHVybiBObn1mdW5jdGlvbiB2KGRuLE5uLFdyKXtsZXQgTGk9Tm4tMSxpcz0tMSxUcz0hMSxBYSxYaSxHYSxfcjtmb3IoOysrTGk8PVdyOyl7Y29uc3QgcXI9ZG5bTGldO2lmKHFyWzFdLnR5cGU9PT0ibGlzdFVub3JkZXJlZCJ8fHFyWzFdLnR5cGU9PT0ibGlzdE9yZGVyZWQifHxxclsxXS50eXBlPT09ImJsb2NrUXVvdGUiPyhxclswXT09PSJlbnRlciI/aXMrKzppcy0tLF9yPXZvaWQgMCk6cXJbMV0udHlwZT09PSJsaW5lRW5kaW5nQmxhbmsiP3FyWzBdPT09ImVudGVyIiYmKEFhJiYhX3ImJiFpcyYmIUdhJiYoR2E9TGkpLF9yPXZvaWQgMCk6cXJbMV0udHlwZT09PSJsaW5lUHJlZml4Inx8cXJbMV0udHlwZT09PSJsaXN0SXRlbVZhbHVlInx8cXJbMV0udHlwZT09PSJsaXN0SXRlbU1hcmtlciJ8fHFyWzFdLnR5cGU9PT0ibGlzdEl0ZW1QcmVmaXgifHxxclsxXS50eXBlPT09Imxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZSJ8fChfcj12b2lkIDApLCFpcyYmcXJbMF09PT0iZW50ZXIiJiZxclsxXS50eXBlPT09Imxpc3RJdGVtUHJlZml4Inx8aXM9PT0tMSYmcXJbMF09PT0iZXhpdCImJihxclsxXS50eXBlPT09Imxpc3RVbm9yZGVyZWQifHxxclsxXS50eXBlPT09Imxpc3RPcmRlcmVkIikpe2lmKEFhKXtsZXQgT2k9TGk7Zm9yKFhpPXZvaWQgMDtPaS0tOyl7Y29uc3QgZ3I9ZG5bT2ldO2lmKGdyWzFdLnR5cGU9PT0ibGluZUVuZGluZyJ8fGdyWzFdLnR5cGU9PT0ibGluZUVuZGluZ0JsYW5rIil7aWYoZ3JbMF09PT0iZXhpdCIpY29udGludWU7WGkmJihkbltYaV1bMV0udHlwZT0ibGluZUVuZGluZ0JsYW5rIixUcz0hMCksZ3JbMV0udHlwZT0ibGluZUVuZGluZyIsWGk9T2l9ZWxzZSBpZighKGdyWzFdLnR5cGU9PT0ibGluZVByZWZpeCJ8fGdyWzFdLnR5cGU9PT0iYmxvY2tRdW90ZVByZWZpeCJ8fGdyWzFdLnR5cGU9PT0iYmxvY2tRdW90ZVByZWZpeFdoaXRlc3BhY2UifHxnclsxXS50eXBlPT09ImJsb2NrUXVvdGVNYXJrZXIifHxnclsxXS50eXBlPT09Imxpc3RJdGVtSW5kZW50IikpYnJlYWt9R2EmJighWGl8fEdhPFhpKSYmKEFhLl9zcHJlYWQ9ITApLEFhLmVuZD1PYmplY3QuYXNzaWduKHt9LFhpP2RuW1hpXVsxXS5zdGFydDpxclsxXS5lbmQpLGRuLnNwbGljZShYaXx8TGksMCxbImV4aXQiLEFhLHFyWzJdXSksTGkrKyxXcisrfXFyWzFdLnR5cGU9PT0ibGlzdEl0ZW1QcmVmaXgiJiYoQWE9e3R5cGU6Imxpc3RJdGVtIixfc3ByZWFkOiExLHN0YXJ0Ok9iamVjdC5hc3NpZ24oe30scXJbMV0uc3RhcnQpfSxkbi5zcGxpY2UoTGksMCxbImVudGVyIixBYSxxclsyXV0pLExpKyssV3IrKyxHYT12b2lkIDAsX3I9ITApfX1yZXR1cm4gZG5bTm5dWzFdLl9zcHJlYWQ9VHMsV3J9ZnVuY3Rpb24gbShkbixObil7Zltkbl09Tm59ZnVuY3Rpb24gYihkbil7cmV0dXJuIGZbZG5dfWZ1bmN0aW9uIEUoZG4sTm4pe3JldHVybiBXcjtmdW5jdGlvbiBXcihMaSl7QS5jYWxsKHRoaXMsZG4oTGkpLExpKSxObiYmTm4uY2FsbCh0aGlzLExpKX19ZnVuY3Rpb24gQygpe3RoaXMuc3RhY2sucHVzaCh7dHlwZToiZnJhZ21lbnQiLGNoaWxkcmVuOltdfSl9ZnVuY3Rpb24gQShkbixObixXcil7cmV0dXJuIHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV0uY2hpbGRyZW4ucHVzaChkbiksdGhpcy5zdGFjay5wdXNoKGRuKSx0aGlzLnRva2VuU3RhY2sucHVzaChbTm4sV3JdKSxkbi5wb3NpdGlvbj17c3RhcnQ6Y2soTm4uc3RhcnQpfSxkbn1mdW5jdGlvbiBQKGRuKXtyZXR1cm4gTm47ZnVuY3Rpb24gTm4oV3Ipe2RuJiZkbi5jYWxsKHRoaXMsV3IpLEYuY2FsbCh0aGlzLFdyKX19ZnVuY3Rpb24gRihkbixObil7Y29uc3QgV3I9dGhpcy5zdGFjay5wb3AoKSxMaT10aGlzLnRva2VuU3RhY2sucG9wKCk7aWYoTGkpTGlbMF0udHlwZSE9PWRuLnR5cGUmJihObj9Obi5jYWxsKHRoaXMsZG4sTGlbMF0pOihMaVsxXXx8c0J0KS5jYWxsKHRoaXMsZG4sTGlbMF0pKTtlbHNlIHRocm93IG5ldyBFcnJvcigiQ2Fubm90IGNsb3NlIGAiK2RuLnR5cGUrImAgKCIrYksoe3N0YXJ0OmRuLnN0YXJ0LGVuZDpkbi5lbmR9KSsiKTogaXTigJlzIG5vdCBvcGVuIik7cmV0dXJuIFdyLnBvc2l0aW9uLmVuZD1jayhkbi5lbmQpLFdyfWZ1bmN0aW9uIGooKXtyZXR1cm4gakJlKHRoaXMuc3RhY2sucG9wKCkpfWZ1bmN0aW9uIFIoKXttKCJleHBlY3RpbmdGaXJzdExpc3RJdGVtVmFsdWUiLCEwKX1mdW5jdGlvbiBIKGRuKXtpZihiKCJleHBlY3RpbmdGaXJzdExpc3RJdGVtVmFsdWUiKSl7Y29uc3QgTm49dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0yXTtObi5zdGFydD1OdW1iZXIucGFyc2VJbnQodGhpcy5zbGljZVNlcmlhbGl6ZShkbiksMTApLG0oImV4cGVjdGluZ0ZpcnN0TGlzdEl0ZW1WYWx1ZSIpfX1mdW5jdGlvbiBZKCl7Y29uc3QgZG49dGhpcy5yZXN1bWUoKSxObj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO05uLmxhbmc9ZG59ZnVuY3Rpb24gcnQoKXtjb25zdCBkbj10aGlzLnJlc3VtZSgpLE5uPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07Tm4ubWV0YT1kbn1mdW5jdGlvbiBKKCl7YigiZmxvd0NvZGVJbnNpZGUiKXx8KHRoaXMuYnVmZmVyKCksbSgiZmxvd0NvZGVJbnNpZGUiLCEwKSl9ZnVuY3Rpb24gaXQoKXtjb25zdCBkbj10aGlzLnJlc3VtZSgpLE5uPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07Tm4udmFsdWU9ZG4ucmVwbGFjZSgvXihccj9cbnxccil8KFxyP1xufFxyKSQvZywiIiksbSgiZmxvd0NvZGVJbnNpZGUiKX1mdW5jdGlvbiBmdCgpe2NvbnN0IGRuPXRoaXMucmVzdW1lKCksTm49dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtObi52YWx1ZT1kbi5yZXBsYWNlKC8oXHI/XG58XHIpJC9nLCIiKX1mdW5jdGlvbiBUdChkbil7Y29uc3QgTm49dGhpcy5yZXN1bWUoKSxXcj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO1dyLmxhYmVsPU5uLFdyLmlkZW50aWZpZXI9ckwodGhpcy5zbGljZVNlcmlhbGl6ZShkbikpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24ga3QoKXtjb25zdCBkbj10aGlzLnJlc3VtZSgpLE5uPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07Tm4udGl0bGU9ZG59ZnVuY3Rpb24gbXQoKXtjb25zdCBkbj10aGlzLnJlc3VtZSgpLE5uPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07Tm4udXJsPWRufWZ1bmN0aW9uIGN0KGRuKXtjb25zdCBObj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO2lmKCFObi5kZXB0aCl7Y29uc3QgV3I9dGhpcy5zbGljZVNlcmlhbGl6ZShkbikubGVuZ3RoO05uLmRlcHRoPVdyfX1mdW5jdGlvbiB5dCgpe20oInNldGV4dEhlYWRpbmdTbHVycExpbmVFbmRpbmciLCEwKX1mdW5jdGlvbiBzdChkbil7Y29uc3QgTm49dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtObi5kZXB0aD10aGlzLnNsaWNlU2VyaWFsaXplKGRuKS5jaGFyQ29kZUF0KDApPT09NjE/MToyfWZ1bmN0aW9uIHh0KCl7bSgic2V0ZXh0SGVhZGluZ1NsdXJwTGluZUVuZGluZyIpfWZ1bmN0aW9uIGh0KGRuKXtjb25zdCBObj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO2xldCBXcj1Obi5jaGlsZHJlbltObi5jaGlsZHJlbi5sZW5ndGgtMV07KCFXcnx8V3IudHlwZSE9PSJ0ZXh0IikmJihXcj1waSgpLFdyLnBvc2l0aW9uPXtzdGFydDpjayhkbi5zdGFydCl9LE5uLmNoaWxkcmVuLnB1c2goV3IpKSx0aGlzLnN0YWNrLnB1c2goV3IpfWZ1bmN0aW9uIGR0KGRuKXtjb25zdCBObj10aGlzLnN0YWNrLnBvcCgpO05uLnZhbHVlKz10aGlzLnNsaWNlU2VyaWFsaXplKGRuKSxObi5wb3NpdGlvbi5lbmQ9Y2soZG4uZW5kKX1mdW5jdGlvbiBDdChkbil7Y29uc3QgTm49dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtpZihiKCJhdEhhcmRCcmVhayIpKXtjb25zdCBXcj1Obi5jaGlsZHJlbltObi5jaGlsZHJlbi5sZW5ndGgtMV07V3IucG9zaXRpb24uZW5kPWNrKGRuLmVuZCksbSgiYXRIYXJkQnJlYWsiKTtyZXR1cm59IWIoInNldGV4dEhlYWRpbmdTbHVycExpbmVFbmRpbmciKSYmYS5jYW5Db250YWluRW9scy5pbmNsdWRlcyhObi50eXBlKSYmKGh0LmNhbGwodGhpcyxkbiksZHQuY2FsbCh0aGlzLGRuKSl9ZnVuY3Rpb24gdHQoKXttKCJhdEhhcmRCcmVhayIsITApfWZ1bmN0aW9uIFB0KCl7Y29uc3QgZG49dGhpcy5yZXN1bWUoKSxObj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO05uLnZhbHVlPWRufWZ1bmN0aW9uIHB0KCl7Y29uc3QgZG49dGhpcy5yZXN1bWUoKSxObj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO05uLnZhbHVlPWRufWZ1bmN0aW9uIEZ0KCl7Y29uc3QgZG49dGhpcy5yZXN1bWUoKSxObj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO05uLnZhbHVlPWRufWZ1bmN0aW9uIFgoKXtjb25zdCBkbj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO2lmKGIoImluUmVmZXJlbmNlIikpe2NvbnN0IE5uPWIoInJlZmVyZW5jZVR5cGUiKXx8InNob3J0Y3V0Ijtkbi50eXBlKz0iUmVmZXJlbmNlIixkbi5yZWZlcmVuY2VUeXBlPU5uLGRlbGV0ZSBkbi51cmwsZGVsZXRlIGRuLnRpdGxlfWVsc2UgZGVsZXRlIGRuLmlkZW50aWZpZXIsZGVsZXRlIGRuLmxhYmVsO20oInJlZmVyZW5jZVR5cGUiKX1mdW5jdGlvbiBSdCgpe2NvbnN0IGRuPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07aWYoYigiaW5SZWZlcmVuY2UiKSl7Y29uc3QgTm49YigicmVmZXJlbmNlVHlwZSIpfHwic2hvcnRjdXQiO2RuLnR5cGUrPSJSZWZlcmVuY2UiLGRuLnJlZmVyZW5jZVR5cGU9Tm4sZGVsZXRlIGRuLnVybCxkZWxldGUgZG4udGl0bGV9ZWxzZSBkZWxldGUgZG4uaWRlbnRpZmllcixkZWxldGUgZG4ubGFiZWw7bSgicmVmZXJlbmNlVHlwZSIpfWZ1bmN0aW9uIEJ0KGRuKXtjb25zdCBObj10aGlzLnNsaWNlU2VyaWFsaXplKGRuKSxXcj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTJdO1dyLmxhYmVsPVNqZShObiksV3IuaWRlbnRpZmllcj1yTChObikudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiB2dCgpe2NvbnN0IGRuPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV0sTm49dGhpcy5yZXN1bWUoKSxXcj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO2lmKG0oImluUmVmZXJlbmNlIiwhMCksV3IudHlwZT09PSJsaW5rIil7Y29uc3QgTGk9ZG4uY2hpbGRyZW47V3IuY2hpbGRyZW49TGl9ZWxzZSBXci5hbHQ9Tm59ZnVuY3Rpb24gT3QoKXtjb25zdCBkbj10aGlzLnJlc3VtZSgpLE5uPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07Tm4udXJsPWRufWZ1bmN0aW9uIFZ0KCl7Y29uc3QgZG49dGhpcy5yZXN1bWUoKSxObj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO05uLnRpdGxlPWRufWZ1bmN0aW9uIHFlKCl7bSgiaW5SZWZlcmVuY2UiKX1mdW5jdGlvbiBfbigpe20oInJlZmVyZW5jZVR5cGUiLCJjb2xsYXBzZWQiKX1mdW5jdGlvbiBUZShkbil7Y29uc3QgTm49dGhpcy5yZXN1bWUoKSxXcj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO1dyLmxhYmVsPU5uLFdyLmlkZW50aWZpZXI9ckwodGhpcy5zbGljZVNlcmlhbGl6ZShkbikpLnRvTG93ZXJDYXNlKCksbSgicmVmZXJlbmNlVHlwZSIsImZ1bGwiKX1mdW5jdGlvbiBXbihkbil7bSgiY2hhcmFjdGVyUmVmZXJlbmNlVHlwZSIsZG4udHlwZSl9ZnVuY3Rpb24gQWUoZG4pe2NvbnN0IE5uPXRoaXMuc2xpY2VTZXJpYWxpemUoZG4pLFdyPWIoImNoYXJhY3RlclJlZmVyZW5jZVR5cGUiKTtsZXQgTGk7V3I/KExpPUpGdChObixXcj09PSJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJOdW1lcmljIj8xMDoxNiksbSgiY2hhcmFjdGVyUmVmZXJlbmNlVHlwZSIpKTpMaT14MHQoTm4pO2NvbnN0IGlzPXRoaXMuc3RhY2sucG9wKCk7aXMudmFsdWUrPUxpLGlzLnBvc2l0aW9uLmVuZD1jayhkbi5lbmQpfWZ1bmN0aW9uIG5lKGRuKXtkdC5jYWxsKHRoaXMsZG4pO2NvbnN0IE5uPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07Tm4udXJsPXRoaXMuc2xpY2VTZXJpYWxpemUoZG4pfWZ1bmN0aW9uIGtlKGRuKXtkdC5jYWxsKHRoaXMsZG4pO2NvbnN0IE5uPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07Tm4udXJsPSJtYWlsdG86Iit0aGlzLnNsaWNlU2VyaWFsaXplKGRuKX1mdW5jdGlvbiBWZSgpe3JldHVybnt0eXBlOiJibG9ja3F1b3RlIixjaGlsZHJlbjpbXX19ZnVuY3Rpb24gRWUoKXtyZXR1cm57dHlwZToiY29kZSIsbGFuZzpudWxsLG1ldGE6bnVsbCx2YWx1ZToiIn19ZnVuY3Rpb24gSGUoKXtyZXR1cm57dHlwZToiaW5saW5lQ29kZSIsdmFsdWU6IiJ9fWZ1bmN0aW9uIENlKCl7cmV0dXJue3R5cGU6ImRlZmluaXRpb24iLGlkZW50aWZpZXI6IiIsbGFiZWw6bnVsbCx0aXRsZTpudWxsLHVybDoiIn19ZnVuY3Rpb24gJGUoKXtyZXR1cm57dHlwZToiZW1waGFzaXMiLGNoaWxkcmVuOltdfX1mdW5jdGlvbiB5ZSgpe3JldHVybnt0eXBlOiJoZWFkaW5nIixkZXB0aDp2b2lkIDAsY2hpbGRyZW46W119fWZ1bmN0aW9uIGZuKCl7cmV0dXJue3R5cGU6ImJyZWFrIn19ZnVuY3Rpb24gWXQoKXtyZXR1cm57dHlwZToiaHRtbCIsdmFsdWU6IiJ9fWZ1bmN0aW9uIE1pKCl7cmV0dXJue3R5cGU6ImltYWdlIix0aXRsZTpudWxsLHVybDoiIixhbHQ6bnVsbH19ZnVuY3Rpb24gcXQoKXtyZXR1cm57dHlwZToibGluayIsdGl0bGU6bnVsbCx1cmw6IiIsY2hpbGRyZW46W119fWZ1bmN0aW9uIHppKGRuKXtyZXR1cm57dHlwZToibGlzdCIsb3JkZXJlZDpkbi50eXBlPT09Imxpc3RPcmRlcmVkIixzdGFydDpudWxsLHNwcmVhZDpkbi5fc3ByZWFkLGNoaWxkcmVuOltdfX1mdW5jdGlvbiBTZShkbil7cmV0dXJue3R5cGU6Imxpc3RJdGVtIixzcHJlYWQ6ZG4uX3NwcmVhZCxjaGVja2VkOm51bGwsY2hpbGRyZW46W119fWZ1bmN0aW9uIGtpKCl7cmV0dXJue3R5cGU6InBhcmFncmFwaCIsY2hpbGRyZW46W119fWZ1bmN0aW9uIFJpKCl7cmV0dXJue3R5cGU6InN0cm9uZyIsY2hpbGRyZW46W119fWZ1bmN0aW9uIHBpKCl7cmV0dXJue3R5cGU6InRleHQiLHZhbHVlOiIifX1mdW5jdGlvbiBiaSgpe3JldHVybnt0eXBlOiJ0aGVtYXRpY0JyZWFrIn19fWZ1bmN0aW9uIGNrKGkpe3JldHVybntsaW5lOmkubGluZSxjb2x1bW46aS5jb2x1bW4sb2Zmc2V0Omkub2Zmc2V0fX1mdW5jdGlvbiBpQnQoaSxhKXtsZXQgZj0tMTtmb3IoOysrZjxhLmxlbmd0aDspe2NvbnN0IHA9YVtmXTtBcnJheS5pc0FycmF5KHApP2lCdChpLHApOk1qZShpLHApfX1mdW5jdGlvbiBNamUoaSxhKXtsZXQgZjtmb3IoZiBpbiBhKWlmKG5CdC5jYWxsKGEsZikpe2lmKGY9PT0iY2FuQ29udGFpbkVvbHMiKXtjb25zdCBwPWFbZl07cCYmaVtmXS5wdXNoKC4uLnApfWVsc2UgaWYoZj09PSJ0cmFuc2Zvcm1zIil7Y29uc3QgcD1hW2ZdO3AmJmlbZl0ucHVzaCguLi5wKX1lbHNlIGlmKGY9PT0iZW50ZXIifHxmPT09ImV4aXQiKXtjb25zdCBwPWFbZl07cCYmT2JqZWN0LmFzc2lnbihpW2ZdLHApfX19ZnVuY3Rpb24gc0J0KGksYSl7dGhyb3cgaT9uZXcgRXJyb3IoIkNhbm5vdCBjbG9zZSBgIitpLnR5cGUrImAgKCIrYksoe3N0YXJ0Omkuc3RhcnQsZW5kOmkuZW5kfSkrIik6IGEgZGlmZmVyZW50IHRva2VuIChgIithLnR5cGUrImAsICIrYksoe3N0YXJ0OmEuc3RhcnQsZW5kOmEuZW5kfSkrIikgaXMgb3BlbiIpOm5ldyBFcnJvcigiQ2Fubm90IGNsb3NlIGRvY3VtZW50LCBhIHRva2VuIChgIithLnR5cGUrImAsICIrYksoe3N0YXJ0OmEuc3RhcnQsZW5kOmEuZW5kfSkrIikgaXMgc3RpbGwgb3BlbiIpfWZ1bmN0aW9uIERqZShpKXtjb25zdCBhPWkucmVwbGFjZSgvXG57Mix9L2csYApgKTtyZXR1cm4gd0EoYSl9ZnVuY3Rpb24gSWplKGkpe2NvbnN0IGE9RGplKGkpLHtjaGlsZHJlbjpmfT1yQnQoYSkscD1bW11dO2xldCB2PTA7ZnVuY3Rpb24gbShiLEU9Im5vcm1hbCIpe2IudHlwZT09PSJ0ZXh0Ij9iLnZhbHVlLnNwbGl0KGAKYCkuZm9yRWFjaCgoQSxQKT0+e1AhPT0wJiYodisrLHAucHVzaChbXSkpLEEuc3BsaXQoIiAiKS5mb3JFYWNoKEY9PntGJiZwW3ZdLnB1c2goe2NvbnRlbnQ6Rix0eXBlOkV9KX0pfSk6KGIudHlwZT09PSJzdHJvbmcifHxiLnR5cGU9PT0iZW1waGFzaXMiKSYmYi5jaGlsZHJlbi5mb3JFYWNoKEM9PnttKEMsYi50eXBlKX0pfXJldHVybiBmLmZvckVhY2goYj0+e2IudHlwZT09PSJwYXJhZ3JhcGgiJiZiLmNoaWxkcmVuLmZvckVhY2goRT0+e20oRSl9KX0pLHB9ZnVuY3Rpb24gT2plKGkpe2NvbnN0e2NoaWxkcmVuOmF9PXJCdChpKTtmdW5jdGlvbiBmKHApe3JldHVybiBwLnR5cGU9PT0idGV4dCI/cC52YWx1ZS5yZXBsYWNlKC9cbi9nLCI8YnIvPiIpOnAudHlwZT09PSJzdHJvbmciP2A8c3Ryb25nPiR7cC5jaGlsZHJlbi5tYXAoZikuam9pbigiIil9PC9zdHJvbmc+YDpwLnR5cGU9PT0iZW1waGFzaXMiP2A8ZW0+JHtwLmNoaWxkcmVuLm1hcChmKS5qb2luKCIiKX08L2VtPmA6cC50eXBlPT09InBhcmFncmFwaCI/YDxwPiR7cC5jaGlsZHJlbi5tYXAoZikuam9pbigiIil9PC9wPmA6YFVuc3VwcG9ydGVkIG1hcmtkb3duOiAke3AudHlwZX1gfXJldHVybiBhLm1hcChmKS5qb2luKCIiKX1mdW5jdGlvbiBOamUoaSl7cmV0dXJuIEludGwuU2VnbWVudGVyP1suLi5uZXcgSW50bC5TZWdtZW50ZXIoKS5zZWdtZW50KGkpXS5tYXAoYT0+YS5zZWdtZW50KTpbLi4uaV19ZnVuY3Rpb24gUGplKGksYSl7Y29uc3QgZj1OamUoYS5jb250ZW50KTtyZXR1cm4gYUJ0KGksW10sZixhLnR5cGUpfWZ1bmN0aW9uIGFCdChpLGEsZixwKXtpZihmLmxlbmd0aD09PTApcmV0dXJuW3tjb250ZW50OmEuam9pbigiIiksdHlwZTpwfSx7Y29udGVudDoiIix0eXBlOnB9XTtjb25zdFt2LC4uLm1dPWYsYj1bLi4uYSx2XTtyZXR1cm4gaShbe2NvbnRlbnQ6Yi5qb2luKCIiKSx0eXBlOnB9XSk/YUJ0KGksYixtLHApOihhLmxlbmd0aD09PTAmJnYmJihhLnB1c2godiksZi5zaGlmdCgpKSxbe2NvbnRlbnQ6YS5qb2luKCIiKSx0eXBlOnB9LHtjb250ZW50OmYuam9pbigiIiksdHlwZTpwfV0pfWZ1bmN0aW9uIEZqZShpLGEpe2lmKGkuc29tZSgoe2NvbnRlbnQ6Zn0pPT5mLmluY2x1ZGVzKGAKYCkpKXRocm93IG5ldyBFcnJvcigic3BsaXRMaW5lVG9GaXRXaWR0aCBkb2VzIG5vdCBzdXBwb3J0IG5ld2xpbmVzIGluIHRoZSBsaW5lIik7cmV0dXJuIEMwdChpLGEpfWZ1bmN0aW9uIEMwdChpLGEsZj1bXSxwPVtdKXtpZihpLmxlbmd0aD09PTApcmV0dXJuIHAubGVuZ3RoPjAmJmYucHVzaChwKSxmLmxlbmd0aD4wP2Y6W107bGV0IHY9IiI7aVswXS5jb250ZW50PT09IiAiJiYodj0iICIsaS5zaGlmdCgpKTtjb25zdCBtPWkuc2hpZnQoKT8/e2NvbnRlbnQ6IiAiLHR5cGU6Im5vcm1hbCJ9LGI9Wy4uLnBdO2lmKHYhPT0iIiYmYi5wdXNoKHtjb250ZW50OnYsdHlwZToibm9ybWFsIn0pLGIucHVzaChtKSxhKGIpKXJldHVybiBDMHQoaSxhLGYsYik7aWYocC5sZW5ndGg+MClmLnB1c2gocCksaS51bnNoaWZ0KG0pO2Vsc2UgaWYobS5jb250ZW50KXtjb25zdFtFLENdPVBqZShhLG0pO2YucHVzaChbRV0pLEMuY29udGVudCYmaS51bnNoaWZ0KEMpfXJldHVybiBDMHQoaSxhLGYpfWZ1bmN0aW9uIEJqZShpLGEpe2EmJmkuYXR0cigic3R5bGUiLGEpfWZ1bmN0aW9uIFJqZShpLGEsZixwLHY9ITEpe2NvbnN0IG09aS5hcHBlbmQoImZvcmVpZ25PYmplY3QiKSxiPW0uYXBwZW5kKCJ4aHRtbDpkaXYiKSxFPWEubGFiZWwsQz1hLmlzTm9kZT8ibm9kZUxhYmVsIjoiZWRnZUxhYmVsIjtiLmh0bWwoYAogICAgPHNwYW4gY2xhc3M9IiR7Q30gJHtwfSIgYCsoYS5sYWJlbFN0eWxlPydzdHlsZT0iJythLmxhYmVsU3R5bGUrJyInOiIiKSsiPiIrRSsiPC9zcGFuPiIpLEJqZShiLGEubGFiZWxTdHlsZSksYi5zdHlsZSgiZGlzcGxheSIsInRhYmxlLWNlbGwiKSxiLnN0eWxlKCJ3aGl0ZS1zcGFjZSIsIm5vd3JhcCIpLGIuc3R5bGUoIm1heC13aWR0aCIsZisicHgiKSxiLmF0dHIoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpLHYmJmIuYXR0cigiY2xhc3MiLCJsYWJlbEJrZyIpO2xldCBBPWIubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBBLndpZHRoPT09ZiYmKGIuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZSIpLGIuc3R5bGUoIndoaXRlLXNwYWNlIiwiYnJlYWstc3BhY2VzIiksYi5zdHlsZSgid2lkdGgiLGYrInB4IiksQT1iLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksbS5zdHlsZSgid2lkdGgiLEEud2lkdGgpLG0uc3R5bGUoImhlaWdodCIsQS5oZWlnaHQpLG0ubm9kZSgpfWZ1bmN0aW9uIG9CdChpLGEsZil7cmV0dXJuIGkuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoImNsYXNzIiwidGV4dC1vdXRlci10c3BhbiIpLmF0dHIoIngiLDApLmF0dHIoInkiLGEqZi0uMSsiZW0iKS5hdHRyKCJkeSIsZisiZW0iKX1mdW5jdGlvbiBqamUoaSxhLGYpe2NvbnN0IHA9aS5hcHBlbmQoInRleHQiKSx2PW9CdChwLDEsYSk7Y0J0KHYsZik7Y29uc3QgbT12Lm5vZGUoKS5nZXRDb21wdXRlZFRleHRMZW5ndGgoKTtyZXR1cm4gcC5yZW1vdmUoKSxtfWZ1bmN0aW9uICRqZShpLGEsZixwPSExKXtjb25zdCBtPWEuYXBwZW5kKCJnIiksYj1tLmluc2VydCgicmVjdCIpLmF0dHIoImNsYXNzIiwiYmFja2dyb3VuZCIpLEU9bS5hcHBlbmQoInRleHQiKS5hdHRyKCJ5IiwiLTEwLjEiKTtsZXQgQz0wO2Zvcihjb25zdCBBIG9mIGYpe2NvbnN0IFA9aj0+amplKG0sMS4xLGopPD1pLEY9UChBKT9bQV06RmplKEEsUCk7Zm9yKGNvbnN0IGogb2YgRil7Y29uc3QgUj1vQnQoRSxDLDEuMSk7Y0J0KFIsaiksQysrfX1pZihwKXtjb25zdCBBPUUubm9kZSgpLmdldEJCb3goKSxQPTI7cmV0dXJuIGIuYXR0cigieCIsLVApLmF0dHIoInkiLC1QKS5hdHRyKCJ3aWR0aCIsQS53aWR0aCsyKlApLmF0dHIoImhlaWdodCIsQS5oZWlnaHQrMipQKSxtLm5vZGUoKX1lbHNlIHJldHVybiBFLm5vZGUoKX1mdW5jdGlvbiBjQnQoaSxhKXtpLnRleHQoIiIpLGEuZm9yRWFjaCgoZixwKT0+e2NvbnN0IHY9aS5hcHBlbmQoInRzcGFuIikuYXR0cigiZm9udC1zdHlsZSIsZi50eXBlPT09ImVtcGhhc2lzIj8iaXRhbGljIjoibm9ybWFsIikuYXR0cigiY2xhc3MiLCJ0ZXh0LWlubmVyLXRzcGFuIikuYXR0cigiZm9udC13ZWlnaHQiLGYudHlwZT09PSJzdHJvbmciPyJib2xkIjoibm9ybWFsIik7cD09PTA/di50ZXh0KGYuY29udGVudCk6di50ZXh0KCIgIitmLmNvbnRlbnQpfSl9Y29uc3Qgdks9KGksYT0iIix7c3R5bGU6Zj0iIixpc1RpdGxlOnA9ITEsY2xhc3Nlczp2PSIiLHVzZUh0bWxMYWJlbHM6bT0hMCxpc05vZGU6Yj0hMCx3aWR0aDpFPTIwMCxhZGRTdmdCYWNrZ3JvdW5kOkM9ITF9PXt9KT0+e2lmKFd0LmluZm8oImNyZWF0ZVRleHQiLGEsZixwLHYsbSxiLEMpLG0pe2NvbnN0IEE9T2plKGEpLFA9e2lzTm9kZTpiLGxhYmVsOm5QKEEpLnJlcGxhY2UoL2ZhW2JscnNdPzpmYS1bXHctXSsvZyxqPT5gPGkgY2xhc3M9JyR7ai5yZXBsYWNlKCI6IiwiICIpfSc+PC9pPmApLGxhYmVsU3R5bGU6Zi5yZXBsYWNlKCJmaWxsOiIsImNvbG9yOiIpfTtyZXR1cm4gUmplKGksUCxFLHYsQyl9ZWxzZXtjb25zdCBBPUlqZShhKTtyZXR1cm4gJGplKEUsaSxBLEMpfX0sT2Q9YXN5bmMoaSxhLGYscCk9PntsZXQgdjtjb25zdCBtPWEudXNlSHRtbExhYmVsc3x8dTEoRGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscyk7Zj92PWY6dj0ibm9kZSBkZWZhdWx0Ijtjb25zdCBiPWkuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLHYpLmF0dHIoImlkIixhLmRvbUlkfHxhLmlkKSxFPWIuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLmF0dHIoInN0eWxlIixhLmxhYmVsU3R5bGUpO2xldCBDO2EubGFiZWxUZXh0PT09dm9pZCAwP0M9IiI6Qz10eXBlb2YgYS5sYWJlbFRleHQ9PSJzdHJpbmciP2EubGFiZWxUZXh0OmEubGFiZWxUZXh0WzBdO2NvbnN0IEE9RS5ub2RlKCk7bGV0IFA7YS5sYWJlbFR5cGU9PT0ibWFya2Rvd24iP1A9dksoRSx2MChuUChDKSxEZSgpKSx7dXNlSHRtbExhYmVsczptLHdpZHRoOmEud2lkdGh8fERlKCkuZmxvd2NoYXJ0LndyYXBwaW5nV2lkdGgsY2xhc3NlczoibWFya2Rvd24tbm9kZS1sYWJlbCJ9KTpQPUEuYXBwZW5kQ2hpbGQoZHAodjAoblAoQyksRGUoKSksYS5sYWJlbFN0eWxlLCExLHApKTtsZXQgRj1QLmdldEJCb3goKTtjb25zdCBqPWEucGFkZGluZy8yO2lmKHUxKERlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtjb25zdCBSPVAuY2hpbGRyZW5bMF0sSD14cihQKSxZPVIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImltZyIpO2lmKFkpe2NvbnN0IHJ0PUMucmVwbGFjZSgvPGltZ1tePl0qPi9nLCIiKS50cmltKCk9PT0iIjthd2FpdCBQcm9taXNlLmFsbChbLi4uWV0ubWFwKEo9Pm5ldyBQcm9taXNlKGl0PT57ZnVuY3Rpb24gZnQoKXtpZihKLnN0eWxlLmRpc3BsYXk9ImZsZXgiLEouc3R5bGUuZmxleERpcmVjdGlvbj0iY29sdW1uIixydCl7Y29uc3QgVHQ9RGUoKS5mb250U2l6ZT9EZSgpLmZvbnRTaXplOndpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmZvbnRTaXplLGt0PTU7Si5zdHlsZS53aWR0aD1wYXJzZUludChUdCwxMCkqa3QrInB4In1lbHNlIEouc3R5bGUud2lkdGg9IjEwMCUiO2l0KEopfXNldFRpbWVvdXQoKCk9PntKLmNvbXBsZXRlJiZmdCgpfSksSi5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZnQpLEouYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsZnQpfSkpKX1GPVIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksSC5hdHRyKCJ3aWR0aCIsRi53aWR0aCksSC5hdHRyKCJoZWlnaHQiLEYuaGVpZ2h0KX1yZXR1cm4gbT9FLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1GLndpZHRoLzIrIiwgIistRi5oZWlnaHQvMisiKSIpOkUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsICIrLUYuaGVpZ2h0LzIrIikiKSxhLmNlbnRlckxhYmVsJiZFLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1GLndpZHRoLzIrIiwgIistRi5oZWlnaHQvMisiKSIpLEUuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikse3NoYXBlU3ZnOmIsYmJveDpGLGhhbGZQYWRkaW5nOmosbGFiZWw6RX19LGVmPShpLGEpPT57Y29uc3QgZj1hLm5vZGUoKS5nZXRCQm94KCk7aS53aWR0aD1mLndpZHRoLGkuaGVpZ2h0PWYuaGVpZ2h0fTtmdW5jdGlvbiBMNShpLGEsZixwKXtyZXR1cm4gaS5pbnNlcnQoInBvbHlnb24iLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJwb2ludHMiLHAubWFwKGZ1bmN0aW9uKHYpe3JldHVybiB2LngrIiwiK3YueX0pLmpvaW4oIiAiKSkuYXR0cigiY2xhc3MiLCJsYWJlbC1jb250YWluZXIiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistYS8yKyIsIitmLzIrIikiKX1sZXQgWG89e30sY209e30sdUJ0PXt9O2NvbnN0IHpqZT0oKT0+e2NtPXt9LHVCdD17fSxYbz17fX0sd0s9KGksYSk9PihXdC50cmFjZSgiSW4gaXNEZWNlbmRhbnQiLGEsIiAiLGksIiA9ICIsY21bYV0uaW5jbHVkZXMoaSkpLCEhY21bYV0uaW5jbHVkZXMoaSkpLHFqZT0oaSxhKT0+KFd0LmluZm8oIkRlY2VuZGFudHMgb2YgIixhLCIgaXMgIixjbVthXSksV3QuaW5mbygiRWRnZSBpcyAiLGkpLGkudj09PWF8fGkudz09PWE/ITE6Y21bYV0/Y21bYV0uaW5jbHVkZXMoaS52KXx8d0soaS52LGEpfHx3SyhpLncsYSl8fGNtW2FdLmluY2x1ZGVzKGkudyk6KFd0LmRlYnVnKCJUaWx0LCAiLGEsIixub3QgaW4gZGVjZW5kYW50cyIpLCExKSksbEJ0PShpLGEsZixwKT0+e1d0Lndhcm4oIkNvcHlpbmcgY2hpbGRyZW4gb2YgIixpLCJyb290IixwLCJkYXRhIixhLm5vZGUoaSkscCk7Y29uc3Qgdj1hLmNoaWxkcmVuKGkpfHxbXTtpIT09cCYmdi5wdXNoKGkpLFd0Lndhcm4oIkNvcHlpbmcgKG5vZGVzKSBjbHVzdGVySWQiLGksIm5vZGVzIix2KSx2LmZvckVhY2gobT0+e2lmKGEuY2hpbGRyZW4obSkubGVuZ3RoPjApbEJ0KG0sYSxmLHApO2Vsc2V7Y29uc3QgYj1hLm5vZGUobSk7V3QuaW5mbygiY3AgIixtLCIgdG8gIixwLCIgd2l0aCBwYXJlbnQgIixpKSxmLnNldE5vZGUobSxiKSxwIT09YS5wYXJlbnQobSkmJihXdC53YXJuKCJTZXR0aW5nIHBhcmVudCIsbSxhLnBhcmVudChtKSksZi5zZXRQYXJlbnQobSxhLnBhcmVudChtKSkpLGkhPT1wJiZtIT09aT8oV3QuZGVidWcoIlNldHRpbmcgcGFyZW50IixtLGkpLGYuc2V0UGFyZW50KG0saSkpOihXdC5pbmZvKCJJbiBjb3B5ICIsaSwicm9vdCIscCwiZGF0YSIsYS5ub2RlKGkpLHApLFd0LmRlYnVnKCJOb3QgU2V0dGluZyBwYXJlbnQgZm9yIG5vZGU9IixtLCJjbHVzdGVyIT09cm9vdElkIixpIT09cCwibm9kZSE9PWNsdXN0ZXJJZCIsbSE9PWkpKTtjb25zdCBFPWEuZWRnZXMobSk7V3QuZGVidWcoIkNvcHlpbmcgRWRnZXMiLEUpLEUuZm9yRWFjaChDPT57V3QuaW5mbygiRWRnZSIsQyk7Y29uc3QgQT1hLmVkZ2UoQy52LEMudyxDLm5hbWUpO1d0LmluZm8oIkVkZ2UgZGF0YSIsQSxwKTt0cnl7cWplKEMscCk/KFd0LmluZm8oIkNvcHlpbmcgYXMgIixDLnYsQy53LEEsQy5uYW1lKSxmLnNldEVkZ2UoQy52LEMudyxBLEMubmFtZSksV3QuaW5mbygibmV3R3JhcGggZWRnZXMgIixmLmVkZ2VzKCksZi5lZGdlKGYuZWRnZXMoKVswXSkpKTpXdC5pbmZvKCJTa2lwcGluZyBjb3B5IG9mIGVkZ2UgIixDLnYsIi0tPiIsQy53LCIgcm9vdElkOiAiLHAsIiBjbHVzdGVySWQ6IixpKX1jYXRjaChQKXtXdC5lcnJvcihQKX19KX1XdC5kZWJ1ZygiUmVtb3Zpbmcgbm9kZSIsbSksYS5yZW1vdmVOb2RlKG0pfSl9LGhCdD0oaSxhKT0+e2NvbnN0IGY9YS5jaGlsZHJlbihpKTtsZXQgcD1bLi4uZl07Zm9yKGNvbnN0IHYgb2YgZil1QnRbdl09aSxwPVsuLi5wLC4uLmhCdCh2LGEpXTtyZXR1cm4gcH0sd1A9KGksYSk9PntXdC50cmFjZSgiU2VhcmNoaW5nIixpKTtjb25zdCBmPWEuY2hpbGRyZW4oaSk7aWYoV3QudHJhY2UoIlNlYXJjaGluZyBjaGlsZHJlbiBvZiBpZCAiLGksZiksZi5sZW5ndGg8MSlyZXR1cm4gV3QudHJhY2UoIlRoaXMgaXMgYSB2YWxpZCBub2RlIixpKSxpO2Zvcihjb25zdCBwIG9mIGYpe2NvbnN0IHY9d1AocCxhKTtpZih2KXJldHVybiBXdC50cmFjZSgiRm91bmQgcmVwbGFjZW1lbnQgZm9yIixpLCIgPT4gIix2KSx2fX0sbUs9aT0+IVhvW2ldfHwhWG9baV0uZXh0ZXJuYWxDb25uZWN0aW9ucz9pOlhvW2ldP1hvW2ldLmlkOmksSGplPShpLGEpPT57aWYoIWl8fGE+MTApe1d0LmRlYnVnKCJPcHRpbmcgb3V0LCBubyBncmFwaCAiKTtyZXR1cm59ZWxzZSBXdC5kZWJ1ZygiT3B0aW5nIGluLCBncmFwaCAiKTtpLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihmKXtpLmNoaWxkcmVuKGYpLmxlbmd0aD4wJiYoV3Qud2FybigiQ2x1c3RlciBpZGVudGlmaWVkIixmLCIgUmVwbGFjZW1lbnQgaWQgaW4gZWRnZXM6ICIsd1AoZixpKSksY21bZl09aEJ0KGYsaSksWG9bZl09e2lkOndQKGYsaSksY2x1c3RlckRhdGE6aS5ub2RlKGYpfSl9KSxpLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihmKXtjb25zdCBwPWkuY2hpbGRyZW4oZiksdj1pLmVkZ2VzKCk7cC5sZW5ndGg+MD8oV3QuZGVidWcoIkNsdXN0ZXIgaWRlbnRpZmllZCIsZixjbSksdi5mb3JFYWNoKG09PntpZihtLnYhPT1mJiZtLnchPT1mKXtjb25zdCBiPXdLKG0udixmKSxFPXdLKG0udyxmKTtiXkUmJihXdC53YXJuKCJFZGdlOiAiLG0sIiBsZWF2ZXMgY2x1c3RlciAiLGYpLFd0Lndhcm4oIkRlY2VuZGFudHMgb2YgWFhYICIsZiwiOiAiLGNtW2ZdKSxYb1tmXS5leHRlcm5hbENvbm5lY3Rpb25zPSEwKX19KSk6V3QuZGVidWcoIk5vdCBhIGNsdXN0ZXIgIixmLGNtKX0pLGkuZWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe2NvbnN0IHA9aS5lZGdlKGYpO1d0Lndhcm4oIkVkZ2UgIitmLnYrIiAtPiAiK2YudysiOiAiK0pTT04uc3RyaW5naWZ5KGYpKSxXdC53YXJuKCJFZGdlICIrZi52KyIgLT4gIitmLncrIjogIitKU09OLnN0cmluZ2lmeShpLmVkZ2UoZikpKTtsZXQgdj1mLnYsbT1mLnc7aWYoV3Qud2FybigiRml4IFhYWCIsWG8sImlkczoiLGYudixmLncsIlRyYW5zbGF0aW5nOiAiLFhvW2Yudl0sIiAtLS0gIixYb1tmLnddKSxYb1tmLnZdJiZYb1tmLnddJiZYb1tmLnZdPT09WG9bZi53XSl7V3Qud2FybigiRml4aW5nIGFuZCB0cml4aW5nIGxpbmsgdG8gc2VsZiAtIHJlbW92aW5nIFhYWCIsZi52LGYudyxmLm5hbWUpLFd0Lndhcm4oIkZpeGluZyBhbmQgdHJpeGluZyAtIHJlbW92aW5nIFhYWCIsZi52LGYudyxmLm5hbWUpLHY9bUsoZi52KSxtPW1LKGYudyksaS5yZW1vdmVFZGdlKGYudixmLncsZi5uYW1lKTtjb25zdCBiPWYudysiLS0tIitmLnY7aS5zZXROb2RlKGIse2RvbUlkOmIsaWQ6YixsYWJlbFN0eWxlOiIiLGxhYmVsVGV4dDpwLmxhYmVsLHBhZGRpbmc6MCxzaGFwZToibGFiZWxSZWN0IixzdHlsZToiIn0pO2NvbnN0IEU9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShwKSksQz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHApKTtFLmxhYmVsPSIiLEUuYXJyb3dUeXBlRW5kPSJub25lIixDLmxhYmVsPSIiLEUuZnJvbUNsdXN0ZXI9Zi52LEMudG9DbHVzdGVyPWYudixpLnNldEVkZ2UodixiLEUsZi5uYW1lKyItY3ljbGljLXNwZWNpYWwiKSxpLnNldEVkZ2UoYixtLEMsZi5uYW1lKyItY3ljbGljLXNwZWNpYWwiKX1lbHNlKFhvW2Yudl18fFhvW2Yud10pJiYoV3Qud2FybigiRml4aW5nIGFuZCB0cml4aW5nIC0gcmVtb3ZpbmcgWFhYIixmLnYsZi53LGYubmFtZSksdj1tSyhmLnYpLG09bUsoZi53KSxpLnJlbW92ZUVkZ2UoZi52LGYudyxmLm5hbWUpLHYhPT1mLnYmJihwLmZyb21DbHVzdGVyPWYudiksbSE9PWYudyYmKHAudG9DbHVzdGVyPWYudyksV3Qud2FybigiRml4IFJlcGxhY2luZyB3aXRoIFhYWCIsdixtLGYubmFtZSksaS5zZXRFZGdlKHYsbSxwLGYubmFtZSkpfSksV3Qud2FybigiQWRqdXN0ZWQgR3JhcGgiLEE1KGkpKSxmQnQoaSwwKSxXdC50cmFjZShYbyl9LGZCdD0oaSxhKT0+e2lmKFd0Lndhcm4oImV4dHJhY3RvciAtICIsYSxBNShpKSxpLmNoaWxkcmVuKCJEIikpLGE+MTApe1d0LmVycm9yKCJCYWlsaW5nIG91dCIpO3JldHVybn1sZXQgZj1pLm5vZGVzKCkscD0hMTtmb3IoY29uc3QgdiBvZiBmKXtjb25zdCBtPWkuY2hpbGRyZW4odik7cD1wfHxtLmxlbmd0aD4wfWlmKCFwKXtXdC5kZWJ1ZygiRG9uZSwgbm8gbm9kZSBoYXMgY2hpbGRyZW4iLGkubm9kZXMoKSk7cmV0dXJufVd0LmRlYnVnKCJOb2RlcyA9ICIsZixhKTtmb3IoY29uc3QgdiBvZiBmKWlmKFd0LmRlYnVnKCJFeHRyYWN0aW5nIG5vZGUiLHYsWG8sWG9bdl0mJiFYb1t2XS5leHRlcm5hbENvbm5lY3Rpb25zLCFpLnBhcmVudCh2KSxpLm5vZGUodiksaS5jaGlsZHJlbigiRCIpLCIgRGVwdGggIixhKSwhWG9bdl0pV3QuZGVidWcoIk5vdCBhIGNsdXN0ZXIiLHYsYSk7ZWxzZSBpZighWG9bdl0uZXh0ZXJuYWxDb25uZWN0aW9ucyYmaS5jaGlsZHJlbih2KSYmaS5jaGlsZHJlbih2KS5sZW5ndGg+MCl7V3Qud2FybigiQ2x1c3RlciB3aXRob3V0IGV4dGVybmFsIGNvbm5lY3Rpb25zLCB3aXRob3V0IGEgcGFyZW50IGFuZCB3aXRoIGNoaWxkcmVuIix2LGEpO2xldCBiPWkuZ3JhcGgoKS5yYW5rZGlyPT09IlRCIj8iTFIiOiJUQiI7WG9bdl0mJlhvW3ZdLmNsdXN0ZXJEYXRhJiZYb1t2XS5jbHVzdGVyRGF0YS5kaXImJihiPVhvW3ZdLmNsdXN0ZXJEYXRhLmRpcixXdC53YXJuKCJGaXhpbmcgZGlyIixYb1t2XS5jbHVzdGVyRGF0YS5kaXIsYikpO2NvbnN0IEU9bmV3IGwxKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6Yixub2Rlc2VwOjUwLHJhbmtzZXA6NTAsbWFyZ2lueDo4LG1hcmdpbnk6OH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKXtyZXR1cm57fX0pO1d0Lndhcm4oIk9sZCBncmFwaCBiZWZvcmUgY29weSIsQTUoaSkpLGxCdCh2LGksRSx2KSxpLnNldE5vZGUodix7Y2x1c3Rlck5vZGU6ITAsaWQ6dixjbHVzdGVyRGF0YTpYb1t2XS5jbHVzdGVyRGF0YSxsYWJlbFRleHQ6WG9bdl0ubGFiZWxUZXh0LGdyYXBoOkV9KSxXdC53YXJuKCJOZXcgZ3JhcGggYWZ0ZXIgY29weSBub2RlOiAoIix2LCIpIixBNShFKSksV3QuZGVidWcoIk9sZCBncmFwaCBhZnRlciBjb3B5IixBNShpKSl9ZWxzZSBXdC53YXJuKCJDbHVzdGVyICoqICIsdiwiICoqbm90IG1lZXRpbmcgdGhlIGNyaXRlcmlhICFleHRlcm5hbENvbm5lY3Rpb25zOiIsIVhvW3ZdLmV4dGVybmFsQ29ubmVjdGlvbnMsIiBubyBwYXJlbnQ6ICIsIWkucGFyZW50KHYpLCIgY2hpbGRyZW4gIixpLmNoaWxkcmVuKHYpJiZpLmNoaWxkcmVuKHYpLmxlbmd0aD4wLGkuY2hpbGRyZW4oIkQiKSxhKSxXdC5kZWJ1ZyhYbyk7Zj1pLm5vZGVzKCksV3Qud2FybigiTmV3IGxpc3Qgb2Ygbm9kZXMiLGYpO2Zvcihjb25zdCB2IG9mIGYpe2NvbnN0IG09aS5ub2RlKHYpO1d0Lndhcm4oIiBOb3cgbmV4dCBsZXZlbCIsdixtKSxtLmNsdXN0ZXJOb2RlJiZmQnQobS5ncmFwaCxhKzEpfX0sZEJ0PShpLGEpPT57aWYoYS5sZW5ndGg9PT0wKXJldHVybltdO2xldCBmPU9iamVjdC5hc3NpZ24oYSk7cmV0dXJuIGEuZm9yRWFjaChwPT57Y29uc3Qgdj1pLmNoaWxkcmVuKHApLG09ZEJ0KGksdik7Zj1bLi4uZiwuLi5tXX0pLGZ9LFZqZT1pPT5kQnQoaSxpLmNoaWxkcmVuKCkpO2Z1bmN0aW9uIEdqZShpLGEpe3JldHVybiBpLmludGVyc2VjdChhKX1mdW5jdGlvbiBnQnQoaSxhLGYscCl7dmFyIHY9aS54LG09aS55LGI9di1wLngsRT1tLXAueSxDPU1hdGguc3FydChhKmEqRSpFK2YqZipiKmIpLEE9TWF0aC5hYnMoYSpmKmIvQyk7cC54PHYmJihBPS1BKTt2YXIgUD1NYXRoLmFicyhhKmYqRS9DKTtyZXR1cm4gcC55PG0mJihQPS1QKSx7eDp2K0EseTptK1B9fWZ1bmN0aW9uIFVqZShpLGEsZil7cmV0dXJuIGdCdChpLGEsYSxmKX1mdW5jdGlvbiBXamUoaSxhLGYscCl7dmFyIHYsbSxiLEUsQyxBLFAsRixqLFIsSCxZLHJ0LEosaXQ7aWYodj1hLnktaS55LGI9aS54LWEueCxDPWEueCppLnktaS54KmEueSxqPXYqZi54K2IqZi55K0MsUj12KnAueCtiKnAueStDLCEoaiE9PTAmJlIhPT0wJiZwQnQoaixSKSkmJihtPXAueS1mLnksRT1mLngtcC54LEE9cC54KmYueS1mLngqcC55LFA9bSppLngrRSppLnkrQSxGPW0qYS54K0UqYS55K0EsIShQIT09MCYmRiE9PTAmJnBCdChQLEYpKSYmKEg9dipFLW0qYixIIT09MCkpKXJldHVybiBZPU1hdGguYWJzKEgvMikscnQ9YipBLUUqQyxKPXJ0PDA/KHJ0LVkpL0g6KHJ0K1kpL0gscnQ9bSpDLXYqQSxpdD1ydDwwPyhydC1ZKS9IOihydCtZKS9ILHt4OkoseTppdH19ZnVuY3Rpb24gcEJ0KGksYSl7cmV0dXJuIGkqYT4wfWZ1bmN0aW9uIEtqZShpLGEsZil7dmFyIHA9aS54LHY9aS55LG09W10sYj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksRT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7dHlwZW9mIGEuZm9yRWFjaD09ImZ1bmN0aW9uIj9hLmZvckVhY2goZnVuY3Rpb24oSCl7Yj1NYXRoLm1pbihiLEgueCksRT1NYXRoLm1pbihFLEgueSl9KTooYj1NYXRoLm1pbihiLGEueCksRT1NYXRoLm1pbihFLGEueSkpO2Zvcih2YXIgQz1wLWkud2lkdGgvMi1iLEE9di1pLmhlaWdodC8yLUUsUD0wO1A8YS5sZW5ndGg7UCsrKXt2YXIgRj1hW1BdLGo9YVtQPGEubGVuZ3RoLTE/UCsxOjBdLFI9V2plKGksZix7eDpDK0YueCx5OkErRi55fSx7eDpDK2oueCx5OkErai55fSk7UiYmbS5wdXNoKFIpfXJldHVybiBtLmxlbmd0aD8obS5sZW5ndGg+MSYmbS5zb3J0KGZ1bmN0aW9uKEgsWSl7dmFyIHJ0PUgueC1mLngsSj1ILnktZi55LGl0PU1hdGguc3FydChydCpydCtKKkopLGZ0PVkueC1mLngsVHQ9WS55LWYueSxrdD1NYXRoLnNxcnQoZnQqZnQrVHQqVHQpO3JldHVybiBpdDxrdD8tMTppdD09PWt0PzA6MX0pLG1bMF0pOml9Y29uc3QgbVA9KGksYSk9Pnt2YXIgZj1pLngscD1pLnksdj1hLngtZixtPWEueS1wLGI9aS53aWR0aC8yLEU9aS5oZWlnaHQvMixDLEE7cmV0dXJuIE1hdGguYWJzKG0pKmI+TWF0aC5hYnModikqRT8obTwwJiYoRT0tRSksQz1tPT09MD8wOkUqdi9tLEE9RSk6KHY8MCYmKGI9LWIpLEM9YixBPXY9PT0wPzA6YiptL3YpLHt4OmYrQyx5OnArQX19LFRoPXtub2RlOkdqZSxjaXJjbGU6VWplLGVsbGlwc2U6Z0J0LHBvbHlnb246S2plLHJlY3Q6bVB9LFlqZT1hc3luYyhpLGEpPT57YS51c2VIdG1sTGFiZWxzfHxEZSgpLmZsb3djaGFydC5odG1sTGFiZWxzfHwoYS5jZW50ZXJMYWJlbD0hMCk7Y29uc3R7c2hhcGVTdmc6cCxiYm94OnYsaGFsZlBhZGRpbmc6bX09YXdhaXQgT2QoaSxhLCJub2RlICIrYS5jbGFzc2VzLCEwKTtXdC5pbmZvKCJDbGFzc2VzID0gIixhLmNsYXNzZXMpO2NvbnN0IGI9cC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gYi5hdHRyKCJyeCIsYS5yeCkuYXR0cigicnkiLGEucnkpLmF0dHIoIngiLC12LndpZHRoLzItbSkuYXR0cigieSIsLXYuaGVpZ2h0LzItbSkuYXR0cigid2lkdGgiLHYud2lkdGgrYS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLHYuaGVpZ2h0K2EucGFkZGluZyksZWYoYSxiKSxhLmludGVyc2VjdD1mdW5jdGlvbihFKXtyZXR1cm4gVGgucmVjdChhLEUpfSxwfTtsZXQgYkJ0PTA7Y29uc3QgWGplPWZ1bmN0aW9uKGksYSxmLHAsdil7Y29uc3QgbT1mdW5jdGlvbihpdCl7c3dpdGNoKGl0KXtjYXNlIHYuZGIucmVsYXRpb25UeXBlLkFHR1JFR0FUSU9OOnJldHVybiJhZ2dyZWdhdGlvbiI7Y2FzZSB2LmRiLnJlbGF0aW9uVHlwZS5FWFRFTlNJT046cmV0dXJuImV4dGVuc2lvbiI7Y2FzZSB2LmRiLnJlbGF0aW9uVHlwZS5DT01QT1NJVElPTjpyZXR1cm4iY29tcG9zaXRpb24iO2Nhc2Ugdi5kYi5yZWxhdGlvblR5cGUuREVQRU5ERU5DWTpyZXR1cm4iZGVwZW5kZW5jeSI7Y2FzZSB2LmRiLnJlbGF0aW9uVHlwZS5MT0xMSVBPUDpyZXR1cm4ibG9sbGlwb3AifX07YS5wb2ludHM9YS5wb2ludHMuZmlsdGVyKGl0PT4hTnVtYmVyLmlzTmFOKGl0LnkpKTtjb25zdCBiPWEucG9pbnRzLEU9WUUoKS54KGZ1bmN0aW9uKGl0KXtyZXR1cm4gaXQueH0pLnkoZnVuY3Rpb24oaXQpe3JldHVybiBpdC55fSkuY3VydmUoTUEpLEM9aS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixFKGIpKS5hdHRyKCJpZCIsImVkZ2UiK2JCdCkuYXR0cigiY2xhc3MiLCJyZWxhdGlvbiIpO2xldCBBPSIiO3AuYXJyb3dNYXJrZXJBYnNvbHV0ZSYmKEE9d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gsQT1BLnJlcGxhY2UoL1woL2csIlxcKCIpLEE9QS5yZXBsYWNlKC9cKS9nLCJcXCkiKSksZi5yZWxhdGlvbi5saW5lVHlwZT09MSYmQy5hdHRyKCJjbGFzcyIsInJlbGF0aW9uIGRhc2hlZC1saW5lIiksZi5yZWxhdGlvbi5saW5lVHlwZT09MTAmJkMuYXR0cigiY2xhc3MiLCJyZWxhdGlvbiBkb3R0ZWQtbGluZSIpLGYucmVsYXRpb24udHlwZTEhPT0ibm9uZSImJkMuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrQSsiIyIrbShmLnJlbGF0aW9uLnR5cGUxKSsiU3RhcnQpIiksZi5yZWxhdGlvbi50eXBlMiE9PSJub25lIiYmQy5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrQSsiIyIrbShmLnJlbGF0aW9uLnR5cGUyKSsiRW5kKSIpO2xldCBQLEY7Y29uc3Qgaj1hLnBvaW50cy5sZW5ndGg7bGV0IFI9dG8uY2FsY0xhYmVsUG9zaXRpb24oYS5wb2ludHMpO1A9Ui54LEY9Ui55O2xldCBILFkscnQsSjtpZihqJTIhPT0wJiZqPjEpe2xldCBpdD10by5jYWxjQ2FyZGluYWxpdHlQb3NpdGlvbihmLnJlbGF0aW9uLnR5cGUxIT09Im5vbmUiLGEucG9pbnRzLGEucG9pbnRzWzBdKSxmdD10by5jYWxjQ2FyZGluYWxpdHlQb3NpdGlvbihmLnJlbGF0aW9uLnR5cGUyIT09Im5vbmUiLGEucG9pbnRzLGEucG9pbnRzW2otMV0pO1d0LmRlYnVnKCJjYXJkaW5hbGl0eV8xX3BvaW50ICIrSlNPTi5zdHJpbmdpZnkoaXQpKSxXdC5kZWJ1ZygiY2FyZGluYWxpdHlfMl9wb2ludCAiK0pTT04uc3RyaW5naWZ5KGZ0KSksSD1pdC54LFk9aXQueSxydD1mdC54LEo9ZnQueX1pZihmLnRpdGxlIT09dm9pZCAwKXtjb25zdCBpdD1pLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiY2xhc3NMYWJlbCIpLGZ0PWl0LmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwibGFiZWwiKS5hdHRyKCJ4IixQKS5hdHRyKCJ5IixGKS5hdHRyKCJmaWxsIiwicmVkIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KGYudGl0bGUpO3dpbmRvdy5sYWJlbD1mdDtjb25zdCBUdD1mdC5ub2RlKCkuZ2V0QkJveCgpO2l0Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImNsYXNzIiwiYm94IikuYXR0cigieCIsVHQueC1wLnBhZGRpbmcvMikuYXR0cigieSIsVHQueS1wLnBhZGRpbmcvMikuYXR0cigid2lkdGgiLFR0LndpZHRoK3AucGFkZGluZykuYXR0cigiaGVpZ2h0IixUdC5oZWlnaHQrcC5wYWRkaW5nKX1XdC5pbmZvKCJSZW5kZXJpbmcgcmVsYXRpb24gIitKU09OLnN0cmluZ2lmeShmKSksZi5yZWxhdGlvblRpdGxlMSE9PXZvaWQgMCYmZi5yZWxhdGlvblRpdGxlMSE9PSJub25lIiYmaS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNhcmRpbmFsaXR5IikuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJ0eXBlMSIpLmF0dHIoIngiLEgpLmF0dHIoInkiLFkpLmF0dHIoImZpbGwiLCJibGFjayIpLmF0dHIoImZvbnQtc2l6ZSIsIjYiKS50ZXh0KGYucmVsYXRpb25UaXRsZTEpLGYucmVsYXRpb25UaXRsZTIhPT12b2lkIDAmJmYucmVsYXRpb25UaXRsZTIhPT0ibm9uZSImJmkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjYXJkaW5hbGl0eSIpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwidHlwZTIiKS5hdHRyKCJ4IixydCkuYXR0cigieSIsSikuYXR0cigiZmlsbCIsImJsYWNrIikuYXR0cigiZm9udC1zaXplIiwiNiIpLnRleHQoZi5yZWxhdGlvblRpdGxlMiksYkJ0Kyt9LFFqZT1mdW5jdGlvbihpLGEsZixwKXtXdC5kZWJ1ZygiUmVuZGVyaW5nIGNsYXNzICIsYSxmKTtjb25zdCB2PWEuaWQsbT17aWQ6dixsYWJlbDphLmlkLHdpZHRoOjAsaGVpZ2h0OjB9LGI9aS5hcHBlbmQoImciKS5hdHRyKCJpZCIscC5kYi5sb29rVXBEb21JZCh2KSkuYXR0cigiY2xhc3MiLCJjbGFzc0dyb3VwIik7bGV0IEU7YS5saW5rP0U9Yi5hcHBlbmQoInN2ZzphIikuYXR0cigieGxpbms6aHJlZiIsYS5saW5rKS5hdHRyKCJ0YXJnZXQiLGEubGlua1RhcmdldCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigieSIsZi50ZXh0SGVpZ2h0K2YucGFkZGluZykuYXR0cigieCIsMCk6RT1iLmFwcGVuZCgidGV4dCIpLmF0dHIoInkiLGYudGV4dEhlaWdodCtmLnBhZGRpbmcpLmF0dHIoIngiLDApO2xldCBDPSEwO2EuYW5ub3RhdGlvbnMuZm9yRWFjaChmdW5jdGlvbihrdCl7Y29uc3QgbXQ9RS5hcHBlbmQoInRzcGFuIikudGV4dCgiwqsiK2t0KyLCuyIpO0N8fG10LmF0dHIoImR5IixmLnRleHRIZWlnaHQpLEM9ITF9KTtsZXQgQT12QnQoYSk7Y29uc3QgUD1FLmFwcGVuZCgidHNwYW4iKS50ZXh0KEEpLmF0dHIoImNsYXNzIiwidGl0bGUiKTtDfHxQLmF0dHIoImR5IixmLnRleHRIZWlnaHQpO2NvbnN0IEY9RS5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodCxqPWIuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLDApLmF0dHIoInkxIixmLnBhZGRpbmcrRitmLmRpdmlkZXJNYXJnaW4vMikuYXR0cigieTIiLGYucGFkZGluZytGK2YuZGl2aWRlck1hcmdpbi8yKSxSPWIuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsZi5wYWRkaW5nKS5hdHRyKCJ5IixGK2YuZGl2aWRlck1hcmdpbitmLnRleHRIZWlnaHQpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImNsYXNzIiwiY2xhc3NUZXh0Iik7Qz0hMCxhLm1lbWJlcnMuZm9yRWFjaChmdW5jdGlvbihrdCl7d0J0KFIsa3QsQyxmKSxDPSExfSk7Y29uc3QgSD1SLm5vZGUoKS5nZXRCQm94KCksWT1iLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIiwwKS5hdHRyKCJ5MSIsZi5wYWRkaW5nK0YrZi5kaXZpZGVyTWFyZ2luK0guaGVpZ2h0KS5hdHRyKCJ5MiIsZi5wYWRkaW5nK0YrZi5kaXZpZGVyTWFyZ2luK0guaGVpZ2h0KSxydD1iLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGYucGFkZGluZykuYXR0cigieSIsRisyKmYuZGl2aWRlck1hcmdpbitILmhlaWdodCtmLnRleHRIZWlnaHQpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImNsYXNzIiwiY2xhc3NUZXh0Iik7Qz0hMCxhLm1ldGhvZHMuZm9yRWFjaChmdW5jdGlvbihrdCl7d0J0KHJ0LGt0LEMsZiksQz0hMX0pO2NvbnN0IEo9Yi5ub2RlKCkuZ2V0QkJveCgpO3ZhciBpdD0iICI7YS5jc3NDbGFzc2VzLmxlbmd0aD4wJiYoaXQ9aXQrYS5jc3NDbGFzc2VzLmpvaW4oIiAiKSk7Y29uc3QgVHQ9Yi5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIsSi53aWR0aCsyKmYucGFkZGluZykuYXR0cigiaGVpZ2h0IixKLmhlaWdodCtmLnBhZGRpbmcrLjUqZi5kaXZpZGVyTWFyZ2luKS5hdHRyKCJjbGFzcyIsaXQpLm5vZGUoKS5nZXRCQm94KCkud2lkdGg7cmV0dXJuIEUubm9kZSgpLmNoaWxkTm9kZXMuZm9yRWFjaChmdW5jdGlvbihrdCl7a3Quc2V0QXR0cmlidXRlKCJ4IiwoVHQta3QuZ2V0QkJveCgpLndpZHRoKS8yKX0pLGEudG9vbHRpcCYmRS5pbnNlcnQoInRpdGxlIikudGV4dChhLnRvb2x0aXApLGouYXR0cigieDIiLFR0KSxZLmF0dHIoIngyIixUdCksbS53aWR0aD1UdCxtLmhlaWdodD1KLmhlaWdodCtmLnBhZGRpbmcrLjUqZi5kaXZpZGVyTWFyZ2luLG19LHZCdD1mdW5jdGlvbihpKXtsZXQgYT1pLmlkO3JldHVybiBpLnR5cGUmJihhKz0iPCIraS50eXBlKyI+IiksYX0sWmplPWZ1bmN0aW9uKGksYSxmLHApe1d0LmRlYnVnKCJSZW5kZXJpbmcgbm90ZSAiLGEsZik7Y29uc3Qgdj1hLmlkLG09e2lkOnYsdGV4dDphLnRleHQsd2lkdGg6MCxoZWlnaHQ6MH0sYj1pLmFwcGVuZCgiZyIpLmF0dHIoImlkIix2KS5hdHRyKCJjbGFzcyIsImNsYXNzR3JvdXAiKTtsZXQgRT1iLmFwcGVuZCgidGV4dCIpLmF0dHIoInkiLGYudGV4dEhlaWdodCtmLnBhZGRpbmcpLmF0dHIoIngiLDApO2NvbnN0IEM9SlNPTi5wYXJzZShgIiR7YS50ZXh0fSJgKS5zcGxpdChgCmApO0MuZm9yRWFjaChmdW5jdGlvbihqKXtXdC5kZWJ1ZyhgQWRkaW5nIGxpbmU6ICR7an1gKSxFLmFwcGVuZCgidHNwYW4iKS50ZXh0KGopLmF0dHIoImNsYXNzIiwidGl0bGUiKS5hdHRyKCJkeSIsZi50ZXh0SGVpZ2h0KX0pO2NvbnN0IEE9Yi5ub2RlKCkuZ2V0QkJveCgpLEY9Yi5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIsQS53aWR0aCsyKmYucGFkZGluZykuYXR0cigiaGVpZ2h0IixBLmhlaWdodCtDLmxlbmd0aCpmLnRleHRIZWlnaHQrZi5wYWRkaW5nKy41KmYuZGl2aWRlck1hcmdpbikubm9kZSgpLmdldEJCb3goKS53aWR0aDtyZXR1cm4gRS5ub2RlKCkuY2hpbGROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKGope2ouc2V0QXR0cmlidXRlKCJ4IiwoRi1qLmdldEJCb3goKS53aWR0aCkvMil9KSxtLndpZHRoPUYsbS5oZWlnaHQ9QS5oZWlnaHQrQy5sZW5ndGgqZi50ZXh0SGVpZ2h0K2YucGFkZGluZysuNSpmLmRpdmlkZXJNYXJnaW4sbX0seUs9ZnVuY3Rpb24oaSl7bGV0IGE9IiIsZj0iIixwPSIiLHY9IiIsbT1pLnN1YnN0cmluZygwLDEpLGI9aS5zdWJzdHJpbmcoaS5sZW5ndGgtMSxpLmxlbmd0aCk7bS5tYXRjaCgvWyMrfi1dLykmJih2PW0pO2xldCBFPS9bXHNcdyl+XS87Yi5tYXRjaChFKXx8KGY9bUJ0KGIpKTtjb25zdCBDPXY9PT0iIj8wOjE7bGV0IEE9Zj09PSIiP2kubGVuZ3RoOmkubGVuZ3RoLTE7aT1pLnN1YnN0cmluZyhDLEEpO2NvbnN0IFA9aS5pbmRleE9mKCIoIiksRj1pLmluZGV4T2YoIikiKTtpZihQPjEmJkY+UCYmRjw9aS5sZW5ndGgpe2xldCBSPWkuc3Vic3RyaW5nKDAsUCkudHJpbSgpO2NvbnN0IEg9aS5zdWJzdHJpbmcoUCsxLEYpO2lmKGE9ditSKyIoIit6TihILnRyaW0oKSkrIikiLEY8aS5sZW5ndGgpe2xldCBZPWkuc3Vic3RyaW5nKEYrMSxGKzIpO2Y9PT0iIiYmIVkubWF0Y2goRSk/KGY9bUJ0KFkpLHA9aS5zdWJzdHJpbmcoRisyKS50cmltKCkpOnA9aS5zdWJzdHJpbmcoRisxKS50cmltKCkscCE9PSIiJiYocC5jaGFyQXQoMCk9PT0iOiImJihwPXAuc3Vic3RyaW5nKDEpLnRyaW0oKSkscD0iIDogIit6TihwKSxhKz1wKX19ZWxzZSBhPXYrek4oaSk7cmV0dXJue2Rpc3BsYXlUZXh0OmEsY3NzU3R5bGU6Zn19LHdCdD1mdW5jdGlvbihpLGEsZixwKXtsZXQgdj15SyhhKTtjb25zdCBtPWkuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLHAucGFkZGluZykudGV4dCh2LmRpc3BsYXlUZXh0KTt2LmNzc1N0eWxlIT09IiImJm0uYXR0cigic3R5bGUiLHYuY3NzU3R5bGUpLGZ8fG0uYXR0cigiZHkiLHAudGV4dEhlaWdodCl9LG1CdD1mdW5jdGlvbihpKXtzd2l0Y2goaSl7Y2FzZSIqIjpyZXR1cm4iZm9udC1zdHlsZTppdGFsaWM7IjtjYXNlIiQiOnJldHVybiJ0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOyI7ZGVmYXVsdDpyZXR1cm4iIn19LFMwdD17Z2V0Q2xhc3NUaXRsZVN0cmluZzp2QnQsZHJhd0NsYXNzOlFqZSxkcmF3RWRnZTpYamUsZHJhd05vdGU6WmplLHBhcnNlTWVtYmVyOnlLfSx5QnQ9aT0+aT8iICIraToiIixCYj0oaSxhKT0+YCR7YXx8Im5vZGUgZGVmYXVsdCJ9JHt5QnQoaS5jbGFzc2VzKX0gJHt5QnQoaS5jbGFzcyl9YCx4QnQ9YXN5bmMoaSxhKT0+e2NvbnN0e3NoYXBlU3ZnOmYsYmJveDpwfT1hd2FpdCBPZChpLGEsQmIoYSx2b2lkIDApLCEwKSx2PXAud2lkdGgrYS5wYWRkaW5nLG09cC5oZWlnaHQrYS5wYWRkaW5nLGI9dittLEU9W3t4OmIvMix5OjB9LHt4OmIseTotYi8yfSx7eDpiLzIseTotYn0se3g6MCx5Oi1iLzJ9XTtXdC5pbmZvKCJRdWVzdGlvbiBtYWluIChDaXJjbGUpIik7Y29uc3QgQz1MNShmLGIsYixFKTtyZXR1cm4gQy5hdHRyKCJzdHlsZSIsYS5zdHlsZSksZWYoYSxDKSxhLmludGVyc2VjdD1mdW5jdGlvbihBKXtyZXR1cm4gV3Qud2FybigiSW50ZXJzZWN0IGNhbGxlZCIpLFRoLnBvbHlnb24oYSxFLEEpfSxmfSxKamU9KGksYSk9Pntjb25zdCBmPWkuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQiKS5hdHRyKCJpZCIsYS5kb21JZHx8YS5pZCkscD0yOCx2PVt7eDowLHk6cC8yfSx7eDpwLzIseTowfSx7eDowLHk6LXAvMn0se3g6LXAvMix5OjB9XTtyZXR1cm4gZi5pbnNlcnQoInBvbHlnb24iLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJwb2ludHMiLHYubWFwKGZ1bmN0aW9uKGIpe3JldHVybiBiLngrIiwiK2IueX0pLmpvaW4oIiAiKSkuYXR0cigiY2xhc3MiLCJzdGF0ZS1zdGFydCIpLmF0dHIoInIiLDcpLmF0dHIoIndpZHRoIiwyOCkuYXR0cigiaGVpZ2h0IiwyOCksYS53aWR0aD0yOCxhLmhlaWdodD0yOCxhLmludGVyc2VjdD1mdW5jdGlvbihiKXtyZXR1cm4gVGguY2lyY2xlKGEsMTQsYil9LGZ9LHQkZT1hc3luYyhpLGEpPT57Y29uc3R7c2hhcGVTdmc6ZixiYm94OnB9PWF3YWl0IE9kKGksYSxCYihhLHZvaWQgMCksITApLHY9NCxtPXAuaGVpZ2h0K2EucGFkZGluZyxiPW0vdixFPXAud2lkdGgrMipiK2EucGFkZGluZyxDPVt7eDpiLHk6MH0se3g6RS1iLHk6MH0se3g6RSx5Oi1tLzJ9LHt4OkUtYix5Oi1tfSx7eDpiLHk6LW19LHt4OjAseTotbS8yfV0sQT1MNShmLEUsbSxDKTtyZXR1cm4gQS5hdHRyKCJzdHlsZSIsYS5zdHlsZSksZWYoYSxBKSxhLmludGVyc2VjdD1mdW5jdGlvbihQKXtyZXR1cm4gVGgucG9seWdvbihhLEMsUCl9LGZ9LGUkZT1hc3luYyhpLGEpPT57Y29uc3R7c2hhcGVTdmc6ZixiYm94OnB9PWF3YWl0IE9kKGksYSxCYihhLHZvaWQgMCksITApLHY9cC53aWR0aCthLnBhZGRpbmcsbT1wLmhlaWdodCthLnBhZGRpbmcsYj1be3g6LW0vMix5OjB9LHt4OnYseTowfSx7eDp2LHk6LW19LHt4Oi1tLzIseTotbX0se3g6MCx5Oi1tLzJ9XTtyZXR1cm4gTDUoZix2LG0sYikuYXR0cigic3R5bGUiLGEuc3R5bGUpLGEud2lkdGg9dittLGEuaGVpZ2h0PW0sYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oQyl7cmV0dXJuIFRoLnBvbHlnb24oYSxiLEMpfSxmfSxuJGU9YXN5bmMoaSxhKT0+e2NvbnN0e3NoYXBlU3ZnOmYsYmJveDpwfT1hd2FpdCBPZChpLGEsQmIoYSksITApLHY9cC53aWR0aCthLnBhZGRpbmcsbT1wLmhlaWdodCthLnBhZGRpbmcsYj1be3g6LTIqbS82LHk6MH0se3g6di1tLzYseTowfSx7eDp2KzIqbS82LHk6LW19LHt4Om0vNix5Oi1tfV0sRT1MNShmLHYsbSxiKTtyZXR1cm4gRS5hdHRyKCJzdHlsZSIsYS5zdHlsZSksZWYoYSxFKSxhLmludGVyc2VjdD1mdW5jdGlvbihDKXtyZXR1cm4gVGgucG9seWdvbihhLGIsQyl9LGZ9LHIkZT1hc3luYyhpLGEpPT57Y29uc3R7c2hhcGVTdmc6ZixiYm94OnB9PWF3YWl0IE9kKGksYSxCYihhLHZvaWQgMCksITApLHY9cC53aWR0aCthLnBhZGRpbmcsbT1wLmhlaWdodCthLnBhZGRpbmcsYj1be3g6MiptLzYseTowfSx7eDp2K20vNix5OjB9LHt4OnYtMiptLzYseTotbX0se3g6LW0vNix5Oi1tfV0sRT1MNShmLHYsbSxiKTtyZXR1cm4gRS5hdHRyKCJzdHlsZSIsYS5zdHlsZSksZWYoYSxFKSxhLmludGVyc2VjdD1mdW5jdGlvbihDKXtyZXR1cm4gVGgucG9seWdvbihhLGIsQyl9LGZ9LGkkZT1hc3luYyhpLGEpPT57Y29uc3R7c2hhcGVTdmc6ZixiYm94OnB9PWF3YWl0IE9kKGksYSxCYihhLHZvaWQgMCksITApLHY9cC53aWR0aCthLnBhZGRpbmcsbT1wLmhlaWdodCthLnBhZGRpbmcsYj1be3g6LTIqbS82LHk6MH0se3g6disyKm0vNix5OjB9LHt4OnYtbS82LHk6LW19LHt4Om0vNix5Oi1tfV0sRT1MNShmLHYsbSxiKTtyZXR1cm4gRS5hdHRyKCJzdHlsZSIsYS5zdHlsZSksZWYoYSxFKSxhLmludGVyc2VjdD1mdW5jdGlvbihDKXtyZXR1cm4gVGgucG9seWdvbihhLGIsQyl9LGZ9LHMkZT1hc3luYyhpLGEpPT57Y29uc3R7c2hhcGVTdmc6ZixiYm94OnB9PWF3YWl0IE9kKGksYSxCYihhLHZvaWQgMCksITApLHY9cC53aWR0aCthLnBhZGRpbmcsbT1wLmhlaWdodCthLnBhZGRpbmcsYj1be3g6bS82LHk6MH0se3g6di1tLzYseTowfSx7eDp2KzIqbS82LHk6LW19LHt4Oi0yKm0vNix5Oi1tfV0sRT1MNShmLHYsbSxiKTtyZXR1cm4gRS5hdHRyKCJzdHlsZSIsYS5zdHlsZSksZWYoYSxFKSxhLmludGVyc2VjdD1mdW5jdGlvbihDKXtyZXR1cm4gVGgucG9seWdvbihhLGIsQyl9LGZ9LGEkZT1hc3luYyhpLGEpPT57Y29uc3R7c2hhcGVTdmc6ZixiYm94OnB9PWF3YWl0IE9kKGksYSxCYihhLHZvaWQgMCksITApLHY9cC53aWR0aCthLnBhZGRpbmcsbT1wLmhlaWdodCthLnBhZGRpbmcsYj1be3g6MCx5OjB9LHt4OnYrbS8yLHk6MH0se3g6dix5Oi1tLzJ9LHt4OnYrbS8yLHk6LW19LHt4OjAseTotbX1dLEU9TDUoZix2LG0sYik7cmV0dXJuIEUuYXR0cigic3R5bGUiLGEuc3R5bGUpLGVmKGEsRSksYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oQyl7cmV0dXJuIFRoLnBvbHlnb24oYSxiLEMpfSxmfSxvJGU9YXN5bmMoaSxhKT0+e2NvbnN0e3NoYXBlU3ZnOmYsYmJveDpwfT1hd2FpdCBPZChpLGEsQmIoYSx2b2lkIDApLCEwKSx2PXAud2lkdGgrYS5wYWRkaW5nLG09di8yLGI9bS8oMi41K3YvNTApLEU9cC5oZWlnaHQrYithLnBhZGRpbmcsQz0iTSAwLCIrYisiIGEgIittKyIsIitiKyIgMCwwLDAgIit2KyIgMCBhICIrbSsiLCIrYisiIDAsMCwwICIrLXYrIiAwIGwgMCwiK0UrIiBhICIrbSsiLCIrYisiIDAsMCwwICIrdisiIDAgbCAwLCIrLUUsQT1mLmF0dHIoImxhYmVsLW9mZnNldC15IixiKS5pbnNlcnQoInBhdGgiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJzdHlsZSIsYS5zdHlsZSkuYXR0cigiZCIsQykuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLXYvMisiLCIrLShFLzIrYikrIikiKTtyZXR1cm4gZWYoYSxBKSxhLmludGVyc2VjdD1mdW5jdGlvbihQKXtjb25zdCBGPVRoLnJlY3QoYSxQKSxqPUYueC1hLng7aWYobSE9MCYmKE1hdGguYWJzKGopPGEud2lkdGgvMnx8TWF0aC5hYnMoaik9PWEud2lkdGgvMiYmTWF0aC5hYnMoRi55LWEueSk+YS5oZWlnaHQvMi1iKSl7bGV0IFI9YipiKigxLWoqai8obSptKSk7UiE9MCYmKFI9TWF0aC5zcXJ0KFIpKSxSPWItUixQLnktYS55PjAmJihSPS1SKSxGLnkrPVJ9cmV0dXJuIEZ9LGZ9LGMkZT1hc3luYyhpLGEpPT57Y29uc3R7c2hhcGVTdmc6ZixiYm94OnAsaGFsZlBhZGRpbmc6dn09YXdhaXQgT2QoaSxhLCJub2RlICIrYS5jbGFzc2VzKyIgIithLmNsYXNzLCEwKSxtPWYuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksYj1wLndpZHRoK2EucGFkZGluZyxFPXAuaGVpZ2h0K2EucGFkZGluZztpZihtLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikuYXR0cigic3R5bGUiLGEuc3R5bGUpLmF0dHIoInJ4IixhLnJ4KS5hdHRyKCJyeSIsYS5yeSkuYXR0cigieCIsLXAud2lkdGgvMi12KS5hdHRyKCJ5IiwtcC5oZWlnaHQvMi12KS5hdHRyKCJ3aWR0aCIsYikuYXR0cigiaGVpZ2h0IixFKSxhLnByb3BzKXtjb25zdCBDPW5ldyBTZXQoT2JqZWN0LmtleXMoYS5wcm9wcykpO2EucHJvcHMuYm9yZGVycyYmKGtCdChtLGEucHJvcHMuYm9yZGVycyxiLEUpLEMuZGVsZXRlKCJib3JkZXJzIikpLEMuZm9yRWFjaChBPT57V3Qud2FybihgVW5rbm93biBub2RlIHByb3BlcnR5ICR7QX1gKX0pfXJldHVybiBlZihhLG0pLGEuaW50ZXJzZWN0PWZ1bmN0aW9uKEMpe3JldHVybiBUaC5yZWN0KGEsQyl9LGZ9LHUkZT1hc3luYyhpLGEpPT57Y29uc3R7c2hhcGVTdmc6Zn09YXdhaXQgT2QoaSxhLCJsYWJlbCIsITApO1d0LnRyYWNlKCJDbGFzc2VzID0gIixhLmNsYXNzKTtjb25zdCBwPWYuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksdj0wLG09MDtpZihwLmF0dHIoIndpZHRoIix2KS5hdHRyKCJoZWlnaHQiLG0pLGYuYXR0cigiY2xhc3MiLCJsYWJlbCBlZGdlTGFiZWwiKSxhLnByb3BzKXtjb25zdCBiPW5ldyBTZXQoT2JqZWN0LmtleXMoYS5wcm9wcykpO2EucHJvcHMuYm9yZGVycyYmKGtCdChwLGEucHJvcHMuYm9yZGVycyx2LG0pLGIuZGVsZXRlKCJib3JkZXJzIikpLGIuZm9yRWFjaChFPT57V3Qud2FybihgVW5rbm93biBub2RlIHByb3BlcnR5ICR7RX1gKX0pfXJldHVybiBlZihhLHApLGEuaW50ZXJzZWN0PWZ1bmN0aW9uKGIpe3JldHVybiBUaC5yZWN0KGEsYil9LGZ9O2Z1bmN0aW9uIGtCdChpLGEsZixwKXtjb25zdCB2PVtdLG09RT0+e3YucHVzaChFLDApfSxiPUU9Pnt2LnB1c2goMCxFKX07YS5pbmNsdWRlcygidCIpPyhXdC5kZWJ1ZygiYWRkIHRvcCBib3JkZXIiKSxtKGYpKTpiKGYpLGEuaW5jbHVkZXMoInIiKT8oV3QuZGVidWcoImFkZCByaWdodCBib3JkZXIiKSxtKHApKTpiKHApLGEuaW5jbHVkZXMoImIiKT8oV3QuZGVidWcoImFkZCBib3R0b20gYm9yZGVyIiksbShmKSk6YihmKSxhLmluY2x1ZGVzKCJsIik/KFd0LmRlYnVnKCJhZGQgbGVmdCBib3JkZXIiKSxtKHApKTpiKHApLGkuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsdi5qb2luKCIgIikpfWNvbnN0IGwkZT0oaSxhKT0+e2xldCBmO2EuY2xhc3Nlcz9mPSJub2RlICIrYS5jbGFzc2VzOmY9Im5vZGUgZGVmYXVsdCI7Y29uc3QgcD1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIixmKS5hdHRyKCJpZCIsYS5kb21JZHx8YS5pZCksdj1wLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLG09cC5pbnNlcnQoImxpbmUiKSxiPXAuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLEU9YS5sYWJlbFRleHQuZmxhdD9hLmxhYmVsVGV4dC5mbGF0KCk6YS5sYWJlbFRleHQ7bGV0IEM9IiI7dHlwZW9mIEU9PSJvYmplY3QiP0M9RVswXTpDPUUsV3QuaW5mbygiTGFiZWwgdGV4dCBhYmM3OSIsQyxFLHR5cGVvZiBFPT0ib2JqZWN0Iik7Y29uc3QgQT1iLm5vZGUoKS5hcHBlbmRDaGlsZChkcChDLGEubGFiZWxTdHlsZSwhMCwhMCkpO2xldCBQPXt3aWR0aDowLGhlaWdodDowfTtpZih1MShEZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7Y29uc3QgWT1BLmNoaWxkcmVuWzBdLHJ0PXhyKEEpO1A9WS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxydC5hdHRyKCJ3aWR0aCIsUC53aWR0aCkscnQuYXR0cigiaGVpZ2h0IixQLmhlaWdodCl9V3QuaW5mbygiVGV4dCAyIixFKTtjb25zdCBGPUUuc2xpY2UoMSxFLmxlbmd0aCk7bGV0IGo9QS5nZXRCQm94KCk7Y29uc3QgUj1iLm5vZGUoKS5hcHBlbmRDaGlsZChkcChGLmpvaW4/Ri5qb2luKCI8YnIvPiIpOkYsYS5sYWJlbFN0eWxlLCEwLCEwKSk7aWYodTEoRGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2NvbnN0IFk9Ui5jaGlsZHJlblswXSxydD14cihSKTtQPVkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscnQuYXR0cigid2lkdGgiLFAud2lkdGgpLHJ0LmF0dHIoImhlaWdodCIsUC5oZWlnaHQpfWNvbnN0IEg9YS5wYWRkaW5nLzI7cmV0dXJuIHhyKFIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoUC53aWR0aD5qLndpZHRoPzA6KGoud2lkdGgtUC53aWR0aCkvMikrIiwgIisoai5oZWlnaHQrSCs1KSsiKSIpLHhyKEEpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoUC53aWR0aDxqLndpZHRoPzA6LShqLndpZHRoLVAud2lkdGgpLzIpKyIsIDApIiksUD1iLm5vZGUoKS5nZXRCQm94KCksYi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistUC53aWR0aC8yKyIsICIrKC1QLmhlaWdodC8yLUgrMykrIikiKSx2LmF0dHIoImNsYXNzIiwib3V0ZXIgdGl0bGUtc3RhdGUiKS5hdHRyKCJ4IiwtUC53aWR0aC8yLUgpLmF0dHIoInkiLC1QLmhlaWdodC8yLUgpLmF0dHIoIndpZHRoIixQLndpZHRoK2EucGFkZGluZykuYXR0cigiaGVpZ2h0IixQLmhlaWdodCthLnBhZGRpbmcpLG0uYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC1QLndpZHRoLzItSCkuYXR0cigieDIiLFAud2lkdGgvMitIKS5hdHRyKCJ5MSIsLVAuaGVpZ2h0LzItSCtqLmhlaWdodCtIKS5hdHRyKCJ5MiIsLVAuaGVpZ2h0LzItSCtqLmhlaWdodCtIKSxlZihhLHYpLGEuaW50ZXJzZWN0PWZ1bmN0aW9uKFkpe3JldHVybiBUaC5yZWN0KGEsWSl9LHB9LGgkZT1hc3luYyhpLGEpPT57Y29uc3R7c2hhcGVTdmc6ZixiYm94OnB9PWF3YWl0IE9kKGksYSxCYihhLHZvaWQgMCksITApLHY9cC5oZWlnaHQrYS5wYWRkaW5nLG09cC53aWR0aCt2LzQrYS5wYWRkaW5nLGI9Zi5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJzdHlsZSIsYS5zdHlsZSkuYXR0cigicngiLHYvMikuYXR0cigicnkiLHYvMikuYXR0cigieCIsLW0vMikuYXR0cigieSIsLXYvMikuYXR0cigid2lkdGgiLG0pLmF0dHIoImhlaWdodCIsdik7cmV0dXJuIGVmKGEsYiksYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oRSl7cmV0dXJuIFRoLnJlY3QoYSxFKX0sZn0sZiRlPWFzeW5jKGksYSk9Pntjb25zdHtzaGFwZVN2ZzpmLGJib3g6cCxoYWxmUGFkZGluZzp2fT1hd2FpdCBPZChpLGEsQmIoYSx2b2lkIDApLCEwKSxtPWYuaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gbS5hdHRyKCJzdHlsZSIsYS5zdHlsZSkuYXR0cigicngiLGEucngpLmF0dHIoInJ5IixhLnJ5KS5hdHRyKCJyIixwLndpZHRoLzIrdikuYXR0cigid2lkdGgiLHAud2lkdGgrYS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLHAuaGVpZ2h0K2EucGFkZGluZyksV3QuaW5mbygiQ2lyY2xlIG1haW4iKSxlZihhLG0pLGEuaW50ZXJzZWN0PWZ1bmN0aW9uKGIpe3JldHVybiBXdC5pbmZvKCJDaXJjbGUgaW50ZXJzZWN0IixhLHAud2lkdGgvMit2LGIpLFRoLmNpcmNsZShhLHAud2lkdGgvMit2LGIpfSxmfSxkJGU9YXN5bmMoaSxhKT0+e2NvbnN0e3NoYXBlU3ZnOmYsYmJveDpwLGhhbGZQYWRkaW5nOnZ9PWF3YWl0IE9kKGksYSxCYihhLHZvaWQgMCksITApLG09NSxiPWYuaW5zZXJ0KCJnIiwiOmZpcnN0LWNoaWxkIiksRT1iLmluc2VydCgiY2lyY2xlIiksQz1iLmluc2VydCgiY2lyY2xlIik7cmV0dXJuIGIuYXR0cigiY2xhc3MiLGEuY2xhc3MpLEUuYXR0cigic3R5bGUiLGEuc3R5bGUpLmF0dHIoInJ4IixhLnJ4KS5hdHRyKCJyeSIsYS5yeSkuYXR0cigiciIscC53aWR0aC8yK3YrbSkuYXR0cigid2lkdGgiLHAud2lkdGgrYS5wYWRkaW5nK20qMikuYXR0cigiaGVpZ2h0IixwLmhlaWdodCthLnBhZGRpbmcrbSoyKSxDLmF0dHIoInN0eWxlIixhLnN0eWxlKS5hdHRyKCJyeCIsYS5yeCkuYXR0cigicnkiLGEucnkpLmF0dHIoInIiLHAud2lkdGgvMit2KS5hdHRyKCJ3aWR0aCIscC53aWR0aCthLnBhZGRpbmcpLmF0dHIoImhlaWdodCIscC5oZWlnaHQrYS5wYWRkaW5nKSxXdC5pbmZvKCJEb3VibGVDaXJjbGUgbWFpbiIpLGVmKGEsRSksYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oQSl7cmV0dXJuIFd0LmluZm8oIkRvdWJsZUNpcmNsZSBpbnRlcnNlY3QiLGEscC53aWR0aC8yK3YrbSxBKSxUaC5jaXJjbGUoYSxwLndpZHRoLzIrdittLEEpfSxmfSxnJGU9YXN5bmMoaSxhKT0+e2NvbnN0e3NoYXBlU3ZnOmYsYmJveDpwfT1hd2FpdCBPZChpLGEsQmIoYSx2b2lkIDApLCEwKSx2PXAud2lkdGgrYS5wYWRkaW5nLG09cC5oZWlnaHQrYS5wYWRkaW5nLGI9W3t4OjAseTowfSx7eDp2LHk6MH0se3g6dix5Oi1tfSx7eDowLHk6LW19LHt4OjAseTowfSx7eDotOCx5OjB9LHt4OnYrOCx5OjB9LHt4OnYrOCx5Oi1tfSx7eDotOCx5Oi1tfSx7eDotOCx5OjB9XSxFPUw1KGYsdixtLGIpO3JldHVybiBFLmF0dHIoInN0eWxlIixhLnN0eWxlKSxlZihhLEUpLGEuaW50ZXJzZWN0PWZ1bmN0aW9uKEMpe3JldHVybiBUaC5wb2x5Z29uKGEsYixDKX0sZn0scCRlPShpLGEpPT57Y29uc3QgZj1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSBkZWZhdWx0IikuYXR0cigiaWQiLGEuZG9tSWR8fGEuaWQpLHA9Zi5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBwLmF0dHIoImNsYXNzIiwic3RhdGUtc3RhcnQiKS5hdHRyKCJyIiw3KS5hdHRyKCJ3aWR0aCIsMTQpLmF0dHIoImhlaWdodCIsMTQpLGVmKGEscCksYS5pbnRlcnNlY3Q9ZnVuY3Rpb24odil7cmV0dXJuIFRoLmNpcmNsZShhLDcsdil9LGZ9LEVCdD0oaSxhLGYpPT57Y29uc3QgcD1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSBkZWZhdWx0IikuYXR0cigiaWQiLGEuZG9tSWR8fGEuaWQpO2xldCB2PTcwLG09MTA7Zj09PSJMUiImJih2PTEwLG09NzApO2NvbnN0IGI9cC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtMSp2LzIpLmF0dHIoInkiLC0xKm0vMikuYXR0cigid2lkdGgiLHYpLmF0dHIoImhlaWdodCIsbSkuYXR0cigiY2xhc3MiLCJmb3JrLWpvaW4iKTtyZXR1cm4gZWYoYSxiKSxhLmhlaWdodD1hLmhlaWdodCthLnBhZGRpbmcvMixhLndpZHRoPWEud2lkdGgrYS5wYWRkaW5nLzIsYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oRSl7cmV0dXJuIFRoLnJlY3QoYSxFKX0scH0sVEJ0PXtyaG9tYnVzOnhCdCxxdWVzdGlvbjp4QnQscmVjdDpjJGUsbGFiZWxSZWN0OnUkZSxyZWN0V2l0aFRpdGxlOmwkZSxjaG9pY2U6SmplLGNpcmNsZTpmJGUsZG91YmxlY2lyY2xlOmQkZSxzdGFkaXVtOmgkZSxoZXhhZ29uOnQkZSxyZWN0X2xlZnRfaW52X2Fycm93OmUkZSxsZWFuX3JpZ2h0Om4kZSxsZWFuX2xlZnQ6ciRlLHRyYXBlem9pZDppJGUsaW52X3RyYXBlem9pZDpzJGUscmVjdF9yaWdodF9pbnZfYXJyb3c6YSRlLGN5bGluZGVyOm8kZSxzdGFydDpwJGUsZW5kOihpLGEpPT57Y29uc3QgZj1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSBkZWZhdWx0IikuYXR0cigiaWQiLGEuZG9tSWR8fGEuaWQpLHA9Zi5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpLHY9Zi5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpO3JldHVybiB2LmF0dHIoImNsYXNzIiwic3RhdGUtc3RhcnQiKS5hdHRyKCJyIiw3KS5hdHRyKCJ3aWR0aCIsMTQpLmF0dHIoImhlaWdodCIsMTQpLHAuYXR0cigiY2xhc3MiLCJzdGF0ZS1lbmQiKS5hdHRyKCJyIiw1KS5hdHRyKCJ3aWR0aCIsMTApLmF0dHIoImhlaWdodCIsMTApLGVmKGEsdiksYS5pbnRlcnNlY3Q9ZnVuY3Rpb24obSl7cmV0dXJuIFRoLmNpcmNsZShhLDcsbSl9LGZ9LG5vdGU6WWplLHN1YnJvdXRpbmU6ZyRlLGZvcms6RUJ0LGpvaW46RUJ0LGNsYXNzX2JveDooaSxhKT0+e2NvbnN0IGY9YS5wYWRkaW5nLzIscD00LHY9ODtsZXQgbTthLmNsYXNzZXM/bT0ibm9kZSAiK2EuY2xhc3NlczptPSJub2RlIGRlZmF1bHQiO2NvbnN0IGI9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsbSkuYXR0cigiaWQiLGEuZG9tSWR8fGEuaWQpLEU9Yi5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxDPWIuaW5zZXJ0KCJsaW5lIiksQT1iLmluc2VydCgibGluZSIpO2xldCBQPTAsRj1wO2NvbnN0IGo9Yi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIik7bGV0IFI9MDtjb25zdCBIPWEuY2xhc3NEYXRhLmFubm90YXRpb25zJiZhLmNsYXNzRGF0YS5hbm5vdGF0aW9uc1swXSxZPWEuY2xhc3NEYXRhLmFubm90YXRpb25zWzBdPyLCqyIrYS5jbGFzc0RhdGEuYW5ub3RhdGlvbnNbMF0rIsK7IjoiIixydD1qLm5vZGUoKS5hcHBlbmRDaGlsZChkcChZLGEubGFiZWxTdHlsZSwhMCwhMCkpO2xldCBKPXJ0LmdldEJCb3goKTtpZih1MShEZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7Y29uc3QgeXQ9cnQuY2hpbGRyZW5bMF0sc3Q9eHIocnQpO0o9eXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksc3QuYXR0cigid2lkdGgiLEoud2lkdGgpLHN0LmF0dHIoImhlaWdodCIsSi5oZWlnaHQpfWEuY2xhc3NEYXRhLmFubm90YXRpb25zWzBdJiYoRis9Si5oZWlnaHQrcCxQKz1KLndpZHRoKTtsZXQgaXQ9YS5jbGFzc0RhdGEubGFiZWw7YS5jbGFzc0RhdGEudHlwZSE9PXZvaWQgMCYmYS5jbGFzc0RhdGEudHlwZSE9PSIiJiYoRGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscz9pdCs9IiZsdDsiK2EuY2xhc3NEYXRhLnR5cGUrIiZndDsiOml0Kz0iPCIrYS5jbGFzc0RhdGEudHlwZSsiPiIpO2NvbnN0IGZ0PWoubm9kZSgpLmFwcGVuZENoaWxkKGRwKGl0LGEubGFiZWxTdHlsZSwhMCwhMCkpO3hyKGZ0KS5hdHRyKCJjbGFzcyIsImNsYXNzVGl0bGUiKTtsZXQgVHQ9ZnQuZ2V0QkJveCgpO2lmKHUxKERlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtjb25zdCB5dD1mdC5jaGlsZHJlblswXSxzdD14cihmdCk7VHQ9eXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksc3QuYXR0cigid2lkdGgiLFR0LndpZHRoKSxzdC5hdHRyKCJoZWlnaHQiLFR0LmhlaWdodCl9Ris9VHQuaGVpZ2h0K3AsVHQud2lkdGg+UCYmKFA9VHQud2lkdGgpO2NvbnN0IGt0PVtdO2EuY2xhc3NEYXRhLm1lbWJlcnMuZm9yRWFjaCh5dD0+e2NvbnN0IHN0PXlLKHl0KTtsZXQgeHQ9c3QuZGlzcGxheVRleHQ7RGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscyYmKHh0PXh0LnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpKTtjb25zdCBodD1qLm5vZGUoKS5hcHBlbmRDaGlsZChkcCh4dCxzdC5jc3NTdHlsZT9zdC5jc3NTdHlsZTphLmxhYmVsU3R5bGUsITAsITApKTtsZXQgZHQ9aHQuZ2V0QkJveCgpO2lmKHUxKERlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtjb25zdCBDdD1odC5jaGlsZHJlblswXSx0dD14cihodCk7ZHQ9Q3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdHQuYXR0cigid2lkdGgiLGR0LndpZHRoKSx0dC5hdHRyKCJoZWlnaHQiLGR0LmhlaWdodCl9ZHQud2lkdGg+UCYmKFA9ZHQud2lkdGgpLEYrPWR0LmhlaWdodCtwLGt0LnB1c2goaHQpfSksRis9djtjb25zdCBtdD1bXTtpZihhLmNsYXNzRGF0YS5tZXRob2RzLmZvckVhY2goeXQ9Pntjb25zdCBzdD15Syh5dCk7bGV0IHh0PXN0LmRpc3BsYXlUZXh0O0RlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMmJih4dD14dC5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKSk7Y29uc3QgaHQ9ai5ub2RlKCkuYXBwZW5kQ2hpbGQoZHAoeHQsc3QuY3NzU3R5bGU/c3QuY3NzU3R5bGU6YS5sYWJlbFN0eWxlLCEwLCEwKSk7bGV0IGR0PWh0LmdldEJCb3goKTtpZih1MShEZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7Y29uc3QgQ3Q9aHQuY2hpbGRyZW5bMF0sdHQ9eHIoaHQpO2R0PUN0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHR0LmF0dHIoIndpZHRoIixkdC53aWR0aCksdHQuYXR0cigiaGVpZ2h0IixkdC5oZWlnaHQpfWR0LndpZHRoPlAmJihQPWR0LndpZHRoKSxGKz1kdC5oZWlnaHQrcCxtdC5wdXNoKGh0KX0pLEYrPXYsSCl7bGV0IHl0PShQLUoud2lkdGgpLzI7eHIocnQpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoLTEqUC8yK3l0KSsiLCAiKy0xKkYvMisiKSIpLFI9Si5oZWlnaHQrcH1sZXQgY3Q9KFAtVHQud2lkdGgpLzI7cmV0dXJuIHhyKGZ0KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKC0xKlAvMitjdCkrIiwgIisoLTEqRi8yK1IpKyIpIiksUis9VHQuaGVpZ2h0K3AsQy5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4MSIsLVAvMi1mKS5hdHRyKCJ4MiIsUC8yK2YpLmF0dHIoInkxIiwtRi8yLWYrditSKS5hdHRyKCJ5MiIsLUYvMi1mK3YrUiksUis9dixrdC5mb3JFYWNoKHl0PT57eHIoeXQpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIistUC8yKyIsICIrKC0xKkYvMitSK3YvMikrIikiKTtjb25zdCBzdD15dD09bnVsbD92b2lkIDA6eXQuZ2V0QkJveCgpO1IrPSgoc3Q9PW51bGw/dm9pZCAwOnN0LmhlaWdodCk/PzApK3B9KSxSKz12LEEuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC1QLzItZikuYXR0cigieDIiLFAvMitmKS5hdHRyKCJ5MSIsLUYvMi1mK3YrUikuYXR0cigieTIiLC1GLzItZit2K1IpLFIrPXYsbXQuZm9yRWFjaCh5dD0+e3hyKHl0KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrLVAvMisiLCAiKygtMSpGLzIrUikrIikiKTtjb25zdCBzdD15dD09bnVsbD92b2lkIDA6eXQuZ2V0QkJveCgpO1IrPSgoc3Q9PW51bGw/dm9pZCAwOnN0LmhlaWdodCk/PzApK3B9KSxFLmF0dHIoImNsYXNzIiwib3V0ZXIgdGl0bGUtc3RhdGUiKS5hdHRyKCJ4IiwtUC8yLWYpLmF0dHIoInkiLC0oRi8yKS1mKS5hdHRyKCJ3aWR0aCIsUCthLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsRithLnBhZGRpbmcpLGVmKGEsRSksYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oeXQpe3JldHVybiBUaC5yZWN0KGEseXQpfSxifX07bGV0IGlMPXt9O2NvbnN0IF9CdD1hc3luYyhpLGEsZik9PntsZXQgcCx2O2lmKGEubGluayl7bGV0IG07RGUoKS5zZWN1cml0eUxldmVsPT09InNhbmRib3giP209Il90b3AiOmEubGlua1RhcmdldCYmKG09YS5saW5rVGFyZ2V0fHwiX2JsYW5rIikscD1pLmluc2VydCgic3ZnOmEiKS5hdHRyKCJ4bGluazpocmVmIixhLmxpbmspLmF0dHIoInRhcmdldCIsbSksdj1hd2FpdCBUQnRbYS5zaGFwZV0ocCxhLGYpfWVsc2Ugdj1hd2FpdCBUQnRbYS5zaGFwZV0oaSxhLGYpLHA9djtyZXR1cm4gYS50b29sdGlwJiZ2LmF0dHIoInRpdGxlIixhLnRvb2x0aXApLGEuY2xhc3MmJnYuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQgIithLmNsYXNzKSxpTFthLmlkXT1wLGEuaGF2ZUNhbGxiYWNrJiZpTFthLmlkXS5hdHRyKCJjbGFzcyIsaUxbYS5pZF0uYXR0cigiY2xhc3MiKSsiIGNsaWNrYWJsZSIpLHB9LGIkZT0oaSxhKT0+e2lMW2EuaWRdPWl9LHYkZT0oKT0+e2lMPXt9fSxDQnQ9aT0+e2NvbnN0IGE9aUxbaS5pZF07V3QudHJhY2UoIlRyYW5zZm9ybWluZyBub2RlIixpLmRpZmYsaSwidHJhbnNsYXRlKCIrKGkueC1pLndpZHRoLzItNSkrIiwgIitpLndpZHRoLzIrIikiKTtjb25zdCBmPTgscD1pLmRpZmZ8fDA7cmV0dXJuIGkuY2x1c3Rlck5vZGU/YS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoaS54K3AtaS53aWR0aC8yKSsiLCAiKyhpLnktaS5oZWlnaHQvMi1mKSsiKSIpOmEuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIraS54KyIsICIraS55KyIpIikscH0sdyRlPXtyZWN0OihpLGEpPT57V3QuaW5mbygiQ3JlYXRpbmcgc3ViZ3JhcGggcmVjdCBmb3IgIixhLmlkLGEpO2NvbnN0IGY9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImNsdXN0ZXIiKyhhLmNsYXNzPyIgIithLmNsYXNzOiIiKSkuYXR0cigiaWQiLGEuaWQpLHA9Zi5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSx2PXUxKERlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpLG09Zi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImNsdXN0ZXItbGFiZWwiKSxiPWEubGFiZWxUeXBlPT09Im1hcmtkb3duIj92SyhtLGEubGFiZWxUZXh0LHtzdHlsZTphLmxhYmVsU3R5bGUsdXNlSHRtbExhYmVsczp2fSk6bS5ub2RlKCkuYXBwZW5kQ2hpbGQoZHAoYS5sYWJlbFRleHQsYS5sYWJlbFN0eWxlLHZvaWQgMCwhMCkpO2xldCBFPWIuZ2V0QkJveCgpO2lmKHUxKERlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtjb25zdCBqPWIuY2hpbGRyZW5bMF0sUj14cihiKTtFPWouZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksUi5hdHRyKCJ3aWR0aCIsRS53aWR0aCksUi5hdHRyKCJoZWlnaHQiLEUuaGVpZ2h0KX1jb25zdCBDPTAqYS5wYWRkaW5nLEE9Qy8yLFA9YS53aWR0aDw9RS53aWR0aCtDP0Uud2lkdGgrQzphLndpZHRoO2Eud2lkdGg8PUUud2lkdGgrQz9hLmRpZmY9KEUud2lkdGgtYS53aWR0aCkvMi1hLnBhZGRpbmcvMjphLmRpZmY9LWEucGFkZGluZy8yLFd0LnRyYWNlKCJEYXRhICIsYSxKU09OLnN0cmluZ2lmeShhKSkscC5hdHRyKCJzdHlsZSIsYS5zdHlsZSkuYXR0cigicngiLGEucngpLmF0dHIoInJ5IixhLnJ5KS5hdHRyKCJ4IixhLngtUC8yKS5hdHRyKCJ5IixhLnktYS5oZWlnaHQvMi1BKS5hdHRyKCJ3aWR0aCIsUCkuYXR0cigiaGVpZ2h0IixhLmhlaWdodCtDKSx2P20uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKGEueC1FLndpZHRoLzIpKyIsICIrKGEueS1hLmhlaWdodC8yKSsiKSIpOm0uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYS54KyIsICIrKGEueS1hLmhlaWdodC8yKSsiKSIpO2NvbnN0IEY9cC5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBhLndpZHRoPUYud2lkdGgsYS5oZWlnaHQ9Ri5oZWlnaHQsYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oail7cmV0dXJuIG1QKGEsail9LGZ9LHJvdW5kZWRXaXRoVGl0bGU6KGksYSk9Pntjb25zdCBmPWkuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLGEuY2xhc3NlcykuYXR0cigiaWQiLGEuaWQpLHA9Zi5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSx2PWYuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJjbHVzdGVyLWxhYmVsIiksbT1mLmFwcGVuZCgicmVjdCIpLGI9di5ub2RlKCkuYXBwZW5kQ2hpbGQoZHAoYS5sYWJlbFRleHQsYS5sYWJlbFN0eWxlLHZvaWQgMCwhMCkpO2xldCBFPWIuZ2V0QkJveCgpO2lmKHUxKERlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtjb25zdCBqPWIuY2hpbGRyZW5bMF0sUj14cihiKTtFPWouZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksUi5hdHRyKCJ3aWR0aCIsRS53aWR0aCksUi5hdHRyKCJoZWlnaHQiLEUuaGVpZ2h0KX1FPWIuZ2V0QkJveCgpO2NvbnN0IEM9MCphLnBhZGRpbmcsQT1DLzIsUD1hLndpZHRoPD1FLndpZHRoK2EucGFkZGluZz9FLndpZHRoK2EucGFkZGluZzphLndpZHRoO2Eud2lkdGg8PUUud2lkdGgrYS5wYWRkaW5nP2EuZGlmZj0oRS53aWR0aCthLnBhZGRpbmcqMC1hLndpZHRoKS8yOmEuZGlmZj0tYS5wYWRkaW5nLzIscC5hdHRyKCJjbGFzcyIsIm91dGVyIikuYXR0cigieCIsYS54LVAvMi1BKS5hdHRyKCJ5IixhLnktYS5oZWlnaHQvMi1BKS5hdHRyKCJ3aWR0aCIsUCtDKS5hdHRyKCJoZWlnaHQiLGEuaGVpZ2h0K0MpLG0uYXR0cigiY2xhc3MiLCJpbm5lciIpLmF0dHIoIngiLGEueC1QLzItQSkuYXR0cigieSIsYS55LWEuaGVpZ2h0LzItQStFLmhlaWdodC0xKS5hdHRyKCJ3aWR0aCIsUCtDKS5hdHRyKCJoZWlnaHQiLGEuaGVpZ2h0K0MtRS5oZWlnaHQtMyksdi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoYS54LUUud2lkdGgvMikrIiwgIisoYS55LWEuaGVpZ2h0LzItYS5wYWRkaW5nLzMrKHUxKERlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpPzU6MykpKyIpIik7Y29uc3QgRj1wLm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIGEuaGVpZ2h0PUYuaGVpZ2h0LGEuaW50ZXJzZWN0PWZ1bmN0aW9uKGope3JldHVybiBtUChhLGopfSxmfSxub3RlR3JvdXA6KGksYSk9Pntjb25zdCBmPWkuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub3RlLWNsdXN0ZXIiKS5hdHRyKCJpZCIsYS5pZCkscD1mLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLHY9MCphLnBhZGRpbmcsbT12LzI7cC5hdHRyKCJyeCIsYS5yeCkuYXR0cigicnkiLGEucnkpLmF0dHIoIngiLGEueC1hLndpZHRoLzItbSkuYXR0cigieSIsYS55LWEuaGVpZ2h0LzItbSkuYXR0cigid2lkdGgiLGEud2lkdGgrdikuYXR0cigiaGVpZ2h0IixhLmhlaWdodCt2KS5hdHRyKCJmaWxsIiwibm9uZSIpO2NvbnN0IGI9cC5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBhLndpZHRoPWIud2lkdGgsYS5oZWlnaHQ9Yi5oZWlnaHQsYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oRSl7cmV0dXJuIG1QKGEsRSl9LGZ9LGRpdmlkZXI6KGksYSk9Pntjb25zdCBmPWkuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLGEuY2xhc3NlcykuYXR0cigiaWQiLGEuaWQpLHA9Zi5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSx2PTAqYS5wYWRkaW5nLG09di8yO3AuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieCIsYS54LWEud2lkdGgvMi1tKS5hdHRyKCJ5IixhLnktYS5oZWlnaHQvMikuYXR0cigid2lkdGgiLGEud2lkdGgrdikuYXR0cigiaGVpZ2h0IixhLmhlaWdodCt2KTtjb25zdCBiPXAubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gYS53aWR0aD1iLndpZHRoLGEuaGVpZ2h0PWIuaGVpZ2h0LGEuZGlmZj0tYS5wYWRkaW5nLzIsYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oRSl7cmV0dXJuIG1QKGEsRSl9LGZ9fTtsZXQgU0J0PXt9O2NvbnN0IG0kZT0oaSxhKT0+e1d0LnRyYWNlKCJJbnNlcnRpbmcgY2x1c3RlciIpO2NvbnN0IGY9YS5zaGFwZXx8InJlY3QiO1NCdFthLmlkXT13JGVbZl0oaSxhKX0seSRlPSgpPT57U0J0PXt9fTtsZXQgeEs9e30sTmQ9e307Y29uc3QgeCRlPSgpPT57eEs9e30sTmQ9e319LEFCdD0oaSxhKT0+e2NvbnN0IGY9dTEoRGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscykscD1hLmxhYmVsVHlwZT09PSJtYXJrZG93biI/dksoaSxhLmxhYmVsLHtzdHlsZTphLmxhYmVsU3R5bGUsdXNlSHRtbExhYmVsczpmLGFkZFN2Z0JhY2tncm91bmQ6ITB9KTpkcChhLmxhYmVsLGEubGFiZWxTdHlsZSk7V3QuaW5mbygiYWJjODIiLGEsYS5sYWJlbFR5cGUpO2NvbnN0IHY9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VMYWJlbCIpLG09di5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIik7bS5ub2RlKCkuYXBwZW5kQ2hpbGQocCk7bGV0IGI9cC5nZXRCQm94KCk7aWYoZil7Y29uc3QgQz1wLmNoaWxkcmVuWzBdLEE9eHIocCk7Yj1DLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEEuYXR0cigid2lkdGgiLGIud2lkdGgpLEEuYXR0cigiaGVpZ2h0IixiLmhlaWdodCl9bS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistYi53aWR0aC8yKyIsICIrLWIuaGVpZ2h0LzIrIikiKSx4S1thLmlkXT12LGEud2lkdGg9Yi53aWR0aCxhLmhlaWdodD1iLmhlaWdodDtsZXQgRTtpZihhLnN0YXJ0TGFiZWxMZWZ0KXtjb25zdCBDPWRwKGEuc3RhcnRMYWJlbExlZnQsYS5sYWJlbFN0eWxlKSxBPWkuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksUD1BLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTtFPVAubm9kZSgpLmFwcGVuZENoaWxkKEMpO2NvbnN0IEY9Qy5nZXRCQm94KCk7UC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistRi53aWR0aC8yKyIsICIrLUYuaGVpZ2h0LzIrIikiKSxOZFthLmlkXXx8KE5kW2EuaWRdPXt9KSxOZFthLmlkXS5zdGFydExlZnQ9QSxrSyhFLGEuc3RhcnRMYWJlbExlZnQpfWlmKGEuc3RhcnRMYWJlbFJpZ2h0KXtjb25zdCBDPWRwKGEuc3RhcnRMYWJlbFJpZ2h0LGEubGFiZWxTdHlsZSksQT1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVRlcm1pbmFscyIpLFA9QS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImlubmVyIik7RT1BLm5vZGUoKS5hcHBlbmRDaGlsZChDKSxQLm5vZGUoKS5hcHBlbmRDaGlsZChDKTtjb25zdCBGPUMuZ2V0QkJveCgpO1AuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLUYud2lkdGgvMisiLCAiKy1GLmhlaWdodC8yKyIpIiksTmRbYS5pZF18fChOZFthLmlkXT17fSksTmRbYS5pZF0uc3RhcnRSaWdodD1BLGtLKEUsYS5zdGFydExhYmVsUmlnaHQpfWlmKGEuZW5kTGFiZWxMZWZ0KXtjb25zdCBDPWRwKGEuZW5kTGFiZWxMZWZ0LGEubGFiZWxTdHlsZSksQT1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVRlcm1pbmFscyIpLFA9QS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImlubmVyIik7RT1QLm5vZGUoKS5hcHBlbmRDaGlsZChDKTtjb25zdCBGPUMuZ2V0QkJveCgpO1AuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLUYud2lkdGgvMisiLCAiKy1GLmhlaWdodC8yKyIpIiksQS5ub2RlKCkuYXBwZW5kQ2hpbGQoQyksTmRbYS5pZF18fChOZFthLmlkXT17fSksTmRbYS5pZF0uZW5kTGVmdD1BLGtLKEUsYS5lbmRMYWJlbExlZnQpfWlmKGEuZW5kTGFiZWxSaWdodCl7Y29uc3QgQz1kcChhLmVuZExhYmVsUmlnaHQsYS5sYWJlbFN0eWxlKSxBPWkuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksUD1BLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTtFPVAubm9kZSgpLmFwcGVuZENoaWxkKEMpO2NvbnN0IEY9Qy5nZXRCQm94KCk7UC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistRi53aWR0aC8yKyIsICIrLUYuaGVpZ2h0LzIrIikiKSxBLm5vZGUoKS5hcHBlbmRDaGlsZChDKSxOZFthLmlkXXx8KE5kW2EuaWRdPXt9KSxOZFthLmlkXS5lbmRSaWdodD1BLGtLKEUsYS5lbmRMYWJlbFJpZ2h0KX1yZXR1cm4gcH07ZnVuY3Rpb24ga0soaSxhKXtEZSgpLmZsb3djaGFydC5odG1sTGFiZWxzJiZpJiYoaS5zdHlsZS53aWR0aD1hLmxlbmd0aCo5KyJweCIsaS5zdHlsZS5oZWlnaHQ9IjEycHgiKX1jb25zdCBrJGU9KGksYSk9PntXdC5pbmZvKCJNb3ZpbmcgbGFiZWwgYWJjNzggIixpLmlkLGkubGFiZWwseEtbaS5pZF0pO2xldCBmPWEudXBkYXRlZFBhdGg/YS51cGRhdGVkUGF0aDphLm9yaWdpbmFsUGF0aDtpZihpLmxhYmVsKXtjb25zdCBwPXhLW2kuaWRdO2xldCB2PWkueCxtPWkueTtpZihmKXtjb25zdCBiPXRvLmNhbGNMYWJlbFBvc2l0aW9uKGYpO1d0LmluZm8oIk1vdmluZyBsYWJlbCAiK2kubGFiZWwrIiBmcm9tICgiLHYsIiwiLG0sIikgdG8gKCIsYi54LCIsIixiLnksIikgYWJjNzgiKSxhLnVwZGF0ZWRQYXRoJiYodj1iLngsbT1iLnkpfXAuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdisiLCAiK20rIikiKX1pZihpLnN0YXJ0TGFiZWxMZWZ0KXtjb25zdCBwPU5kW2kuaWRdLnN0YXJ0TGVmdDtsZXQgdj1pLngsbT1pLnk7aWYoZil7Y29uc3QgYj10by5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKGkuYXJyb3dUeXBlU3RhcnQ/MTA6MCwic3RhcnRfbGVmdCIsZik7dj1iLngsbT1iLnl9cC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit2KyIsICIrbSsiKSIpfWlmKGkuc3RhcnRMYWJlbFJpZ2h0KXtjb25zdCBwPU5kW2kuaWRdLnN0YXJ0UmlnaHQ7bGV0IHY9aS54LG09aS55O2lmKGYpe2NvbnN0IGI9dG8uY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbihpLmFycm93VHlwZVN0YXJ0PzEwOjAsInN0YXJ0X3JpZ2h0IixmKTt2PWIueCxtPWIueX1wLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3YrIiwgIittKyIpIil9aWYoaS5lbmRMYWJlbExlZnQpe2NvbnN0IHA9TmRbaS5pZF0uZW5kTGVmdDtsZXQgdj1pLngsbT1pLnk7aWYoZil7Y29uc3QgYj10by5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKGkuYXJyb3dUeXBlRW5kPzEwOjAsImVuZF9sZWZ0IixmKTt2PWIueCxtPWIueX1wLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3YrIiwgIittKyIpIil9aWYoaS5lbmRMYWJlbFJpZ2h0KXtjb25zdCBwPU5kW2kuaWRdLmVuZFJpZ2h0O2xldCB2PWkueCxtPWkueTtpZihmKXtjb25zdCBiPXRvLmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24oaS5hcnJvd1R5cGVFbmQ/MTA6MCwiZW5kX3JpZ2h0IixmKTt2PWIueCxtPWIueX1wLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3YrIiwgIittKyIpIil9fSxFJGU9KGksYSk9Pntjb25zdCBmPWkueCxwPWkueSx2PU1hdGguYWJzKGEueC1mKSxtPU1hdGguYWJzKGEueS1wKSxiPWkud2lkdGgvMixFPWkuaGVpZ2h0LzI7cmV0dXJuIHY+PWJ8fG0+PUV9LFQkZT0oaSxhLGYpPT57V3Qud2FybihgaW50ZXJzZWN0aW9uIGNhbGMgYWJjODk6CiAgb3V0c2lkZVBvaW50OiAke0pTT04uc3RyaW5naWZ5KGEpfQogIGluc2lkZVBvaW50IDogJHtKU09OLnN0cmluZ2lmeShmKX0KICBub2RlICAgICAgICA6IHg6JHtpLnh9IHk6JHtpLnl9IHc6JHtpLndpZHRofSBoOiR7aS5oZWlnaHR9YCk7Y29uc3QgcD1pLngsdj1pLnksbT1NYXRoLmFicyhwLWYueCksYj1pLndpZHRoLzI7bGV0IEU9Zi54PGEueD9iLW06YittO2NvbnN0IEM9aS5oZWlnaHQvMixBPU1hdGguYWJzKGEueS1mLnkpLFA9TWF0aC5hYnMoYS54LWYueCk7aWYoTWF0aC5hYnModi1hLnkpKmI+TWF0aC5hYnMocC1hLngpKkMpe2xldCBGPWYueTxhLnk/YS55LUMtdjp2LUMtYS55O0U9UCpGL0E7Y29uc3Qgaj17eDpmLng8YS54P2YueCtFOmYueC1QK0UseTpmLnk8YS55P2YueStBLUY6Zi55LUErRn07cmV0dXJuIEU9PT0wJiYoai54PWEueCxqLnk9YS55KSxQPT09MCYmKGoueD1hLngpLEE9PT0wJiYoai55PWEueSksV3Qud2FybihgYWJjODkgdG9wcC9ib3R0IGNhbGMsIFEgJHtBfSwgcSAke0Z9LCBSICR7UH0sIHIgJHtFfWAsaiksan1lbHNle2YueDxhLng/RT1hLngtYi1wOkU9cC1iLWEueDtsZXQgRj1BKkUvUCxqPWYueDxhLng/Zi54K1AtRTpmLngtUCtFLFI9Zi55PGEueT9mLnkrRjpmLnktRjtyZXR1cm4gV3Qud2Fybihgc2lkZXMgY2FsYyBhYmM4OSwgUSAke0F9LCBxICR7Rn0sIFIgJHtQfSwgciAke0V9YCx7X3g6aixfeTpSfSksRT09PTAmJihqPWEueCxSPWEueSksUD09PTAmJihqPWEueCksQT09PTAmJihSPWEueSkse3g6aix5OlJ9fX0sTEJ0PShpLGEpPT57V3Qud2FybigiYWJjODggY3V0UGF0aEF0SW50ZXJzZWN0IixpLGEpO2xldCBmPVtdLHA9aVswXSx2PSExO3JldHVybiBpLmZvckVhY2gobT0+e2lmKFd0LmluZm8oImFiYzg4IGNoZWNraW5nIHBvaW50IixtLGEpLCFFJGUoYSxtKSYmIXYpe2NvbnN0IGI9VCRlKGEscCxtKTtXdC53YXJuKCJhYmM4OCBpbnNpZGUiLG0scCxiKSxXdC53YXJuKCJhYmM4OCBpbnRlcnNlY3Rpb24iLGIpO2xldCBFPSExO2YuZm9yRWFjaChDPT57RT1FfHxDLng9PT1iLngmJkMueT09PWIueX0pLGYuc29tZShDPT5DLng9PT1iLngmJkMueT09PWIueSk/V3Qud2FybigiYWJjODggbm8gaW50ZXJzZWN0IixiLGYpOmYucHVzaChiKSx2PSEwfWVsc2UgV3Qud2FybigiYWJjODggb3V0c2lkZSIsbSxwKSxwPW0sdnx8Zi5wdXNoKG0pfSksV3Qud2FybigiYWJjODggcmV0dXJuaW5nIHBvaW50cyIsZiksZn0sXyRlPWZ1bmN0aW9uKGksYSxmLHAsdixtKXtsZXQgYj1mLnBvaW50cyxFPSExO2NvbnN0IEM9bS5ub2RlKGEudik7dmFyIEE9bS5ub2RlKGEudyk7V3QuaW5mbygiYWJjODggSW5zZXJ0RWRnZTogIixmKSxBLmludGVyc2VjdCYmQy5pbnRlcnNlY3QmJihiPWIuc2xpY2UoMSxmLnBvaW50cy5sZW5ndGgtMSksYi51bnNoaWZ0KEMuaW50ZXJzZWN0KGJbMF0pKSxXdC5pbmZvKCJMYXN0IHBvaW50IixiW2IubGVuZ3RoLTFdLEEsQS5pbnRlcnNlY3QoYltiLmxlbmd0aC0xXSkpLGIucHVzaChBLmludGVyc2VjdChiW2IubGVuZ3RoLTFdKSkpLGYudG9DbHVzdGVyJiYoV3QuaW5mbygidG8gY2x1c3RlciBhYmM4OCIscFtmLnRvQ2x1c3Rlcl0pLGI9TEJ0KGYucG9pbnRzLHBbZi50b0NsdXN0ZXJdLm5vZGUpLEU9ITApLGYuZnJvbUNsdXN0ZXImJihXdC5pbmZvKCJmcm9tIGNsdXN0ZXIgYWJjODgiLHBbZi5mcm9tQ2x1c3Rlcl0pLGI9TEJ0KGIucmV2ZXJzZSgpLHBbZi5mcm9tQ2x1c3Rlcl0ubm9kZSkucmV2ZXJzZSgpLEU9ITApO2NvbnN0IFA9Yi5maWx0ZXIoSj0+IU51bWJlci5pc05hTihKLnkpKTtsZXQgRjt2PT09ImdyYXBoInx8dj09PSJmbG93Y2hhcnQiP0Y9Zi5jdXJ2ZXx8TUE6Rj1NQTtjb25zdCBqPVlFKCkueChmdW5jdGlvbihKKXtyZXR1cm4gSi54fSkueShmdW5jdGlvbihKKXtyZXR1cm4gSi55fSkuY3VydmUoRik7bGV0IFI7c3dpdGNoKGYudGhpY2tuZXNzKXtjYXNlIm5vcm1hbCI6Uj0iZWRnZS10aGlja25lc3Mtbm9ybWFsIjticmVhaztjYXNlInRoaWNrIjpSPSJlZGdlLXRoaWNrbmVzcy10aGljayI7YnJlYWs7Y2FzZSJpbnZpc2libGUiOlI9ImVkZ2UtdGhpY2tuZXNzLXRoaWNrIjticmVhaztkZWZhdWx0OlI9IiJ9c3dpdGNoKGYucGF0dGVybil7Y2FzZSJzb2xpZCI6Uis9IiBlZGdlLXBhdHRlcm4tc29saWQiO2JyZWFrO2Nhc2UiZG90dGVkIjpSKz0iIGVkZ2UtcGF0dGVybi1kb3R0ZWQiO2JyZWFrO2Nhc2UiZGFzaGVkIjpSKz0iIGVkZ2UtcGF0dGVybi1kYXNoZWQiO2JyZWFrfWNvbnN0IEg9aS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixqKFApKS5hdHRyKCJpZCIsZi5pZCkuYXR0cigiY2xhc3MiLCIgIitSKyhmLmNsYXNzZXM/IiAiK2YuY2xhc3NlczoiIikpLmF0dHIoInN0eWxlIixmLnN0eWxlKTtsZXQgWT0iIjtzd2l0Y2goKERlKCkuZmxvd2NoYXJ0LmFycm93TWFya2VyQWJzb2x1dGV8fERlKCkuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZSkmJihZPXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoLFk9WS5yZXBsYWNlKC9cKC9nLCJcXCgiKSxZPVkucmVwbGFjZSgvXCkvZywiXFwpIikpLFd0LmluZm8oImFycm93VHlwZVN0YXJ0IixmLmFycm93VHlwZVN0YXJ0KSxXdC5pbmZvKCJhcnJvd1R5cGVFbmQiLGYuYXJyb3dUeXBlRW5kKSxmLmFycm93VHlwZVN0YXJ0KXtjYXNlImFycm93X2Nyb3NzIjpILmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK1krIiMiK3YrIi1jcm9zc1N0YXJ0KSIpO2JyZWFrO2Nhc2UiYXJyb3dfcG9pbnQiOkguYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrWSsiIyIrdisiLXBvaW50U3RhcnQpIik7YnJlYWs7Y2FzZSJhcnJvd19iYXJiIjpILmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK1krIiMiK3YrIi1iYXJiU3RhcnQpIik7YnJlYWs7Y2FzZSJhcnJvd19jaXJjbGUiOkguYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrWSsiIyIrdisiLWNpcmNsZVN0YXJ0KSIpO2JyZWFrO2Nhc2UiYWdncmVnYXRpb24iOkguYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrWSsiIyIrdisiLWFnZ3JlZ2F0aW9uU3RhcnQpIik7YnJlYWs7Y2FzZSJleHRlbnNpb24iOkguYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrWSsiIyIrdisiLWV4dGVuc2lvblN0YXJ0KSIpO2JyZWFrO2Nhc2UiY29tcG9zaXRpb24iOkguYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrWSsiIyIrdisiLWNvbXBvc2l0aW9uU3RhcnQpIik7YnJlYWs7Y2FzZSJkZXBlbmRlbmN5IjpILmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK1krIiMiK3YrIi1kZXBlbmRlbmN5U3RhcnQpIik7YnJlYWs7Y2FzZSJsb2xsaXBvcCI6SC5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitZKyIjIit2KyItbG9sbGlwb3BTdGFydCkiKTticmVha31zd2l0Y2goZi5hcnJvd1R5cGVFbmQpe2Nhc2UiYXJyb3dfY3Jvc3MiOkguYXR0cigibWFya2VyLWVuZCIsInVybCgiK1krIiMiK3YrIi1jcm9zc0VuZCkiKTticmVhaztjYXNlImFycm93X3BvaW50IjpILmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitZKyIjIit2KyItcG9pbnRFbmQpIik7YnJlYWs7Y2FzZSJhcnJvd19iYXJiIjpILmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitZKyIjIit2KyItYmFyYkVuZCkiKTticmVhaztjYXNlImFycm93X2NpcmNsZSI6SC5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrWSsiIyIrdisiLWNpcmNsZUVuZCkiKTticmVhaztjYXNlImFnZ3JlZ2F0aW9uIjpILmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitZKyIjIit2KyItYWdncmVnYXRpb25FbmQpIik7YnJlYWs7Y2FzZSJleHRlbnNpb24iOkguYXR0cigibWFya2VyLWVuZCIsInVybCgiK1krIiMiK3YrIi1leHRlbnNpb25FbmQpIik7YnJlYWs7Y2FzZSJjb21wb3NpdGlvbiI6SC5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrWSsiIyIrdisiLWNvbXBvc2l0aW9uRW5kKSIpO2JyZWFrO2Nhc2UiZGVwZW5kZW5jeSI6SC5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrWSsiIyIrdisiLWRlcGVuZGVuY3lFbmQpIik7YnJlYWs7Y2FzZSJsb2xsaXBvcCI6SC5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrWSsiIyIrdisiLWxvbGxpcG9wRW5kKSIpO2JyZWFrfWxldCBydD17fTtyZXR1cm4gRSYmKHJ0LnVwZGF0ZWRQYXRoPWIpLHJ0Lm9yaWdpbmFsUGF0aD1mLnBvaW50cyxydH0sTUJ0PWFzeW5jKGksYSxmLHApPT57V3QuaW5mbygiR3JhcGggaW4gcmVjdXJzaXZlIHJlbmRlcjogWFhYIixBNShhKSxwKTtjb25zdCB2PWEuZ3JhcGgoKS5yYW5rZGlyO1d0LnRyYWNlKCJEaXIgaW4gcmVjdXJzaXZlIHJlbmRlciAtIGRpcjoiLHYpO2NvbnN0IG09aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsInJvb3QiKTthLm5vZGVzKCk/V3QuaW5mbygiUmVjdXJzaXZlIHJlbmRlciBYWFgiLGEubm9kZXMoKSk6V3QuaW5mbygiTm8gbm9kZXMgZm91bmQgZm9yIixhKSxhLmVkZ2VzKCkubGVuZ3RoPjAmJld0LnRyYWNlKCJSZWN1cnNpdmUgZWRnZXMiLGEuZWRnZShhLmVkZ2VzKClbMF0pKTtjb25zdCBiPW0uaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJjbHVzdGVycyIpLEU9bS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VQYXRocyIpLEM9bS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VMYWJlbHMiKSxBPW0uaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub2RlcyIpO2F3YWl0IFByb21pc2UuYWxsKGEubm9kZXMoKS5tYXAoYXN5bmMgZnVuY3Rpb24oRil7Y29uc3Qgaj1hLm5vZGUoRik7aWYocCE9PXZvaWQgMCl7Y29uc3QgUj1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHAuY2x1c3RlckRhdGEpKTtXdC5pbmZvKCJTZXR0aW5nIGRhdGEgZm9yIGNsdXN0ZXIgWFhYICgiLEYsIikgIixSLHApLGEuc2V0Tm9kZShwLmlkLFIpLGEucGFyZW50KEYpfHwoV3QudHJhY2UoIlNldHRpbmcgcGFyZW50IixGLHAuaWQpLGEuc2V0UGFyZW50KEYscC5pZCxSKSl9aWYoV3QuaW5mbygiKEluc2VydCkgTm9kZSBYWFgiK0YrIjogIitKU09OLnN0cmluZ2lmeShhLm5vZGUoRikpKSxqJiZqLmNsdXN0ZXJOb2RlKXtXdC5pbmZvKCJDbHVzdGVyIGlkZW50aWZpZWQiLEYsai53aWR0aCxhLm5vZGUoRikpO2NvbnN0IFI9YXdhaXQgTUJ0KEEsai5ncmFwaCxmLGEubm9kZShGKSksSD1SLmVsZW07ZWYoaixIKSxqLmRpZmY9Ui5kaWZmfHwwLFd0LmluZm8oIk5vZGUgYm91bmRzIChhYmMxMjMpIixGLGosai53aWR0aCxqLngsai55KSxiJGUoSCxqKSxXdC53YXJuKCJSZWN1cnNpdmUgcmVuZGVyIGNvbXBsZXRlICIsSCxqKX1lbHNlIGEuY2hpbGRyZW4oRikubGVuZ3RoPjA/KFd0LmluZm8oIkNsdXN0ZXIgLSB0aGUgbm9uIHJlY3Vyc2l2ZSBwYXRoIFhYWCIsRixqLmlkLGosYSksV3QuaW5mbyh3UChqLmlkLGEpKSxYb1tqLmlkXT17aWQ6d1Aoai5pZCxhKSxub2RlOmp9KTooV3QuaW5mbygiTm9kZSAtIHRoZSBub24gcmVjdXJzaXZlIHBhdGgiLEYsai5pZCxqKSxhd2FpdCBfQnQoQSxhLm5vZGUoRiksdikpfSkpLGEuZWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKEYpe2NvbnN0IGo9YS5lZGdlKEYudixGLncsRi5uYW1lKTtXdC5pbmZvKCJFZGdlICIrRi52KyIgLT4gIitGLncrIjogIitKU09OLnN0cmluZ2lmeShGKSksV3QuaW5mbygiRWRnZSAiK0YudisiIC0+ICIrRi53KyI6ICIsRiwiICIsSlNPTi5zdHJpbmdpZnkoYS5lZGdlKEYpKSksV3QuaW5mbygiRml4IixYbywiaWRzOiIsRi52LEYudywiVHJhbnNsYXRlaW5nOiAiLFhvW0Yudl0sWG9bRi53XSksQUJ0KEMsail9KSxhLmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihGKXtXdC5pbmZvKCJFZGdlICIrRi52KyIgLT4gIitGLncrIjogIitKU09OLnN0cmluZ2lmeShGKSl9KSxXdC5pbmZvKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKSxXdC5pbmZvKCIjIyMgICAgICAgICAgICAgICAgTGF5b3V0ICAgICAgICAgICAgICAgICAjIyMiKSxXdC5pbmZvKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKSxXdC5pbmZvKGEpLG5MKGEpLFd0LmluZm8oIkdyYXBoIGFmdGVyIGxheW91dDoiLEE1KGEpKTtsZXQgUD0wO3JldHVybiBWamUoYSkuZm9yRWFjaChmdW5jdGlvbihGKXtjb25zdCBqPWEubm9kZShGKTtXdC5pbmZvKCJQb3NpdGlvbiAiK0YrIjogIitKU09OLnN0cmluZ2lmeShhLm5vZGUoRikpKSxXdC5pbmZvKCJQb3NpdGlvbiAiK0YrIjogKCIrai54LCIsIitqLnksIikgd2lkdGg6ICIsai53aWR0aCwiIGhlaWdodDogIixqLmhlaWdodCksaiYmai5jbHVzdGVyTm9kZT9DQnQoaik6YS5jaGlsZHJlbihGKS5sZW5ndGg+MD8obSRlKGIsaiksWG9bai5pZF0ubm9kZT1qKTpDQnQoail9KSxhLmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihGKXtjb25zdCBqPWEuZWRnZShGKTtXdC5pbmZvKCJFZGdlICIrRi52KyIgLT4gIitGLncrIjogIitKU09OLnN0cmluZ2lmeShqKSxqKTtjb25zdCBSPV8kZShFLEYsaixYbyxmLGEpO2skZShqLFIpfSksYS5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24oRil7Y29uc3Qgaj1hLm5vZGUoRik7V3QuaW5mbyhGLGoudHlwZSxqLmRpZmYpLGoudHlwZT09PSJncm91cCImJihQPWouZGlmZil9KSx7ZWxlbTptLGRpZmY6UH19LEEwdD1hc3luYyhpLGEsZixwLHYpPT57REZ0KGksZixwLHYpLHYkZSgpLHgkZSgpLHkkZSgpLHpqZSgpLFd0Lndhcm4oIkdyYXBoIGF0IGZpcnN0OiIsQTUoYSkpLEhqZShhKSxXdC53YXJuKCJHcmFwaCBhZnRlcjoiLEE1KGEpKSxhd2FpdCBNQnQoaSxhLHApfSxEQnQ9e30sQyRlPWZ1bmN0aW9uKGkpe2NvbnN0IGE9T2JqZWN0LmtleXMoaSk7Zm9yKGNvbnN0IGYgb2YgYSlEQnRbZl09aVtmXX0sSUJ0PWZ1bmN0aW9uKGksYSxmLHAsdixtKXtjb25zdCBiPXAuc2VsZWN0KGBbaWQ9IiR7Zn0iXWApO09iamVjdC5rZXlzKGkpLmZvckVhY2goZnVuY3Rpb24oQyl7Y29uc3QgQT1pW0NdO2xldCBQPSJkZWZhdWx0IjtBLmNsYXNzZXMubGVuZ3RoPjAmJihQPUEuY2xhc3Nlcy5qb2luKCIgIikpLFA9UCsiIGZsb3djaGFydC1sYWJlbCI7Y29uc3QgRj1lbShBLnN0eWxlcyk7bGV0IGo9QS50ZXh0IT09dm9pZCAwP0EudGV4dDpBLmlkLFI7aWYoV3QuaW5mbygidmVydGV4IixBLEEubGFiZWxUeXBlKSxBLmxhYmVsVHlwZT09PSJtYXJrZG93biIpV3QuaW5mbygidmVydGV4IixBLEEubGFiZWxUeXBlKTtlbHNlIGlmKHUxKERlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtjb25zdCBydD17bGFiZWw6ai5yZXBsYWNlKC9mYVtibHJzXT86ZmEtW1x3LV0rL2csSj0+YDxpIGNsYXNzPScke0oucmVwbGFjZSgiOiIsIiAiKX0nPjwvaT5gKX07Uj11MHQoYixydCkubm9kZSgpLFIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChSKX1lbHNle2NvbnN0IHJ0PXYuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRleHQiKTtydC5zZXRBdHRyaWJ1dGUoInN0eWxlIixGLmxhYmVsU3R5bGUucmVwbGFjZSgiY29sb3I6IiwiZmlsbDoiKSk7Y29uc3QgSj1qLnNwbGl0KHVpLmxpbmVCcmVha1JlZ2V4KTtmb3IoY29uc3QgaXQgb2YgSil7Y29uc3QgZnQ9di5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidHNwYW4iKTtmdC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwieG1sOnNwYWNlIiwicHJlc2VydmUiKSxmdC5zZXRBdHRyaWJ1dGUoImR5IiwiMWVtIiksZnQuc2V0QXR0cmlidXRlKCJ4IiwiMSIpLGZ0LnRleHRDb250ZW50PWl0LHJ0LmFwcGVuZENoaWxkKGZ0KX1SPXJ0fWxldCBIPTAsWT0iIjtzd2l0Y2goQS50eXBlKXtjYXNlInJvdW5kIjpIPTUsWT0icmVjdCI7YnJlYWs7Y2FzZSJzcXVhcmUiOlk9InJlY3QiO2JyZWFrO2Nhc2UiZGlhbW9uZCI6WT0icXVlc3Rpb24iO2JyZWFrO2Nhc2UiaGV4YWdvbiI6WT0iaGV4YWdvbiI7YnJlYWs7Y2FzZSJvZGQiOlk9InJlY3RfbGVmdF9pbnZfYXJyb3ciO2JyZWFrO2Nhc2UibGVhbl9yaWdodCI6WT0ibGVhbl9yaWdodCI7YnJlYWs7Y2FzZSJsZWFuX2xlZnQiOlk9ImxlYW5fbGVmdCI7YnJlYWs7Y2FzZSJ0cmFwZXpvaWQiOlk9InRyYXBlem9pZCI7YnJlYWs7Y2FzZSJpbnZfdHJhcGV6b2lkIjpZPSJpbnZfdHJhcGV6b2lkIjticmVhaztjYXNlIm9kZF9yaWdodCI6WT0icmVjdF9sZWZ0X2ludl9hcnJvdyI7YnJlYWs7Y2FzZSJjaXJjbGUiOlk9ImNpcmNsZSI7YnJlYWs7Y2FzZSJlbGxpcHNlIjpZPSJlbGxpcHNlIjticmVhaztjYXNlInN0YWRpdW0iOlk9InN0YWRpdW0iO2JyZWFrO2Nhc2Uic3Vicm91dGluZSI6WT0ic3Vicm91dGluZSI7YnJlYWs7Y2FzZSJjeWxpbmRlciI6WT0iY3lsaW5kZXIiO2JyZWFrO2Nhc2UiZ3JvdXAiOlk9InJlY3QiO2JyZWFrO2Nhc2UiZG91YmxlY2lyY2xlIjpZPSJkb3VibGVjaXJjbGUiO2JyZWFrO2RlZmF1bHQ6WT0icmVjdCJ9YS5zZXROb2RlKEEuaWQse2xhYmVsU3R5bGU6Ri5sYWJlbFN0eWxlLHNoYXBlOlksbGFiZWxUZXh0OmosbGFiZWxUeXBlOkEubGFiZWxUeXBlLHJ4Okgscnk6SCxjbGFzczpQLHN0eWxlOkYuc3R5bGUsaWQ6QS5pZCxsaW5rOkEubGluayxsaW5rVGFyZ2V0OkEubGlua1RhcmdldCx0b29sdGlwOm0uZGIuZ2V0VG9vbHRpcChBLmlkKXx8IiIsZG9tSWQ6bS5kYi5sb29rVXBEb21JZChBLmlkKSxoYXZlQ2FsbGJhY2s6QS5oYXZlQ2FsbGJhY2ssd2lkdGg6QS50eXBlPT09Imdyb3VwIj81MDA6dm9pZCAwLGRpcjpBLmRpcix0eXBlOkEudHlwZSxwcm9wczpBLnByb3BzLHBhZGRpbmc6RGUoKS5mbG93Y2hhcnQucGFkZGluZ30pLFd0LmluZm8oInNldE5vZGUiLHtsYWJlbFN0eWxlOkYubGFiZWxTdHlsZSxsYWJlbFR5cGU6QS5sYWJlbFR5cGUsc2hhcGU6WSxsYWJlbFRleHQ6aixyeDpILHJ5OkgsY2xhc3M6UCxzdHlsZTpGLnN0eWxlLGlkOkEuaWQsZG9tSWQ6bS5kYi5sb29rVXBEb21JZChBLmlkKSx3aWR0aDpBLnR5cGU9PT0iZ3JvdXAiPzUwMDp2b2lkIDAsdHlwZTpBLnR5cGUsZGlyOkEuZGlyLHByb3BzOkEucHJvcHMscGFkZGluZzpEZSgpLmZsb3djaGFydC5wYWRkaW5nfSl9KX0sT0J0PWZ1bmN0aW9uKGksYSxmKXtXdC5pbmZvKCJhYmM3OCBlZGdlcyA9ICIsaSk7bGV0IHA9MCx2PXt9LG0sYjtpZihpLmRlZmF1bHRTdHlsZSE9PXZvaWQgMCl7Y29uc3QgRT1lbShpLmRlZmF1bHRTdHlsZSk7bT1FLnN0eWxlLGI9RS5sYWJlbFN0eWxlfWkuZm9yRWFjaChmdW5jdGlvbihFKXtwKys7Y29uc3QgQz0iTC0iK0Uuc3RhcnQrIi0iK0UuZW5kO3ZbQ109PT12b2lkIDA/KHZbQ109MCxXdC5pbmZvKCJhYmM3OCBuZXcgZW50cnkiLEMsdltDXSkpOih2W0NdKyssV3QuaW5mbygiYWJjNzggbmV3IGVudHJ5IixDLHZbQ10pKTtsZXQgQT1DKyItIit2W0NdO1d0LmluZm8oImFiYzc4IG5ldyBsaW5rIGlkIHRvIGJlIHVzZWQgaXMiLEMsQSx2W0NdKTtjb25zdCBQPSJMUy0iK0Uuc3RhcnQsRj0iTEUtIitFLmVuZCxqPXtzdHlsZToiIixsYWJlbFN0eWxlOiIifTtzd2l0Y2goai5taW5sZW49RS5sZW5ndGh8fDEsRS50eXBlPT09ImFycm93X29wZW4iP2ouYXJyb3doZWFkPSJub25lIjpqLmFycm93aGVhZD0ibm9ybWFsIixqLmFycm93VHlwZVN0YXJ0PSJhcnJvd19vcGVuIixqLmFycm93VHlwZUVuZD0iYXJyb3dfb3BlbiIsRS50eXBlKXtjYXNlImRvdWJsZV9hcnJvd19jcm9zcyI6ai5hcnJvd1R5cGVTdGFydD0iYXJyb3dfY3Jvc3MiO2Nhc2UiYXJyb3dfY3Jvc3MiOmouYXJyb3dUeXBlRW5kPSJhcnJvd19jcm9zcyI7YnJlYWs7Y2FzZSJkb3VibGVfYXJyb3dfcG9pbnQiOmouYXJyb3dUeXBlU3RhcnQ9ImFycm93X3BvaW50IjtjYXNlImFycm93X3BvaW50IjpqLmFycm93VHlwZUVuZD0iYXJyb3dfcG9pbnQiO2JyZWFrO2Nhc2UiZG91YmxlX2Fycm93X2NpcmNsZSI6ai5hcnJvd1R5cGVTdGFydD0iYXJyb3dfY2lyY2xlIjtjYXNlImFycm93X2NpcmNsZSI6ai5hcnJvd1R5cGVFbmQ9ImFycm93X2NpcmNsZSI7YnJlYWt9bGV0IFI9IiIsSD0iIjtzd2l0Y2goRS5zdHJva2Upe2Nhc2Uibm9ybWFsIjpSPSJmaWxsOm5vbmU7IixtIT09dm9pZCAwJiYoUj1tKSxiIT09dm9pZCAwJiYoSD1iKSxqLnRoaWNrbmVzcz0ibm9ybWFsIixqLnBhdHRlcm49InNvbGlkIjticmVhaztjYXNlImRvdHRlZCI6ai50aGlja25lc3M9Im5vcm1hbCIsai5wYXR0ZXJuPSJkb3R0ZWQiLGouc3R5bGU9ImZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1kYXNoYXJyYXk6MzsiO2JyZWFrO2Nhc2UidGhpY2siOmoudGhpY2tuZXNzPSJ0aGljayIsai5wYXR0ZXJuPSJzb2xpZCIsai5zdHlsZT0ic3Ryb2tlLXdpZHRoOiAzLjVweDtmaWxsOm5vbmU7IjticmVhaztjYXNlImludmlzaWJsZSI6ai50aGlja25lc3M9ImludmlzaWJsZSIsai5wYXR0ZXJuPSJzb2xpZCIsai5zdHlsZT0ic3Ryb2tlLXdpZHRoOiAwO2ZpbGw6bm9uZTsiO2JyZWFrfWlmKEUuc3R5bGUhPT12b2lkIDApe2NvbnN0IFk9ZW0oRS5zdHlsZSk7Uj1ZLnN0eWxlLEg9WS5sYWJlbFN0eWxlfWouc3R5bGU9ai5zdHlsZSs9UixqLmxhYmVsU3R5bGU9ai5sYWJlbFN0eWxlKz1ILEUuaW50ZXJwb2xhdGUhPT12b2lkIDA/ai5jdXJ2ZT1aMihFLmludGVycG9sYXRlLGlnKTppLmRlZmF1bHRJbnRlcnBvbGF0ZSE9PXZvaWQgMD9qLmN1cnZlPVoyKGkuZGVmYXVsdEludGVycG9sYXRlLGlnKTpqLmN1cnZlPVoyKERCdC5jdXJ2ZSxpZyksRS50ZXh0PT09dm9pZCAwP0Uuc3R5bGUhPT12b2lkIDAmJihqLmFycm93aGVhZFN0eWxlPSJmaWxsOiAjMzMzIik6KGouYXJyb3doZWFkU3R5bGU9ImZpbGw6ICMzMzMiLGoubGFiZWxwb3M9ImMiKSxqLmxhYmVsVHlwZT1FLmxhYmVsVHlwZSxqLmxhYmVsPUUudGV4dC5yZXBsYWNlKHVpLmxpbmVCcmVha1JlZ2V4LGAKYCksRS5zdHlsZT09PXZvaWQgMCYmKGouc3R5bGU9ai5zdHlsZXx8InN0cm9rZTogIzMzMzsgc3Ryb2tlLXdpZHRoOiAxLjVweDtmaWxsOm5vbmU7Iiksai5sYWJlbFN0eWxlPWoubGFiZWxTdHlsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpLGouaWQ9QSxqLmNsYXNzZXM9ImZsb3djaGFydC1saW5rICIrUCsiICIrRixhLnNldEVkZ2UoRS5zdGFydCxFLmVuZCxqLHApfSl9LEwwdD17c2V0Q29uZjpDJGUsYWRkVmVydGljZXM6SUJ0LGFkZEVkZ2VzOk9CdCxnZXRDbGFzc2VzOmZ1bmN0aW9uKGksYSl7cmV0dXJuIGEuZGIuZ2V0Q2xhc3NlcygpfSxkcmF3OmFzeW5jIGZ1bmN0aW9uKGksYSxmLHApe1d0LmluZm8oIkRyYXdpbmcgZmxvd2NoYXJ0Iik7bGV0IHY9cC5kYi5nZXREaXJlY3Rpb24oKTt2PT09dm9pZCAwJiYodj0iVEQiKTtjb25zdHtzZWN1cml0eUxldmVsOm0sZmxvd2NoYXJ0OmJ9PURlKCksRT1iLm5vZGVTcGFjaW5nfHw1MCxDPWIucmFua1NwYWNpbmd8fDUwO2xldCBBO209PT0ic2FuZGJveCImJihBPXhyKCIjaSIrYSkpO2NvbnN0IFA9eHIobT09PSJzYW5kYm94Ij9BLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHk6ImJvZHkiKSxGPW09PT0ic2FuZGJveCI/QS5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudDpkb2N1bWVudCxqPW5ldyBsMSh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyYW5rZGlyOnYsbm9kZXNlcDpFLHJhbmtzZXA6QyxtYXJnaW54OjAsbWFyZ2lueTowfSkuc2V0RGVmYXVsdEVkZ2VMYWJlbChmdW5jdGlvbigpe3JldHVybnt9fSk7bGV0IFI7Y29uc3QgSD1wLmRiLmdldFN1YkdyYXBocygpO1d0LmluZm8oIlN1YmdyYXBocyAtICIsSCk7Zm9yKGxldCBrdD1ILmxlbmd0aC0xO2t0Pj0wO2t0LS0pUj1IW2t0XSxXdC5pbmZvKCJTdWJncmFwaCAtICIsUikscC5kYi5hZGRWZXJ0ZXgoUi5pZCx7dGV4dDpSLnRpdGxlLHR5cGU6Ui5sYWJlbFR5cGV9LCJncm91cCIsdm9pZCAwLFIuY2xhc3NlcyxSLmRpcik7Y29uc3QgWT1wLmRiLmdldFZlcnRpY2VzKCkscnQ9cC5kYi5nZXRFZGdlcygpO1d0LmluZm8oIkVkZ2VzIixydCk7bGV0IEo9MDtmb3IoSj1ILmxlbmd0aC0xO0o+PTA7Si0tKXtSPUhbSl0sWUx0KCJjbHVzdGVyIikuYXBwZW5kKCJ0ZXh0Iik7Zm9yKGxldCBrdD0wO2t0PFIubm9kZXMubGVuZ3RoO2t0KyspV3QuaW5mbygiU2V0dGluZyB1cCBzdWJncmFwaHMiLFIubm9kZXNba3RdLFIuaWQpLGouc2V0UGFyZW50KFIubm9kZXNba3RdLFIuaWQpfUlCdChZLGosYSxQLEYscCksT0J0KHJ0LGopO2NvbnN0IGl0PVAuc2VsZWN0KGBbaWQ9IiR7YX0iXWApLGZ0PVAuc2VsZWN0KCIjIithKyIgZyIpO2lmKGF3YWl0IEEwdChmdCxqLFsicG9pbnQiLCJjaXJjbGUiLCJjcm9zcyJdLCJmbG93Y2hhcnQiLGEpLHRvLmluc2VydFRpdGxlKGl0LCJmbG93Y2hhcnRUaXRsZVRleHQiLGIudGl0bGVUb3BNYXJnaW4scC5kYi5nZXREaWFncmFtVGl0bGUoKSksczkoaixpdCxiLmRpYWdyYW1QYWRkaW5nLGIudXNlTWF4V2lkdGgpLHAuZGIuaW5kZXhOb2Rlcygic3ViR3JhcGgiK0opLCFiLmh0bWxMYWJlbHMpe2NvbnN0IGt0PUYucXVlcnlTZWxlY3RvckFsbCgnW2lkPSInK2ErJyJdIC5lZGdlTGFiZWwgLmxhYmVsJyk7Zm9yKGNvbnN0IG10IG9mIGt0KXtjb25zdCBjdD1tdC5nZXRCQm94KCkseXQ9Ri5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicmVjdCIpO3l0LnNldEF0dHJpYnV0ZSgicngiLDApLHl0LnNldEF0dHJpYnV0ZSgicnkiLDApLHl0LnNldEF0dHJpYnV0ZSgid2lkdGgiLGN0LndpZHRoKSx5dC5zZXRBdHRyaWJ1dGUoImhlaWdodCIsY3QuaGVpZ2h0KSxtdC5pbnNlcnRCZWZvcmUoeXQsbXQuZmlyc3RDaGlsZCl9fU9iamVjdC5rZXlzKFkpLmZvckVhY2goZnVuY3Rpb24oa3Qpe2NvbnN0IG10PVlba3RdO2lmKG10Lmxpbmspe2NvbnN0IGN0PXhyKCIjIithKycgW2lkPSInK2t0KyciXScpO2lmKGN0KXtjb25zdCB5dD1GLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhIik7eXQuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiY2xhc3MiLG10LmNsYXNzZXMuam9pbigiICIpKSx5dC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJocmVmIixtdC5saW5rKSx5dC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJyZWwiLCJub29wZW5lciIpLG09PT0ic2FuZGJveCI/eXQuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGFyZ2V0IiwiX3RvcCIpOm10LmxpbmtUYXJnZXQmJnl0LnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRhcmdldCIsbXQubGlua1RhcmdldCk7Y29uc3Qgc3Q9Y3QuaW5zZXJ0KGZ1bmN0aW9uKCl7cmV0dXJuIHl0fSwiOmZpcnN0LWNoaWxkIikseHQ9Y3Quc2VsZWN0KCIubGFiZWwtY29udGFpbmVyIik7eHQmJnN0LmFwcGVuZChmdW5jdGlvbigpe3JldHVybiB4dC5ub2RlKCl9KTtjb25zdCBodD1jdC5zZWxlY3QoIi5sYWJlbCIpO2h0JiZzdC5hcHBlbmQoZnVuY3Rpb24oKXtyZXR1cm4gaHQubm9kZSgpfSl9fX0pfX0sUyRlPShpLGEpPT57Y29uc3QgZj1GOWUscD1mKGksInIiKSx2PWYoaSwiZyIpLG09ZihpLCJiIik7cmV0dXJuIElBKHAsdixtLGEpfSxOQnQ9aT0+YC5sYWJlbCB7CiAgICBmb250LWZhbWlseTogJHtpLmZvbnRGYW1pbHl9OwogICAgY29sb3I6ICR7aS5ub2RlVGV4dENvbG9yfHxpLnRleHRDb2xvcn07CiAgfQogIC5jbHVzdGVyLWxhYmVsIHRleHQgewogICAgZmlsbDogJHtpLnRpdGxlQ29sb3J9OwogIH0KICAuY2x1c3Rlci1sYWJlbCBzcGFuLHAgewogICAgY29sb3I6ICR7aS50aXRsZUNvbG9yfTsKICB9CgogIC5sYWJlbCB0ZXh0LHNwYW4scCB7CiAgICBmaWxsOiAke2kubm9kZVRleHRDb2xvcnx8aS50ZXh0Q29sb3J9OwogICAgY29sb3I6ICR7aS5ub2RlVGV4dENvbG9yfHxpLnRleHRDb2xvcn07CiAgfQoKICAubm9kZSByZWN0LAogIC5ub2RlIGNpcmNsZSwKICAubm9kZSBlbGxpcHNlLAogIC5ub2RlIHBvbHlnb24sCiAgLm5vZGUgcGF0aCB7CiAgICBmaWxsOiAke2kubWFpbkJrZ307CiAgICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KICAuZmxvd2NoYXJ0LWxhYmVsIHRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICB9CiAgLy8gLmZsb3djaGFydC1sYWJlbCAudGV4dC1vdXRlci10c3BhbiB7CiAgLy8gICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogIC8vIH0KICAvLyAuZmxvd2NoYXJ0LWxhYmVsIC50ZXh0LWlubmVyLXRzcGFuIHsKICAvLyAgIHRleHQtYW5jaG9yOiBzdGFydDsKICAvLyB9CgogIC5ub2RlIC5sYWJlbCB7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgfQogIC5ub2RlLmNsaWNrYWJsZSB7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgfQoKICAuYXJyb3doZWFkUGF0aCB7CiAgICBmaWxsOiAke2kuYXJyb3doZWFkQ29sb3J9OwogIH0KCiAgLmVkZ2VQYXRoIC5wYXRoIHsKICAgIHN0cm9rZTogJHtpLmxpbmVDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDIuMHB4OwogIH0KCiAgLmZsb3djaGFydC1saW5rIHsKICAgIHN0cm9rZTogJHtpLmxpbmVDb2xvcn07CiAgICBmaWxsOiBub25lOwogIH0KCiAgLmVkZ2VMYWJlbCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2kuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICByZWN0IHsKICAgICAgb3BhY2l0eTogMC41OwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2kuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICAgIGZpbGw6ICR7aS5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICAgIH0KICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICB9CgogIC8qIEZvciBodG1sIGxhYmVscyBvbmx5ICovCiAgLmxhYmVsQmtnIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICR7UyRlKGkuZWRnZUxhYmVsQmFja2dyb3VuZCwuNSl9OwogICAgLy8gYmFja2dyb3VuZC1jb2xvcjogCiAgfQoKICAuY2x1c3RlciByZWN0IHsKICAgIGZpbGw6ICR7aS5jbHVzdGVyQmtnfTsKICAgIHN0cm9rZTogJHtpLmNsdXN0ZXJCb3JkZXJ9OwogICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgfQoKICAuY2x1c3RlciB0ZXh0IHsKICAgIGZpbGw6ICR7aS50aXRsZUNvbG9yfTsKICB9CgogIC5jbHVzdGVyIHNwYW4scCB7CiAgICBjb2xvcjogJHtpLnRpdGxlQ29sb3J9OwogIH0KICAvKiAuY2x1c3RlciBkaXYgewogICAgY29sb3I6ICR7aS50aXRsZUNvbG9yfTsKICB9ICovCgogIGRpdi5tZXJtYWlkVG9vbHRpcCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBtYXgtd2lkdGg6IDIwMHB4OwogICAgcGFkZGluZzogMnB4OwogICAgZm9udC1mYW1pbHk6ICR7aS5mb250RmFtaWx5fTsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGJhY2tncm91bmQ6ICR7aS50ZXJ0aWFyeUNvbG9yfTsKICAgIGJvcmRlcjogMXB4IHNvbGlkICR7aS5ib3JkZXIyfTsKICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgei1pbmRleDogMTAwOwogIH0KCiAgLmZsb3djaGFydFRpdGxlVGV4dCB7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogICAgZm9udC1zaXplOiAxOHB4OwogICAgZmlsbDogJHtpLnRleHRDb2xvcn07CiAgfQpgLEEkZT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7cGFyc2VyOkZkdCxkYjpoOSxyZW5kZXJlcjpMMHQsc3R5bGVzOk5CdCxpbml0Omk9PntpLmZsb3djaGFydHx8KGkuZmxvd2NoYXJ0PXt9KSxpLmZsb3djaGFydC5hcnJvd01hcmtlckFic29sdXRlPWkuYXJyb3dNYXJrZXJBYnNvbHV0ZSxJQmUuc2V0Q29uZihpLmZsb3djaGFydCksaDkuY2xlYXIoKSxoOS5zZXRHZW4oImdlbi0xIil9fX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxMJGU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpGZHQsZGI6aDkscmVuZGVyZXI6TDB0LHN0eWxlczpOQnQsaW5pdDppPT57aS5mbG93Y2hhcnR8fChpLmZsb3djaGFydD17fSksaS5mbG93Y2hhcnQuYXJyb3dNYXJrZXJBYnNvbHV0ZT1pLmFycm93TWFya2VyQWJzb2x1dGUsZU90KHtmbG93Y2hhcnQ6e2Fycm93TWFya2VyQWJzb2x1dGU6aS5hcnJvd01hcmtlckFic29sdXRlfX0pLEwwdC5zZXRDb25mKGkuZmxvd2NoYXJ0KSxoOS5jbGVhcigpLGg5LnNldEdlbigiZ2VuLTIiKX19fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBNMHQ9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihkdCxDdCx0dCxQdCl7Zm9yKHR0PXR0fHx7fSxQdD1kdC5sZW5ndGg7UHQtLTt0dFtkdFtQdF1dPUN0KTtyZXR1cm4gdHR9LGE9WzEsMl0sZj1bMSw1XSxwPVs2LDksMTEsMjMsMjUsMjcsMjksMzAsMzEsNTJdLHY9WzEsMTddLG09WzEsMThdLGI9WzEsMTldLEU9WzEsMjBdLEM9WzEsMjFdLEE9WzEsMjJdLFA9WzEsMjVdLEY9WzEsMzBdLGo9WzEsMzFdLFI9WzEsMzJdLEg9WzEsMzNdLFk9WzEsMzRdLHJ0PVs2LDksMTEsMTUsMjAsMjMsMjUsMjcsMjksMzAsMzEsNDQsNDUsNDYsNDcsNDgsNTJdLEo9WzEsNDZdLGl0PVszMCwzMSw0OSw1MF0sZnQ9WzQsNiw5LDExLDIzLDI1LDI3LDI5LDMwLDMxLDUyXSxUdD1bNDQsNDUsNDYsNDcsNDhdLGt0PVsyMiwzN10sbXQ9WzEsNjZdLGN0PVsxLDY1XSx5dD1bMjIsMzcsMzksNDFdLHN0PXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxFUl9ESUFHUkFNOjQsZG9jdW1lbnQ6NSxFT0Y6NixkaXJlY3RpdmU6NyxsaW5lOjgsU1BBQ0U6OSxzdGF0ZW1lbnQ6MTAsTkVXTElORToxMSxvcGVuRGlyZWN0aXZlOjEyLHR5cGVEaXJlY3RpdmU6MTMsY2xvc2VEaXJlY3RpdmU6MTQsIjoiOjE1LGFyZ0RpcmVjdGl2ZToxNixlbnRpdHlOYW1lOjE3LHJlbFNwZWM6MTgscm9sZToxOSxCTE9DS19TVEFSVDoyMCxhdHRyaWJ1dGVzOjIxLEJMT0NLX1NUT1A6MjIsdGl0bGU6MjMsdGl0bGVfdmFsdWU6MjQsYWNjX3RpdGxlOjI1LGFjY190aXRsZV92YWx1ZToyNixhY2NfZGVzY3I6MjcsYWNjX2Rlc2NyX3ZhbHVlOjI4LGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MjksQUxQSEFOVU06MzAsRU5USVRZX05BTUU6MzEsYXR0cmlidXRlOjMyLGF0dHJpYnV0ZVR5cGU6MzMsYXR0cmlidXRlTmFtZTozNCxhdHRyaWJ1dGVLZXlUeXBlTGlzdDozNSxhdHRyaWJ1dGVDb21tZW50OjM2LEFUVFJJQlVURV9XT1JEOjM3LGF0dHJpYnV0ZUtleVR5cGU6MzgsQ09NTUE6MzksQVRUUklCVVRFX0tFWTo0MCxDT01NRU5UOjQxLGNhcmRpbmFsaXR5OjQyLHJlbFR5cGU6NDMsWkVST19PUl9PTkU6NDQsWkVST19PUl9NT1JFOjQ1LE9ORV9PUl9NT1JFOjQ2LE9OTFlfT05FOjQ3LE1EX1BBUkVOVDo0OCxOT05fSURFTlRJRllJTkc6NDksSURFTlRJRllJTkc6NTAsV09SRDo1MSxvcGVuX2RpcmVjdGl2ZTo1Mix0eXBlX2RpcmVjdGl2ZTo1MyxhcmdfZGlyZWN0aXZlOjU0LGNsb3NlX2RpcmVjdGl2ZTo1NSwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiRVJfRElBR1JBTSIsNjoiRU9GIiw5OiJTUEFDRSIsMTE6Ik5FV0xJTkUiLDE1OiI6IiwyMDoiQkxPQ0tfU1RBUlQiLDIyOiJCTE9DS19TVE9QIiwyMzoidGl0bGUiLDI0OiJ0aXRsZV92YWx1ZSIsMjU6ImFjY190aXRsZSIsMjY6ImFjY190aXRsZV92YWx1ZSIsMjc6ImFjY19kZXNjciIsMjg6ImFjY19kZXNjcl92YWx1ZSIsMjk6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDMwOiJBTFBIQU5VTSIsMzE6IkVOVElUWV9OQU1FIiwzNzoiQVRUUklCVVRFX1dPUkQiLDM5OiJDT01NQSIsNDA6IkFUVFJJQlVURV9LRVkiLDQxOiJDT01NRU5UIiw0NDoiWkVST19PUl9PTkUiLDQ1OiJaRVJPX09SX01PUkUiLDQ2OiJPTkVfT1JfTU9SRSIsNDc6Ik9OTFlfT05FIiw0ODoiTURfUEFSRU5UIiw0OToiTk9OX0lERU5USUZZSU5HIiw1MDoiSURFTlRJRllJTkciLDUxOiJXT1JEIiw1Mjoib3Blbl9kaXJlY3RpdmUiLDUzOiJ0eXBlX2RpcmVjdGl2ZSIsNTQ6ImFyZ19kaXJlY3RpdmUiLDU1OiJjbG9zZV9kaXJlY3RpdmUifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzMsMl0sWzUsMF0sWzUsMl0sWzgsMl0sWzgsMV0sWzgsMV0sWzgsMV0sWzcsNF0sWzcsNl0sWzEwLDFdLFsxMCw1XSxbMTAsNF0sWzEwLDNdLFsxMCwxXSxbMTAsMl0sWzEwLDJdLFsxMCwyXSxbMTAsMV0sWzE3LDFdLFsxNywxXSxbMjEsMV0sWzIxLDJdLFszMiwyXSxbMzIsM10sWzMyLDNdLFszMiw0XSxbMzMsMV0sWzM0LDFdLFszNSwxXSxbMzUsM10sWzM4LDFdLFszNiwxXSxbMTgsM10sWzQyLDFdLFs0MiwxXSxbNDIsMV0sWzQyLDFdLFs0MiwxXSxbNDMsMV0sWzQzLDFdLFsxOSwxXSxbMTksMV0sWzE5LDFdLFsxMiwxXSxbMTMsMV0sWzE2LDFdLFsxNCwxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihDdCx0dCxQdCxwdCxGdCxYLFJ0KXt2YXIgQnQ9WC5sZW5ndGgtMTtzd2l0Y2goRnQpe2Nhc2UgMTpicmVhaztjYXNlIDM6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgNDpYW0J0LTFdLnB1c2goWFtCdF0pLHRoaXMuJD1YW0J0LTFdO2JyZWFrO2Nhc2UgNTpjYXNlIDY6dGhpcy4kPVhbQnRdO2JyZWFrO2Nhc2UgNzpjYXNlIDg6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMTI6cHQuYWRkRW50aXR5KFhbQnQtNF0pLHB0LmFkZEVudGl0eShYW0J0LTJdKSxwdC5hZGRSZWxhdGlvbnNoaXAoWFtCdC00XSxYW0J0XSxYW0J0LTJdLFhbQnQtM10pO2JyZWFrO2Nhc2UgMTM6cHQuYWRkRW50aXR5KFhbQnQtM10pLHB0LmFkZEF0dHJpYnV0ZXMoWFtCdC0zXSxYW0J0LTFdKTticmVhaztjYXNlIDE0OnB0LmFkZEVudGl0eShYW0J0LTJdKTticmVhaztjYXNlIDE1OnB0LmFkZEVudGl0eShYW0J0XSk7YnJlYWs7Y2FzZSAxNjpjYXNlIDE3OnRoaXMuJD1YW0J0XS50cmltKCkscHQuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDE4OmNhc2UgMTk6dGhpcy4kPVhbQnRdLnRyaW0oKSxwdC5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgMjA6Y2FzZSA0NDp0aGlzLiQ9WFtCdF07YnJlYWs7Y2FzZSAyMTpjYXNlIDQyOmNhc2UgNDM6dGhpcy4kPVhbQnRdLnJlcGxhY2UoLyIvZywiIik7YnJlYWs7Y2FzZSAyMjpjYXNlIDMwOnRoaXMuJD1bWFtCdF1dO2JyZWFrO2Nhc2UgMjM6WFtCdF0ucHVzaChYW0J0LTFdKSx0aGlzLiQ9WFtCdF07YnJlYWs7Y2FzZSAyNDp0aGlzLiQ9e2F0dHJpYnV0ZVR5cGU6WFtCdC0xXSxhdHRyaWJ1dGVOYW1lOlhbQnRdfTticmVhaztjYXNlIDI1OnRoaXMuJD17YXR0cmlidXRlVHlwZTpYW0J0LTJdLGF0dHJpYnV0ZU5hbWU6WFtCdC0xXSxhdHRyaWJ1dGVLZXlUeXBlTGlzdDpYW0J0XX07YnJlYWs7Y2FzZSAyNjp0aGlzLiQ9e2F0dHJpYnV0ZVR5cGU6WFtCdC0yXSxhdHRyaWJ1dGVOYW1lOlhbQnQtMV0sYXR0cmlidXRlQ29tbWVudDpYW0J0XX07YnJlYWs7Y2FzZSAyNzp0aGlzLiQ9e2F0dHJpYnV0ZVR5cGU6WFtCdC0zXSxhdHRyaWJ1dGVOYW1lOlhbQnQtMl0sYXR0cmlidXRlS2V5VHlwZUxpc3Q6WFtCdC0xXSxhdHRyaWJ1dGVDb21tZW50OlhbQnRdfTticmVhaztjYXNlIDI4OmNhc2UgMjk6Y2FzZSAzMjp0aGlzLiQ9WFtCdF07YnJlYWs7Y2FzZSAzMTpYW0J0LTJdLnB1c2goWFtCdF0pLHRoaXMuJD1YW0J0LTJdO2JyZWFrO2Nhc2UgMzM6dGhpcy4kPVhbQnRdLnJlcGxhY2UoLyIvZywiIik7YnJlYWs7Y2FzZSAzNDp0aGlzLiQ9e2NhcmRBOlhbQnRdLHJlbFR5cGU6WFtCdC0xXSxjYXJkQjpYW0J0LTJdfTticmVhaztjYXNlIDM1OnRoaXMuJD1wdC5DYXJkaW5hbGl0eS5aRVJPX09SX09ORTticmVhaztjYXNlIDM2OnRoaXMuJD1wdC5DYXJkaW5hbGl0eS5aRVJPX09SX01PUkU7YnJlYWs7Y2FzZSAzNzp0aGlzLiQ9cHQuQ2FyZGluYWxpdHkuT05FX09SX01PUkU7YnJlYWs7Y2FzZSAzODp0aGlzLiQ9cHQuQ2FyZGluYWxpdHkuT05MWV9PTkU7YnJlYWs7Y2FzZSAzOTp0aGlzLiQ9cHQuQ2FyZGluYWxpdHkuTURfUEFSRU5UO2JyZWFrO2Nhc2UgNDA6dGhpcy4kPXB0LklkZW50aWZpY2F0aW9uLk5PTl9JREVOVElGWUlORzticmVhaztjYXNlIDQxOnRoaXMuJD1wdC5JZGVudGlmaWNhdGlvbi5JREVOVElGWUlORzticmVhaztjYXNlIDQ1OnB0LnBhcnNlRGlyZWN0aXZlKCIlJXsiLCJvcGVuX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgNDY6cHQucGFyc2VEaXJlY3RpdmUoWFtCdF0sInR5cGVfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA0NzpYW0J0XT1YW0J0XS50cmltKCkucmVwbGFjZSgvJy9nLCciJykscHQucGFyc2VEaXJlY3RpdmUoWFtCdF0sImFyZ19kaXJlY3RpdmUiKTticmVhaztjYXNlIDQ4OnB0LnBhcnNlRGlyZWN0aXZlKCJ9JSUiLCJjbG9zZV9kaXJlY3RpdmUiLCJlciIpO2JyZWFrfX0sdGFibGU6W3szOjEsNDphLDc6MywxMjo0LDUyOmZ9LHsxOlszXX0saShwLFsyLDNdLHs1OjZ9KSx7Mzo3LDQ6YSw3OjMsMTI6NCw1MjpmfSx7MTM6OCw1MzpbMSw5XX0sezUzOlsyLDQ1XX0sezY6WzEsMTBdLDc6MTUsODoxMSw5OlsxLDEyXSwxMDoxMywxMTpbMSwxNF0sMTI6NCwxNzoxNiwyMzp2LDI1Om0sMjc6YiwyOTpFLDMwOkMsMzE6QSw1MjpmfSx7MTpbMiwyXX0sezE0OjIzLDE1OlsxLDI0XSw1NTpQfSxpKFsxNSw1NV0sWzIsNDZdKSxpKHAsWzIsOF0sezE6WzIsMV19KSxpKHAsWzIsNF0pLHs3OjE1LDEwOjI2LDEyOjQsMTc6MTYsMjM6diwyNTptLDI3OmIsMjk6RSwzMDpDLDMxOkEsNTI6Zn0saShwLFsyLDZdKSxpKHAsWzIsN10pLGkocCxbMiwxMV0pLGkocCxbMiwxNV0sezE4OjI3LDQyOjI5LDIwOlsxLDI4XSw0NDpGLDQ1OmosNDY6Uiw0NzpILDQ4Oll9KSx7MjQ6WzEsMzVdfSx7MjY6WzEsMzZdfSx7Mjg6WzEsMzddfSxpKHAsWzIsMTldKSxpKHJ0LFsyLDIwXSksaShydCxbMiwyMV0pLHsxMTpbMSwzOF19LHsxNjozOSw1NDpbMSw0MF19LHsxMTpbMiw0OF19LGkocCxbMiw1XSksezE3OjQxLDMwOkMsMzE6QX0sezIxOjQyLDIyOlsxLDQzXSwzMjo0NCwzMzo0NSwzNzpKfSx7NDM6NDcsNDk6WzEsNDhdLDUwOlsxLDQ5XX0saShpdCxbMiwzNV0pLGkoaXQsWzIsMzZdKSxpKGl0LFsyLDM3XSksaShpdCxbMiwzOF0pLGkoaXQsWzIsMzldKSxpKHAsWzIsMTZdKSxpKHAsWzIsMTddKSxpKHAsWzIsMThdKSxpKGZ0LFsyLDldKSx7MTQ6NTAsNTU6UH0sezU1OlsyLDQ3XX0sezE1OlsxLDUxXX0sezIyOlsxLDUyXX0saShwLFsyLDE0XSksezIxOjUzLDIyOlsyLDIyXSwzMjo0NCwzMzo0NSwzNzpKfSx7MzQ6NTQsMzc6WzEsNTVdfSx7Mzc6WzIsMjhdfSx7NDI6NTYsNDQ6Riw0NTpqLDQ2OlIsNDc6SCw0ODpZfSxpKFR0LFsyLDQwXSksaShUdCxbMiw0MV0pLHsxMTpbMSw1N119LHsxOTo1OCwzMDpbMSw2MV0sMzE6WzEsNjBdLDUxOlsxLDU5XX0saShwLFsyLDEzXSksezIyOlsyLDIzXX0saShrdCxbMiwyNF0sezM1OjYyLDM2OjYzLDM4OjY0LDQwOm10LDQxOmN0fSksaShbMjIsMzcsNDAsNDFdLFsyLDI5XSksaShbMzAsMzFdLFsyLDM0XSksaShmdCxbMiwxMF0pLGkocCxbMiwxMl0pLGkocCxbMiw0Ml0pLGkocCxbMiw0M10pLGkocCxbMiw0NF0pLGkoa3QsWzIsMjVdLHszNjo2NywzOTpbMSw2OF0sNDE6Y3R9KSxpKGt0LFsyLDI2XSksaSh5dCxbMiwzMF0pLGkoa3QsWzIsMzNdKSxpKHl0LFsyLDMyXSksaShrdCxbMiwyN10pLHszODo2OSw0MDptdH0saSh5dCxbMiwzMV0pXSxkZWZhdWx0QWN0aW9uczp7NTpbMiw0NV0sNzpbMiwyXSwyNTpbMiw0OF0sNDA6WzIsNDddLDQ2OlsyLDI4XSw1MzpbMiwyM119LHBhcnNlRXJyb3I6ZnVuY3Rpb24oQ3QsdHQpe2lmKHR0LnJlY292ZXJhYmxlKXRoaXMudHJhY2UoQ3QpO2Vsc2V7dmFyIFB0PW5ldyBFcnJvcihDdCk7dGhyb3cgUHQuaGFzaD10dCxQdH19LHBhcnNlOmZ1bmN0aW9uKEN0KXt2YXIgdHQ9dGhpcyxQdD1bMF0scHQ9W10sRnQ9W251bGxdLFg9W10sUnQ9dGhpcy50YWJsZSxCdD0iIix2dD0wLE90PTAsVnQ9MixxZT0xLF9uPVguc2xpY2UuY2FsbChhcmd1bWVudHMsMSksVGU9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxXbj17eXk6e319O2Zvcih2YXIgQWUgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxBZSkmJihXbi55eVtBZV09dGhpcy55eVtBZV0pO1RlLnNldElucHV0KEN0LFduLnl5KSxXbi55eS5sZXhlcj1UZSxXbi55eS5wYXJzZXI9dGhpcyx0eXBlb2YgVGUueXlsbG9jPiJ1IiYmKFRlLnl5bGxvYz17fSk7dmFyIG5lPVRlLnl5bGxvYztYLnB1c2gobmUpO3ZhciBrZT1UZS5vcHRpb25zJiZUZS5vcHRpb25zLnJhbmdlczt0eXBlb2YgV24ueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9V24ueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gVmUoKXt2YXIgU2U7cmV0dXJuIFNlPXB0LnBvcCgpfHxUZS5sZXgoKXx8cWUsdHlwZW9mIFNlIT0ibnVtYmVyIiYmKFNlIGluc3RhbmNlb2YgQXJyYXkmJihwdD1TZSxTZT1wdC5wb3AoKSksU2U9dHQuc3ltYm9sc19bU2VdfHxTZSksU2V9Zm9yKHZhciBFZSxIZSxDZSwkZSx5ZT17fSxmbixZdCxNaSxxdDs7KXtpZihIZT1QdFtQdC5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tIZV0/Q2U9dGhpcy5kZWZhdWx0QWN0aW9uc1tIZV06KChFZT09PW51bGx8fHR5cGVvZiBFZT4idSIpJiYoRWU9VmUoKSksQ2U9UnRbSGVdJiZSdFtIZV1bRWVdKSx0eXBlb2YgQ2U+InUifHwhQ2UubGVuZ3RofHwhQ2VbMF0pe3ZhciB6aT0iIjtxdD1bXTtmb3IoZm4gaW4gUnRbSGVdKXRoaXMudGVybWluYWxzX1tmbl0mJmZuPlZ0JiZxdC5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bZm5dKyInIik7VGUuc2hvd1Bvc2l0aW9uP3ppPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKHZ0KzEpK2A6CmArVGUuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtxdC5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW0VlXXx8RWUpKyInIjp6aT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyh2dCsxKSsiOiBVbmV4cGVjdGVkICIrKEVlPT1xZT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tFZV18fEVlKSsiJyIpLHRoaXMucGFyc2VFcnJvcih6aSx7dGV4dDpUZS5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bRWVdfHxFZSxsaW5lOlRlLnl5bGluZW5vLGxvYzpuZSxleHBlY3RlZDpxdH0pfWlmKENlWzBdaW5zdGFuY2VvZiBBcnJheSYmQ2UubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitIZSsiLCB0b2tlbjogIitFZSk7c3dpdGNoKENlWzBdKXtjYXNlIDE6UHQucHVzaChFZSksRnQucHVzaChUZS55eXRleHQpLFgucHVzaChUZS55eWxsb2MpLFB0LnB1c2goQ2VbMV0pLEVlPW51bGwsT3Q9VGUueXlsZW5nLEJ0PVRlLnl5dGV4dCx2dD1UZS55eWxpbmVubyxuZT1UZS55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKFl0PXRoaXMucHJvZHVjdGlvbnNfW0NlWzFdXVsxXSx5ZS4kPUZ0W0Z0Lmxlbmd0aC1ZdF0seWUuXyQ9e2ZpcnN0X2xpbmU6WFtYLmxlbmd0aC0oWXR8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpYW1gubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46WFtYLmxlbmd0aC0oWXR8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46WFtYLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sa2UmJih5ZS5fJC5yYW5nZT1bWFtYLmxlbmd0aC0oWXR8fDEpXS5yYW5nZVswXSxYW1gubGVuZ3RoLTFdLnJhbmdlWzFdXSksJGU9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KHllLFtCdCxPdCx2dCxXbi55eSxDZVsxXSxGdCxYXS5jb25jYXQoX24pKSx0eXBlb2YgJGU8InUiKXJldHVybiAkZTtZdCYmKFB0PVB0LnNsaWNlKDAsLTEqWXQqMiksRnQ9RnQuc2xpY2UoMCwtMSpZdCksWD1YLnNsaWNlKDAsLTEqWXQpKSxQdC5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW0NlWzFdXVswXSksRnQucHVzaCh5ZS4kKSxYLnB1c2goeWUuXyQpLE1pPVJ0W1B0W1B0Lmxlbmd0aC0yXV1bUHRbUHQubGVuZ3RoLTFdXSxQdC5wdXNoKE1pKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0seHQ9ZnVuY3Rpb24oKXt2YXIgZHQ9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24odHQsUHQpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IodHQsUHQpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKHR0KX0sc2V0SW5wdXQ6ZnVuY3Rpb24oQ3QsdHQpe3JldHVybiB0aGlzLnl5PXR0fHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1DdCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgQ3Q9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPUN0LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1DdCx0aGlzLm1hdGNoZWQrPUN0O3ZhciB0dD1DdC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIHR0Pyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxDdH0sdW5wdXQ6ZnVuY3Rpb24oQ3Qpe3ZhciB0dD1DdC5sZW5ndGgsUHQ9Q3Quc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1DdCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtdHQpLHRoaXMub2Zmc2V0LT10dDt2YXIgcHQ9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksUHQubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1QdC5sZW5ndGgtMSk7dmFyIEZ0PXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpQdD8oUHQubGVuZ3RoPT09cHQubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStwdFtwdC5sZW5ndGgtUHQubGVuZ3RoXS5sZW5ndGgtUHRbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi10dH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtGdFswXSxGdFswXSt0aGlzLnl5bGVuZy10dF0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKEN0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoQ3QpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIEN0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oQ3QubGVuZ3RoPjIwPyIuLi4iOiIiKStDdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciBDdD10aGlzLm1hdGNoO3JldHVybiBDdC5sZW5ndGg8MjAmJihDdCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtQ3QubGVuZ3RoKSksKEN0LnN1YnN0cigwLDIwKSsoQ3QubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBDdD10aGlzLnBhc3RJbnB1dCgpLHR0PW5ldyBBcnJheShDdC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBDdCt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArdHQrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKEN0LHR0KXt2YXIgUHQscHQsRnQ7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKEZ0PXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKEZ0Lnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLHB0PUN0WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxwdCYmKHRoaXMueXlsaW5lbm8rPXB0Lmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnB0P3B0W3B0Lmxlbmd0aC0xXS5sZW5ndGgtcHRbcHQubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rQ3RbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9Q3RbMF0sdGhpcy5tYXRjaCs9Q3RbMF0sdGhpcy5tYXRjaGVzPUN0LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKEN0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1DdFswXSxQdD10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyx0dCx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxQdClyZXR1cm4gUHQ7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIFggaW4gRnQpdGhpc1tYXT1GdFtYXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBDdCx0dCxQdCxwdDt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBGdD10aGlzLl9jdXJyZW50UnVsZXMoKSxYPTA7WDxGdC5sZW5ndGg7WCsrKWlmKFB0PXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbRnRbWF1dKSxQdCYmKCF0dHx8UHRbMF0ubGVuZ3RoPnR0WzBdLmxlbmd0aCkpe2lmKHR0PVB0LHB0PVgsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoQ3Q9dGhpcy50ZXN0X21hdGNoKFB0LEZ0W1hdKSxDdCE9PSExKXJldHVybiBDdDtpZih0aGlzLl9iYWNrdHJhY2spe3R0PSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIHR0PyhDdD10aGlzLnRlc3RfbWF0Y2godHQsRnRbcHRdKSxDdCE9PSExP0N0OiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgdHQ9dGhpcy5uZXh0KCk7cmV0dXJuIHR0fHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbih0dCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHR0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgdHQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gdHQ+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbih0dCl7cmV0dXJuIHR0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHR8fDApLHR0Pj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdHRdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKHR0KXt0aGlzLmJlZ2luKHR0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0dCxQdCxwdCxGdCl7c3dpdGNoKHB0KXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDI1O2Nhc2UgMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2Nhc2UgMjpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMjc7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7Y2FzZSA0OnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDU6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNjpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSA3OnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLDUyO2Nhc2UgODpyZXR1cm4gdGhpcy5iZWdpbigidHlwZV9kaXJlY3RpdmUiKSw1MztjYXNlIDk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJhcmdfZGlyZWN0aXZlIiksMTU7Y2FzZSAxMDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSw1NTtjYXNlIDExOnJldHVybiA1NDtjYXNlIDEyOnJldHVybiAxMTtjYXNlIDEzOmJyZWFrO2Nhc2UgMTQ6cmV0dXJuIDk7Y2FzZSAxNTpyZXR1cm4gMzE7Y2FzZSAxNjpyZXR1cm4gNTE7Y2FzZSAxNzpyZXR1cm4gNDtjYXNlIDE4OnJldHVybiB0aGlzLmJlZ2luKCJibG9jayIpLDIwO2Nhc2UgMTk6cmV0dXJuIDM5O2Nhc2UgMjA6YnJlYWs7Y2FzZSAyMTpyZXR1cm4gNDA7Y2FzZSAyMjpyZXR1cm4gMzc7Y2FzZSAyMzpyZXR1cm4gMzc7Y2FzZSAyNDpyZXR1cm4gNDE7Y2FzZSAyNTpicmVhaztjYXNlIDI2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMjI7Y2FzZSAyNzpyZXR1cm4gUHQueXl0ZXh0WzBdO2Nhc2UgMjg6cmV0dXJuIDQ0O2Nhc2UgMjk6cmV0dXJuIDQ2O2Nhc2UgMzA6cmV0dXJuIDQ2O2Nhc2UgMzE6cmV0dXJuIDQ2O2Nhc2UgMzI6cmV0dXJuIDQ0O2Nhc2UgMzM6cmV0dXJuIDQ0O2Nhc2UgMzQ6cmV0dXJuIDQ1O2Nhc2UgMzU6cmV0dXJuIDQ1O2Nhc2UgMzY6cmV0dXJuIDQ1O2Nhc2UgMzc6cmV0dXJuIDQ1O2Nhc2UgMzg6cmV0dXJuIDQ1O2Nhc2UgMzk6cmV0dXJuIDQ2O2Nhc2UgNDA6cmV0dXJuIDQ1O2Nhc2UgNDE6cmV0dXJuIDQ2O2Nhc2UgNDI6cmV0dXJuIDQ3O2Nhc2UgNDM6cmV0dXJuIDQ3O2Nhc2UgNDQ6cmV0dXJuIDQ3O2Nhc2UgNDU6cmV0dXJuIDQ3O2Nhc2UgNDY6cmV0dXJuIDQ0O2Nhc2UgNDc6cmV0dXJuIDQ1O2Nhc2UgNDg6cmV0dXJuIDQ2O2Nhc2UgNDk6cmV0dXJuIDQ4O2Nhc2UgNTA6cmV0dXJuIDQ5O2Nhc2UgNTE6cmV0dXJuIDUwO2Nhc2UgNTI6cmV0dXJuIDUwO2Nhc2UgNTM6cmV0dXJuIDQ5O2Nhc2UgNTQ6cmV0dXJuIDQ5O2Nhc2UgNTU6cmV0dXJuIDQ5O2Nhc2UgNTY6cmV0dXJuIDMwO2Nhc2UgNTc6cmV0dXJuIFB0Lnl5dGV4dFswXTtjYXNlIDU4OnJldHVybiA2fX0scnVsZXM6Wy9eKD86YWNjVGl0bGVccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccypce1xzKikvaSwvXig/OltcfV0pL2ksL14oPzpbXlx9XSopL2ksL14oPzolJVx7KS9pLC9eKD86KCg/Oig/IVx9JSUpW146Ll0pKikpL2ksL14oPzo6KS9pLC9eKD86XH0lJSkvaSwvXig/OigoPzooPyFcfSUlKS58XG4pKikpL2ksL14oPzpbXG5dKykvaSwvXig/OlxzKykvaSwvXig/Oltcc10rKS9pLC9eKD86IlteIiVcclxuXHZcYlxcXSsiKS9pLC9eKD86IlteIl0qIikvaSwvXig/OmVyRGlhZ3JhbVxiKS9pLC9eKD86XHspL2ksL14oPzosKS9pLC9eKD86XHMrKS9pLC9eKD86XGIoKD86UEspfCg/OkZLKXwoPzpVSykpXGIpL2ksL14oPzooLio/KVt+XSguKj8pKlt+XSkvaSwvXig/OltcKkEtWmEtel9dW0EtWmEtejAtOVwtX1xbXF1cKFwpXSopL2ksL14oPzoiW14iXSoiKS9pLC9eKD86W1xuXSspL2ksL14oPzpcfSkvaSwvXig/Oi4pL2ksL14oPzpvbmUgb3IgemVyb1xiKS9pLC9eKD86b25lIG9yIG1vcmVcYikvaSwvXig/Om9uZSBvciBtYW55XGIpL2ksL14oPzoxXCspL2ksL14oPzpcfG9cYikvaSwvXig/Onplcm8gb3Igb25lXGIpL2ksL14oPzp6ZXJvIG9yIG1vcmVcYikvaSwvXig/Onplcm8gb3IgbWFueVxiKS9pLC9eKD86MFwrKS9pLC9eKD86XH1vXGIpL2ksL14oPzptYW55XCgwXCkpL2ksL14oPzptYW55XCgxXCkpL2ksL14oPzptYW55XGIpL2ksL14oPzpcfVx8KS9pLC9eKD86b25lXGIpL2ksL14oPzpvbmx5IG9uZVxiKS9pLC9eKD86MVxiKS9pLC9eKD86XHxcfCkvaSwvXig/Om9cfCkvaSwvXig/Om9ceykvaSwvXig/Olx8XHspL2ksL14oPzpccyp1XGIpL2ksL14oPzpcLlwuKS9pLC9eKD86LS0pL2ksL14oPzp0b1xiKS9pLC9eKD86b3B0aW9uYWxseSB0b1xiKS9pLC9eKD86XC4tKS9pLC9eKD86LVwuKS9pLC9eKD86W0EtWmEtel1bQS1aYS16MC05XC1fXSopL2ksL14oPzouKS9pLC9eKD86JCkvaV0sY29uZGl0aW9uczp7YWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzUsNl0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOlszXSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzFdLGluY2x1c2l2ZTohMX0sb3Blbl9kaXJlY3RpdmU6e3J1bGVzOls4XSxpbmNsdXNpdmU6ITF9LHR5cGVfZGlyZWN0aXZlOntydWxlczpbOSwxMF0saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMTAsMTFdLGluY2x1c2l2ZTohMX0sYmxvY2s6e3J1bGVzOlsxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyN10saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwyLDQsNywxMiwxMywxNCwxNSwxNiwxNywxOCwyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OF0saW5jbHVzaXZlOiEwfX19O3JldHVybiBkdH0oKTtzdC5sZXhlcj14dDtmdW5jdGlvbiBodCgpe3RoaXMueXk9e319cmV0dXJuIGh0LnByb3RvdHlwZT1zdCxzdC5QYXJzZXI9aHQsbmV3IGh0fSgpO00wdC5wYXJzZXI9TTB0O2NvbnN0IE0kZT1NMHQ7bGV0IHlQPXt9LEQwdD1bXTtjb25zdCBEJGU9e1pFUk9fT1JfT05FOiJaRVJPX09SX09ORSIsWkVST19PUl9NT1JFOiJaRVJPX09SX01PUkUiLE9ORV9PUl9NT1JFOiJPTkVfT1JfTU9SRSIsT05MWV9PTkU6Ik9OTFlfT05FIixNRF9QQVJFTlQ6Ik1EX1BBUkVOVCJ9LEkkZT17Tk9OX0lERU5USUZZSU5HOiJOT05fSURFTlRJRllJTkciLElERU5USUZZSU5HOiJJREVOVElGWUlORyJ9LE8kZT1mdW5jdGlvbihpLGEsZil7SjEucGFyc2VEaXJlY3RpdmUodGhpcyxpLGEsZil9LFBCdD1mdW5jdGlvbihpKXtyZXR1cm4geVBbaV09PT12b2lkIDAmJih5UFtpXT17YXR0cmlidXRlczpbXX0sV3QuaW5mbygiQWRkZWQgbmV3IGVudGl0eSA6IixpKSkseVBbaV19LE4kZT17Q2FyZGluYWxpdHk6RCRlLElkZW50aWZpY2F0aW9uOkkkZSxwYXJzZURpcmVjdGl2ZTpPJGUsZ2V0Q29uZmlnOigpPT5EZSgpLmVyLGFkZEVudGl0eTpQQnQsYWRkQXR0cmlidXRlczpmdW5jdGlvbihpLGEpe2xldCBmPVBCdChpKSxwO2ZvcihwPWEubGVuZ3RoLTE7cD49MDtwLS0pZi5hdHRyaWJ1dGVzLnB1c2goYVtwXSksV3QuZGVidWcoIkFkZGVkIGF0dHJpYnV0ZSAiLGFbcF0uYXR0cmlidXRlTmFtZSl9LGdldEVudGl0aWVzOigpPT55UCxhZGRSZWxhdGlvbnNoaXA6ZnVuY3Rpb24oaSxhLGYscCl7bGV0IHY9e2VudGl0eUE6aSxyb2xlQTphLGVudGl0eUI6ZixyZWxTcGVjOnB9O0QwdC5wdXNoKHYpLFd0LmRlYnVnKCJBZGRlZCBuZXcgcmVsYXRpb25zaGlwIDoiLHYpfSxnZXRSZWxhdGlvbnNoaXBzOigpPT5EMHQsY2xlYXI6ZnVuY3Rpb24oKXt5UD17fSxEMHQ9W10sY2coKX0sc2V0QWNjVGl0bGU6bTAsZ2V0QWNjVGl0bGU6dWcsc2V0QWNjRGVzY3JpcHRpb246bGcsZ2V0QWNjRGVzY3JpcHRpb246aGcsc2V0RGlhZ3JhbVRpdGxlOk5iLGdldERpYWdyYW1UaXRsZTpocH0sdW09e09OTFlfT05FX1NUQVJUOiJPTkxZX09ORV9TVEFSVCIsT05MWV9PTkVfRU5EOiJPTkxZX09ORV9FTkQiLFpFUk9fT1JfT05FX1NUQVJUOiJaRVJPX09SX09ORV9TVEFSVCIsWkVST19PUl9PTkVfRU5EOiJaRVJPX09SX09ORV9FTkQiLE9ORV9PUl9NT1JFX1NUQVJUOiJPTkVfT1JfTU9SRV9TVEFSVCIsT05FX09SX01PUkVfRU5EOiJPTkVfT1JfTU9SRV9FTkQiLFpFUk9fT1JfTU9SRV9TVEFSVDoiWkVST19PUl9NT1JFX1NUQVJUIixaRVJPX09SX01PUkVfRU5EOiJaRVJPX09SX01PUkVfRU5EIixNRF9QQVJFTlRfRU5EOiJNRF9QQVJFTlRfRU5EIixNRF9QQVJFTlRfU1RBUlQ6Ik1EX1BBUkVOVF9TVEFSVCJ9LGxtPXtFUk1hcmtlcnM6dW0saW5zZXJ0TWFya2VyczpmdW5jdGlvbihpLGEpe2xldCBmO2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdW0uTURfUEFSRU5UX1NUQVJUKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHVtLk1EX1BBUkVOVF9FTkQpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIix1bS5PTkxZX09ORV9TVEFSVCkuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsOSkuYXR0cigibWFya2VyV2lkdGgiLDE4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixhLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTksMCBMOSwxOCBNMTUsMCBMMTUsMTgiKSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHVtLk9OTFlfT05FX0VORCkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDkpLmF0dHIoIm1hcmtlcldpZHRoIiwxOCkuYXR0cigibWFya2VySGVpZ2h0IiwxOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsYS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0zLDAgTDMsMTggTTksMCBMOSwxOCIpLGY9aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIix1bS5aRVJPX09SX09ORV9TVEFSVCkuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsOSkuYXR0cigibWFya2VyV2lkdGgiLDMwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE4KS5hdHRyKCJvcmllbnQiLCJhdXRvIiksZi5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsYS5zdHJva2UpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImN4IiwyMSkuYXR0cigiY3kiLDkpLmF0dHIoInIiLDYpLGYuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixhLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTksMCBMOSwxOCIpLGY9aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIix1bS5aRVJPX09SX09ORV9FTkQpLmF0dHIoInJlZlgiLDMwKS5hdHRyKCJyZWZZIiw5KS5hdHRyKCJtYXJrZXJXaWR0aCIsMzApLmF0dHIoIm1hcmtlckhlaWdodCIsMTgpLmF0dHIoIm9yaWVudCIsImF1dG8iKSxmLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIixhLnN0cm9rZSkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY3giLDkpLmF0dHIoImN5Iiw5KS5hdHRyKCJyIiw2KSxmLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsYS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0yMSwwIEwyMSwxOCIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdW0uT05FX09SX01PUkVfU1RBUlQpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiwxOCkuYXR0cigibWFya2VyV2lkdGgiLDQ1KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDM2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixhLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTAsMTggUSAxOCwwIDM2LDE4IFEgMTgsMzYgMCwxOCBNNDIsOSBMNDIsMjciKSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHVtLk9ORV9PUl9NT1JFX0VORCkuYXR0cigicmVmWCIsMjcpLmF0dHIoInJlZlkiLDE4KS5hdHRyKCJtYXJrZXJXaWR0aCIsNDUpLmF0dHIoIm1hcmtlckhlaWdodCIsMzYpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGEuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMyw5IEwzLDI3IE05LDE4IFEyNywwIDQ1LDE4IFEyNywzNiA5LDE4IiksZj1pLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHVtLlpFUk9fT1JfTU9SRV9TVEFSVCkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDE4KS5hdHRyKCJtYXJrZXJXaWR0aCIsNTcpLmF0dHIoIm1hcmtlckhlaWdodCIsMzYpLmF0dHIoIm9yaWVudCIsImF1dG8iKSxmLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIixhLnN0cm9rZSkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY3giLDQ4KS5hdHRyKCJjeSIsMTgpLmF0dHIoInIiLDYpLGYuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixhLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTAsMTggUTE4LDAgMzYsMTggUTE4LDM2IDAsMTgiKSxmPWkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdW0uWkVST19PUl9NT1JFX0VORCkuYXR0cigicmVmWCIsMzkpLmF0dHIoInJlZlkiLDE4KS5hdHRyKCJtYXJrZXJXaWR0aCIsNTcpLmF0dHIoIm1hcmtlckhlaWdodCIsMzYpLmF0dHIoIm9yaWVudCIsImF1dG8iKSxmLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIixhLnN0cm9rZSkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY3giLDkpLmF0dHIoImN5IiwxOCkuYXR0cigiciIsNiksZi5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGEuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMjEsMTggUTM5LDAgNTcsMTggUTM5LDM2IDIxLDE4Iil9fSxQJGU9L14oPzpbMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMS01XVswLTlhLWZdezN9LVs4OWFiXVswLTlhLWZdezN9LVswLTlhLWZdezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDApJC9pO2Z1bmN0aW9uIEYkZShpKXtyZXR1cm4gdHlwZW9mIGk9PSJzdHJpbmciJiZQJGUudGVzdChpKX1jb25zdCBQZD1bXTtmb3IobGV0IGk9MDtpPDI1NjsrK2kpUGQucHVzaCgoaSsyNTYpLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7ZnVuY3Rpb24gQiRlKGksYT0wKXtyZXR1cm4oUGRbaVthKzBdXStQZFtpW2ErMV1dK1BkW2lbYSsyXV0rUGRbaVthKzNdXSsiLSIrUGRbaVthKzRdXStQZFtpW2ErNV1dKyItIitQZFtpW2ErNl1dK1BkW2lbYSs3XV0rIi0iK1BkW2lbYSs4XV0rUGRbaVthKzldXSsiLSIrUGRbaVthKzEwXV0rUGRbaVthKzExXV0rUGRbaVthKzEyXV0rUGRbaVthKzEzXV0rUGRbaVthKzE0XV0rUGRbaVthKzE1XV0pLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gUiRlKGkpe2lmKCFGJGUoaSkpdGhyb3cgVHlwZUVycm9yKCJJbnZhbGlkIFVVSUQiKTtsZXQgYTtjb25zdCBmPW5ldyBVaW50OEFycmF5KDE2KTtyZXR1cm4gZlswXT0oYT1wYXJzZUludChpLnNsaWNlKDAsOCksMTYpKT4+PjI0LGZbMV09YT4+PjE2JjI1NSxmWzJdPWE+Pj44JjI1NSxmWzNdPWEmMjU1LGZbNF09KGE9cGFyc2VJbnQoaS5zbGljZSg5LDEzKSwxNikpPj4+OCxmWzVdPWEmMjU1LGZbNl09KGE9cGFyc2VJbnQoaS5zbGljZSgxNCwxOCksMTYpKT4+PjgsZls3XT1hJjI1NSxmWzhdPShhPXBhcnNlSW50KGkuc2xpY2UoMTksMjMpLDE2KSk+Pj44LGZbOV09YSYyNTUsZlsxMF09KGE9cGFyc2VJbnQoaS5zbGljZSgyNCwzNiksMTYpKS8xMDk5NTExNjI3Nzc2JjI1NSxmWzExXT1hLzQyOTQ5NjcyOTYmMjU1LGZbMTJdPWE+Pj4yNCYyNTUsZlsxM109YT4+PjE2JjI1NSxmWzE0XT1hPj4+OCYyNTUsZlsxNV09YSYyNTUsZn1mdW5jdGlvbiBqJGUoaSl7aT11bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoaSkpO2NvbnN0IGE9W107Zm9yKGxldCBmPTA7ZjxpLmxlbmd0aDsrK2YpYS5wdXNoKGkuY2hhckNvZGVBdChmKSk7cmV0dXJuIGF9Y29uc3QgJCRlPSI2YmE3YjgxMC05ZGFkLTExZDEtODBiNC0wMGMwNGZkNDMwYzgiLHokZT0iNmJhN2I4MTEtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4IjtmdW5jdGlvbiBxJGUoaSxhLGYpe2Z1bmN0aW9uIHAodixtLGIsRSl7dmFyIEM7aWYodHlwZW9mIHY9PSJzdHJpbmciJiYodj1qJGUodikpLHR5cGVvZiBtPT0ic3RyaW5nIiYmKG09UiRlKG0pKSwoKEM9bSk9PT1udWxsfHxDPT09dm9pZCAwP3ZvaWQgMDpDLmxlbmd0aCkhPT0xNil0aHJvdyBUeXBlRXJyb3IoIk5hbWVzcGFjZSBtdXN0IGJlIGFycmF5LWxpa2UgKDE2IGl0ZXJhYmxlIGludGVnZXIgdmFsdWVzLCAwLTI1NSkiKTtsZXQgQT1uZXcgVWludDhBcnJheSgxNit2Lmxlbmd0aCk7aWYoQS5zZXQobSksQS5zZXQodixtLmxlbmd0aCksQT1mKEEpLEFbNl09QVs2XSYxNXxhLEFbOF09QVs4XSY2M3wxMjgsYil7RT1FfHwwO2ZvcihsZXQgUD0wO1A8MTY7KytQKWJbRStQXT1BW1BdO3JldHVybiBifXJldHVybiBCJGUoQSl9dHJ5e3AubmFtZT1pfWNhdGNoe31yZXR1cm4gcC5ETlM9JCRlLHAuVVJMPXokZSxwfWZ1bmN0aW9uIEgkZShpLGEsZixwKXtzd2l0Y2goaSl7Y2FzZSAwOnJldHVybiBhJmZefmEmcDtjYXNlIDE6cmV0dXJuIGFeZl5wO2Nhc2UgMjpyZXR1cm4gYSZmXmEmcF5mJnA7Y2FzZSAzOnJldHVybiBhXmZecH19ZnVuY3Rpb24gSTB0KGksYSl7cmV0dXJuIGk8PGF8aT4+PjMyLWF9ZnVuY3Rpb24gViRlKGkpe2NvbnN0IGE9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywyNDAwOTU5NzA4LDMzOTU0Njk3ODJdLGY9WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXTtpZih0eXBlb2YgaT09InN0cmluZyIpe2NvbnN0IGI9dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGkpKTtpPVtdO2ZvcihsZXQgRT0wO0U8Yi5sZW5ndGg7KytFKWkucHVzaChiLmNoYXJDb2RlQXQoRSkpfWVsc2UgQXJyYXkuaXNBcnJheShpKXx8KGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoaSkpO2kucHVzaCgxMjgpO2NvbnN0IHA9aS5sZW5ndGgvNCsyLHY9TWF0aC5jZWlsKHAvMTYpLG09bmV3IEFycmF5KHYpO2ZvcihsZXQgYj0wO2I8djsrK2Ipe2NvbnN0IEU9bmV3IFVpbnQzMkFycmF5KDE2KTtmb3IobGV0IEM9MDtDPDE2OysrQylFW0NdPWlbYio2NCtDKjRdPDwyNHxpW2IqNjQrQyo0KzFdPDwxNnxpW2IqNjQrQyo0KzJdPDw4fGlbYio2NCtDKjQrM107bVtiXT1FfW1bdi0xXVsxNF09KGkubGVuZ3RoLTEpKjgvTWF0aC5wb3coMiwzMiksbVt2LTFdWzE0XT1NYXRoLmZsb29yKG1bdi0xXVsxNF0pLG1bdi0xXVsxNV09KGkubGVuZ3RoLTEpKjgmNDI5NDk2NzI5NTtmb3IobGV0IGI9MDtiPHY7KytiKXtjb25zdCBFPW5ldyBVaW50MzJBcnJheSg4MCk7Zm9yKGxldCBSPTA7UjwxNjsrK1IpRVtSXT1tW2JdW1JdO2ZvcihsZXQgUj0xNjtSPDgwOysrUilFW1JdPUkwdChFW1ItM11eRVtSLThdXkVbUi0xNF1eRVtSLTE2XSwxKTtsZXQgQz1mWzBdLEE9ZlsxXSxQPWZbMl0sRj1mWzNdLGo9Zls0XTtmb3IobGV0IFI9MDtSPDgwOysrUil7Y29uc3QgSD1NYXRoLmZsb29yKFIvMjApLFk9STB0KEMsNSkrSCRlKEgsQSxQLEYpK2orYVtIXStFW1JdPj4+MDtqPUYsRj1QLFA9STB0KEEsMzApPj4+MCxBPUMsQz1ZfWZbMF09ZlswXStDPj4+MCxmWzFdPWZbMV0rQT4+PjAsZlsyXT1mWzJdK1A+Pj4wLGZbM109ZlszXStGPj4+MCxmWzRdPWZbNF0raj4+PjB9cmV0dXJuW2ZbMF0+PjI0JjI1NSxmWzBdPj4xNiYyNTUsZlswXT4+OCYyNTUsZlswXSYyNTUsZlsxXT4+MjQmMjU1LGZbMV0+PjE2JjI1NSxmWzFdPj44JjI1NSxmWzFdJjI1NSxmWzJdPj4yNCYyNTUsZlsyXT4+MTYmMjU1LGZbMl0+PjgmMjU1LGZbMl0mMjU1LGZbM10+PjI0JjI1NSxmWzNdPj4xNiYyNTUsZlszXT4+OCYyNTUsZlszXSYyNTUsZls0XT4+MjQmMjU1LGZbNF0+PjE2JjI1NSxmWzRdPj44JjI1NSxmWzRdJjI1NV19Y29uc3QgRyRlPXEkZSgidjUiLDgwLFYkZSksVSRlPS9bXlxkQS1aYS16XShcVykqL2c7bGV0IGgxPXt9LHhQPW5ldyBNYXA7Y29uc3QgVyRlPWZ1bmN0aW9uKGkpe2NvbnN0IGE9T2JqZWN0LmtleXMoaSk7Zm9yKGNvbnN0IGYgb2YgYSloMVtmXT1pW2ZdfSxLJGU9KGksYSxmKT0+e2NvbnN0IHA9aDEuZW50aXR5UGFkZGluZy8zLHY9aDEuZW50aXR5UGFkZGluZy8zLG09aDEuZm9udFNpemUqLjg1LGI9YS5ub2RlKCkuZ2V0QkJveCgpLEU9W107bGV0IEM9ITEsQT0hMSxQPTAsRj0wLGo9MCxSPTAsSD1iLmhlaWdodCtwKjIsWT0xO2YuZm9yRWFjaChmdD0+e2Z0LmF0dHJpYnV0ZUtleVR5cGVMaXN0IT09dm9pZCAwJiZmdC5hdHRyaWJ1dGVLZXlUeXBlTGlzdC5sZW5ndGg+MCYmKEM9ITApLGZ0LmF0dHJpYnV0ZUNvbW1lbnQhPT12b2lkIDAmJihBPSEwKX0pLGYuZm9yRWFjaChmdD0+e2NvbnN0IFR0PWAke2Eubm9kZSgpLmlkfS1hdHRyLSR7WX1gO2xldCBrdD0wO2NvbnN0IG10PXpOKGZ0LmF0dHJpYnV0ZVR5cGUpLGN0PWkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiZXIgZW50aXR5TGFiZWwiLCEwKS5hdHRyKCJpZCIsYCR7VHR9LXR5cGVgKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5zdHlsZSgiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJsZWZ0Iikuc3R5bGUoImZvbnQtZmFtaWx5IixEZSgpLmZvbnRGYW1pbHkpLnN0eWxlKCJmb250LXNpemUiLG0rInB4IikudGV4dChtdCkseXQ9aS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJlciBlbnRpdHlMYWJlbCIsITApLmF0dHIoImlkIixgJHtUdH0tbmFtZWApLmF0dHIoIngiLDApLmF0dHIoInkiLDApLnN0eWxlKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsImxlZnQiKS5zdHlsZSgiZm9udC1mYW1pbHkiLERlKCkuZm9udEZhbWlseSkuc3R5bGUoImZvbnQtc2l6ZSIsbSsicHgiKS50ZXh0KGZ0LmF0dHJpYnV0ZU5hbWUpLHN0PXt9O3N0LnRuPWN0LHN0Lm5uPXl0O2NvbnN0IHh0PWN0Lm5vZGUoKS5nZXRCQm94KCksaHQ9eXQubm9kZSgpLmdldEJCb3goKTtpZihQPU1hdGgubWF4KFAseHQud2lkdGgpLEY9TWF0aC5tYXgoRixodC53aWR0aCksa3Q9TWF0aC5tYXgoeHQuaGVpZ2h0LGh0LmhlaWdodCksQyl7Y29uc3QgZHQ9ZnQuYXR0cmlidXRlS2V5VHlwZUxpc3QhPT12b2lkIDA/ZnQuYXR0cmlidXRlS2V5VHlwZUxpc3Quam9pbigiLCIpOiIiLEN0PWkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiZXIgZW50aXR5TGFiZWwiLCEwKS5hdHRyKCJpZCIsYCR7VHR9LWtleWApLmF0dHIoIngiLDApLmF0dHIoInkiLDApLnN0eWxlKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsImxlZnQiKS5zdHlsZSgiZm9udC1mYW1pbHkiLERlKCkuZm9udEZhbWlseSkuc3R5bGUoImZvbnQtc2l6ZSIsbSsicHgiKS50ZXh0KGR0KTtzdC5rbj1DdDtjb25zdCB0dD1DdC5ub2RlKCkuZ2V0QkJveCgpO2o9TWF0aC5tYXgoaix0dC53aWR0aCksa3Q9TWF0aC5tYXgoa3QsdHQuaGVpZ2h0KX1pZihBKXtjb25zdCBkdD1pLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoImVyIGVudGl0eUxhYmVsIiwhMCkuYXR0cigiaWQiLGAke1R0fS1jb21tZW50YCkuYXR0cigieCIsMCkuYXR0cigieSIsMCkuc3R5bGUoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuc3R5bGUoInRleHQtYW5jaG9yIiwibGVmdCIpLnN0eWxlKCJmb250LWZhbWlseSIsRGUoKS5mb250RmFtaWx5KS5zdHlsZSgiZm9udC1zaXplIixtKyJweCIpLnRleHQoZnQuYXR0cmlidXRlQ29tbWVudHx8IiIpO3N0LmNuPWR0O2NvbnN0IEN0PWR0Lm5vZGUoKS5nZXRCQm94KCk7Uj1NYXRoLm1heChSLEN0LndpZHRoKSxrdD1NYXRoLm1heChrdCxDdC5oZWlnaHQpfXN0LmhlaWdodD1rdCxFLnB1c2goc3QpLEgrPWt0K3AqMixZKz0xfSk7bGV0IHJ0PTQ7QyYmKHJ0Kz0yKSxBJiYocnQrPTIpO2NvbnN0IEo9UCtGK2orUixpdD17d2lkdGg6TWF0aC5tYXgoaDEubWluRW50aXR5V2lkdGgsTWF0aC5tYXgoYi53aWR0aCtoMS5lbnRpdHlQYWRkaW5nKjIsSit2KnJ0KSksaGVpZ2h0OmYubGVuZ3RoPjA/SDpNYXRoLm1heChoMS5taW5FbnRpdHlIZWlnaHQsYi5oZWlnaHQraDEuZW50aXR5UGFkZGluZyoyKX07aWYoZi5sZW5ndGg+MCl7Y29uc3QgZnQ9TWF0aC5tYXgoMCwoaXQud2lkdGgtSi12KnJ0KS8ocnQvMikpO2EuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIraXQud2lkdGgvMisiLCIrKHArYi5oZWlnaHQvMikrIikiKTtsZXQgVHQ9Yi5oZWlnaHQrcCoyLGt0PSJhdHRyaWJ1dGVCb3hPZGQiO0UuZm9yRWFjaChtdD0+e2NvbnN0IGN0PVR0K3ArbXQuaGVpZ2h0LzI7bXQudG4uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdisiLCIrY3QrIikiKTtjb25zdCB5dD1pLmluc2VydCgicmVjdCIsIiMiK210LnRuLm5vZGUoKS5pZCkuY2xhc3NlZChgZXIgJHtrdH1gLCEwKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixUdCkuYXR0cigid2lkdGgiLFArdioyK2Z0KS5hdHRyKCJoZWlnaHQiLG10LmhlaWdodCtwKjIpLHN0PXBhcnNlRmxvYXQoeXQuYXR0cigieCIpKStwYXJzZUZsb2F0KHl0LmF0dHIoIndpZHRoIikpO210Lm5uLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhzdCt2KSsiLCIrY3QrIikiKTtjb25zdCB4dD1pLmluc2VydCgicmVjdCIsIiMiK210Lm5uLm5vZGUoKS5pZCkuY2xhc3NlZChgZXIgJHtrdH1gLCEwKS5hdHRyKCJ4IixzdCkuYXR0cigieSIsVHQpLmF0dHIoIndpZHRoIixGK3YqMitmdCkuYXR0cigiaGVpZ2h0IixtdC5oZWlnaHQrcCoyKTtsZXQgaHQ9cGFyc2VGbG9hdCh4dC5hdHRyKCJ4IikpK3BhcnNlRmxvYXQoeHQuYXR0cigid2lkdGgiKSk7aWYoQyl7bXQua24uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKGh0K3YpKyIsIitjdCsiKSIpO2NvbnN0IGR0PWkuaW5zZXJ0KCJyZWN0IiwiIyIrbXQua24ubm9kZSgpLmlkKS5jbGFzc2VkKGBlciAke2t0fWAsITApLmF0dHIoIngiLGh0KS5hdHRyKCJ5IixUdCkuYXR0cigid2lkdGgiLGordioyK2Z0KS5hdHRyKCJoZWlnaHQiLG10LmhlaWdodCtwKjIpO2h0PXBhcnNlRmxvYXQoZHQuYXR0cigieCIpKStwYXJzZUZsb2F0KGR0LmF0dHIoIndpZHRoIikpfUEmJihtdC5jbi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoaHQrdikrIiwiK2N0KyIpIiksaS5pbnNlcnQoInJlY3QiLCIjIittdC5jbi5ub2RlKCkuaWQpLmNsYXNzZWQoYGVyICR7a3R9YCwidHJ1ZSIpLmF0dHIoIngiLGh0KS5hdHRyKCJ5IixUdCkuYXR0cigid2lkdGgiLFIrdioyK2Z0KS5hdHRyKCJoZWlnaHQiLG10LmhlaWdodCtwKjIpKSxUdCs9bXQuaGVpZ2h0K3AqMixrdD1rdD09PSJhdHRyaWJ1dGVCb3hPZGQiPyJhdHRyaWJ1dGVCb3hFdmVuIjoiYXR0cmlidXRlQm94T2RkIn0pfWVsc2UgaXQuaGVpZ2h0PU1hdGgubWF4KGgxLm1pbkVudGl0eUhlaWdodCxIKSxhLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2l0LndpZHRoLzIrIiwiK2l0LmhlaWdodC8yKyIpIik7cmV0dXJuIGl0fSxZJGU9ZnVuY3Rpb24oaSxhLGYpe2NvbnN0IHA9T2JqZWN0LmtleXMoYSk7bGV0IHY7cmV0dXJuIHAuZm9yRWFjaChmdW5jdGlvbihtKXtjb25zdCBiPWV6ZShtLCJlbnRpdHkiKTt4UC5zZXQobSxiKTtjb25zdCBFPWkuYXBwZW5kKCJnIikuYXR0cigiaWQiLGIpO3Y9dj09PXZvaWQgMD9iOnY7Y29uc3QgQz0idGV4dC0iK2IsQT1FLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoImVyIGVudGl0eUxhYmVsIiwhMCkuYXR0cigiaWQiLEMpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLnN0eWxlKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnN0eWxlKCJmb250LWZhbWlseSIsRGUoKS5mb250RmFtaWx5KS5zdHlsZSgiZm9udC1zaXplIixoMS5mb250U2l6ZSsicHgiKS50ZXh0KG0pLHt3aWR0aDpQLGhlaWdodDpGfT1LJGUoRSxBLGFbbV0uYXR0cmlidXRlcyksUj1FLmluc2VydCgicmVjdCIsIiMiK0MpLmNsYXNzZWQoImVyIGVudGl0eUJveCIsITApLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoIndpZHRoIixQKS5hdHRyKCJoZWlnaHQiLEYpLm5vZGUoKS5nZXRCQm94KCk7Zi5zZXROb2RlKGIse3dpZHRoOlIud2lkdGgsaGVpZ2h0OlIuaGVpZ2h0LHNoYXBlOiJyZWN0IixpZDpifSl9KSx2fSxYJGU9ZnVuY3Rpb24oaSxhKXthLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihmKXtmIT09dm9pZCAwJiZhLm5vZGUoZikhPT12b2lkIDAmJmkuc2VsZWN0KCIjIitmKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoYS5ub2RlKGYpLngtYS5ub2RlKGYpLndpZHRoLzIpKyIsIisoYS5ub2RlKGYpLnktYS5ub2RlKGYpLmhlaWdodC8yKSsiICkiKX0pfSxGQnQ9ZnVuY3Rpb24oaSl7cmV0dXJuKGkuZW50aXR5QStpLnJvbGVBK2kuZW50aXR5QikucmVwbGFjZSgvXHMvZywiIil9LFEkZT1mdW5jdGlvbihpLGEpe3JldHVybiBpLmZvckVhY2goZnVuY3Rpb24oZil7YS5zZXRFZGdlKHhQLmdldChmLmVudGl0eUEpLHhQLmdldChmLmVudGl0eUIpLHtyZWxhdGlvbnNoaXA6Zn0sRkJ0KGYpKX0pLGl9O2xldCBCQnQ9MDtjb25zdCBaJGU9ZnVuY3Rpb24oaSxhLGYscCx2KXtCQnQrKztjb25zdCBtPWYuZWRnZSh4UC5nZXQoYS5lbnRpdHlBKSx4UC5nZXQoYS5lbnRpdHlCKSxGQnQoYSkpLGI9WUUoKS54KGZ1bmN0aW9uKEgpe3JldHVybiBILnh9KS55KGZ1bmN0aW9uKEgpe3JldHVybiBILnl9KS5jdXJ2ZShNQSksRT1pLmluc2VydCgicGF0aCIsIiMiK3ApLmNsYXNzZWQoImVyIHJlbGF0aW9uc2hpcExpbmUiLCEwKS5hdHRyKCJkIixiKG0ucG9pbnRzKSkuc3R5bGUoInN0cm9rZSIsaDEuc3Ryb2tlKS5zdHlsZSgiZmlsbCIsIm5vbmUiKTthLnJlbFNwZWMucmVsVHlwZT09PXYuZGIuSWRlbnRpZmljYXRpb24uTk9OX0lERU5USUZZSU5HJiZFLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLCI4LDgiKTtsZXQgQz0iIjtzd2l0Y2goaDEuYXJyb3dNYXJrZXJBYnNvbHV0ZSYmKEM9d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gsQz1DLnJlcGxhY2UoL1woL2csIlxcKCIpLEM9Qy5yZXBsYWNlKC9cKS9nLCJcXCkiKSksYS5yZWxTcGVjLmNhcmRBKXtjYXNlIHYuZGIuQ2FyZGluYWxpdHkuWkVST19PUl9PTkU6RS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrQysiIyIrbG0uRVJNYXJrZXJzLlpFUk9fT1JfT05FX0VORCsiKSIpO2JyZWFrO2Nhc2Ugdi5kYi5DYXJkaW5hbGl0eS5aRVJPX09SX01PUkU6RS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrQysiIyIrbG0uRVJNYXJrZXJzLlpFUk9fT1JfTU9SRV9FTkQrIikiKTticmVhaztjYXNlIHYuZGIuQ2FyZGluYWxpdHkuT05FX09SX01PUkU6RS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrQysiIyIrbG0uRVJNYXJrZXJzLk9ORV9PUl9NT1JFX0VORCsiKSIpO2JyZWFrO2Nhc2Ugdi5kYi5DYXJkaW5hbGl0eS5PTkxZX09ORTpFLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitDKyIjIitsbS5FUk1hcmtlcnMuT05MWV9PTkVfRU5EKyIpIik7YnJlYWs7Y2FzZSB2LmRiLkNhcmRpbmFsaXR5Lk1EX1BBUkVOVDpFLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitDKyIjIitsbS5FUk1hcmtlcnMuTURfUEFSRU5UX0VORCsiKSIpO2JyZWFrfXN3aXRjaChhLnJlbFNwZWMuY2FyZEIpe2Nhc2Ugdi5kYi5DYXJkaW5hbGl0eS5aRVJPX09SX09ORTpFLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK0MrIiMiK2xtLkVSTWFya2Vycy5aRVJPX09SX09ORV9TVEFSVCsiKSIpO2JyZWFrO2Nhc2Ugdi5kYi5DYXJkaW5hbGl0eS5aRVJPX09SX01PUkU6RS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitDKyIjIitsbS5FUk1hcmtlcnMuWkVST19PUl9NT1JFX1NUQVJUKyIpIik7YnJlYWs7Y2FzZSB2LmRiLkNhcmRpbmFsaXR5Lk9ORV9PUl9NT1JFOkUuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrQysiIyIrbG0uRVJNYXJrZXJzLk9ORV9PUl9NT1JFX1NUQVJUKyIpIik7YnJlYWs7Y2FzZSB2LmRiLkNhcmRpbmFsaXR5Lk9OTFlfT05FOkUuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrQysiIyIrbG0uRVJNYXJrZXJzLk9OTFlfT05FX1NUQVJUKyIpIik7YnJlYWs7Y2FzZSB2LmRiLkNhcmRpbmFsaXR5Lk1EX1BBUkVOVDpFLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK0MrIiMiK2xtLkVSTWFya2Vycy5NRF9QQVJFTlRfU1RBUlQrIikiKTticmVha31jb25zdCBBPUUubm9kZSgpLmdldFRvdGFsTGVuZ3RoKCksUD1FLm5vZGUoKS5nZXRQb2ludEF0TGVuZ3RoKEEqLjUpLEY9InJlbCIrQkJ0LFI9aS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJlciByZWxhdGlvbnNoaXBMYWJlbCIsITApLmF0dHIoImlkIixGKS5hdHRyKCJ4IixQLngpLmF0dHIoInkiLFAueSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuc3R5bGUoImZvbnQtZmFtaWx5IixEZSgpLmZvbnRGYW1pbHkpLnN0eWxlKCJmb250LXNpemUiLGgxLmZvbnRTaXplKyJweCIpLnRleHQoYS5yb2xlQSkubm9kZSgpLmdldEJCb3goKTtpLmluc2VydCgicmVjdCIsIiMiK0YpLmNsYXNzZWQoImVyIHJlbGF0aW9uc2hpcExhYmVsQm94IiwhMCkuYXR0cigieCIsUC54LVIud2lkdGgvMikuYXR0cigieSIsUC55LVIuaGVpZ2h0LzIpLmF0dHIoIndpZHRoIixSLndpZHRoKS5hdHRyKCJoZWlnaHQiLFIuaGVpZ2h0KX0sSiRlPWZ1bmN0aW9uKGksYSxmLHApe2gxPURlKCkuZXIsV3QuaW5mbygiRHJhd2luZyBFUiBkaWFncmFtIik7Y29uc3Qgdj1EZSgpLnNlY3VyaXR5TGV2ZWw7bGV0IG07dj09PSJzYW5kYm94IiYmKG09eHIoIiNpIithKSk7Y29uc3QgRT14cih2PT09InNhbmRib3giP20ubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLnNlbGVjdChgW2lkPScke2F9J11gKTtsbS5pbnNlcnRNYXJrZXJzKEUsaDEpO2xldCBDO0M9bmV3IGwxKHttdWx0aWdyYXBoOiEwLGRpcmVjdGVkOiEwLGNvbXBvdW5kOiExfSkuc2V0R3JhcGgoe3JhbmtkaXI6aDEubGF5b3V0RGlyZWN0aW9uLG1hcmdpbng6MjAsbWFyZ2lueToyMCxub2Rlc2VwOjEwMCxlZGdlc2VwOjEwMCxyYW5rc2VwOjEwMH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKXtyZXR1cm57fX0pO2NvbnN0IEE9WSRlKEUscC5kYi5nZXRFbnRpdGllcygpLEMpLFA9USRlKHAuZGIuZ2V0UmVsYXRpb25zaGlwcygpLEMpO25MKEMpLFgkZShFLEMpLFAuZm9yRWFjaChmdW5jdGlvbihZKXtaJGUoRSxZLEMsQSxwKX0pO2NvbnN0IEY9aDEuZGlhZ3JhbVBhZGRpbmc7dG8uaW5zZXJ0VGl0bGUoRSwiZW50aXR5VGl0bGVUZXh0IixoMS50aXRsZVRvcE1hcmdpbixwLmRiLmdldERpYWdyYW1UaXRsZSgpKTtjb25zdCBqPUUubm9kZSgpLmdldEJCb3goKSxSPWoud2lkdGgrRioyLEg9ai5oZWlnaHQrRioyO29nKEUsSCxSLGgxLnVzZU1heFdpZHRoKSxFLmF0dHIoInZpZXdCb3giLGAke2oueC1GfSAke2oueS1GfSAke1J9ICR7SH1gKX0sdHplPSIyOGU5ZjlkYi0zYzhkLTVhYTUtOWZhZi00NDI4NmFlNTkzN2MiO2Z1bmN0aW9uIGV6ZShpPSIiLGE9IiIpe2NvbnN0IGY9aS5yZXBsYWNlKFUkZSwiIik7cmV0dXJuYCR7UkJ0KGEpfSR7UkJ0KGYpfSR7RyRlKGksdHplKX1gfWZ1bmN0aW9uIFJCdChpPSIiKXtyZXR1cm4gaS5sZW5ndGg+MD9gJHtpfS1gOiIifWNvbnN0IG56ZT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7cGFyc2VyOk0kZSxkYjpOJGUscmVuZGVyZXI6e3NldENvbmY6VyRlLGRyYXc6SiRlfSxzdHlsZXM6aT0+YAogIC5lbnRpdHlCb3ggewogICAgZmlsbDogJHtpLm1haW5Ca2d9OwogICAgc3Ryb2tlOiAke2kubm9kZUJvcmRlcn07CiAgfQoKICAuYXR0cmlidXRlQm94T2RkIHsKICAgIGZpbGw6ICR7aS5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGR9OwogICAgc3Ryb2tlOiAke2kubm9kZUJvcmRlcn07CiAgfQoKICAuYXR0cmlidXRlQm94RXZlbiB7CiAgICBmaWxsOiAgJHtpLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW59OwogICAgc3Ryb2tlOiAke2kubm9kZUJvcmRlcn07CiAgfQoKICAucmVsYXRpb25zaGlwTGFiZWxCb3ggewogICAgZmlsbDogJHtpLnRlcnRpYXJ5Q29sb3J9OwogICAgb3BhY2l0eTogMC43OwogICAgYmFja2dyb3VuZC1jb2xvcjogJHtpLnRlcnRpYXJ5Q29sb3J9OwogICAgICByZWN0IHsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KICB9CgogICAgLnJlbGF0aW9uc2hpcExpbmUgewogICAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgfQoKICAuZW50aXR5VGl0bGVUZXh0IHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICBmb250LXNpemU6IDE4cHg7CiAgICBmaWxsOiAke2kudGV4dENvbG9yfTsKICB9ICAgIAogICNNRF9QQVJFTlRfU1RBUlQgewogICAgZmlsbDogI2Y1ZjVmNSAhaW1wb3J0YW50OwogICAgc3Ryb2tlOiAke2kubGluZUNvbG9yfSAhaW1wb3J0YW50OwogICAgc3Ryb2tlLXdpZHRoOiAxOwogIH0KICAjTURfUEFSRU5UX0VORCB7CiAgICBmaWxsOiAjZjVmNWY1ICFpbXBvcnRhbnQ7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgICBzdHJva2Utd2lkdGg6IDE7CiAgfQogIApgfX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgTzB0PWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24oeXQsc3QseHQsaHQpe2Zvcih4dD14dHx8e30saHQ9eXQubGVuZ3RoO2h0LS07eHRbeXRbaHRdXT1zdCk7cmV0dXJuIHh0fSxhPVsxLDRdLGY9WzEsN10scD1bMSw1XSx2PVsxLDldLG09WzEsNl0sYj1bMiw2XSxFPVsxLDE2XSxDPVs2LDgsMTQsMjAsMjIsMjQsMjUsMjcsMjksMzIsMzcsNDAsNTAsNTVdLEE9WzgsMTQsMjAsMjIsMjQsMjUsMjcsMjksMzIsMzcsNDBdLFA9WzgsMTMsMTQsMjAsMjIsMjQsMjUsMjcsMjksMzIsMzcsNDBdLEY9WzEsMjZdLGo9WzYsOCwxNCw1MCw1NV0sUj1bOCwxNCw1NV0sSD1bMSw1M10sWT1bMSw1Ml0scnQ9WzgsMTQsMzAsMzMsMzUsMzgsNTVdLEo9WzEsNjddLGl0PVsxLDY4XSxmdD1bMSw2OV0sVHQ9WzgsMTQsMzMsMzUsNDIsNTVdLGt0PXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6Myxlb2w6NCxkaXJlY3RpdmU6NSxHRzo2LGRvY3VtZW50OjcsRU9GOjgsIjoiOjksRElSOjEwLG9wdGlvbnM6MTEsYm9keToxMixPUFQ6MTMsTkw6MTQsbGluZToxNSxzdGF0ZW1lbnQ6MTYsY29tbWl0U3RhdGVtZW50OjE3LG1lcmdlU3RhdGVtZW50OjE4LGNoZXJyeVBpY2tTdGF0ZW1lbnQ6MTksYWNjX3RpdGxlOjIwLGFjY190aXRsZV92YWx1ZToyMSxhY2NfZGVzY3I6MjIsYWNjX2Rlc2NyX3ZhbHVlOjIzLGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MjQsc2VjdGlvbjoyNSxicmFuY2hTdGF0ZW1lbnQ6MjYsQ0hFQ0tPVVQ6MjcscmVmOjI4LEJSQU5DSDoyOSxPUkRFUjozMCxOVU06MzEsQ0hFUlJZX1BJQ0s6MzIsQ09NTUlUX0lEOjMzLFNUUjozNCxDT01NSVRfVEFHOjM1LEVNUFRZU1RSOjM2LE1FUkdFOjM3LENPTU1JVF9UWVBFOjM4LGNvbW1pdFR5cGU6MzksQ09NTUlUOjQwLGNvbW1pdF9hcmc6NDEsQ09NTUlUX01TRzo0MixOT1JNQUw6NDMsUkVWRVJTRTo0NCxISUdITElHSFQ6NDUsb3BlbkRpcmVjdGl2ZTo0Nix0eXBlRGlyZWN0aXZlOjQ3LGNsb3NlRGlyZWN0aXZlOjQ4LGFyZ0RpcmVjdGl2ZTo0OSxvcGVuX2RpcmVjdGl2ZTo1MCx0eXBlX2RpcmVjdGl2ZTo1MSxhcmdfZGlyZWN0aXZlOjUyLGNsb3NlX2RpcmVjdGl2ZTo1MyxJRDo1NCwiOyI6NTUsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDY6IkdHIiw4OiJFT0YiLDk6IjoiLDEwOiJESVIiLDEzOiJPUFQiLDE0OiJOTCIsMjA6ImFjY190aXRsZSIsMjE6ImFjY190aXRsZV92YWx1ZSIsMjI6ImFjY19kZXNjciIsMjM6ImFjY19kZXNjcl92YWx1ZSIsMjQ6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDI1OiJzZWN0aW9uIiwyNzoiQ0hFQ0tPVVQiLDI5OiJCUkFOQ0giLDMwOiJPUkRFUiIsMzE6Ik5VTSIsMzI6IkNIRVJSWV9QSUNLIiwzMzoiQ09NTUlUX0lEIiwzNDoiU1RSIiwzNToiQ09NTUlUX1RBRyIsMzY6IkVNUFRZU1RSIiwzNzoiTUVSR0UiLDM4OiJDT01NSVRfVFlQRSIsNDA6IkNPTU1JVCIsNDI6IkNPTU1JVF9NU0ciLDQzOiJOT1JNQUwiLDQ0OiJSRVZFUlNFIiw0NToiSElHSExJR0hUIiw1MDoib3Blbl9kaXJlY3RpdmUiLDUxOiJ0eXBlX2RpcmVjdGl2ZSIsNTI6ImFyZ19kaXJlY3RpdmUiLDUzOiJjbG9zZV9kaXJlY3RpdmUiLDU0OiJJRCIsNTU6IjsifSxwcm9kdWN0aW9uc186WzAsWzMsMl0sWzMsMl0sWzMsM10sWzMsNF0sWzMsNV0sWzcsMF0sWzcsMl0sWzExLDJdLFsxMSwxXSxbMTIsMF0sWzEyLDJdLFsxNSwyXSxbMTUsMV0sWzE2LDFdLFsxNiwxXSxbMTYsMV0sWzE2LDJdLFsxNiwyXSxbMTYsMV0sWzE2LDFdLFsxNiwxXSxbMTYsMl0sWzI2LDJdLFsyNiw0XSxbMTksM10sWzE5LDVdLFsxOSw1XSxbMTksNV0sWzE5LDVdLFsxOCwyXSxbMTgsNF0sWzE4LDRdLFsxOCw0XSxbMTgsNl0sWzE4LDZdLFsxOCw2XSxbMTgsNl0sWzE4LDZdLFsxOCw2XSxbMTgsOF0sWzE4LDhdLFsxOCw4XSxbMTgsOF0sWzE4LDhdLFsxOCw4XSxbMTcsMl0sWzE3LDNdLFsxNywzXSxbMTcsNV0sWzE3LDVdLFsxNywzXSxbMTcsNV0sWzE3LDVdLFsxNyw1XSxbMTcsNV0sWzE3LDddLFsxNyw3XSxbMTcsN10sWzE3LDddLFsxNyw3XSxbMTcsN10sWzE3LDNdLFsxNyw1XSxbMTcsNV0sWzE3LDVdLFsxNyw1XSxbMTcsNV0sWzE3LDVdLFsxNyw3XSxbMTcsN10sWzE3LDddLFsxNyw3XSxbMTcsN10sWzE3LDddLFsxNyw3XSxbMTcsN10sWzE3LDddLFsxNyw3XSxbMTcsN10sWzE3LDddLFsxNyw3XSxbMTcsN10sWzE3LDddLFsxNyw3XSxbMTcsN10sWzE3LDddLFsxNyw5XSxbMTcsOV0sWzE3LDldLFsxNyw5XSxbMTcsOV0sWzE3LDldLFsxNyw5XSxbMTcsOV0sWzE3LDldLFsxNyw5XSxbMTcsOV0sWzE3LDldLFsxNyw5XSxbMTcsOV0sWzE3LDldLFsxNyw5XSxbMTcsOV0sWzE3LDldLFsxNyw5XSxbMTcsOV0sWzE3LDldLFsxNyw5XSxbMTcsOV0sWzE3LDldLFs0MSwwXSxbNDEsMV0sWzM5LDFdLFszOSwxXSxbMzksMV0sWzUsM10sWzUsNV0sWzQ2LDFdLFs0NywxXSxbNDksMV0sWzQ4LDFdLFsyOCwxXSxbMjgsMV0sWzQsMV0sWzQsMV0sWzQsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oc3QseHQsaHQsZHQsQ3QsdHQsUHQpe3ZhciBwdD10dC5sZW5ndGgtMTtzd2l0Y2goQ3Qpe2Nhc2UgMzpyZXR1cm4gdHRbcHRdO2Nhc2UgNDpyZXR1cm4gdHRbcHQtMV07Y2FzZSA1OnJldHVybiBkdC5zZXREaXJlY3Rpb24odHRbcHQtM10pLHR0W3B0LTFdO2Nhc2UgNzpkdC5zZXRPcHRpb25zKHR0W3B0LTFdKSx0aGlzLiQ9dHRbcHRdO2JyZWFrO2Nhc2UgODp0dFtwdC0xXSs9dHRbcHRdLHRoaXMuJD10dFtwdC0xXTticmVhaztjYXNlIDEwOnRoaXMuJD1bXTticmVhaztjYXNlIDExOnR0W3B0LTFdLnB1c2godHRbcHRdKSx0aGlzLiQ9dHRbcHQtMV07YnJlYWs7Y2FzZSAxMjp0aGlzLiQ9dHRbcHQtMV07YnJlYWs7Y2FzZSAxNzp0aGlzLiQ9dHRbcHRdLnRyaW0oKSxkdC5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMTg6Y2FzZSAxOTp0aGlzLiQ9dHRbcHRdLnRyaW0oKSxkdC5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgMjA6ZHQuYWRkU2VjdGlvbih0dFtwdF0uc3Vic3RyKDgpKSx0aGlzLiQ9dHRbcHRdLnN1YnN0cig4KTticmVhaztjYXNlIDIyOmR0LmNoZWNrb3V0KHR0W3B0XSk7YnJlYWs7Y2FzZSAyMzpkdC5icmFuY2godHRbcHRdKTticmVhaztjYXNlIDI0OmR0LmJyYW5jaCh0dFtwdC0yXSx0dFtwdF0pO2JyZWFrO2Nhc2UgMjU6ZHQuY2hlcnJ5UGljayh0dFtwdF0sIiIsdm9pZCAwKTticmVhaztjYXNlIDI2OmR0LmNoZXJyeVBpY2sodHRbcHQtMl0sIiIsdHRbcHRdKTticmVhaztjYXNlIDI3OmNhc2UgMjk6ZHQuY2hlcnJ5UGljayh0dFtwdC0yXSwiIiwiIik7YnJlYWs7Y2FzZSAyODpkdC5jaGVycnlQaWNrKHR0W3B0XSwiIix0dFtwdC0yXSk7YnJlYWs7Y2FzZSAzMDpkdC5tZXJnZSh0dFtwdF0sIiIsIiIsIiIpO2JyZWFrO2Nhc2UgMzE6ZHQubWVyZ2UodHRbcHQtMl0sdHRbcHRdLCIiLCIiKTticmVhaztjYXNlIDMyOmR0Lm1lcmdlKHR0W3B0LTJdLCIiLHR0W3B0XSwiIik7YnJlYWs7Y2FzZSAzMzpkdC5tZXJnZSh0dFtwdC0yXSwiIiwiIix0dFtwdF0pO2JyZWFrO2Nhc2UgMzQ6ZHQubWVyZ2UodHRbcHQtNF0sdHRbcHRdLCIiLHR0W3B0LTJdKTticmVhaztjYXNlIDM1OmR0Lm1lcmdlKHR0W3B0LTRdLCIiLHR0W3B0XSx0dFtwdC0yXSk7YnJlYWs7Y2FzZSAzNjpkdC5tZXJnZSh0dFtwdC00XSwiIix0dFtwdC0yXSx0dFtwdF0pO2JyZWFrO2Nhc2UgMzc6ZHQubWVyZ2UodHRbcHQtNF0sdHRbcHQtMl0sdHRbcHRdLCIiKTticmVhaztjYXNlIDM4OmR0Lm1lcmdlKHR0W3B0LTRdLHR0W3B0LTJdLCIiLHR0W3B0XSk7YnJlYWs7Y2FzZSAzOTpkdC5tZXJnZSh0dFtwdC00XSx0dFtwdF0sdHRbcHQtMl0sIiIpO2JyZWFrO2Nhc2UgNDA6ZHQubWVyZ2UodHRbcHQtNl0sdHRbcHQtNF0sdHRbcHQtMl0sdHRbcHRdKTticmVhaztjYXNlIDQxOmR0Lm1lcmdlKHR0W3B0LTZdLHR0W3B0XSx0dFtwdC00XSx0dFtwdC0yXSk7YnJlYWs7Y2FzZSA0MjpkdC5tZXJnZSh0dFtwdC02XSx0dFtwdC00XSx0dFtwdF0sdHRbcHQtMl0pO2JyZWFrO2Nhc2UgNDM6ZHQubWVyZ2UodHRbcHQtNl0sdHRbcHQtMl0sdHRbcHQtNF0sdHRbcHRdKTticmVhaztjYXNlIDQ0OmR0Lm1lcmdlKHR0W3B0LTZdLHR0W3B0XSx0dFtwdC0yXSx0dFtwdC00XSk7YnJlYWs7Y2FzZSA0NTpkdC5tZXJnZSh0dFtwdC02XSx0dFtwdC0yXSx0dFtwdF0sdHRbcHQtNF0pO2JyZWFrO2Nhc2UgNDY6ZHQuY29tbWl0KHR0W3B0XSk7YnJlYWs7Y2FzZSA0NzpkdC5jb21taXQoIiIsIiIsZHQuY29tbWl0VHlwZS5OT1JNQUwsdHRbcHRdKTticmVhaztjYXNlIDQ4OmR0LmNvbW1pdCgiIiwiIix0dFtwdF0sIiIpO2JyZWFrO2Nhc2UgNDk6ZHQuY29tbWl0KCIiLCIiLHR0W3B0XSx0dFtwdC0yXSk7YnJlYWs7Y2FzZSA1MDpkdC5jb21taXQoIiIsIiIsdHRbcHQtMl0sdHRbcHRdKTticmVhaztjYXNlIDUxOmR0LmNvbW1pdCgiIix0dFtwdF0sZHQuY29tbWl0VHlwZS5OT1JNQUwsIiIpO2JyZWFrO2Nhc2UgNTI6ZHQuY29tbWl0KCIiLHR0W3B0LTJdLGR0LmNvbW1pdFR5cGUuTk9STUFMLHR0W3B0XSk7YnJlYWs7Y2FzZSA1MzpkdC5jb21taXQoIiIsdHRbcHRdLGR0LmNvbW1pdFR5cGUuTk9STUFMLHR0W3B0LTJdKTticmVhaztjYXNlIDU0OmR0LmNvbW1pdCgiIix0dFtwdC0yXSx0dFtwdF0sIiIpO2JyZWFrO2Nhc2UgNTU6ZHQuY29tbWl0KCIiLHR0W3B0XSx0dFtwdC0yXSwiIik7YnJlYWs7Y2FzZSA1NjpkdC5jb21taXQoIiIsdHRbcHQtNF0sdHRbcHQtMl0sdHRbcHRdKTticmVhaztjYXNlIDU3OmR0LmNvbW1pdCgiIix0dFtwdC00XSx0dFtwdF0sdHRbcHQtMl0pO2JyZWFrO2Nhc2UgNTg6ZHQuY29tbWl0KCIiLHR0W3B0LTJdLHR0W3B0LTRdLHR0W3B0XSk7YnJlYWs7Y2FzZSA1OTpkdC5jb21taXQoIiIsdHRbcHRdLHR0W3B0LTRdLHR0W3B0LTJdKTticmVhaztjYXNlIDYwOmR0LmNvbW1pdCgiIix0dFtwdF0sdHRbcHQtMl0sdHRbcHQtNF0pO2JyZWFrO2Nhc2UgNjE6ZHQuY29tbWl0KCIiLHR0W3B0LTJdLHR0W3B0XSx0dFtwdC00XSk7YnJlYWs7Y2FzZSA2MjpkdC5jb21taXQodHRbcHRdLCIiLGR0LmNvbW1pdFR5cGUuTk9STUFMLCIiKTticmVhaztjYXNlIDYzOmR0LmNvbW1pdCh0dFtwdF0sIiIsZHQuY29tbWl0VHlwZS5OT1JNQUwsdHRbcHQtMl0pO2JyZWFrO2Nhc2UgNjQ6ZHQuY29tbWl0KHR0W3B0LTJdLCIiLGR0LmNvbW1pdFR5cGUuTk9STUFMLHR0W3B0XSk7YnJlYWs7Y2FzZSA2NTpkdC5jb21taXQodHRbcHQtMl0sIiIsdHRbcHRdLCIiKTticmVhaztjYXNlIDY2OmR0LmNvbW1pdCh0dFtwdF0sIiIsdHRbcHQtMl0sIiIpO2JyZWFrO2Nhc2UgNjc6ZHQuY29tbWl0KHR0W3B0XSx0dFtwdC0yXSxkdC5jb21taXRUeXBlLk5PUk1BTCwiIik7YnJlYWs7Y2FzZSA2ODpkdC5jb21taXQodHRbcHQtMl0sdHRbcHRdLGR0LmNvbW1pdFR5cGUuTk9STUFMLCIiKTticmVhaztjYXNlIDY5OmR0LmNvbW1pdCh0dFtwdC00XSwiIix0dFtwdC0yXSx0dFtwdF0pO2JyZWFrO2Nhc2UgNzA6ZHQuY29tbWl0KHR0W3B0LTRdLCIiLHR0W3B0XSx0dFtwdC0yXSk7YnJlYWs7Y2FzZSA3MTpkdC5jb21taXQodHRbcHQtMl0sIiIsdHRbcHQtNF0sdHRbcHRdKTticmVhaztjYXNlIDcyOmR0LmNvbW1pdCh0dFtwdF0sIiIsdHRbcHQtNF0sdHRbcHQtMl0pO2JyZWFrO2Nhc2UgNzM6ZHQuY29tbWl0KHR0W3B0XSwiIix0dFtwdC0yXSx0dFtwdC00XSk7YnJlYWs7Y2FzZSA3NDpkdC5jb21taXQodHRbcHQtMl0sIiIsdHRbcHRdLHR0W3B0LTRdKTticmVhaztjYXNlIDc1OmR0LmNvbW1pdCh0dFtwdC00XSx0dFtwdF0sdHRbcHQtMl0sIiIpO2JyZWFrO2Nhc2UgNzY6ZHQuY29tbWl0KHR0W3B0LTRdLHR0W3B0LTJdLHR0W3B0XSwiIik7YnJlYWs7Y2FzZSA3NzpkdC5jb21taXQodHRbcHQtMl0sdHRbcHRdLHR0W3B0LTRdLCIiKTticmVhaztjYXNlIDc4OmR0LmNvbW1pdCh0dFtwdF0sdHRbcHQtMl0sdHRbcHQtNF0sIiIpO2JyZWFrO2Nhc2UgNzk6ZHQuY29tbWl0KHR0W3B0XSx0dFtwdC00XSx0dFtwdC0yXSwiIik7YnJlYWs7Y2FzZSA4MDpkdC5jb21taXQodHRbcHQtMl0sdHRbcHQtNF0sdHRbcHRdLCIiKTticmVhaztjYXNlIDgxOmR0LmNvbW1pdCh0dFtwdC00XSx0dFtwdF0sZHQuY29tbWl0VHlwZS5OT1JNQUwsdHRbcHQtMl0pO2JyZWFrO2Nhc2UgODI6ZHQuY29tbWl0KHR0W3B0LTRdLHR0W3B0LTJdLGR0LmNvbW1pdFR5cGUuTk9STUFMLHR0W3B0XSk7YnJlYWs7Y2FzZSA4MzpkdC5jb21taXQodHRbcHQtMl0sdHRbcHRdLGR0LmNvbW1pdFR5cGUuTk9STUFMLHR0W3B0LTRdKTticmVhaztjYXNlIDg0OmR0LmNvbW1pdCh0dFtwdF0sdHRbcHQtMl0sZHQuY29tbWl0VHlwZS5OT1JNQUwsdHRbcHQtNF0pO2JyZWFrO2Nhc2UgODU6ZHQuY29tbWl0KHR0W3B0XSx0dFtwdC00XSxkdC5jb21taXRUeXBlLk5PUk1BTCx0dFtwdC0yXSk7YnJlYWs7Y2FzZSA4NjpkdC5jb21taXQodHRbcHQtMl0sdHRbcHQtNF0sZHQuY29tbWl0VHlwZS5OT1JNQUwsdHRbcHRdKTticmVhaztjYXNlIDg3OmR0LmNvbW1pdCh0dFtwdC02XSx0dFtwdC00XSx0dFtwdC0yXSx0dFtwdF0pO2JyZWFrO2Nhc2UgODg6ZHQuY29tbWl0KHR0W3B0LTZdLHR0W3B0LTRdLHR0W3B0XSx0dFtwdC0yXSk7YnJlYWs7Y2FzZSA4OTpkdC5jb21taXQodHRbcHQtNl0sdHRbcHQtMl0sdHRbcHQtNF0sdHRbcHRdKTticmVhaztjYXNlIDkwOmR0LmNvbW1pdCh0dFtwdC02XSx0dFtwdF0sdHRbcHQtNF0sdHRbcHQtMl0pO2JyZWFrO2Nhc2UgOTE6ZHQuY29tbWl0KHR0W3B0LTZdLHR0W3B0LTJdLHR0W3B0XSx0dFtwdC00XSk7YnJlYWs7Y2FzZSA5MjpkdC5jb21taXQodHRbcHQtNl0sdHRbcHRdLHR0W3B0LTJdLHR0W3B0LTRdKTticmVhaztjYXNlIDkzOmR0LmNvbW1pdCh0dFtwdC00XSx0dFtwdC02XSx0dFtwdC0yXSx0dFtwdF0pO2JyZWFrO2Nhc2UgOTQ6ZHQuY29tbWl0KHR0W3B0LTRdLHR0W3B0LTZdLHR0W3B0XSx0dFtwdC0yXSk7YnJlYWs7Y2FzZSA5NTpkdC5jb21taXQodHRbcHQtMl0sdHRbcHQtNl0sdHRbcHQtNF0sdHRbcHRdKTticmVhaztjYXNlIDk2OmR0LmNvbW1pdCh0dFtwdF0sdHRbcHQtNl0sdHRbcHQtNF0sdHRbcHQtMl0pO2JyZWFrO2Nhc2UgOTc6ZHQuY29tbWl0KHR0W3B0LTJdLHR0W3B0LTZdLHR0W3B0XSx0dFtwdC00XSk7YnJlYWs7Y2FzZSA5ODpkdC5jb21taXQodHRbcHRdLHR0W3B0LTZdLHR0W3B0LTJdLHR0W3B0LTRdKTticmVhaztjYXNlIDk5OmR0LmNvbW1pdCh0dFtwdF0sdHRbcHQtNF0sdHRbcHQtMl0sdHRbcHQtNl0pO2JyZWFrO2Nhc2UgMTAwOmR0LmNvbW1pdCh0dFtwdC0yXSx0dFtwdC00XSx0dFtwdF0sdHRbcHQtNl0pO2JyZWFrO2Nhc2UgMTAxOmR0LmNvbW1pdCh0dFtwdF0sdHRbcHQtMl0sdHRbcHQtNF0sdHRbcHQtNl0pO2JyZWFrO2Nhc2UgMTAyOmR0LmNvbW1pdCh0dFtwdC0yXSx0dFtwdF0sdHRbcHQtNF0sdHRbcHQtNl0pO2JyZWFrO2Nhc2UgMTAzOmR0LmNvbW1pdCh0dFtwdC00XSx0dFtwdC0yXSx0dFtwdF0sdHRbcHQtNl0pO2JyZWFrO2Nhc2UgMTA0OmR0LmNvbW1pdCh0dFtwdC00XSx0dFtwdF0sdHRbcHQtMl0sdHRbcHQtNl0pO2JyZWFrO2Nhc2UgMTA1OmR0LmNvbW1pdCh0dFtwdC0yXSx0dFtwdC00XSx0dFtwdC02XSx0dFtwdF0pO2JyZWFrO2Nhc2UgMTA2OmR0LmNvbW1pdCh0dFtwdF0sdHRbcHQtNF0sdHRbcHQtNl0sdHRbcHQtMl0pO2JyZWFrO2Nhc2UgMTA3OmR0LmNvbW1pdCh0dFtwdC0yXSx0dFtwdF0sdHRbcHQtNl0sdHRbcHQtNF0pO2JyZWFrO2Nhc2UgMTA4OmR0LmNvbW1pdCh0dFtwdF0sdHRbcHQtMl0sdHRbcHQtNl0sdHRbcHQtNF0pO2JyZWFrO2Nhc2UgMTA5OmR0LmNvbW1pdCh0dFtwdC00XSx0dFtwdC0yXSx0dFtwdC02XSx0dFtwdF0pO2JyZWFrO2Nhc2UgMTEwOmR0LmNvbW1pdCh0dFtwdC00XSx0dFtwdF0sdHRbcHQtNl0sdHRbcHQtMl0pO2JyZWFrO2Nhc2UgMTExOnRoaXMuJD0iIjticmVhaztjYXNlIDExMjp0aGlzLiQ9dHRbcHRdO2JyZWFrO2Nhc2UgMTEzOnRoaXMuJD1kdC5jb21taXRUeXBlLk5PUk1BTDticmVhaztjYXNlIDExNDp0aGlzLiQ9ZHQuY29tbWl0VHlwZS5SRVZFUlNFO2JyZWFrO2Nhc2UgMTE1OnRoaXMuJD1kdC5jb21taXRUeXBlLkhJR0hMSUdIVDticmVhaztjYXNlIDExODpkdC5wYXJzZURpcmVjdGl2ZSgiJSV7Iiwib3Blbl9kaXJlY3RpdmUiKTticmVhaztjYXNlIDExOTpkdC5wYXJzZURpcmVjdGl2ZSh0dFtwdF0sInR5cGVfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAxMjA6dHRbcHRdPXR0W3B0XS50cmltKCkucmVwbGFjZSgvJy9nLCciJyksZHQucGFyc2VEaXJlY3RpdmUodHRbcHRdLCJhcmdfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAxMjE6ZHQucGFyc2VEaXJlY3RpdmUoIn0lJSIsImNsb3NlX2RpcmVjdGl2ZSIsImdpdEdyYXBoIik7YnJlYWt9fSx0YWJsZTpbezM6MSw0OjIsNTozLDY6YSw4OmYsMTQ6cCw0Njo4LDUwOnYsNTU6bX0sezE6WzNdfSx7MzoxMCw0OjIsNTozLDY6YSw4OmYsMTQ6cCw0Njo4LDUwOnYsNTU6bX0sezM6MTEsNDoyLDU6Myw2OmEsODpmLDE0OnAsNDY6OCw1MDp2LDU1Om19LHs3OjEyLDg6Yiw5OlsxLDEzXSwxMDpbMSwxNF0sMTE6MTUsMTQ6RX0saShDLFsyLDEyNF0pLGkoQyxbMiwxMjVdKSxpKEMsWzIsMTI2XSksezQ3OjE3LDUxOlsxLDE4XX0sezUxOlsyLDExOF19LHsxOlsyLDFdfSx7MTpbMiwyXX0sezg6WzEsMTldfSx7NzoyMCw4OmIsMTE6MTUsMTQ6RX0sezk6WzEsMjFdfSxpKEEsWzIsMTBdLHsxMjoyMiwxMzpbMSwyM119KSxpKFAsWzIsOV0pLHs5OlsxLDI1XSw0ODoyNCw1MzpGfSxpKFs5LDUzXSxbMiwxMTldKSx7MTpbMiwzXX0sezg6WzEsMjddfSx7NzoyOCw4OmIsMTE6MTUsMTQ6RX0sezg6WzIsN10sMTQ6WzEsMzFdLDE1OjI5LDE2OjMwLDE3OjMyLDE4OjMzLDE5OjM0LDIwOlsxLDM1XSwyMjpbMSwzNl0sMjQ6WzEsMzddLDI1OlsxLDM4XSwyNjozOSwyNzpbMSw0MF0sMjk6WzEsNDRdLDMyOlsxLDQzXSwzNzpbMSw0Ml0sNDA6WzEsNDFdfSxpKFAsWzIsOF0pLGkoaixbMiwxMTZdKSx7NDk6NDUsNTI6WzEsNDZdfSxpKGosWzIsMTIxXSksezE6WzIsNF19LHs4OlsxLDQ3XX0saShBLFsyLDExXSksezQ6NDgsODpmLDE0OnAsNTU6bX0saShBLFsyLDEzXSksaShSLFsyLDE0XSksaShSLFsyLDE1XSksaShSLFsyLDE2XSksezIxOlsxLDQ5XX0sezIzOlsxLDUwXX0saShSLFsyLDE5XSksaShSLFsyLDIwXSksaShSLFsyLDIxXSksezI4OjUxLDM0OkgsNTQ6WX0saShSLFsyLDExMV0sezQxOjU0LDMzOlsxLDU3XSwzNDpbMSw1OV0sMzU6WzEsNTVdLDM4OlsxLDU2XSw0MjpbMSw1OF19KSx7Mjg6NjAsMzQ6SCw1NDpZfSx7MzM6WzEsNjFdLDM1OlsxLDYyXX0sezI4OjYzLDM0OkgsNTQ6WX0sezQ4OjY0LDUzOkZ9LHs1MzpbMiwxMjBdfSx7MTpbMiw1XX0saShBLFsyLDEyXSksaShSLFsyLDE3XSksaShSLFsyLDE4XSksaShSLFsyLDIyXSksaShydCxbMiwxMjJdKSxpKHJ0LFsyLDEyM10pLGkoUixbMiw0Nl0pLHszNDpbMSw2NV19LHszOTo2Niw0MzpKLDQ0Oml0LDQ1OmZ0fSx7MzQ6WzEsNzBdfSx7MzQ6WzEsNzFdfSxpKFIsWzIsMTEyXSksaShSLFsyLDMwXSx7MzM6WzEsNzJdLDM1OlsxLDc0XSwzODpbMSw3M119KSx7MzQ6WzEsNzVdfSx7MzQ6WzEsNzZdLDM2OlsxLDc3XX0saShSLFsyLDIzXSx7MzA6WzEsNzhdfSksaShqLFsyLDExN10pLGkoUixbMiw0N10sezMzOlsxLDgwXSwzODpbMSw3OV0sNDI6WzEsODFdfSksaShSLFsyLDQ4XSx7MzM6WzEsODNdLDM1OlsxLDgyXSw0MjpbMSw4NF19KSxpKFR0LFsyLDExM10pLGkoVHQsWzIsMTE0XSksaShUdCxbMiwxMTVdKSxpKFIsWzIsNTFdLHszNTpbMSw4NV0sMzg6WzEsODZdLDQyOlsxLDg3XX0pLGkoUixbMiw2Ml0sezMzOlsxLDkwXSwzNTpbMSw4OF0sMzg6WzEsODldfSksezM0OlsxLDkxXX0sezM5OjkyLDQzOkosNDQ6aXQsNDU6ZnR9LHszNDpbMSw5M119LGkoUixbMiwyNV0sezM1OlsxLDk0XX0pLHszMzpbMSw5NV19LHszMzpbMSw5Nl19LHszMTpbMSw5N119LHszOTo5OCw0MzpKLDQ0Oml0LDQ1OmZ0fSx7MzQ6WzEsOTldfSx7MzQ6WzEsMTAwXX0sezM0OlsxLDEwMV19LHszNDpbMSwxMDJdfSx7MzQ6WzEsMTAzXX0sezM0OlsxLDEwNF19LHszOToxMDUsNDM6Siw0NDppdCw0NTpmdH0sezM0OlsxLDEwNl19LHszNDpbMSwxMDddfSx7Mzk6MTA4LDQzOkosNDQ6aXQsNDU6ZnR9LHszNDpbMSwxMDldfSxpKFIsWzIsMzFdLHszNTpbMSwxMTFdLDM4OlsxLDExMF19KSxpKFIsWzIsMzJdLHszMzpbMSwxMTNdLDM1OlsxLDExMl19KSxpKFIsWzIsMzNdLHszMzpbMSwxMTRdLDM4OlsxLDExNV19KSx7MzQ6WzEsMTE2XSwzNjpbMSwxMTddfSx7MzQ6WzEsMTE4XX0sezM0OlsxLDExOV19LGkoUixbMiwyNF0pLGkoUixbMiw0OV0sezMzOlsxLDEyMF0sNDI6WzEsMTIxXX0pLGkoUixbMiw1M10sezM4OlsxLDEyMl0sNDI6WzEsMTIzXX0pLGkoUixbMiw2M10sezMzOlsxLDEyNV0sMzg6WzEsMTI0XX0pLGkoUixbMiw1MF0sezMzOlsxLDEyNl0sNDI6WzEsMTI3XX0pLGkoUixbMiw1NV0sezM1OlsxLDEyOF0sNDI6WzEsMTI5XX0pLGkoUixbMiw2Nl0sezMzOlsxLDEzMV0sMzU6WzEsMTMwXX0pLGkoUixbMiw1Ml0sezM4OlsxLDEzMl0sNDI6WzEsMTMzXX0pLGkoUixbMiw1NF0sezM1OlsxLDEzNF0sNDI6WzEsMTM1XX0pLGkoUixbMiw2N10sezM1OlsxLDEzN10sMzg6WzEsMTM2XX0pLGkoUixbMiw2NF0sezMzOlsxLDEzOV0sMzg6WzEsMTM4XX0pLGkoUixbMiw2NV0sezMzOlsxLDE0MV0sMzU6WzEsMTQwXX0pLGkoUixbMiw2OF0sezM1OlsxLDE0M10sMzg6WzEsMTQyXX0pLHszOToxNDQsNDM6Siw0NDppdCw0NTpmdH0sezM0OlsxLDE0NV19LHszNDpbMSwxNDZdfSx7MzQ6WzEsMTQ3XX0sezM0OlsxLDE0OF19LHszOToxNDksNDM6Siw0NDppdCw0NTpmdH0saShSLFsyLDI2XSksaShSLFsyLDI3XSksaShSLFsyLDI4XSksaShSLFsyLDI5XSksezM0OlsxLDE1MF19LHszNDpbMSwxNTFdfSx7Mzk6MTUyLDQzOkosNDQ6aXQsNDU6ZnR9LHszNDpbMSwxNTNdfSx7Mzk6MTU0LDQzOkosNDQ6aXQsNDU6ZnR9LHszNDpbMSwxNTVdfSx7MzQ6WzEsMTU2XX0sezM0OlsxLDE1N119LHszNDpbMSwxNThdfSx7MzQ6WzEsMTU5XX0sezM0OlsxLDE2MF19LHszNDpbMSwxNjFdfSx7Mzk6MTYyLDQzOkosNDQ6aXQsNDU6ZnR9LHszNDpbMSwxNjNdfSx7MzQ6WzEsMTY0XX0sezM0OlsxLDE2NV19LHszOToxNjYsNDM6Siw0NDppdCw0NTpmdH0sezM0OlsxLDE2N119LHszOToxNjgsNDM6Siw0NDppdCw0NTpmdH0sezM0OlsxLDE2OV19LHszNDpbMSwxNzBdfSx7MzQ6WzEsMTcxXX0sezM5OjE3Miw0MzpKLDQ0Oml0LDQ1OmZ0fSx7MzQ6WzEsMTczXX0saShSLFsyLDM3XSx7MzU6WzEsMTc0XX0pLGkoUixbMiwzOF0sezM4OlsxLDE3NV19KSxpKFIsWzIsMzZdLHszMzpbMSwxNzZdfSksaShSLFsyLDM5XSx7MzU6WzEsMTc3XX0pLGkoUixbMiwzNF0sezM4OlsxLDE3OF19KSxpKFIsWzIsMzVdLHszMzpbMSwxNzldfSksaShSLFsyLDYwXSx7NDI6WzEsMTgwXX0pLGkoUixbMiw3M10sezMzOlsxLDE4MV19KSxpKFIsWzIsNjFdLHs0MjpbMSwxODJdfSksaShSLFsyLDg0XSx7Mzg6WzEsMTgzXX0pLGkoUixbMiw3NF0sezMzOlsxLDE4NF19KSxpKFIsWzIsODNdLHszODpbMSwxODVdfSksaShSLFsyLDU5XSx7NDI6WzEsMTg2XX0pLGkoUixbMiw3Ml0sezMzOlsxLDE4N119KSxpKFIsWzIsNThdLHs0MjpbMSwxODhdfSksaShSLFsyLDc4XSx7MzU6WzEsMTg5XX0pLGkoUixbMiw3MV0sezMzOlsxLDE5MF19KSxpKFIsWzIsNzddLHszNTpbMSwxOTFdfSksaShSLFsyLDU3XSx7NDI6WzEsMTkyXX0pLGkoUixbMiw4NV0sezM4OlsxLDE5M119KSxpKFIsWzIsNTZdLHs0MjpbMSwxOTRdfSksaShSLFsyLDc5XSx7MzU6WzEsMTk1XX0pLGkoUixbMiw4MF0sezM1OlsxLDE5Nl19KSxpKFIsWzIsODZdLHszODpbMSwxOTddfSksaShSLFsyLDcwXSx7MzM6WzEsMTk4XX0pLGkoUixbMiw4MV0sezM4OlsxLDE5OV19KSxpKFIsWzIsNjldLHszMzpbMSwyMDBdfSksaShSLFsyLDc1XSx7MzU6WzEsMjAxXX0pLGkoUixbMiw3Nl0sezM1OlsxLDIwMl19KSxpKFIsWzIsODJdLHszODpbMSwyMDNdfSksezM0OlsxLDIwNF19LHszOToyMDUsNDM6Siw0NDppdCw0NTpmdH0sezM0OlsxLDIwNl19LHszNDpbMSwyMDddfSx7Mzk6MjA4LDQzOkosNDQ6aXQsNDU6ZnR9LHszNDpbMSwyMDldfSx7MzQ6WzEsMjEwXX0sezM0OlsxLDIxMV19LHszNDpbMSwyMTJdfSx7Mzk6MjEzLDQzOkosNDQ6aXQsNDU6ZnR9LHszNDpbMSwyMTRdfSx7Mzk6MjE1LDQzOkosNDQ6aXQsNDU6ZnR9LHszNDpbMSwyMTZdfSx7MzQ6WzEsMjE3XX0sezM0OlsxLDIxOF19LHszNDpbMSwyMTldfSx7MzQ6WzEsMjIwXX0sezM0OlsxLDIyMV19LHszNDpbMSwyMjJdfSx7Mzk6MjIzLDQzOkosNDQ6aXQsNDU6ZnR9LHszNDpbMSwyMjRdfSx7MzQ6WzEsMjI1XX0sezM0OlsxLDIyNl19LHszOToyMjcsNDM6Siw0NDppdCw0NTpmdH0sezM0OlsxLDIyOF19LHszOToyMjksNDM6Siw0NDppdCw0NTpmdH0sezM0OlsxLDIzMF19LHszNDpbMSwyMzFdfSx7MzQ6WzEsMjMyXX0sezM5OjIzMyw0MzpKLDQ0Oml0LDQ1OmZ0fSxpKFIsWzIsNDBdKSxpKFIsWzIsNDJdKSxpKFIsWzIsNDFdKSxpKFIsWzIsNDNdKSxpKFIsWzIsNDVdKSxpKFIsWzIsNDRdKSxpKFIsWzIsMTAxXSksaShSLFsyLDEwMl0pLGkoUixbMiw5OV0pLGkoUixbMiwxMDBdKSxpKFIsWzIsMTA0XSksaShSLFsyLDEwM10pLGkoUixbMiwxMDhdKSxpKFIsWzIsMTA3XSksaShSLFsyLDEwNl0pLGkoUixbMiwxMDVdKSxpKFIsWzIsMTEwXSksaShSLFsyLDEwOV0pLGkoUixbMiw5OF0pLGkoUixbMiw5N10pLGkoUixbMiw5Nl0pLGkoUixbMiw5NV0pLGkoUixbMiw5M10pLGkoUixbMiw5NF0pLGkoUixbMiw5Ml0pLGkoUixbMiw5MV0pLGkoUixbMiw5MF0pLGkoUixbMiw4OV0pLGkoUixbMiw4N10pLGkoUixbMiw4OF0pXSxkZWZhdWx0QWN0aW9uczp7OTpbMiwxMThdLDEwOlsyLDFdLDExOlsyLDJdLDE5OlsyLDNdLDI3OlsyLDRdLDQ2OlsyLDEyMF0sNDc6WzIsNV19LHBhcnNlRXJyb3I6ZnVuY3Rpb24oc3QseHQpe2lmKHh0LnJlY292ZXJhYmxlKXRoaXMudHJhY2Uoc3QpO2Vsc2V7dmFyIGh0PW5ldyBFcnJvcihzdCk7dGhyb3cgaHQuaGFzaD14dCxodH19LHBhcnNlOmZ1bmN0aW9uKHN0KXt2YXIgeHQ9dGhpcyxodD1bMF0sZHQ9W10sQ3Q9W251bGxdLHR0PVtdLFB0PXRoaXMudGFibGUscHQ9IiIsRnQ9MCxYPTAsUnQ9MixCdD0xLHZ0PXR0LnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLE90PU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksVnQ9e3l5Ont9fTtmb3IodmFyIHFlIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXkscWUpJiYoVnQueXlbcWVdPXRoaXMueXlbcWVdKTtPdC5zZXRJbnB1dChzdCxWdC55eSksVnQueXkubGV4ZXI9T3QsVnQueXkucGFyc2VyPXRoaXMsdHlwZW9mIE90Lnl5bGxvYz4idSImJihPdC55eWxsb2M9e30pO3ZhciBfbj1PdC55eWxsb2M7dHQucHVzaChfbik7dmFyIFRlPU90Lm9wdGlvbnMmJk90Lm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBWdC55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1WdC55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBXbigpe3ZhciBZdDtyZXR1cm4gWXQ9ZHQucG9wKCl8fE90LmxleCgpfHxCdCx0eXBlb2YgWXQhPSJudW1iZXIiJiYoWXQgaW5zdGFuY2VvZiBBcnJheSYmKGR0PVl0LFl0PWR0LnBvcCgpKSxZdD14dC5zeW1ib2xzX1tZdF18fFl0KSxZdH1mb3IodmFyIEFlLG5lLGtlLFZlLEVlPXt9LEhlLENlLCRlLHllOzspe2lmKG5lPWh0W2h0Lmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW25lXT9rZT10aGlzLmRlZmF1bHRBY3Rpb25zW25lXTooKEFlPT09bnVsbHx8dHlwZW9mIEFlPiJ1IikmJihBZT1XbigpKSxrZT1QdFtuZV0mJlB0W25lXVtBZV0pLHR5cGVvZiBrZT4idSJ8fCFrZS5sZW5ndGh8fCFrZVswXSl7dmFyIGZuPSIiO3llPVtdO2ZvcihIZSBpbiBQdFtuZV0pdGhpcy50ZXJtaW5hbHNfW0hlXSYmSGU+UnQmJnllLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tIZV0rIiciKTtPdC5zaG93UG9zaXRpb24/Zm49IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoRnQrMSkrYDoKYCtPdC5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK3llLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bQWVdfHxBZSkrIiciOmZuPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKEZ0KzEpKyI6IFVuZXhwZWN0ZWQgIisoQWU9PUJ0PyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW0FlXXx8QWUpKyInIiksdGhpcy5wYXJzZUVycm9yKGZuLHt0ZXh0Ok90Lm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tBZV18fEFlLGxpbmU6T3QueXlsaW5lbm8sbG9jOl9uLGV4cGVjdGVkOnllfSl9aWYoa2VbMF1pbnN0YW5jZW9mIEFycmF5JiZrZS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK25lKyIsIHRva2VuOiAiK0FlKTtzd2l0Y2goa2VbMF0pe2Nhc2UgMTpodC5wdXNoKEFlKSxDdC5wdXNoKE90Lnl5dGV4dCksdHQucHVzaChPdC55eWxsb2MpLGh0LnB1c2goa2VbMV0pLEFlPW51bGwsWD1PdC55eWxlbmcscHQ9T3QueXl0ZXh0LEZ0PU90Lnl5bGluZW5vLF9uPU90Lnl5bGxvYzticmVhaztjYXNlIDI6aWYoQ2U9dGhpcy5wcm9kdWN0aW9uc19ba2VbMV1dWzFdLEVlLiQ9Q3RbQ3QubGVuZ3RoLUNlXSxFZS5fJD17Zmlyc3RfbGluZTp0dFt0dC5sZW5ndGgtKENlfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6dHRbdHQubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dHRbdHQubGVuZ3RoLShDZXx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0dFt0dC5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LFRlJiYoRWUuXyQucmFuZ2U9W3R0W3R0Lmxlbmd0aC0oQ2V8fDEpXS5yYW5nZVswXSx0dFt0dC5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxWZT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoRWUsW3B0LFgsRnQsVnQueXksa2VbMV0sQ3QsdHRdLmNvbmNhdCh2dCkpLHR5cGVvZiBWZTwidSIpcmV0dXJuIFZlO0NlJiYoaHQ9aHQuc2xpY2UoMCwtMSpDZSoyKSxDdD1DdC5zbGljZSgwLC0xKkNlKSx0dD10dC5zbGljZSgwLC0xKkNlKSksaHQucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1trZVsxXV1bMF0pLEN0LnB1c2goRWUuJCksdHQucHVzaChFZS5fJCksJGU9UHRbaHRbaHQubGVuZ3RoLTJdXVtodFtodC5sZW5ndGgtMV1dLGh0LnB1c2goJGUpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxtdD1mdW5jdGlvbigpe3ZhciB5dD17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih4dCxodCl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih4dCxodCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoeHQpfSxzZXRJbnB1dDpmdW5jdGlvbihzdCx4dCl7cmV0dXJuIHRoaXMueXk9eHR8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXN0LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBzdD10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9c3QsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXN0LHRoaXMubWF0Y2hlZCs9c3Q7dmFyIHh0PXN0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4geHQ/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHN0fSx1bnB1dDpmdW5jdGlvbihzdCl7dmFyIHh0PXN0Lmxlbmd0aCxodD1zdC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXN0K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC14dCksdGhpcy5vZmZzZXQtPXh0O3ZhciBkdD10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxodC5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPWh0Lmxlbmd0aC0xKTt2YXIgQ3Q9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmh0PyhodC5sZW5ndGg9PT1kdC5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK2R0W2R0Lmxlbmd0aC1odC5sZW5ndGhdLmxlbmd0aC1odFswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLXh0fSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W0N0WzBdLEN0WzBdK3RoaXMueXlsZW5nLXh0XSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24oc3Qpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShzdCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgc3Q9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihzdC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3N0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIHN0PXRoaXMubWF0Y2g7cmV0dXJuIHN0Lmxlbmd0aDwyMCYmKHN0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1zdC5sZW5ndGgpKSwoc3Quc3Vic3RyKDAsMjApKyhzdC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHN0PXRoaXMucGFzdElucHV0KCkseHQ9bmV3IEFycmF5KHN0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHN0K3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCt4dCsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oc3QseHQpe3ZhciBodCxkdCxDdDtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoQ3Q9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoQ3QueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksZHQ9c3RbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLGR0JiYodGhpcy55eWxpbmVubys9ZHQubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46ZHQ/ZHRbZHQubGVuZ3RoLTFdLmxlbmd0aC1kdFtkdC5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitzdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1zdFswXSx0aGlzLm1hdGNoKz1zdFswXSx0aGlzLm1hdGNoZXM9c3QsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2Uoc3RbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXN0WzBdLGh0PXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLHh0LHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLGh0KXJldHVybiBodDtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgdHQgaW4gQ3QpdGhpc1t0dF09Q3RbdHRdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIHN0LHh0LGh0LGR0O3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIEN0PXRoaXMuX2N1cnJlbnRSdWxlcygpLHR0PTA7dHQ8Q3QubGVuZ3RoO3R0KyspaWYoaHQ9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tDdFt0dF1dKSxodCYmKCF4dHx8aHRbMF0ubGVuZ3RoPnh0WzBdLmxlbmd0aCkpe2lmKHh0PWh0LGR0PXR0LHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKHN0PXRoaXMudGVzdF9tYXRjaChodCxDdFt0dF0pLHN0IT09ITEpcmV0dXJuIHN0O2lmKHRoaXMuX2JhY2t0cmFjayl7eHQ9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4geHQ/KHN0PXRoaXMudGVzdF9tYXRjaCh4dCxDdFtkdF0pLHN0IT09ITE/c3Q6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciB4dD10aGlzLm5leHQoKTtyZXR1cm4geHR8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHh0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goeHQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3ZhciB4dD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiB4dD4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHh0KXtyZXR1cm4geHQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh4dHx8MCkseHQ+PTA/dGhpcy5jb25kaXRpb25TdGFja1t4dF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24oeHQpe3RoaXMuYmVnaW4oeHQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHh0LGh0LGR0LEN0KXtzd2l0Y2goZHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigib3Blbl9kaXJlY3RpdmUiKSw1MDtjYXNlIDE6cmV0dXJuIHRoaXMuYmVnaW4oInR5cGVfZGlyZWN0aXZlIiksNTE7Y2FzZSAyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiYXJnX2RpcmVjdGl2ZSIpLDk7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDUzO2Nhc2UgNDpyZXR1cm4gNTI7Y2FzZSA1OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwyMDtjYXNlIDY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDc6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDIyO2Nhc2UgODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2Nhc2UgOTp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAxMDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMTpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSAxMjpyZXR1cm4gMTQ7Y2FzZSAxMzpicmVhaztjYXNlIDE0OmJyZWFrO2Nhc2UgMTU6cmV0dXJuIDY7Y2FzZSAxNjpyZXR1cm4gNDA7Y2FzZSAxNzpyZXR1cm4gMzM7Y2FzZSAxODpyZXR1cm4gMzg7Y2FzZSAxOTpyZXR1cm4gNDI7Y2FzZSAyMDpyZXR1cm4gNDM7Y2FzZSAyMTpyZXR1cm4gNDQ7Y2FzZSAyMjpyZXR1cm4gNDU7Y2FzZSAyMzpyZXR1cm4gMzU7Y2FzZSAyNDpyZXR1cm4gMjk7Y2FzZSAyNTpyZXR1cm4gMzA7Y2FzZSAyNjpyZXR1cm4gMzc7Y2FzZSAyNzpyZXR1cm4gMzI7Y2FzZSAyODpyZXR1cm4gMjc7Y2FzZSAyOTpyZXR1cm4gMTA7Y2FzZSAzMDpyZXR1cm4gMTA7Y2FzZSAzMTpyZXR1cm4gOTtjYXNlIDMyOnJldHVybiJDQVJFVCI7Y2FzZSAzMzp0aGlzLmJlZ2luKCJvcHRpb25zIik7YnJlYWs7Y2FzZSAzNDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAzNTpyZXR1cm4gMTM7Y2FzZSAzNjpyZXR1cm4gMzY7Y2FzZSAzNzp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDM4OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDM5OnJldHVybiAzNDtjYXNlIDQwOnJldHVybiAzMTtjYXNlIDQxOnJldHVybiA1NDtjYXNlIDQyOnJldHVybiA4fX0scnVsZXM6Wy9eKD86JSVceykvaSwvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS9pLC9eKD86OikvaSwvXig/Olx9JSUpL2ksL14oPzooKD86KD8hXH0lJSkufFxuKSopKS9pLC9eKD86YWNjVGl0bGVccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccypce1xzKikvaSwvXig/OltcfV0pL2ksL14oPzpbXlx9XSopL2ksL14oPzooXHI/XG4pKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzolW15cbl0qKS9pLC9eKD86Z2l0R3JhcGhcYikvaSwvXig/OmNvbW1pdCg/PVxzfCQpKS9pLC9eKD86aWQ6KS9pLC9eKD86dHlwZTopL2ksL14oPzptc2c6KS9pLC9eKD86Tk9STUFMXGIpL2ksL14oPzpSRVZFUlNFXGIpL2ksL14oPzpISUdITElHSFRcYikvaSwvXig/OnRhZzopL2ksL14oPzpicmFuY2goPz1cc3wkKSkvaSwvXig/Om9yZGVyOikvaSwvXig/Om1lcmdlKD89XHN8JCkpL2ksL14oPzpjaGVycnktcGljayg/PVxzfCQpKS9pLC9eKD86Y2hlY2tvdXQoPz1cc3wkKSkvaSwvXig/OkxSXGIpL2ksL14oPzpUQlxiKS9pLC9eKD86OikvaSwvXig/OlxeKS9pLC9eKD86b3B0aW9uc1xyP1xuKS9pLC9eKD86WyBcclxuXHRdK2VuZFxiKS9pLC9eKD86W1xzXFNdKyg/PVsgXHJcblx0XStlbmQpKS9pLC9eKD86WyJdWyJdKS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbMC05XSsoPz1cc3wkKSkvaSwvXig/Olx3KFstXC4vXHddKlstXHddKT8pL2ksL14oPzokKS9pLC9eKD86XHMrKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbMTAsMTFdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbOF0saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOls2XSxpbmNsdXNpdmU6ITF9LGNsb3NlX2RpcmVjdGl2ZTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0XSxpbmNsdXNpdmU6ITF9LHR5cGVfZGlyZWN0aXZlOntydWxlczpbMiwzXSxpbmNsdXNpdmU6ITF9LG9wZW5fZGlyZWN0aXZlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSxvcHRpb25zOntydWxlczpbMzQsMzVdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbMzgsMzldLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsNSw3LDksMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzYsMzcsNDAsNDEsNDIsNDNdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4geXR9KCk7a3QubGV4ZXI9bXQ7ZnVuY3Rpb24gY3QoKXt0aGlzLnl5PXt9fXJldHVybiBjdC5wcm90b3R5cGU9a3Qsa3QuUGFyc2VyPWN0LG5ldyBjdH0oKTtPMHQucGFyc2VyPU8wdDtjb25zdCByemU9TzB0O2xldCBFSz1EZSgpLmdpdEdyYXBoLm1haW5CcmFuY2hOYW1lLGl6ZT1EZSgpLmdpdEdyYXBoLm1haW5CcmFuY2hPcmRlcixmMT17fSxnZz1udWxsLGtQPXt9O2tQW0VLXT17bmFtZTpFSyxvcmRlcjppemV9O2xldCBSZj17fTtSZltFS109Z2c7bGV0IHRkPUVLLGpCdD0iTFIiLHY5PTA7ZnVuY3Rpb24gTjB0KCl7cmV0dXJuIGpJdCh7bGVuZ3RoOjd9KX1jb25zdCBzemU9ZnVuY3Rpb24oaSxhLGYpe0oxLnBhcnNlRGlyZWN0aXZlKHRoaXMsaSxhLGYpfTtmdW5jdGlvbiBhemUoaSxhKXtjb25zdCBmPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIGkucmVkdWNlKChwLHYpPT57Y29uc3QgbT1hKHYpO3JldHVybiBmW21dfHwoZlttXT0hMCxwLnB1c2godikpLHB9LFtdKX1jb25zdCBvemU9ZnVuY3Rpb24oaSl7akJ0PWl9O2xldCAkQnQ9e307Y29uc3QgY3plPWZ1bmN0aW9uKGkpe1d0LmRlYnVnKCJvcHRpb25zIHN0ciIsaSksaT1pJiZpLnRyaW0oKSxpPWl8fCJ7fSI7dHJ5eyRCdD1KU09OLnBhcnNlKGkpfWNhdGNoKGEpe1d0LmVycm9yKCJlcnJvciB3aGlsZSBwYXJzaW5nIGdpdEdyYXBoIG9wdGlvbnMiLGEubWVzc2FnZSl9fSx1emU9ZnVuY3Rpb24oKXtyZXR1cm4gJEJ0fSxsemU9ZnVuY3Rpb24oaSxhLGYscCl7V3QuZGVidWcoIkVudGVyaW5nIGNvbW1pdDoiLGksYSxmLHApLGE9dWkuc2FuaXRpemVUZXh0KGEsRGUoKSksaT11aS5zYW5pdGl6ZVRleHQoaSxEZSgpKSxwPXVpLnNhbml0aXplVGV4dChwLERlKCkpO2NvbnN0IHY9e2lkOmF8fHY5KyItIitOMHQoKSxtZXNzYWdlOmksc2VxOnY5KyssdHlwZTpmfHxFUC5OT1JNQUwsdGFnOnB8fCIiLHBhcmVudHM6Z2c9PW51bGw/W106W2dnLmlkXSxicmFuY2g6dGR9O2dnPXYsZjFbdi5pZF09dixSZlt0ZF09di5pZCxXdC5kZWJ1ZygiaW4gcHVzaENvbW1pdCAiK3YuaWQpfSxoemU9ZnVuY3Rpb24oaSxhKXtpZihpPXVpLnNhbml0aXplVGV4dChpLERlKCkpLFJmW2ldPT09dm9pZCAwKVJmW2ldPWdnIT1udWxsP2dnLmlkOm51bGwsa1BbaV09e25hbWU6aSxvcmRlcjphP3BhcnNlSW50KGEsMTApOm51bGx9LHpCdChpKSxXdC5kZWJ1ZygiaW4gY3JlYXRlQnJhbmNoIik7ZWxzZXtsZXQgZj1uZXcgRXJyb3IoJ1RyeWluZyB0byBjcmVhdGUgYW4gZXhpc3RpbmcgYnJhbmNoLiAoSGVscDogRWl0aGVyIHVzZSBhIG5ldyBuYW1lIGlmIHlvdSB3YW50IGNyZWF0ZSBhIG5ldyBicmFuY2ggb3IgdHJ5IHVzaW5nICJjaGVja291dCAnK2krJyIpJyk7dGhyb3cgZi5oYXNoPXt0ZXh0OiJicmFuY2ggIitpLHRva2VuOiJicmFuY2ggIitpLGxpbmU6IjEiLGxvYzp7Zmlyc3RfbGluZToxLGxhc3RfbGluZToxLGZpcnN0X2NvbHVtbjoxLGxhc3RfY29sdW1uOjF9LGV4cGVjdGVkOlsnImNoZWNrb3V0ICcraSsnIiddfSxmfX0sZnplPWZ1bmN0aW9uKGksYSxmLHApe2k9dWkuc2FuaXRpemVUZXh0KGksRGUoKSksYT11aS5zYW5pdGl6ZVRleHQoYSxEZSgpKTtjb25zdCB2PWYxW1JmW3RkXV0sbT1mMVtSZltpXV07aWYodGQ9PT1pKXtsZXQgRT1uZXcgRXJyb3IoJ0luY29ycmVjdCB1c2FnZSBvZiAibWVyZ2UiLiBDYW5ub3QgbWVyZ2UgYSBicmFuY2ggdG8gaXRzZWxmJyk7dGhyb3cgRS5oYXNoPXt0ZXh0OiJtZXJnZSAiK2ksdG9rZW46Im1lcmdlICIraSxsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbImJyYW5jaCBhYmMiXX0sRX1lbHNlIGlmKHY9PT12b2lkIDB8fCF2KXtsZXQgRT1uZXcgRXJyb3IoJ0luY29ycmVjdCB1c2FnZSBvZiAibWVyZ2UiLiBDdXJyZW50IGJyYW5jaCAoJyt0ZCsiKWhhcyBubyBjb21taXRzIik7dGhyb3cgRS5oYXNoPXt0ZXh0OiJtZXJnZSAiK2ksdG9rZW46Im1lcmdlICIraSxsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbImNvbW1pdCJdfSxFfWVsc2UgaWYoUmZbaV09PT12b2lkIDApe2xldCBFPW5ldyBFcnJvcignSW5jb3JyZWN0IHVzYWdlIG9mICJtZXJnZSIuIEJyYW5jaCB0byBiZSBtZXJnZWQgKCcraSsiKSBkb2VzIG5vdCBleGlzdCIpO3Rocm93IEUuaGFzaD17dGV4dDoibWVyZ2UgIitpLHRva2VuOiJtZXJnZSAiK2ksbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyJicmFuY2ggIitpXX0sRX1lbHNlIGlmKG09PT12b2lkIDB8fCFtKXtsZXQgRT1uZXcgRXJyb3IoJ0luY29ycmVjdCB1c2FnZSBvZiAibWVyZ2UiLiBCcmFuY2ggdG8gYmUgbWVyZ2VkICgnK2krIikgaGFzIG5vIGNvbW1pdHMiKTt0aHJvdyBFLmhhc2g9e3RleHQ6Im1lcmdlICIraSx0b2tlbjoibWVyZ2UgIitpLGxpbmU6IjEiLGxvYzp7Zmlyc3RfbGluZToxLGxhc3RfbGluZToxLGZpcnN0X2NvbHVtbjoxLGxhc3RfY29sdW1uOjF9LGV4cGVjdGVkOlsnImNvbW1pdCInXX0sRX1lbHNlIGlmKHY9PT1tKXtsZXQgRT1uZXcgRXJyb3IoJ0luY29ycmVjdCB1c2FnZSBvZiAibWVyZ2UiLiBCb3RoIGJyYW5jaGVzIGhhdmUgc2FtZSBoZWFkJyk7dGhyb3cgRS5oYXNoPXt0ZXh0OiJtZXJnZSAiK2ksdG9rZW46Im1lcmdlICIraSxsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbImJyYW5jaCBhYmMiXX0sRX1lbHNlIGlmKGEmJmYxW2FdIT09dm9pZCAwKXtsZXQgRT1uZXcgRXJyb3IoJ0luY29ycmVjdCB1c2FnZSBvZiAibWVyZ2UiLiBDb21taXQgd2l0aCBpZDonK2ErIiBhbHJlYWR5IGV4aXN0cywgdXNlIGRpZmZlcmVudCBjdXN0b20gSWQiKTt0aHJvdyBFLmhhc2g9e3RleHQ6Im1lcmdlICIraSthK2YrcCx0b2tlbjoibWVyZ2UgIitpK2ErZitwLGxpbmU6IjEiLGxvYzp7Zmlyc3RfbGluZToxLGxhc3RfbGluZToxLGZpcnN0X2NvbHVtbjoxLGxhc3RfY29sdW1uOjF9LGV4cGVjdGVkOlsibWVyZ2UgIitpKyIgIithKyJfVU5JUVVFICIrZisiICIrcF19LEV9Y29uc3QgYj17aWQ6YXx8djkrIi0iK04wdCgpLG1lc3NhZ2U6Im1lcmdlZCBicmFuY2ggIitpKyIgaW50byAiK3RkLHNlcTp2OSsrLHBhcmVudHM6W2dnPT1udWxsP251bGw6Z2cuaWQsUmZbaV1dLGJyYW5jaDp0ZCx0eXBlOkVQLk1FUkdFLGN1c3RvbVR5cGU6ZixjdXN0b21JZDohIWEsdGFnOnB8fCIifTtnZz1iLGYxW2IuaWRdPWIsUmZbdGRdPWIuaWQsV3QuZGVidWcoUmYpLFd0LmRlYnVnKCJpbiBtZXJnZUJyYW5jaCIpfSxkemU9ZnVuY3Rpb24oaSxhLGYpe2lmKFd0LmRlYnVnKCJFbnRlcmluZyBjaGVycnlQaWNrOiIsaSxhLGYpLGk9dWkuc2FuaXRpemVUZXh0KGksRGUoKSksYT11aS5zYW5pdGl6ZVRleHQoYSxEZSgpKSxmPXVpLnNhbml0aXplVGV4dChmLERlKCkpLCFpfHxmMVtpXT09PXZvaWQgMCl7bGV0IG09bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgImNoZXJyeVBpY2siLiBTb3VyY2UgY29tbWl0IGlkIHNob3VsZCBleGlzdCBhbmQgcHJvdmlkZWQnKTt0aHJvdyBtLmhhc2g9e3RleHQ6ImNoZXJyeVBpY2sgIitpKyIgIithLHRva2VuOiJjaGVycnlQaWNrICIraSsiICIrYSxsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbImNoZXJyeS1waWNrIGFiYyJdfSxtfWxldCBwPWYxW2ldLHY9cC5icmFuY2g7aWYocC50eXBlPT09RVAuTUVSR0Upe2xldCBtPW5ldyBFcnJvcignSW5jb3JyZWN0IHVzYWdlIG9mICJjaGVycnlQaWNrIi4gU291cmNlIGNvbW1pdCBzaG91bGQgbm90IGJlIGEgbWVyZ2UgY29tbWl0Jyk7dGhyb3cgbS5oYXNoPXt0ZXh0OiJjaGVycnlQaWNrICIraSsiICIrYSx0b2tlbjoiY2hlcnJ5UGljayAiK2krIiAiK2EsbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyJjaGVycnktcGljayBhYmMiXX0sbX1pZighYXx8ZjFbYV09PT12b2lkIDApe2lmKHY9PT10ZCl7bGV0IEU9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgImNoZXJyeVBpY2siLiBTb3VyY2UgY29tbWl0IGlzIGFscmVhZHkgb24gY3VycmVudCBicmFuY2gnKTt0aHJvdyBFLmhhc2g9e3RleHQ6ImNoZXJyeVBpY2sgIitpKyIgIithLHRva2VuOiJjaGVycnlQaWNrICIraSsiICIrYSxsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbImNoZXJyeS1waWNrIGFiYyJdfSxFfWNvbnN0IG09ZjFbUmZbdGRdXTtpZihtPT09dm9pZCAwfHwhbSl7bGV0IEU9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgImNoZXJyeS1waWNrIi4gQ3VycmVudCBicmFuY2ggKCcrdGQrIiloYXMgbm8gY29tbWl0cyIpO3Rocm93IEUuaGFzaD17dGV4dDoiY2hlcnJ5UGljayAiK2krIiAiK2EsdG9rZW46ImNoZXJyeVBpY2sgIitpKyIgIithLGxpbmU6IjEiLGxvYzp7Zmlyc3RfbGluZToxLGxhc3RfbGluZToxLGZpcnN0X2NvbHVtbjoxLGxhc3RfY29sdW1uOjF9LGV4cGVjdGVkOlsiY2hlcnJ5LXBpY2sgYWJjIl19LEV9Y29uc3QgYj17aWQ6djkrIi0iK04wdCgpLG1lc3NhZ2U6ImNoZXJyeS1waWNrZWQgIitwKyIgaW50byAiK3RkLHNlcTp2OSsrLHBhcmVudHM6W2dnPT1udWxsP251bGw6Z2cuaWQscC5pZF0sYnJhbmNoOnRkLHR5cGU6RVAuQ0hFUlJZX1BJQ0ssdGFnOmY/PyJjaGVycnktcGljazoiK3AuaWR9O2dnPWIsZjFbYi5pZF09YixSZlt0ZF09Yi5pZCxXdC5kZWJ1ZyhSZiksV3QuZGVidWcoImluIGNoZXJyeVBpY2siKX19LHpCdD1mdW5jdGlvbihpKXtpZihpPXVpLnNhbml0aXplVGV4dChpLERlKCkpLFJmW2ldPT09dm9pZCAwKXtsZXQgYT1uZXcgRXJyb3IoJ1RyeWluZyB0byBjaGVja291dCBicmFuY2ggd2hpY2ggaXMgbm90IHlldCBjcmVhdGVkLiAoSGVscCB0cnkgdXNpbmcgImJyYW5jaCAnK2krJyIpJyk7dGhyb3cgYS5oYXNoPXt0ZXh0OiJjaGVja291dCAiK2ksdG9rZW46ImNoZWNrb3V0ICIraSxsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbJyJicmFuY2ggJytpKyciJ119LGF9ZWxzZXt0ZD1pO2NvbnN0IGE9UmZbdGRdO2dnPWYxW2FdfX07ZnVuY3Rpb24gcUJ0KGksYSxmKXtjb25zdCBwPWkuaW5kZXhPZihhKTtwPT09LTE/aS5wdXNoKGYpOmkuc3BsaWNlKHAsMSxmKX1mdW5jdGlvbiBIQnQoaSl7Y29uc3QgYT1pLnJlZHVjZSgodixtKT0+di5zZXE+bS5zZXE/djptLGlbMF0pO2xldCBmPSIiO2kuZm9yRWFjaChmdW5jdGlvbih2KXt2PT09YT9mKz0iCSoiOmYrPSIJfCJ9KTtjb25zdCBwPVtmLGEuaWQsYS5zZXFdO2ZvcihsZXQgdiBpbiBSZilSZlt2XT09PWEuaWQmJnAucHVzaCh2KTtpZihXdC5kZWJ1ZyhwLmpvaW4oIiAiKSksYS5wYXJlbnRzJiZhLnBhcmVudHMubGVuZ3RoPT0yKXtjb25zdCB2PWYxW2EucGFyZW50c1swXV07cUJ0KGksYSx2KSxpLnB1c2goZjFbYS5wYXJlbnRzWzFdXSl9ZWxzZXtpZihhLnBhcmVudHMubGVuZ3RoPT0wKXJldHVybjt7Y29uc3Qgdj1mMVthLnBhcmVudHNdO3FCdChpLGEsdil9fWk9YXplKGksdj0+di5pZCksSEJ0KGkpfWNvbnN0IGd6ZT1mdW5jdGlvbigpe1d0LmRlYnVnKGYxKTtjb25zdCBpPVZCdCgpWzBdO0hCdChbaV0pfSxwemU9ZnVuY3Rpb24oKXtmMT17fSxnZz1udWxsO2xldCBpPURlKCkuZ2l0R3JhcGgubWFpbkJyYW5jaE5hbWUsYT1EZSgpLmdpdEdyYXBoLm1haW5CcmFuY2hPcmRlcjtSZj17fSxSZltpXT1udWxsLGtQPXt9LGtQW2ldPXtuYW1lOmksb3JkZXI6YX0sdGQ9aSx2OT0wLGNnKCl9LGJ6ZT1mdW5jdGlvbigpe3JldHVybiBPYmplY3QudmFsdWVzKGtQKS5tYXAoKGEsZik9PmEub3JkZXIhPT1udWxsP2E6ey4uLmEsb3JkZXI6cGFyc2VGbG9hdChgMC4ke2Z9YCwxMCl9KS5zb3J0KChhLGYpPT5hLm9yZGVyLWYub3JkZXIpLm1hcCgoe25hbWU6YX0pPT4oe25hbWU6YX0pKX0sdnplPWZ1bmN0aW9uKCl7cmV0dXJuIFJmfSx3emU9ZnVuY3Rpb24oKXtyZXR1cm4gZjF9LFZCdD1mdW5jdGlvbigpe2NvbnN0IGk9T2JqZWN0LmtleXMoZjEpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gZjFbYV19KTtyZXR1cm4gaS5mb3JFYWNoKGZ1bmN0aW9uKGEpe1d0LmRlYnVnKGEuaWQpfSksaS5zb3J0KChhLGYpPT5hLnNlcS1mLnNlcSksaX0sbXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRkfSx5emU9ZnVuY3Rpb24oKXtyZXR1cm4gakJ0fSx4emU9ZnVuY3Rpb24oKXtyZXR1cm4gZ2d9LEVQPXtOT1JNQUw6MCxSRVZFUlNFOjEsSElHSExJR0hUOjIsTUVSR0U6MyxDSEVSUllfUElDSzo0fSxremU9e3BhcnNlRGlyZWN0aXZlOnN6ZSxnZXRDb25maWc6KCk9PkRlKCkuZ2l0R3JhcGgsc2V0RGlyZWN0aW9uOm96ZSxzZXRPcHRpb25zOmN6ZSxnZXRPcHRpb25zOnV6ZSxjb21taXQ6bHplLGJyYW5jaDpoemUsbWVyZ2U6ZnplLGNoZXJyeVBpY2s6ZHplLGNoZWNrb3V0OnpCdCxwcmV0dHlQcmludDpnemUsY2xlYXI6cHplLGdldEJyYW5jaGVzQXNPYmpBcnJheTpiemUsZ2V0QnJhbmNoZXM6dnplLGdldENvbW1pdHM6d3plLGdldENvbW1pdHNBcnJheTpWQnQsZ2V0Q3VycmVudEJyYW5jaDptemUsZ2V0RGlyZWN0aW9uOnl6ZSxnZXRIZWFkOnh6ZSxzZXRBY2NUaXRsZTptMCxnZXRBY2NUaXRsZTp1ZyxnZXRBY2NEZXNjcmlwdGlvbjpoZyxzZXRBY2NEZXNjcmlwdGlvbjpsZyxzZXREaWFncmFtVGl0bGU6TmIsZ2V0RGlhZ3JhbVRpdGxlOmhwLGNvbW1pdFR5cGU6RVB9O2xldCBUUD17fTtjb25zdCBSYj17Tk9STUFMOjAsUkVWRVJTRToxLEhJR0hMSUdIVDoyLE1FUkdFOjMsQ0hFUlJZX1BJQ0s6NH0sdzk9ODtsZXQgZWQ9e30sX1A9e30sVEs9W10sQ1A9MCx4MD0iTFIiO2NvbnN0IEV6ZT0oKT0+e2VkPXt9LF9QPXt9LFRQPXt9LENQPTAsVEs9W10seDA9IkxSIn0sR0J0PWk9Pntjb25zdCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7bGV0IGY9W107dHlwZW9mIGk9PSJzdHJpbmciP2Y9aS5zcGxpdCgvXFxufFxufDxiclxzKlwvPz4vZ2kpOkFycmF5LmlzQXJyYXkoaSk/Zj1pOmY9W107Zm9yKGNvbnN0IHAgb2YgZil7Y29uc3Qgdj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidHNwYW4iKTt2LnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpLHYuc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLHYuc2V0QXR0cmlidXRlKCJ4IiwiMCIpLHYuc2V0QXR0cmlidXRlKCJjbGFzcyIsInJvdyIpLHYudGV4dENvbnRlbnQ9cC50cmltKCksYS5hcHBlbmRDaGlsZCh2KX1yZXR1cm4gYX0sVUJ0PShpLGEsZik9Pntjb25zdCBwPUpOKCkuZ2l0R3JhcGgsdj1pLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiY29tbWl0LWJ1bGxldHMiKSxtPWkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjb21taXQtbGFiZWxzIik7bGV0IGI9MDt4MD09PSJUQiImJihiPTMwKSxPYmplY3Qua2V5cyhhKS5zb3J0KChBLFApPT5hW0FdLnNlcS1hW1BdLnNlcSkuZm9yRWFjaChBPT57Y29uc3QgUD1hW0FdLEY9eDA9PT0iVEIiP2IrMTA6ZWRbUC5icmFuY2hdLnBvcyxqPXgwPT09IlRCIj9lZFtQLmJyYW5jaF0ucG9zOmIrMTA7aWYoZil7bGV0IFIsSD1QLmN1c3RvbVR5cGUhPT12b2lkIDAmJlAuY3VzdG9tVHlwZSE9PSIiP1AuY3VzdG9tVHlwZTpQLnR5cGU7c3dpdGNoKEgpe2Nhc2UgUmIuTk9STUFMOlI9ImNvbW1pdC1ub3JtYWwiO2JyZWFrO2Nhc2UgUmIuUkVWRVJTRTpSPSJjb21taXQtcmV2ZXJzZSI7YnJlYWs7Y2FzZSBSYi5ISUdITElHSFQ6Uj0iY29tbWl0LWhpZ2hsaWdodCI7YnJlYWs7Y2FzZSBSYi5NRVJHRTpSPSJjb21taXQtbWVyZ2UiO2JyZWFrO2Nhc2UgUmIuQ0hFUlJZX1BJQ0s6Uj0iY29tbWl0LWNoZXJyeS1waWNrIjticmVhaztkZWZhdWx0OlI9ImNvbW1pdC1ub3JtYWwifWlmKEg9PT1SYi5ISUdITElHSFQpe2NvbnN0IFk9di5hcHBlbmQoInJlY3QiKTtZLmF0dHIoIngiLGotMTApLFkuYXR0cigieSIsRi0xMCksWS5hdHRyKCJoZWlnaHQiLDIwKSxZLmF0dHIoIndpZHRoIiwyMCksWS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke1AuaWR9IGNvbW1pdC1oaWdobGlnaHQke2VkW1AuYnJhbmNoXS5pbmRleCV3OX0gJHtSfS1vdXRlcmApLHYuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsai02KS5hdHRyKCJ5IixGLTYpLmF0dHIoImhlaWdodCIsMTIpLmF0dHIoIndpZHRoIiwxMikuYXR0cigiY2xhc3MiLGBjb21taXQgJHtQLmlkfSBjb21taXQke2VkW1AuYnJhbmNoXS5pbmRleCV3OX0gJHtSfS1pbm5lcmApfWVsc2UgaWYoSD09PVJiLkNIRVJSWV9QSUNLKXYuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsaikuYXR0cigiY3kiLEYpLmF0dHIoInIiLDEwKS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke1AuaWR9ICR7Un1gKSx2LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGotMykuYXR0cigiY3kiLEYrMikuYXR0cigiciIsMi43NSkuYXR0cigiZmlsbCIsIiNmZmYiKS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke1AuaWR9ICR7Un1gKSx2LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGorMykuYXR0cigiY3kiLEYrMikuYXR0cigiciIsMi43NSkuYXR0cigiZmlsbCIsIiNmZmYiKS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke1AuaWR9ICR7Un1gKSx2LmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixqKzMpLmF0dHIoInkxIixGKzEpLmF0dHIoIngyIixqKS5hdHRyKCJ5MiIsRi01KS5hdHRyKCJzdHJva2UiLCIjZmZmIikuYXR0cigiY2xhc3MiLGBjb21taXQgJHtQLmlkfSAke1J9YCksdi5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsai0zKS5hdHRyKCJ5MSIsRisxKS5hdHRyKCJ4MiIsaikuYXR0cigieTIiLEYtNSkuYXR0cigic3Ryb2tlIiwiI2ZmZiIpLmF0dHIoImNsYXNzIixgY29tbWl0ICR7UC5pZH0gJHtSfWApO2Vsc2V7Y29uc3QgWT12LmFwcGVuZCgiY2lyY2xlIik7aWYoWS5hdHRyKCJjeCIsaiksWS5hdHRyKCJjeSIsRiksWS5hdHRyKCJyIixQLnR5cGU9PT1SYi5NRVJHRT85OjEwKSxZLmF0dHIoImNsYXNzIixgY29tbWl0ICR7UC5pZH0gY29tbWl0JHtlZFtQLmJyYW5jaF0uaW5kZXgldzl9YCksSD09PVJiLk1FUkdFKXtjb25zdCBydD12LmFwcGVuZCgiY2lyY2xlIik7cnQuYXR0cigiY3giLGopLHJ0LmF0dHIoImN5IixGKSxydC5hdHRyKCJyIiw2KSxydC5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke1J9ICR7UC5pZH0gY29tbWl0JHtlZFtQLmJyYW5jaF0uaW5kZXgldzl9YCl9SD09PVJiLlJFVkVSU0UmJnYuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsYE0gJHtqLTV9LCR7Ri01fUwke2orNX0sJHtGKzV9TSR7ai01fSwke0YrNX1MJHtqKzV9LCR7Ri01fWApLmF0dHIoImNsYXNzIixgY29tbWl0ICR7Un0gJHtQLmlkfSBjb21taXQke2VkW1AuYnJhbmNoXS5pbmRleCV3OX1gKX19aWYoeDA9PT0iVEIiP19QW1AuaWRdPXt4OmoseTpiKzEwfTpfUFtQLmlkXT17eDpiKzEwLHk6Rn0sZil7aWYoUC50eXBlIT09UmIuQ0hFUlJZX1BJQ0smJihQLmN1c3RvbUlkJiZQLnR5cGU9PT1SYi5NRVJHRXx8UC50eXBlIT09UmIuTUVSR0UpJiZwLnNob3dDb21taXRMYWJlbCl7Y29uc3QgWT1tLmFwcGVuZCgiZyIpLHJ0PVkuaW5zZXJ0KCJyZWN0IikuYXR0cigiY2xhc3MiLCJjb21taXQtbGFiZWwtYmtnIiksSj1ZLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGIpLmF0dHIoInkiLEYrMjUpLmF0dHIoImNsYXNzIiwiY29tbWl0LWxhYmVsIikudGV4dChQLmlkKTtsZXQgaXQ9Si5ub2RlKCkuZ2V0QkJveCgpO2lmKHJ0LmF0dHIoIngiLGIrMTAtaXQud2lkdGgvMi0yKS5hdHRyKCJ5IixGKzEzLjUpLmF0dHIoIndpZHRoIixpdC53aWR0aCsyKjIpLmF0dHIoImhlaWdodCIsaXQuaGVpZ2h0KzIqMikseDA9PT0iVEIiJiYocnQuYXR0cigieCIsai0oaXQud2lkdGgrNCo0KzUpKS5hdHRyKCJ5IixGLTEyKSxKLmF0dHIoIngiLGotKGl0LndpZHRoKzQqNCkpLmF0dHIoInkiLEYraXQuaGVpZ2h0LTEyKSkseDAhPT0iVEIiJiZKLmF0dHIoIngiLGIrMTAtaXQud2lkdGgvMikscC5yb3RhdGVDb21taXRMYWJlbClpZih4MD09PSJUQiIpSi5hdHRyKCJ0cmFuc2Zvcm0iLCJyb3RhdGUoLTQ1LCAiK2orIiwgIitGKyIpIikscnQuYXR0cigidHJhbnNmb3JtIiwicm90YXRlKC00NSwgIitqKyIsICIrRisiKSIpO2Vsc2V7bGV0IGZ0PS03LjUtKGl0LndpZHRoKzEwKS8yNSo5LjUsVHQ9MTAraXQud2lkdGgvMjUqOC41O1kuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZnQrIiwgIitUdCsiKSByb3RhdGUoLTQ1LCAiK2IrIiwgIitGKyIpIil9fWlmKFAudGFnKXtjb25zdCBZPW0uaW5zZXJ0KCJwb2x5Z29uIikscnQ9bS5hcHBlbmQoImNpcmNsZSIpLEo9bS5hcHBlbmQoInRleHQiKS5hdHRyKCJ5IixGLTE2KS5hdHRyKCJjbGFzcyIsInRhZy1sYWJlbCIpLnRleHQoUC50YWcpO2xldCBpdD1KLm5vZGUoKS5nZXRCQm94KCk7Si5hdHRyKCJ4IixiKzEwLWl0LndpZHRoLzIpO2NvbnN0IGZ0PWl0LmhlaWdodC8yLFR0PUYtMTkuMjtZLmF0dHIoImNsYXNzIiwidGFnLWxhYmVsLWJrZyIpLmF0dHIoInBvaW50cyIsYAogICAgICAgICAgJHtiLWl0LndpZHRoLzItNC8yfSwke1R0KzJ9CiAgICAgICAgICAke2ItaXQud2lkdGgvMi00LzJ9LCR7VHQtMn0KICAgICAgICAgICR7YisxMC1pdC53aWR0aC8yLTR9LCR7VHQtZnQtMn0KICAgICAgICAgICR7YisxMCtpdC53aWR0aC8yKzR9LCR7VHQtZnQtMn0KICAgICAgICAgICR7YisxMCtpdC53aWR0aC8yKzR9LCR7VHQrZnQrMn0KICAgICAgICAgICR7YisxMC1pdC53aWR0aC8yLTR9LCR7VHQrZnQrMn1gKSxydC5hdHRyKCJjeCIsYi1pdC53aWR0aC8yKzQvMikuYXR0cigiY3kiLFR0KS5hdHRyKCJyIiwxLjUpLmF0dHIoImNsYXNzIiwidGFnLWhvbGUiKSx4MD09PSJUQiImJihZLmF0dHIoImNsYXNzIiwidGFnLWxhYmVsLWJrZyIpLmF0dHIoInBvaW50cyIsYAogICAgICAgICAgICAke2p9LCR7YisyfQogICAgICAgICAgICAke2p9LCR7Yi0yfQogICAgICAgICAgICAke2orMTB9LCR7Yi1mdC0yfQogICAgICAgICAgICAke2orMTAraXQud2lkdGgrNH0sJHtiLWZ0LTJ9CiAgICAgICAgICAgICR7aisxMCtpdC53aWR0aCs0fSwke2IrZnQrMn0KICAgICAgICAgICAgJHtqKzEwfSwke2IrZnQrMn1gKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMTIsMTIpIHJvdGF0ZSg0NSwgIitqKyIsIitiKyIpIikscnQuYXR0cigiY3giLGorNC8yKS5hdHRyKCJjeSIsYikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDEyLDEyKSByb3RhdGUoNDUsICIraisiLCIrYisiKSIpLEouYXR0cigieCIsais1KS5hdHRyKCJ5IixiKzMpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgxNCwxNCkgcm90YXRlKDQ1LCAiK2orIiwiK2IrIikiKSl9fWIrPTUwLGI+Q1AmJihDUD1iKX0pfSxUemU9KGksYSxmKT0+T2JqZWN0LmtleXMoZikuZmlsdGVyKG09PmZbbV0uYnJhbmNoPT09YS5icmFuY2gmJmZbbV0uc2VxPmkuc2VxJiZmW21dLnNlcTxhLnNlcSkubGVuZ3RoPjAsU1A9KGksYSxmPTApPT57Y29uc3QgcD1pK01hdGguYWJzKGktYSkvMjtpZihmPjUpcmV0dXJuIHA7aWYoVEsuZXZlcnkoYj0+TWF0aC5hYnMoYi1wKT49MTApKXJldHVybiBUSy5wdXNoKHApLHA7Y29uc3QgbT1NYXRoLmFicyhpLWEpO3JldHVybiBTUChpLGEtbS81LGYrMSl9LF96ZT0oaSxhLGYscCk9Pntjb25zdCB2PV9QW2EuaWRdLG09X1BbZi5pZF0sYj1UemUoYSxmLHApO2xldCBFPSIiLEM9IiIsQT0wLFA9MCxGPWVkW2YuYnJhbmNoXS5pbmRleCxqO2lmKGIpe0U9IkEgMTAgMTAsIDAsIDAsIDAsIixDPSJBIDEwIDEwLCAwLCAwLCAxLCIsQT0xMCxQPTEwLEY9ZWRbZi5icmFuY2hdLmluZGV4O2NvbnN0IFI9di55PG0ueT9TUCh2LnksbS55KTpTUChtLnksdi55KSxIPXYueDxtLng/U1Aodi54LG0ueCk6U1AobS54LHYueCk7eDA9PT0iVEIiP3YueDxtLng/aj1gTSAke3YueH0gJHt2Lnl9IEwgJHtILUF9ICR7di55fSAke0N9ICR7SH0gJHt2LnkrUH0gTCAke0h9ICR7bS55LUF9ICR7RX0gJHtIK1B9ICR7bS55fSBMICR7bS54fSAke20ueX1gOmo9YE0gJHt2Lnh9ICR7di55fSBMICR7SCtBfSAke3YueX0gJHtFfSAke0h9ICR7di55K1B9IEwgJHtIfSAke20ueS1BfSAke0N9ICR7SC1QfSAke20ueX0gTCAke20ueH0gJHttLnl9YDp2Lnk8bS55P2o9YE0gJHt2Lnh9ICR7di55fSBMICR7di54fSAke1ItQX0gJHtFfSAke3YueCtQfSAke1J9IEwgJHttLngtQX0gJHtSfSAke0N9ICR7bS54fSAke1IrUH0gTCAke20ueH0gJHttLnl9YDpqPWBNICR7di54fSAke3YueX0gTCAke3YueH0gJHtSK0F9ICR7Q30gJHt2LngrUH0gJHtSfSBMICR7bS54LUF9ICR7Un0gJHtFfSAke20ueH0gJHtSLVB9IEwgJHttLnh9ICR7bS55fWB9ZWxzZSB4MD09PSJUQiI/KHYueDxtLngmJihFPSJBIDIwIDIwLCAwLCAwLCAwLCIsQz0iQSAyMCAyMCwgMCwgMCwgMSwiLEE9MjAsUD0yMCxGPWVkW2YuYnJhbmNoXS5pbmRleCxqPWBNICR7di54fSAke3YueX0gTCAke20ueC1BfSAke3YueX0gJHtDfSAke20ueH0gJHt2LnkrUH0gTCAke20ueH0gJHttLnl9YCksdi54Pm0ueCYmKEU9IkEgMjAgMjAsIDAsIDAsIDAsIixDPSJBIDIwIDIwLCAwLCAwLCAxLCIsQT0yMCxQPTIwLEY9ZWRbYS5icmFuY2hdLmluZGV4LGo9YE0gJHt2Lnh9ICR7di55fSBMICR7di54fSAke20ueS1BfSAke0N9ICR7di54LVB9ICR7bS55fSBMICR7bS54fSAke20ueX1gKSx2Lng9PT1tLngmJihGPWVkW2EuYnJhbmNoXS5pbmRleCxqPWBNICR7di54fSAke3YueX0gTCAke3YueCtBfSAke3YueX0gJHtFfSAke3YueCtQfSAke20ueStBfSBMICR7bS54fSAke20ueX1gKSk6KHYueTxtLnkmJihFPSJBIDIwIDIwLCAwLCAwLCAwLCIsQT0yMCxQPTIwLEY9ZWRbZi5icmFuY2hdLmluZGV4LGo9YE0gJHt2Lnh9ICR7di55fSBMICR7di54fSAke20ueS1BfSAke0V9ICR7di54K1B9ICR7bS55fSBMICR7bS54fSAke20ueX1gKSx2Lnk+bS55JiYoRT0iQSAyMCAyMCwgMCwgMCwgMCwiLEE9MjAsUD0yMCxGPWVkW2EuYnJhbmNoXS5pbmRleCxqPWBNICR7di54fSAke3YueX0gTCAke20ueC1BfSAke3YueX0gJHtFfSAke20ueH0gJHt2LnktUH0gTCAke20ueH0gJHttLnl9YCksdi55PT09bS55JiYoRj1lZFthLmJyYW5jaF0uaW5kZXgsaj1gTSAke3YueH0gJHt2Lnl9IEwgJHt2Lnh9ICR7bS55LUF9ICR7RX0gJHt2LngrUH0gJHttLnl9IEwgJHttLnh9ICR7bS55fWApKTtpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLGopLmF0dHIoImNsYXNzIiwiYXJyb3cgYXJyb3ciK0YldzkpfSxDemU9KGksYSk9Pntjb25zdCBmPWkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjb21taXQtYXJyb3dzIik7T2JqZWN0LmtleXMoYSkuZm9yRWFjaChwPT57Y29uc3Qgdj1hW3BdO3YucGFyZW50cyYmdi5wYXJlbnRzLmxlbmd0aD4wJiZ2LnBhcmVudHMuZm9yRWFjaChtPT57X3plKGYsYVttXSx2LGEpfSl9KX0sU3plPShpLGEpPT57Y29uc3QgZj1KTigpLmdpdEdyYXBoLHA9aS5hcHBlbmQoImciKTthLmZvckVhY2goKHYsbSk9Pntjb25zdCBiPW0ldzksRT1lZFt2Lm5hbWVdLnBvcyxDPXAuYXBwZW5kKCJsaW5lIik7Qy5hdHRyKCJ4MSIsMCksQy5hdHRyKCJ5MSIsRSksQy5hdHRyKCJ4MiIsQ1ApLEMuYXR0cigieTIiLEUpLEMuYXR0cigiY2xhc3MiLCJicmFuY2ggYnJhbmNoIitiKSx4MD09PSJUQiImJihDLmF0dHIoInkxIiwzMCksQy5hdHRyKCJ4MSIsRSksQy5hdHRyKCJ5MiIsQ1ApLEMuYXR0cigieDIiLEUpKSxUSy5wdXNoKEUpO2xldCBBPXYubmFtZTtjb25zdCBQPUdCdChBKSxGPXAuaW5zZXJ0KCJyZWN0IiksUj1wLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiYnJhbmNoTGFiZWwiKS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIGJyYW5jaC1sYWJlbCIrYik7Ui5ub2RlKCkuYXBwZW5kQ2hpbGQoUCk7bGV0IEg9UC5nZXRCQm94KCk7Ri5hdHRyKCJjbGFzcyIsImJyYW5jaExhYmVsQmtnIGxhYmVsIitiKS5hdHRyKCJyeCIsNCkuYXR0cigicnkiLDQpLmF0dHIoIngiLC1ILndpZHRoLTQtKGYucm90YXRlQ29tbWl0TGFiZWw9PT0hMD8zMDowKSkuYXR0cigieSIsLUguaGVpZ2h0LzIrOCkuYXR0cigid2lkdGgiLEgud2lkdGgrMTgpLmF0dHIoImhlaWdodCIsSC5oZWlnaHQrNCksUi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoLUgud2lkdGgtMTQtKGYucm90YXRlQ29tbWl0TGFiZWw9PT0hMD8zMDowKSkrIiwgIisoRS1ILmhlaWdodC8yLTEpKyIpIikseDA9PT0iVEIiJiYoRi5hdHRyKCJ4IixFLUgud2lkdGgvMi0xMCkuYXR0cigieSIsMCksUi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoRS1ILndpZHRoLzItNSkrIiwgMCkiKSkseDAhPT0iVEIiJiZGLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgtMTksICIrKEUtSC5oZWlnaHQvMikrIikiKX0pfSxBemU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpyemUsZGI6a3plLHJlbmRlcmVyOntkcmF3OmZ1bmN0aW9uKGksYSxmLHApe0V6ZSgpO2NvbnN0IHY9Sk4oKSxtPXYuZ2l0R3JhcGg7V3QuZGVidWcoImluIGdpdGdyYXBoIHJlbmRlcmVyIixpK2AKYCwiaWQ6IixhLGYpLFRQPXAuZGIuZ2V0Q29tbWl0cygpO2NvbnN0IGI9cC5kYi5nZXRCcmFuY2hlc0FzT2JqQXJyYXkoKTt4MD1wLmRiLmdldERpcmVjdGlvbigpO2NvbnN0IEU9eHIoYFtpZD0iJHthfSJdYCk7bGV0IEM9MDtiLmZvckVhY2goKEEsUCk9Pntjb25zdCBGPUdCdChBLm5hbWUpLGo9RS5hcHBlbmQoImciKSxSPWouaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJicmFuY2hMYWJlbCIpLEg9Ui5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIGJyYW5jaC1sYWJlbCIpO0gubm9kZSgpLmFwcGVuZENoaWxkKEYpO2xldCBZPUYuZ2V0QkJveCgpO2VkW0EubmFtZV09e3BvczpDLGluZGV4OlB9LEMrPTUwKyhtLnJvdGF0ZUNvbW1pdExhYmVsPzQwOjApKyh4MD09PSJUQiI/WS53aWR0aC8yOjApLEgucmVtb3ZlKCksUi5yZW1vdmUoKSxqLnJlbW92ZSgpfSksVUJ0KEUsVFAsITEpLG0uc2hvd0JyYW5jaGVzJiZTemUoRSxiKSxDemUoRSxUUCksVUJ0KEUsVFAsITApLHRvLmluc2VydFRpdGxlKEUsImdpdFRpdGxlVGV4dCIsbS50aXRsZVRvcE1hcmdpbixwLmRiLmdldERpYWdyYW1UaXRsZSgpKSxTT3Qodm9pZCAwLEUsbS5kaWFncmFtUGFkZGluZyxtLnVzZU1heFdpZHRoPz92LnVzZU1heFdpZHRoKX19LHN0eWxlczppPT5gCiAgLmNvbW1pdC1pZCwKICAuY29tbWl0LW1zZywKICAuYnJhbmNoLWxhYmVsIHsKICAgIGZpbGw6IGxpZ2h0Z3JleTsKICAgIGNvbG9yOiBsaWdodGdyZXk7CiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmOwogICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpOwogIH0KICAke1swLDEsMiwzLDQsNSw2LDddLm1hcChhPT5gCiAgICAgICAgLmJyYW5jaC1sYWJlbCR7YX0geyBmaWxsOiAke2lbImdpdEJyYW5jaExhYmVsIithXX07IH0KICAgICAgICAuY29tbWl0JHthfSB7IHN0cm9rZTogJHtpWyJnaXQiK2FdfTsgZmlsbDogJHtpWyJnaXQiK2FdfTsgfQogICAgICAgIC5jb21taXQtaGlnaGxpZ2h0JHthfSB7IHN0cm9rZTogJHtpWyJnaXRJbnYiK2FdfTsgZmlsbDogJHtpWyJnaXRJbnYiK2FdfTsgfQogICAgICAgIC5sYWJlbCR7YX0gIHsgZmlsbDogJHtpWyJnaXQiK2FdfTsgfQogICAgICAgIC5hcnJvdyR7YX0geyBzdHJva2U6ICR7aVsiZ2l0IithXX07IH0KICAgICAgICBgKS5qb2luKGAKYCl9CgogIC5icmFuY2ggewogICAgc3Ryb2tlLXdpZHRoOiAxOwogICAgc3Ryb2tlOiAke2kubGluZUNvbG9yfTsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDI7CiAgfQogIC5jb21taXQtbGFiZWwgeyBmb250LXNpemU6ICR7aS5jb21taXRMYWJlbEZvbnRTaXplfTsgZmlsbDogJHtpLmNvbW1pdExhYmVsQ29sb3J9O30KICAuY29tbWl0LWxhYmVsLWJrZyB7IGZvbnQtc2l6ZTogJHtpLmNvbW1pdExhYmVsRm9udFNpemV9OyBmaWxsOiAke2kuY29tbWl0TGFiZWxCYWNrZ3JvdW5kfTsgb3BhY2l0eTogMC41OyB9CiAgLnRhZy1sYWJlbCB7IGZvbnQtc2l6ZTogJHtpLnRhZ0xhYmVsRm9udFNpemV9OyBmaWxsOiAke2kudGFnTGFiZWxDb2xvcn07fQogIC50YWctbGFiZWwtYmtnIHsgZmlsbDogJHtpLnRhZ0xhYmVsQmFja2dyb3VuZH07IHN0cm9rZTogJHtpLnRhZ0xhYmVsQm9yZGVyfTsgfQogIC50YWctaG9sZSB7IGZpbGw6ICR7aS50ZXh0Q29sb3J9OyB9CgogIC5jb21taXQtbWVyZ2UgewogICAgc3Ryb2tlOiAke2kucHJpbWFyeUNvbG9yfTsKICAgIGZpbGw6ICR7aS5wcmltYXJ5Q29sb3J9OwogIH0KICAuY29tbWl0LXJldmVyc2UgewogICAgc3Ryb2tlOiAke2kucHJpbWFyeUNvbG9yfTsKICAgIGZpbGw6ICR7aS5wcmltYXJ5Q29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAzOwogIH0KICAuY29tbWl0LWhpZ2hsaWdodC1vdXRlciB7CiAgfQogIC5jb21taXQtaGlnaGxpZ2h0LWlubmVyIHsKICAgIHN0cm9rZTogJHtpLnByaW1hcnlDb2xvcn07CiAgICBmaWxsOiAke2kucHJpbWFyeUNvbG9yfTsKICB9CgogIC5hcnJvdyB7IHN0cm9rZS13aWR0aDogODsgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOyBmaWxsOiBub25lfQogIC5naXRUaXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZpbGw6ICR7aS50ZXh0Q29sb3J9OwogIH0KYH19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIFAwdD1mdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKFB0LHB0LEZ0LFgpe2ZvcihGdD1GdHx8e30sWD1QdC5sZW5ndGg7WC0tO0Z0W1B0W1hdXT1wdCk7cmV0dXJuIEZ0fSxhPVsxLDNdLGY9WzEsNV0scD1bNyw5LDExLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMxLDMzLDM0LDM2LDQzLDQ4XSx2PVsxLDMyXSxtPVsxLDMzXSxiPVsxLDM0XSxFPVsxLDM1XSxDPVsxLDM2XSxBPVsxLDM3XSxQPVsxLDM4XSxGPVsxLDE1XSxqPVsxLDE2XSxSPVsxLDE3XSxIPVsxLDE4XSxZPVsxLDE5XSxydD1bMSwyMF0sSj1bMSwyMV0saXQ9WzEsMjJdLGZ0PVsxLDI0XSxUdD1bMSwyNV0sa3Q9WzEsMjZdLG10PVsxLDI3XSxjdD1bMSwyOF0seXQ9WzEsMzBdLHN0PVsxLDM5XSx4dD1bMSw0Ml0saHQ9WzUsNyw5LDExLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMxLDMzLDM0LDM2LDQzLDQ4XSxkdD17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsZGlyZWN0aXZlOjQsZ2FudHQ6NSxkb2N1bWVudDo2LEVPRjo3LGxpbmU6OCxTUEFDRTo5LHN0YXRlbWVudDoxMCxOTDoxMSx3ZWVrZGF5OjEyLHdlZWtkYXlfbW9uZGF5OjEzLHdlZWtkYXlfdHVlc2RheToxNCx3ZWVrZGF5X3dlZG5lc2RheToxNSx3ZWVrZGF5X3RodXJzZGF5OjE2LHdlZWtkYXlfZnJpZGF5OjE3LHdlZWtkYXlfc2F0dXJkYXk6MTgsd2Vla2RheV9zdW5kYXk6MTksZGF0ZUZvcm1hdDoyMCxpbmNsdXNpdmVFbmREYXRlczoyMSx0b3BBeGlzOjIyLGF4aXNGb3JtYXQ6MjMsdGlja0ludGVydmFsOjI0LGV4Y2x1ZGVzOjI1LGluY2x1ZGVzOjI2LHRvZGF5TWFya2VyOjI3LHRpdGxlOjI4LGFjY190aXRsZToyOSxhY2NfdGl0bGVfdmFsdWU6MzAsYWNjX2Rlc2NyOjMxLGFjY19kZXNjcl92YWx1ZTozMixhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjMzLHNlY3Rpb246MzQsY2xpY2tTdGF0ZW1lbnQ6MzUsdGFza1R4dDozNix0YXNrRGF0YTozNyxvcGVuRGlyZWN0aXZlOjM4LHR5cGVEaXJlY3RpdmU6MzksY2xvc2VEaXJlY3RpdmU6NDAsIjoiOjQxLGFyZ0RpcmVjdGl2ZTo0MixjbGljazo0MyxjYWxsYmFja25hbWU6NDQsY2FsbGJhY2thcmdzOjQ1LGhyZWY6NDYsY2xpY2tTdGF0ZW1lbnREZWJ1Zzo0NyxvcGVuX2RpcmVjdGl2ZTo0OCx0eXBlX2RpcmVjdGl2ZTo0OSxhcmdfZGlyZWN0aXZlOjUwLGNsb3NlX2RpcmVjdGl2ZTo1MSwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNToiZ2FudHQiLDc6IkVPRiIsOToiU1BBQ0UiLDExOiJOTCIsMTM6IndlZWtkYXlfbW9uZGF5IiwxNDoid2Vla2RheV90dWVzZGF5IiwxNToid2Vla2RheV93ZWRuZXNkYXkiLDE2OiJ3ZWVrZGF5X3RodXJzZGF5IiwxNzoid2Vla2RheV9mcmlkYXkiLDE4OiJ3ZWVrZGF5X3NhdHVyZGF5IiwxOToid2Vla2RheV9zdW5kYXkiLDIwOiJkYXRlRm9ybWF0IiwyMToiaW5jbHVzaXZlRW5kRGF0ZXMiLDIyOiJ0b3BBeGlzIiwyMzoiYXhpc0Zvcm1hdCIsMjQ6InRpY2tJbnRlcnZhbCIsMjU6ImV4Y2x1ZGVzIiwyNjoiaW5jbHVkZXMiLDI3OiJ0b2RheU1hcmtlciIsMjg6InRpdGxlIiwyOToiYWNjX3RpdGxlIiwzMDoiYWNjX3RpdGxlX3ZhbHVlIiwzMToiYWNjX2Rlc2NyIiwzMjoiYWNjX2Rlc2NyX3ZhbHVlIiwzMzoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMzQ6InNlY3Rpb24iLDM2OiJ0YXNrVHh0IiwzNzoidGFza0RhdGEiLDQxOiI6Iiw0MzoiY2xpY2siLDQ0OiJjYWxsYmFja25hbWUiLDQ1OiJjYWxsYmFja2FyZ3MiLDQ2OiJocmVmIiw0ODoib3Blbl9kaXJlY3RpdmUiLDQ5OiJ0eXBlX2RpcmVjdGl2ZSIsNTA6ImFyZ19kaXJlY3RpdmUiLDUxOiJjbG9zZV9kaXJlY3RpdmUifSxwcm9kdWN0aW9uc186WzAsWzMsMl0sWzMsM10sWzYsMF0sWzYsMl0sWzgsMl0sWzgsMV0sWzgsMV0sWzgsMV0sWzEyLDFdLFsxMiwxXSxbMTIsMV0sWzEyLDFdLFsxMiwxXSxbMTIsMV0sWzEyLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMl0sWzEwLDJdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwyXSxbMTAsMV0sWzQsNF0sWzQsNl0sWzM1LDJdLFszNSwzXSxbMzUsM10sWzM1LDRdLFszNSwzXSxbMzUsNF0sWzM1LDJdLFs0NywyXSxbNDcsM10sWzQ3LDNdLFs0Nyw0XSxbNDcsM10sWzQ3LDRdLFs0NywyXSxbMzgsMV0sWzM5LDFdLFs0MiwxXSxbNDAsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24ocHQsRnQsWCxSdCxCdCx2dCxPdCl7dmFyIFZ0PXZ0Lmxlbmd0aC0xO3N3aXRjaChCdCl7Y2FzZSAyOnJldHVybiB2dFtWdC0xXTtjYXNlIDM6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgNDp2dFtWdC0xXS5wdXNoKHZ0W1Z0XSksdGhpcy4kPXZ0W1Z0LTFdO2JyZWFrO2Nhc2UgNTpjYXNlIDY6dGhpcy4kPXZ0W1Z0XTticmVhaztjYXNlIDc6Y2FzZSA4OnRoaXMuJD1bXTticmVhaztjYXNlIDk6UnQuc2V0V2Vla2RheSgibW9uZGF5Iik7YnJlYWs7Y2FzZSAxMDpSdC5zZXRXZWVrZGF5KCJ0dWVzZGF5Iik7YnJlYWs7Y2FzZSAxMTpSdC5zZXRXZWVrZGF5KCJ3ZWRuZXNkYXkiKTticmVhaztjYXNlIDEyOlJ0LnNldFdlZWtkYXkoInRodXJzZGF5Iik7YnJlYWs7Y2FzZSAxMzpSdC5zZXRXZWVrZGF5KCJmcmlkYXkiKTticmVhaztjYXNlIDE0OlJ0LnNldFdlZWtkYXkoInNhdHVyZGF5Iik7YnJlYWs7Y2FzZSAxNTpSdC5zZXRXZWVrZGF5KCJzdW5kYXkiKTticmVhaztjYXNlIDE2OlJ0LnNldERhdGVGb3JtYXQodnRbVnRdLnN1YnN0cigxMSkpLHRoaXMuJD12dFtWdF0uc3Vic3RyKDExKTticmVhaztjYXNlIDE3OlJ0LmVuYWJsZUluY2x1c2l2ZUVuZERhdGVzKCksdGhpcy4kPXZ0W1Z0XS5zdWJzdHIoMTgpO2JyZWFrO2Nhc2UgMTg6UnQuVG9wQXhpcygpLHRoaXMuJD12dFtWdF0uc3Vic3RyKDgpO2JyZWFrO2Nhc2UgMTk6UnQuc2V0QXhpc0Zvcm1hdCh2dFtWdF0uc3Vic3RyKDExKSksdGhpcy4kPXZ0W1Z0XS5zdWJzdHIoMTEpO2JyZWFrO2Nhc2UgMjA6UnQuc2V0VGlja0ludGVydmFsKHZ0W1Z0XS5zdWJzdHIoMTMpKSx0aGlzLiQ9dnRbVnRdLnN1YnN0cigxMyk7YnJlYWs7Y2FzZSAyMTpSdC5zZXRFeGNsdWRlcyh2dFtWdF0uc3Vic3RyKDkpKSx0aGlzLiQ9dnRbVnRdLnN1YnN0cig5KTticmVhaztjYXNlIDIyOlJ0LnNldEluY2x1ZGVzKHZ0W1Z0XS5zdWJzdHIoOSkpLHRoaXMuJD12dFtWdF0uc3Vic3RyKDkpO2JyZWFrO2Nhc2UgMjM6UnQuc2V0VG9kYXlNYXJrZXIodnRbVnRdLnN1YnN0cigxMikpLHRoaXMuJD12dFtWdF0uc3Vic3RyKDEyKTticmVhaztjYXNlIDI1OlJ0LnNldERpYWdyYW1UaXRsZSh2dFtWdF0uc3Vic3RyKDYpKSx0aGlzLiQ9dnRbVnRdLnN1YnN0cig2KTticmVhaztjYXNlIDI2OnRoaXMuJD12dFtWdF0udHJpbSgpLFJ0LnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAyNzpjYXNlIDI4OnRoaXMuJD12dFtWdF0udHJpbSgpLFJ0LnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAyOTpSdC5hZGRTZWN0aW9uKHZ0W1Z0XS5zdWJzdHIoOCkpLHRoaXMuJD12dFtWdF0uc3Vic3RyKDgpO2JyZWFrO2Nhc2UgMzE6UnQuYWRkVGFzayh2dFtWdC0xXSx2dFtWdF0pLHRoaXMuJD0idGFzayI7YnJlYWs7Y2FzZSAzNTp0aGlzLiQ9dnRbVnQtMV0sUnQuc2V0Q2xpY2tFdmVudCh2dFtWdC0xXSx2dFtWdF0sbnVsbCk7YnJlYWs7Y2FzZSAzNjp0aGlzLiQ9dnRbVnQtMl0sUnQuc2V0Q2xpY2tFdmVudCh2dFtWdC0yXSx2dFtWdC0xXSx2dFtWdF0pO2JyZWFrO2Nhc2UgMzc6dGhpcy4kPXZ0W1Z0LTJdLFJ0LnNldENsaWNrRXZlbnQodnRbVnQtMl0sdnRbVnQtMV0sbnVsbCksUnQuc2V0TGluayh2dFtWdC0yXSx2dFtWdF0pO2JyZWFrO2Nhc2UgMzg6dGhpcy4kPXZ0W1Z0LTNdLFJ0LnNldENsaWNrRXZlbnQodnRbVnQtM10sdnRbVnQtMl0sdnRbVnQtMV0pLFJ0LnNldExpbmsodnRbVnQtM10sdnRbVnRdKTticmVhaztjYXNlIDM5OnRoaXMuJD12dFtWdC0yXSxSdC5zZXRDbGlja0V2ZW50KHZ0W1Z0LTJdLHZ0W1Z0XSxudWxsKSxSdC5zZXRMaW5rKHZ0W1Z0LTJdLHZ0W1Z0LTFdKTticmVhaztjYXNlIDQwOnRoaXMuJD12dFtWdC0zXSxSdC5zZXRDbGlja0V2ZW50KHZ0W1Z0LTNdLHZ0W1Z0LTFdLHZ0W1Z0XSksUnQuc2V0TGluayh2dFtWdC0zXSx2dFtWdC0yXSk7YnJlYWs7Y2FzZSA0MTp0aGlzLiQ9dnRbVnQtMV0sUnQuc2V0TGluayh2dFtWdC0xXSx2dFtWdF0pO2JyZWFrO2Nhc2UgNDI6Y2FzZSA0ODp0aGlzLiQ9dnRbVnQtMV0rIiAiK3Z0W1Z0XTticmVhaztjYXNlIDQzOmNhc2UgNDQ6Y2FzZSA0Njp0aGlzLiQ9dnRbVnQtMl0rIiAiK3Z0W1Z0LTFdKyIgIit2dFtWdF07YnJlYWs7Y2FzZSA0NTpjYXNlIDQ3OnRoaXMuJD12dFtWdC0zXSsiICIrdnRbVnQtMl0rIiAiK3Z0W1Z0LTFdKyIgIit2dFtWdF07YnJlYWs7Y2FzZSA0OTpSdC5wYXJzZURpcmVjdGl2ZSgiJSV7Iiwib3Blbl9kaXJlY3RpdmUiKTticmVhaztjYXNlIDUwOlJ0LnBhcnNlRGlyZWN0aXZlKHZ0W1Z0XSwidHlwZV9kaXJlY3RpdmUiKTticmVhaztjYXNlIDUxOnZ0W1Z0XT12dFtWdF0udHJpbSgpLnJlcGxhY2UoLycvZywnIicpLFJ0LnBhcnNlRGlyZWN0aXZlKHZ0W1Z0XSwiYXJnX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgNTI6UnQucGFyc2VEaXJlY3RpdmUoIn0lJSIsImNsb3NlX2RpcmVjdGl2ZSIsImdhbnR0Iik7YnJlYWt9fSx0YWJsZTpbezM6MSw0OjIsNTphLDM4OjQsNDg6Zn0sezE6WzNdfSx7Mzo2LDQ6Miw1OmEsMzg6NCw0ODpmfSxpKHAsWzIsM10sezY6N30pLHszOTo4LDQ5OlsxLDldfSx7NDk6WzIsNDldfSx7MTpbMiwxXX0sezQ6MzEsNzpbMSwxMF0sODoxMSw5OlsxLDEyXSwxMDoxMywxMTpbMSwxNF0sMTI6MjMsMTM6diwxNDptLDE1OmIsMTY6RSwxNzpDLDE4OkEsMTk6UCwyMDpGLDIxOmosMjI6UiwyMzpILDI0OlksMjU6cnQsMjY6SiwyNzppdCwyODpmdCwyOTpUdCwzMTprdCwzMzptdCwzNDpjdCwzNToyOSwzNjp5dCwzODo0LDQzOnN0LDQ4OmZ9LHs0MDo0MCw0MTpbMSw0MV0sNTE6eHR9LGkoWzQxLDUxXSxbMiw1MF0pLGkocCxbMiw4XSx7MTpbMiwyXX0pLGkocCxbMiw0XSksezQ6MzEsMTA6NDMsMTI6MjMsMTM6diwxNDptLDE1OmIsMTY6RSwxNzpDLDE4OkEsMTk6UCwyMDpGLDIxOmosMjI6UiwyMzpILDI0OlksMjU6cnQsMjY6SiwyNzppdCwyODpmdCwyOTpUdCwzMTprdCwzMzptdCwzNDpjdCwzNToyOSwzNjp5dCwzODo0LDQzOnN0LDQ4OmZ9LGkocCxbMiw2XSksaShwLFsyLDddKSxpKHAsWzIsMTZdKSxpKHAsWzIsMTddKSxpKHAsWzIsMThdKSxpKHAsWzIsMTldKSxpKHAsWzIsMjBdKSxpKHAsWzIsMjFdKSxpKHAsWzIsMjJdKSxpKHAsWzIsMjNdKSxpKHAsWzIsMjRdKSxpKHAsWzIsMjVdKSx7MzA6WzEsNDRdfSx7MzI6WzEsNDVdfSxpKHAsWzIsMjhdKSxpKHAsWzIsMjldKSxpKHAsWzIsMzBdKSx7Mzc6WzEsNDZdfSxpKHAsWzIsMzJdKSxpKHAsWzIsOV0pLGkocCxbMiwxMF0pLGkocCxbMiwxMV0pLGkocCxbMiwxMl0pLGkocCxbMiwxM10pLGkocCxbMiwxNF0pLGkocCxbMiwxNV0pLHs0NDpbMSw0N10sNDY6WzEsNDhdfSx7MTE6WzEsNDldfSx7NDI6NTAsNTA6WzEsNTFdfSx7MTE6WzIsNTJdfSxpKHAsWzIsNV0pLGkocCxbMiwyNl0pLGkocCxbMiwyN10pLGkocCxbMiwzMV0pLGkocCxbMiwzNV0sezQ1OlsxLDUyXSw0NjpbMSw1M119KSxpKHAsWzIsNDFdLHs0NDpbMSw1NF19KSxpKGh0LFsyLDMzXSksezQwOjU1LDUxOnh0fSx7NTE6WzIsNTFdfSxpKHAsWzIsMzZdLHs0NjpbMSw1Nl19KSxpKHAsWzIsMzddKSxpKHAsWzIsMzldLHs0NTpbMSw1N119KSx7MTE6WzEsNThdfSxpKHAsWzIsMzhdKSxpKHAsWzIsNDBdKSxpKGh0LFsyLDM0XSldLGRlZmF1bHRBY3Rpb25zOns1OlsyLDQ5XSw2OlsyLDFdLDQyOlsyLDUyXSw1MTpbMiw1MV19LHBhcnNlRXJyb3I6ZnVuY3Rpb24ocHQsRnQpe2lmKEZ0LnJlY292ZXJhYmxlKXRoaXMudHJhY2UocHQpO2Vsc2V7dmFyIFg9bmV3IEVycm9yKHB0KTt0aHJvdyBYLmhhc2g9RnQsWH19LHBhcnNlOmZ1bmN0aW9uKHB0KXt2YXIgRnQ9dGhpcyxYPVswXSxSdD1bXSxCdD1bbnVsbF0sdnQ9W10sT3Q9dGhpcy50YWJsZSxWdD0iIixxZT0wLF9uPTAsVGU9MixXbj0xLEFlPXZ0LnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLG5lPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksa2U9e3l5Ont9fTtmb3IodmFyIFZlIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksVmUpJiYoa2UueXlbVmVdPXRoaXMueXlbVmVdKTtuZS5zZXRJbnB1dChwdCxrZS55eSksa2UueXkubGV4ZXI9bmUsa2UueXkucGFyc2VyPXRoaXMsdHlwZW9mIG5lLnl5bGxvYz4idSImJihuZS55eWxsb2M9e30pO3ZhciBFZT1uZS55eWxsb2M7dnQucHVzaChFZSk7dmFyIEhlPW5lLm9wdGlvbnMmJm5lLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBrZS55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1rZS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBDZSgpe3ZhciBwaTtyZXR1cm4gcGk9UnQucG9wKCl8fG5lLmxleCgpfHxXbix0eXBlb2YgcGkhPSJudW1iZXIiJiYocGkgaW5zdGFuY2VvZiBBcnJheSYmKFJ0PXBpLHBpPVJ0LnBvcCgpKSxwaT1GdC5zeW1ib2xzX1twaV18fHBpKSxwaX1mb3IodmFyICRlLHllLGZuLFl0LE1pPXt9LHF0LHppLFNlLGtpOzspe2lmKHllPVhbWC5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t5ZV0/Zm49dGhpcy5kZWZhdWx0QWN0aW9uc1t5ZV06KCgkZT09PW51bGx8fHR5cGVvZiAkZT4idSIpJiYoJGU9Q2UoKSksZm49T3RbeWVdJiZPdFt5ZV1bJGVdKSx0eXBlb2YgZm4+InUifHwhZm4ubGVuZ3RofHwhZm5bMF0pe3ZhciBSaT0iIjtraT1bXTtmb3IocXQgaW4gT3RbeWVdKXRoaXMudGVybWluYWxzX1txdF0mJnF0PlRlJiZraS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bcXRdKyInIik7bmUuc2hvd1Bvc2l0aW9uP1JpPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKHFlKzEpK2A6CmArbmUuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtraS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfWyRlXXx8JGUpKyInIjpSaT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhxZSsxKSsiOiBVbmV4cGVjdGVkICIrKCRlPT1Xbj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1skZV18fCRlKSsiJyIpLHRoaXMucGFyc2VFcnJvcihSaSx7dGV4dDpuZS5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bJGVdfHwkZSxsaW5lOm5lLnl5bGluZW5vLGxvYzpFZSxleHBlY3RlZDpraX0pfWlmKGZuWzBdaW5zdGFuY2VvZiBBcnJheSYmZm4ubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIit5ZSsiLCB0b2tlbjogIiskZSk7c3dpdGNoKGZuWzBdKXtjYXNlIDE6WC5wdXNoKCRlKSxCdC5wdXNoKG5lLnl5dGV4dCksdnQucHVzaChuZS55eWxsb2MpLFgucHVzaChmblsxXSksJGU9bnVsbCxfbj1uZS55eWxlbmcsVnQ9bmUueXl0ZXh0LHFlPW5lLnl5bGluZW5vLEVlPW5lLnl5bGxvYzticmVhaztjYXNlIDI6aWYoemk9dGhpcy5wcm9kdWN0aW9uc19bZm5bMV1dWzFdLE1pLiQ9QnRbQnQubGVuZ3RoLXppXSxNaS5fJD17Zmlyc3RfbGluZTp2dFt2dC5sZW5ndGgtKHppfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6dnRbdnQubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dnRbdnQubGVuZ3RoLSh6aXx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp2dFt2dC5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LEhlJiYoTWkuXyQucmFuZ2U9W3Z0W3Z0Lmxlbmd0aC0oeml8fDEpXS5yYW5nZVswXSx2dFt2dC5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxZdD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTWksW1Z0LF9uLHFlLGtlLnl5LGZuWzFdLEJ0LHZ0XS5jb25jYXQoQWUpKSx0eXBlb2YgWXQ8InUiKXJldHVybiBZdDt6aSYmKFg9WC5zbGljZSgwLC0xKnppKjIpLEJ0PUJ0LnNsaWNlKDAsLTEqemkpLHZ0PXZ0LnNsaWNlKDAsLTEqemkpKSxYLnB1c2godGhpcy5wcm9kdWN0aW9uc19bZm5bMV1dWzBdKSxCdC5wdXNoKE1pLiQpLHZ0LnB1c2goTWkuXyQpLFNlPU90W1hbWC5sZW5ndGgtMl1dW1hbWC5sZW5ndGgtMV1dLFgucHVzaChTZSk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LEN0PWZ1bmN0aW9uKCl7dmFyIFB0PXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKEZ0LFgpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoRnQsWCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoRnQpfSxzZXRJbnB1dDpmdW5jdGlvbihwdCxGdCl7cmV0dXJuIHRoaXMueXk9RnR8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXB0LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBwdD10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9cHQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXB0LHRoaXMubWF0Y2hlZCs9cHQ7dmFyIEZ0PXB0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gRnQ/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHB0fSx1bnB1dDpmdW5jdGlvbihwdCl7dmFyIEZ0PXB0Lmxlbmd0aCxYPXB0LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9cHQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLUZ0KSx0aGlzLm9mZnNldC09RnQ7dmFyIFJ0PXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLFgubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1YLmxlbmd0aC0xKTt2YXIgQnQ9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOlg/KFgubGVuZ3RoPT09UnQubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStSdFtSdC5sZW5ndGgtWC5sZW5ndGhdLmxlbmd0aC1YWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tRnR9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bQnRbMF0sQnRbMF0rdGhpcy55eWxlbmctRnRdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihwdCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHB0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciBwdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHB0Lmxlbmd0aD4yMD8iLi4uIjoiIikrcHQuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgcHQ9dGhpcy5tYXRjaDtyZXR1cm4gcHQubGVuZ3RoPDIwJiYocHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXB0Lmxlbmd0aCkpLChwdC5zdWJzdHIoMCwyMCkrKHB0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgcHQ9dGhpcy5wYXN0SW5wdXQoKSxGdD1uZXcgQXJyYXkocHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gcHQrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK0Z0KyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbihwdCxGdCl7dmFyIFgsUnQsQnQ7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKEJ0PXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKEJ0Lnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLFJ0PXB0WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxSdCYmKHRoaXMueXlsaW5lbm8rPVJ0Lmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOlJ0P1J0W1J0Lmxlbmd0aC0xXS5sZW5ndGgtUnRbUnQubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rcHRbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9cHRbMF0sdGhpcy5tYXRjaCs9cHRbMF0sdGhpcy5tYXRjaGVzPXB0LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHB0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1wdFswXSxYPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLEZ0LHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLFgpcmV0dXJuIFg7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIHZ0IGluIEJ0KXRoaXNbdnRdPUJ0W3Z0XTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBwdCxGdCxYLFJ0O3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIEJ0PXRoaXMuX2N1cnJlbnRSdWxlcygpLHZ0PTA7dnQ8QnQubGVuZ3RoO3Z0KyspaWYoWD10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW0J0W3Z0XV0pLFgmJighRnR8fFhbMF0ubGVuZ3RoPkZ0WzBdLmxlbmd0aCkpe2lmKEZ0PVgsUnQ9dnQsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYocHQ9dGhpcy50ZXN0X21hdGNoKFgsQnRbdnRdKSxwdCE9PSExKXJldHVybiBwdDtpZih0aGlzLl9iYWNrdHJhY2spe0Z0PSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIEZ0PyhwdD10aGlzLnRlc3RfbWF0Y2goRnQsQnRbUnRdKSxwdCE9PSExP3B0OiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgRnQ9dGhpcy5uZXh0KCk7cmV0dXJuIEZ0fHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbihGdCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKEZ0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgRnQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gRnQ+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbihGdCl7cmV0dXJuIEZ0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoRnR8fDApLEZ0Pj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbRnRdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKEZ0KXt0aGlzLmJlZ2luKEZ0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihGdCxYLFJ0LEJ0KXtzd2l0Y2goUnQpe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigib3Blbl9kaXJlY3RpdmUiKSw0ODtjYXNlIDE6cmV0dXJuIHRoaXMuYmVnaW4oInR5cGVfZGlyZWN0aXZlIiksNDk7Y2FzZSAyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiYXJnX2RpcmVjdGl2ZSIpLDQxO2Nhc2UgMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSw1MTtjYXNlIDQ6cmV0dXJuIDUwO2Nhc2UgNTpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMjk7Y2FzZSA2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7Y2FzZSA3OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwzMTtjYXNlIDg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDk6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgMTA6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTE6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgMTI6YnJlYWs7Y2FzZSAxMzpicmVhaztjYXNlIDE0OmJyZWFrO2Nhc2UgMTU6cmV0dXJuIDExO2Nhc2UgMTY6YnJlYWs7Y2FzZSAxNzpicmVhaztjYXNlIDE4OmJyZWFrO2Nhc2UgMTk6dGhpcy5iZWdpbigiaHJlZiIpO2JyZWFrO2Nhc2UgMjA6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjE6cmV0dXJuIDQ2O2Nhc2UgMjI6dGhpcy5iZWdpbigiY2FsbGJhY2tuYW1lIik7YnJlYWs7Y2FzZSAyMzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyNDp0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiY2FsbGJhY2thcmdzIik7YnJlYWs7Y2FzZSAyNTpyZXR1cm4gNDQ7Y2FzZSAyNjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyNzpyZXR1cm4gNDU7Y2FzZSAyODp0aGlzLmJlZ2luKCJjbGljayIpO2JyZWFrO2Nhc2UgMjk6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzA6cmV0dXJuIDQzO2Nhc2UgMzE6cmV0dXJuIDU7Y2FzZSAzMjpyZXR1cm4gMjA7Y2FzZSAzMzpyZXR1cm4gMjE7Y2FzZSAzNDpyZXR1cm4gMjI7Y2FzZSAzNTpyZXR1cm4gMjM7Y2FzZSAzNjpyZXR1cm4gMjQ7Y2FzZSAzNzpyZXR1cm4gMjY7Y2FzZSAzODpyZXR1cm4gMjU7Y2FzZSAzOTpyZXR1cm4gMjc7Y2FzZSA0MDpyZXR1cm4gMTM7Y2FzZSA0MTpyZXR1cm4gMTQ7Y2FzZSA0MjpyZXR1cm4gMTU7Y2FzZSA0MzpyZXR1cm4gMTY7Y2FzZSA0NDpyZXR1cm4gMTc7Y2FzZSA0NTpyZXR1cm4gMTg7Y2FzZSA0NjpyZXR1cm4gMTk7Y2FzZSA0NzpyZXR1cm4iZGF0ZSI7Y2FzZSA0ODpyZXR1cm4gMjg7Y2FzZSA0OTpyZXR1cm4iYWNjRGVzY3JpcHRpb24iO2Nhc2UgNTA6cmV0dXJuIDM0O2Nhc2UgNTE6cmV0dXJuIDM2O2Nhc2UgNTI6cmV0dXJuIDM3O2Nhc2UgNTM6cmV0dXJuIDQxO2Nhc2UgNTQ6cmV0dXJuIDc7Y2FzZSA1NTpyZXR1cm4iSU5WQUxJRCJ9fSxydWxlczpbL14oPzolJVx7KS9pLC9eKD86KCg/Oig/IVx9JSUpW146Ll0pKikpL2ksL14oPzo6KS9pLC9eKD86XH0lJSkvaSwvXig/OigoPzooPyFcfSUlKS58XG4pKikpL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/OiUlKD8hXHspKlteXG5dKikvaSwvXig/OlteXH1dJSUqW15cbl0qKS9pLC9eKD86JSUqW15cbl0qW1xuXSopL2ksL14oPzpbXG5dKykvaSwvXig/OlxzKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzolW15cbl0qKS9pLC9eKD86aHJlZltcc10rWyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpjYWxsW1xzXSspL2ksL14oPzpcKFtcc10qXCkpL2ksL14oPzpcKCkvaSwvXig/OlteKF0qKS9pLC9eKD86XCkpL2ksL14oPzpbXildKikvaSwvXig/OmNsaWNrW1xzXSspL2ksL14oPzpbXHNcbl0pL2ksL14oPzpbXlxzXG5dKikvaSwvXig/OmdhbnR0XGIpL2ksL14oPzpkYXRlRm9ybWF0XHNbXiNcbjtdKykvaSwvXig/OmluY2x1c2l2ZUVuZERhdGVzXGIpL2ksL14oPzp0b3BBeGlzXGIpL2ksL14oPzpheGlzRm9ybWF0XHNbXiNcbjtdKykvaSwvXig/OnRpY2tJbnRlcnZhbFxzW14jXG47XSspL2ksL14oPzppbmNsdWRlc1xzW14jXG47XSspL2ksL14oPzpleGNsdWRlc1xzW14jXG47XSspL2ksL14oPzp0b2RheU1hcmtlclxzW15cbjtdKykvaSwvXig/OndlZWtkYXlccyttb25kYXlcYikvaSwvXig/OndlZWtkYXlccyt0dWVzZGF5XGIpL2ksL14oPzp3ZWVrZGF5XHMrd2VkbmVzZGF5XGIpL2ksL14oPzp3ZWVrZGF5XHMrdGh1cnNkYXlcYikvaSwvXig/OndlZWtkYXlccytmcmlkYXlcYikvaSwvXig/OndlZWtkYXlccytzYXR1cmRheVxiKS9pLC9eKD86d2Vla2RheVxzK3N1bmRheVxiKS9pLC9eKD86XGRcZFxkXGQtXGRcZC1cZFxkXGIpL2ksL14oPzp0aXRsZVxzW14jXG47XSspL2ksL14oPzphY2NEZXNjcmlwdGlvblxzW14jXG47XSspL2ksL14oPzpzZWN0aW9uXHNbXiM6XG47XSspL2ksL14oPzpbXiM6XG47XSspL2ksL14oPzo6W14jXG47XSspL2ksL14oPzo6KS9pLC9eKD86JCkvaSwvXig/Oi4pL2ldLGNvbmRpdGlvbnM6e2FjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlsxMCwxMV0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOls4XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzZdLGluY2x1c2l2ZTohMX0sY2xvc2VfZGlyZWN0aXZlOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LGFyZ19kaXJlY3RpdmU6e3J1bGVzOlszLDRdLGluY2x1c2l2ZTohMX0sdHlwZV9kaXJlY3RpdmU6e3J1bGVzOlsyLDNdLGluY2x1c2l2ZTohMX0sb3Blbl9kaXJlY3RpdmU6e3J1bGVzOlsxXSxpbmNsdXNpdmU6ITF9LGNhbGxiYWNrYXJnczp7cnVsZXM6WzI2LDI3XSxpbmNsdXNpdmU6ITF9LGNhbGxiYWNrbmFtZTp7cnVsZXM6WzIzLDI0LDI1XSxpbmNsdXNpdmU6ITF9LGhyZWY6e3J1bGVzOlsyMCwyMV0saW5jbHVzaXZlOiExfSxjbGljazp7cnVsZXM6WzI5LDMwXSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDUsNyw5LDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIyLDI4LDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIFB0fSgpO2R0LmxleGVyPUN0O2Z1bmN0aW9uIHR0KCl7dGhpcy55eT17fX1yZXR1cm4gdHQucHJvdG90eXBlPWR0LGR0LlBhcnNlcj10dCxuZXcgdHR9KCk7UDB0LnBhcnNlcj1QMHQ7Y29uc3QgTHplPVAwdDt2YXIgV0J0PXtleHBvcnRzOnt9fTsoZnVuY3Rpb24oaSxhKXsoZnVuY3Rpb24oZixwKXtpLmV4cG9ydHM9cCgpfSkoZDAsZnVuY3Rpb24oKXt2YXIgZj0iZGF5IjtyZXR1cm4gZnVuY3Rpb24ocCx2LG0pe3ZhciBiPWZ1bmN0aW9uKEEpe3JldHVybiBBLmFkZCg0LUEuaXNvV2Vla2RheSgpLGYpfSxFPXYucHJvdG90eXBlO0UuaXNvV2Vla1llYXI9ZnVuY3Rpb24oKXtyZXR1cm4gYih0aGlzKS55ZWFyKCl9LEUuaXNvV2Vlaz1mdW5jdGlvbihBKXtpZighdGhpcy4kdXRpbHMoKS51KEEpKXJldHVybiB0aGlzLmFkZCg3KihBLXRoaXMuaXNvV2VlaygpKSxmKTt2YXIgUCxGLGosUixIPWIodGhpcyksWT0oUD10aGlzLmlzb1dlZWtZZWFyKCksRj10aGlzLiR1LGo9KEY/bS51dGM6bSkoKS55ZWFyKFApLnN0YXJ0T2YoInllYXIiKSxSPTQtai5pc29XZWVrZGF5KCksai5pc29XZWVrZGF5KCk+NCYmKFIrPTcpLGouYWRkKFIsZikpO3JldHVybiBILmRpZmYoWSwid2VlayIpKzF9LEUuaXNvV2Vla2RheT1mdW5jdGlvbihBKXtyZXR1cm4gdGhpcy4kdXRpbHMoKS51KEEpP3RoaXMuZGF5KCl8fDc6dGhpcy5kYXkodGhpcy5kYXkoKSU3P0E6QS03KX07dmFyIEM9RS5zdGFydE9mO0Uuc3RhcnRPZj1mdW5jdGlvbihBLFApe3ZhciBGPXRoaXMuJHV0aWxzKCksaj0hIUYudShQKXx8UDtyZXR1cm4gRi5wKEEpPT09Imlzb3dlZWsiP2o/dGhpcy5kYXRlKHRoaXMuZGF0ZSgpLSh0aGlzLmlzb1dlZWtkYXkoKS0xKSkuc3RhcnRPZigiZGF5Iik6dGhpcy5kYXRlKHRoaXMuZGF0ZSgpLTEtKHRoaXMuaXNvV2Vla2RheSgpLTEpKzcpLmVuZE9mKCJkYXkiKTpDLmJpbmQodGhpcykoQSxQKX19fSl9KShXQnQpO3ZhciBNemU9V0J0LmV4cG9ydHM7Y29uc3QgRHplPVBFKE16ZSk7dmFyIEtCdD17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKGksYSl7KGZ1bmN0aW9uKGYscCl7aS5leHBvcnRzPXAoKX0pKGQwLGZ1bmN0aW9uKCl7dmFyIGY9e0xUUzoiaDptbTpzcyBBIixMVDoiaDptbSBBIixMOiJNTS9ERC9ZWVlZIixMTDoiTU1NTSBELCBZWVlZIixMTEw6Ik1NTU0gRCwgWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIE1NTU0gRCwgWVlZWSBoOm1tIEEifSxwPS8oXFtbXltdKlxdKXwoWy1fOi8uLCgpXHNdKyl8KEF8YXxZWVlZfFlZP3xNTT9NP00/fERvfEREP3xoaD98SEg/fG1tP3xzcz98U3sxLDN9fHp8Wlo/KS9nLHY9L1xkXGQvLG09L1xkXGQ/LyxiPS9cZCpbXi1fOi8sKClcc1xkXSsvLEU9e30sQz1mdW5jdGlvbihZKXtyZXR1cm4oWT0rWSkrKFk+Njg/MTkwMDoyZTMpfSxBPWZ1bmN0aW9uKFkpe3JldHVybiBmdW5jdGlvbihydCl7dGhpc1tZXT0rcnR9fSxQPVsvWystXVxkXGQ6PyhcZFxkKT98Wi8sZnVuY3Rpb24oWSl7KHRoaXMuem9uZXx8KHRoaXMuem9uZT17fSkpLm9mZnNldD1mdW5jdGlvbihydCl7aWYoIXJ0fHxydD09PSJaIilyZXR1cm4gMDt2YXIgSj1ydC5tYXRjaCgvKFsrLV18XGRcZCkvZyksaXQ9NjAqSlsxXSsoK0pbMl18fDApO3JldHVybiBpdD09PTA/MDpKWzBdPT09IisiPy1pdDppdH0oWSl9XSxGPWZ1bmN0aW9uKFkpe3ZhciBydD1FW1ldO3JldHVybiBydCYmKHJ0LmluZGV4T2Y/cnQ6cnQucy5jb25jYXQocnQuZikpfSxqPWZ1bmN0aW9uKFkscnQpe3ZhciBKLGl0PUUubWVyaWRpZW07aWYoaXQpe2Zvcih2YXIgZnQ9MTtmdDw9MjQ7ZnQrPTEpaWYoWS5pbmRleE9mKGl0KGZ0LDAscnQpKT4tMSl7Sj1mdD4xMjticmVha319ZWxzZSBKPVk9PT0ocnQ/InBtIjoiUE0iKTtyZXR1cm4gSn0sUj17QTpbYixmdW5jdGlvbihZKXt0aGlzLmFmdGVybm9vbj1qKFksITEpfV0sYTpbYixmdW5jdGlvbihZKXt0aGlzLmFmdGVybm9vbj1qKFksITApfV0sUzpbL1xkLyxmdW5jdGlvbihZKXt0aGlzLm1pbGxpc2Vjb25kcz0xMDAqK1l9XSxTUzpbdixmdW5jdGlvbihZKXt0aGlzLm1pbGxpc2Vjb25kcz0xMCorWX1dLFNTUzpbL1xkezN9LyxmdW5jdGlvbihZKXt0aGlzLm1pbGxpc2Vjb25kcz0rWX1dLHM6W20sQSgic2Vjb25kcyIpXSxzczpbbSxBKCJzZWNvbmRzIildLG06W20sQSgibWludXRlcyIpXSxtbTpbbSxBKCJtaW51dGVzIildLEg6W20sQSgiaG91cnMiKV0saDpbbSxBKCJob3VycyIpXSxISDpbbSxBKCJob3VycyIpXSxoaDpbbSxBKCJob3VycyIpXSxEOlttLEEoImRheSIpXSxERDpbdixBKCJkYXkiKV0sRG86W2IsZnVuY3Rpb24oWSl7dmFyIHJ0PUUub3JkaW5hbCxKPVkubWF0Y2goL1xkKy8pO2lmKHRoaXMuZGF5PUpbMF0scnQpZm9yKHZhciBpdD0xO2l0PD0zMTtpdCs9MSlydChpdCkucmVwbGFjZSgvXFt8XF0vZywiIik9PT1ZJiYodGhpcy5kYXk9aXQpfV0sTTpbbSxBKCJtb250aCIpXSxNTTpbdixBKCJtb250aCIpXSxNTU06W2IsZnVuY3Rpb24oWSl7dmFyIHJ0PUYoIm1vbnRocyIpLEo9KEYoIm1vbnRoc1Nob3J0Iil8fHJ0Lm1hcChmdW5jdGlvbihpdCl7cmV0dXJuIGl0LnNsaWNlKDAsMyl9KSkuaW5kZXhPZihZKSsxO2lmKEo8MSl0aHJvdyBuZXcgRXJyb3I7dGhpcy5tb250aD1KJTEyfHxKfV0sTU1NTTpbYixmdW5jdGlvbihZKXt2YXIgcnQ9RigibW9udGhzIikuaW5kZXhPZihZKSsxO2lmKHJ0PDEpdGhyb3cgbmV3IEVycm9yO3RoaXMubW9udGg9cnQlMTJ8fHJ0fV0sWTpbL1srLV0/XGQrLyxBKCJ5ZWFyIildLFlZOlt2LGZ1bmN0aW9uKFkpe3RoaXMueWVhcj1DKFkpfV0sWVlZWTpbL1xkezR9LyxBKCJ5ZWFyIildLFo6UCxaWjpQfTtmdW5jdGlvbiBIKFkpe3ZhciBydCxKO3J0PVksSj1FJiZFLmZvcm1hdHM7Zm9yKHZhciBpdD0oWT1ydC5yZXBsYWNlKC8oXFtbXlxdXStdKXwoTFRTP3xsezEsNH18THsxLDR9KS9nLGZ1bmN0aW9uKHN0LHh0LGh0KXt2YXIgZHQ9aHQmJmh0LnRvVXBwZXJDYXNlKCk7cmV0dXJuIHh0fHxKW2h0XXx8ZltodF18fEpbZHRdLnJlcGxhY2UoLyhcW1teXF1dK10pfChNTU1NfE1NfEREfGRkZGQpL2csZnVuY3Rpb24oQ3QsdHQsUHQpe3JldHVybiB0dHx8UHQuc2xpY2UoMSl9KX0pKS5tYXRjaChwKSxmdD1pdC5sZW5ndGgsVHQ9MDtUdDxmdDtUdCs9MSl7dmFyIGt0PWl0W1R0XSxtdD1SW2t0XSxjdD1tdCYmbXRbMF0seXQ9bXQmJm10WzFdO2l0W1R0XT15dD97cmVnZXg6Y3QscGFyc2VyOnl0fTprdC5yZXBsYWNlKC9eXFt8XF0kL2csIiIpfXJldHVybiBmdW5jdGlvbihzdCl7Zm9yKHZhciB4dD17fSxodD0wLGR0PTA7aHQ8ZnQ7aHQrPTEpe3ZhciBDdD1pdFtodF07aWYodHlwZW9mIEN0PT0ic3RyaW5nIilkdCs9Q3QubGVuZ3RoO2Vsc2V7dmFyIHR0PUN0LnJlZ2V4LFB0PUN0LnBhcnNlcixwdD1zdC5zbGljZShkdCksRnQ9dHQuZXhlYyhwdClbMF07UHQuY2FsbCh4dCxGdCksc3Q9c3QucmVwbGFjZShGdCwiIil9fXJldHVybiBmdW5jdGlvbihYKXt2YXIgUnQ9WC5hZnRlcm5vb247aWYoUnQhPT12b2lkIDApe3ZhciBCdD1YLmhvdXJzO1J0P0J0PDEyJiYoWC5ob3Vycys9MTIpOkJ0PT09MTImJihYLmhvdXJzPTApLGRlbGV0ZSBYLmFmdGVybm9vbn19KHh0KSx4dH19cmV0dXJuIGZ1bmN0aW9uKFkscnQsSil7Si5wLmN1c3RvbVBhcnNlRm9ybWF0PSEwLFkmJlkucGFyc2VUd29EaWdpdFllYXImJihDPVkucGFyc2VUd29EaWdpdFllYXIpO3ZhciBpdD1ydC5wcm90b3R5cGUsZnQ9aXQucGFyc2U7aXQucGFyc2U9ZnVuY3Rpb24oVHQpe3ZhciBrdD1UdC5kYXRlLG10PVR0LnV0YyxjdD1UdC5hcmdzO3RoaXMuJHU9bXQ7dmFyIHl0PWN0WzFdO2lmKHR5cGVvZiB5dD09InN0cmluZyIpe3ZhciBzdD1jdFsyXT09PSEwLHh0PWN0WzNdPT09ITAsaHQ9c3R8fHh0LGR0PWN0WzJdO3h0JiYoZHQ9Y3RbMl0pLEU9dGhpcy4kbG9jYWxlKCksIXN0JiZkdCYmKEU9Si5Mc1tkdF0pLHRoaXMuJGQ9ZnVuY3Rpb24ocHQsRnQsWCl7dHJ5e2lmKFsieCIsIlgiXS5pbmRleE9mKEZ0KT4tMSlyZXR1cm4gbmV3IERhdGUoKEZ0PT09IlgiPzFlMzoxKSpwdCk7dmFyIFJ0PUgoRnQpKHB0KSxCdD1SdC55ZWFyLHZ0PVJ0Lm1vbnRoLE90PVJ0LmRheSxWdD1SdC5ob3VycyxxZT1SdC5taW51dGVzLF9uPVJ0LnNlY29uZHMsVGU9UnQubWlsbGlzZWNvbmRzLFduPVJ0LnpvbmUsQWU9bmV3IERhdGUsbmU9T3R8fChCdHx8dnQ/MTpBZS5nZXREYXRlKCkpLGtlPUJ0fHxBZS5nZXRGdWxsWWVhcigpLFZlPTA7QnQmJiF2dHx8KFZlPXZ0PjA/dnQtMTpBZS5nZXRNb250aCgpKTt2YXIgRWU9VnR8fDAsSGU9cWV8fDAsQ2U9X258fDAsJGU9VGV8fDA7cmV0dXJuIFduP25ldyBEYXRlKERhdGUuVVRDKGtlLFZlLG5lLEVlLEhlLENlLCRlKzYwKlduLm9mZnNldCoxZTMpKTpYP25ldyBEYXRlKERhdGUuVVRDKGtlLFZlLG5lLEVlLEhlLENlLCRlKSk6bmV3IERhdGUoa2UsVmUsbmUsRWUsSGUsQ2UsJGUpfWNhdGNoe3JldHVybiBuZXcgRGF0ZSgiIil9fShrdCx5dCxtdCksdGhpcy5pbml0KCksZHQmJmR0IT09ITAmJih0aGlzLiRMPXRoaXMubG9jYWxlKGR0KS4kTCksaHQmJmt0IT10aGlzLmZvcm1hdCh5dCkmJih0aGlzLiRkPW5ldyBEYXRlKCIiKSksRT17fX1lbHNlIGlmKHl0IGluc3RhbmNlb2YgQXJyYXkpZm9yKHZhciBDdD15dC5sZW5ndGgsdHQ9MTt0dDw9Q3Q7dHQrPTEpe2N0WzFdPXl0W3R0LTFdO3ZhciBQdD1KLmFwcGx5KHRoaXMsY3QpO2lmKFB0LmlzVmFsaWQoKSl7dGhpcy4kZD1QdC4kZCx0aGlzLiRMPVB0LiRMLHRoaXMuaW5pdCgpO2JyZWFrfXR0PT09Q3QmJih0aGlzLiRkPW5ldyBEYXRlKCIiKSl9ZWxzZSBmdC5jYWxsKHRoaXMsVHQpfX19KX0pKEtCdCk7dmFyIEl6ZT1LQnQuZXhwb3J0cztjb25zdCBPemU9UEUoSXplKTt2YXIgWUJ0PXtleHBvcnRzOnt9fTsoZnVuY3Rpb24oaSxhKXsoZnVuY3Rpb24oZixwKXtpLmV4cG9ydHM9cCgpfSkoZDAsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZixwKXt2YXIgdj1wLnByb3RvdHlwZSxtPXYuZm9ybWF0O3YuZm9ybWF0PWZ1bmN0aW9uKGIpe3ZhciBFPXRoaXMsQz10aGlzLiRsb2NhbGUoKTtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG0uYmluZCh0aGlzKShiKTt2YXIgQT10aGlzLiR1dGlscygpLFA9KGJ8fCJZWVlZLU1NLUREVEhIOm1tOnNzWiIpLnJlcGxhY2UoL1xbKFteXF1dKyldfFF8d298d3d8d3xXV3xXfHp6enx6fGdnZ2d8R0dHR3xEb3xYfHh8a3sxLDJ9fFMvZyxmdW5jdGlvbihGKXtzd2l0Y2goRil7Y2FzZSJRIjpyZXR1cm4gTWF0aC5jZWlsKChFLiRNKzEpLzMpO2Nhc2UiRG8iOnJldHVybiBDLm9yZGluYWwoRS4kRCk7Y2FzZSJnZ2dnIjpyZXR1cm4gRS53ZWVrWWVhcigpO2Nhc2UiR0dHRyI6cmV0dXJuIEUuaXNvV2Vla1llYXIoKTtjYXNlIndvIjpyZXR1cm4gQy5vcmRpbmFsKEUud2VlaygpLCJXIik7Y2FzZSJ3IjpjYXNlInd3IjpyZXR1cm4gQS5zKEUud2VlaygpLEY9PT0idyI/MToyLCIwIik7Y2FzZSJXIjpjYXNlIldXIjpyZXR1cm4gQS5zKEUuaXNvV2VlaygpLEY9PT0iVyI/MToyLCIwIik7Y2FzZSJrIjpjYXNlImtrIjpyZXR1cm4gQS5zKFN0cmluZyhFLiRIPT09MD8yNDpFLiRIKSxGPT09ImsiPzE6MiwiMCIpO2Nhc2UiWCI6cmV0dXJuIE1hdGguZmxvb3IoRS4kZC5nZXRUaW1lKCkvMWUzKTtjYXNlIngiOnJldHVybiBFLiRkLmdldFRpbWUoKTtjYXNlInoiOnJldHVybiJbIitFLm9mZnNldE5hbWUoKSsiXSI7Y2FzZSJ6enoiOnJldHVybiJbIitFLm9mZnNldE5hbWUoImxvbmciKSsiXSI7ZGVmYXVsdDpyZXR1cm4gRn19KTtyZXR1cm4gbS5iaW5kKHRoaXMpKFApfX19KX0pKFlCdCk7dmFyIE56ZT1ZQnQuZXhwb3J0cztjb25zdCBQemU9UEUoTnplKTt1cC5leHRlbmQoRHplKSx1cC5leHRlbmQoT3plKSx1cC5leHRlbmQoUHplKTtsZXQgbTM9IiIsRjB0PSIiLEIwdCxSMHQ9IiIsQVA9W10sTFA9W10sajB0PXt9LCQwdD1bXSxfSz1bXSxzTD0iIix6MHQ9IiI7Y29uc3QgWEJ0PVsiYWN0aXZlIiwiZG9uZSIsImNyaXQiLCJtaWxlc3RvbmUiXTtsZXQgcTB0PVtdLE1QPSExLEgwdD0hMSxWMHQ9InN1bmRheSIsRzB0PTA7Y29uc3QgRnplPWZ1bmN0aW9uKGksYSxmKXtKMS5wYXJzZURpcmVjdGl2ZSh0aGlzLGksYSxmKX0sQnplPWZ1bmN0aW9uKCl7JDB0PVtdLF9LPVtdLHNMPSIiLHEwdD1bXSxDSz0wLFcwdD12b2lkIDAsU0s9dm9pZCAwLGQxPVtdLG0zPSIiLEYwdD0iIix6MHQ9IiIsQjB0PXZvaWQgMCxSMHQ9IiIsQVA9W10sTFA9W10sTVA9ITEsSDB0PSExLEcwdD0wLGowdD17fSxjZygpLFYwdD0ic3VuZGF5In0sUnplPWZ1bmN0aW9uKGkpe0YwdD1pfSxqemU9ZnVuY3Rpb24oKXtyZXR1cm4gRjB0fSwkemU9ZnVuY3Rpb24oaSl7QjB0PWl9LHp6ZT1mdW5jdGlvbigpe3JldHVybiBCMHR9LHF6ZT1mdW5jdGlvbihpKXtSMHQ9aX0sSHplPWZ1bmN0aW9uKCl7cmV0dXJuIFIwdH0sVnplPWZ1bmN0aW9uKGkpe20zPWl9LEd6ZT1mdW5jdGlvbigpe01QPSEwfSxVemU9ZnVuY3Rpb24oKXtyZXR1cm4gTVB9LFd6ZT1mdW5jdGlvbigpe0gwdD0hMH0sS3plPWZ1bmN0aW9uKCl7cmV0dXJuIEgwdH0sWXplPWZ1bmN0aW9uKGkpe3owdD1pfSxYemU9ZnVuY3Rpb24oKXtyZXR1cm4gejB0fSxRemU9ZnVuY3Rpb24oKXtyZXR1cm4gbTN9LFp6ZT1mdW5jdGlvbihpKXtBUD1pLnRvTG93ZXJDYXNlKCkuc3BsaXQoL1tccyxdKy8pfSxKemU9ZnVuY3Rpb24oKXtyZXR1cm4gQVB9LHRxZT1mdW5jdGlvbihpKXtMUD1pLnRvTG93ZXJDYXNlKCkuc3BsaXQoL1tccyxdKy8pfSxlcWU9ZnVuY3Rpb24oKXtyZXR1cm4gTFB9LG5xZT1mdW5jdGlvbigpe3JldHVybiBqMHR9LHJxZT1mdW5jdGlvbihpKXtzTD1pLCQwdC5wdXNoKGkpfSxpcWU9ZnVuY3Rpb24oKXtyZXR1cm4gJDB0fSxzcWU9ZnVuY3Rpb24oKXtsZXQgaT1uUnQoKTtjb25zdCBhPTEwO2xldCBmPTA7Zm9yKDshaSYmZjxhOylpPW5SdCgpLGYrKztyZXR1cm4gX0s9ZDEsX0t9LFFCdD1mdW5jdGlvbihpLGEsZixwKXtyZXR1cm4gcC5pbmNsdWRlcyhpLmZvcm1hdChhLnRyaW0oKSkpPyExOmkuaXNvV2Vla2RheSgpPj02JiZmLmluY2x1ZGVzKCJ3ZWVrZW5kcyIpfHxmLmluY2x1ZGVzKGkuZm9ybWF0KCJkZGRkIikudG9Mb3dlckNhc2UoKSk/ITA6Zi5pbmNsdWRlcyhpLmZvcm1hdChhLnRyaW0oKSkpfSxhcWU9ZnVuY3Rpb24oaSl7VjB0PWl9LG9xZT1mdW5jdGlvbigpe3JldHVybiBWMHR9LFpCdD1mdW5jdGlvbihpLGEsZixwKXtpZighZi5sZW5ndGh8fGkubWFudWFsRW5kVGltZSlyZXR1cm47bGV0IHY7aS5zdGFydFRpbWUgaW5zdGFuY2VvZiBEYXRlP3Y9dXAoaS5zdGFydFRpbWUpOnY9dXAoaS5zdGFydFRpbWUsYSwhMCksdj12LmFkZCgxLCJkIik7bGV0IG07aS5lbmRUaW1lIGluc3RhbmNlb2YgRGF0ZT9tPXVwKGkuZW5kVGltZSk6bT11cChpLmVuZFRpbWUsYSwhMCk7Y29uc3RbYixFXT1jcWUodixtLGEsZixwKTtpLmVuZFRpbWU9Yi50b0RhdGUoKSxpLnJlbmRlckVuZFRpbWU9RX0sY3FlPWZ1bmN0aW9uKGksYSxmLHAsdil7bGV0IG09ITEsYj1udWxsO2Zvcig7aTw9YTspbXx8KGI9YS50b0RhdGUoKSksbT1RQnQoaSxmLHAsdiksbSYmKGE9YS5hZGQoMSwiZCIpKSxpPWkuYWRkKDEsImQiKTtyZXR1cm5bYSxiXX0sVTB0PWZ1bmN0aW9uKGksYSxmKXtmPWYudHJpbSgpO2NvbnN0IHY9L15hZnRlclxzKyhbXGRcdy0gXSspLy5leGVjKGYudHJpbSgpKTtpZih2IT09bnVsbCl7bGV0IGI9bnVsbDtpZih2WzFdLnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbihFKXtsZXQgQz1vTChFKTtDIT09dm9pZCAwJiYoYj9DLmVuZFRpbWU+Yi5lbmRUaW1lJiYoYj1DKTpiPUMpfSksYilyZXR1cm4gYi5lbmRUaW1lO3tjb25zdCBFPW5ldyBEYXRlO3JldHVybiBFLnNldEhvdXJzKDAsMCwwLDApLEV9fWxldCBtPXVwKGYsYS50cmltKCksITApO2lmKG0uaXNWYWxpZCgpKXJldHVybiBtLnRvRGF0ZSgpO3tXdC5kZWJ1ZygiSW52YWxpZCBkYXRlOiIrZiksV3QuZGVidWcoIldpdGggZGF0ZSBmb3JtYXQ6IithLnRyaW0oKSk7Y29uc3QgYj1uZXcgRGF0ZShmKTtpZihiPT09dm9pZCAwfHxpc05hTihiLmdldFRpbWUoKSl8fGIuZ2V0RnVsbFllYXIoKTwtMWU0fHxiLmdldEZ1bGxZZWFyKCk+MWU0KXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBkYXRlOiIrZik7cmV0dXJuIGJ9fSxKQnQ9ZnVuY3Rpb24oaSl7Y29uc3QgYT0vXihcZCsoPzpcLlxkKyk/KShbTWRobXN3eV18bXMpJC8uZXhlYyhpLnRyaW0oKSk7cmV0dXJuIGEhPT1udWxsP1tOdW1iZXIucGFyc2VGbG9hdChhWzFdKSxhWzJdXTpbTmFOLCJtcyJdfSx0UnQ9ZnVuY3Rpb24oaSxhLGYscD0hMSl7Zj1mLnRyaW0oKTtsZXQgdj11cChmLGEudHJpbSgpLCEwKTtpZih2LmlzVmFsaWQoKSlyZXR1cm4gcCYmKHY9di5hZGQoMSwiZCIpKSx2LnRvRGF0ZSgpO2xldCBtPXVwKGkpO2NvbnN0W2IsRV09SkJ0KGYpO2lmKCFOdW1iZXIuaXNOYU4oYikpe2NvbnN0IEM9bS5hZGQoYixFKTtDLmlzVmFsaWQoKSYmKG09Qyl9cmV0dXJuIG0udG9EYXRlKCl9O2xldCBDSz0wO2NvbnN0IGFMPWZ1bmN0aW9uKGkpe3JldHVybiBpPT09dm9pZCAwPyhDSz1DSysxLCJ0YXNrIitDSyk6aX0sdXFlPWZ1bmN0aW9uKGksYSl7bGV0IGY7YS5zdWJzdHIoMCwxKT09PSI6Ij9mPWEuc3Vic3RyKDEsYS5sZW5ndGgpOmY9YTtjb25zdCBwPWYuc3BsaXQoIiwiKSx2PXt9O3NSdChwLHYsWEJ0KTtmb3IobGV0IGI9MDtiPHAubGVuZ3RoO2IrKylwW2JdPXBbYl0udHJpbSgpO2xldCBtPSIiO3N3aXRjaChwLmxlbmd0aCl7Y2FzZSAxOnYuaWQ9YUwoKSx2LnN0YXJ0VGltZT1pLmVuZFRpbWUsbT1wWzBdO2JyZWFrO2Nhc2UgMjp2LmlkPWFMKCksdi5zdGFydFRpbWU9VTB0KHZvaWQgMCxtMyxwWzBdKSxtPXBbMV07YnJlYWs7Y2FzZSAzOnYuaWQ9YUwocFswXSksdi5zdGFydFRpbWU9VTB0KHZvaWQgMCxtMyxwWzFdKSxtPXBbMl07YnJlYWt9cmV0dXJuIG0mJih2LmVuZFRpbWU9dFJ0KHYuc3RhcnRUaW1lLG0zLG0sTVApLHYubWFudWFsRW5kVGltZT11cChtLCJZWVlZLU1NLUREIiwhMCkuaXNWYWxpZCgpLFpCdCh2LG0zLExQLEFQKSksdn0sbHFlPWZ1bmN0aW9uKGksYSl7bGV0IGY7YS5zdWJzdHIoMCwxKT09PSI6Ij9mPWEuc3Vic3RyKDEsYS5sZW5ndGgpOmY9YTtjb25zdCBwPWYuc3BsaXQoIiwiKSx2PXt9O3NSdChwLHYsWEJ0KTtmb3IobGV0IG09MDttPHAubGVuZ3RoO20rKylwW21dPXBbbV0udHJpbSgpO3N3aXRjaChwLmxlbmd0aCl7Y2FzZSAxOnYuaWQ9YUwoKSx2LnN0YXJ0VGltZT17dHlwZToicHJldlRhc2tFbmQiLGlkOml9LHYuZW5kVGltZT17ZGF0YTpwWzBdfTticmVhaztjYXNlIDI6di5pZD1hTCgpLHYuc3RhcnRUaW1lPXt0eXBlOiJnZXRTdGFydERhdGUiLHN0YXJ0RGF0YTpwWzBdfSx2LmVuZFRpbWU9e2RhdGE6cFsxXX07YnJlYWs7Y2FzZSAzOnYuaWQ9YUwocFswXSksdi5zdGFydFRpbWU9e3R5cGU6ImdldFN0YXJ0RGF0ZSIsc3RhcnREYXRhOnBbMV19LHYuZW5kVGltZT17ZGF0YTpwWzJdfTticmVha31yZXR1cm4gdn07bGV0IFcwdCxTSyxkMT1bXTtjb25zdCBlUnQ9e30saHFlPWZ1bmN0aW9uKGksYSl7Y29uc3QgZj17c2VjdGlvbjpzTCx0eXBlOnNMLHByb2Nlc3NlZDohMSxtYW51YWxFbmRUaW1lOiExLHJlbmRlckVuZFRpbWU6bnVsbCxyYXc6e2RhdGE6YX0sdGFzazppLGNsYXNzZXM6W119LHA9bHFlKFNLLGEpO2YucmF3LnN0YXJ0VGltZT1wLnN0YXJ0VGltZSxmLnJhdy5lbmRUaW1lPXAuZW5kVGltZSxmLmlkPXAuaWQsZi5wcmV2VGFza0lkPVNLLGYuYWN0aXZlPXAuYWN0aXZlLGYuZG9uZT1wLmRvbmUsZi5jcml0PXAuY3JpdCxmLm1pbGVzdG9uZT1wLm1pbGVzdG9uZSxmLm9yZGVyPUcwdCxHMHQrKztjb25zdCB2PWQxLnB1c2goZik7U0s9Zi5pZCxlUnRbZi5pZF09di0xfSxvTD1mdW5jdGlvbihpKXtjb25zdCBhPWVSdFtpXTtyZXR1cm4gZDFbYV19LGZxZT1mdW5jdGlvbihpLGEpe2NvbnN0IGY9e3NlY3Rpb246c0wsdHlwZTpzTCxkZXNjcmlwdGlvbjppLHRhc2s6aSxjbGFzc2VzOltdfSxwPXVxZShXMHQsYSk7Zi5zdGFydFRpbWU9cC5zdGFydFRpbWUsZi5lbmRUaW1lPXAuZW5kVGltZSxmLmlkPXAuaWQsZi5hY3RpdmU9cC5hY3RpdmUsZi5kb25lPXAuZG9uZSxmLmNyaXQ9cC5jcml0LGYubWlsZXN0b25lPXAubWlsZXN0b25lLFcwdD1mLF9LLnB1c2goZil9LG5SdD1mdW5jdGlvbigpe2NvbnN0IGk9ZnVuY3Rpb24oZil7Y29uc3QgcD1kMVtmXTtsZXQgdj0iIjtzd2l0Y2goZDFbZl0ucmF3LnN0YXJ0VGltZS50eXBlKXtjYXNlInByZXZUYXNrRW5kIjp7Y29uc3QgbT1vTChwLnByZXZUYXNrSWQpO3Auc3RhcnRUaW1lPW0uZW5kVGltZTticmVha31jYXNlImdldFN0YXJ0RGF0ZSI6dj1VMHQodm9pZCAwLG0zLGQxW2ZdLnJhdy5zdGFydFRpbWUuc3RhcnREYXRhKSx2JiYoZDFbZl0uc3RhcnRUaW1lPXYpO2JyZWFrfXJldHVybiBkMVtmXS5zdGFydFRpbWUmJihkMVtmXS5lbmRUaW1lPXRSdChkMVtmXS5zdGFydFRpbWUsbTMsZDFbZl0ucmF3LmVuZFRpbWUuZGF0YSxNUCksZDFbZl0uZW5kVGltZSYmKGQxW2ZdLnByb2Nlc3NlZD0hMCxkMVtmXS5tYW51YWxFbmRUaW1lPXVwKGQxW2ZdLnJhdy5lbmRUaW1lLmRhdGEsIllZWVktTU0tREQiLCEwKS5pc1ZhbGlkKCksWkJ0KGQxW2ZdLG0zLExQLEFQKSkpLGQxW2ZdLnByb2Nlc3NlZH07bGV0IGE9ITA7Zm9yKGNvbnN0W2YscF1vZiBkMS5lbnRyaWVzKCkpaShmKSxhPWEmJnAucHJvY2Vzc2VkO3JldHVybiBhfSxkcWU9ZnVuY3Rpb24oaSxhKXtsZXQgZj1hO0RlKCkuc2VjdXJpdHlMZXZlbCE9PSJsb29zZSImJihmPVh4KGEpKSxpLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihwKXtvTChwKSE9PXZvaWQgMCYmKGlSdChwLCgpPT57d2luZG93Lm9wZW4oZiwiX3NlbGYiKX0pLGowdFtwXT1mKX0pLHJSdChpLCJjbGlja2FibGUiKX0sclJ0PWZ1bmN0aW9uKGksYSl7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24oZil7bGV0IHA9b0woZik7cCE9PXZvaWQgMCYmcC5jbGFzc2VzLnB1c2goYSl9KX0sZ3FlPWZ1bmN0aW9uKGksYSxmKXtpZihEZSgpLnNlY3VyaXR5TGV2ZWwhPT0ibG9vc2UifHxhPT09dm9pZCAwKXJldHVybjtsZXQgcD1bXTtpZih0eXBlb2YgZj09InN0cmluZyIpe3A9Zi5zcGxpdCgvLCg/PSg/Oig/OlteIl0qIil7Mn0pKlteIl0qJCkvKTtmb3IobGV0IG09MDttPHAubGVuZ3RoO20rKyl7bGV0IGI9cFttXS50cmltKCk7Yi5jaGFyQXQoMCk9PT0nIicmJmIuY2hhckF0KGIubGVuZ3RoLTEpPT09JyInJiYoYj1iLnN1YnN0cigxLGIubGVuZ3RoLTIpKSxwW21dPWJ9fXAubGVuZ3RoPT09MCYmcC5wdXNoKGkpLG9MKGkpIT09dm9pZCAwJiZpUnQoaSwoKT0+e3RvLnJ1bkZ1bmMoYSwuLi5wKX0pfSxpUnQ9ZnVuY3Rpb24oaSxhKXtxMHQucHVzaChmdW5jdGlvbigpe2NvbnN0IGY9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2lkPSIke2l9Il1gKTtmIT09bnVsbCYmZi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXthKCl9KX0sZnVuY3Rpb24oKXtjb25zdCBmPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtpZD0iJHtpfS10ZXh0Il1gKTtmIT09bnVsbCYmZi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXthKCl9KX0pfSxwcWU9e3BhcnNlRGlyZWN0aXZlOkZ6ZSxnZXRDb25maWc6KCk9PkRlKCkuZ2FudHQsY2xlYXI6QnplLHNldERhdGVGb3JtYXQ6VnplLGdldERhdGVGb3JtYXQ6UXplLGVuYWJsZUluY2x1c2l2ZUVuZERhdGVzOkd6ZSxlbmREYXRlc0FyZUluY2x1c2l2ZTpVemUsZW5hYmxlVG9wQXhpczpXemUsdG9wQXhpc0VuYWJsZWQ6S3plLHNldEF4aXNGb3JtYXQ6UnplLGdldEF4aXNGb3JtYXQ6anplLHNldFRpY2tJbnRlcnZhbDokemUsZ2V0VGlja0ludGVydmFsOnp6ZSxzZXRUb2RheU1hcmtlcjpxemUsZ2V0VG9kYXlNYXJrZXI6SHplLHNldEFjY1RpdGxlOm0wLGdldEFjY1RpdGxlOnVnLHNldERpYWdyYW1UaXRsZTpOYixnZXREaWFncmFtVGl0bGU6aHAsc2V0RGlzcGxheU1vZGU6WXplLGdldERpc3BsYXlNb2RlOlh6ZSxzZXRBY2NEZXNjcmlwdGlvbjpsZyxnZXRBY2NEZXNjcmlwdGlvbjpoZyxhZGRTZWN0aW9uOnJxZSxnZXRTZWN0aW9uczppcWUsZ2V0VGFza3M6c3FlLGFkZFRhc2s6aHFlLGZpbmRUYXNrQnlJZDpvTCxhZGRUYXNrT3JnOmZxZSxzZXRJbmNsdWRlczpaemUsZ2V0SW5jbHVkZXM6SnplLHNldEV4Y2x1ZGVzOnRxZSxnZXRFeGNsdWRlczplcWUsc2V0Q2xpY2tFdmVudDpmdW5jdGlvbihpLGEsZil7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24ocCl7Z3FlKHAsYSxmKX0pLHJSdChpLCJjbGlja2FibGUiKX0sc2V0TGluazpkcWUsZ2V0TGlua3M6bnFlLGJpbmRGdW5jdGlvbnM6ZnVuY3Rpb24oaSl7cTB0LmZvckVhY2goZnVuY3Rpb24oYSl7YShpKX0pfSxwYXJzZUR1cmF0aW9uOkpCdCxpc0ludmFsaWREYXRlOlFCdCxzZXRXZWVrZGF5OmFxZSxnZXRXZWVrZGF5Om9xZX07ZnVuY3Rpb24gc1J0KGksYSxmKXtsZXQgcD0hMDtmb3IoO3A7KXA9ITEsZi5mb3JFYWNoKGZ1bmN0aW9uKHYpe2NvbnN0IG09Il5cXHMqIit2KyJcXHMqJCIsYj1uZXcgUmVnRXhwKG0pO2lbMF0ubWF0Y2goYikmJihhW3ZdPSEwLGkuc2hpZnQoMSkscD0hMCl9KX1jb25zdCBicWU9ZnVuY3Rpb24oKXtXdC5kZWJ1ZygiU29tZXRoaW5nIGlzIGNhbGxpbmcsIHNldENvbmYsIHJlbW92ZSB0aGUgY2FsbCIpfSxhUnQ9e21vbmRheTpETix0dWVzZGF5OlVNdCx3ZWRuZXNkYXk6V010LHRodXJzZGF5OkdFLGZyaWRheTpLTXQsc2F0dXJkYXk6WU10LHN1bmRheTpNTn0sdnFlPShpLGEpPT57bGV0IGY9Wy4uLmldLm1hcCgoKT0+LTEvMCkscD1bLi4uaV0uc29ydCgobSxiKT0+bS5zdGFydFRpbWUtYi5zdGFydFRpbWV8fG0ub3JkZXItYi5vcmRlciksdj0wO2Zvcihjb25zdCBtIG9mIHApZm9yKGxldCBiPTA7YjxmLmxlbmd0aDtiKyspaWYobS5zdGFydFRpbWU+PWZbYl0pe2ZbYl09bS5lbmRUaW1lLG0ub3JkZXI9YithLGI+diYmKHY9Yik7YnJlYWt9cmV0dXJuIHZ9O2xldCBNNTtjb25zdCB3cWU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpMemUsZGI6cHFlLHJlbmRlcmVyOntzZXRDb25mOmJxZSxkcmF3OmZ1bmN0aW9uKGksYSxmLHApe2NvbnN0IHY9RGUoKS5nYW50dCxtPURlKCkuc2VjdXJpdHlMZXZlbDtsZXQgYjttPT09InNhbmRib3giJiYoYj14cigiI2kiK2EpKTtjb25zdCBFPXhyKG09PT0ic2FuZGJveCI/Yi5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5IiksQz1tPT09InNhbmRib3giP2Iubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQsQT1DLmdldEVsZW1lbnRCeUlkKGEpO001PUEucGFyZW50RWxlbWVudC5vZmZzZXRXaWR0aCxNNT09PXZvaWQgMCYmKE01PTEyMDApLHYudXNlV2lkdGghPT12b2lkIDAmJihNNT12LnVzZVdpZHRoKTtjb25zdCBQPXAuZGIuZ2V0VGFza3MoKTtsZXQgRj1bXTtmb3IoY29uc3QgeXQgb2YgUClGLnB1c2goeXQudHlwZSk7Rj1jdChGKTtjb25zdCBqPXt9O2xldCBSPTIqdi50b3BQYWRkaW5nO2lmKHAuZGIuZ2V0RGlzcGxheU1vZGUoKT09PSJjb21wYWN0Inx8di5kaXNwbGF5TW9kZT09PSJjb21wYWN0Iil7Y29uc3QgeXQ9e307Zm9yKGNvbnN0IHh0IG9mIFApeXRbeHQuc2VjdGlvbl09PT12b2lkIDA/eXRbeHQuc2VjdGlvbl09W3h0XTp5dFt4dC5zZWN0aW9uXS5wdXNoKHh0KTtsZXQgc3Q9MDtmb3IoY29uc3QgeHQgb2YgT2JqZWN0LmtleXMoeXQpKXtjb25zdCBodD12cWUoeXRbeHRdLHN0KSsxO3N0Kz1odCxSKz1odCoodi5iYXJIZWlnaHQrdi5iYXJHYXApLGpbeHRdPWh0fX1lbHNle1IrPVAubGVuZ3RoKih2LmJhckhlaWdodCt2LmJhckdhcCk7Zm9yKGNvbnN0IHl0IG9mIEYpalt5dF09UC5maWx0ZXIoc3Q9PnN0LnR5cGU9PT15dCkubGVuZ3RofUEuc2V0QXR0cmlidXRlKCJ2aWV3Qm94IiwiMCAwICIrTTUrIiAiK1IpO2NvbnN0IEg9RS5zZWxlY3QoYFtpZD0iJHthfSJdYCksWT1URWUoKS5kb21haW4oW2M2ZShQLGZ1bmN0aW9uKHl0KXtyZXR1cm4geXQuc3RhcnRUaW1lfSksbzZlKFAsZnVuY3Rpb24oeXQpe3JldHVybiB5dC5lbmRUaW1lfSldKS5yYW5nZVJvdW5kKFswLE01LXYubGVmdFBhZGRpbmctdi5yaWdodFBhZGRpbmddKTtmdW5jdGlvbiBydCh5dCxzdCl7Y29uc3QgeHQ9eXQuc3RhcnRUaW1lLGh0PXN0LnN0YXJ0VGltZTtsZXQgZHQ9MDtyZXR1cm4geHQ+aHQ/ZHQ9MTp4dDxodCYmKGR0PS0xKSxkdH1QLnNvcnQocnQpLEooUCxNNSxSKSxvZyhILFIsTTUsdi51c2VNYXhXaWR0aCksSC5hcHBlbmQoInRleHQiKS50ZXh0KHAuZGIuZ2V0RGlhZ3JhbVRpdGxlKCkpLmF0dHIoIngiLE01LzIpLmF0dHIoInkiLHYudGl0bGVUb3BNYXJnaW4pLmF0dHIoImNsYXNzIiwidGl0bGVUZXh0Iik7ZnVuY3Rpb24gSih5dCxzdCx4dCl7Y29uc3QgaHQ9di5iYXJIZWlnaHQsZHQ9aHQrdi5iYXJHYXAsQ3Q9di50b3BQYWRkaW5nLHR0PXYubGVmdFBhZGRpbmcsUHQ9QlUoKS5kb21haW4oWzAsRi5sZW5ndGhdKS5yYW5nZShbIiMwMEI5RkEiLCIjRjk1MDAyIl0pLmludGVycG9sYXRlKExrZSk7ZnQoZHQsQ3QsdHQsc3QseHQseXQscC5kYi5nZXRFeGNsdWRlcygpLHAuZGIuZ2V0SW5jbHVkZXMoKSksVHQodHQsQ3Qsc3QseHQpLGl0KHl0LGR0LEN0LHR0LGh0LFB0LHN0KSxrdChkdCxDdCksbXQodHQsQ3Qsc3QseHQpfWZ1bmN0aW9uIGl0KHl0LHN0LHh0LGh0LGR0LEN0LHR0KXtjb25zdCBwdD1bLi4ubmV3IFNldCh5dC5tYXAoQnQ9PkJ0Lm9yZGVyKSldLm1hcChCdD0+eXQuZmluZCh2dD0+dnQub3JkZXI9PT1CdCkpO0guYXBwZW5kKCJnIikuc2VsZWN0QWxsKCJyZWN0IikuZGF0YShwdCkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixmdW5jdGlvbihCdCx2dCl7cmV0dXJuIHZ0PUJ0Lm9yZGVyLHZ0KnN0K3h0LTJ9KS5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24oKXtyZXR1cm4gdHQtdi5yaWdodFBhZGRpbmcvMn0pLmF0dHIoImhlaWdodCIsc3QpLmF0dHIoImNsYXNzIixmdW5jdGlvbihCdCl7Zm9yKGNvbnN0W3Z0LE90XW9mIEYuZW50cmllcygpKWlmKEJ0LnR5cGU9PT1PdClyZXR1cm4ic2VjdGlvbiBzZWN0aW9uIit2dCV2Lm51bWJlclNlY3Rpb25TdHlsZXM7cmV0dXJuInNlY3Rpb24gc2VjdGlvbjAifSk7Y29uc3QgRnQ9SC5hcHBlbmQoImciKS5zZWxlY3RBbGwoInJlY3QiKS5kYXRhKHl0KS5lbnRlcigpLFg9cC5kYi5nZXRMaW5rcygpO2lmKEZ0LmFwcGVuZCgicmVjdCIpLmF0dHIoImlkIixmdW5jdGlvbihCdCl7cmV0dXJuIEJ0LmlkfSkuYXR0cigicngiLDMpLmF0dHIoInJ5IiwzKS5hdHRyKCJ4IixmdW5jdGlvbihCdCl7cmV0dXJuIEJ0Lm1pbGVzdG9uZT9ZKEJ0LnN0YXJ0VGltZSkraHQrLjUqKFkoQnQuZW5kVGltZSktWShCdC5zdGFydFRpbWUpKS0uNSpkdDpZKEJ0LnN0YXJ0VGltZSkraHR9KS5hdHRyKCJ5IixmdW5jdGlvbihCdCx2dCl7cmV0dXJuIHZ0PUJ0Lm9yZGVyLHZ0KnN0K3h0fSkuYXR0cigid2lkdGgiLGZ1bmN0aW9uKEJ0KXtyZXR1cm4gQnQubWlsZXN0b25lP2R0OlkoQnQucmVuZGVyRW5kVGltZXx8QnQuZW5kVGltZSktWShCdC5zdGFydFRpbWUpfSkuYXR0cigiaGVpZ2h0IixkdCkuYXR0cigidHJhbnNmb3JtLW9yaWdpbiIsZnVuY3Rpb24oQnQsdnQpe3JldHVybiB2dD1CdC5vcmRlciwoWShCdC5zdGFydFRpbWUpK2h0Ky41KihZKEJ0LmVuZFRpbWUpLVkoQnQuc3RhcnRUaW1lKSkpLnRvU3RyaW5nKCkrInB4ICIrKHZ0KnN0K3h0Ky41KmR0KS50b1N0cmluZygpKyJweCJ9KS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oQnQpe2NvbnN0IHZ0PSJ0YXNrIjtsZXQgT3Q9IiI7QnQuY2xhc3Nlcy5sZW5ndGg+MCYmKE90PUJ0LmNsYXNzZXMuam9pbigiICIpKTtsZXQgVnQ9MDtmb3IoY29uc3RbX24sVGVdb2YgRi5lbnRyaWVzKCkpQnQudHlwZT09PVRlJiYoVnQ9X24ldi5udW1iZXJTZWN0aW9uU3R5bGVzKTtsZXQgcWU9IiI7cmV0dXJuIEJ0LmFjdGl2ZT9CdC5jcml0P3FlKz0iIGFjdGl2ZUNyaXQiOnFlPSIgYWN0aXZlIjpCdC5kb25lP0J0LmNyaXQ/cWU9IiBkb25lQ3JpdCI6cWU9IiBkb25lIjpCdC5jcml0JiYocWUrPSIgY3JpdCIpLHFlLmxlbmd0aD09PTAmJihxZT0iIHRhc2siKSxCdC5taWxlc3RvbmUmJihxZT0iIG1pbGVzdG9uZSAiK3FlKSxxZSs9VnQscWUrPSIgIitPdCx2dCtxZX0pLEZ0LmFwcGVuZCgidGV4dCIpLmF0dHIoImlkIixmdW5jdGlvbihCdCl7cmV0dXJuIEJ0LmlkKyItdGV4dCJ9KS50ZXh0KGZ1bmN0aW9uKEJ0KXtyZXR1cm4gQnQudGFza30pLmF0dHIoImZvbnQtc2l6ZSIsdi5mb250U2l6ZSkuYXR0cigieCIsZnVuY3Rpb24oQnQpe2xldCB2dD1ZKEJ0LnN0YXJ0VGltZSksT3Q9WShCdC5yZW5kZXJFbmRUaW1lfHxCdC5lbmRUaW1lKTtCdC5taWxlc3RvbmUmJih2dCs9LjUqKFkoQnQuZW5kVGltZSktWShCdC5zdGFydFRpbWUpKS0uNSpkdCksQnQubWlsZXN0b25lJiYoT3Q9dnQrZHQpO2NvbnN0IFZ0PXRoaXMuZ2V0QkJveCgpLndpZHRoO3JldHVybiBWdD5PdC12dD9PdCtWdCsxLjUqdi5sZWZ0UGFkZGluZz50dD92dCtodC01Ok90K2h0KzU6KE90LXZ0KS8yK3Z0K2h0fSkuYXR0cigieSIsZnVuY3Rpb24oQnQsdnQpe3JldHVybiB2dD1CdC5vcmRlcix2dCpzdCt2LmJhckhlaWdodC8yKyh2LmZvbnRTaXplLzItMikreHR9KS5hdHRyKCJ0ZXh0LWhlaWdodCIsZHQpLmF0dHIoImNsYXNzIixmdW5jdGlvbihCdCl7Y29uc3QgdnQ9WShCdC5zdGFydFRpbWUpO2xldCBPdD1ZKEJ0LmVuZFRpbWUpO0J0Lm1pbGVzdG9uZSYmKE90PXZ0K2R0KTtjb25zdCBWdD10aGlzLmdldEJCb3goKS53aWR0aDtsZXQgcWU9IiI7QnQuY2xhc3Nlcy5sZW5ndGg+MCYmKHFlPUJ0LmNsYXNzZXMuam9pbigiICIpKTtsZXQgX249MDtmb3IoY29uc3RbV24sQWVdb2YgRi5lbnRyaWVzKCkpQnQudHlwZT09PUFlJiYoX249V24ldi5udW1iZXJTZWN0aW9uU3R5bGVzKTtsZXQgVGU9IiI7cmV0dXJuIEJ0LmFjdGl2ZSYmKEJ0LmNyaXQ/VGU9ImFjdGl2ZUNyaXRUZXh0IitfbjpUZT0iYWN0aXZlVGV4dCIrX24pLEJ0LmRvbmU/QnQuY3JpdD9UZT1UZSsiIGRvbmVDcml0VGV4dCIrX246VGU9VGUrIiBkb25lVGV4dCIrX246QnQuY3JpdCYmKFRlPVRlKyIgY3JpdFRleHQiK19uKSxCdC5taWxlc3RvbmUmJihUZSs9IiBtaWxlc3RvbmVUZXh0IiksVnQ+T3QtdnQ/T3QrVnQrMS41KnYubGVmdFBhZGRpbmc+dHQ/cWUrIiB0YXNrVGV4dE91dHNpZGVMZWZ0IHRhc2tUZXh0T3V0c2lkZSIrX24rIiAiK1RlOnFlKyIgdGFza1RleHRPdXRzaWRlUmlnaHQgdGFza1RleHRPdXRzaWRlIitfbisiICIrVGUrIiB3aWR0aC0iK1Z0OnFlKyIgdGFza1RleHQgdGFza1RleHQiK19uKyIgIitUZSsiIHdpZHRoLSIrVnR9KSxEZSgpLnNlY3VyaXR5TGV2ZWw9PT0ic2FuZGJveCIpe2xldCBCdDtCdD14cigiI2kiK2EpO2NvbnN0IHZ0PUJ0Lm5vZGVzKClbMF0uY29udGVudERvY3VtZW50O0Z0LmZpbHRlcihmdW5jdGlvbihPdCl7cmV0dXJuIFhbT3QuaWRdIT09dm9pZCAwfSkuZWFjaChmdW5jdGlvbihPdCl7dmFyIFZ0PXZ0LnF1ZXJ5U2VsZWN0b3IoIiMiK090LmlkKSxxZT12dC5xdWVyeVNlbGVjdG9yKCIjIitPdC5pZCsiLXRleHQiKTtjb25zdCBfbj1WdC5wYXJlbnROb2RlO3ZhciBUZT12dC5jcmVhdGVFbGVtZW50KCJhIik7VGUuc2V0QXR0cmlidXRlKCJ4bGluazpocmVmIixYW090LmlkXSksVGUuc2V0QXR0cmlidXRlKCJ0YXJnZXQiLCJfdG9wIiksX24uYXBwZW5kQ2hpbGQoVGUpLFRlLmFwcGVuZENoaWxkKFZ0KSxUZS5hcHBlbmRDaGlsZChxZSl9KX19ZnVuY3Rpb24gZnQoeXQsc3QseHQsaHQsZHQsQ3QsdHQsUHQpe2NvbnN0IHB0PUN0LnJlZHVjZSgoVnQse3N0YXJ0VGltZTpxZX0pPT5WdD9NYXRoLm1pbihWdCxxZSk6cWUsMCksRnQ9Q3QucmVkdWNlKChWdCx7ZW5kVGltZTpxZX0pPT5WdD9NYXRoLm1heChWdCxxZSk6cWUsMCksWD1wLmRiLmdldERhdGVGb3JtYXQoKTtpZighcHR8fCFGdClyZXR1cm47Y29uc3QgUnQ9W107bGV0IEJ0PW51bGwsdnQ9dXAocHQpO2Zvcig7dnQudmFsdWVPZigpPD1GdDspcC5kYi5pc0ludmFsaWREYXRlKHZ0LFgsdHQsUHQpP0J0P0J0LmVuZD12dDpCdD17c3RhcnQ6dnQsZW5kOnZ0fTpCdCYmKFJ0LnB1c2goQnQpLEJ0PW51bGwpLHZ0PXZ0LmFkZCgxLCJkIik7SC5hcHBlbmQoImciKS5zZWxlY3RBbGwoInJlY3QiKS5kYXRhKFJ0KS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImlkIixmdW5jdGlvbihWdCl7cmV0dXJuImV4Y2x1ZGUtIitWdC5zdGFydC5mb3JtYXQoIllZWVktTU0tREQiKX0pLmF0dHIoIngiLGZ1bmN0aW9uKFZ0KXtyZXR1cm4gWShWdC5zdGFydCkreHR9KS5hdHRyKCJ5Iix2LmdyaWRMaW5lU3RhcnRQYWRkaW5nKS5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24oVnQpe2NvbnN0IHFlPVZ0LmVuZC5hZGQoMSwiZGF5Iik7cmV0dXJuIFkocWUpLVkoVnQuc3RhcnQpfSkuYXR0cigiaGVpZ2h0IixkdC1zdC12LmdyaWRMaW5lU3RhcnRQYWRkaW5nKS5hdHRyKCJ0cmFuc2Zvcm0tb3JpZ2luIixmdW5jdGlvbihWdCxxZSl7cmV0dXJuKFkoVnQuc3RhcnQpK3h0Ky41KihZKFZ0LmVuZCktWShWdC5zdGFydCkpKS50b1N0cmluZygpKyJweCAiKyhxZSp5dCsuNSpkdCkudG9TdHJpbmcoKSsicHgifSkuYXR0cigiY2xhc3MiLCJleGNsdWRlLXJhbmdlIil9ZnVuY3Rpb24gVHQoeXQsc3QseHQsaHQpe2xldCBkdD1iNmUoWSkudGlja1NpemUoLWh0K3N0K3YuZ3JpZExpbmVTdGFydFBhZGRpbmcpLnRpY2tGb3JtYXQoSFUocC5kYi5nZXRBeGlzRm9ybWF0KCl8fHYuYXhpc0Zvcm1hdHx8IiVZLSVtLSVkIikpO2NvbnN0IHR0PS9eKFsxLTldXGQqKShtaW51dGV8aG91cnxkYXl8d2Vla3xtb250aCkkLy5leGVjKHAuZGIuZ2V0VGlja0ludGVydmFsKCl8fHYudGlja0ludGVydmFsKTtpZih0dCE9PW51bGwpe2NvbnN0IFB0PXR0WzFdLHB0PXR0WzJdLEZ0PXAuZGIuZ2V0V2Vla2RheSgpfHx2LndlZWtkYXk7c3dpdGNoKHB0KXtjYXNlIm1pbnV0ZSI6ZHQudGlja3MoalUuZXZlcnkoUHQpKTticmVhaztjYXNlImhvdXIiOmR0LnRpY2tzKCRVLmV2ZXJ5KFB0KSk7YnJlYWs7Y2FzZSJkYXkiOmR0LnRpY2tzKF9BLmV2ZXJ5KFB0KSk7YnJlYWs7Y2FzZSJ3ZWVrIjpkdC50aWNrcyhhUnRbRnRdLmV2ZXJ5KFB0KSk7YnJlYWs7Y2FzZSJtb250aCI6ZHQudGlja3MoelUuZXZlcnkoUHQpKTticmVha319aWYoSC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImdyaWQiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit5dCsiLCAiKyhodC01MCkrIikiKS5jYWxsKGR0KS5zZWxlY3RBbGwoInRleHQiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJmaWxsIiwiIzAwMCIpLmF0dHIoInN0cm9rZSIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJkeSIsIjFlbSIpLHAuZGIudG9wQXhpc0VuYWJsZWQoKXx8di50b3BBeGlzKXtsZXQgUHQ9cDZlKFkpLnRpY2tTaXplKC1odCtzdCt2LmdyaWRMaW5lU3RhcnRQYWRkaW5nKS50aWNrRm9ybWF0KEhVKHAuZGIuZ2V0QXhpc0Zvcm1hdCgpfHx2LmF4aXNGb3JtYXR8fCIlWS0lbS0lZCIpKTtpZih0dCE9PW51bGwpe2NvbnN0IHB0PXR0WzFdLEZ0PXR0WzJdLFg9cC5kYi5nZXRXZWVrZGF5KCl8fHYud2Vla2RheTtzd2l0Y2goRnQpe2Nhc2UibWludXRlIjpQdC50aWNrcyhqVS5ldmVyeShwdCkpO2JyZWFrO2Nhc2UiaG91ciI6UHQudGlja3MoJFUuZXZlcnkocHQpKTticmVhaztjYXNlImRheSI6UHQudGlja3MoX0EuZXZlcnkocHQpKTticmVhaztjYXNlIndlZWsiOlB0LnRpY2tzKGFSdFtYXS5ldmVyeShwdCkpO2JyZWFrO2Nhc2UibW9udGgiOlB0LnRpY2tzKHpVLmV2ZXJ5KHB0KSk7YnJlYWt9fUguYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJncmlkIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIreXQrIiwgIitzdCsiKSIpLmNhbGwoUHQpLnNlbGVjdEFsbCgidGV4dCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImZpbGwiLCIjMDAwIikuYXR0cigic3Ryb2tlIiwibm9uZSIpLmF0dHIoImZvbnQtc2l6ZSIsMTApfX1mdW5jdGlvbiBrdCh5dCxzdCl7bGV0IHh0PTA7Y29uc3QgaHQ9T2JqZWN0LmtleXMoaikubWFwKGR0PT5bZHQsaltkdF1dKTtILmFwcGVuZCgiZyIpLnNlbGVjdEFsbCgidGV4dCIpLmRhdGEoaHQpLmVudGVyKCkuYXBwZW5kKGZ1bmN0aW9uKGR0KXtjb25zdCBDdD1kdFswXS5zcGxpdCh1aS5saW5lQnJlYWtSZWdleCksdHQ9LShDdC5sZW5ndGgtMSkvMixQdD1DLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7UHQuc2V0QXR0cmlidXRlKCJkeSIsdHQrImVtIik7Zm9yKGNvbnN0W3B0LEZ0XW9mIEN0LmVudHJpZXMoKSl7Y29uc3QgWD1DLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0c3BhbiIpO1guc2V0QXR0cmlidXRlKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJjZW50cmFsIiksWC5zZXRBdHRyaWJ1dGUoIngiLCIxMCIpLHB0PjAmJlguc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLFgudGV4dENvbnRlbnQ9RnQsUHQuYXBwZW5kQ2hpbGQoWCl9cmV0dXJuIFB0fSkuYXR0cigieCIsMTApLmF0dHIoInkiLGZ1bmN0aW9uKGR0LEN0KXtpZihDdD4wKWZvcihsZXQgdHQ9MDt0dDxDdDt0dCsrKXJldHVybiB4dCs9aHRbQ3QtMV1bMV0sZHRbMV0qeXQvMit4dCp5dCtzdDtlbHNlIHJldHVybiBkdFsxXSp5dC8yK3N0fSkuYXR0cigiZm9udC1zaXplIix2LnNlY3Rpb25Gb250U2l6ZSkuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKGR0KXtmb3IoY29uc3RbQ3QsdHRdb2YgRi5lbnRyaWVzKCkpaWYoZHRbMF09PT10dClyZXR1cm4ic2VjdGlvblRpdGxlIHNlY3Rpb25UaXRsZSIrQ3Qldi5udW1iZXJTZWN0aW9uU3R5bGVzO3JldHVybiJzZWN0aW9uVGl0bGUifSl9ZnVuY3Rpb24gbXQoeXQsc3QseHQsaHQpe2NvbnN0IGR0PXAuZGIuZ2V0VG9kYXlNYXJrZXIoKTtpZihkdD09PSJvZmYiKXJldHVybjtjb25zdCBDdD1ILmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidG9kYXkiKSx0dD1uZXcgRGF0ZSxQdD1DdC5hcHBlbmQoImxpbmUiKTtQdC5hdHRyKCJ4MSIsWSh0dCkreXQpLmF0dHIoIngyIixZKHR0KSt5dCkuYXR0cigieTEiLHYudGl0bGVUb3BNYXJnaW4pLmF0dHIoInkyIixodC12LnRpdGxlVG9wTWFyZ2luKS5hdHRyKCJjbGFzcyIsInRvZGF5IiksZHQhPT0iIiYmUHQuYXR0cigic3R5bGUiLGR0LnJlcGxhY2UoLywvZywiOyIpKX1mdW5jdGlvbiBjdCh5dCl7Y29uc3Qgc3Q9e30seHQ9W107Zm9yKGxldCBodD0wLGR0PXl0Lmxlbmd0aDtodDxkdDsrK2h0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzdCx5dFtodF0pfHwoc3RbeXRbaHRdXT0hMCx4dC5wdXNoKHl0W2h0XSkpO3JldHVybiB4dH19fSxzdHlsZXM6aT0+YAogIC5tZXJtYWlkLW1haW4tZm9udCB7CiAgICBmb250LWZhbWlseTogInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmOwogICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpOwogIH0KICAuZXhjbHVkZS1yYW5nZSB7CiAgICBmaWxsOiAke2kuZXhjbHVkZUJrZ0NvbG9yfTsKICB9CgogIC5zZWN0aW9uIHsKICAgIHN0cm9rZTogbm9uZTsKICAgIG9wYWNpdHk6IDAuMjsKICB9CgogIC5zZWN0aW9uMCB7CiAgICBmaWxsOiAke2kuc2VjdGlvbkJrZ0NvbG9yfTsKICB9CgogIC5zZWN0aW9uMiB7CiAgICBmaWxsOiAke2kuc2VjdGlvbkJrZ0NvbG9yMn07CiAgfQoKICAuc2VjdGlvbjEsCiAgLnNlY3Rpb24zIHsKICAgIGZpbGw6ICR7aS5hbHRTZWN0aW9uQmtnQ29sb3J9OwogICAgb3BhY2l0eTogMC4yOwogIH0KCiAgLnNlY3Rpb25UaXRsZTAgewogICAgZmlsbDogJHtpLnRpdGxlQ29sb3J9OwogIH0KCiAgLnNlY3Rpb25UaXRsZTEgewogICAgZmlsbDogJHtpLnRpdGxlQ29sb3J9OwogIH0KCiAgLnNlY3Rpb25UaXRsZTIgewogICAgZmlsbDogJHtpLnRpdGxlQ29sb3J9OwogIH0KCiAgLnNlY3Rpb25UaXRsZTMgewogICAgZmlsbDogJHtpLnRpdGxlQ29sb3J9OwogIH0KCiAgLnNlY3Rpb25UaXRsZSB7CiAgICB0ZXh0LWFuY2hvcjogc3RhcnQ7CiAgICAvLyBmb250LXNpemU6ICR7aS5nYW50dEZvbnRTaXplfTsKICAgIC8vIHRleHQtaGVpZ2h0OiAxNHB4OwogICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5KTsKCiAgfQoKCiAgLyogR3JpZCBhbmQgYXhpcyAqLwoKICAuZ3JpZCAudGljayB7CiAgICBzdHJva2U6ICR7aS5ncmlkQ29sb3J9OwogICAgb3BhY2l0eTogMC44OwogICAgc2hhcGUtcmVuZGVyaW5nOiBjcmlzcEVkZ2VzOwogICAgdGV4dCB7CiAgICAgIGZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX07CiAgICAgIGZpbGw6ICR7aS50ZXh0Q29sb3J9OwogICAgfQogIH0KCiAgLmdyaWQgcGF0aCB7CiAgICBzdHJva2Utd2lkdGg6IDA7CiAgfQoKCiAgLyogVG9kYXkgbGluZSAqLwoKICAudG9kYXkgewogICAgZmlsbDogbm9uZTsKICAgIHN0cm9rZTogJHtpLnRvZGF5TGluZUNvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogMnB4OwogIH0KCgogIC8qIFRhc2sgc3R5bGluZyAqLwoKICAvKiBEZWZhdWx0IHRhc2sgKi8KCiAgLnRhc2sgewogICAgc3Ryb2tlLXdpZHRoOiAyOwogIH0KCiAgLnRhc2tUZXh0IHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmOwogICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpOwogIH0KCiAgLy8gLnRhc2tUZXh0Om5vdChbZm9udC1zaXplXSkgewogIC8vICAgZm9udC1zaXplOiAke2kuZ2FudHRGb250U2l6ZX07CiAgLy8gfQoKICAudGFza1RleHRPdXRzaWRlUmlnaHQgewogICAgZmlsbDogJHtpLnRhc2tUZXh0RGFya0NvbG9yfTsKICAgIHRleHQtYW5jaG9yOiBzdGFydDsKICAgIC8vIGZvbnQtc2l6ZTogJHtpLmdhbnR0Rm9udFNpemV9OwogICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5KTsKCiAgfQoKICAudGFza1RleHRPdXRzaWRlTGVmdCB7CiAgICBmaWxsOiAke2kudGFza1RleHREYXJrQ29sb3J9OwogICAgdGV4dC1hbmNob3I6IGVuZDsKICAgIC8vIGZvbnQtc2l6ZTogJHtpLmdhbnR0Rm9udFNpemV9OwogIH0KCiAgLyogU3BlY2lhbCBjYXNlIGNsaWNrYWJsZSAqLwogIC50YXNrLmNsaWNrYWJsZSB7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgfQogIC50YXNrVGV4dC5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZmlsbDogJHtpLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3J9ICFpbXBvcnRhbnQ7CiAgICBmb250LXdlaWdodDogYm9sZDsKICB9CgogIC50YXNrVGV4dE91dHNpZGVMZWZ0LmNsaWNrYWJsZSB7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmaWxsOiAke2kudGFza1RleHRDbGlja2FibGVDb2xvcn0gIWltcG9ydGFudDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogIH0KCiAgLnRhc2tUZXh0T3V0c2lkZVJpZ2h0LmNsaWNrYWJsZSB7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmaWxsOiAke2kudGFza1RleHRDbGlja2FibGVDb2xvcn0gIWltcG9ydGFudDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogIH0KCiAgLyogU3BlY2lmaWMgdGFzayBzZXR0aW5ncyBmb3IgdGhlIHNlY3Rpb25zKi8KCiAgLnRhc2tUZXh0MCwKICAudGFza1RleHQxLAogIC50YXNrVGV4dDIsCiAgLnRhc2tUZXh0MyB7CiAgICBmaWxsOiAke2kudGFza1RleHRDb2xvcn07CiAgfQoKICAudGFzazAsCiAgLnRhc2sxLAogIC50YXNrMiwKICAudGFzazMgewogICAgZmlsbDogJHtpLnRhc2tCa2dDb2xvcn07CiAgICBzdHJva2U6ICR7aS50YXNrQm9yZGVyQ29sb3J9OwogIH0KCiAgLnRhc2tUZXh0T3V0c2lkZTAsCiAgLnRhc2tUZXh0T3V0c2lkZTIKICB7CiAgICBmaWxsOiAke2kudGFza1RleHRPdXRzaWRlQ29sb3J9OwogIH0KCiAgLnRhc2tUZXh0T3V0c2lkZTEsCiAgLnRhc2tUZXh0T3V0c2lkZTMgewogICAgZmlsbDogJHtpLnRhc2tUZXh0T3V0c2lkZUNvbG9yfTsKICB9CgoKICAvKiBBY3RpdmUgdGFzayAqLwoKICAuYWN0aXZlMCwKICAuYWN0aXZlMSwKICAuYWN0aXZlMiwKICAuYWN0aXZlMyB7CiAgICBmaWxsOiAke2kuYWN0aXZlVGFza0JrZ0NvbG9yfTsKICAgIHN0cm9rZTogJHtpLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcn07CiAgfQoKICAuYWN0aXZlVGV4dDAsCiAgLmFjdGl2ZVRleHQxLAogIC5hY3RpdmVUZXh0MiwKICAuYWN0aXZlVGV4dDMgewogICAgZmlsbDogJHtpLnRhc2tUZXh0RGFya0NvbG9yfSAhaW1wb3J0YW50OwogIH0KCgogIC8qIENvbXBsZXRlZCB0YXNrICovCgogIC5kb25lMCwKICAuZG9uZTEsCiAgLmRvbmUyLAogIC5kb25lMyB7CiAgICBzdHJva2U6ICR7aS5kb25lVGFza0JvcmRlckNvbG9yfTsKICAgIGZpbGw6ICR7aS5kb25lVGFza0JrZ0NvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogMjsKICB9CgogIC5kb25lVGV4dDAsCiAgLmRvbmVUZXh0MSwKICAuZG9uZVRleHQyLAogIC5kb25lVGV4dDMgewogICAgZmlsbDogJHtpLnRhc2tUZXh0RGFya0NvbG9yfSAhaW1wb3J0YW50OwogIH0KCgogIC8qIFRhc2tzIG9uIHRoZSBjcml0aWNhbCBsaW5lICovCgogIC5jcml0MCwKICAuY3JpdDEsCiAgLmNyaXQyLAogIC5jcml0MyB7CiAgICBzdHJva2U6ICR7aS5jcml0Qm9yZGVyQ29sb3J9OwogICAgZmlsbDogJHtpLmNyaXRCa2dDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDI7CiAgfQoKICAuYWN0aXZlQ3JpdDAsCiAgLmFjdGl2ZUNyaXQxLAogIC5hY3RpdmVDcml0MiwKICAuYWN0aXZlQ3JpdDMgewogICAgc3Ryb2tlOiAke2kuY3JpdEJvcmRlckNvbG9yfTsKICAgIGZpbGw6ICR7aS5hY3RpdmVUYXNrQmtnQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAyOwogIH0KCiAgLmRvbmVDcml0MCwKICAuZG9uZUNyaXQxLAogIC5kb25lQ3JpdDIsCiAgLmRvbmVDcml0MyB7CiAgICBzdHJva2U6ICR7aS5jcml0Qm9yZGVyQ29sb3J9OwogICAgZmlsbDogJHtpLmRvbmVUYXNrQmtnQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgc2hhcGUtcmVuZGVyaW5nOiBjcmlzcEVkZ2VzOwogIH0KCiAgLm1pbGVzdG9uZSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZykgc2NhbGUoMC44LDAuOCk7CiAgfQoKICAubWlsZXN0b25lVGV4dCB7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgfQogIC5kb25lQ3JpdFRleHQwLAogIC5kb25lQ3JpdFRleHQxLAogIC5kb25lQ3JpdFRleHQyLAogIC5kb25lQ3JpdFRleHQzIHsKICAgIGZpbGw6ICR7aS50YXNrVGV4dERhcmtDb2xvcn0gIWltcG9ydGFudDsKICB9CgogIC5hY3RpdmVDcml0VGV4dDAsCiAgLmFjdGl2ZUNyaXRUZXh0MSwKICAuYWN0aXZlQ3JpdFRleHQyLAogIC5hY3RpdmVDcml0VGV4dDMgewogICAgZmlsbDogJHtpLnRhc2tUZXh0RGFya0NvbG9yfSAhaW1wb3J0YW50OwogIH0KCiAgLnRpdGxlVGV4dCB7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogICAgZm9udC1zaXplOiAxOHB4OwogICAgZmlsbDogJHtpLnRleHRDb2xvcn0gICAgOwogICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5KTsKICB9CmB9fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBLMHQ9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihtLGIsRSxDKXtmb3IoRT1FfHx7fSxDPW0ubGVuZ3RoO0MtLTtFW21bQ11dPWIpO3JldHVybiBFfSxhPVs2LDksMTBdLGY9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGluZm86NCxkb2N1bWVudDo1LEVPRjo2LGxpbmU6NyxzdGF0ZW1lbnQ6OCxOTDo5LHNob3dJbmZvOjEwLCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJpbmZvIiw2OiJFT0YiLDk6Ik5MIiwxMDoic2hvd0luZm8ifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzUsMF0sWzUsMl0sWzcsMV0sWzcsMV0sWzgsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oYixFLEMsQSxQLEYsail7c3dpdGNoKEYubGVuZ3RoLTEsUCl7Y2FzZSAxOnJldHVybiBBO2Nhc2UgNDpicmVhaztjYXNlIDY6QS5zZXRJbmZvKCEwKTticmVha319LHRhYmxlOlt7MzoxLDQ6WzEsMl19LHsxOlszXX0saShhLFsyLDJdLHs1OjN9KSx7NjpbMSw0XSw3OjUsODo2LDk6WzEsN10sMTA6WzEsOF19LHsxOlsyLDFdfSxpKGEsWzIsM10pLGkoYSxbMiw0XSksaShhLFsyLDVdKSxpKGEsWzIsNl0pXSxkZWZhdWx0QWN0aW9uczp7NDpbMiwxXX0scGFyc2VFcnJvcjpmdW5jdGlvbihiLEUpe2lmKEUucmVjb3ZlcmFibGUpdGhpcy50cmFjZShiKTtlbHNle3ZhciBDPW5ldyBFcnJvcihiKTt0aHJvdyBDLmhhc2g9RSxDfX0scGFyc2U6ZnVuY3Rpb24oYil7dmFyIEU9dGhpcyxDPVswXSxBPVtdLFA9W251bGxdLEY9W10saj10aGlzLnRhYmxlLFI9IiIsSD0wLFk9MCxydD0yLEo9MSxpdD1GLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLGZ0PU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksVHQ9e3l5Ont9fTtmb3IodmFyIGt0IGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksa3QpJiYoVHQueXlba3RdPXRoaXMueXlba3RdKTtmdC5zZXRJbnB1dChiLFR0Lnl5KSxUdC55eS5sZXhlcj1mdCxUdC55eS5wYXJzZXI9dGhpcyx0eXBlb2YgZnQueXlsbG9jPiJ1IiYmKGZ0Lnl5bGxvYz17fSk7dmFyIG10PWZ0Lnl5bGxvYztGLnB1c2gobXQpO3ZhciBjdD1mdC5vcHRpb25zJiZmdC5vcHRpb25zLnJhbmdlczt0eXBlb2YgVHQueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9VHQueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24geXQoKXt2YXIgUnQ7cmV0dXJuIFJ0PUEucG9wKCl8fGZ0LmxleCgpfHxKLHR5cGVvZiBSdCE9Im51bWJlciImJihSdCBpbnN0YW5jZW9mIEFycmF5JiYoQT1SdCxSdD1BLnBvcCgpKSxSdD1FLnN5bWJvbHNfW1J0XXx8UnQpLFJ0fWZvcih2YXIgc3QseHQsaHQsZHQsQ3Q9e30sdHQsUHQscHQsRnQ7Oyl7aWYoeHQ9Q1tDLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW3h0XT9odD10aGlzLmRlZmF1bHRBY3Rpb25zW3h0XTooKHN0PT09bnVsbHx8dHlwZW9mIHN0PiJ1IikmJihzdD15dCgpKSxodD1qW3h0XSYmalt4dF1bc3RdKSx0eXBlb2YgaHQ+InUifHwhaHQubGVuZ3RofHwhaHRbMF0pe3ZhciBYPSIiO0Z0PVtdO2Zvcih0dCBpbiBqW3h0XSl0aGlzLnRlcm1pbmFsc19bdHRdJiZ0dD5ydCYmRnQucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW3R0XSsiJyIpO2Z0LnNob3dQb3NpdGlvbj9YPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKEgrMSkrYDoKYCtmdC5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK0Z0LmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bc3RdfHxzdCkrIiciOlg9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoSCsxKSsiOiBVbmV4cGVjdGVkICIrKHN0PT1KPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW3N0XXx8c3QpKyInIiksdGhpcy5wYXJzZUVycm9yKFgse3RleHQ6ZnQubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3N0XXx8c3QsbGluZTpmdC55eWxpbmVubyxsb2M6bXQsZXhwZWN0ZWQ6RnR9KX1pZihodFswXWluc3RhbmNlb2YgQXJyYXkmJmh0Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIreHQrIiwgdG9rZW46ICIrc3QpO3N3aXRjaChodFswXSl7Y2FzZSAxOkMucHVzaChzdCksUC5wdXNoKGZ0Lnl5dGV4dCksRi5wdXNoKGZ0Lnl5bGxvYyksQy5wdXNoKGh0WzFdKSxzdD1udWxsLFk9ZnQueXlsZW5nLFI9ZnQueXl0ZXh0LEg9ZnQueXlsaW5lbm8sbXQ9ZnQueXlsbG9jO2JyZWFrO2Nhc2UgMjppZihQdD10aGlzLnByb2R1Y3Rpb25zX1todFsxXV1bMV0sQ3QuJD1QW1AubGVuZ3RoLVB0XSxDdC5fJD17Zmlyc3RfbGluZTpGW0YubGVuZ3RoLShQdHx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOkZbRi5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpGW0YubGVuZ3RoLShQdHx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpGW0YubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxjdCYmKEN0Ll8kLnJhbmdlPVtGW0YubGVuZ3RoLShQdHx8MSldLnJhbmdlWzBdLEZbRi5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxkdD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoQ3QsW1IsWSxILFR0Lnl5LGh0WzFdLFAsRl0uY29uY2F0KGl0KSksdHlwZW9mIGR0PCJ1IilyZXR1cm4gZHQ7UHQmJihDPUMuc2xpY2UoMCwtMSpQdCoyKSxQPVAuc2xpY2UoMCwtMSpQdCksRj1GLnNsaWNlKDAsLTEqUHQpKSxDLnB1c2godGhpcy5wcm9kdWN0aW9uc19baHRbMV1dWzBdKSxQLnB1c2goQ3QuJCksRi5wdXNoKEN0Ll8kKSxwdD1qW0NbQy5sZW5ndGgtMl1dW0NbQy5sZW5ndGgtMV1dLEMucHVzaChwdCk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LHA9ZnVuY3Rpb24oKXt2YXIgbT17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihFLEMpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoRSxDKTtlbHNlIHRocm93IG5ldyBFcnJvcihFKX0sc2V0SW5wdXQ6ZnVuY3Rpb24oYixFKXtyZXR1cm4gdGhpcy55eT1FfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1iLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1iLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1iLHRoaXMubWF0Y2hlZCs9Yjt2YXIgRT1iLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gRT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksYn0sdW5wdXQ6ZnVuY3Rpb24oYil7dmFyIEU9Yi5sZW5ndGgsQz1iLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9Yit0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtRSksdGhpcy5vZmZzZXQtPUU7dmFyIEE9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksQy5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPUMubGVuZ3RoLTEpO3ZhciBQPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpDPyhDLmxlbmd0aD09PUEubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStBW0EubGVuZ3RoLUMubGVuZ3RoXS5sZW5ndGgtQ1swXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLUV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bUFswXSxQWzBdK3RoaXMueXlsZW5nLUVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihiKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoYikpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKGIubGVuZ3RoPjIwPyIuLi4iOiIiKStiLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5tYXRjaDtyZXR1cm4gYi5sZW5ndGg8MjAmJihiKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1iLmxlbmd0aCkpLChiLnN1YnN0cigwLDIwKSsoYi5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wYXN0SW5wdXQoKSxFPW5ldyBBcnJheShiLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIGIrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK0UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKGIsRSl7dmFyIEMsQSxQO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihQPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKFAueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksQT1iWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxBJiYodGhpcy55eWxpbmVubys9QS5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpBP0FbQS5sZW5ndGgtMV0ubGVuZ3RoLUFbQS5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitiWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPWJbMF0sdGhpcy5tYXRjaCs9YlswXSx0aGlzLm1hdGNoZXM9Yix0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShiWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1iWzBdLEM9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsRSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxDKXJldHVybiBDO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBGIGluIFApdGhpc1tGXT1QW0ZdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIGIsRSxDLEE7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgUD10aGlzLl9jdXJyZW50UnVsZXMoKSxGPTA7RjxQLmxlbmd0aDtGKyspaWYoQz10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW1BbRl1dKSxDJiYoIUV8fENbMF0ubGVuZ3RoPkVbMF0ubGVuZ3RoKSl7aWYoRT1DLEE9Rix0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihiPXRoaXMudGVzdF9tYXRjaChDLFBbRl0pLGIhPT0hMSlyZXR1cm4gYjtpZih0aGlzLl9iYWNrdHJhY2spe0U9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gRT8oYj10aGlzLnRlc3RfbWF0Y2goRSxQW0FdKSxiIT09ITE/YjohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIEU9dGhpcy5uZXh0KCk7cmV0dXJuIEV8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKEUpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChFKX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgRT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBFPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oRSl7cmV0dXJuIEU9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhFfHwwKSxFPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbRV06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24oRSl7dGhpcy5iZWdpbihFKX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihFLEMsQSxQKXtzd2l0Y2goQSl7Y2FzZSAwOnJldHVybiA0O2Nhc2UgMTpyZXR1cm4gOTtjYXNlIDI6cmV0dXJuInNwYWNlIjtjYXNlIDM6cmV0dXJuIDEwO2Nhc2UgNDpyZXR1cm4gNjtjYXNlIDU6cmV0dXJuIlRYVCJ9fSxydWxlczpbL14oPzppbmZvXGIpL2ksL14oPzpbXHNcblxyXSspL2ksL14oPzpbXHNdKykvaSwvXig/OnNob3dJbmZvXGIpL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7SU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIG19KCk7Zi5sZXhlcj1wO2Z1bmN0aW9uIHYoKXt0aGlzLnl5PXt9fXJldHVybiB2LnByb3RvdHlwZT1mLGYuUGFyc2VyPXYsbmV3IHZ9KCk7SzB0LnBhcnNlcj1LMHQ7Y29uc3QgbXFlPUswdCxvUnQ9e2luZm86ITF9O2xldCBZMHQ9b1J0LmluZm87Y29uc3QgeXFlPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6bXFlLGRiOntjbGVhcjooKT0+e1kwdD1vUnQuaW5mb30sc2V0SW5mbzppPT57WTB0PWl9LGdldEluZm86KCk9PlkwdH0scmVuZGVyZXI6e2RyYXc6KGksYSxmKT0+e1d0LmRlYnVnKGByZW5kZXJpbmcgaW5mbyBkaWFncmFtCmAraSk7Y29uc3QgcD1sZHQoYSk7b2cocCwxMDAsNDAwLCEwKSxwLmFwcGVuZCgiZyIpLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDEwMCkuYXR0cigieSIsNDApLmF0dHIoImNsYXNzIiwidmVyc2lvbiIpLmF0dHIoImZvbnQtc2l6ZSIsMzIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoYHYke2Z9YCl9fX19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIFgwdD1mdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKG10LGN0LHl0LHN0KXtmb3IoeXQ9eXR8fHt9LHN0PW10Lmxlbmd0aDtzdC0tO3l0W210W3N0XV09Y3QpO3JldHVybiB5dH0sYT1bMSw0XSxmPVsxLDVdLHA9WzEsNl0sdj1bMSw3XSxtPVsxLDldLGI9WzEsMTEsMTMsMTUsMTcsMTksMjAsMjYsMjcsMjgsMjldLEU9WzIsNV0sQz1bMSw2LDExLDEzLDE1LDE3LDE5LDIwLDI2LDI3LDI4LDI5XSxBPVsyNiwyNywyOF0sUD1bMiw4XSxGPVsxLDE4XSxqPVsxLDE5XSxSPVsxLDIwXSxIPVsxLDIxXSxZPVsxLDIyXSxydD1bMSwyM10sSj1bMSwyOF0saXQ9WzYsMjYsMjcsMjgsMjldLGZ0PXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6Myxlb2w6NCxkaXJlY3RpdmU6NSxQSUU6Nixkb2N1bWVudDo3LHNob3dEYXRhOjgsbGluZTo5LHN0YXRlbWVudDoxMCx0eHQ6MTEsdmFsdWU6MTIsdGl0bGU6MTMsdGl0bGVfdmFsdWU6MTQsYWNjX3RpdGxlOjE1LGFjY190aXRsZV92YWx1ZToxNixhY2NfZGVzY3I6MTcsYWNjX2Rlc2NyX3ZhbHVlOjE4LGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MTksc2VjdGlvbjoyMCxvcGVuRGlyZWN0aXZlOjIxLHR5cGVEaXJlY3RpdmU6MjIsY2xvc2VEaXJlY3RpdmU6MjMsIjoiOjI0LGFyZ0RpcmVjdGl2ZToyNSxORVdMSU5FOjI2LCI7IjoyNyxFT0Y6Mjgsb3Blbl9kaXJlY3RpdmU6MjksdHlwZV9kaXJlY3RpdmU6MzAsYXJnX2RpcmVjdGl2ZTozMSxjbG9zZV9kaXJlY3RpdmU6MzIsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDY6IlBJRSIsODoic2hvd0RhdGEiLDExOiJ0eHQiLDEyOiJ2YWx1ZSIsMTM6InRpdGxlIiwxNDoidGl0bGVfdmFsdWUiLDE1OiJhY2NfdGl0bGUiLDE2OiJhY2NfdGl0bGVfdmFsdWUiLDE3OiJhY2NfZGVzY3IiLDE4OiJhY2NfZGVzY3JfdmFsdWUiLDE5OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwyMDoic2VjdGlvbiIsMjQ6IjoiLDI2OiJORVdMSU5FIiwyNzoiOyIsMjg6IkVPRiIsMjk6Im9wZW5fZGlyZWN0aXZlIiwzMDoidHlwZV9kaXJlY3RpdmUiLDMxOiJhcmdfZGlyZWN0aXZlIiwzMjoiY2xvc2VfZGlyZWN0aXZlIn0scHJvZHVjdGlvbnNfOlswLFszLDJdLFszLDJdLFszLDJdLFszLDNdLFs3LDBdLFs3LDJdLFs5LDJdLFsxMCwwXSxbMTAsMl0sWzEwLDJdLFsxMCwyXSxbMTAsMl0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzUsM10sWzUsNV0sWzQsMV0sWzQsMV0sWzQsMV0sWzIxLDFdLFsyMiwxXSxbMjUsMV0sWzIzLDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKGN0LHl0LHN0LHh0LGh0LGR0LEN0KXt2YXIgdHQ9ZHQubGVuZ3RoLTE7c3dpdGNoKGh0KXtjYXNlIDQ6eHQuc2V0U2hvd0RhdGEoITApO2JyZWFrO2Nhc2UgNzp0aGlzLiQ9ZHRbdHQtMV07YnJlYWs7Y2FzZSA5Onh0LmFkZFNlY3Rpb24oZHRbdHQtMV0seHQuY2xlYW51cFZhbHVlKGR0W3R0XSkpO2JyZWFrO2Nhc2UgMTA6dGhpcy4kPWR0W3R0XS50cmltKCkseHQuc2V0RGlhZ3JhbVRpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAxMTp0aGlzLiQ9ZHRbdHRdLnRyaW0oKSx4dC5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMTI6Y2FzZSAxMzp0aGlzLiQ9ZHRbdHRdLnRyaW0oKSx4dC5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgMTQ6eHQuYWRkU2VjdGlvbihkdFt0dF0uc3Vic3RyKDgpKSx0aGlzLiQ9ZHRbdHRdLnN1YnN0cig4KTticmVhaztjYXNlIDIxOnh0LnBhcnNlRGlyZWN0aXZlKCIlJXsiLCJvcGVuX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMjI6eHQucGFyc2VEaXJlY3RpdmUoZHRbdHRdLCJ0eXBlX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMjM6ZHRbdHRdPWR0W3R0XS50cmltKCkucmVwbGFjZSgvJy9nLCciJykseHQucGFyc2VEaXJlY3RpdmUoZHRbdHRdLCJhcmdfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAyNDp4dC5wYXJzZURpcmVjdGl2ZSgifSUlIiwiY2xvc2VfZGlyZWN0aXZlIiwicGllIik7YnJlYWt9fSx0YWJsZTpbezM6MSw0OjIsNTozLDY6YSwyMTo4LDI2OmYsMjc6cCwyODp2LDI5Om19LHsxOlszXX0sezM6MTAsNDoyLDU6Myw2OmEsMjE6OCwyNjpmLDI3OnAsMjg6diwyOTptfSx7MzoxMSw0OjIsNTozLDY6YSwyMTo4LDI2OmYsMjc6cCwyODp2LDI5Om19LGkoYixFLHs3OjEyLDg6WzEsMTNdfSksaShDLFsyLDE4XSksaShDLFsyLDE5XSksaShDLFsyLDIwXSksezIyOjE0LDMwOlsxLDE1XX0sezMwOlsyLDIxXX0sezE6WzIsMV19LHsxOlsyLDJdfSxpKEEsUCx7MjE6OCw5OjE2LDEwOjE3LDU6MjQsMTpbMiwzXSwxMTpGLDEzOmosMTU6UiwxNzpILDE5OlksMjA6cnQsMjk6bX0pLGkoYixFLHs3OjI1fSksezIzOjI2LDI0OlsxLDI3XSwzMjpKfSxpKFsyNCwzMl0sWzIsMjJdKSxpKGIsWzIsNl0pLHs0OjI5LDI2OmYsMjc6cCwyODp2fSx7MTI6WzEsMzBdfSx7MTQ6WzEsMzFdfSx7MTY6WzEsMzJdfSx7MTg6WzEsMzNdfSxpKEEsWzIsMTNdKSxpKEEsWzIsMTRdKSxpKEEsWzIsMTVdKSxpKEEsUCx7MjE6OCw5OjE2LDEwOjE3LDU6MjQsMTpbMiw0XSwxMTpGLDEzOmosMTU6UiwxNzpILDE5OlksMjA6cnQsMjk6bX0pLGkoaXQsWzIsMTZdKSx7MjU6MzQsMzE6WzEsMzVdfSxpKGl0LFsyLDI0XSksaShiLFsyLDddKSxpKEEsWzIsOV0pLGkoQSxbMiwxMF0pLGkoQSxbMiwxMV0pLGkoQSxbMiwxMl0pLHsyMzozNiwzMjpKfSx7MzI6WzIsMjNdfSxpKGl0LFsyLDE3XSldLGRlZmF1bHRBY3Rpb25zOns5OlsyLDIxXSwxMDpbMiwxXSwxMTpbMiwyXSwzNTpbMiwyM119LHBhcnNlRXJyb3I6ZnVuY3Rpb24oY3QseXQpe2lmKHl0LnJlY292ZXJhYmxlKXRoaXMudHJhY2UoY3QpO2Vsc2V7dmFyIHN0PW5ldyBFcnJvcihjdCk7dGhyb3cgc3QuaGFzaD15dCxzdH19LHBhcnNlOmZ1bmN0aW9uKGN0KXt2YXIgeXQ9dGhpcyxzdD1bMF0seHQ9W10saHQ9W251bGxdLGR0PVtdLEN0PXRoaXMudGFibGUsdHQ9IiIsUHQ9MCxwdD0wLEZ0PTIsWD0xLFJ0PWR0LnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLEJ0PU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksdnQ9e3l5Ont9fTtmb3IodmFyIE90IGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksT3QpJiYodnQueXlbT3RdPXRoaXMueXlbT3RdKTtCdC5zZXRJbnB1dChjdCx2dC55eSksdnQueXkubGV4ZXI9QnQsdnQueXkucGFyc2VyPXRoaXMsdHlwZW9mIEJ0Lnl5bGxvYz4idSImJihCdC55eWxsb2M9e30pO3ZhciBWdD1CdC55eWxsb2M7ZHQucHVzaChWdCk7dmFyIHFlPUJ0Lm9wdGlvbnMmJkJ0Lm9wdGlvbnMucmFuZ2VzO3R5cGVvZiB2dC55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj12dC55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBfbigpe3ZhciB5ZTtyZXR1cm4geWU9eHQucG9wKCl8fEJ0LmxleCgpfHxYLHR5cGVvZiB5ZSE9Im51bWJlciImJih5ZSBpbnN0YW5jZW9mIEFycmF5JiYoeHQ9eWUseWU9eHQucG9wKCkpLHllPXl0LnN5bWJvbHNfW3llXXx8eWUpLHllfWZvcih2YXIgVGUsV24sQWUsbmUsa2U9e30sVmUsRWUsSGUsQ2U7Oyl7aWYoV249c3Rbc3QubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbV25dP0FlPXRoaXMuZGVmYXVsdEFjdGlvbnNbV25dOigoVGU9PT1udWxsfHx0eXBlb2YgVGU+InUiKSYmKFRlPV9uKCkpLEFlPUN0W1duXSYmQ3RbV25dW1RlXSksdHlwZW9mIEFlPiJ1Inx8IUFlLmxlbmd0aHx8IUFlWzBdKXt2YXIgJGU9IiI7Q2U9W107Zm9yKFZlIGluIEN0W1duXSl0aGlzLnRlcm1pbmFsc19bVmVdJiZWZT5GdCYmQ2UucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW1ZlXSsiJyIpO0J0LnNob3dQb3NpdGlvbj8kZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhQdCsxKStgOgpgK0J0LnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArQ2Uuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tUZV18fFRlKSsiJyI6JGU9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoUHQrMSkrIjogVW5leHBlY3RlZCAiKyhUZT09WD8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tUZV18fFRlKSsiJyIpLHRoaXMucGFyc2VFcnJvcigkZSx7dGV4dDpCdC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bVGVdfHxUZSxsaW5lOkJ0Lnl5bGluZW5vLGxvYzpWdCxleHBlY3RlZDpDZX0pfWlmKEFlWzBdaW5zdGFuY2VvZiBBcnJheSYmQWUubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitXbisiLCB0b2tlbjogIitUZSk7c3dpdGNoKEFlWzBdKXtjYXNlIDE6c3QucHVzaChUZSksaHQucHVzaChCdC55eXRleHQpLGR0LnB1c2goQnQueXlsbG9jKSxzdC5wdXNoKEFlWzFdKSxUZT1udWxsLHB0PUJ0Lnl5bGVuZyx0dD1CdC55eXRleHQsUHQ9QnQueXlsaW5lbm8sVnQ9QnQueXlsbG9jO2JyZWFrO2Nhc2UgMjppZihFZT10aGlzLnByb2R1Y3Rpb25zX1tBZVsxXV1bMV0sa2UuJD1odFtodC5sZW5ndGgtRWVdLGtlLl8kPXtmaXJzdF9saW5lOmR0W2R0Lmxlbmd0aC0oRWV8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpkdFtkdC5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpkdFtkdC5sZW5ndGgtKEVlfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmR0W2R0Lmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0scWUmJihrZS5fJC5yYW5nZT1bZHRbZHQubGVuZ3RoLShFZXx8MSldLnJhbmdlWzBdLGR0W2R0Lmxlbmd0aC0xXS5yYW5nZVsxXV0pLG5lPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShrZSxbdHQscHQsUHQsdnQueXksQWVbMV0saHQsZHRdLmNvbmNhdChSdCkpLHR5cGVvZiBuZTwidSIpcmV0dXJuIG5lO0VlJiYoc3Q9c3Quc2xpY2UoMCwtMSpFZSoyKSxodD1odC5zbGljZSgwLC0xKkVlKSxkdD1kdC5zbGljZSgwLC0xKkVlKSksc3QucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tBZVsxXV1bMF0pLGh0LnB1c2goa2UuJCksZHQucHVzaChrZS5fJCksSGU9Q3Rbc3Rbc3QubGVuZ3RoLTJdXVtzdFtzdC5sZW5ndGgtMV1dLHN0LnB1c2goSGUpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxUdD1mdW5jdGlvbigpe3ZhciBtdD17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih5dCxzdCl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih5dCxzdCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoeXQpfSxzZXRJbnB1dDpmdW5jdGlvbihjdCx5dCl7cmV0dXJuIHRoaXMueXk9eXR8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PWN0LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBjdD10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9Y3QsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPWN0LHRoaXMubWF0Y2hlZCs9Y3Q7dmFyIHl0PWN0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4geXQ/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLGN0fSx1bnB1dDpmdW5jdGlvbihjdCl7dmFyIHl0PWN0Lmxlbmd0aCxzdD1jdC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PWN0K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC15dCksdGhpcy5vZmZzZXQtPXl0O3ZhciB4dD10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxzdC5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPXN0Lmxlbmd0aC0xKTt2YXIgaHQ9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnN0PyhzdC5sZW5ndGg9PT14dC5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3h0W3h0Lmxlbmd0aC1zdC5sZW5ndGhdLmxlbmd0aC1zdFswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLXl0fSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2h0WzBdLGh0WzBdK3RoaXMueXlsZW5nLXl0XSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24oY3Qpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShjdCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgY3Q9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihjdC5sZW5ndGg+MjA/Ii4uLiI6IiIpK2N0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIGN0PXRoaXMubWF0Y2g7cmV0dXJuIGN0Lmxlbmd0aDwyMCYmKGN0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1jdC5sZW5ndGgpKSwoY3Quc3Vic3RyKDAsMjApKyhjdC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGN0PXRoaXMucGFzdElucHV0KCkseXQ9bmV3IEFycmF5KGN0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIGN0K3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCt5dCsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oY3QseXQpe3ZhciBzdCx4dCxodDtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoaHQ9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoaHQueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSkseHQ9Y3RbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLHh0JiYodGhpcy55eWxpbmVubys9eHQubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46eHQ/eHRbeHQubGVuZ3RoLTFdLmxlbmd0aC14dFt4dC5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitjdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1jdFswXSx0aGlzLm1hdGNoKz1jdFswXSx0aGlzLm1hdGNoZXM9Y3QsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoY3RbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPWN0WzBdLHN0PXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLHl0LHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLHN0KXJldHVybiBzdDtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgZHQgaW4gaHQpdGhpc1tkdF09aHRbZHRdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIGN0LHl0LHN0LHh0O3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGh0PXRoaXMuX2N1cnJlbnRSdWxlcygpLGR0PTA7ZHQ8aHQubGVuZ3RoO2R0KyspaWYoc3Q9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1todFtkdF1dKSxzdCYmKCF5dHx8c3RbMF0ubGVuZ3RoPnl0WzBdLmxlbmd0aCkpe2lmKHl0PXN0LHh0PWR0LHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKGN0PXRoaXMudGVzdF9tYXRjaChzdCxodFtkdF0pLGN0IT09ITEpcmV0dXJuIGN0O2lmKHRoaXMuX2JhY2t0cmFjayl7eXQ9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4geXQ/KGN0PXRoaXMudGVzdF9tYXRjaCh5dCxodFt4dF0pLGN0IT09ITE/Y3Q6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciB5dD10aGlzLm5leHQoKTtyZXR1cm4geXR8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHl0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goeXQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3ZhciB5dD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiB5dD4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHl0KXtyZXR1cm4geXQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh5dHx8MCkseXQ+PTA/dGhpcy5jb25kaXRpb25TdGFja1t5dF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24oeXQpe3RoaXMuYmVnaW4oeXQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHl0LHN0LHh0LGh0KXtzd2l0Y2goeHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigib3Blbl9kaXJlY3RpdmUiKSwyOTtjYXNlIDE6cmV0dXJuIHRoaXMuYmVnaW4oInR5cGVfZGlyZWN0aXZlIiksMzA7Y2FzZSAyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiYXJnX2RpcmVjdGl2ZSIpLDI0O2Nhc2UgMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSwzMjtjYXNlIDQ6cmV0dXJuIDMxO2Nhc2UgNTpicmVhaztjYXNlIDY6YnJlYWs7Y2FzZSA3OnJldHVybiAyNjtjYXNlIDg6YnJlYWs7Y2FzZSA5OmJyZWFrO2Nhc2UgMTA6cmV0dXJuIHRoaXMuYmVnaW4oInRpdGxlIiksMTM7Y2FzZSAxMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJ0aXRsZV92YWx1ZSI7Y2FzZSAxMjpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMTU7Y2FzZSAxMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2Nhc2UgMTQ6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDE3O2Nhc2UgMTU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDE2OnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDE3OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE4OnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDE5OnRoaXMuYmVnaW4oInN0cmluZyIpO2JyZWFrO2Nhc2UgMjA6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjE6cmV0dXJuInR4dCI7Y2FzZSAyMjpyZXR1cm4gNjtjYXNlIDIzOnJldHVybiA4O2Nhc2UgMjQ6cmV0dXJuInZhbHVlIjtjYXNlIDI1OnJldHVybiAyOH19LHJ1bGVzOlsvXig/OiUlXHspL2ksL14oPzooKD86KD8hXH0lJSlbXjouXSkqKSkvaSwvXig/OjopL2ksL14oPzpcfSUlKS9pLC9eKD86KCg/Oig/IVx9JSUpLnxcbikqKSkvaSwvXig/OiUlKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/OltcblxyXSspL2ksL14oPzolJVteXG5dKikvaSwvXig/Oltcc10rKS9pLC9eKD86dGl0bGVcYikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpwaWVcYikvaSwvXig/OnNob3dEYXRhXGIpL2ksL14oPzo6W1xzXSpbXGRdKyg/OlwuW1xkXSspPykvaSwvXig/OiQpL2ldLGNvbmRpdGlvbnM6e2FjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlsxNywxOF0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOlsxNV0saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOlsxM10saW5jbHVzaXZlOiExfSxjbG9zZV9kaXJlY3RpdmU6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sYXJnX2RpcmVjdGl2ZTp7cnVsZXM6WzMsNF0saW5jbHVzaXZlOiExfSx0eXBlX2RpcmVjdGl2ZTp7cnVsZXM6WzIsM10saW5jbHVzaXZlOiExfSxvcGVuX2RpcmVjdGl2ZTp7cnVsZXM6WzFdLGluY2x1c2l2ZTohMX0sdGl0bGU6e3J1bGVzOlsxMV0saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOlsyMCwyMV0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCw1LDYsNyw4LDksMTAsMTIsMTQsMTYsMTksMjIsMjMsMjQsMjVdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gbXR9KCk7ZnQubGV4ZXI9VHQ7ZnVuY3Rpb24ga3QoKXt0aGlzLnl5PXt9fXJldHVybiBrdC5wcm90b3R5cGU9ZnQsZnQuUGFyc2VyPWt0LG5ldyBrdH0oKTtYMHQucGFyc2VyPVgwdDtjb25zdCB4cWU9WDB0LGNSdD1JZi5waWUsQUs9e3NlY3Rpb25zOnt9LHNob3dEYXRhOiExLGNvbmZpZzpjUnR9O2xldCBMSz1BSy5zZWN0aW9ucyxRMHQ9QUsuc2hvd0RhdGE7Y29uc3Qga3FlPXN0cnVjdHVyZWRDbG9uZShjUnQpLEVxZT17Z2V0Q29uZmlnOigpPT5zdHJ1Y3R1cmVkQ2xvbmUoa3FlKSxwYXJzZURpcmVjdGl2ZTooaSxhLGYpPT57Rlcodm9pZCAwLGksYSxmKX0sY2xlYXI6KCk9PntMSz1zdHJ1Y3R1cmVkQ2xvbmUoQUsuc2VjdGlvbnMpLFEwdD1BSy5zaG93RGF0YSxjZygpfSxzZXREaWFncmFtVGl0bGU6TmIsZ2V0RGlhZ3JhbVRpdGxlOmhwLHNldEFjY1RpdGxlOm0wLGdldEFjY1RpdGxlOnVnLHNldEFjY0Rlc2NyaXB0aW9uOmxnLGdldEFjY0Rlc2NyaXB0aW9uOmhnLGFkZFNlY3Rpb246KGksYSk9PntpPXYwKGksRGUoKSksTEtbaV09PT12b2lkIDAmJihMS1tpXT1hLFd0LmRlYnVnKGBhZGRlZCBuZXcgc2VjdGlvbjogJHtpfSwgd2l0aCB2YWx1ZTogJHthfWApKX0sZ2V0U2VjdGlvbnM6KCk9PkxLLGNsZWFudXBWYWx1ZTppPT4oaS5zdWJzdHJpbmcoMCwxKT09PSI6IiYmKGk9aS5zdWJzdHJpbmcoMSkudHJpbSgpKSxOdW1iZXIoaS50cmltKCkpKSxzZXRTaG93RGF0YTppPT57UTB0PWl9LGdldFNob3dEYXRhOigpPT5RMHR9LFRxZT1pPT5gCiAgLnBpZUNpcmNsZXsKICAgIHN0cm9rZTogJHtpLnBpZVN0cm9rZUNvbG9yfTsKICAgIHN0cm9rZS13aWR0aCA6ICR7aS5waWVTdHJva2VXaWR0aH07CiAgICBvcGFjaXR5IDogJHtpLnBpZU9wYWNpdHl9OwogIH0KICAucGllT3V0ZXJDaXJjbGV7CiAgICBzdHJva2U6ICR7aS5waWVPdXRlclN0cm9rZUNvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogJHtpLnBpZU91dGVyU3Ryb2tlV2lkdGh9OwogICAgZmlsbDogbm9uZTsKICB9CiAgLnBpZVRpdGxlVGV4dCB7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogICAgZm9udC1zaXplOiAke2kucGllVGl0bGVUZXh0U2l6ZX07CiAgICBmaWxsOiAke2kucGllVGl0bGVUZXh0Q29sb3J9OwogICAgZm9udC1mYW1pbHk6ICR7aS5mb250RmFtaWx5fTsKICB9CiAgLnNsaWNlIHsKICAgIGZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX07CiAgICBmaWxsOiAke2kucGllU2VjdGlvblRleHRDb2xvcn07CiAgICBmb250LXNpemU6JHtpLnBpZVNlY3Rpb25UZXh0U2l6ZX07CiAgICAvLyBmaWxsOiB3aGl0ZTsKICB9CiAgLmxlZ2VuZCB0ZXh0IHsKICAgIGZpbGw6ICR7aS5waWVMZWdlbmRUZXh0Q29sb3J9OwogICAgZm9udC1mYW1pbHk6ICR7aS5mb250RmFtaWx5fTsKICAgIGZvbnQtc2l6ZTogJHtpLnBpZUxlZ2VuZFRleHRTaXplfTsKICB9CmAsX3FlPWk9Pntjb25zdCBhPU9iamVjdC5lbnRyaWVzKGkpLm1hcChwPT4oe2xhYmVsOnBbMF0sdmFsdWU6cFsxXX0pKTtyZXR1cm4gakVlKCkudmFsdWUocD0+cC52YWx1ZSkoYSl9LENxZT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7cGFyc2VyOnhxZSxkYjpFcWUscmVuZGVyZXI6e2RyYXc6KGksYSxmLHApPT57dmFyIHh0LGh0O1d0LmRlYnVnKGByZW5kZXJpbmcgcGllIGNoYXJ0CmAraSk7Y29uc3Qgdj1wLmRiLG09RGUoKSxiPUhJdCh2LmdldENvbmZpZygpLG0ucGllKSxFPTQ1MCxDPSgoaHQ9KHh0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpKT09bnVsbD92b2lkIDA6eHQucGFyZW50RWxlbWVudCk9PW51bGw/dm9pZCAwOmh0Lm9mZnNldFdpZHRoKT8/Yi51c2VXaWR0aCxBPWxkdChhKTtBLmF0dHIoInZpZXdCb3giLGAwIDAgJHtDfSAke0V9YCksb2coQSxFLEMsYi51c2VNYXhXaWR0aCk7Y29uc3QgUD00MCxGPTE4LGo9NCxSPUEuYXBwZW5kKCJnIik7Ui5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitDLzIrIiwiK0UvMisiKSIpO2NvbnN0e3RoZW1lVmFyaWFibGVzOkh9PW07bGV0W1ldPXpBKEgucGllT3V0ZXJTdHJva2VXaWR0aCk7WT8/KFk9Mik7Y29uc3QgcnQ9Yi50ZXh0UG9zaXRpb24sSj1NYXRoLm1pbihDLEUpLzItUCxpdD1MQSgpLmlubmVyUmFkaXVzKDApLm91dGVyUmFkaXVzKEopLGZ0PUxBKCkuaW5uZXJSYWRpdXMoSipydCkub3V0ZXJSYWRpdXMoSipydCk7Ui5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwwKS5hdHRyKCJjeSIsMCkuYXR0cigiciIsSitZLzIpLmF0dHIoImNsYXNzIiwicGllT3V0ZXJDaXJjbGUiKTtjb25zdCBUdD12LmdldFNlY3Rpb25zKCksa3Q9X3FlKFR0KSxtdD1bSC5waWUxLEgucGllMixILnBpZTMsSC5waWU0LEgucGllNSxILnBpZTYsSC5waWU3LEgucGllOCxILnBpZTksSC5waWUxMCxILnBpZTExLEgucGllMTJdLGN0PUUxdChtdCk7Ui5zZWxlY3RBbGwoIm15U2xpY2VzIikuZGF0YShrdCkuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixpdCkuYXR0cigiZmlsbCIsZHQ9PmN0KGR0LmRhdGEubGFiZWwpKS5hdHRyKCJjbGFzcyIsInBpZUNpcmNsZSIpO2xldCB5dD0wO09iamVjdC5rZXlzKFR0KS5mb3JFYWNoKGR0PT57eXQrPVR0W2R0XX0pLFIuc2VsZWN0QWxsKCJteVNsaWNlcyIpLmRhdGEoa3QpLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikudGV4dChkdD0+KGR0LmRhdGEudmFsdWUveXQqMTAwKS50b0ZpeGVkKDApKyIlIikuYXR0cigidHJhbnNmb3JtIixkdD0+InRyYW5zbGF0ZSgiK2Z0LmNlbnRyb2lkKGR0KSsiKSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImNsYXNzIiwic2xpY2UiKSxSLmFwcGVuZCgidGV4dCIpLnRleHQodi5nZXREaWFncmFtVGl0bGUoKSkuYXR0cigieCIsMCkuYXR0cigieSIsLShFLTUwKS8yKS5hdHRyKCJjbGFzcyIsInBpZVRpdGxlVGV4dCIpO2NvbnN0IHN0PVIuc2VsZWN0QWxsKCIubGVnZW5kIikuZGF0YShjdC5kb21haW4oKSkuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxlZ2VuZCIpLmF0dHIoInRyYW5zZm9ybSIsKGR0LEN0KT0+e2NvbnN0IHR0PUYraixQdD10dCpjdC5kb21haW4oKS5sZW5ndGgvMixwdD0xMipGLEZ0PUN0KnR0LVB0O3JldHVybiJ0cmFuc2xhdGUoIitwdCsiLCIrRnQrIikifSk7c3QuYXBwZW5kKCJyZWN0IikuYXR0cigid2lkdGgiLEYpLmF0dHIoImhlaWdodCIsRikuc3R5bGUoImZpbGwiLGN0KS5zdHlsZSgic3Ryb2tlIixjdCksc3QuZGF0YShrdCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsRitqKS5hdHRyKCJ5IixGLWopLnRleHQoZHQ9Pntjb25zdHtsYWJlbDpDdCx2YWx1ZTp0dH09ZHQuZGF0YTtyZXR1cm4gdi5nZXRTaG93RGF0YSgpP2Ake0N0fSBbJHt0dH1dYDpDdH0pfX0sc3R5bGVzOlRxZX19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIFowdD1mdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKEFlLG5lLGtlLFZlKXtmb3Ioa2U9a2V8fHt9LFZlPUFlLmxlbmd0aDtWZS0tO2tlW0FlW1ZlXV09bmUpO3JldHVybiBrZX0sYT1bMSwzXSxmPVsxLDVdLHA9WzEsNl0sdj1bMSw3XSxtPVsxLDhdLGI9WzEsMTBdLEU9WzEsNSwxNCwxNiwxOCwyMCwyMSwyNiwyOCwyOSwzMCwzMSwzMiwzOCwzOSw0MCw0MSw0Nyw0OCw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MF0sQz1bMSw1LDcsMTQsMTYsMTgsMjAsMjEsMjYsMjgsMjksMzAsMzEsMzIsMzgsMzksNDAsNDEsNDcsNDgsNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjBdLEE9WzM4LDM5LDQwXSxQPVsyLDhdLEY9WzEsMTldLGo9WzEsMjNdLFI9WzEsMjRdLEg9WzEsMjVdLFk9WzEsMjZdLHJ0PVsxLDI3XSxKPVsxLDI5XSxpdD1bMSwzMF0sZnQ9WzEsMzFdLFR0PVsxLDMyXSxrdD1bMSwzM10sbXQ9WzEsMzRdLGN0PVsxLDM3XSx5dD1bMSwzOF0sc3Q9WzEsMzldLHh0PVsxLDQwXSxodD1bMSw0MV0sZHQ9WzEsNDJdLEN0PVsxLDQzXSx0dD1bMSw0NF0sUHQ9WzEsNDVdLHB0PVsxLDQ2XSxGdD1bMSw0N10sWD1bMSw0OF0sUnQ9WzEsNDldLEJ0PVsxLDUyXSx2dD1bMSw2N10sT3Q9WzEsNjhdLFZ0PVs1LDIzLDI3LDM4LDM5LDQwLDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxXSxxZT1bNSw3LDM4LDM5LDQwLDQxXSxfbj17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsZW9sOjQsU1BBQ0U6NSxkaXJlY3RpdmU6NixRVUFEUkFOVDo3LGRvY3VtZW50OjgsbGluZTo5LHN0YXRlbWVudDoxMCxheGlzRGV0YWlsczoxMSxxdWFkcmFudERldGFpbHM6MTIscG9pbnRzOjEzLHRpdGxlOjE0LHRpdGxlX3ZhbHVlOjE1LGFjY190aXRsZToxNixhY2NfdGl0bGVfdmFsdWU6MTcsYWNjX2Rlc2NyOjE4LGFjY19kZXNjcl92YWx1ZToxOSxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjIwLHNlY3Rpb246MjEsdGV4dDoyMixwb2ludF9zdGFydDoyMyxwb2ludF94OjI0LHBvaW50X3k6MjUsIlgtQVhJUyI6MjYsIkFYSVMtVEVYVC1ERUxJTUlURVIiOjI3LCJZLUFYSVMiOjI4LFFVQURSQU5UXzE6MjksUVVBRFJBTlRfMjozMCxRVUFEUkFOVF8zOjMxLFFVQURSQU5UXzQ6MzIsb3BlbkRpcmVjdGl2ZTozMyx0eXBlRGlyZWN0aXZlOjM0LGNsb3NlRGlyZWN0aXZlOjM1LCI6IjozNixhcmdEaXJlY3RpdmU6MzcsTkVXTElORTozOCxTRU1JOjM5LEVPRjo0MCxvcGVuX2RpcmVjdGl2ZTo0MSx0eXBlX2RpcmVjdGl2ZTo0MixhcmdfZGlyZWN0aXZlOjQzLGNsb3NlX2RpcmVjdGl2ZTo0NCxhbHBoYU51bVRva2VuOjQ1LHRleHROb1RhZ3NUb2tlbjo0NixTVFI6NDcsTURfU1RSOjQ4LGFscGhhTnVtOjQ5LFBVTkNUVUFUSU9OOjUwLEFNUDo1MSxOVU06NTIsQUxQSEE6NTMsQ09NTUE6NTQsUExVUzo1NSxFUVVBTFM6NTYsTVVMVDo1NyxET1Q6NTgsQlJLVDo1OSxVTkRFUlNDT1JFOjYwLE1JTlVTOjYxLCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw1OiJTUEFDRSIsNzoiUVVBRFJBTlQiLDE0OiJ0aXRsZSIsMTU6InRpdGxlX3ZhbHVlIiwxNjoiYWNjX3RpdGxlIiwxNzoiYWNjX3RpdGxlX3ZhbHVlIiwxODoiYWNjX2Rlc2NyIiwxOToiYWNjX2Rlc2NyX3ZhbHVlIiwyMDoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMjE6InNlY3Rpb24iLDIzOiJwb2ludF9zdGFydCIsMjQ6InBvaW50X3giLDI1OiJwb2ludF95IiwyNjoiWC1BWElTIiwyNzoiQVhJUy1URVhULURFTElNSVRFUiIsMjg6IlktQVhJUyIsMjk6IlFVQURSQU5UXzEiLDMwOiJRVUFEUkFOVF8yIiwzMToiUVVBRFJBTlRfMyIsMzI6IlFVQURSQU5UXzQiLDM2OiI6IiwzODoiTkVXTElORSIsMzk6IlNFTUkiLDQwOiJFT0YiLDQxOiJvcGVuX2RpcmVjdGl2ZSIsNDI6InR5cGVfZGlyZWN0aXZlIiw0MzoiYXJnX2RpcmVjdGl2ZSIsNDQ6ImNsb3NlX2RpcmVjdGl2ZSIsNDc6IlNUUiIsNDg6Ik1EX1NUUiIsNTA6IlBVTkNUVUFUSU9OIiw1MToiQU1QIiw1MjoiTlVNIiw1MzoiQUxQSEEiLDU0OiJDT01NQSIsNTU6IlBMVVMiLDU2OiJFUVVBTFMiLDU3OiJNVUxUIiw1ODoiRE9UIiw1OToiQlJLVCIsNjA6IlVOREVSU0NPUkUiLDYxOiJNSU5VUyJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywyXSxbMywyXSxbMywyXSxbOCwwXSxbOCwyXSxbOSwyXSxbMTAsMF0sWzEwLDJdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwyXSxbMTAsMl0sWzEwLDJdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMyw0XSxbMTEsNF0sWzExLDNdLFsxMSwyXSxbMTEsNF0sWzExLDNdLFsxMSwyXSxbMTIsMl0sWzEyLDJdLFsxMiwyXSxbMTIsMl0sWzYsM10sWzYsNV0sWzQsMV0sWzQsMV0sWzQsMV0sWzMzLDFdLFszNCwxXSxbMzcsMV0sWzM1LDFdLFsyMiwxXSxbMjIsMl0sWzIyLDFdLFsyMiwxXSxbNDksMV0sWzQ5LDJdLFs0NSwxXSxbNDUsMV0sWzQ1LDFdLFs0NSwxXSxbNDUsMV0sWzQ1LDFdLFs0NSwxXSxbNDUsMV0sWzQ1LDFdLFs0NSwxXSxbNDUsMV0sWzQ2LDFdLFs0NiwxXSxbNDYsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24obmUsa2UsVmUsRWUsSGUsQ2UsJGUpe3ZhciB5ZT1DZS5sZW5ndGgtMTtzd2l0Y2goSGUpe2Nhc2UgMTM6dGhpcy4kPUNlW3llXS50cmltKCksRWUuc2V0RGlhZ3JhbVRpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAxNDp0aGlzLiQ9Q2VbeWVdLnRyaW0oKSxFZS5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMTU6Y2FzZSAxNjp0aGlzLiQ9Q2VbeWVdLnRyaW0oKSxFZS5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgMTc6RWUuYWRkU2VjdGlvbihDZVt5ZV0uc3Vic3RyKDgpKSx0aGlzLiQ9Q2VbeWVdLnN1YnN0cig4KTticmVhaztjYXNlIDE5OkVlLmFkZFBvaW50KENlW3llLTNdLENlW3llLTFdLENlW3llXSk7YnJlYWs7Y2FzZSAyMDpFZS5zZXRYQXhpc0xlZnRUZXh0KENlW3llLTJdKSxFZS5zZXRYQXhpc1JpZ2h0VGV4dChDZVt5ZV0pO2JyZWFrO2Nhc2UgMjE6Q2VbeWUtMV0udGV4dCs9IiDin7YgIixFZS5zZXRYQXhpc0xlZnRUZXh0KENlW3llLTFdKTticmVhaztjYXNlIDIyOkVlLnNldFhBeGlzTGVmdFRleHQoQ2VbeWVdKTticmVhaztjYXNlIDIzOkVlLnNldFlBeGlzQm90dG9tVGV4dChDZVt5ZS0yXSksRWUuc2V0WUF4aXNUb3BUZXh0KENlW3llXSk7YnJlYWs7Y2FzZSAyNDpDZVt5ZS0xXS50ZXh0Kz0iIOKftiAiLEVlLnNldFlBeGlzQm90dG9tVGV4dChDZVt5ZS0xXSk7YnJlYWs7Y2FzZSAyNTpFZS5zZXRZQXhpc0JvdHRvbVRleHQoQ2VbeWVdKTticmVhaztjYXNlIDI2OkVlLnNldFF1YWRyYW50MVRleHQoQ2VbeWVdKTticmVhaztjYXNlIDI3OkVlLnNldFF1YWRyYW50MlRleHQoQ2VbeWVdKTticmVhaztjYXNlIDI4OkVlLnNldFF1YWRyYW50M1RleHQoQ2VbeWVdKTticmVhaztjYXNlIDI5OkVlLnNldFF1YWRyYW50NFRleHQoQ2VbeWVdKTticmVhaztjYXNlIDM1OkVlLnBhcnNlRGlyZWN0aXZlKCIlJXsiLCJvcGVuX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMzY6RWUucGFyc2VEaXJlY3RpdmUoQ2VbeWVdLCJ0eXBlX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMzc6Q2VbeWVdPUNlW3llXS50cmltKCkucmVwbGFjZSgvJy9nLCciJyksRWUucGFyc2VEaXJlY3RpdmUoQ2VbeWVdLCJhcmdfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAzODpFZS5wYXJzZURpcmVjdGl2ZSgifSUlIiwiY2xvc2VfZGlyZWN0aXZlIiwicXVhZHJhbnRDaGFydCIpO2JyZWFrO2Nhc2UgMzk6dGhpcy4kPXt0ZXh0OkNlW3llXSx0eXBlOiJ0ZXh0In07YnJlYWs7Y2FzZSA0MDp0aGlzLiQ9e3RleHQ6Q2VbeWUtMV0udGV4dCsiIitDZVt5ZV0sdHlwZTpDZVt5ZS0xXS50eXBlfTticmVhaztjYXNlIDQxOnRoaXMuJD17dGV4dDpDZVt5ZV0sdHlwZToidGV4dCJ9O2JyZWFrO2Nhc2UgNDI6dGhpcy4kPXt0ZXh0OkNlW3llXSx0eXBlOiJtYXJrZG93biJ9O2JyZWFrO2Nhc2UgNDM6dGhpcy4kPUNlW3llXTticmVhaztjYXNlIDQ0OnRoaXMuJD1DZVt5ZS0xXSsiIitDZVt5ZV07YnJlYWt9fSx0YWJsZTpbezM6MSw0OjIsNTphLDY6NCw3OmYsMzM6OSwzODpwLDM5OnYsNDA6bSw0MTpifSx7MTpbM119LHszOjExLDQ6Miw1OmEsNjo0LDc6ZiwzMzo5LDM4OnAsMzk6diw0MDptLDQxOmJ9LHszOjEyLDQ6Miw1OmEsNjo0LDc6ZiwzMzo5LDM4OnAsMzk6diw0MDptLDQxOmJ9LHszOjEzLDQ6Miw1OmEsNjo0LDc6ZiwzMzo5LDM4OnAsMzk6diw0MDptLDQxOmJ9LGkoRSxbMiw1XSx7ODoxNH0pLGkoQyxbMiwzMl0pLGkoQyxbMiwzM10pLGkoQyxbMiwzNF0pLHszNDoxNSw0MjpbMSwxNl19LHs0MjpbMiwzNV19LHsxOlsyLDFdfSx7MTpbMiwyXX0sezE6WzIsM119LGkoQSxQLHszMzo5LDk6MTcsMTA6MTgsMTE6MjAsMTI6MjEsMTM6MjIsNjoyOCwyMjozNSw0NTozNiwxOlsyLDRdLDU6RiwxNDpqLDE2OlIsMTg6SCwyMDpZLDIxOnJ0LDI2OkosMjg6aXQsMjk6ZnQsMzA6VHQsMzE6a3QsMzI6bXQsNDE6Yiw0NzpjdCw0ODp5dCw1MDpzdCw1MTp4dCw1MjpodCw1MzpkdCw1NDpDdCw1NTp0dCw1NjpQdCw1NzpwdCw1ODpGdCw1OTpYLDYwOlJ0fSksezM1OjUwLDM2OlsxLDUxXSw0NDpCdH0saShbMzYsNDRdLFsyLDM2XSksaShFLFsyLDZdKSx7NDo1MywzODpwLDM5OnYsNDA6bX0saShBLFAsezMzOjksMTE6MjAsMTI6MjEsMTM6MjIsNjoyOCwyMjozNSw0NTozNiwxMDo1NCw1OkYsMTQ6aiwxNjpSLDE4OkgsMjA6WSwyMTpydCwyNjpKLDI4Oml0LDI5OmZ0LDMwOlR0LDMxOmt0LDMyOm10LDQxOmIsNDc6Y3QsNDg6eXQsNTA6c3QsNTE6eHQsNTI6aHQsNTM6ZHQsNTQ6Q3QsNTU6dHQsNTY6UHQsNTc6cHQsNTg6RnQsNTk6WCw2MDpSdH0pLGkoQSxbMiwxMF0pLGkoQSxbMiwxMV0pLGkoQSxbMiwxMl0pLHsxNTpbMSw1NV19LHsxNzpbMSw1Nl19LHsxOTpbMSw1N119LGkoQSxbMiwxNl0pLGkoQSxbMiwxN10pLGkoQSxbMiwxOF0pLHsyMjo1OCw0NTozNiw0NzpjdCw0ODp5dCw1MDpzdCw1MTp4dCw1MjpodCw1MzpkdCw1NDpDdCw1NTp0dCw1NjpQdCw1NzpwdCw1ODpGdCw1OTpYLDYwOlJ0fSx7MjI6NTksNDU6MzYsNDc6Y3QsNDg6eXQsNTA6c3QsNTE6eHQsNTI6aHQsNTM6ZHQsNTQ6Q3QsNTU6dHQsNTY6UHQsNTc6cHQsNTg6RnQsNTk6WCw2MDpSdH0sezIyOjYwLDQ1OjM2LDQ3OmN0LDQ4Onl0LDUwOnN0LDUxOnh0LDUyOmh0LDUzOmR0LDU0OkN0LDU1OnR0LDU2OlB0LDU3OnB0LDU4OkZ0LDU5OlgsNjA6UnR9LHsyMjo2MSw0NTozNiw0NzpjdCw0ODp5dCw1MDpzdCw1MTp4dCw1MjpodCw1MzpkdCw1NDpDdCw1NTp0dCw1NjpQdCw1NzpwdCw1ODpGdCw1OTpYLDYwOlJ0fSx7MjI6NjIsNDU6MzYsNDc6Y3QsNDg6eXQsNTA6c3QsNTE6eHQsNTI6aHQsNTM6ZHQsNTQ6Q3QsNTU6dHQsNTY6UHQsNTc6cHQsNTg6RnQsNTk6WCw2MDpSdH0sezIyOjYzLDQ1OjM2LDQ3OmN0LDQ4Onl0LDUwOnN0LDUxOnh0LDUyOmh0LDUzOmR0LDU0OkN0LDU1OnR0LDU2OlB0LDU3OnB0LDU4OkZ0LDU5OlgsNjA6UnR9LHs1OnZ0LDIzOlsxLDY0XSw0NTo2Niw0Njo2NSw1MDpzdCw1MTp4dCw1MjpodCw1MzpkdCw1NDpDdCw1NTp0dCw1NjpQdCw1NzpwdCw1ODpGdCw1OTpYLDYwOlJ0LDYxOk90fSxpKFZ0LFsyLDM5XSksaShWdCxbMiw0MV0pLGkoVnQsWzIsNDJdKSxpKFZ0LFsyLDQ1XSksaShWdCxbMiw0Nl0pLGkoVnQsWzIsNDddKSxpKFZ0LFsyLDQ4XSksaShWdCxbMiw0OV0pLGkoVnQsWzIsNTBdKSxpKFZ0LFsyLDUxXSksaShWdCxbMiw1Ml0pLGkoVnQsWzIsNTNdKSxpKFZ0LFsyLDU0XSksaShWdCxbMiw1NV0pLGkocWUsWzIsMzBdKSx7Mzc6NjksNDM6WzEsNzBdfSxpKHFlLFsyLDM4XSksaShFLFsyLDddKSxpKEEsWzIsOV0pLGkoQSxbMiwxM10pLGkoQSxbMiwxNF0pLGkoQSxbMiwxNV0pLGkoQSxbMiwyMl0sezQ2OjY1LDQ1OjY2LDU6dnQsMjc6WzEsNzFdLDUwOnN0LDUxOnh0LDUyOmh0LDUzOmR0LDU0OkN0LDU1OnR0LDU2OlB0LDU3OnB0LDU4OkZ0LDU5OlgsNjA6UnQsNjE6T3R9KSxpKEEsWzIsMjVdLHs0Njo2NSw0NTo2Niw1OnZ0LDI3OlsxLDcyXSw1MDpzdCw1MTp4dCw1MjpodCw1MzpkdCw1NDpDdCw1NTp0dCw1NjpQdCw1NzpwdCw1ODpGdCw1OTpYLDYwOlJ0LDYxOk90fSksaShBLFsyLDI2XSx7NDY6NjUsNDU6NjYsNTp2dCw1MDpzdCw1MTp4dCw1MjpodCw1MzpkdCw1NDpDdCw1NTp0dCw1NjpQdCw1NzpwdCw1ODpGdCw1OTpYLDYwOlJ0LDYxOk90fSksaShBLFsyLDI3XSx7NDY6NjUsNDU6NjYsNTp2dCw1MDpzdCw1MTp4dCw1MjpodCw1MzpkdCw1NDpDdCw1NTp0dCw1NjpQdCw1NzpwdCw1ODpGdCw1OTpYLDYwOlJ0LDYxOk90fSksaShBLFsyLDI4XSx7NDY6NjUsNDU6NjYsNTp2dCw1MDpzdCw1MTp4dCw1MjpodCw1MzpkdCw1NDpDdCw1NTp0dCw1NjpQdCw1NzpwdCw1ODpGdCw1OTpYLDYwOlJ0LDYxOk90fSksaShBLFsyLDI5XSx7NDY6NjUsNDU6NjYsNTp2dCw1MDpzdCw1MTp4dCw1MjpodCw1MzpkdCw1NDpDdCw1NTp0dCw1NjpQdCw1NzpwdCw1ODpGdCw1OTpYLDYwOlJ0LDYxOk90fSksezI0OlsxLDczXX0saShWdCxbMiw0MF0pLGkoVnQsWzIsNTZdKSxpKFZ0LFsyLDU3XSksaShWdCxbMiw1OF0pLHszNTo3NCw0NDpCdH0sezQ0OlsyLDM3XX0saShBLFsyLDIxXSx7NDU6MzYsMjI6NzUsNDc6Y3QsNDg6eXQsNTA6c3QsNTE6eHQsNTI6aHQsNTM6ZHQsNTQ6Q3QsNTU6dHQsNTY6UHQsNTc6cHQsNTg6RnQsNTk6WCw2MDpSdH0pLGkoQSxbMiwyNF0sezQ1OjM2LDIyOjc2LDQ3OmN0LDQ4Onl0LDUwOnN0LDUxOnh0LDUyOmh0LDUzOmR0LDU0OkN0LDU1OnR0LDU2OlB0LDU3OnB0LDU4OkZ0LDU5OlgsNjA6UnR9KSx7MjU6WzEsNzddfSxpKHFlLFsyLDMxXSksaShBLFsyLDIwXSx7NDY6NjUsNDU6NjYsNTp2dCw1MDpzdCw1MTp4dCw1MjpodCw1MzpkdCw1NDpDdCw1NTp0dCw1NjpQdCw1NzpwdCw1ODpGdCw1OTpYLDYwOlJ0LDYxOk90fSksaShBLFsyLDIzXSx7NDY6NjUsNDU6NjYsNTp2dCw1MDpzdCw1MTp4dCw1MjpodCw1MzpkdCw1NDpDdCw1NTp0dCw1NjpQdCw1NzpwdCw1ODpGdCw1OTpYLDYwOlJ0LDYxOk90fSksaShBLFsyLDE5XSldLGRlZmF1bHRBY3Rpb25zOnsxMDpbMiwzNV0sMTE6WzIsMV0sMTI6WzIsMl0sMTM6WzIsM10sNzA6WzIsMzddfSxwYXJzZUVycm9yOmZ1bmN0aW9uKG5lLGtlKXtpZihrZS5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKG5lKTtlbHNle3ZhciBWZT1uZXcgRXJyb3IobmUpO3Rocm93IFZlLmhhc2g9a2UsVmV9fSxwYXJzZTpmdW5jdGlvbihuZSl7dmFyIGtlPXRoaXMsVmU9WzBdLEVlPVtdLEhlPVtudWxsXSxDZT1bXSwkZT10aGlzLnRhYmxlLHllPSIiLGZuPTAsWXQ9MCxNaT0yLHF0PTEsemk9Q2Uuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksU2U9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxraT17eXk6e319O2Zvcih2YXIgUmkgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxSaSkmJihraS55eVtSaV09dGhpcy55eVtSaV0pO1NlLnNldElucHV0KG5lLGtpLnl5KSxraS55eS5sZXhlcj1TZSxraS55eS5wYXJzZXI9dGhpcyx0eXBlb2YgU2UueXlsbG9jPiJ1IiYmKFNlLnl5bGxvYz17fSk7dmFyIHBpPVNlLnl5bGxvYztDZS5wdXNoKHBpKTt2YXIgYmk9U2Uub3B0aW9ucyYmU2Uub3B0aW9ucy5yYW5nZXM7dHlwZW9mIGtpLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPWtpLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIGRuKCl7dmFyIE9pO3JldHVybiBPaT1FZS5wb3AoKXx8U2UubGV4KCl8fHF0LHR5cGVvZiBPaSE9Im51bWJlciImJihPaSBpbnN0YW5jZW9mIEFycmF5JiYoRWU9T2ksT2k9RWUucG9wKCkpLE9pPWtlLnN5bWJvbHNfW09pXXx8T2kpLE9pfWZvcih2YXIgTm4sV3IsTGksaXMsVHM9e30sQWEsWGksR2EsX3I7Oyl7aWYoV3I9VmVbVmUubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbV3JdP0xpPXRoaXMuZGVmYXVsdEFjdGlvbnNbV3JdOigoTm49PT1udWxsfHx0eXBlb2YgTm4+InUiKSYmKE5uPWRuKCkpLExpPSRlW1dyXSYmJGVbV3JdW05uXSksdHlwZW9mIExpPiJ1Inx8IUxpLmxlbmd0aHx8IUxpWzBdKXt2YXIgcXI9IiI7X3I9W107Zm9yKEFhIGluICRlW1dyXSl0aGlzLnRlcm1pbmFsc19bQWFdJiZBYT5NaSYmX3IucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0FhXSsiJyIpO1NlLnNob3dQb3NpdGlvbj9xcj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhmbisxKStgOgpgK1NlLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArX3Iuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tObl18fE5uKSsiJyI6cXI9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoZm4rMSkrIjogVW5leHBlY3RlZCAiKyhObj09cXQ/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bTm5dfHxObikrIiciKSx0aGlzLnBhcnNlRXJyb3IocXIse3RleHQ6U2UubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW05uXXx8Tm4sbGluZTpTZS55eWxpbmVubyxsb2M6cGksZXhwZWN0ZWQ6X3J9KX1pZihMaVswXWluc3RhbmNlb2YgQXJyYXkmJkxpLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrV3IrIiwgdG9rZW46ICIrTm4pO3N3aXRjaChMaVswXSl7Y2FzZSAxOlZlLnB1c2goTm4pLEhlLnB1c2goU2UueXl0ZXh0KSxDZS5wdXNoKFNlLnl5bGxvYyksVmUucHVzaChMaVsxXSksTm49bnVsbCxZdD1TZS55eWxlbmcseWU9U2UueXl0ZXh0LGZuPVNlLnl5bGluZW5vLHBpPVNlLnl5bGxvYzticmVhaztjYXNlIDI6aWYoWGk9dGhpcy5wcm9kdWN0aW9uc19bTGlbMV1dWzFdLFRzLiQ9SGVbSGUubGVuZ3RoLVhpXSxUcy5fJD17Zmlyc3RfbGluZTpDZVtDZS5sZW5ndGgtKFhpfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6Q2VbQ2UubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46Q2VbQ2UubGVuZ3RoLShYaXx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpDZVtDZS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LGJpJiYoVHMuXyQucmFuZ2U9W0NlW0NlLmxlbmd0aC0oWGl8fDEpXS5yYW5nZVswXSxDZVtDZS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxpcz10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoVHMsW3llLFl0LGZuLGtpLnl5LExpWzFdLEhlLENlXS5jb25jYXQoemkpKSx0eXBlb2YgaXM8InUiKXJldHVybiBpcztYaSYmKFZlPVZlLnNsaWNlKDAsLTEqWGkqMiksSGU9SGUuc2xpY2UoMCwtMSpYaSksQ2U9Q2Uuc2xpY2UoMCwtMSpYaSkpLFZlLnB1c2godGhpcy5wcm9kdWN0aW9uc19bTGlbMV1dWzBdKSxIZS5wdXNoKFRzLiQpLENlLnB1c2goVHMuXyQpLEdhPSRlW1ZlW1ZlLmxlbmd0aC0yXV1bVmVbVmUubGVuZ3RoLTFdXSxWZS5wdXNoKEdhKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sVGU9ZnVuY3Rpb24oKXt2YXIgQWU9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24oa2UsVmUpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3Ioa2UsVmUpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGtlKX0sc2V0SW5wdXQ6ZnVuY3Rpb24obmUsa2Upe3JldHVybiB0aGlzLnl5PWtlfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1uZSx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgbmU9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPW5lLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1uZSx0aGlzLm1hdGNoZWQrPW5lO3ZhciBrZT1uZS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIGtlPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxuZX0sdW5wdXQ6ZnVuY3Rpb24obmUpe3ZhciBrZT1uZS5sZW5ndGgsVmU9bmUuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1uZSt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgta2UpLHRoaXMub2Zmc2V0LT1rZTt2YXIgRWU9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksVmUubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1WZS5sZW5ndGgtMSk7dmFyIEhlPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpWZT8oVmUubGVuZ3RoPT09RWUubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStFZVtFZS5sZW5ndGgtVmUubGVuZ3RoXS5sZW5ndGgtVmVbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1rZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtIZVswXSxIZVswXSt0aGlzLnl5bGVuZy1rZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKG5lKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UobmUpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIG5lPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4obmUubGVuZ3RoPjIwPyIuLi4iOiIiKStuZS5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciBuZT10aGlzLm1hdGNoO3JldHVybiBuZS5sZW5ndGg8MjAmJihuZSs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtbmUubGVuZ3RoKSksKG5lLnN1YnN0cigwLDIwKSsobmUubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBuZT10aGlzLnBhc3RJbnB1dCgpLGtlPW5ldyBBcnJheShuZS5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBuZSt0aGlzLnVwY29taW5nSW5wdXQoKStgCmAra2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKG5lLGtlKXt2YXIgVmUsRWUsSGU7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKEhlPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKEhlLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLEVlPW5lWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxFZSYmKHRoaXMueXlsaW5lbm8rPUVlLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOkVlP0VlW0VlLmxlbmd0aC0xXS5sZW5ndGgtRWVbRWUubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rbmVbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9bmVbMF0sdGhpcy5tYXRjaCs9bmVbMF0sdGhpcy5tYXRjaGVzPW5lLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKG5lWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1uZVswXSxWZT10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxrZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxWZSlyZXR1cm4gVmU7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIENlIGluIEhlKXRoaXNbQ2VdPUhlW0NlXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBuZSxrZSxWZSxFZTt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBIZT10aGlzLl9jdXJyZW50UnVsZXMoKSxDZT0wO0NlPEhlLmxlbmd0aDtDZSsrKWlmKFZlPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbSGVbQ2VdXSksVmUmJigha2V8fFZlWzBdLmxlbmd0aD5rZVswXS5sZW5ndGgpKXtpZihrZT1WZSxFZT1DZSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihuZT10aGlzLnRlc3RfbWF0Y2goVmUsSGVbQ2VdKSxuZSE9PSExKXJldHVybiBuZTtpZih0aGlzLl9iYWNrdHJhY2spe2tlPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGtlPyhuZT10aGlzLnRlc3RfbWF0Y2goa2UsSGVbRWVdKSxuZSE9PSExP25lOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIga2U9dGhpcy5uZXh0KCk7cmV0dXJuIGtlfHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbihrZSl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKGtlKX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIga2U9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4ga2U+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbihrZSl7cmV0dXJuIGtlPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoa2V8fDApLGtlPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tba2VdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKGtlKXt0aGlzLmJlZ2luKGtlKX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihrZSxWZSxFZSxIZSl7c3dpdGNoKEVlKXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oIm9wZW5fZGlyZWN0aXZlIiksNDE7Y2FzZSAxOnJldHVybiB0aGlzLmJlZ2luKCJ0eXBlX2RpcmVjdGl2ZSIpLDQyO2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImFyZ19kaXJlY3RpdmUiKSwzNjtjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksNDQ7Y2FzZSA0OnJldHVybiA0MztjYXNlIDU6YnJlYWs7Y2FzZSA2OmJyZWFrO2Nhc2UgNzpyZXR1cm4gMzg7Y2FzZSA4OmJyZWFrO2Nhc2UgOTpyZXR1cm4gdGhpcy5iZWdpbigidGl0bGUiKSwxNDtjYXNlIDEwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksInRpdGxlX3ZhbHVlIjtjYXNlIDExOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwxNjtjYXNlIDEyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7Y2FzZSAxMzpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMTg7Y2FzZSAxNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2Nhc2UgMTU6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgMTY6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTc6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgMTg6cmV0dXJuIDI2O2Nhc2UgMTk6cmV0dXJuIDI4O2Nhc2UgMjA6cmV0dXJuIDI3O2Nhc2UgMjE6cmV0dXJuIDI5O2Nhc2UgMjI6cmV0dXJuIDMwO2Nhc2UgMjM6cmV0dXJuIDMxO2Nhc2UgMjQ6cmV0dXJuIDMyO2Nhc2UgMjU6dGhpcy5iZWdpbigibWRfc3RyaW5nIik7YnJlYWs7Y2FzZSAyNjpyZXR1cm4iTURfU1RSIjtjYXNlIDI3OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI4OnRoaXMuYmVnaW4oInN0cmluZyIpO2JyZWFrO2Nhc2UgMjk6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzA6cmV0dXJuIlNUUiI7Y2FzZSAzMTpyZXR1cm4gdGhpcy5iZWdpbigicG9pbnRfc3RhcnQiKSwyMztjYXNlIDMyOnJldHVybiB0aGlzLmJlZ2luKCJwb2ludF94IiksMjQ7Y2FzZSAzMzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAzNDp0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigicG9pbnRfeSIpO2JyZWFrO2Nhc2UgMzU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwyNTtjYXNlIDM2OnJldHVybiA3O2Nhc2UgMzc6cmV0dXJuIDUzO2Nhc2UgMzg6cmV0dXJuIkNPTE9OIjtjYXNlIDM5OnJldHVybiA1NTtjYXNlIDQwOnJldHVybiA1NDtjYXNlIDQxOnJldHVybiA1NjtjYXNlIDQyOnJldHVybiA1NjtjYXNlIDQzOnJldHVybiA1NztjYXNlIDQ0OnJldHVybiA1OTtjYXNlIDQ1OnJldHVybiA2MDtjYXNlIDQ2OnJldHVybiA1ODtjYXNlIDQ3OnJldHVybiA1MTtjYXNlIDQ4OnJldHVybiA2MTtjYXNlIDQ5OnJldHVybiA1MjtjYXNlIDUwOnJldHVybiA1O2Nhc2UgNTE6cmV0dXJuIDM5O2Nhc2UgNTI6cmV0dXJuIDUwO2Nhc2UgNTM6cmV0dXJuIDQwfX0scnVsZXM6Wy9eKD86JSVceykvaSwvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS9pLC9eKD86OikvaSwvXig/Olx9JSUpL2ksL14oPzooKD86KD8hXH0lJSkufFxuKSopKS9pLC9eKD86JSUoPyFceylbXlxuXSopL2ksL14oPzpbXlx9XSUlW15cbl0qKS9pLC9eKD86W1xuXHJdKykvaSwvXig/OiUlW15cbl0qKS9pLC9eKD86dGl0bGVcYikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86ICp4LWF4aXMgKikvaSwvXig/OiAqeS1heGlzICopL2ksL14oPzogKi0tKz4gKikvaSwvXig/OiAqcXVhZHJhbnQtMSAqKS9pLC9eKD86ICpxdWFkcmFudC0yICopL2ksL14oPzogKnF1YWRyYW50LTMgKikvaSwvXig/OiAqcXVhZHJhbnQtNCAqKS9pLC9eKD86WyJdW2BdKS9pLC9eKD86W15gIl0rKS9pLC9eKD86W2BdWyJdKS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpccyo6XHMqXFtccyopL2ksL14oPzooMSl8KDAoLlxkKyk/KSkvaSwvXig/OlxzKlxdICopL2ksL14oPzpccyosXHMqKS9pLC9eKD86KDEpfCgwKC5cZCspPykpL2ksL14oPzogKnF1YWRyYW50Q2hhcnQgKikvaSwvXig/OltBLVphLXpdKykvaSwvXig/OjopL2ksL14oPzpcKykvaSwvXig/OiwpL2ksL14oPzo9KS9pLC9eKD86PSkvaSwvXig/OlwqKS9pLC9eKD86IykvaSwvXig/OltcX10pL2ksL14oPzpcLikvaSwvXig/OiYpL2ksL14oPzotKS9pLC9eKD86WzAtOV0rKS9pLC9eKD86XHMpL2ksL14oPzo7KS9pLC9eKD86WyEiIyQlJicqKywtLmA/XFxfL10pL2ksL14oPzokKS9pXSxjb25kaXRpb25zOntwb2ludF95OntydWxlczpbMzVdLGluY2x1c2l2ZTohMX0scG9pbnRfeDp7cnVsZXM6WzM0XSxpbmNsdXNpdmU6ITF9LHBvaW50X3N0YXJ0OntydWxlczpbMzIsMzNdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzE2LDE3XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzE0XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzEyXSxpbmNsdXNpdmU6ITF9LGNsb3NlX2RpcmVjdGl2ZTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0XSxpbmNsdXNpdmU6ITF9LHR5cGVfZGlyZWN0aXZlOntydWxlczpbMiwzXSxpbmNsdXNpdmU6ITF9LG9wZW5fZGlyZWN0aXZlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSx0aXRsZTp7cnVsZXM6WzEwXSxpbmNsdXNpdmU6ITF9LG1kX3N0cmluZzp7cnVsZXM6WzI2LDI3XSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzI5LDMwXSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDUsNiw3LDgsOSwxMSwxMywxNSwxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyOCwzMSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1M10saW5jbHVzaXZlOiEwfX19O3JldHVybiBBZX0oKTtfbi5sZXhlcj1UZTtmdW5jdGlvbiBXbigpe3RoaXMueXk9e319cmV0dXJuIFduLnByb3RvdHlwZT1fbixfbi5QYXJzZXI9V24sbmV3IFdufSgpO1owdC5wYXJzZXI9WjB0O2NvbnN0IFNxZT1aMHQscGc9SkR0KCk7Y2xhc3MgQXFle2NvbnN0cnVjdG9yKCl7dGhpcy5jb25maWc9dGhpcy5nZXREZWZhdWx0Q29uZmlnKCksdGhpcy50aGVtZUNvbmZpZz10aGlzLmdldERlZmF1bHRUaGVtZUNvbmZpZygpLHRoaXMuZGF0YT10aGlzLmdldERlZmF1bHREYXRhKCl9Z2V0RGVmYXVsdERhdGEoKXtyZXR1cm57dGl0bGVUZXh0OiIiLHF1YWRyYW50MVRleHQ6IiIscXVhZHJhbnQyVGV4dDoiIixxdWFkcmFudDNUZXh0OiIiLHF1YWRyYW50NFRleHQ6IiIseEF4aXNMZWZ0VGV4dDoiIix4QXhpc1JpZ2h0VGV4dDoiIix5QXhpc0JvdHRvbVRleHQ6IiIseUF4aXNUb3BUZXh0OiIiLHBvaW50czpbXX19Z2V0RGVmYXVsdENvbmZpZygpe3ZhciBhLGYscCx2LG0sYixFLEMsQSxQLEYsaixSLEgsWSxydCxKLGl0O3JldHVybntzaG93WEF4aXM6ITAsc2hvd1lBeGlzOiEwLHNob3dUaXRsZTohMCxjaGFydEhlaWdodDooKGE9SWYucXVhZHJhbnRDaGFydCk9PW51bGw/dm9pZCAwOmEuY2hhcnRXaWR0aCl8fDUwMCxjaGFydFdpZHRoOigoZj1JZi5xdWFkcmFudENoYXJ0KT09bnVsbD92b2lkIDA6Zi5jaGFydEhlaWdodCl8fDUwMCx0aXRsZVBhZGRpbmc6KChwPUlmLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpwLnRpdGxlUGFkZGluZyl8fDEwLHRpdGxlRm9udFNpemU6KCh2PUlmLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDp2LnRpdGxlRm9udFNpemUpfHwyMCxxdWFkcmFudFBhZGRpbmc6KChtPUlmLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDptLnF1YWRyYW50UGFkZGluZyl8fDUseEF4aXNMYWJlbFBhZGRpbmc6KChiPUlmLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpiLnhBeGlzTGFiZWxQYWRkaW5nKXx8NSx5QXhpc0xhYmVsUGFkZGluZzooKEU9SWYucXVhZHJhbnRDaGFydCk9PW51bGw/dm9pZCAwOkUueUF4aXNMYWJlbFBhZGRpbmcpfHw1LHhBeGlzTGFiZWxGb250U2l6ZTooKEM9SWYucXVhZHJhbnRDaGFydCk9PW51bGw/dm9pZCAwOkMueEF4aXNMYWJlbEZvbnRTaXplKXx8MTYseUF4aXNMYWJlbEZvbnRTaXplOigoQT1JZi5xdWFkcmFudENoYXJ0KT09bnVsbD92b2lkIDA6QS55QXhpc0xhYmVsRm9udFNpemUpfHwxNixxdWFkcmFudExhYmVsRm9udFNpemU6KChQPUlmLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpQLnF1YWRyYW50TGFiZWxGb250U2l6ZSl8fDE2LHF1YWRyYW50VGV4dFRvcFBhZGRpbmc6KChGPUlmLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpGLnF1YWRyYW50VGV4dFRvcFBhZGRpbmcpfHw1LHBvaW50VGV4dFBhZGRpbmc6KChqPUlmLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpqLnBvaW50VGV4dFBhZGRpbmcpfHw1LHBvaW50TGFiZWxGb250U2l6ZTooKFI9SWYucXVhZHJhbnRDaGFydCk9PW51bGw/dm9pZCAwOlIucG9pbnRMYWJlbEZvbnRTaXplKXx8MTIscG9pbnRSYWRpdXM6KChIPUlmLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpILnBvaW50UmFkaXVzKXx8NSx4QXhpc1Bvc2l0aW9uOigoWT1JZi5xdWFkcmFudENoYXJ0KT09bnVsbD92b2lkIDA6WS54QXhpc1Bvc2l0aW9uKXx8InRvcCIseUF4aXNQb3NpdGlvbjooKHJ0PUlmLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpydC55QXhpc1Bvc2l0aW9uKXx8ImxlZnQiLHF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VXaWR0aDooKEo9SWYucXVhZHJhbnRDaGFydCk9PW51bGw/dm9pZCAwOkoucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZVdpZHRoKXx8MSxxdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGg6KChpdD1JZi5xdWFkcmFudENoYXJ0KT09bnVsbD92b2lkIDA6aXQucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRoKXx8Mn19Z2V0RGVmYXVsdFRoZW1lQ29uZmlnKCl7cmV0dXJue3F1YWRyYW50MUZpbGw6cGcucXVhZHJhbnQxRmlsbCxxdWFkcmFudDJGaWxsOnBnLnF1YWRyYW50MkZpbGwscXVhZHJhbnQzRmlsbDpwZy5xdWFkcmFudDNGaWxsLHF1YWRyYW50NEZpbGw6cGcucXVhZHJhbnQ0RmlsbCxxdWFkcmFudDFUZXh0RmlsbDpwZy5xdWFkcmFudDFUZXh0RmlsbCxxdWFkcmFudDJUZXh0RmlsbDpwZy5xdWFkcmFudDJUZXh0RmlsbCxxdWFkcmFudDNUZXh0RmlsbDpwZy5xdWFkcmFudDNUZXh0RmlsbCxxdWFkcmFudDRUZXh0RmlsbDpwZy5xdWFkcmFudDRUZXh0RmlsbCxxdWFkcmFudFBvaW50RmlsbDpwZy5xdWFkcmFudFBvaW50RmlsbCxxdWFkcmFudFBvaW50VGV4dEZpbGw6cGcucXVhZHJhbnRQb2ludFRleHRGaWxsLHF1YWRyYW50WEF4aXNUZXh0RmlsbDpwZy5xdWFkcmFudFhBeGlzVGV4dEZpbGwscXVhZHJhbnRZQXhpc1RleHRGaWxsOnBnLnF1YWRyYW50WUF4aXNUZXh0RmlsbCxxdWFkcmFudFRpdGxlRmlsbDpwZy5xdWFkcmFudFRpdGxlRmlsbCxxdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbDpwZy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbCxxdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbDpwZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbH19Y2xlYXIoKXt0aGlzLmNvbmZpZz10aGlzLmdldERlZmF1bHRDb25maWcoKSx0aGlzLnRoZW1lQ29uZmlnPXRoaXMuZ2V0RGVmYXVsdFRoZW1lQ29uZmlnKCksdGhpcy5kYXRhPXRoaXMuZ2V0RGVmYXVsdERhdGEoKSxXdC5pbmZvKCJjbGVhciBjYWxsZWQiKX1zZXREYXRhKGEpe3RoaXMuZGF0YT17Li4udGhpcy5kYXRhLC4uLmF9fWFkZFBvaW50cyhhKXt0aGlzLmRhdGEucG9pbnRzPVsuLi5hLC4uLnRoaXMuZGF0YS5wb2ludHNdfXNldENvbmZpZyhhKXtXdC50cmFjZSgic2V0Q29uZmlnIGNhbGxlZCB3aXRoOiAiLGEpLHRoaXMuY29uZmlnPXsuLi50aGlzLmNvbmZpZywuLi5hfX1zZXRUaGVtZUNvbmZpZyhhKXtXdC50cmFjZSgic2V0VGhlbWVDb25maWcgY2FsbGVkIHdpdGg6ICIsYSksdGhpcy50aGVtZUNvbmZpZz17Li4udGhpcy50aGVtZUNvbmZpZywuLi5hfX1jYWxjdWxhdGVTcGFjZShhLGYscCx2KXtjb25zdCBtPXRoaXMuY29uZmlnLnhBeGlzTGFiZWxQYWRkaW5nKjIrdGhpcy5jb25maWcueEF4aXNMYWJlbEZvbnRTaXplLGI9e3RvcDphPT09InRvcCImJmY/bTowLGJvdHRvbTphPT09ImJvdHRvbSImJmY/bTowfSxFPXRoaXMuY29uZmlnLnlBeGlzTGFiZWxQYWRkaW5nKjIrdGhpcy5jb25maWcueUF4aXNMYWJlbEZvbnRTaXplLEM9e2xlZnQ6dGhpcy5jb25maWcueUF4aXNQb3NpdGlvbj09PSJsZWZ0IiYmcD9FOjAscmlnaHQ6dGhpcy5jb25maWcueUF4aXNQb3NpdGlvbj09PSJyaWdodCImJnA/RTowfSxBPXRoaXMuY29uZmlnLnRpdGxlRm9udFNpemUrdGhpcy5jb25maWcudGl0bGVQYWRkaW5nKjIsUD17dG9wOnY/QTowfSxGPXRoaXMuY29uZmlnLnF1YWRyYW50UGFkZGluZytDLmxlZnQsaj10aGlzLmNvbmZpZy5xdWFkcmFudFBhZGRpbmcrYi50b3ArUC50b3AsUj10aGlzLmNvbmZpZy5jaGFydFdpZHRoLXRoaXMuY29uZmlnLnF1YWRyYW50UGFkZGluZyoyLUMubGVmdC1DLnJpZ2h0LEg9dGhpcy5jb25maWcuY2hhcnRIZWlnaHQtdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nKjItYi50b3AtYi5ib3R0b20tUC50b3AsWT1SLzIscnQ9SC8yO3JldHVybnt4QXhpc1NwYWNlOmIseUF4aXNTcGFjZTpDLHRpdGxlU3BhY2U6UCxxdWFkcmFudFNwYWNlOntxdWFkcmFudExlZnQ6RixxdWFkcmFudFRvcDpqLHF1YWRyYW50V2lkdGg6UixxdWFkcmFudEhhbGZXaWR0aDpZLHF1YWRyYW50SGVpZ2h0OkgscXVhZHJhbnRIYWxmSGVpZ2h0OnJ0fX19Z2V0QXhpc0xhYmVscyhhLGYscCx2KXtjb25zdHtxdWFkcmFudFNwYWNlOm0sdGl0bGVTcGFjZTpifT12LHtxdWFkcmFudEhhbGZIZWlnaHQ6RSxxdWFkcmFudEhlaWdodDpDLHF1YWRyYW50TGVmdDpBLHF1YWRyYW50SGFsZldpZHRoOlAscXVhZHJhbnRUb3A6RixxdWFkcmFudFdpZHRoOmp9PW0sUj10aGlzLmRhdGEucG9pbnRzLmxlbmd0aD09PTAsSD1bXTtyZXR1cm4gdGhpcy5kYXRhLnhBeGlzTGVmdFRleHQmJmYmJkgucHVzaCh7dGV4dDp0aGlzLmRhdGEueEF4aXNMZWZ0VGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRYQXhpc1RleHRGaWxsLHg6QSsoUj9QLzI6MCkseTphPT09InRvcCI/dGhpcy5jb25maWcueEF4aXNMYWJlbFBhZGRpbmcrYi50b3A6dGhpcy5jb25maWcueEF4aXNMYWJlbFBhZGRpbmcrRitDK3RoaXMuY29uZmlnLnF1YWRyYW50UGFkZGluZyxmb250U2l6ZTp0aGlzLmNvbmZpZy54QXhpc0xhYmVsRm9udFNpemUsdmVydGljYWxQb3M6Uj8iY2VudGVyIjoibGVmdCIsaG9yaXpvbnRhbFBvczoidG9wIixyb3RhdGlvbjowfSksdGhpcy5kYXRhLnhBeGlzUmlnaHRUZXh0JiZmJiZILnB1c2goe3RleHQ6dGhpcy5kYXRhLnhBeGlzUmlnaHRUZXh0LGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudFhBeGlzVGV4dEZpbGwseDpBK1ArKFI/UC8yOjApLHk6YT09PSJ0b3AiP3RoaXMuY29uZmlnLnhBeGlzTGFiZWxQYWRkaW5nK2IudG9wOnRoaXMuY29uZmlnLnhBeGlzTGFiZWxQYWRkaW5nK0YrQyt0aGlzLmNvbmZpZy5xdWFkcmFudFBhZGRpbmcsZm9udFNpemU6dGhpcy5jb25maWcueEF4aXNMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOlI/ImNlbnRlciI6ImxlZnQiLGhvcml6b250YWxQb3M6InRvcCIscm90YXRpb246MH0pLHRoaXMuZGF0YS55QXhpc0JvdHRvbVRleHQmJnAmJkgucHVzaCh7dGV4dDp0aGlzLmRhdGEueUF4aXNCb3R0b21UZXh0LGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudFlBeGlzVGV4dEZpbGwseDp0aGlzLmNvbmZpZy55QXhpc1Bvc2l0aW9uPT09ImxlZnQiP3RoaXMuY29uZmlnLnlBeGlzTGFiZWxQYWRkaW5nOnRoaXMuY29uZmlnLnlBeGlzTGFiZWxQYWRkaW5nK0Erait0aGlzLmNvbmZpZy5xdWFkcmFudFBhZGRpbmcseTpGK0MtKFI/RS8yOjApLGZvbnRTaXplOnRoaXMuY29uZmlnLnlBeGlzTGFiZWxGb250U2l6ZSx2ZXJ0aWNhbFBvczpSPyJjZW50ZXIiOiJsZWZ0Iixob3Jpem9udGFsUG9zOiJ0b3AiLHJvdGF0aW9uOi05MH0pLHRoaXMuZGF0YS55QXhpc1RvcFRleHQmJnAmJkgucHVzaCh7dGV4dDp0aGlzLmRhdGEueUF4aXNUb3BUZXh0LGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudFlBeGlzVGV4dEZpbGwseDp0aGlzLmNvbmZpZy55QXhpc1Bvc2l0aW9uPT09ImxlZnQiP3RoaXMuY29uZmlnLnlBeGlzTGFiZWxQYWRkaW5nOnRoaXMuY29uZmlnLnlBeGlzTGFiZWxQYWRkaW5nK0Erait0aGlzLmNvbmZpZy5xdWFkcmFudFBhZGRpbmcseTpGK0UtKFI/RS8yOjApLGZvbnRTaXplOnRoaXMuY29uZmlnLnlBeGlzTGFiZWxGb250U2l6ZSx2ZXJ0aWNhbFBvczpSPyJjZW50ZXIiOiJsZWZ0Iixob3Jpem9udGFsUG9zOiJ0b3AiLHJvdGF0aW9uOi05MH0pLEh9Z2V0UXVhZHJhbnRzKGEpe2NvbnN0e3F1YWRyYW50U3BhY2U6Zn09YSx7cXVhZHJhbnRIYWxmSGVpZ2h0OnAscXVhZHJhbnRMZWZ0OnYscXVhZHJhbnRIYWxmV2lkdGg6bSxxdWFkcmFudFRvcDpifT1mLEU9W3t0ZXh0Ont0ZXh0OnRoaXMuZGF0YS5xdWFkcmFudDFUZXh0LGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudDFUZXh0RmlsbCx4OjAseTowLGZvbnRTaXplOnRoaXMuY29uZmlnLnF1YWRyYW50TGFiZWxGb250U2l6ZSx2ZXJ0aWNhbFBvczoiY2VudGVyIixob3Jpem9udGFsUG9zOiJtaWRkbGUiLHJvdGF0aW9uOjB9LHg6dittLHk6Yix3aWR0aDptLGhlaWdodDpwLGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudDFGaWxsfSx7dGV4dDp7dGV4dDp0aGlzLmRhdGEucXVhZHJhbnQyVGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQyVGV4dEZpbGwseDowLHk6MCxmb250U2l6ZTp0aGlzLmNvbmZpZy5xdWFkcmFudExhYmVsRm9udFNpemUsdmVydGljYWxQb3M6ImNlbnRlciIsaG9yaXpvbnRhbFBvczoibWlkZGxlIixyb3RhdGlvbjowfSx4OnYseTpiLHdpZHRoOm0saGVpZ2h0OnAsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50MkZpbGx9LHt0ZXh0Ont0ZXh0OnRoaXMuZGF0YS5xdWFkcmFudDNUZXh0LGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudDNUZXh0RmlsbCx4OjAseTowLGZvbnRTaXplOnRoaXMuY29uZmlnLnF1YWRyYW50TGFiZWxGb250U2l6ZSx2ZXJ0aWNhbFBvczoiY2VudGVyIixob3Jpem9udGFsUG9zOiJtaWRkbGUiLHJvdGF0aW9uOjB9LHg6dix5OmIrcCx3aWR0aDptLGhlaWdodDpwLGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudDNGaWxsfSx7dGV4dDp7dGV4dDp0aGlzLmRhdGEucXVhZHJhbnQ0VGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQ0VGV4dEZpbGwseDowLHk6MCxmb250U2l6ZTp0aGlzLmNvbmZpZy5xdWFkcmFudExhYmVsRm9udFNpemUsdmVydGljYWxQb3M6ImNlbnRlciIsaG9yaXpvbnRhbFBvczoibWlkZGxlIixyb3RhdGlvbjowfSx4OnYrbSx5OmIrcCx3aWR0aDptLGhlaWdodDpwLGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudDRGaWxsfV07Zm9yKGNvbnN0IEMgb2YgRSlDLnRleHQueD1DLngrQy53aWR0aC8yLHRoaXMuZGF0YS5wb2ludHMubGVuZ3RoPT09MD8oQy50ZXh0Lnk9Qy55K0MuaGVpZ2h0LzIsQy50ZXh0Lmhvcml6b250YWxQb3M9Im1pZGRsZSIpOihDLnRleHQueT1DLnkrdGhpcy5jb25maWcucXVhZHJhbnRUZXh0VG9wUGFkZGluZyxDLnRleHQuaG9yaXpvbnRhbFBvcz0idG9wIik7cmV0dXJuIEV9Z2V0UXVhZHJhbnRQb2ludHMoYSl7Y29uc3R7cXVhZHJhbnRTcGFjZTpmfT1hLHtxdWFkcmFudEhlaWdodDpwLHF1YWRyYW50TGVmdDp2LHF1YWRyYW50VG9wOm0scXVhZHJhbnRXaWR0aDpifT1mLEU9QlUoKS5kb21haW4oWzAsMV0pLnJhbmdlKFt2LGIrdl0pLEM9QlUoKS5kb21haW4oWzAsMV0pLnJhbmdlKFtwK20sbV0pO3JldHVybiB0aGlzLmRhdGEucG9pbnRzLm1hcChQPT4oe3g6RShQLngpLHk6QyhQLnkpLGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudFBvaW50RmlsbCxyYWRpdXM6dGhpcy5jb25maWcucG9pbnRSYWRpdXMsdGV4dDp7dGV4dDpQLnRleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50UG9pbnRUZXh0RmlsbCx4OkUoUC54KSx5OkMoUC55KSt0aGlzLmNvbmZpZy5wb2ludFRleHRQYWRkaW5nLHZlcnRpY2FsUG9zOiJjZW50ZXIiLGhvcml6b250YWxQb3M6InRvcCIsZm9udFNpemU6dGhpcy5jb25maWcucG9pbnRMYWJlbEZvbnRTaXplLHJvdGF0aW9uOjB9fSkpfWdldEJvcmRlcnMoYSl7Y29uc3QgZj10aGlzLmNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgvMix7cXVhZHJhbnRTcGFjZTpwfT1hLHtxdWFkcmFudEhhbGZIZWlnaHQ6dixxdWFkcmFudEhlaWdodDptLHF1YWRyYW50TGVmdDpiLHF1YWRyYW50SGFsZldpZHRoOkUscXVhZHJhbnRUb3A6QyxxdWFkcmFudFdpZHRoOkF9PXA7cmV0dXJuW3tzdHJva2VGaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGwsc3Ryb2tlV2lkdGg6dGhpcy5jb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLHgxOmItZix5MTpDLHgyOmIrQStmLHkyOkN9LHtzdHJva2VGaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGwsc3Ryb2tlV2lkdGg6dGhpcy5jb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLHgxOmIrQSx5MTpDK2YseDI6YitBLHkyOkMrbS1mfSx7c3Ryb2tlRmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHN0cm9rZVdpZHRoOnRoaXMuY29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCx4MTpiLWYseTE6QyttLHgyOmIrQStmLHkyOkMrbX0se3N0cm9rZUZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbCxzdHJva2VXaWR0aDp0aGlzLmNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgseDE6Yix5MTpDK2YseDI6Yix5MjpDK20tZn0se3N0cm9rZUZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbCxzdHJva2VXaWR0aDp0aGlzLmNvbmZpZy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgseDE6YitFLHkxOkMrZix4MjpiK0UseTI6QyttLWZ9LHtzdHJva2VGaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGwsc3Ryb2tlV2lkdGg6dGhpcy5jb25maWcucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLHgxOmIrZix5MTpDK3YseDI6YitBLWYseTI6Qyt2fV19Z2V0VGl0bGUoYSl7aWYoYSlyZXR1cm57dGV4dDp0aGlzLmRhdGEudGl0bGVUZXh0LGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudFRpdGxlRmlsbCxmb250U2l6ZTp0aGlzLmNvbmZpZy50aXRsZUZvbnRTaXplLGhvcml6b250YWxQb3M6InRvcCIsdmVydGljYWxQb3M6ImNlbnRlciIscm90YXRpb246MCx5OnRoaXMuY29uZmlnLnRpdGxlUGFkZGluZyx4OnRoaXMuY29uZmlnLmNoYXJ0V2lkdGgvMn19YnVpbGQoKXtjb25zdCBhPXRoaXMuY29uZmlnLnNob3dYQXhpcyYmISEodGhpcy5kYXRhLnhBeGlzTGVmdFRleHR8fHRoaXMuZGF0YS54QXhpc1JpZ2h0VGV4dCksZj10aGlzLmNvbmZpZy5zaG93WUF4aXMmJiEhKHRoaXMuZGF0YS55QXhpc1RvcFRleHR8fHRoaXMuZGF0YS55QXhpc0JvdHRvbVRleHQpLHA9dGhpcy5jb25maWcuc2hvd1RpdGxlJiYhIXRoaXMuZGF0YS50aXRsZVRleHQsdj10aGlzLmRhdGEucG9pbnRzLmxlbmd0aD4wPyJib3R0b20iOnRoaXMuY29uZmlnLnhBeGlzUG9zaXRpb24sbT10aGlzLmNhbGN1bGF0ZVNwYWNlKHYsYSxmLHApO3JldHVybntwb2ludHM6dGhpcy5nZXRRdWFkcmFudFBvaW50cyhtKSxxdWFkcmFudHM6dGhpcy5nZXRRdWFkcmFudHMobSksYXhpc0xhYmVsczp0aGlzLmdldEF4aXNMYWJlbHModixhLGYsbSksYm9yZGVyTGluZXM6dGhpcy5nZXRCb3JkZXJzKG0pLHRpdGxlOnRoaXMuZ2V0VGl0bGUocCl9fX1jb25zdCBMcWU9RGUoKTtmdW5jdGlvbiBENShpKXtyZXR1cm4gdjAoaS50cmltKCksTHFlKX1jb25zdCBrMD1uZXcgQXFlO2Z1bmN0aW9uIE1xZShpKXtrMC5zZXREYXRhKHtxdWFkcmFudDFUZXh0OkQ1KGkudGV4dCl9KX1mdW5jdGlvbiBEcWUoaSl7azAuc2V0RGF0YSh7cXVhZHJhbnQyVGV4dDpENShpLnRleHQpfSl9ZnVuY3Rpb24gSXFlKGkpe2swLnNldERhdGEoe3F1YWRyYW50M1RleHQ6RDUoaS50ZXh0KX0pfWZ1bmN0aW9uIE9xZShpKXtrMC5zZXREYXRhKHtxdWFkcmFudDRUZXh0OkQ1KGkudGV4dCl9KX1mdW5jdGlvbiBOcWUoaSl7azAuc2V0RGF0YSh7eEF4aXNMZWZ0VGV4dDpENShpLnRleHQpfSl9ZnVuY3Rpb24gUHFlKGkpe2swLnNldERhdGEoe3hBeGlzUmlnaHRUZXh0OkQ1KGkudGV4dCl9KX1mdW5jdGlvbiBGcWUoaSl7azAuc2V0RGF0YSh7eUF4aXNUb3BUZXh0OkQ1KGkudGV4dCl9KX1mdW5jdGlvbiBCcWUoaSl7azAuc2V0RGF0YSh7eUF4aXNCb3R0b21UZXh0OkQ1KGkudGV4dCl9KX1mdW5jdGlvbiBScWUoaSxhLGYpe2swLmFkZFBvaW50cyhbe3g6YSx5OmYsdGV4dDpENShpLnRleHQpfV0pfWZ1bmN0aW9uIGpxZShpKXtrMC5zZXRDb25maWcoe2NoYXJ0V2lkdGg6aX0pfWZ1bmN0aW9uICRxZShpKXtrMC5zZXRDb25maWcoe2NoYXJ0SGVpZ2h0Oml9KX1mdW5jdGlvbiB6cWUoKXtjb25zdCBpPURlKCkse3RoZW1lVmFyaWFibGVzOmEscXVhZHJhbnRDaGFydDpmfT1pO3JldHVybiBmJiZrMC5zZXRDb25maWcoZiksazAuc2V0VGhlbWVDb25maWcoe3F1YWRyYW50MUZpbGw6YS5xdWFkcmFudDFGaWxsLHF1YWRyYW50MkZpbGw6YS5xdWFkcmFudDJGaWxsLHF1YWRyYW50M0ZpbGw6YS5xdWFkcmFudDNGaWxsLHF1YWRyYW50NEZpbGw6YS5xdWFkcmFudDRGaWxsLHF1YWRyYW50MVRleHRGaWxsOmEucXVhZHJhbnQxVGV4dEZpbGwscXVhZHJhbnQyVGV4dEZpbGw6YS5xdWFkcmFudDJUZXh0RmlsbCxxdWFkcmFudDNUZXh0RmlsbDphLnF1YWRyYW50M1RleHRGaWxsLHF1YWRyYW50NFRleHRGaWxsOmEucXVhZHJhbnQ0VGV4dEZpbGwscXVhZHJhbnRQb2ludEZpbGw6YS5xdWFkcmFudFBvaW50RmlsbCxxdWFkcmFudFBvaW50VGV4dEZpbGw6YS5xdWFkcmFudFBvaW50VGV4dEZpbGwscXVhZHJhbnRYQXhpc1RleHRGaWxsOmEucXVhZHJhbnRYQXhpc1RleHRGaWxsLHF1YWRyYW50WUF4aXNUZXh0RmlsbDphLnF1YWRyYW50WUF4aXNUZXh0RmlsbCxxdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbDphLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsOmEucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGwscXVhZHJhbnRUaXRsZUZpbGw6YS5xdWFkcmFudFRpdGxlRmlsbH0pLGswLnNldERhdGEoe3RpdGxlVGV4dDpocCgpfSksazAuYnVpbGQoKX1jb25zdCBxcWU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpTcWUsZGI6e3NldFdpZHRoOmpxZSxzZXRIZWlnaHQ6JHFlLHNldFF1YWRyYW50MVRleHQ6TXFlLHNldFF1YWRyYW50MlRleHQ6RHFlLHNldFF1YWRyYW50M1RleHQ6SXFlLHNldFF1YWRyYW50NFRleHQ6T3FlLHNldFhBeGlzTGVmdFRleHQ6TnFlLHNldFhBeGlzUmlnaHRUZXh0OlBxZSxzZXRZQXhpc1RvcFRleHQ6RnFlLHNldFlBeGlzQm90dG9tVGV4dDpCcWUsYWRkUG9pbnQ6UnFlLGdldFF1YWRyYW50RGF0YTp6cWUscGFyc2VEaXJlY3RpdmU6ZnVuY3Rpb24oaSxhLGYpe0oxLnBhcnNlRGlyZWN0aXZlKHRoaXMsaSxhLGYpfSxjbGVhcjpmdW5jdGlvbigpe2swLmNsZWFyKCksY2coKX0sc2V0QWNjVGl0bGU6bTAsZ2V0QWNjVGl0bGU6dWcsc2V0RGlhZ3JhbVRpdGxlOk5iLGdldERpYWdyYW1UaXRsZTpocCxnZXRBY2NEZXNjcmlwdGlvbjpoZyxzZXRBY2NEZXNjcmlwdGlvbjpsZ30scmVuZGVyZXI6e2RyYXc6KGksYSxmLHApPT57dmFyIHl0LHN0LHh0O2Z1bmN0aW9uIHYoaHQpe3JldHVybiBodD09PSJ0b3AiPyJoYW5naW5nIjoibWlkZGxlIn1mdW5jdGlvbiBtKGh0KXtyZXR1cm4gaHQ9PT0ibGVmdCI/InN0YXJ0IjoibWlkZGxlIn1mdW5jdGlvbiBiKGh0KXtyZXR1cm5gdHJhbnNsYXRlKCR7aHQueH0sICR7aHQueX0pIHJvdGF0ZSgke2h0LnJvdGF0aW9ufHwwfSlgfWNvbnN0IEU9RGUoKTtXdC5kZWJ1ZyhgUmVuZGVyaW5nIHF1YWRyYW50IGNoYXJ0CmAraSk7Y29uc3QgQz1FLnNlY3VyaXR5TGV2ZWw7bGV0IEE7Qz09PSJzYW5kYm94IiYmKEE9eHIoIiNpIithKSk7Y29uc3QgRj14cihDPT09InNhbmRib3giP0Eubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLnNlbGVjdChgW2lkPSIke2F9Il1gKSxqPUYuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJtYWluIiksUj0oKHl0PUUucXVhZHJhbnRDaGFydCk9PW51bGw/dm9pZCAwOnl0LmNoYXJ0V2lkdGgpfHw1MDAsSD0oKHN0PUUucXVhZHJhbnRDaGFydCk9PW51bGw/dm9pZCAwOnN0LmNoYXJ0SGVpZ2h0KXx8NTAwO29nKEYsSCxSLCgoeHQ9RS5xdWFkcmFudENoYXJ0KT09bnVsbD92b2lkIDA6eHQudXNlTWF4V2lkdGgpfHwhMCksRi5hdHRyKCJ2aWV3Qm94IiwiMCAwICIrUisiICIrSCkscC5kYi5zZXRIZWlnaHQoSCkscC5kYi5zZXRXaWR0aChSKTtjb25zdCBZPXAuZGIuZ2V0UXVhZHJhbnREYXRhKCkscnQ9ai5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInF1YWRyYW50cyIpLEo9ai5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImJvcmRlciIpLGl0PWouYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJkYXRhLXBvaW50cyIpLGZ0PWouYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbHMiKSxUdD1qLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidGl0bGUiKTtZLnRpdGxlJiZUdC5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJmaWxsIixZLnRpdGxlLmZpbGwpLmF0dHIoImZvbnQtc2l6ZSIsWS50aXRsZS5mb250U2l6ZSkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLHYoWS50aXRsZS5ob3Jpem9udGFsUG9zKSkuYXR0cigidGV4dC1hbmNob3IiLG0oWS50aXRsZS52ZXJ0aWNhbFBvcykpLmF0dHIoInRyYW5zZm9ybSIsYihZLnRpdGxlKSkudGV4dChZLnRpdGxlLnRleHQpLFkuYm9yZGVyTGluZXMmJkouc2VsZWN0QWxsKCJsaW5lIikuZGF0YShZLmJvcmRlckxpbmVzKS5lbnRlcigpLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixodD0+aHQueDEpLmF0dHIoInkxIixodD0+aHQueTEpLmF0dHIoIngyIixodD0+aHQueDIpLmF0dHIoInkyIixodD0+aHQueTIpLnN0eWxlKCJzdHJva2UiLGh0PT5odC5zdHJva2VGaWxsKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixodD0+aHQuc3Ryb2tlV2lkdGgpO2NvbnN0IGt0PXJ0LnNlbGVjdEFsbCgiZy5xdWFkcmFudCIpLmRhdGEoWS5xdWFkcmFudHMpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJxdWFkcmFudCIpO2t0LmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLGh0PT5odC54KS5hdHRyKCJ5IixodD0+aHQueSkuYXR0cigid2lkdGgiLGh0PT5odC53aWR0aCkuYXR0cigiaGVpZ2h0IixodD0+aHQuaGVpZ2h0KS5hdHRyKCJmaWxsIixodD0+aHQuZmlsbCksa3QuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigiZmlsbCIsaHQ9Pmh0LnRleHQuZmlsbCkuYXR0cigiZm9udC1zaXplIixodD0+aHQudGV4dC5mb250U2l6ZSkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLGh0PT52KGh0LnRleHQuaG9yaXpvbnRhbFBvcykpLmF0dHIoInRleHQtYW5jaG9yIixodD0+bShodC50ZXh0LnZlcnRpY2FsUG9zKSkuYXR0cigidHJhbnNmb3JtIixodD0+YihodC50ZXh0KSkudGV4dChodD0+aHQudGV4dC50ZXh0KSxmdC5zZWxlY3RBbGwoImcubGFiZWwiKS5kYXRhKFkuYXhpc0xhYmVscykuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMCkuYXR0cigieSIsMCkudGV4dChodD0+aHQudGV4dCkuYXR0cigiZmlsbCIsaHQ9Pmh0LmZpbGwpLmF0dHIoImZvbnQtc2l6ZSIsaHQ9Pmh0LmZvbnRTaXplKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsaHQ9PnYoaHQuaG9yaXpvbnRhbFBvcykpLmF0dHIoInRleHQtYW5jaG9yIixodD0+bShodC52ZXJ0aWNhbFBvcykpLmF0dHIoInRyYW5zZm9ybSIsaHQ9PmIoaHQpKTtjb25zdCBjdD1pdC5zZWxlY3RBbGwoImcuZGF0YS1wb2ludCIpLmRhdGEoWS5wb2ludHMpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJkYXRhLXBvaW50Iik7Y3QuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsaHQ9Pmh0LngpLmF0dHIoImN5IixodD0+aHQueSkuYXR0cigiciIsaHQ9Pmh0LnJhZGl1cykuYXR0cigiZmlsbCIsaHQ9Pmh0LmZpbGwpLGN0LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLnRleHQoaHQ9Pmh0LnRleHQudGV4dCkuYXR0cigiZmlsbCIsaHQ9Pmh0LnRleHQuZmlsbCkuYXR0cigiZm9udC1zaXplIixodD0+aHQudGV4dC5mb250U2l6ZSkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLGh0PT52KGh0LnRleHQuaG9yaXpvbnRhbFBvcykpLmF0dHIoInRleHQtYW5jaG9yIixodD0+bShodC50ZXh0LnZlcnRpY2FsUG9zKSkuYXR0cigidHJhbnNmb3JtIixodD0+YihodC50ZXh0KSl9fSxzdHlsZXM6KCk9PiIifX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgSjB0PWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24oV24sQWUsbmUsa2Upe2ZvcihuZT1uZXx8e30sa2U9V24ubGVuZ3RoO2tlLS07bmVbV25ba2VdXT1BZSk7cmV0dXJuIG5lfSxhPVsxLDNdLGY9WzEsNV0scD1bMSw2XSx2PVsxLDddLG09WzEsOF0sYj1bNSw2LDgsMTQsMTYsMTgsMTksNDAsNDEsNDIsNDMsNDQsNDUsNTMsNzEsNzJdLEU9WzEsMjJdLEM9WzIsMTNdLEE9WzEsMjZdLFA9WzEsMjddLEY9WzEsMjhdLGo9WzEsMjldLFI9WzEsMzBdLEg9WzEsMzFdLFk9WzEsMjRdLHJ0PVsxLDMyXSxKPVsxLDMzXSxpdD1bMSwzNl0sZnQ9WzcxLDcyXSxUdD1bNSw4LDE0LDE2LDE4LDE5LDQwLDQxLDQyLDQzLDQ0LDQ1LDUzLDYwLDYyLDcxLDcyXSxrdD1bMSw1Nl0sbXQ9WzEsNTddLGN0PVsxLDU4XSx5dD1bMSw1OV0sc3Q9WzEsNjBdLHh0PVsxLDYxXSxodD1bMSw2Ml0sZHQ9WzYyLDYzXSxDdD1bMSw3NF0sdHQ9WzEsNzBdLFB0PVsxLDcxXSxwdD1bMSw3Ml0sRnQ9WzEsNzNdLFg9WzEsNzVdLFJ0PVsxLDc5XSxCdD1bMSw4MF0sdnQ9WzEsNzddLE90PVsxLDc4XSxWdD1bNSw4LDE0LDE2LDE4LDE5LDQwLDQxLDQyLDQzLDQ0LDQ1LDUzLDcxLDcyXSxxZT17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsZGlyZWN0aXZlOjQsTkVXTElORTo1LFJEOjYsZGlhZ3JhbTo3LEVPRjo4LG9wZW5EaXJlY3RpdmU6OSx0eXBlRGlyZWN0aXZlOjEwLGNsb3NlRGlyZWN0aXZlOjExLCI6IjoxMixhcmdEaXJlY3RpdmU6MTMsYWNjX3RpdGxlOjE0LGFjY190aXRsZV92YWx1ZToxNSxhY2NfZGVzY3I6MTYsYWNjX2Rlc2NyX3ZhbHVlOjE3LGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MTgsb3Blbl9kaXJlY3RpdmU6MTksdHlwZV9kaXJlY3RpdmU6MjAsYXJnX2RpcmVjdGl2ZToyMSxjbG9zZV9kaXJlY3RpdmU6MjIscmVxdWlyZW1lbnREZWY6MjMsZWxlbWVudERlZjoyNCxyZWxhdGlvbnNoaXBEZWY6MjUscmVxdWlyZW1lbnRUeXBlOjI2LHJlcXVpcmVtZW50TmFtZToyNyxTVFJVQ1RfU1RBUlQ6MjgscmVxdWlyZW1lbnRCb2R5OjI5LElEOjMwLENPTE9OU0VQOjMxLGlkOjMyLFRFWFQ6MzMsdGV4dDozNCxSSVNLOjM1LHJpc2tMZXZlbDozNixWRVJJRllNVEhEOjM3LHZlcmlmeVR5cGU6MzgsU1RSVUNUX1NUT1A6MzksUkVRVUlSRU1FTlQ6NDAsRlVOQ1RJT05BTF9SRVFVSVJFTUVOVDo0MSxJTlRFUkZBQ0VfUkVRVUlSRU1FTlQ6NDIsUEVSRk9STUFOQ0VfUkVRVUlSRU1FTlQ6NDMsUEhZU0lDQUxfUkVRVUlSRU1FTlQ6NDQsREVTSUdOX0NPTlNUUkFJTlQ6NDUsTE9XX1JJU0s6NDYsTUVEX1JJU0s6NDcsSElHSF9SSVNLOjQ4LFZFUklGWV9BTkFMWVNJUzo0OSxWRVJJRllfREVNT05TVFJBVElPTjo1MCxWRVJJRllfSU5TUEVDVElPTjo1MSxWRVJJRllfVEVTVDo1MixFTEVNRU5UOjUzLGVsZW1lbnROYW1lOjU0LGVsZW1lbnRCb2R5OjU1LFRZUEU6NTYsdHlwZTo1NyxET0NSRUY6NTgscmVmOjU5LEVORF9BUlJPV19MOjYwLHJlbGF0aW9uc2hpcDo2MSxMSU5FOjYyLEVORF9BUlJPV19SOjYzLENPTlRBSU5TOjY0LENPUElFUzo2NSxERVJJVkVTOjY2LFNBVElTRklFUzo2NyxWRVJJRklFUzo2OCxSRUZJTkVTOjY5LFRSQUNFUzo3MCx1bnFTdHJpbmc6NzEscVN0cmluZzo3MiwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNToiTkVXTElORSIsNjoiUkQiLDg6IkVPRiIsMTI6IjoiLDE0OiJhY2NfdGl0bGUiLDE1OiJhY2NfdGl0bGVfdmFsdWUiLDE2OiJhY2NfZGVzY3IiLDE3OiJhY2NfZGVzY3JfdmFsdWUiLDE4OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwxOToib3Blbl9kaXJlY3RpdmUiLDIwOiJ0eXBlX2RpcmVjdGl2ZSIsMjE6ImFyZ19kaXJlY3RpdmUiLDIyOiJjbG9zZV9kaXJlY3RpdmUiLDI4OiJTVFJVQ1RfU1RBUlQiLDMwOiJJRCIsMzE6IkNPTE9OU0VQIiwzMzoiVEVYVCIsMzU6IlJJU0siLDM3OiJWRVJJRllNVEhEIiwzOToiU1RSVUNUX1NUT1AiLDQwOiJSRVFVSVJFTUVOVCIsNDE6IkZVTkNUSU9OQUxfUkVRVUlSRU1FTlQiLDQyOiJJTlRFUkZBQ0VfUkVRVUlSRU1FTlQiLDQzOiJQRVJGT1JNQU5DRV9SRVFVSVJFTUVOVCIsNDQ6IlBIWVNJQ0FMX1JFUVVJUkVNRU5UIiw0NToiREVTSUdOX0NPTlNUUkFJTlQiLDQ2OiJMT1dfUklTSyIsNDc6Ik1FRF9SSVNLIiw0ODoiSElHSF9SSVNLIiw0OToiVkVSSUZZX0FOQUxZU0lTIiw1MDoiVkVSSUZZX0RFTU9OU1RSQVRJT04iLDUxOiJWRVJJRllfSU5TUEVDVElPTiIsNTI6IlZFUklGWV9URVNUIiw1MzoiRUxFTUVOVCIsNTY6IlRZUEUiLDU4OiJET0NSRUYiLDYwOiJFTkRfQVJST1dfTCIsNjI6IkxJTkUiLDYzOiJFTkRfQVJST1dfUiIsNjQ6IkNPTlRBSU5TIiw2NToiQ09QSUVTIiw2NjoiREVSSVZFUyIsNjc6IlNBVElTRklFUyIsNjg6IlZFUklGSUVTIiw2OToiUkVGSU5FUyIsNzA6IlRSQUNFUyIsNzE6InVucVN0cmluZyIsNzI6InFTdHJpbmcifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzMsMl0sWzMsNF0sWzQsM10sWzQsNV0sWzQsMl0sWzQsMl0sWzQsMV0sWzksMV0sWzEwLDFdLFsxMywxXSxbMTEsMV0sWzcsMF0sWzcsMl0sWzcsMl0sWzcsMl0sWzcsMl0sWzcsMl0sWzIzLDVdLFsyOSw1XSxbMjksNV0sWzI5LDVdLFsyOSw1XSxbMjksMl0sWzI5LDFdLFsyNiwxXSxbMjYsMV0sWzI2LDFdLFsyNiwxXSxbMjYsMV0sWzI2LDFdLFszNiwxXSxbMzYsMV0sWzM2LDFdLFszOCwxXSxbMzgsMV0sWzM4LDFdLFszOCwxXSxbMjQsNV0sWzU1LDVdLFs1NSw1XSxbNTUsMl0sWzU1LDFdLFsyNSw1XSxbMjUsNV0sWzYxLDFdLFs2MSwxXSxbNjEsMV0sWzYxLDFdLFs2MSwxXSxbNjEsMV0sWzYxLDFdLFsyNywxXSxbMjcsMV0sWzMyLDFdLFszMiwxXSxbMzQsMV0sWzM0LDFdLFs1NCwxXSxbNTQsMV0sWzU3LDFdLFs1NywxXSxbNTksMV0sWzU5LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKEFlLG5lLGtlLFZlLEVlLEhlLENlKXt2YXIgJGU9SGUubGVuZ3RoLTE7c3dpdGNoKEVlKXtjYXNlIDY6dGhpcy4kPUhlWyRlXS50cmltKCksVmUuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDc6Y2FzZSA4OnRoaXMuJD1IZVskZV0udHJpbSgpLFZlLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSA5OlZlLnBhcnNlRGlyZWN0aXZlKCIlJXsiLCJvcGVuX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMTA6VmUucGFyc2VEaXJlY3RpdmUoSGVbJGVdLCJ0eXBlX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMTE6SGVbJGVdPUhlWyRlXS50cmltKCkucmVwbGFjZSgvJy9nLCciJyksVmUucGFyc2VEaXJlY3RpdmUoSGVbJGVdLCJhcmdfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAxMjpWZS5wYXJzZURpcmVjdGl2ZSgifSUlIiwiY2xvc2VfZGlyZWN0aXZlIiwicGllIik7YnJlYWs7Y2FzZSAxMzp0aGlzLiQ9W107YnJlYWs7Y2FzZSAxOTpWZS5hZGRSZXF1aXJlbWVudChIZVskZS0zXSxIZVskZS00XSk7YnJlYWs7Y2FzZSAyMDpWZS5zZXROZXdSZXFJZChIZVskZS0yXSk7YnJlYWs7Y2FzZSAyMTpWZS5zZXROZXdSZXFUZXh0KEhlWyRlLTJdKTticmVhaztjYXNlIDIyOlZlLnNldE5ld1JlcVJpc2soSGVbJGUtMl0pO2JyZWFrO2Nhc2UgMjM6VmUuc2V0TmV3UmVxVmVyaWZ5TWV0aG9kKEhlWyRlLTJdKTticmVhaztjYXNlIDI2OnRoaXMuJD1WZS5SZXF1aXJlbWVudFR5cGUuUkVRVUlSRU1FTlQ7YnJlYWs7Y2FzZSAyNzp0aGlzLiQ9VmUuUmVxdWlyZW1lbnRUeXBlLkZVTkNUSU9OQUxfUkVRVUlSRU1FTlQ7YnJlYWs7Y2FzZSAyODp0aGlzLiQ9VmUuUmVxdWlyZW1lbnRUeXBlLklOVEVSRkFDRV9SRVFVSVJFTUVOVDticmVhaztjYXNlIDI5OnRoaXMuJD1WZS5SZXF1aXJlbWVudFR5cGUuUEVSRk9STUFOQ0VfUkVRVUlSRU1FTlQ7YnJlYWs7Y2FzZSAzMDp0aGlzLiQ9VmUuUmVxdWlyZW1lbnRUeXBlLlBIWVNJQ0FMX1JFUVVJUkVNRU5UO2JyZWFrO2Nhc2UgMzE6dGhpcy4kPVZlLlJlcXVpcmVtZW50VHlwZS5ERVNJR05fQ09OU1RSQUlOVDticmVhaztjYXNlIDMyOnRoaXMuJD1WZS5SaXNrTGV2ZWwuTE9XX1JJU0s7YnJlYWs7Y2FzZSAzMzp0aGlzLiQ9VmUuUmlza0xldmVsLk1FRF9SSVNLO2JyZWFrO2Nhc2UgMzQ6dGhpcy4kPVZlLlJpc2tMZXZlbC5ISUdIX1JJU0s7YnJlYWs7Y2FzZSAzNTp0aGlzLiQ9VmUuVmVyaWZ5VHlwZS5WRVJJRllfQU5BTFlTSVM7YnJlYWs7Y2FzZSAzNjp0aGlzLiQ9VmUuVmVyaWZ5VHlwZS5WRVJJRllfREVNT05TVFJBVElPTjticmVhaztjYXNlIDM3OnRoaXMuJD1WZS5WZXJpZnlUeXBlLlZFUklGWV9JTlNQRUNUSU9OO2JyZWFrO2Nhc2UgMzg6dGhpcy4kPVZlLlZlcmlmeVR5cGUuVkVSSUZZX1RFU1Q7YnJlYWs7Y2FzZSAzOTpWZS5hZGRFbGVtZW50KEhlWyRlLTNdKTticmVhaztjYXNlIDQwOlZlLnNldE5ld0VsZW1lbnRUeXBlKEhlWyRlLTJdKTticmVhaztjYXNlIDQxOlZlLnNldE5ld0VsZW1lbnREb2NSZWYoSGVbJGUtMl0pO2JyZWFrO2Nhc2UgNDQ6VmUuYWRkUmVsYXRpb25zaGlwKEhlWyRlLTJdLEhlWyRlXSxIZVskZS00XSk7YnJlYWs7Y2FzZSA0NTpWZS5hZGRSZWxhdGlvbnNoaXAoSGVbJGUtMl0sSGVbJGUtNF0sSGVbJGVdKTticmVhaztjYXNlIDQ2OnRoaXMuJD1WZS5SZWxhdGlvbnNoaXBzLkNPTlRBSU5TO2JyZWFrO2Nhc2UgNDc6dGhpcy4kPVZlLlJlbGF0aW9uc2hpcHMuQ09QSUVTO2JyZWFrO2Nhc2UgNDg6dGhpcy4kPVZlLlJlbGF0aW9uc2hpcHMuREVSSVZFUzticmVhaztjYXNlIDQ5OnRoaXMuJD1WZS5SZWxhdGlvbnNoaXBzLlNBVElTRklFUzticmVhaztjYXNlIDUwOnRoaXMuJD1WZS5SZWxhdGlvbnNoaXBzLlZFUklGSUVTO2JyZWFrO2Nhc2UgNTE6dGhpcy4kPVZlLlJlbGF0aW9uc2hpcHMuUkVGSU5FUzticmVhaztjYXNlIDUyOnRoaXMuJD1WZS5SZWxhdGlvbnNoaXBzLlRSQUNFUzticmVha319LHRhYmxlOlt7MzoxLDQ6Miw2OmEsOTo0LDE0OmYsMTY6cCwxODp2LDE5Om19LHsxOlszXX0sezM6MTAsNDoyLDU6WzEsOV0sNjphLDk6NCwxNDpmLDE2OnAsMTg6diwxOTptfSx7NTpbMSwxMV19LHsxMDoxMiwyMDpbMSwxM119LHsxNTpbMSwxNF19LHsxNzpbMSwxNV19LGkoYixbMiw4XSksezIwOlsyLDldfSx7MzoxNiw0OjIsNjphLDk6NCwxNDpmLDE2OnAsMTg6diwxOTptfSx7MTpbMiwyXX0sezQ6MjEsNTpFLDc6MTcsODpDLDk6NCwxNDpmLDE2OnAsMTg6diwxOTptLDIzOjE4LDI0OjE5LDI1OjIwLDI2OjIzLDMyOjI1LDQwOkEsNDE6UCw0MjpGLDQzOmosNDQ6Uiw0NTpILDUzOlksNzE6cnQsNzI6Sn0sezExOjM0LDEyOlsxLDM1XSwyMjppdH0saShbMTIsMjJdLFsyLDEwXSksaShiLFsyLDZdKSxpKGIsWzIsN10pLHsxOlsyLDFdfSx7ODpbMSwzN119LHs0OjIxLDU6RSw3OjM4LDg6Qyw5OjQsMTQ6ZiwxNjpwLDE4OnYsMTk6bSwyMzoxOCwyNDoxOSwyNToyMCwyNjoyMywzMjoyNSw0MDpBLDQxOlAsNDI6Riw0MzpqLDQ0OlIsNDU6SCw1MzpZLDcxOnJ0LDcyOkp9LHs0OjIxLDU6RSw3OjM5LDg6Qyw5OjQsMTQ6ZiwxNjpwLDE4OnYsMTk6bSwyMzoxOCwyNDoxOSwyNToyMCwyNjoyMywzMjoyNSw0MDpBLDQxOlAsNDI6Riw0MzpqLDQ0OlIsNDU6SCw1MzpZLDcxOnJ0LDcyOkp9LHs0OjIxLDU6RSw3OjQwLDg6Qyw5OjQsMTQ6ZiwxNjpwLDE4OnYsMTk6bSwyMzoxOCwyNDoxOSwyNToyMCwyNjoyMywzMjoyNSw0MDpBLDQxOlAsNDI6Riw0MzpqLDQ0OlIsNDU6SCw1MzpZLDcxOnJ0LDcyOkp9LHs0OjIxLDU6RSw3OjQxLDg6Qyw5OjQsMTQ6ZiwxNjpwLDE4OnYsMTk6bSwyMzoxOCwyNDoxOSwyNToyMCwyNjoyMywzMjoyNSw0MDpBLDQxOlAsNDI6Riw0MzpqLDQ0OlIsNDU6SCw1MzpZLDcxOnJ0LDcyOkp9LHs0OjIxLDU6RSw3OjQyLDg6Qyw5OjQsMTQ6ZiwxNjpwLDE4OnYsMTk6bSwyMzoxOCwyNDoxOSwyNToyMCwyNjoyMywzMjoyNSw0MDpBLDQxOlAsNDI6Riw0MzpqLDQ0OlIsNDU6SCw1MzpZLDcxOnJ0LDcyOkp9LHsyNzo0Myw3MTpbMSw0NF0sNzI6WzEsNDVdfSx7NTQ6NDYsNzE6WzEsNDddLDcyOlsxLDQ4XX0sezYwOlsxLDQ5XSw2MjpbMSw1MF19LGkoZnQsWzIsMjZdKSxpKGZ0LFsyLDI3XSksaShmdCxbMiwyOF0pLGkoZnQsWzIsMjldKSxpKGZ0LFsyLDMwXSksaShmdCxbMiwzMV0pLGkoVHQsWzIsNTVdKSxpKFR0LFsyLDU2XSksaShiLFsyLDRdKSx7MTM6NTEsMjE6WzEsNTJdfSxpKGIsWzIsMTJdKSx7MTpbMiwzXX0sezg6WzIsMTRdfSx7ODpbMiwxNV19LHs4OlsyLDE2XX0sezg6WzIsMTddfSx7ODpbMiwxOF19LHsyODpbMSw1M119LHsyODpbMiw1M119LHsyODpbMiw1NF19LHsyODpbMSw1NF19LHsyODpbMiw1OV19LHsyODpbMiw2MF19LHs2MTo1NSw2NDprdCw2NTptdCw2NjpjdCw2Nzp5dCw2ODpzdCw2OTp4dCw3MDpodH0sezYxOjYzLDY0Omt0LDY1Om10LDY2OmN0LDY3Onl0LDY4OnN0LDY5Onh0LDcwOmh0fSx7MTE6NjQsMjI6aXR9LHsyMjpbMiwxMV19LHs1OlsxLDY1XX0sezU6WzEsNjZdfSx7NjI6WzEsNjddfSxpKGR0LFsyLDQ2XSksaShkdCxbMiw0N10pLGkoZHQsWzIsNDhdKSxpKGR0LFsyLDQ5XSksaShkdCxbMiw1MF0pLGkoZHQsWzIsNTFdKSxpKGR0LFsyLDUyXSksezYzOlsxLDY4XX0saShiLFsyLDVdKSx7NTpDdCwyOTo2OSwzMDp0dCwzMzpQdCwzNTpwdCwzNzpGdCwzOTpYfSx7NTpSdCwzOTpCdCw1NTo3Niw1Njp2dCw1ODpPdH0sezMyOjgxLDcxOnJ0LDcyOkp9LHszMjo4Miw3MTpydCw3MjpKfSxpKFZ0LFsyLDE5XSksezMxOlsxLDgzXX0sezMxOlsxLDg0XX0sezMxOlsxLDg1XX0sezMxOlsxLDg2XX0sezU6Q3QsMjk6ODcsMzA6dHQsMzM6UHQsMzU6cHQsMzc6RnQsMzk6WH0saShWdCxbMiwyNV0pLGkoVnQsWzIsMzldKSx7MzE6WzEsODhdfSx7MzE6WzEsODldfSx7NTpSdCwzOTpCdCw1NTo5MCw1Njp2dCw1ODpPdH0saShWdCxbMiw0M10pLGkoVnQsWzIsNDRdKSxpKFZ0LFsyLDQ1XSksezMyOjkxLDcxOnJ0LDcyOkp9LHszNDo5Miw3MTpbMSw5M10sNzI6WzEsOTRdfSx7MzY6OTUsNDY6WzEsOTZdLDQ3OlsxLDk3XSw0ODpbMSw5OF19LHszODo5OSw0OTpbMSwxMDBdLDUwOlsxLDEwMV0sNTE6WzEsMTAyXSw1MjpbMSwxMDNdfSxpKFZ0LFsyLDI0XSksezU3OjEwNCw3MTpbMSwxMDVdLDcyOlsxLDEwNl19LHs1OToxMDcsNzE6WzEsMTA4XSw3MjpbMSwxMDldfSxpKFZ0LFsyLDQyXSksezU6WzEsMTEwXX0sezU6WzEsMTExXX0sezU6WzIsNTddfSx7NTpbMiw1OF19LHs1OlsxLDExMl19LHs1OlsyLDMyXX0sezU6WzIsMzNdfSx7NTpbMiwzNF19LHs1OlsxLDExM119LHs1OlsyLDM1XX0sezU6WzIsMzZdfSx7NTpbMiwzN119LHs1OlsyLDM4XX0sezU6WzEsMTE0XX0sezU6WzIsNjFdfSx7NTpbMiw2Ml19LHs1OlsxLDExNV19LHs1OlsyLDYzXX0sezU6WzIsNjRdfSx7NTpDdCwyOToxMTYsMzA6dHQsMzM6UHQsMzU6cHQsMzc6RnQsMzk6WH0sezU6Q3QsMjk6MTE3LDMwOnR0LDMzOlB0LDM1OnB0LDM3OkZ0LDM5Olh9LHs1OkN0LDI5OjExOCwzMDp0dCwzMzpQdCwzNTpwdCwzNzpGdCwzOTpYfSx7NTpDdCwyOToxMTksMzA6dHQsMzM6UHQsMzU6cHQsMzc6RnQsMzk6WH0sezU6UnQsMzk6QnQsNTU6MTIwLDU2OnZ0LDU4Ok90fSx7NTpSdCwzOTpCdCw1NToxMjEsNTY6dnQsNTg6T3R9LGkoVnQsWzIsMjBdKSxpKFZ0LFsyLDIxXSksaShWdCxbMiwyMl0pLGkoVnQsWzIsMjNdKSxpKFZ0LFsyLDQwXSksaShWdCxbMiw0MV0pXSxkZWZhdWx0QWN0aW9uczp7ODpbMiw5XSwxMDpbMiwyXSwxNjpbMiwxXSwzNzpbMiwzXSwzODpbMiwxNF0sMzk6WzIsMTVdLDQwOlsyLDE2XSw0MTpbMiwxN10sNDI6WzIsMThdLDQ0OlsyLDUzXSw0NTpbMiw1NF0sNDc6WzIsNTldLDQ4OlsyLDYwXSw1MjpbMiwxMV0sOTM6WzIsNTddLDk0OlsyLDU4XSw5NjpbMiwzMl0sOTc6WzIsMzNdLDk4OlsyLDM0XSwxMDA6WzIsMzVdLDEwMTpbMiwzNl0sMTAyOlsyLDM3XSwxMDM6WzIsMzhdLDEwNTpbMiw2MV0sMTA2OlsyLDYyXSwxMDg6WzIsNjNdLDEwOTpbMiw2NF19LHBhcnNlRXJyb3I6ZnVuY3Rpb24oQWUsbmUpe2lmKG5lLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoQWUpO2Vsc2V7dmFyIGtlPW5ldyBFcnJvcihBZSk7dGhyb3cga2UuaGFzaD1uZSxrZX19LHBhcnNlOmZ1bmN0aW9uKEFlKXt2YXIgbmU9dGhpcyxrZT1bMF0sVmU9W10sRWU9W251bGxdLEhlPVtdLENlPXRoaXMudGFibGUsJGU9IiIseWU9MCxmbj0wLFl0PTIsTWk9MSxxdD1IZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSx6aT1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLFNlPXt5eTp7fX07Zm9yKHZhciBraSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGtpKSYmKFNlLnl5W2tpXT10aGlzLnl5W2tpXSk7emkuc2V0SW5wdXQoQWUsU2UueXkpLFNlLnl5LmxleGVyPXppLFNlLnl5LnBhcnNlcj10aGlzLHR5cGVvZiB6aS55eWxsb2M+InUiJiYoemkueXlsbG9jPXt9KTt2YXIgUmk9emkueXlsbG9jO0hlLnB1c2goUmkpO3ZhciBwaT16aS5vcHRpb25zJiZ6aS5vcHRpb25zLnJhbmdlczt0eXBlb2YgU2UueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9U2UueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gYmkoKXt2YXIgcXI7cmV0dXJuIHFyPVZlLnBvcCgpfHx6aS5sZXgoKXx8TWksdHlwZW9mIHFyIT0ibnVtYmVyIiYmKHFyIGluc3RhbmNlb2YgQXJyYXkmJihWZT1xcixxcj1WZS5wb3AoKSkscXI9bmUuc3ltYm9sc19bcXJdfHxxcikscXJ9Zm9yKHZhciBkbixObixXcixMaSxpcz17fSxUcyxBYSxYaSxHYTs7KXtpZihObj1rZVtrZS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tObl0/V3I9dGhpcy5kZWZhdWx0QWN0aW9uc1tObl06KChkbj09PW51bGx8fHR5cGVvZiBkbj4idSIpJiYoZG49YmkoKSksV3I9Q2VbTm5dJiZDZVtObl1bZG5dKSx0eXBlb2YgV3I+InUifHwhV3IubGVuZ3RofHwhV3JbMF0pe3ZhciBfcj0iIjtHYT1bXTtmb3IoVHMgaW4gQ2VbTm5dKXRoaXMudGVybWluYWxzX1tUc10mJlRzPll0JiZHYS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bVHNdKyInIik7emkuc2hvd1Bvc2l0aW9uP19yPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKHllKzEpK2A6CmAremkuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtHYS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW2RuXXx8ZG4pKyInIjpfcj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyh5ZSsxKSsiOiBVbmV4cGVjdGVkICIrKGRuPT1NaT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tkbl18fGRuKSsiJyIpLHRoaXMucGFyc2VFcnJvcihfcix7dGV4dDp6aS5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bZG5dfHxkbixsaW5lOnppLnl5bGluZW5vLGxvYzpSaSxleHBlY3RlZDpHYX0pfWlmKFdyWzBdaW5zdGFuY2VvZiBBcnJheSYmV3IubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitObisiLCB0b2tlbjogIitkbik7c3dpdGNoKFdyWzBdKXtjYXNlIDE6a2UucHVzaChkbiksRWUucHVzaCh6aS55eXRleHQpLEhlLnB1c2goemkueXlsbG9jKSxrZS5wdXNoKFdyWzFdKSxkbj1udWxsLGZuPXppLnl5bGVuZywkZT16aS55eXRleHQseWU9emkueXlsaW5lbm8sUmk9emkueXlsbG9jO2JyZWFrO2Nhc2UgMjppZihBYT10aGlzLnByb2R1Y3Rpb25zX1tXclsxXV1bMV0saXMuJD1FZVtFZS5sZW5ndGgtQWFdLGlzLl8kPXtmaXJzdF9saW5lOkhlW0hlLmxlbmd0aC0oQWF8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpIZVtIZS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpIZVtIZS5sZW5ndGgtKEFhfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOkhlW0hlLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0scGkmJihpcy5fJC5yYW5nZT1bSGVbSGUubGVuZ3RoLShBYXx8MSldLnJhbmdlWzBdLEhlW0hlLmxlbmd0aC0xXS5yYW5nZVsxXV0pLExpPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShpcyxbJGUsZm4seWUsU2UueXksV3JbMV0sRWUsSGVdLmNvbmNhdChxdCkpLHR5cGVvZiBMaTwidSIpcmV0dXJuIExpO0FhJiYoa2U9a2Uuc2xpY2UoMCwtMSpBYSoyKSxFZT1FZS5zbGljZSgwLC0xKkFhKSxIZT1IZS5zbGljZSgwLC0xKkFhKSksa2UucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tXclsxXV1bMF0pLEVlLnB1c2goaXMuJCksSGUucHVzaChpcy5fJCksWGk9Q2Vba2Vba2UubGVuZ3RoLTJdXVtrZVtrZS5sZW5ndGgtMV1dLGtlLnB1c2goWGkpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxfbj1mdW5jdGlvbigpe3ZhciBXbj17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihuZSxrZSl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihuZSxrZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IobmUpfSxzZXRJbnB1dDpmdW5jdGlvbihBZSxuZSl7cmV0dXJuIHRoaXMueXk9bmV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PUFlLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBBZT10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9QWUsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPUFlLHRoaXMubWF0Y2hlZCs9QWU7dmFyIG5lPUFlLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gbmU/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLEFlfSx1bnB1dDpmdW5jdGlvbihBZSl7dmFyIG5lPUFlLmxlbmd0aCxrZT1BZS5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PUFlK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1uZSksdGhpcy5vZmZzZXQtPW5lO3ZhciBWZT10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxrZS5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPWtlLmxlbmd0aC0xKTt2YXIgRWU9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmtlPyhrZS5sZW5ndGg9PT1WZS5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK1ZlW1ZlLmxlbmd0aC1rZS5sZW5ndGhdLmxlbmd0aC1rZVswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLW5lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W0VlWzBdLEVlWzBdK3RoaXMueXlsZW5nLW5lXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24oQWUpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShBZSkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgQWU9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihBZS5sZW5ndGg+MjA/Ii4uLiI6IiIpK0FlLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIEFlPXRoaXMubWF0Y2g7cmV0dXJuIEFlLmxlbmd0aDwyMCYmKEFlKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1BZS5sZW5ndGgpKSwoQWUuc3Vic3RyKDAsMjApKyhBZS5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIEFlPXRoaXMucGFzdElucHV0KCksbmU9bmV3IEFycmF5KEFlLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIEFlK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtuZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oQWUsbmUpe3ZhciBrZSxWZSxFZTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoRWU9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoRWUueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksVmU9QWVbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLFZlJiYodGhpcy55eWxpbmVubys9VmUubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46VmU/VmVbVmUubGVuZ3RoLTFdLmxlbmd0aC1WZVtWZS5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitBZVswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1BZVswXSx0aGlzLm1hdGNoKz1BZVswXSx0aGlzLm1hdGNoZXM9QWUsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoQWVbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPUFlWzBdLGtlPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLG5lLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLGtlKXJldHVybiBrZTtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgSGUgaW4gRWUpdGhpc1tIZV09RWVbSGVdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIEFlLG5lLGtlLFZlO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIEVlPXRoaXMuX2N1cnJlbnRSdWxlcygpLEhlPTA7SGU8RWUubGVuZ3RoO0hlKyspaWYoa2U9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tFZVtIZV1dKSxrZSYmKCFuZXx8a2VbMF0ubGVuZ3RoPm5lWzBdLmxlbmd0aCkpe2lmKG5lPWtlLFZlPUhlLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKEFlPXRoaXMudGVzdF9tYXRjaChrZSxFZVtIZV0pLEFlIT09ITEpcmV0dXJuIEFlO2lmKHRoaXMuX2JhY2t0cmFjayl7bmU9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gbmU/KEFlPXRoaXMudGVzdF9tYXRjaChuZSxFZVtWZV0pLEFlIT09ITE/QWU6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciBuZT10aGlzLm5leHQoKTtyZXR1cm4gbmV8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKG5lKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2gobmUpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3ZhciBuZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBuZT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKG5lKXtyZXR1cm4gbmU9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhuZXx8MCksbmU+PTA/dGhpcy5jb25kaXRpb25TdGFja1tuZV06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24obmUpe3RoaXMuYmVnaW4obmUpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKG5lLGtlLFZlLEVlKXtzd2l0Y2goVmUpe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigib3Blbl9kaXJlY3RpdmUiKSwxOTtjYXNlIDE6cmV0dXJuIHRoaXMuYmVnaW4oInR5cGVfZGlyZWN0aXZlIiksMjA7Y2FzZSAyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiYXJnX2RpcmVjdGl2ZSIpLDEyO2Nhc2UgMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSwyMjtjYXNlIDQ6cmV0dXJuIDIxO2Nhc2UgNTpyZXR1cm4idGl0bGUiO2Nhc2UgNjpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMTQ7Y2FzZSA3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7Y2FzZSA4OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwxNjtjYXNlIDk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDEwOnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDExOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEyOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDEzOnJldHVybiA1O2Nhc2UgMTQ6YnJlYWs7Y2FzZSAxNTpicmVhaztjYXNlIDE2OmJyZWFrO2Nhc2UgMTc6cmV0dXJuIDg7Y2FzZSAxODpyZXR1cm4gNjtjYXNlIDE5OnJldHVybiAyODtjYXNlIDIwOnJldHVybiAzOTtjYXNlIDIxOnJldHVybiAzMTtjYXNlIDIyOnJldHVybiAzMDtjYXNlIDIzOnJldHVybiAzMztjYXNlIDI0OnJldHVybiAzNTtjYXNlIDI1OnJldHVybiAzNztjYXNlIDI2OnJldHVybiA0MDtjYXNlIDI3OnJldHVybiA0MTtjYXNlIDI4OnJldHVybiA0MjtjYXNlIDI5OnJldHVybiA0MztjYXNlIDMwOnJldHVybiA0NDtjYXNlIDMxOnJldHVybiA0NTtjYXNlIDMyOnJldHVybiA0NjtjYXNlIDMzOnJldHVybiA0NztjYXNlIDM0OnJldHVybiA0ODtjYXNlIDM1OnJldHVybiA0OTtjYXNlIDM2OnJldHVybiA1MDtjYXNlIDM3OnJldHVybiA1MTtjYXNlIDM4OnJldHVybiA1MjtjYXNlIDM5OnJldHVybiA1MztjYXNlIDQwOnJldHVybiA2NDtjYXNlIDQxOnJldHVybiA2NTtjYXNlIDQyOnJldHVybiA2NjtjYXNlIDQzOnJldHVybiA2NztjYXNlIDQ0OnJldHVybiA2ODtjYXNlIDQ1OnJldHVybiA2OTtjYXNlIDQ2OnJldHVybiA3MDtjYXNlIDQ3OnJldHVybiA1NjtjYXNlIDQ4OnJldHVybiA1ODtjYXNlIDQ5OnJldHVybiA2MDtjYXNlIDUwOnJldHVybiA2MztjYXNlIDUxOnJldHVybiA2MjtjYXNlIDUyOnRoaXMuYmVnaW4oInN0cmluZyIpO2JyZWFrO2Nhc2UgNTM6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNTQ6cmV0dXJuInFTdHJpbmciO2Nhc2UgNTU6cmV0dXJuIGtlLnl5dGV4dD1rZS55eXRleHQudHJpbSgpLDcxfX0scnVsZXM6Wy9eKD86JSVceykvaSwvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS9pLC9eKD86OikvaSwvXig/Olx9JSUpL2ksL14oPzooKD86KD8hXH0lJSkufFxuKSopKS9pLC9eKD86dGl0bGVcc1teI1xuO10rKS9pLC9eKD86YWNjVGl0bGVccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccypce1xzKikvaSwvXig/OltcfV0pL2ksL14oPzpbXlx9XSopL2ksL14oPzooXHI/XG4pKykvaSwvXig/OlxzKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzolW15cbl0qKS9pLC9eKD86JCkvaSwvXig/OnJlcXVpcmVtZW50RGlhZ3JhbVxiKS9pLC9eKD86XHspL2ksL14oPzpcfSkvaSwvXig/OjopL2ksL14oPzppZFxiKS9pLC9eKD86dGV4dFxiKS9pLC9eKD86cmlza1xiKS9pLC9eKD86dmVyaWZ5TWV0aG9kXGIpL2ksL14oPzpyZXF1aXJlbWVudFxiKS9pLC9eKD86ZnVuY3Rpb25hbFJlcXVpcmVtZW50XGIpL2ksL14oPzppbnRlcmZhY2VSZXF1aXJlbWVudFxiKS9pLC9eKD86cGVyZm9ybWFuY2VSZXF1aXJlbWVudFxiKS9pLC9eKD86cGh5c2ljYWxSZXF1aXJlbWVudFxiKS9pLC9eKD86ZGVzaWduQ29uc3RyYWludFxiKS9pLC9eKD86bG93XGIpL2ksL14oPzptZWRpdW1cYikvaSwvXig/OmhpZ2hcYikvaSwvXig/OmFuYWx5c2lzXGIpL2ksL14oPzpkZW1vbnN0cmF0aW9uXGIpL2ksL14oPzppbnNwZWN0aW9uXGIpL2ksL14oPzp0ZXN0XGIpL2ksL14oPzplbGVtZW50XGIpL2ksL14oPzpjb250YWluc1xiKS9pLC9eKD86Y29waWVzXGIpL2ksL14oPzpkZXJpdmVzXGIpL2ksL14oPzpzYXRpc2ZpZXNcYikvaSwvXig/OnZlcmlmaWVzXGIpL2ksL14oPzpyZWZpbmVzXGIpL2ksL14oPzp0cmFjZXNcYikvaSwvXig/OnR5cGVcYikvaSwvXig/OmRvY3JlZlxiKS9pLC9eKD86PC0pL2ksL14oPzotPikvaSwvXig/Oi0pL2ksL14oPzpbIl0pL2ksL14oPzpbIl0pL2ksL14oPzpbXiJdKikvaSwvXig/Oltcd11bXlxyXG5ce1w8XD5cLVw9XSopL2ldLGNvbmRpdGlvbnM6e2FjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlsxMSwxMl0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOls5XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzddLGluY2x1c2l2ZTohMX0sY2xvc2VfZGlyZWN0aXZlOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LGFyZ19kaXJlY3RpdmU6e3J1bGVzOlszLDRdLGluY2x1c2l2ZTohMX0sdHlwZV9kaXJlY3RpdmU6e3J1bGVzOlsyLDNdLGluY2x1c2l2ZTohMX0sb3Blbl9kaXJlY3RpdmU6e3J1bGVzOlsxXSxpbmNsdXNpdmU6ITF9LHVucVN0cmluZzp7cnVsZXM6W10saW5jbHVzaXZlOiExfSx0b2tlbjp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOls1Myw1NF0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCw1LDYsOCwxMCwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1NV0saW5jbHVzaXZlOiEwfX19O3JldHVybiBXbn0oKTtxZS5sZXhlcj1fbjtmdW5jdGlvbiBUZSgpe3RoaXMueXk9e319cmV0dXJuIFRlLnByb3RvdHlwZT1xZSxxZS5QYXJzZXI9VGUsbmV3IFRlfSgpO0owdC5wYXJzZXI9SjB0O2NvbnN0IEhxZT1KMHQ7bGV0IHRndD1bXSxwcD17fSxEUD17fSx1az17fSxJUD17fTtjb25zdCBWcWU9e1JlcXVpcmVtZW50VHlwZTp7UkVRVUlSRU1FTlQ6IlJlcXVpcmVtZW50IixGVU5DVElPTkFMX1JFUVVJUkVNRU5UOiJGdW5jdGlvbmFsIFJlcXVpcmVtZW50IixJTlRFUkZBQ0VfUkVRVUlSRU1FTlQ6IkludGVyZmFjZSBSZXF1aXJlbWVudCIsUEVSRk9STUFOQ0VfUkVRVUlSRU1FTlQ6IlBlcmZvcm1hbmNlIFJlcXVpcmVtZW50IixQSFlTSUNBTF9SRVFVSVJFTUVOVDoiUGh5c2ljYWwgUmVxdWlyZW1lbnQiLERFU0lHTl9DT05TVFJBSU5UOiJEZXNpZ24gQ29uc3RyYWludCJ9LFJpc2tMZXZlbDp7TE9XX1JJU0s6IkxvdyIsTUVEX1JJU0s6Ik1lZGl1bSIsSElHSF9SSVNLOiJIaWdoIn0sVmVyaWZ5VHlwZTp7VkVSSUZZX0FOQUxZU0lTOiJBbmFseXNpcyIsVkVSSUZZX0RFTU9OU1RSQVRJT046IkRlbW9uc3RyYXRpb24iLFZFUklGWV9JTlNQRUNUSU9OOiJJbnNwZWN0aW9uIixWRVJJRllfVEVTVDoiVGVzdCJ9LFJlbGF0aW9uc2hpcHM6e0NPTlRBSU5TOiJjb250YWlucyIsQ09QSUVTOiJjb3BpZXMiLERFUklWRVM6ImRlcml2ZXMiLFNBVElTRklFUzoic2F0aXNmaWVzIixWRVJJRklFUzoidmVyaWZpZXMiLFJFRklORVM6InJlZmluZXMiLFRSQUNFUzoidHJhY2VzIn0scGFyc2VEaXJlY3RpdmU6ZnVuY3Rpb24oaSxhLGYpe0oxLnBhcnNlRGlyZWN0aXZlKHRoaXMsaSxhLGYpfSxnZXRDb25maWc6KCk9PkRlKCkucmVxLGFkZFJlcXVpcmVtZW50OihpLGEpPT4oRFBbaV09PT12b2lkIDAmJihEUFtpXT17bmFtZTppLHR5cGU6YSxpZDpwcC5pZCx0ZXh0OnBwLnRleHQscmlzazpwcC5yaXNrLHZlcmlmeU1ldGhvZDpwcC52ZXJpZnlNZXRob2R9KSxwcD17fSxEUFtpXSksZ2V0UmVxdWlyZW1lbnRzOigpPT5EUCxzZXROZXdSZXFJZDppPT57cHAhPT12b2lkIDAmJihwcC5pZD1pKX0sc2V0TmV3UmVxVGV4dDppPT57cHAhPT12b2lkIDAmJihwcC50ZXh0PWkpfSxzZXROZXdSZXFSaXNrOmk9PntwcCE9PXZvaWQgMCYmKHBwLnJpc2s9aSl9LHNldE5ld1JlcVZlcmlmeU1ldGhvZDppPT57cHAhPT12b2lkIDAmJihwcC52ZXJpZnlNZXRob2Q9aSl9LHNldEFjY1RpdGxlOm0wLGdldEFjY1RpdGxlOnVnLHNldEFjY0Rlc2NyaXB0aW9uOmxnLGdldEFjY0Rlc2NyaXB0aW9uOmhnLGFkZEVsZW1lbnQ6aT0+KElQW2ldPT09dm9pZCAwJiYoSVBbaV09e25hbWU6aSx0eXBlOnVrLnR5cGUsZG9jUmVmOnVrLmRvY1JlZn0sV3QuaW5mbygiQWRkZWQgbmV3IHJlcXVpcmVtZW50OiAiLGkpKSx1az17fSxJUFtpXSksZ2V0RWxlbWVudHM6KCk9PklQLHNldE5ld0VsZW1lbnRUeXBlOmk9Pnt1ayE9PXZvaWQgMCYmKHVrLnR5cGU9aSl9LHNldE5ld0VsZW1lbnREb2NSZWY6aT0+e3VrIT09dm9pZCAwJiYodWsuZG9jUmVmPWkpfSxhZGRSZWxhdGlvbnNoaXA6KGksYSxmKT0+e3RndC5wdXNoKHt0eXBlOmksc3JjOmEsZHN0OmZ9KX0sZ2V0UmVsYXRpb25zaGlwczooKT0+dGd0LGNsZWFyOigpPT57dGd0PVtdLHBwPXt9LERQPXt9LHVrPXt9LElQPXt9LGNnKCl9fSxHcWU9aT0+YAoKICBtYXJrZXIgewogICAgZmlsbDogJHtpLnJlbGF0aW9uQ29sb3J9OwogICAgc3Ryb2tlOiAke2kucmVsYXRpb25Db2xvcn07CiAgfQoKICBtYXJrZXIuY3Jvc3MgewogICAgc3Ryb2tlOiAke2kubGluZUNvbG9yfTsKICB9CgogIHN2ZyB7CiAgICBmb250LWZhbWlseTogJHtpLmZvbnRGYW1pbHl9OwogICAgZm9udC1zaXplOiAke2kuZm9udFNpemV9OwogIH0KCiAgLnJlcUJveCB7CiAgICBmaWxsOiAke2kucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfTsKICAgIGZpbGwtb3BhY2l0eTogMS4wOwogICAgc3Ryb2tlOiAke2kucmVxdWlyZW1lbnRCb3JkZXJDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6ICR7aS5yZXF1aXJlbWVudEJvcmRlclNpemV9OwogIH0KICAKICAucmVxVGl0bGUsIC5yZXFMYWJlbHsKICAgIGZpbGw6ICAke2kucmVxdWlyZW1lbnRUZXh0Q29sb3J9OwogIH0KICAucmVxTGFiZWxCb3ggewogICAgZmlsbDogJHtpLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfTsKICAgIGZpbGwtb3BhY2l0eTogMS4wOwogIH0KCiAgLnJlcS10aXRsZS1saW5lIHsKICAgIHN0cm9rZTogJHtpLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAke2kucmVxdWlyZW1lbnRCb3JkZXJTaXplfTsKICB9CiAgLnJlbGF0aW9uc2hpcExpbmUgewogICAgc3Ryb2tlOiAke2kucmVsYXRpb25Db2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDE7CiAgfQogIC5yZWxhdGlvbnNoaXBMYWJlbCB7CiAgICBmaWxsOiAke2kucmVsYXRpb25MYWJlbENvbG9yfTsKICB9CgpgLGVndD17Q09OVEFJTlM6ImNvbnRhaW5zIixBUlJPVzoiYXJyb3cifSx1UnQ9e1JlcU1hcmtlcnM6ZWd0LGluc2VydExpbmVFbmRpbmdzOihpLGEpPT57bGV0IGY9aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlZ3QuQ09OVEFJTlMrIl9saW5lX2VuZGluZyIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLGEubGluZV9oZWlnaHQvMikuYXR0cigibWFya2VyV2lkdGgiLGEubGluZV9oZWlnaHQpLmF0dHIoIm1hcmtlckhlaWdodCIsYS5saW5lX2hlaWdodCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiZyIpO2YuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsYS5saW5lX2hlaWdodC8yKS5hdHRyKCJjeSIsYS5saW5lX2hlaWdodC8yKS5hdHRyKCJyIixhLmxpbmVfaGVpZ2h0LzIpLmF0dHIoImZpbGwiLCJub25lIiksZi5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieDIiLGEubGluZV9oZWlnaHQpLmF0dHIoInkxIixhLmxpbmVfaGVpZ2h0LzIpLmF0dHIoInkyIixhLmxpbmVfaGVpZ2h0LzIpLmF0dHIoInN0cm9rZS13aWR0aCIsMSksZi5hcHBlbmQoImxpbmUiKS5hdHRyKCJ5MSIsMCkuYXR0cigieTIiLGEubGluZV9oZWlnaHQpLmF0dHIoIngxIixhLmxpbmVfaGVpZ2h0LzIpLmF0dHIoIngyIixhLmxpbmVfaGVpZ2h0LzIpLmF0dHIoInN0cm9rZS13aWR0aCIsMSksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlZ3QuQVJST1crIl9saW5lX2VuZGluZyIpLmF0dHIoInJlZlgiLGEubGluZV9oZWlnaHQpLmF0dHIoInJlZlkiLC41KmEubGluZV9oZWlnaHQpLmF0dHIoIm1hcmtlcldpZHRoIixhLmxpbmVfaGVpZ2h0KS5hdHRyKCJtYXJrZXJIZWlnaHQiLGEubGluZV9oZWlnaHQpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixgTTAsMAogICAgICBMJHthLmxpbmVfaGVpZ2h0fSwke2EubGluZV9oZWlnaHQvMn0KICAgICAgTSR7YS5saW5lX2hlaWdodH0sJHthLmxpbmVfaGVpZ2h0LzJ9CiAgICAgIEwwLCR7YS5saW5lX2hlaWdodH1gKS5hdHRyKCJzdHJva2Utd2lkdGgiLDEpfX07bGV0IF9oPXt9LGxSdD0wO2NvbnN0IGhSdD0oaSxhKT0+aS5pbnNlcnQoInJlY3QiLCIjIithKS5hdHRyKCJjbGFzcyIsInJlcSByZXFCb3giKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIsX2gucmVjdF9taW5fd2lkdGgrInB4IikuYXR0cigiaGVpZ2h0IixfaC5yZWN0X21pbl9oZWlnaHQrInB4IiksZlJ0PShpLGEsZik9PntsZXQgcD1faC5yZWN0X21pbl93aWR0aC8yLHY9aS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInJlcSByZXFMYWJlbCByZXFUaXRsZSIpLmF0dHIoImlkIixhKS5hdHRyKCJ4IixwKS5hdHRyKCJ5IixfaC5yZWN0X3BhZGRpbmcpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiaGFuZ2luZyIpLG09MDtmLmZvckVhY2goQT0+e209PTA/di5hcHBlbmQoInRzcGFuIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJ4IixfaC5yZWN0X21pbl93aWR0aC8yKS5hdHRyKCJkeSIsMCkudGV4dChBKTp2LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoIngiLF9oLnJlY3RfbWluX3dpZHRoLzIpLmF0dHIoImR5IixfaC5saW5lX2hlaWdodCouNzUpLnRleHQoQSksbSsrfSk7bGV0IGI9MS41Kl9oLnJlY3RfcGFkZGluZyxFPW0qX2gubGluZV9oZWlnaHQqLjc1LEM9YitFO3JldHVybiBpLmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIiwicmVxLXRpdGxlLWxpbmUiKS5hdHRyKCJ4MSIsIjAiKS5hdHRyKCJ4MiIsX2gucmVjdF9taW5fd2lkdGgpLmF0dHIoInkxIixDKS5hdHRyKCJ5MiIsQykse3RpdGxlTm9kZTp2LHk6Q319LGRSdD0oaSxhLGYscCk9PntsZXQgdj1pLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwicmVxIHJlcUxhYmVsIikuYXR0cigiaWQiLGEpLmF0dHIoIngiLF9oLnJlY3RfcGFkZGluZykuYXR0cigieSIscCkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJoYW5naW5nIiksbT0wO2NvbnN0IGI9MzA7bGV0IEU9W107cmV0dXJuIGYuZm9yRWFjaChDPT57bGV0IEE9Qy5sZW5ndGg7Zm9yKDtBPmImJm08Mzspe2xldCBQPUMuc3Vic3RyaW5nKDAsYik7Qz1DLnN1YnN0cmluZyhiLEMubGVuZ3RoKSxBPUMubGVuZ3RoLEVbRS5sZW5ndGhdPVAsbSsrfWlmKG09PTMpe2xldCBQPUVbRS5sZW5ndGgtMV07RVtFLmxlbmd0aC0xXT1QLnN1YnN0cmluZygwLFAubGVuZ3RoLTQpKyIuLi4ifWVsc2UgRVtFLmxlbmd0aF09QzttPTB9KSxFLmZvckVhY2goQz0+e3YuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLF9oLnJlY3RfcGFkZGluZykuYXR0cigiZHkiLF9oLmxpbmVfaGVpZ2h0KS50ZXh0KEMpfSksdn0sVXFlPShpLGEsZixwKT0+e2NvbnN0IHY9YS5ub2RlKCkuZ2V0VG90YWxMZW5ndGgoKSxtPWEubm9kZSgpLmdldFBvaW50QXRMZW5ndGgodiouNSksYj0icmVsIitsUnQ7bFJ0Kys7Y29uc3QgQz1pLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwicmVxIHJlbGF0aW9uc2hpcExhYmVsIikuYXR0cigiaWQiLGIpLmF0dHIoIngiLG0ueCkuYXR0cigieSIsbS55KS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikudGV4dChwKS5ub2RlKCkuZ2V0QkJveCgpO2kuaW5zZXJ0KCJyZWN0IiwiIyIrYikuYXR0cigiY2xhc3MiLCJyZXEgcmVxTGFiZWxCb3giKS5hdHRyKCJ4IixtLngtQy53aWR0aC8yKS5hdHRyKCJ5IixtLnktQy5oZWlnaHQvMikuYXR0cigid2lkdGgiLEMud2lkdGgpLmF0dHIoImhlaWdodCIsQy5oZWlnaHQpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImZpbGwtb3BhY2l0eSIsIjg1JSIpfSxXcWU9ZnVuY3Rpb24oaSxhLGYscCx2KXtjb25zdCBtPWYuZWRnZShjTChhLnNyYyksY0woYS5kc3QpKSxiPVlFKCkueChmdW5jdGlvbihDKXtyZXR1cm4gQy54fSkueShmdW5jdGlvbihDKXtyZXR1cm4gQy55fSksRT1pLmluc2VydCgicGF0aCIsIiMiK3ApLmF0dHIoImNsYXNzIiwiZXIgcmVsYXRpb25zaGlwTGluZSIpLmF0dHIoImQiLGIobS5wb2ludHMpKS5hdHRyKCJmaWxsIiwibm9uZSIpO2EudHlwZT09di5kYi5SZWxhdGlvbnNoaXBzLkNPTlRBSU5TP0UuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrdWkuZ2V0VXJsKF9oLmFycm93TWFya2VyQWJzb2x1dGUpKyIjIithLnR5cGUrIl9saW5lX2VuZGluZykiKTooRS5hdHRyKCJzdHJva2UtZGFzaGFycmF5IiwiMTAsNyIpLEUuYXR0cigibWFya2VyLWVuZCIsInVybCgiK3VpLmdldFVybChfaC5hcnJvd01hcmtlckFic29sdXRlKSsiIyIrdVJ0LlJlcU1hcmtlcnMuQVJST1crIl9saW5lX2VuZGluZykiKSksVXFlKGksRSxfaCxgPDwke2EudHlwZX0+PmApfSxLcWU9KGksYSxmKT0+e09iamVjdC5rZXlzKGkpLmZvckVhY2gocD0+e2xldCB2PWlbcF07cD1jTChwKSxXdC5pbmZvKCJBZGRlZCBuZXcgcmVxdWlyZW1lbnQ6ICIscCk7Y29uc3QgbT1mLmFwcGVuZCgiZyIpLmF0dHIoImlkIixwKSxiPSJyZXEtIitwLEU9aFJ0KG0sYik7bGV0IEM9ZlJ0KG0scCsiX3RpdGxlIixbYDw8JHt2LnR5cGV9Pj5gLGAke3YubmFtZX1gXSk7ZFJ0KG0scCsiX2JvZHkiLFtgSWQ6ICR7di5pZH1gLGBUZXh0OiAke3YudGV4dH1gLGBSaXNrOiAke3Yucmlza31gLGBWZXJpZmljYXRpb246ICR7di52ZXJpZnlNZXRob2R9YF0sQy55KTtjb25zdCBBPUUubm9kZSgpLmdldEJCb3goKTthLnNldE5vZGUocCx7d2lkdGg6QS53aWR0aCxoZWlnaHQ6QS5oZWlnaHQsc2hhcGU6InJlY3QiLGlkOnB9KX0pfSxZcWU9KGksYSxmKT0+e09iamVjdC5rZXlzKGkpLmZvckVhY2gocD0+e2xldCB2PWlbcF07Y29uc3QgbT1jTChwKSxiPWYuYXBwZW5kKCJnIikuYXR0cigiaWQiLG0pLEU9ImVsZW1lbnQtIittLEM9aFJ0KGIsRSk7bGV0IEE9ZlJ0KGIsRSsiX3RpdGxlIixbIjw8RWxlbWVudD4+IixgJHtwfWBdKTtkUnQoYixFKyJfYm9keSIsW2BUeXBlOiAke3YudHlwZXx8Ik5vdCBTcGVjaWZpZWQifWAsYERvYyBSZWY6ICR7di5kb2NSZWZ8fCJOb25lIn1gXSxBLnkpO2NvbnN0IFA9Qy5ub2RlKCkuZ2V0QkJveCgpO2Euc2V0Tm9kZShtLHt3aWR0aDpQLndpZHRoLGhlaWdodDpQLmhlaWdodCxzaGFwZToicmVjdCIsaWQ6bX0pfSl9LFhxZT0oaSxhKT0+KGkuZm9yRWFjaChmdW5jdGlvbihmKXtsZXQgcD1jTChmLnNyYyksdj1jTChmLmRzdCk7YS5zZXRFZGdlKHAsdix7cmVsYXRpb25zaGlwOmZ9KX0pLGkpLFFxZT1mdW5jdGlvbihpLGEpe2Eubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe2YhPT12b2lkIDAmJmEubm9kZShmKSE9PXZvaWQgMCYmKGkuc2VsZWN0KCIjIitmKSxpLnNlbGVjdCgiIyIrZikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKGEubm9kZShmKS54LWEubm9kZShmKS53aWR0aC8yKSsiLCIrKGEubm9kZShmKS55LWEubm9kZShmKS5oZWlnaHQvMikrIiApIikpfSl9LGNMPWk9PmkucmVwbGFjZSgvXHMvZywiIikucmVwbGFjZSgvXC4vZywiXyIpLFpxZT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7cGFyc2VyOkhxZSxkYjpWcWUscmVuZGVyZXI6e2RyYXc6KGksYSxmLHApPT57X2g9RGUoKS5yZXF1aXJlbWVudDtjb25zdCB2PV9oLnNlY3VyaXR5TGV2ZWw7bGV0IG07dj09PSJzYW5kYm94IiYmKG09eHIoIiNpIithKSk7Y29uc3QgRT14cih2PT09InNhbmRib3giP20ubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLnNlbGVjdChgW2lkPScke2F9J11gKTt1UnQuaW5zZXJ0TGluZUVuZGluZ3MoRSxfaCk7Y29uc3QgQz1uZXcgbDEoe211bHRpZ3JhcGg6ITEsY29tcG91bmQ6ITEsZGlyZWN0ZWQ6ITB9KS5zZXRHcmFwaCh7cmFua2RpcjpfaC5sYXlvdXREaXJlY3Rpb24sbWFyZ2lueDoyMCxtYXJnaW55OjIwLG5vZGVzZXA6MTAwLGVkZ2VzZXA6MTAwLHJhbmtzZXA6MTAwfSkuc2V0RGVmYXVsdEVkZ2VMYWJlbChmdW5jdGlvbigpe3JldHVybnt9fSk7bGV0IEE9cC5kYi5nZXRSZXF1aXJlbWVudHMoKSxQPXAuZGIuZ2V0RWxlbWVudHMoKSxGPXAuZGIuZ2V0UmVsYXRpb25zaGlwcygpO0txZShBLEMsRSksWXFlKFAsQyxFKSxYcWUoRixDKSxuTChDKSxRcWUoRSxDKSxGLmZvckVhY2goZnVuY3Rpb24ocnQpe1dxZShFLHJ0LEMsYSxwKX0pO2NvbnN0IGo9X2gucmVjdF9wYWRkaW5nLFI9RS5ub2RlKCkuZ2V0QkJveCgpLEg9Ui53aWR0aCtqKjIsWT1SLmhlaWdodCtqKjI7b2coRSxZLEgsX2gudXNlTWF4V2lkdGgpLEUuYXR0cigidmlld0JveCIsYCR7Ui54LWp9ICR7Ui55LWp9ICR7SH0gJHtZfWApfX0sc3R5bGVzOkdxZX19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIG5ndD1mdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKEVlLEhlLENlLCRlKXtmb3IoQ2U9Q2V8fHt9LCRlPUVlLmxlbmd0aDskZS0tO0NlW0VlWyRlXV09SGUpO3JldHVybiBDZX0sYT1bMSwyXSxmPVsxLDNdLHA9WzEsNV0sdj1bMSw3XSxtPVsyLDVdLGI9WzEsMTVdLEU9WzEsMTddLEM9WzEsMTldLEE9WzEsMjBdLFA9WzEsMjJdLEY9WzEsMjNdLGo9WzEsMjRdLFI9WzEsMzBdLEg9WzEsMzFdLFk9WzEsMzJdLHJ0PVsxLDMzXSxKPVsxLDM0XSxpdD1bMSwzNV0sZnQ9WzEsMzZdLFR0PVsxLDM3XSxrdD1bMSwzOF0sbXQ9WzEsMzldLGN0PVsxLDQwXSx5dD1bMSw0MV0sc3Q9WzEsNDJdLHh0PVsxLDQ0XSxodD1bMSw0NV0sZHQ9WzEsNDZdLEN0PVsxLDQ4XSx0dD1bMSw0OV0sUHQ9WzEsNTBdLHB0PVsxLDUxXSxGdD1bMSw1Ml0sWD1bMSw1M10sUnQ9WzEsNTZdLEJ0PVsxLDQsNSwxOSwyMCwyMiwyNCwyNywyOSwzNSwzNiwzNywzOSw0MSw0Miw0Myw0NCw0NSw0Nyw0OSw1MCw1Miw1Myw1NCw1NSw1Niw1OCw1OSw2MCw2NSw2Niw2Nyw2OCw3Niw4Nl0sdnQ9WzQsNSwyMiw1Niw1OCw1OV0sT3Q9WzQsNSwxOSwyMCwyMiwyNCwyNywyOSwzNSwzNiwzNywzOSw0MSw0Miw0Myw0NCw0NSw0Nyw0OSw1MCw1Miw1Niw1OCw1OSw2MCw2NSw2Niw2Nyw2OCw3Niw4Nl0sVnQ9WzQsNSwxOSwyMCwyMiwyNCwyNywyOSwzNSwzNiwzNywzOSw0MSw0Miw0Myw0NCw0NSw0Nyw0OSw1MCw1Miw1NSw1Niw1OCw1OSw2MCw2NSw2Niw2Nyw2OCw3Niw4Nl0scWU9WzQsNSwxOSwyMCwyMiwyNCwyNywyOSwzNSwzNiwzNywzOSw0MSw0Miw0Myw0NCw0NSw0Nyw0OSw1MCw1Miw1NCw1Niw1OCw1OSw2MCw2NSw2Niw2Nyw2OCw3Niw4Nl0sX249WzQsNSwxOSwyMCwyMiwyNCwyNywyOSwzNSwzNiwzNywzOSw0MSw0Miw0Myw0NCw0NSw0Nyw0OSw1MCw1Miw1Myw1Niw1OCw1OSw2MCw2NSw2Niw2Nyw2OCw3Niw4Nl0sVGU9Wzc0LDc1LDc2XSxXbj1bMSwxMzNdLEFlPVsxLDQsNSw3LDE5LDIwLDIyLDI0LDI3LDI5LDM1LDM2LDM3LDM5LDQxLDQyLDQzLDQ0LDQ1LDQ3LDQ5LDUwLDUyLDUzLDU0LDU1LDU2LDU4LDU5LDYwLDY1LDY2LDY3LDY4LDc2LDg2XSxuZT17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsU1BBQ0U6NCxORVdMSU5FOjUsZGlyZWN0aXZlOjYsU0Q6Nyxkb2N1bWVudDo4LGxpbmU6OSxzdGF0ZW1lbnQ6MTAsYm94X3NlY3Rpb246MTEsYm94X2xpbmU6MTIscGFydGljaXBhbnRfc3RhdGVtZW50OjEzLG9wZW5EaXJlY3RpdmU6MTQsdHlwZURpcmVjdGl2ZToxNSxjbG9zZURpcmVjdGl2ZToxNiwiOiI6MTcsYXJnRGlyZWN0aXZlOjE4LGNyZWF0ZToxOSxib3g6MjAscmVzdE9mTGluZToyMSxlbmQ6MjIsc2lnbmFsOjIzLGF1dG9udW1iZXI6MjQsTlVNOjI1LG9mZjoyNixhY3RpdmF0ZToyNyxhY3RvcjoyOCxkZWFjdGl2YXRlOjI5LG5vdGVfc3RhdGVtZW50OjMwLGxpbmtzX3N0YXRlbWVudDozMSxsaW5rX3N0YXRlbWVudDozMixwcm9wZXJ0aWVzX3N0YXRlbWVudDozMyxkZXRhaWxzX3N0YXRlbWVudDozNCx0aXRsZTozNSxsZWdhY3lfdGl0bGU6MzYsYWNjX3RpdGxlOjM3LGFjY190aXRsZV92YWx1ZTozOCxhY2NfZGVzY3I6MzksYWNjX2Rlc2NyX3ZhbHVlOjQwLGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6NDEsbG9vcDo0MixyZWN0OjQzLG9wdDo0NCxhbHQ6NDUsZWxzZV9zZWN0aW9uczo0NixwYXI6NDcscGFyX3NlY3Rpb25zOjQ4LHBhcl9vdmVyOjQ5LGNyaXRpY2FsOjUwLG9wdGlvbl9zZWN0aW9uczo1MSxicmVhazo1MixvcHRpb246NTMsYW5kOjU0LGVsc2U6NTUscGFydGljaXBhbnQ6NTYsQVM6NTcscGFydGljaXBhbnRfYWN0b3I6NTgsZGVzdHJveTo1OSxub3RlOjYwLHBsYWNlbWVudDo2MSx0ZXh0Mjo2MixvdmVyOjYzLGFjdG9yX3BhaXI6NjQsbGlua3M6NjUsbGluazo2Nixwcm9wZXJ0aWVzOjY3LGRldGFpbHM6Njgsc3BhY2VMaXN0OjY5LCIsIjo3MCxsZWZ0X29mOjcxLHJpZ2h0X29mOjcyLHNpZ25hbHR5cGU6NzMsIisiOjc0LCItIjo3NSxBQ1RPUjo3NixTT0xJRF9PUEVOX0FSUk9XOjc3LERPVFRFRF9PUEVOX0FSUk9XOjc4LFNPTElEX0FSUk9XOjc5LERPVFRFRF9BUlJPVzo4MCxTT0xJRF9DUk9TUzo4MSxET1RURURfQ1JPU1M6ODIsU09MSURfUE9JTlQ6ODMsRE9UVEVEX1BPSU5UOjg0LFRYVDo4NSxvcGVuX2RpcmVjdGl2ZTo4Nix0eXBlX2RpcmVjdGl2ZTo4NyxhcmdfZGlyZWN0aXZlOjg4LGNsb3NlX2RpcmVjdGl2ZTo4OSwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiU1BBQ0UiLDU6Ik5FV0xJTkUiLDc6IlNEIiwxNzoiOiIsMTk6ImNyZWF0ZSIsMjA6ImJveCIsMjE6InJlc3RPZkxpbmUiLDIyOiJlbmQiLDI0OiJhdXRvbnVtYmVyIiwyNToiTlVNIiwyNjoib2ZmIiwyNzoiYWN0aXZhdGUiLDI5OiJkZWFjdGl2YXRlIiwzNToidGl0bGUiLDM2OiJsZWdhY3lfdGl0bGUiLDM3OiJhY2NfdGl0bGUiLDM4OiJhY2NfdGl0bGVfdmFsdWUiLDM5OiJhY2NfZGVzY3IiLDQwOiJhY2NfZGVzY3JfdmFsdWUiLDQxOiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiw0MjoibG9vcCIsNDM6InJlY3QiLDQ0OiJvcHQiLDQ1OiJhbHQiLDQ3OiJwYXIiLDQ5OiJwYXJfb3ZlciIsNTA6ImNyaXRpY2FsIiw1MjoiYnJlYWsiLDUzOiJvcHRpb24iLDU0OiJhbmQiLDU1OiJlbHNlIiw1NjoicGFydGljaXBhbnQiLDU3OiJBUyIsNTg6InBhcnRpY2lwYW50X2FjdG9yIiw1OToiZGVzdHJveSIsNjA6Im5vdGUiLDYzOiJvdmVyIiw2NToibGlua3MiLDY2OiJsaW5rIiw2NzoicHJvcGVydGllcyIsNjg6ImRldGFpbHMiLDcwOiIsIiw3MToibGVmdF9vZiIsNzI6InJpZ2h0X29mIiw3NDoiKyIsNzU6Ii0iLDc2OiJBQ1RPUiIsNzc6IlNPTElEX09QRU5fQVJST1ciLDc4OiJET1RURURfT1BFTl9BUlJPVyIsNzk6IlNPTElEX0FSUk9XIiw4MDoiRE9UVEVEX0FSUk9XIiw4MToiU09MSURfQ1JPU1MiLDgyOiJET1RURURfQ1JPU1MiLDgzOiJTT0xJRF9QT0lOVCIsODQ6IkRPVFRFRF9QT0lOVCIsODU6IlRYVCIsODY6Im9wZW5fZGlyZWN0aXZlIiw4NzoidHlwZV9kaXJlY3RpdmUiLDg4OiJhcmdfZGlyZWN0aXZlIiw4OToiY2xvc2VfZGlyZWN0aXZlIn0scHJvZHVjdGlvbnNfOlswLFszLDJdLFszLDJdLFszLDJdLFszLDJdLFs4LDBdLFs4LDJdLFs5LDJdLFs5LDFdLFs5LDFdLFsxMSwwXSxbMTEsMl0sWzEyLDJdLFsxMiwxXSxbMTIsMV0sWzYsNF0sWzYsNl0sWzEwLDFdLFsxMCwyXSxbMTAsNF0sWzEwLDJdLFsxMCw0XSxbMTAsM10sWzEwLDNdLFsxMCwyXSxbMTAsM10sWzEwLDNdLFsxMCwyXSxbMTAsMl0sWzEwLDJdLFsxMCwyXSxbMTAsMl0sWzEwLDFdLFsxMCwxXSxbMTAsMl0sWzEwLDJdLFsxMCwxXSxbMTAsNF0sWzEwLDRdLFsxMCw0XSxbMTAsNF0sWzEwLDRdLFsxMCw0XSxbMTAsNF0sWzEwLDRdLFsxMCwxXSxbNTEsMV0sWzUxLDRdLFs0OCwxXSxbNDgsNF0sWzQ2LDFdLFs0Niw0XSxbMTMsNV0sWzEzLDNdLFsxMyw1XSxbMTMsM10sWzEzLDNdLFszMCw0XSxbMzAsNF0sWzMxLDNdLFszMiwzXSxbMzMsM10sWzM0LDNdLFs2OSwyXSxbNjksMV0sWzY0LDNdLFs2NCwxXSxbNjEsMV0sWzYxLDFdLFsyMyw1XSxbMjMsNV0sWzIzLDRdLFsyOCwxXSxbNzMsMV0sWzczLDFdLFs3MywxXSxbNzMsMV0sWzczLDFdLFs3MywxXSxbNzMsMV0sWzczLDFdLFs2MiwxXSxbMTQsMV0sWzE1LDFdLFsxOCwxXSxbMTYsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oSGUsQ2UsJGUseWUsZm4sWXQsTWkpe3ZhciBxdD1ZdC5sZW5ndGgtMTtzd2l0Y2goZm4pe2Nhc2UgNDpyZXR1cm4geWUuYXBwbHkoWXRbcXRdKSxZdFtxdF07Y2FzZSA1OmNhc2UgMTA6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgNjpjYXNlIDExOll0W3F0LTFdLnB1c2goWXRbcXRdKSx0aGlzLiQ9WXRbcXQtMV07YnJlYWs7Y2FzZSA3OmNhc2UgODpjYXNlIDEyOmNhc2UgMTM6dGhpcy4kPVl0W3F0XTticmVhaztjYXNlIDk6Y2FzZSAxNDp0aGlzLiQ9W107YnJlYWs7Y2FzZSAxODpZdFtxdF0udHlwZT0iY3JlYXRlUGFydGljaXBhbnQiLHRoaXMuJD1ZdFtxdF07YnJlYWs7Y2FzZSAxOTpZdFtxdC0xXS51bnNoaWZ0KHt0eXBlOiJib3hTdGFydCIsYm94RGF0YTp5ZS5wYXJzZUJveERhdGEoWXRbcXQtMl0pfSksWXRbcXQtMV0ucHVzaCh7dHlwZToiYm94RW5kIixib3hUZXh0Oll0W3F0LTJdfSksdGhpcy4kPVl0W3F0LTFdO2JyZWFrO2Nhc2UgMjE6dGhpcy4kPXt0eXBlOiJzZXF1ZW5jZUluZGV4IixzZXF1ZW5jZUluZGV4Ok51bWJlcihZdFtxdC0yXSksc2VxdWVuY2VJbmRleFN0ZXA6TnVtYmVyKFl0W3F0LTFdKSxzZXF1ZW5jZVZpc2libGU6ITAsc2lnbmFsVHlwZTp5ZS5MSU5FVFlQRS5BVVRPTlVNQkVSfTticmVhaztjYXNlIDIyOnRoaXMuJD17dHlwZToic2VxdWVuY2VJbmRleCIsc2VxdWVuY2VJbmRleDpOdW1iZXIoWXRbcXQtMV0pLHNlcXVlbmNlSW5kZXhTdGVwOjEsc2VxdWVuY2VWaXNpYmxlOiEwLHNpZ25hbFR5cGU6eWUuTElORVRZUEUuQVVUT05VTUJFUn07YnJlYWs7Y2FzZSAyMzp0aGlzLiQ9e3R5cGU6InNlcXVlbmNlSW5kZXgiLHNlcXVlbmNlVmlzaWJsZTohMSxzaWduYWxUeXBlOnllLkxJTkVUWVBFLkFVVE9OVU1CRVJ9O2JyZWFrO2Nhc2UgMjQ6dGhpcy4kPXt0eXBlOiJzZXF1ZW5jZUluZGV4IixzZXF1ZW5jZVZpc2libGU6ITAsc2lnbmFsVHlwZTp5ZS5MSU5FVFlQRS5BVVRPTlVNQkVSfTticmVhaztjYXNlIDI1OnRoaXMuJD17dHlwZToiYWN0aXZlU3RhcnQiLHNpZ25hbFR5cGU6eWUuTElORVRZUEUuQUNUSVZFX1NUQVJULGFjdG9yOll0W3F0LTFdfTticmVhaztjYXNlIDI2OnRoaXMuJD17dHlwZToiYWN0aXZlRW5kIixzaWduYWxUeXBlOnllLkxJTkVUWVBFLkFDVElWRV9FTkQsYWN0b3I6WXRbcXQtMV19O2JyZWFrO2Nhc2UgMzI6eWUuc2V0RGlhZ3JhbVRpdGxlKFl0W3F0XS5zdWJzdHJpbmcoNikpLHRoaXMuJD1ZdFtxdF0uc3Vic3RyaW5nKDYpO2JyZWFrO2Nhc2UgMzM6eWUuc2V0RGlhZ3JhbVRpdGxlKFl0W3F0XS5zdWJzdHJpbmcoNykpLHRoaXMuJD1ZdFtxdF0uc3Vic3RyaW5nKDcpO2JyZWFrO2Nhc2UgMzQ6dGhpcy4kPVl0W3F0XS50cmltKCkseWUuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDM1OmNhc2UgMzY6dGhpcy4kPVl0W3F0XS50cmltKCkseWUuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDM3Oll0W3F0LTFdLnVuc2hpZnQoe3R5cGU6Imxvb3BTdGFydCIsbG9vcFRleHQ6eWUucGFyc2VNZXNzYWdlKFl0W3F0LTJdKSxzaWduYWxUeXBlOnllLkxJTkVUWVBFLkxPT1BfU1RBUlR9KSxZdFtxdC0xXS5wdXNoKHt0eXBlOiJsb29wRW5kIixsb29wVGV4dDpZdFtxdC0yXSxzaWduYWxUeXBlOnllLkxJTkVUWVBFLkxPT1BfRU5EfSksdGhpcy4kPVl0W3F0LTFdO2JyZWFrO2Nhc2UgMzg6WXRbcXQtMV0udW5zaGlmdCh7dHlwZToicmVjdFN0YXJ0Iixjb2xvcjp5ZS5wYXJzZU1lc3NhZ2UoWXRbcXQtMl0pLHNpZ25hbFR5cGU6eWUuTElORVRZUEUuUkVDVF9TVEFSVH0pLFl0W3F0LTFdLnB1c2goe3R5cGU6InJlY3RFbmQiLGNvbG9yOnllLnBhcnNlTWVzc2FnZShZdFtxdC0yXSksc2lnbmFsVHlwZTp5ZS5MSU5FVFlQRS5SRUNUX0VORH0pLHRoaXMuJD1ZdFtxdC0xXTticmVhaztjYXNlIDM5Oll0W3F0LTFdLnVuc2hpZnQoe3R5cGU6Im9wdFN0YXJ0IixvcHRUZXh0OnllLnBhcnNlTWVzc2FnZShZdFtxdC0yXSksc2lnbmFsVHlwZTp5ZS5MSU5FVFlQRS5PUFRfU1RBUlR9KSxZdFtxdC0xXS5wdXNoKHt0eXBlOiJvcHRFbmQiLG9wdFRleHQ6eWUucGFyc2VNZXNzYWdlKFl0W3F0LTJdKSxzaWduYWxUeXBlOnllLkxJTkVUWVBFLk9QVF9FTkR9KSx0aGlzLiQ9WXRbcXQtMV07YnJlYWs7Y2FzZSA0MDpZdFtxdC0xXS51bnNoaWZ0KHt0eXBlOiJhbHRTdGFydCIsYWx0VGV4dDp5ZS5wYXJzZU1lc3NhZ2UoWXRbcXQtMl0pLHNpZ25hbFR5cGU6eWUuTElORVRZUEUuQUxUX1NUQVJUfSksWXRbcXQtMV0ucHVzaCh7dHlwZToiYWx0RW5kIixzaWduYWxUeXBlOnllLkxJTkVUWVBFLkFMVF9FTkR9KSx0aGlzLiQ9WXRbcXQtMV07YnJlYWs7Y2FzZSA0MTpZdFtxdC0xXS51bnNoaWZ0KHt0eXBlOiJwYXJTdGFydCIscGFyVGV4dDp5ZS5wYXJzZU1lc3NhZ2UoWXRbcXQtMl0pLHNpZ25hbFR5cGU6eWUuTElORVRZUEUuUEFSX1NUQVJUfSksWXRbcXQtMV0ucHVzaCh7dHlwZToicGFyRW5kIixzaWduYWxUeXBlOnllLkxJTkVUWVBFLlBBUl9FTkR9KSx0aGlzLiQ9WXRbcXQtMV07YnJlYWs7Y2FzZSA0MjpZdFtxdC0xXS51bnNoaWZ0KHt0eXBlOiJwYXJTdGFydCIscGFyVGV4dDp5ZS5wYXJzZU1lc3NhZ2UoWXRbcXQtMl0pLHNpZ25hbFR5cGU6eWUuTElORVRZUEUuUEFSX09WRVJfU1RBUlR9KSxZdFtxdC0xXS5wdXNoKHt0eXBlOiJwYXJFbmQiLHNpZ25hbFR5cGU6eWUuTElORVRZUEUuUEFSX0VORH0pLHRoaXMuJD1ZdFtxdC0xXTticmVhaztjYXNlIDQzOll0W3F0LTFdLnVuc2hpZnQoe3R5cGU6ImNyaXRpY2FsU3RhcnQiLGNyaXRpY2FsVGV4dDp5ZS5wYXJzZU1lc3NhZ2UoWXRbcXQtMl0pLHNpZ25hbFR5cGU6eWUuTElORVRZUEUuQ1JJVElDQUxfU1RBUlR9KSxZdFtxdC0xXS5wdXNoKHt0eXBlOiJjcml0aWNhbEVuZCIsc2lnbmFsVHlwZTp5ZS5MSU5FVFlQRS5DUklUSUNBTF9FTkR9KSx0aGlzLiQ9WXRbcXQtMV07YnJlYWs7Y2FzZSA0NDpZdFtxdC0xXS51bnNoaWZ0KHt0eXBlOiJicmVha1N0YXJ0IixicmVha1RleHQ6eWUucGFyc2VNZXNzYWdlKFl0W3F0LTJdKSxzaWduYWxUeXBlOnllLkxJTkVUWVBFLkJSRUFLX1NUQVJUfSksWXRbcXQtMV0ucHVzaCh7dHlwZToiYnJlYWtFbmQiLG9wdFRleHQ6eWUucGFyc2VNZXNzYWdlKFl0W3F0LTJdKSxzaWduYWxUeXBlOnllLkxJTkVUWVBFLkJSRUFLX0VORH0pLHRoaXMuJD1ZdFtxdC0xXTticmVhaztjYXNlIDQ3OnRoaXMuJD1ZdFtxdC0zXS5jb25jYXQoW3t0eXBlOiJvcHRpb24iLG9wdGlvblRleHQ6eWUucGFyc2VNZXNzYWdlKFl0W3F0LTFdKSxzaWduYWxUeXBlOnllLkxJTkVUWVBFLkNSSVRJQ0FMX09QVElPTn0sWXRbcXRdXSk7YnJlYWs7Y2FzZSA0OTp0aGlzLiQ9WXRbcXQtM10uY29uY2F0KFt7dHlwZToiYW5kIixwYXJUZXh0OnllLnBhcnNlTWVzc2FnZShZdFtxdC0xXSksc2lnbmFsVHlwZTp5ZS5MSU5FVFlQRS5QQVJfQU5EfSxZdFtxdF1dKTticmVhaztjYXNlIDUxOnRoaXMuJD1ZdFtxdC0zXS5jb25jYXQoW3t0eXBlOiJlbHNlIixhbHRUZXh0OnllLnBhcnNlTWVzc2FnZShZdFtxdC0xXSksc2lnbmFsVHlwZTp5ZS5MSU5FVFlQRS5BTFRfRUxTRX0sWXRbcXRdXSk7YnJlYWs7Y2FzZSA1MjpZdFtxdC0zXS5kcmF3PSJwYXJ0aWNpcGFudCIsWXRbcXQtM10udHlwZT0iYWRkUGFydGljaXBhbnQiLFl0W3F0LTNdLmRlc2NyaXB0aW9uPXllLnBhcnNlTWVzc2FnZShZdFtxdC0xXSksdGhpcy4kPVl0W3F0LTNdO2JyZWFrO2Nhc2UgNTM6WXRbcXQtMV0uZHJhdz0icGFydGljaXBhbnQiLFl0W3F0LTFdLnR5cGU9ImFkZFBhcnRpY2lwYW50Iix0aGlzLiQ9WXRbcXQtMV07YnJlYWs7Y2FzZSA1NDpZdFtxdC0zXS5kcmF3PSJhY3RvciIsWXRbcXQtM10udHlwZT0iYWRkUGFydGljaXBhbnQiLFl0W3F0LTNdLmRlc2NyaXB0aW9uPXllLnBhcnNlTWVzc2FnZShZdFtxdC0xXSksdGhpcy4kPVl0W3F0LTNdO2JyZWFrO2Nhc2UgNTU6WXRbcXQtMV0uZHJhdz0iYWN0b3IiLFl0W3F0LTFdLnR5cGU9ImFkZFBhcnRpY2lwYW50Iix0aGlzLiQ9WXRbcXQtMV07YnJlYWs7Y2FzZSA1NjpZdFtxdC0xXS50eXBlPSJkZXN0cm95UGFydGljaXBhbnQiLHRoaXMuJD1ZdFtxdC0xXTticmVhaztjYXNlIDU3OnRoaXMuJD1bWXRbcXQtMV0se3R5cGU6ImFkZE5vdGUiLHBsYWNlbWVudDpZdFtxdC0yXSxhY3RvcjpZdFtxdC0xXS5hY3Rvcix0ZXh0Oll0W3F0XX1dO2JyZWFrO2Nhc2UgNTg6WXRbcXQtMl09W10uY29uY2F0KFl0W3F0LTFdLFl0W3F0LTFdKS5zbGljZSgwLDIpLFl0W3F0LTJdWzBdPVl0W3F0LTJdWzBdLmFjdG9yLFl0W3F0LTJdWzFdPVl0W3F0LTJdWzFdLmFjdG9yLHRoaXMuJD1bWXRbcXQtMV0se3R5cGU6ImFkZE5vdGUiLHBsYWNlbWVudDp5ZS5QTEFDRU1FTlQuT1ZFUixhY3RvcjpZdFtxdC0yXS5zbGljZSgwLDIpLHRleHQ6WXRbcXRdfV07YnJlYWs7Y2FzZSA1OTp0aGlzLiQ9W1l0W3F0LTFdLHt0eXBlOiJhZGRMaW5rcyIsYWN0b3I6WXRbcXQtMV0uYWN0b3IsdGV4dDpZdFtxdF19XTticmVhaztjYXNlIDYwOnRoaXMuJD1bWXRbcXQtMV0se3R5cGU6ImFkZEFMaW5rIixhY3RvcjpZdFtxdC0xXS5hY3Rvcix0ZXh0Oll0W3F0XX1dO2JyZWFrO2Nhc2UgNjE6dGhpcy4kPVtZdFtxdC0xXSx7dHlwZToiYWRkUHJvcGVydGllcyIsYWN0b3I6WXRbcXQtMV0uYWN0b3IsdGV4dDpZdFtxdF19XTticmVhaztjYXNlIDYyOnRoaXMuJD1bWXRbcXQtMV0se3R5cGU6ImFkZERldGFpbHMiLGFjdG9yOll0W3F0LTFdLmFjdG9yLHRleHQ6WXRbcXRdfV07YnJlYWs7Y2FzZSA2NTp0aGlzLiQ9W1l0W3F0LTJdLFl0W3F0XV07YnJlYWs7Y2FzZSA2Njp0aGlzLiQ9WXRbcXRdO2JyZWFrO2Nhc2UgNjc6dGhpcy4kPXllLlBMQUNFTUVOVC5MRUZUT0Y7YnJlYWs7Y2FzZSA2ODp0aGlzLiQ9eWUuUExBQ0VNRU5ULlJJR0hUT0Y7YnJlYWs7Y2FzZSA2OTp0aGlzLiQ9W1l0W3F0LTRdLFl0W3F0LTFdLHt0eXBlOiJhZGRNZXNzYWdlIixmcm9tOll0W3F0LTRdLmFjdG9yLHRvOll0W3F0LTFdLmFjdG9yLHNpZ25hbFR5cGU6WXRbcXQtM10sbXNnOll0W3F0XX0se3R5cGU6ImFjdGl2ZVN0YXJ0IixzaWduYWxUeXBlOnllLkxJTkVUWVBFLkFDVElWRV9TVEFSVCxhY3RvcjpZdFtxdC0xXX1dO2JyZWFrO2Nhc2UgNzA6dGhpcy4kPVtZdFtxdC00XSxZdFtxdC0xXSx7dHlwZToiYWRkTWVzc2FnZSIsZnJvbTpZdFtxdC00XS5hY3Rvcix0bzpZdFtxdC0xXS5hY3RvcixzaWduYWxUeXBlOll0W3F0LTNdLG1zZzpZdFtxdF19LHt0eXBlOiJhY3RpdmVFbmQiLHNpZ25hbFR5cGU6eWUuTElORVRZUEUuQUNUSVZFX0VORCxhY3RvcjpZdFtxdC00XX1dO2JyZWFrO2Nhc2UgNzE6dGhpcy4kPVtZdFtxdC0zXSxZdFtxdC0xXSx7dHlwZToiYWRkTWVzc2FnZSIsZnJvbTpZdFtxdC0zXS5hY3Rvcix0bzpZdFtxdC0xXS5hY3RvcixzaWduYWxUeXBlOll0W3F0LTJdLG1zZzpZdFtxdF19XTticmVhaztjYXNlIDcyOnRoaXMuJD17dHlwZToiYWRkUGFydGljaXBhbnQiLGFjdG9yOll0W3F0XX07YnJlYWs7Y2FzZSA3Mzp0aGlzLiQ9eWUuTElORVRZUEUuU09MSURfT1BFTjticmVhaztjYXNlIDc0OnRoaXMuJD15ZS5MSU5FVFlQRS5ET1RURURfT1BFTjticmVhaztjYXNlIDc1OnRoaXMuJD15ZS5MSU5FVFlQRS5TT0xJRDticmVhaztjYXNlIDc2OnRoaXMuJD15ZS5MSU5FVFlQRS5ET1RURUQ7YnJlYWs7Y2FzZSA3Nzp0aGlzLiQ9eWUuTElORVRZUEUuU09MSURfQ1JPU1M7YnJlYWs7Y2FzZSA3ODp0aGlzLiQ9eWUuTElORVRZUEUuRE9UVEVEX0NST1NTO2JyZWFrO2Nhc2UgNzk6dGhpcy4kPXllLkxJTkVUWVBFLlNPTElEX1BPSU5UO2JyZWFrO2Nhc2UgODA6dGhpcy4kPXllLkxJTkVUWVBFLkRPVFRFRF9QT0lOVDticmVhaztjYXNlIDgxOnRoaXMuJD15ZS5wYXJzZU1lc3NhZ2UoWXRbcXRdLnRyaW0oKS5zdWJzdHJpbmcoMSkpO2JyZWFrO2Nhc2UgODI6eWUucGFyc2VEaXJlY3RpdmUoIiUleyIsIm9wZW5fZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA4Mzp5ZS5wYXJzZURpcmVjdGl2ZShZdFtxdF0sInR5cGVfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA4NDpZdFtxdF09WXRbcXRdLnRyaW0oKS5yZXBsYWNlKC8nL2csJyInKSx5ZS5wYXJzZURpcmVjdGl2ZShZdFtxdF0sImFyZ19kaXJlY3RpdmUiKTticmVhaztjYXNlIDg1OnllLnBhcnNlRGlyZWN0aXZlKCJ9JSUiLCJjbG9zZV9kaXJlY3RpdmUiLCJzZXF1ZW5jZSIpO2JyZWFrfX0sdGFibGU6W3szOjEsNDphLDU6Ziw2OjQsNzpwLDE0OjYsODY6dn0sezE6WzNdfSx7Mzo4LDQ6YSw1OmYsNjo0LDc6cCwxNDo2LDg2OnZ9LHszOjksNDphLDU6Ziw2OjQsNzpwLDE0OjYsODY6dn0sezM6MTAsNDphLDU6Ziw2OjQsNzpwLDE0OjYsODY6dn0saShbMSw0LDUsMTksMjAsMjQsMjcsMjksMzUsMzYsMzcsMzksNDEsNDIsNDMsNDQsNDUsNDcsNDksNTAsNTIsNTYsNTgsNTksNjAsNjUsNjYsNjcsNjgsNzYsODZdLG0sezg6MTF9KSx7MTU6MTIsODc6WzEsMTNdfSx7ODc6WzIsODJdfSx7MTpbMiwxXX0sezE6WzIsMl19LHsxOlsyLDNdfSx7MTpbMiw0XSw0OmIsNTpFLDY6NDMsOToxNCwxMDoxNiwxMzoxOCwxNDo2LDE5OkMsMjA6QSwyMzoyMSwyNDpQLDI3OkYsMjg6NDcsMjk6aiwzMDoyNSwzMToyNiwzMjoyNywzMzoyOCwzNDoyOSwzNTpSLDM2OkgsMzc6WSwzOTpydCw0MTpKLDQyOml0LDQzOmZ0LDQ0OlR0LDQ1Omt0LDQ3Om10LDQ5OmN0LDUwOnl0LDUyOnN0LDU2Onh0LDU4Omh0LDU5OmR0LDYwOkN0LDY1OnR0LDY2OlB0LDY3OnB0LDY4OkZ0LDc2OlgsODY6dn0sezE2OjU0LDE3OlsxLDU1XSw4OTpSdH0saShbMTcsODldLFsyLDgzXSksaShCdCxbMiw2XSksezY6NDMsMTA6NTcsMTM6MTgsMTQ6NiwxOTpDLDIwOkEsMjM6MjEsMjQ6UCwyNzpGLDI4OjQ3LDI5OmosMzA6MjUsMzE6MjYsMzI6MjcsMzM6MjgsMzQ6MjksMzU6UiwzNjpILDM3OlksMzk6cnQsNDE6Siw0MjppdCw0MzpmdCw0NDpUdCw0NTprdCw0NzptdCw0OTpjdCw1MDp5dCw1MjpzdCw1Njp4dCw1ODpodCw1OTpkdCw2MDpDdCw2NTp0dCw2NjpQdCw2NzpwdCw2ODpGdCw3NjpYLDg2OnZ9LGkoQnQsWzIsOF0pLGkoQnQsWzIsOV0pLGkoQnQsWzIsMTddKSx7MTM6NTgsNTY6eHQsNTg6aHQsNTk6ZHR9LHsyMTpbMSw1OV19LHs1OlsxLDYwXX0sezU6WzEsNjNdLDI1OlsxLDYxXSwyNjpbMSw2Ml19LHsyODo2NCw3NjpYfSx7Mjg6NjUsNzY6WH0sezU6WzEsNjZdfSx7NTpbMSw2N119LHs1OlsxLDY4XX0sezU6WzEsNjldfSx7NTpbMSw3MF19LGkoQnQsWzIsMzJdKSxpKEJ0LFsyLDMzXSksezM4OlsxLDcxXX0sezQwOlsxLDcyXX0saShCdCxbMiwzNl0pLHsyMTpbMSw3M119LHsyMTpbMSw3NF19LHsyMTpbMSw3NV19LHsyMTpbMSw3Nl19LHsyMTpbMSw3N119LHsyMTpbMSw3OF19LHsyMTpbMSw3OV19LHsyMTpbMSw4MF19LGkoQnQsWzIsNDVdKSx7Mjg6ODEsNzY6WH0sezI4OjgyLDc2Olh9LHsyODo4Myw3NjpYfSx7NzM6ODQsNzc6WzEsODVdLDc4OlsxLDg2XSw3OTpbMSw4N10sODA6WzEsODhdLDgxOlsxLDg5XSw4MjpbMSw5MF0sODM6WzEsOTFdLDg0OlsxLDkyXX0sezYxOjkzLDYzOlsxLDk0XSw3MTpbMSw5NV0sNzI6WzEsOTZdfSx7Mjg6OTcsNzY6WH0sezI4Ojk4LDc2Olh9LHsyODo5OSw3NjpYfSx7Mjg6MTAwLDc2Olh9LGkoWzUsNTcsNzAsNzcsNzgsNzksODAsODEsODIsODMsODQsODVdLFsyLDcyXSksezU6WzEsMTAxXX0sezE4OjEwMiw4ODpbMSwxMDNdfSx7NTpbMiw4NV19LGkoQnQsWzIsN10pLGkoQnQsWzIsMThdKSxpKHZ0LFsyLDEwXSx7MTE6MTA0fSksaShCdCxbMiwyMF0pLHs1OlsxLDEwNl0sMjU6WzEsMTA1XX0sezU6WzEsMTA3XX0saShCdCxbMiwyNF0pLHs1OlsxLDEwOF19LHs1OlsxLDEwOV19LGkoQnQsWzIsMjddKSxpKEJ0LFsyLDI4XSksaShCdCxbMiwyOV0pLGkoQnQsWzIsMzBdKSxpKEJ0LFsyLDMxXSksaShCdCxbMiwzNF0pLGkoQnQsWzIsMzVdKSxpKE90LG0sezg6MTEwfSksaShPdCxtLHs4OjExMX0pLGkoT3QsbSx7ODoxMTJ9KSxpKFZ0LG0sezQ2OjExMyw4OjExNH0pLGkocWUsbSx7NDg6MTE1LDg6MTE2fSksaShxZSxtLHs4OjExNiw0ODoxMTd9KSxpKF9uLG0sezUxOjExOCw4OjExOX0pLGkoT3QsbSx7ODoxMjB9KSx7NTpbMSwxMjJdLDU3OlsxLDEyMV19LHs1OlsxLDEyNF0sNTc6WzEsMTIzXX0sezU6WzEsMTI1XX0sezI4OjEyOCw3NDpbMSwxMjZdLDc1OlsxLDEyN10sNzY6WH0saShUZSxbMiw3M10pLGkoVGUsWzIsNzRdKSxpKFRlLFsyLDc1XSksaShUZSxbMiw3Nl0pLGkoVGUsWzIsNzddKSxpKFRlLFsyLDc4XSksaShUZSxbMiw3OV0pLGkoVGUsWzIsODBdKSx7Mjg6MTI5LDc2Olh9LHsyODoxMzEsNjQ6MTMwLDc2Olh9LHs3NjpbMiw2N119LHs3NjpbMiw2OF19LHs2MjoxMzIsODU6V259LHs2MjoxMzQsODU6V259LHs2MjoxMzUsODU6V259LHs2MjoxMzYsODU6V259LGkoQWUsWzIsMTVdKSx7MTY6MTM3LDg5OlJ0fSx7ODk6WzIsODRdfSx7NDpbMSwxNDBdLDU6WzEsMTQyXSwxMjoxMzksMTM6MTQxLDIyOlsxLDEzOF0sNTY6eHQsNTg6aHQsNTk6ZHR9LHs1OlsxLDE0M119LGkoQnQsWzIsMjJdKSxpKEJ0LFsyLDIzXSksaShCdCxbMiwyNV0pLGkoQnQsWzIsMjZdKSx7NDpiLDU6RSw2OjQzLDk6MTQsMTA6MTYsMTM6MTgsMTQ6NiwxOTpDLDIwOkEsMjI6WzEsMTQ0XSwyMzoyMSwyNDpQLDI3OkYsMjg6NDcsMjk6aiwzMDoyNSwzMToyNiwzMjoyNywzMzoyOCwzNDoyOSwzNTpSLDM2OkgsMzc6WSwzOTpydCw0MTpKLDQyOml0LDQzOmZ0LDQ0OlR0LDQ1Omt0LDQ3Om10LDQ5OmN0LDUwOnl0LDUyOnN0LDU2Onh0LDU4Omh0LDU5OmR0LDYwOkN0LDY1OnR0LDY2OlB0LDY3OnB0LDY4OkZ0LDc2OlgsODY6dn0sezQ6Yiw1OkUsNjo0Myw5OjE0LDEwOjE2LDEzOjE4LDE0OjYsMTk6QywyMDpBLDIyOlsxLDE0NV0sMjM6MjEsMjQ6UCwyNzpGLDI4OjQ3LDI5OmosMzA6MjUsMzE6MjYsMzI6MjcsMzM6MjgsMzQ6MjksMzU6UiwzNjpILDM3OlksMzk6cnQsNDE6Siw0MjppdCw0MzpmdCw0NDpUdCw0NTprdCw0NzptdCw0OTpjdCw1MDp5dCw1MjpzdCw1Njp4dCw1ODpodCw1OTpkdCw2MDpDdCw2NTp0dCw2NjpQdCw2NzpwdCw2ODpGdCw3NjpYLDg2OnZ9LHs0OmIsNTpFLDY6NDMsOToxNCwxMDoxNiwxMzoxOCwxNDo2LDE5OkMsMjA6QSwyMjpbMSwxNDZdLDIzOjIxLDI0OlAsMjc6RiwyODo0NywyOTpqLDMwOjI1LDMxOjI2LDMyOjI3LDMzOjI4LDM0OjI5LDM1OlIsMzY6SCwzNzpZLDM5OnJ0LDQxOkosNDI6aXQsNDM6ZnQsNDQ6VHQsNDU6a3QsNDc6bXQsNDk6Y3QsNTA6eXQsNTI6c3QsNTY6eHQsNTg6aHQsNTk6ZHQsNjA6Q3QsNjU6dHQsNjY6UHQsNjc6cHQsNjg6RnQsNzY6WCw4Njp2fSx7MjI6WzEsMTQ3XX0sezQ6Yiw1OkUsNjo0Myw5OjE0LDEwOjE2LDEzOjE4LDE0OjYsMTk6QywyMDpBLDIyOlsyLDUwXSwyMzoyMSwyNDpQLDI3OkYsMjg6NDcsMjk6aiwzMDoyNSwzMToyNiwzMjoyNywzMzoyOCwzNDoyOSwzNTpSLDM2OkgsMzc6WSwzOTpydCw0MTpKLDQyOml0LDQzOmZ0LDQ0OlR0LDQ1Omt0LDQ3Om10LDQ5OmN0LDUwOnl0LDUyOnN0LDU1OlsxLDE0OF0sNTY6eHQsNTg6aHQsNTk6ZHQsNjA6Q3QsNjU6dHQsNjY6UHQsNjc6cHQsNjg6RnQsNzY6WCw4Njp2fSx7MjI6WzEsMTQ5XX0sezQ6Yiw1OkUsNjo0Myw5OjE0LDEwOjE2LDEzOjE4LDE0OjYsMTk6QywyMDpBLDIyOlsyLDQ4XSwyMzoyMSwyNDpQLDI3OkYsMjg6NDcsMjk6aiwzMDoyNSwzMToyNiwzMjoyNywzMzoyOCwzNDoyOSwzNTpSLDM2OkgsMzc6WSwzOTpydCw0MTpKLDQyOml0LDQzOmZ0LDQ0OlR0LDQ1Omt0LDQ3Om10LDQ5OmN0LDUwOnl0LDUyOnN0LDU0OlsxLDE1MF0sNTY6eHQsNTg6aHQsNTk6ZHQsNjA6Q3QsNjU6dHQsNjY6UHQsNjc6cHQsNjg6RnQsNzY6WCw4Njp2fSx7MjI6WzEsMTUxXX0sezIyOlsxLDE1Ml19LHs0OmIsNTpFLDY6NDMsOToxNCwxMDoxNiwxMzoxOCwxNDo2LDE5OkMsMjA6QSwyMjpbMiw0Nl0sMjM6MjEsMjQ6UCwyNzpGLDI4OjQ3LDI5OmosMzA6MjUsMzE6MjYsMzI6MjcsMzM6MjgsMzQ6MjksMzU6UiwzNjpILDM3OlksMzk6cnQsNDE6Siw0MjppdCw0MzpmdCw0NDpUdCw0NTprdCw0NzptdCw0OTpjdCw1MDp5dCw1MjpzdCw1MzpbMSwxNTNdLDU2Onh0LDU4Omh0LDU5OmR0LDYwOkN0LDY1OnR0LDY2OlB0LDY3OnB0LDY4OkZ0LDc2OlgsODY6dn0sezQ6Yiw1OkUsNjo0Myw5OjE0LDEwOjE2LDEzOjE4LDE0OjYsMTk6QywyMDpBLDIyOlsxLDE1NF0sMjM6MjEsMjQ6UCwyNzpGLDI4OjQ3LDI5OmosMzA6MjUsMzE6MjYsMzI6MjcsMzM6MjgsMzQ6MjksMzU6UiwzNjpILDM3OlksMzk6cnQsNDE6Siw0MjppdCw0MzpmdCw0NDpUdCw0NTprdCw0NzptdCw0OTpjdCw1MDp5dCw1MjpzdCw1Njp4dCw1ODpodCw1OTpkdCw2MDpDdCw2NTp0dCw2NjpQdCw2NzpwdCw2ODpGdCw3NjpYLDg2OnZ9LHsyMTpbMSwxNTVdfSxpKEJ0LFsyLDUzXSksezIxOlsxLDE1Nl19LGkoQnQsWzIsNTVdKSxpKEJ0LFsyLDU2XSksezI4OjE1Nyw3NjpYfSx7Mjg6MTU4LDc2Olh9LHs2MjoxNTksODU6V259LHs2MjoxNjAsODU6V259LHs2MjoxNjEsODU6V259LHs3MDpbMSwxNjJdLDg1OlsyLDY2XX0sezU6WzIsNTldfSx7NTpbMiw4MV19LHs1OlsyLDYwXX0sezU6WzIsNjFdfSx7NTpbMiw2Ml19LHs1OlsxLDE2M119LGkoQnQsWzIsMTldKSxpKHZ0LFsyLDExXSksezEzOjE2NCw1Njp4dCw1ODpodCw1OTpkdH0saSh2dCxbMiwxM10pLGkodnQsWzIsMTRdKSxpKEJ0LFsyLDIxXSksaShCdCxbMiwzN10pLGkoQnQsWzIsMzhdKSxpKEJ0LFsyLDM5XSksaShCdCxbMiw0MF0pLHsyMTpbMSwxNjVdfSxpKEJ0LFsyLDQxXSksezIxOlsxLDE2Nl19LGkoQnQsWzIsNDJdKSxpKEJ0LFsyLDQzXSksezIxOlsxLDE2N119LGkoQnQsWzIsNDRdKSx7NTpbMSwxNjhdfSx7NTpbMSwxNjldfSx7NjI6MTcwLDg1OldufSx7NjI6MTcxLDg1OldufSx7NTpbMiw3MV19LHs1OlsyLDU3XX0sezU6WzIsNThdfSx7Mjg6MTcyLDc2Olh9LGkoQWUsWzIsMTZdKSxpKHZ0LFsyLDEyXSksaShWdCxtLHs4OjExNCw0NjoxNzN9KSxpKHFlLG0sezg6MTE2LDQ4OjE3NH0pLGkoX24sbSx7ODoxMTksNTE6MTc1fSksaShCdCxbMiw1Ml0pLGkoQnQsWzIsNTRdKSx7NTpbMiw2OV19LHs1OlsyLDcwXX0sezg1OlsyLDY1XX0sezIyOlsyLDUxXX0sezIyOlsyLDQ5XX0sezIyOlsyLDQ3XX1dLGRlZmF1bHRBY3Rpb25zOns3OlsyLDgyXSw4OlsyLDFdLDk6WzIsMl0sMTA6WzIsM10sNTY6WzIsODVdLDk1OlsyLDY3XSw5NjpbMiw2OF0sMTAzOlsyLDg0XSwxMzI6WzIsNTldLDEzMzpbMiw4MV0sMTM0OlsyLDYwXSwxMzU6WzIsNjFdLDEzNjpbMiw2Ml0sMTU5OlsyLDcxXSwxNjA6WzIsNTddLDE2MTpbMiw1OF0sMTcwOlsyLDY5XSwxNzE6WzIsNzBdLDE3MjpbMiw2NV0sMTczOlsyLDUxXSwxNzQ6WzIsNDldLDE3NTpbMiw0N119LHBhcnNlRXJyb3I6ZnVuY3Rpb24oSGUsQ2Upe2lmKENlLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoSGUpO2Vsc2V7dmFyICRlPW5ldyBFcnJvcihIZSk7dGhyb3cgJGUuaGFzaD1DZSwkZX19LHBhcnNlOmZ1bmN0aW9uKEhlKXt2YXIgQ2U9dGhpcywkZT1bMF0seWU9W10sZm49W251bGxdLFl0PVtdLE1pPXRoaXMudGFibGUscXQ9IiIsemk9MCxTZT0wLGtpPTIsUmk9MSxwaT1ZdC5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxiaT1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLGRuPXt5eTp7fX07Zm9yKHZhciBObiBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LE5uKSYmKGRuLnl5W05uXT10aGlzLnl5W05uXSk7Ymkuc2V0SW5wdXQoSGUsZG4ueXkpLGRuLnl5LmxleGVyPWJpLGRuLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBiaS55eWxsb2M+InUiJiYoYmkueXlsbG9jPXt9KTt2YXIgV3I9YmkueXlsbG9jO1l0LnB1c2goV3IpO3ZhciBMaT1iaS5vcHRpb25zJiZiaS5vcHRpb25zLnJhbmdlczt0eXBlb2YgZG4ueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9ZG4ueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gaXMoKXt2YXIgWGM7cmV0dXJuIFhjPXllLnBvcCgpfHxiaS5sZXgoKXx8UmksdHlwZW9mIFhjIT0ibnVtYmVyIiYmKFhjIGluc3RhbmNlb2YgQXJyYXkmJih5ZT1YYyxYYz15ZS5wb3AoKSksWGM9Q2Uuc3ltYm9sc19bWGNdfHxYYyksWGN9Zm9yKHZhciBUcyxBYSxYaSxHYSxfcj17fSxxcixPaSxncixKczs7KXtpZihBYT0kZVskZS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tBYV0/WGk9dGhpcy5kZWZhdWx0QWN0aW9uc1tBYV06KChUcz09PW51bGx8fHR5cGVvZiBUcz4idSIpJiYoVHM9aXMoKSksWGk9TWlbQWFdJiZNaVtBYV1bVHNdKSx0eXBlb2YgWGk+InUifHwhWGkubGVuZ3RofHwhWGlbMF0pe3ZhciBWbj0iIjtKcz1bXTtmb3IocXIgaW4gTWlbQWFdKXRoaXMudGVybWluYWxzX1txcl0mJnFyPmtpJiZKcy5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bcXJdKyInIik7Ymkuc2hvd1Bvc2l0aW9uP1ZuPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKHppKzEpK2A6CmArYmkuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtKcy5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW1RzXXx8VHMpKyInIjpWbj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyh6aSsxKSsiOiBVbmV4cGVjdGVkICIrKFRzPT1SaT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tUc118fFRzKSsiJyIpLHRoaXMucGFyc2VFcnJvcihWbix7dGV4dDpiaS5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bVHNdfHxUcyxsaW5lOmJpLnl5bGluZW5vLGxvYzpXcixleHBlY3RlZDpKc30pfWlmKFhpWzBdaW5zdGFuY2VvZiBBcnJheSYmWGkubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitBYSsiLCB0b2tlbjogIitUcyk7c3dpdGNoKFhpWzBdKXtjYXNlIDE6JGUucHVzaChUcyksZm4ucHVzaChiaS55eXRleHQpLFl0LnB1c2goYmkueXlsbG9jKSwkZS5wdXNoKFhpWzFdKSxUcz1udWxsLFNlPWJpLnl5bGVuZyxxdD1iaS55eXRleHQsemk9YmkueXlsaW5lbm8sV3I9YmkueXlsbG9jO2JyZWFrO2Nhc2UgMjppZihPaT10aGlzLnByb2R1Y3Rpb25zX1tYaVsxXV1bMV0sX3IuJD1mbltmbi5sZW5ndGgtT2ldLF9yLl8kPXtmaXJzdF9saW5lOll0W1l0Lmxlbmd0aC0oT2l8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpZdFtZdC5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpZdFtZdC5sZW5ndGgtKE9pfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOll0W1l0Lmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sTGkmJihfci5fJC5yYW5nZT1bWXRbWXQubGVuZ3RoLShPaXx8MSldLnJhbmdlWzBdLFl0W1l0Lmxlbmd0aC0xXS5yYW5nZVsxXV0pLEdhPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShfcixbcXQsU2UsemksZG4ueXksWGlbMV0sZm4sWXRdLmNvbmNhdChwaSkpLHR5cGVvZiBHYTwidSIpcmV0dXJuIEdhO09pJiYoJGU9JGUuc2xpY2UoMCwtMSpPaSoyKSxmbj1mbi5zbGljZSgwLC0xKk9pKSxZdD1ZdC5zbGljZSgwLC0xKk9pKSksJGUucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tYaVsxXV1bMF0pLGZuLnB1c2goX3IuJCksWXQucHVzaChfci5fJCksZ3I9TWlbJGVbJGUubGVuZ3RoLTJdXVskZVskZS5sZW5ndGgtMV1dLCRlLnB1c2goZ3IpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxrZT1mdW5jdGlvbigpe3ZhciBFZT17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihDZSwkZSl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihDZSwkZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoQ2UpfSxzZXRJbnB1dDpmdW5jdGlvbihIZSxDZSl7cmV0dXJuIHRoaXMueXk9Q2V8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PUhlLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBIZT10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9SGUsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPUhlLHRoaXMubWF0Y2hlZCs9SGU7dmFyIENlPUhlLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gQ2U/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLEhlfSx1bnB1dDpmdW5jdGlvbihIZSl7dmFyIENlPUhlLmxlbmd0aCwkZT1IZS5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PUhlK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1DZSksdGhpcy5vZmZzZXQtPUNlO3ZhciB5ZT10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSwkZS5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPSRlLmxlbmd0aC0xKTt2YXIgZm49dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOiRlPygkZS5sZW5ndGg9PT15ZS5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3llW3llLmxlbmd0aC0kZS5sZW5ndGhdLmxlbmd0aC0kZVswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLUNlfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2ZuWzBdLGZuWzBdK3RoaXMueXlsZW5nLUNlXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24oSGUpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShIZSkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgSGU9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihIZS5sZW5ndGg+MjA/Ii4uLiI6IiIpK0hlLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIEhlPXRoaXMubWF0Y2g7cmV0dXJuIEhlLmxlbmd0aDwyMCYmKEhlKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1IZS5sZW5ndGgpKSwoSGUuc3Vic3RyKDAsMjApKyhIZS5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIEhlPXRoaXMucGFzdElucHV0KCksQ2U9bmV3IEFycmF5KEhlLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIEhlK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtDZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oSGUsQ2Upe3ZhciAkZSx5ZSxmbjtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoZm49e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoZm4ueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSkseWU9SGVbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLHllJiYodGhpcy55eWxpbmVubys9eWUubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46eWU/eWVbeWUubGVuZ3RoLTFdLmxlbmd0aC15ZVt5ZS5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitIZVswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1IZVswXSx0aGlzLm1hdGNoKz1IZVswXSx0aGlzLm1hdGNoZXM9SGUsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoSGVbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPUhlWzBdLCRlPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLENlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLCRlKXJldHVybiAkZTtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgWXQgaW4gZm4pdGhpc1tZdF09Zm5bWXRdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIEhlLENlLCRlLHllO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGZuPXRoaXMuX2N1cnJlbnRSdWxlcygpLFl0PTA7WXQ8Zm4ubGVuZ3RoO1l0KyspaWYoJGU9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tmbltZdF1dKSwkZSYmKCFDZXx8JGVbMF0ubGVuZ3RoPkNlWzBdLmxlbmd0aCkpe2lmKENlPSRlLHllPVl0LHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKEhlPXRoaXMudGVzdF9tYXRjaCgkZSxmbltZdF0pLEhlIT09ITEpcmV0dXJuIEhlO2lmKHRoaXMuX2JhY2t0cmFjayl7Q2U9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gQ2U/KEhlPXRoaXMudGVzdF9tYXRjaChDZSxmblt5ZV0pLEhlIT09ITE/SGU6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciBDZT10aGlzLm5leHQoKTtyZXR1cm4gQ2V8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKENlKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goQ2UpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3ZhciBDZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBDZT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKENlKXtyZXR1cm4gQ2U9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhDZXx8MCksQ2U+PTA/dGhpcy5jb25kaXRpb25TdGFja1tDZV06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24oQ2Upe3RoaXMuYmVnaW4oQ2UpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKENlLCRlLHllLGZuKXtzd2l0Y2goeWUpe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigib3Blbl9kaXJlY3RpdmUiKSw4NjtjYXNlIDE6cmV0dXJuIHRoaXMuYmVnaW4oInR5cGVfZGlyZWN0aXZlIiksODc7Y2FzZSAyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiYXJnX2RpcmVjdGl2ZSIpLDE3O2Nhc2UgMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSw4OTtjYXNlIDQ6cmV0dXJuIDg4O2Nhc2UgNTpyZXR1cm4gNTtjYXNlIDY6YnJlYWs7Y2FzZSA3OmJyZWFrO2Nhc2UgODpicmVhaztjYXNlIDk6YnJlYWs7Y2FzZSAxMDpicmVhaztjYXNlIDExOnJldHVybiAyNTtjYXNlIDEyOnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksMjA7Y2FzZSAxMzpyZXR1cm4gdGhpcy5iZWdpbigiSUQiKSw1NjtjYXNlIDE0OnJldHVybiB0aGlzLmJlZ2luKCJJRCIpLDU4O2Nhc2UgMTU6cmV0dXJuIDE5O2Nhc2UgMTY6cmV0dXJuIHRoaXMuYmVnaW4oIklEIiksNTk7Y2FzZSAxNzpyZXR1cm4gJGUueXl0ZXh0PSRlLnl5dGV4dC50cmltKCksdGhpcy5iZWdpbigiQUxJQVMiKSw3NjtjYXNlIDE4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oIkxJTkUiKSw1NztjYXNlIDE5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDU7Y2FzZSAyMDpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDQyO2Nhc2UgMjE6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSw0MztjYXNlIDIyOnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksNDQ7Y2FzZSAyMzpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDQ1O2Nhc2UgMjQ6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSw1NTtjYXNlIDI1OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksNDc7Y2FzZSAyNjpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDQ5O2Nhc2UgMjc6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSw1NDtjYXNlIDI4OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksNTA7Y2FzZSAyOTpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDUzO2Nhc2UgMzA6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSw1MjtjYXNlIDMxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMjE7Y2FzZSAzMjpyZXR1cm4gMjI7Y2FzZSAzMzpyZXR1cm4gNzE7Y2FzZSAzNDpyZXR1cm4gNzI7Y2FzZSAzNTpyZXR1cm4gNjU7Y2FzZSAzNjpyZXR1cm4gNjY7Y2FzZSAzNzpyZXR1cm4gNjc7Y2FzZSAzODpyZXR1cm4gNjg7Y2FzZSAzOTpyZXR1cm4gNjM7Y2FzZSA0MDpyZXR1cm4gNjA7Y2FzZSA0MTpyZXR1cm4gdGhpcy5iZWdpbigiSUQiKSwyNztjYXNlIDQyOnJldHVybiB0aGlzLmJlZ2luKCJJRCIpLDI5O2Nhc2UgNDM6cmV0dXJuIDM1O2Nhc2UgNDQ6cmV0dXJuIDM2O2Nhc2UgNDU6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDM3O2Nhc2UgNDY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDQ3OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwzOTtjYXNlIDQ4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7Y2FzZSA0OTp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSA1MDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA1MTpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSA1MjpyZXR1cm4gNztjYXNlIDUzOnJldHVybiAyNDtjYXNlIDU0OnJldHVybiAyNjtjYXNlIDU1OnJldHVybiA3MDtjYXNlIDU2OnJldHVybiA1O2Nhc2UgNTc6cmV0dXJuICRlLnl5dGV4dD0kZS55eXRleHQudHJpbSgpLDc2O2Nhc2UgNTg6cmV0dXJuIDc5O2Nhc2UgNTk6cmV0dXJuIDgwO2Nhc2UgNjA6cmV0dXJuIDc3O2Nhc2UgNjE6cmV0dXJuIDc4O2Nhc2UgNjI6cmV0dXJuIDgxO2Nhc2UgNjM6cmV0dXJuIDgyO2Nhc2UgNjQ6cmV0dXJuIDgzO2Nhc2UgNjU6cmV0dXJuIDg0O2Nhc2UgNjY6cmV0dXJuIDg1O2Nhc2UgNjc6cmV0dXJuIDc0O2Nhc2UgNjg6cmV0dXJuIDc1O2Nhc2UgNjk6cmV0dXJuIDU7Y2FzZSA3MDpyZXR1cm4iSU5WQUxJRCJ9fSxydWxlczpbL14oPzolJVx7KS9pLC9eKD86KCg/Oig/IVx9JSUpW146Ll0pKikpL2ksL14oPzo6KS9pLC9eKD86XH0lJSkvaSwvXig/OigoPzooPyFcfSUlKS58XG4pKikpL2ksL14oPzpbXG5dKykvaSwvXig/OlxzKykvaSwvXig/OigoPyFcbilccykrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OiUoPyFceylbXlxuXSopL2ksL14oPzpbXlx9XSUlW15cbl0qKS9pLC9eKD86WzAtOV0rKD89WyBcbl0rKSkvaSwvXig/OmJveFxiKS9pLC9eKD86cGFydGljaXBhbnRcYikvaSwvXig/OmFjdG9yXGIpL2ksL14oPzpjcmVhdGVcYikvaSwvXig/OmRlc3Ryb3lcYikvaSwvXig/OlteXC0+OlxuLDtdKz8oW1wtXSpbXlwtPjpcbiw7XSs/KSo/KD89KCg/IVxuKVxzKSthcyg/IVxuKVxzfFsjXG47XXwkKSkvaSwvXig/OmFzXGIpL2ksL14oPzooPzopKS9pLC9eKD86bG9vcFxiKS9pLC9eKD86cmVjdFxiKS9pLC9eKD86b3B0XGIpL2ksL14oPzphbHRcYikvaSwvXig/OmVsc2VcYikvaSwvXig/OnBhclxiKS9pLC9eKD86cGFyX292ZXJcYikvaSwvXig/OmFuZFxiKS9pLC9eKD86Y3JpdGljYWxcYikvaSwvXig/Om9wdGlvblxiKS9pLC9eKD86YnJlYWtcYikvaSwvXig/Oig/Ols6XT8oPzpubyk/d3JhcCk/W14jXG47XSopL2ksL14oPzplbmRcYikvaSwvXig/OmxlZnQgb2ZcYikvaSwvXig/OnJpZ2h0IG9mXGIpL2ksL14oPzpsaW5rc1xiKS9pLC9eKD86bGlua1xiKS9pLC9eKD86cHJvcGVydGllc1xiKS9pLC9eKD86ZGV0YWlsc1xiKS9pLC9eKD86b3ZlclxiKS9pLC9eKD86bm90ZVxiKS9pLC9eKD86YWN0aXZhdGVcYikvaSwvXig/OmRlYWN0aXZhdGVcYikvaSwvXig/OnRpdGxlXHNbXiNcbjtdKykvaSwvXig/OnRpdGxlOlxzW14jXG47XSspL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/OnNlcXVlbmNlRGlhZ3JhbVxiKS9pLC9eKD86YXV0b251bWJlclxiKS9pLC9eKD86b2ZmXGIpL2ksL14oPzosKS9pLC9eKD86OykvaSwvXig/OlteXCtcLT46XG4sO10rKCg/ISgteHwtLXh8LVwpfC0tXCkpKVtcLV0qW15cK1wtPjpcbiw7XSspKikvaSwvXig/Oi0+PikvaSwvXig/Oi0tPj4pL2ksL14oPzotPikvaSwvXig/Oi0tPikvaSwvXig/Oi1beF0pL2ksL14oPzotLVt4XSkvaSwvXig/Oi1bXCldKS9pLC9eKD86LS1bXCldKS9pLC9eKD86Oig/Oig/Om5vKT93cmFwKT9bXiNcbjtdKykvaSwvXig/OlwrKS9pLC9eKD86LSkvaSwvXig/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbNTAsNTFdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbNDhdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbNDZdLGluY2x1c2l2ZTohMX0sb3Blbl9kaXJlY3RpdmU6e3J1bGVzOlsxLDhdLGluY2x1c2l2ZTohMX0sdHlwZV9kaXJlY3RpdmU6e3J1bGVzOlsyLDMsOF0saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0LDhdLGluY2x1c2l2ZTohMX0sSUQ6e3J1bGVzOls3LDgsMTddLGluY2x1c2l2ZTohMX0sQUxJQVM6e3J1bGVzOls3LDgsMTgsMTldLGluY2x1c2l2ZTohMX0sTElORTp7cnVsZXM6WzcsOCwzMV0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCw1LDYsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ3LDQ5LDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwXSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIEVlfSgpO25lLmxleGVyPWtlO2Z1bmN0aW9uIFZlKCl7dGhpcy55eT17fX1yZXR1cm4gVmUucHJvdG90eXBlPW5lLG5lLlBhcnNlcj1WZSxuZXcgVmV9KCk7bmd0LnBhcnNlcj1uZ3Q7Y29uc3QgSnFlPW5ndDtsZXQgT1AsSTU9e30scmd0PXt9LGlndD17fSx1TD1bXSxqYj1bXSxNSz0hMSxzZ3QsTzUsTlAsbEw7Y29uc3QgdEhlPWZ1bmN0aW9uKGksYSxmKXtKMS5wYXJzZURpcmVjdGl2ZSh0aGlzLGksYSxmKX0sZUhlPWZ1bmN0aW9uKGkpe3VMLnB1c2goe25hbWU6aS50ZXh0LHdyYXA6aS53cmFwPT09dm9pZCAwJiZtOSgpfHwhIWkud3JhcCxmaWxsOmkuY29sb3IsYWN0b3JLZXlzOltdfSksTzU9dUwuc2xpY2UoLTEpWzBdfSxhZ3Q9ZnVuY3Rpb24oaSxhLGYscCl7bGV0IHY9TzU7Y29uc3QgbT1JNVtpXTtpZihtKXtpZihPNSYmbS5ib3gmJk81IT09bS5ib3gpdGhyb3cgbmV3IEVycm9yKCJBIHNhbWUgcGFydGljaXBhbnQgc2hvdWxkIG9ubHkgYmUgZGVmaW5lZCBpbiBvbmUgQm94OiAiK20ubmFtZSsiIGNhbid0IGJlIGluICciK20uYm94Lm5hbWUrIicgYW5kIGluICciK081Lm5hbWUrIicgYXQgdGhlIHNhbWUgdGltZS4iKTtpZih2PW0uYm94P20uYm94Ok81LG0uYm94PXYsbSYmYT09PW0ubmFtZSYmZj09bnVsbClyZXR1cm59KGY9PW51bGx8fGYudGV4dD09bnVsbCkmJihmPXt0ZXh0OmEsd3JhcDpudWxsLHR5cGU6cH0pLChwPT1udWxsfHxmLnRleHQ9PW51bGwpJiYoZj17dGV4dDphLHdyYXA6bnVsbCx0eXBlOnB9KSxJNVtpXT17Ym94OnYsbmFtZTphLGRlc2NyaXB0aW9uOmYudGV4dCx3cmFwOmYud3JhcD09PXZvaWQgMCYmbTkoKXx8ISFmLndyYXAscHJldkFjdG9yOk9QLGxpbmtzOnt9LHByb3BlcnRpZXM6e30sYWN0b3JDbnQ6bnVsbCxyZWN0RGF0YTpudWxsLHR5cGU6cHx8InBhcnRpY2lwYW50In0sT1AmJkk1W09QXSYmKEk1W09QXS5uZXh0QWN0b3I9aSksTzUmJk81LmFjdG9yS2V5cy5wdXNoKGkpLE9QPWl9LG5IZT1pPT57bGV0IGEsZj0wO2ZvcihhPTA7YTxqYi5sZW5ndGg7YSsrKWpiW2FdLnR5cGU9PT1GUC5BQ1RJVkVfU1RBUlQmJmpiW2FdLmZyb20uYWN0b3I9PT1pJiZmKyssamJbYV0udHlwZT09PUZQLkFDVElWRV9FTkQmJmpiW2FdLmZyb20uYWN0b3I9PT1pJiZmLS07cmV0dXJuIGZ9LHJIZT1mdW5jdGlvbihpLGEsZixwKXtqYi5wdXNoKHtmcm9tOmksdG86YSxtZXNzYWdlOmYudGV4dCx3cmFwOmYud3JhcD09PXZvaWQgMCYmbTkoKXx8ISFmLndyYXAsYW5zd2VyOnB9KX0sbmY9ZnVuY3Rpb24oaSxhLGY9e3RleHQ6dm9pZCAwLHdyYXA6dm9pZCAwfSxwKXtpZihwPT09RlAuQUNUSVZFX0VORCYmbkhlKGkuYWN0b3IpPDEpe2xldCBtPW5ldyBFcnJvcigiVHJ5aW5nIHRvIGluYWN0aXZhdGUgYW4gaW5hY3RpdmUgcGFydGljaXBhbnQgKCIraS5hY3RvcisiKSIpO3Rocm93IG0uaGFzaD17dGV4dDoiLT4+LSIsdG9rZW46Ii0+Pi0iLGxpbmU6IjEiLGxvYzp7Zmlyc3RfbGluZToxLGxhc3RfbGluZToxLGZpcnN0X2NvbHVtbjoxLGxhc3RfY29sdW1uOjF9LGV4cGVjdGVkOlsiJ0FDVElWRV9QQVJUSUNJUEFOVCciXX0sbX1yZXR1cm4gamIucHVzaCh7ZnJvbTppLHRvOmEsbWVzc2FnZTpmLnRleHQsd3JhcDpmLndyYXA9PT12b2lkIDAmJm05KCl8fCEhZi53cmFwLHR5cGU6cH0pLCEwfSxpSGU9ZnVuY3Rpb24oKXtyZXR1cm4gdUwubGVuZ3RoPjB9LHNIZT1mdW5jdGlvbigpe3JldHVybiB1TC5zb21lKGk9PmkubmFtZSl9LGFIZT1mdW5jdGlvbigpe3JldHVybiBqYn0sb0hlPWZ1bmN0aW9uKCl7cmV0dXJuIHVMfSxjSGU9ZnVuY3Rpb24oKXtyZXR1cm4gSTV9LHVIZT1mdW5jdGlvbigpe3JldHVybiByZ3R9LGxIZT1mdW5jdGlvbigpe3JldHVybiBpZ3R9LFBQPWZ1bmN0aW9uKGkpe3JldHVybiBJNVtpXX0saEhlPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKEk1KX0sZkhlPWZ1bmN0aW9uKCl7TUs9ITB9LGRIZT1mdW5jdGlvbigpe01LPSExfSxnSGU9KCk9Pk1LLHBIZT1mdW5jdGlvbihpKXtzZ3Q9aX0sbTk9KCk9PnNndCE9PXZvaWQgMD9zZ3Q6RGUoKS5zZXF1ZW5jZS53cmFwLGJIZT1mdW5jdGlvbigpe0k1PXt9LHJndD17fSxpZ3Q9e30sdUw9W10samI9W10sTUs9ITEsY2coKX0sdkhlPWZ1bmN0aW9uKGkpe2NvbnN0IGE9aS50cmltKCksZj17dGV4dDphLnJlcGxhY2UoL146Pyg/Om5vKT93cmFwOi8sIiIpLnRyaW0oKSx3cmFwOmEubWF0Y2goL146P3dyYXA6LykhPT1udWxsPyEwOmEubWF0Y2goL146P25vd3JhcDovKSE9PW51bGw/ITE6dm9pZCAwfTtyZXR1cm4gV3QuZGVidWcoInBhcnNlTWVzc2FnZToiLGYpLGZ9LHdIZT1mdW5jdGlvbihpKXtjb25zdCBhPWkubWF0Y2goL14oKD86cmdiYT98aHNsYT8pXHMqXCguKlwpfFx3KikoLiopJC8pO2xldCBmPWEhPW51bGwmJmFbMV0/YVsxXS50cmltKCk6InRyYW5zcGFyZW50IixwPWEhPW51bGwmJmFbMl0/YVsyXS50cmltKCk6dm9pZCAwO2lmKHdpbmRvdyYmd2luZG93LkNTUyl3aW5kb3cuQ1NTLnN1cHBvcnRzKCJjb2xvciIsZil8fChmPSJ0cmFuc3BhcmVudCIscD1pLnRyaW0oKSk7ZWxzZXtjb25zdCBtPW5ldyBPcHRpb24oKS5zdHlsZTttLmNvbG9yPWYsbS5jb2xvciE9PWYmJihmPSJ0cmFuc3BhcmVudCIscD1pLnRyaW0oKSl9cmV0dXJue2NvbG9yOmYsdGV4dDpwIT09dm9pZCAwP3YwKHAucmVwbGFjZSgvXjo/KD86bm8pP3dyYXA6LywiIiksRGUoKSk6dm9pZCAwLHdyYXA6cCE9PXZvaWQgMD9wLm1hdGNoKC9eOj93cmFwOi8pIT09bnVsbD8hMDpwLm1hdGNoKC9eOj9ub3dyYXA6LykhPT1udWxsPyExOnZvaWQgMDp2b2lkIDB9fSxGUD17U09MSUQ6MCxET1RURUQ6MSxOT1RFOjIsU09MSURfQ1JPU1M6MyxET1RURURfQ1JPU1M6NCxTT0xJRF9PUEVOOjUsRE9UVEVEX09QRU46NixMT09QX1NUQVJUOjEwLExPT1BfRU5EOjExLEFMVF9TVEFSVDoxMixBTFRfRUxTRToxMyxBTFRfRU5EOjE0LE9QVF9TVEFSVDoxNSxPUFRfRU5EOjE2LEFDVElWRV9TVEFSVDoxNyxBQ1RJVkVfRU5EOjE4LFBBUl9TVEFSVDoxOSxQQVJfQU5EOjIwLFBBUl9FTkQ6MjEsUkVDVF9TVEFSVDoyMixSRUNUX0VORDoyMyxTT0xJRF9QT0lOVDoyNCxET1RURURfUE9JTlQ6MjUsQVVUT05VTUJFUjoyNixDUklUSUNBTF9TVEFSVDoyNyxDUklUSUNBTF9PUFRJT046MjgsQ1JJVElDQUxfRU5EOjI5LEJSRUFLX1NUQVJUOjMwLEJSRUFLX0VORDozMSxQQVJfT1ZFUl9TVEFSVDozMn0sbUhlPXtGSUxMRUQ6MCxPUEVOOjF9LHlIZT17TEVGVE9GOjAsUklHSFRPRjoxLE9WRVI6Mn0sZ1J0PWZ1bmN0aW9uKGksYSxmKXtmLnRleHQsZi53cmFwPT09dm9pZCAwJiZtOSgpfHxmLndyYXA7Y29uc3QgcD1bXS5jb25jYXQoaSxpKTtqYi5wdXNoKHtmcm9tOnBbMF0sdG86cFsxXSxtZXNzYWdlOmYudGV4dCx3cmFwOmYud3JhcD09PXZvaWQgMCYmbTkoKXx8ISFmLndyYXAsdHlwZTpGUC5OT1RFLHBsYWNlbWVudDphfSl9LHBSdD1mdW5jdGlvbihpLGEpe2NvbnN0IGY9UFAoaSk7dHJ5e2xldCBwPXYwKGEudGV4dCxEZSgpKTtwPXAucmVwbGFjZSgvJmFtcDsvZywiJiIpLHA9cC5yZXBsYWNlKC8mZXF1YWxzOy9nLCI9Iik7Y29uc3Qgdj1KU09OLnBhcnNlKHApO29ndChmLHYpfWNhdGNoKHApe1d0LmVycm9yKCJlcnJvciB3aGlsZSBwYXJzaW5nIGFjdG9yIGxpbmsgdGV4dCIscCl9fSx4SGU9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPVBQKGkpO3RyeXtjb25zdCBiPXt9O2xldCBFPXYwKGEudGV4dCxEZSgpKTt2YXIgcD1FLmluZGV4T2YoIkAiKTtFPUUucmVwbGFjZSgvJmFtcDsvZywiJiIpLEU9RS5yZXBsYWNlKC8mZXF1YWxzOy9nLCI9Iik7dmFyIHY9RS5zbGljZSgwLHAtMSkudHJpbSgpLG09RS5zbGljZShwKzEpLnRyaW0oKTtiW3ZdPW0sb2d0KGYsYil9Y2F0Y2goYil7V3QuZXJyb3IoImVycm9yIHdoaWxlIHBhcnNpbmcgYWN0b3IgbGluayB0ZXh0IixiKX19O2Z1bmN0aW9uIG9ndChpLGEpe2lmKGkubGlua3M9PW51bGwpaS5saW5rcz1hO2Vsc2UgZm9yKGxldCBmIGluIGEpaS5saW5rc1tmXT1hW2ZdfWNvbnN0IGJSdD1mdW5jdGlvbihpLGEpe2NvbnN0IGY9UFAoaSk7dHJ5e2xldCBwPXYwKGEudGV4dCxEZSgpKTtjb25zdCB2PUpTT04ucGFyc2UocCk7dlJ0KGYsdil9Y2F0Y2gocCl7V3QuZXJyb3IoImVycm9yIHdoaWxlIHBhcnNpbmcgYWN0b3IgcHJvcGVydGllcyB0ZXh0IixwKX19O2Z1bmN0aW9uIHZSdChpLGEpe2lmKGkucHJvcGVydGllcz09bnVsbClpLnByb3BlcnRpZXM9YTtlbHNlIGZvcihsZXQgZiBpbiBhKWkucHJvcGVydGllc1tmXT1hW2ZdfWZ1bmN0aW9uIGtIZSgpe081PXZvaWQgMH1jb25zdCB3UnQ9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPVBQKGkpLHA9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYS50ZXh0KTt0cnl7Y29uc3Qgdj1wLmlubmVySFRNTCxtPUpTT04ucGFyc2Uodik7bS5wcm9wZXJ0aWVzJiZ2UnQoZixtLnByb3BlcnRpZXMpLG0ubGlua3MmJm9ndChmLG0ubGlua3MpfWNhdGNoKHYpe1d0LmVycm9yKCJlcnJvciB3aGlsZSBwYXJzaW5nIGFjdG9yIGRldGFpbHMgdGV4dCIsdil9fSxFSGU9ZnVuY3Rpb24oaSxhKXtpZihpIT09dm9pZCAwJiZpLnByb3BlcnRpZXMhPT12b2lkIDApcmV0dXJuIGkucHJvcGVydGllc1thXX0sbVJ0PWZ1bmN0aW9uKGkpe2lmKEFycmF5LmlzQXJyYXkoaSkpaS5mb3JFYWNoKGZ1bmN0aW9uKGEpe21SdChhKX0pO2Vsc2Ugc3dpdGNoKGkudHlwZSl7Y2FzZSJzZXF1ZW5jZUluZGV4IjpqYi5wdXNoKHtmcm9tOnZvaWQgMCx0bzp2b2lkIDAsbWVzc2FnZTp7c3RhcnQ6aS5zZXF1ZW5jZUluZGV4LHN0ZXA6aS5zZXF1ZW5jZUluZGV4U3RlcCx2aXNpYmxlOmkuc2VxdWVuY2VWaXNpYmxlfSx3cmFwOiExLHR5cGU6aS5zaWduYWxUeXBlfSk7YnJlYWs7Y2FzZSJhZGRQYXJ0aWNpcGFudCI6YWd0KGkuYWN0b3IsaS5hY3RvcixpLmRlc2NyaXB0aW9uLGkuZHJhdyk7YnJlYWs7Y2FzZSJjcmVhdGVQYXJ0aWNpcGFudCI6aWYoSTVbaS5hY3Rvcl0pdGhyb3cgbmV3IEVycm9yKCJJdCBpcyBub3QgcG9zc2libGUgdG8gaGF2ZSBhY3RvcnMgd2l0aCB0aGUgc2FtZSBpZCwgZXZlbiBpZiBvbmUgaXMgZGVzdHJveWVkIGJlZm9yZSB0aGUgbmV4dCBpcyBjcmVhdGVkLiBVc2UgJ0FTJyBhbGlhc2VzIHRvIHNpbXVsYXRlIHRoZSBiZWhhdmlvciIpO05QPWkuYWN0b3IsYWd0KGkuYWN0b3IsaS5hY3RvcixpLmRlc2NyaXB0aW9uLGkuZHJhdykscmd0W2kuYWN0b3JdPWpiLmxlbmd0aDticmVhaztjYXNlImRlc3Ryb3lQYXJ0aWNpcGFudCI6bEw9aS5hY3RvcixpZ3RbaS5hY3Rvcl09amIubGVuZ3RoO2JyZWFrO2Nhc2UiYWN0aXZlU3RhcnQiOm5mKGkuYWN0b3Isdm9pZCAwLHZvaWQgMCxpLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiYWN0aXZlRW5kIjpuZihpLmFjdG9yLHZvaWQgMCx2b2lkIDAsaS5zaWduYWxUeXBlKTticmVhaztjYXNlImFkZE5vdGUiOmdSdChpLmFjdG9yLGkucGxhY2VtZW50LGkudGV4dCk7YnJlYWs7Y2FzZSJhZGRMaW5rcyI6cFJ0KGkuYWN0b3IsaS50ZXh0KTticmVhaztjYXNlImFkZEFMaW5rIjp4SGUoaS5hY3RvcixpLnRleHQpO2JyZWFrO2Nhc2UiYWRkUHJvcGVydGllcyI6YlJ0KGkuYWN0b3IsaS50ZXh0KTticmVhaztjYXNlImFkZERldGFpbHMiOndSdChpLmFjdG9yLGkudGV4dCk7YnJlYWs7Y2FzZSJhZGRNZXNzYWdlIjppZihOUCl7aWYoaS50byE9PU5QKXRocm93IG5ldyBFcnJvcigiVGhlIGNyZWF0ZWQgcGFydGljaXBhbnQgIitOUCsiIGRvZXMgbm90IGhhdmUgYW4gYXNzb2NpYXRlZCBjcmVhdGluZyBtZXNzYWdlIGFmdGVyIGl0cyBkZWNsYXJhdGlvbi4gUGxlYXNlIGNoZWNrIHRoZSBzZXF1ZW5jZSBkaWFncmFtLiIpO05QPXZvaWQgMH1lbHNlIGlmKGxMKXtpZihpLnRvIT09bEwmJmkuZnJvbSE9PWxMKXRocm93IG5ldyBFcnJvcigiVGhlIGRlc3Ryb3llZCBwYXJ0aWNpcGFudCAiK2xMKyIgZG9lcyBub3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGRlc3Ryb3lpbmcgbWVzc2FnZSBhZnRlciBpdHMgZGVjbGFyYXRpb24uIFBsZWFzZSBjaGVjayB0aGUgc2VxdWVuY2UgZGlhZ3JhbS4iKTtsTD12b2lkIDB9bmYoaS5mcm9tLGkudG8saS5tc2csaS5zaWduYWxUeXBlKTticmVhaztjYXNlImJveFN0YXJ0IjplSGUoaS5ib3hEYXRhKTticmVhaztjYXNlImJveEVuZCI6a0hlKCk7YnJlYWs7Y2FzZSJsb29wU3RhcnQiOm5mKHZvaWQgMCx2b2lkIDAsaS5sb29wVGV4dCxpLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UibG9vcEVuZCI6bmYodm9pZCAwLHZvaWQgMCx2b2lkIDAsaS5zaWduYWxUeXBlKTticmVhaztjYXNlInJlY3RTdGFydCI6bmYodm9pZCAwLHZvaWQgMCxpLmNvbG9yLGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJyZWN0RW5kIjpuZih2b2lkIDAsdm9pZCAwLHZvaWQgMCxpLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2Uib3B0U3RhcnQiOm5mKHZvaWQgMCx2b2lkIDAsaS5vcHRUZXh0LGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJvcHRFbmQiOm5mKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJhbHRTdGFydCI6bmYodm9pZCAwLHZvaWQgMCxpLmFsdFRleHQsaS5zaWduYWxUeXBlKTticmVhaztjYXNlImVsc2UiOm5mKHZvaWQgMCx2b2lkIDAsaS5hbHRUZXh0LGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJhbHRFbmQiOm5mKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJzZXRBY2NUaXRsZSI6bTAoaS50ZXh0KTticmVhaztjYXNlInBhclN0YXJ0IjpuZih2b2lkIDAsdm9pZCAwLGkucGFyVGV4dCxpLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiYW5kIjpuZih2b2lkIDAsdm9pZCAwLGkucGFyVGV4dCxpLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UicGFyRW5kIjpuZih2b2lkIDAsdm9pZCAwLHZvaWQgMCxpLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiY3JpdGljYWxTdGFydCI6bmYodm9pZCAwLHZvaWQgMCxpLmNyaXRpY2FsVGV4dCxpLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2Uib3B0aW9uIjpuZih2b2lkIDAsdm9pZCAwLGkub3B0aW9uVGV4dCxpLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiY3JpdGljYWxFbmQiOm5mKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJicmVha1N0YXJ0IjpuZih2b2lkIDAsdm9pZCAwLGkuYnJlYWtUZXh0LGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJicmVha0VuZCI6bmYodm9pZCAwLHZvaWQgMCx2b2lkIDAsaS5zaWduYWxUeXBlKTticmVha319LFRIZT17YWRkQWN0b3I6YWd0LGFkZE1lc3NhZ2U6ckhlLGFkZFNpZ25hbDpuZixhZGRMaW5rczpwUnQsYWRkRGV0YWlsczp3UnQsYWRkUHJvcGVydGllczpiUnQsYXV0b1dyYXA6bTksc2V0V3JhcDpwSGUsZW5hYmxlU2VxdWVuY2VOdW1iZXJzOmZIZSxkaXNhYmxlU2VxdWVuY2VOdW1iZXJzOmRIZSxzaG93U2VxdWVuY2VOdW1iZXJzOmdIZSxnZXRNZXNzYWdlczphSGUsZ2V0QWN0b3JzOmNIZSxnZXRDcmVhdGVkQWN0b3JzOnVIZSxnZXREZXN0cm95ZWRBY3RvcnM6bEhlLGdldEFjdG9yOlBQLGdldEFjdG9yS2V5czpoSGUsZ2V0QWN0b3JQcm9wZXJ0eTpFSGUsZ2V0QWNjVGl0bGU6dWcsZ2V0Qm94ZXM6b0hlLGdldERpYWdyYW1UaXRsZTpocCxzZXREaWFncmFtVGl0bGU6TmIscGFyc2VEaXJlY3RpdmU6dEhlLGdldENvbmZpZzooKT0+RGUoKS5zZXF1ZW5jZSxjbGVhcjpiSGUscGFyc2VNZXNzYWdlOnZIZSxwYXJzZUJveERhdGE6d0hlLExJTkVUWVBFOkZQLEFSUk9XVFlQRTptSGUsUExBQ0VNRU5UOnlIZSxhZGROb3RlOmdSdCxzZXRBY2NUaXRsZTptMCxhcHBseTptUnQsc2V0QWNjRGVzY3JpcHRpb246bGcsZ2V0QWNjRGVzY3JpcHRpb246aGcsaGFzQXRMZWFzdE9uZUJveDppSGUsaGFzQXRMZWFzdE9uZUJveFdpdGhUaXRsZTpzSGV9LF9IZT1pPT5gLmFjdG9yIHsKICAgIHN0cm9rZTogJHtpLmFjdG9yQm9yZGVyfTsKICAgIGZpbGw6ICR7aS5hY3RvckJrZ307CiAgfQoKICB0ZXh0LmFjdG9yID4gdHNwYW4gewogICAgZmlsbDogJHtpLmFjdG9yVGV4dENvbG9yfTsKICAgIHN0cm9rZTogbm9uZTsKICB9CgogIC5hY3Rvci1saW5lIHsKICAgIHN0cm9rZTogJHtpLmFjdG9yTGluZUNvbG9yfTsKICB9CgogIC5tZXNzYWdlTGluZTAgewogICAgc3Ryb2tlLXdpZHRoOiAxLjU7CiAgICBzdHJva2UtZGFzaGFycmF5OiBub25lOwogICAgc3Ryb2tlOiAke2kuc2lnbmFsQ29sb3J9OwogIH0KCiAgLm1lc3NhZ2VMaW5lMSB7CiAgICBzdHJva2Utd2lkdGg6IDEuNTsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDI7CiAgICBzdHJva2U6ICR7aS5zaWduYWxDb2xvcn07CiAgfQoKICAjYXJyb3doZWFkIHBhdGggewogICAgZmlsbDogJHtpLnNpZ25hbENvbG9yfTsKICAgIHN0cm9rZTogJHtpLnNpZ25hbENvbG9yfTsKICB9CgogIC5zZXF1ZW5jZU51bWJlciB7CiAgICBmaWxsOiAke2kuc2VxdWVuY2VOdW1iZXJDb2xvcn07CiAgfQoKICAjc2VxdWVuY2VudW1iZXIgewogICAgZmlsbDogJHtpLnNpZ25hbENvbG9yfTsKICB9CgogICNjcm9zc2hlYWQgcGF0aCB7CiAgICBmaWxsOiAke2kuc2lnbmFsQ29sb3J9OwogICAgc3Ryb2tlOiAke2kuc2lnbmFsQ29sb3J9OwogIH0KCiAgLm1lc3NhZ2VUZXh0IHsKICAgIGZpbGw6ICR7aS5zaWduYWxUZXh0Q29sb3J9OwogICAgc3Ryb2tlOiBub25lOwogIH0KCiAgLmxhYmVsQm94IHsKICAgIHN0cm9rZTogJHtpLmxhYmVsQm94Qm9yZGVyQ29sb3J9OwogICAgZmlsbDogJHtpLmxhYmVsQm94QmtnQ29sb3J9OwogIH0KCiAgLmxhYmVsVGV4dCwgLmxhYmVsVGV4dCA+IHRzcGFuIHsKICAgIGZpbGw6ICR7aS5sYWJlbFRleHRDb2xvcn07CiAgICBzdHJva2U6IG5vbmU7CiAgfQoKICAubG9vcFRleHQsIC5sb29wVGV4dCA+IHRzcGFuIHsKICAgIGZpbGw6ICR7aS5sb29wVGV4dENvbG9yfTsKICAgIHN0cm9rZTogbm9uZTsKICB9CgogIC5sb29wTGluZSB7CiAgICBzdHJva2Utd2lkdGg6IDJweDsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDI7CiAgICBzdHJva2U6ICR7aS5sYWJlbEJveEJvcmRlckNvbG9yfTsKICAgIGZpbGw6ICR7aS5sYWJlbEJveEJvcmRlckNvbG9yfTsKICB9CgogIC5ub3RlIHsKICAgIC8vc3Ryb2tlOiAjZGVjYzkzOwogICAgc3Ryb2tlOiAke2kubm90ZUJvcmRlckNvbG9yfTsKICAgIGZpbGw6ICR7aS5ub3RlQmtnQ29sb3J9OwogIH0KCiAgLm5vdGVUZXh0LCAubm90ZVRleHQgPiB0c3BhbiB7CiAgICBmaWxsOiAke2kubm90ZVRleHRDb2xvcn07CiAgICBzdHJva2U6IG5vbmU7CiAgfQoKICAuYWN0aXZhdGlvbjAgewogICAgZmlsbDogJHtpLmFjdGl2YXRpb25Ca2dDb2xvcn07CiAgICBzdHJva2U6ICR7aS5hY3RpdmF0aW9uQm9yZGVyQ29sb3J9OwogIH0KCiAgLmFjdGl2YXRpb24xIHsKICAgIGZpbGw6ICR7aS5hY3RpdmF0aW9uQmtnQ29sb3J9OwogICAgc3Ryb2tlOiAke2kuYWN0aXZhdGlvbkJvcmRlckNvbG9yfTsKICB9CgogIC5hY3RpdmF0aW9uMiB7CiAgICBmaWxsOiAke2kuYWN0aXZhdGlvbkJrZ0NvbG9yfTsKICAgIHN0cm9rZTogJHtpLmFjdGl2YXRpb25Cb3JkZXJDb2xvcn07CiAgfQoKICAuYWN0b3JQb3B1cE1lbnUgewogICAgcG9zaXRpb246IGFic29sdXRlOwogIH0KCiAgLmFjdG9yUG9wdXBNZW51UGFuZWwgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgZmlsbDogJHtpLmFjdG9yQmtnfTsKICAgIGJveC1zaGFkb3c6IDBweCA4cHggMTZweCAwcHggcmdiYSgwLDAsMCwwLjIpOwogICAgZmlsdGVyOiBkcm9wLXNoYWRvdygzcHggNXB4IDJweCByZ2IoMCAwIDAgLyAwLjQpKTsKfQogIC5hY3Rvci1tYW4gbGluZSB7CiAgICBzdHJva2U6ICR7aS5hY3RvckJvcmRlcn07CiAgICBmaWxsOiAke2kuYWN0b3JCa2d9OwogIH0KICAuYWN0b3ItbWFuIGNpcmNsZSwgbGluZSB7CiAgICBzdHJva2U6ICR7aS5hY3RvckJvcmRlcn07CiAgICBmaWxsOiAke2kuYWN0b3JCa2d9OwogICAgc3Ryb2tlLXdpZHRoOiAycHg7CiAgfQpgLHk5PTE4KjIsY2d0PWZ1bmN0aW9uKGksYSl7cmV0dXJuIFdXKGksYSl9LHlSdD0oaSxhKT0+e09MZSgoKT0+e2NvbnN0IGY9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChpKTtmLmxlbmd0aCE9PTAmJihmWzBdLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXtMSGUoImFjdG9yIithKyJfcG9wdXAiKX0pLGZbMF0uYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLGZ1bmN0aW9uKCl7TUhlKCJhY3RvciIrYSsiX3BvcHVwIil9KSl9KX0sQ0hlPWZ1bmN0aW9uKGksYSxmLHAsdil7aWYoYS5saW5rcz09PXZvaWQgMHx8YS5saW5rcz09PW51bGx8fE9iamVjdC5rZXlzKGEubGlua3MpLmxlbmd0aD09PTApcmV0dXJue2hlaWdodDowLHdpZHRoOjB9O2NvbnN0IG09YS5saW5rcyxiPWEuYWN0b3JDbnQsRT1hLnJlY3REYXRhO3ZhciBDPSJub25lIjt2JiYoQz0iYmxvY2sgIWltcG9ydGFudCIpO2NvbnN0IEE9aS5hcHBlbmQoImciKTtBLmF0dHIoImlkIiwiYWN0b3IiK2IrIl9wb3B1cCIpLEEuYXR0cigiY2xhc3MiLCJhY3RvclBvcHVwTWVudSIpLEEuYXR0cigiZGlzcGxheSIsQykseVJ0KCIjYWN0b3IiK2IrIl9wb3B1cCIsYik7dmFyIFA9IiI7RS5jbGFzcyE9PXZvaWQgMCYmKFA9IiAiK0UuY2xhc3MpO2xldCBGPUUud2lkdGg+Zj9FLndpZHRoOmY7Y29uc3Qgaj1BLmFwcGVuZCgicmVjdCIpO2lmKGouYXR0cigiY2xhc3MiLCJhY3RvclBvcHVwTWVudVBhbmVsIitQKSxqLmF0dHIoIngiLEUueCksai5hdHRyKCJ5IixFLmhlaWdodCksai5hdHRyKCJmaWxsIixFLmZpbGwpLGouYXR0cigic3Ryb2tlIixFLnN0cm9rZSksai5hdHRyKCJ3aWR0aCIsRiksai5hdHRyKCJoZWlnaHQiLEUuaGVpZ2h0KSxqLmF0dHIoInJ4IixFLnJ4KSxqLmF0dHIoInJ5IixFLnJ5KSxtIT1udWxsKXt2YXIgUj0yMDtmb3IobGV0IHJ0IGluIG0pe3ZhciBIPUEuYXBwZW5kKCJhIiksWT1YeChtW3J0XSk7SC5hdHRyKCJ4bGluazpocmVmIixZKSxILmF0dHIoInRhcmdldCIsIl9ibGFuayIpLFVIZShwKShydCxILEUueCsxMCxFLmhlaWdodCtSLEYsMjAse2NsYXNzOiJhY3RvciJ9LHApLFIrPTMwfX1yZXR1cm4gai5hdHRyKCJoZWlnaHQiLFIpLHtoZWlnaHQ6RS5oZWlnaHQrUix3aWR0aDpGfX0sU0hlPWZ1bmN0aW9uKGkpe3JldHVybiJ2YXIgcHUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnIitpKyInKTsgaWYgKHB1ICE9IG51bGwpIHsgcHUuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7IH0ifSxBSGU9ZnVuY3Rpb24oaSl7cmV0dXJuInZhciBwdSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCciK2krIicpOyBpZiAocHUgIT0gbnVsbCkgeyBwdS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOyB9In0sTEhlPWZ1bmN0aW9uKGkpe3ZhciBhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGkpO2EhPW51bGwmJihhLnN0eWxlLmRpc3BsYXk9ImJsb2NrIil9LE1IZT1mdW5jdGlvbihpKXt2YXIgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpKTthIT1udWxsJiYoYS5zdHlsZS5kaXNwbGF5PSJub25lIil9LGhMPWZ1bmN0aW9uKGksYSl7bGV0IGY9MCxwPTA7Y29uc3Qgdj1hLnRleHQuc3BsaXQodWkubGluZUJyZWFrUmVnZXgpLFttLGJdPXpBKGEuZm9udFNpemUpO2xldCBFPVtdLEM9MCxBPSgpPT5hLnk7aWYoYS52YWxpZ24hPT12b2lkIDAmJmEudGV4dE1hcmdpbiE9PXZvaWQgMCYmYS50ZXh0TWFyZ2luPjApc3dpdGNoKGEudmFsaWduKXtjYXNlInRvcCI6Y2FzZSJzdGFydCI6QT0oKT0+TWF0aC5yb3VuZChhLnkrYS50ZXh0TWFyZ2luKTticmVhaztjYXNlIm1pZGRsZSI6Y2FzZSJjZW50ZXIiOkE9KCk9Pk1hdGgucm91bmQoYS55KyhmK3ArYS50ZXh0TWFyZ2luKS8yKTticmVhaztjYXNlImJvdHRvbSI6Y2FzZSJlbmQiOkE9KCk9Pk1hdGgucm91bmQoYS55KyhmK3ArMiphLnRleHRNYXJnaW4pLWEudGV4dE1hcmdpbik7YnJlYWt9aWYoYS5hbmNob3IhPT12b2lkIDAmJmEudGV4dE1hcmdpbiE9PXZvaWQgMCYmYS53aWR0aCE9PXZvaWQgMClzd2l0Y2goYS5hbmNob3Ipe2Nhc2UibGVmdCI6Y2FzZSJzdGFydCI6YS54PU1hdGgucm91bmQoYS54K2EudGV4dE1hcmdpbiksYS5hbmNob3I9InN0YXJ0IixhLmRvbWluYW50QmFzZWxpbmU9Im1pZGRsZSIsYS5hbGlnbm1lbnRCYXNlbGluZT0ibWlkZGxlIjticmVhaztjYXNlIm1pZGRsZSI6Y2FzZSJjZW50ZXIiOmEueD1NYXRoLnJvdW5kKGEueCthLndpZHRoLzIpLGEuYW5jaG9yPSJtaWRkbGUiLGEuZG9taW5hbnRCYXNlbGluZT0ibWlkZGxlIixhLmFsaWdubWVudEJhc2VsaW5lPSJtaWRkbGUiO2JyZWFrO2Nhc2UicmlnaHQiOmNhc2UiZW5kIjphLng9TWF0aC5yb3VuZChhLngrYS53aWR0aC1hLnRleHRNYXJnaW4pLGEuYW5jaG9yPSJlbmQiLGEuZG9taW5hbnRCYXNlbGluZT0ibWlkZGxlIixhLmFsaWdubWVudEJhc2VsaW5lPSJtaWRkbGUiO2JyZWFrfWZvcihsZXRbUCxGXW9mIHYuZW50cmllcygpKXthLnRleHRNYXJnaW4hPT12b2lkIDAmJmEudGV4dE1hcmdpbj09PTAmJm0hPT12b2lkIDAmJihDPVAqbSk7Y29uc3Qgaj1pLmFwcGVuZCgidGV4dCIpO2ouYXR0cigieCIsYS54KSxqLmF0dHIoInkiLEEoKSksYS5hbmNob3IhPT12b2lkIDAmJmouYXR0cigidGV4dC1hbmNob3IiLGEuYW5jaG9yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsYS5kb21pbmFudEJhc2VsaW5lKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLGEuYWxpZ25tZW50QmFzZWxpbmUpLGEuZm9udEZhbWlseSE9PXZvaWQgMCYmai5zdHlsZSgiZm9udC1mYW1pbHkiLGEuZm9udEZhbWlseSksYiE9PXZvaWQgMCYmai5zdHlsZSgiZm9udC1zaXplIixiKSxhLmZvbnRXZWlnaHQhPT12b2lkIDAmJmouc3R5bGUoImZvbnQtd2VpZ2h0IixhLmZvbnRXZWlnaHQpLGEuZmlsbCE9PXZvaWQgMCYmai5hdHRyKCJmaWxsIixhLmZpbGwpLGEuY2xhc3MhPT12b2lkIDAmJmouYXR0cigiY2xhc3MiLGEuY2xhc3MpLGEuZHkhPT12b2lkIDA/ai5hdHRyKCJkeSIsYS5keSk6QyE9PTAmJmouYXR0cigiZHkiLEMpO2NvbnN0IFI9Rnx8UEl0O2lmKGEudHNwYW4pe2NvbnN0IEg9ai5hcHBlbmQoInRzcGFuIik7SC5hdHRyKCJ4IixhLngpLGEuZmlsbCE9PXZvaWQgMCYmSC5hdHRyKCJmaWxsIixhLmZpbGwpLEgudGV4dChSKX1lbHNlIGoudGV4dChSKTthLnZhbGlnbiE9PXZvaWQgMCYmYS50ZXh0TWFyZ2luIT09dm9pZCAwJiZhLnRleHRNYXJnaW4+MCYmKHArPShqLl9ncm91cHN8fGopWzBdWzBdLmdldEJCb3goKS5oZWlnaHQsZj1wKSxFLnB1c2goail9cmV0dXJuIEV9LHhSdD1mdW5jdGlvbihpLGEpe2Z1bmN0aW9uIGYodixtLGIsRSxDKXtyZXR1cm4gdisiLCIrbSsiICIrKHYrYikrIiwiK20rIiAiKyh2K2IpKyIsIisobStFLUMpKyIgIisoditiLUMqMS4yKSsiLCIrKG0rRSkrIiAiK3YrIiwiKyhtK0UpfWNvbnN0IHA9aS5hcHBlbmQoInBvbHlnb24iKTtyZXR1cm4gcC5hdHRyKCJwb2ludHMiLGYoYS54LGEueSxhLndpZHRoLGEuaGVpZ2h0LDcpKSxwLmF0dHIoImNsYXNzIiwibGFiZWxCb3giKSxhLnk9YS55K2EuaGVpZ2h0LzIsaEwoaSxhKSxwfTtsZXQgaG09LTE7Y29uc3Qga1J0PShpLGEsZixwKT0+e2kuc2VsZWN0JiZmLmZvckVhY2godj0+e2NvbnN0IG09YVt2XSxiPWkuc2VsZWN0KCIjYWN0b3IiK20uYWN0b3JDbnQpOyFwLm1pcnJvckFjdG9ycyYmbS5zdG9weT9iLmF0dHIoInkyIixtLnN0b3B5K20uaGVpZ2h0LzIpOnAubWlycm9yQWN0b3JzJiZiLmF0dHIoInkyIixtLnN0b3B5KX0pfSxESGU9ZnVuY3Rpb24oaSxhLGYscCl7Y29uc3Qgdj1wP2Euc3RvcHk6YS5zdGFydHksbT1hLngrYS53aWR0aC8yLGI9dis1LEU9aS5hcHBlbmQoImciKS5sb3dlcigpO3ZhciBDPUU7cHx8KGhtKyssQy5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsImFjdG9yIitobSkuYXR0cigieDEiLG0pLmF0dHIoInkxIixiKS5hdHRyKCJ4MiIsbSkuYXR0cigieTIiLDJlMykuYXR0cigiY2xhc3MiLCJhY3Rvci1saW5lIikuYXR0cigiY2xhc3MiLCIyMDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIwLjVweCIpLmF0dHIoInN0cm9rZSIsIiM5OTkiKSxDPUUuYXBwZW5kKCJnIiksYS5hY3RvckNudD1obSxhLmxpbmtzIT1udWxsJiYoQy5hdHRyKCJpZCIsInJvb3QtIitobSkseVJ0KCIjcm9vdC0iK2htLGhtKSkpO2NvbnN0IEE9dTkoKTt2YXIgUD0iYWN0b3IiO2EucHJvcGVydGllcyE9bnVsbCYmYS5wcm9wZXJ0aWVzLmNsYXNzP1A9YS5wcm9wZXJ0aWVzLmNsYXNzOkEuZmlsbD0iI2VhZWFlYSIsQS54PWEueCxBLnk9dixBLndpZHRoPWEud2lkdGgsQS5oZWlnaHQ9YS5oZWlnaHQsQS5jbGFzcz1QLEEucng9MyxBLnJ5PTM7Y29uc3QgRj1jZ3QoQyxBKTtpZihhLnJlY3REYXRhPUEsYS5wcm9wZXJ0aWVzIT1udWxsJiZhLnByb3BlcnRpZXMuaWNvbil7Y29uc3QgUj1hLnByb3BlcnRpZXMuaWNvbi50cmltKCk7Ui5jaGFyQXQoMCk9PT0iQCI/b0RlKEMsQS54K0Eud2lkdGgtMjAsQS55KzEwLFIuc3Vic3RyKDEpKTphRGUoQyxBLngrQS53aWR0aC0yMCxBLnkrMTAsUil9dWd0KGYpKGEuZGVzY3JpcHRpb24sQyxBLngsQS55LEEud2lkdGgsQS5oZWlnaHQse2NsYXNzOiJhY3RvciJ9LGYpO2xldCBqPWEuaGVpZ2h0O2lmKEYubm9kZSl7Y29uc3QgUj1GLm5vZGUoKS5nZXRCQm94KCk7YS5oZWlnaHQ9Ui5oZWlnaHQsaj1SLmhlaWdodH1yZXR1cm4gan0sSUhlPWZ1bmN0aW9uKGksYSxmLHApe2NvbnN0IHY9cD9hLnN0b3B5OmEuc3RhcnR5LG09YS54K2Eud2lkdGgvMixiPXYrODA7aS5sb3dlcigpLHB8fChobSsrLGkuYXBwZW5kKCJsaW5lIikuYXR0cigiaWQiLCJhY3RvciIraG0pLmF0dHIoIngxIixtKS5hdHRyKCJ5MSIsYikuYXR0cigieDIiLG0pLmF0dHIoInkyIiwyZTMpLmF0dHIoImNsYXNzIiwiYWN0b3ItbGluZSIpLmF0dHIoImNsYXNzIiwiMjAwIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41cHgiKS5hdHRyKCJzdHJva2UiLCIjOTk5IiksYS5hY3RvckNudD1obSk7Y29uc3QgRT1pLmFwcGVuZCgiZyIpO0UuYXR0cigiY2xhc3MiLCJhY3Rvci1tYW4iKTtjb25zdCBDPXU5KCk7Qy54PWEueCxDLnk9dixDLmZpbGw9IiNlYWVhZWEiLEMud2lkdGg9YS53aWR0aCxDLmhlaWdodD1hLmhlaWdodCxDLmNsYXNzPSJhY3RvciIsQy5yeD0zLEMucnk9MyxFLmFwcGVuZCgibGluZSIpLmF0dHIoImlkIiwiYWN0b3ItbWFuLXRvcnNvIitobSkuYXR0cigieDEiLG0pLmF0dHIoInkxIix2KzI1KS5hdHRyKCJ4MiIsbSkuYXR0cigieTIiLHYrNDUpLEUuYXBwZW5kKCJsaW5lIikuYXR0cigiaWQiLCJhY3Rvci1tYW4tYXJtcyIraG0pLmF0dHIoIngxIixtLXk5LzIpLmF0dHIoInkxIix2KzMzKS5hdHRyKCJ4MiIsbSt5OS8yKS5hdHRyKCJ5MiIsdiszMyksRS5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsbS15OS8yKS5hdHRyKCJ5MSIsdis2MCkuYXR0cigieDIiLG0pLmF0dHIoInkyIix2KzQ1KSxFLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixtKS5hdHRyKCJ5MSIsdis0NSkuYXR0cigieDIiLG0reTkvMi0yKS5hdHRyKCJ5MiIsdis2MCk7Y29uc3QgQT1FLmFwcGVuZCgiY2lyY2xlIik7QS5hdHRyKCJjeCIsYS54K2Eud2lkdGgvMiksQS5hdHRyKCJjeSIsdisxMCksQS5hdHRyKCJyIiwxNSksQS5hdHRyKCJ3aWR0aCIsYS53aWR0aCksQS5hdHRyKCJoZWlnaHQiLGEuaGVpZ2h0KTtjb25zdCBQPUUubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gYS5oZWlnaHQ9UC5oZWlnaHQsdWd0KGYpKGEuZGVzY3JpcHRpb24sRSxDLngsQy55KzM1LEMud2lkdGgsQy5oZWlnaHQse2NsYXNzOiJhY3RvciJ9LGYpLGEuaGVpZ2h0fSxPSGU9ZnVuY3Rpb24oaSxhLGYscCl7c3dpdGNoKGEudHlwZSl7Y2FzZSJhY3RvciI6cmV0dXJuIElIZShpLGEsZixwKTtjYXNlInBhcnRpY2lwYW50IjpyZXR1cm4gREhlKGksYSxmLHApfX0sTkhlPWZ1bmN0aW9uKGksYSxmKXtjb25zdCB2PWkuYXBwZW5kKCJnIik7RVJ0KHYsYSksYS5uYW1lJiZ1Z3QoZikoYS5uYW1lLHYsYS54LGEueSsoYS50ZXh0TWF4SGVpZ2h0fHwwKS8yLGEud2lkdGgsMCx7Y2xhc3M6InRleHQifSxmKSx2Lmxvd2VyKCl9LFBIZT1mdW5jdGlvbihpKXtyZXR1cm4gaS5hcHBlbmQoImciKX0sRkhlPWZ1bmN0aW9uKGksYSxmLHAsdil7Y29uc3QgbT11OSgpLGI9YS5hbmNob3JlZDttLng9YS5zdGFydHgsbS55PWEuc3RhcnR5LG0uY2xhc3M9ImFjdGl2YXRpb24iK3YlMyxtLndpZHRoPWEuc3RvcHgtYS5zdGFydHgsbS5oZWlnaHQ9Zi1hLnN0YXJ0eSxjZ3QoYixtKX0sQkhlPWZ1bmN0aW9uKGksYSxmLHApe2NvbnN0e2JveE1hcmdpbjp2LGJveFRleHRNYXJnaW46bSxsYWJlbEJveEhlaWdodDpiLGxhYmVsQm94V2lkdGg6RSxtZXNzYWdlRm9udEZhbWlseTpDLG1lc3NhZ2VGb250U2l6ZTpBLG1lc3NhZ2VGb250V2VpZ2h0OlB9PXAsRj1pLmFwcGVuZCgiZyIpLGo9ZnVuY3Rpb24oWSxydCxKLGl0KXtyZXR1cm4gRi5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsWSkuYXR0cigieTEiLHJ0KS5hdHRyKCJ4MiIsSikuYXR0cigieTIiLGl0KS5hdHRyKCJjbGFzcyIsImxvb3BMaW5lIil9O2ooYS5zdGFydHgsYS5zdGFydHksYS5zdG9weCxhLnN0YXJ0eSksaihhLnN0b3B4LGEuc3RhcnR5LGEuc3RvcHgsYS5zdG9weSksaihhLnN0YXJ0eCxhLnN0b3B5LGEuc3RvcHgsYS5zdG9weSksaihhLnN0YXJ0eCxhLnN0YXJ0eSxhLnN0YXJ0eCxhLnN0b3B5KSxhLnNlY3Rpb25zIT09dm9pZCAwJiZhLnNlY3Rpb25zLmZvckVhY2goZnVuY3Rpb24oWSl7aihhLnN0YXJ0eCxZLnksYS5zdG9weCxZLnkpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMywgMyIpfSk7bGV0IFI9RGR0KCk7Ui50ZXh0PWYsUi54PWEuc3RhcnR4LFIueT1hLnN0YXJ0eSxSLmZvbnRGYW1pbHk9QyxSLmZvbnRTaXplPUEsUi5mb250V2VpZ2h0PVAsUi5hbmNob3I9Im1pZGRsZSIsUi52YWxpZ249Im1pZGRsZSIsUi50c3Bhbj0hMSxSLndpZHRoPUV8fDUwLFIuaGVpZ2h0PWJ8fDIwLFIudGV4dE1hcmdpbj1tLFIuY2xhc3M9ImxhYmVsVGV4dCIseFJ0KEYsUiksUj1UUnQoKSxSLnRleHQ9YS50aXRsZSxSLng9YS5zdGFydHgrRS8yKyhhLnN0b3B4LWEuc3RhcnR4KS8yLFIueT1hLnN0YXJ0eSt2K20sUi5hbmNob3I9Im1pZGRsZSIsUi52YWxpZ249Im1pZGRsZSIsUi50ZXh0TWFyZ2luPW0sUi5jbGFzcz0ibG9vcFRleHQiLFIuZm9udEZhbWlseT1DLFIuZm9udFNpemU9QSxSLmZvbnRXZWlnaHQ9UCxSLndyYXA9ITA7bGV0IEg9aEwoRixSKTtyZXR1cm4gYS5zZWN0aW9uVGl0bGVzIT09dm9pZCAwJiZhLnNlY3Rpb25UaXRsZXMuZm9yRWFjaChmdW5jdGlvbihZLHJ0KXtpZihZLm1lc3NhZ2Upe1IudGV4dD1ZLm1lc3NhZ2UsUi54PWEuc3RhcnR4KyhhLnN0b3B4LWEuc3RhcnR4KS8yLFIueT1hLnNlY3Rpb25zW3J0XS55K3YrbSxSLmNsYXNzPSJsb29wVGV4dCIsUi5hbmNob3I9Im1pZGRsZSIsUi52YWxpZ249Im1pZGRsZSIsUi50c3Bhbj0hMSxSLmZvbnRGYW1pbHk9QyxSLmZvbnRTaXplPUEsUi5mb250V2VpZ2h0PVAsUi53cmFwPWEud3JhcCxIPWhMKEYsUik7bGV0IEo9TWF0aC5yb3VuZChILm1hcChpdD0+KGl0Ll9ncm91cHN8fGl0KVswXVswXS5nZXRCQm94KCkuaGVpZ2h0KS5yZWR1Y2UoKGl0LGZ0KT0+aXQrZnQpKTthLnNlY3Rpb25zW3J0XS5oZWlnaHQrPUotKHYrbSl9fSksYS5oZWlnaHQ9TWF0aC5yb3VuZChhLnN0b3B5LWEuc3RhcnR5KSxGfSxFUnQ9ZnVuY3Rpb24oaSxhKXtwTnQoaSxhKX0sUkhlPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJzeW1ib2wiKS5hdHRyKCJpZCIsImRhdGFiYXNlIikuYXR0cigiZmlsbC1ydWxlIiwiZXZlbm9kZCIpLmF0dHIoImNsaXAtcnVsZSIsImV2ZW5vZGQiKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSguNSkiKS5hdHRyKCJkIiwiTTEyLjI1OC4wMDFsLjI1Ni4wMDQuMjU1LjAwNS4yNTMuMDA4LjI1MS4wMS4yNDkuMDEyLjI0Ny4wMTUuMjQ2LjAxNi4yNDIuMDE5LjI0MS4wMi4yMzkuMDIzLjIzNi4wMjQuMjMzLjAyNy4yMzEuMDI4LjIyOS4wMzEuMjI1LjAzMi4yMjMuMDM0LjIyLjAzNi4yMTcuMDM4LjIxNC4wNC4yMTEuMDQxLjIwOC4wNDMuMjA1LjA0NS4yMDEuMDQ2LjE5OC4wNDguMTk0LjA1LjE5MS4wNTEuMTg3LjA1My4xODMuMDU0LjE4LjA1Ni4xNzUuMDU3LjE3Mi4wNTkuMTY4LjA2LjE2My4wNjEuMTYuMDYzLjE1NS4wNjQuMTUuMDY2LjA3NC4wMzMuMDczLjAzMy4wNzEuMDM0LjA3LjAzNC4wNjkuMDM1LjA2OC4wMzUuMDY3LjAzNS4wNjYuMDM1LjA2NC4wMzYuMDY0LjAzNi4wNjIuMDM2LjA2LjAzNi4wNi4wMzcuMDU4LjAzNy4wNTguMDM3LjA1NS4wMzguMDU1LjAzOC4wNTMuMDM4LjA1Mi4wMzguMDUxLjAzOS4wNS4wMzkuMDQ4LjAzOS4wNDcuMDM5LjA0NS4wNC4wNDQuMDQuMDQzLjA0LjA0MS4wNC4wNC4wNDEuMDM5LjA0MS4wMzcuMDQxLjAzNi4wNDEuMDM0LjA0MS4wMzMuMDQyLjAzMi4wNDIuMDMuMDQyLjAyOS4wNDIuMDI3LjA0Mi4wMjYuMDQzLjAyNC4wNDMuMDIzLjA0My4wMjEuMDQzLjAyLjA0My4wMTguMDQ0LjAxNy4wNDMuMDE1LjA0NC4wMTMuMDQ0LjAxMi4wNDQuMDExLjA0NS4wMDkuMDQ0LjAwNy4wNDUuMDA2LjA0NS4wMDQuMDQ1LjAwMi4wNDUuMDAxLjA0NXYxN2wtLjAwMS4wNDUtLjAwMi4wNDUtLjAwNC4wNDUtLjAwNi4wNDUtLjAwNy4wNDUtLjAwOS4wNDQtLjAxMS4wNDUtLjAxMi4wNDQtLjAxMy4wNDQtLjAxNS4wNDQtLjAxNy4wNDMtLjAxOC4wNDQtLjAyLjA0My0uMDIxLjA0My0uMDIzLjA0My0uMDI0LjA0My0uMDI2LjA0My0uMDI3LjA0Mi0uMDI5LjA0Mi0uMDMuMDQyLS4wMzIuMDQyLS4wMzMuMDQyLS4wMzQuMDQxLS4wMzYuMDQxLS4wMzcuMDQxLS4wMzkuMDQxLS4wNC4wNDEtLjA0MS4wNC0uMDQzLjA0LS4wNDQuMDQtLjA0NS4wNC0uMDQ3LjAzOS0uMDQ4LjAzOS0uMDUuMDM5LS4wNTEuMDM5LS4wNTIuMDM4LS4wNTMuMDM4LS4wNTUuMDM4LS4wNTUuMDM4LS4wNTguMDM3LS4wNTguMDM3LS4wNi4wMzctLjA2LjAzNi0uMDYyLjAzNi0uMDY0LjAzNi0uMDY0LjAzNi0uMDY2LjAzNS0uMDY3LjAzNS0uMDY4LjAzNS0uMDY5LjAzNS0uMDcuMDM0LS4wNzEuMDM0LS4wNzMuMDMzLS4wNzQuMDMzLS4xNS4wNjYtLjE1NS4wNjQtLjE2LjA2My0uMTYzLjA2MS0uMTY4LjA2LS4xNzIuMDU5LS4xNzUuMDU3LS4xOC4wNTYtLjE4My4wNTQtLjE4Ny4wNTMtLjE5MS4wNTEtLjE5NC4wNS0uMTk4LjA0OC0uMjAxLjA0Ni0uMjA1LjA0NS0uMjA4LjA0My0uMjExLjA0MS0uMjE0LjA0LS4yMTcuMDM4LS4yMi4wMzYtLjIyMy4wMzQtLjIyNS4wMzItLjIyOS4wMzEtLjIzMS4wMjgtLjIzMy4wMjctLjIzNi4wMjQtLjIzOS4wMjMtLjI0MS4wMi0uMjQyLjAxOS0uMjQ2LjAxNi0uMjQ3LjAxNS0uMjQ5LjAxMi0uMjUxLjAxLS4yNTMuMDA4LS4yNTUuMDA1LS4yNTYuMDA0LS4yNTguMDAxLS4yNTgtLjAwMS0uMjU2LS4wMDQtLjI1NS0uMDA1LS4yNTMtLjAwOC0uMjUxLS4wMS0uMjQ5LS4wMTItLjI0Ny0uMDE1LS4yNDUtLjAxNi0uMjQzLS4wMTktLjI0MS0uMDItLjIzOC0uMDIzLS4yMzYtLjAyNC0uMjM0LS4wMjctLjIzMS0uMDI4LS4yMjgtLjAzMS0uMjI2LS4wMzItLjIyMy0uMDM0LS4yMi0uMDM2LS4yMTctLjAzOC0uMjE0LS4wNC0uMjExLS4wNDEtLjIwOC0uMDQzLS4yMDQtLjA0NS0uMjAxLS4wNDYtLjE5OC0uMDQ4LS4xOTUtLjA1LS4xOS0uMDUxLS4xODctLjA1My0uMTg0LS4wNTQtLjE3OS0uMDU2LS4xNzYtLjA1Ny0uMTcyLS4wNTktLjE2Ny0uMDYtLjE2NC0uMDYxLS4xNTktLjA2My0uMTU1LS4wNjQtLjE1MS0uMDY2LS4wNzQtLjAzMy0uMDcyLS4wMzMtLjA3Mi0uMDM0LS4wNy0uMDM0LS4wNjktLjAzNS0uMDY4LS4wMzUtLjA2Ny0uMDM1LS4wNjYtLjAzNS0uMDY0LS4wMzYtLjA2My0uMDM2LS4wNjItLjAzNi0uMDYxLS4wMzYtLjA2LS4wMzctLjA1OC0uMDM3LS4wNTctLjAzNy0uMDU2LS4wMzgtLjA1NS0uMDM4LS4wNTMtLjAzOC0uMDUyLS4wMzgtLjA1MS0uMDM5LS4wNDktLjAzOS0uMDQ5LS4wMzktLjA0Ni0uMDM5LS4wNDYtLjA0LS4wNDQtLjA0LS4wNDMtLjA0LS4wNDEtLjA0LS4wNC0uMDQxLS4wMzktLjA0MS0uMDM3LS4wNDEtLjAzNi0uMDQxLS4wMzQtLjA0MS0uMDMzLS4wNDItLjAzMi0uMDQyLS4wMy0uMDQyLS4wMjktLjA0Mi0uMDI3LS4wNDItLjAyNi0uMDQzLS4wMjQtLjA0My0uMDIzLS4wNDMtLjAyMS0uMDQzLS4wMi0uMDQzLS4wMTgtLjA0NC0uMDE3LS4wNDMtLjAxNS0uMDQ0LS4wMTMtLjA0NC0uMDEyLS4wNDQtLjAxMS0uMDQ1LS4wMDktLjA0NC0uMDA3LS4wNDUtLjAwNi0uMDQ1LS4wMDQtLjA0NS0uMDAyLS4wNDUtLjAwMS0uMDQ1di0xN2wuMDAxLS4wNDUuMDAyLS4wNDUuMDA0LS4wNDUuMDA2LS4wNDUuMDA3LS4wNDUuMDA5LS4wNDQuMDExLS4wNDUuMDEyLS4wNDQuMDEzLS4wNDQuMDE1LS4wNDQuMDE3LS4wNDMuMDE4LS4wNDQuMDItLjA0My4wMjEtLjA0My4wMjMtLjA0My4wMjQtLjA0My4wMjYtLjA0My4wMjctLjA0Mi4wMjktLjA0Mi4wMy0uMDQyLjAzMi0uMDQyLjAzMy0uMDQyLjAzNC0uMDQxLjAzNi0uMDQxLjAzNy0uMDQxLjAzOS0uMDQxLjA0LS4wNDEuMDQxLS4wNC4wNDMtLjA0LjA0NC0uMDQuMDQ2LS4wNC4wNDYtLjAzOS4wNDktLjAzOS4wNDktLjAzOS4wNTEtLjAzOS4wNTItLjAzOC4wNTMtLjAzOC4wNTUtLjAzOC4wNTYtLjAzOC4wNTctLjAzNy4wNTgtLjAzNy4wNi0uMDM3LjA2MS0uMDM2LjA2Mi0uMDM2LjA2My0uMDM2LjA2NC0uMDM2LjA2Ni0uMDM1LjA2Ny0uMDM1LjA2OC0uMDM1LjA2OS0uMDM1LjA3LS4wMzQuMDcyLS4wMzQuMDcyLS4wMzMuMDc0LS4wMzMuMTUxLS4wNjYuMTU1LS4wNjQuMTU5LS4wNjMuMTY0LS4wNjEuMTY3LS4wNi4xNzItLjA1OS4xNzYtLjA1Ny4xNzktLjA1Ni4xODQtLjA1NC4xODctLjA1My4xOS0uMDUxLjE5NS0uMDUuMTk4LS4wNDguMjAxLS4wNDYuMjA0LS4wNDUuMjA4LS4wNDMuMjExLS4wNDEuMjE0LS4wNC4yMTctLjAzOC4yMi0uMDM2LjIyMy0uMDM0LjIyNi0uMDMyLjIyOC0uMDMxLjIzMS0uMDI4LjIzNC0uMDI3LjIzNi0uMDI0LjIzOC0uMDIzLjI0MS0uMDIuMjQzLS4wMTkuMjQ1LS4wMTYuMjQ3LS4wMTUuMjQ5LS4wMTIuMjUxLS4wMS4yNTMtLjAwOC4yNTUtLjAwNS4yNTYtLjAwNC4yNTgtLjAwMS4yNTguMDAxem0tOS4yNTggMjAuNDk5di4wMWwuMDAxLjAyMS4wMDMuMDIxLjAwNC4wMjIuMDA1LjAyMS4wMDYuMDIyLjAwNy4wMjIuMDA5LjAyMy4wMS4wMjIuMDExLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE1LjAyMy4wMTYuMDI0LjAxNy4wMjMuMDE4LjAyNC4wMTkuMDI0LjAyMS4wMjQuMDIyLjAyNS4wMjMuMDI0LjAyNC4wMjUuMDUyLjA0OS4wNTYuMDUuMDYxLjA1MS4wNjYuMDUxLjA3LjA1MS4wNzUuMDUxLjA3OS4wNTIuMDg0LjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk3LjA1Mi4xMDIuMDUxLjEwNS4wNTIuMTEuMDUyLjExNC4wNTEuMTE5LjA1MS4xMjMuMDUxLjEyNy4wNS4xMzEuMDUuMTM1LjA1LjEzOS4wNDguMTQ0LjA0OS4xNDcuMDQ3LjE1Mi4wNDcuMTU1LjA0Ny4xNi4wNDUuMTYzLjA0NS4xNjcuMDQzLjE3MS4wNDMuMTc2LjA0MS4xNzguMDQxLjE4My4wMzkuMTg3LjAzOS4xOS4wMzcuMTk0LjAzNS4xOTcuMDM1LjIwMi4wMzMuMjA0LjAzMS4yMDkuMDMuMjEyLjAyOS4yMTYuMDI3LjIxOS4wMjUuMjIyLjAyNC4yMjYuMDIxLjIzLjAyLjIzMy4wMTguMjM2LjAxNi4yNC4wMTUuMjQzLjAxMi4yNDYuMDEuMjQ5LjAwOC4yNTMuMDA1LjI1Ni4wMDQuMjU5LjAwMS4yNi0uMDAxLjI1Ny0uMDA0LjI1NC0uMDA1LjI1LS4wMDguMjQ3LS4wMTEuMjQ0LS4wMTIuMjQxLS4wMTQuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMjEuMjI2LS4wMjEuMjI0LS4wMjQuMjItLjAyNi4yMTYtLjAyNy4yMTItLjAyOC4yMS0uMDMxLjIwNS0uMDMxLjIwMi0uMDM0LjE5OC0uMDM0LjE5NC0uMDM2LjE5MS0uMDM3LjE4Ny0uMDM5LjE4My0uMDQuMTc5LS4wNC4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0NC4xNjMtLjA0NS4xNi0uMDQ2LjE1NS0uMDQ2LjE1Mi0uMDQ3LjE0OC0uMDQ4LjE0My0uMDQ5LjEzOS0uMDQ5LjEzNi0uMDUuMTMxLS4wNS4xMjYtLjA1LjEyMy0uMDUxLjExOC0uMDUyLjExNC0uMDUxLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTMuMDgzLS4wNTEuMDc5LS4wNTIuMDc0LS4wNTIuMDctLjA1MS4wNjUtLjA1MS4wNi0uMDUxLjA1Ni0uMDUuMDUxLS4wNS4wMjMtLjAyNC4wMjMtLjAyNS4wMjEtLjAyNC4wMi0uMDI0LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDI0LjAxNS0uMDIzLjAxNC0uMDI0LjAxMy0uMDIzLjAxMi0uMDIzLjAxLS4wMjMuMDEtLjAyMi4wMDgtLjAyMi4wMDYtLjAyMi4wMDYtLjAyMi4wMDQtLjAyMi4wMDQtLjAyMS4wMDEtLjAyMS4wMDEtLjAyMXYtNC4xMjdsLS4wNzcuMDU1LS4wOC4wNTMtLjA4My4wNTQtLjA4NS4wNTMtLjA4Ny4wNTItLjA5LjA1Mi0uMDkzLjA1MS0uMDk1LjA1LS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ5LS4xMDUuMDQ4LS4xMDYuMDQ3LS4xMDkuMDQ3LS4xMTEuMDQ2LS4xMTQuMDQ1LS4xMTUuMDQ1LS4xMTguMDQ0LS4xMi4wNDMtLjEyMi4wNDItLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDQtLjEzMi4wMzgtLjEzNC4wMzgtLjEzNS4wMzctLjEzOC4wMzctLjEzOS4wMzUtLjE0Mi4wMzUtLjE0My4wMzQtLjE0NC4wMzMtLjE0Ny4wMzItLjE0OC4wMzEtLjE1LjAzLS4xNTEuMDMtLjE1My4wMjktLjE1NC4wMjctLjE1Ni4wMjctLjE1OC4wMjYtLjE1OS4wMjUtLjE2MS4wMjQtLjE2Mi4wMjMtLjE2My4wMjItLjE2NS4wMjEtLjE2Ni4wMi0uMTY3LjAxOS0uMTY5LjAxOC0uMTY5LjAxNy0uMTcxLjAxNi0uMTczLjAxNS0uMTczLjAxNC0uMTc1LjAxMy0uMTc1LjAxMi0uMTc3LjAxMS0uMTc4LjAxLS4xNzkuMDA4LS4xNzkuMDA4LS4xODEuMDA2LS4xODIuMDA1LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAyaC0uMzdsLS4xODQtLjAwMi0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNS0uMTgxLS4wMDYtLjE3OS0uMDA4LS4xNzktLjAwOC0uMTc4LS4wMS0uMTc2LS4wMTEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjItLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjUtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjctLjE1My0uMDI5LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMxLS4xNDYtLjAzMi0uMTQ1LS4wMzMtLjE0My0uMDM0LS4xNDEtLjAzNS0uMTQtLjAzNS0uMTM3LS4wMzctLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzgtLjEzLS4wNC0uMTI4LS4wNC0uMTI2LS4wNDEtLjEyNC0uMDQyLS4xMjItLjA0Mi0uMTItLjA0NC0uMTE3LS4wNDMtLjExNi0uMDQ1LS4xMTMtLjA0NS0uMTEyLS4wNDYtLjEwOS0uMDQ3LS4xMDYtLjA0Ny0uMTA1LS4wNDgtLjEwMi0uMDQ5LS4xLS4wNDktLjA5Ny0uMDUtLjA5NS0uMDUtLjA5My0uMDUyLS4wOS0uMDUxLS4wODctLjA1Mi0uMDg1LS4wNTMtLjA4My0uMDU0LS4wOC0uMDU0LS4wNzctLjA1NHY0LjEyN3ptMC01LjY1NHYuMDExbC4wMDEuMDIxLjAwMy4wMjEuMDA0LjAyMS4wMDUuMDIyLjAwNi4wMjIuMDA3LjAyMi4wMDkuMDIyLjAxLjAyMi4wMTEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTUuMDI0LjAxNi4wMjMuMDE3LjAyNC4wMTguMDI0LjAxOS4wMjQuMDIxLjAyNC4wMjIuMDI0LjAyMy4wMjUuMDI0LjAyNC4wNTIuMDUuMDU2LjA1LjA2MS4wNS4wNjYuMDUxLjA3LjA1MS4wNzUuMDUyLjA3OS4wNTEuMDg0LjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk3LjA1Mi4xMDIuMDUyLjEwNS4wNTIuMTEuMDUxLjExNC4wNTEuMTE5LjA1Mi4xMjMuMDUuMTI3LjA1MS4xMzEuMDUuMTM1LjA0OS4xMzkuMDQ5LjE0NC4wNDguMTQ3LjA0OC4xNTIuMDQ3LjE1NS4wNDYuMTYuMDQ1LjE2My4wNDUuMTY3LjA0NC4xNzEuMDQyLjE3Ni4wNDIuMTc4LjA0LjE4My4wNC4xODcuMDM4LjE5LjAzNy4xOTQuMDM2LjE5Ny4wMzQuMjAyLjAzMy4yMDQuMDMyLjIwOS4wMy4yMTIuMDI4LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjIuMjMuMDIuMjMzLjAxOC4yMzYuMDE2LjI0LjAxNC4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDYuMjU2LjAwMy4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDMuMjU0LS4wMDYuMjUtLjAwOC4yNDctLjAxLjI0NC0uMDEyLjI0MS0uMDE1LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIuMjI2LS4wMjIuMjI0LS4wMjQuMjItLjAyNS4yMTYtLjAyNy4yMTItLjAyOS4yMS0uMDMuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzUuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wMzkuMTc5LS4wNDEuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDQuMTYzLS4wNDUuMTYtLjA0NS4xNTUtLjA0Ny4xNTItLjA0Ny4xNDgtLjA0OC4xNDMtLjA0OC4xMzktLjA1LjEzNi0uMDQ5LjEzMS0uMDUuMTI2LS4wNTEuMTIzLS4wNTEuMTE4LS4wNTEuMTE0LS4wNTIuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1Mi4wODMtLjA1Mi4wNzktLjA1Mi4wNzQtLjA1MS4wNy0uMDUyLjA2NS0uMDUxLjA2LS4wNS4wNTYtLjA1MS4wNTEtLjA0OS4wMjMtLjAyNS4wMjMtLjAyNC4wMjEtLjAyNS4wMi0uMDI0LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDI0LjAxNS0uMDIzLjAxNC0uMDIzLjAxMy0uMDI0LjAxMi0uMDIyLjAxLS4wMjMuMDEtLjAyMy4wMDgtLjAyMi4wMDYtLjAyMi4wMDYtLjAyMi4wMDQtLjAyMS4wMDQtLjAyMi4wMDEtLjAyMS4wMDEtLjAyMXYtNC4xMzlsLS4wNzcuMDU0LS4wOC4wNTQtLjA4My4wNTQtLjA4NS4wNTItLjA4Ny4wNTMtLjA5LjA1MS0uMDkzLjA1MS0uMDk1LjA1MS0uMDk3LjA1LS4xLjA0OS0uMTAyLjA0OS0uMTA1LjA0OC0uMTA2LjA0Ny0uMTA5LjA0Ny0uMTExLjA0Ni0uMTE0LjA0NS0uMTE1LjA0NC0uMTE4LjA0NC0uMTIuMDQ0LS4xMjIuMDQyLS4xMjQuMDQyLS4xMjYuMDQxLS4xMjguMDQtLjEzLjAzOS0uMTMyLjAzOS0uMTM0LjAzOC0uMTM1LjAzNy0uMTM4LjAzNi0uMTM5LjAzNi0uMTQyLjAzNS0uMTQzLjAzMy0uMTQ0LjAzMy0uMTQ3LjAzMy0uMTQ4LjAzMS0uMTUuMDMtLjE1MS4wMy0uMTUzLjAyOC0uMTU0LjAyOC0uMTU2LjAyNy0uMTU4LjAyNi0uMTU5LjAyNS0uMTYxLjAyNC0uMTYyLjAyMy0uMTYzLjAyMi0uMTY1LjAyMS0uMTY2LjAyLS4xNjcuMDE5LS4xNjkuMDE4LS4xNjkuMDE3LS4xNzEuMDE2LS4xNzMuMDE1LS4xNzMuMDE0LS4xNzUuMDEzLS4xNzUuMDEyLS4xNzcuMDExLS4xNzguMDA5LS4xNzkuMDA5LS4xNzkuMDA3LS4xODEuMDA3LS4xODIuMDA1LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAyaC0uMzdsLS4xODQtLjAwMi0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNS0uMTgxLS4wMDctLjE3OS0uMDA3LS4xNzktLjAwOS0uMTc4LS4wMDktLjE3Ni0uMDExLS4xNzYtLjAxMi0uMTc1LS4wMTMtLjE3My0uMDE0LS4xNzItLjAxNS0uMTcxLS4wMTYtLjE3LS4wMTctLjE2OS0uMDE4LS4xNjctLjAxOS0uMTY2LS4wMi0uMTY1LS4wMjEtLjE2My0uMDIyLS4xNjItLjAyMy0uMTYxLS4wMjQtLjE1OS0uMDI1LS4xNTctLjAyNi0uMTU2LS4wMjctLjE1NS0uMDI4LS4xNTMtLjAyOC0uMTUxLS4wMy0uMTUtLjAzLS4xNDgtLjAzMS0uMTQ2LS4wMzMtLjE0NS0uMDMzLS4xNDMtLjAzMy0uMTQxLS4wMzUtLjE0LS4wMzYtLjEzNy0uMDM2LS4xMzYtLjAzNy0uMTM0LS4wMzgtLjEzMi0uMDM5LS4xMy0uMDM5LS4xMjgtLjA0LS4xMjYtLjA0MS0uMTI0LS4wNDItLjEyMi0uMDQzLS4xMi0uMDQzLS4xMTctLjA0NC0uMTE2LS4wNDQtLjExMy0uMDQ2LS4xMTItLjA0Ni0uMTA5LS4wNDYtLjEwNi0uMDQ3LS4xMDUtLjA0OC0uMTAyLS4wNDktLjEtLjA0OS0uMDk3LS4wNS0uMDk1LS4wNTEtLjA5My0uMDUxLS4wOS0uMDUxLS4wODctLjA1My0uMDg1LS4wNTItLjA4My0uMDU0LS4wOC0uMDU0LS4wNzctLjA1NHY0LjEzOXptMC01LjY2NnYuMDExbC4wMDEuMDIuMDAzLjAyMi4wMDQuMDIxLjAwNS4wMjIuMDA2LjAyMS4wMDcuMDIyLjAwOS4wMjMuMDEuMDIyLjAxMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNS4wMjMuMDE2LjAyNC4wMTcuMDI0LjAxOC4wMjMuMDE5LjAyNC4wMjEuMDI1LjAyMi4wMjQuMDIzLjAyNC4wMjQuMDI1LjA1Mi4wNS4wNTYuMDUuMDYxLjA1LjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTIuMDc5LjA1MS4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTIuMTA1LjA1MS4xMS4wNTIuMTE0LjA1MS4xMTkuMDUxLjEyMy4wNTEuMTI3LjA1LjEzMS4wNS4xMzUuMDUuMTM5LjA0OS4xNDQuMDQ4LjE0Ny4wNDguMTUyLjA0Ny4xNTUuMDQ2LjE2LjA0NS4xNjMuMDQ1LjE2Ny4wNDMuMTcxLjA0My4xNzYuMDQyLjE3OC4wNC4xODMuMDQuMTg3LjAzOC4xOS4wMzcuMTk0LjAzNi4xOTcuMDM0LjIwMi4wMzMuMjA0LjAzMi4yMDkuMDMuMjEyLjAyOC4yMTYuMDI3LjIxOS4wMjUuMjIyLjAyNC4yMjYuMDIxLjIzLjAyLjIzMy4wMTguMjM2LjAxNy4yNC4wMTQuMjQzLjAxMi4yNDYuMDEuMjQ5LjAwOC4yNTMuMDA2LjI1Ni4wMDMuMjU5LjAwMS4yNi0uMDAxLjI1Ny0uMDAzLjI1NC0uMDA2LjI1LS4wMDguMjQ3LS4wMS4yNDQtLjAxMy4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyLjIyNi0uMDIyLjIyNC0uMDI0LjIyLS4wMjUuMjE2LS4wMjcuMjEyLS4wMjkuMjEtLjAzLjIwNS0uMDMyLjIwMi0uMDMzLjE5OC0uMDM1LjE5NC0uMDM2LjE5MS0uMDM3LjE4Ny0uMDM5LjE4My0uMDM5LjE3OS0uMDQxLjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQ0LjE2My0uMDQ1LjE2LS4wNDUuMTU1LS4wNDcuMTUyLS4wNDcuMTQ4LS4wNDguMTQzLS4wNDkuMTM5LS4wNDkuMTM2LS4wNDkuMTMxLS4wNTEuMTI2LS4wNS4xMjMtLjA1MS4xMTgtLjA1Mi4xMTQtLjA1MS4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUyLjA3LS4wNTEuMDY1LS4wNTEuMDYtLjA1MS4wNTYtLjA1LjA1MS0uMDQ5LjAyMy0uMDI1LjAyMy0uMDI1LjAyMS0uMDI0LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjQuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMi4wMS0uMDIzLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxdi00LjE1M2wtLjA3Ny4wNTQtLjA4LjA1NC0uMDgzLjA1My0uMDg1LjA1My0uMDg3LjA1My0uMDkuMDUxLS4wOTMuMDUxLS4wOTUuMDUxLS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ4LS4xMDUuMDQ4LS4xMDYuMDQ4LS4xMDkuMDQ2LS4xMTEuMDQ2LS4xMTQuMDQ2LS4xMTUuMDQ0LS4xMTguMDQ0LS4xMi4wNDMtLjEyMi4wNDMtLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDM5LS4xMzIuMDM5LS4xMzQuMDM4LS4xMzUuMDM3LS4xMzguMDM2LS4xMzkuMDM2LS4xNDIuMDM0LS4xNDMuMDM0LS4xNDQuMDMzLS4xNDcuMDMyLS4xNDguMDMyLS4xNS4wMy0uMTUxLjAzLS4xNTMuMDI4LS4xNTQuMDI4LS4xNTYuMDI3LS4xNTguMDI2LS4xNTkuMDI0LS4xNjEuMDI0LS4xNjIuMDIzLS4xNjMuMDIzLS4xNjUuMDIxLS4xNjYuMDItLjE2Ny4wMTktLjE2OS4wMTgtLjE2OS4wMTctLjE3MS4wMTYtLjE3My4wMTUtLjE3My4wMTQtLjE3NS4wMTMtLjE3NS4wMTItLjE3Ny4wMS0uMTc4LjAxLS4xNzkuMDA5LS4xNzkuMDA3LS4xODEuMDA2LS4xODIuMDA2LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAxLS4xODUuMDAxLS4xODUtLjAwMS0uMTg0LS4wMDEtLjE4NC0uMDAzLS4xODItLjAwNC0uMTgyLS4wMDYtLjE4MS0uMDA2LS4xNzktLjAwNy0uMTc5LS4wMDktLjE3OC0uMDEtLjE3Ni0uMDEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjMtLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjQtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjgtLjE1My0uMDI4LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMyLS4xNDYtLjAzMi0uMTQ1LS4wMzMtLjE0My0uMDM0LS4xNDEtLjAzNC0uMTQtLjAzNi0uMTM3LS4wMzYtLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzktLjEzLS4wMzktLjEyOC0uMDQxLS4xMjYtLjA0MS0uMTI0LS4wNDEtLjEyMi0uMDQzLS4xMi0uMDQzLS4xMTctLjA0NC0uMTE2LS4wNDQtLjExMy0uMDQ2LS4xMTItLjA0Ni0uMTA5LS4wNDYtLjEwNi0uMDQ4LS4xMDUtLjA0OC0uMTAyLS4wNDgtLjEtLjA1LS4wOTctLjA0OS0uMDk1LS4wNTEtLjA5My0uMDUxLS4wOS0uMDUyLS4wODctLjA1Mi0uMDg1LS4wNTMtLjA4My0uMDUzLS4wOC0uMDU0LS4wNzctLjA1NHY0LjE1M3ptOC43NC04LjE3OWwtLjI1Ny4wMDQtLjI1NC4wMDUtLjI1LjAwOC0uMjQ3LjAxMS0uMjQ0LjAxMi0uMjQxLjAxNC0uMjM3LjAxNi0uMjMzLjAxOC0uMjMxLjAyMS0uMjI2LjAyMi0uMjI0LjAyMy0uMjIuMDI2LS4yMTYuMDI3LS4yMTIuMDI4LS4yMS4wMzEtLjIwNS4wMzItLjIwMi4wMzMtLjE5OC4wMzQtLjE5NC4wMzYtLjE5MS4wMzgtLjE4Ny4wMzgtLjE4My4wNC0uMTc5LjA0MS0uMTc1LjA0Mi0uMTcyLjA0My0uMTY4LjA0My0uMTYzLjA0NS0uMTYuMDQ2LS4xNTUuMDQ2LS4xNTIuMDQ4LS4xNDguMDQ4LS4xNDMuMDQ4LS4xMzkuMDQ5LS4xMzYuMDUtLjEzMS4wNS0uMTI2LjA1MS0uMTIzLjA1MS0uMTE4LjA1MS0uMTE0LjA1Mi0uMTEuMDUyLS4xMDYuMDUyLS4xMDEuMDUyLS4wOTYuMDUyLS4wOTIuMDUyLS4wODguMDUyLS4wODMuMDUyLS4wNzkuMDUyLS4wNzQuMDUxLS4wNy4wNTItLjA2NS4wNTEtLjA2LjA1LS4wNTYuMDUtLjA1MS4wNS0uMDIzLjAyNS0uMDIzLjAyNC0uMDIxLjAyNC0uMDIuMDI1LS4wMTkuMDI0LS4wMTguMDI0LS4wMTcuMDIzLS4wMTUuMDI0LS4wMTQuMDIzLS4wMTMuMDIzLS4wMTIuMDIzLS4wMS4wMjMtLjAxLjAyMi0uMDA4LjAyMi0uMDA2LjAyMy0uMDA2LjAyMS0uMDA0LjAyMi0uMDA0LjAyMS0uMDAxLjAyMS0uMDAxLjAyMS4wMDEuMDIxLjAwMS4wMjEuMDA0LjAyMS4wMDQuMDIyLjAwNi4wMjEuMDA2LjAyMy4wMDguMDIyLjAxLjAyMi4wMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNC4wMjMuMDE1LjAyNC4wMTcuMDIzLjAxOC4wMjQuMDE5LjAyNC4wMi4wMjUuMDIxLjAyNC4wMjMuMDI0LjAyMy4wMjUuMDUxLjA1LjA1Ni4wNS4wNi4wNS4wNjUuMDUxLjA3LjA1Mi4wNzQuMDUxLjA3OS4wNTIuMDgzLjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk2LjA1Mi4xMDEuMDUyLjEwNi4wNTIuMTEuMDUyLjExNC4wNTIuMTE4LjA1MS4xMjMuMDUxLjEyNi4wNTEuMTMxLjA1LjEzNi4wNS4xMzkuMDQ5LjE0My4wNDguMTQ4LjA0OC4xNTIuMDQ4LjE1NS4wNDYuMTYuMDQ2LjE2My4wNDUuMTY4LjA0My4xNzIuMDQzLjE3NS4wNDIuMTc5LjA0MS4xODMuMDQuMTg3LjAzOC4xOTEuMDM4LjE5NC4wMzYuMTk4LjAzNC4yMDIuMDMzLjIwNS4wMzIuMjEuMDMxLjIxMi4wMjguMjE2LjAyNy4yMi4wMjYuMjI0LjAyMy4yMjYuMDIyLjIzMS4wMjEuMjMzLjAxOC4yMzcuMDE2LjI0MS4wMTQuMjQ0LjAxMi4yNDcuMDExLjI1LjAwOC4yNTQuMDA1LjI1Ny4wMDQuMjYuMDAxLjI2LS4wMDEuMjU3LS4wMDQuMjU0LS4wMDUuMjUtLjAwOC4yNDctLjAxMS4yNDQtLjAxMi4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyMS4yMjYtLjAyMi4yMjQtLjAyMy4yMi0uMDI2LjIxNi0uMDI3LjIxMi0uMDI4LjIxLS4wMzEuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzQuMTk0LS4wMzYuMTkxLS4wMzguMTg3LS4wMzguMTgzLS4wNC4xNzktLjA0MS4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0My4xNjMtLjA0NS4xNi0uMDQ2LjE1NS0uMDQ2LjE1Mi0uMDQ4LjE0OC0uMDQ4LjE0My0uMDQ4LjEzOS0uMDQ5LjEzNi0uMDUuMTMxLS4wNS4xMjYtLjA1MS4xMjMtLjA1MS4xMTgtLjA1MS4xMTQtLjA1Mi4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUxLjA3LS4wNTIuMDY1LS4wNTEuMDYtLjA1LjA1Ni0uMDUuMDUxLS4wNS4wMjMtLjAyNS4wMjMtLjAyNC4wMjEtLjAyNC4wMi0uMDI1LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDIzLjAxNS0uMDI0LjAxNC0uMDIzLjAxMy0uMDIzLjAxMi0uMDIzLjAxLS4wMjMuMDEtLjAyMi4wMDgtLjAyMi4wMDYtLjAyMy4wMDYtLjAyMS4wMDQtLjAyMi4wMDQtLjAyMS4wMDEtLjAyMS4wMDEtLjAyMS0uMDAxLS4wMjEtLjAwMS0uMDIxLS4wMDQtLjAyMS0uMDA0LS4wMjItLjAwNi0uMDIxLS4wMDYtLjAyMy0uMDA4LS4wMjItLjAxLS4wMjItLjAxLS4wMjMtLjAxMi0uMDIzLS4wMTMtLjAyMy0uMDE0LS4wMjMtLjAxNS0uMDI0LS4wMTctLjAyMy0uMDE4LS4wMjQtLjAxOS0uMDI0LS4wMi0uMDI1LS4wMjEtLjAyNC0uMDIzLS4wMjQtLjAyMy0uMDI1LS4wNTEtLjA1LS4wNTYtLjA1LS4wNi0uMDUtLjA2NS0uMDUxLS4wNy0uMDUyLS4wNzQtLjA1MS0uMDc5LS4wNTItLjA4My0uMDUyLS4wODgtLjA1Mi0uMDkyLS4wNTItLjA5Ni0uMDUyLS4xMDEtLjA1Mi0uMTA2LS4wNTItLjExLS4wNTItLjExNC0uMDUyLS4xMTgtLjA1MS0uMTIzLS4wNTEtLjEyNi0uMDUxLS4xMzEtLjA1LS4xMzYtLjA1LS4xMzktLjA0OS0uMTQzLS4wNDgtLjE0OC0uMDQ4LS4xNTItLjA0OC0uMTU1LS4wNDYtLjE2LS4wNDYtLjE2My0uMDQ1LS4xNjgtLjA0My0uMTcyLS4wNDMtLjE3NS0uMDQyLS4xNzktLjA0MS0uMTgzLS4wNC0uMTg3LS4wMzgtLjE5MS0uMDM4LS4xOTQtLjAzNi0uMTk4LS4wMzQtLjIwMi0uMDMzLS4yMDUtLjAzMi0uMjEtLjAzMS0uMjEyLS4wMjgtLjIxNi0uMDI3LS4yMi0uMDI2LS4yMjQtLjAyMy0uMjI2LS4wMjItLjIzMS0uMDIxLS4yMzMtLjAxOC0uMjM3LS4wMTYtLjI0MS0uMDE0LS4yNDQtLjAxMi0uMjQ3LS4wMTEtLjI1LS4wMDgtLjI1NC0uMDA1LS4yNTctLjAwNC0uMjYtLjAwMS0uMjYuMDAxeiIpfSxqSGU9ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoInN5bWJvbCIpLmF0dHIoImlkIiwiY29tcHV0ZXIiKS5hdHRyKCJ3aWR0aCIsIjI0IikuYXR0cigiaGVpZ2h0IiwiMjQiKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSguNSkiKS5hdHRyKCJkIiwiTTIgMnYxM2gyMHYtMTNoLTIwem0xOCAxMWgtMTZ2LTloMTZ2OXptLTEwLjIyOCA2bC40NjYtMWgzLjUyNGwuNDY3IDFoLTQuNDU3em0xNC4yMjggM2gtMjRsMi02aDIuMTA0bC0xLjMzIDRoMTguNDVsLTEuMjk3LTRoMi4wNzNsMiA2em0tNS0xMGgtMTR2LTdoMTR2N3oiKX0sJEhlPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJzeW1ib2wiKS5hdHRyKCJpZCIsImNsb2NrIikuYXR0cigid2lkdGgiLCIyNCIpLmF0dHIoImhlaWdodCIsIjI0IikuYXBwZW5kKCJwYXRoIikuYXR0cigidHJhbnNmb3JtIiwic2NhbGUoLjUpIikuYXR0cigiZCIsIk0xMiAyYzUuNTE0IDAgMTAgNC40ODYgMTAgMTBzLTQuNDg2IDEwLTEwIDEwLTEwLTQuNDg2LTEwLTEwIDQuNDg2LTEwIDEwLTEwem0wLTJjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJzNS4zNzMgMTIgMTIgMTIgMTItNS4zNzMgMTItMTItNS4zNzMtMTItMTItMTJ6bTUuODQ4IDEyLjQ1OWMuMjAyLjAzOC4yMDIuMzMzLjAwMS4zNzItMS45MDcuMzYxLTYuMDQ1IDEuMTExLTYuNTQ3IDEuMTExLS43MTkgMC0xLjMwMS0uNTgyLTEuMzAxLTEuMzAxIDAtLjUxMi43Ny01LjQ0NyAxLjEyNS03LjQ0NS4wMzQtLjE5Mi4zMTItLjE4MS4zNDMuMDE0bC45ODUgNi4yMzggNS4zOTQgMS4wMTF6Iil9LHpIZT1mdW5jdGlvbihpKXtpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhcnJvd2hlYWQiKS5hdHRyKCJyZWZYIiw5KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDEyKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDEyKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMTAgNSBMIDAgMTAgeiIpfSxxSGU9ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZmlsbGVkLWhlYWQiKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMTQsNyBMOSwxIFoiKX0sSEhlPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsInNlcXVlbmNlbnVtYmVyIikuYXR0cigicmVmWCIsMTUpLmF0dHIoInJlZlkiLDE1KS5hdHRyKCJtYXJrZXJXaWR0aCIsNjApLmF0dHIoIm1hcmtlckhlaWdodCIsNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwxNSkuYXR0cigiY3kiLDE1KS5hdHRyKCJyIiw2KX0sVkhlPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImNyb3NzaGVhZCIpLmF0dHIoIm1hcmtlcldpZHRoIiwxNSkuYXR0cigibWFya2VySGVpZ2h0Iiw4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXR0cigicmVmWCIsNCkuYXR0cigicmVmWSIsNSkuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2UiLCIjMDAwMDAwIikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIwLCAwIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB0IikuYXR0cigiZCIsIk0gMSwyIEwgNiw3IE0gNiwyIEwgMSw3Iil9LFRSdD1mdW5jdGlvbigpe3JldHVybnt4OjAseTowLGZpbGw6dm9pZCAwLGFuY2hvcjp2b2lkIDAsc3R5bGU6IiM2NjYiLHdpZHRoOnZvaWQgMCxoZWlnaHQ6dm9pZCAwLHRleHRNYXJnaW46MCxyeDowLHJ5OjAsdHNwYW46ITAsdmFsaWduOnZvaWQgMH19LEdIZT1mdW5jdGlvbigpe3JldHVybnt4OjAseTowLGZpbGw6IiNFREYyQUUiLHN0cm9rZToiIzY2NiIsd2lkdGg6MTAwLGFuY2hvcjoic3RhcnQiLGhlaWdodDoxMDAscng6MCxyeTowfX0sdWd0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaSh2LG0sYixFLEMsQSxQKXtjb25zdCBGPW0uYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsYitDLzIpLmF0dHIoInkiLEUrQS8yKzUpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQodik7cChGLFApfWZ1bmN0aW9uIGEodixtLGIsRSxDLEEsUCxGKXtjb25zdHthY3RvckZvbnRTaXplOmosYWN0b3JGb250RmFtaWx5OlIsYWN0b3JGb250V2VpZ2h0Okh9PUYsW1kscnRdPXpBKGopLEo9di5zcGxpdCh1aS5saW5lQnJlYWtSZWdleCk7Zm9yKGxldCBpdD0wO2l0PEoubGVuZ3RoO2l0Kyspe2NvbnN0IGZ0PWl0KlktWSooSi5sZW5ndGgtMSkvMixUdD1tLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGIrQy8yKS5hdHRyKCJ5IixFKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5zdHlsZSgiZm9udC1zaXplIixydCkuc3R5bGUoImZvbnQtd2VpZ2h0IixIKS5zdHlsZSgiZm9udC1mYW1pbHkiLFIpO1R0LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixiK0MvMikuYXR0cigiZHkiLGZ0KS50ZXh0KEpbaXRdKSxUdC5hdHRyKCJ5IixFK0EvMikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLHAoVHQsUCl9fWZ1bmN0aW9uIGYodixtLGIsRSxDLEEsUCxGKXtjb25zdCBqPW0uYXBwZW5kKCJzd2l0Y2giKSxIPWouYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIsYikuYXR0cigieSIsRSkuYXR0cigid2lkdGgiLEMpLmF0dHIoImhlaWdodCIsQSkuYXBwZW5kKCJ4aHRtbDpkaXYiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlIikuc3R5bGUoImhlaWdodCIsIjEwMCUiKS5zdHlsZSgid2lkdGgiLCIxMDAlIik7SC5hcHBlbmQoImRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUtY2VsbCIpLnN0eWxlKCJ0ZXh0LWFsaWduIiwiY2VudGVyIikuc3R5bGUoInZlcnRpY2FsLWFsaWduIiwibWlkZGxlIikudGV4dCh2KSxhKHYsaixiLEUsQyxBLFAsRikscChILFApfWZ1bmN0aW9uIHAodixtKXtmb3IoY29uc3QgYiBpbiBtKW0uaGFzT3duUHJvcGVydHkoYikmJnYuYXR0cihiLG1bYl0pfXJldHVybiBmdW5jdGlvbih2KXtyZXR1cm4gdi50ZXh0UGxhY2VtZW50PT09ImZvIj9mOnYudGV4dFBsYWNlbWVudD09PSJvbGQiP2k6YX19KCksVUhlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaSh2LG0sYixFLEMsQSxQKXtjb25zdCBGPW0uYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsYikuYXR0cigieSIsRSkuc3R5bGUoInRleHQtYW5jaG9yIiwic3RhcnQiKS50ZXh0KHYpO3AoRixQKX1mdW5jdGlvbiBhKHYsbSxiLEUsQyxBLFAsRil7Y29uc3R7YWN0b3JGb250U2l6ZTpqLGFjdG9yRm9udEZhbWlseTpSLGFjdG9yRm9udFdlaWdodDpIfT1GLFk9di5zcGxpdCh1aS5saW5lQnJlYWtSZWdleCk7Zm9yKGxldCBydD0wO3J0PFkubGVuZ3RoO3J0Kyspe2NvbnN0IEo9cnQqai1qKihZLmxlbmd0aC0xKS8yLGl0PW0uYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsYikuYXR0cigieSIsRSkuc3R5bGUoInRleHQtYW5jaG9yIiwic3RhcnQiKS5zdHlsZSgiZm9udC1zaXplIixqKS5zdHlsZSgiZm9udC13ZWlnaHQiLEgpLnN0eWxlKCJmb250LWZhbWlseSIsUik7aXQuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLGIpLmF0dHIoImR5IixKKS50ZXh0KFlbcnRdKSxpdC5hdHRyKCJ5IixFK0EvMikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLHAoaXQsUCl9fWZ1bmN0aW9uIGYodixtLGIsRSxDLEEsUCxGKXtjb25zdCBqPW0uYXBwZW5kKCJzd2l0Y2giKSxIPWouYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIsYikuYXR0cigieSIsRSkuYXR0cigid2lkdGgiLEMpLmF0dHIoImhlaWdodCIsQSkuYXBwZW5kKCJ4aHRtbDpkaXYiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlIikuc3R5bGUoImhlaWdodCIsIjEwMCUiKS5zdHlsZSgid2lkdGgiLCIxMDAlIik7SC5hcHBlbmQoImRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUtY2VsbCIpLnN0eWxlKCJ0ZXh0LWFsaWduIiwiY2VudGVyIikuc3R5bGUoInZlcnRpY2FsLWFsaWduIiwibWlkZGxlIikudGV4dCh2KSxhKHYsaixiLEUsQyxBLFAsRikscChILFApfWZ1bmN0aW9uIHAodixtKXtmb3IoY29uc3QgYiBpbiBtKW0uaGFzT3duUHJvcGVydHkoYikmJnYuYXR0cihiLG1bYl0pfXJldHVybiBmdW5jdGlvbih2KXtyZXR1cm4gdi50ZXh0UGxhY2VtZW50PT09ImZvIj9mOnYudGV4dFBsYWNlbWVudD09PSJvbGQiP2k6YX19KCkscmY9e2RyYXdSZWN0OmNndCxkcmF3VGV4dDpoTCxkcmF3TGFiZWw6eFJ0LGRyYXdBY3RvcjpPSGUsZHJhd0JveDpOSGUsZHJhd1BvcHVwOkNIZSxhbmNob3JFbGVtZW50OlBIZSxkcmF3QWN0aXZhdGlvbjpGSGUsZHJhd0xvb3A6QkhlLGRyYXdCYWNrZ3JvdW5kUmVjdDpFUnQsaW5zZXJ0QXJyb3dIZWFkOnpIZSxpbnNlcnRBcnJvd0ZpbGxlZEhlYWQ6cUhlLGluc2VydFNlcXVlbmNlTnVtYmVyOkhIZSxpbnNlcnRBcnJvd0Nyb3NzSGVhZDpWSGUsaW5zZXJ0RGF0YWJhc2VJY29uOlJIZSxpbnNlcnRDb21wdXRlckljb246akhlLGluc2VydENsb2NrSWNvbjokSGUsZ2V0VGV4dE9iajpUUnQsZ2V0Tm90ZVJlY3Q6R0hlLHBvcHVwTWVudTpTSGUscG9wZG93bk1lbnU6QUhlLGZpeExpZmVMaW5lSGVpZ2h0czprUnQsc2FuaXRpemVVcmw6WHh9O2xldCBobj17fTtjb25zdCBCcj17ZGF0YTp7c3RhcnR4OnZvaWQgMCxzdG9weDp2b2lkIDAsc3RhcnR5OnZvaWQgMCxzdG9weTp2b2lkIDB9LHZlcnRpY2FsUG9zOjAsc2VxdWVuY2VJdGVtczpbXSxhY3RpdmF0aW9uczpbXSxtb2RlbHM6e2dldEhlaWdodDpmdW5jdGlvbigpe3JldHVybiBNYXRoLm1heC5hcHBseShudWxsLHRoaXMuYWN0b3JzLmxlbmd0aD09PTA/WzBdOnRoaXMuYWN0b3JzLm1hcChpPT5pLmhlaWdodHx8MCkpKyh0aGlzLmxvb3BzLmxlbmd0aD09PTA/MDp0aGlzLmxvb3BzLm1hcChpPT5pLmhlaWdodHx8MCkucmVkdWNlKChpLGEpPT5pK2EpKSsodGhpcy5tZXNzYWdlcy5sZW5ndGg9PT0wPzA6dGhpcy5tZXNzYWdlcy5tYXAoaT0+aS5oZWlnaHR8fDApLnJlZHVjZSgoaSxhKT0+aSthKSkrKHRoaXMubm90ZXMubGVuZ3RoPT09MD8wOnRoaXMubm90ZXMubWFwKGk9PmkuaGVpZ2h0fHwwKS5yZWR1Y2UoKGksYSk9PmkrYSkpfSxjbGVhcjpmdW5jdGlvbigpe3RoaXMuYWN0b3JzPVtdLHRoaXMuYm94ZXM9W10sdGhpcy5sb29wcz1bXSx0aGlzLm1lc3NhZ2VzPVtdLHRoaXMubm90ZXM9W119LGFkZEJveDpmdW5jdGlvbihpKXt0aGlzLmJveGVzLnB1c2goaSl9LGFkZEFjdG9yOmZ1bmN0aW9uKGkpe3RoaXMuYWN0b3JzLnB1c2goaSl9LGFkZExvb3A6ZnVuY3Rpb24oaSl7dGhpcy5sb29wcy5wdXNoKGkpfSxhZGRNZXNzYWdlOmZ1bmN0aW9uKGkpe3RoaXMubWVzc2FnZXMucHVzaChpKX0sYWRkTm90ZTpmdW5jdGlvbihpKXt0aGlzLm5vdGVzLnB1c2goaSl9LGxhc3RBY3RvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFjdG9yc1t0aGlzLmFjdG9ycy5sZW5ndGgtMV19LGxhc3RMb29wOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9vcHNbdGhpcy5sb29wcy5sZW5ndGgtMV19LGxhc3RNZXNzYWdlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZXNbdGhpcy5tZXNzYWdlcy5sZW5ndGgtMV19LGxhc3ROb3RlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm90ZXNbdGhpcy5ub3Rlcy5sZW5ndGgtMV19LGFjdG9yczpbXSxib3hlczpbXSxsb29wczpbXSxtZXNzYWdlczpbXSxub3RlczpbXX0saW5pdDpmdW5jdGlvbigpe3RoaXMuc2VxdWVuY2VJdGVtcz1bXSx0aGlzLmFjdGl2YXRpb25zPVtdLHRoaXMubW9kZWxzLmNsZWFyKCksdGhpcy5kYXRhPXtzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdGhpcy52ZXJ0aWNhbFBvcz0wLENSdChEZSgpKX0sdXBkYXRlVmFsOmZ1bmN0aW9uKGksYSxmLHApe2lbYV09PT12b2lkIDA/aVthXT1mOmlbYV09cChmLGlbYV0pfSx1cGRhdGVCb3VuZHM6ZnVuY3Rpb24oaSxhLGYscCl7Y29uc3Qgdj10aGlzO2xldCBtPTA7ZnVuY3Rpb24gYihFKXtyZXR1cm4gZnVuY3Rpb24oQSl7bSsrO2NvbnN0IFA9di5zZXF1ZW5jZUl0ZW1zLmxlbmd0aC1tKzE7di51cGRhdGVWYWwoQSwic3RhcnR5IixhLVAqaG4uYm94TWFyZ2luLE1hdGgubWluKSx2LnVwZGF0ZVZhbChBLCJzdG9weSIscCtQKmhuLmJveE1hcmdpbixNYXRoLm1heCksdi51cGRhdGVWYWwoQnIuZGF0YSwic3RhcnR4IixpLVAqaG4uYm94TWFyZ2luLE1hdGgubWluKSx2LnVwZGF0ZVZhbChCci5kYXRhLCJzdG9weCIsZitQKmhuLmJveE1hcmdpbixNYXRoLm1heCksRSE9PSJhY3RpdmF0aW9uIiYmKHYudXBkYXRlVmFsKEEsInN0YXJ0eCIsaS1QKmhuLmJveE1hcmdpbixNYXRoLm1pbiksdi51cGRhdGVWYWwoQSwic3RvcHgiLGYrUCpobi5ib3hNYXJnaW4sTWF0aC5tYXgpLHYudXBkYXRlVmFsKEJyLmRhdGEsInN0YXJ0eSIsYS1QKmhuLmJveE1hcmdpbixNYXRoLm1pbiksdi51cGRhdGVWYWwoQnIuZGF0YSwic3RvcHkiLHArUCpobi5ib3hNYXJnaW4sTWF0aC5tYXgpKX19dGhpcy5zZXF1ZW5jZUl0ZW1zLmZvckVhY2goYigpKSx0aGlzLmFjdGl2YXRpb25zLmZvckVhY2goYigiYWN0aXZhdGlvbiIpKX0saW5zZXJ0OmZ1bmN0aW9uKGksYSxmLHApe2NvbnN0IHY9dWkuZ2V0TWluKGksZiksbT11aS5nZXRNYXgoaSxmKSxiPXVpLmdldE1pbihhLHApLEU9dWkuZ2V0TWF4KGEscCk7dGhpcy51cGRhdGVWYWwoQnIuZGF0YSwic3RhcnR4Iix2LE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbChCci5kYXRhLCJzdGFydHkiLGIsTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKEJyLmRhdGEsInN0b3B4IixtLE1hdGgubWF4KSx0aGlzLnVwZGF0ZVZhbChCci5kYXRhLCJzdG9weSIsRSxNYXRoLm1heCksdGhpcy51cGRhdGVCb3VuZHModixiLG0sRSl9LG5ld0FjdGl2YXRpb246ZnVuY3Rpb24oaSxhLGYpe2NvbnN0IHA9ZltpLmZyb20uYWN0b3JdLHY9REsoaS5mcm9tLmFjdG9yKS5sZW5ndGh8fDAsbT1wLngrcC53aWR0aC8yKyh2LTEpKmhuLmFjdGl2YXRpb25XaWR0aC8yO3RoaXMuYWN0aXZhdGlvbnMucHVzaCh7c3RhcnR4Om0sc3RhcnR5OnRoaXMudmVydGljYWxQb3MrMixzdG9weDptK2huLmFjdGl2YXRpb25XaWR0aCxzdG9weTp2b2lkIDAsYWN0b3I6aS5mcm9tLmFjdG9yLGFuY2hvcmVkOnJmLmFuY2hvckVsZW1lbnQoYSl9KX0sZW5kQWN0aXZhdGlvbjpmdW5jdGlvbihpKXtjb25zdCBhPXRoaXMuYWN0aXZhdGlvbnMubWFwKGZ1bmN0aW9uKGYpe3JldHVybiBmLmFjdG9yfSkubGFzdEluZGV4T2YoaS5mcm9tLmFjdG9yKTtyZXR1cm4gdGhpcy5hY3RpdmF0aW9ucy5zcGxpY2UoYSwxKVswXX0sY3JlYXRlTG9vcDpmdW5jdGlvbihpPXttZXNzYWdlOnZvaWQgMCx3cmFwOiExLHdpZHRoOnZvaWQgMH0sYSl7cmV0dXJue3N0YXJ0eDp2b2lkIDAsc3RhcnR5OnRoaXMudmVydGljYWxQb3Msc3RvcHg6dm9pZCAwLHN0b3B5OnZvaWQgMCx0aXRsZTppLm1lc3NhZ2Usd3JhcDppLndyYXAsd2lkdGg6aS53aWR0aCxoZWlnaHQ6MCxmaWxsOmF9fSxuZXdMb29wOmZ1bmN0aW9uKGk9e21lc3NhZ2U6dm9pZCAwLHdyYXA6ITEsd2lkdGg6dm9pZCAwfSxhKXt0aGlzLnNlcXVlbmNlSXRlbXMucHVzaCh0aGlzLmNyZWF0ZUxvb3AoaSxhKSl9LGVuZExvb3A6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXF1ZW5jZUl0ZW1zLnBvcCgpfSxpc0xvb3BPdmVybGFwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VxdWVuY2VJdGVtcy5sZW5ndGg/dGhpcy5zZXF1ZW5jZUl0ZW1zW3RoaXMuc2VxdWVuY2VJdGVtcy5sZW5ndGgtMV0ub3ZlcmxhcDohMX0sYWRkU2VjdGlvblRvTG9vcDpmdW5jdGlvbihpKXtjb25zdCBhPXRoaXMuc2VxdWVuY2VJdGVtcy5wb3AoKTthLnNlY3Rpb25zPWEuc2VjdGlvbnN8fFtdLGEuc2VjdGlvblRpdGxlcz1hLnNlY3Rpb25UaXRsZXN8fFtdLGEuc2VjdGlvbnMucHVzaCh7eTpCci5nZXRWZXJ0aWNhbFBvcygpLGhlaWdodDowfSksYS5zZWN0aW9uVGl0bGVzLnB1c2goaSksdGhpcy5zZXF1ZW5jZUl0ZW1zLnB1c2goYSl9LHNhdmVWZXJ0aWNhbFBvczpmdW5jdGlvbigpe3RoaXMuaXNMb29wT3ZlcmxhcCgpJiYodGhpcy5zYXZlZFZlcnRpY2FsUG9zPXRoaXMudmVydGljYWxQb3MpfSxyZXNldFZlcnRpY2FsUG9zOmZ1bmN0aW9uKCl7dGhpcy5pc0xvb3BPdmVybGFwKCkmJih0aGlzLnZlcnRpY2FsUG9zPXRoaXMuc2F2ZWRWZXJ0aWNhbFBvcyl9LGJ1bXBWZXJ0aWNhbFBvczpmdW5jdGlvbihpKXt0aGlzLnZlcnRpY2FsUG9zPXRoaXMudmVydGljYWxQb3MraSx0aGlzLmRhdGEuc3RvcHk9dWkuZ2V0TWF4KHRoaXMuZGF0YS5zdG9weSx0aGlzLnZlcnRpY2FsUG9zKX0sZ2V0VmVydGljYWxQb3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52ZXJ0aWNhbFBvc30sZ2V0Qm91bmRzOmZ1bmN0aW9uKCl7cmV0dXJue2JvdW5kczp0aGlzLmRhdGEsbW9kZWxzOnRoaXMubW9kZWxzfX19LFdIZT1mdW5jdGlvbihpLGEpe0JyLmJ1bXBWZXJ0aWNhbFBvcyhobi5ib3hNYXJnaW4pLGEuaGVpZ2h0PWhuLmJveE1hcmdpbixhLnN0YXJ0eT1Cci5nZXRWZXJ0aWNhbFBvcygpO2NvbnN0IGY9dTkoKTtmLng9YS5zdGFydHgsZi55PWEuc3RhcnR5LGYud2lkdGg9YS53aWR0aHx8aG4ud2lkdGgsZi5jbGFzcz0ibm90ZSI7Y29uc3QgcD1pLmFwcGVuZCgiZyIpLHY9cmYuZHJhd1JlY3QocCxmKSxtPURkdCgpO20ueD1hLnN0YXJ0eCxtLnk9YS5zdGFydHksbS53aWR0aD1mLndpZHRoLG0uZHk9IjFlbSIsbS50ZXh0PWEubWVzc2FnZSxtLmNsYXNzPSJub3RlVGV4dCIsbS5mb250RmFtaWx5PWhuLm5vdGVGb250RmFtaWx5LG0uZm9udFNpemU9aG4ubm90ZUZvbnRTaXplLG0uZm9udFdlaWdodD1obi5ub3RlRm9udFdlaWdodCxtLmFuY2hvcj1obi5ub3RlQWxpZ24sbS50ZXh0TWFyZ2luPWhuLm5vdGVNYXJnaW4sbS52YWxpZ249ImNlbnRlciI7Y29uc3QgYj1oTChwLG0pLEU9TWF0aC5yb3VuZChiLm1hcChDPT4oQy5fZ3JvdXBzfHxDKVswXVswXS5nZXRCQm94KCkuaGVpZ2h0KS5yZWR1Y2UoKEMsQSk9PkMrQSkpO3YuYXR0cigiaGVpZ2h0IixFKzIqaG4ubm90ZU1hcmdpbiksYS5oZWlnaHQrPUUrMipobi5ub3RlTWFyZ2luLEJyLmJ1bXBWZXJ0aWNhbFBvcyhFKzIqaG4ubm90ZU1hcmdpbiksYS5zdG9weT1hLnN0YXJ0eStFKzIqaG4ubm90ZU1hcmdpbixhLnN0b3B4PWEuc3RhcnR4K2Yud2lkdGgsQnIuaW5zZXJ0KGEuc3RhcnR4LGEuc3RhcnR5LGEuc3RvcHgsYS5zdG9weSksQnIubW9kZWxzLmFkZE5vdGUoYSl9LHg5PWk9Pih7Zm9udEZhbWlseTppLm1lc3NhZ2VGb250RmFtaWx5LGZvbnRTaXplOmkubWVzc2FnZUZvbnRTaXplLGZvbnRXZWlnaHQ6aS5tZXNzYWdlRm9udFdlaWdodH0pLGZMPWk9Pih7Zm9udEZhbWlseTppLm5vdGVGb250RmFtaWx5LGZvbnRTaXplOmkubm90ZUZvbnRTaXplLGZvbnRXZWlnaHQ6aS5ub3RlRm9udFdlaWdodH0pLGxndD1pPT4oe2ZvbnRGYW1pbHk6aS5hY3RvckZvbnRGYW1pbHksZm9udFNpemU6aS5hY3RvckZvbnRTaXplLGZvbnRXZWlnaHQ6aS5hY3RvckZvbnRXZWlnaHR9KTtmdW5jdGlvbiBLSGUoaSxhKXtCci5idW1wVmVydGljYWxQb3MoMTApO2NvbnN0e3N0YXJ0eDpmLHN0b3B4OnAsbWVzc2FnZTp2fT1hLG09dWkuc3BsaXRCcmVha3ModikubGVuZ3RoLGI9dG8uY2FsY3VsYXRlVGV4dERpbWVuc2lvbnModix4OShobikpLEU9Yi5oZWlnaHQvbTthLmhlaWdodCs9RSxCci5idW1wVmVydGljYWxQb3MoRSk7bGV0IEMsQT1iLmhlaWdodC0xMDtjb25zdCBQPWIud2lkdGg7aWYoZj09PXApe0M9QnIuZ2V0VmVydGljYWxQb3MoKStBLGhuLnJpZ2h0QW5nbGVzfHwoQSs9aG4uYm94TWFyZ2luLEM9QnIuZ2V0VmVydGljYWxQb3MoKStBKSxBKz0zMDtjb25zdCBGPXVpLmdldE1heChQLzIsaG4ud2lkdGgvMik7QnIuaW5zZXJ0KGYtRixCci5nZXRWZXJ0aWNhbFBvcygpLTEwK0EscCtGLEJyLmdldFZlcnRpY2FsUG9zKCkrMzArQSl9ZWxzZSBBKz1obi5ib3hNYXJnaW4sQz1Cci5nZXRWZXJ0aWNhbFBvcygpK0EsQnIuaW5zZXJ0KGYsQy0xMCxwLEMpO3JldHVybiBCci5idW1wVmVydGljYWxQb3MoQSksYS5oZWlnaHQrPUEsYS5zdG9weT1hLnN0YXJ0eSthLmhlaWdodCxCci5pbnNlcnQoYS5mcm9tQm91bmRzLGEuc3RhcnR5LGEudG9Cb3VuZHMsYS5zdG9weSksQ31jb25zdCBZSGU9ZnVuY3Rpb24oaSxhLGYscCl7Y29uc3R7c3RhcnR4OnYsc3RvcHg6bSxzdGFydHk6YixtZXNzYWdlOkUsdHlwZTpDLHNlcXVlbmNlSW5kZXg6QSxzZXF1ZW5jZVZpc2libGU6UH09YSxGPXRvLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKEUseDkoaG4pKSxqPURkdCgpO2oueD12LGoueT1iKzEwLGoud2lkdGg9bS12LGouY2xhc3M9Im1lc3NhZ2VUZXh0IixqLmR5PSIxZW0iLGoudGV4dD1FLGouZm9udEZhbWlseT1obi5tZXNzYWdlRm9udEZhbWlseSxqLmZvbnRTaXplPWhuLm1lc3NhZ2VGb250U2l6ZSxqLmZvbnRXZWlnaHQ9aG4ubWVzc2FnZUZvbnRXZWlnaHQsai5hbmNob3I9aG4ubWVzc2FnZUFsaWduLGoudmFsaWduPSJjZW50ZXIiLGoudGV4dE1hcmdpbj1obi53cmFwUGFkZGluZyxqLnRzcGFuPSExLGhMKGksaik7Y29uc3QgUj1GLndpZHRoO2xldCBIO3Y9PT1tP2huLnJpZ2h0QW5nbGVzP0g9aS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixgTSAgJHt2fSwke2Z9IEggJHt2K3VpLmdldE1heChobi53aWR0aC8yLFIvMil9IFYgJHtmKzI1fSBIICR7dn1gKTpIPWkuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gIit2KyIsIitmKyIgQyAiKyh2KzYwKSsiLCIrKGYtMTApKyIgIisodis2MCkrIiwiKyhmKzMwKSsiICIrdisiLCIrKGYrMjApKTooSD1pLmFwcGVuZCgibGluZSIpLEguYXR0cigieDEiLHYpLEguYXR0cigieTEiLGYpLEguYXR0cigieDIiLG0pLEguYXR0cigieTIiLGYpKSxDPT09cC5kYi5MSU5FVFlQRS5ET1RURUR8fEM9PT1wLmRiLkxJTkVUWVBFLkRPVFRFRF9DUk9TU3x8Qz09PXAuZGIuTElORVRZUEUuRE9UVEVEX1BPSU5UfHxDPT09cC5kYi5MSU5FVFlQRS5ET1RURURfT1BFTj8oSC5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjMsIDMiKSxILmF0dHIoImNsYXNzIiwibWVzc2FnZUxpbmUxIikpOkguYXR0cigiY2xhc3MiLCJtZXNzYWdlTGluZTAiKTtsZXQgWT0iIjtobi5hcnJvd01hcmtlckFic29sdXRlJiYoWT13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCxZPVkucmVwbGFjZSgvXCgvZywiXFwoIiksWT1ZLnJlcGxhY2UoL1wpL2csIlxcKSIpKSxILmF0dHIoInN0cm9rZS13aWR0aCIsMiksSC5hdHRyKCJzdHJva2UiLCJub25lIiksSC5zdHlsZSgiZmlsbCIsIm5vbmUiKSwoQz09PXAuZGIuTElORVRZUEUuU09MSUR8fEM9PT1wLmRiLkxJTkVUWVBFLkRPVFRFRCkmJkguYXR0cigibWFya2VyLWVuZCIsInVybCgiK1krIiNhcnJvd2hlYWQpIiksKEM9PT1wLmRiLkxJTkVUWVBFLlNPTElEX1BPSU5UfHxDPT09cC5kYi5MSU5FVFlQRS5ET1RURURfUE9JTlQpJiZILmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitZKyIjZmlsbGVkLWhlYWQpIiksKEM9PT1wLmRiLkxJTkVUWVBFLlNPTElEX0NST1NTfHxDPT09cC5kYi5MSU5FVFlQRS5ET1RURURfQ1JPU1MpJiZILmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitZKyIjY3Jvc3NoZWFkKSIpLChQfHxobi5zaG93U2VxdWVuY2VOdW1iZXJzKSYmKEguYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrWSsiI3NlcXVlbmNlbnVtYmVyKSIpLGkuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsdikuYXR0cigieSIsZis0KS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJmb250LXNpemUiLCIxMnB4IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJjbGFzcyIsInNlcXVlbmNlTnVtYmVyIikudGV4dChBKSl9LFhIZT1mdW5jdGlvbihpLGEsZixwLHYsbSxiKXtsZXQgRT0wLEM9MCxBLFA9MDtmb3IoY29uc3QgRiBvZiBwKXtjb25zdCBqPWFbRl0sUj1qLmJveDtBJiZBIT1SJiYoYnx8QnIubW9kZWxzLmFkZEJveChBKSxDKz1obi5ib3hNYXJnaW4rQS5tYXJnaW4pLFImJlIhPUEmJihifHwoUi54PUUrQyxSLnk9diksQys9Ui5tYXJnaW4pLGoud2lkdGg9ai53aWR0aHx8aG4ud2lkdGgsai5oZWlnaHQ9dWkuZ2V0TWF4KGouaGVpZ2h0fHxobi5oZWlnaHQsaG4uaGVpZ2h0KSxqLm1hcmdpbj1qLm1hcmdpbnx8aG4uYWN0b3JNYXJnaW4sUD11aS5nZXRNYXgoUCxqLmhlaWdodCksZltqLm5hbWVdJiYoQys9ai53aWR0aC8yKSxqLng9RStDLGouc3RhcnR5PUJyLmdldFZlcnRpY2FsUG9zKCksQnIuaW5zZXJ0KGoueCx2LGoueCtqLndpZHRoLGouaGVpZ2h0KSxFKz1qLndpZHRoK0Msai5ib3gmJihqLmJveC53aWR0aD1FK1IubWFyZ2luLWouYm94LngpLEM9ai5tYXJnaW4sQT1qLmJveCxCci5tb2RlbHMuYWRkQWN0b3Ioail9QSYmIWImJkJyLm1vZGVscy5hZGRCb3goQSksQnIuYnVtcFZlcnRpY2FsUG9zKFApfSxoZ3Q9ZnVuY3Rpb24oaSxhLGYscCl7aWYocCl7bGV0IHY9MDtCci5idW1wVmVydGljYWxQb3MoaG4uYm94TWFyZ2luKjIpO2Zvcihjb25zdCBtIG9mIGYpe2NvbnN0IGI9YVttXTtiLnN0b3B5fHwoYi5zdG9weT1Cci5nZXRWZXJ0aWNhbFBvcygpKTtjb25zdCBFPXJmLmRyYXdBY3RvcihpLGIsaG4sITApO3Y9dWkuZ2V0TWF4KHYsRSl9QnIuYnVtcFZlcnRpY2FsUG9zKHYraG4uYm94TWFyZ2luKX1lbHNlIGZvcihjb25zdCB2IG9mIGYpe2NvbnN0IG09YVt2XTtyZi5kcmF3QWN0b3IoaSxtLGhuLCExKX19LF9SdD1mdW5jdGlvbihpLGEsZixwKXtsZXQgdj0wLG09MDtmb3IoY29uc3QgYiBvZiBmKXtjb25zdCBFPWFbYl0sQz10VmUoRSksQT1yZi5kcmF3UG9wdXAoaSxFLEMsaG4saG4uZm9yY2VNZW51cyxwKTtBLmhlaWdodD52JiYodj1BLmhlaWdodCksQS53aWR0aCtFLng+bSYmKG09QS53aWR0aCtFLngpfXJldHVybnttYXhIZWlnaHQ6dixtYXhXaWR0aDptfX0sQ1J0PWZ1bmN0aW9uKGkpe1oxKGhuLGkpLGkuZm9udEZhbWlseSYmKGhuLmFjdG9yRm9udEZhbWlseT1obi5ub3RlRm9udEZhbWlseT1obi5tZXNzYWdlRm9udEZhbWlseT1pLmZvbnRGYW1pbHkpLGkuZm9udFNpemUmJihobi5hY3RvckZvbnRTaXplPWhuLm5vdGVGb250U2l6ZT1obi5tZXNzYWdlRm9udFNpemU9aS5mb250U2l6ZSksaS5mb250V2VpZ2h0JiYoaG4uYWN0b3JGb250V2VpZ2h0PWhuLm5vdGVGb250V2VpZ2h0PWhuLm1lc3NhZ2VGb250V2VpZ2h0PWkuZm9udFdlaWdodCl9LERLPWZ1bmN0aW9uKGkpe3JldHVybiBCci5hY3RpdmF0aW9ucy5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGEuYWN0b3I9PT1pfSl9LFNSdD1mdW5jdGlvbihpLGEpe2NvbnN0IGY9YVtpXSxwPURLKGkpLHY9cC5yZWR1Y2UoZnVuY3Rpb24oYixFKXtyZXR1cm4gdWkuZ2V0TWluKGIsRS5zdGFydHgpfSxmLngrZi53aWR0aC8yKSxtPXAucmVkdWNlKGZ1bmN0aW9uKGIsRSl7cmV0dXJuIHVpLmdldE1heChiLEUuc3RvcHgpfSxmLngrZi53aWR0aC8yKTtyZXR1cm5bdixtXX07ZnVuY3Rpb24geTMoaSxhLGYscCx2KXtCci5idW1wVmVydGljYWxQb3MoZik7bGV0IG09cDtpZihhLmlkJiZhLm1lc3NhZ2UmJmlbYS5pZF0pe2NvbnN0IGI9aVthLmlkXS53aWR0aCxFPXg5KGhuKTthLm1lc3NhZ2U9dG8ud3JhcExhYmVsKGBbJHthLm1lc3NhZ2V9XWAsYi0yKmhuLndyYXBQYWRkaW5nLEUpLGEud2lkdGg9YixhLndyYXA9ITA7Y29uc3QgQz10by5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhhLm1lc3NhZ2UsRSksQT11aS5nZXRNYXgoQy5oZWlnaHQsaG4ubGFiZWxCb3hIZWlnaHQpO209cCtBLFd0LmRlYnVnKGAke0F9IC0gJHthLm1lc3NhZ2V9YCl9dihhKSxCci5idW1wVmVydGljYWxQb3MobSl9ZnVuY3Rpb24gUUhlKGksYSxmLHAsdixtLGIpe2Z1bmN0aW9uIEUoQSxQKXtBLng8dltpLmZyb21dLng/KEJyLmluc2VydChhLnN0b3B4LVAsYS5zdGFydHksYS5zdGFydHgsYS5zdG9weStBLmhlaWdodC8yK2huLm5vdGVNYXJnaW4pLGEuc3RvcHg9YS5zdG9weCtQKTooQnIuaW5zZXJ0KGEuc3RhcnR4LGEuc3RhcnR5LGEuc3RvcHgrUCxhLnN0b3B5K0EuaGVpZ2h0LzIraG4ubm90ZU1hcmdpbiksYS5zdG9weD1hLnN0b3B4LVApfWZ1bmN0aW9uIEMoQSxQKXtBLng8dltpLnRvXS54PyhCci5pbnNlcnQoYS5zdGFydHgtUCxhLnN0YXJ0eSxhLnN0b3B4LGEuc3RvcHkrQS5oZWlnaHQvMitobi5ub3RlTWFyZ2luKSxhLnN0YXJ0eD1hLnN0YXJ0eCtQKTooQnIuaW5zZXJ0KGEuc3RvcHgsYS5zdGFydHksYS5zdGFydHgrUCxhLnN0b3B5K0EuaGVpZ2h0LzIraG4ubm90ZU1hcmdpbiksYS5zdGFydHg9YS5zdGFydHgtUCl9aWYobVtpLnRvXT09cCl7Y29uc3QgQT12W2kudG9dLFA9QS50eXBlPT0iYWN0b3IiP3k5LzIrMzpBLndpZHRoLzIrMztFKEEsUCksQS5zdGFydHk9Zi1BLmhlaWdodC8yLEJyLmJ1bXBWZXJ0aWNhbFBvcyhBLmhlaWdodC8yKX1lbHNlIGlmKGJbaS5mcm9tXT09cCl7Y29uc3QgQT12W2kuZnJvbV07aWYoaG4ubWlycm9yQWN0b3JzKXtjb25zdCBQPUEudHlwZT09ImFjdG9yIj95OS8yOkEud2lkdGgvMjtDKEEsUCl9QS5zdG9weT1mLUEuaGVpZ2h0LzIsQnIuYnVtcFZlcnRpY2FsUG9zKEEuaGVpZ2h0LzIpfWVsc2UgaWYoYltpLnRvXT09cCl7Y29uc3QgQT12W2kudG9dO2lmKGhuLm1pcnJvckFjdG9ycyl7Y29uc3QgUD1BLnR5cGU9PSJhY3RvciI/eTkvMiszOkEud2lkdGgvMiszO0UoQSxQKX1BLnN0b3B5PWYtQS5oZWlnaHQvMixCci5idW1wVmVydGljYWxQb3MoQS5oZWlnaHQvMil9fWNvbnN0IFpIZT1mdW5jdGlvbihpLGEsZixwKXtjb25zdHtzZWN1cml0eUxldmVsOnYsc2VxdWVuY2U6bX09RGUoKTtobj1tO2xldCBiO3Y9PT0ic2FuZGJveCImJihiPXhyKCIjaSIrYSkpO2NvbnN0IEU9eHIodj09PSJzYW5kYm94Ij9iLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHk6ImJvZHkiKSxDPXY9PT0ic2FuZGJveCI/Yi5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudDpkb2N1bWVudDtCci5pbml0KCksV3QuZGVidWcocC5kYik7Y29uc3QgQT12PT09InNhbmRib3giP0Uuc2VsZWN0KGBbaWQ9IiR7YX0iXWApOnhyKGBbaWQ9IiR7YX0iXWApLFA9cC5kYi5nZXRBY3RvcnMoKSxGPXAuZGIuZ2V0Q3JlYXRlZEFjdG9ycygpLGo9cC5kYi5nZXREZXN0cm95ZWRBY3RvcnMoKSxSPXAuZGIuZ2V0Qm94ZXMoKTtsZXQgSD1wLmRiLmdldEFjdG9yS2V5cygpO2NvbnN0IFk9cC5kYi5nZXRNZXNzYWdlcygpLHJ0PXAuZGIuZ2V0RGlhZ3JhbVRpdGxlKCksSj1wLmRiLmhhc0F0TGVhc3RPbmVCb3goKSxpdD1wLmRiLmhhc0F0TGVhc3RPbmVCb3hXaXRoVGl0bGUoKSxmdD1KSGUoUCxZLHApO2lmKGhuLmhlaWdodD1lVmUoUCxmdCxSKSxyZi5pbnNlcnRDb21wdXRlckljb24oQSkscmYuaW5zZXJ0RGF0YWJhc2VJY29uKEEpLHJmLmluc2VydENsb2NrSWNvbihBKSxKJiYoQnIuYnVtcFZlcnRpY2FsUG9zKGhuLmJveE1hcmdpbiksaXQmJkJyLmJ1bXBWZXJ0aWNhbFBvcyhSWzBdLnRleHRNYXhIZWlnaHQpKSxobi5oaWRlVW51c2VkUGFydGljaXBhbnRzPT09ITApe2NvbnN0IEZ0PW5ldyBTZXQ7WS5mb3JFYWNoKFg9PntGdC5hZGQoWC5mcm9tKSxGdC5hZGQoWC50byl9KSxIPUguZmlsdGVyKFg9PkZ0LmhhcyhYKSl9WEhlKEEsUCxGLEgsMCxZLCExKTtjb25zdCBUdD1pVmUoWSxQLGZ0LHApO3JmLmluc2VydEFycm93SGVhZChBKSxyZi5pbnNlcnRBcnJvd0Nyb3NzSGVhZChBKSxyZi5pbnNlcnRBcnJvd0ZpbGxlZEhlYWQoQSkscmYuaW5zZXJ0U2VxdWVuY2VOdW1iZXIoQSk7ZnVuY3Rpb24ga3QoRnQsWCl7Y29uc3QgUnQ9QnIuZW5kQWN0aXZhdGlvbihGdCk7UnQuc3RhcnR5KzE4PlgmJihSdC5zdGFydHk9WC02LFgrPTEyKSxyZi5kcmF3QWN0aXZhdGlvbihBLFJ0LFgsaG4sREsoRnQuZnJvbS5hY3RvcikubGVuZ3RoKSxCci5pbnNlcnQoUnQuc3RhcnR4LFgtMTAsUnQuc3RvcHgsWCl9bGV0IG10PTEsY3Q9MTtjb25zdCB5dD1bXSxzdD1bXTtZLmZvckVhY2goZnVuY3Rpb24oRnQsWCl7bGV0IFJ0LEJ0LHZ0O3N3aXRjaChGdC50eXBlKXtjYXNlIHAuZGIuTElORVRZUEUuTk9URTpCci5yZXNldFZlcnRpY2FsUG9zKCksQnQ9RnQubm90ZU1vZGVsLFdIZShBLEJ0KTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuQUNUSVZFX1NUQVJUOkJyLm5ld0FjdGl2YXRpb24oRnQsQSxQKTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuQUNUSVZFX0VORDprdChGdCxCci5nZXRWZXJ0aWNhbFBvcygpKTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuTE9PUF9TVEFSVDp5MyhUdCxGdCxobi5ib3hNYXJnaW4saG4uYm94TWFyZ2luK2huLmJveFRleHRNYXJnaW4sT3Q9PkJyLm5ld0xvb3AoT3QpKTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuTE9PUF9FTkQ6UnQ9QnIuZW5kTG9vcCgpLHJmLmRyYXdMb29wKEEsUnQsImxvb3AiLGhuKSxCci5idW1wVmVydGljYWxQb3MoUnQuc3RvcHktQnIuZ2V0VmVydGljYWxQb3MoKSksQnIubW9kZWxzLmFkZExvb3AoUnQpO2JyZWFrO2Nhc2UgcC5kYi5MSU5FVFlQRS5SRUNUX1NUQVJUOnkzKFR0LEZ0LGhuLmJveE1hcmdpbixobi5ib3hNYXJnaW4sT3Q9PkJyLm5ld0xvb3Aodm9pZCAwLE90Lm1lc3NhZ2UpKTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuUkVDVF9FTkQ6UnQ9QnIuZW5kTG9vcCgpLHN0LnB1c2goUnQpLEJyLm1vZGVscy5hZGRMb29wKFJ0KSxCci5idW1wVmVydGljYWxQb3MoUnQuc3RvcHktQnIuZ2V0VmVydGljYWxQb3MoKSk7YnJlYWs7Y2FzZSBwLmRiLkxJTkVUWVBFLk9QVF9TVEFSVDp5MyhUdCxGdCxobi5ib3hNYXJnaW4saG4uYm94TWFyZ2luK2huLmJveFRleHRNYXJnaW4sT3Q9PkJyLm5ld0xvb3AoT3QpKTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuT1BUX0VORDpSdD1Cci5lbmRMb29wKCkscmYuZHJhd0xvb3AoQSxSdCwib3B0IixobiksQnIuYnVtcFZlcnRpY2FsUG9zKFJ0LnN0b3B5LUJyLmdldFZlcnRpY2FsUG9zKCkpLEJyLm1vZGVscy5hZGRMb29wKFJ0KTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuQUxUX1NUQVJUOnkzKFR0LEZ0LGhuLmJveE1hcmdpbixobi5ib3hNYXJnaW4raG4uYm94VGV4dE1hcmdpbixPdD0+QnIubmV3TG9vcChPdCkpO2JyZWFrO2Nhc2UgcC5kYi5MSU5FVFlQRS5BTFRfRUxTRTp5MyhUdCxGdCxobi5ib3hNYXJnaW4raG4uYm94VGV4dE1hcmdpbixobi5ib3hNYXJnaW4sT3Q9PkJyLmFkZFNlY3Rpb25Ub0xvb3AoT3QpKTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuQUxUX0VORDpSdD1Cci5lbmRMb29wKCkscmYuZHJhd0xvb3AoQSxSdCwiYWx0IixobiksQnIuYnVtcFZlcnRpY2FsUG9zKFJ0LnN0b3B5LUJyLmdldFZlcnRpY2FsUG9zKCkpLEJyLm1vZGVscy5hZGRMb29wKFJ0KTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuUEFSX1NUQVJUOmNhc2UgcC5kYi5MSU5FVFlQRS5QQVJfT1ZFUl9TVEFSVDp5MyhUdCxGdCxobi5ib3hNYXJnaW4saG4uYm94TWFyZ2luK2huLmJveFRleHRNYXJnaW4sT3Q9PkJyLm5ld0xvb3AoT3QpKSxCci5zYXZlVmVydGljYWxQb3MoKTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuUEFSX0FORDp5MyhUdCxGdCxobi5ib3hNYXJnaW4raG4uYm94VGV4dE1hcmdpbixobi5ib3hNYXJnaW4sT3Q9PkJyLmFkZFNlY3Rpb25Ub0xvb3AoT3QpKTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuUEFSX0VORDpSdD1Cci5lbmRMb29wKCkscmYuZHJhd0xvb3AoQSxSdCwicGFyIixobiksQnIuYnVtcFZlcnRpY2FsUG9zKFJ0LnN0b3B5LUJyLmdldFZlcnRpY2FsUG9zKCkpLEJyLm1vZGVscy5hZGRMb29wKFJ0KTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuQVVUT05VTUJFUjptdD1GdC5tZXNzYWdlLnN0YXJ0fHxtdCxjdD1GdC5tZXNzYWdlLnN0ZXB8fGN0LEZ0Lm1lc3NhZ2UudmlzaWJsZT9wLmRiLmVuYWJsZVNlcXVlbmNlTnVtYmVycygpOnAuZGIuZGlzYWJsZVNlcXVlbmNlTnVtYmVycygpO2JyZWFrO2Nhc2UgcC5kYi5MSU5FVFlQRS5DUklUSUNBTF9TVEFSVDp5MyhUdCxGdCxobi5ib3hNYXJnaW4saG4uYm94TWFyZ2luK2huLmJveFRleHRNYXJnaW4sT3Q9PkJyLm5ld0xvb3AoT3QpKTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuQ1JJVElDQUxfT1BUSU9OOnkzKFR0LEZ0LGhuLmJveE1hcmdpbitobi5ib3hUZXh0TWFyZ2luLGhuLmJveE1hcmdpbixPdD0+QnIuYWRkU2VjdGlvblRvTG9vcChPdCkpO2JyZWFrO2Nhc2UgcC5kYi5MSU5FVFlQRS5DUklUSUNBTF9FTkQ6UnQ9QnIuZW5kTG9vcCgpLHJmLmRyYXdMb29wKEEsUnQsImNyaXRpY2FsIixobiksQnIuYnVtcFZlcnRpY2FsUG9zKFJ0LnN0b3B5LUJyLmdldFZlcnRpY2FsUG9zKCkpLEJyLm1vZGVscy5hZGRMb29wKFJ0KTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuQlJFQUtfU1RBUlQ6eTMoVHQsRnQsaG4uYm94TWFyZ2luLGhuLmJveE1hcmdpbitobi5ib3hUZXh0TWFyZ2luLE90PT5Cci5uZXdMb29wKE90KSk7YnJlYWs7Y2FzZSBwLmRiLkxJTkVUWVBFLkJSRUFLX0VORDpSdD1Cci5lbmRMb29wKCkscmYuZHJhd0xvb3AoQSxSdCwiYnJlYWsiLGhuKSxCci5idW1wVmVydGljYWxQb3MoUnQuc3RvcHktQnIuZ2V0VmVydGljYWxQb3MoKSksQnIubW9kZWxzLmFkZExvb3AoUnQpO2JyZWFrO2RlZmF1bHQ6dHJ5e3Z0PUZ0Lm1zZ01vZGVsLHZ0LnN0YXJ0eT1Cci5nZXRWZXJ0aWNhbFBvcygpLHZ0LnNlcXVlbmNlSW5kZXg9bXQsdnQuc2VxdWVuY2VWaXNpYmxlPXAuZGIuc2hvd1NlcXVlbmNlTnVtYmVycygpO2NvbnN0IE90PUtIZShBLHZ0KTtRSGUoRnQsdnQsT3QsWCxQLEYsaikseXQucHVzaCh7bWVzc2FnZU1vZGVsOnZ0LGxpbmVTdGFydFk6T3R9KSxCci5tb2RlbHMuYWRkTWVzc2FnZSh2dCl9Y2F0Y2goT3Qpe1d0LmVycm9yKCJlcnJvciB3aGlsZSBkcmF3aW5nIG1lc3NhZ2UiLE90KX19W3AuZGIuTElORVRZUEUuU09MSURfT1BFTixwLmRiLkxJTkVUWVBFLkRPVFRFRF9PUEVOLHAuZGIuTElORVRZUEUuU09MSUQscC5kYi5MSU5FVFlQRS5ET1RURUQscC5kYi5MSU5FVFlQRS5TT0xJRF9DUk9TUyxwLmRiLkxJTkVUWVBFLkRPVFRFRF9DUk9TUyxwLmRiLkxJTkVUWVBFLlNPTElEX1BPSU5ULHAuZGIuTElORVRZUEUuRE9UVEVEX1BPSU5UXS5pbmNsdWRlcyhGdC50eXBlKSYmKG10PW10K2N0KX0pLFd0LmRlYnVnKCJjcmVhdGVkQWN0b3JzIixGKSxXdC5kZWJ1ZygiZGVzdHJveWVkQWN0b3JzIixqKSxoZ3QoQSxQLEgsITEpLHl0LmZvckVhY2goRnQ9PllIZShBLEZ0Lm1lc3NhZ2VNb2RlbCxGdC5saW5lU3RhcnRZLHApKSxobi5taXJyb3JBY3RvcnMmJmhndChBLFAsSCwhMCksc3QuZm9yRWFjaChGdD0+cmYuZHJhd0JhY2tncm91bmRSZWN0KEEsRnQpKSxrUnQoQSxQLEgsaG4pLEJyLm1vZGVscy5ib3hlcy5mb3JFYWNoKGZ1bmN0aW9uKEZ0KXtGdC5oZWlnaHQ9QnIuZ2V0VmVydGljYWxQb3MoKS1GdC55LEJyLmluc2VydChGdC54LEZ0LnksRnQueCtGdC53aWR0aCxGdC5oZWlnaHQpLEZ0LnN0YXJ0eD1GdC54LEZ0LnN0YXJ0eT1GdC55LEZ0LnN0b3B4PUZ0LnN0YXJ0eCtGdC53aWR0aCxGdC5zdG9weT1GdC5zdGFydHkrRnQuaGVpZ2h0LEZ0LnN0cm9rZT0icmdiKDAsMCwwLCAwLjUpIixyZi5kcmF3Qm94KEEsRnQsaG4pfSksSiYmQnIuYnVtcFZlcnRpY2FsUG9zKGhuLmJveE1hcmdpbik7Y29uc3QgeHQ9X1J0KEEsUCxILEMpLHtib3VuZHM6aHR9PUJyLmdldEJvdW5kcygpO2xldCBkdD1odC5zdG9weS1odC5zdGFydHk7ZHQ8eHQubWF4SGVpZ2h0JiYoZHQ9eHQubWF4SGVpZ2h0KTtsZXQgQ3Q9ZHQrMipobi5kaWFncmFtTWFyZ2luWTtobi5taXJyb3JBY3RvcnMmJihDdD1DdC1obi5ib3hNYXJnaW4raG4uYm90dG9tTWFyZ2luQWRqKTtsZXQgdHQ9aHQuc3RvcHgtaHQuc3RhcnR4O3R0PHh0Lm1heFdpZHRoJiYodHQ9eHQubWF4V2lkdGgpO2NvbnN0IFB0PXR0KzIqaG4uZGlhZ3JhbU1hcmdpblg7cnQmJkEuYXBwZW5kKCJ0ZXh0IikudGV4dChydCkuYXR0cigieCIsKGh0LnN0b3B4LWh0LnN0YXJ0eCkvMi0yKmhuLmRpYWdyYW1NYXJnaW5YKS5hdHRyKCJ5IiwtMjUpLG9nKEEsQ3QsUHQsaG4udXNlTWF4V2lkdGgpO2NvbnN0IHB0PXJ0PzQwOjA7QS5hdHRyKCJ2aWV3Qm94IixodC5zdGFydHgtaG4uZGlhZ3JhbU1hcmdpblgrIiAtIisoaG4uZGlhZ3JhbU1hcmdpblkrcHQpKyIgIitQdCsiICIrKEN0K3B0KSksV3QuZGVidWcoIm1vZGVsczoiLEJyLm1vZGVscyl9O2Z1bmN0aW9uIEpIZShpLGEsZil7Y29uc3QgcD17fTtyZXR1cm4gYS5mb3JFYWNoKGZ1bmN0aW9uKHYpe2lmKGlbdi50b10mJmlbdi5mcm9tXSl7Y29uc3QgbT1pW3YudG9dO2lmKHYucGxhY2VtZW50PT09Zi5kYi5QTEFDRU1FTlQuTEVGVE9GJiYhbS5wcmV2QWN0b3J8fHYucGxhY2VtZW50PT09Zi5kYi5QTEFDRU1FTlQuUklHSFRPRiYmIW0ubmV4dEFjdG9yKXJldHVybjtjb25zdCBiPXYucGxhY2VtZW50IT09dm9pZCAwLEU9IWIsQz1iP2ZMKGhuKTp4OShobiksQT12LndyYXA/dG8ud3JhcExhYmVsKHYubWVzc2FnZSxobi53aWR0aC0yKmhuLndyYXBQYWRkaW5nLEMpOnYubWVzc2FnZSxGPXRvLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKEEsQykud2lkdGgrMipobi53cmFwUGFkZGluZztFJiZ2LmZyb209PT1tLm5leHRBY3Rvcj9wW3YudG9dPXVpLmdldE1heChwW3YudG9dfHwwLEYpOkUmJnYuZnJvbT09PW0ucHJldkFjdG9yP3Bbdi5mcm9tXT11aS5nZXRNYXgocFt2LmZyb21dfHwwLEYpOkUmJnYuZnJvbT09PXYudG8/KHBbdi5mcm9tXT11aS5nZXRNYXgocFt2LmZyb21dfHwwLEYvMikscFt2LnRvXT11aS5nZXRNYXgocFt2LnRvXXx8MCxGLzIpKTp2LnBsYWNlbWVudD09PWYuZGIuUExBQ0VNRU5ULlJJR0hUT0Y/cFt2LmZyb21dPXVpLmdldE1heChwW3YuZnJvbV18fDAsRik6di5wbGFjZW1lbnQ9PT1mLmRiLlBMQUNFTUVOVC5MRUZUT0Y/cFttLnByZXZBY3Rvcl09dWkuZ2V0TWF4KHBbbS5wcmV2QWN0b3JdfHwwLEYpOnYucGxhY2VtZW50PT09Zi5kYi5QTEFDRU1FTlQuT1ZFUiYmKG0ucHJldkFjdG9yJiYocFttLnByZXZBY3Rvcl09dWkuZ2V0TWF4KHBbbS5wcmV2QWN0b3JdfHwwLEYvMikpLG0ubmV4dEFjdG9yJiYocFt2LmZyb21dPXVpLmdldE1heChwW3YuZnJvbV18fDAsRi8yKSkpfX0pLFd0LmRlYnVnKCJtYXhNZXNzYWdlV2lkdGhQZXJBY3RvcjoiLHApLHB9Y29uc3QgdFZlPWZ1bmN0aW9uKGkpe2xldCBhPTA7Y29uc3QgZj1sZ3QoaG4pO2Zvcihjb25zdCBwIGluIGkubGlua3Mpe2NvbnN0IG09dG8uY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMocCxmKS53aWR0aCsyKmhuLndyYXBQYWRkaW5nKzIqaG4uYm94TWFyZ2luO2E8bSYmKGE9bSl9cmV0dXJuIGF9O2Z1bmN0aW9uIGVWZShpLGEsZil7bGV0IHA9MDtPYmplY3Qua2V5cyhpKS5mb3JFYWNoKG09Pntjb25zdCBiPWlbbV07Yi53cmFwJiYoYi5kZXNjcmlwdGlvbj10by53cmFwTGFiZWwoYi5kZXNjcmlwdGlvbixobi53aWR0aC0yKmhuLndyYXBQYWRkaW5nLGxndChobikpKTtjb25zdCBFPXRvLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKGIuZGVzY3JpcHRpb24sbGd0KGhuKSk7Yi53aWR0aD1iLndyYXA/aG4ud2lkdGg6dWkuZ2V0TWF4KGhuLndpZHRoLEUud2lkdGgrMipobi53cmFwUGFkZGluZyksYi5oZWlnaHQ9Yi53cmFwP3VpLmdldE1heChFLmhlaWdodCxobi5oZWlnaHQpOmhuLmhlaWdodCxwPXVpLmdldE1heChwLGIuaGVpZ2h0KX0pO2Zvcihjb25zdCBtIGluIGEpe2NvbnN0IGI9aVttXTtpZighYiljb250aW51ZTtjb25zdCBFPWlbYi5uZXh0QWN0b3JdO2lmKCFFKXtjb25zdCBGPWFbbV0raG4uYWN0b3JNYXJnaW4tYi53aWR0aC8yO2IubWFyZ2luPXVpLmdldE1heChGLGhuLmFjdG9yTWFyZ2luKTtjb250aW51ZX1jb25zdCBBPWFbbV0raG4uYWN0b3JNYXJnaW4tYi53aWR0aC8yLUUud2lkdGgvMjtiLm1hcmdpbj11aS5nZXRNYXgoQSxobi5hY3Rvck1hcmdpbil9bGV0IHY9MDtyZXR1cm4gZi5mb3JFYWNoKG09Pntjb25zdCBiPXg5KGhuKTtsZXQgRT1tLmFjdG9yS2V5cy5yZWR1Y2UoKFAsRik9PlArPWlbRl0ud2lkdGgrKGlbRl0ubWFyZ2lufHwwKSwwKTtFLT0yKmhuLmJveFRleHRNYXJnaW4sbS53cmFwJiYobS5uYW1lPXRvLndyYXBMYWJlbChtLm5hbWUsRS0yKmhuLndyYXBQYWRkaW5nLGIpKTtjb25zdCBDPXRvLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKG0ubmFtZSxiKTt2PXVpLmdldE1heChDLmhlaWdodCx2KTtjb25zdCBBPXVpLmdldE1heChFLEMud2lkdGgrMipobi53cmFwUGFkZGluZyk7aWYobS5tYXJnaW49aG4uYm94VGV4dE1hcmdpbixFPEEpe2NvbnN0IFA9KEEtRSkvMjttLm1hcmdpbis9UH19KSxmLmZvckVhY2gobT0+bS50ZXh0TWF4SGVpZ2h0PXYpLHVpLmdldE1heChwLGhuLmhlaWdodCl9Y29uc3QgblZlPWZ1bmN0aW9uKGksYSxmKXtjb25zdCBwPWFbaS5mcm9tXS54LHY9YVtpLnRvXS54LG09aS53cmFwJiZpLm1lc3NhZ2U7bGV0IGI9dG8uY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMobT90by53cmFwTGFiZWwoaS5tZXNzYWdlLGhuLndpZHRoLGZMKGhuKSk6aS5tZXNzYWdlLGZMKGhuKSk7Y29uc3QgRT17d2lkdGg6bT9obi53aWR0aDp1aS5nZXRNYXgoaG4ud2lkdGgsYi53aWR0aCsyKmhuLm5vdGVNYXJnaW4pLGhlaWdodDowLHN0YXJ0eDphW2kuZnJvbV0ueCxzdG9weDowLHN0YXJ0eTowLHN0b3B5OjAsbWVzc2FnZTppLm1lc3NhZ2V9O3JldHVybiBpLnBsYWNlbWVudD09PWYuZGIuUExBQ0VNRU5ULlJJR0hUT0Y/KEUud2lkdGg9bT91aS5nZXRNYXgoaG4ud2lkdGgsYi53aWR0aCk6dWkuZ2V0TWF4KGFbaS5mcm9tXS53aWR0aC8yK2FbaS50b10ud2lkdGgvMixiLndpZHRoKzIqaG4ubm90ZU1hcmdpbiksRS5zdGFydHg9cCsoYVtpLmZyb21dLndpZHRoK2huLmFjdG9yTWFyZ2luKS8yKTppLnBsYWNlbWVudD09PWYuZGIuUExBQ0VNRU5ULkxFRlRPRj8oRS53aWR0aD1tP3VpLmdldE1heChobi53aWR0aCxiLndpZHRoKzIqaG4ubm90ZU1hcmdpbik6dWkuZ2V0TWF4KGFbaS5mcm9tXS53aWR0aC8yK2FbaS50b10ud2lkdGgvMixiLndpZHRoKzIqaG4ubm90ZU1hcmdpbiksRS5zdGFydHg9cC1FLndpZHRoKyhhW2kuZnJvbV0ud2lkdGgtaG4uYWN0b3JNYXJnaW4pLzIpOmkudG89PT1pLmZyb20/KGI9dG8uY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMobT90by53cmFwTGFiZWwoaS5tZXNzYWdlLHVpLmdldE1heChobi53aWR0aCxhW2kuZnJvbV0ud2lkdGgpLGZMKGhuKSk6aS5tZXNzYWdlLGZMKGhuKSksRS53aWR0aD1tP3VpLmdldE1heChobi53aWR0aCxhW2kuZnJvbV0ud2lkdGgpOnVpLmdldE1heChhW2kuZnJvbV0ud2lkdGgsaG4ud2lkdGgsYi53aWR0aCsyKmhuLm5vdGVNYXJnaW4pLEUuc3RhcnR4PXArKGFbaS5mcm9tXS53aWR0aC1FLndpZHRoKS8yKTooRS53aWR0aD1NYXRoLmFicyhwK2FbaS5mcm9tXS53aWR0aC8yLSh2K2FbaS50b10ud2lkdGgvMikpK2huLmFjdG9yTWFyZ2luLEUuc3RhcnR4PXA8dj9wK2FbaS5mcm9tXS53aWR0aC8yLWhuLmFjdG9yTWFyZ2luLzI6dithW2kudG9dLndpZHRoLzItaG4uYWN0b3JNYXJnaW4vMiksbSYmKEUubWVzc2FnZT10by53cmFwTGFiZWwoaS5tZXNzYWdlLEUud2lkdGgtMipobi53cmFwUGFkZGluZyxmTChobikpKSxXdC5kZWJ1ZyhgTk06WyR7RS5zdGFydHh9LCR7RS5zdG9weH0sJHtFLnN0YXJ0eX0sJHtFLnN0b3B5fToke0Uud2lkdGh9LCR7RS5oZWlnaHR9PSR7aS5tZXNzYWdlfV1gKSxFfSxyVmU9ZnVuY3Rpb24oaSxhLGYpe2xldCBwPSExO2lmKFtmLmRiLkxJTkVUWVBFLlNPTElEX09QRU4sZi5kYi5MSU5FVFlQRS5ET1RURURfT1BFTixmLmRiLkxJTkVUWVBFLlNPTElELGYuZGIuTElORVRZUEUuRE9UVEVELGYuZGIuTElORVRZUEUuU09MSURfQ1JPU1MsZi5kYi5MSU5FVFlQRS5ET1RURURfQ1JPU1MsZi5kYi5MSU5FVFlQRS5TT0xJRF9QT0lOVCxmLmRiLkxJTkVUWVBFLkRPVFRFRF9QT0lOVF0uaW5jbHVkZXMoaS50eXBlKSYmKHA9ITApLCFwKXJldHVybnt9O2NvbnN0IHY9U1J0KGkuZnJvbSxhKSxtPVNSdChpLnRvLGEpLGI9dlswXTw9bVswXT8xOjAsRT12WzBdPG1bMF0/MDoxLEM9Wy4uLnYsLi4ubV0sQT1NYXRoLmFicyhtW0VdLXZbYl0pO2kud3JhcCYmaS5tZXNzYWdlJiYoaS5tZXNzYWdlPXRvLndyYXBMYWJlbChpLm1lc3NhZ2UsdWkuZ2V0TWF4KEErMipobi53cmFwUGFkZGluZyxobi53aWR0aCkseDkoaG4pKSk7Y29uc3QgUD10by5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhpLm1lc3NhZ2UseDkoaG4pKTtyZXR1cm57d2lkdGg6dWkuZ2V0TWF4KGkud3JhcD8wOlAud2lkdGgrMipobi53cmFwUGFkZGluZyxBKzIqaG4ud3JhcFBhZGRpbmcsaG4ud2lkdGgpLGhlaWdodDowLHN0YXJ0eDp2W2JdLHN0b3B4Om1bRV0sc3RhcnR5OjAsc3RvcHk6MCxtZXNzYWdlOmkubWVzc2FnZSx0eXBlOmkudHlwZSx3cmFwOmkud3JhcCxmcm9tQm91bmRzOk1hdGgubWluLmFwcGx5KG51bGwsQyksdG9Cb3VuZHM6TWF0aC5tYXguYXBwbHkobnVsbCxDKX19LGlWZT1mdW5jdGlvbihpLGEsZixwKXtjb25zdCB2PXt9LG09W107bGV0IGIsRSxDO3JldHVybiBpLmZvckVhY2goZnVuY3Rpb24oQSl7c3dpdGNoKEEuaWQ9dG8ucmFuZG9tKHtsZW5ndGg6MTB9KSxBLnR5cGUpe2Nhc2UgcC5kYi5MSU5FVFlQRS5MT09QX1NUQVJUOmNhc2UgcC5kYi5MSU5FVFlQRS5BTFRfU1RBUlQ6Y2FzZSBwLmRiLkxJTkVUWVBFLk9QVF9TVEFSVDpjYXNlIHAuZGIuTElORVRZUEUuUEFSX1NUQVJUOmNhc2UgcC5kYi5MSU5FVFlQRS5QQVJfT1ZFUl9TVEFSVDpjYXNlIHAuZGIuTElORVRZUEUuQ1JJVElDQUxfU1RBUlQ6Y2FzZSBwLmRiLkxJTkVUWVBFLkJSRUFLX1NUQVJUOm0ucHVzaCh7aWQ6QS5pZCxtc2c6QS5tZXNzYWdlLGZyb206TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsdG86TnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIsd2lkdGg6MH0pO2JyZWFrO2Nhc2UgcC5kYi5MSU5FVFlQRS5BTFRfRUxTRTpjYXNlIHAuZGIuTElORVRZUEUuUEFSX0FORDpjYXNlIHAuZGIuTElORVRZUEUuQ1JJVElDQUxfT1BUSU9OOkEubWVzc2FnZSYmKGI9bS5wb3AoKSx2W2IuaWRdPWIsdltBLmlkXT1iLG0ucHVzaChiKSk7YnJlYWs7Y2FzZSBwLmRiLkxJTkVUWVBFLkxPT1BfRU5EOmNhc2UgcC5kYi5MSU5FVFlQRS5BTFRfRU5EOmNhc2UgcC5kYi5MSU5FVFlQRS5PUFRfRU5EOmNhc2UgcC5kYi5MSU5FVFlQRS5QQVJfRU5EOmNhc2UgcC5kYi5MSU5FVFlQRS5DUklUSUNBTF9FTkQ6Y2FzZSBwLmRiLkxJTkVUWVBFLkJSRUFLX0VORDpiPW0ucG9wKCksdltiLmlkXT1iO2JyZWFrO2Nhc2UgcC5kYi5MSU5FVFlQRS5BQ1RJVkVfU1RBUlQ6e2NvbnN0IEY9YVtBLmZyb20/QS5mcm9tLmFjdG9yOkEudG8uYWN0b3JdLGo9REsoQS5mcm9tP0EuZnJvbS5hY3RvcjpBLnRvLmFjdG9yKS5sZW5ndGgsUj1GLngrRi53aWR0aC8yKyhqLTEpKmhuLmFjdGl2YXRpb25XaWR0aC8yLEg9e3N0YXJ0eDpSLHN0b3B4OlIraG4uYWN0aXZhdGlvbldpZHRoLGFjdG9yOkEuZnJvbS5hY3RvcixlbmFibGVkOiEwfTtCci5hY3RpdmF0aW9ucy5wdXNoKEgpfWJyZWFrO2Nhc2UgcC5kYi5MSU5FVFlQRS5BQ1RJVkVfRU5EOntjb25zdCBGPUJyLmFjdGl2YXRpb25zLm1hcChqPT5qLmFjdG9yKS5sYXN0SW5kZXhPZihBLmZyb20uYWN0b3IpO2RlbGV0ZSBCci5hY3RpdmF0aW9ucy5zcGxpY2UoRiwxKVswXX1icmVha31BLnBsYWNlbWVudCE9PXZvaWQgMD8oRT1uVmUoQSxhLHApLEEubm90ZU1vZGVsPUUsbS5mb3JFYWNoKEY9PntiPUYsYi5mcm9tPXVpLmdldE1pbihiLmZyb20sRS5zdGFydHgpLGIudG89dWkuZ2V0TWF4KGIudG8sRS5zdGFydHgrRS53aWR0aCksYi53aWR0aD11aS5nZXRNYXgoYi53aWR0aCxNYXRoLmFicyhiLmZyb20tYi50bykpLWhuLmxhYmVsQm94V2lkdGh9KSk6KEM9clZlKEEsYSxwKSxBLm1zZ01vZGVsPUMsQy5zdGFydHgmJkMuc3RvcHgmJm0ubGVuZ3RoPjAmJm0uZm9yRWFjaChGPT57aWYoYj1GLEMuc3RhcnR4PT09Qy5zdG9weCl7Y29uc3Qgaj1hW0EuZnJvbV0sUj1hW0EudG9dO2IuZnJvbT11aS5nZXRNaW4oai54LUMud2lkdGgvMixqLngtai53aWR0aC8yLGIuZnJvbSksYi50bz11aS5nZXRNYXgoUi54K0Mud2lkdGgvMixSLngrai53aWR0aC8yLGIudG8pLGIud2lkdGg9dWkuZ2V0TWF4KGIud2lkdGgsTWF0aC5hYnMoYi50by1iLmZyb20pKS1obi5sYWJlbEJveFdpZHRofWVsc2UgYi5mcm9tPXVpLmdldE1pbihDLnN0YXJ0eCxiLmZyb20pLGIudG89dWkuZ2V0TWF4KEMuc3RvcHgsYi50byksYi53aWR0aD11aS5nZXRNYXgoYi53aWR0aCxDLndpZHRoKS1obi5sYWJlbEJveFdpZHRofSkpfSksQnIuYWN0aXZhdGlvbnM9W10sV3QuZGVidWcoIkxvb3AgdHlwZSB3aWR0aHM6Iix2KSx2fSxzVmU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpKcWUsZGI6VEhlLHJlbmRlcmVyOntib3VuZHM6QnIsZHJhd0FjdG9yczpoZ3QsZHJhd0FjdG9yc1BvcHVwOl9SdCxzZXRDb25mOkNSdCxkcmF3OlpIZX0sc3R5bGVzOl9IZX19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIGZndD1mdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKENlLCRlLHllLGZuKXtmb3IoeWU9eWV8fHt9LGZuPUNlLmxlbmd0aDtmbi0tO3llW0NlW2ZuXV09JGUpO3JldHVybiB5ZX0sYT1bMSwzNF0sZj1bMSwzNV0scD1bMSwzNl0sdj1bMSwzN10sbT1bMSw5XSxiPVsxLDhdLEU9WzEsMTldLEM9WzEsMjBdLEE9WzEsMjFdLFA9WzEsNDBdLEY9WzEsNDFdLGo9WzEsMjddLFI9WzEsMjVdLEg9WzEsMjZdLFk9WzEsMzJdLHJ0PVsxLDMzXSxKPVsxLDI4XSxpdD1bMSwyOV0sZnQ9WzEsMzBdLFR0PVsxLDMxXSxrdD1bMSw0NV0sbXQ9WzEsNDJdLGN0PVsxLDQzXSx5dD1bMSw0NF0sc3Q9WzEsNDZdLHh0PVsxLDI0XSxodD1bMSwxNiwyNF0sZHQ9WzEsNjBdLEN0PVsxLDYxXSx0dD1bMSw2Ml0sUHQ9WzEsNjNdLHB0PVsxLDY0XSxGdD1bMSw2NV0sWD1bMSw2Nl0sUnQ9WzEsMTYsMjQsNTJdLEJ0PVsxLDc3XSx2dD1bMSwxNiwyNCwyNywyOCwzNiw1MCw1Miw1NSw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3OSw4MV0sT3Q9WzEsMTYsMjQsMjcsMjgsMzQsMzYsNTAsNTIsNTUsNTksNjgsNjksNzAsNzEsNzIsNzMsNzQsNzksODEsOTQsOTYsOTcsOTgsOTldLFZ0PVsxLDg2XSxxZT1bMjgsOTQsOTYsOTcsOTgsOTldLF9uPVsyOCw3Myw3NCw5NCw5Niw5Nyw5OCw5OV0sVGU9WzI4LDY4LDY5LDcwLDcxLDcyLDk0LDk2LDk3LDk4LDk5XSxXbj1bMSw5OV0sQWU9WzEsMTYsMjQsNTAsNTIsNTVdLG5lPVsxLDE2LDI0LDM2XSxrZT1bOCw5LDEwLDExLDE5LDIzLDQ0LDQ2LDQ4LDUzLDU3LDU4LDYwLDYxLDYzLDY1LDc1LDc2LDc4LDgyLDk0LDk2LDk3LDk4LDk5XSxWZT17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsbWVybWFpZERvYzo0LGRpcmVjdGl2ZTo1LHN0YXRlbWVudHM6NixkaXJlY3Rpb246NyxkaXJlY3Rpb25fdGI6OCxkaXJlY3Rpb25fYnQ6OSxkaXJlY3Rpb25fcmw6MTAsZGlyZWN0aW9uX2xyOjExLGdyYXBoQ29uZmlnOjEyLG9wZW5EaXJlY3RpdmU6MTMsdHlwZURpcmVjdGl2ZToxNCxjbG9zZURpcmVjdGl2ZToxNSxORVdMSU5FOjE2LCI6IjoxNyxhcmdEaXJlY3RpdmU6MTgsb3Blbl9kaXJlY3RpdmU6MTksdHlwZV9kaXJlY3RpdmU6MjAsYXJnX2RpcmVjdGl2ZToyMSxjbG9zZV9kaXJlY3RpdmU6MjIsQ0xBU1NfRElBR1JBTToyMyxFT0Y6MjQsc3RhdGVtZW50OjI1LGNsYXNzTGFiZWw6MjYsU1FTOjI3LFNUUjoyOCxTUUU6MjksbmFtZXNwYWNlTmFtZTozMCxhbHBoYU51bVRva2VuOjMxLGNsYXNzTmFtZTozMixjbGFzc0xpdGVyYWxOYW1lOjMzLEdFTkVSSUNUWVBFOjM0LHJlbGF0aW9uU3RhdGVtZW50OjM1LExBQkVMOjM2LG5hbWVzcGFjZVN0YXRlbWVudDozNyxjbGFzc1N0YXRlbWVudDozOCxtZXRob2RTdGF0ZW1lbnQ6MzksYW5ub3RhdGlvblN0YXRlbWVudDo0MCxjbGlja1N0YXRlbWVudDo0MSxjc3NDbGFzc1N0YXRlbWVudDo0Mixub3RlU3RhdGVtZW50OjQzLGFjY190aXRsZTo0NCxhY2NfdGl0bGVfdmFsdWU6NDUsYWNjX2Rlc2NyOjQ2LGFjY19kZXNjcl92YWx1ZTo0NyxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjQ4LG5hbWVzcGFjZUlkZW50aWZpZXI6NDksU1RSVUNUX1NUQVJUOjUwLGNsYXNzU3RhdGVtZW50czo1MSxTVFJVQ1RfU1RPUDo1MixOQU1FU1BBQ0U6NTMsY2xhc3NJZGVudGlmaWVyOjU0LFNUWUxFX1NFUEFSQVRPUjo1NSxtZW1iZXJzOjU2LENMQVNTOjU3LEFOTk9UQVRJT05fU1RBUlQ6NTgsQU5OT1RBVElPTl9FTkQ6NTksTUVNQkVSOjYwLFNFUEFSQVRPUjo2MSxyZWxhdGlvbjo2MixOT1RFX0ZPUjo2Myxub3RlVGV4dDo2NCxOT1RFOjY1LHJlbGF0aW9uVHlwZTo2NixsaW5lVHlwZTo2NyxBR0dSRUdBVElPTjo2OCxFWFRFTlNJT046NjksQ09NUE9TSVRJT046NzAsREVQRU5ERU5DWTo3MSxMT0xMSVBPUDo3MixMSU5FOjczLERPVFRFRF9MSU5FOjc0LENBTExCQUNLOjc1LExJTks6NzYsTElOS19UQVJHRVQ6NzcsQ0xJQ0s6NzgsQ0FMTEJBQ0tfTkFNRTo3OSxDQUxMQkFDS19BUkdTOjgwLEhSRUY6ODEsQ1NTQ0xBU1M6ODIsY29tbWVudFRva2VuOjgzLHRleHRUb2tlbjo4NCxncmFwaENvZGVUb2tlbnM6ODUsdGV4dE5vVGFnc1Rva2VuOjg2LFRBR1NUQVJUOjg3LFRBR0VORDo4OCwiPT0iOjg5LCItLSI6OTAsUENUOjkxLERFRkFVTFQ6OTIsU1BBQ0U6OTMsTUlOVVM6OTQsa2V5d29yZHM6OTUsVU5JQ09ERV9URVhUOjk2LE5VTTo5NyxBTFBIQTo5OCxCUVVPVEVfU1RSOjk5LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw4OiJkaXJlY3Rpb25fdGIiLDk6ImRpcmVjdGlvbl9idCIsMTA6ImRpcmVjdGlvbl9ybCIsMTE6ImRpcmVjdGlvbl9sciIsMTY6Ik5FV0xJTkUiLDE3OiI6IiwxOToib3Blbl9kaXJlY3RpdmUiLDIwOiJ0eXBlX2RpcmVjdGl2ZSIsMjE6ImFyZ19kaXJlY3RpdmUiLDIyOiJjbG9zZV9kaXJlY3RpdmUiLDIzOiJDTEFTU19ESUFHUkFNIiwyNDoiRU9GIiwyNzoiU1FTIiwyODoiU1RSIiwyOToiU1FFIiwzNDoiR0VORVJJQ1RZUEUiLDM2OiJMQUJFTCIsNDQ6ImFjY190aXRsZSIsNDU6ImFjY190aXRsZV92YWx1ZSIsNDY6ImFjY19kZXNjciIsNDc6ImFjY19kZXNjcl92YWx1ZSIsNDg6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDUwOiJTVFJVQ1RfU1RBUlQiLDUyOiJTVFJVQ1RfU1RPUCIsNTM6Ik5BTUVTUEFDRSIsNTU6IlNUWUxFX1NFUEFSQVRPUiIsNTc6IkNMQVNTIiw1ODoiQU5OT1RBVElPTl9TVEFSVCIsNTk6IkFOTk9UQVRJT05fRU5EIiw2MDoiTUVNQkVSIiw2MToiU0VQQVJBVE9SIiw2MzoiTk9URV9GT1IiLDY1OiJOT1RFIiw2ODoiQUdHUkVHQVRJT04iLDY5OiJFWFRFTlNJT04iLDcwOiJDT01QT1NJVElPTiIsNzE6IkRFUEVOREVOQ1kiLDcyOiJMT0xMSVBPUCIsNzM6IkxJTkUiLDc0OiJET1RURURfTElORSIsNzU6IkNBTExCQUNLIiw3NjoiTElOSyIsNzc6IkxJTktfVEFSR0VUIiw3ODoiQ0xJQ0siLDc5OiJDQUxMQkFDS19OQU1FIiw4MDoiQ0FMTEJBQ0tfQVJHUyIsODE6IkhSRUYiLDgyOiJDU1NDTEFTUyIsODU6ImdyYXBoQ29kZVRva2VucyIsODc6IlRBR1NUQVJUIiw4ODoiVEFHRU5EIiw4OToiPT0iLDkwOiItLSIsOTE6IlBDVCIsOTI6IkRFRkFVTFQiLDkzOiJTUEFDRSIsOTQ6Ik1JTlVTIiw5NToia2V5d29yZHMiLDk2OiJVTklDT0RFX1RFWFQiLDk3OiJOVU0iLDk4OiJBTFBIQSIsOTk6IkJRVU9URV9TVFIifSxwcm9kdWN0aW9uc186WzAsWzMsMV0sWzMsMl0sWzMsMV0sWzcsMV0sWzcsMV0sWzcsMV0sWzcsMV0sWzQsMV0sWzUsNF0sWzUsNl0sWzEzLDFdLFsxNCwxXSxbMTgsMV0sWzE1LDFdLFsxMiw0XSxbNiwxXSxbNiwyXSxbNiwzXSxbMjYsM10sWzMwLDFdLFszMCwyXSxbMzIsMV0sWzMyLDFdLFszMiwyXSxbMzIsMl0sWzMyLDJdLFsyNSwxXSxbMjUsMl0sWzI1LDFdLFsyNSwxXSxbMjUsMV0sWzI1LDFdLFsyNSwxXSxbMjUsMV0sWzI1LDFdLFsyNSwxXSxbMjUsMl0sWzI1LDJdLFsyNSwxXSxbMzcsNF0sWzM3LDVdLFs0OSwyXSxbNTEsMV0sWzUxLDJdLFs1MSwzXSxbMzgsMV0sWzM4LDNdLFszOCw0XSxbMzgsNl0sWzU0LDJdLFs1NCwzXSxbNDAsNF0sWzU2LDFdLFs1NiwyXSxbMzksMV0sWzM5LDJdLFszOSwxXSxbMzksMV0sWzM1LDNdLFszNSw0XSxbMzUsNF0sWzM1LDVdLFs0MywzXSxbNDMsMl0sWzYyLDNdLFs2MiwyXSxbNjIsMl0sWzYyLDFdLFs2NiwxXSxbNjYsMV0sWzY2LDFdLFs2NiwxXSxbNjYsMV0sWzY3LDFdLFs2NywxXSxbNDEsM10sWzQxLDRdLFs0MSwzXSxbNDEsNF0sWzQxLDRdLFs0MSw1XSxbNDEsM10sWzQxLDRdLFs0MSw0XSxbNDEsNV0sWzQxLDRdLFs0MSw1XSxbNDEsNV0sWzQxLDZdLFs0MiwzXSxbODMsMV0sWzgzLDFdLFs4NCwxXSxbODQsMV0sWzg0LDFdLFs4NCwxXSxbODQsMV0sWzg0LDFdLFs4NCwxXSxbODYsMV0sWzg2LDFdLFs4NiwxXSxbODYsMV0sWzMxLDFdLFszMSwxXSxbMzEsMV0sWzMxLDFdLFszMywxXSxbNjQsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oJGUseWUsZm4sWXQsTWkscXQsemkpe3ZhciBTZT1xdC5sZW5ndGgtMTtzd2l0Y2goTWkpe2Nhc2UgNDpZdC5zZXREaXJlY3Rpb24oIlRCIik7YnJlYWs7Y2FzZSA1Oll0LnNldERpcmVjdGlvbigiQlQiKTticmVhaztjYXNlIDY6WXQuc2V0RGlyZWN0aW9uKCJSTCIpO2JyZWFrO2Nhc2UgNzpZdC5zZXREaXJlY3Rpb24oIkxSIik7YnJlYWs7Y2FzZSAxMTpZdC5wYXJzZURpcmVjdGl2ZSgiJSV7Iiwib3Blbl9kaXJlY3RpdmUiKTticmVhaztjYXNlIDEyOll0LnBhcnNlRGlyZWN0aXZlKHF0W1NlXSwidHlwZV9kaXJlY3RpdmUiKTticmVhaztjYXNlIDEzOnF0W1NlXT1xdFtTZV0udHJpbSgpLnJlcGxhY2UoLycvZywnIicpLFl0LnBhcnNlRGlyZWN0aXZlKHF0W1NlXSwiYXJnX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMTQ6WXQucGFyc2VEaXJlY3RpdmUoIn0lJSIsImNsb3NlX2RpcmVjdGl2ZSIsImNsYXNzIik7YnJlYWs7Y2FzZSAxOTp0aGlzLiQ9cXRbU2UtMV07YnJlYWs7Y2FzZSAyMDpjYXNlIDIyOmNhc2UgMjM6dGhpcy4kPXF0W1NlXTticmVhaztjYXNlIDIxOmNhc2UgMjQ6dGhpcy4kPXF0W1NlLTFdK3F0W1NlXTticmVhaztjYXNlIDI1OmNhc2UgMjY6dGhpcy4kPXF0W1NlLTFdKyJ+IitxdFtTZV0rIn4iO2JyZWFrO2Nhc2UgMjc6WXQuYWRkUmVsYXRpb24ocXRbU2VdKTticmVhaztjYXNlIDI4OnF0W1NlLTFdLnRpdGxlPVl0LmNsZWFudXBMYWJlbChxdFtTZV0pLFl0LmFkZFJlbGF0aW9uKHF0W1NlLTFdKTticmVhaztjYXNlIDM3OnRoaXMuJD1xdFtTZV0udHJpbSgpLFl0LnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAzODpjYXNlIDM5OnRoaXMuJD1xdFtTZV0udHJpbSgpLFl0LnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSA0MDpZdC5hZGRDbGFzc2VzVG9OYW1lc3BhY2UocXRbU2UtM10scXRbU2UtMV0pO2JyZWFrO2Nhc2UgNDE6WXQuYWRkQ2xhc3Nlc1RvTmFtZXNwYWNlKHF0W1NlLTRdLHF0W1NlLTFdKTticmVhaztjYXNlIDQyOnRoaXMuJD1xdFtTZV0sWXQuYWRkTmFtZXNwYWNlKHF0W1NlXSk7YnJlYWs7Y2FzZSA0Mzp0aGlzLiQ9W3F0W1NlXV07YnJlYWs7Y2FzZSA0NDp0aGlzLiQ9W3F0W1NlLTFdXTticmVhaztjYXNlIDQ1OnF0W1NlXS51bnNoaWZ0KHF0W1NlLTJdKSx0aGlzLiQ9cXRbU2VdO2JyZWFrO2Nhc2UgNDc6WXQuc2V0Q3NzQ2xhc3MocXRbU2UtMl0scXRbU2VdKTticmVhaztjYXNlIDQ4Oll0LmFkZE1lbWJlcnMocXRbU2UtM10scXRbU2UtMV0pO2JyZWFrO2Nhc2UgNDk6WXQuc2V0Q3NzQ2xhc3MocXRbU2UtNV0scXRbU2UtM10pLFl0LmFkZE1lbWJlcnMocXRbU2UtNV0scXRbU2UtMV0pO2JyZWFrO2Nhc2UgNTA6dGhpcy4kPXF0W1NlXSxZdC5hZGRDbGFzcyhxdFtTZV0pO2JyZWFrO2Nhc2UgNTE6dGhpcy4kPXF0W1NlLTFdLFl0LmFkZENsYXNzKHF0W1NlLTFdKSxZdC5zZXRDbGFzc0xhYmVsKHF0W1NlLTFdLHF0W1NlXSk7YnJlYWs7Y2FzZSA1MjpZdC5hZGRBbm5vdGF0aW9uKHF0W1NlXSxxdFtTZS0yXSk7YnJlYWs7Y2FzZSA1Mzp0aGlzLiQ9W3F0W1NlXV07YnJlYWs7Y2FzZSA1NDpxdFtTZV0ucHVzaChxdFtTZS0xXSksdGhpcy4kPXF0W1NlXTticmVhaztjYXNlIDU1OmJyZWFrO2Nhc2UgNTY6WXQuYWRkTWVtYmVyKHF0W1NlLTFdLFl0LmNsZWFudXBMYWJlbChxdFtTZV0pKTticmVhaztjYXNlIDU3OmJyZWFrO2Nhc2UgNTg6YnJlYWs7Y2FzZSA1OTp0aGlzLiQ9e2lkMTpxdFtTZS0yXSxpZDI6cXRbU2VdLHJlbGF0aW9uOnF0W1NlLTFdLHJlbGF0aW9uVGl0bGUxOiJub25lIixyZWxhdGlvblRpdGxlMjoibm9uZSJ9O2JyZWFrO2Nhc2UgNjA6dGhpcy4kPXtpZDE6cXRbU2UtM10saWQyOnF0W1NlXSxyZWxhdGlvbjpxdFtTZS0xXSxyZWxhdGlvblRpdGxlMTpxdFtTZS0yXSxyZWxhdGlvblRpdGxlMjoibm9uZSJ9O2JyZWFrO2Nhc2UgNjE6dGhpcy4kPXtpZDE6cXRbU2UtM10saWQyOnF0W1NlXSxyZWxhdGlvbjpxdFtTZS0yXSxyZWxhdGlvblRpdGxlMToibm9uZSIscmVsYXRpb25UaXRsZTI6cXRbU2UtMV19O2JyZWFrO2Nhc2UgNjI6dGhpcy4kPXtpZDE6cXRbU2UtNF0saWQyOnF0W1NlXSxyZWxhdGlvbjpxdFtTZS0yXSxyZWxhdGlvblRpdGxlMTpxdFtTZS0zXSxyZWxhdGlvblRpdGxlMjpxdFtTZS0xXX07YnJlYWs7Y2FzZSA2MzpZdC5hZGROb3RlKHF0W1NlXSxxdFtTZS0xXSk7YnJlYWs7Y2FzZSA2NDpZdC5hZGROb3RlKHF0W1NlXSk7YnJlYWs7Y2FzZSA2NTp0aGlzLiQ9e3R5cGUxOnF0W1NlLTJdLHR5cGUyOnF0W1NlXSxsaW5lVHlwZTpxdFtTZS0xXX07YnJlYWs7Y2FzZSA2Njp0aGlzLiQ9e3R5cGUxOiJub25lIix0eXBlMjpxdFtTZV0sbGluZVR5cGU6cXRbU2UtMV19O2JyZWFrO2Nhc2UgNjc6dGhpcy4kPXt0eXBlMTpxdFtTZS0xXSx0eXBlMjoibm9uZSIsbGluZVR5cGU6cXRbU2VdfTticmVhaztjYXNlIDY4OnRoaXMuJD17dHlwZTE6Im5vbmUiLHR5cGUyOiJub25lIixsaW5lVHlwZTpxdFtTZV19O2JyZWFrO2Nhc2UgNjk6dGhpcy4kPVl0LnJlbGF0aW9uVHlwZS5BR0dSRUdBVElPTjticmVhaztjYXNlIDcwOnRoaXMuJD1ZdC5yZWxhdGlvblR5cGUuRVhURU5TSU9OO2JyZWFrO2Nhc2UgNzE6dGhpcy4kPVl0LnJlbGF0aW9uVHlwZS5DT01QT1NJVElPTjticmVhaztjYXNlIDcyOnRoaXMuJD1ZdC5yZWxhdGlvblR5cGUuREVQRU5ERU5DWTticmVhaztjYXNlIDczOnRoaXMuJD1ZdC5yZWxhdGlvblR5cGUuTE9MTElQT1A7YnJlYWs7Y2FzZSA3NDp0aGlzLiQ9WXQubGluZVR5cGUuTElORTticmVhaztjYXNlIDc1OnRoaXMuJD1ZdC5saW5lVHlwZS5ET1RURURfTElORTticmVhaztjYXNlIDc2OmNhc2UgODI6dGhpcy4kPXF0W1NlLTJdLFl0LnNldENsaWNrRXZlbnQocXRbU2UtMV0scXRbU2VdKTticmVhaztjYXNlIDc3OmNhc2UgODM6dGhpcy4kPXF0W1NlLTNdLFl0LnNldENsaWNrRXZlbnQocXRbU2UtMl0scXRbU2UtMV0pLFl0LnNldFRvb2x0aXAocXRbU2UtMl0scXRbU2VdKTticmVhaztjYXNlIDc4OnRoaXMuJD1xdFtTZS0yXSxZdC5zZXRMaW5rKHF0W1NlLTFdLHF0W1NlXSk7YnJlYWs7Y2FzZSA3OTp0aGlzLiQ9cXRbU2UtM10sWXQuc2V0TGluayhxdFtTZS0yXSxxdFtTZS0xXSxxdFtTZV0pO2JyZWFrO2Nhc2UgODA6dGhpcy4kPXF0W1NlLTNdLFl0LnNldExpbmsocXRbU2UtMl0scXRbU2UtMV0pLFl0LnNldFRvb2x0aXAocXRbU2UtMl0scXRbU2VdKTticmVhaztjYXNlIDgxOnRoaXMuJD1xdFtTZS00XSxZdC5zZXRMaW5rKHF0W1NlLTNdLHF0W1NlLTJdLHF0W1NlXSksWXQuc2V0VG9vbHRpcChxdFtTZS0zXSxxdFtTZS0xXSk7YnJlYWs7Y2FzZSA4NDp0aGlzLiQ9cXRbU2UtM10sWXQuc2V0Q2xpY2tFdmVudChxdFtTZS0yXSxxdFtTZS0xXSxxdFtTZV0pO2JyZWFrO2Nhc2UgODU6dGhpcy4kPXF0W1NlLTRdLFl0LnNldENsaWNrRXZlbnQocXRbU2UtM10scXRbU2UtMl0scXRbU2UtMV0pLFl0LnNldFRvb2x0aXAocXRbU2UtM10scXRbU2VdKTticmVhaztjYXNlIDg2OnRoaXMuJD1xdFtTZS0zXSxZdC5zZXRMaW5rKHF0W1NlLTJdLHF0W1NlXSk7YnJlYWs7Y2FzZSA4Nzp0aGlzLiQ9cXRbU2UtNF0sWXQuc2V0TGluayhxdFtTZS0zXSxxdFtTZS0xXSxxdFtTZV0pO2JyZWFrO2Nhc2UgODg6dGhpcy4kPXF0W1NlLTRdLFl0LnNldExpbmsocXRbU2UtM10scXRbU2UtMV0pLFl0LnNldFRvb2x0aXAocXRbU2UtM10scXRbU2VdKTticmVhaztjYXNlIDg5OnRoaXMuJD1xdFtTZS01XSxZdC5zZXRMaW5rKHF0W1NlLTRdLHF0W1NlLTJdLHF0W1NlXSksWXQuc2V0VG9vbHRpcChxdFtTZS00XSxxdFtTZS0xXSk7YnJlYWs7Y2FzZSA5MDpZdC5zZXRDc3NDbGFzcyhxdFtTZS0xXSxxdFtTZV0pO2JyZWFrfX0sdGFibGU6W3szOjEsNDoyLDU6Myw2OjQsNzoxOCw4OmEsOTpmLDEwOnAsMTE6diwxMjo1LDEzOjYsMTk6bSwyMzpiLDI1OjcsMzE6MzgsMzI6MjIsMzM6MzksMzU6MTAsMzc6MTEsMzg6MTIsMzk6MTMsNDA6MTQsNDE6MTUsNDI6MTYsNDM6MTcsNDQ6RSw0NjpDLDQ4OkEsNDk6MjMsNTM6UCw1NDoyNCw1NzpGLDU4OmosNjA6Uiw2MTpILDYzOlksNjU6cnQsNzU6Siw3NjppdCw3ODpmdCw4MjpUdCw5NDprdCw5NjptdCw5NzpjdCw5ODp5dCw5OTpzdH0sezE6WzNdfSx7MTpbMiwxXX0sezM6NDcsNDoyLDU6Myw2OjQsNzoxOCw4OmEsOTpmLDEwOnAsMTE6diwxMjo1LDEzOjYsMTk6bSwyMzpiLDI1OjcsMzE6MzgsMzI6MjIsMzM6MzksMzU6MTAsMzc6MTEsMzg6MTIsMzk6MTMsNDA6MTQsNDE6MTUsNDI6MTYsNDM6MTcsNDQ6RSw0NjpDLDQ4OkEsNDk6MjMsNTM6UCw1NDoyNCw1NzpGLDU4OmosNjA6Uiw2MTpILDYzOlksNjU6cnQsNzU6Siw3NjppdCw3ODpmdCw4MjpUdCw5NDprdCw5NjptdCw5NzpjdCw5ODp5dCw5OTpzdH0sezE6WzIsM119LHsxOlsyLDhdfSx7MTQ6NDgsMjA6WzEsNDldfSxpKHh0LFsyLDE2XSx7MTY6WzEsNTBdfSksezE2OlsxLDUxXX0sezIwOlsyLDExXX0saShodCxbMiwyN10sezM2OlsxLDUyXX0pLGkoaHQsWzIsMjldKSxpKGh0LFsyLDMwXSksaShodCxbMiwzMV0pLGkoaHQsWzIsMzJdKSxpKGh0LFsyLDMzXSksaShodCxbMiwzNF0pLGkoaHQsWzIsMzVdKSxpKGh0LFsyLDM2XSksezQ1OlsxLDUzXX0sezQ3OlsxLDU0XX0saShodCxbMiwzOV0pLGkoaHQsWzIsNTVdLHs2Mjo1NSw2Njo1OCw2Nzo1OSwyODpbMSw1Nl0sMzY6WzEsNTddLDY4OmR0LDY5OkN0LDcwOnR0LDcxOlB0LDcyOnB0LDczOkZ0LDc0Olh9KSx7NTA6WzEsNjddfSxpKFJ0LFsyLDQ2XSx7NTA6WzEsNjldLDU1OlsxLDY4XX0pLGkoaHQsWzIsNTddKSxpKGh0LFsyLDU4XSksezMxOjcwLDk0Omt0LDk2Om10LDk3OmN0LDk4Onl0fSx7MzE6MzgsMzI6NzEsMzM6MzksOTQ6a3QsOTY6bXQsOTc6Y3QsOTg6eXQsOTk6c3R9LHszMTozOCwzMjo3MiwzMzozOSw5NDprdCw5NjptdCw5NzpjdCw5ODp5dCw5OTpzdH0sezMxOjM4LDMyOjczLDMzOjM5LDk0Omt0LDk2Om10LDk3OmN0LDk4Onl0LDk5OnN0fSx7Mjg6WzEsNzRdfSx7MzE6MzgsMzI6NzUsMzM6MzksOTQ6a3QsOTY6bXQsOTc6Y3QsOTg6eXQsOTk6c3R9LHsyODpCdCw2NDo3Nn0saShodCxbMiw0XSksaShodCxbMiw1XSksaShodCxbMiw2XSksaShodCxbMiw3XSksaSh2dCxbMiwyMl0sezMxOjM4LDMzOjM5LDMyOjc4LDM0OlsxLDc5XSw5NDprdCw5NjptdCw5NzpjdCw5ODp5dCw5OTpzdH0pLGkodnQsWzIsMjNdLHszNDpbMSw4MF19KSx7MzA6ODEsMzE6ODIsOTQ6a3QsOTY6bXQsOTc6Y3QsOTg6eXR9LHszMTozOCwzMjo4MywzMzozOSw5NDprdCw5NjptdCw5NzpjdCw5ODp5dCw5OTpzdH0saShPdCxbMiwxMDRdKSxpKE90LFsyLDEwNV0pLGkoT3QsWzIsMTA2XSksaShPdCxbMiwxMDddKSxpKFsxLDE2LDI0LDI3LDI4LDM0LDM2LDUwLDUyLDU1LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc5LDgxXSxbMiwxMDhdKSx7MTpbMiwyXX0sezE1Ojg0LDE3OlsxLDg1XSwyMjpWdH0saShbMTcsMjJdLFsyLDEyXSksaSh4dCxbMiwxN10sezI1OjcsMzU6MTAsMzc6MTEsMzg6MTIsMzk6MTMsNDA6MTQsNDE6MTUsNDI6MTYsNDM6MTcsNzoxOCwzMjoyMiw0OToyMyw1NDoyNCwzMTozOCwzMzozOSw2Ojg3LDg6YSw5OmYsMTA6cCwxMTp2LDQ0OkUsNDY6Qyw0ODpBLDUzOlAsNTc6Riw1ODpqLDYwOlIsNjE6SCw2MzpZLDY1OnJ0LDc1OkosNzY6aXQsNzg6ZnQsODI6VHQsOTQ6a3QsOTY6bXQsOTc6Y3QsOTg6eXQsOTk6c3R9KSx7Njo4OCw3OjE4LDg6YSw5OmYsMTA6cCwxMTp2LDI1OjcsMzE6MzgsMzI6MjIsMzM6MzksMzU6MTAsMzc6MTEsMzg6MTIsMzk6MTMsNDA6MTQsNDE6MTUsNDI6MTYsNDM6MTcsNDQ6RSw0NjpDLDQ4OkEsNDk6MjMsNTM6UCw1NDoyNCw1NzpGLDU4OmosNjA6Uiw2MTpILDYzOlksNjU6cnQsNzU6Siw3NjppdCw3ODpmdCw4MjpUdCw5NDprdCw5NjptdCw5NzpjdCw5ODp5dCw5OTpzdH0saShodCxbMiwyOF0pLGkoaHQsWzIsMzddKSxpKGh0LFsyLDM4XSksezI4OlsxLDkwXSwzMTozOCwzMjo4OSwzMzozOSw5NDprdCw5NjptdCw5NzpjdCw5ODp5dCw5OTpzdH0sezYyOjkxLDY2OjU4LDY3OjU5LDY4OmR0LDY5OkN0LDcwOnR0LDcxOlB0LDcyOnB0LDczOkZ0LDc0Olh9LGkoaHQsWzIsNTZdKSx7Njc6OTIsNzM6RnQsNzQ6WH0saShxZSxbMiw2OF0sezY2OjkzLDY4OmR0LDY5OkN0LDcwOnR0LDcxOlB0LDcyOnB0fSksaShfbixbMiw2OV0pLGkoX24sWzIsNzBdKSxpKF9uLFsyLDcxXSksaShfbixbMiw3Ml0pLGkoX24sWzIsNzNdKSxpKFRlLFsyLDc0XSksaShUZSxbMiw3NV0pLHsxNjpbMSw5NV0sMzg6OTYsNTE6OTQsNTQ6MjQsNTc6Rn0sezMxOjk3LDk0Omt0LDk2Om10LDk3OmN0LDk4Onl0fSx7NTY6OTgsNjA6V259LHs1OTpbMSwxMDBdfSx7Mjg6WzEsMTAxXX0sezI4OlsxLDEwMl19LHs3OTpbMSwxMDNdLDgxOlsxLDEwNF19LHszMToxMDUsOTQ6a3QsOTY6bXQsOTc6Y3QsOTg6eXR9LHsyODpCdCw2NDoxMDZ9LGkoaHQsWzIsNjRdKSxpKGh0LFsyLDEwOV0pLGkodnQsWzIsMjRdKSxpKHZ0LFsyLDI1XSksaSh2dCxbMiwyNl0pLHs1MDpbMiw0Ml19LHszMDoxMDcsMzE6ODIsNTA6WzIsMjBdLDk0Omt0LDk2Om10LDk3OmN0LDk4Onl0fSxpKEFlLFsyLDUwXSx7MjY6MTA4LDI3OlsxLDEwOV19KSx7MTY6WzEsMTEwXX0sezE4OjExMSwyMTpbMSwxMTJdfSx7MTY6WzIsMTRdfSxpKHh0LFsyLDE4XSksezI0OlsxLDExM119LGkobmUsWzIsNTldKSx7MzE6MzgsMzI6MTE0LDMzOjM5LDk0Omt0LDk2Om10LDk3OmN0LDk4Onl0LDk5OnN0fSx7Mjg6WzEsMTE2XSwzMTozOCwzMjoxMTUsMzM6MzksOTQ6a3QsOTY6bXQsOTc6Y3QsOTg6eXQsOTk6c3R9LGkocWUsWzIsNjddLHs2NjoxMTcsNjg6ZHQsNjk6Q3QsNzA6dHQsNzE6UHQsNzI6cHR9KSxpKHFlLFsyLDY2XSksezUyOlsxLDExOF19LHszODo5Niw1MToxMTksNTQ6MjQsNTc6Rn0sezE2OlsxLDEyMF0sNTI6WzIsNDNdfSxpKFJ0LFsyLDQ3XSx7NTA6WzEsMTIxXX0pLHs1MjpbMSwxMjJdfSx7NTI6WzIsNTNdLDU2OjEyMyw2MDpXbn0sezMxOjM4LDMyOjEyNCwzMzozOSw5NDprdCw5NjptdCw5NzpjdCw5ODp5dCw5OTpzdH0saShodCxbMiw3Nl0sezI4OlsxLDEyNV19KSxpKGh0LFsyLDc4XSx7Mjg6WzEsMTI3XSw3NzpbMSwxMjZdfSksaShodCxbMiw4Ml0sezI4OlsxLDEyOF0sODA6WzEsMTI5XX0pLHsyODpbMSwxMzBdfSxpKGh0LFsyLDkwXSksaShodCxbMiw2M10pLHs1MDpbMiwyMV19LGkoQWUsWzIsNTFdKSx7Mjg6WzEsMTMxXX0saShrZSxbMiw5XSksezE1OjEzMiwyMjpWdH0sezIyOlsyLDEzXX0sezE6WzIsMTVdfSxpKG5lLFsyLDYxXSksaShuZSxbMiw2MF0pLHszMTozOCwzMjoxMzMsMzM6MzksOTQ6a3QsOTY6bXQsOTc6Y3QsOTg6eXQsOTk6c3R9LGkocWUsWzIsNjVdKSxpKGh0LFsyLDQwXSksezUyOlsxLDEzNF19LHszODo5Niw1MToxMzUsNTI6WzIsNDRdLDU0OjI0LDU3OkZ9LHs1NjoxMzYsNjA6V259LGkoUnQsWzIsNDhdKSx7NTI6WzIsNTRdfSxpKGh0LFsyLDUyXSksaShodCxbMiw3N10pLGkoaHQsWzIsNzldKSxpKGh0LFsyLDgwXSx7Nzc6WzEsMTM3XX0pLGkoaHQsWzIsODNdKSxpKGh0LFsyLDg0XSx7Mjg6WzEsMTM4XX0pLGkoaHQsWzIsODZdLHsyODpbMSwxNDBdLDc3OlsxLDEzOV19KSx7Mjk6WzEsMTQxXX0sezE2OlsxLDE0Ml19LGkobmUsWzIsNjJdKSxpKGh0LFsyLDQxXSksezUyOlsyLDQ1XX0sezUyOlsxLDE0M119LGkoaHQsWzIsODFdKSxpKGh0LFsyLDg1XSksaShodCxbMiw4N10pLGkoaHQsWzIsODhdLHs3NzpbMSwxNDRdfSksaShBZSxbMiwxOV0pLGkoa2UsWzIsMTBdKSxpKFJ0LFsyLDQ5XSksaShodCxbMiw4OV0pXSxkZWZhdWx0QWN0aW9uczp7MjpbMiwxXSw0OlsyLDNdLDU6WzIsOF0sOTpbMiwxMV0sNDc6WzIsMl0sODE6WzIsNDJdLDg2OlsyLDE0XSwxMDc6WzIsMjFdLDExMjpbMiwxM10sMTEzOlsyLDE1XSwxMjM6WzIsNTRdLDEzNTpbMiw0NV19LHBhcnNlRXJyb3I6ZnVuY3Rpb24oJGUseWUpe2lmKHllLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoJGUpO2Vsc2V7dmFyIGZuPW5ldyBFcnJvcigkZSk7dGhyb3cgZm4uaGFzaD15ZSxmbn19LHBhcnNlOmZ1bmN0aW9uKCRlKXt2YXIgeWU9dGhpcyxmbj1bMF0sWXQ9W10sTWk9W251bGxdLHF0PVtdLHppPXRoaXMudGFibGUsU2U9IiIsa2k9MCxSaT0wLHBpPTIsYmk9MSxkbj1xdC5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxObj1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLFdyPXt5eTp7fX07Zm9yKHZhciBMaSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LExpKSYmKFdyLnl5W0xpXT10aGlzLnl5W0xpXSk7Tm4uc2V0SW5wdXQoJGUsV3IueXkpLFdyLnl5LmxleGVyPU5uLFdyLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBObi55eWxsb2M+InUiJiYoTm4ueXlsbG9jPXt9KTt2YXIgaXM9Tm4ueXlsbG9jO3F0LnB1c2goaXMpO3ZhciBUcz1Obi5vcHRpb25zJiZObi5vcHRpb25zLnJhbmdlczt0eXBlb2YgV3IueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9V3IueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gQWEoKXt2YXIgTWM7cmV0dXJuIE1jPVl0LnBvcCgpfHxObi5sZXgoKXx8YmksdHlwZW9mIE1jIT0ibnVtYmVyIiYmKE1jIGluc3RhbmNlb2YgQXJyYXkmJihZdD1NYyxNYz1ZdC5wb3AoKSksTWM9eWUuc3ltYm9sc19bTWNdfHxNYyksTWN9Zm9yKHZhciBYaSxHYSxfcixxcixPaT17fSxncixKcyxWbixYYzs7KXtpZihHYT1mbltmbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tHYV0/X3I9dGhpcy5kZWZhdWx0QWN0aW9uc1tHYV06KChYaT09PW51bGx8fHR5cGVvZiBYaT4idSIpJiYoWGk9QWEoKSksX3I9emlbR2FdJiZ6aVtHYV1bWGldKSx0eXBlb2YgX3I+InUifHwhX3IubGVuZ3RofHwhX3JbMF0pe3ZhciBFcj0iIjtYYz1bXTtmb3IoZ3IgaW4gemlbR2FdKXRoaXMudGVybWluYWxzX1tncl0mJmdyPnBpJiZYYy5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bZ3JdKyInIik7Tm4uc2hvd1Bvc2l0aW9uP0VyPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGtpKzEpK2A6CmArTm4uc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtYYy5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW1hpXXx8WGkpKyInIjpFcj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhraSsxKSsiOiBVbmV4cGVjdGVkICIrKFhpPT1iaT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tYaV18fFhpKSsiJyIpLHRoaXMucGFyc2VFcnJvcihFcix7dGV4dDpObi5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bWGldfHxYaSxsaW5lOk5uLnl5bGluZW5vLGxvYzppcyxleHBlY3RlZDpYY30pfWlmKF9yWzBdaW5zdGFuY2VvZiBBcnJheSYmX3IubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitHYSsiLCB0b2tlbjogIitYaSk7c3dpdGNoKF9yWzBdKXtjYXNlIDE6Zm4ucHVzaChYaSksTWkucHVzaChObi55eXRleHQpLHF0LnB1c2goTm4ueXlsbG9jKSxmbi5wdXNoKF9yWzFdKSxYaT1udWxsLFJpPU5uLnl5bGVuZyxTZT1Obi55eXRleHQsa2k9Tm4ueXlsaW5lbm8saXM9Tm4ueXlsbG9jO2JyZWFrO2Nhc2UgMjppZihKcz10aGlzLnByb2R1Y3Rpb25zX1tfclsxXV1bMV0sT2kuJD1NaVtNaS5sZW5ndGgtSnNdLE9pLl8kPXtmaXJzdF9saW5lOnF0W3F0Lmxlbmd0aC0oSnN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpxdFtxdC5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpxdFtxdC5sZW5ndGgtKEpzfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnF0W3F0Lmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sVHMmJihPaS5fJC5yYW5nZT1bcXRbcXQubGVuZ3RoLShKc3x8MSldLnJhbmdlWzBdLHF0W3F0Lmxlbmd0aC0xXS5yYW5nZVsxXV0pLHFyPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShPaSxbU2UsUmksa2ksV3IueXksX3JbMV0sTWkscXRdLmNvbmNhdChkbikpLHR5cGVvZiBxcjwidSIpcmV0dXJuIHFyO0pzJiYoZm49Zm4uc2xpY2UoMCwtMSpKcyoyKSxNaT1NaS5zbGljZSgwLC0xKkpzKSxxdD1xdC5zbGljZSgwLC0xKkpzKSksZm4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tfclsxXV1bMF0pLE1pLnB1c2goT2kuJCkscXQucHVzaChPaS5fJCksVm49emlbZm5bZm4ubGVuZ3RoLTJdXVtmbltmbi5sZW5ndGgtMV1dLGZuLnB1c2goVm4pO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxFZT1mdW5jdGlvbigpe3ZhciBDZT17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih5ZSxmbil7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih5ZSxmbik7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoeWUpfSxzZXRJbnB1dDpmdW5jdGlvbigkZSx5ZSl7cmV0dXJuIHRoaXMueXk9eWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PSRlLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciAkZT10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9JGUsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPSRlLHRoaXMubWF0Y2hlZCs9JGU7dmFyIHllPSRlLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4geWU/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLCRlfSx1bnB1dDpmdW5jdGlvbigkZSl7dmFyIHllPSRlLmxlbmd0aCxmbj0kZS5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PSRlK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC15ZSksdGhpcy5vZmZzZXQtPXllO3ZhciBZdD10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxmbi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPWZuLmxlbmd0aC0xKTt2YXIgTWk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmZuPyhmbi5sZW5ndGg9PT1ZdC5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK1l0W1l0Lmxlbmd0aC1mbi5sZW5ndGhdLmxlbmd0aC1mblswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLXllfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W01pWzBdLE1pWzBdK3RoaXMueXlsZW5nLXllXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24oJGUpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSgkZSkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgJGU9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybigkZS5sZW5ndGg+MjA/Ii4uLiI6IiIpKyRlLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyICRlPXRoaXMubWF0Y2g7cmV0dXJuICRlLmxlbmd0aDwyMCYmKCRlKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC0kZS5sZW5ndGgpKSwoJGUuc3Vic3RyKDAsMjApKygkZS5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyICRlPXRoaXMucGFzdElucHV0KCkseWU9bmV3IEFycmF5KCRlLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuICRlK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCt5ZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oJGUseWUpe3ZhciBmbixZdCxNaTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoTWk9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoTWkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksWXQ9JGVbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLFl0JiYodGhpcy55eWxpbmVubys9WXQubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46WXQ/WXRbWXQubGVuZ3RoLTFdLmxlbmd0aC1ZdFtZdC5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbiskZVswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz0kZVswXSx0aGlzLm1hdGNoKz0kZVswXSx0aGlzLm1hdGNoZXM9JGUsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoJGVbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPSRlWzBdLGZuPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLHllLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLGZuKXJldHVybiBmbjtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgcXQgaW4gTWkpdGhpc1txdF09TWlbcXRdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyICRlLHllLGZuLFl0O3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIE1pPXRoaXMuX2N1cnJlbnRSdWxlcygpLHF0PTA7cXQ8TWkubGVuZ3RoO3F0KyspaWYoZm49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tNaVtxdF1dKSxmbiYmKCF5ZXx8Zm5bMF0ubGVuZ3RoPnllWzBdLmxlbmd0aCkpe2lmKHllPWZuLFl0PXF0LHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKCRlPXRoaXMudGVzdF9tYXRjaChmbixNaVtxdF0pLCRlIT09ITEpcmV0dXJuICRlO2lmKHRoaXMuX2JhY2t0cmFjayl7eWU9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4geWU/KCRlPXRoaXMudGVzdF9tYXRjaCh5ZSxNaVtZdF0pLCRlIT09ITE/JGU6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciB5ZT10aGlzLm5leHQoKTtyZXR1cm4geWV8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHllKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goeWUpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3ZhciB5ZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiB5ZT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHllKXtyZXR1cm4geWU9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh5ZXx8MCkseWU+PTA/dGhpcy5jb25kaXRpb25TdGFja1t5ZV06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24oeWUpe3RoaXMuYmVnaW4oeWUpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7fSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHllLGZuLFl0LE1pKXtzd2l0Y2goWXQpe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigib3Blbl9kaXJlY3RpdmUiKSwxOTtjYXNlIDE6cmV0dXJuIDg7Y2FzZSAyOnJldHVybiA5O2Nhc2UgMzpyZXR1cm4gMTA7Y2FzZSA0OnJldHVybiAxMTtjYXNlIDU6cmV0dXJuIHRoaXMuYmVnaW4oInR5cGVfZGlyZWN0aXZlIiksMjA7Y2FzZSA2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiYXJnX2RpcmVjdGl2ZSIpLDE3O2Nhc2UgNzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSwyMjtjYXNlIDg6cmV0dXJuIDIxO2Nhc2UgOTpicmVhaztjYXNlIDEwOmJyZWFrO2Nhc2UgMTE6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDQ0O2Nhc2UgMTI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDEzOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSw0NjtjYXNlIDE0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7Y2FzZSAxNTp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAxNjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxNzpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSAxODpyZXR1cm4gMTY7Y2FzZSAxOTpicmVhaztjYXNlIDIwOnJldHVybiAyMztjYXNlIDIxOnJldHVybiAyMztjYXNlIDIyOnJldHVybiJFREdFX1NUQVRFIjtjYXNlIDIzOnRoaXMuYmVnaW4oImNhbGxiYWNrX25hbWUiKTticmVhaztjYXNlIDI0OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI1OnRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJjYWxsYmFja19hcmdzIik7YnJlYWs7Y2FzZSAyNjpyZXR1cm4gNzk7Y2FzZSAyNzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyODpyZXR1cm4gODA7Y2FzZSAyOTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAzMDpyZXR1cm4iU1RSIjtjYXNlIDMxOnRoaXMuYmVnaW4oInN0cmluZyIpO2JyZWFrO2Nhc2UgMzI6cmV0dXJuIHRoaXMuYmVnaW4oIm5hbWVzcGFjZSIpLDUzO2Nhc2UgMzM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNjtjYXNlIDM0OmJyZWFrO2Nhc2UgMzU6cmV0dXJuIHRoaXMuYmVnaW4oIm5hbWVzcGFjZS1ib2R5IiksNTA7Y2FzZSAzNjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDUyO2Nhc2UgMzc6cmV0dXJuIkVPRl9JTl9TVFJVQ1QiO2Nhc2UgMzg6cmV0dXJuIDE2O2Nhc2UgMzk6YnJlYWs7Y2FzZSA0MDpyZXR1cm4iRURHRV9TVEFURSI7Y2FzZSA0MTpyZXR1cm4gdGhpcy5iZWdpbigiY2xhc3MiKSw1NztjYXNlIDQyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTY7Y2FzZSA0MzpicmVhaztjYXNlIDQ0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDUyO2Nhc2UgNDU6cmV0dXJuIHRoaXMuYmVnaW4oImNsYXNzLWJvZHkiKSw1MDtjYXNlIDQ2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNTI7Y2FzZSA0NzpyZXR1cm4iRU9GX0lOX1NUUlVDVCI7Y2FzZSA0ODpyZXR1cm4iRURHRV9TVEFURSI7Y2FzZSA0OTpyZXR1cm4iT1BFTl9JTl9TVFJVQ1QiO2Nhc2UgNTA6YnJlYWs7Y2FzZSA1MTpyZXR1cm4iTUVNQkVSIjtjYXNlIDUyOnJldHVybiA4MjtjYXNlIDUzOnJldHVybiA3NTtjYXNlIDU0OnJldHVybiA3NjtjYXNlIDU1OnJldHVybiA3ODtjYXNlIDU2OnJldHVybiA2MztjYXNlIDU3OnJldHVybiA2NTtjYXNlIDU4OnJldHVybiA1ODtjYXNlIDU5OnJldHVybiA1OTtjYXNlIDYwOnJldHVybiA4MTtjYXNlIDYxOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDYyOnJldHVybiJHRU5FUklDVFlQRSI7Y2FzZSA2Mzp0aGlzLmJlZ2luKCJnZW5lcmljIik7YnJlYWs7Y2FzZSA2NDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA2NTpyZXR1cm4iQlFVT1RFX1NUUiI7Y2FzZSA2Njp0aGlzLmJlZ2luKCJicXN0cmluZyIpO2JyZWFrO2Nhc2UgNjc6cmV0dXJuIDc3O2Nhc2UgNjg6cmV0dXJuIDc3O2Nhc2UgNjk6cmV0dXJuIDc3O2Nhc2UgNzA6cmV0dXJuIDc3O2Nhc2UgNzE6cmV0dXJuIDY5O2Nhc2UgNzI6cmV0dXJuIDY5O2Nhc2UgNzM6cmV0dXJuIDcxO2Nhc2UgNzQ6cmV0dXJuIDcxO2Nhc2UgNzU6cmV0dXJuIDcwO2Nhc2UgNzY6cmV0dXJuIDY4O2Nhc2UgNzc6cmV0dXJuIDcyO2Nhc2UgNzg6cmV0dXJuIDczO2Nhc2UgNzk6cmV0dXJuIDc0O2Nhc2UgODA6cmV0dXJuIDM2O2Nhc2UgODE6cmV0dXJuIDU1O2Nhc2UgODI6cmV0dXJuIDk0O2Nhc2UgODM6cmV0dXJuIkRPVCI7Y2FzZSA4NDpyZXR1cm4iUExVUyI7Y2FzZSA4NTpyZXR1cm4gOTE7Y2FzZSA4NjpyZXR1cm4iRVFVQUxTIjtjYXNlIDg3OnJldHVybiJFUVVBTFMiO2Nhc2UgODg6cmV0dXJuIDk4O2Nhc2UgODk6cmV0dXJuIDI3O2Nhc2UgOTA6cmV0dXJuIDI5O2Nhc2UgOTE6cmV0dXJuIlBVTkNUVUFUSU9OIjtjYXNlIDkyOnJldHVybiA5NztjYXNlIDkzOnJldHVybiA5NjtjYXNlIDk0OnJldHVybiA5MztjYXNlIDk1OnJldHVybiAyNH19LHJ1bGVzOlsvXig/OiUlXHspLywvXig/Oi4qZGlyZWN0aW9uXHMrVEJbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrQlRbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrUkxbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrTFJbXlxuXSopLywvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS8sL14oPzo6KS8sL14oPzpcfSUlKS8sL14oPzooKD86KD8hXH0lJSkufFxuKSopKS8sL14oPzolJSg/IVx7KSpbXlxuXSooXHI/XG4/KSspLywvXig/OiUlW15cbl0qKFxyP1xuKSopLywvXig/OmFjY1RpdGxlXHMqOlxzKikvLC9eKD86KD8hXG58fCkqW15cbl0qKS8sL14oPzphY2NEZXNjclxzKjpccyopLywvXig/Oig/IVxufHwpKlteXG5dKikvLC9eKD86YWNjRGVzY3Jccypce1xzKikvLC9eKD86W1x9XSkvLC9eKD86W15cfV0qKS8sL14oPzpccyooXHI/XG4pKykvLC9eKD86XHMrKS8sL14oPzpjbGFzc0RpYWdyYW0tdjJcYikvLC9eKD86Y2xhc3NEaWFncmFtXGIpLywvXig/OlxbXCpcXSkvLC9eKD86Y2FsbFtcc10rKS8sL14oPzpcKFtcc10qXCkpLywvXig/OlwoKS8sL14oPzpbXihdKikvLC9eKD86XCkpLywvXig/OlteKV0qKS8sL14oPzpbIl0pLywvXig/OlteIl0qKS8sL14oPzpbIl0pLywvXig/Om5hbWVzcGFjZVxiKS8sL14oPzpccyooXHI/XG4pKykvLC9eKD86XHMrKS8sL14oPzpbe10pLywvXig/Olt9XSkvLC9eKD86JCkvLC9eKD86XHMqKFxyP1xuKSspLywvXig/OlxzKykvLC9eKD86XFtcKlxdKS8sL14oPzpjbGFzc1xiKS8sL14oPzpccyooXHI/XG4pKykvLC9eKD86XHMrKS8sL14oPzpbfV0pLywvXig/Olt7XSkvLC9eKD86W31dKS8sL14oPzokKS8sL14oPzpcW1wqXF0pLywvXig/Olt7XSkvLC9eKD86W1xuXSkvLC9eKD86W157fVxuXSopLywvXig/OmNzc0NsYXNzXGIpLywvXig/OmNhbGxiYWNrXGIpLywvXig/OmxpbmtcYikvLC9eKD86Y2xpY2tcYikvLC9eKD86bm90ZSBmb3JcYikvLC9eKD86bm90ZVxiKS8sL14oPzo8PCkvLC9eKD86Pj4pLywvXig/OmhyZWZcYikvLC9eKD86W35dKS8sL14oPzpbXn5dKikvLC9eKD86fikvLC9eKD86W2BdKS8sL14oPzpbXmBdKykvLC9eKD86W2BdKS8sL14oPzpfc2VsZlxiKS8sL14oPzpfYmxhbmtcYikvLC9eKD86X3BhcmVudFxiKS8sL14oPzpfdG9wXGIpLywvXig/OlxzKjxcfCkvLC9eKD86XHMqXHw+KS8sL14oPzpccyo+KS8sL14oPzpccyo8KS8sL14oPzpccypcKikvLC9eKD86XHMqb1xiKS8sL14oPzpccypcKFwpKS8sL14oPzotLSkvLC9eKD86XC5cLikvLC9eKD86OnsxfVteOlxuO10rKS8sL14oPzo6ezN9KS8sL14oPzotKS8sL14oPzpcLikvLC9eKD86XCspLywvXig/OiUpLywvXig/Oj0pLywvXig/Oj0pLywvXig/Olx3KykvLC9eKD86XFspLywvXig/OlxdKS8sL14oPzpbISIjJCUmJyorLC0uYD9cXC9dKS8sL14oPzpbMC05XSspLywvXig/OltcdTAwQUFcdTAwQjVcdTAwQkFcdTAwQzAtXHUwMEQ2XHUwMEQ4LVx1MDBGNl18W1x1MDBGOC1cdTAyQzFcdTAyQzYtXHUwMkQxXHUwMkUwLVx1MDJFNFx1MDJFQ1x1MDJFRVx1MDM3MC1cdTAzNzRcdTAzNzZcdTAzNzddfFtcdTAzN0EtXHUwMzdEXHUwMzg2XHUwMzg4LVx1MDM4QVx1MDM4Q1x1MDM4RS1cdTAzQTFcdTAzQTMtXHUwM0Y1XXxbXHUwM0Y3LVx1MDQ4MVx1MDQ4QS1cdTA1MjdcdTA1MzEtXHUwNTU2XHUwNTU5XHUwNTYxLVx1MDU4N1x1MDVEMC1cdTA1RUFdfFtcdTA1RjAtXHUwNUYyXHUwNjIwLVx1MDY0QVx1MDY2RVx1MDY2Rlx1MDY3MS1cdTA2RDNcdTA2RDVcdTA2RTVcdTA2RTZcdTA2RUVdfFtcdTA2RUZcdTA2RkEtXHUwNkZDXHUwNkZGXHUwNzEwXHUwNzEyLVx1MDcyRlx1MDc0RC1cdTA3QTVcdTA3QjFcdTA3Q0EtXHUwN0VBXXxbXHUwN0Y0XHUwN0Y1XHUwN0ZBXHUwODAwLVx1MDgxNVx1MDgxQVx1MDgyNFx1MDgyOFx1MDg0MC1cdTA4NThcdTA4QTBdfFtcdTA4QTItXHUwOEFDXHUwOTA0LVx1MDkzOVx1MDkzRFx1MDk1MFx1MDk1OC1cdTA5NjFcdTA5NzEtXHUwOTc3XXxbXHUwOTc5LVx1MDk3Rlx1MDk4NS1cdTA5OENcdTA5OEZcdTA5OTBcdTA5OTMtXHUwOUE4XHUwOUFBLVx1MDlCMFx1MDlCMl18W1x1MDlCNi1cdTA5QjlcdTA5QkRcdTA5Q0VcdTA5RENcdTA5RERcdTA5REYtXHUwOUUxXHUwOUYwXHUwOUYxXHUwQTA1LVx1MEEwQV18W1x1MEEwRlx1MEExMFx1MEExMy1cdTBBMjhcdTBBMkEtXHUwQTMwXHUwQTMyXHUwQTMzXHUwQTM1XHUwQTM2XHUwQTM4XHUwQTM5XXxbXHUwQTU5LVx1MEE1Q1x1MEE1RVx1MEE3Mi1cdTBBNzRcdTBBODUtXHUwQThEXHUwQThGLVx1MEE5MVx1MEE5My1cdTBBQThdfFtcdTBBQUEtXHUwQUIwXHUwQUIyXHUwQUIzXHUwQUI1LVx1MEFCOVx1MEFCRFx1MEFEMFx1MEFFMFx1MEFFMVx1MEIwNS1cdTBCMENdfFtcdTBCMEZcdTBCMTBcdTBCMTMtXHUwQjI4XHUwQjJBLVx1MEIzMFx1MEIzMlx1MEIzM1x1MEIzNS1cdTBCMzlcdTBCM0RcdTBCNUNdfFtcdTBCNURcdTBCNUYtXHUwQjYxXHUwQjcxXHUwQjgzXHUwQjg1LVx1MEI4QVx1MEI4RS1cdTBCOTBcdTBCOTItXHUwQjk1XHUwQjk5XXxbXHUwQjlBXHUwQjlDXHUwQjlFXHUwQjlGXHUwQkEzXHUwQkE0XHUwQkE4LVx1MEJBQVx1MEJBRS1cdTBCQjlcdTBCRDBdfFtcdTBDMDUtXHUwQzBDXHUwQzBFLVx1MEMxMFx1MEMxMi1cdTBDMjhcdTBDMkEtXHUwQzMzXHUwQzM1LVx1MEMzOVx1MEMzRF18W1x1MEM1OFx1MEM1OVx1MEM2MFx1MEM2MVx1MEM4NS1cdTBDOENcdTBDOEUtXHUwQzkwXHUwQzkyLVx1MENBOFx1MENBQS1cdTBDQjNdfFtcdTBDQjUtXHUwQ0I5XHUwQ0JEXHUwQ0RFXHUwQ0UwXHUwQ0UxXHUwQ0YxXHUwQ0YyXHUwRDA1LVx1MEQwQ1x1MEQwRS1cdTBEMTBdfFtcdTBEMTItXHUwRDNBXHUwRDNEXHUwRDRFXHUwRDYwXHUwRDYxXHUwRDdBLVx1MEQ3Rlx1MEQ4NS1cdTBEOTZcdTBEOUEtXHUwREIxXXxbXHUwREIzLVx1MERCQlx1MERCRFx1MERDMC1cdTBEQzZcdTBFMDEtXHUwRTMwXHUwRTMyXHUwRTMzXHUwRTQwLVx1MEU0Nlx1MEU4MV18W1x1MEU4Mlx1MEU4NFx1MEU4N1x1MEU4OFx1MEU4QVx1MEU4RFx1MEU5NC1cdTBFOTdcdTBFOTktXHUwRTlGXHUwRUExLVx1MEVBM118W1x1MEVBNVx1MEVBN1x1MEVBQVx1MEVBQlx1MEVBRC1cdTBFQjBcdTBFQjJcdTBFQjNcdTBFQkRcdTBFQzAtXHUwRUM0XHUwRUM2XXxbXHUwRURDLVx1MEVERlx1MEYwMFx1MEY0MC1cdTBGNDdcdTBGNDktXHUwRjZDXHUwRjg4LVx1MEY4Q1x1MTAwMC1cdTEwMkFdfFtcdTEwM0ZcdTEwNTAtXHUxMDU1XHUxMDVBLVx1MTA1RFx1MTA2MVx1MTA2NVx1MTA2Nlx1MTA2RS1cdTEwNzBcdTEwNzUtXHUxMDgxXXxbXHUxMDhFXHUxMEEwLVx1MTBDNVx1MTBDN1x1MTBDRFx1MTBEMC1cdTEwRkFcdTEwRkMtXHUxMjQ4XHUxMjRBLVx1MTI0RF18W1x1MTI1MC1cdTEyNTZcdTEyNThcdTEyNUEtXHUxMjVEXHUxMjYwLVx1MTI4OFx1MTI4QS1cdTEyOERcdTEyOTAtXHUxMkIwXXxbXHUxMkIyLVx1MTJCNVx1MTJCOC1cdTEyQkVcdTEyQzBcdTEyQzItXHUxMkM1XHUxMkM4LVx1MTJENlx1MTJEOC1cdTEzMTBdfFtcdTEzMTItXHUxMzE1XHUxMzE4LVx1MTM1QVx1MTM4MC1cdTEzOEZcdTEzQTAtXHUxM0Y0XHUxNDAxLVx1MTY2Q118W1x1MTY2Ri1cdTE2N0ZcdTE2ODEtXHUxNjlBXHUxNkEwLVx1MTZFQVx1MTcwMC1cdTE3MENcdTE3MEUtXHUxNzExXXxbXHUxNzIwLVx1MTczMVx1MTc0MC1cdTE3NTFcdTE3NjAtXHUxNzZDXHUxNzZFLVx1MTc3MFx1MTc4MC1cdTE3QjNcdTE3RDddfFtcdTE3RENcdTE4MjAtXHUxODc3XHUxODgwLVx1MThBOFx1MThBQVx1MThCMC1cdTE4RjVcdTE5MDAtXHUxOTFDXXxbXHUxOTUwLVx1MTk2RFx1MTk3MC1cdTE5NzRcdTE5ODAtXHUxOUFCXHUxOUMxLVx1MTlDN1x1MUEwMC1cdTFBMTZdfFtcdTFBMjAtXHUxQTU0XHUxQUE3XHUxQjA1LVx1MUIzM1x1MUI0NS1cdTFCNEJcdTFCODMtXHUxQkEwXHUxQkFFXHUxQkFGXXxbXHUxQkJBLVx1MUJFNVx1MUMwMC1cdTFDMjNcdTFDNEQtXHUxQzRGXHUxQzVBLVx1MUM3RFx1MUNFOS1cdTFDRUNdfFtcdTFDRUUtXHUxQ0YxXHUxQ0Y1XHUxQ0Y2XHUxRDAwLVx1MURCRlx1MUUwMC1cdTFGMTVcdTFGMTgtXHUxRjFEXXxbXHUxRjIwLVx1MUY0NVx1MUY0OC1cdTFGNERcdTFGNTAtXHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGLVx1MUY3RF18W1x1MUY4MC1cdTFGQjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZDNi1cdTFGQ0NcdTFGRDAtXHUxRkQzXXxbXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFGRUNcdTFGRjItXHUxRkY0XHUxRkY2LVx1MUZGQ1x1MjA3MVx1MjA3Rl18W1x1MjA5MC1cdTIwOUNcdTIxMDJcdTIxMDdcdTIxMEEtXHUyMTEzXHUyMTE1XHUyMTE5LVx1MjExRFx1MjEyNFx1MjEyNlx1MjEyOF18W1x1MjEyQS1cdTIxMkRcdTIxMkYtXHUyMTM5XHUyMTNDLVx1MjEzRlx1MjE0NS1cdTIxNDlcdTIxNEVcdTIxODNcdTIxODRdfFtcdTJDMDAtXHUyQzJFXHUyQzMwLVx1MkM1RVx1MkM2MC1cdTJDRTRcdTJDRUItXHUyQ0VFXHUyQ0YyXHUyQ0YzXXxbXHUyRDAwLVx1MkQyNVx1MkQyN1x1MkQyRFx1MkQzMC1cdTJENjdcdTJENkZcdTJEODAtXHUyRDk2XHUyREEwLVx1MkRBNl18W1x1MkRBOC1cdTJEQUVcdTJEQjAtXHUyREI2XHUyREI4LVx1MkRCRVx1MkRDMC1cdTJEQzZcdTJEQzgtXHUyRENFXXxbXHUyREQwLVx1MkRENlx1MkREOC1cdTJEREVcdTJFMkZcdTMwMDVcdTMwMDZcdTMwMzEtXHUzMDM1XHUzMDNCXHUzMDNDXXxbXHUzMDQxLVx1MzA5Nlx1MzA5RC1cdTMwOUZcdTMwQTEtXHUzMEZBXHUzMEZDLVx1MzBGRlx1MzEwNS1cdTMxMkRdfFtcdTMxMzEtXHUzMThFXHUzMUEwLVx1MzFCQVx1MzFGMC1cdTMxRkZcdTM0MDAtXHU0REI1XHU0RTAwLVx1OUZDQ118W1x1QTAwMC1cdUE0OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1cdUE2MUZcdUE2MkFcdUE2MkJdfFtcdUE2NDAtXHVBNjZFXHVBNjdGLVx1QTY5N1x1QTZBMC1cdUE2RTVcdUE3MTctXHVBNzFGXHVBNzIyLVx1QTc4OF18W1x1QTc4Qi1cdUE3OEVcdUE3OTAtXHVBNzkzXHVBN0EwLVx1QTdBQVx1QTdGOC1cdUE4MDFcdUE4MDMtXHVBODA1XXxbXHVBODA3LVx1QTgwQVx1QTgwQy1cdUE4MjJcdUE4NDAtXHVBODczXHVBODgyLVx1QThCM1x1QThGMi1cdUE4RjdcdUE4RkJdfFtcdUE5MEEtXHVBOTI1XHVBOTMwLVx1QTk0Nlx1QTk2MC1cdUE5N0NcdUE5ODQtXHVBOUIyXHVBOUNGXHVBQTAwLVx1QUEyOF18W1x1QUE0MC1cdUFBNDJcdUFBNDQtXHVBQTRCXHVBQTYwLVx1QUE3Nlx1QUE3QVx1QUE4MC1cdUFBQUZcdUFBQjFcdUFBQjVdfFtcdUFBQjZcdUFBQjktXHVBQUJEXHVBQUMwXHVBQUMyXHVBQURCLVx1QUFERFx1QUFFMC1cdUFBRUFcdUFBRjItXHVBQUY0XXxbXHVBQjAxLVx1QUIwNlx1QUIwOS1cdUFCMEVcdUFCMTEtXHVBQjE2XHVBQjIwLVx1QUIyNlx1QUIyOC1cdUFCMkVdfFtcdUFCQzAtXHVBQkUyXHVBQzAwLVx1RDdBM1x1RDdCMC1cdUQ3QzZcdUQ3Q0ItXHVEN0ZCXHVGOTAwLVx1RkE2RF18W1x1RkE3MC1cdUZBRDlcdUZCMDAtXHVGQjA2XHVGQjEzLVx1RkIxN1x1RkIxRFx1RkIxRi1cdUZCMjhcdUZCMkEtXHVGQjM2XXxbXHVGQjM4LVx1RkIzQ1x1RkIzRVx1RkI0MFx1RkI0MVx1RkI0M1x1RkI0NFx1RkI0Ni1cdUZCQjFcdUZCRDMtXHVGRDNEXXxbXHVGRDUwLVx1RkQ4Rlx1RkQ5Mi1cdUZEQzdcdUZERjAtXHVGREZCXHVGRTcwLVx1RkU3NFx1RkU3Ni1cdUZFRkNdfFtcdUZGMjEtXHVGRjNBXHVGRjQxLVx1RkY1QVx1RkY2Ni1cdUZGQkVcdUZGQzItXHVGRkM3XHVGRkNBLVx1RkZDRl18W1x1RkZEMi1cdUZGRDdcdUZGREEtXHVGRkRDXSkvLC9eKD86XHMpLywvXig/OiQpL10sY29uZGl0aW9uczp7Im5hbWVzcGFjZS1ib2R5Ijp7cnVsZXM6WzMxLDM2LDM3LDM4LDM5LDQwLDQxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYzLDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1XSxpbmNsdXNpdmU6ITF9LG5hbWVzcGFjZTp7cnVsZXM6WzMxLDMyLDMzLDM0LDM1LDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYzLDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1XSxpbmNsdXNpdmU6ITF9LCJjbGFzcy1ib2R5Ijp7cnVsZXM6WzMxLDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYzLDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1XSxpbmNsdXNpdmU6ITF9LGNsYXNzOntydWxlczpbMzEsNDIsNDMsNDQsNDUsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjMsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTVdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzE2LDE3LDMxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYzLDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzE0LDMxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYzLDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzEyLDMxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYzLDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1XSxpbmNsdXNpdmU6ITF9LGFyZ19kaXJlY3RpdmU6e3J1bGVzOls3LDgsMzEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjMsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTVdLGluY2x1c2l2ZTohMX0sdHlwZV9kaXJlY3RpdmU6e3J1bGVzOls2LDcsMzEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjMsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTVdLGluY2x1c2l2ZTohMX0sb3Blbl9kaXJlY3RpdmU6e3J1bGVzOls1LDMxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYzLDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1XSxpbmNsdXNpdmU6ITF9LGNhbGxiYWNrX2FyZ3M6e3J1bGVzOlsyNywyOCwzMSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2Myw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NV0saW5jbHVzaXZlOiExfSxjYWxsYmFja19uYW1lOntydWxlczpbMjQsMjUsMjYsMzEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjMsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTVdLGluY2x1c2l2ZTohMX0saHJlZjp7cnVsZXM6WzMxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYzLDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1XSxpbmNsdXNpdmU6ITF9LHN0cnVjdDp7cnVsZXM6WzMxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYzLDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1XSxpbmNsdXNpdmU6ITF9LGdlbmVyaWM6e3J1bGVzOlszMSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NV0saW5jbHVzaXZlOiExfSxicXN0cmluZzp7cnVsZXM6WzMxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1XSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzI5LDMwLDMxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYzLDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsOSwxMCwxMSwxMywxNSwxOCwxOSwyMCwyMSwyMiwyMywzMSwzMiw0MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2Myw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NV0saW5jbHVzaXZlOiEwfX19O3JldHVybiBDZX0oKTtWZS5sZXhlcj1FZTtmdW5jdGlvbiBIZSgpe3RoaXMueXk9e319cmV0dXJuIEhlLnByb3RvdHlwZT1WZSxWZS5QYXJzZXI9SGUsbmV3IEhlfSgpO2ZndC5wYXJzZXI9Zmd0O2NvbnN0IEFSdD1mZ3QsSUs9ImNsYXNzSWQtIjtsZXQgZGd0PVtdLG5oPXt9LE9LPVtdLExSdD0wLGxrPXt9LGdndD0wLEJQPVtdO2NvbnN0IE41PWk9PnVpLnNhbml0aXplVGV4dChpLERlKCkpLGFWZT1mdW5jdGlvbihpLGEsZil7SjEucGFyc2VEaXJlY3RpdmUodGhpcyxpLGEsZil9LGRMPWZ1bmN0aW9uKGkpe2xldCBhPSIiLGY9aTtpZihpLmluZGV4T2YoIn4iKT4wKXtjb25zdCBwPWkuc3BsaXQoIn4iKTtmPU41KHBbMF0pLGE9TjUocFsxXSl9cmV0dXJue2NsYXNzTmFtZTpmLHR5cGU6YX19LG9WZT1mdW5jdGlvbihpLGEpe2EmJihhPU41KGEpKTtjb25zdHtjbGFzc05hbWU6Zn09ZEwoaSk7bmhbZl0ubGFiZWw9YX0scGd0PWZ1bmN0aW9uKGkpe2NvbnN0IGE9ZEwoaSk7bmhbYS5jbGFzc05hbWVdPT09dm9pZCAwJiYobmhbYS5jbGFzc05hbWVdPXtpZDphLmNsYXNzTmFtZSx0eXBlOmEudHlwZSxsYWJlbDphLmNsYXNzTmFtZSxjc3NDbGFzc2VzOltdLG1ldGhvZHM6W10sbWVtYmVyczpbXSxhbm5vdGF0aW9uczpbXSxkb21JZDpJSythLmNsYXNzTmFtZSsiLSIrTFJ0fSxMUnQrKyl9LE1SdD1mdW5jdGlvbihpKXtpZihpIGluIG5oKXJldHVybiBuaFtpXS5kb21JZDt0aHJvdyBuZXcgRXJyb3IoIkNsYXNzIG5vdCBmb3VuZDogIitpKX0sY1ZlPWZ1bmN0aW9uKCl7ZGd0PVtdLG5oPXt9LE9LPVtdLEJQPVtdLEJQLnB1c2goSVJ0KSxsaz17fSxnZ3Q9MCxjZygpfSx1VmU9ZnVuY3Rpb24oaSl7cmV0dXJuIG5oW2ldfSxsVmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmh9LGhWZT1mdW5jdGlvbigpe3JldHVybiBkZ3R9LGZWZT1mdW5jdGlvbigpe3JldHVybiBPS30sZFZlPWZ1bmN0aW9uKGkpe1d0LmRlYnVnKCJBZGRpbmcgcmVsYXRpb246ICIrSlNPTi5zdHJpbmdpZnkoaSkpLHBndChpLmlkMSkscGd0KGkuaWQyKSxpLmlkMT1kTChpLmlkMSkuY2xhc3NOYW1lLGkuaWQyPWRMKGkuaWQyKS5jbGFzc05hbWUsaS5yZWxhdGlvblRpdGxlMT11aS5zYW5pdGl6ZVRleHQoaS5yZWxhdGlvblRpdGxlMS50cmltKCksRGUoKSksaS5yZWxhdGlvblRpdGxlMj11aS5zYW5pdGl6ZVRleHQoaS5yZWxhdGlvblRpdGxlMi50cmltKCksRGUoKSksZGd0LnB1c2goaSl9LGdWZT1mdW5jdGlvbihpLGEpe2NvbnN0IGY9ZEwoaSkuY2xhc3NOYW1lO25oW2ZdLmFubm90YXRpb25zLnB1c2goYSl9LERSdD1mdW5jdGlvbihpLGEpe2NvbnN0IGY9ZEwoaSkuY2xhc3NOYW1lLHA9bmhbZl07aWYodHlwZW9mIGE9PSJzdHJpbmciKXtjb25zdCB2PWEudHJpbSgpO3Yuc3RhcnRzV2l0aCgiPDwiKSYmdi5lbmRzV2l0aCgiPj4iKT9wLmFubm90YXRpb25zLnB1c2goTjUodi5zdWJzdHJpbmcoMix2Lmxlbmd0aC0yKSkpOnYuaW5kZXhPZigiKSIpPjA/cC5tZXRob2RzLnB1c2goTjUodikpOnYmJnAubWVtYmVycy5wdXNoKE41KHYpKX19LHBWZT1mdW5jdGlvbihpLGEpe0FycmF5LmlzQXJyYXkoYSkmJihhLnJldmVyc2UoKSxhLmZvckVhY2goZj0+RFJ0KGksZikpKX0sYlZlPWZ1bmN0aW9uKGksYSl7Y29uc3QgZj17aWQ6YG5vdGUke09LLmxlbmd0aH1gLGNsYXNzOmEsdGV4dDppfTtPSy5wdXNoKGYpfSx2VmU9ZnVuY3Rpb24oaSl7cmV0dXJuIGkuc3RhcnRzV2l0aCgiOiIpJiYoaT1pLnN1YnN0cmluZygxKSksTjUoaS50cmltKCkpfSxiZ3Q9ZnVuY3Rpb24oaSxhKXtpLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihmKXtsZXQgcD1mO2ZbMF0ubWF0Y2goL1xkLykmJihwPUlLK3ApLG5oW3BdIT09dm9pZCAwJiZuaFtwXS5jc3NDbGFzc2VzLnB1c2goYSl9KX0sd1ZlPWZ1bmN0aW9uKGksYSl7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24oZil7YSE9PXZvaWQgMCYmKG5oW2ZdLnRvb2x0aXA9TjUoYSkpfSl9LG1WZT1mdW5jdGlvbihpLGEpe3JldHVybiBhP2xrW2FdLmNsYXNzZXNbaV0udG9vbHRpcDpuaFtpXS50b29sdGlwfSx5VmU9ZnVuY3Rpb24oaSxhLGYpe2NvbnN0IHA9RGUoKTtpLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbih2KXtsZXQgbT12O3ZbMF0ubWF0Y2goL1xkLykmJihtPUlLK20pLG5oW21dIT09dm9pZCAwJiYobmhbbV0ubGluaz10by5mb3JtYXRVcmwoYSxwKSxwLnNlY3VyaXR5TGV2ZWw9PT0ic2FuZGJveCI/bmhbbV0ubGlua1RhcmdldD0iX3RvcCI6dHlwZW9mIGY9PSJzdHJpbmciP25oW21dLmxpbmtUYXJnZXQ9TjUoZik6bmhbbV0ubGlua1RhcmdldD0iX2JsYW5rIil9KSxiZ3QoaSwiY2xpY2thYmxlIil9LHhWZT1mdW5jdGlvbihpLGEsZil7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24ocCl7a1ZlKHAsYSxmKSxuaFtwXS5oYXZlQ2FsbGJhY2s9ITB9KSxiZ3QoaSwiY2xpY2thYmxlIil9LGtWZT1mdW5jdGlvbihpLGEsZil7aWYoRGUoKS5zZWN1cml0eUxldmVsIT09Imxvb3NlInx8YT09PXZvaWQgMClyZXR1cm47Y29uc3Qgdj1pO2lmKG5oW3ZdIT09dm9pZCAwKXtjb25zdCBtPU1SdCh2KTtsZXQgYj1bXTtpZih0eXBlb2YgZj09InN0cmluZyIpe2I9Zi5zcGxpdCgvLCg/PSg/Oig/OlteIl0qIil7Mn0pKlteIl0qJCkvKTtmb3IobGV0IEU9MDtFPGIubGVuZ3RoO0UrKyl7bGV0IEM9YltFXS50cmltKCk7Qy5jaGFyQXQoMCk9PT0nIicmJkMuY2hhckF0KEMubGVuZ3RoLTEpPT09JyInJiYoQz1DLnN1YnN0cigxLEMubGVuZ3RoLTIpKSxiW0VdPUN9fWIubGVuZ3RoPT09MCYmYi5wdXNoKG0pLEJQLnB1c2goZnVuY3Rpb24oKXtjb25zdCBFPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtpZD0iJHttfSJdYCk7RSE9PW51bGwmJkUuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7dG8ucnVuRnVuYyhhLC4uLmIpfSwhMSl9KX19LEVWZT1mdW5jdGlvbihpKXtCUC5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EoaSl9KX0sVFZlPXtMSU5FOjAsRE9UVEVEX0xJTkU6MX0sX1ZlPXtBR0dSRUdBVElPTjowLEVYVEVOU0lPTjoxLENPTVBPU0lUSU9OOjIsREVQRU5ERU5DWTozLExPTExJUE9QOjR9LElSdD1mdW5jdGlvbihpKXtsZXQgYT14cigiLm1lcm1haWRUb29sdGlwIik7KGEuX2dyb3Vwc3x8YSlbMF1bMF09PT1udWxsJiYoYT14cigiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJtZXJtYWlkVG9vbHRpcCIpLnN0eWxlKCJvcGFjaXR5IiwwKSkseHIoaSkuc2VsZWN0KCJzdmciKS5zZWxlY3RBbGwoImcubm9kZSIpLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7Y29uc3Qgdj14cih0aGlzKTtpZih2LmF0dHIoInRpdGxlIik9PT1udWxsKXJldHVybjtjb25zdCBiPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7YS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMjAwKS5zdHlsZSgib3BhY2l0eSIsIi45IiksYS50ZXh0KHYuYXR0cigidGl0bGUiKSkuc3R5bGUoImxlZnQiLHdpbmRvdy5zY3JvbGxYK2IubGVmdCsoYi5yaWdodC1iLmxlZnQpLzIrInB4Iikuc3R5bGUoInRvcCIsd2luZG93LnNjcm9sbFkrYi50b3AtMTQrZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ArInB4IiksYS5odG1sKGEuaHRtbCgpLnJlcGxhY2UoLyZsdDticlwvJmd0Oy9nLCI8YnIvPiIpKSx2LmNsYXNzZWQoImhvdmVyIiwhMCl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7YS50cmFuc2l0aW9uKCkuZHVyYXRpb24oNTAwKS5zdHlsZSgib3BhY2l0eSIsMCkseHIodGhpcykuY2xhc3NlZCgiaG92ZXIiLCExKX0pfTtCUC5wdXNoKElSdCk7bGV0IE9SdD0iVEIiO2NvbnN0IE5LPXtwYXJzZURpcmVjdGl2ZTphVmUsc2V0QWNjVGl0bGU6bTAsZ2V0QWNjVGl0bGU6dWcsZ2V0QWNjRGVzY3JpcHRpb246aGcsc2V0QWNjRGVzY3JpcHRpb246bGcsZ2V0Q29uZmlnOigpPT5EZSgpLmNsYXNzLGFkZENsYXNzOnBndCxiaW5kRnVuY3Rpb25zOkVWZSxjbGVhcjpjVmUsZ2V0Q2xhc3M6dVZlLGdldENsYXNzZXM6bFZlLGdldE5vdGVzOmZWZSxhZGRBbm5vdGF0aW9uOmdWZSxhZGROb3RlOmJWZSxnZXRSZWxhdGlvbnM6aFZlLGFkZFJlbGF0aW9uOmRWZSxnZXREaXJlY3Rpb246KCk9Pk9SdCxzZXREaXJlY3Rpb246aT0+e09SdD1pfSxhZGRNZW1iZXI6RFJ0LGFkZE1lbWJlcnM6cFZlLGNsZWFudXBMYWJlbDp2VmUsbGluZVR5cGU6VFZlLHJlbGF0aW9uVHlwZTpfVmUsc2V0Q2xpY2tFdmVudDp4VmUsc2V0Q3NzQ2xhc3M6Ymd0LHNldExpbms6eVZlLGdldFRvb2x0aXA6bVZlLHNldFRvb2x0aXA6d1ZlLGxvb2tVcERvbUlkOk1SdCxzZXREaWFncmFtVGl0bGU6TmIsZ2V0RGlhZ3JhbVRpdGxlOmhwLHNldENsYXNzTGFiZWw6b1ZlLGFkZE5hbWVzcGFjZTpmdW5jdGlvbihpKXtsa1tpXT09PXZvaWQgMCYmKGxrW2ldPXtpZDppLGNsYXNzZXM6e30sY2hpbGRyZW46e30sZG9tSWQ6SUsraSsiLSIrZ2d0fSxnZ3QrKyl9LGFkZENsYXNzZXNUb05hbWVzcGFjZTpmdW5jdGlvbihpLGEpe2xrW2ldIT09dm9pZCAwJiZhLm1hcChmPT57bmhbZl0ucGFyZW50PWksbGtbaV0uY2xhc3Nlc1tmXT1uaFtmXX0pfSxnZXROYW1lc3BhY2U6ZnVuY3Rpb24oaSl7cmV0dXJuIGxrW2ldfSxnZXROYW1lc3BhY2VzOmZ1bmN0aW9uKCl7cmV0dXJuIGxrfX0sTlJ0PWk9PmBnLmNsYXNzR3JvdXAgdGV4dCB7CiAgZmlsbDogJHtpLm5vZGVCb3JkZXJ9OwogIGZpbGw6ICR7aS5jbGFzc1RleHR9OwogIHN0cm9rZTogbm9uZTsKICBmb250LWZhbWlseTogJHtpLmZvbnRGYW1pbHl9OwogIGZvbnQtc2l6ZTogMTBweDsKCiAgLnRpdGxlIHsKICAgIGZvbnQtd2VpZ2h0OiBib2xkZXI7CiAgfQoKfQoKLm5vZGVMYWJlbCwgLmVkZ2VMYWJlbCB7CiAgY29sb3I6ICR7aS5jbGFzc1RleHR9Owp9Ci5lZGdlTGFiZWwgLmxhYmVsIHJlY3QgewogIGZpbGw6ICR7aS5tYWluQmtnfTsKfQoubGFiZWwgdGV4dCB7CiAgZmlsbDogJHtpLmNsYXNzVGV4dH07Cn0KLmVkZ2VMYWJlbCAubGFiZWwgc3BhbiB7CiAgYmFja2dyb3VuZDogJHtpLm1haW5Ca2d9Owp9CgouY2xhc3NUaXRsZSB7CiAgZm9udC13ZWlnaHQ6IGJvbGRlcjsKfQoubm9kZSByZWN0LAogIC5ub2RlIGNpcmNsZSwKICAubm9kZSBlbGxpcHNlLAogIC5ub2RlIHBvbHlnb24sCiAgLm5vZGUgcGF0aCB7CiAgICBmaWxsOiAke2kubWFpbkJrZ307CiAgICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KCgouZGl2aWRlciB7CiAgc3Ryb2tlOiAke2kubm9kZUJvcmRlcn07CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgpnLmNsaWNrYWJsZSB7CiAgY3Vyc29yOiBwb2ludGVyOwp9CgpnLmNsYXNzR3JvdXAgcmVjdCB7CiAgZmlsbDogJHtpLm1haW5Ca2d9OwogIHN0cm9rZTogJHtpLm5vZGVCb3JkZXJ9Owp9CgpnLmNsYXNzR3JvdXAgbGluZSB7CiAgc3Ryb2tlOiAke2kubm9kZUJvcmRlcn07CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgouY2xhc3NMYWJlbCAuYm94IHsKICBzdHJva2U6IG5vbmU7CiAgc3Ryb2tlLXdpZHRoOiAwOwogIGZpbGw6ICR7aS5tYWluQmtnfTsKICBvcGFjaXR5OiAwLjU7Cn0KCi5jbGFzc0xhYmVsIC5sYWJlbCB7CiAgZmlsbDogJHtpLm5vZGVCb3JkZXJ9OwogIGZvbnQtc2l6ZTogMTBweDsKfQoKLnJlbGF0aW9uIHsKICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogIHN0cm9rZS13aWR0aDogMTsKICBmaWxsOiBub25lOwp9CgouZGFzaGVkLWxpbmV7CiAgc3Ryb2tlLWRhc2hhcnJheTogMzsKfQoKLmRvdHRlZC1saW5lewogIHN0cm9rZS1kYXNoYXJyYXk6IDEgMjsKfQoKI2NvbXBvc2l0aW9uU3RhcnQsIC5jb21wb3NpdGlvbiB7CiAgZmlsbDogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2U6ICR7aS5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgojY29tcG9zaXRpb25FbmQsIC5jb21wb3NpdGlvbiB7CiAgZmlsbDogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2U6ICR7aS5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgojZGVwZW5kZW5jeVN0YXJ0LCAuZGVwZW5kZW5jeSB7CiAgZmlsbDogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2U6ICR7aS5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgojZGVwZW5kZW5jeVN0YXJ0LCAuZGVwZW5kZW5jeSB7CiAgZmlsbDogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2U6ICR7aS5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgojZXh0ZW5zaW9uU3RhcnQsIC5leHRlbnNpb24gewogIGZpbGw6ICR7aS5tYWluQmtnfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNleHRlbnNpb25FbmQsIC5leHRlbnNpb24gewogIGZpbGw6ICR7aS5tYWluQmtnfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNhZ2dyZWdhdGlvblN0YXJ0LCAuYWdncmVnYXRpb24gewogIGZpbGw6ICR7aS5tYWluQmtnfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNhZ2dyZWdhdGlvbkVuZCwgLmFnZ3JlZ2F0aW9uIHsKICBmaWxsOiAke2kubWFpbkJrZ30gIWltcG9ydGFudDsKICBzdHJva2U6ICR7aS5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgojbG9sbGlwb3BTdGFydCwgLmxvbGxpcG9wIHsKICBmaWxsOiAke2kubWFpbkJrZ30gIWltcG9ydGFudDsKICBzdHJva2U6ICR7aS5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgojbG9sbGlwb3BFbmQsIC5sb2xsaXBvcCB7CiAgZmlsbDogJHtpLm1haW5Ca2d9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlOiAke2kubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZS13aWR0aDogMTsKfQoKLmVkZ2VUZXJtaW5hbHMgewogIGZvbnQtc2l6ZTogMTFweDsKfQoKLmNsYXNzVGl0bGVUZXh0IHsKICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogIGZvbnQtc2l6ZTogMThweDsKICBmaWxsOiAke2kudGV4dENvbG9yfTsKfQpgO2xldCBQSz17fTtjb25zdCBGSz0yMCxSUD1mdW5jdGlvbihpKXtjb25zdCBhPU9iamVjdC5lbnRyaWVzKFBLKS5maW5kKGY9PmZbMV0ubGFiZWw9PT1pKTtpZihhKXJldHVybiBhWzBdfSxDVmU9ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZXh0ZW5zaW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsImV4dGVuc2lvbiIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSw3IEwxOCwxMyBWIDEgWiIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImV4dGVuc2lvbkVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDEgViAxMyBMMTgsNyBaIiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiY29tcG9zaXRpb25TdGFydCIpLmF0dHIoImNsYXNzIiwiZXh0ZW5zaW9uIikuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiY29tcG9zaXRpb25FbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFnZ3JlZ2F0aW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsImV4dGVuc2lvbiIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFnZ3JlZ2F0aW9uRW5kIikuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJkZXBlbmRlbmN5U3RhcnQiKS5hdHRyKCJjbGFzcyIsImV4dGVuc2lvbiIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gNSw3IEw5LDEzIEwxLDcgTDksMSBaIiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZGVwZW5kZW5jeUVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfSxTVmU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpBUnQsZGI6TksscmVuZGVyZXI6e2RyYXc6ZnVuY3Rpb24oaSxhLGYscCl7Y29uc3Qgdj1EZSgpLmNsYXNzO1BLPXt9LFd0LmluZm8oIlJlbmRlcmluZyBkaWFncmFtICIraSk7Y29uc3QgbT1EZSgpLnNlY3VyaXR5TGV2ZWw7bGV0IGI7bT09PSJzYW5kYm94IiYmKGI9eHIoIiNpIithKSk7Y29uc3QgRT14cihtPT09InNhbmRib3giP2Iubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLEM9RS5zZWxlY3QoYFtpZD0nJHthfSddYCk7Q1ZlKEMpO2NvbnN0IEE9bmV3IGwxKHttdWx0aWdyYXBoOiEwfSk7QS5zZXRHcmFwaCh7aXNNdWx0aUdyYXBoOiEwfSksQS5zZXREZWZhdWx0RWRnZUxhYmVsKGZ1bmN0aW9uKCl7cmV0dXJue319KTtjb25zdCBQPXAuZGIuZ2V0Q2xhc3NlcygpLEY9T2JqZWN0LmtleXMoUCk7Zm9yKGNvbnN0IGl0IG9mIEYpe2NvbnN0IGZ0PVBbaXRdLFR0PVMwdC5kcmF3Q2xhc3MoQyxmdCx2LHApO1BLW1R0LmlkXT1UdCxBLnNldE5vZGUoVHQuaWQsVHQpLFd0LmluZm8oIk9yZyBoZWlnaHQ6ICIrVHQuaGVpZ2h0KX1wLmRiLmdldFJlbGF0aW9ucygpLmZvckVhY2goZnVuY3Rpb24oaXQpe1d0LmluZm8oInRqb2hvIitSUChpdC5pZDEpK1JQKGl0LmlkMikrSlNPTi5zdHJpbmdpZnkoaXQpKSxBLnNldEVkZ2UoUlAoaXQuaWQxKSxSUChpdC5pZDIpLHtyZWxhdGlvbjppdH0saXQudGl0bGV8fCJERUZBVUxUIil9KSxwLmRiLmdldE5vdGVzKCkuZm9yRWFjaChmdW5jdGlvbihpdCl7V3QuZGVidWcoYEFkZGluZyBub3RlOiAke0pTT04uc3RyaW5naWZ5KGl0KX1gKTtjb25zdCBmdD1TMHQuZHJhd05vdGUoQyxpdCx2LHApO1BLW2Z0LmlkXT1mdCxBLnNldE5vZGUoZnQuaWQsZnQpLGl0LmNsYXNzJiZpdC5jbGFzcyBpbiBQJiZBLnNldEVkZ2UoaXQuaWQsUlAoaXQuY2xhc3MpLHtyZWxhdGlvbjp7aWQxOml0LmlkLGlkMjppdC5jbGFzcyxyZWxhdGlvbjp7dHlwZTE6Im5vbmUiLHR5cGUyOiJub25lIixsaW5lVHlwZToxMH19fSwiREVGQVVMVCIpfSksbkwoQSksQS5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24oaXQpe2l0IT09dm9pZCAwJiZBLm5vZGUoaXQpIT09dm9pZCAwJiYoV3QuZGVidWcoIk5vZGUgIitpdCsiOiAiK0pTT04uc3RyaW5naWZ5KEEubm9kZShpdCkpKSxFLnNlbGVjdCgiIyIrKHAuZGIubG9va1VwRG9tSWQoaXQpfHxpdCkpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhBLm5vZGUoaXQpLngtQS5ub2RlKGl0KS53aWR0aC8yKSsiLCIrKEEubm9kZShpdCkueS1BLm5vZGUoaXQpLmhlaWdodC8yKSsiICkiKSl9KSxBLmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihpdCl7aXQhPT12b2lkIDAmJkEuZWRnZShpdCkhPT12b2lkIDAmJihXdC5kZWJ1ZygiRWRnZSAiK2l0LnYrIiAtPiAiK2l0LncrIjogIitKU09OLnN0cmluZ2lmeShBLmVkZ2UoaXQpKSksUzB0LmRyYXdFZGdlKEMsQS5lZGdlKGl0KSxBLmVkZ2UoaXQpLnJlbGF0aW9uLHYscCkpfSk7Y29uc3QgSD1DLm5vZGUoKS5nZXRCQm94KCksWT1ILndpZHRoK0ZLKjIscnQ9SC5oZWlnaHQrRksqMjtvZyhDLHJ0LFksdi51c2VNYXhXaWR0aCk7Y29uc3QgSj1gJHtILngtRkt9ICR7SC55LUZLfSAke1l9ICR7cnR9YDtXdC5kZWJ1Zyhgdmlld0JveCAke0p9YCksQy5hdHRyKCJ2aWV3Qm94IixKKX19LHN0eWxlczpOUnQsaW5pdDppPT57aS5jbGFzc3x8KGkuY2xhc3M9e30pLGkuY2xhc3MuYXJyb3dNYXJrZXJBYnNvbHV0ZT1pLmFycm93TWFya2VyQWJzb2x1dGUsTksuY2xlYXIoKX19fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLHZndD1pPT51aS5zYW5pdGl6ZVRleHQoaSxEZSgpKTtsZXQgd2d0PXtkaXZpZGVyTWFyZ2luOjEwLHBhZGRpbmc6NSx0ZXh0SGVpZ2h0OjEwLGN1cnZlOnZvaWQgMH07Y29uc3QgQVZlPWZ1bmN0aW9uKGksYSxmLHApe2NvbnN0IHY9T2JqZWN0LmtleXMoaSk7V3QuaW5mbygia2V5czoiLHYpLFd0LmluZm8oaSksdi5mb3JFYWNoKGZ1bmN0aW9uKG0pe3ZhciBBLFA7Y29uc3QgYj1pW21dLEM9e3NoYXBlOiJyZWN0IixpZDpiLmlkLGRvbUlkOmIuZG9tSWQsbGFiZWxUZXh0OnZndChiLmlkKSxsYWJlbFN0eWxlOiIiLHN0eWxlOiJmaWxsOiBub25lOyBzdHJva2U6IGJsYWNrIixwYWRkaW5nOigoQT1EZSgpLmZsb3djaGFydCk9PW51bGw/dm9pZCAwOkEucGFkZGluZyk/PygoUD1EZSgpLmNsYXNzKT09bnVsbD92b2lkIDA6UC5wYWRkaW5nKX07YS5zZXROb2RlKGIuaWQsQyksUFJ0KGIuY2xhc3NlcyxhLGYscCxiLmlkKSxXdC5pbmZvKCJzZXROb2RlIixDKX0pfSxQUnQ9ZnVuY3Rpb24oaSxhLGYscCx2KXtjb25zdCBtPU9iamVjdC5rZXlzKGkpO1d0LmluZm8oImtleXM6IixtKSxXdC5pbmZvKGkpLG0uZmlsdGVyKGI9PmlbYl0ucGFyZW50PT12KS5mb3JFYWNoKGZ1bmN0aW9uKGIpe3ZhciBILFk7Y29uc3QgRT1pW2JdLEM9RS5jc3NDbGFzc2VzLmpvaW4oIiAiKSxBPXtsYWJlbFN0eWxlOiIiLHN0eWxlOiIifSxQPUUubGFiZWw/P0UuaWQsRj0wLGo9ImNsYXNzX2JveCIsUj17bGFiZWxTdHlsZTpBLmxhYmVsU3R5bGUsc2hhcGU6aixsYWJlbFRleHQ6dmd0KFApLGNsYXNzRGF0YTpFLHJ4OkYscnk6RixjbGFzczpDLHN0eWxlOkEuc3R5bGUsaWQ6RS5pZCxkb21JZDpFLmRvbUlkLHRvb2x0aXA6cC5kYi5nZXRUb29sdGlwKEUuaWQsdil8fCIiLGhhdmVDYWxsYmFjazpFLmhhdmVDYWxsYmFjayxsaW5rOkUubGluayx3aWR0aDpFLnR5cGU9PT0iZ3JvdXAiPzUwMDp2b2lkIDAsdHlwZTpFLnR5cGUscGFkZGluZzooKEg9RGUoKS5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDpILnBhZGRpbmcpPz8oKFk9RGUoKS5jbGFzcyk9PW51bGw/dm9pZCAwOlkucGFkZGluZyl9O2Euc2V0Tm9kZShFLmlkLFIpLHYmJmEuc2V0UGFyZW50KEUuaWQsdiksV3QuaW5mbygic2V0Tm9kZSIsUil9KX0sTFZlPWZ1bmN0aW9uKGksYSxmLHApe1d0LmluZm8oaSksaS5mb3JFYWNoKGZ1bmN0aW9uKHYsbSl7dmFyIFkscnQ7Y29uc3QgYj12LEU9IiIsQz17bGFiZWxTdHlsZToiIixzdHlsZToiIn0sQT1iLnRleHQsUD0wLEY9Im5vdGUiLGo9e2xhYmVsU3R5bGU6Qy5sYWJlbFN0eWxlLHNoYXBlOkYsbGFiZWxUZXh0OnZndChBKSxub3RlRGF0YTpiLHJ4OlAscnk6UCxjbGFzczpFLHN0eWxlOkMuc3R5bGUsaWQ6Yi5pZCxkb21JZDpiLmlkLHRvb2x0aXA6IiIsdHlwZToibm90ZSIscGFkZGluZzooKFk9RGUoKS5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDpZLnBhZGRpbmcpPz8oKHJ0PURlKCkuY2xhc3MpPT1udWxsP3ZvaWQgMDpydC5wYWRkaW5nKX07aWYoYS5zZXROb2RlKGIuaWQsaiksV3QuaW5mbygic2V0Tm9kZSIsaiksIWIuY2xhc3N8fCEoYi5jbGFzcyBpbiBwKSlyZXR1cm47Y29uc3QgUj1mK20sSD17aWQ6YGVkZ2VOb3RlJHtSfWAsY2xhc3NlczoicmVsYXRpb24iLHBhdHRlcm46ImRvdHRlZCIsYXJyb3doZWFkOiJub25lIixzdGFydExhYmVsUmlnaHQ6IiIsZW5kTGFiZWxMZWZ0OiIiLGFycm93VHlwZVN0YXJ0OiJub25lIixhcnJvd1R5cGVFbmQ6Im5vbmUiLHN0eWxlOiJmaWxsOm5vbmUiLGxhYmVsU3R5bGU6IiIsY3VydmU6WjIod2d0LmN1cnZlLGlnKX07YS5zZXRFZGdlKGIuaWQsYi5jbGFzcyxILFIpfSl9LE1WZT1mdW5jdGlvbihpLGEpe2NvbnN0IGY9RGUoKS5mbG93Y2hhcnQ7bGV0IHA9MDtpLmZvckVhY2goZnVuY3Rpb24odil7dmFyIGI7cCsrO2NvbnN0IG09e2NsYXNzZXM6InJlbGF0aW9uIixwYXR0ZXJuOnYucmVsYXRpb24ubGluZVR5cGU9PTE/ImRhc2hlZCI6InNvbGlkIixpZDoiaWQiK3AsYXJyb3doZWFkOnYudHlwZT09PSJhcnJvd19vcGVuIj8ibm9uZSI6Im5vcm1hbCIsc3RhcnRMYWJlbFJpZ2h0OnYucmVsYXRpb25UaXRsZTE9PT0ibm9uZSI/IiI6di5yZWxhdGlvblRpdGxlMSxlbmRMYWJlbExlZnQ6di5yZWxhdGlvblRpdGxlMj09PSJub25lIj8iIjp2LnJlbGF0aW9uVGl0bGUyLGFycm93VHlwZVN0YXJ0OkZSdCh2LnJlbGF0aW9uLnR5cGUxKSxhcnJvd1R5cGVFbmQ6RlJ0KHYucmVsYXRpb24udHlwZTIpLHN0eWxlOiJmaWxsOm5vbmUiLGxhYmVsU3R5bGU6IiIsY3VydmU6WjIoZj09bnVsbD92b2lkIDA6Zi5jdXJ2ZSxpZyl9O2lmKFd0LmluZm8obSx2KSx2LnN0eWxlIT09dm9pZCAwKXtjb25zdCBFPWVtKHYuc3R5bGUpO20uc3R5bGU9RS5zdHlsZSxtLmxhYmVsU3R5bGU9RS5sYWJlbFN0eWxlfXYudGV4dD12LnRpdGxlLHYudGV4dD09PXZvaWQgMD92LnN0eWxlIT09dm9pZCAwJiYobS5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIpOihtLmFycm93aGVhZFN0eWxlPSJmaWxsOiAjMzMzIixtLmxhYmVscG9zPSJjIiwoKGI9RGUoKS5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDpiLmh0bWxMYWJlbHMpPz9EZSgpLmh0bWxMYWJlbHM/KG0ubGFiZWxUeXBlPSJodG1sIixtLmxhYmVsPSc8c3BhbiBjbGFzcz0iZWRnZUxhYmVsIj4nK3YudGV4dCsiPC9zcGFuPiIpOihtLmxhYmVsVHlwZT0idGV4dCIsbS5sYWJlbD12LnRleHQucmVwbGFjZSh1aS5saW5lQnJlYWtSZWdleCxgCmApLHYuc3R5bGU9PT12b2lkIDAmJihtLnN0eWxlPW0uc3R5bGV8fCJzdHJva2U6ICMzMzM7IHN0cm9rZS13aWR0aDogMS41cHg7ZmlsbDpub25lIiksbS5sYWJlbFN0eWxlPW0ubGFiZWxTdHlsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpKSksYS5zZXRFZGdlKHYuaWQxLHYuaWQyLG0scCl9KX0sRFZlPWZ1bmN0aW9uKGkpe3dndD17Li4ud2d0LC4uLml9fSxJVmU9YXN5bmMgZnVuY3Rpb24oaSxhLGYscCl7V3QuaW5mbygiRHJhd2luZyBjbGFzcyAtICIsYSk7Y29uc3Qgdj1EZSgpLmZsb3djaGFydD8/RGUoKS5jbGFzcyxtPURlKCkuc2VjdXJpdHlMZXZlbDtXdC5pbmZvKCJjb25maWc6Iix2KTtjb25zdCBiPSh2PT1udWxsP3ZvaWQgMDp2Lm5vZGVTcGFjaW5nKT8/NTAsRT0odj09bnVsbD92b2lkIDA6di5yYW5rU3BhY2luZyk/PzUwLEM9bmV3IGwxKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6cC5kYi5nZXREaXJlY3Rpb24oKSxub2Rlc2VwOmIscmFua3NlcDpFLG1hcmdpbng6OCxtYXJnaW55Ojh9KS5zZXREZWZhdWx0RWRnZUxhYmVsKGZ1bmN0aW9uKCl7cmV0dXJue319KSxBPXAuZGIuZ2V0TmFtZXNwYWNlcygpLFA9cC5kYi5nZXRDbGFzc2VzKCksRj1wLmRiLmdldFJlbGF0aW9ucygpLGo9cC5kYi5nZXROb3RlcygpO1d0LmluZm8oRiksQVZlKEEsQyxhLHApLFBSdChQLEMsYSxwKSxNVmUoRixDKSxMVmUoaixDLEYubGVuZ3RoKzEsUCk7bGV0IFI7bT09PSJzYW5kYm94IiYmKFI9eHIoIiNpIithKSk7Y29uc3QgSD14cihtPT09InNhbmRib3giP1Iubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLFk9SC5zZWxlY3QoYFtpZD0iJHthfSJdYCkscnQ9SC5zZWxlY3QoIiMiK2ErIiBnIik7aWYoYXdhaXQgQTB0KHJ0LEMsWyJhZ2dyZWdhdGlvbiIsImV4dGVuc2lvbiIsImNvbXBvc2l0aW9uIiwiZGVwZW5kZW5jeSIsImxvbGxpcG9wIl0sImNsYXNzRGlhZ3JhbSIsYSksdG8uaW5zZXJ0VGl0bGUoWSwiY2xhc3NUaXRsZVRleHQiLCh2PT1udWxsP3ZvaWQgMDp2LnRpdGxlVG9wTWFyZ2luKT8/NSxwLmRiLmdldERpYWdyYW1UaXRsZSgpKSxzOShDLFksdj09bnVsbD92b2lkIDA6di5kaWFncmFtUGFkZGluZyx2PT1udWxsP3ZvaWQgMDp2LnVzZU1heFdpZHRoKSwhKHYhPW51bGwmJnYuaHRtbExhYmVscykpe2NvbnN0IEo9bT09PSJzYW5kYm94Ij9SLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50OmRvY3VtZW50LGl0PUoucXVlcnlTZWxlY3RvckFsbCgnW2lkPSInK2ErJyJdIC5lZGdlTGFiZWwgLmxhYmVsJyk7Zm9yKGNvbnN0IGZ0IG9mIGl0KXtjb25zdCBUdD1mdC5nZXRCQm94KCksa3Q9Si5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicmVjdCIpO2t0LnNldEF0dHJpYnV0ZSgicngiLDApLGt0LnNldEF0dHJpYnV0ZSgicnkiLDApLGt0LnNldEF0dHJpYnV0ZSgid2lkdGgiLFR0LndpZHRoKSxrdC5zZXRBdHRyaWJ1dGUoImhlaWdodCIsVHQuaGVpZ2h0KSxmdC5pbnNlcnRCZWZvcmUoa3QsZnQuZmlyc3RDaGlsZCl9fX07ZnVuY3Rpb24gRlJ0KGkpe2xldCBhO3N3aXRjaChpKXtjYXNlIDA6YT0iYWdncmVnYXRpb24iO2JyZWFrO2Nhc2UgMTphPSJleHRlbnNpb24iO2JyZWFrO2Nhc2UgMjphPSJjb21wb3NpdGlvbiI7YnJlYWs7Y2FzZSAzOmE9ImRlcGVuZGVuY3kiO2JyZWFrO2Nhc2UgNDphPSJsb2xsaXBvcCI7YnJlYWs7ZGVmYXVsdDphPSJub25lIn1yZXR1cm4gYX1jb25zdCBPVmU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpBUnQsZGI6TksscmVuZGVyZXI6e3NldENvbmY6RFZlLGRyYXc6SVZlfSxzdHlsZXM6TlJ0LGluaXQ6aT0+e2kuY2xhc3N8fChpLmNsYXNzPXt9KSxpLmNsYXNzLmFycm93TWFya2VyQWJzb2x1dGU9aS5hcnJvd01hcmtlckFic29sdXRlLE5LLmNsZWFyKCl9fX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgbWd0PWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24oQnQsdnQsT3QsVnQpe2ZvcihPdD1PdHx8e30sVnQ9QnQubGVuZ3RoO1Z0LS07T3RbQnRbVnRdXT12dCk7cmV0dXJuIE90fSxhPVsxLDJdLGY9WzEsM10scD1bMSw1XSx2PVsxLDddLG09WzIsNV0sYj1bMSwxNV0sRT1bMSwxN10sQz1bMSwyMV0sQT1bMSwyMl0sUD1bMSwyM10sRj1bMSwyNF0saj1bMSwzN10sUj1bMSwyNV0sSD1bMSwyNl0sWT1bMSwyN10scnQ9WzEsMjhdLEo9WzEsMjldLGl0PVsxLDMyXSxmdD1bMSwzM10sVHQ9WzEsMzRdLGt0PVsxLDM1XSxtdD1bMSwzNl0sY3Q9WzEsMzldLHl0PVsxLDQwXSxzdD1bMSw0MV0seHQ9WzEsNDJdLGh0PVsxLDM4XSxkdD1bMSw0NV0sQ3Q9WzEsNCw1LDE2LDE3LDE5LDIxLDIyLDI0LDI1LDI2LDI3LDI4LDI5LDMzLDM1LDM3LDM4LDQyLDUwLDUxLDUyLDUzLDU2LDYwXSx0dD1bMSw0LDUsMTQsMTUsMTYsMTcsMTksMjEsMjIsMjQsMjUsMjYsMjcsMjgsMjksMzMsMzUsMzcsMzgsNDIsNTAsNTEsNTIsNTMsNTYsNjBdLFB0PVsxLDQsNSw3LDE2LDE3LDE5LDIxLDIyLDI0LDI1LDI2LDI3LDI4LDI5LDMzLDM1LDM3LDM4LDQyLDUwLDUxLDUyLDUzLDU2LDYwXSxwdD1bNCw1LDE2LDE3LDE5LDIxLDIyLDI0LDI1LDI2LDI3LDI4LDI5LDMzLDM1LDM3LDM4LDQyLDUwLDUxLDUyLDUzLDU2LDYwXSxGdD17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsU1BBQ0U6NCxOTDo1LGRpcmVjdGl2ZTo2LFNEOjcsZG9jdW1lbnQ6OCxsaW5lOjksc3RhdGVtZW50OjEwLGNsYXNzRGVmU3RhdGVtZW50OjExLGNzc0NsYXNzU3RhdGVtZW50OjEyLGlkU3RhdGVtZW50OjEzLERFU0NSOjE0LCItLT4iOjE1LEhJREVfRU1QVFk6MTYsc2NhbGU6MTcsV0lEVEg6MTgsQ09NUE9TSVRfU1RBVEU6MTksU1RSVUNUX1NUQVJUOjIwLFNUUlVDVF9TVE9QOjIxLFNUQVRFX0RFU0NSOjIyLEFTOjIzLElEOjI0LEZPUks6MjUsSk9JTjoyNixDSE9JQ0U6MjcsQ09OQ1VSUkVOVDoyOCxub3RlOjI5LG5vdGVQb3NpdGlvbjozMCxOT1RFX1RFWFQ6MzEsZGlyZWN0aW9uOjMyLGFjY190aXRsZTozMyxhY2NfdGl0bGVfdmFsdWU6MzQsYWNjX2Rlc2NyOjM1LGFjY19kZXNjcl92YWx1ZTozNixhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjM3LGNsYXNzRGVmOjM4LENMQVNTREVGX0lEOjM5LENMQVNTREVGX1NUWUxFT1BUUzo0MCxERUZBVUxUOjQxLGNsYXNzOjQyLENMQVNTRU5USVRZX0lEUzo0MyxTVFlMRUNMQVNTOjQ0LG9wZW5EaXJlY3RpdmU6NDUsdHlwZURpcmVjdGl2ZTo0NixjbG9zZURpcmVjdGl2ZTo0NywiOiI6NDgsYXJnRGlyZWN0aXZlOjQ5LGRpcmVjdGlvbl90Yjo1MCxkaXJlY3Rpb25fYnQ6NTEsZGlyZWN0aW9uX3JsOjUyLGRpcmVjdGlvbl9scjo1Myxlb2w6NTQsIjsiOjU1LEVER0VfU1RBVEU6NTYsU1RZTEVfU0VQQVJBVE9SOjU3LGxlZnRfb2Y6NTgscmlnaHRfb2Y6NTksb3Blbl9kaXJlY3RpdmU6NjAsdHlwZV9kaXJlY3RpdmU6NjEsYXJnX2RpcmVjdGl2ZTo2MixjbG9zZV9kaXJlY3RpdmU6NjMsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IlNQQUNFIiw1OiJOTCIsNzoiU0QiLDE0OiJERVNDUiIsMTU6Ii0tPiIsMTY6IkhJREVfRU1QVFkiLDE3OiJzY2FsZSIsMTg6IldJRFRIIiwxOToiQ09NUE9TSVRfU1RBVEUiLDIwOiJTVFJVQ1RfU1RBUlQiLDIxOiJTVFJVQ1RfU1RPUCIsMjI6IlNUQVRFX0RFU0NSIiwyMzoiQVMiLDI0OiJJRCIsMjU6IkZPUksiLDI2OiJKT0lOIiwyNzoiQ0hPSUNFIiwyODoiQ09OQ1VSUkVOVCIsMjk6Im5vdGUiLDMxOiJOT1RFX1RFWFQiLDMzOiJhY2NfdGl0bGUiLDM0OiJhY2NfdGl0bGVfdmFsdWUiLDM1OiJhY2NfZGVzY3IiLDM2OiJhY2NfZGVzY3JfdmFsdWUiLDM3OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwzODoiY2xhc3NEZWYiLDM5OiJDTEFTU0RFRl9JRCIsNDA6IkNMQVNTREVGX1NUWUxFT1BUUyIsNDE6IkRFRkFVTFQiLDQyOiJjbGFzcyIsNDM6IkNMQVNTRU5USVRZX0lEUyIsNDQ6IlNUWUxFQ0xBU1MiLDQ4OiI6Iiw1MDoiZGlyZWN0aW9uX3RiIiw1MToiZGlyZWN0aW9uX2J0Iiw1MjoiZGlyZWN0aW9uX3JsIiw1MzoiZGlyZWN0aW9uX2xyIiw1NToiOyIsNTY6IkVER0VfU1RBVEUiLDU3OiJTVFlMRV9TRVBBUkFUT1IiLDU4OiJsZWZ0X29mIiw1OToicmlnaHRfb2YiLDYwOiJvcGVuX2RpcmVjdGl2ZSIsNjE6InR5cGVfZGlyZWN0aXZlIiw2MjoiYXJnX2RpcmVjdGl2ZSIsNjM6ImNsb3NlX2RpcmVjdGl2ZSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywyXSxbMywyXSxbMywyXSxbOCwwXSxbOCwyXSxbOSwyXSxbOSwxXSxbOSwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMl0sWzEwLDNdLFsxMCw0XSxbMTAsMV0sWzEwLDJdLFsxMCwxXSxbMTAsNF0sWzEwLDNdLFsxMCw2XSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDRdLFsxMCw0XSxbMTAsMV0sWzEwLDFdLFsxMCwyXSxbMTAsMl0sWzEwLDFdLFsxMSwzXSxbMTEsM10sWzEyLDNdLFs2LDNdLFs2LDVdLFszMiwxXSxbMzIsMV0sWzMyLDFdLFszMiwxXSxbNTQsMV0sWzU0LDFdLFsxMywxXSxbMTMsMV0sWzEzLDNdLFsxMywzXSxbMzAsMV0sWzMwLDFdLFs0NSwxXSxbNDYsMV0sWzQ5LDFdLFs0NywxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih2dCxPdCxWdCxxZSxfbixUZSxXbil7dmFyIEFlPVRlLmxlbmd0aC0xO3N3aXRjaChfbil7Y2FzZSA0OnJldHVybiBxZS5zZXRSb290RG9jKFRlW0FlXSksVGVbQWVdO2Nhc2UgNTp0aGlzLiQ9W107YnJlYWs7Y2FzZSA2OlRlW0FlXSE9Im5sIiYmKFRlW0FlLTFdLnB1c2goVGVbQWVdKSx0aGlzLiQ9VGVbQWUtMV0pO2JyZWFrO2Nhc2UgNzpjYXNlIDg6dGhpcy4kPVRlW0FlXTticmVhaztjYXNlIDk6dGhpcy4kPSJubCI7YnJlYWs7Y2FzZSAxMjp0aGlzLiQ9VGVbQWVdO2JyZWFrO2Nhc2UgMTM6Y29uc3QgRWU9VGVbQWUtMV07RWUuZGVzY3JpcHRpb249cWUudHJpbUNvbG9uKFRlW0FlXSksdGhpcy4kPUVlO2JyZWFrO2Nhc2UgMTQ6dGhpcy4kPXtzdG10OiJyZWxhdGlvbiIsc3RhdGUxOlRlW0FlLTJdLHN0YXRlMjpUZVtBZV19O2JyZWFrO2Nhc2UgMTU6Y29uc3QgSGU9cWUudHJpbUNvbG9uKFRlW0FlXSk7dGhpcy4kPXtzdG10OiJyZWxhdGlvbiIsc3RhdGUxOlRlW0FlLTNdLHN0YXRlMjpUZVtBZS0xXSxkZXNjcmlwdGlvbjpIZX07YnJlYWs7Y2FzZSAxOTp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpUZVtBZS0zXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjoiIixkb2M6VGVbQWUtMV19O2JyZWFrO2Nhc2UgMjA6dmFyIG5lPVRlW0FlXSxrZT1UZVtBZS0yXS50cmltKCk7aWYoVGVbQWVdLm1hdGNoKCI6Iikpe3ZhciBWZT1UZVtBZV0uc3BsaXQoIjoiKTtuZT1WZVswXSxrZT1ba2UsVmVbMV1dfXRoaXMuJD17c3RtdDoic3RhdGUiLGlkOm5lLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOmtlfTticmVhaztjYXNlIDIxOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOlRlW0FlLTNdLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOlRlW0FlLTVdLGRvYzpUZVtBZS0xXX07YnJlYWs7Y2FzZSAyMjp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpUZVtBZV0sdHlwZToiZm9yayJ9O2JyZWFrO2Nhc2UgMjM6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6VGVbQWVdLHR5cGU6ImpvaW4ifTticmVhaztjYXNlIDI0OnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOlRlW0FlXSx0eXBlOiJjaG9pY2UifTticmVhaztjYXNlIDI1OnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOnFlLmdldERpdmlkZXJJZCgpLHR5cGU6ImRpdmlkZXIifTticmVhaztjYXNlIDI2OnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOlRlW0FlLTFdLnRyaW0oKSxub3RlOntwb3NpdGlvbjpUZVtBZS0yXS50cmltKCksdGV4dDpUZVtBZV0udHJpbSgpfX07YnJlYWs7Y2FzZSAzMDp0aGlzLiQ9VGVbQWVdLnRyaW0oKSxxZS5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMzE6Y2FzZSAzMjp0aGlzLiQ9VGVbQWVdLnRyaW0oKSxxZS5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgMzM6Y2FzZSAzNDp0aGlzLiQ9e3N0bXQ6ImNsYXNzRGVmIixpZDpUZVtBZS0xXS50cmltKCksY2xhc3NlczpUZVtBZV0udHJpbSgpfTticmVhaztjYXNlIDM1OnRoaXMuJD17c3RtdDoiYXBwbHlDbGFzcyIsaWQ6VGVbQWUtMV0udHJpbSgpLHN0eWxlQ2xhc3M6VGVbQWVdLnRyaW0oKX07YnJlYWs7Y2FzZSAzODpxZS5zZXREaXJlY3Rpb24oIlRCIiksdGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJUQiJ9O2JyZWFrO2Nhc2UgMzk6cWUuc2V0RGlyZWN0aW9uKCJCVCIpLHRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiQlQifTticmVhaztjYXNlIDQwOnFlLnNldERpcmVjdGlvbigiUkwiKSx0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IlJMIn07YnJlYWs7Y2FzZSA0MTpxZS5zZXREaXJlY3Rpb24oIkxSIiksdGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJMUiJ9O2JyZWFrO2Nhc2UgNDQ6Y2FzZSA0NTp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpUZVtBZV0udHJpbSgpLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIifTticmVhaztjYXNlIDQ2OnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOlRlW0FlLTJdLnRyaW0oKSxjbGFzc2VzOltUZVtBZV0udHJpbSgpXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjoiIn07YnJlYWs7Y2FzZSA0Nzp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpUZVtBZS0yXS50cmltKCksY2xhc3NlczpbVGVbQWVdLnRyaW0oKV0sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246IiJ9O2JyZWFrO2Nhc2UgNTA6cWUucGFyc2VEaXJlY3RpdmUoIiUleyIsIm9wZW5fZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA1MTpxZS5wYXJzZURpcmVjdGl2ZShUZVtBZV0sInR5cGVfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA1MjpUZVtBZV09VGVbQWVdLnRyaW0oKS5yZXBsYWNlKC8nL2csJyInKSxxZS5wYXJzZURpcmVjdGl2ZShUZVtBZV0sImFyZ19kaXJlY3RpdmUiKTticmVhaztjYXNlIDUzOnFlLnBhcnNlRGlyZWN0aXZlKCJ9JSUiLCJjbG9zZV9kaXJlY3RpdmUiLCJzdGF0ZSIpO2JyZWFrfX0sdGFibGU6W3szOjEsNDphLDU6Ziw2OjQsNzpwLDQ1OjYsNjA6dn0sezE6WzNdfSx7Mzo4LDQ6YSw1OmYsNjo0LDc6cCw0NTo2LDYwOnZ9LHszOjksNDphLDU6Ziw2OjQsNzpwLDQ1OjYsNjA6dn0sezM6MTAsNDphLDU6Ziw2OjQsNzpwLDQ1OjYsNjA6dn0saShbMSw0LDUsMTYsMTcsMTksMjIsMjQsMjUsMjYsMjcsMjgsMjksMzMsMzUsMzcsMzgsNDIsNTAsNTEsNTIsNTMsNTYsNjBdLG0sezg6MTF9KSx7NDY6MTIsNjE6WzEsMTNdfSx7NjE6WzIsNTBdfSx7MTpbMiwxXX0sezE6WzIsMl19LHsxOlsyLDNdfSx7MTpbMiw0XSw0OmIsNTpFLDY6MzAsOToxNCwxMDoxNiwxMToxOCwxMjoxOSwxMzoyMCwxNjpDLDE3OkEsMTk6UCwyMjpGLDI0OmosMjU6UiwyNjpILDI3OlksMjg6cnQsMjk6SiwzMjozMSwzMzppdCwzNTpmdCwzNzpUdCwzODprdCw0MjptdCw0NTo2LDUwOmN0LDUxOnl0LDUyOnN0LDUzOnh0LDU2Omh0LDYwOnZ9LHs0Nzo0Myw0ODpbMSw0NF0sNjM6ZHR9LGkoWzQ4LDYzXSxbMiw1MV0pLGkoQ3QsWzIsNl0pLHs2OjMwLDEwOjQ2LDExOjE4LDEyOjE5LDEzOjIwLDE2OkMsMTc6QSwxOTpQLDIyOkYsMjQ6aiwyNTpSLDI2OkgsMjc6WSwyODpydCwyOTpKLDMyOjMxLDMzOml0LDM1OmZ0LDM3OlR0LDM4Omt0LDQyOm10LDQ1OjYsNTA6Y3QsNTE6eXQsNTI6c3QsNTM6eHQsNTY6aHQsNjA6dn0saShDdCxbMiw4XSksaShDdCxbMiw5XSksaShDdCxbMiwxMF0pLGkoQ3QsWzIsMTFdKSxpKEN0LFsyLDEyXSx7MTQ6WzEsNDddLDE1OlsxLDQ4XX0pLGkoQ3QsWzIsMTZdKSx7MTg6WzEsNDldfSxpKEN0LFsyLDE4XSx7MjA6WzEsNTBdfSksezIzOlsxLDUxXX0saShDdCxbMiwyMl0pLGkoQ3QsWzIsMjNdKSxpKEN0LFsyLDI0XSksaShDdCxbMiwyNV0pLHszMDo1MiwzMTpbMSw1M10sNTg6WzEsNTRdLDU5OlsxLDU1XX0saShDdCxbMiwyOF0pLGkoQ3QsWzIsMjldKSx7MzQ6WzEsNTZdfSx7MzY6WzEsNTddfSxpKEN0LFsyLDMyXSksezM5OlsxLDU4XSw0MTpbMSw1OV19LHs0MzpbMSw2MF19LGkodHQsWzIsNDRdLHs1NzpbMSw2MV19KSxpKHR0LFsyLDQ1XSx7NTc6WzEsNjJdfSksaShDdCxbMiwzOF0pLGkoQ3QsWzIsMzldKSxpKEN0LFsyLDQwXSksaShDdCxbMiw0MV0pLGkoUHQsWzIsMzZdKSx7NDk6NjMsNjI6WzEsNjRdfSxpKFB0LFsyLDUzXSksaShDdCxbMiw3XSksaShDdCxbMiwxM10pLHsxMzo2NSwyNDpqLDU2Omh0fSxpKEN0LFsyLDE3XSksaShwdCxtLHs4OjY2fSksezI0OlsxLDY3XX0sezI0OlsxLDY4XX0sezIzOlsxLDY5XX0sezI0OlsyLDQ4XX0sezI0OlsyLDQ5XX0saShDdCxbMiwzMF0pLGkoQ3QsWzIsMzFdKSx7NDA6WzEsNzBdfSx7NDA6WzEsNzFdfSx7NDQ6WzEsNzJdfSx7MjQ6WzEsNzNdfSx7MjQ6WzEsNzRdfSx7NDc6NzUsNjM6ZHR9LHs2MzpbMiw1Ml19LGkoQ3QsWzIsMTRdLHsxNDpbMSw3Nl19KSx7NDpiLDU6RSw2OjMwLDk6MTQsMTA6MTYsMTE6MTgsMTI6MTksMTM6MjAsMTY6QywxNzpBLDE5OlAsMjE6WzEsNzddLDIyOkYsMjQ6aiwyNTpSLDI2OkgsMjc6WSwyODpydCwyOTpKLDMyOjMxLDMzOml0LDM1OmZ0LDM3OlR0LDM4Omt0LDQyOm10LDQ1OjYsNTA6Y3QsNTE6eXQsNTI6c3QsNTM6eHQsNTY6aHQsNjA6dn0saShDdCxbMiwyMF0sezIwOlsxLDc4XX0pLHszMTpbMSw3OV19LHsyNDpbMSw4MF19LGkoQ3QsWzIsMzNdKSxpKEN0LFsyLDM0XSksaShDdCxbMiwzNV0pLGkodHQsWzIsNDZdKSxpKHR0LFsyLDQ3XSksaShQdCxbMiwzN10pLGkoQ3QsWzIsMTVdKSxpKEN0LFsyLDE5XSksaShwdCxtLHs4OjgxfSksaShDdCxbMiwyNl0pLGkoQ3QsWzIsMjddKSx7NDpiLDU6RSw2OjMwLDk6MTQsMTA6MTYsMTE6MTgsMTI6MTksMTM6MjAsMTY6QywxNzpBLDE5OlAsMjE6WzEsODJdLDIyOkYsMjQ6aiwyNTpSLDI2OkgsMjc6WSwyODpydCwyOTpKLDMyOjMxLDMzOml0LDM1OmZ0LDM3OlR0LDM4Omt0LDQyOm10LDQ1OjYsNTA6Y3QsNTE6eXQsNTI6c3QsNTM6eHQsNTY6aHQsNjA6dn0saShDdCxbMiwyMV0pXSxkZWZhdWx0QWN0aW9uczp7NzpbMiw1MF0sODpbMiwxXSw5OlsyLDJdLDEwOlsyLDNdLDU0OlsyLDQ4XSw1NTpbMiw0OV0sNjQ6WzIsNTJdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKHZ0LE90KXtpZihPdC5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKHZ0KTtlbHNle3ZhciBWdD1uZXcgRXJyb3IodnQpO3Rocm93IFZ0Lmhhc2g9T3QsVnR9fSxwYXJzZTpmdW5jdGlvbih2dCl7dmFyIE90PXRoaXMsVnQ9WzBdLHFlPVtdLF9uPVtudWxsXSxUZT1bXSxXbj10aGlzLnRhYmxlLEFlPSIiLG5lPTAsa2U9MCxWZT0yLEVlPTEsSGU9VGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksQ2U9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSwkZT17eXk6e319O2Zvcih2YXIgeWUgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSx5ZSkmJigkZS55eVt5ZV09dGhpcy55eVt5ZV0pO0NlLnNldElucHV0KHZ0LCRlLnl5KSwkZS55eS5sZXhlcj1DZSwkZS55eS5wYXJzZXI9dGhpcyx0eXBlb2YgQ2UueXlsbG9jPiJ1IiYmKENlLnl5bGxvYz17fSk7dmFyIGZuPUNlLnl5bGxvYztUZS5wdXNoKGZuKTt2YXIgWXQ9Q2Uub3B0aW9ucyYmQ2Uub3B0aW9ucy5yYW5nZXM7dHlwZW9mICRlLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPSRlLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIE1pKCl7dmFyIExpO3JldHVybiBMaT1xZS5wb3AoKXx8Q2UubGV4KCl8fEVlLHR5cGVvZiBMaSE9Im51bWJlciImJihMaSBpbnN0YW5jZW9mIEFycmF5JiYocWU9TGksTGk9cWUucG9wKCkpLExpPU90LnN5bWJvbHNfW0xpXXx8TGkpLExpfWZvcih2YXIgcXQsemksU2Usa2ksUmk9e30scGksYmksZG4sTm47Oyl7aWYoemk9VnRbVnQubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbemldP1NlPXRoaXMuZGVmYXVsdEFjdGlvbnNbemldOigocXQ9PT1udWxsfHx0eXBlb2YgcXQ+InUiKSYmKHF0PU1pKCkpLFNlPVduW3ppXSYmV25bemldW3F0XSksdHlwZW9mIFNlPiJ1Inx8IVNlLmxlbmd0aHx8IVNlWzBdKXt2YXIgV3I9IiI7Tm49W107Zm9yKHBpIGluIFduW3ppXSl0aGlzLnRlcm1pbmFsc19bcGldJiZwaT5WZSYmTm4ucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW3BpXSsiJyIpO0NlLnNob3dQb3NpdGlvbj9Xcj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhuZSsxKStgOgpgK0NlLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArTm4uam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1txdF18fHF0KSsiJyI6V3I9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisobmUrMSkrIjogVW5leHBlY3RlZCAiKyhxdD09RWU/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bcXRdfHxxdCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoV3Ise3RleHQ6Q2UubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3F0XXx8cXQsbGluZTpDZS55eWxpbmVubyxsb2M6Zm4sZXhwZWN0ZWQ6Tm59KX1pZihTZVswXWluc3RhbmNlb2YgQXJyYXkmJlNlLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIremkrIiwgdG9rZW46ICIrcXQpO3N3aXRjaChTZVswXSl7Y2FzZSAxOlZ0LnB1c2gocXQpLF9uLnB1c2goQ2UueXl0ZXh0KSxUZS5wdXNoKENlLnl5bGxvYyksVnQucHVzaChTZVsxXSkscXQ9bnVsbCxrZT1DZS55eWxlbmcsQWU9Q2UueXl0ZXh0LG5lPUNlLnl5bGluZW5vLGZuPUNlLnl5bGxvYzticmVhaztjYXNlIDI6aWYoYmk9dGhpcy5wcm9kdWN0aW9uc19bU2VbMV1dWzFdLFJpLiQ9X25bX24ubGVuZ3RoLWJpXSxSaS5fJD17Zmlyc3RfbGluZTpUZVtUZS5sZW5ndGgtKGJpfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6VGVbVGUubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46VGVbVGUubGVuZ3RoLShiaXx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpUZVtUZS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LFl0JiYoUmkuXyQucmFuZ2U9W1RlW1RlLmxlbmd0aC0oYml8fDEpXS5yYW5nZVswXSxUZVtUZS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxraT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoUmksW0FlLGtlLG5lLCRlLnl5LFNlWzFdLF9uLFRlXS5jb25jYXQoSGUpKSx0eXBlb2Yga2k8InUiKXJldHVybiBraTtiaSYmKFZ0PVZ0LnNsaWNlKDAsLTEqYmkqMiksX249X24uc2xpY2UoMCwtMSpiaSksVGU9VGUuc2xpY2UoMCwtMSpiaSkpLFZ0LnB1c2godGhpcy5wcm9kdWN0aW9uc19bU2VbMV1dWzBdKSxfbi5wdXNoKFJpLiQpLFRlLnB1c2goUmkuXyQpLGRuPVduW1Z0W1Z0Lmxlbmd0aC0yXV1bVnRbVnQubGVuZ3RoLTFdXSxWdC5wdXNoKGRuKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sWD1mdW5jdGlvbigpe3ZhciBCdD17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihPdCxWdCl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihPdCxWdCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoT3QpfSxzZXRJbnB1dDpmdW5jdGlvbih2dCxPdCl7cmV0dXJuIHRoaXMueXk9T3R8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXZ0LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciB2dD10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9dnQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXZ0LHRoaXMubWF0Y2hlZCs9dnQ7dmFyIE90PXZ0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gT3Q/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHZ0fSx1bnB1dDpmdW5jdGlvbih2dCl7dmFyIE90PXZ0Lmxlbmd0aCxWdD12dC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXZ0K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1PdCksdGhpcy5vZmZzZXQtPU90O3ZhciBxZT10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxWdC5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPVZ0Lmxlbmd0aC0xKTt2YXIgX249dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOlZ0PyhWdC5sZW5ndGg9PT1xZS5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3FlW3FlLmxlbmd0aC1WdC5sZW5ndGhdLmxlbmd0aC1WdFswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLU90fSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W19uWzBdLF9uWzBdK3RoaXMueXlsZW5nLU90XSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24odnQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh2dCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdnQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybih2dC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Z0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIHZ0PXRoaXMubWF0Y2g7cmV0dXJuIHZ0Lmxlbmd0aDwyMCYmKHZ0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC12dC5sZW5ndGgpKSwodnQuc3Vic3RyKDAsMjApKyh2dC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHZ0PXRoaXMucGFzdElucHV0KCksT3Q9bmV3IEFycmF5KHZ0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHZ0K3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtPdCsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24odnQsT3Qpe3ZhciBWdCxxZSxfbjtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoX249e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoX24ueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSkscWU9dnRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLHFlJiYodGhpcy55eWxpbmVubys9cWUubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46cWU/cWVbcWUubGVuZ3RoLTFdLmxlbmd0aC1xZVtxZS5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit2dFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz12dFswXSx0aGlzLm1hdGNoKz12dFswXSx0aGlzLm1hdGNoZXM9dnQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UodnRbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXZ0WzBdLFZ0PXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLE90LHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLFZ0KXJldHVybiBWdDtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgVGUgaW4gX24pdGhpc1tUZV09X25bVGVdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIHZ0LE90LFZ0LHFlO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIF9uPXRoaXMuX2N1cnJlbnRSdWxlcygpLFRlPTA7VGU8X24ubGVuZ3RoO1RlKyspaWYoVnQ9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tfbltUZV1dKSxWdCYmKCFPdHx8VnRbMF0ubGVuZ3RoPk90WzBdLmxlbmd0aCkpe2lmKE90PVZ0LHFlPVRlLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKHZ0PXRoaXMudGVzdF9tYXRjaChWdCxfbltUZV0pLHZ0IT09ITEpcmV0dXJuIHZ0O2lmKHRoaXMuX2JhY2t0cmFjayl7T3Q9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gT3Q/KHZ0PXRoaXMudGVzdF9tYXRjaChPdCxfbltxZV0pLHZ0IT09ITE/dnQ6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciBPdD10aGlzLm5leHQoKTtyZXR1cm4gT3R8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKE90KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goT3QpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3ZhciBPdD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBPdD4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKE90KXtyZXR1cm4gT3Q9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhPdHx8MCksT3Q+PTA/dGhpcy5jb25kaXRpb25TdGFja1tPdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24oT3Qpe3RoaXMuYmVnaW4oT3QpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKE90LFZ0LHFlLF9uKXtzd2l0Y2gocWUpe2Nhc2UgMDpyZXR1cm4gNDE7Y2FzZSAxOnJldHVybiA1MDtjYXNlIDI6cmV0dXJuIDUxO2Nhc2UgMzpyZXR1cm4gNTI7Y2FzZSA0OnJldHVybiA1MztjYXNlIDU6cmV0dXJuIHRoaXMuYmVnaW4oIm9wZW5fZGlyZWN0aXZlIiksNjA7Y2FzZSA2OnJldHVybiB0aGlzLmJlZ2luKCJ0eXBlX2RpcmVjdGl2ZSIpLDYxO2Nhc2UgNzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImFyZ19kaXJlY3RpdmUiKSw0ODtjYXNlIDg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksNjM7Y2FzZSA5OnJldHVybiA2MjtjYXNlIDEwOmJyZWFrO2Nhc2UgMTE6YnJlYWs7Y2FzZSAxMjpyZXR1cm4gNTtjYXNlIDEzOmJyZWFrO2Nhc2UgMTQ6YnJlYWs7Y2FzZSAxNTpicmVhaztjYXNlIDE2OmJyZWFrO2Nhc2UgMTc6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJTQ0FMRSIpLDE3O2Nhc2UgMTg6cmV0dXJuIDE4O2Nhc2UgMTk6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjA6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDMzO2Nhc2UgMjE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDIyOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwzNTtjYXNlIDIzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7Y2FzZSAyNDp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAyNTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyNjpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSAyNzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIkNMQVNTREVGIiksMzg7Y2FzZSAyODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJDTEFTU0RFRklEIiksIkRFRkFVTFRfQ0xBU1NERUZfSUQiO2Nhc2UgMjk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiQ0xBU1NERUZJRCIpLDM5O2Nhc2UgMzA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw0MDtjYXNlIDMxOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiQ0xBU1MiKSw0MjtjYXNlIDMyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIkNMQVNTX1NUWUxFIiksNDM7Y2FzZSAzMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDQ0O2Nhc2UgMzQ6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJTQ0FMRSIpLDE3O2Nhc2UgMzU6cmV0dXJuIDE4O2Nhc2UgMzY6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzc6dGhpcy5wdXNoU3RhdGUoIlNUQVRFIik7YnJlYWs7Y2FzZSAzODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLFZ0Lnl5dGV4dD1WdC55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDI1O2Nhc2UgMzk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxWdC55eXRleHQ9VnQueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwyNjtjYXNlIDQwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksVnQueXl0ZXh0PVZ0Lnl5dGV4dC5zbGljZSgwLC0xMCkudHJpbSgpLDI3O2Nhc2UgNDE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxWdC55eXRleHQ9VnQueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwyNTtjYXNlIDQyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksVnQueXl0ZXh0PVZ0Lnl5dGV4dC5zbGljZSgwLC04KS50cmltKCksMjY7Y2FzZSA0MzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLFZ0Lnl5dGV4dD1WdC55eXRleHQuc2xpY2UoMCwtMTApLnRyaW0oKSwyNztjYXNlIDQ0OnJldHVybiA1MDtjYXNlIDQ1OnJldHVybiA1MTtjYXNlIDQ2OnJldHVybiA1MjtjYXNlIDQ3OnJldHVybiA1MztjYXNlIDQ4OnRoaXMucHVzaFN0YXRlKCJTVEFURV9TVFJJTkciKTticmVhaztjYXNlIDQ5OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiU1RBVEVfSUQiKSwiQVMiO2Nhc2UgNTA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiSUQiO2Nhc2UgNTE6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNTI6cmV0dXJuIlNUQVRFX0RFU0NSIjtjYXNlIDUzOnJldHVybiAxOTtjYXNlIDU0OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDU1OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoInN0cnVjdCIpLDIwO2Nhc2UgNTY6YnJlYWs7Y2FzZSA1NzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDIxO2Nhc2UgNTg6YnJlYWs7Y2FzZSA1OTpyZXR1cm4gdGhpcy5iZWdpbigiTk9URSIpLDI5O2Nhc2UgNjA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiTk9URV9JRCIpLDU4O2Nhc2UgNjE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiTk9URV9JRCIpLDU5O2Nhc2UgNjI6dGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJGTE9BVElOR19OT1RFIik7YnJlYWs7Y2FzZSA2MzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJGTE9BVElOR19OT1RFX0lEIiksIkFTIjtjYXNlIDY0OmJyZWFrO2Nhc2UgNjU6cmV0dXJuIk5PVEVfVEVYVCI7Y2FzZSA2NjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJJRCI7Y2FzZSA2NzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJOT1RFX1RFWFQiKSwyNDtjYXNlIDY4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksVnQueXl0ZXh0PVZ0Lnl5dGV4dC5zdWJzdHIoMikudHJpbSgpLDMxO2Nhc2UgNjk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxWdC55eXRleHQ9VnQueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwzMTtjYXNlIDcwOnJldHVybiA3O2Nhc2UgNzE6cmV0dXJuIDc7Y2FzZSA3MjpyZXR1cm4gMTY7Y2FzZSA3MzpyZXR1cm4gNTY7Y2FzZSA3NDpyZXR1cm4gMjQ7Y2FzZSA3NTpyZXR1cm4gVnQueXl0ZXh0PVZ0Lnl5dGV4dC50cmltKCksMTQ7Y2FzZSA3NjpyZXR1cm4gMTU7Y2FzZSA3NzpyZXR1cm4gMjg7Y2FzZSA3ODpyZXR1cm4gNTc7Y2FzZSA3OTpyZXR1cm4gNTtjYXNlIDgwOnJldHVybiJJTlZBTElEIn19LHJ1bGVzOlsvXig/OmRlZmF1bHRcYikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrVEJbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0JUW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrTFJbXlxuXSopL2ksL14oPzolJVx7KS9pLC9eKD86KCg/Oig/IVx9JSUpW146Ll0pKikpL2ksL14oPzo6KS9pLC9eKD86XH0lJSkvaSwvXig/OigoPzooPyFcfSUlKS58XG4pKikpL2ksL14oPzolJSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbXG5dKykvaSwvXig/Oltcc10rKS9pLC9eKD86KCg/IVxuKVxzKSspL2ksL14oPzojW15cbl0qKS9pLC9eKD86JVteXG5dKikvaSwvXig/OnNjYWxlXHMrKS9pLC9eKD86XGQrKS9pLC9eKD86XHMrd2lkdGhcYikvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86Y2xhc3NEZWZccyspL2ksL14oPzpERUZBVUxUXHMrKS9pLC9eKD86XHcrXHMrKS9pLC9eKD86W15cbl0qKS9pLC9eKD86Y2xhc3NccyspL2ksL14oPzooXHcrKSsoKCxccypcdyspKikpL2ksL14oPzpbXlxuXSopL2ksL14oPzpzY2FsZVxzKykvaSwvXig/OlxkKykvaSwvXig/OlxzK3dpZHRoXGIpL2ksL14oPzpzdGF0ZVxzKykvaSwvXig/Oi4qPDxmb3JrPj4pL2ksL14oPzouKjw8am9pbj4+KS9pLC9eKD86Lio8PGNob2ljZT4+KS9pLC9eKD86LipcW1xbZm9ya1xdXF0pL2ksL14oPzouKlxbXFtqb2luXF1cXSkvaSwvXig/Oi4qXFtcW2Nob2ljZVxdXF0pL2ksL14oPzouKmRpcmVjdGlvblxzK1RCW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytCVFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrUkxbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0xSW15cbl0qKS9pLC9eKD86WyJdKS9pLC9eKD86XHMqYXNccyspL2ksL14oPzpbXlxuXHtdKikvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86W15cblxzXHtdKykvaSwvXig/OlxuKS9pLC9eKD86XHspL2ksL14oPzolJSg/IVx7KVteXG5dKikvaSwvXig/Olx9KS9pLC9eKD86W1xuXSkvaSwvXig/Om5vdGVccyspL2ksL14oPzpsZWZ0IG9mXGIpL2ksL14oPzpyaWdodCBvZlxiKS9pLC9eKD86IikvaSwvXig/OlxzKmFzXHMqKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbXlxuXSopL2ksL14oPzpccypbXjpcblxzXC1dKykvaSwvXig/OlxzKjpbXjpcbjtdKykvaSwvXig/Oltcc1xTXSo/ZW5kIG5vdGVcYikvaSwvXig/OnN0YXRlRGlhZ3JhbVxzKykvaSwvXig/OnN0YXRlRGlhZ3JhbS12MlxzKykvaSwvXig/OmhpZGUgZW1wdHkgZGVzY3JpcHRpb25cYikvaSwvXig/OlxbXCpcXSkvaSwvXig/OlteOlxuXHNcLVx7XSspL2ksL14oPzpccyo6W146XG47XSspL2ksL14oPzotLT4pL2ksL14oPzotLSkvaSwvXig/Ojo6OikvaSwvXig/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOntMSU5FOntydWxlczpbMTQsMTVdLGluY2x1c2l2ZTohMX0sY2xvc2VfZGlyZWN0aXZlOntydWxlczpbMTQsMTVdLGluY2x1c2l2ZTohMX0sYXJnX2RpcmVjdGl2ZTp7cnVsZXM6WzgsOSwxNCwxNV0saW5jbHVzaXZlOiExfSx0eXBlX2RpcmVjdGl2ZTp7cnVsZXM6WzcsOCwxNCwxNV0saW5jbHVzaXZlOiExfSxvcGVuX2RpcmVjdGl2ZTp7cnVsZXM6WzYsMTQsMTVdLGluY2x1c2l2ZTohMX0sc3RydWN0OntydWxlczpbMTQsMTUsMjcsMzEsMzcsNDQsNDUsNDYsNDcsNTYsNTcsNTgsNTksNzMsNzQsNzUsNzYsNzddLGluY2x1c2l2ZTohMX0sRkxPQVRJTkdfTk9URV9JRDp7cnVsZXM6WzY2XSxpbmNsdXNpdmU6ITF9LEZMT0FUSU5HX05PVEU6e3J1bGVzOls2Myw2NCw2NV0saW5jbHVzaXZlOiExfSxOT1RFX1RFWFQ6e3J1bGVzOls2OCw2OV0saW5jbHVzaXZlOiExfSxOT1RFX0lEOntydWxlczpbNjddLGluY2x1c2l2ZTohMX0sTk9URTp7cnVsZXM6WzYwLDYxLDYyXSxpbmNsdXNpdmU6ITF9LENMQVNTX1NUWUxFOntydWxlczpbMzNdLGluY2x1c2l2ZTohMX0sQ0xBU1M6e3J1bGVzOlszMl0saW5jbHVzaXZlOiExfSxDTEFTU0RFRklEOntydWxlczpbMzBdLGluY2x1c2l2ZTohMX0sQ0xBU1NERUY6e3J1bGVzOlsyOCwyOV0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbMjUsMjZdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbMjNdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbMjFdLGluY2x1c2l2ZTohMX0sU0NBTEU6e3J1bGVzOlsxOCwxOSwzNSwzNl0saW5jbHVzaXZlOiExfSxBTElBUzp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxTVEFURV9JRDp7cnVsZXM6WzUwXSxpbmNsdXNpdmU6ITF9LFNUQVRFX1NUUklORzp7cnVsZXM6WzUxLDUyXSxpbmNsdXNpdmU6ITF9LEZPUktfU1RBVEU6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sU1RBVEU6e3J1bGVzOlsxNCwxNSwzOCwzOSw0MCw0MSw0Miw0Myw0OCw0OSw1Myw1NCw1NV0saW5jbHVzaXZlOiExfSxJRDp7cnVsZXM6WzE0LDE1XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNSwxMCwxMSwxMiwxMywxNSwxNiwxNywyMCwyMiwyNCwyNywzMSwzNCwzNyw1NSw1OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3OCw3OSw4MF0saW5jbHVzaXZlOiEwfX19O3JldHVybiBCdH0oKTtGdC5sZXhlcj1YO2Z1bmN0aW9uIFJ0KCl7dGhpcy55eT17fX1yZXR1cm4gUnQucHJvdG90eXBlPUZ0LEZ0LlBhcnNlcj1SdCxuZXcgUnR9KCk7bWd0LnBhcnNlcj1tZ3Q7Y29uc3QgQlJ0PW1ndCxOVmU9IkxSIixQVmU9IlRCIixCSz0ic3RhdGUiLHlndD0icmVsYXRpb24iLEZWZT0iY2xhc3NEZWYiLEJWZT0iYXBwbHlDbGFzcyIsalA9ImRlZmF1bHQiLFJSdD0iZGl2aWRlciIseGd0PSJbKl0iLGpSdD0ic3RhcnQiLCRSdD14Z3QselJ0PSJlbmQiLHFSdD0iY29sb3IiLEhSdD0iZmlsbCIsUlZlPSJiZ0ZpbGwiLGpWZT0iLCI7ZnVuY3Rpb24gVlJ0KCl7cmV0dXJue319bGV0IEdSdD1OVmUsUks9W10sJFA9VlJ0KCk7Y29uc3QgVVJ0PSgpPT4oe3JlbGF0aW9uczpbXSxzdGF0ZXM6e30sZG9jdW1lbnRzOnt9fSk7bGV0IGpLPXtyb290OlVSdCgpfSxFMD1qSy5yb290LHpQPTAsV1J0PTA7Y29uc3QgJFZlPXtMSU5FOjAsRE9UVEVEX0xJTkU6MX0selZlPXtBR0dSRUdBVElPTjowLEVYVEVOU0lPTjoxLENPTVBPU0lUSU9OOjIsREVQRU5ERU5DWTozfSwkSz1pPT5KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGkpKSxxVmU9ZnVuY3Rpb24oaSxhLGYpe0oxLnBhcnNlRGlyZWN0aXZlKHRoaXMsaSxhLGYpfSxIVmU9aT0+e1d0LmluZm8oIlNldHRpbmcgcm9vdCBkb2MiLGkpLFJLPWl9LFZWZT0oKT0+Uksseks9KGksYSxmKT0+e2lmKGEuc3RtdD09PXlndCl6SyhpLGEuc3RhdGUxLCEwKSx6SyhpLGEuc3RhdGUyLCExKTtlbHNlIGlmKGEuc3RtdD09PUJLJiYoYS5pZD09PSJbKl0iPyhhLmlkPWY/aS5pZCsiX3N0YXJ0IjppLmlkKyJfZW5kIixhLnN0YXJ0PWYpOmEuaWQ9YS5pZC50cmltKCkpLGEuZG9jKXtjb25zdCBwPVtdO2xldCB2PVtdLG07Zm9yKG09MDttPGEuZG9jLmxlbmd0aDttKyspaWYoYS5kb2NbbV0udHlwZT09PVJSdCl7Y29uc3QgYj0kSyhhLmRvY1ttXSk7Yi5kb2M9JEsodikscC5wdXNoKGIpLHY9W119ZWxzZSB2LnB1c2goYS5kb2NbbV0pO2lmKHAubGVuZ3RoPjAmJnYubGVuZ3RoPjApe2NvbnN0IGI9e3N0bXQ6QkssaWQ6Ukl0KCksdHlwZToiZGl2aWRlciIsZG9jOiRLKHYpfTtwLnB1c2goJEsoYikpLGEuZG9jPXB9YS5kb2MuZm9yRWFjaChiPT56SyhhLGIsITApKX19LEdWZT0oKT0+KHpLKHtpZDoicm9vdCJ9LHtpZDoicm9vdCIsZG9jOlJLfSwhMCkse2lkOiJyb290Iixkb2M6Ukt9KSxVVmU9aT0+e2xldCBhO2kuZG9jP2E9aS5kb2M6YT1pLFd0LmluZm8oYSksS1J0KCEwKSxXdC5pbmZvKCJFeHRyYWN0IixhKSxhLmZvckVhY2goZj0+e3N3aXRjaChmLnN0bXQpe2Nhc2UgQks6azkoZi5pZC50cmltKCksZi50eXBlLGYuZG9jLGYuZGVzY3JpcHRpb24sZi5ub3RlLGYuY2xhc3NlcyxmLnN0eWxlcyxmLnRleHRTdHlsZXMpO2JyZWFrO2Nhc2UgeWd0OllSdChmLnN0YXRlMSxmLnN0YXRlMixmLmRlc2NyaXB0aW9uKTticmVhaztjYXNlIEZWZTpYUnQoZi5pZC50cmltKCksZi5jbGFzc2VzKTticmVhaztjYXNlIEJWZTpfZ3QoZi5pZC50cmltKCksZi5zdHlsZUNsYXNzKTticmVha319KX0sazk9ZnVuY3Rpb24oaSxhPWpQLGY9bnVsbCxwPW51bGwsdj1udWxsLG09bnVsbCxiPW51bGwsRT1udWxsKXtjb25zdCBDPWk9PW51bGw/dm9pZCAwOmkudHJpbSgpO0UwLnN0YXRlc1tDXT09PXZvaWQgMD8oV3QuaW5mbygiQWRkaW5nIHN0YXRlICIsQyxwKSxFMC5zdGF0ZXNbQ109e2lkOkMsZGVzY3JpcHRpb25zOltdLHR5cGU6YSxkb2M6Zixub3RlOnYsY2xhc3NlczpbXSxzdHlsZXM6W10sdGV4dFN0eWxlczpbXX0pOihFMC5zdGF0ZXNbQ10uZG9jfHwoRTAuc3RhdGVzW0NdLmRvYz1mKSxFMC5zdGF0ZXNbQ10udHlwZXx8KEUwLnN0YXRlc1tDXS50eXBlPWEpKSxwJiYoV3QuaW5mbygiU2V0dGluZyBzdGF0ZSBkZXNjcmlwdGlvbiIsQyxwKSx0eXBlb2YgcD09InN0cmluZyImJlRndChDLHAudHJpbSgpKSx0eXBlb2YgcD09Im9iamVjdCImJnAuZm9yRWFjaChBPT5UZ3QoQyxBLnRyaW0oKSkpKSx2JiYoRTAuc3RhdGVzW0NdLm5vdGU9dixFMC5zdGF0ZXNbQ10ubm90ZS50ZXh0PXVpLnNhbml0aXplVGV4dChFMC5zdGF0ZXNbQ10ubm90ZS50ZXh0LERlKCkpKSxtJiYoV3QuaW5mbygiU2V0dGluZyBzdGF0ZSBjbGFzc2VzIixDLG0pLCh0eXBlb2YgbT09InN0cmluZyI/W21dOm0pLmZvckVhY2goUD0+X2d0KEMsUC50cmltKCkpKSksYiYmKFd0LmluZm8oIlNldHRpbmcgc3RhdGUgc3R5bGVzIixDLGIpLCh0eXBlb2YgYj09InN0cmluZyI/W2JdOmIpLmZvckVhY2goUD0+bkdlKEMsUC50cmltKCkpKSksRSYmKFd0LmluZm8oIlNldHRpbmcgc3RhdGUgc3R5bGVzIixDLGIpLCh0eXBlb2YgRT09InN0cmluZyI/W0VdOkUpLmZvckVhY2goUD0+ckdlKEMsUC50cmltKCkpKSl9LEtSdD1mdW5jdGlvbihpKXtqSz17cm9vdDpVUnQoKX0sRTA9aksucm9vdCx6UD0wLCRQPVZSdCgpLGl8fGNnKCl9LHFQPWZ1bmN0aW9uKGkpe3JldHVybiBFMC5zdGF0ZXNbaV19LFdWZT1mdW5jdGlvbigpe3JldHVybiBFMC5zdGF0ZXN9LEtWZT1mdW5jdGlvbigpe1d0LmluZm8oIkRvY3VtZW50cyA9ICIsakspfSxZVmU9ZnVuY3Rpb24oKXtyZXR1cm4gRTAucmVsYXRpb25zfTtmdW5jdGlvbiBrZ3QoaT0iIil7bGV0IGE9aTtyZXR1cm4gaT09PXhndCYmKHpQKyssYT1gJHtqUnR9JHt6UH1gKSxhfWZ1bmN0aW9uIEVndChpPSIiLGE9alApe3JldHVybiBpPT09eGd0P2pSdDphfWZ1bmN0aW9uIFhWZShpPSIiKXtsZXQgYT1pO3JldHVybiBpPT09JFJ0JiYoelArKyxhPWAke3pSdH0ke3pQfWApLGF9ZnVuY3Rpb24gUVZlKGk9IiIsYT1qUCl7cmV0dXJuIGk9PT0kUnQ/elJ0OmF9ZnVuY3Rpb24gWlZlKGksYSxmKXtsZXQgcD1rZ3QoaS5pZC50cmltKCkpLHY9RWd0KGkuaWQudHJpbSgpLGkudHlwZSksbT1rZ3QoYS5pZC50cmltKCkpLGI9RWd0KGEuaWQudHJpbSgpLGEudHlwZSk7azkocCx2LGkuZG9jLGkuZGVzY3JpcHRpb24saS5ub3RlLGkuY2xhc3NlcyxpLnN0eWxlcyxpLnRleHRTdHlsZXMpLGs5KG0sYixhLmRvYyxhLmRlc2NyaXB0aW9uLGEubm90ZSxhLmNsYXNzZXMsYS5zdHlsZXMsYS50ZXh0U3R5bGVzKSxFMC5yZWxhdGlvbnMucHVzaCh7aWQxOnAsaWQyOm0scmVsYXRpb25UaXRsZTp1aS5zYW5pdGl6ZVRleHQoZixEZSgpKX0pfWNvbnN0IFlSdD1mdW5jdGlvbihpLGEsZil7aWYodHlwZW9mIGk9PSJvYmplY3QiKVpWZShpLGEsZik7ZWxzZXtjb25zdCBwPWtndChpLnRyaW0oKSksdj1FZ3QoaSksbT1YVmUoYS50cmltKCkpLGI9UVZlKGEpO2s5KHAsdiksazkobSxiKSxFMC5yZWxhdGlvbnMucHVzaCh7aWQxOnAsaWQyOm0sdGl0bGU6dWkuc2FuaXRpemVUZXh0KGYsRGUoKSl9KX19LFRndD1mdW5jdGlvbihpLGEpe2NvbnN0IGY9RTAuc3RhdGVzW2ldLHA9YS5zdGFydHNXaXRoKCI6Iik/YS5yZXBsYWNlKCI6IiwiIikudHJpbSgpOmE7Zi5kZXNjcmlwdGlvbnMucHVzaCh1aS5zYW5pdGl6ZVRleHQocCxEZSgpKSl9LEpWZT1mdW5jdGlvbihpKXtyZXR1cm4gaS5zdWJzdHJpbmcoMCwxKT09PSI6Ij9pLnN1YnN0cigyKS50cmltKCk6aS50cmltKCl9LHRHZT0oKT0+KFdSdCsrLCJkaXZpZGVyLWlkLSIrV1J0KSxYUnQ9ZnVuY3Rpb24oaSxhPSIiKXskUFtpXT09PXZvaWQgMCYmKCRQW2ldPXtpZDppLHN0eWxlczpbXSx0ZXh0U3R5bGVzOltdfSk7Y29uc3QgZj0kUFtpXTthIT1udWxsJiZhLnNwbGl0KGpWZSkuZm9yRWFjaChwPT57Y29uc3Qgdj1wLnJlcGxhY2UoLyhbXjtdKik7LywiJDEiKS50cmltKCk7aWYocC5tYXRjaChxUnQpKXtjb25zdCBiPXYucmVwbGFjZShIUnQsUlZlKS5yZXBsYWNlKHFSdCxIUnQpO2YudGV4dFN0eWxlcy5wdXNoKGIpfWYuc3R5bGVzLnB1c2godil9KX0sZUdlPWZ1bmN0aW9uKCl7cmV0dXJuICRQfSxfZ3Q9ZnVuY3Rpb24oaSxhKXtpLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihmKXtsZXQgcD1xUChmKTtpZihwPT09dm9pZCAwKXtjb25zdCB2PWYudHJpbSgpO2s5KHYpLHA9cVAodil9cC5jbGFzc2VzLnB1c2goYSl9KX0sbkdlPWZ1bmN0aW9uKGksYSl7Y29uc3QgZj1xUChpKTtmIT09dm9pZCAwJiZmLnRleHRTdHlsZXMucHVzaChhKX0sckdlPWZ1bmN0aW9uKGksYSl7Y29uc3QgZj1xUChpKTtmIT09dm9pZCAwJiZmLnRleHRTdHlsZXMucHVzaChhKX0sUDU9e3BhcnNlRGlyZWN0aXZlOnFWZSxnZXRDb25maWc6KCk9PkRlKCkuc3RhdGUsYWRkU3RhdGU6azksY2xlYXI6S1J0LGdldFN0YXRlOnFQLGdldFN0YXRlczpXVmUsZ2V0UmVsYXRpb25zOllWZSxnZXRDbGFzc2VzOmVHZSxnZXREaXJlY3Rpb246KCk9PkdSdCxhZGRSZWxhdGlvbjpZUnQsZ2V0RGl2aWRlcklkOnRHZSxzZXREaXJlY3Rpb246aT0+e0dSdD1pfSxjbGVhbnVwTGFiZWw6SlZlLGxpbmVUeXBlOiRWZSxyZWxhdGlvblR5cGU6elZlLGxvZ0RvY3VtZW50czpLVmUsZ2V0Um9vdERvYzpWVmUsc2V0Um9vdERvYzpIVmUsZ2V0Um9vdERvY1YyOkdWZSxleHRyYWN0OlVWZSx0cmltQ29sb246aT0+aSYmaVswXT09PSI6Ij9pLnN1YnN0cigxKS50cmltKCk6aS50cmltKCksZ2V0QWNjVGl0bGU6dWcsc2V0QWNjVGl0bGU6bTAsZ2V0QWNjRGVzY3JpcHRpb246aGcsc2V0QWNjRGVzY3JpcHRpb246bGcsYWRkU3R5bGVDbGFzczpYUnQsc2V0Q3NzQ2xhc3M6X2d0LGFkZERlc2NyaXB0aW9uOlRndCxzZXREaWFncmFtVGl0bGU6TmIsZ2V0RGlhZ3JhbVRpdGxlOmhwfSxRUnQ9aT0+YApkZWZzICNzdGF0ZWRpYWdyYW0tYmFyYkVuZCB7CiAgICBmaWxsOiAke2kudHJhbnNpdGlvbkNvbG9yfTsKICAgIHN0cm9rZTogJHtpLnRyYW5zaXRpb25Db2xvcn07CiAgfQpnLnN0YXRlR3JvdXAgdGV4dCB7CiAgZmlsbDogJHtpLm5vZGVCb3JkZXJ9OwogIHN0cm9rZTogbm9uZTsKICBmb250LXNpemU6IDEwcHg7Cn0KZy5zdGF0ZUdyb3VwIHRleHQgewogIGZpbGw6ICR7aS50ZXh0Q29sb3J9OwogIHN0cm9rZTogbm9uZTsKICBmb250LXNpemU6IDEwcHg7Cgp9Cmcuc3RhdGVHcm91cCAuc3RhdGUtdGl0bGUgewogIGZvbnQtd2VpZ2h0OiBib2xkZXI7CiAgZmlsbDogJHtpLnN0YXRlTGFiZWxDb2xvcn07Cn0KCmcuc3RhdGVHcm91cCByZWN0IHsKICBmaWxsOiAke2kubWFpbkJrZ307CiAgc3Ryb2tlOiAke2kubm9kZUJvcmRlcn07Cn0KCmcuc3RhdGVHcm91cCBsaW5lIHsKICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogIHN0cm9rZS13aWR0aDogMTsKfQoKLnRyYW5zaXRpb24gewogIHN0cm9rZTogJHtpLnRyYW5zaXRpb25Db2xvcn07CiAgc3Ryb2tlLXdpZHRoOiAxOwogIGZpbGw6IG5vbmU7Cn0KCi5zdGF0ZUdyb3VwIC5jb21wb3NpdCB7CiAgZmlsbDogJHtpLmJhY2tncm91bmR9OwogIGJvcmRlci1ib3R0b206IDFweAp9Cgouc3RhdGVHcm91cCAuYWx0LWNvbXBvc2l0IHsKICBmaWxsOiAjZTBlMGUwOwogIGJvcmRlci1ib3R0b206IDFweAp9Cgouc3RhdGUtbm90ZSB7CiAgc3Ryb2tlOiAke2kubm90ZUJvcmRlckNvbG9yfTsKICBmaWxsOiAke2kubm90ZUJrZ0NvbG9yfTsKCiAgdGV4dCB7CiAgICBmaWxsOiAke2kubm90ZVRleHRDb2xvcn07CiAgICBzdHJva2U6IG5vbmU7CiAgICBmb250LXNpemU6IDEwcHg7CiAgfQp9Cgouc3RhdGVMYWJlbCAuYm94IHsKICBzdHJva2U6IG5vbmU7CiAgc3Ryb2tlLXdpZHRoOiAwOwogIGZpbGw6ICR7aS5tYWluQmtnfTsKICBvcGFjaXR5OiAwLjU7Cn0KCi5lZGdlTGFiZWwgLmxhYmVsIHJlY3QgewogIGZpbGw6ICR7aS5sYWJlbEJhY2tncm91bmRDb2xvcn07CiAgb3BhY2l0eTogMC41Owp9Ci5lZGdlTGFiZWwgLmxhYmVsIHRleHQgewogIGZpbGw6ICR7aS50cmFuc2l0aW9uTGFiZWxDb2xvcnx8aS50ZXJ0aWFyeVRleHRDb2xvcn07Cn0KLmxhYmVsIGRpdiAuZWRnZUxhYmVsIHsKICBjb2xvcjogJHtpLnRyYW5zaXRpb25MYWJlbENvbG9yfHxpLnRlcnRpYXJ5VGV4dENvbG9yfTsKfQoKLnN0YXRlTGFiZWwgdGV4dCB7CiAgZmlsbDogJHtpLnN0YXRlTGFiZWxDb2xvcn07CiAgZm9udC1zaXplOiAxMHB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwp9Cgoubm9kZSBjaXJjbGUuc3RhdGUtc3RhcnQgewogIGZpbGw6ICR7aS5zcGVjaWFsU3RhdGVDb2xvcn07CiAgc3Ryb2tlOiAke2kuc3BlY2lhbFN0YXRlQ29sb3J9Owp9Cgoubm9kZSAuZm9yay1qb2luIHsKICBmaWxsOiAke2kuc3BlY2lhbFN0YXRlQ29sb3J9OwogIHN0cm9rZTogJHtpLnNwZWNpYWxTdGF0ZUNvbG9yfTsKfQoKLm5vZGUgY2lyY2xlLnN0YXRlLWVuZCB7CiAgZmlsbDogJHtpLmlubmVyRW5kQmFja2dyb3VuZH07CiAgc3Ryb2tlOiAke2kuYmFja2dyb3VuZH07CiAgc3Ryb2tlLXdpZHRoOiAxLjUKfQouZW5kLXN0YXRlLWlubmVyIHsKICBmaWxsOiAke2kuY29tcG9zaXRlQmFja2dyb3VuZHx8aS5iYWNrZ3JvdW5kfTsKICAvLyBzdHJva2U6ICR7aS5iYWNrZ3JvdW5kfTsKICBzdHJva2Utd2lkdGg6IDEuNQp9Cgoubm9kZSByZWN0IHsKICBmaWxsOiAke2kuc3RhdGVCa2d8fGkubWFpbkJrZ307CiAgc3Ryb2tlOiAke2kuc3RhdGVCb3JkZXJ8fGkubm9kZUJvcmRlcn07CiAgc3Ryb2tlLXdpZHRoOiAxcHg7Cn0KLm5vZGUgcG9seWdvbiB7CiAgZmlsbDogJHtpLm1haW5Ca2d9OwogIHN0cm9rZTogJHtpLnN0YXRlQm9yZGVyfHxpLm5vZGVCb3JkZXJ9OzsKICBzdHJva2Utd2lkdGg6IDFweDsKfQojc3RhdGVkaWFncmFtLWJhcmJFbmQgewogIGZpbGw6ICR7aS5saW5lQ29sb3J9Owp9Cgouc3RhdGVkaWFncmFtLWNsdXN0ZXIgcmVjdCB7CiAgZmlsbDogJHtpLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZH07CiAgc3Ryb2tlOiAke2kuc3RhdGVCb3JkZXJ8fGkubm9kZUJvcmRlcn07CiAgc3Ryb2tlLXdpZHRoOiAxcHg7Cn0KCi5jbHVzdGVyLWxhYmVsLCAubm9kZUxhYmVsIHsKICBjb2xvcjogJHtpLnN0YXRlTGFiZWxDb2xvcn07Cn0KCi5zdGF0ZWRpYWdyYW0tY2x1c3RlciByZWN0Lm91dGVyIHsKICByeDogNXB4OwogIHJ5OiA1cHg7Cn0KLnN0YXRlZGlhZ3JhbS1zdGF0ZSAuZGl2aWRlciB7CiAgc3Ryb2tlOiAke2kuc3RhdGVCb3JkZXJ8fGkubm9kZUJvcmRlcn07Cn0KCi5zdGF0ZWRpYWdyYW0tc3RhdGUgLnRpdGxlLXN0YXRlIHsKICByeDogNXB4OwogIHJ5OiA1cHg7Cn0KLnN0YXRlZGlhZ3JhbS1jbHVzdGVyLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIC5pbm5lciB7CiAgZmlsbDogJHtpLmNvbXBvc2l0ZUJhY2tncm91bmR8fGkuYmFja2dyb3VuZH07Cn0KLnN0YXRlZGlhZ3JhbS1jbHVzdGVyLnN0YXRlZGlhZ3JhbS1jbHVzdGVyLWFsdCAuaW5uZXIgewogIGZpbGw6ICR7aS5hbHRCYWNrZ3JvdW5kP2kuYWx0QmFja2dyb3VuZDoiI2VmZWZlZiJ9Owp9Cgouc3RhdGVkaWFncmFtLWNsdXN0ZXIgLmlubmVyIHsKICByeDowOwogIHJ5OjA7Cn0KCi5zdGF0ZWRpYWdyYW0tc3RhdGUgcmVjdC5iYXNpYyB7CiAgcng6IDVweDsKICByeTogNXB4Owp9Ci5zdGF0ZWRpYWdyYW0tc3RhdGUgcmVjdC5kaXZpZGVyIHsKICBzdHJva2UtZGFzaGFycmF5OiAxMCwxMDsKICBmaWxsOiAke2kuYWx0QmFja2dyb3VuZD9pLmFsdEJhY2tncm91bmQ6IiNlZmVmZWYifTsKfQoKLm5vdGUtZWRnZSB7CiAgc3Ryb2tlLWRhc2hhcnJheTogNTsKfQoKLnN0YXRlZGlhZ3JhbS1ub3RlIHJlY3QgewogIGZpbGw6ICR7aS5ub3RlQmtnQ29sb3J9OwogIHN0cm9rZTogJHtpLm5vdGVCb3JkZXJDb2xvcn07CiAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgcng6IDA7CiAgcnk6IDA7Cn0KLnN0YXRlZGlhZ3JhbS1ub3RlIHJlY3QgewogIGZpbGw6ICR7aS5ub3RlQmtnQ29sb3J9OwogIHN0cm9rZTogJHtpLm5vdGVCb3JkZXJDb2xvcn07CiAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgcng6IDA7CiAgcnk6IDA7Cn0KCi5zdGF0ZWRpYWdyYW0tbm90ZSB0ZXh0IHsKICBmaWxsOiAke2kubm90ZVRleHRDb2xvcn07Cn0KCi5zdGF0ZWRpYWdyYW0tbm90ZSAubm9kZUxhYmVsIHsKICBjb2xvcjogJHtpLm5vdGVUZXh0Q29sb3J9Owp9Ci5zdGF0ZWRpYWdyYW0gLmVkZ2VMYWJlbCB7CiAgY29sb3I6IHJlZDsgLy8gJHtpLm5vdGVUZXh0Q29sb3J9Owp9CgojZGVwZW5kZW5jeVN0YXJ0LCAjZGVwZW5kZW5jeUVuZCB7CiAgZmlsbDogJHtpLmxpbmVDb2xvcn07CiAgc3Ryb2tlOiAke2kubGluZUNvbG9yfTsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCi5zdGF0ZWRpYWdyYW1UaXRsZVRleHQgewogIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgZm9udC1zaXplOiAxOHB4OwogIGZpbGw6ICR7aS50ZXh0Q29sb3J9Owp9CmAsQ2d0PXt9LGlHZT0oaSxhKT0+e0NndFtpXT1hfSxzR2U9aT0+Q2d0W2ldLFpSdD0oKT0+T2JqZWN0LmtleXMoQ2d0KSxhR2U9e2dldDpzR2Usc2V0OmlHZSxrZXlzOlpSdCxzaXplOigpPT5aUnQoKS5sZW5ndGh9LG9HZT1pPT5pLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY2xhc3MiLCJzdGFydC1zdGF0ZSIpLmF0dHIoInIiLERlKCkuc3RhdGUuc2l6ZVVuaXQpLmF0dHIoImN4IixEZSgpLnN0YXRlLnBhZGRpbmcrRGUoKS5zdGF0ZS5zaXplVW5pdCkuYXR0cigiY3kiLERlKCkuc3RhdGUucGFkZGluZytEZSgpLnN0YXRlLnNpemVVbml0KSxjR2U9aT0+aS5hcHBlbmQoImxpbmUiKS5zdHlsZSgic3Ryb2tlIiwiZ3JleSIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMyIpLmF0dHIoIngxIixEZSgpLnN0YXRlLnRleHRIZWlnaHQpLmF0dHIoImNsYXNzIiwiZGl2aWRlciIpLmF0dHIoIngyIixEZSgpLnN0YXRlLnRleHRIZWlnaHQqMikuYXR0cigieTEiLDApLmF0dHIoInkyIiwwKSx1R2U9KGksYSk9Pntjb25zdCBmPWkuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMipEZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkiLERlKCkuc3RhdGUudGV4dEhlaWdodCsyKkRlKCkuc3RhdGUucGFkZGluZykuYXR0cigiZm9udC1zaXplIixEZSgpLnN0YXRlLmZvbnRTaXplKS5hdHRyKCJjbGFzcyIsInN0YXRlLXRpdGxlIikudGV4dChhLmlkKSxwPWYubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gaS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4IixEZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkiLERlKCkuc3RhdGUucGFkZGluZykuYXR0cigid2lkdGgiLHAud2lkdGgrMipEZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoImhlaWdodCIscC5oZWlnaHQrMipEZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInJ4IixEZSgpLnN0YXRlLnJhZGl1cyksZn0sbEdlPShpLGEpPT57Y29uc3QgZj1mdW5jdGlvbihqLFIsSCl7Y29uc3QgWT1qLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IiwyKkRlKCkuc3RhdGUucGFkZGluZykudGV4dChSKTtIfHxZLmF0dHIoImR5IixEZSgpLnN0YXRlLnRleHRIZWlnaHQpfSx2PWkuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMipEZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkiLERlKCkuc3RhdGUudGV4dEhlaWdodCsxLjMqRGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJmb250LXNpemUiLERlKCkuc3RhdGUuZm9udFNpemUpLmF0dHIoImNsYXNzIiwic3RhdGUtdGl0bGUiKS50ZXh0KGEuZGVzY3JpcHRpb25zWzBdKS5ub2RlKCkuZ2V0QkJveCgpLG09di5oZWlnaHQsYj1pLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLERlKCkuc3RhdGUucGFkZGluZykuYXR0cigieSIsbStEZSgpLnN0YXRlLnBhZGRpbmcqLjQrRGUoKS5zdGF0ZS5kaXZpZGVyTWFyZ2luK0RlKCkuc3RhdGUudGV4dEhlaWdodCkuYXR0cigiY2xhc3MiLCJzdGF0ZS1kZXNjcmlwdGlvbiIpO2xldCBFPSEwLEM9ITA7YS5kZXNjcmlwdGlvbnMuZm9yRWFjaChmdW5jdGlvbihqKXtFfHwoZihiLGosQyksQz0hMSksRT0hMX0pO2NvbnN0IEE9aS5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsRGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5MSIsRGUoKS5zdGF0ZS5wYWRkaW5nK20rRGUoKS5zdGF0ZS5kaXZpZGVyTWFyZ2luLzIpLmF0dHIoInkyIixEZSgpLnN0YXRlLnBhZGRpbmcrbStEZSgpLnN0YXRlLmRpdmlkZXJNYXJnaW4vMikuYXR0cigiY2xhc3MiLCJkZXNjci1kaXZpZGVyIiksUD1iLm5vZGUoKS5nZXRCQm94KCksRj1NYXRoLm1heChQLndpZHRoLHYud2lkdGgpO3JldHVybiBBLmF0dHIoIngyIixGKzMqRGUoKS5zdGF0ZS5wYWRkaW5nKSxpLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLERlKCkuc3RhdGUucGFkZGluZykuYXR0cigieSIsRGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsRisyKkRlKCkuc3RhdGUucGFkZGluZykuYXR0cigiaGVpZ2h0IixQLmhlaWdodCttKzIqRGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJyeCIsRGUoKS5zdGF0ZS5yYWRpdXMpLGl9LGhHZT0oaSxhLGYpPT57Y29uc3QgcD1EZSgpLnN0YXRlLnBhZGRpbmcsdj0yKkRlKCkuc3RhdGUucGFkZGluZyxtPWkubm9kZSgpLmdldEJCb3goKSxiPW0ud2lkdGgsRT1tLngsQz1pLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDApLmF0dHIoInkiLERlKCkuc3RhdGUudGl0bGVTaGlmdCkuYXR0cigiZm9udC1zaXplIixEZSgpLnN0YXRlLmZvbnRTaXplKS5hdHRyKCJjbGFzcyIsInN0YXRlLXRpdGxlIikudGV4dChhLmlkKSxQPUMubm9kZSgpLmdldEJCb3goKS53aWR0aCt2O2xldCBGPU1hdGgubWF4KFAsYik7Rj09PWImJihGPUYrdik7bGV0IGo7Y29uc3QgUj1pLm5vZGUoKS5nZXRCQm94KCk7YS5kb2Msaj1FLXAsUD5iJiYoaj0oYi1GKS8yK3ApLE1hdGguYWJzKEUtUi54KTxwJiZQPmImJihqPUUtKFAtYikvMik7Y29uc3QgSD0xLURlKCkuc3RhdGUudGV4dEhlaWdodDtyZXR1cm4gaS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4IixqKS5hdHRyKCJ5IixIKS5hdHRyKCJjbGFzcyIsZj8iYWx0LWNvbXBvc2l0IjoiY29tcG9zaXQiKS5hdHRyKCJ3aWR0aCIsRikuYXR0cigiaGVpZ2h0IixSLmhlaWdodCtEZSgpLnN0YXRlLnRleHRIZWlnaHQrRGUoKS5zdGF0ZS50aXRsZVNoaWZ0KzEpLmF0dHIoInJ4IiwiMCIpLEMuYXR0cigieCIsaitwKSxQPD1iJiZDLmF0dHIoIngiLEUrKEYtdikvMi1QLzIrcCksaS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4IixqKS5hdHRyKCJ5IixEZSgpLnN0YXRlLnRpdGxlU2hpZnQtRGUoKS5zdGF0ZS50ZXh0SGVpZ2h0LURlKCkuc3RhdGUucGFkZGluZykuYXR0cigid2lkdGgiLEYpLmF0dHIoImhlaWdodCIsRGUoKS5zdGF0ZS50ZXh0SGVpZ2h0KjMpLmF0dHIoInJ4IixEZSgpLnN0YXRlLnJhZGl1cyksaS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4IixqKS5hdHRyKCJ5IixEZSgpLnN0YXRlLnRpdGxlU2hpZnQtRGUoKS5zdGF0ZS50ZXh0SGVpZ2h0LURlKCkuc3RhdGUucGFkZGluZykuYXR0cigid2lkdGgiLEYpLmF0dHIoImhlaWdodCIsUi5oZWlnaHQrMysyKkRlKCkuc3RhdGUudGV4dEhlaWdodCkuYXR0cigicngiLERlKCkuc3RhdGUucmFkaXVzKSxpfSxmR2U9aT0+KGkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjbGFzcyIsImVuZC1zdGF0ZS1vdXRlciIpLmF0dHIoInIiLERlKCkuc3RhdGUuc2l6ZVVuaXQrRGUoKS5zdGF0ZS5taW5pUGFkZGluZykuYXR0cigiY3giLERlKCkuc3RhdGUucGFkZGluZytEZSgpLnN0YXRlLnNpemVVbml0K0RlKCkuc3RhdGUubWluaVBhZGRpbmcpLmF0dHIoImN5IixEZSgpLnN0YXRlLnBhZGRpbmcrRGUoKS5zdGF0ZS5zaXplVW5pdCtEZSgpLnN0YXRlLm1pbmlQYWRkaW5nKSxpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY2xhc3MiLCJlbmQtc3RhdGUtaW5uZXIiKS5hdHRyKCJyIixEZSgpLnN0YXRlLnNpemVVbml0KS5hdHRyKCJjeCIsRGUoKS5zdGF0ZS5wYWRkaW5nK0RlKCkuc3RhdGUuc2l6ZVVuaXQrMikuYXR0cigiY3kiLERlKCkuc3RhdGUucGFkZGluZytEZSgpLnN0YXRlLnNpemVVbml0KzIpKSxkR2U9KGksYSk9PntsZXQgZj1EZSgpLnN0YXRlLmZvcmtXaWR0aCxwPURlKCkuc3RhdGUuZm9ya0hlaWdodDtpZihhLnBhcmVudElkKXtsZXQgdj1mO2Y9cCxwPXZ9cmV0dXJuIGkuYXBwZW5kKCJyZWN0Iikuc3R5bGUoInN0cm9rZSIsImJsYWNrIikuc3R5bGUoImZpbGwiLCJibGFjayIpLmF0dHIoIndpZHRoIixmKS5hdHRyKCJoZWlnaHQiLHApLmF0dHIoIngiLERlKCkuc3RhdGUucGFkZGluZykuYXR0cigieSIsRGUoKS5zdGF0ZS5wYWRkaW5nKX0sZ0dlPShpLGEsZixwKT0+e2xldCB2PTA7Y29uc3QgbT1wLmFwcGVuZCgidGV4dCIpO20uc3R5bGUoInRleHQtYW5jaG9yIiwic3RhcnQiKSxtLmF0dHIoImNsYXNzIiwibm90ZVRleHQiKTtsZXQgYj1pLnJlcGxhY2UoL1xyXG4vZywiPGJyLz4iKTtiPWIucmVwbGFjZSgvXG4vZywiPGJyLz4iKTtjb25zdCBFPWIuc3BsaXQodWkubGluZUJyZWFrUmVnZXgpO2xldCBDPTEuMjUqRGUoKS5zdGF0ZS5ub3RlTWFyZ2luO2Zvcihjb25zdCBBIG9mIEUpe2NvbnN0IFA9QS50cmltKCk7aWYoUC5sZW5ndGg+MCl7Y29uc3QgRj1tLmFwcGVuZCgidHNwYW4iKTtpZihGLnRleHQoUCksQz09PTApe2NvbnN0IGo9Ri5ub2RlKCkuZ2V0QkJveCgpO0MrPWouaGVpZ2h0fXYrPUMsRi5hdHRyKCJ4IixhK0RlKCkuc3RhdGUubm90ZU1hcmdpbiksRi5hdHRyKCJ5IixmK3YrMS4yNSpEZSgpLnN0YXRlLm5vdGVNYXJnaW4pfX1yZXR1cm57dGV4dFdpZHRoOm0ubm9kZSgpLmdldEJCb3goKS53aWR0aCx0ZXh0SGVpZ2h0OnZ9fSxwR2U9KGksYSk9PnthLmF0dHIoImNsYXNzIiwic3RhdGUtbm90ZSIpO2NvbnN0IGY9YS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixEZSgpLnN0YXRlLnBhZGRpbmcpLHA9YS5hcHBlbmQoImciKSx7dGV4dFdpZHRoOnYsdGV4dEhlaWdodDptfT1nR2UoaSwwLDAscCk7cmV0dXJuIGYuYXR0cigiaGVpZ2h0IixtKzIqRGUoKS5zdGF0ZS5ub3RlTWFyZ2luKSxmLmF0dHIoIndpZHRoIix2K0RlKCkuc3RhdGUubm90ZU1hcmdpbioyKSxmfSxKUnQ9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPWEuaWQscD17aWQ6ZixsYWJlbDphLmlkLHdpZHRoOjAsaGVpZ2h0OjB9LHY9aS5hcHBlbmQoImciKS5hdHRyKCJpZCIsZikuYXR0cigiY2xhc3MiLCJzdGF0ZUdyb3VwIik7YS50eXBlPT09InN0YXJ0IiYmb0dlKHYpLGEudHlwZT09PSJlbmQiJiZmR2UodiksKGEudHlwZT09PSJmb3JrInx8YS50eXBlPT09ImpvaW4iKSYmZEdlKHYsYSksYS50eXBlPT09Im5vdGUiJiZwR2UoYS5ub3RlLnRleHQsdiksYS50eXBlPT09ImRpdmlkZXIiJiZjR2UodiksYS50eXBlPT09ImRlZmF1bHQiJiZhLmRlc2NyaXB0aW9ucy5sZW5ndGg9PT0wJiZ1R2UodixhKSxhLnR5cGU9PT0iZGVmYXVsdCImJmEuZGVzY3JpcHRpb25zLmxlbmd0aD4wJiZsR2UodixhKTtjb25zdCBtPXYubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gcC53aWR0aD1tLndpZHRoKzIqRGUoKS5zdGF0ZS5wYWRkaW5nLHAuaGVpZ2h0PW0uaGVpZ2h0KzIqRGUoKS5zdGF0ZS5wYWRkaW5nLGFHZS5zZXQoZixwKSxwfTtsZXQgdGp0PTA7Y29uc3QgYkdlPWZ1bmN0aW9uKGksYSxmKXtjb25zdCBwPWZ1bmN0aW9uKEMpe3N3aXRjaChDKXtjYXNlIFA1LnJlbGF0aW9uVHlwZS5BR0dSRUdBVElPTjpyZXR1cm4iYWdncmVnYXRpb24iO2Nhc2UgUDUucmVsYXRpb25UeXBlLkVYVEVOU0lPTjpyZXR1cm4iZXh0ZW5zaW9uIjtjYXNlIFA1LnJlbGF0aW9uVHlwZS5DT01QT1NJVElPTjpyZXR1cm4iY29tcG9zaXRpb24iO2Nhc2UgUDUucmVsYXRpb25UeXBlLkRFUEVOREVOQ1k6cmV0dXJuImRlcGVuZGVuY3kifX07YS5wb2ludHM9YS5wb2ludHMuZmlsdGVyKEM9PiFOdW1iZXIuaXNOYU4oQy55KSk7Y29uc3Qgdj1hLnBvaW50cyxtPVlFKCkueChmdW5jdGlvbihDKXtyZXR1cm4gQy54fSkueShmdW5jdGlvbihDKXtyZXR1cm4gQy55fSkuY3VydmUoTUEpLGI9aS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixtKHYpKS5hdHRyKCJpZCIsImVkZ2UiK3RqdCkuYXR0cigiY2xhc3MiLCJ0cmFuc2l0aW9uIik7bGV0IEU9IiI7aWYoRGUoKS5zdGF0ZS5hcnJvd01hcmtlckFic29sdXRlJiYoRT13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCxFPUUucmVwbGFjZSgvXCgvZywiXFwoIiksRT1FLnJlcGxhY2UoL1wpL2csIlxcKSIpKSxiLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitFKyIjIitwKFA1LnJlbGF0aW9uVHlwZS5ERVBFTkRFTkNZKSsiRW5kKSIpLGYudGl0bGUhPT12b2lkIDApe2NvbnN0IEM9aS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInN0YXRlTGFiZWwiKSx7eDpBLHk6UH09dG8uY2FsY0xhYmVsUG9zaXRpb24oYS5wb2ludHMpLEY9dWkuZ2V0Um93cyhmLnRpdGxlKTtsZXQgaj0wO2NvbnN0IFI9W107bGV0IEg9MCxZPTA7Zm9yKGxldCBpdD0wO2l0PD1GLmxlbmd0aDtpdCsrKXtjb25zdCBmdD1DLmFwcGVuZCgidGV4dCIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dChGW2l0XSkuYXR0cigieCIsQSkuYXR0cigieSIsUCtqKSxUdD1mdC5ub2RlKCkuZ2V0QkJveCgpO0g9TWF0aC5tYXgoSCxUdC53aWR0aCksWT1NYXRoLm1pbihZLFR0LngpLFd0LmluZm8oVHQueCxBLFAraiksaj09PTAmJihqPWZ0Lm5vZGUoKS5nZXRCQm94KCkuaGVpZ2h0LFd0LmluZm8oIlRpdGxlIGhlaWdodCIsaixQKSksUi5wdXNoKGZ0KX1sZXQgcnQ9aipGLmxlbmd0aDtpZihGLmxlbmd0aD4xKXtjb25zdCBpdD0oRi5sZW5ndGgtMSkqaiouNTtSLmZvckVhY2goKGZ0LFR0KT0+ZnQuYXR0cigieSIsUCtUdCpqLWl0KSkscnQ9aipGLmxlbmd0aH1jb25zdCBKPUMubm9kZSgpLmdldEJCb3goKTtDLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImNsYXNzIiwiYm94IikuYXR0cigieCIsQS1ILzItRGUoKS5zdGF0ZS5wYWRkaW5nLzIpLmF0dHIoInkiLFAtcnQvMi1EZSgpLnN0YXRlLnBhZGRpbmcvMi0zLjUpLmF0dHIoIndpZHRoIixIK0RlKCkuc3RhdGUucGFkZGluZykuYXR0cigiaGVpZ2h0IixydCtEZSgpLnN0YXRlLnBhZGRpbmcpLFd0LmluZm8oSil9dGp0Kyt9O2xldCAkYjtjb25zdCBTZ3Q9e30sdkdlPWZ1bmN0aW9uKCl7fSx3R2U9ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZGVwZW5kZW5jeUVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOSw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfSxtR2U9ZnVuY3Rpb24oaSxhLGYscCl7JGI9RGUoKS5zdGF0ZTtjb25zdCB2PURlKCkuc2VjdXJpdHlMZXZlbDtsZXQgbTt2PT09InNhbmRib3giJiYobT14cigiI2kiK2EpKTtjb25zdCBiPXhyKHY9PT0ic2FuZGJveCI/bS5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5IiksRT12PT09InNhbmRib3giP20ubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQ7V3QuZGVidWcoIlJlbmRlcmluZyBkaWFncmFtICIraSk7Y29uc3QgQz1iLnNlbGVjdChgW2lkPScke2F9J11gKTt3R2UoQyk7Y29uc3QgQT1wLmRiLmdldFJvb3REb2MoKTtlanQoQSxDLHZvaWQgMCwhMSxiLEUscCk7Y29uc3QgUD0kYi5wYWRkaW5nLEY9Qy5ub2RlKCkuZ2V0QkJveCgpLGo9Ri53aWR0aCtQKjIsUj1GLmhlaWdodCtQKjIsSD1qKjEuNzU7b2coQyxSLEgsJGIudXNlTWF4V2lkdGgpLEMuYXR0cigidmlld0JveCIsYCR7Ri54LSRiLnBhZGRpbmd9ICAke0YueS0kYi5wYWRkaW5nfSBgK2orIiAiK1IpfSx5R2U9aT0+aT9pLmxlbmd0aCokYi5mb250U2l6ZUZhY3RvcjoxLGVqdD0oaSxhLGYscCx2LG0sYik9Pntjb25zdCBFPW5ldyBsMSh7Y29tcG91bmQ6ITAsbXVsdGlncmFwaDohMH0pO2xldCBDLEE9ITA7Zm9yKEM9MDtDPGkubGVuZ3RoO0MrKylpZihpW0NdLnN0bXQ9PT0icmVsYXRpb24iKXtBPSExO2JyZWFrfWY/RS5zZXRHcmFwaCh7cmFua2RpcjoiTFIiLG11bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITAscmFua2VyOiJ0aWdodC10cmVlIixyYW5rc2VwOkE/MTokYi5lZGdlTGVuZ3RoRmFjdG9yLG5vZGVTZXA6QT8xOjUwLGlzTXVsdGlHcmFwaDohMH0pOkUuc2V0R3JhcGgoe3JhbmtkaXI6IlRCIixtdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwLHJhbmtzZXA6QT8xOiRiLmVkZ2VMZW5ndGhGYWN0b3Isbm9kZVNlcDpBPzE6NTAscmFua2VyOiJ0aWdodC10cmVlIixpc011bHRpR3JhcGg6ITB9KSxFLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKXtyZXR1cm57fX0pLGIuZGIuZXh0cmFjdChpKTtjb25zdCBQPWIuZGIuZ2V0U3RhdGVzKCksRj1iLmRiLmdldFJlbGF0aW9ucygpLGo9T2JqZWN0LmtleXMoUCk7Zm9yKGNvbnN0IEogb2Ygail7Y29uc3QgaXQ9UFtKXTtmJiYoaXQucGFyZW50SWQ9Zik7bGV0IGZ0O2lmKGl0LmRvYyl7bGV0IFR0PWEuYXBwZW5kKCJnIikuYXR0cigiaWQiLGl0LmlkKS5hdHRyKCJjbGFzcyIsInN0YXRlR3JvdXAiKTtmdD1lanQoaXQuZG9jLFR0LGl0LmlkLCFwLHYsbSxiKTt7VHQ9aEdlKFR0LGl0LHApO2xldCBrdD1UdC5ub2RlKCkuZ2V0QkJveCgpO2Z0LndpZHRoPWt0LndpZHRoLGZ0LmhlaWdodD1rdC5oZWlnaHQrJGIucGFkZGluZy8yLFNndFtpdC5pZF09e3k6JGIuY29tcG9zaXRUaXRsZVNpemV9fX1lbHNlIGZ0PUpSdChhLGl0KTtpZihpdC5ub3RlKXtjb25zdCBUdD17ZGVzY3JpcHRpb25zOltdLGlkOml0LmlkKyItbm90ZSIsbm90ZTppdC5ub3RlLHR5cGU6Im5vdGUifSxrdD1KUnQoYSxUdCk7aXQubm90ZS5wb3NpdGlvbj09PSJsZWZ0IG9mIj8oRS5zZXROb2RlKGZ0LmlkKyItbm90ZSIsa3QpLEUuc2V0Tm9kZShmdC5pZCxmdCkpOihFLnNldE5vZGUoZnQuaWQsZnQpLEUuc2V0Tm9kZShmdC5pZCsiLW5vdGUiLGt0KSksRS5zZXRQYXJlbnQoZnQuaWQsZnQuaWQrIi1ncm91cCIpLEUuc2V0UGFyZW50KGZ0LmlkKyItbm90ZSIsZnQuaWQrIi1ncm91cCIpfWVsc2UgRS5zZXROb2RlKGZ0LmlkLGZ0KX1XdC5kZWJ1ZygiQ291bnQ9IixFLm5vZGVDb3VudCgpLEUpO2xldCBSPTA7Ri5mb3JFYWNoKGZ1bmN0aW9uKEope1IrKyxXdC5kZWJ1ZygiU2V0dGluZyBlZGdlIixKKSxFLnNldEVkZ2UoSi5pZDEsSi5pZDIse3JlbGF0aW9uOkosd2lkdGg6eUdlKEoudGl0bGUpLGhlaWdodDokYi5sYWJlbEhlaWdodCp1aS5nZXRSb3dzKEoudGl0bGUpLmxlbmd0aCxsYWJlbHBvczoiYyJ9LCJpZCIrUil9KSxuTChFKSxXdC5kZWJ1ZygiR3JhcGggYWZ0ZXIgbGF5b3V0IixFLm5vZGVzKCkpO2NvbnN0IEg9YS5ub2RlKCk7RS5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24oSil7SiE9PXZvaWQgMCYmRS5ub2RlKEopIT09dm9pZCAwPyhXdC53YXJuKCJOb2RlICIrSisiOiAiK0pTT04uc3RyaW5naWZ5KEUubm9kZShKKSkpLHYuc2VsZWN0KCIjIitILmlkKyIgIyIrSikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKEUubm9kZShKKS54LUUubm9kZShKKS53aWR0aC8yKSsiLCIrKEUubm9kZShKKS55KyhTZ3RbSl0/U2d0W0pdLnk6MCktRS5ub2RlKEopLmhlaWdodC8yKSsiICkiKSx2LnNlbGVjdCgiIyIrSC5pZCsiICMiK0opLmF0dHIoImRhdGEteC1zaGlmdCIsRS5ub2RlKEopLngtRS5ub2RlKEopLndpZHRoLzIpLG0ucXVlcnlTZWxlY3RvckFsbCgiIyIrSC5pZCsiICMiK0orIiAuZGl2aWRlciIpLmZvckVhY2goZnQ9Pntjb25zdCBUdD1mdC5wYXJlbnRFbGVtZW50O2xldCBrdD0wLG10PTA7VHQmJihUdC5wYXJlbnRFbGVtZW50JiYoa3Q9VHQucGFyZW50RWxlbWVudC5nZXRCQm94KCkud2lkdGgpLG10PXBhcnNlSW50KFR0LmdldEF0dHJpYnV0ZSgiZGF0YS14LXNoaWZ0IiksMTApLE51bWJlci5pc05hTihtdCkmJihtdD0wKSksZnQuc2V0QXR0cmlidXRlKCJ4MSIsMC1tdCs4KSxmdC5zZXRBdHRyaWJ1dGUoIngyIixrdC1tdC04KX0pKTpXdC5kZWJ1ZygiTm8gTm9kZSAiK0orIjogIitKU09OLnN0cmluZ2lmeShFLm5vZGUoSikpKX0pO2xldCBZPUguZ2V0QkJveCgpO0UuZWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKEope0ohPT12b2lkIDAmJkUuZWRnZShKKSE9PXZvaWQgMCYmKFd0LmRlYnVnKCJFZGdlICIrSi52KyIgLT4gIitKLncrIjogIitKU09OLnN0cmluZ2lmeShFLmVkZ2UoSikpKSxiR2UoYSxFLmVkZ2UoSiksRS5lZGdlKEopLnJlbGF0aW9uKSl9KSxZPUguZ2V0QkJveCgpO2NvbnN0IHJ0PXtpZDpmfHwicm9vdCIsbGFiZWw6Znx8InJvb3QiLHdpZHRoOjAsaGVpZ2h0OjB9O3JldHVybiBydC53aWR0aD1ZLndpZHRoKzIqJGIucGFkZGluZyxydC5oZWlnaHQ9WS5oZWlnaHQrMiokYi5wYWRkaW5nLFd0LmRlYnVnKCJEb2MgcmVuZGVyZWQiLHJ0LEUpLHJ0fSx4R2U9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpCUnQsZGI6UDUscmVuZGVyZXI6e3NldENvbmY6dkdlLGRyYXc6bUdlfSxzdHlsZXM6UVJ0LGluaXQ6aT0+e2kuc3RhdGV8fChpLnN0YXRlPXt9KSxpLnN0YXRlLmFycm93TWFya2VyQWJzb2x1dGU9aS5hcnJvd01hcmtlckFic29sdXRlLFA1LmNsZWFyKCl9fX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxxSz0icmVjdCIsQWd0PSJyZWN0V2l0aFRpdGxlIixrR2U9InN0YXJ0IixFR2U9ImVuZCIsVEdlPSJkaXZpZGVyIixfR2U9InJvdW5kZWRXaXRoVGl0bGUiLENHZT0ibm90ZSIsU0dlPSJub3RlR3JvdXAiLGdMPSJzdGF0ZWRpYWdyYW0iLEFHZT1gJHtnTH0tc3RhdGVgLG5qdD0idHJhbnNpdGlvbiIsTEdlPSJub3RlIixNR2U9YCR7bmp0fSBub3RlLWVkZ2VgLERHZT1gJHtnTH0tJHtMR2V9YCxJR2U9YCR7Z0x9LWNsdXN0ZXJgLE9HZT1gJHtnTH0tY2x1c3Rlci1hbHRgLHJqdD0icGFyZW50IixpanQ9Im5vdGUiLE5HZT0ic3RhdGUiLExndD0iLS0tLSIsUEdlPWAke0xndH0ke2lqdH1gLHNqdD1gJHtMZ3R9JHtyanR9YCxhanQ9ImZpbGw6bm9uZSIsb2p0PSJmaWxsOiAjMzMzIixjanQ9ImMiLHVqdD0idGV4dCIsbGp0PSJub3JtYWwiO2xldCBISz17fSxoaz0wO2NvbnN0IEZHZT1mdW5jdGlvbihpKXtjb25zdCBhPU9iamVjdC5rZXlzKGkpO2Zvcihjb25zdCBmIG9mIGEpaVtmXX0sQkdlPWZ1bmN0aW9uKGksYSl7cmV0dXJuIGEuZGIuZXh0cmFjdChhLmRiLmdldFJvb3REb2NWMigpKSxhLmRiLmdldENsYXNzZXMoKX07ZnVuY3Rpb24gUkdlKGkpe3JldHVybiBpPT1udWxsPyIiOmkuY2xhc3Nlcz9pLmNsYXNzZXMuam9pbigiICIpOiIifWZ1bmN0aW9uIE1ndChpPSIiLGE9MCxmPSIiLHA9TGd0KXtjb25zdCB2PWYhPT1udWxsJiZmLmxlbmd0aD4wP2Ake3B9JHtmfWA6IiI7cmV0dXJuYCR7TkdlfS0ke2l9JHt2fS0ke2F9YH1jb25zdCBIUD0oaSxhLGYscCx2LG0pPT57Y29uc3QgYj1mLmlkLEU9UkdlKHBbYl0pO2lmKGIhPT0icm9vdCIpe2xldCBDPXFLO2Yuc3RhcnQ9PT0hMCYmKEM9a0dlKSxmLnN0YXJ0PT09ITEmJihDPUVHZSksZi50eXBlIT09alAmJihDPWYudHlwZSksSEtbYl18fChIS1tiXT17aWQ6YixzaGFwZTpDLGRlc2NyaXB0aW9uOnVpLnNhbml0aXplVGV4dChiLERlKCkpLGNsYXNzZXM6YCR7RX0gJHtBR2V9YH0pO2NvbnN0IEE9SEtbYl07Zi5kZXNjcmlwdGlvbiYmKEFycmF5LmlzQXJyYXkoQS5kZXNjcmlwdGlvbik/KEEuc2hhcGU9QWd0LEEuZGVzY3JpcHRpb24ucHVzaChmLmRlc2NyaXB0aW9uKSk6QS5kZXNjcmlwdGlvbi5sZW5ndGg+MD8oQS5zaGFwZT1BZ3QsQS5kZXNjcmlwdGlvbj09PWI/QS5kZXNjcmlwdGlvbj1bZi5kZXNjcmlwdGlvbl06QS5kZXNjcmlwdGlvbj1bQS5kZXNjcmlwdGlvbixmLmRlc2NyaXB0aW9uXSk6KEEuc2hhcGU9cUssQS5kZXNjcmlwdGlvbj1mLmRlc2NyaXB0aW9uKSxBLmRlc2NyaXB0aW9uPXVpLnNhbml0aXplVGV4dE9yQXJyYXkoQS5kZXNjcmlwdGlvbixEZSgpKSksQS5kZXNjcmlwdGlvbi5sZW5ndGg9PT0xJiZBLnNoYXBlPT09QWd0JiYoQS5zaGFwZT1xSyksIUEudHlwZSYmZi5kb2MmJihXdC5pbmZvKCJTZXR0aW5nIGNsdXN0ZXIgZm9yICIsYixEZ3QoZikpLEEudHlwZT0iZ3JvdXAiLEEuZGlyPURndChmKSxBLnNoYXBlPWYudHlwZT09PVJSdD9UR2U6X0dlLEEuY2xhc3Nlcz1BLmNsYXNzZXMrIiAiK0lHZSsiICIrKG0/T0dlOiIiKSk7Y29uc3QgUD17bGFiZWxTdHlsZToiIixzaGFwZTpBLnNoYXBlLGxhYmVsVGV4dDpBLmRlc2NyaXB0aW9uLGNsYXNzZXM6QS5jbGFzc2VzLHN0eWxlOiIiLGlkOmIsZGlyOkEuZGlyLGRvbUlkOk1ndChiLGhrKSx0eXBlOkEudHlwZSxwYWRkaW5nOjE1fTtpZihQLmNlbnRlckxhYmVsPSEwLGYubm90ZSl7Y29uc3QgRj17bGFiZWxTdHlsZToiIixzaGFwZTpDR2UsbGFiZWxUZXh0OmYubm90ZS50ZXh0LGNsYXNzZXM6REdlLHN0eWxlOiIiLGlkOmIrUEdlKyItIitoayxkb21JZDpNZ3QoYixoayxpanQpLHR5cGU6QS50eXBlLHBhZGRpbmc6MTV9LGo9e2xhYmVsU3R5bGU6IiIsc2hhcGU6U0dlLGxhYmVsVGV4dDpmLm5vdGUudGV4dCxjbGFzc2VzOkEuY2xhc3NlcyxzdHlsZToiIixpZDpiK3NqdCxkb21JZDpNZ3QoYixoayxyanQpLHR5cGU6Imdyb3VwIixwYWRkaW5nOjB9O2hrKys7Y29uc3QgUj1iK3NqdDtpLnNldE5vZGUoUixqKSxpLnNldE5vZGUoRi5pZCxGKSxpLnNldE5vZGUoYixQKSxpLnNldFBhcmVudChiLFIpLGkuc2V0UGFyZW50KEYuaWQsUik7bGV0IEg9YixZPUYuaWQ7Zi5ub3RlLnBvc2l0aW9uPT09ImxlZnQgb2YiJiYoSD1GLmlkLFk9YiksaS5zZXRFZGdlKEgsWSx7YXJyb3doZWFkOiJub25lIixhcnJvd1R5cGU6IiIsc3R5bGU6YWp0LGxhYmVsU3R5bGU6IiIsY2xhc3NlczpNR2UsYXJyb3doZWFkU3R5bGU6b2p0LGxhYmVscG9zOmNqdCxsYWJlbFR5cGU6dWp0LHRoaWNrbmVzczpsanR9KX1lbHNlIGkuc2V0Tm9kZShiLFApfWEmJmEuaWQhPT0icm9vdCImJihXdC50cmFjZSgiU2V0dGluZyBub2RlICIsYiwiIHRvIGJlIGNoaWxkIG9mIGl0cyBwYXJlbnQgIixhLmlkKSxpLnNldFBhcmVudChiLGEuaWQpKSxmLmRvYyYmKFd0LnRyYWNlKCJBZGRpbmcgbm9kZXMgY2hpbGRyZW4gIiksakdlKGksZixmLmRvYyxwLHYsIW0pKX0sakdlPShpLGEsZixwLHYsbSk9PntXdC50cmFjZSgiaXRlbXMiLGYpLGYuZm9yRWFjaChiPT57c3dpdGNoKGIuc3RtdCl7Y2FzZSBCSzpIUChpLGEsYixwLHYsbSk7YnJlYWs7Y2FzZSBqUDpIUChpLGEsYixwLHYsbSk7YnJlYWs7Y2FzZSB5Z3Q6e0hQKGksYSxiLnN0YXRlMSxwLHYsbSksSFAoaSxhLGIuc3RhdGUyLHAsdixtKTtjb25zdCBFPXtpZDoiZWRnZSIraGssYXJyb3doZWFkOiJub3JtYWwiLGFycm93VHlwZUVuZDoiYXJyb3dfYmFyYiIsc3R5bGU6YWp0LGxhYmVsU3R5bGU6IiIsbGFiZWw6dWkuc2FuaXRpemVUZXh0KGIuZGVzY3JpcHRpb24sRGUoKSksYXJyb3doZWFkU3R5bGU6b2p0LGxhYmVscG9zOmNqdCxsYWJlbFR5cGU6dWp0LHRoaWNrbmVzczpsanQsY2xhc3NlczpuanR9O2kuc2V0RWRnZShiLnN0YXRlMS5pZCxiLnN0YXRlMi5pZCxFLGhrKSxoaysrfWJyZWFrfX0pfSxEZ3Q9KGksYT1QVmUpPT57bGV0IGY9YTtpZihpLmRvYylmb3IobGV0IHA9MDtwPGkuZG9jLmxlbmd0aDtwKyspe2NvbnN0IHY9aS5kb2NbcF07di5zdG10PT09ImRpciImJihmPXYudmFsdWUpfXJldHVybiBmfSwkR2U9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpCUnQsZGI6UDUscmVuZGVyZXI6e3NldENvbmY6RkdlLGdldENsYXNzZXM6QkdlLGRyYXc6YXN5bmMgZnVuY3Rpb24oaSxhLGYscCl7V3QuaW5mbygiRHJhd2luZyBzdGF0ZSBkaWFncmFtICh2MikiLGEpLEhLPXt9LHAuZGIuZ2V0RGlyZWN0aW9uKCk7Y29uc3R7c2VjdXJpdHlMZXZlbDp2LHN0YXRlOm19PURlKCksYj1tLm5vZGVTcGFjaW5nfHw1MCxFPW0ucmFua1NwYWNpbmd8fDUwO1d0LmluZm8ocC5kYi5nZXRSb290RG9jVjIoKSkscC5kYi5leHRyYWN0KHAuZGIuZ2V0Um9vdERvY1YyKCkpLFd0LmluZm8ocC5kYi5nZXRSb290RG9jVjIoKSk7Y29uc3QgQz1wLmRiLmdldFN0YXRlcygpLEE9bmV3IGwxKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6RGd0KHAuZGIuZ2V0Um9vdERvY1YyKCkpLG5vZGVzZXA6YixyYW5rc2VwOkUsbWFyZ2lueDo4LG1hcmdpbnk6OH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKXtyZXR1cm57fX0pO0hQKEEsdm9pZCAwLHAuZGIuZ2V0Um9vdERvY1YyKCksQyxwLmRiLCEwKTtsZXQgUDt2PT09InNhbmRib3giJiYoUD14cigiI2kiK2EpKTtjb25zdCBGPXhyKHY9PT0ic2FuZGJveCI/UC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5Iiksaj1GLnNlbGVjdChgW2lkPSIke2F9Il1gKSxSPUYuc2VsZWN0KCIjIithKyIgZyIpO2F3YWl0IEEwdChSLEEsWyJiYXJiIl0sZ0wsYSk7Y29uc3QgSD04O3RvLmluc2VydFRpdGxlKGosInN0YXRlZGlhZ3JhbVRpdGxlVGV4dCIsbS50aXRsZVRvcE1hcmdpbixwLmRiLmdldERpYWdyYW1UaXRsZSgpKTtjb25zdCBZPWoubm9kZSgpLmdldEJCb3goKSxydD1ZLndpZHRoK0gqMixKPVkuaGVpZ2h0K0gqMjtqLmF0dHIoImNsYXNzIixnTCk7Y29uc3QgaXQ9ai5ub2RlKCkuZ2V0QkJveCgpO29nKGosSixydCxtLnVzZU1heFdpZHRoKTtjb25zdCBmdD1gJHtpdC54LUh9ICR7aXQueS1IfSAke3J0fSAke0p9YDtXdC5kZWJ1Zyhgdmlld0JveCAke2Z0fWApLGouYXR0cigidmlld0JveCIsZnQpO2NvbnN0IFR0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZD0iJythKyciXSAuZWRnZUxhYmVsIC5sYWJlbCcpO2Zvcihjb25zdCBrdCBvZiBUdCl7Y29uc3QgbXQ9a3QuZ2V0QkJveCgpLGN0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHFLKTtjdC5zZXRBdHRyaWJ1dGUoInJ4IiwwKSxjdC5zZXRBdHRyaWJ1dGUoInJ5IiwwKSxjdC5zZXRBdHRyaWJ1dGUoIndpZHRoIixtdC53aWR0aCksY3Quc2V0QXR0cmlidXRlKCJoZWlnaHQiLG10LmhlaWdodCksa3QuaW5zZXJ0QmVmb3JlKGN0LGt0LmZpcnN0Q2hpbGQpfX19LHN0eWxlczpRUnQsaW5pdDppPT57aS5zdGF0ZXx8KGkuc3RhdGU9e30pLGkuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZT1pLmFycm93TWFya2VyQWJzb2x1dGUsUDUuY2xlYXIoKX19fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBJZ3Q9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihZLHJ0LEosaXQpe2ZvcihKPUp8fHt9LGl0PVkubGVuZ3RoO2l0LS07SltZW2l0XV09cnQpO3JldHVybiBKfSxhPVsxLDJdLGY9WzEsNV0scD1bNiw5LDExLDE3LDE4LDIwLDIyLDIzLDI0LDI2XSx2PVsxLDE1XSxtPVsxLDE2XSxiPVsxLDE3XSxFPVsxLDE4XSxDPVsxLDE5XSxBPVsxLDIwXSxQPVsxLDI0XSxGPVs0LDYsOSwxMSwxNywxOCwyMCwyMiwyMywyNCwyNl0saj17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsam91cm5leTo0LGRvY3VtZW50OjUsRU9GOjYsZGlyZWN0aXZlOjcsbGluZTo4LFNQQUNFOjksc3RhdGVtZW50OjEwLE5FV0xJTkU6MTEsb3BlbkRpcmVjdGl2ZToxMix0eXBlRGlyZWN0aXZlOjEzLGNsb3NlRGlyZWN0aXZlOjE0LCI6IjoxNSxhcmdEaXJlY3RpdmU6MTYsdGl0bGU6MTcsYWNjX3RpdGxlOjE4LGFjY190aXRsZV92YWx1ZToxOSxhY2NfZGVzY3I6MjAsYWNjX2Rlc2NyX3ZhbHVlOjIxLGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MjIsc2VjdGlvbjoyMyx0YXNrTmFtZToyNCx0YXNrRGF0YToyNSxvcGVuX2RpcmVjdGl2ZToyNix0eXBlX2RpcmVjdGl2ZToyNyxhcmdfZGlyZWN0aXZlOjI4LGNsb3NlX2RpcmVjdGl2ZToyOSwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiam91cm5leSIsNjoiRU9GIiw5OiJTUEFDRSIsMTE6Ik5FV0xJTkUiLDE1OiI6IiwxNzoidGl0bGUiLDE4OiJhY2NfdGl0bGUiLDE5OiJhY2NfdGl0bGVfdmFsdWUiLDIwOiJhY2NfZGVzY3IiLDIxOiJhY2NfZGVzY3JfdmFsdWUiLDIyOiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwyMzoic2VjdGlvbiIsMjQ6InRhc2tOYW1lIiwyNToidGFza0RhdGEiLDI2OiJvcGVuX2RpcmVjdGl2ZSIsMjc6InR5cGVfZGlyZWN0aXZlIiwyODoiYXJnX2RpcmVjdGl2ZSIsMjk6ImNsb3NlX2RpcmVjdGl2ZSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywzXSxbMywyXSxbNSwwXSxbNSwyXSxbOCwyXSxbOCwxXSxbOCwxXSxbOCwxXSxbNyw0XSxbNyw2XSxbMTAsMV0sWzEwLDJdLFsxMCwyXSxbMTAsMV0sWzEwLDFdLFsxMCwyXSxbMTAsMV0sWzEyLDFdLFsxMywxXSxbMTYsMV0sWzE0LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHJ0LEosaXQsZnQsVHQsa3QsbXQpe3ZhciBjdD1rdC5sZW5ndGgtMTtzd2l0Y2goVHQpe2Nhc2UgMTpyZXR1cm4ga3RbY3QtMV07Y2FzZSAzOnRoaXMuJD1bXTticmVhaztjYXNlIDQ6a3RbY3QtMV0ucHVzaChrdFtjdF0pLHRoaXMuJD1rdFtjdC0xXTticmVhaztjYXNlIDU6Y2FzZSA2OnRoaXMuJD1rdFtjdF07YnJlYWs7Y2FzZSA3OmNhc2UgODp0aGlzLiQ9W107YnJlYWs7Y2FzZSAxMTpmdC5zZXREaWFncmFtVGl0bGUoa3RbY3RdLnN1YnN0cig2KSksdGhpcy4kPWt0W2N0XS5zdWJzdHIoNik7YnJlYWs7Y2FzZSAxMjp0aGlzLiQ9a3RbY3RdLnRyaW0oKSxmdC5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMTM6Y2FzZSAxNDp0aGlzLiQ9a3RbY3RdLnRyaW0oKSxmdC5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgMTU6ZnQuYWRkU2VjdGlvbihrdFtjdF0uc3Vic3RyKDgpKSx0aGlzLiQ9a3RbY3RdLnN1YnN0cig4KTticmVhaztjYXNlIDE2OmZ0LmFkZFRhc2soa3RbY3QtMV0sa3RbY3RdKSx0aGlzLiQ9InRhc2siO2JyZWFrO2Nhc2UgMTg6ZnQucGFyc2VEaXJlY3RpdmUoIiUleyIsIm9wZW5fZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAxOTpmdC5wYXJzZURpcmVjdGl2ZShrdFtjdF0sInR5cGVfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAyMDprdFtjdF09a3RbY3RdLnRyaW0oKS5yZXBsYWNlKC8nL2csJyInKSxmdC5wYXJzZURpcmVjdGl2ZShrdFtjdF0sImFyZ19kaXJlY3RpdmUiKTticmVhaztjYXNlIDIxOmZ0LnBhcnNlRGlyZWN0aXZlKCJ9JSUiLCJjbG9zZV9kaXJlY3RpdmUiLCJqb3VybmV5Iik7YnJlYWt9fSx0YWJsZTpbezM6MSw0OmEsNzozLDEyOjQsMjY6Zn0sezE6WzNdfSxpKHAsWzIsM10sezU6Nn0pLHszOjcsNDphLDc6MywxMjo0LDI2OmZ9LHsxMzo4LDI3OlsxLDldfSx7Mjc6WzIsMThdfSx7NjpbMSwxMF0sNzoyMSw4OjExLDk6WzEsMTJdLDEwOjEzLDExOlsxLDE0XSwxMjo0LDE3OnYsMTg6bSwyMDpiLDIyOkUsMjM6QywyNDpBLDI2OmZ9LHsxOlsyLDJdfSx7MTQ6MjIsMTU6WzEsMjNdLDI5OlB9LGkoWzE1LDI5XSxbMiwxOV0pLGkocCxbMiw4XSx7MTpbMiwxXX0pLGkocCxbMiw0XSksezc6MjEsMTA6MjUsMTI6NCwxNzp2LDE4Om0sMjA6YiwyMjpFLDIzOkMsMjQ6QSwyNjpmfSxpKHAsWzIsNl0pLGkocCxbMiw3XSksaShwLFsyLDExXSksezE5OlsxLDI2XX0sezIxOlsxLDI3XX0saShwLFsyLDE0XSksaShwLFsyLDE1XSksezI1OlsxLDI4XX0saShwLFsyLDE3XSksezExOlsxLDI5XX0sezE2OjMwLDI4OlsxLDMxXX0sezExOlsyLDIxXX0saShwLFsyLDVdKSxpKHAsWzIsMTJdKSxpKHAsWzIsMTNdKSxpKHAsWzIsMTZdKSxpKEYsWzIsOV0pLHsxNDozMiwyOTpQfSx7Mjk6WzIsMjBdfSx7MTE6WzEsMzNdfSxpKEYsWzIsMTBdKV0sZGVmYXVsdEFjdGlvbnM6ezU6WzIsMThdLDc6WzIsMl0sMjQ6WzIsMjFdLDMxOlsyLDIwXX0scGFyc2VFcnJvcjpmdW5jdGlvbihydCxKKXtpZihKLnJlY292ZXJhYmxlKXRoaXMudHJhY2UocnQpO2Vsc2V7dmFyIGl0PW5ldyBFcnJvcihydCk7dGhyb3cgaXQuaGFzaD1KLGl0fX0scGFyc2U6ZnVuY3Rpb24ocnQpe3ZhciBKPXRoaXMsaXQ9WzBdLGZ0PVtdLFR0PVtudWxsXSxrdD1bXSxtdD10aGlzLnRhYmxlLGN0PSIiLHl0PTAsc3Q9MCx4dD0yLGh0PTEsZHQ9a3Quc2xpY2UuY2FsbChhcmd1bWVudHMsMSksQ3Q9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSx0dD17eXk6e319O2Zvcih2YXIgUHQgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxQdCkmJih0dC55eVtQdF09dGhpcy55eVtQdF0pO0N0LnNldElucHV0KHJ0LHR0Lnl5KSx0dC55eS5sZXhlcj1DdCx0dC55eS5wYXJzZXI9dGhpcyx0eXBlb2YgQ3QueXlsbG9jPiJ1IiYmKEN0Lnl5bGxvYz17fSk7dmFyIHB0PUN0Lnl5bGxvYztrdC5wdXNoKHB0KTt2YXIgRnQ9Q3Qub3B0aW9ucyYmQ3Qub3B0aW9ucy5yYW5nZXM7dHlwZW9mIHR0Lnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPXR0Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIFgoKXt2YXIgbmU7cmV0dXJuIG5lPWZ0LnBvcCgpfHxDdC5sZXgoKXx8aHQsdHlwZW9mIG5lIT0ibnVtYmVyIiYmKG5lIGluc3RhbmNlb2YgQXJyYXkmJihmdD1uZSxuZT1mdC5wb3AoKSksbmU9Si5zeW1ib2xzX1tuZV18fG5lKSxuZX1mb3IodmFyIFJ0LEJ0LHZ0LE90LFZ0PXt9LHFlLF9uLFRlLFduOzspe2lmKEJ0PWl0W2l0Lmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW0J0XT92dD10aGlzLmRlZmF1bHRBY3Rpb25zW0J0XTooKFJ0PT09bnVsbHx8dHlwZW9mIFJ0PiJ1IikmJihSdD1YKCkpLHZ0PW10W0J0XSYmbXRbQnRdW1J0XSksdHlwZW9mIHZ0PiJ1Inx8IXZ0Lmxlbmd0aHx8IXZ0WzBdKXt2YXIgQWU9IiI7V249W107Zm9yKHFlIGluIG10W0J0XSl0aGlzLnRlcm1pbmFsc19bcWVdJiZxZT54dCYmV24ucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW3FlXSsiJyIpO0N0LnNob3dQb3NpdGlvbj9BZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyh5dCsxKStgOgpgK0N0LnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArV24uam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tSdF18fFJ0KSsiJyI6QWU9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoeXQrMSkrIjogVW5leHBlY3RlZCAiKyhSdD09aHQ/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bUnRdfHxSdCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoQWUse3RleHQ6Q3QubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW1J0XXx8UnQsbGluZTpDdC55eWxpbmVubyxsb2M6cHQsZXhwZWN0ZWQ6V259KX1pZih2dFswXWluc3RhbmNlb2YgQXJyYXkmJnZ0Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrQnQrIiwgdG9rZW46ICIrUnQpO3N3aXRjaCh2dFswXSl7Y2FzZSAxOml0LnB1c2goUnQpLFR0LnB1c2goQ3QueXl0ZXh0KSxrdC5wdXNoKEN0Lnl5bGxvYyksaXQucHVzaCh2dFsxXSksUnQ9bnVsbCxzdD1DdC55eWxlbmcsY3Q9Q3QueXl0ZXh0LHl0PUN0Lnl5bGluZW5vLHB0PUN0Lnl5bGxvYzticmVhaztjYXNlIDI6aWYoX249dGhpcy5wcm9kdWN0aW9uc19bdnRbMV1dWzFdLFZ0LiQ9VHRbVHQubGVuZ3RoLV9uXSxWdC5fJD17Zmlyc3RfbGluZTprdFtrdC5sZW5ndGgtKF9ufHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6a3Rba3QubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46a3Rba3QubGVuZ3RoLShfbnx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjprdFtrdC5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LEZ0JiYoVnQuXyQucmFuZ2U9W2t0W2t0Lmxlbmd0aC0oX258fDEpXS5yYW5nZVswXSxrdFtrdC5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxPdD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoVnQsW2N0LHN0LHl0LHR0Lnl5LHZ0WzFdLFR0LGt0XS5jb25jYXQoZHQpKSx0eXBlb2YgT3Q8InUiKXJldHVybiBPdDtfbiYmKGl0PWl0LnNsaWNlKDAsLTEqX24qMiksVHQ9VHQuc2xpY2UoMCwtMSpfbiksa3Q9a3Quc2xpY2UoMCwtMSpfbikpLGl0LnB1c2godGhpcy5wcm9kdWN0aW9uc19bdnRbMV1dWzBdKSxUdC5wdXNoKFZ0LiQpLGt0LnB1c2goVnQuXyQpLFRlPW10W2l0W2l0Lmxlbmd0aC0yXV1baXRbaXQubGVuZ3RoLTFdXSxpdC5wdXNoKFRlKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sUj1mdW5jdGlvbigpe3ZhciBZPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKEosaXQpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoSixpdCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoSil9LHNldElucHV0OmZ1bmN0aW9uKHJ0LEope3JldHVybiB0aGlzLnl5PUp8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXJ0LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBydD10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9cnQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXJ0LHRoaXMubWF0Y2hlZCs9cnQ7dmFyIEo9cnQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBKPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxydH0sdW5wdXQ6ZnVuY3Rpb24ocnQpe3ZhciBKPXJ0Lmxlbmd0aCxpdD1ydC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXJ0K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1KKSx0aGlzLm9mZnNldC09Sjt2YXIgZnQ9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksaXQubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1pdC5sZW5ndGgtMSk7dmFyIFR0PXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjppdD8oaXQubGVuZ3RoPT09ZnQubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStmdFtmdC5sZW5ndGgtaXQubGVuZ3RoXS5sZW5ndGgtaXRbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1KfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W1R0WzBdLFR0WzBdK3RoaXMueXlsZW5nLUpdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihydCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHJ0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciBydD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHJ0Lmxlbmd0aD4yMD8iLi4uIjoiIikrcnQuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgcnQ9dGhpcy5tYXRjaDtyZXR1cm4gcnQubGVuZ3RoPDIwJiYocnQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXJ0Lmxlbmd0aCkpLChydC5zdWJzdHIoMCwyMCkrKHJ0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgcnQ9dGhpcy5wYXN0SW5wdXQoKSxKPW5ldyBBcnJheShydC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBydCt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArSisiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24ocnQsSil7dmFyIGl0LGZ0LFR0O2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihUdD17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihUdC55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxmdD1ydFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksZnQmJih0aGlzLnl5bGluZW5vKz1mdC5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpmdD9mdFtmdC5sZW5ndGgtMV0ubGVuZ3RoLWZ0W2Z0Lmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3J0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXJ0WzBdLHRoaXMubWF0Y2grPXJ0WzBdLHRoaXMubWF0Y2hlcz1ydCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShydFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9cnRbMF0saXQ9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsSix0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxpdClyZXR1cm4gaXQ7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGt0IGluIFR0KXRoaXNba3RdPVR0W2t0XTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBydCxKLGl0LGZ0O3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIFR0PXRoaXMuX2N1cnJlbnRSdWxlcygpLGt0PTA7a3Q8VHQubGVuZ3RoO2t0KyspaWYoaXQ9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tUdFtrdF1dKSxpdCYmKCFKfHxpdFswXS5sZW5ndGg+SlswXS5sZW5ndGgpKXtpZihKPWl0LGZ0PWt0LHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKHJ0PXRoaXMudGVzdF9tYXRjaChpdCxUdFtrdF0pLHJ0IT09ITEpcmV0dXJuIHJ0O2lmKHRoaXMuX2JhY2t0cmFjayl7Sj0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBKPyhydD10aGlzLnRlc3RfbWF0Y2goSixUdFtmdF0pLHJ0IT09ITE/cnQ6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciBKPXRoaXMubmV4dCgpO3JldHVybiBKfHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbihKKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goSil9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIEo9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gSj4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKEope3JldHVybiBKPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoSnx8MCksSj49MD90aGlzLmNvbmRpdGlvblN0YWNrW0pdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKEope3RoaXMuYmVnaW4oSil9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oSixpdCxmdCxUdCl7c3dpdGNoKGZ0KXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oIm9wZW5fZGlyZWN0aXZlIiksMjY7Y2FzZSAxOnJldHVybiB0aGlzLmJlZ2luKCJ0eXBlX2RpcmVjdGl2ZSIpLDI3O2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImFyZ19kaXJlY3RpdmUiKSwxNTtjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksMjk7Y2FzZSA0OnJldHVybiAyODtjYXNlIDU6YnJlYWs7Y2FzZSA2OmJyZWFrO2Nhc2UgNzpyZXR1cm4gMTE7Y2FzZSA4OmJyZWFrO2Nhc2UgOTpicmVhaztjYXNlIDEwOnJldHVybiA0O2Nhc2UgMTE6cmV0dXJuIDE3O2Nhc2UgMTI6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDE4O2Nhc2UgMTM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDE0OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwyMDtjYXNlIDE1OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7Y2FzZSAxNjp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAxNzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxODpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSAxOTpyZXR1cm4gMjM7Y2FzZSAyMDpyZXR1cm4gMjQ7Y2FzZSAyMTpyZXR1cm4gMjU7Y2FzZSAyMjpyZXR1cm4gMTU7Y2FzZSAyMzpyZXR1cm4gNjtjYXNlIDI0OnJldHVybiJJTlZBTElEIn19LHJ1bGVzOlsvXig/OiUlXHspL2ksL14oPzooKD86KD8hXH0lJSlbXjouXSkqKSkvaSwvXig/OjopL2ksL14oPzpcfSUlKS9pLC9eKD86KCg/Oig/IVx9JSUpLnxcbikqKSkvaSwvXig/OiUoPyFceylbXlxuXSopL2ksL14oPzpbXlx9XSUlW15cbl0qKS9pLC9eKD86W1xuXSspL2ksL14oPzpccyspL2ksL14oPzojW15cbl0qKS9pLC9eKD86am91cm5leVxiKS9pLC9eKD86dGl0bGVcc1teI1xuO10rKS9pLC9eKD86YWNjVGl0bGVccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccypce1xzKikvaSwvXig/OltcfV0pL2ksL14oPzpbXlx9XSopL2ksL14oPzpzZWN0aW9uXHNbXiM6XG47XSspL2ksL14oPzpbXiM6XG47XSspL2ksL14oPzo6W14jXG47XSspL2ksL14oPzo6KS9pLC9eKD86JCkvaSwvXig/Oi4pL2ldLGNvbmRpdGlvbnM6e29wZW5fZGlyZWN0aXZlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSx0eXBlX2RpcmVjdGl2ZTp7cnVsZXM6WzIsM10saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlsxNywxOF0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOlsxNV0saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOlsxM10saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCw1LDYsNyw4LDksMTAsMTEsMTIsMTQsMTYsMTksMjAsMjEsMjIsMjMsMjRdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gWX0oKTtqLmxleGVyPVI7ZnVuY3Rpb24gSCgpe3RoaXMueXk9e319cmV0dXJuIEgucHJvdG90eXBlPWosai5QYXJzZXI9SCxuZXcgSH0oKTtJZ3QucGFyc2VyPUlndDtjb25zdCB6R2U9SWd0O2xldCBwTD0iIjtjb25zdCBPZ3Q9W10sVlA9W10sR1A9W10scUdlPWZ1bmN0aW9uKGksYSxmKXtKMS5wYXJzZURpcmVjdGl2ZSh0aGlzLGksYSxmKX0sSEdlPWZ1bmN0aW9uKCl7T2d0Lmxlbmd0aD0wLFZQLmxlbmd0aD0wLHBMPSIiLEdQLmxlbmd0aD0wLGNnKCl9LFZHZT1mdW5jdGlvbihpKXtwTD1pLE9ndC5wdXNoKGkpfSxHR2U9ZnVuY3Rpb24oKXtyZXR1cm4gT2d0fSxVR2U9ZnVuY3Rpb24oKXtsZXQgaT1oanQoKTtjb25zdCBhPTEwMDtsZXQgZj0wO2Zvcig7IWkmJmY8YTspaT1oanQoKSxmKys7cmV0dXJuIFZQLnB1c2goLi4uR1ApLFZQfSxXR2U9ZnVuY3Rpb24oKXtjb25zdCBpPVtdO3JldHVybiBWUC5mb3JFYWNoKGY9PntmLnBlb3BsZSYmaS5wdXNoKC4uLmYucGVvcGxlKX0pLFsuLi5uZXcgU2V0KGkpXS5zb3J0KCl9LEtHZT1mdW5jdGlvbihpLGEpe2NvbnN0IGY9YS5zdWJzdHIoMSkuc3BsaXQoIjoiKTtsZXQgcD0wLHY9W107Zi5sZW5ndGg9PT0xPyhwPU51bWJlcihmWzBdKSx2PVtdKToocD1OdW1iZXIoZlswXSksdj1mWzFdLnNwbGl0KCIsIikpO2NvbnN0IG09di5tYXAoRT0+RS50cmltKCkpLGI9e3NlY3Rpb246cEwsdHlwZTpwTCxwZW9wbGU6bSx0YXNrOmksc2NvcmU6cH07R1AucHVzaChiKX0sWUdlPWZ1bmN0aW9uKGkpe2NvbnN0IGE9e3NlY3Rpb246cEwsdHlwZTpwTCxkZXNjcmlwdGlvbjppLHRhc2s6aSxjbGFzc2VzOltdfTtWUC5wdXNoKGEpfSxoanQ9ZnVuY3Rpb24oKXtjb25zdCBpPWZ1bmN0aW9uKGYpe3JldHVybiBHUFtmXS5wcm9jZXNzZWR9O2xldCBhPSEwO2Zvcihjb25zdFtmLHBdb2YgR1AuZW50cmllcygpKWkoZiksYT1hJiZwLnByb2Nlc3NlZDtyZXR1cm4gYX0sZmp0PXtwYXJzZURpcmVjdGl2ZTpxR2UsZ2V0Q29uZmlnOigpPT5EZSgpLmpvdXJuZXksY2xlYXI6SEdlLHNldERpYWdyYW1UaXRsZTpOYixnZXREaWFncmFtVGl0bGU6aHAsc2V0QWNjVGl0bGU6bTAsZ2V0QWNjVGl0bGU6dWcsc2V0QWNjRGVzY3JpcHRpb246bGcsZ2V0QWNjRGVzY3JpcHRpb246aGcsYWRkU2VjdGlvbjpWR2UsZ2V0U2VjdGlvbnM6R0dlLGdldFRhc2tzOlVHZSxhZGRUYXNrOktHZSxhZGRUYXNrT3JnOllHZSxnZXRBY3RvcnM6ZnVuY3Rpb24oKXtyZXR1cm4gV0dlKCl9fSxYR2U9aT0+YC5sYWJlbCB7CiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmOwogICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpOwogICAgY29sb3I6ICR7aS50ZXh0Q29sb3J9OwogIH0KICAubW91dGggewogICAgc3Ryb2tlOiAjNjY2OwogIH0KCiAgbGluZSB7CiAgICBzdHJva2U6ICR7aS50ZXh0Q29sb3J9CiAgfQoKICAubGVnZW5kIHsKICAgIGZpbGw6ICR7aS50ZXh0Q29sb3J9OwogIH0KCiAgLmxhYmVsIHRleHQgewogICAgZmlsbDogIzMzMzsKICB9CiAgLmxhYmVsIHsKICAgIGNvbG9yOiAke2kudGV4dENvbG9yfQogIH0KCiAgLmZhY2UgewogICAgJHtpLmZhY2VDb2xvcj9gZmlsbDogJHtpLmZhY2VDb2xvcn1gOiJmaWxsOiAjRkZGOERDIn07CiAgICBzdHJva2U6ICM5OTk7CiAgfQoKICAubm9kZSByZWN0LAogIC5ub2RlIGNpcmNsZSwKICAubm9kZSBlbGxpcHNlLAogIC5ub2RlIHBvbHlnb24sCiAgLm5vZGUgcGF0aCB7CiAgICBmaWxsOiAke2kubWFpbkJrZ307CiAgICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KCiAgLm5vZGUgLmxhYmVsIHsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICB9CiAgLm5vZGUuY2xpY2thYmxlIHsKICAgIGN1cnNvcjogcG9pbnRlcjsKICB9CgogIC5hcnJvd2hlYWRQYXRoIHsKICAgIGZpbGw6ICR7aS5hcnJvd2hlYWRDb2xvcn07CiAgfQoKICAuZWRnZVBhdGggLnBhdGggewogICAgc3Ryb2tlOiAke2kubGluZUNvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogMS41cHg7CiAgfQoKICAuZmxvd2NoYXJ0LWxpbmsgewogICAgc3Ryb2tlOiAke2kubGluZUNvbG9yfTsKICAgIGZpbGw6IG5vbmU7CiAgfQoKICAuZWRnZUxhYmVsIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICR7aS5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICAgIHJlY3QgewogICAgICBvcGFjaXR5OiAwLjU7CiAgICB9CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgfQoKICAuY2x1c3RlciByZWN0IHsKICB9CgogIC5jbHVzdGVyIHRleHQgewogICAgZmlsbDogJHtpLnRpdGxlQ29sb3J9OwogIH0KCiAgZGl2Lm1lcm1haWRUb29sdGlwIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIG1heC13aWR0aDogMjAwcHg7CiAgICBwYWRkaW5nOiAycHg7CiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmOwogICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgYmFja2dyb3VuZDogJHtpLnRlcnRpYXJ5Q29sb3J9OwogICAgYm9yZGVyOiAxcHggc29saWQgJHtpLmJvcmRlcjJ9OwogICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB6LWluZGV4OiAxMDA7CiAgfQoKICAudGFzay10eXBlLTAsIC5zZWN0aW9uLXR5cGUtMCAgewogICAgJHtpLmZpbGxUeXBlMD9gZmlsbDogJHtpLmZpbGxUeXBlMH1gOiIifTsKICB9CiAgLnRhc2stdHlwZS0xLCAuc2VjdGlvbi10eXBlLTEgIHsKICAgICR7aS5maWxsVHlwZTA/YGZpbGw6ICR7aS5maWxsVHlwZTF9YDoiIn07CiAgfQogIC50YXNrLXR5cGUtMiwgLnNlY3Rpb24tdHlwZS0yICB7CiAgICAke2kuZmlsbFR5cGUwP2BmaWxsOiAke2kuZmlsbFR5cGUyfWA6IiJ9OwogIH0KICAudGFzay10eXBlLTMsIC5zZWN0aW9uLXR5cGUtMyAgewogICAgJHtpLmZpbGxUeXBlMD9gZmlsbDogJHtpLmZpbGxUeXBlM31gOiIifTsKICB9CiAgLnRhc2stdHlwZS00LCAuc2VjdGlvbi10eXBlLTQgIHsKICAgICR7aS5maWxsVHlwZTA/YGZpbGw6ICR7aS5maWxsVHlwZTR9YDoiIn07CiAgfQogIC50YXNrLXR5cGUtNSwgLnNlY3Rpb24tdHlwZS01ICB7CiAgICAke2kuZmlsbFR5cGUwP2BmaWxsOiAke2kuZmlsbFR5cGU1fWA6IiJ9OwogIH0KICAudGFzay10eXBlLTYsIC5zZWN0aW9uLXR5cGUtNiAgewogICAgJHtpLmZpbGxUeXBlMD9gZmlsbDogJHtpLmZpbGxUeXBlNn1gOiIifTsKICB9CiAgLnRhc2stdHlwZS03LCAuc2VjdGlvbi10eXBlLTcgIHsKICAgICR7aS5maWxsVHlwZTA/YGZpbGw6ICR7aS5maWxsVHlwZTd9YDoiIn07CiAgfQoKICAuYWN0b3ItMCB7CiAgICAke2kuYWN0b3IwP2BmaWxsOiAke2kuYWN0b3IwfWA6IiJ9OwogIH0KICAuYWN0b3ItMSB7CiAgICAke2kuYWN0b3IxP2BmaWxsOiAke2kuYWN0b3IxfWA6IiJ9OwogIH0KICAuYWN0b3ItMiB7CiAgICAke2kuYWN0b3IyP2BmaWxsOiAke2kuYWN0b3IyfWA6IiJ9OwogIH0KICAuYWN0b3ItMyB7CiAgICAke2kuYWN0b3IzP2BmaWxsOiAke2kuYWN0b3IzfWA6IiJ9OwogIH0KICAuYWN0b3ItNCB7CiAgICAke2kuYWN0b3I0P2BmaWxsOiAke2kuYWN0b3I0fWA6IiJ9OwogIH0KICAuYWN0b3ItNSB7CiAgICAke2kuYWN0b3I1P2BmaWxsOiAke2kuYWN0b3I1fWA6IiJ9OwogIH0KYCxOZ3Q9ZnVuY3Rpb24oaSxhKXtyZXR1cm4gV1coaSxhKX0sUUdlPWZ1bmN0aW9uKGksYSl7Y29uc3QgcD1pLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGEuY3gpLmF0dHIoImN5IixhLmN5KS5hdHRyKCJjbGFzcyIsImZhY2UiKS5hdHRyKCJyIiwxNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJvdmVyZmxvdyIsInZpc2libGUiKSx2PWkuYXBwZW5kKCJnIik7di5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixhLmN4LTE1LzMpLmF0dHIoImN5IixhLmN5LTE1LzMpLmF0dHIoInIiLDEuNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJmaWxsIiwiIzY2NiIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKSx2LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGEuY3grMTUvMykuYXR0cigiY3kiLGEuY3ktMTUvMykuYXR0cigiciIsMS41KS5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoImZpbGwiLCIjNjY2IikuYXR0cigic3Ryb2tlIiwiIzY2NiIpO2Z1bmN0aW9uIG0oQyl7Y29uc3QgQT1MQSgpLnN0YXJ0QW5nbGUoTWF0aC5QSS8yKS5lbmRBbmdsZSgzKihNYXRoLlBJLzIpKS5pbm5lclJhZGl1cyg3LjUpLm91dGVyUmFkaXVzKDYuODE4MTgxODE4MTgxODE3NSk7Qy5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigiZCIsQSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYS5jeCsiLCIrKGEuY3krMikrIikiKX1mdW5jdGlvbiBiKEMpe2NvbnN0IEE9TEEoKS5zdGFydEFuZ2xlKDMqTWF0aC5QSS8yKS5lbmRBbmdsZSg1KihNYXRoLlBJLzIpKS5pbm5lclJhZGl1cyg3LjUpLm91dGVyUmFkaXVzKDYuODE4MTgxODE4MTgxODE3NSk7Qy5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigiZCIsQSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYS5jeCsiLCIrKGEuY3krNykrIikiKX1mdW5jdGlvbiBFKEMpe0MuYXBwZW5kKCJsaW5lIikuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoInN0cm9rZSIsMikuYXR0cigieDEiLGEuY3gtNSkuYXR0cigieTEiLGEuY3krNykuYXR0cigieDIiLGEuY3grNSkuYXR0cigieTIiLGEuY3krNykuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKX1yZXR1cm4gYS5zY29yZT4zP20odik6YS5zY29yZTwzP2Iodik6RSh2KSxwfSxkanQ9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPWkuYXBwZW5kKCJjaXJjbGUiKTtyZXR1cm4gZi5hdHRyKCJjeCIsYS5jeCksZi5hdHRyKCJjeSIsYS5jeSksZi5hdHRyKCJjbGFzcyIsImFjdG9yLSIrYS5wb3MpLGYuYXR0cigiZmlsbCIsYS5maWxsKSxmLmF0dHIoInN0cm9rZSIsYS5zdHJva2UpLGYuYXR0cigiciIsYS5yKSxmLmNsYXNzIT09dm9pZCAwJiZmLmF0dHIoImNsYXNzIixmLmNsYXNzKSxhLnRpdGxlIT09dm9pZCAwJiZmLmFwcGVuZCgidGl0bGUiKS50ZXh0KGEudGl0bGUpLGZ9LGdqdD1mdW5jdGlvbihpLGEpe3JldHVybiBzRGUoaSxhKX0sWkdlPWZ1bmN0aW9uKGksYSl7ZnVuY3Rpb24gZih2LG0sYixFLEMpe3JldHVybiB2KyIsIittKyIgIisoditiKSsiLCIrbSsiICIrKHYrYikrIiwiKyhtK0UtQykrIiAiKyh2K2ItQyoxLjIpKyIsIisobStFKSsiICIrdisiLCIrKG0rRSl9Y29uc3QgcD1pLmFwcGVuZCgicG9seWdvbiIpO3AuYXR0cigicG9pbnRzIixmKGEueCxhLnksNTAsMjAsNykpLHAuYXR0cigiY2xhc3MiLCJsYWJlbEJveCIpLGEueT1hLnkrYS5sYWJlbE1hcmdpbixhLng9YS54Ky41KmEubGFiZWxNYXJnaW4sZ2p0KGksYSl9LEpHZT1mdW5jdGlvbihpLGEsZil7Y29uc3QgcD1pLmFwcGVuZCgiZyIpLHY9dTkoKTt2Lng9YS54LHYueT1hLnksdi5maWxsPWEuZmlsbCx2LndpZHRoPWYud2lkdGgqYS50YXNrQ291bnQrZi5kaWFncmFtTWFyZ2luWCooYS50YXNrQ291bnQtMSksdi5oZWlnaHQ9Zi5oZWlnaHQsdi5jbGFzcz0iam91cm5leS1zZWN0aW9uIHNlY3Rpb24tdHlwZS0iK2EubnVtLHYucng9Myx2LnJ5PTMsTmd0KHAsdiksYmp0KGYpKGEudGV4dCxwLHYueCx2Lnksdi53aWR0aCx2LmhlaWdodCx7Y2xhc3M6ImpvdXJuZXktc2VjdGlvbiBzZWN0aW9uLXR5cGUtIithLm51bX0sZixhLmNvbG91cil9O2xldCBwanQ9LTE7Y29uc3QgdFVlPWZ1bmN0aW9uKGksYSxmKXtjb25zdCBwPWEueCtmLndpZHRoLzIsdj1pLmFwcGVuZCgiZyIpO3BqdCsrO2NvbnN0IG09MzAwKzUqMzA7di5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsInRhc2siK3BqdCkuYXR0cigieDEiLHApLmF0dHIoInkxIixhLnkpLmF0dHIoIngyIixwKS5hdHRyKCJ5MiIsbSkuYXR0cigiY2xhc3MiLCJ0YXNrLWxpbmUiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHgiKS5hdHRyKCJzdHJva2UtZGFzaGFycmF5IiwiNCAyIikuYXR0cigic3Ryb2tlIiwiIzY2NiIpLFFHZSh2LHtjeDpwLGN5OjMwMCsoNS1hLnNjb3JlKSozMCxzY29yZTphLnNjb3JlfSk7Y29uc3QgYj11OSgpO2IueD1hLngsYi55PWEueSxiLmZpbGw9YS5maWxsLGIud2lkdGg9Zi53aWR0aCxiLmhlaWdodD1mLmhlaWdodCxiLmNsYXNzPSJ0YXNrIHRhc2stdHlwZS0iK2EubnVtLGIucng9MyxiLnJ5PTMsTmd0KHYsYik7bGV0IEU9YS54KzE0O2EucGVvcGxlLmZvckVhY2goQz0+e2NvbnN0IEE9YS5hY3RvcnNbQ10uY29sb3IsUD17Y3g6RSxjeTphLnkscjo3LGZpbGw6QSxzdHJva2U6IiMwMDAiLHRpdGxlOkMscG9zOmEuYWN0b3JzW0NdLnBvc2l0aW9ufTtkanQodixQKSxFKz0xMH0pLGJqdChmKShhLnRhc2ssdixiLngsYi55LGIud2lkdGgsYi5oZWlnaHQse2NsYXNzOiJ0YXNrIn0sZixhLmNvbG91cil9LGVVZT1mdW5jdGlvbihpLGEpe3BOdChpLGEpfSxianQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBpKHYsbSxiLEUsQyxBLFAsRil7Y29uc3Qgaj1tLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGIrQy8yKS5hdHRyKCJ5IixFK0EvMis1KS5zdHlsZSgiZm9udC1jb2xvciIsRikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dCh2KTtwKGosUCl9ZnVuY3Rpb24gYSh2LG0sYixFLEMsQSxQLEYsail7Y29uc3R7dGFza0ZvbnRTaXplOlIsdGFza0ZvbnRGYW1pbHk6SH09RixZPXYuc3BsaXQoLzxiclxzKlwvPz4vZ2kpO2ZvcihsZXQgcnQ9MDtydDxZLmxlbmd0aDtydCsrKXtjb25zdCBKPXJ0KlItUiooWS5sZW5ndGgtMSkvMixpdD1tLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGIrQy8yKS5hdHRyKCJ5IixFKS5hdHRyKCJmaWxsIixqKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5zdHlsZSgiZm9udC1zaXplIixSKS5zdHlsZSgiZm9udC1mYW1pbHkiLEgpO2l0LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixiK0MvMikuYXR0cigiZHkiLEopLnRleHQoWVtydF0pLGl0LmF0dHIoInkiLEUrQS8yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsImNlbnRyYWwiKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJjZW50cmFsIikscChpdCxQKX19ZnVuY3Rpb24gZih2LG0sYixFLEMsQSxQLEYpe2NvbnN0IGo9bS5hcHBlbmQoInN3aXRjaCIpLEg9ai5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4IixiKS5hdHRyKCJ5IixFKS5hdHRyKCJ3aWR0aCIsQykuYXR0cigiaGVpZ2h0IixBKS5hdHRyKCJwb3NpdGlvbiIsImZpeGVkIikuYXBwZW5kKCJ4aHRtbDpkaXYiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlIikuc3R5bGUoImhlaWdodCIsIjEwMCUiKS5zdHlsZSgid2lkdGgiLCIxMDAlIik7SC5hcHBlbmQoImRpdiIpLmF0dHIoImNsYXNzIiwibGFiZWwiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlLWNlbGwiKS5zdHlsZSgidGV4dC1hbGlnbiIsImNlbnRlciIpLnN0eWxlKCJ2ZXJ0aWNhbC1hbGlnbiIsIm1pZGRsZSIpLnRleHQodiksYSh2LGosYixFLEMsQSxQLEYpLHAoSCxQKX1mdW5jdGlvbiBwKHYsbSl7Zm9yKGNvbnN0IGIgaW4gbSliIGluIG0mJnYuYXR0cihiLG1bYl0pfXJldHVybiBmdW5jdGlvbih2KXtyZXR1cm4gdi50ZXh0UGxhY2VtZW50PT09ImZvIj9mOnYudGV4dFBsYWNlbWVudD09PSJvbGQiP2k6YX19KCksVVA9e2RyYXdSZWN0Ok5ndCxkcmF3Q2lyY2xlOmRqdCxkcmF3U2VjdGlvbjpKR2UsZHJhd1RleHQ6Z2p0LGRyYXdMYWJlbDpaR2UsZHJhd1Rhc2s6dFVlLGRyYXdCYWNrZ3JvdW5kUmVjdDplVWUsaW5pdEdyYXBoaWNzOmZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFycm93aGVhZCIpLmF0dHIoInJlZlgiLDUpLmF0dHIoInJlZlkiLDIpLmF0dHIoIm1hcmtlcldpZHRoIiw2KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDQpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwLDAgViA0IEw2LDIgWiIpfX0sblVlPWZ1bmN0aW9uKGkpe09iamVjdC5rZXlzKGkpLmZvckVhY2goZnVuY3Rpb24oZil7VktbZl09aVtmXX0pfSxGNT17fTtmdW5jdGlvbiByVWUoaSl7Y29uc3QgYT1EZSgpLmpvdXJuZXk7bGV0IGY9NjA7T2JqZWN0LmtleXMoRjUpLmZvckVhY2gocD0+e2NvbnN0IHY9RjVbcF0uY29sb3IsbT17Y3g6MjAsY3k6ZixyOjcsZmlsbDp2LHN0cm9rZToiIzAwMCIscG9zOkY1W3BdLnBvc2l0aW9ufTtVUC5kcmF3Q2lyY2xlKGksbSk7Y29uc3QgYj17eDo0MCx5OmYrNyxmaWxsOiIjNjY2Iix0ZXh0OnAsdGV4dE1hcmdpbjphLmJveFRleHRNYXJnaW58NX07VVAuZHJhd1RleHQoaSxiKSxmKz0yMH0pfWNvbnN0IFZLPURlKCkuam91cm5leSxFOT1WSy5sZWZ0TWFyZ2luLGlVZT1mdW5jdGlvbihpLGEsZixwKXtjb25zdCB2PURlKCkuam91cm5leSxtPURlKCkuc2VjdXJpdHlMZXZlbDtsZXQgYjttPT09InNhbmRib3giJiYoYj14cigiI2kiK2EpKTtjb25zdCBFPXhyKG09PT0ic2FuZGJveCI/Yi5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5Iik7aXYuaW5pdCgpO2NvbnN0IEM9RS5zZWxlY3QoIiMiK2EpO1VQLmluaXRHcmFwaGljcyhDKTtjb25zdCBBPXAuZGIuZ2V0VGFza3MoKSxQPXAuZGIuZ2V0RGlhZ3JhbVRpdGxlKCksRj1wLmRiLmdldEFjdG9ycygpO2Zvcihjb25zdCBKIGluIEY1KWRlbGV0ZSBGNVtKXTtsZXQgaj0wO0YuZm9yRWFjaChKPT57RjVbSl09e2NvbG9yOnYuYWN0b3JDb2xvdXJzW2oldi5hY3RvckNvbG91cnMubGVuZ3RoXSxwb3NpdGlvbjpqfSxqKyt9KSxyVWUoQyksaXYuaW5zZXJ0KDAsMCxFOSxPYmplY3Qua2V5cyhGNSkubGVuZ3RoKjUwKSxzVWUoQyxBLDApO2NvbnN0IFI9aXYuZ2V0Qm91bmRzKCk7UCYmQy5hcHBlbmQoInRleHQiKS50ZXh0KFApLmF0dHIoIngiLEU5KS5hdHRyKCJmb250LXNpemUiLCI0ZXgiKS5hdHRyKCJmb250LXdlaWdodCIsImJvbGQiKS5hdHRyKCJ5IiwyNSk7Y29uc3QgSD1SLnN0b3B5LVIuc3RhcnR5KzIqdi5kaWFncmFtTWFyZ2luWSxZPUU5K1Iuc3RvcHgrMip2LmRpYWdyYW1NYXJnaW5YO29nKEMsSCxZLHYudXNlTWF4V2lkdGgpLEMuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLEU5KS5hdHRyKCJ5MSIsdi5oZWlnaHQqNCkuYXR0cigieDIiLFktRTktNCkuYXR0cigieTIiLHYuaGVpZ2h0KjQpLmF0dHIoInN0cm9rZS13aWR0aCIsNCkuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCNhcnJvd2hlYWQpIik7Y29uc3QgcnQ9UD83MDowO0MuYXR0cigidmlld0JveCIsYCR7Ui5zdGFydHh9IC0yNSAke1l9ICR7SCtydH1gKSxDLmF0dHIoInByZXNlcnZlQXNwZWN0UmF0aW8iLCJ4TWluWU1pbiBtZWV0IiksQy5hdHRyKCJoZWlnaHQiLEgrcnQrMjUpfSxpdj17ZGF0YTp7c3RhcnR4OnZvaWQgMCxzdG9weDp2b2lkIDAsc3RhcnR5OnZvaWQgMCxzdG9weTp2b2lkIDB9LHZlcnRpY2FsUG9zOjAsc2VxdWVuY2VJdGVtczpbXSxpbml0OmZ1bmN0aW9uKCl7dGhpcy5zZXF1ZW5jZUl0ZW1zPVtdLHRoaXMuZGF0YT17c3RhcnR4OnZvaWQgMCxzdG9weDp2b2lkIDAsc3RhcnR5OnZvaWQgMCxzdG9weTp2b2lkIDB9LHRoaXMudmVydGljYWxQb3M9MH0sdXBkYXRlVmFsOmZ1bmN0aW9uKGksYSxmLHApe2lbYV09PT12b2lkIDA/aVthXT1mOmlbYV09cChmLGlbYV0pfSx1cGRhdGVCb3VuZHM6ZnVuY3Rpb24oaSxhLGYscCl7Y29uc3Qgdj1EZSgpLmpvdXJuZXksbT10aGlzO2xldCBiPTA7ZnVuY3Rpb24gRShDKXtyZXR1cm4gZnVuY3Rpb24oUCl7YisrO2NvbnN0IEY9bS5zZXF1ZW5jZUl0ZW1zLmxlbmd0aC1iKzE7bS51cGRhdGVWYWwoUCwic3RhcnR5IixhLUYqdi5ib3hNYXJnaW4sTWF0aC5taW4pLG0udXBkYXRlVmFsKFAsInN0b3B5IixwK0Yqdi5ib3hNYXJnaW4sTWF0aC5tYXgpLG0udXBkYXRlVmFsKGl2LmRhdGEsInN0YXJ0eCIsaS1GKnYuYm94TWFyZ2luLE1hdGgubWluKSxtLnVwZGF0ZVZhbChpdi5kYXRhLCJzdG9weCIsZitGKnYuYm94TWFyZ2luLE1hdGgubWF4KSxDIT09ImFjdGl2YXRpb24iJiYobS51cGRhdGVWYWwoUCwic3RhcnR4IixpLUYqdi5ib3hNYXJnaW4sTWF0aC5taW4pLG0udXBkYXRlVmFsKFAsInN0b3B4IixmK0Yqdi5ib3hNYXJnaW4sTWF0aC5tYXgpLG0udXBkYXRlVmFsKGl2LmRhdGEsInN0YXJ0eSIsYS1GKnYuYm94TWFyZ2luLE1hdGgubWluKSxtLnVwZGF0ZVZhbChpdi5kYXRhLCJzdG9weSIscCtGKnYuYm94TWFyZ2luLE1hdGgubWF4KSl9fXRoaXMuc2VxdWVuY2VJdGVtcy5mb3JFYWNoKEUoKSl9LGluc2VydDpmdW5jdGlvbihpLGEsZixwKXtjb25zdCB2PU1hdGgubWluKGksZiksbT1NYXRoLm1heChpLGYpLGI9TWF0aC5taW4oYSxwKSxFPU1hdGgubWF4KGEscCk7dGhpcy51cGRhdGVWYWwoaXYuZGF0YSwic3RhcnR4Iix2LE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbChpdi5kYXRhLCJzdGFydHkiLGIsTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKGl2LmRhdGEsInN0b3B4IixtLE1hdGgubWF4KSx0aGlzLnVwZGF0ZVZhbChpdi5kYXRhLCJzdG9weSIsRSxNYXRoLm1heCksdGhpcy51cGRhdGVCb3VuZHModixiLG0sRSl9LGJ1bXBWZXJ0aWNhbFBvczpmdW5jdGlvbihpKXt0aGlzLnZlcnRpY2FsUG9zPXRoaXMudmVydGljYWxQb3MraSx0aGlzLmRhdGEuc3RvcHk9dGhpcy52ZXJ0aWNhbFBvc30sZ2V0VmVydGljYWxQb3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52ZXJ0aWNhbFBvc30sZ2V0Qm91bmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YX19LFBndD1WSy5zZWN0aW9uRmlsbHMsdmp0PVZLLnNlY3Rpb25Db2xvdXJzLHNVZT1mdW5jdGlvbihpLGEsZil7Y29uc3QgcD1EZSgpLmpvdXJuZXk7bGV0IHY9IiI7Y29uc3QgbT1wLmhlaWdodCoyK3AuZGlhZ3JhbU1hcmdpblksYj1mK207bGV0IEU9MCxDPSIjQ0NDIixBPSJibGFjayIsUD0wO2Zvcihjb25zdFtGLGpdb2YgYS5lbnRyaWVzKCkpe2lmKHYhPT1qLnNlY3Rpb24pe0M9UGd0W0UlUGd0Lmxlbmd0aF0sUD1FJVBndC5sZW5ndGgsQT12anRbRSV2anQubGVuZ3RoXTtsZXQgSD0wO2NvbnN0IFk9ai5zZWN0aW9uO2ZvcihsZXQgSj1GO0o8YS5sZW5ndGgmJmFbSl0uc2VjdGlvbj09WTtKKyspSD1IKzE7Y29uc3QgcnQ9e3g6RipwLnRhc2tNYXJnaW4rRipwLndpZHRoK0U5LHk6NTAsdGV4dDpqLnNlY3Rpb24sZmlsbDpDLG51bTpQLGNvbG91cjpBLHRhc2tDb3VudDpIfTtVUC5kcmF3U2VjdGlvbihpLHJ0LHApLHY9ai5zZWN0aW9uLEUrK31jb25zdCBSPWoucGVvcGxlLnJlZHVjZSgoSCxZKT0+KEY1W1ldJiYoSFtZXT1GNVtZXSksSCkse30pO2oueD1GKnAudGFza01hcmdpbitGKnAud2lkdGgrRTksai55PWIsai53aWR0aD1wLmRpYWdyYW1NYXJnaW5YLGouaGVpZ2h0PXAuZGlhZ3JhbU1hcmdpblksai5jb2xvdXI9QSxqLmZpbGw9QyxqLm51bT1QLGouYWN0b3JzPVIsVVAuZHJhd1Rhc2soaSxqLHApLGl2Lmluc2VydChqLngsai55LGoueCtqLndpZHRoK3AudGFza01hcmdpbiwzMDArNSozMCl9fSx3anQ9e3NldENvbmY6blVlLGRyYXc6aVVlfSxhVWU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjp6R2UsZGI6Zmp0LHJlbmRlcmVyOndqdCxzdHlsZXM6WEdlLGluaXQ6aT0+e3dqdC5zZXRDb25mKGkuam91cm5leSksZmp0LmNsZWFyKCl9fX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxvVWU9KGksYSxmKT0+e2NvbnN0e3BhcmVudEJ5SWQ6cH09Zix2PW5ldyBTZXQ7bGV0IG09aTtmb3IoO207KXtpZih2LmFkZChtKSxtPT09YSlyZXR1cm4gbTttPXBbbV19Zm9yKG09YTttOyl7aWYodi5oYXMobSkpcmV0dXJuIG07bT1wW21dfXJldHVybiJyb290In07ZnVuY3Rpb24gR0soaSl7dGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZHluYW1pY2FsbHkgcmVxdWlyZSAiJytpKyciLiBQbGVhc2UgY29uZmlndXJlIHRoZSBkeW5hbWljUmVxdWlyZVRhcmdldHMgb3IvYW5kIGlnbm9yZUR5bmFtaWNSZXF1aXJlcyBvcHRpb24gb2YgQHJvbGx1cC9wbHVnaW4tY29tbW9uanMgYXBwcm9wcmlhdGVseSBmb3IgdGhpcyByZXF1aXJlIGNhbGwgdG8gd29yay4nKX12YXIgbWp0PXtleHBvcnRzOnt9fTsoZnVuY3Rpb24oaSxhKXsoZnVuY3Rpb24oZil7aS5leHBvcnRzPWYoKX0pKGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZihwLHYsbSl7ZnVuY3Rpb24gYihBLFApe2lmKCF2W0FdKXtpZighcFtBXSl7dmFyIEY9dHlwZW9mIEdLPT0iZnVuY3Rpb24iJiZHSztpZighUCYmRilyZXR1cm4gRihBLCEwKTtpZihFKXJldHVybiBFKEEsITApO3ZhciBqPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK0ErIiciKTt0aHJvdyBqLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLGp9dmFyIFI9dltBXT17ZXhwb3J0czp7fX07cFtBXVswXS5jYWxsKFIuZXhwb3J0cyxmdW5jdGlvbihIKXt2YXIgWT1wW0FdWzFdW0hdO3JldHVybiBiKFl8fEgpfSxSLFIuZXhwb3J0cyxmLHAsdixtKX1yZXR1cm4gdltBXS5leHBvcnRzfWZvcih2YXIgRT10eXBlb2YgR0s9PSJmdW5jdGlvbiImJkdLLEM9MDtDPG0ubGVuZ3RoO0MrKyliKG1bQ10pO3JldHVybiBifXJldHVybiBmfSgpKHsxOltmdW5jdGlvbihmLHAsdil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gQShQLEYpe2Zvcih2YXIgaj0wO2o8Ri5sZW5ndGg7aisrKXt2YXIgUj1GW2pdO1IuZW51bWVyYWJsZT1SLmVudW1lcmFibGV8fCExLFIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBSJiYoUi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KFAsUi5rZXksUil9fXJldHVybiBmdW5jdGlvbihQLEYsail7cmV0dXJuIEYmJkEoUC5wcm90b3R5cGUsRiksaiYmQShQLGopLFB9fSgpO2Z1bmN0aW9uIGIoQSxQKXtpZighKEEgaW5zdGFuY2VvZiBQKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX12YXIgRT1mdW5jdGlvbigpe2Z1bmN0aW9uIEEoKXt2YXIgUD10aGlzLEY9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOnt9LGo9Ri5kZWZhdWx0TGF5b3V0T3B0aW9ucyxSPWo9PT12b2lkIDA/e306aixIPUYuYWxnb3JpdGhtcyxZPUg9PT12b2lkIDA/WyJsYXllcmVkIiwic3RyZXNzIiwibXJ0cmVlIiwicmFkaWFsIiwiZm9yY2UiLCJkaXNjbyIsInNwb3JlT3ZlcmxhcCIsInNwb3JlQ29tcGFjdGlvbiIsInJlY3RwYWNraW5nIl06SCxydD1GLndvcmtlckZhY3RvcnksSj1GLndvcmtlclVybDtpZihiKHRoaXMsQSksdGhpcy5kZWZhdWx0TGF5b3V0T3B0aW9ucz1SLHRoaXMuaW5pdGlhbGl6ZWQ9ITEsdHlwZW9mIEo+InUiJiZ0eXBlb2YgcnQ+InUiKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGNvbnN0cnVjdCBhbiBFTEsgd2l0aG91dCBib3RoICd3b3JrZXJVcmwnIGFuZCAnd29ya2VyRmFjdG9yeScuIik7dmFyIGl0PXJ0O3R5cGVvZiBKPCJ1IiYmdHlwZW9mIHJ0PiJ1IiYmKGl0PWZ1bmN0aW9uKGt0KXtyZXR1cm4gbmV3IFdvcmtlcihrdCl9KTt2YXIgZnQ9aXQoSik7aWYodHlwZW9mIGZ0LnBvc3RNZXNzYWdlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkNyZWF0ZWQgd29ya2VyIGRvZXMgbm90IHByb3ZpZGUgdGhlIHJlcXVpcmVkICdwb3N0TWVzc2FnZScgZnVuY3Rpb24uIik7dGhpcy53b3JrZXI9bmV3IEMoZnQpLHRoaXMud29ya2VyLnBvc3RNZXNzYWdlKHtjbWQ6InJlZ2lzdGVyIixhbGdvcml0aG1zOll9KS50aGVuKGZ1bmN0aW9uKFR0KXtyZXR1cm4gUC5pbml0aWFsaXplZD0hMH0pLmNhdGNoKGNvbnNvbGUuZXJyKX1yZXR1cm4gbShBLFt7a2V5OiJsYXlvdXQiLHZhbHVlOmZ1bmN0aW9uKEYpe3ZhciBqPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSxSPWoubGF5b3V0T3B0aW9ucyxIPVI9PT12b2lkIDA/dGhpcy5kZWZhdWx0TGF5b3V0T3B0aW9uczpSLFk9ai5sb2dnaW5nLHJ0PVk9PT12b2lkIDA/ITE6WSxKPWoubWVhc3VyZUV4ZWN1dGlvblRpbWUsaXQ9Sj09PXZvaWQgMD8hMTpKO3JldHVybiBGP3RoaXMud29ya2VyLnBvc3RNZXNzYWdlKHtjbWQ6ImxheW91dCIsZ3JhcGg6RixsYXlvdXRPcHRpb25zOkgsb3B0aW9uczp7bG9nZ2luZzpydCxtZWFzdXJlRXhlY3V0aW9uVGltZTppdH19KTpQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIk1pc3NpbmcgbWFuZGF0b3J5IHBhcmFtZXRlciAnZ3JhcGgnLiIpKX19LHtrZXk6Imtub3duTGF5b3V0QWxnb3JpdGhtcyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53b3JrZXIucG9zdE1lc3NhZ2Uoe2NtZDoiYWxnb3JpdGhtcyJ9KX19LHtrZXk6Imtub3duTGF5b3V0T3B0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53b3JrZXIucG9zdE1lc3NhZ2Uoe2NtZDoib3B0aW9ucyJ9KX19LHtrZXk6Imtub3duTGF5b3V0Q2F0ZWdvcmllcyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53b3JrZXIucG9zdE1lc3NhZ2Uoe2NtZDoiY2F0ZWdvcmllcyJ9KX19LHtrZXk6InRlcm1pbmF0ZVdvcmtlciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLndvcmtlci50ZXJtaW5hdGUoKX19XSksQX0oKTt2LmRlZmF1bHQ9RTt2YXIgQz1mdW5jdGlvbigpe2Z1bmN0aW9uIEEoUCl7dmFyIEY9dGhpcztpZihiKHRoaXMsQSksUD09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIk1pc3NpbmcgbWFuZGF0b3J5IHBhcmFtZXRlciAnd29ya2VyJy4iKTt0aGlzLnJlc29sdmVycz17fSx0aGlzLndvcmtlcj1QLHRoaXMud29ya2VyLm9ubWVzc2FnZT1mdW5jdGlvbihqKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Ri5yZWNlaXZlKEYsail9LDApfX1yZXR1cm4gbShBLFt7a2V5OiJwb3N0TWVzc2FnZSIsdmFsdWU6ZnVuY3Rpb24oRil7dmFyIGo9dGhpcy5pZHx8MDt0aGlzLmlkPWorMSxGLmlkPWo7dmFyIFI9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oSCxZKXtSLnJlc29sdmVyc1tqXT1mdW5jdGlvbihydCxKKXtydD8oUi5jb252ZXJ0R3d0U3R5bGVFcnJvcihydCksWShydCkpOkgoSil9LFIud29ya2VyLnBvc3RNZXNzYWdlKEYpfSl9fSx7a2V5OiJyZWNlaXZlIix2YWx1ZTpmdW5jdGlvbihGLGope3ZhciBSPWouZGF0YSxIPUYucmVzb2x2ZXJzW1IuaWRdO0gmJihkZWxldGUgRi5yZXNvbHZlcnNbUi5pZF0sUi5lcnJvcj9IKFIuZXJyb3IpOkgobnVsbCxSLmRhdGEpKX19LHtrZXk6InRlcm1pbmF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLndvcmtlci50ZXJtaW5hdGUmJnRoaXMud29ya2VyLnRlcm1pbmF0ZSgpfX0se2tleToiY29udmVydEd3dFN0eWxlRXJyb3IiLHZhbHVlOmZ1bmN0aW9uKEYpe2lmKEYpe3ZhciBqPUYuX19qYXZhJGV4Y2VwdGlvbjtqJiYoai5jYXVzZSYmai5jYXVzZS5iYWNraW5nSnNPYmplY3QmJihGLmNhdXNlPWouY2F1c2UuYmFja2luZ0pzT2JqZWN0LHRoaXMuY29udmVydEd3dFN0eWxlRXJyb3IoRi5jYXVzZSkpLGRlbGV0ZSBGLl9famF2YSRleGNlcHRpb24pfX19XSksQX0oKX0se31dLDI6W2Z1bmN0aW9uKGYscCx2KXsoZnVuY3Rpb24obSl7KGZ1bmN0aW9uKCl7dmFyIGI7dHlwZW9mIHdpbmRvdzwidSI/Yj13aW5kb3c6dHlwZW9mIG08InUiP2I9bTp0eXBlb2Ygc2VsZjwidSImJihiPXNlbGYpO3ZhciBFO2Z1bmN0aW9uIEMoKXt9ZnVuY3Rpb24gQSgpe31mdW5jdGlvbiBQKCl7fWZ1bmN0aW9uIEYoKXt9ZnVuY3Rpb24gaigpe31mdW5jdGlvbiBSKCl7fWZ1bmN0aW9uIEgoKXt9ZnVuY3Rpb24gWSgpe31mdW5jdGlvbiBydCgpe31mdW5jdGlvbiBKKCl7fWZ1bmN0aW9uIGl0KCl7fWZ1bmN0aW9uIGZ0KCl7fWZ1bmN0aW9uIFR0KCl7fWZ1bmN0aW9uIGt0KCl7fWZ1bmN0aW9uIG10KCl7fWZ1bmN0aW9uIGN0KCl7fWZ1bmN0aW9uIHl0KCl7fWZ1bmN0aW9uIHN0KCl7fWZ1bmN0aW9uIHh0KCl7fWZ1bmN0aW9uIGh0KCl7fWZ1bmN0aW9uIGR0KCl7fWZ1bmN0aW9uIEN0KCl7fWZ1bmN0aW9uIHR0KCl7fWZ1bmN0aW9uIFB0KCl7fWZ1bmN0aW9uIHB0KCl7fWZ1bmN0aW9uIEZ0KCl7fWZ1bmN0aW9uIFgoKXt9ZnVuY3Rpb24gUnQoKXt9ZnVuY3Rpb24gQnQoKXt9ZnVuY3Rpb24gdnQoKXt9ZnVuY3Rpb24gT3QoKXt9ZnVuY3Rpb24gVnQoKXt9ZnVuY3Rpb24gcWUoKXt9ZnVuY3Rpb24gX24oKXt9ZnVuY3Rpb24gVGUoKXt9ZnVuY3Rpb24gV24oKXt9ZnVuY3Rpb24gQWUoKXt9ZnVuY3Rpb24gbmUoKXt9ZnVuY3Rpb24ga2UoKXt9ZnVuY3Rpb24gVmUoKXt9ZnVuY3Rpb24gRWUoKXt9ZnVuY3Rpb24gSGUoKXt9ZnVuY3Rpb24gQ2UoKXt9ZnVuY3Rpb24gJGUoKXt9ZnVuY3Rpb24geWUoKXt9ZnVuY3Rpb24gZm4oKXt9ZnVuY3Rpb24gWXQoKXt9ZnVuY3Rpb24gTWkoKXt9ZnVuY3Rpb24gcXQoKXt9ZnVuY3Rpb24gemkoKXt9ZnVuY3Rpb24gU2UoKXt9ZnVuY3Rpb24ga2koKXt9ZnVuY3Rpb24gUmkoKXt9ZnVuY3Rpb24gcGkoKXt9ZnVuY3Rpb24gYmkoKXt9ZnVuY3Rpb24gZG4oKXt9ZnVuY3Rpb24gTm4oKXt9ZnVuY3Rpb24gV3IoKXt9ZnVuY3Rpb24gTGkoKXt9ZnVuY3Rpb24gaXMoKXt9ZnVuY3Rpb24gVHMoKXt9ZnVuY3Rpb24gQWEoKXt9ZnVuY3Rpb24gWGkoKXt9ZnVuY3Rpb24gR2EoKXt9ZnVuY3Rpb24gX3IoKXt9ZnVuY3Rpb24gcXIoKXt9ZnVuY3Rpb24gT2koKXt9ZnVuY3Rpb24gZ3IoKXt9ZnVuY3Rpb24gSnMoKXt9ZnVuY3Rpb24gVm4oKXt9ZnVuY3Rpb24gWGMoKXt9ZnVuY3Rpb24gRXIoKXt9ZnVuY3Rpb24gTWMoKXt9ZnVuY3Rpb24gYnAoKXt9ZnVuY3Rpb24gZm0oKXt9ZnVuY3Rpb24gVDAoKXt9ZnVuY3Rpb24gRmQoKXt9ZnVuY3Rpb24gTm8oKXt9ZnVuY3Rpb24gdGEoKXt9ZnVuY3Rpb24gYnUoKXt9ZnVuY3Rpb24gUHUoKXt9ZnVuY3Rpb24gbG8oKXt9ZnVuY3Rpb24gbW8oKXt9ZnVuY3Rpb24gT3MoKXt9ZnVuY3Rpb24gVGwoKXt9ZnVuY3Rpb24gRnUoKXt9ZnVuY3Rpb24gem8oKXt9ZnVuY3Rpb24gbmQoKXt9ZnVuY3Rpb24gc2YoKXt9ZnVuY3Rpb24gbGwoKXt9ZnVuY3Rpb24gVmkoKXt9ZnVuY3Rpb24gS2UoKXt9ZnVuY3Rpb24ga3IoKXt9ZnVuY3Rpb24gbmkoKXt9ZnVuY3Rpb24gZW8oKXt9ZnVuY3Rpb24gRGMoKXt9ZnVuY3Rpb24gSnUoKXt9ZnVuY3Rpb24gUW8oKXt9ZnVuY3Rpb24gamYoKXt9ZnVuY3Rpb24gcmgoKXt9ZnVuY3Rpb24gZG0oKXt9ZnVuY3Rpb24gUzkoKXt9ZnVuY3Rpb24geDMoKXt9ZnVuY3Rpb24gemIoKXt9ZnVuY3Rpb24gb3MoKXt9ZnVuY3Rpb24gQXMoKXt9ZnVuY3Rpb24gbWEoKXt9ZnVuY3Rpb24gdmkoKXt9ZnVuY3Rpb24gUWMoKXt9ZnVuY3Rpb24gbWUoKXt9ZnVuY3Rpb24gYmcoKXt9ZnVuY3Rpb24gT2UoKXt9ZnVuY3Rpb24gYWYoKXt9ZnVuY3Rpb24gZmsoKXt9ZnVuY3Rpb24gazMoKXt9ZnVuY3Rpb24gZ20oKXt9ZnVuY3Rpb24gQTkoKXt9ZnVuY3Rpb24gYXUoKXt9ZnVuY3Rpb24gdmcoKXt9ZnVuY3Rpb24gZGsoKXt9ZnVuY3Rpb24gdnAoKXt9ZnVuY3Rpb24gTDkoKXt9ZnVuY3Rpb24gTTkoKXt9ZnVuY3Rpb24gJGYoKXt9ZnVuY3Rpb24gb3YoKXt9ZnVuY3Rpb24gQmQoKXt9ZnVuY3Rpb24gRTMoKXt9ZnVuY3Rpb24gY3YoKXt9ZnVuY3Rpb24gdXYoKXt9ZnVuY3Rpb24gd2coKXt9ZnVuY3Rpb24gUjUoKXt9ZnVuY3Rpb24gb3UoKXt9ZnVuY3Rpb24gajUoKXt9ZnVuY3Rpb24gbm8oKXt9ZnVuY3Rpb24gSksoKXt9ZnVuY3Rpb24gcWIoKXt9ZnVuY3Rpb24gdFkoKXt9ZnVuY3Rpb24gRDkoKXt9ZnVuY3Rpb24gZVkoKXt9ZnVuY3Rpb24gS1AoKXt9ZnVuY3Rpb24gemYoKXt9ZnVuY3Rpb24gcG0oKXt9ZnVuY3Rpb24gbUwoKXt9ZnVuY3Rpb24gWVAoKXt9ZnVuY3Rpb24gd3AoKXt9ZnVuY3Rpb24gYm0oKXt9ZnVuY3Rpb24gblkoKXt9ZnVuY3Rpb24gSGIoKXt9ZnVuY3Rpb24gclkoKXt9ZnVuY3Rpb24gaVkoKXt9ZnVuY3Rpb24gJDUoKXt9ZnVuY3Rpb24gSTkoKXt9ZnVuY3Rpb24gWFAoKXt9ZnVuY3Rpb24gZ2soKXt9ZnVuY3Rpb24gc1koKXt9ZnVuY3Rpb24gcGsoKXt9ZnVuY3Rpb24gYVkoKXt9ZnVuY3Rpb24gb1koKXt9ZnVuY3Rpb24gY1koKXt9ZnVuY3Rpb24gdVkoKXt9ZnVuY3Rpb24gbFkoKXt9ZnVuY3Rpb24gaFkoKXt9ZnVuY3Rpb24gZlkoKXt9ZnVuY3Rpb24gZFkoKXt9ZnVuY3Rpb24gZ1koKXt9ZnVuY3Rpb24gcFkoKXt9ZnVuY3Rpb24gYlkoKXt9ZnVuY3Rpb24geUwoKXt9ZnVuY3Rpb24gdlkoKXt9ZnVuY3Rpb24gd1koKXt9ZnVuY3Rpb24gTzkoKXt9ZnVuY3Rpb24gUVAoKXt9ZnVuY3Rpb24gejUoKXt9ZnVuY3Rpb24gbVkoKXt9ZnVuY3Rpb24geVkoKXt9ZnVuY3Rpb24geFkoKXt9ZnVuY3Rpb24ga1koKXt9ZnVuY3Rpb24gRVkoKXt9ZnVuY3Rpb24gTjkoKXt9ZnVuY3Rpb24geEwoKXt9ZnVuY3Rpb24gWlAoKXt9ZnVuY3Rpb24gVDMoKXt9ZnVuY3Rpb24gXzMoKXt9ZnVuY3Rpb24gVFkoKXt9ZnVuY3Rpb24gb2YoKXt9ZnVuY3Rpb24gcTUoKXt9ZnVuY3Rpb24gX1koKXt9ZnVuY3Rpb24gYmsoKXt9ZnVuY3Rpb24gUmQoKXt9ZnVuY3Rpb24gQ1koKXt9ZnVuY3Rpb24gU1koKXt9ZnVuY3Rpb24gQVkoKXt9ZnVuY3Rpb24gTFkoKXt9ZnVuY3Rpb24gUDkoKXt9ZnVuY3Rpb24ga0woKXt9ZnVuY3Rpb24gSlAoKXt9ZnVuY3Rpb24gRUwoKXt9ZnVuY3Rpb24gSDUoKXt9ZnVuY3Rpb24gTVkoKXt9ZnVuY3Rpb24gdEYoKXt9ZnVuY3Rpb24gZUYoKXt9ZnVuY3Rpb24gRFkoKXt9ZnVuY3Rpb24gSVkoKXt9ZnVuY3Rpb24gT1koKXt9ZnVuY3Rpb24gTlkoKXt9ZnVuY3Rpb24gUFkoKXt9ZnVuY3Rpb24gRlkoKXt9ZnVuY3Rpb24gamQoKXt9ZnVuY3Rpb24gbHYoKXt9ZnVuY3Rpb24gQlkoKXt9ZnVuY3Rpb24gbkYoKXt9ZnVuY3Rpb24gckYoKXt9ZnVuY3Rpb24gUlkoKXt9ZnVuY3Rpb24gQzMoKXt9ZnVuY3Rpb24gdmsoKXt9ZnVuY3Rpb24gVEwoKXt9ZnVuY3Rpb24gdm0oKXt9ZnVuY3Rpb24gd2soKXt9ZnVuY3Rpb24galkoKXt9ZnVuY3Rpb24gRjkoKXt9ZnVuY3Rpb24gcmQoKXt9ZnVuY3Rpb24gaUYoKXt9ZnVuY3Rpb24gX0woKXt9ZnVuY3Rpb24gbWsoKXt9ZnVuY3Rpb24gQ0woKXt9ZnVuY3Rpb24gc0YoKXt9ZnVuY3Rpb24gJFkoKXt9ZnVuY3Rpb24gU0woKXt9ZnVuY3Rpb24gelkoKXt9ZnVuY3Rpb24gcVkoKXt9ZnVuY3Rpb24gYUYoKXt9ZnVuY3Rpb24gVjUoKXt9ZnVuY3Rpb24gb0YoKXt9ZnVuY3Rpb24gRzUoKXt9ZnVuY3Rpb24gSFkoKXt9ZnVuY3Rpb24gQUwoKXt9ZnVuY3Rpb24gVlkoKXt9ZnVuY3Rpb24gR1koKXt9ZnVuY3Rpb24gVVkoKXt9ZnVuY3Rpb24gV1koKXt9ZnVuY3Rpb24gY0YoKXt9ZnVuY3Rpb24gS1koKXt9ZnVuY3Rpb24gWVkoKXt9ZnVuY3Rpb24gWFkoKXt9ZnVuY3Rpb24gdUYoKXt9ZnVuY3Rpb24gUVkoKXt9ZnVuY3Rpb24gWlkoKXt9ZnVuY3Rpb24gSlkoKXt9ZnVuY3Rpb24gbEYoKXt9ZnVuY3Rpb24gdFgoKXt9ZnVuY3Rpb24gZVgoKXt9ZnVuY3Rpb24gaEYoKXt9ZnVuY3Rpb24gZkYoKXt9ZnVuY3Rpb24gZEYoKXt9ZnVuY3Rpb24gblgoKXt9ZnVuY3Rpb24gclgoKXt9ZnVuY3Rpb24geWsoKXt9ZnVuY3Rpb24gVTUoKXt9ZnVuY3Rpb24gQjkoKXt9ZnVuY3Rpb24gaVgoKXt9ZnVuY3Rpb24gTEwoKXt9ZnVuY3Rpb24gUjkoKXt9ZnVuY3Rpb24gTUwoKXt9ZnVuY3Rpb24gZ0YoKXt9ZnVuY3Rpb24gcEYoKXt9ZnVuY3Rpb24gc1goKXt9ZnVuY3Rpb24gYVgoKXt9ZnVuY3Rpb24gb1goKXt9ZnVuY3Rpb24gYkYoKXt9ZnVuY3Rpb24gdkYoKXt9ZnVuY3Rpb24gY1goKXt9ZnVuY3Rpb24gdVgoKXt9ZnVuY3Rpb24gbFgoKXt9ZnVuY3Rpb24gaFgoKXt9ZnVuY3Rpb24gZlgoKXt9ZnVuY3Rpb24gd0YoKXt9ZnVuY3Rpb24gZFgoKXt9ZnVuY3Rpb24gZ1goKXt9ZnVuY3Rpb24gcFgoKXt9ZnVuY3Rpb24gYlgoKXt9ZnVuY3Rpb24gbUYoKXt9ZnVuY3Rpb24gajkoKXt9ZnVuY3Rpb24gdlgoKXt9ZnVuY3Rpb24gd1goKXt9ZnVuY3Rpb24geUYoKXt9ZnVuY3Rpb24gbVgoKXt9ZnVuY3Rpb24geVgoKXt9ZnVuY3Rpb24geFgoKXt9ZnVuY3Rpb24ga1goKXt9ZnVuY3Rpb24gRVgoKXt9ZnVuY3Rpb24gVFgoKXt9ZnVuY3Rpb24geEYoKXt9ZnVuY3Rpb24gX1goKXt9ZnVuY3Rpb24ga0YoKXt9ZnVuY3Rpb24gQ1goKXt9ZnVuY3Rpb24gU1goKXt9ZnVuY3Rpb24gQVgoKXt9ZnVuY3Rpb24gJDkoKXt9ZnVuY3Rpb24gTFgoKXt9ZnVuY3Rpb24gejkoKXt9ZnVuY3Rpb24gTVgoKXt9ZnVuY3Rpb24gRUYoKXt9ZnVuY3Rpb24gVEYoKXt9ZnVuY3Rpb24gX0YoKXt9ZnVuY3Rpb24gQ0YoKXt9ZnVuY3Rpb24gaHYoKXt9ZnVuY3Rpb24gU0YoKXt9ZnVuY3Rpb24gQUYoKXt9ZnVuY3Rpb24gTEYoKXt9ZnVuY3Rpb24gTUYoKXt9ZnVuY3Rpb24gRFgoKXt9ZnVuY3Rpb24gVzUoKXt9ZnVuY3Rpb24gcTkoKXt9ZnVuY3Rpb24gUzMoKXt9ZnVuY3Rpb24gSVgoKXt9ZnVuY3Rpb24gT1goKXt9ZnVuY3Rpb24gSDkoKXt9ZnVuY3Rpb24gTlgoKXt9ZnVuY3Rpb24gUFgoKXt9ZnVuY3Rpb24gRlgoKXt9ZnVuY3Rpb24gQlgoKXt9ZnVuY3Rpb24gUlgoKXt9ZnVuY3Rpb24galgoKXt9ZnVuY3Rpb24gJFgoKXt9ZnVuY3Rpb24gelgoKXt9ZnVuY3Rpb24gcVgoKXt9ZnVuY3Rpb24gSFgoKXt9ZnVuY3Rpb24gVlgoKXt9ZnVuY3Rpb24gREwoKXt9ZnVuY3Rpb24gREYoKXt9ZnVuY3Rpb24gR1goKXt9ZnVuY3Rpb24gVVgoKXt9ZnVuY3Rpb24gV1goKXt9ZnVuY3Rpb24gSUYoKXt9ZnVuY3Rpb24gS1goKXt9ZnVuY3Rpb24gWVgoKXt9ZnVuY3Rpb24gWFgoKXt9ZnVuY3Rpb24gUVgoKXt9ZnVuY3Rpb24gWlgoKXt9ZnVuY3Rpb24gSlgoKXt9ZnVuY3Rpb24gT0YoKXt9ZnVuY3Rpb24gTkYoKXt9ZnVuY3Rpb24gdFEoKXt9ZnVuY3Rpb24gUEYoKXt9ZnVuY3Rpb24gRkYoKXt9ZnVuY3Rpb24gZVEoKXt9ZnVuY3Rpb24gblEoKXt9ZnVuY3Rpb24gclEoKXt9ZnVuY3Rpb24gSUwoKXt9ZnVuY3Rpb24gaVEoKXt9ZnVuY3Rpb24geGsoKXt9ZnVuY3Rpb24gc1EoKXt9ZnVuY3Rpb24gYVEoKXt9ZnVuY3Rpb24gb1EoKXt9ZnVuY3Rpb24gQkYoKXt9ZnVuY3Rpb24gY1EoKXt9ZnVuY3Rpb24gdVEoKXt9ZnVuY3Rpb24gbFEoKXt9ZnVuY3Rpb24gaFEoKXt9ZnVuY3Rpb24gZlEoKXt9ZnVuY3Rpb24gZFEoKXt9ZnVuY3Rpb24gZ1EoKXt9ZnVuY3Rpb24gcFEoKXt9ZnVuY3Rpb24gYlEoKXt9ZnVuY3Rpb24gdlEoKXt9ZnVuY3Rpb24gd1EoKXt9ZnVuY3Rpb24gbVEoKXt9ZnVuY3Rpb24gSzUoKXt9ZnVuY3Rpb24gUkYoKXt9ZnVuY3Rpb24geVEoKXt9ZnVuY3Rpb24geFEoKXt9ZnVuY3Rpb24ga1EoKXt9ZnVuY3Rpb24gakYoKXt9ZnVuY3Rpb24gRVEoKXt9ZnVuY3Rpb24gVjkoKXt9ZnVuY3Rpb24gVFEoKXt9ZnVuY3Rpb24gX1EoKXt9ZnVuY3Rpb24gQ1EoKXt9ZnVuY3Rpb24gU1EoKXt9ZnVuY3Rpb24gQVEoKXt9ZnVuY3Rpb24gTFEoKXt9ZnVuY3Rpb24gTVEoKXt9ZnVuY3Rpb24gRFEoKXt9ZnVuY3Rpb24gSVEoKXt9ZnVuY3Rpb24gT1EoKXt9ZnVuY3Rpb24gWTUoKXt9ZnVuY3Rpb24gTlEoKXt9ZnVuY3Rpb24gUFEoKXt9ZnVuY3Rpb24gRlEoKXt9ZnVuY3Rpb24gQlEoKXt9ZnVuY3Rpb24gUlEoKXt9ZnVuY3Rpb24galEoKXt9ZnVuY3Rpb24gJFEoKXt9ZnVuY3Rpb24gelEoKXt9ZnVuY3Rpb24gRzkoKXt9ZnVuY3Rpb24gcVEoKXt9ZnVuY3Rpb24gSFEoKXt9ZnVuY3Rpb24gVlEoKXt9ZnVuY3Rpb24gR1EoKXt9ZnVuY3Rpb24gVVEoKXt9ZnVuY3Rpb24gV1EoKXt9ZnVuY3Rpb24gS1EoKXt9ZnVuY3Rpb24gWVEoKXt9ZnVuY3Rpb24gWDUoKXt9ZnVuY3Rpb24gJEYoKXt9ZnVuY3Rpb24gWFEoKXt9ZnVuY3Rpb24gT0woKXt9ZnVuY3Rpb24gUVEoKXt9ZnVuY3Rpb24gWlEoKXt9ZnVuY3Rpb24gSlEoKXt9ZnVuY3Rpb24gdFooKXt9ZnVuY3Rpb24gZVooKXt9ZnVuY3Rpb24gblooKXt9ZnVuY3Rpb24gclooKXt9ZnVuY3Rpb24gekYoKXt9ZnVuY3Rpb24gaVooKXt9ZnVuY3Rpb24gcUYoKXt9ZnVuY3Rpb24gc1ooKXt9ZnVuY3Rpb24gSEYoKXt9ZnVuY3Rpb24gVkYoKXt9ZnVuY3Rpb24gR0YoKXt9ZnVuY3Rpb24gYVooKXt9ZnVuY3Rpb24gb1ooKXt9ZnVuY3Rpb24gVTkoKXt9ZnVuY3Rpb24gTkwoKXt9ZnVuY3Rpb24gVzkoKXt9ZnVuY3Rpb24gY1ooKXt9ZnVuY3Rpb24gdVooKXt9ZnVuY3Rpb24gUEwoKXt9ZnVuY3Rpb24gbFooKXt9ZnVuY3Rpb24gaFooKXt9ZnVuY3Rpb24gVUYoKXt9ZnVuY3Rpb24gZlooKXt9ZnVuY3Rpb24gZFooKXt9ZnVuY3Rpb24gZ1ooKXt9ZnVuY3Rpb24gcFooKXt9ZnVuY3Rpb24gYlooKXt9ZnVuY3Rpb24gdlooKXt9ZnVuY3Rpb24gd1ooKXt9ZnVuY3Rpb24gbVooKXt9ZnVuY3Rpb24geVooKXt9ZnVuY3Rpb24geFooKXt9ZnVuY3Rpb24gbWcoKXt9ZnVuY3Rpb24ga1ooKXt9ZnVuY3Rpb24gd20oKXt9ZnVuY3Rpb24gV0YoKXt9ZnVuY3Rpb24gRVooKXt9ZnVuY3Rpb24gVFooKXt9ZnVuY3Rpb24gX1ooKXt9ZnVuY3Rpb24gQ1ooKXt9ZnVuY3Rpb24gU1ooKXt9ZnVuY3Rpb24gQVooKXt9ZnVuY3Rpb24gTFooKXt9ZnVuY3Rpb24gTVooKXt9ZnVuY3Rpb24gRFooKXt9ZnVuY3Rpb24gSWMoKXt9ZnVuY3Rpb24gSVooKXt9ZnVuY3Rpb24gSzkoKXt9ZnVuY3Rpb24gb2MoKXt9ZnVuY3Rpb24gWmMoKXt9ZnVuY3Rpb24gUWkoKXt9ZnVuY3Rpb24gRkwoKXt9ZnVuY3Rpb24gT1ooKXt9ZnVuY3Rpb24gTlooKXt9ZnVuY3Rpb24gUFooKXt9ZnVuY3Rpb24gUTUoKXt9ZnVuY3Rpb24gbW0oKXt9ZnVuY3Rpb24gVWUoKXt9ZnVuY3Rpb24gRlooKXt9ZnVuY3Rpb24gQlooKXt9ZnVuY3Rpb24gUlooKXt9ZnVuY3Rpb24galooKXt9ZnVuY3Rpb24gJFooKXt9ZnVuY3Rpb24gS0YoKXt9ZnVuY3Rpb24gelooKXt9ZnVuY3Rpb24gcVooKXt9ZnVuY3Rpb24gQkwoKXt9ZnVuY3Rpb24gSFooKXt9ZnVuY3Rpb24gdGwoKXt9ZnVuY3Rpb24gQnUoKXt9ZnVuY3Rpb24gVlooKXt9ZnVuY3Rpb24gR1ooKXt9ZnVuY3Rpb24gVVooKXt9ZnVuY3Rpb24geW0oKXt9ZnVuY3Rpb24gZnYoKXt9ZnVuY3Rpb24gbXAoKXt9ZnVuY3Rpb24gaWQoKXt9ZnVuY3Rpb24gWjUoKXt9ZnVuY3Rpb24gWTkoKXt9ZnVuY3Rpb24ga2soKXt9ZnVuY3Rpb24gWUYoKXt9ZnVuY3Rpb24gV1ooKXt9ZnVuY3Rpb24gRWsoKXt9ZnVuY3Rpb24gWEYoKXt9ZnVuY3Rpb24gS1ooKXt9ZnVuY3Rpb24gWDkoKXt9ZnVuY3Rpb24gSjUoKXt9ZnVuY3Rpb24gdDYoKXt9ZnVuY3Rpb24geXAoKXt9ZnVuY3Rpb24gUUYoKXt9ZnVuY3Rpb24gVGsoKXt9ZnVuY3Rpb24gWkYoKXt9ZnVuY3Rpb24gSkYoKXt9ZnVuY3Rpb24gZTYoKXt9ZnVuY3Rpb24gVmIoKXt9ZnVuY3Rpb24gXzAoKXt9ZnVuY3Rpb24geHAoKXt9ZnVuY3Rpb24gQTMoKXt9ZnVuY3Rpb24gX2soKXt9ZnVuY3Rpb24gUTkoKXt9ZnVuY3Rpb24gdEIoKXt9ZnVuY3Rpb24gWVooKXt9ZnVuY3Rpb24gZUIoKXt9ZnVuY3Rpb24gbkIoKXt9ZnVuY3Rpb24gckIoKXt9ZnVuY3Rpb24gQ2soKXt9ZnVuY3Rpb24gaUIoKXt9ZnVuY3Rpb24gc0IoKXt9ZnVuY3Rpb24gWFooKXt9ZnVuY3Rpb24gU2soKXt9ZnVuY3Rpb24gQWsoKXt9ZnVuY3Rpb24geG0oKXt9ZnVuY3Rpb24gUkwoKXt9ZnVuY3Rpb24gUVooKXt9ZnVuY3Rpb24gWlooKXt9ZnVuY3Rpb24gSlooKXt9ZnVuY3Rpb24gdEooKXt9ZnVuY3Rpb24gZUooKXt9ZnVuY3Rpb24gbkooKXt9ZnVuY3Rpb24gckooKXt9ZnVuY3Rpb24gaUooKXt9ZnVuY3Rpb24gYUIoKXt9ZnVuY3Rpb24gc0ooKXt9ZnVuY3Rpb24gYUooKXt9ZnVuY3Rpb24gb0ooKXt9ZnVuY3Rpb24gb0IoKXt9ZnVuY3Rpb24gTGsoKXt9ZnVuY3Rpb24gWjkoKXt9ZnVuY3Rpb24gY0IoKXt9ZnVuY3Rpb24gY0ooKXt9ZnVuY3Rpb24gdUIoKXt9ZnVuY3Rpb24gbEIoKXt9ZnVuY3Rpb24gdUooKXt9ZnVuY3Rpb24gSjkoKXt9ZnVuY3Rpb24ga20oKXt9ZnVuY3Rpb24gaEIoKXt9ZnVuY3Rpb24gZkIoKXt9ZnVuY3Rpb24gbEooKXt9ZnVuY3Rpb24gaEooKXt9ZnVuY3Rpb24gdFQoKXt9ZnVuY3Rpb24gZEIoKXt9ZnVuY3Rpb24gZ0IoKXt9ZnVuY3Rpb24gYmMoKXt9ZnVuY3Rpb24gZkooKXt9ZnVuY3Rpb24gcEIoKXt9ZnVuY3Rpb24gZVQoKXt9ZnVuY3Rpb24gZEooKXt9ZnVuY3Rpb24gZ0ooKXt9ZnVuY3Rpb24gblQoKXt9ZnVuY3Rpb24gYkIoKXt9ZnVuY3Rpb24gclQoKXt9ZnVuY3Rpb24gaVQoKXt9ZnVuY3Rpb24gcWYoKXt9ZnVuY3Rpb24gakwoKXt9ZnVuY3Rpb24gJEwoKXt9ZnVuY3Rpb24gbjYoKXt9ZnVuY3Rpb24gcEooKXt9ZnVuY3Rpb24gYkooKXt9ZnVuY3Rpb24gdkooKXt9ZnVuY3Rpb24gd0ooKXt9ZnVuY3Rpb24gRW0oKXt9ZnVuY3Rpb24gdkIoKXt9ZnVuY3Rpb24gcjYoKXt9ZnVuY3Rpb24gZzEoKXt9ZnVuY3Rpb24gd0IoKXt9ZnVuY3Rpb24gbUIoKXt9ZnVuY3Rpb24geUIoKXt9ZnVuY3Rpb24geEIoKXt9ZnVuY3Rpb24ga0IoKXt9ZnVuY3Rpb24gRUIoKXt9ZnVuY3Rpb24gSGYoKXt9ZnVuY3Rpb24gdnUoKXt9ZnVuY3Rpb24gbUooKXt9ZnVuY3Rpb24geUooKXt9ZnVuY3Rpb24geEooKXt9ZnVuY3Rpb24gd3UoKXt9ZnVuY3Rpb24gc1QoKXt9ZnVuY3Rpb24gVEIoKXt9ZnVuY3Rpb24gX0IoKXt9ZnVuY3Rpb24gaTYoKXt9ZnVuY3Rpb24ga0ooKXt9ZnVuY3Rpb24gTWsoKXt9ZnVuY3Rpb24gRUooKXt9ZnVuY3Rpb24gQ0IoKXt9ZnVuY3Rpb24gVEooKXt9ZnVuY3Rpb24gX0ooKXt9ZnVuY3Rpb24gYVQoKXt9ZnVuY3Rpb24gU0IoKXt9ZnVuY3Rpb24gekwoKXt9ZnVuY3Rpb24gb1QoKXt9ZnVuY3Rpb24gQ0ooKXt9ZnVuY3Rpb24gU0ooKXt9ZnVuY3Rpb24gcUwoKXt9ZnVuY3Rpb24gY1QoKXt9ZnVuY3Rpb24gcDEoKXt9ZnVuY3Rpb24gRGsoKXt9ZnVuY3Rpb24gQUooKXt9ZnVuY3Rpb24gSWsoKXt9ZnVuY3Rpb24gSEwoKXt9ZnVuY3Rpb24gR2IoKXt9ZnVuY3Rpb24gdVQoKXt9ZnVuY3Rpb24gVkwoKXt9ZnVuY3Rpb24gVmYoKXt9ZnVuY3Rpb24gbFQoKXt9ZnVuY3Rpb24gYjEoKXt9ZnVuY3Rpb24gdjEoKXt9ZnVuY3Rpb24gTEooKXt9ZnVuY3Rpb24gTUooKXt9ZnVuY3Rpb24gTDMoKXt9ZnVuY3Rpb24gT2soKXt9ZnVuY3Rpb24gTmsoKXt9ZnVuY3Rpb24gaFQoKXt9ZnVuY3Rpb24gREooKXt9ZnVuY3Rpb24gczYoKXt9ZnVuY3Rpb24gR0woKXt9ZnVuY3Rpb24gQUIoKXt9ZnVuY3Rpb24gSUooKXt9ZnVuY3Rpb24gZlQoKXtEVCgpfWZ1bmN0aW9uIE9KKCl7TGl0KCl9ZnVuY3Rpb24gTEIoKXtpQygpfWZ1bmN0aW9uIFVMKCl7S3ooKX1mdW5jdGlvbiBOSigpe0k0dCgpfWZ1bmN0aW9uIGRUKCl7bjEoKX1mdW5jdGlvbiBQSigpe0gzdCgpfWZ1bmN0aW9uIEZKKCl7SkQoKX1mdW5jdGlvbiBCSigpe3dNKCl9ZnVuY3Rpb24gUkooKXt2TSgpfWZ1bmN0aW9uIGpKKCl7Vk0oKX1mdW5jdGlvbiBNQigpe3dWdCgpfWZ1bmN0aW9uICRKKCl7WTYoKX1mdW5jdGlvbiB6Sigpe0xSKCl9ZnVuY3Rpb24gcUooKXtMSnQoKX1mdW5jdGlvbiBEQigpe3FlZSgpfWZ1bmN0aW9uIEhKKCl7b3RlKCl9ZnVuY3Rpb24gVkooKXtUUXQoKX1mdW5jdGlvbiBnVCgpe1E4KCl9ZnVuY3Rpb24gR0ooKXt0YigpfWZ1bmN0aW9uIFVKKCl7SGVlKCl9ZnVuY3Rpb24gV0ooKXt2WnQoKX1mdW5jdGlvbiBLSigpe182dCgpfWZ1bmN0aW9uIFlKKCl7TXNlKCl9ZnVuY3Rpb24gWEooKXtfUXQoKX1mdW5jdGlvbiBJQigpe3hlKCl9ZnVuY3Rpb24gUUooKXtFUXQoKX1mdW5jdGlvbiBPQigpe1ZlZSgpfWZ1bmN0aW9uIFpKKCl7V25lKCl9ZnVuY3Rpb24gV0woKXtTUXQoKX1mdW5jdGlvbiBKSigpe2Z0ZSgpfWZ1bmN0aW9uIE5CKCl7bVZ0KCl9ZnVuY3Rpb24gdHR0KCl7ZDV0KCl9ZnVuY3Rpb24gUEIoKXtheSgpfWZ1bmN0aW9uIGV0dCgpe3ZuZSgpfWZ1bmN0aW9uIEZCKCl7ckkoKX1mdW5jdGlvbiBCQigpe2lhdCgpfWZ1bmN0aW9uIFJCKCl7aHN0KCl9ZnVuY3Rpb24gS0woKXtodygpfWZ1bmN0aW9uIE0zKCl7dXl0KCl9ZnVuY3Rpb24gcFQoKXtDUXQoKX1mdW5jdGlvbiBzZCgpe1J1ZSgpfWZ1bmN0aW9uIGpCKCl7bDV0KCl9ZnVuY3Rpb24gUGsoKXtYc3QoKX1mdW5jdGlvbiBZTCgpe08kKCl9ZnVuY3Rpb24gbnR0KCl7ZXEoKX1mdW5jdGlvbiBrcCgpe2RpKCl9ZnVuY3Rpb24gJEIoKXtieigpfWZ1bmN0aW9uIHpCKCl7djN0KCl9ZnVuY3Rpb24gcUIoKXt5cSgpfWZ1bmN0aW9uIGloKCl7ZEt0KCl9ZnVuY3Rpb24gWEwoKXtkaXQoKX1mdW5jdGlvbiBIQigpe1E1dCgpfWZ1bmN0aW9uIEZrKHQpe0luKHQpfWZ1bmN0aW9uIGJUKHQpe3RoaXMuYT10fWZ1bmN0aW9uIEJrKHQpe3RoaXMuYT10fWZ1bmN0aW9uIFZCKHQpe3RoaXMuYT10fWZ1bmN0aW9uIGE2KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGR2KHQpe3RoaXMuYT10fWZ1bmN0aW9uIFJrKHQpe3RoaXMuYT10fWZ1bmN0aW9uIEdCKHQpe3RoaXMuYT10fWZ1bmN0aW9uIHJ0dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBRTCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBEMyh0KXt0aGlzLmE9dH1mdW5jdGlvbiBaTCh0KXt0aGlzLmE9dH1mdW5jdGlvbiB2VCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBpdHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gd1QodCl7dGhpcy5hPXR9ZnVuY3Rpb24gbVQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gbzYodCl7dGhpcy5hPXR9ZnVuY3Rpb24gSkwodCl7dGhpcy5hPXR9ZnVuY3Rpb24gdE0odCl7dGhpcy5hPXR9ZnVuY3Rpb24gc3R0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGF0dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBvdHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gVUIodCl7dGhpcy5iPXR9ZnVuY3Rpb24gY3R0KHQpe3RoaXMuYz10fWZ1bmN0aW9uIHV0dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBsdHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gaHR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGZ0dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBkdHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gZ3R0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHB0dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBidHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gYzYodCl7dGhpcy5hPXR9ZnVuY3Rpb24gdnR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGprKHQpe3RoaXMuYT10fWZ1bmN0aW9uIENoKHQpe3RoaXMuYT10fWZ1bmN0aW9uIHd0dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiB1Nih0KXt0aGlzLmE9dH1mdW5jdGlvbiAkayh0KXt0aGlzLmE9dH1mdW5jdGlvbiB5VCh0KXt0aGlzLmE9dH1mdW5jdGlvbiB6ayh0KXt0aGlzLmE9dH1mdW5jdGlvbiB5Zygpe3RoaXMuYT1bXX1mdW5jdGlvbiBtdHQodCxlKXt0LmE9ZX1mdW5jdGlvbiBaZ3QodCxlKXt0LmE9ZX1mdW5jdGlvbiBKZ3QodCxlKXt0LmI9ZX1mdW5jdGlvbiB0cHQodCxlKXt0LmI9ZX1mdW5jdGlvbiBlcHQodCxlKXt0LmI9ZX1mdW5jdGlvbiBlTSh0LGUpe3Quaj1lfWZ1bmN0aW9uIG5wdCh0LGUpe3QuZz1lfWZ1bmN0aW9uIHJwdCh0LGUpe3QuaT1lfWZ1bmN0aW9uIHl0dCh0LGUpe3QuYz1lfWZ1bmN0aW9uIHcxKHQsZSl7dC5kPWV9ZnVuY3Rpb24geHR0KHQsZSl7dC5kPWV9ZnVuY3Rpb24gaXB0KHQsZSl7dC5jPWV9ZnVuY3Rpb24gQzAodCxlKXt0Lms9ZX1mdW5jdGlvbiBrdHQodCxlKXt0LmM9ZX1mdW5jdGlvbiBXQih0LGUpe3QuYz1lfWZ1bmN0aW9uIEtCKHQsZSl7dC5hPWV9ZnVuY3Rpb24gRXR0KHQsZSl7dC5hPWV9ZnVuY3Rpb24gc3B0KHQsZSl7dC5mPWV9ZnVuY3Rpb24gYXB0KHQsZSl7dC5hPWV9ZnVuY3Rpb24gZ3YodCxlKXt0LmI9ZX1mdW5jdGlvbiBuTSh0LGUpe3QuZD1lfWZ1bmN0aW9uIHhUKHQsZSl7dC5pPWV9ZnVuY3Rpb24gWUIodCxlKXt0Lm89ZX1mdW5jdGlvbiBvcHQodCxlKXt0LnI9ZX1mdW5jdGlvbiBjcHQodCxlKXt0LmE9ZX1mdW5jdGlvbiBYQih0LGUpe3QuYj1lfWZ1bmN0aW9uIHB2KHQsZSl7dC5lPWV9ZnVuY3Rpb24gVHR0KHQsZSl7dC5mPWV9ZnVuY3Rpb24ga1QodCxlKXt0Lmc9ZX1mdW5jdGlvbiBsNih0LGUpe3QuZT1lfWZ1bmN0aW9uIHVwdCh0LGUpe3QuZj1lfWZ1bmN0aW9uIHFrKHQsZSl7dC5mPWV9ZnVuY3Rpb24gX3R0KHQsZSl7dC5uPWV9ZnVuY3Rpb24geGcodCxlKXt0LmE9ZX1mdW5jdGlvbiBscHQodCxlKXt0LmE9ZX1mdW5jdGlvbiBJMyh0LGUpe3QuYz1lfWZ1bmN0aW9uIEN0dCh0LGUpe3QuYz1lfWZ1bmN0aW9uIFN0dCh0LGUpe3QuZD1lfWZ1bmN0aW9uIFFCKHQsZSl7dC5lPWV9ZnVuY3Rpb24gWkIodCxlKXt0Lmc9ZX1mdW5jdGlvbiBBdHQodCxlKXt0LmE9ZX1mdW5jdGlvbiBIayh0LGUpe3QuYz1lfWZ1bmN0aW9uIEVUKHQsZSl7dC5kPWV9ZnVuY3Rpb24gaHB0KHQsZSl7dC5lPWV9ZnVuY3Rpb24gTHR0KHQsZSl7dC5mPWV9ZnVuY3Rpb24gTXR0KHQsZSl7dC5qPWV9ZnVuY3Rpb24gRHR0KHQsZSl7dC5hPWV9ZnVuY3Rpb24gZnB0KHQsZSl7dC5iPWV9ZnVuY3Rpb24gRWModCxlKXt0LmE9ZX1mdW5jdGlvbiBKQih0KXt0LmI9dC5hfWZ1bmN0aW9uIEl0dCh0KXt0LmM9dC5kLmR9ZnVuY3Rpb24gaDYodCl7dGhpcy5kPXR9ZnVuY3Rpb24ga2codCl7dGhpcy5hPXR9ZnVuY3Rpb24gVG0odCl7dGhpcy5hPXR9ZnVuY3Rpb24gck0odCl7dGhpcy5hPXR9ZnVuY3Rpb24gbTEodCl7dGhpcy5hPXR9ZnVuY3Rpb24gZjYodCl7dGhpcy5hPXR9ZnVuY3Rpb24gT3R0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHRSKHQpe3RoaXMuYT10fWZ1bmN0aW9uIE8zKHQpe3RoaXMuYT10fWZ1bmN0aW9uIGlNKHQpe3RoaXMuYT10fWZ1bmN0aW9uIF9tKHQpe3RoaXMuYT10fWZ1bmN0aW9uIGVSKHQpe3RoaXMuYT10fWZ1bmN0aW9uIHkxKHQpe3RoaXMuYT10fWZ1bmN0aW9uIHkodCl7dGhpcy5hPXR9ZnVuY3Rpb24gZyh0KXt0aGlzLmE9dH1mdW5jdGlvbiB4KHQpe3RoaXMuYj10fWZ1bmN0aW9uIFQodCl7dGhpcy5iPXR9ZnVuY3Rpb24gTCh0KXt0aGlzLmI9dH1mdW5jdGlvbiBJKHQpe3RoaXMuYT10fWZ1bmN0aW9uIE8odCl7dGhpcy5hPXR9ZnVuY3Rpb24gJCh0KXt0aGlzLmE9dH1mdW5jdGlvbiB6KHQpe3RoaXMuYz10fWZ1bmN0aW9uIFModCl7dGhpcy5jPXR9ZnVuY3Rpb24gVih0KXt0aGlzLmM9dH1mdW5jdGlvbiBVKHQpe3RoaXMuYT10fWZ1bmN0aW9uIGV0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGF0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGx0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGd0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEx0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEV0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIER0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEl0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHRlKHQpe3RoaXMuYT10fWZ1bmN0aW9uIFh0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEh0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGllKHQpe3RoaXMuYT10fWZ1bmN0aW9uIFV0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGZlKHQpe3RoaXMuYT10fWZ1bmN0aW9uIGdlKHQpe3RoaXMuYT10fWZ1bmN0aW9uIHNlKHQpe3RoaXMuYT10fWZ1bmN0aW9uIE5lKHQpe3RoaXMuYT10fWZ1bmN0aW9uIHBlKHQpe3RoaXMuYT10fWZ1bmN0aW9uIGduKHQpe3RoaXMuYT10fWZ1bmN0aW9uIGplKHQpe3RoaXMuYT10fWZ1bmN0aW9uIEdlKHQpe3RoaXMuYT10fWZ1bmN0aW9uIHhuKHQpe3RoaXMuYT10fWZ1bmN0aW9uIERuKHQpe3RoaXMuYT10fWZ1bmN0aW9uIFhuKHQpe3RoaXMuYT10fWZ1bmN0aW9uIENuKHQpe3RoaXMuYT10fWZ1bmN0aW9uIFluKHQpe3RoaXMuYT10fWZ1bmN0aW9uIHJyKHQpe3RoaXMuYT10fWZ1bmN0aW9uIHdyKHQpe3RoaXMuYT10fWZ1bmN0aW9uIHVyKHQpe3RoaXMuYT10fWZ1bmN0aW9uIGVyKHQpe3RoaXMuYT10fWZ1bmN0aW9uIGJuKHQpe3RoaXMuYT10fWZ1bmN0aW9uIHByKHQpe3RoaXMuYT10fWZ1bmN0aW9uIGZyKHQpe3RoaXMuYT10fWZ1bmN0aW9uIHJpKHQpe3RoaXMuYT10fWZ1bmN0aW9uIF9pKHQpe3RoaXMuYT10fWZ1bmN0aW9uIGlhKHQpe3RoaXMuYT10fWZ1bmN0aW9uIExhKHQpe3RoaXMuYT10fWZ1bmN0aW9uIERpKHQpe3RoaXMuYT10fWZ1bmN0aW9uIHdpKHQpe3RoaXMuYT10fWZ1bmN0aW9uIF9zKHQpe3RoaXMuYT10fWZ1bmN0aW9uIFppKHQpe3RoaXMuYT10fWZ1bmN0aW9uIE5pKHQpe3RoaXMuYT10fWZ1bmN0aW9uIG5zKHQpe3RoaXMuYT10fWZ1bmN0aW9uIFVhKHQpe3RoaXMuZT10fWZ1bmN0aW9uIHNhKHQpe3RoaXMuYT10fWZ1bmN0aW9uIFhzKHQpe3RoaXMuYT10fWZ1bmN0aW9uIENyKHQpe3RoaXMuYT10fWZ1bmN0aW9uIEp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGpuKHQpe3RoaXMuYT10fWZ1bmN0aW9uIExyKHQpe3RoaXMuYT10fWZ1bmN0aW9uIGlyKHQpe3RoaXMuYT10fWZ1bmN0aW9uIHNyKHQpe3RoaXMuYT10fWZ1bmN0aW9uIEZhKHQpe3RoaXMuYT10fWZ1bmN0aW9uIEhyKHQpe3RoaXMuYT10fWZ1bmN0aW9uIHNzKHQpe3RoaXMuYT10fWZ1bmN0aW9uIHFvKHQpe3RoaXMuYT10fWZ1bmN0aW9uIEJjKHQpe3RoaXMuYT10fWZ1bmN0aW9uIHJvKHQpe3RoaXMuYT10fWZ1bmN0aW9uIFRjKHQpe3RoaXMuYT10fWZ1bmN0aW9uIE1hKHQpe3RoaXMuYT10fWZ1bmN0aW9uIGlvKHQpe3RoaXMuYT10fWZ1bmN0aW9uIF9sKHQpe3RoaXMuYT10fWZ1bmN0aW9uIEdmKHQpe3RoaXMuYT10fWZ1bmN0aW9uIEVwKHQpe3RoaXMuYT10fWZ1bmN0aW9uIFRwKHQpe3RoaXMuYT10fWZ1bmN0aW9uIFVmKHQpe3RoaXMuYT10fWZ1bmN0aW9uIEVnKHQpe3RoaXMuYT10fWZ1bmN0aW9uIGFkKHQpe3RoaXMuYT10fWZ1bmN0aW9uIGJ2KHQpe3RoaXMuYT10fWZ1bmN0aW9uIENtKHQpe3RoaXMuYT10fWZ1bmN0aW9uIGQ2KHQpe3RoaXMuYT10fWZ1bmN0aW9uIE4zKHQpe3RoaXMuYT10fWZ1bmN0aW9uIGc2KHQpe3RoaXMuYT10fWZ1bmN0aW9uIFRUKHQpe3RoaXMuYT10fWZ1bmN0aW9uIFAzKHQpe3RoaXMuYT10fWZ1bmN0aW9uICRkKHQpe3RoaXMuYT10fWZ1bmN0aW9uIHgxKHQpe3RoaXMuYT10fWZ1bmN0aW9uIHpkKHQpe3RoaXMuYT10fWZ1bmN0aW9uIF9UKHQpe3RoaXMuYT10fWZ1bmN0aW9uIFViKHQpe3RoaXMuYT10fWZ1bmN0aW9uIG5SKHQpe3RoaXMuYT10fWZ1bmN0aW9uIE50dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBQdHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gRnR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEJ0dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBSdHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24ganR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uICR0dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBWayh0KXt0aGlzLmE9dH1mdW5jdGlvbiBzTSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBDVCh0KXt0aGlzLmE9dH1mdW5jdGlvbiByUih0KXt0aGlzLmE9dH1mdW5jdGlvbiBpUih0KXt0aGlzLmE9dH1mdW5jdGlvbiB6dHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gX3AodCl7dGhpcy5hPXR9ZnVuY3Rpb24gYU0odCl7dGhpcy5hPXR9ZnVuY3Rpb24gc1IodCl7dGhpcy5hPXR9ZnVuY3Rpb24gR2sodCl7dGhpcy5jPXR9ZnVuY3Rpb24gQ3AodCl7dGhpcy5iPXR9ZnVuY3Rpb24gcXR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGMkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiB1JHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gbCR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGgkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBmJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gZCR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGckdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBwJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gYiR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHYkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiB3JHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gbSR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHkkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiB4JHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gayR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEUkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBUJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gXyR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEMkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBTJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gQSR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEwkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBNJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gU3AodCl7dGhpcy5hPXR9ZnVuY3Rpb24gcDYodCl7dGhpcy5hPXR9ZnVuY3Rpb24gRCR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEkkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBPJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gTiR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIFAkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBGJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gQiR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIFIkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBqJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gJCR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHokdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBxJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gSCR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIFYkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBHJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gVSR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGFSKHQpe3RoaXMuYT10fWZ1bmN0aW9uIFckdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBLJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gWSR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIFgkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBRJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gWiR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEokdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiB0enQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gZXp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIG56dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiByenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gaXp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHN6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBhenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gb3p0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGN6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiB1enQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gbHp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGh6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBmenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gZHp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGd6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBwenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gYnp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHZ6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiB3enQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gbXp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHl6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBkcHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gdHModCl7dGhpcy5iPXR9ZnVuY3Rpb24geHp0KHQpe3RoaXMuZj10fWZ1bmN0aW9uIGdwdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBrenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gRXp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIFR6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBfenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gQ3p0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIFN6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBBenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gTHp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIG9NKHQpe3RoaXMuYT10fWZ1bmN0aW9uIE16dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBEenQodCl7dGhpcy5iPXR9ZnVuY3Rpb24gcHB0KHQpe3RoaXMuYz10fWZ1bmN0aW9uIG9SKHQpe3RoaXMuZT10fWZ1bmN0aW9uIEl6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBjUih0KXt0aGlzLmE9dH1mdW5jdGlvbiB1Uih0KXt0aGlzLmE9dH1mdW5jdGlvbiBIdHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gT3p0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIE56dCh0KXt0aGlzLmQ9dH1mdW5jdGlvbiBicHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gdnB0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHZ2KHQpe3RoaXMuZT10fWZ1bmN0aW9uIEtXZSgpe3RoaXMuYT0wfWZ1bmN0aW9uIEYzKCl7ZFV0KHRoaXMpfWZ1bmN0aW9uIGxlKCl7UWV0KHRoaXMpfWZ1bmN0aW9uIEFyKCl7bmwodGhpcyl9ZnVuY3Rpb24gVnR0KCl7dlh0KHRoaXMpfWZ1bmN0aW9uIFB6dCgpe31mdW5jdGlvbiB3digpe3RoaXMuYz1RQXR9ZnVuY3Rpb24gWVdlKHQsZSl7ZS5XYih0KX1mdW5jdGlvbiBGenQodCxlKXt0LmIrPWV9ZnVuY3Rpb24gQnp0KHQpe3QuYj1uZXcgb2V0fWZ1bmN0aW9uIG50KHQpe3JldHVybiB0LmV9ZnVuY3Rpb24gWFdlKHQpe3JldHVybiB0LmF9ZnVuY3Rpb24gUVdlKHQpe3JldHVybiB0LmF9ZnVuY3Rpb24gWldlKHQpe3JldHVybiB0LmF9ZnVuY3Rpb24gSldlKHQpe3JldHVybiB0LmF9ZnVuY3Rpb24gdEtlKHQpe3JldHVybiB0LmF9ZnVuY3Rpb24gZUtlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gbktlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gcktlKCl7cmJ0KCksZzVuKCl9ZnVuY3Rpb24gaUtlKHQpe3QuYi50Zih0LmUpfWZ1bmN0aW9uIFNUKHQsZSl7dC5iPWUtdC5ifWZ1bmN0aW9uIEFUKHQsZSl7dC5hPWUtdC5hfWZ1bmN0aW9uIFJ6dCh0LGUpe2UuYWQodC5hKX1mdW5jdGlvbiBzS2UodCxlKXtVcyhlLHQpfWZ1bmN0aW9uIGFLZSh0LGUsbil7dC5PZChuLGUpfWZ1bmN0aW9uIGNNKHQsZSl7dC5lPWUsZS5iPXR9ZnVuY3Rpb24gd3B0KHQpe2ZkKCksdGhpcy5hPXR9ZnVuY3Rpb24ganp0KHQpe2ZkKCksdGhpcy5hPXR9ZnVuY3Rpb24gJHp0KHQpe2ZkKCksdGhpcy5hPXR9ZnVuY3Rpb24gbXB0KHQpe1ZtKCksdGhpcy5hPXR9ZnVuY3Rpb24genp0KHQpe2s4KCksVHV0LmJlKHQpfWZ1bmN0aW9uIFdiKCl7WFV0LmNhbGwodGhpcyl9ZnVuY3Rpb24geXB0KCl7WFV0LmNhbGwodGhpcyl9ZnVuY3Rpb24geHB0KCl7V2IuY2FsbCh0aGlzKX1mdW5jdGlvbiBHdHQoKXtXYi5jYWxsKHRoaXMpfWZ1bmN0aW9uIHF6dCgpe1diLmNhbGwodGhpcyl9ZnVuY3Rpb24gdU0oKXtXYi5jYWxsKHRoaXMpfWZ1bmN0aW9uIFJ1KCl7V2IuY2FsbCh0aGlzKX1mdW5jdGlvbiBMVCgpe1diLmNhbGwodGhpcyl9ZnVuY3Rpb24gUHIoKXtXYi5jYWxsKHRoaXMpfWZ1bmN0aW9uIHNoKCl7V2IuY2FsbCh0aGlzKX1mdW5jdGlvbiBIenQoKXtXYi5jYWxsKHRoaXMpfWZ1bmN0aW9uIHZjKCl7V2IuY2FsbCh0aGlzKX1mdW5jdGlvbiBWenQoKXtXYi5jYWxsKHRoaXMpfWZ1bmN0aW9uIEd6dCgpe3RoaXMuYT10aGlzfWZ1bmN0aW9uIGxSKCl7dGhpcy5CYnw9MjU2fWZ1bmN0aW9uIFV6dCgpe3RoaXMuYj1uZXcgS0d0fWZ1bmN0aW9uIGtwdCgpe2twdD1YLG5ldyBBcn1mdW5jdGlvbiBFcHQoKXt4cHQuY2FsbCh0aGlzKX1mdW5jdGlvbiBXenQodCxlKXt0Lmxlbmd0aD1lfWZ1bmN0aW9uIGhSKHQsZSl7dWUodC5hLGUpfWZ1bmN0aW9uIG9LZSh0LGUpe040dCh0LmMsZSl9ZnVuY3Rpb24gY0tlKHQsZSl7VnModC5iLGUpfWZ1bmN0aW9uIHVLZSh0LGUpe3F6KHQuYSxlKX1mdW5jdGlvbiBsS2UodCxlKXtSaXQodC5hLGUpfWZ1bmN0aW9uIFVrKHQsZSl7Q2kodC5lLGUpfWZ1bmN0aW9uIGI2KHQpe2lxKHQuYyx0LmIpfWZ1bmN0aW9uIGhLZSh0LGUpe3Qua2MoKS5OYihlKX1mdW5jdGlvbiBUcHQodCl7dGhpcy5hPXVsbih0KX1mdW5jdGlvbiBRcygpe3RoaXMuYT1uZXcgQXJ9ZnVuY3Rpb24gS3p0KCl7dGhpcy5hPW5ldyBBcn1mdW5jdGlvbiBmUigpe3RoaXMuYT1uZXcgbGV9ZnVuY3Rpb24gVXR0KCl7dGhpcy5hPW5ldyBsZX1mdW5jdGlvbiBfcHQoKXt0aGlzLmE9bmV3IGxlfWZ1bmN0aW9uIFNoKCl7dGhpcy5hPW5ldyBYY31mdW5jdGlvbiBLYigpe3RoaXMuYT1uZXcgX0p0fWZ1bmN0aW9uIENwdCgpe3RoaXMuYT1uZXcgQTl9ZnVuY3Rpb24gU3B0KCl7dGhpcy5hPW5ldyBsVnR9ZnVuY3Rpb24gWXp0KCl7dGhpcy5hPW5ldyBaUXR9ZnVuY3Rpb24gQXB0KCl7dGhpcy5hPW5ldyBnUXR9ZnVuY3Rpb24gTHB0KCl7dGhpcy5hPW5ldyBSV3R9ZnVuY3Rpb24gWHp0KCl7dGhpcy5hPW5ldyBsZX1mdW5jdGlvbiBNcHQoKXt0aGlzLmE9bmV3IGxlfWZ1bmN0aW9uIFF6dCgpe3RoaXMuYT1uZXcgbGV9ZnVuY3Rpb24gWnp0KCl7dGhpcy5hPW5ldyBsZX1mdW5jdGlvbiBKenQoKXt0aGlzLmQ9bmV3IGxlfWZ1bmN0aW9uIHRxdCgpe3RoaXMuYT1uZXcgUXN9ZnVuY3Rpb24gZXF0KCl7dGhpcy5hPW5ldyBBcn1mdW5jdGlvbiBucXQoKXt0aGlzLmI9bmV3IEFyfWZ1bmN0aW9uIHJxdCgpe3RoaXMuYj1uZXcgbGV9ZnVuY3Rpb24gRHB0KCl7dGhpcy5lPW5ldyBsZX1mdW5jdGlvbiBpcXQoKXt0aGlzLmQ9bmV3IGxlfWZ1bmN0aW9uIHNxdCgpe3RoaXMuYT1uZXcgR0p9ZnVuY3Rpb24gYXF0KCl7bGUuY2FsbCh0aGlzKX1mdW5jdGlvbiBJcHQoKXtmUi5jYWxsKHRoaXMpfWZ1bmN0aW9uIG9xdCgpe3hqLmNhbGwodGhpcyl9ZnVuY3Rpb24gY3F0KCl7TXB0LmNhbGwodGhpcyl9ZnVuY3Rpb24gV3R0KCl7TVQuY2FsbCh0aGlzKX1mdW5jdGlvbiBNVCgpe1B6dC5jYWxsKHRoaXMpfWZ1bmN0aW9uIHY2KCl7UHp0LmNhbGwodGhpcyl9ZnVuY3Rpb24gT3B0KCl7djYuY2FsbCh0aGlzKX1mdW5jdGlvbiB1cXQoKXtHWHQuY2FsbCh0aGlzKX1mdW5jdGlvbiBscXQoKXtHWHQuY2FsbCh0aGlzKX1mdW5jdGlvbiBocXQoKXskcHQuY2FsbCh0aGlzKX1mdW5jdGlvbiBmcXQoKXskcHQuY2FsbCh0aGlzKX1mdW5jdGlvbiBkcXQoKXskcHQuY2FsbCh0aGlzKX1mdW5jdGlvbiBncXQoKXt6cHQuY2FsbCh0aGlzKX1mdW5jdGlvbiBqdSgpe2NzLmNhbGwodGhpcyl9ZnVuY3Rpb24gTnB0KCl7eW0uY2FsbCh0aGlzKX1mdW5jdGlvbiBQcHQoKXt5bS5jYWxsKHRoaXMpfWZ1bmN0aW9uIHBxdCgpe0RxdC5jYWxsKHRoaXMpfWZ1bmN0aW9uIGJxdCgpe0RxdC5jYWxsKHRoaXMpfWZ1bmN0aW9uIHZxdCgpe0FyLmNhbGwodGhpcyl9ZnVuY3Rpb24gd3F0KCl7QXIuY2FsbCh0aGlzKX1mdW5jdGlvbiBtcXQoKXtBci5jYWxsKHRoaXMpfWZ1bmN0aW9uIHlxdCgpe1FzLmNhbGwodGhpcyl9ZnVuY3Rpb24gS3R0KCl7amVlLmNhbGwodGhpcyl9ZnVuY3Rpb24geHF0KCl7bFIuY2FsbCh0aGlzKX1mdW5jdGlvbiBZdHQoKXtoMnQuY2FsbCh0aGlzKX1mdW5jdGlvbiBYdHQoKXtoMnQuY2FsbCh0aGlzKX1mdW5jdGlvbiBGcHQoKXtBci5jYWxsKHRoaXMpfWZ1bmN0aW9uIFF0dCgpe0FyLmNhbGwodGhpcyl9ZnVuY3Rpb24ga3F0KCl7QXIuY2FsbCh0aGlzKX1mdW5jdGlvbiBCcHQoKXtUay5jYWxsKHRoaXMpfWZ1bmN0aW9uIEVxdCgpe1RrLmNhbGwodGhpcyl9ZnVuY3Rpb24gVHF0KCl7QnB0LmNhbGwodGhpcyl9ZnVuY3Rpb24gX3F0KCl7R0wuY2FsbCh0aGlzKX1mdW5jdGlvbiBDcXQodCl7bGVlLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBTcXQodCl7bGVlLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBScHQodCl7UUwuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGpwdCh0KXt0VnQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGZLZSh0KXtqcHQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGRLZSh0KXt0VnQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIFdrKCl7dGhpcy5hPW5ldyBjc31mdW5jdGlvbiAkcHQoKXt0aGlzLmE9bmV3IFFzfWZ1bmN0aW9uIHpwdCgpe3RoaXMuYT1uZXcgQXJ9ZnVuY3Rpb24gQXF0KCl7dGhpcy5hPW5ldyBsZX1mdW5jdGlvbiBMcXQoKXt0aGlzLmo9bmV3IGxlfWZ1bmN0aW9uIHFwdCgpe3RoaXMuYT1uZXcgR0Z9ZnVuY3Rpb24gTXF0KCl7dGhpcy5hPW5ldyBfSHR9ZnVuY3Rpb24gRHF0KCl7dGhpcy5hPW5ldyBRRn1mdW5jdGlvbiBadHQoKXtadHQ9WCx3dXQ9bmV3IFlxdH1mdW5jdGlvbiBKdHQoKXtKdHQ9WCx2dXQ9bmV3IEtxdH1mdW5jdGlvbiBEVCgpe0RUPVgsYnV0PW5ldyBBfWZ1bmN0aW9uIGRSKCl7ZFI9WCx4dXQ9bmV3IEtVdH1mdW5jdGlvbiBnS2UodCl7anB0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiBwS2UodCl7anB0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiBJcXQodCl7RHJ0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiBPcXQodCl7RHJ0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiBOcXQodCl7YUt0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiB0ZXQodCl7UDBuLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBtdih0KXtNbS5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gSVQodCl7X1IuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIEhwdCh0KXtfUi5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gUHF0KHQpe19SLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBabyh0KXt5WXQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIEZxdCh0KXtaby5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gdzYoKXt6ay5jYWxsKHRoaXMse30pfWZ1bmN0aW9uIGdSKHQpe284KCksdGhpcy5hPXR9ZnVuY3Rpb24gT1QodCl7dC5iPW51bGwsdC5jPTB9ZnVuY3Rpb24gYktlKHQsZSl7dC5lPWUsQmNlKHQsZSl9ZnVuY3Rpb24gdktlKHQsZSl7dC5hPWUseGduKHQpfWZ1bmN0aW9uIGVldCh0LGUsbil7dC5hW2UuZ109bn1mdW5jdGlvbiB3S2UodCxlLG4pe0IxbihuLHQsZSl9ZnVuY3Rpb24gbUtlKHQsZSl7VlFlKGUuaSx0Lm4pfWZ1bmN0aW9uIEJxdCh0LGUpe0djbih0KS50ZChlKX1mdW5jdGlvbiB5S2UodCxlKXtyZXR1cm4gdCp0L2V9ZnVuY3Rpb24gUnF0KHQsZSl7cmV0dXJuIHQuZy1lLmd9ZnVuY3Rpb24geEtlKHQpe3JldHVybiBuZXcgeVQodCl9ZnVuY3Rpb24ga0tlKHQpe3JldHVybiBuZXcgSG0odCl9ZnVuY3Rpb24gcFIodCl7Wm8uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIENvKHQpe1pvLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBqcXQodCl7Wm8uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIG5ldCh0KXt5WXQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIHJldCh0KXtveXQoKSx0aGlzLmE9dH1mdW5jdGlvbiAkcXQodCl7Zkt0KCksdGhpcy5hPXR9ZnVuY3Rpb24gU20odCl7UG50KCksdGhpcy5mPXR9ZnVuY3Rpb24gaWV0KHQpe1BudCgpLHRoaXMuZj10fWZ1bmN0aW9uIEtrKHQpe1pvLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBQbih0KXtaby5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gSG8odCl7Wm8uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIHpxdCh0KXtaby5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gbTYodCl7Wm8uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIEJlKHQpe3JldHVybiBJbih0KSx0fWZ1bmN0aW9uIFp0KHQpe3JldHVybiBJbih0KSx0fWZ1bmN0aW9uIGxNKHQpe3JldHVybiBJbih0KSx0fWZ1bmN0aW9uIFZwdCh0KXtyZXR1cm4gSW4odCksdH1mdW5jdGlvbiBFS2UodCl7cmV0dXJuIEluKHQpLHR9ZnVuY3Rpb24gTlQodCl7cmV0dXJuIHQuYj09dC5jfWZ1bmN0aW9uIEFtKHQpe3JldHVybiEhdCYmdC5ifWZ1bmN0aW9uIFRLZSh0KXtyZXR1cm4hIXQmJnQua31mdW5jdGlvbiBfS2UodCl7cmV0dXJuISF0JiZ0Lmp9ZnVuY3Rpb24gQ2wodCl7SW4odCksdGhpcy5hPXR9ZnVuY3Rpb24gR3B0KHQpe3JldHVybiBmMih0KSx0fWZ1bmN0aW9uIFBUKHQpe3J3dCh0LHQubGVuZ3RoKX1mdW5jdGlvbiBUZyh0KXtaby5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gb2QodCl7Wm8uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIHNldCh0KXtaby5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gQjModCl7Wm8uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIEZUKHQpe1pvLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBScih0KXtaby5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gYWV0KHQpe0wydC5jYWxsKHRoaXMsdCwwKX1mdW5jdGlvbiBvZXQoKXtCd3QuY2FsbCh0aGlzLDEyLDMpfWZ1bmN0aW9uIFVwdCgpe1VwdD1YLFc4dD1uZXcgeHR9ZnVuY3Rpb24gcXF0KCl7cXF0PVgsVTh0PW5ldyBDfWZ1bmN0aW9uIGJSKCl7YlI9WCxzUz1uZXcgVHR9ZnVuY3Rpb24gSHF0KCl7SHF0PVgsd2dlPW5ldyBtdH1mdW5jdGlvbiBWcXQoKXt0aHJvdyBudChuZXcgUHIpfWZ1bmN0aW9uIFdwdCgpe3Rocm93IG50KG5ldyBQcil9ZnVuY3Rpb24gR3F0KCl7dGhyb3cgbnQobmV3IFByKX1mdW5jdGlvbiBDS2UoKXt0aHJvdyBudChuZXcgUHIpfWZ1bmN0aW9uIFNLZSgpe3Rocm93IG50KG5ldyBQcil9ZnVuY3Rpb24gQUtlKCl7dGhyb3cgbnQobmV3IFByKX1mdW5jdGlvbiBjZXQoKXt0aGlzLmE9anIoRHIoWGEpKX1mdW5jdGlvbiB5Nih0KXtmZCgpLHRoaXMuYT1Ecih0KX1mdW5jdGlvbiBVcXQodCxlKXt0LlRkKGUpLGUuU2QodCl9ZnVuY3Rpb24gTEtlKHQsZSl7dC5hLmVjKCkuTWMoZSl9ZnVuY3Rpb24gTUtlKHQsZSxuKXt0LmMubGYoZSxuKX1mdW5jdGlvbiBLcHQodCl7Q28uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGNkKHQpe1BuLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBfZygpe2Y2LmNhbGwodGhpcywiIil9ZnVuY3Rpb24gQlQoKXtmNi5jYWxsKHRoaXMsIiIpfWZ1bmN0aW9uIEFwKCl7ZjYuY2FsbCh0aGlzLCIiKX1mdW5jdGlvbiBMbSgpe2Y2LmNhbGwodGhpcywiIil9ZnVuY3Rpb24gWXB0KHQpe0NvLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBZayh0KXtULmNhbGwodGhpcyx0KX1mdW5jdGlvbiB1ZXQodCl7ZmouY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIFdxdCh0KXtZay5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gS3F0KCl7d1QuY2FsbCh0aGlzLG51bGwpfWZ1bmN0aW9uIFlxdCgpe3dULmNhbGwodGhpcyxudWxsKX1mdW5jdGlvbiB2Uigpe3ZSPVgsazgoKX1mdW5jdGlvbiBYcXQoKXtYcXQ9WCxBZ2U9bGRuKCl9ZnVuY3Rpb24gUXF0KHQpe3JldHVybiB0LmE/dC5iOjB9ZnVuY3Rpb24gREtlKHQpe3JldHVybiB0LmE/dC5iOjB9ZnVuY3Rpb24gSUtlKHQsZSl7cmV0dXJuIHQuYS1lLmF9ZnVuY3Rpb24gT0tlKHQsZSl7cmV0dXJuIHQuYS1lLmF9ZnVuY3Rpb24gTktlKHQsZSl7cmV0dXJuIHQuYS1lLmF9ZnVuY3Rpb24gd1IodCxlKXtyZXR1cm4gU210KHQsZSl9ZnVuY3Rpb24gb3QodCxlKXtyZXR1cm4gdlF0KHQsZSl9ZnVuY3Rpb24gUEtlKHQsZSl7cmV0dXJuIGUgaW4gdC5hfWZ1bmN0aW9uIFpxdCh0LGUpe3JldHVybiB0LmY9ZSx0fWZ1bmN0aW9uIEZLZSh0LGUpe3JldHVybiB0LmI9ZSx0fWZ1bmN0aW9uIEpxdCh0LGUpe3JldHVybiB0LmM9ZSx0fWZ1bmN0aW9uIEJLZSh0LGUpe3JldHVybiB0Lmc9ZSx0fWZ1bmN0aW9uIFhwdCh0LGUpe3JldHVybiB0LmE9ZSx0fWZ1bmN0aW9uIFFwdCh0LGUpe3JldHVybiB0LmY9ZSx0fWZ1bmN0aW9uIFJLZSh0LGUpe3JldHVybiB0Lms9ZSx0fWZ1bmN0aW9uIFpwdCh0LGUpe3JldHVybiB0LmE9ZSx0fWZ1bmN0aW9uIGpLZSh0LGUpe3JldHVybiB0LmU9ZSx0fWZ1bmN0aW9uIEpwdCh0LGUpe3JldHVybiB0LmU9ZSx0fWZ1bmN0aW9uICRLZSh0LGUpe3JldHVybiB0LmY9ZSx0fWZ1bmN0aW9uIHpLZSh0LGUpe3QuYj0hMCx0LmQ9ZX1mdW5jdGlvbiBxS2UodCxlKXt0LmI9bmV3IFNvKGUpfWZ1bmN0aW9uIEhLZSh0LGUsbil7ZS50ZCh0LmFbbl0pfWZ1bmN0aW9uIFZLZSh0LGUsbil7ZS53ZSh0LmFbbl0pfWZ1bmN0aW9uIEdLZSh0LGUpe3JldHVybiB0LmItZS5ifWZ1bmN0aW9uIFVLZSh0LGUpe3JldHVybiB0LmctZS5nfWZ1bmN0aW9uIFdLZSh0LGUpe3JldHVybiB0LnMtZS5zfWZ1bmN0aW9uIEtLZSh0LGUpe3JldHVybiB0PzA6ZS0xfWZ1bmN0aW9uIHRIdCh0LGUpe3JldHVybiB0PzA6ZS0xfWZ1bmN0aW9uIFlLZSh0LGUpe3JldHVybiB0P2UtMTowfWZ1bmN0aW9uIFhLZSh0LGUpe3JldHVybiBlLllmKHQpfWZ1bmN0aW9uIHl2KHQsZSl7cmV0dXJuIHQuYj1lLHR9ZnVuY3Rpb24gbVIodCxlKXtyZXR1cm4gdC5hPWUsdH1mdW5jdGlvbiB4dih0LGUpe3JldHVybiB0LmM9ZSx0fWZ1bmN0aW9uIGt2KHQsZSl7cmV0dXJuIHQuZD1lLHR9ZnVuY3Rpb24gRXYodCxlKXtyZXR1cm4gdC5lPWUsdH1mdW5jdGlvbiB0YnQodCxlKXtyZXR1cm4gdC5mPWUsdH1mdW5jdGlvbiBSVCh0LGUpe3JldHVybiB0LmE9ZSx0fWZ1bmN0aW9uIFhrKHQsZSl7cmV0dXJuIHQuYj1lLHR9ZnVuY3Rpb24gUWsodCxlKXtyZXR1cm4gdC5jPWUsdH1mdW5jdGlvbiBaZSh0LGUpe3JldHVybiB0LmM9ZSx0fWZ1bmN0aW9uIHluKHQsZSl7cmV0dXJuIHQuYj1lLHR9ZnVuY3Rpb24gSmUodCxlKXtyZXR1cm4gdC5kPWUsdH1mdW5jdGlvbiB0bih0LGUpe3JldHVybiB0LmU9ZSx0fWZ1bmN0aW9uIFFLZSh0LGUpe3JldHVybiB0LmY9ZSx0fWZ1bmN0aW9uIGVuKHQsZSl7cmV0dXJuIHQuZz1lLHR9ZnVuY3Rpb24gbm4odCxlKXtyZXR1cm4gdC5hPWUsdH1mdW5jdGlvbiBybih0LGUpe3JldHVybiB0Lmk9ZSx0fWZ1bmN0aW9uIHNuKHQsZSl7cmV0dXJuIHQuaj1lLHR9ZnVuY3Rpb24gZUh0KHQsZSl7cmV0dXJuIHQuaz1lLHR9ZnVuY3Rpb24gWktlKHQsZSl7cmV0dXJuIHQuaj1lLHR9ZnVuY3Rpb24gSktlKHQsZSl7dGIoKSx0YyhlLHQpfWZ1bmN0aW9uIHRZZSh0LGUsbil7S3RuKHQuYSxlLG4pfWZ1bmN0aW9uIG5IdCh0KXttWHQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGVidCh0KXttWHQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIHlSKHQpe3dudC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gckh0KHQpe3Zsbi5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gTHAodCl7S3YuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGlIdCh0KXthcnQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIHNIdCh0KXthcnQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGFIdCgpe2EydC5jYWxsKHRoaXMsIiIpfWZ1bmN0aW9uIERhKCl7dGhpcy5hPTAsdGhpcy5iPTB9ZnVuY3Rpb24gb0h0KCl7dGhpcy5iPTAsdGhpcy5hPTB9ZnVuY3Rpb24gY0h0KHQsZSl7dC5iPTAsdHkodCxlKX1mdW5jdGlvbiBlWWUodCxlKXt0LmM9ZSx0LmI9ITB9ZnVuY3Rpb24gdUh0KHQsZSl7cmV0dXJuIHQuYy5fYihlKX1mdW5jdGlvbiBXZih0KXtyZXR1cm4gdC5lJiZ0LmUoKX1mdW5jdGlvbiBoZXQodCl7cmV0dXJuIHQ/dC5kOm51bGx9ZnVuY3Rpb24gbEh0KHQsZSl7cmV0dXJuIEZyZSh0LmIsZSl9ZnVuY3Rpb24gblllKHQpe3JldHVybiB0P3QuZzpudWxsfWZ1bmN0aW9uIHJZZSh0KXtyZXR1cm4gdD90Lmk6bnVsbH1mdW5jdGlvbiBNcCh0KXtyZXR1cm4gTDAodCksdC5vfWZ1bmN0aW9uIFR2KCl7VHY9WCxDNGU9eDFuKCl9ZnVuY3Rpb24gaEh0KCl7aEh0PVgsbGE9T2RuKCl9ZnVuY3Rpb24gWmsoKXtaaz1YLFhBdD1FMW4oKX1mdW5jdGlvbiBmSHQoKXtmSHQ9WCxsNWU9azFuKCl9ZnVuY3Rpb24gbmJ0KCl7bmJ0PVgsa2M9d2duKCl9ZnVuY3Rpb24gcmJ0KCl7cmJ0PVgsQ2I9ajgoKX1mdW5jdGlvbiBkSHQoKXt0aHJvdyBudChuZXcgUHIpfWZ1bmN0aW9uIGdIdCgpe3Rocm93IG50KG5ldyBQcil9ZnVuY3Rpb24gcEh0KCl7dGhyb3cgbnQobmV3IFByKX1mdW5jdGlvbiBiSHQoKXt0aHJvdyBudChuZXcgUHIpfWZ1bmN0aW9uIHZIdCgpe3Rocm93IG50KG5ldyBQcil9ZnVuY3Rpb24gd0h0KCl7dGhyb3cgbnQobmV3IFByKX1mdW5jdGlvbiB4Uih0KXt0aGlzLmE9bmV3IHg2KHQpfWZ1bmN0aW9uIGlidCh0KXtkaGUoKSxTNW4odGhpcyx0KX1mdW5jdGlvbiBEcCh0KXt0aGlzLmE9bmV3IGpudCh0KX1mdW5jdGlvbiBSMyh0LGUpe2Zvcig7dC55ZShlKTspO31mdW5jdGlvbiBzYnQodCxlKXtmb3IoO3Quc2QoZSk7KTt9ZnVuY3Rpb24gajModCxlKXtyZXR1cm4gdC5hKz1lLHR9ZnVuY3Rpb24gZmV0KHQsZSl7cmV0dXJuIHQuYSs9ZSx0fWZ1bmN0aW9uIENnKHQsZSl7cmV0dXJuIHQuYSs9ZSx0fWZ1bmN0aW9uIF92KHQsZSl7cmV0dXJuIHQuYSs9ZSx0fWZ1bmN0aW9uIGpUKHQpe3JldHVybiBxcCh0KSx0LmF9ZnVuY3Rpb24ga1IodCl7cmV0dXJuIHQuYiE9dC5kLmN9ZnVuY3Rpb24gbUh0KHQpe3JldHVybiB0Lmx8dC5tPDwyMn1mdW5jdGlvbiBhYnQodCxlKXtyZXR1cm4gdC5kW2UucF19ZnVuY3Rpb24geUh0KHQsZSl7cmV0dXJuIG92bih0LGUpfWZ1bmN0aW9uIG9idCh0LGUsbil7dC5zcGxpY2UoZSxuKX1mdW5jdGlvbiB4SHQodCl7dC5jP2l1ZSh0KTpzdWUodCl9ZnVuY3Rpb24gRVIodCl7dGhpcy5hPTAsdGhpcy5iPXR9ZnVuY3Rpb24ga0h0KCl7dGhpcy5hPW5ldyBkSSh1Q3QpfWZ1bmN0aW9uIEVIdCgpe3RoaXMuYj1uZXcgZEkoWV90KX1mdW5jdGlvbiBUSHQoKXt0aGlzLmI9bmV3IGRJKEhodCl9ZnVuY3Rpb24gX0h0KCl7dGhpcy5iPW5ldyBkSShIaHQpfWZ1bmN0aW9uIENIdCgpe3Rocm93IG50KG5ldyBQcil9ZnVuY3Rpb24gU0h0KCl7dGhyb3cgbnQobmV3IFByKX1mdW5jdGlvbiBBSHQoKXt0aHJvdyBudChuZXcgUHIpfWZ1bmN0aW9uIExIdCgpe3Rocm93IG50KG5ldyBQcil9ZnVuY3Rpb24gTUh0KCl7dGhyb3cgbnQobmV3IFByKX1mdW5jdGlvbiBESHQoKXt0aHJvdyBudChuZXcgUHIpfWZ1bmN0aW9uIElIdCgpe3Rocm93IG50KG5ldyBQcil9ZnVuY3Rpb24gT0h0KCl7dGhyb3cgbnQobmV3IFByKX1mdW5jdGlvbiBOSHQoKXt0aHJvdyBudChuZXcgUHIpfWZ1bmN0aW9uIFBIdCgpe3Rocm93IG50KG5ldyBQcil9ZnVuY3Rpb24gaVllKCl7dGhyb3cgbnQobmV3IHZjKX1mdW5jdGlvbiBzWWUoKXt0aHJvdyBudChuZXcgdmMpfWZ1bmN0aW9uIGhNKHQpe3RoaXMuYT1uZXcgRkh0KHQpfWZ1bmN0aW9uIEZIdCh0KXtib24odGhpcyx0LGJkbigpKX1mdW5jdGlvbiBmTSh0KXtyZXR1cm4hdHx8clh0KHQpfWZ1bmN0aW9uIGRNKHQpe3JldHVybiBZMVt0XSE9LTF9ZnVuY3Rpb24gYVllKCl7ekghPTAmJih6SD0wKSxxSD0tMX1mdW5jdGlvbiBCSHQoKXtwdXQ9PW51bGwmJihwdXQ9W10pfWZ1bmN0aW9uIG9ZZSh0LGUpe0dzdChLdCh0LmEpLGUpfWZ1bmN0aW9uIGNZZSh0LGUpe0dzdChLdCh0LmEpLGUpfWZ1bmN0aW9uIGdNKHQsZSl7SzMuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gSmsodCxlKXtnTS5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBjYnQodCxlKXt0aGlzLmI9dCx0aGlzLmM9ZX1mdW5jdGlvbiBSSHQodCxlKXt0aGlzLmI9dCx0aGlzLmE9ZX1mdW5jdGlvbiBqSHQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiAkSHQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiB6SHQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBxSHQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBISHQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBWSHQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBHSHQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBVSHQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBXSHQodCxlKXt0aGlzLmI9dCx0aGlzLmE9ZX1mdW5jdGlvbiBLSHQodCxlKXt0aGlzLmI9dCx0aGlzLmE9ZX1mdW5jdGlvbiBZSHQodCxlKXt0aGlzLmI9dCx0aGlzLmE9ZX1mdW5jdGlvbiBYSHQodCxlKXt0aGlzLmI9dCx0aGlzLmE9ZX1mdW5jdGlvbiBLcih0LGUpe3RoaXMuZj10LHRoaXMuZz1lfWZ1bmN0aW9uIHQ4KHQsZSl7dGhpcy5lPXQsdGhpcy5kPWV9ZnVuY3Rpb24gQ3YodCxlKXt0aGlzLmc9dCx0aGlzLmk9ZX1mdW5jdGlvbiBkZXQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBRSHQodCxlKXt0aGlzLmE9dCx0aGlzLmY9ZX1mdW5jdGlvbiBaSHQodCxlKXt0aGlzLmI9dCx0aGlzLmM9ZX1mdW5jdGlvbiB1WWUodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBKSHQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBnZXQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiB0VnQodCl7dzJ0KHQuZGMoKSksdGhpcy5jPXR9ZnVuY3Rpb24gVFIodCl7dGhpcy5iPXUoRHIodCksODMpfWZ1bmN0aW9uIGVWdCh0KXt0aGlzLmE9dShEcih0KSw4Myl9ZnVuY3Rpb24gTW0odCl7dGhpcy5hPXUoRHIodCksMTUpfWZ1bmN0aW9uIG5WdCh0KXt0aGlzLmE9dShEcih0KSwxNSl9ZnVuY3Rpb24gX1IodCl7dGhpcy5iPXUoRHIodCksNDcpfWZ1bmN0aW9uIENSKCl7dGhpcy5xPW5ldyBiLkRhdGV9ZnVuY3Rpb24gcWQoKXtxZD1YLGM3dD1uZXcgUnR9ZnVuY3Rpb24gZTgoKXtlOD1YLFg3PW5ldyBQdH1mdW5jdGlvbiAkVCh0KXtyZXR1cm4gdC5mLmMrdC5nLmN9ZnVuY3Rpb24gcE0odCxlKXtyZXR1cm4gdC5iLkhjKGUpfWZ1bmN0aW9uIHJWdCh0LGUpe3JldHVybiB0LmIuSWMoZSl9ZnVuY3Rpb24gaVZ0KHQsZSl7cmV0dXJuIHQuYi5RYyhlKX1mdW5jdGlvbiBzVnQodCxlKXtyZXR1cm4gdC5iLkhjKGUpfWZ1bmN0aW9uIGFWdCh0LGUpe3JldHVybiB0LmMudWMoZSl9ZnVuY3Rpb24gUzAodCxlKXtyZXR1cm4gdC5hLl9iKGUpfWZ1bmN0aW9uIG9WdCh0LGUpe3JldHVybiBTaSh0LmMsZSl9ZnVuY3Rpb24gY1Z0KHQsZSl7cmV0dXJuIE1sKHQuYixlKX1mdW5jdGlvbiB1VnQodCxlKXtyZXR1cm4gdD5lJiZlPEFDfWZ1bmN0aW9uIGxZZSh0LGUpe3JldHVybiB0LkdjKGUpLHR9ZnVuY3Rpb24gaFllKHQsZSl7cmV0dXJuIEthKHQsZSksdH1mdW5jdGlvbiBmWWUodCl7cmV0dXJuIFpZdCgpLHQ/dmdlOmJnZX1mdW5jdGlvbiB4Nih0KXtLbmUuY2FsbCh0aGlzLHQsMCl9ZnVuY3Rpb24gbFZ0KCl7am50LmNhbGwodGhpcyxudWxsKX1mdW5jdGlvbiB1YnQoKXt6cnQuY2FsbCh0aGlzLG51bGwpfWZ1bmN0aW9uIGs2KHQpe3RoaXMuYz10LEh0ZSh0aGlzKX1mdW5jdGlvbiBjcygpe3hVdCh0aGlzKSxNaCh0aGlzKX1mdW5jdGlvbiB5cyh0LGUpe3FwKHQpLHQuYS5OYihlKX1mdW5jdGlvbiBoVnQodCxlKXtyZXR1cm4gdC5HYyhlKSx0fWZ1bmN0aW9uIGRZZSh0LGUpe3JldHVybiB0LmEuZj1lLHR9ZnVuY3Rpb24gZlZ0KHQsZSl7cmV0dXJuIHQuYS5kPWUsdH1mdW5jdGlvbiBkVnQodCxlKXtyZXR1cm4gdC5hLmc9ZSx0fWZ1bmN0aW9uIGdWdCh0LGUpe3JldHVybiB0LmEuaj1lLHR9ZnVuY3Rpb24gY2YodCxlKXtyZXR1cm4gdC5hLmE9ZSx0fWZ1bmN0aW9uIHVmKHQsZSl7cmV0dXJuIHQuYS5kPWUsdH1mdW5jdGlvbiBsZih0LGUpe3JldHVybiB0LmEuZT1lLHR9ZnVuY3Rpb24gaGYodCxlKXtyZXR1cm4gdC5hLmc9ZSx0fWZ1bmN0aW9uIGJNKHQsZSl7cmV0dXJuIHQuYS5mPWUsdH1mdW5jdGlvbiBnWWUodCl7cmV0dXJuIHQuYj0hMSx0fWZ1bmN0aW9uIG44KCl7bjg9WCx5N3Q9bmV3IFlHdH1mdW5jdGlvbiBTUigpe1NSPVgsTWdlPW5ldyBYR3R9ZnVuY3Rpb24gcjgoKXtyOD1YLEM3dD1uZXcgQ2V9ZnVuY3Rpb24gcFZ0KCl7cFZ0PVgsTWJlPW5ldyBwbX1mdW5jdGlvbiBBUigpe0FSPVgsJHV0PW5ldyBvV3R9ZnVuY3Rpb24gWWIoKXtZYj1YLFE3PW5ldyBpc31mdW5jdGlvbiB6VCgpe3pUPVgsSWJlPW5ldyBtTH1mdW5jdGlvbiBiVnQoKXtiVnQ9WCwkZ2U9bmV3IF9yfWZ1bmN0aW9uIGxidCgpe2xidD1YLG1iZT1uZXcgJGZ9ZnVuY3Rpb24gdk0oKXt2TT1YLFBiZT1uZXcgRGF9ZnVuY3Rpb24gdlZ0KCl7dlZ0PVgseWJlPW5ldyBSNX1mdW5jdGlvbiBoYnQoKXtoYnQ9WCx4YmU9bmV3IGZZdH1mdW5jdGlvbiBmYnQoKXtmYnQ9WCxFRXQ9bmV3IHV2fWZ1bmN0aW9uIHdNKCl7d009WCxGYmU9bmV3IE85fWZ1bmN0aW9uIHdWdCgpe3dWdD1YLCRiZT1uZXcgbHZ9ZnVuY3Rpb24gcVQoKXtxVD1YLFViZT1uZXcgTFh9ZnVuY3Rpb24gTFIoKXtMUj1YLHE0PW5ldyAkWH1mdW5jdGlvbiBtVnQoKXttVnQ9WCxneWU9bmV3IFpzfWZ1bmN0aW9uIE1SKCl7TVI9WCxWaHQ9bmV3IHhWdH1mdW5jdGlvbiBEUigpe0RSPVgsR2h0PW5ldyB4V3R9ZnVuY3Rpb24gSFQoKXtIVD1YLGpPPW5ldyBoWHR9ZnVuY3Rpb24gSVIoKXtJUj1YLEZ3ZT1uZXcgcVp9ZnVuY3Rpb24geVZ0KCl7emVlKCksdGhpcy5jPW5ldyBvZXR9ZnVuY3Rpb24geFZ0KCl7S3IuY2FsbCh0aGlzLHUxZSwwKX1mdW5jdGlvbiBTdih0LGUpe3YyKHQuYy5iLGUuYyxlKX1mdW5jdGlvbiBWVCh0LGUpe3YyKHQuYy5jLGUuYixlKX1mdW5jdGlvbiBwWWUodCxlLG4pe0FvKHQuZCxlLmYsbil9ZnVuY3Rpb24gYlllKHQsZSxuLHIpe1Vobih0LHIsZSxuKX1mdW5jdGlvbiB2WWUodCxlLG4scil7ZzJuKHIsdCxlLG4pfWZ1bmN0aW9uIHdZZSh0LGUsbixyKXtENG4ocix0LGUsbil9ZnVuY3Rpb24gT1IodCxlKXtyZXR1cm4gdC5hPWUuZyx0fWZ1bmN0aW9uIGtWdCh0LGUpe3JldHVybiBlMW4odC5hLGUpfWZ1bmN0aW9uIG1ZZSh0KXtyZXR1cm4gdC5iP3QuYjp0LmF9ZnVuY3Rpb24geVllKHQpe3JldHVybih0LmMrdC5hKS8yfWZ1bmN0aW9uIERtKCl7RG09WCxUNGU9bmV3IFVafWZ1bmN0aW9uIEVWdCgpe0VWdD1YLEk0ZT1uZXcgV1p9ZnVuY3Rpb24gVFZ0KCl7VFZ0PVgsRzRlPW5ldyB3cXR9ZnVuY3Rpb24gX1Z0KCl7X1Z0PVgsVTRlPW5ldyBtcXR9ZnVuY3Rpb24gSXAoKXtJcD1YLFhoPW5ldyBGcHR9ZnVuY3Rpb24gZGJ0KCl7ZGJ0PVgsWUF0PW5ldyBrcXR9ZnVuY3Rpb24gR1QoKXtHVD1YLExmdD1uZXcgU1V0fWZ1bmN0aW9uIFNnKCl7U2c9WCxoTj1uZXcgQVV0fWZ1bmN0aW9uIHBldCgpe3BldD1YLGE1ZT1uZXcgdkp9ZnVuY3Rpb24gc28oKXtzbz1YLGM1ZT1uZXcgd0p9ZnVuY3Rpb24gTlIoKXtOUj1YLG5VPW5ldyBBcn1mdW5jdGlvbiBnYnQoKXtnYnQ9WCxhTHQ9bmV3IGxlfWZ1bmN0aW9uIE9wKCl7T3A9WCxNYj1uZXcgSUp9ZnVuY3Rpb24geFllKHQpe2IuY2xlYXJUaW1lb3V0KHQpfWZ1bmN0aW9uIHBidCh0KXt0aGlzLmE9dShEcih0KSwyMjQpfWZ1bmN0aW9uIFBSKHQpe3JldHVybiB1KHQsNDIpLmNkKCl9ZnVuY3Rpb24gbU0odCl7cmV0dXJuIHQuYjx0LmQuZ2MoKX1mdW5jdGlvbiBDVnQodCxlKXtyZXR1cm4gSW50KHQuYSxlKX1mdW5jdGlvbiBTVnQodCxlKXtyZXR1cm4gX2ModCxlKT4wfWZ1bmN0aW9uIGJldCh0LGUpe3JldHVybiBfYyh0LGUpPDB9ZnVuY3Rpb24gVVQodCxlKXtyZXR1cm4gdC5hLmdldChlKX1mdW5jdGlvbiBrWWUodCxlKXtyZXR1cm4gZS5zcGxpdCh0KX1mdW5jdGlvbiBBVnQodCxlKXtyZXR1cm4gTWwodC5lLGUpfWZ1bmN0aW9uIGJidCh0KXtyZXR1cm4gSW4odCksITF9ZnVuY3Rpb24gRlIodCl7VG4uY2FsbCh0aGlzLHQsMjEpfWZ1bmN0aW9uIEVZZSh0LGUpe3NRdC5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBCUih0LGUpe0tyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHZldCh0LGUpe0tyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHZidCh0KXtabnQoKSxhS3QuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIHdidCh0LGUpe3VZdCh0LHQubGVuZ3RoLGUpfWZ1bmN0aW9uIHlNKHQsZSl7Ull0KHQsdC5sZW5ndGgsZSl9ZnVuY3Rpb24gVFllKHQsZSxuKXtlLnVkKHQuYS5HZShuKSl9ZnVuY3Rpb24gX1llKHQsZSxuKXtlLndlKHQuYS5GZShuKSl9ZnVuY3Rpb24gQ1llKHQsZSxuKXtlLnRkKHQuYS5LYihuKSl9ZnVuY3Rpb24gU1llKHQsZSxuKXt0Lk1iKG4pJiZlLnRkKG4pfWZ1bmN0aW9uIFdUKHQsZSxuKXt0LnNwbGljZShlLDAsbil9ZnVuY3Rpb24gQVllKHQsZSl7cmV0dXJuIHp1KHQuZSxlKX1mdW5jdGlvbiBSUih0LGUpe3RoaXMuZD10LHRoaXMuZT1lfWZ1bmN0aW9uIExWdCh0LGUpe3RoaXMuYj10LHRoaXMuYT1lfWZ1bmN0aW9uIE1WdCh0LGUpe3RoaXMuYj10LHRoaXMuYT1lfWZ1bmN0aW9uIG1idCh0LGUpe3RoaXMuYj10LHRoaXMuYT1lfWZ1bmN0aW9uIERWdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIElWdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIE9WdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIE5WdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIEU2KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24geWJ0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWV9ZnVuY3Rpb24geGJ0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWV9ZnVuY3Rpb24galIodCxlKXtLci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiAkUih0LGUpe0tyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIGtidCh0LGUpe0tyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIEVidCh0LGUpe0tyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uICQzKHQsZSl7S3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gd2V0KHQsZSl7S3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gbWV0KHQsZSl7S3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24geWV0KHQsZSl7S3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gelIodCxlKXtLci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBUYnQodCxlKXtLci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiB4ZXQodCxlKXtLci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiB4TSh0LGUpe0tyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHFSKHQsZSl7S3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24ga2V0KHQsZSl7S3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gS1QodCxlKXtLci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBfYnQodCxlKXtLci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBMcyh0LGUpe0tyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIEhSKHQsZSl7S3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gUFZ0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gRlZ0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gQlZ0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gUlZ0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24galZ0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gJFZ0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gelZ0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gcVZ0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gSFZ0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gQ2J0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWV9ZnVuY3Rpb24gVlZ0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWV9ZnVuY3Rpb24gR1Z0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWV9ZnVuY3Rpb24gVVZ0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWV9ZnVuY3Rpb24gaTgodCxlKXt0aGlzLmM9dCx0aGlzLmQ9ZX1mdW5jdGlvbiBXVnQodCxlKXt0aGlzLmU9dCx0aGlzLmQ9ZX1mdW5jdGlvbiBLVnQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBZVnQodCxlKXt0aGlzLmI9ZSx0aGlzLmM9dH1mdW5jdGlvbiBWUih0LGUpe0tyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIGtNKHQsZSl7S3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gRWV0KHQsZSl7S3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gWVQodCxlKXtLci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBTYnQodCxlKXtLci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBUZXQodCxlKXtLci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBfZXQodCxlKXtLci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBFTSh0LGUpe0tyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIEFidCh0LGUpe0tyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIENldCh0LGUpe0tyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIFhUKHQsZSl7S3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gTGJ0KHQsZSl7S3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gUVQodCxlKXtLci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBaVCh0LGUpe0tyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIEltKHQsZSl7S3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gQWV0KHQsZSl7S3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gTGV0KHQsZSl7S3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gTWJ0KHQsZSl7S3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gSlQodCxlKXtLci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBNZXQodCxlKXtLci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBHUih0LGUpe0tyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIFRNKHQsZSl7S3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gX00odCxlKXtLci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBUNih0LGUpe0tyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIERldCh0LGUpe0tyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIERidCh0LGUpe0tyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIElldCh0LGUpe0tyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIE9ldCh0LGUpe0tyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIElidCh0LGUpe0tyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIE5ldCh0LGUpe0tyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIFBldCh0LGUpe0tyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIEZldCh0LGUpe0tyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIEJldCh0LGUpe0tyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIE9idCh0LGUpe0tyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIFhWdCh0LGUpe3RoaXMuYj10LHRoaXMuYT1lfWZ1bmN0aW9uIFFWdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIFpWdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIEpWdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIHRHdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIE5idCh0LGUpe0tyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIFBidCh0LGUpe0tyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIGVHdCh0LGUpe3RoaXMuYj10LHRoaXMuZD1lfWZ1bmN0aW9uIEZidCh0LGUpe0tyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIEJidCh0LGUpe0tyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIG5HdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIHJHdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIFVSKHQsZSl7S3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gdF8odCxlKXtLci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBSYnQodCxlKXtLci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBqYnQodCxlKXtLci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiAkYnQodCxlKXtLci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBSZXQodCxlKXtLci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiB6YnQodCxlKXtLci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBqZXQodCxlKXtLci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBXUih0LGUpe0tyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uICRldCh0LGUpe0tyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHpldCh0LGUpe0tyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIENNKHQsZSl7S3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gcWV0KHQsZSl7S3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gcWJ0KHQsZSl7S3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gU00odCxlKXtLci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBIYnQodCxlKXtLci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBMWWUodCxlKXtyZXR1cm4genUodC5jLGUpfWZ1bmN0aW9uIE1ZZSh0LGUpe3JldHVybiB6dShlLmIsdCl9ZnVuY3Rpb24gRFllKHQsZSl7cmV0dXJuLXQuYi5KZShlKX1mdW5jdGlvbiBWYnQodCxlKXtyZXR1cm4genUodC5nLGUpfWZ1bmN0aW9uIEFNKHQsZSl7S3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gXzYodCxlKXtLci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBpR3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBzR3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBSZSh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIGVfKHQsZSl7S3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gbl8odCxlKXtLci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBMTSh0LGUpe0tyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIEhldCh0LGUpe0tyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIEtSKHQsZSl7S3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gcl8odCxlKXtLci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBWZXQodCxlKXtLci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBZUih0LGUpe0tyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHozKHQsZSl7S3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gTU0odCxlKXtLci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBpXyh0LGUpe0tyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHNfKHQsZSl7S3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gRE0odCxlKXtLci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBYUih0LGUpe0tyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHEzKHQsZSl7S3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gUVIodCxlKXtLci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBhR3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBvR3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBjR3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiB1R3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBsR3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBoR3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiB5YSh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIFpSKHQsZSl7S3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gZkd0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gZEd0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gZ0d0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gcEd0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gYkd0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gdkd0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gd0d0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWV9ZnVuY3Rpb24gbUd0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWV9ZnVuY3Rpb24geUd0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWV9ZnVuY3Rpb24geEd0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWV9ZnVuY3Rpb24ga0d0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gRUd0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gSVllKHQsZSl7YzJuKHQuYSx1KGUsNTYpKX1mdW5jdGlvbiBUR3QodCxlKXt5YW4odC5hLHUoZSwxMSkpfWZ1bmN0aW9uIE9ZZSh0LGUpe3JldHVybiBmOCgpLGUhPXR9ZnVuY3Rpb24gX0d0KCl7cmV0dXJuIFhxdCgpLG5ldyBBZ2V9ZnVuY3Rpb24gQ0d0KCl7dnJ0KCksdGhpcy5iPW5ldyBRc31mdW5jdGlvbiBTR3QoKXtocSgpLHRoaXMuYT1uZXcgUXN9ZnVuY3Rpb24gQUd0KCl7Rnd0KCksR3Z0LmNhbGwodGhpcyl9ZnVuY3Rpb24gQzYodCxlKXtLci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBMR3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBNR3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBKUih0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIERHdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIElHdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIE9HdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIE5HdCh0LGUpe3RoaXMuZD10LHRoaXMuYj1lfWZ1bmN0aW9uIEdidCh0LGUpe3RoaXMuZD10LHRoaXMuZT1lfWZ1bmN0aW9uIFBHdCh0LGUpe3RoaXMuZj10LHRoaXMuYz1lfWZ1bmN0aW9uIElNKHQsZSl7dGhpcy5iPXQsdGhpcy5jPWV9ZnVuY3Rpb24gVWJ0KHQsZSl7dGhpcy5pPXQsdGhpcy5nPWV9ZnVuY3Rpb24gRkd0KHQsZSl7dGhpcy5lPXQsdGhpcy5hPWV9ZnVuY3Rpb24gQkd0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gV2J0KHQsZSl7dC5pPW51bGwsZXoodCxlKX1mdW5jdGlvbiBOWWUodCxlKXt0JiZBaShjTix0LGUpfWZ1bmN0aW9uIFJHdCh0LGUpe3JldHVybiBZaXQodC5hLGUpfWZ1bmN0aW9uIHRqKHQpe3JldHVybiBHRCh0LmMsdC5iKX1mdW5jdGlvbiBjYyh0KXtyZXR1cm4gdD90LmRkKCk6bnVsbH1mdW5jdGlvbiBHdCh0KXtyZXR1cm4gdD8/bnVsbH1mdW5jdGlvbiBPbSh0KXtyZXR1cm4gdHlwZW9mIHQ9PT1jeH1mdW5jdGlvbiBObSh0KXtyZXR1cm4gdHlwZW9mIHQ9PT1DNnR9ZnVuY3Rpb24gaGEodCl7cmV0dXJuIHR5cGVvZiB0PT09UGF0fWZ1bmN0aW9uIE5wKHQsZSl7cmV0dXJuIHQuSGQoKS5YYihlKX1mdW5jdGlvbiBlaih0LGUpe3JldHVybiBYb24odC5LYygpLGUpfWZ1bmN0aW9uIEF2KHQsZSl7cmV0dXJuIF9jKHQsZSk9PTB9ZnVuY3Rpb24gUFllKHQsZSl7cmV0dXJuIF9jKHQsZSk+PTB9ZnVuY3Rpb24gYV8odCxlKXtyZXR1cm4gX2ModCxlKSE9MH1mdW5jdGlvbiBGWWUodCl7cmV0dXJuIiIrKEluKHQpLHQpfWZ1bmN0aW9uIE9NKHQsZSl7cmV0dXJuIHQuc3Vic3RyKGUpfWZ1bmN0aW9uIGpHdCh0KXtyZXR1cm4gZ2wodCksdC5kLmdjKCl9ZnVuY3Rpb24gR2V0KHQpe3JldHVybiBJcG4odCx0LmMpLHR9ZnVuY3Rpb24gbmoodCl7cmV0dXJuIG1fKHQ9PW51bGwpLHR9ZnVuY3Rpb24gb18odCxlKXtyZXR1cm4gdC5hKz0iIitlLHR9ZnVuY3Rpb24geW8odCxlKXtyZXR1cm4gdC5hKz0iIitlLHR9ZnVuY3Rpb24gY18odCxlKXtyZXR1cm4gdC5hKz0iIitlLHR9ZnVuY3Rpb24gd2ModCxlKXtyZXR1cm4gdC5hKz0iIitlLHR9ZnVuY3Rpb24gWXIodCxlKXtyZXR1cm4gdC5hKz0iIitlLHR9ZnVuY3Rpb24gS2J0KHQsZSl7cmV0dXJuIHQuYSs9IiIrZSx0fWZ1bmN0aW9uICRHdCh0LGUpe2tzKHQsZSx0LmEsdC5hLmEpfWZ1bmN0aW9uIFhiKHQsZSl7a3ModCxlLHQuYy5iLHQuYyl9ZnVuY3Rpb24gQlllKHQsZSxuKXtZc2UoZSxSc3QodCxuKSl9ZnVuY3Rpb24gUlllKHQsZSxuKXtZc2UoZSxSc3QodCxuKSl9ZnVuY3Rpb24galllKHQsZSl7RGFuKG5ldyBucih0KSxlKX1mdW5jdGlvbiB6R3QodCxlKXt0LnEuc2V0VGltZShHdihlKSl9ZnVuY3Rpb24gcUd0KHQsZSl7dHd0LmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIEhHdCh0LGUpe3R3dC5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBVZXQodCxlKXt0d3QuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gVkd0KHQpe25sKHRoaXMpLEdfKHRoaXMsdCl9ZnVuY3Rpb24gWWJ0KHQpe3JldHVybiBTbih0LDApLG51bGx9ZnVuY3Rpb24gS2YodCl7cmV0dXJuIHQuYT0wLHQuYj0wLHR9ZnVuY3Rpb24gR0d0KHQsZSl7cmV0dXJuIHQuYT1lLmcrMSx0fWZ1bmN0aW9uICRZZSh0LGUpe3JldHVybiB0LmpbZS5wXT09Mn1mdW5jdGlvbiBYYnQodCl7cmV0dXJuIGtlbih1KHQsNzkpKX1mdW5jdGlvbiBVR3QoKXtVR3Q9WCxrcGU9UXIoZXN0KCkpfWZ1bmN0aW9uIFdHdCgpe1dHdD1YLGpiZT1RcihMY2UoKSl9ZnVuY3Rpb24gS0d0KCl7dGhpcy5iPW5ldyB4NihRbSgxMikpfWZ1bmN0aW9uIFlHdCgpe3RoaXMuYj0wLHRoaXMuYT0hMX1mdW5jdGlvbiBYR3QoKXt0aGlzLmI9MCx0aGlzLmE9ITF9ZnVuY3Rpb24gdV8odCl7dGhpcy5hPXQsZlQuY2FsbCh0aGlzKX1mdW5jdGlvbiBRR3QodCl7dGhpcy5hPXQsZlQuY2FsbCh0aGlzKX1mdW5jdGlvbiB2bih0LGUpe0hzLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIFdldCh0LGUpe2ptLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIEgzKHQsZSl7VWJ0LmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIEtldCh0LGUpe1Y4LmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIFpHdCh0LGUpe05NLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIG9pKHQsZSl7TlIoKSxBaShuVSx0LGUpfWZ1bmN0aW9uIFlldCh0LGUpe3JldHVybiBCbCh0LmEsMCxlKX1mdW5jdGlvbiBKR3QodCxlKXtyZXR1cm4gdC5hLmEuYS5jYyhlKX1mdW5jdGlvbiB0VXQodCxlKXtyZXR1cm4gR3QodCk9PT1HdChlKX1mdW5jdGlvbiB6WWUodCxlKXtyZXR1cm4ganModC5hLGUuYSl9ZnVuY3Rpb24gcVllKHQsZSl7cmV0dXJuIG11KHQuYSxlLmEpfWZ1bmN0aW9uIEhZZSh0LGUpe3JldHVybiBQWXQodC5hLGUuYSl9ZnVuY3Rpb24gdWQodCxlKXtyZXR1cm4gdC5pbmRleE9mKGUpfWZ1bmN0aW9uIEx2KHQsZSl7cmV0dXJuIHQ9PWU/MDp0PzE6LTF9ZnVuY3Rpb24gcmoodCl7cmV0dXJuIHQ8MTA/IjAiK3Q6IiIrdH1mdW5jdGlvbiBWWWUodCl7cmV0dXJuIERyKHQpLG5ldyB1Xyh0KX1mdW5jdGlvbiBlVXQodCl7cmV0dXJuIGN1KHQubCx0Lm0sdC5oKX1mdW5jdGlvbiBzOCh0KXtyZXR1cm4gQ3MoKEluKHQpLHQpKX1mdW5jdGlvbiBHWWUodCl7cmV0dXJuIENzKChJbih0KSx0KSl9ZnVuY3Rpb24gblV0KHQsZSl7cmV0dXJuIG11KHQuZyxlLmcpfWZ1bmN0aW9uIFZvKHQpe3JldHVybiB0eXBlb2YgdD09PUM2dH1mdW5jdGlvbiBVWWUodCl7cmV0dXJuIHQ9PUN3fHx0PT1JeX1mdW5jdGlvbiBXWWUodCl7cmV0dXJuIHQ9PUN3fHx0PT1EeX1mdW5jdGlvbiBRYnQodCl7cmV0dXJuIEdvKHQuYi5iLHQsMCl9ZnVuY3Rpb24gclV0KHQpe3RoaXMuYT1fR3QoKSx0aGlzLmI9dH1mdW5jdGlvbiBpVXQodCl7dGhpcy5hPV9HdCgpLHRoaXMuYj10fWZ1bmN0aW9uIEtZZSh0LGUpe3JldHVybiB1ZSh0LmEsZSksZX1mdW5jdGlvbiBZWWUodCxlKXtyZXR1cm4gdWUodC5jLGUpLHR9ZnVuY3Rpb24gc1V0KHQsZSl7cmV0dXJuIEhsKHQuYSxlKSx0fWZ1bmN0aW9uIFhZZSh0LGUpe3JldHVybiBkZigpLGUuYSs9dH1mdW5jdGlvbiBRWWUodCxlKXtyZXR1cm4gZGYoKSxlLmErPXR9ZnVuY3Rpb24gWlllKHQsZSl7cmV0dXJuIGRmKCksZS5jKz10fWZ1bmN0aW9uIFpidCh0LGUpe004KHQsMCx0Lmxlbmd0aCxlKX1mdW5jdGlvbiBBMCgpe0V0LmNhbGwodGhpcyxuZXcgaTIpfWZ1bmN0aW9uIGFVdCgpe0ZqLmNhbGwodGhpcywwLDAsMCwwKX1mdW5jdGlvbiBTNigpe2NoLmNhbGwodGhpcywwLDAsMCwwKX1mdW5jdGlvbiBTbyh0KXt0aGlzLmE9dC5hLHRoaXMuYj10LmJ9ZnVuY3Rpb24gUHAodCl7cmV0dXJuIHQ9PUhofHx0PT1fZn1mdW5jdGlvbiBhOCh0KXtyZXR1cm4gdD09WjB8fHQ9PVEwfWZ1bmN0aW9uIG9VdCh0KXtyZXR1cm4gdD09ZTV8fHQ9PXQ1fWZ1bmN0aW9uIFYzKHQpe3JldHVybiB0IT1VMSYmdCE9a2J9ZnVuY3Rpb24gU2wodCl7cmV0dXJuIHQuTGcoKSYmdC5NZygpfWZ1bmN0aW9uIGNVdCh0KXtyZXR1cm4gWmoodSh0LDExOCkpfWZ1bmN0aW9uIGlqKHQpe3JldHVybiBIbChuZXcgWnMsdCl9ZnVuY3Rpb24gdVV0KHQsZSl7cmV0dXJuIG5ldyBWOChlLHQpfWZ1bmN0aW9uIEpZZSh0LGUpe3JldHVybiBuZXcgVjgoZSx0KX1mdW5jdGlvbiBKYnQodCxlLG4pe1ckKHQsZSksSyQodCxuKX1mdW5jdGlvbiBzaih0LGUsbil7UXYodCxlKSxYdih0LG4pfWZ1bmN0aW9uIGsxKHQsZSxuKXtDdSh0LGUpLFN1KHQsbil9ZnVuY3Rpb24gYWoodCxlLG4pe044KHQsZSksRjgodCxuKX1mdW5jdGlvbiBvaih0LGUsbil7UDgodCxlKSxCOCh0LG4pfWZ1bmN0aW9uIFhldCh0LGUpe1g4KHQsZSksUjgodCx0LkQpfWZ1bmN0aW9uIHQydCh0KXtQR3QuY2FsbCh0aGlzLHQsITApfWZ1bmN0aW9uIGxVdCh0LGUsbil7SDJ0LmNhbGwodGhpcyx0LGUsbil9ZnVuY3Rpb24gRnAodCl7ZWIoKSx0Y24uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGhVdCgpe0JSLmNhbGwodGhpcywiSGVhZCIsMSl9ZnVuY3Rpb24gZlV0KCl7QlIuY2FsbCh0aGlzLCJUYWlsIiwzKX1mdW5jdGlvbiBRZXQodCl7dC5jPU50KFFuLE1lLDEsMCw1LDEpfWZ1bmN0aW9uIGRVdCh0KXt0LmE9TnQoUW4sTWUsMSw4LDUsMSl9ZnVuY3Rpb24gZ1V0KHQpe191KHQueGYoKSxuZXcgdXIodCkpfWZ1bmN0aW9uIEczKHQpe3JldHVybiB0IT1udWxsP0ppKHQpOjB9ZnVuY3Rpb24gdFhlKHQsZSl7cmV0dXJuIFptKGUsXzEodCkpfWZ1bmN0aW9uIGVYZSh0LGUpe3JldHVybiBabShlLF8xKHQpKX1mdW5jdGlvbiBuWGUodCxlKXtyZXR1cm4gdFt0Lmxlbmd0aF09ZX1mdW5jdGlvbiByWGUodCxlKXtyZXR1cm4gdFt0Lmxlbmd0aF09ZX1mdW5jdGlvbiBlMnQodCl7cmV0dXJuIG50bih0LmIuS2MoKSx0LmEpfWZ1bmN0aW9uIGlYZSh0LGUpe3JldHVybiB0eihYbnQodC5kKSxlKX1mdW5jdGlvbiBzWGUodCxlKXtyZXR1cm4gdHooWG50KHQuZyksZSl9ZnVuY3Rpb24gYVhlKHQsZSl7cmV0dXJuIHR6KFhudCh0LmopLGUpfWZ1bmN0aW9uIGFvKHQsZSl7SHMuY2FsbCh0aGlzLHQuYixlKX1mdW5jdGlvbiBNdih0KXtGai5jYWxsKHRoaXMsdCx0LHQsdCl9ZnVuY3Rpb24gbjJ0KHQpe3JldHVybiB0LmImJndhdCh0KSx0LmF9ZnVuY3Rpb24gcjJ0KHQpe3JldHVybiB0LmImJndhdCh0KSx0LmN9ZnVuY3Rpb24gb1hlKHQsZSl7ejF8fCh0LmI9ZSl9ZnVuY3Rpb24gWmV0KHQsZSxuKXtyZXR1cm4gbHModCxlLG4pLG59ZnVuY3Rpb24gcFV0KHQsZSxuKXtscyh0LmNbZS5nXSxlLmcsbil9ZnVuY3Rpb24gY1hlKHQsZSxuKXt1KHQuYyw2OSkuWGgoZSxuKX1mdW5jdGlvbiB1WGUodCxlLG4pe2sxKG4sbi5pK3Qsbi5qK2UpfWZ1bmN0aW9uIGxYZSh0LGUpe09yKE9jKHQuYSksTFF0KGUpKX1mdW5jdGlvbiBoWGUodCxlKXtPcihmbCh0LmEpLE1RdChlKSl9ZnVuY3Rpb24gbF8odCl7eWkoKSx2di5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gZlhlKHQpe3JldHVybiB0PT1udWxsPzA6SmkodCl9ZnVuY3Rpb24gYlV0KCl7YlV0PVgsa2h0PW5ldyBlQyh2ZnQpfWZ1bmN0aW9uIEZyKCl7RnI9WCxuZXcgdlV0LG5ldyBsZX1mdW5jdGlvbiB2VXQoKXtuZXcgQXIsbmV3IEFyLG5ldyBBcn1mdW5jdGlvbiBpMnQoKXtpMnQ9WCxrcHQoKSxLOHQ9bmV3IEFyfWZ1bmN0aW9uIEUxKCl7RTE9WCxiLk1hdGgubG9nKDIpfWZ1bmN0aW9uIGFoKCl7YWg9WCxmMD0oRVZ0KCksSTRlKX1mdW5jdGlvbiBkWGUoKXt0aHJvdyBudChuZXcgVGcocmdlKSl9ZnVuY3Rpb24gZ1hlKCl7dGhyb3cgbnQobmV3IFRnKHJnZSkpfWZ1bmN0aW9uIHBYZSgpe3Rocm93IG50KG5ldyBUZyhpZ2UpKX1mdW5jdGlvbiBiWGUoKXt0aHJvdyBudChuZXcgVGcoaWdlKSl9ZnVuY3Rpb24gd1V0KHQpe3RoaXMuYT10LGt2dC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gSmV0KHQpe3RoaXMuYT10LFRSLmNhbGwodGhpcyx0KX1mdW5jdGlvbiB0bnQodCl7dGhpcy5hPXQsVFIuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGFhKHQsZSl7RG50KHQuYyx0LmMubGVuZ3RoLGUpfWZ1bmN0aW9uIEpvKHQpe3JldHVybiB0LmE8dC5jLmMubGVuZ3RofWZ1bmN0aW9uIHMydCh0KXtyZXR1cm4gdC5hPHQuYy5hLmxlbmd0aH1mdW5jdGlvbiBtVXQodCxlKXtyZXR1cm4gdC5hP3QuYjplLkRlKCl9ZnVuY3Rpb24gbXUodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOjB9ZnVuY3Rpb24geVV0KHQsZSl7cmV0dXJuIF9jKHQsZSk+MD90OmV9ZnVuY3Rpb24gY3UodCxlLG4pe3JldHVybntsOnQsbTplLGg6bn19ZnVuY3Rpb24gdlhlKHQsZSl7dC5hIT1udWxsJiZUR3QoZSx0LmEpfWZ1bmN0aW9uIHhVdCh0KXt0LmE9bmV3IEJ0LHQuYz1uZXcgQnR9ZnVuY3Rpb24gY2oodCl7dGhpcy5iPXQsdGhpcy5hPW5ldyBsZX1mdW5jdGlvbiBrVXQodCl7dGhpcy5iPW5ldyBBcyx0aGlzLmE9dH1mdW5jdGlvbiBhMnQodCl7WjJ0LmNhbGwodGhpcyksdGhpcy5hPXR9ZnVuY3Rpb24gRVV0KCl7QlIuY2FsbCh0aGlzLCJSYW5nZSIsMil9ZnVuY3Rpb24gVFV0KCl7dDR0KCksdGhpcy5hPW5ldyBkSShrRXQpfWZ1bmN0aW9uIHdYZSh0LGUpe0RyKGUpLFgzKHQpLkpjKG5ldyBKKX1mdW5jdGlvbiBtWGUodCxlKXtyZXR1cm4gUmwoKSxlLm4uYis9dH1mdW5jdGlvbiB5WGUodCxlLG4pe3JldHVybiBBaSh0LmcsbixlKX1mdW5jdGlvbiB4WGUodCxlLG4pe3JldHVybiBBaSh0LmssbixlKX1mdW5jdGlvbiBrWGUodCxlKXtyZXR1cm4gQWkodC5hLGUuYSxlKX1mdW5jdGlvbiBVMyh0LGUsbil7cmV0dXJuIHkzdChlLG4sdC5jKX1mdW5jdGlvbiBvMnQodCl7cmV0dXJuIG5ldyBSZSh0LmMsdC5kKX1mdW5jdGlvbiBFWGUodCl7cmV0dXJuIG5ldyBSZSh0LmMsdC5kKX1mdW5jdGlvbiB1Yyh0KXtyZXR1cm4gbmV3IFJlKHQuYSx0LmIpfWZ1bmN0aW9uIF9VdCh0LGUpe3JldHVybiBVM24odC5hLGUsbnVsbCl9ZnVuY3Rpb24gVFhlKHQpe0JhKHQsbnVsbCkscGEodCxudWxsKX1mdW5jdGlvbiBDVXQodCl7bXJ0KHQsbnVsbCkseXJ0KHQsbnVsbCl9ZnVuY3Rpb24gU1V0KCl7Tk0uY2FsbCh0aGlzLG51bGwsbnVsbCl9ZnVuY3Rpb24gQVV0KCl7YmouY2FsbCh0aGlzLG51bGwsbnVsbCl9ZnVuY3Rpb24gYzJ0KHQpe3RoaXMuYT10LEFyLmNhbGwodGhpcyl9ZnVuY3Rpb24gX1hlKHQpe3RoaXMuYj0ocG4oKSxuZXcgeih0KSl9ZnVuY3Rpb24gdWoodCl7dC5qPU50KG83dCxyZSwzMTAsMCwwLDEpfWZ1bmN0aW9uIENYZSh0LGUsbil7dC5jLlZjKGUsdShuLDEzMykpfWZ1bmN0aW9uIFNYZSh0LGUsbil7dC5jLmppKGUsdShuLDEzMykpfWZ1bmN0aW9uIExVdCh0LGUpe1RyKHQpLHQuR2ModShlLDE1KSl9ZnVuY3Rpb24gaF8odCxlKXtyZXR1cm4gYzNuKHQuYyx0LmIsZSl9ZnVuY3Rpb24gQVhlKHQsZSl7cmV0dXJuIG5ldyBRVXQodC5LYygpLGUpfWZ1bmN0aW9uIGVudCh0LGUpe3JldHVybiBTY24odC5LYygpLGUpIT0tMX1mdW5jdGlvbiB1MnQodCxlKXtyZXR1cm4gdC5hLkJjKGUpIT1udWxsfWZ1bmN0aW9uIGxqKHQpe3JldHVybiB0Lk9iKCk/dC5QYigpOm51bGx9ZnVuY3Rpb24gTVV0KHQpe3JldHVybiBJaCh0LDAsdC5sZW5ndGgpfWZ1bmN0aW9uIF90KHQsZSl7cmV0dXJuIHQhPW51bGwmJnNzdCh0LGUpfWZ1bmN0aW9uIExYZSh0LGUpe3QucS5zZXRIb3VycyhlKSx5Qyh0LGUpfWZ1bmN0aW9uIERVdCh0LGUpe3QuYyYmKE92dChlKSxyUXQoZSkpfWZ1bmN0aW9uIE1YZSh0LGUsbil7dSh0LktiKG4pLDE2NCkuTmIoZSl9ZnVuY3Rpb24gRFhlKHQsZSxuKXtyZXR1cm4gajNuKHQsZSxuKSxufWZ1bmN0aW9uIElVdCh0LGUsbil7dC5hPWVeMTUwMix0LmI9bl5nb3R9ZnVuY3Rpb24gbm50KHQsZSxuKXtyZXR1cm4gdC5hW2UuZ11bbi5nXX1mdW5jdGlvbiBUMSh0LGUpe3JldHVybiB0LmFbZS5jLnBdW2UucF19ZnVuY3Rpb24gSVhlKHQsZSl7cmV0dXJuIHQuZVtlLmMucF1bZS5wXX1mdW5jdGlvbiBPWGUodCxlKXtyZXR1cm4gdC5jW2UuYy5wXVtlLnBdfWZ1bmN0aW9uIE5YZSh0LGUpe3JldHVybiB0LmpbZS5wXT1IYm4oZSl9ZnVuY3Rpb24gUFhlKHQsZSl7cmV0dXJuIGZtdCh0LmYsZS50ZygpKX1mdW5jdGlvbiBGWGUodCxlKXtyZXR1cm4gZm10KHQuYixlLnRnKCkpfWZ1bmN0aW9uIEJYZSh0LGUpe3JldHVybiB0LmE8dXZ0KGUpPy0xOjF9ZnVuY3Rpb24gUlhlKHQsZSxuKXtyZXR1cm4gbj9lIT0wOmUhPXQtMX1mdW5jdGlvbiBqWGUodCxlLG4pe3JldHVybiB0LmE9ZSx0LmI9bix0fWZ1bmN0aW9uIGxkKHQsZSl7cmV0dXJuIHQuYSo9ZSx0LmIqPWUsdH1mdW5jdGlvbiBmXyh0LGUsbil7cmV0dXJuIGxzKHQuZyxlLG4pLG59ZnVuY3Rpb24gJFhlKHQsZSxuLHIpe2xzKHQuYVtlLmddLG4uZyxyKX1mdW5jdGlvbiB6WGUodCxlKXtGbShlLHQuYS5hLmEsdC5hLmEuYil9ZnVuY3Rpb24gT1V0KHQpe3QuYT11KE1uKHQuYi5hLDQpLDEyNil9ZnVuY3Rpb24gTlV0KHQpe3QuYT11KE1uKHQuYi5hLDQpLDEyNil9ZnVuY3Rpb24gcVhlKHQpe3REKHQsRGRlKSxac3QodCxING4odCkpfWZ1bmN0aW9uIG84KCl7bzg9WCxXSD1uZXcgZ1IobnVsbCl9ZnVuY3Rpb24gbDJ0KCl7bDJ0PVgsbDJ0KCksRGdlPW5ldyBIZX1mdW5jdGlvbiBoMnQoKXt0aGlzLkJifD0yNTYsdGhpcy5CYnw9NTEyfWZ1bmN0aW9uIG5yKHQpe3RoaXMuaT10LHRoaXMuZj10aGlzLmkuan1mdW5jdGlvbiBCcyh0LGUsbil7V00uY2FsbCh0aGlzLHQsZSxuKX1mdW5jdGlvbiBoaih0LGUsbil7QnMuY2FsbCh0aGlzLHQsZSxuKX1mdW5jdGlvbiAkdSh0LGUsbil7QnMuY2FsbCh0aGlzLHQsZSxuKX1mdW5jdGlvbiBQVXQodCxlLG4pe2hqLmNhbGwodGhpcyx0LGUsbil9ZnVuY3Rpb24gZjJ0KHQsZSxuKXtXTS5jYWxsKHRoaXMsdCxlLG4pfWZ1bmN0aW9uIFczKHQsZSxuKXtXTS5jYWxsKHRoaXMsdCxlLG4pfWZ1bmN0aW9uIGQydCh0LGUsbil7U2ouY2FsbCh0aGlzLHQsZSxuKX1mdW5jdGlvbiBGVXQodCxlLG4pe1NqLmNhbGwodGhpcyx0LGUsbil9ZnVuY3Rpb24gQlV0KHQsZSxuKXtkMnQuY2FsbCh0aGlzLHQsZSxuKX1mdW5jdGlvbiBSVXQodCxlLG4pe2YydC5jYWxsKHRoaXMsdCxlLG4pfWZ1bmN0aW9uIEszKHQsZSl7dGhpcy5hPXQsVFIuY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIGpVdCh0LGUpe3RoaXMuYT10LGFldC5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gJFV0KHQsZSl7dGhpcy5hPXQsYWV0LmNhbGwodGhpcyxlKX1mdW5jdGlvbiB6VXQodCxlKXt0aGlzLmE9dCxhZXQuY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIGcydCh0KXt0aGlzLmE9dCxjdHQuY2FsbCh0aGlzLHQuZCl9ZnVuY3Rpb24gQnAodCl7dGhpcy5jPXQsdGhpcy5hPXRoaXMuYy5hfWZ1bmN0aW9uIHAydCh0LGUpe3RoaXMuYT1lLGFldC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gcVV0KHQsZSl7dGhpcy5hPWUsRHJ0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiBIVXQodCxlKXt0aGlzLmE9dCxEcnQuY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIEhYZSh0LGUpe3JldHVybiBadnQoRm50KHQuYykpLlhiKGUpfWZ1bmN0aW9uIGIydCh0LGUpe3JldHVybiBpbG4odCxuZXcgQXAsZSkuYX1mdW5jdGlvbiBscih0LGUpe3JldHVybiBEcihlKSxuZXcgVlV0KHQsZSl9ZnVuY3Rpb24gVlV0KHQsZSl7dGhpcy5hPWUsX1IuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIHYydCh0KXt0aGlzLmI9dCx0aGlzLmE9dGhpcy5iLmEuZX1mdW5jdGlvbiBHVXQodCl7dC5iLlFiKCksLS10LmQuZi5kLFJqKHQuZCl9ZnVuY3Rpb24gVVV0KHQpe3dULmNhbGwodGhpcyx1KERyKHQpLDM1KSl9ZnVuY3Rpb24gV1V0KHQpe3dULmNhbGwodGhpcyx1KERyKHQpLDM1KSl9ZnVuY3Rpb24gS1V0KCl7S3IuY2FsbCh0aGlzLCJJTlNUQU5DRSIsMCl9ZnVuY3Rpb24gdzJ0KHQpe2lmKCF0KXRocm93IG50KG5ldyB1TSl9ZnVuY3Rpb24gbTJ0KHQpe2lmKCF0KXRocm93IG50KG5ldyBSdSl9ZnVuY3Rpb24geTJ0KHQpe2lmKCF0KXRocm93IG50KG5ldyB2Yyl9ZnVuY3Rpb24gWVV0KCl7WVV0PVgscGV0KCksbzVlPW5ldyBIQn1mdW5jdGlvbiBGbigpe0ZuPVgsTzI9ITEsVzc9ITB9ZnVuY3Rpb24gQWgodCl7ZjYuY2FsbCh0aGlzLChJbih0KSx0KSl9ZnVuY3Rpb24gRmwodCl7ZjYuY2FsbCh0aGlzLChJbih0KSx0KSl9ZnVuY3Rpb24gZmoodCl7VC5jYWxsKHRoaXMsdCksdGhpcy5hPXR9ZnVuY3Rpb24geDJ0KHQpe0wuY2FsbCh0aGlzLHQpLHRoaXMuYT10fWZ1bmN0aW9uIGsydCh0KXtZay5jYWxsKHRoaXMsdCksdGhpcy5hPXR9ZnVuY3Rpb24gWFV0KCl7dWoodGhpcyksbiQodGhpcyksdGhpcy5fZCgpfWZ1bmN0aW9uIFFVdCh0LGUpe3RoaXMuYT1lLF9SLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBaVXQodCxlKXtyZXR1cm4gbmV3IFVhZSh0LmEsdC5iLGUpfWZ1bmN0aW9uIGRqKHQsZSl7cmV0dXJuIHQubGFzdEluZGV4T2YoZSl9ZnVuY3Rpb24gRTJ0KHQsZSxuKXtyZXR1cm4gdC5pbmRleE9mKGUsbil9ZnVuY3Rpb24gZF8odCl7cmV0dXJuIHQ9PW51bGw/TXU6V28odCl9ZnVuY3Rpb24gVlhlKHQpe3JldHVybiB0PT1udWxsP251bGw6dC5uYW1lfWZ1bmN0aW9uIFQydCh0KXtyZXR1cm4gdC5hIT1udWxsP3QuYTpudWxsfWZ1bmN0aW9uIEdYZSh0KXtyZXR1cm4ga1IodC5hKT9OUXQodCk6bnVsbH1mdW5jdGlvbiBybnQodCxlKXtyZXR1cm4gRF8odC5hLGUpIT1udWxsfWZ1bmN0aW9uIHp1KHQsZSl7cmV0dXJuISFlJiZ0LmJbZS5nXT09ZX1mdW5jdGlvbiBEdih0KXtyZXR1cm4gdC4kSHx8KHQuJEg9KytpNm4pfWZ1bmN0aW9uIFVYZSh0KXtyZXR1cm4gdC5sK3QubSpoeCt0LmgqRTJ9ZnVuY3Rpb24gSlV0KHQsZSl7cmV0dXJuIHVlKGUuYSx0LmEpLHQuYX1mdW5jdGlvbiB0V3QodCxlKXtyZXR1cm4gdWUoZS5iLHQuYSksdC5hfWZ1bmN0aW9uIEl2KHQsZSl7cmV0dXJuIHVlKGUuYSx0LmEpLHQuYX1mdW5jdGlvbiBPdih0KXtyZXR1cm4gWm4odC5hIT1udWxsKSx0LmF9ZnVuY3Rpb24gaW50KHQpe0V0LmNhbGwodGhpcyxuZXcgeW10KHQpKX1mdW5jdGlvbiBfMnQodCxlKXtDM3QuY2FsbCh0aGlzLHQsZSxudWxsKX1mdW5jdGlvbiBnXyh0KXt0aGlzLmE9dCx4LmNhbGwodGhpcyx0KX1mdW5jdGlvbiBnaigpe2dqPVgsWkg9bmV3IEhzKERmZSwwKX1mdW5jdGlvbiBwaih0LGUpe3JldHVybisrdC5iLHVlKHQuYSxlKX1mdW5jdGlvbiBDMnQodCxlKXtyZXR1cm4rK3QuYixFdSh0LmEsZSl9ZnVuY3Rpb24gV1hlKHQsZSl7cmV0dXJuIGpzKHQubi5hLGUubi5hKX1mdW5jdGlvbiBLWGUodCxlKXtyZXR1cm4ganModC5jLmQsZS5jLmQpfWZ1bmN0aW9uIFlYZSh0LGUpe3JldHVybiBqcyh0LmMuYyxlLmMuYyl9ZnVuY3Rpb24geXUodCxlKXtyZXR1cm4gdShQaSh0LmIsZSksMTUpfWZ1bmN0aW9uIFhYZSh0LGUpe3JldHVybiB0Lm4uYj0oSW4oZSksZSl9ZnVuY3Rpb24gUVhlKHQsZSl7cmV0dXJuIHQubi5iPShJbihlKSxlKX1mdW5jdGlvbiBwXyh0KXtyZXR1cm4gSm8odC5hKXx8Sm8odC5iKX1mdW5jdGlvbiBaWGUodCxlLG4pe3JldHVybiBTWnQodCxlLG4sdC5iKX1mdW5jdGlvbiBTMnQodCxlLG4pe3JldHVybiBTWnQodCxlLG4sdC5jKX1mdW5jdGlvbiBBMnQodCxlLG4pe3Uod0QodCxlKSwyMSkuRmMobil9ZnVuY3Rpb24gSlhlKHQsZSxuKXtSaXQodC5hLG4pLHF6KHQuYSxlKX1mdW5jdGlvbiBOTSh0LGUpe0dUKCksdGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gYmoodCxlKXtTZygpLHRoaXMuYj10LHRoaXMuYz1lfWZ1bmN0aW9uIHNudCh0LGUpe1BudCgpLHRoaXMuZj1lLHRoaXMuZD10fWZ1bmN0aW9uIEwydCh0LGUpe2RtdChlLHQpLHRoaXMuZD10LHRoaXMuYz1lfWZ1bmN0aW9uIEFnKHQpe3ZhciBlO2U9dC5hLHQuYT10LmIsdC5iPWV9ZnVuY3Rpb24gdFFlKHQpe3JldHVybiBkZigpLCEhdCYmIXQuZGMoKX1mdW5jdGlvbiBlUWUodCl7cmV0dXJuIG5ldyBXbSgzLHQpfWZ1bmN0aW9uIE0ydCh0LGUpe3JldHVybiBuZXcgUVd0KHQsdC5nYygpLGUpfWZ1bmN0aW9uIG5RZSh0KXtyZXR1cm4gZFIoKSxYcigoa1F0KCksZmdlKSx0KX1mdW5jdGlvbiBBNih0KXt0aGlzLmQ9dCxuci5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gTDYodCl7dGhpcy5jPXQsbnIuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIFBNKHQpe3RoaXMuYz10LEE2LmNhbGwodGhpcyx0KX1mdW5jdGlvbiBlV3QoKXtxVCgpLHRoaXMuYj1uZXcgeDEodGhpcyl9ZnVuY3Rpb24gSGQodCl7cmV0dXJuIHFsKHQsbXkpLG5ldyBKYyh0KX1mdW5jdGlvbiBuV3QodCl7cmV0dXJuIGs4KCkscGFyc2VJbnQodCl8fC0xfWZ1bmN0aW9uIEJsKHQsZSxuKXtyZXR1cm4gdC5zdWJzdHIoZSxuLWUpfWZ1bmN0aW9uIGM4KHQsZSxuKXtyZXR1cm4gRTJ0KHQsTHUoZSksbil9ZnVuY3Rpb24gYW50KHQpe3JldHVybiBsd3QodC5jLHQuYy5sZW5ndGgpfWZ1bmN0aW9uIHJRZSh0KXtyZXR1cm4gdC5mIT1udWxsP3QuZjoiIit0Lmd9ZnVuY3Rpb24gb250KHQpe3JldHVybiB0LmYhPW51bGw/dC5mOiIiK3QuZ31mdW5jdGlvbiBjbnQodCl7cmV0dXJuIFpuKHQuYiE9MCksdC5hLmEuY31mdW5jdGlvbiB2aih0KXtyZXR1cm4gWm4odC5iIT0wKSx0LmMuYi5jfWZ1bmN0aW9uIEZNKHQpe190KHQsMTUwKSYmdSh0LDE1MCkuR2goKX1mdW5jdGlvbiB3aih0KXtyZXR1cm4gdC5iPXUoT1h0KHQuYSksNDIpfWZ1bmN0aW9uIEQydCh0KXtuOCgpLHRoaXMuYj10LHRoaXMuYT0hMH1mdW5jdGlvbiByV3QodCl7U1IoKSx0aGlzLmI9dCx0aGlzLmE9ITB9ZnVuY3Rpb24gaVd0KHQpe3QuZD1uZXcgYVd0KHQpLHQuZT1uZXcgQXJ9ZnVuY3Rpb24gc1d0KHQpe2lmKCF0KXRocm93IG50KG5ldyBzaCl9ZnVuY3Rpb24gSTJ0KHQpe2lmKCF0KXRocm93IG50KG5ldyB1TSl9ZnVuY3Rpb24gUG0odCl7aWYoIXQpdGhyb3cgbnQobmV3IFJ1KX1mdW5jdGlvbiBpUWUodCl7aWYoIXQpdGhyb3cgbnQobmV3IEd0dCl9ZnVuY3Rpb24gWm4odCl7aWYoIXQpdGhyb3cgbnQobmV3IHZjKX1mdW5jdGlvbiBhV3QodCl7RXZ0LmNhbGwodGhpcyx0LG51bGwsbnVsbCl9ZnVuY3Rpb24gb1d0KCl7S3IuY2FsbCh0aGlzLCJQT0xZT01JTk8iLDApfWZ1bmN0aW9uIGNXdCh0LGUsbixyKXtRdnQuY2FsbCh0aGlzLHQsZSxuLHIpfWZ1bmN0aW9uIHNRZSh0LGUpe3JldHVybiB0YigpLGNuKHQsZS5lLGUpfWZ1bmN0aW9uIGFRZSh0LGUsbil7cmV0dXJuIElSKCksbi5xZyh0LGUpfWZ1bmN0aW9uIGVhKHQsZSl7cmV0dXJuISF0LnEmJk1sKHQucSxlKX1mdW5jdGlvbiBvUWUodCxlKXtyZXR1cm4gdD4wP2UqZS90OmUqZSoxMDB9ZnVuY3Rpb24gY1FlKHQsZSl7cmV0dXJuIHQ+MD9lLyh0KnQpOmUqMTAwfWZ1bmN0aW9uIHVRZSh0LGUsbil7cmV0dXJuIHVlKGUsZWllKHQsbikpfWZ1bmN0aW9uIGxRZSh0LGUsbil7TyQoKSx0LlhlKGUpJiZuLnRkKHQpfWZ1bmN0aW9uIHU4KHQsZSxuKXt2YXIgcjtyPXQuWmMoZSksci5SYihuKX1mdW5jdGlvbiBGbSh0LGUsbil7cmV0dXJuIHQuYSs9ZSx0LmIrPW4sdH1mdW5jdGlvbiBoUWUodCxlLG4pe3JldHVybiB0LmEqPWUsdC5iKj1uLHR9ZnVuY3Rpb24gQk0odCxlLG4pe3JldHVybiB0LmEtPWUsdC5iLT1uLHR9ZnVuY3Rpb24gTzJ0KHQsZSl7cmV0dXJuIHQuYT1lLmEsdC5iPWUuYix0fWZ1bmN0aW9uIG1qKHQpe3JldHVybiB0LmE9LXQuYSx0LmI9LXQuYix0fWZ1bmN0aW9uIHVXdCh0KXt0aGlzLmM9dCx0aGlzLmE9MSx0aGlzLmI9MX1mdW5jdGlvbiBsV3QodCl7dGhpcy5jPXQsQ3UodCwwKSxTdSh0LDApfWZ1bmN0aW9uIGhXdCh0KXtjcy5jYWxsKHRoaXMpLHpfKHRoaXMsdCl9ZnVuY3Rpb24gZld0KHQpe09hdCgpLEJ6dCh0aGlzKSx0aGlzLm1mKHQpfWZ1bmN0aW9uIGRXdCh0LGUpe0dUKCksTk0uY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gTjJ0KHQsZSl7U2coKSxiai5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBnV3QodCxlKXtTZygpLGJqLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHBXdCh0LGUpe1NnKCksTjJ0LmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIEFsKHQsZSxuKXtJbC5jYWxsKHRoaXMsdCxlLG4sMil9ZnVuY3Rpb24gdW50KHQsZSl7YWgoKSxQai5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBiV3QodCxlKXthaCgpLHVudC5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBQMnQodCxlKXthaCgpLHVudC5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiB2V3QodCxlKXthaCgpLFAydC5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBGMnQodCxlKXthaCgpLFBqLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHdXdCh0LGUpe2FoKCksRjJ0LmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIG1XdCh0LGUpe2FoKCksUGouY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gZlFlKHQsZSl7cmV0dXJuIHQuYy5GYyh1KGUsMTMzKSl9ZnVuY3Rpb24gQjJ0KHQsZSxuKXtyZXR1cm4gRXEobUQodCxlKSxuKX1mdW5jdGlvbiBkUWUodCxlLG4pe3JldHVybiBlLlFrKHQuZSx0LmMsbil9ZnVuY3Rpb24gZ1FlKHQsZSxuKXtyZXR1cm4gZS5Sayh0LmUsdC5jLG4pfWZ1bmN0aW9uIGxudCh0LGUpe3JldHVybiBYcCh0LmUsdShlLDQ5KSl9ZnVuY3Rpb24gcFFlKHQsZSxuKXtKXyhmbCh0LmEpLGUsTVF0KG4pKX1mdW5jdGlvbiBiUWUodCxlLG4pe0pfKE9jKHQuYSksZSxMUXQobikpfWZ1bmN0aW9uIFIydCh0LGUpe2UuJG1vZENvdW50PXQuJG1vZENvdW50fWZ1bmN0aW9uIGJfKCl7Yl89WCwkUz1uZXcgdHMoInJvb3QiKX1mdW5jdGlvbiBsOCgpe2w4PVgsbE49bmV3IHBxdCxuZXcgYnF0fWZ1bmN0aW9uIHlXdCgpe3RoaXMuYT1uZXcgSHYsdGhpcy5iPW5ldyBIdn1mdW5jdGlvbiBqMnQoKXtqZWUuY2FsbCh0aGlzKSx0aGlzLkJifD1RYX1mdW5jdGlvbiB4V3QoKXtLci5jYWxsKHRoaXMsIkdST1dfVFJFRSIsMCl9ZnVuY3Rpb24gdlFlKHQpe3JldHVybiB0PT1udWxsP251bGw6UDRuKHQpfWZ1bmN0aW9uIHdRZSh0KXtyZXR1cm4gdD09bnVsbD9udWxsOkgwbih0KX1mdW5jdGlvbiBtUWUodCl7cmV0dXJuIHQ9PW51bGw/bnVsbDpXbyh0KX1mdW5jdGlvbiB5UWUodCl7cmV0dXJuIHQ9PW51bGw/bnVsbDpXbyh0KX1mdW5jdGlvbiBMMCh0KXt0Lm89PW51bGwmJnZibih0KX1mdW5jdGlvbiBGZSh0KXtyZXR1cm4gbV8odD09bnVsbHx8T20odCkpLHR9ZnVuY3Rpb24gdmUodCl7cmV0dXJuIG1fKHQ9PW51bGx8fE5tKHQpKSx0fWZ1bmN0aW9uIGpyKHQpe3JldHVybiBtXyh0PT1udWxsfHxoYSh0KSksdH1mdW5jdGlvbiAkMnQodCl7dGhpcy5xPW5ldyBiLkRhdGUoR3YodCkpfWZ1bmN0aW9uIFJNKHQsZSl7dGhpcy5jPXQsdDguY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24geWoodCxlKXt0aGlzLmE9dCxSTS5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiB4UWUodCxlKXt0aGlzLmQ9dCxJdHQodGhpcyksdGhpcy5iPWV9ZnVuY3Rpb24gejJ0KHQsZSl7enJ0LmNhbGwodGhpcyx0KSx0aGlzLmE9ZX1mdW5jdGlvbiBxMnQodCxlKXt6cnQuY2FsbCh0aGlzLHQpLHRoaXMuYT1lfWZ1bmN0aW9uIGtRZSh0KXtwM3QuY2FsbCh0aGlzLDAsMCksdGhpcy5mPXR9ZnVuY3Rpb24gSDJ0KHQsZSxuKXtEJC5jYWxsKHRoaXMsdCxlLG4sbnVsbCl9ZnVuY3Rpb24ga1d0KHQsZSxuKXtEJC5jYWxsKHRoaXMsdCxlLG4sbnVsbCl9ZnVuY3Rpb24gRVFlKHQsZSxuKXtyZXR1cm4gdC51ZShlLG4pPD0wP246ZX1mdW5jdGlvbiBUUWUodCxlLG4pe3JldHVybiB0LnVlKGUsbik8PTA/ZTpufWZ1bmN0aW9uIF9RZSh0LGUpe3JldHVybiB1KFd2KHQuYixlKSwxNDkpfWZ1bmN0aW9uIENRZSh0LGUpe3JldHVybiB1KFd2KHQuYyxlKSwyMjkpfWZ1bmN0aW9uIGhudCh0KXtyZXR1cm4gdShQZSh0LmEsdC5iKSwyODcpfWZ1bmN0aW9uIEVXdCh0KXtyZXR1cm4gbmV3IFJlKHQuYyx0LmQrdC5hKX1mdW5jdGlvbiBUV3QodCl7cmV0dXJuIFJsKCksb1V0KHUodCwxOTcpKX1mdW5jdGlvbiBCbSgpe0JtPVgsUTd0PW9uKChObCgpLFcyKSl9ZnVuY3Rpb24gU1FlKHQsZSl7ZS5hP2Z2bih0LGUpOnJudCh0LmEsZS5iKX1mdW5jdGlvbiBfV3QodCxlKXt6MXx8dWUodC5hLGUpfWZ1bmN0aW9uIEFRZSh0LGUpe3JldHVybiB2TSgpLEg4KGUuZC5pLHQpfWZ1bmN0aW9uIExRZSh0LGUpe3JldHVybiBZNigpLG5ldyBTdWUoZSx0KX1mdW5jdGlvbiBoZCh0LGUpe3JldHVybiB0RChlLFU2dCksdC5mPWUsdH1mdW5jdGlvbiBWMnQodCxlLG4pe3JldHVybiBuPVVsKHQsZSwzLG4pLG59ZnVuY3Rpb24gRzJ0KHQsZSxuKXtyZXR1cm4gbj1VbCh0LGUsNixuKSxufWZ1bmN0aW9uIFUydCh0LGUsbil7cmV0dXJuIG49VWwodCxlLDksbiksbn1mdW5jdGlvbiBqTSh0LGUsbil7Kyt0LmosdC5LaSgpLGpydCh0LGUsbil9ZnVuY3Rpb24gQ1d0KHQsZSxuKXsrK3Quaix0LkhpKGUsdC5vaShlLG4pKX1mdW5jdGlvbiBTV3QodCxlLG4pe3ZhciByO3I9dC5aYyhlKSxyLlJiKG4pfWZ1bmN0aW9uIEFXdCh0LGUsbil7cmV0dXJuIGE2dCh0LmMsdC5iLGUsbil9ZnVuY3Rpb24gVzJ0KHQsZSl7cmV0dXJuKGUmVGkpJXQuZC5sZW5ndGh9ZnVuY3Rpb24gSHModCxlKXt0cy5jYWxsKHRoaXMsdCksdGhpcy5hPWV9ZnVuY3Rpb24gSzJ0KHQsZSl7cHB0LmNhbGwodGhpcyx0KSx0aGlzLmE9ZX1mdW5jdGlvbiBmbnQodCxlKXtwcHQuY2FsbCh0aGlzLHQpLHRoaXMuYT1lfWZ1bmN0aW9uIExXdCh0LGUpe3RoaXMuYz10LEt2LmNhbGwodGhpcyxlKX1mdW5jdGlvbiBNV3QodCxlKXt0aGlzLmE9dCxEenQuY2FsbCh0aGlzLGUpfWZ1bmN0aW9uICRNKHQsZSl7dGhpcy5hPXQsRHp0LmNhbGwodGhpcyxlKX1mdW5jdGlvbiBEV3QodCl7dGhpcy5hPShxbCh0LG15KSxuZXcgSmModCkpfWZ1bmN0aW9uIElXdCh0KXt0aGlzLmE9KHFsKHQsbXkpLG5ldyBKYyh0KSl9ZnVuY3Rpb24gek0odCl7cmV0dXJuIXQuYSYmKHQuYT1uZXcgaXQpLHQuYX1mdW5jdGlvbiBPV3QodCl7cmV0dXJuIHQ+OD8wOnQrMX1mdW5jdGlvbiBNUWUodCxlKXtyZXR1cm4gRm4oKSx0PT1lPzA6dD8xOi0xfWZ1bmN0aW9uIFkydCh0LGUsbil7cmV0dXJuIE82KHQsdShlLDIyKSxuKX1mdW5jdGlvbiBEUWUodCxlLG4pe3JldHVybiB0LmFwcGx5KGUsbil9ZnVuY3Rpb24gTld0KHQsZSxuKXtyZXR1cm4gdC5hKz1JaChlLDAsbiksdH1mdW5jdGlvbiBYMnQodCxlKXt2YXIgbjtyZXR1cm4gbj10LmUsdC5lPWUsbn1mdW5jdGlvbiBJUWUodCxlKXt2YXIgbjtuPXRbZG90XSxuLmNhbGwodCxlKX1mdW5jdGlvbiBPUWUodCxlKXt2YXIgbjtuPXRbZG90XSxuLmNhbGwodCxlKX1mdW5jdGlvbiBSbSh0LGUpe3QuYS5WYyh0LmIsZSksKyt0LmIsdC5jPS0xfWZ1bmN0aW9uIFBXdCh0KXtubCh0LmUpLHQuZC5iPXQuZCx0LmQuYT10LmR9ZnVuY3Rpb24gcU0odCl7dC5iP3FNKHQuYik6dC5mLmMuemModC5lLHQuZCl9ZnVuY3Rpb24gTlFlKHQsZSxuKXtZYigpLG10dCh0LGUuQ2UodC5hLG4pKX1mdW5jdGlvbiBQUWUodCxlKXtyZXR1cm4gaGV0KHZpZSh0LmEsZSwhMCkpfWZ1bmN0aW9uIEZRZSh0LGUpe3JldHVybiBoZXQod2llKHQuYSxlLCEwKSl9ZnVuY3Rpb24gZmYodCxlKXtyZXR1cm4gd1IobmV3IEFycmF5KGUpLHQpfWZ1bmN0aW9uIGRudCh0KXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh0KX1mdW5jdGlvbiBCUWUodCl7cmV0dXJuIHQ9PW51bGw/bnVsbDp0Lm1lc3NhZ2V9ZnVuY3Rpb24gRld0KCl7dGhpcy5hPW5ldyBsZSx0aGlzLmI9bmV3IGxlfWZ1bmN0aW9uIEJXdCgpe3RoaXMuYT1uZXcgQTksdGhpcy5iPW5ldyBVenR9ZnVuY3Rpb24gUld0KCl7dGhpcy5iPW5ldyBEYSx0aGlzLmM9bmV3IGxlfWZ1bmN0aW9uIFEydCgpe3RoaXMuZD1uZXcgRGEsdGhpcy5lPW5ldyBEYX1mdW5jdGlvbiBaMnQoKXt0aGlzLm49bmV3IERhLHRoaXMubz1uZXcgRGF9ZnVuY3Rpb24geGooKXt0aGlzLm49bmV3IHY2LHRoaXMuaT1uZXcgUzZ9ZnVuY3Rpb24gald0KCl7dGhpcy5hPW5ldyB6Six0aGlzLmI9bmV3IEhYfWZ1bmN0aW9uICRXdCgpe3RoaXMuYT1uZXcgbGUsdGhpcy5kPW5ldyBsZX1mdW5jdGlvbiB6V3QoKXt0aGlzLmI9bmV3IFFzLHRoaXMuYT1uZXcgUXN9ZnVuY3Rpb24gcVd0KCl7dGhpcy5iPW5ldyBBcix0aGlzLmE9bmV3IEFyfWZ1bmN0aW9uIEhXdCgpe3RoaXMuYj1uZXcgRUh0LHRoaXMuYT1uZXcgRlF9ZnVuY3Rpb24gVld0KCl7eGouY2FsbCh0aGlzKSx0aGlzLmE9bmV3IERhfWZ1bmN0aW9uIHZfKHQpe2Njbi5jYWxsKHRoaXMsdCwoUCQoKSxNdXQpKX1mdW5jdGlvbiBKMnQodCxlLG4scil7RmouY2FsbCh0aGlzLHQsZSxuLHIpfWZ1bmN0aW9uIFJRZSh0LGUsbil7biE9bnVsbCYmWiQoZSxic3QodCxuKSl9ZnVuY3Rpb24galFlKHQsZSxuKXtuIT1udWxsJiZKJChlLGJzdCh0LG4pKX1mdW5jdGlvbiB0dnQodCxlLG4pe3JldHVybiBuPVVsKHQsZSwxMSxuKSxufWZ1bmN0aW9uIEZpKHQsZSl7cmV0dXJuIHQuYSs9ZS5hLHQuYis9ZS5iLHR9ZnVuY3Rpb24gZmEodCxlKXtyZXR1cm4gdC5hLT1lLmEsdC5iLT1lLmIsdH1mdW5jdGlvbiAkUWUodCxlKXtyZXR1cm4gdC5uLmE9KEluKGUpLGUrMTApfWZ1bmN0aW9uIHpRZSh0LGUpe3JldHVybiB0Lm4uYT0oSW4oZSksZSsxMCl9ZnVuY3Rpb24gcVFlKHQsZSl7cmV0dXJuIGU9PXR8fGw3KGNxKGUpLHQpfWZ1bmN0aW9uIEdXdCh0LGUpe3JldHVybiBBaSh0LmEsZSwiIik9PW51bGx9ZnVuY3Rpb24gSFFlKHQsZSl7cmV0dXJuIHZNKCksIUg4KGUuZC5pLHQpfWZ1bmN0aW9uIFZRZSh0LGUpe1BwKHQuZik/b2JuKHQsZSk6R2RuKHQsZSl9ZnVuY3Rpb24gR1FlKHQsZSl7dmFyIG47cmV0dXJuIG49ZS5IaCh0LmEpLG59ZnVuY3Rpb24gam0odCxlKXtDby5jYWxsKHRoaXMsWEMrdCtMMitlKX1mdW5jdGlvbiBNNih0LGUsbixyKXtoZS5jYWxsKHRoaXMsdCxlLG4scil9ZnVuY3Rpb24gZXZ0KHQsZSxuLHIpe2hlLmNhbGwodGhpcyx0LGUsbixyKX1mdW5jdGlvbiBVV3QodCxlLG4scil7ZXZ0LmNhbGwodGhpcyx0LGUsbixyKX1mdW5jdGlvbiBXV3QodCxlLG4scil7VWouY2FsbCh0aGlzLHQsZSxuLHIpfWZ1bmN0aW9uIGdudCh0LGUsbixyKXtVai5jYWxsKHRoaXMsdCxlLG4scil9ZnVuY3Rpb24gbnZ0KHQsZSxuLHIpe1VqLmNhbGwodGhpcyx0LGUsbixyKX1mdW5jdGlvbiBLV3QodCxlLG4scil7Z250LmNhbGwodGhpcyx0LGUsbixyKX1mdW5jdGlvbiBydnQodCxlLG4scil7Z250LmNhbGwodGhpcyx0LGUsbixyKX1mdW5jdGlvbiBFbih0LGUsbixyKXtudnQuY2FsbCh0aGlzLHQsZSxuLHIpfWZ1bmN0aW9uIFlXdCh0LGUsbixyKXtydnQuY2FsbCh0aGlzLHQsZSxuLHIpfWZ1bmN0aW9uIFhXdCh0LGUsbixyKXtld3QuY2FsbCh0aGlzLHQsZSxuLHIpfWZ1bmN0aW9uIFFXdCh0LGUsbil7dGhpcy5hPXQsTDJ0LmNhbGwodGhpcyxlLG4pfWZ1bmN0aW9uIFpXdCh0LGUsbil7dGhpcy5jPWUsdGhpcy5iPW4sdGhpcy5hPXR9ZnVuY3Rpb24gVVFlKHQsZSxuKXtyZXR1cm4gdC5kPXUoZS5LYihuKSwxNjQpfWZ1bmN0aW9uIGl2dCh0LGUpe3JldHVybiB0LkFqKCkuTmgoKS5LaCh0LGUpfWZ1bmN0aW9uIHN2dCh0LGUpe3JldHVybiB0LkFqKCkuTmgoKS5JaCh0LGUpfWZ1bmN0aW9uIEpXdCh0LGUpe3JldHVybiBJbih0KSxHdCh0KT09PUd0KGUpfWZ1bmN0aW9uIHVuKHQsZSl7cmV0dXJuIEluKHQpLEd0KHQpPT09R3QoZSl9ZnVuY3Rpb24gcG50KHQsZSl7cmV0dXJuIGhldCh2aWUodC5hLGUsITEpKX1mdW5jdGlvbiBibnQodCxlKXtyZXR1cm4gaGV0KHdpZSh0LmEsZSwhMSkpfWZ1bmN0aW9uIFdRZSh0LGUpe3JldHVybiB0LmIuc2QobmV3IElWdCh0LGUpKX1mdW5jdGlvbiBLUWUodCxlKXtyZXR1cm4gdC5iLnNkKG5ldyBPVnQodCxlKSl9ZnVuY3Rpb24gdEt0KHQsZSl7cmV0dXJuIHQuYi5zZChuZXcgTlZ0KHQsZSkpfWZ1bmN0aW9uIGF2dCh0LGUsbil7cmV0dXJuIHQubGFzdEluZGV4T2YoZSxuKX1mdW5jdGlvbiBZUWUodCxlLG4pe3JldHVybiBqcyh0W2UuYl0sdFtuLmJdKX1mdW5jdGlvbiBYUWUodCxlKXtyZXR1cm4gZWUoZSwoeGUoKSxDTyksdCl9ZnVuY3Rpb24gUVFlKHQsZSl7cmV0dXJuIG11KGUuYS5kLnAsdC5hLmQucCl9ZnVuY3Rpb24gWlFlKHQsZSl7cmV0dXJuIG11KHQuYS5kLnAsZS5hLmQucCl9ZnVuY3Rpb24gSlFlKHQsZSl7cmV0dXJuIGpzKHQuYy10LnMsZS5jLWUucyl9ZnVuY3Rpb24gZUt0KHQpe3JldHVybiB0LmM/R28odC5jLmEsdCwwKTotMX1mdW5jdGlvbiB0WmUodCl7cmV0dXJuIHQ8MTAwP251bGw6bmV3IExwKHQpfWZ1bmN0aW9uIEQ2KHQpe3JldHVybiB0PT1VMnx8dD09aDB8fHQ9PUtjfWZ1bmN0aW9uIG5LdCh0LGUpe3JldHVybiBfdChlLDE1KSYmY3VlKHQuYyxlKX1mdW5jdGlvbiBlWmUodCxlKXt6MXx8ZSYmKHQuZD1lKX1mdW5jdGlvbiB2bnQodCxlKXt2YXIgbjtyZXR1cm4gbj1lLCEhTHl0KHQsbil9ZnVuY3Rpb24gb3Z0KHQsZSl7dGhpcy5jPXQsVm50LmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHJLdCh0KXt0aGlzLmM9dCxVZXQuY2FsbCh0aGlzLERxLDApfWZ1bmN0aW9uIGlLdCh0LGUpe2F0bi5jYWxsKHRoaXMsdCx0Lmxlbmd0aCxlKX1mdW5jdGlvbiBuWmUodCxlLG4pe3JldHVybiB1KHQuYyw2OSkubGsoZSxuKX1mdW5jdGlvbiBraih0LGUsbil7cmV0dXJuIHUodC5jLDY5KS5tayhlLG4pfWZ1bmN0aW9uIHJaZSh0LGUsbil7cmV0dXJuIGRRZSh0LHUoZSwzMzIpLG4pfWZ1bmN0aW9uIGN2dCh0LGUsbil7cmV0dXJuIGdRZSh0LHUoZSwzMzIpLG4pfWZ1bmN0aW9uIGlaZSh0LGUsbil7cmV0dXJuIG5hZSh0LHUoZSwzMzIpLG4pfWZ1bmN0aW9uIHNLdCh0LGUsbil7cmV0dXJuIG4wbih0LHUoZSwzMzIpLG4pfWZ1bmN0aW9uIHdfKHQsZSl7cmV0dXJuIGU9PW51bGw/bnVsbDpueSh0LmIsZSl9ZnVuY3Rpb24gdXZ0KHQpe3JldHVybiBObSh0KT8oSW4odCksdCk6dC5rZSgpfWZ1bmN0aW9uIEVqKHQpe3JldHVybiFpc05hTih0KSYmIWlzRmluaXRlKHQpfWZ1bmN0aW9uIGFLdCh0KXtmZCgpLHRoaXMuYT0ocG4oKSxuZXcgWWsodCkpfWZ1bmN0aW9uIEhNKHQpe2Y4KCksdGhpcy5kPXQsdGhpcy5hPW5ldyBGM31mdW5jdGlvbiBvaCh0LGUsbil7dGhpcy5hPXQsdGhpcy5iPWUsdGhpcy5jPW59ZnVuY3Rpb24gb0t0KHQsZSxuKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmM9bn1mdW5jdGlvbiBjS3QodCxlLG4pe3RoaXMuZD10LHRoaXMuYj1uLHRoaXMuYT1lfWZ1bmN0aW9uIHdudCh0KXt4VXQodGhpcyksTWgodGhpcyksS2EodGhpcyx0KX1mdW5jdGlvbiBxdSh0KXtRZXQodGhpcyksVHZ0KHRoaXMuYywwLHQuUGMoKSl9ZnVuY3Rpb24gdUt0KHQpe0RsKHQuYSksYXRlKHQuYyx0LmIpLHQuYj1udWxsfWZ1bmN0aW9uIGxLdCh0KXt0aGlzLmE9dCxxZCgpLEF1KERhdGUubm93KCkpfWZ1bmN0aW9uIGhLdCgpe2hLdD1YLEE3dD1uZXcgQyxZSD1uZXcgQ31mdW5jdGlvbiBtbnQoKXttbnQ9WCxtN3Q9bmV3IHZ0LExnZT1uZXcgT3R9ZnVuY3Rpb24gZkt0KCl7Zkt0PVgsQjRlPU50KFFuLE1lLDEsMCw1LDEpfWZ1bmN0aW9uIGRLdCgpe2RLdD1YLGU1ZT1OdChRbixNZSwxLDAsNSwxKX1mdW5jdGlvbiBsdnQoKXtsdnQ9WCxuNWU9TnQoUW4sTWUsMSwwLDUsMSl9ZnVuY3Rpb24gZmQoKXtmZD1YLG5ldyB3cHQoKHBuKCkscG4oKSx1bykpfWZ1bmN0aW9uIHNaZSh0KXtyZXR1cm4gUCQoKSxYcigodnRlKCksSWdlKSx0KX1mdW5jdGlvbiBhWmUodCl7cmV0dXJuIE4xKCksWHIoKEZKdCgpLFJnZSksdCl9ZnVuY3Rpb24gb1plKHQpe3JldHVybiBOeigpLFhyKChIWnQoKSxWZ2UpLHQpfWZ1bmN0aW9uIGNaZSh0KXtyZXR1cm4gJCQoKSxYcigoVlp0KCksR2dlKSx0KX1mdW5jdGlvbiB1WmUodCl7cmV0dXJuIGdxKCksWHIoKE1uZSgpLFVnZSksdCl9ZnVuY3Rpb24gbFplKHQpe3JldHVybiBaZigpLFhyKChPSnQoKSxZZ2UpLHQpfWZ1bmN0aW9uIGhaZSh0KXtyZXR1cm4gcmwoKSxYcigoTkp0KCksUWdlKSx0KX1mdW5jdGlvbiBmWmUodCl7cmV0dXJuIFR1KCksWHIoKFBKdCgpLEpnZSksdCl9ZnVuY3Rpb24gZFplKHQpe3JldHVybiBMcSgpLFhyKChVR3QoKSxrcGUpLHQpfWZ1bmN0aW9uIGdaZSh0KXtyZXR1cm4gdHcoKSxYcigobXRlKCksVHBlKSx0KX1mdW5jdGlvbiBwWmUodCl7cmV0dXJuIGV4KCksWHIoKHl0ZSgpLENwZSksdCl9ZnVuY3Rpb24gYlplKHQpe3JldHVybiBzQygpLFhyKCh4dGUoKSxMcGUpLHQpfWZ1bmN0aW9uIHZaZSh0KXtyZXR1cm4gQVIoKSxYcigoeFp0KCksTXBlKSx0KX1mdW5jdGlvbiB3WmUodCl7cmV0dXJuIHokKCksWHIoKEdadCgpLFdwZSksdCl9ZnVuY3Rpb24gbVplKHQpe3JldHVybiBqXygpLFhyKChCSnQoKSxnYmUpLHQpfWZ1bmN0aW9uIHlaZSh0KXtyZXR1cm4gWWEoKSxYcigoUXRlKCksd2JlKSx0KX1mdW5jdGlvbiB4WmUodCl7cmV0dXJuIFU4KCksWHIoKHd0ZSgpLEViZSksdCl9ZnVuY3Rpb24ga1plKHQpe3JldHVybiBldygpLFhyKChSSnQoKSxMYmUpLHQpfWZ1bmN0aW9uIGh2dCh0LGUpe2lmKCF0KXRocm93IG50KG5ldyBQbihlKSl9ZnVuY3Rpb24gRVplKHQpe3JldHVybiBHbigpLFhyKCh3ZWUoKSxPYmUpLHQpfWZ1bmN0aW9uIGZ2dCh0KXtGai5jYWxsKHRoaXMsdC5kLHQuYyx0LmEsdC5iKX1mdW5jdGlvbiB5bnQodCl7RmouY2FsbCh0aGlzLHQuZCx0LmMsdC5hLHQuYil9ZnVuY3Rpb24gZHZ0KHQsZSxuKXt0aGlzLmI9dCx0aGlzLmM9ZSx0aGlzLmE9bn1mdW5jdGlvbiBUaih0LGUsbil7dGhpcy5iPXQsdGhpcy5hPWUsdGhpcy5jPW59ZnVuY3Rpb24gZ0t0KHQsZSxuKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmM9bn1mdW5jdGlvbiBndnQodCxlLG4pe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuYz1ufWZ1bmN0aW9uIHBLdCh0LGUsbil7dGhpcy5hPXQsdGhpcy5iPWUsdGhpcy5jPW59ZnVuY3Rpb24gcHZ0KHQsZSxuKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmM9bn1mdW5jdGlvbiBiS3QodCxlLG4pe3RoaXMuYj10LHRoaXMuYT1lLHRoaXMuYz1ufWZ1bmN0aW9uIF9qKHQsZSxuKXt0aGlzLmU9ZSx0aGlzLmI9dCx0aGlzLmQ9bn1mdW5jdGlvbiBUWmUodCxlLG4pe3JldHVybiBZYigpLHQuYS5PZChlLG4pLGV9ZnVuY3Rpb24geG50KHQpe3ZhciBlO3JldHVybiBlPW5ldyBFcixlLmU9dCxlfWZ1bmN0aW9uIGJ2dCh0KXt2YXIgZTtyZXR1cm4gZT1uZXcgSnp0LGUuYj10LGV9ZnVuY3Rpb24gVk0oKXtWTT1YLGNWPW5ldyBBWSx1Vj1uZXcgTFl9ZnVuY3Rpb24gZGYoKXtkZj1YLFdiZT1uZXcgd1gsS2JlPW5ldyB5Rn1mdW5jdGlvbiBfWmUodCl7cmV0dXJuIGR6KCksWHIoKEV0ZSgpLHFiZSksdCl9ZnVuY3Rpb24gQ1plKHQpe3JldHVybiBPMSgpLFhyKChfdGUoKSxRYmUpLHQpfWZ1bmN0aW9uIFNaZSh0KXtyZXR1cm4gZnEoKSxYcigobW5lKCksczJlKSx0KX1mdW5jdGlvbiBBWmUodCl7cmV0dXJuIHJ4KCksWHIoKHhlZSgpLGEyZSksdCl9ZnVuY3Rpb24gTFplKHQpe3JldHVybiBJJCgpLFhyKChRWnQoKSxvMmUpLHQpfWZ1bmN0aW9uIE1aZSh0KXtyZXR1cm4gSzYoKSxYcigoakp0KCksYzJlKSx0KX1mdW5jdGlvbiBEWmUodCl7cmV0dXJuIHA0KCksWHIoKFV0ZSgpLEpiZSksdCl9ZnVuY3Rpb24gSVplKHQpe3JldHVybiBKdigpLFhyKChxSnQoKSxpMmUpLHQpfWZ1bmN0aW9uIE9aZSh0KXtyZXR1cm4gWCQoKSxYcigoJEp0KCksdTJlKSx0KX1mdW5jdGlvbiBOWmUodCl7cmV0dXJuIG0yKCksWHIoKFZ0ZSgpLGwyZSksdCl9ZnVuY3Rpb24gUFplKHQpe3JldHVybiBURCgpLFhyKChXWnQoKSxoMmUpLHQpfWZ1bmN0aW9uIEZaZSh0KXtyZXR1cm4gaDIoKSxYcigoekp0KCksZDJlKSx0KX1mdW5jdGlvbiBCWmUodCl7cmV0dXJuIG5xKCksWHIoKF9lZSgpLGcyZSksdCl9ZnVuY3Rpb24gUlplKHQpe3JldHVybiBiRCgpLFhyKChLWnQoKSxwMmUpLHQpfWZ1bmN0aW9uIGpaZSh0KXtyZXR1cm4gbkkoKSxYcigoRWVlKCksYjJlKSx0KX1mdW5jdGlvbiAkWmUodCl7cmV0dXJuIGY3KCksWHIoKGtlZSgpLHYyZSksdCl9ZnVuY3Rpb24gelplKHQpe3JldHVybiBnbygpLFhyKChHbmUoKSx3MmUpLHQpfWZ1bmN0aW9uIHFaZSh0KXtyZXR1cm4gRzgoKSxYcigoVkp0KCksbTJlKSx0KX1mdW5jdGlvbiBIWmUodCl7cmV0dXJuIEIwKCksWHIoKEhKdCgpLHgyZSksdCl9ZnVuY3Rpb24gVlplKHQpe3JldHVybiB4JCgpLFhyKChaWnQoKSxrMmUpLHQpfWZ1bmN0aW9uIEdaZSh0KXtyZXR1cm4gcGgoKSxYcigoV3RlKCksRTJlKSx0KX1mdW5jdGlvbiBVWmUodCl7cmV0dXJuIFp6KCksWHIoKFRlZSgpLFJ3ZSksdCl9ZnVuY3Rpb24gV1plKHQpe3JldHVybiBZXygpLFhyKChHSnQoKSxqd2UpLHQpfWZ1bmN0aW9uIEtaZSh0KXtyZXR1cm4gc3koKSxYcigoQ3RlKCksJHdlKSx0KX1mdW5jdGlvbiBZWmUodCl7cmV0dXJuIGhvKCksWHIoKEtKdCgpLFV3ZSksdCl9ZnVuY3Rpb24gWFplKHQpe3JldHVybiBtNCgpLFhyKCh3bmUoKSxxd2UpLHQpfWZ1bmN0aW9uIFFaZSh0KXtyZXR1cm4gajAoKSxYcigoV0p0KCksSHdlKSx0KX1mdW5jdGlvbiBaWmUodCl7cmV0dXJuIHlEKCksWHIoKFhadCgpLFZ3ZSksdCl9ZnVuY3Rpb24gSlplKHQpe3JldHVybiB1eigpLFhyKChVSnQoKSxXd2UpLHQpfWZ1bmN0aW9uIHRKZSh0KXtyZXR1cm4gYUMoKSxYcigoR3RlKCksendlKSx0KX1mdW5jdGlvbiBlSmUodCl7cmV0dXJuIGxEKCksWHIoKFladCgpLEt3ZSksdCl9ZnVuY3Rpb24gbkplKHQpe3JldHVybiBaOCgpLFhyKChYSnQoKSxZd2UpLHQpfWZ1bmN0aW9uIHJKZSh0KXtyZXR1cm4gb3ooKSxYcigoUUp0KCksWHdlKSx0KX1mdW5jdGlvbiBpSmUodCl7cmV0dXJuIGd6KCksWHIoKFlKdCgpLFF3ZSksdCl9ZnVuY3Rpb24gc0plKHQpe3JldHVybiBadigpLFhyKChaSnQoKSxsbWUpLHQpfWZ1bmN0aW9uIGFKZSh0KXtyZXR1cm4gQl8oKSxYcigodEp0KCkscG1lKSx0KX1mdW5jdGlvbiBvSmUodCl7cmV0dXJuIGdkKCksWHIoKGVKdCgpLGttZSksdCl9ZnVuY3Rpb24gY0plKHQpe3JldHVybiBDMSgpLFhyKChuSnQoKSxUbWUpLHQpfWZ1bmN0aW9uIHVKZSh0KXtyZXR1cm4gWWYoKSxYcigoSlp0KCksam1lKSx0KX1mdW5jdGlvbiBsSmUodCl7cmV0dXJuIHF2KCksWHIoKHJKdCgpLFVtZSksdCl9ZnVuY3Rpb24gaEplKHQpe3JldHVybiBvNygpLFhyKChrdGUoKSxXbWUpLHQpfWZ1bmN0aW9uIGZKZSh0KXtyZXR1cm4gZkMoKSxYcigoQ2VlKCksWW1lKSx0KX1mdW5jdGlvbiBkSmUodCl7cmV0dXJuIGQkKCksWHIoKGFKdCgpLHV5ZSksdCl9ZnVuY3Rpb24gZ0plKHQpe3JldHVybiBpeigpLFhyKChzSnQoKSxweWUpLHQpfWZ1bmN0aW9uIHBKZSh0KXtyZXR1cm4gdiQoKSxYcigoaUp0KCksbHllKSx0KX1mdW5jdGlvbiBiSmUodCl7cmV0dXJuIF96KCksWHIoKEpKdCgpLHZ5ZSksdCl9ZnVuY3Rpb24gdkplKHQpe3JldHVybiBOJCgpLFhyKChvSnQoKSx3eWUpLHQpfWZ1bmN0aW9uIHdKZSh0KXtyZXR1cm4gUkQoKSxYcigodHRlKCksbXllKSx0KX1mdW5jdGlvbiBtSmUodCl7cmV0dXJuIFZ6KCksWHIoKFR0ZSgpLE55ZSksdCl9ZnVuY3Rpb24geUplKHQpe3JldHVybiBjeigpLFhyKChudGUoKSxQeWUpLHQpfWZ1bmN0aW9uIHhKZSh0KXtyZXR1cm4gVHooKSxYcigoZXRlKCksRnllKSx0KX1mdW5jdGlvbiBrSmUodCl7cmV0dXJuIHc3KCksWHIoKFh0ZSgpLG4zZSksdCl9ZnVuY3Rpb24gRUplKHQpe3JldHVybiBWRCgpLFhyKChydGUoKSxyM2UpLHQpfWZ1bmN0aW9uIFRKZSh0KXtyZXR1cm4gTVIoKSxYcigobVp0KCksaTNlKSx0KX1mdW5jdGlvbiBfSmUodCl7cmV0dXJuIERSKCksWHIoKHdadCgpLGEzZSksdCl9ZnVuY3Rpb24gQ0plKHQpe3JldHVybiBoRCgpLFhyKCh1SnQoKSxvM2UpLHQpfWZ1bmN0aW9uIFNKZSh0KXtyZXR1cm4gaUkoKSxYcigoS3RlKCksYzNlKSx0KX1mdW5jdGlvbiBBSmUodCl7cmV0dXJuIEhUKCksWHIoKHladCgpLFQzZSksdCl9ZnVuY3Rpb24gTEplKHQpe3JldHVybiBORCgpLFhyKChjSnQoKSxfM2UpLHQpfWZ1bmN0aW9uIE1KZSh0KXtyZXR1cm4gdDEoKSxYcigoWXRlKCksRDNlKSx0KX1mdW5jdGlvbiBESmUodCl7cmV0dXJuIEhnKCksWHIoKHluZSgpLE8zZSksdCl9ZnVuY3Rpb24gSUplKHQpe3JldHVybiBRZCgpLFhyKCh5ZWUoKSxOM2UpLHQpfWZ1bmN0aW9uIE9KZSh0KXtyZXR1cm4gY3koKSxYcigobWVlKCksJDNlKSx0KX1mdW5jdGlvbiBOSmUodCl7cmV0dXJuIGNvKCksWHIoKFdHdCgpLGpiZSksdCl9ZnVuY3Rpb24gUEplKHQpe3JldHVybiAkOCgpLFhyKChVWnQoKSxSYmUpLHQpfWZ1bmN0aW9uIEZKZSh0KXtyZXR1cm4gZm8oKSxYcigoWnRlKCksZTRlKSx0KX1mdW5jdGlvbiBCSmUodCl7cmV0dXJuIEQxKCksWHIoKHN0ZSgpLG40ZSksdCl9ZnVuY3Rpb24gUkplKHQpe3JldHVybiBxMCgpLFhyKChMdGUoKSxyNGUpLHQpfWZ1bmN0aW9uIGpKZSh0KXtyZXR1cm4gdHEoKSxYcigoQWVlKCksaTRlKSx0KX1mdW5jdGlvbiAkSmUodCl7cmV0dXJuICQwKCksWHIoKGl0ZSgpLGE0ZSksdCl9ZnVuY3Rpb24gekplKHQpe3JldHVybiBWbCgpLFhyKChBdGUoKSxjNGUpLHQpfWZ1bmN0aW9uIHFKZSh0KXtyZXR1cm4gZnkoKSxYcigoTG5lKCksdTRlKSx0KX1mdW5jdGlvbiBISmUodCl7cmV0dXJuIHU0KCksWHIoKEp0ZSgpLGw0ZSksdCl9ZnVuY3Rpb24gVkplKHQpe3JldHVybiB2YSgpLFhyKChnZWUoKSxoNGUpLHQpfWZ1bmN0aW9uIEdKZSh0KXtyZXR1cm4gaWwoKSxYcigoU2VlKCksZjRlKSx0KX1mdW5jdGlvbiBVSmUodCl7cmV0dXJuIE5sKCksWHIoKER0ZSgpLHc0ZSksdCl9ZnVuY3Rpb24gV0plKHQpe3JldHVybiBibCgpLFhyKChVbmUoKSxtNGUpLHQpfWZ1bmN0aW9uIEtKZSh0KXtyZXR1cm4gYmUoKSxYcigodGVlKCksZDRlKSx0KX1mdW5jdGlvbiBZSmUodCl7cmV0dXJuIEF6KCksWHIoKE10ZSgpLHk0ZSksdCl9ZnVuY3Rpb24gWEplKHQpe3JldHVybiBPbCgpLFhyKChTdGUoKSxFNGUpLHQpfWZ1bmN0aW9uIFFKZSh0KXtyZXR1cm4gcDcoKSxYcigoeG5lKCksRjRlKSx0KX1mdW5jdGlvbiBaSmUodCxlKXtyZXR1cm4gSW4odCksdCsoSW4oZSksZSl9ZnVuY3Rpb24gSkplKHQsZSl7cmV0dXJuIHFkKCksT3IoS3QodC5hKSxlKX1mdW5jdGlvbiB0dG4odCxlKXtyZXR1cm4gcWQoKSxPcihLdCh0LmEpLGUpfWZ1bmN0aW9uIGtudCh0LGUpe3RoaXMuYz10LHRoaXMuYT1lLHRoaXMuYj1lLXR9ZnVuY3Rpb24gdkt0KHQsZSxuKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmM9bn1mdW5jdGlvbiB2dnQodCxlLG4pe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuYz1ufWZ1bmN0aW9uIHd2dCh0LGUsbil7dGhpcy5hPXQsdGhpcy5iPWUsdGhpcy5jPW59ZnVuY3Rpb24gd0t0KHQsZSxuKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmM9bn1mdW5jdGlvbiBtS3QodCxlLG4pe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuYz1ufWZ1bmN0aW9uIExnKHQsZSxuKXt0aGlzLmU9dCx0aGlzLmE9ZSx0aGlzLmM9bn1mdW5jdGlvbiB5S3QodCxlLG4pe2FoKCksTXd0LmNhbGwodGhpcyx0LGUsbil9ZnVuY3Rpb24gRW50KHQsZSxuKXthaCgpLGd3dC5jYWxsKHRoaXMsdCxlLG4pfWZ1bmN0aW9uIG12dCh0LGUsbil7YWgoKSxnd3QuY2FsbCh0aGlzLHQsZSxuKX1mdW5jdGlvbiB5dnQodCxlLG4pe2FoKCksZ3d0LmNhbGwodGhpcyx0LGUsbil9ZnVuY3Rpb24geEt0KHQsZSxuKXthaCgpLEVudC5jYWxsKHRoaXMsdCxlLG4pfWZ1bmN0aW9uIHh2dCh0LGUsbil7YWgoKSxFbnQuY2FsbCh0aGlzLHQsZSxuKX1mdW5jdGlvbiBrS3QodCxlLG4pe2FoKCkseHZ0LmNhbGwodGhpcyx0LGUsbil9ZnVuY3Rpb24gRUt0KHQsZSxuKXthaCgpLG12dC5jYWxsKHRoaXMsdCxlLG4pfWZ1bmN0aW9uIFRLdCh0LGUsbil7YWgoKSx5dnQuY2FsbCh0aGlzLHQsZSxuKX1mdW5jdGlvbiBHTSh0LGUpe3JldHVybiBEcih0KSxEcihlKSxuZXcgR0h0KHQsZSl9ZnVuY3Rpb24gSTYodCxlKXtyZXR1cm4gRHIodCksRHIoZSksbmV3IEJLdCh0LGUpfWZ1bmN0aW9uIGV0bih0LGUpe3JldHVybiBEcih0KSxEcihlKSxuZXcgUkt0KHQsZSl9ZnVuY3Rpb24gbnRuKHQsZSl7cmV0dXJuIERyKHQpLERyKGUpLG5ldyBXSHQodCxlKX1mdW5jdGlvbiB1KHQsZSl7cmV0dXJuIG1fKHQ9PW51bGx8fHNzdCh0LGUpKSx0fWZ1bmN0aW9uIGg4KHQpe3ZhciBlO3JldHVybiBlPW5ldyBsZSxacnQoZSx0KSxlfWZ1bmN0aW9uIHJ0bih0KXt2YXIgZTtyZXR1cm4gZT1uZXcgUXMsWnJ0KGUsdCksZX1mdW5jdGlvbiBfS3QodCl7dmFyIGU7cmV0dXJuIGU9bmV3IFNwdCxmaXQoZSx0KSxlfWZ1bmN0aW9uIFVNKHQpe3ZhciBlO3JldHVybiBlPW5ldyBjcyxmaXQoZSx0KSxlfWZ1bmN0aW9uIGl0bih0KXtyZXR1cm4hdC5lJiYodC5lPW5ldyBsZSksdC5lfWZ1bmN0aW9uIHN0bih0KXtyZXR1cm4hdC5jJiYodC5jPW5ldyB4bSksdC5jfWZ1bmN0aW9uIHVlKHQsZSl7cmV0dXJuIHQuY1t0LmMubGVuZ3RoXT1lLCEwfWZ1bmN0aW9uIENLdCh0LGUpe3RoaXMuYz10LHRoaXMuYj1lLHRoaXMuYT0hMX1mdW5jdGlvbiBrdnQodCl7dGhpcy5kPXQsSXR0KHRoaXMpLHRoaXMuYj1RdG4odC5kKX1mdW5jdGlvbiBTS3QoKXt0aGlzLmE9IjssOyIsdGhpcy5iPSIiLHRoaXMuYz0iIn1mdW5jdGlvbiBhdG4odCxlLG4pe0FZdC5jYWxsKHRoaXMsZSxuKSx0aGlzLmE9dH1mdW5jdGlvbiBBS3QodCxlLG4pe3RoaXMuYj10LHFHdC5jYWxsKHRoaXMsZSxuKX1mdW5jdGlvbiBFdnQodCxlLG4pe3RoaXMuYz10LFJSLmNhbGwodGhpcyxlLG4pfWZ1bmN0aW9uIFR2dCh0LGUsbil7VTR0KG4sMCx0LGUsbi5sZW5ndGgsITEpfWZ1bmN0aW9uIFZkKHQsZSxuLHIscyl7dC5iPWUsdC5jPW4sdC5kPXIsdC5hPXN9ZnVuY3Rpb24gb3RuKHQsZSl7ZSYmKHQuYj1lLHQuYT0ocXAoZSksZS5hKSl9ZnVuY3Rpb24gX3Z0KHQsZSxuLHIscyl7dC5kPWUsdC5jPW4sdC5hPXIsdC5iPXN9ZnVuY3Rpb24gQ3Z0KHQpe3ZhciBlLG47ZT10LmIsbj10LmMsdC5iPW4sdC5jPWV9ZnVuY3Rpb24gU3Z0KHQpe3ZhciBlLG47bj10LmQsZT10LmEsdC5kPWUsdC5hPW59ZnVuY3Rpb24gQXZ0KHQpe3JldHVybiBXcChkZW4oVm8odCk/RGgodCk6dCkpfWZ1bmN0aW9uIGN0bih0LGUpe3JldHVybiBtdShWS3QodC5kKSxWS3QoZS5kKSl9ZnVuY3Rpb24gdXRuKHQsZSl7cmV0dXJuIGU9PShiZSgpLEJuKT90LmM6dC5kfWZ1bmN0aW9uIGY4KCl7Zjg9WCxXX3Q9KGJlKCksQm4pLGdHPUhufWZ1bmN0aW9uIExLdCgpe3RoaXMuYj1adCh2ZShJZSgobjEoKSxXdXQpKSkpfWZ1bmN0aW9uIE1LdCh0KXtyZXR1cm4gWWIoKSxOdChRbixNZSwxLHQsNSwxKX1mdW5jdGlvbiBsdG4odCl7cmV0dXJuIG5ldyBSZSh0LmMrdC5iLHQuZCt0LmEpfWZ1bmN0aW9uIGh0bih0LGUpe3JldHVybiBMUigpLG11KHQuZC5wLGUuZC5wKX1mdW5jdGlvbiBUbnQodCl7cmV0dXJuIFpuKHQuYiE9MCksZmgodCx0LmEuYSl9ZnVuY3Rpb24gZnRuKHQpe3JldHVybiBabih0LmIhPTApLGZoKHQsdC5jLmIpfWZ1bmN0aW9uIEx2dCh0LGUpe2lmKCF0KXRocm93IG50KG5ldyBqcXQoZSkpfWZ1bmN0aW9uIENqKHQsZSl7aWYoIXQpdGhyb3cgbnQobmV3IFBuKGUpKX1mdW5jdGlvbiBNdnQodCxlLG4pe2k4LmNhbGwodGhpcyx0LGUpLHRoaXMuYj1ufWZ1bmN0aW9uIFdNKHQsZSxuKXtHYnQuY2FsbCh0aGlzLHQsZSksdGhpcy5jPW59ZnVuY3Rpb24gREt0KHQsZSxuKXtjZWUuY2FsbCh0aGlzLGUsbiksdGhpcy5kPXR9ZnVuY3Rpb24gRHZ0KHQpe2x2dCgpLFRrLmNhbGwodGhpcyksdGhpcy50aCh0KX1mdW5jdGlvbiBJS3QodCxlLG4pe3RoaXMuYT10LEgzLmNhbGwodGhpcyxlLG4pfWZ1bmN0aW9uIE9LdCh0LGUsbil7dGhpcy5hPXQsSDMuY2FsbCh0aGlzLGUsbil9ZnVuY3Rpb24gU2oodCxlLG4pe0didC5jYWxsKHRoaXMsdCxlKSx0aGlzLmM9bn1mdW5jdGlvbiBOS3QoKXtTOCgpLERlbi5jYWxsKHRoaXMsKElwKCksWGgpKX1mdW5jdGlvbiBQS3QodCl7cmV0dXJuIHQhPW51bGwmJiFHaXQodCxpQSxzQSl9ZnVuY3Rpb24gZHRuKHQsZSl7cmV0dXJuKFZyZSh0KTw8NHxWcmUoZSkpJk1zfWZ1bmN0aW9uIGd0bih0LGUpe3JldHVybiBRaigpLGRzdCh0LGUpLG5ldyBjWHQodCxlKX1mdW5jdGlvbiBRYih0LGUpe3ZhciBuO3QubiYmKG49ZSx1ZSh0LmYsbikpfWZ1bmN0aW9uIGQ4KHQsZSxuKXt2YXIgcjtyPW5ldyBIbShuKSxRZih0LGUscil9ZnVuY3Rpb24gcHRuKHQsZSl7dmFyIG47cmV0dXJuIG49dC5jLFltdCh0LGUpLG59ZnVuY3Rpb24gSXZ0KHQsZSl7cmV0dXJuIGU8MD90Lmc9LTE6dC5nPWUsdH1mdW5jdGlvbiBBaih0LGUpe3JldHVybiBKYW4odCksdC5hKj1lLHQuYio9ZSx0fWZ1bmN0aW9uIEZLdCh0LGUsbixyLHMpe3QuYz1lLHQuZD1uLHQuYj1yLHQuYT1zfWZ1bmN0aW9uIGFpKHQsZSl7cmV0dXJuIGtzKHQsZSx0LmMuYix0LmMpLCEwfWZ1bmN0aW9uIE92dCh0KXt0LmEuYj10LmIsdC5iLmE9dC5hLHQuYT10LmI9bnVsbH1mdW5jdGlvbiBfbnQodCl7dGhpcy5iPXQsdGhpcy5hPVB2KHRoaXMuYi5hKS5FZCgpfWZ1bmN0aW9uIEJLdCh0LGUpe3RoaXMuYj10LHRoaXMuYT1lLGZULmNhbGwodGhpcyl9ZnVuY3Rpb24gUkt0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWUsZlQuY2FsbCh0aGlzKX1mdW5jdGlvbiBqS3QodCxlKXtBWXQuY2FsbCh0aGlzLGUsMTA0MCksdGhpcy5hPXR9ZnVuY3Rpb24gS00odCl7cmV0dXJuIHQ9PTB8fGlzTmFOKHQpP3Q6dDwwPy0xOjF9ZnVuY3Rpb24gYnRuKHQpe3JldHVybiBSNigpLFpkKHQpPT1ocyhacCh0KSl9ZnVuY3Rpb24gdnRuKHQpe3JldHVybiBSNigpLFpwKHQpPT1ocyhaZCh0KSl9ZnVuY3Rpb24gTnYodCxlKXtyZXR1cm4gbEModCxuZXcgaTgoZS5hLGUuYikpfWZ1bmN0aW9uIHd0bih0KXtyZXR1cm4hV2EodCkmJnQuYy5pLmM9PXQuZC5pLmN9ZnVuY3Rpb24gTGoodCl7dmFyIGU7cmV0dXJuIGU9dC5uLHQuYS5iK2UuZCtlLmF9ZnVuY3Rpb24gJEt0KHQpe3ZhciBlO3JldHVybiBlPXQubix0LmUuYitlLmQrZS5hfWZ1bmN0aW9uIE52dCh0KXt2YXIgZTtyZXR1cm4gZT10Lm4sdC5lLmErZS5iK2UuY31mdW5jdGlvbiB6S3QodCl7cmV0dXJuIHlpKCksbmV3IEdkKDAsdCl9ZnVuY3Rpb24gbXRuKHQpe3JldHVybiB0LmE/dC5hOnNydCh0KX1mdW5jdGlvbiBtXyh0KXtpZighdCl0aHJvdyBudChuZXcgS2sobnVsbCkpfWZ1bmN0aW9uIHFLdCgpe3FLdD1YLERmdD0ocG4oKSxuZXcgSShhdXQpKX1mdW5jdGlvbiBNaigpe01qPVgsbmV3IEQzdCgoWnR0KCksd3V0KSwoSnR0KCksdnV0KSl9ZnVuY3Rpb24gSEt0KCl7SEt0PVgsbjd0PU50KEhhLHJlLDE5LDI1NiwwLDEpfWZ1bmN0aW9uIENudCh0LGUsbixyKXthM3QuY2FsbCh0aGlzLHQsZSxuLHIsMCwwKX1mdW5jdGlvbiB5dG4odCxlLG4pe3JldHVybiBBaSh0LmIsdShuLmIsMTcpLGUpfWZ1bmN0aW9uIHh0bih0LGUsbil7cmV0dXJuIEFpKHQuYix1KG4uYiwxNyksZSl9ZnVuY3Rpb24ga3RuKHQsZSl7cmV0dXJuIHVlKHQsbmV3IFJlKGUuYSxlLmIpKX1mdW5jdGlvbiBFdG4odCxlKXtyZXR1cm4gdC5jPGUuYz8tMTp0LmM9PWUuYz8wOjF9ZnVuY3Rpb24gU250KHQpe3JldHVybiB0LmUuYy5sZW5ndGgrdC5nLmMubGVuZ3RofWZ1bmN0aW9uIFZLdCh0KXtyZXR1cm4gdC5lLmMubGVuZ3RoLXQuZy5jLmxlbmd0aH1mdW5jdGlvbiBHS3QodCl7cmV0dXJuIHQuYi5jLmxlbmd0aC10LmUuYy5sZW5ndGh9ZnVuY3Rpb24gVHRuKHQpe3JldHVybiBSbCgpLChiZSgpLGd1KS5IYyh0LmopfWZ1bmN0aW9uIFVLdCh0KXtsdnQoKSxEdnQuY2FsbCh0aGlzLHQpLHRoaXMuYT0tMX1mdW5jdGlvbiBEaih0LGUpe0lNLmNhbGwodGhpcyx0LGUpLHRoaXMuYT10aGlzfWZ1bmN0aW9uIGFzKHQsZSl7dmFyIG47cmV0dXJuIG49S250KHQsZSksbi5pPTIsbn1mdW5jdGlvbiBJaih0LGUpe3ZhciBuO3JldHVybisrdC5qLG49dC5UaShlKSxufWZ1bmN0aW9uIEVpKHQsZSxuKXtyZXR1cm4gdC5hPS0xLEEydCh0LGUuZyxuKSx0fWZ1bmN0aW9uIF90bih0LGUsbil7YjRuKHQuYSx0LmIsdC5jLHUoZSwyMDIpLG4pfWZ1bmN0aW9uIEN0bih0LGUpe1FtdCh0LGU9PW51bGw/bnVsbDooSW4oZSksZSkpfWZ1bmN0aW9uIFN0bih0LGUpe0ttdCh0LGU9PW51bGw/bnVsbDooSW4oZSksZSkpfWZ1bmN0aW9uIEF0bih0LGUpe0ttdCh0LGU9PW51bGw/bnVsbDooSW4oZSksZSkpfWZ1bmN0aW9uIEFudCh0LGUsbil7cmV0dXJuIG5ldyBaV3QoSWVuKHQpLkllKCksbixlKX1mdW5jdGlvbiBaYih0LGUsbixyLHMsbyl7cmV0dXJuIFhzZSh0LGUsbixyLHMsMCxvKX1mdW5jdGlvbiBXS3QoKXtXS3Q9WCxKOHQ9TnQoa3gscmUsMjE3LDI1NiwwLDEpfWZ1bmN0aW9uIEtLdCgpe0tLdD1YLHI3dD1OdChUdyxyZSwxNjIsMjU2LDAsMSl9ZnVuY3Rpb24gWUt0KCl7WUt0PVgsYTd0PU50KF93LHJlLDE4NCwyNTYsMCwxKX1mdW5jdGlvbiBYS3QoKXtYS3Q9WCxlN3Q9TnQoYVMscmUsMTcyLDEyOCwwLDEpfWZ1bmN0aW9uIFB2dCgpe1ZkKHRoaXMsITEsITEsITEsITEpfWZ1bmN0aW9uIExudCh0KXtWbSgpLHRoaXMuYT0ocG4oKSxuZXcgSShEcih0KSkpfWZ1bmN0aW9uIE9qKHQpe2ZvcihEcih0KTt0Lk9iKCk7KXQuUGIoKSx0LlFiKCl9ZnVuY3Rpb24gTHRuKHQpe3QuYS5jZCgpLHUodC5hLmRkKCksMTQpLmdjKCksV3B0KCl9ZnVuY3Rpb24gRnZ0KHQpe3RoaXMuYz10LHRoaXMuYj10aGlzLmMuZC52YygpLktjKCl9ZnVuY3Rpb24gUUt0KHQpe3RoaXMuYz10LHRoaXMuYT1uZXcgazYodGhpcy5jLmEpfWZ1bmN0aW9uIHlfKHQpe3RoaXMuYT1uZXcgeDYodC5nYygpKSxLYSh0aGlzLHQpfWZ1bmN0aW9uIEJ2dCh0KXtFdC5jYWxsKHRoaXMsbmV3IGkyKSxLYSh0aGlzLHQpfWZ1bmN0aW9uIFpLdCh0LGUpe3JldHVybiB0LmErPUloKGUsMCxlLmxlbmd0aCksdH1mdW5jdGlvbiBQZSh0LGUpe3JldHVybiBTbihlLHQuYy5sZW5ndGgpLHQuY1tlXX1mdW5jdGlvbiBKS3QodCxlKXtyZXR1cm4gU24oZSx0LmEubGVuZ3RoKSx0LmFbZV19ZnVuY3Rpb24ga24odCxlKXtZYigpLHpydC5jYWxsKHRoaXMsdCksdGhpcy5hPWV9ZnVuY3Rpb24gTXRuKHQsZSl7cmV0dXJuIGIyKFJhKGIyKHQuYSkuYSxlLmEpKX1mdW5jdGlvbiBEdG4odCxlKXtyZXR1cm4gSW4odCksU0QodCwoSW4oZSksZSkpfWZ1bmN0aW9uIEl0bih0LGUpe3JldHVybiBJbihlKSxTRChlLChJbih0KSx0KSl9ZnVuY3Rpb24gT3RuKHQsZSl7cmV0dXJuIGxzKGUsMCxSdnQoZVswXSxiMigxKSkpfWZ1bmN0aW9uIFJ2dCh0LGUpe3JldHVybiBNdG4odSh0LDE2MiksdShlLDE2MikpfWZ1bmN0aW9uIHRZdCh0KXtyZXR1cm4gdC5jLXUoUGUodC5hLHQuYiksMjg3KS5ifWZ1bmN0aW9uIGVZdCh0KXtyZXR1cm4gdC5xP3QucToocG4oKSxwbigpLGEwKX1mdW5jdGlvbiBuWXQodCl7cmV0dXJuIHQuZS5IZCgpLmdjKCkqdC5jLkhkKCkuZ2MoKX1mdW5jdGlvbiBOdG4odCxlLG4pe3JldHVybiBtdShlLmRbdC5nXSxuLmRbdC5nXSl9ZnVuY3Rpb24gUHRuKHQsZSxuKXtyZXR1cm4gbXUodC5kW2UucF0sdC5kW24ucF0pfWZ1bmN0aW9uIEZ0bih0LGUsbil7cmV0dXJuIG11KHQuZFtlLnBdLHQuZFtuLnBdKX1mdW5jdGlvbiBCdG4odCxlLG4pe3JldHVybiBtdSh0LmRbZS5wXSx0LmRbbi5wXSl9ZnVuY3Rpb24gUnRuKHQsZSxuKXtyZXR1cm4gbXUodC5kW2UucF0sdC5kW24ucF0pfWZ1bmN0aW9uIGp2dCh0LGUsbil7cmV0dXJuIGIuTWF0aC5taW4obi90LDEvZSl9ZnVuY3Rpb24gcll0KHQsZSl7cmV0dXJuIHQ/MDpiLk1hdGgubWF4KDAsZS0xKX1mdW5jdGlvbiBqdG4odCxlKXt2YXIgbjtmb3Iobj0wO248ZTsrK24pdFtuXT0tMX1mdW5jdGlvbiBpWXQodCl7dmFyIGU7cmV0dXJuIGU9WnNlKHQpLGU/aVl0KGUpOnR9ZnVuY3Rpb24gJHRuKHQsZSl7cmV0dXJuIHQuYT09bnVsbCYmZHVlKHQpLHQuYVtlXX1mdW5jdGlvbiBMbCh0KXtyZXR1cm4gdC5jP3QuYy5mOnQuZS5ifWZ1bmN0aW9uIEh1KHQpe3JldHVybiB0LmM/dC5jLmc6dC5lLmF9ZnVuY3Rpb24gTmoodCl7S3YuY2FsbCh0aGlzLHQuZ2MoKSksZ3ModGhpcyx0KX1mdW5jdGlvbiBQaih0LGUpe2FoKCksb1IuY2FsbCh0aGlzLGUpLHRoaXMuYT10fWZ1bmN0aW9uIHhfKHQsZSxuKXt0aGlzLmE9dCxCcy5jYWxsKHRoaXMsZSxuLDIpfWZ1bmN0aW9uIEZqKHQsZSxuLHIpe192dCh0aGlzLHQsZSxuLHIpfWZ1bmN0aW9uIEdkKHQsZSl7eWkoKSx2di5jYWxsKHRoaXMsdCksdGhpcy5hPWV9ZnVuY3Rpb24gc1l0KHQpe3RoaXMuYj1uZXcgY3MsdGhpcy5hPXQsdGhpcy5jPS0xfWZ1bmN0aW9uIGFZdCgpe3RoaXMuZD1uZXcgUmUoMCwwKSx0aGlzLmU9bmV3IFFzfWZ1bmN0aW9uIG9ZdCh0KXtMMnQuY2FsbCh0aGlzLDAsMCksdGhpcy5hPXQsdGhpcy5iPTB9ZnVuY3Rpb24gY1l0KHQpe3RoaXMuYT10LHRoaXMuYz1uZXcgQXIsRGNuKHRoaXMpfWZ1bmN0aW9uICR2dCh0KXtpZih0LmUuYyE9dC5iKXRocm93IG50KG5ldyBzaCl9ZnVuY3Rpb24genZ0KHQpe2lmKHQuYy5lIT10LmEpdGhyb3cgbnQobmV3IHNoKX1mdW5jdGlvbiBNcih0KXtyZXR1cm4gVm8odCk/dHwwOm1IdCh0KX1mdW5jdGlvbiBCaih0LGUpe3JldHVybiB5aSgpLG5ldyB1d3QodCxlKX1mdW5jdGlvbiBNbnQodCxlKXtyZXR1cm4gdD09bnVsbD9lPT1udWxsOnVuKHQsZSl9ZnVuY3Rpb24genRuKHQsZSl7cmV0dXJuIHQ9PW51bGw/ZT09bnVsbDpPeih0LGUpfWZ1bmN0aW9uIE82KHQsZSxuKXtyZXR1cm4gd2YodC5hLGUpLHN3dCh0LGUuZyxuKX1mdW5jdGlvbiBEbnQodCxlLG4pe3dyZSgwLGUsdC5sZW5ndGgpLE04KHQsMCxlLG4pfWZ1bmN0aW9uICRtKHQsZSxuKXtVbShlLHQuYy5sZW5ndGgpLFdUKHQuYyxlLG4pfWZ1bmN0aW9uIHVZdCh0LGUsbil7dmFyIHI7Zm9yKHI9MDtyPGU7KytyKXRbcl09bn1mdW5jdGlvbiBLaSh0LGUpe3ZhciBuO3JldHVybiBuPW9uKHQpLEV5dChuLGUpLG59ZnVuY3Rpb24gcXRuKHQsZSl7cmV0dXJuIXQmJih0PVtdKSx0W3QubGVuZ3RoXT1lLHR9ZnVuY3Rpb24gSHRuKHQsZSl7cmV0dXJuIHQuYS5nZXQoZSkhPT12b2lkIDB9ZnVuY3Rpb24gbFl0KHQsZSl7cmV0dXJuIHZvbihuZXcgU2UsbmV3IFh0KHQpLGUpfWZ1bmN0aW9uIFZ0bih0KXtyZXR1cm4gdD09bnVsbD9XSDpuZXcgZ1IoSW4odCkpfWZ1bmN0aW9uIEludCh0LGUpe3JldHVybiBfdChlLDIyKSYmenUodCx1KGUsMjIpKX1mdW5jdGlvbiBoWXQodCxlKXtyZXR1cm4gX3QoZSwyMikmJldhbih0LHUoZSwyMikpfWZ1bmN0aW9uIHF2dCh0KXtyZXR1cm4gcGwodCwyNikqTEMrcGwodCwyNykqTUN9ZnVuY3Rpb24gSHZ0KHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpJiZ0LmltPT09RnR9ZnVuY3Rpb24gUmoodCl7dC5iP1JqKHQuYik6dC5kLmRjKCkmJnQuZi5jLkJjKHQuZSl9ZnVuY3Rpb24gT250KHQsZSl7RmkodC5jLGUpLHQuYi5jKz1lLmEsdC5iLmQrPWUuYn1mdW5jdGlvbiBHdG4odCxlKXtPbnQodCxmYShuZXcgUmUoZS5hLGUuYiksdC5jKSl9ZnVuY3Rpb24gTm50KHQsZSl7dGhpcy5iPW5ldyBjcyx0aGlzLmE9dCx0aGlzLmM9ZX1mdW5jdGlvbiBmWXQoKXt0aGlzLmI9bmV3IG5vLHRoaXMuYz1uZXcgSFh0KHRoaXMpfWZ1bmN0aW9uIFZ2dCgpe3RoaXMuZD1uZXcgSnMsdGhpcy5lPW5ldyBxWHQodGhpcyl9ZnVuY3Rpb24gR3Z0KCl7Rnd0KCksdGhpcy5mPW5ldyBjcyx0aGlzLmU9bmV3IGNzfWZ1bmN0aW9uIGRZdCgpe1JsKCksdGhpcy5rPW5ldyBBcix0aGlzLmQ9bmV3IFFzfWZ1bmN0aW9uIFBudCgpe1BudD1YLF80ZT1uZXcgYW8oKGRpKCksbWwpLDApfWZ1bmN0aW9uIGdZdCgpe2dZdD1YLGxnZT1uZXcgb1l0KE50KFFuLE1lLDEsMCw1LDEpKX1mdW5jdGlvbiBVdG4odCxlLG4pe2FjZShuLHQsMSksdWUoZSxuZXcgUlZ0KG4sdCkpfWZ1bmN0aW9uIFd0bih0LGUsbil7Y0Mobix0LDEpLHVlKGUsbmV3IEdWdChuLHQpKX1mdW5jdGlvbiBLdG4odCxlLG4pe3JldHVybiBWcyh0LG5ldyBFNihlLmEsbi5hKSl9ZnVuY3Rpb24gWXRuKHQsZSxuKXtyZXR1cm4tbXUodC5mW2UucF0sdC5mW24ucF0pfWZ1bmN0aW9uIGpqKHQsZSxuKXt2YXIgcjt0JiYocj10Lmksci5jPWUsci5iPW4pfWZ1bmN0aW9uICRqKHQsZSxuKXt2YXIgcjt0JiYocj10Lmksci5kPWUsci5hPW4pfWZ1bmN0aW9uIGVsKHQsZSxuKXtyZXR1cm4gdC5hPS0xLEEydCh0LGUuZysxLG4pLHR9ZnVuY3Rpb24gVXZ0KHQsZSxuKXtyZXR1cm4gbj1VbCh0LHUoZSw0OSksNyxuKSxufWZ1bmN0aW9uIFd2dCh0LGUsbil7cmV0dXJuIG49VWwodCx1KGUsNDkpLDMsbiksbn1mdW5jdGlvbiBwWXQodCxlLG4pe3RoaXMuYT10LGhqLmNhbGwodGhpcyxlLG4sMjIpfWZ1bmN0aW9uIGJZdCh0LGUsbil7dGhpcy5hPXQsaGouY2FsbCh0aGlzLGUsbiwxNCl9ZnVuY3Rpb24gdll0KHQsZSxuLHIpe2FoKCksUVF0LmNhbGwodGhpcyx0LGUsbixyKX1mdW5jdGlvbiB3WXQodCxlLG4scil7YWgoKSxRUXQuY2FsbCh0aGlzLHQsZSxuLHIpfWZ1bmN0aW9uIFh0bih0LGUpe2UuQmImeWMmJiF0LmEubyYmKHQuYS5vPWUpfWZ1bmN0aW9uIG1ZdCh0KXtyZXR1cm4gdCE9bnVsbCYmSG50KHQpJiZ0LmltIT09RnR9ZnVuY3Rpb24gS3Z0KHQpe3JldHVybiFBcnJheS5pc0FycmF5KHQpJiZ0LmltPT09RnR9ZnVuY3Rpb24gUXRuKHQpe3JldHVybiBfdCh0LDE1KT91KHQsMTUpLlljKCk6dC5LYygpfWZ1bmN0aW9uIFl2dCh0KXtyZXR1cm4gdC5RYyhOdChRbixNZSwxLHQuZ2MoKSw1LDEpKX1mdW5jdGlvbiBrXyh0LGUpe3JldHVybiBoaG4obUQodCxlKSk/ZS5RaCgpOm51bGx9ZnVuY3Rpb24gWHZ0KHQpe3Q/JDN0KHQsKHFkKCksYzd0KSk6cWQoKX1mdW5jdGlvbiBhcih0KXt0aGlzLmE9KGdZdCgpLGxnZSksdGhpcy5kPXUoRHIodCksNDcpfWZ1bmN0aW9uIFF2dCh0LGUsbixyKXt0aGlzLmE9dCxEJC5jYWxsKHRoaXMsdCxlLG4scil9ZnVuY3Rpb24gSmIodCl7T3AoKSx0aGlzLmE9MCx0aGlzLmI9dC0xLHRoaXMuYz0xfWZ1bmN0aW9uIHlZdCh0KXt1aih0aGlzKSx0aGlzLmc9dCxuJCh0aGlzKSx0aGlzLl9kKCl9ZnVuY3Rpb24gUHYodCl7cmV0dXJuIHQuYz90LmM6dC5jPXQuSWQoKX1mdW5jdGlvbiBGbnQodCl7cmV0dXJuIHQuZD90LmQ6dC5kPXQuSmQoKX1mdW5jdGlvbiBadnQodCl7dmFyIGU7cmV0dXJuIGU9dC5jLGV8fCh0LmM9dC5EZCgpKX1mdW5jdGlvbiB4WXQodCl7dmFyIGU7cmV0dXJuIGU9dC5mLGV8fCh0LmY9dC5EYygpKX1mdW5jdGlvbiBONih0KXt2YXIgZTtyZXR1cm4gZT10LmksZXx8KHQuaT10LmJjKCkpfWZ1bmN0aW9uIGtZdCh0KXtyZXR1cm4geWkoKSxuZXcgZHJ0KDEwLHQsMCl9ZnVuY3Rpb24gRV8odCl7cmV0dXJuIFZvKHQpPyIiK3Q6b3VlKHQpfWZ1bmN0aW9uIHpqKHQpe2lmKHQuZS5qIT10LmQpdGhyb3cgbnQobmV3IHNoKX1mdW5jdGlvbiBNMCh0LGUpe3JldHVybiBXcChBYWUoVm8odCk/RGgodCk6dCxlKSl9ZnVuY3Rpb24gUnAodCxlKXtyZXR1cm4gV3AoYzV0KFZvKHQpP0RoKHQpOnQsZSkpfWZ1bmN0aW9uIHptKHQsZSl7cmV0dXJuIFdwKEowbihWbyh0KT9EaCh0KTp0LGUpKX1mdW5jdGlvbiBadG4odCxlKXtyZXR1cm4gTVFlKChJbih0KSx0KSwoSW4oZSksZSkpfWZ1bmN0aW9uIEJudCh0LGUpe3JldHVybiBqcygoSW4odCksdCksKEluKGUpLGUpKX1mdW5jdGlvbiBFWXQodCxlKXtyZXR1cm4gRHIoZSksdC5hLkFkKGUpJiYhdC5iLkFkKGUpfWZ1bmN0aW9uIEp0bih0LGUpe3JldHVybiBjdSh0LmwmZS5sLHQubSZlLm0sdC5oJmUuaCl9ZnVuY3Rpb24gdGVuKHQsZSl7cmV0dXJuIGN1KHQubHxlLmwsdC5tfGUubSx0Lmh8ZS5oKX1mdW5jdGlvbiBlZW4odCxlKXtyZXR1cm4gY3UodC5sXmUubCx0Lm1eZS5tLHQuaF5lLmgpfWZ1bmN0aW9uIHFqKHQsZSl7cmV0dXJuIHFEKHQsKEluKGUpLG5ldyBJdChlKSkpfWZ1bmN0aW9uIEhqKHQsZSl7cmV0dXJuIHFEKHQsKEluKGUpLG5ldyB6dChlKSkpfWZ1bmN0aW9uIFRZdCh0KXtyZXR1cm4gVnUoKSx1KHQsMTEpLmUuYy5sZW5ndGghPTB9ZnVuY3Rpb24gX1l0KHQpe3JldHVybiBWdSgpLHUodCwxMSkuZy5jLmxlbmd0aCE9MH1mdW5jdGlvbiBuZW4odCxlKXtyZXR1cm4gWTYoKSxqcyhlLmEuby5hLHQuYS5vLmEpfWZ1bmN0aW9uIENZdCh0LGUsbil7cmV0dXJuIGo0bih0LHUoZSwxMSksdShuLDExKSl9ZnVuY3Rpb24gcmVuKHQpe3JldHVybiB0LmU/cG10KHQuZSk6bnVsbH1mdW5jdGlvbiBKdnQodCl7dC5kfHwodC5kPXQuYi5LYygpLHQuYz10LmIuZ2MoKSl9ZnVuY3Rpb24gaWVuKHQsZSxuKXt0LmEuTWIobikmJih0LmI9ITAsZS50ZChuKSl9ZnVuY3Rpb24gZzgodCxlKXtpZih0PDB8fHQ+PWUpdGhyb3cgbnQobmV3IEVwdCl9ZnVuY3Rpb24gc2VuKHQsZSxuKXtyZXR1cm4gbHMoZSwwLFJ2dChlWzBdLG5bMF0pKSxlfWZ1bmN0aW9uIGFlbih0LGUsbil7ZS5ZZShuLFp0KHZlKHRyKHQuYixuKSkpKnQuYSl9ZnVuY3Rpb24gU1l0KHQsZSxuKXtyZXR1cm4geDQoKSx6OCh0LGUpJiZ6OCh0LG4pfWZ1bmN0aW9uIFRfKHQpe3JldHVybiBpbCgpLCF0LkhjKHRnKSYmIXQuSGMoRWIpfWZ1bmN0aW9uIFZqKHQpe3JldHVybiBuZXcgUmUodC5jK3QuYi8yLHQuZCt0LmEvMil9ZnVuY3Rpb24gUm50KHQsZSl7cmV0dXJuIGUua2goKT9YcCh0LmIsdShlLDQ5KSk6ZX1mdW5jdGlvbiB0d3QodCxlKXt0aGlzLmU9dCx0aGlzLmQ9ZSY2ND9lfHZkOmV9ZnVuY3Rpb24gQVl0KHQsZSl7dGhpcy5jPTAsdGhpcy5kPXQsdGhpcy5iPWV8NjR8dmR9ZnVuY3Rpb24gR2oodCl7dGhpcy5iPW5ldyBKYygxMSksdGhpcy5hPShRMygpLHQpfWZ1bmN0aW9uIGpudCh0KXt0aGlzLmI9bnVsbCx0aGlzLmE9KFEzKCksdHx8Yjd0KX1mdW5jdGlvbiBMWXQodCl7dGhpcy5hPVppZSh0LmEpLHRoaXMuYj1uZXcgcXUodC5iKX1mdW5jdGlvbiBNWXQodCl7dGhpcy5iPXQsQTYuY2FsbCh0aGlzLHQpLE9VdCh0aGlzKX1mdW5jdGlvbiBEWXQodCl7dGhpcy5iPXQsUE0uY2FsbCh0aGlzLHQpLE5VdCh0aGlzKX1mdW5jdGlvbiBxbSh0LGUsbil7dGhpcy5hPXQsTTYuY2FsbCh0aGlzLGUsbiw1LDYpfWZ1bmN0aW9uIGV3dCh0LGUsbixyKXt0aGlzLmI9dCxCcy5jYWxsKHRoaXMsZSxuLHIpfWZ1bmN0aW9uIG9hKHQsZSxuLHIscyl7VnJ0LmNhbGwodGhpcyx0LGUsbixyLHMsLTEpfWZ1bmN0aW9uIF9fKHQsZSxuLHIscyl7Z0QuY2FsbCh0aGlzLHQsZSxuLHIscywtMSl9ZnVuY3Rpb24gaGUodCxlLG4scil7QnMuY2FsbCh0aGlzLHQsZSxuKSx0aGlzLmI9cn1mdW5jdGlvbiBVaih0LGUsbixyKXtXTS5jYWxsKHRoaXMsdCxlLG4pLHRoaXMuYj1yfWZ1bmN0aW9uIElZdCh0KXtQR3QuY2FsbCh0aGlzLHQsITEpLHRoaXMuYT0hMX1mdW5jdGlvbiBPWXQodCxlKXt0aGlzLmI9dCxjdHQuY2FsbCh0aGlzLHQuYiksdGhpcy5hPWV9ZnVuY3Rpb24gTll0KHQsZSl7Vm0oKSx1WWUuY2FsbCh0aGlzLHQseXoobmV3IENsKGUpKSl9ZnVuY3Rpb24gV2oodCxlKXtyZXR1cm4geWkoKSxuZXcgcHd0KHQsZSwwKX1mdW5jdGlvbiAkbnQodCxlKXtyZXR1cm4geWkoKSxuZXcgcHd0KDYsdCxlKX1mdW5jdGlvbiBvZW4odCxlKXtyZXR1cm4gdW4odC5zdWJzdHIoMCxlLmxlbmd0aCksZSl9ZnVuY3Rpb24gTWwodCxlKXtyZXR1cm4gaGEoZSk/Y3J0KHQsZSk6ISFGbyh0LmYsZSl9ZnVuY3Rpb24gRWEodCxlKXtmb3IoSW4oZSk7dC5PYigpOyllLnRkKHQuUGIoKSl9ZnVuY3Rpb24gWTModCxlLG4pe2ViKCksdGhpcy5lPXQsdGhpcy5kPWUsdGhpcy5hPW59ZnVuY3Rpb24gTWcodCxlLG4scil7dmFyIHM7cz10Lmkscy5pPWUscy5hPW4scy5iPXJ9ZnVuY3Rpb24gbnd0KHQpe3ZhciBlO2ZvcihlPXQ7ZS5mOyllPWUuZjtyZXR1cm4gZX1mdW5jdGlvbiBQNih0KXt2YXIgZTtyZXR1cm4gZT1LXyh0KSxabihlIT1udWxsKSxlfWZ1bmN0aW9uIGNlbih0KXt2YXIgZTtyZXR1cm4gZT1XdW4odCksWm4oZSE9bnVsbCksZX1mdW5jdGlvbiBwOCh0LGUpe3ZhciBuO3JldHVybiBuPXQuYS5nYygpLGRtdChlLG4pLG4tZX1mdW5jdGlvbiByd3QodCxlKXt2YXIgbjtmb3Iobj0wO248ZTsrK24pdFtuXT0hMX1mdW5jdGlvbiB1ZW4odCxlLG4scil7dmFyIHM7Zm9yKHM9ZTtzPG47KytzKXRbc109cn1mdW5jdGlvbiAkdCh0LGUsbixyKXt3cmUoZSxuLHQubGVuZ3RoKSx1ZW4odCxlLG4scil9ZnVuY3Rpb24gbGVuKHQsZSxuKXtnOChuLHQuYS5jLmxlbmd0aCksbGgodC5hLG4sZSl9ZnVuY3Rpb24gaXd0KHQsZSxuKXt0aGlzLmM9dCx0aGlzLmE9ZSxwbigpLHRoaXMuYj1ufWZ1bmN0aW9uIHN3dCh0LGUsbil7dmFyIHI7cmV0dXJuIHI9dC5iW2VdLHQuYltlXT1uLHJ9ZnVuY3Rpb24gVnModCxlKXt2YXIgbjtyZXR1cm4gbj10LmEuemMoZSx0KSxuPT1udWxsfWZ1bmN0aW9uIGhlbih0KXtpZighdCl0aHJvdyBudChuZXcgdmMpO3JldHVybiB0LmR9ZnVuY3Rpb24gYXd0KHQsZSl7aWYodD09bnVsbCl0aHJvdyBudChuZXcgbTYoZSkpfWZ1bmN0aW9uIG93dCh0LGUpe3JldHVybiBlP0thKHQsZSk6ITF9ZnVuY3Rpb24gVWQodCxlLG4pe3JldHVybiBzdW4odCxlLmcsbiksd2YodC5jLGUpLHR9ZnVuY3Rpb24gZmVuKHQpe3JldHVybiBfNCh0LChmbygpLEhoKSksdC5kPSEwLHR9ZnVuY3Rpb24gem50KHQpe3JldHVybiF0LmomJk10dCh0LER3bih0LmcsdC5iKSksdC5qfWZ1bmN0aW9uIENfKHQpe1BtKHQuYiE9LTEpLElnKHQuYyx0LmE9dC5iKSx0LmI9LTF9ZnVuY3Rpb24gbmwodCl7dC5mPW5ldyByVXQodCksdC5nPW5ldyBpVXQodCksYSQodCl9ZnVuY3Rpb24gcW50KHQpe3JldHVybiBuZXcga24obnVsbCx2ZW4odCx0Lmxlbmd0aCkpfWZ1bmN0aW9uIGpwKHQpe3JldHVybiBuZXcgYXIobmV3IHAydCh0LmEubGVuZ3RoLHQuYSkpfWZ1bmN0aW9uIGRlbih0KXtyZXR1cm4gY3UofnQubCZ2bCx+dC5tJnZsLH50LmgmVzApfWZ1bmN0aW9uIEhudCh0KXtyZXR1cm4gdHlwZW9mIHQ9PT1fSXx8dHlwZW9mIHQ9PT1GYXR9ZnVuY3Rpb24gZ2VuKHQpe3JldHVybiB0PT1icz9uTzp0PT1Ocz8iLUlORiI6IiIrdH1mdW5jdGlvbiBwZW4odCl7cmV0dXJuIHQ9PWJzP25POnQ9PU5zPyItSU5GIjoiIit0fWZ1bmN0aW9uIGJlbih0LGUpe3JldHVybiB0PjA/Yi5NYXRoLmxvZyh0L2UpOi0xMDB9ZnVuY3Rpb24gUFl0KHQsZSl7cmV0dXJuIF9jKHQsZSk8MD8tMTpfYyh0LGUpPjA/MTowfWZ1bmN0aW9uIGN3dCh0LGUsbil7cmV0dXJuIENsZSh0LHUoZSw0NiksdShuLDE2NykpfWZ1bmN0aW9uIEZZdCh0LGUpe3JldHVybiB1KFp2dChQdih0LmEpKS5YYihlKSw0MikuY2QoKX1mdW5jdGlvbiB2ZW4odCxlKXtyZXR1cm4gJGFuKGUsdC5sZW5ndGgpLG5ldyBqS3QodCxlKX1mdW5jdGlvbiBWbnQodCxlKXt0aGlzLmQ9dCxuci5jYWxsKHRoaXMsdCksdGhpcy5lPWV9ZnVuY3Rpb24gRnYodCl7dGhpcy5kPShJbih0KSx0KSx0aGlzLmE9MCx0aGlzLmM9RHF9ZnVuY3Rpb24gdXd0KHQsZSl7dnYuY2FsbCh0aGlzLDEpLHRoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIEJZdCh0LGUpe3JldHVybiB0LmM/Qll0KHQuYyxlKTp1ZSh0LmIsZSksdH1mdW5jdGlvbiB3ZW4odCxlLG4pe3ZhciByO3JldHVybiByPVhtKHQsZSksQXJ0KHQsZSxuKSxyfWZ1bmN0aW9uIGx3dCh0LGUpe3ZhciBuO3JldHVybiBuPXQuc2xpY2UoMCxlKSxTbXQobix0KX1mdW5jdGlvbiBSWXQodCxlLG4pe3ZhciByO2ZvcihyPTA7cjxlOysrcilscyh0LHIsbil9ZnVuY3Rpb24gall0KHQsZSxuLHIscyl7Zm9yKDtlPG47KXJbcysrXT1UYSh0LGUrKyl9ZnVuY3Rpb24gbWVuKHQsZSl7cmV0dXJuIGpzKHQuYy5jK3QuYy5iLGUuYy5jK2UuYy5iKX1mdW5jdGlvbiBZTSh0LGUpe3JldHVybiBweih0LmEsZSwoRm4oKSxPMikpPT1udWxsfWZ1bmN0aW9uIFhNKHQsZSl7a3ModC5kLGUsdC5iLmIsdC5iKSwrK3QuYSx0LmM9bnVsbH1mdW5jdGlvbiBRTSh0LGUpe0xVdCh0LF90KGUsMTUzKT9lOnUoZSwxOTM3KS5nbCgpKX1mdW5jdGlvbiBCdih0LGUpe3lzKHh1KHQuT2MoKSxuZXcgSDkpLG5ldyBSdHQoZSkpfWZ1bmN0aW9uIGI4KHQsZSxuLHIscyl7U3N0KHQsdShQaShlLmssbiksMTUpLG4scixzKX1mdW5jdGlvbiBLaih0KXt0LnM9TmFOLHQuYz1OYU4sVW9lKHQsdC5lKSxVb2UodCx0LmopfWZ1bmN0aW9uICRZdCh0KXt0LmE9bnVsbCx0LmU9bnVsbCxubCh0LmIpLHQuZD0wLCsrdC5jfWZ1bmN0aW9uIEdudCh0KXtyZXR1cm4gYi5NYXRoLmFicyh0LmQuZS10LmUuZSktdC5hfWZ1bmN0aW9uIHllbih0LGUsbil7cmV0dXJuIHUodC5jLl9jKGUsdShuLDEzMykpLDQyKX1mdW5jdGlvbiB4ZW4oKXtyZXR1cm4gZFIoKSx1dChvdChoZ2UsMSksb2UsNTM4LDAsW3h1dF0pfWZ1bmN0aW9uIGtlbih0KXtyZXR1cm4gUjYoKSxocyhaZCh0KSk9PWhzKFpwKHQpKX1mdW5jdGlvbiB6WXQodCl7UTJ0LmNhbGwodGhpcyksdGhpcy5hPXQsdWUodC5hLHRoaXMpfWZ1bmN0aW9uIFVudCh0LGUpe3RoaXMuZD1LdW4odCksdGhpcy5jPWUsdGhpcy5hPS41KmV9ZnVuY3Rpb24gcVl0KCl7aTIuY2FsbCh0aGlzKSx0aGlzLmE9ITAsdGhpcy5iPSEwfWZ1bmN0aW9uIEpuKHQpe3JldHVybih0Lmk9PW51bGwmJmJkKHQpLHQuaSkubGVuZ3RofWZ1bmN0aW9uIEhZdCh0KXtyZXR1cm4gX3QodCw5OSkmJih1KHQsMTgpLkJiJnljKSE9MH1mdW5jdGlvbiBFZW4odCxlKXsrK3QuaixMc3QodCx0LmksZSksaHBuKHQsdShlLDMzMikpfWZ1bmN0aW9uIFdudCh0LGUpe3JldHVybiBlPXQubmsobnVsbCxlKSxsYWUodCxudWxsLGUpfWZ1bmN0aW9uIGdzKHQsZSl7cmV0dXJuIHQuaGkoKSYmKGU9ZlF0KHQsZSkpLHQuV2goZSl9ZnVuY3Rpb24gTih0LGUsbil7dmFyIHI7cmV0dXJuIHI9S250KHQsZSksSWVlKG4scikscn1mdW5jdGlvbiBLbnQodCxlKXt2YXIgbjtyZXR1cm4gbj1uZXcgbXl0LG4uaj10LG4uZD1lLG59ZnVuY3Rpb24gRHIodCl7aWYodD09bnVsbCl0aHJvdyBudChuZXcgTFQpO3JldHVybiB0fWZ1bmN0aW9uIFludCh0KXt2YXIgZTtyZXR1cm4gZT10LmosZXx8KHQuaj1uZXcgZnR0KHQpKX1mdW5jdGlvbiBWWXQodCl7dmFyIGU7cmV0dXJuIGU9dC5mLGV8fCh0LmY9bmV3IGcydCh0KSl9ZnVuY3Rpb24gaHd0KHQpe3ZhciBlO3JldHVybiBlPXQuayxlfHwodC5rPW5ldyBEMyh0KSl9ZnVuY3Rpb24gWWoodCl7dmFyIGU7cmV0dXJuIGU9dC5rLGV8fCh0Lms9bmV3IEQzKHQpKX1mdW5jdGlvbiBTXyh0KXt2YXIgZTtyZXR1cm4gZT10LmcsZXx8KHQuZz1uZXcgUUwodCkpfWZ1bmN0aW9uIFRlbih0KXt2YXIgZTtyZXR1cm4gZT10LmksZXx8KHQuaT1uZXcgaXR0KHQpKX1mdW5jdGlvbiBYbnQodCl7dmFyIGU7cmV0dXJuIGU9dC5kLGV8fCh0LmQ9bmV3IG82KHQpKX1mdW5jdGlvbiBHWXQodCl7cmV0dXJuIERyKHQpLF90KHQsNDc1KT91KHQsNDc1KTpXbyh0KX1mdW5jdGlvbiBmd3QodCl7cmV0dXJuIF90KHQsNjA3KT90Om5ldyB0UXQodCl9ZnVuY3Rpb24gVVl0KHQsZSl7cmV0dXJuIG9EKGUsdC5jLmIuYy5nYygpKSxuZXcgVkh0KHQsZSl9ZnVuY3Rpb24gV1l0KHQsZSxuKXtyZXR1cm4geWkoKSxuZXcgcVF0KHQsZSxuKX1mdW5jdGlvbiBscyh0LGUsbil7cmV0dXJuIGlRZShuPT1udWxsfHxkbW4odCxuKSksdFtlXT1ufWZ1bmN0aW9uIGR3dCh0LGUpe3ZhciBuO3JldHVybiBuPXQuYS5nYygpLG9EKGUsbiksbi0xLWV9ZnVuY3Rpb24gdjgodCxlKXtyZXR1cm4gdC5hKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGUpLHR9ZnVuY3Rpb24gJHAodCxlKXtyZXR1cm4gdC5hKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGUpLHR9ZnVuY3Rpb24gUW50KHQsZSl7Zm9yKEluKGUpO3QuYzx0LmQ7KXQuemUoZSx0LmMrKyl9ZnVuY3Rpb24gdHIodCxlKXtyZXR1cm4gaGEoZSk/amModCxlKTpjYyhGbyh0LmYsZSkpfWZ1bmN0aW9uIF9lbih0LGUpe3JldHVybiBSNigpLHQ9PVpkKGUpP1pwKGUpOlpkKGUpfWZ1bmN0aW9uIENlbih0LGUpe0Y2KHQsbmV3IEhtKGUuZiE9bnVsbD9lLmY6IiIrZS5nKSl9ZnVuY3Rpb24gU2VuKHQsZSl7RjYodCxuZXcgSG0oZS5mIT1udWxsP2UuZjoiIitlLmcpKX1mdW5jdGlvbiBLWXQodCl7dGhpcy5iPW5ldyBsZSx0aGlzLmE9bmV3IGxlLHRoaXMuYz10fWZ1bmN0aW9uIExoKHQpe3RoaXMuYz1uZXcgRGEsdGhpcy5hPW5ldyBsZSx0aGlzLmI9dH1mdW5jdGlvbiBZWXQodCl7UTJ0LmNhbGwodGhpcyksdGhpcy5hPW5ldyBEYSx0aGlzLmM9dH1mdW5jdGlvbiBIbSh0KXtpZih0PT1udWxsKXRocm93IG50KG5ldyBMVCk7dGhpcy5hPXR9ZnVuY3Rpb24gWFl0KHQpe2twdCgpLHRoaXMuYj1uZXcgbGUsdGhpcy5hPXQsVDNuKHRoaXMsdCl9ZnVuY3Rpb24gUVl0KHQpe3RoaXMuYz10LHRoaXMuYT1uZXcgY3MsdGhpcy5iPW5ldyBjc31mdW5jdGlvbiBaWXQoKXtaWXQ9WCxiZ2U9bmV3ICRrKCExKSx2Z2U9bmV3ICRrKCEwKX1mdW5jdGlvbiBWbSgpe1ZtPVgsZmQoKSxtdXQ9bmV3IHVydCgocG4oKSxwbigpLHVvKSl9ZnVuY3Rpb24gWm50KCl7Wm50PVgsZmQoKSxHOHQ9bmV3IHZidCgocG4oKSxwbigpLFVIKSl9ZnVuY3Rpb24genAoKXt6cD1YLEFuPWxwbigpLGxuKCksdDMmJnYxbigpfWZ1bmN0aW9uIEFlbih0LGUpe3JldHVybiBZNigpLHUoeG8odCxlLmQpLDE1KS5GYyhlKX1mdW5jdGlvbiBMZW4odCxlLG4scil7cmV0dXJuIG49PTB8fChuLXIpL248dC5lfHxlPj10Lmd9ZnVuY3Rpb24gSm50KHQsZSxuKXt2YXIgcjtyZXR1cm4gcj1saXQodCxlLG4pLFI1dCh0LHIpfWZ1bmN0aW9uIEY2KHQsZSl7dmFyIG47bj10LmEubGVuZ3RoLFhtKHQsbiksQXJ0KHQsbixlKX1mdW5jdGlvbiBKWXQodCxlKXt2YXIgbjtuPWNvbnNvbGVbdF0sbi5jYWxsKGNvbnNvbGUsZSl9ZnVuY3Rpb24gdFh0KHQsZSl7dmFyIG47Kyt0Lmosbj10LlZpKCksdC5JaSh0Lm9pKG4sZSkpfWZ1bmN0aW9uIE1lbih0LGUsbil7dShlLmIsNjUpLF91KGUuYSxuZXcgdnZ0KHQsbixlKSl9ZnVuY3Rpb24gZ3d0KHQsZSxuKXtvUi5jYWxsKHRoaXMsZSksdGhpcy5hPXQsdGhpcy5iPW59ZnVuY3Rpb24gcHd0KHQsZSxuKXt2di5jYWxsKHRoaXMsdCksdGhpcy5hPWUsdGhpcy5iPW59ZnVuY3Rpb24gYnd0KHQsZSxuKXt0aGlzLmE9dCxwcHQuY2FsbCh0aGlzLGUpLHRoaXMuYj1ufWZ1bmN0aW9uIGVYdCh0LGUsbil7dGhpcy5hPXQsVXd0LmNhbGwodGhpcyw4LGUsbnVsbCxuKX1mdW5jdGlvbiBEZW4odCl7dGhpcy5hPShJbihaciksWnIpLHRoaXMuYj10LG5ldyBGcHR9ZnVuY3Rpb24gblh0KHQpe3RoaXMuYz10LHRoaXMuYj10aGlzLmMuYSx0aGlzLmE9dGhpcy5jLmV9ZnVuY3Rpb24gdnd0KHQpe3RoaXMuYz10LHRoaXMuYj10LmEuZC5hLFIydCh0LmEuZSx0aGlzKX1mdW5jdGlvbiBEbCh0KXtQbSh0LmMhPS0xKSx0LmQuJGModC5jKSx0LmI9dC5jLHQuYz0tMX1mdW5jdGlvbiBBXyh0KXtyZXR1cm4gYi5NYXRoLnNxcnQodC5hKnQuYSt0LmIqdC5iKX1mdW5jdGlvbiBSdih0LGUpe3JldHVybiBnOChlLHQuYS5jLmxlbmd0aCksUGUodC5hLGUpfWZ1bmN0aW9uIGRkKHQsZSl7cmV0dXJuIEd0KHQpPT09R3QoZSl8fHQhPW51bGwmJlNpKHQsZSl9ZnVuY3Rpb24gSWVuKHQpe3JldHVybiAwPj10P25ldyB1YnQ6d29uKHQtMSl9ZnVuY3Rpb24gT2VuKHQpe3JldHVybiBuMz9jcnQobjMsdCk6ITF9ZnVuY3Rpb24gclh0KHQpe3JldHVybiB0P3QuZGMoKTohdC5LYygpLk9iKCl9ZnVuY3Rpb24gJGEodCl7cmV0dXJuIXQuYSYmdC5jP3QuYy5iOnQuYX1mdW5jdGlvbiBOZW4odCl7cmV0dXJuIXQuYSYmKHQuYT1uZXcgQnMoVGIsdCw0KSksdC5hfWZ1bmN0aW9uIGp2KHQpe3JldHVybiF0LmQmJih0LmQ9bmV3IEJzKHdvLHQsMSkpLHQuZH1mdW5jdGlvbiBJbih0KXtpZih0PT1udWxsKXRocm93IG50KG5ldyBMVCk7cmV0dXJuIHR9ZnVuY3Rpb24gTF8odCl7dC5jP3QuYy5IZSgpOih0LmQ9ITAsajJuKHQpKX1mdW5jdGlvbiBxcCh0KXt0LmM/cXAodC5jKToocDIodCksdC5kPSEwKX1mdW5jdGlvbiBpWHQodCl7eHd0KHQuYSksdC5iPU50KFFuLE1lLDEsdC5iLmxlbmd0aCw1LDEpfWZ1bmN0aW9uIFBlbih0LGUpe3JldHVybiBtdShlLmouYy5sZW5ndGgsdC5qLmMubGVuZ3RoKX1mdW5jdGlvbiBGZW4odCxlKXt0LmM8MHx8dC5iLmI8dC5jP1hiKHQuYixlKTp0LmEuX2UoZSl9ZnVuY3Rpb24gQmVuKHQsZSl7dmFyIG47bj10LllnKGUpLG4+PTA/dC5CaChuKTpLNHQodCxlKX1mdW5jdGlvbiBzWHQodCl7dmFyIGUsbjtyZXR1cm4gZT10LmMuaS5jLG49dC5kLmkuYyxlPT1ufWZ1bmN0aW9uIFJlbih0KXtpZih0LnAhPTQpdGhyb3cgbnQobmV3IFJ1KTtyZXR1cm4gdC5lfWZ1bmN0aW9uIGplbih0KXtpZih0LnAhPTMpdGhyb3cgbnQobmV3IFJ1KTtyZXR1cm4gdC5lfWZ1bmN0aW9uICRlbih0KXtpZih0LnAhPTYpdGhyb3cgbnQobmV3IFJ1KTtyZXR1cm4gdC5mfWZ1bmN0aW9uIHplbih0KXtpZih0LnAhPTYpdGhyb3cgbnQobmV3IFJ1KTtyZXR1cm4gdC5rfWZ1bmN0aW9uIHFlbih0KXtpZih0LnAhPTMpdGhyb3cgbnQobmV3IFJ1KTtyZXR1cm4gdC5qfWZ1bmN0aW9uIEhlbih0KXtpZih0LnAhPTQpdGhyb3cgbnQobmV3IFJ1KTtyZXR1cm4gdC5qfWZ1bmN0aW9uIHd3dCh0KXtyZXR1cm4hdC5iJiYodC5iPW5ldyBjUihuZXcgUXR0KSksdC5ifWZ1bmN0aW9uICR2KHQpe3JldHVybiB0LmM9PS0yJiZIayh0LG8wbih0LmcsdC5iKSksdC5jfWZ1bmN0aW9uIHc4KHQsZSl7dmFyIG47cmV0dXJuIG49S250KCIiLHQpLG4ubj1lLG4uaT0xLG59ZnVuY3Rpb24gVmVuKHQsZSl7T250KHUoZS5iLDY1KSx0KSxfdShlLmEsbmV3IHJpKHQpKX1mdW5jdGlvbiBHZW4odCxlKXtPcigoIXQuYSYmKHQuYT1uZXcgJE0odCx0KSksdC5hKSxlKX1mdW5jdGlvbiBhWHQodCxlKXt0aGlzLmI9dCxWbnQuY2FsbCh0aGlzLHQsZSksT1V0KHRoaXMpfWZ1bmN0aW9uIG9YdCh0LGUpe3RoaXMuYj10LG92dC5jYWxsKHRoaXMsdCxlKSxOVXQodGhpcyl9ZnVuY3Rpb24gbXd0KHQsZSxuLHIpe0N2LmNhbGwodGhpcyx0LGUpLHRoaXMuZD1uLHRoaXMuYT1yfWZ1bmN0aW9uIFhqKHQsZSxuLHIpe0N2LmNhbGwodGhpcyx0LG4pLHRoaXMuYT1lLHRoaXMuZj1yfWZ1bmN0aW9uIGNYdCh0LGUpe19YZS5jYWxsKHRoaXMsbW9uKERyKHQpLERyKGUpKSksdGhpcy5hPWV9ZnVuY3Rpb24gdVh0KCl7QzR0LmNhbGwodGhpcyxEMiwoZkh0KCksbDVlKSksZDNuKHRoaXMpfWZ1bmN0aW9uIGxYdCgpe0M0dC5jYWxsKHRoaXMsamgsKFprKCksWEF0KSksa3luKHRoaXMpfWZ1bmN0aW9uIGhYdCgpe0tyLmNhbGwodGhpcywiREVMQVVOQVlfVFJJQU5HVUxBVElPTiIsMCl9ZnVuY3Rpb24gVWVuKHQpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsdCl9ZnVuY3Rpb24gQWkodCxlLG4pe3JldHVybiBoYShlKT9Bbyh0LGUsbik6bHUodC5mLGUsbil9ZnVuY3Rpb24geXd0KHQpe3JldHVybiBwbigpLHQ/dC52ZSgpOihRMygpLFEzKCksdzd0KX1mdW5jdGlvbiBXZW4odCxlLG4pe3JldHVybiBYNigpLG4ucGcodCx1KGUuY2QoKSwxNDYpKX1mdW5jdGlvbiBmWHQodCxlKXtyZXR1cm4gTWooKSxuZXcgRDN0KG5ldyBXVXQodCksbmV3IFVVdChlKSl9ZnVuY3Rpb24gS2VuKHQpe3JldHVybiBxbCh0LGphdCkscSQoUmEoUmEoNSx0KSx0LzEwfDApKX1mdW5jdGlvbiBRaigpe1FqPVgsdWdlPW5ldyB0ZXQodXQob3QoSTIsMSksSXEsNDIsMCxbXSkpfWZ1bmN0aW9uIGRYdCh0KXtyZXR1cm4hdC5kJiYodC5kPW5ldyBUKHQuYy5DYygpKSksdC5kfWZ1bmN0aW9uIG04KHQpe3JldHVybiF0LmEmJih0LmE9bmV3IFdxdCh0LmMudmMoKSkpLHQuYX1mdW5jdGlvbiBnWHQodCl7cmV0dXJuIXQuYiYmKHQuYj1uZXcgWWsodC5jLmVjKCkpKSx0LmJ9ZnVuY3Rpb24gV2QodCxlKXtmb3IoO2UtLSA+MDspdD10PDwxfCh0PDA/MTowKTtyZXR1cm4gdH1mdW5jdGlvbiBSYyh0LGUpe3JldHVybiBHdCh0KT09PUd0KGUpfHx0IT1udWxsJiZTaSh0LGUpfWZ1bmN0aW9uIFllbih0LGUpe3JldHVybiBGbigpLHUoZS5iLDE5KS5hPHR9ZnVuY3Rpb24gWGVuKHQsZSl7cmV0dXJuIEZuKCksdShlLmEsMTkpLmE8dH1mdW5jdGlvbiB4byh0LGUpe3JldHVybiBJbnQodC5hLGUpP3QuYlt1KGUsMjIpLmddOm51bGx9ZnVuY3Rpb24gUWVuKHQsZSxuLHIpe3QuYT1CbCh0LmEsMCxlKSsoIiIrcikrT00odC5hLG4pfWZ1bmN0aW9uIHBYdCh0LGUpe3QudS5IYygoaWwoKSx0ZykpJiZlcG4odCxlKSxCc24odCxlKX1mdW5jdGlvbiBUYSh0LGUpe3JldHVybiAkcihlLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoZSl9ZnVuY3Rpb24gYlh0KCl7Wm8uY2FsbCh0aGlzLCJUaGVyZSBpcyBubyBtb3JlIGVsZW1lbnQuIil9ZnVuY3Rpb24gTV8odCl7dGhpcy5kPXQsdGhpcy5hPXRoaXMuZC5iLHRoaXMuYj10aGlzLmQuY31mdW5jdGlvbiB2WHQodCl7dC5iPSExLHQuYz0hMSx0LmQ9ITEsdC5hPSExfWZ1bmN0aW9uIGxpKHQsZSxuLHIpe3JldHVybiBibmUodCxlLG4sITEpLHh6KHQsciksdH1mdW5jdGlvbiBaZW4odCl7cmV0dXJuIHQuai5jPU50KFFuLE1lLDEsMCw1LDEpLHQuYT0tMSx0fWZ1bmN0aW9uIEplbih0KXtyZXR1cm4hdC5jJiYodC5jPW5ldyBFbih2cix0LDUsOCkpLHQuY31mdW5jdGlvbiB0bm4odCl7cmV0dXJuIXQuYiYmKHQuYj1uZXcgRW4odnIsdCw0LDcpKSx0LmJ9ZnVuY3Rpb24gWmoodCl7cmV0dXJuIXQubiYmKHQubj1uZXcgaGUoWW8sdCwxLDcpKSx0Lm59ZnVuY3Rpb24gdHJ0KHQpe3JldHVybiF0LmMmJih0LmM9bmV3IGhlKHlsLHQsOSw5KSksdC5jfWZ1bmN0aW9uIHk4KHQpe3JldHVybiB0LmU9PVY3JiZocHQodCx3aG4odC5nLHQuYikpLHQuZX1mdW5jdGlvbiBaTSh0KXtyZXR1cm4gdC5mPT1WNyYmTHR0KHQsczFuKHQuZyx0LmIpKSx0LmZ9ZnVuY3Rpb24gWDModCl7dmFyIGU7cmV0dXJuIGU9dC5iLCFlJiYodC5iPWU9bmV3IFpMKHQpKSxlfWZ1bmN0aW9uIHh3dCh0KXt2YXIgZTtmb3IoZT10LktjKCk7ZS5PYigpOyllLlBiKCksZS5RYigpfWZ1bmN0aW9uIHg4KHQpe2lmKGdsKHQuZCksdC5kLmQhPXQuYyl0aHJvdyBudChuZXcgc2gpfWZ1bmN0aW9uIGt3dCh0LGUpe3RoaXMuYj10LHRoaXMuYz1lLHRoaXMuYT1uZXcgazYodGhpcy5iKX1mdW5jdGlvbiBlcnQodCxlLG4pe3RoaXMuYT1ENnQsdGhpcy5kPXQsdGhpcy5iPWUsdGhpcy5jPW59ZnVuY3Rpb24gd1h0KHQsZSl7dGhpcy5kPShJbih0KSx0KSx0aGlzLmE9MTY0NDksdGhpcy5jPWV9ZnVuY3Rpb24gZW5uKHQsZSl7WHJlKHQsWnQoUjAoZSwieCIpKSxadChSMChlLCJ5IikpKX1mdW5jdGlvbiBubm4odCxlKXtYcmUodCxadChSMChlLCJ4IikpLFp0KFIwKGUsInkiKSkpfWZ1bmN0aW9uIFdpKHQsZSl7cmV0dXJuIHAyKHQpLG5ldyBrbih0LG5ldyBDbXQoZSx0LmEpKX1mdW5jdGlvbiB4dSh0LGUpe3JldHVybiBwMih0KSxuZXcga24odCxuZXcgZ210KGUsdC5hKSl9ZnVuY3Rpb24gSmoodCxlKXtyZXR1cm4gcDIodCksbmV3IHoydCh0LG5ldyBTSnQoZSx0LmEpKX1mdW5jdGlvbiB0JCh0LGUpe3JldHVybiBwMih0KSxuZXcgcTJ0KHQsbmV3IEFKdChlLHQuYSkpfWZ1bmN0aW9uIHJubih0LGUpe3JldHVybiBuZXcgVVh0KHUoRHIodCksNjIpLHUoRHIoZSksNjIpKX1mdW5jdGlvbiBpbm4odCxlKXtyZXR1cm4gZmJ0KCksanMoKEluKHQpLHQpLChJbihlKSxlKSl9ZnVuY3Rpb24gc25uKCl7cmV0dXJuIEFSKCksdXQob3QodEV0LDEpLG9lLDQ4MSwwLFskdXRdKX1mdW5jdGlvbiBhbm4oKXtyZXR1cm4gTVIoKSx1dChvdChHQ3QsMSksb2UsNDgyLDAsW1ZodF0pfWZ1bmN0aW9uIG9ubigpe3JldHVybiBEUigpLHV0KG90KHMzZSwxKSxvZSw1NTEsMCxbR2h0XSl9ZnVuY3Rpb24gY25uKCl7cmV0dXJuIEhUKCksdXQob3QoZlN0LDEpLG9lLDUzMCwwLFtqT10pfWZ1bmN0aW9uIG1YdCh0KXt0aGlzLmE9bmV3IGxlLHRoaXMuZT1OdChTcixyZSw0OCx0LDAsMil9ZnVuY3Rpb24gbnJ0KHQsZSxuLHIpe3RoaXMuYT10LHRoaXMuZT1lLHRoaXMuZD1uLHRoaXMuYz1yfWZ1bmN0aW9uIGUkKHQsZSxuLHIpe3RoaXMuYT10LHRoaXMuYz1lLHRoaXMuYj1uLHRoaXMuZD1yfWZ1bmN0aW9uIEV3dCh0LGUsbixyKXt0aGlzLmM9dCx0aGlzLmI9ZSx0aGlzLmE9bix0aGlzLmQ9cn1mdW5jdGlvbiB5WHQodCxlLG4scil7dGhpcy5jPXQsdGhpcy5iPWUsdGhpcy5kPW4sdGhpcy5hPXJ9ZnVuY3Rpb24gY2godCxlLG4scil7dGhpcy5jPXQsdGhpcy5kPWUsdGhpcy5iPW4sdGhpcy5hPXJ9ZnVuY3Rpb24geFh0KHQsZSxuLHIpe3RoaXMuYT10LHRoaXMuZD1lLHRoaXMuYz1uLHRoaXMuYj1yfWZ1bmN0aW9uIEI2KHQsZSxuLHIpe0tyLmNhbGwodGhpcyx0LGUpLHRoaXMuYT1uLHRoaXMuYj1yfWZ1bmN0aW9uIGtYdCh0LGUsbixyKXt0aGlzLmE9dCx0aGlzLmM9ZSx0aGlzLmQ9bix0aGlzLmI9cn1mdW5jdGlvbiB1bm4odCxlLG4pe215bih0LmEsbiksYmNuKG4pLFVwbih0LmIsbiksQnluKGUsbil9ZnVuY3Rpb24gcnJ0KHQsZSxuKXt2YXIgcixzO3JldHVybiByPXk2dCh0KSxzPWUuS2gobixyKSxzfWZ1bmN0aW9uIEVYdCh0LGUpe3ZhciBuLHI7cmV0dXJuIG49dC9lLHI9Q3Mobiksbj5yJiYrK3Iscn1mdW5jdGlvbiBEMCh0KXt2YXIgZSxuO3JldHVybiBuPShlPW5ldyB3dixlKSxPOChuLHQpLG59ZnVuY3Rpb24gaXJ0KHQpe3ZhciBlLG47cmV0dXJuIG49KGU9bmV3IHd2LGUpLEw0dChuLHQpLG59ZnVuY3Rpb24gbG5uKHQsZSl7dmFyIG47cmV0dXJuIG49dHIodC5mLGUpLGF5dChlLG4pLG51bGx9ZnVuY3Rpb24gc3J0KHQpe3ZhciBlO3JldHVybiBlPXhvbih0KSxlfHxudWxsfWZ1bmN0aW9uIFRYdCh0KXtyZXR1cm4hdC5iJiYodC5iPW5ldyBoZShyYSx0LDEyLDMpKSx0LmJ9ZnVuY3Rpb24gaG5uKHQpe3JldHVybiB0IT1udWxsJiZwTShyVSx0LnRvTG93ZXJDYXNlKCkpfWZ1bmN0aW9uIGZubih0LGUpe3JldHVybiBqcyhIdSh0KSpMbCh0KSxIdShlKSpMbChlKSl9ZnVuY3Rpb24gZG5uKHQsZSl7cmV0dXJuIGpzKEh1KHQpKkxsKHQpLEh1KGUpKkxsKGUpKX1mdW5jdGlvbiBnbm4odCxlKXtyZXR1cm4ganModC5kLmMrdC5kLmIvMixlLmQuYytlLmQuYi8yKX1mdW5jdGlvbiBwbm4odCxlKXtyZXR1cm4ganModC5nLmMrdC5nLmIvMixlLmcuYytlLmcuYi8yKX1mdW5jdGlvbiBfWHQodCxlLG4pe24uYT9TdSh0LGUuYi10LmYvMik6Q3UodCxlLmEtdC5nLzIpfWZ1bmN0aW9uIENYdCh0LGUsbixyKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmM9bix0aGlzLmQ9cn1mdW5jdGlvbiBTWHQodCxlLG4scil7dGhpcy5hPXQsdGhpcy5iPWUsdGhpcy5jPW4sdGhpcy5kPXJ9ZnVuY3Rpb24gdDIodCxlLG4scil7dGhpcy5lPXQsdGhpcy5hPWUsdGhpcy5jPW4sdGhpcy5kPXJ9ZnVuY3Rpb24gQVh0KHQsZSxuLHIpe3RoaXMuYT10LHRoaXMuYz1lLHRoaXMuZD1uLHRoaXMuYj1yfWZ1bmN0aW9uIExYdCh0LGUsbixyKXthaCgpLHhKdC5jYWxsKHRoaXMsZSxuLHIpLHRoaXMuYT10fWZ1bmN0aW9uIE1YdCh0LGUsbixyKXthaCgpLHhKdC5jYWxsKHRoaXMsZSxuLHIpLHRoaXMuYT10fWZ1bmN0aW9uIERYdCh0LGUpe3RoaXMuYT10LHhRZS5jYWxsKHRoaXMsdCx1KHQuZCwxNSkuWmMoZSkpfWZ1bmN0aW9uIGFydCh0KXt0aGlzLmY9dCx0aGlzLmM9dGhpcy5mLmUsdC5mPjAmJkhzZSh0aGlzKX1mdW5jdGlvbiBJWHQodCxlLG4scil7dGhpcy5iPXQsdGhpcy5jPXIsVWV0LmNhbGwodGhpcyxlLG4pfWZ1bmN0aW9uIE9YdCh0KXtyZXR1cm4gWm4odC5iPHQuZC5nYygpKSx0LmQuWGIodC5jPXQuYisrKX1mdW5jdGlvbiBNaCh0KXt0LmEuYT10LmMsdC5jLmI9dC5hLHQuYS5iPXQuYy5hPW51bGwsdC5iPTB9ZnVuY3Rpb24gVHd0KHQsZSl7cmV0dXJuIHQuYj1lLmIsdC5jPWUuYyx0LmQ9ZS5kLHQuYT1lLmEsdH1mdW5jdGlvbiBuJCh0KXtyZXR1cm4gdC5uJiYodC5lIT09SmhlJiZ0Ll9kKCksdC5qPW51bGwpLHR9ZnVuY3Rpb24gTlh0KHQpe3JldHVybiBtXyh0PT1udWxsfHxIbnQodCkmJnQuaW0hPT1GdCksdH1mdW5jdGlvbiBQWHQodCl7dGhpcy5iPW5ldyBsZSxScyh0aGlzLmIsdGhpcy5iKSx0aGlzLmE9dH1mdW5jdGlvbiBSNigpe1I2PVgsblY9bmV3IGxlLFZ1dD1uZXcgQXIsSHV0PW5ldyBsZX1mdW5jdGlvbiBwbigpe3BuPVgsdW89bmV3IHR0LGEwPW5ldyBwdCxVSD1uZXcgQ3R9ZnVuY3Rpb24gUTMoKXtRMz1YLGI3dD1uZXcgX24sdjd0PW5ldyBfbix3N3Q9bmV3IFRlfWZ1bmN0aW9uIF93dCgpe193dD1YLHpnZT1uZXcgcXIsSGdlPW5ldyBWdnQscWdlPW5ldyBPaX1mdW5jdGlvbiBibm4oKXtMN3Q9PTI1NiYmKEE3dD1ZSCxZSD1uZXcgQyxMN3Q9MCksKytMN3R9ZnVuY3Rpb24gajYodCl7dmFyIGU7cmV0dXJuIGU9dC5mLGV8fCh0LmY9bmV3IHQ4KHQsdC5jKSl9ZnVuY3Rpb24gdm5uKHQpe3JldHVybiB1dyh0KSYmQmUoRmUoemUodCwoeGUoKSxCMikpKSl9ZnVuY3Rpb24gd25uKHQsZSl7cmV0dXJuIGNuKHQsdShLKGUsKHhlKCksZ0UpKSwxOSksZSl9ZnVuY3Rpb24gRlh0KHQsZSl7cmV0dXJuIG80KHQuaixlLnMsZS5jKStvNChlLmUsdC5zLHQuYyl9ZnVuY3Rpb24gQlh0KHQsZSl7dC5lJiYhdC5lLmEmJihGenQodC5lLGUpLEJYdCh0LmUsZSkpfWZ1bmN0aW9uIFJYdCh0LGUpe3QuZCYmIXQuZC5hJiYoRnp0KHQuZCxlKSxSWHQodC5kLGUpKX1mdW5jdGlvbiBtbm4odCxlKXtyZXR1cm4tanMoSHUodCkqTGwodCksSHUoZSkqTGwoZSkpfWZ1bmN0aW9uIHlubih0KXtyZXR1cm4gdSh0LmNkKCksMTQ2KS50ZygpKyI6IitXbyh0LmRkKCkpfWZ1bmN0aW9uIHhubih0KXtkZigpO3ZhciBlO2U9dSh0LmcsMTApLGUubi5hPXQuZC5jK2UuZC5ifWZ1bmN0aW9uIGtubih0LGUsbil7cmV0dXJuIHFUKCksZGxuKHUodHIodC5lLGUpLDUyMiksbil9ZnVuY3Rpb24gRW5uKHQsZSl7cmV0dXJuIGRsKHQpLGRsKGUpLFJxdCh1KHQsMjIpLHUoZSwyMikpfWZ1bmN0aW9uIFRubih0LGUsbil7dC5pPTAsdC5lPTAsZSE9biYmc3JlKHQsZSxuKX1mdW5jdGlvbiBfbm4odCxlLG4pe3QuaT0wLHQuZT0wLGUhPW4mJmFyZSh0LGUsbil9ZnVuY3Rpb24gZTIodCxlLG4pe3ZhciByLHM7cj11dnQobikscz1uZXcgeVQociksUWYodCxlLHMpfWZ1bmN0aW9uIG9ydCh0LGUsbixyLHMsbyl7Z0QuY2FsbCh0aGlzLHQsZSxuLHIscyxvPy0yOi0xKX1mdW5jdGlvbiBqWHQodCxlLG4scil7R2J0LmNhbGwodGhpcyxlLG4pLHRoaXMuYj10LHRoaXMuYT1yfWZ1bmN0aW9uIEN3dCh0LGUpe25ldyBjcyx0aGlzLmE9bmV3IGp1LHRoaXMuYj10LHRoaXMuYz1lfWZ1bmN0aW9uIENubih0LGUpe3JldHVybiB1KEsodCwoYWUoKSxNeCkpLDE1KS5GYyhlKSxlfWZ1bmN0aW9uIHIkKHQsZSl7aWYodD09bnVsbCl0aHJvdyBudChuZXcgbTYoZSkpO3JldHVybiB0fWZ1bmN0aW9uIEJpKHQpe3JldHVybiF0LnEmJih0LnE9bmV3IGhlKFloLHQsMTEsMTApKSx0LnF9ZnVuY3Rpb24gS3QodCl7cmV0dXJuIXQucyYmKHQucz1uZXcgaGUoTnUsdCwyMSwxNykpLHQuc31mdW5jdGlvbiBpJCh0KXtyZXR1cm4hdC5hJiYodC5hPW5ldyBoZShkcyx0LDEwLDExKSksdC5hfWZ1bmN0aW9uIHMkKHQpe3JldHVybiBfdCh0LDE0KT9uZXcgeV8odSh0LDE0KSk6cnRuKHQuS2MoKSl9ZnVuY3Rpb24gU25uKHQpe3JldHVybiBuZXcgalV0KHQsdC5lLkhkKCkuZ2MoKSp0LmMuSGQoKS5nYygpKX1mdW5jdGlvbiBBbm4odCl7cmV0dXJuIG5ldyAkVXQodCx0LmUuSGQoKS5nYygpKnQuYy5IZCgpLmdjKCkpfWZ1bmN0aW9uIFN3dCh0KXtyZXR1cm4gdCYmdC5oYXNoQ29kZT90Lmhhc2hDb2RlKCk6RHYodCl9ZnVuY3Rpb24gY3J0KHQsZSl7cmV0dXJuIGU9PW51bGw/ISFGbyh0LmYsbnVsbCk6SHRuKHQuZyxlKX1mdW5jdGlvbiBMbm4odCl7cmV0dXJuIERyKHQpLG9zZShuZXcgYXIobHIodC5hLktjKCksbmV3IEgpKSl9ZnVuY3Rpb24gSk0odCl7cmV0dXJuIHBuKCksX3QodCw1NCk/bmV3IHVldCh0KTpuZXcgZmoodCl9ZnVuY3Rpb24gJFh0KHQsZSxuKXtyZXR1cm4gdC5mP3QuZi5OZShlLG4pOiExfWZ1bmN0aW9uIE1ubih0LGUpe3JldHVybiB0LmE9QmwodC5hLDAsZSkrIiIrT00odC5hLGUrMSksdH1mdW5jdGlvbiBEbm4odCxlKXt2YXIgbjtyZXR1cm4gbj11MnQodC5hLGUpLG4mJihlLmQ9bnVsbCksbn1mdW5jdGlvbiBhJCh0KXt2YXIgZSxuO249dCxlPW4uJG1vZENvdW50fDAsbi4kbW9kQ291bnQ9ZSsxfWZ1bmN0aW9uIEF3dCh0KXt0aGlzLmI9dCx0aGlzLmM9dCx0LmU9bnVsbCx0LmM9bnVsbCx0aGlzLmE9MX1mdW5jdGlvbiB6WHQodCl7dGhpcy5iPXQsdGhpcy5hPW5ldyBEcCh1KERyKG5ldyBvcyksNjIpKX1mdW5jdGlvbiBxWHQodCl7dGhpcy5jPXQsdGhpcy5iPW5ldyBEcCh1KERyKG5ldyBnciksNjIpKX1mdW5jdGlvbiBIWHQodCl7dGhpcy5jPXQsdGhpcy5iPW5ldyBEcCh1KERyKG5ldyBqNSksNjIpKX1mdW5jdGlvbiBWWHQoKXt0aGlzLmE9bmV3IE1wdCx0aGlzLmI9bmV3IGNxdCx0aGlzLmQ9bmV3IEtQfWZ1bmN0aW9uIHp2KCl7dGhpcy5hPW5ldyBqdSx0aGlzLmI9KHFsKDMsbXkpLG5ldyBKYygzKSl9ZnVuY3Rpb24gR1h0KCl7dGhpcy5iPW5ldyBRcyx0aGlzLmQ9bmV3IGNzLHRoaXMuZT1uZXcgSXB0fWZ1bmN0aW9uIG8kKHQpe3RoaXMuYz10LmMsdGhpcy5kPXQuZCx0aGlzLmI9dC5iLHRoaXMuYT10LmF9ZnVuY3Rpb24gVVh0KHQsZSl7ZktlLmNhbGwodGhpcyxuZXcgam50KHQpKSx0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBXWHQoKXtOc3QodGhpcyxuZXcgcUIpLHRoaXMud2I9KHpwKCksQW4pLFprKCl9ZnVuY3Rpb24gSW5uKHQpe21yKHQsIk5vIGNyb3NzaW5nIG1pbmltaXphdGlvbiIsMSksb3IodCl9ZnVuY3Rpb24gT25uKHQpe3ZSKCksYi5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgdH0sMCl9ZnVuY3Rpb24gUG8odCl7cmV0dXJuIHQudXx8KGhsKHQpLHQudT1uZXcgTVd0KHQsdCkpLHQudX1mdW5jdGlvbiBrdSh0KXt2YXIgZTtyZXR1cm4gZT11KE1uKHQsMTYpLDI2KSxlfHx0LnpoKCl9ZnVuY3Rpb24gS1h0KHQsZSl7cmV0dXJuIF90KGUsMTQ2KSYmdW4odC5iLHUoZSwxNDYpLnRnKCkpfWZ1bmN0aW9uIE5ubih0LGUpe3JldHVybiB0LmE/ZS5XZygpLktjKCk6dShlLldnKCksNjkpLlpoKCl9ZnVuY3Rpb24gUG5uKHQpe3JldHVybiB0Lms9PShHbigpLHFzKSYmZWEodCwoYWUoKSxtUykpfWZ1bmN0aW9uIHVydCh0KXt0aGlzLmE9KHBuKCksX3QodCw1NCk/bmV3IHVldCh0KTpuZXcgZmoodCkpfWZ1bmN0aW9uIGs4KCl7azg9WDt2YXIgdCxlO2U9IW5obigpLHQ9bmV3IGZ0LFR1dD1lP25ldyBodDp0fWZ1bmN0aW9uIGxydCh0LGUpe3ZhciBuO3JldHVybiBuPU1wKHQuZ20pLGU9PW51bGw/bjpuKyI6ICIrZX1mdW5jdGlvbiBZWHQodCxlKXt2YXIgbjtyZXR1cm4gbj10LmIuUWMoZSksJFp0KG4sdC5iLmdjKCkpLG59ZnVuY3Rpb24gdEQodCxlKXtpZih0PT1udWxsKXRocm93IG50KG5ldyBtNihlKSk7cmV0dXJuIHR9ZnVuY3Rpb24gRm8odCxlKXtyZXR1cm4geXJlKHQsZSx2cm4odCxlPT1udWxsPzA6dC5iLnNlKGUpKSl9ZnVuY3Rpb24gRm5uKHQsZSxuKXtyZXR1cm4gbj49MCYmdW4odC5zdWJzdHIobixlLmxlbmd0aCksZSl9ZnVuY3Rpb24gSHAodCxlLG4scixzLG8saCl7cmV0dXJuIG5ldyBNcnQodC5lLGUsbixyLHMsbyxoKX1mdW5jdGlvbiBYWHQodCxlLG4scixzLG8pe3RoaXMuYT10LHJpdC5jYWxsKHRoaXMsZSxuLHIscyxvKX1mdW5jdGlvbiBRWHQodCxlLG4scixzLG8pe3RoaXMuYT10LHJpdC5jYWxsKHRoaXMsZSxuLHIscyxvKX1mdW5jdGlvbiBaWHQodCxlKXt0aGlzLmc9dCx0aGlzLmQ9dXQob3QobzAsMSksR2csMTAsMCxbZV0pfWZ1bmN0aW9uIERnKHQsZSl7dGhpcy5lPXQsdGhpcy5hPVFuLHRoaXMuYj14dWUoZSksdGhpcy5jPWV9ZnVuY3Rpb24gSlh0KHQsZSl7eGouY2FsbCh0aGlzKSxQbXQodGhpcyksdGhpcy5hPXQsdGhpcy5jPWV9ZnVuY3Rpb24gZUQodCxlLG4scil7bHModC5jW2UuZ10sbi5nLHIpLGxzKHQuY1tuLmddLGUuZyxyKX1mdW5jdGlvbiBocnQodCxlLG4scil7bHModC5jW2UuZ10sZS5nLG4pLGxzKHQuYltlLmddLGUuZyxyKX1mdW5jdGlvbiBCbm4oKXtyZXR1cm4gbEQoKSx1dChvdChSX3QsMSksb2UsMzc2LDAsW3dodCxJT10pfWZ1bmN0aW9uIFJubigpe3JldHVybiBiRCgpLHV0KG90KE05dCwxKSxvZSw0NzksMCxbTDl0LEZWXSl9ZnVuY3Rpb24gam5uKCl7cmV0dXJuIFREKCksdXQob3QoUzl0LDEpLG9lLDQxOSwwLFtOVixDOXRdKX1mdW5jdGlvbiAkbm4oKXtyZXR1cm4gSSQoKSx1dChvdChtOXQsMSksb2UsNDIyLDAsW3c5dCxtbHRdKX1mdW5jdGlvbiB6bm4oKXtyZXR1cm4geCQoKSx1dChvdChIOXQsMSksb2UsNDIwLDAsW05sdCxxOXRdKX1mdW5jdGlvbiBxbm4oKXtyZXR1cm4geUQoKSx1dChvdChOX3QsMSksb2UsNDIxLDAsW3BodCxiaHRdKX1mdW5jdGlvbiBIbm4oKXtyZXR1cm4gQl8oKSx1dChvdChnbWUsMSksb2UsNTIzLDAsW05TLE9TXSl9ZnVuY3Rpb24gVm5uKCl7cmV0dXJuIFlmKCksdXQob3QoUm1lLDEpLG9lLDUyMCwwLFtVeSx2Yl0pfWZ1bmN0aW9uIEdubigpe3JldHVybiBnZCgpLHV0KG90KHhtZSwxKSxvZSw1MTYsMCxbUncsWmddKX1mdW5jdGlvbiBVbm4oKXtyZXR1cm4gQzEoKSx1dChvdChFbWUsMSksb2UsNTE1LDAsW3oyLFYxXSl9ZnVuY3Rpb24gV25uKCl7cmV0dXJuIHF2KCksdXQob3QoR21lLDEpLG9lLDQ1NSwwLFt3YixuNV0pfWZ1bmN0aW9uIEtubigpe3JldHVybiB2JCgpLHV0KG90KGNDdCwxKSxvZSw0MjUsMCxbT2h0LG9DdF0pfWZ1bmN0aW9uIFlubigpe3JldHVybiBkJCgpLHV0KG90KGFDdCwxKSxvZSw0ODAsMCxbSWh0LHNDdF0pfWZ1bmN0aW9uIFhubigpe3JldHVybiBpeigpLHV0KG90KHVDdCwxKSxvZSw0OTUsMCxbVEcseEVdKX1mdW5jdGlvbiBRbm4oKXtyZXR1cm4gTiQoKSx1dChvdChoQ3QsMSksb2UsNDI2LDAsW2xDdCxCaHRdKX1mdW5jdGlvbiBabm4oKXtyZXR1cm4gTkQoKSx1dChvdChnU3QsMSksb2UsNDI5LDAsW09HLGRTdF0pfWZ1bmN0aW9uIEpubigpe3JldHVybiBoRCgpLHV0KG90KFVDdCwxKSxvZSw0MzAsMCxbVWh0LERHXSl9ZnVuY3Rpb24gdHJuKCl7cmV0dXJuIE56KCksdXQob3QoRDd0LDEpLG9lLDQyOCwwLFtPdXQsTTd0XSl9ZnVuY3Rpb24gZXJuKCl7cmV0dXJuICQkKCksdXQob3QoTzd0LDEpLG9lLDQyNywwLFtJN3QsTnV0XSl9ZnVuY3Rpb24gbnJuKCl7cmV0dXJuIHokKCksdXQob3Qob0V0LDEpLG9lLDQyNCwwLFtHdXQsclZdKX1mdW5jdGlvbiBycm4oKXtyZXR1cm4gJDgoKSx1dChvdChCYmUsMSksb2UsNTExLDAsW3BPLGlsdF0pfWZ1bmN0aW9uIGMkKHQsZSxuLHIpe3JldHVybiBuPj0wP3QuamgoZSxuLHIpOnQuU2cobnVsbCxuLHIpfWZ1bmN0aW9uIGZydCh0KXtyZXR1cm4gdC5iLmI9PTA/dC5hLiRlKCk6VG50KHQuYil9ZnVuY3Rpb24gaXJuKHQpe2lmKHQucCE9NSl0aHJvdyBudChuZXcgUnUpO3JldHVybiBNcih0LmYpfWZ1bmN0aW9uIHNybih0KXtpZih0LnAhPTUpdGhyb3cgbnQobmV3IFJ1KTtyZXR1cm4gTXIodC5rKX1mdW5jdGlvbiBMd3QodCl7cmV0dXJuIEd0KHQuYSk9PT1HdCgoZGl0KCksQWZ0KSkmJmEzbih0KSx0LmF9ZnVuY3Rpb24gdFF0KHQpe3RoaXMuYT11KERyKHQpLDI3MSksdGhpcy5iPShwbigpLG5ldyBrMnQodCkpfWZ1bmN0aW9uIGVRdCh0LGUpe2NwdCh0aGlzLG5ldyBSZSh0LmEsdC5iKSksWEIodGhpcyxVTShlKSl9ZnVuY3Rpb24gcXYoKXtxdj1YLHdiPW5ldyBCYnQoZngsMCksbjU9bmV3IEJidChkeCwxKX1mdW5jdGlvbiBnZCgpe2dkPVgsUnc9bmV3IFBidChkeCwwKSxaZz1uZXcgUGJ0KGZ4LDEpfWZ1bmN0aW9uIEh2KCl7cEtlLmNhbGwodGhpcyxuZXcgeDYoUW0oMTIpKSksdzJ0KCEwKSx0aGlzLmE9Mn1mdW5jdGlvbiBkcnQodCxlLG4pe3lpKCksdnYuY2FsbCh0aGlzLHQpLHRoaXMuYj1lLHRoaXMuYT1ufWZ1bmN0aW9uIE13dCh0LGUsbil7YWgoKSxvUi5jYWxsKHRoaXMsZSksdGhpcy5hPXQsdGhpcy5iPW59ZnVuY3Rpb24gblF0KHQpe3hqLmNhbGwodGhpcyksUG10KHRoaXMpLHRoaXMuYT10LHRoaXMuYz0hMH1mdW5jdGlvbiByUXQodCl7dmFyIGU7ZT10LmMuZC5iLHQuYj1lLHQuYT10LmMuZCxlLmE9dC5jLmQuYj10fWZ1bmN0aW9uIHUkKHQpe3ZhciBlO2Zvbih0LmEpLGdVdCh0LmEpLGU9bmV3IGVyKHQuYSksczN0KGUpfWZ1bmN0aW9uIGFybih0LGUpe2Z1ZSh0LCEwKSxfdSh0LmUud2YoKSxuZXcgZHZ0KHQsITAsZSkpfWZ1bmN0aW9uIGwkKHQsZSl7cmV0dXJuIEZadChlKSx1b24odCxOdChTcixKciwyNSxlLDE1LDEpLGUpfWZ1bmN0aW9uIG9ybih0LGUpe3JldHVybiBSNigpLHQ9PWhzKFpkKGUpKXx8dD09aHMoWnAoZSkpfWZ1bmN0aW9uIGpjKHQsZSl7cmV0dXJuIGU9PW51bGw/Y2MoRm8odC5mLG51bGwpKTpVVCh0LmcsZSl9ZnVuY3Rpb24gY3JuKHQpe3JldHVybiB0LmI9PTA/bnVsbDooWm4odC5iIT0wKSxmaCh0LHQuYS5hKSl9ZnVuY3Rpb24gQ3ModCl7cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKHQsVGkpLC0yMTQ3NDgzNjQ4KXwwfWZ1bmN0aW9uIHVybih0LGUpe3ZhciBuPUV1dFt0LmNoYXJDb2RlQXQoMCldO3JldHVybiBuPz90fWZ1bmN0aW9uIGgkKHQsZSl7cmV0dXJuIHIkKHQsInNldDEiKSxyJChlLCJzZXQyIiksbmV3IEpIdCh0LGUpfWZ1bmN0aW9uIGxybih0LGUpe3ZhciBuO3JldHVybiBuPWlvbih0LmYsZSksRmkobWoobiksdC5mLmQpfWZ1bmN0aW9uIERfKHQsZSl7dmFyIG4scjtyZXR1cm4gbj1lLHI9bmV3IFZlLHRoZSh0LG4sciksci5kfWZ1bmN0aW9uIGdydCh0LGUsbixyKXt2YXIgcztzPW5ldyBWV3QsZS5hW24uZ109cyxPNih0LmIscixzKX1mdW5jdGlvbiBEd3QodCxlLG4pe3ZhciByO3I9dC5ZZyhlKSxyPj0wP3Quc2gocixuKTp5NXQodCxlLG4pfWZ1bmN0aW9uIFozKHQsZSxuKXtnJCgpLHQmJkFpKF9mdCx0LGUpLHQmJkFpKGNOLHQsbil9ZnVuY3Rpb24gaVF0KHQsZSxuKXt0aGlzLmk9bmV3IGxlLHRoaXMuYj10LHRoaXMuZz1lLHRoaXMuYT1ufWZ1bmN0aW9uIGYkKHQsZSxuKXt0aGlzLmM9bmV3IGxlLHRoaXMuZT10LHRoaXMuZj1lLHRoaXMuYj1ufWZ1bmN0aW9uIEl3dCh0LGUsbil7dGhpcy5hPW5ldyBsZSx0aGlzLmU9dCx0aGlzLmY9ZSx0aGlzLmM9bn1mdW5jdGlvbiBzUXQodCxlKXt1aih0aGlzKSx0aGlzLmY9ZSx0aGlzLmc9dCxuJCh0aGlzKSx0aGlzLl9kKCl9ZnVuY3Rpb24gbkQodCxlKXt2YXIgbjtuPXQucS5nZXRIb3VycygpLHQucS5zZXREYXRlKGUpLHlDKHQsbil9ZnVuY3Rpb24gYVF0KHQsZSl7dmFyIG47Zm9yKERyKGUpLG49dC5hO247bj1uLmMpZS5PZChuLmcsbi5pKX1mdW5jdGlvbiBvUXQodCl7dmFyIGU7cmV0dXJuIGU9bmV3IHhSKFFtKHQubGVuZ3RoKSksRXl0KGUsdCksZX1mdW5jdGlvbiBocm4odCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGU9dHx8e30sbmV3IGV9ZnVuY3Rpb24gZnJuKHQsZSl7cmV0dXJuIEZuZSh0LGUpPyhOZWUodCksITApOiExfWZ1bmN0aW9uIEkwKHQsZSl7aWYoZT09bnVsbCl0aHJvdyBudChuZXcgTFQpO3JldHVybiB1aG4odCxlKX1mdW5jdGlvbiBkcm4odCl7aWYodC5xZSgpKXJldHVybiBudWxsO3ZhciBlPXQubjtyZXR1cm4gJEhbZV19ZnVuY3Rpb24gckQodCl7cmV0dXJuIHQuRGI+PjE2IT0zP251bGw6dSh0LkNiLDMzKX1mdW5jdGlvbiBfMSh0KXtyZXR1cm4gdC5EYj4+MTYhPTk/bnVsbDp1KHQuQ2IsMzMpfWZ1bmN0aW9uIGNRdCh0KXtyZXR1cm4gdC5EYj4+MTYhPTY/bnVsbDp1KHQuQ2IsNzkpfWZ1bmN0aW9uIHVRdCh0KXtyZXR1cm4gdC5EYj4+MTYhPTc/bnVsbDp1KHQuQ2IsMjM1KX1mdW5jdGlvbiBsUXQodCl7cmV0dXJuIHQuRGI+PjE2IT03P251bGw6dSh0LkNiLDE2MCl9ZnVuY3Rpb24gaHModCl7cmV0dXJuIHQuRGI+PjE2IT0xMT9udWxsOnUodC5DYiwzMyl9ZnVuY3Rpb24gaFF0KHQsZSl7dmFyIG47cmV0dXJuIG49dC5ZZyhlKSxuPj0wP3QubGgobik6SHN0KHQsZSl9ZnVuY3Rpb24gZlF0KHQsZSl7dmFyIG47cmV0dXJuIG49bmV3IEJ2dChlKSxkYWUobix0KSxuZXcgcXUobil9ZnVuY3Rpb24gT3d0KHQpe3ZhciBlO3JldHVybiBlPXQuZCxlPXQuc2kodC5mKSxPcih0LGUpLGUuT2IoKX1mdW5jdGlvbiBkUXQodCxlKXtyZXR1cm4gdC5iKz1lLmIsdC5jKz1lLmMsdC5kKz1lLmQsdC5hKz1lLmEsdH1mdW5jdGlvbiBwcnQodCxlKXtyZXR1cm4gYi5NYXRoLmFicyh0KTxiLk1hdGguYWJzKGUpP3Q6ZX1mdW5jdGlvbiBncm4odCl7cmV0dXJuIXQuYSYmKHQuYT1uZXcgaGUoZHMsdCwxMCwxMSkpLHQuYS5pPjB9ZnVuY3Rpb24gZ1F0KCl7dGhpcy5hPW5ldyBBMCx0aGlzLmU9bmV3IFFzLHRoaXMuZz0wLHRoaXMuaT0wfWZ1bmN0aW9uIHBRdCh0KXt0aGlzLmE9dCx0aGlzLmI9TnQoaG1lLHJlLDE5NDQsdC5lLmxlbmd0aCwwLDIpfWZ1bmN0aW9uIGJydCh0LGUsbil7dmFyIHI7cj1ucmUodCxlLG4pLHQuYj1uZXcgcnooci5jLmxlbmd0aCl9ZnVuY3Rpb24gQzEoKXtDMT1YLHoyPW5ldyBOYnQoa290LDApLFYxPW5ldyBOYnQoIlVQIiwxKX1mdW5jdGlvbiBkJCgpe2QkPVgsSWh0PW5ldyBSYnQoTDFlLDApLHNDdD1uZXcgUmJ0KCJGQU4iLDEpfWZ1bmN0aW9uIGckKCl7ZyQ9WCxfZnQ9bmV3IEFyLGNOPW5ldyBBcixOWWUoU2dlLG5ldyBYOSl9ZnVuY3Rpb24gcHJuKHQpe2lmKHQucCE9MCl0aHJvdyBudChuZXcgUnUpO3JldHVybiBhXyh0LmYsMCl9ZnVuY3Rpb24gYnJuKHQpe2lmKHQucCE9MCl0aHJvdyBudChuZXcgUnUpO3JldHVybiBhXyh0LmssMCl9ZnVuY3Rpb24gYlF0KHQpe3JldHVybiB0LkRiPj4xNiE9Mz9udWxsOnUodC5DYiwxNDcpfWZ1bmN0aW9uIEU4KHQpe3JldHVybiB0LkRiPj4xNiE9Nj9udWxsOnUodC5DYiwyMzUpfWZ1bmN0aW9uIEdtKHQpe3JldHVybiB0LkRiPj4xNiE9MTc/bnVsbDp1KHQuQ2IsMjYpfWZ1bmN0aW9uIHZRdCh0LGUpe3ZhciBuPXQuYT10LmF8fFtdO3JldHVybiBuW2VdfHwobltlXT10LmxlKGUpKX1mdW5jdGlvbiB2cm4odCxlKXt2YXIgbjtyZXR1cm4gbj10LmEuZ2V0KGUpLG4/P25ldyBBcnJheX1mdW5jdGlvbiB3cm4odCxlKXt2YXIgbjtuPXQucS5nZXRIb3VycygpLHQucS5zZXRNb250aChlKSx5Qyh0LG4pfWZ1bmN0aW9uIEFvKHQsZSxuKXtyZXR1cm4gZT09bnVsbD9sdSh0LmYsbnVsbCxuKTpudyh0LmcsZSxuKX1mdW5jdGlvbiBJXyh0LGUsbixyLHMsbyl7cmV0dXJuIG5ldyBGMCh0LmUsZSx0LmFqKCksbixyLHMsbyl9ZnVuY3Rpb24gaUQodCxlLG4pe3JldHVybiB0LmE9QmwodC5hLDAsZSkrKCIiK24pK09NKHQuYSxlKSx0fWZ1bmN0aW9uIG1ybih0LGUsbil7cmV0dXJuIHVlKHQuYSwoUWooKSxkc3QoZSxuKSxuZXcgQ3YoZSxuKSkpLHR9ZnVuY3Rpb24gTnd0KHQpe3JldHVybiB5MnQodC5jKSx0LmU9dC5hPXQuYyx0LmM9dC5jLmMsKyt0LmQsdC5hLmZ9ZnVuY3Rpb24gd1F0KHQpe3JldHVybiB5MnQodC5lKSx0LmM9dC5hPXQuZSx0LmU9dC5lLmUsLS10LmQsdC5hLmZ9ZnVuY3Rpb24gcGEodCxlKXt0LmQmJkV1KHQuZC5lLHQpLHQuZD1lLHQuZCYmdWUodC5kLmUsdCl9ZnVuY3Rpb24gQmEodCxlKXt0LmMmJkV1KHQuYy5nLHQpLHQuYz1lLHQuYyYmdWUodC5jLmcsdCl9ZnVuY3Rpb24gTG8odCxlKXt0LmMmJkV1KHQuYy5hLHQpLHQuYz1lLHQuYyYmdWUodC5jLmEsdCl9ZnVuY3Rpb24gdGModCxlKXt0LmkmJkV1KHQuaS5qLHQpLHQuaT1lLHQuaSYmdWUodC5pLmosdCl9ZnVuY3Rpb24gbVF0KHQsZSxuKXt0aGlzLmE9ZSx0aGlzLmM9dCx0aGlzLmI9KERyKG4pLG5ldyBxdShuKSl9ZnVuY3Rpb24geVF0KHQsZSxuKXt0aGlzLmE9ZSx0aGlzLmM9dCx0aGlzLmI9KERyKG4pLG5ldyBxdShuKSl9ZnVuY3Rpb24geFF0KHQsZSl7dGhpcy5hPXQsdGhpcy5jPXVjKHRoaXMuYSksdGhpcy5iPW5ldyBvJChlKX1mdW5jdGlvbiB5cm4odCl7dmFyIGU7cmV0dXJuIHAyKHQpLGU9bmV3IFFzLFdpKHQsbmV3IEdlKGUpKX1mdW5jdGlvbiBVbSh0LGUpe2lmKHQ8MHx8dD5lKXRocm93IG50KG5ldyBDbyhqNnQrdCskNnQrZSkpfWZ1bmN0aW9uIFB3dCh0LGUpe3JldHVybiBoWXQodC5hLGUpP3N3dCh0LHUoZSwyMikuZyxudWxsKTpudWxsfWZ1bmN0aW9uIHhybih0KXtyZXR1cm4gT2l0KCksRm4oKSx1KHQuYSw4MSkuZC5lIT0wfWZ1bmN0aW9uIGtRdCgpe2tRdD1YLGZnZT1RcigoZFIoKSx1dChvdChoZ2UsMSksb2UsNTM4LDAsW3h1dF0pKSl9ZnVuY3Rpb24gRVF0KCl7RVF0PVgsWndlPWVsKG5ldyBacywoWWEoKSxqbyksKGNvKCksYk8pKX1mdW5jdGlvbiBGd3QoKXtGd3Q9WCxKd2U9ZWwobmV3IFpzLChZYSgpLGpvKSwoY28oKSxiTykpfWZ1bmN0aW9uIFRRdCgpe1RRdD1YLGVtZT1lbChuZXcgWnMsKFlhKCksam8pLChjbygpLGJPKSl9ZnVuY3Rpb24gX1F0KCl7X1F0PVgsYm1lPUVpKG5ldyBacywoWWEoKSxqbyksKGNvKCksZlMpKX1mdW5jdGlvbiBSbCgpe1JsPVgsbW1lPUVpKG5ldyBacywoWWEoKSxqbyksKGNvKCksZlMpKX1mdW5jdGlvbiBDUXQoKXtDUXQ9WCx5bWU9RWkobmV3IFpzLChZYSgpLGpvKSwoY28oKSxmUykpfWZ1bmN0aW9uIHZydCgpe3ZydD1YLF9tZT1FaShuZXcgWnMsKFlhKCksam8pLChjbygpLGZTKSl9ZnVuY3Rpb24gU1F0KCl7U1F0PVgsaHllPWVsKG5ldyBacywobzcoKSxGUyksKGZDKCksRWh0KSl9ZnVuY3Rpb24gbjIodCxlLG4scil7dGhpcy5jPXQsdGhpcy5kPXIsbXJ0KHRoaXMsZSkseXJ0KHRoaXMsbil9ZnVuY3Rpb24gJDYodCl7dGhpcy5jPW5ldyBjcyx0aGlzLmI9dC5iLHRoaXMuZD10LmMsdGhpcy5hPXQuYX1mdW5jdGlvbiB3cnQodCl7dGhpcy5hPWIuTWF0aC5jb3ModCksdGhpcy5iPWIuTWF0aC5zaW4odCl9ZnVuY3Rpb24gbXJ0KHQsZSl7dC5hJiZFdSh0LmEuayx0KSx0LmE9ZSx0LmEmJnVlKHQuYS5rLHQpfWZ1bmN0aW9uIHlydCh0LGUpe3QuYiYmRXUodC5iLmYsdCksdC5iPWUsdC5iJiZ1ZSh0LmIuZix0KX1mdW5jdGlvbiBBUXQodCxlKXtNZW4odCx0LmIsdC5jKSx1KHQuYi5iLDY1KSxlJiZ1KGUuYiw2NSkuYn1mdW5jdGlvbiBrcm4odCxlKXtaeXQodCxlKSxfdCh0LkNiLDg4KSYmaHkoaGwodSh0LkNiLDg4KSksMil9ZnVuY3Rpb24geHJ0KHQsZSl7X3QodC5DYiw4OCkmJmh5KGhsKHUodC5DYiw4OCkpLDQpLHR1KHQsZSl9ZnVuY3Rpb24gcCQodCxlKXtfdCh0LkNiLDE3OSkmJih1KHQuQ2IsMTc5KS50Yj1udWxsKSx0dSh0LGUpfWZ1bmN0aW9uICRjKHQsZSl7cmV0dXJuIHNvKCksUXJ0KGUpP25ldyBEaihlLHQpOm5ldyBJTShlLHQpfWZ1bmN0aW9uIEVybih0LGUpe3ZhciBuLHI7bj1lLmMscj1uIT1udWxsLHImJkY2KHQsbmV3IEhtKGUuYykpfWZ1bmN0aW9uIExRdCh0KXt2YXIgZSxuO3JldHVybiBuPShaaygpLGU9bmV3IHd2LGUpLE84KG4sdCksbn1mdW5jdGlvbiBNUXQodCl7dmFyIGUsbjtyZXR1cm4gbj0oWmsoKSxlPW5ldyB3dixlKSxPOChuLHQpLG59ZnVuY3Rpb24gRFF0KHQsZSl7dmFyIG47cmV0dXJuIG49bmV3IExoKHQpLGUuY1tlLmMubGVuZ3RoXT1uLG59ZnVuY3Rpb24gSVF0KHQsZSl7dmFyIG47cmV0dXJuIG49dShueShqNih0LmEpLGUpLDE0KSxuP24uZ2MoKTowfWZ1bmN0aW9uIE9RdCh0KXt2YXIgZTtyZXR1cm4gcDIodCksZT0oUTMoKSxRMygpLHY3dCksViQodCxlKX1mdW5jdGlvbiBOUXQodCl7Zm9yKHZhciBlOzspaWYoZT10LlBiKCksIXQuT2IoKSlyZXR1cm4gZX1mdW5jdGlvbiBCd3QodCxlKXtkS2UuY2FsbCh0aGlzLG5ldyB4NihRbSh0KSkpLHFsKGUsV2hlKSx0aGlzLmE9ZX1mdW5jdGlvbiBLZCh0LGUsbil7enJlKGUsbix0LmdjKCkpLHRoaXMuYz10LHRoaXMuYT1lLHRoaXMuYj1uLWV9ZnVuY3Rpb24gUFF0KHQsZSxuKXt2YXIgcjt6cmUoZSxuLHQuYy5sZW5ndGgpLHI9bi1lLG9idCh0LmMsZSxyKX1mdW5jdGlvbiBUcm4odCxlKXtJVXQodCxNcihHcyhScChlLDI0KSxQcSkpLE1yKEdzKGUsUHEpKSl9ZnVuY3Rpb24gU24odCxlKXtpZih0PDB8fHQ+PWUpdGhyb3cgbnQobmV3IENvKGo2dCt0KyQ2dCtlKSl9ZnVuY3Rpb24gJHIodCxlKXtpZih0PDB8fHQ+PWUpdGhyb3cgbnQobmV3IFlwdChqNnQrdCskNnQrZSkpfWZ1bmN0aW9uIFRuKHQsZSl7dGhpcy5iPShJbih0KSx0KSx0aGlzLmE9ZSZ5eT9lOmV8NjR8dmR9ZnVuY3Rpb24gRlF0KHQpe2RVdCh0aGlzKSxXenQodGhpcy5hLHh5dChiLk1hdGgubWF4KDgsdCkpPDwxKX1mdW5jdGlvbiBTMSh0KXtyZXR1cm4gbmModXQob3QobmEsMSkscmUsOCwwLFt0Lmkubix0Lm4sdC5hXSkpfWZ1bmN0aW9uIF9ybigpe3JldHVybiBOMSgpLHV0KG90KHdsLDEpLG9lLDEzMiwwLFtTN3QsWWwsTHldKX1mdW5jdGlvbiBDcm4oKXtyZXR1cm4gWmYoKSx1dChvdChNeSwxKSxvZSwyMzIsMCxbZmMsaXUsZGNdKX1mdW5jdGlvbiBTcm4oKXtyZXR1cm4gcmwoKSx1dChvdChYZ2UsMSksb2UsNDYxLDAsW0FkLGxiLGtmXSl9ZnVuY3Rpb24gQXJuKCl7cmV0dXJuIFR1KCksdXQob3QoWmdlLDEpLG9lLDQ2MiwwLFtzMSxoYixFZl0pfWZ1bmN0aW9uIExybigpe3JldHVybiBldygpLHV0KG90KF9FdCwxKSxvZSw0MjMsMCxbejQsVEV0LGVsdF0pfWZ1bmN0aW9uIE1ybigpe3JldHVybiBqXygpLHV0KG90KHhFdCwxKSxvZSwzNzksMCxbWXV0LEt1dCxYdXRdKX1mdW5jdGlvbiBEcm4oKXtyZXR1cm4gWV8oKSx1dChvdChUX3QsMSksb2UsMzc4LDAsW3VodCxFX3QsdUddKX1mdW5jdGlvbiBJcm4oKXtyZXR1cm4gSzYoKSx1dChvdCh4OXQsMSksb2UsMzE0LDAsW0N4LHdPLHk5dF0pfWZ1bmN0aW9uIE9ybigpe3JldHVybiBYJCgpLHV0KG90KEU5dCwxKSxvZSwzMzcsMCxbazl0LE9WLHlsdF0pfWZ1bmN0aW9uIE5ybigpe3JldHVybiBoMigpLHV0KG90KGYyZSwxKSxvZSw0NTAsMCxbRWx0LG9FLEc0XSl9ZnVuY3Rpb24gUHJuKCl7cmV0dXJuIEp2KCksdXQob3QobGx0LDEpLG9lLDM2MSwwLFtBdyxkYixTd10pfWZ1bmN0aW9uIEZybigpe3JldHVybiBCMCgpLHV0KG90KHkyZSwxKSxvZSwzMDMsMCxbeU8sVzQsU3hdKX1mdW5jdGlvbiBCcm4oKXtyZXR1cm4gRzgoKSx1dChvdChPbHQsMSksb2UsMjkyLDAsW0RsdCxJbHQsbU9dKX1mdW5jdGlvbiBScm4oKXtyZXR1cm4gaG8oKSx1dChvdChHd2UsMSksb2UsNDUyLDAsW01TLGFsLHN1XSl9ZnVuY3Rpb24ganJuKCl7cmV0dXJuIGowKCksdXQob3QoT190LDEpLG9lLDMzOSwwLFtiYixJX3QsZ2h0XSl9ZnVuY3Rpb24gJHJuKCl7cmV0dXJuIHV6KCksdXQob3QoQl90LDEpLG9lLDM3NSwwLFtQX3Qsdmh0LEZfdF0pfWZ1bmN0aW9uIHpybigpe3JldHVybiBneigpLHV0KG90KFZfdCwxKSxvZSwzNzcsMCxbeGh0LG1FLEd5XSl9ZnVuY3Rpb24gcXJuKCl7cmV0dXJuIFo4KCksdXQob3QoJF90LDEpLG9lLDMzNiwwLFttaHQsal90LERTXSl9ZnVuY3Rpb24gSHJuKCl7cmV0dXJuIG96KCksdXQob3QoSF90LDEpLG9lLDMzOCwwLFtxX3QseWh0LHpfdF0pfWZ1bmN0aW9uIFZybigpe3JldHVybiBadigpLHV0KG90KHVtZSwxKSxvZSw0NTQsMCxbT08sSVMsZEddKX1mdW5jdGlvbiBHcm4oKXtyZXR1cm4gX3ooKSx1dChvdChieWUsMSksb2UsNDQyLDAsW0ZodCxOaHQsUGh0XSl9ZnVuY3Rpb24gVXJuKCl7cmV0dXJuIFJEKCksdXQob3QoZ0N0LDEpLG9lLDM4MCwwLFtfRyxmQ3QsZEN0XSl9ZnVuY3Rpb24gV3JuKCl7cmV0dXJuIFR6KCksdXQob3QoSUN0LDEpLG9lLDM4MSwwLFtEQ3QscWh0LE1DdF0pfWZ1bmN0aW9uIEtybigpe3JldHVybiBjeigpLHV0KG90KEFDdCwxKSxvZSwyOTMsMCxbemh0LFNDdCxDQ3RdKX1mdW5jdGlvbiBZcm4oKXtyZXR1cm4gVkQoKSx1dChvdChIaHQsMSksb2UsNDM3LDAsW0FHLExHLE1HXSl9ZnVuY3Rpb24gWHJuKCl7cmV0dXJuICQwKCksdXQob3QoeEF0LDEpLG9lLDMzNCwwLFtIRyxucCxZU10pfWZ1bmN0aW9uIFFybigpe3JldHVybiBEMSgpLHV0KG90KHVBdCwxKSxvZSwyNzIsMCxbVEUsWXksX0VdKX1mdW5jdGlvbiBacm4odCxlKXtyZXR1cm4gbWJuKHQsZSxfdChlLDk5KSYmKHUoZSwxOCkuQmImUWEpIT0wKX1mdW5jdGlvbiBKcm4odCxlLG4pe3ZhciByO3JldHVybiByPUVDKHQsZSwhMSksci5iPD1lJiZyLmE8PW59ZnVuY3Rpb24gQlF0KHQsZSxuKXt2YXIgcjtyPW5ldyBTUSxyLmI9ZSxyLmE9biwrK2UuYix1ZSh0LmQscil9ZnVuY3Rpb24gdGluKHQsZSl7dmFyIG47cmV0dXJuIG49KEluKHQpLHQpLmcsSTJ0KCEhbiksSW4oZSksbihlKX1mdW5jdGlvbiBSd3QodCxlKXt2YXIgbixyO3JldHVybiByPXA4KHQsZSksbj10LmEuWmMociksbmV3IFpIdCh0LG4pfWZ1bmN0aW9uIGVpbih0KXtyZXR1cm4gdC5EYj4+MTYhPTY/bnVsbDp1KFVzdCh0KSwyMzUpfWZ1bmN0aW9uIG5pbih0KXtpZih0LnAhPTIpdGhyb3cgbnQobmV3IFJ1KTtyZXR1cm4gTXIodC5mKSZNc31mdW5jdGlvbiByaW4odCl7aWYodC5wIT0yKXRocm93IG50KG5ldyBSdSk7cmV0dXJuIE1yKHQuaykmTXN9ZnVuY3Rpb24gaWluKHQpe3JldHVybiB0LmE9PShTOCgpLG9VKSYmQXR0KHQsUGJuKHQuZyx0LmIpKSx0LmF9ZnVuY3Rpb24gejYodCl7cmV0dXJuIHQuZD09KFM4KCksb1UpJiZFVCh0LEF3bih0LmcsdC5iKSksdC5kfWZ1bmN0aW9uIFEodCl7cmV0dXJuIFpuKHQuYTx0LmMuYy5sZW5ndGgpLHQuYj10LmErKyx0LmMuY1t0LmJdfWZ1bmN0aW9uIHNpbih0LGUpe3QuYj10LmJ8ZS5iLHQuYz10LmN8ZS5jLHQuZD10LmR8ZS5kLHQuYT10LmF8ZS5hfWZ1bmN0aW9uIEdzKHQsZSl7cmV0dXJuIFdwKEp0bihWbyh0KT9EaCh0KTp0LFZvKGUpP0RoKGUpOmUpKX1mdW5jdGlvbiBBMSh0LGUpe3JldHVybiBXcCh0ZW4oVm8odCk/RGgodCk6dCxWbyhlKT9EaChlKTplKSl9ZnVuY3Rpb24ga3J0KHQsZSl7cmV0dXJuIFdwKGVlbihWbyh0KT9EaCh0KTp0LFZvKGUpP0RoKGUpOmUpKX1mdW5jdGlvbiBhaW4odCl7cmV0dXJuIFJhKE0wKEF1KHBsKHQsMzIpKSwzMiksQXUocGwodCwzMikpKX1mdW5jdGlvbiBWdih0KXtyZXR1cm4gRHIodCksX3QodCwxNCk/bmV3IHF1KHUodCwxNCkpOmg4KHQuS2MoKSl9ZnVuY3Rpb24gb2luKHQsZSl7cmV0dXJuICRfKCksdC5jPT1lLmM/anMoZS5kLHQuZCk6anModC5jLGUuYyl9ZnVuY3Rpb24gY2luKHQsZSl7cmV0dXJuICRfKCksdC5jPT1lLmM/anModC5kLGUuZCk6anModC5jLGUuYyl9ZnVuY3Rpb24gdWluKHQsZSl7cmV0dXJuICRfKCksdC5jPT1lLmM/anModC5kLGUuZCk6anMoZS5jLHQuYyl9ZnVuY3Rpb24gbGluKHQsZSl7cmV0dXJuICRfKCksdC5jPT1lLmM/anMoZS5kLHQuZCk6anMoZS5jLHQuYyl9ZnVuY3Rpb24gaGluKHQsZSl7dmFyIG47bj1adCh2ZSh0LmEuV2UoKGRpKCkscUcpKSkpLF9oZSh0LGUsbil9ZnVuY3Rpb24gZmluKHQsZSl7dmFyIG47bj11KHRyKHQuZyxlKSw1NyksX3UoZS5kLG5ldyB6VnQodCxuKSl9ZnVuY3Rpb24gZGluKHQsZSl7dmFyIG4scjtyZXR1cm4gbj1Fc2UodCkscj1Fc2UoZSksbjxyPy0xOm4+cj8xOjB9ZnVuY3Rpb24gUlF0KHQsZSl7dmFyIG4scjtyZXR1cm4gbj1VcnQoZSkscj1uLHUodHIodC5jLHIpLDE5KS5hfWZ1bmN0aW9uIGpRdCh0LGUpe3ZhciBuO2ZvcihuPXQrIiI7bi5sZW5ndGg8ZTspbj0iMCIrbjtyZXR1cm4gbn1mdW5jdGlvbiBiJCh0KXtyZXR1cm4gdC5jPT1udWxsfHx0LmMubGVuZ3RoPT0wPyJuXyIrdC5nOiJuXyIrdC5jfWZ1bmN0aW9uIGp3dCh0KXtyZXR1cm4gdC5jPT1udWxsfHx0LmMubGVuZ3RoPT0wPyJuXyIrdC5iOiJuXyIrdC5jfWZ1bmN0aW9uICR3dCh0LGUpe3JldHVybiB0JiZ0LmVxdWFscz90LmVxdWFscyhlKTpHdCh0KT09PUd0KGUpfWZ1bmN0aW9uIHp3dCh0LGUpe3JldHVybiBlPT0wPyEhdC5vJiZ0Lm8uZiE9MDpyc3QodCxlKX1mdW5jdGlvbiBnZih0LGUsbil7dmFyIHI7dC5uJiZlJiZuJiYocj1uZXcgVlosdWUodC5lLHIpKX1mdW5jdGlvbiBFcnQodCxlLG4pe3ZhciByO3I9dC5kW2UucF0sdC5kW2UucF09dC5kW24ucF0sdC5kW24ucF09cn1mdW5jdGlvbiAkUXQodCxlLG4pe3RoaXMuZD10LHRoaXMuaj1lLHRoaXMuZT1uLHRoaXMubz0tMSx0aGlzLnA9M31mdW5jdGlvbiB6UXQodCxlLG4pe3RoaXMuZD10LHRoaXMuaz1lLHRoaXMuZj1uLHRoaXMubz0tMSx0aGlzLnA9NX1mdW5jdGlvbiBxUXQodCxlLG4pe3Z2LmNhbGwodGhpcywyNSksdGhpcy5iPXQsdGhpcy5hPWUsdGhpcy5jPW59ZnVuY3Rpb24gamwodCl7eWkoKSx2di5jYWxsKHRoaXMsdCksdGhpcy5jPSExLHRoaXMuYT0hMX1mdW5jdGlvbiBIUXQodCxlLG4scixzLG8pe1JtdC5jYWxsKHRoaXMsdCxlLG4scixzKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiBWUXQodCxlLG4scixzLG8pe2ptdC5jYWxsKHRoaXMsdCxlLG4scixzKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiBHUXQodCxlLG4scixzLG8pe3VtdC5jYWxsKHRoaXMsdCxlLG4scixzKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiBVUXQodCxlLG4scixzLG8pe3FtdC5jYWxsKHRoaXMsdCxlLG4scixzKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiBXUXQodCxlLG4scixzLG8pe2xtdC5jYWxsKHRoaXMsdCxlLG4scixzKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiBLUXQodCxlLG4scixzLG8peyRtdC5jYWxsKHRoaXMsdCxlLG4scixzKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiBZUXQodCxlLG4scixzLG8pe3ptdC5jYWxsKHRoaXMsdCxlLG4scixzKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiBYUXQodCxlLG4scixzLG8pe2htdC5jYWxsKHRoaXMsdCxlLG4scixzKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiBRUXQodCxlLG4scil7b1IuY2FsbCh0aGlzLG4pLHRoaXMuYj10LHRoaXMuYz1lLHRoaXMuZD1yfWZ1bmN0aW9uIHF3dCh0LGUpe3RoaXMuYT1uZXcgbGUsdGhpcy5kPW5ldyBsZSx0aGlzLmY9dCx0aGlzLmM9ZX1mdW5jdGlvbiBaUXQoKXt0aGlzLmM9bmV3IFRVdCx0aGlzLmE9bmV3IFZYdCx0aGlzLmI9bmV3IG5xdCxwVnQoKX1mdW5jdGlvbiBKUXQoKXtYNigpLHRoaXMuYj1uZXcgQXIsdGhpcy5hPW5ldyBBcix0aGlzLmM9bmV3IGxlfWZ1bmN0aW9uIHRadCh0LGUpe3RoaXMuZz10LHRoaXMuZD0oUzgoKSxvVSksdGhpcy5hPW9VLHRoaXMuYj1lfWZ1bmN0aW9uIGVadCh0LGUpe3RoaXMuZj10LHRoaXMuYT0oUzgoKSxhVSksdGhpcy5jPWFVLHRoaXMuYj1lfWZ1bmN0aW9uIEh3dCh0LGUpeyF0LmMmJih0LmM9bmV3IHBzKHQsMCkpLGtxKHQuYywoJGkoKSxvQSksZSl9ZnVuY3Rpb24gdiQoKXt2JD1YLE9odD1uZXcgamJ0KCJERlMiLDApLG9DdD1uZXcgamJ0KCJCRlMiLDEpfWZ1bmN0aW9uIGdpbih0LGUsbil7dmFyIHI7cmV0dXJuIHI9dSh0LlpiKCkueGMoZSksMTQpLCEhciYmci5IYyhuKX1mdW5jdGlvbiBuWnQodCxlLG4pe3ZhciByO3JldHVybiByPXUodC5aYigpLnhjKGUpLDE0KSwhIXImJnIuTWMobil9ZnVuY3Rpb24gclp0KHQsZSxuLHIpe3JldHVybiB0LmErPSIiK0JsKGU9PW51bGw/TXU6V28oZSksbixyKSx0fWZ1bmN0aW9uIGxjKHQsZSxuLHIscyxvKXtyZXR1cm4gYm5lKHQsZSxuLG8pLFd5dCh0LHIpLEt5dCh0LHMpLHR9ZnVuY3Rpb24gVHJ0KHQpe3JldHVybiBabih0LmIuYiE9dC5kLmEpLHQuYz10LmI9dC5iLmIsLS10LmEsdC5jLmN9ZnVuY3Rpb24gT18odCl7Zm9yKDt0LmQ+MCYmdC5hWy0tdC5kXT09MDspO3QuYVt0LmQrK109PTAmJih0LmU9MCl9ZnVuY3Rpb24gaVp0KHQpe3JldHVybiB0LmE/dC5lLmxlbmd0aD09MD90LmEuYTp0LmEuYSsoIiIrdC5lKTp0LmN9ZnVuY3Rpb24gcGluKHQpe3JldHVybiEhdC5hJiZmbCh0LmEuYSkuaSE9MCYmISh0LmImJmxzdCh0LmIpKX1mdW5jdGlvbiBiaW4odCl7cmV0dXJuISF0LnUmJk9jKHQudS5hKS5pIT0wJiYhKHQubiYmdXN0KHQubikpfWZ1bmN0aW9uIHNadCh0KXtyZXR1cm4gQW50KHQuZS5IZCgpLmdjKCkqdC5jLkhkKCkuZ2MoKSwxNixuZXcgYTYodCkpfWZ1bmN0aW9uIHZpbih0LGUpe3JldHVybiBQWXQoQXUodC5xLmdldFRpbWUoKSksQXUoZS5xLmdldFRpbWUoKSkpfWZ1bmN0aW9uIHBkKHQpe3JldHVybiB1KFAxKHQsTnQobmx0LFJvdCwxNyx0LmMubGVuZ3RoLDAsMSkpLDQ3NCl9ZnVuY3Rpb24gc0QodCl7cmV0dXJuIHUoUDEodCxOdChvMCxHZywxMCx0LmMubGVuZ3RoLDAsMSkpLDE5Myl9ZnVuY3Rpb24gd2luKHQpe3JldHVybiBSbCgpLCFXYSh0KSYmISghV2EodCkmJnQuYy5pLmM9PXQuZC5pLmMpfWZ1bmN0aW9uIGFadCh0LGUsbil7dmFyIHI7cj0oRHIodCksbmV3IHF1KHQpKSxLZm4obmV3IG1RdChyLGUsbikpfWZ1bmN0aW9uIGFEKHQsZSxuKXt2YXIgcjtyPShEcih0KSxuZXcgcXUodCkpLFlmbihuZXcgeVF0KHIsZSxuKSl9ZnVuY3Rpb24gb1p0KHQsZSl7dmFyIG47cmV0dXJuIG49MS1lLHQuYVtuXT1ueih0LmFbbl0sbiksbnoodCxlKX1mdW5jdGlvbiBjWnQodCxlKXt2YXIgbjt0LmU9bmV3IHFwdCxuPWd5KGUpLGFhKG4sdC5jKSxldWUodCxuLDApfWZ1bmN0aW9uIGJhKHQsZSxuLHIpe3ZhciBzO3M9bmV3IFdGLHMuYT1lLHMuYj1uLHMuYz1yLGFpKHQuYSxzKX1mdW5jdGlvbiB3ZSh0LGUsbixyKXt2YXIgcztzPW5ldyBXRixzLmE9ZSxzLmI9bixzLmM9cixhaSh0LmIscyl9ZnVuY3Rpb24gcGYodCl7dmFyIGUsbixyO3JldHVybiBlPW5ldyBxWXQsbj1oYXQoZSx0KSxyNG4oZSkscj1uLHJ9ZnVuY3Rpb24gVnd0KCl7dmFyIHQsZSxuO3JldHVybiBlPShuPSh0PW5ldyB3dix0KSxuKSx1ZShhTHQsZSksZX1mdW5jdGlvbiB3JCh0KXtyZXR1cm4gdC5qLmM9TnQoUW4sTWUsMSwwLDUsMSkseHd0KHQuYyksWmVuKHQuYSksdH1mdW5jdGlvbiBKMyh0KXtyZXR1cm4gcVQoKSxfdCh0LmcsMTApP3UodC5nLDEwKTpudWxsfWZ1bmN0aW9uIG1pbih0KXtyZXR1cm4gWDModCkuZGMoKT8hMTood1hlKHQsbmV3IGN0KSwhMCl9ZnVuY3Rpb24geWluKHQpe2lmKCEoInN0YWNrImluIHQpKXRyeXt0aHJvdyB0fWNhdGNoe31yZXR1cm4gdH1mdW5jdGlvbiBvRCh0LGUpe2lmKHQ8MHx8dD49ZSl0aHJvdyBudChuZXcgQ28oT2duKHQsZSkpKTtyZXR1cm4gdH1mdW5jdGlvbiB1WnQodCxlLG4pe2lmKHQ8MHx8ZTx0fHxlPm4pdGhyb3cgbnQobmV3IENvKGlnbih0LGUsbikpKX1mdW5jdGlvbiBfcnQodCxlKXtpZihWcyh0LmEsZSksZS5kKXRocm93IG50KG5ldyBabyhwZmUpKTtlLmQ9dH1mdW5jdGlvbiBDcnQodCxlKXtpZihlLiRtb2RDb3VudCE9dC4kbW9kQ291bnQpdGhyb3cgbnQobmV3IHNoKX1mdW5jdGlvbiBsWnQodCxlKXtyZXR1cm4gX3QoZSw0Mik/cHN0KHQuYSx1KGUsNDIpKTohMX1mdW5jdGlvbiBoWnQodCxlKXtyZXR1cm4gX3QoZSw0Mik/cHN0KHQuYSx1KGUsNDIpKTohMX1mdW5jdGlvbiBmWnQodCxlKXtyZXR1cm4gX3QoZSw0Mik/cHN0KHQuYSx1KGUsNDIpKTohMX1mdW5jdGlvbiB4aW4odCxlKXtyZXR1cm4gdC5hPD10LmI/KGUudWQodC5hKyspLCEwKTohMX1mdW5jdGlvbiBHdih0KXt2YXIgZTtyZXR1cm4gVm8odCk/KGU9dCxlPT0tMD8wOmUpOk1hbih0KX1mdW5jdGlvbiBtJCh0KXt2YXIgZTtyZXR1cm4gcXAodCksZT1uZXcgQWUsUjModC5hLG5ldyBnbihlKSksZX1mdW5jdGlvbiBkWnQodCl7dmFyIGU7cmV0dXJuIHFwKHQpLGU9bmV3IFduLFIzKHQuYSxuZXcgcGUoZSkpLGV9ZnVuY3Rpb24geGEodCxlKXt0aGlzLmE9dCxoNi5jYWxsKHRoaXMsdCksVW0oZSx0LmdjKCkpLHRoaXMuYj1lfWZ1bmN0aW9uIEd3dCh0KXt0aGlzLmU9dCx0aGlzLmI9dGhpcy5lLmEuZW50cmllcygpLHRoaXMuYT1uZXcgQXJyYXl9ZnVuY3Rpb24ga2luKHQpe3JldHVybiBBbnQodC5lLkhkKCkuZ2MoKSp0LmMuSGQoKS5nYygpLDI3MyxuZXcgVkIodCkpfWZ1bmN0aW9uIHkkKHQpe3JldHVybiBuZXcgSmMoKHFsKHQsamF0KSxxJChSYShSYSg1LHQpLHQvMTB8MCkpKSl9ZnVuY3Rpb24gZ1p0KHQpe3JldHVybiB1KFAxKHQsTnQoTmJlLFVmZSwxMSx0LmMubGVuZ3RoLDAsMSkpLDE5NDMpfWZ1bmN0aW9uIEVpbih0LGUsbil7cmV0dXJuIG4uZi5jLmxlbmd0aD4wP2N3dCh0LmEsZSxuKTpjd3QodC5iLGUsbil9ZnVuY3Rpb24gVGluKHQsZSxuKXt0LmQmJkV1KHQuZC5lLHQpLHQuZD1lLHQuZCYmJG0odC5kLmUsbix0KX1mdW5jdGlvbiBTcnQodCxlKXt2NW4oZSx0KSxTdnQodC5kKSxTdnQodShLKHQsKHhlKCksbkcpKSwyMDcpKX1mdW5jdGlvbiBOXyh0LGUpe2I1bihlLHQpLEN2dCh0LmQpLEN2dCh1KEsodCwoeGUoKSxuRykpLDIwNykpfWZ1bmN0aW9uIFV2KHQsZSl7dmFyIG4scjtyZXR1cm4gbj1JMCh0LGUpLHI9bnVsbCxuJiYocj1uLmZlKCkpLHJ9ZnVuY3Rpb24gVDgodCxlKXt2YXIgbixyO3JldHVybiBuPVhtKHQsZSkscj1udWxsLG4mJihyPW4uaWUoKSkscn1mdW5jdGlvbiBQXyh0LGUpe3ZhciBuLHI7cmV0dXJuIG49STAodCxlKSxyPW51bGwsbiYmKHI9bi5pZSgpKSxyfWZ1bmN0aW9uIE8wKHQsZSl7dmFyIG4scjtyZXR1cm4gbj1JMCh0LGUpLHI9bnVsbCxuJiYocj1GNHQobikpLHJ9ZnVuY3Rpb24gX2luKHQsZSxuKXt2YXIgcjtyZXR1cm4gcj1zNyhuKSx2cSh0LmcscixlKSx2cSh0LmksZSxuKSxlfWZ1bmN0aW9uIENpbih0LGUsbil7dmFyIHI7cj10aG4oKTt0cnl7cmV0dXJuIERRZSh0LGUsbil9ZmluYWxseXtCaW4ocil9fWZ1bmN0aW9uIHBadCh0KXt2YXIgZTtlPXQuV2coKSx0aGlzLmE9X3QoZSw2OSk/dShlLDY5KS5aaCgpOmUuS2MoKX1mdW5jdGlvbiBacygpe0xxdC5jYWxsKHRoaXMpLHRoaXMuai5jPU50KFFuLE1lLDEsMCw1LDEpLHRoaXMuYT0tMX1mdW5jdGlvbiBVd3QodCxlLG4scil7dGhpcy5kPXQsdGhpcy5uPWUsdGhpcy5nPW4sdGhpcy5vPXIsdGhpcy5wPS0xfWZ1bmN0aW9uIGJadCh0LGUsbixyKXt0aGlzLmU9cix0aGlzLmQ9bnVsbCx0aGlzLmM9dCx0aGlzLmE9ZSx0aGlzLmI9bn1mdW5jdGlvbiBXd3QodCxlLG4pe3RoaXMuZD1uZXcgc1IodGhpcyksdGhpcy5lPXQsdGhpcy5pPWUsdGhpcy5mPW59ZnVuY3Rpb24geCQoKXt4JD1YLE5sdD1uZXcgTWJ0KEk3LDApLHE5dD1uZXcgTWJ0KCJUT1BfTEVGVCIsMSl9ZnVuY3Rpb24gdlp0KCl7dlp0PVgsVV90PWZYdChkZSgxKSxkZSg0KSksR190PWZYdChkZSgxKSxkZSgyKSl9ZnVuY3Rpb24gd1p0KCl7d1p0PVgsYTNlPVFyKChEUigpLHV0KG90KHMzZSwxKSxvZSw1NTEsMCxbR2h0XSkpKX1mdW5jdGlvbiBtWnQoKXttWnQ9WCxpM2U9UXIoKE1SKCksdXQob3QoR0N0LDEpLG9lLDQ4MiwwLFtWaHRdKSkpfWZ1bmN0aW9uIHladCgpe3ladD1YLFQzZT1RcigoSFQoKSx1dChvdChmU3QsMSksb2UsNTMwLDAsW2pPXSkpKX1mdW5jdGlvbiB4WnQoKXt4WnQ9WCxNcGU9UXIoKEFSKCksdXQob3QodEV0LDEpLG9lLDQ4MSwwLFskdXRdKSkpfWZ1bmN0aW9uIFNpbigpe3JldHVybiB0dygpLHV0KG90KEVwZSwxKSxvZSw0MDYsMCxbYU8sc08sUnV0LGp1dF0pfWZ1bmN0aW9uIEFpbigpe3JldHVybiBQJCgpLHV0KG90KEtILDEpLG9lLDI5NywwLFtNdXQsRTd0LFQ3dCxfN3RdKX1mdW5jdGlvbiBMaW4oKXtyZXR1cm4gc0MoKSx1dChvdChBcGUsMSksb2UsMzk0LDAsW2hPLEpILHRWLGZPXSl9ZnVuY3Rpb24gTWluKCl7cmV0dXJuIGV4KCksdXQob3QoX3BlLDEpLG9lLDMyMywwLFtjTyxvTyx1TyxsT10pfWZ1bmN0aW9uIERpbigpe3JldHVybiBVOCgpLHV0KG90KGtiZSwxKSxvZSw0MDUsMCxbQ3csSXksRHksJDRdKX1mdW5jdGlvbiBJaW4oKXtyZXR1cm4gZHooKSx1dChvdCh6YmUsMSksb2UsMzYwLDAsW2NsdCxDVixTVix2T10pfWZ1bmN0aW9uIGtadCh0LGUsbixyKXtyZXR1cm4gX3Qobiw1NCk/bmV3IGNXdCh0LGUsbixyKTpuZXcgUXZ0KHQsZSxuLHIpfWZ1bmN0aW9uIE9pbigpe3JldHVybiBPMSgpLHV0KG90KFhiZSwxKSxvZSw0MTEsMCxbX3gsbkUsckUsdWx0XSl9ZnVuY3Rpb24gTmluKHQpe3ZhciBlO3JldHVybiB0Lmo9PShiZSgpLHlyKSYmKGU9Vm9lKHQpLHp1KGUsSG4pKX1mdW5jdGlvbiBQaW4odCxlKXt2YXIgbjtuPWUuYSxCYShuLGUuYy5kKSxwYShuLGUuZC5kKSxKbShuLmEsdC5uKX1mdW5jdGlvbiBFWnQodCxlKXtyZXR1cm4gdShPdihxaih1KFBpKHQuayxlKSwxNSkuT2MoKSxxNCkpLDExMyl9ZnVuY3Rpb24gVFp0KHQsZSl7cmV0dXJuIHUoT3YoSGoodShQaSh0LmssZSksMTUpLk9jKCkscTQpKSwxMTMpfWZ1bmN0aW9uIEZpbih0KXtyZXR1cm4gbmV3IFRuKE9vbih1KHQuYS5kZCgpLDE0KS5nYygpLHQuYS5jZCgpKSwxNil9ZnVuY3Rpb24gXzgodCl7cmV0dXJuIF90KHQsMTQpP3UodCwxNCkuZGMoKTohdC5LYygpLk9iKCl9ZnVuY3Rpb24gcTYodCl7cmV0dXJuIHFUKCksX3QodC5nLDE0NSk/dSh0LmcsMTQ1KTpudWxsfWZ1bmN0aW9uIF9adCh0KXtpZih0LmUuZyE9dC5iKXRocm93IG50KG5ldyBzaCk7cmV0dXJuISF0LmMmJnQuZD4wfWZ1bmN0aW9uIGlpKHQpe3JldHVybiBabih0LmIhPXQuZC5jKSx0LmM9dC5iLHQuYj10LmIuYSwrK3QuYSx0LmMuY31mdW5jdGlvbiBLd3QodCxlKXtJbihlKSxscyh0LmEsdC5jLGUpLHQuYz10LmMrMSZ0LmEubGVuZ3RoLTEsQ3NlKHQpfWZ1bmN0aW9uIFZwKHQsZSl7SW4oZSksdC5iPXQuYi0xJnQuYS5sZW5ndGgtMSxscyh0LmEsdC5iLGUpLENzZSh0KX1mdW5jdGlvbiBDWnQodCxlKXt2YXIgbjtmb3Iobj10LmouYy5sZW5ndGg7bjxlO24rKyl1ZSh0LmosdC5yZygpKX1mdW5jdGlvbiBTWnQodCxlLG4scil7dmFyIHM7cmV0dXJuIHM9cltlLmddW24uZ10sWnQodmUoSyh0LmEscykpKX1mdW5jdGlvbiBZd3QodCxlLG4scixzKXt0aGlzLmk9dCx0aGlzLmE9ZSx0aGlzLmU9bix0aGlzLmo9cix0aGlzLmY9c31mdW5jdGlvbiBBWnQodCxlLG4scixzKXt0aGlzLmE9dCx0aGlzLmU9ZSx0aGlzLmY9bix0aGlzLmI9cix0aGlzLmc9c31mdW5jdGlvbiBCaW4odCl7dCYmT2FuKChVcHQoKSxXOHQpKSwtLXpILHQmJnFIIT0tMSYmKHhZZShxSCkscUg9LTEpfWZ1bmN0aW9uIFJpbigpe3JldHVybiBzeSgpLHV0KG90KGhodCwxKSxvZSwxOTcsMCxbbEcsbGh0LGU1LHQ1XSl9ZnVuY3Rpb24gamluKCl7cmV0dXJuIG83KCksdXQob3QoWV90LDEpLG9lLDM5MywwLFt2RyxQUyxQTyxGU10pfWZ1bmN0aW9uICRpbigpe3JldHVybiBWeigpLHV0KG90KF9DdCwxKSxvZSwzNDAsMCxbJGh0LEVDdCxUQ3Qsa0N0XSl9ZnVuY3Rpb24gemluKCl7cmV0dXJuIE5sKCksdXQob3QodEEsMSksb2UsMzc0LDAsW25OLFcyLGVOLFh5XSl9ZnVuY3Rpb24gcWluKCl7cmV0dXJuIFZsKCksdXQob3QobzRlLDEpLG9lLDI4NSwwLFtaTyx1MCx5YixRT10pfWZ1bmN0aW9uIEhpbigpe3JldHVybiBxMCgpLHV0KG90KHZmdCwxKSxvZSwyMTgsMCxbYmZ0LFhPLENFLHF4XSl9ZnVuY3Rpb24gVmluKCl7cmV0dXJuIEF6KCksdXQob3QoTUF0LDEpLG9lLDMxMSwwLFt5ZnQsU0F0LExBdCxBQXRdKX1mdW5jdGlvbiBHaW4oKXtyZXR1cm4gT2woKSx1dChvdChrNGUsMSksb2UsMzk2LDAsW3RoLElBdCxEQXQsT0F0XSl9ZnVuY3Rpb24gVWluKHQpe3JldHVybiBnJCgpLE1sKF9mdCx0KT91KHRyKF9mdCx0KSwzMzEpLnVnKCk6bnVsbH1mdW5jdGlvbiB1aCh0LGUsbil7cmV0dXJuIGU8MD9Ic3QodCxuKTp1KG4sNjYpLk5qKCkuU2oodCx0LnloKCksZSl9ZnVuY3Rpb24gV2luKHQsZSxuKXt2YXIgcjtyZXR1cm4gcj1zNyhuKSx2cSh0LmQscixlKSxBaSh0LmUsZSxuKSxlfWZ1bmN0aW9uIEtpbih0LGUsbil7dmFyIHI7cmV0dXJuIHI9czcobiksdnEodC5qLHIsZSksQWkodC5rLGUsbiksZX1mdW5jdGlvbiBMWnQodCl7dmFyIGUsbjtyZXR1cm4gZT0oVHYoKSxuPW5ldyBmdixuKSx0JiZac3QoZSx0KSxlfWZ1bmN0aW9uIFh3dCh0KXt2YXIgZTtyZXR1cm4gZT10LnJpKHQuaSksdC5pPjAmJlBjKHQuZywwLGUsMCx0LmkpLGV9ZnVuY3Rpb24gTVp0KHQsZSl7TlIoKTt2YXIgbjtyZXR1cm4gbj11KHRyKG5VLHQpLDU1KSwhbnx8bi53aihlKX1mdW5jdGlvbiBZaW4odCl7aWYodC5wIT0xKXRocm93IG50KG5ldyBSdSk7cmV0dXJuIE1yKHQuZik8PDI0Pj4yNH1mdW5jdGlvbiBYaW4odCl7aWYodC5wIT0xKXRocm93IG50KG5ldyBSdSk7cmV0dXJuIE1yKHQuayk8PDI0Pj4yNH1mdW5jdGlvbiBRaW4odCl7aWYodC5wIT03KXRocm93IG50KG5ldyBSdSk7cmV0dXJuIE1yKHQuayk8PDE2Pj4xNn1mdW5jdGlvbiBaaW4odCl7aWYodC5wIT03KXRocm93IG50KG5ldyBSdSk7cmV0dXJuIE1yKHQuZik8PDE2Pj4xNn1mdW5jdGlvbiBOMCh0KXt2YXIgZTtmb3IoZT0wO3QuT2IoKTspdC5QYigpLGU9UmEoZSwxKTtyZXR1cm4gcSQoZSl9ZnVuY3Rpb24gRFp0KHQsZSl7dmFyIG47cmV0dXJuIG49bmV3IExtLHQueGQobiksbi5hKz0iLi4iLGUueWQobiksbi5hfWZ1bmN0aW9uIEppbih0LGUsbil7dmFyIHI7cj11KHRyKHQuZyxuKSw1NyksdWUodC5hLmMsbmV3IHlhKGUscikpfWZ1bmN0aW9uIHRzbih0LGUsbil7cmV0dXJuIEJudCh2ZShjYyhGbyh0LmYsZSkpKSx2ZShjYyhGbyh0LmYsbikpKSl9ZnVuY3Rpb24gayQodCxlLG4pe3JldHVybiBtcSh0LGUsbixfdChlLDk5KSYmKHUoZSwxOCkuQmImUWEpIT0wKX1mdW5jdGlvbiBlc24odCxlLG4pe3JldHVybiB4Nyh0LGUsbixfdChlLDk5KSYmKHUoZSwxOCkuQmImUWEpIT0wKX1mdW5jdGlvbiBuc24odCxlLG4pe3JldHVybiBfYm4odCxlLG4sX3QoZSw5OSkmJih1KGUsMTgpLkJiJlFhKSE9MCl9ZnVuY3Rpb24gUXd0KHQsZSl7cmV0dXJuIHQ9PShHbigpLHFzKSYmZT09cXM/NDp0PT1xc3x8ZT09cXM/ODozMn1mdW5jdGlvbiBJWnQodCxlKXtyZXR1cm4gR3QoZSk9PT1HdCh0KT8iKHRoaXMgTWFwKSI6ZT09bnVsbD9NdTpXbyhlKX1mdW5jdGlvbiByc24odCxlKXtyZXR1cm4gdShlPT1udWxsP2NjKEZvKHQuZixudWxsKSk6VVQodC5nLGUpLDI4MSl9ZnVuY3Rpb24gT1p0KHQsZSxuKXt2YXIgcjtyZXR1cm4gcj1zNyhuKSxBaSh0LmIscixlKSxBaSh0LmMsZSxuKSxlfWZ1bmN0aW9uIE5adCh0LGUpe3ZhciBuO2ZvcihuPWU7bjspRm0odCxuLmksbi5qKSxuPWhzKG4pO3JldHVybiB0fWZ1bmN0aW9uIFp3dCh0LGUpe3ZhciBuO3JldHVybiBuPUpNKGg4KG5ldyBXcnQodCxlKSkpLE9qKG5ldyBXcnQodCxlKSksbn1mdW5jdGlvbiBZZCh0LGUpe3NvKCk7dmFyIG47cmV0dXJuIG49dSh0LDY2KS5NaigpLEIwbihuLGUpLG4uT2soZSl9ZnVuY3Rpb24gaXNuKHQsZSxuLHIscyl7dmFyIG87bz1NYm4ocyxuLHIpLHVlKGUsQWduKHMsbykpLG0wbih0LHMsZSl9ZnVuY3Rpb24gUFp0KHQsZSxuKXt0Lmk9MCx0LmU9MCxlIT1uJiYoYXJlKHQsZSxuKSxzcmUodCxlLG4pKX1mdW5jdGlvbiBKd3QodCxlKXt2YXIgbjtuPXQucS5nZXRIb3VycygpLHQucS5zZXRGdWxsWWVhcihlK2liKSx5Qyh0LG4pfWZ1bmN0aW9uIHNzbih0LGUsbil7aWYobil7dmFyIHI9bi5lZSgpO3QuYVtlXT1yKG4pfWVsc2UgZGVsZXRlIHQuYVtlXX1mdW5jdGlvbiBBcnQodCxlLG4pe2lmKG4pe3ZhciByPW4uZWUoKTtuPXIobil9ZWxzZSBuPXZvaWQgMDt0LmFbZV09bn1mdW5jdGlvbiBGWnQodCl7aWYodDwwKXRocm93IG50KG5ldyB6cXQoIk5lZ2F0aXZlIGFycmF5IHNpemU6ICIrdCkpfWZ1bmN0aW9uIE9jKHQpe3JldHVybiB0Lm58fChobCh0KSx0Lm49bmV3IHBZdCh0LHdvLHQpLFBvKHQpKSx0Lm59ZnVuY3Rpb24gRl8odCl7cmV0dXJuIFpuKHQuYTx0LmMuYS5sZW5ndGgpLHQuYj10LmEsSHRlKHQpLHQuYy5iW3QuYl19ZnVuY3Rpb24gdG10KHQpe3QuYiE9dC5jJiYodC5hPU50KFFuLE1lLDEsOCw1LDEpLHQuYj0wLHQuYz0wKX1mdW5jdGlvbiBCWnQodCl7dGhpcy5iPW5ldyBBcix0aGlzLmM9bmV3IEFyLHRoaXMuZD1uZXcgQXIsdGhpcy5hPXR9ZnVuY3Rpb24gV20odCxlKXt5aSgpLHZ2LmNhbGwodGhpcyx0KSx0aGlzLmE9ZSx0aGlzLmM9LTEsdGhpcy5iPS0xfWZ1bmN0aW9uIEttKHQsZSxuLHIpeyRRdC5jYWxsKHRoaXMsMSxuLHIpLHRoaXMuYz10LHRoaXMuYj1lfWZ1bmN0aW9uIExydCh0LGUsbixyKXt6UXQuY2FsbCh0aGlzLDEsbixyKSx0aGlzLmM9dCx0aGlzLmI9ZX1mdW5jdGlvbiBNcnQodCxlLG4scixzLG8saCl7cml0LmNhbGwodGhpcyxlLHIscyxvLGgpLHRoaXMuYz10LHRoaXMuYT1ufWZ1bmN0aW9uIHIyKHQsZSxuKXt0aGlzLmU9dCx0aGlzLmE9UW4sdGhpcy5iPXh1ZShlKSx0aGlzLmM9ZSx0aGlzLmQ9bn1mdW5jdGlvbiBEcnQodCl7dGhpcy5lPXQsdGhpcy5jPXRoaXMuZS5hLHRoaXMuYj10aGlzLmUuZyx0aGlzLmQ9dGhpcy5lLml9ZnVuY3Rpb24gUlp0KHQpe3RoaXMuYz10LHRoaXMuYT11KE9oKHQpLDE0OCksdGhpcy5iPXRoaXMuYS5BaigpLk5oKCl9ZnVuY3Rpb24gZW10KHQpe3RoaXMuZD10LHRoaXMuYj10aGlzLmQuYS5lbnRyaWVzKCksdGhpcy5hPXRoaXMuYi5uZXh0KCl9ZnVuY3Rpb24gaTIoKXtBci5jYWxsKHRoaXMpLGlXdCh0aGlzKSx0aGlzLmQuYj10aGlzLmQsdGhpcy5kLmE9dGhpcy5kfWZ1bmN0aW9uIGpadCh0LGUpe1EydC5jYWxsKHRoaXMpLHRoaXMuYT10LHRoaXMuYj1lLHVlKHRoaXMuYS5iLHRoaXMpfWZ1bmN0aW9uIGFzbih0LGUpe3ZhciBuO3JldHVybiBuPWUhPW51bGw/amModCxlKTpjYyhGbyh0LmYsZSkpLG5qKG4pfWZ1bmN0aW9uIG9zbih0LGUpe3ZhciBuO3JldHVybiBuPWUhPW51bGw/amModCxlKTpjYyhGbyh0LmYsZSkpLG5qKG4pfWZ1bmN0aW9uICRadCh0LGUpe3ZhciBuO2ZvcihuPTA7bjxlOysrbilscyh0LG4sbmV3ICQodSh0W25dLDQyKSkpfWZ1bmN0aW9uIGNzbih0LGUpe3ZhciBuO2ZvcihuPXQuZC0xO24+PTAmJnQuYVtuXT09PWVbbl07bi0tKTtyZXR1cm4gbjwwfWZ1bmN0aW9uIHpadCh0LGUpe1E4KCk7dmFyIG47cmV0dXJuIG49dC5qLmctZS5qLmcsbiE9MD9uOjB9ZnVuY3Rpb24gcVp0KHQsZSl7cmV0dXJuIEluKGUpLHQuYSE9bnVsbD9WdG4oZS5LYih0LmEpKTpXSH1mdW5jdGlvbiBFJCh0KXt2YXIgZTtyZXR1cm4gdD9uZXcgQnZ0KHQpOihlPW5ldyBBMCxmaXQoZSx0KSxlKX1mdW5jdGlvbiAkbCh0LGUpe3ZhciBuO3JldHVybiBlLmIuS2IoTnRlKHQsZS5jLkVlKCksKG49bmV3IERuKGUpLG4pKSl9ZnVuY3Rpb24gVCQodCl7eTR0KCksSVV0KHRoaXMsTXIoR3MoUnAodCwyNCksUHEpKSxNcihHcyh0LFBxKSkpfWZ1bmN0aW9uIEhadCgpe0hadD1YLFZnZT1RcigoTnooKSx1dChvdChEN3QsMSksb2UsNDI4LDAsW091dCxNN3RdKSkpfWZ1bmN0aW9uIFZadCgpe1ZadD1YLEdnZT1RcigoJCQoKSx1dChvdChPN3QsMSksb2UsNDI3LDAsW0k3dCxOdXRdKSkpfWZ1bmN0aW9uIEdadCgpe0dadD1YLFdwZT1RcigoeiQoKSx1dChvdChvRXQsMSksb2UsNDI0LDAsW0d1dCxyVl0pKSl9ZnVuY3Rpb24gVVp0KCl7VVp0PVgsUmJlPVFyKCgkOCgpLHV0KG90KEJiZSwxKSxvZSw1MTEsMCxbcE8saWx0XSkpKX1mdW5jdGlvbiBXWnQoKXtXWnQ9WCxoMmU9UXIoKFREKCksdXQob3QoUzl0LDEpLG9lLDQxOSwwLFtOVixDOXRdKSkpfWZ1bmN0aW9uIEtadCgpe0tadD1YLHAyZT1RcigoYkQoKSx1dChvdChNOXQsMSksb2UsNDc5LDAsW0w5dCxGVl0pKSl9ZnVuY3Rpb24gWVp0KCl7WVp0PVgsS3dlPVFyKChsRCgpLHV0KG90KFJfdCwxKSxvZSwzNzYsMCxbd2h0LElPXSkpKX1mdW5jdGlvbiBYWnQoKXtYWnQ9WCxWd2U9UXIoKHlEKCksdXQob3QoTl90LDEpLG9lLDQyMSwwLFtwaHQsYmh0XSkpKX1mdW5jdGlvbiBRWnQoKXtRWnQ9WCxvMmU9UXIoKEkkKCksdXQob3QobTl0LDEpLG9lLDQyMiwwLFt3OXQsbWx0XSkpKX1mdW5jdGlvbiBaWnQoKXtaWnQ9WCxrMmU9UXIoKHgkKCksdXQob3QoSDl0LDEpLG9lLDQyMCwwLFtObHQscTl0XSkpKX1mdW5jdGlvbiBKWnQoKXtKWnQ9WCxqbWU9UXIoKFlmKCksdXQob3QoUm1lLDEpLG9lLDUyMCwwLFtVeSx2Yl0pKSl9ZnVuY3Rpb24gdEp0KCl7dEp0PVgscG1lPVFyKChCXygpLHV0KG90KGdtZSwxKSxvZSw1MjMsMCxbTlMsT1NdKSkpfWZ1bmN0aW9uIGVKdCgpe2VKdD1YLGttZT1RcigoZ2QoKSx1dChvdCh4bWUsMSksb2UsNTE2LDAsW1J3LFpnXSkpKX1mdW5jdGlvbiBuSnQoKXtuSnQ9WCxUbWU9UXIoKEMxKCksdXQob3QoRW1lLDEpLG9lLDUxNSwwLFt6MixWMV0pKSl9ZnVuY3Rpb24gckp0KCl7ckp0PVgsVW1lPVFyKChxdigpLHV0KG90KEdtZSwxKSxvZSw0NTUsMCxbd2IsbjVdKSkpfWZ1bmN0aW9uIGlKdCgpe2lKdD1YLGx5ZT1RcigodiQoKSx1dChvdChjQ3QsMSksb2UsNDI1LDAsW09odCxvQ3RdKSkpfWZ1bmN0aW9uIHNKdCgpe3NKdD1YLHB5ZT1RcigoaXooKSx1dChvdCh1Q3QsMSksb2UsNDk1LDAsW1RHLHhFXSkpKX1mdW5jdGlvbiBhSnQoKXthSnQ9WCx1eWU9UXIoKGQkKCksdXQob3QoYUN0LDEpLG9lLDQ4MCwwLFtJaHQsc0N0XSkpKX1mdW5jdGlvbiBvSnQoKXtvSnQ9WCx3eWU9UXIoKE4kKCksdXQob3QoaEN0LDEpLG9lLDQyNiwwLFtsQ3QsQmh0XSkpKX1mdW5jdGlvbiBjSnQoKXtjSnQ9WCxfM2U9UXIoKE5EKCksdXQob3QoZ1N0LDEpLG9lLDQyOSwwLFtPRyxkU3RdKSkpfWZ1bmN0aW9uIHVKdCgpe3VKdD1YLG8zZT1RcigoaEQoKSx1dChvdChVQ3QsMSksb2UsNDMwLDAsW1VodCxER10pKSl9ZnVuY3Rpb24gQl8oKXtCXz1YLE5TPW5ldyBPYnQoIlVQUEVSIiwwKSxPUz1uZXcgT2J0KCJMT1dFUiIsMSl9ZnVuY3Rpb24gdXNuKHQsZSl7dmFyIG47bj1uZXcgdzYsZTIobiwieCIsZS5hKSxlMihuLCJ5IixlLmIpLEY2KHQsbil9ZnVuY3Rpb24gbHNuKHQsZSl7dmFyIG47bj1uZXcgdzYsZTIobiwieCIsZS5hKSxlMihuLCJ5IixlLmIpLEY2KHQsbil9ZnVuY3Rpb24gaHNuKHQsZSl7dmFyIG4scjtyPSExO2RvIG49UW5lKHQsZSkscj1yfG47d2hpbGUobik7cmV0dXJuIHJ9ZnVuY3Rpb24gbm10KHQsZSl7dmFyIG4scjtmb3Iobj1lLHI9MDtuPjA7KXIrPXQuYVtuXSxuLT1uJi1uO3JldHVybiByfWZ1bmN0aW9uIGxKdCh0LGUpe3ZhciBuO2ZvcihuPWU7bjspRm0odCwtbi5pLC1uLmopLG49aHMobik7cmV0dXJuIHR9ZnVuY3Rpb24gX2EodCxlKXt2YXIgbixyO2ZvcihJbihlKSxyPXQuS2MoKTtyLk9iKCk7KW49ci5QYigpLGUudGQobil9ZnVuY3Rpb24gaEp0KHQsZSl7dmFyIG47cmV0dXJuIG49ZS5jZCgpLG5ldyBDdihuLHQuZS5wYyhuLHUoZS5kZCgpLDE0KSkpfWZ1bmN0aW9uIGtzKHQsZSxuLHIpe3ZhciBzO3M9bmV3IEJ0LHMuYz1lLHMuYj1uLHMuYT1yLHIuYj1uLmE9cywrK3QuYn1mdW5jdGlvbiBsaCh0LGUsbil7dmFyIHI7cmV0dXJuIHI9KFNuKGUsdC5jLmxlbmd0aCksdC5jW2VdKSx0LmNbZV09bixyfWZ1bmN0aW9uIGZzbih0LGUsbil7cmV0dXJuIHUoZT09bnVsbD9sdSh0LmYsbnVsbCxuKTpudyh0LmcsZSxuKSwyODEpfWZ1bmN0aW9uIElydCh0KXtyZXR1cm4gdC5jJiZ0LmQ/and0KHQuYykrIi0+Iitqd3QodC5kKToiZV8iK0R2KHQpfWZ1bmN0aW9uIEM4KHQsZSl7cmV0dXJuKHAyKHQpLGpUKG5ldyBrbih0LG5ldyBDbXQoZSx0LmEpKSkpLnNkKFE3KX1mdW5jdGlvbiBkc24oKXtyZXR1cm4gWWEoKSx1dChvdChrRXQsMSksb2UsMzU2LDAsW0xkLGZiLGZ1LEdjLGpvXSl9ZnVuY3Rpb24gZ3NuKCl7cmV0dXJuIGJlKCksdXQob3QoWmEsMSksQ2MsNjEsMCxbYWMsT24sSG4seXIsQm5dKX1mdW5jdGlvbiBwc24odCl7cmV0dXJuIHZSKCksZnVuY3Rpb24oKXtyZXR1cm4gQ2luKHQsdGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBic24oKXtyZXR1cm4gRGF0ZS5ub3c/RGF0ZS5ub3coKTpuZXcgRGF0ZSgpLmdldFRpbWUoKX1mdW5jdGlvbiBXYSh0KXtyZXR1cm4hdC5jfHwhdC5kPyExOiEhdC5jLmkmJnQuYy5pPT10LmQuaX1mdW5jdGlvbiBmSnQodCl7aWYoIXQuYy5TYigpKXRocm93IG50KG5ldyB2Yyk7cmV0dXJuIHQuYT0hMCx0LmMuVWIoKX1mdW5jdGlvbiBjRCh0KXt0Lmk9MCx5TSh0LmIsbnVsbCkseU0odC5jLG51bGwpLHQuYT1udWxsLHQuZT1udWxsLCsrdC5nfWZ1bmN0aW9uIHJtdCh0KXtFWWUuY2FsbCh0aGlzLHQ9PW51bGw/TXU6V28odCksX3QodCw3OCk/dSh0LDc4KTpudWxsKX1mdW5jdGlvbiBkSnQodCl7UmhlKCksQnp0KHRoaXMpLHRoaXMuYT1uZXcgY3MsTXl0KHRoaXMsdCksYWkodGhpcy5hLHQpfWZ1bmN0aW9uIGdKdCgpe1FldCh0aGlzKSx0aGlzLmI9bmV3IFJlKGJzLGJzKSx0aGlzLmE9bmV3IFJlKE5zLE5zKX1mdW5jdGlvbiBwSnQodCxlKXt0aGlzLmM9MCx0aGlzLmI9ZSxIR3QuY2FsbCh0aGlzLHQsMTc0OTMpLHRoaXMuYT10aGlzLmN9ZnVuY3Rpb24gT3J0KHQpe18kKCksIXoxJiYodGhpcy5jPXQsdGhpcy5lPSEwLHRoaXMuYT1uZXcgbGUpfWZ1bmN0aW9uIF8kKCl7XyQ9WCx6MT0hMCxOZ2U9ITEsUGdlPSExLEJnZT0hMSxGZ2U9ITF9ZnVuY3Rpb24gaW10KHQsZSl7cmV0dXJuIF90KGUsMTQ5KT91bih0LmMsdShlLDE0OSkuYyk6ITF9ZnVuY3Rpb24gc210KHQsZSl7dmFyIG47cmV0dXJuIG49MCx0JiYobis9dC5mLmEvMiksZSYmKG4rPWUuZi5hLzIpLG59ZnVuY3Rpb24gTnJ0KHQsZSl7dmFyIG47cmV0dXJuIG49dShXdih0LmQsZSksMjMpLG58fHUoV3YodC5lLGUpLDIzKX1mdW5jdGlvbiBiSnQodCl7dGhpcy5iPXQsbnIuY2FsbCh0aGlzLHQpLHRoaXMuYT11KE1uKHRoaXMuYi5hLDQpLDEyNil9ZnVuY3Rpb24gdkp0KHQpe3RoaXMuYj10LEw2LmNhbGwodGhpcyx0KSx0aGlzLmE9dShNbih0aGlzLmIuYSw0KSwxMjYpfWZ1bmN0aW9uIGhsKHQpe3JldHVybiB0LnR8fCh0LnQ9bmV3IFN6dCh0KSxKXyhuZXcgJHF0KHQpLDAsdC50KSksdC50fWZ1bmN0aW9uIHZzbigpe3JldHVybiBmbygpLHV0KG90KFdTLDEpLG9lLDEwMywwLFtjMCxfZixIaCxRMCxaMF0pfWZ1bmN0aW9uIHdzbigpe3JldHVybiB1NCgpLHV0KG90KFFTLDEpLG9lLDI0OSwwLFt4YixKTyxrQXQsWFMsRUF0XSl9ZnVuY3Rpb24gbXNuKCl7cmV0dXJuIHQxKCksdXQob3QoZXAsMSksb2UsMTc1LDAsW3FuLHVhLElkLHEyLHRwXSl9ZnVuY3Rpb24geXNuKCl7cmV0dXJuIGlJKCksdXQob3QoWEN0LDEpLG9lLDMxNiwwLFtXQ3QsV2h0LFlDdCxLaHQsS0N0XSl9ZnVuY3Rpb24geHNuKCl7cmV0dXJuIGFDKCksdXQob3QoQ190LDEpLG9lLDMxNSwwLFtfX3QsZmh0LGRodCxBUyxMU10pfWZ1bmN0aW9uIGtzbigpe3JldHVybiBtMigpLHV0KG90KF85dCwxKSxvZSwzMzUsMCxbeGx0LFQ5dCxrbHQscFMsZ1NdKX1mdW5jdGlvbiBFc24oKXtyZXR1cm4gdzcoKSx1dChvdChlM2UsMSksb2UsMzU1LDAsW3I1LEJ4LHFTLHpTLEhTXSl9ZnVuY3Rpb24gVHNuKCl7cmV0dXJuIHA0KCksdXQob3QoWmJlLDEpLG9lLDM2MywwLFtMVixEVixJVixNVixBVl0pfWZ1bmN0aW9uIF9zbigpe3JldHVybiBwaCgpLHV0KG90KG5UdCwxKSxvZSwxNjMsMCxbX08seVMsZ2IseFMsRnldKX1mdW5jdGlvbiBTOCgpe1M4PVg7dmFyIHQsZTthVT0oWmsoKSxlPW5ldyBsUixlKSxvVT0odD1uZXcgS3R0LHQpfWZ1bmN0aW9uIHdKdCh0KXt2YXIgZTtyZXR1cm4gdC5jfHwoZT10LnIsX3QoZSw4OCkmJih0LmM9dShlLDI2KSkpLHQuY31mdW5jdGlvbiBDc24odCl7cmV0dXJuIHQuZT0zLHQuZD10LlliKCksdC5lIT0yPyh0LmU9MCwhMCk6ITF9ZnVuY3Rpb24gUHJ0KHQpe3ZhciBlLG4scjtyZXR1cm4gZT10JnZsLG49dD4+MjImdmwscj10PDA/VzA6MCxjdShlLG4scil9ZnVuY3Rpb24gU3NuKHQpe3ZhciBlLG4scixzO2ZvcihuPXQscj0wLHM9bi5sZW5ndGg7cjxzOysrcillPW5bcl0sTF8oZSl9ZnVuY3Rpb24gQXNuKHQsZSl7dmFyIG4scjtuPXUoVHVuKHQuYyxlKSwxNCksbiYmKHI9bi5nYygpLG4uJGIoKSx0LmQtPXIpfWZ1bmN0aW9uIG1KdCh0LGUpe3ZhciBuLHI7cmV0dXJuIG49ZS5jZCgpLHI9THl0KHQsbiksISFyJiZSYyhyLmUsZS5kZCgpKX1mdW5jdGlvbiBINih0LGUpe3JldHVybiBlPT0wfHx0LmU9PTA/dDplPjA/YmllKHQsZSk6UmNlKHQsLWUpfWZ1bmN0aW9uIGFtdCh0LGUpe3JldHVybiBlPT0wfHx0LmU9PTA/dDplPjA/UmNlKHQsZSk6YmllKHQsLWUpfWZ1bmN0aW9uIElyKHQpe2lmKFZyKHQpKXJldHVybiB0LmM9dC5hLHQuYS5QYigpO3Rocm93IG50KG5ldyB2Yyl9ZnVuY3Rpb24geUp0KHQpe3ZhciBlLG47cmV0dXJuIGU9dC5jLmksbj10LmQuaSxlLms9PShHbigpLElzKSYmbi5rPT1Jc31mdW5jdGlvbiBGcnQodCl7dmFyIGU7cmV0dXJuIGU9bmV3IHp2LEJvKGUsdCksZWUoZSwoeGUoKSxPbyksbnVsbCksZX1mdW5jdGlvbiBCcnQodCxlLG4pe3ZhciByO3JldHVybiByPXQuWWcoZSkscj49MD90Ll9nKHIsbiwhMCk6bHcodCxlLG4pfWZ1bmN0aW9uIG9tdCh0LGUsbixyKXt2YXIgcztmb3Iocz0wO3M8RnV0O3MrKykkaih0LmFbZS5nXVtzXSxuLHJbZS5nXSl9ZnVuY3Rpb24gY210KHQsZSxuLHIpe3ZhciBzO2ZvcihzPTA7czxRSDtzKyspamoodC5hW3NdW2UuZ10sbixyW2UuZ10pfWZ1bmN0aW9uIHVtdCh0LGUsbixyLHMpeyRRdC5jYWxsKHRoaXMsZSxyLHMpLHRoaXMuYz10LHRoaXMuYT1ufWZ1bmN0aW9uIGxtdCh0LGUsbixyLHMpe3pRdC5jYWxsKHRoaXMsZSxyLHMpLHRoaXMuYz10LHRoaXMuYT1ufWZ1bmN0aW9uIGhtdCh0LGUsbixyLHMpe2tKdC5jYWxsKHRoaXMsZSxyLHMpLHRoaXMuYz10LHRoaXMuYT1ufWZ1bmN0aW9uIGJmKHQsZSxuLHIscyl7a0p0LmNhbGwodGhpcyxlLHIscyksdGhpcy5jPXQsdGhpcy5iPW59ZnVuY3Rpb24geEp0KHQsZSxuKXtvUi5jYWxsKHRoaXMsbiksdGhpcy5iPXQsdGhpcy5jPWUsdGhpcy5kPShLaXQoKSxNZnQpfWZ1bmN0aW9uIGtKdCh0LGUsbil7dGhpcy5kPXQsdGhpcy5rPWU/MTowLHRoaXMuZj1uPzE6MCx0aGlzLm89LTEsdGhpcy5wPTB9ZnVuY3Rpb24gRUp0KHQsZSxuKXt2YXIgcjtyPW5ldyBjMnQodC5hKSxHXyhyLHQuYS5hKSxsdShyLmYsZSxuKSx0LmEuYT1yfWZ1bmN0aW9uIHVEKHQsZSl7dC5xaSh0LmkrMSksZl8odCx0LmksdC5vaSh0LmksZSkpLHQuYmkodC5pKyssZSksdC5jaSgpfWZ1bmN0aW9uIFJfKHQpe3ZhciBlLG47Kyt0LmosZT10Lmcsbj10LmksdC5nPW51bGwsdC5pPTAsdC5kaShuLGUpLHQuY2koKX1mdW5jdGlvbiBMMSh0KXt2YXIgZSxuO3JldHVybiBEcih0KSxlPUtlbih0Lmxlbmd0aCksbj1uZXcgSmMoZSksRXl0KG4sdCksbn1mdW5jdGlvbiBWNih0KXt2YXIgZTtyZXR1cm4gZT0oRHIodCksdD9uZXcgcXUodCk6aDgodC5LYygpKSksanN0KGUpLHl6KGUpfWZ1bmN0aW9uIElnKHQsZSl7dmFyIG47cmV0dXJuIG49KFNuKGUsdC5jLmxlbmd0aCksdC5jW2VdKSxvYnQodC5jLGUsMSksbn1mdW5jdGlvbiBQaSh0LGUpe3ZhciBuO3JldHVybiBuPXUodC5jLnhjKGUpLDE0KSwhbiYmKG49dC5pYyhlKSksdC5wYyhlLG4pfWZ1bmN0aW9uIGZtdCh0LGUpe3ZhciBuLHI7cmV0dXJuIG49KEluKHQpLHQpLHI9KEluKGUpLGUpLG49PXI/MDpuPHI/LTE6MX1mdW5jdGlvbiBUSnQodCl7dmFyIGU7cmV0dXJuIGU9dC5lK3QuZixpc05hTihlKSYmRWoodC5kKT90LmQ6ZX1mdW5jdGlvbiBQMCh0LGUpe3JldHVybiB0LmE/WXIodC5hLHQuYik6dC5hPW5ldyBGbCh0LmQpLGNfKHQuYSxlKSx0fWZ1bmN0aW9uIGRtdCh0LGUpe2lmKHQ8MHx8dD5lKXRocm93IG50KG5ldyBDbyhINHQodCxlLCJpbmRleCIpKSk7cmV0dXJuIHR9ZnVuY3Rpb24gUnJ0KHQsZSxuLHIpe3ZhciBzO3JldHVybiBzPU50KFNyLEpyLDI1LGUsMTUsMSksJGRuKHMsdCxlLG4sciksc31mdW5jdGlvbiBMc24odCxlKXt2YXIgbjtuPXQucS5nZXRIb3VycygpKyhlLzYwfDApLHQucS5zZXRNaW51dGVzKGUpLHlDKHQsbil9ZnVuY3Rpb24gTXNuKHQsZSl7cmV0dXJuIGIuTWF0aC5taW4oR3AoZS5hLHQuZC5kLmMpLEdwKGUuYix0LmQuZC5jKSl9ZnVuY3Rpb24gRzYodCxlKXtyZXR1cm4gaGEoZSk/ZT09bnVsbD9hNXQodC5mLG51bGwpOk9uZSh0LmcsZSk6YTV0KHQuZixlKX1mdW5jdGlvbiBNMSh0KXt0aGlzLmM9dCx0aGlzLmE9bmV3IFModGhpcy5jLmEpLHRoaXMuYj1uZXcgUyh0aGlzLmMuYil9ZnVuY3Rpb24gQyQoKXt0aGlzLmU9bmV3IGxlLHRoaXMuYz1uZXcgbGUsdGhpcy5kPW5ldyBsZSx0aGlzLmI9bmV3IGxlfWZ1bmN0aW9uIF9KdCgpe3RoaXMuZz1uZXcgX3B0LHRoaXMuYj1uZXcgX3B0LHRoaXMuYT1uZXcgbGUsdGhpcy5rPW5ldyBsZX1mdW5jdGlvbiBDSnQodCxlLG4pe3RoaXMuYT10LHRoaXMuYz1lLHRoaXMuZD1uLHVlKGUuZSx0aGlzKSx1ZShuLmIsdGhpcyl9ZnVuY3Rpb24gU0p0KHQsZSl7cUd0LmNhbGwodGhpcyxlLnJkKCksZS5xZCgpJi02KSxJbih0KSx0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBBSnQodCxlKXtIR3QuY2FsbCh0aGlzLGUucmQoKSxlLnFkKCkmLTYpLEluKHQpLHRoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIGdtdCh0LGUpe1VldC5jYWxsKHRoaXMsZS5yZCgpLGUucWQoKSYtNiksSW4odCksdGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gUyQodCxlLG4pe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuYz1uLHVlKHQudCx0aGlzKSx1ZShlLmksdGhpcyl9ZnVuY3Rpb24gQSQoKXt0aGlzLmI9bmV3IGNzLHRoaXMuYT1uZXcgY3MsdGhpcy5iPW5ldyBjcyx0aGlzLmE9bmV3IGNzfWZ1bmN0aW9uIEwkKCl7TCQ9WCxWUz1uZXcgdHMoIm9yZy5lY2xpcHNlLmVsay5sYWJlbHMubGFiZWxNYW5hZ2VyIil9ZnVuY3Rpb24gTEp0KCl7TEp0PVgsZDl0PW5ldyBIcygic2VwYXJhdGVMYXllckNvbm5lY3Rpb25zIiwoZHooKSxjbHQpKX1mdW5jdGlvbiBZZigpe1lmPVgsVXk9bmV3IEZidCgiUkVHVUxBUiIsMCksdmI9bmV3IEZidCgiQ1JJVElDQUwiLDEpfWZ1bmN0aW9uIGxEKCl7bEQ9WCx3aHQ9bmV3IElidCgiU1RBQ0tFRCIsMCksSU89bmV3IElidCgiU0VRVUVOQ0VEIiwxKX1mdW5jdGlvbiBoRCgpe2hEPVgsVWh0PW5ldyBxYnQoIkZJWEVEIiwwKSxERz1uZXcgcWJ0KCJDRU5URVJfTk9ERSIsMSl9ZnVuY3Rpb24gRHNuKHQsZSl7dmFyIG47cmV0dXJuIG49UDNuKHQsZSksdC5iPW5ldyByeihuLmMubGVuZ3RoKSxXeW4odCxuKX1mdW5jdGlvbiBJc24odCxlLG4pe3ZhciByO3JldHVybisrdC5lLC0tdC5mLHI9dSh0LmRbZV0uJGMobiksMTMzKSxyLmRkKCl9ZnVuY3Rpb24gTUp0KHQpe3ZhciBlO3JldHVybiB0LmF8fChlPXQucixfdChlLDE0OCkmJih0LmE9dShlLDE0OCkpKSx0LmF9ZnVuY3Rpb24gcG10KHQpe2lmKHQuYSl7aWYodC5lKXJldHVybiBwbXQodC5lKX1lbHNlIHJldHVybiB0O3JldHVybiBudWxsfWZ1bmN0aW9uIE9zbih0LGUpe3JldHVybiB0LnA8ZS5wPzE6dC5wPmUucD8tMTowfWZ1bmN0aW9uIE0kKHQsZSl7cmV0dXJuIEluKGUpLHQuYzx0LmQ/KHQuemUoZSx0LmMrKyksITApOiExfWZ1bmN0aW9uIERKdCh0LGUpe3JldHVybiBNbCh0LmEsZSk/KEc2KHQuYSxlKSwhMCk6ITF9ZnVuY3Rpb24gTnNuKHQpe3ZhciBlLG47cmV0dXJuIGU9dC5jZCgpLG49dSh0LmRkKCksMTQpLEdNKG4uTmMoKSxuZXcgcnR0KGUpKX1mdW5jdGlvbiBQc24odCl7dmFyIGU7cmV0dXJuIGU9dShsd3QodC5iLHQuYi5sZW5ndGgpLDkpLG5ldyBvaCh0LmEsZSx0LmMpfWZ1bmN0aW9uIEZzbih0KXt2YXIgZTtyZXR1cm4gcDIodCksZT1uZXcgQUt0KHQsdC5hLmUsdC5hLmR8NCksbmV3IHoydCh0LGUpfWZ1bmN0aW9uIElKdCh0KXt2YXIgZTtmb3IocXAodCksZT0wO3QuYS5zZChuZXcgVHMpOyllPVJhKGUsMSk7cmV0dXJuIGV9ZnVuY3Rpb24gYm10KHQsZSxuKXt2YXIgcixzO2ZvcihyPTAscz0wO3M8ZS5sZW5ndGg7cysrKXIrPXQuJGYoZVtzXSxyLG4pfWZ1bmN0aW9uIEJzbih0LGUpe3ZhciBuO3QuQyYmKG49dSh4byh0LmIsZSksMTI0KS5uLG4uZD10LkMuZCxuLmE9dC5DLmEpfWZ1bmN0aW9uIFU2KHQsZSxuKXtyZXR1cm4gb0QoZSx0LmUuSGQoKS5nYygpKSxvRChuLHQuYy5IZCgpLmdjKCkpLHQuYVtlXVtuXX1mdW5jdGlvbiBPZyh0LGUpe2ViKCksdGhpcy5lPXQsdGhpcy5kPTEsdGhpcy5hPXV0KG90KFNyLDEpLEpyLDI1LDE1LFtlXSl9ZnVuY3Rpb24gRCQodCxlLG4scil7dGhpcy5mPXQsdGhpcy5lPWUsdGhpcy5kPW4sdGhpcy5iPXIsdGhpcy5jPXI/ci5kOm51bGx9ZnVuY3Rpb24gdm10KHQpe3ZhciBlLG4scixzO3M9dC5kLGU9dC5hLG49dC5iLHI9dC5jLHQuZD1uLHQuYT1yLHQuYj1zLHQuYz1lfWZ1bmN0aW9uIFJzbih0LGUsbixyKXtpbGUodCxlLG4seDcodCxlLHIsX3QoZSw5OSkmJih1KGUsMTgpLkJiJlFhKSE9MCkpfWZ1bmN0aW9uIGpzbih0LGUpe21yKGUsIkxhYmVsIG1hbmFnZW1lbnQiLDEpLG5qKEsodCwoTCQoKSxWUykpKSxvcihlKX1mdW5jdGlvbiBKYyh0KXtRZXQodGhpcyksQ2oodD49MCwiSW5pdGlhbCBjYXBhY2l0eSBtdXN0IG5vdCBiZSBuZWdhdGl2ZSIpfWZ1bmN0aW9uIE9KdCgpe09KdD1YLFlnZT1RcigoWmYoKSx1dChvdChNeSwxKSxvZSwyMzIsMCxbZmMsaXUsZGNdKSkpfWZ1bmN0aW9uIE5KdCgpe05KdD1YLFFnZT1RcigocmwoKSx1dChvdChYZ2UsMSksb2UsNDYxLDAsW0FkLGxiLGtmXSkpKX1mdW5jdGlvbiBQSnQoKXtQSnQ9WCxKZ2U9UXIoKFR1KCksdXQob3QoWmdlLDEpLG9lLDQ2MiwwLFtzMSxoYixFZl0pKSl9ZnVuY3Rpb24gRkp0KCl7Rkp0PVgsUmdlPVFyKChOMSgpLHV0KG90KHdsLDEpLG9lLDEzMiwwLFtTN3QsWWwsTHldKSkpfWZ1bmN0aW9uIEJKdCgpe0JKdD1YLGdiZT1Rcigoal8oKSx1dChvdCh4RXQsMSksb2UsMzc5LDAsW1l1dCxLdXQsWHV0XSkpKX1mdW5jdGlvbiBSSnQoKXtSSnQ9WCxMYmU9UXIoKGV3KCksdXQob3QoX0V0LDEpLG9lLDQyMywwLFt6NCxURXQsZWx0XSkpKX1mdW5jdGlvbiBqSnQoKXtqSnQ9WCxjMmU9UXIoKEs2KCksdXQob3QoeDl0LDEpLG9lLDMxNCwwLFtDeCx3Tyx5OXRdKSkpfWZ1bmN0aW9uICRKdCgpeyRKdD1YLHUyZT1RcigoWCQoKSx1dChvdChFOXQsMSksb2UsMzM3LDAsW2s5dCxPVix5bHRdKSkpfWZ1bmN0aW9uIHpKdCgpe3pKdD1YLGQyZT1RcigoaDIoKSx1dChvdChmMmUsMSksb2UsNDUwLDAsW0VsdCxvRSxHNF0pKSl9ZnVuY3Rpb24gcUp0KCl7cUp0PVgsaTJlPVFyKChKdigpLHV0KG90KGxsdCwxKSxvZSwzNjEsMCxbQXcsZGIsU3ddKSkpfWZ1bmN0aW9uIEhKdCgpe0hKdD1YLHgyZT1RcigoQjAoKSx1dChvdCh5MmUsMSksb2UsMzAzLDAsW3lPLFc0LFN4XSkpKX1mdW5jdGlvbiBWSnQoKXtWSnQ9WCxtMmU9UXIoKEc4KCksdXQob3QoT2x0LDEpLG9lLDI5MiwwLFtEbHQsSWx0LG1PXSkpKX1mdW5jdGlvbiBHSnQoKXtHSnQ9WCxqd2U9UXIoKFlfKCksdXQob3QoVF90LDEpLG9lLDM3OCwwLFt1aHQsRV90LHVHXSkpKX1mdW5jdGlvbiBVSnQoKXtVSnQ9WCxXd2U9UXIoKHV6KCksdXQob3QoQl90LDEpLG9lLDM3NSwwLFtQX3Qsdmh0LEZfdF0pKSl9ZnVuY3Rpb24gV0p0KCl7V0p0PVgsSHdlPVFyKChqMCgpLHV0KG90KE9fdCwxKSxvZSwzMzksMCxbYmIsSV90LGdodF0pKSl9ZnVuY3Rpb24gS0p0KCl7S0p0PVgsVXdlPVFyKChobygpLHV0KG90KEd3ZSwxKSxvZSw0NTIsMCxbTVMsYWwsc3VdKSkpfWZ1bmN0aW9uIFlKdCgpe1lKdD1YLFF3ZT1RcigoZ3ooKSx1dChvdChWX3QsMSksb2UsMzc3LDAsW3hodCxtRSxHeV0pKSl9ZnVuY3Rpb24gWEp0KCl7WEp0PVgsWXdlPVFyKChaOCgpLHV0KG90KCRfdCwxKSxvZSwzMzYsMCxbbWh0LGpfdCxEU10pKSl9ZnVuY3Rpb24gUUp0KCl7UUp0PVgsWHdlPVFyKChveigpLHV0KG90KEhfdCwxKSxvZSwzMzgsMCxbcV90LHlodCx6X3RdKSkpfWZ1bmN0aW9uIFpKdCgpe1pKdD1YLGxtZT1RcigoWnYoKSx1dChvdCh1bWUsMSksb2UsNDU0LDAsW09PLElTLGRHXSkpKX1mdW5jdGlvbiBKSnQoKXtKSnQ9WCx2eWU9UXIoKF96KCksdXQob3QoYnllLDEpLG9lLDQ0MiwwLFtGaHQsTmh0LFBodF0pKSl9ZnVuY3Rpb24gdHRlKCl7dHRlPVgsbXllPVFyKChSRCgpLHV0KG90KGdDdCwxKSxvZSwzODAsMCxbX0csZkN0LGRDdF0pKSl9ZnVuY3Rpb24gZXRlKCl7ZXRlPVgsRnllPVFyKChUeigpLHV0KG90KElDdCwxKSxvZSwzODEsMCxbREN0LHFodCxNQ3RdKSkpfWZ1bmN0aW9uIG50ZSgpe250ZT1YLFB5ZT1RcigoY3ooKSx1dChvdChBQ3QsMSksb2UsMjkzLDAsW3podCxTQ3QsQ0N0XSkpKX1mdW5jdGlvbiBydGUoKXtydGU9WCxyM2U9UXIoKFZEKCksdXQob3QoSGh0LDEpLG9lLDQzNywwLFtBRyxMRyxNR10pKSl9ZnVuY3Rpb24gaXRlKCl7aXRlPVgsYTRlPVFyKCgkMCgpLHV0KG90KHhBdCwxKSxvZSwzMzQsMCxbSEcsbnAsWVNdKSkpfWZ1bmN0aW9uIHN0ZSgpe3N0ZT1YLG40ZT1RcigoRDEoKSx1dChvdCh1QXQsMSksb2UsMjcyLDAsW1RFLFl5LF9FXSkpKX1mdW5jdGlvbiAkc24oKXtyZXR1cm4gdmEoKSx1dChvdChUQXQsMSksb2UsOTgsMCxba2IsVTEsU0UsVTIsaDAsS2NdKX1mdW5jdGlvbiBzMih0LGUpe3JldHVybiF0Lm8mJih0Lm89bmV3IElsKChudSgpLF9iKSwkdyx0LDApKSxZaXQodC5vLGUpfWZ1bmN0aW9uIHpzbih0KXtyZXR1cm4hdC5nJiYodC5nPW5ldyBrayksIXQuZy5kJiYodC5nLmQ9bmV3IFR6dCh0KSksdC5nLmR9ZnVuY3Rpb24gcXNuKHQpe3JldHVybiF0LmcmJih0Lmc9bmV3IGtrKSwhdC5nLmEmJih0LmcuYT1uZXcgX3p0KHQpKSx0LmcuYX1mdW5jdGlvbiBIc24odCl7cmV0dXJuIXQuZyYmKHQuZz1uZXcga2spLCF0LmcuYiYmKHQuZy5iPW5ldyBFenQodCkpLHQuZy5ifWZ1bmN0aW9uIGZEKHQpe3JldHVybiF0LmcmJih0Lmc9bmV3IGtrKSwhdC5nLmMmJih0LmcuYz1uZXcgQ3p0KHQpKSx0LmcuY31mdW5jdGlvbiBWc24odCxlLG4pe3ZhciByLHM7Zm9yKHM9bmV3IFY4KGUsdCkscj0wO3I8bjsrK3IpJHoocyk7cmV0dXJuIHN9ZnVuY3Rpb24ganJ0KHQsZSxuKXt2YXIgcixzO2lmKG4hPW51bGwpZm9yKHI9MDtyPGU7KytyKXM9bltyXSx0LmZpKHIscyl9ZnVuY3Rpb24gJHJ0KHQsZSxuLHIpe3ZhciBzO3JldHVybiBzPU50KFNyLEpyLDI1LGUrMSwxNSwxKSxDbW4ocyx0LGUsbixyKSxzfWZ1bmN0aW9uIE50KHQsZSxuLHIscyxvKXt2YXIgaDtyZXR1cm4gaD12c2UocyxyKSxzIT0xMCYmdXQob3QodCxvKSxlLG4scyxoKSxofWZ1bmN0aW9uIEdzbih0LGUsbixyKXtyZXR1cm4gbiYmKHI9bi5naChlLGVzKG4uVGcoKSx0LmMuTGooKSksbnVsbCxyKSkscn1mdW5jdGlvbiBVc24odCxlLG4scil7cmV0dXJuIG4mJihyPW4uaWgoZSxlcyhuLlRnKCksdC5jLkxqKCkpLG51bGwscikpLHJ9ZnVuY3Rpb24gd210KHQsZSxuKXt1KHQuYiw2NSksdSh0LmIsNjUpLHUodC5iLDY1KSxfdSh0LmEsbmV3IGdLdChuLGUsdCkpfWZ1bmN0aW9uIG1tdCh0LGUsbil7aWYodDwwfHxlPm58fGU8dCl0aHJvdyBudChuZXcgWXB0KEZxK3QrUjZ0K2UrRjZ0K24pKX1mdW5jdGlvbiBBOCh0KXtpZighdCl0aHJvdyBudChuZXcgSG8oIlVuYWJsZSB0byBhZGQgZWxlbWVudCB0byBxdWV1ZSIpKX1mdW5jdGlvbiB6cnQodCl7dD8odGhpcy5jPXQsdGhpcy5iPW51bGwpOih0aGlzLmM9bnVsbCx0aGlzLmI9bmV3IGxlKX1mdW5jdGlvbiBxcnQodCxlKXtSUi5jYWxsKHRoaXMsdCxlKSx0aGlzLmE9TnQoZTZuLElxLDQzNiwyLDAsMSksdGhpcy5iPSEwfWZ1bmN0aW9uIHltdCh0KXtLbmUuY2FsbCh0aGlzLHQsMCksaVd0KHRoaXMpLHRoaXMuZC5iPXRoaXMuZCx0aGlzLmQuYT10aGlzLmR9ZnVuY3Rpb24gSHJ0KHQpe3ZhciBlO3JldHVybiBlPXQuYixlLmI9PTA/bnVsbDp1KGUxKGUsMCksMTg4KS5ifWZ1bmN0aW9uIGF0ZSh0LGUpe3ZhciBuO3JldHVybiBuPW5ldyBWZSxuLmM9ITAsbi5kPWUuZGQoKSx0aGUodCxlLmNkKCksbil9ZnVuY3Rpb24gV3NuKHQsZSl7dmFyIG47bj10LnEuZ2V0SG91cnMoKSsoZS8zNjAwfDApLHQucS5zZXRTZWNvbmRzKGUpLHlDKHQsbil9ZnVuY3Rpb24geG10KHQsZSxuKXt2YXIgcjtyPXQuYltuLmMucF1bbi5wXSxyLmIrPWUuYixyLmMrPWUuYyxyLmErPWUuYSwrK3IuYX1mdW5jdGlvbiBHcCh0LGUpe3ZhciBuLHI7cmV0dXJuIG49dC5hLWUuYSxyPXQuYi1lLmIsYi5NYXRoLnNxcnQobipuK3Iqcil9ZnVuY3Rpb24gSSQoKXtJJD1YLHc5dD1uZXcgU2J0KCJRVUFEUkFUSUMiLDApLG1sdD1uZXcgU2J0KCJTQ0FOTElORSIsMSl9ZnVuY3Rpb24gb3RlKCl7b3RlPVgsdG1lPWVsKEVpKG5ldyBacywoWWEoKSxMZCksKGNvKCksc2x0KSksam8sYk8pfWZ1bmN0aW9uIEtzbigpe3JldHVybiBjeSgpLHV0KG90KGlmdCwxKSxvZSwyOTEsMCxbcmZ0LEdPLFZPLG5mdCxxTyxIT10pfWZ1bmN0aW9uIFlzbigpe3JldHVybiBRZCgpLHV0KG90KG1TdCwxKSxvZSwyNDgsMCxbdGZ0LCRPLHpPLEZHLE5HLFBHXSl9ZnVuY3Rpb24gWHNuKCl7cmV0dXJuIHJ4KCksdXQob3QoYUUsMSksb2UsMjI3LDAsW3NFLGRTLGlFLE95LFY0LEg0XSl9ZnVuY3Rpb24gUXNuKCl7cmV0dXJuIGY3KCksdXQob3Qoejl0LDEpLG9lLDI3NSwwLFtiUyxCOXQsJDl0LGo5dCxSOXQsRjl0XSl9ZnVuY3Rpb24gWnNuKCl7cmV0dXJuIG5JKCksdXQob3QoUDl0LDEpLG9lLDI3NCwwLFtCVixJOXQsTjl0LEQ5dCxPOXQsTGx0XSl9ZnVuY3Rpb24gSnNuKCl7cmV0dXJuIFp6KCksdXQob3Qoa190LDEpLG9lLDMxMywwLFtjaHQseV90LG9odCxtX3QseF90LGNHXSl9ZnVuY3Rpb24gdGFuKCl7cmV0dXJuIG5xKCksdXQob3QoQTl0LDEpLG9lLDI3NiwwLFtfbHQsVGx0LFNsdCxDbHQsQWx0LFBWXSl9ZnVuY3Rpb24gZWFuKCl7cmV0dXJuIGZDKCksdXQob3QoS21lLDEpLG9lLDMyNywwLFt3RyxUaHQsQ2h0LF9odCxTaHQsRWh0XSl9ZnVuY3Rpb24gbmFuKCl7cmV0dXJuIGlsKCksdXQob3QoVkcsMSksb2UsMjczLDAsW0ViLHRnLHROLEpTLFpTLEh4XSl9ZnVuY3Rpb24gcmFuKCl7cmV0dXJuIHRxKCksdXQob3QocEF0LDEpLG9lLDMxMiwwLFt3ZnQsZkF0LGdBdCxsQXQsZEF0LGhBdF0pfWZ1bmN0aW9uIGlhbigpe3JldHVybiBHbigpLHV0KG90KHJsdCwxKSxvZSwyNjcsMCxbcXMsY2EsSXMsVWMsUGwscTFdKX1mdW5jdGlvbiBjdGUodCl7UG0oISF0LmMpLENydCh0LmUsdCksdC5jLlFiKCksdC5jPW51bGwsdC5iPWh5dCh0KSxSMnQodC5lLHQpfWZ1bmN0aW9uIHV0ZSh0KXtyZXR1cm4gQ3J0KHQuYy5hLmUsdCksWm4odC5iIT10LmMuYS5kKSx0LmE9dC5iLHQuYj10LmIuYSx0LmF9ZnVuY3Rpb24ga210KHQpe3ZhciBlO3JldHVybiF0LmEmJnQuYiE9LTEmJihlPXQuYy5UZygpLHQuYT13bihlLHQuYikpLHQuYX1mdW5jdGlvbiBPcih0LGUpe3JldHVybiB0LmhpKCkmJnQuSGMoZSk/ITE6KHQuWWgoZSksITApfWZ1bmN0aW9uIFhmKHQsZSl7cmV0dXJuIHREKGUsIkhvcml6b250YWwgYWxpZ25tZW50IGNhbm5vdCBiZSBudWxsIiksdC5iPWUsdH1mdW5jdGlvbiBsdGUodCxlLG4pe3lpKCk7dmFyIHI7cmV0dXJuIHI9bmIodCxlKSxuJiZyJiZPZW4odCkmJihyPW51bGwpLHJ9ZnVuY3Rpb24gTmcodCxlLG4pe3ZhciByLHM7Zm9yKHM9dC5LYygpO3MuT2IoKTspcj11KHMuUGIoKSwzNyksd0MocixlLG4pfWZ1bmN0aW9uIEVtdCh0LGUpe3ZhciBuLHI7Zm9yKHI9ZS5LYygpO3IuT2IoKTspbj11KHIuUGIoKSwzNyksSXVlKHQsbiwwLDApfWZ1bmN0aW9uIFRtdCh0LGUsbil7dmFyIHI7dC5kW2UuZ109bixyPXQuZy5jLHJbZS5nXT1iLk1hdGgubWF4KHJbZS5nXSxuKzEpfWZ1bmN0aW9uIGREKHQsZSl7dmFyIG4scixzO3JldHVybiBzPXQucixyPXQuZCxuPUVDKHQsZSwhMCksbi5iIT1zfHxuLmEhPXJ9ZnVuY3Rpb24gaHRlKHQsZSl7cmV0dXJuIEFWdCh0LmUsZSl8fHYyKHQuZSxlLG5ldyBxaWUoZSkpLHUoV3YodC5lLGUpLDExMyl9ZnVuY3Rpb24gYTIodCxlLG4scil7cmV0dXJuIEluKHQpLEluKGUpLEluKG4pLEluKHIpLG5ldyBpd3QodCxlLG5ldyBFZSl9ZnVuY3Rpb24gSWwodCxlLG4scil7dGhpcy5yaigpLHRoaXMuYT1lLHRoaXMuYj10LHRoaXMuYz1uZXcgZXd0KHRoaXMsZSxuLHIpfWZ1bmN0aW9uIFZydCh0LGUsbixyLHMsbyl7VXd0LmNhbGwodGhpcyxlLHIscyxvKSx0aGlzLmM9dCx0aGlzLmI9bn1mdW5jdGlvbiBnRCh0LGUsbixyLHMsbyl7VXd0LmNhbGwodGhpcyxlLHIscyxvKSx0aGlzLmM9dCx0aGlzLmE9bn1mdW5jdGlvbiBzYW4odCxlLG4pe3ZhciByLHMsbztyPUkwKHQsbikscz1udWxsLHImJihzPUY0dChyKSksbz1zLGppZShlLG4sbyl9ZnVuY3Rpb24gYWFuKHQsZSxuKXt2YXIgcixzLG87cj1JMCh0LG4pLHM9bnVsbCxyJiYocz1GNHQocikpLG89cyxqaWUoZSxuLG8pfWZ1bmN0aW9uIHBEKHQsZSxuKXt2YXIgcixzO3JldHVybiBzPShyPWI3KHQuYixlKSxyKSxzP0VxKG1EKHQscyksbik6bnVsbH1mdW5jdGlvbiBMOCh0LGUpe3ZhciBuO3JldHVybiBuPXQuWWcoZSksbj49MD90Ll9nKG4sITAsITApOmx3KHQsZSwhMCl9ZnVuY3Rpb24gb2FuKHQsZSl7cmV0dXJuIGpzKFp0KHZlKEsodCwoYWUoKSxJdykpKSksWnQodmUoSyhlLEl3KSkpKX1mdW5jdGlvbiBmdGUoKXtmdGU9WCxmeWU9YXcoYXcoT1IobmV3IFpzLChvNygpLFBTKSksKGZDKCksd0cpKSxUaHQpfWZ1bmN0aW9uIGNhbih0LGUsbil7dmFyIHI7cmV0dXJuIHI9bnJlKHQsZSxuKSx0LmI9bmV3IHJ6KHIuYy5sZW5ndGgpLEQ1dCh0LHIpfWZ1bmN0aW9uIHVhbih0KXtpZih0LmI8PTApdGhyb3cgbnQobmV3IHZjKTtyZXR1cm4tLXQuYix0LmEtPXQuYy5jLGRlKHQuYSl9ZnVuY3Rpb24gbGFuKHQpe3ZhciBlO2lmKCF0LmEpdGhyb3cgbnQobmV3IGJYdCk7cmV0dXJuIGU9dC5hLHQuYT1ocyh0LmEpLGV9ZnVuY3Rpb24gaGFuKHQpe2Zvcig7IXQuYTspaWYoIXRLdCh0LmMsbmV3IGplKHQpKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBXNih0KXt2YXIgZTtyZXR1cm4gRHIodCksX3QodCwxOTgpPyhlPXUodCwxOTgpLGUpOm5ldyBvdHQodCl9ZnVuY3Rpb24gZmFuKHQpe08kKCksdSh0LldlKChkaSgpLEt5KSksMTc0KS5GYygoaWwoKSx0TikpLHQuWWUoZGZ0LG51bGwpfWZ1bmN0aW9uIE8kKCl7TyQ9WCxBM2U9bmV3IHlaLE0zZT1uZXcgeFosTDNlPVhjbigoZGkoKSxkZnQpLEEzZSxtYixNM2UpfWZ1bmN0aW9uIE4kKCl7TiQ9WCxsQ3Q9bmV3IHpidCgiTEVBRl9OVU1CRVIiLDApLEJodD1uZXcgemJ0KCJOT0RFX1NJWkUiLDEpfWZ1bmN0aW9uIGRhbih0LGUsbil7dC5hPWUsdC5jPW4sdC5iLmEuJGIoKSxNaCh0LmQpLHQuZS5hLmM9TnQoUW4sTWUsMSwwLDUsMSl9ZnVuY3Rpb24gR3J0KHQpe3QuYT1OdChTcixKciwyNSx0LmIrMSwxNSwxKSx0LmM9TnQoU3IsSnIsMjUsdC5iLDE1LDEpLHQuZD0wfWZ1bmN0aW9uIGdhbih0LGUpe3QuYS51ZShlLmQsdC5iKT4wJiYodWUodC5jLG5ldyBNdnQoZS5jLGUuZCx0LmQpKSx0LmI9ZS5kKX1mdW5jdGlvbiBfbXQodCxlKXtpZih0Lmc9PW51bGx8fGU+PXQuaSl0aHJvdyBudChuZXcgV2V0KGUsdC5pKSk7cmV0dXJuIHQuZ1tlXX1mdW5jdGlvbiBkdGUodCxlLG4pe2lmKFk4KHQsbiksbiE9bnVsbCYmIXQud2oobikpdGhyb3cgbnQobmV3IEd0dCk7cmV0dXJuIG59ZnVuY3Rpb24gZ3RlKHQpe3ZhciBlO2lmKHQuRWsoKSlmb3IoZT10LmktMTtlPj0wOy0tZSlBdCh0LGUpO3JldHVybiBYd3QodCl9ZnVuY3Rpb24gcGFuKHQpe3ZhciBlLG47aWYoIXQuYilyZXR1cm4gbnVsbDtmb3Iobj10LmI7ZT1uLmFbMF07KW49ZTtyZXR1cm4gbn1mdW5jdGlvbiBiYW4odCxlKXt2YXIgbixyO3JldHVybiBGWnQoZSksbj0ocj10LnNsaWNlKDAsZSksU210KHIsdCkpLG4ubGVuZ3RoPWUsbn1mdW5jdGlvbiBNOCh0LGUsbixyKXt2YXIgcztyPShRMygpLHJ8fGI3dCkscz10LnNsaWNlKGUsbiksVjR0KHMsdCxlLG4sLWUscil9ZnVuY3Rpb24gaGgodCxlLG4scixzKXtyZXR1cm4gZTwwP2x3KHQsbixyKTp1KG4sNjYpLk5qKCkuUGoodCx0LnloKCksZSxyLHMpfWZ1bmN0aW9uIHZhbih0KXtyZXR1cm4gX3QodCwxNzIpPyIiK3UodCwxNzIpLmE6dD09bnVsbD9udWxsOldvKHQpfWZ1bmN0aW9uIHdhbih0KXtyZXR1cm4gX3QodCwxNzIpPyIiK3UodCwxNzIpLmE6dD09bnVsbD9udWxsOldvKHQpfWZ1bmN0aW9uIHB0ZSh0LGUpe2lmKGUuYSl0aHJvdyBudChuZXcgWm8ocGZlKSk7VnModC5hLGUpLGUuYT10LCF0LmomJih0Lmo9ZSl9ZnVuY3Rpb24gQ210KHQsZSl7VWV0LmNhbGwodGhpcyxlLnJkKCksZS5xZCgpJi0xNjQ0OSksSW4odCksdGhpcy5hPXQsdGhpcy5jPWV9ZnVuY3Rpb24gYnRlKHQsZSl7dmFyIG4scjtyZXR1cm4gcj1lL3QuYy5IZCgpLmdjKCl8MCxuPWUldC5jLkhkKCkuZ2MoKSxVNih0LHIsbil9ZnVuY3Rpb24gcmwoKXtybD1YLEFkPW5ldyBtZXQoZngsMCksbGI9bmV3IG1ldChJNywxKSxrZj1uZXcgbWV0KGR4LDIpfWZ1bmN0aW9uIFAkKCl7UCQ9WCxNdXQ9bmV3IEJSKCJBbGwiLDApLEU3dD1uZXcgaFV0LFQ3dD1uZXcgRVV0LF83dD1uZXcgZlV0fWZ1bmN0aW9uIHZ0ZSgpe3Z0ZT1YLElnZT1RcigoUCQoKSx1dChvdChLSCwxKSxvZSwyOTcsMCxbTXV0LEU3dCxUN3QsXzd0XSkpKX1mdW5jdGlvbiB3dGUoKXt3dGU9WCxFYmU9UXIoKFU4KCksdXQob3Qoa2JlLDEpLG9lLDQwNSwwLFtDdyxJeSxEeSwkNF0pKSl9ZnVuY3Rpb24gbXRlKCl7bXRlPVgsVHBlPVFyKCh0dygpLHV0KG90KEVwZSwxKSxvZSw0MDYsMCxbYU8sc08sUnV0LGp1dF0pKSl9ZnVuY3Rpb24geXRlKCl7eXRlPVgsQ3BlPVFyKChleCgpLHV0KG90KF9wZSwxKSxvZSwzMjMsMCxbY08sb08sdU8sbE9dKSkpfWZ1bmN0aW9uIHh0ZSgpe3h0ZT1YLExwZT1Rcigoc0MoKSx1dChvdChBcGUsMSksb2UsMzk0LDAsW2hPLEpILHRWLGZPXSkpKX1mdW5jdGlvbiBrdGUoKXtrdGU9WCxXbWU9UXIoKG83KCksdXQob3QoWV90LDEpLG9lLDM5MywwLFt2RyxQUyxQTyxGU10pKSl9ZnVuY3Rpb24gRXRlKCl7RXRlPVgscWJlPVFyKChkeigpLHV0KG90KHpiZSwxKSxvZSwzNjAsMCxbY2x0LENWLFNWLHZPXSkpKX1mdW5jdGlvbiBUdGUoKXtUdGU9WCxOeWU9UXIoKFZ6KCksdXQob3QoX0N0LDEpLG9lLDM0MCwwLFskaHQsRUN0LFRDdCxrQ3RdKSkpfWZ1bmN0aW9uIF90ZSgpe190ZT1YLFFiZT1RcigoTzEoKSx1dChvdChYYmUsMSksb2UsNDExLDAsW194LG5FLHJFLHVsdF0pKSl9ZnVuY3Rpb24gQ3RlKCl7Q3RlPVgsJHdlPVFyKChzeSgpLHV0KG90KGhodCwxKSxvZSwxOTcsMCxbbEcsbGh0LGU1LHQ1XSkpKX1mdW5jdGlvbiBTdGUoKXtTdGU9WCxFNGU9UXIoKE9sKCksdXQob3QoazRlLDEpLG9lLDM5NiwwLFt0aCxJQXQsREF0LE9BdF0pKSl9ZnVuY3Rpb24gQXRlKCl7QXRlPVgsYzRlPVFyKChWbCgpLHV0KG90KG80ZSwxKSxvZSwyODUsMCxbWk8sdTAseWIsUU9dKSkpfWZ1bmN0aW9uIEx0ZSgpe0x0ZT1YLHI0ZT1RcigocTAoKSx1dChvdCh2ZnQsMSksb2UsMjE4LDAsW2JmdCxYTyxDRSxxeF0pKSl9ZnVuY3Rpb24gTXRlKCl7TXRlPVgseTRlPVFyKChBeigpLHV0KG90KE1BdCwxKSxvZSwzMTEsMCxbeWZ0LFNBdCxMQXQsQUF0XSkpKX1mdW5jdGlvbiBEdGUoKXtEdGU9WCx3NGU9UXIoKE5sKCksdXQob3QodEEsMSksb2UsMzc0LDAsW25OLFcyLGVOLFh5XSkpKX1mdW5jdGlvbiBJdGUoKXtJdGU9WCx5cSgpLGdMdD1icyxfNWU9TnMscEx0PW5ldyBPMyhicyksQzVlPW5ldyBPMyhOcyl9ZnVuY3Rpb24gYkQoKXtiRD1YLEw5dD1uZXcgTGJ0KEswLDApLEZWPW5ldyBMYnQoIklNUFJPVkVfU1RSQUlHSFRORVNTIiwxKX1mdW5jdGlvbiBtYW4odCxlKXtyZXR1cm4gZjgoKSx1ZSh0LG5ldyB5YShlLGRlKGUuZS5jLmxlbmd0aCtlLmcuYy5sZW5ndGgpKSl9ZnVuY3Rpb24geWFuKHQsZSl7cmV0dXJuIGY4KCksdWUodCxuZXcgeWEoZSxkZShlLmUuYy5sZW5ndGgrZS5nLmMubGVuZ3RoKSkpfWZ1bmN0aW9uIFNtdCh0LGUpe3JldHVybiB4RChlKSE9MTAmJnV0KGRsKGUpLGUuaG0sZS5fX2VsZW1lbnRUeXBlSWQkLHhEKGUpLHQpLHR9ZnVuY3Rpb24gRXUodCxlKXt2YXIgbjtyZXR1cm4gbj1Hbyh0LGUsMCksbj09LTE/ITE6KElnKHQsbiksITApfWZ1bmN0aW9uIE90ZSh0LGUpe3ZhciBuO3JldHVybiBuPXUoRzYodC5lLGUpLDM4Nyksbj8oT3Z0KG4pLG4uZSk6bnVsbH1mdW5jdGlvbiBEOCh0KXt2YXIgZTtyZXR1cm4gVm8odCkmJihlPTAtdCwhaXNOYU4oZSkpP2U6V3AoVzgodCkpfWZ1bmN0aW9uIEdvKHQsZSxuKXtmb3IoO248dC5jLmxlbmd0aDsrK24paWYoUmMoZSx0LmNbbl0pKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIE50ZSh0LGUsbil7dmFyIHI7cmV0dXJuIHFwKHQpLHI9bmV3IExpLHIuYT1lLHQuYS5OYihuZXcgTVZ0KHIsbikpLHIuYX1mdW5jdGlvbiB4YW4odCl7dmFyIGU7cmV0dXJuIHFwKHQpLGU9TnQoZ2EsVG8sMjUsMCwxNSwxKSxSMyh0LmEsbmV3IE5lKGUpKSxlfWZ1bmN0aW9uIFVydCh0KXt2YXIgZSxuO3JldHVybiBuPXUoUGUodC5qLDApLDExKSxlPXUoSyhuLChhZSgpLElpKSksMTEpLGV9ZnVuY3Rpb24gQW10KHQpe3ZhciBlO2lmKCFvaXQodCkpdGhyb3cgbnQobmV3IHZjKTtyZXR1cm4gdC5lPTEsZT10LmQsdC5kPW51bGwsZX1mdW5jdGlvbiBXcnQodCxlKXt2YXIgbjt0aGlzLmY9dCx0aGlzLmI9ZSxuPXUodHIodC5iLGUpLDI4MyksdGhpcy5jPW4/bi5iOm51bGx9ZnVuY3Rpb24gUHRlKCl7ZGYoKSx0aGlzLmI9bmV3IEFyLHRoaXMuZj1uZXcgQXIsdGhpcy5nPW5ldyBBcix0aGlzLmU9bmV3IEFyfWZ1bmN0aW9uIEZ0ZSh0LGUpe3RoaXMuYT1OdChvMCxHZywxMCx0LmEuYy5sZW5ndGgsMCwxKSxQMSh0LmEsdGhpcy5hKSx0aGlzLmI9ZX1mdW5jdGlvbiB2RCh0KXt2YXIgZTtmb3IoZT10LnArMTtlPHQuYy5hLmMubGVuZ3RoOysrZSktLXUoUGUodC5jLmEsZSksMTApLnB9ZnVuY3Rpb24gS3J0KHQpe3ZhciBlO2U9dC5BaSgpLGUhPW51bGwmJnQuZCE9LTEmJnUoZSw5MikuTmcodCksdC5pJiZ0LmkuRmkoKX1mdW5jdGlvbiBGJCh0KXt1aih0aGlzKSx0aGlzLmc9dD9scnQodCx0LiRkKCkpOm51bGwsdGhpcy5mPXQsbiQodGhpcyksdGhpcy5fZCgpfWZ1bmN0aW9uIEYwKHQsZSxuLHIscyxvLGgpe3JpdC5jYWxsKHRoaXMsZSxyLHMsbyxoKSx0aGlzLmM9dCx0aGlzLmI9bn1mdW5jdGlvbiBZbSh0LGUsbixyLHMpe3JldHVybiBJbih0KSxJbihlKSxJbihuKSxJbihyKSxJbihzKSxuZXcgaXd0KHQsZSxyKX1mdW5jdGlvbiB3RCh0LGUpe2lmKGU8MCl0aHJvdyBudChuZXcgQ28oJDFlK2UpKTtyZXR1cm4gQ1p0KHQsZSsxKSxQZSh0LmosZSl9ZnVuY3Rpb24gQnRlKHQsZSxuLHIpe2lmKCF0KXRocm93IG50KG5ldyBQbih2QyhlLHV0KG90KFFuLDEpLE1lLDEsNSxbbixyXSkpKSl9ZnVuY3Rpb24gQiQodCxlKXtyZXR1cm4gUmMoZSxQZSh0LmYsMCkpfHxSYyhlLFBlKHQuZiwxKSl8fFJjKGUsUGUodC5mLDIpKX1mdW5jdGlvbiBrYW4odCxlKXtENih1KHUodC5mLDMzKS5XZSgoZGkoKSxVUykpLDk4KSkmJmtsbih0cnQodSh0LmYsMzMpKSxlKX1mdW5jdGlvbiBtRCh0LGUpe3ZhciBuLHI7cmV0dXJuIG49dShlLDY3NSkscj1uLk9oKCksIXImJm4uUmgocj1uZXcgRkd0KHQsZSkpLHJ9ZnVuY3Rpb24gTW8odCxlKXt2YXIgbixyO3JldHVybiBuPXUoZSw2NzcpLHI9bi5waygpLCFyJiZuLnRrKHI9bmV3IHRadCh0LGUpKSxyfWZ1bmN0aW9uIGZsKHQpe3JldHVybiB0LmJ8fCh0LmI9bmV3IGJZdCh0LHdvLHQpLCF0LmEmJih0LmE9bmV3ICRNKHQsdCkpKSx0LmJ9ZnVuY3Rpb24gal8oKXtqXz1YLFl1dD1uZXcgeGV0KCJYWSIsMCksS3V0PW5ldyB4ZXQoIlgiLDEpLFh1dD1uZXcgeGV0KCJZIiwyKX1mdW5jdGlvbiBUdSgpe1R1PVgsczE9bmV3IHlldCgiVE9QIiwwKSxoYj1uZXcgeWV0KEk3LDEpLEVmPW5ldyB5ZXQoVzZ0LDIpfWZ1bmN0aW9uIEIwKCl7QjA9WCx5Tz1uZXcgTGV0KEswLDApLFc0PW5ldyBMZXQoIlRPUCIsMSksU3g9bmV3IExldChXNnQsMil9ZnVuY3Rpb24geUQoKXt5RD1YLHBodD1uZXcgRGJ0KCJJTlBVVF9PUkRFUiIsMCksYmh0PW5ldyBEYnQoIlBPUlRfREVHUkVFIiwxKX1mdW5jdGlvbiBJOCgpe0k4PVgsWTh0PWN1KHZsLHZsLDUyNDI4NyksbWdlPWN1KDAsMCxESSksWDh0PVBydCgxKSxQcnQoMiksUTh0PVBydCgwKX1mdW5jdGlvbiBMbXQodCxlLG4pe3QuYS5jPU50KFFuLE1lLDEsMCw1LDEpLGYzbih0LGUsbiksdC5hLmMubGVuZ3RoPT0wfHxWd24odCxlKX1mdW5jdGlvbiBSJCh0KXt2YXIgZSxuO3JldHVybiBuPXQubGVuZ3RoLGU9TnQoRWgsd2QsMjUsbiwxNSwxKSxqWXQodCwwLG4sZSwwKSxlfWZ1bmN0aW9uIE1tdCh0KXt2YXIgZTtyZXR1cm4gdC5kaCgpfHwoZT1Kbih0LlRnKCkpLXQuQWgoKSx0LnBoKCkuYmsoZSkpLHQuUGcoKX1mdW5jdGlvbiBEbXQodCl7dmFyIGU7cmV0dXJuIGU9bzIoTW4odCwzMikpLGU9PW51bGwmJih1dSh0KSxlPW8yKE1uKHQsMzIpKSksZX1mdW5jdGlvbiBZcnQodCxlKXt2YXIgbjtyZXR1cm4gbj1lcyh0LmQsZSksbj49MD9qeih0LG4sITAsITApOmx3KHQsZSwhMCl9ZnVuY3Rpb24gSW10KHQsZSl7cVQoKTt2YXIgbixyO3JldHVybiBuPXE2KHQpLHI9cTYoZSksISFuJiYhIXImJiFZaWUobi5rLHIuayl9ZnVuY3Rpb24gRWFuKHQsZSl7Q3UodCxlPT1udWxsfHxFaigoSW4oZSksZSkpfHxpc05hTigoSW4oZSksZSkpPzA6KEluKGUpLGUpKX1mdW5jdGlvbiBUYW4odCxlKXtTdSh0LGU9PW51bGx8fEVqKChJbihlKSxlKSl8fGlzTmFOKChJbihlKSxlKSk/MDooSW4oZSksZSkpfWZ1bmN0aW9uIF9hbih0LGUpe1F2KHQsZT09bnVsbHx8RWooKEluKGUpLGUpKXx8aXNOYU4oKEluKGUpLGUpKT8wOihJbihlKSxlKSl9ZnVuY3Rpb24gQ2FuKHQsZSl7WHYodCxlPT1udWxsfHxFaigoSW4oZSksZSkpfHxpc05hTigoSW4oZSksZSkpPzA6KEluKGUpLGUpKX1mdW5jdGlvbiBSdGUodCl7KHRoaXMucT90aGlzLnE6KHBuKCkscG4oKSxhMCkpLkFjKHQucT90LnE6KHBuKCkscG4oKSxhMCkpfWZ1bmN0aW9uIFNhbih0LGUpe3JldHVybiBfdChlLDk5KSYmdShlLDE4KS5CYiZRYT9uZXcgS2V0KGUsdCk6bmV3IFY4KGUsdCl9ZnVuY3Rpb24gQWFuKHQsZSl7cmV0dXJuIF90KGUsOTkpJiZ1KGUsMTgpLkJiJlFhP25ldyBLZXQoZSx0KTpuZXcgVjgoZSx0KX1mdW5jdGlvbiBqdGUodCxlKXtaN3Q9bmV3IG1hLFNwZT1lLGNTPXQsdShjUy5iLDY1KSx3bXQoY1MsWjd0LG51bGwpLElsZShjUyl9ZnVuY3Rpb24gWHJ0KHQsZSxuKXt2YXIgcjtyZXR1cm4gcj10LmdbZV0sZl8odCxlLHQub2koZSxuKSksdC5naShlLG4sciksdC5jaSgpLHJ9ZnVuY3Rpb24gaiQodCxlKXt2YXIgbjtyZXR1cm4gbj10LlhjKGUpLG4+PTA/KHQuJGMobiksITApOiExfWZ1bmN0aW9uIFFydCh0KXt2YXIgZTtyZXR1cm4gdC5kIT10LnImJihlPU9oKHQpLHQuZT0hIWUmJmUuQ2ooKT09eTBlLHQuZD1lKSx0LmV9ZnVuY3Rpb24gWnJ0KHQsZSl7dmFyIG47Zm9yKERyKHQpLERyKGUpLG49ITE7ZS5PYigpOyluPW58dC5GYyhlLlBiKCkpO3JldHVybiBufWZ1bmN0aW9uIFd2KHQsZSl7dmFyIG47cmV0dXJuIG49dSh0cih0LmUsZSksMzg3KSxuPyhEVXQodCxuKSxuLmUpOm51bGx9ZnVuY3Rpb24gJHRlKHQpe3ZhciBlLG47cmV0dXJuIGU9dC82MHwwLG49dCU2MCxuPT0wPyIiK2U6IiIrZSsiOiIrKCIiK24pfWZ1bmN0aW9uIGVjKHQsZSl7dmFyIG4scjtyZXR1cm4gcDIodCkscj1uZXcgZ210KGUsdC5hKSxuPW5ldyByS3QociksbmV3IGtuKHQsbil9ZnVuY3Rpb24gWG0odCxlKXt2YXIgbj10LmFbZV0scj0odml0KCksX3V0KVt0eXBlb2Ygbl07cmV0dXJuIHI/cihuKTpGeXQodHlwZW9mIG4pfWZ1bmN0aW9uIExhbih0KXtzd2l0Y2godC5nKXtjYXNlIDA6cmV0dXJuIFRpO2Nhc2UgMTpyZXR1cm4tMTtkZWZhdWx0OnJldHVybiAwfX1mdW5jdGlvbiBNYW4odCl7cmV0dXJuIEozdCh0LChJOCgpLFE4dCkpPDA/LVVYZShXOCh0KSk6dC5sK3QubSpoeCt0LmgqRTJ9ZnVuY3Rpb24geEQodCl7cmV0dXJuIHQuX19lbGVtZW50VHlwZUNhdGVnb3J5JD09bnVsbD8xMDp0Ll9fZWxlbWVudFR5cGVDYXRlZ29yeSR9ZnVuY3Rpb24gSnJ0KHQpe3ZhciBlO3JldHVybiBlPXQuYi5jLmxlbmd0aD09MD9udWxsOlBlKHQuYiwwKSxlIT1udWxsJiZ1aXQodCwwKSxlfWZ1bmN0aW9uIHp0ZSh0LGUpe2Zvcig7ZVswXTx0Lmxlbmd0aCYmdWQoYCAJXHIKYCxMdShUYSh0LGVbMF0pKSk+PTA7KSsrZVswXX1mdW5jdGlvbiBrRCh0LGUpe3RoaXMuZT1lLHRoaXMuYT1ObmUodCksdGhpcy5hPDU0P3RoaXMuZj1Hdih0KTp0aGlzLmM9S0QodCl9ZnVuY3Rpb24gcXRlKHQsZSxuLHIpe3lpKCksdnYuY2FsbCh0aGlzLDI2KSx0aGlzLmM9dCx0aGlzLmE9ZSx0aGlzLmQ9bix0aGlzLmI9cn1mdW5jdGlvbiBYZCh0LGUsbil7dmFyIHIscztmb3Iocj0xMCxzPTA7czxuLTE7cysrKWU8ciYmKHQuYSs9IjAiKSxyKj0xMDt0LmErPWV9ZnVuY3Rpb24gRGFuKHQsZSl7dmFyIG47Zm9yKG49MDt0LmUhPXQuaS5nYygpOylfdG4oZSxkcih0KSxkZShuKSksbiE9VGkmJisrbn1mdW5jdGlvbiBPbXQodCxlKXt2YXIgbjtmb3IoKyt0LmQsKyt0LmNbZV0sbj1lKzE7bjx0LmEubGVuZ3RoOykrK3QuYVtuXSxuKz1uJi1ufWZ1bmN0aW9uIElhbih0LGUpe3ZhciBuLHIscztzPWUuYy5pLG49dSh0cih0LmYscyksNTcpLHI9bi5kLmMtbi5lLmMscnl0KGUuYSxyLDApfWZ1bmN0aW9uIEVEKHQpe3ZhciBlLG47cmV0dXJuIGU9dCsxMjgsbj0oV0t0KCksSjh0KVtlXSwhbiYmKG49Sjh0W2VdPW5ldyBPdHQodCkpLG59ZnVuY3Rpb24gWHIodCxlKXt2YXIgbjtyZXR1cm4gSW4oZSksbj10WyI6IitlXSxCYW4oISFuLHV0KG90KFFuLDEpLE1lLDEsNSxbZV0pKSxufWZ1bmN0aW9uIE9hbih0KXt2YXIgZSxuO2lmKHQuYil7bj1udWxsO2RvIGU9dC5iLHQuYj1udWxsLG49amFlKGUsbik7d2hpbGUodC5iKTt0LmI9bn19ZnVuY3Rpb24gTmFuKHQpe3ZhciBlLG47aWYodC5hKXtuPW51bGw7ZG8gZT10LmEsdC5hPW51bGwsbj1qYWUoZSxuKTt3aGlsZSh0LmEpO3QuYT1ufX1mdW5jdGlvbiBIdGUodCl7dmFyIGU7Zm9yKCsrdC5hLGU9dC5jLmEubGVuZ3RoO3QuYTxlOysrdC5hKWlmKHQuYy5iW3QuYV0pcmV0dXJufWZ1bmN0aW9uIFBhbih0LGUpe3ZhciBuLHI7Zm9yKHI9ZS5jLG49cisxO248PWUuZjtuKyspdC5hW25dPnQuYVtyXSYmKHI9bik7cmV0dXJuIHJ9ZnVuY3Rpb24gRmFuKHQsZSl7dmFyIG47cmV0dXJuIG49cncodC5lLmMsZS5lLmMpLG49PTA/anModC5lLmQsZS5lLmQpOm59ZnVuY3Rpb24gdDQodCxlKXtyZXR1cm4gZS5lPT0wfHx0LmU9PTA/WTc6KGc3KCksdGF0KHQsZSkpfWZ1bmN0aW9uIEJhbih0LGUpe2lmKCF0KXRocm93IG50KG5ldyBQbigkMm4oIkVudW0gY29uc3RhbnQgdW5kZWZpbmVkOiAlcyIsZSkpKX1mdW5jdGlvbiAkXygpeyRfPVgsQ2JlPW5ldyB3ZyxTYmU9bmV3IGN2LFRiZT1uZXcgSkssX2JlPW5ldyBxYixBYmU9bmV3IHRZfWZ1bmN0aW9uICQkKCl7JCQ9WCxJN3Q9bmV3IEVidCgiQllfU0laRSIsMCksTnV0PW5ldyBFYnQoIkJZX1NJWkVfQU5EX1NIQVBFIiwxKX1mdW5jdGlvbiB6JCgpe3okPVgsR3V0PW5ldyBUYnQoIkVBREVTIiwwKSxyVj1uZXcgVGJ0KCJGUlVDSFRFUk1BTl9SRUlOR09MRCIsMSl9ZnVuY3Rpb24gVEQoKXtURD1YLE5WPW5ldyBBYnQoIlJFQURJTkdfRElSRUNUSU9OIiwwKSxDOXQ9bmV3IEFidCgiUk9UQVRJT04iLDEpfWZ1bmN0aW9uIFZ0ZSgpe1Z0ZT1YLGwyZT1RcigobTIoKSx1dChvdChfOXQsMSksb2UsMzM1LDAsW3hsdCxUOXQsa2x0LHBTLGdTXSkpKX1mdW5jdGlvbiBHdGUoKXtHdGU9WCx6d2U9UXIoKGFDKCksdXQob3QoQ190LDEpLG9lLDMxNSwwLFtfX3QsZmh0LGRodCxBUyxMU10pKSl9ZnVuY3Rpb24gVXRlKCl7VXRlPVgsSmJlPVFyKChwNCgpLHV0KG90KFpiZSwxKSxvZSwzNjMsMCxbTFYsRFYsSVYsTVYsQVZdKSkpfWZ1bmN0aW9uIFd0ZSgpe1d0ZT1YLEUyZT1RcigocGgoKSx1dChvdChuVHQsMSksb2UsMTYzLDAsW19PLHlTLGdiLHhTLEZ5XSkpKX1mdW5jdGlvbiBLdGUoKXtLdGU9WCxjM2U9UXIoKGlJKCksdXQob3QoWEN0LDEpLG9lLDMxNiwwLFtXQ3QsV2h0LFlDdCxLaHQsS0N0XSkpKX1mdW5jdGlvbiBZdGUoKXtZdGU9WCxEM2U9UXIoKHQxKCksdXQob3QoZXAsMSksb2UsMTc1LDAsW3FuLHVhLElkLHEyLHRwXSkpKX1mdW5jdGlvbiBYdGUoKXtYdGU9WCxuM2U9UXIoKHc3KCksdXQob3QoZTNlLDEpLG9lLDM1NSwwLFtyNSxCeCxxUyx6UyxIU10pKSl9ZnVuY3Rpb24gUXRlKCl7UXRlPVgsd2JlPVFyKChZYSgpLHV0KG90KGtFdCwxKSxvZSwzNTYsMCxbTGQsZmIsZnUsR2Msam9dKSkpfWZ1bmN0aW9uIFp0ZSgpe1p0ZT1YLGU0ZT1RcigoZm8oKSx1dChvdChXUywxKSxvZSwxMDMsMCxbYzAsX2YsSGgsUTAsWjBdKSkpfWZ1bmN0aW9uIEp0ZSgpe0p0ZT1YLGw0ZT1RcigodTQoKSx1dChvdChRUywxKSxvZSwyNDksMCxbeGIsSk8sa0F0LFhTLEVBdF0pKSl9ZnVuY3Rpb24gdGVlKCl7dGVlPVgsZDRlPVFyKChiZSgpLHV0KG90KFphLDEpLENjLDYxLDAsW2FjLE9uLEhuLHlyLEJuXSkpKX1mdW5jdGlvbiB0aXQodCxlKXt2YXIgbjtyZXR1cm4gbj11KHRyKHQuYSxlKSwxMzQpLG58fChuPW5ldyB4MyxBaSh0LmEsZSxuKSksbn1mdW5jdGlvbiBlZWUodCl7dmFyIGU7cmV0dXJuIGU9dShLKHQsKGFlKCksTHcpKSwzMDUpLGU/ZS5hPT10OiExfWZ1bmN0aW9uIG5lZSh0KXt2YXIgZTtyZXR1cm4gZT11KEsodCwoYWUoKSxMdykpLDMwNSksZT9lLmk9PXQ6ITF9ZnVuY3Rpb24gcmVlKHQsZSl7cmV0dXJuIEluKGUpLEp2dCh0KSx0LmQuT2IoKT8oZS50ZCh0LmQuUGIoKSksITApOiExfWZ1bmN0aW9uIHEkKHQpe3JldHVybiBfYyh0LFRpKT4wP1RpOl9jKHQsT2EpPDA/T2E6TXIodCl9ZnVuY3Rpb24gUW0odCl7cmV0dXJuIHQ8Mz8ocWwodCxRaGUpLHQrMSk6dDxBQz9Dcyh0Ly43NSsxKTpUaX1mdW5jdGlvbiB3bih0LGUpe3ZhciBuO3JldHVybiBuPSh0Lmk9PW51bGwmJmJkKHQpLHQuaSksZT49MCYmZTxuLmxlbmd0aD9uW2VdOm51bGx9ZnVuY3Rpb24gUWYodCxlLG4pe3ZhciByO2lmKGU9PW51bGwpdGhyb3cgbnQobmV3IExUKTtyZXR1cm4gcj1JMCh0LGUpLHNzbih0LGUsbikscn1mdW5jdGlvbiBpZWUodCl7cmV0dXJuIHQuYT49LS4wMSYmdC5hPD1SMSYmKHQuYT0wKSx0LmI+PS0uMDEmJnQuYjw9UjEmJih0LmI9MCksdH1mdW5jdGlvbiBzZWUodCxlKXtyZXR1cm4gZT09KG1udCgpLG1udCgpLExnZSk/dC50b0xvY2FsZUxvd2VyQ2FzZSgpOnQudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBObXQodCl7cmV0dXJuKHQuaSYyPyJpbnRlcmZhY2UgIjp0LmkmMT8iIjoiY2xhc3MgIikrKEwwKHQpLHQubyl9ZnVuY3Rpb24gRG8odCl7dmFyIGUsbjtuPShlPW5ldyBZdHQsZSksT3IoKCF0LnEmJih0LnE9bmV3IGhlKFloLHQsMTEsMTApKSx0LnEpLG4pfWZ1bmN0aW9uIFJhbih0LGUpe3ZhciBuO3JldHVybiBuPWU+MD9lLTE6ZSxlSHQoWktlKE1lZShJdnQobmV3IFdrLG4pLHQubiksdC5qKSx0LmspfWZ1bmN0aW9uIGphbih0LGUsbixyKXt2YXIgczt0Lmo9LTEscjV0KHQsQjR0KHQsZSxuKSwoc28oKSxzPXUoZSw2NikuTWooKSxzLk9rKHIpKSl9ZnVuY3Rpb24gYWVlKHQpe3RoaXMuZz10LHRoaXMuZj1uZXcgbGUsdGhpcy5hPWIuTWF0aC5taW4odGhpcy5nLmMuYyx0aGlzLmcuZC5jKX1mdW5jdGlvbiBvZWUodCl7dGhpcy5iPW5ldyBsZSx0aGlzLmE9bmV3IGxlLHRoaXMuYz1uZXcgbGUsdGhpcy5kPW5ldyBsZSx0aGlzLmU9dH1mdW5jdGlvbiBjZWUodCxlKXt0aGlzLmE9bmV3IEFyLHRoaXMuZT1uZXcgQXIsdGhpcy5iPShZXygpLHVHKSx0aGlzLmM9dCx0aGlzLmI9ZX1mdW5jdGlvbiB1ZWUodCxlLG4pe3hqLmNhbGwodGhpcyksUG10KHRoaXMpLHRoaXMuYT10LHRoaXMuYz1uLHRoaXMuYj1lLmQsdGhpcy5mPWUuZX1mdW5jdGlvbiBsZWUodCl7dGhpcy5kPXQsdGhpcy5jPXQuYy52YygpLktjKCksdGhpcy5iPW51bGwsdGhpcy5hPW51bGwsdGhpcy5lPShkUigpLHh1dCl9ZnVuY3Rpb24gS3YodCl7aWYodDwwKXRocm93IG50KG5ldyBQbigiSWxsZWdhbCBDYXBhY2l0eTogIit0KSk7dGhpcy5nPXRoaXMucmkodCl9ZnVuY3Rpb24gJGFuKHQsZSl7aWYoMD50fHx0PmUpdGhyb3cgbnQobmV3IEtwdCgiZnJvbUluZGV4OiAwLCB0b0luZGV4OiAiK3QrRjZ0K2UpKX1mdW5jdGlvbiB6YW4odCl7dmFyIGU7aWYodC5hPT10LmIuYSl0aHJvdyBudChuZXcgdmMpO3JldHVybiBlPXQuYSx0LmM9ZSx0LmE9dC5hLmUsZX1mdW5jdGlvbiBIJCh0KXt2YXIgZTtQbSghIXQuYyksZT10LmMuYSxmaCh0LmQsdC5jKSx0LmI9PXQuYz90LmI9ZTotLXQuYSx0LmM9bnVsbH1mdW5jdGlvbiBWJCh0LGUpe3ZhciBuO3JldHVybiBwMih0KSxuPW5ldyBJWHQodCx0LmEucmQoKSx0LmEucWQoKXw0LGUpLG5ldyBrbih0LG4pfWZ1bmN0aW9uIHFhbih0LGUpe3ZhciBuLHI7cmV0dXJuIG49dShueSh0LmQsZSksMTQpLG4/KHI9ZSx0LmUucGMocixuKSk6bnVsbH1mdW5jdGlvbiBHJCh0LGUpe3ZhciBuLHI7Zm9yKHI9dC5LYygpO3IuT2IoKTspbj11KHIuUGIoKSw3MCksZWUobiwoYWUoKSxEeCksZSl9ZnVuY3Rpb24gSGFuKHQpe3ZhciBlO3JldHVybiBlPVp0KHZlKEsodCwoeGUoKSxYZykpKSksZTwwJiYoZT0wLGVlKHQsWGcsZSkpLGV9ZnVuY3Rpb24gVmFuKHQsZSxuKXt2YXIgcjtyPWIuTWF0aC5tYXgoMCx0LmIvMi0uNSksY0MobixyLDEpLHVlKGUsbmV3IEZWdChuLHIpKX1mdW5jdGlvbiBHYW4odCxlLG4pe3ZhciByO3JldHVybiByPXQuYS5lW3UoZS5hLDEwKS5wXS10LmEuZVt1KG4uYSwxMCkucF0sQ3MoS00ocikpfWZ1bmN0aW9uIGhlZSh0LGUsbixyLHMsbyl7dmFyIGg7aD1GcnQociksQmEoaCxzKSxwYShoLG8pLGNuKHQuYSxyLG5ldyBUaihoLGUsbi5mKSl9ZnVuY3Rpb24gZmVlKHQsZSl7dmFyIG47aWYobj1nSSh0LlRnKCksZSksIW4pdGhyb3cgbnQobmV3IFBuKGNiK2UrUmN0KSk7cmV0dXJuIG59ZnVuY3Rpb24gWm0odCxlKXt2YXIgbjtmb3Iobj10O2hzKG4pOylpZihuPWhzKG4pLG49PWUpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gVWFuKHQsZSl7dmFyIG4scixzO2ZvcihyPWUuYS5jZCgpLG49dShlLmEuZGQoKSwxNCkuZ2MoKSxzPTA7czxuO3MrKyl0LnRkKHIpfWZ1bmN0aW9uIF91KHQsZSl7dmFyIG4scixzLG87Zm9yKEluKGUpLHI9dC5jLHM9MCxvPXIubGVuZ3RoO3M8bzsrK3Mpbj1yW3NdLGUudGQobil9ZnVuY3Rpb24gZmgodCxlKXt2YXIgbjtyZXR1cm4gbj1lLmMsZS5hLmI9ZS5iLGUuYi5hPWUuYSxlLmE9ZS5iPW51bGwsZS5jPW51bGwsLS10LmIsbn1mdW5jdGlvbiBXYW4odCxlKXtyZXR1cm4gZSYmdC5iW2UuZ109PWU/KGxzKHQuYixlLmcsbnVsbCksLS10LmMsITApOiExfWZ1bmN0aW9uIGRlZSh0LGUpe3JldHVybiEhVl8odCxlLE1yKElhKGUwLFdkKE1yKElhKGU9PW51bGw/MDpKaShlKSxuMCkpLDE1KSkpKX1mdW5jdGlvbiBLYW4odCxlKXtENih1KEsodSh0LmUsMTApLCh4ZSgpLHdzKSksOTgpKSYmKHBuKCksYWEodSh0LmUsMTApLmosZSkpfWZ1bmN0aW9uIFBtdCh0KXt0LmI9KHJsKCksbGIpLHQuZj0oVHUoKSxoYiksdC5kPShxbCgyLG15KSxuZXcgSmMoMikpLHQuZT1uZXcgRGF9ZnVuY3Rpb24gWmYoKXtaZj1YLGZjPW5ldyB3ZXQoIkJFR0lOIiwwKSxpdT1uZXcgd2V0KEk3LDEpLGRjPW5ldyB3ZXQoIkVORCIsMil9ZnVuY3Rpb24gRDEoKXtEMT1YLFRFPW5ldyBIZXQoSTcsMCksWXk9bmV3IEhldCgiSEVBRCIsMSksX0U9bmV3IEhldCgiVEFJTCIsMil9ZnVuY3Rpb24gWWFuKCl7cmV0dXJuIHA3KCksdXQob3QoZVUsMSksb2UsMjM3LDAsW1RmdCxKRyx0VSxaRyxFZnQsUUcsWEcsa2Z0XSl9ZnVuY3Rpb24gWGFuKCl7cmV0dXJuIEhnKCksdXQob3QoSTNlLDEpLG9lLDI3NywwLFtiU3QsUGEseGMsa0UsJG8sbXMsUngsRzFdKX1mdW5jdGlvbiBRYW4oKXtyZXR1cm4gZnEoKSx1dChvdCh2OXQsMSksb2UsMjcwLDAsW2ZsdCxwbHQsaGx0LHdsdCxnbHQsZGx0LHZsdCxibHRdKX1mdW5jdGlvbiBaYW4oKXtyZXR1cm4gbTQoKSx1dChvdChEX3QsMSksb2UsMjYwLDAsW2hHLE1PLERPLEFfdCxMX3QsU190LE1fdCxmR10pfWZ1bmN0aW9uIGdlZSgpe2dlZT1YLGg0ZT1RcigodmEoKSx1dChvdChUQXQsMSksb2UsOTgsMCxba2IsVTEsU0UsVTIsaDAsS2NdKSkpfWZ1bmN0aW9uIHBlZSgpe3BlZT1YLFFIPShaZigpLHV0KG90KE15LDEpLG9lLDIzMiwwLFtmYyxpdSxkY10pKS5sZW5ndGgsRnV0PVFIfWZ1bmN0aW9uIFUkKHQpe3RoaXMuYj0oRHIodCksbmV3IHF1KHQpKSx0aGlzLmE9bmV3IGxlLHRoaXMuZD1uZXcgbGUsdGhpcy5lPW5ldyBEYX1mdW5jdGlvbiBKYW4odCl7dmFyIGU7cmV0dXJuIGU9Yi5NYXRoLnNxcnQodC5hKnQuYSt0LmIqdC5iKSxlPjAmJih0LmEvPWUsdC5iLz1lKSx0fWZ1bmN0aW9uIHpsKHQpe3ZhciBlO3JldHVybiB0Lnc/dC53OihlPWVpbih0KSxlJiYhZS5raCgpJiYodC53PWUpLGUpfWZ1bmN0aW9uIHRvbih0KXt2YXIgZTtyZXR1cm4gdD09bnVsbD9udWxsOihlPXUodCwxOTApLGUwbihlLGUubGVuZ3RoKSl9ZnVuY3Rpb24gQXQodCxlKXtpZih0Lmc9PW51bGx8fGU+PXQuaSl0aHJvdyBudChuZXcgV2V0KGUsdC5pKSk7cmV0dXJuIHQubGkoZSx0LmdbZV0pfWZ1bmN0aW9uIGVvbih0KXt2YXIgZSxuO2ZvcihlPXQuYS5kLmosbj10LmMuZC5qO2UhPW47KXdmKHQuYixlKSxlPWt6KGUpO3dmKHQuYixlKX1mdW5jdGlvbiBub24odCl7dmFyIGU7Zm9yKGU9MDtlPHQuYy5sZW5ndGg7ZSsrKShTbihlLHQuYy5sZW5ndGgpLHUodC5jW2VdLDExKSkucD1lfWZ1bmN0aW9uIHJvbih0LGUsbil7dmFyIHIscyxvO2ZvcihzPWVbbl0scj0wO3I8cy5sZW5ndGg7cisrKW89c1tyXSx0LmVbby5jLnBdW28ucF09cn1mdW5jdGlvbiBlaXQodCxlKXt2YXIgbixyLHMsbztmb3Iocj10LmQscz0wLG89ci5sZW5ndGg7czxvOysrcyluPXJbc10sVDEodC5nLG4pLmE9ZX1mdW5jdGlvbiBKbSh0LGUpe3ZhciBuLHI7Zm9yKHI9c2kodCwwKTtyLmIhPXIuZC5jOyluPXUoaWkociksOCksRmkobixlKTtyZXR1cm4gdH1mdW5jdGlvbiBpb24odCxlKXt2YXIgbjtyZXR1cm4gbj1mYSh1Yyh1KHRyKHQuZyxlKSw4KSksbzJ0KHUodHIodC5mLGUpLDQ2MCkuYikpLG59ZnVuY3Rpb24gWXYodCl7dmFyIGU7cmV0dXJuIENydCh0LmUsdCksWm4odC5iKSx0LmM9dC5hLGU9dSh0LmEuUGIoKSw0MiksdC5iPWh5dCh0KSxlfWZ1bmN0aW9uIG8yKHQpe3ZhciBlO3JldHVybiBtXyh0PT1udWxsfHxBcnJheS5pc0FycmF5KHQpJiYoZT14RCh0KSwhKGU+PTE0JiZlPD0xNikpKSx0fWZ1bmN0aW9uIGJlZSh0LGUsbil7dmFyIHI9ZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShyLGFyZ3VtZW50cyl9O3JldHVybiBlLmFwcGx5KHIsbikscn1mdW5jdGlvbiB2ZWUodCxlLG4pe3ZhciByLHM7cj1lO2RvIHM9WnQodC5wW3IucF0pK24sdC5wW3IucF09cyxyPXQuYVtyLnBdO3doaWxlKHIhPWUpfWZ1bmN0aW9uIE84KHQsZSl7dmFyIG4scjtyPXQuYSxuPUZ1bih0LGUsbnVsbCksciE9ZSYmIXQuZSYmKG49VDcodCxlLG4pKSxuJiZuLkZpKCl9ZnVuY3Rpb24gRm10KHQsZSl7cmV0dXJuIEUxKCksdmYocmIpLGIuTWF0aC5hYnModC1lKTw9cmJ8fHQ9PWV8fGlzTmFOKHQpJiZpc05hTihlKX1mdW5jdGlvbiBCbXQodCxlKXtyZXR1cm4gRTEoKSx2ZihyYiksYi5NYXRoLmFicyh0LWUpPD1yYnx8dD09ZXx8aXNOYU4odCkmJmlzTmFOKGUpfWZ1bmN0aW9uIHNvbih0LGUpe3JldHVybiB0YigpLG11KHQuYi5jLmxlbmd0aC10LmUuYy5sZW5ndGgsZS5iLmMubGVuZ3RoLWUuZS5jLmxlbmd0aCl9ZnVuY3Rpb24gZTQodCxlKXtyZXR1cm4gclllKEhfKHQsZSxNcihJYShlMCxXZChNcihJYShlPT1udWxsPzA6SmkoZSksbjApKSwxNSkpKSkpfWZ1bmN0aW9uIHdlZSgpe3dlZT1YLE9iZT1RcigoR24oKSx1dChvdChybHQsMSksb2UsMjY3LDAsW3FzLGNhLElzLFVjLFBsLHExXSkpKX1mdW5jdGlvbiBtZWUoKXttZWU9WCwkM2U9UXIoKGN5KCksdXQob3QoaWZ0LDEpLG9lLDI5MSwwLFtyZnQsR08sVk8sbmZ0LHFPLEhPXSkpKX1mdW5jdGlvbiB5ZWUoKXt5ZWU9WCxOM2U9UXIoKFFkKCksdXQob3QobVN0LDEpLG9lLDI0OCwwLFt0ZnQsJE8sek8sRkcsTkcsUEddKSkpfWZ1bmN0aW9uIHhlZSgpe3hlZT1YLGEyZT1RcigocngoKSx1dChvdChhRSwxKSxvZSwyMjcsMCxbc0UsZFMsaUUsT3ksVjQsSDRdKSkpfWZ1bmN0aW9uIGtlZSgpe2tlZT1YLHYyZT1RcigoZjcoKSx1dChvdCh6OXQsMSksb2UsMjc1LDAsW2JTLEI5dCwkOXQsajl0LFI5dCxGOXRdKSkpfWZ1bmN0aW9uIEVlZSgpe0VlZT1YLGIyZT1RcigobkkoKSx1dChvdChQOXQsMSksb2UsMjc0LDAsW0JWLEk5dCxOOXQsRDl0LE85dCxMbHRdKSkpfWZ1bmN0aW9uIFRlZSgpe1RlZT1YLFJ3ZT1RcigoWnooKSx1dChvdChrX3QsMSksb2UsMzEzLDAsW2NodCx5X3Qsb2h0LG1fdCx4X3QsY0ddKSkpfWZ1bmN0aW9uIF9lZSgpe19lZT1YLGcyZT1RcigobnEoKSx1dChvdChBOXQsMSksb2UsMjc2LDAsW19sdCxUbHQsU2x0LENsdCxBbHQsUFZdKSkpfWZ1bmN0aW9uIENlZSgpe0NlZT1YLFltZT1RcigoZkMoKSx1dChvdChLbWUsMSksb2UsMzI3LDAsW3dHLFRodCxDaHQsX2h0LFNodCxFaHRdKSkpfWZ1bmN0aW9uIFNlZSgpe1NlZT1YLGY0ZT1RcigoaWwoKSx1dChvdChWRywxKSxvZSwyNzMsMCxbRWIsdGcsdE4sSlMsWlMsSHhdKSkpfWZ1bmN0aW9uIEFlZSgpe0FlZT1YLGk0ZT1RcigodHEoKSx1dChvdChwQXQsMSksb2UsMzEyLDAsW3dmdCxmQXQsZ0F0LGxBdCxkQXQsaEF0XSkpKX1mdW5jdGlvbiBhb24oKXtyZXR1cm4gZnkoKSx1dChvdCh2bywxKSxvZSw5MywwLFtDZixKMCxTZixMZixsMCxHaCxRbCxBZixWaF0pfWZ1bmN0aW9uIFckKHQsZSl7dmFyIG47bj10LmEsdC5hPWUsdC5EYiY0JiYhKHQuRGImMSkmJkNpKHQsbmV3IEttKHQsMCxuLHQuYSkpfWZ1bmN0aW9uIEskKHQsZSl7dmFyIG47bj10LmIsdC5iPWUsdC5EYiY0JiYhKHQuRGImMSkmJkNpKHQsbmV3IEttKHQsMSxuLHQuYikpfWZ1bmN0aW9uIE44KHQsZSl7dmFyIG47bj10LmIsdC5iPWUsdC5EYiY0JiYhKHQuRGImMSkmJkNpKHQsbmV3IEttKHQsMyxuLHQuYikpfWZ1bmN0aW9uIFh2KHQsZSl7dmFyIG47bj10LmYsdC5mPWUsdC5EYiY0JiYhKHQuRGImMSkmJkNpKHQsbmV3IEttKHQsMyxuLHQuZikpfWZ1bmN0aW9uIFF2KHQsZSl7dmFyIG47bj10LmcsdC5nPWUsdC5EYiY0JiYhKHQuRGImMSkmJkNpKHQsbmV3IEttKHQsNCxuLHQuZykpfWZ1bmN0aW9uIEN1KHQsZSl7dmFyIG47bj10LmksdC5pPWUsdC5EYiY0JiYhKHQuRGImMSkmJkNpKHQsbmV3IEttKHQsNSxuLHQuaSkpfWZ1bmN0aW9uIFN1KHQsZSl7dmFyIG47bj10LmosdC5qPWUsdC5EYiY0JiYhKHQuRGImMSkmJkNpKHQsbmV3IEttKHQsNixuLHQuaikpfWZ1bmN0aW9uIFA4KHQsZSl7dmFyIG47bj10LmosdC5qPWUsdC5EYiY0JiYhKHQuRGImMSkmJkNpKHQsbmV3IEttKHQsMSxuLHQuaikpfWZ1bmN0aW9uIEY4KHQsZSl7dmFyIG47bj10LmMsdC5jPWUsdC5EYiY0JiYhKHQuRGImMSkmJkNpKHQsbmV3IEttKHQsNCxuLHQuYykpfWZ1bmN0aW9uIEI4KHQsZSl7dmFyIG47bj10LmssdC5rPWUsdC5EYiY0JiYhKHQuRGImMSkmJkNpKHQsbmV3IEttKHQsMixuLHQuaykpfWZ1bmN0aW9uIG5pdCh0LGUpe3ZhciBuO249dC5kLHQuZD1lLHQuRGImNCYmISh0LkRiJjEpJiZDaSh0LG5ldyBMcnQodCwyLG4sdC5kKSl9ZnVuY3Rpb24gUGcodCxlKXt2YXIgbjtuPXQucyx0LnM9ZSx0LkRiJjQmJiEodC5EYiYxKSYmQ2kodCxuZXcgTHJ0KHQsNCxuLHQucykpfWZ1bmN0aW9uIHR5KHQsZSl7dmFyIG47bj10LnQsdC50PWUsdC5EYiY0JiYhKHQuRGImMSkmJkNpKHQsbmV3IExydCh0LDUsbix0LnQpKX1mdW5jdGlvbiBSOCh0LGUpe3ZhciBuO249dC5GLHQuRj1lLHQuRGImNCYmISh0LkRiJjEpJiZDaSh0LG5ldyBvYSh0LDEsNSxuLGUpKX1mdW5jdGlvbiBfRCh0LGUpe3ZhciBuO3JldHVybiBuPXUodHIoKE5SKCksblUpLHQpLDU1KSxuP24ueGooZSk6TnQoUW4sTWUsMSxlLDUsMSl9ZnVuY3Rpb24gUjAodCxlKXt2YXIgbixyO3JldHVybiBuPWUgaW4gdC5hLG4mJihyPUkwKHQsZSkuaGUoKSxyKT9yLmE6bnVsbH1mdW5jdGlvbiBvb24odCxlKXt2YXIgbixyLHM7cmV0dXJuIG49KHI9KFR2KCkscz1uZXcgWTkscyksZSYmXzV0KHIsZSksciksVW10KG4sdCksbn1mdW5jdGlvbiBMZWUodCxlLG4pe2lmKFk4KHQsbiksIXQuQmsoKSYmbiE9bnVsbCYmIXQud2oobikpdGhyb3cgbnQobmV3IEd0dCk7cmV0dXJuIG59ZnVuY3Rpb24gTWVlKHQsZSl7cmV0dXJuIHQubj1lLHQubj8odC5mPW5ldyBsZSx0LmU9bmV3IGxlKToodC5mPW51bGwsdC5lPW51bGwpLHR9ZnVuY3Rpb24genIodCxlLG4scixzLG8pe3ZhciBoO3JldHVybiBoPUtudCh0LGUpLEllZShuLGgpLGguaT1zPzg6MCxoLmY9cixoLmU9cyxoLmc9byxofWZ1bmN0aW9uIFJtdCh0LGUsbixyLHMpe3RoaXMuZD1lLHRoaXMuaz1yLHRoaXMuZj1zLHRoaXMubz0tMSx0aGlzLnA9MSx0aGlzLmM9dCx0aGlzLmE9bn1mdW5jdGlvbiBqbXQodCxlLG4scixzKXt0aGlzLmQ9ZSx0aGlzLms9cix0aGlzLmY9cyx0aGlzLm89LTEsdGhpcy5wPTIsdGhpcy5jPXQsdGhpcy5hPW59ZnVuY3Rpb24gJG10KHQsZSxuLHIscyl7dGhpcy5kPWUsdGhpcy5rPXIsdGhpcy5mPXMsdGhpcy5vPS0xLHRoaXMucD02LHRoaXMuYz10LHRoaXMuYT1ufWZ1bmN0aW9uIHptdCh0LGUsbixyLHMpe3RoaXMuZD1lLHRoaXMuaz1yLHRoaXMuZj1zLHRoaXMubz0tMSx0aGlzLnA9Nyx0aGlzLmM9dCx0aGlzLmE9bn1mdW5jdGlvbiBxbXQodCxlLG4scixzKXt0aGlzLmQ9ZSx0aGlzLmo9cix0aGlzLmU9cyx0aGlzLm89LTEsdGhpcy5wPTQsdGhpcy5jPXQsdGhpcy5hPW59ZnVuY3Rpb24gRGVlKHQsZSl7dmFyIG4scixzLG87Zm9yKHI9ZSxzPTAsbz1yLmxlbmd0aDtzPG87KytzKW49cltzXSxwdGUodC5hLG4pO3JldHVybiB0fWZ1bmN0aW9uIEkxKHQpe3ZhciBlLG4scixzO2ZvcihuPXQscj0wLHM9bi5sZW5ndGg7cjxzOysrcillPW5bcl0sRHIoZSk7cmV0dXJuIG5ldyBRR3QodCl9ZnVuY3Rpb24gY29uKHQpe3ZhciBlPS9mdW5jdGlvbig/OlxzKyhbXHckXSspKT9ccypcKC8sbj1lLmV4ZWModCk7cmV0dXJuIG4mJm5bMV18fCRhdH1mdW5jdGlvbiBJZWUodCxlKXtpZih0KXtlLm49dDt2YXIgbj1kcm4oZSk7aWYoIW4peyRIW3RdPVtlXTtyZXR1cm59bi5nbT1lfX1mdW5jdGlvbiB1b24odCxlLG4pe3ZhciByLHM7cmV0dXJuIHM9dC5sZW5ndGgscj1iLk1hdGgubWluKG4scyksVTR0KHQsMCxlLDAsciwhMCksZX1mdW5jdGlvbiBPZWUodCxlLG4pe3ZhciByLHM7Zm9yKHM9ZS5LYygpO3MuT2IoKTspcj11KHMuUGIoKSw3OSksVnModCx1KG4uS2IociksMzMpKX1mdW5jdGlvbiBsb24oKXtCSHQoKTtmb3IodmFyIHQ9cHV0LGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXQucHVzaChhcmd1bWVudHNbZV0pfWZ1bmN0aW9uIHpfKHQsZSl7dmFyIG4scixzLG87Zm9yKHI9ZSxzPTAsbz1yLmxlbmd0aDtzPG87KytzKW49cltzXSxrcyh0LG4sdC5jLmIsdC5jKX1mdW5jdGlvbiBZJCh0LGUpe3QuYj1iLk1hdGgubWF4KHQuYixlLmQpLHQuZSs9ZS5yKyh0LmEuYy5sZW5ndGg9PTA/MDp0LmMpLHVlKHQuYSxlKX1mdW5jdGlvbiBOZWUodCl7UG0odC5jPj0wKSxvaG4odC5kLHQuYyk8MCYmKHQuYT10LmEtMSZ0LmQuYS5sZW5ndGgtMSx0LmI9dC5kLmMpLHQuYz0tMX1mdW5jdGlvbiBIbXQodCl7cmV0dXJuIHQuYTw1ND90LmY8MD8tMTp0LmY+MD8xOjA6KCF0LmMmJih0LmM9akQodC5mKSksdC5jKS5lfWZ1bmN0aW9uIHZmKHQpe2lmKCEodD49MCkpdGhyb3cgbnQobmV3IFBuKCJ0b2xlcmFuY2UgKCIrdCsiKSBtdXN0IGJlID49IDAiKSk7cmV0dXJuIHR9ZnVuY3Rpb24gajgoKXtyZXR1cm4gWmh0fHwoWmh0PW5ldyB5dWUsYTQoWmh0LHV0KG90KGo0LDEpLE1lLDEzMCwwLFtuZXcga3BdKSkpLFpodH1mdW5jdGlvbiBobygpe2hvPVgsTVM9bmV3IElldChPQywwKSxhbD1uZXcgSWV0KCJJTlBVVCIsMSksc3U9bmV3IElldCgiT1VUUFVUIiwyKX1mdW5jdGlvbiBYJCgpe1gkPVgsazl0PW5ldyBfZXQoIkFSRCIsMCksT1Y9bmV3IF9ldCgiTVNEIiwxKSx5bHQ9bmV3IF9ldCgiTUFOVUFMIiwyKX1mdW5jdGlvbiBadigpe1p2PVgsT089bmV3IEJldCgiQkFSWUNFTlRFUiIsMCksSVM9bmV3IEJldChpMWUsMSksZEc9bmV3IEJldChzMWUsMil9ZnVuY3Rpb24gQ0QodCxlKXt2YXIgbjtpZihuPXQuZ2MoKSxlPDB8fGU+bil0aHJvdyBudChuZXcgam0oZSxuKSk7cmV0dXJuIG5ldyBvdnQodCxlKX1mdW5jdGlvbiBQZWUodCxlKXt2YXIgbjtyZXR1cm4gX3QoZSw0Mik/dC5jLk1jKGUpOihuPVlpdCh0LGUpLER6KHQsZSksbil9ZnVuY3Rpb24ga28odCxlLG4pe3JldHVybiBnMih0LGUpLHR1KHQsbiksUGcodCwwKSx0eSh0LDEpLGpnKHQsITApLFJnKHQsITApLHR9ZnVuY3Rpb24gcWwodCxlKXtpZih0PDApdGhyb3cgbnQobmV3IFBuKGUrIiBjYW5ub3QgYmUgbmVnYXRpdmUgYnV0IHdhczogIit0KSk7cmV0dXJuIHR9ZnVuY3Rpb24gRmVlKHQsZSl7dmFyIG4scjtmb3Iobj0wLHI9dC5nYygpO248cjsrK24paWYoUmMoZSx0LlhiKG4pKSlyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiBRJCh0KXt2YXIgZSxuO2ZvcihuPXQuYy5DYygpLktjKCk7bi5PYigpOyllPXUobi5QYigpLDE0KSxlLiRiKCk7dC5jLiRiKCksdC5kPTB9ZnVuY3Rpb24gaG9uKHQpe3ZhciBlLG4scixzO2ZvcihuPXQuYSxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWU9bltyXSxSWXQoZSxlLmxlbmd0aCxudWxsKX1mdW5jdGlvbiBWbXQodCl7dmFyIGUsbjtpZih0PT0wKXJldHVybiAzMjtmb3Iobj0wLGU9MTshKGUmdCk7ZTw8PTEpKytuO3JldHVybiBufWZ1bmN0aW9uIGZvbih0KXt2YXIgZSxuO2ZvcihuPW5ldyBTKGtzZSh0KSk7bi5hPG4uYy5jLmxlbmd0aDspZT11KFEobiksNjgwKSxlLkdmKCl9ZnVuY3Rpb24gQmVlKHQpe2xidCgpLHRoaXMuZz1uZXcgQXIsdGhpcy5mPW5ldyBBcix0aGlzLmI9bmV3IEFyLHRoaXMuYz1uZXcgSHYsdGhpcy5pPXR9ZnVuY3Rpb24gR210KCl7dGhpcy5mPW5ldyBEYSx0aGlzLmQ9bmV3IE9wdCx0aGlzLmM9bmV3IERhLHRoaXMuYT1uZXcgbGUsdGhpcy5iPW5ldyBsZX1mdW5jdGlvbiBSZWUodCxlLG4scil7dGhpcy5yaigpLHRoaXMuYT1lLHRoaXMuYj10LHRoaXMuYz1udWxsLHRoaXMuYz1uZXcgWFd0KHRoaXMsZSxuLHIpfWZ1bmN0aW9uIHJpdCh0LGUsbixyLHMpe3RoaXMuZD10LHRoaXMubj1lLHRoaXMuZz1uLHRoaXMubz1yLHRoaXMucD0tMSxzfHwodGhpcy5vPS0yLXItMSl9ZnVuY3Rpb24gamVlKCl7aDJ0LmNhbGwodGhpcyksdGhpcy5uPS0xLHRoaXMuZz1udWxsLHRoaXMuaT1udWxsLHRoaXMuaj1udWxsLHRoaXMuQmJ8PXhmfWZ1bmN0aW9uIGRvbigpe3JldHVybiBibCgpLHV0KG90KENBdCwxKSxvZSwyNTksMCxbQUUsaU4sR0csZUEsVUcsS0csV0csbWZ0LHJOXSl9ZnVuY3Rpb24gZ29uKCl7cmV0dXJuIGdxKCksdXQob3QoWTd0LDEpLG9lLDI1MCwwLFtLN3QsVjd0LEc3dCxIN3QsUHV0LFc3dCxVN3QscTd0LHo3dF0pfWZ1bmN0aW9uICRlZSgpeyRlZT1YLHlnZT11dChvdChTciwxKSxKciwyNSwxNSxbMCw4LDQsMTIsMiwxMCw2LDE0LDEsOSw1LDEzLDMsMTEsNywxNV0pfWZ1bmN0aW9uIHplZSgpe3plZT1YLG5tZT1FaShFaShFaShuZXcgWnMsKFlhKCksTGQpLChjbygpLGhTKSksZmIsZUUpLGZ1LHRFKX1mdW5jdGlvbiBxZWUoKXtxZWU9WCxybWU9RWkoRWkoRWkobmV3IFpzLChZYSgpLExkKSwoY28oKSxoUykpLGZiLGVFKSxmdSx0RSl9ZnVuY3Rpb24gSGVlKCl7SGVlPVgsaW1lPUVpKEVpKEVpKG5ldyBacywoWWEoKSxMZCksKGNvKCksaFMpKSxmYixlRSksZnUsdEUpfWZ1bmN0aW9uIFZlZSgpe1ZlZT1YLG9tZT1lbChFaShFaShuZXcgWnMsKFlhKCksZnUpLChjbygpLHdWKSksR2MsZFYpLGpvLHZWKX1mdW5jdGlvbiBLNigpe0s2PVgsQ3g9bmV3IFRldCgiTEFZRVJfU1dFRVAiLDApLHdPPW5ldyBUZXQoem90LDEpLHk5dD1uZXcgVGV0KEswLDIpfWZ1bmN0aW9uIHBvbih0LGUpe3ZhciBuLHI7cmV0dXJuIG49dC5jLHI9ZS5lW3QucF0scj4wP3UoUGUobi5hLHItMSksMTApOm51bGx9ZnVuY3Rpb24gcV8odCxlKXt2YXIgbjtuPXQuayx0Lms9ZSx0LkRiJjQmJiEodC5EYiYxKSYmQ2kodCxuZXcgb2EodCwxLDIsbix0LmspKX1mdW5jdGlvbiBaJCh0LGUpe3ZhciBuO249dC5mLHQuZj1lLHQuRGImNCYmISh0LkRiJjEpJiZDaSh0LG5ldyBvYSh0LDEsOCxuLHQuZikpfWZ1bmN0aW9uIEokKHQsZSl7dmFyIG47bj10LmksdC5pPWUsdC5EYiY0JiYhKHQuRGImMSkmJkNpKHQsbmV3IG9hKHQsMSw3LG4sdC5pKSl9ZnVuY3Rpb24gVW10KHQsZSl7dmFyIG47bj10LmEsdC5hPWUsdC5EYiY0JiYhKHQuRGImMSkmJkNpKHQsbmV3IG9hKHQsMSw4LG4sdC5hKSl9ZnVuY3Rpb24gV210KHQsZSl7dmFyIG47bj10LmIsdC5iPWUsdC5EYiY0JiYhKHQuRGImMSkmJkNpKHQsbmV3IG9hKHQsMSwwLG4sdC5iKSl9ZnVuY3Rpb24gS210KHQsZSl7dmFyIG47bj10LmIsdC5iPWUsdC5EYiY0JiYhKHQuRGImMSkmJkNpKHQsbmV3IG9hKHQsMSwwLG4sdC5iKSl9ZnVuY3Rpb24gWW10KHQsZSl7dmFyIG47bj10LmMsdC5jPWUsdC5EYiY0JiYhKHQuRGImMSkmJkNpKHQsbmV3IG9hKHQsMSwxLG4sdC5jKSl9ZnVuY3Rpb24gWG10KHQsZSl7dmFyIG47bj10LmMsdC5jPWUsdC5EYiY0JiYhKHQuRGImMSkmJkNpKHQsbmV3IG9hKHQsMSwxLG4sdC5jKSl9ZnVuY3Rpb24gaWl0KHQsZSl7dmFyIG47bj10LmMsdC5jPWUsdC5EYiY0JiYhKHQuRGImMSkmJkNpKHQsbmV3IG9hKHQsMSw0LG4sdC5jKSl9ZnVuY3Rpb24gUW10KHQsZSl7dmFyIG47bj10LmQsdC5kPWUsdC5EYiY0JiYhKHQuRGImMSkmJkNpKHQsbmV3IG9hKHQsMSwxLG4sdC5kKSl9ZnVuY3Rpb24gc2l0KHQsZSl7dmFyIG47bj10LkQsdC5EPWUsdC5EYiY0JiYhKHQuRGImMSkmJkNpKHQsbmV3IG9hKHQsMSwyLG4sdC5EKSl9ZnVuY3Rpb24gYWl0KHQsZSl7dC5yPjAmJnQuYzx0LnImJih0LmMrPWUsdC5pJiZ0LmkuZD4wJiZ0LmchPTAmJmFpdCh0LmksZS90LnIqdC5pLmQpKX1mdW5jdGlvbiBib24odCxlLG4pe3ZhciByO3QuYj1lLHQuYT1uLHI9KHQuYSY1MTIpPT01MTI/bmV3IF9xdDpuZXcgR0wsdC5jPUl2bihyLHQuYix0LmEpfWZ1bmN0aW9uIEdlZSh0LGUpe3JldHVybiBHMCh0LmUsZSk/KHNvKCksUXJ0KGUpP25ldyBEaihlLHQpOm5ldyBJTShlLHQpKTpuZXcgQkd0KGUsdCl9ZnVuY3Rpb24gdHoodCxlKXtyZXR1cm4gblllKFZfKHQuYSxlLE1yKElhKGUwLFdkKE1yKElhKGU9PW51bGw/MDpKaShlKSxuMCkpLDE1KSkpKSl9ZnVuY3Rpb24gdm9uKHQsZSxuKXtyZXR1cm4gWW0odCxuZXcgZmUoZSksbmV3IE5uLG5ldyBnZShuKSx1dChvdCh3bCwxKSxvZSwxMzIsMCxbXSkpfWZ1bmN0aW9uIHdvbih0KXt2YXIgZSxuO3JldHVybiAwPnQ/bmV3IHVidDooZT10KzEsbj1uZXcgcEp0KGUsdCksbmV3IHEydChudWxsLG4pKX1mdW5jdGlvbiBtb24odCxlKXtwbigpO3ZhciBuO3JldHVybiBuPW5ldyB4NigxKSxoYSh0KT9BbyhuLHQsZSk6bHUobi5mLHQsZSksbmV3IHoobil9ZnVuY3Rpb24geW9uKHQsZSl7dmFyIG4scjtyZXR1cm4gbj10Lm8rdC5wLHI9ZS5vK2UucCxuPHI/LTE6bj09cj8wOjF9ZnVuY3Rpb24geG9uKHQpe3ZhciBlO3JldHVybiBlPUsodCwoYWUoKSxJaSkpLF90KGUsMTYwKT9paWUodShlLDE2MCkpOm51bGx9ZnVuY3Rpb24gVWVlKHQpe3ZhciBlO3JldHVybiB0PWIuTWF0aC5tYXgodCwyKSxlPXh5dCh0KSx0PmU/KGU8PD0xLGU+MD9lOkFDKTplfWZ1bmN0aW9uIG9pdCh0KXtzd2l0Y2gobTJ0KHQuZSE9MyksdC5lKXtjYXNlIDI6cmV0dXJuITE7Y2FzZSAwOnJldHVybiEwfXJldHVybiBDc24odCl9ZnVuY3Rpb24gV2VlKHQsZSl7dmFyIG47cmV0dXJuIF90KGUsOCk/KG49dShlLDgpLHQuYT09bi5hJiZ0LmI9PW4uYik6ITF9ZnVuY3Rpb24gY2l0KHQsZSxuKXt2YXIgcixzLG87cmV0dXJuIG89ZT4+NSxzPWUmMzEscj1Hcyh6bSh0Lm5bbl1bb10sTXIoTTAocywxKSkpLDMpLHJ9ZnVuY3Rpb24ga29uKHQsZSl7dmFyIG4scjtmb3Iocj1lLnZjKCkuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksNDIpLFl6KHQsbi5jZCgpLG4uZGQoKSl9ZnVuY3Rpb24gRW9uKHQsZSl7dmFyIG47bj1uZXcgbWEsdShlLmIsNjUpLHUoZS5iLDY1KSx1KGUuYiw2NSksX3UoZS5hLG5ldyB3dnQodCxuLGUpKX1mdW5jdGlvbiBabXQodCxlKXt2YXIgbjtuPXQuYix0LmI9ZSx0LkRiJjQmJiEodC5EYiYxKSYmQ2kodCxuZXcgb2EodCwxLDIxLG4sdC5iKSl9ZnVuY3Rpb24gSm10KHQsZSl7dmFyIG47bj10LmQsdC5kPWUsdC5EYiY0JiYhKHQuRGImMSkmJkNpKHQsbmV3IG9hKHQsMSwxMSxuLHQuZCkpfWZ1bmN0aW9uIGV6KHQsZSl7dmFyIG47bj10LmosdC5qPWUsdC5EYiY0JiYhKHQuRGImMSkmJkNpKHQsbmV3IG9hKHQsMSwxMyxuLHQuaikpfWZ1bmN0aW9uIEtlZSh0LGUsbil7dmFyIHIscyxvO2ZvcihvPXQuYS5sZW5ndGgtMSxzPXQuYixyPTA7cjxuO3M9cysxJm8sKytyKWxzKGUscix0LmFbc10pfWZ1bmN0aW9uIHdmKHQsZSl7dmFyIG47cmV0dXJuIEluKGUpLG49ZS5nLHQuYltuXT8hMToobHModC5iLG4sZSksKyt0LmMsITApfWZ1bmN0aW9uIFllZSh0LGUpe3ZhciBuO3JldHVybiBuPWU9PW51bGw/LTE6R28odC5iLGUsMCksbjwwPyExOih1aXQodCxuKSwhMCl9ZnVuY3Rpb24gdWl0KHQsZSl7dmFyIG47bj1JZyh0LmIsdC5iLmMubGVuZ3RoLTEpLGU8dC5iLmMubGVuZ3RoJiYobGgodC5iLGUsbiksdW9lKHQsZSkpfWZ1bmN0aW9uIFRvbih0LGUpeyhfJCgpLHoxP251bGw6ZS5jKS5sZW5ndGg9PTAmJl9XdChlLG5ldyAkZSksQW8odC5hLHoxP251bGw6ZS5jLGUpfWZ1bmN0aW9uIF9vbih0LGUpe21yKGUsIkhpZXJhcmNoaWNhbCBwb3J0IGNvbnN0cmFpbnQgcHJvY2Vzc2luZyIsMSksT2huKHQpLE41bih0KSxvcihlKX1mdW5jdGlvbiBDb24odCxlKXt2YXIgbixyO2ZvcihyPWUuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksMjY2KSx0LmI9ITAsVnModC5lLG4pLG4uYj10fWZ1bmN0aW9uIG56KHQsZSl7dmFyIG4scjtyZXR1cm4gbj0xLWUscj10LmFbbl0sdC5hW25dPXIuYVtlXSxyLmFbZV09dCx0LmI9ITAsci5iPSExLHJ9ZnVuY3Rpb24gU29uKHQsZSl7dmFyIG4scjtyZXR1cm4gbj11KEsodCwoeGUoKSxIeSkpLDgpLHI9dShLKGUsSHkpLDgpLGpzKG4uYixyLmIpfWZ1bmN0aW9uIFhlZSh0KXtWdnQuY2FsbCh0aGlzKSx0aGlzLmI9WnQodmUoSyh0LCh4ZSgpLFRmKSkpKSx0aGlzLmE9dShLKHQsWDApLDIxOCl9ZnVuY3Rpb24gUWVlKHQsZSxuKXtXd3QuY2FsbCh0aGlzLHQsZSxuKSx0aGlzLmE9bmV3IEFyLHRoaXMuYj1uZXcgQXIsdGhpcy5kPW5ldyBmJHQodGhpcyl9ZnVuY3Rpb24gWmVlKHQpe3RoaXMuZT10LHRoaXMuZD1uZXcgeFIoUW0oTjYodGhpcy5lKS5nYygpKSksdGhpcy5jPXRoaXMuZS5hLHRoaXMuYj10aGlzLmUuY31mdW5jdGlvbiByeih0KXt0aGlzLmI9dCx0aGlzLmE9TnQoU3IsSnIsMjUsdCsxLDE1LDEpLHRoaXMuYz1OdChTcixKciwyNSx0LDE1LDEpLHRoaXMuZD0wfWZ1bmN0aW9uIGxpdCh0LGUsbil7dmFyIHI7cmV0dXJuIHI9bmV3IGxlLEE1dCh0LGUscixuLCEwLCEwKSx0LmI9bmV3IHJ6KHIuYy5sZW5ndGgpLHJ9ZnVuY3Rpb24gSmVlKHQsZSl7dmFyIG47cmV0dXJuIG49dSh0cih0LmMsZSksNDU4KSxufHwobj1uZXcgaXF0LG4uYz1lLEFpKHQuYyxuLmMsbikpLG59ZnVuY3Rpb24gaGl0KHQsZSl7dmFyIG49dC5hLHI9MDtmb3IodmFyIHMgaW4gbiluLmhhc093blByb3BlcnR5KHMpJiYoZVtyKytdPXMpO3JldHVybiBlfWZ1bmN0aW9uIHR5dCh0KXt2YXIgZTtyZXR1cm4gdC5iPT1udWxsPyhTZygpLFNnKCksaE4pOihlPXQuTGsoKT90LktrKCk6dC5KaygpLGUpfWZ1bmN0aW9uIHRuZSh0KXt2YXIgZSxuO2ZvcihuPW5ldyBucih0KTtuLmUhPW4uaS5nYygpOyllPXUoZHIobiksMzMpLEN1KGUsMCksU3UoZSwwKX1mdW5jdGlvbiBVcCgpe1VwPVgsVHg9bmV3IHRzKG94dCksYVY9bmV3IHRzKGpmZSksbFM9bmV3IHRzKCRmZSksZE89bmV3IHRzKHpmZSl9ZnVuY3Rpb24gJDgoKXskOD1YLHBPPW5ldyBfYnQoIlRPX0lOVEVSTkFMX0xUUiIsMCksaWx0PW5ldyBfYnQoIlRPX0lOUFVUX0RJUkVDVElPTiIsMSl9ZnVuY3Rpb24gaXooKXtpej1YLFRHPW5ldyAkYnQoIlAxX05PREVfUExBQ0VNRU5UIiwwKSx4RT1uZXcgJGJ0KCJQMl9FREdFX1JPVVRJTkciLDEpfWZ1bmN0aW9uIEp2KCl7SnY9WCxBdz1uZXcgRWV0KCJTVEFSVCIsMCksZGI9bmV3IEVldCgiTUlERExFIiwxKSxTdz1uZXcgRWV0KCJFTkQiLDIpfWZ1bmN0aW9uIFk2KCl7WTY9WCxvbHQ9bmV3IEhzKCJlZGdlbGFiZWxjZW50ZXJlZG5lc3NhbmFseXNpcy5pbmNsdWRlbGFiZWwiLChGbigpLE8yKSl9ZnVuY3Rpb24gQW9uKHQsZSl7eXMoV2kobmV3IGtuKG51bGwsbmV3IFRuKG5ldyBUbSh0LmIpLDEpKSxuZXcgYUd0KHQsZSkpLG5ldyBjR3QodCxlKSl9ZnVuY3Rpb24gZW5lKCl7dGhpcy5jPW5ldyBFUigwKSx0aGlzLmI9bmV3IEVSKFMxZSksdGhpcy5kPW5ldyBFUihDMWUpLHRoaXMuYT1uZXcgRVIoSW90KX1mdW5jdGlvbiBleXQodCl7dmFyIGUsbjtmb3Iobj10LmMuYS5lYygpLktjKCk7bi5PYigpOyllPXUobi5QYigpLDIxNCksc3B0KGUsbmV3IEVhZShlLmUpKX1mdW5jdGlvbiBubmUodCl7dmFyIGUsbjtmb3Iobj10LmMuYS5lYygpLktjKCk7bi5PYigpOyllPXUobi5QYigpLDIxNCksRXR0KGUsbmV3IExZdChlLmYpKX1mdW5jdGlvbiB0dSh0LGUpe3ZhciBuO249dC56Yix0LnpiPWUsdC5EYiY0JiYhKHQuRGImMSkmJkNpKHQsbmV3IG9hKHQsMSwxLG4sdC56YikpfWZ1bmN0aW9uIHN6KHQsZSl7dmFyIG47bj10LnhiLHQueGI9ZSx0LkRiJjQmJiEodC5EYiYxKSYmQ2kodCxuZXcgb2EodCwxLDMsbix0LnhiKSl9ZnVuY3Rpb24gYXoodCxlKXt2YXIgbjtuPXQueWIsdC55Yj1lLHQuRGImNCYmISh0LkRiJjEpJiZDaSh0LG5ldyBvYSh0LDEsMixuLHQueWIpKX1mdW5jdGlvbiBmcyh0LGUpe3ZhciBuLHI7bj0ocj1uZXcgS3R0LHIpLG4ubj1lLE9yKCghdC5zJiYodC5zPW5ldyBoZShOdSx0LDIxLDE3KSksdC5zKSxuKX1mdW5jdGlvbiBHaSh0LGUpe3ZhciBuLHI7cj0obj1uZXcgajJ0LG4pLHIubj1lLE9yKCghdC5zJiYodC5zPW5ldyBoZShOdSx0LDIxLDE3KSksdC5zKSxyKX1mdW5jdGlvbiBuNCh0LGUpe3ZhciBuLHI7Zm9yKG49dC5QYygpLE04KG4sMCxuLmxlbmd0aCxlKSxyPTA7cjxuLmxlbmd0aDtyKyspdC5fYyhyLG5bcl0pfWZ1bmN0aW9uIEthKHQsZSl7dmFyIG4scixzO2ZvcihJbihlKSxuPSExLHM9ZS5LYygpO3MuT2IoKTspcj1zLlBiKCksbj1ufHQuRmMocik7cmV0dXJuIG59ZnVuY3Rpb24gcm5lKHQpe3ZhciBlLG4scjtmb3IoZT0wLHI9dC5LYygpO3IuT2IoKTspbj1yLlBiKCksZSs9biE9bnVsbD9KaShuKTowLGU9fn5lO3JldHVybiBlfWZ1bmN0aW9uIGluZSh0KXt2YXIgZTtyZXR1cm4gdD09MD8iVVRDIjoodDwwPyh0PS10LGU9IlVUQysiKTplPSJVVEMtIixlKyR0ZSh0KSl9ZnVuY3Rpb24gZml0KHQsZSl7dmFyIG47cmV0dXJuIF90KGUsMTQpPyhuPXUoZSwxNCksdC5HYyhuKSk6WnJ0KHQsdShEcihlKSwyMCkuS2MoKSl9ZnVuY3Rpb24gc25lKHQsZSxuKXtjZWUuY2FsbCh0aGlzLGUsbiksdGhpcy5kPU50KG8wLEdnLDEwLHQuYS5jLmxlbmd0aCwwLDEpLFAxKHQuYSx0aGlzLmQpfWZ1bmN0aW9uIExvbih0KXt0LmE9bnVsbCx0LmU9bnVsbCx0LmIuYz1OdChRbixNZSwxLDAsNSwxKSx0LmYuYz1OdChRbixNZSwxLDAsNSwxKSx0LmM9bnVsbH1mdW5jdGlvbiBhbmUodCxlKXtlP3QuQj09bnVsbCYmKHQuQj10LkQsdC5EPW51bGwpOnQuQiE9bnVsbCYmKHQuRD10LkIsdC5CPW51bGwpfWZ1bmN0aW9uIG9uZSh0LGUpe3JldHVybiBadCh2ZShPdihxRCh4dShuZXcga24obnVsbCxuZXcgVG4odC5jLmIsMTYpKSxuZXcgclIodCkpLGUpKSkpfWZ1bmN0aW9uIG55dCh0LGUpe3JldHVybiBadCh2ZShPdihxRCh4dShuZXcga24obnVsbCxuZXcgVG4odC5jLmIsMTYpKSxuZXcgQ1QodCkpLGUpKSkpfWZ1bmN0aW9uIE1vbih0LGUpe21yKGUscjFlLDEpLHlzKGVjKG5ldyBrbihudWxsLG5ldyBUbih0LmIsMTYpKSxuZXcgYVkpLG5ldyBvWSksb3IoZSl9ZnVuY3Rpb24gRG9uKHQsZSl7dmFyIG4scjtyZXR1cm4gbj11KHplKHQsKGF5KCksQ0cpKSwxOSkscj11KHplKGUsQ0cpLDE5KSxtdShuLmEsci5hKX1mdW5jdGlvbiByeXQodCxlLG4pe3ZhciByLHM7Zm9yKHM9c2kodCwwKTtzLmIhPXMuZC5jOylyPXUoaWkocyksOCksci5hKz1lLHIuYis9bjtyZXR1cm4gdH1mdW5jdGlvbiBIXyh0LGUsbil7dmFyIHI7Zm9yKHI9dC5iW24mdC5mXTtyO3I9ci5iKWlmKG49PXIuYSYmZGQoZSxyLmcpKXJldHVybiByO3JldHVybiBudWxsfWZ1bmN0aW9uIFZfKHQsZSxuKXt2YXIgcjtmb3Iocj10LmNbbiZ0LmZdO3I7cj1yLmQpaWYobj09ci5mJiZkZChlLHIuaSkpcmV0dXJuIHI7cmV0dXJuIG51bGx9ZnVuY3Rpb24gSW9uKHQsZSxuKXt2YXIgcixzLG87Zm9yKHI9MCxzPTA7czxuO3MrKylvPWVbc10sdFtzXT1vPDwxfHIscj1vPj4+MzE7ciE9MCYmKHRbbl09cil9ZnVuY3Rpb24gT29uKHQsZSl7cG4oKTt2YXIgbixyO2ZvcihyPW5ldyBsZSxuPTA7bjx0OysrbilyLmNbci5jLmxlbmd0aF09ZTtyZXR1cm4gbmV3IHVldChyKX1mdW5jdGlvbiBjbmUodCl7dmFyIGU7cmV0dXJuIGU9ZFp0KHQpLEF2KGUuYSwwKT8objgoKSxuOCgpLHk3dCk6KG44KCksbmV3IEQydChlLmIpKX1mdW5jdGlvbiB1bmUodCl7dmFyIGU7cmV0dXJuIGU9ZFp0KHQpLEF2KGUuYSwwKT8objgoKSxuOCgpLHk3dCk6KG44KCksbmV3IEQydChlLmMpKX1mdW5jdGlvbiBOb24odCl7dmFyIGU7cmV0dXJuIGU9bSQodCksQXYoZS5hLDApPyhTUigpLFNSKCksTWdlKTooU1IoKSxuZXcgcld0KGUuYikpfWZ1bmN0aW9uIFBvbih0KXtyZXR1cm4gdC5iLmMuaS5rPT0oR24oKSxJcyk/dShLKHQuYi5jLmksKGFlKCksSWkpKSwxMSk6dC5iLmN9ZnVuY3Rpb24gbG5lKHQpe3JldHVybiB0LmIuZC5pLms9PShHbigpLElzKT91KEsodC5iLmQuaSwoYWUoKSxJaSkpLDExKTp0LmIuZH1mdW5jdGlvbiB4cyh0LGUsbixyLHMsbyxoLGQsdyxrLF8sTSxCKXtyZXR1cm4gbm9lKHQsZSxuLHIscyxvLGgsZCx3LGssXyxNLEIpLCRpdCh0LCExKSx0fWZ1bmN0aW9uIGRoKHQsZSxuLHIscyxvLGgpe0tyLmNhbGwodGhpcyx0LGUpLHRoaXMuZD1uLHRoaXMuZT1yLHRoaXMuYz1zLHRoaXMuYj1vLHRoaXMuYT1MMShoKX1mdW5jdGlvbiBGb24odCxlKXt0eXBlb2Ygd2luZG93PT09X0kmJnR5cGVvZiB3aW5kb3cuJGd3dD09PV9JJiYod2luZG93LiRnd3RbdF09ZSl9ZnVuY3Rpb24gQm9uKHQsZSl7cmV0dXJuIFU4KCksdD09Q3cmJmU9PUl5fHx0PT1JeSYmZT09Q3d8fHQ9PSQ0JiZlPT1EeXx8dD09RHkmJmU9PSQ0fWZ1bmN0aW9uIFJvbih0LGUpe3JldHVybiBVOCgpLHQ9PUN3JiZlPT1EeXx8dD09Q3cmJmU9PSQ0fHx0PT1JeSYmZT09JDR8fHQ9PUl5JiZlPT1EeX1mdW5jdGlvbiBobmUodCxlKXtyZXR1cm4gRTEoKSx2ZihSMSksYi5NYXRoLmFicygwLWUpPD1SMXx8ZT09MHx8aXNOYU4oMCkmJmlzTmFOKGUpPzA6dC9lfWZ1bmN0aW9uIGpvbigpe3JldHVybiBnbygpLHV0KG90KE1sdCwxKSxvZSwyNTYsMCxbUlYseWgsdlMsalYsbEUsVTQsd1MsY0UsdUUsJFZdKX1mdW5jdGlvbiBkaXQoKXtkaXQ9WCxhQT1uZXcgeXF0LEFmdD11dChvdChOdSwxKSxGNCwxNzAsMCxbXSkscjVlPXV0KG90KFloLDEpLE04dCw1OSwwLFtdKX1mdW5jdGlvbiBveigpe296PVgscV90PW5ldyBQZXQoIk5PIiwwKSx5aHQ9bmV3IFBldCgiR1JFRURZIiwxKSx6X3Q9bmV3IFBldCgiTE9PS19CQUNLIiwyKX1mdW5jdGlvbiBWdSgpe1Z1PVgsREV0PW5ldyBibSxMRXQ9bmV3IHdwLE1FdD1uZXcgblksQUV0PW5ldyBIYixJRXQ9bmV3IHJZLE9FdD1uZXcgaVl9ZnVuY3Rpb24gJG9uKHQpe3ZhciBlLG4scjtmb3Iocj0wLG49bmV3IFModC5iKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoUShuKSwyOSksZS5wPXIsKytyfWZ1bmN0aW9uIHpvbih0LGUpe3ZhciBuO3JldHVybiBuPWs0dCh0KSxRNHQobmV3IFJlKG4uYyxuLmQpLG5ldyBSZShuLmIsbi5hKSx0LnJmKCksZSx0LkhmKCkpfWZ1bmN0aW9uIHpjKHQsZSl7dmFyIG47cmV0dXJuIHQuYj9udWxsOihuPVJhbih0LHQuZyksYWkodC5hLG4pLG4uaT10LHQuZD1lLG4pfWZ1bmN0aW9uIHFvbih0LGUsbil7bXIobiwiREZTIFRyZWVpZnlpbmcgcGhhc2UiLDEpLFFsbih0LGUpLFcybih0LGUpLHQuYT1udWxsLHQuYj1udWxsLG9yKG4pfWZ1bmN0aW9uIGZuZSh0LGUsbil7dGhpcy5nPXQsdGhpcy5kPWUsdGhpcy5lPW4sdGhpcy5hPW5ldyBsZSwkZ24odGhpcykscG4oKSxhYSh0aGlzLmEsbnVsbCl9ZnVuY3Rpb24gaXl0KHQpe3RoaXMuaT10LmdjKCksdGhpcy5pPjAmJih0aGlzLmc9dGhpcy5yaSh0aGlzLmkrKHRoaXMuaS84fDApKzEpLHQuUWModGhpcy5nKSl9ZnVuY3Rpb24gcHModCxlKXtTai5jYWxsKHRoaXMsaTVlLHQsZSksdGhpcy5iPXRoaXMsdGhpcy5hPWh1KHQuVGcoKSx3bih0aGlzLmUuVGcoKSx0aGlzLmMpKX1mdW5jdGlvbiBHXyh0LGUpe3ZhciBuLHI7Zm9yKEluKGUpLHI9ZS52YygpLktjKCk7ci5PYigpOyluPXUoci5QYigpLDQyKSx0LnpjKG4uY2QoKSxuLmRkKCkpfWZ1bmN0aW9uIEhvbih0LGUsbil7dmFyIHI7Zm9yKHI9bi5LYygpO3IuT2IoKTspaWYoIWskKHQsZSxyLlBiKCkpKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIFZvbih0LGUsbixyLHMpe3ZhciBvO3JldHVybiBuJiYobz1lcyhlLlRnKCksdC5jKSxzPW4uZ2goZSwtMS0obz09LTE/cjpvKSxudWxsLHMpKSxzfWZ1bmN0aW9uIEdvbih0LGUsbixyLHMpe3ZhciBvO3JldHVybiBuJiYobz1lcyhlLlRnKCksdC5jKSxzPW4uaWgoZSwtMS0obz09LTE/cjpvKSxudWxsLHMpKSxzfWZ1bmN0aW9uIGRuZSh0KXt2YXIgZTtpZih0LmI9PS0yKXtpZih0LmU9PTApZT0tMTtlbHNlIGZvcihlPTA7dC5hW2VdPT0wO2UrKyk7dC5iPWV9cmV0dXJuIHQuYn1mdW5jdGlvbiBnbmUodCl7c3dpdGNoKHQuZyl7Y2FzZSAyOnJldHVybiBiZSgpLEJuO2Nhc2UgNDpyZXR1cm4gYmUoKSxIbjtkZWZhdWx0OnJldHVybiB0fX1mdW5jdGlvbiBwbmUodCl7c3dpdGNoKHQuZyl7Y2FzZSAxOnJldHVybiBiZSgpLHlyO2Nhc2UgMzpyZXR1cm4gYmUoKSxPbjtkZWZhdWx0OnJldHVybiB0fX1mdW5jdGlvbiBVb24odCl7dmFyIGUsbixyO3JldHVybiB0Lmo9PShiZSgpLE9uKSYmKGU9Vm9lKHQpLG49enUoZSxIbikscj16dShlLEJuKSxyfHxyJiZuKX1mdW5jdGlvbiBXb24odCl7dmFyIGUsbjtyZXR1cm4gZT11KHQuZSYmdC5lKCksOSksbj11KGx3dChlLGUubGVuZ3RoKSw5KSxuZXcgb2goZSxuLGUubGVuZ3RoKX1mdW5jdGlvbiBLb24odCxlKXttcihlLHIxZSwxKSxzM3QoZ1llKG5ldyBlcigoelQoKSxuZXcgbnJ0KHQsITEsITEsbmV3IFlQKSkpKSksb3IoZSl9ZnVuY3Rpb24gU0QodCxlKXtyZXR1cm4gRm4oKSxoYSh0KT9mbXQodCxqcihlKSk6Tm0odCk/Qm50KHQsdmUoZSkpOk9tKHQpP1p0bih0LEZlKGUpKTp0LndkKGUpfWZ1bmN0aW9uIHN5dCh0LGUpe2UucT10LHQuZD1iLk1hdGgubWF4KHQuZCxlLnIpLHQuYis9ZS5kKyh0LmEuYy5sZW5ndGg9PTA/MDp0LmMpLHVlKHQuYSxlKX1mdW5jdGlvbiB6OCh0LGUpe3ZhciBuLHIscyxvO3JldHVybiBzPXQuYyxuPXQuYyt0LmIsbz10LmQscj10LmQrdC5hLGUuYT5zJiZlLmE8biYmZS5iPm8mJmUuYjxyfWZ1bmN0aW9uIGJuZSh0LGUsbixyKXtfdCh0LkNiLDE3OSkmJih1KHQuQ2IsMTc5KS50Yj1udWxsKSx0dSh0LG4pLGUmJmNwbih0LGUpLHImJnQueGsoITApfWZ1bmN0aW9uIGF5dCh0LGUpe3ZhciBuO249dShlLDE4MyksZTIobiwieCIsdC5pKSxlMihuLCJ5Iix0LmopLGUyKG4sSGN0LHQuZyksZTIobixxY3QsdC5mKX1mdW5jdGlvbiBveXQoKXtveXQ9WCxjbWU9YXcoR0d0KEVpKEVpKG5ldyBacywoWWEoKSxmdSksKGNvKCksd1YpKSxHYyxkViksam8pLHZWKX1mdW5jdGlvbiB2bmUoKXt2bmU9WCxmbWU9YXcoR0d0KEVpKEVpKG5ldyBacywoWWEoKSxmdSksKGNvKCksd1YpKSxHYyxkViksam8pLHZWKX1mdW5jdGlvbiBjeigpe2N6PVgsemh0PW5ldyAkZXQoSzAsMCksU0N0PW5ldyAkZXQoIlBPTEFSX0NPT1JESU5BVEUiLDEpLENDdD1uZXcgJGV0KCJJRCIsMil9ZnVuY3Rpb24gdXooKXt1ej1YLFBfdD1uZXcgT2V0KCJFUVVBTExZIiwwKSx2aHQ9bmV3IE9ldChScSwxKSxGX3Q9bmV3IE9ldCgiTk9SVEhfU09VVEgiLDIpfWZ1bmN0aW9uIHduZSgpe3duZT1YLHF3ZT1RcigobTQoKSx1dChvdChEX3QsMSksb2UsMjYwLDAsW2hHLE1PLERPLEFfdCxMX3QsU190LE1fdCxmR10pKSl9ZnVuY3Rpb24gbW5lKCl7bW5lPVgsczJlPVFyKChmcSgpLHV0KG90KHY5dCwxKSxvZSwyNzAsMCxbZmx0LHBsdCxobHQsd2x0LGdsdCxkbHQsdmx0LGJsdF0pKSl9ZnVuY3Rpb24geW5lKCl7eW5lPVgsTzNlPVFyKChIZygpLHV0KG90KEkzZSwxKSxvZSwyNzcsMCxbYlN0LFBhLHhjLGtFLCRvLG1zLFJ4LEcxXSkpKX1mdW5jdGlvbiB4bmUoKXt4bmU9WCxGNGU9UXIoKHA3KCksdXQob3QoZVUsMSksb2UsMjM3LDAsW1RmdCxKRyx0VSxaRyxFZnQsUUcsWEcsa2Z0XSkpKX1mdW5jdGlvbiBxOCgpe3E4PVgsdVM9bmV3IEhzKCJkZWJ1Z1NWRyIsKEZuKCksITEpKSxKN3Q9bmV3IEhzKCJvdmVybGFwc0V4aXN0ZWQiLCEwKX1mdW5jdGlvbiBrbmUodCxlKXtyZXR1cm4gWW0obmV3IEh0KHQpLG5ldyBpZShlKSxuZXcgVXQoZSksbmV3IGtpLHV0KG90KHdsLDEpLG9lLDEzMiwwLFtdKSl9ZnVuY3Rpb24gWW9uKCl7dmFyIHQ7cmV0dXJuIER1dHx8KER1dD1uZXcgS3p0LHQ9bmV3IE9ydCgiIiksb1hlKHQsKHI4KCksQzd0KSksVG9uKER1dCx0KSksRHV0fWZ1bmN0aW9uIFhvbih0LGUpe3ZhciBuO2ZvcihEcihlKTt0Lk9iKCk7KWlmKG49dC5QYigpLCFseXQodShuLDEwKSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gRW5lKHQsZSl7dmFyIG47cmV0dXJuIG49b2F0KGo4KCksdCksbj8oRW8oZSwoZGkoKSxFRSksbiksITApOiExfWZ1bmN0aW9uIEhsKHQsZSl7dmFyIG47Zm9yKG49MDtuPGUuai5jLmxlbmd0aDtuKyspdSh3RCh0LG4pLDIxKS5HYyh1KHdEKGUsbiksMTQpKTtyZXR1cm4gdH1mdW5jdGlvbiBRb24odCxlKXt2YXIgbixyO2ZvcihyPW5ldyBTKGUuYik7ci5hPHIuYy5jLmxlbmd0aDspbj11KFEociksMjkpLHQuYVtuLnBdPXgwbihuKX1mdW5jdGlvbiBVXyh0LGUpe3ZhciBuLHI7Zm9yKEluKGUpLHI9dC52YygpLktjKCk7ci5PYigpOyluPXUoci5QYigpLDQyKSxlLk9kKG4uY2QoKSxuLmRkKCkpfWZ1bmN0aW9uIGx6KHQsZSl7dmFyIG47X3QoZSw4Myk/KHUodC5jLDc2KS5YaigpLG49dShlLDgzKSxrb24odCxuKSk6dSh0LmMsNzYpLldiKGUpfWZ1bmN0aW9uIGMyKHQpe3JldHVybiBfdCh0LDE1Mik/VjYodSh0LDE1MikpOl90KHQsMTMxKT91KHQsMTMxKS5hOl90KHQsNTQpP25ldyBtdih0KTpuZXcgTW0odCl9ZnVuY3Rpb24gWm9uKHQsZSl7cmV0dXJuIGU8dC5iLmdjKCk/dSh0LmIuWGIoZSksMTApOmU9PXQuYi5nYygpP3QuYTp1KFBlKHQuZSxlLXQuYi5nYygpLTEpLDEwKX1mdW5jdGlvbiBUbmUodCxlKXt0LmE9UmEodC5hLDEpLHQuYz1iLk1hdGgubWluKHQuYyxlKSx0LmI9Yi5NYXRoLm1heCh0LmIsZSksdC5kPVJhKHQuZCxlKX1mdW5jdGlvbiBKb24odCxlKXt2YXIgbjttcihlLCJFZGdlIGFuZCBsYXllciBjb25zdHJhaW50IGVkZ2UgcmV2ZXJzYWwiLDEpLG49bnduKHQpLHc0bihuKSxvcihlKX1mdW5jdGlvbiBfbmUodCl7dmFyIGU7dC5kPT1udWxsPygrK3QuZSx0LmY9MCxOcmUobnVsbCkpOigrK3QuZSxlPXQuZCx0LmQ9bnVsbCx0LmY9MCxOcmUoZSkpfWZ1bmN0aW9uIFdwKHQpe3ZhciBlO3JldHVybiBlPXQuaCxlPT0wP3QubCt0Lm0qaHg6ZT09VzA/dC5sK3QubSpoeC1FMjp0fWZ1bmN0aW9uIENuZSh0KXtyZXR1cm4gQm0oKSx0LkEuSGMoKE5sKCksWHkpKSYmIXQuQi5IYygoYmwoKSxpTikpP2NpZSh0KTpudWxsfWZ1bmN0aW9uIHRjbih0KXtpZihJbih0KSx0Lmxlbmd0aD09MCl0aHJvdyBudChuZXcgY2QoIlplcm8gbGVuZ3RoIEJpZ0ludGVnZXIiKSk7ZHduKHRoaXMsdCl9ZnVuY3Rpb24gcjQodCl7aWYoIXQpdGhyb3cgbnQobmV3IEhvKCJubyBjYWxscyB0byBuZXh0KCkgc2luY2UgdGhlIGxhc3QgY2FsbCB0byByZW1vdmUoKSIpKX1mdW5jdGlvbiBBdSh0KXtyZXR1cm4gSUk8dCYmdDxFMj90PDA/Yi5NYXRoLmNlaWwodCk6Yi5NYXRoLmZsb29yKHQpOldwKHkybih0KSl9ZnVuY3Rpb24gZWNuKHQsZSl7dmFyIG4scixzO2ZvcihuPXQuYy5FZSgpLHM9ZS5LYygpO3MuT2IoKTspcj1zLlBiKCksdC5hLk9kKG4scik7cmV0dXJuIHQuYi5LYihuKX1mdW5jdGlvbiBDaSh0LGUpe3ZhciBuLHIscztpZihuPXQuSmcoKSxuIT1udWxsJiZ0Lk1nKCkpZm9yKHI9MCxzPW4ubGVuZ3RoO3I8czsrK3IpbltyXS51aShlKX1mdW5jdGlvbiBIOCh0LGUpe3ZhciBuLHI7Zm9yKG49dCxyPSRhKG4pLmU7cjspe2lmKG49cixuPT1lKXJldHVybiEwO3I9JGEobikuZX1yZXR1cm4hMX1mdW5jdGlvbiBuY24odCxlLG4pe3ZhciByLHM7cmV0dXJuIHI9dC5hLmZbZS5wXSxzPXQuYS5mW24ucF0scjxzPy0xOnI9PXM/MDoxfWZ1bmN0aW9uIHUyKHQsZSxuKXt2YXIgcixzO3JldHVybiBzPXUod18odC5kLGUpLDE5KSxyPXUod18odC5iLG4pLDE5KSwhc3x8IXI/bnVsbDpVNih0LHMuYSxyLmEpfWZ1bmN0aW9uIHJjbih0LGUpe3ZhciBuLHI7Zm9yKHI9bmV3IG5yKHQpO3IuZSE9ci5pLmdjKCk7KW49dShkcihyKSwzMyksazEobixuLmkrZS5iLG4uaitlLmQpfWZ1bmN0aW9uIGljbih0LGUpe3ZhciBuLHI7Zm9yKHI9bmV3IFMoZSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KFEociksNzApLHVlKHQuZCxuKSxnMG4odCxuKX1mdW5jdGlvbiBzY24odCxlKXt2YXIgbixyO3I9bmV3IGxlLG49ZTtkbyByLmNbci5jLmxlbmd0aF09bixuPXUodHIodC5rLG4pLDE3KTt3aGlsZShuKTtyZXR1cm4gcn1mdW5jdGlvbiBNbih0LGUpe3ZhciBuO3JldHVybiB0LkRiJmU/KG49d3N0KHQsZSksbj09LTE/dC5FYjpvMih0LkViKVtuXSk6bnVsbH1mdW5jdGlvbiBoYyh0LGUpe3ZhciBuLHI7cmV0dXJuIG49KHI9bmV3IFhMLHIpLG4uRz1lLCF0LnJiJiYodC5yYj1uZXcgcW0odCxjMSx0KSksT3IodC5yYixuKSxufWZ1bmN0aW9uIGhpKHQsZSl7dmFyIG4scjtyZXR1cm4gbj0ocj1uZXcgbFIsciksbi5HPWUsIXQucmImJih0LnJiPW5ldyBxbSh0LGMxLHQpKSxPcih0LnJiLG4pLG59ZnVuY3Rpb24gY3l0KHQsZSl7c3dpdGNoKGUpe2Nhc2UgMTpyZXR1cm4hIXQubiYmdC5uLmkhPTA7Y2FzZSAyOnJldHVybiB0LmshPW51bGx9cmV0dXJuIHp3dCh0LGUpfWZ1bmN0aW9uIFNuZSh0KXtzd2l0Y2godC5hLmcpe2Nhc2UgMTpyZXR1cm4gbmV3IFNHdDtjYXNlIDM6cmV0dXJuIG5ldyBfc2U7ZGVmYXVsdDpyZXR1cm4gbmV3IHNkfX1mdW5jdGlvbiBoeih0KXt2YXIgZTtpZih0Lmc+MXx8dC5PYigpKXJldHVybisrdC5hLHQuZz0wLGU9dC5pLHQuT2IoKSxlO3Rocm93IG50KG5ldyB2Yyl9ZnVuY3Rpb24gYWNuKHQpe2JVdCgpO3ZhciBlO3JldHVybiBDVnQoa2h0LHQpfHwoZT1uZXcgTFEsZS5hPXQsWTJ0KGtodCx0LGUpKSx1KHhvKGtodCx0KSw2MzUpfWZ1bmN0aW9uIERoKHQpe3ZhciBlLG4scixzO3JldHVybiBzPXQscj0wLHM8MCYmKHMrPUUyLHI9VzApLG49Q3Mocy9oeCksZT1DcyhzLW4qaHgpLGN1KGUsbixyKX1mdW5jdGlvbiBBRCh0KXt2YXIgZSxuLHI7Zm9yKHI9MCxuPW5ldyBrNih0LmEpO24uYTxuLmMuYS5sZW5ndGg7KWU9Rl8obiksdC5iLkhjKGUpJiYrK3I7cmV0dXJuIHJ9ZnVuY3Rpb24gb2NuKHQpe3ZhciBlLG4scjtmb3IoZT0xLHI9dC5LYygpO3IuT2IoKTspbj1yLlBiKCksZT0zMSplKyhuPT1udWxsPzA6SmkobikpLGU9fn5lO3JldHVybiBlfWZ1bmN0aW9uIGNjbih0LGUpe3ZhciBuO3RoaXMuYz10LG49bmV3IGxlLFIzdCh0LG4sZSx0LmIsbnVsbCwhMSxudWxsLCExKSx0aGlzLmE9bmV3IHhhKG4sMCl9ZnVuY3Rpb24gVjgodCxlKXt0aGlzLmI9dCx0aGlzLmU9ZSx0aGlzLmQ9ZS5qLHRoaXMuZj0oc28oKSx1KHQsNjYpLk9qKCkpLHRoaXMuaz1odShlLmUuVGcoKSx0KX1mdW5jdGlvbiBsMih0LGUsbil7dGhpcy5iPShJbih0KSx0KSx0aGlzLmQ9KEluKGUpLGUpLHRoaXMuZT0oSW4obiksbiksdGhpcy5jPXRoaXMuZCsoIiIrdGhpcy5lKX1mdW5jdGlvbiBBbmUoKXt0aGlzLmE9dShJZSgobjEoKSxpVikpLDE5KS5hLHRoaXMuYz1adCh2ZShJZShzVikpKSx0aGlzLmI9WnQodmUoSWUoVXV0KSkpfWZ1bmN0aW9uIExuZSgpe0xuZT1YLHU0ZT1RcigoZnkoKSx1dChvdCh2bywxKSxvZSw5MywwLFtDZixKMCxTZixMZixsMCxHaCxRbCxBZixWaF0pKSl9ZnVuY3Rpb24gTW5lKCl7TW5lPVgsVWdlPVFyKChncSgpLHV0KG90KFk3dCwxKSxvZSwyNTAsMCxbSzd0LFY3dCxHN3QsSDd0LFB1dCxXN3QsVTd0LHE3dCx6N3RdKSkpfWZ1bmN0aW9uIHR3KCl7dHc9WCxhTz1uZXcgelIoIlVQIiwwKSxzTz1uZXcgelIoa290LDEpLFJ1dD1uZXcgelIoZngsMiksanV0PW5ldyB6UihkeCwzKX1mdW5jdGlvbiB1eXQoKXt1eXQ9WCxKX3Q9KGQkKCksSWh0KSxKbWU9bmV3IHZuKE9rdCxKX3QpLFpfdD0odiQoKSxPaHQpLFptZT1uZXcgdm4oTmt0LFpfdCl9ZnVuY3Rpb24gRzgoKXtHOD1YLERsdD1uZXcgQWV0KCJPTkVfU0lERUQiLDApLElsdD1uZXcgQWV0KCJUV09fU0lERUQiLDEpLG1PPW5ldyBBZXQoIk9GRiIsMil9ZnVuY3Rpb24gRG5lKHQpe3Qucj1uZXcgUXMsdC53PW5ldyBRcyx0LnQ9bmV3IGxlLHQuaT1uZXcgbGUsdC5kPW5ldyBRcyx0LmE9bmV3IFM2LHQuYz1uZXcgQXJ9ZnVuY3Rpb24gTEQodCl7dGhpcy5uPW5ldyBsZSx0aGlzLmU9bmV3IGNzLHRoaXMuaj1uZXcgY3MsdGhpcy5rPW5ldyBsZSx0aGlzLmY9bmV3IGxlLHRoaXMucD10fWZ1bmN0aW9uIEluZSh0LGUpe3QuYyYmKFB1ZSh0LGUsITApLHlzKG5ldyBrbihudWxsLG5ldyBUbihlLDE2KSksbmV3IHF0dCh0KSkpLFB1ZSh0LGUsITEpfWZ1bmN0aW9uIHVjbih0LGUsbil7cmV0dXJuIHQ9PShadigpLGRHKT9uZXcgblE6cGwoZSwxKSE9MD9uZXcgZWJ0KG4ubGVuZ3RoKTpuZXcgbkh0KG4ubGVuZ3RoKX1mdW5jdGlvbiBCbyh0LGUpe3ZhciBuO3JldHVybiBlJiYobj1lLlZlKCksbi5kYygpfHwodC5xP0dfKHQucSxuKTp0LnE9bmV3IFZHdChuKSkpLHR9ZnVuY3Rpb24gT25lKHQsZSl7dmFyIG47cmV0dXJuIG49dC5hLmdldChlKSxuPT09dm9pZCAwPysrdC5kOihPUWUodC5hLGUpLC0tdC5jLGEkKHQuYikpLG59ZnVuY3Rpb24gbGNuKHQsZSl7dmFyIG4scixzO3JldHVybiBuPWUucC10LnAsbj09MD8ocj10LmYuYSp0LmYuYixzPWUuZi5hKmUuZi5iLGpzKHIscykpOm59ZnVuY3Rpb24gaGNuKHQsZSl7dmFyIG4scjtyZXR1cm4gbj10LmYuYy5sZW5ndGgscj1lLmYuYy5sZW5ndGgsbjxyPy0xOm49PXI/MDoxfWZ1bmN0aW9uIGZjbih0KXtyZXR1cm4gdC5iLmMubGVuZ3RoIT0wJiZ1KFBlKHQuYiwwKSw3MCkuYT91KFBlKHQuYiwwKSw3MCkuYTpzcnQodCl9ZnVuY3Rpb24gZGNuKHQpe3ZhciBlO2lmKHQpe2lmKGU9dCxlLmRjKCkpdGhyb3cgbnQobmV3IHZjKTtyZXR1cm4gZS5YYihlLmdjKCktMSl9cmV0dXJuIE5RdCh0LktjKCkpfWZ1bmN0aW9uIE5uZSh0KXt2YXIgZTtyZXR1cm4gX2ModCwwKTwwJiYodD1BdnQodCkpLGU9TXIoUnAodCwzMikpLDY0LShlIT0wP2xJKGUpOmxJKE1yKHQpKSszMil9ZnVuY3Rpb24gbHl0KHQpe3ZhciBlO3JldHVybiBlPXUoSyh0LChhZSgpLGdjKSksNjEpLHQuaz09KEduKCksSXMpJiYoZT09KGJlKCksQm4pfHxlPT1Ibil9ZnVuY3Rpb24gZ2NuKHQsZSxuKXt2YXIgcixzO3M9dShLKHQsKHhlKCksT28pKSw3NCkscyYmKHI9bmV3IGp1LE1pdChyLDAscyksSm0ocixuKSxLYShlLHIpKX1mdW5jdGlvbiBmeih0LGUsbil7dmFyIHIscyxvLGg7aD0kYSh0KSxyPWguZCxzPWguYyxvPXQubixlJiYoby5hPW8uYS1yLmItcy5hKSxuJiYoby5iPW8uYi1yLmQtcy5iKX1mdW5jdGlvbiBwY24odCxlKXt2YXIgbixyO3JldHVybiBuPXQuaixyPWUuaixuIT1yP24uZy1yLmc6dC5wPT1lLnA/MDpuPT0oYmUoKSxPbik/dC5wLWUucDplLnAtdC5wfWZ1bmN0aW9uIGJjbih0KXt2YXIgZSxuO2Zvcih6NG4odCksbj1uZXcgUyh0LmQpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShRKG4pLDEwMSksZS5pJiZYMG4oZSl9ZnVuY3Rpb24gV18odCxlLG4scixzKXtscyh0LmNbZS5nXSxuLmcsciksbHModC5jW24uZ10sZS5nLHIpLGxzKHQuYltlLmddLG4uZyxzKSxscyh0LmJbbi5nXSxlLmcscyl9ZnVuY3Rpb24gdmNuKHQsZSxuLHIpe3Uobi5iLDY1KSx1KG4uYiw2NSksdShyLmIsNjUpLHUoci5iLDY1KSx1KHIuYiw2NSksX3Uoci5hLG5ldyB2dnQodCxlLHIpKX1mdW5jdGlvbiB3Y24odCxlKXt0LmQ9PShmbygpLEhoKXx8dC5kPT1aMD91KGUuYSw1NykuYy5GYyh1KGUuYiw1NykpOnUoZS5iLDU3KS5jLkZjKHUoZS5hLDU3KSl9ZnVuY3Rpb24gZ2l0KHQsZSxuLHIpe3JldHVybiBuPT0xPyghdC5uJiYodC5uPW5ldyBoZShZbyx0LDEsNykpLHphKHQubixlLHIpKTpNNHQodCxlLG4scil9ZnVuY3Rpb24gTUQodCxlKXt2YXIgbixyO3JldHVybiByPShuPW5ldyBSTCxuKSx0dShyLGUpLE9yKCghdC5BJiYodC5BPW5ldyAkdShwdSx0LDcpKSx0LkEpLHIpLHJ9ZnVuY3Rpb24gbWNuKHQsZSxuKXt2YXIgcixzLG8saDtyZXR1cm4gbz1udWxsLGg9ZSxzPVV2KGgsVWN0KSxyPW5ldyBmR3QodCxuKSxvPShSMW4oci5hLHIuYixzKSxzKSxvfWZ1bmN0aW9uIHBpdCh0KXt2YXIgZTtyZXR1cm4oIXQuYXx8ISh0LkJiJjEpJiZ0LmEua2goKSkmJihlPU9oKHQpLF90KGUsMTQ4KSYmKHQuYT11KGUsMTQ4KSkpLHQuYX1mdW5jdGlvbiBERCh0LGUpe3ZhciBuLHI7Zm9yKEluKGUpLHI9ZS5LYygpO3IuT2IoKTspaWYobj1yLlBiKCksIXQuSGMobikpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24geWNuKHQsZSl7dmFyIG4scixzO3JldHVybiBuPXQubCtlLmwscj10Lm0rZS5tKyhuPj4yMikscz10LmgrZS5oKyhyPj4yMiksY3UobiZ2bCxyJnZsLHMmVzApfWZ1bmN0aW9uIFBuZSh0LGUpe3ZhciBuLHIscztyZXR1cm4gbj10LmwtZS5sLHI9dC5tLWUubSsobj4+MjIpLHM9dC5oLWUuaCsocj4+MjIpLGN1KG4mdmwsciZ2bCxzJlcwKX1mdW5jdGlvbiBJRCh0KXt2YXIgZTtyZXR1cm4gdDwxMjg/KGU9KFhLdCgpLGU3dClbdF0sIWUmJihlPWU3dFt0XT1uZXcgdFIodCkpLGUpOm5ldyB0Uih0KX1mdW5jdGlvbiBycyh0KXt2YXIgZTtyZXR1cm4gX3QodCw3OCk/dDooZT10JiZ0Ll9famF2YSRleGNlcHRpb24sZXx8KGU9bmV3IFRyZSh0KSx6enQoZSkpLGUpfWZ1bmN0aW9uIE9EKHQpe2lmKF90KHQsMTg2KSlyZXR1cm4gdSh0LDExOCk7aWYodClyZXR1cm4gbnVsbDt0aHJvdyBudChuZXcgbTYoTWRlKSl9ZnVuY3Rpb24gRm5lKHQsZSl7aWYoZT09bnVsbClyZXR1cm4hMTtmb3IoO3QuYSE9dC5iOylpZihTaShlLG16KHQpKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBoeXQodCl7cmV0dXJuIHQuYS5PYigpPyEwOnQuYSE9dC5kPyExOih0LmE9bmV3IEd3dCh0LmUuZiksdC5hLk9iKCkpfWZ1bmN0aW9uIFJzKHQsZSl7dmFyIG4scjtyZXR1cm4gbj1lLlBjKCkscj1uLmxlbmd0aCxyPT0wPyExOihUdnQodC5jLHQuYy5sZW5ndGgsbiksITApfWZ1bmN0aW9uIHhjbih0LGUsbil7dmFyIHIscztmb3Iocz1lLnZjKCkuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksNDIpLHQueWMoci5jZCgpLHIuZGQoKSxuKTtyZXR1cm4gdH1mdW5jdGlvbiBCbmUodCxlKXt2YXIgbixyO2ZvcihyPW5ldyBTKHQuYik7ci5hPHIuYy5jLmxlbmd0aDspbj11KFEociksNzApLGVlKG4sKGFlKCksRHgpLGUpfWZ1bmN0aW9uIGtjbih0LGUsbil7dmFyIHIscztmb3Iocz1uZXcgUyh0LmIpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShRKHMpLDMzKSxrMShyLHIuaStlLHIuaituKX1mdW5jdGlvbiBSbmUodCxlKXtpZighdCl0aHJvdyBudChuZXcgUG4odkMoInZhbHVlIGFscmVhZHkgcHJlc2VudDogJXMiLHV0KG90KFFuLDEpLE1lLDEsNSxbZV0pKSkpfWZ1bmN0aW9uIGpuZSh0LGUpe3JldHVybiF0fHwhZXx8dD09ZT8hMTp4aWUodC5kLmMsZS5kLmMrZS5kLmIpJiZ4aWUoZS5kLmMsdC5kLmMrdC5kLmIpfWZ1bmN0aW9uIEVjbigpe3JldHVybiBfJCgpLHoxP25ldyBPcnQobnVsbCk6cW9lKFlvbigpLCJjb20uZ29vZ2xlLmNvbW1vbi5iYXNlLlN0cmluZ3MiKX1mdW5jdGlvbiAkbmUodCxlKXt2YXIgbjtyZXR1cm4gbj1IZChlLmEuZ2MoKSkseXMoViQobmV3IGtuKG51bGwsbmV3IFRuKGUsMSkpLHQuaSksbmV3IHNHdCh0LG4pKSxufWZ1bmN0aW9uIHpuZSh0KXt2YXIgZSxuO3JldHVybiBuPShlPW5ldyBSTCxlKSx0dShuLCJUIiksT3IoKCF0LmQmJih0LmQ9bmV3ICR1KHB1LHQsMTEpKSx0LmQpLG4pLG59ZnVuY3Rpb24gZnl0KHQpe3ZhciBlLG4scixzO2ZvcihlPTEsbj0wLHM9dC5nYygpO248czsrK24pcj10LmtpKG4pLGU9MzEqZSsocj09bnVsbD8wOkppKHIpKTtyZXR1cm4gZX1mdW5jdGlvbiBxbmUodCxlLG4scil7dmFyIHM7cmV0dXJuIG9EKGUsdC5lLkhkKCkuZ2MoKSksb0Qobix0LmMuSGQoKS5nYygpKSxzPXQuYVtlXVtuXSxscyh0LmFbZV0sbixyKSxzfWZ1bmN0aW9uIHV0KHQsZSxuLHIscyl7cmV0dXJuIHMuZ209dCxzLmhtPWUscy5pbT1GdCxzLl9fZWxlbWVudFR5cGVJZCQ9bixzLl9fZWxlbWVudFR5cGVDYXRlZ29yeSQ9cixzfWZ1bmN0aW9uIFRjbih0LGUsbixyLHMpe3JldHVybiB4NCgpLGIuTWF0aC5taW4oWmxlKHQsZSxuLHIscyksWmxlKG4scix0LGUsbWoobmV3IFJlKHMuYSxzLmIpKSkpfWZ1bmN0aW9uIGR6KCl7ZHo9WCxjbHQ9bmV3IEhSKEswLDApLENWPW5ldyBIUihhMWUsMSksU1Y9bmV3IEhSKG8xZSwyKSx2Tz1uZXcgSFIoIkJPVEgiLDMpfWZ1bmN0aW9uIE8xKCl7TzE9WCxfeD1uZXcgVlIoSTcsMCksbkU9bmV3IFZSKGZ4LDEpLHJFPW5ldyBWUihkeCwyKSx1bHQ9bmV3IFZSKCJUT1AiLDMpfWZ1bmN0aW9uIFU4KCl7VTg9WCxDdz1uZXcgcVIoIlExIiwwKSxJeT1uZXcgcVIoIlE0IiwxKSxEeT1uZXcgcVIoIlEyIiwyKSwkND1uZXcgcVIoIlEzIiwzKX1mdW5jdGlvbiBneigpe2d6PVgseGh0PW5ldyBGZXQoIk9GRiIsMCksbUU9bmV3IEZldCgiU0lOR0xFX0VER0UiLDEpLEd5PW5ldyBGZXQoIk1VTFRJX0VER0UiLDIpfWZ1bmN0aW9uIE5EKCl7TkQ9WCxPRz1uZXcgSGJ0KCJNSU5JTVVNX1NQQU5OSU5HX1RSRUUiLDApLGRTdD1uZXcgSGJ0KCJNQVhJTVVNX1NQQU5OSU5HX1RSRUUiLDEpfWZ1bmN0aW9uIFg2KCl7WDY9WCxTM2U9bmV3IHBaLEMzZT1uZXcgZFp9ZnVuY3Rpb24gZHl0KHQpe3ZhciBlLG4scjtmb3IoZT1uZXcgY3Mscj1zaSh0LmQsMCk7ci5iIT1yLmQuYzspbj11KGlpKHIpLDE4OCksYWkoZSxuLmMpO3JldHVybiBlfWZ1bmN0aW9uIGJpdCh0KXt2YXIgZSxuLHIscztmb3Iocz1uZXcgbGUscj10LktjKCk7ci5PYigpOyluPXUoci5QYigpLDMzKSxlPWd5KG4pLFJzKHMsZSk7cmV0dXJuIHN9ZnVuY3Rpb24gX2NuKHQpe3ZhciBlO2R3KHQsITApLGU9VmcsZWEodCwoeGUoKSxiRSkpJiYoZSs9dShLKHQsYkUpLDE5KS5hKSxlZSh0LGJFLGRlKGUpKX1mdW5jdGlvbiBIbmUodCxlLG4pe3ZhciByO25sKHQuYSksX3Uobi5pLG5ldyBSJHQodCkpLHI9bmV3IGNqKHUodHIodC5hLGUuYiksNjUpKSxNaWUodCxyLGUpLG4uZj1yfWZ1bmN0aW9uIENjbih0LGUpe3ZhciBuLHI7cmV0dXJuIG49dC5jLHI9ZS5lW3QucF0scjxuLmEuYy5sZW5ndGgtMT91KFBlKG4uYSxyKzEpLDEwKTpudWxsfWZ1bmN0aW9uIFNjbih0LGUpe3ZhciBuLHI7Zm9yKHIkKGUsInByZWRpY2F0ZSIpLHI9MDt0Lk9iKCk7cisrKWlmKG49dC5QYigpLGUuTGIobikpcmV0dXJuIHI7cmV0dXJuLTF9ZnVuY3Rpb24gUTYodCxlKXt2YXIgbixyO2lmKHI9MCx0PDY0JiZ0PD1lKWZvcihlPWU8NjQ/ZTo2MyxuPXQ7bjw9ZTtuKyspcj1BMShyLE0wKDEsbikpO3JldHVybiByfWZ1bmN0aW9uIGd5dCh0KXtwbigpO3ZhciBlLG4scjtmb3Iocj0wLG49dC5LYygpO24uT2IoKTspZT1uLlBiKCkscj1yKyhlIT1udWxsP0ppKGUpOjApLHI9cnwwO3JldHVybiByfWZ1bmN0aW9uIHB5dCh0KXt2YXIgZSxuO3JldHVybiBuPShUdigpLGU9bmV3IGlkLGUpLHQmJk9yKCghdC5hJiYodC5hPW5ldyBoZSh1cyx0LDYsNikpLHQuYSksbiksbn1mdW5jdGlvbiBBY24odCl7dmFyIGU7cmV0dXJuIGU9bmV3IGt0LGUuYT10LGUuYj1QY24odCksZS5jPU50KExlLHJlLDIsMiw2LDEpLGUuY1swXT1pbmUodCksZS5jWzFdPWluZSh0KSxlfWZ1bmN0aW9uIGJ5dCh0LGUpe3N3aXRjaChlKXtjYXNlIDA6IXQubyYmKHQubz1uZXcgSWwoKG51KCksX2IpLCR3LHQsMCkpLHQuby5jLiRiKCk7cmV0dXJufUZzdCh0LGUpfWZ1bmN0aW9uIFBEKHQsZSxuKXtzd2l0Y2gobi5nKXtjYXNlIDI6dC5iPWU7YnJlYWs7Y2FzZSAxOnQuYz1lO2JyZWFrO2Nhc2UgNDp0LmQ9ZTticmVhaztjYXNlIDM6dC5hPWV9fWZ1bmN0aW9uIFZuZSh0KXtzd2l0Y2godC5nKXtjYXNlIDE6cmV0dXJuIHliO2Nhc2UgMjpyZXR1cm4gdTA7Y2FzZSAzOnJldHVybiBRTztkZWZhdWx0OnJldHVybiBaT319ZnVuY3Rpb24gTGNuKHQpe3N3aXRjaCh1KEsodCwoeGUoKSxkdSkpLDE2MykuZyl7Y2FzZSAyOmNhc2UgNDpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiBHbmUoKXtHbmU9WCx3MmU9UXIoKGdvKCksdXQob3QoTWx0LDEpLG9lLDI1NiwwLFtSVix5aCx2UyxqVixsRSxVNCx3UyxjRSx1RSwkVl0pKSl9ZnVuY3Rpb24gVW5lKCl7VW5lPVgsbTRlPVFyKChibCgpLHV0KG90KENBdCwxKSxvZSwyNTksMCxbQUUsaU4sR0csZUEsVUcsS0csV0csbWZ0LHJOXSkpKX1mdW5jdGlvbiBXbmUoKXtXbmU9WCxkeWU9RWkoYXcoYXcoT1IoRWkobmV3IFpzLChvNygpLFBTKSwoZkMoKSx3RykpLFBPKSxfaHQpLENodCksRlMsU2h0KX1mdW5jdGlvbiBoMigpe2gyPVgsRWx0PW5ldyBDZXQoSzAsMCksb0U9bmV3IENldCgiSU5DT01JTkdfT05MWSIsMSksRzQ9bmV3IENldCgiT1VUR09JTkdfT05MWSIsMil9ZnVuY3Rpb24gdml0KCl7dml0PVgsX3V0PXtib29sZWFuOmZZZSxudW1iZXI6eEtlLHN0cmluZzprS2Usb2JqZWN0OmFvZSxmdW5jdGlvbjphb2UsdW5kZWZpbmVkOmVLZX19ZnVuY3Rpb24gS25lKHQsZSl7Q2oodD49MCwiTmVnYXRpdmUgaW5pdGlhbCBjYXBhY2l0eSIpLENqKGU+PTAsIk5vbi1wb3NpdGl2ZSBsb2FkIGZhY3RvciIpLG5sKHRoaXMpfWZ1bmN0aW9uIHdpdCh0LGUsbil7cmV0dXJuIHQ+PTEyOD8hMTp0PDY0P2FfKEdzKE0wKDEsdCksbiksMCk6YV8oR3MoTTAoMSx0LTY0KSxlKSwwKX1mdW5jdGlvbiBNY24odCxlKXtyZXR1cm4hdHx8IWV8fHQ9PWU/ITE6cncodC5iLmMsZS5iLmMrZS5iLmIpPDAmJnJ3KGUuYi5jLHQuYi5jK3QuYi5iKTwwfWZ1bmN0aW9uIFluZSh0KXt2YXIgZSxuLHI7cmV0dXJuIG49dC5uLHI9dC5vLGU9dC5kLG5ldyBjaChuLmEtZS5iLG4uYi1lLmQsci5hKyhlLmIrZS5jKSxyLmIrKGUuZCtlLmEpKX1mdW5jdGlvbiBEY24odCl7dmFyIGUsbixyLHM7Zm9yKG49dC5hLHI9MCxzPW4ubGVuZ3RoO3I8czsrK3IpZT1uW3JdLGVyZSh0LGUsKGJlKCkseXIpKSxlcmUodCxlLE9uKX1mdW5jdGlvbiBJY24odCl7dmFyIGUsbixyLHM7Zm9yKGU9KHQuaj09bnVsbCYmKHQuaj0oazgoKSxzPVR1dC5jZSh0KSxWMW4ocykpKSx0LmopLG49MCxyPWUubGVuZ3RoO248cjsrK24pO31mdW5jdGlvbiBXOCh0KXt2YXIgZSxuLHI7cmV0dXJuIGU9fnQubCsxJnZsLG49fnQubSsoZT09MD8xOjApJnZsLHI9fnQuaCsoZT09MCYmbj09MD8xOjApJlcwLGN1KGUsbixyKX1mdW5jdGlvbiBPY24odCxlKXt2YXIgbixyO3JldHVybiBuPXUodSh0cih0LmcsZS5hKSw0NikuYSw2NSkscj11KHUodHIodC5nLGUuYiksNDYpLmEsNjUpLG9sZShuLHIpfWZ1bmN0aW9uIHZ5dCh0LGUsbil7dmFyIHI7aWYocj10LmdjKCksZT5yKXRocm93IG50KG5ldyBqbShlLHIpKTtyZXR1cm4gdC5oaSgpJiYobj1mUXQodCxuKSksdC5WaChlLG4pfWZ1bmN0aW9uIEZEKHQsZSxuKXtyZXR1cm4gbj09bnVsbD8oIXQucSYmKHQucT1uZXcgQXIpLEc2KHQucSxlKSk6KCF0LnEmJih0LnE9bmV3IEFyKSxBaSh0LnEsZSxuKSksdH1mdW5jdGlvbiBlZSh0LGUsbil7cmV0dXJuIG49PW51bGw/KCF0LnEmJih0LnE9bmV3IEFyKSxHNih0LnEsZSkpOighdC5xJiYodC5xPW5ldyBBciksQWkodC5xLGUsbikpLHR9ZnVuY3Rpb24gWG5lKHQpe3ZhciBlLG47cmV0dXJuIG49bmV3IEMkLEJvKG4sdCksZWUobiwoVXAoKSxUeCksdCksZT1uZXcgQXIsUG1uKHQsbixlKSxvNG4odCxuLGUpLG59ZnVuY3Rpb24gTmNuKHQpe3g0KCk7dmFyIGUsbixyO2ZvcihuPU50KG5hLHJlLDgsMiwwLDEpLHI9MCxlPTA7ZTwyO2UrKylyKz0uNSxuW2VdPXBmbihyLHQpO3JldHVybiBufWZ1bmN0aW9uIFFuZSh0LGUpe3ZhciBuLHIscyxvO2ZvcihuPSExLHI9dC5hW2VdLmxlbmd0aCxvPTA7bzxyLTE7bysrKXM9bysxLG49bnxabG4odCxlLG8scyk7cmV0dXJuIG59ZnVuY3Rpb24gSzgodCxlLG4scixzKXt2YXIgbyxoO2ZvcihoPW47aDw9cztoKyspZm9yKG89ZTtvPD1yO28rKyloNCh0LG8saCl8fGJxKHQsbyxoLCEwLCExKX1mdW5jdGlvbiBabmUodCxlKXt0aGlzLmI9dCxIMy5jYWxsKHRoaXMsKHUoQXQoS3QoKHpwKCksQW4pLm8pLDEwKSwxOCksZS5pKSxlLmcpLHRoaXMuYT0oZGl0KCksQWZ0KX1mdW5jdGlvbiB3eXQodCxlKXt0aGlzLmM9dCx0aGlzLmQ9ZSx0aGlzLmI9dGhpcy5kL3RoaXMuYy5jLkhkKCkuZ2MoKXwwLHRoaXMuYT10aGlzLmQldGhpcy5jLmMuSGQoKS5nYygpfWZ1bmN0aW9uIG15dCgpe3RoaXMubz1udWxsLHRoaXMuaz1udWxsLHRoaXMuaj1udWxsLHRoaXMuZD1udWxsLHRoaXMuYj1udWxsLHRoaXMubj1udWxsLHRoaXMuYT1udWxsfWZ1bmN0aW9uIHl5dCh0LGUsbil7dGhpcy5xPW5ldyBiLkRhdGUsdGhpcy5xLnNldEZ1bGxZZWFyKHQraWIsZSxuKSx0aGlzLnEuc2V0SG91cnMoMCwwLDAsMCkseUModGhpcywwKX1mdW5jdGlvbiBqMCgpe2owPVgsYmI9bmV3IERldChLMCwwKSxJX3Q9bmV3IERldCgiTk9ERVNfQU5EX0VER0VTIiwxKSxnaHQ9bmV3IERldCgiUFJFRkVSX0VER0VTIiwyKX1mdW5jdGlvbiBQY24odCl7dmFyIGU7cmV0dXJuIHQ9PTA/IkV0Yy9HTVQiOih0PDA/KHQ9LXQsZT0iRXRjL0dNVC0iKTplPSJFdGMvR01UKyIsZSskdGUodCkpfWZ1bmN0aW9uIHh5dCh0KXt2YXIgZTtpZih0PDApcmV0dXJuIE9hO2lmKHQ9PTApcmV0dXJuIDA7Zm9yKGU9QUM7IShlJnQpO2U+Pj0xKTtyZXR1cm4gZX1mdW5jdGlvbiBKbmUodCl7dmFyIGUsbjtyZXR1cm4gbj1sSSh0LmgpLG49PTMyPyhlPWxJKHQubSksZT09MzI/bEkodC5sKSszMjplKzIwLTEwKTpuLTEyfWZ1bmN0aW9uIEtfKHQpe3ZhciBlO3JldHVybiBlPXQuYVt0LmJdLGU9PW51bGw/bnVsbDoobHModC5hLHQuYixudWxsKSx0LmI9dC5iKzEmdC5hLmxlbmd0aC0xLGUpfWZ1bmN0aW9uIHRyZSh0KXt2YXIgZSxuO3JldHVybiBlPXQudC10LmtbdC5vLnBdKnQuZCt0LmpbdC5vLnBdPnQuZixuPXQudSt0LmVbdC5vLnBdKnQuZD50LmYqdC5zKnQuZCxlfHxufWZ1bmN0aW9uIHB6KHQsZSxuKXt2YXIgcixzO3JldHVybiByPW5ldyBxcnQoZSxuKSxzPW5ldyBWZSx0LmI9R2NlKHQsdC5iLHIscykscy5ifHwrK3QuYyx0LmIuYj0hMSxzLmR9ZnVuY3Rpb24gZXJlKHQsZSxuKXt2YXIgcixzLG8saDtmb3IoaD1RXyhlLG4pLG89MCxzPWguS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMTEpLEFpKHQuYyxyLGRlKG8rKykpfWZ1bmN0aW9uIEtwKHQpe3ZhciBlLG47Zm9yKG49bmV3IFModC5hLmIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShRKG4pLDgxKSxlLmcuYz0tZS5nLmMtZS5nLmI7dXEodCl9ZnVuY3Rpb24gWXAodCl7dmFyIGUsbjtmb3Iobj1uZXcgUyh0LmEuYik7bi5hPG4uYy5jLmxlbmd0aDspZT11KFEobiksNTcpLGUuZC5jPS1lLmQuYy1lLmQuYjtUNXQodCl9ZnVuY3Rpb24ga3l0KHQpe3ZhciBlO3JldHVybighdC5jfHwhKHQuQmImMSkmJnQuYy5EYiY2NCkmJihlPU9oKHQpLF90KGUsODgpJiYodC5jPXUoZSwyNikpKSx0LmN9ZnVuY3Rpb24gbWl0KHQpe3ZhciBlLG4scjtlPX50LmwrMSZ2bCxuPX50Lm0rKGU9PTA/MTowKSZ2bCxyPX50LmgrKGU9PTAmJm49PTA/MTowKSZXMCx0Lmw9ZSx0Lm09bix0Lmg9cn1mdW5jdGlvbiBuYyh0KXt2YXIgZSxuLHIscyxvO2ZvcihlPW5ldyBEYSxyPXQscz0wLG89ci5sZW5ndGg7czxvOysrcyluPXJbc10sZS5hKz1uLmEsZS5iKz1uLmI7cmV0dXJuIGV9ZnVuY3Rpb24gRXl0KHQsZSl7cG4oKTt2YXIgbixyLHMsbyxoO2ZvcihoPSExLHI9ZSxzPTAsbz1yLmxlbmd0aDtzPG87KytzKW49cltzXSxoPWh8dC5GYyhuKTtyZXR1cm4gaH1mdW5jdGlvbiBpNCh0KXt4NCgpO3ZhciBlLG47Zm9yKG49LTE3OTc2OTMxMzQ4NjIzMTU3ZTI5MixlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXT5uJiYobj10W2VdKTtyZXR1cm4gbn1mdW5jdGlvbiBucmUodCxlLG4pe3ZhciByO3JldHVybiByPW5ldyBsZSxBNXQodCxlLHIsKGJlKCksSG4pLCEwLCExKSxBNXQodCxuLHIsQm4sITEsITEpLHJ9ZnVuY3Rpb24geWl0KHQsZSxuKXt2YXIgcixzLG8saDtyZXR1cm4gbz1udWxsLGg9ZSxzPVV2KGgsImxhYmVscyIpLHI9bmV3IGtHdCh0LG4pLG89KEpwbihyLmEsci5iLHMpLHMpLG99ZnVuY3Rpb24gRmNuKHQsZSxuLHIpe3ZhciBzO3JldHVybiBzPXA1dCh0LGUsbixyKSwhcyYmKHM9QnVuKHQsbixyKSxzJiYhVDQodCxlLHMpKT9udWxsOnN9ZnVuY3Rpb24gQmNuKHQsZSxuLHIpe3ZhciBzO3JldHVybiBzPWI1dCh0LGUsbixyKSwhcyYmKHM9Qml0KHQsbixyKSxzJiYhVDQodCxlLHMpKT9udWxsOnN9ZnVuY3Rpb24gcnJlKHQsZSl7dmFyIG47Zm9yKG49MDtuPHQuYS5hLmxlbmd0aDtuKyspaWYoIXUoSkt0KHQuYSxuKSwxNjkpLkxiKGUpKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIFJjbih0LGUsbil7aWYoRHIoZSksbi5PYigpKWZvcihLYnQoZSxHWXQobi5QYigpKSk7bi5PYigpOylLYnQoZSx0LmEpLEtidChlLEdZdChuLlBiKCkpKTtyZXR1cm4gZX1mdW5jdGlvbiBUeXQodCl7cG4oKTt2YXIgZSxuLHI7Zm9yKHI9MSxuPXQuS2MoKTtuLk9iKCk7KWU9bi5QYigpLHI9MzEqcisoZSE9bnVsbD9KaShlKTowKSxyPXJ8MDtyZXR1cm4gcn1mdW5jdGlvbiBqY24odCxlLG4scixzKXt2YXIgbztyZXR1cm4gbz1jNXQodCxlKSxuJiZtaXQobykscyYmKHQ9eGZuKHQsZSkscj91Yj1XOCh0KTp1Yj1jdSh0LmwsdC5tLHQuaCkpLG99ZnVuY3Rpb24gJGNuKHQsZSl7dmFyIG47dHJ5e2UuVmQoKX1jYXRjaChyKXtpZihyPXJzKHIpLF90KHIsNzgpKW49cix0LmNbdC5jLmxlbmd0aF09bjtlbHNlIHRocm93IG50KHIpfX1mdW5jdGlvbiBpcmUodCxlLG4pe3ZhciByLHM7cmV0dXJuIF90KGUsMTQ0KSYmbj8ocj11KGUsMTQ0KSxzPW4sdC5hW3IuYl1bcy5iXSt0LmFbcy5iXVtyLmJdKTowfWZ1bmN0aW9uIF95dCh0LGUpe3N3aXRjaChlKXtjYXNlIDc6cmV0dXJuISF0LmUmJnQuZS5pIT0wO2Nhc2UgODpyZXR1cm4hIXQuZCYmdC5kLmkhPTB9cmV0dXJuIHUzdCh0LGUpfWZ1bmN0aW9uIHpjbih0LGUpe3N3aXRjaChlLmcpe2Nhc2UgMDpfdCh0LmIsNjMxKXx8KHQuYj1uZXcgQW5lKTticmVhaztjYXNlIDE6X3QodC5iLDYzMil8fCh0LmI9bmV3IExLdCl9fWZ1bmN0aW9uIHFjbih0LGUpe2Zvcig7dC5nPT1udWxsJiYhdC5jP093dCh0KTp0Lmc9PW51bGx8fHQuaSE9MCYmdSh0LmdbdC5pLTFdLDQ3KS5PYigpOylJWWUoZSxhcSh0KSl9ZnVuY3Rpb24gc3JlKHQsZSxuKXt0Lmc9QnN0KHQsZSwoYmUoKSxIbiksdC5iKSx0LmQ9QnN0KHQsbixIbix0LmIpLCEodC5nLmM9PTB8fHQuZC5jPT0wKSYmVGFlKHQpfWZ1bmN0aW9uIGFyZSh0LGUsbil7dC5nPUJzdCh0LGUsKGJlKCksQm4pLHQuaiksdC5kPUJzdCh0LG4sQm4sdC5qKSwhKHQuZy5jPT0wfHx0LmQuYz09MCkmJlRhZSh0KX1mdW5jdGlvbiBIY24odCxlLG4pe3JldHVybiFqVChXaShuZXcga24obnVsbCxuZXcgVG4odC5jLDE2KSksbmV3IHRlKG5ldyBvR3QoZSxuKSkpKS5zZCgoWWIoKSxRNykpfWZ1bmN0aW9uIHhpdCh0KXt2YXIgZTtyZXR1cm4gcXAodCksZT1uZXcgTGksdC5hLnNkKGUpPyhvOCgpLG5ldyBnUihJbihlLmEpKSk6KG84KCksbzgoKSxXSCl9ZnVuY3Rpb24gQ3l0KHQpe3ZhciBlO3JldHVybiB0LmI8PTA/ITE6KGU9dWQoIk1MeWRoSG1zU0RrSyIsTHUoVGEodC5jLDApKSksZT4xfHxlPj0wJiZ0LmI8Myl9ZnVuY3Rpb24gQkQodCl7dmFyIGUsbixyO2ZvcihlPW5ldyBqdSxyPXNpKHQsMCk7ci5iIT1yLmQuYzspbj11KGlpKHIpLDgpLHU4KGUsMCxuZXcgU28obikpO3JldHVybiBlfWZ1bmN0aW9uIGYyKHQpe3ZhciBlLG47Zm9yKG49bmV3IFModC5hLmIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShRKG4pLDgxKSxlLmYuJGIoKTt2S2UodC5iLHQpLEljZSh0KX1mdW5jdGlvbiBKaSh0KXtyZXR1cm4gaGEodCk/emcodCk6Tm0odCk/czgodCk6T20odCk/KEluKHQpLHQ/MTIzMToxMjM3KTpLdnQodCk/dC5IYigpOkh2dCh0KT9Edih0KTpTd3QodCl9ZnVuY3Rpb24gZGwodCl7cmV0dXJuIGhhKHQpP0xlOk5tKHQpP3dhOk9tKHQpP1dzOkt2dCh0KXx8SHZ0KHQpP3QuZ206dC5nbXx8QXJyYXkuaXNBcnJheSh0KSYmb3QoZ2dlLDEpfHxnZ2V9ZnVuY3Rpb24gb3JlKHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMDpyZXR1cm4gbmV3IGZaO2RlZmF1bHQ6dGhyb3cgbnQobmV3IFBuKHBIKyh0LmYhPW51bGw/dC5mOiIiK3QuZykpKX19ZnVuY3Rpb24gY3JlKHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMDpyZXR1cm4gbmV3IGhaO2RlZmF1bHQ6dGhyb3cgbnQobmV3IFBuKHBIKyh0LmYhPW51bGw/dC5mOiIiK3QuZykpKX19ZnVuY3Rpb24gU3l0KHQsZSxuKXtzd2l0Y2goZSl7Y2FzZSAwOiF0Lm8mJih0Lm89bmV3IElsKChudSgpLF9iKSwkdyx0LDApKSxseih0Lm8sbik7cmV0dXJufXpzdCh0LGUsbil9ZnVuY3Rpb24ga2l0KHQsZSxuKXt0aGlzLmc9dCx0aGlzLmU9bmV3IERhLHRoaXMuZj1uZXcgRGEsdGhpcy5kPW5ldyBjcyx0aGlzLmI9bmV3IGNzLHRoaXMuYT1lLHRoaXMuYz1ufWZ1bmN0aW9uIEVpdCh0LGUsbixyKXt0aGlzLmI9bmV3IGxlLHRoaXMubj1uZXcgbGUsdGhpcy5pPXIsdGhpcy5qPW4sdGhpcy5zPXQsdGhpcy50PWUsdGhpcy5yPTAsdGhpcy5kPTB9ZnVuY3Rpb24gZDIodCl7dGhpcy5lPXQsdGhpcy5kPW5ldyBlbXQodGhpcy5lLmcpLHRoaXMuYT10aGlzLmQsdGhpcy5iPWh5dCh0aGlzKSx0aGlzLiRtb2RDb3VudD10LiRtb2RDb3VudH1mdW5jdGlvbiBWY24odCl7Zm9yKDshdC5kfHwhdC5kLk9iKCk7KWlmKHQuYiYmIU5UKHQuYikpdC5kPXUoUDYodC5iKSw0Nyk7ZWxzZSByZXR1cm4gbnVsbDtyZXR1cm4gdC5kfWZ1bmN0aW9uIEdjbih0KXtyZXR1cm4gdWUodC5jLChYNigpLFMzZSkpLEJtdCh0LmEsWnQodmUoSWUoKFdpdCgpLG9HKSkpKSk/bmV3IFJaOm5ldyBWJHQodCl9ZnVuY3Rpb24gQXl0KHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMTpyZXR1cm4gQzFlO2RlZmF1bHQ6Y2FzZSAyOnJldHVybiAwO2Nhc2UgMzpyZXR1cm4gSW90O2Nhc2UgNDpyZXR1cm4gUzFlfX1mdW5jdGlvbiBVY24oKXt5aSgpO3ZhciB0O3JldHVybiBOZnR8fCh0PWVRZShuYigiTSIsITApKSx0PUJqKG5iKCJNIiwhMSksdCksTmZ0PXQsTmZ0KX1mdW5jdGlvbiBMeXQodCxlKXt2YXIgbixyLHM7Zm9yKHM9dC5iO3M7KXtpZihuPXQuYS51ZShlLHMuZCksbj09MClyZXR1cm4gcztyPW48MD8wOjEscz1zLmFbcl19cmV0dXJuIG51bGx9ZnVuY3Rpb24gV2NuKHQsZSxuKXt2YXIgcixzO3I9KEZuKCksISFYYnQobikpLHM9dShlLnhjKHIpLDE1KSxzfHwocz1uZXcgbGUsZS56YyhyLHMpKSxzLkZjKG4pfWZ1bmN0aW9uIEtjbih0LGUpe3ZhciBuLHI7cmV0dXJuIG49dSh6ZSh0LChYc3QoKSxSTykpLDE5KS5hLHI9dSh6ZShlLFJPKSwxOSkuYSxuPT1yfHxuPHI/LTE6bj5yPzE6MH1mdW5jdGlvbiBNeXQodCxlKXtyZXR1cm4gU2NlKHQsZSk/KGNuKHQuYix1KEsoZSwoYWUoKSxOeSkpLDIxKSxlKSxhaSh0LmEsZSksITApOiExfWZ1bmN0aW9uIFljbih0KXt2YXIgZSxuO2U9dShLKHQsKGFlKCksc2wpKSwxMCksZSYmKG49ZS5jLEV1KG4uYSxlKSxuLmEuYy5sZW5ndGg9PTAmJkV1KCRhKGUpLmIsbikpfWZ1bmN0aW9uIHVyZSh0KXtyZXR1cm4gejE/TnQoT2dlLGhmZSw1NzIsMCwwLDEpOnUoUDEodC5hLE50KE9nZSxoZmUsNTcyLHQuYS5jLmxlbmd0aCwwLDEpKSw4NDIpfWZ1bmN0aW9uIFhjbih0LGUsbixyKXtyZXR1cm4gUWooKSxuZXcgdGV0KHV0KG90KEkyLDEpLElxLDQyLDAsWyhkc3QodCxlKSxuZXcgQ3YodCxlKSksKGRzdChuLHIpLG5ldyBDdihuLHIpKV0pKX1mdW5jdGlvbiBzNCh0LGUsbil7dmFyIHIscztyZXR1cm4gcz0ocj1uZXcgWXR0LHIpLGtvKHMsZSxuKSxPcigoIXQucSYmKHQucT1uZXcgaGUoWWgsdCwxMSwxMCkpLHQucSkscyksc31mdW5jdGlvbiBUaXQodCl7dmFyIGUsbixyLHM7Zm9yKHM9a1llKE80ZSx0KSxuPXMubGVuZ3RoLHI9TnQoTGUscmUsMixuLDYsMSksZT0wO2U8bjsrK2UpcltlXT1zW2VdO3JldHVybiByfWZ1bmN0aW9uIGE0KHQsZSl7dmFyIG4scixzLG8saDtmb3Iocj1lLHM9MCxvPXIubGVuZ3RoO3M8bzsrK3Mpbj1yW3NdLGg9bmV3IFFZdCh0KSxuLlFlKGgpLHR5bihoKTtubCh0LmYpfWZ1bmN0aW9uIF9pdCh0LGUpe3ZhciBuO3JldHVybiBlPT09dD8hMDpfdChlLDIyNCk/KG49dShlLDIyNCksU2kodC5aYigpLG4uWmIoKSkpOiExfWZ1bmN0aW9uIER5dCh0LGUpe3ZhciBuO2UqMisxPj10LmIuYy5sZW5ndGh8fChEeXQodCwyKmUrMSksbj0yKmUrMixuPHQuYi5jLmxlbmd0aCYmRHl0KHQsbiksdW9lKHQsZSkpfWZ1bmN0aW9uIGxyZSh0LGUsbil7dmFyIHIsczt0aGlzLmc9dCx0aGlzLmM9ZSx0aGlzLmE9dGhpcyx0aGlzLmQ9dGhpcyxzPVVlZShuKSxyPU50KGRnZSxMSSwzMzAscywwLDEpLHRoaXMuYj1yfWZ1bmN0aW9uIEl5dCh0LGUsbil7dmFyIHI7Zm9yKHI9bi0xO3I+PTAmJnRbcl09PT1lW3JdO3ItLSk7cmV0dXJuIHI8MD8wOmJldChHcyh0W3JdLHBvKSxHcyhlW3JdLHBvKSk/LTE6MX1mdW5jdGlvbiBRY24odCxlKXt2YXIgbixyO2ZvcihyPXNpKHQsMCk7ci5iIT1yLmQuYzspbj11KGlpKHIpLDIxNCksbi5lLmxlbmd0aD4wJiYoZS50ZChuKSxuLmkmJkd1bihuKSl9ZnVuY3Rpb24gQ2l0KHQsZSl7dmFyIG4scjtyZXR1cm4gcj11KE1uKHQuYSw0KSwxMjYpLG49TnQoQ2Z0LGV1dCw0MTUsZSwwLDEpLHIhPW51bGwmJlBjKHIsMCxuLDAsci5sZW5ndGgpLG59ZnVuY3Rpb24gaHJlKHQsZSl7dmFyIG47cmV0dXJuIG49bmV3IHJhdCgodC5mJjI1NikhPTAsdC5pLHQuYSx0LmQsKHQuZiYxNikhPTAsdC5qLHQuZyxlKSx0LmUhPW51bGx8fChuLmM9dCksbn1mdW5jdGlvbiBaY24odCxlKXt2YXIgbixyO2ZvcihyPXQuWmIoKS5DYygpLktjKCk7ci5PYigpOylpZihuPXUoci5QYigpLDE0KSxuLkhjKGUpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFNpdCh0LGUsbixyLHMpe3ZhciBvLGg7Zm9yKGg9bjtoPD1zO2grKylmb3Iobz1lO288PXI7bysrKWlmKGg0KHQsbyxoKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBmcmUodCxlLG4pe3ZhciByLHMsbyxoO2ZvcihJbihuKSxoPSExLG89dC5aYyhlKSxzPW4uS2MoKTtzLk9iKCk7KXI9cy5QYigpLG8uUmIociksaD0hMDtyZXR1cm4gaH1mdW5jdGlvbiBKY24odCxlKXt2YXIgbjtyZXR1cm4gdD09PWU/ITA6X3QoZSw4Myk/KG49dShlLDgzKSxPNHQoUHYodCksbi52YygpKSk6ITF9ZnVuY3Rpb24gZHJlKHQsZSxuKXt2YXIgcixzO2ZvcihzPW4uS2MoKTtzLk9iKCk7KWlmKHI9dShzLlBiKCksNDIpLHQucmUoZSxyLmRkKCkpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGdyZSh0LGUsbil7cmV0dXJuIHQuZFtlLnBdW24ucF18fChZaG4odCxlLG4pLHQuZFtlLnBdW24ucF09ITAsdC5kW24ucF1bZS5wXT0hMCksdC5hW2UucF1bbi5wXX1mdW5jdGlvbiBZOCh0LGUpe2lmKCF0LmFpKCkmJmU9PW51bGwpdGhyb3cgbnQobmV3IFBuKCJUaGUgJ25vIG51bGwnIGNvbnN0cmFpbnQgaXMgdmlvbGF0ZWQiKSk7cmV0dXJuIGV9ZnVuY3Rpb24gWDgodCxlKXt0LkQ9PW51bGwmJnQuQiE9bnVsbCYmKHQuRD10LkIsdC5CPW51bGwpLHNpdCh0LGU9PW51bGw/bnVsbDooSW4oZSksZSkpLHQuQyYmdC55ayhudWxsKX1mdW5jdGlvbiB0dW4odCxlKXt2YXIgbjtyZXR1cm4hdHx8dD09ZXx8IWVhKGUsKGFlKCksRHcpKT8hMToobj11KEsoZSwoYWUoKSxEdykpLDEwKSxuIT10KX1mdW5jdGlvbiBBaXQodCl7c3dpdGNoKHQuaSl7Y2FzZSAyOnJldHVybiEwO2Nhc2UgMTpyZXR1cm4hMTtjYXNlLTE6Kyt0LmM7ZGVmYXVsdDpyZXR1cm4gdC5wbCgpfX1mdW5jdGlvbiBwcmUodCl7c3dpdGNoKHQuaSl7Y2FzZS0yOnJldHVybiEwO2Nhc2UtMTpyZXR1cm4hMTtjYXNlIDE6LS10LmM7ZGVmYXVsdDpyZXR1cm4gdC5xbCgpfX1mdW5jdGlvbiBicmUodCl7c1F0LmNhbGwodGhpcywiVGhlIGdpdmVuIHN0cmluZyBkb2VzIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgZm9ybWF0IGZvciBpbmRpdmlkdWFsIHNwYWNpbmdzLiIsdCl9ZnVuY3Rpb24gT2woKXtPbD1YLHRoPW5ldyBaUigiRUxLIiwwKSxJQXQ9bmV3IFpSKCJKU09OIiwxKSxEQXQ9bmV3IFpSKCJET1QiLDIpLE9BdD1uZXcgWlIoIlNWRyIsMyl9ZnVuY3Rpb24gUkQoKXtSRD1YLF9HPW5ldyBqZXQoSzAsMCksZkN0PW5ldyBqZXQoIlJBRElBTF9DT01QQUNUSU9OIiwxKSxkQ3Q9bmV3IGpldCgiV0VER0VfQ09NUEFDVElPTiIsMil9ZnVuY3Rpb24gTjEoKXtOMT1YLFM3dD1uZXcgdmV0KCJDT05DVVJSRU5UIiwwKSxZbD1uZXcgdmV0KCJJREVOVElUWV9GSU5JU0giLDEpLEx5PW5ldyB2ZXQoIlVOT1JERVJFRCIsMil9ZnVuY3Rpb24gTGl0KCl7TGl0PVgsbkV0PShBUigpLCR1dCksZUV0PW5ldyB2bihRNnQsbkV0KSxEcGU9bmV3IHRzKFo2dCksSXBlPW5ldyB0cyhKNnQpLE9wZT1uZXcgdHModHh0KX1mdW5jdGlvbiBROCgpe1E4PVgscDl0PW5ldyBHNSxiOXQ9bmV3IEhZLEdiZT1uZXcgQUwsVmJlPW5ldyBWWSxIYmU9bmV3IEdZLGc5dD0oSW4oSGJlKSxuZXcgcWUpfWZ1bmN0aW9uIFo4KCl7Wjg9WCxtaHQ9bmV3IE5ldCgiQ09OU0VSVkFUSVZFIiwwKSxqX3Q9bmV3IE5ldCgiQ09OU0VSVkFUSVZFX1NPRlQiLDEpLERTPW5ldyBOZXQoIlNMT1BQWSIsMil9ZnVuY3Rpb24gYnooKXtiej1YLHlBdD1uZXcgTXYoMTUpLHM0ZT1uZXcgYW8oKGRpKCksVjIpLHlBdCksS1M9JHgsYkF0PXEzZSx2QXQ9SDIsbUF0PW81LHdBdD1qR31mdW5jdGlvbiBNaXQodCxlLG4pe3ZhciByLHMsbztmb3Iocj1uZXcgY3Msbz1zaShuLDApO28uYiE9by5kLmM7KXM9dShpaShvKSw4KSxhaShyLG5ldyBTbyhzKSk7ZnJlKHQsZSxyKX1mdW5jdGlvbiBldW4odCl7dmFyIGUsbixyO2ZvcihlPTAscj1OdChuYSxyZSw4LHQuYiwwLDEpLG49c2kodCwwKTtuLmIhPW4uZC5jOylyW2UrK109dShpaShuKSw4KTtyZXR1cm4gcn1mdW5jdGlvbiBPeXQodCl7dmFyIGU7cmV0dXJuIGU9KCF0LmEmJih0LmE9bmV3IGhlKGVnLHQsOSw1KSksdC5hKSxlLmkhPTA/bVllKHUoQXQoZSwwKSw2NzgpKTpudWxsfWZ1bmN0aW9uIG51bih0LGUpe3ZhciBuO3JldHVybiBuPVJhKHQsZSksYmV0KGtydCh0LGUpLDApfFBZZShrcnQodCxuKSwwKT9uOlJhKERxLGtydCh6bShuLDYzKSwxKSl9ZnVuY3Rpb24gcnVuKHQsZSl7dmFyIG47bj1JZSgoV2l0KCksb0cpKSE9bnVsbCYmZS53ZygpIT1udWxsP1p0KHZlKGUud2coKSkpL1p0KHZlKEllKG9HKSkpOjEsQWkodC5iLGUsbil9ZnVuY3Rpb24gaXVuKHQsZSl7dmFyIG4scjtyZXR1cm4gbj11KHQuZC5CYyhlKSwxNCksbj8ocj10LmUuaGMoKSxyLkdjKG4pLHQuZS5kLT1uLmdjKCksbi4kYigpLHIpOm51bGx9ZnVuY3Rpb24gTnl0KHQsZSl7dmFyIG4scjtpZihyPXQuY1tlXSxyIT0wKWZvcih0LmNbZV09MCx0LmQtPXIsbj1lKzE7bjx0LmEubGVuZ3RoOyl0LmFbbl0tPXIsbis9biYtbn1mdW5jdGlvbiB2cmUodCl7dmFyIGU7aWYoZT10LmEuYy5sZW5ndGgsZT4wKXJldHVybiBnOChlLTEsdC5hLmMubGVuZ3RoKSxJZyh0LmEsZS0xKTt0aHJvdyBudChuZXcgSHp0KX1mdW5jdGlvbiBzdW4odCxlLG4pe2lmKGU8MCl0aHJvdyBudChuZXcgQ28oJDFlK2UpKTtlPHQuai5jLmxlbmd0aD9saCh0LmosZSxuKTooQ1p0KHQsZSksdWUodC5qLG4pKX1mdW5jdGlvbiB3cmUodCxlLG4pe2lmKHQ+ZSl0aHJvdyBudChuZXcgUG4oRnErdCtmZmUrZSkpO2lmKHQ8MHx8ZT5uKXRocm93IG50KG5ldyBLcHQoRnErdCtSNnQrZStGNnQrbikpfWZ1bmN0aW9uIG1yZSh0KXtpZighdC5hfHwhKHQuYS5pJjgpKXRocm93IG50KG5ldyBIbygiRW51bWVyYXRpb24gY2xhc3MgZXhwZWN0ZWQgZm9yIGxheW91dCBvcHRpb24gIit0LmYpKX1mdW5jdGlvbiBleSh0KXt2YXIgZTsrK3Quaix0Lmk9PTA/dC5nPW51bGw6dC5pPHQuZy5sZW5ndGgmJihlPXQuZyx0Lmc9dC5yaSh0LmkpLFBjKGUsMCx0LmcsMCx0LmkpKX1mdW5jdGlvbiBhdW4odCxlKXt2YXIgbixyO2ZvcihuPXQuYS5sZW5ndGgtMSx0LmM9dC5jLTEmbjtlIT10LmM7KXI9ZSsxJm4sbHModC5hLGUsdC5hW3JdKSxlPXI7bHModC5hLHQuYyxudWxsKX1mdW5jdGlvbiBvdW4odCxlKXt2YXIgbixyO2ZvcihuPXQuYS5sZW5ndGgtMTtlIT10LmI7KXI9ZS0xJm4sbHModC5hLGUsdC5hW3JdKSxlPXI7bHModC5hLHQuYixudWxsKSx0LmI9dC5iKzEmbn1mdW5jdGlvbiBQeXQodCxlLG4pe3ZhciByLHM7cmV0dXJuIFVtKGUsdC5jLmxlbmd0aCkscj1uLlBjKCkscz1yLmxlbmd0aCxzPT0wPyExOihUdnQodC5jLGUsciksITApfWZ1bmN0aW9uIGN1bih0KXt2YXIgZSxuO2lmKHQ9PW51bGwpcmV0dXJuIG51bGw7Zm9yKGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspaWYoIVBLdCh0W2VdKSlyZXR1cm4gdFtlXTtyZXR1cm4gbnVsbH1mdW5jdGlvbiB5cmUodCxlLG4pe3ZhciByLHMsbyxoO2ZvcihzPW4sbz0wLGg9cy5sZW5ndGg7bzxoOysrbylpZihyPXNbb10sdC5iLnJlKGUsci5jZCgpKSlyZXR1cm4gcjtyZXR1cm4gbnVsbH1mdW5jdGlvbiB2eih0KXt2YXIgZSxuLHIscyxvO2ZvcihvPTEsbj10LHI9MCxzPW4ubGVuZ3RoO3I8czsrK3IpZT1uW3JdLG89MzEqbysoZSE9bnVsbD9KaShlKTowKSxvPW98MDtyZXR1cm4gb31mdW5jdGlvbiBRcih0KXt2YXIgZSxuLHIscyxvO2ZvcihlPXt9LHI9dCxzPTAsbz1yLmxlbmd0aDtzPG87KytzKW49cltzXSxlWyI6Iisobi5mIT1udWxsP24uZjoiIituLmcpXT1uO3JldHVybiBlfWZ1bmN0aW9uIHV1bih0KXt2YXIgZTtmb3IoRHIodCksaHZ0KCEwLCJudW1iZXJUb0FkdmFuY2UgbXVzdCBiZSBub25uZWdhdGl2ZSIpLGU9MDtlPDAmJlZyKHQpO2UrKylJcih0KTtyZXR1cm4gZX1mdW5jdGlvbiB4cmUodCl7dmFyIGUsbixyO2ZvcihyPTAsbj1uZXcgYXIobHIodC5hLktjKCksbmV3IEgpKTtWcihuKTspZT11KElyKG4pLDE3KSxlLmMuaT09ZS5kLml8fCsrcjtyZXR1cm4gcn1mdW5jdGlvbiBrcmUodCxlKXt2YXIgbixyLHM7bj10LHM9MDtkb3tpZihuPT1lKXJldHVybiBzO2lmKHI9bi5lLCFyKXRocm93IG50KG5ldyB1TSk7bj0kYShyKSwrK3N9d2hpbGUoITApfWZ1bmN0aW9uIEVyZSh0LGUpe3ZhciBuLHIscztmb3Iocz1lLXQuZixyPW5ldyBTKHQuZCk7ci5hPHIuYy5jLmxlbmd0aDspbj11KFEociksNDQzKSxwaWUobixuLmUsbi5mK3MpO3QuZj1lfWZ1bmN0aW9uIERpdCh0LGUsbil7cmV0dXJuIGIuTWF0aC5hYnMoZS10KTxoSHx8Yi5NYXRoLmFicyhuLXQpPGhIPyEwOmUtdD5oSD90LW4+aEg6bi10PmhIfWZ1bmN0aW9uIElpdCh0LGUpe3JldHVybiF0fHxlJiYhdC5qfHxfdCh0LDEyNCkmJnUodCwxMjQpLmEuYj09MD8wOnQuUmUoKX1mdW5jdGlvbiB3eih0LGUpe3JldHVybiF0fHxlJiYhdC5rfHxfdCh0LDEyNCkmJnUodCwxMjQpLmEuYT09MD8wOnQuU2UoKX1mdW5jdGlvbiBqRCh0KXtyZXR1cm4gZWIoKSx0PDA/dCE9LTE/bmV3IEwzdCgtMSwtdCk6QXV0OnQ8PTEwP3A3dFtDcyh0KV06bmV3IEwzdCgxLHQpfWZ1bmN0aW9uIEZ5dCh0KXt0aHJvdyB2aXQoKSxudChuZXcgRnF0KCJVbmV4cGVjdGVkIHR5cGVvZiByZXN1bHQgJyIrdCsiJzsgcGxlYXNlIHJlcG9ydCB0aGlzIGJ1ZyB0byB0aGUgR1dUIHRlYW0iKSl9ZnVuY3Rpb24gVHJlKHQpe3FxdCgpLHVqKHRoaXMpLG4kKHRoaXMpLHRoaXMuZT10LEJjZSh0aGlzLHQpLHRoaXMuZz10PT1udWxsP011OldvKHQpLHRoaXMuYT0iIix0aGlzLmI9dCx0aGlzLmE9IiJ9ZnVuY3Rpb24gQnl0KCl7dGhpcy5hPW5ldyB1Wix0aGlzLmY9bmV3IEQkdCh0aGlzKSx0aGlzLmI9bmV3IEkkdCh0aGlzKSx0aGlzLmk9bmV3IE8kdCh0aGlzKSx0aGlzLmU9bmV3IE4kdCh0aGlzKX1mdW5jdGlvbiBfcmUoKXtnS2UuY2FsbCh0aGlzLG5ldyB5bXQoUW0oMTYpKSkscWwoMixXaGUpLHRoaXMuYj0yLHRoaXMuYT1uZXcgbXd0KG51bGwsbnVsbCwwLG51bGwpLGNNKHRoaXMuYSx0aGlzLmEpfWZ1bmN0aW9uIFlfKCl7WV89WCx1aHQ9bmV3IE1ldCgiRFVNTVlfTk9ERV9PVkVSIiwwKSxFX3Q9bmV3IE1ldCgiRFVNTVlfTk9ERV9VTkRFUiIsMSksdUc9bmV3IE1ldCgiRVFVQUwiLDIpfWZ1bmN0aW9uIE9pdCgpe09pdD1YLFp1dD1vUXQodXQob3QoV1MsMSksb2UsMTAzLDAsWyhmbygpLEhoKSxfZl0pKSxKdXQ9b1F0KHV0KG90KFdTLDEpLG9lLDEwMywwLFtaMCxRMF0pKX1mdW5jdGlvbiBOaXQodCl7cmV0dXJuKGJlKCksSXUpLkhjKHQuaik/WnQodmUoSyh0LChhZSgpLGZFKSkpKTpuYyh1dChvdChuYSwxKSxyZSw4LDAsW3QuaS5uLHQubix0LmFdKSkuYn1mdW5jdGlvbiBsdW4odCl7dmFyIGUsbixyLHM7Zm9yKHI9dC5iLmEsbj1yLmEuZWMoKS5LYygpO24uT2IoKTspZT11KG4uUGIoKSw1NjEpLHM9bmV3IHZjZShlLHQuZSx0LmYpLHVlKHQuZyxzKX1mdW5jdGlvbiBnMih0LGUpe3ZhciBuLHIscztyPXQubmsoZSxudWxsKSxzPW51bGwsZSYmKHM9KFprKCksbj1uZXcgd3YsbiksTzgocyx0LnIpKSxyPUYxKHQscyxyKSxyJiZyLkZpKCl9ZnVuY3Rpb24gaHVuKHQsZSl7dmFyIG4scjtmb3Iocj1wbCh0LmQsMSkhPTAsbj0hMDtuOyluPSExLG49ZS5jLlRmKGUuZSxyKSxuPW58cEkodCxlLHIsITEpLHI9IXI7ZXl0KHQpfWZ1bmN0aW9uIFJ5dCh0LGUpe3ZhciBuLHIscztyZXR1cm4gcj0hMSxuPWUucS5kLGUuZDx0LmImJihzPUFjZShlLnEsdC5iKSxlLnEuZD5zJiYoUXNlKGUucSxzKSxyPW4hPWUucS5kKSkscn1mdW5jdGlvbiBDcmUodCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrO3JldHVybiB3PWUuaSxrPWUuaixyPXQuZixzPXIuaSxvPXIuaixoPXctcyxkPWstbyxuPWIuTWF0aC5zcXJ0KGgqaCtkKmQpLG59ZnVuY3Rpb24ganl0KHQsZSl7dmFyIG4scjtyZXR1cm4gcj1Jeih0KSxyfHwobj0oQ2F0KCksWmFlKGUpKSxyPW5ldyBOenQobiksT3Ioci5WaygpLHQpKSxyfWZ1bmN0aW9uICREKHQsZSl7dmFyIG4scjtyZXR1cm4gbj11KHQuYy5CYyhlKSwxNCksbj8ocj10LmhjKCksci5HYyhuKSx0LmQtPW4uZ2MoKSxuLiRiKCksdC5tYyhyKSk6dC5qYygpfWZ1bmN0aW9uIFNyZSh0LGUpe3ZhciBuO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspaWYodD09KCRyKG4sZS5sZW5ndGgpLGUuY2hhckNvZGVBdChuKSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gQXJlKHQsZSl7dmFyIG47Zm9yKG49MDtuPGUubGVuZ3RoO24rKylpZih0PT0oJHIobixlLmxlbmd0aCksZS5jaGFyQ29kZUF0KG4pKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBmdW4odCl7dmFyIGUsbjtpZih0PT1udWxsKXJldHVybiExO2ZvcihlPTAsbj10Lmxlbmd0aDtlPG47ZSsrKWlmKCFQS3QodFtlXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gTHJlKHQpe3ZhciBlO2lmKHQuYyE9MClyZXR1cm4gdC5jO2ZvcihlPTA7ZTx0LmEubGVuZ3RoO2UrKyl0LmM9dC5jKjMzKyh0LmFbZV0mLTEpO3JldHVybiB0LmM9dC5jKnQuZSx0LmN9ZnVuY3Rpb24gbXoodCl7dmFyIGU7cmV0dXJuIFpuKHQuYSE9dC5iKSxlPXQuZC5hW3QuYV0sc1d0KHQuYj09dC5kLmMmJmUhPW51bGwpLHQuYz10LmEsdC5hPXQuYSsxJnQuZC5hLmxlbmd0aC0xLGV9ZnVuY3Rpb24gZHVuKHQpe3ZhciBlO2lmKCEodC5jLmM8MD90LmE+PXQuYy5iOnQuYTw9dC5jLmIpKXRocm93IG50KG5ldyB2Yyk7cmV0dXJuIGU9dC5hLHQuYSs9dC5jLmMsKyt0LmIsZGUoZSl9ZnVuY3Rpb24gZ3VuKHQpe3ZhciBlO3JldHVybiBlPW5ldyBhZWUodCksYUQodC5hLEFiZSxuZXcgQ2wodXQob3QoZ08sMSksTWUsMzY5LDAsW2VdKSkpLGUuZCYmdWUoZS5mLGUuZCksZS5mfWZ1bmN0aW9uIFBpdCh0KXt2YXIgZTtyZXR1cm4gZT1uZXcgYTJ0KHQuYSksQm8oZSx0KSxlZShlLChhZSgpLElpKSx0KSxlLm8uYT10LmcsZS5vLmI9dC5mLGUubi5hPXQuaSxlLm4uYj10LmosZX1mdW5jdGlvbiBwdW4odCxlLG4scil7dmFyIHMsbztmb3Iobz10LktjKCk7by5PYigpOylzPXUoby5QYigpLDcwKSxzLm4uYT1lLmErKHIuYS1zLm8uYSkvMixzLm4uYj1lLmIsZS5iKz1zLm8uYitufWZ1bmN0aW9uIGJ1bih0LGUsbil7dmFyIHIscztmb3Iocz1lLmEuYS5lYygpLktjKCk7cy5PYigpOylpZihyPXUocy5QYigpLDU3KSwkWHQodCxyLG4pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHZ1bih0KXt2YXIgZSxuO2ZvcihuPW5ldyBTKHQucik7bi5hPG4uYy5jLmxlbmd0aDspaWYoZT11KFEobiksMTApLHQubltlLnBdPD0wKXJldHVybiBlO3JldHVybiBudWxsfWZ1bmN0aW9uIE1yZSh0KXt2YXIgZSxuLHIscztmb3Iocz1uZXcgUXMscj1uZXcgUyh0KTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoUShyKSwzMyksZT1Ddm4obiksS2EocyxlKTtyZXR1cm4gc31mdW5jdGlvbiB3dW4odCl7dmFyIGU7cmV0dXJuIGU9aWoob21lKSx1KEsodCwoYWUoKSxXYykpLDIxKS5IYygoZ28oKSxsRSkpJiZFaShlLChZYSgpLGZ1KSwoY28oKSx4VikpLGV9ZnVuY3Rpb24gbXVuKHQsZSxuKXt2YXIgcjtyPW5ldyBQb2UodCxlKSxjbih0LnIsZS5IZigpLHIpLG4mJiFUXyh0LnUpJiYoci5jPW5ldyBuUXQodC5kKSxfdShlLndmKCksbmV3IGJuKHIpKSl9ZnVuY3Rpb24gX2ModCxlKXt2YXIgbjtyZXR1cm4gVm8odCkmJlZvKGUpJiYobj10LWUsIWlzTmFOKG4pKT9uOkozdChWbyh0KT9EaCh0KTp0LFZvKGUpP0RoKGUpOmUpfWZ1bmN0aW9uIHl1bih0LGUpe3JldHVybiBlPHQubGVuZ3RoJiYoJHIoZSx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGUpIT02MykmJigkcihlLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoZSkhPTM1KX1mdW5jdGlvbiBEcmUodCxlLG4scil7dmFyIHMsbzt0LmE9ZSxvPXI/MDoxLHQuZj0ocz1uZXcgTmFlKHQuYyx0LmEsbixvKSxuZXcgaHVlKG4sdC5hLHMsdC5lLHQuYix0LmM9PShadigpLElTKSkpfWZ1bmN0aW9uICR5dCh0LGUsbil7dmFyIHIscztyZXR1cm4gcz10LmEsdC5hPWUsdC5EYiY0JiYhKHQuRGImMSkmJihyPW5ldyBvYSh0LDEsMSxzLGUpLG4/bi5FaShyKTpuPXIpLG59ZnVuY3Rpb24gSXJlKHQsZSxuKXt2YXIgcixzO3JldHVybiBzPXQuYix0LmI9ZSx0LkRiJjQmJiEodC5EYiYxKSYmKHI9bmV3IG9hKHQsMSwzLHMsZSksbj9uLkVpKHIpOm49ciksbn1mdW5jdGlvbiBPcmUodCxlLG4pe3ZhciByLHM7cmV0dXJuIHM9dC5mLHQuZj1lLHQuRGImNCYmISh0LkRiJjEpJiYocj1uZXcgb2EodCwxLDAscyxlKSxuP24uRWkocik6bj1yKSxufWZ1bmN0aW9uIFhwKHQsZSl7dmFyIG4scixzLG87cmV0dXJuIG89KHM9dD9Jeih0KTpudWxsLGlvZSgocj1lLHMmJnMuWGsoKSxyKSkpLG89PWUmJihuPUl6KHQpLG4mJm4uWGsoKSksb31mdW5jdGlvbiB6eXQodCxlKXt2YXIgbixyLHM7Zm9yKHM9MSxuPXQscj1lPj0wP2U6LWU7cj4wOylyJTI9PTA/KG4qPW4scj1yLzJ8MCk6KHMqPW4sci09MSk7cmV0dXJuIGU8MD8xL3M6c31mdW5jdGlvbiB4dW4odCxlKXt2YXIgbixyLHM7Zm9yKHM9MSxuPXQscj1lPj0wP2U6LWU7cj4wOylyJTI9PTA/KG4qPW4scj1yLzJ8MCk6KHMqPW4sci09MSk7cmV0dXJuIGU8MD8xL3M6c31mdW5jdGlvbiBOcmUodCl7dmFyIGUsbjtpZih0IT1udWxsKWZvcihuPTA7bjx0Lmxlbmd0aDsrK24pZT10W25dLGUmJih1KGUuZywzNjcpLGUuaSl9ZnVuY3Rpb24ga3VuKHQpe3ZhciBlLG4scjtmb3Iocj0wLG49bmV3IFModC5hKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoUShuKSwxODcpLHI9Yi5NYXRoLm1heChyLGUuZyk7cmV0dXJuIHJ9ZnVuY3Rpb24gRXVuKHQpe3ZhciBlLG4scjtmb3Iocj1uZXcgUyh0LmIpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShRKHIpLDIxNCksZT1uLmMuUmYoKT9uLmY6bi5hLGUmJnF5bihlLG4uail9ZnVuY3Rpb24gJDAoKXskMD1YLEhHPW5ldyBWZXQoIklOSEVSSVQiLDApLG5wPW5ldyBWZXQoIklOQ0xVREVfQ0hJTERSRU4iLDEpLFlTPW5ldyBWZXQoIlNFUEFSQVRFX0NISUxEUkVOIiwyKX1mdW5jdGlvbiBxeXQodCxlKXtzd2l0Y2goZSl7Y2FzZSAxOiF0Lm4mJih0Lm49bmV3IGhlKFlvLHQsMSw3KSksVHIodC5uKTtyZXR1cm47Y2FzZSAyOnFfKHQsbnVsbCk7cmV0dXJufWJ5dCh0LGUpfWZ1bmN0aW9uIHl6KHQpe3ZhciBlO3N3aXRjaCh0LmdjKCkpe2Nhc2UgMDpyZXR1cm4gbXV0O2Nhc2UgMTpyZXR1cm4gbmV3IExudChEcih0LlhiKDApKSk7ZGVmYXVsdDpyZXR1cm4gZT10LG5ldyB1cnQoZSl9fWZ1bmN0aW9uIFByZSh0KXtzd2l0Y2goZmQoKSx0LmdjKCkpe2Nhc2UgMDpyZXR1cm4gWm50KCksRzh0O2Nhc2UgMTpyZXR1cm4gbmV3IHk2KHQuS2MoKS5QYigpKTtkZWZhdWx0OnJldHVybiBuZXcgdmJ0KHQpfX1mdW5jdGlvbiBGZyh0KXtzd2l0Y2goZmQoKSx0LmMpe2Nhc2UgMDpyZXR1cm4gWm50KCksRzh0O2Nhc2UgMTpyZXR1cm4gbmV3IHk2KGRvZShuZXcgazYodCkpKTtkZWZhdWx0OnJldHVybiBuZXcgTnF0KHQpfX1mdW5jdGlvbiBueSh0LGUpe0RyKHQpO3RyeXtyZXR1cm4gdC54YyhlKX1jYXRjaChuKXtpZihuPXJzKG4pLF90KG4sMjA1KXx8X3QobiwxNzMpKXJldHVybiBudWxsO3Rocm93IG50KG4pfX1mdW5jdGlvbiBUdW4odCxlKXtEcih0KTt0cnl7cmV0dXJuIHQuQmMoZSl9Y2F0Y2gobil7aWYobj1ycyhuKSxfdChuLDIwNSl8fF90KG4sMTczKSlyZXR1cm4gbnVsbDt0aHJvdyBudChuKX19ZnVuY3Rpb24gSHl0KHQsZSl7RHIodCk7dHJ5e3JldHVybiB0LkhjKGUpfWNhdGNoKG4pe2lmKG49cnMobiksX3QobiwyMDUpfHxfdChuLDE3MykpcmV0dXJuITE7dGhyb3cgbnQobil9fWZ1bmN0aW9uIF91bih0LGUpe0RyKHQpO3RyeXtyZXR1cm4gdC5NYyhlKX1jYXRjaChuKXtpZihuPXJzKG4pLF90KG4sMjA1KXx8X3QobiwxNzMpKXJldHVybiExO3Rocm93IG50KG4pfX1mdW5jdGlvbiBGcmUodCxlKXtEcih0KTt0cnl7cmV0dXJuIHQuX2IoZSl9Y2F0Y2gobil7aWYobj1ycyhuKSxfdChuLDIwNSl8fF90KG4sMTczKSlyZXR1cm4hMTt0aHJvdyBudChuKX19ZnVuY3Rpb24gQnJlKHQsZSl7dmFyIG47dC5hLmMubGVuZ3RoPjAmJihuPXUoUGUodC5hLHQuYS5jLmxlbmd0aC0xKSw1NzApLE15dChuLGUpKXx8dWUodC5hLG5ldyBkSnQoZSkpfWZ1bmN0aW9uIEN1bih0KXtkZigpO3ZhciBlLG47ZT10LmQuYy10LmUuYyxuPXUodC5nLDE0NSksX3Uobi5iLG5ldyBfVChlKSksX3Uobi5jLG5ldyBVYihlKSksX2Eobi5pLG5ldyBuUihlKSl9ZnVuY3Rpb24gUnJlKHQpe3ZhciBlO3JldHVybiBlPW5ldyBBcCxlLmErPSJWZXJ0aWNhbFNlZ21lbnQgIix3YyhlLHQuZSksZS5hKz0iICIsWXIoZSxiMnQobmV3IGNldCxuZXcgUyh0LmspKSksZS5hfWZ1bmN0aW9uIFN1bih0KXt2YXIgZTtyZXR1cm4gZT11KFd2KHQuYy5jLCIiKSwyMjkpLGV8fChlPW5ldyAkNihRayhYayhuZXcgd20sIiIpLCJPdGhlciIpKSx2Mih0LmMuYywiIixlKSksZX1mdW5jdGlvbiBYXyh0KXt2YXIgZTtyZXR1cm4gdC5EYiY2ND9tZih0KTooZT1uZXcgQWgobWYodCkpLGUuYSs9IiAobmFtZTogIix5byhlLHQuemIpLGUuYSs9IikiLGUuYSl9ZnVuY3Rpb24gVnl0KHQsZSxuKXt2YXIgcixzO3JldHVybiBzPXQuc2IsdC5zYj1lLHQuRGImNCYmISh0LkRiJjEpJiYocj1uZXcgb2EodCwxLDQscyxlKSxuP24uRWkocik6bj1yKSxufWZ1bmN0aW9uIEZpdCh0LGUpe3ZhciBuLHIscztmb3Iobj0wLHM9cmModCxlKS5LYygpO3MuT2IoKTspcj11KHMuUGIoKSwxMSksbis9SyhyLChhZSgpLHNsKSkhPW51bGw/MTowO3JldHVybiBufWZ1bmN0aW9uIG80KHQsZSxuKXt2YXIgcixzLG87Zm9yKHI9MCxvPXNpKHQsMCk7by5iIT1vLmQuYyYmKHM9WnQodmUoaWkobykpKSwhKHM+bikpOylzPj1lJiYrK3I7cmV0dXJuIHJ9ZnVuY3Rpb24gQXVuKHQsZSxuKXt2YXIgcixzO3JldHVybiByPW5ldyBGMCh0LmUsMywxMyxudWxsLChzPWUuYyxzfHwobG4oKSxLMSkpLCRnKHQsZSksITEpLG4/bi5FaShyKTpuPXIsbn1mdW5jdGlvbiBMdW4odCxlLG4pe3ZhciByLHM7cmV0dXJuIHI9bmV3IEYwKHQuZSw0LDEzLChzPWUuYyxzfHwobG4oKSxLMSkpLG51bGwsJGcodCxlKSwhMSksbj9uLkVpKHIpOm49cixufWZ1bmN0aW9uIEd5dCh0LGUsbil7dmFyIHIscztyZXR1cm4gcz10LnIsdC5yPWUsdC5EYiY0JiYhKHQuRGImMSkmJihyPW5ldyBvYSh0LDEsOCxzLHQuciksbj9uLkVpKHIpOm49ciksbn1mdW5jdGlvbiBCZyh0LGUpe3ZhciBuLHI7cmV0dXJuIG49dShlLDY3Nikscj1uLnZrKCksIXImJm4ud2socj1fdChlLDg4KT9uZXcgTkd0KHQsdShlLDI2KSk6bmV3IGVadCh0LHUoZSwxNDgpKSkscn1mdW5jdGlvbiB6RCh0LGUsbil7dmFyIHI7dC5xaSh0LmkrMSkscj10Lm9pKGUsbiksZSE9dC5pJiZQYyh0LmcsZSx0LmcsZSsxLHQuaS1lKSxscyh0LmcsZSxyKSwrK3QuaSx0LmJpKGUsbiksdC5jaSgpfWZ1bmN0aW9uIE11bih0LGUpe3ZhciBuO3JldHVybiBlLmEmJihuPWUuYS5hLmxlbmd0aCx0LmE/WXIodC5hLHQuYik6dC5hPW5ldyBGbCh0LmQpLHJadCh0LmEsZS5hLGUuZC5sZW5ndGgsbikpLHR9ZnVuY3Rpb24gRHVuKHQsZSl7dmFyIG4scixzLG87aWYoZS52aSh0LmEpLG89dShNbih0LmEsOCksMTkzNiksbyE9bnVsbClmb3Iobj1vLHI9MCxzPW4ubGVuZ3RoO3I8czsrK3IpbnVsbC5qbSgpfWZ1bmN0aW9uIHFEKHQsZSl7dmFyIG47cmV0dXJuIG49bmV3IExpLHQuYS5zZChuKT8obzgoKSxuZXcgZ1IoSW4oTnRlKHQsbi5hLGUpKSkpOihxcCh0KSxvOCgpLG84KCksV0gpfWZ1bmN0aW9uIFFfKHQsZSl7c3dpdGNoKGUuZyl7Y2FzZSAyOmNhc2UgMTpyZXR1cm4gcmModCxlKTtjYXNlIDM6Y2FzZSA0OnJldHVybiBjMihyYyh0LGUpKX1yZXR1cm4gcG4oKSxwbigpLHVvfWZ1bmN0aW9uIFNpKHQsZSl7cmV0dXJuIGhhKHQpP3VuKHQsZSk6Tm0odCk/Sld0KHQsZSk6T20odCk/KEluKHQpLEd0KHQpPT09R3QoZSkpOkt2dCh0KT90LkZiKGUpOkh2dCh0KT90VXQodCxlKTokd3QodCxlKX1mdW5jdGlvbiBJdW4odCl7cmV0dXJuIHQ/dC5pJjE/dD09eGw/V3M6dD09U3I/SGE6dD09cjM/Szc6dD09Z2E/d2E6dD09RGI/VHc6dD09ZDU/X3c6dD09WHU/a3g6YVM6dDpudWxsfWZ1bmN0aW9uIE91bih0LGUsbixyLHMpe2U9PTB8fHI9PTB8fChlPT0xP3Nbcl09STN0KHMsbixyLHRbMF0pOnI9PTE/c1tlXT1JM3Qocyx0LGUsblswXSk6UHBuKHQsbixzLGUscikpfWZ1bmN0aW9uIGpyZSh0LGUpe3ZhciBuO3QuYy5sZW5ndGghPTAmJihuPXUoUDEodCxOdChvMCxHZywxMCx0LmMubGVuZ3RoLDAsMSkpLDE5MyksWmJ0KG4sbmV3IGJrKSxDb2UobixlKSl9ZnVuY3Rpb24gJHJlKHQsZSl7dmFyIG47dC5jLmxlbmd0aCE9MCYmKG49dShQMSh0LE50KG8wLEdnLDEwLHQuYy5sZW5ndGgsMCwxKSksMTkzKSxaYnQobixuZXcgUmQpLENvZShuLGUpKX1mdW5jdGlvbiBVeXQodCxlLG4scil7c3dpdGNoKGUpe2Nhc2UgMTpyZXR1cm4hdC5uJiYodC5uPW5ldyBoZShZbyx0LDEsNykpLHQubjtjYXNlIDI6cmV0dXJuIHQua31yZXR1cm4gcTN0KHQsZSxuLHIpfWZ1bmN0aW9uIGZvKCl7Zm89WCxjMD1uZXcgTE0oT0MsMCksX2Y9bmV3IExNKGR4LDEpLEhoPW5ldyBMTShmeCwyKSxRMD1uZXcgTE0oa290LDMpLFowPW5ldyBMTSgiVVAiLDQpfWZ1bmN0aW9uIGV3KCl7ZXc9WCx6ND1uZXcga2V0KEswLDApLFRFdD1uZXcga2V0KCJJTlNJREVfUE9SVF9TSURFX0dST1VQUyIsMSksZWx0PW5ldyBrZXQoIkZPUkNFX01PREVMX09SREVSIiwyKX1mdW5jdGlvbiB6cmUodCxlLG4pe2lmKHQ8MHx8ZT5uKXRocm93IG50KG5ldyBDbyhGcSt0K1I2dCtlKyIsIHNpemU6ICIrbikpO2lmKHQ+ZSl0aHJvdyBudChuZXcgUG4oRnErdCtmZmUrZSkpfWZ1bmN0aW9uIGdoKHQsZSxuKXtpZihlPDApSzR0KHQsbik7ZWxzZXtpZighbi5JaigpKXRocm93IG50KG5ldyBQbihjYituLm5lKCkrV0MpKTt1KG4sNjYpLk5qKCkuVmoodCx0LnloKCksZSl9fWZ1bmN0aW9uIE51bih0LGUsbixyLHMsbyxoLGQpe3ZhciB3O2Zvcih3PW47bzxoOyl3Pj1yfHxlPG4mJmQudWUodFtlXSx0W3ddKTw9MD9scyhzLG8rKyx0W2UrK10pOmxzKHMsbysrLHRbdysrXSl9ZnVuY3Rpb24gcXJlKHQsZSxuLHIscyxvKXt0aGlzLmU9bmV3IGxlLHRoaXMuZj0oaG8oKSxNUyksdWUodGhpcy5lLHQpLHRoaXMuZD1lLHRoaXMuYT1uLHRoaXMuYj1yLHRoaXMuZj1zLHRoaXMuYz1vfWZ1bmN0aW9uIEhyZSh0LGUpe3ZhciBuLHI7Zm9yKHI9bmV3IG5yKHQpO3IuZSE9ci5pLmdjKCk7KWlmKG49dShkcihyKSwyNiksR3QoZSk9PT1HdChuKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBQdW4odCl7THEoKTt2YXIgZSxuLHIscztmb3Iobj1lc3QoKSxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWlmKGU9bltyXSxHbyhlLmEsdCwwKSE9LTEpcmV0dXJuIGU7cmV0dXJuIEJ1dH1mdW5jdGlvbiBWcmUodCl7cmV0dXJuIHQ+PTY1JiZ0PD03MD90LTY1KzEwOnQ+PTk3JiZ0PD0xMDI/dC05NysxMDp0Pj00OCYmdDw9NTc/dC00ODowfWZ1bmN0aW9uIEdyZSh0KXt2YXIgZTtyZXR1cm4gdC5EYiY2ND9tZih0KTooZT1uZXcgQWgobWYodCkpLGUuYSs9IiAoc291cmNlOiAiLHlvKGUsdC5kKSxlLmErPSIpIixlLmEpfWZ1bmN0aW9uIEZ1bih0LGUsbil7dmFyIHIscztyZXR1cm4gcz10LmEsdC5hPWUsdC5EYiY0JiYhKHQuRGImMSkmJihyPW5ldyBvYSh0LDEsNSxzLHQuYSksbj9nNHQobixyKTpuPXIpLG59ZnVuY3Rpb24gUmcodCxlKXt2YXIgbjtuPSh0LkJiJjI1NikhPTAsZT90LkJifD0yNTY6dC5CYiY9LTI1Nyx0LkRiJjQmJiEodC5EYiYxKSYmQ2kodCxuZXcgYmYodCwxLDIsbixlKSl9ZnVuY3Rpb24gV3l0KHQsZSl7dmFyIG47bj0odC5CYiYyNTYpIT0wLGU/dC5CYnw9MjU2OnQuQmImPS0yNTcsdC5EYiY0JiYhKHQuRGImMSkmJkNpKHQsbmV3IGJmKHQsMSw4LG4sZSkpfWZ1bmN0aW9uIHh6KHQsZSl7dmFyIG47bj0odC5CYiYyNTYpIT0wLGU/dC5CYnw9MjU2OnQuQmImPS0yNTcsdC5EYiY0JiYhKHQuRGImMSkmJkNpKHQsbmV3IGJmKHQsMSw4LG4sZSkpfWZ1bmN0aW9uIGpnKHQsZSl7dmFyIG47bj0odC5CYiY1MTIpIT0wLGU/dC5CYnw9NTEyOnQuQmImPS01MTMsdC5EYiY0JiYhKHQuRGImMSkmJkNpKHQsbmV3IGJmKHQsMSwzLG4sZSkpfWZ1bmN0aW9uIEt5dCh0LGUpe3ZhciBuO249KHQuQmImNTEyKSE9MCxlP3QuQmJ8PTUxMjp0LkJiJj0tNTEzLHQuRGImNCYmISh0LkRiJjEpJiZDaSh0LG5ldyBiZih0LDEsOSxuLGUpKX1mdW5jdGlvbiBaXyh0LGUpe3ZhciBuO3JldHVybiB0LmI9PS0xJiZ0LmEmJihuPXQuYS5HaigpLHQuYj1uP3QuYy5YZyh0LmEuYWooKSxuKTplcyh0LmMuVGcoKSx0LmEpKSx0LmMuT2codC5iLGUpfWZ1bmN0aW9uIGRlKHQpe3ZhciBlLG47cmV0dXJuIHQ+LTEyOSYmdDwxMjg/KGU9dCsxMjgsbj0oSEt0KCksbjd0KVtlXSwhbiYmKG49bjd0W2VdPW5ldyBpTSh0KSksbik6bmV3IGlNKHQpfWZ1bmN0aW9uIEo4KHQpe3ZhciBlLG47cmV0dXJuIHQ+LTEyOSYmdDwxMjg/KGU9dCsxMjgsbj0oWUt0KCksYTd0KVtlXSwhbiYmKG49YTd0W2VdPW5ldyBlUih0KSksbik6bmV3IGVSKHQpfWZ1bmN0aW9uIFl5dCh0KXt2YXIgZSxuO3JldHVybiBlPXQuayxlPT0oR24oKSxJcyk/KG49dShLKHQsKGFlKCksZ2MpKSw2MSksbj09KGJlKCksT24pfHxuPT15cik6ITF9ZnVuY3Rpb24gQnVuKHQsZSxuKXt2YXIgcixzLG87cmV0dXJuIG89KHM9YjcodC5iLGUpLHMpLG8mJihyPXUoRXEobUQodCxvKSwiIiksMjYpLHIpP3A1dCh0LHIsZSxuKTpudWxsfWZ1bmN0aW9uIEJpdCh0LGUsbil7dmFyIHIscyxvO3JldHVybiBvPShzPWI3KHQuYixlKSxzKSxvJiYocj11KEVxKG1EKHQsbyksIiIpLDI2KSxyKT9iNXQodCxyLGUsbik6bnVsbH1mdW5jdGlvbiBVcmUodCxlKXt2YXIgbixyO2ZvcihyPW5ldyBucih0KTtyLmUhPXIuaS5nYygpOylpZihuPXUoZHIociksMTM4KSxHdChlKT09PUd0KG4pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEpfKHQsZSxuKXt2YXIgcjtpZihyPXQuZ2MoKSxlPnIpdGhyb3cgbnQobmV3IGptKGUscikpO2lmKHQuaGkoKSYmdC5IYyhuKSl0aHJvdyBudChuZXcgUG4oWEkpKTt0LlhoKGUsbil9ZnVuY3Rpb24gUnVuKHQsZSl7dmFyIG47aWYobj1lNCh0LmksZSksbj09bnVsbCl0aHJvdyBudChuZXcgb2QoIk5vZGUgZGlkIG5vdCBleGlzdCBpbiBpbnB1dC4iKSk7cmV0dXJuIGF5dChlLG4pLG51bGx9ZnVuY3Rpb24ganVuKHQsZSl7dmFyIG47aWYobj1nSSh0LGUpLF90KG4sMzIyKSlyZXR1cm4gdShuLDM0KTt0aHJvdyBudChuZXcgUG4oY2IrZSsiJyBpcyBub3QgYSB2YWxpZCBhdHRyaWJ1dGUiKSl9ZnVuY3Rpb24gJHVuKHQsZSxuKXt2YXIgcixzO2ZvcihzPV90KGUsOTkpJiZ1KGUsMTgpLkJiJlFhP25ldyBLZXQoZSx0KTpuZXcgVjgoZSx0KSxyPTA7cjxuOysrcikkeihzKTtyZXR1cm4gc31mdW5jdGlvbiB6dW4odCl7dmFyIGUsbixyO2ZvcihyPTAsbj10Lmxlbmd0aCxlPTA7ZTxuO2UrKyl0W2VdPT0zMnx8dFtlXT09MTN8fHRbZV09PTEwfHx0W2VdPT05fHwodFtyKytdPXRbZV0pO3JldHVybiByfWZ1bmN0aW9uIHF1bih0KXt2YXIgZSxuLHI7Zm9yKGU9bmV3IGxlLHI9bmV3IFModC5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoUShyKSw1OTQpLFJzKGUsdShuLmpmKCksMTQpKTtyZXR1cm4gZX1mdW5jdGlvbiBIdW4odCl7dmFyIGUsbixyO2ZvcihlPXUoSyh0LChtYygpLFhfdCkpLDE1KSxyPWUuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksMTg4KSxhaShuLmIuZCxuKSxhaShuLmMuYixuKX1mdW5jdGlvbiBWdW4odCl7c3dpdGNoKHUoSyh0LChhZSgpLFAyKSksMzAzKS5nKXtjYXNlIDE6ZWUodCxQMiwoQjAoKSxTeCkpO2JyZWFrO2Nhc2UgMjplZSh0LFAyLChCMCgpLFc0KSl9fWZ1bmN0aW9uIEd1bih0KXt2YXIgZTt0LmcmJihlPXQuYy5SZigpP3QuZjp0LmEsTDV0KGUuYSx0Lm8sITApLEw1dChlLmEsdC5vLCExKSxlZSh0Lm8sKHhlKCksd3MpLCh2YSgpLFUyKSkpfWZ1bmN0aW9uIFV1bih0KXt2YXIgZTtpZighdC5hKXRocm93IG50KG5ldyBIbygiQ2Fubm90IG9mZnNldCBhbiB1bmFzc2lnbmVkIGN1dC4iKSk7ZT10LmMtdC5iLHQuYis9ZSxSWHQodCxlKSxCWHQodCxlKX1mdW5jdGlvbiBXdW4odCl7dmFyIGU7cmV0dXJuIGU9dC5hW3QuYy0xJnQuYS5sZW5ndGgtMV0sZT09bnVsbD9udWxsOih0LmM9dC5jLTEmdC5hLmxlbmd0aC0xLGxzKHQuYSx0LmMsbnVsbCksZSl9ZnVuY3Rpb24gV3JlKHQpe3ZhciBlLG47Zm9yKG49dC5wLmEuZWMoKS5LYygpO24uT2IoKTspaWYoZT11KG4uUGIoKSwyMTMpLGUuZiYmdC5iW2UuY108LTFlLTEwKXJldHVybiBlO3JldHVybiBudWxsfWZ1bmN0aW9uIFh5dCh0LGUpe3N3aXRjaCh0LmIuZyl7Y2FzZSAwOmNhc2UgMTpyZXR1cm4gZTtjYXNlIDI6Y2FzZSAzOnJldHVybiBuZXcgY2goZS5kLDAsZS5hLGUuYik7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gS3JlKHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMjpyZXR1cm4gX2Y7Y2FzZSAxOnJldHVybiBIaDtjYXNlIDQ6cmV0dXJuIFEwO2Nhc2UgMzpyZXR1cm4gWjA7ZGVmYXVsdDpyZXR1cm4gYzB9fWZ1bmN0aW9uIFF5dCh0KXtzd2l0Y2godC5nKXtjYXNlIDE6cmV0dXJuIEJuO2Nhc2UgMjpyZXR1cm4gT247Y2FzZSAzOnJldHVybiBIbjtjYXNlIDQ6cmV0dXJuIHlyO2RlZmF1bHQ6cmV0dXJuIGFjfX1mdW5jdGlvbiBIRCh0KXtzd2l0Y2godC5nKXtjYXNlIDE6cmV0dXJuIHlyO2Nhc2UgMjpyZXR1cm4gQm47Y2FzZSAzOnJldHVybiBPbjtjYXNlIDQ6cmV0dXJuIEhuO2RlZmF1bHQ6cmV0dXJuIGFjfX1mdW5jdGlvbiBreih0KXtzd2l0Y2godC5nKXtjYXNlIDE6cmV0dXJuIEhuO2Nhc2UgMjpyZXR1cm4geXI7Y2FzZSAzOnJldHVybiBCbjtjYXNlIDQ6cmV0dXJuIE9uO2RlZmF1bHQ6cmV0dXJuIGFjfX1mdW5jdGlvbiBLdW4odCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gbmV3IGRxdDtjYXNlIDE6cmV0dXJuIG5ldyBocXQ7Y2FzZSAyOnJldHVybiBuZXcgZnF0O2RlZmF1bHQ6dGhyb3cgbnQobmV3IHVNKX19ZnVuY3Rpb24ganModCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ9PWU/dD09MD9qcygxL3QsMS9lKTowOmlzTmFOKHQpP2lzTmFOKGUpPzA6MTotMX1mdW5jdGlvbiBZdW4odCxlKXttcihlLCJTb3J0IGVuZCBsYWJlbHMiLDEpLHlzKFdpKGVjKG5ldyBrbihudWxsLG5ldyBUbih0LmIsMTYpKSxuZXcgUVApLG5ldyB6NSksbmV3IG1ZKSxvcihlKX1mdW5jdGlvbiB0Qyh0LGUsbil7dmFyIHIscztyZXR1cm4gdC5laigpPyhzPXQuZmooKSxyPVZzdCh0LGUsbiksdC4kaSh0LlppKDcsZGUobikscixlLHMpKSxyKTpWc3QodCxlLG4pfWZ1bmN0aW9uIFJpdCh0LGUpe3ZhciBuLHIsczt0LmQ9PW51bGw/KCsrdC5lLC0tdC5mKToocz1lLmNkKCksbj1lLlNoKCkscj0obiZUaSkldC5kLmxlbmd0aCxJc24odCxyLGxjZSh0LHIsbixzKSkpfWZ1bmN0aW9uIHQ3KHQsZSl7dmFyIG47bj0odC5CYiZ4ZikhPTAsZT90LkJifD14Zjp0LkJiJj0tMTAyNSx0LkRiJjQmJiEodC5EYiYxKSYmQ2kodCxuZXcgYmYodCwxLDEwLG4sZSkpfWZ1bmN0aW9uIGU3KHQsZSl7dmFyIG47bj0odC5CYiZ5eSkhPTAsZT90LkJifD15eTp0LkJiJj0tNDA5Nyx0LkRiJjQmJiEodC5EYiYxKSYmQ2kodCxuZXcgYmYodCwxLDEyLG4sZSkpfWZ1bmN0aW9uIG43KHQsZSl7dmFyIG47bj0odC5CYiZLdSkhPTAsZT90LkJifD1LdTp0LkJiJj0tODE5Myx0LkRiJjQmJiEodC5EYiYxKSYmQ2kodCxuZXcgYmYodCwxLDE1LG4sZSkpfWZ1bmN0aW9uIHI3KHQsZSl7dmFyIG47bj0odC5CYiZBeSkhPTAsZT90LkJifD1BeTp0LkJiJj0tMjA0OSx0LkRiJjQmJiEodC5EYiYxKSYmQ2kodCxuZXcgYmYodCwxLDExLG4sZSkpfWZ1bmN0aW9uIFh1bih0LGUpe3ZhciBuO3JldHVybiBuPWpzKHQuYi5jLGUuYi5jKSxuIT0wfHwobj1qcyh0LmEuYSxlLmEuYSksbiE9MCk/bjpqcyh0LmEuYixlLmEuYil9ZnVuY3Rpb24gUXVuKHQsZSl7dmFyIG47aWYobj10cih0LmssZSksbj09bnVsbCl0aHJvdyBudChuZXcgb2QoIlBvcnQgZGlkIG5vdCBleGlzdCBpbiBpbnB1dC4iKSk7cmV0dXJuIGF5dChlLG4pLG51bGx9ZnVuY3Rpb24gWnVuKHQpe3ZhciBlLG47Zm9yKG49cGNlKHpsKHQpKS5LYygpO24uT2IoKTspaWYoZT1qcihuLlBiKCkpLG1DKHQsZSkpcmV0dXJuIGFzbigoVFZ0KCksRzRlKSxlKTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBKdW4odCxlKXt2YXIgbixyLHMsbyxoO2ZvcihoPWh1KHQuZS5UZygpLGUpLG89MCxuPXUodC5nLDExOSkscz0wO3M8dC5pOysrcylyPW5bc10saC5ybChyLmFrKCkpJiYrK287cmV0dXJuIG99ZnVuY3Rpb24gdGxuKHQsZSxuKXt2YXIgcixzO3JldHVybiByPXUoZS5XZSh0LmEpLDM1KSxzPXUobi5XZSh0LmEpLDM1KSxyIT1udWxsJiZzIT1udWxsP1NEKHIscyk6ciE9bnVsbD8tMTpzIT1udWxsPzE6MH1mdW5jdGlvbiBZcmUodCxlLG4pe3ZhciByLHM7aWYodC5jKV80dCh0LmMsZSxuKTtlbHNlIGZvcihzPW5ldyBTKHQuYik7cy5hPHMuYy5jLmxlbmd0aDspcj11KFEocyksMTU3KSxZcmUocixlLG4pfWZ1bmN0aW9uIGppdCh0LGUpe3ZhciBuLHI7Zm9yKHI9bmV3IFMoZSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KFEociksNDYpLEV1KHQuYi5iLG4uYiksRG5uKHUobi5hLDE4OSksdShuLmIsODEpKX1mdW5jdGlvbiBlbG4odCl7dmFyIGUsbjtmb3Iobj0kcChuZXcgQXAsOTEpLGU9ITA7dC5PYigpOyllfHwobi5hKz1YYSksZT0hMSx3YyhuLHQuUGIoKSk7cmV0dXJuKG4uYSs9Il0iLG4pLmF9ZnVuY3Rpb24gaTcodCxlKXt2YXIgbjtuPSh0LkJiJnZkKSE9MCxlP3QuQmJ8PXZkOnQuQmImPS0xNjM4NSx0LkRiJjQmJiEodC5EYiYxKSYmQ2kodCxuZXcgYmYodCwxLDE2LG4sZSkpfWZ1bmN0aW9uICRpdCh0LGUpe3ZhciBuO249KHQuQmImeWMpIT0wLGU/dC5CYnw9eWM6dC5CYiY9LTMyNzY5LHQuRGImNCYmISh0LkRiJjEpJiZDaSh0LG5ldyBiZih0LDEsMTgsbixlKSl9ZnVuY3Rpb24gWnl0KHQsZSl7dmFyIG47bj0odC5CYiZ5YykhPTAsZT90LkJifD15Yzp0LkJiJj0tMzI3NjksdC5EYiY0JiYhKHQuRGImMSkmJkNpKHQsbmV3IGJmKHQsMSwxOCxuLGUpKX1mdW5jdGlvbiBKeXQodCxlKXt2YXIgbjtuPSh0LkJiJlFhKSE9MCxlP3QuQmJ8PVFhOnQuQmImPS02NTUzNyx0LkRiJjQmJiEodC5EYiYxKSYmQ2kodCxuZXcgYmYodCwxLDIwLG4sZSkpfWZ1bmN0aW9uIHQzdCh0KXt2YXIgZTtyZXR1cm4gZT1OdChFaCx3ZCwyNSwyLDE1LDEpLHQtPVFhLGVbMF09KHQ+PjEwKStPSSZNcyxlWzFdPSh0JjEwMjMpKzU2MzIwJk1zLEloKGUsMCxlLmxlbmd0aCl9ZnVuY3Rpb24gRXoodCl7dmFyIGUsbjtyZXR1cm4gbj11KEsodCwoeGUoKSxYbCkpLDEwMyksbj09KGZvKCksYzApPyhlPVp0KHZlKEsodCxVVikpKSxlPj0xP19mOlEwKTpufWZ1bmN0aW9uIG5sbih0KXtzd2l0Y2godShLKHQsKHhlKCksWDApKSwyMTgpLmcpe2Nhc2UgMTpyZXR1cm4gbmV3IGpYO2Nhc2UgMzpyZXR1cm4gbmV3IFZYO2RlZmF1bHQ6cmV0dXJuIG5ldyBSWH19ZnVuY3Rpb24gcDIodCl7aWYodC5jKXAyKHQuYyk7ZWxzZSBpZih0LmQpdGhyb3cgbnQobmV3IEhvKCJTdHJlYW0gYWxyZWFkeSB0ZXJtaW5hdGVkLCBjYW4ndCBiZSBtb2RpZmllZCBvciB1c2VkIikpfWZ1bmN0aW9uIHppdCh0KXt2YXIgZTtyZXR1cm4gdC5EYiY2ND9tZih0KTooZT1uZXcgQWgobWYodCkpLGUuYSs9IiAoaWRlbnRpZmllcjogIix5byhlLHQuayksZS5hKz0iKSIsZS5hKX1mdW5jdGlvbiBYcmUodCxlLG4pe3ZhciByLHM7cmV0dXJuIHI9KFR2KCkscz1uZXcgbXAscyksVyQocixlKSxLJChyLG4pLHQmJk9yKCghdC5hJiYodC5hPW5ldyBCcyhXaCx0LDUpKSx0LmEpLHIpLHJ9ZnVuY3Rpb24gcWl0KHQsZSxuLHIpe3ZhciBzLG87cmV0dXJuIEluKHIpLEluKG4pLHM9dC54YyhlKSxvPXM9PW51bGw/bjpoVnQodShzLDE1KSx1KG4sMTQpKSxvPT1udWxsP3QuQmMoZSk6dC56YyhlLG8pLG99ZnVuY3Rpb24gb24odCl7dmFyIGUsbixyLHM7cmV0dXJuIG49KGU9dShXZigocj10LmdtLHM9ci5mLHM9PVVyP3I6cykpLDkpLG5ldyBvaChlLHUoZmYoZSxlLmxlbmd0aCksOSksMCkpLHdmKG4sdCksbn1mdW5jdGlvbiBybG4odCxlLG4pe3ZhciByLHM7Zm9yKHM9dC5hLmVjKCkuS2MoKTtzLk9iKCk7KWlmKHI9dShzLlBiKCksMTApLEREKG4sdShQZShlLHIucCksMTQpKSlyZXR1cm4gcjtyZXR1cm4gbnVsbH1mdW5jdGlvbiBpbG4odCxlLG4pe3ZhciByO3RyeXtSY24odCxlLG4pfWNhdGNoKHMpe3Rocm93IHM9cnMocyksX3Qocyw1OTcpPyhyPXMsbnQobmV3IHJtdChyKSkpOm50KHMpfXJldHVybiBlfWZ1bmN0aW9uIFFwKHQsZSl7dmFyIG47cmV0dXJuIFZvKHQpJiZWbyhlKSYmKG49dC1lLElJPG4mJm48RTIpP246V3AoUG5lKFZvKHQpP0RoKHQpOnQsVm8oZSk/RGgoZSk6ZSkpfWZ1bmN0aW9uIFJhKHQsZSl7dmFyIG47cmV0dXJuIFZvKHQpJiZWbyhlKSYmKG49dCtlLElJPG4mJm48RTIpP246V3AoeWNuKFZvKHQpP0RoKHQpOnQsVm8oZSk/RGgoZSk6ZSkpfWZ1bmN0aW9uIElhKHQsZSl7dmFyIG47cmV0dXJuIFZvKHQpJiZWbyhlKSYmKG49dCplLElJPG4mJm48RTIpP246V3AoenluKFZvKHQpP0RoKHQpOnQsVm8oZSk/RGgoZSk6ZSkpfWZ1bmN0aW9uIHJjKHQsZSl7dmFyIG47cmV0dXJuIHQuaXx8VzR0KHQpLG49dSh4byh0LmcsZSksNDYpLG4/bmV3IEtkKHQuaix1KG4uYSwxOSkuYSx1KG4uYiwxOSkuYSk6KHBuKCkscG4oKSx1byl9ZnVuY3Rpb24gbncodCxlLG4pe3ZhciByO3JldHVybiByPXQuYS5nZXQoZSksdC5hLnNldChlLG49PT12b2lkIDA/bnVsbDpuKSxyPT09dm9pZCAwPygrK3QuYyxhJCh0LmIpKTorK3QuZCxyfWZ1bmN0aW9uIHNsbih0LGUsbil7dC5uPVpiKERiLFtyZSxjb3RdLFszNjQsMjVdLDE0LFtuLENzKGIuTWF0aC5jZWlsKGUvMzIpKV0sMiksdC5vPWUsdC5wPW4sdC5qPWUtMT4+MSx0Lms9bi0xPj4xfWZ1bmN0aW9uIEhpdCgpe3k0dCgpO3ZhciB0LGUsbjtuPXQ2bisrK0RhdGUubm93KCksdD1DcyhiLk1hdGguZmxvb3IobipQSSkpJlBxLGU9Q3Mobi10KlA2dCksdGhpcy5hPXReMTUwMix0aGlzLmI9ZV5nb3R9ZnVuY3Rpb24gejAodCl7dmFyIGUsbixyO2ZvcihlPW5ldyBsZSxyPW5ldyBTKHQuaik7ci5hPHIuYy5jLmxlbmd0aDspbj11KFEociksMTEpLHVlKGUsbi5iKTtyZXR1cm4gRHIoZSksbmV3IHVfKGUpfWZ1bmN0aW9uIFVvKHQpe3ZhciBlLG4scjtmb3IoZT1uZXcgbGUscj1uZXcgUyh0LmopO3IuYTxyLmMuYy5sZW5ndGg7KW49dShRKHIpLDExKSx1ZShlLG4uZSk7cmV0dXJuIERyKGUpLG5ldyB1XyhlKX1mdW5jdGlvbiAkcyh0KXt2YXIgZSxuLHI7Zm9yKGU9bmV3IGxlLHI9bmV3IFModC5qKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoUShyKSwxMSksdWUoZSxuLmcpO3JldHVybiBEcihlKSxuZXcgdV8oZSl9ZnVuY3Rpb24gYWxuKHQpe3ZhciBlLG47Zm9yKG49cmJuKHpsKEdtKHQpKSkuS2MoKTtuLk9iKCk7KWlmKGU9anIobi5QYigpKSxtQyh0LGUpKXJldHVybiBvc24oKF9WdCgpLFU0ZSksZSk7cmV0dXJuIG51bGx9ZnVuY3Rpb24gb2xuKHQpe3ZhciBlLG4scjtmb3Iobj0wLHI9dC5sZW5ndGg7bjxyO24rKylpZih0W25dPT1udWxsKXRocm93IG50KG5ldyBtNigiYXQgaW5kZXggIituKSk7cmV0dXJuIGU9dCxuZXcgQ2woZSl9ZnVuY3Rpb24gY2xuKHQsZSl7dmFyIG47aWYobj1nSSh0LlRnKCksZSksX3Qobiw5OSkpcmV0dXJuIHUobiwxOCk7dGhyb3cgbnQobmV3IFBuKGNiK2UrIicgaXMgbm90IGEgdmFsaWQgcmVmZXJlbmNlIikpfWZ1bmN0aW9uIHVsbih0KXt2YXIgZTtyZXR1cm4gZT1seSh0KSxlPjM0MDI4MjM0NjYzODUyODg2ZTIyP2JzOmU8LTM0MDI4MjM0NjYzODUyODg2ZTIyP05zOmV9ZnVuY3Rpb24gUXJlKHQpe3JldHVybiB0LT10Pj4xJjE0MzE2NTU3NjUsdD0odD4+MiY4NTg5OTM0NTkpKyh0Jjg1ODk5MzQ1OSksdD0odD4+NCkrdCYyNTI2NDUxMzUsdCs9dD4+OCx0Kz10Pj4xNix0JjYzfWZ1bmN0aW9uIFpyZSh0KXt2YXIgZSxuLHIscztmb3IoZT1uZXcgSVd0KHQuSGQoKS5nYygpKSxzPTAscj1XNih0LkhkKCkuS2MoKSk7ci5PYigpOyluPXIuUGIoKSxtcm4oZSxuLGRlKHMrKykpO3JldHVybiBWMG4oZS5hKX1mdW5jdGlvbiBsbG4odCxlKXt2YXIgbixyLHM7Zm9yKHM9bmV3IEFyLHI9ZS52YygpLktjKCk7ci5PYigpOyluPXUoci5QYigpLDQyKSxBaShzLG4uY2QoKSxlY24odCx1KG4uZGQoKSwxNSkpKTtyZXR1cm4gc31mdW5jdGlvbiBlM3QodCxlKXt0Lm4uYy5sZW5ndGg9PTAmJnVlKHQubixuZXcgZiQodC5zLHQudCx0LmkpKSx1ZSh0LmIsZSksQjN0KHUoUGUodC5uLHQubi5jLmxlbmd0aC0xKSwyMTEpLGUpLGNsZSh0LGUpfWZ1bmN0aW9uIGM0KHQpe3JldHVybih0LmMhPXQuYi5ifHx0LmkhPXQuZy5iKSYmKHQuYS5jPU50KFFuLE1lLDEsMCw1LDEpLFJzKHQuYSx0LmIpLFJzKHQuYSx0LmcpLHQuYz10LmIuYix0Lmk9dC5nLmIpLHQuYX1mdW5jdGlvbiBWaXQodCxlKXt2YXIgbixyLHM7Zm9yKHM9MCxyPXUoZS5LYih0KSwyMCkuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksMTcpLEJlKEZlKEsobiwoYWUoKSxIMSkpKSl8fCsrcztyZXR1cm4gc31mdW5jdGlvbiBobG4odCxlKXt2YXIgbixyLHM7cj1KMyhlKSxzPVp0KHZlKGl5KHIsKHhlKCksVGYpKSkpLG49Yi5NYXRoLm1heCgwLHMvMi0uNSksY0MoZSxuLDEpLHVlKHQsbmV3IFZWdChlLG4pKX1mdW5jdGlvbiBwaCgpe3BoPVgsX089bmV3IF9NKEswLDApLHlTPW5ldyBfTSgiRklSU1QiLDEpLGdiPW5ldyBfTShhMWUsMikseFM9bmV3IF9NKCJMQVNUIiwzKSxGeT1uZXcgX00obzFlLDQpfWZ1bmN0aW9uIHEwKCl7cTA9WCxiZnQ9bmV3IEtSKE9DLDApLFhPPW5ldyBLUigiUE9MWUxJTkUiLDEpLENFPW5ldyBLUigiT1JUSE9HT05BTCIsMikscXg9bmV3IEtSKCJTUExJTkVTIiwzKX1mdW5jdGlvbiBUeigpe1R6PVgsREN0PW5ldyB6ZXQoIkFTUEVDVF9SQVRJT19EUklWRU4iLDApLHFodD1uZXcgemV0KCJNQVhfU0NBTEVfRFJJVkVOIiwxKSxNQ3Q9bmV3IHpldCgiQVJFQV9EUklWRU4iLDIpfWZ1bmN0aW9uIFZEKCl7VkQ9WCxBRz1uZXcgcWV0KCJQMV9TVFJVQ1RVUkUiLDApLExHPW5ldyBxZXQoIlAyX1BST0NFU1NJTkdfT1JERVIiLDEpLE1HPW5ldyBxZXQoIlAzX0VYRUNVVElPTiIsMil9ZnVuY3Rpb24gX3ooKXtfej1YLEZodD1uZXcgUmV0KCJPVkVSTEFQX1JFTU9WQUwiLDApLE5odD1uZXcgUmV0KCJDT01QQUNUSU9OIiwxKSxQaHQ9bmV3IFJldCgiR1JBUEhfU0laRV9DQUxDVUxBVElPTiIsMil9ZnVuY3Rpb24gcncodCxlKXtyZXR1cm4gRTEoKSx2ZihyYiksYi5NYXRoLmFicyh0LWUpPD1yYnx8dD09ZXx8aXNOYU4odCkmJmlzTmFOKGUpPzA6dDxlPy0xOnQ+ZT8xOkx2KGlzTmFOKHQpLGlzTmFOKGUpKX1mdW5jdGlvbiBKcmUodCxlKXt2YXIgbixyO2ZvcihuPXNpKHQsMCk7bi5iIT1uLmQuYzspe2lmKHI9bE0odmUoaWkobikpKSxyPT1lKXJldHVybjtpZihyPmUpe1RydChuKTticmVha319WE0obixlKX1mdW5jdGlvbiBhbih0LGUpe3ZhciBuLHIscyxvLGg7aWYobj1lLmYsdjIodC5jLmQsbixlKSxlLmchPW51bGwpZm9yKHM9ZS5nLG89MCxoPXMubGVuZ3RoO288aDsrK28pcj1zW29dLHYyKHQuYy5lLHIsZSl9ZnVuY3Rpb24gZmxuKHQsZSxuLHIpe3ZhciBzLG8saDtmb3Iocz1lKzE7czxuOysrcylmb3Iobz1zO28+ZSYmci51ZSh0W28tMV0sdFtvXSk+MDstLW8paD10W29dLGxzKHQsbyx0W28tMV0pLGxzKHQsby0xLGgpfWZ1bmN0aW9uIGJoKHQsZSxuLHIpe2lmKGU8MCl5NXQodCxuLHIpO2Vsc2V7aWYoIW4uSWooKSl0aHJvdyBudChuZXcgUG4oY2Irbi5uZSgpK1dDKSk7dShuLDY2KS5OaigpLlRqKHQsdC55aCgpLGUscil9fWZ1bmN0aW9uIEN6KHQsZSl7aWYoZT09dC5kKXJldHVybiB0LmU7aWYoZT09dC5lKXJldHVybiB0LmQ7dGhyb3cgbnQobmV3IFBuKCJOb2RlICIrZSsiIG5vdCBwYXJ0IG9mIGVkZ2UgIit0KSl9ZnVuY3Rpb24gZGxuKHQsZSl7c3dpdGNoKGUuZyl7Y2FzZSAyOnJldHVybiB0LmI7Y2FzZSAxOnJldHVybiB0LmM7Y2FzZSA0OnJldHVybiB0LmQ7Y2FzZSAzOnJldHVybiB0LmE7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gdGllKHQsZSl7c3dpdGNoKGUuZyl7Y2FzZSAyOnJldHVybiB0LmI7Y2FzZSAxOnJldHVybiB0LmM7Y2FzZSA0OnJldHVybiB0LmQ7Y2FzZSAzOnJldHVybiB0LmE7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gbjN0KHQsZSxuLHIpe3N3aXRjaChlKXtjYXNlIDM6cmV0dXJuIHQuZjtjYXNlIDQ6cmV0dXJuIHQuZztjYXNlIDU6cmV0dXJuIHQuaTtjYXNlIDY6cmV0dXJuIHQuan1yZXR1cm4gVXl0KHQsZSxuLHIpfWZ1bmN0aW9uIGdsbih0KXtyZXR1cm4gdC5rIT0oR24oKSxxcyk/ITE6QzgobmV3IGtuKG51bGwsbmV3IEZ2KG5ldyBhcihscigkcyh0KS5hLktjKCksbmV3IEgpKSkpLG5ldyBMRil9ZnVuY3Rpb24gcGxuKHQpe3JldHVybiB0LmU9PW51bGw/dDooIXQuYyYmKHQuYz1uZXcgcmF0KCh0LmYmMjU2KSE9MCx0LmksdC5hLHQuZCwodC5mJjE2KSE9MCx0LmosdC5nLG51bGwpKSx0LmMpfWZ1bmN0aW9uIGJsbih0LGUpe3JldHVybiB0Lmg9PURJJiZ0Lm09PTAmJnQubD09MD8oZSYmKHViPWN1KDAsMCwwKSksZVV0KChJOCgpLFg4dCkpKTooZSYmKHViPWN1KHQubCx0Lm0sdC5oKSksY3UoMCwwLDApKX1mdW5jdGlvbiBXbyh0KXt2YXIgZTtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmdC5pbT09PUZ0P01wKGRsKHQpKSsiQCIrKGU9SmkodCk+Pj4wLGUudG9TdHJpbmcoMTYpKTp0LnRvU3RyaW5nKCl9ZnVuY3Rpb24gZUModCl7dmFyIGU7dGhpcy5hPShlPXUodC5lJiZ0LmUoKSw5KSxuZXcgb2goZSx1KGZmKGUsZS5sZW5ndGgpLDkpLDApKSx0aGlzLmI9TnQoUW4sTWUsMSx0aGlzLmEuYS5sZW5ndGgsNSwxKX1mdW5jdGlvbiB2bG4odCl7dmFyIGUsbixyO2Zvcih0aGlzLmE9bmV3IEEwLHI9bmV3IFModCk7ci5hPHIuYy5jLmxlbmd0aDspbj11KFEociksMTQpLGU9bmV3IGFZdCxDb24oZSxuKSxWcyh0aGlzLmEsZSl9ZnVuY3Rpb24gd2xuKHQpe0JtKCk7dmFyIGUsbixyLHM7Zm9yKGU9dC5vLmIscj11KHUoUGkodC5yLChiZSgpLHlyKSksMjEpLDg0KS5LYygpO3IuT2IoKTspbj11KHIuUGIoKSwxMTEpLHM9bi5lLHMuYis9ZX1mdW5jdGlvbiBnbCh0KXt2YXIgZTtpZih0LmIpe2lmKGdsKHQuYiksdC5iLmQhPXQuYyl0aHJvdyBudChuZXcgc2gpfWVsc2UgdC5kLmRjKCkmJihlPXUodC5mLmMueGModC5lKSwxNCksZSYmKHQuZD1lKSl9ZnVuY3Rpb24gbWxuKHQpe3ZhciBlO3JldHVybiB0PT1udWxsPyEwOihlPXQubGVuZ3RoLGU+MCYmKCRyKGUtMSx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGUtMSk9PTU4KSYmIUdpdCh0LGlBLHNBKSl9ZnVuY3Rpb24gR2l0KHQsZSxuKXt2YXIgcixzO2ZvcihyPTAscz10Lmxlbmd0aDtyPHM7cisrKWlmKHdpdCgoJHIocix0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KHIpKSxlLG4pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHlsbih0LGUpe3ZhciBuLHI7Zm9yKHI9dC5lLmEuZWMoKS5LYygpO3IuT2IoKTspaWYobj11KHIuUGIoKSwyNjYpLFQwbihlLG4uZCl8fERnbihlLG4uZCkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24geGxuKHQsZSl7dmFyIG4scixzO2ZvcihyPWF3bih0LGUpLHM9cltyLmxlbmd0aC0xXS8yLG49MDtuPHIubGVuZ3RoO24rKylpZihyW25dPj1zKXJldHVybiBlLmMrbjtyZXR1cm4gZS5jK2UuYi5nYygpfWZ1bmN0aW9uIGtsbih0LGUpe2w4KCk7dmFyIG4scixzLG87Zm9yKHI9Z3RlKHQpLHM9ZSxNOChyLDAsci5sZW5ndGgscyksbj0wO248ci5sZW5ndGg7bisrKW89aTFuKHQscltuXSxuKSxuIT1vJiZ0Qyh0LG4sbyl9ZnVuY3Rpb24gcjN0KHQsZSl7dmFyIG4scixzLG8saCxkO2ZvcihyPTAsbj0wLG89ZSxoPTAsZD1vLmxlbmd0aDtoPGQ7KytoKXM9b1toXSxzPjAmJihyKz1zLCsrbik7cmV0dXJuIG4+MSYmKHIrPXQuZCoobi0xKSkscn1mdW5jdGlvbiBpM3QodCl7dmFyIGUsbixyO2ZvcihyPW5ldyBfZyxyLmErPSJbIixlPTAsbj10LmdjKCk7ZTxuOyl5byhyLGRfKHQua2koZSkpKSwrK2U8biYmKHIuYSs9WGEpO3JldHVybiByLmErPSJdIixyLmF9ZnVuY3Rpb24gRWxuKHQpe3ZhciBlLG4scixzLG87cmV0dXJuIG89eDR0KHQpLG49Zk0odC5jKSxyPSFuLHImJihzPW5ldyB5ZyxRZihvLCJrbm93bkxheW91dGVycyIscyksZT1uZXcgbXp0KHMpLF9hKHQuYyxlKSksb31mdW5jdGlvbiBUbG4odCxlKXt2YXIgbixyLHM7Zm9yKEluKGUpLG49ITEscj1uZXcgUyh0KTtyLmE8ci5jLmMubGVuZ3RoOylzPVEocikscnkoZSxzLCExKSYmKENfKHIpLG49ITApO3JldHVybiBufWZ1bmN0aW9uIHMzdCh0KXt2YXIgZSxuLHI7Zm9yKHI9WnQodmUodC5hLldlKChkaSgpLHFHKSkpKSxuPW5ldyBTKHQuYS54ZigpKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoUShuKSw2ODApLF9oZSh0LGUscil9ZnVuY3Rpb24gVWl0KHQsZSl7dmFyIG4scjtmb3Iocj1uZXcgUyhlKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoUShyKSw0NiksdWUodC5iLmIsdShuLmIsODEpKSxfcnQodShuLmEsMTg5KSx1KG4uYiw4MSkpfWZ1bmN0aW9uIF9sbih0LGUsbil7dmFyIHIscztmb3Iocz10LmEuYixyPXMuYy5sZW5ndGg7cjxuO3IrKykkbShzLDAsbmV3IExoKHQuYSkpO0xvKGUsdShQZShzLHMuYy5sZW5ndGgtbiksMjkpKSx0LmJbZS5wXT1ufWZ1bmN0aW9uIENsbih0LGUsbil7dmFyIHI7cj1uLCFyJiYocj1JdnQobmV3IFdrLDApKSxtcihyLEhmZSwyKSxlc2UodC5iLGUsemMociwxKSksbzNuKHQsZSx6YyhyLDEpKSxKNG4oZSx6YyhyLDEpKSxvcihyKX1mdW5jdGlvbiBTbG4odCxlLG4scixzKXtSbCgpLHlmKGxmKHVmKGNmKGhmKG5ldyBTaCwwKSxzLmQuZS10KSxlKSxzLmQpKSx5ZihsZih1ZihjZihoZihuZXcgU2gsMCksbi1zLmEuZSkscy5hKSxyKSl9ZnVuY3Rpb24gYTN0KHQsZSxuLHIscyxvKXt0aGlzLmE9dCx0aGlzLmM9ZSx0aGlzLmI9bix0aGlzLmY9cix0aGlzLmQ9cyx0aGlzLmU9byx0aGlzLmM+MCYmdGhpcy5iPjAmJmp2dCh0aGlzLmMsdGhpcy5iLHRoaXMuYSl9ZnVuY3Rpb24gbzN0KHQpe1dpdCgpLHRoaXMuYz1MMSh1dChvdCh3Nm4sMSksTWUsODMxLDAsW0Z3ZV0pKSx0aGlzLmI9bmV3IEFyLHRoaXMuYT10LEFpKHRoaXMuYixvRywxKSxfdShCd2UsbmV3IEgkdCh0aGlzKSl9ZnVuY3Rpb24gZWllKHQsZSl7dmFyIG47cmV0dXJuIHQuZD9NbCh0LmIsZSk/dSh0cih0LmIsZSksNTEpOihuPWUuS2YoKSxBaSh0LmIsZSxuKSxuKTplLktmKCl9ZnVuY3Rpb24gYzN0KHQsZSl7dmFyIG47cmV0dXJuIEd0KHQpPT09R3QoZSk/ITA6X3QoZSw5MSk/KG49dShlLDkxKSx0LmU9PW4uZSYmdC5kPT1uLmQmJmNzbih0LG4uYSkpOiExfWZ1bmN0aW9uIFo2KHQpe3N3aXRjaChiZSgpLHQuZyl7Y2FzZSA0OnJldHVybiBPbjtjYXNlIDE6cmV0dXJuIEhuO2Nhc2UgMzpyZXR1cm4geXI7Y2FzZSAyOnJldHVybiBCbjtkZWZhdWx0OnJldHVybiBhY319ZnVuY3Rpb24gdTN0KHQsZSl7c3dpdGNoKGUpe2Nhc2UgMzpyZXR1cm4gdC5mIT0wO2Nhc2UgNDpyZXR1cm4gdC5nIT0wO2Nhc2UgNTpyZXR1cm4gdC5pIT0wO2Nhc2UgNjpyZXR1cm4gdC5qIT0wfXJldHVybiBjeXQodCxlKX1mdW5jdGlvbiBBbG4odCl7c3dpdGNoKHQuZyl7Y2FzZSAwOnJldHVybiBuZXcgc1o7Y2FzZSAxOnJldHVybiBuZXcgSEY7ZGVmYXVsdDp0aHJvdyBudChuZXcgUG4oRWN0Kyh0LmYhPW51bGw/dC5mOiIiK3QuZykpKX19ZnVuY3Rpb24gbmllKHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMDpyZXR1cm4gbmV3IHFGO2Nhc2UgMTpyZXR1cm4gbmV3IFZGO2RlZmF1bHQ6dGhyb3cgbnQobmV3IFBuKGpvdCsodC5mIT1udWxsP3QuZjoiIit0LmcpKSl9fWZ1bmN0aW9uIHJpZSh0KXtzd2l0Y2godC5nKXtjYXNlIDA6cmV0dXJuIG5ldyB6cHQ7Y2FzZSAxOnJldHVybiBuZXcgZ3F0O2RlZmF1bHQ6dGhyb3cgbnQobmV3IFBuKHBIKyh0LmYhPW51bGw/dC5mOiIiK3QuZykpKX19ZnVuY3Rpb24gTGxuKHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMTpyZXR1cm4gbmV3IHRaO2Nhc2UgMjpyZXR1cm4gbmV3IHlXdDtkZWZhdWx0OnRocm93IG50KG5ldyBQbihFY3QrKHQuZiE9bnVsbD90LmY6IiIrdC5nKSkpfX1mdW5jdGlvbiBNbG4odCl7dmFyIGUsbjtpZih0LmIpcmV0dXJuIHQuYjtmb3Iobj16MT9udWxsOnQuZDtuOyl7aWYoZT16MT9udWxsOm4uYixlKXJldHVybiBlO249ejE/bnVsbDpuLmR9cmV0dXJuIHI4KCksQzd0fWZ1bmN0aW9uIERsbih0KXt2YXIgZSxuLHI7cmV0dXJuIHQuZT09MD8wOihlPXQuZDw8NSxuPXQuYVt0LmQtMV0sdC5lPDAmJihyPWRuZSh0KSxyPT10LmQtMSYmKC0tbixuPW58MCkpLGUtPWxJKG4pLGUpfWZ1bmN0aW9uIElsbih0KXt2YXIgZSxuLHI7cmV0dXJuIHQ8R0gubGVuZ3RoP0dIW3RdOihuPXQ+PjUsZT10JjMxLHI9TnQoU3IsSnIsMjUsbisxLDE1LDEpLHJbbl09MTw8ZSxuZXcgWTMoMSxuKzEscikpfWZ1bmN0aW9uIGlpZSh0KXt2YXIgZSxuLHI7cmV0dXJuIG49dC56ZygpLG4/KGU9dC5VZygpLF90KGUsMTYwKSYmKHI9aWllKHUoZSwxNjApKSxyIT1udWxsKT9yKyIuIituOm4pOm51bGx9ZnVuY3Rpb24gcnkodCxlLG4pe3ZhciByLHM7Zm9yKHM9dC5LYygpO3MuT2IoKTspaWYocj1zLlBiKCksR3QoZSk9PT1HdChyKXx8ZSE9bnVsbCYmU2koZSxyKSlyZXR1cm4gbiYmcy5RYigpLCEwO3JldHVybiExfWZ1bmN0aW9uIGwzdCh0LGUsbil7dmFyIHIscztpZigrK3QuaixuLmRjKCkpcmV0dXJuITE7Zm9yKHM9bi5LYygpO3MuT2IoKTspcj1zLlBiKCksdC5IaShlLHQub2koZSxyKSksKytlO3JldHVybiEwfWZ1bmN0aW9uIE9sbih0LGUsbixyKXt2YXIgcyxvO2lmKG89bi1lLG88Mylmb3IoO288MzspdCo9MTAsKytvO2Vsc2V7Zm9yKHM9MTtvPjM7KXMqPTEwLC0tbzt0PSh0KyhzPj4xKSkvc3wwfXJldHVybiByLmk9dCwhMH1mdW5jdGlvbiBObG4odCl7cmV0dXJuIE9pdCgpLEZuKCksISEodGllKHUodC5hLDgxKS5qLHUodC5iLDEwMykpfHx1KHQuYSw4MSkuZC5lIT0wJiZ0aWUodSh0LmEsODEpLmosdSh0LmIsMTAzKSkpfWZ1bmN0aW9uIFBsbih0KXtPJCgpLHUodC5XZSgoZGkoKSxtYikpLDE3NCkuSGMoKGJsKCksV0cpKSYmKHUodC5XZShLeSksMTc0KS5GYygoaWwoKSxIeCkpLHUodC5XZShtYiksMTc0KS5NYyhXRykpfWZ1bmN0aW9uIHNpZSh0LGUpe3ZhciBuLHI7aWYoZSl7Zm9yKG49MDtuPHQuaTsrK24paWYocj11KHQuZ1tuXSwzNjYpLHIuRGkoZSkpcmV0dXJuITE7cmV0dXJuIE9yKHQsZSl9ZWxzZSByZXR1cm4hMX1mdW5jdGlvbiBoM3QodCl7dmFyIGUsbixyLHM7Zm9yKGU9bmV3IHlnLHM9bmV3IEwodC5iLktjKCkpO3MuYi5PYigpOylyPXUocy5iLlBiKCksNjg2KSxuPVEwbihyKSx3ZW4oZSxlLmEubGVuZ3RoLG4pO3JldHVybiBlLmF9ZnVuY3Rpb24gZjN0KHQpe3ZhciBlO3JldHVybiF0LmMmJih0LmM9bmV3IE9zKSxhYSh0LmQsbmV3IEZ1KSxCd24odCksZT1fdm4odCkseXMobmV3IGtuKG51bGwsbmV3IFRuKHQuZCwxNikpLG5ldyBwcih0KSksZX1mdW5jdGlvbiBTeih0KXt2YXIgZTtyZXR1cm4gdC5EYiY2ND9YXyh0KTooZT1uZXcgQWgoWF8odCkpLGUuYSs9IiAoaW5zdGFuY2VDbGFzc05hbWU6ICIseW8oZSx0LkQpLGUuYSs9IikiLGUuYSl9ZnVuY3Rpb24gRmxuKHQsZSl7dmFyIG4scixzLG87ZSYmKHM9UjAoZSwieCIpLG49bmV3IGd6dCh0KSxOOChuLmEsKEluKHMpLHMpKSxvPVIwKGUsInkiKSxyPW5ldyBwenQodCksRjgoci5hLChJbihvKSxvKSkpfWZ1bmN0aW9uIEJsbih0LGUpe3ZhciBuLHIscyxvO2UmJihzPVIwKGUsIngiKSxuPW5ldyBsenQodCksUDgobi5hLChJbihzKSxzKSksbz1SMChlLCJ5Iikscj1uZXcgZnp0KHQpLEI4KHIuYSwoSW4obyksbykpKX1mdW5jdGlvbiBlcyh0LGUpe3ZhciBuLHIscztpZihuPSh0Lmk9PW51bGwmJmJkKHQpLHQuaSkscj1lLmFqKCksciE9LTEpe2ZvcihzPW4ubGVuZ3RoO3I8czsrK3IpaWYobltyXT09ZSlyZXR1cm4gcn1yZXR1cm4tMX1mdW5jdGlvbiBSbG4odCl7dmFyIGUsbixyLHMsbztmb3Iobj11KHQuZyw2NzQpLHI9dC5pLTE7cj49MDstLXIpZm9yKGU9bltyXSxzPTA7czxyOysrcylpZihvPW5bc10scmxlKHQsZSxvKSl7bngodCxyKTticmVha319ZnVuY3Rpb24gamxuKHQpe3ZhciBlPXQuZTtmdW5jdGlvbiBuKHIpe3JldHVybiFyfHxyLmxlbmd0aD09MD8iIjoiCSIrci5qb2luKGAKCWApfXJldHVybiBlJiYoZS5zdGFja3x8bih0W3phdF0pKX1mdW5jdGlvbiBkM3QodCl7Vm0oKTt2YXIgZTtzd2l0Y2goZT10LlBjKCksZS5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbXV0O2Nhc2UgMTpyZXR1cm4gbmV3IExudChEcihlWzBdKSk7ZGVmYXVsdDpyZXR1cm4gbmV3IHVydChvbG4oZSkpfX1mdW5jdGlvbiBpdyh0LGUpe3N3aXRjaChlLmcpe2Nhc2UgMTpyZXR1cm4gSTYodC5qLChWdSgpLExFdCkpO2Nhc2UgMjpyZXR1cm4gSTYodC5qLChWdSgpLERFdCkpO2RlZmF1bHQ6cmV0dXJuIHBuKCkscG4oKSx1b319ZnVuY3Rpb24gZzN0KHQsZSl7c3dpdGNoKGUpe2Nhc2UgMzpYdih0LDApO3JldHVybjtjYXNlIDQ6UXYodCwwKTtyZXR1cm47Y2FzZSA1OkN1KHQsMCk7cmV0dXJuO2Nhc2UgNjpTdSh0LDApO3JldHVybn1xeXQodCxlKX1mdW5jdGlvbiBXaXQoKXtXaXQ9WCxJUigpLG9HPSh4ZSgpLEJ3KSxCd2U9TDEodXQob3QoSmh0LDEpLERrdCwxNDYsMCxbQU8sVGYsRngsRncsVnksbmh0LHZFLHdFLHJodCxDUyxaNCwkMixKNF0pKX1mdW5jdGlvbiBhaWUodCl7dmFyIGUsbjtlPXQuZD09KHJ4KCksaUUpLG49ZDR0KHQpLGUmJiFufHwhZSYmbj9lZSh0LmEsKHhlKCksTWQpLChRZCgpLHpPKSk6ZWUodC5hLCh4ZSgpLE1kKSwoUWQoKSwkTykpfWZ1bmN0aW9uICRsbih0LGUpe3ZhciBuO3JldHVybiBuPXUoJGwodCxhMihuZXcga2UsbmV3IG5lLG5ldyBwaSx1dChvdCh3bCwxKSxvZSwxMzIsMCxbKE4xKCksWWwpXSkpKSwxNSksbi5RYyhNS3Qobi5nYygpKSl9ZnVuY3Rpb24gQXooKXtBej1YLHlmdD1uZXcgUVIoIlNJTVBMRSIsMCksU0F0PW5ldyBRUigiR1JPVVBfREVDIiwxKSxMQXQ9bmV3IFFSKCJHUk9VUF9NSVhFRCIsMiksQUF0PW5ldyBRUigiR1JPVVBfSU5DIiwzKX1mdW5jdGlvbiBLaXQoKXtLaXQ9WCxNZnQ9bmV3IGVCLFpBdD1uZXcgbkIsSkF0PW5ldyByQix0THQ9bmV3IENrLGVMdD1uZXcgaUIsbkx0PW5ldyBzQixyTHQ9bmV3IFhaLGlMdD1uZXcgU2ssc0x0PW5ldyBBa31mdW5jdGlvbiBvaWUodCxlLG4pe3BlZSgpLG9xdC5jYWxsKHRoaXMpLHRoaXMuYT1aYihLZ2UsW3JlLEc2dF0sWzU5NSwyMTJdLDAsW1FILEZ1dF0sMiksdGhpcy5jPW5ldyBTNix0aGlzLmc9dCx0aGlzLmY9ZSx0aGlzLmQ9bn1mdW5jdGlvbiBwM3QodCxlKXt0aGlzLm49WmIoRGIsW3JlLGNvdF0sWzM2NCwyNV0sMTQsW2UsQ3MoYi5NYXRoLmNlaWwodC8zMikpXSwyKSx0aGlzLm89dCx0aGlzLnA9ZSx0aGlzLmo9dC0xPj4xLHRoaXMuaz1lLTE+PjF9ZnVuY3Rpb24gemxuKHQsZSl7bXIoZSwiRW5kIGxhYmVsIHBvc3QtcHJvY2Vzc2luZyIsMSkseXMoV2koZWMobmV3IGtuKG51bGwsbmV3IFRuKHQuYiwxNikpLG5ldyBkWSksbmV3IGdZKSxuZXcgcFkpLG9yKGUpfWZ1bmN0aW9uIHFsbih0LGUsbil7dmFyIHIscztyZXR1cm4gcj1adCh0LnBbZS5pLnBdKStadCh0LmRbZS5pLnBdKStlLm4uYitlLmEuYixzPVp0KHQucFtuLmkucF0pK1p0KHQuZFtuLmkucF0pK24ubi5iK24uYS5iLHMtcn1mdW5jdGlvbiBIbG4odCxlLG4pe3ZhciByLHM7Zm9yKHI9R3Mobixwbykscz0wO19jKHIsMCkhPTAmJnM8ZTtzKyspcj1SYShyLEdzKHRbc10scG8pKSx0W3NdPU1yKHIpLHI9UnAociwzMik7cmV0dXJuIE1yKHIpfWZ1bmN0aW9uIEx6KHQpe3ZhciBlLG4scixzO2ZvcihzPTAsbj0wLHI9dC5sZW5ndGg7bjxyO24rKyllPSgkcihuLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQobikpLGU8NjQmJihzPUExKHMsTTAoMSxlKSkpO3JldHVybiBzfWZ1bmN0aW9uIFZsbih0KXt2YXIgZTtyZXR1cm4gdD09bnVsbD9udWxsOm5ldyBGcCgoZT1IYyh0LCEwKSxlLmxlbmd0aD4wJiYoJHIoMCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KDApPT00Myk/ZS5zdWJzdHIoMSk6ZSkpfWZ1bmN0aW9uIEdsbih0KXt2YXIgZTtyZXR1cm4gdD09bnVsbD9udWxsOm5ldyBGcCgoZT1IYyh0LCEwKSxlLmxlbmd0aD4wJiYoJHIoMCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KDApPT00Myk/ZS5zdWJzdHIoMSk6ZSkpfWZ1bmN0aW9uIGIzdCh0LGUpe3ZhciBuO3JldHVybiB0Lmk+MCYmKGUubGVuZ3RoPHQuaSYmKG49X0QoZGwoZSkuYyx0LmkpLGU9biksUGModC5nLDAsZSwwLHQuaSkpLGUubGVuZ3RoPnQuaSYmbHMoZSx0LmksbnVsbCksZX1mdW5jdGlvbiBldSh0LGUsbil7dmFyIHIscyxvO3JldHVybiB0LmVqKCk/KHI9dC5pLG89dC5maigpLHpEKHQscixlKSxzPXQuWmkoMyxudWxsLGUscixvKSxuP24uRWkocyk6bj1zKTp6RCh0LHQuaSxlKSxufWZ1bmN0aW9uIFVsbih0LGUsbil7dmFyIHIscztyZXR1cm4gcj1uZXcgRjAodC5lLDQsMTAsKHM9ZS5jLF90KHMsODgpP3UocywyNik6KGxuKCksUWgpKSxudWxsLCRnKHQsZSksITEpLG4/bi5FaShyKTpuPXIsbn1mdW5jdGlvbiBXbG4odCxlLG4pe3ZhciByLHM7cmV0dXJuIHI9bmV3IEYwKHQuZSwzLDEwLG51bGwsKHM9ZS5jLF90KHMsODgpP3UocywyNik6KGxuKCksUWgpKSwkZyh0LGUpLCExKSxuP24uRWkocik6bj1yLG59ZnVuY3Rpb24gY2llKHQpe0JtKCk7dmFyIGU7cmV0dXJuIGU9bmV3IFNvKHUodC5lLldlKChkaSgpLG81KSksOCkpLHQuQi5IYygoYmwoKSxBRSkpJiYoZS5hPD0wJiYoZS5hPTIwKSxlLmI8PTAmJihlLmI9MjApKSxlfWZ1bmN0aW9uIHVpZSh0KXtzeSgpO3ZhciBlO3JldHVybih0LnE/dC5xOihwbigpLHBuKCksYTApKS5fYigoeGUoKSxOdykpP2U9dShLKHQsTncpLDE5Nyk6ZT11KEsoJGEodCksX1MpLDE5NyksZX1mdW5jdGlvbiBpeSh0LGUpe3ZhciBuLHI7cmV0dXJuIHI9bnVsbCxlYSh0LCh4ZSgpLHNHKSkmJihuPXUoSyh0LHNHKSw5NCksbi5YZShlKSYmKHI9bi5XZShlKSkpLHI9PW51bGwmJihyPUsoJGEodCksZSkpLHJ9ZnVuY3Rpb24gbGllKHQsZSl7dmFyIG4scixzO3JldHVybiBfdChlLDQyKT8obj11KGUsNDIpLHI9bi5jZCgpLHM9bnkodC5SYygpLHIpLGRkKHMsbi5kZCgpKSYmKHMhPW51bGx8fHQuUmMoKS5fYihyKSkpOiExfWZ1bmN0aW9uIFlpdCh0LGUpe3ZhciBuLHIscztyZXR1cm4gdC5mPjA/KHQucWooKSxyPWU9PW51bGw/MDpKaShlKSxzPShyJlRpKSV0LmQubGVuZ3RoLG49bGNlKHQscyxyLGUpLG4hPS0xKTohMX1mdW5jdGlvbiBKZih0LGUpe3ZhciBuLHIscztyZXR1cm4gdC5mPjAmJih0LnFqKCkscj1lPT1udWxsPzA6SmkoZSkscz0ociZUaSkldC5kLmxlbmd0aCxuPXQ1dCh0LHMscixlKSxuKT9uLmRkKCk6bnVsbH1mdW5jdGlvbiBHRCh0LGUpe3ZhciBuLHIscyxvO2ZvcihvPWh1KHQuZS5UZygpLGUpLG49dSh0LmcsMTE5KSxzPTA7czx0Lmk7KytzKWlmKHI9bltzXSxvLnJsKHIuYWsoKSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gaGllKHQpe2lmKHQuYj09bnVsbCl7Zm9yKDt0LmEuT2IoKTspaWYodC5iPXQuYS5QYigpLCF1KHQuYiw0OSkuWmcoKSlyZXR1cm4hMDtyZXR1cm4gdC5iPW51bGwsITF9ZWxzZSByZXR1cm4hMH1mdW5jdGlvbiBmaWUodCxlKXt0Lm1qKCk7dHJ5e3QuZC5WYyh0LmUrKyxlKSx0LmY9dC5kLmosdC5nPS0xfWNhdGNoKG4pe3Rocm93IG49cnMobiksX3Qobiw3Myk/bnQobmV3IHNoKTpudChuKX19ZnVuY3Rpb24gTXoodCxlKXtpMnQoKTt2YXIgbixyO3JldHVybiBuPXpNKChiUigpLGJSKCksc1MpKSxyPW51bGwsZT09biYmKHI9dShqYyhLOHQsdCksNjE1KSkscnx8KHI9bmV3IFhZdCh0KSxlPT1uJiZBbyhLOHQsdCxyKSkscn1mdW5jdGlvbiBkaWUodCxlKXt2YXIgbixyO3QuYT1SYSh0LmEsMSksdC5jPWIuTWF0aC5taW4odC5jLGUpLHQuYj1iLk1hdGgubWF4KHQuYixlKSx0LmQrPWUsbj1lLXQuZixyPXQuZStuLHQuZj1yLXQuZS1uLHQuZT1yfWZ1bmN0aW9uIEtsbih0LGUpe3ZhciBuO3QuYz1lLHQuYT1EbG4oZSksdC5hPDU0JiYodC5mPShuPWUuZD4xP0ExKE0wKGUuYVsxXSwzMiksR3MoZS5hWzBdLHBvKSk6R3MoZS5hWzBdLHBvKSxHdihJYShlLmUsbikpKSl9ZnVuY3Rpb24gVUQodCxlKXt2YXIgbjtyZXR1cm4gVm8odCkmJlZvKGUpJiYobj10JWUsSUk8biYmbjxFMik/bjpXcCgobDZ0KFZvKHQpP0RoKHQpOnQsVm8oZSk/RGgoZSk6ZSwhMCksdWIpKX1mdW5jdGlvbiBuQyh0LGUpe3ZhciBuO2c0bihlKSxuPXUoSyh0LCh4ZSgpLFpWKSksMjc2KSxuJiZlZSh0LFpWLFdmbihuKSksQWcodC5jKSxBZyh0LmYpLHZtdCh0LmQpLHZtdCh1KEsodCxuRyksMjA3KSl9ZnVuY3Rpb24gZ2llKHQpe3RoaXMuZT1OdChTcixKciwyNSx0Lmxlbmd0aCwxNSwxKSx0aGlzLmM9TnQoeGwsaTAsMjUsdC5sZW5ndGgsMTYsMSksdGhpcy5iPU50KHhsLGkwLDI1LHQubGVuZ3RoLDE2LDEpLHRoaXMuZj0wfWZ1bmN0aW9uIFlsbih0KXt2YXIgZSxuO2Zvcih0Lmo9TnQoZ2EsVG8sMjUsdC5wLmMubGVuZ3RoLDE1LDEpLG49bmV3IFModC5wKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoUShuKSwxMCksdC5qW2UucF09ZS5vLmIvdC5pfWZ1bmN0aW9uIFhpdCh0KXt2YXIgZTt0LmMhPTAmJihlPXUoUGUodC5hLHQuYiksMjg3KSxlLmI9PTE/KCsrdC5iLHQuYjx0LmEuYy5sZW5ndGgmJkpCKHUoUGUodC5hLHQuYiksMjg3KSkpOi0tZS5iLC0tdC5jKX1mdW5jdGlvbiBYbG4odCl7dmFyIGU7ZT10LmE7ZG8gZT11KElyKG5ldyBhcihscigkcyhlKS5hLktjKCksbmV3IEgpKSksMTcpLmQuaSxlLms9PShHbigpLGNhKSYmdWUodC5lLGUpO3doaWxlKGUuaz09KEduKCksY2EpKX1mdW5jdGlvbiB2M3QoKXt2M3Q9WCxfQXQ9bmV3IE12KDE1KSxwNGU9bmV3IGFvKChkaSgpLFYyKSxfQXQpLHY0ZT1uZXcgYW8oRzIsMTUpLGI0ZT1uZXcgYW8oZ2Z0LGRlKDApKSxnNGU9bmV3IGFvKGp4LFA3KX1mdW5jdGlvbiBObCgpe05sPVgsbk49bmV3IFhSKCJQT1JUUyIsMCksVzI9bmV3IFhSKCJQT1JUX0xBQkVMUyIsMSksZU49bmV3IFhSKCJOT0RFX0xBQkVMUyIsMiksWHk9bmV3IFhSKCJNSU5JTVVNX1NJWkUiLDMpfWZ1bmN0aW9uIFdEKHQsZSl7dmFyIG4scjtmb3Iocj1lLmxlbmd0aCxuPTA7bjxyO24rPTIpcWModCwoJHIobixlLmxlbmd0aCksZS5jaGFyQ29kZUF0KG4pKSwoJHIobisxLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQobisxKSkpfWZ1bmN0aW9uIHBpZSh0LGUsbil7dmFyIHIscyxvLGg7Zm9yKG89ZS10LmUsaD1uLXQuZixzPW5ldyBTKHQuYSk7cy5hPHMuYy5jLmxlbmd0aDspcj11KFEocyksMTg3KSxZRChyLHIucytvLHIudCtoKTt0LmU9ZSx0LmY9bn1mdW5jdGlvbiBRbG4odCxlKXt2YXIgbixyLHMsbztmb3Iobz1lLmIuYix0LmE9bmV3IGNzLHQuYj1OdChTcixKciwyNSxvLDE1LDEpLG49MCxzPXNpKGUuYiwwKTtzLmIhPXMuZC5jOylyPXUoaWkocyksODYpLHIuZz1uKyt9ZnVuY3Rpb24gYmllKHQsZSl7dmFyIG4scixzLG87cmV0dXJuIG49ZT4+NSxlJj0zMSxzPXQuZCtuKyhlPT0wPzA6MSkscj1OdChTcixKciwyNSxzLDE1LDEpLEtkbihyLHQuYSxuLGUpLG89bmV3IFkzKHQuZSxzLHIpLE9fKG8pLG99ZnVuY3Rpb24gdzN0KHQsZSxuKXt2YXIgcixzO3I9dShqYyhERSxlKSwxMTcpLHM9dShqYyhoQSxlKSwxMTcpLG4/KEFvKERFLHQsciksQW8oaEEsdCxzKSk6KEFvKGhBLHQsciksQW8oREUsdCxzKSl9ZnVuY3Rpb24gdmllKHQsZSxuKXt2YXIgcixzLG87Zm9yKHM9bnVsbCxvPXQuYjtvOyl7aWYocj10LmEudWUoZSxvLmQpLG4mJnI9PTApcmV0dXJuIG87cj49MD9vPW8uYVsxXToocz1vLG89by5hWzBdKX1yZXR1cm4gc31mdW5jdGlvbiB3aWUodCxlLG4pe3ZhciByLHMsbztmb3Iocz1udWxsLG89dC5iO287KXtpZihyPXQuYS51ZShlLG8uZCksbiYmcj09MClyZXR1cm4gbztyPD0wP289by5hWzBdOihzPW8sbz1vLmFbMV0pfXJldHVybiBzfWZ1bmN0aW9uIFpsbih0LGUsbixyKXt2YXIgcyxvLGg7cmV0dXJuIHM9ITEsTzNuKHQuZixuLHIpJiYoRWhuKHQuZix0LmFbZV1bbl0sdC5hW2VdW3JdKSxvPXQuYVtlXSxoPW9bcl0sb1tyXT1vW25dLG9bbl09aCxzPSEwKSxzfWZ1bmN0aW9uIG0zdCh0LGUsbixyLHMpe3ZhciBvLGgsZDtmb3IoaD1zO2UuYiE9ZS5jOylvPXUoUDYoZSksMTApLGQ9dShyYyhvLHIpLlhiKDApLDExKSx0LmRbZC5wXT1oKyssbi5jW24uYy5sZW5ndGhdPWQ7cmV0dXJuIGh9ZnVuY3Rpb24geTN0KHQsZSxuKXt2YXIgcixzLG8saCxkO3JldHVybiBoPXQuayxkPWUuayxyPW5baC5nXVtkLmddLHM9dmUoaXkodCxyKSksbz12ZShpeShlLHIpKSxiLk1hdGgubWF4KChJbihzKSxzKSwoSW4obyksbykpfWZ1bmN0aW9uIEpsbih0LGUsbil7dmFyIHIscyxvLGg7Zm9yKHI9bi90LmMubGVuZ3RoLHM9MCxoPW5ldyBTKHQpO2guYTxoLmMuYy5sZW5ndGg7KW89dShRKGgpLDIwMCksRXJlKG8sby5mK3IqcyksSTFuKG8sZSxyKSwrK3N9ZnVuY3Rpb24gbWllKHQsZSxuKXt2YXIgcixzLG8saDtmb3Iocz11KHRyKHQuYixuKSwxNzcpLHI9MCxoPW5ldyBTKGUuaik7aC5hPGguYy5jLmxlbmd0aDspbz11KFEoaCksMTEzKSxzW28uZC5wXSYmKytyO3JldHVybiByfWZ1bmN0aW9uIHlpZSh0KXt2YXIgZSxuO3JldHVybiBlPXUoTW4odC5hLDQpLDEyNiksZSE9bnVsbD8obj1OdChDZnQsZXV0LDQxNSxlLmxlbmd0aCwwLDEpLFBjKGUsMCxuLDAsZS5sZW5ndGgpLG4pOkI0ZX1mdW5jdGlvbiB0aG4oKXt2YXIgdDtyZXR1cm4gekghPTAmJih0PWJzbigpLHQtcGdlPjJlMyYmKHBnZT10LHFIPWIuc2V0VGltZW91dChhWWUsMTApKSksekgrKz09MD8oTmFuKChVcHQoKSxXOHQpKSwhMCk6ITF9ZnVuY3Rpb24gZWhuKHQsZSl7dmFyIG4scixzO2ZvcihyPW5ldyBhcihscigkcyh0KS5hLktjKCksbmV3IEgpKTtWcihyKTspaWYobj11KElyKHIpLDE3KSxzPW4uZC5pLHMuYz09ZSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiB4M3QodCxlKXt2YXIgbixyO2lmKF90KGUsMjQ1KSl7cj11KGUsMjQ1KTt0cnl7cmV0dXJuIG49dC52ZChyKSxuPT0wfWNhdGNoKHMpe2lmKHM9cnMocyksIV90KHMsMjA1KSl0aHJvdyBudChzKX19cmV0dXJuITF9ZnVuY3Rpb24gbmhuKCl7cmV0dXJuIEVycm9yLnN0YWNrVHJhY2VMaW1pdD4wPyhiLkVycm9yLnN0YWNrVHJhY2VMaW1pdD1FcnJvci5zdGFja1RyYWNlTGltaXQ9NjQsITApOiJzdGFjayJpbiBuZXcgRXJyb3J9ZnVuY3Rpb24gcmhuKHQsZSl7cmV0dXJuIEUxKCksRTEoKSx2ZihyYiksKGIuTWF0aC5hYnModC1lKTw9cmJ8fHQ9PWV8fGlzTmFOKHQpJiZpc05hTihlKT8wOnQ8ZT8tMTp0PmU/MTpMdihpc05hTih0KSxpc05hTihlKSkpPjB9ZnVuY3Rpb24gazN0KHQsZSl7cmV0dXJuIEUxKCksRTEoKSx2ZihyYiksKGIuTWF0aC5hYnModC1lKTw9cmJ8fHQ9PWV8fGlzTmFOKHQpJiZpc05hTihlKT8wOnQ8ZT8tMTp0PmU/MTpMdihpc05hTih0KSxpc05hTihlKSkpPDB9ZnVuY3Rpb24geGllKHQsZSl7cmV0dXJuIEUxKCksRTEoKSx2ZihyYiksKGIuTWF0aC5hYnModC1lKTw9cmJ8fHQ9PWV8fGlzTmFOKHQpJiZpc05hTihlKT8wOnQ8ZT8tMTp0PmU/MTpMdihpc05hTih0KSxpc05hTihlKSkpPD0wfWZ1bmN0aW9uIFFpdCh0LGUpe2Zvcih2YXIgbj0wOyFlW25dfHxlW25dPT0iIjspbisrO2Zvcih2YXIgcj1lW24rK107bjxlLmxlbmd0aDtuKyspIWVbbl18fGVbbl09PSIifHwocis9dCtlW25dKTtyZXR1cm4gcn1mdW5jdGlvbiBJaCh0LGUsbil7dmFyIHIscyxvLGg7Zm9yKG89ZStuLG1tdChlLG8sdC5sZW5ndGgpLGg9IiIscz1lO3M8bzspcj1iLk1hdGgubWluKHMrMWU0LG8pLGgrPVVlbih0LnNsaWNlKHMscikpLHM9cjtyZXR1cm4gaH1mdW5jdGlvbiBraWUodCl7dmFyIGUsbixyLHMsbztpZih0PT1udWxsKXJldHVybiBudWxsO2ZvcihvPW5ldyBsZSxuPVRpdCh0KSxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWU9bltyXSx1ZShvLEhjKGUsITApKTtyZXR1cm4gb31mdW5jdGlvbiBFaWUodCl7dmFyIGUsbixyLHMsbztpZih0PT1udWxsKXJldHVybiBudWxsO2ZvcihvPW5ldyBsZSxuPVRpdCh0KSxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWU9bltyXSx1ZShvLEhjKGUsITApKTtyZXR1cm4gb31mdW5jdGlvbiBUaWUodCl7dmFyIGUsbixyLHMsbztpZih0PT1udWxsKXJldHVybiBudWxsO2ZvcihvPW5ldyBsZSxuPVRpdCh0KSxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWU9bltyXSx1ZShvLEhjKGUsITApKTtyZXR1cm4gb31mdW5jdGlvbiBfaWUodCxlKXt2YXIgbixyLHM7aWYodC5jKVF2KHQuYyxlKTtlbHNlIGZvcihuPWUtSHUodCkscz1uZXcgUyh0LmQpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShRKHMpLDE1NyksX2llKHIsSHUocikrbil9ZnVuY3Rpb24gQ2llKHQsZSl7dmFyIG4scixzO2lmKHQuYylYdih0LmMsZSk7ZWxzZSBmb3Iobj1lLUxsKHQpLHM9bmV3IFModC5hKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoUShzKSwxNTcpLENpZShyLExsKHIpK24pfWZ1bmN0aW9uIGlobih0LGUpe3ZhciBuLHIscyxvO2ZvcihzPW5ldyBKYyhlLmdjKCkpLHI9ZS5LYygpO3IuT2IoKTspbj1yLlBiKCksbz1oYXQodCx1KG4sNTYpKSxvJiYocy5jW3MuYy5sZW5ndGhdPW8pO3JldHVybiBzfWZ1bmN0aW9uIER6KHQsZSl7dmFyIG4scixzO3JldHVybiB0LnFqKCkscj1lPT1udWxsPzA6SmkoZSkscz0ociZUaSkldC5kLmxlbmd0aCxuPXQ1dCh0LHMscixlKSxuPyhQZWUodCxuKSxuLmRkKCkpOm51bGx9ZnVuY3Rpb24gc3codCl7dmFyIGUsbjtmb3Iobj1SYWUodCksZT1udWxsO3QuYz09MjspbWkodCksZXx8KGU9KHlpKCkseWkoKSxuZXcgbF8oMikpLHgyKGUsbiksbj1lKSxuLiRsKFJhZSh0KSk7cmV0dXJuIG59ZnVuY3Rpb24gczcodCl7dmFyIGUsbixyO2lmKHI9bnVsbCxlPUNkIGluIHQuYSxuPSFlLG4pdGhyb3cgbnQobmV3IG9kKCJFdmVyeSBlbGVtZW50IG11c3QgaGF2ZSBhbiBpZC4iKSk7cmV0dXJuIHI9aXgoSTAodCxDZCkpLHJ9ZnVuY3Rpb24gSXoodCl7dmFyIGUsbixyO2lmKHI9dC5aZygpLCFyKWZvcihlPTAsbj10LmVoKCk7bjtuPW4uZWgoKSl7aWYoKytlPnVvdClyZXR1cm4gbi5maCgpO2lmKHI9bi5aZygpLHJ8fG49PXQpYnJlYWt9cmV0dXJuIHJ9ZnVuY3Rpb24gRTN0KHQpe3JldHVybiBnJCgpLF90KHQsMTU2KT91KHRyKGNOLFNnZSksMjg4KS52Zyh0KTpNbChjTixkbCh0KSk/dSh0cihjTixkbCh0KSksMjg4KS52Zyh0KTpudWxsfWZ1bmN0aW9uIHNobih0KXtpZihPeigkNyx0KSlyZXR1cm4gRm4oKSxXNztpZihPeihQY3QsdCkpcmV0dXJuIEZuKCksTzI7dGhyb3cgbnQobmV3IFBuKCJFeHBlY3RpbmcgdHJ1ZSBvciBmYWxzZSIpKX1mdW5jdGlvbiBhaG4odCxlKXtpZihlLmM9PXQpcmV0dXJuIGUuZDtpZihlLmQ9PXQpcmV0dXJuIGUuYzt0aHJvdyBudChuZXcgUG4oIklucHV0IGVkZ2UgaXMgbm90IGNvbm5lY3RlZCB0byB0aGUgaW5wdXQgcG9ydC4iKSl9ZnVuY3Rpb24gU2llKHQsZSl7cmV0dXJuIHQuZT5lLmU/MTp0LmU8ZS5lPy0xOnQuZD5lLmQ/dC5lOnQuZDxlLmQ/LWUuZTp0LmUqSXl0KHQuYSxlLmEsdC5kKX1mdW5jdGlvbiBBaWUodCl7cmV0dXJuIHQ+PTQ4JiZ0PDQ4K2IuTWF0aC5taW4oMTAsMTApP3QtNDg6dD49OTcmJnQ8OTc/dC05NysxMDp0Pj02NSYmdDw2NT90LTY1KzEwOi0xfWZ1bmN0aW9uIExpZSh0LGUpe3ZhciBuO3JldHVybiBHdChlKT09PUd0KHQpPyEwOiFfdChlLDIxKXx8KG49dShlLDIxKSxuLmdjKCkhPXQuZ2MoKSk/ITE6dC5JYyhuKX1mdW5jdGlvbiBvaG4odCxlKXt2YXIgbixyLHMsbztyZXR1cm4gcj10LmEubGVuZ3RoLTEsbj1lLXQuYiZyLG89dC5jLWUmcixzPXQuYy10LmImcixzV3QobjxzKSxuPj1vPyhhdW4odCxlKSwtMSk6KG91bih0LGUpLDEpfWZ1bmN0aW9uIGNobih0LGUpe3ZhciBuLHI7Zm9yKG49KCRyKGUsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChlKSkscj1lKzE7cjx0Lmxlbmd0aCYmKCRyKHIsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChyKT09bik7KSsrcjtyZXR1cm4gci1lfWZ1bmN0aW9uIFQzdCh0KXtzd2l0Y2godC5nKXtjYXNlIDEyOmNhc2UgMTM6Y2FzZSAxNDpjYXNlIDE1OmNhc2UgMTY6Y2FzZSAxNzpjYXNlIDE4OmNhc2UgMTk6Y2FzZSAyMDpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiB1aG4odCxlKXt2YXIgbj10LmEscjtlPVN0cmluZyhlKSxuLmhhc093blByb3BlcnR5KGUpJiYocj1uW2VdKTt2YXIgcz0odml0KCksX3V0KVt0eXBlb2Ygcl0sbz1zP3Mocik6Rnl0KHR5cGVvZiByKTtyZXR1cm4gb31mdW5jdGlvbiBhdyh0LGUpe2lmKHQuYTwwKXRocm93IG50KG5ldyBIbygiRGlkIG5vdCBjYWxsIGJlZm9yZSguLi4pIG9yIGFmdGVyKC4uLikgYmVmb3JlIGNhbGxpbmcgYWRkKC4uLikuIikpO3JldHVybiBBMnQodCx0LmEsZSksdH1mdW5jdGlvbiBsaG4odCxlLG4scil7dmFyIHMsbztlLmMubGVuZ3RoIT0wJiYocz1LYm4obixyKSxvPVdnbihlKSx5cyhWJChuZXcga24obnVsbCxuZXcgVG4obywxKSksbmV3IHFRKSxuZXcgeFh0KHQsbixzLHIpKSl9ZnVuY3Rpb24gSjYodCxlLG4pe3ZhciByO3QuRGImZT9uPT1udWxsP09wbih0LGUpOihyPXdzdCh0LGUpLHI9PS0xP3QuRWI9bjpscyhvMih0LkViKSxyLG4pKTpuIT1udWxsJiZpdm4odCxlLG4pfWZ1bmN0aW9uIHV1KHQpe3ZhciBlLG47cmV0dXJuIHQuRGImMzJ8fChuPShlPXUoTW4odCwxNiksMjYpLEpuKGV8fHQuemgoKSktSm4odC56aCgpKSksbiE9MCYmSjYodCwzMixOdChRbixNZSwxLG4sNSwxKSkpLHR9ZnVuY3Rpb24gaGhuKHQpe3ZhciBlO3JldHVybiB0LmJ8fGVZZSh0LChlPUdRZSh0LmUsdC5hKSwhZXx8IXVuKFBjdCxKZigoIWUuYiYmKGUuYj1uZXcgQWwoKGxuKCksSmEpLHBjLGUpKSxlLmIpLCJxdWFsaWZpZWQiKSkpKSx0LmN9ZnVuY3Rpb24gZmhuKHQsZSxuKXt2YXIgcixzLG87cmV0dXJuIHI9dShBdChmbCh0LmEpLGUpLDg3KSxvPShzPXIuYyxzfHwobG4oKSxLMSkpLChvLmtoKCk/WHAodC5iLHUobyw0OSkpOm8pPT1uP3dxKHIpOk84KHIsbiksb31mdW5jdGlvbiBkaG4odCxlKXsoIWUmJmNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQhPW51bGw/Y29uc29sZS5ncm91cENvbGxhcHNlZDpjb25zb2xlLmdyb3VwPz9jb25zb2xlLmxvZykuY2FsbChjb25zb2xlLHQpfWZ1bmN0aW9uIGdobih0LGUsbixyKXtyPT10LHUobi5iLDY1KSx1KG4uYiw2NSksdShyLmIsNjUpLHUoci5iLDY1KS5jLmIsd210KHIsZSx0KX1mdW5jdGlvbiBwaG4odCl7dmFyIGUsbjtmb3IoZT1uZXcgUyh0LmcpO2UuYTxlLmMuYy5sZW5ndGg7KXUoUShlKSw1NjIpO249bmV3IE5jZSh0LmcsWnQodC5hKSx0LmMpLGs0bihuKSx0Lmc9bi5iLHQuZD1uLmF9ZnVuY3Rpb24gXzN0KHQsZSxuKXtlLmI9Yi5NYXRoLm1heChlLmIsLW4uYSksZS5jPWIuTWF0aC5tYXgoZS5jLG4uYS10LmEpLGUuZD1iLk1hdGgubWF4KGUuZCwtbi5iKSxlLmE9Yi5NYXRoLm1heChlLmEsbi5iLXQuYil9ZnVuY3Rpb24gYmhuKHQsZSl7cmV0dXJuIHQuZTxlLmU/LTE6dC5lPmUuZT8xOnQuZjxlLmY/LTE6dC5mPmUuZj8xOkppKHQpLUppKGUpfWZ1bmN0aW9uIE96KHQsZSl7cmV0dXJuIEluKHQpLGU9PW51bGw/ITE6dW4odCxlKT8hMDp0Lmxlbmd0aD09ZS5sZW5ndGgmJnVuKHQudG9Mb3dlckNhc2UoKSxlLnRvTG93ZXJDYXNlKCkpfWZ1bmN0aW9uIHZobih0LGUpe3ZhciBuLHIscyxvO2ZvcihyPTAscz1lLmdjKCk7cjxzOysrciluPWUuaWwociksX3Qobiw5OSkmJnUobiwxOCkuQmImeWMmJihvPWUuamwociksbyE9bnVsbCYmaGF0KHQsdShvLDU2KSkpfWZ1bmN0aW9uIE1pZSh0LGUsbil7dmFyIHIscyxvO2ZvcihvPW5ldyBTKG4uYSk7by5hPG8uYy5jLmxlbmd0aDspcz11KFEobyksMjIxKSxyPW5ldyBjaih1KHRyKHQuYSxzLmIpLDY1KSksdWUoZS5hLHIpLE1pZSh0LHIscyl9ZnVuY3Rpb24gYjIodCl7dmFyIGUsbjtyZXR1cm4gX2ModCwtMTI5KT4wJiZfYyh0LDEyOCk8MD8oZT1Ncih0KSsxMjgsbj0oS0t0KCkscjd0KVtlXSwhbiYmKG49cjd0W2VdPW5ldyBfbSh0KSksbik6bmV3IF9tKHQpfWZ1bmN0aW9uIERpZSh0LGUpe3ZhciBuLHI7cmV0dXJuIG49ZS5IaCh0LmEpLG4mJihyPWpyKEpmKCghbi5iJiYobi5iPW5ldyBBbCgobG4oKSxKYSkscGMsbikpLG4uYiksZmkpKSxyIT1udWxsKT9yOmUubmUoKX1mdW5jdGlvbiB3aG4odCxlKXt2YXIgbixyO3JldHVybiBuPWUuSGgodC5hKSxuJiYocj1qcihKZigoIW4uYiYmKG4uYj1uZXcgQWwoKGxuKCksSmEpLHBjLG4pKSxuLmIpLGZpKSksciE9bnVsbCk/cjplLm5lKCl9ZnVuY3Rpb24gbWhuKHQsZSl7dnJ0KCk7dmFyIG4scjtmb3Iocj1uZXcgYXIobHIoejAodCkuYS5LYygpLG5ldyBIKSk7VnIocik7KWlmKG49dShJcihyKSwxNyksbi5kLmk9PWV8fG4uYy5pPT1lKXJldHVybiBuO3JldHVybiBudWxsfWZ1bmN0aW9uIEMzdCh0LGUsbil7dGhpcy5jPXQsdGhpcy5mPW5ldyBsZSx0aGlzLmU9bmV3IERhLHRoaXMuaj1uZXcgUHZ0LHRoaXMubj1uZXcgUHZ0LHRoaXMuYj1lLHRoaXMuZz1uZXcgY2goZS5jLGUuZCxlLmIsZS5hKSx0aGlzLmE9bn1mdW5jdGlvbiBaaXQodCl7dmFyIGUsbixyLHM7Zm9yKHRoaXMuYT1uZXcgQTAsdGhpcy5kPW5ldyBRcyx0aGlzLmU9MCxuPXQscj0wLHM9bi5sZW5ndGg7cjxzOysrcillPW5bcl0sIXRoaXMuZiYmKHRoaXMuZj1lKSxfcnQodGhpcyxlKX1mdW5jdGlvbiBJaWUodCl7ZWIoKSx0Lmxlbmd0aD09MD8odGhpcy5lPTAsdGhpcy5kPTEsdGhpcy5hPXV0KG90KFNyLDEpLEpyLDI1LDE1LFswXSkpOih0aGlzLmU9MSx0aGlzLmQ9dC5sZW5ndGgsdGhpcy5hPXQsT18odGhpcykpfWZ1bmN0aW9uIHJDKHQsZSxuKXtvcXQuY2FsbCh0aGlzKSx0aGlzLmE9TnQoS2dlLEc2dCwyMTIsKFpmKCksdXQob3QoTXksMSksb2UsMjMyLDAsW2ZjLGl1LGRjXSkpLmxlbmd0aCwwLDEpLHRoaXMuYj10LHRoaXMuZD1lLHRoaXMuYz1ufWZ1bmN0aW9uIE9pZSh0KXt0aGlzLmQ9bmV3IGxlLHRoaXMuZT1uZXcgaTIsdGhpcy5jPU50KFNyLEpyLDI1LChiZSgpLHV0KG90KFphLDEpLENjLDYxLDAsW2FjLE9uLEhuLHlyLEJuXSkpLmxlbmd0aCwxNSwxKSx0aGlzLmI9dH1mdW5jdGlvbiB5aG4odCl7dmFyIGUsbixyLHMsbyxoO2ZvcihoPXUoSyh0LChhZSgpLElpKSksMTEpLGVlKGgsZkUsdC5pLm4uYiksZT1wZCh0LmUpLHI9ZSxzPTAsbz1yLmxlbmd0aDtzPG87KytzKW49cltzXSxwYShuLGgpfWZ1bmN0aW9uIHhobih0KXt2YXIgZSxuLHIscyxvLGg7Zm9yKG49dShLKHQsKGFlKCksSWkpKSwxMSksZWUobixmRSx0Lmkubi5iKSxlPXBkKHQuZykscz1lLG89MCxoPXMubGVuZ3RoO288aDsrK28pcj1zW29dLEJhKHIsbil9ZnVuY3Rpb24ga2huKHQpe3ZhciBlLG47cmV0dXJuIGVhKHQuZC5pLCh4ZSgpLGdFKSk/KGU9dShLKHQuYy5pLGdFKSwxOSksbj11KEsodC5kLmksZ0UpLDE5KSxtdShlLmEsbi5hKT4wKTohMX1mdW5jdGlvbiBOaWUodCl7dmFyIGU7R3QoemUodCwoZGkoKSxpNSkpKT09PUd0KCgkMCgpLEhHKSkmJihocyh0KT8oZT11KHplKGhzKHQpLGk1KSwzMzQpLEVvKHQsaTUsZSkpOkVvKHQsaTUsWVMpKX1mdW5jdGlvbiBFaG4odCxlLG4pe3ZhciByLHM7T3N0KHQuZSxlLG4sKGJlKCksQm4pKSxPc3QodC5pLGUsbixIbiksdC5hJiYocz11KEsoZSwoYWUoKSxJaSkpLDExKSxyPXUoSyhuLElpKSwxMSksRXJ0KHQuZyxzLHIpKX1mdW5jdGlvbiBQaWUodCxlLG4pe3ZhciByLHMsbztyPWUuYy5wLG89ZS5wLHQuYltyXVtvXT1uZXcgWlh0KHQsZSksbiYmKHQuYVtyXVtvXT1uZXcgR2soZSkscz11KEsoZSwoYWUoKSxEdykpLDEwKSxzJiZjbih0LmQscyxlKSl9ZnVuY3Rpb24gRmllKHQsZSl7dmFyIG4scixzO2lmKHVlKG5WLHQpLGUuRmModCksbj11KHRyKFZ1dCx0KSwyMSksbilmb3Iocz1uLktjKCk7cy5PYigpOylyPXUocy5QYigpLDMzKSxHbyhuVixyLDApIT0tMXx8RmllKHIsZSl9ZnVuY3Rpb24gVGhuKHQsZSxuKXt2YXIgcjsoTmdlPyhNbG4odCksITApOlBnZXx8QmdlPyhyOCgpLCEwKTpGZ2UmJihyOCgpLCExKSkmJihyPW5ldyBsS3QoZSksci5iPW4sUzBuKHQscikpfWZ1bmN0aW9uIEppdCh0LGUpe3ZhciBuO249IXQuQS5IYygoTmwoKSxXMikpfHx0LnE9PSh2YSgpLEtjKSx0LnUuSGMoKGlsKCksdGcpKT9uP1U0bih0LGUpOmZoZSh0LGUpOnQudS5IYyhFYikmJihuP2g0bih0LGUpOkNoZSh0LGUpKX1mdW5jdGlvbiBhNyh0LGUpe3ZhciBuLHI7aWYoKyt0LmosZSE9bnVsbCYmKG49KHI9dC5hLkNiLF90KHIsOTcpP3Uociw5NykuSmcoKTpudWxsKSxtcG4oZSxuKSkpe0o2KHQuYSw0LG4pO3JldHVybn1KNih0LmEsNCx1KGUsMTI2KSl9ZnVuY3Rpb24gQmllKHQsZSxuKXtyZXR1cm4gbmV3IGNoKGIuTWF0aC5taW4odC5hLGUuYSktbi8yLGIuTWF0aC5taW4odC5iLGUuYiktbi8yLGIuTWF0aC5hYnModC5hLWUuYSkrbixiLk1hdGguYWJzKHQuYi1lLmIpK24pfWZ1bmN0aW9uIF9obih0LGUpe3ZhciBuLHI7cmV0dXJuIG49bXUodC5hLmMucCxlLmEuYy5wKSxuIT0wP246KHI9bXUodC5hLmQuaS5wLGUuYS5kLmkucCksciE9MD9yOm11KGUuYS5kLnAsdC5hLmQucCkpfWZ1bmN0aW9uIENobih0LGUsbil7dmFyIHIscyxvLGg7cmV0dXJuIG89ZS5qLGg9bi5qLG8hPWg/by5nLWguZzoocj10LmZbZS5wXSxzPXQuZltuLnBdLHI9PTAmJnM9PTA/MDpyPT0wPy0xOnM9PTA/MTpqcyhyLHMpKX1mdW5jdGlvbiBSaWUodCxlLG4pe3ZhciByLHMsbztpZighbltlLmRdKWZvcihuW2UuZF09ITAscz1uZXcgUyhjNChlKSk7cy5hPHMuYy5jLmxlbmd0aDspcj11KFEocyksMjEzKSxvPUN6KHIsZSksUmllKHQsbyxuKX1mdW5jdGlvbiBTM3QodCxlLG4pe3ZhciByO3N3aXRjaChyPW5bdC5nXVtlXSx0Lmcpe2Nhc2UgMTpjYXNlIDM6cmV0dXJuIG5ldyBSZSgwLHIpO2Nhc2UgMjpjYXNlIDQ6cmV0dXJuIG5ldyBSZShyLDApO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIFNobih0LGUsbil7dmFyIHIscztzPXUoZnJ0KGUuZiksMjA5KTt0cnl7cy5aZSh0LG4pLEZlbihlLmYscyl9Y2F0Y2gobyl7dGhyb3cgbz1ycyhvKSxfdChvLDEwMik/KHI9byxudChyKSk6bnQobyl9fWZ1bmN0aW9uIGppZSh0LGUsbil7dmFyIHIscyxvLGgsZCx3O3JldHVybiByPW51bGwsZD1kNnQoajgoKSxlKSxvPW51bGwsZCYmKHM9bnVsbCx3PWg2dChkLG4pLGg9bnVsbCx3IT1udWxsJiYoaD10LlllKGQsdykpLHM9aCxvPXMpLHI9byxyfWZ1bmN0aW9uIEFobih0LGUsbixyKXt2YXIgcyxvLGg7cmV0dXJuIHM9bmV3IEYwKHQuZSwxLDEzLChoPWUuYyxofHwobG4oKSxLMSkpLChvPW4uYyxvfHwobG4oKSxLMSkpLCRnKHQsZSksITEpLHI/ci5FaShzKTpyPXMscn1mdW5jdGlvbiB0c3QodCxlLG4scil7dmFyIHM7aWYocz10Lmxlbmd0aCxlPj1zKXJldHVybiBzO2ZvcihlPWU+MD9lOjA7ZTxzJiYhd2l0KCgkcihlLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoZSkpLG4scik7ZSsrKTtyZXR1cm4gZX1mdW5jdGlvbiBQMSh0LGUpe3ZhciBuLHI7Zm9yKHI9dC5jLmxlbmd0aCxlLmxlbmd0aDxyJiYoZT13UihuZXcgQXJyYXkociksZSkpLG49MDtuPHI7KytuKWxzKGUsbix0LmNbbl0pO3JldHVybiBlLmxlbmd0aD5yJiZscyhlLHIsbnVsbCksZX1mdW5jdGlvbiAkaWUodCxlKXt2YXIgbixyO2ZvcihyPXQuYS5sZW5ndGgsZS5sZW5ndGg8ciYmKGU9d1IobmV3IEFycmF5KHIpLGUpKSxuPTA7bjxyOysrbilscyhlLG4sdC5hW25dKTtyZXR1cm4gZS5sZW5ndGg+ciYmbHMoZSxyLG51bGwpLGV9ZnVuY3Rpb24gdjIodCxlLG4pe3ZhciByLHMsbztyZXR1cm4gcz11KHRyKHQuZSxlKSwzODcpLHM/KG89WDJ0KHMsbiksRFV0KHQscyksbyk6KHI9bmV3IEV2dCh0LGUsbiksQWkodC5lLGUsciksclF0KHIpLG51bGwpfWZ1bmN0aW9uIExobih0KXt2YXIgZTtpZih0PT1udWxsKXJldHVybiBudWxsO2lmKGU9RWJuKEhjKHQsITApKSxlPT1udWxsKXRocm93IG50KG5ldyBzZXQoIkludmFsaWQgaGV4QmluYXJ5IHZhbHVlOiAnIit0KyInIikpO3JldHVybiBlfWZ1bmN0aW9uIEtEKHQpe3JldHVybiBlYigpLF9jKHQsMCk8MD9fYyh0LC0xKSE9MD9uZXcgaDR0KC0xLEQ4KHQpKTpBdXQ6X2ModCwxMCk8PTA/cDd0W01yKHQpXTpuZXcgaDR0KDEsdCl9ZnVuY3Rpb24gZXN0KCl7cmV0dXJuIExxKCksdXQob3QoeHBlLDEpLG9lLDE1OSwwLFttcGUsd3BlLHlwZSxscGUsdXBlLGhwZSxncGUsZHBlLGZwZSx2cGUsYnBlLHBwZSxvcGUsYXBlLGNwZSxpcGUscnBlLHNwZSxlcGUsdHBlLG5wZSxCdXRdKX1mdW5jdGlvbiB6aWUodCl7dmFyIGU7dGhpcy5kPW5ldyBsZSx0aGlzLmo9bmV3IERhLHRoaXMuZz1uZXcgRGEsZT10LmcuYix0aGlzLmY9dShLKCRhKGUpLCh4ZSgpLFhsKSksMTAzKSx0aGlzLmU9WnQodmUoRnooZSxWeSkpKX1mdW5jdGlvbiBxaWUodCl7dGhpcy5iPW5ldyBsZSx0aGlzLmU9bmV3IGxlLHRoaXMuZD10LHRoaXMuYT0halQoV2kobmV3IGtuKG51bGwsbmV3IEZ2KG5ldyBNMSh0LmIpKSksbmV3IHRlKG5ldyBNRikpKS5zZCgoWWIoKSxRNykpfWZ1bmN0aW9uIHQxKCl7dDE9WCxxbj1uZXcgQU0oIlBBUkVOVFMiLDApLHVhPW5ldyBBTSgiTk9ERVMiLDEpLElkPW5ldyBBTSgiRURHRVMiLDIpLHEyPW5ldyBBTSgiUE9SVFMiLDMpLHRwPW5ldyBBTSgiTEFCRUxTIiw0KX1mdW5jdGlvbiB1NCgpe3U0PVgseGI9bmV3IE1NKCJESVNUUklCVVRFRCIsMCksSk89bmV3IE1NKCJKVVNUSUZJRUQiLDEpLGtBdD1uZXcgTU0oIkJFR0lOIiwyKSxYUz1uZXcgTU0oSTcsMyksRUF0PW5ldyBNTSgiRU5EIiw0KX1mdW5jdGlvbiBNaG4odCl7dmFyIGU7c3dpdGNoKGU9dC55aShudWxsKSxlKXtjYXNlIDEwOnJldHVybiAwO2Nhc2UgMTU6cmV0dXJuIDE7Y2FzZSAxNDpyZXR1cm4gMjtjYXNlIDExOnJldHVybiAzO2Nhc2UgMjE6cmV0dXJuIDR9cmV0dXJuLTF9ZnVuY3Rpb24gbnN0KHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMTpyZXR1cm4gZm8oKSxaMDtjYXNlIDQ6cmV0dXJuIGZvKCksSGg7Y2FzZSAyOnJldHVybiBmbygpLF9mO2Nhc2UgMzpyZXR1cm4gZm8oKSxRMH1yZXR1cm4gZm8oKSxjMH1mdW5jdGlvbiBEaG4odCxlLG4pe3ZhciByO3N3aXRjaChyPW4ucS5nZXRGdWxsWWVhcigpLWliK2liLHI8MCYmKHI9LXIpLGUpe2Nhc2UgMTp0LmErPXI7YnJlYWs7Y2FzZSAyOlhkKHQsciUxMDAsMik7YnJlYWs7ZGVmYXVsdDpYZCh0LHIsZSl9fWZ1bmN0aW9uIHNpKHQsZSl7dmFyIG4scjtpZihVbShlLHQuYiksZT49dC5iPj4xKWZvcihyPXQuYyxuPXQuYjtuPmU7LS1uKXI9ci5iO2Vsc2UgZm9yKHI9dC5hLmEsbj0wO248ZTsrK24pcj1yLmE7cmV0dXJuIG5ldyBjS3QodCxlLHIpfWZ1bmN0aW9uIE56KCl7Tno9WCxPdXQ9bmV3IGtidCgiTlVNX09GX0VYVEVSTkFMX1NJREVTX1RIQU5fTlVNX09GX0VYVEVOU0lPTlNfTEFTVCIsMCksTTd0PW5ldyBrYnQoIkNPUk5FUl9DQVNFU19USEFOX1NJTkdMRV9TSURFX0xBU1QiLDEpfWZ1bmN0aW9uIElobih0KXt2YXIgZSxuLHIscztmb3Iocj1rZ24odCksYWEocixGYmUpLHM9dC5kLHMuYz1OdChRbixNZSwxLDAsNSwxKSxuPW5ldyBTKHIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShRKG4pLDQ1NiksUnMocyxlLmIpfWZ1bmN0aW9uIEhpZSh0KXt2YXIgZSxuLHI7Zm9yKHI9KCF0Lm8mJih0Lm89bmV3IElsKChudSgpLF9iKSwkdyx0LDApKSx0Lm8pLG49ci5jLktjKCk7bi5lIT1uLmkuZ2MoKTspZT11KG4ubmooKSw0MiksZS5kZCgpO3JldHVybiBmRChyKX1mdW5jdGlvbiBPaG4odCl7dmFyIGU7RDYodShLKHQsKHhlKCksd3MpKSw5OCkpJiYoZT10LmIsQW9lKChTbigwLGUuYy5sZW5ndGgpLHUoZS5jWzBdLDI5KSkpLEFvZSh1KFBlKGUsZS5jLmxlbmd0aC0xKSwyOSkpKX1mdW5jdGlvbiBWaWUodCxlKXt2YXIgbixyLHMsbztmb3Iobj0wLHM9bmV3IFMoZS5hKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoUShzKSwxMCksbz1yLm8uYStyLmQuYytyLmQuYit0Lmosbj1iLk1hdGgubWF4KG4sbyk7cmV0dXJuIG59ZnVuY3Rpb24gUHoodCl7dmFyIGUsbixyLHM7Zm9yKHM9MCxuPTAscj10Lmxlbmd0aDtuPHI7bisrKWU9KCRyKG4sdC5sZW5ndGgpLHQuY2hhckNvZGVBdChuKSksZT49NjQmJmU8MTI4JiYocz1BMShzLE0wKDEsZS02NCkpKTtyZXR1cm4gc31mdW5jdGlvbiBGeih0LGUpe3ZhciBuLHI7cmV0dXJuIHI9bnVsbCxlYSh0LChkaSgpLHp4KSkmJihuPXUoSyh0LHp4KSw5NCksbi5YZShlKSYmKHI9bi5XZShlKSkpLHI9PW51bGwmJiRhKHQpJiYocj1LKCRhKHQpLGUpKSxyfWZ1bmN0aW9uIEdpZSh0LGUpe3ZhciBuLHIscztzPWUuZC5pLHI9cy5rLCEocj09KEduKCkscXMpfHxyPT1xMSkmJihuPW5ldyBhcihscigkcyhzKS5hLktjKCksbmV3IEgpKSxWcihuKSYmQWkodC5rLGUsdShJcihuKSwxNykpKX1mdW5jdGlvbiByc3QodCxlKXt2YXIgbixyLHM7cmV0dXJuIHI9d24odC5UZygpLGUpLG49ZS10LkFoKCksbjwwPyhzPXQuWWcocikscz49MD90LmxoKHMpOkhzdCh0LHIpKTpuPDA/SHN0KHQscik6dShyLDY2KS5OaigpLlNqKHQsdC55aCgpLG4pfWZ1bmN0aW9uIEllKHQpe3ZhciBlO2lmKF90KHQuYSw0KSl7aWYoZT1FM3QodC5hKSxlPT1udWxsKXRocm93IG50KG5ldyBIbyhxMWUrdC5iKyInLiAiK3oxZSsoTDAodU4pLHVOLmspK3I4dCkpO3JldHVybiBlfWVsc2UgcmV0dXJuIHQuYX1mdW5jdGlvbiBOaG4odCl7dmFyIGU7aWYodD09bnVsbClyZXR1cm4gbnVsbDtpZihlPXQ1bihIYyh0LCEwKSksZT09bnVsbCl0aHJvdyBudChuZXcgc2V0KCJJbnZhbGlkIGJhc2U2NEJpbmFyeSB2YWx1ZTogJyIrdCsiJyIpKTtyZXR1cm4gZX1mdW5jdGlvbiBkcih0KXt2YXIgZTt0cnl7cmV0dXJuIGU9dC5pLlhiKHQuZSksdC5taigpLHQuZz10LmUrKyxlfWNhdGNoKG4pe3Rocm93IG49cnMobiksX3Qobiw3Myk/KHQubWooKSxudChuZXcgdmMpKTpudChuKX19ZnVuY3Rpb24gaXN0KHQpe3ZhciBlO3RyeXtyZXR1cm4gZT10LmMua2kodC5lKSx0Lm1qKCksdC5nPXQuZSsrLGV9Y2F0Y2gobil7dGhyb3cgbj1ycyhuKSxfdChuLDczKT8odC5taigpLG50KG5ldyB2YykpOm50KG4pfX1mdW5jdGlvbiBpQygpe2lDPVgsc0V0PShkaSgpLGVBdCkscXV0PU9TdCxOcGU9angsaUV0PVYyLFJwZT0oS3ooKSxCN3QpLEJwZT1QN3QsanBlPWo3dCxGcGU9Tjd0LFBwZT0oTGl0KCksZUV0KSx6dXQ9RHBlLHJFdD1JcGUsZVY9T3BlfWZ1bmN0aW9uIEJ6KHQpe3N3aXRjaChmYnQoKSx0aGlzLmM9bmV3IGxlLHRoaXMuZD10LHQuZyl7Y2FzZSAwOmNhc2UgMjp0aGlzLmE9eXd0KEVFdCksdGhpcy5iPWJzO2JyZWFrO2Nhc2UgMzpjYXNlIDE6dGhpcy5hPUVFdCx0aGlzLmI9TnN9fWZ1bmN0aW9uIFVpZSh0LGUsbil7dmFyIHIscztpZih0LmMpQ3UodC5jLHQuYy5pK2UpLFN1KHQuYyx0LmMuaituKTtlbHNlIGZvcihzPW5ldyBTKHQuYik7cy5hPHMuYy5jLmxlbmd0aDspcj11KFEocyksMTU3KSxVaWUocixlLG4pfWZ1bmN0aW9uIFBobih0LGUpe3ZhciBuLHI7aWYodC5qLmxlbmd0aCE9ZS5qLmxlbmd0aClyZXR1cm4hMTtmb3Iobj0wLHI9dC5qLmxlbmd0aDtuPHI7bisrKWlmKCF1bih0Lmpbbl0sZS5qW25dKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBSeih0LGUsbil7dmFyIHI7ZS5hLmxlbmd0aD4wJiYodWUodC5iLG5ldyBDS3QoZS5hLG4pKSxyPWUuYS5sZW5ndGgsMDxyP2UuYT1lLmEuc3Vic3RyKDAsMCk6MD5yJiYoZS5hKz1NVXQoTnQoRWgsd2QsMjUsLXIsMTUsMSkpKSl9ZnVuY3Rpb24gV2llKHQsZSl7dmFyIG4scixzO2ZvcihuPXQubyxzPXUodShQaSh0LnIsZSksMjEpLDg0KS5LYygpO3MuT2IoKTspcj11KHMuUGIoKSwxMTEpLHIuZS5hPUJmbihyLG4uYSksci5lLmI9bi5iKlp0KHZlKHIuYi5XZShaSCkpKX1mdW5jdGlvbiBGaG4odCxlKXt2YXIgbixyLHMsbztyZXR1cm4gcz10Lmssbj1adCh2ZShLKHQsKGFlKCksSXcpKSkpLG89ZS5rLHI9WnQodmUoSyhlLEl3KSkpLG8hPShHbigpLElzKT8tMTpzIT1Jcz8xOm49PXI/MDpuPHI/LTE6MX1mdW5jdGlvbiBCaG4odCxlKXt2YXIgbixyO3JldHVybiBuPXUodSh0cih0LmcsZS5hKSw0NikuYSw2NSkscj11KHUodHIodC5nLGUuYiksNDYpLmEsNjUpLEdwKGUuYSxlLmIpLUdwKGUuYSxvMnQobi5iKSktR3AoZS5iLG8ydChyLmIpKX1mdW5jdGlvbiBSaG4odCxlKXt2YXIgbjtyZXR1cm4gbj11KEsodCwoeGUoKSxPbykpLDc0KSxlbnQoZSxNYmUpP24/TWgobik6KG49bmV3IGp1LGVlKHQsT28sbikpOm4mJmVlKHQsT28sbnVsbCksbn1mdW5jdGlvbiBLaWUodCl7dmFyIGU7cmV0dXJuIGU9bmV3IEFwLGUuYSs9Im4iLHQuayE9KEduKCkscXMpJiZZcihZcigoZS5hKz0iKCIsZSksb250KHQuaykudG9Mb3dlckNhc2UoKSksIikiKSxZcigoZS5hKz0iXyIsZSksWkQodCkpLGUuYX1mdW5jdGlvbiBqaG4odCxlKXttcihlLCJTZWxmLUxvb3AgcG9zdC1wcm9jZXNzaW5nIiwxKSx5cyhXaShXaShlYyhuZXcga24obnVsbCxuZXcgVG4odC5iLDE2KSksbmV3IFpZKSxuZXcgSlkpLG5ldyBsRiksbmV3IHRYKSxvcihlKX1mdW5jdGlvbiB0eCh0LGUsbixyKXt2YXIgcztyZXR1cm4gbj49MD90LmhoKGUsbixyKToodC5laCgpJiYocj0ocz10LlZnKCkscz49MD90LlFnKHIpOnQuZWgoKS5paCh0LC0xLXMsbnVsbCxyKSkpLHQuU2coZSxuLHIpKX1mdW5jdGlvbiBBM3QodCxlKXtzd2l0Y2goZSl7Y2FzZSA3OiF0LmUmJih0LmU9bmV3IEVuKHJhLHQsNyw0KSksVHIodC5lKTtyZXR1cm47Y2FzZSA4OiF0LmQmJih0LmQ9bmV3IEVuKHJhLHQsOCw1KSksVHIodC5kKTtyZXR1cm59ZzN0KHQsZSl9ZnVuY3Rpb24gZTEodCxlKXt2YXIgbjtuPXQuWmMoZSk7dHJ5e3JldHVybiBuLlBiKCl9Y2F0Y2gocil7dGhyb3cgcj1ycyhyKSxfdChyLDEwOSk/bnQobmV3IENvKCJDYW4ndCBnZXQgZWxlbWVudCAiK2UpKTpudChyKX19ZnVuY3Rpb24gTDN0KHQsZSl7dGhpcy5lPXQsZTxsb3Q/KHRoaXMuZD0xLHRoaXMuYT11dChvdChTciwxKSxKciwyNSwxNSxbZXwwXSkpOih0aGlzLmQ9Mix0aGlzLmE9dXQob3QoU3IsMSksSnIsMjUsMTUsW2UlbG90fDAsZS9sb3R8MF0pKX1mdW5jdGlvbiBZaWUodCxlKXtwbigpO3ZhciBuLHIscyxvO2ZvcihuPXQsbz1lLF90KHQsMjEpJiYhX3QoZSwyMSkmJihuPWUsbz10KSxzPW4uS2MoKTtzLk9iKCk7KWlmKHI9cy5QYigpLG8uSGMocikpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gemEodCxlLG4pe3ZhciByLHMsbyxoO3JldHVybiByPXQuWGMoZSksciE9LTEmJih0LmVqKCk/KG89dC5maigpLGg9bngodCxyKSxzPXQuWmkoNCxoLG51bGwscixvKSxuP24uRWkocyk6bj1zKTpueCh0LHIpKSxufWZ1bmN0aW9uICRobih0LGUsbil7dmFyIHIscyxvLGg7cmV0dXJuIHI9dC5YYyhlKSxyIT0tMSYmKHQuZWooKT8obz10LmZqKCksaD1Jaih0LHIpLHM9dC5aaSg0LGgsbnVsbCxyLG8pLG4/bi5FaShzKTpuPXMpOklqKHQscikpLG59ZnVuY3Rpb24gWGllKHQsZSl7dmFyIG47c3dpdGNoKG49dSh4byh0LmIsZSksMTI0KS5uLGUuZyl7Y2FzZSAxOnQudD49MCYmKG4uZD10LnQpO2JyZWFrO2Nhc2UgMzp0LnQ+PTAmJihuLmE9dC50KX10LkMmJihuLmI9dC5DLmIsbi5jPXQuQy5jKX1mdW5jdGlvbiBleCgpe2V4PVgsY089bmV3ICRSKFJxLDApLG9PPW5ldyAkUihFb3QsMSksdU89bmV3ICRSKFRvdCwyKSxsTz1uZXcgJFIoX290LDMpLGNPLmE9ITEsb08uYT0hMCx1Ty5hPSExLGxPLmE9ITB9ZnVuY3Rpb24gc0MoKXtzQz1YLGhPPW5ldyBqUihScSwwKSxKSD1uZXcgalIoRW90LDEpLHRWPW5ldyBqUihUb3QsMiksZk89bmV3IGpSKF9vdCwzKSxoTy5hPSExLEpILmE9ITAsdFYuYT0hMSxmTy5hPSEwfWZ1bmN0aW9uIHpobih0KXt2YXIgZTtlPXQuYTtkbyBlPXUoSXIobmV3IGFyKGxyKFVvKGUpLmEuS2MoKSxuZXcgSCkpKSwxNykuYy5pLGUuaz09KEduKCksY2EpJiZ0LmIuRmMoZSk7d2hpbGUoZS5rPT0oR24oKSxjYSkpO3QuYj1jMih0LmIpfWZ1bmN0aW9uIHFobih0KXt2YXIgZSxuLHI7Zm9yKHI9dC5jLmEsdC5wPShEcihyKSxuZXcgcXUocikpLG49bmV3IFMocik7bi5hPG4uYy5jLmxlbmd0aDspZT11KFEobiksMTApLGUucD1fZ24oZSkuYTtwbigpLGFhKHQucCxuZXcgaVEpfWZ1bmN0aW9uIFFpZSh0KXt2YXIgZSxuLHIscztpZihyPTAscz1neSh0KSxzLmMubGVuZ3RoPT0wKXJldHVybiAxO2ZvcihuPW5ldyBTKHMpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShRKG4pLDMzKSxyKz1RaWUoZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gSGhuKHQsZSl7dmFyIG4scixzO2ZvcihzPTAscj11KHUoUGkodC5yLGUpLDIxKSw4NCkuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksMTExKSxzKz1uLmQuYituLmIucmYoKS5hK24uZC5jLHIuT2IoKSYmKHMrPXQudyk7cmV0dXJuIHN9ZnVuY3Rpb24gVmhuKHQsZSl7dmFyIG4scixzO2ZvcihzPTAscj11KHUoUGkodC5yLGUpLDIxKSw4NCkuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksMTExKSxzKz1uLmQuZCtuLmIucmYoKS5iK24uZC5hLHIuT2IoKSYmKHMrPXQudyk7cmV0dXJuIHN9ZnVuY3Rpb24gR2huKHQsZSxuLHIpe2lmKGUuYTxyLmEpcmV0dXJuITA7aWYoZS5hPT1yLmEpe2lmKGUuYjxyLmIpcmV0dXJuITA7aWYoZS5iPT1yLmImJnQuYj5uLmIpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gc3N0KHQsZSl7cmV0dXJuIGhhKHQpPyEhY2dlW2VdOnQuaG0/ISF0LmhtW2VdOk5tKHQpPyEhb2dlW2VdOk9tKHQpPyEhYWdlW2VdOiExfWZ1bmN0aW9uIEVvKHQsZSxuKXtyZXR1cm4gbj09bnVsbD8oIXQubyYmKHQubz1uZXcgSWwoKG51KCksX2IpLCR3LHQsMCkpLER6KHQubyxlKSk6KCF0Lm8mJih0Lm89bmV3IElsKChudSgpLF9iKSwkdyx0LDApKSxZeih0Lm8sZSxuKSksdH1mdW5jdGlvbiBVaG4odCxlLG4scil7dmFyIHMsbztvPWUuWGUoKGRpKCksYTUpKT91KGUuV2UoYTUpLDIxKTp0Lmoscz1QdW4obykscyE9KExxKCksQnV0KSYmKG4mJiFUM3Qocyl8fE40dChUYm4odCxzLHIpLGUpKX1mdW5jdGlvbiBqeih0LGUsbixyKXt2YXIgcyxvLGg7cmV0dXJuIG89d24odC5UZygpLGUpLHM9ZS10LkFoKCksczwwPyhoPXQuWWcobyksaD49MD90Ll9nKGgsbiwhMCk6bHcodCxvLG4pKTp1KG8sNjYpLk5qKCkuUGoodCx0LnloKCkscyxuLHIpfWZ1bmN0aW9uIFdobih0LGUsbixyKXt2YXIgcyxvLGg7bi5taChlKSYmKHNvKCksUXJ0KGUpPyhzPXUobi5haChlKSwxNTMpLHZobih0LHMpKToobz0oaD1lLGg/dShyLDQ5KS54aChoKTpudWxsKSxvJiZZV2Uobi5haChlKSxvKSkpfWZ1bmN0aW9uIEtobih0KXtzd2l0Y2godC5nKXtjYXNlIDE6cmV0dXJuIHR3KCksYU87Y2FzZSAzOnJldHVybiB0dygpLHNPO2Nhc2UgMjpyZXR1cm4gdHcoKSxqdXQ7Y2FzZSA0OnJldHVybiB0dygpLFJ1dDtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiBNM3QodCl7c3dpdGNoKHR5cGVvZiB0KXtjYXNlIFBhdDpyZXR1cm4gemcodCk7Y2FzZSBDNnQ6cmV0dXJuIENzKHQpO2Nhc2UgY3g6cmV0dXJuIEZuKCksdD8xMjMxOjEyMzc7ZGVmYXVsdDpyZXR1cm4gdD09bnVsbD8wOkR2KHQpfX1mdW5jdGlvbiBZaG4odCxlLG4pe2lmKHQuZSlzd2l0Y2godC5iKXtjYXNlIDE6VG5uKHQuYyxlLG4pO2JyZWFrO2Nhc2UgMDpfbm4odC5jLGUsbil9ZWxzZSBQWnQodC5jLGUsbik7dC5hW2UucF1bbi5wXT10LmMuaSx0LmFbbi5wXVtlLnBdPXQuYy5lfWZ1bmN0aW9uIFppZSh0KXt2YXIgZSxuO2lmKHQ9PW51bGwpcmV0dXJuIG51bGw7Zm9yKG49TnQobzAscmUsMTkzLHQubGVuZ3RoLDAsMiksZT0wO2U8bi5sZW5ndGg7ZSsrKW5bZV09dShiYW4odFtlXSx0W2VdLmxlbmd0aCksMTkzKTtyZXR1cm4gbn1mdW5jdGlvbiAkeih0KXt2YXIgZTtpZihBaXQodCkpcmV0dXJuIHpqKHQpLHQuTGsoKSYmKGU9ZEModC5lLHQuYix0LmMsdC5hLHQuaiksdC5qPWUpLHQuZz10LmEsKyt0LmEsKyt0LmMsdC5pPTAsdC5qO3Rocm93IG50KG5ldyB2Yyl9ZnVuY3Rpb24gWGhuKHQsZSl7dmFyIG4scixzLG87cmV0dXJuIG89dC5vLG49dC5wLG88bj9vKj1vOm4qPW4scj1vK24sbz1lLm8sbj1lLnAsbzxuP28qPW86bio9bixzPW8rbixyPHM/LTE6cj09cz8wOjF9ZnVuY3Rpb24gJGcodCxlKXt2YXIgbixyLHM7aWYocz1Ec2UodCxlKSxzPj0wKXJldHVybiBzO2lmKHQuRmsoKSl7Zm9yKHI9MDtyPHQuaTsrK3IpaWYobj10LkdrKHUodC5nW3JdLDU2KSksR3Qobik9PT1HdChlKSlyZXR1cm4gcn1yZXR1cm4tMX1mdW5jdGlvbiBsNCh0LGUsbil7dmFyIHIscztpZihzPXQuZ2MoKSxlPj1zKXRocm93IG50KG5ldyBqbShlLHMpKTtpZih0LmhpKCkmJihyPXQuWGMobikscj49MCYmciE9ZSkpdGhyb3cgbnQobmV3IFBuKFhJKSk7cmV0dXJuIHQubWkoZSxuKX1mdW5jdGlvbiBEM3QodCxlKXtpZih0aGlzLmE9dShEcih0KSwyNDUpLHRoaXMuYj11KERyKGUpLDI0NSksdC52ZChlKT4wfHx0PT0oSnR0KCksdnV0KXx8ZT09KFp0dCgpLHd1dCkpdGhyb3cgbnQobmV3IFBuKCJJbnZhbGlkIHJhbmdlOiAiK0RadCh0LGUpKSl9ZnVuY3Rpb24gSmllKHQpe3ZhciBlLG47Zm9yKHRoaXMuYj1uZXcgbGUsdGhpcy5jPXQsdGhpcy5hPSExLG49bmV3IFModC5hKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoUShuKSwxMCksdGhpcy5hPXRoaXMuYXxlLms9PShHbigpLHFzKX1mdW5jdGlvbiBRaG4odCxlKXt2YXIgbixyLHM7Zm9yKG49SXYobmV3IEtiLHQpLHM9bmV3IFMoZSk7cy5hPHMuYy5jLmxlbmd0aDspcj11KFEocyksMTIxKSx5ZihsZih1ZihoZihjZihuZXcgU2gsMCksMCksbikscikpO3JldHVybiBufWZ1bmN0aW9uIHRzZSh0LGUsbil7dmFyIHIscyxvO2ZvcihzPW5ldyBhcihscigoZT9Vbyh0KTokcyh0KSkuYS5LYygpLG5ldyBIKSk7VnIocyk7KXI9dShJcihzKSwxNyksbz1lP3IuYy5pOnIuZC5pLG8uaz09KEduKCksUGwpJiZMbyhvLG4pfWZ1bmN0aW9uIHN5KCl7c3k9WCxsRz1uZXcgR1IoSzAsMCksbGh0PW5ldyBHUigiUE9SVF9QT1NJVElPTiIsMSksZTU9bmV3IEdSKCJOT0RFX1NJWkVfV0hFUkVfU1BBQ0VfUEVSTUlUUyIsMiksdDU9bmV3IEdSKCJOT0RFX1NJWkUiLDMpfWZ1bmN0aW9uIFFkKCl7UWQ9WCx0ZnQ9bmV3IGVfKCJBVVRPTUFUSUMiLDApLCRPPW5ldyBlXyhmeCwxKSx6Tz1uZXcgZV8oZHgsMiksRkc9bmV3IGVfKCJUT1AiLDMpLE5HPW5ldyBlXyhXNnQsNCksUEc9bmV3IGVfKEk3LDUpfWZ1bmN0aW9uIEkzdCh0LGUsbixyKXtnNygpO3ZhciBzLG87Zm9yKHM9MCxvPTA7bzxuO28rKylzPVJhKElhKEdzKGVbb10scG8pLEdzKHIscG8pKSxHcyhNcihzKSxwbykpLHRbb109TXIocykscz16bShzLDMyKTtyZXR1cm4gTXIocyl9ZnVuY3Rpb24gTzN0KHQsZSxuKXt2YXIgcixzO2ZvcihzPTAscj0wO3I8RnV0O3IrKylzPWIuTWF0aC5tYXgocyxJaXQodC5hW2UuZ11bcl0sbikpO3JldHVybiBlPT0oWmYoKSxpdSkmJnQuYiYmKHM9Yi5NYXRoLm1heChzLHQuYi5iKSksc31mdW5jdGlvbiB6eih0LGUpe3ZhciBuLHI7aWYoSTJ0KGU+MCksKGUmLWUpPT1lKXJldHVybiBDcyhlKnBsKHQsMzEpKjQ2NTY2MTI4NzMwNzczOTNlLTI1KTtkbyBuPXBsKHQsMzEpLHI9biVlO3doaWxlKG4tcisoZS0xKTwwKTtyZXR1cm4gQ3Mocil9ZnVuY3Rpb24gemcodCl7aEt0KCk7dmFyIGUsbixyO3JldHVybiBuPSI6Iit0LHI9WUhbbl0sciE9bnVsbD9DcygoSW4ocikscikpOihyPUE3dFtuXSxlPXI9PW51bGw/ejJuKHQpOkNzKChJbihyKSxyKSksYm5uKCksWUhbbl09ZSxlKX1mdW5jdGlvbiBlc2UodCxlLG4pe21yKG4sIkNvbXBvdW5kIGdyYXBoIHByZXByb2Nlc3NvciIsMSksdC5hPW5ldyBIdixvaGUodCxlLG51bGwpLEF5bih0LGUpLGwybih0KSxlZShlLChhZSgpLFc5dCksdC5hKSx0LmE9bnVsbCxubCh0LmIpLG9yKG4pfWZ1bmN0aW9uIFpobih0LGUsbil7c3dpdGNoKG4uZyl7Y2FzZSAxOnQuYT1lLmEvMix0LmI9MDticmVhaztjYXNlIDI6dC5hPWUuYSx0LmI9ZS5iLzI7YnJlYWs7Y2FzZSAzOnQuYT1lLmEvMix0LmI9ZS5iO2JyZWFrO2Nhc2UgNDp0LmE9MCx0LmI9ZS5iLzJ9fWZ1bmN0aW9uIEpobih0KXt2YXIgZSxuLHI7Zm9yKHI9dShQaSh0LmEsKHA0KCksRFYpKSwxNSkuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksMTAxKSxlPVYzdChuKSxiOCh0LG4sZVswXSwoSnYoKSxTdyksMCksYjgodCxuLGVbMV0sQXcsMSl9ZnVuY3Rpb24gdGZuKHQpe3ZhciBlLG4scjtmb3Iocj11KFBpKHQuYSwocDQoKSxJVikpLDE1KS5LYygpO3IuT2IoKTspbj11KHIuUGIoKSwxMDEpLGU9VjN0KG4pLGI4KHQsbixlWzBdLChKdigpLFN3KSwwKSxiOCh0LG4sZVsxXSxBdywxKX1mdW5jdGlvbiBhc3QodCl7c3dpdGNoKHQuZyl7Y2FzZSAwOnJldHVybiBudWxsO2Nhc2UgMTpyZXR1cm4gbmV3IGVuZTtjYXNlIDI6cmV0dXJuIG5ldyBxcHQ7ZGVmYXVsdDp0aHJvdyBudChuZXcgUG4oRWN0Kyh0LmYhPW51bGw/dC5mOiIiK3QuZykpKX19ZnVuY3Rpb24gWUQodCxlLG4pe3ZhciByLHM7Zm9yKGtjbih0LGUtdC5zLG4tdC50KSxzPW5ldyBTKHQubik7cy5hPHMuYy5jLmxlbmd0aDspcj11KFEocyksMjExKSxsNihyLHIuZStlLXQucyksdXB0KHIsci5mK24tdC50KTt0LnM9ZSx0LnQ9bn1mdW5jdGlvbiBlZm4odCl7dmFyIGUsbixyLHMsbztmb3Iobj0wLHM9bmV3IFModC5hKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoUShzKSwxMjEpLHIuZD1uKys7cmV0dXJuIGU9STBuKHQpLG89bnVsbCxlLmMubGVuZ3RoPjEmJihvPVFobih0LGUpKSxvfWZ1bmN0aW9uIG9zdCh0KXt2YXIgZTtyZXR1cm4gdC5mJiZ0LmYua2goKSYmKGU9dSh0LmYsNDkpLHQuZj11KFhwKHQsZSksODIpLHQuZiE9ZSYmdC5EYiY0JiYhKHQuRGImMSkmJkNpKHQsbmV3IG9hKHQsOSw4LGUsdC5mKSkpLHQuZn1mdW5jdGlvbiBjc3QodCl7dmFyIGU7cmV0dXJuIHQuaSYmdC5pLmtoKCkmJihlPXUodC5pLDQ5KSx0Lmk9dShYcCh0LGUpLDgyKSx0LmkhPWUmJnQuRGImNCYmISh0LkRiJjEpJiZDaSh0LG5ldyBvYSh0LDksNyxlLHQuaSkpKSx0Lml9ZnVuY3Rpb24gb28odCl7dmFyIGU7cmV0dXJuIHQuYiYmdC5iLkRiJjY0JiYoZT10LmIsdC5iPXUoWHAodCxlKSwxOCksdC5iIT1lJiZ0LkRiJjQmJiEodC5EYiYxKSYmQ2kodCxuZXcgb2EodCw5LDIxLGUsdC5iKSkpLHQuYn1mdW5jdGlvbiBxeih0LGUpe3ZhciBuLHIsczt0LmQ9PW51bGw/KCsrdC5lLCsrdC5mKToocj1lLlNoKCksdjJuKHQsdC5mKzEpLHM9KHImVGkpJXQuZC5sZW5ndGgsbj10LmRbc10sIW4mJihuPXQuZFtzXT10LnVqKCkpLG4uRmMoZSksKyt0LmYpfWZ1bmN0aW9uIE4zdCh0LGUsbil7dmFyIHI7cmV0dXJuIGUuS2ooKT8hMTplLlpqKCkhPS0yPyhyPWUuemooKSxyPT1udWxsP249PW51bGw6U2kocixuKSk6ZS5IaigpPT10LmUuVGcoKSYmbj09bnVsbH1mdW5jdGlvbiBIeigpe3ZhciB0O3FsKDE2LFFoZSksdD1VZWUoMTYpLHRoaXMuYj1OdCh5dXQsTEksMzE3LHQsMCwxKSx0aGlzLmM9TnQoeXV0LExJLDMxNyx0LDAsMSksdGhpcy5hPW51bGwsdGhpcy5lPW51bGwsdGhpcy5pPTAsdGhpcy5mPXQtMSx0aGlzLmc9MH1mdW5jdGlvbiBIMCh0KXtaMnQuY2FsbCh0aGlzKSx0aGlzLms9KEduKCkscXMpLHRoaXMuaj0ocWwoNixteSksbmV3IEpjKDYpKSx0aGlzLmI9KHFsKDIsbXkpLG5ldyBKYygyKSksdGhpcy5kPW5ldyBXdHQsdGhpcy5mPW5ldyBPcHQsdGhpcy5hPXR9ZnVuY3Rpb24gbmZuKHQpe3ZhciBlLG47dC5jLmxlbmd0aDw9MXx8KGU9SmNlKHQsKGJlKCkseXIpKSx6YWUodCx1KGUuYSwxOSkuYSx1KGUuYiwxOSkuYSksbj1KY2UodCxCbiksemFlKHQsdShuLmEsMTkpLmEsdShuLmIsMTkpLmEpKX1mdW5jdGlvbiBhQygpe2FDPVgsX190PW5ldyBUTSgiU0lNUExFIiwwKSxmaHQ9bmV3IFRNKHpvdCwxKSxkaHQ9bmV3IFRNKCJMSU5FQVJfU0VHTUVOVFMiLDIpLEFTPW5ldyBUTSgiQlJBTkRFU19LT0VQRiIsMyksTFM9bmV3IFRNKEUxZSw0KX1mdW5jdGlvbiBQM3QodCxlLG4pe0Q2KHUoSyhlLCh4ZSgpLHdzKSksOTgpKXx8KExtdCh0LGUscWcoZSxuKSksTG10KHQsZSxxZyhlLChiZSgpLHlyKSkpLExtdCh0LGUscWcoZSxPbikpLHBuKCksYWEoZS5qLG5ldyBhTSh0KSkpfWZ1bmN0aW9uIG5zZSh0LGUsbixyKXt2YXIgcyxvLGg7Zm9yKHM9dShQaShyP3QuYTp0LmIsZSksMjEpLGg9cy5LYygpO2guT2IoKTspaWYobz11KGguUGIoKSwzMyksZHEodCxuLG8pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHVzdCh0KXt2YXIgZSxuO2ZvcihuPW5ldyBucih0KTtuLmUhPW4uaS5nYygpOylpZihlPXUoZHIobiksODcpLGUuZXx8KCFlLmQmJihlLmQ9bmV3IEJzKHdvLGUsMSkpLGUuZCkuaSE9MClyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBsc3QodCl7dmFyIGUsbjtmb3Iobj1uZXcgbnIodCk7bi5lIT1uLmkuZ2MoKTspaWYoZT11KGRyKG4pLDg3KSxlLmV8fCghZS5kJiYoZS5kPW5ldyBCcyh3byxlLDEpKSxlLmQpLmkhPTApcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gcmZuKHQpe3ZhciBlLG4scjtmb3IoZT0wLHI9bmV3IFModC5jLmEpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShRKHIpLDEwKSxlKz1OMChuZXcgYXIobHIoJHMobikuYS5LYygpLG5ldyBIKSkpO3JldHVybiBlL3QuYy5hLmMubGVuZ3RofWZ1bmN0aW9uIHJzZSh0KXt2YXIgZSxuO2Zvcih0LmN8fGgzbih0KSxuPW5ldyBqdSxlPW5ldyBTKHQuYSksUShlKTtlLmE8ZS5jLmMubGVuZ3RoOylhaShuLHUoUShlKSw0MDcpLmEpO3JldHVybiBabihuLmIhPTApLGZoKG4sbi5jLmIpLG59ZnVuY3Rpb24gaHN0KCl7aHN0PVgsaFN0PShpYXQoKSxvU3QpLGxTdD1uZXcgTXYoOCksbmV3IGFvKChkaSgpLFYyKSxsU3QpLG5ldyBhbyhHMiw4KSxFM2U9c1N0LGNTdD1wM2UsdVN0PWIzZSxrM2U9bmV3IGFvKFVPLChGbigpLCExKSl9ZnVuY3Rpb24gRjN0KHQsZSxuLHIpe3N3aXRjaChlKXtjYXNlIDc6cmV0dXJuIXQuZSYmKHQuZT1uZXcgRW4ocmEsdCw3LDQpKSx0LmU7Y2FzZSA4OnJldHVybiF0LmQmJih0LmQ9bmV3IEVuKHJhLHQsOCw1KSksdC5kfXJldHVybiBuM3QodCxlLG4scil9ZnVuY3Rpb24gZnN0KHQpe3ZhciBlO3JldHVybiB0LmEmJnQuYS5raCgpJiYoZT11KHQuYSw0OSksdC5hPXUoWHAodCxlKSwxMzgpLHQuYSE9ZSYmdC5EYiY0JiYhKHQuRGImMSkmJkNpKHQsbmV3IG9hKHQsOSw1LGUsdC5hKSkpLHQuYX1mdW5jdGlvbiB3Mih0KXtyZXR1cm4gdDw0OHx8dD4xMDI/LTE6dDw9NTc/dC00ODp0PDY1Py0xOnQ8PTcwP3QtNjUrMTA6dDw5Nz8tMTp0LTk3KzEwfWZ1bmN0aW9uIGRzdCh0LGUpe2lmKHQ9PW51bGwpdGhyb3cgbnQobmV3IG02KCJudWxsIGtleSBpbiBlbnRyeTogbnVsbD0iK2UpKTtpZihlPT1udWxsKXRocm93IG50KG5ldyBtNigibnVsbCB2YWx1ZSBpbiBlbnRyeTogIit0KyI9bnVsbCIpKX1mdW5jdGlvbiBpZm4odCxlKXtmb3IodmFyIG4scjt0Lk9iKCk7KWlmKCFlLk9iKCl8fChuPXQuUGIoKSxyPWUuUGIoKSwhKEd0KG4pPT09R3Qocil8fG4hPW51bGwmJlNpKG4scikpKSlyZXR1cm4hMTtyZXR1cm4hZS5PYigpfWZ1bmN0aW9uIGlzZSh0LGUpe3ZhciBuO3JldHVybiBuPXV0KG90KGdhLDEpLFRvLDI1LDE1LFtJaXQodC5hWzBdLGUpLElpdCh0LmFbMV0sZSksSWl0KHQuYVsyXSxlKV0pLHQuZCYmKG5bMF09Yi5NYXRoLm1heChuWzBdLG5bMl0pLG5bMl09blswXSksbn1mdW5jdGlvbiBzc2UodCxlKXt2YXIgbjtyZXR1cm4gbj11dChvdChnYSwxKSxUbywyNSwxNSxbd3oodC5hWzBdLGUpLHd6KHQuYVsxXSxlKSx3eih0LmFbMl0sZSldKSx0LmQmJihuWzBdPWIuTWF0aC5tYXgoblswXSxuWzJdKSxuWzJdPW5bMF0pLG59ZnVuY3Rpb24gbTIoKXttMj1YLHhsdD1uZXcgRU0oIkdSRUVEWSIsMCksVDl0PW5ldyBFTSh1MWUsMSksa2x0PW5ldyBFTSh6b3QsMikscFM9bmV3IEVNKCJNT0RFTF9PUkRFUiIsMyksZ1M9bmV3IEVNKCJHUkVFRFlfTU9ERUxfT1JERVIiLDQpfWZ1bmN0aW9uIGFzZSh0LGUpe3ZhciBuLHIscztmb3IodC5iW2UuZ109MSxyPXNpKGUuZCwwKTtyLmIhPXIuZC5jOyluPXUoaWkociksMTg4KSxzPW4uYyx0LmJbcy5nXT09MT9haSh0LmEsbik6dC5iW3MuZ109PTI/dC5iW3MuZ109MTphc2UodCxzKX1mdW5jdGlvbiBzZm4odCxlKXt2YXIgbixyLHM7Zm9yKHM9bmV3IEpjKGUuZ2MoKSkscj1lLktjKCk7ci5PYigpOyluPXUoci5QYigpLDI4Niksbi5jPT1uLmY/ZDcodCxuLG4uYyk6cmduKHQsbil8fChzLmNbcy5jLmxlbmd0aF09bik7cmV0dXJuIHN9ZnVuY3Rpb24gYWZuKHQsZSxuKXt2YXIgcixzLG8saCxkO2ZvcihkPXQucitlLHQucis9ZSx0LmQrPW4scj1uL3Qubi5jLmxlbmd0aCxzPTAsaD1uZXcgUyh0Lm4pO2guYTxoLmMuYy5sZW5ndGg7KW89dShRKGgpLDIxMSkscGJuKG8sZCxyLHMpLCsrc31mdW5jdGlvbiBvZm4odCl7dmFyIGUsbixyO2ZvcihPVCh0LmIuYSksdC5hPU50KFhILE1lLDU3LHQuYy5jLmEuYi5jLmxlbmd0aCwwLDEpLGU9MCxyPW5ldyBTKHQuYy5jLmEuYik7ci5hPHIuYy5jLmxlbmd0aDspbj11KFEociksNTcpLG4uZj1lKyt9ZnVuY3Rpb24gY2ZuKHQpe3ZhciBlLG4scjtmb3IoT1QodC5iLmEpLHQuYT1OdChRdXQsTWUsODEsdC5jLmEuYS5iLmMubGVuZ3RoLDAsMSksZT0wLHI9bmV3IFModC5jLmEuYS5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoUShyKSw4MSksbi5pPWUrK31mdW5jdGlvbiB1Zm4odCxlLG4pe3ZhciByO21yKG4sIlNocmlua2luZyB0cmVlIGNvbXBhY3Rpb24iLDEpLEJlKEZlKEsoZSwocTgoKSx1UykpKSk/KEVvbih0LGUuZiksanRlKGUuZiwocj1lLmMscikpKTpqdGUoZS5mLGUuYyksb3Iobil9ZnVuY3Rpb24gb3NlKHQpe3ZhciBlO2lmKGU9dXVuKHQpLCFWcih0KSl0aHJvdyBudChuZXcgQ28oInBvc2l0aW9uICgwKSBtdXN0IGJlIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRoYXQgcmVtYWluZWQgKCIrZSsiKSIpKTtyZXR1cm4gSXIodCl9ZnVuY3Rpb24gY3NlKHQsZSxuKXt2YXIgcjt0cnl7cmV0dXJuIGg0KHQsZSt0Lmosbit0LmspfWNhdGNoKHMpe3Rocm93IHM9cnMocyksX3Qocyw3Myk/KHI9cyxudChuZXcgQ28oci5nKyRxK2UrWGErbisiKS4iKSkpOm50KHMpfX1mdW5jdGlvbiBsZm4odCxlLG4pe3ZhciByO3RyeXtyZXR1cm4gaHNlKHQsZSt0Lmosbit0LmspfWNhdGNoKHMpe3Rocm93IHM9cnMocyksX3Qocyw3Myk/KHI9cyxudChuZXcgQ28oci5nKyRxK2UrWGErbisiKS4iKSkpOm50KHMpfX1mdW5jdGlvbiBoZm4odCxlLG4pe3ZhciByO3RyeXtyZXR1cm4gZnNlKHQsZSt0Lmosbit0LmspfWNhdGNoKHMpe3Rocm93IHM9cnMocyksX3Qocyw3Myk/KHI9cyxudChuZXcgQ28oci5nKyRxK2UrWGErbisiKS4iKSkpOm50KHMpfX1mdW5jdGlvbiB1c2UodCl7c3dpdGNoKHQuZyl7Y2FzZSAxOnJldHVybiBiZSgpLEJuO2Nhc2UgNDpyZXR1cm4gYmUoKSxPbjtjYXNlIDM6cmV0dXJuIGJlKCksSG47Y2FzZSAyOnJldHVybiBiZSgpLHlyO2RlZmF1bHQ6cmV0dXJuIGJlKCksYWN9fWZ1bmN0aW9uIGZmbih0LGUsbil7ZS5rPT0oR24oKSxxcykmJm4uaz09Y2EmJih0LmQ9Rml0KGUsKGJlKCkseXIpKSx0LmI9Rml0KGUsT24pKSxuLms9PXFzJiZlLms9PWNhJiYodC5kPUZpdChuLChiZSgpLE9uKSksdC5iPUZpdChuLHlyKSl9ZnVuY3Rpb24gZ3N0KHQsZSl7dmFyIG4scixzO2ZvcihzPXJjKHQsZSkscj1zLktjKCk7ci5PYigpOylpZihuPXUoci5QYigpLDExKSxLKG4sKGFlKCksc2wpKSE9bnVsbHx8cF8obmV3IE0xKG4uYikpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEIzdCh0LGUpe3JldHVybiBDdShlLHQuZSt0LmQrKHQuYy5jLmxlbmd0aD09MD8wOnQuYikpLFN1KGUsdC5mKSx0LmE9Yi5NYXRoLm1heCh0LmEsZS5mKSx0LmQrPWUuZysodC5jLmMubGVuZ3RoPT0wPzA6dC5iKSx1ZSh0LmMsZSksITB9ZnVuY3Rpb24gZGZuKHQsZSxuKXt2YXIgcixzLG8saDtmb3IoaD0wLHI9bi90LmEuYy5sZW5ndGgsbz1uZXcgUyh0LmEpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShRKG8pLDE4NyksWUQocyxzLnMscy50K2gqciksYWZuKHMsdC5kLXMucitlLHIpLCsraH1mdW5jdGlvbiBnZm4odCl7dmFyIGUsbixyLHMsbztmb3Iocj1uZXcgUyh0LmIpO3IuYTxyLmMuYy5sZW5ndGg7KWZvcihuPXUoUShyKSwyOSksZT0wLG89bmV3IFMobi5hKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoUShvKSwxMCkscy5wPWUrK31mdW5jdGlvbiBwZm4odCxlKXt2YXIgbixyLHMsbyxoLGQ7Zm9yKHM9ZS5sZW5ndGgtMSxoPTAsZD0wLHI9MDtyPD1zO3IrKylvPWVbcl0sbj1OMG4ocyxyKSp6eXQoMS10LHMtcikqenl0KHQsciksaCs9by5hKm4sZCs9by5iKm47cmV0dXJuIG5ldyBSZShoLGQpfWZ1bmN0aW9uIGxzZSh0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKG49ZS5nYygpLHQucWkodC5pK24pLG89ZS5LYygpLGg9dC5pLHQuaSs9bixyPWg7cjx0Lmk7KytyKXM9by5QYigpLGZfKHQscix0Lm9pKHIscykpLHQuYmkocixzKSx0LmNpKCk7cmV0dXJuIG4hPTB9ZnVuY3Rpb24gYmZuKHQsZSxuKXt2YXIgcixzLG87cmV0dXJuIHQuZWooKT8ocj10LlZpKCksbz10LmZqKCksKyt0LmosdC5IaShyLHQub2kocixlKSkscz10LlppKDMsbnVsbCxlLHIsbyksbj9uLkVpKHMpOm49cyk6Q1d0KHQsdC5WaSgpLGUpLG59ZnVuY3Rpb24gdmZuKHQsZSxuKXt2YXIgcixzLG87cmV0dXJuIHI9dShBdChPYyh0LmEpLGUpLDg3KSxvPShzPXIuYyxfdChzLDg4KT91KHMsMjYpOihsbigpLFFoKSksKG8uRGImNjQ/WHAodC5iLG8pOm8pPT1uP3dxKHIpOk84KHIsbiksb31mdW5jdGlvbiBSM3QodCxlLG4scixzLG8saCxkKXt2YXIgdyxrO3ImJih3PXIuYVswXSx3JiZSM3QodCxlLG4sdyxzLG8saCxkKSxHZm4odCxuLHIuZCxzLG8saCxkKSYmZS5GYyhyKSxrPXIuYVsxXSxrJiZSM3QodCxlLG4sayxzLG8saCxkKSl9ZnVuY3Rpb24gd2ZuKHQsZSl7dmFyIG47cmV0dXJuIHQuYXx8KG49TnQoZ2EsVG8sMjUsMCwxNSwxKSxSMyh0LmIuYSxuZXcgc2UobikpLG4uc29ydChiZWUoZHQucHJvdG90eXBlLnRlLGR0LFtdKSksdC5hPW5ldyBpS3Qobix0LmQpKSxNJCh0LmEsZSl9ZnVuY3Rpb24gaDQodCxlLG4pe3RyeXtyZXR1cm4gQXYoY2l0KHQsZSxuKSwxKX1jYXRjaChyKXt0aHJvdyByPXJzKHIpLF90KHIsMzIwKT9udChuZXcgQ28oQ290K3QubysiKiIrdC5wK1NvdCtlK1hhK24rQW90KSk6bnQocil9fWZ1bmN0aW9uIGhzZSh0LGUsbil7dHJ5e3JldHVybiBBdihjaXQodCxlLG4pLDApfWNhdGNoKHIpe3Rocm93IHI9cnMociksX3QociwzMjApP250KG5ldyBDbyhDb3QrdC5vKyIqIit0LnArU290K2UrWGErbitBb3QpKTpudChyKX19ZnVuY3Rpb24gZnNlKHQsZSxuKXt0cnl7cmV0dXJuIEF2KGNpdCh0LGUsbiksMil9Y2F0Y2gocil7dGhyb3cgcj1ycyhyKSxfdChyLDMyMCk/bnQobmV3IENvKENvdCt0Lm8rIioiK3QucCtTb3QrZStYYStuK0FvdCkpOm50KHIpfX1mdW5jdGlvbiBkc2UodCxlKXtpZih0Lmc9PS0xKXRocm93IG50KG5ldyBSdSk7dC5taigpO3RyeXt0LmQuX2ModC5nLGUpLHQuZj10LmQuan1jYXRjaChuKXt0aHJvdyBuPXJzKG4pLF90KG4sNzMpP250KG5ldyBzaCk6bnQobil9fWZ1bmN0aW9uIG1mbih0LGUsbil7bXIobiwiTGluZWFyIHNlZ21lbnRzIG5vZGUgcGxhY2VtZW50IiwxKSx0LmI9dShLKGUsKGFlKCksWDQpKSwzMDQpLE81bih0LGUpLGJ5bih0LGUpLEl5bih0LGUpLGY1bih0KSx0LmE9bnVsbCx0LmI9bnVsbCxvcihuKX1mdW5jdGlvbiBYRCh0LGUpe3ZhciBuLHIscyxvO2ZvcihvPXQuZ2MoKSxlLmxlbmd0aDxvJiYoZT13UihuZXcgQXJyYXkobyksZSkpLHM9ZSxyPXQuS2MoKSxuPTA7bjxvOysrbilscyhzLG4sci5QYigpKTtyZXR1cm4gZS5sZW5ndGg+byYmbHMoZSxvLG51bGwpLGV9ZnVuY3Rpb24geWZuKHQsZSl7dmFyIG4scjtpZihyPXQuZ2MoKSxlPT1udWxsKXtmb3Iobj0wO248cjtuKyspaWYodC5YYihuKT09bnVsbClyZXR1cm4gbn1lbHNlIGZvcihuPTA7bjxyO24rKylpZihTaShlLHQuWGIobikpKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIHBzdCh0LGUpe3ZhciBuLHIscztyZXR1cm4gbj1lLmNkKCkscz1lLmRkKCkscj10LnhjKG4pLCEoIShHdChzKT09PUd0KHIpfHxzIT1udWxsJiZTaShzLHIpKXx8cj09bnVsbCYmIXQuX2IobikpfWZ1bmN0aW9uIHhmbih0LGUpe3ZhciBuLHIscztyZXR1cm4gZTw9MjI/KG49dC5sJigxPDxlKS0xLHI9cz0wKTplPD00ND8obj10Lmwscj10Lm0mKDE8PGUtMjIpLTEscz0wKToobj10Lmwscj10Lm0scz10LmgmKDE8PGUtNDQpLTEpLGN1KG4scixzKX1mdW5jdGlvbiBrZm4odCxlKXtzd2l0Y2goZS5nKXtjYXNlIDE6cmV0dXJuIHQuZi5uLmQrdC50O2Nhc2UgMzpyZXR1cm4gdC5mLm4uYSt0LnQ7Y2FzZSAyOnJldHVybiB0LmYubi5jK3QucztjYXNlIDQ6cmV0dXJuIHQuZi5uLmIrdC5zO2RlZmF1bHQ6cmV0dXJuIDB9fWZ1bmN0aW9uIEVmbih0LGUpe3ZhciBuLHI7c3dpdGNoKHI9ZS5jLG49ZS5hLHQuYi5nKXtjYXNlIDA6bi5kPXQuZS1yLmEtci5kO2JyZWFrO2Nhc2UgMTpuLmQrPXQuZTticmVhaztjYXNlIDI6bi5jPXQuZS1yLmEtci5kO2JyZWFrO2Nhc2UgMzpuLmM9dC5lK3IuZH19ZnVuY3Rpb24gajN0KHQsZSxuLHIpe3ZhciBzLG87dGhpcy5hPWUsdGhpcy5jPXIscz10LmEsdHB0KHRoaXMsbmV3IFJlKC1zLmMsLXMuZCkpLEZpKHRoaXMuYixuKSxvPXIvMixlLmE/Qk0odGhpcy5iLDAsbyk6Qk0odGhpcy5iLG8sMCksdWUodC5jLHRoaXMpfWZ1bmN0aW9uIFZ6KCl7Vno9WCwkaHQ9bmV3IFdSKEswLDApLEVDdD1uZXcgV1IobDFlLDEpLFRDdD1uZXcgV1IoIkVER0VfTEVOR1RIX0JZX1BPU0lUSU9OIiwyKSxrQ3Q9bmV3IFdSKCJDUk9TU0lOR19NSU5JTUlaQVRJT05fQllfUE9TSVRJT04iLDMpfWZ1bmN0aW9uIGJzdCh0LGUpe3ZhciBuLHI7aWYobj11KGU0KHQuZyxlKSwzMyksbilyZXR1cm4gbjtpZihyPXUoZTQodC5qLGUpLDExOCkscilyZXR1cm4gcjt0aHJvdyBudChuZXcgb2QoIlJlZmVyZW5jZWQgc2hhcGUgZG9lcyBub3QgZXhpc3Q6ICIrZSkpfWZ1bmN0aW9uIFRmbih0LGUpe2lmKHQuYz09ZSlyZXR1cm4gdC5kO2lmKHQuZD09ZSlyZXR1cm4gdC5jO3Rocm93IG50KG5ldyBQbigiTm9kZSAnb25lJyBtdXN0IGJlIGVpdGhlciBzb3VyY2Ugb3IgdGFyZ2V0IG9mIGVkZ2UgJ2VkZ2UnLiIpKX1mdW5jdGlvbiBfZm4odCxlKXtpZih0LmMuaT09ZSlyZXR1cm4gdC5kLmk7aWYodC5kLmk9PWUpcmV0dXJuIHQuYy5pO3Rocm93IG50KG5ldyBQbigiTm9kZSAiK2UrIiBpcyBuZWl0aGVyIHNvdXJjZSBub3IgdGFyZ2V0IG9mIGVkZ2UgIit0KSl9ZnVuY3Rpb24gQ2ZuKHQsZSl7dmFyIG47c3dpdGNoKGUuZyl7Y2FzZSAyOmNhc2UgNDpuPXQuYSx0LmMuZC5uLmI8bi5kLm4uYiYmKG49dC5jKSxNZyh0LGUsKE8xKCksdWx0KSxuKTticmVhaztjYXNlIDE6Y2FzZSAzOk1nKHQsZSwoTzEoKSxfeCksbnVsbCl9fWZ1bmN0aW9uIHZzdCh0LGUsbixyLHMsbyl7dmFyIGgsZCx3LGssXztmb3IoaD1MMW4oZSxuLG8pLGQ9bj09KGJlKCksT24pfHxuPT1Cbj8tMToxLGs9dFtuLmddLF89MDtfPGsubGVuZ3RoO18rKyl3PWtbX10sdz4wJiYodys9cyksa1tfXT1oLGgrPWQqKHcrcil9ZnVuY3Rpb24gZ3NlKHQpe3ZhciBlLG4scjtmb3Iocj10LmYsdC5uPU50KGdhLFRvLDI1LHIsMTUsMSksdC5kPU50KGdhLFRvLDI1LHIsMTUsMSksZT0wO2U8cjtlKyspbj11KFBlKHQuYy5iLGUpLDI5KSx0Lm5bZV09VmllKHQsbiksdC5kW2VdPV9jZSh0LG4pfWZ1bmN0aW9uIHdzdCh0LGUpe3ZhciBuLHIscztmb3Iocz0wLHI9MjtyPGU7cjw8PTEpdC5EYiZyJiYrK3M7aWYocz09MCl7Zm9yKG49ZTw8PTE7bjw9MTI4O248PD0xKWlmKHQuRGImbilyZXR1cm4gMDtyZXR1cm4tMX1lbHNlIHJldHVybiBzfWZ1bmN0aW9uIHBzZSh0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKGg9aHUodC5lLlRnKCksZSksbz1udWxsLG49dSh0LmcsMTE5KSxzPTA7czx0Lmk7KytzKXI9bltzXSxoLnJsKHIuYWsoKSkmJighbyYmKG89bmV3IEo1KSxPcihvLHIpKTtvJiZTaGUodCxvKX1mdW5jdGlvbiBic2UodCl7dmFyIGUsbixyO2lmKCF0KXJldHVybiBudWxsO2lmKHQuZGMoKSlyZXR1cm4iIjtmb3Iocj1uZXcgX2csbj10LktjKCk7bi5PYigpOyllPW4uUGIoKSx5byhyLGpyKGUpKSxyLmErPSIgIjtyZXR1cm4gWWV0KHIsci5hLmxlbmd0aC0xKX1mdW5jdGlvbiAkM3QodCxlLG4pe3ZhciByLHMsbyxoLGQ7Zm9yKEljbih0KSxzPSh0Lms9PW51bGwmJih0Lms9TnQoa3V0LHJlLDc4LDAsMCwxKSksdC5rKSxvPTAsaD1zLmxlbmd0aDtvPGg7KytvKXI9c1tvXSwkM3Qocik7ZD10LmYsZCYmJDN0KGQpfWZ1bmN0aW9uIHZzZSh0LGUpe3ZhciBuPW5ldyBBcnJheShlKSxyO3N3aXRjaCh0KXtjYXNlIDE0OmNhc2UgMTU6cj0wO2JyZWFrO2Nhc2UgMTY6cj0hMTticmVhaztkZWZhdWx0OnJldHVybiBufWZvcih2YXIgcz0wO3M8ZTsrK3MpbltzXT1yO3JldHVybiBufWZ1bmN0aW9uIG93KHQpe3ZhciBlLG4scjtmb3Iobj1uZXcgUyh0LmEuYik7bi5hPG4uYy5jLmxlbmd0aDspZT11KFEobiksNTcpLGUuYy4kYigpO1BwKHQuZCk/cj10LmEuYzpyPXQuYS5kLF91KHIsbmV3IHdyKHQpKSx0LmMuTWUodCkscWNlKHQpfWZ1bmN0aW9uIHdzZSh0KXt2YXIgZSxuLHIscztmb3Iobj1uZXcgUyh0LmUuYyk7bi5hPG4uYy5jLmxlbmd0aDspe2ZvcihlPXUoUShuKSwyODIpLHM9bmV3IFMoZS5iKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoUShzKSw0NDcpLHI2dChyKTtsb2UoZSl9fWZ1bmN0aW9uIEd6KHQpe3ZhciBlLG4scixzLG87Zm9yKHI9MCxvPTAscz0wLG49bmV3IFModC5hKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoUShuKSwxODcpLG89Yi5NYXRoLm1heChvLGUucikscis9ZS5kKyhzPjA/dC5jOjApLCsrczt0LmI9cix0LmQ9b31mdW5jdGlvbiBTZm4odCxlKXt2YXIgbixyLHMsbyxoO2ZvcihyPTAscz0wLG49MCxoPW5ldyBTKGUpO2guYTxoLmMuYy5sZW5ndGg7KW89dShRKGgpLDIwMCkscj1iLk1hdGgubWF4KHIsby5lKSxzKz1vLmIrKG4+MD90Lmc6MCksKytuO3QuYz1zLHQuZD1yfWZ1bmN0aW9uIG1zZSh0LGUpe3ZhciBuO3JldHVybiBuPXV0KG90KGdhLDEpLFRvLDI1LDE1LFtPM3QodCwoWmYoKSxmYyksZSksTzN0KHQsaXUsZSksTzN0KHQsZGMsZSldKSx0LmYmJihuWzBdPWIuTWF0aC5tYXgoblswXSxuWzJdKSxuWzJdPW5bMF0pLG59ZnVuY3Rpb24gQWZuKHQsZSxuKXt2YXIgcjt0cnl7YnEodCxlK3QuaixuK3QuaywhMSwhMCl9Y2F0Y2gocyl7dGhyb3cgcz1ycyhzKSxfdChzLDczKT8ocj1zLG50KG5ldyBDbyhyLmcrJHErZStYYStuKyIpLiIpKSk6bnQocyl9fWZ1bmN0aW9uIExmbih0LGUsbil7dmFyIHI7dHJ5e2JxKHQsZSt0Lmosbit0LmssITAsITEpfWNhdGNoKHMpe3Rocm93IHM9cnMocyksX3Qocyw3Myk/KHI9cyxudChuZXcgQ28oci5nKyRxK2UrWGErbisiKS4iKSkpOm50KHMpfX1mdW5jdGlvbiB5c2UodCl7dmFyIGU7ZWEodCwoeGUoKSxPdykpJiYoZT11KEsodCxPdyksMjEpLGUuSGMoKGZ5KCksQ2YpKT8oZS5NYyhDZiksZS5GYyhTZikpOmUuSGMoU2YpJiYoZS5NYyhTZiksZS5GYyhDZikpKX1mdW5jdGlvbiB4c2UodCl7dmFyIGU7ZWEodCwoeGUoKSxPdykpJiYoZT11KEsodCxPdyksMjEpLGUuSGMoKGZ5KCksTGYpKT8oZS5NYyhMZiksZS5GYyhHaCkpOmUuSGMoR2gpJiYoZS5NYyhHaCksZS5GYyhMZikpKX1mdW5jdGlvbiBNZm4odCxlLG4pe21yKG4sIlNlbGYtTG9vcCBvcmRlcmluZyIsMSkseXMoeHUoV2koV2koZWMobmV3IGtuKG51bGwsbmV3IFRuKGUuYiwxNikpLG5ldyBjRiksbmV3IEtZKSxuZXcgWVkpLG5ldyBYWSksbmV3IENtKHQpKSxvcihuKX1mdW5jdGlvbiBRRCh0LGUsbixyKXt2YXIgcyxvO2ZvcihzPWU7czx0LmMubGVuZ3RoO3MrKylpZihvPShTbihzLHQuYy5sZW5ndGgpLHUodC5jW3NdLDExKSksbi5NYihvKSlyLmNbci5jLmxlbmd0aF09bztlbHNlIHJldHVybiBzO3JldHVybiB0LmMubGVuZ3RofWZ1bmN0aW9uIG1zdCh0LGUsbixyKXt2YXIgcyxvLGgsZDtyZXR1cm4gdC5hPT1udWxsJiZPMG4odCxlKSxoPWUuYi5qLmMubGVuZ3RoLG89bi5kLnAsZD1yLmQucCxzPWQtMSxzPDAmJihzPWgtMSksbzw9cz90LmFbc10tdC5hW29dOnQuYVtoLTFdLXQuYVtvXSt0LmFbc119ZnVuY3Rpb24gRGZuKHQpe3ZhciBlLG47aWYoIXQuYilmb3IodC5iPXkkKHUodC5mLDMzKS5BZygpLmkpLG49bmV3IG5yKHUodC5mLDMzKS5BZygpKTtuLmUhPW4uaS5nYygpOyllPXUoZHIobiksMTM3KSx1ZSh0LmIsbmV3IGlldChlKSk7cmV0dXJuIHQuYn1mdW5jdGlvbiBJZm4odCl7dmFyIGUsbjtpZighdC5lKWZvcih0LmU9eSQodHJ0KHUodC5mLDMzKSkuaSksbj1uZXcgbnIodHJ0KHUodC5mLDMzKSkpO24uZSE9bi5pLmdjKCk7KWU9dShkcihuKSwxMTgpLHVlKHQuZSxuZXcgeHp0KGUpKTtyZXR1cm4gdC5lfWZ1bmN0aW9uIGtzZSh0KXt2YXIgZSxuO2lmKCF0LmEpZm9yKHQuYT15JChpJCh1KHQuZiwzMykpLmkpLG49bmV3IG5yKGkkKHUodC5mLDMzKSkpO24uZSE9bi5pLmdjKCk7KWU9dShkcihuKSwzMyksdWUodC5hLG5ldyBzbnQodCxlKSk7cmV0dXJuIHQuYX1mdW5jdGlvbiBjdyh0KXt2YXIgZTtpZighdC5DJiYodC5EIT1udWxsfHx0LkIhPW51bGwpKWlmKGU9SjNuKHQpLGUpdC55ayhlKTtlbHNlIHRyeXt0LnlrKG51bGwpfWNhdGNoKG4pe2lmKG49cnMobiksIV90KG4sNjApKXRocm93IG50KG4pfXJldHVybiB0LkN9ZnVuY3Rpb24gT2ZuKHQpe3N3aXRjaCh0LnEuZyl7Y2FzZSA1OlVzZSh0LChiZSgpLE9uKSksVXNlKHQseXIpO2JyZWFrO2Nhc2UgNDpSbGUodCwoYmUoKSxPbikpLFJsZSh0LHlyKTticmVhaztkZWZhdWx0OldhZSh0LChiZSgpLE9uKSksV2FlKHQseXIpfX1mdW5jdGlvbiBOZm4odCl7c3dpdGNoKHQucS5nKXtjYXNlIDU6V3NlKHQsKGJlKCksSG4pKSxXc2UodCxCbik7YnJlYWs7Y2FzZSA0OmpsZSh0LChiZSgpLEhuKSksamxlKHQsQm4pO2JyZWFrO2RlZmF1bHQ6S2FlKHQsKGJlKCksSG4pKSxLYWUodCxCbil9fWZ1bmN0aW9uIGY0KHQsZSl7dmFyIG4scixzO2ZvcihzPW5ldyBEYSxyPXQuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksMzcpLHdDKG4scy5hLDApLHMuYSs9bi5mLmErZSxzLmI9Yi5NYXRoLm1heChzLmIsbi5mLmIpO3JldHVybiBzLmI+MCYmKHMuYis9ZSksc31mdW5jdGlvbiBVeih0LGUpe3ZhciBuLHIscztmb3Iocz1uZXcgRGEscj10LktjKCk7ci5PYigpOyluPXUoci5QYigpLDM3KSx3QyhuLDAscy5iKSxzLmIrPW4uZi5iK2Uscy5hPWIuTWF0aC5tYXgocy5hLG4uZi5hKTtyZXR1cm4gcy5hPjAmJihzLmErPWUpLHN9ZnVuY3Rpb24gRXNlKHQpe3ZhciBlLG4scjtmb3Iocj1UaSxuPW5ldyBTKHQuYSk7bi5hPG4uYy5jLmxlbmd0aDspZT11KFEobiksMTApLGVhKGUsKGFlKCksTGMpKSYmKHI9Yi5NYXRoLm1pbihyLHUoSyhlLExjKSwxOSkuYSkpO3JldHVybiByfWZ1bmN0aW9uIFRzZSh0LGUpe3ZhciBuLHI7aWYoZS5sZW5ndGg9PTApcmV0dXJuIDA7Zm9yKG49Sm50KHQuYSxlWzBdLChiZSgpLEJuKSksbis9Sm50KHQuYSxlW2UubGVuZ3RoLTFdLEhuKSxyPTA7cjxlLmxlbmd0aDtyKyspbis9djBuKHQscixlKTtyZXR1cm4gbn1mdW5jdGlvbiBfc2UoKXtiQygpLHRoaXMuYz1uZXcgbGUsdGhpcy5pPW5ldyBsZSx0aGlzLmU9bmV3IEEwLHRoaXMuZj1uZXcgQTAsdGhpcy5nPW5ldyBBMCx0aGlzLmo9bmV3IGxlLHRoaXMuYT1uZXcgbGUsdGhpcy5iPW5ldyBBcix0aGlzLms9bmV3IEFyfWZ1bmN0aW9uIHlzdCh0LGUpe3ZhciBuLHI7cmV0dXJuIHQuRGI+PjE2PT02P3QuQ2IuaWgodCw1LG8xLGUpOihyPW9vKHUod24oKG49dShNbih0LDE2KSwyNiksbnx8dC56aCgpKSx0LkRiPj4xNiksMTgpKSx0LkNiLmloKHQsci5uLHIuZixlKSl9ZnVuY3Rpb24gUGZuKHQpe2s4KCk7dmFyIGU9dC5lO2lmKGUmJmUuc3RhY2spe3ZhciBuPWUuc3RhY2sscj1lK2AKYDtyZXR1cm4gbi5zdWJzdHJpbmcoMCxyLmxlbmd0aCk9PXImJihuPW4uc3Vic3RyaW5nKHIubGVuZ3RoKSksbi5zcGxpdChgCmApfXJldHVybltdfWZ1bmN0aW9uIEZmbih0KXt2YXIgZTtyZXR1cm4gZT0oJGVlKCkseWdlKSxlW3Q+Pj4yOF18ZVt0Pj4yNCYxNV08PDR8ZVt0Pj4yMCYxNV08PDh8ZVt0Pj4xNiYxNV08PDEyfGVbdD4+MTImMTVdPDwxNnxlW3Q+PjgmMTVdPDwyMHxlW3Q+PjQmMTVdPDwyNHxlW3QmMTVdPDwyOH1mdW5jdGlvbiBDc2UodCl7dmFyIGUsbixyO3QuYj09dC5jJiYocj10LmEubGVuZ3RoLG49eHl0KGIuTWF0aC5tYXgoOCxyKSk8PDEsdC5iIT0wPyhlPWZmKHQuYSxuKSxLZWUodCxlLHIpLHQuYT1lLHQuYj0wKTpXenQodC5hLG4pLHQuYz1yKX1mdW5jdGlvbiBCZm4odCxlKXt2YXIgbjtyZXR1cm4gbj10LmIsbi5YZSgoZGkoKSxtbCkpP24uSGYoKT09KGJlKCksQm4pPy1uLnJmKCkuYS1adCh2ZShuLldlKG1sKSkpOmUrWnQodmUobi5XZShtbCkpKTpuLkhmKCk9PShiZSgpLEJuKT8tbi5yZigpLmE6ZX1mdW5jdGlvbiBaRCh0KXt2YXIgZTtyZXR1cm4gdC5iLmMubGVuZ3RoIT0wJiZ1KFBlKHQuYiwwKSw3MCkuYT91KFBlKHQuYiwwKSw3MCkuYTooZT1zcnQodCksZT8/IiIrKHQuYz9Hbyh0LmMuYSx0LDApOi0xKSl9ZnVuY3Rpb24gV3oodCl7dmFyIGU7cmV0dXJuIHQuZi5jLmxlbmd0aCE9MCYmdShQZSh0LmYsMCksNzApLmE/dShQZSh0LmYsMCksNzApLmE6KGU9c3J0KHQpLGU/PyIiKyh0Lmk/R28odC5pLmosdCwwKTotMSkpfWZ1bmN0aW9uIFJmbih0LGUpe3ZhciBuLHI7aWYoZTwwfHxlPj10LmdjKCkpcmV0dXJuIG51bGw7Zm9yKG49ZTtuPHQuZ2MoKTsrK24paWYocj11KHQuWGIobiksMTI4KSxuPT10LmdjKCktMXx8IXIubylyZXR1cm4gbmV3IHlhKGRlKG4pLHIpO3JldHVybiBudWxsfWZ1bmN0aW9uIGpmbih0LGUsbil7dmFyIHIscyxvLGgsZDtmb3Iobz10LmMsZD1uP2U6dCxyPW4/dDplLHM9ZC5wKzE7czxyLnA7KytzKWlmKGg9dShQZShvLmEscyksMTApLCEoaC5rPT0oR24oKSxxMSl8fGQxbihoKSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gejN0KHQpe3ZhciBlLG4scixzLG87Zm9yKG89MCxzPU5zLHI9MCxuPW5ldyBTKHQuYSk7bi5hPG4uYy5jLmxlbmd0aDspZT11KFEobiksMTg3KSxvKz1lLnIrKHI+MD90LmM6MCkscz1iLk1hdGgubWF4KHMsZS5kKSwrK3I7dC5lPW8sdC5iPXN9ZnVuY3Rpb24gJGZuKHQpe3ZhciBlLG47aWYoIXQuYilmb3IodC5iPXkkKHUodC5mLDExOCkuQWcoKS5pKSxuPW5ldyBucih1KHQuZiwxMTgpLkFnKCkpO24uZSE9bi5pLmdjKCk7KWU9dShkcihuKSwxMzcpLHVlKHQuYixuZXcgaWV0KGUpKTtyZXR1cm4gdC5ifWZ1bmN0aW9uIHpmbih0LGUpe3ZhciBuLHIscztpZihlLmRjKCkpcmV0dXJuIGw4KCksbDgoKSxsTjtmb3Iobj1uZXcgTFd0KHQsZS5nYygpKSxzPW5ldyBucih0KTtzLmUhPXMuaS5nYygpOylyPWRyKHMpLGUuSGMocikmJk9yKG4scik7cmV0dXJuIG59ZnVuY3Rpb24gcTN0KHQsZSxuLHIpe3JldHVybiBlPT0wP3I/KCF0Lm8mJih0Lm89bmV3IElsKChudSgpLF9iKSwkdyx0LDApKSx0Lm8pOighdC5vJiYodC5vPW5ldyBJbCgobnUoKSxfYiksJHcsdCwwKSksZkQodC5vKSk6anoodCxlLG4scil9ZnVuY3Rpb24geHN0KHQpe3ZhciBlLG47aWYodC5yYilmb3IoZT0wLG49dC5yYi5pO2U8bjsrK2UpRk0oQXQodC5yYixlKSk7aWYodC52Yilmb3IoZT0wLG49dC52Yi5pO2U8bjsrK2UpRk0oQXQodC52YixlKSk7a18oKEd1KCksU2EpLHQpLHQuQmJ8PTF9ZnVuY3Rpb24gVWkodCxlLG4scixzLG8saCxkLHcsayxfLE0sQixxKXtyZXR1cm4gbm9lKHQsZSxyLG51bGwscyxvLGgsZCx3LGssQiwhMCxxKSxaeXQodCxfKSxfdCh0LkNiLDg4KSYmaHkoaGwodSh0LkNiLDg4KSksMiksbiYmWm10KHQsbiksSnl0KHQsTSksdH1mdW5jdGlvbiBxZm4odCl7dmFyIGUsbjtpZih0PT1udWxsKXJldHVybiBudWxsO249MDt0cnl7bj1HbCh0LE9hLFRpKSZNc31jYXRjaChyKXtpZihyPXJzKHIpLF90KHIsMTI3KSllPVIkKHQpLG49ZVswXTtlbHNlIHRocm93IG50KHIpfXJldHVybiBJRChuKX1mdW5jdGlvbiBIZm4odCl7dmFyIGUsbjtpZih0PT1udWxsKXJldHVybiBudWxsO249MDt0cnl7bj1HbCh0LE9hLFRpKSZNc31jYXRjaChyKXtpZihyPXJzKHIpLF90KHIsMTI3KSllPVIkKHQpLG49ZVswXTtlbHNlIHRocm93IG50KHIpfXJldHVybiBJRChuKX1mdW5jdGlvbiBWZm4odCxlKXt2YXIgbixyLHM7cmV0dXJuIHM9dC5oLWUuaCxzPDB8fChuPXQubC1lLmwscj10Lm0tZS5tKyhuPj4yMikscys9cj4+MjIsczwwKT8hMToodC5sPW4mdmwsdC5tPXImdmwsdC5oPXMmVzAsITApfWZ1bmN0aW9uIEdmbih0LGUsbixyLHMsbyxoKXt2YXIgZCx3O3JldHVybiEoZS5BZSgpJiYodz10LmEudWUobixyKSx3PDB8fCFzJiZ3PT0wKXx8ZS5CZSgpJiYoZD10LmEudWUobixvKSxkPjB8fCFoJiZkPT0wKSl9ZnVuY3Rpb24gVWZuKHQsZSl7UTgoKTt2YXIgbjtpZihuPXQuai5nLWUuai5nLG4hPTApcmV0dXJuIDA7c3dpdGNoKHQuai5nKXtjYXNlIDI6cmV0dXJuIFZpdChlLGI5dCktVml0KHQsYjl0KTtjYXNlIDQ6cmV0dXJuIFZpdCh0LHA5dCktVml0KGUscDl0KX1yZXR1cm4gMH1mdW5jdGlvbiBXZm4odCl7c3dpdGNoKHQuZyl7Y2FzZSAwOnJldHVybiBUbHQ7Y2FzZSAxOnJldHVybiBfbHQ7Y2FzZSAyOnJldHVybiBDbHQ7Y2FzZSAzOnJldHVybiBTbHQ7Y2FzZSA0OnJldHVybiBQVjtjYXNlIDU6cmV0dXJuIEFsdDtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiBJbyh0LGUsbil7dmFyIHIscztyZXR1cm4gcj0ocz1uZXcgWHR0LGcyKHMsZSksdHUocyxuKSxPcigoIXQuYyYmKHQuYz1uZXcgaGUoencsdCwxMiwxMCkpLHQuYykscykscyksUGcociwwKSx0eShyLDEpLGpnKHIsITApLFJnKHIsITApLHJ9ZnVuY3Rpb24gbngodCxlKXt2YXIgbixyO2lmKGU+PXQuaSl0aHJvdyBudChuZXcgV2V0KGUsdC5pKSk7cmV0dXJuKyt0Lmosbj10LmdbZV0scj10LmktZS0xLHI+MCYmUGModC5nLGUrMSx0LmcsZSxyKSxscyh0LmcsLS10LmksbnVsbCksdC5maShlLG4pLHQuY2koKSxufWZ1bmN0aW9uIFNzZSh0LGUpe3ZhciBuLHI7cmV0dXJuIHQuRGI+PjE2PT0xNz90LkNiLmloKHQsMjEsS2gsZSk6KHI9b28odSh3bigobj11KE1uKHQsMTYpLDI2KSxufHx0LnpoKCkpLHQuRGI+PjE2KSwxOCkpLHQuQ2IuaWgodCxyLm4sci5mLGUpKX1mdW5jdGlvbiBLZm4odCl7dmFyIGUsbixyLHM7Zm9yKHBuKCksYWEodC5jLHQuYSkscz1uZXcgUyh0LmMpO3MuYTxzLmMuYy5sZW5ndGg7KWZvcihyPVEocyksbj1uZXcgUyh0LmIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShRKG4pLDY3OSksZS5LZShyKX1mdW5jdGlvbiBZZm4odCl7dmFyIGUsbixyLHM7Zm9yKHBuKCksYWEodC5jLHQuYSkscz1uZXcgUyh0LmMpO3MuYTxzLmMuYy5sZW5ndGg7KWZvcihyPVEocyksbj1uZXcgUyh0LmIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShRKG4pLDM2OSksZS5LZShyKX1mdW5jdGlvbiBYZm4odCl7dmFyIGUsbixyLHMsbztmb3Iocz1UaSxvPW51bGwscj1uZXcgUyh0LmQpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShRKHIpLDIxMyksbi5kLmpebi5lLmomJihlPW4uZS5lLW4uZC5lLW4uYSxlPHMmJihzPWUsbz1uKSk7cmV0dXJuIG99ZnVuY3Rpb24gSDN0KCl7SDN0PVgsb2JlPW5ldyB2bihjeHQsKEZuKCksITEpKSxpYmU9bmV3IHZuKHV4dCwxMDApLGdFdD0oal8oKSxZdXQpLHNiZT1uZXcgdm4obHh0LGdFdCksYWJlPW5ldyB2bihoeHQseGQpLGNiZT1uZXcgdm4oZnh0LGRlKFRpKSl9ZnVuY3Rpb24gQXNlKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxfO2ZvcihrPTAscz10LmFbZV0sbz0wLGg9cy5sZW5ndGg7bzxoOysrbylmb3Iocj1zW29dLF89UV8ocixuKSx3PV8uS2MoKTt3Lk9iKCk7KWQ9dSh3LlBiKCksMTEpLEFpKHQuZixkLGRlKGsrKykpfWZ1bmN0aW9uIFFmbih0LGUsbil7dmFyIHIscyxvLGg7aWYobilmb3Iocz1uLmEubGVuZ3RoLHI9bmV3IEpiKHMpLGg9KHIuYi1yLmEpKnIuYzwwPyhPcCgpLE1iKTpuZXcgQnAocik7aC5PYigpOylvPXUoaC5QYigpLDE5KSxjbih0LGUsaXgoWG0obixvLmEpKSl9ZnVuY3Rpb24gWmZuKHQsZSxuKXt2YXIgcixzLG8saDtpZihuKWZvcihzPW4uYS5sZW5ndGgscj1uZXcgSmIocyksaD0oci5iLXIuYSkqci5jPDA/KE9wKCksTWIpOm5ldyBCcChyKTtoLk9iKCk7KW89dShoLlBiKCksMTkpLGNuKHQsZSxpeChYbShuLG8uYSkpKX1mdW5jdGlvbiBWM3QodCl7dGIoKTt2YXIgZTtyZXR1cm4gZT11KFhEKE42KHQuayksTnQoWmEsQ2MsNjEsMiwwLDEpKSwxMjIpLE04KGUsMCxlLmxlbmd0aCxudWxsKSxlWzBdPT0oYmUoKSxPbikmJmVbMV09PUJuJiYobHMoZSwwLEJuKSxscyhlLDEsT24pKSxlfWZ1bmN0aW9uIExzZSh0LGUsbil7dmFyIHIscyxvO3JldHVybiBzPUIybih0LGUsbiksbz1ENXQodCxzKSxHcnQodC5iKSxFcnQodCxlLG4pLHBuKCksYWEocyxuZXcgZCR0KHQpKSxyPUQ1dCh0LHMpLEdydCh0LmIpLEVydCh0LG4sZSksbmV3IHlhKGRlKG8pLGRlKHIpKX1mdW5jdGlvbiBNc2UoKXtNc2U9WCx2bWU9RWkobmV3IFpzLChZYSgpLGpvKSwoY28oKSxmUykpLHBHPW5ldyBIcygibGluZWFyU2VnbWVudHMuaW5wdXRQcmlvIixkZSgwKSksYkc9bmV3IEhzKCJsaW5lYXJTZWdtZW50cy5vdXRwdXRQcmlvIixkZSgwKSl9ZnVuY3Rpb24gbzcoKXtvNz1YLHZHPW5ldyBVUigiUDFfVFJFRUlGSUNBVElPTiIsMCksUFM9bmV3IFVSKCJQMl9OT0RFX09SREVSSU5HIiwxKSxQTz1uZXcgVVIoIlAzX05PREVfUExBQ0VNRU5UIiwyKSxGUz1uZXcgVVIoIlA0X0VER0VfUk9VVElORyIsMyl9ZnVuY3Rpb24gYXkoKXtheT1YLEl5ZT0oZGkoKSwkeCksT3llPUcyLEF5ZT1IMixMeWU9bzUsTXllPW1iLFN5ZT1hNSxtQ3Q9WU8sRHllPUt5LFJodD0oZDV0KCkseXllKSxqaHQ9eHllLHlDdD1reWUsQ0c9RXllLFNHPVR5ZSxCTz1feWUseEN0PUN5ZX1mdW5jdGlvbiBWbCgpe1ZsPVgsWk89bmV3IFlSKCJVTktOT1dOIiwwKSx1MD1uZXcgWVIoIkFCT1ZFIiwxKSx5Yj1uZXcgWVIoIkJFTE9XIiwyKSxRTz1uZXcgWVIoIklOTElORSIsMyksbmV3IEhzKCJvcmcuZWNsaXBzZS5lbGsubGFiZWxTaWRlIixaTyl9ZnVuY3Rpb24gRHNlKHQsZSl7dmFyIG47aWYodC5uaSgpJiZlIT1udWxsKXtmb3Iobj0wO248dC5pOysrbilpZihTaShlLHQuZ1tuXSkpcmV0dXJuIG59ZWxzZSBmb3Iobj0wO248dC5pOysrbilpZihHdCh0Lmdbbl0pPT09R3QoZSkpcmV0dXJuIG47cmV0dXJuLTF9ZnVuY3Rpb24gSmZuKHQsZSxuKXt2YXIgcixzO3JldHVybiBlLmM9PShobygpLHN1KSYmbi5jPT1hbD8tMTplLmM9PWFsJiZuLmM9PXN1PzE6KHI9a3JlKGUuYSx0LmEpLHM9a3JlKG4uYSx0LmEpLGUuYz09c3U/cy1yOnItcyl9ZnVuY3Rpb24gb3kodCxlLG4pe2lmKG4mJihlPDB8fGU+bi5hLmMubGVuZ3RoKSl0aHJvdyBudChuZXcgUG4oImluZGV4IG11c3QgYmUgPj0gMCBhbmQgPD0gbGF5ZXIgbm9kZSBjb3VudCIpKTt0LmMmJkV1KHQuYy5hLHQpLHQuYz1uLG4mJiRtKG4uYSxlLHQpfWZ1bmN0aW9uIElzZSh0LGUpe3ZhciBuLHIscztmb3Iocj1uZXcgYXIobHIoejAodCkuYS5LYygpLG5ldyBIKSk7VnIocik7KXJldHVybiBuPXUoSXIociksMTcpLHM9dShlLktiKG4pLDEwKSxuZXcgQmsoRHIocy5uLmIrcy5vLmIvMikpO3JldHVybiBEVCgpLERUKCksYnV0fWZ1bmN0aW9uIE9zZSh0LGUpe3RoaXMuYz1uZXcgQXIsdGhpcy5hPXQsdGhpcy5iPWUsdGhpcy5kPXUoSyh0LChhZSgpLFg0KSksMzA0KSxHdChLKHQsKHhlKCksZV90KSkpPT09R3QoKGJEKCksRlYpKT90aGlzLmU9bmV3IGxxdDp0aGlzLmU9bmV3IHVxdH1mdW5jdGlvbiB0MW4odCxlKXt2YXIgbixyLHMsbztmb3Iobz0wLHI9bmV3IFModCk7ci5hPHIuYy5jLmxlbmd0aDspbj11KFEociksMzMpLG8rPWIuTWF0aC5wb3cobi5nKm4uZi1lLDIpO3JldHVybiBzPWIuTWF0aC5zcXJ0KG8vKHQuYy5sZW5ndGgtMSkpLHN9ZnVuY3Rpb24gb0ModCxlKXt2YXIgbixyO3JldHVybiByPW51bGwsdC5YZSgoZGkoKSx6eCkpJiYobj11KHQuV2UoengpLDk0KSxuLlhlKGUpJiYocj1uLldlKGUpKSkscj09bnVsbCYmdC55ZigpJiYocj10LnlmKCkuV2UoZSkpLHI9PW51bGwmJihyPUllKGUpKSxyfWZ1bmN0aW9uIGtzdCh0LGUpe3ZhciBuLHI7bj10LlpjKGUpO3RyeXtyZXR1cm4gcj1uLlBiKCksbi5RYigpLHJ9Y2F0Y2gocyl7dGhyb3cgcz1ycyhzKSxfdChzLDEwOSk/bnQobmV3IENvKCJDYW4ndCByZW1vdmUgZWxlbWVudCAiK2UpKTpudChzKX19ZnVuY3Rpb24gZTFuKHQsZSl7dmFyIG4scixzO2lmKHI9bmV3IENSLHM9bmV3IHl5dChyLnEuZ2V0RnVsbFllYXIoKS1pYixyLnEuZ2V0TW9udGgoKSxyLnEuZ2V0RGF0ZSgpKSxuPW55bih0LGUscyksbj09MHx8bjxlLmxlbmd0aCl0aHJvdyBudChuZXcgUG4oZSkpO3JldHVybiBzfWZ1bmN0aW9uIEczdCh0LGUpe3ZhciBuLHIscztmb3IoSW4oZSksSTJ0KGUhPXQpLHM9dC5iLmMubGVuZ3RoLHI9ZS5LYygpO3IuT2IoKTspbj1yLlBiKCksdWUodC5iLEluKG4pKTtyZXR1cm4gcyE9dC5iLmMubGVuZ3RoPyhEeXQodCwwKSwhMCk6ITF9ZnVuY3Rpb24gSkQoKXtKRD1YLHdFdD0oZGkoKSxSRyksbmV3IGFvKHNmdCwoRm4oKSwhMCkpLGxiZT1IMixoYmU9bzUsZmJlPW1iLHViZT1hNSx5RXQ9WU8sZGJlPUt5LHZFdD0oSDN0KCksb2JlKSxwRXQ9c2JlLGJFdD1hYmUsbUV0PWNiZSxvVj1pYmV9ZnVuY3Rpb24gbjFuKHQsZSl7aWYoZT09dC5jKXJldHVybiB0LmQ7aWYoZT09dC5kKXJldHVybiB0LmM7dGhyb3cgbnQobmV3IFBuKCIncG9ydCcgbXVzdCBiZSBlaXRoZXIgdGhlIHNvdXJjZSBwb3J0IG9yIHRhcmdldCBwb3J0IG9mIHRoZSBlZGdlLiIpKX1mdW5jdGlvbiByMW4odCxlLG4pe3ZhciByLHM7c3dpdGNoKHM9dC5vLHI9dC5kLGUuZyl7Y2FzZSAxOnJldHVybi1yLmQtbjtjYXNlIDM6cmV0dXJuIHMuYityLmErbjtjYXNlIDI6cmV0dXJuIHMuYStyLmMrbjtjYXNlIDQ6cmV0dXJuLXIuYi1uO2RlZmF1bHQ6cmV0dXJuIDB9fWZ1bmN0aW9uIFUzdCh0LGUsbixyKXt2YXIgcyxvLGgsZDtmb3IoTG8oZSx1KHIuWGIoMCksMjkpKSxkPXIuYmQoMSxyLmdjKCkpLG89dShuLktiKGUpLDIwKS5LYygpO28uT2IoKTspcz11KG8uUGIoKSwxNyksaD1zLmMuaT09ZT9zLmQuaTpzLmMuaSxVM3QodCxoLG4sZCl9ZnVuY3Rpb24gTnNlKHQpe3ZhciBlO3JldHVybiBlPW5ldyBBcixlYSh0LChhZSgpLHpsdCkpP3UoSyh0LHpsdCksODMpOih5cyhXaShuZXcga24obnVsbCxuZXcgVG4odC5qLDE2KSksbmV3IGFYKSxuZXcgZzYoZSkpLGVlKHQsemx0LGUpLGUpfWZ1bmN0aW9uIFczdCh0LGUpe3ZhciBuLHI7cmV0dXJuIHQuRGI+PjE2PT02P3QuQ2IuaWgodCw2LHJhLGUpOihyPW9vKHUod24oKG49dShNbih0LDE2KSwyNiksbnx8KG51KCksWUcpKSx0LkRiPj4xNiksMTgpKSx0LkNiLmloKHQsci5uLHIuZixlKSl9ZnVuY3Rpb24gSzN0KHQsZSl7dmFyIG4scjtyZXR1cm4gdC5EYj4+MTY9PTc/dC5DYi5paCh0LDEsc04sZSk6KHI9b28odSh3bigobj11KE1uKHQsMTYpLDI2KSxufHwobnUoKSxQQXQpKSx0LkRiPj4xNiksMTgpKSx0LkNiLmloKHQsci5uLHIuZixlKSl9ZnVuY3Rpb24gWTN0KHQsZSl7dmFyIG4scjtyZXR1cm4gdC5EYj4+MTY9PTk/dC5DYi5paCh0LDksZHMsZSk6KHI9b28odSh3bigobj11KE1uKHQsMTYpLDI2KSxufHwobnUoKSxCQXQpKSx0LkRiPj4xNiksMTgpKSx0LkNiLmloKHQsci5uLHIuZixlKSl9ZnVuY3Rpb24gUHNlKHQsZSl7dmFyIG4scjtyZXR1cm4gdC5EYj4+MTY9PTU/dC5DYi5paCh0LDksaVUsZSk6KHI9b28odSh3bigobj11KE1uKHQsMTYpLDI2KSxufHwobG4oKSxpcCkpLHQuRGI+PjE2KSwxOCkpLHQuQ2IuaWgodCxyLm4sci5mLGUpKX1mdW5jdGlvbiBYM3QodCxlKXt2YXIgbixyO3JldHVybiB0LkRiPj4xNj09Mz90LkNiLmloKHQsMCxvTixlKToocj1vbyh1KHduKChuPXUoTW4odCwxNiksMjYpLG58fChsbigpLHJwKSksdC5EYj4+MTYpLDE4KSksdC5DYi5paCh0LHIubixyLmYsZSkpfWZ1bmN0aW9uIEZzZSh0LGUpe3ZhciBuLHI7cmV0dXJuIHQuRGI+PjE2PT03P3QuQ2IuaWgodCw2LG8xLGUpOihyPW9vKHUod24oKG49dShNbih0LDE2KSwyNiksbnx8KGxuKCksYXApKSx0LkRiPj4xNiksMTgpKSx0LkNiLmloKHQsci5uLHIuZixlKSl9ZnVuY3Rpb24gQnNlKCl7dGhpcy5hPW5ldyBYRix0aGlzLmc9bmV3IEh6LHRoaXMuaj1uZXcgSHosdGhpcy5iPW5ldyBBcix0aGlzLmQ9bmV3IEh6LHRoaXMuaT1uZXcgSHosdGhpcy5rPW5ldyBBcix0aGlzLmM9bmV3IEFyLHRoaXMuZT1uZXcgQXIsdGhpcy5mPW5ldyBBcn1mdW5jdGlvbiBpMW4odCxlLG4pe3ZhciByLHMsbztmb3IobjwwJiYobj0wKSxvPXQuaSxzPW47czxvO3MrKylpZihyPUF0KHQscyksZT09bnVsbCl7aWYocj09bnVsbClyZXR1cm4gc31lbHNlIGlmKEd0KGUpPT09R3Qocil8fFNpKGUscikpcmV0dXJuIHM7cmV0dXJuLTF9ZnVuY3Rpb24gczFuKHQsZSl7dmFyIG4scjtyZXR1cm4gbj1lLkhoKHQuYSksbj8ocj1qcihKZigoIW4uYiYmKG4uYj1uZXcgQWwoKGxuKCksSmEpLHBjLG4pKSxuLmIpLE9IKSksdW4odE8scik/a18odCx6bChlLkhqKCkpKTpyKTpudWxsfWZ1bmN0aW9uIGM3KHQsZSl7dmFyIG4scjtpZihlKXtpZihlPT10KXJldHVybiEwO2ZvcihuPTAscj11KGUsNDkpLmVoKCk7ciYmciE9ZTtyPXIuZWgoKSl7aWYoKytuPnVvdClyZXR1cm4gYzcodCxyKTtpZihyPT10KXJldHVybiEwfX1yZXR1cm4hMX1mdW5jdGlvbiBhMW4odCl7c3dpdGNoKGdqKCksdC5xLmcpe2Nhc2UgNTp4b2UodCwoYmUoKSxPbikpLHhvZSh0LHlyKTticmVhaztjYXNlIDQ6YmNlKHQsKGJlKCksT24pKSxiY2UodCx5cik7YnJlYWs7ZGVmYXVsdDpiaGUodCwoYmUoKSxPbikpLGJoZSh0LHlyKX19ZnVuY3Rpb24gbzFuKHQpe3N3aXRjaChnaigpLHQucS5nKXtjYXNlIDU6Rm9lKHQsKGJlKCksSG4pKSxGb2UodCxCbik7YnJlYWs7Y2FzZSA0OldpZSh0LChiZSgpLEhuKSksV2llKHQsQm4pO2JyZWFrO2RlZmF1bHQ6dmhlKHQsKGJlKCksSG4pKSx2aGUodCxCbil9fWZ1bmN0aW9uIGMxbih0KXt2YXIgZSxuO2U9dShLKHQsKG4xKCksZWJlKSksMTkpLGU/KG49ZS5hLG49PTA/ZWUodCwoVXAoKSxhViksbmV3IEhpdCk6ZWUodCwoVXAoKSxhViksbmV3IFQkKG4pKSk6ZWUodCwoVXAoKSxhViksbmV3IFQkKDEpKX1mdW5jdGlvbiB1MW4odCxlKXt2YXIgbjtzd2l0Y2gobj10LmksZS5nKXtjYXNlIDE6cmV0dXJuLSh0Lm4uYit0Lm8uYik7Y2FzZSAyOnJldHVybiB0Lm4uYS1uLm8uYTtjYXNlIDM6cmV0dXJuIHQubi5iLW4uby5iO2Nhc2UgNDpyZXR1cm4tKHQubi5hK3Quby5hKX1yZXR1cm4gMH1mdW5jdGlvbiBsMW4odCxlKXtzd2l0Y2godC5nKXtjYXNlIDA6cmV0dXJuIGU9PShwaCgpLGdiKT9DVjpTVjtjYXNlIDE6cmV0dXJuIGU9PShwaCgpLGdiKT9DVjp2TztjYXNlIDI6cmV0dXJuIGU9PShwaCgpLGdiKT92TzpTVjtkZWZhdWx0OnJldHVybiB2T319ZnVuY3Rpb24gdEkodCxlKXt2YXIgbixyLHM7Zm9yKEV1KHQuYSxlKSx0LmUtPWUucisodC5hLmMubGVuZ3RoPT0wPzA6dC5jKSxzPUZrdCxyPW5ldyBTKHQuYSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KFEociksMTg3KSxzPWIuTWF0aC5tYXgocyxuLmQpO3QuYj1zfWZ1bmN0aW9uIFEzdCh0LGUpe3ZhciBuLHI7cmV0dXJuIHQuRGI+PjE2PT0zP3QuQ2IuaWgodCwxMixkcyxlKToocj1vbyh1KHduKChuPXUoTW4odCwxNiksMjYpLG58fChudSgpLE5BdCkpLHQuRGI+PjE2KSwxOCkpLHQuQ2IuaWgodCxyLm4sci5mLGUpKX1mdW5jdGlvbiBaM3QodCxlKXt2YXIgbixyO3JldHVybiB0LkRiPj4xNj09MTE/dC5DYi5paCh0LDEwLGRzLGUpOihyPW9vKHUod24oKG49dShNbih0LDE2KSwyNiksbnx8KG51KCksRkF0KSksdC5EYj4+MTYpLDE4KSksdC5DYi5paCh0LHIubixyLmYsZSkpfWZ1bmN0aW9uIFJzZSh0LGUpe3ZhciBuLHI7cmV0dXJuIHQuRGI+PjE2PT0xMD90LkNiLmloKHQsMTEsS2gsZSk6KHI9b28odSh3bigobj11KE1uKHQsMTYpLDI2KSxufHwobG4oKSxzcCkpLHQuRGI+PjE2KSwxOCkpLHQuQ2IuaWgodCxyLm4sci5mLGUpKX1mdW5jdGlvbiBqc2UodCxlKXt2YXIgbixyO3JldHVybiB0LkRiPj4xNj09MTA/dC5DYi5paCh0LDEyLFloLGUpOihyPW9vKHUod24oKG49dShNbih0LDE2KSwyNiksbnx8KGxuKCksZTMpKSx0LkRiPj4xNiksMTgpKSx0LkNiLmloKHQsci5uLHIuZixlKSl9ZnVuY3Rpb24gT2godCl7dmFyIGU7cmV0dXJuISh0LkJiJjEpJiZ0LnImJnQuci5raCgpJiYoZT11KHQuciw0OSksdC5yPXUoWHAodCxlKSwxMzgpLHQuciE9ZSYmdC5EYiY0JiYhKHQuRGImMSkmJkNpKHQsbmV3IG9hKHQsOSw4LGUsdC5yKSkpLHQucn1mdW5jdGlvbiBFc3QodCxlLG4pe3ZhciByO3JldHVybiByPXV0KG90KGdhLDEpLFRvLDI1LDE1LFtFNHQodCwoWmYoKSxmYyksZSxuKSxFNHQodCxpdSxlLG4pLEU0dCh0LGRjLGUsbildKSx0LmYmJihyWzBdPWIuTWF0aC5tYXgoclswXSxyWzJdKSxyWzJdPXJbMF0pLHJ9ZnVuY3Rpb24gaDFuKHQsZSl7dmFyIG4scixzO2lmKHM9c2ZuKHQsZSkscy5jLmxlbmd0aCE9MClmb3IoYWEocyxuZXcgUlkpLG49cy5jLmxlbmd0aCxyPTA7cjxuO3IrKylkNyh0LChTbihyLHMuYy5sZW5ndGgpLHUocy5jW3JdLDI4NikpLER2bih0LHMscikpfWZ1bmN0aW9uIGYxbih0KXt2YXIgZSxuLHIscztmb3Iocz11KFBpKHQuYSwocDQoKSxBVikpLDE1KS5LYygpO3MuT2IoKTspZm9yKHI9dShzLlBiKCksMTAxKSxuPU42KHIuaykuS2MoKTtuLk9iKCk7KWU9dShuLlBiKCksNjEpLGI4KHQscixlLChKdigpLGRiKSwxKX1mdW5jdGlvbiBkMW4odCl7dmFyIGUsbjtpZih0Lms9PShHbigpLGNhKSl7Zm9yKG49bmV3IGFyKGxyKHowKHQpLmEuS2MoKSxuZXcgSCkpO1ZyKG4pOylpZihlPXUoSXIobiksMTcpLCFXYShlKSYmdC5jPT1zNHQoZSx0KS5jKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIGcxbih0KXt2YXIgZSxuO2lmKHQuaz09KEduKCksY2EpKXtmb3Iobj1uZXcgYXIobHIoejAodCkuYS5LYygpLG5ldyBIKSk7VnIobik7KWlmKGU9dShJcihuKSwxNyksIVdhKGUpJiZlLmMuaS5jPT1lLmQuaS5jKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIHAxbih0LGUpe3ZhciBuLHIscyxvO2ZvcihtcihlLCJEdWxsIGVkZ2Ugcm91dGluZyIsMSksbz1zaSh0LmIsMCk7by5iIT1vLmQuYzspZm9yKHM9dShpaShvKSw4Nikscj1zaShzLmQsMCk7ci5iIT1yLmQuYzspbj11KGlpKHIpLDE4OCksTWgobi5hKX1mdW5jdGlvbiBiMW4odCxlKXt2YXIgbixyLHMsbyxoO2lmKGUpZm9yKHM9ZS5hLmxlbmd0aCxuPW5ldyBKYihzKSxoPShuLmItbi5hKSpuLmM8MD8oT3AoKSxNYik6bmV3IEJwKG4pO2guT2IoKTspbz11KGguUGIoKSwxOSkscj1UOChlLG8uYSksciYmdWNlKHQscil9ZnVuY3Rpb24gdjFuKCl7Z2J0KCk7dmFyIHQsZTtmb3IoRjVuKCh6cCgpLEFuKSksQTVuKEFuKSx4c3QoQW4pLFFBdD0obG4oKSxLMSksZT1uZXcgUyhhTHQpO2UuYTxlLmMuYy5sZW5ndGg7KXQ9dShRKGUpLDI0MSksVDcodCxLMSxudWxsKTtyZXR1cm4hMH1mdW5jdGlvbiBKM3QodCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrO3JldHVybiB3PXQuaD4+MTksaz1lLmg+PjE5LHchPWs/ay13OihzPXQuaCxkPWUuaCxzIT1kP3MtZDoocj10Lm0saD1lLm0sciE9aD9yLWg6KG49dC5sLG89ZS5sLG4tbykpKX1mdW5jdGlvbiBLeigpe0t6PVgsJDd0PShncSgpLFB1dCksajd0PW5ldyB2bih6NnQsJDd0KSxSN3Q9KCQkKCksTnV0KSxCN3Q9bmV3IHZuKHE2dCxSN3QpLEY3dD0oTnooKSxPdXQpLFA3dD1uZXcgdm4oSDZ0LEY3dCksTjd0PW5ldyB2bihWNnQsKEZuKCksITApKX1mdW5jdGlvbiBjQyh0LGUsbil7dmFyIHIscztyPWUqbixfdCh0LmcsMTQ1KT8ocz1xNih0KSxzLmYuZD9zLmYuYXx8KHQuZC5hKz1yK1IxKToodC5kLmQtPXIrUjEsdC5kLmErPXIrUjEpKTpfdCh0LmcsMTApJiYodC5kLmQtPXIsdC5kLmErPTIqcil9ZnVuY3Rpb24gJHNlKHQsZSxuKXt2YXIgcixzLG8saCxkO2ZvcihzPXRbbi5nXSxkPW5ldyBTKGUuZCk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KFEoZCksMTAxKSxvPWguaSxvJiZvLmk9PW4mJihyPWguZFtuLmddLHNbcl09Yi5NYXRoLm1heChzW3JdLG8uai5iKSl9ZnVuY3Rpb24gdzFuKHQsZSl7dmFyIG4scixzLG8saDtmb3Iocj0wLHM9MCxuPTAsaD1uZXcgUyhlLmQpO2guYTxoLmMuYy5sZW5ndGg7KW89dShRKGgpLDQ0MyksR3oobykscj1iLk1hdGgubWF4KHIsby5iKSxzKz1vLmQrKG4+MD90Lmc6MCksKytuO2UuYj1yLGUuZT1zfWZ1bmN0aW9uIHpzZSh0KXt2YXIgZSxuLHI7aWYocj10LmIsdVZ0KHQuaSxyLmxlbmd0aCkpe2ZvcihuPXIubGVuZ3RoKjIsdC5iPU50KHl1dCxMSSwzMTcsbiwwLDEpLHQuYz1OdCh5dXQsTEksMzE3LG4sMCwxKSx0LmY9bi0xLHQuaT0wLGU9dC5hO2U7ZT1lLmMpb0kodCxlLGUpOysrdC5nfX1mdW5jdGlvbiBtMW4odCxlLG4scil7dmFyIHMsbyxoLGQ7Zm9yKHM9MDtzPGUubztzKyspZm9yKG89cy1lLmorbixoPTA7aDxlLnA7aCsrKWQ9aC1lLmsrcixoNChlLHMsaCk/aGZuKHQsbyxkKXx8QWZuKHQsbyxkKTpmc2UoZSxzLGgpJiYoY3NlKHQsbyxkKXx8TGZuKHQsbyxkKSl9ZnVuY3Rpb24geTFuKHQsZSxuKXt2YXIgcjtyPWUuYy5pLHIuaz09KEduKCksY2EpPyhlZSh0LChhZSgpLGExKSx1KEsocixhMSksMTEpKSxlZSh0LHFoLHUoSyhyLHFoKSwxMSkpKTooZWUodCwoYWUoKSxhMSksZS5jKSxlZSh0LHFoLG4uZCkpfWZ1bmN0aW9uIHU3KHQsZSxuKXt4NCgpO3ZhciByLHMsbyxoLGQsdztyZXR1cm4gaD1lLzIsbz1uLzIscj1iLk1hdGguYWJzKHQuYSkscz1iLk1hdGguYWJzKHQuYiksZD0xLHc9MSxyPmgmJihkPWgvcikscz5vJiYodz1vL3MpLGxkKHQsYi5NYXRoLm1pbihkLHcpKSx0fWZ1bmN0aW9uIHgxbigpe3lxKCk7dmFyIHQsZTt0cnl7aWYoZT11KHU0dCgoSXAoKSxYaCkscTcpLDIwMTQpLGUpcmV0dXJuIGV9Y2F0Y2gobil7aWYobj1ycyhuKSxfdChuLDEwMikpdD1uLFh2dCgoRnIoKSx0KSk7ZWxzZSB0aHJvdyBudChuKX1yZXR1cm4gbmV3IFo1fWZ1bmN0aW9uIGsxbigpe0l0ZSgpO3ZhciB0LGU7dHJ5e2lmKGU9dSh1NHQoKElwKCksWGgpLEQyKSwyMDI0KSxlKXJldHVybiBlfWNhdGNoKG4pe2lmKG49cnMobiksX3QobiwxMDIpKXQ9bixYdnQoKEZyKCksdCkpO2Vsc2UgdGhyb3cgbnQobil9cmV0dXJuIG5ldyBFbX1mdW5jdGlvbiBFMW4oKXt5cSgpO3ZhciB0LGU7dHJ5e2lmKGU9dSh1NHQoKElwKCksWGgpLGpoKSwxOTQxKSxlKXJldHVybiBlfWNhdGNoKG4pe2lmKG49cnMobiksX3QobiwxMDIpKXQ9bixYdnQoKEZyKCksdCkpO2Vsc2UgdGhyb3cgbnQobil9cmV0dXJuIG5ldyBRWn1mdW5jdGlvbiBUMW4odCxlLG4pe3ZhciByLHM7cmV0dXJuIHM9dC5lLHQuZT1lLHQuRGImNCYmISh0LkRiJjEpJiYocj1uZXcgb2EodCwxLDQscyxlKSxuP24uRWkocik6bj1yKSxzIT1lJiYoZT9uPVQ3KHQsb3EodCxlKSxuKTpuPVQ3KHQsdC5hLG4pKSxufWZ1bmN0aW9uIHFzZSgpe0NSLmNhbGwodGhpcyksdGhpcy5lPS0xLHRoaXMuYT0hMSx0aGlzLnA9T2EsdGhpcy5rPS0xLHRoaXMuYz0tMSx0aGlzLmI9LTEsdGhpcy5nPSExLHRoaXMuZj0tMSx0aGlzLmo9LTEsdGhpcy5uPS0xLHRoaXMuaT0tMSx0aGlzLmQ9LTEsdGhpcy5vPU9hfWZ1bmN0aW9uIF8xbih0LGUpe3ZhciBuLHIscztpZihyPXQuYi5kLmQsdC5hfHwocis9dC5iLmQuYSkscz1lLmIuZC5kLGUuYXx8KHMrPWUuYi5kLmEpLG49anMocixzKSxuPT0wKXtpZighdC5hJiZlLmEpcmV0dXJuLTE7aWYoIWUuYSYmdC5hKXJldHVybiAxfXJldHVybiBufWZ1bmN0aW9uIEMxbih0LGUpe3ZhciBuLHIscztpZihyPXQuYi5iLmQsdC5hfHwocis9dC5iLmIuYSkscz1lLmIuYi5kLGUuYXx8KHMrPWUuYi5iLmEpLG49anMocixzKSxuPT0wKXtpZighdC5hJiZlLmEpcmV0dXJuLTE7aWYoIWUuYSYmdC5hKXJldHVybiAxfXJldHVybiBufWZ1bmN0aW9uIFMxbih0LGUpe3ZhciBuLHIscztpZihyPXQuYi5nLmQsdC5hfHwocis9dC5iLmcuYSkscz1lLmIuZy5kLGUuYXx8KHMrPWUuYi5nLmEpLG49anMocixzKSxuPT0wKXtpZighdC5hJiZlLmEpcmV0dXJuLTE7aWYoIWUuYSYmdC5hKXJldHVybiAxfXJldHVybiBufWZ1bmN0aW9uIHQ0dCgpe3Q0dD1YLHBiZT1lbChFaShFaShFaShuZXcgWnMsKFlhKCksR2MpLChjbygpLGU5dCkpLEdjLG45dCksam8scjl0KSxqbyxWRXQpLHZiZT1FaShFaShuZXcgWnMsR2MsQkV0KSxHYyxHRXQpLGJiZT1lbChuZXcgWnMsam8sV0V0KX1mdW5jdGlvbiBBMW4odCl7dmFyIGUsbixyLHMsbztmb3IoZT11KEsodCwoYWUoKSxtUykpLDgzKSxvPXQubixyPWUuQ2MoKS5LYygpO3IuT2IoKTspbj11KHIuUGIoKSwzMDYpLHM9bi5pLHMuYys9by5hLHMuZCs9by5iLG4uYz9pdWUobik6c3VlKG4pO2VlKHQsbVMsbnVsbCl9ZnVuY3Rpb24gTDFuKHQsZSxuKXt2YXIgcixzO3N3aXRjaChzPXQuYixyPXMuZCxlLmcpe2Nhc2UgMTpyZXR1cm4tci5kLW47Y2FzZSAyOnJldHVybiBzLm8uYStyLmMrbjtjYXNlIDM6cmV0dXJuIHMuby5iK3IuYStuO2Nhc2UgNDpyZXR1cm4tci5iLW47ZGVmYXVsdDpyZXR1cm4tMX19ZnVuY3Rpb24gTTFuKHQpe3ZhciBlLG4scixzLG87aWYocj0wLHM9TjcsdC5iKWZvcihlPTA7ZTwzNjA7ZSsrKW49ZSouMDE3NDUzMjkyNTE5OTQzMjk1LFY1dCh0LHQuZCwwLDAsSTQsbiksbz10LmIuaWcodC5kKSxvPHMmJihyPW4scz1vKTtWNXQodCx0LmQsMCwwLEk0LHIpfWZ1bmN0aW9uIEQxbih0LGUpe3ZhciBuLHIscyxvO2ZvcihvPW5ldyBBcixlLmU9bnVsbCxlLmY9bnVsbCxyPW5ldyBTKGUuaSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KFEociksNjUpLHM9dSh0cih0Lmcsbi5hKSw0Niksbi5hPVZqKG4uYiksQWkobyxuLmEscyk7dC5nPW99ZnVuY3Rpb24gSTFuKHQsZSxuKXt2YXIgcixzLG8saCxkLHc7Zm9yKHM9ZS10LmUsbz1zL3QuZC5jLmxlbmd0aCxoPTAsdz1uZXcgUyh0LmQpO3cuYTx3LmMuYy5sZW5ndGg7KWQ9dShRKHcpLDQ0Mykscj10LmItZC5iK24scGllKGQsZC5lK2gqbyxkLmYpLGRmbihkLG8sciksKytofWZ1bmN0aW9uIEhzZSh0KXt2YXIgZTtpZih0LmYucWooKSx0LmIhPS0xKXtpZigrK3QuYixlPXQuZi5kW3QuYV0sdC5iPGUuaSlyZXR1cm47Kyt0LmF9Zm9yKDt0LmE8dC5mLmQubGVuZ3RoOysrdC5hKWlmKGU9dC5mLmRbdC5hXSxlJiZlLmkhPTApe3QuYj0wO3JldHVybn10LmI9LTF9ZnVuY3Rpb24gTzFuKHQsZSl7dmFyIG4scixzO2ZvcihzPWUuYy5sZW5ndGgsbj1JZ24odCxzPT0wPyIiOihTbigwLGUuYy5sZW5ndGgpLGpyKGUuY1swXSkpKSxyPTE7cjxzJiZuOysrciluPXUobiw0OSkub2goKFNuKHIsZS5jLmxlbmd0aCksanIoZS5jW3JdKSkpO3JldHVybiBufWZ1bmN0aW9uIFZzZSh0LGUpe3ZhciBuLHI7Zm9yKHI9bmV3IFMoZSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KFEociksMTApLHQuY1tuLmMucF1bbi5wXS5hPXF2dCh0LmkpLHQuY1tuLmMucF1bbi5wXS5kPVp0KHQuY1tuLmMucF1bbi5wXS5hKSx0LmNbbi5jLnBdW24ucF0uYj0xfWZ1bmN0aW9uIE4xbih0LGUpe3ZhciBuLHIscyxvO2ZvcihvPTAscj1uZXcgUyh0KTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoUShyKSwxNTcpLG8rPWIuTWF0aC5wb3coSHUobikqTGwobiktZSwyKTtyZXR1cm4gcz1iLk1hdGguc3FydChvLyh0LmMubGVuZ3RoLTEpKSxzfWZ1bmN0aW9uIEdzZSh0LGUsbixyKXt2YXIgcyxvLGg7cmV0dXJuIG89b3duKHQsZSxuLHIpLGg9UjV0KHQsbyksT3N0KHQsZSxuLHIpLEdydCh0LmIpLHBuKCksYWEobyxuZXcgZyR0KHQpKSxzPVI1dCh0LG8pLE9zdCh0LG4sZSxyKSxHcnQodC5iKSxuZXcgeWEoZGUoaCksZGUocykpfWZ1bmN0aW9uIFAxbih0LGUsbil7dmFyIHIscztmb3IobXIobiwiSW50ZXJhY3RpdmUgbm9kZSBwbGFjZW1lbnQiLDEpLHQuYT11KEsoZSwoYWUoKSxYNCkpLDMwNCkscz1uZXcgUyhlLmIpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShRKHMpLDI5KSxtdm4odCxyKTtvcihuKX1mdW5jdGlvbiBGMW4odCxlKXt2YXIgbjttcihlLCJHZW5lcmFsIENvbXBhY3RvciIsMSksZS5uJiZ0JiZnZihlLHBmKHQpLChPbCgpLHRoKSksbj1MbG4odSh6ZSh0LChheSgpLGpodCkpLDM4MCkpLG4uaGcodCksZS5uJiZ0JiZnZihlLHBmKHQpLChPbCgpLHRoKSl9ZnVuY3Rpb24gQjFuKHQsZSxuKXt2YXIgcixzO2Zvcihvaih0LHQuaitlLHQuaytuKSxzPW5ldyBucigoIXQuYSYmKHQuYT1uZXcgQnMoV2gsdCw1KSksdC5hKSk7cy5lIT1zLmkuZ2MoKTspcj11KGRyKHMpLDQ2OSksSmJ0KHIsci5hK2Usci5iK24pO2FqKHQsdC5iK2UsdC5jK24pfWZ1bmN0aW9uIGU0dCh0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSA3OnJldHVybiF0LmUmJih0LmU9bmV3IEVuKHJhLHQsNyw0KSksZXUodC5lLGUscik7Y2FzZSA4OnJldHVybiF0LmQmJih0LmQ9bmV3IEVuKHJhLHQsOCw1KSksZXUodC5kLGUscil9cmV0dXJuIE1zdCh0LGUsbixyKX1mdW5jdGlvbiBuNHQodCxlLG4scil7c3dpdGNoKG4pe2Nhc2UgNzpyZXR1cm4hdC5lJiYodC5lPW5ldyBFbihyYSx0LDcsNCkpLHphKHQuZSxlLHIpO2Nhc2UgODpyZXR1cm4hdC5kJiYodC5kPW5ldyBFbihyYSx0LDgsNSkpLHphKHQuZCxlLHIpfXJldHVybiBnaXQodCxlLG4scil9ZnVuY3Rpb24gUjFuKHQsZSxuKXt2YXIgcixzLG8saCxkO2lmKG4pZm9yKG89bi5hLmxlbmd0aCxyPW5ldyBKYihvKSxkPShyLmItci5hKSpyLmM8MD8oT3AoKSxNYik6bmV3IEJwKHIpO2QuT2IoKTspaD11KGQuUGIoKSwxOSkscz1UOChuLGguYSkscyYmeW9lKHQscyxlKX1mdW5jdGlvbiBZeih0LGUsbil7dmFyIHIscyxvLGgsZDtyZXR1cm4gdC5xaigpLG89ZT09bnVsbD8wOkppKGUpLHQuZj4wJiYoaD0obyZUaSkldC5kLmxlbmd0aCxzPXQ1dCh0LGgsbyxlKSxzKT8oZD1zLmVkKG4pLGQpOihyPXQudGoobyxlLG4pLHQuYy5GYyhyKSxudWxsKX1mdW5jdGlvbiByNHQodCxlKXt2YXIgbixyLHMsbztzd2l0Y2goQmcodCxlKS5faygpKXtjYXNlIDM6Y2FzZSAyOntmb3Iobj1FNChlKSxzPTAsbz1uLmk7czxvOysrcylpZihyPXUoQXQobixzKSwzNCksJHYoTW8odCxyKSk9PTUpcmV0dXJuIHI7YnJlYWt9fXJldHVybiBudWxsfWZ1bmN0aW9uIGoxbih0KXt2YXIgZSxuLHIscyxvO2lmKHVWdCh0LmYsdC5iLmxlbmd0aCkpZm9yKHI9TnQoZGdlLExJLDMzMCx0LmIubGVuZ3RoKjIsMCwxKSx0LmI9cixzPXIubGVuZ3RoLTEsbj10LmE7biE9dDtuPW4uUmQoKSlvPXUobiwzMzApLGU9by5kJnMsby5hPXJbZV0scltlXT1vfWZ1bmN0aW9uIFVzZSh0LGUpe3ZhciBuLHIscyxvO2ZvcihvPTAscz11KHUoUGkodC5yLGUpLDIxKSw4NCkuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMTExKSxvPWIuTWF0aC5tYXgobyxyLmUuYStyLmIucmYoKS5hKTtuPXUoeG8odC5iLGUpLDEyNCksbi5uLmI9MCxuLmEuYT1vfWZ1bmN0aW9uIFdzZSh0LGUpe3ZhciBuLHIscyxvO2ZvcihuPTAsbz11KHUoUGkodC5yLGUpLDIxKSw4NCkuS2MoKTtvLk9iKCk7KXM9dShvLlBiKCksMTExKSxuPWIuTWF0aC5tYXgobixzLmUuYitzLmIucmYoKS5iKTtyPXUoeG8odC5iLGUpLDEyNCksci5uLmQ9MCxyLmEuYj1ufWZ1bmN0aW9uICQxbih0KXt2YXIgZSxuO3JldHVybiBuPXUoSyh0LChhZSgpLFdjKSksMjEpLGU9aWooT21lKSxuLkhjKChnbygpLFU0KSkmJkhsKGUsRm1lKSxuLkhjKHdTKSYmSGwoZSxCbWUpLG4uSGMoY0UpJiZIbChlLE5tZSksbi5IYyh1RSkmJkhsKGUsUG1lKSxlfWZ1bmN0aW9uIHoxbih0LGUpe3ZhciBuO21yKGUsIkRlbGF1bmF5IHRyaWFuZ3VsYXRpb24iLDEpLG49bmV3IGxlLF91KHQuaSxuZXcgRiR0KG4pKSxCZShGZShLKHQsKHE4KCksdVMpKSkpLHQuZT9LYSh0LmUsSWhlKG4pKTp0LmU9SWhlKG4pLG9yKGUpfWZ1bmN0aW9uIGk0dCh0KXtpZih0PDApdGhyb3cgbnQobmV3IFBuKCJUaGUgaW5wdXQgbXVzdCBiZSBwb3NpdGl2ZSIpKTtyZXR1cm4gdDx2U3QubGVuZ3RoP0d2KHZTdFt0XSk6Yi5NYXRoLnNxcnQoSTQqdCkqKHh1bih0LHQpL3p5dCgyLjcxODI4MTgyODQ1OTA0NSx0KSl9ZnVuY3Rpb24gbDcodCxlKXt2YXIgbjtpZih0Lm5pKCkmJmUhPW51bGwpe2ZvcihuPTA7bjx0Lmk7KytuKWlmKFNpKGUsdC5nW25dKSlyZXR1cm4hMH1lbHNlIGZvcihuPTA7bjx0Lmk7KytuKWlmKEd0KHQuZ1tuXSk9PT1HdChlKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBxMW4odCxlKXtpZihlPT1udWxsKXtmb3IoO3QuYS5PYigpOylpZih1KHQuYS5QYigpLDQyKS5kZCgpPT1udWxsKXJldHVybiEwfWVsc2UgZm9yKDt0LmEuT2IoKTspaWYoU2koZSx1KHQuYS5QYigpLDQyKS5kZCgpKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBIMW4odCxlKXt2YXIgbixyLHM7cmV0dXJuIGU9PT10PyEwOl90KGUsNjY0KT8ocz11KGUsMTk0NyksTGllKChyPXQuZyxyfHwodC5nPW5ldyB2VCh0KSkpLChuPXMuZyxufHwocy5nPW5ldyB2VChzKSkpKSk6ITF9ZnVuY3Rpb24gVjFuKHQpe3ZhciBlLG4scixzO2ZvcihlPSJTeiIsbj0iZXoiLHM9Yi5NYXRoLm1pbih0Lmxlbmd0aCw1KSxyPXMtMTtyPj0wO3ItLSlpZih1bih0W3JdLmQsZSl8fHVuKHRbcl0uZCxuKSl7dC5sZW5ndGg+PXIrMSYmdC5zcGxpY2UoMCxyKzEpO2JyZWFrfXJldHVybiB0fWZ1bmN0aW9uIGVJKHQsZSl7dmFyIG47cmV0dXJuIFZvKHQpJiZWbyhlKSYmKG49dC9lLElJPG4mJm48RTIpP248MD9iLk1hdGguY2VpbChuKTpiLk1hdGguZmxvb3Iobik6V3AobDZ0KFZvKHQpP0RoKHQpOnQsVm8oZSk/RGgoZSk6ZSwhMSkpfWZ1bmN0aW9uIHM0dCh0LGUpe2lmKGU9PXQuYy5pKXJldHVybiB0LmQuaTtpZihlPT10LmQuaSlyZXR1cm4gdC5jLmk7dGhyb3cgbnQobmV3IFBuKCInbm9kZScgbXVzdCBlaXRoZXIgYmUgdGhlIHNvdXJjZSBub2RlIG9yIHRhcmdldCBub2RlIG9mIHRoZSBlZGdlLiIpKX1mdW5jdGlvbiBHMW4odCl7dmFyIGUsbixyLHM7aWYocz11KEsodCwoYWUoKSxVOXQpKSwzNykscyl7Zm9yKHI9bmV3IERhLGU9JGEodC5jLmkpO2UhPXM7KW49ZS5lLGU9JGEobiksRm0oRmkoRmkocixuLm4pLGUuYyksZS5kLmIsZS5kLmQpO3JldHVybiByfXJldHVybiBQYmV9ZnVuY3Rpb24gVTFuKHQpe3ZhciBlO2U9dShLKHQsKGFlKCksaEUpKSw0MDMpLHlzKGVjKG5ldyBrbihudWxsLG5ldyBUbihlLmQsMTYpKSxuZXcgZVgpLG5ldyBkNih0KSkseXMoV2kobmV3IGtuKG51bGwsbmV3IFRuKGUuZCwxNikpLG5ldyBoRiksbmV3IE4zKHQpKX1mdW5jdGlvbiBUc3QodCxlKXt2YXIgbixyLHMsbztmb3Iocz1lPyRzKHQpOlVvKHQpLHI9bmV3IGFyKGxyKHMuYS5LYygpLG5ldyBIKSk7VnIocik7KWlmKG49dShJcihyKSwxNyksbz1zNHQobix0KSxvLms9PShHbigpLGNhKSYmby5jIT10LmMpcmV0dXJuIG87cmV0dXJuIG51bGx9ZnVuY3Rpb24gVzFuKHQpe3ZhciBlLG4scjtmb3Iobj1uZXcgUyh0LnApO24uYTxuLmMuYy5sZW5ndGg7KWU9dShRKG4pLDEwKSxlLms9PShHbigpLHFzKSYmKHI9ZS5vLmIsdC5pPWIuTWF0aC5taW4odC5pLHIpLHQuZz1iLk1hdGgubWF4KHQuZyxyKSl9ZnVuY3Rpb24gS3NlKHQsZSxuKXt2YXIgcixzLG87Zm9yKG89bmV3IFMoZSk7by5hPG8uYy5jLmxlbmd0aDspcj11KFEobyksMTApLHQuY1tyLmMucF1bci5wXS5lPSExO2ZvcihzPW5ldyBTKGUpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShRKHMpLDEwKSxiNnQodCxyLG4pfWZ1bmN0aW9uIF9zdCh0LGUsbil7dmFyIHIscztyPW80KGUuaixuLnMsbi5jKStvNChuLmUsZS5zLGUuYykscz1vNChuLmosZS5zLGUuYykrbzQoZS5lLG4ucyxuLmMpLHI9PXM/cj4wJiYodC5iKz0yLHQuYSs9cik6KHQuYis9MSx0LmErPWIuTWF0aC5taW4ocixzKSl9ZnVuY3Rpb24gWXNlKHQsZSl7dmFyIG4scjtpZihyPSExLGhhKGUpJiYocj0hMCxGNih0LG5ldyBIbShqcihlKSkpKSxyfHxfdChlLDIzNikmJihyPSEwLEY2KHQsKG49dXZ0KHUoZSwyMzYpKSxuZXcgeVQobikpKSksIXIpdGhyb3cgbnQobmV3IG5ldCh3OHQpKX1mdW5jdGlvbiBLMW4odCxlLG4scil7dmFyIHMsbyxoO3JldHVybiBzPW5ldyBGMCh0LmUsMSwxMCwoaD1lLmMsX3QoaCw4OCk/dShoLDI2KToobG4oKSxRaCkpLChvPW4uYyxfdChvLDg4KT91KG8sMjYpOihsbigpLFFoKSksJGcodCxlKSwhMSkscj9yLkVpKHMpOnI9cyxyfWZ1bmN0aW9uIGE0dCh0KXt2YXIgZSxuO3N3aXRjaCh1KEsoJGEodCksKHhlKCksV1R0KSksNDIwKS5nKXtjYXNlIDA6cmV0dXJuIGU9dC5uLG49dC5vLG5ldyBSZShlLmErbi5hLzIsZS5iK24uYi8yKTtjYXNlIDE6cmV0dXJuIG5ldyBTbyh0Lm4pO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIG5JKCl7bkk9WCxCVj1uZXcgUVQoSzAsMCksSTl0PW5ldyBRVCgiTEVGVFVQIiwxKSxOOXQ9bmV3IFFUKCJSSUdIVFVQIiwyKSxEOXQ9bmV3IFFUKCJMRUZURE9XTiIsMyksTzl0PW5ldyBRVCgiUklHSFRET1dOIiw0KSxMbHQ9bmV3IFFUKCJCQUxBTkNFRCIsNSl9ZnVuY3Rpb24gWTFuKHQsZSxuKXt2YXIgcixzLG87aWYocj1qcyh0LmFbZS5wXSx0LmFbbi5wXSkscj09MCl7aWYocz11KEsoZSwoYWUoKSxNeCkpLDE1KSxvPXUoSyhuLE14KSwxNSkscy5IYyhuKSlyZXR1cm4tMTtpZihvLkhjKGUpKXJldHVybiAxfXJldHVybiByfWZ1bmN0aW9uIFgxbih0KXtzd2l0Y2godC5nKXtjYXNlIDE6cmV0dXJuIG5ldyBuWjtjYXNlIDI6cmV0dXJuIG5ldyByWjtjYXNlIDM6cmV0dXJuIG5ldyBlWjtjYXNlIDA6cmV0dXJuIG51bGw7ZGVmYXVsdDp0aHJvdyBudChuZXcgUG4oRWN0Kyh0LmYhPW51bGw/dC5mOiIiK3QuZykpKX19ZnVuY3Rpb24gbzR0KHQsZSxuKXtzd2l0Y2goZSl7Y2FzZSAxOiF0Lm4mJih0Lm49bmV3IGhlKFlvLHQsMSw3KSksVHIodC5uKSwhdC5uJiYodC5uPW5ldyBoZShZbyx0LDEsNykpLGdzKHQubix1KG4sMTQpKTtyZXR1cm47Y2FzZSAyOnFfKHQsanIobikpO3JldHVybn1TeXQodCxlLG4pfWZ1bmN0aW9uIGM0dCh0LGUsbil7c3dpdGNoKGUpe2Nhc2UgMzpYdih0LFp0KHZlKG4pKSk7cmV0dXJuO2Nhc2UgNDpRdih0LFp0KHZlKG4pKSk7cmV0dXJuO2Nhc2UgNTpDdSh0LFp0KHZlKG4pKSk7cmV0dXJuO2Nhc2UgNjpTdSh0LFp0KHZlKG4pKSk7cmV0dXJufW80dCh0LGUsbil9ZnVuY3Rpb24gWHoodCxlLG4pe3ZhciByLHMsbztvPShyPW5ldyBYdHQscikscz1GMShvLGUsbnVsbCkscyYmcy5GaSgpLHR1KG8sbiksT3IoKCF0LmMmJih0LmM9bmV3IGhlKHp3LHQsMTIsMTApKSx0LmMpLG8pLFBnKG8sMCksdHkobywxKSxqZyhvLCEwKSxSZyhvLCEwKX1mdW5jdGlvbiB1NHQodCxlKXt2YXIgbixyLHM7cmV0dXJuIG49VVQodC5nLGUpLF90KG4sMjM1KT8ocz11KG4sMjM1KSxzLlFoKCk9PW51bGwscy5OaCgpKTpfdChuLDQ5OCk/KHI9dShuLDE5MzgpLHM9ci5iLHMpOm51bGx9ZnVuY3Rpb24gUTFuKHQsZSxuLHIpe3ZhciBzLG87cmV0dXJuIERyKGUpLERyKG4pLG89dSh3Xyh0LmQsZSksMTkpLEJ0ZSghIW8sIlJvdyAlcyBub3QgaW4gJXMiLGUsdC5lKSxzPXUod18odC5iLG4pLDE5KSxCdGUoISFzLCJDb2x1bW4gJXMgbm90IGluICVzIixuLHQuYykscW5lKHQsby5hLHMuYSxyKX1mdW5jdGlvbiBYc2UodCxlLG4scixzLG8saCl7dmFyIGQsdyxrLF8sTTtpZihfPXNbb10saz1vPT1oLTEsZD1rP3I6MCxNPXZzZShkLF8pLHIhPTEwJiZ1dChvdCh0LGgtbyksZVtvXSxuW29dLGQsTSksIWspZm9yKCsrbyx3PTA7dzxfOysrdylNW3ddPVhzZSh0LGUsbixyLHMsbyxoKTtyZXR1cm4gTX1mdW5jdGlvbiB1Qyh0KXtpZih0Lmc9PS0xKXRocm93IG50KG5ldyBSdSk7dC5taigpO3RyeXt0LmkuJGModC5nKSx0LmY9dC5pLmosdC5nPHQuZSYmLS10LmUsdC5nPS0xfWNhdGNoKGUpe3Rocm93IGU9cnMoZSksX3QoZSw3Myk/bnQobmV3IHNoKTpudChlKX19ZnVuY3Rpb24gbEModCxlKXtyZXR1cm4gdC5iLmE9Yi5NYXRoLm1pbih0LmIuYSxlLmMpLHQuYi5iPWIuTWF0aC5taW4odC5iLmIsZS5kKSx0LmEuYT1iLk1hdGgubWF4KHQuYS5hLGUuYyksdC5hLmI9Yi5NYXRoLm1heCh0LmEuYixlLmQpLHQuY1t0LmMubGVuZ3RoXT1lLCEwfWZ1bmN0aW9uIFoxbih0KXt2YXIgZSxuLHIscztmb3Iocz0tMSxyPTAsbj1uZXcgUyh0KTtuLmE8bi5jLmMubGVuZ3RoOyl7aWYoZT11KFEobiksMjQzKSxlLmM9PShobygpLGFsKSl7cz1yPT0wPzA6ci0xO2JyZWFrfWVsc2Ugcj09dC5jLmxlbmd0aC0xJiYocz1yKTtyKz0xfXJldHVybiBzfWZ1bmN0aW9uIEoxbih0KXt2YXIgZSxuLHIscztmb3Iocz0wLGU9MCxyPW5ldyBTKHQuYyk7ci5hPHIuYy5jLmxlbmd0aDspbj11KFEociksMzMpLEN1KG4sdC5lK3MpLFN1KG4sdC5mKSxzKz1uLmcrdC5iLGU9Yi5NYXRoLm1heChlLG4uZit0LmIpO3QuZD1zLXQuYix0LmE9ZS10LmJ9ZnVuY3Rpb24gZDQodCl7dmFyIGUsbixyO2ZvcihuPW5ldyBTKHQuYS5iKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoUShuKSw1Nykscj1lLmQuYyxlLmQuYz1lLmQuZCxlLmQuZD1yLHI9ZS5kLmIsZS5kLmI9ZS5kLmEsZS5kLmE9cixyPWUuYi5hLGUuYi5hPWUuYi5iLGUuYi5iPXI7VDV0KHQpfWZ1bmN0aW9uIGc0KHQpe3ZhciBlLG4scjtmb3Iobj1uZXcgUyh0LmEuYik7bi5hPG4uYy5jLmxlbmd0aDspZT11KFEobiksODEpLHI9ZS5nLmMsZS5nLmM9ZS5nLmQsZS5nLmQ9cixyPWUuZy5iLGUuZy5iPWUuZy5hLGUuZy5hPXIscj1lLmUuYSxlLmUuYT1lLmUuYixlLmUuYj1yO3VxKHQpfWZ1bmN0aW9uIHRkbih0KXt2YXIgZSxuLHIscyxvO2ZvcihvPU42KHQuayksbj0oYmUoKSx1dChvdChaYSwxKSxDYyw2MSwwLFthYyxPbixIbix5cixCbl0pKSxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWlmKGU9bltyXSxlIT1hYyYmIW8uSGMoZSkpcmV0dXJuIGU7cmV0dXJuIG51bGx9ZnVuY3Rpb24gQ3N0KHQsZSl7dmFyIG4scjtyZXR1cm4gcj11KFQydCh4aXQoV2kobmV3IGtuKG51bGwsbmV3IFRuKGUuaiwxNikpLG5ldyBXWCkpKSwxMSksciYmKG49dShQZShyLmUsMCksMTcpLG4pP3UoSyhuLChhZSgpLExjKSksMTkpLmE6TGFuKHQuYil9ZnVuY3Rpb24gZWRuKHQsZSl7dmFyIG4scixzLG87Zm9yKG89bmV3IFMoZS5hKTtvLmE8by5jLmMubGVuZ3RoOylmb3Iocz11KFEobyksMTApLFBUKHQuZCkscj1uZXcgYXIobHIoJHMocykuYS5LYygpLG5ldyBIKSk7VnIocik7KW49dShJcihyKSwxNyksR29lKHQscyxuLmQuaSl9ZnVuY3Rpb24gbmRuKHQsZSl7dmFyIG4scjtmb3IoRXUodC5iLGUpLHI9bmV3IFModC5uKTtyLmE8ci5jLmMubGVuZ3RoOylpZihuPXUoUShyKSwyMTEpLEdvKG4uYyxlLDApIT0tMSl7RXUobi5jLGUpLEoxbihuKSxuLmMuYy5sZW5ndGg9PTAmJkV1KHQubixuKTticmVha31neW4odCl9ZnVuY3Rpb24gUXNlKHQsZSl7dmFyIG4scixzLG8saDtmb3IoaD10LmYscz0wLG89MCxyPW5ldyBTKHQuYSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KFEociksMTg3KSxZRChuLHQuZSxoKSxkRChuLGUpLG89Yi5NYXRoLm1heChvLG4uciksaCs9bi5kK3QuYyxzPWg7dC5kPW8sdC5iPXN9ZnVuY3Rpb24gWnNlKHQpe3ZhciBlLG47cmV0dXJuIG49ZkkodCksXzgobik/bnVsbDooZT0oRHIobiksdShvc2UobmV3IGFyKGxyKG4uYS5LYygpLG5ldyBIKSkpLDc5KSksUm8odShBdCgoIWUuYiYmKGUuYj1uZXcgRW4odnIsZSw0LDcpKSxlLmIpLDApLDgyKSkpfWZ1bmN0aW9uIFF6KHQpe3ZhciBlO3JldHVybiB0Lm98fChlPXQuTGooKSxlP3Qubz1uZXcgYnd0KHQsdCxudWxsKTp0LnJrKCk/dC5vPW5ldyBLMnQodCxudWxsKTokdihNbygoR3UoKSxTYSksdCkpPT0xP3Qubz1uZXcgUlp0KHQpOnQubz1uZXcgZm50KHQsbnVsbCkpLHQub31mdW5jdGlvbiByZG4odCxlLG4scil7dmFyIHMsbyxoLGQsdztuLm1oKGUpJiYocz0oaD1lLGg/dShyLDQ5KS54aChoKTpudWxsKSxzJiYodz1uLmFoKGUpLGQ9ZS50LGQ+MXx8ZD09LTE/KG89dSh3LDE1KSxzLldiKGlobih0LG8pKSk6cy5XYihoYXQodCx1KHcsNTYpKSkpKX1mdW5jdGlvbiBpZG4odCxlLG4scil7Qkh0KCk7dmFyIHM9cHV0O2Z1bmN0aW9uIG8oKXtmb3IodmFyIGg9MDtoPHMubGVuZ3RoO2grKylzW2hdKCl9aWYodCl0cnl7QjVlKG8pKCl9Y2F0Y2goaCl7dChlLGgpfWVsc2UgQjVlKG8pKCl9ZnVuY3Rpb24gc2RuKHQpe3ZhciBlLG4scixzLG87Zm9yKHI9bmV3IGQyKG5ldyBrZyh0LmIpLmEpO3IuYjspbj1ZdihyKSxlPXUobi5jZCgpLDEwKSxvPXUodShuLmRkKCksNDYpLmEsMTApLHM9dSh1KG4uZGQoKSw0NikuYiw4KSxGaShLZihlLm4pLEZpKHVjKG8ubikscykpfWZ1bmN0aW9uIGFkbih0KXtzd2l0Y2godShLKHQuYiwoeGUoKSwkVHQpKSwzNzUpLmcpe2Nhc2UgMTp5cyh4dShlYyhuZXcga24obnVsbCxuZXcgVG4odC5kLDE2KSksbmV3IENGKSxuZXcgaHYpLG5ldyBTRik7YnJlYWs7Y2FzZSAyOll2bih0KTticmVhaztjYXNlIDA6TWduKHQpfX1mdW5jdGlvbiBvZG4odCxlLG4pe3ZhciByO21yKG4sIlN0cmFpZ2h0IExpbmUgRWRnZSBSb3V0aW5nIiwxKSxuLm4mJmUmJmdmKG4scGYoZSksKE9sKCksdGgpKSxyPXUoemUoZSwoYl8oKSwkUykpLDMzKSxUbGUodCxyKSxuLm4mJmUmJmdmKG4scGYoZSksKE9sKCksdGgpKX1mdW5jdGlvbiBjeSgpe2N5PVgscmZ0PW5ldyBuXygiVl9UT1AiLDApLEdPPW5ldyBuXygiVl9DRU5URVIiLDEpLFZPPW5ldyBuXygiVl9CT1RUT00iLDIpLG5mdD1uZXcgbl8oIkhfTEVGVCIsMykscU89bmV3IG5fKCJIX0NFTlRFUiIsNCksSE89bmV3IG5fKCJIX1JJR0hUIiw1KX1mdW5jdGlvbiBsNHQodCl7dmFyIGU7cmV0dXJuIHQuRGImNjQ/U3oodCk6KGU9bmV3IEFoKFN6KHQpKSxlLmErPSIgKGFic3RyYWN0OiAiLENnKGUsKHQuQmImMjU2KSE9MCksZS5hKz0iLCBpbnRlcmZhY2U6ICIsQ2coZSwodC5CYiY1MTIpIT0wKSxlLmErPSIpIixlLmEpfWZ1bmN0aW9uIGNkbih0LGUsbixyKXt2YXIgcyxvLGgsZDtyZXR1cm4gU2wodC5lKSYmKHM9ZS5haygpLGQ9ZS5kZCgpLG89bi5kZCgpLGg9SHAodCwxLHMsZCxvLHMuJGooKT94Nyh0LHMsbyxfdChzLDk5KSYmKHUocywxOCkuQmImUWEpIT0wKTotMSwhMCkscj9yLkVpKGgpOnI9aCkscn1mdW5jdGlvbiB1ZG4odCl7dmFyIGU7dC5jPT1udWxsJiYoZT1HdCh0LmIpPT09R3QoVTh0KT9udWxsOnQuYix0LmQ9ZT09bnVsbD9NdTptWXQoZSk/VlhlKE5YdChlKSk6aGEoZSk/TDZ0Ok1wKGRsKGUpKSx0LmE9dC5hKyI6ICIrKG1ZdChlKT9CUWUoTlh0KGUpKTplKyIiKSx0LmM9IigiK3QuZCsiKSAiK3QuYSl9ZnVuY3Rpb24gaDR0KHQsZSl7dGhpcy5lPXQsQXYoR3MoZSwtNDI5NDk2NzI5NiksMCk/KHRoaXMuZD0xLHRoaXMuYT11dChvdChTciwxKSxKciwyNSwxNSxbTXIoZSldKSk6KHRoaXMuZD0yLHRoaXMuYT11dChvdChTciwxKSxKciwyNSwxNSxbTXIoZSksTXIoUnAoZSwzMikpXSkpfWZ1bmN0aW9uIGxkbigpe2Z1bmN0aW9uIHQoKXt0cnl7cmV0dXJuIG5ldyBNYXAoKS5lbnRyaWVzKCkubmV4dCgpLmRvbmV9Y2F0Y2h7cmV0dXJuITF9fXJldHVybiB0eXBlb2YgTWFwPT09RmF0JiZNYXAucHJvdG90eXBlLmVudHJpZXMmJnQoKT9NYXA6TjRuKCl9ZnVuY3Rpb24gaGRuKHQsZSl7dmFyIG4scixzLG87Zm9yKG89bmV3IHhhKHQuZSwwKSxuPTA7by5iPG8uZC5nYygpOyl7aWYocj1adCgoWm4oby5iPG8uZC5nYygpKSx2ZShvLmQuWGIoby5jPW8uYisrKSkpKSxzPXItZSxzPnljdClyZXR1cm4gbjtzPi0xZS02JiYrK259cmV0dXJuIG59ZnVuY3Rpb24gZjR0KHQsZSl7dmFyIG47ZSE9dC5iPyhuPW51bGwsdC5iJiYobj1jJCh0LmIsdCwtNCxuKSksZSYmKG49dHgoZSx0LC00LG4pKSxuPUlyZSh0LGUsbiksbiYmbi5GaSgpKTp0LkRiJjQmJiEodC5EYiYxKSYmQ2kodCxuZXcgb2EodCwxLDMsZSxlKSl9ZnVuY3Rpb24gSnNlKHQsZSl7dmFyIG47ZSE9dC5mPyhuPW51bGwsdC5mJiYobj1jJCh0LmYsdCwtMSxuKSksZSYmKG49dHgoZSx0LC0xLG4pKSxuPU9yZSh0LGUsbiksbiYmbi5GaSgpKTp0LkRiJjQmJiEodC5EYiYxKSYmQ2kodCxuZXcgb2EodCwxLDAsZSxlKSl9ZnVuY3Rpb24gdGFlKHQpe3ZhciBlLG4scjtpZih0PT1udWxsKXJldHVybiBudWxsO2lmKG49dSh0LDE1KSxuLmRjKCkpcmV0dXJuIiI7Zm9yKHI9bmV3IF9nLGU9bi5LYygpO2UuT2IoKTspeW8ociwoJGkoKSxqcihlLlBiKCkpKSksci5hKz0iICI7cmV0dXJuIFlldChyLHIuYS5sZW5ndGgtMSl9ZnVuY3Rpb24gZWFlKHQpe3ZhciBlLG4scjtpZih0PT1udWxsKXJldHVybiBudWxsO2lmKG49dSh0LDE1KSxuLmRjKCkpcmV0dXJuIiI7Zm9yKHI9bmV3IF9nLGU9bi5LYygpO2UuT2IoKTspeW8ociwoJGkoKSxqcihlLlBiKCkpKSksci5hKz0iICI7cmV0dXJuIFlldChyLHIuYS5sZW5ndGgtMSl9ZnVuY3Rpb24gZmRuKHQsZSxuKXt2YXIgcixzO3JldHVybiByPXQuY1tlLmMucF1bZS5wXSxzPXQuY1tuLmMucF1bbi5wXSxyLmEhPW51bGwmJnMuYSE9bnVsbD9CbnQoci5hLHMuYSk6ci5hIT1udWxsPy0xOnMuYSE9bnVsbD8xOjB9ZnVuY3Rpb24gZGRuKHQsZSl7dmFyIG4scixzLG8saCxkO2lmKGUpZm9yKG89ZS5hLmxlbmd0aCxuPW5ldyBKYihvKSxkPShuLmItbi5hKSpuLmM8MD8oT3AoKSxNYik6bmV3IEJwKG4pO2QuT2IoKTspaD11KGQuUGIoKSwxOSkscz1UOChlLGguYSkscj1uZXcgbnp0KHQpLG5ubihyLmEscyl9ZnVuY3Rpb24gZ2RuKHQsZSl7dmFyIG4scixzLG8saCxkO2lmKGUpZm9yKG89ZS5hLmxlbmd0aCxuPW5ldyBKYihvKSxkPShuLmItbi5hKSpuLmM8MD8oT3AoKSxNYik6bmV3IEJwKG4pO2QuT2IoKTspaD11KGQuUGIoKSwxOSkscz1UOChlLGguYSkscj1uZXcgVyR0KHQpLGVubihyLmEscyl9ZnVuY3Rpb24gcGRuKHQpe3ZhciBlO2lmKHQhPW51bGwmJnQubGVuZ3RoPjAmJlRhKHQsdC5sZW5ndGgtMSk9PTMzKXRyeXtyZXR1cm4gZT1aYWUoQmwodCwwLHQubGVuZ3RoLTEpKSxlLmU9PW51bGx9Y2F0Y2gobil7aWYobj1ycyhuKSwhX3QobiwzMikpdGhyb3cgbnQobil9cmV0dXJuITF9ZnVuY3Rpb24gbmFlKHQsZSxuKXt2YXIgcixzLG87cmV0dXJuIHI9ZS5haygpLG89ZS5kZCgpLHM9ci4kaigpP0hwKHQsMyxyLG51bGwsbyx4Nyh0LHIsbyxfdChyLDk5KSYmKHUociwxOCkuQmImUWEpIT0wKSwhMCk6SHAodCwxLHIsci56aigpLG8sLTEsITApLG4/bi5FaShzKTpuPXMsbn1mdW5jdGlvbiBiZG4oKXt2YXIgdCxlLG47Zm9yKGU9MCx0PTA7dDwxO3QrKyl7aWYobj1pNXQoKCRyKHQsMSksIlgiLmNoYXJDb2RlQXQodCkpKSxuPT0wKXRocm93IG50KG5ldyBScigiVW5rbm93biBPcHRpb246ICIrIlgiLnN1YnN0cih0KSkpO2V8PW59cmV0dXJuIGV9ZnVuY3Rpb24gdmRuKHQsZSxuKXt2YXIgcixzLG87c3dpdGNoKHI9JGEoZSkscz1FeihyKSxvPW5ldyBOYyx0YyhvLGUpLG4uZyl7Y2FzZSAxOlVzKG8sSEQoWjYocykpKTticmVhaztjYXNlIDI6VXMobyxaNihzKSl9cmV0dXJuIGVlKG8sKHhlKCksenkpLHZlKEsodCx6eSkpKSxvfWZ1bmN0aW9uIGQ0dCh0KXt2YXIgZSxuO3JldHVybiBlPXUoSXIobmV3IGFyKGxyKFVvKHQuYSkuYS5LYygpLG5ldyBIKSkpLDE3KSxuPXUoSXIobmV3IGFyKGxyKCRzKHQuYSkuYS5LYygpLG5ldyBIKSkpLDE3KSxCZShGZShLKGUsKGFlKCksSDEpKSkpfHxCZShGZShLKG4sSDEpKSl9ZnVuY3Rpb24gcDQoKXtwND1YLExWPW5ldyBrTSgiT05FX1NJREUiLDApLERWPW5ldyBrTSgiVFdPX1NJREVTX0NPUk5FUiIsMSksSVY9bmV3IGtNKCJUV09fU0lERVNfT1BQT1NJTkciLDIpLE1WPW5ldyBrTSgiVEhSRUVfU0lERVMiLDMpLEFWPW5ldyBrTSgiRk9VUl9TSURFUyIsNCl9ZnVuY3Rpb24gU3N0KHQsZSxuLHIscyl7dmFyIG8saDtvPXUoJGwoV2koZS5PYygpLG5ldyBQWCksYTIobmV3IGtlLG5ldyBuZSxuZXcgcGksdXQob3Qod2wsMSksb2UsMTMyLDAsWyhOMSgpLFlsKV0pKSksMTUpLGg9dSh1Mih0LmIsbixyKSwxNSkscz09MD9oLldjKDAsbyk6aC5HYyhvKX1mdW5jdGlvbiB3ZG4odCxlKXt2YXIgbixyLHMsbyxoO2ZvcihvPW5ldyBTKGUuYSk7by5hPG8uYy5jLmxlbmd0aDspZm9yKHM9dShRKG8pLDEwKSxyPW5ldyBhcihscihVbyhzKS5hLktjKCksbmV3IEgpKTtWcihyKTspbj11KElyKHIpLDE3KSxoPW4uYy5pLnAsdC5uW2hdPXQubltoXS0xfWZ1bmN0aW9uIG1kbih0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKG89bmV3IFMoZS5kKTtvLmE8by5jLmMubGVuZ3RoOylmb3Iocz11KFEobyksMTAxKSxoPXUodHIodC5jLHMpLDExMikubyxyPW5ldyBrNihzLmIpO3IuYTxyLmMuYS5sZW5ndGg7KW49dShGXyhyKSw2MSksVG10KHMsbixoKX1mdW5jdGlvbiB5ZG4odCl7dmFyIGUsbjtmb3Iobj1uZXcgUyh0LmUuYik7bi5hPG4uYy5jLmxlbmd0aDspZT11KFEobiksMjkpLFgzbih0LGUpO3lzKFdpKGVjKGVjKG5ldyBrbihudWxsLG5ldyBUbih0LmUuYiwxNikpLG5ldyBtUSksbmV3IGpGKSxuZXcgRVEpLG5ldyBBJHQodCkpfWZ1bmN0aW9uIGc0dCh0LGUpe3JldHVybiBlP3QuRGkoZSk/ITE6dC5pP3QuaS5FaShlKTpfdChlLDE0Myk/KHQuaT11KGUsMTQzKSwhMCk6KHQuaT1uZXcgdDYsdC5pLkVpKGUpKTohMX1mdW5jdGlvbiB4ZG4odCl7aWYodD1IYyh0LCEwKSx1bigkNyx0KXx8dW4oIjEiLHQpKXJldHVybiBGbigpLFc3O2lmKHVuKFBjdCx0KXx8dW4oIjAiLHQpKXJldHVybiBGbigpLE8yO3Rocm93IG50KG5ldyBzZXQoIkludmFsaWQgYm9vbGVhbiB2YWx1ZTogJyIrdCsiJyIpKX1mdW5jdGlvbiBwNHQodCxlLG4pe3ZhciByLHMsbztmb3Iocz10LnZjKCkuS2MoKTtzLk9iKCk7KWlmKHI9dShzLlBiKCksNDIpLG89ci5jZCgpLEd0KGUpPT09R3Qobyl8fGUhPW51bGwmJlNpKGUsbykpcmV0dXJuIG4mJihyPW5ldyBSUihyLmNkKCksci5kZCgpKSxzLlFiKCkpLHI7cmV0dXJuIG51bGx9ZnVuY3Rpb24ga2RuKHQpe0JtKCk7dmFyIGUsbixyO3QuQi5IYygoYmwoKSxHRykpJiYocj10LmYuaSxlPW5ldyBvJCh0LmEuYyksbj1uZXcgdjYsbi5iPWUuYy1yLmMsbi5kPWUuZC1yLmQsbi5jPXIuYytyLmItKGUuYytlLmIpLG4uYT1yLmQrci5hLShlLmQrZS5hKSx0LmUuRmYobikpfWZ1bmN0aW9uIHJhZSh0LGUsbixyKXt2YXIgcyxvLGg7Zm9yKGg9Yi5NYXRoLm1pbihuLGhsZSh1KHQuYiw2NSksZSxuLHIpKSxvPW5ldyBTKHQuYSk7by5hPG8uYy5jLmxlbmd0aDspcz11KFEobyksMjIxKSxzIT1lJiYoaD1iLk1hdGgubWluKGgscmFlKHMsZSxoLHIpKSk7cmV0dXJuIGh9ZnVuY3Rpb24gYjR0KHQpe3ZhciBlLG4scixzO2ZvcihzPU50KG8wLHJlLDE5Myx0LmIuYy5sZW5ndGgsMCwyKSxyPW5ldyB4YSh0LmIsMCk7ci5iPHIuZC5nYygpOyllPShabihyLmI8ci5kLmdjKCkpLHUoci5kLlhiKHIuYz1yLmIrKyksMjkpKSxuPXIuYi0xLHNbbl09c0QoZS5hKTtyZXR1cm4gc31mdW5jdGlvbiBBc3QodCxlLG4scixzKXt2YXIgbyxoLGQsdztmb3IoaD1qS2UoWnB0KGJ2dChLaG4obikpLHIpLHIxbih0LG4scykpLHc9cWcodCxuKS5LYygpO3cuT2IoKTspZD11KHcuUGIoKSwxMSksZVtkLnBdJiYobz1lW2QucF0uaSx1ZShoLmQsbmV3IE5udChvLFh5dChoLG8pKSkpO2YzdChoKX1mdW5jdGlvbiB2NHQodCxlKXt0aGlzLmY9bmV3IEFyLHRoaXMuYj1uZXcgQXIsdGhpcy5qPW5ldyBBcix0aGlzLmE9dCx0aGlzLmM9ZSx0aGlzLmM+MCYmQXNlKHRoaXMsdGhpcy5jLTEsKGJlKCksSG4pKSx0aGlzLmM8dGhpcy5hLmxlbmd0aC0xJiZBc2UodGhpcyx0aGlzLmMrMSwoYmUoKSxCbikpfWZ1bmN0aW9uIHc0dCh0KXt0Lmxlbmd0aD4wJiZ0WzBdLmxlbmd0aD4wJiYodGhpcy5jPUJlKEZlKEsoJGEodFswXVswXSksKGFlKCksWTl0KSkpKSksdGhpcy5hPU50KHNtZSxyZSwyMDE4LHQubGVuZ3RoLDAsMiksdGhpcy5iPU50KGFtZSxyZSwyMDE5LHQubGVuZ3RoLDAsMiksdGhpcy5kPW5ldyBfcmV9ZnVuY3Rpb24gRWRuKHQpe3JldHVybiB0LmMubGVuZ3RoPT0wPyExOihTbigwLHQuYy5sZW5ndGgpLHUodC5jWzBdLDE3KSkuYy5pLms9PShHbigpLGNhKT8hMDpDOCh4dShuZXcga24obnVsbCxuZXcgVG4odCwxNikpLG5ldyBsUSksbmV3IGhRKX1mdW5jdGlvbiBUZG4odCxlLG4pe3JldHVybiBtcihuLCJUcmVlIGxheW91dCIsMSksdyQodC5iKSxVZCh0LmIsKG83KCksdkcpLHZHKSxVZCh0LmIsUFMsUFMpLFVkKHQuYixQTyxQTyksVWQodC5iLEZTLEZTKSx0LmE9VHEodC5iLGUpLEoybih0LGUsemMobiwxKSksb3IobiksZX1mdW5jdGlvbiBpYWUodCxlKXt2YXIgbixyLHMsbyxoLGQsdztmb3IoZD1neShlKSxvPWUuZix3PWUuZyxoPWIuTWF0aC5zcXJ0KG8qbyt3KncpLHM9MCxyPW5ldyBTKGQpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShRKHIpLDMzKSxzKz1pYWUodCxuKTtyZXR1cm4gYi5NYXRoLm1heChzLGgpfWZ1bmN0aW9uIHZhKCl7dmE9WCxrYj1uZXcgaV8oT0MsMCksVTE9bmV3IGlfKCJGUkVFIiwxKSxTRT1uZXcgaV8oIkZJWEVEX1NJREUiLDIpLFUyPW5ldyBpXygiRklYRURfT1JERVIiLDMpLGgwPW5ldyBpXygiRklYRURfUkFUSU8iLDQpLEtjPW5ldyBpXygiRklYRURfUE9TIiw1KX1mdW5jdGlvbiBfZG4odCxlKXt2YXIgbixyLHM7aWYobj1lLkhoKHQuYSksbil7Zm9yKHM9anIoSmYoKCFuLmImJihuLmI9bmV3IEFsKChsbigpLEphKSxwYyxuKSksbi5iKSwkaCkpLHI9MTtyPChHdSgpLGxMdCkubGVuZ3RoOysrcilpZih1bihsTHRbcl0scykpcmV0dXJuIHJ9cmV0dXJuIDB9ZnVuY3Rpb24gQ2RuKHQpe3ZhciBlLG4scixzLG87aWYodD09bnVsbClyZXR1cm4gTXU7Zm9yKG89bmV3IGwyKFhhLCJbIiwiXSIpLG49dCxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWU9bltyXSxQMChvLCIiK2UpO3JldHVybiBvLmE/by5lLmxlbmd0aD09MD9vLmEuYTpvLmEuYSsoIiIrby5lKTpvLmN9ZnVuY3Rpb24gU2RuKHQpe3ZhciBlLG4scixzLG87aWYodD09bnVsbClyZXR1cm4gTXU7Zm9yKG89bmV3IGwyKFhhLCJbIiwiXSIpLG49dCxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWU9bltyXSxQMChvLCIiK2UpO3JldHVybiBvLmE/by5lLmxlbmd0aD09MD9vLmEuYTpvLmEuYSsoIiIrby5lKTpvLmN9ZnVuY3Rpb24gc2FlKHQpe3ZhciBlLG4scjtmb3Iocj1uZXcgbDIoWGEsInsiLCJ9Iiksbj10LnZjKCkuS2MoKTtuLk9iKCk7KWU9dShuLlBiKCksNDIpLFAwKHIsSVp0KHQsZS5jZCgpKSsiPSIrSVp0KHQsZS5kZCgpKSk7cmV0dXJuIHIuYT9yLmUubGVuZ3RoPT0wP3IuYS5hOnIuYS5hKygiIityLmUpOnIuY31mdW5jdGlvbiBBZG4odCl7Zm9yKHZhciBlLG4scixzOyFOVCh0Lm8pOyluPXUoUDYodC5vKSw0Nikscj11KG4uYSwxMjEpLGU9dShuLmIsMjEzKSxzPUN6KGUsciksZS5lPT1yPyhwaihzLmcsZSksci5lPXMuZStlLmEpOihwaihzLmIsZSksci5lPXMuZS1lLmEpLHVlKHQuZS5hLHIpfWZ1bmN0aW9uIG00dCh0LGUpe3ZhciBuLHIscztmb3Iobj1udWxsLHM9dShlLktiKHQpLDIwKS5LYygpO3MuT2IoKTspaWYocj11KHMuUGIoKSwxNyksIW4pbj1yLmMuaT09dD9yLmQuaTpyLmMuaTtlbHNlIGlmKChyLmMuaT09dD9yLmQuaTpyLmMuaSkhPW4pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gYWFlKHQsZSl7dmFyIG4scixzLG8saDtmb3Iobj1DY2UodCwhMSxlKSxzPW5ldyBTKG4pO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShRKHMpLDEyOSksci5kPT0wPyhtcnQocixudWxsKSx5cnQocixudWxsKSk6KG89ci5hLGg9ci5iLG1ydChyLGgpLHlydChyLG8pKX1mdW5jdGlvbiBMZG4odCl7dmFyIGUsbjtyZXR1cm4gZT1uZXcgWnMsSGwoZSwkbWUpLG49dShLKHQsKGFlKCksV2MpKSwyMSksbi5IYygoZ28oKSx3UykpJiZIbChlLFZtZSksbi5IYyhjRSkmJkhsKGUsem1lKSxuLkhjKFU0KSYmSGwoZSxIbWUpLG4uSGModUUpJiZIbChlLHFtZSksZX1mdW5jdGlvbiBNZG4odCl7dmFyIGUsbixyLHM7Zm9yKFp5bih0KSxuPW5ldyBhcihscih6MCh0KS5hLktjKCksbmV3IEgpKTtWcihuKTspZT11KElyKG4pLDE3KSxyPWUuYy5pPT10LHM9cj9lLmQ6ZS5jLHI/cGEoZSxudWxsKTpCYShlLG51bGwpLGVlKGUsKGFlKCksSjl0KSxzKSxqcG4odCxzLmkpfWZ1bmN0aW9uIERkbih0LGUsbixyKXt2YXIgcyxvO3N3aXRjaChvPWUuaSxzPW5bby5nXVt0LmRbby5nXV0sby5nKXtjYXNlIDE6cy09citlLmouYixlLmcuYj1zO2JyZWFrO2Nhc2UgMzpzKz1yLGUuZy5iPXM7YnJlYWs7Y2FzZSA0OnMtPXIrZS5qLmEsZS5nLmE9czticmVhaztjYXNlIDI6cys9cixlLmcuYT1zfX1mdW5jdGlvbiBJZG4odCl7dmFyIGUsbixyO2ZvcihuPW5ldyBucigoIXQuYSYmKHQuYT1uZXcgaGUoZHMsdCwxMCwxMSkpLHQuYSkpO24uZSE9bi5pLmdjKCk7KWlmKGU9dShkcihuKSwzMykscj1mSShlKSwhVnIobmV3IGFyKGxyKHIuYS5LYygpLG5ldyBIKSkpKXJldHVybiBlO3JldHVybiBudWxsfWZ1bmN0aW9uIE9kbigpe3ZhciB0O3JldHVybiBONGU/dShiNygoSXAoKSxYaCkscTcpLDIwMTYpOih0PXUoX3QoamMoKElwKCksWGgpLHE3KSw1NTUpP2pjKFhoLHE3KTpuZXcgWW9lLDU1NSksTjRlPSEwLEIzbih0KSxHNW4odCkseHN0KHQpLEFvKFhoLHE3LHQpLHQpfWZ1bmN0aW9uIExzdCh0LGUsbil7dmFyIHIscztpZih0Lmo9PTApcmV0dXJuIG47aWYocz11KExlZSh0LGUsbiksNzIpLHI9bi5haygpLCFyLklqKCl8fCF0LmEucmwocikpdGhyb3cgbnQobmV3IFpvKCJJbnZhbGlkIGVudHJ5IGZlYXR1cmUgJyIrci5IaigpLnpiKyIuIityLm5lKCkrIiciKSk7cmV0dXJuIHN9ZnVuY3Rpb24gTmRuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsaztmb3IoZD10LmEsdz0wLGs9ZC5sZW5ndGg7dzxrOysrdylmb3IoaD1kW3ddLHI9aCxzPTAsbz1yLmxlbmd0aDtzPG87KytzKWlmKG49cltzXSxHdChlKT09PUd0KG4pfHxlIT1udWxsJiZTaShlLG4pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFBkbih0KXt2YXIgZSxuLHI7cmV0dXJuIF9jKHQsMCk+PTA/KG49ZUkodCxOcSkscj1VRCh0LE5xKSk6KGU9em0odCwxKSxuPWVJKGUsNWU4KSxyPVVEKGUsNWU4KSxyPVJhKE0wKHIsMSksR3ModCwxKSkpLEExKE0wKHIsMzIpLEdzKG4scG8pKX1mdW5jdGlvbiBvYWUodCxlLG4pe3ZhciByLHM7c3dpdGNoKHI9KFpuKGUuYiE9MCksdShmaChlLGUuYS5hKSw4KSksbi5nKXtjYXNlIDA6ci5iPTA7YnJlYWs7Y2FzZSAyOnIuYj10LmY7YnJlYWs7Y2FzZSAzOnIuYT0wO2JyZWFrO2RlZmF1bHQ6ci5hPXQuZ31yZXR1cm4gcz1zaShlLDApLFhNKHMsciksZX1mdW5jdGlvbiBjYWUodCxlLG4scil7dmFyIHMsbyxoLGQsdztzd2l0Y2godz10LmIsbz1lLmQsaD1vLmosZD1TM3QoaCx3LmRbaC5nXSxuKSxzPUZpKHVjKG8ubiksby5hKSxvLmouZyl7Y2FzZSAxOmNhc2UgMzpkLmErPXMuYTticmVhaztjYXNlIDI6Y2FzZSA0OmQuYis9cy5ifWtzKHIsZCxyLmMuYixyLmMpfWZ1bmN0aW9uIEZkbih0LGUsbil7dmFyIHIscyxvLGg7Zm9yKGg9R28odC5lLGUsMCksbz1uZXcgRHB0LG8uYj1uLHI9bmV3IHhhKHQuZSxoKTtyLmI8ci5kLmdjKCk7KXM9KFpuKHIuYjxyLmQuZ2MoKSksdShyLmQuWGIoci5jPXIuYisrKSwxMCkpLHMucD1uLHVlKG8uZSxzKSxEbChyKTtyZXR1cm4gb31mdW5jdGlvbiBCZG4odCxlLG4scil7dmFyIHMsbyxoLGQsdztmb3Iocz1udWxsLG89MCxkPW5ldyBTKGUpO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShRKGQpLDMzKSx3PWguaStoLmcsdDxoLmoraC5mK3ImJihzP24uaS13PG4uaS1vJiYocz1oKTpzPWgsbz1zLmkrcy5nKTtyZXR1cm4gcz9vK3I6MH1mdW5jdGlvbiBSZG4odCxlLG4scil7dmFyIHMsbyxoLGQsdztmb3Iobz1udWxsLHM9MCxkPW5ldyBTKGUpO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShRKGQpLDMzKSx3PWguaitoLmYsdDxoLmkraC5nK3ImJihvP24uai13PG4uai1zJiYobz1oKTpvPWgscz1vLmorby5mKTtyZXR1cm4gbz9zK3I6MH1mdW5jdGlvbiBqZG4odCl7dmFyIGUsbixyO2ZvcihlPSExLHI9dC5iLmMubGVuZ3RoLG49MDtuPHI7bisrKUN5dCh1KFBlKHQuYixuKSw0MzQpKT8hZSYmbisxPHImJkN5dCh1KFBlKHQuYixuKzEpLDQzNCkpJiYoZT0hMCx1KFBlKHQuYixuKSw0MzQpLmE9ITApOmU9ITF9ZnVuY3Rpb24gJGRuKHQsZSxuLHIscyl7dmFyIG8saDtmb3Iobz0wLGg9MDtoPHM7aCsrKW89UmEobyxRcChHcyhlW2hdLHBvKSxHcyhyW2hdLHBvKSkpLHRbaF09TXIobyksbz1ScChvLDMyKTtmb3IoO2g8bjtoKyspbz1SYShvLEdzKGVbaF0scG8pKSx0W2hdPU1yKG8pLG89UnAobywzMil9ZnVuY3Rpb24gemRuKHQsZSl7ZzcoKTt2YXIgbixyO2ZvcihyPShlYigpLFZIKSxuPXQ7ZT4xO2U+Pj0xKWUmMSYmKHI9dDQocixuKSksbi5kPT0xP249dDQobixuKTpuPW5ldyBJaWUoenVlKG4uYSxuLmQsTnQoU3IsSnIsMjUsbi5kPDwxLDE1LDEpKSk7cmV0dXJuIHI9dDQocixuKSxyfWZ1bmN0aW9uIHk0dCgpe3k0dD1YO3ZhciB0LGUsbixyO2Zvcih4N3Q9TnQoZ2EsVG8sMjUsMjUsMTUsMSksazd0PU50KGdhLFRvLDI1LDMzLDE1LDEpLHI9MTUyNTg3ODkwNjI1ZS0xNixlPTMyO2U+PTA7ZS0tKWs3dFtlXT1yLHIqPS41O2ZvcihuPTEsdD0yNDt0Pj0wO3QtLSl4N3RbdF09bixuKj0uNX1mdW5jdGlvbiBxZG4odCl7dmFyIGUsbjtpZihCZShGZSh6ZSh0LCh4ZSgpLCR5KSkpKSl7Zm9yKG49bmV3IGFyKGxyKFYwKHQpLmEuS2MoKSxuZXcgSCkpO1ZyKG4pOylpZihlPXUoSXIobiksNzkpLHV3KGUpJiZCZShGZSh6ZShlLEIyKSkpKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIHVhZSh0LGUpe3ZhciBuLHIscztWcyh0LmYsZSkmJihlLmI9dCxyPWUuYyxHbyh0LmosciwwKSE9LTF8fHVlKHQuaixyKSxzPWUuZCxHbyh0LmoscywwKSE9LTF8fHVlKHQuaixzKSxuPWUuYS5iLG4uYy5sZW5ndGghPTAmJighdC5pJiYodC5pPW5ldyB6aWUodCkpLGljbih0LmksbikpKX1mdW5jdGlvbiBIZG4odCl7dmFyIGUsbixyLHMsbztyZXR1cm4gbj10LmMuZCxyPW4uaixzPXQuZC5kLG89cy5qLHI9PW8/bi5wPHMucD8wOjE6a3oocik9PW8/MDpReXQocik9PW8/MTooZT10LmIsenUoZS5iLGt6KHIpKT8wOjEpfWZ1bmN0aW9uIFp6KCl7Wno9WCxjaHQ9bmV3IEpUKEUxZSwwKSx5X3Q9bmV3IEpUKCJMT05HRVNUX1BBVEgiLDEpLG9odD1uZXcgSlQoIkNPRkZNQU5fR1JBSEFNIiwyKSxtX3Q9bmV3IEpUKHpvdCwzKSx4X3Q9bmV3IEpUKCJTVFJFVENIX1dJRFRIIiw0KSxjRz1uZXcgSlQoIk1JTl9XSURUSCIsNSl9ZnVuY3Rpb24geTIodCl7dmFyIGU7dGhpcy5kPW5ldyBBcix0aGlzLmM9dC5jLHRoaXMuZT10LmQsdGhpcy5iPXQuYix0aGlzLmY9bmV3IHNZdCh0LmUpLHRoaXMuYT10LmEsdC5mP3RoaXMuZz10LmY6dGhpcy5nPShlPXUoV2YoZVUpLDkpLG5ldyBvaChlLHUoZmYoZSxlLmxlbmd0aCksOSksMCkpfWZ1bmN0aW9uIEp6KHQsZSl7dmFyIG4scixzLG8saCxkO3M9dCxoPVBfKHMsImxheW91dE9wdGlvbnMiKSwhaCYmKGg9UF8ocyx4ZGUpKSxoJiYoZD1oLHI9bnVsbCxkJiYocj0obz1oaXQoZCxOdChMZSxyZSwyLDAsNiwxKSksbmV3IGdldChkLG8pKSksciYmKG49bmV3IHlHdChkLGUpLF9hKHIsbikpKX1mdW5jdGlvbiBSbyh0KXtpZihfdCh0LDIzOSkpcmV0dXJuIHUodCwzMyk7aWYoX3QodCwxODYpKXJldHVybiBfMSh1KHQsMTE4KSk7dGhyb3cgbnQodD9uZXcgVGcoIk9ubHkgc3VwcG9ydCBub2RlcyBhbmQgcG9ydHMuIik6bmV3IG02KE1kZSkpfWZ1bmN0aW9uIFZkbih0LGUsbixyKXtyZXR1cm4oZT49MCYmdW4odC5zdWJzdHIoZSwzKSwiR01UIil8fGU+PTAmJnVuKHQuc3Vic3RyKGUsMyksIlVUQyIpKSYmKG5bMF09ZSszKSxXNXQodCxuLHIpfWZ1bmN0aW9uIEdkbih0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKG89dC5nLmEsaD10LmcuYixyPW5ldyBTKHQuZCk7ci5hPHIuYy5jLmxlbmd0aDspbj11KFEociksNzApLHM9bi5uLHMuYT1vLHQuaT09KGJlKCksT24pP3MuYj1oK3Quai5iLW4uby5iOnMuYj1oLEZpKHMsZSksbys9bi5vLmErdC5lfWZ1bmN0aW9uIG1yKHQsZSxuKXtpZih0LmIpdGhyb3cgbnQobmV3IEhvKCJUaGUgdGFzayBpcyBhbHJlYWR5IGRvbmUuIikpO3JldHVybiB0LnAhPW51bGw/ITE6KHQucD1lLHQucj1uLHQuayYmKHQubz0ocWQoKSxJYShBdShEYXRlLm5vdygpKSxWZykpKSwhMCl9ZnVuY3Rpb24geDR0KHQpe3ZhciBlLG4scixzLG8saCxkO3JldHVybiBkPW5ldyB3NixuPXQudGcoKSxzPW4hPW51bGwscyYmZDgoZCxDZCx0LnRnKCkpLHI9dC5uZSgpLG89ciE9bnVsbCxvJiZkOChkLGZpLHQubmUoKSksZT10LnNnKCksaD1lIT1udWxsLGgmJmQ4KGQsImRlc2NyaXB0aW9uIix0LnNnKCkpLGR9ZnVuY3Rpb24gbGFlKHQsZSxuKXt2YXIgcixzLG87cmV0dXJuIG89dC5xLHQucT1lLHQuRGImNCYmISh0LkRiJjEpJiYocz1uZXcgb2EodCwxLDksbyxlKSxuP24uRWkocyk6bj1zKSxlPyhyPWUuYyxyIT10LnImJihuPXQubmsocixuKSkpOnQuciYmKG49dC5uayhudWxsLG4pKSxufWZ1bmN0aW9uIFVkbih0LGUsbil7dmFyIHIscyxvLGgsZDtmb3Iobj0oZD1lLHR4KGQsdC5lLC0xLXQuYyxuKSksaD13d3QodC5hKSxvPShyPW5ldyBkMihuZXcga2coaC5hKS5hKSxuZXcgdVIocikpO28uYS5iOylzPXUoWXYoby5hKS5jZCgpLDg3KSxuPVQ3KHMsb3Eocyx0LmEpLG4pO3JldHVybiBufWZ1bmN0aW9uIFdkbih0LGUsbil7dmFyIHIscyxvLGgsZDtmb3Iobj0oZD1lLGMkKGQsdC5lLC0xLXQuYyxuKSksaD13d3QodC5hKSxvPShyPW5ldyBkMihuZXcga2coaC5hKS5hKSxuZXcgdVIocikpO28uYS5iOylzPXUoWXYoby5hKS5jZCgpLDg3KSxuPVQ3KHMsb3Eocyx0LmEpLG4pO3JldHVybiBufWZ1bmN0aW9uIEtkbih0LGUsbixyKXt2YXIgcyxvLGg7aWYocj09MClQYyhlLDAsdCxuLHQubGVuZ3RoLW4pO2Vsc2UgZm9yKGg9MzItcix0W3QubGVuZ3RoLTFdPTAsbz10Lmxlbmd0aC0xO28+bjtvLS0pdFtvXXw9ZVtvLW4tMV0+Pj5oLHRbby0xXT1lW28tbi0xXTw8cjtmb3Iocz0wO3M8bjtzKyspdFtzXT0wfWZ1bmN0aW9uIFlkbih0KXt2YXIgZSxuLHIscyxvO2ZvcihlPTAsbj0wLG89dC5LYygpO28uT2IoKTspcj11KG8uUGIoKSwxMTEpLGU9Yi5NYXRoLm1heChlLHIuZC5iKSxuPWIuTWF0aC5tYXgobixyLmQuYyk7Zm9yKHM9dC5LYygpO3MuT2IoKTspcj11KHMuUGIoKSwxMTEpLHIuZC5iPWUsci5kLmM9bn1mdW5jdGlvbiBYZG4odCl7dmFyIGUsbixyLHMsbztmb3Iobj0wLGU9MCxvPXQuS2MoKTtvLk9iKCk7KXI9dShvLlBiKCksMTExKSxuPWIuTWF0aC5tYXgobixyLmQuZCksZT1iLk1hdGgubWF4KGUsci5kLmEpO2ZvcihzPXQuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMTExKSxyLmQuZD1uLHIuZC5hPWV9ZnVuY3Rpb24gaGFlKHQsZSl7dmFyIG4scixzLG87Zm9yKG89bmV3IGxlLHM9MCxyPWUuS2MoKTtyLk9iKCk7KXtmb3Iobj1kZSh1KHIuUGIoKSwxOSkuYStzKTtuLmE8dC5mJiYhJHRuKHQsbi5hKTspbj1kZShuLmErMSksKytzO2lmKG4uYT49dC5mKWJyZWFrO28uY1tvLmMubGVuZ3RoXT1ufXJldHVybiBvfWZ1bmN0aW9uIGs0dCh0KXt2YXIgZSxuLHIscztmb3IoZT1udWxsLHM9bmV3IFModC53ZigpKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoUShzKSwxODEpLG49bmV3IGNoKHIucWYoKS5hLHIucWYoKS5iLHIucmYoKS5hLHIucmYoKS5iKSxlP2hDKGUsbik6ZT1uO3JldHVybiFlJiYoZT1uZXcgUzYpLGV9ZnVuY3Rpb24gTXN0KHQsZSxuLHIpe3ZhciBzLG87cmV0dXJuIG49PTE/KCF0Lm4mJih0Lm49bmV3IGhlKFlvLHQsMSw3KSksZXUodC5uLGUscikpOihvPXUod24oKHM9dShNbih0LDE2KSwyNiksc3x8dC56aCgpKSxuKSw2Niksby5OaigpLlFqKHQsdXUodCksbi1Kbih0LnpoKCkpLGUscikpfWZ1bmN0aW9uIERzdCh0LGUsbil7dmFyIHIscyxvLGgsZDtmb3Iocj1uLmdjKCksdC5xaSh0LmkrciksZD10LmktZSxkPjAmJlBjKHQuZyxlLHQuZyxlK3IsZCksaD1uLktjKCksdC5pKz1yLHM9MDtzPHI7KytzKW89aC5QYigpLGZfKHQsZSx0Lm9pKGUsbykpLHQuYmkoZSxvKSx0LmNpKCksKytlO3JldHVybiByIT0wfWZ1bmN0aW9uIEYxKHQsZSxuKXt2YXIgcjtyZXR1cm4gZSE9dC5xPyh0LnEmJihuPWMkKHQucSx0LC0xMCxuKSksZSYmKG49dHgoZSx0LC0xMCxuKSksbj1sYWUodCxlLG4pKTp0LkRiJjQmJiEodC5EYiYxKSYmKHI9bmV3IG9hKHQsMSw5LGUsZSksbj9uLkVpKHIpOm49ciksbn1mdW5jdGlvbiBJc3QodCxlLG4scil7cmV0dXJuIGh2dCgobiZ2ZCk9PTAsImZsYXRNYXAgZG9lcyBub3Qgc3VwcG9ydCBTVUJTSVpFRCBjaGFyYWN0ZXJpc3RpYyIpLGh2dCgobiY0KT09MCwiZmxhdE1hcCBkb2VzIG5vdCBzdXBwb3J0IFNPUlRFRCBjaGFyYWN0ZXJpc3RpYyIpLERyKHQpLERyKGUpLG5ldyBiWnQodCxuLHIsZSl9ZnVuY3Rpb24gUWRuKHQsZSl7YXd0KGUsIkNhbm5vdCBzdXBwcmVzcyBhIG51bGwgZXhjZXB0aW9uLiIpLENqKGUhPXQsIkV4Y2VwdGlvbiBjYW4gbm90IHN1cHByZXNzIGl0c2VsZi4iKSwhdC5pJiYodC5rPT1udWxsP3Quaz11dChvdChrdXQsMSkscmUsNzgsMCxbZV0pOnQua1t0LmsubGVuZ3RoXT1lKX1mdW5jdGlvbiBiNCh0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGs7Zm9yKGg9bi5sZW5ndGgsbz0wLHM9LTEsaz1zZWUodC5zdWJzdHIoZSksKG1udCgpLG03dCkpLGQ9MDtkPGg7KytkKXc9bltkXS5sZW5ndGgsdz5vJiZvZW4oayxzZWUobltkXSxtN3QpKSYmKHM9ZCxvPXcpO3JldHVybiBzPj0wJiYoclswXT1lK28pLHN9ZnVuY3Rpb24gWmRuKHQsZSl7dmFyIG47aWYobj1uVXQodC5iLkhmKCksZS5iLkhmKCkpLG4hPTApcmV0dXJuIG47c3dpdGNoKHQuYi5IZigpLmcpe2Nhc2UgMTpjYXNlIDI6cmV0dXJuIG11KHQuYi5zZigpLGUuYi5zZigpKTtjYXNlIDM6Y2FzZSA0OnJldHVybiBtdShlLmIuc2YoKSx0LmIuc2YoKSl9cmV0dXJuIDB9ZnVuY3Rpb24gSmRuKHQpe3ZhciBlLG4scjtmb3Iocj10LmUuYy5sZW5ndGgsdC5hPVpiKFNyLFtyZSxKcl0sWzQ4LDI1XSwxNSxbcixyXSwyKSxuPW5ldyBTKHQuYyk7bi5hPG4uYy5jLmxlbmd0aDspZT11KFEobiksMjgyKSx0LmFbZS5jLmJdW2UuZC5iXSs9dShLKGUsKG4xKCksWjcpKSwxOSkuYX1mdW5jdGlvbiB0MG4odCxlLG4pe21yKG4sIkdyb3cgVHJlZSIsMSksdC5iPWUuZixCZShGZShLKGUsKHE4KCksdVMpKSkpPyh0LmM9bmV3IG1hLEFRdCh0LG51bGwpKTp0LmM9bmV3IG1hLHQuYT0hMSxEY2UodCxlLmYpLGVlKGUsSjd0LChGbigpLCEhdC5hKSksb3Iobil9ZnVuY3Rpb24gZTBuKHQsZSl7dmFyIG4scixzLG8saDtpZih0PT1udWxsKXJldHVybiBudWxsO2ZvcihoPU50KEVoLHdkLDI1LDIqZSwxNSwxKSxyPTAscz0wO3I8ZTsrK3Ipbj10W3JdPj40JjE1LG89dFtyXSYxNSxoW3MrK109UkF0W25dLGhbcysrXT1SQXRbb107cmV0dXJuIEloKGgsMCxoLmxlbmd0aCl9ZnVuY3Rpb24gbjBuKHQsZSxuKXt2YXIgcixzLG87cmV0dXJuIHI9ZS5haygpLG89ZS5kZCgpLHM9ci4kaigpP0hwKHQsNCxyLG8sbnVsbCx4Nyh0LHIsbyxfdChyLDk5KSYmKHUociwxOCkuQmImUWEpIT0wKSwhMCk6SHAodCxyLktqKCk/MjoxLHIsbyxyLnpqKCksLTEsITApLG4/bi5FaShzKTpuPXMsbn1mdW5jdGlvbiBMdSh0KXt2YXIgZSxuO3JldHVybiB0Pj1RYT8oZT1PSSsodC1RYT4+MTAmMTAyMykmTXMsbj01NjMyMCsodC1RYSYxMDIzKSZNcyxTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKygiIitTdHJpbmcuZnJvbUNoYXJDb2RlKG4pKSk6U3RyaW5nLmZyb21DaGFyQ29kZSh0Jk1zKX1mdW5jdGlvbiByMG4odCxlKXtCbSgpO3ZhciBuLHIscyxvO3JldHVybiBzPXUodShQaSh0LnIsZSksMjEpLDg0KSxzLmdjKCk+PTI/KHI9dShzLktjKCkuUGIoKSwxMTEpLG49dC51LkhjKChpbCgpLEpTKSksbz10LnUuSGMoSHgpLCFyLmEmJiFuJiYocy5nYygpPT0yfHxvKSk6ITF9ZnVuY3Rpb24gZmFlKHQsZSxuLHIscyl7dmFyIG8saCxkO2ZvcihvPVljZSh0LGUsbixyLHMpLGQ9ITE7IW87KXNxKHQscywhMCksZD0hMCxvPVljZSh0LGUsbixyLHMpO2QmJnNxKHQscywhMSksaD1iaXQocyksaC5jLmxlbmd0aCE9MCYmKHQuZCYmdC5kLmxnKGgpLGZhZSh0LHMsbixyLGgpKX1mdW5jdGlvbiB0cSgpe3RxPVgsd2Z0PW5ldyByXyhLMCwwKSxmQXQ9bmV3IHJfKCJESVJFQ1RFRCIsMSksZ0F0PW5ldyByXygiVU5ESVJFQ1RFRCIsMiksbEF0PW5ldyByXygiQVNTT0NJQVRJT04iLDMpLGRBdD1uZXcgcl8oIkdFTkVSQUxJWkFUSU9OIiw0KSxoQXQ9bmV3IHJfKCJERVBFTkRFTkNZIiw1KX1mdW5jdGlvbiBpMG4odCxlKXt2YXIgbjtpZighXzEodCkpdGhyb3cgbnQobmV3IEhvKG9kZSkpO3N3aXRjaChuPV8xKHQpLGUuZyl7Y2FzZSAxOnJldHVybi0odC5qK3QuZik7Y2FzZSAyOnJldHVybiB0Lmktbi5nO2Nhc2UgMzpyZXR1cm4gdC5qLW4uZjtjYXNlIDQ6cmV0dXJuLSh0LmkrdC5nKX1yZXR1cm4gMH1mdW5jdGlvbiBoNyh0LGUpe3ZhciBuLHI7Zm9yKEluKGUpLHI9dC5iLmMubGVuZ3RoLHVlKHQuYixlKTtyPjA7KXtpZihuPXIscj0oci0xKS8yfDAsdC5hLnVlKFBlKHQuYixyKSxlKTw9MClyZXR1cm4gbGgodC5iLG4sZSksITA7bGgodC5iLG4sUGUodC5iLHIpKX1yZXR1cm4gbGgodC5iLHIsZSksITB9ZnVuY3Rpb24gRTR0KHQsZSxuLHIpe3ZhciBzLG87aWYocz0wLG4pcz13eih0LmFbbi5nXVtlLmddLHIpO2Vsc2UgZm9yKG89MDtvPFFIO28rKylzPWIuTWF0aC5tYXgocyx3eih0LmFbb11bZS5nXSxyKSk7cmV0dXJuIGU9PShaZigpLGl1KSYmdC5iJiYocz1iLk1hdGgubWF4KHMsdC5iLmEpKSxzfWZ1bmN0aW9uIHMwbih0LGUpe3ZhciBuLHIscyxvLGgsZDtyZXR1cm4gcz10Lmksbz1lLmksIXN8fCFvfHxzLmkhPW8uaXx8cy5pPT0oYmUoKSxIbil8fHMuaT09KGJlKCksQm4pPyExOihoPXMuZy5hLG49aCtzLmouYSxkPW8uZy5hLHI9ZCtvLmouYSxoPD1yJiZuPj1kKX1mdW5jdGlvbiBUNHQodCxlLG4scil7dmFyIHM7aWYocz0hMSxoYShyKSYmKHM9ITAsZDgoZSxuLGpyKHIpKSksc3x8T20ocikmJihzPSEwLFQ0dCh0LGUsbixyKSksc3x8X3QociwyMzYpJiYocz0hMCxlMihlLG4sdShyLDIzNikpKSwhcyl0aHJvdyBudChuZXcgbmV0KHc4dCkpfWZ1bmN0aW9uIGEwbih0LGUpe3ZhciBuLHIscztpZihuPWUuSGgodC5hKSxuJiYocz1KZigoIW4uYiYmKG4uYj1uZXcgQWwoKGxuKCksSmEpLHBjLG4pKSxuLmIpLFJoKSxzIT1udWxsKSl7Zm9yKHI9MTtyPChHdSgpLGNMdCkubGVuZ3RoOysrcilpZih1bihjTHRbcl0scykpcmV0dXJuIHJ9cmV0dXJuIDB9ZnVuY3Rpb24gbzBuKHQsZSl7dmFyIG4scixzO2lmKG49ZS5IaCh0LmEpLG4mJihzPUpmKCghbi5iJiYobi5iPW5ldyBBbCgobG4oKSxKYSkscGMsbikpLG4uYiksUmgpLHMhPW51bGwpKXtmb3Iocj0xO3I8KEd1KCksdUx0KS5sZW5ndGg7KytyKWlmKHVuKHVMdFtyXSxzKSlyZXR1cm4gcn1yZXR1cm4gMH1mdW5jdGlvbiBkYWUodCxlKXt2YXIgbixyLHMsbztpZihJbihlKSxvPXQuYS5nYygpLG88ZS5nYygpKWZvcihuPXQuYS5lYygpLktjKCk7bi5PYigpOylyPW4uUGIoKSxlLkhjKHIpJiZuLlFiKCk7ZWxzZSBmb3Iocz1lLktjKCk7cy5PYigpOylyPXMuUGIoKSx0LmEuQmMocikhPW51bGw7cmV0dXJuIG8hPXQuYS5nYygpfWZ1bmN0aW9uIGdhZSh0KXt2YXIgZSxuO3N3aXRjaChuPXVjKG5jKHV0KG90KG5hLDEpLHJlLDgsMCxbdC5pLm4sdC5uLHQuYV0pKSksZT10LmkuZCx0LmouZyl7Y2FzZSAxOm4uYi09ZS5kO2JyZWFrO2Nhc2UgMjpuLmErPWUuYzticmVhaztjYXNlIDM6bi5iKz1lLmE7YnJlYWs7Y2FzZSA0Om4uYS09ZS5ifXJldHVybiBufWZ1bmN0aW9uIGMwbih0KXt2YXIgZTtmb3IoZT0oWTYoKSx1KElyKG5ldyBhcihscihVbyh0KS5hLktjKCksbmV3IEgpKSksMTcpLmMuaSk7ZS5rPT0oR24oKSxjYSk7KWVlKGUsKGFlKCksRU8pLChGbigpLCEwKSksZT11KElyKG5ldyBhcihscihVbyhlKS5hLktjKCksbmV3IEgpKSksMTcpLmMuaX1mdW5jdGlvbiBPc3QodCxlLG4scil7dmFyIHMsbyxoLGQ7Zm9yKGQ9UV8oZSxyKSxoPWQuS2MoKTtoLk9iKCk7KXM9dShoLlBiKCksMTEpLHQuZFtzLnBdPXQuZFtzLnBdK3QuY1tuLnBdO2ZvcihkPVFfKG4sciksbz1kLktjKCk7by5PYigpOylzPXUoby5QYigpLDExKSx0LmRbcy5wXT10LmRbcy5wXS10LmNbZS5wXX1mdW5jdGlvbiBfNHQodCxlLG4pe3ZhciByLHM7Zm9yKHM9bmV3IG5yKCghdC5hJiYodC5hPW5ldyBoZShkcyx0LDEwLDExKSksdC5hKSk7cy5lIT1zLmkuZ2MoKTspcj11KGRyKHMpLDMzKSxrMShyLHIuaStlLHIuaituKTtfYSgoIXQuYiYmKHQuYj1uZXcgaGUocmEsdCwxMiwzKSksdC5iKSxuZXcgdUd0KGUsbikpfWZ1bmN0aW9uIHUwbih0LGUsbixyKXt2YXIgcyxvO2ZvcihvPWUscz1vLmQ9PW51bGx8fHQuYS51ZShuLmQsby5kKT4wPzE6MDtvLmFbc10hPW47KW89by5hW3NdLHM9dC5hLnVlKG4uZCxvLmQpPjA/MTowO28uYVtzXT1yLHIuYj1uLmIsci5hWzBdPW4uYVswXSxyLmFbMV09bi5hWzFdLG4uYVswXT1udWxsLG4uYVsxXT1udWxsfWZ1bmN0aW9uIGwwbih0KXtpbCgpO3ZhciBlLG47cmV0dXJuIGU9S2kodGcsdXQob3QoVkcsMSksb2UsMjczLDAsW0ViXSkpLCEoQUQoaCQoZSx0KSk+MXx8KG49S2koSlMsdXQob3QoVkcsMSksb2UsMjczLDAsW1pTLEh4XSkpLEFEKGgkKG4sdCkpPjEpKX1mdW5jdGlvbiBDNHQodCxlKXt2YXIgbjtuPWpjKChJcCgpLFhoKSx0KSxfdChuLDQ5OCk/QW8oWGgsdCxuZXcgSUd0KHRoaXMsZSkpOkFvKFhoLHQsdGhpcyksTnN0KHRoaXMsZSksZT09KFprKCksWEF0KT8odGhpcy53Yj11KHRoaXMsMTkzOSksdShlLDE5NDEpKTp0aGlzLndiPSh6cCgpLEFuKX1mdW5jdGlvbiBoMG4odCl7dmFyIGUsbixyO2lmKHQ9PW51bGwpcmV0dXJuIG51bGw7Zm9yKGU9bnVsbCxuPTA7bjxyQS5sZW5ndGg7KytuKXRyeXtyZXR1cm4ga1Z0KHJBW25dLHQpfWNhdGNoKHMpe2lmKHM9cnMocyksX3QocywzMikpcj1zLGU9cjtlbHNlIHRocm93IG50KHMpfXRocm93IG50KG5ldyBGJChlKSl9ZnVuY3Rpb24gcGFlKCl7cGFlPVgsX2dlPXV0KG90KExlLDEpLHJlLDIsNixbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdKSxDZ2U9dXQob3QoTGUsMSkscmUsMiw2LFsiSmFuIiwiRmViIiwiTWFyIiwiQXByIix1eCwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0pfWZ1bmN0aW9uIGJhZSh0KXt2YXIgZSxuLHI7ZT11bih0eXBlb2YgZSx2b3QpP251bGw6bmV3IEFhLGUmJihyOCgpLG49KHI9OTAwLHI+PVZnPyJlcnJvciI6cj49OTAwPyJ3YXJuIjpyPj04MDA/ImluZm8iOiJsb2ciKSxKWXQobix0LmEpLHQuYiYmQzV0KGUsbix0LmIsIkV4Y2VwdGlvbjogIiwhMCkpfWZ1bmN0aW9uIEsodCxlKXt2YXIgbixyO3JldHVybiByPSghdC5xJiYodC5xPW5ldyBBciksdHIodC5xLGUpKSxyPz8obj1lLndnKCksX3Qobiw0KSYmKG49PW51bGw/KCF0LnEmJih0LnE9bmV3IEFyKSxHNih0LnEsZSkpOighdC5xJiYodC5xPW5ldyBBciksQWkodC5xLGUsbikpKSxuKX1mdW5jdGlvbiBZYSgpe1lhPVgsTGQ9bmV3IHhNKCJQMV9DWUNMRV9CUkVBS0lORyIsMCksZmI9bmV3IHhNKCJQMl9MQVlFUklORyIsMSksZnU9bmV3IHhNKCJQM19OT0RFX09SREVSSU5HIiwyKSxHYz1uZXcgeE0oIlA0X05PREVfUExBQ0VNRU5UIiwzKSxqbz1uZXcgeE0oIlA1X0VER0VfUk9VVElORyIsNCl9ZnVuY3Rpb24gdmFlKHQsZSl7dmFyIG4scixzLG8saDtmb3Iocz1lPT0xP0p1dDpadXQscj1zLmEuZWMoKS5LYygpO3IuT2IoKTspZm9yKG49dShyLlBiKCksMTAzKSxoPXUoUGkodC5mLmMsbiksMjEpLktjKCk7aC5PYigpOylvPXUoaC5QYigpLDQ2KSxFdSh0LmIuYixvLmIpLEV1KHQuYi5hLHUoby5iLDgxKS5kKX1mdW5jdGlvbiBmMG4odCxlKXskXygpO3ZhciBuO2lmKHQuYz09ZS5jKXtpZih0LmI9PWUuYnx8Qm9uKHQuYixlLmIpKXtpZihuPVVZZSh0LmIpPzE6LTEsdC5hJiYhZS5hKXJldHVybiBuO2lmKCF0LmEmJmUuYSlyZXR1cm4tbn1yZXR1cm4gbXUodC5iLmcsZS5iLmcpfWVsc2UgcmV0dXJuIGpzKHQuYyxlLmMpfWZ1bmN0aW9uIGQwbih0LGUpe3ZhciBuO21yKGUsIkhpZXJhcmNoaWNhbCBwb3J0IHBvc2l0aW9uIHByb2Nlc3NpbmciLDEpLG49dC5iLG4uYy5sZW5ndGg+MCYmRnVlKChTbigwLG4uYy5sZW5ndGgpLHUobi5jWzBdLDI5KSksdCksbi5jLmxlbmd0aD4xJiZGdWUodShQZShuLG4uYy5sZW5ndGgtMSksMjkpLHQpLG9yKGUpfWZ1bmN0aW9uIHdhZSh0LGUpe3ZhciBuLHIscztpZihBNHQodCxlKSlyZXR1cm4hMDtmb3Iocj1uZXcgUyhlKTtyLmE8ci5jLmMubGVuZ3RoOylpZihuPXUoUShyKSwzMykscz1ac2UobiksZHEodCxuLHMpfHxDcmUodCxuKS10Lmc8PXQuYSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBySSgpe3JJPVgsSUc9KGlhdCgpLG9TdCksUWh0PXgzZSxYaHQ9eTNlLHRTdD12M2UsWWh0PW0zZSxKQ3Q9bmV3IE12KDgpLGwzZT1uZXcgYW8oKGRpKCksVjIpLEpDdCksaDNlPW5ldyBhbyhHMiw4KSxmM2U9c1N0LFFDdD1kM2UsWkN0PWczZSx1M2U9bmV3IGFvKFVPLChGbigpLCExKSl9ZnVuY3Rpb24gZXEoKXtlcT1YLFRTdD1uZXcgTXYoMTUpLFIzZT1uZXcgYW8oKGRpKCksVjIpLFRTdCksajNlPW5ldyBhbyhHMiwxNSksX1N0PW5ldyBhbyh6RyxkZSgwKSkseFN0PVBTdCxGM2U9SDIsQjNlPW1iLHlTdD1uZXcgYW8oangsSDFlKSxrU3Q9UkcsRVN0PW81LGVmdD1IM2UsUDNlPUJHfWZ1bmN0aW9uIFpkKHQpe2lmKCghdC5iJiYodC5iPW5ldyBFbih2cix0LDQsNykpLHQuYikuaSE9MXx8KCF0LmMmJih0LmM9bmV3IEVuKHZyLHQsNSw4KSksdC5jKS5pIT0xKXRocm93IG50KG5ldyBQbihLY3QpKTtyZXR1cm4gUm8odShBdCgoIXQuYiYmKHQuYj1uZXcgRW4odnIsdCw0LDcpKSx0LmIpLDApLDgyKSl9ZnVuY3Rpb24gbWFlKHQpe2lmKCghdC5iJiYodC5iPW5ldyBFbih2cix0LDQsNykpLHQuYikuaSE9MXx8KCF0LmMmJih0LmM9bmV3IEVuKHZyLHQsNSw4KSksdC5jKS5pIT0xKXRocm93IG50KG5ldyBQbihLY3QpKTtyZXR1cm4gT0QodShBdCgoIXQuYiYmKHQuYj1uZXcgRW4odnIsdCw0LDcpKSx0LmIpLDApLDgyKSl9ZnVuY3Rpb24geWFlKHQpe2lmKCghdC5iJiYodC5iPW5ldyBFbih2cix0LDQsNykpLHQuYikuaSE9MXx8KCF0LmMmJih0LmM9bmV3IEVuKHZyLHQsNSw4KSksdC5jKS5pIT0xKXRocm93IG50KG5ldyBQbihLY3QpKTtyZXR1cm4gT0QodShBdCgoIXQuYyYmKHQuYz1uZXcgRW4odnIsdCw1LDgpKSx0LmMpLDApLDgyKSl9ZnVuY3Rpb24gWnAodCl7aWYoKCF0LmImJih0LmI9bmV3IEVuKHZyLHQsNCw3KSksdC5iKS5pIT0xfHwoIXQuYyYmKHQuYz1uZXcgRW4odnIsdCw1LDgpKSx0LmMpLmkhPTEpdGhyb3cgbnQobmV3IFBuKEtjdCkpO3JldHVybiBSbyh1KEF0KCghdC5jJiYodC5jPW5ldyBFbih2cix0LDUsOCkpLHQuYyksMCksODIpKX1mdW5jdGlvbiBTNHQodCxlLG4pe3ZhciByLHMsbztpZigrK3QuaixzPXQuVmkoKSxlPj1zfHxlPDApdGhyb3cgbnQobmV3IENvKFljdCtlK0wyK3MpKTtpZihuPj1zfHxuPDApdGhyb3cgbnQobmV3IENvKFhjdCtuK0wyK3MpKTtyZXR1cm4gZSE9bj9yPShvPXQuVGkobiksdC5IaShlLG8pLG8pOnI9dC5PaShuKSxyfWZ1bmN0aW9uIHhhZSh0KXt2YXIgZSxuLHI7aWYocj10LHQpZm9yKGU9MCxuPXQuVWcoKTtuO249bi5VZygpKXtpZigrK2U+dW90KXJldHVybiB4YWUobik7aWYocj1uLG49PXQpdGhyb3cgbnQobmV3IEhvKCJUaGVyZSBpcyBhIGN5Y2xlIGluIHRoZSBjb250YWlubWVudCBoaWVyYXJjaHkgb2YgIit0KSl9cmV0dXJuIHJ9ZnVuY3Rpb24gSnAodCl7dmFyIGUsbixyO2ZvcihyPW5ldyBsMihYYSwiWyIsIl0iKSxuPXQuS2MoKTtuLk9iKCk7KWU9bi5QYigpLFAwKHIsR3QoZSk9PT1HdCh0KT8iKHRoaXMgQ29sbGVjdGlvbikiOmU9PW51bGw/TXU6V28oZSkpO3JldHVybiByLmE/ci5lLmxlbmd0aD09MD9yLmEuYTpyLmEuYSsoIiIrci5lKTpyLmN9ZnVuY3Rpb24gQTR0KHQsZSl7dmFyIG4scjtpZihyPSExLGUuZ2MoKTwyKXJldHVybiExO2ZvcihuPTA7bjxlLmdjKCk7bisrKW48ZS5nYygpLTE/cj1yfGRxKHQsdShlLlhiKG4pLDMzKSx1KGUuWGIobisxKSwzMykpOnI9cnxkcSh0LHUoZS5YYihuKSwzMyksdShlLlhiKDApLDMzKSk7cmV0dXJuIHJ9ZnVuY3Rpb24ga2FlKHQsZSl7dmFyIG47ZSE9dC5hPyhuPW51bGwsdC5hJiYobj11KHQuYSw0OSkuaWgodCw0LG8xLG4pKSxlJiYobj11KGUsNDkpLmdoKHQsNCxvMSxuKSksbj0keXQodCxlLG4pLG4mJm4uRmkoKSk6dC5EYiY0JiYhKHQuRGImMSkmJkNpKHQsbmV3IG9hKHQsMSwxLGUsZSkpfWZ1bmN0aW9uIEw0dCh0LGUpe3ZhciBuO2UhPXQuZT8odC5lJiZESnQod3d0KHQuZSksdCksZSYmKCFlLmImJihlLmI9bmV3IGNSKG5ldyBRdHQpKSxHV3QoZS5iLHQpKSxuPVQxbih0LGUsbnVsbCksbiYmbi5GaSgpKTp0LkRiJjQmJiEodC5EYiYxKSYmQ2kodCxuZXcgb2EodCwxLDQsZSxlKSl9ZnVuY3Rpb24gdXkodCl7dmFyIGUsbixyO2ZvcihuPXQubGVuZ3RoLHI9MDtyPG4mJigkcihyLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQocik8PTMyKTspKytyO2ZvcihlPW47ZT5yJiYoJHIoZS0xLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoZS0xKTw9MzIpOyktLWU7cmV0dXJuIHI+MHx8ZTxuP3Quc3Vic3RyKHIsZS1yKTp0fWZ1bmN0aW9uIGcwbih0LGUpe3ZhciBuO249ZS5vLFBwKHQuZik/KHQuai5hPWIuTWF0aC5tYXgodC5qLmEsbi5hKSx0LmouYis9bi5iLHQuZC5jLmxlbmd0aD4xJiYodC5qLmIrPXQuZSkpOih0LmouYSs9bi5hLHQuai5iPWIuTWF0aC5tYXgodC5qLmIsbi5iKSx0LmQuYy5sZW5ndGg+MSYmKHQuai5hKz10LmUpKX1mdW5jdGlvbiB0Yigpe3RiPVgsZTJlPXV0KG90KFphLDEpLENjLDYxLDAsWyhiZSgpLE9uKSxIbix5cl0pLHQyZT11dChvdChaYSwxKSxDYyw2MSwwLFtIbix5cixCbl0pLG4yZT11dChvdChaYSwxKSxDYyw2MSwwLFt5cixCbixPbl0pLHIyZT11dChvdChaYSwxKSxDYyw2MSwwLFtCbixPbixIbl0pfWZ1bmN0aW9uIHAwbih0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssXztpZihoPXQuYy5kLGQ9dC5kLmQsaC5qIT1kLmopZm9yKF89dC5iLHM9aC5qLHc9bnVsbDtzIT1kLmo7KXc9ZT09MD9reihzKTpReXQocyksbz1TM3QocyxfLmRbcy5nXSxuKSxrPVMzdCh3LF8uZFt3LmddLG4pLGFpKHIsRmkobyxrKSkscz13fWZ1bmN0aW9uIGIwbih0LGUsbixyKXt2YXIgcyxvLGgsZCx3O3JldHVybiBoPUxzZSh0LmEsZSxuKSxkPXUoaC5hLDE5KS5hLG89dShoLmIsMTkpLmEsciYmKHc9dShLKGUsKGFlKCksc2wpKSwxMCkscz11KEsobixzbCksMTApLHcmJnMmJihQWnQodC5iLHcscyksZCs9dC5iLmksbys9dC5iLmUpKSxkPm99ZnVuY3Rpb24gRWFlKHQpe3ZhciBlLG4scixzLG8saCxkLHcsaztmb3IodGhpcy5hPVppZSh0KSx0aGlzLmI9bmV3IGxlLG49dCxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWZvcihlPW5bcl0sbz1uZXcgbGUsdWUodGhpcy5iLG8pLGQ9ZSx3PTAsaz1kLmxlbmd0aDt3PGs7Kyt3KWg9ZFt3XSx1ZShvLG5ldyBxdShoLmopKX1mdW5jdGlvbiB2MG4odCxlLG4pe3ZhciByLHMsbztyZXR1cm4gbz0wLHI9bltlXSxlPG4ubGVuZ3RoLTEmJihzPW5bZSsxXSx0LmJbZV0/KG89cTVuKHQuZCxyLHMpLG8rPUpudCh0LmEsciwoYmUoKSxIbikpLG8rPUpudCh0LmEscyxCbikpOm89Y2FuKHQuYSxyLHMpKSx0LmNbZV0mJihvKz1Ec24odC5hLHIpKSxvfWZ1bmN0aW9uIHcwbih0LGUsbixyLHMpe3ZhciBvLGgsZCx3O2Zvcih3PW51bGwsZD1uZXcgUyhyKTtkLmE8ZC5jLmMubGVuZ3RoOylpZihoPXUoUShkKSw0NDEpLGghPW4mJkdvKGguZSxzLDApIT0tMSl7dz1oO2JyZWFrfW89RnJ0KHMpLEJhKG8sbi5iKSxwYShvLHcuYiksY24odC5hLHMsbmV3IFRqKG8sZSxuLmYpKX1mdW5jdGlvbiBUYWUodCl7Zm9yKDt0LmcuYyE9MCYmdC5kLmMhPTA7KWhudCh0LmcpLmM+aG50KHQuZCkuYz8odC5pKz10LmcuYyxYaXQodC5kKSk6aG50KHQuZCkuYz5obnQodC5nKS5jPyh0LmUrPXQuZC5jLFhpdCh0LmcpKToodC5pKz10WXQodC5nKSx0LmUrPXRZdCh0LmQpLFhpdCh0LmcpLFhpdCh0LmQpKX1mdW5jdGlvbiBtMG4odCxlLG4pe3ZhciByLHMsbyxoO2ZvcihvPWUucSxoPWUucixuZXcgbjIoKFlmKCksdmIpLGUsbywxKSxuZXcgbjIodmIsbyxoLDEpLHM9bmV3IFMobik7cy5hPHMuYy5jLmxlbmd0aDspcj11KFEocyksMTEyKSxyIT1vJiZyIT1lJiZyIT1oJiYobzZ0KHQuYSxyLGUpLG82dCh0LmEscixoKSl9ZnVuY3Rpb24gX2FlKHQsZSxuLHIpe3QuYS5kPWIuTWF0aC5taW4oZSxuKSx0LmEuYT1iLk1hdGgubWF4KGUsciktdC5hLmQsZTxuPyh0LmI9LjUqKGUrbiksdC5nPXhjdCp0LmIrLjkqZSx0LmY9eGN0KnQuYisuOSpuKToodC5iPS41KihlK3IpLHQuZz14Y3QqdC5iKy45KnIsdC5mPXhjdCp0LmIrLjkqZSl9ZnVuY3Rpb24geTBuKCl7JEg9e30sIUFycmF5LmlzQXJyYXkmJihBcnJheS5pc0FycmF5PWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSk9PT0iW29iamVjdCBBcnJheV0ifSk7ZnVuY3Rpb24gdCgpe3JldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKX0hRGF0ZS5ub3cmJihEYXRlLm5vdz10KX1mdW5jdGlvbiBDYWUodCxlKXt2YXIgbixyO3I9dShLKGUsKHhlKCksd3MpKSw5OCksZWUoZSwoYWUoKSx0VHQpLHIpLG49ZS5lLG4mJih5cyhuZXcga24obnVsbCxuZXcgVG4obi5hLDE2KSksbmV3IF9zKHQpKSx5cyhlYyhuZXcga24obnVsbCxuZXcgVG4obi5iLDE2KSksbmV3IE05KSxuZXcgWmkodCkpKX1mdW5jdGlvbiB4MG4odCl7dmFyIGUsbixyLHM7aWYoYTgodShLKHQuYiwoeGUoKSxYbCkpLDEwMykpKXJldHVybiAwO2ZvcihlPTAscj1uZXcgUyh0LmEpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShRKHIpLDEwKSxuLms9PShHbigpLHFzKSYmKHM9bi5vLmEsZT1iLk1hdGgubWF4KGUscykpO3JldHVybiBlfWZ1bmN0aW9uIGswbih0KXtzd2l0Y2godShLKHQsKHhlKCksZHUpKSwxNjMpLmcpe2Nhc2UgMTplZSh0LGR1LChwaCgpLHhTKSk7YnJlYWs7Y2FzZSAyOmVlKHQsZHUsKHBoKCksRnkpKTticmVhaztjYXNlIDM6ZWUodCxkdSwocGgoKSx5UykpO2JyZWFrO2Nhc2UgNDplZSh0LGR1LChwaCgpLGdiKSl9fWZ1bmN0aW9uIGY3KCl7Zjc9WCxiUz1uZXcgWlQoSzAsMCksQjl0PW5ldyBaVChmeCwxKSwkOXQ9bmV3IFpUKGR4LDIpLGo5dD1uZXcgWlQoIkxFRlRfUklHSFRfQ09OU1RSQUlOVF9MT0NLSU5HIiwzKSxSOXQ9bmV3IFpUKCJMRUZUX1JJR0hUX0NPTk5FQ1RJT05fTE9DS0lORyIsNCksRjl0PW5ldyBaVChsMWUsNSl9ZnVuY3Rpb24gU2FlKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsaztkPW4uYS8yLG89bi5iLzIscj1iLk1hdGguYWJzKGUuYS10LmEpLHM9Yi5NYXRoLmFicyhlLmItdC5iKSx3PTEsaz0xLHI+ZCYmKHc9ZC9yKSxzPm8mJihrPW8vcyksaD1iLk1hdGgubWluKHcsayksdC5hKz1oKihlLmEtdC5hKSx0LmIrPWgqKGUuYi10LmIpfWZ1bmN0aW9uIEUwbih0LGUsbixyLHMpe3ZhciBvLGg7Zm9yKGg9ITEsbz11KFBlKG4uYiwwKSwzMyk7Um1uKHQsZSxvLHIscykmJihoPSEwLG5kbihuLG8pLG4uYi5jLmxlbmd0aCE9MCk7KW89dShQZShuLmIsMCksMzMpO3JldHVybiBuLmIuYy5sZW5ndGg9PTAmJnRJKG4uaixuKSxoJiZHeihlLnEpLGh9ZnVuY3Rpb24gVDBuKHQsZSl7eDQoKTt2YXIgbixyLHMsbztpZihlLmI8MilyZXR1cm4hMTtmb3Iobz1zaShlLDApLG49dShpaShvKSw4KSxyPW47by5iIT1vLmQuYzspe2lmKHM9dShpaShvKSw4KSxKc3QodCxyLHMpKXJldHVybiEwO3I9c31yZXR1cm4hIUpzdCh0LHIsbil9ZnVuY3Rpb24gTTR0KHQsZSxuLHIpe3ZhciBzLG87cmV0dXJuIG49PTA/KCF0Lm8mJih0Lm89bmV3IElsKChudSgpLF9iKSwkdyx0LDApKSxraih0Lm8sZSxyKSk6KG89dSh3bigocz11KE1uKHQsMTYpLDI2KSxzfHx0LnpoKCkpLG4pLDY2KSxvLk5qKCkuUmoodCx1dSh0KSxuLUpuKHQuemgoKSksZSxyKSl9ZnVuY3Rpb24gTnN0KHQsZSl7dmFyIG47ZSE9dC5zYj8obj1udWxsLHQuc2ImJihuPXUodC5zYiw0OSkuaWgodCwxLG5BLG4pKSxlJiYobj11KGUsNDkpLmdoKHQsMSxuQSxuKSksbj1WeXQodCxlLG4pLG4mJm4uRmkoKSk6dC5EYiY0JiYhKHQuRGImMSkmJkNpKHQsbmV3IG9hKHQsMSw0LGUsZSkpfWZ1bmN0aW9uIF8wbih0LGUpe3ZhciBuLHIscyxvO2lmKGUpcz1SMChlLCJ4Iiksbj1uZXcgSiR0KHQpLE44KG4uYSwoSW4ocykscykpLG89UjAoZSwieSIpLHI9bmV3IHR6dCh0KSxGOChyLmEsKEluKG8pLG8pKTtlbHNlIHRocm93IG50KG5ldyBvZCgiQWxsIGVkZ2Ugc2VjdGlvbnMgbmVlZCBhbiBlbmQgcG9pbnQuIikpfWZ1bmN0aW9uIEMwbih0LGUpe3ZhciBuLHIscyxvO2lmKGUpcz1SMChlLCJ4Iiksbj1uZXcgWCR0KHQpLFA4KG4uYSwoSW4ocykscykpLG89UjAoZSwieSIpLHI9bmV3IFEkdCh0KSxCOChyLmEsKEluKG8pLG8pKTtlbHNlIHRocm93IG50KG5ldyBvZCgiQWxsIGVkZ2Ugc2VjdGlvbnMgbmVlZCBhIHN0YXJ0IHBvaW50LiIpKX1mdW5jdGlvbiBTMG4odCxlKXt2YXIgbixyLHMsbyxoLGQsdztmb3Iocj11cmUodCksbz0wLGQ9ci5sZW5ndGg7bzxkOysrbyliYWUoZSk7Zm9yKHc9IXoxJiZ0LmU/ejE/bnVsbDp0LmQ6bnVsbDt3Oyl7Zm9yKG49dXJlKHcpLHM9MCxoPW4ubGVuZ3RoO3M8aDsrK3MpYmFlKGUpO3c9IXoxJiZ3LmU/ejE/bnVsbDp3LmQ6bnVsbH19ZnVuY3Rpb24gR24oKXtHbj1YLHFzPW5ldyBLVCgiTk9STUFMIiwwKSxjYT1uZXcgS1QoIkxPTkdfRURHRSIsMSksSXM9bmV3IEtUKCJFWFRFUk5BTF9QT1JUIiwyKSxVYz1uZXcgS1QoIk5PUlRIX1NPVVRIX1BPUlQiLDMpLFBsPW5ldyBLVCgiTEFCRUwiLDQpLHExPW5ldyBLVCgiQlJFQUtJTkdfUE9JTlQiLDUpfWZ1bmN0aW9uIEEwbih0KXt2YXIgZSxuLHIscztpZihlPSExLGVhKHQsKGFlKCksbVMpKSlmb3Iobj11KEsodCxtUyksODMpLHM9bmV3IFModC5qKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoUShzKSwxMSksRGJuKHIpJiYoZXx8KFVnbigkYSh0KSksZT0hMCksSWhuKHUobi54YyhyKSwzMDYpKSl9ZnVuY3Rpb24gTDBuKHQsZSxuKXt2YXIgcjttcihuLCJTZWxmLUxvb3Agcm91dGluZyIsMSkscj1ubG4oZSksbmooSyhlLChMJCgpLFZTKSkpLHlzKHh1KFdpKFdpKGVjKG5ldyBrbihudWxsLG5ldyBUbihlLmIsMTYpKSxuZXcgeWspLG5ldyBVNSksbmV3IEI5KSxuZXcgaVgpLG5ldyBQVnQodCxyKSksb3Iobil9ZnVuY3Rpb24gTTBuKHQpe3ZhciBlLG4scixzLG8saCxkLHcsaztyZXR1cm4gaz14NHQodCksbj10LmUsbz1uIT1udWxsLG8mJmQ4KGssbUgsdC5lKSxkPXQuayxoPSEhZCxoJiZkOChrLCJ0eXBlIixvbnQodC5rKSkscj1mTSh0LmopLHM9IXIscyYmKHc9bmV3IHlnLFFmKGssV2N0LHcpLGU9bmV3IHl6dCh3KSxfYSh0LmosZSkpLGt9ZnVuY3Rpb24gRDBuKHQpe3ZhciBlLG4scixzO2ZvcihzPSRwKChxbCh0LmdjKCksInNpemUiKSxuZXcgTG0pLDEyMykscj0hMCxuPVB2KHQpLktjKCk7bi5PYigpOyllPXUobi5QYigpLDQyKSxyfHwocy5hKz1YYSkscj0hMSx3YygkcCh3YyhzLGUuY2QoKSksNjEpLGUuZGQoKSk7cmV0dXJuKHMuYSs9In0iLHMpLmF9ZnVuY3Rpb24gQWFlKHQsZSl7dmFyIG4scixzO3JldHVybiBlJj02MyxlPDIyPyhuPXQubDw8ZSxyPXQubTw8ZXx0Lmw+PjIyLWUscz10Lmg8PGV8dC5tPj4yMi1lKTplPDQ0PyhuPTAscj10Lmw8PGUtMjIscz10Lm08PGUtMjJ8dC5sPj40NC1lKToobj0wLHI9MCxzPXQubDw8ZS00NCksY3UobiZ2bCxyJnZsLHMmVzApfWZ1bmN0aW9uIGx5KHQpe2lmKFo4dD09bnVsbCYmKFo4dD1uZXcgUmVnRXhwKCJeXFxzKlsrLV0/KE5hTnxJbmZpbml0eXwoKFxcZCtcXC4/XFxkKil8KFxcLlxcZCspKShbZUVdWystXT9cXGQrKT9bZERmRl0/KVxccyokIikpLCFaOHQudGVzdCh0KSl0aHJvdyBudChuZXcgY2QodncrdCsnIicpKTtyZXR1cm4gcGFyc2VGbG9hdCh0KX1mdW5jdGlvbiBJMG4odCl7dmFyIGUsbixyLHM7Zm9yKGU9bmV3IGxlLG49TnQoeGwsaTAsMjUsdC5hLmMubGVuZ3RoLDE2LDEpLHJ3dChuLG4ubGVuZ3RoKSxzPW5ldyBTKHQuYSk7cy5hPHMuYy5jLmxlbmd0aDspcj11KFEocyksMTIxKSxuW3IuZF18fChlLmNbZS5jLmxlbmd0aF09cixSaWUodCxyLG4pKTtyZXR1cm4gZX1mdW5jdGlvbiBPMG4odCxlKXt2YXIgbixyLHMsbztmb3Iobz1lLmIuaix0LmE9TnQoU3IsSnIsMjUsby5jLmxlbmd0aCwxNSwxKSxzPTAscj0wO3I8by5jLmxlbmd0aDtyKyspbj0oU24ocixvLmMubGVuZ3RoKSx1KG8uY1tyXSwxMSkpLG4uZS5jLmxlbmd0aD09MCYmbi5nLmMubGVuZ3RoPT0wP3MrPTE6cys9Myx0LmFbcl09c31mdW5jdGlvbiBucSgpe25xPVgsX2x0PW5ldyBYVCgiQUxXQVlTX1VQIiwwKSxUbHQ9bmV3IFhUKCJBTFdBWVNfRE9XTiIsMSksU2x0PW5ldyBYVCgiRElSRUNUSU9OX1VQIiwyKSxDbHQ9bmV3IFhUKCJESVJFQ1RJT05fRE9XTiIsMyksQWx0PW5ldyBYVCgiU01BUlRfVVAiLDQpLFBWPW5ldyBYVCgiU01BUlRfRE9XTiIsNSl9ZnVuY3Rpb24gTjBuKHQsZSl7aWYodDwwfHxlPDApdGhyb3cgbnQobmV3IFBuKCJrIGFuZCBuIG11c3QgYmUgcG9zaXRpdmUiKSk7aWYoZT50KXRocm93IG50KG5ldyBQbigiayBtdXN0IGJlIHNtYWxsZXIgdGhhbiBuIikpO3JldHVybiBlPT0wfHxlPT10PzE6dD09MD8wOmk0dCh0KS8oaTR0KGUpKmk0dCh0LWUpKX1mdW5jdGlvbiBENHQodCxlKXt2YXIgbixyLHMsbztmb3Iobj1uZXcgdDJ0KHQpO24uZz09bnVsbCYmIW4uYz9Pd3Qobik6bi5nPT1udWxsfHxuLmkhPTAmJnUobi5nW24uaS0xXSw0NykuT2IoKTspaWYobz11KGFxKG4pLDU2KSxfdChvLDE2MCkpZm9yKHI9dShvLDE2MCkscz0wO3M8ZS5sZW5ndGg7cysrKWVbc10ub2cocil9ZnVuY3Rpb24gUHN0KHQpe3ZhciBlO3JldHVybiB0LkRiJjY0P3ppdCh0KTooZT1uZXcgQWgoeml0KHQpKSxlLmErPSIgKGhlaWdodDogIixqMyhlLHQuZiksZS5hKz0iLCB3aWR0aDogIixqMyhlLHQuZyksZS5hKz0iLCB4OiAiLGozKGUsdC5pKSxlLmErPSIsIHk6ICIsajMoZSx0LmopLGUuYSs9IikiLGUuYSl9ZnVuY3Rpb24gUDBuKHQpe3ZhciBlLG4scixzLG8saCxkO2ZvcihlPW5ldyBpMixyPXQscz0wLG89ci5sZW5ndGg7czxvOysrcylpZihuPXJbc10saD1EcihuLmNkKCkpLGQ9djIoZSxoLERyKG4uZGQoKSkpLGQhPW51bGwpdGhyb3cgbnQobmV3IFBuKCJkdXBsaWNhdGUga2V5OiAiK2gpKTt0aGlzLmI9KHBuKCksbmV3IHooZSkpfWZ1bmN0aW9uIEYwbih0KXt2YXIgZSxuLHIscyxvO2lmKHQ9PW51bGwpcmV0dXJuIE11O2ZvcihvPW5ldyBsMihYYSwiWyIsIl0iKSxuPXQscj0wLHM9bi5sZW5ndGg7cjxzOysrcillPW5bcl0sUDAobyxTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKTtyZXR1cm4gby5hP28uZS5sZW5ndGg9PTA/by5hLmE6by5hLmErKCIiK28uZSk6by5jfWZ1bmN0aW9uIEk0dCgpe0k0dD1YLGFFdD0oeiQoKSxyViksenBlPW5ldyB2bihxcSxhRXQpLGRlKDEpLCRwZT1uZXcgdm4oc3h0LGRlKDMwMCkpLGRlKDApLFZwZT1uZXcgdm4oYXh0LGRlKDApKSxHcGU9bmV3IHZuKE9vdCx4ZCkscXBlPW5ldyB2bihOb3QsNSksVXBlPXJWLEhwZT1HdXR9ZnVuY3Rpb24gTGFlKHQsZSl7dmFyIG4scixzLG8saDtmb3Iocz1lPT0xP0p1dDpadXQscj1zLmEuZWMoKS5LYygpO3IuT2IoKTspZm9yKG49dShyLlBiKCksMTAzKSxoPXUoUGkodC5mLmMsbiksMjEpLktjKCk7aC5PYigpOylvPXUoaC5QYigpLDQ2KSx1ZSh0LmIuYix1KG8uYiw4MSkpLHVlKHQuYi5hLHUoby5iLDgxKS5kKX1mdW5jdGlvbiBCMG4odCxlKXt2YXIgbjtpZihlIT1udWxsJiYhdC5jLllqKCkud2ooZSkpdGhyb3cgbj1fdChlLDU2KT91KGUsNTYpLlRnKCkuemI6TXAoZGwoZSkpLG50KG5ldyBLayhjYit0LmMubmUoKSsiJ3MgdHlwZSAnIit0LmMuWWooKS5uZSgpKyInIGRvZXMgbm90IHBlcm1pdCBhIHZhbHVlIG9mIHR5cGUgJyIrbisiJyIpKX1mdW5jdGlvbiBSMG4odCxlLG4pe3ZhciByLHM7Zm9yKHM9bmV3IHhhKHQuYiwwKTtzLmI8cy5kLmdjKCk7KXI9KFpuKHMuYjxzLmQuZ2MoKSksdShzLmQuWGIocy5jPXMuYisrKSw3MCkpLEd0KEsociwoYWUoKSxaOXQpKSk9PT1HdChlKSYmKFI0dChyLm4sJGEodC5jLmkpLG4pLERsKHMpLHVlKGUuYixyKSl9ZnVuY3Rpb24gajBuKHQsZSl7aWYoZS5hKXN3aXRjaCh1KEsoZS5iLChhZSgpLHRUdCkpLDk4KS5nKXtjYXNlIDA6Y2FzZSAxOmFkbihlKTtjYXNlIDI6eXMobmV3IGtuKG51bGwsbmV3IFRuKGUuZCwxNikpLG5ldyB1RiksJHBuKHQuYSxlKX1lbHNlIHlzKG5ldyBrbihudWxsLG5ldyBUbihlLmQsMTYpKSxuZXcgdUYpfWZ1bmN0aW9uIE1hZSh0KXt2YXIgZSxuO3JldHVybiBuPWIuTWF0aC5zcXJ0KCh0Lms9PW51bGwmJih0Lms9bnl0KHQsbmV3IHRRKSksWnQodC5rKS8odC5iKih0Lmc9PW51bGwmJih0Lmc9b25lKHQsbmV3IE5GKSksWnQodC5nKSkpKSksZT1NcihBdShiLk1hdGgucm91bmQobikpKSxlPWIuTWF0aC5taW4oZSx0LmYpLGV9ZnVuY3Rpb24gTmMoKXtWdSgpLFoydC5jYWxsKHRoaXMpLHRoaXMuaj0oYmUoKSxhYyksdGhpcy5hPW5ldyBEYSxuZXcgV3R0LHRoaXMuZj0ocWwoMixteSksbmV3IEpjKDIpKSx0aGlzLmU9KHFsKDQsbXkpLG5ldyBKYyg0KSksdGhpcy5nPShxbCg0LG15KSxuZXcgSmMoNCkpLHRoaXMuYj1uZXcgSFZ0KHRoaXMuZSx0aGlzLmcpfWZ1bmN0aW9uICQwbih0LGUpe3ZhciBuLHI7cmV0dXJuIShCZShGZShLKGUsKGFlKCksSDEpKSkpfHwocj1lLmMuaSx0PT0ocGgoKSx5UykmJnIuaz09KEduKCksUGwpKXx8KG49dShLKHIsKHhlKCksZHUpKSwxNjMpLG49PWdiKSl9ZnVuY3Rpb24gejBuKHQsZSl7dmFyIG4scjtyZXR1cm4hKEJlKEZlKEsoZSwoYWUoKSxIMSkpKSl8fChyPWUuZC5pLHQ9PShwaCgpLHhTKSYmci5rPT0oR24oKSxQbCkpfHwobj11KEsociwoeGUoKSxkdSkpLDE2Myksbj09RnkpKX1mdW5jdGlvbiBxMG4odCxlKXt2YXIgbixyLHMsbyxoLGQsdztmb3IoaD10LmQsdz10Lm8sZD1uZXcgY2goLWguYiwtaC5kLGguYit3LmEraC5jLGguZCt3LmIraC5hKSxyPWUscz0wLG89ci5sZW5ndGg7czxvOysrcyluPXJbc10sbiYmaEMoZCxuLmkpO2guYj0tZC5jLGguZD0tZC5kLGguYz1kLmItaC5iLXcuYSxoLmE9ZC5hLWguZC13LmJ9ZnVuY3Rpb24gaUkoKXtpST1YLFdDdD1uZXcgU00oIkNFTlRFUl9ESVNUQU5DRSIsMCksV2h0PW5ldyBTTSgiQ0lSQ0xFX1VOREVSTEFQIiwxKSxZQ3Q9bmV3IFNNKCJSRUNUQU5HTEVfVU5ERVJMQVAiLDIpLEtodD1uZXcgU00oIklOVkVSVEVEX09WRVJMQVAiLDMpLEtDdD1uZXcgU00oIk1JTklNVU1fUk9PVF9ESVNUQU5DRSIsNCl9ZnVuY3Rpb24gSDBuKHQpe0k1dCgpO3ZhciBlLG4scixzLG87aWYodD09bnVsbClyZXR1cm4gbnVsbDtmb3Iocj10Lmxlbmd0aCxzPXIqMixlPU50KEVoLHdkLDI1LHMsMTUsMSksbj0wO248cjtuKyspbz10W25dLG88MCYmKG8rPTI1NiksZVtuKjJdPXVVW28+PjRdLGVbbioyKzFdPXVVW28mMTVdO3JldHVybiBJaChlLDAsZS5sZW5ndGgpfWZ1bmN0aW9uIFYwbih0KXtRaigpO3ZhciBlLG4scjtzd2l0Y2gocj10LmMubGVuZ3RoLHIpe2Nhc2UgMDpyZXR1cm4gdWdlO2Nhc2UgMTpyZXR1cm4gZT11KGRvZShuZXcgUyh0KSksNDIpLGd0bihlLmNkKCksZS5kZCgpKTtkZWZhdWx0OnJldHVybiBuPXUoUDEodCxOdChJMixJcSw0Mix0LmMubGVuZ3RoLDAsMSkpLDE2NSksbmV3IHRldChuKX19ZnVuY3Rpb24gRzBuKHQpe3ZhciBlLG4scixzLG8saDtmb3IoZT1uZXcgRjMsbj1uZXcgRjMsVnAoZSx0KSxWcChuLHQpO24uYiE9bi5jOylmb3Iocz11KFA2KG4pLDM3KSxoPW5ldyBTKHMuYSk7aC5hPGguYy5jLmxlbmd0aDspbz11KFEoaCksMTApLG8uZSYmKHI9by5lLFZwKGUsciksVnAobixyKSk7cmV0dXJuIGV9ZnVuY3Rpb24gcWcodCxlKXtzd2l0Y2goZS5nKXtjYXNlIDE6cmV0dXJuIEk2KHQuaiwoVnUoKSxNRXQpKTtjYXNlIDI6cmV0dXJuIEk2KHQuaiwoVnUoKSxBRXQpKTtjYXNlIDM6cmV0dXJuIEk2KHQuaiwoVnUoKSxJRXQpKTtjYXNlIDQ6cmV0dXJuIEk2KHQuaiwoVnUoKSxPRXQpKTtkZWZhdWx0OnJldHVybiBwbigpLHBuKCksdW99fWZ1bmN0aW9uIFUwbih0LGUpe3ZhciBuLHIscztuPXV0bihlLHQuZSkscj11KHRyKHQuZy5mLG4pLDE5KS5hLHM9dC5hLmMubGVuZ3RoLTEsdC5hLmMubGVuZ3RoIT0wJiZ1KFBlKHQuYSxzKSwyODcpLmM9PXI/KCsrdShQZSh0LmEscyksMjg3KS5hLCsrdShQZSh0LmEscyksMjg3KS5iKTp1ZSh0LmEsbmV3IHVXdChyKSl9ZnVuY3Rpb24gVzBuKHQsZSxuKXt2YXIgcixzO3JldHVybiByPUp2bih0LGUsbiksciE9MD9yOmVhKGUsKGFlKCksTGMpKSYmZWEobixMYyk/KHM9bXUodShLKGUsTGMpLDE5KS5hLHUoSyhuLExjKSwxOSkuYSksczwwP3ZJKHQsZSxuKTpzPjAmJnZJKHQsbixlKSxzKTpTcG4odCxlLG4pfWZ1bmN0aW9uIERhZSh0LGUsbil7dmFyIHIscyxvLGg7aWYoZS5iIT0wKXtmb3Iocj1uZXcgY3MsaD1zaShlLDApO2guYiE9aC5kLmM7KW89dShpaShoKSw4NiksS2EocixkeXQobykpLHM9by5lLHMuYT11KEsobywobWMoKSxEaHQpKSwxOSkuYSxzLmI9dShLKG8sUV90KSwxOSkuYTtEYWUodCxyLHpjKG4sci5iL3QuYXwwKSl9fWZ1bmN0aW9uIElhZSh0LGUpe3ZhciBuLHIscyxvLGg7aWYodC5lPD1lfHxKcm4odCx0LmcsZSkpcmV0dXJuIHQuZztmb3Iobz10LnIscj10LmcsaD10LnIscz0oby1yKS8yK3I7cisxPG87KW49RUModCxzLCExKSxuLmI8PXMmJm4uYTw9ZT8oaD1zLG89cyk6cj1zLHM9KG8tcikvMityO3JldHVybiBofWZ1bmN0aW9uIEswbih0LGUsbil7dmFyIHI7cj1RY2UodCxlLCEwKSxtcihuLCJSZWN1cnNpdmUgR3JhcGggTGF5b3V0IixyKSxENHQoZSx1dChvdChwU3QsMSksTWUsNTI3LDAsW25ldyBZTF0pKSxzMihlLChkaSgpLEVFKSl8fEQ0dChlLHV0KG90KHBTdCwxKSxNZSw1MjcsMCxbbmV3IGtaXSkpLHg2dCh0LGUsbnVsbCxuKSxvcihuKX1mdW5jdGlvbiBvcih0KXt2YXIgZTtpZih0LnA9PW51bGwpdGhyb3cgbnQobmV3IEhvKCJUaGUgdGFzayBoYXMgbm90IGJlZ3VuIHlldC4iKSk7dC5ifHwodC5rJiYoZT0ocWQoKSxJYShBdShEYXRlLm5vdygpKSxWZykpLHQucT1HdihRcChlLHQubykpKjFlLTkpLHQuYzx0LnImJmFpdCh0LHQuci10LmMpLHQuYj0hMCl9ZnVuY3Rpb24gc0kodCl7dmFyIGUsbixyO2ZvcihyPW5ldyBqdSxhaShyLG5ldyBSZSh0LmosdC5rKSksbj1uZXcgbnIoKCF0LmEmJih0LmE9bmV3IEJzKFdoLHQsNSkpLHQuYSkpO24uZSE9bi5pLmdjKCk7KWU9dShkcihuKSw0NjkpLGFpKHIsbmV3IFJlKGUuYSxlLmIpKTtyZXR1cm4gYWkocixuZXcgUmUodC5iLHQuYykpLHJ9ZnVuY3Rpb24gWTBuKHQsZSxuLHIscyl7dmFyIG8saCxkLHcsayxfO2lmKHMpZm9yKHc9cy5hLmxlbmd0aCxvPW5ldyBKYih3KSxfPShvLmItby5hKSpvLmM8MD8oT3AoKSxNYik6bmV3IEJwKG8pO18uT2IoKTspaz11KF8uUGIoKSwxOSksZD1UOChzLGsuYSksaD1uZXcgQ1h0KHQsZSxuLHIpLHNtbihoLmEsaC5iLGguYyxoLmQsZCl9ZnVuY3Rpb24gTzR0KHQsZSl7dmFyIG47aWYoR3QodCk9PT1HdChlKSlyZXR1cm4hMDtpZihfdChlLDIxKSl7bj11KGUsMjEpO3RyeXtyZXR1cm4gdC5nYygpPT1uLmdjKCkmJnQuSWMobil9Y2F0Y2gocil7aWYocj1ycyhyKSxfdChyLDE3Myl8fF90KHIsMjA1KSlyZXR1cm4hMTt0aHJvdyBudChyKX19cmV0dXJuITF9ZnVuY3Rpb24gTjR0KHQsZSl7dmFyIG47dWUodC5kLGUpLG49ZS5yZigpLHQuYz8odC5lLmE9Yi5NYXRoLm1heCh0LmUuYSxuLmEpLHQuZS5iKz1uLmIsdC5kLmMubGVuZ3RoPjEmJih0LmUuYis9dC5hKSk6KHQuZS5hKz1uLmEsdC5lLmI9Yi5NYXRoLm1heCh0LmUuYixuLmIpLHQuZC5jLmxlbmd0aD4xJiYodC5lLmErPXQuYSkpfWZ1bmN0aW9uIFgwbih0KXt2YXIgZSxuLHIscztzd2l0Y2gocz10LmksZT1zLmIscj1zLmosbj1zLmcscy5hLmcpe2Nhc2UgMDpuLmE9KHQuZy5iLm8uYS1yLmEpLzI7YnJlYWs7Y2FzZSAxOm4uYT1lLmQubi5hK2UuZC5hLmE7YnJlYWs7Y2FzZSAyOm4uYT1lLmQubi5hK2UuZC5hLmEtci5hO2JyZWFrO2Nhc2UgMzpuLmI9ZS5kLm4uYitlLmQuYS5ifX1mdW5jdGlvbiBPYWUodCxlLG4scixzKXtpZihyPGV8fHM8bil0aHJvdyBudChuZXcgUG4oIlRoZSBoaWdoeCBtdXN0IGJlIGJpZ2dlciB0aGVuIGxvd3ggYW5kIHRoZSBoaWdoeSBtdXN0IGJlIGJpZ2dlciB0aGVuIGxvd3kiKSk7cmV0dXJuIHQuYTxlP3QuYT1lOnQuYT5yJiYodC5hPXIpLHQuYjxuP3QuYj1uOnQuYj5zJiYodC5iPXMpLHR9ZnVuY3Rpb24gUTBuKHQpe2lmKF90KHQsMTQ5KSlyZXR1cm4gQzJuKHUodCwxNDkpKTtpZihfdCh0LDIyOSkpcmV0dXJuIEVsbih1KHQsMjI5KSk7aWYoX3QodCwyMykpcmV0dXJuIE0wbih1KHQsMjMpKTt0aHJvdyBudChuZXcgUG4obTh0K0pwKG5ldyBDbCh1dChvdChRbiwxKSxNZSwxLDUsW3RdKSkpKSl9ZnVuY3Rpb24gWjBuKHQsZSxuLHIscyl7dmFyIG8saCxkO2ZvcihvPSEwLGg9MDtoPHI7aCsrKW89byZuW2hdPT0wO2lmKHM9PTApUGMobixyLHQsMCxlKSxoPWU7ZWxzZXtmb3IoZD0zMi1zLG89byZuW2hdPDxkPT0wLGg9MDtoPGUtMTtoKyspdFtoXT1uW2grcl0+Pj5zfG5baCtyKzFdPDxkO3RbaF09bltoK3JdPj4+cywrK2h9cmV0dXJuIG99ZnVuY3Rpb24gUDR0KHQsZSxuLHIpe3ZhciBzLG8saDtpZihlLms9PShHbigpLGNhKSl7Zm9yKG89bmV3IGFyKGxyKFVvKGUpLmEuS2MoKSxuZXcgSCkpO1ZyKG8pOylpZihzPXUoSXIobyksMTcpLGg9cy5jLmkuayxoPT1jYSYmdC5jLmFbcy5jLmkuYy5wXT09ciYmdC5jLmFbZS5jLnBdPT1uKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIEowbih0LGUpe3ZhciBuLHIscyxvO3JldHVybiBlJj02MyxuPXQuaCZXMCxlPDIyPyhvPW4+Pj5lLHM9dC5tPj5lfG48PDIyLWUscj10Lmw+PmV8dC5tPDwyMi1lKTplPDQ0PyhvPTAscz1uPj4+ZS0yMixyPXQubT4+ZS0yMnx0Lmg8PDQ0LWUpOihvPTAscz0wLHI9bj4+PmUtNDQpLGN1KHImdmwscyZ2bCxvJlcwKX1mdW5jdGlvbiBOYWUodCxlLG4scil7dmFyIHM7dGhpcy5iPXIsdGhpcy5lPXQ9PShadigpLElTKSxzPWVbbl0sdGhpcy5kPVpiKHhsLFtyZSxpMF0sWzE3NywyNV0sMTYsW3MubGVuZ3RoLHMubGVuZ3RoXSwyKSx0aGlzLmE9WmIoU3IsW3JlLEpyXSxbNDgsMjVdLDE1LFtzLmxlbmd0aCxzLmxlbmd0aF0sMiksdGhpcy5jPW5ldyB2NHQoZSxuKX1mdW5jdGlvbiB0Z24odCl7dmFyIGUsbixyO2Zvcih0Lms9bmV3IEJ3dCgoYmUoKSx1dChvdChaYSwxKSxDYyw2MSwwLFthYyxPbixIbix5cixCbl0pKS5sZW5ndGgsdC5qLmMubGVuZ3RoKSxyPW5ldyBTKHQuaik7ci5hPHIuYy5jLmxlbmd0aDspbj11KFEociksMTEzKSxlPW4uZC5qLGNuKHQuayxlLG4pO3QuZT1mMm4oTjYodC5rKSl9ZnVuY3Rpb24gUGFlKHQsZSl7dmFyIG4scixzO1ZzKHQuZCxlKSxuPW5ldyBHOSxBaSh0LmMsZSxuKSxuLmY9Tml0KGUuYyksbi5hPU5pdChlLmQpLG4uZD0oYkMoKSxzPWUuYy5pLmsscz09KEduKCkscXMpfHxzPT1xMSksbi5lPShyPWUuZC5pLmsscj09cXN8fHI9PXExKSxuLmI9ZS5jLmo9PShiZSgpLEJuKSxuLmM9ZS5kLmo9PUhufWZ1bmN0aW9uIGVnbih0KXt2YXIgZSxuLHIscyxvO2ZvcihvPVRpLHM9VGkscj1uZXcgUyhjNCh0KSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KFEociksMjEzKSxlPW4uZS5lLW4uZC5lLG4uZT09dCYmZTxzP3M9ZTplPG8mJihvPWUpO3JldHVybiBzPT1UaSYmKHM9LTEpLG89PVRpJiYobz0tMSksbmV3IHlhKGRlKHMpLGRlKG8pKX1mdW5jdGlvbiBuZ24odCxlKXt2YXIgbixyLHM7cmV0dXJuIHM9Tjcscj0oc0MoKSxoTykscz1iLk1hdGguYWJzKHQuYiksbj1iLk1hdGguYWJzKGUuZi10LmIpLG48cyYmKHM9bixyPXRWKSxuPWIuTWF0aC5hYnModC5hKSxuPHMmJihzPW4scj1mTyksbj1iLk1hdGguYWJzKGUuZy10LmEpLG48cyYmKHM9bixyPUpIKSxyfWZ1bmN0aW9uIHJnbih0LGUpe3ZhciBuLHIscyxvO2ZvcihuPWUuYS5vLmEsbz1uZXcgS2QoJGEoZS5hKS5iLGUuYyxlLmYrMSkscz1uZXcgaDYobyk7cy5iPHMuZC5nYygpOylpZihyPShabihzLmI8cy5kLmdjKCkpLHUocy5kLlhiKHMuYz1zLmIrKyksMjkpKSxyLmMuYT49bilyZXR1cm4gZDcodCxlLHIucCksITA7cmV0dXJuITF9ZnVuY3Rpb24gRmFlKHQpe3ZhciBlO3JldHVybiB0LkRiJjY0P1BzdCh0KTooZT1uZXcgRmwoYzh0KSwhdC5hfHxZcihZcigoZS5hKz0nICInLGUpLHQuYSksJyInKSxZcihfdihZcihfdihZcihfdihZcihfdigoZS5hKz0iICgiLGUpLHQuaSksIiwiKSx0LmopLCIgfCAiKSx0LmcpLCIsIiksdC5mKSwiKSIpLGUuYSl9ZnVuY3Rpb24gQmFlKHQsZSxuKXt2YXIgcixzLG8saCxkO2ZvcihkPWh1KHQuZS5UZygpLGUpLHM9dSh0LmcsMTE5KSxyPTAsaD0wO2g8dC5pOysraClpZihvPXNbaF0sZC5ybChvLmFrKCkpKXtpZihyPT1uKXJldHVybiBkeSh0LGgpLHNvKCksdShlLDY2KS5PaigpP286by5kZCgpOysrcn10aHJvdyBudChuZXcgQ28oWEMrbitMMityKSl9ZnVuY3Rpb24gUmFlKHQpe3ZhciBlLG4scjtpZihlPXQuYyxlPT0yfHxlPT03fHxlPT0xKXJldHVybiB5aSgpLHlpKCksZkE7Zm9yKHI9azZ0KHQpLG49bnVsbDsoZT10LmMpIT0yJiZlIT03JiZlIT0xOylufHwobj0oeWkoKSx5aSgpLG5ldyBsXygxKSkseDIobixyKSxyPW4pLHgyKG4sazZ0KHQpKTtyZXR1cm4gcn1mdW5jdGlvbiBpZ24odCxlLG4pe3JldHVybiB0PDB8fHQ+bj9INHQodCxuLCJzdGFydCBpbmRleCIpOmU8MHx8ZT5uP0g0dChlLG4sImVuZCBpbmRleCIpOnZDKCJlbmQgaW5kZXggKCVzKSBtdXN0IG5vdCBiZSBsZXNzIHRoYW4gc3RhcnQgaW5kZXggKCVzKSIsdXQob3QoUW4sMSksTWUsMSw1LFtkZShlKSxkZSh0KV0pKX1mdW5jdGlvbiBqYWUodCxlKXt2YXIgbixyLHMsbztmb3Iocj0wLHM9dC5sZW5ndGg7cjxzO3IrKyl7bz10W3JdO3RyeXtvWzFdP29bMF0uam0oKSYmKGU9cXRuKGUsbykpOm9bMF0uam0oKX1jYXRjaChoKXtpZihoPXJzKGgpLF90KGgsNzgpKW49aCx2UigpLE9ubihfdChuLDQ3Nyk/dShuLDQ3NykuYWUoKTpuKTtlbHNlIHRocm93IG50KGgpfX1yZXR1cm4gZX1mdW5jdGlvbiBkNyh0LGUsbil7dmFyIHIscyxvO2ZvcihuIT1lLmMrZS5iLmdjKCkmJnB5bihlLmEsWm9uKGUsbi1lLmMpKSxvPWUuYS5jLnAsdC5hW29dPWIuTWF0aC5tYXgodC5hW29dLGUuYS5vLmEpLHM9dShLKGUuYSwoYWUoKSxUTykpLDE1KS5LYygpO3MuT2IoKTspcj11KHMuUGIoKSw3MCksZWUocixvbHQsKEZuKCksITApKX1mdW5jdGlvbiBzZ24odCxlKXt2YXIgbixyLHM7cz1OMm4oZSksZWUoZSwoYWUoKSxSbHQpLHMpLHMmJihyPVRpLEZvKHQuZixzKSYmKHI9dShjYyhGbyh0LmYscykpLDE5KS5hKSxuPXUoUGUoZS5nLDApLDE3KSxCZShGZShLKG4sSDEpKSl8fEFpKHQscyxkZShiLk1hdGgubWluKHUoSyhuLExjKSwxOSkuYSxyKSkpKX1mdW5jdGlvbiAkYWUodCxlLG4pe3ZhciByLHMsbyxoLGQ7Zm9yKGUucD0tMSxkPWl3KGUsKGhvKCksc3UpKS5LYygpO2QuT2IoKTspZm9yKGg9dShkLlBiKCksMTEpLHM9bmV3IFMoaC5nKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoUShzKSwxNyksbz1yLmQuaSxlIT1vJiYoby5wPDA/bi5GYyhyKTpvLnA+MCYmJGFlKHQsbyxuKSk7ZS5wPTB9ZnVuY3Rpb24gWGUodCl7dmFyIGU7dGhpcy5jPW5ldyBjcyx0aGlzLmY9dC5lLHRoaXMuZT10LmQsdGhpcy5pPXQuZyx0aGlzLmQ9dC5jLHRoaXMuYj10LmIsdGhpcy5rPXQuaix0aGlzLmE9dC5hLHQuaT90aGlzLmo9dC5pOnRoaXMuaj0oZT11KFdmKGVwKSw5KSxuZXcgb2goZSx1KGZmKGUsZS5sZW5ndGgpLDkpLDApKSx0aGlzLmc9dC5mfWZ1bmN0aW9uIGFnbih0KXt2YXIgZSxuLHIscztmb3IoZT0kcChZcihuZXcgRmwoIlByZWRpY2F0ZXMuIiksImFuZCIpLDQwKSxuPSEwLHM9bmV3IGg2KHQpO3MuYjxzLmQuZ2MoKTspcj0oWm4ocy5iPHMuZC5nYygpKSxzLmQuWGIocy5jPXMuYisrKSksbnx8KGUuYSs9IiwiKSxlLmErPSIiK3Isbj0hMTtyZXR1cm4oZS5hKz0iKSIsZSkuYX1mdW5jdGlvbiB6YWUodCxlLG4pe3ZhciByLHMsbztpZighKG48PWUrMikpZm9yKHM9KG4tZSkvMnwwLHI9MDtyPHM7KytyKW89KFNuKGUrcix0LmMubGVuZ3RoKSx1KHQuY1tlK3JdLDExKSksbGgodCxlK3IsKFNuKG4tci0xLHQuYy5sZW5ndGgpLHUodC5jW24tci0xXSwxMSkpKSxTbihuLXItMSx0LmMubGVuZ3RoKSx0LmNbbi1yLTFdPW99ZnVuY3Rpb24gb2duKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxfO289dC5kLnAsZD1vLmUsdz1vLnIsdC5nPW5ldyBITSh3KSxoPXQuZC5vLmMucCxyPWg+MD9kW2gtMV06TnQobzAsR2csMTAsMCwwLDEpLHM9ZFtoXSxrPWg8ZC5sZW5ndGgtMT9kW2grMV06TnQobzAsR2csMTAsMCwwLDEpLF89ZT09bi0xLF8/YnJ0KHQuZyxzLGspOmJydCh0LmcscixzKX1mdW5jdGlvbiBxYWUodCl7dmFyIGU7dGhpcy5qPW5ldyBsZSx0aGlzLmY9bmV3IFFzLHRoaXMuYj0oZT11KFdmKFphKSw5KSxuZXcgb2goZSx1KGZmKGUsZS5sZW5ndGgpLDkpLDApKSx0aGlzLmQ9TnQoU3IsSnIsMjUsKGJlKCksdXQob3QoWmEsMSksQ2MsNjEsMCxbYWMsT24sSG4seXIsQm5dKSkubGVuZ3RoLDE1LDEpLHRoaXMuZz10fWZ1bmN0aW9uIEhhZSh0LGUpe3ZhciBuLHIscztpZihlLmMubGVuZ3RoIT0wKXtmb3Iobj13YWUodCxlKSxzPSExOyFuOylzcSh0LGUsITApLHM9ITAsbj13YWUodCxlKTtzJiZzcSh0LGUsITEpLHI9Yml0KGUpLHQuYiYmdC5iLmxnKHIpLHQuYT1DcmUodCwoU24oMCxlLmMubGVuZ3RoKSx1KGUuY1swXSwzMykpKSxIYWUodCxyKX19ZnVuY3Rpb24gRnN0KHQsZSl7dmFyIG4scixzO2lmKHI9d24odC5UZygpLGUpLG49ZS10LkFoKCksbjwwKWlmKHIpaWYoci5JaigpKXM9dC5ZZyhyKSxzPj0wP3QuQmgocyk6SzR0KHQscik7ZWxzZSB0aHJvdyBudChuZXcgUG4oY2Irci5uZSgpK1dDKSk7ZWxzZSB0aHJvdyBudChuZXcgUG4od2RlK2UrbWRlKSk7ZWxzZSBnaCh0LG4scil9ZnVuY3Rpb24gRjR0KHQpe3ZhciBlLG47aWYobj1udWxsLGU9ITEsX3QodCwyMDQpJiYoZT0hMCxuPXUodCwyMDQpLmEpLGV8fF90KHQsMjU4KSYmKGU9ITAsbj0iIit1KHQsMjU4KS5hKSxlfHxfdCh0LDQ4MykmJihlPSEwLG49IiIrdSh0LDQ4MykuYSksIWUpdGhyb3cgbnQobmV3IG5ldCh3OHQpKTtyZXR1cm4gbn1mdW5jdGlvbiBWYWUodCxlKXt2YXIgbixyO2lmKHQuZil7Zm9yKDtlLk9iKCk7KWlmKG49dShlLlBiKCksNzIpLHI9bi5haygpLF90KHIsOTkpJiZ1KHIsMTgpLkJiJnljJiYoIXQuZXx8ci5HaigpIT1MRXx8ci5haigpIT0wKSYmbi5kZCgpIT1udWxsKXJldHVybiBlLlViKCksITA7cmV0dXJuITF9ZWxzZSByZXR1cm4gZS5PYigpfWZ1bmN0aW9uIEdhZSh0LGUpe3ZhciBuLHI7aWYodC5mKXtmb3IoO2UuU2IoKTspaWYobj11KGUuVWIoKSw3Mikscj1uLmFrKCksX3Qociw5OSkmJnUociwxOCkuQmImeWMmJighdC5lfHxyLkdqKCkhPUxFfHxyLmFqKCkhPTApJiZuLmRkKCkhPW51bGwpcmV0dXJuIGUuUGIoKSwhMDtyZXR1cm4hMX1lbHNlIHJldHVybiBlLlNiKCl9ZnVuY3Rpb24gQjR0KHQsZSxuKXt2YXIgcixzLG8saCxkLHc7Zm9yKHc9aHUodC5lLlRnKCksZSkscj0wLGQ9dC5pLHM9dSh0LmcsMTE5KSxoPTA7aDx0Lmk7KytoKWlmKG89c1toXSx3LnJsKG8uYWsoKSkpe2lmKG49PXIpcmV0dXJuIGg7KytyLGQ9aCsxfWlmKG49PXIpcmV0dXJuIGQ7dGhyb3cgbnQobmV3IENvKFhDK24rTDIrcikpfWZ1bmN0aW9uIGNnbih0LGUpe3ZhciBuLHIscyxvO2lmKHQuZi5jLmxlbmd0aD09MClyZXR1cm4gbnVsbDtmb3Iobz1uZXcgUzYscj1uZXcgUyh0LmYpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShRKHIpLDcwKSxzPW4ubyxvLmI9Yi5NYXRoLm1heChvLmIscy5hKSxvLmErPXMuYjtyZXR1cm4gby5hKz0odC5mLmMubGVuZ3RoLTEpKmUsb31mdW5jdGlvbiB1Z24odCxlLG4pe3ZhciByLHMsbztmb3Iocz1uZXcgYXIobHIoejAobikuYS5LYygpLG5ldyBIKSk7VnIocyk7KXI9dShJcihzKSwxNyksIVdhKHIpJiYhKCFXYShyKSYmci5jLmkuYz09ci5kLmkuYykmJihvPVRjZSh0LHIsbixuZXcgYXF0KSxvLmMubGVuZ3RoPjEmJihlLmNbZS5jLmxlbmd0aF09bykpfWZ1bmN0aW9uIGxnbih0KXt2YXIgZSxuLHIscztmb3Iobj1uZXcgY3MsS2Eobix0Lm8pLHI9bmV3IElwdDtuLmIhPTA7KWU9dShuLmI9PTA/bnVsbDooWm4obi5iIT0wKSxmaChuLG4uYS5hKSksNTA4KSxzPVRoZSh0LGUsITApLHMmJnVlKHIuYSxlKTtmb3IoO3IuYS5jLmxlbmd0aCE9MDspZT11KHZyZShyKSw1MDgpLFRoZSh0LGUsITEpfWZ1bmN0aW9uIEhnKCl7SGc9WCxiU3Q9bmV3IF82KE9DLDApLFBhPW5ldyBfNigiQk9PTEVBTiIsMSkseGM9bmV3IF82KCJJTlQiLDIpLGtFPW5ldyBfNigiU1RSSU5HIiwzKSwkbz1uZXcgXzYoIkRPVUJMRSIsNCksbXM9bmV3IF82KCJFTlVNIiw1KSxSeD1uZXcgXzYoIkVOVU1TRVQiLDYpLEcxPW5ldyBfNigiT0JKRUNUIiw3KX1mdW5jdGlvbiBoQyh0LGUpe3ZhciBuLHIscyxvLGg7cj1iLk1hdGgubWluKHQuYyxlLmMpLG89Yi5NYXRoLm1pbih0LmQsZS5kKSxzPWIuTWF0aC5tYXgodC5jK3QuYixlLmMrZS5iKSxoPWIuTWF0aC5tYXgodC5kK3QuYSxlLmQrZS5hKSxzPHImJihuPXIscj1zLHM9biksaDxvJiYobj1vLG89aCxoPW4pLEZLdCh0LHIsbyxzLXIsaC1vKX1mdW5jdGlvbiBHdSgpe0d1PVgsdUx0PXV0KG90KExlLDEpLHJlLDIsNixbTzh0LEpJLERILFAwZSxJSCxpdXQsbUhdKSxjTHQ9dXQob3QoTGUsMSkscmUsMiw2LFtPOHQsImVtcHR5IixKSSxaSSwiZWxlbWVudE9ubHkiXSksbEx0PXV0KG90KExlLDEpLHJlLDIsNixbTzh0LCJwcmVzZXJ2ZSIsInJlcGxhY2UiLGkxXSksU2E9bmV3IE5LdH1mdW5jdGlvbiBSNHQodCxlLG4pe3ZhciByLHMsbztpZihlIT1uKXtyPWU7ZG8gRmkodCxyLmMpLHM9ci5lLHMmJihvPXIuZCxGbSh0LG8uYixvLmQpLEZpKHQscy5uKSxyPSRhKHMpKTt3aGlsZShzKTtyPW47ZG8gZmEodCxyLmMpLHM9ci5lLHMmJihvPXIuZCxCTSh0LG8uYixvLmQpLGZhKHQscy5uKSxyPSRhKHMpKTt3aGlsZShzKX19ZnVuY3Rpb24gQnN0KHQsZSxuLHIpe3ZhciBzLG8saCxkLHc7aWYoci5mLmMrci5nLmM9PTApZm9yKGg9dC5hW3QuY10sZD0wLHc9aC5sZW5ndGg7ZDx3OysrZClvPWhbZF0sQWkocixvLG5ldyBmbmUodCxvLG4pKTtyZXR1cm4gcz11KGNjKEZvKHIuZixlKSksNjYzKSxzLmI9MCxzLmM9cy5mLHMuYz09MHx8SkIodShQZShzLmEscy5iKSwyODcpKSxzfWZ1bmN0aW9uIHJ4KCl7cng9WCxzRT1uZXcgWVQoIk1FRElBTl9MQVlFUiIsMCksZFM9bmV3IFlUKCJUQUlMX0xBWUVSIiwxKSxpRT1uZXcgWVQoIkhFQURfTEFZRVIiLDIpLE95PW5ldyBZVCgiU1BBQ0VfRUZGSUNJRU5UX0xBWUVSIiwzKSxWND1uZXcgWVQoIldJREVTVF9MQVlFUiIsNCksSDQ9bmV3IFlUKCJDRU5URVJfTEFZRVIiLDUpfWZ1bmN0aW9uIGhnbih0KXtzd2l0Y2godC5nKXtjYXNlIDA6Y2FzZSAxOmNhc2UgMjpyZXR1cm4gYmUoKSxPbjtjYXNlIDM6Y2FzZSA0OmNhc2UgNTpyZXR1cm4gYmUoKSx5cjtjYXNlIDY6Y2FzZSA3OmNhc2UgODpyZXR1cm4gYmUoKSxCbjtjYXNlIDk6Y2FzZSAxMDpjYXNlIDExOnJldHVybiBiZSgpLEhuO2RlZmF1bHQ6cmV0dXJuIGJlKCksYWN9fWZ1bmN0aW9uIGZnbih0LGUpe3ZhciBuO3JldHVybiB0LmMubGVuZ3RoPT0wPyExOihuPXVpZSgoU24oMCx0LmMubGVuZ3RoKSx1KHQuY1swXSwxNykpLmMuaSksUmwoKSxuPT0oc3koKSxlNSl8fG49PXQ1PyEwOkM4KHh1KG5ldyBrbihudWxsLG5ldyBUbih0LDE2KSksbmV3IGZRKSxuZXcgeCR0KGUpKSl9ZnVuY3Rpb24gajR0KHQsZSxuKXt2YXIgcixzLG87aWYoIXQuYltlLmddKXtmb3IodC5iW2UuZ109ITAscj1uLCFyJiYocj1uZXcgQSQpLGFpKHIuYixlKSxvPXQuYVtlLmddLktjKCk7by5PYigpOylzPXUoby5QYigpLDE4OCkscy5iIT1lJiZqNHQodCxzLmIscikscy5jIT1lJiZqNHQodCxzLmMsciksYWkoci5hLHMpO3JldHVybiByfXJldHVybiBudWxsfWZ1bmN0aW9uIGZDKCl7ZkM9WCx3Rz1uZXcgdF8oIlJPT1RfUFJPQyIsMCksVGh0PW5ldyB0XygiRkFOX1BST0MiLDEpLENodD1uZXcgdF8oIk5FSUdIQk9SU19QUk9DIiwyKSxfaHQ9bmV3IHRfKCJMRVZFTF9IRUlHSFQiLDMpLFNodD1uZXcgdF8oIk5PREVfUE9TSVRJT05fUFJPQyIsNCksRWh0PW5ldyB0XygiREVUUkVFSUZZSU5HX1BST0MiLDUpfWZ1bmN0aW9uIFJzdCh0LGUpe2lmKF90KGUsMjM5KSlyZXR1cm4gc1hlKHQsdShlLDMzKSk7aWYoX3QoZSwxODYpKXJldHVybiBhWGUodCx1KGUsMTE4KSk7aWYoX3QoZSw0MzkpKXJldHVybiBpWGUodCx1KGUsMjAyKSk7dGhyb3cgbnQobmV3IFBuKG04dCtKcChuZXcgQ2wodXQob3QoUW4sMSksTWUsMSw1LFtlXSkpKSkpfWZ1bmN0aW9uIFVhZSh0LGUsbil7dmFyIHIscztpZih0aGlzLmY9dCxyPXUodHIodC5iLGUpLDI4Mykscz1yP3IuYTowLGRtdChuLHMpLG4+PShzLzJ8MCkpZm9yKHRoaXMuZT1yP3IuYzpudWxsLHRoaXMuZD1zO24rKzxzOyl3UXQodGhpcyk7ZWxzZSBmb3IodGhpcy5jPXI/ci5iOm51bGw7bi0tID4wOylOd3QodGhpcyk7dGhpcy5iPWUsdGhpcy5hPW51bGx9ZnVuY3Rpb24gZGduKHQsZSl7dmFyIG4scjtlLmE/RjJuKHQsZSk6KG49dShibnQodC5iLGUuYiksNTcpLG4mJm49PXQuYVtlLmIuZl0mJm4uYSYmbi5hIT1lLmIuYSYmbi5jLkZjKGUuYikscj11KHBudCh0LmIsZS5iKSw1NyksciYmdC5hW3IuZl09PWUuYiYmci5hJiZyLmEhPWUuYi5hJiZlLmIuYy5GYyhyKSxybnQodC5iLGUuYikpfWZ1bmN0aW9uIFdhZSh0LGUpe3ZhciBuLHI7aWYobj11KHhvKHQuYixlKSwxMjQpLHUodShQaSh0LnIsZSksMjEpLDg0KS5kYygpKXtuLm4uYj0wLG4ubi5jPTA7cmV0dXJufW4ubi5iPXQuQy5iLG4ubi5jPXQuQy5jLHQuQS5IYygoTmwoKSxXMikpJiZ2dWUodCxlKSxyPUhobih0LGUpLGVhdCh0LGUpPT0odTQoKSx4YikmJihyKz0yKnQudyksbi5hLmE9cn1mdW5jdGlvbiBLYWUodCxlKXt2YXIgbixyO2lmKG49dSh4byh0LmIsZSksMTI0KSx1KHUoUGkodC5yLGUpLDIxKSw4NCkuZGMoKSl7bi5uLmQ9MCxuLm4uYT0wO3JldHVybn1uLm4uZD10LkMuZCxuLm4uYT10LkMuYSx0LkEuSGMoKE5sKCksVzIpKSYmd3VlKHQsZSkscj1WaG4odCxlKSxlYXQodCxlKT09KHU0KCkseGIpJiYocis9Mip0LncpLG4uYS5iPXJ9ZnVuY3Rpb24gZ2duKHQsZSl7dmFyIG4scixzLG87Zm9yKG89bmV3IGxlLHI9bmV3IFMoZSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KFEociksNjUpLHVlKG8sbmV3IHhidChuLCEwKSksdWUobyxuZXcgeGJ0KG4sITEpKTtzPW5ldyB6WHQodCksT1Qocy5hLmEpLGFadChvLHQuYixuZXcgQ2wodXQob3QoamdlLDEpLE1lLDY3OSwwLFtzXSkpKX1mdW5jdGlvbiBZYWUodCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFo7cmV0dXJuIHc9dC5hLHE9dC5iLGs9ZS5hLEc9ZS5iLF89bi5hLFc9bi5iLE09ci5hLFo9ci5iLG89dypHLXEqayxoPV8qWi1XKk0scz0ody1rKSooVy1aKS0ocS1HKSooXy1NKSxkPShvKihfLU0pLWgqKHctaykpL3MsQj0obyooVy1aKS1oKihxLUcpKS9zLG5ldyBSZShkLEIpfWZ1bmN0aW9uICQ0dCh0LGUpe3ZhciBuLHIscztpZighdC5kW2UucF0pe2Zvcih0LmRbZS5wXT0hMCx0LmFbZS5wXT0hMCxyPW5ldyBhcihscigkcyhlKS5hLktjKCksbmV3IEgpKTtWcihyKTspbj11KElyKHIpLDE3KSwhV2EobikmJihzPW4uZC5pLHQuYVtzLnBdP3VlKHQuYixuKTokNHQodCxzKSk7dC5hW2UucF09ITF9fWZ1bmN0aW9uIFhhZSh0LGUsbil7dmFyIHI7c3dpdGNoKHI9MCx1KEsoZSwoeGUoKSxkdSkpLDE2MykuZyl7Y2FzZSAyOnI9Miotbit0LmEsKyt0LmE7YnJlYWs7Y2FzZSAxOnI9LW47YnJlYWs7Y2FzZSAzOnI9bjticmVhaztjYXNlIDQ6cj0yKm4rdC5iLCsrdC5ifXJldHVybiBlYShlLChhZSgpLExjKSkmJihyKz11KEsoZSxMYyksMTkpLmEpLHJ9ZnVuY3Rpb24gUWFlKHQsZSxuKXt2YXIgcixzLG87Zm9yKG4uemMoZSx0KSx1ZSh0Lm4sZSksbz10LnAuZWcoZSksZS5qPT10LnAuZmcoKT9KcmUodC5lLG8pOkpyZSh0LmosbyksS2oodCkscz1qcChJMSh1dChvdCgkMSwxKSxNZSwyMCwwLFtuZXcgc2EoZSksbmV3IENyKGUpXSkpKTtWcihzKTspcj11KElyKHMpLDExKSxuLl9iKHIpfHxRYWUodCxyLG4pfWZ1bmN0aW9uIHo0dCh0KXt2YXIgZSxuLHI7cmV0dXJuIG49dSh6ZSh0LChkaSgpLEgyKSksMjEpLG4uSGMoKE5sKCksWHkpKT8ocj11KHplKHQsbWIpLDIxKSxlPW5ldyBTbyh1KHplKHQsbzUpLDgpKSxyLkhjKChibCgpLEFFKSkmJihlLmE8PTAmJihlLmE9MjApLGUuYjw9MCYmKGUuYj0yMCkpLGUpOm5ldyBEYX1mdW5jdGlvbiBxNHQodCl7dmFyIGUsbixyO2lmKCF0LmIpe2ZvcihyPW5ldyBfayxuPW5ldyBMNihrQyh0KSk7bi5lIT1uLmkuZ2MoKTspZT11KGlzdChuKSwxOCksZS5CYiZ5YyYmT3IocixlKTtleShyKSx0LmI9bmV3IEgzKCh1KEF0KEt0KCh6cCgpLEFuKS5vKSw4KSwxOCksci5pKSxyLmcpLGhsKHQpLmImPS05fXJldHVybiB0LmJ9ZnVuY3Rpb24gcGduKHQsZSl7dmFyIG4scixzLG8saCxkLHcsazt3PXUoWEQoTjYoZS5rKSxOdChaYSxDYyw2MSwyLDAsMSkpLDEyMiksaz1lLmcsbj1UWnQoZSx3WzBdKSxzPUVadChlLHdbMV0pLHI9bXN0KHQsayxuLHMpLG89VFp0KGUsd1sxXSksZD1FWnQoZSx3WzBdKSxoPW1zdCh0LGssbyxkKSxyPD1oPyhlLmE9bixlLmM9cyk6KGUuYT1vLGUuYz1kKX1mdW5jdGlvbiBiZ24odCxlLG4pe3ZhciByLHMsbztmb3IobXIobiwiUHJvY2Vzc29yIHNldCBuZWlnaGJvcnMiLDEpLHQuYT1lLmIuYj09MD8xOmUuYi5iLHM9bnVsbCxyPXNpKGUuYiwwKTshcyYmci5iIT1yLmQuYzspbz11KGlpKHIpLDg2KSxCZShGZShLKG8sKG1jKCksV3kpKSkpJiYocz1vKTtzJiZydWUodCxuZXcgU3Aocyksbiksb3Iobil9ZnVuY3Rpb24gWmFlKHQpe0NhdCgpO3ZhciBlLG4scixzO3JldHVybiByPXVkKHQsTHUoMzUpKSxlPXI9PS0xP3Q6dC5zdWJzdHIoMCxyKSxuPXI9PS0xP251bGw6dC5zdWJzdHIocisxKSxzPXJzbihLQXQsZSkscz9uIT1udWxsJiYocz1ocmUocywoSW4obiksbikpKToocz1JNW4oZSksZnNuKEtBdCxlLHMpLG4hPW51bGwmJihzPWhyZShzLG4pKSksc31mdW5jdGlvbiBqc3QodCl7dmFyIGU7cG4oKTt2YXIgbixyLHMsbyxoLGQ7aWYoX3QodCw1NCkpZm9yKG89MCxzPXQuZ2MoKS0xO288czsrK28sLS1zKWU9dC5YYihvKSx0Ll9jKG8sdC5YYihzKSksdC5fYyhzLGUpO2Vsc2UgZm9yKG49dC5ZYygpLGg9dC5aYyh0LmdjKCkpO24uVGIoKTxoLlZiKCk7KXI9bi5QYigpLGQ9aC5VYigpLG4uV2IoZCksaC5XYihyKX1mdW5jdGlvbiB2Z24odCxlKXt2YXIgbixyLHM7bXIoZSwiRW5kIGxhYmVsIHByZS1wcm9jZXNzaW5nIiwxKSxuPVp0KHZlKEsodCwoeGUoKSxGeCkpKSkscj1adCh2ZShLKHQsVnkpKSkscz1hOCh1KEsodCxYbCksMTAzKSkseXMoZWMobmV3IGtuKG51bGwsbmV3IFRuKHQuYiwxNikpLG5ldyB5TCksbmV3IHBLdChuLHIscykpLG9yKGUpfWZ1bmN0aW9uICRzdCh0LGUpe3ZhciBuLHIscyxvLGgsZDtmb3IoZD0wLG89bmV3IEYzLFZwKG8sZSk7by5iIT1vLmM7KWZvcihoPXUoUDYobyksMjE0KSxkKz1Uc2UoaC5kLGguZSkscz1uZXcgUyhoLmIpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShRKHMpLDM3KSxuPXUoUGUodC5iLHIucCksMjE0KSxuLnN8fChkKz0kc3QodCxuKSk7cmV0dXJuIGR9ZnVuY3Rpb24gSmFlKHQsZSxuKXt2YXIgcixzO0RuZSh0aGlzKSxlPT0ocXYoKSx3Yik/VnModGhpcy5yLHQuYyk6VnModGhpcy53LHQuYyksbj09d2I/VnModGhpcy5yLHQuZCk6VnModGhpcy53LHQuZCksUGFlKHRoaXMsdCkscj1OaXQodC5jKSxzPU5pdCh0LmQpLF9hZSh0aGlzLHIscyxzKSx0aGlzLm89KGJDKCksYi5NYXRoLmFicyhyLXMpPC4yKX1mdW5jdGlvbiB0b2UodCxlLG4pe3ZhciByLHMsbyxoLGQsdztpZihkPXUoTW4odC5hLDgpLDE5MzYpLGQhPW51bGwpZm9yKHM9ZCxvPTAsaD1zLmxlbmd0aDtvPGg7KytvKW51bGwuam0oKTtyPW4sdC5hLkRiJjF8fCh3PW5ldyBlWHQodCxuLGUpLHIudWkodykpLF90KHIsNjcyKT91KHIsNjcyKS53aSh0LmEpOnIudGkoKT09dC5hJiZyLnZpKG51bGwpfWZ1bmN0aW9uIHdnbigpe3ZhciB0O3JldHVybiBTNWU/dShiNygoSXAoKSxYaCksRDIpLDE5NDUpOihJNG4oKSx0PXUoX3QoamMoKElwKCksWGgpLEQyKSw1ODYpP2pjKFhoLEQyKTpuZXcgdVh0LDU4NiksUzVlPSEwLHA1bih0KSxINW4odCksQWkoKGRidCgpLFlBdCksdCxuZXcgcjYpLHhzdCh0KSxBbyhYaCxEMix0KSx0KX1mdW5jdGlvbiBtZ24odCxlLG4scil7dmFyIHM7cmV0dXJuIHM9YjQodCxuLHV0KG90KExlLDEpLHJlLDIsNixbSmF0LHRvdCxlb3Qsbm90LHJvdCxpb3Qsc290XSksZSksczwwJiYocz1iNCh0LG4sdXQob3QoTGUsMSkscmUsMiw2LFsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0pLGUpKSxzPDA/ITE6KHIuZD1zLCEwKX1mdW5jdGlvbiB5Z24odCxlLG4scil7dmFyIHM7cmV0dXJuIHM9YjQodCxuLHV0KG90KExlLDEpLHJlLDIsNixbSmF0LHRvdCxlb3Qsbm90LHJvdCxpb3Qsc290XSksZSksczwwJiYocz1iNCh0LG4sdXQob3QoTGUsMSkscmUsMiw2LFsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0pLGUpKSxzPDA/ITE6KHIuZD1zLCEwKX1mdW5jdGlvbiB4Z24odCl7dmFyIGUsbixyO2ZvcihTYm4odCkscj1uZXcgbGUsbj1uZXcgUyh0LmEuYS5iKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoUShuKSw4MSksdWUocixuZXcgQ2J0KGUsITApKSx1ZShyLG5ldyBDYnQoZSwhMSkpO2Nmbih0LmMpLGFEKHIsdC5iLG5ldyBDbCh1dChvdChnTywxKSxNZSwzNjksMCxbdC5jXSkpKSxxcG4odCl9ZnVuY3Rpb24ga2duKHQpe3ZhciBlLG4scixzO2ZvcihuPW5ldyBBcixzPW5ldyBTKHQuZCk7cy5hPHMuYy5jLmxlbmd0aDspcj11KFEocyksMTgxKSxlPXUoci5XZSgoYWUoKSxMeCkpLDE3KSxGbyhuLmYsZSl8fEFpKG4sZSxuZXcgUFh0KGUpKSx1ZSh1KGNjKEZvKG4uZixlKSksNDU2KS5iLHIpO3JldHVybiBuZXcgcXUobmV3IG0xKG4pKX1mdW5jdGlvbiBFZ24odCxlKXt2YXIgbixyLHMsbyxoO2ZvcihyPW5ldyBGUXQodC5qLmMubGVuZ3RoKSxuPW51bGwsbz1uZXcgUyh0LmopO28uYTxvLmMuYy5sZW5ndGg7KXM9dShRKG8pLDExKSxzLmohPW4mJihyLmI9PXIuY3x8ZGNlKHIsbixlKSx0bXQociksbj1zLmopLGg9UW9lKHMpLGgmJkt3dChyLGgpO3IuYj09ci5jfHxkY2UocixuLGUpfWZ1bmN0aW9uIFRnbih0LGUpe3ZhciBuLHIscztmb3Iocj1uZXcgeGEodC5iLDApO3IuYjxyLmQuZ2MoKTspbj0oWm4oci5iPHIuZC5nYygpKSx1KHIuZC5YYihyLmM9ci5iKyspLDcwKSkscz11KEsobiwoeGUoKSxEZCkpLDI3Mikscz09KEQxKCksWXkpJiYoRGwociksdWUoZS5iLG4pLGVhKG4sKGFlKCksTHgpKXx8ZWUobixMeCx0KSl9ZnVuY3Rpb24gX2duKHQpe3ZhciBlLG4scixzLG87Zm9yKGU9TjAobmV3IGFyKGxyKCRzKHQpLmEuS2MoKSxuZXcgSCkpKSxzPW5ldyBhcihscihVbyh0KS5hLktjKCksbmV3IEgpKTtWcihzKTspcj11KElyKHMpLDE3KSxuPXIuYy5pLG89TjAobmV3IGFyKGxyKCRzKG4pLmEuS2MoKSxuZXcgSCkpKSxlPWIuTWF0aC5tYXgoZSxvKTtyZXR1cm4gZGUoZSl9ZnVuY3Rpb24gQ2duKHQsZSxuKXt2YXIgcixzLG8saDtmb3IobXIobiwiUHJvY2Vzc29yIGFycmFuZ2Ugbm9kZSIsMSkscz1udWxsLG89bmV3IGNzLHI9c2koZS5iLDApOyFzJiZyLmIhPXIuZC5jOyloPXUoaWkociksODYpLEJlKEZlKEsoaCwobWMoKSxXeSkpKSkmJihzPWgpO2tzKG8scyxvLmMuYixvLmMpLGxoZSh0LG8semMobiwxKSksb3Iobil9ZnVuY3Rpb24gZW9lKHQsZSxuKXt2YXIgcixzLG87cj11KHplKHQsKGRpKCksQkcpKSwyMSkscz0wLG89MCxlLmE+bi5hJiYoci5IYygoY3koKSxxTykpP3M9KGUuYS1uLmEpLzI6ci5IYyhITykmJihzPWUuYS1uLmEpKSxlLmI+bi5iJiYoci5IYygoY3koKSxHTykpP289KGUuYi1uLmIpLzI6ci5IYyhWTykmJihvPWUuYi1uLmIpKSxfNHQodCxzLG8pfWZ1bmN0aW9uIG5vZSh0LGUsbixyLHMsbyxoLGQsdyxrLF8sTSxCKXtfdCh0LkNiLDg4KSYmaHkoaGwodSh0LkNiLDg4KSksNCksdHUodCxuKSx0LmY9aCxlNyh0LGQpLHI3KHQsdyksdDcodCxrKSxuNyh0LF8pLGpnKHQsTSksaTcodCxCKSxSZyh0LCEwKSxQZyh0LHMpLHQub2sobyksZzIodCxlKSxyIT1udWxsJiYodC5pPW51bGwsZXoodCxyKSl9ZnVuY3Rpb24gcm9lKHQpe3ZhciBlLG47aWYodC5mKXtmb3IoO3Qubj4wOyl7aWYoZT11KHQuay5YYih0Lm4tMSksNzIpLG49ZS5haygpLF90KG4sOTkpJiZ1KG4sMTgpLkJiJnljJiYoIXQuZXx8bi5HaigpIT1MRXx8bi5haigpIT0wKSYmZS5kZCgpIT1udWxsKXJldHVybiEwOy0tdC5ufXJldHVybiExfWVsc2UgcmV0dXJuIHQubj4wfWZ1bmN0aW9uIEg0dCh0LGUsbil7aWYodDwwKXJldHVybiB2Qyh6aGUsdXQob3QoUW4sMSksTWUsMSw1LFtuLGRlKHQpXSkpO2lmKGU8MCl0aHJvdyBudChuZXcgUG4ocWhlK2UpKTtyZXR1cm4gdkMoIiVzICglcykgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuIHNpemUgKCVzKSIsdXQob3QoUW4sMSksTWUsMSw1LFtuLGRlKHQpLGRlKGUpXSkpfWZ1bmN0aW9uIFY0dCh0LGUsbixyLHMsbyl7dmFyIGgsZCx3LGs7aWYoaD1yLW4saDw3KXtmbG4oZSxuLHIsbyk7cmV0dXJufWlmKHc9bitzLGQ9citzLGs9dysoZC13Pj4xKSxWNHQoZSx0LHcsaywtcyxvKSxWNHQoZSx0LGssZCwtcyxvKSxvLnVlKHRbay0xXSx0W2tdKTw9MCl7Zm9yKDtuPHI7KWxzKGUsbisrLHRbdysrXSk7cmV0dXJufU51bih0LHcsayxkLGUsbixyLG8pfWZ1bmN0aW9uIGFJKHQsZSl7dmFyIG4scixzO2ZvcihzPW5ldyBsZSxyPW5ldyBTKHQuYy5hLmIpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShRKHIpLDU3KSxlLkxiKG4pJiYodWUocyxuZXcgbWJ0KG4sITApKSx1ZShzLG5ldyBtYnQobiwhMSkpKTtvZm4odC5lKSxhWnQocyx0LmQsbmV3IENsKHV0KG90KGpnZSwxKSxNZSw2NzksMCxbdC5lXSkpKX1mdW5jdGlvbiBTZ24odCxlKXt2YXIgbixyLHMsbyxoLGQsdztmb3Iodz1lLmQscz1lLmIuaixkPW5ldyBTKHcpO2QuYTxkLmMuYy5sZW5ndGg7KWZvcihoPXUoUShkKSwxMDEpLG89TnQoeGwsaTAsMjUscy5jLmxlbmd0aCwxNiwxKSxBaSh0LmIsaCxvKSxuPWguYS5kLnAtMSxyPWguYy5kLnA7biE9cjspbj0obisxKSVzLmMubGVuZ3RoLG9bbl09ITB9ZnVuY3Rpb24gQWduKHQsZSl7Zm9yKHQucj1uZXcgTEQodC5wKSxvcHQodC5yLHQpLEthKHQuci5qLHQuaiksTWgodC5qKSxhaSh0LmosZSksYWkodC5yLmUsZSksS2oodCksS2oodC5yKTt0LmYuYy5sZW5ndGghPTA7KUNVdCh1KFBlKHQuZiwwKSwxMjkpKTtmb3IoO3Quay5jLmxlbmd0aCE9MDspQ1V0KHUoUGUodC5rLDApLDEyOSkpO3JldHVybiB0LnJ9ZnVuY3Rpb24genN0KHQsZSxuKXt2YXIgcixzLG87aWYocz13bih0LlRnKCksZSkscj1lLXQuQWgoKSxyPDApaWYocylpZihzLklqKCkpbz10LllnKHMpLG8+PTA/dC5zaChvLG4pOnk1dCh0LHMsbik7ZWxzZSB0aHJvdyBudChuZXcgUG4oY2Ircy5uZSgpK1dDKSk7ZWxzZSB0aHJvdyBudChuZXcgUG4od2RlK2UrbWRlKSk7ZWxzZSBiaCh0LHIscyxuKX1mdW5jdGlvbiBpb2UodCl7dmFyIGUsbixyLHM7aWYobj11KHQsNDkpLnFoKCksbil0cnl7aWYocj1udWxsLGU9YjcoKElwKCksWGgpLCR1ZShwbG4obikpKSxlJiYocz1lLnJoKCkscyYmKHI9cy5XayhFS2Uobi5lKSkpKSxyJiZyIT10KXJldHVybiBpb2Uocil9Y2F0Y2gobyl7aWYobz1ycyhvKSwhX3Qobyw2MCkpdGhyb3cgbnQobyl9cmV0dXJuIHR9ZnVuY3Rpb24gbHUodCxlLG4pe3ZhciByLHMsbyxoO2lmKGg9ZT09bnVsbD8wOnQuYi5zZShlKSxzPShyPXQuYS5nZXQoaCkscj8/bmV3IEFycmF5KSxzLmxlbmd0aD09MCl0LmEuc2V0KGgscyk7ZWxzZSBpZihvPXlyZSh0LGUscyksbylyZXR1cm4gby5lZChuKTtyZXR1cm4gbHMocyxzLmxlbmd0aCxuZXcgUlIoZSxuKSksKyt0LmMsYSQodC5iKSxudWxsfWZ1bmN0aW9uIHNvZSh0LGUpe3ZhciBuLHI7cmV0dXJuIHckKHQuYSksVWQodC5hLChpeigpLFRHKSxURyksVWQodC5hLHhFLHhFKSxyPW5ldyBacyxFaShyLHhFLChfeigpLEZodCkpLEd0KHplKGUsKGF5KCksamh0KSkpIT09R3QoKFJEKCksX0cpKSYmRWkocix4RSxOaHQpLEVpKHIseEUsUGh0KSxzVXQodC5hLHIpLG49VHEodC5hLGUpLG59ZnVuY3Rpb24gYW9lKHQpe2lmKCF0KXJldHVybiBIcXQoKSx3Z2U7dmFyIGU9dC52YWx1ZU9mP3QudmFsdWVPZigpOnQ7aWYoZSE9PXQpe3ZhciBuPV91dFt0eXBlb2YgZV07cmV0dXJuIG4/bihlKTpGeXQodHlwZW9mIGUpfWVsc2UgcmV0dXJuIHQgaW5zdGFuY2VvZiBBcnJheXx8dCBpbnN0YW5jZW9mIGIuQXJyYXk/bmV3IHU2KHQpOm5ldyB6ayh0KX1mdW5jdGlvbiBvb2UodCxlLG4pe3ZhciByLHMsbztzd2l0Y2gobz10Lm8scj11KHhvKHQucCxuKSwyNDQpLHM9ci5pLHMuYj11SShyKSxzLmE9Y0kocikscy5iPWIuTWF0aC5tYXgocy5iLG8uYSkscy5iPm8uYSYmIWUmJihzLmI9by5hKSxzLmM9LShzLmItby5hKS8yLG4uZyl7Y2FzZSAxOnMuZD0tcy5hO2JyZWFrO2Nhc2UgMzpzLmQ9by5ifWdhdChyKSxwYXQocil9ZnVuY3Rpb24gY29lKHQsZSxuKXt2YXIgcixzLG87c3dpdGNoKG89dC5vLHI9dSh4byh0LnAsbiksMjQ0KSxzPXIuaSxzLmI9dUkocikscy5hPWNJKHIpLHMuYT1iLk1hdGgubWF4KHMuYSxvLmIpLHMuYT5vLmImJiFlJiYocy5hPW8uYikscy5kPS0ocy5hLW8uYikvMixuLmcpe2Nhc2UgNDpzLmM9LXMuYjticmVhaztjYXNlIDI6cy5jPW8uYX1nYXQocikscGF0KHIpfWZ1bmN0aW9uIExnbih0LGUpe3ZhciBuLHIscyxvLGg7aWYoIWUuZGMoKSl7aWYocz11KGUuWGIoMCksMTI4KSxlLmdjKCk9PTEpe1BjZSh0LHMscywxLDAsZSk7cmV0dXJufWZvcihuPTE7bjxlLmdjKCk7KShzLmp8fCFzLm8pJiYobz1SZm4oZSxuKSxvJiYocj11KG8uYSwxOSkuYSxoPXUoby5iLDEyOCksUGNlKHQscyxoLG4scixlKSxuPXIrMSxzPWgpKX19ZnVuY3Rpb24gTWduKHQpe3ZhciBlLG4scixzLG8saDtmb3IoaD1uZXcgcXUodC5kKSxhYShoLG5ldyBEWCksZT0oZnEoKSx1dChvdCh2OXQsMSksb2UsMjcwLDAsW2ZsdCxwbHQsaGx0LHdsdCxnbHQsZGx0LHZsdCxibHRdKSksbj0wLG89bmV3IFMoaCk7by5hPG8uYy5jLmxlbmd0aDspcz11KFEobyksMTAxKSxyPWVbbiVlLmxlbmd0aF0sQ3BuKHMsciksKytufWZ1bmN0aW9uIERnbih0LGUpe3g0KCk7dmFyIG4scixzLG87aWYoZS5iPDIpcmV0dXJuITE7Zm9yKG89c2koZSwwKSxuPXUoaWkobyksOCkscj1uO28uYiE9by5kLmM7KXtpZihzPXUoaWkobyksOCksISh6OCh0LHIpJiZ6OCh0LHMpKSlyZXR1cm4hMTtyPXN9cmV0dXJuISEoejgodCxyKSYmejgodCxuKSl9ZnVuY3Rpb24gRzR0KHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxfLE07cmV0dXJuIF89bnVsbCxNPXQsaD1SMChNLCJ4Iiksbj1uZXcgaXp0KGUpLEVhbihuLmEsaCksZD1SMChNLCJ5Iikscj1uZXcgc3p0KGUpLFRhbihyLmEsZCksdz1SMChNLEhjdCkscz1uZXcgYXp0KGUpLF9hbihzLmEsdyksaz1SMChNLHFjdCksbz1uZXcgb3p0KGUpLF89KENhbihvLmEsayksayksX31mdW5jdGlvbiBoeSh0LGUpe2d1ZSh0LGUpLHQuYiYxJiYodC5hLmE9bnVsbCksdC5iJjImJih0LmEuZj1udWxsKSx0LmImNCYmKHQuYS5nPW51bGwsdC5hLmk9bnVsbCksdC5iJjE2JiYodC5hLmQ9bnVsbCx0LmEuZT1udWxsKSx0LmImOCYmKHQuYS5iPW51bGwpLHQuYiYzMiYmKHQuYS5qPW51bGwsdC5hLmM9bnVsbCl9ZnVuY3Rpb24gSWduKHQsZSl7dmFyIG4scixzO2lmKHM9MCxlLmxlbmd0aD4wKXRyeXtzPUdsKGUsT2EsVGkpfWNhdGNoKG8pe3Rocm93IG89cnMobyksX3QobywxMjcpPyhyPW8sbnQobmV3IEYkKHIpKSk6bnQobyl9cmV0dXJuIG49KCF0LmEmJih0LmE9bmV3IEh0dCh0KSksdC5hKSxzPG4uaSYmcz49MD91KEF0KG4scyksNTYpOm51bGx9ZnVuY3Rpb24gT2duKHQsZSl7aWYodDwwKXJldHVybiB2Qyh6aGUsdXQob3QoUW4sMSksTWUsMSw1LFsiaW5kZXgiLGRlKHQpXSkpO2lmKGU8MCl0aHJvdyBudChuZXcgUG4ocWhlK2UpKTtyZXR1cm4gdkMoIiVzICglcykgbXVzdCBiZSBsZXNzIHRoYW4gc2l6ZSAoJXMpIix1dChvdChRbiwxKSxNZSwxLDUsWyJpbmRleCIsZGUodCksZGUoZSldKSl9ZnVuY3Rpb24gTmduKHQpe3ZhciBlLG4scixzLG87aWYodD09bnVsbClyZXR1cm4gTXU7Zm9yKG89bmV3IGwyKFhhLCJbIiwiXSIpLG49dCxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWU9bltyXSxvLmE/WXIoby5hLG8uYik6by5hPW5ldyBGbChvLmQpLGNfKG8uYSwiIitlKTtyZXR1cm4gby5hP28uZS5sZW5ndGg9PTA/by5hLmE6by5hLmErKCIiK28uZSk6by5jfWZ1bmN0aW9uIFBnbih0KXt2YXIgZSxuLHIscyxvO2lmKHQ9PW51bGwpcmV0dXJuIE11O2ZvcihvPW5ldyBsMihYYSwiWyIsIl0iKSxuPXQscj0wLHM9bi5sZW5ndGg7cjxzOysrcillPW5bcl0sby5hP1lyKG8uYSxvLmIpOm8uYT1uZXcgRmwoby5kKSxjXyhvLmEsIiIrZSk7cmV0dXJuIG8uYT9vLmUubGVuZ3RoPT0wP28uYS5hOm8uYS5hKygiIitvLmUpOm8uY31mdW5jdGlvbiBGZ24odCl7dmFyIGUsbixyLHMsbztpZih0PT1udWxsKXJldHVybiBNdTtmb3Iobz1uZXcgbDIoWGEsIlsiLCJdIiksbj10LHI9MCxzPW4ubGVuZ3RoO3I8czsrK3IpZT1uW3JdLG8uYT9ZcihvLmEsby5iKTpvLmE9bmV3IEZsKG8uZCksY18oby5hLCIiK2UpO3JldHVybiBvLmE/by5lLmxlbmd0aD09MD9vLmEuYTpvLmEuYSsoIiIrby5lKTpvLmN9ZnVuY3Rpb24gQmduKHQpe3ZhciBlLG4scixzLG87aWYodD09bnVsbClyZXR1cm4gTXU7Zm9yKG89bmV3IGwyKFhhLCJbIiwiXSIpLG49dCxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWU9bltyXSxvLmE/WXIoby5hLG8uYik6by5hPW5ldyBGbChvLmQpLGNfKG8uYSwiIitlKTtyZXR1cm4gby5hP28uZS5sZW5ndGg9PTA/by5hLmE6by5hLmErKCIiK28uZSk6by5jfWZ1bmN0aW9uIHVvZSh0LGUpe3ZhciBuLHIscyxvLGgsZDtmb3Iobj10LmIuYy5sZW5ndGgscz1QZSh0LmIsZSk7ZSoyKzE8biYmKHI9KG89MiplKzEsaD1vKzEsZD1vLGg8biYmdC5hLnVlKFBlKHQuYixoKSxQZSh0LmIsbykpPDAmJihkPWgpLGQpLCEodC5hLnVlKHMsUGUodC5iLHIpKTwwKSk7KWxoKHQuYixlLFBlKHQuYixyKSksZT1yO2xoKHQuYixlLHMpfWZ1bmN0aW9uIFU0dCh0LGUsbixyLHMsbyl7dmFyIGgsZCx3LGssXztmb3IoR3QodCk9PT1HdChuKSYmKHQ9dC5zbGljZShlLGUrcyksZT0wKSx3PW4sZD1lLGs9ZStzO2Q8azspaD1iLk1hdGgubWluKGQrMWU0LGspLHM9aC1kLF89dC5zbGljZShkLGgpLF8uc3BsaWNlKDAsMCxyLG8/czowKSxBcnJheS5wcm90b3R5cGUuc3BsaWNlLmFwcGx5KHcsXyksZD1oLHIrPXN9ZnVuY3Rpb24gcXN0KHQsZSxuKXt2YXIgcixzO3JldHVybiByPW4uZCxzPW4uZSx0Lmdbci5kXTw9dC5pW2UuZF0mJnQuaVtlLmRdPD10Lmlbci5kXSYmdC5nW3MuZF08PXQuaVtlLmRdJiZ0LmlbZS5kXTw9dC5pW3MuZF0/ISh0Lmlbci5kXTx0Lmlbcy5kXSk6dC5pW3IuZF08dC5pW3MuZF19ZnVuY3Rpb24gbG9lKHQpe3ZhciBlLG4scixzLG8saCxkO2lmKHI9dC5hLmMubGVuZ3RoLHI+MClmb3IoaD10LmMuZCxkPXQuZC5kLHM9bGQoZmEobmV3IFJlKGQuYSxkLmIpLGgpLDEvKHIrMSkpLG89bmV3IFJlKGguYSxoLmIpLG49bmV3IFModC5hKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoUShuKSw1NTkpLGUuZC5hPW8uYSxlLmQuYj1vLmIsRmkobyxzKX1mdW5jdGlvbiBob2UodCxlLG4pe3ZhciByLHMsbyxoLGQsdztmb3Iodz1icyxvPW5ldyBTKEVjZSh0LmIpKTtvLmE8by5jLmMubGVuZ3RoOylmb3Iocz11KFEobyksMTY4KSxkPW5ldyBTKEVjZShlLmIpKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoUShkKSwxNjgpLHI9VGNuKHMuYSxzLmIsaC5hLGguYixuKSx3PWIuTWF0aC5taW4odyxyKTtyZXR1cm4gd31mdW5jdGlvbiBVcyh0LGUpe2lmKCFlKXRocm93IG50KG5ldyBMVCk7aWYodC5qPWUsIXQuZClzd2l0Y2godC5qLmcpe2Nhc2UgMTp0LmEuYT10Lm8uYS8yLHQuYS5iPTA7YnJlYWs7Y2FzZSAyOnQuYS5hPXQuby5hLHQuYS5iPXQuby5iLzI7YnJlYWs7Y2FzZSAzOnQuYS5hPXQuby5hLzIsdC5hLmI9dC5vLmI7YnJlYWs7Y2FzZSA0OnQuYS5hPTAsdC5hLmI9dC5vLmIvMn19ZnVuY3Rpb24gUmduKHQsZSl7dmFyIG4scixzO3JldHVybiBfdChlLmcsMTApJiZ1KGUuZywxMCkuaz09KEduKCksSXMpP2JzOihzPXE2KGUpLHM/Yi5NYXRoLm1heCgwLHQuYi8yLS41KToobj1KMyhlKSxuPyhyPVp0KHZlKGl5KG4sKHhlKCksQncpKSkpLGIuTWF0aC5tYXgoMCxyLzItLjUpKTpicykpfWZ1bmN0aW9uIGpnbih0LGUpe3ZhciBuLHIscztyZXR1cm4gX3QoZS5nLDEwKSYmdShlLmcsMTApLms9PShHbigpLElzKT9iczoocz1xNihlKSxzP2IuTWF0aC5tYXgoMCx0LmIvMi0uNSk6KG49SjMoZSksbj8ocj1adCh2ZShpeShuLCh4ZSgpLEJ3KSkpKSxiLk1hdGgubWF4KDAsci8yLS41KSk6YnMpKX1mdW5jdGlvbiAkZ24odCl7dmFyIGUsbixyLHMsbyxoO2ZvcihoPVFfKHQuZCx0LmUpLG89aC5LYygpO28uT2IoKTspZm9yKHM9dShvLlBiKCksMTEpLHI9dC5lPT0oYmUoKSxCbik/cy5lOnMuZyxuPW5ldyBTKHIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShRKG4pLDE3KSwhV2EoZSkmJmUuYy5pLmMhPWUuZC5pLmMmJihVMG4odCxlKSwrK3QuZiwrK3QuYyl9ZnVuY3Rpb24gZm9lKHQsZSl7dmFyIG4scjtpZihlLmRjKCkpcmV0dXJuIHBuKCkscG4oKSx1bztmb3Iocj1uZXcgbGUsdWUocixkZShPYSkpLG49MTtuPHQuZjsrK24pdC5hPT1udWxsJiZkdWUodCksdC5hW25dJiZ1ZShyLGRlKG4pKTtyZXR1cm4gci5jLmxlbmd0aD09MT8ocG4oKSxwbigpLHVvKToodWUocixkZShUaSkpLHptbihlLHIpKX1mdW5jdGlvbiB6Z24odCxlKXt2YXIgbixyLHMsbyxoLGQsdztoPWUuYy5pLmshPShHbigpLHFzKSx3PWg/ZS5kOmUuYyxuPW4xbihlLHcpLmkscz11KHRyKHQuayx3KSwxMjEpLHI9dC5pW24ucF0uYSxlS3Qody5pKTwobi5jP0dvKG4uYy5hLG4sMCk6LTEpPyhvPXMsZD1yKToobz1yLGQ9cykseWYobGYodWYoaGYoY2YobmV3IFNoLDApLDQpLG8pLGQpKX1mdW5jdGlvbiBxZ24odCxlLG4pe3ZhciByLHMsbyxoLGQsdztpZihuKWZvcihzPW4uYS5sZW5ndGgscj1uZXcgSmIocyksZD0oci5iLXIuYSkqci5jPDA/KE9wKCksTWIpOm5ldyBCcChyKTtkLk9iKCk7KWg9dShkLlBiKCksMTkpLHc9YnN0KHQsaXgoWG0obixoLmEpKSksdyYmKG89KCFlLmImJihlLmI9bmV3IEVuKHZyLGUsNCw3KSksZS5iKSxPcihvLHcpKX1mdW5jdGlvbiBIZ24odCxlLG4pe3ZhciByLHMsbyxoLGQsdztpZihuKWZvcihzPW4uYS5sZW5ndGgscj1uZXcgSmIocyksZD0oci5iLXIuYSkqci5jPDA/KE9wKCksTWIpOm5ldyBCcChyKTtkLk9iKCk7KWg9dShkLlBiKCksMTkpLHc9YnN0KHQsaXgoWG0obixoLmEpKSksdyYmKG89KCFlLmMmJihlLmM9bmV3IEVuKHZyLGUsNSw4KSksZS5jKSxPcihvLHcpKX1mdW5jdGlvbiBvSSh0LGUsbil7dmFyIHIscztyPWUuYSZ0LmYsZS5iPXQuYltyXSx0LmJbcl09ZSxzPWUuZiZ0LmYsZS5kPXQuY1tzXSx0LmNbc109ZSxuPyhlLmU9bi5lLGUuZT9lLmUuYz1lOnQuYT1lLGUuYz1uLmMsZS5jP2UuYy5lPWU6dC5lPWUpOihlLmU9dC5lLGUuYz1udWxsLHQuZT90LmUuYz1lOnQuYT1lLHQuZT1lKSwrK3QuaSwrK3QuZ31mdW5jdGlvbiBkb2UodCl7dmFyIGUsbixyO2lmKGU9dC5QYigpLCF0Lk9iKCkpcmV0dXJuIGU7Zm9yKHI9d2MoWXIobmV3IEFwLCJleHBlY3RlZCBvbmUgZWxlbWVudCBidXQgd2FzOiA8IiksZSksbj0wO248NCYmdC5PYigpO24rKyl3Yygoci5hKz1YYSxyKSx0LlBiKCkpO3Rocm93IHQuT2IoKSYmKHIuYSs9IiwgLi4uIiksci5hKz0iPiIsbnQobmV3IFBuKHIuYSkpfWZ1bmN0aW9uIFZnbih0LGUpe3ZhciBuO2UuZD9lLmQuYj1lLmI6dC5hPWUuYixlLmI/ZS5iLmQ9ZS5kOnQuZT1lLmQsIWUuZSYmIWUuYz8obj11KEc2KHQuYixlLmEpLDI4Myksbi5hPTAsKyt0LmMpOihuPXUodHIodC5iLGUuYSksMjgzKSwtLW4uYSxlLmU/ZS5lLmM9ZS5jOm4uYj1lLmMsZS5jP2UuYy5lPWUuZTpuLmM9ZS5lKSwtLXQuZH1mdW5jdGlvbiBHZ24odCl7dmFyIGUsbjtyZXR1cm4gbj0tdC5hLGU9dXQob3QoRWgsMSksd2QsMjUsMTUsWzQzLDQ4LDQ4LDQ4LDQ4XSksbjwwJiYoZVswXT00NSxuPS1uKSxlWzFdPWVbMV0rKChuLzYwfDApLzEwfDApJk1zLGVbMl09ZVsyXSsobi82MHwwKSUxMCZNcyxlWzNdPWVbM10rKG4lNjAvMTB8MCkmTXMsZVs0XT1lWzRdK24lMTAmTXMsSWgoZSwwLGUubGVuZ3RoKX1mdW5jdGlvbiBnb2UodCxlLG4pe3ZhciByLHM7Zm9yKHI9ZS5kLHM9bi5kO3IuYS1zLmE9PTAmJnIuYi1zLmI9PTA7KXIuYSs9cGwodCwyNikqTEMrcGwodCwyNykqTUMtLjUsci5iKz1wbCh0LDI2KSpMQytwbCh0LDI3KSpNQy0uNSxzLmErPXBsKHQsMjYpKkxDK3BsKHQsMjcpKk1DLS41LHMuYis9cGwodCwyNikqTEMrcGwodCwyNykqTUMtLjV9ZnVuY3Rpb24gVzR0KHQpe3ZhciBlLG4scixzO2Zvcih0Lmc9bmV3IGVDKHUoRHIoWmEpLDI5MCkpLHI9MCxuPShiZSgpLE9uKSxlPTA7ZTx0LmouYy5sZW5ndGg7ZSsrKXM9dShQZSh0LmosZSksMTEpLHMuaiE9biYmKHIhPWUmJk82KHQuZyxuLG5ldyB5YShkZShyKSxkZShlKSkpLG49cy5qLHI9ZSk7TzYodC5nLG4sbmV3IHlhKGRlKHIpLGRlKGUpKSl9ZnVuY3Rpb24gVWduKHQpe3ZhciBlLG4scixzLG8saCxkO2ZvcihyPTAsbj1uZXcgUyh0LmIpO24uYTxuLmMuYy5sZW5ndGg7KWZvcihlPXUoUShuKSwyOSksbz1uZXcgUyhlLmEpO28uYTxvLmMuYy5sZW5ndGg7KWZvcihzPXUoUShvKSwxMCkscy5wPXIrKyxkPW5ldyBTKHMuaik7ZC5hPGQuYy5jLmxlbmd0aDspaD11KFEoZCksMTEpLGgucD1yKyt9ZnVuY3Rpb24gcG9lKHQsZSxuLHIscyl7dmFyIG8saCxkLHcsaztpZihlKWZvcihkPWUuS2MoKTtkLk9iKCk7KWZvcihoPXUoZC5QYigpLDEwKSxrPUY1dChoLChobygpLHN1KSxuKS5LYygpO2suT2IoKTspdz11KGsuUGIoKSwxMSksbz11KGNjKEZvKHMuZix3KSksMTEyKSxvfHwobz1uZXcgTEQodC5kKSxyLmNbci5jLmxlbmd0aF09byxRYWUobyx3LHMpKX1mdW5jdGlvbiBLNHQodCxlKXt2YXIgbixyLHM7aWYocz1UNCgoR3UoKSxTYSksdC5UZygpLGUpLHMpc28oKSx1KHMsNjYpLk9qKCl8fChzPXo2KE1vKFNhLHMpKSkscj0obj10LllnKHMpLHUobj49MD90Ll9nKG4sITAsITApOmx3KHQscywhMCksMTUzKSksdShyLDIxNSkub2woZSk7ZWxzZSB0aHJvdyBudChuZXcgUG4oY2IrZS5uZSgpK1dDKSl9ZnVuY3Rpb24gWTR0KHQpe3ZhciBlLG47cmV0dXJuIHQ+LTB4ODAwMDAwMDAwMDAwJiZ0PDB4ODAwMDAwMDAwMDAwP3Q9PTA/MDooZT10PDAsZSYmKHQ9LXQpLG49Q3MoYi5NYXRoLmZsb29yKGIuTWF0aC5sb2codCkvLjY5MzE0NzE4MDU1OTk0NTMpKSwoIWV8fHQhPWIuTWF0aC5wb3coMixuKSkmJisrbixuKTpObmUoQXUodCkpfWZ1bmN0aW9uIFdnbih0KXt2YXIgZSxuLHIscyxvLGgsZDtmb3Iobz1uZXcgQTAsbj1uZXcgUyh0KTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoUShuKSwxMjkpLGg9ZS5hLGQ9ZS5iLCEoby5hLl9iKGgpfHxvLmEuX2IoZCkpJiYocz1oLHI9ZCxoLmUuYitoLmouYj4yJiZkLmUuYitkLmouYjw9MiYmKHM9ZCxyPWgpLG8uYS56YyhzLG8pLHMucT1yKTtyZXR1cm4gb31mdW5jdGlvbiBib2UodCxlKXt2YXIgbixyLHM7cmV0dXJuIHI9bmV3IEgwKHQpLEJvKHIsZSksZWUociwoYWUoKSxWViksZSksZWUociwoeGUoKSx3cyksKHZhKCksS2MpKSxlZShyLE1kLChRZCgpLFBHKSksQzAociwoR24oKSxJcykpLG49bmV3IE5jLHRjKG4sciksVXMobiwoYmUoKSxCbikpLHM9bmV3IE5jLHRjKHMsciksVXMocyxIbikscn1mdW5jdGlvbiB2b2UodCl7c3dpdGNoKHQuZyl7Y2FzZSAwOnJldHVybiBuZXcgcmV0KChadigpLE9PKSk7Y2FzZSAxOnJldHVybiBuZXcgT0I7Y2FzZSAyOnJldHVybiBuZXcgZXR0O2RlZmF1bHQ6dGhyb3cgbnQobmV3IFBuKCJObyBpbXBsZW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgZm9yIHRoZSBjcm9zc2luZyBtaW5pbWl6ZXIgIisodC5mIT1udWxsP3QuZjoiIit0LmcpKSl9fWZ1bmN0aW9uIHdvZSh0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKHQuY1tlLnBdPSEwLHVlKHQuYSxlKSxoPW5ldyBTKGUuaik7aC5hPGguYy5jLmxlbmd0aDspZm9yKG89dShRKGgpLDExKSxyPW5ldyBNMShvLmIpO0pvKHIuYSl8fEpvKHIuYik7KW49dShKbyhyLmEpP1Eoci5hKTpRKHIuYiksMTcpLHM9YWhuKG8sbikuaSx0LmNbcy5wXXx8d29lKHQscyl9ZnVuY3Rpb24gbW9lKHQpe3ZhciBlLG4scixzLG8saCxkO2ZvcihoPTAsbj1uZXcgbnIoKCF0LmEmJih0LmE9bmV3IGhlKGRzLHQsMTAsMTEpKSx0LmEpKTtuLmUhPW4uaS5nYygpOyllPXUoZHIobiksMzMpLGQ9ZS5nLHM9ZS5mLHI9Yi5NYXRoLnNxcnQoZCpkK3MqcyksaD1iLk1hdGgubWF4KHIsaCksbz1tb2UoZSksaD1iLk1hdGgubWF4KG8saCk7cmV0dXJuIGh9ZnVuY3Rpb24gaWwoKXtpbD1YLEViPW5ldyBzXygiT1VUU0lERSIsMCksdGc9bmV3IHNfKCJJTlNJREUiLDEpLHROPW5ldyBzXygiTkVYVF9UT19QT1JUX0lGX1BPU1NJQkxFIiwyKSxKUz1uZXcgc18oIkFMV0FZU19TQU1FX1NJREUiLDMpLFpTPW5ldyBzXygiQUxXQVlTX09USEVSX1NBTUVfU0lERSIsNCksSHg9bmV3IHNfKCJTUEFDRV9FRkZJQ0lFTlQiLDUpfWZ1bmN0aW9uIHlvZSh0LGUsbil7dmFyIHIscyxvLGgsZCx3O3JldHVybiByPV9pbih0LChzPShUdigpLG89bmV3IE5wdCxvKSxuJiZrNXQocyxuKSxzKSxlKSxxXyhyLE8wKGUsQ2QpKSxKeihlLHIpLGxibihlLHIpLEc0dChlLHIpLGg9ZSxkPVV2KGgsInBvcnRzIiksdz1uZXcgRUd0KHQsciksWGJuKHcuYSx3LmIsZCkseWl0KHQsZSxyKSxtY24odCxlLHIpLHJ9ZnVuY3Rpb24gS2duKHQpe3ZhciBlLG47cmV0dXJuIG49LXQuYSxlPXV0KG90KEVoLDEpLHdkLDI1LDE1LFs0Myw0OCw0OCw1OCw0OCw0OF0pLG48MCYmKGVbMF09NDUsbj0tbiksZVsxXT1lWzFdKygobi82MHwwKS8xMHwwKSZNcyxlWzJdPWVbMl0rKG4vNjB8MCklMTAmTXMsZVs0XT1lWzRdKyhuJTYwLzEwfDApJk1zLGVbNV09ZVs1XStuJTEwJk1zLEloKGUsMCxlLmxlbmd0aCl9ZnVuY3Rpb24gWWduKHQpe3ZhciBlO3JldHVybiBlPXV0KG90KEVoLDEpLHdkLDI1LDE1LFs3MSw3Nyw4NCw0NSw0OCw0OCw1OCw0OCw0OF0pLHQ8PTAmJihlWzNdPTQzLHQ9LXQpLGVbNF09ZVs0XSsoKHQvNjB8MCkvMTB8MCkmTXMsZVs1XT1lWzVdKyh0LzYwfDApJTEwJk1zLGVbN109ZVs3XSsodCU2MC8xMHwwKSZNcyxlWzhdPWVbOF0rdCUxMCZNcyxJaChlLDAsZS5sZW5ndGgpfWZ1bmN0aW9uIFhnbih0KXt2YXIgZSxuLHIscyxvO2lmKHQ9PW51bGwpcmV0dXJuIE11O2ZvcihvPW5ldyBsMihYYSwiWyIsIl0iKSxuPXQscj0wLHM9bi5sZW5ndGg7cjxzOysrcillPW5bcl0sby5hP1lyKG8uYSxvLmIpOm8uYT1uZXcgRmwoby5kKSxjXyhvLmEsIiIrRV8oZSkpO3JldHVybiBvLmE/by5lLmxlbmd0aD09MD9vLmEuYTpvLmEuYSsoIiIrby5lKTpvLmN9ZnVuY3Rpb24gWDR0KHQsZSl7dmFyIG4scixzO2ZvcihzPVRpLHI9bmV3IFMoYzQoZSkpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShRKHIpLDIxMyksbi5mJiYhdC5jW24uY10mJih0LmNbbi5jXT0hMCxzPWIuTWF0aC5taW4ocyxYNHQodCxDeihuLGUpKSkpO3JldHVybiB0LmlbZS5kXT10LmosdC5nW2UuZF09Yi5NYXRoLm1pbihzLHQuaisrKSx0LmdbZS5kXX1mdW5jdGlvbiB4b2UodCxlKXt2YXIgbixyLHM7Zm9yKHM9dSh1KFBpKHQucixlKSwyMSksODQpLktjKCk7cy5PYigpOylyPXUocy5QYigpLDExMSksci5lLmI9KG49ci5iLG4uWGUoKGRpKCksbWwpKT9uLkhmKCk9PShiZSgpLE9uKT8tbi5yZigpLmItWnQodmUobi5XZShtbCkpKTpadCh2ZShuLldlKG1sKSkpOm4uSGYoKT09KGJlKCksT24pPy1uLnJmKCkuYjowKX1mdW5jdGlvbiBRZ24odCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKG49cjJ0KHQuZSksbz1sZChCTSh1YyhuMnQodC5lKSksdC5kKnQuYSx0LmMqdC5iKSwtLjUpLGU9bi5hLW8uYSxzPW4uYi1vLmIsZD0wO2Q8dC5jO2QrKyl7Zm9yKHI9ZSxoPTA7aDx0LmQ7aCsrKXlsbih0LmUsbmV3IGNoKHIscyx0LmEsdC5iKSkmJmJxKHQsaCxkLCExLCEwKSxyKz10LmE7cys9dC5ifX1mdW5jdGlvbiBaZ24odCl7dmFyIGUsbixyO2lmKEJlKEZlKHplKHQsKGRpKCksV08pKSkpKXtmb3Iocj1uZXcgbGUsbj1uZXcgYXIobHIoVjAodCkuYS5LYygpLG5ldyBIKSk7VnIobik7KWU9dShJcihuKSw3OSksdXcoZSkmJkJlKEZlKHplKGUsb2Z0KSkpJiYoci5jW3IuYy5sZW5ndGhdPWUpO3JldHVybiByfWVsc2UgcmV0dXJuIHBuKCkscG4oKSx1b31mdW5jdGlvbiBpeCh0KXt2YXIgZSxuO2lmKG49ITEsX3QodCwyMDQpKXJldHVybiBuPSEwLHUodCwyMDQpLmE7aWYoIW4mJl90KHQsMjU4KSYmKGU9dSh0LDI1OCkuYSUxPT0wLGUpKXJldHVybiBuPSEwLGRlKEdZZSh1KHQsMjU4KS5hKSk7dGhyb3cgbnQobmV3IG9kKCJJZCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFuIGludGVnZXI6ICciK3QrIicuIikpfWZ1bmN0aW9uIEpnbih0LGUpe3ZhciBuLHIscyxvLGgsZDtmb3Iobz1udWxsLHM9bmV3IElZdCgoIXQuYSYmKHQuYT1uZXcgSHR0KHQpKSx0LmEpKTtlNXQocyk7KWlmKG49dShhcShzKSw1Nikscj0oaD1uLlRnKCksZD0oRTQoaCksaC5vKSwhZHx8IW4ubWgoZCk/bnVsbDpzdnQocGl0KGQpLG4uYWgoZCkpKSxyIT1udWxsJiZ1bihyLGUpKXtvPW47YnJlYWt9cmV0dXJuIG99ZnVuY3Rpb24ga29lKHQsZSxuKXt2YXIgcixzLG8saCxkO2lmKHFsKG4sIm9jY3VycmVuY2VzIiksbj09MClyZXR1cm4gZD11KG55KGo2KHQuYSksZSksMTQpLGQ/ZC5nYygpOjA7aWYoaD11KG55KGo2KHQuYSksZSksMTQpLCFoKXJldHVybiAwO2lmKG89aC5nYygpLG4+PW8paC4kYigpO2Vsc2UgZm9yKHM9aC5LYygpLHI9MDtyPG47cisrKXMuUGIoKSxzLlFiKCk7cmV0dXJuIG99ZnVuY3Rpb24gdHBuKHQsZSxuKXt2YXIgcixzLG8saDtyZXR1cm4gcWwobiwib2xkQ291bnQiKSxxbCgwLCJuZXdDb3VudCIpLHI9dShueShqNih0LmEpLGUpLDE0KSwocj9yLmdjKCk6MCk9PW4/KHFsKDAsImNvdW50Iikscz0obz11KG55KGo2KHQuYSksZSksMTQpLG8/by5nYygpOjApLGg9LXMsaD4wP1dwdCgpOmg8MCYma29lKHQsZSwtaCksITApOiExfWZ1bmN0aW9uIGNJKHQpe3ZhciBlLG4scixzLG8saCxkO2lmKGQ9MCx0LmI9PTApe2ZvcihoPWlzZSh0LCEwKSxlPTAscj1oLHM9MCxvPXIubGVuZ3RoO3M8bzsrK3Mpbj1yW3NdLG4+MCYmKGQrPW4sKytlKTtlPjEmJihkKz10LmMqKGUtMSkpfWVsc2UgZD1RcXQoY25lKEpqKFdpKHFudCh0LmEpLG5ldyBmbSksbmV3IFQwKSkpO3JldHVybiBkPjA/ZCt0Lm4uZCt0Lm4uYTowfWZ1bmN0aW9uIHVJKHQpe3ZhciBlLG4scixzLG8saCxkO2lmKGQ9MCx0LmI9PTApZD1RcXQoY25lKEpqKFdpKHFudCh0LmEpLG5ldyBNYyksbmV3IGJwKSkpO2Vsc2V7Zm9yKGg9c3NlKHQsITApLGU9MCxyPWgscz0wLG89ci5sZW5ndGg7czxvOysrcyluPXJbc10sbj4wJiYoZCs9biwrK2UpO2U+MSYmKGQrPXQuYyooZS0xKSl9cmV0dXJuIGQ+MD9kK3Qubi5iK3Qubi5jOjB9ZnVuY3Rpb24gZXBuKHQsZSl7dmFyIG4scixzLG87Zm9yKG89dSh4byh0LmIsZSksMTI0KSxuPW8uYSxzPXUodShQaSh0LnIsZSksMjEpLDg0KS5LYygpO3MuT2IoKTspcj11KHMuUGIoKSwxMTEpLHIuYyYmKG4uYT1iLk1hdGgubWF4KG4uYSxOdnQoci5jKSkpO2lmKG4uYT4wKXN3aXRjaChlLmcpe2Nhc2UgMjpvLm4uYz10LnM7YnJlYWs7Y2FzZSA0Om8ubi5iPXQuc319ZnVuY3Rpb24gbnBuKHQsZSl7dmFyIG4scixzO3JldHVybiBuPXUoSyhlLChuMSgpLFo3KSksMTkpLmEtdShLKHQsWjcpLDE5KS5hLG49PTA/KHI9ZmEodWModShLKHQsKFVwKCksZE8pKSw4KSksdShLKHQsbFMpLDgpKSxzPWZhKHVjKHUoSyhlLGRPKSw4KSksdShLKGUsbFMpLDgpKSxqcyhyLmEqci5iLHMuYSpzLmIpKTpufWZ1bmN0aW9uIHJwbih0LGUpe3ZhciBuLHIscztyZXR1cm4gbj11KEsoZSwoaHcoKSxFRykpLDE5KS5hLXUoSyh0LEVHKSwxOSkuYSxuPT0wPyhyPWZhKHVjKHUoSyh0LChtYygpLEZPKSksOCkpLHUoSyh0LEJTKSw4KSkscz1mYSh1Yyh1KEsoZSxGTyksOCkpLHUoSyhlLEJTKSw4KSksanMoci5hKnIuYixzLmEqcy5iKSk6bn1mdW5jdGlvbiBFb2UodCl7dmFyIGUsbjtyZXR1cm4gbj1uZXcgQXAsbi5hKz0iZV8iLGU9ZmNuKHQpLGUhPW51bGwmJihuLmErPSIiK2UpLHQuYyYmdC5kJiYoWXIoKG4uYSs9IiAiLG4pLFd6KHQuYykpLFlyKHdjKChuLmErPSJbIixuKSx0LmMuaSksIl0iKSxZcigobi5hKz1Cb3QsbiksV3oodC5kKSksWXIod2MoKG4uYSs9IlsiLG4pLHQuZC5pKSwiXSIpKSxuLmF9ZnVuY3Rpb24gVG9lKHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMDpyZXR1cm4gbmV3IFdMO2Nhc2UgMTpyZXR1cm4gbmV3IEpKO2Nhc2UgMjpyZXR1cm4gbmV3IFpKO2Nhc2UgMzpyZXR1cm4gbmV3IE5CO2RlZmF1bHQ6dGhyb3cgbnQobmV3IFBuKCJObyBpbXBsZW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgZm9yIHRoZSBsYXlvdXQgcGhhc2UgIisodC5mIT1udWxsP3QuZjoiIit0LmcpKSl9fWZ1bmN0aW9uIFE0dCh0LGUsbixyLHMpe3ZhciBvO3N3aXRjaChvPTAscy5nKXtjYXNlIDE6bz1iLk1hdGgubWF4KDAsZS5iK3QuYi0obi5iK3IpKTticmVhaztjYXNlIDM6bz1iLk1hdGgubWF4KDAsLXQuYi1yKTticmVhaztjYXNlIDI6bz1iLk1hdGgubWF4KDAsLXQuYS1yKTticmVhaztjYXNlIDQ6bz1iLk1hdGgubWF4KDAsZS5hK3QuYS0obi5hK3IpKX1yZXR1cm4gb31mdW5jdGlvbiBpcG4odCxlLG4pe3ZhciByLHMsbyxoLGQ7aWYobilmb3Iocz1uLmEubGVuZ3RoLHI9bmV3IEpiKHMpLGQ9KHIuYi1yLmEpKnIuYzwwPyhPcCgpLE1iKTpuZXcgQnAocik7ZC5PYigpOyloPXUoZC5QYigpLDE5KSxvPVQ4KG4saC5hKSxmOHQgaW4gby5hfHxXY3QgaW4gby5hP3B3bih0LG8sZSk6eDVuKHQsbyxlKSxxWGUodSh0cih0LmIsczcobykpLDc5KSl9ZnVuY3Rpb24gWjR0KHQpe3ZhciBlLG47c3dpdGNoKHQuYil7Y2FzZS0xOnJldHVybiEwO2Nhc2UgMDpyZXR1cm4gbj10LnQsbj4xfHxuPT0tMT8odC5iPS0xLCEwKTooZT1PaCh0KSxlJiYoc28oKSxlLkNqKCk9PXkwZSk/KHQuYj0tMSwhMCk6KHQuYj0xLCExKSk7ZGVmYXVsdDpjYXNlIDE6cmV0dXJuITF9fWZ1bmN0aW9uIHNwbih0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKHI9KCFlLnMmJihlLnM9bmV3IGhlKE51LGUsMjEsMTcpKSxlLnMpLG89bnVsbCxzPTAsaD1yLmk7czxoOysrcylzd2l0Y2gobj11KEF0KHIscyksMTcwKSwkdihNbyh0LG4pKSl7Y2FzZSAyOmNhc2UgMzohbyYmKG89bmV3IGxlKSxvLmNbby5jLmxlbmd0aF09bn1yZXR1cm4gb3x8KHBuKCkscG4oKSx1byl9ZnVuY3Rpb24gSjR0KHQsZSl7dmFyIG4scixzLG87aWYobWkodCksdC5jIT0wfHx0LmEhPTEyMyl0aHJvdyBudChuZXcgUnIoR3IoKEZyKCkscWRlKSkpKTtpZihvPWU9PTExMixyPXQuZCxuPWM4KHQuaSwxMjUsciksbjwwKXRocm93IG50KG5ldyBScihHcigoRnIoKSxIZGUpKSkpO3JldHVybiBzPUJsKHQuaSxyLG4pLHQuZD1uKzEsbHRlKHMsbywodC5lJjUxMik9PTUxMil9ZnVuY3Rpb24gYXBuKHQpe3ZhciBlO2lmKGU9dShLKHQsKHhlKCksRVMpKSwzMTQpLGU9PShLNigpLEN4KSl0aHJvdyBudChuZXcgRlQoIlRoZSBoaWVyYXJjaHkgYXdhcmUgcHJvY2Vzc29yICIrZSsiIGluIGNoaWxkIG5vZGUgIit0KyIgaXMgb25seSBhbGxvd2VkIGlmIHRoZSByb290IG5vZGUgc3BlY2lmaWVzIHRoZSBzYW1lIGhpZXJhcmNoaWNhbCBwcm9jZXNzb3IuIikpfWZ1bmN0aW9uIG9wbih0LGUpe2RmKCk7dmFyIG4scixzLG8saCxkO2ZvcihuPW51bGwsaD1lLktjKCk7aC5PYigpOylvPXUoaC5QYigpLDEyOCksIW8ubyYmKHI9RVhlKG8uYSkscz1sdG4oby5hKSxkPW5ldyB4QyhyLHMsbnVsbCx1KG8uZC5hLmVjKCkuS2MoKS5QYigpLDE3KSksdWUoZC5jLG8uYSksdC5jW3QuYy5sZW5ndGhdPWQsbiYmdWUobi5kLGQpLG49ZCl9ZnVuY3Rpb24gY3BuKHQsZSl7dmFyIG4scixzO2lmKCFlKXNpdCh0LG51bGwpLFI4KHQsbnVsbCk7ZWxzZSBpZihlLmkmNClmb3Iocj0iW10iLG49ZS5jOztuPW4uYyl7aWYoIShuLmkmNCkpe3M9VnB0KChMMChuKSxuLm8rcikpLHNpdCh0LHMpLFI4KHQscyk7YnJlYWt9cis9IltdIn1lbHNlIHM9VnB0KChMMChlKSxlLm8pKSxzaXQodCxzKSxSOCh0LHMpO3QueWsoZSl9ZnVuY3Rpb24gZEModCxlLG4scixzKXt2YXIgbyxoLGQsdztyZXR1cm4gdz1sbnQodCx1KHMsNTYpKSxHdCh3KSE9PUd0KHMpPyhkPXUodC5nW25dLDcyKSxvPVlkKGUsdyksZl8odCxuLExzdCh0LG4sbykpLFNsKHQuZSkmJihoPUhwKHQsOSxvLmFrKCkscyx3LHIsITEpLGc0dChoLG5ldyBGMCh0LmUsOSx0LmMsZCxvLHIsITEpKSxLcnQoaCkpLHcpOnN9ZnVuY3Rpb24gdXBuKHQsZSxuKXt2YXIgcixzLG8saCxkLHc7Zm9yKHI9dShQaSh0LmMsZSksMTUpLHM9dShQaSh0LmMsbiksMTUpLG89ci5aYyhyLmdjKCkpLGg9cy5aYyhzLmdjKCkpO28uU2IoKSYmaC5TYigpOylpZihkPXUoby5VYigpLDE5KSx3PXUoaC5VYigpLDE5KSxkIT13KXJldHVybiBtdShkLmEsdy5hKTtyZXR1cm4hby5PYigpJiYhaC5PYigpPzA6by5PYigpPzE6LTF9ZnVuY3Rpb24gX29lKHQsZSl7dmFyIG4scixzO3RyeXtyZXR1cm4gcz10aW4odC5hLGUpLHN9Y2F0Y2gobyl7aWYobz1ycyhvKSxfdChvLDMyKSl7dHJ5e2lmKHI9R2woZSxPYSxUaSksbj1XZih0LmEpLHI+PTAmJnI8bi5sZW5ndGgpcmV0dXJuIG5bcl19Y2F0Y2goaCl7aWYoaD1ycyhoKSwhX3QoaCwxMjcpKXRocm93IG50KGgpfXJldHVybiBudWxsfWVsc2UgdGhyb3cgbnQobyl9fWZ1bmN0aW9uIEhzdCh0LGUpe3ZhciBuLHIscztpZihzPVQ0KChHdSgpLFNhKSx0LlRnKCksZSkscylyZXR1cm4gc28oKSx1KHMsNjYpLk9qKCl8fChzPXo2KE1vKFNhLHMpKSkscj0obj10LllnKHMpLHUobj49MD90Ll9nKG4sITAsITApOmx3KHQscywhMCksMTUzKSksdShyLDIxNSkubGwoZSk7dGhyb3cgbnQobmV3IFBuKGNiK2UubmUoKStSY3QpKX1mdW5jdGlvbiBscG4oKXtnYnQoKTt2YXIgdDtyZXR1cm4gczVlP3UoYjcoKElwKCksWGgpLGpoKSwxOTM5KToob2koSTIsbmV3IHFmKSxHM24oKSx0PXUoX3QoamMoKElwKCksWGgpLGpoKSw1NDcpP2pjKFhoLGpoKTpuZXcgbFh0LDU0NyksczVlPSEwLHo1bih0KSxVNW4odCksQWkoKGRidCgpLFlBdCksdCxuZXcgWlopLEFvKFhoLGpoLHQpLHQpfWZ1bmN0aW9uIGhwbih0LGUpe3ZhciBuLHIscyxvO3Quaj0tMSxTbCh0LmUpPyhuPXQuaSxvPXQuaSE9MCx1RCh0LGUpLHI9bmV3IEYwKHQuZSwzLHQuYyxudWxsLGUsbixvKSxzPWUuUWsodC5lLHQuYyxudWxsKSxzPW5hZSh0LGUscykscz8ocy5FaShyKSxzLkZpKCkpOkNpKHQuZSxyKSk6KHVEKHQsZSkscz1lLlFrKHQuZSx0LmMsbnVsbCkscyYmcy5GaSgpKX1mdW5jdGlvbiBycSh0LGUpe3ZhciBuLHIscztpZihzPTAscj1lWzBdLHI+PXQubGVuZ3RoKXJldHVybi0xO2ZvcihuPSgkcihyLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQocikpO24+PTQ4JiZuPD01NyYmKHM9cyoxMCsobi00OCksKytyLCEocj49dC5sZW5ndGgpKTspbj0oJHIocix0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KHIpKTtyZXR1cm4gcj5lWzBdP2VbMF09cjpzPS0xLHN9ZnVuY3Rpb24gZnBuKHQpe3ZhciBlLG4scixzLG87cmV0dXJuIHM9dSh0LmEsMTkpLmEsbz11KHQuYiwxOSkuYSxuPXMscj1vLGU9Yi5NYXRoLm1heChiLk1hdGguYWJzKHMpLGIuTWF0aC5hYnMobykpLHM8PTAmJnM9PW8/KG49MCxyPW8tMSk6cz09LWUmJm8hPWU/KG49byxyPXMsbz49MCYmKytuKToobj0tbyxyPXMpLG5ldyB5YShkZShuKSxkZShyKSl9ZnVuY3Rpb24gZHBuKHQsZSxuLHIpe3ZhciBzLG8saCxkLHcsaztmb3Iocz0wO3M8ZS5vO3MrKylmb3Iobz1zLWUuaituLGg9MDtoPGUucDtoKyspaWYoZD1oLWUuaytyLHc9byxrPWQsdys9dC5qLGsrPXQuayx3Pj0wJiZrPj0wJiZ3PHQubyYmazx0LnAmJighaHNlKGUscyxoKSYmY3NlKHQsbyxkKXx8aDQoZSxzLGgpJiYhbGZuKHQsbyxkKSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gZ3BuKHQsZSxuKXt2YXIgcixzLG8saCxkO2g9dC5jLGQ9dC5kLG89bmModXQob3QobmEsMSkscmUsOCwwLFtoLmkubixoLm4saC5hXSkpLmIscz0obytuYyh1dChvdChuYSwxKSxyZSw4LDAsW2QuaS5uLGQubixkLmFdKSkuYikvMixyPW51bGwsaC5qPT0oYmUoKSxIbik/cj1uZXcgUmUoZStoLmkuYy5jLmErbixzKTpyPW5ldyBSZShlLW4scyksdTgodC5hLDAscil9ZnVuY3Rpb24gdXcodCl7dmFyIGUsbixyLHM7Zm9yKGU9bnVsbCxyPWpwKEkxKHV0KG90KCQxLDEpLE1lLDIwLDAsWyghdC5iJiYodC5iPW5ldyBFbih2cix0LDQsNykpLHQuYiksKCF0LmMmJih0LmM9bmV3IEVuKHZyLHQsNSw4KSksdC5jKV0pKSk7VnIocik7KWlmKG49dShJcihyKSw4Mikscz1SbyhuKSwhZSllPXM7ZWxzZSBpZihlIT1zKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIFZzdCh0LGUsbil7dmFyIHI7aWYoKyt0LmosZT49dC5pKXRocm93IG50KG5ldyBDbyhZY3QrZStMMit0LmkpKTtpZihuPj10LmkpdGhyb3cgbnQobmV3IENvKFhjdCtuK0wyK3QuaSkpO3JldHVybiByPXQuZ1tuXSxlIT1uJiYoZTxuP1BjKHQuZyxlLHQuZyxlKzEsbi1lKTpQYyh0LmcsbisxLHQuZyxuLGUtbiksbHModC5nLGUsciksdC5laShlLHIsbiksdC5jaSgpKSxyfWZ1bmN0aW9uIGNuKHQsZSxuKXt2YXIgcjtpZihyPXUodC5jLnhjKGUpLDE0KSxyKXJldHVybiByLkZjKG4pPygrK3QuZCwhMCk6ITE7aWYocj10LmljKGUpLHIuRmMobikpcmV0dXJuKyt0LmQsdC5jLnpjKGUsciksITA7dGhyb3cgbnQobmV3IHJtdCgiTmV3IENvbGxlY3Rpb24gdmlvbGF0ZWQgdGhlIENvbGxlY3Rpb24gc3BlYyIpKX1mdW5jdGlvbiBsSSh0KXt2YXIgZSxuLHI7cmV0dXJuIHQ8MD8wOnQ9PTA/MzI6KHI9LSh0Pj4xNiksZT1yPj4xNiYxNixuPTE2LWUsdD10Pj5lLHI9dC0yNTYsZT1yPj4xNiY4LG4rPWUsdDw8PWUscj10LXl5LGU9cj4+MTYmNCxuKz1lLHQ8PD1lLHI9dC12ZCxlPXI+PjE2JjIsbis9ZSx0PDw9ZSxyPXQ+PjE0LGU9ciZ+KHI+PjEpLG4rMi1lKX1mdW5jdGlvbiBwcG4odCl7UjYoKTt2YXIgZSxuLHIscztmb3IoblY9bmV3IGxlLFZ1dD1uZXcgQXIsSHV0PW5ldyBsZSxlPSghdC5hJiYodC5hPW5ldyBoZShkcyx0LDEwLDExKSksdC5hKSxXNG4oZSkscz1uZXcgbnIoZSk7cy5lIT1zLmkuZ2MoKTspcj11KGRyKHMpLDMzKSxHbyhuVixyLDApPT0tMSYmKG49bmV3IGxlLHVlKEh1dCxuKSxGaWUocixuKSk7cmV0dXJuIEh1dH1mdW5jdGlvbiBicG4odCxlLG4pe3ZhciByLHMsbyxoO3QuYT1uLmIuZCxfdChlLDM1Mik/KHM9eTQodShlLDc5KSwhMSwhMSksbz1zSShzKSxyPW5ldyBMYSh0KSxfYShvLHIpLHlJKG8scyksZS5XZSgoZGkoKSxzNSkpIT1udWxsJiZfYSh1KGUuV2UoczUpLDc0KSxyKSk6KGg9dShlLDQ3MCksaC5IZyhoLkRnKCkrdC5hLmEpLGguSWcoaC5FZygpK3QuYS5iKSl9ZnVuY3Rpb24gQ29lKHQsZSl7dmFyIG4scixzLG8saCxkLHcsaztmb3Ioaz1adCh2ZShLKGUsKHhlKCksQ1MpKSkpLHc9dFswXS5uLmErdFswXS5vLmErdFswXS5kLmMrayxkPTE7ZDx0Lmxlbmd0aDtkKyspcj10W2RdLm4scz10W2RdLm8sbj10W2RdLmQsbz1yLmEtbi5iLXcsbzwwJiYoci5hLT1vKSxoPWUuZixoLmE9Yi5NYXRoLm1heChoLmEsci5hK3MuYSksdz1yLmErcy5hK24uYytrfWZ1bmN0aW9uIHZwbih0LGUpe3ZhciBuLHIscyxvLGgsZDtyZXR1cm4gcj11KHUodHIodC5nLGUuYSksNDYpLmEsNjUpLHM9dSh1KHRyKHQuZyxlLmIpLDQ2KS5hLDY1KSxvPXIuYixoPXMuYixuPVB5bihvLGgpLG4+PTA/bjooZD1BXyhmYShuZXcgUmUoaC5jK2guYi8yLGguZCtoLmEvMiksbmV3IFJlKG8uYytvLmIvMixvLmQrby5hLzIpKSksLShLdWUobyxoKS0xKSpkKX1mdW5jdGlvbiB3cG4odCxlLG4pe3ZhciByO3lzKG5ldyBrbihudWxsLCghbi5hJiYobi5hPW5ldyBoZSh1cyxuLDYsNikpLG5ldyBUbihuLmEsMTYpKSksbmV3IGxHdCh0LGUpKSx5cyhuZXcga24obnVsbCwoIW4ubiYmKG4ubj1uZXcgaGUoWW8sbiwxLDcpKSxuZXcgVG4obi5uLDE2KSkpLG5ldyBoR3QodCxlKSkscj11KHplKG4sKGRpKCksczUpKSw3NCksciYmcnl0KHIsdCxlKX1mdW5jdGlvbiBsdyh0LGUsbil7dmFyIHIscyxvO2lmKG89VDQoKEd1KCksU2EpLHQuVGcoKSxlKSxvKXJldHVybiBzbygpLHUobyw2NikuT2ooKXx8KG89ejYoTW8oU2EsbykpKSxzPShyPXQuWWcobyksdShyPj0wP3QuX2cociwhMCwhMCk6bHcodCxvLCEwKSwxNTMpKSx1KHMsMjE1KS5obChlLG4pO3Rocm93IG50KG5ldyBQbihjYitlLm5lKCkrUmN0KSl9ZnVuY3Rpb24gdDV0KHQsZSxuLHIpe3ZhciBzLG8saCxkLHc7aWYocz10LmRbZV0scyl7aWYobz1zLmcsdz1zLmksciE9bnVsbCl7Zm9yKGQ9MDtkPHc7KytkKWlmKGg9dShvW2RdLDEzMyksaC5TaCgpPT1uJiZTaShyLGguY2QoKSkpcmV0dXJuIGh9ZWxzZSBmb3IoZD0wO2Q8dzsrK2QpaWYoaD11KG9bZF0sMTMzKSxHdChoLmNkKCkpPT09R3QocikpcmV0dXJuIGh9cmV0dXJuIG51bGx9ZnVuY3Rpb24gaEkodCxlKXt2YXIgbjtpZihlPDApdGhyb3cgbnQobmV3IHBSKCJOZWdhdGl2ZSBleHBvbmVudCIpKTtpZihlPT0wKXJldHVybiBWSDtpZihlPT0xfHxjM3QodCxWSCl8fGMzdCh0LFk3KSlyZXR1cm4gdDtpZighWG9lKHQsMCkpe2ZvcihuPTE7IVhvZSh0LG4pOykrK247cmV0dXJuIHQ0KElsbihuKmUpLGhJKGFtdCh0LG4pLGUpKX1yZXR1cm4gemRuKHQsZSl9ZnVuY3Rpb24gbXBuKHQsZSl7dmFyIG4scixzO2lmKEd0KHQpPT09R3QoZSkpcmV0dXJuITA7aWYodD09bnVsbHx8ZT09bnVsbHx8dC5sZW5ndGghPWUubGVuZ3RoKXJldHVybiExO2ZvcihuPTA7bjx0Lmxlbmd0aDsrK24paWYocj10W25dLHM9ZVtuXSwhKEd0KHIpPT09R3Qocyl8fHIhPW51bGwmJlNpKHIscykpKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIFNvZSh0KXtoYnQoKTt2YXIgZSxuLHI7Zm9yKHRoaXMuYj14YmUsdGhpcy5jPShmbygpLGMwKSx0aGlzLmY9KHZWdCgpLHliZSksdGhpcy5hPXQsSnB0KHRoaXMsbmV3IG91KSx1cSh0aGlzKSxyPW5ldyBTKHQuYik7ci5hPHIuYy5jLmxlbmd0aDspbj11KFEociksODEpLG4uZHx8KGU9bmV3IFppdCh1dChvdChRdXQsMSksTWUsODEsMCxbbl0pKSx1ZSh0LmEsZSkpfWZ1bmN0aW9uIHlwbih0LGUsbil7dmFyIHIscyxvLGgsZCx3O2lmKCF0fHx0LmMubGVuZ3RoPT0wKXJldHVybiBudWxsO2ZvcihvPW5ldyBKWHQoZSwhbikscz1uZXcgUyh0KTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoUShzKSw3MCksTjR0KG8sKHpUKCksbmV3IFVhKHIpKSk7cmV0dXJuIGg9by5pLGguYT0odz1vLm4sby5lLmIrdy5kK3cuYSksaC5iPShkPW8ubixvLmUuYStkLmIrZC5jKSxvfWZ1bmN0aW9uIEFvZSh0KXt2YXIgZSxuLHIscyxvLGgsZDtmb3IoZD1zRCh0LmEpLFpidChkLG5ldyBvZiksbj1udWxsLHM9ZCxvPTAsaD1zLmxlbmd0aDtvPGgmJihyPXNbb10sci5rPT0oR24oKSxJcykpOysrbyllPXUoSyhyLChhZSgpLGdjKSksNjEpLCEoZSE9KGJlKCksQm4pJiZlIT1IbikmJihuJiZ1KEsobixNeCksMTUpLkZjKHIpLG49cil9ZnVuY3Rpb24geHBuKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsazt3PShTbihlLHQuYy5sZW5ndGgpLHUodC5jW2VdLDMyOSkpLElnKHQsZSksdy5iLzI+PW4mJihyPWUsaz0ody5jK3cuYSkvMixoPWstbix3LmM8PWstbiYmKHM9bmV3IGtudCh3LmMsaCksJG0odCxyKysscykpLGQ9aytuLGQ8PXcuYSYmKG89bmV3IGtudChkLHcuYSksVW0ocix0LmMubGVuZ3RoKSxXVCh0LmMscixvKSkpfWZ1bmN0aW9uIGU1dCh0KXt2YXIgZTtpZighdC5jJiZ0Lmc9PW51bGwpdC5kPXQuc2kodC5mKSxPcih0LHQuZCksZT10LmQ7ZWxzZXtpZih0Lmc9PW51bGwpcmV0dXJuITA7aWYodC5pPT0wKXJldHVybiExO2U9dSh0LmdbdC5pLTFdLDQ3KX1yZXR1cm4gZT09dC5iJiZudWxsLmttPj1udWxsLmptKCk/KGFxKHQpLGU1dCh0KSk6ZS5PYigpfWZ1bmN0aW9uIGtwbih0LGUsbil7dmFyIHIscyxvLGgsZDtpZihkPW4sIWQmJihkPUl2dChuZXcgV2ssMCkpLG1yKGQsSGZlLDEpLEtsZSh0LmMsZSksaD1GM24odC5hLGUpLGguZ2MoKT09MSlNbGUodShoLlhiKDApLDM3KSxkKTtlbHNlIGZvcihvPTEvaC5nYygpLHM9aC5LYygpO3MuT2IoKTspcj11KHMuUGIoKSwzNyksTWxlKHIsemMoZCxvKSk7TUtlKHQuYSxoLGUpLEZ2bihlKSxvcihkKX1mdW5jdGlvbiBMb2UodCl7aWYodGhpcy5hPXQsdC5jLmkuaz09KEduKCksSXMpKXRoaXMuYz10LmMsdGhpcy5kPXUoSyh0LmMuaSwoYWUoKSxnYykpLDYxKTtlbHNlIGlmKHQuZC5pLms9PUlzKXRoaXMuYz10LmQsdGhpcy5kPXUoSyh0LmQuaSwoYWUoKSxnYykpLDYxKTtlbHNlIHRocm93IG50KG5ldyBQbigiRWRnZSAiK3QrIiBpcyBub3QgYW4gZXh0ZXJuYWwgZWRnZS4iKSl9ZnVuY3Rpb24gTW9lKHQsZSl7dmFyIG4scixzO3M9dC5iLHQuYj1lLHQuRGImNCYmISh0LkRiJjEpJiZDaSh0LG5ldyBvYSh0LDEsMyxzLHQuYikpLGU/ZSE9dCYmKHR1KHQsZS56Yiksbml0KHQsZS5kKSxuPShyPWUuYyxyPz9lLnpiKSxpaXQodCxuPT1udWxsfHx1bihuLGUuemIpP251bGw6bikpOih0dSh0LG51bGwpLG5pdCh0LDApLGlpdCh0LG51bGwpKX1mdW5jdGlvbiBEb2UodCl7dmFyIGUsbjtpZih0LmYpe2Zvcig7dC5uPHQubzspe2lmKGU9dSh0Lmo/dC5qLnBpKHQubik6dC5rLlhiKHQubiksNzIpLG49ZS5haygpLF90KG4sOTkpJiZ1KG4sMTgpLkJiJnljJiYoIXQuZXx8bi5HaigpIT1MRXx8bi5haigpIT0wKSYmZS5kZCgpIT1udWxsKXJldHVybiEwOysrdC5ufXJldHVybiExfWVsc2UgcmV0dXJuIHQubjx0Lm99ZnVuY3Rpb24gSW9lKHQsZSl7dmFyIG47dGhpcy5lPShWbSgpLERyKHQpLFZtKCksZDN0KHQpKSx0aGlzLmM9KERyKGUpLGQzdChlKSksdzJ0KHRoaXMuZS5IZCgpLmRjKCk9PXRoaXMuYy5IZCgpLmRjKCkpLHRoaXMuZD1acmUodGhpcy5lKSx0aGlzLmI9WnJlKHRoaXMuYyksbj1aYihRbixbcmUsTWVdLFs1LDFdLDUsW3RoaXMuZS5IZCgpLmdjKCksdGhpcy5jLkhkKCkuZ2MoKV0sMiksdGhpcy5hPW4saG9uKHRoaXMpfWZ1bmN0aW9uIE9vZSh0KXshRXV0JiYoRXV0PW41bigpKTt2YXIgZT10LnJlcGxhY2UoL1tceDAwLVx4MWZceGFkXHUwNjAwLVx1MDYwM1x1MDZkZFx1MDcwZlx1MTdiNFx1MTdiNVx1MjAwYi1cdTIwMGZcdTIwMjgtXHUyMDJlXHUyMDYwLVx1MjA2NFx1MjA2YS1cdTIwNmZcdWZlZmZcdWZmZjktXHVmZmZiIlxcXS9nLGZ1bmN0aW9uKG4pe3JldHVybiB1cm4obil9KTtyZXR1cm4nIicrZSsnIid9ZnVuY3Rpb24gTm9lKHQpe193dCgpO3ZhciBlLG47Zm9yKHRoaXMuYj16Z2UsdGhpcy5jPUhnZSx0aGlzLmc9KGJWdCgpLCRnZSksdGhpcy5kPShmbygpLGMwKSx0aGlzLmE9dCxUNXQodGhpcyksbj1uZXcgUyh0LmIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShRKG4pLDU3KSwhZS5hJiZKVXQoRGVlKG5ldyBBcHQsdXQob3QoWEgsMSksTWUsNTcsMCxbZV0pKSx0KSxlLmU9bmV3IG8kKGUuZCl9ZnVuY3Rpb24gRXBuKHQpe3ZhciBlLG4scixzLG8saDtmb3Iocz10LmUuYy5sZW5ndGgscj1OdChtaCx4eSwxNSxzLDAsMSksaD1uZXcgUyh0LmUpO2guYTxoLmMuYy5sZW5ndGg7KW89dShRKGgpLDE0NCkscltvLmJdPW5ldyBjcztmb3Iobj1uZXcgUyh0LmMpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShRKG4pLDI4MikscltlLmMuYl0uRmMoZSkscltlLmQuYl0uRmMoZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gVHBuKHQpe3ZhciBlLG4scixzLG8saCxkO2ZvcihkPUhkKHQuYy5sZW5ndGgpLHM9bmV3IFModCk7cy5hPHMuYy5jLmxlbmd0aDspe2ZvcihyPXUoUShzKSwxMCksaD1uZXcgUXMsbz0kcyhyKSxuPW5ldyBhcihscihvLmEuS2MoKSxuZXcgSCkpO1ZyKG4pOyllPXUoSXIobiksMTcpLGUuYy5pPT1lLmQuaXx8VnMoaCxlLmQuaSk7ZC5jW2QuYy5sZW5ndGhdPWh9cmV0dXJuIGR9ZnVuY3Rpb24gX3BuKHQsZSl7dmFyIG4scixzLG8saDtpZihuPXUoTW4odC5hLDQpLDEyNiksaD1uPT1udWxsPzA6bi5sZW5ndGgsZT49aCl0aHJvdyBudChuZXcgam0oZSxoKSk7cmV0dXJuIHM9bltlXSxoPT0xP3I9bnVsbDoocj1OdChDZnQsZXV0LDQxNSxoLTEsMCwxKSxQYyhuLDAsciwwLGUpLG89aC1lLTEsbz4wJiZQYyhuLGUrMSxyLGUsbykpLGE3KHQsciksdG9lKHQsZSxzKSxzfWZ1bmN0aW9uIHN4KCl7c3g9WCxVeD11KEF0KEt0KChuYnQoKSxrYykucWIpLDYpLDM0KSxHeD11KEF0KEt0KGtjLnFiKSwzKSwzNCksSWZ0PXUoQXQoS3Qoa2MucWIpLDQpLDM0KSxPZnQ9dShBdChLdChrYy5xYiksNSksMTgpLFF6KFV4KSxReihHeCksUXooSWZ0KSxReihPZnQpLHU1ZT1uZXcgQ2wodXQob3QoTnUsMSksRjQsMTcwLDAsW1V4LEd4XSkpfWZ1bmN0aW9uIFBvZSh0LGUpe3ZhciBuO3RoaXMuZD1uZXcgTVQsdGhpcy5iPWUsdGhpcy5lPW5ldyBTbyhlLnFmKCkpLG49dC51LkhjKChpbCgpLHROKSksdC51LkhjKHRnKT90LkQ/dGhpcy5hPW4mJiFlLklmKCk6dGhpcy5hPSEwOnQudS5IYyhFYik/bj90aGlzLmE9IShlLnpmKCkuS2MoKS5PYigpfHxlLkJmKCkuS2MoKS5PYigpKTp0aGlzLmE9ITE6dGhpcy5hPSExfWZ1bmN0aW9uIEZvZSh0LGUpe3ZhciBuLHIscyxvO2ZvcihuPXQuby5hLG89dSh1KFBpKHQucixlKSwyMSksODQpLktjKCk7by5PYigpOylzPXUoby5QYigpLDExMSkscy5lLmE9KHI9cy5iLHIuWGUoKGRpKCksbWwpKT9yLkhmKCk9PShiZSgpLEJuKT8tci5yZigpLmEtWnQodmUoci5XZShtbCkpKTpuK1p0KHZlKHIuV2UobWwpKSk6ci5IZigpPT0oYmUoKSxCbik/LXIucmYoKS5hOm4pfWZ1bmN0aW9uIEJvZSh0LGUpe3ZhciBuLHIscyxvO249dShLKHQsKHhlKCksWGwpKSwxMDMpLG89dSh6ZShlLHBFKSw2MSkscz11KEsodCx3cyksOTgpLHMhPSh2YSgpLFUxKSYmcyE9a2I/bz09KGJlKCksYWMpJiYobz1KNXQoZSxuKSxvPT1hYyYmKG89WjYobikpKToocj1MbGUoZSkscj4wP289WjYobik6bz1IRChaNihuKSkpLEVvKGUscEUsbyl9ZnVuY3Rpb24gQ3BuKHQsZSl7dmFyIG4scixzLG8saDtmb3IoaD10LmosZS5hIT1lLmImJmFhKGgsbmV3IFc1KSxzPWguYy5sZW5ndGgvMnwwLHI9MDtyPHM7cisrKW89KFNuKHIsaC5jLmxlbmd0aCksdShoLmNbcl0sMTEzKSksby5jJiZVcyhvLmQsZS5hKTtmb3Iobj1zO248aC5jLmxlbmd0aDtuKyspbz0oU24obixoLmMubGVuZ3RoKSx1KGguY1tuXSwxMTMpKSxvLmMmJlVzKG8uZCxlLmIpfWZ1bmN0aW9uIFNwbih0LGUsbil7dmFyIHIscyxvO3JldHVybiByPXQuY1tlLmMucF1bZS5wXSxzPXQuY1tuLmMucF1bbi5wXSxyLmEhPW51bGwmJnMuYSE9bnVsbD8obz1CbnQoci5hLHMuYSksbzwwP3ZJKHQsZSxuKTpvPjAmJnZJKHQsbixlKSxvKTpyLmEhPW51bGw/KHZJKHQsZSxuKSwtMSk6cy5hIT1udWxsPyh2SSh0LG4sZSksMSk6MH1mdW5jdGlvbiBSb2UodCxlKXt2YXIgbixyLHMsbzt0LmVqKCk/KG49dC5WaSgpLG89dC5maigpLCsrdC5qLHQuSGkobix0Lm9pKG4sZSkpLHI9dC5aaSgzLG51bGwsZSxuLG8pLHQuYmooKT8ocz10LmNqKGUsbnVsbCkscz8ocy5FaShyKSxzLkZpKCkpOnQuJGkocikpOnQuJGkocikpOih0WHQodCxlKSx0LmJqKCkmJihzPXQuY2ooZSxudWxsKSxzJiZzLkZpKCkpKX1mdW5jdGlvbiBpcSh0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKGg9aHUodC5lLlRnKCksZSkscz1uZXcgSjUsbj11KHQuZywxMTkpLG89dC5pOy0tbz49MDspcj1uW29dLGgucmwoci5haygpKSYmT3IocyxyKTshU2hlKHQscykmJlNsKHQuZSkmJlVrKHQsZS4kaigpP0hwKHQsNixlLChwbigpLHVvKSxudWxsLC0xLCExKTpIcCh0LGUuS2ooKT8yOjEsZSxudWxsLG51bGwsLTEsITEpKX1mdW5jdGlvbiBnNygpe2c3PVg7dmFyIHQsZTtmb3IoRXg9TnQoUjQscmUsOTEsMzIsMCwxKSxvUz1OdChSNCxyZSw5MSwzMiwwLDEpLHQ9MSxlPTA7ZTw9MTg7ZSsrKUV4W2VdPUtEKHQpLG9TW2VdPUtEKE0wKHQsZSkpLHQ9SWEodCw1KTtmb3IoO2U8b1MubGVuZ3RoO2UrKylFeFtlXT10NChFeFtlLTFdLEV4WzFdKSxvU1tlXT10NChvU1tlLTFdLChlYigpLEx1dCkpfWZ1bmN0aW9uIEFwbih0LGUpe3ZhciBuLHIscyxvLGg7cmV0dXJuIHQuYT09KGY3KCksYlMpPyEwOihvPWUuYS5jLG49ZS5hLmMrZS5hLmIsIShlLmomJihyPWUuQSxoPXIuYy5jLmEtci5vLmEvMixzPW8tKHIubi5hK3Iuby5hKSxzPmgpfHxlLnEmJihyPWUuQyxoPXIuYy5jLmEtci5vLmEvMixzPXIubi5hLW4scz5oKSkpfWZ1bmN0aW9uIExwbih0LGUpe3ZhciBuO21yKGUsIlBhcnRpdGlvbiBwcmVwcm9jZXNzaW5nIiwxKSxuPXUoJGwoV2koZWMoV2kobmV3IGtuKG51bGwsbmV3IFRuKHQuYSwxNikpLG5ldyBxWSksbmV3IGFGKSxuZXcgVjUpLGEyKG5ldyBrZSxuZXcgbmUsbmV3IHBpLHV0KG90KHdsLDEpLG9lLDEzMiwwLFsoTjEoKSxZbCldKSkpLDE1KSx5cyhuLk9jKCksbmV3IG9GKSxvcihlKX1mdW5jdGlvbiBqb2UodCl7dnJ0KCk7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKG49bmV3IGkyLHM9bmV3IFModC5lLmIpO3MuYTxzLmMuYy5sZW5ndGg7KWZvcihyPXUoUShzKSwyOSksaD1uZXcgUyhyLmEpO2guYTxoLmMuYy5sZW5ndGg7KW89dShRKGgpLDEwKSxkPXQuZ1tvLnBdLGU9dShXdihuLGQpLDE1KSxlfHwoZT1uZXcgbGUsdjIobixkLGUpKSxlLkZjKG8pO3JldHVybiBufWZ1bmN0aW9uIE1wbih0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKHM9ZS5iLmIsdC5hPU50KG1oLHh5LDE1LHMsMCwxKSx0LmI9TnQoeGwsaTAsMjUscywxNiwxKSxoPXNpKGUuYiwwKTtoLmIhPWguZC5jOylvPXUoaWkoaCksODYpLHQuYVtvLmddPW5ldyBjcztmb3Iocj1zaShlLmEsMCk7ci5iIT1yLmQuYzspbj11KGlpKHIpLDE4OCksdC5hW24uYi5nXS5GYyhuKSx0LmFbbi5jLmddLkZjKG4pfWZ1bmN0aW9uICRvZSh0KXt2YXIgZTtyZXR1cm4gdC5EYiY2ND9tZih0KTooZT1uZXcgQWgobWYodCkpLGUuYSs9IiAoc3RhcnRYOiAiLGozKGUsdC5qKSxlLmErPSIsIHN0YXJ0WTogIixqMyhlLHQuayksZS5hKz0iLCBlbmRYOiAiLGozKGUsdC5iKSxlLmErPSIsIGVuZFk6ICIsajMoZSx0LmMpLGUuYSs9IiwgaWRlbnRpZmllcjogIix5byhlLHQuZCksZS5hKz0iKSIsZS5hKX1mdW5jdGlvbiBuNXQodCl7dmFyIGU7cmV0dXJuIHQuRGImNjQ/WF8odCk6KGU9bmV3IEFoKFhfKHQpKSxlLmErPSIgKG9yZGVyZWQ6ICIsQ2coZSwodC5CYiYyNTYpIT0wKSxlLmErPSIsIHVuaXF1ZTogIixDZyhlLCh0LkJiJjUxMikhPTApLGUuYSs9IiwgbG93ZXJCb3VuZDogIixmZXQoZSx0LnMpLGUuYSs9IiwgdXBwZXJCb3VuZDogIixmZXQoZSx0LnQpLGUuYSs9IikiLGUuYSl9ZnVuY3Rpb24gem9lKHQsZSxuLHIscyxvLGgsZCl7dmFyIHc7cmV0dXJuIF90KHQuQ2IsODgpJiZoeShobCh1KHQuQ2IsODgpKSw0KSx0dSh0LG4pLHQuZj1yLGU3KHQscykscjcodCxvKSx0Nyh0LGgpLG43KHQsITEpLGpnKHQsITApLGk3KHQsZCksUmcodCwhMCksUGcodCwwKSx0LmI9MCx0eSh0LDEpLHc9RjEodCxlLG51bGwpLHcmJncuRmkoKSwkaXQodCwhMSksdH1mdW5jdGlvbiBxb2UodCxlKXt2YXIgbixyLHMsbztyZXR1cm4gbj11KGpjKHQuYSxlKSw1MTIpLG58fChyPW5ldyBPcnQoZSkscz0oXyQoKSx6MT9udWxsOnIuYyksbz1CbChzLDAsYi5NYXRoLm1heCgwLGRqKHMsTHUoNDYpKSkpLGVaZShyLHFvZSh0LG8pKSwoejE/bnVsbDpyLmMpLmxlbmd0aD09MCYmX1d0KHIsbmV3ICRlKSxBbyh0LmEsejE/bnVsbDpyLmMscikscil9ZnVuY3Rpb24gRHBuKHQsZSl7dmFyIG47dC5iPWUsdC5nPW5ldyBsZSxuPUZwbih0LmIpLHQuZT1uLHQuZj1uLHQuYz1CZShGZShLKHQuYiwoS3ooKSxON3QpKSkpLHQuYT12ZShLKHQuYiwoZGkoKSxqeCkpKSx0LmE9PW51bGwmJih0LmE9MSksWnQodC5hKT4xP3QuZSo9WnQodC5hKTp0LmYvPVp0KHQuYSksbHVuKHQpLHBobih0KSxRdm4odCksZWUodC5iLChpQygpLGVWKSx0LmcpfWZ1bmN0aW9uIEhvZSh0LGUsbil7dmFyIHIscyxvLGgsZCx3O2ZvcihyPTAsdz1uLGV8fChyPW4qKHQuYy5sZW5ndGgtMSksdyo9LTEpLG89bmV3IFModCk7by5hPG8uYy5jLmxlbmd0aDspe2ZvcihzPXUoUShvKSwxMCksZWUocywoeGUoKSxNZCksKFFkKCksUEcpKSxzLm8uYT1yLGQ9cWcocywoYmUoKSxIbikpLktjKCk7ZC5PYigpOyloPXUoZC5QYigpLDExKSxoLm4uYT1yO3IrPXd9fWZ1bmN0aW9uIHI1dCh0LGUsbil7dmFyIHIscyxvO3QuZWooKT8obz10LmZqKCksekQodCxlLG4pLHI9dC5aaSgzLG51bGwsbixlLG8pLHQuYmooKT8ocz10LmNqKG4sbnVsbCksdC5paigpJiYocz10LmpqKG4scykpLHM/KHMuRWkocikscy5GaSgpKTp0LiRpKHIpKTp0LiRpKHIpKTooekQodCxlLG4pLHQuYmooKSYmKHM9dC5jaihuLG51bGwpLHMmJnMuRmkoKSkpfWZ1bmN0aW9uIGF4KHQsZSxuKXt2YXIgcixzLG8saCxkLHc7cmV0dXJuIGQ9dC5HayhuKSxkIT1uPyhoPXQuZ1tlXSx3PWQsZl8odCxlLHQub2koZSx3KSksbz1oLHQuZ2koZSx3LG8pLHQucmsoKSYmKHI9bixzPXQuZGoocixudWxsKSwhdShkLDQ5KS5laCgpJiYocz10LmNqKHcscykpLHMmJnMuRmkoKSksU2wodC5lKSYmVWsodCx0LlppKDksbixkLGUsITEpKSxkKTpufWZ1bmN0aW9uIElwbih0LGUpe3ZhciBuLHIscyxvO2ZvcihyPW5ldyBTKHQuYS5hKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoUShyKSwxODkpLG4uZz0hMDtmb3Iobz1uZXcgUyh0LmEuYik7by5hPG8uYy5jLmxlbmd0aDspcz11KFEobyksODEpLHMuaz1CZShGZSh0LmUuS2IobmV3IHlhKHMsZSkpKSkscy5kLmc9cy5kLmcmQmUoRmUodC5lLktiKG5ldyB5YShzLGUpKSkpO3JldHVybiB0fWZ1bmN0aW9uIFZvZSh0KXt2YXIgZSxuLHIscyxvO2lmKG49KGU9dShXZihaYSksOSksbmV3IG9oKGUsdShmZihlLGUubGVuZ3RoKSw5KSwwKSksbz11KEsodCwoYWUoKSxzbCkpLDEwKSxvKWZvcihzPW5ldyBTKG8uaik7cy5hPHMuYy5jLmxlbmd0aDspcj11KFEocyksMTEpLEd0KEsocixJaSkpPT09R3QodCkmJnBfKG5ldyBNMShyLmIpKSYmd2YobixyLmopO3JldHVybiBufWZ1bmN0aW9uIEdvZSh0LGUsbil7dmFyIHIscyxvLGgsZDtpZighdC5kW24ucF0pe2ZvcihzPW5ldyBhcihscigkcyhuKS5hLktjKCksbmV3IEgpKTtWcihzKTspe2ZvcihyPXUoSXIocyksMTcpLGQ9ci5kLmksaD1uZXcgYXIobHIoVW8oZCkuYS5LYygpLG5ldyBIKSk7VnIoaCk7KW89dShJcihoKSwxNyksby5jLmk9PWUmJih0LmFbby5wXT0hMCk7R29lKHQsZSxkKX10LmRbbi5wXT0hMH19ZnVuY3Rpb24gT3BuKHQsZSl7dmFyIG4scixzLG8saCxkLHc7aWYocj1RcmUodC5EYiYyNTQpLHI9PTEpdC5FYj1udWxsO2Vsc2UgaWYobz1vMih0LkViKSxyPT0yKXM9d3N0KHQsZSksdC5FYj1vW3M9PTA/MTowXTtlbHNle2ZvcihoPU50KFFuLE1lLDEsci0xLDUsMSksbj0yLGQ9MCx3PTA7bjw9MTI4O248PD0xKW49PWU/KytkOnQuRGImbiYmKGhbdysrXT1vW2QrK10pO3QuRWI9aH10LkRiJj1+ZX1mdW5jdGlvbiBOcG4odCxlKXt2YXIgbixyLHMsbyxoO2ZvcihyPSghZS5zJiYoZS5zPW5ldyBoZShOdSxlLDIxLDE3KSksZS5zKSxvPW51bGwscz0wLGg9ci5pO3M8aDsrK3Mpc3dpdGNoKG49dShBdChyLHMpLDE3MCksJHYoTW8odCxuKSkpe2Nhc2UgNDpjYXNlIDU6Y2FzZSA2OnshbyYmKG89bmV3IGxlKSxvLmNbby5jLmxlbmd0aF09bjticmVha319cmV0dXJuIG98fChwbigpLHBuKCksdW8pfWZ1bmN0aW9uIGk1dCh0KXt2YXIgZTtzd2l0Y2goZT0wLHQpe2Nhc2UgMTA1OmU9MjticmVhaztjYXNlIDEwOTplPTg7YnJlYWs7Y2FzZSAxMTU6ZT00O2JyZWFrO2Nhc2UgMTIwOmU9MTY7YnJlYWs7Y2FzZSAxMTc6ZT0zMjticmVhaztjYXNlIDExOTplPTY0O2JyZWFrO2Nhc2UgNzA6ZT0yNTY7YnJlYWs7Y2FzZSA3MjplPTEyODticmVhaztjYXNlIDg4OmU9NTEyO2JyZWFrO2Nhc2UgNDQ6ZT14Zn1yZXR1cm4gZX1mdW5jdGlvbiBQcG4odCxlLG4scixzKXt2YXIgbyxoLGQsdztpZihHdCh0KT09PUd0KGUpJiZyPT1zKXt6dWUodCxyLG4pO3JldHVybn1mb3IoZD0wO2Q8cjtkKyspe2ZvcihoPTAsbz10W2RdLHc9MDt3PHM7dysrKWg9UmEoUmEoSWEoR3MobyxwbyksR3MoZVt3XSxwbykpLEdzKG5bZCt3XSxwbykpLEdzKE1yKGgpLHBvKSksbltkK3ddPU1yKGgpLGg9em0oaCwzMik7bltkK3NdPU1yKGgpfX1mdW5jdGlvbiBGcG4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLF8sTTtmb3IoXz0wLGs9MCxzPXQuYSxkPXMuYS5nYygpLHI9cy5hLmVjKCkuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksNTYxKSxlPShuLmImJndhdChuKSxuLmEpLE09ZS5hLGg9ZS5iLF8rPU0raCxrKz1NKmg7cmV0dXJuIHc9Yi5NYXRoLnNxcnQoNDAwKmQqay00KmsrXypfKStfLG89MiooMTAwKmQtMSksbz09MD93Oncvb31mdW5jdGlvbiBVb2UodCxlKXtlLmIhPTAmJihpc05hTih0LnMpP3Qucz1adCgoWm4oZS5iIT0wKSx2ZShlLmEuYS5jKSkpOnQucz1iLk1hdGgubWluKHQucyxadCgoWm4oZS5iIT0wKSx2ZShlLmEuYS5jKSkpKSxpc05hTih0LmMpP3QuYz1adCgoWm4oZS5iIT0wKSx2ZShlLmMuYi5jKSkpOnQuYz1iLk1hdGgubWF4KHQuYyxadCgoWm4oZS5iIT0wKSx2ZShlLmMuYi5jKSkpKSl9ZnVuY3Rpb24gZ0ModCl7dmFyIGUsbixyLHM7Zm9yKGU9bnVsbCxyPWpwKEkxKHV0KG90KCQxLDEpLE1lLDIwLDAsWyghdC5iJiYodC5iPW5ldyBFbih2cix0LDQsNykpLHQuYiksKCF0LmMmJih0LmM9bmV3IEVuKHZyLHQsNSw4KSksdC5jKV0pKSk7VnIocik7KWlmKG49dShJcihyKSw4Mikscz1SbyhuKSwhZSllPWhzKHMpO2Vsc2UgaWYoZSE9aHMocykpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gR3N0KHQsZSl7dmFyIG4scixzLG87dC5laigpPyhuPXQuaSxvPXQuZmooKSx1RCh0LGUpLHI9dC5aaSgzLG51bGwsZSxuLG8pLHQuYmooKT8ocz10LmNqKGUsbnVsbCksdC5paigpJiYocz10LmpqKGUscykpLHM/KHMuRWkocikscy5GaSgpKTp0LiRpKHIpKTp0LiRpKHIpKToodUQodCxlKSx0LmJqKCkmJihzPXQuY2ooZSxudWxsKSxzJiZzLkZpKCkpKX1mdW5jdGlvbiBXb2UodCxlLG4pe3ZhciByLHMsbzt0LmVqKCk/KG89dC5maigpLCsrdC5qLHQuSGkoZSx0Lm9pKGUsbikpLHI9dC5aaSgzLG51bGwsbixlLG8pLHQuYmooKT8ocz10LmNqKG4sbnVsbCkscz8ocy5FaShyKSxzLkZpKCkpOnQuJGkocikpOnQuJGkocikpOigrK3Quaix0LkhpKGUsdC5vaShlLG4pKSx0LmJqKCkmJihzPXQuY2oobixudWxsKSxzJiZzLkZpKCkpKX1mdW5jdGlvbiBCcG4odCl7dmFyIGUsbixyLHM7Zm9yKHM9dC5sZW5ndGgsZT1udWxsLHI9MDtyPHM7cisrKW49KCRyKHIsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChyKSksdWQoIi4qKz97WygpfFxcXiQiLEx1KG4pKT49MD8oZXx8KGU9bmV3IEJULHI+MCYmeW8oZSx0LnN1YnN0cigwLHIpKSksZS5hKz0iXFwiLHY4KGUsbiZNcykpOmUmJnY4KGUsbiZNcyk7cmV0dXJuIGU/ZS5hOnR9ZnVuY3Rpb24gUnBuKHQpe3ZhciBlO2lmKCF0LmEpdGhyb3cgbnQobmV3IEhvKCJJRGF0YVR5cGUgY2xhc3MgZXhwZWN0ZWQgZm9yIGxheW91dCBvcHRpb24gIit0LmYpKTtpZihlPVVpbih0LmEpLGU9PW51bGwpdGhyb3cgbnQobmV3IEhvKCJDb3VsZG4ndCBjcmVhdGUgbmV3IGluc3RhbmNlIG9mIHByb3BlcnR5ICciK3QuZisiJy4gIit6MWUrKEwwKHVOKSx1Ti5rKStyOHQpKTtyZXR1cm4gdShlLDQxNCl9ZnVuY3Rpb24gVXN0KHQpe3ZhciBlLG4scixzLG87cmV0dXJuIG89dC5laCgpLG8mJm8ua2goKSYmKHM9WHAodCxvKSxzIT1vKT8obj10LlZnKCkscj0oZT10LlZnKCksZT49MD90LlFnKG51bGwpOnQuZWgoKS5paCh0LC0xLWUsbnVsbCxudWxsKSksdC5SZyh1KHMsNDkpLG4pLHImJnIuRmkoKSx0LkxnKCkmJnQuTWcoKSYmbj4tMSYmQ2kodCxuZXcgb2EodCw5LG4sbyxzKSkscyk6b31mdW5jdGlvbiBLb2UodCl7dmFyIGUsbixyLHMsbyxoLGQsdztmb3IoaD0wLG89dC5mLmUscj0wO3I8by5jLmxlbmd0aDsrK3IpZm9yKGQ9KFNuKHIsby5jLmxlbmd0aCksdShvLmNbcl0sMTQ0KSkscz1yKzE7czxvLmMubGVuZ3RoOysrcyl3PShTbihzLG8uYy5sZW5ndGgpLHUoby5jW3NdLDE0NCkpLG49R3AoZC5kLHcuZCksZT1uLXQuYVtkLmJdW3cuYl0saCs9dC5pW2QuYl1bdy5iXSplKmU7cmV0dXJuIGh9ZnVuY3Rpb24ganBuKHQsZSl7dmFyIG47aWYoIWVhKGUsKHhlKCksZHUpKSYmKG49bDFuKHUoSyhlLGQ5dCksMzYwKSx1KEsodCxkdSksMTYzKSksZWUoZSxkOXQsbiksIVZyKG5ldyBhcihscih6MChlKS5hLktjKCksbmV3IEgpKSkpKXN3aXRjaChuLmcpe2Nhc2UgMTplZShlLGR1LChwaCgpLHlTKSk7YnJlYWs7Y2FzZSAyOmVlKGUsZHUsKHBoKCkseFMpKX19ZnVuY3Rpb24gJHBuKHQsZSl7dmFyIG47WHZuKHQpLHQuYT0obj1uZXcgb2V0LHlzKG5ldyBrbihudWxsLG5ldyBUbihlLmQsMTYpKSxuZXcganR0KG4pKSxuKSxhdm4odCx1KEsoZS5iLCh4ZSgpLFlsdCkpLDM3NikpLEpobih0KSxHcG4odCksZjFuKHQpLHRmbih0KSxZeW4odCxlKSx5cyhlYyhuZXcga24obnVsbCxzWnQoVGVuKHQuYikuYSkpLG5ldyBTMyksbmV3IElYKSxlLmE9ITEsdC5hPW51bGx9ZnVuY3Rpb24gWW9lKCl7QzR0LmNhbGwodGhpcyxxNywoVHYoKSxDNGUpKSx0aGlzLnA9bnVsbCx0aGlzLmE9bnVsbCx0aGlzLmY9bnVsbCx0aGlzLm49bnVsbCx0aGlzLmc9bnVsbCx0aGlzLmM9bnVsbCx0aGlzLmk9bnVsbCx0aGlzLmo9bnVsbCx0aGlzLmQ9bnVsbCx0aGlzLmI9bnVsbCx0aGlzLmU9bnVsbCx0aGlzLms9bnVsbCx0aGlzLm89bnVsbCx0aGlzLnM9bnVsbCx0aGlzLnE9ITEsdGhpcy5yPSExfWZ1bmN0aW9uIHA3KCl7cDc9WCxUZnQ9bmV3IEM2KGgxZSwwKSxKRz1uZXcgQzYoIklOU0lERV9TRUxGX0xPT1BTIiwxKSx0VT1uZXcgQzYoIk1VTFRJX0VER0VTIiwyKSxaRz1uZXcgQzYoIkVER0VfTEFCRUxTIiwzKSxFZnQ9bmV3IEM2KCJQT1JUUyIsNCksUUc9bmV3IEM2KCJDT01QT1VORCIsNSksWEc9bmV3IEM2KCJDTFVTVEVSUyIsNiksa2Z0PW5ldyBDNigiRElTQ09OTkVDVEVEIiw3KX1mdW5jdGlvbiBYb2UodCxlKXt2YXIgbixyLHM7aWYoZT09MClyZXR1cm4odC5hWzBdJjEpIT0wO2lmKGU8MCl0aHJvdyBudChuZXcgcFIoIk5lZ2F0aXZlIGJpdCBhZGRyZXNzIikpO2lmKHM9ZT4+NSxzPj10LmQpcmV0dXJuIHQuZTwwO2lmKG49dC5hW3NdLGU9MTw8KGUmMzEpLHQuZTwwKXtpZihyPWRuZSh0KSxzPHIpcmV0dXJuITE7cj09cz9uPS1uOm49fm59cmV0dXJuKG4mZSkhPTB9ZnVuY3Rpb24genBuKHQsZSxuLHIpe3ZhciBzO3Uobi5iLDY1KSx1KG4uYiw2NSksdShyLmIsNjUpLHUoci5iLDY1KSxzPWZhKHVjKHUobi5iLDY1KS5jKSx1KHIuYiw2NSkuYyksQWoocyxob2UodShuLmIsNjUpLHUoci5iLDY1KSxzKSksdShyLmIsNjUpLHUoci5iLDY1KSx1KHIuYiw2NSkuYy5hK3MuYSx1KHIuYiw2NSkuYy5iK3MuYix1KHIuYiw2NSksX3Uoci5hLG5ldyB3dnQodCxlLHIpKX1mdW5jdGlvbiBzNXQodCxlKXt2YXIgbixyLHMsbyxoLGQsdztpZihvPWUuZSxvKXtmb3Iobj1Vc3Qobykscj11KHQuZyw2NzQpLGg9MDtoPHQuaTsrK2gpaWYodz1yW2hdLGZzdCh3KT09biYmKHM9KCF3LmQmJih3LmQ9bmV3IEJzKHdvLHcsMSkpLHcuZCksZD11KG4uYWgoY2F0KG8sby5DYixvLkRiPj4xNikpLDE1KS5YYyhvKSxkPHMuaSkpcmV0dXJuIHM1dCh0LHUoQXQocyxkKSw4NykpfXJldHVybiBlfWZ1bmN0aW9uIEQodCxlLG4pe3ZhciByPSRILHMsbz1yW3RdLGg9byBpbnN0YW5jZW9mIEFycmF5P29bMF06bnVsbDtvJiYhaD9sPW86KGw9KHM9ZSYmZS5wcm90b3R5cGUsIXMmJihzPSRIW2VdKSxocm4ocykpLGwuaG09biwhZSYmKGwuaW09RnQpLHJbdF09bCk7Zm9yKHZhciBkPTM7ZDxhcmd1bWVudHMubGVuZ3RoOysrZClhcmd1bWVudHNbZF0ucHJvdG90eXBlPWw7aCYmKGwuZ209aCl9ZnVuY3Rpb24gVnIodCl7Zm9yKHZhciBlOyF1KERyKHQuYSksNDcpLk9iKCk7KXtpZih0LmQ9VmNuKHQpLCF0LmQpcmV0dXJuITE7aWYodC5hPXUodC5kLlBiKCksNDcpLF90KHQuYSwzOSkpe2lmKGU9dSh0LmEsMzkpLHQuYT1lLmEsIXQuYiYmKHQuYj1uZXcgRjMpLFZwKHQuYix0LmQpLGUuYilmb3IoOyFOVChlLmIpOylWcCh0LmIsdShjZW4oZS5iKSw0NykpO3QuZD1lLmR9fXJldHVybiEwfWZ1bmN0aW9uIGE1dCh0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKG89ZT09bnVsbD8wOnQuYi5zZShlKSxyPShuPXQuYS5nZXQobyksbj8/bmV3IEFycmF5KSxoPTA7aDxyLmxlbmd0aDtoKyspaWYocz1yW2hdLHQuYi5yZShlLHMuY2QoKSkpcmV0dXJuIHIubGVuZ3RoPT0xPyhyLmxlbmd0aD0wLElRZSh0LmEsbykpOnIuc3BsaWNlKGgsMSksLS10LmMsYSQodC5iKSxzLmRkKCk7cmV0dXJuIG51bGx9ZnVuY3Rpb24gbzV0KHQsZSl7dmFyIG4scixzLG87Zm9yKHM9MSxlLmo9ITAsbz1udWxsLHI9bmV3IFMoYzQoZSkpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShRKHIpLDIxMyksdC5jW24uY118fCh0LmNbbi5jXT0hMCxvPUN6KG4sZSksbi5mP3MrPW81dCh0LG8pOiFvLmomJm4uYT09bi5lLmUtbi5kLmUmJihuLmY9ITAsVnModC5wLG4pLHMrPW81dCh0LG8pKSk7cmV0dXJuIHN9ZnVuY3Rpb24gcXBuKHQpe3ZhciBlLG4scjtmb3Iobj1uZXcgUyh0LmEuYS5iKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoUShuKSw4MSkscj0oSW4oMCksMCkscj4wJiYoIShQcCh0LmEuYykmJmUubi5kKSYmIShhOCh0LmEuYykmJmUubi5iKSYmKGUuZy5kKz1iLk1hdGgubWF4KDAsci8yLS41KSksIShQcCh0LmEuYykmJmUubi5hKSYmIShhOCh0LmEuYykmJmUubi5jKSYmKGUuZy5hLT1yLTEpKX1mdW5jdGlvbiBRb2UodCl7dmFyIGUsbixyLHMsbztpZihzPW5ldyBsZSxvPVZ1ZSh0LHMpLGU9dShLKHQsKGFlKCksc2wpKSwxMCksZSlmb3Iocj1uZXcgUyhlLmopO3IuYTxyLmMuYy5sZW5ndGg7KW49dShRKHIpLDExKSxHdChLKG4sSWkpKT09PUd0KHQpJiYobz1iLk1hdGgubWF4KG8sVnVlKG4scykpKTtyZXR1cm4gcy5jLmxlbmd0aD09MHx8ZWUodCxLNCxvKSxvIT0tMT9zOm51bGx9ZnVuY3Rpb24gWm9lKHQsZSxuKXt2YXIgcixzLG8saCxkLHc7bz11KFBlKGUuZSwwKSwxNykuYyxyPW8uaSxzPXIuayx3PXUoUGUobi5nLDApLDE3KS5kLGg9dy5pLGQ9aC5rLHM9PShHbigpLGNhKT9lZSh0LChhZSgpLGExKSx1KEsocixhMSksMTEpKTplZSh0LChhZSgpLGExKSxvKSxkPT1jYT9lZSh0LChhZSgpLHFoKSx1KEsoaCxxaCksMTEpKTplZSh0LChhZSgpLHFoKSx3KX1mdW5jdGlvbiBKb2UodCxlKXt2YXIgbixyLHMsbztmb3Iobz1NcihJYShlMCxXZChNcihJYShlPT1udWxsPzA6SmkoZSksbjApKSwxNSkpKSxuPW8mdC5iLmxlbmd0aC0xLHM9bnVsbCxyPXQuYltuXTtyO3M9cixyPXIuYSlpZihyLmQ9PW8mJmRkKHIuaSxlKSlyZXR1cm4gcz9zLmE9ci5hOnQuYltuXT1yLmEsVXF0KHIuYyxyLmYpLGNNKHIuYixyLmUpLC0tdC5mLCsrdC5lLCEwO3JldHVybiExfWZ1bmN0aW9uIGM1dCh0LGUpe3ZhciBuLHIscyxvLGg7cmV0dXJuIGUmPTYzLG49dC5oLHI9KG4mREkpIT0wLHImJihufD0tMTA0ODU3NiksZTwyMj8oaD1uPj5lLG89dC5tPj5lfG48PDIyLWUscz10Lmw+PmV8dC5tPDwyMi1lKTplPDQ0PyhoPXI/VzA6MCxvPW4+PmUtMjIscz10Lm0+PmUtMjJ8bjw8NDQtZSk6KGg9cj9XMDowLG89cj92bDowLHM9bj4+ZS00NCksY3UocyZ2bCxvJnZsLGgmVzApfWZ1bmN0aW9uIFdzdCh0KXt2YXIgZSxuLHIscyxvLGg7Zm9yKHRoaXMuYz1uZXcgbGUsdGhpcy5kPXQscj1icyxzPWJzLGU9TnMsbj1OcyxoPXNpKHQsMCk7aC5iIT1oLmQuYzspbz11KGlpKGgpLDgpLHI9Yi5NYXRoLm1pbihyLG8uYSkscz1iLk1hdGgubWluKHMsby5iKSxlPWIuTWF0aC5tYXgoZSxvLmEpLG49Yi5NYXRoLm1heChuLG8uYik7dGhpcy5hPW5ldyBjaChyLHMsZS1yLG4tcyl9ZnVuY3Rpb24gdGNlKHQsZSl7dmFyIG4scixzLG8saCxkO2ZvcihvPW5ldyBTKHQuYik7by5hPG8uYy5jLmxlbmd0aDspZm9yKHM9dShRKG8pLDI5KSxkPW5ldyBTKHMuYSk7ZC5hPGQuYy5jLmxlbmd0aDspZm9yKGg9dShRKGQpLDEwKSxoLms9PShHbigpLFBsKSYmb3goaCxlKSxyPW5ldyBhcihscigkcyhoKS5hLktjKCksbmV3IEgpKTtWcihyKTspbj11KElyKHIpLDE3KSxCbmUobixlKX1mdW5jdGlvbiB1NXQodCl7dmFyIGUsbixyO3RoaXMuYz10LHI9dShLKHQsKHhlKCksWGwpKSwxMDMpLGU9WnQodmUoSyh0LFVWKSkpLG49WnQodmUoSyh0LGZfdCkpKSxyPT0oZm8oKSxIaCl8fHI9PV9mfHxyPT1jMD90aGlzLmI9ZSpuOnRoaXMuYj0xLyhlKm4pLHRoaXMuaj1adCh2ZShLKHQsSjQpKSksdGhpcy5lPVp0KHZlKEsodCxCdykpKSx0aGlzLmY9dC5iLmMubGVuZ3RofWZ1bmN0aW9uIEhwbih0KXt2YXIgZSxuO2Zvcih0LmU9TnQoU3IsSnIsMjUsdC5wLmMubGVuZ3RoLDE1LDEpLHQuaz1OdChTcixKciwyNSx0LnAuYy5sZW5ndGgsMTUsMSksbj1uZXcgUyh0LnApO24uYTxuLmMuYy5sZW5ndGg7KWU9dShRKG4pLDEwKSx0LmVbZS5wXT1OMChuZXcgYXIobHIoVW8oZSkuYS5LYygpLG5ldyBIKSkpLHQua1tlLnBdPU4wKG5ldyBhcihscigkcyhlKS5hLktjKCksbmV3IEgpKSl9ZnVuY3Rpb24gVnBuKHQpe3ZhciBlLG4scixzLG8saDtmb3Iocz0wLHQucT1uZXcgbGUsZT1uZXcgUXMsaD1uZXcgUyh0LnApO2guYTxoLmMuYy5sZW5ndGg7KXtmb3Iobz11KFEoaCksMTApLG8ucD1zLHI9bmV3IGFyKGxyKCRzKG8pLmEuS2MoKSxuZXcgSCkpO1ZyKHIpOyluPXUoSXIociksMTcpLFZzKGUsbi5kLmkpO2UuYS5CYyhvKSE9bnVsbCx1ZSh0LnEsbmV3IHlfKGUpKSxlLmEuJGIoKSwrK3N9fWZ1bmN0aW9uIGh3KCl7aHc9WCxuQ3Q9bmV3IE12KDIwKSxzeWU9bmV3IGFvKChkaSgpLFYyKSxuQ3QpLGlDdD1uZXcgYW8oRzIsMjApLHR5ZT1uZXcgYW8oangsUDcpLEVHPW5ldyBhbyh6RyxkZSgxKSksb3llPW5ldyBhbyhwZnQsKEZuKCksITApKSx0Q3Q9VU8sbnllPUgyLHJ5ZT1vNSxpeWU9bWIsZXllPWE1LGVDdD1ZTyxheWU9S3ksY3llPSh1eXQoKSxKbWUpLHJDdD1abWV9ZnVuY3Rpb24gZWNlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxfO2lmKHQuYS5mPjAmJl90KGUsNDIpJiYodC5hLnFqKCksaz11KGUsNDIpLHc9ay5jZCgpLG89dz09bnVsbD8wOkppKHcpLGg9VzJ0KHQuYSxvKSxuPXQuYS5kW2hdLG4pKXtmb3Iocj11KG4uZywzNjcpLF89bi5pLGQ9MDtkPF87KytkKWlmKHM9cltkXSxzLlNoKCk9PW8mJnMuRmIoaykpcmV0dXJuIGVjZSh0LGspLCEwfXJldHVybiExfWZ1bmN0aW9uIEdwbih0KXt2YXIgZSxuLHIscztmb3Iocz11KFBpKHQuYSwocDQoKSxNVikpLDE1KS5LYygpO3MuT2IoKTspcj11KHMuUGIoKSwxMDEpLG49KGU9TjYoci5rKSxlLkhjKChiZSgpLE9uKSk/ZS5IYyhIbik/ZS5IYyh5cik/ZS5IYyhCbik/bnVsbDplMmU6cjJlOm4yZTp0MmUpLGI4KHQscixuWzBdLChKdigpLFN3KSwwKSxiOCh0LHIsblsxXSxkYiwxKSxiOCh0LHIsblsyXSxBdywxKX1mdW5jdGlvbiBVcG4odCxlKXt2YXIgbixyO249eXduKGUpLHd2bih0LGUsbiksYWFlKHQuYSx1KEsoJGEoZS5iKSwoYWUoKSxJeCkpLDIzMCkpLEd3bih0KSxtZG4odCxlKSxyPU50KFNyLEpyLDI1LGUuYi5qLmMubGVuZ3RoLDE1LDEpLExhdCh0LGUsKGJlKCksT24pLHIsbiksTGF0KHQsZSxIbixyLG4pLExhdCh0LGUseXIscixuKSxMYXQodCxlLEJuLHIsbiksdC5hPW51bGwsdC5jPW51bGwsdC5iPW51bGx9ZnVuY3Rpb24gbDV0KCl7bDV0PVgsT0N0PShUeigpLHFodCkscXllPW5ldyB2bihWa3QsT0N0KSwkeWU9bmV3IHZuKEdrdCwoRm4oKSwhMCkpLGRlKC0xKSxCeWU9bmV3IHZuKFVrdCxkZSgtMSkpLGRlKC0xKSxSeWU9bmV3IHZuKFdrdCxkZSgtMSkpLHp5ZT1uZXcgdm4oS2t0LCExKSxIeWU9bmV3IHZuKFlrdCwhMCksanllPW5ldyB2bihTY3QsITEpLFZ5ZT1uZXcgdm4oWGt0LC0xKX1mdW5jdGlvbiBoNXQodCxlLG4pe3N3aXRjaChlKXtjYXNlIDc6IXQuZSYmKHQuZT1uZXcgRW4ocmEsdCw3LDQpKSxUcih0LmUpLCF0LmUmJih0LmU9bmV3IEVuKHJhLHQsNyw0KSksZ3ModC5lLHUobiwxNCkpO3JldHVybjtjYXNlIDg6IXQuZCYmKHQuZD1uZXcgRW4ocmEsdCw4LDUpKSxUcih0LmQpLCF0LmQmJih0LmQ9bmV3IEVuKHJhLHQsOCw1KSksZ3ModC5kLHUobiwxNCkpO3JldHVybn1jNHQodCxlLG4pfWZ1bmN0aW9uIGY1dCh0LGUpe3ZhciBuLHIscyxvLGg7aWYoR3QoZSk9PT1HdCh0KSlyZXR1cm4hMDtpZighX3QoZSwxNSl8fChoPXUoZSwxNSksdC5nYygpIT1oLmdjKCkpKXJldHVybiExO2ZvcihvPWguS2MoKSxyPXQuS2MoKTtyLk9iKCk7KWlmKG49ci5QYigpLHM9by5QYigpLCEoR3Qobik9PT1HdChzKXx8biE9bnVsbCYmU2kobixzKSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gV3BuKHQsZSl7dmFyIG4scixzLG87Zm9yKG89dSgkbChlYyhlYyhuZXcga24obnVsbCxuZXcgVG4oZS5iLDE2KSksbmV3IGtMKSxuZXcgSlApLGEyKG5ldyBrZSxuZXcgbmUsbmV3IHBpLHV0KG90KHdsLDEpLG9lLDEzMiwwLFsoTjEoKSxZbCldKSkpLDE1KSxvLkpjKG5ldyBFTCksbj0wLHM9by5LYygpO3MuT2IoKTspcj11KHMuUGIoKSwxMSksci5wPT0tMSYmZzV0KHQscixuKyspfWZ1bmN0aW9uIG5jZSh0KXtzd2l0Y2godC5nKXtjYXNlIDA6cmV0dXJuIG5ldyBwVDtjYXNlIDE6cmV0dXJuIG5ldyBYSjtjYXNlIDI6cmV0dXJuIG5ldyBZSjtjYXNlIDM6cmV0dXJuIG5ldyBDR3Q7Y2FzZSA0OnJldHVybiBuZXcgZFl0O2RlZmF1bHQ6dGhyb3cgbnQobmV3IFBuKCJObyBpbXBsZW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgZm9yIHRoZSBub2RlIHBsYWNlciAiKyh0LmYhPW51bGw/dC5mOiIiK3QuZykpKX19ZnVuY3Rpb24gcmNlKHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMDpyZXR1cm4gbmV3IEd2dDtjYXNlIDE6cmV0dXJuIG5ldyBRSjtjYXNlIDI6cmV0dXJuIG5ldyBISjtjYXNlIDM6cmV0dXJuIG5ldyBWSjtjYXNlIDQ6cmV0dXJuIG5ldyBBR3Q7ZGVmYXVsdDp0aHJvdyBudChuZXcgUG4oIk5vIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSBmb3IgdGhlIGN5Y2xlIGJyZWFrZXIgIisodC5mIT1udWxsP3QuZjoiIit0LmcpKSl9fWZ1bmN0aW9uIGQ1dCgpe2Q1dD1YLEV5ZT1uZXcgdm4oUmt0LGRlKDApKSxUeWU9bmV3IHZuKGprdCwwKSxwQ3Q9KFJEKCksX0cpLHh5ZT1uZXcgdm4oVGN0LHBDdCksZGUoMCkseXllPW5ldyB2bihfY3QsZGUoMSkpLHZDdD0oY3ooKSx6aHQpLF95ZT1uZXcgdm4oJGt0LHZDdCksd0N0PShOJCgpLEJodCksQ3llPW5ldyB2bih6a3Qsd0N0KSxiQ3Q9KFZ6KCksJGh0KSxreWU9bmV3IHZuKHFrdCxiQ3QpfWZ1bmN0aW9uIEtwbih0LGUsbil7dmFyIHI7cj1udWxsLGUmJihyPWUuZCksbEModCxuZXcgaTgoZS5uLmEtci5iK24uYSxlLm4uYi1yLmQrbi5iKSksbEModCxuZXcgaTgoZS5uLmEtci5iK24uYSxlLm4uYitlLm8uYityLmErbi5iKSksbEModCxuZXcgaTgoZS5uLmErZS5vLmErci5jK24uYSxlLm4uYi1yLmQrbi5iKSksbEModCxuZXcgaTgoZS5uLmErZS5vLmErci5jK24uYSxlLm4uYitlLm8uYityLmErbi5iKSl9ZnVuY3Rpb24gZzV0KHQsZSxuKXt2YXIgcixzLG87Zm9yKGUucD1uLG89anAoSTEodXQob3QoJDEsMSksTWUsMjAsMCxbbmV3IHNhKGUpLG5ldyBDcihlKV0pKSk7VnIobyk7KXI9dShJcihvKSwxMSksci5wPT0tMSYmZzV0KHQscixuKTtpZihlLmkuaz09KEduKCksY2EpKWZvcihzPW5ldyBTKGUuaS5qKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoUShzKSwxMSksciE9ZSYmci5wPT0tMSYmZzV0KHQscixuKX1mdW5jdGlvbiBpY2UodCl7dmFyIGUsbixyLHMsbztpZihzPXUoJGwoeXJuKE9RdCh0KSksYTIobmV3IGtlLG5ldyBuZSxuZXcgcGksdXQob3Qod2wsMSksb2UsMTMyLDAsWyhOMSgpLFlsKV0pKSksMTUpLHI9Tjcscy5nYygpPj0yKWZvcihuPXMuS2MoKSxlPXZlKG4uUGIoKSk7bi5PYigpOylvPWUsZT12ZShuLlBiKCkpLHI9Yi5NYXRoLm1pbihyLChJbihlKSxlLShJbihvKSxvKSkpO3JldHVybiByfWZ1bmN0aW9uIFlwbih0LGUpe3ZhciBuLHIscyxvLGg7cj1uZXcgY3Msa3MocixlLHIuYy5iLHIuYyk7ZG8gZm9yKG49KFpuKHIuYiE9MCksdShmaChyLHIuYS5hKSw4NikpLHQuYltuLmddPTEsbz1zaShuLmQsMCk7by5iIT1vLmQuYzspcz11KGlpKG8pLDE4OCksaD1zLmMsdC5iW2guZ109PTE/YWkodC5hLHMpOnQuYltoLmddPT0yP3QuYltoLmddPTE6a3MocixoLHIuYy5iLHIuYyk7d2hpbGUoci5iIT0wKX1mdW5jdGlvbiBYcG4odCxlKXt2YXIgbixyLHM7aWYoR3QoZSk9PT1HdChEcih0KSkpcmV0dXJuITA7aWYoIV90KGUsMTUpfHwocj11KGUsMTUpLHM9dC5nYygpLHMhPXIuZ2MoKSkpcmV0dXJuITE7aWYoX3Qociw1NCkpe2ZvcihuPTA7bjxzO24rKylpZighZGQodC5YYihuKSxyLlhiKG4pKSlyZXR1cm4hMTtyZXR1cm4hMH1lbHNlIHJldHVybiBpZm4odC5LYygpLHIuS2MoKSl9ZnVuY3Rpb24gc2NlKHQsZSl7dmFyIG4scjtpZih0LmMubGVuZ3RoIT0wKXtpZih0LmMubGVuZ3RoPT0yKW94KChTbigwLHQuYy5sZW5ndGgpLHUodC5jWzBdLDEwKSksKFZsKCksdTApKSxveCgoU24oMSx0LmMubGVuZ3RoKSx1KHQuY1sxXSwxMCkpLHliKTtlbHNlIGZvcihyPW5ldyBTKHQpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShRKHIpLDEwKSxveChuLGUpO3QuYz1OdChRbixNZSwxLDAsNSwxKX19ZnVuY3Rpb24gUXBuKHQpe3ZhciBlLG47aWYodC5jLmxlbmd0aCE9Mil0aHJvdyBudChuZXcgSG8oIk9yZGVyIG9ubHkgYWxsb3dlZCBmb3IgdHdvIHBhdGhzLiIpKTtlPShTbigwLHQuYy5sZW5ndGgpLHUodC5jWzBdLDE3KSksbj0oU24oMSx0LmMubGVuZ3RoKSx1KHQuY1sxXSwxNykpLGUuZC5pIT1uLmMuaSYmKHQuYz1OdChRbixNZSwxLDAsNSwxKSx0LmNbdC5jLmxlbmd0aF09bix0LmNbdC5jLmxlbmd0aF09ZSl9ZnVuY3Rpb24gWnBuKHQsZSl7dmFyIG4scixzLG8saCxkO2ZvcihyPW5ldyBpMixoPUUkKG5ldyBDbCh0LmcpKSxvPWguYS5lYygpLktjKCk7by5PYigpOyl7aWYocz11KG8uUGIoKSwxMCksIXMpe1FiKGUsIlRoZXJlIGFyZSBubyBjbGFzc2VzIGluIGEgYmFsYW5jZWQgbGF5b3V0LiIpO2JyZWFrfWQ9dC5qW3MucF0sbj11KFd2KHIsZCksMTUpLG58fChuPW5ldyBsZSx2MihyLGQsbikpLG4uRmMocyl9cmV0dXJuIHJ9ZnVuY3Rpb24gSnBuKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsaztpZihuKWZvcihvPW4uYS5sZW5ndGgscj1uZXcgSmIobyksZD0oci5iLXIuYSkqci5jPDA/KE9wKCksTWIpOm5ldyBCcChyKTtkLk9iKCk7KWg9dShkLlBiKCksMTkpLHc9VDgobixoLmEpLHcmJihrPW9vbihPMCh3LEdjdCksZSksQWkodC5mLGssdykscz1DZCBpbiB3LmEscyYmcV8oayxPMCh3LENkKSksSnoodyxrKSxHNHQodyxrKSl9ZnVuY3Rpb24gdGJuKHQsZSl7dmFyIG4scixzLG8saDtmb3IobXIoZSwiUG9ydCBzaWRlIHByb2Nlc3NpbmciLDEpLGg9bmV3IFModC5hKTtoLmE8aC5jLmMubGVuZ3RoOylzPXUoUShoKSwxMCksZ2xlKHMpO2ZvcihyPW5ldyBTKHQuYik7ci5hPHIuYy5jLmxlbmd0aDspZm9yKG49dShRKHIpLDI5KSxvPW5ldyBTKG4uYSk7by5hPG8uYy5jLmxlbmd0aDspcz11KFEobyksMTApLGdsZShzKTtvcihlKX1mdW5jdGlvbiBhY2UodCxlLG4pe3ZhciByLHMsbyxoLGQ7aWYocz10LmYsIXMmJihzPXUodC5hLmEuZWMoKS5LYygpLlBiKCksNTcpKSxjQyhzLGUsbiksdC5hLmEuZ2MoKSE9MSlmb3Iocj1lKm4saD10LmEuYS5lYygpLktjKCk7aC5PYigpOylvPXUoaC5QYigpLDU3KSxvIT1zJiYoZD1xNihvKSxkLmYuZD8oby5kLmQrPXIrUjEsby5kLmEtPXIrUjEpOmQuZi5hJiYoby5kLmEtPXIrUjEpKX1mdW5jdGlvbiBLc3QodCxlLG4scixzKXt2YXIgbyxoLGQsdyxrLF8sTSxCLHE7cmV0dXJuIGg9bi10LGQ9ci1lLG89Yi5NYXRoLmF0YW4yKGgsZCksdz1vK0lvdCxrPW8tSW90LF89cypiLk1hdGguc2luKHcpK3QsQj1zKmIuTWF0aC5jb3ModykrZSxNPXMqYi5NYXRoLnNpbihrKSt0LHE9cypiLk1hdGguY29zKGspK2UsTDEodXQob3QobmEsMSkscmUsOCwwLFtuZXcgUmUoXyxCKSxuZXcgUmUoTSxxKV0pKX1mdW5jdGlvbiBlYm4odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLF8sTTtzPW4sXz1lLG89XztkbyBvPXQuYVtvLnBdLGQ9KE09dC5nW28ucF0sWnQodC5wW00ucF0pK1p0KHQuZFtvLnBdKS1vLmQuZCksdz1wb24obyxyKSx3JiYoaD0oaz10Lmdbdy5wXSxadCh0LnBbay5wXSkrWnQodC5kW3cucF0pK3cuby5iK3cuZC5hKSxzPWIuTWF0aC5taW4ocyxkLShoK1UzKHQuayxvLHcpKSkpO3doaWxlKF8hPW8pO3JldHVybiBzfWZ1bmN0aW9uIG5ibih0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssXyxNO3M9bixfPWUsbz1fO2RvIG89dC5hW28ucF0saD0oTT10Lmdbby5wXSxadCh0LnBbTS5wXSkrWnQodC5kW28ucF0pK28uby5iK28uZC5hKSx3PUNjbihvLHIpLHcmJihkPShrPXQuZ1t3LnBdLFp0KHQucFtrLnBdKStadCh0LmRbdy5wXSktdy5kLmQpLHM9Yi5NYXRoLm1pbihzLGQtKGgrVTModC5rLG8sdykpKSk7d2hpbGUoXyE9byk7cmV0dXJuIHN9ZnVuY3Rpb24gemUodCxlKXt2YXIgbixyO3JldHVybiByPSghdC5vJiYodC5vPW5ldyBJbCgobnUoKSxfYiksJHcsdCwwKSksSmYodC5vLGUpKSxyPz8obj1lLndnKCksX3Qobiw0KSYmKG49PW51bGw/KCF0Lm8mJih0Lm89bmV3IElsKChudSgpLF9iKSwkdyx0LDApKSxEeih0Lm8sZSkpOighdC5vJiYodC5vPW5ldyBJbCgobnUoKSxfYiksJHcsdCwwKSksWXoodC5vLGUsbikpKSxuKX1mdW5jdGlvbiBmeSgpe2Z5PVgsQ2Y9bmV3IHozKCJIX0xFRlQiLDApLEowPW5ldyB6MygiSF9DRU5URVIiLDEpLFNmPW5ldyB6MygiSF9SSUdIVCIsMiksTGY9bmV3IHozKCJWX1RPUCIsMyksbDA9bmV3IHozKCJWX0NFTlRFUiIsNCksR2g9bmV3IHozKCJWX0JPVFRPTSIsNSksUWw9bmV3IHozKCJJTlNJREUiLDYpLEFmPW5ldyB6MygiT1VUU0lERSIsNyksVmg9bmV3IHozKCJIX1BSSU9SSVRZIiw4KX1mdW5jdGlvbiByYm4odCl7dmFyIGUsbixyLHMsbyxoLGQ7aWYoZT10LkhoKGpoKSxlJiYoZD1qcihKZigoIWUuYiYmKGUuYj1uZXcgQWwoKGxuKCksSmEpLHBjLGUpKSxlLmIpLCJzZXR0aW5nRGVsZWdhdGVzIikpLGQhPW51bGwpKXtmb3Iobj1uZXcgbGUscz1weShkLCJcXHcrIiksbz0wLGg9cy5sZW5ndGg7bzxoOysrbylyPXNbb10sbi5jW24uYy5sZW5ndGhdPXI7cmV0dXJuIG59cmV0dXJuIHBuKCkscG4oKSx1b31mdW5jdGlvbiBpYm4odCxlKXt2YXIgbixyLHMsbyxoLGQsdztpZighZS5mKXRocm93IG50KG5ldyBQbigiVGhlIGlucHV0IGVkZ2UgaXMgbm90IGEgdHJlZSBlZGdlLiIpKTtmb3Iobz1udWxsLHM9VGkscj1uZXcgUyh0LmQpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShRKHIpLDIxMyksZD1uLmQsdz1uLmUscXN0KHQsZCxlKSYmIXFzdCh0LHcsZSkmJihoPXcuZS1kLmUtbi5hLGg8cyYmKHM9aCxvPW4pKTtyZXR1cm4gb31mdW5jdGlvbiBzYm4odCl7dmFyIGUsbixyLHMsbyxoO2lmKCEodC5mLmUuYy5sZW5ndGg8PTEpKXtlPTAscz1Lb2UodCksbj1icztkb3tmb3IoZT4wJiYocz1uKSxoPW5ldyBTKHQuZi5lKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoUShoKSwxNDQpLCFCZShGZShLKG8sKEpEKCksdkV0KSkpKSYmKHI9Z21uKHQsbyksRmkoS2Yoby5kKSxyKSk7bj1Lb2UodCl9d2hpbGUoIUxlbih0LGUrKyxzLG4pKX19ZnVuY3Rpb24gYWJuKHQsZSl7dmFyIG4scixzO2ZvcihtcihlLCJMYXllciBjb25zdHJhaW50IHByZXByb2Nlc3NpbmciLDEpLG49bmV3IGxlLHM9bmV3IHhhKHQuYSwwKTtzLmI8cy5kLmdjKCk7KXI9KFpuKHMuYjxzLmQuZ2MoKSksdShzLmQuWGIocy5jPXMuYisrKSwxMCkpLExjbihyKSYmKE1kbihyKSxuLmNbbi5jLmxlbmd0aF09cixEbChzKSk7bi5jLmxlbmd0aD09MHx8ZWUodCwoYWUoKSxGbHQpLG4pLG9yKGUpfWZ1bmN0aW9uIG9ibih0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKG89dC5nLmEsaD10LmcuYixyPW5ldyBTKHQuZCk7ci5hPHIuYy5jLmxlbmd0aDspbj11KFEociksNzApLHM9bi5uLHQuYT09KE8xKCksbkUpfHx0Lmk9PShiZSgpLEhuKT9zLmE9bzp0LmE9PXJFfHx0Lmk9PShiZSgpLEJuKT9zLmE9byt0LmouYS1uLm8uYTpzLmE9bysodC5qLmEtbi5vLmEpLzIscy5iPWgsRmkocyxlKSxoKz1uLm8uYit0LmV9ZnVuY3Rpb24gY2JuKHQsZSxuKXt2YXIgcixzLG8saDtmb3IobXIobiwiUHJvY2Vzc29yIHNldCBjb29yZGluYXRlcyIsMSksdC5hPWUuYi5iPT0wPzE6ZS5iLmIsbz1udWxsLHI9c2koZS5iLDApOyFvJiZyLmIhPXIuZC5jOyloPXUoaWkociksODYpLEJlKEZlKEsoaCwobWMoKSxXeSkpKSkmJihvPWgscz1oLmUscy5hPXUoSyhoLERodCksMTkpLmEscy5iPTApO0RhZSh0LGR5dChvKSx6YyhuLDEpKSxvcihuKX1mdW5jdGlvbiB1Ym4odCxlLG4pe3ZhciByLHMsbztmb3IobXIobiwiUHJvY2Vzc29yIGRldGVybWluZSB0aGUgaGVpZ2h0IGZvciBlYWNoIGxldmVsIiwxKSx0LmE9ZS5iLmI9PTA/MTplLmIuYixzPW51bGwscj1zaShlLmIsMCk7IXMmJnIuYiE9ci5kLmM7KW89dShpaShyKSw4NiksQmUoRmUoSyhvLChtYygpLFd5KSkpKSYmKHM9byk7cyYmS2NlKHQsTDEodXQob3QoYjZuLDEpLGV4dCw4NiwwLFtzXSkpLG4pLG9yKG4pfWZ1bmN0aW9uIGxibih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXyxNO2s9dCx3PVBfKGssImluZGl2aWR1YWxTcGFjaW5ncyIpLHcmJihyPXMyKGUsKGRpKCksengpKSxoPSFyLGgmJihzPW5ldyB0bCxFbyhlLHp4LHMpKSxkPXUoemUoZSx6eCksMzczKSxNPXcsbz1udWxsLE0mJihvPShfPWhpdChNLE50KExlLHJlLDIsMCw2LDEpKSxuZXcgZ2V0KE0sXykpKSxvJiYobj1uZXcgeEd0KE0sZCksX2EobyxuKSkpfWZ1bmN0aW9uIGhibih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXyxNLEI7cmV0dXJuIHc9bnVsbCxNPXQsXz1udWxsLChBZGUgaW4gTS5hfHxMZGUgaW4gTS5hfHx3SCBpbiBNLmEpJiYoaz1udWxsLEI9cHl0KGUpLGg9UF8oTSxBZGUpLG49bmV3IHJ6dChCKSxCbG4obi5hLGgpLGQ9UF8oTSxMZGUpLHI9bmV3IGR6dChCKSxGbG4oci5hLGQpLG89VXYoTSx3SCkscz1uZXcgYnp0KEIpLGs9KGdkbihzLmEsbyksbyksXz1rKSx3PV8sd31mdW5jdGlvbiBmYm4odCxlKXt2YXIgbixyLHM7aWYoZT09PXQpcmV0dXJuITA7aWYoX3QoZSw1NDMpKXtpZihzPXUoZSw4MzUpLHQuYS5kIT1zLmEuZHx8WDModCkuZ2MoKSE9WDMocykuZ2MoKSlyZXR1cm4hMTtmb3Iocj1YMyhzKS5LYygpO3IuT2IoKTspaWYobj11KHIuUGIoKSw0MTYpLElRdCh0LG4uYS5jZCgpKSE9dShuLmEuZGQoKSwxNCkuZ2MoKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBkYm4odCl7dmFyIGUsbixyLHM7cmV0dXJuIHI9dSh0LmEsMTkpLmEscz11KHQuYiwxOSkuYSxlPXIsbj1zLHI9PTAmJnM9PTA/bi09MTpyPT0tMSYmczw9MD8oZT0wLG4tPTIpOnI8PTAmJnM+MD8oZS09MSxuLT0xKTpyPj0wJiZzPDA/KGUrPTEsbis9MSk6cj4wJiZzPj0wPyhlLT0xLG4rPTEpOihlKz0xLG4tPTEpLG5ldyB5YShkZShlKSxkZShuKSl9ZnVuY3Rpb24gZ2JuKHQsZSl7cmV0dXJuIHQuYzxlLmM/LTE6dC5jPmUuYz8xOnQuYjxlLmI/LTE6dC5iPmUuYj8xOnQuYSE9ZS5hP0ppKHQuYSktSmkoZS5hKTp0LmQ9PShCXygpLE5TKSYmZS5kPT1PUz8tMTp0LmQ9PU9TJiZlLmQ9PU5TPzE6MH1mdW5jdGlvbiBvY2UodCxlKXt2YXIgbixyLHMsbyxoO3JldHVybiBvPWUuYSxvLmMuaT09ZS5iP2g9by5kOmg9by5jLG8uYy5pPT1lLmI/cj1vLmM6cj1vLmQscz1xbG4odC5hLGgscikscz4wJiZzPE43PyhuPWVibih0LmEsci5pLHMsdC5jKSx2ZWUodC5hLHIuaSwtbiksbj4wKTpzPDAmJi1zPE43PyhuPW5ibih0LmEsci5pLC1zLHQuYyksdmVlKHQuYSxyLmksbiksbj4wKTohMX1mdW5jdGlvbiBwYm4odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLF8sTTtmb3Iocz0oZS10LmQpL3QuYy5jLmxlbmd0aCxvPTAsdC5hKz1uLHQuZD1lLE09bmV3IFModC5jKTtNLmE8TS5jLmMubGVuZ3RoOylfPXUoUShNKSwzMyksaz1fLmcsdz1fLmYsQ3UoXyxfLmkrbypzKSxTdShfLF8uaityKm4pLFF2KF8sXy5nK3MpLFh2KF8sdC5hKSwrK28sZD1fLmcsaD1fLmYsZW9lKF8sbmV3IFJlKGQsaCksbmV3IFJlKGssdykpfWZ1bmN0aW9uIGJibih0KXt2YXIgZSxuLHIscyxvLGgsZDtpZih0PT1udWxsKXJldHVybiBudWxsO2ZvcihkPXQubGVuZ3RoLHM9KGQrMSkvMnwwLGg9TnQoWHUsUDQsMjUscywxNSwxKSxkJTIhPTAmJihoWy0tc109UDV0KCgkcihkLTEsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChkLTEpKSkpLG49MCxyPTA7bjxzOysrbillPVA1dChUYSh0LHIrKykpLG89UDV0KFRhKHQscisrKSksaFtuXT0oZTw8NHxvKTw8MjQ+PjI0O3JldHVybiBofWZ1bmN0aW9uIHZibih0KXtpZih0LnBlKCkpe3ZhciBlPXQuYztlLnFlKCk/dC5vPSJbIitlLm46ZS5wZSgpP3Qubz0iWyIrZS5uZSgpOnQubz0iW0wiK2UubmUoKSsiOyIsdC5iPWUubWUoKSsiW10iLHQuaz1lLm9lKCkrIltdIjtyZXR1cm59dmFyIG49dC5qLHI9dC5kO3I9ci5zcGxpdCgiLyIpLHQubz1RaXQoIi4iLFtuLFFpdCgiJCIscildKSx0LmI9UWl0KCIuIixbbixRaXQoIi4iLHIpXSksdC5rPXJbci5sZW5ndGgtMV19ZnVuY3Rpb24gd2JuKHQsZSl7dmFyIG4scixzLG8saDtmb3IoaD1udWxsLG89bmV3IFModC5lLmEpO28uYTxvLmMuYy5sZW5ndGg7KWlmKHM9dShRKG8pLDEyMSkscy5iLmEuYy5sZW5ndGg9PXMuZy5hLmMubGVuZ3RoKXtmb3Iocj1zLmUsaD1lZ24ocyksbj1zLmUtdShoLmEsMTkpLmErMTtuPHMuZSt1KGguYiwxOSkuYTtuKyspZVtuXTxlW3JdJiYocj1uKTtlW3JdPGVbcy5lXSYmKC0tZVtzLmVdLCsrZVtyXSxzLmU9cil9fWZ1bmN0aW9uIFlzdCh0KXt2YXIgZSxuLHIscyxvLGgsZCx3O2ZvcihzPWJzLHI9TnMsbj1uZXcgUyh0LmUuYik7bi5hPG4uYy5jLmxlbmd0aDspZm9yKGU9dShRKG4pLDI5KSxoPW5ldyBTKGUuYSk7aC5hPGguYy5jLmxlbmd0aDspbz11KFEoaCksMTApLHc9WnQodC5wW28ucF0pLGQ9dytadCh0LmJbdC5nW28ucF0ucF0pLHM9Yi5NYXRoLm1pbihzLHcpLHI9Yi5NYXRoLm1heChyLGQpO3JldHVybiByLXN9ZnVuY3Rpb24gcDV0KHQsZSxuLHIpe3ZhciBzLG8saCxkLHc7Zm9yKHM9cTV0KHQsZSksZD0wLHc9cy5nYygpO2Q8dzsrK2QpaWYobz11KHMuWGIoZCksMTcwKSx1bihyLHk4KE1vKHQsbykpKSl7aWYoaD1aTShNbyh0LG8pKSxuPT1udWxsKXtpZihoPT1udWxsKXJldHVybiBvfWVsc2UgaWYodW4obixoKSlyZXR1cm4gb31yZXR1cm4gbnVsbH1mdW5jdGlvbiBiNXQodCxlLG4scil7dmFyIHMsbyxoLGQsdztmb3Iocz11YXQodCxlKSxkPTAsdz1zLmdjKCk7ZDx3OysrZClpZihvPXUocy5YYihkKSwxNzApLHVuKHIseTgoTW8odCxvKSkpKXtpZihoPVpNKE1vKHQsbykpLG49PW51bGwpe2lmKGg9PW51bGwpcmV0dXJuIG99ZWxzZSBpZih1bihuLGgpKXJldHVybiBvfXJldHVybiBudWxsfWZ1bmN0aW9uIG1ibih0LGUsbil7dmFyIHIscyxvLGgsZCx3O2lmKGg9bmV3IEo1LGQ9aHUodC5lLlRnKCksZSkscj11KHQuZywxMTkpLHNvKCksdShlLDY2KS5PaigpKWZvcihvPTA7bzx0Lmk7KytvKXM9cltvXSxkLnJsKHMuYWsoKSkmJk9yKGgscyk7ZWxzZSBmb3Iobz0wO288dC5pOysrbylzPXJbb10sZC5ybChzLmFrKCkpJiYodz1zLmRkKCksT3IoaCxuP2RDKHQsZSxvLGguaSx3KTp3KSk7cmV0dXJuIFh3dChoKX1mdW5jdGlvbiB5Ym4odCxlKXt2YXIgbixyLHMsbyxoO2ZvcihuPW5ldyBlQyhhRSkscz0ocngoKSx1dChvdChhRSwxKSxvZSwyMjcsMCxbc0UsZFMsaUUsT3ksVjQsSDRdKSksbz0wLGg9cy5sZW5ndGg7bzxoOysrbylyPXNbb10sWTJ0KG4scixuZXcgbGUpO3JldHVybiB5cyh4dShXaShlYyhuZXcga24obnVsbCxuZXcgVG4odC5iLDE2KSksbmV3IG5GKSxuZXcgckYpLG5ldyBFZyhlKSksbmV3IGFkKG4pKSxufWZ1bmN0aW9uIHNxKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxfLE0sQjtmb3Iobz1lLktjKCk7by5PYigpOylzPXUoby5QYigpLDMzKSxfPXMuaStzLmcvMixCPXMuaitzLmYvMix3PXQuZixoPXcuaSt3LmcvMixkPXcuait3LmYvMixrPV8taCxNPUItZCxyPWIuTWF0aC5zcXJ0KGsqaytNKk0pLGsqPXQuZS9yLE0qPXQuZS9yLG4/KF8tPWssQi09TSk6KF8rPWssQis9TSksQ3UocyxfLXMuZy8yKSxTdShzLEItcy5mLzIpfWZ1bmN0aW9uIHY0KHQpe3ZhciBlLG4scjtpZighdC5jJiZ0LmIhPW51bGwpe2ZvcihlPXQuYi5sZW5ndGgtNDtlPj0wO2UtPTIpZm9yKG49MDtuPD1lO24rPTIpKHQuYltuXT50LmJbbisyXXx8dC5iW25dPT09dC5iW24rMl0mJnQuYltuKzFdPnQuYltuKzNdKSYmKHI9dC5iW24rMl0sdC5iW24rMl09dC5iW25dLHQuYltuXT1yLHI9dC5iW24rM10sdC5iW24rM109dC5iW24rMV0sdC5iW24rMV09cik7dC5jPSEwfX1mdW5jdGlvbiBjY2UodCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrO2ZvcihoPWU9PTE/SnV0Olp1dCxvPWguYS5lYygpLktjKCk7by5PYigpOylmb3Iocz11KG8uUGIoKSwxMDMpLHc9dShQaSh0LmYuYyxzKSwyMSkuS2MoKTt3Lk9iKCk7KXN3aXRjaChkPXUody5QYigpLDQ2KSxyPXUoZC5iLDgxKSxrPXUoZC5hLDE4OSksbj1rLmMscy5nKXtjYXNlIDI6Y2FzZSAxOnIuZy5kKz1uO2JyZWFrO2Nhc2UgNDpjYXNlIDM6ci5nLmMrPW59fWZ1bmN0aW9uIHhibih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXztmb3Ioaz0tMSxfPTAsaD10LGQ9MCx3PWgubGVuZ3RoO2Q8dzsrK2Qpe2ZvcihvPWhbZF0sbj1uZXcgREt0KGs9PS0xP3RbMF06dFtrXSxlLChZXygpLHVHKSkscj0wO3I8by5sZW5ndGg7cisrKWZvcihzPXIrMTtzPG8ubGVuZ3RoO3MrKyllYShvW3JdLChhZSgpLExjKSkmJmVhKG9bc10sTGMpJiZMaGUobixvW3JdLG9bc10pPjAmJisrXzsrK2t9cmV0dXJuIF99ZnVuY3Rpb24gbWYodCl7dmFyIGUsbjtyZXR1cm4gbj1uZXcgRmwoTXAodC5nbSkpLG4uYSs9IkAiLFlyKG4sKGU9SmkodCk+Pj4wLGUudG9TdHJpbmcoMTYpKSksdC5raCgpPyhuLmErPSIgKGVQcm94eVVSSTogIix3YyhuLHQucWgoKSksdC4kZygpJiYobi5hKz0iIGVDbGFzczogIix3YyhuLHQuJGcoKSkpLG4uYSs9IikiKTp0LiRnKCkmJihuLmErPSIgKGVDbGFzczogIix3YyhuLHQuJGcoKSksbi5hKz0iKSIpLG4uYX1mdW5jdGlvbiBwQyh0KXt2YXIgZSxuLHIscztpZih0LmUpdGhyb3cgbnQobmV3IEhvKChMMChJdXQpLHdvdCtJdXQuayttb3QpKSk7Zm9yKHQuZD09KGZvKCksYzApJiZDcSh0LEhoKSxuPW5ldyBTKHQuYS5hKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoUShuKSwzMDcpLGUuZz1lLmk7Zm9yKHM9bmV3IFModC5hLmIpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShRKHMpLDU3KSxyLmk9TnM7cmV0dXJuIHQuYi5MZSh0KSx0fWZ1bmN0aW9uIGtibih0LGUpe3ZhciBuLHIscyxvLGg7aWYoZTwyKnQuYil0aHJvdyBudChuZXcgUG4oIlRoZSBrbm90IHZlY3RvciBtdXN0IGhhdmUgYXQgbGVhc3QgdHdvIHRpbWUgdGhlIGRpbWVuc2lvbiBlbGVtZW50cy4iKSk7Zm9yKHQuZj0xLHM9MDtzPHQuYjtzKyspdWUodC5lLDApO2ZvcihoPWUrMS0yKnQuYixuPWgsbz0xO288aDtvKyspdWUodC5lLG8vbik7aWYodC5kKWZvcihyPTA7cjx0LmI7cisrKXVlKHQuZSwxKX1mdW5jdGlvbiB1Y2UodCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLF87aWYoaz1lLF89dSh0eihYbnQodC5pKSxrKSwzMyksIV8pdGhyb3cgcz1PMChrLENkKSxkPSJVbmFibGUgdG8gZmluZCBlbGsgbm9kZSBmb3IganNvbiBvYmplY3QgJyIrcyx3PWQrIicgUGFuaWMhIixudChuZXcgb2QodykpO289VXYoaywiZWRnZXMiKSxuPW5ldyBkR3QodCxfKSxpcG4obi5hLG4uYixvKSxoPVV2KGssVWN0KSxyPW5ldyBZJHQodCksYjFuKHIuYSxoKX1mdW5jdGlvbiBsY2UodCxlLG4scil7dmFyIHMsbyxoLGQsdztpZihyIT1udWxsKXtpZihzPXQuZFtlXSxzKXtmb3Iobz1zLmcsdz1zLmksZD0wO2Q8dzsrK2QpaWYoaD11KG9bZF0sMTMzKSxoLlNoKCk9PW4mJlNpKHIsaC5jZCgpKSlyZXR1cm4gZH19ZWxzZSBpZihzPXQuZFtlXSxzKXtmb3Iobz1zLmcsdz1zLmksZD0wO2Q8dzsrK2QpaWYoaD11KG9bZF0sMTMzKSxHdChoLmNkKCkpPT09R3QocikpcmV0dXJuIGR9cmV0dXJuLTF9ZnVuY3Rpb24gYjcodCxlKXt2YXIgbixyLHM7cmV0dXJuIG49ZT09bnVsbD9jYyhGbyh0LmYsbnVsbCkpOlVUKHQuZyxlKSxfdChuLDIzNSk/KHM9dShuLDIzNSkscy5RaCgpPT1udWxsLHMpOl90KG4sNDk4KT8ocj11KG4sMTkzOCkscz1yLmEscyYmKHMueWI9PW51bGx8fChlPT1udWxsP2x1KHQuZixudWxsLHMpOm53KHQuZyxlLHMpKSkscyk6bnVsbH1mdW5jdGlvbiBFYm4odCl7STV0KCk7dmFyIGUsbixyLHMsbyxoLGQ7aWYodD09bnVsbHx8KHM9dC5sZW5ndGgscyUyIT0wKSlyZXR1cm4gbnVsbDtmb3IoZT1SJCh0KSxvPXMvMnwwLG49TnQoWHUsUDQsMjUsbywxNSwxKSxyPTA7cjxvO3IrKyl7aWYoaD1sQVtlW3IqMl1dLGg9PS0xfHwoZD1sQVtlW3IqMisxXV0sZD09LTEpKXJldHVybiBudWxsO25bcl09KGg8PDR8ZCk8PDI0Pj4yNH1yZXR1cm4gbn1mdW5jdGlvbiBUYm4odCxlLG4pe3ZhciByLHMsbztpZihzPXUoeG8odC5pLGUpLDMwNiksIXMpaWYocz1uZXcgdWVlKHQuZCxlLG4pLE82KHQuaSxlLHMpLFQzdChlKSkkWGUodC5hLGUuYyxlLmIscyk7ZWxzZSBzd2l0Y2gobz1oZ24oZSkscj11KHhvKHQucCxvKSwyNDQpLG8uZyl7Y2FzZSAxOmNhc2UgMzpzLmo9ITAsZWV0KHIsZS5iLHMpO2JyZWFrO2Nhc2UgNDpjYXNlIDI6cy5rPSEwLGVldChyLGUuYyxzKX1yZXR1cm4gc31mdW5jdGlvbiBfYm4odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrO2lmKGQ9bmV3IEo1LHc9aHUodC5lLlRnKCksZSkscz11KHQuZywxMTkpLHNvKCksdShlLDY2KS5PaigpKWZvcihoPTA7aDx0Lmk7KytoKW89c1toXSx3LnJsKG8uYWsoKSkmJk9yKGQsbyk7ZWxzZSBmb3IoaD0wO2g8dC5pOysraClvPXNbaF0sdy5ybChvLmFrKCkpJiYoaz1vLmRkKCksT3IoZCxyP2RDKHQsZSxoLGQuaSxrKTprKSk7cmV0dXJuIGIzdChkLG4pfWZ1bmN0aW9uIGhjZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGs7aWYocz10LmJbZS5wXSxzPj0wKXJldHVybiBzO2ZvcihvPTEsZD1uZXcgUyhlLmopO2QuYTxkLmMuYy5sZW5ndGg7KWZvcihoPXUoUShkKSwxMSkscj1uZXcgUyhoLmcpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShRKHIpLDE3KSxrPW4uZC5pLGUhPWsmJih3PWhjZSh0LGspLG89Yi5NYXRoLm1heChvLHcrMSkpO3JldHVybiBfbG4odCxlLG8pLG99ZnVuY3Rpb24gZmNlKHQsZSxuKXt2YXIgcixzLG87Zm9yKHI9MTtyPHQuYy5sZW5ndGg7cisrKXtmb3Iobz0oU24ocix0LmMubGVuZ3RoKSx1KHQuY1tyXSwxMCkpLHM9cjtzPjAmJmUudWUoKFNuKHMtMSx0LmMubGVuZ3RoKSx1KHQuY1tzLTFdLDEwKSksbyk+MDspbGgodCxzLChTbihzLTEsdC5jLmxlbmd0aCksdSh0LmNbcy0xXSwxMCkpKSwtLXM7U24ocyx0LmMubGVuZ3RoKSx0LmNbc109b31uLmE9bmV3IEFyLG4uYj1uZXcgQXJ9ZnVuY3Rpb24gQ2JuKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxfO2ZvcihfPShyPXUoZS5lJiZlLmUoKSw5KSxuZXcgb2gocix1KGZmKHIsci5sZW5ndGgpLDkpLDApKSx3PXB5KG4sIltcXFtcXF1cXHMsXSsiKSxvPXcsaD0wLGQ9by5sZW5ndGg7aDxkOysraClpZihzPW9baF0sdXkocykubGVuZ3RoIT0wKXtpZihrPV9vZSh0LHMpLGs9PW51bGwpcmV0dXJuIG51bGw7d2YoXyx1KGssMjIpKX1yZXR1cm4gX31mdW5jdGlvbiBTYm4odCl7dmFyIGUsbixyO2ZvcihuPW5ldyBTKHQuYS5hLmIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShRKG4pLDgxKSxyPShJbigwKSwwKSxyPjAmJighKFBwKHQuYS5jKSYmZS5uLmQpJiYhKGE4KHQuYS5jKSYmZS5uLmIpJiYoZS5nLmQtPWIuTWF0aC5tYXgoMCxyLzItLjUpKSwhKFBwKHQuYS5jKSYmZS5uLmEpJiYhKGE4KHQuYS5jKSYmZS5uLmMpJiYoZS5nLmErPWIuTWF0aC5tYXgoMCxyLTEpKSl9ZnVuY3Rpb24gZGNlKHQsZSxuKXt2YXIgcixzO2lmKCh0LmMtdC5iJnQuYS5sZW5ndGgtMSk9PTIpZT09KGJlKCksT24pfHxlPT1Ibj8oRyQodShLXyh0KSwxNSksKFZsKCksdTApKSxHJCh1KEtfKHQpLDE1KSx5YikpOihHJCh1KEtfKHQpLDE1KSwoVmwoKSx5YikpLEckKHUoS18odCksMTUpLHUwKSk7ZWxzZSBmb3Iocz1uZXcgTV8odCk7cy5hIT1zLmI7KXI9dShteihzKSwxNSksRyQocixuKX1mdW5jdGlvbiBBYm4odCxlKXt2YXIgbixyLHMsbyxoLGQsdztmb3Iocz1oOChuZXcgZ3B0KHQpKSxkPW5ldyB4YShzLHMuYy5sZW5ndGgpLG89aDgobmV3IGdwdChlKSksdz1uZXcgeGEobyxvLmMubGVuZ3RoKSxoPW51bGw7ZC5iPjAmJncuYj4wJiYobj0oWm4oZC5iPjApLHUoZC5hLlhiKGQuYz0tLWQuYiksMzMpKSxyPShabih3LmI+MCksdSh3LmEuWGIody5jPS0tdy5iKSwzMykpLG49PXIpOyloPW47cmV0dXJuIGh9ZnVuY3Rpb24gcGwodCxlKXt2YXIgbixyLHMsbyxoLGQ7cmV0dXJuIG89dC5hKmdvdCt0LmIqMTUwMixkPXQuYipnb3QrMTEsbj1iLk1hdGguZmxvb3IoZCpQSSksbys9bixkLT1uKlA2dCxvJT1QNnQsdC5hPW8sdC5iPWQsZTw9MjQ/Yi5NYXRoLmZsb29yKHQuYSp4N3RbZV0pOihzPXQuYSooMTw8ZS0yNCksaD1iLk1hdGguZmxvb3IodC5iKms3dFtlXSkscj1zK2gscj49MjE0NzQ4MzY0OCYmKHItPWxvdCkscil9ZnVuY3Rpb24gZ2NlKHQsZSxuKXt2YXIgcixzLG8saDtSUXQodCxlKT5SUXQodCxuKT8ocj1yYyhuLChiZSgpLEhuKSksdC5kPXIuZGMoKT8wOlNudCh1KHIuWGIoMCksMTEpKSxoPXJjKGUsQm4pLHQuYj1oLmRjKCk/MDpTbnQodShoLlhiKDApLDExKSkpOihzPXJjKG4sKGJlKCksQm4pKSx0LmQ9cy5kYygpPzA6U250KHUocy5YYigwKSwxMSkpLG89cmMoZSxIbiksdC5iPW8uZGMoKT8wOlNudCh1KG8uWGIoMCksMTEpKSl9ZnVuY3Rpb24gcGNlKHQpe3ZhciBlLG4scixzLG8saCxkO2lmKHQmJihlPXQuSGgoamgpLGUmJihoPWpyKEpmKCghZS5iJiYoZS5iPW5ldyBBbCgobG4oKSxKYSkscGMsZSkpLGUuYiksImNvbnZlcnNpb25EZWxlZ2F0ZXMiKSksaCE9bnVsbCkpKXtmb3IoZD1uZXcgbGUscj1weShoLCJcXHcrIikscz0wLG89ci5sZW5ndGg7czxvOysrcyluPXJbc10sZC5jW2QuYy5sZW5ndGhdPW47cmV0dXJuIGR9cmV0dXJuIHBuKCkscG4oKSx1b31mdW5jdGlvbiBiY2UodCxlKXt2YXIgbixyLHMsbztmb3Iobj10Lm8uYSxvPXUodShQaSh0LnIsZSksMjEpLDg0KS5LYygpO28uT2IoKTspcz11KG8uUGIoKSwxMTEpLHMuZS5hPW4qWnQodmUocy5iLldlKFpIKSkpLHMuZS5iPShyPXMuYixyLlhlKChkaSgpLG1sKSk/ci5IZigpPT0oYmUoKSxPbik/LXIucmYoKS5iLVp0KHZlKHIuV2UobWwpKSk6WnQodmUoci5XZShtbCkpKTpyLkhmKCk9PShiZSgpLE9uKT8tci5yZigpLmI6MCl9ZnVuY3Rpb24gTGJuKHQpe3ZhciBlLG4scixzLG8saCxkLHc7ZT0hMCxzPW51bGwsbz1udWxsO3Q6Zm9yKHc9bmV3IFModC5hKTt3LmE8dy5jLmMubGVuZ3RoOylmb3IoZD11KFEodyksMTApLHI9bmV3IGFyKGxyKFVvKGQpLmEuS2MoKSxuZXcgSCkpO1ZyKHIpOyl7aWYobj11KElyKHIpLDE3KSxzJiZzIT1kKXtlPSExO2JyZWFrIHR9aWYocz1kLGg9bi5jLmksbyYmbyE9aCl7ZT0hMTticmVhayB0fW89aH1yZXR1cm4gZX1mdW5jdGlvbiBNYm4odCxlLG4pe3ZhciByLHMsbyxoLGQsdztmb3Iobz0tMSxkPS0xLGg9MDtoPGUuYy5sZW5ndGgmJihzPShTbihoLGUuYy5sZW5ndGgpLHUoZS5jW2hdLDMyOSkpLCEocy5jPnQuYykpO2grKylzLmE+PXQucyYmKG88MCYmKG89aCksZD1oKTtyZXR1cm4gdz0odC5zK3QuYykvMixvPj0wJiYocj1od24odCxlLG8sZCksdz15WWUoKFNuKHIsZS5jLmxlbmd0aCksdShlLmNbcl0sMzI5KSkpLHhwbihlLHIsbikpLHd9ZnVuY3Rpb24gWHN0KCl7WHN0PVgsR3llPW5ldyBhbygoZGkoKSxqeCksMS4zKSxQQ3Q9UFN0LHFDdD1uZXcgTXYoMTUpLFp5ZT1uZXcgYW8oVjIscUN0KSx0M2U9bmV3IGFvKEcyLDE1KSxVeWU9QkcsWXllPUgyLFh5ZT1vNSxReWU9bWIsS3llPWE1LGpDdD1ZTyxKeWU9S3ksekN0PShsNXQoKSxxeWUpLFJDdD0keWUsJEN0PXp5ZSxIQ3Q9SHllLEZDdD1qeWUsQkN0PVJHLFd5ZT1CU3QsUk89UnllLE5DdD1CeWUsVkN0PVZ5ZX1mdW5jdGlvbiBOcih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGs7Zm9yKGg9KG89bmV3IEpGLG8pLFFtdChoLChJbihlKSxlKSksaz0oIWguYiYmKGguYj1uZXcgQWwoKGxuKCksSmEpLHBjLGgpKSxoLmIpLHc9MTt3PG4ubGVuZ3RoO3crPTIpWXooayxuW3ctMV0sblt3XSk7Zm9yKHI9KCF0LkFiJiYodC5BYj1uZXcgaGUoZWksdCwwLDMpKSx0LkFiKSxkPTA7ZDwwOysrZClzPU5lbih1KEF0KHIsci5pLTEpLDU5MCkpLHI9cztPcihyLGgpfWZ1bmN0aW9uIHZjZSh0LGUsbil7dmFyIHIscyxvO2ZvcihrUWUuY2FsbCh0aGlzLG5ldyBsZSksdGhpcy5hPWUsdGhpcy5iPW4sdGhpcy5lPXQscj0odC5iJiZ3YXQodCksdC5hKSx0aGlzLmQ9RVh0KHIuYSx0aGlzLmEpLHRoaXMuYz1FWHQoci5iLHRoaXMuYiksc2xuKHRoaXMsdGhpcy5kLHRoaXMuYyksUWduKHRoaXMpLG89dGhpcy5lLmUuYS5lYygpLktjKCk7by5PYigpOylzPXUoby5QYigpLDI2Nikscy5jLmMubGVuZ3RoPjAmJmkzbih0aGlzLHMpfWZ1bmN0aW9uIHY1dCh0LGUsbixyLHMsbyl7dmFyIGgsZCx3O2lmKCFzW2UuYl0pe2ZvcihzW2UuYl09ITAsaD1yLCFoJiYoaD1uZXcgQyQpLHVlKGguZSxlKSx3PW9bZS5iXS5LYygpO3cuT2IoKTspZD11KHcuUGIoKSwyODIpLCEoZC5kPT1ufHxkLmM9PW4pJiYoZC5jIT1lJiZ2NXQodCxkLmMsZSxoLHMsbyksZC5kIT1lJiZ2NXQodCxkLmQsZSxoLHMsbyksdWUoaC5jLGQpLFJzKGguZCxkLmIpKTtyZXR1cm4gaH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBEYm4odCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKGU9MCxzPW5ldyBTKHQuZSk7cy5hPHMuYy5jLmxlbmd0aDspcj11KFEocyksMTcpLG49QzgobmV3IGtuKG51bGwsbmV3IFRuKHIuYiwxNikpLG5ldyB5WSksbiYmKytlO2ZvcihoPW5ldyBTKHQuZyk7aC5hPGguYy5jLmxlbmd0aDspbz11KFEoaCksMTcpLGQ9QzgobmV3IGtuKG51bGwsbmV3IFRuKG8uYiwxNikpLG5ldyB4WSksZCYmKytlO3JldHVybiBlPj0yfWZ1bmN0aW9uIElibih0LGUpe3ZhciBuLHIscyxvO2ZvcihtcihlLCJTZWxmLUxvb3AgcHJlLXByb2Nlc3NpbmciLDEpLHI9bmV3IFModC5hKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoUShyKSwxMCksZ2xuKG4pJiYocz0obz1uZXcgT2llKG4pLGVlKG4sKGFlKCksaEUpLG8pLFh3bihvKSxvKSx5cyh4dShlYyhuZXcga24obnVsbCxuZXcgVG4ocy5kLDE2KSksbmV3IGRGKSxuZXcgblgpLG5ldyByWCksRzJuKHMpKTtvcihlKX1mdW5jdGlvbiBPYm4odCxlLG4scixzKXt2YXIgbyxoLGQsdyxrLF87Zm9yKG89dC5jLmQuaixoPXUoZTEobiwwKSw4KSxfPTE7XzxuLmI7XysrKWs9dShlMShuLF8pLDgpLGtzKHIsaCxyLmMuYixyLmMpLGQ9bGQoRmkobmV3IFNvKGgpLGspLC41KSx3PWxkKG5ldyB3cnQoQXl0KG8pKSxzKSxGaShkLHcpLGtzKHIsZCxyLmMuYixyLmMpLGg9ayxvPWU9PTA/a3oobyk6UXl0KG8pO2FpKHIsKFpuKG4uYiE9MCksdShuLmMuYi5jLDgpKSl9ZnVuY3Rpb24gTmJuKHQpe2Z5KCk7dmFyIGUsbixyO3JldHVybiBuPUtpKFFsLHV0KG90KHZvLDEpLG9lLDkzLDAsW0FmXSkpLCEoQUQoaCQobix0KSk+MXx8KGU9S2koQ2YsdXQob3Qodm8sMSksb2UsOTMsMCxbSjAsU2ZdKSksQUQoaCQoZSx0KSk+MSl8fChyPUtpKExmLHV0KG90KHZvLDEpLG9lLDkzLDAsW2wwLEdoXSkpLEFEKGgkKHIsdCkpPjEpKX1mdW5jdGlvbiBQYm4odCxlKXt2YXIgbixyLHM7cmV0dXJuIG49ZS5IaCh0LmEpLG4mJihzPWpyKEpmKCghbi5iJiYobi5iPW5ldyBBbCgobG4oKSxKYSkscGMsbikpLG4uYiksImFmZmlsaWF0aW9uIikpLHMhPW51bGwpPyhyPWRqKHMsTHUoMzUpKSxyPT0tMT9CaXQodCxrXyh0LHpsKGUuSGooKSkpLHMpOnI9PTA/Qml0KHQsbnVsbCxzLnN1YnN0cigxKSk6Qml0KHQscy5zdWJzdHIoMCxyKSxzLnN1YnN0cihyKzEpKSk6bnVsbH1mdW5jdGlvbiBGYm4odCl7dmFyIGUsbixyO3RyeXtyZXR1cm4gdD09bnVsbD9NdTpXbyh0KX1jYXRjaChzKXtpZihzPXJzKHMpLF90KHMsMTAyKSlyZXR1cm4gZT1zLHI9TXAoZGwodCkpKyJAIisobj0ocWQoKSxNM3QodCk+Pj4wKSxuLnRvU3RyaW5nKDE2KSksVGhuKEVjbigpLChyOCgpLCJFeGNlcHRpb24gZHVyaW5nIGxlbmllbnRGb3JtYXQgZm9yICIrciksZSksIjwiK3IrIiB0aHJldyAiK01wKGUuZ20pKyI+Ijt0aHJvdyBudChzKX19ZnVuY3Rpb24gd2NlKHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMDpyZXR1cm4gbmV3IFVKO2Nhc2UgMTpyZXR1cm4gbmV3IERCO2Nhc2UgMjpyZXR1cm4gbmV3IHlWdDtjYXNlIDM6cmV0dXJuIG5ldyBJTDtjYXNlIDQ6cmV0dXJuIG5ldyB6V3Q7Y2FzZSA1OnJldHVybiBuZXcgV0o7ZGVmYXVsdDp0aHJvdyBudChuZXcgUG4oIk5vIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSBmb3IgdGhlIGxheWVyZXIgIisodC5mIT1udWxsP3QuZjoiIit0LmcpKSl9fWZ1bmN0aW9uIHc1dCh0LGUsbil7dmFyIHIscyxvO2ZvcihvPW5ldyBTKHQudCk7by5hPG8uYy5jLmxlbmd0aDspcj11KFEobyksMjY4KSxyLmIuczwwJiZyLmM+MCYmKHIuYi5uLT1yLmMsci5iLm48PTAmJnIuYi51PjAmJmFpKGUsci5iKSk7Zm9yKHM9bmV3IFModC5pKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoUShzKSwyNjgpLHIuYS5zPDAmJnIuYz4wJiYoci5hLnUtPXIuYyxyLmEudTw9MCYmci5hLm4+MCYmYWkobixyLmEpKX1mdW5jdGlvbiBhcSh0KXt2YXIgZSxuLHIscyxvO2lmKHQuZz09bnVsbCYmKHQuZD10LnNpKHQuZiksT3IodCx0LmQpLHQuYykpcmV0dXJuIG89dC5mLG87aWYoZT11KHQuZ1t0LmktMV0sNDcpLHM9ZS5QYigpLHQuZT1lLG49dC5zaShzKSxuLk9iKCkpdC5kPW4sT3IodCxuKTtlbHNlIGZvcih0LmQ9bnVsbDshZS5PYigpJiYobHModC5nLC0tdC5pLG51bGwpLHQuaSE9MCk7KXI9dSh0LmdbdC5pLTFdLDQ3KSxlPXI7cmV0dXJuIHN9ZnVuY3Rpb24gQmJuKHQsZSl7dmFyIG4scixzLG8saCxkO2lmKHI9ZSxzPXIuYWsoKSxHMCh0LmUscykpe2lmKHMuaGkoKSYmayQodCxzLHIuZGQoKSkpcmV0dXJuITF9ZWxzZSBmb3IoZD1odSh0LmUuVGcoKSxzKSxuPXUodC5nLDExOSksbz0wO288dC5pOysrbylpZihoPW5bb10sZC5ybChoLmFrKCkpKXJldHVybiBTaShoLHIpPyExOih1KGw0KHQsbyxlKSw3MiksITApO3JldHVybiBPcih0LGUpfWZ1bmN0aW9uIFJibih0LGUsbixyKXt2YXIgcyxvLGgsZDtmb3Iocz1uZXcgSDAodCksQzAocywoR24oKSxQbCkpLGVlKHMsKGFlKCksSWkpLGUpLGVlKHMsVE8sciksZWUocywoeGUoKSx3cyksKHZhKCksS2MpKSxlZShzLGExLGUuYyksZWUocyxxaCxlLmQpLFZjZShlLHMpLGQ9Yi5NYXRoLmZsb29yKG4vMiksaD1uZXcgUyhzLmopO2guYTxoLmMuYy5sZW5ndGg7KW89dShRKGgpLDExKSxvLm4uYj1kO3JldHVybiBzfWZ1bmN0aW9uIGpibih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXztmb3Iodz1IZCh0LmMtdC5iJnQuYS5sZW5ndGgtMSksaz1udWxsLF89bnVsbCxvPW5ldyBNXyh0KTtvLmEhPW8uYjspcz11KG16KG8pLDEwKSxuPShkPXUoSyhzLChhZSgpLGExKSksMTEpLGQ/ZC5pOm51bGwpLHI9KGg9dShLKHMscWgpLDExKSxoP2guaTpudWxsKSwoayE9bnx8XyE9cikmJihzY2UodyxlKSxrPW4sXz1yKSx3LmNbdy5jLmxlbmd0aF09cztzY2UodyxlKX1mdW5jdGlvbiBtY2UodCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKGU9MCxyPW5ldyBTKHQuYSk7ci5hPHIuYy5jLmxlbmd0aDspZm9yKG49dShRKHIpLDEwKSxvPW5ldyBhcihscigkcyhuKS5hLktjKCksbmV3IEgpKTtWcihvKTspcz11KElyKG8pLDE3KSx0PT1zLmQuaS5jJiZzLmMuaj09KGJlKCksQm4pJiYoaD1TMShzLmMpLmIsZD1TMShzLmQpLmIsZT1iLk1hdGgubWF4KGUsYi5NYXRoLmFicyhkLWgpKSk7cmV0dXJuIGV9ZnVuY3Rpb24gJGJuKHQsZSxuKXt2YXIgcixzLG87bXIobiwiUmVtb3ZlIG92ZXJsYXBzIiwxKSxuLm4mJmUmJmdmKG4scGYoZSksKE9sKCksdGgpKSxyPXUoemUoZSwoYl8oKSwkUykpLDMzKSx0LmY9cix0LmE9YXN0KHUoemUoZSwoYXkoKSxCTykpLDI5MykpLHM9dmUoemUoZSwoZGkoKSxHMikpKSxrVCh0LChJbihzKSxzKSksbz1neShyKSx1aGUodCxlLG8sbiksbi5uJiZlJiZnZihuLHBmKGUpLChPbCgpLHRoKSl9ZnVuY3Rpb24gbTV0KHQsZSxuKXtzd2l0Y2gobi5nKXtjYXNlIDE6cmV0dXJuIG5ldyBSZShlLmEsYi5NYXRoLm1pbih0LmQuYixlLmIpKTtjYXNlIDI6cmV0dXJuIG5ldyBSZShiLk1hdGgubWF4KHQuYy5hLGUuYSksZS5iKTtjYXNlIDM6cmV0dXJuIG5ldyBSZShlLmEsYi5NYXRoLm1heCh0LmMuYixlLmIpKTtjYXNlIDQ6cmV0dXJuIG5ldyBSZShiLk1hdGgubWluKGUuYSx0LmQuYSksZS5iKX1yZXR1cm4gbmV3IFJlKGUuYSxlLmIpfWZ1bmN0aW9uIHpibih0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssXyxNLEI7Zm9yKE09cj8oYmUoKSxCbik6KGJlKCksSG4pLHM9ITEsdz1lW25dLGs9MCxfPXcubGVuZ3RoO2s8XzsrK2spZD13W2tdLCFENih1KEsoZCwoeGUoKSx3cykpLDk4KSkmJihoPWQuZSxCPSFyYyhkLE0pLmRjKCkmJiEhaCxCJiYobz1iNHQoaCksdC5iPW5ldyB2NHQobyxyPzA6by5sZW5ndGgtMSkpLHM9c3xqd24odCxkLE0sQikpO3JldHVybiBzfWZ1bmN0aW9uIGZJKHQpe3ZhciBlLG4scjtmb3IoZT1IZCgxKyghdC5jJiYodC5jPW5ldyBoZSh5bCx0LDksOSkpLHQuYykuaSksdWUoZSwoIXQuZCYmKHQuZD1uZXcgRW4ocmEsdCw4LDUpKSx0LmQpKSxyPW5ldyBucigoIXQuYyYmKHQuYz1uZXcgaGUoeWwsdCw5LDkpKSx0LmMpKTtyLmUhPXIuaS5nYygpOyluPXUoZHIociksMTE4KSx1ZShlLCghbi5kJiYobi5kPW5ldyBFbihyYSxuLDgsNSkpLG4uZCkpO3JldHVybiBEcihlKSxuZXcgdV8oZSl9ZnVuY3Rpb24gVjAodCl7dmFyIGUsbixyO2ZvcihlPUhkKDErKCF0LmMmJih0LmM9bmV3IGhlKHlsLHQsOSw5KSksdC5jKS5pKSx1ZShlLCghdC5lJiYodC5lPW5ldyBFbihyYSx0LDcsNCkpLHQuZSkpLHI9bmV3IG5yKCghdC5jJiYodC5jPW5ldyBoZSh5bCx0LDksOSkpLHQuYykpO3IuZSE9ci5pLmdjKCk7KW49dShkcihyKSwxMTgpLHVlKGUsKCFuLmUmJihuLmU9bmV3IEVuKHJhLG4sNyw0KSksbi5lKSk7cmV0dXJuIERyKGUpLG5ldyB1XyhlKX1mdW5jdGlvbiBxYm4odCl7dmFyIGUsbixyLHM7aWYodD09bnVsbClyZXR1cm4gbnVsbDtpZihyPUhjKHQsITApLHM9bk8ubGVuZ3RoLHVuKHIuc3Vic3RyKHIubGVuZ3RoLXMscyksbk8pKXtpZihuPXIubGVuZ3RoLG49PTQpe2lmKGU9KCRyKDAsci5sZW5ndGgpLHIuY2hhckNvZGVBdCgwKSksZT09NDMpcmV0dXJuIGdMdDtpZihlPT00NSlyZXR1cm4gXzVlfWVsc2UgaWYobj09MylyZXR1cm4gZ0x0fXJldHVybiBseShyKX1mdW5jdGlvbiBIYm4odCl7dmFyIGUsbixyLHM7Zm9yKGU9MCxuPTAscz1uZXcgUyh0LmopO3MuYTxzLmMuYy5sZW5ndGg7KWlmKHI9dShRKHMpLDExKSxlPU1yKFJhKGUsSUp0KFdpKG5ldyBrbihudWxsLG5ldyBUbihyLmUsMTYpKSxuZXcgeFEpKSkpLG49TXIoUmEobixJSnQoV2kobmV3IGtuKG51bGwsbmV3IFRuKHIuZywxNikpLG5ldyBrUSkpKSksZT4xfHxuPjEpcmV0dXJuIDI7cmV0dXJuIGUrbj09MT8yOjB9ZnVuY3Rpb24geWNlKHQsZSxuKXt2YXIgcixzLG8saCxkO2ZvcihtcihuLCJFTEsgRm9yY2UiLDEpLEJlKEZlKHplKGUsKG4xKCksbEV0KSkpKXx8dSQoKHI9bmV3IHJyKChEbSgpLG5ldyBTbShlKSkpLHIpKSxkPVhuZShlKSxjMW4oZCksemNuKHQsdShLKGQsdUV0KSw0MjQpKSxoPXVsZSh0LmEsZCksbz1oLktjKCk7by5PYigpOylzPXUoby5QYigpLDIzMSksRXduKHQuYixzLHpjKG4sMS9oLmdjKCkpKTtkPWtoZShoKSxtaGUoZCksb3Iobil9ZnVuY3Rpb24gVmJuKHQsZSl7dmFyIG4scixzLG8saDtpZihtcihlLCJCcmVha2luZyBQb2ludCBQcm9jZXNzb3IiLDEpLGw0bih0KSxCZShGZShLKHQsKHhlKCksdl90KSkpKSl7Zm9yKHM9bmV3IFModC5iKTtzLmE8cy5jLmMubGVuZ3RoOylmb3Iocj11KFEocyksMjkpLG49MCxoPW5ldyBTKHIuYSk7aC5hPGguYy5jLmxlbmd0aDspbz11KFEoaCksMTApLG8ucD1uKys7ZnluKHQpLEhjZSh0LCEwKSxIY2UodCwhMSl9b3IoZSl9ZnVuY3Rpb24gR2JuKHQsZSxuKXt2YXIgcixzLG8saCxkLHc7Zm9yKGQ9dC5jLGg9KG4ucT9uLnE6KHBuKCkscG4oKSxhMCkpLnZjKCkuS2MoKTtoLk9iKCk7KW89dShoLlBiKCksNDIpLHI9IWpUKFdpKG5ldyBrbihudWxsLG5ldyBUbihkLDE2KSksbmV3IHRlKG5ldyBpR3QoZSxvKSkpKS5zZCgoWWIoKSxRNykpLHImJih3PW8uZGQoKSxfdCh3LDQpJiYocz1FM3QodykscyE9bnVsbCYmKHc9cykpLGUuWWUodShvLmNkKCksMTQ2KSx3KSl9ZnVuY3Rpb24gb3EodCxlKXt2YXIgbixyLHMsbyxoO2lmKGUpe2ZvcihvPV90KHQuQ2IsODgpfHxfdCh0LkNiLDk5KSxoPSFvJiZfdCh0LkNiLDMyMikscj1uZXcgbnIoKCFlLmEmJihlLmE9bmV3IHhfKGUsd28sZSkpLGUuYSkpO3IuZSE9ci5pLmdjKCk7KWlmKG49dShkcihyKSw4Nykscz13cShuKSxvP190KHMsODgpOmg/X3QocywxNDgpOnMpcmV0dXJuIHM7cmV0dXJuIG8/KGxuKCksUWgpOihsbigpLEsxKX1lbHNlIHJldHVybiBudWxsfWZ1bmN0aW9uIFVibih0LGUpe3ZhciBuLHIscyxvLGgsZDtmb3IobXIoZSwiQ29uc3RyYWludHMgUG9zdHByb2Nlc3NvciIsMSksaD0wLG89bmV3IFModC5iKTtvLmE8by5jLmMubGVuZ3RoOyl7Zm9yKHM9dShRKG8pLDI5KSxkPTAscj1uZXcgUyhzLmEpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShRKHIpLDEwKSxuLms9PShHbigpLHFzKSYmKGVlKG4sKHhlKCksdEcpLGRlKGgpKSxlZShuLFhWLGRlKGQpKSwrK2QpOysraH1vcihlKX1mdW5jdGlvbiBXYm4odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLF87Zm9yKHc9bmV3IFJlKG4sciksZmEodyx1KEsoZSwobWMoKSxCUykpLDgpKSxfPXNpKGUuYiwwKTtfLmIhPV8uZC5jOylrPXUoaWkoXyksODYpLEZpKGsuZSx3KSxhaSh0LmIsayk7Zm9yKGQ9c2koZS5hLDApO2QuYiE9ZC5kLmM7KXtmb3IoaD11KGlpKGQpLDE4OCksbz1zaShoLmEsMCk7by5iIT1vLmQuYzspcz11KGlpKG8pLDgpLEZpKHMsdyk7YWkodC5hLGgpfX1mdW5jdGlvbiB5NXQodCxlLG4pe3ZhciByLHMsbztpZihvPVQ0KChHdSgpLFNhKSx0LlRnKCksZSksbyl7aWYoc28oKSwhdShvLDY2KS5PaigpJiYobz16NihNbyhTYSxvKSksIW8pKXRocm93IG50KG5ldyBQbihjYitlLm5lKCkrV0MpKTtzPShyPXQuWWcobyksdShyPj0wP3QuX2cociwhMCwhMCk6bHcodCxvLCEwKSwxNTMpKSx1KHMsMjE1KS5tbChlLG4pfWVsc2UgdGhyb3cgbnQobmV3IFBuKGNiK2UubmUoKStXQykpfWZ1bmN0aW9uIEtibih0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKG49bmV3IGxlLHM9ZWMobmV3IGtuKG51bGwsbmV3IFRuKHQsMTYpKSxuZXcgSFEpLG89ZWMobmV3IGtuKG51bGwsbmV3IFRuKHQsMTYpKSxuZXcgVlEpLGg9eGFuKEZzbihKaihTMm4odXQob3QocjZuLDEpLE1lLDgzMywwLFtzLG9dKSksbmV3IEdRKSkpLHI9MTtyPGgubGVuZ3RoO3IrKyloW3JdLWhbci0xXT49MiplJiZ1ZShuLG5ldyBrbnQoaFtyLTFdK2UsaFtyXS1lKSk7cmV0dXJuIG59ZnVuY3Rpb24gWWJuKHQsZSxuKXttcihuLCJFYWRlcyByYWRpYWwiLDEpLG4ubiYmZSYmZ2YobixwZihlKSwoT2woKSx0aCkpLHQuZD11KHplKGUsKGJfKCksJFMpKSwzMyksdC5jPVp0KHZlKHplKGUsKGF5KCksU0cpKSkpLHQuZT1hc3QodSh6ZShlLEJPKSwyOTMpKSx0LmE9QWxuKHUoemUoZSx4Q3QpLDQyNikpLHQuYj1YMW4odSh6ZShlLHlDdCksMzQwKSksTTFuKHQpLG4ubiYmZSYmZ2YobixwZihlKSwoT2woKSx0aCkpfWZ1bmN0aW9uIFhibih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssXztpZihuKWZvcihvPW4uYS5sZW5ndGgscj1uZXcgSmIobyksZD0oci5iLXIuYSkqci5jPDA/KE9wKCksTWIpOm5ldyBCcChyKTtkLk9iKCk7KWg9dShkLlBiKCksMTkpLHM9VDgobixoLmEpLHMmJih3PUtpbih0LChrPShUdigpLF89bmV3IFBwdCxfKSxlJiZ4NXQoayxlKSxrKSxzKSxxXyh3LE8wKHMsQ2QpKSxKeihzLHcpLEc0dChzLHcpLHlpdCh0LHMsdykpfWZ1bmN0aW9uIGNxKHQpe3ZhciBlLG4scixzLG8saDtpZighdC5qKXtpZihoPW5ldyBROSxlPWFBLG89ZS5hLnpjKHQsZSksbz09bnVsbCl7Zm9yKHI9bmV3IG5yKFBvKHQpKTtyLmUhPXIuaS5nYygpOyluPXUoZHIociksMjYpLHM9Y3EobiksZ3MoaCxzKSxPcihoLG4pO2UuYS5CYyh0KSE9bnVsbH1leShoKSx0Lmo9bmV3IEgzKCh1KEF0KEt0KCh6cCgpLEFuKS5vKSwxMSksMTgpLGguaSksaC5nKSxobCh0KS5iJj0tMzN9cmV0dXJuIHQuan1mdW5jdGlvbiBRYm4odCl7dmFyIGUsbixyLHM7aWYodD09bnVsbClyZXR1cm4gbnVsbDtpZihyPUhjKHQsITApLHM9bk8ubGVuZ3RoLHVuKHIuc3Vic3RyKHIubGVuZ3RoLXMscyksbk8pKXtpZihuPXIubGVuZ3RoLG49PTQpe2lmKGU9KCRyKDAsci5sZW5ndGgpLHIuY2hhckNvZGVBdCgwKSksZT09NDMpcmV0dXJuIHBMdDtpZihlPT00NSlyZXR1cm4gQzVlfWVsc2UgaWYobj09MylyZXR1cm4gcEx0fXJldHVybiBuZXcgVHB0KHIpfWZ1bmN0aW9uIFpibih0KXt2YXIgZSxuLHI7cmV0dXJuIG49dC5sLG4mbi0xfHwocj10Lm0sciZyLTEpfHwoZT10LmgsZSZlLTEpfHxlPT0wJiZyPT0wJiZuPT0wPy0xOmU9PTAmJnI9PTAmJm4hPTA/Vm10KG4pOmU9PTAmJnIhPTAmJm49PTA/Vm10KHIpKzIyOmUhPTAmJnI9PTAmJm49PTA/Vm10KGUpKzQ0Oi0xfWZ1bmN0aW9uIEpibih0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKG1yKGUsIkVkZ2Ugam9pbmluZyIsMSksbj1CZShGZShLKHQsKHhlKCksaWh0KSkpKSxzPW5ldyBTKHQuYik7cy5hPHMuYy5jLmxlbmd0aDspZm9yKHI9dShRKHMpLDI5KSxoPW5ldyB4YShyLmEsMCk7aC5iPGguZC5nYygpOylvPShabihoLmI8aC5kLmdjKCkpLHUoaC5kLlhiKGguYz1oLmIrKyksMTApKSxvLms9PShHbigpLGNhKSYmKEFhdChvLG4pLERsKGgpKTtvcihlKX1mdW5jdGlvbiB0Mm4odCxlLG4pe3ZhciByLHM7aWYodyQodC5iKSxVZCh0LmIsKFZEKCksQUcpLChIVCgpLGpPKSksVWQodC5iLExHLGUuZyksVWQodC5iLE1HLGUuYSksdC5hPVRxKHQuYixlKSxtcihuLCJDb21wYWN0aW9uIGJ5IHNocmlua2luZyBhIHRyZWUiLHQuYS5jLmxlbmd0aCksZS5pLmMubGVuZ3RoPjEpZm9yKHM9bmV3IFModC5hKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoUShzKSw1MSksci5wZihlLHpjKG4sMSkpO29yKG4pfWZ1bmN0aW9uIHc0KHQsZSl7dmFyIG4scixzLG8saDtmb3Iocz1lLmEmdC5mLG89bnVsbCxyPXQuYltzXTs7cj1yLmIpe2lmKHI9PWUpe28/by5iPWUuYjp0LmJbc109ZS5iO2JyZWFrfW89cn1mb3IoaD1lLmYmdC5mLG89bnVsbCxuPXQuY1toXTs7bj1uLmQpe2lmKG49PWUpe28/by5kPWUuZDp0LmNbaF09ZS5kO2JyZWFrfW89bn1lLmU/ZS5lLmM9ZS5jOnQuYT1lLmMsZS5jP2UuYy5lPWUuZTp0LmU9ZS5lLC0tdC5pLCsrdC5nfWZ1bmN0aW9uIGUybih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssXztmb3Iobj10Lm8sZT10LnAsaD1UaSxzPU9hLGQ9VGksbz1PYSxrPTA7azxuOysraylmb3IoXz0wO188ZTsrK18paDQodCxrLF8pJiYoaD1iLk1hdGgubWluKGgsaykscz1iLk1hdGgubWF4KHMsayksZD1iLk1hdGgubWluKGQsXyksbz1iLk1hdGgubWF4KG8sXykpO3JldHVybiB3PXMtaCsxLHI9by1kKzEsbmV3IGtYdChkZShoKSxkZShkKSxkZSh3KSxkZShyKSl9ZnVuY3Rpb24gUXN0KHQsZSl7dmFyIG4scixzLG87Zm9yKG89bmV3IHhhKHQsMCksbj0oWm4oby5iPG8uZC5nYygpKSx1KG8uZC5YYihvLmM9by5iKyspLDE0MCkpO28uYjxvLmQuZ2MoKTspcj0oWm4oby5iPG8uZC5nYygpKSx1KG8uZC5YYihvLmM9by5iKyspLDE0MCkpLHM9bmV3IE12dChyLmMsbi5kLGUpLFpuKG8uYj4wKSxvLmEuWGIoby5jPS0tby5iKSxSbShvLHMpLFpuKG8uYjxvLmQuZ2MoKSksby5kLlhiKG8uYz1vLmIrKykscy5hPSExLG49cn1mdW5jdGlvbiB4Y2UodCl7dmFyIGUsbixyLHMsbyxoO2ZvcihzPXUoSyh0LChhZSgpLHpWKSksMTEpLGg9bmV3IFModC5qKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zm9yKG89dShRKGgpLDExKSxyPW5ldyBTKG8uZyk7ci5hPHIuYy5jLmxlbmd0aDspcmV0dXJuIGU9dShRKHIpLDE3KSxwYShlLHMpLG87Zm9yKG49bmV3IFMoby5lKTtuLmE8bi5jLmMubGVuZ3RoOylyZXR1cm4gZT11KFEobiksMTcpLEJhKGUscyksb31yZXR1cm4gbnVsbH1mdW5jdGlvbiBuMm4odCxlLG4pe3ZhciByLHM7cj1BdShuLnEuZ2V0VGltZSgpKSxfYyhyLDApPDA/KHM9VmctTXIoVUQoRDgociksVmcpKSxzPT1WZyYmKHM9MCkpOnM9TXIoVUQocixWZykpLGU9PTE/KHM9Yi5NYXRoLm1pbigocys1MCkvMTAwfDAsOSksJHAodCw0OCtzJk1zKSk6ZT09Mj8ocz1iLk1hdGgubWluKChzKzUpLzEwfDAsOTkpLFhkKHQscywyKSk6KFhkKHQscywzKSxlPjMmJlhkKHQsMCxlLTMpKX1mdW5jdGlvbiByMm4odCl7dmFyIGUsbixyLHM7cmV0dXJuIEd0KEsodCwoeGUoKSxqeSkpKT09PUd0KCgkMCgpLG5wKSk/IXQuZSYmR3QoSyh0LENPKSkhPT1HdCgoRzgoKSxtTykpOihyPXUoSyh0LFVsdCksMjkyKSxzPUJlKEZlKEsodCxXbHQpKSl8fEd0KEsodCxFUykpPT09R3QoKEs2KCksd08pKSxlPXUoSyh0LE5UdCksMTkpLmEsbj10LmEuYy5sZW5ndGgsIXMmJnIhPShHOCgpLG1PKSYmKGU9PTB8fGU+bikpfWZ1bmN0aW9uIGkybih0KXt2YXIgZSxuO2ZvcihuPTA7bjx0LmMubGVuZ3RoJiYhKEdLdCgoU24obix0LmMubGVuZ3RoKSx1KHQuY1tuXSwxMTMpKSk+MCk7bisrKTtpZihuPjAmJm48dC5jLmxlbmd0aC0xKXJldHVybiBuO2ZvcihlPTA7ZTx0LmMubGVuZ3RoJiYhKEdLdCgoU24oZSx0LmMubGVuZ3RoKSx1KHQuY1tlXSwxMTMpKSk+MCk7ZSsrKTtyZXR1cm4gZT4wJiZuPHQuYy5sZW5ndGgtMT9lOnQuYy5sZW5ndGgvMnwwfWZ1bmN0aW9uIGtjZSh0LGUpe3ZhciBuLHI7aWYoZSE9dC5DYnx8dC5EYj4+MTYhPTYmJmUpe2lmKGM3KHQsZSkpdGhyb3cgbnQobmV3IFBuKEtDKyRvZSh0KSkpO3I9bnVsbCx0LkNiJiYocj0obj10LkRiPj4xNixuPj0wP1czdCh0LHIpOnQuQ2IuaWgodCwtMS1uLG51bGwscikpKSxlJiYocj10eChlLHQsNixyKSkscj1HMnQodCxlLHIpLHImJnIuRmkoKX1lbHNlIHQuRGImNCYmISh0LkRiJjEpJiZDaSh0LG5ldyBvYSh0LDEsNixlLGUpKX1mdW5jdGlvbiB4NXQodCxlKXt2YXIgbixyO2lmKGUhPXQuQ2J8fHQuRGI+PjE2IT05JiZlKXtpZihjNyh0LGUpKXRocm93IG50KG5ldyBQbihLQytrdWUodCkpKTtyPW51bGwsdC5DYiYmKHI9KG49dC5EYj4+MTYsbj49MD9ZM3QodCxyKTp0LkNiLmloKHQsLTEtbixudWxsLHIpKSksZSYmKHI9dHgoZSx0LDkscikpLHI9VTJ0KHQsZSxyKSxyJiZyLkZpKCl9ZWxzZSB0LkRiJjQmJiEodC5EYiYxKSYmQ2kodCxuZXcgb2EodCwxLDksZSxlKSl9ZnVuY3Rpb24gWnN0KHQsZSl7dmFyIG4scjtpZihlIT10LkNifHx0LkRiPj4xNiE9MyYmZSl7aWYoYzcodCxlKSl0aHJvdyBudChuZXcgUG4oS0MreGxlKHQpKSk7cj1udWxsLHQuQ2ImJihyPShuPXQuRGI+PjE2LG4+PTA/UTN0KHQscik6dC5DYi5paCh0LC0xLW4sbnVsbCxyKSkpLGUmJihyPXR4KGUsdCwxMixyKSkscj1WMnQodCxlLHIpLHImJnIuRmkoKX1lbHNlIHQuRGImNCYmISh0LkRiJjEpJiZDaSh0LG5ldyBvYSh0LDEsMyxlLGUpKX1mdW5jdGlvbiB2Nyh0KXt2YXIgZSxuLHIscyxvO2lmKHI9T2godCksbz10Lmosbz09bnVsbCYmcilyZXR1cm4gdC4kaigpP251bGw6ci56aigpO2lmKF90KHIsMTQ4KSl7aWYobj1yLkFqKCksbiYmKHM9bi5OaCgpLHMhPXQuaSkpe2lmKGU9dShyLDE0OCksZS5FaigpKXRyeXt0Lmc9cy5LaChlLG8pfWNhdGNoKGgpe2lmKGg9cnMoaCksX3QoaCw3OCkpdC5nPW51bGw7ZWxzZSB0aHJvdyBudChoKX10Lmk9c31yZXR1cm4gdC5nfXJldHVybiBudWxsfWZ1bmN0aW9uIEVjZSh0KXt2YXIgZTtyZXR1cm4gZT1uZXcgbGUsdWUoZSxuZXcgRTYobmV3IFJlKHQuYyx0LmQpLG5ldyBSZSh0LmMrdC5iLHQuZCkpKSx1ZShlLG5ldyBFNihuZXcgUmUodC5jLHQuZCksbmV3IFJlKHQuYyx0LmQrdC5hKSkpLHVlKGUsbmV3IEU2KG5ldyBSZSh0LmMrdC5iLHQuZCt0LmEpLG5ldyBSZSh0LmMrdC5iLHQuZCkpKSx1ZShlLG5ldyBFNihuZXcgUmUodC5jK3QuYix0LmQrdC5hKSxuZXcgUmUodC5jLHQuZCt0LmEpKSksZX1mdW5jdGlvbiBUY2UodCxlLG4scil7dmFyIHMsbyxoO2lmKGg9czR0KGUsbiksci5jW3IuYy5sZW5ndGhdPWUsdC5qW2gucF09PS0xfHx0LmpbaC5wXT09Mnx8dC5hW2UucF0pcmV0dXJuIHI7Zm9yKHQualtoLnBdPS0xLG89bmV3IGFyKGxyKHowKGgpLmEuS2MoKSxuZXcgSCkpO1ZyKG8pOylpZihzPXUoSXIobyksMTcpLCEoISghV2EocykmJiEoIVdhKHMpJiZzLmMuaS5jPT1zLmQuaS5jKSl8fHM9PWUpKXJldHVybiBUY2UodCxzLGgscik7cmV0dXJuIHJ9ZnVuY3Rpb24gczJuKHQsZSxuKXt2YXIgcixzLG87Zm9yKG89ZS5hLmVjKCkuS2MoKTtvLk9iKCk7KXM9dShvLlBiKCksNzkpLHI9dSh0cih0LmIscyksMjY2KSwhciYmKGhzKFpkKHMpKT09aHMoWnAocykpP3l2bih0LHMsbik6WmQocyk9PWhzKFpwKHMpKT90cih0LmMscyk9PW51bGwmJnRyKHQuYixacChzKSkhPW51bGwmJnJoZSh0LHMsbiwhMSk6dHIodC5kLHMpPT1udWxsJiZ0cih0LmIsWmQocykpIT1udWxsJiZyaGUodCxzLG4sITApKX1mdW5jdGlvbiBhMm4odCxlKXt2YXIgbixyLHMsbyxoLGQsdztmb3Iocz10LktjKCk7cy5PYigpOylmb3Iocj11KHMuUGIoKSwxMCksZD1uZXcgTmMsdGMoZCxyKSxVcyhkLChiZSgpLEhuKSksZWUoZCwoYWUoKSxHViksKEZuKCksITApKSxoPWUuS2MoKTtoLk9iKCk7KW89dShoLlBiKCksMTApLHc9bmV3IE5jLHRjKHcsbyksVXModyxCbiksZWUodyxHViwhMCksbj1uZXcgenYsZWUobixHViwhMCksQmEobixkKSxwYShuLHcpfWZ1bmN0aW9uIG8ybih0LGUsbixyKXt2YXIgcyxvLGgsZDtzPW1pZSh0LGUsbiksbz1taWUodCxuLGUpLGg9dSh0cih0LmMsZSksMTEyKSxkPXUodHIodC5jLG4pLDExMiksczxvP25ldyBuMigoWWYoKSxVeSksaCxkLG8tcyk6bzxzP25ldyBuMigoWWYoKSxVeSksZCxoLHMtbyk6KHMhPTB8fCEoIWUuaXx8IW4uaSkmJnJbZS5pLmNdW24uaS5jXSkmJihuZXcgbjIoKFlmKCksVXkpLGgsZCwwKSxuZXcgbjIoVXksZCxoLDApKX1mdW5jdGlvbiBfY2UodCxlKXt2YXIgbixyLHMsbyxoLGQsdztmb3Iocz0wLGg9bmV3IFMoZS5hKTtoLmE8aC5jLmMubGVuZ3RoOylmb3Iobz11KFEoaCksMTApLHMrPW8uby5iK28uZC5hK28uZC5kK3QuZSxyPW5ldyBhcihscihVbyhvKS5hLktjKCksbmV3IEgpKTtWcihyKTspbj11KElyKHIpLDE3KSxuLmMuaS5rPT0oR24oKSxVYykmJih3PW4uYy5pLGQ9dShLKHcsKGFlKCksSWkpKSwxMCkscys9ZC5vLmIrZC5kLmErZC5kLmQpO3JldHVybiBzfWZ1bmN0aW9uIENjZSh0LGUsbil7dmFyIHIscyxvLGgsZCx3LGs7Zm9yKG89bmV3IGxlLGs9bmV3IGNzLGg9bmV3IGNzLFhtbih0LGssaCxlKSxhNG4odCxrLGgsZSxuKSx3PW5ldyBTKHQpO3cuYTx3LmMuYy5sZW5ndGg7KWZvcihkPXUoUSh3KSwxMTIpLHM9bmV3IFMoZC5rKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoUShzKSwxMjkpLCghZXx8ci5jPT0oWWYoKSx2YikpJiZkLmc+ci5iLmcmJihvLmNbby5jLmxlbmd0aF09cik7cmV0dXJuIG99ZnVuY3Rpb24gdzcoKXt3Nz1YLHI1PW5ldyBDTSgiQ0FORElEQVRFX1BPU0lUSU9OX0xBU1RfUExBQ0VEX1JJR0hUIiwwKSxCeD1uZXcgQ00oIkNBTkRJREFURV9QT1NJVElPTl9MQVNUX1BMQUNFRF9CRUxPVyIsMSkscVM9bmV3IENNKCJDQU5ESURBVEVfUE9TSVRJT05fV0hPTEVfRFJBV0lOR19SSUdIVCIsMikselM9bmV3IENNKCJDQU5ESURBVEVfUE9TSVRJT05fV0hPTEVfRFJBV0lOR19CRUxPVyIsMyksSFM9bmV3IENNKCJXSE9MRV9EUkFXSU5HIiw0KX1mdW5jdGlvbiBjMm4odCxlKXtpZihfdChlLDIzOSkpcmV0dXJuIFJ1bih0LHUoZSwzMykpO2lmKF90KGUsMTg2KSlyZXR1cm4gUXVuKHQsdShlLDExOCkpO2lmKF90KGUsMzU0KSlyZXR1cm4gbG5uKHQsdShlLDEzNykpO2lmKF90KGUsMzUyKSlyZXR1cm4gTm1uKHQsdShlLDc5KSk7aWYoZSlyZXR1cm4gbnVsbDt0aHJvdyBudChuZXcgUG4obTh0K0pwKG5ldyBDbCh1dChvdChRbiwxKSxNZSwxLDUsW2VdKSkpKSl9ZnVuY3Rpb24gdTJuKHQpe3ZhciBlLG4scixzLG8saCxkO2ZvcihvPW5ldyBjcyxzPW5ldyBTKHQuZC5hKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoUShzKSwxMjEpLHIuYi5hLmMubGVuZ3RoPT0wJiZrcyhvLHIsby5jLmIsby5jKTtpZihvLmI+MSlmb3IoZT1Jdigobj1uZXcgS2IsKyt0LmIsbiksdC5kKSxkPXNpKG8sMCk7ZC5iIT1kLmQuYzspaD11KGlpKGQpLDEyMSkseWYobGYodWYoaGYoY2YobmV3IFNoLDEpLDApLGUpLGgpKX1mdW5jdGlvbiBrNXQodCxlKXt2YXIgbixyO2lmKGUhPXQuQ2J8fHQuRGI+PjE2IT0xMSYmZSl7aWYoYzcodCxlKSl0aHJvdyBudChuZXcgUG4oS0MrJDV0KHQpKSk7cj1udWxsLHQuQ2ImJihyPShuPXQuRGI+PjE2LG4+PTA/WjN0KHQscik6dC5DYi5paCh0LC0xLW4sbnVsbCxyKSkpLGUmJihyPXR4KGUsdCwxMCxyKSkscj10dnQodCxlLHIpLHImJnIuRmkoKX1lbHNlIHQuRGImNCYmISh0LkRiJjEpJiZDaSh0LG5ldyBvYSh0LDEsMTEsZSxlKSl9ZnVuY3Rpb24gbDJuKHQpe3ZhciBlLG4scixzO2ZvcihyPW5ldyBkMihuZXcga2codC5iKS5hKTtyLmI7KW49WXYocikscz11KG4uY2QoKSwxMSksZT11KG4uZGQoKSwxMCksZWUoZSwoYWUoKSxJaSkscyksZWUocyxzbCxlKSxlZShzLGtPLChGbigpLCEwKSksVXMocyx1KEsoZSxnYyksNjEpKSxLKGUsZ2MpLGVlKHMuaSwoeGUoKSx3cyksKHZhKCksU0UpKSx1KEsoJGEocy5pKSxXYyksMjEpLkZjKChnbygpLGxFKSl9ZnVuY3Rpb24gaDJuKHQsZSxuKXt2YXIgcixzLG8saCxkLHc7aWYobz0wLGg9MCx0LmMpZm9yKHc9bmV3IFModC5kLmkuaik7dy5hPHcuYy5jLmxlbmd0aDspZD11KFEodyksMTEpLG8rPWQuZS5jLmxlbmd0aDtlbHNlIG89MTtpZih0LmQpZm9yKHc9bmV3IFModC5jLmkuaik7dy5hPHcuYy5jLmxlbmd0aDspZD11KFEodyksMTEpLGgrPWQuZy5jLmxlbmd0aDtlbHNlIGg9MTtyZXR1cm4gcz1DcyhLTShoLW8pKSxyPShuK2UpLzIrKG4tZSkqKC40KnMpLHJ9ZnVuY3Rpb24gZjJuKHQpe3A0KCk7dmFyIGUsbjtpZih0LkhjKChiZSgpLGFjKSkpdGhyb3cgbnQobmV3IFBuKCJQb3J0IHNpZGVzIG11c3Qgbm90IGNvbnRhaW4gVU5ERUZJTkVEIikpO3N3aXRjaCh0LmdjKCkpe2Nhc2UgMTpyZXR1cm4gTFY7Y2FzZSAyOnJldHVybiBlPXQuSGMoSG4pJiZ0LkhjKEJuKSxuPXQuSGMoT24pJiZ0LkhjKHlyKSxlfHxuP0lWOkRWO2Nhc2UgMzpyZXR1cm4gTVY7Y2FzZSA0OnJldHVybiBBVjtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiBkMm4odCxlLG4pe3ZhciByLHMsbyxoLGQ7Zm9yKG1yKG4sIkJyZWFraW5nIFBvaW50IFJlbW92aW5nIiwxKSx0LmE9dShLKGUsKHhlKCksWDApKSwyMTgpLG89bmV3IFMoZS5iKTtvLmE8by5jLmMubGVuZ3RoOylmb3Iocz11KFEobyksMjkpLGQ9bmV3IFMoVnYocy5hKSk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KFEoZCksMTApLGVlZShoKSYmKHI9dShLKGgsKGFlKCksTHcpKSwzMDUpLCFyLmQmJkVoZSh0LHIpKTtvcihuKX1mdW5jdGlvbiBKc3QodCxlLG4pe3JldHVybiB4NCgpLHo4KHQsZSkmJno4KHQsbik/ITE6TWF0KG5ldyBSZSh0LmMsdC5kKSxuZXcgUmUodC5jK3QuYix0LmQpLGUsbil8fE1hdChuZXcgUmUodC5jK3QuYix0LmQpLG5ldyBSZSh0LmMrdC5iLHQuZCt0LmEpLGUsbil8fE1hdChuZXcgUmUodC5jK3QuYix0LmQrdC5hKSxuZXcgUmUodC5jLHQuZCt0LmEpLGUsbil8fE1hdChuZXcgUmUodC5jLHQuZCt0LmEpLG5ldyBSZSh0LmMsdC5kKSxlLG4pfWZ1bmN0aW9uIEU1dCh0LGUpe3ZhciBuLHIscyxvO2lmKCF0LmRjKCkpe2ZvcihuPTAscj10LmdjKCk7bjxyOysrbilpZihvPWpyKHQuWGIobikpLG89PW51bGw/ZT09bnVsbDp1bihvLnN1YnN0cigwLDMpLCIhIyMiKT9lIT1udWxsJiYocz1lLmxlbmd0aCwhdW4oby5zdWJzdHIoby5sZW5ndGgtcyxzKSxlKXx8by5sZW5ndGghPWUubGVuZ3RoKzMpJiYhdW4oRDIsZSk6dW4obyxhdXQpJiYhdW4oRDIsZSl8fHVuKG8sZSkpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gZzJuKHQsZSxuLHIpe3ZhciBzLG8saCxkLHcsaztmb3IoaD10LmouYy5sZW5ndGgsdz1OdChhNm4sRzZ0LDMwNixoLDAsMSksZD0wO2Q8aDtkKyspbz11KFBlKHQuaixkKSwxMSksby5wPWQsd1tkXT15cG4oUW9lKG8pLG4scik7Zm9yKFIybih0LHcsbixlLHIpLGs9bmV3IEFyLHM9MDtzPHcubGVuZ3RoO3MrKyl3W3NdJiZBaShrLHUoUGUodC5qLHMpLDExKSx3W3NdKTtrLmYuYytrLmcuYyE9MCYmKGVlKHQsKGFlKCksbVMpLGspLHEwbih0LHcpKX1mdW5jdGlvbiBwMm4odCxlLG4pe3ZhciByLHMsbztmb3Iocz1uZXcgUyh0LmEuYik7cy5hPHMuYy5jLmxlbmd0aDspaWYocj11KFEocyksNTcpLG89SjMociksbyYmby5rPT0oR24oKSxJcykpc3dpdGNoKHUoSyhvLChhZSgpLGdjKSksNjEpLmcpe2Nhc2UgNDpvLm4uYT1lLmE7YnJlYWs7Y2FzZSAyOm8ubi5hPW4uYS0oby5vLmErby5kLmMpO2JyZWFrO2Nhc2UgMTpvLm4uYj1lLmI7YnJlYWs7Y2FzZSAzOm8ubi5iPW4uYi0oby5vLmIrby5kLmEpfX1mdW5jdGlvbiBtNCgpe200PVgsaEc9bmV3IFQ2KEswLDApLE1PPW5ldyBUNigiTklLT0xPViIsMSksRE89bmV3IFQ2KCJOSUtPTE9WX1BJWEVMIiwyKSxBX3Q9bmV3IFQ2KCJOSUtPTE9WX0lNUFJPVkVEIiwzKSxMX3Q9bmV3IFQ2KCJOSUtPTE9WX0lNUFJPVkVEX1BJWEVMIiw0KSxTX3Q9bmV3IFQ2KCJEVU1NWU5PREVfUEVSQ0VOVEFHRSIsNSksTV90PW5ldyBUNigiTk9ERUNPVU5UX1BFUkNFTlRBR0UiLDYpLGZHPW5ldyBUNigiTk9fQk9VTkRBUlkiLDcpfWZ1bmN0aW9uIGIybih0LGUsbil7dmFyIHIscyxvLGgsZDtyZXR1cm4gcz11KHplKGUsKGVxKCksX1N0KSksMTkpLCFzJiYocz1kZSgwKSksbz11KHplKG4sX1N0KSwxOSksIW8mJihvPWRlKDApKSxzLmE+by5hPy0xOnMuYTxvLmE/MTp0LmEmJihyPWpzKGUuaixuLmopLHIhPTB8fChyPWpzKGUuaSxuLmkpLHIhPTApKT9yOihoPWUuZyplLmYsZD1uLmcqbi5mLGpzKGgsZCkpfWZ1bmN0aW9uIHYybih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXyxNO2lmKCsrdC5lLHc9dC5kPT1udWxsPzA6dC5kLmxlbmd0aCxlPncpe2ZvcihfPXQuZCx0LmQ9TnQoJEF0LEE4dCw2MywyKncrNCwwLDEpLG89MDtvPHc7KytvKWlmKGs9X1tvXSxrKWZvcihyPWsuZyxNPWsuaSxkPTA7ZDxNOysrZClzPXUocltkXSwxMzMpLGg9VzJ0KHQscy5TaCgpKSxuPXQuZFtoXSwhbiYmKG49dC5kW2hdPXQudWooKSksbi5GYyhzKTtyZXR1cm4hMH1lbHNlIHJldHVybiExfWZ1bmN0aW9uIHcybih0LGUsbil7dmFyIHIscyxvLGgsZCx3O2lmKHM9bixvPXMuYWsoKSxHMCh0LmUsbykpe2lmKG8uaGkoKSl7Zm9yKHI9dSh0LmcsMTE5KSxoPTA7aDx0Lmk7KytoKWlmKGQ9cltoXSxTaShkLHMpJiZoIT1lKXRocm93IG50KG5ldyBQbihYSSkpfX1lbHNlIGZvcih3PWh1KHQuZS5UZygpLG8pLHI9dSh0LmcsMTE5KSxoPTA7aDx0Lmk7KytoKWlmKGQ9cltoXSx3LnJsKGQuYWsoKSkpdGhyb3cgbnQobmV3IFBuKGVPKSk7Sl8odCxlLG4pfWZ1bmN0aW9uIFNjZSh0LGUpe3ZhciBuLHIscyxvLGgsZDtmb3Iobj11KEsoZSwoYWUoKSxOeSkpLDIxKSxoPXUoUGkoKE9hdCgpLEhpKSxuKSwyMSksZD11KFBpKHRpLG4pLDIxKSxvPWguS2MoKTtvLk9iKCk7KWlmKHI9dShvLlBiKCksMjEpLCF1KFBpKHQuYixyKSwxNSkuZGMoKSlyZXR1cm4hMTtmb3Iocz1kLktjKCk7cy5PYigpOylpZihyPXUocy5QYigpLDIxKSwhdShQaSh0LmIsciksMTUpLmRjKCkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gbTJuKHQsZSl7dmFyIG4scixzLG8saCxkO2ZvcihtcihlLCJQYXJ0aXRpb24gcG9zdHByb2Nlc3NpbmciLDEpLHI9bmV3IFModC5iKTtyLmE8ci5jLmMubGVuZ3RoOylmb3Iobj11KFEociksMjkpLG89bmV3IFMobi5hKTtvLmE8by5jLmMubGVuZ3RoOylmb3Iocz11KFEobyksMTApLGQ9bmV3IFMocy5qKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoUShkKSwxMSksQmUoRmUoSyhoLChhZSgpLEdWKSkpKSYmQ18oZCk7b3IoZSl9ZnVuY3Rpb24gQWNlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxfO2lmKHQuYS5jLmxlbmd0aD09MSlyZXR1cm4gSWFlKHUoUGUodC5hLDApLDE4NyksZSk7Zm9yKGg9a3VuKHQpLHc9MCxrPXQuZCxvPWgsXz10LmQsZD0oay1vKS8yK287bysxPGs7KXtmb3Iodz0wLHI9bmV3IFModC5hKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoUShyKSwxODcpLHcrPShzPUVDKG4sZCwhMSkscy5hKTt3PGU/KF89ZCxrPWQpOm89ZCxkPShrLW8pLzIrb31yZXR1cm4gX31mdW5jdGlvbiB5Mm4odCl7dmFyIGUsbixyLHMsbztyZXR1cm4gaXNOYU4odCk/KEk4KCksUTh0KTp0PC05MjIzMzcyMDM2ODU0Nzc2ZTM/KEk4KCksbWdlKTp0Pj05MjIzMzcyMDM2ODU0Nzc2ZTM/KEk4KCksWTh0KToocz0hMSx0PDAmJihzPSEwLHQ9LXQpLHI9MCx0Pj1FMiYmKHI9Q3ModC9FMiksdC09cipFMiksbj0wLHQ+PWh4JiYobj1Dcyh0L2h4KSx0LT1uKmh4KSxlPUNzKHQpLG89Y3UoZSxuLHIpLHMmJm1pdChvKSxvKX1mdW5jdGlvbiB4Mm4odCxlKXt2YXIgbixyLHMsbztmb3Iobj0hZXx8IXQudS5IYygoaWwoKSx0ZykpLG89MCxzPW5ldyBTKHQuZS5DZigpKTtzLmE8cy5jLmMubGVuZ3RoOyl7aWYocj11KFEocyksODM4KSxyLkhmKCk9PShiZSgpLGFjKSl0aHJvdyBudChuZXcgUG4oIkxhYmVsIGFuZCBub2RlIHNpemUgY2FsY3VsYXRvciBjYW4gb25seSBiZSB1c2VkIHdpdGggcG9ydHMgdGhhdCBoYXZlIHBvcnQgc2lkZXMgYXNzaWduZWQuIikpO3IudmYobysrKSxtdW4odCxyLG4pfX1mdW5jdGlvbiBrMm4odCxlKXt2YXIgbixyLHMsbyxoO3JldHVybiBzPWUuSGgodC5hKSxzJiYocj0oIXMuYiYmKHMuYj1uZXcgQWwoKGxuKCksSmEpLHBjLHMpKSxzLmIpLG49anIoSmYocixOYSkpLG4hPW51bGwmJihvPW4ubGFzdEluZGV4T2YoIiMiKSxoPW89PS0xP0IydCh0LGUuQWooKSxuKTpvPT0wP3BEKHQsbnVsbCxuLnN1YnN0cigxKSk6cEQodCxuLnN1YnN0cigwLG8pLG4uc3Vic3RyKG8rMSkpLF90KGgsMTQ4KSkpP3UoaCwxNDgpOm51bGx9ZnVuY3Rpb24gRTJuKHQsZSl7dmFyIG4scixzLG8saDtyZXR1cm4gcj1lLkhoKHQuYSksciYmKG49KCFyLmImJihyLmI9bmV3IEFsKChsbigpLEphKSxwYyxyKSksci5iKSxvPWpyKEpmKG4sc3V0KSksbyE9bnVsbCYmKHM9by5sYXN0SW5kZXhPZigiIyIpLGg9cz09LTE/QjJ0KHQsZS5BaigpLG8pOnM9PTA/cEQodCxudWxsLG8uc3Vic3RyKDEpKTpwRCh0LG8uc3Vic3RyKDAscyksby5zdWJzdHIocysxKSksX3QoaCwxNDgpKSk/dShoLDE0OCk6bnVsbH1mdW5jdGlvbiBUNXQodCl7dmFyIGUsbixyLHMsbztmb3Iobj1uZXcgUyh0LmEuYSk7bi5hPG4uYy5jLmxlbmd0aDspe2ZvcihlPXUoUShuKSwzMDcpLGUuaj1udWxsLG89ZS5hLmEuZWMoKS5LYygpO28uT2IoKTspcj11KG8uUGIoKSw1NyksS2Yoci5iKSwoIWUuanx8ci5kLmM8ZS5qLmQuYykmJihlLmo9cik7Zm9yKHM9ZS5hLmEuZWMoKS5LYygpO3MuT2IoKTspcj11KHMuUGIoKSw1Nyksci5iLmE9ci5kLmMtZS5qLmQuYyxyLmIuYj1yLmQuZC1lLmouZC5kfXJldHVybiB0fWZ1bmN0aW9uIHVxKHQpe3ZhciBlLG4scixzLG87Zm9yKG49bmV3IFModC5hLmEpO24uYTxuLmMuYy5sZW5ndGg7KXtmb3IoZT11KFEobiksMTg5KSxlLmY9bnVsbCxvPWUuYS5hLmVjKCkuS2MoKTtvLk9iKCk7KXI9dShvLlBiKCksODEpLEtmKHIuZSksKCFlLmZ8fHIuZy5jPGUuZi5nLmMpJiYoZS5mPXIpO2ZvcihzPWUuYS5hLmVjKCkuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksODEpLHIuZS5hPXIuZy5jLWUuZi5nLmMsci5lLmI9ci5nLmQtZS5mLmcuZH1yZXR1cm4gdH1mdW5jdGlvbiBUMm4odCl7dmFyIGUsbixyO3JldHVybiBuPXUodC5hLDE5KS5hLHI9dSh0LmIsMTkpLmEsZT1iLk1hdGgubWF4KGIuTWF0aC5hYnMobiksYi5NYXRoLmFicyhyKSksbjxlJiZyPT0tZT9uZXcgeWEoZGUobisxKSxkZShyKSk6bj09ZSYmcjxlP25ldyB5YShkZShuKSxkZShyKzEpKTpuPj0tZSYmcj09ZT9uZXcgeWEoZGUobi0xKSxkZShyKSk6bmV3IHlhKGRlKG4pLGRlKHItMSkpfWZ1bmN0aW9uIExjZSgpe3JldHVybiBjbygpLHV0KG90KGg2biwxKSxvZSw3NywwLFtIRXQsJEV0LGhTLHNsdCxjOXQsZ1YsVFYsZUUsYTl0LFFFdCxpOXQsdEUsbzl0LEtFdCx1OXQsTkV0LHdWLGFsdCxmVix4VixoOXQseVYsUEV0LHM5dCxmOXQsa1YsbDl0LGRWLEdFdCxuOXQsZTl0LF9WLFJFdCxoVixiVixCRXQsSjcsSkV0LFlFdCxyOXQsZlMsekV0LGpFdCx0OXQsWEV0LHZWLEVWLEZFdCxtVixaRXQscFYsVUV0LFZFdCxiTyxsVixXRXQscUV0XSl9ZnVuY3Rpb24gXzJuKHQsZSxuKXt0LmQ9MCx0LmI9MCxlLms9PShHbigpLFVjKSYmbi5rPT1VYyYmdShLKGUsKGFlKCksSWkpKSwxMCk9PXUoSyhuLElpKSwxMCkmJihVcnQoZSkuaj09KGJlKCksT24pP2djZSh0LGUsbik6Z2NlKHQsbixlKSksZS5rPT1VYyYmbi5rPT1jYT9VcnQoZSkuaj09KGJlKCksT24pP3QuZD0xOnQuYj0xOm4uaz09VWMmJmUuaz09Y2EmJihVcnQobikuaj09KGJlKCksT24pP3QuYj0xOnQuZD0xKSxmZm4odCxlLG4pfWZ1bmN0aW9uIEMybih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssXyxNO3JldHVybiBNPXg0dCh0KSxlPXQuYSx3PWUhPW51bGwsdyYmZDgoTSwiY2F0ZWdvcnkiLHQuYSkscz1mTShuZXcgVG0odC5kKSksaD0hcyxoJiYoaz1uZXcgeWcsUWYoTSwia25vd25PcHRpb25zIixrKSxuPW5ldyB2enQoayksX2EobmV3IFRtKHQuZCksbikpLG89Zk0odC5nKSxkPSFvLGQmJihfPW5ldyB5ZyxRZihNLCJzdXBwb3J0ZWRGZWF0dXJlcyIsXykscj1uZXcgd3p0KF8pLF9hKHQuZyxyKSksTX1mdW5jdGlvbiBTMm4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrO2ZvcihyPSExLGU9MzM2LG49MCxvPW5ldyBEV3QodC5sZW5ndGgpLGQ9dCx3PTAsaz1kLmxlbmd0aDt3PGs7Kyt3KWg9ZFt3XSxyPXJ8KHAyKGgpLCExKSxzPShxcChoKSxoLmEpLHVlKG8uYSxEcihzKSksZSY9cy5xZCgpLG49bnVuKG4scy5yZCgpKTtyZXR1cm4gdSh1KEJZdChuZXcga24obnVsbCxJc3QobmV3IFRuKChWbSgpLGQzdChvLmEpKSwxNiksbmV3IHN0LGUsbikpLG5ldyB3dHQodCkpLDY3MCksODMzKX1mdW5jdGlvbiBBMm4odCxlKXt2YXIgbjt0LmQmJihlLmMhPXQuZS5jfHxSb24odC5lLmIsZS5iKSkmJih1ZSh0LmYsdC5kKSx0LmE9dC5kLmMrdC5kLmIsdC5kPW51bGwsdC5lPW51bGwpLFdZZShlLmIpP3QuYz1lOnQuYj1lLChlLmI9PShVOCgpLEN3KSYmIWUuYXx8ZS5iPT1EeSYmZS5hfHxlLmI9PSQ0JiZlLmF8fGUuYj09SXkmJiFlLmEpJiZ0LmMmJnQuYiYmKG49bmV3IGNoKHQuYSx0LmMuZCxlLmMtdC5hLHQuYi5kLXQuYy5kKSx0LmQ9bix0LmU9ZSl9ZnVuY3Rpb24gZEkodCl7dmFyIGU7aWYoTHF0LmNhbGwodGhpcyksdGhpcy5pPW5ldyBtWix0aGlzLmc9dCx0aGlzLmY9dSh0LmUmJnQuZSgpLDkpLmxlbmd0aCx0aGlzLmY9PTApdGhyb3cgbnQobmV3IFBuKCJUaGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBwaGFzZSBpbiB0aGUgcGhhc2UgZW51bWVyYXRpb24uIikpO3RoaXMuYz0oZT11KFdmKHRoaXMuZyksOSksbmV3IG9oKGUsdShmZihlLGUubGVuZ3RoKSw5KSwwKSksdGhpcy5hPW5ldyBacyx0aGlzLmI9bmV3IEFyfWZ1bmN0aW9uIF81dCh0LGUpe3ZhciBuLHI7aWYoZSE9dC5DYnx8dC5EYj4+MTYhPTcmJmUpe2lmKGM3KHQsZSkpdGhyb3cgbnQobmV3IFBuKEtDK0ZhZSh0KSkpO3I9bnVsbCx0LkNiJiYocj0obj10LkRiPj4xNixuPj0wP0szdCh0LHIpOnQuQ2IuaWgodCwtMS1uLG51bGwscikpKSxlJiYocj11KGUsNDkpLmdoKHQsMSxzTixyKSkscj1VdnQodCxlLHIpLHImJnIuRmkoKX1lbHNlIHQuRGImNCYmISh0LkRiJjEpJiZDaSh0LG5ldyBvYSh0LDEsNyxlLGUpKX1mdW5jdGlvbiBNY2UodCxlKXt2YXIgbixyO2lmKGUhPXQuQ2J8fHQuRGI+PjE2IT0zJiZlKXtpZihjNyh0LGUpKXRocm93IG50KG5ldyBQbihLQytHcmUodCkpKTtyPW51bGwsdC5DYiYmKHI9KG49dC5EYj4+MTYsbj49MD9YM3QodCxyKTp0LkNiLmloKHQsLTEtbixudWxsLHIpKSksZSYmKHI9dShlLDQ5KS5naCh0LDAsb04scikpLHI9V3Z0KHQsZSxyKSxyJiZyLkZpKCl9ZWxzZSB0LkRiJjQmJiEodC5EYiYxKSYmQ2kodCxuZXcgb2EodCwxLDMsZSxlKSl9ZnVuY3Rpb24gdGF0KHQsZSl7ZzcoKTt2YXIgbixyLHMsbyxoLGQsdyxrLF87cmV0dXJuIGUuZD50LmQmJihkPXQsdD1lLGU9ZCksZS5kPDYzP3Z2bih0LGUpOihoPSh0LmQmLTIpPDw0LGs9YW10KHQsaCksXz1hbXQoZSxoKSxyPWJhdCh0LEg2KGssaCkpLHM9YmF0KGUsSDYoXyxoKSksdz10YXQoayxfKSxuPXRhdChyLHMpLG89dGF0KGJhdChrLHIpLGJhdChzLF8pKSxvPVRhdChUYXQobyx3KSxuKSxvPUg2KG8saCksdz1INih3LGg8PDEpLFRhdChUYXQodyxvKSxuKSl9ZnVuY3Rpb24gTDJuKHQsZSxuKXt2YXIgcixzLG8saCxkO2ZvcihoPVFfKHQsbiksZD1OdChvMCxHZywxMCxlLmxlbmd0aCwwLDEpLHI9MCxvPWguS2MoKTtvLk9iKCk7KXM9dShvLlBiKCksMTEpLEJlKEZlKEsocywoYWUoKSxrTykpKSkmJihkW3IrK109dShLKHMsc2wpLDEwKSk7aWYocjxlLmxlbmd0aCl0aHJvdyBudChuZXcgSG8oIkV4cGVjdGVkICIrZS5sZW5ndGgrIiBoaWVyYXJjaGljYWwgcG9ydHMsIGJ1dCBmb3VuZCBvbmx5ICIrcisiLiIpKTtyZXR1cm4gZH1mdW5jdGlvbiBNMm4odCxlKXt2YXIgbixyLHMsbyxoLGQ7aWYoIXQudGIpe2ZvcihvPSghdC5yYiYmKHQucmI9bmV3IHFtKHQsYzEsdCkpLHQucmIpLGQ9bmV3IHg2KG8uaSkscz1uZXcgbnIobyk7cy5lIT1zLmkuZ2MoKTspcj11KGRyKHMpLDEzOCksaD1yLm5lKCksbj11KGg9PW51bGw/bHUoZC5mLG51bGwscik6bncoZC5nLGgsciksMTM4KSxuJiYoaD09bnVsbD9sdShkLmYsbnVsbCxuKTpudyhkLmcsaCxuKSk7dC50Yj1kfXJldHVybiB1KGpjKHQudGIsZSksMTM4KX1mdW5jdGlvbiBnSSh0LGUpe3ZhciBuLHIscyxvLGg7aWYoKHQuaT09bnVsbCYmYmQodCksdC5pKS5sZW5ndGgsIXQucCl7Zm9yKGg9bmV3IHg2KCgzKnQuZy5pLzJ8MCkrMSkscz1uZXcgTDYodC5nKTtzLmUhPXMuaS5nYygpOylyPXUoaXN0KHMpLDE3MCksbz1yLm5lKCksbj11KG89PW51bGw/bHUoaC5mLG51bGwscik6bncoaC5nLG8sciksMTcwKSxuJiYobz09bnVsbD9sdShoLmYsbnVsbCxuKTpudyhoLmcsbyxuKSk7dC5wPWh9cmV0dXJuIHUoamModC5wLGUpLDE3MCl9ZnVuY3Rpb24gQzV0KHQsZSxuLHIscyl7dmFyIG8saCxkLHcsaztmb3IoZGhuKHIrbHJ0KG4sbi4kZCgpKSxzKSxKWXQoZSxqbG4obikpLG89bi5mLG8mJkM1dCh0LGUsbywiQ2F1c2VkIGJ5OiAiLCExKSxkPShuLms9PW51bGwmJihuLms9TnQoa3V0LHJlLDc4LDAsMCwxKSksbi5rKSx3PTAsaz1kLmxlbmd0aDt3PGs7Kyt3KWg9ZFt3XSxDNXQodCxlLGgsIlN1cHByZXNzZWQ6ICIsITEpO2NvbnNvbGUuZ3JvdXBFbmQhPW51bGwmJmNvbnNvbGUuZ3JvdXBFbmQuY2FsbChjb25zb2xlKX1mdW5jdGlvbiBwSSh0LGUsbixyKXt2YXIgcyxvLGgsZCx3O2Zvcih3PWUuZSxkPXcubGVuZ3RoLGg9ZS5xLl9mKHcsbj8wOmQtMSxuKSxzPXdbbj8wOmQtMV0saD1ofHB1ZSh0LHMsbixyKSxvPW4/MTpkLTI7bj9vPGQ6bz49MDtvKz1uPzE6LTEpaD1ofGUuYy5TZih3LG8sbixyJiYhQmUoRmUoSyhlLmosKGFlKCksTXcpKSkpJiYhQmUoRmUoSyhlLmosKGFlKCksWTQpKSkpKSxoPWh8ZS5xLl9mKHcsbyxuKSxoPWh8cHVlKHQsd1tvXSxuLHIpO3JldHVybiBWcyh0LmMsZSksaH1mdW5jdGlvbiBscSh0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssXyxNLEI7Zm9yKF89Z1p0KHQuaiksTT0wLEI9Xy5sZW5ndGg7TTxCOysrTSl7aWYoaz1fW01dLG49PShobygpLGFsKXx8bj09TVMpZm9yKHc9cGQoay5nKSxzPXcsbz0wLGg9cy5sZW5ndGg7bzxoOysrbylyPXNbb10sejBuKGUscikmJmR3KHIsITApO2lmKG49PXN1fHxuPT1NUylmb3IoZD1wZChrLmUpLHM9ZCxvPTAsaD1zLmxlbmd0aDtvPGg7KytvKXI9c1tvXSwkMG4oZSxyKSYmZHcociwhMCl9fWZ1bmN0aW9uIEQybih0KXt2YXIgZSxuO3N3aXRjaChlPW51bGwsbj1udWxsLHRkbih0KS5nKXtjYXNlIDE6ZT0oYmUoKSxIbiksbj1CbjticmVhaztjYXNlIDI6ZT0oYmUoKSx5ciksbj1PbjticmVhaztjYXNlIDM6ZT0oYmUoKSxCbiksbj1IbjticmVhaztjYXNlIDQ6ZT0oYmUoKSxPbiksbj15cn1LQih0LHUoT3YoSGoodShQaSh0LmssZSksMTUpLk9jKCkscTQpKSwxMTMpKSxXQih0LHUoT3YocWoodShQaSh0LmssbiksMTUpLk9jKCkscTQpKSwxMTMpKX1mdW5jdGlvbiBJMm4odCl7dmFyIGUsbixyLHMsbyxoO2lmKHM9dShQZSh0LmosMCksMTEpLHMuZS5jLmxlbmd0aCtzLmcuYy5sZW5ndGg9PTApdC5uLmE9MDtlbHNle2ZvcihoPTAscj1qcChJMSh1dChvdCgkMSwxKSxNZSwyMCwwLFtuZXcgc2EocyksbmV3IENyKHMpXSkpKTtWcihyKTspbj11KElyKHIpLDExKSxoKz1uLmkubi5hK24ubi5hK24uYS5hO2U9dShLKHQsKHhlKCksUHcpKSw4KSxvPWU/ZS5hOjAsdC5uLmE9aC8ocy5lLmMubGVuZ3RoK3MuZy5jLmxlbmd0aCktb319ZnVuY3Rpb24gRGNlKHQsZSl7dmFyIG4scixzO2ZvcihyPW5ldyBTKGUuYSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KFEociksMjIxKSxPbnQodShuLmIsNjUpLGZhKHVjKHUoZS5iLDY1KS5jKSx1KGUuYiw2NSkuYSkpLHM9S3VlKHUoZS5iLDY1KS5iLHUobi5iLDY1KS5iKSxzPjEmJih0LmE9ITApLEd0bih1KG4uYiw2NSksRmkodWModShlLmIsNjUpLmMpLGxkKGZhKHVjKHUobi5iLDY1KS5hKSx1KGUuYiw2NSkuYSkscykpKSxBUXQodCxlKSxEY2UodCxuKX1mdW5jdGlvbiBJY2UodCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKG89bmV3IFModC5hLmEpO28uYTxvLmMuYy5sZW5ndGg7KXI9dShRKG8pLDE4OSksci5lPTAsci5kLmEuJGIoKTtmb3Iocz1uZXcgUyh0LmEuYSk7cy5hPHMuYy5jLmxlbmd0aDspZm9yKHI9dShRKHMpLDE4OSksbj1yLmEuYS5lYygpLktjKCk7bi5PYigpOylmb3IoZT11KG4uUGIoKSw4MSksZD1lLmYuS2MoKTtkLk9iKCk7KWg9dShkLlBiKCksODEpLGguZCE9ciYmKFZzKHIuZCxoKSwrK2guZC5lKX1mdW5jdGlvbiBPMm4odCl7dmFyIGUsbixyLHMsbyxoLGQsdztmb3Iodz10LmouYy5sZW5ndGgsbj0wLGU9dyxzPTIqdyxkPW5ldyBTKHQuaik7ZC5hPGQuYy5jLmxlbmd0aDspc3dpdGNoKGg9dShRKGQpLDExKSxoLmouZyl7Y2FzZSAyOmNhc2UgNDpoLnA9LTE7YnJlYWs7Y2FzZSAxOmNhc2UgMzpyPWguZS5jLmxlbmd0aCxvPWguZy5jLmxlbmd0aCxyPjAmJm8+MD9oLnA9ZSsrOnI+MD9oLnA9bisrOm8+MD9oLnA9cysrOmgucD1uKyt9cG4oKSxhYSh0LmosbmV3IENMKX1mdW5jdGlvbiBOMm4odCl7dmFyIGUsbjtuPW51bGwsZT11KFBlKHQuZywwKSwxNyk7ZG97aWYobj1lLmQuaSxlYShuLChhZSgpLHFoKSkpcmV0dXJuIHUoSyhuLHFoKSwxMSkuaTtpZihuLmshPShHbigpLHFzKSYmVnIobmV3IGFyKGxyKCRzKG4pLmEuS2MoKSxuZXcgSCkpKSllPXUoSXIobmV3IGFyKGxyKCRzKG4pLmEuS2MoKSxuZXcgSCkpKSwxNyk7ZWxzZSBpZihuLmshPXFzKXJldHVybiBudWxsfXdoaWxlKG4mJm4uayE9KEduKCkscXMpKTtyZXR1cm4gbn1mdW5jdGlvbiBQMm4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLF87Zm9yKGQ9ZS5qLGg9ZS5nLHc9dShQZShkLGQuYy5sZW5ndGgtMSksMTEzKSxfPShTbigwLGQuYy5sZW5ndGgpLHUoZC5jWzBdLDExMykpLGs9bXN0KHQsaCx3LF8pLG89MTtvPGQuYy5sZW5ndGg7bysrKW49KFNuKG8tMSxkLmMubGVuZ3RoKSx1KGQuY1tvLTFdLDExMykpLHM9KFNuKG8sZC5jLmxlbmd0aCksdShkLmNbb10sMTEzKSkscj1tc3QodCxoLG4scykscj5rJiYodz1uLF89cyxrPXIpO2UuYT1fLGUuYz13fWZ1bmN0aW9uIEYybih0LGUpe3ZhciBuLHI7aWYocj1ZTSh0LmIsZS5iKSwhcil0aHJvdyBudChuZXcgSG8oIkludmFsaWQgaGl0Ym94ZXMgZm9yIHNjYW5saW5lIGNvbnN0cmFpbnQgY2FsY3VsYXRpb24uIikpOyhqbmUoZS5iLHUoRlFlKHQuYixlLmIpLDU3KSl8fGpuZShlLmIsdShQUWUodC5iLGUuYiksNTcpKSkmJihxZCgpLGUuYisiIiksdC5hW2UuYi5mXT11KGJudCh0LmIsZS5iKSw1Nyksbj11KHBudCh0LmIsZS5iKSw1NyksbiYmKHQuYVtuLmZdPWUuYil9ZnVuY3Rpb24geWYodCl7aWYoIXQuYS5kfHwhdC5hLmUpdGhyb3cgbnQobmV3IEhvKChMMChXZ2UpLFdnZS5rKyIgbXVzdCBoYXZlIGEgc291cmNlIGFuZCB0YXJnZXQgIisoTDAoWDd0KSxYN3QuaykrIiBzcGVjaWZpZWQuIikpKTtpZih0LmEuZD09dC5hLmUpdGhyb3cgbnQobmV3IEhvKCJOZXR3b3JrIHNpbXBsZXggZG9lcyBub3Qgc3VwcG9ydCBzZWxmLWxvb3BzOiAiK3QuYSsiICIrdC5hLmQrIiAiK3QuYS5lKSk7cmV0dXJuIHBqKHQuYS5kLmcsdC5hKSxwaih0LmEuZS5iLHQuYSksdC5hfWZ1bmN0aW9uIEIybih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGs7Zm9yKGs9bmV3IERwKG5ldyBiJHQodCkpLGg9dXQob3QoTmJlLDEpLFVmZSwxMSwwLFtlLG5dKSxkPTAsdz1oLmxlbmd0aDtkPHc7KytkKWZvcihvPWhbZF0scHooay5hLG8sKEZuKCksTzIpKT09bnVsbCxzPW5ldyBNMShvLmIpO0pvKHMuYSl8fEpvKHMuYik7KXI9dShKbyhzLmEpP1Eocy5hKTpRKHMuYiksMTcpLHIuYz09ci5kfHxZTShrLG89PXIuYz9yLmQ6ci5jKTtyZXR1cm4gRHIoayksbmV3IHF1KGspfWZ1bmN0aW9uIE9jZSh0LGUsbil7dmFyIHIscyxvLGgsZCx3O2lmKHI9MCxlLmIhPTAmJm4uYiE9MCl7bz1zaShlLDApLGg9c2kobiwwKSxkPVp0KHZlKGlpKG8pKSksdz1adCh2ZShpaShoKSkpLHM9ITA7ZG97aWYoZD53LXQuYiYmZDx3K3QuYilyZXR1cm4tMTtkPnctdC5hJiZkPHcrdC5hJiYrK3IsZDw9dyYmby5iIT1vLmQuYz9kPVp0KHZlKGlpKG8pKSk6dzw9ZCYmaC5iIT1oLmQuYz93PVp0KHZlKGlpKGgpKSk6cz0hMX13aGlsZShzKX1yZXR1cm4gcn1mdW5jdGlvbiBSMm4odCxlLG4scixzKXt2YXIgbyxoLGQsdztmb3Iodz0obz11KFdmKFphKSw5KSxuZXcgb2gobyx1KGZmKG8sby5sZW5ndGgpLDkpLDApKSxkPW5ldyBTKHQuaik7ZC5hPGQuYy5jLmxlbmd0aDspaD11KFEoZCksMTEpLGVbaC5wXSYmKFE0bihoLGVbaC5wXSxyKSx3Zih3LGguaikpO3M/KEFzdCh0LGUsKGJlKCksSG4pLDIqbixyKSxBc3QodCxlLEJuLDIqbixyKSk6KEFzdCh0LGUsKGJlKCksT24pLDIqbixyKSxBc3QodCxlLHlyLDIqbixyKSl9ZnVuY3Rpb24gajJuKHQpe3ZhciBlLG4scixzLG87aWYobz1uZXcgbGUsX3UodC5iLG5ldyBYbihvKSksdC5iLmM9TnQoUW4sTWUsMSwwLDUsMSksby5jLmxlbmd0aCE9MCl7Zm9yKGU9KFNuKDAsby5jLmxlbmd0aCksdShvLmNbMF0sNzgpKSxuPTEscj1vLmMubGVuZ3RoO248cjsrK24pcz0oU24obixvLmMubGVuZ3RoKSx1KG8uY1tuXSw3OCkpLHMhPWUmJlFkbihlLHMpO2lmKF90KGUsNjApKXRocm93IG50KHUoZSw2MCkpO2lmKF90KGUsMjg5KSl0aHJvdyBudCh1KGUsMjg5KSl9fWZ1bmN0aW9uICQybih0LGUpe3ZhciBuLHIscyxvO2Zvcih0PXQ9PW51bGw/TXU6KEluKHQpLHQpLG49bmV3IExtLG89MCxyPTA7cjxlLmxlbmd0aCYmKHM9dC5pbmRleE9mKCIlcyIsbykscyE9LTEpOylZcihuLHQuc3Vic3RyKG8scy1vKSksd2MobixlW3IrK10pLG89cysyO2lmKFlyKG4sdC5zdWJzdHIobykpLHI8ZS5sZW5ndGgpe2ZvcihuLmErPSIgWyIsd2MobixlW3IrK10pO3I8ZS5sZW5ndGg7KW4uYSs9WGEsd2MobixlW3IrK10pO24uYSs9Il0ifXJldHVybiBuLmF9ZnVuY3Rpb24gejJuKHQpe3ZhciBlLG4scixzO2ZvcihlPTAscj10Lmxlbmd0aCxzPXItNCxuPTA7bjxzOyllPSgkcihuKzMsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChuKzMpKygkcihuKzIsdC5sZW5ndGgpLDMxKih0LmNoYXJDb2RlQXQobisyKSsoJHIobisxLHQubGVuZ3RoKSwzMSoodC5jaGFyQ29kZUF0KG4rMSkrKCRyKG4sdC5sZW5ndGgpLDMxKih0LmNoYXJDb2RlQXQobikrMzEqZSkpKSkpKSksZT1lfDAsbis9NDtmb3IoO248cjspZT1lKjMxK1RhKHQsbisrKTtyZXR1cm4gZT1lfDAsZX1mdW5jdGlvbiBxMm4odCl7dmFyIGUsbjtmb3Iobj1uZXcgYXIobHIoJHModCkuYS5LYygpLG5ldyBIKSk7VnIobik7KWlmKGU9dShJcihuKSwxNyksZS5kLmkuayE9KEduKCksUGwpKXRocm93IG50KG5ldyBCMygkb3QrWkQodCkrIicgaGFzIGl0cyBsYXllciBjb25zdHJhaW50IHNldCB0byBMQVNULCBidXQgaGFzIGF0IGxlYXN0IG9uZSBvdXRnb2luZyBlZGdlIHRoYXQgIGRvZXMgbm90IGdvIHRvIGEgTEFTVF9TRVBBUkFURSBub2RlLiBUaGF0IG11c3Qgbm90IGhhcHBlbi4iKSl9ZnVuY3Rpb24gSDJuKHQsZSxuLHIpe3ZhciBzLG8saCxkLHcsayxfLE0sQjtmb3Iodz0wLF89bmV3IFModC5hKTtfLmE8Xy5jLmMubGVuZ3RoOyl7Zm9yKGs9dShRKF8pLDEwKSxkPTAsbz1uZXcgYXIobHIoVW8oaykuYS5LYygpLG5ldyBIKSk7VnIobyk7KXM9dShJcihvKSwxNyksTT1TMShzLmMpLmIsQj1TMShzLmQpLmIsZD1iLk1hdGgubWF4KGQsYi5NYXRoLmFicyhCLU0pKTt3PWIuTWF0aC5tYXgodyxkKX1yZXR1cm4gaD1yKmIuTWF0aC5taW4oMSxlL24pKncsaH1mdW5jdGlvbiBTNXQodCl7dmFyIGU7cmV0dXJuIGU9bmV3IEJULHQmMjU2JiYoZS5hKz0iRiIpLHQmMTI4JiYoZS5hKz0iSCIpLHQmNTEyJiYoZS5hKz0iWCIpLHQmMiYmKGUuYSs9ImkiKSx0JjgmJihlLmErPSJtIiksdCY0JiYoZS5hKz0icyIpLHQmMzImJihlLmErPSJ1IiksdCY2NCYmKGUuYSs9InciKSx0JjE2JiYoZS5hKz0ieCIpLHQmeGYmJihlLmErPSIsIiksVnB0KGUuYSl9ZnVuY3Rpb24gVjJuKHQsZSl7dmFyIG4scixzLG87Zm9yKG1yKGUsIlJlc2l6ZSBjaGlsZCBncmFwaCB0byBmaXQgcGFyZW50LiIsMSkscj1uZXcgUyh0LmIpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShRKHIpLDI5KSxScyh0LmEsbi5hKSxuLmEuYz1OdChRbixNZSwxLDAsNSwxKTtmb3Iobz1uZXcgUyh0LmEpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShRKG8pLDEwKSxMbyhzLG51bGwpO3QuYi5jPU50KFFuLE1lLDEsMCw1LDEpLGR2bih0KSx0LmUmJkp3bih0LmUsdCksb3IoZSl9ZnVuY3Rpb24gRzJuKHQpe3ZhciBlLG4scixzLG8saCxkLHcsaztpZihyPXQuYixvPXIuZSxoPUQ2KHUoSyhyLCh4ZSgpLHdzKSksOTgpKSxuPSEhbyYmdShLKG8sKGFlKCksV2MpKSwyMSkuSGMoKGdvKCkseWgpKSwhKGh8fG4pKWZvcihrPShkPW5ldyBtMSh0LmUpLmEudmMoKS5LYygpLG5ldyB5MShkKSk7ay5hLk9iKCk7KXc9KGU9dShrLmEuUGIoKSw0MiksdShlLmRkKCksMTEzKSksdy5hJiYocz13LmQsdGMocyxudWxsKSx3LmM9ITAsdC5hPSEwKX1mdW5jdGlvbiBVMm4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLF8sTSxCLHE7Zm9yKEI9LTEscT0wLGs9dCxfPTAsTT1rLmxlbmd0aDtfPE07KytfKXtmb3Iodz1rW19dLG89dyxoPTAsZD1vLmxlbmd0aDtoPGQ7KytoKWZvcihzPW9baF0sZT1uZXcgS1Z0KEI9PS0xP3RbMF06dFtCXSxOc2UocykpLG49MDtuPHMuai5jLmxlbmd0aDtuKyspZm9yKHI9bisxO3I8cy5qLmMubGVuZ3RoO3IrKylDWXQoZSx1KFBlKHMuaixuKSwxMSksdShQZShzLmosciksMTEpKT4wJiYrK3E7KytCfXJldHVybiBxfWZ1bmN0aW9uIFcybih0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKGg9dShLKGUsKGh3KCksckN0KSksNDI1KSxvPXNpKGUuYiwwKTtvLmIhPW8uZC5jOylpZihzPXUoaWkobyksODYpLHQuYltzLmddPT0wKXtzd2l0Y2goaC5nKXtjYXNlIDA6YXNlKHQscyk7YnJlYWs7Y2FzZSAxOllwbih0LHMpfXQuYltzLmddPTJ9Zm9yKHI9c2kodC5hLDApO3IuYiE9ci5kLmM7KW49dShpaShyKSwxODgpLHJ5KG4uYi5kLG4sITApLHJ5KG4uYy5iLG4sITApO2VlKGUsKG1jKCksWF90KSx0LmEpfWZ1bmN0aW9uIGh1KHQsZSl7c28oKTt2YXIgbixyLHMsbztyZXR1cm4gZT9lPT0oJGkoKSxUNWUpfHwoZT09ZjVlfHxlPT1LMnx8ZT09aDVlKSYmdCE9ZEx0P25ldyB3NnQodCxlKToocj11KGUsNjc3KSxuPXIucGsoKSxufHwoeTgoTW8oKEd1KCksU2EpLGUpKSxuPXIucGsoKSksbz0oIW4uaSYmKG4uaT1uZXcgQXIpLG4uaSkscz11KGNjKEZvKG8uZix0KSksMTk0MiksIXMmJkFpKG8sdCxzPW5ldyB3NnQodCxlKSkscyk6YzVlfWZ1bmN0aW9uIEsybih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXztmb3Iodz11KEsodCwoYWUoKSxJaSkpLDExKSxrPW5jKHV0KG90KG5hLDEpLHJlLDgsMCxbdy5pLm4sdy5uLHcuYV0pKS5hLF89dC5pLm4uYixuPXBkKHQuZSkscz1uLG89MCxoPXMubGVuZ3RoO288aDsrK28pcj1zW29dLHBhKHIsdyksWGIoci5hLG5ldyBSZShrLF8pKSxlJiYoZD11KEsociwoeGUoKSxPbykpLDc0KSxkfHwoZD1uZXcganUsZWUocixPbyxkKSksYWkoZCxuZXcgUmUoayxfKSkpfWZ1bmN0aW9uIFkybih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXztmb3Iocz11KEsodCwoYWUoKSxJaSkpLDExKSxrPW5jKHV0KG90KG5hLDEpLHJlLDgsMCxbcy5pLm4scy5uLHMuYV0pKS5hLF89dC5pLm4uYixuPXBkKHQuZyksaD1uLGQ9MCx3PWgubGVuZ3RoO2Q8dzsrK2Qpbz1oW2RdLEJhKG8scyksJEd0KG8uYSxuZXcgUmUoayxfKSksZSYmKHI9dShLKG8sKHhlKCksT28pKSw3NCkscnx8KHI9bmV3IGp1LGVlKG8sT28scikpLGFpKHIsbmV3IFJlKGssXykpKX1mdW5jdGlvbiBYMm4odCxlKXt2YXIgbixyLHMsbyxoLGQ7Zm9yKHQuYj1uZXcgbGUsdC5kPXUoSyhlLChhZSgpLEl4KSksMjMwKSx0LmU9YWluKHQuZCksbz1uZXcgY3Mscz1MMSh1dChvdChEYmUsMSksVmZlLDM3LDAsW2VdKSksaD0wO2g8cy5jLmxlbmd0aDspcj0oU24oaCxzLmMubGVuZ3RoKSx1KHMuY1toXSwzNykpLHIucD1oKyssbj1uZXcgVWxlKHIsdC5hLHQuYiksUnMocyxuLmIpLHVlKHQuYixuKSxuLnMmJihkPXNpKG8sMCksWE0oZCxuKSk7cmV0dXJuIHQuYz1uZXcgUXMsb31mdW5jdGlvbiBRMm4odCxlKXt2YXIgbixyLHMsbyxoLGQ7Zm9yKGg9dSh1KFBpKHQucixlKSwyMSksODQpLktjKCk7aC5PYigpOylvPXUoaC5QYigpLDExMSksbj1vLmM/TnZ0KG8uYyk6MCxuPjA/by5hPyhkPW8uYi5yZigpLmEsbj5kJiYocz0obi1kKS8yLG8uZC5iPXMsby5kLmM9cykpOm8uZC5jPXQucytuOlRfKHQudSkmJihyPWs0dChvLmIpLHIuYzwwJiYoby5kLmI9LXIuYyksci5jK3IuYj5vLmIucmYoKS5hJiYoby5kLmM9ci5jK3IuYi1vLmIucmYoKS5hKSl9ZnVuY3Rpb24gWjJuKHQsZSl7dmFyIG4scixzLG87Zm9yKG1yKGUsIlNlbWktSW50ZXJhY3RpdmUgQ3Jvc3NpbmcgTWluaW1pemF0aW9uIFByb2Nlc3NvciIsMSksbj0hMSxzPW5ldyBTKHQuYik7cy5hPHMuYy5jLmxlbmd0aDspcj11KFEocyksMjkpLG89cUQoViQoV2koV2kobmV3IGtuKG51bGwsbmV3IFRuKHIuYSwxNikpLG5ldyBSOSksbmV3IE1MKSxuZXcgZ0YpLG5ldyBwRiksbj1ufG8uYSE9bnVsbDtuJiZlZSh0LChhZSgpLFk5dCksKEZuKCksITApKSxvcihlKX1mdW5jdGlvbiBKMm4odCxlLG4pe3ZhciByLHMsbyxoLGQ7aWYocz1uLCFzJiYocz1uZXcgV2spLG1yKHMsIkxheW91dCIsdC5hLmMubGVuZ3RoKSxCZShGZShLKGUsKGh3KCksdEN0KSkpKSlmb3IocWQoKSxyPTA7cjx0LmEuYy5sZW5ndGg7cisrKWQ9KHI8MTA/IjAiOiIiKStyKyssIiIrZCtNcChkbCh1KFBlKHQuYSxyKSw1MSkpKTtmb3IoaD1uZXcgUyh0LmEpO2guYTxoLmMuYy5sZW5ndGg7KW89dShRKGgpLDUxKSxvLnBmKGUsemMocywxKSk7b3Iocyl9ZnVuY3Rpb24gdHZuKHQpe3ZhciBlLG47aWYoZT11KHQuYSwxOSkuYSxuPXUodC5iLDE5KS5hLGU+PTApe2lmKGU9PW4pcmV0dXJuIG5ldyB5YShkZSgtZS0xKSxkZSgtZS0xKSk7aWYoZT09LW4pcmV0dXJuIG5ldyB5YShkZSgtZSksZGUobisxKSl9cmV0dXJuIGIuTWF0aC5hYnMoZSk+Yi5NYXRoLmFicyhuKT9lPDA/bmV3IHlhKGRlKC1lKSxkZShuKSk6bmV3IHlhKGRlKC1lKSxkZShuKzEpKTpuZXcgeWEoZGUoZSsxKSxkZShuKSl9ZnVuY3Rpb24gZXZuKHQpe3ZhciBlLG47bj11KEsodCwoeGUoKSxkdSkpLDE2MyksZT11KEsodCwoYWUoKSxQMikpLDMwMyksbj09KHBoKCksZ2IpPyhlZSh0LGR1LF9PKSxlZSh0LFAyLChCMCgpLFc0KSkpOm49PUZ5PyhlZSh0LGR1LF9PKSxlZSh0LFAyLChCMCgpLFN4KSkpOmU9PShCMCgpLFc0KT8oZWUodCxkdSxnYiksZWUodCxQMix5TykpOmU9PVN4JiYoZWUodCxkdSxGeSksZWUodCxQMix5TykpfWZ1bmN0aW9uIGhxKCl7aHE9WCxOTz1uZXcgTVEsT21lPUVpKG5ldyBacywoWWEoKSxmdSksKGNvKCksZlYpKSxGbWU9ZWwoRWkobmV3IFpzLGZ1LHlWKSxqbyxtViksQm1lPWF3KGF3KE9SKGVsKEVpKG5ldyBacyxMZCxUViksam8sRVYpLEdjKSxrViksX1YpLE5tZT1lbChFaShFaShFaShuZXcgWnMsZmIsZ1YpLEdjLGJWKSxHYyxKNyksam8scFYpLFBtZT1lbChFaShFaShuZXcgWnMsR2MsSjcpLEdjLGhWKSxqbyxsVil9ZnVuY3Rpb24gYkMoKXtiQz1YLCRtZT1FaShlbChuZXcgWnMsKFlhKCksam8pLChjbygpLFVFdCkpLGZ1LGZWKSxWbWU9YXcoYXcoT1IoZWwoRWkobmV3IFpzLExkLFRWKSxqbyxFViksR2MpLGtWKSxfViksem1lPWVsKEVpKEVpKEVpKG5ldyBacyxmYixnViksR2MsYlYpLEdjLEo3KSxqbyxwViksSG1lPUVpKEVpKG5ldyBacyxmdSx5Viksam8sbVYpLHFtZT1lbChFaShFaShuZXcgWnMsR2MsSjcpLEdjLGhWKSxqbyxsVil9ZnVuY3Rpb24gbnZuKHQsZSxuLHIscyl7dmFyIG8saDsoIVdhKGUpJiZlLmMuaS5jPT1lLmQuaS5jfHwhV2VlKG5jKHV0KG90KG5hLDEpLHJlLDgsMCxbcy5pLm4scy5uLHMuYV0pKSxuKSkmJiFXYShlKSYmKGUuYz09cz91OChlLmEsMCxuZXcgU28obikpOmFpKGUuYSxuZXcgU28obikpLHImJiFTMCh0LmEsbikmJihoPXUoSyhlLCh4ZSgpLE9vKSksNzQpLGh8fChoPW5ldyBqdSxlZShlLE9vLGgpKSxvPW5ldyBTbyhuKSxrcyhoLG8saC5jLmIsaC5jKSxWcyh0LmEsbykpKX1mdW5jdGlvbiBydm4odCl7dmFyIGUsbjtmb3Iobj1uZXcgYXIobHIoVW8odCkuYS5LYygpLG5ldyBIKSk7VnIobik7KWlmKGU9dShJcihuKSwxNyksZS5jLmkuayE9KEduKCksUGwpKXRocm93IG50KG5ldyBCMygkb3QrWkQodCkrIicgaGFzIGl0cyBsYXllciBjb25zdHJhaW50IHNldCB0byBGSVJTVCwgYnV0IGhhcyBhdCBsZWFzdCBvbmUgaW5jb21pbmcgZWRnZSB0aGF0ICBkb2VzIG5vdCBjb21lIGZyb20gYSBGSVJTVF9TRVBBUkFURSBub2RlLiBUaGF0IG11c3Qgbm90IGhhcHBlbi4iKSl9ZnVuY3Rpb24gaXZuKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsaztpZihzPVFyZSh0LkRiJjI1NCkscz09MCl0LkViPW47ZWxzZXtpZihzPT0xKWQ9TnQoUW4sTWUsMSwyLDUsMSksbz13c3QodCxlKSxvPT0wPyhkWzBdPW4sZFsxXT10LkViKTooZFswXT10LkViLGRbMV09bik7ZWxzZSBmb3IoZD1OdChRbixNZSwxLHMrMSw1LDEpLGg9bzIodC5FYikscj0yLHc9MCxrPTA7cjw9MTI4O3I8PD0xKXI9PWU/ZFtrKytdPW46dC5EYiZyJiYoZFtrKytdPWhbdysrXSk7dC5FYj1kfXQuRGJ8PWV9ZnVuY3Rpb24gTmNlKHQsZSxuKXt2YXIgcixzLG8saDtmb3IodGhpcy5iPW5ldyBsZSxzPTAscj0wLGg9bmV3IFModCk7aC5hPGguYy5jLmxlbmd0aDspbz11KFEoaCksMTY3KSxuJiZyeW4obyksdWUodGhpcy5iLG8pLHMrPW8ubyxyKz1vLnA7dGhpcy5iLmMubGVuZ3RoPjAmJihvPXUoUGUodGhpcy5iLDApLDE2Nykscys9by5vLHIrPW8ucCkscyo9MixyKj0yLGU+MT9zPUNzKGIuTWF0aC5jZWlsKHMqZSkpOnI9Q3MoYi5NYXRoLmNlaWwoci9lKSksdGhpcy5hPW5ldyBwM3QocyxyKX1mdW5jdGlvbiBQY2UodCxlLG4scixzLG8pe3ZhciBoLGQsdyxrLF8sTSxCLHEsRyxXLFosYnQ7Zm9yKF89cixlLmomJmUubz8ocT11KHRyKHQuZixlLkEpLDU3KSxXPXEuZC5jK3EuZC5iLC0tXyk6Vz1lLmEuYytlLmEuYixNPXMsbi5xJiZuLm8/KHE9dSh0cih0LmYsbi5DKSw1Nyksaz1xLmQuYywrK00pOms9bi5hLmMsWj1rLVcsdz1iLk1hdGgubWF4KDIsTS1fKSxkPVovdyxHPVcrZCxCPV87QjxNOysrQiloPXUoby5YYihCKSwxMjgpLGJ0PWguYS5iLGguYS5jPUctYnQvMixHKz1kfWZ1bmN0aW9uIEE1dCh0LGUsbixyLHMsbyl7dmFyIGgsZCx3LGssXyxNO2ZvcihrPW4uYy5sZW5ndGgsbyYmKHQuYz1OdChTcixKciwyNSxlLmxlbmd0aCwxNSwxKSksaD1zPzA6ZS5sZW5ndGgtMTtzP2g8ZS5sZW5ndGg6aD49MDtoKz1zPzE6LTEpe2ZvcihkPWVbaF0sdz1yPT0oYmUoKSxIbik/cz9yYyhkLHIpOmMyKHJjKGQscikpOnM/YzIocmMoZCxyKSk6cmMoZCxyKSxvJiYodC5jW2QucF09dy5nYygpKSxNPXcuS2MoKTtNLk9iKCk7KV89dShNLlBiKCksMTEpLHQuZFtfLnBdPWsrKztScyhuLHcpfX1mdW5jdGlvbiBGY2UodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLF87Zm9yKG89WnQodmUodC5iLktjKCkuUGIoKSkpLGs9WnQodmUoZGNuKGUuYikpKSxyPWxkKHVjKHQuYSksay1uKSxzPWxkKHVjKGUuYSksbi1vKSxfPUZpKHIscyksbGQoXywxLyhrLW8pKSx0aGlzLmE9Xyx0aGlzLmI9bmV3IGxlLGQ9ITAsaD10LmIuS2MoKSxoLlBiKCk7aC5PYigpOyl3PVp0KHZlKGguUGIoKSkpLGQmJnctbj55Y3QmJih0aGlzLmIuRmMobiksZD0hMSksdGhpcy5iLkZjKHcpO2QmJnRoaXMuYi5GYyhuKX1mdW5jdGlvbiBzdm4odCl7dmFyIGUsbixyLHM7aWYoYnduKHQsdC5uKSx0LmQuYy5sZW5ndGg+MCl7Zm9yKFBUKHQuYyk7bzV0KHQsdShRKG5ldyBTKHQuZS5hKSksMTIxKSk8dC5lLmEuYy5sZW5ndGg7KXtmb3IoZT1YZm4odCkscz1lLmUuZS1lLmQuZS1lLmEsZS5lLmomJihzPS1zKSxyPW5ldyBTKHQuZS5hKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoUShyKSwxMjEpLG4uaiYmKG4uZSs9cyk7UFQodC5jKX1QVCh0LmMpLFg0dCh0LHUoUShuZXcgUyh0LmUuYSkpLDEyMSkpLEhsZSh0KX19ZnVuY3Rpb24gYXZuKHQsZSl7dmFyIG4scixzLG8saDtmb3Iocz11KFBpKHQuYSwocDQoKSxMVikpLDE1KS5LYygpO3MuT2IoKTspc3dpdGNoKHI9dShzLlBiKCksMTAxKSxuPXUoUGUoci5qLDApLDExMykuZC5qLG89bmV3IHF1KHIuaiksYWEobyxuZXcgTlgpLGUuZyl7Y2FzZSAxOlNzdCh0LG8sbiwoSnYoKSxkYiksMSk7YnJlYWs7Y2FzZSAwOmg9aTJuKG8pLFNzdCh0LG5ldyBLZChvLDAsaCksbiwoSnYoKSxkYiksMCksU3N0KHQsbmV3IEtkKG8saCxvLmMubGVuZ3RoKSxuLGRiLDEpfX1mdW5jdGlvbiBvdm4odCxlKXtYNigpO3ZhciBuLHI7aWYobj1OcnQoajgoKSxlLnRnKCkpLG4pe2lmKHI9bi5qLF90KHQsMjM5KSlyZXR1cm4gZ3JuKHUodCwzMykpP3p1KHIsKHQxKCksdWEpKXx8enUocixxbik6enUociwodDEoKSx1YSkpO2lmKF90KHQsMzUyKSlyZXR1cm4genUociwodDEoKSxJZCkpO2lmKF90KHQsMTg2KSlyZXR1cm4genUociwodDEoKSxxMikpO2lmKF90KHQsMzU0KSlyZXR1cm4genUociwodDEoKSx0cCkpfXJldHVybiEwfWZ1bmN0aW9uIGN2bih0LGUsbil7dmFyIHIscyxvLGgsZCx3O2lmKHM9bixvPXMuYWsoKSxHMCh0LmUsbykpe2lmKG8uaGkoKSl7Zm9yKHI9dSh0LmcsMTE5KSxoPTA7aDx0Lmk7KytoKWlmKGQ9cltoXSxTaShkLHMpJiZoIT1lKXRocm93IG50KG5ldyBQbihYSSkpfX1lbHNlIGZvcih3PWh1KHQuZS5UZygpLG8pLHI9dSh0LmcsMTE5KSxoPTA7aDx0Lmk7KytoKWlmKGQ9cltoXSx3LnJsKGQuYWsoKSkmJmghPWUpdGhyb3cgbnQobmV3IFBuKGVPKSk7cmV0dXJuIHUobDQodCxlLG4pLDcyKX1mdW5jdGlvbiBCY2UodCxlKXtpZihlIGluc3RhbmNlb2YgT2JqZWN0KXRyeXtpZihlLl9famF2YSRleGNlcHRpb249dCxuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZigibXNpZSIpIT0tMSYmJGRvYy5kb2N1bWVudE1vZGU8OSlyZXR1cm47dmFyIG49dDtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLHtjYXVzZTp7Z2V0OmZ1bmN0aW9uKCl7dmFyIHI9bi5aZCgpO3JldHVybiByJiZyLlhkKCl9fSxzdXBwcmVzc2VkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5ZZCgpfX19KX1jYXRjaHt9fWZ1bmN0aW9uIFJjZSh0LGUpe3ZhciBuLHIscyxvLGg7aWYocj1lPj41LGUmPTMxLHI+PXQuZClyZXR1cm4gdC5lPDA/KGViKCksQXV0KTooZWIoKSxZNyk7aWYobz10LmQtcixzPU50KFNyLEpyLDI1LG8rMSwxNSwxKSxaMG4ocyxvLHQuYSxyLGUpLHQuZTwwKXtmb3Iobj0wO248ciYmdC5hW25dPT0wO24rKyk7aWYobjxyfHxlPjAmJnQuYVtuXTw8MzItZSl7Zm9yKG49MDtuPG8mJnNbbl09PS0xO24rKylzW25dPTA7bj09byYmKytvLCsrc1tuXX19cmV0dXJuIGg9bmV3IFkzKHQuZSxvLHMpLE9fKGgpLGh9ZnVuY3Rpb24gamNlKHQpe3ZhciBlLG4scixzO3JldHVybiBzPV8xKHQpLG49bmV3IF9pKHMpLHI9bmV3IGlhKHMpLGU9bmV3IGxlLFJzKGUsKCF0LmQmJih0LmQ9bmV3IEVuKHJhLHQsOCw1KSksdC5kKSksUnMoZSwoIXQuZSYmKHQuZT1uZXcgRW4ocmEsdCw3LDQpKSx0LmUpKSx1KCRsKHh1KFdpKG5ldyBrbihudWxsLG5ldyBUbihlLDE2KSksbiksciksWW0obmV3IFl0LG5ldyBNaSxuZXcgYmksbmV3IGRuLHV0KG90KHdsLDEpLG9lLDEzMiwwLFsoTjEoKSxMeSksWWxdKSkpLDIxKX1mdW5jdGlvbiAkY2UodCxlLG4scil7dmFyIHMsbyxoLGQsdztpZihkPShzbygpLHUoZSw2NikuT2ooKSksRzAodC5lLGUpKXtpZihlLmhpKCkmJm1xKHQsZSxyLF90KGUsOTkpJiYodShlLDE4KS5CYiZRYSkhPTApKXRocm93IG50KG5ldyBQbihYSSkpfWVsc2UgZm9yKHc9aHUodC5lLlRnKCksZSkscz11KHQuZywxMTkpLGg9MDtoPHQuaTsrK2gpaWYobz1zW2hdLHcucmwoby5haygpKSl0aHJvdyBudChuZXcgUG4oZU8pKTtKXyh0LEI0dCh0LGUsbiksZD91KHIsNzIpOllkKGUscikpfWZ1bmN0aW9uIEcwKHQsZSl7c28oKTt2YXIgbixyLHM7cmV0dXJuIGUuJGooKT8hMDplLlpqKCk9PS0yP2U9PShzeCgpLFV4KXx8ZT09R3h8fGU9PUlmdHx8ZT09T2Z0PyEwOihzPXQuVGcoKSxlcyhzLGUpPj0wPyExOihuPVQ0KChHdSgpLFNhKSxzLGUpLG4/KHI9bi5aaigpLChyPjF8fHI9PS0xKSYmJHYoTW8oU2EsbikpIT0zKTohMCkpOiExfWZ1bmN0aW9uIHV2bih0LGUsbixyKXt2YXIgcyxvLGgsZCx3O3JldHVybiBkPVJvKHUoQXQoKCFlLmImJihlLmI9bmV3IEVuKHZyLGUsNCw3KSksZS5iKSwwKSw4MikpLHc9Um8odShBdCgoIWUuYyYmKGUuYz1uZXcgRW4odnIsZSw1LDgpKSxlLmMpLDApLDgyKSksaHMoZCk9PWhzKHcpfHxabSh3LGQpP251bGw6KGg9ckQoZSksaD09bj9yOihvPXUodHIodC5hLGgpLDEwKSxvJiYocz1vLmUscyk/czpudWxsKSl9ZnVuY3Rpb24gbHZuKHQsZSl7dmFyIG47c3dpdGNoKG49dShLKHQsKHhlKCksWlYpKSwyNzYpLG1yKGUsIkxhYmVsIHNpZGUgc2VsZWN0aW9uICgiK24rIikiLDEpLG4uZyl7Y2FzZSAwOnRjZSh0LChWbCgpLHUwKSk7YnJlYWs7Y2FzZSAxOnRjZSh0LChWbCgpLHliKSk7YnJlYWs7Y2FzZSAyOnBsZSh0LChWbCgpLHUwKSk7YnJlYWs7Y2FzZSAzOnBsZSh0LChWbCgpLHliKSk7YnJlYWs7Y2FzZSA0OlhjZSh0LChWbCgpLHUwKSk7YnJlYWs7Y2FzZSA1OlhjZSh0LChWbCgpLHliKSl9b3IoZSl9ZnVuY3Rpb24gTDV0KHQsZSxuKXt2YXIgcixzLG8saCxkLHc7aWYocj1ZS2Uobix0Lmxlbmd0aCksaD10W3JdLGhbMF0uaz09KEduKCksSXMpKWZvcihvPXRIdChuLGgubGVuZ3RoKSx3PWUuaixzPTA7czx3LmMubGVuZ3RoO3MrKylkPShTbihzLHcuYy5sZW5ndGgpLHUody5jW3NdLDExKSksKG4/ZC5qPT0oYmUoKSxIbik6ZC5qPT0oYmUoKSxCbikpJiZCZShGZShLKGQsKGFlKCksa08pKSkpJiYobGgodyxzLHUoSyhoW29dLChhZSgpLElpKSksMTEpKSxvKz1uPzE6LTEpfWZ1bmN0aW9uIGh2bih0LGUpe3ZhciBuLHIscyxvLGg7aD1uZXcgbGUsbj1lO2RvIG89dSh0cih0LmIsbiksMTI4KSxvLkI9bi5jLG8uRD1uLmQsaC5jW2guYy5sZW5ndGhdPW8sbj11KHRyKHQuayxuKSwxNyk7d2hpbGUobik7cmV0dXJuIHI9KFNuKDAsaC5jLmxlbmd0aCksdShoLmNbMF0sMTI4KSksci5qPSEwLHIuQT11KHIuZC5hLmVjKCkuS2MoKS5QYigpLDE3KS5jLmkscz11KFBlKGgsaC5jLmxlbmd0aC0xKSwxMjgpLHMucT0hMCxzLkM9dShzLmQuYS5lYygpLktjKCkuUGIoKSwxNykuZC5pLGh9ZnVuY3Rpb24gemNlKHQpe2lmKHQuZz09bnVsbClzd2l0Y2godC5wKXtjYXNlIDA6dC5nPXBybih0KT8oRm4oKSxXNyk6KEZuKCksTzIpO2JyZWFrO2Nhc2UgMTp0Lmc9RUQoWWluKHQpKTticmVhaztjYXNlIDI6dC5nPUlEKG5pbih0KSk7YnJlYWs7Y2FzZSAzOnQuZz1qZW4odCk7YnJlYWs7Y2FzZSA0OnQuZz1uZXcgTzMoUmVuKHQpKTticmVhaztjYXNlIDY6dC5nPWIyKCRlbih0KSk7YnJlYWs7Y2FzZSA1OnQuZz1kZShpcm4odCkpO2JyZWFrO2Nhc2UgNzp0Lmc9SjgoWmluKHQpKX1yZXR1cm4gdC5nfWZ1bmN0aW9uIE01dCh0KXtpZih0Lm49PW51bGwpc3dpdGNoKHQucCl7Y2FzZSAwOnQubj1icm4odCk/KEZuKCksVzcpOihGbigpLE8yKTticmVhaztjYXNlIDE6dC5uPUVEKFhpbih0KSk7YnJlYWs7Y2FzZSAyOnQubj1JRChyaW4odCkpO2JyZWFrO2Nhc2UgMzp0Lm49cWVuKHQpO2JyZWFrO2Nhc2UgNDp0Lm49bmV3IE8zKEhlbih0KSk7YnJlYWs7Y2FzZSA2OnQubj1iMih6ZW4odCkpO2JyZWFrO2Nhc2UgNTp0Lm49ZGUoc3JuKHQpKTticmVhaztjYXNlIDc6dC5uPUo4KFFpbih0KSl9cmV0dXJuIHQubn1mdW5jdGlvbiBxY2UodCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKG89bmV3IFModC5hLmEpO28uYTxvLmMuYy5sZW5ndGg7KXI9dShRKG8pLDMwNyksci5nPTAsci5pPTAsci5lLmEuJGIoKTtmb3Iocz1uZXcgUyh0LmEuYSk7cy5hPHMuYy5jLmxlbmd0aDspZm9yKHI9dShRKHMpLDMwNyksbj1yLmEuYS5lYygpLktjKCk7bi5PYigpOylmb3IoZT11KG4uUGIoKSw1NyksZD1lLmMuS2MoKTtkLk9iKCk7KWg9dShkLlBiKCksNTcpLGguYSE9ciYmKFZzKHIuZSxoKSwrK2guYS5nLCsraC5hLmkpfWZ1bmN0aW9uIGZ2bih0LGUpe3ZhciBuLHIscyxvLGgsZDtpZihkPVlNKHQuYSxlLmIpLCFkKXRocm93IG50KG5ldyBIbygiSW52YWxpZCBoaXRib3hlcyBmb3Igc2NhbmxpbmUgb3ZlcmxhcCBjYWxjdWxhdGlvbi4iKSk7Zm9yKGg9ITEsbz0ocj1uZXcgdl8obmV3IGdfKG5ldyB5KHQuYS5hKS5hKS5iKSxuZXcgZyhyKSk7bU0oby5hLmEpOylpZihzPShuPXdqKG8uYSksdShuLmNkKCksNjUpKSxNY24oZS5iLHMpKXRZZSh0LmIuYSxlLmIscyksaD0hMDtlbHNlIGlmKGgpYnJlYWt9ZnVuY3Rpb24gZHZuKHQpe3ZhciBlLG4scixzLG87cz11KEsodCwoeGUoKSxSMikpLDIxKSxvPXUoSyh0LGlHKSwyMSksbj1uZXcgUmUodC5mLmErdC5kLmIrdC5kLmMsdC5mLmIrdC5kLmQrdC5kLmEpLGU9bmV3IFNvKG4pLHMuSGMoKE5sKCksWHkpKSYmKHI9dShLKHQsZEUpLDgpLG8uSGMoKGJsKCksQUUpKSYmKHIuYTw9MCYmKHIuYT0yMCksci5iPD0wJiYoci5iPTIwKSksZS5hPWIuTWF0aC5tYXgobi5hLHIuYSksZS5iPWIuTWF0aC5tYXgobi5iLHIuYikpLGF5bih0LG4sZSl9ZnVuY3Rpb24gSGNlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxfLE0sQjtzPWU/bmV3IFhYOm5ldyBRWCxvPSExO2RvIGZvcihvPSExLGs9ZT9jMih0LmIpOnQuYix3PWsuS2MoKTt3Lk9iKCk7KWZvcihkPXUody5QYigpLDI5KSxCPVZ2KGQuYSksZXx8bmV3IG12KEIpLE09bmV3IFMoQik7TS5hPE0uYy5jLmxlbmd0aDspXz11KFEoTSksMTApLHMuTWIoXykmJihyPV8sbj11KEsoXywoYWUoKSxMdykpLDMwNSksaD1lP24uYjpuLmssbz1sdWUocixoLGUsITEpKTt3aGlsZShvKX1mdW5jdGlvbiBndm4odCxlLG4pe3ZhciByLHMsbyxoLGQ7Zm9yKG1yKG4sIkxvbmdlc3QgcGF0aCBsYXllcmluZyIsMSksdC5hPWUsZD10LmEuYSx0LmI9TnQoU3IsSnIsMjUsZC5jLmxlbmd0aCwxNSwxKSxyPTAsaD1uZXcgUyhkKTtoLmE8aC5jLmMubGVuZ3RoOylzPXUoUShoKSwxMCkscy5wPXIsdC5iW3JdPS0xLCsrcjtmb3Iobz1uZXcgUyhkKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoUShvKSwxMCksaGNlKHQscyk7ZC5jPU50KFFuLE1lLDEsMCw1LDEpLHQuYT1udWxsLHQuYj1udWxsLG9yKG4pfWZ1bmN0aW9uIHB2bih0LGUpe3ZhciBuLHIscztlLmE/KFlNKHQuYixlLmIpLHQuYVtlLmIuaV09dShibnQodC5iLGUuYiksODEpLG49dShwbnQodC5iLGUuYiksODEpLG4mJih0LmFbbi5pXT1lLmIpKToocj11KGJudCh0LmIsZS5iKSw4MSksciYmcj09dC5hW2UuYi5pXSYmci5kJiZyLmQhPWUuYi5kJiZyLmYuRmMoZS5iKSxzPXUocG50KHQuYixlLmIpLDgxKSxzJiZ0LmFbcy5pXT09ZS5iJiZzLmQmJnMuZCE9ZS5iLmQmJmUuYi5mLkZjKHMpLHJudCh0LmIsZS5iKSl9ZnVuY3Rpb24gVmNlKHQsZSl7dmFyIG4scixzLG8saCxkO3JldHVybiBvPXQuZCxkPVp0KHZlKEsodCwoeGUoKSxYZykpKSksZDwwJiYoZD0wLGVlKHQsWGcsZCkpLGUuby5iPWQsaD1iLk1hdGguZmxvb3IoZC8yKSxyPW5ldyBOYyxVcyhyLChiZSgpLEJuKSksdGMocixlKSxyLm4uYj1oLHM9bmV3IE5jLFVzKHMsSG4pLHRjKHMsZSkscy5uLmI9aCxwYSh0LHIpLG49bmV3IHp2LEJvKG4sdCksZWUobixPbyxudWxsKSxCYShuLHMpLHBhKG4sbykseG1uKGUsdCxuKSxUZ24odCxuKSxufWZ1bmN0aW9uIGJ2bih0KXt2YXIgZSxuO3JldHVybiBuPXUoSyh0LChhZSgpLFdjKSksMjEpLGU9bmV3IFpzLG4uSGMoKGdvKCksdlMpKSYmKEhsKGUsTG1lKSxIbChlLEtfdCkpLChuLkhjKGxFKXx8QmUoRmUoSyh0LCh4ZSgpLFFsdCkpKSkpJiYoSGwoZSxLX3QpLG4uSGMoVTQpJiZIbChlLERtZSkpLG4uSGMoeWgpJiZIbChlLEFtZSksbi5IYyh3UykmJkhsKGUsSW1lKSxuLkhjKGpWKSYmSGwoZSxNbWUpLG4uSGMoY0UpJiZIbChlLENtZSksbi5IYyh1RSkmJkhsKGUsU21lKSxlfWZ1bmN0aW9uIHZ2bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXyxNLEI7cmV0dXJuIHI9dC5kLG89ZS5kLGQ9citvLHc9dC5lIT1lLmU/LTE6MSxkPT0yPyhfPUlhKEdzKHQuYVswXSxwbyksR3MoZS5hWzBdLHBvKSksQj1NcihfKSxNPU1yKHptKF8sMzIpKSxNPT0wP25ldyBPZyh3LEIpOm5ldyBZMyh3LDIsdXQob3QoU3IsMSksSnIsMjUsMTUsW0IsTV0pKSk6KG49dC5hLHM9ZS5hLGg9TnQoU3IsSnIsMjUsZCwxNSwxKSxPdW4obixyLHMsbyxoKSxrPW5ldyBZMyh3LGQsaCksT18oayksayl9ZnVuY3Rpb24gR2NlKHQsZSxuLHIpe3ZhciBzLG87aWYoZSl7aWYocz10LmEudWUobi5kLGUuZCkscz09MClyZXR1cm4gci5kPVgydChlLG4uZSksci5iPSEwLGU7bz1zPDA/MDoxLGUuYVtvXT1HY2UodCxlLmFbb10sbixyKSxBbShlLmFbb10pJiYoQW0oZS5hWzEtb10pPyhlLmI9ITAsZS5hWzBdLmI9ITEsZS5hWzFdLmI9ITEpOkFtKGUuYVtvXS5hW29dKT9lPW56KGUsMS1vKTpBbShlLmFbb10uYVsxLW9dKSYmKGU9b1p0KGUsMS1vKSkpfWVsc2UgcmV0dXJuIG47cmV0dXJuIGV9ZnVuY3Rpb24gVWNlKHQsZSxuKXt2YXIgcixzLG8saDtzPXQuaSxyPXQubixjbXQodCwoWmYoKSxmYykscy5jK3IuYixuKSxjbXQodCxkYyxzLmMrcy5iLXIuYy1uWzJdLG4pLGg9cy5iLXIuYi1yLmMsblswXT4wJiYoblswXSs9dC5kLGgtPW5bMF0pLG5bMl0+MCYmKG5bMl0rPXQuZCxoLT1uWzJdKSxvPWIuTWF0aC5tYXgoMCxoKSxuWzFdPWIuTWF0aC5tYXgoblsxXSxoKSxjbXQodCxpdSxzLmMrci5iK25bMF0tKG5bMV0taCkvMixuKSxlPT1pdSYmKHQuYy5iPW8sdC5jLmM9cy5jK3IuYisoby1oKS8yKX1mdW5jdGlvbiBXY2UoKXt0aGlzLmM9TnQoZ2EsVG8sMjUsKGJlKCksdXQob3QoWmEsMSksQ2MsNjEsMCxbYWMsT24sSG4seXIsQm5dKSkubGVuZ3RoLDE1LDEpLHRoaXMuYj1OdChnYSxUbywyNSx1dChvdChaYSwxKSxDYyw2MSwwLFthYyxPbixIbix5cixCbl0pLmxlbmd0aCwxNSwxKSx0aGlzLmE9TnQoZ2EsVG8sMjUsdXQob3QoWmEsMSksQ2MsNjEsMCxbYWMsT24sSG4seXIsQm5dKS5sZW5ndGgsMTUsMSksd2J0KHRoaXMuYyxicyksd2J0KHRoaXMuYixOcyksd2J0KHRoaXMuYSxOcyl9ZnVuY3Rpb24gcWModCxlLG4pe3ZhciByLHMsbyxoO2lmKGU8PW4/KHM9ZSxvPW4pOihzPW4sbz1lKSxyPTAsdC5iPT1udWxsKXQuYj1OdChTcixKciwyNSwyLDE1LDEpLHQuYlswXT1zLHQuYlsxXT1vLHQuYz0hMDtlbHNle2lmKHI9dC5iLmxlbmd0aCx0LmJbci0xXSsxPT1zKXt0LmJbci0xXT1vO3JldHVybn1oPU50KFNyLEpyLDI1LHIrMiwxNSwxKSxQYyh0LmIsMCxoLDAsciksdC5iPWgsdC5iW3ItMV0+PXMmJih0LmM9ITEsdC5hPSExKSx0LmJbcisrXT1zLHQuYltyXT1vLHQuY3x8djQodCl9fWZ1bmN0aW9uIHd2bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGs7Zm9yKGs9ZS5kLHQuYT1uZXcgSmMoay5jLmxlbmd0aCksdC5jPW5ldyBBcixkPW5ldyBTKGspO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShRKGQpLDEwMSksbz1uZXcgTEQobnVsbCksdWUodC5hLG8pLEFpKHQuYyxoLG8pO2Zvcih0LmI9bmV3IEFyLFNnbih0LGUpLHI9MDtyPGsuYy5sZW5ndGgtMTtyKyspZm9yKHc9dShQZShlLmQsciksMTAxKSxzPXIrMTtzPGsuYy5sZW5ndGg7cysrKW8ybih0LHcsdShQZShlLmQscyksMTAxKSxuKX1mdW5jdGlvbiBLY2UodCxlLG4pe3ZhciByLHMsbyxoLGQsdztpZighXzgoZSkpe2Zvcih3PXpjKG4sKF90KGUsMTQpP3UoZSwxNCkuZ2MoKTpOMChlLktjKCkpKS90LmF8MCksbXIodyxBMWUsMSksZD1uZXcgWVEsaD0wLG89ZS5LYygpO28uT2IoKTspcj11KG8uUGIoKSw4NiksZD1JMSh1dChvdCgkMSwxKSxNZSwyMCwwLFtkLG5ldyBTcChyKV0pKSxoPHIuZi5iJiYoaD1yLmYuYik7Zm9yKHM9ZS5LYygpO3MuT2IoKTspcj11KHMuUGIoKSw4NiksZWUociwobWMoKSx4RyksaCk7b3IodyksS2NlKHQsZCxuKX19ZnVuY3Rpb24gbXZuKHQsZSl7dmFyIG4scixzLG8saCxkLHc7Zm9yKG49TnMsZD0oR24oKSxxcykscz1uZXcgUyhlLmEpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShRKHMpLDEwKSxvPXIuayxvIT1xcyYmKGg9dmUoSyhyLChhZSgpLFE5dCkpKSxoPT1udWxsPyhuPWIuTWF0aC5tYXgobiwwKSxyLm4uYj1uK1MydCh0LmEsbyxkKSk6ci5uLmI9KEluKGgpLGgpKSx3PVMydCh0LmEsbyxkKSxyLm4uYjxuK3crci5kLmQmJihyLm4uYj1uK3crci5kLmQpLG49ci5uLmIrci5vLmIrci5kLmEsZD1vfWZ1bmN0aW9uIHl2bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssXyxNO2ZvcihvPXk0KGUsITEsITEpLGs9c0kobyksTT1adCh2ZSh6ZShlLChpQygpLHF1dCkpKSkscz1GaGUoayxNK3QuYSksXz1uZXcgV3N0KHMpLEJvKF8sZSksQWkodC5iLGUsXyksbi5jW24uYy5sZW5ndGhdPV8sdz0oIWUubiYmKGUubj1uZXcgaGUoWW8sZSwxLDcpKSxlLm4pLGQ9bmV3IG5yKHcpO2QuZSE9ZC5pLmdjKCk7KWg9dShkcihkKSwxMzcpLHI9YkkodCxoLCEwLDAsMCksbi5jW24uYy5sZW5ndGhdPXI7cmV0dXJuIF99ZnVuY3Rpb24gWWNlKHQsZSxuLHIscyl7dmFyIG8saCxkLHcsayxfO2lmKHQuZCYmdC5kLmxnKHMpLG89dShzLlhiKDApLDMzKSxuc2UodCxuLG8sITEpfHwoaD11KHMuWGIocy5nYygpLTEpLDMzKSxuc2UodCxyLGgsITApKXx8QTR0KHQscykpcmV0dXJuITA7Zm9yKF89cy5LYygpO18uT2IoKTspZm9yKGs9dShfLlBiKCksMzMpLHc9ZS5LYygpO3cuT2IoKTspaWYoZD11KHcuUGIoKSwzMyksZHEodCxrLGQpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHh2bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssXyxNLEI7Qj1lLmMubGVuZ3RoLE09KGs9dC5ZZyhuKSx1KGs+PTA/dC5fZyhrLCExLCEwKTpsdyh0LG4sITEpLDU4KSk7dDpmb3Iobz1NLktjKCk7by5PYigpOyl7Zm9yKHM9dShvLlBiKCksNTYpLF89MDtfPEI7KytfKWlmKGg9KFNuKF8sZS5jLmxlbmd0aCksdShlLmNbX10sNzIpKSx3PWguZGQoKSxkPWguYWsoKSxyPXMuYmgoZCwhMSksdz09bnVsbD9yIT1udWxsOiFTaSh3LHIpKWNvbnRpbnVlIHQ7cmV0dXJuIHN9cmV0dXJuIG51bGx9ZnVuY3Rpb24ga3ZuKHQsZSxuLHIpe3ZhciBzLG8saCxkO2ZvcihzPXUocWcoZSwoYmUoKSxCbikpLktjKCkuUGIoKSwxMSksbz11KHFnKGUsSG4pLktjKCkuUGIoKSwxMSksZD1uZXcgUyh0LmopO2QuYTxkLmMuYy5sZW5ndGg7KXtmb3IoaD11KFEoZCksMTEpO2guZS5jLmxlbmd0aCE9MDspcGEodShQZShoLmUsMCksMTcpLHMpO2Zvcig7aC5nLmMubGVuZ3RoIT0wOylCYSh1KFBlKGguZywwKSwxNyksbyl9bnx8ZWUoZSwoYWUoKSxhMSksbnVsbCkscnx8ZWUoZSwoYWUoKSxxaCksbnVsbCl9ZnVuY3Rpb24geTQodCxlLG4pe3ZhciByLHM7aWYoKCF0LmEmJih0LmE9bmV3IGhlKHVzLHQsNiw2KSksdC5hKS5pPT0wKXJldHVybiBweXQodCk7aWYocj11KEF0KCghdC5hJiYodC5hPW5ldyBoZSh1cyx0LDYsNikpLHQuYSksMCksMjAyKSxlJiYoVHIoKCFyLmEmJihyLmE9bmV3IEJzKFdoLHIsNSkpLHIuYSkpLFA4KHIsMCksQjgociwwKSxOOChyLDApLEY4KHIsMCkpLG4pZm9yKHM9KCF0LmEmJih0LmE9bmV3IGhlKHVzLHQsNiw2KSksdC5hKTtzLmk+MTspZHkocyxzLmktMSk7cmV0dXJuIHJ9ZnVuY3Rpb24gRXZuKHQsZSl7dmFyIG4scixzLG8saCxkLHc7Zm9yKG1yKGUsIkNvbW1lbnQgcG9zdC1wcm9jZXNzaW5nIiwxKSxvPW5ldyBTKHQuYik7by5hPG8uYy5jLmxlbmd0aDspe2ZvcihzPXUoUShvKSwyOSkscj1uZXcgbGUsZD1uZXcgUyhzLmEpO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShRKGQpLDEwKSx3PXUoSyhoLChhZSgpLE94KSksMTUpLG49dShLKGgsQXgpLDE1KSwod3x8bikmJihUNG4oaCx3LG4pLHcmJlJzKHIsdyksbiYmUnMocixuKSk7UnMocy5hLHIpfW9yKGUpfWZ1bmN0aW9uIFhjZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3O2ZvcihuPW5ldyBGMyxvPW5ldyBTKHQuYik7by5hPG8uYy5jLmxlbmd0aDspe2ZvcihzPXUoUShvKSwyOSksdz0hMCxyPTAsZD1uZXcgUyhzLmEpO2QuYTxkLmMuYy5sZW5ndGg7KXN3aXRjaChoPXUoUShkKSwxMCksaC5rLmcpe2Nhc2UgNDorK3I7Y2FzZSAxOkt3dChuLGgpO2JyZWFrO2Nhc2UgMDpFZ24oaCxlKTtkZWZhdWx0Om4uYj09bi5jfHxqdWUobixyLHcsITEsZSksdz0hMSxyPTB9bi5iPT1uLmN8fGp1ZShuLHIsdywhMCxlKX19ZnVuY3Rpb24gVHZuKHQsZSl7dmFyIG4scixzLG8saCxkLHc7Zm9yKHM9bmV3IGxlLG49MDtuPD10Lmk7bisrKXI9bmV3IExoKGUpLHIucD10LmktbixzLmNbcy5jLmxlbmd0aF09cjtmb3IoZD1uZXcgUyh0Lm8pO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShRKGQpLDEwKSxMbyhoLHUoUGUocyx0LmktdC5mW2gucF0pLDI5KSk7Zm9yKG89bmV3IFMocyk7by5hPG8uYy5jLmxlbmd0aDspdz11KFEobyksMjkpLHcuYS5jLmxlbmd0aD09MCYmQ18obyk7ZS5iLmM9TnQoUW4sTWUsMSwwLDUsMSksUnMoZS5iLHMpfWZ1bmN0aW9uIEQ1dCh0LGUpe3ZhciBuLHIscyxvLGgsZDtmb3Iobj0wLGQ9bmV3IFMoZSk7ZC5hPGQuYy5jLmxlbmd0aDspe2ZvcihoPXUoUShkKSwxMSksTnl0KHQuYix0LmRbaC5wXSkscz1uZXcgTTEoaC5iKTtKbyhzLmEpfHxKbyhzLmIpOylyPXUoSm8ocy5hKT9RKHMuYSk6UShzLmIpLDE3KSxvPWFidCh0LGg9PXIuYz9yLmQ6ci5jKSxvPnQuZFtoLnBdJiYobis9bm10KHQuYixvKSxWcCh0LmEsZGUobykpKTtmb3IoOyFOVCh0LmEpOylPbXQodC5iLHUoUDYodC5hKSwxOSkuYSl9cmV0dXJuIG59ZnVuY3Rpb24gUWNlKHQsZSxuKXt2YXIgcixzLG8saDtmb3Iobz0oIWUuYSYmKGUuYT1uZXcgaGUoZHMsZSwxMCwxMSkpLGUuYSkuaSxzPW5ldyBucigoIWUuYSYmKGUuYT1uZXcgaGUoZHMsZSwxMCwxMSkpLGUuYSkpO3MuZSE9cy5pLmdjKCk7KXI9dShkcihzKSwzMyksKCFyLmEmJihyLmE9bmV3IGhlKGRzLHIsMTAsMTEpKSxyLmEpLmk9PTB8fChvKz1RY2UodCxyLCExKSk7aWYobilmb3IoaD1ocyhlKTtoOylvKz0oIWguYSYmKGguYT1uZXcgaGUoZHMsaCwxMCwxMSkpLGguYSkuaSxoPWhzKGgpO3JldHVybiBvfWZ1bmN0aW9uIGR5KHQsZSl7dmFyIG4scixzLG87cmV0dXJuIHQuZWooKT8ocj1udWxsLHM9dC5maigpLHQuaWooKSYmKHI9dC5raih0LnBpKGUpLG51bGwpKSxuPXQuWmkoNCxvPW54KHQsZSksbnVsbCxlLHMpLHQuYmooKSYmbyE9bnVsbCYmKHI9dC5kaihvLHIpKSxyPyhyLkVpKG4pLHIuRmkoKSk6dC4kaShuKSxvKToobz1ueCh0LGUpLHQuYmooKSYmbyE9bnVsbCYmKHI9dC5kaihvLG51bGwpLHImJnIuRmkoKSksbyl9ZnVuY3Rpb24gX3ZuKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxfO2ZvcihrPXQuYSxlPW5ldyBRcyx3PTAscj1uZXcgUyh0LmQpO3IuYTxyLmMuYy5sZW5ndGg7KXtmb3Iobj11KFEociksMjIyKSxfPTAsbjQobi5iLG5ldyBsbyksaD1zaShuLmIsMCk7aC5iIT1oLmQuYzspbz11KGlpKGgpLDIyMiksZS5hLl9iKG8pJiYocz1uLmMsZD1vLmMsXzxkLmQrZC5hK2smJl8rcy5hK2s+ZC5kJiYoXz1kLmQrZC5hK2spKTtuLmMuZD1fLGUuYS56YyhuLGUpLHc9Yi5NYXRoLm1heCh3LG4uYy5kK24uYy5hKX1yZXR1cm4gd31mdW5jdGlvbiBnbygpe2dvPVgsUlY9bmV3IEltKCJDT01NRU5UUyIsMCkseWg9bmV3IEltKCJFWFRFUk5BTF9QT1JUUyIsMSksdlM9bmV3IEltKCJIWVBFUkVER0VTIiwyKSxqVj1uZXcgSW0oIkhZUEVSTk9ERVMiLDMpLGxFPW5ldyBJbSgiTk9OX0ZSRUVfUE9SVFMiLDQpLFU0PW5ldyBJbSgiTk9SVEhfU09VVEhfUE9SVFMiLDUpLHdTPW5ldyBJbShoMWUsNiksY0U9bmV3IEltKCJDRU5URVJfTEFCRUxTIiw3KSx1RT1uZXcgSW0oIkVORF9MQUJFTFMiLDgpLCRWPW5ldyBJbSgiUEFSVElUSU9OUyIsOSl9ZnVuY3Rpb24gZ3kodCl7dmFyIGUsbixyLHMsbztmb3Iocz1uZXcgbGUsZT1uZXcgeV8oKCF0LmEmJih0LmE9bmV3IGhlKGRzLHQsMTAsMTEpKSx0LmEpKSxyPW5ldyBhcihscihWMCh0KS5hLktjKCksbmV3IEgpKTtWcihyKTspbj11KElyKHIpLDc5KSxfdChBdCgoIW4uYiYmKG4uYj1uZXcgRW4odnIsbiw0LDcpKSxuLmIpLDApLDE4Nil8fChvPVJvKHUoQXQoKCFuLmMmJihuLmM9bmV3IEVuKHZyLG4sNSw4KSksbi5jKSwwKSw4MikpLGUuYS5fYihvKXx8KHMuY1tzLmMubGVuZ3RoXT1vKSk7cmV0dXJuIHN9ZnVuY3Rpb24gQ3ZuKHQpe3ZhciBlLG4scixzLG8saDtmb3Iobz1uZXcgUXMsZT1uZXcgeV8oKCF0LmEmJih0LmE9bmV3IGhlKGRzLHQsMTAsMTEpKSx0LmEpKSxzPW5ldyBhcihscihWMCh0KS5hLktjKCksbmV3IEgpKTtWcihzKTspcj11KElyKHMpLDc5KSxfdChBdCgoIXIuYiYmKHIuYj1uZXcgRW4odnIsciw0LDcpKSxyLmIpLDApLDE4Nil8fChoPVJvKHUoQXQoKCFyLmMmJihyLmM9bmV3IEVuKHZyLHIsNSw4KSksci5jKSwwKSw4MikpLGUuYS5fYihoKXx8KG49by5hLnpjKGgsbyksbj09bnVsbCkpO3JldHVybiBvfWZ1bmN0aW9uIFN2bih0LGUsbixyLHMpe3JldHVybiByPDA/KHI9YjQodCxzLHV0KG90KExlLDEpLHJlLDIsNixbcWF0LEhhdCxWYXQsR2F0LHV4LFVhdCxXYXQsS2F0LFlhdCxYYXQsUWF0LFphdF0pLGUpLHI8MCYmKHI9YjQodCxzLHV0KG90KExlLDEpLHJlLDIsNixbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsdXgsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdKSxlKSkscjwwPyExOihuLms9ciwhMCkpOnI+MD8obi5rPXItMSwhMCk6ITF9ZnVuY3Rpb24gQXZuKHQsZSxuLHIscyl7cmV0dXJuIHI8MD8ocj1iNCh0LHMsdXQob3QoTGUsMSkscmUsMiw2LFtxYXQsSGF0LFZhdCxHYXQsdXgsVWF0LFdhdCxLYXQsWWF0LFhhdCxRYXQsWmF0XSksZSkscjwwJiYocj1iNCh0LHMsdXQob3QoTGUsMSkscmUsMiw2LFsiSmFuIiwiRmViIiwiTWFyIiwiQXByIix1eCwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0pLGUpKSxyPDA/ITE6KG4uaz1yLCEwKSk6cj4wPyhuLms9ci0xLCEwKTohMX1mdW5jdGlvbiBMdm4odCxlLG4scixzLG8pe3ZhciBoLGQsdyxrO2lmKGQ9MzIscjwwKXtpZihlWzBdPj10Lmxlbmd0aHx8KGQ9VGEodCxlWzBdKSxkIT00MyYmZCE9NDUpfHwoKytlWzBdLHI9cnEodCxlKSxyPDApKXJldHVybiExO2Q9PTQ1JiYocj0tcil9cmV0dXJuIGQ9PTMyJiZlWzBdLW49PTImJnMuYj09MiYmKHc9bmV3IENSLGs9dy5xLmdldEZ1bGxZZWFyKCktaWIraWItODAsaD1rJTEwMCxvLmE9cj09aCxyKz0oay8xMDB8MCkqMTAwKyhyPGg/MTAwOjApKSxvLnA9ciwhMH1mdW5jdGlvbiBaY2UodCxlKXt2YXIgbixyLHMsbyxoO2hzKHQpJiYoaD11KEsoZSwoeGUoKSxSMikpLDE3NCksR3QoemUodCx3cykpPT09R3QoKHZhKCksa2IpKSYmRW8odCx3cyxVMSkscj0oRG0oKSxuZXcgU20oaHModCkpKSxvPW5ldyBzbnQoaHModCk/bmV3IFNtKGhzKHQpKTpudWxsLHQpLHM9Y2hlKHIsbywhMSwhMCksd2YoaCwoTmwoKSxYeSkpLG49dShLKGUsZEUpLDgpLG4uYT1iLk1hdGgubWF4KHMuYSxuLmEpLG4uYj1iLk1hdGgubWF4KHMuYixuLmIpKX1mdW5jdGlvbiBNdm4odCxlLG4pe3ZhciByLHMsbyxoLGQsdztmb3IoaD11KEsodCwoYWUoKSxGbHQpKSwxNSkuS2MoKTtoLk9iKCk7KXtzd2l0Y2gobz11KGguUGIoKSwxMCksdShLKG8sKHhlKCksZHUpKSwxNjMpLmcpe2Nhc2UgMjpMbyhvLGUpO2JyZWFrO2Nhc2UgNDpMbyhvLG4pfWZvcihzPW5ldyBhcihscih6MChvKS5hLktjKCksbmV3IEgpKTtWcihzKTspcj11KElyKHMpLDE3KSwhKHIuYyYmci5kKSYmKGQ9IXIuZCx3PXUoSyhyLEo5dCksMTEpLGQ/cGEocix3KTpCYShyLHcpKX19ZnVuY3Rpb24gZnEoKXtmcT1YLGZsdD1uZXcgQjYoUnEsMCwoYmUoKSxPbiksT24pLHBsdD1uZXcgQjYoVG90LDEseXIseXIpLGhsdD1uZXcgQjYoRW90LDIsSG4sSG4pLHdsdD1uZXcgQjYoX290LDMsQm4sQm4pLGdsdD1uZXcgQjYoIk5PUlRIX1dFU1RfQ09STkVSIiw0LEJuLE9uKSxkbHQ9bmV3IEI2KCJOT1JUSF9FQVNUX0NPUk5FUiIsNSxPbixIbiksdmx0PW5ldyBCNigiU09VVEhfV0VTVF9DT1JORVIiLDYseXIsQm4pLGJsdD1uZXcgQjYoIlNPVVRIX0VBU1RfQ09STkVSIiw3LEhuLHlyKX1mdW5jdGlvbiB4NCgpe3g0PVgsdlN0PXV0KG90KERiLDEpLGNvdCwyNSwxNCxbMSwxLDIsNiwyNCwxMjAsNzIwLDUwNDAsNDAzMjAsMzYyODgwLDM2Mjg4MDAsMzk5MTY4MDAsNDc5MDAxNjAwLDYyMjcwMjA4MDAsODcxNzgyOTEyMDAsMTMwNzY3NDM2OGUzLHtsOjM1MDYxNzYsbTo3OTQwNzcsaDoxfSx7bDo4ODQ3MzYsbTo5MTY0MTEsaDoyMH0se2w6MzM0MjMzNixtOjM5MTI0ODksaDozNjN9LHtsOjU4OTgyNCxtOjMwMzQxMzgsaDo2OTE0fSx7bDozNDA3ODcyLG06MTk2MjUwNixoOjEzODI5NH1dKSxiLk1hdGgucG93KDIsLTY1KX1mdW5jdGlvbiBKY2UodCxlKXt2YXIgbixyLHMsbyxoO2lmKHQuYy5sZW5ndGg9PTApcmV0dXJuIG5ldyB5YShkZSgwKSxkZSgwKSk7Zm9yKG49KFNuKDAsdC5jLmxlbmd0aCksdSh0LmNbMF0sMTEpKS5qLGg9MCxvPWUuZyxyPWUuZysxO2g8dC5jLmxlbmd0aC0xJiZuLmc8bzspKytoLG49KFNuKGgsdC5jLmxlbmd0aCksdSh0LmNbaF0sMTEpKS5qO2ZvcihzPWg7czx0LmMubGVuZ3RoLTEmJm4uZzxyOykrK3Msbj0oU24oaCx0LmMubGVuZ3RoKSx1KHQuY1toXSwxMSkpLmo7cmV0dXJuIG5ldyB5YShkZShoKSxkZShzKSl9ZnVuY3Rpb24gRHZuKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxfLE0sQjtmb3Iobz1lLmMubGVuZ3RoLGg9KFNuKG4sZS5jLmxlbmd0aCksdShlLmNbbl0sMjg2KSksZD1oLmEuby5hLE09aC5jLEI9MCxrPWguYztrPD1oLmY7aysrKXtpZihkPD10LmFba10pcmV0dXJuIGs7Zm9yKF89dC5hW2tdLHc9bnVsbCxzPW4rMTtzPG87cysrKXI9KFNuKHMsZS5jLmxlbmd0aCksdShlLmNbc10sMjg2KSksci5jPD1rJiZyLmY+PWsmJih3PXIpO3cmJihfPWIuTWF0aC5tYXgoXyx3LmEuby5hKSksXz5CJiYoTT1rLEI9Xyl9cmV0dXJuIE19ZnVuY3Rpb24gSXZuKHQsZSxuKXt2YXIgcixzLG87aWYodC5lPW4sdC5kPTAsdC5iPTAsdC5mPTEsdC5pPWUsKHQuZSYxNik9PTE2JiYodC5pPXd3bih0LmkpKSx0Lmo9dC5pLmxlbmd0aCxtaSh0KSxvPXN3KHQpLHQuZCE9dC5qKXRocm93IG50KG5ldyBScihHcigoRnIoKSxPZGUpKSkpO2lmKHQuZyl7Zm9yKHI9MDtyPHQuZy5hLmMubGVuZ3RoO3IrKylpZihzPXUoUnYodC5nLHIpLDU4NCksdC5mPD1zLmEpdGhyb3cgbnQobmV3IFJyKEdyKChGcigpLE5kZSkpKSk7dC5nLmEuYz1OdChRbixNZSwxLDAsNSwxKX1yZXR1cm4gb31mdW5jdGlvbiBPdm4odCxlKXt2YXIgbixyLHM7aWYoZT09bnVsbCl7Zm9yKHI9KCF0LmEmJih0LmE9bmV3IGhlKGVnLHQsOSw1KSksbmV3IG5yKHQuYSkpO3IuZSE9ci5pLmdjKCk7KWlmKG49dShkcihyKSw2NzgpLHM9bi5jLChzPz9uLnpiKT09bnVsbClyZXR1cm4gbn1lbHNlIGZvcihyPSghdC5hJiYodC5hPW5ldyBoZShlZyx0LDksNSkpLG5ldyBucih0LmEpKTtyLmUhPXIuaS5nYygpOylpZihuPXUoZHIociksNjc4KSx1bihlLChzPW4uYyxzPz9uLnpiKSkpcmV0dXJuIG47cmV0dXJuIG51bGx9ZnVuY3Rpb24gZWF0KHQsZSl7dmFyIG47c3dpdGNoKG49bnVsbCxlLmcpe2Nhc2UgMTp0LmUuWGUoKGRpKCksdWZ0KSkmJihuPXUodC5lLldlKHVmdCksMjQ5KSk7YnJlYWs7Y2FzZSAzOnQuZS5YZSgoZGkoKSxsZnQpKSYmKG49dSh0LmUuV2UobGZ0KSwyNDkpKTticmVhaztjYXNlIDI6dC5lLlhlKChkaSgpLGNmdCkpJiYobj11KHQuZS5XZShjZnQpLDI0OSkpO2JyZWFrO2Nhc2UgNDp0LmUuWGUoKGRpKCksaGZ0KSkmJihuPXUodC5lLldlKGhmdCksMjQ5KSl9cmV0dXJuIW4mJihuPXUodC5lLldlKChkaSgpLEtTdCkpLDI0OSkpLG59ZnVuY3Rpb24gdHVlKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxfLE07Zm9yKGUucD0xLG89ZS5jLE09aXcoZSwoaG8oKSxzdSkpLktjKCk7TS5PYigpOylmb3IoXz11KE0uUGIoKSwxMSkscz1uZXcgUyhfLmcpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShRKHMpLDE3KSxrPXIuZC5pLGUhPWsmJihoPWsuYyxoLnA8PW8ucCYmKGQ9by5wKzEsZD09bi5iLmMubGVuZ3RoPyh3PW5ldyBMaChuKSx3LnA9ZCx1ZShuLmIsdyksTG8oayx3KSk6KHc9dShQZShuLmIsZCksMjkpLExvKGssdykpLHR1ZSh0LGssbikpKX1mdW5jdGlvbiBldWUodCxlLG4pe3ZhciByLHMsbyxoLGQsdztmb3Iocz1uLG89MCxkPW5ldyBTKGUpO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShRKGQpLDMzKSxFbyhoLChheSgpLENHKSxkZShzKyspKSx3PWd5KGgpLHI9Yi5NYXRoLmF0YW4yKGguaitoLmYvMixoLmkraC5nLzIpLHIrPXI8MD9JNDowLHI8Ljc4NTM5ODE2MzM5NzQ0ODN8fHI+TjFlP2FhKHcsdC5iKTpyPD1OMWUmJnI+UDFlP2FhKHcsdC5kKTpyPD1QMWUmJnI+RjFlP2FhKHcsdC5jKTpyPD1GMWUmJmFhKHcsdC5hKSxvPWV1ZSh0LHcsbyk7cmV0dXJuIHN9ZnVuY3Rpb24gZWIoKXtlYj1YO3ZhciB0O2ZvcihWSD1uZXcgT2coMSwxKSxMdXQ9bmV3IE9nKDEsMTApLFk3PW5ldyBPZygwLDApLEF1dD1uZXcgT2coLTEsMSkscDd0PXV0KG90KFI0LDEpLHJlLDkxLDAsW1k3LFZILG5ldyBPZygxLDIpLG5ldyBPZygxLDMpLG5ldyBPZygxLDQpLG5ldyBPZygxLDUpLG5ldyBPZygxLDYpLG5ldyBPZygxLDcpLG5ldyBPZygxLDgpLG5ldyBPZygxLDkpLEx1dF0pLEdIPU50KFI0LHJlLDkxLDMyLDAsMSksdD0wO3Q8R0gubGVuZ3RoO3QrKylHSFt0XT1LRChNMCgxLHQpKX1mdW5jdGlvbiBOdm4odCxlLG4scixzLG8pe3ZhciBoLGQsdyxrO2ZvcihkPSFqVChXaSh0Lk9jKCksbmV3IHRlKG5ldyBCWSkpKS5zZCgoWWIoKSxRNykpLGg9dCxvPT0oZm8oKSxaMCkmJihoPV90KGgsMTUyKT9WNih1KGgsMTUyKSk6X3QoaCwxMzEpP3UoaCwxMzEpLmE6X3QoaCw1NCk/bmV3IG12KGgpOm5ldyBNbShoKSksaz1oLktjKCk7ay5PYigpOyl3PXUoay5QYigpLDcwKSx3Lm4uYT1lLmEsZD93Lm4uYj1lLmIrKHIuYi13Lm8uYikvMjpzP3cubi5iPWUuYjp3Lm4uYj1lLmIrci5iLXcuby5iLGUuYSs9dy5vLmErbn1mdW5jdGlvbiBudWUodCxlLG4scil7dmFyIHMsbyxoLGQsdyxrO2ZvcihzPShyLmMrci5hKS8yLE1oKGUuaiksYWkoZS5qLHMpLE1oKG4uZSksYWkobi5lLHMpLGs9bmV3IG9IdCxkPW5ldyBTKHQuZik7ZC5hPGQuYy5jLmxlbmd0aDspbz11KFEoZCksMTI5KSx3PW8uYSxfc3QoayxlLHcpLF9zdChrLG4sdyk7Zm9yKGg9bmV3IFModC5rKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoUShoKSwxMjkpLHc9by5iLF9zdChrLGUsdyksX3N0KGssbix3KTtyZXR1cm4gay5iKz0yLGsuYSs9Rlh0KGUsdC5xKSxrLmErPUZYdCh0LnEsbiksa31mdW5jdGlvbiBydWUodCxlLG4pe3ZhciByLHMsbyxoLGQ7aWYoIV84KGUpKXtmb3IoZD16YyhuLChfdChlLDE0KT91KGUsMTQpLmdjKCk6TjAoZS5LYygpKSkvdC5hfDApLG1yKGQsQTFlLDEpLGg9bmV3ICRGLG89bnVsbCxzPWUuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksODYpLGg9STEodXQob3QoJDEsMSksTWUsMjAsMCxbaCxuZXcgU3AocildKSksbyYmKGVlKG8sKG1jKCksUW1lKSxyKSxlZShyLExodCxvKSxIcnQocik9PUhydChvKSYmKGVlKG8sTWh0LHIpLGVlKHIseUcsbykpKSxvPXI7b3IoZCkscnVlKHQsaCxuKX19ZnVuY3Rpb24gaXVlKHQpe3ZhciBlLG4scixzLG8saCxkO2ZvcihuPXQuaSxlPXQubixkPW4uZCx0LmY9PShUdSgpLGhiKT9kKz0obi5hLXQuZS5iKS8yOnQuZj09RWYmJihkKz1uLmEtdC5lLmIpLHM9bmV3IFModC5kKTtzLmE8cy5jLmMubGVuZ3RoOyl7c3dpdGNoKHI9dShRKHMpLDE4MSksaD1yLnJmKCksbz1uZXcgRGEsby5iPWQsZCs9aC5iK3QuYSx0LmIuZyl7Y2FzZSAwOm8uYT1uLmMrZS5iO2JyZWFrO2Nhc2UgMTpvLmE9bi5jK2UuYisobi5iLWguYSkvMjticmVhaztjYXNlIDI6by5hPW4uYytuLmItZS5jLWguYX1yLnRmKG8pfX1mdW5jdGlvbiBzdWUodCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKG49dC5pLGU9dC5uLGQ9bi5jLHQuYj09KHJsKCksbGIpP2QrPShuLmItdC5lLmEpLzI6dC5iPT1rZiYmKGQrPW4uYi10LmUuYSkscz1uZXcgUyh0LmQpO3MuYTxzLmMuYy5sZW5ndGg7KXtzd2l0Y2gocj11KFEocyksMTgxKSxoPXIucmYoKSxvPW5ldyBEYSxvLmE9ZCxkKz1oLmErdC5hLHQuZi5nKXtjYXNlIDA6by5iPW4uZCtlLmQ7YnJlYWs7Y2FzZSAxOm8uYj1uLmQrZS5kKyhuLmEtaC5iKS8yO2JyZWFrO2Nhc2UgMjpvLmI9bi5kK24uYS1lLmEtaC5ifXIudGYobyl9fWZ1bmN0aW9uIFB2bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssXyxNLEIscSxHO189bi5hLmMsaD1uLmEuYytuLmEuYixvPXUodHIobi5jLGUpLDQ1OSkscT1vLmYsRz1vLmEsdz1uZXcgUmUoXyxxKSxNPW5ldyBSZShoLEcpLHM9XyxuLnB8fChzKz10LmMpLHMrPW4uRituLnYqdC5iLGs9bmV3IFJlKHMscSksQj1uZXcgUmUocyxHKSx6XyhlLmEsdXQob3QobmEsMSkscmUsOCwwLFt3LGtdKSksZD1uLmQuYS5nYygpPjEsZCYmKHI9bmV3IFJlKHMsbi5iKSxhaShlLmEscikpLHpfKGUuYSx1dChvdChuYSwxKSxyZSw4LDAsW0IsTV0pKX1mdW5jdGlvbiBhdWUodCl7U3YodCxuZXcgeTIoRXYoeXYoa3YoeHYobmV3IG1nLHZIKSwiRUxLIFJhbmRvbWl6ZXIiKSwnRGlzdHJpYnV0ZXMgdGhlIG5vZGVzIHJhbmRvbWx5IG9uIHRoZSBwbGFuZSwgbGVhZGluZyB0byB2ZXJ5IG9iZnVzY2F0aW5nIGxheW91dHMuIENhbiBiZSB1c2VmdWwgdG8gZGVtb25zdHJhdGUgdGhlIHBvd2VyIG9mICJyZWFsIiBsYXlvdXQgYWxnb3JpdGhtcy4nKSxuZXcgSFopKSksd2UodCx2SCx3dyxfQXQpLHdlKHQsdkgsa3ksMTUpLHdlKHQsdkgsSHEsZGUoMCkpLHdlKHQsdkgscHgsUDcpfWZ1bmN0aW9uIEk1dCgpe0k1dD1YO3ZhciB0LGUsbixyLHMsbztmb3IobEE9TnQoWHUsUDQsMjUsMjU1LDE1LDEpLHVVPU50KEVoLHdkLDI1LDE2LDE1LDEpLGU9MDtlPDI1NTtlKyspbEFbZV09LTE7Zm9yKG49NTc7bj49NDg7bi0tKWxBW25dPW4tNDg8PDI0Pj4yNDtmb3Iocj03MDtyPj02NTtyLS0pbEFbcl09ci02NSsxMDw8MjQ+PjI0O2ZvcihzPTEwMjtzPj05NztzLS0pbEFbc109cy05NysxMDw8MjQ+PjI0O2ZvcihvPTA7bzwxMDtvKyspdVVbb109NDgrbyZNcztmb3IodD0xMDt0PD0xNTt0KyspdVVbdF09NjUrdC0xMCZNc31mdW5jdGlvbiBkcSh0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssXztyZXR1cm4gZD1lLmktdC5nLzIsdz1uLmktdC5nLzIsaz1lLmotdC5nLzIsXz1uLmotdC5nLzIsbz1lLmcrdC5nLzIsaD1uLmcrdC5nLzIscj1lLmYrdC5nLzIscz1uLmYrdC5nLzIsZDx3K2gmJnc8ZCYmazxfK3MmJl88a3x8dzxkK28mJmQ8dyYmXzxrK3ImJms8X3x8ZDx3K2gmJnc8ZCYmazxfJiZfPGsrcj8hMDp3PGQrbyYmZDx3JiZrPF8rcyYmXzxrfWZ1bmN0aW9uIEZ2bih0KXt2YXIgZSxuLHIscyxvO3M9dShLKHQsKHhlKCksUjIpKSwyMSksbz11KEsodCxpRyksMjEpLG49bmV3IFJlKHQuZi5hK3QuZC5iK3QuZC5jLHQuZi5iK3QuZC5kK3QuZC5hKSxlPW5ldyBTbyhuKSxzLkhjKChObCgpLFh5KSkmJihyPXUoSyh0LGRFKSw4KSxvLkhjKChibCgpLEFFKSkmJihyLmE8PTAmJihyLmE9MjApLHIuYjw9MCYmKHIuYj0yMCkpLGUuYT1iLk1hdGgubWF4KG4uYSxyLmEpLGUuYj1iLk1hdGgubWF4KG4uYixyLmIpKSxCZShGZShLKHQsdGh0KSkpfHxzeW4odCxuLGUpfWZ1bmN0aW9uIEJ2bih0LGUpe3ZhciBuLHIscyxvO2ZvcihvPXJjKGUsKGJlKCkseXIpKS5LYygpO28uT2IoKTspcj11KG8uUGIoKSwxMSksbj11KEsociwoYWUoKSxzbCkpLDEwKSxuJiZ5ZihsZih1ZihoZihjZihuZXcgU2gsMCksLjEpLHQuaVtlLnBdLmQpLHQuaVtuLnBdLmEpKTtmb3Iocz1yYyhlLE9uKS5LYygpO3MuT2IoKTspcj11KHMuUGIoKSwxMSksbj11KEsociwoYWUoKSxzbCkpLDEwKSxuJiZ5ZihsZih1ZihoZihjZihuZXcgU2gsMCksLjEpLHQuaVtuLnBdLmQpLHQuaVtlLnBdLmEpKX1mdW5jdGlvbiBuYXQodCl7dmFyIGUsbixyLHMsbyxoO2lmKCF0LmMpe2lmKGg9bmV3IGU2LGU9YUEsbz1lLmEuemModCxlKSxvPT1udWxsKXtmb3Iocj1uZXcgbnIoT2ModCkpO3IuZSE9ci5pLmdjKCk7KW49dShkcihyKSw4Nykscz13cShuKSxfdChzLDg4KSYmZ3MoaCxuYXQodShzLDI2KSkpLE9yKGgsbik7ZS5hLkJjKHQpIT1udWxsLGUuYS5nYygpPT0wfVJsbihoKSxleShoKSx0LmM9bmV3IEgzKCh1KEF0KEt0KCh6cCgpLEFuKS5vKSwxNSksMTgpLGguaSksaC5nKSxobCh0KS5iJj0tMzN9cmV0dXJuIHQuY31mdW5jdGlvbiBPNXQodCl7dmFyIGU7aWYodC5jIT0xMCl0aHJvdyBudChuZXcgUnIoR3IoKEZyKCksa0gpKSkpO3N3aXRjaChlPXQuYSxlKXtjYXNlIDExMDplPTEwO2JyZWFrO2Nhc2UgMTE0OmU9MTM7YnJlYWs7Y2FzZSAxMTY6ZT05O2JyZWFrO2Nhc2UgOTI6Y2FzZSAxMjQ6Y2FzZSA0NjpjYXNlIDk0OmNhc2UgNDU6Y2FzZSA2MzpjYXNlIDQyOmNhc2UgNDM6Y2FzZSAxMjM6Y2FzZSAxMjU6Y2FzZSA0MDpjYXNlIDQxOmNhc2UgOTE6Y2FzZSA5MzpicmVhaztkZWZhdWx0OnRocm93IG50KG5ldyBScihHcigoRnIoKSx3aCkpKSl9cmV0dXJuIGV9ZnVuY3Rpb24gb3VlKHQpe3ZhciBlLG4scixzLG87aWYodC5sPT0wJiZ0Lm09PTAmJnQuaD09MClyZXR1cm4iMCI7aWYodC5oPT1ESSYmdC5tPT0wJiZ0Lmw9PTApcmV0dXJuIi05MjIzMzcyMDM2ODU0Nzc1ODA4IjtpZih0Lmg+PjE5KXJldHVybiItIitvdWUoVzgodCkpO2ZvcihuPXQscj0iIjshKG4ubD09MCYmbi5tPT0wJiZuLmg9PTApOyl7aWYocz1QcnQoTnEpLG49bDZ0KG4scywhMCksZT0iIittSHQodWIpLCEobi5sPT0wJiZuLm09PTAmJm4uaD09MCkpZm9yKG89OS1lLmxlbmd0aDtvPjA7by0tKWU9IjAiK2U7cj1lK3J9cmV0dXJuIHJ9ZnVuY3Rpb24gUnZuKCl7aWYoIU9iamVjdC5jcmVhdGV8fCFPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcylyZXR1cm4hMTt2YXIgdD0iX19wcm90b19fIixlPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoZVt0XSE9PXZvaWQgMClyZXR1cm4hMTt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKTtyZXR1cm4hKG4ubGVuZ3RoIT0wfHwoZVt0XT00MixlW3RdIT09NDIpfHxPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKS5sZW5ndGg9PTApfWZ1bmN0aW9uIGp2bih0KXt2YXIgZSxuLHIscyxvLGgsZDtmb3IoZT0hMSxuPTAscz1uZXcgUyh0LmQuYik7cy5hPHMuYy5jLmxlbmd0aDspZm9yKHI9dShRKHMpLDI5KSxyLnA9bisrLGg9bmV3IFMoci5hKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoUShoKSwxMCksIWUmJiFfOCh6MChvKSkmJihlPSEwKTtkPUtpKChmbygpLGMwKSx1dChvdChXUywxKSxvZSwxMDMsMCxbSGgsX2ZdKSksZXx8KHdmKGQsWjApLHdmKGQsUTApKSx0LmE9bmV3IG9lZShkKSxubCh0LmYpLG5sKHQuYiksbmwodC5lKSxubCh0LmcpfWZ1bmN0aW9uICR2bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssXyxNO2ZvcihyPW4uYyxzPW4uZCxkPVMxKGUuYyksdz1TMShlLmQpLHI9PWUuYz8oZD1tNXQodCxkLHMpLHc9Z2FlKGUuZCkpOihkPWdhZShlLmMpLHc9bTV0KHQsdyxzKSksaz1uZXcgeVIoZS5hKSxrcyhrLGQsay5hLGsuYS5hKSxrcyhrLHcsay5jLmIsay5jKSxoPWUuYz09cixNPW5ldyBaenQsbz0wO288ay5iLTE7KytvKV89bmV3IHlhKHUoZTEoayxvKSw4KSx1KGUxKGssbysxKSw4KSksaCYmbz09MHx8IWgmJm89PWsuYi0yP00uYj1fOnVlKE0uYSxfKTtyZXR1cm4gTX1mdW5jdGlvbiB6dm4odCxlKXt2YXIgbixyLHMsbztpZihvPXQuai5nLWUuai5nLG8hPTApcmV0dXJuIG87aWYobj11KEsodCwoeGUoKSxRZykpLDE5KSxyPXUoSyhlLFFnKSwxOSksbiYmciYmKHM9bi5hLXIuYSxzIT0wKSlyZXR1cm4gcztzd2l0Y2godC5qLmcpe2Nhc2UgMTpyZXR1cm4ganModC5uLmEsZS5uLmEpO2Nhc2UgMjpyZXR1cm4ganModC5uLmIsZS5uLmIpO2Nhc2UgMzpyZXR1cm4ganMoZS5uLmEsdC5uLmEpO2Nhc2UgNDpyZXR1cm4ganMoZS5uLmIsdC5uLmIpO2RlZmF1bHQ6dGhyb3cgbnQobmV3IEhvKGR4dCkpfX1mdW5jdGlvbiBONXQodCxlLG4scil7dmFyIHMsbyxoLGQsdztpZihOMCgoVk0oKSxuZXcgYXIobHIoejAoZSkuYS5LYygpLG5ldyBIKSkpKT49dC5hfHwhbTR0KGUsbikpcmV0dXJuLTE7aWYoXzgodShyLktiKGUpLDIwKSkpcmV0dXJuIDE7Zm9yKHM9MCxoPXUoci5LYihlKSwyMCkuS2MoKTtoLk9iKCk7KWlmKG89dShoLlBiKCksMTcpLHc9by5jLmk9PWU/by5kLmk6by5jLmksZD1ONXQodCx3LG4sciksZD09LTF8fChzPWIuTWF0aC5tYXgocyxkKSxzPnQuYy0xKSlyZXR1cm4tMTtyZXR1cm4gcysxfWZ1bmN0aW9uIGN1ZSh0LGUpe3ZhciBuLHIscyxvLGgsZDtpZihHdChlKT09PUd0KHQpKXJldHVybiEwO2lmKCFfdChlLDE1KXx8KHI9dShlLDE1KSxkPXQuZ2MoKSxyLmdjKCkhPWQpKXJldHVybiExO2lmKGg9ci5LYygpLHQubmkoKSl7Zm9yKG49MDtuPGQ7KytuKWlmKHM9dC5raShuKSxvPWguUGIoKSxzPT1udWxsP28hPW51bGw6IVNpKHMsbykpcmV0dXJuITF9ZWxzZSBmb3Iobj0wO248ZDsrK24paWYocz10LmtpKG4pLG89aC5QYigpLEd0KHMpIT09R3QobykpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gdXVlKHQsZSl7dmFyIG4scixzLG8saCxkO2lmKHQuZj4wKXtpZih0LnFqKCksZSE9bnVsbCl7Zm9yKG89MDtvPHQuZC5sZW5ndGg7KytvKWlmKG49dC5kW29dLG4pe2ZvcihyPXUobi5nLDM2NyksZD1uLmksaD0wO2g8ZDsrK2gpaWYocz1yW2hdLFNpKGUscy5kZCgpKSlyZXR1cm4hMH19ZWxzZSBmb3Iobz0wO288dC5kLmxlbmd0aDsrK28paWYobj10LmRbb10sbil7Zm9yKHI9dShuLmcsMzY3KSxkPW4uaSxoPTA7aDxkOysraClpZihzPXJbaF0sR3QoZSk9PT1HdChzLmRkKCkpKXJldHVybiEwfX1yZXR1cm4hMX1mdW5jdGlvbiBxdm4odCxlLG4pe3ZhciByLHMsbyxoO21yKG4sIk9ydGhvZ29uYWxseSByb3V0aW5nIGhpZXJhcmNoaWNhbCBwb3J0IGVkZ2VzIiwxKSx0LmE9MCxyPU15bihlKSxOM24oZSxyKSxwM24odCxlLHIpLE80bihlKSxzPXUoSyhlLCh4ZSgpLHdzKSksOTgpLG89ZS5iLGFoZSgoU24oMCxvLmMubGVuZ3RoKSx1KG8uY1swXSwyOSkpLHMsZSksYWhlKHUoUGUobyxvLmMubGVuZ3RoLTEpLDI5KSxzLGUpLGg9ZS5iLHdsZSgoU24oMCxoLmMubGVuZ3RoKSx1KGguY1swXSwyOSkpKSx3bGUodShQZShoLGguYy5sZW5ndGgtMSksMjkpKSxvcihuKX1mdW5jdGlvbiBQNXQodCl7c3dpdGNoKHQpe2Nhc2UgNDg6Y2FzZSA0OTpjYXNlIDUwOmNhc2UgNTE6Y2FzZSA1MjpjYXNlIDUzOmNhc2UgNTQ6Y2FzZSA1NTpjYXNlIDU2OmNhc2UgNTc6cmV0dXJuIHQtNDg8PDI0Pj4yNDtjYXNlIDk3OmNhc2UgOTg6Y2FzZSA5OTpjYXNlIDEwMDpjYXNlIDEwMTpjYXNlIDEwMjpyZXR1cm4gdC05NysxMDw8MjQ+PjI0O2Nhc2UgNjU6Y2FzZSA2NjpjYXNlIDY3OmNhc2UgNjg6Y2FzZSA2OTpjYXNlIDcwOnJldHVybiB0LTY1KzEwPDwyND4+MjQ7ZGVmYXVsdDp0aHJvdyBudChuZXcgY2QoIkludmFsaWQgaGV4YWRlY2ltYWwiKSl9fWZ1bmN0aW9uIEh2bih0LGUsbil7dmFyIHIscyxvLGg7Zm9yKG1yKG4sIlByb2Nlc3NvciBvcmRlciBub2RlcyIsMiksdC5hPVp0KHZlKEsoZSwoaHcoKSxpQ3QpKSkpLHM9bmV3IGNzLGg9c2koZS5iLDApO2guYiE9aC5kLmM7KW89dShpaShoKSw4NiksQmUoRmUoSyhvLChtYygpLFd5KSkpKSYma3MocyxvLHMuYy5iLHMuYyk7cj0oWm4ocy5iIT0wKSx1KHMuYS5hLmMsODYpKSxBbGUodCxyKSwhbi5iJiZhaXQobiwxKSxqNXQodCxyLDAtWnQodmUoSyhyLChtYygpLHhHKSkpKS8yLDApLCFuLmImJmFpdChuLDEpLG9yKG4pfWZ1bmN0aW9uIGdxKCl7Z3E9WCxLN3Q9bmV3ICQzKCJTUElSQUwiLDApLFY3dD1uZXcgJDMoIkxJTkVfQllfTElORSIsMSksRzd0PW5ldyAkMygiTUFOSEFUVEFOIiwyKSxIN3Q9bmV3ICQzKCJKSVRURVIiLDMpLFB1dD1uZXcgJDMoIlFVQURSQU5UU19MSU5FX0JZX0xJTkUiLDQpLFc3dD1uZXcgJDMoIlFVQURSQU5UU19NQU5IQVRUQU4iLDUpLFU3dD1uZXcgJDMoIlFVQURSQU5UU19KSVRURVIiLDYpLHE3dD1uZXcgJDMoIkNPTUJJTkVfTElORV9CWV9MSU5FX01BTkhBVFRBTiIsNyksejd0PW5ldyAkMygiQ09NQklORV9KSVRURVJfTUFOSEFUVEFOIiw4KX1mdW5jdGlvbiBsdWUodCxlLG4scil7dmFyIHMsbyxoLGQsdyxrO2Zvcih3PVRzdCh0LG4pLGs9VHN0KGUsbikscz0hMTt3JiZrJiYocnx8amZuKHcsayxuKSk7KWg9VHN0KHcsbiksZD1Uc3QoayxuKSx2RChlKSx2RCh0KSxvPXcuYyxBYXQodywhMSksQWF0KGssITEpLG4/KG95KGUsay5wLG8pLGUucD1rLnAsb3kodCx3LnArMSxvKSx0LnA9dy5wKToob3kodCx3LnAsbyksdC5wPXcucCxveShlLGsucCsxLG8pLGUucD1rLnApLExvKHcsbnVsbCksTG8oayxudWxsKSx3PWgsaz1kLHM9ITA7cmV0dXJuIHN9ZnVuY3Rpb24gVnZuKHQsZSxuLHIpe3ZhciBzLG8saCxkLHc7Zm9yKHM9ITEsbz0hMSxkPW5ldyBTKHIuaik7ZC5hPGQuYy5jLmxlbmd0aDspaD11KFEoZCksMTEpLEd0KEsoaCwoYWUoKSxJaSkpKT09PUd0KG4pJiYoaC5nLmMubGVuZ3RoPT0wP2guZS5jLmxlbmd0aD09MHx8KHM9ITApOm89ITApO3JldHVybiB3PTAscyYmc15vP3c9bi5qPT0oYmUoKSxPbik/LXQuZVtyLmMucF1bci5wXTplLXQuZVtyLmMucF1bci5wXTpvJiZzXm8/dz10LmVbci5jLnBdW3IucF0rMTpzJiZvJiYodz1uLmo9PShiZSgpLE9uKT8wOmUvMiksd31mdW5jdGlvbiByYXQodCxlLG4scixzLG8saCxkKXt2YXIgdyxrLF87Zm9yKHc9MCxlIT1udWxsJiYod149emcoZS50b0xvd2VyQ2FzZSgpKSksbiE9bnVsbCYmKHdePXpnKG4pKSxyIT1udWxsJiYod149emcocikpLGghPW51bGwmJih3Xj16ZyhoKSksZCE9bnVsbCYmKHdePXpnKGQpKSxrPTAsXz1vLmxlbmd0aDtrPF87aysrKXdePXpnKG9ba10pO3Q/d3w9MjU2OncmPS0yNTcscz93fD0xNjp3Jj0tMTcsdGhpcy5mPXcsdGhpcy5pPWU9PW51bGw/bnVsbDooSW4oZSksZSksdGhpcy5hPW4sdGhpcy5kPXIsdGhpcy5qPW8sdGhpcy5nPWgsdGhpcy5lPWR9ZnVuY3Rpb24gRjV0KHQsZSxuKXt2YXIgcixzO3N3aXRjaChzPW51bGwsZS5nKXtjYXNlIDE6cz0oVnUoKSxMRXQpO2JyZWFrO2Nhc2UgMjpzPShWdSgpLERFdCl9c3dpdGNoKHI9bnVsbCxuLmcpe2Nhc2UgMTpyPShWdSgpLE1FdCk7YnJlYWs7Y2FzZSAyOnI9KFZ1KCksQUV0KTticmVhaztjYXNlIDM6cj0oVnUoKSxJRXQpO2JyZWFrO2Nhc2UgNDpyPShWdSgpLE9FdCl9cmV0dXJuIHMmJnI/STYodC5qLG5ldyBiVChuZXcgQ2wodXQob3QoWTVuLDEpLE1lLDE2OSwwLFt1KERyKHMpLDE2OSksdShEcihyKSwxNjkpXSkpKSk6KHBuKCkscG4oKSx1byl9ZnVuY3Rpb24gR3ZuKHQpe3ZhciBlLG4scjtzd2l0Y2goZT11KEsodCwoeGUoKSxkRSkpLDgpLGVlKHQsZEUsbmV3IFJlKGUuYixlLmEpKSx1KEsodCxNZCksMjQ4KS5nKXtjYXNlIDE6ZWUodCxNZCwoUWQoKSxGRykpO2JyZWFrO2Nhc2UgMjplZSh0LE1kLChRZCgpLE5HKSk7YnJlYWs7Y2FzZSAzOmVlKHQsTWQsKFFkKCksJE8pKTticmVhaztjYXNlIDQ6ZWUodCxNZCwoUWQoKSx6TykpfSh0LnE/dC5xOihwbigpLHBuKCksYTApKS5fYihIeSkmJihuPXUoSyh0LEh5KSw4KSxyPW4uYSxuLmE9bi5iLG4uYj1yKX1mdW5jdGlvbiBodWUodCxlLG4scixzLG8pe2lmKHRoaXMuYj1uLHRoaXMuZD1zLHQ+PWUubGVuZ3RoKXRocm93IG50KG5ldyBDbygiR3JlZWR5IFN3aXRjaERlY2lkZXI6IEZyZWUgbGF5ZXIgbm90IGluIGdyYXBoLiIpKTt0aGlzLmM9ZVt0XSx0aGlzLmU9bmV3IEhNKHIpLGxpdCh0aGlzLmUsdGhpcy5jLChiZSgpLEJuKSksdGhpcy5pPW5ldyBITShyKSxsaXQodGhpcy5pLHRoaXMuYyxIbiksdGhpcy5mPW5ldyBjWXQodGhpcy5jKSx0aGlzLmE9IW8mJnMuaSYmIXMucyYmdGhpcy5jWzBdLms9PShHbigpLElzKSx0aGlzLmEmJm9nbih0aGlzLHQsZS5sZW5ndGgpfWZ1bmN0aW9uIGZ1ZSh0LGUpe3ZhciBuLHIscyxvLGgsZDtvPSF0LkIuSGMoKGJsKCksck4pKSxoPXQuQi5IYyhtZnQpLHQuYT1uZXcgb2llKGgsbyx0LmMpLHQubiYmVHd0KHQuYS5uLHQubiksZWV0KHQuZywoWmYoKSxpdSksdC5hKSxlfHwocj1uZXcgckMoMSxvLHQuYyksci5uLmE9dC5rLE82KHQucCwoYmUoKSxPbikscikscz1uZXcgckMoMSxvLHQuYykscy5uLmQ9dC5rLE82KHQucCx5cixzKSxkPW5ldyByQygwLG8sdC5jKSxkLm4uYz10LmssTzYodC5wLEJuLGQpLG49bmV3IHJDKDAsbyx0LmMpLG4ubi5iPXQuayxPNih0LnAsSG4sbikpfWZ1bmN0aW9uIFV2bih0KXt2YXIgZSxuLHI7c3dpdGNoKGU9dShLKHQuZCwoeGUoKSxYMCkpLDIxOCksZS5nKXtjYXNlIDI6bj1rNW4odCk7YnJlYWs7Y2FzZSAzOm49KHI9bmV3IGxlLHlzKFdpKHh1KGVjKGVjKG5ldyBrbihudWxsLG5ldyBUbih0LmQuYiwxNikpLG5ldyBTWCksbmV3IEFYKSxuZXcgJDkpLG5ldyB2WCksbmV3IEJ0dChyKSkscik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBudChuZXcgSG8oIkNvbXBhY3Rpb24gbm90IHN1cHBvcnRlZCBmb3IgIitlKyIgZWRnZXMuIikpfVZ5bih0LG4pLF9hKG5ldyBUbSh0LmcpLG5ldyBQdHQodCkpfWZ1bmN0aW9uIFd2bih0LGUpe3ZhciBuO3JldHVybiBuPW5ldyB4MyxlJiZCbyhuLHUodHIodC5hLHNOKSw5NCkpLF90KGUsNDcwKSYmQm8obix1KHRyKHQuYSxhTiksOTQpKSxfdChlLDM1NCk/KEJvKG4sdSh0cih0LmEsWW8pLDk0KSksbik6KF90KGUsODIpJiZCbyhuLHUodHIodC5hLHZyKSw5NCkpLF90KGUsMjM5KT8oQm8obix1KHRyKHQuYSxkcyksOTQpKSxuKTpfdChlLDE4Nik/KEJvKG4sdSh0cih0LmEseWwpLDk0KSksbik6KF90KGUsMzUyKSYmQm8obix1KHRyKHQuYSxyYSksOTQpKSxuKSl9ZnVuY3Rpb24gbjEoKXtuMT1YLFo3PW5ldyBhbygoZGkoKSx6RyksZGUoMSkpLHNWPW5ldyBhbyhHMiw4MCkscmJlPW5ldyBhbyhuQXQsNSksS3BlPW5ldyBhbyhqeCxQNyksZWJlPW5ldyBhbyhnZnQsZGUoMSkpLG5iZT1uZXcgYW8ocGZ0LChGbigpLCEwKSksaEV0PW5ldyBNdig1MCksSnBlPW5ldyBhbyhWMixoRXQpLGNFdD1SRyxmRXQ9VVMsWXBlPW5ldyBhbyhzZnQsITEpLGxFdD1ZTyxacGU9bWIsUXBlPUgyLFhwZT1hNSx0YmU9S3ksdUV0PShJNHQoKSx6cGUpLFd1dD1HcGUsaVY9JHBlLFV1dD1xcGUsZEV0PVZwZX1mdW5jdGlvbiBLdm4odCl7dmFyIGUsbixyLHMsbyxoLGQsdztmb3Iodz1uZXcgZ0p0LGQ9bmV3IFModC5hKTtkLmE8ZC5jLmMubGVuZ3RoOylpZihoPXUoUShkKSwxMCksaC5rIT0oR24oKSxJcykpe2ZvcihLcG4odyxoLG5ldyBEYSksbz1uZXcgYXIobHIoJHMoaCkuYS5LYygpLG5ldyBIKSk7VnIobyk7KWlmKHM9dShJcihvKSwxNyksIShzLmMuaS5rPT1Jc3x8cy5kLmkuaz09SXMpKWZvcihyPXNpKHMuYSwwKTtyLmIhPXIuZC5jOyluPXUoaWkociksOCksZT1uLGxDKHcsbmV3IGk4KGUuYSxlLmIpKX1yZXR1cm4gd31mdW5jdGlvbiBpYXQoKXtpYXQ9WCxvU3Q9bmV3IHRzKEFjdCksYVN0PShIVCgpLGpPKSxzU3Q9bmV3IHZuKERjdCxhU3QpLGlTdD0oTkQoKSxPRykseDNlPW5ldyB2bihRa3QsaVN0KSxyU3Q9KGlJKCksV2h0KSx5M2U9bmV3IHZuKFprdCxyU3QpLHYzZT1uZXcgdm4oTGN0LG51bGwpLG5TdD0oaEQoKSxERyksbTNlPW5ldyB2bihNY3QsblN0KSxlU3Q9KE1SKCksVmh0KSxkM2U9bmV3IHZuKEprdCxlU3QpLGczZT1uZXcgdm4odDh0LChGbigpLCExKSkscDNlPW5ldyB2bihlOHQsZGUoNjQpKSxiM2U9bmV3IHZuKG44dCwhMCksdzNlPVVodH1mdW5jdGlvbiBkdWUodCl7dmFyIGUsbixyLHMsbyxoO2lmKHQuYT09bnVsbClpZih0LmE9TnQoeGwsaTAsMjUsdC5jLmIuYy5sZW5ndGgsMTYsMSksdC5hWzBdPSExLGVhKHQuYywoeGUoKSxhaHQpKSlmb3Iocj11KEsodC5jLGFodCksMTUpLG49ci5LYygpO24uT2IoKTspZT11KG4uUGIoKSwxOSkuYSxlPjAmJmU8dC5hLmxlbmd0aCYmKHQuYVtlXT0hMSk7ZWxzZSBmb3IoaD1uZXcgUyh0LmMuYiksaC5hPGguYy5jLmxlbmd0aCYmUShoKSxzPTE7aC5hPGguYy5jLmxlbmd0aDspbz11KFEoaCksMjkpLHQuYVtzKytdPUxibihvKX1mdW5jdGlvbiBndWUodCxlKXt2YXIgbixyLHMsbztzd2l0Y2gocz10LmIsZSl7Y2FzZSAxOnt0LmJ8PTEsdC5ifD00LHQuYnw9ODticmVha31jYXNlIDI6e3QuYnw9Mix0LmJ8PTQsdC5ifD04O2JyZWFrfWNhc2UgNDp7dC5ifD0xLHQuYnw9Mix0LmJ8PTQsdC5ifD04O2JyZWFrfWNhc2UgMzp7dC5ifD0xNix0LmJ8PTg7YnJlYWt9Y2FzZSAwOnt0LmJ8PTMyLHQuYnw9MTYsdC5ifD04LHQuYnw9MSx0LmJ8PTIsdC5ifD00O2JyZWFrfX1pZih0LmIhPXMmJnQuYylmb3Iocj1uZXcgbnIodC5jKTtyLmUhPXIuaS5nYygpOylvPXUoZHIociksNDczKSxuPWhsKG8pLGh5KG4sZSl9ZnVuY3Rpb24gcHVlKHQsZSxuLHIpe3ZhciBzLG8saCxkLHcsayxfLE0sQixxLEc7Zm9yKHM9ITEsaD1lLGQ9MCx3PWgubGVuZ3RoO2Q8dzsrK2Qpbz1oW2RdLEJlKChGbigpLCEhby5lKSkmJiF1KFBlKHQuYixvLmUucCksMjE0KS5zJiYocz1zfChrPW8uZSxfPXUoUGUodC5iLGsucCksMjE0KSxNPV8uZSxCPXRIdChuLE0ubGVuZ3RoKSxxPU1bQl1bMF0scS5rPT0oR24oKSxJcyk/TVtCXT1MMm4obyxNW0JdLG4/KGJlKCksQm4pOihiZSgpLEhuKSk6Xy5jLlRmKE0sbiksRz1wSSh0LF8sbixyKSxMNXQoXy5lLF8ubyxuKSxHKSk7cmV0dXJuIHN9ZnVuY3Rpb24gYnVlKHQsZSl7dmFyIG4scixzLG8saDtmb3Iobz0oIWUuYSYmKGUuYT1uZXcgaGUoZHMsZSwxMCwxMSkpLGUuYSkuaSxzPW5ldyBucigoIWUuYSYmKGUuYT1uZXcgaGUoZHMsZSwxMCwxMSkpLGUuYSkpO3MuZSE9cy5pLmdjKCk7KXI9dShkcihzKSwzMyksR3QoemUociwoZGkoKSxpNSkpKSE9PUd0KCgkMCgpLFlTKSkmJihoPXUoemUoZSxFRSksMTQ5KSxuPXUoemUocixFRSksMTQ5KSwoaD09bnx8aCYmaW10KGgsbikpJiYoIXIuYSYmKHIuYT1uZXcgaGUoZHMsciwxMCwxMSkpLHIuYSkuaSE9MCYmKG8rPWJ1ZSh0LHIpKSk7cmV0dXJuIG99ZnVuY3Rpb24gWXZuKHQpe3ZhciBlLG4scixzLG8saCxkO2ZvcihyPTAsZD0wLGg9bmV3IFModC5kKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoUShoKSwxMDEpLHM9dSgkbChXaShuZXcga24obnVsbCxuZXcgVG4oby5qLDE2KSksbmV3IHE5KSxhMihuZXcga2UsbmV3IG5lLG5ldyBwaSx1dChvdCh3bCwxKSxvZSwxMzIsMCxbKE4xKCksWWwpXSkpKSwxNSksbj1udWxsLHI8PWQ/KG49KGJlKCksT24pLHIrPXMuZ2MoKSk6ZDxyJiYobj0oYmUoKSx5ciksZCs9cy5nYygpKSxlPW4seXMoeHUocy5PYygpLG5ldyBBRiksbmV3ICR0dChlKSl9ZnVuY3Rpb24gWHZuKHQpe3ZhciBlLG4scixzLG8saCxkLHc7Zm9yKHQuYj1uZXcgSW9lKG5ldyBDbCgoYmUoKSx1dChvdChaYSwxKSxDYyw2MSwwLFthYyxPbixIbix5cixCbl0pKSksbmV3IENsKChKdigpLHV0KG90KGxsdCwxKSxvZSwzNjEsMCxbQXcsZGIsU3ddKSkpKSxoPXV0KG90KFphLDEpLENjLDYxLDAsW2FjLE9uLEhuLHlyLEJuXSksZD0wLHc9aC5sZW5ndGg7ZDx3OysrZClmb3Iobz1oW2RdLG49dXQob3QobGx0LDEpLG9lLDM2MSwwLFtBdyxkYixTd10pLHI9MCxzPW4ubGVuZ3RoO3I8czsrK3IpZT1uW3JdLFExbih0LmIsbyxlLG5ldyBsZSl9ZnVuY3Rpb24gdnVlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxfLE07aWYoaD11KHUoUGkodC5yLGUpLDIxKSw4NCksZD10LnUuSGMoKGlsKCksRWIpKSxuPXQudS5IYyhKUykscj10LnUuSGMoWlMpLGs9dC51LkhjKEh4KSxNPXQuQi5IYygoYmwoKSxLRykpLF89IW4mJiFyJiYoa3x8aC5nYygpPT0yKSxRMm4odCxlKSxzPW51bGwsdz1udWxsLGQpe2ZvcihvPWguS2MoKSxzPXUoby5QYigpLDExMSksdz1zO28uT2IoKTspdz11KG8uUGIoKSwxMTEpO3MuZC5iPTAsdy5kLmM9MCxfJiYhcy5hJiYocy5kLmM9MCl9TSYmKFlkbihoKSxkJiYocy5kLmI9MCx3LmQuYz0wKSl9ZnVuY3Rpb24gd3VlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxfLE07aWYoaD11KHUoUGkodC5yLGUpLDIxKSw4NCksZD10LnUuSGMoKGlsKCksRWIpKSxuPXQudS5IYyhKUykscj10LnUuSGMoWlMpLHc9dC51LkhjKEh4KSxNPXQuQi5IYygoYmwoKSxLRykpLGs9IW4mJiFyJiYod3x8aC5nYygpPT0yKSxmbW4odCxlKSxfPW51bGwscz1udWxsLGQpe2ZvcihvPWguS2MoKSxfPXUoby5QYigpLDExMSkscz1fO28uT2IoKTspcz11KG8uUGIoKSwxMTEpO18uZC5kPTAscy5kLmE9MCxrJiYhXy5hJiYoXy5kLmE9MCl9TSYmKFhkbihoKSxkJiYoXy5kLmQ9MCxzLmQuYT0wKSl9ZnVuY3Rpb24gbXVlKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxfO2lmKHM9ZS5rLGUucD49MClyZXR1cm4hMTtpZihlLnA9bi5iLHVlKG4uZSxlKSxzPT0oR24oKSxjYSl8fHM9PVVjKXtmb3IoaD1uZXcgUyhlLmopO2guYTxoLmMuYy5sZW5ndGg7KWZvcihvPXUoUShoKSwxMSksXz0ocj1uZXcgUyhuZXcgQ3IobykuYS5nKSxuZXcgSnQocikpO0pvKF8uYSk7KWlmKGs9dShRKF8uYSksMTcpLmQsZD1rLmksdz1kLmssZS5jIT1kLmMmJih3PT1jYXx8dz09VWMpJiZtdWUodCxkLG4pKXJldHVybiEwfXJldHVybiEwfWZ1bmN0aW9uIHBxKHQpe3ZhciBlO3JldHVybiB0LkRiJjY0P241dCh0KTooZT1uZXcgQWgobjV0KHQpKSxlLmErPSIgKGNoYW5nZWFibGU6ICIsQ2coZSwodC5CYiZ4ZikhPTApLGUuYSs9Iiwgdm9sYXRpbGU6ICIsQ2coZSwodC5CYiZBeSkhPTApLGUuYSs9IiwgdHJhbnNpZW50OiAiLENnKGUsKHQuQmImeXkpIT0wKSxlLmErPSIsIGRlZmF1bHRWYWx1ZUxpdGVyYWw6ICIseW8oZSx0LmopLGUuYSs9IiwgdW5zZXR0YWJsZTogIixDZyhlLCh0LkJiJkt1KSE9MCksZS5hKz0iLCBkZXJpdmVkOiAiLENnKGUsKHQuQmImdmQpIT0wKSxlLmErPSIpIixlLmEpfWZ1bmN0aW9uIFF2bih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssXyxNLEI7Zm9yKHM9ZTJuKHQuZCksaD11KEsodC5iLChpQygpLGlFdCkpLDExNiksZD1oLmIraC5jLHc9aC5kK2guYSxfPXMuZC5hKnQuZStkLGs9cy5iLmEqdC5mK3csZXB0KHQuYixuZXcgUmUoXyxrKSksQj1uZXcgUyh0LmcpO0IuYTxCLmMuYy5sZW5ndGg7KU09dShRKEIpLDU2MiksZT1NLmctcy5hLmEsbj1NLmktcy5jLmEscj1GaShoUWUobmV3IFJlKGUsbiksTS5hLE0uYiksbGQoQk0odWMobjJ0KE0uZSkpLE0uZCpNLmEsTS5jKk0uYiksLS41KSksbz1yMnQoTS5lKSx6S2UoTS5lLGZhKHIsbykpfWZ1bmN0aW9uIFp2bih0LGUsbixyKXt2YXIgcyxvLGgsZCx3O2Zvcih3PU50KGdhLHJlLDEwNCwoYmUoKSx1dChvdChaYSwxKSxDYyw2MSwwLFthYyxPbixIbix5cixCbl0pKS5sZW5ndGgsMCwyKSxvPXV0KG90KFphLDEpLENjLDYxLDAsW2FjLE9uLEhuLHlyLEJuXSksaD0wLGQ9by5sZW5ndGg7aDxkOysraClzPW9baF0sd1tzLmddPU50KGdhLFRvLDI1LHQuY1tzLmddLDE1LDEpO3JldHVybiAkc2Uodyx0LE9uKSwkc2Uodyx0LHlyKSx2c3Qodyx0LE9uLGUsbixyKSx2c3Qodyx0LEhuLGUsbixyKSx2c3Qodyx0LHlyLGUsbixyKSx2c3Qodyx0LEJuLGUsbixyKSx3fWZ1bmN0aW9uIEp2bih0LGUsbil7aWYoTWwodC5hLGUpKXtpZihTMCh1KHRyKHQuYSxlKSw1MyksbikpcmV0dXJuIDF9ZWxzZSBBaSh0LmEsZSxuZXcgUXMpO2lmKE1sKHQuYSxuKSl7aWYoUzAodSh0cih0LmEsbiksNTMpLGUpKXJldHVybi0xfWVsc2UgQWkodC5hLG4sbmV3IFFzKTtpZihNbCh0LmIsZSkpe2lmKFMwKHUodHIodC5iLGUpLDUzKSxuKSlyZXR1cm4tMX1lbHNlIEFpKHQuYixlLG5ldyBRcyk7aWYoTWwodC5iLG4pKXtpZihTMCh1KHRyKHQuYixuKSw1MyksZSkpcmV0dXJuIDF9ZWxzZSBBaSh0LmIsbixuZXcgUXMpO3JldHVybiAwfWZ1bmN0aW9uIEI1dCh0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGs7aWYobj09bnVsbCl7Zm9yKHM9dSh0LmcsMTE5KSxkPTA7ZDx0Lmk7KytkKWlmKGg9c1tkXSxoLmFrKCk9PWUpcmV0dXJuIHphKHQsaCxyKX1yZXR1cm4gbz0oc28oKSx1KGUsNjYpLk9qKCk/dShuLDcyKTpZZChlLG4pKSxTbCh0LmUpPyhrPSFHRCh0LGUpLHI9ZXUodCxvLHIpLHc9ZS4kaigpP0hwKHQsMyxlLG51bGwsbix4Nyh0LGUsbixfdChlLDk5KSYmKHUoZSwxOCkuQmImUWEpIT0wKSxrKTpIcCh0LDEsZSxlLnpqKCksbiwtMSxrKSxyP3IuRWkodyk6cj13KTpyPWV1KHQsbyxyKSxyfWZ1bmN0aW9uIHR3bih0KXt2YXIgZSxuLHIscyxvLGg7dC5xPT0odmEoKSxoMCl8fHQucT09S2N8fChzPXQuZi5uLmQrTGoodSh4byh0LmIsKGJlKCksT24pKSwxMjQpKSt0LmMsZT10LmYubi5hK0xqKHUoeG8odC5iLHlyKSwxMjQpKSt0LmMscj11KHhvKHQuYixIbiksMTI0KSxoPXUoeG8odC5iLEJuKSwxMjQpLG89Yi5NYXRoLm1heCgwLHIubi5kLXMpLG89Yi5NYXRoLm1heChvLGgubi5kLXMpLG49Yi5NYXRoLm1heCgwLHIubi5hLWUpLG49Yi5NYXRoLm1heChuLGgubi5hLWUpLHIubi5kPW8saC5uLmQ9byxyLm4uYT1uLGgubi5hPW4pfWZ1bmN0aW9uIGV3bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXyxNLEI7Zm9yKG1yKGUsIlJlc3RvcmluZyByZXZlcnNlZCBlZGdlcyIsMSksdz1uZXcgUyh0LmIpO3cuYTx3LmMuYy5sZW5ndGg7KWZvcihkPXUoUSh3KSwyOSksXz1uZXcgUyhkLmEpO18uYTxfLmMuYy5sZW5ndGg7KWZvcihrPXUoUShfKSwxMCksQj1uZXcgUyhrLmopO0IuYTxCLmMuYy5sZW5ndGg7KWZvcihNPXUoUShCKSwxMSksaD1wZChNLmcpLHI9aCxzPTAsbz1yLmxlbmd0aDtzPG87KytzKW49cltzXSxCZShGZShLKG4sKGFlKCksSDEpKSkpJiZkdyhuLCExKTtvcihlKX1mdW5jdGlvbiB5dWUoKXt0aGlzLmI9bmV3IGkyLHRoaXMuZD1uZXcgaTIsdGhpcy5lPW5ldyBpMix0aGlzLmM9bmV3IGkyLHRoaXMuYT1uZXcgQXIsdGhpcy5mPW5ldyBBcixaMyhuYSxuZXcgRVosbmV3IFRaKSxaMyh3U3QsbmV3IG9jLG5ldyBaYyksWjMoQ0V0LG5ldyBRaSxuZXcgRkwpLFozKFNFdCxuZXcgTlosbmV3IFBaKSxaMyh4NGUsbmV3IFE1LG5ldyBtbSksWjMoWDVuLG5ldyBfWixuZXcgQ1opLFozKEo1bixuZXcgU1osbmV3IEFaKSxaMyhRNW4sbmV3IExaLG5ldyBNWiksWjMoWjVuLG5ldyBEWixuZXcgSWMpLFozKG42bixuZXcgSVosbmV3IEs5KX1mdW5jdGlvbiB4dWUodCl7dmFyIGUsbixyLHMsbyxoO3JldHVybiBvPTAsZT1PaCh0KSxlLkJqKCkmJihvfD00KSx0LkJiJkt1JiYob3w9MiksX3QodCw5OSk/KG49dSh0LDE4KSxzPW9vKG4pLG4uQmImeWMmJihvfD0zMikscyYmKEpuKEdtKHMpKSxvfD04LGg9cy50LChoPjF8fGg9PS0xKSYmKG98PTE2KSxzLkJiJnljJiYob3w9NjQpKSxuLkJiJlFhJiYob3w9QXkpLG98PXhmKTpfdChlLDQ1Nyk/b3w9NTEyOihyPWUuQmooKSxyJiZyLmkmMSYmKG98PTI1NikpLHQuQmImNTEyJiYob3w9MTI4KSxvfWZ1bmN0aW9uIHZDKHQsZSl7dmFyIG4scixzLG8saDtmb3IodD10PT1udWxsP011OihJbih0KSx0KSxzPTA7czxlLmxlbmd0aDtzKyspZVtzXT1GYm4oZVtzXSk7Zm9yKG49bmV3IExtLGg9MCxyPTA7cjxlLmxlbmd0aCYmKG89dC5pbmRleE9mKCIlcyIsaCksbyE9LTEpOyluLmErPSIiK0JsKHQ9PW51bGw/TXU6KEluKHQpLHQpLGgsbyksd2MobixlW3IrK10pLGg9bysyO2lmKHJadChuLHQsaCx0Lmxlbmd0aCkscjxlLmxlbmd0aCl7Zm9yKG4uYSs9IiBbIix3YyhuLGVbcisrXSk7cjxlLmxlbmd0aDspbi5hKz1YYSx3YyhuLGVbcisrXSk7bi5hKz0iXSJ9cmV0dXJuIG4uYX1mdW5jdGlvbiBud24odCl7dmFyIGUsbixyLHMsbztmb3Iobz1uZXcgSmModC5hLmMubGVuZ3RoKSxzPW5ldyBTKHQuYSk7cy5hPHMuYy5jLmxlbmd0aDspe3N3aXRjaChyPXUoUShzKSwxMCksbj11KEsociwoeGUoKSxkdSkpLDE2MyksZT1udWxsLG4uZyl7Y2FzZSAxOmNhc2UgMjplPShoMigpLEc0KTticmVhaztjYXNlIDM6Y2FzZSA0OmU9KGgyKCksb0UpfWU/KGVlKHIsKGFlKCksSFYpLChoMigpLEc0KSksZT09b0U/bHEocixuLChobygpLGFsKSk6ZT09RzQmJmxxKHIsbiwoaG8oKSxzdSkpKTpvLmNbby5jLmxlbmd0aF09cn1yZXR1cm4gb31mdW5jdGlvbiBSNXQodCxlKXt2YXIgbixyLHMsbyxoLGQsdztmb3Iobj0wLHc9bmV3IFMoZSk7dy5hPHcuYy5jLmxlbmd0aDspe2ZvcihkPXUoUSh3KSwxMSksTnl0KHQuYix0LmRbZC5wXSksaD0wLHM9bmV3IE0xKGQuYik7Sm8ocy5hKXx8Sm8ocy5iKTspcj11KEpvKHMuYSk/UShzLmEpOlEocy5iKSwxNyksc1h0KHIpPyhvPWFidCh0LGQ9PXIuYz9yLmQ6ci5jKSxvPnQuZFtkLnBdJiYobis9bm10KHQuYixvKSxWcCh0LmEsZGUobykpKSk6KytoO2ZvcihuKz10LmIuZCpoOyFOVCh0LmEpOylPbXQodC5iLHUoUDYodC5hKSwxOSkuYSl9cmV0dXJuIG59ZnVuY3Rpb24gcnduKHQsZSl7dmFyIG47cmV0dXJuIHQuZj09RGZ0PyhuPSR2KE1vKChHdSgpLFNhKSxlKSksdC5lP249PTQmJmUhPShzeCgpLFV4KSYmZSE9KHN4KCksR3gpJiZlIT0oc3goKSxJZnQpJiZlIT0oc3goKSxPZnQpOm49PTIpOnQuZCYmKHQuZC5IYyhlKXx8dC5kLkhjKHo2KE1vKChHdSgpLFNhKSxlKSkpfHx0LmQuSGMoVDQoKEd1KCksU2EpLHQuYixlKSkpPyEwOnQuZiYmRTV0KChHdSgpLHQuZiksWk0oTW8oU2EsZSkpKT8obj0kdihNbyhTYSxlKSksdC5lP249PTQ6bj09Mik6ITF9ZnVuY3Rpb24gaXduKHQsZSxuLHIpe3ZhciBzLG8saCxkLHcsayxfLE07cmV0dXJuIGg9dSh6ZShuLChkaSgpLCR4KSksOCksdz1oLmEsXz1oLmIrdCxzPWIuTWF0aC5hdGFuMihfLHcpLHM8MCYmKHMrPUk0KSxzKz1lLHM+STQmJihzLT1JNCksZD11KHplKHIsJHgpLDgpLGs9ZC5hLE09ZC5iK3Qsbz1iLk1hdGguYXRhbjIoTSxrKSxvPDAmJihvKz1JNCksbys9ZSxvPkk0JiYoby09STQpLEUxKCksdmYoMWUtMTApLGIuTWF0aC5hYnMocy1vKTw9MWUtMTB8fHM9PW98fGlzTmFOKHMpJiZpc05hTihvKT8wOnM8bz8tMTpzPm8/MTpMdihpc05hTihzKSxpc05hTihvKSl9ZnVuY3Rpb24gc2F0KHQpe3ZhciBlLG4scixzLG8saCxkO2ZvcihkPW5ldyBBcixyPW5ldyBTKHQuYS5iKTtyLmE8ci5jLmMubGVuZ3RoOyllPXUoUShyKSw1NyksQWkoZCxlLG5ldyBsZSk7Zm9yKHM9bmV3IFModC5hLmIpO3MuYTxzLmMuYy5sZW5ndGg7KWZvcihlPXUoUShzKSw1NyksZS5pPU5zLGg9ZS5jLktjKCk7aC5PYigpOylvPXUoaC5QYigpLDU3KSx1KGNjKEZvKGQuZixvKSksMTUpLkZjKGUpO2ZvcihuPW5ldyBTKHQuYS5iKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoUShuKSw1NyksZS5jLiRiKCksZS5jPXUoY2MoRm8oZC5mLGUpKSwxNSk7cWNlKHQpfWZ1bmN0aW9uIGFhdCh0KXt2YXIgZSxuLHIscyxvLGgsZDtmb3IoZD1uZXcgQXIscj1uZXcgUyh0LmEuYik7ci5hPHIuYy5jLmxlbmd0aDspZT11KFEociksODEpLEFpKGQsZSxuZXcgbGUpO2ZvcihzPW5ldyBTKHQuYS5iKTtzLmE8cy5jLmMubGVuZ3RoOylmb3IoZT11KFEocyksODEpLGUubz1OcyxoPWUuZi5LYygpO2guT2IoKTspbz11KGguUGIoKSw4MSksdShjYyhGbyhkLmYsbykpLDE1KS5GYyhlKTtmb3Iobj1uZXcgUyh0LmEuYik7bi5hPG4uYy5jLmxlbmd0aDspZT11KFEobiksODEpLGUuZi4kYigpLGUuZj11KGNjKEZvKGQuZixlKSksMTUpO0ljZSh0KX1mdW5jdGlvbiBzd24odCxlLG4scil7dmFyIHMsbztmb3IobTFuKHQsZSxuLHIpLG5wdChlLHQuai1lLmorbikscnB0KGUsdC5rLWUuaytyKSxvPW5ldyBTKGUuZik7by5hPG8uYy5jLmxlbmd0aDspc3dpdGNoKHM9dShRKG8pLDMyNCkscy5hLmcpe2Nhc2UgMDpLOCh0LGUuZytzLmIuYSwwLGUuZytzLmMuYSxlLmktMSk7YnJlYWs7Y2FzZSAxOks4KHQsZS5nK2UubyxlLmkrcy5iLmEsdC5vLTEsZS5pK3MuYy5hKTticmVhaztjYXNlIDI6SzgodCxlLmcrcy5iLmEsZS5pK2UucCxlLmcrcy5jLmEsdC5wLTEpO2JyZWFrO2RlZmF1bHQ6SzgodCwwLGUuaStzLmIuYSxlLmctMSxlLmkrcy5jLmEpfX1mdW5jdGlvbiBicSh0LGUsbixyLHMpe3ZhciBvLGgsZDt0cnl7aWYoZT49dC5vKXRocm93IG50KG5ldyBFcHQpO2Q9ZT4+NSxoPWUmMzEsbz1NMCgxLE1yKE0wKGgsMSkpKSxzP3QubltuXVtkXT1BMSh0Lm5bbl1bZF0sbyk6dC5uW25dW2RdPUdzKHQubltuXVtkXSxBdnQobykpLG89TTAobywxKSxyP3QubltuXVtkXT1BMSh0Lm5bbl1bZF0sbyk6dC5uW25dW2RdPUdzKHQubltuXVtkXSxBdnQobykpfWNhdGNoKHcpe3Rocm93IHc9cnModyksX3QodywzMjApP250KG5ldyBDbyhDb3QrdC5vKyIqIit0LnArU290K2UrWGErbitBb3QpKTpudCh3KX19ZnVuY3Rpb24gajV0KHQsZSxuLHIpe3ZhciBzLG8saDtlJiYobz1adCh2ZShLKGUsKG1jKCksSmcpKSkpK3IsaD1uK1p0KHZlKEsoZSx4RykpKS8yLGVlKGUsRGh0LGRlKE1yKEF1KGIuTWF0aC5yb3VuZChvKSkpKSksZWUoZSxRX3QsZGUoTXIoQXUoYi5NYXRoLnJvdW5kKGgpKSkpKSxlLmQuYj09MHx8ajV0KHQsdShsaigocz1zaShuZXcgU3AoZSkuYS5kLDApLG5ldyBwNihzKSkpLDg2KSxuK1p0KHZlKEsoZSx4RykpKSt0LmEscitadCh2ZShLKGUseUUpKSkpLEsoZSxNaHQpIT1udWxsJiZqNXQodCx1KEsoZSxNaHQpLDg2KSxuLHIpKX1mdW5jdGlvbiBhd24odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLF8sTSxCO2Zvcih3PSRhKGUuYSkscz1adCh2ZShLKHcsKHhlKCksJDIpKSkpKjIsXz1adCh2ZShLKHcsSjQpKSksaz1iLk1hdGgubWF4KHMsXyksbz1OdChnYSxUbywyNSxlLmYtZS5jKzEsMTUsMSkscj0tayxuPTAsZD1lLmIuS2MoKTtkLk9iKCk7KWg9dShkLlBiKCksMTApLHIrPXQuYVtoLmMucF0rayxvW24rK109cjtmb3Iocis9dC5hW2UuYS5jLnBdK2ssb1tuKytdPXIsQj1uZXcgUyhlLmUpO0IuYTxCLmMuYy5sZW5ndGg7KU09dShRKEIpLDEwKSxyKz10LmFbTS5jLnBdK2ssb1tuKytdPXI7cmV0dXJuIG99ZnVuY3Rpb24gb3duKHQsZSxuLHIpe3ZhciBzLG8saCxkLHcsayxfLE0sQjtmb3IoQj1uZXcgRHAobmV3IHAkdCh0KSksZD11dChvdChvMCwxKSxHZywxMCwwLFtlLG5dKSx3PTAsaz1kLmxlbmd0aDt3PGs7Kyt3KWZvcihoPWRbd10sTT1RXyhoLHIpLktjKCk7TS5PYigpOylmb3IoXz11KE0uUGIoKSwxMSksbz1uZXcgTTEoXy5iKTtKbyhvLmEpfHxKbyhvLmIpOylzPXUoSm8oby5hKT9RKG8uYSk6UShvLmIpLDE3KSxXYShzKXx8KHB6KEIuYSxfLChGbigpLE8yKSk9PW51bGwsc1h0KHMpJiZZTShCLF89PXMuYz9zLmQ6cy5jKSk7cmV0dXJuIERyKEIpLG5ldyBxdShCKX1mdW5jdGlvbiBjd24odCxlKXt2YXIgbixyLHMsbztpZihvPXUoemUodCwoZGkoKSxjNSkpLDYxKS5nLXUoemUoZSxjNSksNjEpLmcsbyE9MClyZXR1cm4gbztpZihuPXUoemUodCxmZnQpLDE5KSxyPXUoemUoZSxmZnQpLDE5KSxuJiZyJiYocz1uLmEtci5hLHMhPTApKXJldHVybiBzO3N3aXRjaCh1KHplKHQsYzUpLDYxKS5nKXtjYXNlIDE6cmV0dXJuIGpzKHQuaSxlLmkpO2Nhc2UgMjpyZXR1cm4ganModC5qLGUuaik7Y2FzZSAzOnJldHVybiBqcyhlLmksdC5pKTtjYXNlIDQ6cmV0dXJuIGpzKGUuaix0LmopO2RlZmF1bHQ6dGhyb3cgbnQobmV3IEhvKGR4dCkpfX1mdW5jdGlvbiAkNXQodCl7dmFyIGUsbixyO3JldHVybiB0LkRiJjY0P1BzdCh0KTooZT1uZXcgRmwodTh0KSxuPXQuayxuP1lyKFlyKChlLmErPScgIicsZSksbiksJyInKTooIXQubiYmKHQubj1uZXcgaGUoWW8sdCwxLDcpKSx0Lm4uaT4wJiYocj0oIXQubiYmKHQubj1uZXcgaGUoWW8sdCwxLDcpKSx1KEF0KHQubiwwKSwxMzcpKS5hLCFyfHxZcihZcigoZS5hKz0nICInLGUpLHIpLCciJykpKSxZcihfdihZcihfdihZcihfdihZcihfdigoZS5hKz0iICgiLGUpLHQuaSksIiwiKSx0LmopLCIgfCAiKSx0LmcpLCIsIiksdC5mKSwiKSIpLGUuYSl9ZnVuY3Rpb24ga3VlKHQpe3ZhciBlLG4scjtyZXR1cm4gdC5EYiY2ND9Qc3QodCk6KGU9bmV3IEZsKGw4dCksbj10Lmssbj9ZcihZcigoZS5hKz0nICInLGUpLG4pLCciJyk6KCF0Lm4mJih0Lm49bmV3IGhlKFlvLHQsMSw3KSksdC5uLmk+MCYmKHI9KCF0Lm4mJih0Lm49bmV3IGhlKFlvLHQsMSw3KSksdShBdCh0Lm4sMCksMTM3KSkuYSwhcnx8WXIoWXIoKGUuYSs9JyAiJyxlKSxyKSwnIicpKSksWXIoX3YoWXIoX3YoWXIoX3YoWXIoX3YoKGUuYSs9IiAoIixlKSx0LmkpLCIsIiksdC5qKSwiIHwgIiksdC5nKSwiLCIpLHQuZiksIikiKSxlLmEpfWZ1bmN0aW9uIG9hdCh0LGUpe3ZhciBuLHIscyxvLGgsZCx3O2lmKGU9PW51bGx8fGUubGVuZ3RoPT0wKXJldHVybiBudWxsO2lmKHM9dShqYyh0LmEsZSksMTQ5KSwhcyl7Zm9yKHI9KGQ9bmV3IG0xKHQuYikuYS52YygpLktjKCksbmV3IHkxKGQpKTtyLmEuT2IoKTspaWYobj0obz11KHIuYS5QYigpLDQyKSx1KG8uZGQoKSwxNDkpKSxoPW4uYyx3PWUubGVuZ3RoLHVuKGguc3Vic3RyKGgubGVuZ3RoLXcsdyksZSkmJihlLmxlbmd0aD09aC5sZW5ndGh8fFRhKGgsaC5sZW5ndGgtZS5sZW5ndGgtMSk9PTQ2KSl7aWYocylyZXR1cm4gbnVsbDtzPW59cyYmQW8odC5hLGUscyl9cmV0dXJuIHN9ZnVuY3Rpb24gdXduKHQsZSl7dmFyIG4scixzLG87cmV0dXJuIG49bmV3IFRsLHI9dSgkbCh4dShuZXcga24obnVsbCxuZXcgVG4odC5mLDE2KSksbiksWW0obmV3IFl0LG5ldyBNaSxuZXcgYmksbmV3IGRuLHV0KG90KHdsLDEpLG9lLDEzMiwwLFsoTjEoKSxMeSksWWxdKSkpLDIxKSxzPXIuZ2MoKSxyPXUoJGwoeHUobmV3IGtuKG51bGwsbmV3IFRuKGUuZiwxNikpLG4pLFltKG5ldyBZdCxuZXcgTWksbmV3IGJpLG5ldyBkbix1dChvdCh3bCwxKSxvZSwxMzIsMCxbTHksWWxdKSkpLDIxKSxvPXIuZ2MoKSxzPG8/LTE6cz09bz8wOjF9ZnVuY3Rpb24gRXVlKHQpe3ZhciBlLG4scjtlYSh0LCh4ZSgpLE93KSkmJihyPXUoSyh0LE93KSwyMSksIXIuZGMoKSYmKG49KGU9dShXZih2byksOSksbmV3IG9oKGUsdShmZihlLGUubGVuZ3RoKSw5KSwwKSksci5IYygoZnkoKSxRbCkpP3dmKG4sUWwpOndmKG4sQWYpLHIuSGMoVmgpfHx3ZihuLFZoKSxyLkhjKENmKT93ZihuLExmKTpyLkhjKEowKT93ZihuLGwwKTpyLkhjKFNmKSYmd2YobixHaCksci5IYyhMZik/d2YobixDZik6ci5IYyhsMCk/d2YobixKMCk6ci5IYyhHaCkmJndmKG4sU2YpLGVlKHQsT3csbikpKX1mdW5jdGlvbiBsd24odCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKHM9dShLKHQsKGFlKCksRHcpKSwxMCkscj10Lmosbj0oU24oMCxyLmMubGVuZ3RoKSx1KHIuY1swXSwxMSkpLGg9bmV3IFMocy5qKTtoLmE8aC5jLmMubGVuZ3RoOylpZihvPXUoUShoKSwxMSksR3Qobyk9PT1HdChLKG4sSWkpKSl7by5qPT0oYmUoKSxPbikmJnQucD5zLnA/KFVzKG8seXIpLG8uZCYmKGQ9by5vLmIsZT1vLmEuYixvLmEuYj1kLWUpKTpvLmo9PXlyJiZzLnA+dC5wJiYoVXMobyxPbiksby5kJiYoZD1vLm8uYixlPW8uYS5iLG8uYS5iPS0oZC1lKSkpO2JyZWFrfXJldHVybiBzfWZ1bmN0aW9uIGh3bih0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssXyxNLEIscSxHO2lmKG89bixuPHIpZm9yKEI9KHE9bmV3IExEKHQucCksRz1uZXcgTEQodC5wKSxLYShxLmUsdC5lKSxxLnE9dC5xLHEucj1HLEtqKHEpLEthKEcuaix0LmopLEcucj1xLEtqKEcpLG5ldyB5YShxLEcpKSxNPXUoQi5hLDExMiksXz11KEIuYiwxMTIpLHM9KFNuKG8sZS5jLmxlbmd0aCksdShlLmNbb10sMzI5KSksaD1udWUodCxNLF8scyksaz1uKzE7azw9cjtrKyspZD0oU24oayxlLmMubGVuZ3RoKSx1KGUuY1trXSwzMjkpKSx3PW51ZSh0LE0sXyxkKSxHaG4oZCx3LHMsaCkmJihzPWQsaD13KTtyZXR1cm4gb31mdW5jdGlvbiBiSSh0LGUsbixyLHMpe3ZhciBvLGgsZCx3LGssXyxNO2lmKCEoX3QoZSwyMzkpfHxfdChlLDM1NCl8fF90KGUsMTg2KSkpdGhyb3cgbnQobmV3IFBuKCJNZXRob2Qgb25seSB3b3JrcyBmb3IgRWxrTm9kZS0sIEVsa0xhYmVsIGFuZCBFbGtQb3J0LW9iamVjdHMuIikpO3JldHVybiBoPXQuYS8yLHc9ZS5pK3ItaCxfPWUuaitzLWgsaz13K2UuZyt0LmEsTT1fK2UuZit0LmEsbz1uZXcganUsYWkobyxuZXcgUmUodyxfKSksYWkobyxuZXcgUmUodyxNKSksYWkobyxuZXcgUmUoayxNKSksYWkobyxuZXcgUmUoayxfKSksZD1uZXcgV3N0KG8pLEJvKGQsZSksbiYmQWkodC5iLGUsZCksZH1mdW5jdGlvbiB3Qyh0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssXyxNLEI7Zm9yKG89bmV3IFJlKGUsbiksXz1uZXcgUyh0LmEpO18uYTxfLmMuYy5sZW5ndGg7KWZvcihrPXUoUShfKSwxMCksRmkoay5uLG8pLEI9bmV3IFMoay5qKTtCLmE8Qi5jLmMubGVuZ3RoOylmb3IoTT11KFEoQiksMTEpLHM9bmV3IFMoTS5nKTtzLmE8cy5jLmMubGVuZ3RoOylmb3Iocj11KFEocyksMTcpLEptKHIuYSxvKSxoPXUoSyhyLCh4ZSgpLE9vKSksNzQpLGgmJkptKGgsbyksdz1uZXcgUyhyLmIpO3cuYTx3LmMuYy5sZW5ndGg7KWQ9dShRKHcpLDcwKSxGaShkLm4sbyl9ZnVuY3Rpb24gZnduKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxfLE0sQjtmb3Iobz1uZXcgUmUoZSxuKSxfPW5ldyBTKHQuYSk7Xy5hPF8uYy5jLmxlbmd0aDspZm9yKGs9dShRKF8pLDEwKSxGaShrLm4sbyksQj1uZXcgUyhrLmopO0IuYTxCLmMuYy5sZW5ndGg7KWZvcihNPXUoUShCKSwxMSkscz1uZXcgUyhNLmcpO3MuYTxzLmMuYy5sZW5ndGg7KWZvcihyPXUoUShzKSwxNyksSm0oci5hLG8pLGg9dShLKHIsKHhlKCksT28pKSw3NCksaCYmSm0oaCxvKSx3PW5ldyBTKHIuYik7dy5hPHcuYy5jLmxlbmd0aDspZD11KFEodyksNzApLEZpKGQubixvKX1mdW5jdGlvbiBUdWUodCl7aWYoKCF0LmImJih0LmI9bmV3IEVuKHZyLHQsNCw3KSksdC5iKS5pPT0wKXRocm93IG50KG5ldyBGVCgiRWRnZXMgbXVzdCBoYXZlIGEgc291cmNlLiIpKTtpZigoIXQuYyYmKHQuYz1uZXcgRW4odnIsdCw1LDgpKSx0LmMpLmk9PTApdGhyb3cgbnQobmV3IEZUKCJFZGdlcyBtdXN0IGhhdmUgYSB0YXJnZXQuIikpO2lmKCF0LmImJih0LmI9bmV3IEVuKHZyLHQsNCw3KSksISh0LmIuaTw9MSYmKCF0LmMmJih0LmM9bmV3IEVuKHZyLHQsNSw4KSksdC5jLmk8PTEpKSl0aHJvdyBudChuZXcgRlQoIkh5cGVyZWRnZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIikpfWZ1bmN0aW9uIF91ZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXyxNO2ZvcihNPTAsbz1uZXcgRjMsVnAobyxlKTtvLmIhPW8uYzspZm9yKHc9dShQNihvKSwyMTQpLGs9MCxfPXUoSyhlLmosKHhlKCkscGIpKSwzMzkpLGg9WnQodmUoSyhlLmosWVYpKSksZD1adCh2ZShLKGUuaixJVHQpKSksXyE9KGowKCksYmIpJiYoays9aCp4Ym4ody5lLF8pLGsrPWQqVTJuKHcuZSkpLE0rPVRzZSh3LmQsdy5lKStrLHM9bmV3IFMody5iKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoUShzKSwzNyksbj11KFBlKHQuYixyLnApLDIxNCksbi5zfHwoTSs9JHN0KHQsbikpO3JldHVybiBNfWZ1bmN0aW9uIGR3bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWjtmb3IocT1lLmxlbmd0aCx3PXEsJHIoMCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KDApPT00NT8oTT0tMSxCPTEsLS1xKTooTT0xLEI9MCksbz0oeWF0KCksVGdlKVsxMF0scz1xL298MCxaPXElbyxaIT0wJiYrK3MsZD1OdChTcixKciwyNSxzLDE1LDEpLG49RWdlWzhdLGg9MCxHPUIrKFo9PTA/bzpaKSxXPUI7Vzx3O1c9RyxHPVcrbylyPUdsKGUuc3Vic3RyKFcsRy1XKSxPYSxUaSksaz0oZzcoKSxJM3QoZCxkLGgsbikpLGsrPUhsbihkLGgsciksZFtoKytdPWs7Xz1oLHQuZT1NLHQuZD1fLHQuYT1kLE9fKHQpfWZ1bmN0aW9uIEN1ZSh0LGUsbixyLHMsbyxoKXtpZih0LmM9ci5xZigpLmEsdC5kPXIucWYoKS5iLHMmJih0LmMrPXMucWYoKS5hLHQuZCs9cy5xZigpLmIpLHQuYj1lLnJmKCkuYSx0LmE9ZS5yZigpLmIsIXMpbj90LmMtPWgrZS5yZigpLmE6dC5jKz1yLnJmKCkuYStoO2Vsc2Ugc3dpdGNoKHMuSGYoKS5nKXtjYXNlIDA6Y2FzZSAyOnQuYys9cy5yZigpLmEraCtvLmEraDticmVhaztjYXNlIDQ6dC5jLT1oK28uYStoK2UucmYoKS5hO2JyZWFrO2Nhc2UgMTp0LmMrPXMucmYoKS5hK2gsdC5kLT1oK28uYitoK2UucmYoKS5iO2JyZWFrO2Nhc2UgMzp0LmMrPXMucmYoKS5hK2gsdC5kKz1zLnJmKCkuYitoK28uYitofX1mdW5jdGlvbiBTdWUodCxlKXt2YXIgbixyO2Zvcih0aGlzLmI9bmV3IGxlLHRoaXMuZT1uZXcgbGUsdGhpcy5hPXQsdGhpcy5kPWUsemhuKHRoaXMpLFhsbih0aGlzKSx0aGlzLmIuZGMoKT90aGlzLmM9dC5jLnA6dGhpcy5jPXUodGhpcy5iLlhiKDApLDEwKS5jLnAsdGhpcy5lLmMubGVuZ3RoPT0wP3RoaXMuZj10LmMucDp0aGlzLmY9dShQZSh0aGlzLmUsdGhpcy5lLmMubGVuZ3RoLTEpLDEwKS5jLnAscj11KEsodCwoYWUoKSxUTykpLDE1KS5LYygpO3IuT2IoKTspaWYobj11KHIuUGIoKSw3MCksZWEobiwoeGUoKSxRVikpKXt0aGlzLmQ9dShLKG4sUVYpLDIyNyk7YnJlYWt9fWZ1bmN0aW9uIG03KHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxfO2ZvcihyPXUodHIodC5hLGUpLDUzKSxvPXUodHIodC5hLG4pLDUzKSxzPXUodHIodC5lLGUpLDUzKSxoPXUodHIodC5lLG4pLDUzKSxyLmEuemMobixyKSxoLmEuemMoZSxoKSxfPW8uYS5lYygpLktjKCk7Xy5PYigpOylrPXUoXy5QYigpLDEwKSxyLmEuemMoayxyKSxWcyh1KHRyKHQuZSxrKSw1MyksZSksS2EodSh0cih0LmUsayksNTMpLHMpO2Zvcih3PXMuYS5lYygpLktjKCk7dy5PYigpOylkPXUody5QYigpLDEwKSxoLmEuemMoZCxoKSxWcyh1KHRyKHQuYSxkKSw1MyksbiksS2EodSh0cih0LmEsZCksNTMpLG8pfWZ1bmN0aW9uIHZJKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxfO2ZvcihyPXUodHIodC5hLGUpLDUzKSxvPXUodHIodC5hLG4pLDUzKSxzPXUodHIodC5iLGUpLDUzKSxoPXUodHIodC5iLG4pLDUzKSxyLmEuemMobixyKSxoLmEuemMoZSxoKSxfPW8uYS5lYygpLktjKCk7Xy5PYigpOylrPXUoXy5QYigpLDEwKSxyLmEuemMoayxyKSxWcyh1KHRyKHQuYixrKSw1MyksZSksS2EodSh0cih0LmIsayksNTMpLHMpO2Zvcih3PXMuYS5lYygpLktjKCk7dy5PYigpOylkPXUody5QYigpLDEwKSxoLmEuemMoZCxoKSxWcyh1KHRyKHQuYSxkKSw1MyksbiksS2EodSh0cih0LmEsZCksNTMpLG8pfWZ1bmN0aW9uIGd3bih0LGUpe3ZhciBuLHIscztzd2l0Y2gobXIoZSwiQnJlYWtpbmcgUG9pbnQgSW5zZXJ0aW9uIiwxKSxyPW5ldyB1NXQodCksdShLKHQsKHhlKCksc2h0KSksMzM3KS5nKXtjYXNlIDI6cz1uZXcgUEY7Y2FzZSAwOnM9bmV3IElGO2JyZWFrO2RlZmF1bHQ6cz1uZXcgRkZ9aWYobj1zLlZmKHQsciksQmUoRmUoSyh0LGJfdCkpKSYmKG49czNuKHQsbikpLCFzLldmKCkmJmVhKHQsYUcpKXN3aXRjaCh1KEsodCxhRyksMzM4KS5nKXtjYXNlIDI6bj1mb2UocixuKTticmVhaztjYXNlIDE6bj1oYWUocixuKX1pZihuLmRjKCkpe29yKGUpO3JldHVybn1zNW4odCxuKSxvcihlKX1mdW5jdGlvbiBwd24odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLF8sTSxCO2lmKF89bnVsbCxCPWUsTT1PWnQodCxMWnQobiksQikscV8oTSxPMChCLENkKSksaD1VdihCLGY4dCkscj1uZXcgZ0d0KHQsTSkscWduKHIuYSxyLmIsaCksZD1VdihCLFdjdCkscz1uZXcgcEd0KHQsTSksSGduKHMuYSxzLmIsZCksKCFNLmImJihNLmI9bmV3IEVuKHZyLE0sNCw3KSksTS5iKS5pPT0wfHwoIU0uYyYmKE0uYz1uZXcgRW4odnIsTSw1LDgpKSxNLmMpLmk9PTApdGhyb3cgbz1PMChCLENkKSx3PV9kZStvLGs9dytINyxudChuZXcgb2QoaykpO3JldHVybiBKeihCLE0pLGg1bih0LEIsTSksXz15aXQodCxCLE0pLF99ZnVuY3Rpb24gYnduKHQsZSl7dmFyIG4scixzLG8saCxkLHc7Zm9yKHM9TnQoU3IsSnIsMjUsdC5lLmEuYy5sZW5ndGgsMTUsMSksaD1uZXcgUyh0LmUuYSk7aC5hPGguYy5jLmxlbmd0aDspbz11KFEoaCksMTIxKSxzW28uZF0rPW8uYi5hLmMubGVuZ3RoO2ZvcihkPVVNKGUpO2QuYiE9MDspZm9yKG89dShkLmI9PTA/bnVsbDooWm4oZC5iIT0wKSxmaChkLGQuYS5hKSksMTIxKSxyPVc2KG5ldyBTKG8uZy5hKSk7ci5PYigpOyluPXUoci5QYigpLDIxMyksdz1uLmUsdy5lPWIuTWF0aC5tYXgody5lLG8uZStuLmEpLC0tc1t3LmRdLHNbdy5kXT09MCYma3MoZCx3LGQuYy5iLGQuYyl9ZnVuY3Rpb24gQXVlKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxfLE07Zm9yKG49T2Escz1UaSxkPW5ldyBTKHQuZS5hKTtkLmE8ZC5jLmMubGVuZ3RoOylvPXUoUShkKSwxMjEpLHM9Yi5NYXRoLm1pbihzLG8uZSksbj1iLk1hdGgubWF4KG4sby5lKTtmb3IoZT1OdChTcixKciwyNSxuLXMrMSwxNSwxKSxoPW5ldyBTKHQuZS5hKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoUShoKSwxMjEpLG8uZS09cywrK2Vbby5lXTtpZihyPTAsdC5rIT1udWxsKWZvcihrPXQuayxfPTAsTT1rLmxlbmd0aDtfPE0mJih3PWtbX10sZVtyKytdKz13LGUubGVuZ3RoIT1yKTsrK18pO3JldHVybiBlfWZ1bmN0aW9uIEx1ZSh0KXtzd2l0Y2godC5kKXtjYXNlIDk6Y2FzZSA4OnJldHVybiEwO2Nhc2UgMzpjYXNlIDU6Y2FzZSA0OmNhc2UgNjpyZXR1cm4hMTtjYXNlIDc6cmV0dXJuIHUoTTV0KHQpLDE5KS5hPT10Lm87Y2FzZSAxOmNhc2UgMjp7aWYodC5vPT0tMilyZXR1cm4hMTtzd2l0Y2godC5wKXtjYXNlIDA6Y2FzZSAxOmNhc2UgMjpjYXNlIDY6Y2FzZSA1OmNhc2UgNzpyZXR1cm4gQXYodC5rLHQuZik7Y2FzZSAzOmNhc2UgNDpyZXR1cm4gdC5qPT10LmU7ZGVmYXVsdDpyZXR1cm4gdC5uPT1udWxsP3QuZz09bnVsbDpTaSh0Lm4sdC5nKX19ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gTXVlKHQpe1N2KHQsbmV3IHkyKEV2KHl2KGt2KHh2KG5ldyBtZyxHQyksIkVMSyBGaXhlZCIpLCJLZWVwcyB0aGUgY3VycmVudCBsYXlvdXQgYXMgaXQgaXMsIHdpdGhvdXQgYW55IGF1dG9tYXRpYyBtb2RpZmljYXRpb24uIE9wdGlvbmFsIGNvb3JkaW5hdGVzIGNhbiBiZSBnaXZlbiBmb3Igbm9kZXMgYW5kIGVkZ2UgYmVuZCBwb2ludHMuIiksbmV3IEJMKSkpLHdlKHQsR0Msd3cseUF0KSx3ZSh0LEdDLHVILEllKEtTKSksd2UodCxHQyxzOHQsSWUoYkF0KSksd2UodCxHQyxNNCxJZSh2QXQpKSx3ZSh0LEdDLHZ4LEllKG1BdCkpLHdlKHQsR0MsZ2N0LEllKHdBdCkpfWZ1bmN0aW9uIHZxKHQsZSxuKXt2YXIgcixzLG8saCxkO2lmKHI9TXIoSWEoZTAsV2QoTXIoSWEoZT09bnVsbD8wOkppKGUpLG4wKSksMTUpKSksZD1NcihJYShlMCxXZChNcihJYShuPT1udWxsPzA6SmkobiksbjApKSwxNSkpKSxvPUhfKHQsZSxyKSxvJiZkPT1vLmYmJmRkKG4sby5pKSlyZXR1cm4gbjtpZihoPVZfKHQsbixkKSxoKXRocm93IG50KG5ldyBQbigidmFsdWUgYWxyZWFkeSBwcmVzZW50OiAiK24pKTtyZXR1cm4gcz1uZXcgWGooZSxyLG4sZCksbz8odzQodCxvKSxvSSh0LHMsbyksby5lPW51bGwsby5jPW51bGwsby5pKToob0kodCxzLG51bGwpLHpzZSh0KSxudWxsKX1mdW5jdGlvbiB2d24odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLF8sTSxCLHEsRztfPW4uYS5jLGg9bi5hLmMrbi5hLmIsbz11KHRyKG4uYyxlKSw0NTkpLHE9by5mLEc9by5hLG8uYj93PW5ldyBSZShoLHEpOnc9bmV3IFJlKF8scSksby5jP009bmV3IFJlKF8sRyk6TT1uZXcgUmUoaCxHKSxzPV8sbi5wfHwocys9dC5jKSxzKz1uLkYrbi52KnQuYixrPW5ldyBSZShzLHEpLEI9bmV3IFJlKHMsRyksel8oZS5hLHV0KG90KG5hLDEpLHJlLDgsMCxbdyxrXSkpLGQ9bi5kLmEuZ2MoKT4xLGQmJihyPW5ldyBSZShzLG4uYiksYWkoZS5hLHIpKSx6XyhlLmEsdXQob3QobmEsMSkscmUsOCwwLFtCLE1dKSl9ZnVuY3Rpb24gY2F0KHQsZSxuKXt2YXIgcixzLG8saCxkLHc7aWYoZSlpZihuPD0tMSl7aWYocj13bihlLlRnKCksLTEtbiksX3Qociw5OSkpcmV0dXJuIHUociwxOCk7Zm9yKGg9dShlLmFoKHIpLDE1MyksZD0wLHc9aC5nYygpO2Q8dzsrK2QpaWYoR3QoaC5qbChkKSk9PT1HdCh0KSYmKHM9aC5pbChkKSxfdChzLDk5KSYmKG89dShzLDE4KSxvLkJiJnljKSkpcmV0dXJuIG87dGhyb3cgbnQobmV3IEhvKCJUaGUgY29udGFpbm1lbnQgZmVhdHVyZSBjb3VsZCBub3QgYmUgbG9jYXRlZCIpKX1lbHNlIHJldHVybiBvbyh1KHduKHQuVGcoKSxuKSwxOCkpO2Vsc2UgcmV0dXJuIG51bGx9ZnVuY3Rpb24gd3duKHQpe3ZhciBlLG4scixzLG87Zm9yKHI9dC5sZW5ndGgsZT1uZXcgQlQsbz0wO288cjspaWYobj1UYSh0LG8rKyksIShuPT05fHxuPT0xMHx8bj09MTJ8fG49PTEzfHxuPT0zMikpe2lmKG49PTM1KXtmb3IoO288ciYmKG49VGEodCxvKyspLCEobj09MTN8fG49PTEwKSk7KTtjb250aW51ZX1uPT05MiYmbzxyPyhzPSgkcihvLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQobykpKT09MzV8fHM9PTl8fHM9PTEwfHxzPT0xMnx8cz09MTN8fHM9PTMyPyh2OChlLHMmTXMpLCsrbyk6KGUuYSs9IlxcIix2OChlLHMmTXMpLCsrbyk6djgoZSxuJk1zKX1yZXR1cm4gZS5hfWZ1bmN0aW9uIG13bih0LGUpe3ZhciBuLHIscztmb3Iocj1uZXcgUyhlKTtyLmE8ci5jLmMubGVuZ3RoOylpZihuPXUoUShyKSwzMyksY24odC5hLG4sbiksY24odC5iLG4sbikscz1neShuKSxzLmMubGVuZ3RoIT0wKWZvcih0LmQmJnQuZC5sZyhzKSxjbih0LmEsbiwoU24oMCxzLmMubGVuZ3RoKSx1KHMuY1swXSwzMykpKSxjbih0LmIsbix1KFBlKHMscy5jLmxlbmd0aC0xKSwzMykpO2JpdChzKS5jLmxlbmd0aCE9MDspcz1iaXQocyksdC5kJiZ0LmQubGcocyksY24odC5hLG4sKFNuKDAscy5jLmxlbmd0aCksdShzLmNbMF0sMzMpKSksY24odC5iLG4sdShQZShzLHMuYy5sZW5ndGgtMSksMzMpKX1mdW5jdGlvbiB5d24odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLF87Zm9yKG49MCxkPW5ldyBTKHQuZCk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KFEoZCksMTAxKSxoLmkmJihoLmkuYz1uKyspO2ZvcihlPVpiKHhsLFtyZSxpMF0sWzE3NywyNV0sMTYsW24sbl0sMiksXz10LmQscz0wO3M8Xy5jLmxlbmd0aDtzKyspaWYodz0oU24ocyxfLmMubGVuZ3RoKSx1KF8uY1tzXSwxMDEpKSx3LmkpZm9yKG89cysxO288Xy5jLmxlbmd0aDtvKyspaz0oU24obyxfLmMubGVuZ3RoKSx1KF8uY1tvXSwxMDEpKSxrLmkmJihyPXMwbih3LGspLGVbdy5pLmNdW2suaS5jXT1yLGVbay5pLmNdW3cuaS5jXT1yKTtyZXR1cm4gZX1mdW5jdGlvbiB6NXQodCxlLG4scil7dmFyIHMsbyxoO3JldHVybiBoPW5ldyBRSHQoZSxuKSx0LmE/cj8ocz11KHRyKHQuYixlKSwyODMpLCsrcy5hLGguZD1yLmQsaC5lPXIuZSxoLmI9cixoLmM9cixyLmU/ci5lLmM9aDp1KHRyKHQuYixlKSwyODMpLmI9aCxyLmQ/ci5kLmI9aDp0LmE9aCxyLmQ9aCxyLmU9aCk6KHQuZS5iPWgsaC5kPXQuZSx0LmU9aCxzPXUodHIodC5iLGUpLDI4Mykscz8oKytzLmEsbz1zLmMsby5jPWgsaC5lPW8scy5jPWgpOihBaSh0LmIsZSxzPW5ldyBBd3QoaCkpLCsrdC5jKSk6KHQuYT10LmU9aCxBaSh0LmIsZSxuZXcgQXd0KGgpKSwrK3QuYyksKyt0LmQsaH1mdW5jdGlvbiBweSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGs7Zm9yKG49bmV3IFJlZ0V4cChlLCJnIiksdz1OdChMZSxyZSwyLDAsNiwxKSxyPTAsaz10LG89bnVsbDs7KWlmKGQ9bi5leGVjKGspLGQ9PW51bGx8fGs9PSIiKXt3W3JdPWs7YnJlYWt9ZWxzZSBoPWQuaW5kZXgsd1tyXT1rLnN1YnN0cigwLGgpLGs9QmwoayxoK2RbMF0ubGVuZ3RoLGsubGVuZ3RoKSxuLmxhc3RJbmRleD0wLG89PWsmJih3W3JdPWsuc3Vic3RyKDAsMSksaz1rLnN1YnN0cigxKSksbz1rLCsrcjtpZih0Lmxlbmd0aD4wKXtmb3Iocz13Lmxlbmd0aDtzPjAmJndbcy0xXT09IiI7KS0tcztzPHcubGVuZ3RoJiYody5sZW5ndGg9cyl9cmV0dXJuIHd9ZnVuY3Rpb24gcTV0KHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxfLE07Zm9yKE09UG8oZSksaz1udWxsLHM9ITEsZD0wLF89T2MoTS5hKS5pO2Q8XzsrK2QpaD11KEVJKE0sZCwobz11KEF0KE9jKE0uYSksZCksODcpLHc9by5jLF90KHcsODgpP3UodywyNik6KGxuKCksUWgpKSksMjYpLG49cTV0KHQsaCksbi5kYygpfHwoaz8oc3x8KHM9ITAsaz1uZXcgTmooaykpLGsuR2MobikpOms9bik7cmV0dXJuIHI9c3BuKHQsZSksci5kYygpP2t8fChwbigpLHBuKCksdW8pOms/KHN8fChrPW5ldyBOaihrKSksay5HYyhyKSxrKTpyfWZ1bmN0aW9uIHVhdCh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXyxNO2ZvcihNPVBvKGUpLGs9bnVsbCxyPSExLGQ9MCxfPU9jKE0uYSkuaTtkPF87KytkKW89dShFSShNLGQsKHM9dShBdChPYyhNLmEpLGQpLDg3KSx3PXMuYyxfdCh3LDg4KT91KHcsMjYpOihsbigpLFFoKSkpLDI2KSxuPXVhdCh0LG8pLG4uZGMoKXx8KGs/KHJ8fChyPSEwLGs9bmV3IE5qKGspKSxrLkdjKG4pKTprPW4pO3JldHVybiBoPU5wbih0LGUpLGguZGMoKT9rfHwocG4oKSxwbigpLHVvKTprPyhyfHwoaz1uZXcgTmooaykpLGsuR2MoaCksayk6aH1mdW5jdGlvbiB3SSh0LGUsbil7dmFyIHIscyxvLGgsZCx3O2lmKF90KGUsNzIpKXJldHVybiB6YSh0LGUsbik7Zm9yKGQ9bnVsbCxvPW51bGwscj11KHQuZywxMTkpLGg9MDtoPHQuaTsrK2gpaWYocz1yW2hdLFNpKGUscy5kZCgpKSYmKG89cy5haygpLF90KG8sOTkpJiZ1KG8sMTgpLkJiJnljKSl7ZD1zO2JyZWFrfXJldHVybiBkJiYoU2wodC5lKSYmKHc9by4kaigpP0hwKHQsNCxvLGUsbnVsbCx4Nyh0LG8sZSxfdChvLDk5KSYmKHUobywxOCkuQmImUWEpIT0wKSwhMCk6SHAodCxvLktqKCk/MjoxLG8sZSxvLnpqKCksLTEsITApLG4/bi5FaSh3KTpuPXcpLG49d0kodCxkLG4pKSxufWZ1bmN0aW9uIHh3bih0KXt2YXIgZSxuLHIscztyPXQubyxCbSgpLHQuQS5kYygpfHxTaSh0LkEsUTd0KT9zPXIuYToocz11SSh0LmYpLHQuQS5IYygoTmwoKSxlTikpJiYhdC5CLkhjKChibCgpLGVBKSkmJihzPWIuTWF0aC5tYXgocyx1SSh1KHhvKHQucCwoYmUoKSxPbikpLDI0NCkpKSxzPWIuTWF0aC5tYXgocyx1SSh1KHhvKHQucCx5ciksMjQ0KSkpKSxlPUNuZSh0KSxlJiYocz1iLk1hdGgubWF4KHMsZS5hKSkpLEJlKEZlKHQuZS55ZigpLldlKChkaSgpLGpHKSkpKT9yLmE9Yi5NYXRoLm1heChyLmEscyk6ci5hPXMsbj10LmYuaSxuLmM9MCxuLmI9cyxnYXQodC5mKX1mdW5jdGlvbiBrd24odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLF87aWYobj1lLkhoKHQuYSksbiYmKHc9anIoSmYoKCFuLmImJihuLmI9bmV3IEFsKChsbigpLEphKSxwYyxuKSksbi5iKSwibWVtYmVyVHlwZXMiKSksdyE9bnVsbCkpe2ZvcihrPW5ldyBsZSxvPXB5KHcsIlxcdyIpLGg9MCxkPW8ubGVuZ3RoO2g8ZDsrK2gpcz1vW2hdLHI9cy5sYXN0SW5kZXhPZigiIyIpLF89cj09LTE/QjJ0KHQsZS5BaigpLHMpOnI9PTA/cEQodCxudWxsLHMuc3Vic3RyKDEpKTpwRCh0LHMuc3Vic3RyKDAscikscy5zdWJzdHIocisxKSksX3QoXywxNDgpJiZ1ZShrLHUoXywxNDgpKTtyZXR1cm4ga31yZXR1cm4gcG4oKSxwbigpLHVvfWZ1bmN0aW9uIEV3bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssXztmb3IobXIobixSZmUsMSksdC5iZihlKSxvPTA7dC5kZihvKTspe2ZvcihfPW5ldyBTKGUuZSk7Xy5hPF8uYy5jLmxlbmd0aDspZm9yKHc9dShRKF8pLDE0NCksZD1qcChJMSh1dChvdCgkMSwxKSxNZSwyMCwwLFtlLmUsZS5kLGUuYl0pKSk7VnIoZCk7KWg9dShJcihkKSwzNTcpLGghPXcmJihzPXQuYWYoaCx3KSxzJiZGaSh3LmEscykpO2ZvcihrPW5ldyBTKGUuZSk7ay5hPGsuYy5jLmxlbmd0aDspdz11KFEoayksMTQ0KSxyPXcuYSxPYWUociwtdC5kLC10LmQsdC5kLHQuZCksRmkody5kLHIpLEtmKHIpO3QuY2YoKSwrK299b3Iobil9ZnVuY3Rpb24gVHduKHQsZSxuKXt2YXIgcixzLG8saDtpZihoPWh1KHQuZS5UZygpLGUpLHI9dSh0LmcsMTE5KSxzbygpLHUoZSw2NikuT2ooKSl7Zm9yKG89MDtvPHQuaTsrK28paWYocz1yW29dLGgucmwocy5haygpKSYmU2kocyxuKSlyZXR1cm4gZHkodCxvKSwhMH1lbHNlIGlmKG4hPW51bGwpe2ZvcihvPTA7bzx0Lmk7KytvKWlmKHM9cltvXSxoLnJsKHMuYWsoKSkmJlNpKG4scy5kZCgpKSlyZXR1cm4gZHkodCxvKSwhMH1lbHNlIGZvcihvPTA7bzx0Lmk7KytvKWlmKHM9cltvXSxoLnJsKHMuYWsoKSkmJnMuZGQoKT09bnVsbClyZXR1cm4gZHkodCxvKSwhMDtyZXR1cm4hMX1mdW5jdGlvbiBfd24odCxlKXt2YXIgbixyLHMsbyxoO2Zvcih0LmM9PW51bGx8fHQuYy5sZW5ndGg8ZS5jLmxlbmd0aD90LmM9TnQoeGwsaTAsMjUsZS5jLmxlbmd0aCwxNiwxKTpQVCh0LmMpLHQuYT1uZXcgbGUscj0wLGg9bmV3IFMoZSk7aC5hPGguYy5jLmxlbmd0aDspcz11KFEoaCksMTApLHMucD1yKys7Zm9yKG49bmV3IGNzLG89bmV3IFMoZSk7by5hPG8uYy5jLmxlbmd0aDspcz11KFEobyksMTApLHQuY1tzLnBdfHwod29lKHQscyksbi5iPT0wfHwoWm4obi5iIT0wKSx1KG4uYS5hLmMsMTUpKS5nYygpPHQuYS5jLmxlbmd0aD8kR3Qobix0LmEpOlhiKG4sdC5hKSx0LmE9bmV3IGxlKTtyZXR1cm4gbn1mdW5jdGlvbiBDd24odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLF8sTSxCLHEsRztmb3IoaD11KEF0KGUsMCksMzMpLEN1KGgsMCksU3UoaCwwKSxCPW5ldyBsZSxCLmNbQi5jLmxlbmd0aF09aCxkPWgsbz1uZXcgQ250KHQuYSxoLmcsaC5mLCh3NygpLEhTKSkscT0xO3E8ZS5pO3ErKylHPXUoQXQoZSxxKSwzMyksdz1tYXQodCxyNSxHLGQsbyxCLG4pLGs9bWF0KHQsQngsRyxkLG8sQixuKSxfPW1hdCh0LHFTLEcsZCxvLEIsbiksTT1tYXQodCx6UyxHLGQsbyxCLG4pLHM9anluKHQsdyxrLF8sTSxHLGQsciksQ3UoRyxzLmQpLFN1KEcscy5lKSxxayhzLEhTKSxvPXMsZD1HLEIuY1tCLmMubGVuZ3RoXT1HO3JldHVybiBvfWZ1bmN0aW9uIER1ZSh0KXtTdih0LG5ldyB5MihFdih5dihrdih4dihuZXcgbWcsUjcpLCJFTEsgU1BPckUgT3ZlcmxhcCBSZW1vdmFsIiksJ0Egbm9kZSBvdmVybGFwIHJlbW92YWwgYWxnb3JpdGhtIHByb3Bvc2VkIGJ5IE5hY2htYW5zb24gZXQgYWwuIGluICJOb2RlIG92ZXJsYXAgcmVtb3ZhbCBieSBncm93aW5nIGEgdHJlZSIuJyksbmV3IGxaKSkpLHdlKHQsUjcsQWN0LEllKGhTdCkpLHdlKHQsUjcsd3csbFN0KSx3ZSh0LFI3LGt5LDgpLHdlKHQsUjcsRGN0LEllKEUzZSkpLHdlKHQsUjcsZTh0LEllKGNTdCkpLHdlKHQsUjcsbjh0LEllKHVTdCkpLHdlKHQsUjcsS0ksKEZuKCksITEpKX1mdW5jdGlvbiBJdWUodCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLF8sTSxCLHE7Zm9yKGg9Rm0oZS5jLG4sciksTT1uZXcgUyhlLmEpO00uYTxNLmMuYy5sZW5ndGg7KXtmb3IoXz11KFEoTSksMTApLEZpKF8ubixoKSxxPW5ldyBTKF8uaik7cS5hPHEuYy5jLmxlbmd0aDspZm9yKEI9dShRKHEpLDExKSxvPW5ldyBTKEIuZyk7by5hPG8uYy5jLmxlbmd0aDspZm9yKHM9dShRKG8pLDE3KSxKbShzLmEsaCksZD11KEsocywoeGUoKSxPbykpLDc0KSxkJiZKbShkLGgpLGs9bmV3IFMocy5iKTtrLmE8ay5jLmMubGVuZ3RoOyl3PXUoUShrKSw3MCksRmkody5uLGgpO3VlKHQuYSxfKSxfLmE9dH19ZnVuY3Rpb24gU3duKHQsZSl7dmFyIG4scixzLG8saDtpZihtcihlLCJOb2RlIGFuZCBQb3J0IExhYmVsIFBsYWNlbWVudCBhbmQgTm9kZSBTaXppbmciLDEpLGdVdCgoelQoKSxuZXcgbnJ0KHQsITAsITAsbmV3IEZZKSkpLHUoSyh0LChhZSgpLFdjKSksMjEpLkhjKChnbygpLHloKSkpZm9yKG89dShLKHQsKHhlKCkscXkpKSwyMSkscz1vLkhjKChpbCgpLHROKSksaD1CZShGZShLKHQsb190KSkpLHI9bmV3IFModC5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoUShyKSwyOSkseXMoV2kobmV3IGtuKG51bGwsbmV3IFRuKG4uYSwxNikpLG5ldyBqZCksbmV3IGJLdChvLHMsaCkpO29yKGUpfWZ1bmN0aW9uIEF3bih0LGUpe3ZhciBuLHIscyxvLGgsZDtpZihuPWUuSGgodC5hKSxuJiYoZD1qcihKZigoIW4uYiYmKG4uYj1uZXcgQWwoKGxuKCksSmEpLHBjLG4pKSxuLmIpLG1IKSksZCE9bnVsbCkpc3dpdGNoKHM9ZGooZCxMdSgzNSkpLHI9ZS5IaigpLHM9PS0xPyhoPWtfKHQsemwocikpLG89ZCk6cz09MD8oaD1udWxsLG89ZC5zdWJzdHIoMSkpOihoPWQuc3Vic3RyKDAscyksbz1kLnN1YnN0cihzKzEpKSwkdihNbyh0LGUpKSl7Y2FzZSAyOmNhc2UgMzpyZXR1cm4gRmNuKHQscixoLG8pO2Nhc2UgMDpjYXNlIDQ6Y2FzZSA1OmNhc2UgNjpyZXR1cm4gQmNuKHQscixoLG8pfXJldHVybiBudWxsfWZ1bmN0aW9uIEg1dCh0LGUsbil7dmFyIHIscyxvLGgsZDtpZihoPShzbygpLHUoZSw2NikuT2ooKSksRzAodC5lLGUpKXtpZihlLmhpKCkmJm1xKHQsZSxuLF90KGUsOTkpJiYodShlLDE4KS5CYiZRYSkhPTApKXJldHVybiExfWVsc2UgZm9yKGQ9aHUodC5lLlRnKCksZSkscj11KHQuZywxMTkpLG89MDtvPHQuaTsrK28paWYocz1yW29dLGQucmwocy5haygpKSlyZXR1cm4oaD9TaShzLG4pOm49PW51bGw/cy5kZCgpPT1udWxsOlNpKG4scy5kZCgpKSk/ITE6KHUobDQodCxvLGg/dShuLDcyKTpZZChlLG4pKSw3MiksITApO3JldHVybiBPcih0LGg/dShuLDcyKTpZZChlLG4pKX1mdW5jdGlvbiBtSSh0KXt2YXIgZSxuLHIscyxvLGgsZCx3O2lmKHQuZCl0aHJvdyBudChuZXcgSG8oKEwwKHRsdCksd290K3RsdC5rK21vdCkpKTtmb3IodC5jPT0oZm8oKSxjMCkmJl80KHQsSGgpLG49bmV3IFModC5hLmEpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShRKG4pLDE4OSksZS5lPTA7Zm9yKGg9bmV3IFModC5hLmIpO2guYTxoLmMuYy5sZW5ndGg7KWZvcihvPXUoUShoKSw4MSksby5vPU5zLHM9by5mLktjKCk7cy5PYigpOylyPXUocy5QYigpLDgxKSwrK3IuZC5lO2Zvcih4NG4odCksdz1uZXcgUyh0LmEuYik7dy5hPHcuYy5jLmxlbmd0aDspZD11KFEodyksODEpLGQuaz0hMDtyZXR1cm4gdH1mdW5jdGlvbiBMd24odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrO2ZvcihkPW5ldyBxYWUodCksbj1uZXcgY3Msa3MobixlLG4uYy5iLG4uYyk7bi5iIT0wOyl7Zm9yKHI9dShuLmI9PTA/bnVsbDooWm4obi5iIT0wKSxmaChuLG4uYS5hKSksMTEzKSxyLmQucD0xLGg9bmV3IFMoci5lKTtoLmE8aC5jLmMubGVuZ3RoOylzPXUoUShoKSw0MDkpLHVhZShkLHMpLGs9cy5kLGsuZC5wPT0wJiZrcyhuLGssbi5jLmIsbi5jKTtmb3Iobz1uZXcgUyhyLmIpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShRKG8pLDQwOSksdWFlKGQscyksdz1zLmMsdy5kLnA9PTAmJmtzKG4sdyxuLmMuYixuLmMpfXJldHVybiBkfWZ1bmN0aW9uIE91ZSh0KXt2YXIgZSxuLHIscyxvO2lmKHI9WnQodmUoemUodCwoZGkoKSxZM2UpKSkpLHIhPTEpZm9yKHNqKHQscip0Lmcscip0LmYpLG49VlllKGV0bigoIXQuYyYmKHQuYz1uZXcgaGUoeWwsdCw5LDkpKSx0LmMpLG5ldyBGWikpLG89anAoSTEodXQob3QoJDEsMSksTWUsMjAsMCxbKCF0Lm4mJih0Lm49bmV3IGhlKFlvLHQsMSw3KSksdC5uKSwoIXQuYyYmKHQuYz1uZXcgaGUoeWwsdCw5LDkpKSx0LmMpLG5dKSkpO1ZyKG8pOylzPXUoSXIobyksNDcwKSxzLkdnKHIqcy5EZygpLHIqcy5FZygpKSxzLkZnKHIqcy5DZygpLHIqcy5CZygpKSxlPXUocy5XZShYU3QpLDgpLGUmJihlLmEqPXIsZS5iKj1yKX1mdW5jdGlvbiBNd24odCxlLG4scixzKXt2YXIgbyxoLGQsdyxrLF8sTSxCO2ZvcihoPW5ldyBTKHQuYik7aC5hPGguYy5jLmxlbmd0aDspZm9yKG89dShRKGgpLDI5KSxCPXNEKG8uYSksaz1CLF89MCxNPWsubGVuZ3RoO188TTsrK18pc3dpdGNoKHc9a1tfXSx1KEsodywoeGUoKSxkdSkpLDE2MykuZyl7Y2FzZSAxOnJ2bih3KSxMbyh3LGUpLHRzZSh3LCEwLHIpO2JyZWFrO2Nhc2UgMzpxMm4odyksTG8odyxuKSx0c2UodywhMSxzKX1mb3IoZD1uZXcgeGEodC5iLDApO2QuYjxkLmQuZ2MoKTspKFpuKGQuYjxkLmQuZ2MoKSksdShkLmQuWGIoZC5jPWQuYisrKSwyOSkpLmEuYy5sZW5ndGg9PTAmJkRsKGQpfWZ1bmN0aW9uIER3bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3O2lmKG49ZS5IaCh0LmEpLG4mJih3PWpyKEpmKCghbi5iJiYobi5iPW5ldyBBbCgobG4oKSxKYSkscGMsbikpLG4uYiksTjh0KSksdyE9bnVsbCkpe2ZvcihyPW5ldyBsZSxvPXB5KHcsIlxcdyIpLGg9MCxkPW8ubGVuZ3RoO2g8ZDsrK2gpcz1vW2hdLHVuKHMsIiMjb3RoZXIiKT91ZShyLCIhIyMiK2tfKHQsemwoZS5IaigpKSkpOnVuKHMsIiMjbG9jYWwiKT9yLmNbci5jLmxlbmd0aF09bnVsbDp1bihzLHRPKT91ZShyLGtfKHQsemwoZS5IaigpKSkpOnIuY1tyLmMubGVuZ3RoXT1zO3JldHVybiByfXJldHVybiBwbigpLHBuKCksdW99ZnVuY3Rpb24gSXduKHQsZSl7dmFyIG4scixzLG87cmV0dXJuIG49bmV3IEp1LHI9dSgkbCh4dShuZXcga24obnVsbCxuZXcgVG4odC5mLDE2KSksbiksWW0obmV3IFl0LG5ldyBNaSxuZXcgYmksbmV3IGRuLHV0KG90KHdsLDEpLG9lLDEzMiwwLFsoTjEoKSxMeSksWWxdKSkpLDIxKSxzPXIuZ2MoKSxyPXUoJGwoeHUobmV3IGtuKG51bGwsbmV3IFRuKGUuZiwxNikpLG4pLFltKG5ldyBZdCxuZXcgTWksbmV3IGJpLG5ldyBkbix1dChvdCh3bCwxKSxvZSwxMzIsMCxbTHksWWxdKSkpLDIxKSxvPXIuZ2MoKSxzPXM9PTE/MTowLG89bz09MT8xOjAsczxvPy0xOnM9PW8/MDoxfWZ1bmN0aW9uIE93bih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssXyxNLEI7Zm9yKGQ9dC5pLHM9QmUoRmUoSyhkLCh4ZSgpLCR5KSkpKSxfPTAscj0wLGs9bmV3IFModC5nKTtrLmE8ay5jLmMubGVuZ3RoOyl3PXUoUShrKSwxNyksaD1XYSh3KSxvPWgmJnMmJkJlKEZlKEsodyxCMikpKSxCPXcuZC5pLGgmJm8/KytyOmgmJiFvPysrXzokYShCKS5lPT1kPysrcjorK187Zm9yKG49bmV3IFModC5lKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoUShuKSwxNyksaD1XYShlKSxvPWgmJnMmJkJlKEZlKEsoZSxCMikpKSxNPWUuYy5pLGgmJm8/KytfOmgmJiFvPysrcjokYShNKS5lPT1kPysrXzorK3I7cmV0dXJuIF8tcn1mdW5jdGlvbiBrNCh0LGUsbixyKXt0aGlzLmU9dCx0aGlzLms9dShLKHQsKGFlKCksWDQpKSwzMDQpLHRoaXMuZz1OdChvMCxHZywxMCxlLDAsMSksdGhpcy5iPU50KHdhLHJlLDMzMyxlLDcsMSksdGhpcy5hPU50KG8wLEdnLDEwLGUsMCwxKSx0aGlzLmQ9TnQod2EscmUsMzMzLGUsNywxKSx0aGlzLmo9TnQobzAsR2csMTAsZSwwLDEpLHRoaXMuaT1OdCh3YSxyZSwzMzMsZSw3LDEpLHRoaXMucD1OdCh3YSxyZSwzMzMsZSw3LDEpLHRoaXMubj1OdChXcyxyZSw0NzYsZSw4LDEpLHlNKHRoaXMubiwoRm4oKSwhMSkpLHRoaXMuZj1OdChXcyxyZSw0NzYsZSw4LDEpLHlNKHRoaXMuZiwhMCksdGhpcy5vPW4sdGhpcy5jPXJ9ZnVuY3Rpb24gTnVlKHQsZSl7dmFyIG4scixzLG8saCxkO2lmKCFlLmRjKCkpaWYodShlLlhiKDApLDI4NikuZD09KHJ4KCksT3kpKWgxbih0LGUpO2Vsc2UgZm9yKHI9ZS5LYygpO3IuT2IoKTspe3N3aXRjaChuPXUoci5QYigpLDI4Niksbi5kLmcpe2Nhc2UgNTpkNyh0LG4seGxuKHQsbikpO2JyZWFrO2Nhc2UgMDpkNyh0LG4sKGg9bi5mLW4uYysxLGQ9KGgtMSkvMnwwLG4uYytkKSk7YnJlYWs7Y2FzZSA0OmQ3KHQsbixQYW4odCxuKSk7YnJlYWs7Y2FzZSAyOmFpZShuKSxkNyh0LG4sKG89ZDR0KG4pLG8/bi5jOm4uZikpO2JyZWFrO2Nhc2UgMTphaWUobiksZDcodCxuLChzPWQ0dChuKSxzP24uZjpuLmMpKX1jMG4obi5hKX19ZnVuY3Rpb24gTnduKHQsZSl7dmFyIG4scixzLG8saCxkLHc7aWYoIWUuZSl7Zm9yKGUuZT0hMCxyPWUuZC5hLmVjKCkuS2MoKTtyLk9iKCk7KXtpZihuPXUoci5QYigpLDE3KSxlLm8mJmUuZC5hLmdjKCk8PTEpe2g9ZS5hLmMsZD1lLmEuYytlLmEuYix3PW5ldyBSZShoKyhkLWgpLzIsZS5iKSxhaSh1KGUuZC5hLmVjKCkuS2MoKS5QYigpLDE3KS5hLHcpO2NvbnRpbnVlfWlmKHM9dSh0cihlLmMsbiksNDU5KSxzLmJ8fHMuYyl7dnduKHQsbixlKTtjb250aW51ZX1vPXQuZD09KFo4KCksRFMpJiYocy5kfHxzLmUpJiZBcG4odCxlKSYmZS5kLmEuZ2MoKTw9MSxvP3Q0bihuLGUpOlB2bih0LG4sZSl9ZS5rJiZfYShlLmQsbmV3IFQzKX19ZnVuY3Rpb24gVjV0KHQsZSxuLHIscyxvKXt2YXIgaCxkLHcsayxfLE0sQixxLEcsVyxaLGJ0LE10LFN0O2ZvcihCPW8sZD0ocitzKS8yK0IsWj1uKmIuTWF0aC5jb3MoZCksYnQ9bipiLk1hdGguc2luKGQpLE10PVotZS5nLzIsU3Q9YnQtZS5mLzIsQ3UoZSxNdCksU3UoZSxTdCksTT10LmEuamcoZSksVz0yKmIuTWF0aC5hY29zKG4vbit0LmMpLFc8cy1yPyhxPVcvTSxoPShyK3MtVykvMik6KHE9KHMtcikvTSxoPXIpLEc9Z3koZSksdC5lJiYodC5lLmtnKHQuZCksdC5lLmxnKEcpKSxrPW5ldyBTKEcpO2suYTxrLmMuYy5sZW5ndGg7KXc9dShRKGspLDMzKSxfPXQuYS5qZyh3KSxWNXQodCx3LG4rdC5jLGgsaCtxKl8sbyksaCs9cSpffWZ1bmN0aW9uIFB3bih0LGUsbil7dmFyIHI7c3dpdGNoKHI9bi5xLmdldE1vbnRoKCksZSl7Y2FzZSA1OllyKHQsdXQob3QoTGUsMSkscmUsMiw2LFsiSiIsIkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl0pW3JdKTticmVhaztjYXNlIDQ6WXIodCx1dChvdChMZSwxKSxyZSwyLDYsW3FhdCxIYXQsVmF0LEdhdCx1eCxVYXQsV2F0LEthdCxZYXQsWGF0LFFhdCxaYXRdKVtyXSk7YnJlYWs7Y2FzZSAzOllyKHQsdXQob3QoTGUsMSkscmUsMiw2LFsiSmFuIiwiRmViIiwiTWFyIiwiQXByIix1eCwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0pW3JdKTticmVhaztkZWZhdWx0OlhkKHQscisxLGUpfX1mdW5jdGlvbiBsYXQodCxlKXt2YXIgbixyLHMsbyxoO2lmKG1yKGUsIk5ldHdvcmsgc2ltcGxleCIsMSksdC5lLmEuYy5sZW5ndGg8MSl7b3IoZSk7cmV0dXJufWZvcihvPW5ldyBTKHQuZS5hKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoUShvKSwxMjEpLHMuZT0wO2ZvcihoPXQuZS5hLmMubGVuZ3RoPj00MCxoJiZrbW4odCksQ3luKHQpLHN2bih0KSxuPVdyZSh0KSxyPTA7biYmcjx0LmY7KVJ3bih0LG4saWJuKHQsbikpLG49V3JlKHQpLCsrcjtoJiZBZG4odCksdC5hP3dibih0LEF1ZSh0KSk6QXVlKHQpLHQuYj1udWxsLHQuZD1udWxsLHQucD1udWxsLHQuYz1udWxsLHQuZz1udWxsLHQuaT1udWxsLHQubj1udWxsLHQubz1udWxsLG9yKGUpfWZ1bmN0aW9uIEZ3bih0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssXyxNLEI7Zm9yKHc9bmV3IFJlKG4sciksZmEodyx1KEsoZSwoVXAoKSxsUykpLDgpKSxCPW5ldyBTKGUuZSk7Qi5hPEIuYy5jLmxlbmd0aDspTT11KFEoQiksMTQ0KSxGaShNLmQsdyksdWUodC5lLE0pO2ZvcihkPW5ldyBTKGUuYyk7ZC5hPGQuYy5jLmxlbmd0aDspe2ZvcihoPXUoUShkKSwyODIpLG89bmV3IFMoaC5hKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoUShvKSw1NTkpLEZpKHMuZCx3KTt1ZSh0LmMsaCl9Zm9yKF89bmV3IFMoZS5kKTtfLmE8Xy5jLmMubGVuZ3RoOylrPXUoUShfKSw0NDcpLEZpKGsuZCx3KSx1ZSh0LmQsayl9ZnVuY3Rpb24gRzV0KHQsZSl7dmFyIG4scixzLG8saCxkLHcsaztmb3Iodz1uZXcgUyhlLmopO3cuYTx3LmMuYy5sZW5ndGg7KWZvcihkPXUoUSh3KSwxMSkscz1uZXcgTTEoZC5iKTtKbyhzLmEpfHxKbyhzLmIpOylyPXUoSm8ocy5hKT9RKHMuYSk6UShzLmIpLDE3KSxuPXIuYz09ZD9yLmQ6ci5jLG89bi5pLGUhPW8mJihrPXUoSyhyLCh4ZSgpLGJFKSksMTkpLmEsazwwJiYoaz0wKSxoPW8ucCx0LmJbaF09PTAmJihyLmQ9PW4/KHQuYVtoXS09aysxLHQuYVtoXTw9MCYmdC5jW2hdPjAmJmFpKHQuZixvKSk6KHQuY1toXS09aysxLHQuY1toXTw9MCYmdC5hW2hdPjAmJmFpKHQuZSxvKSkpKX1mdW5jdGlvbiBCd24odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrO2ZvcihkPW5ldyBEcCh1KERyKG5ldyB6byksNjIpKSxrPU5zLG49bmV3IFModC5kKTtuLmE8bi5jLmMubGVuZ3RoOyl7Zm9yKGU9dShRKG4pLDIyMiksaz1lLmMuYztkLmEuYyE9MCYmKHc9dShoZW4ocGFuKGQuYSkpLDIyMiksdy5jLmMrdy5jLmI8ayk7KURfKGQuYSx3KSE9bnVsbDtmb3IoaD0ocz1uZXcgdl8obmV3IGdfKG5ldyB5KGQuYSkuYSkuYiksbmV3IGcocykpO21NKGguYS5hKTspbz0ocj13aihoLmEpLHUoci5jZCgpLDIyMikpLGFpKG8uYixlKSxhaShlLmIsbyk7cHooZC5hLGUsKEZuKCksTzIpKT09bnVsbH19ZnVuY3Rpb24gUHVlKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxfLE07Zm9yKG89bmV3IEpjKGUuYy5sZW5ndGgpLGs9bmV3IFMoZSk7ay5hPGsuYy5jLmxlbmd0aDspaD11KFEoayksMTApLHVlKG8sdC5iW2guYy5wXVtoLnBdKTtmb3IoVXluKHQsbyxuKSxNPW51bGw7TT1XM24obyk7KUJtbih0LHUoTS5hLDIzMyksdShNLmIsMjMzKSxvKTtmb3IoZS5jPU50KFFuLE1lLDEsMCw1LDEpLHM9bmV3IFMobyk7cy5hPHMuYy5jLmxlbmd0aDspZm9yKHI9dShRKHMpLDIzMyksZD1yLmQsdz0wLF89ZC5sZW5ndGg7dzxfOysrdyloPWRbd10sZS5jW2UuYy5sZW5ndGhdPWgsdC5hW2guYy5wXVtoLnBdLmE9VDEoci5nLHIuZFswXSkuYX1mdW5jdGlvbiBVNXQodCxlKXt2YXIgbixyLHMsbztpZigwPChfdCh0LDE0KT91KHQsMTQpLmdjKCk6TjAodC5LYygpKSkpe2lmKHM9ZSwxPHMpe2ZvcigtLXMsbz1uZXcgUlEscj10LktjKCk7ci5PYigpOyluPXUoci5QYigpLDg2KSxvPUkxKHV0KG90KCQxLDEpLE1lLDIwLDAsW28sbmV3IFNwKG4pXSkpO3JldHVybiBVNXQobyxzKX1pZihzPDApe2ZvcihvPW5ldyBqUSxyPXQuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksODYpLG89STEodXQob3QoJDEsMSksTWUsMjAsMCxbbyxuZXcgU3AobildKSk7aWYoMDwoX3QobywxNCk/dShvLDE0KS5nYygpOk4wKG8uS2MoKSkpKXJldHVybiBVNXQobyxzKX19cmV0dXJuIHUobGoodC5LYygpKSw4Nil9ZnVuY3Rpb24gYmwoKXtibD1YLEFFPW5ldyBxMygiREVGQVVMVF9NSU5JTVVNX1NJWkUiLDApLGlOPW5ldyBxMygiTUlOSU1VTV9TSVpFX0FDQ09VTlRTX0ZPUl9QQURESU5HIiwxKSxHRz1uZXcgcTMoIkNPTVBVVEVfUEFERElORyIsMiksZUE9bmV3IHEzKCJPVVRTSURFX05PREVfTEFCRUxTX09WRVJIQU5HIiwzKSxVRz1uZXcgcTMoIlBPUlRTX09WRVJIQU5HIiw0KSxLRz1uZXcgcTMoIlVOSUZPUk1fUE9SVF9TUEFDSU5HIiw1KSxXRz1uZXcgcTMoIlNQQUNFX0VGRklDSUVOVF9QT1JUX0xBQkVMUyIsNiksbWZ0PW5ldyBxMygiRk9SQ0VfVEFCVUxBUl9OT0RFX0xBQkVMUyIsNyksck49bmV3IHEzKCJBU1lNTUVUUklDQUwiLDgpfWZ1bmN0aW9uIGhhdCh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGs7aWYoZSl7aWYobj0obz1lLlRnKCksbz96bChvKS5OaCgpLkpoKG8pOm51bGwpLG4pe2Zvcih2Mih0LGUsbikscz1lLlRnKCksdz0wLGs9KHMuaT09bnVsbCYmYmQocykscy5pKS5sZW5ndGg7dzxrOysrdylkPShyPShzLmk9PW51bGwmJmJkKHMpLHMuaSksdz49MCYmdzxyLmxlbmd0aD9yW3ddOm51bGwpLGQuSWooKSYmIWQuSmooKSYmKF90KGQsMzIyKT9XaG4odCx1KGQsMzQpLGUsbik6KGg9dShkLDE4KSxoLkJiJnljJiZyZG4odCxoLGUsbikpKTtlLmtoKCkmJnUobiw0OSkudmgodShlLDQ5KS5xaCgpKX1yZXR1cm4gbn1lbHNlIHJldHVybiBudWxsfWZ1bmN0aW9uIFJ3bih0LGUsbil7dmFyIHIscyxvO2lmKCFlLmYpdGhyb3cgbnQobmV3IFBuKCJHaXZlbiBsZWF2ZSBlZGdlIGlzIG5vIHRyZWUgZWRnZS4iKSk7aWYobi5mKXRocm93IG50KG5ldyBQbigiR2l2ZW4gZW50ZXIgZWRnZSBpcyBhIHRyZWUgZWRnZSBhbHJlYWR5LiIpKTtmb3IoZS5mPSExLHUydCh0LnAsZSksbi5mPSEwLFZzKHQucCxuKSxyPW4uZS5lLW4uZC5lLW4uYSxxc3QodCxuLmUsZSl8fChyPS1yKSxvPW5ldyBTKHQuZS5hKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoUShvKSwxMjEpLHFzdCh0LHMsZSl8fChzLmUrPXIpO3Quaj0xLFBUKHQuYyksWDR0KHQsdShRKG5ldyBTKHQuZS5hKSksMTIxKSksSGxlKHQpfWZ1bmN0aW9uIEZ1ZSh0LGUpe3ZhciBuLHIscyxvLGgsZDtpZihkPXUoSyhlLCh4ZSgpLHdzKSksOTgpLGQ9PSh2YSgpLGgwKXx8ZD09S2MpZm9yKHM9bmV3IFJlKGUuZi5hK2UuZC5iK2UuZC5jLGUuZi5iK2UuZC5kK2UuZC5hKS5iLGg9bmV3IFModC5hKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoUShoKSwxMCksby5rPT0oR24oKSxJcykmJihuPXUoSyhvLChhZSgpLGdjKSksNjEpLCEobiE9KGJlKCksSG4pJiZuIT1CbikmJihyPVp0KHZlKEsobyxJdykpKSxkPT1oMCYmKHIqPXMpLG8ubi5iPXItdShLKG8sUHcpLDgpLmIsZnoobywhMSwhMCkpKX1mdW5jdGlvbiBCdWUodCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLF8sTSxCLHE7aWYocm9uKHQsZSxuKSxvPWVbbl0scT1yPyhiZSgpLEJuKTooYmUoKSxIbiksUlhlKGUubGVuZ3RoLG4scikpe2ZvcihzPWVbcj9uLTE6bisxXSxibXQodCxzLHI/KGhvKCksc3UpOihobygpLGFsKSksdz1vLF89MCxCPXcubGVuZ3RoO188QjsrK18paD13W19dLFAzdCh0LGgscSk7Zm9yKGJtdCh0LG8scj8oaG8oKSxhbCk6KGhvKCksc3UpKSxkPXMsaz0wLE09ZC5sZW5ndGg7azxNOysrayloPWRba10saC5lfHxQM3QodCxoLEhEKHEpKX1lbHNlIGZvcihkPW8saz0wLE09ZC5sZW5ndGg7azxNOysrayloPWRba10sUDN0KHQsaCxxKTtyZXR1cm4hMX1mdW5jdGlvbiBqd24odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLF87dz1yYyhlLG4pLChuPT0oYmUoKSx5cil8fG49PUJuKSYmKHc9X3QodywxNTIpP1Y2KHUodywxNTIpKTpfdCh3LDEzMSk/dSh3LDEzMSkuYTpfdCh3LDU0KT9uZXcgbXYodyk6bmV3IE1tKHcpKSxoPSExO2RvIGZvcihzPSExLG89MDtvPHcuZ2MoKS0xO28rKylrPXUody5YYihvKSwxMSksZD11KHcuWGIobysxKSwxMSksYjBuKHQsayxkLHIpJiYoaD0hMCxFcnQodC5hLHUody5YYihvKSwxMSksdSh3LlhiKG8rMSksMTEpKSxfPXUody5YYihvKzEpLDExKSx3Ll9jKG8rMSx1KHcuWGIobyksMTEpKSx3Ll9jKG8sXykscz0hMCk7d2hpbGUocyk7cmV0dXJuIGh9ZnVuY3Rpb24gJHduKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxfLE0sQixxLEc7aWYoU2wodC5lKSl7aWYoZSE9biYmKHM9dSh0LmcsMTE5KSxxPXNbbl0saD1xLmFrKCksRzAodC5lLGgpKSl7Zm9yKEc9aHUodC5lLlRnKCksaCksdz0tMSxkPS0xLHI9MCxrPTAsTT1lPm4/ZTpuO2s8PU07KytrKWs9PW4/ZD1yKys6KG89c1trXSxfPUcucmwoby5haygpKSxrPT1lJiYodz1rPT1NJiYhXz9yLTE6ciksXyYmKytyKTtyZXR1cm4gQj11KHRDKHQsZSxuKSw3MiksZCE9dyYmVWsodCxuZXcgZ0QodC5lLDcsaCxkZShkKSxxLmRkKCksdykpLEJ9fWVsc2UgcmV0dXJuIHUoVnN0KHQsZSxuKSw3Mik7cmV0dXJuIHUodEModCxlLG4pLDcyKX1mdW5jdGlvbiB6d24odCxlKXt2YXIgbixyLHMsbyxoLGQsdztmb3IobXIoZSwiUG9ydCBvcmRlciBwcm9jZXNzaW5nIiwxKSx3PXUoSyh0LCh4ZSgpLGNfdCkpLDQyMSkscj1uZXcgUyh0LmIpO3IuYTxyLmMuYy5sZW5ndGg7KWZvcihuPXUoUShyKSwyOSksbz1uZXcgUyhuLmEpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShRKG8pLDEwKSxoPXUoSyhzLHdzKSw5OCksZD1zLmosaD09KHZhKCksVTIpfHxoPT1oMHx8aD09S2M/KHBuKCksYWEoZCxnOXQpKTpoIT1VMSYmaCE9a2ImJihwbigpLGFhKGQsR2JlKSxuZm4oZCksdz09KHlEKCksYmh0KSYmYWEoZCxWYmUpKSxzLmk9ITAsVzR0KHMpO29yKGUpfWZ1bmN0aW9uIHF3bih0KXt2YXIgZSxuLHIscyxvLGgsZCx3O2Zvcih3PW5ldyBBcixlPW5ldyBVdHQsaD10LktjKCk7aC5PYigpOylzPXUoaC5QYigpLDEwKSxkPUl2KGJNKG5ldyBLYixzKSxlKSxsdSh3LmYscyxkKTtmb3Iobz10LktjKCk7by5PYigpOylmb3Iocz11KG8uUGIoKSwxMCkscj1uZXcgYXIobHIoJHMocykuYS5LYygpLG5ldyBIKSk7VnIocik7KW49dShJcihyKSwxNyksIVdhKG4pJiZ5ZihsZih1ZihjZihoZihuZXcgU2gsYi5NYXRoLm1heCgxLHUoSyhuLCh4ZSgpLHVfdCkpLDE5KS5hKSksMSksdSh0cih3LG4uYy5pKSwxMjEpKSx1KHRyKHcsbi5kLmkpLDEyMSkpKTtyZXR1cm4gZX1mdW5jdGlvbiBSdWUoKXtSdWU9WCxMbWU9RWkobmV3IFpzLChZYSgpLEdjKSwoY28oKSxKRXQpKSxLX3Q9RWkobmV3IFpzLGZ1LGZWKSxEbWU9ZWwoRWkobmV3IFpzLGZ1LHlWKSxqbyxtViksQW1lPWVsKEVpKEVpKG5ldyBacyxmdSxLRXQpLEdjLFlFdCksam8sWEV0KSxJbWU9YXcoYXcoT1IoZWwoRWkobmV3IFpzLExkLFRWKSxqbyxFViksR2MpLGtWKSxfViksTW1lPWVsKG5ldyBacyxqbyx0OXQpLENtZT1lbChFaShFaShFaShuZXcgWnMsZmIsZ1YpLEdjLGJWKSxHYyxKNyksam8scFYpLFNtZT1lbChFaShFaShuZXcgWnMsR2MsSjcpLEdjLGhWKSxqbyxsVil9ZnVuY3Rpb24gSHduKHQsZSxuLHIscyxvKXt2YXIgaCxkLHcsayxfLE0sQjtmb3Ioaz1KbmUoZSktSm5lKHQpLGg9QWFlKGUsayksdz1jdSgwLDAsMCk7az49MCYmKGQ9VmZuKHQsaCksIShkJiYoazwyMj93Lmx8PTE8PGs6azw0ND93Lm18PTE8PGstMjI6dy5ofD0xPDxrLTQ0LHQubD09MCYmdC5tPT0wJiZ0Lmg9PTApKSk7KV89aC5tLE09aC5oLEI9aC5sLGguaD1NPj4+MSxoLm09Xz4+PjF8KE0mMSk8PDIxLGgubD1CPj4+MXwoXyYxKTw8MjEsLS1rO3JldHVybiBuJiZtaXQodyksbyYmKHI/KHViPVc4KHQpLHMmJih1Yj1QbmUodWIsKEk4KCksWDh0KSkpKTp1Yj1jdSh0LmwsdC5tLHQuaCkpLHd9ZnVuY3Rpb24gVnduKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxfLE07Zm9yKGs9dC5lW2UuYy5wXVtlLnBdKzEsdz1lLmMuYS5jLmxlbmd0aCsxLGQ9bmV3IFModC5hKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Zm9yKGg9dShRKGQpLDExKSxNPTAsbz0wLHM9anAoSTEodXQob3QoJDEsMSksTWUsMjAsMCxbbmV3IHNhKGgpLG5ldyBDcihoKV0pKSk7VnIocyk7KXI9dShJcihzKSwxMSksci5pLmM9PWUuYyYmKE0rPUlYZSh0LHIuaSkrMSwrK28pO249TS9vLF89aC5qLF89PShiZSgpLEhuKT9uPGs/dC5mW2gucF09dC5jLW46dC5mW2gucF09dC5iKyh3LW4pOl89PUJuJiYobjxrP3QuZltoLnBdPXQuYituOnQuZltoLnBdPXQuYy0ody1uKSl9fWZ1bmN0aW9uIEdsKHQsZSxuKXt2YXIgcixzLG8saCxkO2lmKHQ9PW51bGwpdGhyb3cgbnQobmV3IGNkKE11KSk7Zm9yKG89dC5sZW5ndGgsaD1vPjAmJigkcigwLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoMCk9PTQ1fHwoJHIoMCx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KDApPT00MykpPzE6MCxyPWg7cjxvO3IrKylpZihBaWUoKCRyKHIsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChyKSkpPT0tMSl0aHJvdyBudChuZXcgY2QodncrdCsnIicpKTtpZihkPXBhcnNlSW50KHQsMTApLHM9ZDxlLGlzTmFOKGQpKXRocm93IG50KG5ldyBjZCh2dyt0KyciJykpO2lmKHN8fGQ+bil0aHJvdyBudChuZXcgY2QodncrdCsnIicpKTtyZXR1cm4gZH1mdW5jdGlvbiBHd24odCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKGg9bmV3IGNzLG89bmV3IFModC5hKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoUShvKSwxMTIpLG5NKHMscy5mLmMubGVuZ3RoKSx4VChzLHMuay5jLmxlbmd0aCkscy5pPT0wJiYocy5vPTAsa3MoaCxzLGguYy5iLGguYykpO2Zvcig7aC5iIT0wOylmb3Iocz11KGguYj09MD9udWxsOihabihoLmIhPTApLGZoKGgsaC5hLmEpKSwxMTIpLHI9cy5vKzEsbj1uZXcgUyhzLmYpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShRKG4pLDEyOSksZD1lLmEsWUIoZCxiLk1hdGgubWF4KGQubyxyKSkseFQoZCxkLmktMSksZC5pPT0wJiZrcyhoLGQsaC5jLmIsaC5jKX1mdW5jdGlvbiBVd24odCl7dmFyIGUsbixyLHMsbyxoLGQsdztmb3IoaD1uZXcgUyh0KTtoLmE8aC5jLmMubGVuZ3RoOyl7Zm9yKG89dShRKGgpLDc5KSxyPVJvKHUoQXQoKCFvLmImJihvLmI9bmV3IEVuKHZyLG8sNCw3KSksby5iKSwwKSw4MikpLGQ9ci5pLHc9ci5qLHM9dShBdCgoIW8uYSYmKG8uYT1uZXcgaGUodXMsbyw2LDYpKSxvLmEpLDApLDIwMiksb2oocyxzLmorZCxzLmsrdyksYWoocyxzLmIrZCxzLmMrdyksbj1uZXcgbnIoKCFzLmEmJihzLmE9bmV3IEJzKFdoLHMsNSkpLHMuYSkpO24uZSE9bi5pLmdjKCk7KWU9dShkcihuKSw0NjkpLEpidChlLGUuYStkLGUuYit3KTtyeXQodSh6ZShvLChkaSgpLHM1KSksNzQpLGQsdyl9fWZ1bmN0aW9uIHk3KHQpe3ZhciBlO3N3aXRjaCh0KXtjYXNlIDEwMDpyZXR1cm4gQzQoaVMsITApO2Nhc2UgNjg6cmV0dXJuIEM0KGlTLCExKTtjYXNlIDExOTpyZXR1cm4gQzQodXV0LCEwKTtjYXNlIDg3OnJldHVybiBDNCh1dXQsITEpO2Nhc2UgMTE1OnJldHVybiBDNChsdXQsITApO2Nhc2UgODM6cmV0dXJuIEM0KGx1dCwhMSk7Y2FzZSA5OTpyZXR1cm4gQzQoaHV0LCEwKTtjYXNlIDY3OnJldHVybiBDNChodXQsITEpO2Nhc2UgMTA1OnJldHVybiBDNChmdXQsITApO2Nhc2UgNzM6cmV0dXJuIEM0KGZ1dCwhMSk7ZGVmYXVsdDp0aHJvdyBudChuZXcgWm8oKGU9dCxaMGUrZS50b1N0cmluZygxNikpKSl9fWZ1bmN0aW9uIFd3bih0KXt2YXIgZSxuLHIscyxvO3N3aXRjaChzPXUoUGUodC5hLDApLDEwKSxlPW5ldyBIMCh0KSx1ZSh0LmEsZSksZS5vLmE9Yi5NYXRoLm1heCgxLHMuby5hKSxlLm8uYj1iLk1hdGgubWF4KDEscy5vLmIpLGUubi5hPXMubi5hLGUubi5iPXMubi5iLHUoSyhzLChhZSgpLGdjKSksNjEpLmcpe2Nhc2UgNDplLm4uYSs9MjticmVhaztjYXNlIDE6ZS5uLmIrPTI7YnJlYWs7Y2FzZSAyOmUubi5hLT0yO2JyZWFrO2Nhc2UgMzplLm4uYi09Mn1yZXR1cm4gcj1uZXcgTmMsdGMocixlKSxuPW5ldyB6dixvPXUoUGUocy5qLDApLDExKSxCYShuLG8pLHBhKG4sciksRmkoS2Yoci5uKSxvLm4pLEZpKEtmKHIuYSksby5hKSxlfWZ1bmN0aW9uIGp1ZSh0LGUsbixyLHMpe24mJighcnx8KHQuYy10LmImdC5hLmxlbmd0aC0xKT4xKSYmZT09MSYmdSh0LmFbdC5iXSwxMCkuaz09KEduKCksUGwpP294KHUodC5hW3QuYl0sMTApLChWbCgpLHUwKSk6ciYmKCFufHwodC5jLXQuYiZ0LmEubGVuZ3RoLTEpPjEpJiZlPT0xJiZ1KHQuYVt0LmMtMSZ0LmEubGVuZ3RoLTFdLDEwKS5rPT0oR24oKSxQbCk/b3godSh0LmFbdC5jLTEmdC5hLmxlbmd0aC0xXSwxMCksKFZsKCkseWIpKToodC5jLXQuYiZ0LmEubGVuZ3RoLTEpPT0yPyhveCh1KEtfKHQpLDEwKSwoVmwoKSx1MCkpLG94KHUoS18odCksMTApLHliKSk6amJuKHQscyksdG10KHQpfWZ1bmN0aW9uIEt3bih0LGUsbil7dmFyIHIscyxvLGgsZDtmb3Iobz0wLHM9bmV3IG5yKCghdC5hJiYodC5hPW5ldyBoZShkcyx0LDEwLDExKSksdC5hKSk7cy5lIT1zLmkuZ2MoKTspcj11KGRyKHMpLDMzKSxoPSIiLCghci5uJiYoci5uPW5ldyBoZShZbyxyLDEsNykpLHIubikuaT09MHx8KGg9dShBdCgoIXIubiYmKHIubj1uZXcgaGUoWW8sciwxLDcpKSxyLm4pLDApLDEzNykuYSksZD1uZXcga2l0KG8rKyxlLGgpLEJvKGQsciksZWUoZCwobWMoKSxqUyksciksZC5lLmI9ci5qK3IuZi8yLGQuZi5hPWIuTWF0aC5tYXgoci5nLDEpLGQuZS5hPXIuaStyLmcvMixkLmYuYj1iLk1hdGgubWF4KHIuZiwxKSxhaShlLmIsZCksbHUobi5mLHIsZCl9ZnVuY3Rpb24gWXduKHQpe3ZhciBlLG4scixzLG87cj11KEsodCwoYWUoKSxJaSkpLDMzKSxvPXUoemUociwoeGUoKSxSMikpLDE3NCkuSGMoKE5sKCksVzIpKSx0LmV8fChzPXUoSyh0LFdjKSwyMSksZT1uZXcgUmUodC5mLmErdC5kLmIrdC5kLmMsdC5mLmIrdC5kLmQrdC5kLmEpLHMuSGMoKGdvKCkseWgpKT8oRW8ocix3cywodmEoKSxLYykpLGd3KHIsZS5hLGUuYiwhMSwhMCkpOkJlKEZlKHplKHIsdGh0KSkpfHxndyhyLGUuYSxlLmIsITAsITApKSxvP0VvKHIsUjIsb24oVzIpKTpFbyhyLFIyLChuPXUoV2YodEEpLDkpLG5ldyBvaChuLHUoZmYobixuLmxlbmd0aCksOSksMCkpKX1mdW5jdGlvbiBXNXQodCxlLG4pe3ZhciByLHMsbyxoO2lmKGVbMF0+PXQubGVuZ3RoKXJldHVybiBuLm89MCwhMDtzd2l0Y2goVGEodCxlWzBdKSl7Y2FzZSA0MzpzPTE7YnJlYWs7Y2FzZSA0NTpzPS0xO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG4ubz0wLCEwfWlmKCsrZVswXSxvPWVbMF0saD1ycSh0LGUpLGg9PTAmJmVbMF09PW8pcmV0dXJuITE7aWYoZVswXTx0Lmxlbmd0aCYmVGEodCxlWzBdKT09NTgpe2lmKHI9aCo2MCwrK2VbMF0sbz1lWzBdLGg9cnEodCxlKSxoPT0wJiZlWzBdPT1vKXJldHVybiExO3IrPWh9ZWxzZSByPWgscjwyNCYmZVswXS1vPD0yP3IqPTYwOnI9ciUxMDArKHIvMTAwfDApKjYwO3JldHVybiByKj1zLG4ubz0tciwhMH1mdW5jdGlvbiBYd24odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrO2ZvcihoPW5ldyBsZSxyPW5ldyBhcihscigkcyh0LmIpLmEuS2MoKSxuZXcgSCkpO1ZyKHIpOyluPXUoSXIociksMTcpLFdhKG4pJiZ1ZShoLG5ldyBDSnQobixodGUodCxuLmMpLGh0ZSh0LG4uZCkpKTtmb3Ioaz0obz1uZXcgbTEodC5lKS5hLnZjKCkuS2MoKSxuZXcgeTEobykpO2suYS5PYigpOylkPShlPXUoay5hLlBiKCksNDIpLHUoZS5kZCgpLDExMykpLGQuZC5wPTA7Zm9yKHc9KHM9bmV3IG0xKHQuZSkuYS52YygpLktjKCksbmV3IHkxKHMpKTt3LmEuT2IoKTspZD0oZT11KHcuYS5QYigpLDQyKSx1KGUuZGQoKSwxMTMpKSxkLmQucD09MCYmdWUodC5kLEx3bih0LGQpKX1mdW5jdGlvbiBRd24odCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKG89XzEodCkscz1uZXcgbnIoKCF0LmUmJih0LmU9bmV3IEVuKHJhLHQsNyw0KSksdC5lKSk7cy5lIT1zLmkuZ2MoKTspaWYocj11KGRyKHMpLDc5KSxkPVJvKHUoQXQoKCFyLmMmJihyLmM9bmV3IEVuKHZyLHIsNSw4KSksci5jKSwwKSw4MikpLCFabShkLG8pKXJldHVybiEwO2ZvcihuPW5ldyBucigoIXQuZCYmKHQuZD1uZXcgRW4ocmEsdCw4LDUpKSx0LmQpKTtuLmUhPW4uaS5nYygpOylpZihlPXUoZHIobiksNzkpLGg9Um8odShBdCgoIWUuYiYmKGUuYj1uZXcgRW4odnIsZSw0LDcpKSxlLmIpLDApLDgyKSksIVptKGgsbykpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gWnduKHQpe3ZhciBlLG4scixzLG8saCxkLHc7Zm9yKHc9bmV3IGp1LGU9c2kodCwwKSxkPW51bGwsbj11KGlpKGUpLDgpLHM9dShpaShlKSw4KTtlLmIhPWUuZC5jOylkPW4sbj1zLHM9dShpaShlKSw4KSxvPWllZShmYShuZXcgUmUoZC5hLGQuYiksbikpLGg9aWVlKGZhKG5ldyBSZShzLmEscy5iKSxuKSkscj0xMCxyPWIuTWF0aC5taW4ocixiLk1hdGguYWJzKG8uYStvLmIpLzIpLHI9Yi5NYXRoLm1pbihyLGIuTWF0aC5hYnMoaC5hK2guYikvMiksby5hPUtNKG8uYSkqcixvLmI9S00oby5iKSpyLGguYT1LTShoLmEpKnIsaC5iPUtNKGguYikqcixhaSh3LEZpKG8sbikpLGFpKHcsRmkoaCxuKSk7cmV0dXJuIHd9ZnVuY3Rpb24gVWwodCxlLG4scil7dmFyIHMsbyxoLGQsdztyZXR1cm4gaD10LmVoKCksdz10LlpnKCkscz1udWxsLHc/ZSYmIShjYXQodCxlLG4pLkJiJlFhKT8ocj16YSh3LlZrKCksdCxyKSx0LnVoKG51bGwpLHM9ZS5maCgpKTp3PW51bGw6KGgmJih3PWguZmgoKSksZSYmKHM9ZS5maCgpKSksdyE9cyYmdyYmdy5aayh0KSxkPXQuVmcoKSx0LlJnKGUsbiksdyE9cyYmcyYmcy5Zayh0KSx0LkxnKCkmJnQuTWcoKSYmKGgmJmQ+PTAmJmQhPW4mJihvPW5ldyBvYSh0LDEsZCxoLG51bGwpLHI/ci5FaShvKTpyPW8pLG4+PTAmJihvPW5ldyBvYSh0LDEsbixkPT1uP2g6bnVsbCxlKSxyP3IuRWkobyk6cj1vKSkscn1mdW5jdGlvbiAkdWUodCl7dmFyIGUsbixyO2lmKHQuYj09bnVsbCl7aWYocj1uZXcgX2csdC5pIT1udWxsJiYoeW8ocix0LmkpLHIuYSs9IjoiKSx0LmYmMjU2KXtmb3IodC5mJjI1NiYmdC5hIT1udWxsJiYoaG5uKHQuaSl8fChyLmErPSIvLyIpLHlvKHIsdC5hKSksdC5kIT1udWxsJiYoci5hKz0iLyIseW8ocix0LmQpKSx0LmYmMTYmJihyLmErPSIvIiksZT0wLG49dC5qLmxlbmd0aDtlPG47ZSsrKWUhPTAmJihyLmErPSIvIikseW8ocix0LmpbZV0pO3QuZyE9bnVsbCYmKHIuYSs9Ij8iLHlvKHIsdC5nKSl9ZWxzZSB5byhyLHQuYSk7dC5lIT1udWxsJiYoci5hKz0iIyIseW8ocix0LmUpKSx0LmI9ci5hfXJldHVybiB0LmJ9ZnVuY3Rpb24gSnduKHQsZSl7dmFyIG4scixzLG8saCxkO2ZvcihzPW5ldyBTKGUuYSk7cy5hPHMuYy5jLmxlbmd0aDspcj11KFEocyksMTApLG89SyhyLChhZSgpLElpKSksX3QobywxMSkmJihoPXUobywxMSksZD1zbGUoZSxyLGguby5hLGguby5iKSxoLm4uYT1kLmEsaC5uLmI9ZC5iLFVzKGgsdShLKHIsZ2MpLDYxKSkpO249bmV3IFJlKGUuZi5hK2UuZC5iK2UuZC5jLGUuZi5iK2UuZC5kK2UuZC5hKSx1KEsoZSwoYWUoKSxXYykpLDIxKS5IYygoZ28oKSx5aCkpPyhlZSh0LCh4ZSgpLHdzKSwodmEoKSxLYykpLHUoSygkYSh0KSxXYyksMjEpLkZjKGxFKSxxbGUodCxuLCExKSk6cWxlKHQsbiwhMCl9ZnVuY3Rpb24gdG1uKHQsZSxuKXt2YXIgcixzLG8saCxkLHc7aWYobXIobiwiTWluaW1pemUgQ3Jvc3NpbmdzICIrdC5hLDEpLHI9ZS5iLmMubGVuZ3RoPT0wfHwhalQoV2kobmV3IGtuKG51bGwsbmV3IFRuKGUuYiwxNikpLG5ldyB0ZShuZXcgeGspKSkuc2QoKFliKCksUTcpKSx3PWUuYi5jLmxlbmd0aD09MSYmdShQZShlLmIsMCksMjkpLmEuYy5sZW5ndGg9PTEsbz1HdChLKGUsKHhlKCksankpKSk9PT1HdCgoJDAoKSxucCkpLHJ8fHcmJiFvKXtvcihuKTtyZXR1cm59cz1YMm4odCxlKSxoPShkPXUoZTEocywwKSwyMTQpLGQuYy5SZigpP2QuYy5MZigpP25ldyBsJHQodCk6bmV3IGgkdCh0KTpuZXcgdSR0KHQpKSxRY24ocyxoKSxFdW4odCksb3Iobil9ZnVuY3Rpb24gZW1uKHQsZSxuLHIpe3ZhciBzLG8saCxkLHc7aWYodz1NcihJYShlMCxXZChNcihJYShlPT1udWxsPzA6SmkoZSksbjApKSwxNSkpKSxzPU1yKElhKGUwLFdkKE1yKElhKG49PW51bGw/MDpKaShuKSxuMCkpLDE1KSkpLGQ9Vl8odCxlLHcpLGg9SF8odCxuLHMpLGQmJnM9PWQuYSYmZGQobixkLmcpKXJldHVybiBuO2lmKGgmJiFyKXRocm93IG50KG5ldyBQbigia2V5IGFscmVhZHkgcHJlc2VudDogIituKSk7cmV0dXJuIGQmJnc0KHQsZCksaCYmdzQodCxoKSxvPW5ldyBYaihuLHMsZSx3KSxvSSh0LG8saCksaCYmKGguZT1udWxsLGguYz1udWxsKSxkJiYoZC5lPW51bGwsZC5jPW51bGwpLHpzZSh0KSxkP2QuZzpudWxsfWZ1bmN0aW9uIHp1ZSh0LGUsbil7dmFyIHIscyxvLGgsZDtmb3Iobz0wO288ZTtvKyspe2ZvcihyPTAsZD1vKzE7ZDxlO2QrKylyPVJhKFJhKElhKEdzKHRbb10scG8pLEdzKHRbZF0scG8pKSxHcyhuW28rZF0scG8pKSxHcyhNcihyKSxwbykpLG5bbytkXT1NcihyKSxyPXptKHIsMzIpO25bbytlXT1NcihyKX1mb3IoSW9uKG4sbixlPDwxKSxyPTAscz0wLGg9MDtzPGU7KytzLGgrKylyPVJhKFJhKElhKEdzKHRbc10scG8pLEdzKHRbc10scG8pKSxHcyhuW2hdLHBvKSksR3MoTXIocikscG8pKSxuW2hdPU1yKHIpLHI9em0ociwzMiksKytoLHI9UmEocixHcyhuW2hdLHBvKSksbltoXT1NcihyKSxyPXptKHIsMzIpO3JldHVybiBufWZ1bmN0aW9uIHF1ZSh0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssXztpZighXzgoZSkpe2Zvcih3PVp0KHZlKGl5KG4uYywoeGUoKSxDUykpKSksaz11KGl5KG4uYyxMTyksMTQyKSwhayYmKGs9bmV3IE1UKSxyPW4uYSxzPW51bGwsZD1lLktjKCk7ZC5PYigpOyloPXUoZC5QYigpLDExKSxfPTAscz8oXz13LF8rPXMuby5iKTpfPWsuZCxvPUl2KGJNKG5ldyBLYixoKSx0LmYpLEFpKHQuayxoLG8pLHlmKGxmKHVmKGNmKGhmKG5ldyBTaCwwKSxDcyhiLk1hdGguY2VpbChfKSkpLHIpLG8pKSxzPWgscj1vO3lmKGxmKHVmKGNmKGhmKG5ldyBTaCwwKSxDcyhiLk1hdGguY2VpbChrLmErcy5vLmIpKSksciksbi5kKSl9fWZ1bmN0aW9uIG5tbih0LGUsbixyLHMsbyxoLGQpe3ZhciB3LGssXyxNLEIscTtyZXR1cm4gcT0hMSxCPW8tbi5zLF89bi50LWUuZisoaz1FQyhuLEIsITEpLGsuYSksci5nK2Q+Qj8hMTooTT0odz1FQyhyLEIsITEpLHcuYSksXytkK008PWUuYiYmKGREKG4sby1uLnMpLG4uYz0hMCxkRChyLG8tbi5zKSxZRChyLG4ucyxuLnQrbi5kK2QpLHIuaz0hMCxzeXQobi5xLHIpLHE9ITAscyYmKFkkKGUsciksci5qPWUsdC5jLmxlbmd0aD5oJiYodEkoKFNuKGgsdC5jLmxlbmd0aCksdSh0LmNbaF0sMjAwKSksciksKFNuKGgsdC5jLmxlbmd0aCksdSh0LmNbaF0sMjAwKSkuYS5jLmxlbmd0aD09MCYmSWcodCxoKSkpKSxxKX1mdW5jdGlvbiBybW4odCxlKXt2YXIgbixyLHMsbyxoLGQ7aWYobXIoZSwiUGFydGl0aW9uIG1pZHByb2Nlc3NpbmciLDEpLHM9bmV3IEh2LHlzKFdpKG5ldyBrbihudWxsLG5ldyBUbih0LmEsMTYpKSxuZXcgJFkpLG5ldyBidihzKSkscy5kIT0wKXtmb3IoZD11KCRsKE9RdCgobz1zLmksbmV3IGtuKG51bGwsKG98fChzLmk9bmV3IEszKHMscy5jKSkpLk5jKCkpKSksYTIobmV3IGtlLG5ldyBuZSxuZXcgcGksdXQob3Qod2wsMSksb2UsMTMyLDAsWyhOMSgpLFlsKV0pKSksMTUpLHI9ZC5LYygpLG49dShyLlBiKCksMTkpO3IuT2IoKTspaD11KHIuUGIoKSwxOSksYTJuKHUoUGkocyxuKSwyMSksdShQaShzLGgpLDIxKSksbj1oO29yKGUpfX1mdW5jdGlvbiBIdWUodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLF87aWYoZS5wPT0wKXtmb3IoZS5wPTEsaD1uLGh8fChzPW5ldyBsZSxvPShyPXUoV2YoWmEpLDkpLG5ldyBvaChyLHUoZmYocixyLmxlbmd0aCksOSksMCkpLGg9bmV3IHlhKHMsbykpLHUoaC5hLDE1KS5GYyhlKSxlLms9PShHbigpLElzKSYmdShoLmIsMjEpLkZjKHUoSyhlLChhZSgpLGdjKSksNjEpKSx3PW5ldyBTKGUuaik7dy5hPHcuYy5jLmxlbmd0aDspZm9yKGQ9dShRKHcpLDExKSxfPWpwKEkxKHV0KG90KCQxLDEpLE1lLDIwLDAsW25ldyBzYShkKSxuZXcgQ3IoZCldKSkpO1ZyKF8pOylrPXUoSXIoXyksMTEpLEh1ZSh0LGsuaSxoKTtyZXR1cm4gaH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBtQyh0LGUpe3ZhciBuLHIscyxvLGg7aWYodC5BYil7aWYodC5BYil7aWYoaD10LkFiLmksaD4wKXtpZihzPXUodC5BYi5nLDE5MzQpLGU9PW51bGwpe2ZvcihvPTA7bzxoOysrbylpZihuPXNbb10sbi5kPT1udWxsKXJldHVybiBufWVsc2UgZm9yKG89MDtvPGg7KytvKWlmKG49c1tvXSx1bihlLG4uZCkpcmV0dXJuIG59fWVsc2UgaWYoZT09bnVsbCl7Zm9yKHI9bmV3IG5yKHQuQWIpO3IuZSE9ci5pLmdjKCk7KWlmKG49dShkcihyKSw1OTApLG4uZD09bnVsbClyZXR1cm4gbn1lbHNlIGZvcihyPW5ldyBucih0LkFiKTtyLmUhPXIuaS5nYygpOylpZihuPXUoZHIociksNTkwKSx1bihlLG4uZCkpcmV0dXJuIG59cmV0dXJuIG51bGx9ZnVuY3Rpb24gaW1uKHQsZSl7dmFyIG4scixzLG8saCxkLHcsaztpZihrPUZlKEsoZSwoaHcoKSxveWUpKSksaz09bnVsbHx8KEluKGspLGspKXtmb3IoTXBuKHQsZSkscz1uZXcgbGUsdz1zaShlLmIsMCk7dy5iIT13LmQuYzspaD11KGlpKHcpLDg2KSxuPWo0dCh0LGgsbnVsbCksbiYmKEJvKG4sZSkscy5jW3MuYy5sZW5ndGhdPW4pO2lmKHQuYT1udWxsLHQuYj1udWxsLHMuYy5sZW5ndGg+MSlmb3Iocj1uZXcgUyhzKTtyLmE8ci5jLmMubGVuZ3RoOylmb3Iobj11KFEociksMTM1KSxvPTAsZD1zaShuLmIsMCk7ZC5iIT1kLmQuYzspaD11KGlpKGQpLDg2KSxoLmc9bysrO3JldHVybiBzfXJldHVybiBMMSh1dChvdChwNm4sMSksZXh0LDEzNSwwLFtlXSkpfWZ1bmN0aW9uIHNtbih0LGUsbixyLHMpe3ZhciBvLGgsZCx3LGssXyxNLEIscSxHLFcsWixidCxNdCxTdCxqdDtxPVdpbih0LHB5dChlKSxzKSxKbXQocSxPMChzLENkKSksRT1udWxsLEc9cyxXPVBfKEcsVGRlKSxaPW5ldyBLJHQocSksQzBuKFouYSxXKSxidD1QXyhHLCJlbmRQb2ludCIpLE10PW5ldyBaJHQocSksXzBuKE10LmEsYnQpLFN0PVV2KEcsd0gpLGp0PW5ldyBlenQocSksZGRuKGp0LmEsU3QpLE09TzAocyxwOHQpLG89bmV3IGJHdCh0LHEpLFJRZShvLmEsby5iLE0pLEI9TzAocyxnOHQpLGg9bmV3IHZHdCh0LHEpLGpRZShoLmEsaC5iLEIpLGs9VXYocyx2OHQpLGQ9bmV3IHdHdChuLHEpLFFmbihkLmIsZC5hLGspLF89VXYocyxiOHQpLHc9bmV3IG1HdChyLHEpLFpmbih3LmIsdy5hLF8pfWZ1bmN0aW9uIEs1dCh0LGUsbil7dmFyIHIscyxvLGgsZDtzd2l0Y2goZD1udWxsLGUuZyl7Y2FzZSAxOmZvcihzPW5ldyBTKHQuaik7cy5hPHMuYy5jLmxlbmd0aDspaWYocj11KFEocyksMTEpLEJlKEZlKEsociwoYWUoKSxCbHQpKSkpKXJldHVybiByO2Q9bmV3IE5jLGVlKGQsKGFlKCksQmx0KSwoRm4oKSwhMCkpO2JyZWFrO2Nhc2UgMjpmb3IoaD1uZXcgUyh0LmopO2guYTxoLmMuYy5sZW5ndGg7KWlmKG89dShRKGgpLDExKSxCZShGZShLKG8sKGFlKCksamx0KSkpKSlyZXR1cm4gbztkPW5ldyBOYyxlZShkLChhZSgpLGpsdCksKEZuKCksITApKX1yZXR1cm4gZCYmKHRjKGQsdCksVXMoZCxuKSxaaG4oZC5uLHQubyxuKSksZH1mdW5jdGlvbiBWdWUodCxlKXt2YXIgbixyLHMsbyxoLGQ7Zm9yKGQ9LTEsaD1uZXcgY3Mscj1uZXcgTTEodC5iKTtKbyhyLmEpfHxKbyhyLmIpOyl7Zm9yKG49dShKbyhyLmEpP1Eoci5hKTpRKHIuYiksMTcpLGQ9Yi5NYXRoLm1heChkLFp0KHZlKEsobiwoeGUoKSxYZykpKSkpLG4uYz09dD95cyhXaShuZXcga24obnVsbCxuZXcgVG4obi5iLDE2KSksbmV3IHZZKSxuZXcgQmMoaCkpOnlzKFdpKG5ldyBrbihudWxsLG5ldyBUbihuLmIsMTYpKSxuZXcgd1kpLG5ldyBybyhoKSksbz1zaShoLDApO28uYiE9by5kLmM7KXM9dShpaShvKSw3MCksZWEocywoYWUoKSxMeCkpfHxlZShzLEx4LG4pO1JzKGUsaCksTWgoaCl9cmV0dXJuIGR9ZnVuY3Rpb24gYW1uKHQsZSxuLHIscyl7dmFyIG8saCxkLHc7bz1uZXcgSDAodCksQzAobywoR24oKSxVYykpLGVlKG8sKHhlKCksd3MpLCh2YSgpLEtjKSksZWUobywoYWUoKSxJaSksZS5jLmkpLGg9bmV3IE5jLGVlKGgsSWksZS5jKSxVcyhoLHMpLHRjKGgsbyksZWUoZS5jLHNsLG8pLGQ9bmV3IEgwKHQpLEMwKGQsVWMpLGVlKGQsd3MsS2MpLGVlKGQsSWksZS5kLmkpLHc9bmV3IE5jLGVlKHcsSWksZS5kKSxVcyh3LHMpLHRjKHcsZCksZWUoZS5kLHNsLGQpLEJhKGUsaCkscGEoZSx3KSxVbSgwLG4uYy5sZW5ndGgpLFdUKG4uYywwLG8pLHIuY1tyLmMubGVuZ3RoXT1kLGVlKG8scVYsZGUoMSkpLGVlKGQscVYsZGUoMSkpfWZ1bmN0aW9uIGZ3KHQsZSxuLHIscyl7dmFyIG8saCxkLHcsaztkPXM/ci5iOnIuYSwhUzAodC5hLHIpJiYoaz1kPm4ucyYmZDxuLmMsdz0hMSxuLmUuYiE9MCYmbi5qLmIhPTAmJih3PXd8KGIuTWF0aC5hYnMoZC1adCh2ZShjbnQobi5lKSkpKTx4ZCYmYi5NYXRoLmFicyhkLVp0KHZlKGNudChuLmopKSkpPHhkKSx3PXd8KGIuTWF0aC5hYnMoZC1adCh2ZSh2aihuLmUpKSkpPHhkJiZiLk1hdGguYWJzKGQtWnQodmUodmoobi5qKSkpKTx4ZCkpLChrfHx3KSYmKGg9dShLKGUsKHhlKCksT28pKSw3NCksaHx8KGg9bmV3IGp1LGVlKGUsT28saCkpLG89bmV3IFNvKHIpLGtzKGgsbyxoLmMuYixoLmMpLFZzKHQuYSxvKSkpfWZ1bmN0aW9uIG9tbih0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssXztpZihkcG4odCxlLG4scikpcmV0dXJuITA7Zm9yKGg9bmV3IFMoZS5mKTtoLmE8aC5jLmMubGVuZ3RoOyl7c3dpdGNoKG89dShRKGgpLDMyNCksZD0hMSx3PXQuai1lLmorbixrPXcrZS5vLF89dC5rLWUuaytyLHM9XytlLnAsby5hLmcpe2Nhc2UgMDpkPVNpdCh0LHcrby5iLmEsMCx3K28uYy5hLF8tMSk7YnJlYWs7Y2FzZSAxOmQ9U2l0KHQsayxfK28uYi5hLHQuby0xLF8rby5jLmEpO2JyZWFrO2Nhc2UgMjpkPVNpdCh0LHcrby5iLmEscyx3K28uYy5hLHQucC0xKTticmVhaztkZWZhdWx0OmQ9U2l0KHQsMCxfK28uYi5hLHctMSxfK28uYy5hKX1pZihkKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIGNtbih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXztmb3IoaD1uZXcgUyhlLmIpO2guYTxoLmMuYy5sZW5ndGg7KWZvcihvPXUoUShoKSwyOSksaz1uZXcgUyhvLmEpO2suYTxrLmMuYy5sZW5ndGg7KXtmb3Iodz11KFEoayksMTApLF89bmV3IGxlLGQ9MCxyPW5ldyBhcihscihVbyh3KS5hLktjKCksbmV3IEgpKTtWcihyKTspbj11KElyKHIpLDE3KSwhKFdhKG4pfHwhV2EobikmJm4uYy5pLmM9PW4uZC5pLmMpJiYocz11KEsobiwoeGUoKSxQeCkpLDE5KS5hLHM+ZCYmKGQ9cyxfLmM9TnQoUW4sTWUsMSwwLDUsMSkpLHM9PWQmJnVlKF8sbmV3IHlhKG4uYy5pLG4pKSk7cG4oKSxhYShfLHQuYyksJG0odC5iLHcucCxfKX19ZnVuY3Rpb24gdW1uKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxfO2ZvcihoPW5ldyBTKGUuYik7aC5hPGguYy5jLmxlbmd0aDspZm9yKG89dShRKGgpLDI5KSxrPW5ldyBTKG8uYSk7ay5hPGsuYy5jLmxlbmd0aDspe2Zvcih3PXUoUShrKSwxMCksXz1uZXcgbGUsZD0wLHI9bmV3IGFyKGxyKCRzKHcpLmEuS2MoKSxuZXcgSCkpO1ZyKHIpOyluPXUoSXIociksMTcpLCEoV2Eobil8fCFXYShuKSYmbi5jLmkuYz09bi5kLmkuYykmJihzPXUoSyhuLCh4ZSgpLFB4KSksMTkpLmEscz5kJiYoZD1zLF8uYz1OdChRbixNZSwxLDAsNSwxKSkscz09ZCYmdWUoXyxuZXcgeWEobi5kLmksbikpKTtwbigpLGFhKF8sdC5jKSwkbSh0LmYsdy5wLF8pfX1mdW5jdGlvbiBHdWUodCl7U3YodCxuZXcgeTIoRXYoeXYoa3YoeHYobmV3IG1nLHh3KSwiRUxLIEJveCIpLCJBbGdvcml0aG0gZm9yIHBhY2tpbmcgb2YgdW5jb25uZWN0ZWQgYm94ZXMsIGkuZS4gZ3JhcGhzIHdpdGhvdXQgZWRnZXMuIiksbmV3IE9aKSkpLHdlKHQseHcsd3csVFN0KSx3ZSh0LHh3LGt5LDE1KSx3ZSh0LHh3LGpJLGRlKDApKSx3ZSh0LHh3LGdILEllKHhTdCkpLHdlKHQseHcsTTQsSWUoRjNlKSksd2UodCx4dyxieCxJZShCM2UpKSx3ZSh0LHh3LHB4LEgxZSksd2UodCx4dywkSSxJZShrU3QpKSx3ZSh0LHh3LHZ4LEllKEVTdCkpLHdlKHQseHcsaTh0LEllKGVmdCkpLHdlKHQseHcsY0gsSWUoUDNlKSl9ZnVuY3Rpb24gVXVlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxfO2lmKHM9dC5pLGg9cy5vLmEsbz1zLm8uYixoPD0wJiZvPD0wKXJldHVybiBiZSgpLGFjO3N3aXRjaChrPXQubi5hLF89dC5uLmIsZD10Lm8uYSxuPXQuby5iLGUuZyl7Y2FzZSAyOmNhc2UgMTppZihrPDApcmV0dXJuIGJlKCksQm47aWYoaytkPmgpcmV0dXJuIGJlKCksSG47YnJlYWs7Y2FzZSA0OmNhc2UgMzppZihfPDApcmV0dXJuIGJlKCksT247aWYoXytuPm8pcmV0dXJuIGJlKCkseXJ9cmV0dXJuIHc9KGsrZC8yKS9oLHI9KF8rbi8yKS9vLHcrcjw9MSYmdy1yPD0wPyhiZSgpLEJuKTp3K3I+PTEmJnctcj49MD8oYmUoKSxIbik6cjwuNT8oYmUoKSxPbik6KGJlKCkseXIpfWZ1bmN0aW9uIGxtbih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXyxNLEIscSxHLFc7Zm9yKG49ITEsXz1adCh2ZShLKGUsKHhlKCksQncpKSkpLEc9cmIqXyxzPW5ldyBTKGUuYik7cy5hPHMuYy5jLmxlbmd0aDspZm9yKHI9dShRKHMpLDI5KSxrPW5ldyBTKHIuYSksbz11KFEoayksMTApLE09bnd0KHQuYVtvLnBdKTtrLmE8ay5jLmMubGVuZ3RoOylkPXUoUShrKSwxMCksQj1ud3QodC5hW2QucF0pLE0hPUImJihxPVUzKHQuYixvLGQpLGg9by5uLmIrby5vLmIrby5kLmErTS5hK3Esdz1kLm4uYi1kLmQuZCtCLmEsaD53K0cmJihXPU0uZytCLmcsQi5hPShCLmcqQi5hK00uZypNLmEpL1csQi5nPVcsTS5mPUIsbj0hMCkpLG89ZCxNPUI7cmV0dXJuIG59ZnVuY3Rpb24gV3VlKHQsZSxuLHIscyxvLGgpe3ZhciBkLHcsayxfLE0sQjtmb3IoQj1uZXcgUzYsaz1lLktjKCk7ay5PYigpOylmb3IoZD11KGsuUGIoKSw4MzkpLE09bmV3IFMoZC53ZigpKTtNLmE8TS5jLmMubGVuZ3RoOylfPXUoUShNKSwxODEpLEd0KF8uV2UoKGRpKCksYWZ0KSkpPT09R3QoKEQxKCksX0UpKSYmKEN1ZShCLF8sITEscixzLG8saCksaEModCxCKSk7Zm9yKHc9bi5LYygpO3cuT2IoKTspZm9yKGQ9dSh3LlBiKCksODM5KSxNPW5ldyBTKGQud2YoKSk7TS5hPE0uYy5jLmxlbmd0aDspXz11KFEoTSksMTgxKSxHdChfLldlKChkaSgpLGFmdCkpKT09PUd0KChEMSgpLFl5KSkmJihDdWUoQixfLCEwLHIscyxvLGgpLGhDKHQsQikpfWZ1bmN0aW9uIGhtbih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGs7Zm9yKGg9bmV3IG5yKCghdC5hJiYodC5hPW5ldyBoZShkcyx0LDEwLDExKSksdC5hKSk7aC5lIT1oLmkuZ2MoKTspZm9yKG89dShkcihoKSwzMykscz1uZXcgYXIobHIoVjAobykuYS5LYygpLG5ldyBIKSk7VnIocyk7KXI9dShJcihzKSw3OSksIWdDKHIpJiYhZ0MocikmJiF1dyhyKSYmKHc9dShjYyhGbyhuLmYsbykpLDg2KSxrPXUodHIobixSbyh1KEF0KCghci5jJiYoci5jPW5ldyBFbih2cixyLDUsOCkpLHIuYyksMCksODIpKSksODYpLHcmJmsmJihkPW5ldyBDd3QodyxrKSxlZShkLChtYygpLGpTKSxyKSxCbyhkLHIpLGFpKHcuZCxkKSxhaShrLmIsZCksYWkoZS5hLGQpKSl9ZnVuY3Rpb24gZm1uKHQsZSl7dmFyIG4scixzLG8saCxkLHcsaztmb3Iodz11KHUoUGkodC5yLGUpLDIxKSw4NCkuS2MoKTt3Lk9iKCk7KWQ9dSh3LlBiKCksMTExKSxzPWQuYz8kS3QoZC5jKTowLHM+MD9kLmE/KGs9ZC5iLnJmKCkuYixzPmsmJih0LnZ8fGQuYy5kLmMubGVuZ3RoPT0xPyhoPShzLWspLzIsZC5kLmQ9aCxkLmQuYT1oKToobj11KFBlKGQuYy5kLDApLDE4MSkucmYoKS5iLHI9KG4taykvMixkLmQuZD1iLk1hdGgubWF4KDAsciksZC5kLmE9cy1yLWspKSk6ZC5kLmE9dC50K3M6VF8odC51KSYmKG89azR0KGQuYiksby5kPDAmJihkLmQuZD0tby5kKSxvLmQrby5hPmQuYi5yZigpLmImJihkLmQuYT1vLmQrby5hLWQuYi5yZigpLmIpKX1mdW5jdGlvbiBkbW4odCxlKXt2YXIgbjtzd2l0Y2goeEQodCkpe2Nhc2UgNjpyZXR1cm4gaGEoZSk7Y2FzZSA3OnJldHVybiBObShlKTtjYXNlIDg6cmV0dXJuIE9tKGUpO2Nhc2UgMzpyZXR1cm4gQXJyYXkuaXNBcnJheShlKSYmKG49eEQoZSksIShuPj0xNCYmbjw9MTYpKTtjYXNlIDExOnJldHVybiBlIT1udWxsJiZ0eXBlb2YgZT09PUZhdDtjYXNlIDEyOnJldHVybiBlIT1udWxsJiYodHlwZW9mIGU9PT1fSXx8dHlwZW9mIGU9PUZhdCk7Y2FzZSAwOnJldHVybiBzc3QoZSx0Ll9fZWxlbWVudFR5cGVJZCQpO2Nhc2UgMjpyZXR1cm4gSG50KGUpJiZlLmltIT09RnQ7Y2FzZSAxOnJldHVybiBIbnQoZSkmJmUuaW0hPT1GdHx8c3N0KGUsdC5fX2VsZW1lbnRUeXBlSWQkKTtkZWZhdWx0OnJldHVybiEwfX1mdW5jdGlvbiBLdWUodCxlKXt2YXIgbixyLHMsbztyZXR1cm4gcj1iLk1hdGgubWluKGIuTWF0aC5hYnModC5jLShlLmMrZS5iKSksYi5NYXRoLmFicyh0LmMrdC5iLWUuYykpLG89Yi5NYXRoLm1pbihiLk1hdGguYWJzKHQuZC0oZS5kK2UuYSkpLGIuTWF0aC5hYnModC5kK3QuYS1lLmQpKSxuPWIuTWF0aC5hYnModC5jK3QuYi8yLShlLmMrZS5iLzIpKSxuPnQuYi8yK2UuYi8yfHwocz1iLk1hdGguYWJzKHQuZCt0LmEvMi0oZS5kK2UuYS8yKSkscz50LmEvMitlLmEvMik/MTpuPT0wJiZzPT0wPzA6bj09MD9vL3MrMTpzPT0wP3IvbisxOmIuTWF0aC5taW4oci9uLG8vcykrMX1mdW5jdGlvbiBZdWUodCxlKXt2YXIgbixyLHMsbyxoLGQ7cmV0dXJuIHM9SG10KHQpLGQ9SG10KGUpLHM9PWQ/dC5lPT1lLmUmJnQuYTw1NCYmZS5hPDU0P3QuZjxlLmY/LTE6dC5mPmUuZj8xOjA6KHI9dC5lLWUuZSxuPSh0LmQ+MD90LmQ6Yi5NYXRoLmZsb29yKCh0LmEtMSkqYWZlKSsxKS0oZS5kPjA/ZS5kOmIuTWF0aC5mbG9vcigoZS5hLTEpKmFmZSkrMSksbj5yKzE/czpuPHItMT8tczoobz0oIXQuYyYmKHQuYz1qRCh0LmYpKSx0LmMpLGg9KCFlLmMmJihlLmM9akQoZS5mKSksZS5jKSxyPDA/bz10NChvLHZsZSgtcikpOnI+MCYmKGg9dDQoaCx2bGUocikpKSxTaWUobyxoKSkpOnM8ZD8tMToxfWZ1bmN0aW9uIGdtbih0LGUpe3ZhciBuLHIscyxvLGgsZCx3O2ZvcihvPTAsZD0wLHc9MCxzPW5ldyBTKHQuZi5lKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoUShzKSwxNDQpLGUhPXImJihoPXQuaVtlLmJdW3IuYl0sbys9aCxuPUdwKGUuZCxyLmQpLG4+MCYmdC5kIT0oal8oKSxYdXQpJiYoZCs9aCooci5kLmErdC5hW2UuYl1bci5iXSooZS5kLmEtci5kLmEpL24pKSxuPjAmJnQuZCE9KGpfKCksS3V0KSYmKHcrPWgqKHIuZC5iK3QuYVtlLmJdW3IuYl0qKGUuZC5iLXIuZC5iKS9uKSkpO3N3aXRjaCh0LmQuZyl7Y2FzZSAxOnJldHVybiBuZXcgUmUoZC9vLGUuZC5iKTtjYXNlIDI6cmV0dXJuIG5ldyBSZShlLmQuYSx3L28pO2RlZmF1bHQ6cmV0dXJuIG5ldyBSZShkL28sdy9vKX19ZnVuY3Rpb24gWHVlKHQsZSl7UTgoKTt2YXIgbixyLHMsbyxoO2lmKGg9dShLKHQuaSwoeGUoKSx3cykpLDk4KSxvPXQuai5nLWUuai5nLG8hPTB8fCEoaD09KHZhKCksVTIpfHxoPT1oMHx8aD09S2MpKXJldHVybiAwO2lmKGg9PSh2YSgpLFUyKSYmKG49dShLKHQsUWcpLDE5KSxyPXUoSyhlLFFnKSwxOSksbiYmciYmKHM9bi5hLXIuYSxzIT0wKSkpcmV0dXJuIHM7c3dpdGNoKHQuai5nKXtjYXNlIDE6cmV0dXJuIGpzKHQubi5hLGUubi5hKTtjYXNlIDI6cmV0dXJuIGpzKHQubi5iLGUubi5iKTtjYXNlIDM6cmV0dXJuIGpzKGUubi5hLHQubi5hKTtjYXNlIDQ6cmV0dXJuIGpzKGUubi5iLHQubi5iKTtkZWZhdWx0OnRocm93IG50KG5ldyBIbyhkeHQpKX19ZnVuY3Rpb24gUXVlKHQpe3ZhciBlLG4scixzLG8saDtmb3Iobj0oIXQuYSYmKHQuYT1uZXcgQnMoV2gsdCw1KSksdC5hKS5pKzIsaD1uZXcgSmMobiksdWUoaCxuZXcgUmUodC5qLHQuaykpLHlzKG5ldyBrbihudWxsLCghdC5hJiYodC5hPW5ldyBCcyhXaCx0LDUpKSxuZXcgVG4odC5hLDE2KSkpLG5ldyBHJHQoaCkpLHVlKGgsbmV3IFJlKHQuYix0LmMpKSxlPTE7ZTxoLmMubGVuZ3RoLTE7KXI9KFNuKGUtMSxoLmMubGVuZ3RoKSx1KGguY1tlLTFdLDgpKSxzPShTbihlLGguYy5sZW5ndGgpLHUoaC5jW2VdLDgpKSxvPShTbihlKzEsaC5jLmxlbmd0aCksdShoLmNbZSsxXSw4KSksci5hPT1zLmEmJnMuYT09by5hfHxyLmI9PXMuYiYmcy5iPT1vLmI/SWcoaCxlKTorK2U7cmV0dXJuIGh9ZnVuY3Rpb24gWnVlKHQsZSl7dmFyIG4scixzLG8saCxkLHc7Zm9yKG49dFd0KGdWdChmVnQoZFZ0KG5ldyBMcHQsZSksbmV3IG8kKGUuZSkpLEtiZSksdC5hKSxlLmouYy5sZW5ndGg9PTB8fHB0ZSh1KFBlKGUuaiwwKSw1NykuYSxuKSx3PW5ldyBWdHQsQWkodC5lLG4sdyksaD1uZXcgUXMsZD1uZXcgUXMsbz1uZXcgUyhlLmspO28uYTxvLmMuYy5sZW5ndGg7KXM9dShRKG8pLDE3KSxWcyhoLHMuYyksVnMoZCxzLmQpO3I9aC5hLmdjKCktZC5hLmdjKCkscjwwPyhQRCh3LCEwLChmbygpLEhoKSksUEQodywhMSxfZikpOnI+MCYmKFBEKHcsITEsKGZvKCksSGgpKSxQRCh3LCEwLF9mKSksX3UoZS5nLG5ldyBxVnQodCxuKSksQWkodC5nLGUsbil9ZnVuY3Rpb24gSnVlKCl7SnVlPVg7dmFyIHQ7Zm9yKGk3dD11dChvdChTciwxKSxKciwyNSwxNSxbLTEsLTEsMzAsMTksMTUsMTMsMTEsMTEsMTAsOSw5LDgsOCw4LDgsNyw3LDcsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNV0pLEN1dD1OdChTcixKciwyNSwzNywxNSwxKSx4Z2U9dXQob3QoU3IsMSksSnIsMjUsMTUsWy0xLC0xLDYzLDQwLDMyLDI4LDI1LDIzLDIxLDIwLDE5LDE5LDE4LDE4LDE3LDE3LDE2LDE2LDE2LDE1LDE1LDE1LDE1LDE0LDE0LDE0LDE0LDE0LDE0LDEzLDEzLDEzLDEzLDEzLDEzLDEzLDEzXSksczd0PU50KERiLGNvdCwyNSwzNywxNCwxKSx0PTI7dDw9MzY7dCsrKUN1dFt0XT1DcyhiLk1hdGgucG93KHQsaTd0W3RdKSksczd0W3RdPWVJKERxLEN1dFt0XSl9ZnVuY3Rpb24gcG1uKHQpe3ZhciBlO2lmKCghdC5hJiYodC5hPW5ldyBoZSh1cyx0LDYsNikpLHQuYSkuaSE9MSl0aHJvdyBudChuZXcgUG4oY2RlKyghdC5hJiYodC5hPW5ldyBoZSh1cyx0LDYsNikpLHQuYSkuaSkpO3JldHVybiBlPW5ldyBqdSxPRCh1KEF0KCghdC5iJiYodC5iPW5ldyBFbih2cix0LDQsNykpLHQuYiksMCksODIpKSYmS2EoZSxQaGUodCxPRCh1KEF0KCghdC5iJiYodC5iPW5ldyBFbih2cix0LDQsNykpLHQuYiksMCksODIpKSwhMSkpLE9EKHUoQXQoKCF0LmMmJih0LmM9bmV3IEVuKHZyLHQsNSw4KSksdC5jKSwwKSw4MikpJiZLYShlLFBoZSh0LE9EKHUoQXQoKCF0LmMmJih0LmM9bmV3IEVuKHZyLHQsNSw4KSksdC5jKSwwKSw4MikpLCEwKSksZX1mdW5jdGlvbiB0bGUodCxlKXt2YXIgbixyLHMsbyxoO2ZvcihlLmQ/cz10LmEuYz09KGdkKCksUncpP1VvKGUuYik6JHMoZS5iKTpzPXQuYS5jPT0oZ2QoKSxaZyk/VW8oZS5iKTokcyhlLmIpLG89ITEscj1uZXcgYXIobHIocy5hLktjKCksbmV3IEgpKTtWcihyKTspaWYobj11KElyKHIpLDE3KSxoPUJlKHQuYS5mW3QuYS5nW2UuYi5wXS5wXSksISghaCYmIVdhKG4pJiZuLmMuaS5jPT1uLmQuaS5jKSYmIShCZSh0LmEublt0LmEuZ1tlLmIucF0ucF0pfHxCZSh0LmEublt0LmEuZ1tlLmIucF0ucF0pKSYmKG89ITAsUzAodC5iLHQuYS5nW19mbihuLGUuYikucF0pKSlyZXR1cm4gZS5jPSEwLGUuYT1uLGU7cmV0dXJuIGUuYz1vLGUuYT1udWxsLGV9ZnVuY3Rpb24gYm1uKHQsZSxuLHIscyl7dmFyIG8saCxkLHcsayxfLE07Zm9yKHBuKCksYWEodCxuZXcgelopLGQ9bmV3IHhhKHQsMCksTT1uZXcgbGUsbz0wO2QuYjxkLmQuZ2MoKTspaD0oWm4oZC5iPGQuZC5nYygpKSx1KGQuZC5YYihkLmM9ZC5iKyspLDE1NykpLE0uYy5sZW5ndGghPTAmJkh1KGgpKkxsKGgpPm8qMj8oXz1uZXcgVSQoTSksaz1IdShoKS9MbChoKSx3PUlhdChfLGUsbmV3IHY2LG4scixzLGspLEZpKEtmKF8uZSksdyksTS5jPU50KFFuLE1lLDEsMCw1LDEpLG89MCxNLmNbTS5jLmxlbmd0aF09XyxNLmNbTS5jLmxlbmd0aF09aCxvPUh1KF8pKkxsKF8pK0h1KGgpKkxsKGgpKTooTS5jW00uYy5sZW5ndGhdPWgsbys9SHUoaCkqTGwoaCkpO3JldHVybiBNfWZ1bmN0aW9uIFk1dCh0LGUsbil7dmFyIHIscyxvLGgsZCx3LGs7aWYocj1uLmdjKCkscj09MClyZXR1cm4hMTtpZih0LmVqKCkpaWYodz10LmZqKCksbDN0KHQsZSxuKSxoPXI9PTE/dC5aaSgzLG51bGwsbi5LYygpLlBiKCksZSx3KTp0LlppKDUsbnVsbCxuLGUsdyksdC5iaigpKXtmb3IoZD1yPDEwMD9udWxsOm5ldyBMcChyKSxvPWUrcixzPWU7czxvOysrcylrPXQuT2kocyksZD10LmNqKGssZCksZD1kO2Q/KGQuRWkoaCksZC5GaSgpKTp0LiRpKGgpfWVsc2UgdC4kaShoKTtlbHNlIGlmKGwzdCh0LGUsbiksdC5iaigpKXtmb3IoZD1yPDEwMD9udWxsOm5ldyBMcChyKSxvPWUrcixzPWU7czxvOysrcylkPXQuY2oodC5PaShzKSxkKTtkJiZkLkZpKCl9cmV0dXJuITB9ZnVuY3Rpb24gZWxlKHQsZSxuKXt2YXIgcixzLG8saCxkO3JldHVybiB0LmVqKCk/KHM9bnVsbCxvPXQuZmooKSxyPXQuWmkoMSxkPShoPXQuVWkoZSx0Lm9pKGUsbikpLGgpLG4sZSxvKSx0LmJqKCkmJiEodC5uaSgpJiZkP1NpKGQsbik6R3QoZCk9PT1HdChuKSkmJihkJiYocz10LmRqKGQscykpLHM9dC5jaihuLHMpKSxzPyhzLkVpKHIpLHMuRmkoKSk6dC4kaShyKSxkKTooZD0oaD10LlVpKGUsdC5vaShlLG4pKSxoKSx0LmJqKCkmJiEodC5uaSgpJiZkP1NpKGQsbik6R3QoZCk9PT1HdChuKSkmJihzPW51bGwsZCYmKHM9dC5kaihkLG51bGwpKSxzPXQuY2oobixzKSxzJiZzLkZpKCkpLGQpfWZ1bmN0aW9uIFg1dCh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXztpZih0LmU9ZSx0LmY9dShLKGUsKFVwKCksYVYpKSwyMzApLEpkbihlKSx0LmQ9Yi5NYXRoLm1heChlLmUuYy5sZW5ndGgqMTYrZS5jLmMubGVuZ3RoLDI1NiksIUJlKEZlKEsoZSwobjEoKSxjRXQpKSkpKWZvcihfPXQuZS5lLmMubGVuZ3RoLHc9bmV3IFMoZS5lKTt3LmE8dy5jLmMubGVuZ3RoOylkPXUoUSh3KSwxNDQpLGs9ZC5kLGsuYT1xdnQodC5mKSpfLGsuYj1xdnQodC5mKSpfO2ZvcihuPWUuYixvPW5ldyBTKGUuYyk7by5hPG8uYy5jLmxlbmd0aDspaWYocz11KFEobyksMjgyKSxyPXUoSyhzLGRFdCksMTkpLmEscj4wKXtmb3IoaD0wO2g8cjtoKyspdWUobixuZXcgell0KHMpKTtsb2Uocyl9fWZ1bmN0aW9uIG94KHQsZSl7dmFyIG4scixzLG8saCxkO2lmKHQuaz09KEduKCksUGwpJiYobj1qVChXaSh1KEsodCwoYWUoKSxUTykpLDE1KS5PYygpLG5ldyB0ZShuZXcgVEwpKSkuc2QoKFliKCksUTcpKT9lOihWbCgpLFFPKSxlZSh0LER4LG4pLG4hPShWbCgpLHliKSkpZm9yKHI9dShLKHQsSWkpLDE3KSxkPVp0KHZlKEsociwoeGUoKSxYZykpKSksaD0wLG49PXUwP2g9dC5vLmItYi5NYXRoLmNlaWwoZC8yKTpuPT1RTyYmKHQuby5iLT1adCh2ZShLKCRhKHQpLEZ4KSkpLGg9KHQuby5iLWIuTWF0aC5jZWlsKGQpKS8yKSxvPW5ldyBTKHQuaik7by5hPG8uYy5jLmxlbmd0aDspcz11KFEobyksMTEpLHMubi5iPWh9ZnVuY3Rpb24gUTV0KCl7UTV0PVgscGV0KCksRjVlPW5ldyBBQix1dChvdChWeCwyKSxyZSwzNjgsMCxbdXQob3QoVngsMSksRkgsNTkyLDAsW25ldyBoTShxMGUpXSldKSx1dChvdChWeCwyKSxyZSwzNjgsMCxbdXQob3QoVngsMSksRkgsNTkyLDAsW25ldyBoTShSOHQpXSldKSx1dChvdChWeCwyKSxyZSwzNjgsMCxbdXQob3QoVngsMSksRkgsNTkyLDAsW25ldyBoTShIMGUpXSksdXQob3QoVngsMSksRkgsNTkyLDAsW25ldyBoTShSOHQpXSldKSxuZXcgRnAoIi0xIiksdXQob3QoVngsMikscmUsMzY4LDAsW3V0KG90KFZ4LDEpLEZILDU5MiwwLFtuZXcgaE0oIlxcYysiKV0pXSksbmV3IEZwKCIwIiksbmV3IEZwKCIwIiksbmV3IEZwKCIxIiksbmV3IEZwKCIwIiksbmV3IEZwKFkwZSl9ZnVuY3Rpb24gd3EodCl7dmFyIGUsbjtyZXR1cm4gdC5jJiZ0LmMua2goKSYmKG49dSh0LmMsNDkpLHQuYz11KFhwKHQsbiksMTM4KSx0LmMhPW4mJih0LkRiJjQmJiEodC5EYiYxKSYmQ2kodCxuZXcgb2EodCw5LDIsbix0LmMpKSxfdCh0LkNiLDM5OSk/dC5EYj4+MTY9PS0xNSYmdC5DYi5uaCgpJiZLcnQobmV3IFZydCh0LkNiLDksMTMsbix0LmMsJGcoZmwodSh0LkNiLDU5KSksdCkpKTpfdCh0LkNiLDg4KSYmdC5EYj4+MTY9PS0yMyYmdC5DYi5uaCgpJiYoZT10LmMsX3QoZSw4OCl8fChlPShsbigpLFFoKSksX3Qobiw4OCl8fChuPShsbigpLFFoKSksS3J0KG5ldyBWcnQodC5DYiw5LDEwLG4sZSwkZyhPYyh1KHQuQ2IsMjYpKSx0KSkpKSkpLHQuY31mdW5jdGlvbiB2bW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLF8sTTtmb3IobXIoZSwiSHlwZXJub2RlcyBwcm9jZXNzaW5nIiwxKSxzPW5ldyBTKHQuYik7cy5hPHMuYy5jLmxlbmd0aDspZm9yKHI9dShRKHMpLDI5KSxkPW5ldyBTKHIuYSk7ZC5hPGQuYy5jLmxlbmd0aDspaWYoaD11KFEoZCksMTApLEJlKEZlKEsoaCwoeGUoKSxKVikpKSkmJmguai5jLmxlbmd0aDw9Mil7Zm9yKE09MCxfPTAsbj0wLG89MCxrPW5ldyBTKGguaik7ay5hPGsuYy5jLmxlbmd0aDspc3dpdGNoKHc9dShRKGspLDExKSx3LmouZyl7Y2FzZSAxOisrTTticmVhaztjYXNlIDI6KytfO2JyZWFrO2Nhc2UgMzorK247YnJlYWs7Y2FzZSA0Oisrb31NPT0wJiZuPT0wJiZ5NW4odCxoLG88PV8pfW9yKGUpfWZ1bmN0aW9uIHdtbih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXztmb3IobXIoZSwiTGF5ZXIgY29uc3RyYWludCBlZGdlIHJldmVyc2FsIiwxKSxoPW5ldyBTKHQuYik7aC5hPGguYy5jLmxlbmd0aDspe2ZvcihvPXUoUShoKSwyOSksXz0tMSxuPW5ldyBsZSxrPXNEKG8uYSkscz0wO3M8ay5sZW5ndGg7cysrKXI9dShLKGtbc10sKGFlKCksUDIpKSwzMDMpLF89PS0xP3IhPShCMCgpLFc0KSYmKF89cyk6cj09KEIwKCksVzQpJiYoTG8oa1tzXSxudWxsKSxveShrW3NdLF8rKyxvKSkscj09KEIwKCksU3gpJiZ1ZShuLGtbc10pO2Zvcih3PW5ldyBTKG4pO3cuYTx3LmMuYy5sZW5ndGg7KWQ9dShRKHcpLDEwKSxMbyhkLG51bGwpLExvKGQsbyl9b3IoZSl9ZnVuY3Rpb24gbW1uKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxfLE07Zm9yKG1yKG4sIkh5cGVyZWRnZSBtZXJnaW5nIiwxKSxXcG4odCxlKSx3PW5ldyB4YShlLmIsMCk7dy5iPHcuZC5nYygpOylpZihkPShabih3LmI8dy5kLmdjKCkpLHUody5kLlhiKHcuYz13LmIrKyksMjkpKSxfPWQuYSxfLmMubGVuZ3RoIT0wKWZvcihyPW51bGwscz1udWxsLG89bnVsbCxoPW51bGwsaz0wO2s8Xy5jLmxlbmd0aDtrKyspcj0oU24oayxfLmMubGVuZ3RoKSx1KF8uY1trXSwxMCkpLHM9ci5rLHM9PShHbigpLGNhKSYmaD09Y2EmJihNPWR5bihyLG8pLE0uYSYmKGt2bihyLG8sTS5iLE0uYyksU24oayxfLmMubGVuZ3RoKSxvYnQoXy5jLGssMSksLS1rLHI9byxzPWgpKSxvPXIsaD1zO29yKG4pfWZ1bmN0aW9uIHltbih0LGUpe3ZhciBuLHIscztyPXBsKHQuZCwxKSE9MCwhQmUoRmUoSyhlLmosKGFlKCksTXcpKSkpJiYhQmUoRmUoSyhlLmosWTQpKSl8fEd0KEsoZS5qLCh4ZSgpLHBiKSkpPT09R3QoKGowKCksYmIpKT9lLmMuVGYoZS5lLHIpOnI9QmUoRmUoSyhlLmosTXcpKSkscEkodCxlLHIsITApLEJlKEZlKEsoZS5qLFk0KSkpJiZlZShlLmosWTQsKEZuKCksITEpKSxCZShGZShLKGUuaixNdykpKSYmKGVlKGUuaixNdywoRm4oKSwhMSkpLGVlKGUuaixZNCwhMCkpLG49X3VlKHQsZSk7ZG97aWYoZXl0KHQpLG49PTApcmV0dXJuIDA7cj0hcixzPW4scEkodCxlLHIsITEpLG49X3VlKHQsZSl9d2hpbGUocz5uKTtyZXR1cm4gc31mdW5jdGlvbiBubGUodCxlKXt2YXIgbixyLHM7cj1wbCh0LmQsMSkhPTAsIUJlKEZlKEsoZS5qLChhZSgpLE13KSkpKSYmIUJlKEZlKEsoZS5qLFk0KSkpfHxHdChLKGUuaiwoeGUoKSxwYikpKT09PUd0KChqMCgpLGJiKSk/ZS5jLlRmKGUuZSxyKTpyPUJlKEZlKEsoZS5qLE13KSkpLHBJKHQsZSxyLCEwKSxCZShGZShLKGUuaixZNCkpKSYmZWUoZS5qLFk0LChGbigpLCExKSksQmUoRmUoSyhlLmosTXcpKSkmJihlZShlLmosTXcsKEZuKCksITEpKSxlZShlLmosWTQsITApKSxuPSRzdCh0LGUpO2Rve2lmKGV5dCh0KSxuPT0wKXJldHVybiAwO3I9IXIscz1uLHBJKHQsZSxyLCExKSxuPSRzdCh0LGUpfXdoaWxlKHM+bik7cmV0dXJuIHN9ZnVuY3Rpb24gcmxlKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxfLE0sQixxLEc7aWYoZT09bilyZXR1cm4hMDtpZihlPXM1dCh0LGUpLG49czV0KHQsbikscj1mc3QoZSkscil7aWYoXz1mc3QobiksXyE9cilyZXR1cm4gXz8odz1yLkRqKCksRz1fLkRqKCksdz09RyYmdyE9bnVsbCk6ITE7aWYoaD0oIWUuZCYmKGUuZD1uZXcgQnMod28sZSwxKSksZS5kKSxvPWguaSxCPSghbi5kJiYobi5kPW5ldyBCcyh3byxuLDEpKSxuLmQpLG89PUIuaSl7Zm9yKGs9MDtrPG87KytrKWlmKHM9dShBdChoLGspLDg3KSxNPXUoQXQoQixrKSw4NyksIXJsZSh0LHMsTSkpcmV0dXJuITF9cmV0dXJuITB9ZWxzZSByZXR1cm4gZD1lLmUscT1uLmUsZD09cX1mdW5jdGlvbiBpbGUodCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLF8sTTtpZihHMCh0LmUsZSkpe2ZvcihNPWh1KHQuZS5UZygpLGUpLG89dSh0LmcsMTE5KSxfPW51bGwsdz0tMSxkPS0xLHM9MCxrPTA7azx0Lmk7KytrKWg9b1trXSxNLnJsKGguYWsoKSkmJihzPT1uJiYodz1rKSxzPT1yJiYoZD1rLF89aC5kZCgpKSwrK3MpO2lmKHc9PS0xKXRocm93IG50KG5ldyBDbyhZY3QrbitMMitzKSk7aWYoZD09LTEpdGhyb3cgbnQobmV3IENvKFhjdCtyK0wyK3MpKTtyZXR1cm4gdEModCx3LGQpLFNsKHQuZSkmJlVrKHQsSHAodCw3LGUsZGUociksXyxuLCEwKSksX31lbHNlIHRocm93IG50KG5ldyBQbigiVGhlIGZlYXR1cmUgbXVzdCBiZSBtYW55LXZhbHVlZCB0byBzdXBwb3J0IG1vdmUiKSl9ZnVuY3Rpb24gc2xlKHQsZSxuLHIpe3ZhciBzLG8saCxkLHc7c3dpdGNoKHc9bmV3IFNvKGUubiksdy5hKz1lLm8uYS8yLHcuYis9ZS5vLmIvMixkPVp0KHZlKEsoZSwoeGUoKSx6eSkpKSksbz10LmYsaD10LmQscz10LmMsdShLKGUsKGFlKCksZ2MpKSw2MSkuZyl7Y2FzZSAxOncuYSs9aC5iK3MuYS1uLzIsdy5iPS1yLWQsZS5uLmI9LShoLmQrZCtzLmIpO2JyZWFrO2Nhc2UgMjp3LmE9by5hK2guYitoLmMrZCx3LmIrPWguZCtzLmItci8yLGUubi5hPW8uYStoLmMrZC1zLmE7YnJlYWs7Y2FzZSAzOncuYSs9aC5iK3MuYS1uLzIsdy5iPW8uYitoLmQraC5hK2QsZS5uLmI9by5iK2guYStkLXMuYjticmVhaztjYXNlIDQ6dy5hPS1uLWQsdy5iKz1oLmQrcy5iLXIvMixlLm4uYT0tKGguYitkK3MuYSl9cmV0dXJuIHd9ZnVuY3Rpb24gYWxlKHQpe3ZhciBlLG4scixzLG8saDtyZXR1cm4gcj1uZXcgR210LEJvKHIsdCksR3QoSyhyLCh4ZSgpLFhsKSkpPT09R3QoKGZvKCksYzApKSYmZWUocixYbCxFeihyKSksSyhyLChMJCgpLFZTKSk9PW51bGwmJihoPXUoeGFlKHQpLDE2MCksZWUocixWUyxuaihoLldlKFZTKSkpKSxlZShyLChhZSgpLElpKSx0KSxlZShyLFdjLChlPXUoV2YoTWx0KSw5KSxuZXcgb2goZSx1KGZmKGUsZS5sZW5ndGgpLDkpLDApKSkscz1jNG4oKGhzKHQpJiYoRG0oKSxuZXcgU20oaHModCkpKSxEbSgpLG5ldyBzbnQoaHModCk/bmV3IFNtKGhzKHQpKTpudWxsLHQpKSxfZiksbz11KEsocixyX3QpLDExNiksbj1yLmQsZFF0KG4sbyksZFF0KG4scykscn1mdW5jdGlvbiB4bW4odCxlLG4pe3ZhciByLHM7cj1lLmMuaSxzPW4uZC5pLHIuaz09KEduKCksY2EpPyhlZSh0LChhZSgpLGExKSx1KEsocixhMSksMTEpKSxlZSh0LHFoLHUoSyhyLHFoKSwxMSkpLGVlKHQsUHksRmUoSyhyLFB5KSkpKTpyLms9PVBsPyhlZSh0LChhZSgpLGExKSx1KEsocixhMSksMTEpKSxlZSh0LHFoLHUoSyhyLHFoKSwxMSkpLGVlKHQsUHksKEZuKCksITApKSk6cy5rPT1QbD8oZWUodCwoYWUoKSxhMSksdShLKHMsYTEpLDExKSksZWUodCxxaCx1KEsocyxxaCksMTEpKSxlZSh0LFB5LChGbigpLCEwKSkpOihlZSh0LChhZSgpLGExKSxlLmMpLGVlKHQscWgsbi5kKSl9ZnVuY3Rpb24ga21uKHQpe3ZhciBlLG4scixzLG8saCxkO2Zvcih0Lm89bmV3IEYzLHI9bmV3IGNzLGg9bmV3IFModC5lLmEpO2guYTxoLmMuYy5sZW5ndGg7KW89dShRKGgpLDEyMSksYzQobykuYy5sZW5ndGg9PTEmJmtzKHIsbyxyLmMuYixyLmMpO2Zvcig7ci5iIT0wOylvPXUoci5iPT0wP251bGw6KFpuKHIuYiE9MCksZmgocixyLmEuYSkpLDEyMSksYzQobykuYy5sZW5ndGghPTAmJihlPXUoUGUoYzQobyksMCksMjEzKSxuPW8uZy5hLmMubGVuZ3RoPjAsZD1DeihlLG8pLEMydChuP2QuYjpkLmcsZSksYzQoZCkuYy5sZW5ndGg9PTEmJmtzKHIsZCxyLmMuYixyLmMpLHM9bmV3IHlhKG8sZSksVnAodC5vLHMpLEV1KHQuZS5hLG8pKX1mdW5jdGlvbiBvbGUodCxlKXt2YXIgbixyLHMsbyxoLGQsdztyZXR1cm4gcj1iLk1hdGguYWJzKFZqKHQuYikuYS1WaihlLmIpLmEpLGQ9Yi5NYXRoLmFicyhWaih0LmIpLmItVmooZS5iKS5iKSxzPTAsdz0wLG49MSxoPTEscj50LmIuYi8yK2UuYi5iLzImJihzPWIuTWF0aC5taW4oYi5NYXRoLmFicyh0LmIuYy0oZS5iLmMrZS5iLmIpKSxiLk1hdGguYWJzKHQuYi5jK3QuYi5iLWUuYi5jKSksbj0xLXMvciksZD50LmIuYS8yK2UuYi5hLzImJih3PWIuTWF0aC5taW4oYi5NYXRoLmFicyh0LmIuZC0oZS5iLmQrZS5iLmEpKSxiLk1hdGguYWJzKHQuYi5kK3QuYi5hLWUuYi5kKSksaD0xLXcvZCksbz1iLk1hdGgubWluKG4saCksKDEtbykqYi5NYXRoLnNxcnQocipyK2QqZCl9ZnVuY3Rpb24gRW1uKHQpe3ZhciBlLG4scixzO2ZvcihEYXQodCx0LmUsdC5mLChxdigpLHdiKSwhMCx0LmMsdC5pKSxEYXQodCx0LmUsdC5mLHdiLCExLHQuYyx0LmkpLERhdCh0LHQuZSx0LmYsbjUsITAsdC5jLHQuaSksRGF0KHQsdC5lLHQuZixuNSwhMSx0LmMsdC5pKSxfbW4odCx0LmMsdC5lLHQuZix0LmkpLHI9bmV3IHhhKHQuaSwwKTtyLmI8ci5kLmdjKCk7KWZvcihlPShabihyLmI8ci5kLmdjKCkpLHUoci5kLlhiKHIuYz1yLmIrKyksMTI4KSkscz1uZXcgeGEodC5pLHIuYik7cy5iPHMuZC5nYygpOyluPShabihzLmI8cy5kLmdjKCkpLHUocy5kLlhiKHMuYz1zLmIrKyksMTI4KSkscjNuKGUsbik7XzVuKHQuaSx1KEsodC5kLChhZSgpLEl4KSksMjMwKSksJDNuKHQuaSl9ZnVuY3Rpb24gZmF0KHQsZSl7dmFyIG4scjtpZihlIT1udWxsKXtpZihyPWN3KHQpLHIpaWYoci5pJjEpe2lmKHI9PXhsKXJldHVybiBPbShlKTtpZihyPT1TcilyZXR1cm4gX3QoZSwxOSk7aWYocj09cjMpcmV0dXJuIF90KGUsMTU1KTtpZihyPT1YdSlyZXR1cm4gX3QoZSwyMTcpO2lmKHI9PUVoKXJldHVybiBfdChlLDE3Mik7aWYocj09Z2EpcmV0dXJuIE5tKGUpO2lmKHI9PWQ1KXJldHVybiBfdChlLDE4NCk7aWYocj09RGIpcmV0dXJuIF90KGUsMTYyKX1lbHNlIHJldHVybiBOUigpLG49dSh0cihuVSxyKSw1NSksIW58fG4ud2ooZSk7ZWxzZSBpZihfdChlLDU2KSlyZXR1cm4gdC51ayh1KGUsNTYpKX1yZXR1cm4hMX1mdW5jdGlvbiBaNXQoKXtaNXQ9WDt2YXIgdCxlLG4scixzLG8saCxkLHc7Zm9yKFkxPU50KFh1LFA0LDI1LDI1NSwxNSwxKSxvcD1OdChFaCx3ZCwyNSw2NCwxNSwxKSxlPTA7ZTwyNTU7ZSsrKVkxW2VdPS0xO2ZvcihuPTkwO24+PTY1O24tLSlZMVtuXT1uLTY1PDwyND4+MjQ7Zm9yKHI9MTIyO3I+PTk3O3ItLSlZMVtyXT1yLTk3KzI2PDwyND4+MjQ7Zm9yKHM9NTc7cz49NDg7cy0tKVkxW3NdPXMtNDgrNTI8PDI0Pj4yNDtmb3IoWTFbNDNdPTYyLFkxWzQ3XT02MyxvPTA7bzw9MjU7bysrKW9wW29dPTY1K28mTXM7Zm9yKGg9MjYsdz0wO2g8PTUxOysraCx3Kyspb3BbaF09OTcrdyZNcztmb3IodD01MixkPTA7dDw9NjE7Kyt0LGQrKylvcFt0XT00OCtkJk1zO29wWzYyXT00MyxvcFs2M109NDd9ZnVuY3Rpb24gVG1uKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxfLE0sQixxO2lmKHQuZGMoKSlyZXR1cm4gbmV3IERhO2ZvcihrPTAsTT0wLHM9dC5LYygpO3MuT2IoKTspcj11KHMuUGIoKSwzNyksbz1yLmYsaz1iLk1hdGgubWF4KGssby5hKSxNKz1vLmEqby5iO2ZvcihrPWIuTWF0aC5tYXgoayxiLk1hdGguc3FydChNKSpadCh2ZShLKHUodC5LYygpLlBiKCksMzcpLCh4ZSgpLFVWKSkpKSksQj0wLHE9MCx3PTAsbj1lLGQ9dC5LYygpO2QuT2IoKTspaD11KGQuUGIoKSwzNyksXz1oLmYsQitfLmE+ayYmKEI9MCxxKz13K2Usdz0wKSx3QyhoLEIscSksbj1iLk1hdGgubWF4KG4sQitfLmEpLHc9Yi5NYXRoLm1heCh3LF8uYiksQis9Xy5hK2U7cmV0dXJuIG5ldyBSZShuK2UscSt3K2UpfWZ1bmN0aW9uIF9tbih0LGUsbixyLHMpe3ZhciBvLGgsZCx3LGssXyxNO2ZvcihoPW5ldyBTKGUpO2guYTxoLmMuYy5sZW5ndGg7KXtpZihvPXUoUShoKSwxNyksdz1vLmMsbi5hLl9iKHcpKWs9KHF2KCksd2IpO2Vsc2UgaWYoci5hLl9iKHcpKWs9KHF2KCksbjUpO2Vsc2UgdGhyb3cgbnQobmV3IFBuKCJTb3VyY2UgcG9ydCBtdXN0IGJlIGluIG9uZSBvZiB0aGUgcG9ydCBzZXRzLiIpKTtpZihfPW8uZCxuLmEuX2IoXykpTT0ocXYoKSx3Yik7ZWxzZSBpZihyLmEuX2IoXykpTT0ocXYoKSxuNSk7ZWxzZSB0aHJvdyBudChuZXcgUG4oIlRhcmdldCBwb3J0IG11c3QgYmUgaW4gb25lIG9mIHRoZSBwb3J0IHNldHMuIikpO2Q9bmV3IEphZShvLGssTSksQWkodC5iLG8sZCkscy5jW3MuYy5sZW5ndGhdPWR9fWZ1bmN0aW9uIEo1dCh0LGUpe3ZhciBuLHIscyxvLGgsZCx3O2lmKCFfMSh0KSl0aHJvdyBudChuZXcgSG8ob2RlKSk7aWYocj1fMSh0KSxvPXIuZyxzPXIuZixvPD0wJiZzPD0wKXJldHVybiBiZSgpLGFjO3N3aXRjaChkPXQuaSx3PXQuaixlLmcpe2Nhc2UgMjpjYXNlIDE6aWYoZDwwKXJldHVybiBiZSgpLEJuO2lmKGQrdC5nPm8pcmV0dXJuIGJlKCksSG47YnJlYWs7Y2FzZSA0OmNhc2UgMzppZih3PDApcmV0dXJuIGJlKCksT247aWYodyt0LmY+cylyZXR1cm4gYmUoKSx5cn1yZXR1cm4gaD0oZCt0LmcvMikvbyxuPSh3K3QuZi8yKS9zLGgrbjw9MSYmaC1uPD0wPyhiZSgpLEJuKTpoK24+PTEmJmgtbj49MD8oYmUoKSxIbik6bjwuNT8oYmUoKSxPbik6KGJlKCkseXIpfWZ1bmN0aW9uIENtbih0LGUsbixyLHMpe3ZhciBvLGg7aWYobz1SYShHcyhlWzBdLHBvKSxHcyhyWzBdLHBvKSksdFswXT1NcihvKSxvPVJwKG8sMzIpLG4+PXMpe2ZvcihoPTE7aDxzO2grKylvPVJhKG8sUmEoR3MoZVtoXSxwbyksR3MocltoXSxwbykpKSx0W2hdPU1yKG8pLG89UnAobywzMik7Zm9yKDtoPG47aCsrKW89UmEobyxHcyhlW2hdLHBvKSksdFtoXT1NcihvKSxvPVJwKG8sMzIpfWVsc2V7Zm9yKGg9MTtoPG47aCsrKW89UmEobyxSYShHcyhlW2hdLHBvKSxHcyhyW2hdLHBvKSkpLHRbaF09TXIobyksbz1ScChvLDMyKTtmb3IoO2g8cztoKyspbz1SYShvLEdzKHJbaF0scG8pKSx0W2hdPU1yKG8pLG89UnAobywzMil9X2MobywwKSE9MCYmKHRbaF09TXIobykpfWZ1bmN0aW9uIGJ5KHQpe3lpKCk7dmFyIGUsbixyLHMsbyxoO2lmKHQuZSE9NCYmdC5lIT01KXRocm93IG50KG5ldyBQbigiVG9rZW4jY29tcGxlbWVudFJhbmdlcygpOiBtdXN0IGJlIFJBTkdFOiAiK3QuZSkpO2ZvcihvPXQsdjQobyksVEMobykscj1vLmIubGVuZ3RoKzIsby5iWzBdPT0wJiYoci09Miksbj1vLmJbby5iLmxlbmd0aC0xXSxuPT1HNyYmKHItPTIpLHM9bmV3IGpsKDQpLHMuYj1OdChTcixKciwyNSxyLDE1LDEpLGg9MCxvLmJbMF0+MCYmKHMuYltoKytdPTAscy5iW2grK109by5iWzBdLTEpLGU9MTtlPG8uYi5sZW5ndGgtMjtlKz0yKXMuYltoKytdPW8uYltlXSsxLHMuYltoKytdPW8uYltlKzFdLTE7cmV0dXJuIG4hPUc3JiYocy5iW2grK109bisxLHMuYltoXT1HNykscy5hPSEwLHN9ZnVuY3Rpb24gZGF0KHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxfO2lmKHI9bi5nYygpLHI9PTApcmV0dXJuITE7aWYodC5laigpKWlmKGs9dC5maigpLERzdCh0LGUsbiksaD1yPT0xP3QuWmkoMyxudWxsLG4uS2MoKS5QYigpLGUsayk6dC5aaSg1LG51bGwsbixlLGspLHQuYmooKSl7Zm9yKGQ9cjwxMDA/bnVsbDpuZXcgTHAociksbz1lK3Iscz1lO3M8bzsrK3MpXz10Lmdbc10sZD10LmNqKF8sZCksZD10LmpqKF8sZCk7ZD8oZC5FaShoKSxkLkZpKCkpOnQuJGkoaCl9ZWxzZSB0LiRpKGgpO2Vsc2UgaWYoRHN0KHQsZSxuKSx0LmJqKCkpe2ZvcihkPXI8MTAwP251bGw6bmV3IExwKHIpLG89ZStyLHM9ZTtzPG87KytzKXc9dC5nW3NdLGQ9dC5jaih3LGQpO2QmJmQuRmkoKX1yZXR1cm4hMH1mdW5jdGlvbiB0NnQodCxlLG4scil7dmFyIHMsbyxoLGQsdztmb3IoaD1uZXcgUyh0LmspO2guYTxoLmMuYy5sZW5ndGg7KXM9dShRKGgpLDEyOSksKCFyfHxzLmM9PShZZigpLHZiKSkmJih3PXMuYix3Lmc8MCYmcy5kPjAmJihuTSh3LHcuZC1zLmQpLHMuYz09KFlmKCksdmIpJiZhcHQodyx3LmEtcy5kKSx3LmQ8PTAmJncuaT4wJiZrcyhlLHcsZS5jLmIsZS5jKSkpO2ZvcihvPW5ldyBTKHQuZik7by5hPG8uYy5jLmxlbmd0aDspcz11KFEobyksMTI5KSwoIXJ8fHMuYz09KFlmKCksdmIpKSYmKGQ9cy5hLGQuZzwwJiZzLmQ+MCYmKHhUKGQsZC5pLXMuZCkscy5jPT0oWWYoKSx2YikmJmd2KGQsZC5iLXMuZCksZC5pPD0wJiZkLmQ+MCYma3MobixkLG4uYy5iLG4uYykpKX1mdW5jdGlvbiBTbW4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLF87Zm9yKG1yKG4sIlByb2Nlc3NvciBjb21wdXRlIGZhbm91dCIsMSksbmwodC5iKSxubCh0LmEpLGQ9bnVsbCxvPXNpKGUuYiwwKTshZCYmby5iIT1vLmQuYzspaz11KGlpKG8pLDg2KSxCZShGZShLKGssKG1jKCksV3kpKSkpJiYoZD1rKTtmb3Iodz1uZXcgY3Msa3ModyxkLHcuYy5iLHcuYyksd2hlKHQsdyksXz1zaShlLmIsMCk7Xy5iIT1fLmQuYzspaz11KGlpKF8pLDg2KSxoPWpyKEsoaywobWMoKSxSUykpKSxzPWpjKHQuYixoKSE9bnVsbD91KGpjKHQuYixoKSwxOSkuYTowLGVlKGssbUcsZGUocykpLHI9MSsoamModC5hLGgpIT1udWxsP3UoamModC5hLGgpLDE5KS5hOjApLGVlKGssWG1lLGRlKHIpKTtvcihuKX1mdW5jdGlvbiBBbW4odCxlLG4scixzKXt2YXIgbyxoLGQsdyxrLF8sTSxCLHEsRztmb3IoQj1oZG4odCxuKSx3PTA7dzxlO3crKyl7Zm9yKFJtKHMsbikscT1uZXcgbGUsRz0oWm4oci5iPHIuZC5nYygpKSx1KHIuZC5YYihyLmM9ci5iKyspLDQwNykpLF89Qit3O188dC5iO18rKylkPUcsRz0oWm4oci5iPHIuZC5nYygpKSx1KHIuZC5YYihyLmM9ci5iKyspLDQwNykpLHVlKHEsbmV3IEZjZShkLEcsbikpO2ZvcihNPUIrdztNPHQuYjtNKyspWm4oci5iPjApLHIuYS5YYihyLmM9LS1yLmIpLE0+Qit3JiZEbChyKTtmb3IoaD1uZXcgUyhxKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoUShoKSw0MDcpLFJtKHIsbyk7aWYodzxlLTEpZm9yKGs9Qit3O2s8dC5iO2srKylabihyLmI+MCksci5hLlhiKHIuYz0tLXIuYil9fWZ1bmN0aW9uIExtbigpe3lpKCk7dmFyIHQsZSxuLHIscyxvO2lmKFBmdClyZXR1cm4gUGZ0O2Zvcih0PW5ldyBqbCg0KSx2eSh0LG5iKGR1dCwhMCkpLENDKHQsbmIoIk0iLCEwKSksQ0ModCxuYigiQyIsITApKSxvPW5ldyBqbCg0KSxyPTA7cjwxMTtyKyspcWMobyxyLHIpO3JldHVybiBlPW5ldyBqbCg0KSx2eShlLG5iKCJNIiwhMCkpLHFjKGUsNDQ0OCw0NjA3KSxxYyhlLDY1NDM4LDY1NDM5KSxzPW5ldyBsXygyKSx4MihzLHQpLHgyKHMsZkEpLG49bmV3IGxfKDIpLG4uJGwoQmoobyxuYigiTCIsITApKSksbi4kbChlKSxuPW5ldyBXbSgzLG4pLG49bmV3IHV3dChzLG4pLFBmdD1uLFBmdH1mdW5jdGlvbiBNbW4odCl7dmFyIGUsbjtpZihlPWpyKHplKHQsKGRpKCksR1MpKSksIUVuZShlLHQpJiYhczIodCxFRSkmJigoIXQuYSYmKHQuYT1uZXcgaGUoZHMsdCwxMCwxMSkpLHQuYSkuaSE9MHx8QmUoRmUoemUodCxXTykpKSkpaWYoZT09bnVsbHx8dXkoZSkubGVuZ3RoPT0wKXtpZighRW5lKFVuLHQpKXRocm93IG49WXIoWXIobmV3IEZsKCJVbmFibGUgdG8gbG9hZCBkZWZhdWx0IGxheW91dCBhbGdvcml0aG0gIiksVW4pLCIgZm9yIHVuY29uZmlndXJlZCBub2RlICIpLF9xKHQsbiksbnQobmV3IEIzKG4uYSkpfWVsc2UgdGhyb3cgbj1ZcihZcihuZXcgRmwoIkxheW91dCBhbGdvcml0aG0gJyIpLGUpLCInIG5vdCBmb3VuZCBmb3IgIiksX3EodCxuKSxudChuZXcgQjMobi5hKSl9ZnVuY3Rpb24gZ2F0KHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxfLE0sQixxO2lmKG49dC5pLGU9dC5uLHQuYj09MClmb3IocT1uLmMrZS5iLEI9bi5iLWUuYi1lLmMsaD10LmEsdz0wLF89aC5sZW5ndGg7dzxfOysrdylzPWhbd10samoocyxxLEIpO2Vsc2Ugcj1zc2UodCwhMSksamoodC5hWzBdLG4uYytlLmIsclswXSksamoodC5hWzJdLG4uYytuLmItZS5jLXJbMl0sclsyXSksTT1uLmItZS5iLWUuYyxyWzBdPjAmJihNLT1yWzBdK3QuYyxyWzBdKz10LmMpLHJbMl0+MCYmKE0tPXJbMl0rdC5jKSxyWzFdPWIuTWF0aC5tYXgoclsxXSxNKSxqaih0LmFbMV0sbi5jK2UuYityWzBdLShyWzFdLU0pLzIsclsxXSk7Zm9yKG89dC5hLGQ9MCxrPW8ubGVuZ3RoO2Q8azsrK2Qpcz1vW2RdLF90KHMsMzI2KSYmdShzLDMyNikuVGUoKX1mdW5jdGlvbiBEbW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLF8sTTtmb3IoTT1uZXcgQVEsTS5kPTAsaD1uZXcgUyh0LmIpO2guYTxoLmMuYy5sZW5ndGg7KW89dShRKGgpLDI5KSxNLmQrPW8uYS5jLmxlbmd0aDtmb3Iocj0wLHM9MCxNLmE9TnQoU3IsSnIsMjUsdC5iLmMubGVuZ3RoLDE1LDEpLGs9MCxfPTAsTS5lPU50KFNyLEpyLDI1LE0uZCwxNSwxKSxuPW5ldyBTKHQuYik7bi5hPG4uYy5jLmxlbmd0aDspZm9yKGU9dShRKG4pLDI5KSxlLnA9cisrLE0uYVtlLnBdPXMrKyxfPTAsdz1uZXcgUyhlLmEpO3cuYTx3LmMuYy5sZW5ndGg7KWQ9dShRKHcpLDEwKSxkLnA9aysrLE0uZVtkLnBdPV8rKztyZXR1cm4gTS5jPW5ldyBMJHQoTSksTS5iPUhkKE0uZCksY21uKE0sdCksTS5mPUhkKE0uZCksdW1uKE0sdCksTX1mdW5jdGlvbiBjbGUodCxlKXt2YXIgbixyLHMsbztmb3Iobz11KFBlKHQubix0Lm4uYy5sZW5ndGgtMSksMjExKS5kLHQucD1iLk1hdGgubWluKHQucCxlLmcpLHQucj1iLk1hdGgubWF4KHQucixvKSx0Lmc9Yi5NYXRoLm1heCh0LmcsZS5nKyh0LmIuYy5sZW5ndGg9PTE/MDp0LmkpKSx0Lm89Yi5NYXRoLm1pbih0Lm8sZS5mKSx0LmUrPWUuZisodC5iLmMubGVuZ3RoPT0xPzA6dC5pKSx0LmY9Yi5NYXRoLm1heCh0LmYsZS5mKSxzPXQubi5jLmxlbmd0aD4wPyh0Lm4uYy5sZW5ndGgtMSkqdC5pOjAscj1uZXcgUyh0Lm4pO3IuYTxyLmMuYy5sZW5ndGg7KW49dShRKHIpLDIxMSkscys9bi5hO3QuZD1zLHQuYT10LmUvdC5iLmMubGVuZ3RoLXQuaSooKHQuYi5jLmxlbmd0aC0xKS90LmIuYy5sZW5ndGgpLHozdCh0LmopfWZ1bmN0aW9uIHVsZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXyxNO2lmKF89RmUoSyhlLChuMSgpLG5iZSkpKSxfPT1udWxsfHwoSW4oXyksXykpe2ZvcihNPU50KHhsLGkwLDI1LGUuZS5jLmxlbmd0aCwxNiwxKSxoPUVwbihlKSxzPW5ldyBjcyxrPW5ldyBTKGUuZSk7ay5hPGsuYy5jLmxlbmd0aDspZD11KFEoayksMTQ0KSxuPXY1dCh0LGQsbnVsbCxudWxsLE0saCksbiYmKEJvKG4sZSksa3MocyxuLHMuYy5iLHMuYykpO2lmKHMuYj4xKWZvcihyPXNpKHMsMCk7ci5iIT1yLmQuYzspZm9yKG49dShpaShyKSwyMzEpLG89MCx3PW5ldyBTKG4uZSk7dy5hPHcuYy5jLmxlbmd0aDspZD11KFEodyksMTQ0KSxkLmI9bysrO3JldHVybiBzfXJldHVybiBMMSh1dChvdChjNm4sMSksZXh0LDIzMSwwLFtlXSkpfWZ1bmN0aW9uIGJkKHQpe3ZhciBlLG4scixzLG8saCxkO2lmKCF0Lmcpe2lmKGQ9bmV3IFZiLGU9YUEsaD1lLmEuemModCxlKSxoPT1udWxsKXtmb3Iocj1uZXcgbnIoUG8odCkpO3IuZSE9ci5pLmdjKCk7KW49dShkcihyKSwyNiksZ3MoZCxiZChuKSk7ZS5hLkJjKHQpIT1udWxsLGUuYS5nYygpPT0wfWZvcihzPWQuaSxvPSghdC5zJiYodC5zPW5ldyBoZShOdSx0LDIxLDE3KSksbmV3IG5yKHQucykpO28uZSE9by5pLmdjKCk7KytzKV90dCh1KGRyKG8pLDQ0OSkscyk7Z3MoZCwoIXQucyYmKHQucz1uZXcgaGUoTnUsdCwyMSwxNykpLHQucykpLGV5KGQpLHQuZz1uZXcgWm5lKHQsZCksdC5pPXUoZC5nLDI0NyksdC5pPT1udWxsJiYodC5pPUFmdCksdC5wPW51bGwsaGwodCkuYiY9LTV9cmV0dXJuIHQuZ31mdW5jdGlvbiBwYXQodCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLF8sTSxCLHEsRztpZihyPXQuaSxuPXQubix0LmI9PTApZT1pc2UodCwhMSksJGoodC5hWzBdLHIuZCtuLmQsZVswXSksJGoodC5hWzJdLHIuZCtyLmEtbi5hLWVbMl0sZVsyXSksQj1yLmEtbi5kLW4uYSxNPUIsZVswXT4wJiYoZVswXSs9dC5jLE0tPWVbMF0pLGVbMl0+MCYmKE0tPWVbMl0rdC5jKSxlWzFdPWIuTWF0aC5tYXgoZVsxXSxNKSwkaih0LmFbMV0sci5kK24uZCtlWzBdLShlWzFdLU0pLzIsZVsxXSk7ZWxzZSBmb3IoRz1yLmQrbi5kLHE9ci5hLW4uZC1uLmEsaD10LmEsdz0wLF89aC5sZW5ndGg7dzxfOysrdylzPWhbd10sJGoocyxHLHEpO2ZvcihvPXQuYSxkPTAsaz1vLmxlbmd0aDtkPGs7KytkKXM9b1tkXSxfdChzLDMyNikmJnUocywzMjYpLlVlKCl9ZnVuY3Rpb24gSW1uKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxfO2ZvcihfPU50KFNyLEpyLDI1LHQuYi5jLmxlbmd0aCsxLDE1LDEpLGs9bmV3IFFzLHI9MCxvPW5ldyBTKHQuYik7by5hPG8uYy5jLmxlbmd0aDspe2ZvcihzPXUoUShvKSwyOSksX1tyKytdPWsuYS5nYygpLHc9bmV3IFMocy5hKTt3LmE8dy5jLmMubGVuZ3RoOylmb3IoaD11KFEodyksMTApLG49bmV3IGFyKGxyKCRzKGgpLmEuS2MoKSxuZXcgSCkpO1ZyKG4pOyllPXUoSXIobiksMTcpLGsuYS56YyhlLGspO2ZvcihkPW5ldyBTKHMuYSk7ZC5hPGQuYy5jLmxlbmd0aDspZm9yKGg9dShRKGQpLDEwKSxuPW5ldyBhcihscihVbyhoKS5hLktjKCksbmV3IEgpKTtWcihuKTspZT11KElyKG4pLDE3KSxrLmEuQmMoZSkhPW51bGx9cmV0dXJuIF99ZnVuY3Rpb24gbXEodCxlLG4scil7dmFyIHMsbyxoLGQsdztpZih3PWh1KHQuZS5UZygpLGUpLHM9dSh0LmcsMTE5KSxzbygpLHUoZSw2NikuT2ooKSl7Zm9yKGg9MDtoPHQuaTsrK2gpaWYobz1zW2hdLHcucmwoby5haygpKSYmU2kobyxuKSlyZXR1cm4hMH1lbHNlIGlmKG4hPW51bGwpe2ZvcihkPTA7ZDx0Lmk7KytkKWlmKG89c1tkXSx3LnJsKG8uYWsoKSkmJlNpKG4sby5kZCgpKSlyZXR1cm4hMDtpZihyKXtmb3IoaD0wO2g8dC5pOysraClpZihvPXNbaF0sdy5ybChvLmFrKCkpJiZHdChuKT09PUd0KGxudCh0LHUoby5kZCgpLDU2KSkpKXJldHVybiEwfX1lbHNlIGZvcihoPTA7aDx0Lmk7KytoKWlmKG89c1toXSx3LnJsKG8uYWsoKSkmJm8uZGQoKT09bnVsbClyZXR1cm4hMTtyZXR1cm4hMX1mdW5jdGlvbiBsbGUodCxlLG4scil7dmFyIHMsbyxoLGQsdyxrO2lmKGs9aHUodC5lLlRnKCksZSksaD11KHQuZywxMTkpLEcwKHQuZSxlKSl7aWYoZS5oaSgpJiYobz14Nyh0LGUscixfdChlLDk5KSYmKHUoZSwxOCkuQmImUWEpIT0wKSxvPj0wJiZvIT1uKSl0aHJvdyBudChuZXcgUG4oWEkpKTtmb3Iocz0wLHc9MDt3PHQuaTsrK3cpaWYoZD1oW3ddLGsucmwoZC5haygpKSl7aWYocz09bilyZXR1cm4gdShsNCh0LHcsKHNvKCksdShlLDY2KS5PaigpP3Uociw3Mik6WWQoZSxyKSkpLDcyKTsrK3N9dGhyb3cgbnQobmV3IENvKFhDK24rTDIrcykpfWVsc2V7Zm9yKHc9MDt3PHQuaTsrK3cpaWYoZD1oW3ddLGsucmwoZC5haygpKSlyZXR1cm4gc28oKSx1KGUsNjYpLk9qKCk/ZDpkLmRkKCk7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIGhsZSh0LGUsbixyKXt2YXIgcyxvLGgsZDtmb3IoZD1uLGg9bmV3IFMoZS5hKTtoLmE8aC5jLmMubGVuZ3RoOyl7aWYobz11KFEoaCksMjIxKSxzPXUoby5iLDY1KSxydyh0LmIuYyxzLmIuYytzLmIuYik8PTAmJnJ3KHMuYi5jLHQuYi5jK3QuYi5iKTw9MCYmcncodC5iLmQscy5iLmQrcy5iLmEpPD0wJiZydyhzLmIuZCx0LmIuZCt0LmIuYSk8PTApe2lmKHJ3KHMuYi5jLHQuYi5jK3QuYi5iKT09MCYmci5hPDB8fHJ3KHMuYi5jK3MuYi5iLHQuYi5jKT09MCYmci5hPjB8fHJ3KHMuYi5kLHQuYi5kK3QuYi5hKT09MCYmci5iPDB8fHJ3KHMuYi5kK3MuYi5hLHQuYi5kKT09MCYmci5iPjApe2Q9MDticmVha319ZWxzZSBkPWIuTWF0aC5taW4oZCxob2UodCxzLHIpKTtkPWIuTWF0aC5taW4oZCxobGUodCxvLGQscikpfXJldHVybiBkfWZ1bmN0aW9uIHlJKHQsZSl7dmFyIG4scixzLG8saCxkLHc7aWYodC5iPDIpdGhyb3cgbnQobmV3IFBuKCJUaGUgdmVjdG9yIGNoYWluIG11c3QgY29udGFpbiBhdCBsZWFzdCBhIHNvdXJjZSBhbmQgYSB0YXJnZXQgcG9pbnQuIikpO2ZvcihzPShabih0LmIhPTApLHUodC5hLmEuYyw4KSksb2ooZSxzLmEscy5iKSx3PW5ldyBBNigoIWUuYSYmKGUuYT1uZXcgQnMoV2gsZSw1KSksZS5hKSksaD1zaSh0LDEpO2guYTx0LmItMTspZD11KGlpKGgpLDgpLHcuZSE9dy5pLmdjKCk/bj11KGRyKHcpLDQ2OSk6KG49KFR2KCkscj1uZXcgbXAsciksZmllKHcsbikpLEpidChuLGQuYSxkLmIpO2Zvcig7dy5lIT13LmkuZ2MoKTspZHIodyksdUModyk7bz0oWm4odC5iIT0wKSx1KHQuYy5iLmMsOCkpLGFqKGUsby5hLG8uYil9ZnVuY3Rpb24gZmxlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxfO2ZvcihuPTAscz1uZXcgUygoU24oMCx0LmMubGVuZ3RoKSx1KHQuY1swXSwxMDEpKS5nLmIuaik7cy5hPHMuYy5jLmxlbmd0aDspcj11KFEocyksMTEpLHIucD1uKys7Zm9yKGU9PShiZSgpLE9uKT9hYSh0LG5ldyBGWCk6YWEodCxuZXcgQlgpLGQ9MCxfPXQuYy5sZW5ndGgtMTtkPF87KWg9KFNuKGQsdC5jLmxlbmd0aCksdSh0LmNbZF0sMTAxKSksaz0oU24oXyx0LmMubGVuZ3RoKSx1KHQuY1tfXSwxMDEpKSxvPWU9PU9uP2guYzpoLmEsdz1lPT1Pbj9rLmE6ay5jLE1nKGgsZSwoTzEoKSxyRSksbyksTWcoayxlLG5FLHcpLCsrZCwtLV87ZD09XyYmTWcoKFNuKGQsdC5jLmxlbmd0aCksdSh0LmNbZF0sMTAxKSksZSwoTzEoKSxfeCksbnVsbCl9ZnVuY3Rpb24gT21uKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxfLE0sQixxLEcsVyxaLGJ0O3JldHVybiBNPXQuYS5pK3QuYS5nLzIsQj10LmEuaSt0LmEuZy8yLEc9ZS5pK2UuZy8yLFo9ZS5qK2UuZi8yLGQ9bmV3IFJlKEcsWiksaz11KHplKGUsKGRpKCksJHgpKSw4KSxrLmE9ay5hK00say5iPWsuYitCLG89KGQuYi1rLmIpLyhkLmEtay5hKSxyPWQuYi1vKmQuYSxXPW4uaStuLmcvMixidD1uLmorbi5mLzIsdz1uZXcgUmUoVyxidCksXz11KHplKG4sJHgpLDgpLF8uYT1fLmErTSxfLmI9Xy5iK0IsaD0ody5iLV8uYikvKHcuYS1fLmEpLHM9dy5iLWgqdy5hLHE9KHItcykvKGgtbyksay5hPHEmJmQuYTxxfHxxPGsuYSYmcTxkLmE/ITE6IShfLmE8cSYmdy5hPHF8fHE8Xy5hJiZxPHcuYSl9ZnVuY3Rpb24gTm1uKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxfLE0sQixxO2lmKEI9dSh0cih0LmMsZSksMTgzKSwhQil0aHJvdyBudChuZXcgb2QoIkVkZ2UgZGlkIG5vdCBleGlzdCBpbiBpbnB1dC4iKSk7cmV0dXJuIGs9czcoQiksbz1mTSgoIWUuYSYmKGUuYT1uZXcgaGUodXMsZSw2LDYpKSxlLmEpKSxkPSFvLGQmJihxPW5ldyB5ZyxuPW5ldyB3S3QodCxrLHEpLGpZZSgoIWUuYSYmKGUuYT1uZXcgaGUodXMsZSw2LDYpKSxlLmEpLG4pLFFmKEIsZDh0LHEpKSxzPXMyKGUsKGRpKCksczUpKSxzJiYoXz11KHplKGUsczUpLDc0KSxoPSFffHxyWHQoXyksdz0haCx3JiYoTT1uZXcgeWcscj1uZXcgaHp0KE0pLF9hKF8sciksUWYoQiwianVuY3Rpb25Qb2ludHMiLE0pKSksZDgoQiwiY29udGFpbmVyIixyRChlKS5rKSxudWxsfWZ1bmN0aW9uIGU2dCh0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssXzt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmM9bix0aGlzLmU9TDEodXQob3QoczZuLDEpLE1lLDE2OCwwLFtuZXcgRTYodCxlKSxuZXcgRTYoZSxuKSxuZXcgRTYobix0KV0pKSx0aGlzLmY9TDEodXQob3QobmEsMSkscmUsOCwwLFt0LGUsbl0pKSx0aGlzLmQ9KHI9ZmEodWModGhpcy5iKSx0aGlzLmEpLHM9ZmEodWModGhpcy5jKSx0aGlzLmEpLG89ZmEodWModGhpcy5jKSx0aGlzLmIpLGg9ci5hKih0aGlzLmEuYSt0aGlzLmIuYSkrci5iKih0aGlzLmEuYit0aGlzLmIuYiksZD1zLmEqKHRoaXMuYS5hK3RoaXMuYy5hKStzLmIqKHRoaXMuYS5iK3RoaXMuYy5iKSx3PTIqKHIuYSpvLmItci5iKm8uYSksaz0ocy5iKmgtci5iKmQpL3csXz0oci5hKmQtcy5hKmgpL3csbmV3IFJlKGssXykpfWZ1bmN0aW9uIGRsZSh0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssXyxNLEIscSxHO2lmKEI9bmV3IEhtKHQucCksUWYoZSxmaSxCKSxuJiYhKHQuZj9KTSh0LmYpOm51bGwpLmEuZGMoKSlmb3IoXz1uZXcgeWcsUWYoZSwibG9ncyIsXyksZD0wLEc9bmV3IEwoKHQuZj9KTSh0LmYpOm51bGwpLmIuS2MoKSk7Ry5iLk9iKCk7KXE9anIoRy5iLlBiKCkpLE09bmV3IEhtKHEpLFhtKF8sZCksQXJ0KF8sZCxNKSwrK2Q7aWYociYmKGs9bmV3IHlUKHQucSksUWYoZSwiZXhlY3V0aW9uVGltZSIsaykpLCFKTSh0LmEpLmEuZGMoKSlmb3IoaD1uZXcgeWcsUWYoZSxVY3QsaCksZD0wLG89bmV3IEwoSk0odC5hKS5iLktjKCkpO28uYi5PYigpOylzPXUoby5iLlBiKCksMTk0OSksdz1uZXcgdzYsWG0oaCxkKSxBcnQoaCxkLHcpLGRsZShzLHcsbixyKSwrK2R9ZnVuY3Rpb24gZHcodCxlKXt2YXIgbixyLHMsbyxoLGQ7Zm9yKG89dC5jLGg9dC5kLEJhKHQsbnVsbCkscGEodCxudWxsKSxlJiZCZShGZShLKGgsKGFlKCksQmx0KSkpKT9CYSh0LEs1dChoLmksKGhvKCksc3UpLChiZSgpLEhuKSkpOkJhKHQsaCksZSYmQmUoRmUoSyhvLChhZSgpLGpsdCkpKSk/cGEodCxLNXQoby5pLChobygpLGFsKSwoYmUoKSxCbikpKTpwYSh0LG8pLHI9bmV3IFModC5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoUShyKSw3MCkscz11KEsobiwoeGUoKSxEZCkpLDI3Mikscz09KEQxKCksX0UpP2VlKG4sRGQsWXkpOnM9PVl5JiZlZShuLERkLF9FKTtkPUJlKEZlKEsodCwoYWUoKSxIMSkpKSksZWUodCxIMSwoRm4oKSwhZCkpLHQuYT1CRCh0LmEpfWZ1bmN0aW9uIFBtbih0LGUsbil7dmFyIHIscyxvLGgsZCx3O2ZvcihyPTAsbz1uZXcgbnIoKCF0LmEmJih0LmE9bmV3IGhlKGRzLHQsMTAsMTEpKSx0LmEpKTtvLmUhPW8uaS5nYygpOylzPXUoZHIobyksMzMpLGg9IiIsKCFzLm4mJihzLm49bmV3IGhlKFlvLHMsMSw3KSkscy5uKS5pPT0wfHwoaD11KEF0KCghcy5uJiYocy5uPW5ldyBoZShZbyxzLDEsNykpLHMubiksMCksMTM3KS5hKSxkPW5ldyBZWXQoaCksQm8oZCxzKSxlZShkLChVcCgpLFR4KSxzKSxkLmI9cisrLGQuZC5hPXMuaStzLmcvMixkLmQuYj1zLmorcy5mLzIsZC5lLmE9Yi5NYXRoLm1heChzLmcsMSksZC5lLmI9Yi5NYXRoLm1heChzLmYsMSksdWUoZS5lLGQpLGx1KG4uZixzLGQpLHc9dSh6ZShzLChuMSgpLGZFdCkpLDk4KSx3PT0odmEoKSxrYikmJih3PVUxKX1mdW5jdGlvbiBGbW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFo7bj1JdihuZXcgS2IsdC5mKSxrPXQuaVtlLmMuaS5wXSxxPXQuaVtlLmQuaS5wXSx3PWUuYyxCPWUuZCxkPXcuYS5iLE09Qi5hLmIsay5ifHwoZCs9dy5uLmIpLHEuYnx8KE0rPUIubi5iKSxfPUNzKGIuTWF0aC5tYXgoMCxkLU0pKSxoPUNzKGIuTWF0aC5tYXgoMCxNLWQpKSxHPShXPWIuTWF0aC5tYXgoMSx1KEsoZSwoeGUoKSxQeCkpLDE5KS5hKSxaPVF3dChlLmMuaS5rLGUuZC5pLmspLFcqWikscz15ZihsZih1ZihjZihoZihuZXcgU2gsRyksaCksbiksdSh0cih0LmssZS5jKSwxMjEpKSksbz15ZihsZih1ZihjZihoZihuZXcgU2gsRyksXyksbiksdSh0cih0LmssZS5kKSwxMjEpKSkscj1uZXcgUVZ0KHMsbyksdC5jW2UucF09cn1mdW5jdGlvbiBCbW4odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrO2ZvcihoPW5ldyAkbGUodCxlLG4pLHc9bmV3IHhhKHIsMCkscz0hMTt3LmI8dy5kLmdjKCk7KWQ9KFpuKHcuYjx3LmQuZ2MoKSksdSh3LmQuWGIody5jPXcuYisrKSwyMzMpKSxkPT1lfHxkPT1uP0RsKHcpOiFzJiZadChUMShkLmcsZC5kWzBdKS5hKT5adChUMShoLmcsaC5kWzBdKS5hKT8oWm4ody5iPjApLHcuYS5YYih3LmM9LS13LmIpLFJtKHcsaCkscz0hMCk6ZC5lJiZkLmUuZ2MoKT4wJiYobz0oIWQuZSYmKGQuZT1uZXcgbGUpLGQuZSkuTWMoZSksaz0oIWQuZSYmKGQuZT1uZXcgbGUpLGQuZSkuTWMobiksKG98fGspJiYoKCFkLmUmJihkLmU9bmV3IGxlKSxkLmUpLkZjKGgpLCsraC5jKSk7c3x8KHIuY1tyLmMubGVuZ3RoXT1oKX1mdW5jdGlvbiBnbGUodCl7dmFyIGUsbixyO2lmKFYzKHUoSyh0LCh4ZSgpLHdzKSksOTgpKSlmb3Iobj1uZXcgUyh0LmopO24uYTxuLmMuYy5sZW5ndGg7KWU9dShRKG4pLDExKSxlLmo9PShiZSgpLGFjKSYmKHI9dShLKGUsKGFlKCksc2wpKSwxMCkscj9VcyhlLHUoSyhyLGdjKSw2MSkpOmUuZS5jLmxlbmd0aC1lLmcuYy5sZW5ndGg8MD9VcyhlLEhuKTpVcyhlLEJuKSk7ZWxzZXtmb3Iobj1uZXcgUyh0LmopO24uYTxuLmMuYy5sZW5ndGg7KWU9dShRKG4pLDExKSxyPXUoSyhlLChhZSgpLHNsKSksMTApLHI/VXMoZSx1KEsocixnYyksNjEpKTplLmUuYy5sZW5ndGgtZS5nLmMubGVuZ3RoPDA/VXMoZSwoYmUoKSxIbikpOlVzKGUsKGJlKCksQm4pKTtlZSh0LHdzLCh2YSgpLFNFKSl9fWZ1bmN0aW9uIHhJKHQpe3ZhciBlLG4scjtzd2l0Y2godCl7Y2FzZSA5MTpjYXNlIDkzOmNhc2UgNDU6Y2FzZSA5NDpjYXNlIDQ0OmNhc2UgOTI6cj0iXFwiK1N0cmluZy5mcm9tQ2hhckNvZGUodCZNcyk7YnJlYWs7Y2FzZSAxMjpyPSJcXGYiO2JyZWFrO2Nhc2UgMTA6cj0iXFxuIjticmVhaztjYXNlIDEzOnI9IlxcciI7YnJlYWs7Y2FzZSA5OnI9IlxcdCI7YnJlYWs7Y2FzZSAyNzpyPSJcXGUiO2JyZWFrO2RlZmF1bHQ6dDwzMj8obj0oZT10Pj4+MCwiMCIrZS50b1N0cmluZygxNikpLHI9IlxceCIrQmwobixuLmxlbmd0aC0yLG4ubGVuZ3RoKSk6dD49UWE/KG49KGU9dD4+PjAsIjAiK2UudG9TdHJpbmcoMTYpKSxyPSJcXHYiK0JsKG4sbi5sZW5ndGgtNixuLmxlbmd0aCkpOnI9IiIrU3RyaW5nLmZyb21DaGFyQ29kZSh0Jk1zKX1yZXR1cm4gcn1mdW5jdGlvbiBiYXQodCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLF8sTTtpZihoPXQuZSx3PWUuZSx3PT0wKXJldHVybiB0O2lmKGg9PTApcmV0dXJuIGUuZT09MD9lOm5ldyBZMygtZS5lLGUuZCxlLmEpO2lmKG89dC5kLGQ9ZS5kLG8rZD09MilyZXR1cm4gbj1Hcyh0LmFbMF0scG8pLHI9R3MoZS5hWzBdLHBvKSxoPDAmJihuPUQ4KG4pKSx3PDAmJihyPUQ4KHIpKSxLRChRcChuLHIpKTtpZihzPW8hPWQ/bz5kPzE6LTE6SXl0KHQuYSxlLmEsbykscz09LTEpTT0tdyxfPWg9PXc/UnJ0KGUuYSxkLHQuYSxvKTokcnQoZS5hLGQsdC5hLG8pO2Vsc2UgaWYoTT1oLGg9PXcpe2lmKHM9PTApcmV0dXJuIGViKCksWTc7Xz1ScnQodC5hLG8sZS5hLGQpfWVsc2UgXz0kcnQodC5hLG8sZS5hLGQpO3JldHVybiBrPW5ldyBZMyhNLF8ubGVuZ3RoLF8pLE9fKGspLGt9ZnVuY3Rpb24gbjZ0KHQpe3ZhciBlLG4scixzLG8saDtmb3IodGhpcy5lPW5ldyBsZSx0aGlzLmE9bmV3IGxlLG49dC5iLTE7bjwzO24rKyl1OCh0LDAsdShlMSh0LDApLDgpKTtpZih0LmI8NCl0aHJvdyBudChuZXcgUG4oIkF0IChsZWFzdCBkaW1lbnNpb24gKyAxKSBjb250cm9sIHBvaW50cyBhcmUgbmVjZXNzYXJ5ISIpKTtmb3IodGhpcy5iPTMsdGhpcy5kPSEwLHRoaXMuYz0hMSxrYm4odGhpcyx0LmIrdGhpcy5iLTEpLGg9bmV3IGxlLG89bmV3IFModGhpcy5lKSxlPTA7ZTx0aGlzLmItMTtlKyspdWUoaCx2ZShRKG8pKSk7Zm9yKHM9c2kodCwwKTtzLmIhPXMuZC5jOylyPXUoaWkocyksOCksdWUoaCx2ZShRKG8pKSksdWUodGhpcy5hLG5ldyBlUXQocixoKSksU24oMCxoLmMubGVuZ3RoKSxoLmMuc3BsaWNlKDAsMSl9ZnVuY3Rpb24gcGxlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxfO2ZvcihvPW5ldyBTKHQuYik7by5hPG8uYy5jLmxlbmd0aDspZm9yKHM9dShRKG8pLDI5KSxkPW5ldyBTKHMuYSk7ZC5hPGQuYy5jLmxlbmd0aDspZm9yKGg9dShRKGQpLDEwKSxoLms9PShHbigpLFBsKSYmKHc9KGs9dShJcihuZXcgYXIobHIoVW8oaCkuYS5LYygpLG5ldyBIKSkpLDE3KSxfPXUoSXIobmV3IGFyKGxyKCRzKGgpLmEuS2MoKSxuZXcgSCkpKSwxNyksIUJlKEZlKEsoaywoYWUoKSxIMSkpKSl8fCFCZShGZShLKF8sSDEpKSk/ZTpWbmUoZSkpLG94KGgsdykpLHI9bmV3IGFyKGxyKCRzKGgpLmEuS2MoKSxuZXcgSCkpO1ZyKHIpOyluPXUoSXIociksMTcpLHc9QmUoRmUoSyhuLChhZSgpLEgxKSkpKT9WbmUoZSk6ZSxCbmUobix3KX1mdW5jdGlvbiBSbW4odCxlLG4scixzKXt2YXIgbyxoLGQ7aWYobi5mPj1lLm8mJm4uZjw9ZS5mfHxlLmEqLjU8PW4uZiYmZS5hKjEuNT49bi5mKXtpZihoPXUoUGUoZS5uLGUubi5jLmxlbmd0aC0xKSwyMTEpLGguZStoLmQrbi5nK3M8PXImJihvPXUoUGUoZS5uLGUubi5jLmxlbmd0aC0xKSwyMTEpLG8uZi10LmYrbi5mPD10LmJ8fHQuYS5jLmxlbmd0aD09MSkpcmV0dXJuIGUzdChlLG4pLCEwO2lmKGUucytuLmc8PXImJihlLnQrZS5kK24uZitzPD10LmJ8fHQuYS5jLmxlbmd0aD09MSkpcmV0dXJuIHVlKGUuYixuKSxkPXUoUGUoZS5uLGUubi5jLmxlbmd0aC0xKSwyMTEpLHVlKGUubixuZXcgZiQoZS5zLGQuZitkLmErZS5pLGUuaSkpLEIzdCh1KFBlKGUubixlLm4uYy5sZW5ndGgtMSksMjExKSxuKSxjbGUoZSxuKSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBibGUodCxlLG4pe3ZhciByLHMsbyxoO3JldHVybiB0LmVqKCk/KHM9bnVsbCxvPXQuZmooKSxyPXQuWmkoMSxoPVhydCh0LGUsbiksbixlLG8pLHQuYmooKSYmISh0Lm5pKCkmJmghPW51bGw/U2koaCxuKTpHdChoKT09PUd0KG4pKT8oaCE9bnVsbCYmKHM9dC5kaihoLHMpKSxzPXQuY2oobixzKSx0LmlqKCkmJihzPXQubGooaCxuLHMpKSxzPyhzLkVpKHIpLHMuRmkoKSk6dC4kaShyKSk6KHQuaWooKSYmKHM9dC5saihoLG4scykpLHM/KHMuRWkocikscy5GaSgpKTp0LiRpKHIpKSxoKTooaD1YcnQodCxlLG4pLHQuYmooKSYmISh0Lm5pKCkmJmghPW51bGw/U2koaCxuKTpHdChoKT09PUd0KG4pKSYmKHM9bnVsbCxoIT1udWxsJiYocz10LmRqKGgsbnVsbCkpLHM9dC5jaihuLHMpLHMmJnMuRmkoKSksaCl9ZnVuY3Rpb24geUModCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrO2UlPTI0LHQucS5nZXRIb3VycygpIT1lJiYocj1uZXcgYi5EYXRlKHQucS5nZXRUaW1lKCkpLHIuc2V0RGF0ZShyLmdldERhdGUoKSsxKSxkPXQucS5nZXRUaW1lem9uZU9mZnNldCgpLXIuZ2V0VGltZXpvbmVPZmZzZXQoKSxkPjAmJih3PWQvNjB8MCxrPWQlNjAscz10LnEuZ2V0RGF0ZSgpLG49dC5xLmdldEhvdXJzKCksbit3Pj0yNCYmKytzLG89bmV3IGIuRGF0ZSh0LnEuZ2V0RnVsbFllYXIoKSx0LnEuZ2V0TW9udGgoKSxzLGUrdyx0LnEuZ2V0TWludXRlcygpK2ssdC5xLmdldFNlY29uZHMoKSx0LnEuZ2V0TWlsbGlzZWNvbmRzKCkpLHQucS5zZXRUaW1lKG8uZ2V0VGltZSgpKSkpLGg9dC5xLmdldFRpbWUoKSx0LnEuc2V0VGltZShoKzM2ZTUpLHQucS5nZXRIb3VycygpIT1lJiZ0LnEuc2V0VGltZShoKX1mdW5jdGlvbiBqbW4odCxlKXt2YXIgbixyLHMsbyxoO2lmKG1yKGUsIlBhdGgtTGlrZSBHcmFwaCBXcmFwcGluZyIsMSksdC5iLmMubGVuZ3RoPT0wKXtvcihlKTtyZXR1cm59aWYocz1uZXcgdTV0KHQpLGg9KHMuaT09bnVsbCYmKHMuaT1ueXQocyxuZXcgT0YpKSxadChzLmkpKnMuZiksbj1oLyhzLmk9PW51bGwmJihzLmk9bnl0KHMsbmV3IE9GKSksWnQocy5pKSkscy5iPm4pe29yKGUpO3JldHVybn1zd2l0Y2godShLKHQsKHhlKCksc2h0KSksMzM3KS5nKXtjYXNlIDI6bz1uZXcgUEY7YnJlYWs7Y2FzZSAwOm89bmV3IElGO2JyZWFrO2RlZmF1bHQ6bz1uZXcgRkZ9aWYocj1vLlZmKHQscyksIW8uV2YoKSlzd2l0Y2godShLKHQsYUcpLDMzOCkuZyl7Y2FzZSAyOnI9Zm9lKHMscik7YnJlYWs7Y2FzZSAxOnI9aGFlKHMscil9RnluKHQscyxyKSxvcihlKX1mdW5jdGlvbiAkbW4odCxlKXt2YXIgbixyLHMsbztpZihUcm4odC5kLHQuZSksdC5jLmEuJGIoKSxadCh2ZShLKGUuaiwoeGUoKSxZVikpKSkhPTB8fFp0KHZlKEsoZS5qLFlWKSkpIT0wKWZvcihuPU43LEd0KEsoZS5qLHBiKSkhPT1HdCgoajAoKSxiYikpJiZlZShlLmosKGFlKCksTXcpLChGbigpLCEwKSksbz11KEsoZS5qLFNTKSwxOSkuYSxzPTA7czxvJiYocj15bW4odCxlKSwhKHI8biYmKG49cixubmUodCksbj09MCkpKTtzKyspO2Vsc2UgZm9yKG49VGksR3QoSyhlLmoscGIpKSE9PUd0KChqMCgpLGJiKSkmJmVlKGUuaiwoYWUoKSxNdyksKEZuKCksITApKSxvPXUoSyhlLmosU1MpLDE5KS5hLHM9MDtzPG8mJihyPW5sZSh0LGUpLCEocjxuJiYobj1yLG5uZSh0KSxuPT0wKSkpO3MrKyk7fWZ1bmN0aW9uIHptbih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGs7Zm9yKGg9bmV3IGxlLGQ9MCxuPTAsdz0wO2Q8ZS5jLmxlbmd0aC0xJiZuPHQuZ2MoKTspe2ZvcihyPXUodC5YYihuKSwxOSkuYSt3OyhTbihkKzEsZS5jLmxlbmd0aCksdShlLmNbZCsxXSwxOSkpLmE8cjspKytkO2ZvcihrPTAsbz1yLShTbihkLGUuYy5sZW5ndGgpLHUoZS5jW2RdLDE5KSkuYSxzPShTbihkKzEsZS5jLmxlbmd0aCksdShlLmNbZCsxXSwxOSkpLmEtcixvPnMmJisrayx1ZShoLChTbihkK2ssZS5jLmxlbmd0aCksdShlLmNbZCtrXSwxOSkpKSx3Kz0oU24oZCtrLGUuYy5sZW5ndGgpLHUoZS5jW2Qra10sMTkpKS5hLXIsKytuO248dC5nYygpJiZ1KHQuWGIobiksMTkpLmErdzw9KFNuKGQrayxlLmMubGVuZ3RoKSx1KGUuY1tkK2tdLDE5KSkuYTspKytuO2QrPTEra31yZXR1cm4gaH1mdW5jdGlvbiB2YXQodCl7dmFyIGUsbixyLHMsbyxoLGQ7aWYoIXQuZCl7aWYoZD1uZXcgQTMsZT1hQSxvPWUuYS56Yyh0LGUpLG89PW51bGwpe2ZvcihyPW5ldyBucihQbyh0KSk7ci5lIT1yLmkuZ2MoKTspbj11KGRyKHIpLDI2KSxncyhkLHZhdChuKSk7ZS5hLkJjKHQpIT1udWxsLGUuYS5nYygpPT0wfWZvcihoPWQuaSxzPSghdC5xJiYodC5xPW5ldyBoZShZaCx0LDExLDEwKSksbmV3IG5yKHQucSkpO3MuZSE9cy5pLmdjKCk7KytoKXUoZHIocyksMzk5KTtncyhkLCghdC5xJiYodC5xPW5ldyBoZShZaCx0LDExLDEwKSksdC5xKSksZXkoZCksdC5kPW5ldyBIMygodShBdChLdCgoenAoKSxBbikubyksOSksMTgpLGQuaSksZC5nKSx0LmU9dShkLmcsNjczKSx0LmU9PW51bGwmJih0LmU9cjVlKSxobCh0KS5iJj0tMTd9cmV0dXJuIHQuZH1mdW5jdGlvbiB4Nyh0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGs7aWYoaz1odSh0LmUuVGcoKSxlKSx3PTAscz11KHQuZywxMTkpLHNvKCksdShlLDY2KS5PaigpKXtmb3IoaD0wO2g8dC5pOysraClpZihvPXNbaF0say5ybChvLmFrKCkpKXtpZihTaShvLG4pKXJldHVybiB3Oysrd319ZWxzZSBpZihuIT1udWxsKXtmb3IoZD0wO2Q8dC5pOysrZClpZihvPXNbZF0say5ybChvLmFrKCkpKXtpZihTaShuLG8uZGQoKSkpcmV0dXJuIHc7Kyt3fWlmKHIpe2Zvcih3PTAsaD0wO2g8dC5pOysraClpZihvPXNbaF0say5ybChvLmFrKCkpKXtpZihHdChuKT09PUd0KGxudCh0LHUoby5kZCgpLDU2KSkpKXJldHVybiB3Oysrd319fWVsc2UgZm9yKGg9MDtoPHQuaTsrK2gpaWYobz1zW2hdLGsucmwoby5haygpKSl7aWYoby5kZCgpPT1udWxsKXJldHVybiB3Oysrd31yZXR1cm4tMX1mdW5jdGlvbiBxbW4odCxlLG4scixzKXt2YXIgbyxoLGQsdyxrLF8sTSxCLHE7Zm9yKHBuKCksYWEodCxuZXcgJFopLGg9VU0odCkscT1uZXcgbGUsQj1uZXcgbGUsZD1udWxsLHc9MDtoLmIhPTA7KW89dShoLmI9PTA/bnVsbDooWm4oaC5iIT0wKSxmaChoLGguYS5hKSksMTU3KSwhZHx8SHUoZCkqTGwoZCkvMjxIdShvKSpMbChvKT8oZD1vLHEuY1txLmMubGVuZ3RoXT1vKToodys9SHUobykqTGwobyksQi5jW0IuYy5sZW5ndGhdPW8sQi5jLmxlbmd0aD4xJiYodz5IdShkKSpMbChkKS8yfHxoLmI9PTApJiYoTT1uZXcgVSQoQiksXz1IdShkKS9MbChkKSxrPUlhdChNLGUsbmV3IHY2LG4scixzLF8pLEZpKEtmKE0uZSksayksZD1NLHEuY1txLmMubGVuZ3RoXT1NLHc9MCxCLmM9TnQoUW4sTWUsMSwwLDUsMSkpKTtyZXR1cm4gUnMocSxCKSxxfWZ1bmN0aW9uIEhtbih0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssXyxNLEIscSxHLFc7aWYobi5taChlKSYmKF89KHE9ZSxxP3Uociw0OSkueGgocSk6bnVsbCksXykpaWYoVz1uLmJoKGUsdC5hKSxHPWUudCxHPjF8fEc9PS0xKWlmKE09dShXLDY5KSxCPXUoXyw2OSksTS5kYygpKUIuJGIoKTtlbHNlIGZvcihoPSEhb28oZSksbz0wLGQ9dC5hP00uS2MoKTpNLlpoKCk7ZC5PYigpOylrPXUoZC5QYigpLDU2KSxzPXUoV3YodCxrKSw1Nikscz8oaD8odz1CLlhjKHMpLHc9PS0xP0IuWGgobyxzKTpvIT13JiZCLmppKG8scykpOkIuWGgobyxzKSwrK28pOnQuYiYmIWgmJihCLlhoKG8sayksKytvKTtlbHNlIFc9PW51bGw/Xy5XYihudWxsKToocz1Xdih0LFcpLHM9PW51bGw/dC5iJiYhb28oZSkmJl8uV2IoVyk6Xy5XYihzKSl9ZnVuY3Rpb24gVm1uKHQsZSl7dmFyIG4scixzLG8saCxkLHcsaztmb3Iobj1uZXcgU1kscz1uZXcgYXIobHIoVW8oZSkuYS5LYygpLG5ldyBIKSk7VnIocyk7KWlmKHI9dShJcihzKSwxNyksIVdhKHIpJiYoZD1yLmMuaSxtNHQoZCx1VikpKXtpZihrPU41dCh0LGQsdVYsY1YpLGs9PS0xKWNvbnRpbnVlO24uYj1iLk1hdGgubWF4KG4uYixrKSwhbi5hJiYobi5hPW5ldyBsZSksdWUobi5hLGQpfWZvcihoPW5ldyBhcihscigkcyhlKS5hLktjKCksbmV3IEgpKTtWcihoKTspaWYobz11KElyKGgpLDE3KSwhV2EobykmJih3PW8uZC5pLG00dCh3LGNWKSkpe2lmKGs9TjV0KHQsdyxjVix1Viksaz09LTEpY29udGludWU7bi5kPWIuTWF0aC5tYXgobi5kLGspLCFuLmMmJihuLmM9bmV3IGxlKSx1ZShuLmMsdyl9cmV0dXJuIG59ZnVuY3Rpb24gdmxlKHQpe2c3KCk7dmFyIGUsbixyLHM7aWYoZT1Dcyh0KSx0PG9TLmxlbmd0aClyZXR1cm4gb1NbZV07aWYodDw9NTApcmV0dXJuIGhJKChlYigpLEx1dCksZSk7aWYodDw9VmcpcmV0dXJuIEg2KGhJKEV4WzFdLGUpLGUpO2lmKHQ+MWU2KXRocm93IG50KG5ldyBwUigicG93ZXIgb2YgdGVuIHRvbyBiaWciKSk7aWYodDw9VGkpcmV0dXJuIEg2KGhJKEV4WzFdLGUpLGUpO2ZvcihyPWhJKEV4WzFdLFRpKSxzPXIsbj1BdSh0LVRpKSxlPUNzKHQlVGkpO19jKG4sVGkpPjA7KXM9dDQocyxyKSxuPVFwKG4sVGkpO2ZvcihzPXQ0KHMsaEkoRXhbMV0sZSkpLHM9SDYocyxUaSksbj1BdSh0LVRpKTtfYyhuLFRpKT4wOylzPUg2KHMsVGkpLG49UXAobixUaSk7cmV0dXJuIHM9SDYocyxlKSxzfWZ1bmN0aW9uIEdtbih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXztmb3IobXIoZSwiSGllcmFyY2hpY2FsIHBvcnQgZHVtbXkgc2l6ZSBwcm9jZXNzaW5nIiwxKSx3PW5ldyBsZSxfPW5ldyBsZSxyPVp0KHZlKEsodCwoeGUoKSxaNCkpKSksbj1yKjIsbz1uZXcgUyh0LmIpO28uYTxvLmMuYy5sZW5ndGg7KXtmb3Iocz11KFEobyksMjkpLHcuYz1OdChRbixNZSwxLDAsNSwxKSxfLmM9TnQoUW4sTWUsMSwwLDUsMSksZD1uZXcgUyhzLmEpO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShRKGQpLDEwKSxoLms9PShHbigpLElzKSYmKGs9dShLKGgsKGFlKCksZ2MpKSw2MSksaz09KGJlKCksT24pP3cuY1t3LmMubGVuZ3RoXT1oOms9PXlyJiYoXy5jW18uYy5sZW5ndGhdPWgpKTtIb2UodywhMCxuKSxIb2UoXywhMSxuKX1vcihlKX1mdW5jdGlvbiBVbW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdzttcihlLCJMYXllciBjb25zdHJhaW50IHBvc3Rwcm9jZXNzaW5nIiwxKSx3PXQuYix3LmMubGVuZ3RoIT0wJiYocj0oU24oMCx3LmMubGVuZ3RoKSx1KHcuY1swXSwyOSkpLGg9dShQZSh3LHcuYy5sZW5ndGgtMSksMjkpLG49bmV3IExoKHQpLG89bmV3IExoKHQpLE13bih0LHIsaCxuLG8pLG4uYS5jLmxlbmd0aD09MHx8KFVtKDAsdy5jLmxlbmd0aCksV1Qody5jLDAsbikpLG8uYS5jLmxlbmd0aD09MHx8KHcuY1t3LmMubGVuZ3RoXT1vKSksZWEodCwoYWUoKSxGbHQpKSYmKHM9bmV3IExoKHQpLGQ9bmV3IExoKHQpLE12bih0LHMsZCkscy5hLmMubGVuZ3RoPT0wfHwoVW0oMCx3LmMubGVuZ3RoKSxXVCh3LmMsMCxzKSksZC5hLmMubGVuZ3RoPT0wfHwody5jW3cuYy5sZW5ndGhdPWQpKSxvcihlKX1mdW5jdGlvbiB3bGUodCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLF87Zm9yKHc9bmV3IFModC5hKTt3LmE8dy5jLmMubGVuZ3RoOylpZihkPXUoUSh3KSwxMCksZC5rPT0oR24oKSxJcykmJihzPXUoSyhkLChhZSgpLGdjKSksNjEpLHM9PShiZSgpLEhuKXx8cz09Qm4pKWZvcihyPW5ldyBhcihscih6MChkKS5hLktjKCksbmV3IEgpKTtWcihyKTspbj11KElyKHIpLDE3KSxlPW4uYSxlLmIhPTAmJihrPW4uYyxrLmk9PWQmJihvPShabihlLmIhPTApLHUoZS5hLmEuYyw4KSksby5iPW5jKHV0KG90KG5hLDEpLHJlLDgsMCxbay5pLm4say5uLGsuYV0pKS5iKSxfPW4uZCxfLmk9PWQmJihoPShabihlLmIhPTApLHUoZS5jLmIuYyw4KSksaC5iPW5jKHV0KG90KG5hLDEpLHJlLDgsMCxbXy5pLm4sXy5uLF8uYV0pKS5iKSl9ZnVuY3Rpb24gV21uKHQsZSl7dmFyIG4scixzLG8saCxkLHc7Zm9yKG1yKGUsIlNvcnQgQnkgSW5wdXQgTW9kZWwgIitLKHQsKHhlKCkscGIpKSwxKSxzPTAscj1uZXcgUyh0LmIpO3IuYTxyLmMuYy5sZW5ndGg7KXtmb3Iobj11KFEociksMjkpLHc9cz09MD8wOnMtMSxkPXUoUGUodC5iLHcpLDI5KSxoPW5ldyBTKG4uYSk7aC5hPGguYy5jLmxlbmd0aDspbz11KFEoaCksMTApLEd0KEsobyx3cykpIT09R3QoKHZhKCksVTIpKSYmR3QoSyhvLHdzKSkhPT1HdChLYykmJihwbigpLGFhKG8uaixuZXcgRnRlKGQsTnNlKG8pKSksUWIoZSwiTm9kZSAiK28rIiBwb3J0czogIitvLmopKTtwbigpLGFhKG4uYSxuZXcgc25lKGQsdShLKHQscGIpLDMzOSksdShLKHQsT1R0KSwzNzgpKSksUWIoZSwiTGF5ZXIgIitzKyI6ICIrbiksKytzfW9yKGUpfWZ1bmN0aW9uIEttbih0LGUpe3ZhciBuLHIscyxvO2lmKG89YWxlKGUpLHlzKG5ldyBrbihudWxsLCghZS5jJiYoZS5jPW5ldyBoZSh5bCxlLDksOSkpLG5ldyBUbihlLmMsMTYpKSksbmV3IGpuKG8pKSxzPXUoSyhvLChhZSgpLFdjKSksMjEpLFkzbihlLHMpLHMuSGMoKGdvKCkseWgpKSlmb3Iocj1uZXcgbnIoKCFlLmMmJihlLmM9bmV3IGhlKHlsLGUsOSw5KSksZS5jKSk7ci5lIT1yLmkuZ2MoKTspbj11KGRyKHIpLDExOCksQzRuKHQsZSxvLG4pO3JldHVybiB1KHplKGUsKHhlKCksUjIpKSwxNzQpLmdjKCkhPTAmJlpjZShlLG8pLEJlKEZlKEsobyxzX3QpKSkmJnMuRmMoJFYpLGVhKG8sU08pJiZCcXQobmV3IG8zdChadCh2ZShLKG8sU08pKSkpLG8pLEd0KHplKGUsankpKT09PUd0KCgkMCgpLG5wKSk/ajVuKHQsZSxvKTphNW4odCxlLG8pLG99ZnVuY3Rpb24geEModCxlLG4scil7dmFyIHMsbyxoO2lmKHRoaXMuaj1uZXcgbGUsdGhpcy5rPW5ldyBsZSx0aGlzLmI9bmV3IGxlLHRoaXMuYz1uZXcgbGUsdGhpcy5lPW5ldyBTNix0aGlzLmk9bmV3IGp1LHRoaXMuZj1uZXcgVnR0LHRoaXMuZD1uZXcgbGUsdGhpcy5nPW5ldyBsZSx1ZSh0aGlzLmIsdCksdWUodGhpcy5iLGUpLHRoaXMuZS5jPWIuTWF0aC5taW4odC5hLGUuYSksdGhpcy5lLmQ9Yi5NYXRoLm1pbih0LmIsZS5iKSx0aGlzLmUuYj1iLk1hdGguYWJzKHQuYS1lLmEpLHRoaXMuZS5hPWIuTWF0aC5hYnModC5iLWUuYikscz11KEsociwoeGUoKSxPbykpLDc0KSxzKWZvcihoPXNpKHMsMCk7aC5iIT1oLmQuYzspbz11KGlpKGgpLDgpLEZtdChvLmEsdC5hKSYmYWkodGhpcy5pLG8pO24mJnVlKHRoaXMuaixuKSx1ZSh0aGlzLmsscil9ZnVuY3Rpb24gWW1uKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxfLE0sQjtmb3IoXz1uZXcgR2oobmV3IERpKG4pKSxkPU50KHhsLGkwLDI1LHQuZi5lLmMubGVuZ3RoLDE2LDEpLHJ3dChkLGQubGVuZ3RoKSxuW2UuYl09MCxrPW5ldyBTKHQuZi5lKTtrLmE8ay5jLmMubGVuZ3RoOyl3PXUoUShrKSwxNDQpLHcuYiE9ZS5iJiYoblt3LmJdPVRpKSxBOChoNyhfLHcpKTtmb3IoO18uYi5jLmxlbmd0aCE9MDspZm9yKE09dShKcnQoXyksMTQ0KSxkW00uYl09ITAsbz1aVXQobmV3IGRldCh0LmIsTSksMCk7by5jOylzPXUoTnd0KG8pLDI4MiksQj1UZm4ocyxNKSwhZFtCLmJdJiYoZWEocywoSkQoKSxvVikpP2g9WnQodmUoSyhzLG9WKSkpOmg9dC5jLHI9bltNLmJdK2gscjxuW0IuYl0mJihuW0IuYl09cixZZWUoXyxCKSxBOChoNyhfLEIpKSkpfWZ1bmN0aW9uIG1sZSh0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssXyxNO2ZvcihzPSEwLGg9bmV3IFModC5iKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zm9yKG89dShRKGgpLDI5KSxrPU5zLF89bnVsbCx3PW5ldyBTKG8uYSk7dy5hPHcuYy5jLmxlbmd0aDspaWYoZD11KFEodyksMTApLE09WnQoZS5wW2QucF0pK1p0KGUuZFtkLnBdKS1kLmQuZCxyPVp0KGUucFtkLnBdKStadChlLmRbZC5wXSkrZC5vLmIrZC5kLmEsTT5rJiZyPmspXz1kLGs9WnQoZS5wW2QucF0pK1p0KGUuZFtkLnBdKStkLm8uYitkLmQuYTtlbHNle3M9ITEsbi5uJiZRYihuLCJiayBub2RlIHBsYWNlbWVudCBicmVha3Mgb24gIitkKyIgd2hpY2ggc2hvdWxkIGhhdmUgYmVlbiBhZnRlciAiK18pO2JyZWFrfWlmKCFzKWJyZWFrfXJldHVybiBuLm4mJlFiKG4sZSsiIGlzIGZlYXNpYmxlOiAiK3MpLHN9ZnVuY3Rpb24gWG1uKHQsZSxuLHIpe3ZhciBzLG8saCxkLHcsayxfO2ZvcihkPS0xLF89bmV3IFModCk7Xy5hPF8uYy5jLmxlbmd0aDspaz11KFEoXyksMTEyKSxrLmc9ZC0tLHM9TXIobSQodCQoV2kobmV3IGtuKG51bGwsbmV3IFRuKGsuZiwxNikpLG5ldyBEUSksbmV3IElRKSkuZCksbz1NcihtJCh0JChXaShuZXcga24obnVsbCxuZXcgVG4oay5rLDE2KSksbmV3IE9RKSxuZXcgWTUpKS5kKSxoPXMsdz1vLHJ8fChoPU1yKG0kKHQkKG5ldyBrbihudWxsLG5ldyBUbihrLmYsMTYpKSxuZXcgTlEpKS5kKSx3PU1yKG0kKHQkKG5ldyBrbihudWxsLG5ldyBUbihrLmssMTYpKSxuZXcgUFEpKS5kKSksay5kPWgsay5hPXMsay5pPXcsay5iPW8sdz09MD9rcyhuLGssbi5jLmIsbi5jKTpoPT0wJiZrcyhlLGssZS5jLmIsZS5jKX1mdW5jdGlvbiBRbW4odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLF87aWYobi5kLmkhPWUuaSl7Zm9yKHM9bmV3IEgwKHQpLEMwKHMsKEduKCksY2EpKSxlZShzLChhZSgpLElpKSxuKSxlZShzLCh4ZSgpLHdzKSwodmEoKSxLYykpLHIuY1tyLmMubGVuZ3RoXT1zLGg9bmV3IE5jLHRjKGgscyksVXMoaCwoYmUoKSxCbikpLGQ9bmV3IE5jLHRjKGQscyksVXMoZCxIbiksXz1uLmQscGEobixoKSxvPW5ldyB6dixCbyhvLG4pLGVlKG8sT28sbnVsbCksQmEobyxkKSxwYShvLF8pLGs9bmV3IHhhKG4uYiwwKTtrLmI8ay5kLmdjKCk7KXc9KFpuKGsuYjxrLmQuZ2MoKSksdShrLmQuWGIoay5jPWsuYisrKSw3MCkpLEd0KEsodyxEZCkpPT09R3QoKEQxKCksWXkpKSYmKGVlKHcsTHgsbiksRGwoayksdWUoby5iLHcpKTtab2UocyxoLGQpfX1mdW5jdGlvbiBabW4odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLF87aWYobi5jLmkhPWUuaSlmb3Iocz1uZXcgSDAodCksQzAocywoR24oKSxjYSkpLGVlKHMsKGFlKCksSWkpLG4pLGVlKHMsKHhlKCksd3MpLCh2YSgpLEtjKSksci5jW3IuYy5sZW5ndGhdPXMsaD1uZXcgTmMsdGMoaCxzKSxVcyhoLChiZSgpLEJuKSksZD1uZXcgTmMsdGMoZCxzKSxVcyhkLEhuKSxwYShuLGgpLG89bmV3IHp2LEJvKG8sbiksZWUobyxPbyxudWxsKSxCYShvLGQpLHBhKG8sZSksWm9lKHMsaCxkKSxrPW5ldyB4YShuLmIsMCk7ay5iPGsuZC5nYygpOyl3PShabihrLmI8ay5kLmdjKCkpLHUoay5kLlhiKGsuYz1rLmIrKyksNzApKSxfPXUoSyh3LERkKSwyNzIpLF89PShEMSgpLFl5KSYmKGVhKHcsTHgpfHxlZSh3LEx4LG4pLERsKGspLHVlKG8uYix3KSl9ZnVuY3Rpb24gSm1uKHQsZSxuLHIscyl7dmFyIG8saCxkLHcsayxfLE0sQixxLEcsVyxaLGJ0LE10LFN0O2ZvcihCPW5ldyBsZSxidD1FJChyKSxaPWUqdC5hLE09MCxHPTAsbz1uZXcgUXMsaD1uZXcgUXMsZD1uZXcgbGUsTXQ9MCxTdD0wLHE9MCxXPTAsaz0wLF89MDtidC5hLmdjKCkhPTA7KXc9cmxuKGJ0LHMsaCksdyYmKGJ0LmEuQmModykhPW51bGwsZC5jW2QuYy5sZW5ndGhdPXcsby5hLnpjKHcsbyksRz10LmZbdy5wXSxNdCs9dC5lW3cucF0tRyp0LmIsTT10LmNbdy5wXSxTdCs9TSp0LmIsXys9Ryp0LmIsVys9dC5lW3cucF0pLCghd3x8YnQuYS5nYygpPT0wfHxNdD49WiYmdC5lW3cucF0+Ryp0LmJ8fFN0Pj1uKlopJiYoQi5jW0IuYy5sZW5ndGhdPWQsZD1uZXcgbGUsS2EoaCxvKSxvLmEuJGIoKSxrLT1fLHE9Yi5NYXRoLm1heChxLGsqdC5iK1cpLGsrPVN0LE10PVN0LFN0PTAsXz0wLFc9MCk7cmV0dXJuIG5ldyB5YShxLEIpfWZ1bmN0aW9uIHR5bih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssXyxNLEIscTtmb3Iobj0oaz1uZXcgbTEodC5jLmIpLmEudmMoKS5LYygpLG5ldyB5MShrKSk7bi5hLk9iKCk7KWU9KGQ9dShuLmEuUGIoKSw0MiksdShkLmRkKCksMTQ5KSkscz1lLmEscz09bnVsbCYmKHM9IiIpLHI9Q1FlKHQuYyxzKSwhciYmcy5sZW5ndGg9PTAmJihyPVN1bih0KSksciYmIXJ5KHIuYyxlLCExKSYmYWkoci5jLGUpO2ZvcihoPXNpKHQuYSwwKTtoLmIhPWguZC5jOylvPXUoaWkoaCksNDc4KSxfPU5ydCh0LmMsby5hKSxxPU5ydCh0LmMsby5iKSxfJiZxJiZhaShfLmMsbmV3IHlhKHEsby5jKSk7Zm9yKE1oKHQuYSksQj1zaSh0LmIsMCk7Qi5iIT1CLmQuYzspTT11KGlpKEIpLDQ3OCksZT1fUWUodC5jLE0uYSksdz1OcnQodC5jLE0uYiksZSYmdyYmcFllKGUsdyxNLmMpO01oKHQuYil9ZnVuY3Rpb24gZXluKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxfLE0sQixxO289bmV3IHprKHQpLGg9bmV3IEJzZSxzPShjRChoLmcpLGNEKGguaiksbmwoaC5iKSxjRChoLmQpLGNEKGguaSksbmwoaC5rKSxubChoLmMpLG5sKGguZSkscT15b2UoaCxvLG51bGwpLHVjZShoLG8pLHEpLGUmJihrPW5ldyB6ayhlKSxkPWh5bihrKSxENHQocyx1dChvdChwU3QsMSksTWUsNTI3LDAsW2RdKSkpLEI9ITEsTT0hMSxuJiYoaz1uZXcgemsobikseEggaW4gay5hJiYoQj1JMChrLHhIKS5nZSgpLmEpLElkZSBpbiBrLmEmJihNPUkwKGssSWRlKS5nZSgpLmEpKSxfPWVIdChNZWUobmV3IFdrLEIpLE0pLEswbihuZXcgYloscyxfKSx4SCBpbiBvLmEmJlFmKG8seEgsbnVsbCksKEJ8fE0pJiYodz1uZXcgdzYsZGxlKF8sdyxCLE0pLFFmKG8seEgsdykpLHI9bmV3IGN6dChoKSxxY24obmV3IHQydChzKSxyKX1mdW5jdGlvbiBueW4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLF8sTTtmb3IoaD1uZXcgcXNlLGs9dXQob3QoU3IsMSksSnIsMjUsMTUsWzBdKSxzPS0xLG89MCxyPTAsdz0wO3c8dC5iLmMubGVuZ3RoOysrdylpZihfPXUoUGUodC5iLHcpLDQzNCksXy5iPjApe2lmKHM8MCYmXy5hJiYocz13LG89a1swXSxyPTApLHM+PTApe2lmKGQ9Xy5iLHc9PXMmJihkLT1yKyssZD09MCkpcmV0dXJuIDA7aWYoIXloZShlLGssXyxkLGgpKXt3PXMtMSxrWzBdPW87Y29udGludWV9fWVsc2UgaWYocz0tMSwheWhlKGUsayxfLDAsaCkpcmV0dXJuIDB9ZWxzZXtpZihzPS0xLFRhKF8uYywwKT09MzIpe2lmKE09a1swXSx6dGUoZSxrKSxrWzBdPk0pY29udGludWV9ZWxzZSBpZihGbm4oZSxfLmMsa1swXSkpe2tbMF0rPV8uYy5sZW5ndGg7Y29udGludWV9cmV0dXJuIDB9cmV0dXJuIEY0bihoLG4pP2tbMF06MH1mdW5jdGlvbiBrQyh0KXt2YXIgZSxuLHIscyxvLGgsZCx3O2lmKCF0LmYpe2lmKHc9bmV3IF8wLGQ9bmV3IF8wLGU9YUEsaD1lLmEuemModCxlKSxoPT1udWxsKXtmb3Iobz1uZXcgbnIoUG8odCkpO28uZSE9by5pLmdjKCk7KXM9dShkcihvKSwyNiksZ3ModyxrQyhzKSk7ZS5hLkJjKHQpIT1udWxsLGUuYS5nYygpPT0wfWZvcihyPSghdC5zJiYodC5zPW5ldyBoZShOdSx0LDIxLDE3KSksbmV3IG5yKHQucykpO3IuZSE9ci5pLmdjKCk7KW49dShkcihyKSwxNzApLF90KG4sOTkpJiZPcihkLHUobiwxOCkpO2V5KGQpLHQucj1uZXcgT0t0KHQsKHUoQXQoS3QoKHpwKCksQW4pLm8pLDYpLDE4KSxkLmkpLGQuZyksZ3Modyx0LnIpLGV5KHcpLHQuZj1uZXcgSDMoKHUoQXQoS3QoQW4ubyksNSksMTgpLHcuaSksdy5nKSxobCh0KS5iJj0tM31yZXR1cm4gdC5mfWZ1bmN0aW9uIHJ5bih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssXyxNLEIscSxHO2ZvcihoPXQubyxyPU50KFNyLEpyLDI1LGgsMTUsMSkscz1OdChTcixKciwyNSxoLDE1LDEpLG49dC5wLGU9TnQoU3IsSnIsMjUsbiwxNSwxKSxvPU50KFNyLEpyLDI1LG4sMTUsMSksaz0wO2s8aDtrKyspe2ZvcihNPTA7TTxuJiYhaDQodCxrLE0pOykrK007cltrXT1NfWZvcihfPTA7XzxoO18rKyl7Zm9yKE09bi0xO00+PTAmJiFoNCh0LF8sTSk7KS0tTTtzW19dPU19Zm9yKHE9MDtxPG47cSsrKXtmb3IoZD0wO2Q8aCYmIWg0KHQsZCxxKTspKytkO2VbcV09ZH1mb3IoRz0wO0c8bjtHKyspe2ZvcihkPWgtMTtkPj0wJiYhaDQodCxkLEcpOyktLWQ7b1tHXT1kfWZvcih3PTA7dzxoO3crKylmb3IoQj0wO0I8bjtCKyspdzxvW0JdJiZ3PmVbQl0mJkI8c1t3XSYmQj5yW3ddJiZicSh0LHcsQiwhMSwhMCl9ZnVuY3Rpb24gcjZ0KHQpe3ZhciBlLG4scixzLG8saCxkLHc7bj1CZShGZShLKHQsKG4xKCksWXBlKSkpKSxvPXQuYS5jLmQsZD10LmEuZC5kLG4/KGg9bGQoZmEobmV3IFJlKGQuYSxkLmIpLG8pLC41KSx3PWxkKHVjKHQuZSksLjUpLGU9ZmEoRmkobmV3IFJlKG8uYSxvLmIpLGgpLHcpLE8ydCh0LmQsZSkpOihzPVp0KHZlKEsodC5hLHJiZSkpKSxyPXQuZCxvLmE+PWQuYT9vLmI+PWQuYj8oci5hPWQuYSsoby5hLWQuYSkvMitzLHIuYj1kLmIrKG8uYi1kLmIpLzItcy10LmUuYik6KHIuYT1kLmErKG8uYS1kLmEpLzIrcyxyLmI9by5iKyhkLmItby5iKS8yK3MpOm8uYj49ZC5iPyhyLmE9by5hKyhkLmEtby5hKS8yK3Msci5iPWQuYisoby5iLWQuYikvMitzKTooci5hPW8uYSsoZC5hLW8uYSkvMitzLHIuYj1vLmIrKGQuYi1vLmIpLzItcy10LmUuYikpfWZ1bmN0aW9uIEhjKHQsZSl7dmFyIG4scixzLG8saCxkLHc7aWYodD09bnVsbClyZXR1cm4gbnVsbDtpZihvPXQubGVuZ3RoLG89PTApcmV0dXJuIiI7Zm9yKHc9TnQoRWgsd2QsMjUsbywxNSwxKSxtbXQoMCxvLHQubGVuZ3RoKSxtbXQoMCxvLHcubGVuZ3RoKSxqWXQodCwwLG8sdywwKSxuPW51bGwsZD1lLHM9MCxoPTA7czxvO3MrKylyPXdbc10sJGhlKCkscjw9MzImJnd0W3JdJjI/ZD8oIW4mJihuPW5ldyBBaCh0KSksTW5uKG4scy1oKyspKTooZD1lLHIhPTMyJiYoIW4mJihuPW5ldyBBaCh0KSksUWVuKG4scy1oLHMtaCsxLFN0cmluZy5mcm9tQ2hhckNvZGUoMzIpKSkpOmQ9ITE7cmV0dXJuIGQ/bj8obz1uLmEubGVuZ3RoLG8+MD9CbChuLmEsMCxvLTEpOiIiKTp0LnN1YnN0cigwLG8tMSk6bj9uLmE6dH1mdW5jdGlvbiB5bGUodCl7U3YodCxuZXcgeTIoRXYoeXYoa3YoeHYobmV3IG1nLEMyKSwiRUxLIERpc0NvIiksIkxheW91dGVyIGZvciBhcnJhbmdpbmcgdW5jb25uZWN0ZWQgc3ViZ3JhcGhzLiBUaGUgc3ViZ3JhcGhzIHRoZW1zZWx2ZXMgYXJlLCBieSBkZWZhdWx0LCBub3QgbGFpZCBvdXQuIiksbmV3IG1lKSkpLHdlKHQsQzIsTW90LEllKHNFdCkpLHdlKHQsQzIsRG90LEllKHF1dCkpLHdlKHQsQzIscHgsSWUoTnBlKSksd2UodCxDMix3dyxJZShpRXQpKSx3ZSh0LEMyLHE2dCxJZShScGUpKSx3ZSh0LEMyLEg2dCxJZShCcGUpKSx3ZSh0LEMyLHo2dCxJZShqcGUpKSx3ZSh0LEMyLFY2dCxJZShGcGUpKSx3ZSh0LEMyLFE2dCxJZShQcGUpKSx3ZSh0LEMyLFo2dCxJZSh6dXQpKSx3ZSh0LEMyLEo2dCxJZShyRXQpKSx3ZSh0LEMyLHR4dCxJZShlVikpfWZ1bmN0aW9uIGk2dCh0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssXyxNLEI7aWYobz1uZXcgSDAodCksQzAobywoR24oKSxVYykpLGVlKG8sKHhlKCksd3MpLCh2YSgpLEtjKSkscz0wLGUpe2ZvcihoPW5ldyBOYyxlZShoLChhZSgpLElpKSxlKSxlZShvLElpLGUuaSksVXMoaCwoYmUoKSxCbikpLHRjKGgsbyksQj1wZChlLmUpLGs9QixfPTAsTT1rLmxlbmd0aDtfPE07KytfKXc9a1tfXSxwYSh3LGgpO2VlKGUsc2wsbyksKytzfWlmKG4pe2ZvcihkPW5ldyBOYyxlZShvLChhZSgpLElpKSxuLmkpLGVlKGQsSWksbiksVXMoZCwoYmUoKSxIbikpLHRjKGQsbyksQj1wZChuLmcpLGs9QixfPTAsTT1rLmxlbmd0aDtfPE07KytfKXc9a1tfXSxCYSh3LGQpO2VlKG4sc2wsbyksKytzfXJldHVybiBlZShvLChhZSgpLHFWKSxkZShzKSksci5jW3IuYy5sZW5ndGhdPW8sb31mdW5jdGlvbiB5cSgpe3lxPVgsUkF0PXV0KG90KEVoLDEpLHdkLDI1LDE1LFs0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw2NSw2Niw2Nyw2OCw2OSw3MF0pLE80ZT1uZXcgUmVnRXhwKGBbIAkKXHJcZl0rYCk7dHJ5e3JBPXV0KG90KGs2biwxKSxNZSwyMDE1LDAsW25ldyBvTSgoaTJ0KCksTXooInl5eXktTU0tZGQnVCdISDptbTpzcycuJ1NTU1oiLHpNKChiUigpLGJSKCksc1MpKSkpKSxuZXcgb00oTXooInl5eXktTU0tZGQnVCdISDptbTpzcycuJ1NTUyIsek0oc1MpKSksbmV3IG9NKE16KCJ5eXl5LU1NLWRkJ1QnSEg6bW06c3MiLHpNKHNTKSkpLG5ldyBvTShNeigieXl5eS1NTS1kZCdUJ0hIOm1tIix6TShzUykpKSxuZXcgb00oTXooInl5eXktTU0tZGQiLHpNKHNTKSkpXSl9Y2F0Y2godCl7aWYodD1ycyh0KSwhX3QodCw3OCkpdGhyb3cgbnQodCl9fWZ1bmN0aW9uIGl5bih0KXt2YXIgZSxuLHIscztpZihyPU5hdCgoIXQuYyYmKHQuYz1qRCh0LmYpKSx0LmMpLDApLHQuZT09MHx8dC5hPT0wJiZ0LmYhPS0xJiZ0LmU8MClyZXR1cm4gcjtpZihlPUhtdCh0KTwwPzE6MCxuPXQuZSxzPShyLmxlbmd0aCsxK2IuTWF0aC5hYnMoQ3ModC5lKSksbmV3IExtKSxlPT0xJiYocy5hKz0iLSIpLHQuZT4wKWlmKG4tPXIubGVuZ3RoLWUsbj49MCl7Zm9yKHMuYSs9IjAuIjtuPk4yLmxlbmd0aDtuLT1OMi5sZW5ndGgpWkt0KHMsTjIpO05XdChzLE4yLENzKG4pKSxZcihzLHIuc3Vic3RyKGUpKX1lbHNlIG49ZS1uLFlyKHMsQmwocixlLENzKG4pKSkscy5hKz0iLiIsWXIocyxPTShyLENzKG4pKSk7ZWxzZXtmb3IoWXIocyxyLnN1YnN0cihlKSk7bjwtTjIubGVuZ3RoO24rPU4yLmxlbmd0aClaS3QocyxOMik7Tld0KHMsTjIsQ3MoLW4pKX1yZXR1cm4gcy5hfWZ1bmN0aW9uIHM2dCh0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssXyxNLEI7cmV0dXJuIHc9ZmEobmV3IFJlKG4uYSxuLmIpLHQpLGs9dy5hKmUuYi13LmIqZS5hLF89ZS5hKnIuYi1lLmIqci5hLE09KHcuYSpyLmItdy5iKnIuYSkvXyxCPWsvXyxfPT0wP2s9PTA/KHM9RmkobmV3IFJlKG4uYSxuLmIpLGxkKG5ldyBSZShyLmEsci5iKSwuNSkpLG89R3AodCxzKSxoPUdwKEZpKG5ldyBSZSh0LmEsdC5iKSxlKSxzKSxkPWIuTWF0aC5zcXJ0KHIuYSpyLmErci5iKnIuYikqLjUsbzxoJiZvPD1kP25ldyBSZSh0LmEsdC5iKTpoPD1kP0ZpKG5ldyBSZSh0LmEsdC5iKSxlKTpudWxsKTpudWxsOk0+PTAmJk08PTEmJkI+PTAmJkI8PTE/RmkobmV3IFJlKHQuYSx0LmIpLGxkKG5ldyBSZShlLmEsZS5iKSxNKSk6bnVsbH1mdW5jdGlvbiBzeW4odCxlLG4pe3ZhciByLHMsbyxoLGQ7aWYocj11KEsodCwoeGUoKSxHbHQpKSwyMSksbi5hPmUuYSYmKHIuSGMoKGN5KCkscU8pKT90LmMuYSs9KG4uYS1lLmEpLzI6ci5IYyhITykmJih0LmMuYSs9bi5hLWUuYSkpLG4uYj5lLmImJihyLkhjKChjeSgpLEdPKSk/dC5jLmIrPShuLmItZS5iKS8yOnIuSGMoVk8pJiYodC5jLmIrPW4uYi1lLmIpKSx1KEsodCwoYWUoKSxXYykpLDIxKS5IYygoZ28oKSx5aCkpJiYobi5hPmUuYXx8bi5iPmUuYikpZm9yKGQ9bmV3IFModC5hKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoUShkKSwxMCksaC5rPT0oR24oKSxJcykmJihzPXUoSyhoLGdjKSw2MSkscz09KGJlKCksSG4pP2gubi5hKz1uLmEtZS5hOnM9PXlyJiYoaC5uLmIrPW4uYi1lLmIpKTtvPXQuZCx0LmYuYT1uLmEtby5iLW8uYyx0LmYuYj1uLmItby5kLW8uYX1mdW5jdGlvbiBheW4odCxlLG4pe3ZhciByLHMsbyxoLGQ7aWYocj11KEsodCwoeGUoKSxHbHQpKSwyMSksbi5hPmUuYSYmKHIuSGMoKGN5KCkscU8pKT90LmMuYSs9KG4uYS1lLmEpLzI6ci5IYyhITykmJih0LmMuYSs9bi5hLWUuYSkpLG4uYj5lLmImJihyLkhjKChjeSgpLEdPKSk/dC5jLmIrPShuLmItZS5iKS8yOnIuSGMoVk8pJiYodC5jLmIrPW4uYi1lLmIpKSx1KEsodCwoYWUoKSxXYykpLDIxKS5IYygoZ28oKSx5aCkpJiYobi5hPmUuYXx8bi5iPmUuYikpZm9yKGg9bmV3IFModC5hKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoUShoKSwxMCksby5rPT0oR24oKSxJcykmJihzPXUoSyhvLGdjKSw2MSkscz09KGJlKCksSG4pP28ubi5hKz1uLmEtZS5hOnM9PXlyJiYoby5uLmIrPW4uYi1lLmIpKTtkPXQuZCx0LmYuYT1uLmEtZC5iLWQuYyx0LmYuYj1uLmItZC5kLWQuYX1mdW5jdGlvbiBveW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLF8sTSxCO2ZvcihlPWpvZSh0KSxfPShkPW5ldyBUbShlKS5hLnZjKCkuS2MoKSxuZXcgck0oZCkpO18uYS5PYigpOyl7Zm9yKGs9KHM9dShfLmEuUGIoKSw0MiksdShzLmNkKCksMTApKSxNPTAsQj0wLE09ay5kLmQsQj1rLm8uYitrLmQuYSx0LmRbay5wXT0wLG49azsobz10LmFbbi5wXSkhPWs7KXI9bWhuKG4sbyksdz0wLHQuYz09KGdkKCksWmcpP3c9ci5kLm4uYityLmQuYS5iLXIuYy5uLmItci5jLmEuYjp3PXIuYy5uLmIrci5jLmEuYi1yLmQubi5iLXIuZC5hLmIsaD1adCh0LmRbbi5wXSkrdyx0LmRbby5wXT1oLE09Yi5NYXRoLm1heChNLG8uZC5kLWgpLEI9Yi5NYXRoLm1heChCLGgrby5vLmIrby5kLmEpLG49bztuPWs7ZG8gdC5kW24ucF09WnQodC5kW24ucF0pK00sbj10LmFbbi5wXTt3aGlsZShuIT1rKTt0LmJbay5wXT1NK0J9fWZ1bmN0aW9uIHdhdCh0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssXyxNLEI7Zm9yKHQuYj0hMSxNPWJzLHc9TnMsQj1icyxrPU5zLHI9dC5lLmEuZWMoKS5LYygpO3IuT2IoKTspZm9yKG49dShyLlBiKCksMjY2KSxzPW4uYSxNPWIuTWF0aC5taW4oTSxzLmMpLHc9Yi5NYXRoLm1heCh3LHMuYytzLmIpLEI9Yi5NYXRoLm1pbihCLHMuZCksaz1iLk1hdGgubWF4KGsscy5kK3MuYSksaD1uZXcgUyhuLmMpO2guYTxoLmMuYy5sZW5ndGg7KW89dShRKGgpLDM5NSksZT1vLmEsZS5hPyhfPXMuZCtvLmIuYixkPV8rby5jLEI9Yi5NYXRoLm1pbihCLF8pLGs9Yi5NYXRoLm1heChrLGQpKTooXz1zLmMrby5iLmEsZD1fK28uYyxNPWIuTWF0aC5taW4oTSxfKSx3PWIuTWF0aC5tYXgodyxkKSk7dC5hPW5ldyBSZSh3LU0say1CKSx0LmM9bmV3IFJlKE0rdC5kLmEsQit0LmQuYil9ZnVuY3Rpb24gY3luKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxfLE07Zm9yKE09bmV3IGxlLF89bmV3IHF3dCgwLG4pLG89MCxZJChfLG5ldyBFaXQoMCwwLF8sbikpLHM9MCxrPW5ldyBucih0KTtrLmUhPWsuaS5nYygpOyl3PXUoZHIoayksMzMpLHI9dShQZShfLmEsXy5hLmMubGVuZ3RoLTEpLDE4NyksZD1zK3cuZysodShQZShfLmEsMCksMTg3KS5iLmMubGVuZ3RoPT0wPzA6biksZD5lJiYocz0wLG8rPV8uYituLE0uY1tNLmMubGVuZ3RoXT1fLF89bmV3IHF3dChvLG4pLHI9bmV3IEVpdCgwLF8uZixfLG4pLFkkKF8scikscz0wKSxyLmIuYy5sZW5ndGg9PTB8fHcuZj49ci5vJiZ3LmY8PXIuZnx8ci5hKi41PD13LmYmJnIuYSoxLjU+PXcuZj9lM3Qocix3KTooaD1uZXcgRWl0KHIucytyLnIrbixfLmYsXyxuKSxZJChfLGgpLGUzdChoLHcpKSxzPXcuaSt3Lmc7cmV0dXJuIE0uY1tNLmMubGVuZ3RoXT1fLE19ZnVuY3Rpb24gRTQodCl7dmFyIGUsbixyLHMsbyxoLGQsdztpZighdC5hKXtpZih0Lm89bnVsbCx3PW5ldyBBenQodCksZT1uZXcgeHAsbj1hQSxkPW4uYS56Yyh0LG4pLGQ9PW51bGwpe2ZvcihoPW5ldyBucihQbyh0KSk7aC5lIT1oLmkuZ2MoKTspbz11KGRyKGgpLDI2KSxncyh3LEU0KG8pKTtuLmEuQmModCkhPW51bGwsbi5hLmdjKCk9PTB9Zm9yKHM9KCF0LnMmJih0LnM9bmV3IGhlKE51LHQsMjEsMTcpKSxuZXcgbnIodC5zKSk7cy5lIT1zLmkuZ2MoKTspcj11KGRyKHMpLDE3MCksX3QociwzMjIpJiZPcihlLHUociwzNCkpO2V5KGUpLHQuaz1uZXcgSUt0KHQsKHUoQXQoS3QoKHpwKCksQW4pLm8pLDcpLDE4KSxlLmkpLGUuZyksZ3Modyx0LmspLGV5KHcpLHQuYT1uZXcgSDMoKHUoQXQoS3QoQW4ubyksNCksMTgpLHcuaSksdy5nKSxobCh0KS5iJj0tMn1yZXR1cm4gdC5hfWZ1bmN0aW9uIHV5bih0LGUsbixyLHMsbyxoKXt2YXIgZCx3LGssXyxNLEI7cmV0dXJuIE09ITEsdz1BY2Uobi5xLGUuZitlLmItbi5xLmYpLEI9cy0obi5xLmUrdy1oKSxCPHIuZ3x8KGs9bz09dC5jLmxlbmd0aC0xJiZCPj0oU24obyx0LmMubGVuZ3RoKSx1KHQuY1tvXSwyMDApKS5lLF89KGQ9RUMocixCLCExKSxkLmEpLF8+ZS5iJiYhayk/ITE6KChrfHxfPD1lLmIpJiYoayYmXz5lLmI/KG4uZD1fLGREKG4sSWFlKG4sXykpKTooUXNlKG4ucSx3KSxuLmM9ITApLGREKHIscy0obi5zK24ucikpLFlEKHIsbi5xLmUrbi5xLmQsZS5mKSxZJChlLHIpLHQuYy5sZW5ndGg+byYmKHRJKChTbihvLHQuYy5sZW5ndGgpLHUodC5jW29dLDIwMCkpLHIpLChTbihvLHQuYy5sZW5ndGgpLHUodC5jW29dLDIwMCkpLmEuYy5sZW5ndGg9PTAmJklnKHQsbykpLE09ITApLE0pfWZ1bmN0aW9uIGE2dCh0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssXztpZihfPWh1KHQuZS5UZygpLGUpLHM9MCxvPXUodC5nLDExOSksdz1udWxsLHNvKCksdShlLDY2KS5PaigpKXtmb3IoZD0wO2Q8dC5pOysrZClpZihoPW9bZF0sXy5ybChoLmFrKCkpKXtpZihTaShoLG4pKXt3PWg7YnJlYWt9KytzfX1lbHNlIGlmKG4hPW51bGwpe2ZvcihkPTA7ZDx0Lmk7KytkKWlmKGg9b1tkXSxfLnJsKGguYWsoKSkpe2lmKFNpKG4saC5kZCgpKSl7dz1oO2JyZWFrfSsrc319ZWxzZSBmb3IoZD0wO2Q8dC5pOysrZClpZihoPW9bZF0sXy5ybChoLmFrKCkpKXtpZihoLmRkKCk9PW51bGwpe3c9aDticmVha30rK3N9cmV0dXJuIHcmJihTbCh0LmUpJiYoaz1lLiRqKCk/bmV3IE1ydCh0LmUsNCxlLG4sbnVsbCxzLCEwKTpIcCh0LGUuS2ooKT8yOjEsZSxuLGUuemooKSwtMSwhMCkscj9yLkVpKGspOnI9aykscj13SSh0LHcscikpLHJ9ZnVuY3Rpb24gbWF0KHQsZSxuLHIscyxvLGgpe3ZhciBkLHcsayxfLE0sQixxLEcsVztzd2l0Y2goRz0wLFc9MCx3PXMuYyxkPXMuYixfPW4uZixxPW4uZyxlLmcpe2Nhc2UgMDpHPXIuaStyLmcraCx0LmM/Vz1SZG4oRyxvLHIsaCk6Vz1yLmosQj1iLk1hdGgubWF4KHcsRytxKSxrPWIuTWF0aC5tYXgoZCxXK18pO2JyZWFrO2Nhc2UgMTpXPXIuaityLmYraCx0LmM/Rz1CZG4oVyxvLHIsaCk6Rz1yLmksQj1iLk1hdGgubWF4KHcsRytxKSxrPWIuTWF0aC5tYXgoZCxXK18pO2JyZWFrO2Nhc2UgMjpHPXcraCxXPTAsQj13K2grcSxrPWIuTWF0aC5tYXgoZCxfKTticmVhaztjYXNlIDM6Rz0wLFc9ZCtoLEI9Yi5NYXRoLm1heCh3LHEpLGs9ZCtoK187YnJlYWs7ZGVmYXVsdDp0aHJvdyBudChuZXcgUG4oIklsbGVnYWxQbGFjZW1lbnRPcHRpb24uIikpfXJldHVybiBNPW5ldyBhM3QodC5hLEIsayxlLEcsVyksTX1mdW5jdGlvbiBseW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLF8sTSxCO2lmKGQ9dC5kLE09dShLKHQsKGFlKCksT3gpKSwxNSksZT11KEsodCxBeCksMTUpLCEoIU0mJiFlKSl7aWYobz1adCh2ZShpeSh0LCh4ZSgpLGVodCkpKSksaD1adCh2ZShpeSh0LGxfdCkpKSxCPTAsTSl7Zm9yKGs9MCxzPU0uS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMTApLGs9Yi5NYXRoLm1heChrLHIuby5iKSxCKz1yLm8uYTtCKz1vKihNLmdjKCktMSksZC5kKz1rK2h9aWYobj0wLGUpe2ZvcihrPTAscz1lLktjKCk7cy5PYigpOylyPXUocy5QYigpLDEwKSxrPWIuTWF0aC5tYXgoayxyLm8uYiksbis9ci5vLmE7bis9byooZS5nYygpLTEpLGQuYSs9aytofXc9Yi5NYXRoLm1heChCLG4pLHc+dC5vLmEmJihfPSh3LXQuby5hKS8yLGQuYj1iLk1hdGgubWF4KGQuYixfKSxkLmM9Yi5NYXRoLm1heChkLmMsXykpfX1mdW5jdGlvbiBoeW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdztmb3Iobz1uZXcgSlF0LFlZZShvLChYNigpLEMzZSkpLHI9KHM9aGl0KHQsTnQoTGUscmUsMiwwLDYsMSkpLG5ldyBoNihuZXcgQ2wobmV3IGdldCh0LHMpLmIpKSk7ci5iPHIuZC5nYygpOyluPShabihyLmI8ci5kLmdjKCkpLGpyKHIuZC5YYihyLmM9ci5iKyspKSksaD1kNnQoQ2IsbiksaCYmKGU9STAodCxuKSxlLmplKCk/ZD1lLmplKCkuYTplLmdlKCk/ZD0iIitlLmdlKCkuYTplLmhlKCk/ZD0iIitlLmhlKCkuYTpkPWUuSWIoKSx3PWg2dChoLGQpLHchPW51bGwmJigoenUoaC5qLCh0MSgpLHVhKSl8fHp1KGguaixxbikpJiZGRCh0aXQobyxkcyksaCx3KSx6dShoLmosSWQpJiZGRCh0aXQobyxyYSksaCx3KSx6dShoLmoscTIpJiZGRCh0aXQobyx5bCksaCx3KSx6dShoLmosdHApJiZGRCh0aXQobyxZbyksaCx3KSkpO3JldHVybiBvfWZ1bmN0aW9uIHhxKHQsZSxuLHIpe3ZhciBzLG8saCxkLHcsaztpZih3PWh1KHQuZS5UZygpLGUpLG89dSh0LmcsMTE5KSxHMCh0LmUsZSkpe2ZvcihzPTAsZD0wO2Q8dC5pOysrZClpZihoPW9bZF0sdy5ybChoLmFrKCkpKXtpZihzPT1uKXJldHVybiBzbygpLHUoZSw2NikuT2ooKT9oOihrPWguZGQoKSxrIT1udWxsJiZyJiZfdChlLDk5KSYmdShlLDE4KS5CYiZRYSYmKGs9ZEModCxlLGQscyxrKSksayk7KytzfXRocm93IG50KG5ldyBDbyhYQytuK0wyK3MpKX1lbHNle2ZvcihzPTAsZD0wO2Q8dC5pOysrZCl7aWYoaD1vW2RdLHcucmwoaC5haygpKSlyZXR1cm4gc28oKSx1KGUsNjYpLk9qKCk/aDooaz1oLmRkKCksayE9bnVsbCYmciYmX3QoZSw5OSkmJnUoZSwxOCkuQmImUWEmJihrPWRDKHQsZSxkLHMsaykpLGspOysrc31yZXR1cm4gZS56aigpfX1mdW5jdGlvbiBrSSh0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssXztpZihzPXUodC5nLDExOSksRzAodC5lLGUpKXJldHVybiBzbygpLHUoZSw2NikuT2ooKT9uZXcgRGooZSx0KTpuZXcgSU0oZSx0KTtmb3Ioaz1odSh0LmUuVGcoKSxlKSxyPTAsZD0wO2Q8dC5pOysrZCl7aWYobz1zW2RdLGg9by5haygpLGsucmwoaCkpe2lmKHNvKCksdShlLDY2KS5PaigpKXJldHVybiBvO2lmKGg9PShzeCgpLFV4KXx8aD09R3gpe2Zvcih3PW5ldyBGbChXbyhvLmRkKCkpKTsrK2Q8dC5pOylvPXNbZF0saD1vLmFrKCksKGg9PVV4fHxoPT1HeCkmJllyKHcsV28oby5kZCgpKSk7cmV0dXJuIGl2dCh1KGUuWWooKSwxNDgpLHcuYSl9ZWxzZSByZXR1cm4gXz1vLmRkKCksXyE9bnVsbCYmbiYmX3QoZSw5OSkmJnUoZSwxOCkuQmImUWEmJihfPWRDKHQsZSxkLHIsXykpLF99KytyfXJldHVybiBlLnpqKCl9ZnVuY3Rpb24gRUModCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLF8sTSxCO2ZvcihvPTAsaD10LnQscz0wLHI9MCx3PTAsQj0wLE09MCxuJiYodC5uLmM9TnQoUW4sTWUsMSwwLDUsMSksdWUodC5uLG5ldyBmJCh0LnMsdC50LHQuaSkpKSxkPTAsXz1uZXcgUyh0LmIpO18uYTxfLmMuYy5sZW5ndGg7KWs9dShRKF8pLDMzKSxvK2suZysoZD4wP3QuaTowKT5lJiZ3PjAmJihvPTAsaCs9dyt0Lmkscz1iLk1hdGgubWF4KHMsQikscis9dyt0Lmksdz0wLEI9MCxuJiYoKytNLHVlKHQubixuZXcgZiQodC5zLGgsdC5pKSkpLGQ9MCksQis9ay5nKyhkPjA/dC5pOjApLHc9Yi5NYXRoLm1heCh3LGsuZiksbiYmQjN0KHUoUGUodC5uLE0pLDIxMSksayksbys9ay5nKyhkPjA/dC5pOjApLCsrZDtyZXR1cm4gcz1iLk1hdGgubWF4KHMsQikscis9dyxuJiYodC5yPXMsdC5kPXIsejN0KHQuaikpLG5ldyBjaCh0LnMsdC50LHMscil9ZnVuY3Rpb24gUGModCxlLG4scixzKXtxZCgpO3ZhciBvLGgsZCx3LGssXyxNLEIscTtpZihhd3QodCwic3JjIiksYXd0KG4sImRlc3QiKSxCPWRsKHQpLHc9ZGwobiksTHZ0KChCLmkmNCkhPTAsInNyY1R5cGUgaXMgbm90IGFuIGFycmF5IiksTHZ0KCh3LmkmNCkhPTAsImRlc3RUeXBlIGlzIG5vdCBhbiBhcnJheSIpLE09Qi5jLGg9dy5jLEx2dChNLmkmMT9NPT1oOihoLmkmMSk9PTAsIkFycmF5IHR5cGVzIGRvbid0IG1hdGNoIikscT10Lmxlbmd0aCxrPW4ubGVuZ3RoLGU8MHx8cjwwfHxzPDB8fGUrcz5xfHxyK3M+ayl0aHJvdyBudChuZXcgeHB0KTtpZighKE0uaSYxKSYmQiE9dylpZihfPW8yKHQpLG89bzIobiksR3QodCk9PT1HdChuKSYmZTxyKWZvcihlKz1zLGQ9citzO2QtLSA+cjspbHMobyxkLF9bLS1lXSk7ZWxzZSBmb3IoZD1yK3M7cjxkOylscyhvLHIrKyxfW2UrK10pO2Vsc2Ugcz4wJiZVNHQodCxlLG4scixzLCEwKX1mdW5jdGlvbiB5YXQoKXt5YXQ9WCxFZ2U9dXQob3QoU3IsMSksSnIsMjUsMTUsW09hLDExNjIyNjE0NjcsQUMsMTIyMDcwMzEyNSwzNjI3OTcwNTYsMTk3NzMyNjc0MyxBQywzODc0MjA0ODksTnEsMjE0MzU4ODgxLDQyOTk4MTY5Niw4MTU3MzA3MjEsMTQ3NTc4OTA1NiwxNzA4NTkzNzUsMjY4NDM1NDU2LDQxMDMzODY3Myw2MTIyMjAwMzIsODkzODcxNzM5LDEyOGU3LDE4MDEwODg1NDEsMTEzMzc5OTA0LDE0ODAzNTg4OSwxOTExMDI5NzYsMjQ0MTQwNjI1LDMwODkxNTc3NiwzODc0MjA0ODksNDgxODkwMzA0LDU5NDgyMzMyMSw3MjllNiw4ODc1MDM2ODEsQUMsMTI5MTQ2Nzk2OSwxNTQ0ODA0NDE2LDE4MzgyNjU2MjUsNjA0NjYxNzZdKSxUZ2U9dXQob3QoU3IsMSksSnIsMjUsMTUsWy0xLC0xLDMxLDE5LDE1LDEzLDExLDExLDEwLDksOSw4LDgsOCw4LDcsNyw3LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDVdKX1mdW5jdGlvbiBmeW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdztmb3Iocz1uZXcgUyh0LmIpO3MuYTxzLmMuYy5sZW5ndGg7KWZvcihyPXUoUShzKSwyOSksaD1uZXcgUyhWdihyLmEpKTtoLmE8aC5jLmMubGVuZ3RoOylpZihvPXUoUShoKSwxMCksbmVlKG8pJiYobj11KEsobywoYWUoKSxMdykpLDMwNSksIW4uZyYmbi5kKSlmb3IoZT1uLHc9bi5kO3c7KWx1ZSh3Lmksdy5rLCExLCEwKSx2RChlLmEpLHZEKHcuaSksdkQody5rKSx2RCh3LmIpLHBhKHcuYyxlLmMuZCkscGEoZS5jLG51bGwpLExvKGUuYSxudWxsKSxMbyh3LmksbnVsbCksTG8ody5rLG51bGwpLExvKHcuYixudWxsKSxkPW5ldyBZd3QoZS5pLHcuYSxlLmUsdy5qLHcuZiksZC5rPWUuayxkLm49ZS5uLGQuYj1lLmIsZC5jPXcuYyxkLmc9ZS5nLGQuZD13LmQsZWUoZS5pLEx3LGQpLGVlKHcuYSxMdyxkKSx3PXcuZCxlPWR9ZnVuY3Rpb24gdnkodCxlKXt2YXIgbixyLHMsbyxoO2lmKGg9dShlLDEzNiksdjQodCksdjQoaCksaC5iIT1udWxsKXtpZih0LmM9ITAsdC5iPT1udWxsKXt0LmI9TnQoU3IsSnIsMjUsaC5iLmxlbmd0aCwxNSwxKSxQYyhoLmIsMCx0LmIsMCxoLmIubGVuZ3RoKTtyZXR1cm59Zm9yKG89TnQoU3IsSnIsMjUsdC5iLmxlbmd0aCtoLmIubGVuZ3RoLDE1LDEpLG49MCxyPTAscz0wO248dC5iLmxlbmd0aHx8cjxoLmIubGVuZ3RoOyluPj10LmIubGVuZ3RoPyhvW3MrK109aC5iW3IrK10sb1tzKytdPWguYltyKytdKTpyPj1oLmIubGVuZ3RoPyhvW3MrK109dC5iW24rK10sb1tzKytdPXQuYltuKytdKTpoLmJbcl08dC5iW25dfHxoLmJbcl09PT10LmJbbl0mJmguYltyKzFdPHQuYltuKzFdPyhvW3MrK109aC5iW3IrK10sb1tzKytdPWguYltyKytdKToob1tzKytdPXQuYltuKytdLG9bcysrXT10LmJbbisrXSk7dC5iPW99fWZ1bmN0aW9uIGR5bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXyxNO3JldHVybiBuPUJlKEZlKEsodCwoYWUoKSxQeSkpKSksZD1CZShGZShLKGUsUHkpKSkscj11KEsodCxhMSksMTEpLHc9dShLKGUsYTEpLDExKSxzPXUoSyh0LHFoKSwxMSksaz11KEsoZSxxaCksMTEpLF89ISFyJiZyPT13LE09ISFzJiZzPT1rLCFuJiYhZD9uZXcgcHZ0KHUoUShuZXcgUyh0LmopKSwxMSkucD09dShRKG5ldyBTKGUuaikpLDExKS5wLF8sTSk6KG89KCFCZShGZShLKHQsUHkpKSl8fEJlKEZlKEsodCxFTykpKSkmJighQmUoRmUoSyhlLFB5KSkpfHxCZShGZShLKGUsRU8pKSkpLGg9KCFCZShGZShLKHQsUHkpKSl8fCFCZShGZShLKHQsRU8pKSkpJiYoIUJlKEZlKEsoZSxQeSkpKXx8IUJlKEZlKEsoZSxFTykpKSksbmV3IHB2dChfJiZvfHxNJiZoLF8sTSkpfWZ1bmN0aW9uIGd5bih0KXt2YXIgZSxuLHIscyxvLGgsZCx3O2ZvcihyPTAsbj0wLHc9bmV3IGNzLGU9MCxkPW5ldyBTKHQubik7ZC5hPGQuYy5jLmxlbmd0aDspaD11KFEoZCksMjExKSxoLmMuYy5sZW5ndGg9PTA/a3ModyxoLHcuYy5iLHcuYyk6KHI9Yi5NYXRoLm1heChyLGguZCksbis9aC5hKyhlPjA/dC5pOjApKSwrK2U7Zm9yKFRsbih0Lm4sdyksdC5kPW4sdC5yPXIsdC5nPTAsdC5mPTAsdC5lPTAsdC5vPWJzLHQucD1icyxvPW5ldyBTKHQuYik7by5hPG8uYy5jLmxlbmd0aDspcz11KFEobyksMzMpLHQucD1iLk1hdGgubWluKHQucCxzLmcpLHQuZz1iLk1hdGgubWF4KHQuZyxzLmcpLHQuZj1iLk1hdGgubWF4KHQuZixzLmYpLHQubz1iLk1hdGgubWluKHQubyxzLmYpLHQuZSs9cy5mK3QuaTt0LmE9dC5lL3QuYi5jLmxlbmd0aC10LmkqKCh0LmIuYy5sZW5ndGgtMSkvdC5iLmMubGVuZ3RoKSx6M3QodC5qKX1mdW5jdGlvbiB4bGUodCl7dmFyIGUsbixyLHM7cmV0dXJuIHQuRGImNjQ/eml0KHQpOihlPW5ldyBGbChvOHQpLHI9dC5rLHI/WXIoWXIoKGUuYSs9JyAiJyxlKSxyKSwnIicpOighdC5uJiYodC5uPW5ldyBoZShZbyx0LDEsNykpLHQubi5pPjAmJihzPSghdC5uJiYodC5uPW5ldyBoZShZbyx0LDEsNykpLHUoQXQodC5uLDApLDEzNykpLmEsIXN8fFlyKFlyKChlLmErPScgIicsZSkscyksJyInKSkpLG49KCF0LmImJih0LmI9bmV3IEVuKHZyLHQsNCw3KSksISh0LmIuaTw9MSYmKCF0LmMmJih0LmM9bmV3IEVuKHZyLHQsNSw4KSksdC5jLmk8PTEpKSksbj9lLmErPSIgWyI6ZS5hKz0iICIsWXIoZSxiMnQobmV3IGNldCxuZXcgbnIodC5iKSkpLG4mJihlLmErPSJdIiksZS5hKz1Cb3QsbiYmKGUuYSs9IlsiKSxZcihlLGIydChuZXcgY2V0LG5ldyBucih0LmMpKSksbiYmKGUuYSs9Il0iKSxlLmEpfWZ1bmN0aW9uIHhhdCh0LGUpe3ZhciBuLHIscyxvLGgsZCx3O2lmKHQuYSl7aWYoZD10LmEubmUoKSx3PW51bGwsZCE9bnVsbD9lLmErPSIiK2Q6KGg9dC5hLkRqKCksaCE9bnVsbCYmKG89dWQoaCxMdSg5MSkpLG8hPS0xPyh3PWguc3Vic3RyKG8pLGUuYSs9IiIrQmwoaD09bnVsbD9NdTooSW4oaCksaCksMCxvKSk6ZS5hKz0iIitoKSksdC5kJiZ0LmQuaSE9MCl7Zm9yKHM9ITAsZS5hKz0iPCIscj1uZXcgbnIodC5kKTtyLmUhPXIuaS5nYygpOyluPXUoZHIociksODcpLHM/cz0hMTplLmErPVhhLHhhdChuLGUpO2UuYSs9Ij4ifXchPW51bGwmJihlLmErPSIiK3cpfWVsc2UgdC5lPyhkPXQuZS56YixkIT1udWxsJiYoZS5hKz0iIitkKSk6KGUuYSs9Ij8iLHQuYj8oZS5hKz0iIHN1cGVyICIseGF0KHQuYixlKSk6dC5mJiYoZS5hKz0iIGV4dGVuZHMgIix4YXQodC5mLGUpKSl9ZnVuY3Rpb24gcHluKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxfLE0sQixxLEcsVyxaLGJ0LE10LFN0LGp0LFF0LGNlLF9lLFdlLFFlLFJuO2ZvcihRdD10LmMsY2U9ZS5jLG49R28oUXQuYSx0LDApLHI9R28oY2UuYSxlLDApLFN0PXUoaXcodCwoaG8oKSxhbCkpLktjKCkuUGIoKSwxMSksUWU9dShpdyh0LHN1KS5LYygpLlBiKCksMTEpLGp0PXUoaXcoZSxhbCkuS2MoKS5QYigpLDExKSxSbj11KGl3KGUsc3UpLktjKCkuUGIoKSwxMSksYnQ9cGQoU3QuZSksX2U9cGQoUWUuZyksTXQ9cGQoanQuZSksV2U9cGQoUm4uZyksb3kodCxyLGNlKSxoPU10LF89MCxHPWgubGVuZ3RoO188RzsrK18pcz1oW19dLHBhKHMsU3QpO2ZvcihkPVdlLE09MCxXPWQubGVuZ3RoO008VzsrK00pcz1kW01dLEJhKHMsUWUpO2ZvcihveShlLG4sUXQpLHc9YnQsQj0wLFo9dy5sZW5ndGg7QjxaOysrQilzPXdbQl0scGEocyxqdCk7Zm9yKG89X2Usaz0wLHE9by5sZW5ndGg7azxxOysraylzPW9ba10sQmEocyxSbil9ZnVuY3Rpb24ga2xlKHQsZSxuLHIpe3ZhciBzLG8saCxkLHcsayxfO2lmKG89RXoociksZD1CZShGZShLKHIsKHhlKCksSlR0KSkpKSwoZHx8QmUoRmUoSyh0LEpWKSkpKSYmIVYzKHUoSyh0LHdzKSw5OCkpKXM9WjYobyksdz1LNXQodCxuLG49PShobygpLHN1KT9zOkhEKHMpKTtlbHNlIHN3aXRjaCh3PW5ldyBOYyx0Yyh3LHQpLGU/KF89dy5uLF8uYT1lLmEtdC5uLmEsXy5iPWUuYi10Lm4uYixPYWUoXywwLDAsdC5vLmEsdC5vLmIpLFVzKHcsVXVlKHcsbykpKToocz1aNihvKSxVcyh3LG49PShobygpLHN1KT9zOkhEKHMpKSksaD11KEsociwoYWUoKSxXYykpLDIxKSxrPXcuaixvLmcpe2Nhc2UgMjpjYXNlIDE6KGs9PShiZSgpLE9uKXx8az09eXIpJiZoLkZjKChnbygpLFU0KSk7YnJlYWs7Y2FzZSA0OmNhc2UgMzooaz09KGJlKCksSG4pfHxrPT1CbikmJmguRmMoKGdvKCksVTQpKX1yZXR1cm4gd31mdW5jdGlvbiBvNnQodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLF87cmV0dXJuIGIuTWF0aC5hYnMoZS5zLWUuYyk8eGR8fGIuTWF0aC5hYnMobi5zLW4uYyk8eGQ/MDoocj1PY2UodCxlLmosbi5lKSxzPU9jZSh0LG4uaixlLmUpLG89cj09LTF8fHM9PS0xLGg9MCxvPyhyPT0tMSYmKG5ldyBuMigoWWYoKSx2YiksbixlLDEpLCsraCkscz09LTEmJihuZXcgbjIoKFlmKCksdmIpLGUsbiwxKSwrK2gpKTooZD1vNChlLmosbi5zLG4uYyksZCs9bzQobi5lLGUucyxlLmMpLHc9bzQobi5qLGUucyxlLmMpLHcrPW80KGUuZSxuLnMsbi5jKSxrPXIrMTYqZCxfPXMrMTYqdyxrPF8/bmV3IG4yKChZZigpLFV5KSxlLG4sXy1rKTprPl8/bmV3IG4yKChZZigpLFV5KSxuLGUsay1fKTprPjAmJl8+MCYmKG5ldyBuMigoWWYoKSxVeSksZSxuLDApLG5ldyBuMihVeSxuLGUsMCkpKSxoKX1mdW5jdGlvbiBFbGUodCxlKXt2YXIgbixyLHMsbyxoLGQ7Zm9yKGg9bmV3IGQyKG5ldyBrZyh0LmYuYikuYSk7aC5iOyl7aWYobz1ZdihoKSxzPXUoby5jZCgpLDU5NCksZT09MSl7aWYocy5nZigpIT0oZm8oKSxaMCkmJnMuZ2YoKSE9UTApY29udGludWV9ZWxzZSBpZihzLmdmKCkhPShmbygpLEhoKSYmcy5nZigpIT1fZiljb250aW51ZTtzd2l0Y2gocj11KHUoby5kZCgpLDQ2KS5iLDgxKSxkPXUodShvLmRkKCksNDYpLmEsMTg5KSxuPWQuYyxzLmdmKCkuZyl7Y2FzZSAyOnIuZy5jPXQuZS5hLHIuZy5iPWIuTWF0aC5tYXgoMSxyLmcuYituKTticmVhaztjYXNlIDE6ci5nLmM9ci5nLmMrbixyLmcuYj1iLk1hdGgubWF4KDEsci5nLmItbik7YnJlYWs7Y2FzZSA0OnIuZy5kPXQuZS5iLHIuZy5hPWIuTWF0aC5tYXgoMSxyLmcuYStuKTticmVhaztjYXNlIDM6ci5nLmQ9ci5nLmQrbixyLmcuYT1iLk1hdGgubWF4KDEsci5nLmEtbil9fX1mdW5jdGlvbiBieW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXO2ZvcihkPU50KFNyLEpyLDI1LGUuYi5jLmxlbmd0aCwxNSwxKSxrPU50KHJsdCxvZSwyNjcsZS5iLmMubGVuZ3RoLDAsMSksdz1OdChvMCxHZywxMCxlLmIuYy5sZW5ndGgsMCwxKSxNPXQuYSxCPTAscT1NLmxlbmd0aDtCPHE7KytCKXtmb3IoXz1NW0JdLFc9MCxoPW5ldyBTKF8uZSk7aC5hPGguYy5jLmxlbmd0aDspcz11KFEoaCksMTApLHI9UWJ0KHMuYyksKytkW3JdLEc9WnQodmUoSyhlLCh4ZSgpLFRmKSkpKSxkW3JdPjAmJndbcl0mJihHPVUzKHQuYix3W3JdLHMpKSxXPWIuTWF0aC5tYXgoVyxzLmMuYy5iK0cpO2ZvcihvPW5ldyBTKF8uZSk7by5hPG8uYy5jLmxlbmd0aDspcz11KFEobyksMTApLHMubi5iPVcrcy5kLmQsbj1zLmMsbi5jLmI9VytzLmQuZCtzLm8uYitzLmQuYSxrW0dvKG4uYi5iLG4sMCldPXMuayx3W0dvKG4uYi5iLG4sMCldPXN9fWZ1bmN0aW9uIFRsZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXyxNLEI7Zm9yKHI9bmV3IGFyKGxyKFYwKGUpLmEuS2MoKSxuZXcgSCkpO1ZyKHIpOyluPXUoSXIociksNzkpLF90KEF0KCghbi5iJiYobi5iPW5ldyBFbih2cixuLDQsNykpLG4uYiksMCksMTg2KXx8KHc9Um8odShBdCgoIW4uYyYmKG4uYz1uZXcgRW4odnIsbiw1LDgpKSxuLmMpLDApLDgyKSksZ0Mobil8fChoPWUuaStlLmcvMixkPWUuaitlLmYvMixfPXcuaSt3LmcvMixNPXcuait3LmYvMixCPW5ldyBEYSxCLmE9Xy1oLEIuYj1NLWQsbz1uZXcgUmUoQi5hLEIuYiksdTcobyxlLmcsZS5mKSxCLmEtPW8uYSxCLmItPW8uYixoPV8tQi5hLGQ9TS1CLmIsaz1uZXcgUmUoQi5hLEIuYiksdTcoayx3Lmcsdy5mKSxCLmEtPWsuYSxCLmItPWsuYixfPWgrQi5hLE09ZCtCLmIscz15NChuLCEwLCEwKSxQOChzLGgpLEI4KHMsZCksTjgocyxfKSxGOChzLE0pLFRsZSh0LHcpKSl9ZnVuY3Rpb24gX2xlKHQpe1N2KHQsbmV3IHkyKEV2KHl2KGt2KHh2KG5ldyBtZyxtdyksIkVMSyBTUE9yRSBDb21wYWN0aW9uIiksIlNocmlua1RyZWUgaXMgYSBjb21wYWN0aW9uIGFsZ29yaXRobSB0aGF0IG1haW50YWlucyB0aGUgdG9wb2xvZ3kgb2YgYSBsYXlvdXQuIFRoZSByZWxvY2F0aW9uIG9mIGRpYWdyYW0gZWxlbWVudHMgaXMgYmFzZWQgb24gY29udHJhY3RpbmcgYSBzcGFubmluZyB0cmVlLiIpLG5ldyBQTCkpKSx3ZSh0LG13LEFjdCxJZShJRykpLHdlKHQsbXcsUWt0LEllKFFodCkpLHdlKHQsbXcsWmt0LEllKFhodCkpLHdlKHQsbXcsTGN0LEllKHRTdCkpLHdlKHQsbXcsTWN0LEllKFlodCkpLHdlKHQsbXcsd3csSkN0KSx3ZSh0LG13LGt5LDgpLHdlKHQsbXcsRGN0LEllKGYzZSkpLHdlKHQsbXcsSmt0LEllKFFDdCkpLHdlKHQsbXcsdDh0LEllKFpDdCkpLHdlKHQsbXcsS0ksKEZuKCksITEpKX1mdW5jdGlvbiB2eW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLF8sTTtmb3IobXIoZSwiU2ltcGxlIG5vZGUgcGxhY2VtZW50IiwxKSxNPXUoSyh0LChhZSgpLFg0KSksMzA0KSxkPTAsbz1uZXcgUyh0LmIpO28uYTxvLmMuYy5sZW5ndGg7KXtmb3Iocj11KFEobyksMjkpLGg9ci5jLGguYj0wLG49bnVsbCxrPW5ldyBTKHIuYSk7ay5hPGsuYy5jLmxlbmd0aDspdz11KFEoayksMTApLG4mJihoLmIrPXkzdCh3LG4sTS5jKSksaC5iKz13LmQuZCt3Lm8uYit3LmQuYSxuPXc7ZD1iLk1hdGgubWF4KGQsaC5iKX1mb3Iocz1uZXcgUyh0LmIpO3MuYTxzLmMuYy5sZW5ndGg7KWZvcihyPXUoUShzKSwyOSksaD1yLmMsXz0oZC1oLmIpLzIsbj1udWxsLGs9bmV3IFMoci5hKTtrLmE8ay5jLmMubGVuZ3RoOyl3PXUoUShrKSwxMCksbiYmKF8rPXkzdCh3LG4sTS5jKSksXys9dy5kLmQsdy5uLmI9XyxfKz13Lm8uYit3LmQuYSxuPXc7b3IoZSl9ZnVuY3Rpb24gd3luKHQsZSxuLHIpe3ZhciBzLG8saCxkLHcsayxfLE07aWYoci5nYygpPT0wKXJldHVybiExO2lmKHc9KHNvKCksdShlLDY2KS5PaigpKSxoPXc/cjpuZXcgS3Yoci5nYygpKSxHMCh0LmUsZSkpe2lmKGUuaGkoKSlmb3IoXz1yLktjKCk7Xy5PYigpOylrPV8uUGIoKSxtcSh0LGUsayxfdChlLDk5KSYmKHUoZSwxOCkuQmImUWEpIT0wKXx8KG89WWQoZSxrKSxoLkZjKG8pKTtlbHNlIGlmKCF3KWZvcihfPXIuS2MoKTtfLk9iKCk7KWs9Xy5QYigpLG89WWQoZSxrKSxoLkZjKG8pfWVsc2V7Zm9yKE09aHUodC5lLlRnKCksZSkscz11KHQuZywxMTkpLGQ9MDtkPHQuaTsrK2QpaWYobz1zW2RdLE0ucmwoby5haygpKSl0aHJvdyBudChuZXcgUG4oZU8pKTtpZihyLmdjKCk+MSl0aHJvdyBudChuZXcgUG4oZU8pKTt3fHwobz1ZZChlLHIuS2MoKS5QYigpKSxoLkZjKG8pKX1yZXR1cm4gdnl0KHQsQjR0KHQsZSxuKSxoKX1mdW5jdGlvbiBteW4odCxlKXt2YXIgbixyLHMsbztmb3Iobm9uKGUuYi5qKSx5cyh4dShuZXcga24obnVsbCxuZXcgVG4oZS5kLDE2KSksbmV3IHpYKSxuZXcgcVgpLG89bmV3IFMoZS5kKTtvLmE8by5jLmMubGVuZ3RoOyl7c3dpdGNoKHM9dShRKG8pLDEwMSkscy5lLmcpe2Nhc2UgMDpuPXUoUGUocy5qLDApLDExMykuZC5qLEtCKHMsdShPdihIaih1KFBpKHMuayxuKSwxNSkuT2MoKSxxNCkpLDExMykpLFdCKHMsdShPdihxaih1KFBpKHMuayxuKSwxNSkuT2MoKSxxNCkpLDExMykpO2JyZWFrO2Nhc2UgMTpyPVYzdChzKSxLQihzLHUoT3YoSGoodShQaShzLmssclswXSksMTUpLk9jKCkscTQpKSwxMTMpKSxXQihzLHUoT3YocWoodShQaShzLmssclsxXSksMTUpLk9jKCkscTQpKSwxMTMpKTticmVhaztjYXNlIDI6cGduKHQscyk7YnJlYWs7Y2FzZSAzOkQybihzKTticmVhaztjYXNlIDQ6UDJuKHQscyl9ZW9uKHMpfXQuYT1udWxsfWZ1bmN0aW9uIGthdCh0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssXztyZXR1cm4gcj10LmEubz09KEMxKCksVjEpP2JzOk5zLGQ9dGxlKHQsbmV3IGVHdChlLG4pKSwhZC5hJiZkLmM/KGFpKHQuZCxkKSxyKTpkLmE/KHM9ZC5hLmMsdz1kLmEuZCxuPyhrPXQuYS5jPT0oZ2QoKSxSdyk/dzpzLG89dC5hLmM9PVJ3P3M6dyxoPXQuYS5nW28uaS5wXSxfPVp0KHQuYS5wW2gucF0pK1p0KHQuYS5kW28uaS5wXSkrby5uLmIrby5hLmItWnQodC5hLmRbay5pLnBdKS1rLm4uYi1rLmEuYik6KGs9dC5hLmM9PShnZCgpLFpnKT93OnMsbz10LmEuYz09Wmc/czp3LF89WnQodC5hLnBbdC5hLmdbby5pLnBdLnBdKStadCh0LmEuZFtvLmkucF0pK28ubi5iK28uYS5iLVp0KHQuYS5kW2suaS5wXSktay5uLmItay5hLmIpLHQuYS5uW3QuYS5nW3MuaS5wXS5wXT0oRm4oKSwhMCksdC5hLm5bdC5hLmdbdy5pLnBdLnBdPSEwLF8pOnJ9ZnVuY3Rpb24ga3EodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLF87aWYoRzAodC5lLGUpKXc9KHNvKCksdShlLDY2KS5PaigpP25ldyBEaihlLHQpOm5ldyBJTShlLHQpKSxpcSh3LmMsdy5iKSxoXyh3LHUobiwxNCkpO2Vsc2V7Zm9yKF89aHUodC5lLlRnKCksZSkscj11KHQuZywxMTkpLGg9MDtoPHQuaTsrK2gpaWYocz1yW2hdLG89cy5haygpLF8ucmwobykpe2lmKG89PShzeCgpLFV4KXx8bz09R3gpe2ZvcihrPU4zdCh0LGUsbiksZD1oLGs/ZHkodCxoKTorK2g7aDx0Lmk7KXM9cltoXSxvPXMuYWsoKSxvPT1VeHx8bz09R3g/ZHkodCxoKTorK2g7a3x8dShsNCh0LGQsWWQoZSxuKSksNzIpfWVsc2UgTjN0KHQsZSxuKT9keSh0LGgpOnUobDQodCxoLChzbygpLHUoZSw2NikuT2ooKT91KG4sNzIpOllkKGUsbikpKSw3Mik7cmV0dXJufU4zdCh0LGUsbil8fE9yKHQsKHNvKCksdShlLDY2KS5PaigpP3Uobiw3Mik6WWQoZSxuKSkpfX1mdW5jdGlvbiBDbGUodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLF87cmV0dXJuIFNpKG4sdC5iKXx8KHQuYj1uLG89bmV3IFM5LGg9dSgkbCh4dShuZXcga24obnVsbCxuZXcgVG4obi5mLDE2KSksbyksWW0obmV3IFl0LG5ldyBNaSxuZXcgYmksbmV3IGRuLHV0KG90KHdsLDEpLG9lLDEzMiwwLFsoTjEoKSxMeSksWWxdKSkpLDIxKSx0LmU9ITAsdC5mPSEwLHQuYz0hMCx0LmQ9ITAscz1oLkhjKChleCgpLGNPKSkscj1oLkhjKHVPKSxzJiYhciYmKHQuZj0hMSksIXMmJnImJih0LmQ9ITEpLHM9aC5IYyhvTykscj1oLkhjKGxPKSxzJiYhciYmKHQuYz0hMSksIXMmJnImJih0LmU9ITEpKSxfPXUodC5hLkNlKGUsbiksNDYpLHc9dShfLmEsMTkpLmEsaz11KF8uYiwxOSkuYSxkPSExLHc8MD90LmN8fChkPSEwKTp0LmV8fChkPSEwKSxrPDA/dC5kfHwoZD0hMCk6dC5mfHwoZD0hMCksZD9DbGUodCxfLG4pOl99ZnVuY3Rpb24geXluKHQpe3ZhciBlLG4scixzO3M9dC5vLEJtKCksdC5BLmRjKCl8fFNpKHQuQSxRN3QpP2U9cy5iOihlPWNJKHQuZiksdC5BLkhjKChObCgpLGVOKSkmJiF0LkIuSGMoKGJsKCksZUEpKSYmKGU9Yi5NYXRoLm1heChlLGNJKHUoeG8odC5wLChiZSgpLEhuKSksMjQ0KSkpLGU9Yi5NYXRoLm1heChlLGNJKHUoeG8odC5wLEJuKSwyNDQpKSkpLG49Q25lKHQpLG4mJihlPWIuTWF0aC5tYXgoZSxuLmIpKSx0LkEuSGMobk4pJiYodC5xPT0odmEoKSxoMCl8fHQucT09S2MpJiYoZT1iLk1hdGgubWF4KGUsTGoodSh4byh0LmIsKGJlKCksSG4pKSwxMjQpKSksZT1iLk1hdGgubWF4KGUsTGoodSh4byh0LmIsQm4pLDEyNCkpKSkpLEJlKEZlKHQuZS55ZigpLldlKChkaSgpLGpHKSkpKT9zLmI9Yi5NYXRoLm1heChzLmIsZSk6cy5iPWUscj10LmYuaSxyLmQ9MCxyLmE9ZSxwYXQodC5mKX1mdW5jdGlvbiBTbGUodCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXO2ZvcihNPTA7TTxlLmxlbmd0aDtNKyspe2ZvcihkPXQuS2MoKTtkLk9iKCk7KW89dShkLlBiKCksMjI1KSxvLk9mKE0sZSk7Zm9yKEI9MDtCPGVbTV0ubGVuZ3RoO0IrKyl7Zm9yKHc9dC5LYygpO3cuT2IoKTspbz11KHcuUGIoKSwyMjUpLG8uUGYoTSxCLGUpO2ZvcihXPWVbTV1bQl0uaixxPTA7cTxXLmMubGVuZ3RoO3ErKyl7Zm9yKGs9dC5LYygpO2suT2IoKTspbz11KGsuUGIoKSwyMjUpLG8uUWYoTSxCLHEsZSk7Zm9yKEc9KFNuKHEsVy5jLmxlbmd0aCksdShXLmNbcV0sMTEpKSxuPTAscz1uZXcgTTEoRy5iKTtKbyhzLmEpfHxKbyhzLmIpOylmb3Iocj11KEpvKHMuYSk/UShzLmEpOlEocy5iKSwxNyksXz10LktjKCk7Xy5PYigpOylvPXUoXy5QYigpLDIyNSksby5OZihNLEIscSxuKysscixlKX19fWZvcihoPXQuS2MoKTtoLk9iKCk7KW89dShoLlBiKCksMjI1KSxvLk1mKCl9ZnVuY3Rpb24geHluKHQsZSl7dmFyIG4scixzLG8saCxkLHc7Zm9yKHQuYj1adCh2ZShLKGUsKHhlKCksWjQpKSkpLHQuYz1adCh2ZShLKGUsJDIpKSksdC5kPXUoSyhlLFhsdCksMzM2KSx0LmE9dShLKGUsS1YpLDI3NSksZ2ZuKGUpLGQ9dSgkbChXaShXaShlYyhlYyhuZXcga24obnVsbCxuZXcgVG4oZS5iLDE2KSksbmV3IEVZKSxuZXcgTjkpLG5ldyB4TCksbmV3IFpQKSxhMihuZXcga2UsbmV3IG5lLG5ldyBwaSx1dChvdCh3bCwxKSxvZSwxMzIsMCxbKE4xKCksWWwpXSkpKSwxNSkscz1kLktjKCk7cy5PYigpOyluPXUocy5QYigpLDE3KSxoPXUoSyhuLChhZSgpLEYyKSksMTUpLGguSmMobmV3IFRjKHQpKSxlZShuLEYyLG51bGwpO2ZvcihyPWQuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksMTcpLHc9dShLKG4sKGFlKCksZVR0KSksMTcpLG89dShLKG4sUTQpLDE1KSxMNW4odCxvLHcpLGVlKG4sUTQsbnVsbCl9ZnVuY3Rpb24ga3luKHQpe3QuYj1udWxsLHQuYT1udWxsLHQubz1udWxsLHQucT1udWxsLHQudj1udWxsLHQudz1udWxsLHQuQj1udWxsLHQucD1udWxsLHQuUT1udWxsLHQuUj1udWxsLHQuUz1udWxsLHQuVD1udWxsLHQuVT1udWxsLHQuVj1udWxsLHQuVz1udWxsLHQuYmI9bnVsbCx0LmViPW51bGwsdC5hYj1udWxsLHQuSD1udWxsLHQuZGI9bnVsbCx0LmM9bnVsbCx0LmQ9bnVsbCx0LmY9bnVsbCx0Lm49bnVsbCx0LnI9bnVsbCx0LnM9bnVsbCx0LnU9bnVsbCx0Lkc9bnVsbCx0Lko9bnVsbCx0LmU9bnVsbCx0Lmo9bnVsbCx0Lmk9bnVsbCx0Lmc9bnVsbCx0Lms9bnVsbCx0LnQ9bnVsbCx0LkY9bnVsbCx0Lkk9bnVsbCx0Lkw9bnVsbCx0Lk09bnVsbCx0Lk89bnVsbCx0LlA9bnVsbCx0LiQ9bnVsbCx0Lk49bnVsbCx0Llo9bnVsbCx0LmNiPW51bGwsdC5LPW51bGwsdC5EPW51bGwsdC5BPW51bGwsdC5DPW51bGwsdC5fPW51bGwsdC5mYj1udWxsLHQuWD1udWxsLHQuWT1udWxsLHQuZ2I9ITEsdC5oYj0hMX1mdW5jdGlvbiBFYXQodCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrO3JldHVybiEodC5rIT0oR24oKSxxcyl8fHQuai5jLmxlbmd0aDw9MXx8KG89dShLKHQsKHhlKCksd3MpKSw5OCksbz09KHZhKCksS2MpKXx8KHM9KHN5KCksKHQucT90LnE6KHBuKCkscG4oKSxhMCkpLl9iKE53KT9yPXUoSyh0LE53KSwxOTcpOnI9dShLKCRhKHQpLF9TKSwxOTcpLHIpLHM9PWxHKXx8IShzPT1lNXx8cz09dDUpJiYoaD1adCh2ZShpeSh0LENTKSkpLGU9dShLKHQsTE8pLDE0MiksIWUmJihlPW5ldyBKMnQoaCxoLGgsaCkpLGs9cmModCwoYmUoKSxCbikpLHc9ZS5kK2UuYSsoay5nYygpLTEpKmgsdz50Lm8uYnx8KG49cmModCxIbiksZD1lLmQrZS5hKyhuLmdjKCktMSkqaCxkPnQuby5iKSkpfWZ1bmN0aW9uIFRhdCh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXyxNLEIscSxHO2lmKGg9dC5lLHc9ZS5lLGg9PTApcmV0dXJuIGU7aWYodz09MClyZXR1cm4gdDtpZihvPXQuZCxkPWUuZCxvK2Q9PTIpcmV0dXJuIG49R3ModC5hWzBdLHBvKSxyPUdzKGUuYVswXSxwbyksaD09dz8oXz1SYShuLHIpLEc9TXIoXykscT1Ncih6bShfLDMyKSkscT09MD9uZXcgT2coaCxHKTpuZXcgWTMoaCwyLHV0KG90KFNyLDEpLEpyLDI1LDE1LFtHLHFdKSkpOktEKGg8MD9RcChyLG4pOlFwKG4scikpO2lmKGg9PXcpQj1oLE09bz49ZD8kcnQodC5hLG8sZS5hLGQpOiRydChlLmEsZCx0LmEsbyk7ZWxzZXtpZihzPW8hPWQ/bz5kPzE6LTE6SXl0KHQuYSxlLmEsbykscz09MClyZXR1cm4gZWIoKSxZNztzPT0xPyhCPWgsTT1ScnQodC5hLG8sZS5hLGQpKTooQj13LE09UnJ0KGUuYSxkLHQuYSxvKSl9cmV0dXJuIGs9bmV3IFkzKEIsTS5sZW5ndGgsTSksT18oayksa31mdW5jdGlvbiBfYXQodCxlLG4scixzLG8saCl7dmFyIGQsdyxrLF8sTSxCLHE7cmV0dXJuIE09QmUoRmUoSyhlLCh4ZSgpLHRfdCkpKSksQj1udWxsLG89PShobygpLGFsKSYmci5jLmk9PW4/Qj1yLmM6bz09c3UmJnIuZC5pPT1uJiYoQj1yLmQpLGs9aCwha3x8IU18fEI/KF89KGJlKCksYWMpLEI/Xz1CLmo6VjModShLKG4sd3MpLDk4KSkmJihfPW89PWFsP0JuOkhuKSx3PUV5bih0LGUsbixvLF8sciksZD1GcnQoKCRhKG4pLHIpKSxvPT1hbD8oQmEoZCx1KFBlKHcuaiwwKSwxMSkpLHBhKGQscykpOihCYShkLHMpLHBhKGQsdShQZSh3LmosMCksMTEpKSksaz1uZXcgcXJlKHIsZCx3LHUoSyh3LChhZSgpLElpKSksMTEpLG8sIUIpKToodWUoay5lLHIpLHE9Yi5NYXRoLm1heChadCh2ZShLKGsuZCxYZykpKSxadCh2ZShLKHIsWGcpKSkpLGVlKGsuZCxYZyxxKSksY24odC5hLHIsbmV3IFRqKGsuZCxlLG8pKSxrfWZ1bmN0aW9uIEVxKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxfLE07aWYoXz1udWxsLHQuZCYmKF89dShqYyh0LmQsZSksMTM4KSksIV8pe2lmKG89dC5hLk1oKCksTT1vLmksIXQuZHx8JFQodC5kKSE9TSl7Zm9yKHc9bmV3IEFyLHQuZCYmR18odyx0LmQpLGs9dy5mLmMrdy5nLmMsZD1rO2Q8TTsrK2Qpcj11KEF0KG8sZCksMTM4KSxzPUJnKHQuZSxyKS5uZSgpLG49dShzPT1udWxsP2x1KHcuZixudWxsLHIpOm53KHcuZyxzLHIpLDEzOCksbiYmbiE9ciYmKHM9PW51bGw/bHUody5mLG51bGwsbik6bncody5nLHMsbikpO2lmKHcuZi5jK3cuZy5jIT1NKWZvcihoPTA7aDxrOysraClyPXUoQXQobyxoKSwxMzgpLHM9QmcodC5lLHIpLm5lKCksbj11KHM9PW51bGw/bHUody5mLG51bGwscik6bncody5nLHMsciksMTM4KSxuJiZuIT1yJiYocz09bnVsbD9sdSh3LmYsbnVsbCxuKTpudyh3LmcscyxuKSk7dC5kPXd9Xz11KGpjKHQuZCxlKSwxMzgpfXJldHVybiBffWZ1bmN0aW9uIEV5bih0LGUsbixyLHMsbyl7dmFyIGgsZCx3LGssXyxNO3JldHVybiBoPW51bGwsaz1yPT0oaG8oKSxhbCk/by5jOm8uZCx3PUV6KGUpLGsuaT09bj8oaD11KHRyKHQuYixrKSwxMCksaHx8KGg9VEkoayx1KEsobiwoeGUoKSx3cykpLDk4KSxzLE93bihrKSxudWxsLGsubixrLm8sdyxlKSxlZShoLChhZSgpLElpKSxrKSxBaSh0LmIsayxoKSkpOihoPVRJKChfPW5ldyB4MyxNPVp0KHZlKEsoZSwoeGUoKSxUZikpKSkvMixGRChfLHp5LE0pLF8pLHUoSyhuLHdzKSw5OCkscyxyPT1hbD8tMToxLG51bGwsbmV3IERhLG5ldyBSZSgwLDApLHcsZSksZD12ZG4oaCxuLHIpLGVlKGgsKGFlKCksSWkpLGQpLEFpKHQuYixkLGgpKSx1KEsoZSwoYWUoKSxXYykpLDIxKS5GYygoZ28oKSx5aCkpLFYzKHUoSyhlLCh4ZSgpLHdzKSksOTgpKT9lZShlLHdzLCh2YSgpLFNFKSk6ZWUoZSx3cywodmEoKSxVMSkpLGh9ZnVuY3Rpb24gVHluKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxfLE0sQixxLEcsVyxaO21yKGUsIk9ydGhvZ29uYWwgZWRnZSByb3V0aW5nIiwxKSxrPVp0KHZlKEsodCwoeGUoKSxKNCkpKSksbj1adCh2ZShLKHQsWjQpKSkscj1adCh2ZShLKHQsJDIpKSksQj1uZXcgVW50KDAsbiksWj0wLGg9bmV3IHhhKHQuYiwwKSxkPW51bGwsXz1udWxsLHc9bnVsbCxNPW51bGw7ZG8gXz1oLmI8aC5kLmdjKCk/KFpuKGguYjxoLmQuZ2MoKSksdShoLmQuWGIoaC5jPWguYisrKSwyOSkpOm51bGwsTT1fP18uYTpudWxsLGQmJih1NnQoZCxaKSxaKz1kLmMuYSksVz1kP1orcjpaLEc9ZzZ0KEIsdCx3LE0sVykscz0hZHx8ZWoodywoaHEoKSxOTykpLG89IV98fGVqKE0sKGhxKCksTk8pKSxHPjA/KHE9KEctMSkqbixkJiYocSs9ciksXyYmKHErPXIpLHE8ayYmIXMmJiFvJiYocT1rKSxaKz1xKTohcyYmIW8mJihaKz1rKSxkPV8sdz1NO3doaWxlKF8pO3QuZi5hPVosb3IoZSl9ZnVuY3Rpb24gQ2F0KCl7Q2F0PVg7dmFyIHQ7S0F0PW5ldyB2cXQscTRlPU50KExlLHJlLDIsMCw2LDEpLCQ0ZT1BMShRNigzMyw1OCksUTYoMSwyNikpLHo0ZT1BMShRNig5NywxMjIpLFE2KDY1LDkwKSksSEF0PVE2KDQ4LDU3KSxSNGU9QTEoJDRlLDApLGo0ZT1BMSh6NGUsSEF0KSxWQXQ9QTEoQTEoMCxRNigxLDYpKSxRNigzMywzOCkpLEdBdD1BMShBMShIQXQsUTYoNjUsNzApKSxRNig5NywxMDIpKSxINGU9QTEoUjRlLFB6KCItXy4hfionKCkiKSksVjRlPUExKGo0ZSxMeigiLV8uIX4qJygpIikpLFB6KG8wZSksTHoobzBlKSxBMShINGUsUHooIjs6QCY9KyQsIikpLEExKFY0ZSxMeigiOzpAJj0rJCwiKSksVUF0PVB6KCI6Lz8jIiksV0F0PUx6KCI6Lz8jIiksaUE9UHooIi8/IyIpLHNBPUx6KCIvPyMiKSx0PW5ldyBRcyx0LmEuemMoImphciIsdCksdC5hLnpjKCJ6aXAiLHQpLHQuYS56YygiYXJjaGl2ZSIsdCksclU9KHBuKCksbmV3IFlrKHQpKX1mdW5jdGlvbiBBbGUodCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLF8sTTtpZihlZShlLChtYygpLHlFKSwwKSx3PXUoSyhlLHlHKSw4NiksZS5kLmI9PTApdz8oXz1adCh2ZShLKHcsSmcpKSkrdC5hK3NtdCh3LGUpLGVlKGUsSmcsXykpOmVlKGUsSmcsMCk7ZWxzZXtmb3Iocj0obz1zaShuZXcgU3AoZSkuYS5kLDApLG5ldyBwNihvKSk7a1Ioci5hKTspbj11KGlpKHIuYSksMTg4KS5jLEFsZSh0LG4pO2Q9dShsaigoaD1zaShuZXcgU3AoZSkuYS5kLDApLG5ldyBwNihoKSkpLDg2KSxNPXUoR1hlKChzPXNpKG5ldyBTcChlKS5hLmQsMCksbmV3IHA2KHMpKSksODYpLGs9KFp0KHZlKEsoTSxKZykpKStadCh2ZShLKGQsSmcpKSkpLzIsdz8oXz1adCh2ZShLKHcsSmcpKSkrdC5hK3NtdCh3LGUpLGVlKGUsSmcsXyksZWUoZSx5RSxadCh2ZShLKGUsSmcpKSktayksSTNuKHQsZSkpOmVlKGUsSmcsayl9fWZ1bmN0aW9uIGs3KHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxfLE0sQixxLEc7ZD0wLEc9MCx3PWwkKHQuZix0LmYubGVuZ3RoKSxvPXQuZCxoPXQuaSxyPXQuYSxzPXQuYjtkb3tmb3IocT0wLF89bmV3IFModC5wKTtfLmE8Xy5jLmMubGVuZ3RoOylrPXUoUShfKSwxMCksQj1XbGUodCxrKSxuPSEwLCh0LnE9PShtNCgpLE1PKXx8dC5xPT1ETykmJihuPUJlKEZlKEIuYikpKSx1KEIuYSwxOSkuYTwwJiZuPygrK3Esdz1sJCh0LmYsdC5mLmxlbmd0aCksdC5kPXQuZCt1KEIuYSwxOSkuYSxHKz1vLXQuZCxvPXQuZCt1KEIuYSwxOSkuYSxoPXQuaSxyPVZ2KHQuYSkscz1Wdih0LmIpKToodC5mPWwkKHcsdy5sZW5ndGgpLHQuZD1vLHQuYT0oRHIocikscj9uZXcgcXUocik6aDgobmV3IFMocikpKSx0LmI9KERyKHMpLHM/bmV3IHF1KHMpOmg4KG5ldyBTKHMpKSksdC5pPWgpOysrZCxNPXEhPTAmJkJlKEZlKGUuS2IobmV3IHlhKGRlKEcpLGRlKGQpKSkpKX13aGlsZShNKX1mdW5jdGlvbiBfeW4odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFosYnQsTXQsU3QsanQsUXQsY2UsX2UsV2UsUWU7cmV0dXJuIGg9dC5mLEI9ZS5mLGQ9aD09KHc3KCksQngpfHxoPT16UyxxPUI9PUJ4fHxCPT16Uyx3PWg9PXI1fHxoPT1xUyxHPUI9PXI1fHxCPT1xUyxrPWg9PXI1fHxoPT1CeCxXPUI9PXI1fHxCPT1CeCxkJiZxP3QuZj09elM/dDplOncmJkc/dC5mPT1xUz90OmU6ayYmVz8oaD09cjU/KE09dCxfPWUpOihNPWUsXz10KSxvPShaPW4uaituLmYsYnQ9TS5lK3IuZixNdD1iLk1hdGgubWF4KFosYnQpLFN0PU10LWIuTWF0aC5taW4obi5qLE0uZSksanQ9TS5kK3IuZy1uLmksanQqU3QpLHM9KFF0PW4uaStuLmcsY2U9Xy5kK3IuZyxfZT1iLk1hdGgubWF4KFF0LGNlKSxXZT1fZS1iLk1hdGgubWluKG4uaSxfLmQpLFFlPV8uZStyLmYtbi5qLFdlKlFlKSxvPD1zP3QuZj09cjU/dDplOnQuZj09Qng/dDplKTp0fWZ1bmN0aW9uIEN5bih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssXyxNO2ZvcihfPXQuZS5hLmMubGVuZ3RoLGg9bmV3IFModC5lLmEpO2guYTxoLmMuYy5sZW5ndGg7KW89dShRKGgpLDEyMSksby5qPSExO2Zvcih0Lmk9TnQoU3IsSnIsMjUsXywxNSwxKSx0Lmc9TnQoU3IsSnIsMjUsXywxNSwxKSx0Lm49bmV3IGxlLHM9MCxNPW5ldyBsZSx3PW5ldyBTKHQuZS5hKTt3LmE8dy5jLmMubGVuZ3RoOylkPXUoUSh3KSwxMjEpLGQuZD1zKyssZC5iLmEuYy5sZW5ndGg9PTAmJnVlKHQubixkKSxScyhNLGQuZyk7Zm9yKGU9MCxyPW5ldyBTKE0pO3IuYTxyLmMuYy5sZW5ndGg7KW49dShRKHIpLDIxMyksbi5jPWUrKyxuLmY9ITE7az1NLmMubGVuZ3RoLHQuYj09bnVsbHx8dC5iLmxlbmd0aDxrPyh0LmI9TnQoZ2EsVG8sMjUsaywxNSwxKSx0LmM9TnQoeGwsaTAsMjUsaywxNiwxKSk6UFQodC5jKSx0LmQ9TSx0LnA9bmV3IGludChRbSh0LmQuYy5sZW5ndGgpKSx0Lmo9MX1mdW5jdGlvbiBTeW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLF87aWYoIShlLmUuYy5sZW5ndGg8PTEpKXtmb3IodC5mPWUsdC5kPXUoSyh0LmYsKEpEKCkscEV0KSksMzc5KSx0Lmc9dShLKHQuZixtRXQpLDE5KS5hLHQuZT1adCh2ZShLKHQuZixiRXQpKSksdC5jPVp0KHZlKEsodC5mLG9WKSkpLCRZdCh0LmIpLHM9bmV3IFModC5mLmMpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShRKHMpLDI4MiksejV0KHQuYixyLmMscixudWxsKSx6NXQodC5iLHIuZCxyLG51bGwpO2ZvcihkPXQuZi5lLmMubGVuZ3RoLHQuYT1aYihnYSxbcmUsVG9dLFsxMDQsMjVdLDE1LFtkLGRdLDIpLGs9bmV3IFModC5mLmUpO2suYTxrLmMuYy5sZW5ndGg7KXc9dShRKGspLDE0NCksWW1uKHQsdyx0LmFbdy5iXSk7Zm9yKHQuaT1aYihnYSxbcmUsVG9dLFsxMDQsMjVdLDE1LFtkLGRdLDIpLG89MDtvPGQ7KytvKWZvcihoPTA7aDxkOysraCluPXQuYVtvXVtoXSxfPTEvKG4qbiksdC5pW29dW2hdPV99fWZ1bmN0aW9uIFRDKHQpe3ZhciBlLG4scixzO2lmKCEodC5iPT1udWxsfHx0LmIubGVuZ3RoPD0yKSYmIXQuYSl7Zm9yKGU9MCxzPTA7czx0LmIubGVuZ3RoOyl7Zm9yKGUhPXM/KHQuYltlXT10LmJbcysrXSx0LmJbZSsxXT10LmJbcysrXSk6cys9MixuPXQuYltlKzFdO3M8dC5iLmxlbmd0aCYmIShuKzE8dC5iW3NdKTspaWYobisxPT10LmJbc10pdC5iW2UrMV09dC5iW3MrMV0sbj10LmJbZSsxXSxzKz0yO2Vsc2UgaWYobj49dC5iW3MrMV0pcys9MjtlbHNlIGlmKG48dC5iW3MrMV0pdC5iW2UrMV09dC5iW3MrMV0sbj10LmJbZSsxXSxzKz0yO2Vsc2UgdGhyb3cgbnQobmV3IFpvKCJUb2tlbiNjb21wYWN0UmFuZ2VzKCk6IEludGVybmVsIEVycm9yOiBbIit0LmJbZV0rIiwiK3QuYltlKzFdKyJdIFsiK3QuYltzXSsiLCIrdC5iW3MrMV0rIl0iKSk7ZSs9Mn1lIT10LmIubGVuZ3RoJiYocj1OdChTcixKciwyNSxlLDE1LDEpLFBjKHQuYiwwLHIsMCxlKSx0LmI9ciksdC5hPSEwfX1mdW5jdGlvbiBBeW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdztmb3IoaD1ONih0LmEpLktjKCk7aC5PYigpOyl7aWYobz11KGguUGIoKSwxNyksby5iLmMubGVuZ3RoPjApZm9yKHI9bmV3IHF1KHUoUGkodC5hLG8pLDIxKSkscG4oKSxhYShyLG5ldyBOaShlKSkscz1uZXcgeGEoby5iLDApO3MuYjxzLmQuZ2MoKTspe3N3aXRjaChuPShabihzLmI8cy5kLmdjKCkpLHUocy5kLlhiKHMuYz1zLmIrKyksNzApKSxkPS0xLHUoSyhuLCh4ZSgpLERkKSksMjcyKS5nKXtjYXNlIDE6ZD1yLmMubGVuZ3RoLTE7YnJlYWs7Y2FzZSAwOmQ9WjFuKHIpO2JyZWFrO2Nhc2UgMjpkPTB9ZCE9LTEmJih3PShTbihkLHIuYy5sZW5ndGgpLHUoci5jW2RdLDI0MykpLHVlKHcuYi5iLG4pLHUoSygkYSh3LmIuYy5pKSwoYWUoKSxXYykpLDIxKS5GYygoZ28oKSx1RSkpLHUoSygkYSh3LmIuYy5pKSxXYyksMjEpLkZjKGNFKSxEbChzKSxlZShuLFo5dCxvKSl9QmEobyxudWxsKSxwYShvLG51bGwpfX1mdW5jdGlvbiBMeW4odCxlKXt2YXIgbixyLHMsbztyZXR1cm4gbj1uZXcgc2Yscj11KCRsKHh1KG5ldyBrbihudWxsLG5ldyBUbih0LmYsMTYpKSxuKSxZbShuZXcgWXQsbmV3IE1pLG5ldyBiaSxuZXcgZG4sdXQob3Qod2wsMSksb2UsMTMyLDAsWyhOMSgpLEx5KSxZbF0pKSksMjEpLHM9ci5nYygpLHM9cz09Mj8xOjAscz09MSYmQXYoVUQodSgkbChXaShyLkxjKCksbmV3IGxsKSxrbmUoYjIoMCksbmV3IFJpKSksMTYyKS5hLDIpLDApJiYocz0wKSxyPXUoJGwoeHUobmV3IGtuKG51bGwsbmV3IFRuKGUuZiwxNikpLG4pLFltKG5ldyBZdCxuZXcgTWksbmV3IGJpLG5ldyBkbix1dChvdCh3bCwxKSxvZSwxMzIsMCxbTHksWWxdKSkpLDIxKSxvPXIuZ2MoKSxvPW89PTI/MTowLG89PTEmJkF2KFVEKHUoJGwoV2koci5MYygpLG5ldyBWaSksa25lKGIyKDApLG5ldyBSaSkpLDE2MikuYSwyKSwwKSYmKG89MCksczxvPy0xOnM9PW8/MDoxfWZ1bmN0aW9uIE15bih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssXyxNLEIscTtpZihrPW5ldyBsZSwhZWEodCwoYWUoKSxQbHQpKSlyZXR1cm4gaztmb3Iocj11KEsodCxQbHQpLDE1KS5LYygpO3IuT2IoKTspZT11KHIuUGIoKSwxMCksSHluKGUsdCksay5jW2suYy5sZW5ndGhdPWU7Zm9yKG89bmV3IFModC5iKTtvLmE8by5jLmMubGVuZ3RoOylmb3Iocz11KFEobyksMjkpLGQ9bmV3IFMocy5hKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoUShkKSwxMCksaC5rPT0oR24oKSxJcykmJih3PXUoSyhoLFZWKSwxMCksdyYmKF89bmV3IE5jLHRjKF8saCksTT11KEsoaCxnYyksNjEpLFVzKF8sTSksQj11KFBlKHcuaiwwKSwxMSkscT1uZXcgenYsQmEocSxfKSxwYShxLEIpKSk7Zm9yKG49bmV3IFMoayk7bi5hPG4uYy5jLmxlbmd0aDspZT11KFEobiksMTApLExvKGUsdShQZSh0LmIsdC5iLmMubGVuZ3RoLTEpLDI5KSk7cmV0dXJuIGt9ZnVuY3Rpb24gTGxlKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxfLE0sQjtmb3IoZT1fMSh0KSxvPUJlKEZlKHplKGUsKHhlKCksJHkpKSkpLF89MCxzPTAsaz1uZXcgbnIoKCF0LmUmJih0LmU9bmV3IEVuKHJhLHQsNyw0KSksdC5lKSk7ay5lIT1rLmkuZ2MoKTspdz11KGRyKGspLDc5KSxkPXV3KHcpLGg9ZCYmbyYmQmUoRmUoemUodyxCMikpKSxCPVJvKHUoQXQoKCF3LmMmJih3LmM9bmV3IEVuKHZyLHcsNSw4KSksdy5jKSwwKSw4MikpLGQmJmg/KytzOmQmJiFoPysrXzpocyhCKT09ZXx8Qj09ZT8rK3M6KytfO2ZvcihyPW5ldyBucigoIXQuZCYmKHQuZD1uZXcgRW4ocmEsdCw4LDUpKSx0LmQpKTtyLmUhPXIuaS5nYygpOyluPXUoZHIociksNzkpLGQ9dXcobiksaD1kJiZvJiZCZShGZSh6ZShuLEIyKSkpLE09Um8odShBdCgoIW4uYiYmKG4uYj1uZXcgRW4odnIsbiw0LDcpKSxuLmIpLDApLDgyKSksZCYmaD8rK186ZCYmIWg/KytzOmhzKE0pPT1lfHxNPT1lPysrXzorK3M7cmV0dXJuIF8tc31mdW5jdGlvbiBEeW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLF8sTSxCLHE7aWYobXIoZSwiRWRnZSBzcGxpdHRpbmciLDEpLHQuYi5jLmxlbmd0aDw9Mil7b3IoZSk7cmV0dXJufWZvcihvPW5ldyB4YSh0LmIsMCksaD0oWm4oby5iPG8uZC5nYygpKSx1KG8uZC5YYihvLmM9by5iKyspLDI5KSk7by5iPG8uZC5nYygpOylmb3Iocz1oLGg9KFpuKG8uYjxvLmQuZ2MoKSksdShvLmQuWGIoby5jPW8uYisrKSwyOSkpLHc9bmV3IFMocy5hKTt3LmE8dy5jLmMubGVuZ3RoOylmb3IoZD11KFEodyksMTApLF89bmV3IFMoZC5qKTtfLmE8Xy5jLmMubGVuZ3RoOylmb3Ioaz11KFEoXyksMTEpLHI9bmV3IFMoay5nKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoUShyKSwxNyksQj1uLmQsTT1CLmkuYyxNIT1zJiZNIT1oJiZWY2UobiwocT1uZXcgSDAodCksQzAocSwoR24oKSxjYSkpLGVlKHEsKGFlKCksSWkpLG4pLGVlKHEsKHhlKCksd3MpLCh2YSgpLEtjKSksTG8ocSxoKSxxKSk7b3IoZSl9ZnVuY3Rpb24gTWxlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxfLE0sQixxO2lmKGQ9ZS5wIT1udWxsJiYhZS5iLGR8fG1yKGUsUmZlLDEpLG49dShLKHQsKGFlKCksJGx0KSksMTUpLGg9MS9uLmdjKCksZS5uKWZvcihRYihlLCJFTEsgTGF5ZXJlZCB1c2VzIHRoZSBmb2xsb3dpbmcgIituLmdjKCkrIiBtb2R1bGVzOiIpLHE9MCxCPW4uS2MoKTtCLk9iKCk7KV89dShCLlBiKCksNTEpLHI9KHE8MTA/IjAiOiIiKStxKyssUWIoZSwiICAgU2xvdCAiK3IrIjogIitNcChkbChfKSkpO2ZvcihNPW4uS2MoKTtNLk9iKCk7KV89dShNLlBiKCksNTEpLF8ucGYodCx6YyhlLGgpKTtmb3Iobz1uZXcgUyh0LmIpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShRKG8pLDI5KSxScyh0LmEscy5hKSxzLmEuYz1OdChRbixNZSwxLDAsNSwxKTtmb3Ioaz1uZXcgUyh0LmEpO2suYTxrLmMuYy5sZW5ndGg7KXc9dShRKGspLDEwKSxMbyh3LG51bGwpO3QuYi5jPU50KFFuLE1lLDEsMCw1LDEpLGR8fG9yKGUpfWZ1bmN0aW9uIEl5bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWixidCxNdCxTdCxqdCxRdCxjZSxfZTtyPVp0KHZlKEsoZSwoeGUoKSxuX3QpKSkpLFF0PXUoSyhlLFNTKSwxOSkuYSxCPTQscz0zLGNlPTIwL1F0LHE9ITEsdz0wLGg9VGk7ZG97Zm9yKG89dyE9MSxNPXchPTAsX2U9MCxaPXQuYSxNdD0wLGp0PVoubGVuZ3RoO010PGp0OysrTXQpRz1aW010XSxHLmY9bnVsbCxtNG4odCxHLG8sTSxyKSxfZSs9Yi5NYXRoLmFicyhHLmEpO2RvIGQ9bG1uKHQsZSk7d2hpbGUoZCk7Zm9yKFc9dC5hLGJ0PTAsU3Q9Vy5sZW5ndGg7YnQ8U3Q7KytidClpZihHPVdbYnRdLG49bnd0KEcpLmEsbiE9MClmb3IoXz1uZXcgUyhHLmUpO18uYTxfLmMuYy5sZW5ndGg7KWs9dShRKF8pLDEwKSxrLm4uYis9bjt3PT0wfHx3PT0xPygtLUIsQjw9MCYmKF9lPGh8fC1CPlF0KT8odz0yLGg9VGkpOnc9PTA/KHc9MSxoPV9lKToodz0wLGg9X2UpKToocT1fZT49aHx8aC1fZTxjZSxoPV9lLHEmJi0tcyl9d2hpbGUoIShxJiZzPD0wKSl9ZnVuY3Rpb24gU2F0KHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxfLE0sQixxLEc7Zm9yKEc9bmV3IEFyLG89dC5hLmVjKCkuS2MoKTtvLk9iKCk7KXI9dShvLlBiKCksMTY4KSxBaShHLHIsbi5KZShyKSk7Zm9yKGg9KERyKHQpLHQ/bmV3IHF1KHQpOmg4KHQuYS5lYygpLktjKCkpKSxhYShoLG5ldyBZbihHKSksZD1FJChoKSx3PW5ldyBjaihlKSxxPW5ldyBBcixsdShxLmYsZSx3KTtkLmEuZ2MoKSE9MDspe2ZvcihrPW51bGwsXz1udWxsLE09bnVsbCxzPWQuYS5lYygpLktjKCk7cy5PYigpOylpZihyPXUocy5QYigpLDE2OCksWnQodmUoY2MoRm8oRy5mLHIpKSkpPD1icyl7aWYoTWwocSxyLmEpJiYhTWwocSxyLmIpKXtfPXIuYixNPXIuYSxrPXI7YnJlYWt9aWYoTWwocSxyLmIpJiYhTWwocSxyLmEpKXtfPXIuYSxNPXIuYixrPXI7YnJlYWt9fWlmKCFrKWJyZWFrO0I9bmV3IGNqKF8pLHVlKHUoY2MoRm8ocS5mLE0pKSwyMjEpLmEsQiksbHUocS5mLF8sQiksZC5hLkJjKGspIT1udWxsfXJldHVybiB3fWZ1bmN0aW9uIE95bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssXyxNLEIscTtmb3IobXIobiwiRGVwdGgtZmlyc3QgY3ljbGUgcmVtb3ZhbCIsMSksTT1lLmEsXz1NLmMubGVuZ3RoLHQuYz1uZXcgbGUsdC5kPU50KHhsLGkwLDI1LF8sMTYsMSksdC5hPU50KHhsLGkwLDI1LF8sMTYsMSksdC5iPW5ldyBsZSxoPTAsaz1uZXcgUyhNKTtrLmE8ay5jLmMubGVuZ3RoOyl3PXUoUShrKSwxMCksdy5wPWgsXzgoVW8odykpJiZ1ZSh0LmMsdyksKytoO2ZvcihxPW5ldyBTKHQuYyk7cS5hPHEuYy5jLmxlbmd0aDspQj11KFEocSksMTApLCQ0dCh0LEIpO2ZvcihvPTA7bzxfO28rKyl0LmRbb118fChkPShTbihvLE0uYy5sZW5ndGgpLHUoTS5jW29dLDEwKSksJDR0KHQsZCkpO2ZvcihzPW5ldyBTKHQuYik7cy5hPHMuYy5jLmxlbmd0aDspcj11KFEocyksMTcpLGR3KHIsITApLGVlKGUsKGFlKCkseE8pLChGbigpLCEwKSk7dC5jPW51bGwsdC5kPW51bGwsdC5hPW51bGwsdC5iPW51bGwsb3Iobil9ZnVuY3Rpb24gTnluKHQsZSl7dmFyIG4scixzLG8saCxkLHc7Zm9yKHQuYS5jPU50KFFuLE1lLDEsMCw1LDEpLHI9c2koZS5iLDApO3IuYiE9ci5kLmM7KW49dShpaShyKSw4Niksbi5iLmI9PTAmJihlZShuLChtYygpLFd5KSwoRm4oKSwhMCkpLHVlKHQuYSxuKSk7c3dpdGNoKHQuYS5jLmxlbmd0aCl7Y2FzZSAwOnM9bmV3IGtpdCgwLGUsIkRVTU1ZX1JPT1QiKSxlZShzLChtYygpLFd5KSwoRm4oKSwhMCkpLGVlKHMsQWh0LCEwKSxhaShlLmIscyk7YnJlYWs7Y2FzZSAxOmJyZWFrO2RlZmF1bHQ6Zm9yKG89bmV3IGtpdCgwLGUsIlNVUEVSX1JPT1QiKSxkPW5ldyBTKHQuYSk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KFEoZCksODYpLHc9bmV3IEN3dChvLGgpLGVlKHcsKG1jKCksQWh0KSwoRm4oKSwhMCkpLGFpKG8uYS5hLHcpLGFpKG8uZCx3KSxhaShoLmIsdyksZWUoaCxXeSwhMSk7ZWUobywobWMoKSxXeSksKEZuKCksITApKSxlZShvLEFodCwhMCksYWkoZS5iLG8pfX1mdW5jdGlvbiBQeW4odCxlKXt4NCgpO3ZhciBuLHIscyxvLGgsZDtyZXR1cm4gbz1lLmMtKHQuYyt0LmIpLHM9dC5jLShlLmMrZS5iKSxoPXQuZC0oZS5kK2UuYSksbj1lLmQtKHQuZCt0LmEpLHI9Yi5NYXRoLm1heChzLG8pLGQ9Yi5NYXRoLm1heChoLG4pLEUxKCksdmYoVGQpLChiLk1hdGguYWJzKHIpPD1UZHx8cj09MHx8aXNOYU4ocikmJmlzTmFOKDApPzA6cjwwPy0xOnI+MD8xOkx2KGlzTmFOKHIpLGlzTmFOKDApKSk+PTBeKHZmKFRkKSwoYi5NYXRoLmFicyhkKTw9VGR8fGQ9PTB8fGlzTmFOKGQpJiZpc05hTigwKT8wOmQ8MD8tMTpkPjA/MTpMdihpc05hTihkKSxpc05hTigwKSkpPj0wKT9iLk1hdGgubWF4KGQscik6KHZmKFRkKSwoYi5NYXRoLmFicyhyKTw9VGR8fHI9PTB8fGlzTmFOKHIpJiZpc05hTigwKT8wOnI8MD8tMTpyPjA/MTpMdihpc05hTihyKSxpc05hTigwKSkpPjA/Yi5NYXRoLnNxcnQoZCpkK3Iqcik6LWIuTWF0aC5zcXJ0KGQqZCtyKnIpKX1mdW5jdGlvbiB4Mih0LGUpe3ZhciBuLHIscyxvLGgsZDtpZihlKXtpZighdC5hJiYodC5hPW5ldyBmUiksdC5lPT0yKXtoUih0LmEsZSk7cmV0dXJufWlmKGUuZT09MSl7Zm9yKHM9MDtzPGUuZW0oKTtzKyspeDIodCxlLmFtKHMpKTtyZXR1cm59aWYoZD10LmEuYS5jLmxlbmd0aCxkPT0wKXtoUih0LmEsZSk7cmV0dXJufWlmKGg9dShSdih0LmEsZC0xKSwxMTcpLCEoKGguZT09MHx8aC5lPT0xMCkmJihlLmU9PTB8fGUuZT09MTApKSl7aFIodC5hLGUpO3JldHVybn1vPWUuZT09MD8yOmUuYm0oKS5sZW5ndGgsaC5lPT0wPyhuPW5ldyBCVCxyPWguX2woKSxyPj1RYT95byhuLHQzdChyKSk6djgobixyJk1zKSxoPW5ldyBkcnQoMTAsbnVsbCwwKSxsZW4odC5hLGgsZC0xKSk6KG49KGguYm0oKS5sZW5ndGgrbyxuZXcgQlQpLHlvKG4saC5ibSgpKSksZS5lPT0wPyhyPWUuX2woKSxyPj1RYT95byhuLHQzdChyKSk6djgobixyJk1zKSk6eW8obixlLmJtKCkpLHUoaCw1MjEpLmI9bi5hfX1mdW5jdGlvbiBEbGUodCl7dmFyIGUsbixyLHMsbztyZXR1cm4gdC5nIT1udWxsP3QuZzp0LmE8MzI/KHQuZz1LNG4oQXUodC5mKSxDcyh0LmUpKSx0LmcpOihzPU5hdCgoIXQuYyYmKHQuYz1qRCh0LmYpKSx0LmMpLDApLHQuZT09MD9zOihlPSghdC5jJiYodC5jPWpEKHQuZikpLHQuYykuZTwwPzI6MSxuPXMubGVuZ3RoLHI9LXQuZStuLWUsbz1uZXcgQXAsby5hKz0iIitzLHQuZT4wJiZyPj0tNj9yPj0wP2lEKG8sbi1Dcyh0LmUpLFN0cmluZy5mcm9tQ2hhckNvZGUoNDYpKTooby5hPUJsKG8uYSwwLGUtMSkrIjAuIitPTShvLmEsZS0xKSxpRChvLGUrMSxJaChOMiwwLC1DcyhyKS0xKSkpOihuLWU+PTEmJihpRChvLGUsU3RyaW5nLmZyb21DaGFyQ29kZSg0NikpLCsrbiksaUQobyxuLFN0cmluZy5mcm9tQ2hhckNvZGUoNjkpKSxyPjAmJmlEKG8sKytuLFN0cmluZy5mcm9tQ2hhckNvZGUoNDMpKSxpRChvLCsrbiwiIitFXyhBdShyKSkpKSx0Lmc9by5hLHQuZykpfWZ1bmN0aW9uIEZ5bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWjtpZighbi5kYygpKXtmb3IoZD0wLEI9MCxyPW4uS2MoKSxHPXUoci5QYigpLDE5KS5hO2Q8ZS5mOyl7aWYoZD09RyYmKEI9MCxyLk9iKCk/Rz11KHIuUGIoKSwxOSkuYTpHPWUuZisxKSxkIT1CKXtmb3IoWj11KFBlKHQuYixkKSwyOSkscT11KFBlKHQuYixCKSwyOSksVz1WdihaLmEpLE09bmV3IFMoVyk7TS5hPE0uYy5jLmxlbmd0aDspaWYoXz11KFEoTSksMTApLG95KF8scS5hLmMubGVuZ3RoLHEpLEI9PTApZm9yKGg9VnYoVW8oXykpLG89bmV3IFMoaCk7by5hPG8uYy5jLmxlbmd0aDspcz11KFEobyksMTcpLGR3KHMsITApLGVlKHQsKGFlKCkseE8pLChGbigpLCEwKSksQmxlKHQscywxKX0rK0IsKytkfWZvcih3PW5ldyB4YSh0LmIsMCk7dy5iPHcuZC5nYygpOylrPShabih3LmI8dy5kLmdjKCkpLHUody5kLlhiKHcuYz13LmIrKyksMjkpKSxrLmEuYy5sZW5ndGg9PTAmJkRsKHcpfX1mdW5jdGlvbiBCeW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFosYnQsTXQsU3Q7Zm9yKGg9ZS5iLF89aC5vLHc9aC5kLHI9WnQodmUoRnooaCwoeGUoKSxUZikpKSkscz1adCh2ZShGeihoLEZ4KSkpLGs9WnQodmUoRnooaCxyaHQpKSksZD1uZXcgV3R0LF92dChkLHcuZCx3LmMsdy5hLHcuYiksQj1adm4oZSxyLHMsayksYnQ9bmV3IFMoZS5kKTtidC5hPGJ0LmMuYy5sZW5ndGg7KXtmb3IoWj11KFEoYnQpLDEwMSksRz1aLmYuYS5lYygpLktjKCk7Ry5PYigpOylxPXUoRy5QYigpLDQwOSksbz1xLmEsTT1IZG4ocSksbj0oTXQ9bmV3IGp1LGNhZShxLHEuYyxCLE10KSxwMG4ocSxNLEIsTXQpLGNhZShxLHEuZCxCLE10KSxNdCksbj10LlVmKHEsTSxuKSxNaChvLmEpLEthKG8uYSxuKSx5cyhuZXcga24obnVsbCxuZXcgVG4obiwxNikpLG5ldyBVVnQoXyxkKSk7Vz1aLmksVyYmKERkbihaLFcsQixzKSxTdD1uZXcgU28oVy5nKSxfM3QoXyxkLFN0KSxGaShTdCxXLmopLF8zdChfLGQsU3QpKX1fdnQodyxkLmQsZC5jLGQuYSxkLmIpfWZ1bmN0aW9uIFJ5bih0LGUsbil7dmFyIHIscyxvO2lmKHM9dShLKGUsKHhlKCksS1YpKSwyNzUpLHMhPShmNygpLGJTKSl7c3dpdGNoKG1yKG4sIkhvcml6b250YWwgQ29tcGFjdGlvbiIsMSksdC5hPWUsbz1uZXcgUHRlLHI9bmV3IE5vZSgoby5kPWUsby5jPXUoSyhvLmQsWDApLDIxOCksanZuKG8pLE0zbihvKSxVdm4obyksby5hKSksQktlKHIsdC5iKSx1KEsoZSxEVHQpLDQyMikuZyl7Y2FzZSAxOkpxdChyLG5ldyBYZWUodC5hKSk7YnJlYWs7ZGVmYXVsdDpKcXQociwoX3d0KCkscWdlKSl9c3dpdGNoKHMuZyl7Y2FzZSAxOnBDKHIpO2JyZWFrO2Nhc2UgMjpwQyhDcShyLChmbygpLF9mKSkpO2JyZWFrO2Nhc2UgMzpwQyhacXQoQ3EocEMociksKGZvKCksX2YpKSxuZXcgajkpKTticmVhaztjYXNlIDQ6cEMoWnF0KENxKHBDKHIpLChmbygpLF9mKSksbmV3IHpkKG8pKSk7YnJlYWs7Y2FzZSA1OnBDKEZLZShyLFViZSkpfUNxKHIsKGZvKCksSGgpKSxyLmU9ITAsZDRuKG8pLG9yKG4pfX1mdW5jdGlvbiBqeW4odCxlLG4scixzLG8saCxkKXt2YXIgdyxrLF8sTTtzd2l0Y2godz1MMSh1dChvdCh2Nm4sMSksTWUsMjIwLDAsW2UsbixyLHNdKSksTT1udWxsLHQuYi5nKXtjYXNlIDE6TT1MMSh1dChvdChMQ3QsMSksTWUsNTI2LDAsW25ldyBXOSxuZXcgVTksbmV3IE5MXSkpO2JyZWFrO2Nhc2UgMDpNPUwxKHV0KG90KExDdCwxKSxNZSw1MjYsMCxbbmV3IE5MLG5ldyBVOSxuZXcgVzldKSk7YnJlYWs7Y2FzZSAyOk09TDEodXQob3QoTEN0LDEpLE1lLDUyNiwwLFtuZXcgVTksbmV3IFc5LG5ldyBOTF0pKX1mb3IoXz1uZXcgUyhNKTtfLmE8Xy5jLmMubGVuZ3RoOylrPXUoUShfKSw1MjYpLHcuYy5sZW5ndGg+MSYmKHc9ay5tZyh3LHQuYSxkKSk7cmV0dXJuIHcuYy5sZW5ndGg9PTE/dShQZSh3LHcuYy5sZW5ndGgtMSksMjIwKTp3LmMubGVuZ3RoPT0yP195bigoU24oMCx3LmMubGVuZ3RoKSx1KHcuY1swXSwyMjApKSwoU24oMSx3LmMubGVuZ3RoKSx1KHcuY1sxXSwyMjApKSxoLG8pOm51bGx9ZnVuY3Rpb24gSWxlKHQpe3ZhciBlLG4scixzLG8saDtmb3IoX3UodC5hLG5ldyB6Yiksbj1uZXcgUyh0LmEpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShRKG4pLDIyMSkscj1mYSh1Yyh1KHQuYiw2NSkuYyksdShlLmIsNjUpLmMpLFNwZT8oaD11KHQuYiw2NSkuYixvPXUoZS5iLDY1KS5iLGIuTWF0aC5hYnMoci5hKT49Yi5NYXRoLmFicyhyLmIpPyhyLmI9MCxvLmQrby5hPmguZCYmby5kPGguZCtoLmEmJkFqKHIsYi5NYXRoLm1heChoLmMtKG8uYytvLmIpLG8uYy0oaC5jK2guYikpKSk6KHIuYT0wLG8uYytvLmI+aC5jJiZvLmM8aC5jK2guYiYmQWoocixiLk1hdGgubWF4KGguZC0oby5kK28uYSksby5kLShoLmQraC5hKSkpKSk6QWoocixvbGUodSh0LmIsNjUpLHUoZS5iLDY1KSkpLHM9Yi5NYXRoLnNxcnQoci5hKnIuYStyLmIqci5iKSxzPXJhZShjUyxlLHMsciksQWoocixzKSxPbnQodShlLmIsNjUpLHIpLF91KGUuYSxuZXcgcmkocikpLHUoY1MuYiw2NSksd210KGNTLFo3dCxlKX1mdW5jdGlvbiAkeW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLF8sTSxCLHEsRztmb3IodC5mPW5ldyBVdHQsaz0wLHM9MCxoPW5ldyBTKHQuZS5iKTtoLmE8aC5jLmMubGVuZ3RoOylmb3Iobz11KFEoaCksMjkpLHc9bmV3IFMoby5hKTt3LmE8dy5jLmMubGVuZ3RoOyl7Zm9yKGQ9dShRKHcpLDEwKSxkLnA9aysrLHI9bmV3IGFyKGxyKCRzKGQpLmEuS2MoKSxuZXcgSCkpO1ZyKHIpOyluPXUoSXIociksMTcpLG4ucD1zKys7Zm9yKGU9RWF0KGQpLEI9bmV3IFMoZC5qKTtCLmE8Qi5jLmMubGVuZ3RoOylNPXUoUShCKSwxMSksZSYmKEc9TS5hLmIsRyE9Yi5NYXRoLmZsb29yKEcpJiYoXz1HLUd2KEF1KGIuTWF0aC5yb3VuZChHKSkpLE0uYS5iLT1fKSkscT1NLm4uYitNLmEuYixxIT1iLk1hdGguZmxvb3IocSkmJihfPXEtR3YoQXUoYi5NYXRoLnJvdW5kKHEpKSksTS5uLmItPV8pfXQuZz1rLHQuYj1zLHQuaT1OdChnNm4sTWUsNDAxLGssMCwxKSx0LmM9TnQoZDZuLE1lLDY0OSxzLDAsMSksdC5kLmEuJGIoKX1mdW5jdGlvbiBUcih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGs7aWYodC5laigpKWlmKHc9dC5maigpLHQuaT4wKXtpZihlPW5ldyBVYnQodC5pLHQuZyksbj10Lmksbz1uPDEwMD9udWxsOm5ldyBMcChuKSx0LmlqKCkpZm9yKHI9MDtyPHQuaTsrK3IpaD10Lmdbcl0sbz10LmtqKGgsbyk7aWYoUl8odCkscz1uPT0xP3QuWmkoNCxBdChlLDApLG51bGwsMCx3KTp0LlppKDYsZSxudWxsLC0xLHcpLHQuYmooKSl7Zm9yKHI9bmV3IEw2KGUpO3IuZSE9ci5pLmdjKCk7KW89dC5kaihpc3Qociksbyk7bz8oby5FaShzKSxvLkZpKCkpOnQuJGkocyl9ZWxzZSBvPyhvLkVpKHMpLG8uRmkoKSk6dC4kaShzKX1lbHNlIFJfKHQpLHQuJGkodC5aaSg2LChwbigpLHVvKSxudWxsLC0xLHcpKTtlbHNlIGlmKHQuYmooKSlpZih0Lmk+MCl7Zm9yKGQ9dC5nLGs9dC5pLFJfKHQpLG89azwxMDA/bnVsbDpuZXcgTHAoaykscj0wO3I8azsrK3IpaD1kW3JdLG89dC5kaihoLG8pO28mJm8uRmkoKX1lbHNlIFJfKHQpO2Vsc2UgUl8odCl9ZnVuY3Rpb24gYzZ0KHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxfLE0sQjtmb3IoRG5lKHRoaXMpLG49PShxdigpLHdiKT9Wcyh0aGlzLnIsdCk6VnModGhpcy53LHQpLF89YnMsaz1OcyxoPWUuYS5lYygpLktjKCk7aC5PYigpOylzPXUoaC5QYigpLDQ2KSxkPXUocy5hLDQ1NSkscj11KHMuYiwxNyksdz1yLmMsdz09dCYmKHc9ci5kKSxkPT13Yj9Wcyh0aGlzLnIsdyk6VnModGhpcy53LHcpLEI9KGJlKCksSXUpLkhjKHcuaik/WnQodmUoSyh3LChhZSgpLGZFKSkpKTpuYyh1dChvdChuYSwxKSxyZSw4LDAsW3cuaS5uLHcubix3LmFdKSkuYixfPWIuTWF0aC5taW4oXyxCKSxrPWIuTWF0aC5tYXgoayxCKTtmb3IoTT0oYmUoKSxJdSkuSGModC5qKT9adCh2ZShLKHQsKGFlKCksZkUpKSkpOm5jKHV0KG90KG5hLDEpLHJlLDgsMCxbdC5pLm4sdC5uLHQuYV0pKS5iLF9hZSh0aGlzLE0sXyxrKSxvPWUuYS5lYygpLktjKCk7by5PYigpOylzPXUoby5QYigpLDQ2KSxQYWUodGhpcyx1KHMuYiwxNykpO3RoaXMubz0hMX1mdW5jdGlvbiB6eW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFosYnQsTXQsU3QsanQsUXQsY2UsX2UsV2UsUWUsUm4sem4saHI7cmV0dXJuIG49dC5sJjgxOTEscj10Lmw+PjEzfCh0Lm0mMTUpPDw5LHM9dC5tPj40JjgxOTEsbz10Lm0+PjE3fCh0LmgmMjU1KTw8NSxoPSh0LmgmMTA0ODMyMCk+PjgsZD1lLmwmODE5MSx3PWUubD4+MTN8KGUubSYxNSk8PDksaz1lLm0+PjQmODE5MSxfPWUubT4+MTd8KGUuaCYyNTUpPDw1LE09KGUuaCYxMDQ4MzIwKT4+OCxXZT1uKmQsUWU9cipkLFJuPXMqZCx6bj1vKmQsaHI9aCpkLHchPTAmJihRZSs9bip3LFJuKz1yKncsem4rPXMqdyxocis9byp3KSxrIT0wJiYoUm4rPW4qayx6bis9ciprLGhyKz1zKmspLF8hPTAmJih6bis9bipfLGhyKz1yKl8pLE0hPTAmJihocis9bipNKSxxPVdlJnZsLEc9KFFlJjUxMSk8PDEzLEI9cStHLFo9V2U+PjIyLGJ0PVFlPj45LE10PShSbiYyNjIxNDMpPDw0LFN0PSh6biYzMSk8PDE3LFc9WitidCtNdCtTdCxRdD1Sbj4+MTgsY2U9em4+PjUsX2U9KGhyJjQwOTUpPDw4LGp0PVF0K2NlK19lLFcrPUI+PjIyLEImPXZsLGp0Kz1XPj4yMixXJj12bCxqdCY9VzAsY3UoQixXLGp0KX1mdW5jdGlvbiBPbGUodCl7dmFyIGUsbixyLHMsbyxoLGQ7aWYoZD11KFBlKHQuaiwwKSwxMSksZC5nLmMubGVuZ3RoIT0wJiZkLmUuYy5sZW5ndGghPTApdGhyb3cgbnQobmV3IEhvKCJJbnRlcmFjdGl2ZSBsYXlvdXQgZG9lcyBub3Qgc3VwcG9ydCBOT1JUSC9TT1VUSCBwb3J0cyB3aXRoIGluY29taW5nIF9hbmRfIG91dGdvaW5nIGVkZ2VzLiIpKTtpZihkLmcuYy5sZW5ndGghPTApe2ZvcihvPWJzLG49bmV3IFMoZC5nKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoUShuKSwxNyksaD1lLmQuaSxyPXUoSyhoLCh4ZSgpLGVHKSksMTQyKSxvPWIuTWF0aC5taW4obyxoLm4uYS1yLmIpO3JldHVybiBuZXcgQmsoRHIobykpfWlmKGQuZS5jLmxlbmd0aCE9MCl7Zm9yKHM9TnMsbj1uZXcgUyhkLmUpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShRKG4pLDE3KSxoPWUuYy5pLHI9dShLKGgsKHhlKCksZUcpKSwxNDIpLHM9Yi5NYXRoLm1heChzLGgubi5hK2guby5hK3IuYyk7cmV0dXJuIG5ldyBCayhEcihzKSl9cmV0dXJuIERUKCksRFQoKSxidXR9ZnVuY3Rpb24gTmxlKHQsZSl7dmFyIG4scixzLG8saCxkLHc7aWYodC5GaygpKXtpZih0Lmk+NClpZih0LndqKGUpKXtpZih0LnJrKCkpe2lmKHM9dShlLDQ5KSxyPXMuVWcoKSx3PXI9PXQuZSYmKHQuRGsoKT9zLk9nKHMuVmcoKSx0LnprKCkpPT10LkFrKCk6LTEtcy5WZygpPT10LmFqKCkpLHQuRWsoKSYmIXcmJiFyJiZzLlpnKCkpe2ZvcihvPTA7bzx0Lmk7KytvKWlmKG49dC5Hayh1KHQuZ1tvXSw1NikpLEd0KG4pPT09R3QoZSkpcmV0dXJuITB9cmV0dXJuIHd9ZWxzZSBpZih0LkRrKCkmJiF0LkNrKCkpe2lmKGg9dShlLDU2KS5haChvbyh1KHQuYWsoKSwxOCkpKSxHdChoKT09PUd0KHQuZSkpcmV0dXJuITA7aWYoaD09bnVsbHx8IXUoaCw1Nikua2goKSlyZXR1cm4hMX19ZWxzZSByZXR1cm4hMTtpZihkPWw3KHQsZSksdC5FaygpJiYhZCl7Zm9yKG89MDtvPHQuaTsrK28paWYocz10LkdrKHUodC5nW29dLDU2KSksR3Qocyk9PT1HdChlKSlyZXR1cm4hMH1yZXR1cm4gZH1lbHNlIHJldHVybiBsNyh0LGUpfWZ1bmN0aW9uIHF5bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXyxNLEI7Zm9yKF89bmV3IGxlLEI9bmV3IFFzLGg9ZS5iLHM9MDtzPGguYy5sZW5ndGg7cysrKXtmb3Ioaz0oU24ocyxoLmMubGVuZ3RoKSx1KGguY1tzXSwyOSkpLmEsXy5jPU50KFFuLE1lLDEsMCw1LDEpLG89MDtvPGsuYy5sZW5ndGg7bysrKWQ9dC5hW3NdW29dLGQucD1vLGQuaz09KEduKCksVWMpJiYoXy5jW18uYy5sZW5ndGhdPWQpLGxoKHUoUGUoZS5iLHMpLDI5KS5hLG8sZCksZC5qLmM9TnQoUW4sTWUsMSwwLDUsMSksUnMoZC5qLHUodShQZSh0LmIscyksMTUpLlhiKG8pLDE0KSksRDYodShLKGQsKHhlKCksd3MpKSw5OCkpfHxlZShkLHdzLCh2YSgpLFUyKSk7Zm9yKHI9bmV3IFMoXyk7ci5hPHIuYy5jLmxlbmd0aDspbj11KFEociksMTApLE09bHduKG4pLEIuYS56YyhNLEIpLEIuYS56YyhuLEIpfWZvcih3PUIuYS5lYygpLktjKCk7dy5PYigpOylkPXUody5QYigpLDEwKSxwbigpLGFhKGQuaiwoUTgoKSxnOXQpKSxkLmk9ITAsVzR0KGQpfWZ1bmN0aW9uIEh5bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXyxNO2lmKF89dShLKHQsKGFlKCksZ2MpKSw2MSkscj11KFBlKHQuaiwwKSwxMSksXz09KGJlKCksT24pP1VzKHIseXIpOl89PXlyJiZVcyhyLE9uKSx1KEsoZSwoeGUoKSxSMikpLDE3NCkuSGMoKE5sKCksVzIpKSl7aWYodz1adCh2ZShLKHQsdkUpKSksaz1adCh2ZShLKHQsd0UpKSksaD1adCh2ZShLKHQsVnkpKSksZD11KEsoZSxxeSksMjEpLGQuSGMoKGlsKCksdGcpKSlmb3Iobj1rLE09dC5vLmEvMi1yLm4uYSxvPW5ldyBTKHIuZik7by5hPG8uYy5jLmxlbmd0aDspcz11KFEobyksNzApLHMubi5iPW4scy5uLmE9TS1zLm8uYS8yLG4rPXMuby5iK2g7ZWxzZSBpZihkLkhjKEViKSlmb3Iobz1uZXcgUyhyLmYpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShRKG8pLDcwKSxzLm4uYT13K3Quby5hLXIubi5hO2hpbihuZXcgZXIoKHpUKCksbmV3IG5ydChlLCExLCExLG5ldyBZUCkpKSxuZXcgX2oobnVsbCx0LCExKSl9fWZ1bmN0aW9uIFZ5bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXztpZihlLmMubGVuZ3RoIT0wKXtmb3IocG4oKSxEbnQoZS5jLGUuYy5sZW5ndGgsbnVsbCkscz1uZXcgUyhlKSxyPXUoUShzKSwxNDUpO3MuYTxzLmMuYy5sZW5ndGg7KW49dShRKHMpLDE0NSksRm10KHIuZS5jLG4uZS5jKSYmIShrM3QoRVd0KHIuZSkuYixuLmUuZCl8fGszdChFV3Qobi5lKS5iLHIuZS5kKSk/cj0oUnMoci5rLG4uayksUnMoci5iLG4uYiksUnMoci5jLG4uYyksS2Eoci5pLG4uaSksUnMoci5kLG4uZCksUnMoci5qLG4uaiksbz1iLk1hdGgubWluKHIuZS5jLG4uZS5jKSxoPWIuTWF0aC5taW4oci5lLmQsbi5lLmQpLGQ9Yi5NYXRoLm1heChyLmUuYytyLmUuYixuLmUuYytuLmUuYiksdz1kLW8saz1iLk1hdGgubWF4KHIuZS5kK3IuZS5hLG4uZS5kK24uZS5hKSxfPWstaCxGS3Qoci5lLG8saCx3LF8pLHNpbihyLmYsbi5mKSwhci5hJiYoci5hPW4uYSksUnMoci5nLG4uZyksdWUoci5nLG4pLHIpOihadWUodCxyKSxyPW4pO1p1ZSh0LHIpfX1mdW5jdGlvbiBHeW4odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrO2lmKGQ9dC5qLGQ9PShiZSgpLGFjKSYmZSE9KHZhKCksVTEpJiZlIT0odmEoKSxrYikmJihkPVV1ZSh0LG4pLFVzKHQsZCksISh0LnE/dC5xOihwbigpLHBuKCksYTApKS5fYigoeGUoKSx6eSkpJiZkIT1hYyYmKHQubi5hIT0wfHx0Lm4uYiE9MCkmJmVlKHQsenksdTFuKHQsZCkpKSxlPT0odmEoKSxoMCkpe3N3aXRjaChrPTAsZC5nKXtjYXNlIDE6Y2FzZSAzOm89dC5pLm8uYSxvPjAmJihrPXQubi5hL28pO2JyZWFrO2Nhc2UgMjpjYXNlIDQ6cz10Lmkuby5iLHM+MCYmKGs9dC5uLmIvcyl9ZWUodCwoYWUoKSxJdyksayl9aWYodz10Lm8saD10LmEsciloLmE9ci5hLGguYj1yLmIsdC5kPSEwO2Vsc2UgaWYoZSE9VTEmJmUhPWtiJiZkIT1hYylzd2l0Y2goZC5nKXtjYXNlIDE6aC5hPXcuYS8yO2JyZWFrO2Nhc2UgMjpoLmE9dy5hLGguYj13LmIvMjticmVhaztjYXNlIDM6aC5hPXcuYS8yLGguYj13LmI7YnJlYWs7Y2FzZSA0OmguYj13LmIvMn1lbHNlIGguYT13LmEvMixoLmI9dy5iLzJ9ZnVuY3Rpb24gX0ModCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLF87aWYodC5laigpKWlmKF89dC5WaSgpLHc9dC5maigpLF8+MClpZihlPW5ldyBpeXQodC5HaSgpKSxuPV8sbz1uPDEwMD9udWxsOm5ldyBMcChuKSxqTSh0LG4sZS5nKSxzPW49PTE/dC5aaSg0LEF0KGUsMCksbnVsbCwwLHcpOnQuWmkoNixlLG51bGwsLTEsdyksdC5iaigpKXtmb3Iocj1uZXcgbnIoZSk7ci5lIT1yLmkuZ2MoKTspbz10LmRqKGRyKHIpLG8pO28/KG8uRWkocyksby5GaSgpKTp0LiRpKHMpfWVsc2Ugbz8oby5FaShzKSxvLkZpKCkpOnQuJGkocyk7ZWxzZSBqTSh0LHQuVmkoKSx0LldpKCkpLHQuJGkodC5aaSg2LChwbigpLHVvKSxudWxsLC0xLHcpKTtlbHNlIGlmKHQuYmooKSlpZihfPXQuVmkoKSxfPjApe2ZvcihkPXQuV2koKSxrPV8sak0odCxfLGQpLG89azwxMDA/bnVsbDpuZXcgTHAoaykscj0wO3I8azsrK3IpaD1kW3JdLG89dC5kaihoLG8pO28mJm8uRmkoKX1lbHNlIGpNKHQsdC5WaSgpLHQuV2koKSk7ZWxzZSBqTSh0LHQuVmkoKSx0LldpKCkpfWZ1bmN0aW9uIFV5bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssXyxNLEIscTtmb3IoZD1uZXcgUyhlKTtkLmE8ZC5jLmMubGVuZ3RoOylvPXUoUShkKSwyMzMpLG8uZT1udWxsLG8uYz0wO2Zvcih3PW51bGwsaD1uZXcgUyhlKTtoLmE8aC5jLmMubGVuZ3RoOylpZihvPXUoUShoKSwyMzMpLE09by5kWzBdLCEobiYmTS5rIT0oR24oKSxxcykpKXtmb3IocT11KEsoTSwoYWUoKSxNeCkpLDE1KS5LYygpO3EuT2IoKTspQj11KHEuUGIoKSwxMCksKCFufHxCLms9PShHbigpLHFzKSkmJigoIW8uZSYmKG8uZT1uZXcgbGUpLG8uZSkuRmModC5iW0IuYy5wXVtCLnBdKSwrK3QuYltCLmMucF1bQi5wXS5jKTtpZighbiYmTS5rPT0oR24oKSxxcykpe2lmKHcpZm9yKF89dShQaSh0LmQsdyksMjEpLktjKCk7Xy5PYigpOylmb3Ioaz11KF8uUGIoKSwxMCkscz11KFBpKHQuZCxNKSwyMSkuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMTApLGl0bih0LmJbay5jLnBdW2sucF0pLkZjKHQuYltyLmMucF1bci5wXSksKyt0LmJbci5jLnBdW3IucF0uYzt3PU19fX1mdW5jdGlvbiBXeW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLF87Zm9yKG49MCxfPW5ldyBsZSxkPW5ldyBTKGUpO2QuYTxkLmMuYy5sZW5ndGg7KXtzd2l0Y2goaD11KFEoZCksMTEpLE55dCh0LmIsdC5kW2gucF0pLF8uYz1OdChRbixNZSwxLDAsNSwxKSxoLmkuay5nKXtjYXNlIDA6cj11KEsoaCwoYWUoKSxzbCkpLDEwKSxfdShyLmosbmV3IHYkdChfKSk7YnJlYWs7Y2FzZSAxOnZYZSh4aXQoV2kobmV3IGtuKG51bGwsbmV3IFRuKGguaS5qLDE2KSksbmV3IHckdChoKSkpLG5ldyBtJHQoXykpO2JyZWFrO2Nhc2UgMzpzPXUoSyhoLChhZSgpLElpKSksMTEpLHVlKF8sbmV3IHlhKHMsZGUoaC5lLmMubGVuZ3RoK2guZy5jLmxlbmd0aCkpKX1mb3Ioaz1uZXcgUyhfKTtrLmE8ay5jLmMubGVuZ3RoOyl3PXUoUShrKSw0Niksbz1hYnQodCx1KHcuYSwxMSkpLG8+dC5kW2gucF0mJihuKz1ubXQodC5iLG8pKnUody5iLDE5KS5hLFZwKHQuYSxkZShvKSkpO2Zvcig7IU5UKHQuYSk7KU9tdCh0LmIsdShQNih0LmEpLDE5KS5hKX1yZXR1cm4gbn1mdW5jdGlvbiBLeW4odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFo7Zm9yKE09bmV3IFNvKHUoemUodCwoZXEoKSxFU3QpKSw4KSksTS5hPWIuTWF0aC5tYXgoTS5hLW4uYi1uLmMsMCksTS5iPWIuTWF0aC5tYXgoTS5iLW4uZC1uLmEsMCkscz12ZSh6ZSh0LHlTdCkpLChzPT1udWxsfHwoSW4ocyksczw9MCkpJiYocz0xLjMpLGQ9bmV3IGxlLEc9bmV3IG5yKCghdC5hJiYodC5hPW5ldyBoZShkcyx0LDEwLDExKSksdC5hKSk7Ry5lIT1HLmkuZ2MoKTspcT11KGRyKEcpLDMzKSxoPW5ldyBsV3QocSksZC5jW2QuYy5sZW5ndGhdPWg7c3dpdGNoKEI9dSh6ZSh0LGVmdCksMzExKSxCLmcpe2Nhc2UgMzpaPWJtbihkLGUsTS5hLE0uYiwoaz1yLEluKHMpLGspKTticmVhaztjYXNlIDE6Wj1xbW4oZCxlLE0uYSxNLmIsKF89cixJbihzKSxfKSk7YnJlYWs7ZGVmYXVsdDpaPVF5bihkLGUsTS5hLE0uYiwodz1yLEluKHMpLHcpKX1vPW5ldyBVJChaKSxXPUlhdChvLGUsbixNLmEsTS5iLHIsKEluKHMpLHMpKSxndyh0LFcuYSxXLmIsITEsITApfWZ1bmN0aW9uIFl5bih0LGUpe3ZhciBuLHIscyxvO249ZS5iLG89bmV3IHF1KG4uaikscz0wLHI9bi5qLHIuYz1OdChRbixNZSwxLDAsNSwxKSxCdih1KHUyKHQuYiwoYmUoKSxPbiksKEp2KCksQXcpKSwxNSksbikscz1RRChvLHMsbmV3IE1YLHIpLEJ2KHUodTIodC5iLE9uLGRiKSwxNSksbikscz1RRChvLHMsbmV3IHo5LHIpLEJ2KHUodTIodC5iLE9uLFN3KSwxNSksbiksQnYodSh1Mih0LmIsSG4sQXcpLDE1KSxuKSxCdih1KHUyKHQuYixIbixkYiksMTUpLG4pLHM9UUQobyxzLG5ldyBFRixyKSxCdih1KHUyKHQuYixIbixTdyksMTUpLG4pLEJ2KHUodTIodC5iLHlyLEF3KSwxNSksbikscz1RRChvLHMsbmV3IFRGLHIpLEJ2KHUodTIodC5iLHlyLGRiKSwxNSksbikscz1RRChvLHMsbmV3IF9GLHIpLEJ2KHUodTIodC5iLHlyLFN3KSwxNSksbiksQnYodSh1Mih0LmIsQm4sQXcpLDE1KSxuKSxzPVFEKG8scyxuZXcgT1gsciksQnYodSh1Mih0LmIsQm4sZGIpLDE1KSxuKSxCdih1KHUyKHQuYixCbixTdyksMTUpLG4pfWZ1bmN0aW9uIFh5bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXyxNLEIscSxHLFc7Zm9yKG1yKGUsIkxheWVyIHNpemUgY2FsY3VsYXRpb24iLDEpLF89YnMsaz1OcyxzPSExLGQ9bmV3IFModC5iKTtkLmE8ZC5jLmMubGVuZ3RoOylpZihoPXUoUShkKSwyOSksdz1oLmMsdy5hPTAsdy5iPTAsaC5hLmMubGVuZ3RoIT0wKXtmb3Iocz0hMCxCPW5ldyBTKGguYSk7Qi5hPEIuYy5jLmxlbmd0aDspTT11KFEoQiksMTApLEc9TS5vLHE9TS5kLHcuYT1iLk1hdGgubWF4KHcuYSxHLmErcS5iK3EuYyk7cj11KFBlKGguYSwwKSwxMCksVz1yLm4uYi1yLmQuZCxyLms9PShHbigpLElzKSYmKFctPXUoSyh0LCh4ZSgpLExPKSksMTQyKS5kKSxvPXUoUGUoaC5hLGguYS5jLmxlbmd0aC0xKSwxMCksbj1vLm4uYitvLm8uYitvLmQuYSxvLms9PUlzJiYobis9dShLKHQsKHhlKCksTE8pKSwxNDIpLmEpLHcuYj1uLVcsXz1iLk1hdGgubWluKF8sVyksaz1iLk1hdGgubWF4KGssbil9c3x8KF89MCxrPTApLHQuZi5iPWstXyx0LmMuYi09XyxvcihlKX1mdW5jdGlvbiB1NnQodCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFosYnQ7Zm9yKG89MCxoPTAsaz1uZXcgUyh0LmEpO2suYTxrLmMuYy5sZW5ndGg7KWQ9dShRKGspLDEwKSxvPWIuTWF0aC5tYXgobyxkLmQuYiksaD1iLk1hdGgubWF4KGgsZC5kLmMpO2Zvcih3PW5ldyBTKHQuYSk7dy5hPHcuYy5jLmxlbmd0aDspe3N3aXRjaChkPXUoUSh3KSwxMCksbj11KEsoZCwoeGUoKSxNZCkpLDI0OCksbi5nKXtjYXNlIDE6Rz0wO2JyZWFrO2Nhc2UgMjpHPTE7YnJlYWs7Y2FzZSA1Okc9LjU7YnJlYWs7ZGVmYXVsdDpmb3Iocj0wLE09MCxxPW5ldyBTKGQuaik7cS5hPHEuYy5jLmxlbmd0aDspQj11KFEocSksMTEpLEIuZS5jLmxlbmd0aD09MHx8KytyLEIuZy5jLmxlbmd0aD09MHx8KytNO3IrTT09MD9HPS41Okc9TS8ocitNKX1aPXQuYyxfPWQuby5hLGJ0PShaLmEtXykqRyxHPi41P2J0LT1oKjIqKEctLjUpOkc8LjUmJihidCs9byoyKiguNS1HKSkscz1kLmQuYixidDxzJiYoYnQ9cyksVz1kLmQuYyxidD5aLmEtVy1fJiYoYnQ9Wi5hLVctXyksZC5uLmE9ZStidH19ZnVuY3Rpb24gUXluKHQsZSxuLHIscyl7dmFyIG8saCxkLHcsayxfLE0sQixxLEcsVyxaO2ZvcihkPU50KGdhLFRvLDI1LHQuYy5sZW5ndGgsMTUsMSksQj1uZXcgR2oobmV3IEtGKSxHM3QoQix0KSxrPTAsVz1uZXcgbGU7Qi5iLmMubGVuZ3RoIT0wOylpZihoPXUoQi5iLmMubGVuZ3RoPT0wP251bGw6UGUoQi5iLDApLDE1Nyksaz4xJiZIdShoKSpMbChoKS8yPmRbMF0pe2ZvcihvPTA7bzxXLmMubGVuZ3RoLTEmJkh1KGgpKkxsKGgpLzI+ZFtvXTspKytvO0c9bmV3IEtkKFcsMCxvKzEpLE09bmV3IFUkKEcpLF89SHUoaCkvTGwoaCksdz1JYXQoTSxlLG5ldyB2NixuLHIscyxfKSxGaShLZihNLmUpLHcpLEE4KGg3KEIsTSkpLHE9bmV3IEtkKFcsbysxLFcuYy5sZW5ndGgpLEczdChCLHEpLFcuYz1OdChRbixNZSwxLDAsNSwxKSxrPTAsdVl0KGQsZC5sZW5ndGgsMCl9ZWxzZSBaPUIuYi5jLmxlbmd0aD09MD9udWxsOlBlKEIuYiwwKSxaIT1udWxsJiZ1aXQoQiwwKSxrPjAmJihkW2tdPWRbay0xXSksZFtrXSs9SHUoaCkqTGwoaCksKytrLFcuY1tXLmMubGVuZ3RoXT1oO3JldHVybiBXfWZ1bmN0aW9uIFp5bih0KXt2YXIgZSxuLHIscyxvO2lmKHI9dShLKHQsKHhlKCksZHUpKSwxNjMpLHI9PShwaCgpLGdiKSl7Zm9yKG49bmV3IGFyKGxyKFVvKHQpLmEuS2MoKSxuZXcgSCkpO1ZyKG4pOylpZihlPXUoSXIobiksMTcpLCF5SnQoZSkpdGhyb3cgbnQobmV3IEIzKCRvdCtaRCh0KSsiJyBoYXMgaXRzIGxheWVyIGNvbnN0cmFpbnQgc2V0IHRvIEZJUlNUX1NFUEFSQVRFLCBidXQgaGFzIGF0IGxlYXN0IG9uZSBpbmNvbWluZyBlZGdlLiBGSVJTVF9TRVBBUkFURSBub2RlcyBtdXN0IG5vdCBoYXZlIGluY29taW5nIGVkZ2VzLiIpKX1lbHNlIGlmKHI9PUZ5KXtmb3Iobz1uZXcgYXIobHIoJHModCkuYS5LYygpLG5ldyBIKSk7VnIobyk7KWlmKHM9dShJcihvKSwxNyksIXlKdChzKSl0aHJvdyBudChuZXcgQjMoJG90K1pEKHQpKyInIGhhcyBpdHMgbGF5ZXIgY29uc3RyYWludCBzZXQgdG8gTEFTVF9TRVBBUkFURSwgYnV0IGhhcyBhdCBsZWFzdCBvbmUgb3V0Z29pbmcgZWRnZS4gTEFTVF9TRVBBUkFURSBub2RlcyBtdXN0IG5vdCBoYXZlIG91dGdvaW5nIGVkZ2VzLiIpKX19ZnVuY3Rpb24gSnluKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxfLE0sQixxLEc7Zm9yKG1yKGUsIkxhYmVsIGR1bW15IHJlbW92YWwiLDEpLHI9WnQodmUoSyh0LCh4ZSgpLEZ4KSkpKSxzPVp0KHZlKEsodCxWeSkpKSxrPXUoSyh0LFhsKSwxMDMpLHc9bmV3IFModC5iKTt3LmE8dy5jLmMubGVuZ3RoOylmb3IoZD11KFEodyksMjkpLE09bmV3IHhhKGQuYSwwKTtNLmI8TS5kLmdjKCk7KV89KFpuKE0uYjxNLmQuZ2MoKSksdShNLmQuWGIoTS5jPU0uYisrKSwxMCkpLF8uaz09KEduKCksUGwpJiYoQj11KEsoXywoYWUoKSxJaSkpLDE3KSxHPVp0KHZlKEsoQixYZykpKSxoPUd0KEsoXyxEeCkpPT09R3QoKFZsKCkseWIpKSxuPW5ldyBTbyhfLm4pLGgmJihuLmIrPUcrciksbz1uZXcgUmUoXy5vLmEsXy5vLmItRy1yKSxxPXUoSyhfLFRPKSwxNSksaz09KGZvKCksWjApfHxrPT1RMD9Odm4ocSxuLHMsbyxoLGspOnB1bihxLG4scyxvKSxScyhCLmIscSksQWF0KF8sR3QoSyh0LFgwKSk9PT1HdCgocTAoKSxYTykpKSxEbChNKSk7b3IoZSl9ZnVuY3Rpb24gdDNuKHQsZSxuLHIpe3ZhciBzLG8saCxkLHcsayxfLE0sQixxLEcsVyxaLGJ0LE10LFN0LGp0LFF0O2Zvcih3PW5ldyBsZSxvPW5ldyBTKGUuYSk7by5hPG8uYy5jLmxlbmd0aDspZm9yKHM9dShRKG8pLDEwKSxkPW5ldyBTKHMuaik7ZC5hPGQuYy5jLmxlbmd0aDspe2ZvcihoPXUoUShkKSwxMSksXz1udWxsLFN0PXBkKGguZyksanQ9MCxRdD1TdC5sZW5ndGg7anQ8UXQ7KytqdClNdD1TdFtqdF0sSDgoTXQuZC5pLG4pfHwoYnQ9X2F0KHQsZSxuLE10LE10LmMsKGhvKCksc3UpLF8pLGJ0IT1fJiYody5jW3cuYy5sZW5ndGhdPWJ0KSxidC5jJiYoXz1idCkpO2ZvcihrPW51bGwsRz1wZChoLmUpLFc9MCxaPUcubGVuZ3RoO1c8WjsrK1cpcT1HW1ddLEg4KHEuYy5pLG4pfHwoYnQ9X2F0KHQsZSxuLHEscS5kLChobygpLGFsKSxrKSxidCE9ayYmKHcuY1t3LmMubGVuZ3RoXT1idCksYnQuYyYmKGs9YnQpKX1mb3IoQj1uZXcgUyh3KTtCLmE8Qi5jLmMubGVuZ3RoOylNPXUoUShCKSw0NDEpLEdvKGUuYSxNLmEsMCkhPS0xfHx1ZShlLmEsTS5hKSxNLmMmJihyLmNbci5jLmxlbmd0aF09TSl9ZnVuY3Rpb24gZTNuKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxfLE0sQixxLEcsVyxaO2ZvcihtcihuLCJJbnRlcmFjdGl2ZSBjeWNsZSBicmVha2luZyIsMSksTT1uZXcgbGUscT1uZXcgUyhlLmEpO3EuYTxxLmMuYy5sZW5ndGg7KWZvcihCPXUoUShxKSwxMCksQi5wPTEsRz1hNHQoQikuYSxfPWl3KEIsKGhvKCksc3UpKS5LYygpO18uT2IoKTspZm9yKGs9dShfLlBiKCksMTEpLG89bmV3IFMoay5nKTtvLmE8by5jLmMubGVuZ3RoOylyPXUoUShvKSwxNyksVz1yLmQuaSxXIT1CJiYoWj1hNHQoVykuYSxaPEcmJihNLmNbTS5jLmxlbmd0aF09cikpO2ZvcihoPW5ldyBTKE0pO2guYTxoLmMuYy5sZW5ndGg7KXI9dShRKGgpLDE3KSxkdyhyLCEwKTtmb3IoTS5jPU50KFFuLE1lLDEsMCw1LDEpLHc9bmV3IFMoZS5hKTt3LmE8dy5jLmMubGVuZ3RoOylkPXUoUSh3KSwxMCksZC5wPjAmJiRhZSh0LGQsTSk7Zm9yKHM9bmV3IFMoTSk7cy5hPHMuYy5jLmxlbmd0aDspcj11KFEocyksMTcpLGR3KHIsITApO00uYz1OdChRbixNZSwxLDAsNSwxKSxvcihuKX1mdW5jdGlvbiBQbGUodCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLF87cmV0dXJuIGs9IiIsZS5sZW5ndGg9PTA/dC5kZShENnQsJGF0LC0xLC0xKTooXz11eShlKSx1bihfLnN1YnN0cigwLDMpLCJhdCAiKSYmKF89Xy5zdWJzdHIoMykpLF89Xy5yZXBsYWNlKC9cWy4qP1xdL2csIiIpLGg9Xy5pbmRleE9mKCIoIiksaD09LTE/KGg9Xy5pbmRleE9mKCJAIiksaD09LTE/KGs9XyxfPSIiKTooaz11eShfLnN1YnN0cihoKzEpKSxfPXV5KF8uc3Vic3RyKDAsaCkpKSk6KG49Xy5pbmRleE9mKCIpIixoKSxrPV8uc3Vic3RyKGgrMSxuLShoKzEpKSxfPXV5KF8uc3Vic3RyKDAsaCkpKSxoPXVkKF8sTHUoNDYpKSxoIT0tMSYmKF89Xy5zdWJzdHIoaCsxKSksKF8ubGVuZ3RoPT0wfHx1bihfLCJBbm9ueW1vdXMgZnVuY3Rpb24iKSkmJihfPSRhdCksZD1kaihrLEx1KDU4KSkscz1hdnQoayxMdSg1OCksZC0xKSx3PS0xLHI9LTEsbz1ENnQsZCE9LTEmJnMhPS0xJiYobz1rLnN1YnN0cigwLHMpLHc9bld0KGsuc3Vic3RyKHMrMSxkLShzKzEpKSkscj1uV3Qoay5zdWJzdHIoZCsxKSkpLHQuZGUobyxfLHcscikpfWZ1bmN0aW9uIGw2dCh0LGUsbil7dmFyIHIscyxvLGgsZCx3O2lmKGUubD09MCYmZS5tPT0wJiZlLmg9PTApdGhyb3cgbnQobmV3IHBSKCJkaXZpZGUgYnkgemVybyIpKTtpZih0Lmw9PTAmJnQubT09MCYmdC5oPT0wKXJldHVybiBuJiYodWI9Y3UoMCwwLDApKSxjdSgwLDAsMCk7aWYoZS5oPT1ESSYmZS5tPT0wJiZlLmw9PTApcmV0dXJuIGJsbih0LG4pO2lmKHc9ITEsZS5oPj4xOSYmKGU9VzgoZSksdz0hdyksaD1aYm4oZSksbz0hMSxzPSExLHI9ITEsdC5oPT1ESSYmdC5tPT0wJiZ0Lmw9PTApaWYocz0hMCxvPSEwLGg9PS0xKXQ9ZVV0KChJOCgpLFk4dCkpLHI9ITAsdz0hdztlbHNlIHJldHVybiBkPWM1dCh0LGgpLHcmJm1pdChkKSxuJiYodWI9Y3UoMCwwLDApKSxkO2Vsc2UgdC5oPj4xOSYmKG89ITAsdD1XOCh0KSxyPSEwLHc9IXcpO3JldHVybiBoIT0tMT9qY24odCxoLHcsbyxuKTpKM3QodCxlKTwwPyhuJiYobz91Yj1XOCh0KTp1Yj1jdSh0LmwsdC5tLHQuaCkpLGN1KDAsMCwwKSk6SHduKHI/dDpjdSh0LmwsdC5tLHQuaCksZSx3LG8scyxuKX1mdW5jdGlvbiBUcSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXyxNLEIscSxHO2lmKHQuZSYmdC5jLmM8dC5mKXRocm93IG50KG5ldyBIbygiRXhwZWN0ZWQgIit0LmYrIiBwaGFzZXMgdG8gYmUgY29uZmlndXJlZDsgb25seSBmb3VuZCAiK3QuYy5jKSk7Zm9yKF89dShXZih0LmcpLDkpLHE9SGQodC5mKSxvPV8sZD0wLGs9by5sZW5ndGg7ZDxrOysrZClyPW9bZF0sTT11KHdEKHQsci5nKSwyNDYpLE0/dWUocSx1KGVpZSh0LE0pLDEyMykpOnEuY1txLmMubGVuZ3RoXT1udWxsO2ZvcihHPW5ldyBacyx5cyhXaSh4dShXaShuZXcga24obnVsbCxuZXcgVG4ocSwxNikpLG5ldyB2WiksbmV3IGokdChlKSksbmV3IHdaKSxuZXcgJCR0KEcpKSxIbChHLHQuYSksbj1uZXcgbGUscz1fLGg9MCx3PXMubGVuZ3RoO2g8dzsrK2gpcj1zW2hdLFJzKG4sJG5lKHQscyQodSh3RChHLHIuZyksMjApKSkpLEI9dShQZShxLHIuZyksMTIzKSxCJiYobi5jW24uYy5sZW5ndGhdPUIpO3JldHVybiBScyhuLCRuZSh0LHMkKHUod0QoRyxfW18ubGVuZ3RoLTFdLmcrMSksMjApKSkpLG59ZnVuY3Rpb24gbjNuKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxfLE0sQixxLEcsVyxaO2ZvcihtcihuLCJNb2RlbCBvcmRlciBjeWNsZSBicmVha2luZyIsMSksdC5hPTAsdC5iPTAscT1uZXcgbGUsXz1lLmEuYy5sZW5ndGgsaz1uZXcgUyhlLmEpO2suYTxrLmMuYy5sZW5ndGg7KXc9dShRKGspLDEwKSxlYSh3LChhZSgpLExjKSkmJihfPWIuTWF0aC5tYXgoXyx1KEsodyxMYyksMTkpLmErMSkpO2ZvcihXPW5ldyBTKGUuYSk7Vy5hPFcuYy5jLmxlbmd0aDspZm9yKEc9dShRKFcpLDEwKSxoPVhhZSh0LEcsXyksQj1pdyhHLChobygpLHN1KSkuS2MoKTtCLk9iKCk7KWZvcihNPXUoQi5QYigpLDExKSxvPW5ldyBTKE0uZyk7by5hPG8uYy5jLmxlbmd0aDspcj11KFEobyksMTcpLFo9ci5kLmksZD1YYWUodCxaLF8pLGQ8aCYmKHEuY1txLmMubGVuZ3RoXT1yKTtmb3Iocz1uZXcgUyhxKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoUShzKSwxNyksZHcociwhMCksZWUoZSwoYWUoKSx4TyksKEZuKCksITApKTtxLmM9TnQoUW4sTWUsMSwwLDUsMSksb3Iobil9ZnVuY3Rpb24gcjNuKHQsZSl7dmFyIG4scixzLG8saCxkLHc7aWYoISh0Lmc+ZS5mfHxlLmc+dC5mKSl7Zm9yKG49MCxyPTAsaD10LncuYS5lYygpLktjKCk7aC5PYigpOylzPXUoaC5QYigpLDExKSxEaXQobmModXQob3QobmEsMSkscmUsOCwwLFtzLmkubixzLm4scy5hXSkpLmIsZS5nLGUuZikmJisrbjtmb3IoZD10LnIuYS5lYygpLktjKCk7ZC5PYigpOylzPXUoZC5QYigpLDExKSxEaXQobmModXQob3QobmEsMSkscmUsOCwwLFtzLmkubixzLm4scy5hXSkpLmIsZS5nLGUuZikmJi0tbjtmb3Iodz1lLncuYS5lYygpLktjKCk7dy5PYigpOylzPXUody5QYigpLDExKSxEaXQobmModXQob3QobmEsMSkscmUsOCwwLFtzLmkubixzLm4scy5hXSkpLmIsdC5nLHQuZikmJisrcjtmb3Iobz1lLnIuYS5lYygpLktjKCk7by5PYigpOylzPXUoby5QYigpLDExKSxEaXQobmModXQob3QobmEsMSkscmUsOCwwLFtzLmkubixzLm4scy5hXSkpLmIsdC5nLHQuZikmJi0tcjtuPHI/bmV3IFMkKHQsZSxyLW4pOnI8bj9uZXcgUyQoZSx0LG4tcik6KG5ldyBTJChlLHQsMCksbmV3IFMkKHQsZSwwKSl9fWZ1bmN0aW9uIGkzbih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWixidCxNdDtmb3Ioaz1lLmMscz1yMnQodC5lKSxNPWxkKEJNKHVjKG4ydCh0LmUpKSx0LmQqdC5hLHQuYyp0LmIpLC0uNSksbj1zLmEtTS5hLHI9cy5iLU0uYixoPWUuYSxuPWguYy1uLHI9aC5kLXIsdz1uZXcgUyhrKTt3LmE8dy5jLmMubGVuZ3RoOyl7c3dpdGNoKGQ9dShRKHcpLDM5NSksQj1kLmIscT1uK0IuYSxaPXIrQi5iLEc9Q3MocS90LmEpLGJ0PUNzKFovdC5iKSxvPWQuYSxvLmcpe2Nhc2UgMDpfPShleCgpLGNPKTticmVhaztjYXNlIDE6Xz0oZXgoKSxvTyk7YnJlYWs7Y2FzZSAyOl89KGV4KCksdU8pO2JyZWFrO2RlZmF1bHQ6Xz0oZXgoKSxsTyl9by5hPyhNdD1DcygoWitkLmMpL3QuYiksdWUodC5mLG5ldyBndnQoXyxkZShidCksZGUoTXQpKSksbz09KHNDKCksZk8pP0s4KHQsMCxidCxHLE10KTpLOCh0LEcsYnQsdC5kLTEsTXQpKTooVz1DcygocStkLmMpL3QuYSksdWUodC5mLG5ldyBndnQoXyxkZShHKSxkZShXKSkpLG89PShzQygpLGhPKT9LOCh0LEcsMCxXLGJ0KTpLOCh0LEcsYnQsVyx0LmMtMSkpfX1mdW5jdGlvbiBzM24odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFosYnQsTXQsU3QsanQ7Zm9yKEI9bmV3IGxlLHM9bmV3IGxlLFc9bnVsbCxkPWUuS2MoKTtkLk9iKCk7KWg9dShkLlBiKCksMTkpLG89bmV3IENwKGguYSkscy5jW3MuYy5sZW5ndGhdPW8sVyYmKG8uZD1XLFcuZT1vKSxXPW87Zm9yKFN0PUltbih0KSxfPTA7XzxzLmMubGVuZ3RoOysrXyl7Zm9yKHE9bnVsbCxaPXBtdCgoU24oMCxzLmMubGVuZ3RoKSx1KHMuY1swXSw2NTIpKSksbj1udWxsLHI9YnMsTT0xO008dC5iLmMubGVuZ3RoOysrTSlidD1aP2IuTWF0aC5hYnMoWi5iLU0pOmIuTWF0aC5hYnMoTS1xLmIpKzEsRz1xP2IuTWF0aC5hYnMoTS1xLmIpOmJ0KzEsRzxidD8oaz1xLHc9Ryk6KGs9Wix3PWJ0KSxNdD0oanQ9WnQodmUoSyh0LCh4ZSgpLHBfdCkpKSksU3RbTV0rYi5NYXRoLnBvdyh3LGp0KSksTXQ8ciYmKHI9TXQsbj1rLG4uYz1NKSxaJiZNPT1aLmImJihxPVosWj1yZW4oWikpO24mJih1ZShCLGRlKG4uYykpLG4uYT0hMCxVdW4obikpfXJldHVybiBwbigpLERudChCLmMsQi5jLmxlbmd0aCxudWxsKSxCfWZ1bmN0aW9uIGEzbih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssXztmb3IoZT1uZXcgVmIsbj1uZXcgVmIsaz11bihaSSwocz1tQyh0LmIsWnIpLHM/anIoSmYoKCFzLmImJihzLmI9bmV3IEFsKChsbigpLEphKSxwYyxzKSkscy5iKSxSaCkpOm51bGwpKSx3PTA7dzx0Lmk7Kyt3KWQ9dSh0Lmdbd10sMTcwKSxfdChkLDk5KT8oaD11KGQsMTgpLGguQmImeWM/KCEoaC5CYiZ2ZCl8fCFrJiYobz1tQyhoLFpyKSwobz9qcihKZigoIW8uYiYmKG8uYj1uZXcgQWwoKGxuKCksSmEpLHBjLG8pKSxvLmIpLG1IKSk6bnVsbCk9PW51bGwpKSYmT3IoZSxoKTooXz1vbyhoKSxfJiZfLkJiJnljfHwoIShoLkJiJnZkKXx8IWsmJihyPW1DKGgsWnIpLChyP2pyKEpmKCghci5iJiYoci5iPW5ldyBBbCgobG4oKSxKYSkscGMscikpLHIuYiksbUgpKTpudWxsKT09bnVsbCkpJiZPcihuLGgpKSk6KHNvKCksdShkLDY2KS5PaigpJiYoZC5KaigpfHwoT3IoZSxkKSxPcihuLGQpKSkpO2V5KGUpLGV5KG4pLHQuYT11KGUuZywyNDcpLHUobi5nLDI0Nyl9ZnVuY3Rpb24gbzNuKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxfLE0sQixxLEcsVyxaO2ZvcihrPUcwbihlKSxXPXUoSyhlLCh4ZSgpLEVTKSksMzE0KSxXIT0oSzYoKSxDeCkmJl9hKGssbmV3IEw5KSxaPXUoSyhlLENPKSwyOTIpLF9hKGssbmV3IHdpKFopKSxHPTAsXz1uZXcgbGUsbz1uZXcgTV8oayk7by5hIT1vLmI7KXM9dShteihvKSwzNyksS2xlKHQuYyxzKSxCPXUoSyhzLChhZSgpLCRsdCkpLDE1KSxHKz1CLmdjKCkscj1CLktjKCksdWUoXyxuZXcgeWEocyxyKSk7Zm9yKG1yKG4sIlJlY3Vyc2l2ZSBoaWVyYXJjaGljYWwgbGF5b3V0IixHKSxxPXUodShQZShfLF8uYy5sZW5ndGgtMSksNDYpLmIsNDcpO3EuT2IoKTspZm9yKHc9bmV3IFMoXyk7dy5hPHcuYy5jLmxlbmd0aDspZm9yKGQ9dShRKHcpLDQ2KSxCPXUoZC5iLDQ3KSxoPXUoZC5hLDM3KTtCLk9iKCk7KWlmKE09dShCLlBiKCksNTEpLF90KE0sNTA3KSl7aWYoaC5lKWJyZWFrO00ucGYoaCx6YyhuLDEpKTticmVha31lbHNlIE0ucGYoaCx6YyhuLDEpKTtvcihuKX1mdW5jdGlvbiBGbGUodCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLF8sTTtpZih3PWUubGVuZ3RoLTEsZD0oJHIodyxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KHcpKSxkPT05Myl7aWYoaD11ZChlLEx1KDkxKSksaD49MClyZXR1cm4gcz1jbG4odCxlLnN1YnN0cigxLGgtMSkpLF89ZS5zdWJzdHIoaCsxLHctKGgrMSkpLHI1bih0LF8scyl9ZWxzZXtpZihuPS0xLHQ3dD09bnVsbCYmKHQ3dD1uZXcgUmVnRXhwKCJcXGQiKSksdDd0LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShkKSkmJihuPWF2dChlLEx1KDQ2KSx3LTEpLG4+PTApKXtyPXUoQnJ0KHQsZmVlKHQsZS5zdWJzdHIoMSxuLTEpKSwhMSksNTgpLGs9MDt0cnl7az1HbChlLnN1YnN0cihuKzEpLE9hLFRpKX1jYXRjaChCKXt0aHJvdyBCPXJzKEIpLF90KEIsMTI3KT8obz1CLG50KG5ldyBGJChvKSkpOm50KEIpfWlmKGs8ci5nYygpKXJldHVybiBNPXIuWGIoayksX3QoTSw3MikmJihNPXUoTSw3MikuZGQoKSksdShNLDU2KX1pZihuPDApcmV0dXJuIHUoQnJ0KHQsZmVlKHQsZS5zdWJzdHIoMSkpLCExKSw1Nil9cmV0dXJuIG51bGx9ZnVuY3Rpb24gVDQodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLF8sTTtpZihlcyhlLG4pPj0wKXJldHVybiBuO3N3aXRjaCgkdihNbyh0LG4pKSl7Y2FzZSAyOntpZih1bigiIixCZyh0LG4uSGooKSkubmUoKSkpe2lmKHc9Wk0oTW8odCxuKSksZD15OChNbyh0LG4pKSxfPXA1dCh0LGUsdyxkKSxfKXJldHVybiBfO2ZvcihzPXE1dCh0LGUpLGg9MCxNPXMuZ2MoKTtoPE07KytoKWlmKF89dShzLlhiKGgpLDE3MCksRTV0KHpudChNbyh0LF8pKSx3KSlyZXR1cm4gX31yZXR1cm4gbnVsbH1jYXNlIDQ6e2lmKHVuKCIiLEJnKHQsbi5IaigpKS5uZSgpKSl7Zm9yKHI9bjtyO3I9aWluKE1vKHQscikpKWlmKGs9Wk0oTW8odCxyKSksZD15OChNbyh0LHIpKSxfPWI1dCh0LGUsayxkKSxfKXJldHVybiBfO2lmKHc9Wk0oTW8odCxuKSksdW4oRDIsdykpcmV0dXJuIHI0dCh0LGUpO2ZvcihvPXVhdCh0LGUpLGg9MCxNPW8uZ2MoKTtoPE07KytoKWlmKF89dShvLlhiKGgpLDE3MCksRTV0KHpudChNbyh0LF8pKSx3KSlyZXR1cm4gX31yZXR1cm4gbnVsbH1kZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiBjM24odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLF87aWYobi5nYygpPT0wKXJldHVybiExO2lmKGQ9KHNvKCksdShlLDY2KS5PaigpKSxvPWQ/bjpuZXcgS3Yobi5nYygpKSxHMCh0LmUsZSkpe2lmKGUuaGkoKSlmb3Ioaz1uLktjKCk7ay5PYigpOyl3PWsuUGIoKSxtcSh0LGUsdyxfdChlLDk5KSYmKHUoZSwxOCkuQmImUWEpIT0wKXx8KHM9WWQoZSx3KSxvLkhjKHMpfHxvLkZjKHMpKTtlbHNlIGlmKCFkKWZvcihrPW4uS2MoKTtrLk9iKCk7KXc9ay5QYigpLHM9WWQoZSx3KSxvLkZjKHMpfWVsc2V7aWYobi5nYygpPjEpdGhyb3cgbnQobmV3IFBuKGVPKSk7Zm9yKF89aHUodC5lLlRnKCksZSkscj11KHQuZywxMTkpLGg9MDtoPHQuaTsrK2gpaWYocz1yW2hdLF8ucmwocy5haygpKSl7aWYobi5IYyhkP3M6cy5kZCgpKSlyZXR1cm4hMTtmb3Ioaz1uLktjKCk7ay5PYigpOyl3PWsuUGIoKSx1KGw0KHQsaCxkP3Uodyw3Mik6WWQoZSx3KSksNzIpO3JldHVybiEwfWR8fChzPVlkKGUsbi5LYygpLlBiKCkpLG8uRmMocykpfXJldHVybiBncyh0LG8pfWZ1bmN0aW9uIHUzbih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXztmb3IoXz1uZXcgY3MsZD0oaz1uZXcgbTEodC5jKS5hLnZjKCkuS2MoKSxuZXcgeTEoaykpO2QuYS5PYigpOylvPShzPXUoZC5hLlBiKCksNDIpLHUocy5kZCgpLDQ1OCkpLG8uYj09MCYma3MoXyxvLF8uYy5iLF8uYyk7Zm9yKDtfLmIhPTA7KWZvcihvPXUoXy5iPT0wP251bGw6KFpuKF8uYiE9MCksZmgoXyxfLmEuYSkpLDQ1OCksby5hPT1udWxsJiYoby5hPTApLHI9bmV3IFMoby5kKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoUShyKSw2NTQpLG4uYi5hPT1udWxsP24uYi5hPVp0KG8uYSkrbi5hOmUubz09KEMxKCksejIpP24uYi5hPWIuTWF0aC5taW4oWnQobi5iLmEpLFp0KG8uYSkrbi5hKTpuLmIuYT1iLk1hdGgubWF4KFp0KG4uYi5hKSxadChvLmEpK24uYSksLS1uLmIuYixuLmIuYj09MCYmYWkoXyxuLmIpO2ZvcihoPSh3PW5ldyBtMSh0LmMpLmEudmMoKS5LYygpLG5ldyB5MSh3KSk7aC5hLk9iKCk7KW89KHM9dShoLmEuUGIoKSw0MiksdShzLmRkKCksNDU4KSksZS5pW28uYy5wXT1vLmF9ZnVuY3Rpb24gbWMoKXttYz1YLGpTPW5ldyB0cyhveHQpLG5ldyBIcygiREVQVEgiLGRlKDApKSxtRz1uZXcgSHMoIkZBTiIsZGUoMCkpLFhtZT1uZXcgSHMoTDFlLGRlKDApKSxXeT1uZXcgSHMoIlJPT1QiLChGbigpLCExKSksTGh0PW5ldyBIcygiTEVGVE5FSUdIQk9SIixudWxsKSxRbWU9bmV3IEhzKCJSSUdIVE5FSUdIQk9SIixudWxsKSx5Rz1uZXcgSHMoIkxFRlRTSUJMSU5HIixudWxsKSxNaHQ9bmV3IEhzKCJSSUdIVFNJQkxJTkciLG51bGwpLEFodD1uZXcgSHMoIkRVTU1ZIiwhMSksbmV3IEhzKCJMRVZFTCIsZGUoMCkpLFhfdD1uZXcgSHMoIlJFTU9WQUJMRV9FREdFUyIsbmV3IGNzKSxEaHQ9bmV3IEhzKCJYQ09PUiIsZGUoMCkpLFFfdD1uZXcgSHMoIllDT09SIixkZSgwKSkseEc9bmV3IEhzKCJMRVZFTEhFSUdIVCIsMCksUlM9bmV3IEhzKCJJRCIsIiIpLGtHPW5ldyBIcygiUE9TSVRJT04iLGRlKDApKSxKZz1uZXcgSHMoIlBSRUxJTSIsMCkseUU9bmV3IEhzKCJNT0RJRklFUiIsMCksQlM9bmV3IHRzKCRmZSksRk89bmV3IHRzKHpmZSl9ZnVuY3Rpb24gbDNuKHQsZSxuLHIpe3ZhciBzLG8saCxkLHcsayxfLE0sQixxLEc7Zm9yKF89bitlLmMuYy5hLHE9bmV3IFMoZS5qKTtxLmE8cS5jLmMubGVuZ3RoOyl7aWYoQj11KFEocSksMTEpLHM9bmModXQob3QobmEsMSkscmUsOCwwLFtCLmkubixCLm4sQi5hXSkpLGUuaz09KEduKCksVWMpJiYoZD11KEsoQiwoYWUoKSxJaSkpLDExKSxzLmE9bmModXQob3QobmEsMSkscmUsOCwwLFtkLmkubixkLm4sZC5hXSkpLmEsZS5uLmE9cy5hKSxoPW5ldyBSZSgwLHMuYiksQi5qPT0oYmUoKSxIbikpaC5hPV87ZWxzZSBpZihCLmo9PUJuKWguYT1uO2Vsc2UgY29udGludWU7aWYoRz1iLk1hdGguYWJzKHMuYS1oLmEpLCEoRzw9ciYmIWcxbihlKSkpZm9yKG89Qi5nLmMubGVuZ3RoK0IuZS5jLmxlbmd0aD4xLGs9bmV3IE0xKEIuYik7Sm8oay5hKXx8Sm8oay5iKTspdz11KEpvKGsuYSk/UShrLmEpOlEoay5iKSwxNyksTT13LmM9PUI/dy5kOncuYyxiLk1hdGguYWJzKG5jKHV0KG90KG5hLDEpLHJlLDgsMCxbTS5pLm4sTS5uLE0uYV0pKS5iLWguYik+MSYmbnZuKHQsdyxoLG8sQil9fWZ1bmN0aW9uIGgzbih0KXt2YXIgZSxuLHIscyxvLGg7aWYocz1uZXcgeGEodC5lLDApLHI9bmV3IHhhKHQuYSwwKSx0LmQpZm9yKG49MDtuPHQuYjtuKyspWm4ocy5iPHMuZC5nYygpKSxzLmQuWGIocy5jPXMuYisrKTtlbHNlIGZvcihuPTA7bjx0LmItMTtuKyspWm4ocy5iPHMuZC5nYygpKSxzLmQuWGIocy5jPXMuYisrKSxEbChzKTtmb3IoZT1adCgoWm4ocy5iPHMuZC5nYygpKSx2ZShzLmQuWGIocy5jPXMuYisrKSkpKTt0LmYtZT55Y3Q7KXtmb3Iobz1lLGg9MDtiLk1hdGguYWJzKGUtbyk8eWN0OykrK2gsZT1adCgoWm4ocy5iPHMuZC5nYygpKSx2ZShzLmQuWGIocy5jPXMuYisrKSkpKSxabihyLmI8ci5kLmdjKCkpLHIuZC5YYihyLmM9ci5iKyspO2g8dC5iJiYoWm4ocy5iPjApLHMuYS5YYihzLmM9LS1zLmIpLEFtbih0LHQuYi1oLG8scixzKSxabihzLmI8cy5kLmdjKCkpLHMuZC5YYihzLmM9cy5iKyspKSxabihyLmI+MCksci5hLlhiKHIuYz0tLXIuYil9aWYoIXQuZClmb3Iobj0wO248dC5iLTE7bisrKVpuKHMuYjxzLmQuZ2MoKSkscy5kLlhiKHMuYz1zLmIrKyksRGwocyk7dC5kPSEwLHQuYz0hMH1mdW5jdGlvbiAkaSgpeyRpPVgsZEx0PShuYnQoKSxrYykuYixmNWU9dShBdChLdChrYy5iKSwwKSwzNCksSzI9dShBdChLdChrYy5iKSwxKSwzNCksaDVlPXUoQXQoS3Qoa2MuYiksMiksMzQpLGw1PWtjLmJiLHUoQXQoS3Qoa2MuYmIpLDApLDM0KSx1KEF0KEt0KGtjLmJiKSwxKSwzNCksaDU9a2MuZmIsb0E9dShBdChLdChrYy5mYiksMCksMzQpLHUoQXQoS3Qoa2MuZmIpLDEpLDM0KSx1KEF0KEt0KGtjLmZiKSwyKSwxOCksVnc9a2MucWIsVDVlPXUoQXQoS3Qoa2MucWIpLDApLDM0KSx1KEF0KEt0KGtjLnFiKSwxKSwxOCksdShBdChLdChrYy5xYiksMiksMTgpLGdOPXUoQXQoS3Qoa2MucWIpLDMpLDM0KSxwTj11KEF0KEt0KGtjLnFiKSw0KSwzNCksdUE9dShBdChLdChrYy5xYiksNiksMzQpLGNBPXUoQXQoS3Qoa2MucWIpLDUpLDE4KSxkNWU9a2MuaixnNWU9a2MuayxwNWU9a2MucSxiNWU9a2Mudyx2NWU9a2MuQix3NWU9a2MuQSxtNWU9a2MuQyx5NWU9a2MuRCx4NWU9a2MuXyxrNWU9a2MuY2IsRTVlPWtjLmhifWZ1bmN0aW9uIGYzbih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssXyxNLEIscTt0LmM9MCx0LmI9MCxyPTIqZS5jLmEuYy5sZW5ndGgrMTt0OmZvcihNPW4uS2MoKTtNLk9iKCk7KXtpZihfPXUoTS5QYigpLDExKSxkPV8uaj09KGJlKCksT24pfHxfLmo9PXlyLHE9MCxkKXtpZihCPXUoSyhfLChhZSgpLHNsKSksMTApLCFCKWNvbnRpbnVlO3ErPVZ2bih0LHIsXyxCKX1lbHNle2ZvcihrPW5ldyBTKF8uZyk7ay5hPGsuYy5jLmxlbmd0aDspaWYodz11KFEoayksMTcpLHM9dy5kLHMuaS5jPT1lLmMpe3VlKHQuYSxfKTtjb250aW51ZSB0fWVsc2UgcSs9dC5nW3MucF07Zm9yKGg9bmV3IFMoXy5lKTtoLmE8aC5jLmMubGVuZ3RoOylpZihvPXUoUShoKSwxNykscz1vLmMscy5pLmM9PWUuYyl7dWUodC5hLF8pO2NvbnRpbnVlIHR9ZWxzZSBxLT10Lmdbcy5wXX1fLmUuYy5sZW5ndGgrXy5nLmMubGVuZ3RoPjA/KHQuZltfLnBdPXEvKF8uZS5jLmxlbmd0aCtfLmcuYy5sZW5ndGgpLHQuYz1iLk1hdGgubWluKHQuYyx0LmZbXy5wXSksdC5iPWIuTWF0aC5tYXgodC5iLHQuZltfLnBdKSk6ZCYmKHQuZltfLnBdPXEpfX1mdW5jdGlvbiBkM24odCl7dC5iPW51bGwsdC5iYj1udWxsLHQuZmI9bnVsbCx0LnFiPW51bGwsdC5hPW51bGwsdC5jPW51bGwsdC5kPW51bGwsdC5lPW51bGwsdC5mPW51bGwsdC5uPW51bGwsdC5NPW51bGwsdC5MPW51bGwsdC5RPW51bGwsdC5SPW51bGwsdC5LPW51bGwsdC5kYj1udWxsLHQuZWI9bnVsbCx0Lmc9bnVsbCx0Lmk9bnVsbCx0Lmo9bnVsbCx0Lms9bnVsbCx0LmdiPW51bGwsdC5vPW51bGwsdC5wPW51bGwsdC5xPW51bGwsdC5yPW51bGwsdC4kPW51bGwsdC5pYj1udWxsLHQuUz1udWxsLHQuVD1udWxsLHQudD1udWxsLHQucz1udWxsLHQudT1udWxsLHQudj1udWxsLHQudz1udWxsLHQuQj1udWxsLHQuQT1udWxsLHQuQz1udWxsLHQuRD1udWxsLHQuRj1udWxsLHQuRz1udWxsLHQuSD1udWxsLHQuST1udWxsLHQuSj1udWxsLHQuUD1udWxsLHQuWj1udWxsLHQuVT1udWxsLHQuVj1udWxsLHQuVz1udWxsLHQuWD1udWxsLHQuWT1udWxsLHQuXz1udWxsLHQuYWI9bnVsbCx0LmNiPW51bGwsdC5oYj1udWxsLHQubmI9bnVsbCx0LmxiPW51bGwsdC5tYj1udWxsLHQub2I9bnVsbCx0LnBiPW51bGwsdC5qYj1udWxsLHQua2I9bnVsbCx0Lk49ITEsdC5PPSExfWZ1bmN0aW9uIGczbih0LGUsbil7dmFyIHIscyxvLGg7Zm9yKG1yKG4sIkdyYXBoIHRyYW5zZm9ybWF0aW9uICgiK3QuYSsiKSIsMSksaD1WdihlLmEpLG89bmV3IFMoZS5iKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoUShvKSwyOSksUnMoaCxzLmEpO2lmKHI9dShLKGUsKHhlKCksRlR0KSksNDE5KSxyPT0oVEQoKSxOVikpc3dpdGNoKHUoSyhlLFhsKSwxMDMpLmcpe2Nhc2UgMjpOXyhlLGgpO2JyZWFrO2Nhc2UgMzpuQyhlLGgpO2JyZWFrO2Nhc2UgNDp0LmE9PSgkOCgpLHBPKT8obkMoZSxoKSxTcnQoZSxoKSk6KFNydChlLGgpLG5DKGUsaCkpfWVsc2UgaWYodC5hPT0oJDgoKSxwTykpc3dpdGNoKHUoSyhlLFhsKSwxMDMpLmcpe2Nhc2UgMjpOXyhlLGgpLFNydChlLGgpO2JyZWFrO2Nhc2UgMzpuQyhlLGgpLE5fKGUsaCk7YnJlYWs7Y2FzZSA0Ok5fKGUsaCksbkMoZSxoKX1lbHNlIHN3aXRjaCh1KEsoZSxYbCksMTAzKS5nKXtjYXNlIDI6Tl8oZSxoKSxTcnQoZSxoKTticmVhaztjYXNlIDM6Tl8oZSxoKSxuQyhlLGgpO2JyZWFrO2Nhc2UgNDpuQyhlLGgpLE5fKGUsaCl9b3Iobil9ZnVuY3Rpb24gcDNuKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxfLE0sQixxLEcsVztmb3Ioaz1uZXcgQTAsXz1uZXcgQTAsRz1uZXcgQTAsVz1uZXcgQTAsdz1adCh2ZShLKGUsKHhlKCksQncpKSkpLG89WnQodmUoSyhlLFRmKSkpLGQ9bmV3IFMobik7ZC5hPGQuYy5jLmxlbmd0aDspaWYoaD11KFEoZCksMTApLE09dShLKGgsKGFlKCksZ2MpKSw2MSksTT09KGJlKCksT24pKWZvcihfLmEuemMoaCxfKSxzPW5ldyBhcihscihVbyhoKS5hLktjKCksbmV3IEgpKTtWcihzKTspcj11KElyKHMpLDE3KSxWcyhrLHIuYy5pKTtlbHNlIGlmKE09PXlyKWZvcihXLmEuemMoaCxXKSxzPW5ldyBhcihscihVbyhoKS5hLktjKCksbmV3IEgpKTtWcihzKTspcj11KElyKHMpLDE3KSxWcyhHLHIuYy5pKTtrLmEuZ2MoKSE9MCYmKEI9bmV3IFVudCgyLG8pLHE9ZzZ0KEIsZSxrLF8sLXctZS5jLmIpLHE+MCYmKHQuYT13KyhxLTEpKm8sZS5jLmIrPXQuYSxlLmYuYis9dC5hKSksRy5hLmdjKCkhPTAmJihCPW5ldyBVbnQoMSxvKSxxPWc2dChCLGUsRyxXLGUuZi5iK3ctZS5jLmIpLHE+MCYmKGUuZi5iKz13KyhxLTEpKm8pKX1mdW5jdGlvbiBFNyh0LGUpe3ZhciBuLHIscyxvO289dC5GLGU9PW51bGw/KHQuRj1udWxsLFg4KHQsbnVsbCkpOih0LkY9KEluKGUpLGUpLHI9dWQoZSxMdSg2MCkpLHIhPS0xPyhzPWUuc3Vic3RyKDAsciksdWQoZSxMdSg0NikpPT0tMSYmIXVuKHMsY3gpJiYhdW4ocyxRQykmJiF1bihzLFRIKSYmIXVuKHMsWkMpJiYhdW4ocyxKQykmJiF1bihzLHRTKSYmIXVuKHMsZVMpJiYhdW4ocyxuUykmJihzPXgwZSksbj1kaihlLEx1KDYyKSksbiE9LTEmJihzKz0iIitlLnN1YnN0cihuKzEpKSxYOCh0LHMpKToocz1lLHVkKGUsTHUoNDYpKT09LTEmJihyPXVkKGUsTHUoOTEpKSxyIT0tMSYmKHM9ZS5zdWJzdHIoMCxyKSksIXVuKHMsY3gpJiYhdW4ocyxRQykmJiF1bihzLFRIKSYmIXVuKHMsWkMpJiYhdW4ocyxKQykmJiF1bihzLHRTKSYmIXVuKHMsZVMpJiYhdW4ocyxuUyk/KHM9eDBlLHIhPS0xJiYocys9IiIrZS5zdWJzdHIocikpKTpzPWUpLFg4KHQscykscz09ZSYmKHQuRj10LkQpKSksdC5EYiY0JiYhKHQuRGImMSkmJkNpKHQsbmV3IG9hKHQsMSw1LG8sZSkpfWZ1bmN0aW9uIGIzbih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWixidCxNdCxTdDtpZihXPWUuYi5jLmxlbmd0aCwhKFc8Mykpe2ZvcihxPU50KFNyLEpyLDI1LFcsMTUsMSksTT0wLF89bmV3IFMoZS5iKTtfLmE8Xy5jLmMubGVuZ3RoOylrPXUoUShfKSwyOSkscVtNKytdPWsuYS5jLmxlbmd0aDtmb3IoQj1uZXcgeGEoZS5iLDIpLHI9MTtyPFctMTtyKyspZm9yKG49KFpuKEIuYjxCLmQuZ2MoKSksdShCLmQuWGIoQi5jPUIuYisrKSwyOSkpLEc9bmV3IFMobi5hKSxvPTAsZD0wLHc9MDt3PHFbcisxXTt3KyspaWYoU3Q9dShRKEcpLDEwKSx3PT1xW3IrMV0tMXx8UDR0KHQsU3QscisxLHIpKXtmb3IoaD1xW3JdLTEsUDR0KHQsU3QscisxLHIpJiYoaD10LmMuZVt1KHUodShQZSh0LmMuYixTdC5wKSwxNSkuWGIoMCksNDYpLmEsMTApLnBdKTtkPD13Oyl7aWYoTXQ9dShQZShuLmEsZCksMTApLCFQNHQodCxNdCxyKzEscikpZm9yKGJ0PXUoUGUodC5jLmIsTXQucCksMTUpLktjKCk7YnQuT2IoKTspWj11KGJ0LlBiKCksNDYpLHM9dC5jLmVbdShaLmEsMTApLnBdLChzPG98fHM+aCkmJlZzKHQuYix1KFouYiwxNykpOysrZH1vPWh9fX1mdW5jdGlvbiBoNnQodCxlKXt2YXIgbjtpZihlPT1udWxsfHx1bihlLE11KXx8ZS5sZW5ndGg9PTAmJnQuayE9KEhnKCksUngpKXJldHVybiBudWxsO3N3aXRjaCh0LmsuZyl7Y2FzZSAxOnJldHVybiBPeihlLCQ3KT8oRm4oKSxXNyk6T3ooZSxQY3QpPyhGbigpLE8yKTpudWxsO2Nhc2UgMjp0cnl7cmV0dXJuIGRlKEdsKGUsT2EsVGkpKX1jYXRjaChyKXtpZihyPXJzKHIpLF90KHIsMTI3KSlyZXR1cm4gbnVsbDt0aHJvdyBudChyKX1jYXNlIDQ6dHJ5e3JldHVybiBseShlKX1jYXRjaChyKXtpZihyPXJzKHIpLF90KHIsMTI3KSlyZXR1cm4gbnVsbDt0aHJvdyBudChyKX1jYXNlIDM6cmV0dXJuIGU7Y2FzZSA1OnJldHVybiBtcmUodCksX29lKHQsZSk7Y2FzZSA2OnJldHVybiBtcmUodCksQ2JuKHQsdC5hLGUpO2Nhc2UgNzp0cnl7cmV0dXJuIG49UnBuKHQpLG4uSmYoZSksbn1jYXRjaChyKXtpZihyPXJzKHIpLF90KHIsMzIpKXJldHVybiBudWxsO3Rocm93IG50KHIpfWRlZmF1bHQ6dGhyb3cgbnQobmV3IEhvKCJJbnZhbGlkIHR5cGUgc2V0IGZvciB0aGlzIGxheW91dCBvcHRpb24uIikpfX1mdW5jdGlvbiB2M24odCl7JF8oKTt2YXIgZSxuLHIscyxvLGgsZDtmb3IoZD1uZXcgWHp0LG49bmV3IFModCk7bi5hPG4uYy5jLmxlbmd0aDspZT11KFEobiksMTQwKSwoIWQuYnx8ZS5jPj1kLmIuYykmJihkLmI9ZSksKCFkLmN8fGUuYzw9ZC5jLmMpJiYoZC5kPWQuYyxkLmM9ZSksKCFkLmV8fGUuZD49ZC5lLmQpJiYoZC5lPWUpLCghZC5mfHxlLmQ8PWQuZi5kKSYmKGQuZj1lKTtyZXR1cm4gcj1uZXcgQnooKFU4KCksQ3cpKSxhRCh0LFNiZSxuZXcgQ2wodXQob3QoZ08sMSksTWUsMzY5LDAsW3JdKSkpLGg9bmV3IEJ6KEl5KSxhRCh0LENiZSxuZXcgQ2wodXQob3QoZ08sMSksTWUsMzY5LDAsW2hdKSkpLHM9bmV3IEJ6KER5KSxhRCh0LF9iZSxuZXcgQ2wodXQob3QoZ08sMSksTWUsMzY5LDAsW3NdKSkpLG89bmV3IEJ6KCQ0KSxhRCh0LFRiZSxuZXcgQ2wodXQob3QoZ08sMSksTWUsMzY5LDAsW29dKSkpLFFzdChyLmMsQ3cpLFFzdChzLmMsRHkpLFFzdChvLmMsJDQpLFFzdChoLmMsSXkpLGQuYS5jPU50KFFuLE1lLDEsMCw1LDEpLFJzKGQuYSxyLmMpLFJzKGQuYSxjMihzLmMpKSxScyhkLmEsby5jKSxScyhkLmEsYzIoaC5jKSksZH1mdW5jdGlvbiBmNnQodCl7dmFyIGU7c3dpdGNoKHQuZCl7Y2FzZSAxOntpZih0LmhqKCkpcmV0dXJuIHQubyE9LTI7YnJlYWt9Y2FzZSAyOntpZih0LmhqKCkpcmV0dXJuIHQubz09LTI7YnJlYWt9Y2FzZSAzOmNhc2UgNTpjYXNlIDQ6Y2FzZSA2OmNhc2UgNzpyZXR1cm4gdC5vPi0yO2RlZmF1bHQ6cmV0dXJuITF9c3dpdGNoKGU9dC5naigpLHQucCl7Y2FzZSAwOnJldHVybiBlIT1udWxsJiZCZShGZShlKSkhPWFfKHQuaywwKTtjYXNlIDE6cmV0dXJuIGUhPW51bGwmJnUoZSwyMTcpLmEhPU1yKHQuayk8PDI0Pj4yNDtjYXNlIDI6cmV0dXJuIGUhPW51bGwmJnUoZSwxNzIpLmEhPShNcih0LmspJk1zKTtjYXNlIDY6cmV0dXJuIGUhPW51bGwmJmFfKHUoZSwxNjIpLmEsdC5rKTtjYXNlIDU6cmV0dXJuIGUhPW51bGwmJnUoZSwxOSkuYSE9TXIodC5rKTtjYXNlIDc6cmV0dXJuIGUhPW51bGwmJnUoZSwxODQpLmEhPU1yKHQuayk8PDE2Pj4xNjtjYXNlIDM6cmV0dXJuIGUhPW51bGwmJlp0KHZlKGUpKSE9dC5qO2Nhc2UgNDpyZXR1cm4gZSE9bnVsbCYmdShlLDE1NSkuYSE9dC5qO2RlZmF1bHQ6cmV0dXJuIGU9PW51bGw/dC5uIT1udWxsOiFTaShlLHQubil9fWZ1bmN0aW9uIEVJKHQsZSxuKXt2YXIgcixzLG8saDtyZXR1cm4gdC5GaygpJiZ0LkVrKCkmJihoPVJudCh0LHUobiw1NikpLEd0KGgpIT09R3QobikpPyh0Lk9pKGUpLHQuVWkoZSxkdGUodCxlLGgpKSx0LnJrKCkmJihvPShzPXUobiw0OSksdC5EaygpP3QuQmsoKT9zLmloKHQuYixvbyh1KHduKGt1KHQuYiksdC5haigpKSwxOCkpLm4sdSh3bihrdSh0LmIpLHQuYWooKSkuWWooKSwyNikuQmooKSxudWxsKTpzLmloKHQuYixlcyhzLlRnKCksb28odSh3bihrdSh0LmIpLHQuYWooKSksMTgpKSksbnVsbCxudWxsKTpzLmloKHQuYiwtMS10LmFqKCksbnVsbCxudWxsKSksIXUoaCw0OSkuZWgoKSYmKG89KHI9dShoLDQ5KSx0LkRrKCk/dC5CaygpP3IuZ2godC5iLG9vKHUod24oa3UodC5iKSx0LmFqKCkpLDE4KSkubix1KHduKGt1KHQuYiksdC5haigpKS5ZaigpLDI2KS5CaigpLG8pOnIuZ2godC5iLGVzKHIuVGcoKSxvbyh1KHduKGt1KHQuYiksdC5haigpKSwxOCkpKSxudWxsLG8pOnIuZ2godC5iLC0xLXQuYWooKSxudWxsLG8pKSksbyYmby5GaSgpKSxTbCh0LmIpJiZ0LiRpKHQuWmkoOSxuLGgsZSwhMSkpLGgpOm59ZnVuY3Rpb24gQmxlKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxfLE0sQixxLEcsVyxaLGJ0LE10LFN0LGp0O2ZvcihfPVp0KHZlKEsodCwoeGUoKSxGdykpKSkscj1adCh2ZShLKHQsaF90KSkpLEI9bmV3IHRsLGVlKEIsRncsXytyKSxrPWUsYnQ9ay5kLFc9ay5jLmksTXQ9ay5kLmksWj1RYnQoVy5jKSxTdD1RYnQoTXQuYykscz1uZXcgbGUsTT1aO008PVN0O00rKylkPW5ldyBIMCh0KSxDMChkLChHbigpLGNhKSksZWUoZCwoYWUoKSxJaSksayksZWUoZCx3cywodmEoKSxLYykpLGVlKGQsc0csQikscT11KFBlKHQuYixNKSwyOSksTT09Wj9veShkLHEuYS5jLmxlbmd0aC1uLHEpOkxvKGQscSksanQ9WnQodmUoSyhrLFhnKSkpLGp0PDAmJihqdD0wLGVlKGssWGcsanQpKSxkLm8uYj1qdCxHPWIuTWF0aC5mbG9vcihqdC8yKSxoPW5ldyBOYyxVcyhoLChiZSgpLEJuKSksdGMoaCxkKSxoLm4uYj1HLHc9bmV3IE5jLFVzKHcsSG4pLHRjKHcsZCksdy5uLmI9RyxwYShrLGgpLG89bmV3IHp2LEJvKG8sayksZWUobyxPbyxudWxsKSxCYShvLHcpLHBhKG8sYnQpLHkxbihkLGssbykscy5jW3MuYy5sZW5ndGhdPW8saz1vO3JldHVybiBzfWZ1bmN0aW9uIEFhdCh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWixidCxNdCxTdDtmb3Iodz11KHFnKHQsKGJlKCksQm4pKS5LYygpLlBiKCksMTEpLmUscT11KHFnKHQsSG4pLktjKCkuUGIoKSwxMSkuZyxkPXcuYy5sZW5ndGgsU3Q9UzEodShQZSh0LmosMCksMTEpKTtkLS0gPjA7KXtmb3IoVz0oU24oMCx3LmMubGVuZ3RoKSx1KHcuY1swXSwxNykpLHM9KFNuKDAscS5jLmxlbmd0aCksdShxLmNbMF0sMTcpKSxNdD1zLmQuZSxvPUdvKE10LHMsMCksVGluKFcscy5kLG8pLEJhKHMsbnVsbCkscGEocyxudWxsKSxHPVcuYSxlJiZhaShHLG5ldyBTbyhTdCkpLHI9c2kocy5hLDApO3IuYiE9ci5kLmM7KW49dShpaShyKSw4KSxhaShHLG5ldyBTbyhuKSk7Zm9yKGJ0PVcuYixCPW5ldyBTKHMuYik7Qi5hPEIuYy5jLmxlbmd0aDspTT11KFEoQiksNzApLGJ0LmNbYnQuYy5sZW5ndGhdPU07aWYoWj11KEsoVywoeGUoKSxPbykpLDc0KSxoPXUoSyhzLE9vKSw3NCksaClmb3IoWnx8KFo9bmV3IGp1LGVlKFcsT28sWikpLF89c2koaCwwKTtfLmIhPV8uZC5jOylrPXUoaWkoXyksOCksYWkoWixuZXcgU28oaykpfX1mdW5jdGlvbiBSbGUodCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLF8sTSxCLHE7aWYobj11KHhvKHQuYixlKSwxMjQpLHc9dSh1KFBpKHQucixlKSwyMSksODQpLHcuZGMoKSl7bi5uLmI9MCxuLm4uYz0wO3JldHVybn1mb3Ioaz10LnUuSGMoKGlsKCksdGcpKSxoPTAsZD13LktjKCksXz1udWxsLE09MCxCPTA7ZC5PYigpOylyPXUoZC5QYigpLDExMSkscz1adCh2ZShyLmIuV2UoKGdqKCksWkgpKSkpLG89ci5iLnJmKCkuYSx0LkEuSGMoKE5sKCksVzIpKSYmdnVlKHQsZSksXz8ocT1CK18uZC5jK3QudytyLmQuYixoPWIuTWF0aC5tYXgoaCwoRTEoKSx2ZihSMSksYi5NYXRoLmFicyhNLXMpPD1SMXx8TT09c3x8aXNOYU4oTSkmJmlzTmFOKHMpPzA6cS8ocy1NKSkpKTp0LkMmJnQuQy5iPjAmJihoPWIuTWF0aC5tYXgoaCxobmUodC5DLmIrci5kLmIscykpKSxfPXIsTT1zLEI9bzt0LkMmJnQuQy5jPjAmJihxPUIrdC5DLmMsayYmKHErPV8uZC5jKSxoPWIuTWF0aC5tYXgoaCwoRTEoKSx2ZihSMSksYi5NYXRoLmFicyhNLTEpPD1SMXx8TT09MXx8aXNOYU4oTSkmJmlzTmFOKDEpPzA6cS8oMS1NKSkpKSxuLm4uYj0wLG4uYS5hPWh9ZnVuY3Rpb24gamxlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxfLE0sQixxO2lmKG49dSh4byh0LmIsZSksMTI0KSx3PXUodShQaSh0LnIsZSksMjEpLDg0KSx3LmRjKCkpe24ubi5kPTAsbi5uLmE9MDtyZXR1cm59Zm9yKGs9dC51LkhjKChpbCgpLHRnKSksaD0wLHQuQS5IYygoTmwoKSxXMikpJiZ3dWUodCxlKSxkPXcuS2MoKSxfPW51bGwsQj0wLE09MDtkLk9iKCk7KXI9dShkLlBiKCksMTExKSxvPVp0KHZlKHIuYi5XZSgoZ2ooKSxaSCkpKSkscz1yLmIucmYoKS5iLF8/KHE9TStfLmQuYSt0Lncrci5kLmQsaD1iLk1hdGgubWF4KGgsKEUxKCksdmYoUjEpLGIuTWF0aC5hYnMoQi1vKTw9UjF8fEI9PW98fGlzTmFOKEIpJiZpc05hTihvKT8wOnEvKG8tQikpKSk6dC5DJiZ0LkMuZD4wJiYoaD1iLk1hdGgubWF4KGgsaG5lKHQuQy5kK3IuZC5kLG8pKSksXz1yLEI9byxNPXM7dC5DJiZ0LkMuYT4wJiYocT1NK3QuQy5hLGsmJihxKz1fLmQuYSksaD1iLk1hdGgubWF4KGgsKEUxKCksdmYoUjEpLGIuTWF0aC5hYnMoQi0xKTw9UjF8fEI9PTF8fGlzTmFOKEIpJiZpc05hTigxKT8wOnEvKDEtQikpKSksbi5uLmQ9MCxuLmEuYj1ofWZ1bmN0aW9uICRsZSh0LGUsbil7dmFyIHIscyxvLGgsZCx3O2Zvcih0aGlzLmc9dCxkPWUuZC5sZW5ndGgsdz1uLmQubGVuZ3RoLHRoaXMuZD1OdChvMCxHZywxMCxkK3csMCwxKSxoPTA7aDxkO2grKyl0aGlzLmRbaF09ZS5kW2hdO2ZvcihvPTA7bzx3O28rKyl0aGlzLmRbZCtvXT1uLmRbb107aWYoZS5lKXtpZih0aGlzLmU9VU0oZS5lKSx0aGlzLmUuTWMobiksbi5lKWZvcihzPW4uZS5LYygpO3MuT2IoKTspcj11KHMuUGIoKSwyMzMpLHIhPWUmJih0aGlzLmUuSGMocik/LS1yLmM6dGhpcy5lLkZjKHIpKX1lbHNlIG4uZSYmKHRoaXMuZT1VTShuLmUpLHRoaXMuZS5NYyhlKSk7dGhpcy5mPWUuZituLmYsdGhpcy5hPWUuYStuLmEsdGhpcy5hPjA/ZWl0KHRoaXMsdGhpcy5mL3RoaXMuYSk6VDEoZS5nLGUuZFswXSkuYSE9bnVsbCYmVDEobi5nLG4uZFswXSkuYSE9bnVsbD9laXQodGhpcywoWnQoVDEoZS5nLGUuZFswXSkuYSkrWnQoVDEobi5nLG4uZFswXSkuYSkpLzIpOlQxKGUuZyxlLmRbMF0pLmEhPW51bGw/ZWl0KHRoaXMsVDEoZS5nLGUuZFswXSkuYSk6VDEobi5nLG4uZFswXSkuYSE9bnVsbCYmZWl0KHRoaXMsVDEobi5nLG4uZFswXSkuYSl9ZnVuY3Rpb24gdzNuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxfLE07Zm9yKHQuYT1uZXcgS1l0KFdvbihXUykpLHI9bmV3IFMoZS5hKTtyLmE8ci5jLmMubGVuZ3RoOyl7Zm9yKG49dShRKHIpLDg0MSksZD1uZXcgWml0KHV0KG90KFF1dCwxKSxNZSw4MSwwLFtdKSksdWUodC5hLmEsZCksaz1uZXcgUyhuLmQpO2suYTxrLmMuYy5sZW5ndGg7KXc9dShRKGspLDExMCksXz1uZXcgXzJ0KHQsdykscDZ0KF8sdShLKG4uYywoYWUoKSxOeSkpLDIxKSksTWwodC5nLG4pfHwoQWkodC5nLG4sbmV3IFJlKHcuYyx3LmQpKSxBaSh0LmYsbixfKSksdWUodC5hLmIsXyksX3J0KGQsXyk7Zm9yKGg9bmV3IFMobi5iKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoUShoKSw1OTQpLF89bmV3IF8ydCh0LG8ua2YoKSksQWkodC5iLG8sbmV3IHlhKGQsXykpLHA2dChfLHUoSyhuLmMsKGFlKCksTnkpKSwyMSkpLG8uaGYoKSYmKE09bmV3IEMzdCh0LG8uaGYoKSwxKSxwNnQoTSx1KEsobi5jLE55KSwyMSkpLHM9bmV3IFppdCh1dChvdChRdXQsMSksTWUsODEsMCxbXSkpLF9ydChzLE0pLGNuKHQuYyxvLmdmKCksbmV3IHlhKGQsTSkpKX1yZXR1cm4gdC5hfWZ1bmN0aW9uIHpsZSh0KXt2YXIgZTt0aGlzLmE9dCxlPShHbigpLHV0KG90KHJsdCwxKSxvZSwyNjcsMCxbcXMsY2EsSXMsVWMsUGwscTFdKSkubGVuZ3RoLHRoaXMuYj1aYihKaHQsW3JlLERrdF0sWzU5MywxNDZdLDAsW2UsZV0sMiksdGhpcy5jPVpiKEpodCxbcmUsRGt0XSxbNTkzLDE0Nl0sMCxbZSxlXSwyKSxocnQodGhpcyxxcywoeGUoKSxCdyksSjQpLFdfKHRoaXMscXMsY2EsRncsJDIpLGVEKHRoaXMscXMsVWMsRncpLGVEKHRoaXMscXMsSXMsRncpLFdfKHRoaXMscXMsUGwsQncsSjQpLGhydCh0aGlzLGNhLFRmLFo0KSxlRCh0aGlzLGNhLFVjLFRmKSxlRCh0aGlzLGNhLElzLFRmKSxXXyh0aGlzLGNhLFBsLEZ3LCQyKSxwVXQodGhpcyxVYyxUZiksZUQodGhpcyxVYyxJcyxUZiksZUQodGhpcyxVYyxQbCxuaHQpLHBVdCh0aGlzLElzLENTKSxXXyh0aGlzLElzLFBsLHdFLHZFKSxocnQodGhpcyxQbCxUZixUZiksaHJ0KHRoaXMscTEsVGYsWjQpLFdfKHRoaXMscTEscXMsRncsJDIpLFdfKHRoaXMscTEsUGwsRncsJDIpLFdfKHRoaXMscTEsY2EsRncsJDIpfWZ1bmN0aW9uIG0zbih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWjtpZihoPW4uYWsoKSxfdChoLDk5KSYmdShoLDE4KS5CYiZRYSYmKEI9dShuLmRkKCksNDkpLFc9WHAodC5lLEIpLFchPUIpKXtpZihfPVlkKGgsVyksZl8odCxlLExzdCh0LGUsXykpLE09bnVsbCxTbCh0LmUpJiYocj1UNCgoR3UoKSxTYSksdC5lLlRnKCksaCksciE9d24odC5lLlRnKCksdC5jKSkpe2ZvcihaPWh1KHQuZS5UZygpLGgpLGQ9MCxvPXUodC5nLDExOSksdz0wO3c8ZTsrK3cpcz1vW3ddLFoucmwocy5haygpKSYmKytkO009bmV3IE1ydCh0LmUsOSxyLEIsVyxkLCExKSxNLkVpKG5ldyBGMCh0LmUsOSx0LmMsbixfLGUsITEpKX1yZXR1cm4gRz11KGgsMTgpLHE9b28oRykscT8oTT1CLmloKHQuZSxlcyhCLlRnKCkscSksbnVsbCxNKSxNPXUoVyw0OSkuZ2godC5lLGVzKFcuVGcoKSxxKSxudWxsLE0pKTpHLkJiJnljJiYoaz0tMS1lcyh0LmUuVGcoKSxHKSxNPUIuaWgodC5lLGssbnVsbCxudWxsKSwhdShXLDQ5KS5laCgpJiYoTT11KFcsNDkpLmdoKHQuZSxrLG51bGwsTSkpKSxNJiZNLkZpKCksX31yZXR1cm4gbn1mdW5jdGlvbiB5M24odCl7dmFyIGUsbixyLHMsbyxoLGQsdztmb3Iobz1uZXcgUyh0LmEuYik7by5hPG8uYy5jLmxlbmd0aDspcz11KFEobyksODEpLHMuYi5jPXMuZy5jLHMuYi5kPXMuZy5kO2Zvcih3PW5ldyBSZShicyxicyksZT1uZXcgUmUoTnMsTnMpLHI9bmV3IFModC5hLmIpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShRKHIpLDgxKSx3LmE9Yi5NYXRoLm1pbih3LmEsbi5nLmMpLHcuYj1iLk1hdGgubWluKHcuYixuLmcuZCksZS5hPWIuTWF0aC5tYXgoZS5hLG4uZy5jK24uZy5iKSxlLmI9Yi5NYXRoLm1heChlLmIsbi5nLmQrbi5nLmEpO2ZvcihkPVlqKHQuYykuYS5uYygpO2QuT2IoKTspaD11KGQuUGIoKSw0Niksbj11KGguYiw4MSksdy5hPWIuTWF0aC5taW4ody5hLG4uZy5jKSx3LmI9Yi5NYXRoLm1pbih3LmIsbi5nLmQpLGUuYT1iLk1hdGgubWF4KGUuYSxuLmcuYytuLmcuYiksZS5iPWIuTWF0aC5tYXgoZS5iLG4uZy5kK24uZy5hKTt0LmQ9bWoobmV3IFJlKHcuYSx3LmIpKSx0LmU9ZmEobmV3IFJlKGUuYSxlLmIpLHcpLHQuYS5hLmM9TnQoUW4sTWUsMSwwLDUsMSksdC5hLmIuYz1OdChRbixNZSwxLDAsNSwxKX1mdW5jdGlvbiB4M24odCl7dmFyIGUsbixyO2ZvcihhNChDYix1dChvdChqNCwxKSxNZSwxMzAsMCxbbmV3IGtwXSkpLG49bmV3IHU2KHQpLHI9MDtyPG4uYS5sZW5ndGg7KytyKWU9WG0obixyKS5qZSgpLmEsdW4oZSwibGF5ZXJlZCIpP2E0KENiLHV0KG90KGo0LDEpLE1lLDEzMCwwLFtuZXcgS0pdKSk6dW4oZSwiZm9yY2UiKT9hNChDYix1dChvdChqNCwxKSxNZSwxMzAsMCxbbmV3IE5KXSkpOnVuKGUsInN0cmVzcyIpP2E0KENiLHV0KG90KGo0LDEpLE1lLDEzMCwwLFtuZXcgUEpdKSk6dW4oZSwibXJ0cmVlIik/YTQoQ2IsdXQob3QoajQsMSksTWUsMTMwLDAsW25ldyBNM10pKTp1bihlLCJyYWRpYWwiKT9hNChDYix1dChvdChqNCwxKSxNZSwxMzAsMCxbbmV3IHR0dF0pKTp1bihlLCJkaXNjbyIpP2E0KENiLHV0KG90KGo0LDEpLE1lLDEzMCwwLFtuZXcgVUwsbmV3IE9KXSkpOnVuKGUsInNwb3JlT3ZlcmxhcCIpfHx1bihlLCJzcG9yZUNvbXBhY3Rpb24iKT9hNChDYix1dChvdChqNCwxKSxNZSwxMzAsMCxbbmV3IEJCXSkpOnVuKGUsInJlY3RwYWNraW5nIikmJmE0KENiLHV0KG90KGo0LDEpLE1lLDEzMCwwLFtuZXcgakJdKSl9ZnVuY3Rpb24gcWxlKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxfLE0sQixxLEcsVyxaLGJ0O2lmKEI9bmV3IFNvKHQubyksYnQ9ZS5hL0IuYSxkPWUuYi9CLmIsVz1lLmEtQi5hLG89ZS5iLUIuYixuKWZvcihzPUd0KEsodCwoeGUoKSx3cykpKT09PUd0KCh2YSgpLEtjKSksRz1uZXcgUyh0LmopO0cuYTxHLmMuYy5sZW5ndGg7KXN3aXRjaChxPXUoUShHKSwxMSkscS5qLmcpe2Nhc2UgMTpzfHwocS5uLmEqPWJ0KTticmVhaztjYXNlIDI6cS5uLmErPVcsc3x8KHEubi5iKj1kKTticmVhaztjYXNlIDM6c3x8KHEubi5hKj1idCkscS5uLmIrPW87YnJlYWs7Y2FzZSA0OnN8fChxLm4uYio9ZCl9Zm9yKGs9bmV3IFModC5iKTtrLmE8ay5jLmMubGVuZ3RoOyl3PXUoUShrKSw3MCksXz13Lm4uYSt3Lm8uYS8yLE09dy5uLmIrdy5vLmIvMixaPV8vQi5hLGg9TS9CLmIsWitoPj0xJiYoWi1oPjAmJk0+PTA/KHcubi5hKz1XLHcubi5iKz1vKmgpOlotaDwwJiZfPj0wJiYody5uLmErPVcqWix3Lm4uYis9bykpO3Quby5hPWUuYSx0Lm8uYj1lLmIsZWUodCwoeGUoKSxSMiksKE5sKCkscj11KFdmKHRBKSw5KSxuZXcgb2gocix1KGZmKHIsci5sZW5ndGgpLDkpLDApKSl9ZnVuY3Rpb24gazNuKHQsZSxuLHIscyxvKXt2YXIgaDtpZighKGU9PW51bGx8fCFHaXQoZSxVQXQsV0F0KSkpdGhyb3cgbnQobmV3IFBuKCJpbnZhbGlkIHNjaGVtZTogIitlKSk7aWYoIXQmJiEobiE9bnVsbCYmdWQobixMdSgzNSkpPT0tMSYmbi5sZW5ndGg+MCYmKCRyKDAsbi5sZW5ndGgpLG4uY2hhckNvZGVBdCgwKSE9NDcpKSl0aHJvdyBudChuZXcgUG4oImludmFsaWQgb3BhcXVlUGFydDogIituKSk7aWYodCYmIShlIT1udWxsJiZwTShyVSxlLnRvTG93ZXJDYXNlKCkpKSYmIShuPT1udWxsfHwhR2l0KG4saUEsc0EpKSl0aHJvdyBudChuZXcgUG4oYzBlK24pKTtpZih0JiZlIT1udWxsJiZwTShyVSxlLnRvTG93ZXJDYXNlKCkpJiYhcGRuKG4pKXRocm93IG50KG5ldyBQbihjMGUrbikpO2lmKCFtbG4ocikpdGhyb3cgbnQobmV3IFBuKCJpbnZhbGlkIGRldmljZTogIityKSk7aWYoIWZ1bihzKSl0aHJvdyBoPXM9PW51bGw/ImludmFsaWQgc2VnbWVudHM6IG51bGwiOiJpbnZhbGlkIHNlZ21lbnQ6ICIrY3VuKHMpLG50KG5ldyBQbihoKSk7aWYoIShvPT1udWxsfHx1ZChvLEx1KDM1KSk9PS0xKSl0aHJvdyBudChuZXcgUG4oImludmFsaWQgcXVlcnk6ICIrbykpfWZ1bmN0aW9uIEUzbih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWixidDtmb3IobXIoZSwiQ2FsY3VsYXRlIEdyYXBoIFNpemUiLDEpLGUubiYmdCYmZ2YoZSxwZih0KSwoT2woKSx0aCkpLGQ9Tjcsdz1ONyxvPUZrdCxoPUZrdCxNPW5ldyBucigoIXQuYSYmKHQuYT1uZXcgaGUoZHMsdCwxMCwxMSkpLHQuYSkpO00uZSE9TS5pLmdjKCk7KWs9dShkcihNKSwzMyksRz1rLmksVz1rLmosYnQ9ay5nLHI9ay5mLHM9dSh6ZShrLChkaSgpLEtPKSksMTQyKSxkPWIuTWF0aC5taW4oZCxHLXMuYiksdz1iLk1hdGgubWluKHcsVy1zLmQpLG89Yi5NYXRoLm1heChvLEcrYnQrcy5jKSxoPWIuTWF0aC5tYXgoaCxXK3Ircy5hKTtmb3IocT11KHplKHQsKGRpKCksVjIpKSwxMTYpLEI9bmV3IFJlKGQtcS5iLHctcS5kKSxfPW5ldyBucigoIXQuYSYmKHQuYT1uZXcgaGUoZHMsdCwxMCwxMSkpLHQuYSkpO18uZSE9Xy5pLmdjKCk7KWs9dShkcihfKSwzMyksQ3UoayxrLmktQi5hKSxTdShrLGsuai1CLmIpO1o9by1kKyhxLmIrcS5jKSxuPWgtdysocS5kK3EuYSksUXYodCxaKSxYdih0LG4pLGUubiYmdCYmZ2YoZSxwZih0KSwoT2woKSx0aCkpfWZ1bmN0aW9uIEhsZSh0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssXztmb3Iocj1uZXcgbGUsaD1uZXcgUyh0LmUuYSk7aC5hPGguYy5jLmxlbmd0aDspe2ZvcihzPXUoUShoKSwxMjEpLF89MCxzLmsuYz1OdChRbixNZSwxLDAsNSwxKSxuPW5ldyBTKGM0KHMpKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoUShuKSwyMTMpLGUuZiYmKHVlKHMuayxlKSwrK18pO189PTEmJihyLmNbci5jLmxlbmd0aF09cyl9Zm9yKG89bmV3IFMocik7by5hPG8uYy5jLmxlbmd0aDspZm9yKHM9dShRKG8pLDEyMSk7cy5rLmMubGVuZ3RoPT0xOyl7Zm9yKGs9dShRKG5ldyBTKHMuaykpLDIxMyksdC5iW2suY109ay5nLGQ9ay5kLHc9ay5lLG49bmV3IFMoYzQocykpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShRKG4pLDIxMyksU2koZSxrKXx8KGUuZj9kPT1lLmR8fHc9PWUuZT90LmJbay5jXS09dC5iW2UuY10tZS5nOnQuYltrLmNdKz10LmJbZS5jXS1lLmc6cz09ZD9lLmQ9PXM/dC5iW2suY10rPWUuZzp0LmJbay5jXS09ZS5nOmUuZD09cz90LmJbay5jXS09ZS5nOnQuYltrLmNdKz1lLmcpO0V1KGQuayxrKSxFdSh3LmssayksZD09cz9zPWsuZTpzPWsuZH19ZnVuY3Rpb24gZDZ0KHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxfLE0sQixxLEc7aWYoZT09bnVsbHx8ZS5sZW5ndGg9PTApcmV0dXJuIG51bGw7aWYobz11KGpjKHQuZixlKSwyMyksIW8pe2ZvcihzPShxPW5ldyBtMSh0LmQpLmEudmMoKS5LYygpLG5ldyB5MShxKSk7cy5hLk9iKCk7KWlmKG49KGg9dShzLmEuUGIoKSw0MiksdShoLmRkKCksMjMpKSxkPW4uZixHPWUubGVuZ3RoLHVuKGQuc3Vic3RyKGQubGVuZ3RoLUcsRyksZSkmJihlLmxlbmd0aD09ZC5sZW5ndGh8fFRhKGQsZC5sZW5ndGgtZS5sZW5ndGgtMSk9PTQ2KSl7aWYobylyZXR1cm4gbnVsbDtvPW59aWYoIW8pe2ZvcihyPShCPW5ldyBtMSh0LmQpLmEudmMoKS5LYygpLG5ldyB5MShCKSk7ci5hLk9iKCk7KWlmKG49KGg9dShyLmEuUGIoKSw0MiksdShoLmRkKCksMjMpKSxNPW4uZyxNIT1udWxsKXtmb3Iodz1NLGs9MCxfPXcubGVuZ3RoO2s8XzsrK2spaWYoZD13W2tdLEc9ZS5sZW5ndGgsdW4oZC5zdWJzdHIoZC5sZW5ndGgtRyxHKSxlKSYmKGUubGVuZ3RoPT1kLmxlbmd0aHx8VGEoZCxkLmxlbmd0aC1lLmxlbmd0aC0xKT09NDYpKXtpZihvKXJldHVybiBudWxsO289bn19fW8mJkFvKHQuZixlLG8pfXJldHVybiBvfWZ1bmN0aW9uIFQzbih0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKG49bmV3IExtLGg9ITEsbz0wO288ZS5sZW5ndGg7bysrKXtpZihyPSgkcihvLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQobykpLHI9PTMyKXtmb3IoUnoodCxuLDApLG4uYSs9IiAiLFJ6KHQsbiwwKTtvKzE8ZS5sZW5ndGgmJigkcihvKzEsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChvKzEpPT0zMik7KSsrbztjb250aW51ZX1pZihoKXtyPT0zOT9vKzE8ZS5sZW5ndGgmJigkcihvKzEsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChvKzEpPT0zOSk/KG4uYSs9U3RyaW5nLmZyb21DaGFyQ29kZShyKSwrK28pOmg9ITE6bi5hKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHIpO2NvbnRpbnVlfWlmKHVkKCJHeU1MZGtIbXNTRWNEYWhLelp2IixMdShyKSk+MCl7UnoodCxuLDApLG4uYSs9U3RyaW5nLmZyb21DaGFyQ29kZShyKSxzPWNobihlLG8pLFJ6KHQsbixzKSxvKz1zLTE7Y29udGludWV9cj09Mzk/bysxPGUubGVuZ3RoJiYoJHIobysxLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQobysxKT09MzkpPyhuLmErPSInIiwrK28pOmg9ITA6bi5hKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHIpfVJ6KHQsbiwwKSxqZG4odCl9ZnVuY3Rpb24gXzNuKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxfLE0sQixxLEcsVyxaLGJ0O2lmKG1yKG4sIk5ldHdvcmsgc2ltcGxleCBsYXllcmluZyIsMSksdC5iPWUsYnQ9dShLKGUsKHhlKCksU1MpKSwxOSkuYSo0LFo9dC5iLmEsWi5jLmxlbmd0aDwxKXtvcihuKTtyZXR1cm59Zm9yKG89X3duKHQsWiksVz1udWxsLHM9c2kobywwKTtzLmIhPXMuZC5jOyl7Zm9yKHI9dShpaShzKSwxNSksZD1idCpDcyhiLk1hdGguc3FydChyLmdjKCkpKSxoPXF3bihyKSxsYXQoWHB0KFJLZShRcHQoeG50KGgpLGQpLFcpLCEwKSx6YyhuLDEpKSxCPXQuYi5iLEc9bmV3IFMoaC5hKTtHLmE8Ry5jLmMubGVuZ3RoOyl7Zm9yKHE9dShRKEcpLDEyMSk7Qi5jLmxlbmd0aDw9cS5lOykkbShCLEIuYy5sZW5ndGgsbmV3IExoKHQuYikpO189dShxLmYsMTApLExvKF8sdShQZShCLHEuZSksMjkpKX1pZihvLmI+MSlmb3IoVz1OdChTcixKciwyNSx0LmIuYi5jLmxlbmd0aCwxNSwxKSxNPTAsaz1uZXcgUyh0LmIuYik7ay5hPGsuYy5jLmxlbmd0aDspdz11KFEoayksMjkpLFdbTSsrXT13LmEuYy5sZW5ndGh9Wi5jPU50KFFuLE1lLDEsMCw1LDEpLHQuYT1udWxsLHQuYj1udWxsLHQuYz1udWxsLG9yKG4pfWZ1bmN0aW9uIFZsZSh0KXt2YXIgZSxuLHIscyxvLGgsZDtmb3IoZT0wLG89bmV3IFModC5iLmEpO28uYTxvLmMuYy5sZW5ndGg7KXI9dShRKG8pLDE4OSksci5iPTAsci5jPTA7Zm9yKExhZSh0LDApLFVpdCh0LHQuZyksdXEodC5jKSxHcHQodC5jKSxuPShmbygpLEhoKSxtSShHZXQoXzQobUkoR2V0KF80KG1JKF80KHQuYyxuKSksS3JlKG4pKSkpLG4pKSksXzQodC5jLEhoKSxqaXQodCx0LmcpLHZhZSh0LDApLEVsZSh0LDApLGNjZSh0LDEpLExhZSh0LDEpLFVpdCh0LHQuZCksdXEodC5jKSxoPW5ldyBTKHQuYi5hKTtoLmE8aC5jLmMubGVuZ3RoOylyPXUoUShoKSwxODkpLGUrPWIuTWF0aC5hYnMoci5jKTtmb3IoZD1uZXcgUyh0LmIuYSk7ZC5hPGQuYy5jLmxlbmd0aDspcj11KFEoZCksMTg5KSxyLmI9MCxyLmM9MDtmb3Iobj1aMCxtSShHZXQoXzQobUkoR2V0KF80KG1JKEdwdChfNCh0LmMsbikpKSxLcmUobikpKSksbikpKSxfNCh0LmMsSGgpLGppdCh0LHQuZCksdmFlKHQsMSksRWxlKHQsMSksY2NlKHQsMCksR3B0KHQuYykscz1uZXcgUyh0LmIuYSk7cy5hPHMuYy5jLmxlbmd0aDspcj11KFEocyksMTg5KSxlKz1iLk1hdGguYWJzKHIuYyk7cmV0dXJuIGV9ZnVuY3Rpb24gR2xlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxfO2lmKGs9ZSwhKGsuYj09bnVsbHx8dC5iPT1udWxsKSl7Zm9yKHY0KHQpLFRDKHQpLHY0KGspLFRDKGspLG49TnQoU3IsSnIsMjUsdC5iLmxlbmd0aCtrLmIubGVuZ3RoLDE1LDEpLF89MCxyPTAsaD0wO3I8dC5iLmxlbmd0aCYmaDxrLmIubGVuZ3RoOylpZihzPXQuYltyXSxvPXQuYltyKzFdLGQ9ay5iW2hdLHc9ay5iW2grMV0sbzxkKXIrPTI7ZWxzZSBpZihvPj1kJiZzPD13KWQ8PXMmJm88PXc/KG5bXysrXT1zLG5bXysrXT1vLHIrPTIpOmQ8PXM/KG5bXysrXT1zLG5bXysrXT13LHQuYltyXT13KzEsaCs9Mik6bzw9dz8obltfKytdPWQsbltfKytdPW8scis9Mik6KG5bXysrXT1kLG5bXysrXT13LHQuYltyXT13KzEpO2Vsc2UgaWYodzxzKWgrPTI7ZWxzZSB0aHJvdyBudChuZXcgWm8oIlRva2VuI2ludGVyc2VjdFJhbmdlcygpOiBJbnRlcm5hbCBFcnJvcjogWyIrdC5iW3JdKyIsIit0LmJbcisxXSsiXSAmIFsiK2suYltoXSsiLCIray5iW2grMV0rIl0iKSk7Zm9yKDtyPHQuYi5sZW5ndGg7KW5bXysrXT10LmJbcisrXSxuW18rK109dC5iW3IrK107dC5iPU50KFNyLEpyLDI1LF8sMTUsMSksUGMobiwwLHQuYiwwLF8pfX1mdW5jdGlvbiBDM24odCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKGU9bmV3IGxlLHQuZz1uZXcgbGUsdC5kPW5ldyBsZSxoPW5ldyBkMihuZXcga2codC5mLmIpLmEpO2guYjspbz1ZdihoKSx1ZShlLHUodShvLmRkKCksNDYpLmIsODEpKSxQcCh1KG8uY2QoKSw1OTQpLmdmKCkpP3VlKHQuZCx1KG8uZGQoKSw0NikpOnVlKHQuZyx1KG8uZGQoKSw0NikpO2ZvcihVaXQodCx0LmQpLFVpdCh0LHQuZyksdC5jPW5ldyBTb2UodC5iKSwkS2UodC5jLChsYnQoKSxtYmUpKSxqaXQodCx0LmQpLGppdCh0LHQuZyksUnMoZSx0LmMuYS5iKSx0LmU9bmV3IFJlKGJzLGJzKSx0LmE9bmV3IFJlKE5zLE5zKSxyPW5ldyBTKGUpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShRKHIpLDgxKSx0LmUuYT1iLk1hdGgubWluKHQuZS5hLG4uZy5jKSx0LmUuYj1iLk1hdGgubWluKHQuZS5iLG4uZy5kKSx0LmEuYT1iLk1hdGgubWF4KHQuYS5hLG4uZy5jK24uZy5iKSx0LmEuYj1iLk1hdGgubWF4KHQuYS5iLG4uZy5kK24uZy5hKTtKcHQodC5jLG5ldyBCZCksZD0wO2RvIHM9VmxlKHQpLCsrZDt3aGlsZSgoZDwyfHxzPnJiKSYmZDwxMCk7SnB0KHQuYyxuZXcgRTMpLFZsZSh0KSxmZW4odC5jKSx5M24odC5mKX1mdW5jdGlvbiBTM24odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFo7aWYoQmUoRmUoSyhuLCh4ZSgpLCR5KSkpKSlmb3IoZD1uZXcgUyhuLmopO2QuYTxkLmMuYy5sZW5ndGg7KWZvcihoPXUoUShkKSwxMSksQj1wZChoLmcpLGs9QixfPTAsTT1rLmxlbmd0aDtfPE07KytfKXc9a1tfXSxvPXcuZC5pPT1uLHM9byYmQmUoRmUoSyh3LEIyKSkpLHMmJihHPXcuYyxxPXUodHIodC5iLEcpLDEwKSxxfHwocT1USShHLCh2YSgpLFUxKSxHLmosLTEsbnVsbCxudWxsLEcubyx1KEsoZSxYbCksMTAzKSxlKSxlZShxLChhZSgpLElpKSxHKSxBaSh0LmIsRyxxKSx1ZShlLmEscSkpLFo9dy5kLFc9dSh0cih0LmIsWiksMTApLFd8fChXPVRJKFosKHZhKCksVTEpLFouaiwxLG51bGwsbnVsbCxaLm8sdShLKGUsWGwpLDEwMyksZSksZWUoVywoYWUoKSxJaSksWiksQWkodC5iLFosVyksdWUoZS5hLFcpKSxyPUZydCh3KSxCYShyLHUoUGUocS5qLDApLDExKSkscGEocix1KFBlKFcuaiwwKSwxMSkpLGNuKHQuYSx3LG5ldyBUaihyLGUsKGhvKCksc3UpKSksdShLKGUsKGFlKCksV2MpKSwyMSkuRmMoKGdvKCkseWgpKSl9ZnVuY3Rpb24gQTNuKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxfLE0sQixxLEc7Zm9yKG1yKG4sIkxhYmVsIGR1bW15IHN3aXRjaGluZyIsMSkscj11KEsoZSwoeGUoKSxRVikpLDIyNyksJG9uKGUpLHM9eWJuKGUsciksdC5hPU50KGdhLFRvLDI1LGUuYi5jLmxlbmd0aCwxNSwxKSxkPShyeCgpLHV0KG90KGFFLDEpLG9lLDIyNywwLFtzRSxkUyxpRSxPeSxWNCxINF0pKSxfPTAscT1kLmxlbmd0aDtfPHE7KytfKWlmKG89ZFtfXSwobz09VjR8fG89PUg0fHxvPT1PeSkmJiF1KHp1KHMuYSxvKT9zLmJbby5nXTpudWxsLDE1KS5kYygpKXtRb24odCxlKTticmVha31mb3Iodz11dChvdChhRSwxKSxvZSwyMjcsMCxbc0UsZFMsaUUsT3ksVjQsSDRdKSxNPTAsRz13Lmxlbmd0aDtNPEc7KytNKW89d1tNXSxvPT1WNHx8bz09SDR8fG89PU95fHxOdWUodCx1KHp1KHMuYSxvKT9zLmJbby5nXTpudWxsLDE1KSk7Zm9yKGg9dXQob3QoYUUsMSksb2UsMjI3LDAsW3NFLGRTLGlFLE95LFY0LEg0XSksaz0wLEI9aC5sZW5ndGg7azxCOysraylvPWhba10sKG89PVY0fHxvPT1INHx8bz09T3kpJiZOdWUodCx1KHp1KHMuYSxvKT9zLmJbby5nXTpudWxsLDE1KSk7dC5hPW51bGwsb3Iobil9ZnVuY3Rpb24gTDNuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxfLE0sQjtzd2l0Y2godC5rLmcpe2Nhc2UgMTppZihyPXUoSyh0LChhZSgpLElpKSksMTcpLG49dShLKHIsWDl0KSw3NCksbj9CZShGZShLKHIsSDEpKSkmJihuPUJEKG4pKTpuPW5ldyBqdSxrPXUoSyh0LGExKSwxMSksayl7aWYoXz1uYyh1dChvdChuYSwxKSxyZSw4LDAsW2suaS5uLGsubixrLmFdKSksZTw9Xy5hKXJldHVybiBfLmI7a3MobixfLG4uYSxuLmEuYSl9aWYoTT11KEsodCxxaCksMTEpLE0pe2lmKEI9bmModXQob3QobmEsMSkscmUsOCwwLFtNLmkubixNLm4sTS5hXSkpLEIuYTw9ZSlyZXR1cm4gQi5iO2tzKG4sQixuLmMuYixuLmMpfWlmKG4uYj49Mil7Zm9yKHc9c2kobiwwKSxoPXUoaWkodyksOCksZD11KGlpKHcpLDgpO2QuYTxlJiZ3LmIhPXcuZC5jOyloPWQsZD11KGlpKHcpLDgpO3JldHVybiBoLmIrKGUtaC5hKS8oZC5hLWguYSkqKGQuYi1oLmIpfWJyZWFrO2Nhc2UgMzpzd2l0Y2gobz11KEsodShQZSh0LmosMCksMTEpLChhZSgpLElpKSksMTEpLHM9by5pLG8uai5nKXtjYXNlIDE6cmV0dXJuIHMubi5iO2Nhc2UgMzpyZXR1cm4gcy5uLmIrcy5vLmJ9fXJldHVybiBhNHQodCkuYn1mdW5jdGlvbiBNM24odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLF8sTTtmb3IoaD1uZXcgUyh0LmQuYik7aC5hPGguYy5jLmxlbmd0aDspZm9yKG89dShRKGgpLDI5KSx3PW5ldyBTKG8uYSk7dy5hPHcuYy5jLmxlbmd0aDspe2lmKGQ9dShRKHcpLDEwKSxCZShGZShLKGQsKHhlKCksa1MpKSkpJiYhXzgoejAoZCkpKXtyPXUoTG5uKHowKGQpKSwxNyksXz1yLmMuaSxfPT1kJiYoXz1yLmQuaSksTT1uZXcgeWEoXyxmYSh1YyhkLm4pLF8ubikpLEFpKHQuYixkLE0pO2NvbnRpbnVlfXM9bmV3IGNoKGQubi5hLWQuZC5iLGQubi5iLWQuZC5kLGQuby5hK2QuZC5iK2QuZC5jLGQuby5iK2QuZC5kK2QuZC5hKSxlPXRXdChnVnQoZlZ0KGRWdChuZXcgTHB0LGQpLHMpLFdiZSksdC5hKSxKVXQoZFllKERlZShuZXcgQXB0LHV0KG90KFhILDEpLE1lLDU3LDAsW2VdKSksZSksdC5hKSxrPW5ldyBWdHQsQWkodC5lLGUsayksbj1OMChuZXcgYXIobHIoVW8oZCkuYS5LYygpLG5ldyBIKSkpLU4wKG5ldyBhcihscigkcyhkKS5hLktjKCksbmV3IEgpKSksbjwwP1BEKGssITAsKGZvKCksSGgpKTpuPjAmJlBEKGssITAsKGZvKCksX2YpKSxkLms9PShHbigpLElzKSYmdlh0KGspLEFpKHQuZixkLGUpfX1mdW5jdGlvbiBEM24odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLF8sTSxCO3N3aXRjaChtcihuLCJOb2RlIHByb21vdGlvbiBoZXVyaXN0aWMiLDEpLHQuZz1lLEI0bih0KSx0LnE9dShLKGUsKHhlKCksWmx0KSksMjYwKSxfPXUoSyh0LmcsUVR0KSwxOSkuYSxvPW5ldyBpRix0LnEuZyl7Y2FzZSAyOmNhc2UgMTprNyh0LG8pO2JyZWFrO2Nhc2UgMzpmb3IodC5xPShtNCgpLGZHKSxrNyh0LG8pLHc9MCxkPW5ldyBTKHQuYSk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KFEoZCksMTkpLHc9Yi5NYXRoLm1heCh3LGguYSk7dz50LmomJih0LnE9TU8sazcodCxvKSk7YnJlYWs7Y2FzZSA0OmZvcih0LnE9KG00KCksZkcpLGs3KHQsbyksaz0wLHM9bmV3IFModC5iKTtzLmE8cy5jLmMubGVuZ3RoOylyPXZlKFEocykpLGs9Yi5NYXRoLm1heChrLChJbihyKSxyKSk7az50LmsmJih0LnE9RE8sazcodCxvKSk7YnJlYWs7Y2FzZSA2OkI9Q3MoYi5NYXRoLmNlaWwodC5mLmxlbmd0aCpfLzEwMCkpLGs3KHQsbmV3IFRwKEIpKTticmVhaztjYXNlIDU6TT1DcyhiLk1hdGguY2VpbCh0LmQqXy8xMDApKSxrNyh0LG5ldyBVZihNKSk7YnJlYWs7ZGVmYXVsdDprNyh0LG8pfVR2bih0LGUpLG9yKG4pfWZ1bmN0aW9uIFVsZSh0LGUsbil7dmFyIHIscyxvLGg7dGhpcy5qPXQsdGhpcy5lPWI0dCh0KSx0aGlzLm89dGhpcy5qLmUsdGhpcy5pPSEhdGhpcy5vLHRoaXMucD10aGlzLmk/dShQZShuLCRhKHRoaXMubykucCksMjE0KTpudWxsLHM9dShLKHQsKGFlKCksV2MpKSwyMSksdGhpcy5nPXMuSGMoKGdvKCkseWgpKSx0aGlzLmI9bmV3IGxlLHRoaXMuZD1uZXcgZ2llKHRoaXMuZSksaD11KEsodGhpcy5qLEl4KSwyMzApLHRoaXMucT11Y24oZSxoLHRoaXMuZSksdGhpcy5rPW5ldyBwUXQodGhpcyksbz1MMSh1dChvdChZYmUsMSksTWUsMjI1LDAsW3RoaXMsdGhpcy5kLHRoaXMuayx0aGlzLnFdKSksZT09KFp2KCksT08pJiYhQmUoRmUoSyh0LCh4ZSgpLEJ5KSkpKT8ocj1uZXcgdzR0KHRoaXMuZSksby5jW28uYy5sZW5ndGhdPXIsdGhpcy5jPW5ldyBXd3QocixoLHUodGhpcy5xLDQwMikpKTplPT1PTyYmQmUoRmUoSyh0LCh4ZSgpLEJ5KSkpKT8ocj1uZXcgdzR0KHRoaXMuZSksby5jW28uYy5sZW5ndGhdPXIsdGhpcy5jPW5ldyBRZWUocixoLHUodGhpcy5xLDQwMikpKTp0aGlzLmM9bmV3IFlWdChlLHRoaXMpLHVlKG8sdGhpcy5jKSxTbGUobyx0aGlzLmUpLHRoaXMucz1kNW4odGhpcy5rKX1mdW5jdGlvbiBJM24odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFosYnQsTXQsU3QsanQ7Zm9yKE09dShsaigoaD1zaShuZXcgU3AoZSkuYS5kLDApLG5ldyBwNihoKSkpLDg2KSxHPU0/dShLKE0sKG1jKCksTGh0KSksODYpOm51bGwscz0xO00mJkc7KXtmb3Iodz0wLGp0PTAsbj1NLHI9RyxkPTA7ZDxzO2QrKyluPUhydChuKSxyPUhydChyKSxqdCs9WnQodmUoSyhuLChtYygpLHlFKSkpKSx3Kz1adCh2ZShLKHIseUUpKSk7aWYoU3Q9WnQodmUoSyhHLChtYygpLEpnKSkpKSxNdD1adCh2ZShLKE0sSmcpKSksQj1zbXQoTSxHKSxxPVN0K3crdC5hK0ItTXQtanQsMDxxKXtmb3Ioaz1lLF89MDtrJiZrIT1yOykrK18saz11KEsoayx5RyksODYpO2lmKGspZm9yKGJ0PXEvXyxrPWU7ayE9cjspWj1adCh2ZShLKGssSmcpKSkrcSxlZShrLEpnLFopLFc9WnQodmUoSyhrLHlFKSkpK3EsZWUoayx5RSxXKSxxLT1idCxrPXUoSyhrLHlHKSw4Nik7ZWxzZSByZXR1cm59KytzLE0uZC5iPT0wP009VTV0KG5ldyBTcChlKSxzKTpNPXUobGooKG89c2kobmV3IFNwKE0pLmEuZCwwKSxuZXcgcDYobykpKSw4NiksRz1NP3UoSyhNLExodCksODYpOm51bGx9fWZ1bmN0aW9uIFdsZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXyxNO2Zvcih3PSEwLHM9MCxrPXQuZltlLnBdLF89ZS5vLmIrdC5uLG49dC5jW2UucF1bMl0sbGgodC5hLGssZGUodShQZSh0LmEsayksMTkpLmEtMStuKSksbGgodC5iLGssWnQodmUoUGUodC5iLGspKSktXytuKnQuZSksKytrLGs+PXQuaT8oKyt0LmksdWUodC5hLGRlKDEpKSx1ZSh0LmIsXykpOihyPXQuY1tlLnBdWzFdLGxoKHQuYSxrLGRlKHUoUGUodC5hLGspLDE5KS5hKzEtcikpLGxoKHQuYixrLFp0KHZlKFBlKHQuYixrKSkpK18tcip0LmUpKSwodC5xPT0obTQoKSxNTykmJih1KFBlKHQuYSxrKSwxOSkuYT50Lmp8fHUoUGUodC5hLGstMSksMTkpLmE+dC5qKXx8dC5xPT1ETyYmKFp0KHZlKFBlKHQuYixrKSkpPnQua3x8WnQodmUoUGUodC5iLGstMSkpKT50LmspKSYmKHc9ITEpLGg9bmV3IGFyKGxyKFVvKGUpLmEuS2MoKSxuZXcgSCkpO1ZyKGgpOylvPXUoSXIoaCksMTcpLGQ9by5jLmksdC5mW2QucF09PWsmJihNPVdsZSh0LGQpLHM9cyt1KE0uYSwxOSkuYSx3PXcmJkJlKEZlKE0uYikpKTtyZXR1cm4gdC5mW2UucF09ayxzPXMrdC5jW2UucF1bMF0sbmV3IHlhKGRlKHMpLChGbigpLCEhdykpfWZ1bmN0aW9uIGc2dCh0LGUsbixyLHMpe3ZhciBvLGgsZCx3LGssXyxNLEIscSxHLFcsWixidDtmb3IoTT1uZXcgQXIsaD1uZXcgbGUscG9lKHQsbix0LmQuZmcoKSxoLE0pLHBvZSh0LHIsdC5kLmdnKCksaCxNKSx0LmI9LjIqKFc9aWNlKGVjKG5ldyBrbihudWxsLG5ldyBUbihoLDE2KSksbmV3IFVRKSksWj1pY2UoZWMobmV3IGtuKG51bGwsbmV3IFRuKGgsMTYpKSxuZXcgV1EpKSxiLk1hdGgubWluKFcsWikpLG89MCxkPTA7ZDxoLmMubGVuZ3RoLTE7ZCsrKWZvcih3PShTbihkLGguYy5sZW5ndGgpLHUoaC5jW2RdLDExMikpLEc9ZCsxO0c8aC5jLmxlbmd0aDtHKyspbys9bzZ0KHQsdywoU24oRyxoLmMubGVuZ3RoKSx1KGguY1tHXSwxMTIpKSk7Zm9yKEI9dShLKGUsKGFlKCksSXgpKSwyMzApLG8+PTImJihidD1DY2UoaCwhMCxCKSwhdC5lJiYodC5lPW5ldyBNJHQodCkpLGxobih0LmUsYnQsaCx0LmIpKSxhYWUoaCxCKSxLM24oaCkscT0tMSxfPW5ldyBTKGgpO18uYTxfLmMuYy5sZW5ndGg7KWs9dShRKF8pLDExMiksIShiLk1hdGguYWJzKGsucy1rLmMpPHhkKSYmKHE9Yi5NYXRoLm1heChxLGsubyksdC5kLmRnKGsscyx0LmMpKTtyZXR1cm4gdC5kLmEuYS4kYigpLHErMX1mdW5jdGlvbiBLbGUodCxlKXt2YXIgbixyLHMsbyxoO249WnQodmUoSyhlLCh4ZSgpLFRmKSkpKSxuPDImJmVlKGUsVGYsMikscj11KEsoZSxYbCksMTAzKSxyPT0oZm8oKSxjMCkmJmVlKGUsWGwsRXooZSkpLHM9dShLKGUsTndlKSwxOSkscy5hPT0wP2VlKGUsKGFlKCksSXgpLG5ldyBIaXQpOmVlKGUsKGFlKCksSXgpLG5ldyBUJChzLmEpKSxvPUZlKEsoZSxUUykpLG89PW51bGwmJmVlKGUsVFMsKEZuKCksR3QoSyhlLFgwKSk9PT1HdCgocTAoKSxDRSkpKSkseXMobmV3IGtuKG51bGwsbmV3IFRuKGUuYSwxNikpLG5ldyBfcyh0KSkseXMoZWMobmV3IGtuKG51bGwsbmV3IFRuKGUuYiwxNikpLG5ldyBNOSksbmV3IFppKHQpKSxoPW5ldyB6bGUoZSksZWUoZSwoYWUoKSxYNCksaCksdyQodC5hKSxVZCh0LmEsKFlhKCksTGQpLHUoSyhlLFJ5KSwyNDYpKSxVZCh0LmEsZmIsdShLKGUsWlR0KSwyNDYpKSxVZCh0LmEsZnUsdShLKGUsRVMpLDI0NikpLFVkKHQuYSxHYyx1KEsoZSxyRyksMjQ2KSksVWQodC5hLGpvLGFjbih1KEsoZSxYMCksMjE4KSkpLHNVdCh0LmEsQzVuKGUpKSxlZShlLCRsdCxUcSh0LmEsZSkpfWZ1bmN0aW9uIE8zbih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWixidCxNdCxTdCxqdCxRdCxjZTtyZXR1cm4gQj10LmNbZV0scT10LmNbbl0sRz11KEsoQiwoYWUoKSxNeCkpLDE1KSwhIUcmJkcuZ2MoKSE9MCYmRy5IYyhxKXx8KFc9Qi5rIT0oR24oKSxjYSkmJnEuayE9Y2EsWj11KEsoQixEdyksMTApLGJ0PXUoSyhxLER3KSwxMCksTXQ9WiE9YnQsU3Q9ISFaJiZaIT1CfHwhIWJ0JiZidCE9cSxqdD1nc3QoQiwoYmUoKSxPbikpLFF0PWdzdChxLHlyKSxTdD1TdHwoZ3N0KEIseXIpfHxnc3QocSxPbikpLGNlPVN0JiZNdHx8anR8fFF0LFcmJmNlKXx8Qi5rPT0oR24oKSxVYykmJnEuaz09cXN8fHEuaz09KEduKCksVWMpJiZCLms9PXFzPyExOihfPXQuY1tlXSxvPXQuY1tuXSxzPUdzZSh0LmUsXyxvLChiZSgpLEJuKSksdz1Hc2UodC5pLF8sbyxIbiksXzJuKHQuZixfLG8pLGs9Z3JlKHQuYixfLG8pK3Uocy5hLDE5KS5hK3Uody5hLDE5KS5hK3QuZi5kLGQ9Z3JlKHQuYixvLF8pK3Uocy5iLDE5KS5hK3Uody5iLDE5KS5hK3QuZi5iLHQuYSYmKE09dShLKF8sSWkpLDExKSxoPXUoSyhvLElpKSwxMSkscj1Mc2UodC5nLE0saCksays9dShyLmEsMTkpLmEsZCs9dShyLmIsMTkpLmEpLGs+ZCl9ZnVuY3Rpb24gTjNuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxfLE0sQixxLEcsVztmb3Iobj11KEsodCwoeGUoKSx3cykpLDk4KSxoPXQuZixvPXQuZCxkPWguYStvLmIrby5jLHc9MC1vLmQtdC5jLmIsXz1oLmIrby5kK28uYS10LmMuYixrPW5ldyBsZSxNPW5ldyBsZSxzPW5ldyBTKGUpO3MuYTxzLmMuYy5sZW5ndGg7KXtzd2l0Y2gocj11KFEocyksMTApLG4uZyl7Y2FzZSAxOmNhc2UgMjpjYXNlIDM6STJuKHIpO2JyZWFrO2Nhc2UgNDpCPXUoSyhyLFB3KSw4KSxxPUI/Qi5hOjAsci5uLmE9ZCpadCh2ZShLKHIsKGFlKCksSXcpKSkpLXEsZnoociwhMCwhMSk7YnJlYWs7Y2FzZSA1Okc9dShLKHIsUHcpLDgpLFc9Rz9HLmE6MCxyLm4uYT1adCh2ZShLKHIsKGFlKCksSXcpKSkpLVcsZnoociwhMCwhMSksaC5hPWIuTWF0aC5tYXgoaC5hLHIubi5hK3Iuby5hLzIpfXN3aXRjaCh1KEsociwoYWUoKSxnYykpLDYxKS5nKXtjYXNlIDE6ci5uLmI9dyxrLmNbay5jLmxlbmd0aF09cjticmVhaztjYXNlIDM6ci5uLmI9XyxNLmNbTS5jLmxlbmd0aF09cn19c3dpdGNoKG4uZyl7Y2FzZSAxOmNhc2UgMjpqcmUoayx0KSxqcmUoTSx0KTticmVhaztjYXNlIDM6JHJlKGssdCksJHJlKE0sdCl9fWZ1bmN0aW9uIFAzbih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXyxNO2ZvcihfPW5ldyBsZSxNPW5ldyBGMyxvPW51bGwscz0wLHI9MDtyPGUubGVuZ3RoOysrcilzd2l0Y2gobj1lW3JdLHR1bihvLG4pJiYocz1tM3QodCxNLF8sZ0cscykpLGVhKG4sKGFlKCksRHcpKSYmKG89dShLKG4sRHcpLDEwKSksbi5rLmcpe2Nhc2UgMDpmb3Iodz1lMnQoSTYocmMobiwoYmUoKSxPbikpLG5ldyBCRikpO29pdCh3KTspaD11KEFtdCh3KSwxMSksdC5kW2gucF09cysrLF8uY1tfLmMubGVuZ3RoXT1oO2ZvcihzPW0zdCh0LE0sXyxnRyxzKSxrPWUydChJNihyYyhuLHlyKSxuZXcgQkYpKTtvaXQoayk7KWg9dShBbXQoayksMTEpLHQuZFtoLnBdPXMrKyxfLmNbXy5jLmxlbmd0aF09aDticmVhaztjYXNlIDM6cmMobixXX3QpLmRjKCl8fChoPXUocmMobixXX3QpLlhiKDApLDExKSx0LmRbaC5wXT1zKyssXy5jW18uYy5sZW5ndGhdPWgpLHJjKG4sZ0cpLmRjKCl8fFZwKE0sbik7YnJlYWs7Y2FzZSAxOmZvcihkPXJjKG4sKGJlKCksQm4pKS5LYygpO2QuT2IoKTspaD11KGQuUGIoKSwxMSksdC5kW2gucF09cysrLF8uY1tfLmMubGVuZ3RoXT1oO3JjKG4sSG4pLkpjKG5ldyBYVnQoTSxuKSl9cmV0dXJuIG0zdCh0LE0sXyxnRyxzKSxffWZ1bmN0aW9uIFlsZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWixidCxNdDtmb3Ioaz1icyxfPWJzLGQ9TnMsdz1OcyxCPW5ldyBTKGUuaSk7Qi5hPEIuYy5jLmxlbmd0aDspTT11KFEoQiksNjUpLHM9dSh1KHRyKHQuZyxNLmEpLDQ2KS5iLDMzKSxrMShzLE0uYi5jLE0uYi5kKSxrPWIuTWF0aC5taW4oayxzLmkpLF89Yi5NYXRoLm1pbihfLHMuaiksZD1iLk1hdGgubWF4KGQscy5pK3MuZyksdz1iLk1hdGgubWF4KHcscy5qK3MuZik7Zm9yKHE9dSh6ZSh0LmMsKHJJKCksbDNlKSksMTE2KSxndyh0LmMsZC1rKyhxLmIrcS5jKSx3LV8rKHEuZCtxLmEpLCEwLCEwKSxfNHQodC5jLC1rK3EuYiwtXytxLmQpLHI9bmV3IG5yKFRYdCh0LmMpKTtyLmUhPXIuaS5nYygpOyluPXUoZHIociksNzkpLGg9eTQobiwhMCwhMCksRz1aZChuKSxaPVpwKG4pLFc9bmV3IFJlKEcuaStHLmcvMixHLmorRy5mLzIpLG89bmV3IFJlKFouaStaLmcvMixaLmorWi5mLzIpLGJ0PWZhKG5ldyBSZShvLmEsby5iKSxXKSx1NyhidCxHLmcsRy5mKSxGaShXLGJ0KSxNdD1mYShuZXcgUmUoVy5hLFcuYiksbyksdTcoTXQsWi5nLFouZiksRmkobyxNdCksb2ooaCxXLmEsVy5iKSxhaihoLG8uYSxvLmIpfWZ1bmN0aW9uIEYzbih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXyxNLEIscSxHO2lmKHQuYz10LmQsRz1GZShLKGUsKHhlKCksUHdlKSkpLHE9Rz09bnVsbHx8KEluKEcpLEcpLG89dShLKGUsKGFlKCksV2MpKSwyMSkuSGMoKGdvKCkseWgpKSxzPXUoSyhlLHdzKSw5OCksbj0hKHM9PSh2YSgpLFUyKXx8cz09aDB8fHM9PUtjKSxxJiYobnx8IW8pKXtmb3IoTT1uZXcgUyhlLmEpO00uYTxNLmMuYy5sZW5ndGg7KWs9dShRKE0pLDEwKSxrLnA9MDtmb3IoQj1uZXcgbGUsXz1uZXcgUyhlLmEpO18uYTxfLmMuYy5sZW5ndGg7KWlmKGs9dShRKF8pLDEwKSxyPUh1ZSh0LGssbnVsbCkscil7Zm9yKHc9bmV3IEdtdCxCbyh3LGUpLGVlKHcsTnksdShyLmIsMjEpKSxUd3Qody5kLGUuZCksZWUodyxkRSxudWxsKSxkPXUoci5hLDE1KS5LYygpO2QuT2IoKTspaD11KGQuUGIoKSwxMCksdWUody5hLGgpLGguYT13O0IuRmModyl9byYmKEd0KEsoZSxOeCkpPT09R3QoKGV3KCksZWx0KSk/dC5jPXQuYjp0LmM9dC5hKX1lbHNlIEI9bmV3IENsKHV0KG90KERiZSwxKSxWZmUsMzcsMCxbZV0pKTtyZXR1cm4gR3QoSyhlLE54KSkhPT1HdCgoZXcoKSx6NCkpJiYocG4oKSxCLmFkKG5ldyBlWSkpLEJ9ZnVuY3Rpb24gWGxlKHQpe1N2KHQsbmV3IHkyKHRidChtUihFdih5dihrdih4dihuZXcgbWcsV2cpLCJFTEsgTXIuIFRyZWUiKSwiVHJlZS1iYXNlZCBhbGdvcml0aG0gcHJvdmlkZWQgYnkgdGhlIEVjbGlwc2UgTGF5b3V0IEtlcm5lbC4gQ29tcHV0ZXMgYSBzcGFubmluZyB0cmVlIG9mIHRoZSBpbnB1dCBncmFwaCBhbmQgYXJyYW5nZXMgYWxsIG5vZGVzIGFjY29yZGluZyB0byB0aGUgcmVzdWx0aW5nIHBhcmVudC1jaGlsZHJlbiBoaWVyYXJjaHkuIEkgcGl0eSB0aGUgZm9vbCB3aG8gZG9lc24ndCB1c2UgTXIuIFRyZWUgTGF5b3V0LiIpLG5ldyBRUSksTTFlKSxvbigocDcoKSxrZnQpKSkpKSx3ZSh0LFdnLHd3LG5DdCksd2UodCxXZyxreSwyMCksd2UodCxXZyxweCxQNyksd2UodCxXZyxqSSxkZSgxKSksd2UodCxXZyxQQywoRm4oKSwhMCkpLHdlKHQsV2csS0ksSWUodEN0KSksd2UodCxXZyxNNCxJZShueWUpKSx3ZSh0LFdnLHZ4LEllKHJ5ZSkpLHdlKHQsV2csYngsSWUoaXllKSksd2UodCxXZyxGNyxJZShleWUpKSx3ZSh0LFdnLEZDLEllKGVDdCkpLHdlKHQsV2csQjcsSWUoYXllKSksd2UodCxXZyxPa3QsSWUoY3llKSksd2UodCxXZyxOa3QsSWUockN0KSl9ZnVuY3Rpb24gQjNuKHQpe3QucXx8KHQucT0hMCx0LnA9aGModCwwKSx0LmE9aGModCwxKSxHaSh0LmEsMCksdC5mPWhjKHQsMiksR2kodC5mLDEpLGZzKHQuZiwyKSx0Lm49aGModCwzKSxmcyh0Lm4sMyksZnModC5uLDQpLGZzKHQubiw1KSxmcyh0Lm4sNiksdC5nPWhjKHQsNCksR2kodC5nLDcpLGZzKHQuZyw4KSx0LmM9aGModCw1KSxHaSh0LmMsNyksR2kodC5jLDgpLHQuaT1oYyh0LDYpLEdpKHQuaSw5KSxHaSh0LmksMTApLEdpKHQuaSwxMSksR2kodC5pLDEyKSxmcyh0LmksMTMpLHQuaj1oYyh0LDcpLEdpKHQuaiw5KSx0LmQ9aGModCw4KSxHaSh0LmQsMyksR2kodC5kLDQpLEdpKHQuZCw1KSxHaSh0LmQsNiksZnModC5kLDcpLGZzKHQuZCw4KSxmcyh0LmQsOSksZnModC5kLDEwKSx0LmI9aGModCw5KSxmcyh0LmIsMCksZnModC5iLDEpLHQuZT1oYyh0LDEwKSxmcyh0LmUsMSksZnModC5lLDIpLGZzKHQuZSwzKSxmcyh0LmUsNCksR2kodC5lLDUpLEdpKHQuZSw2KSxHaSh0LmUsNyksR2kodC5lLDgpLEdpKHQuZSw5KSxHaSh0LmUsMTApLGZzKHQuZSwxMSksdC5rPWhjKHQsMTEpLGZzKHQuaywwKSxmcyh0LmssMSksdC5vPWhpKHQsMTIpLHQucz1oaSh0LDEzKSl9ZnVuY3Rpb24gcDZ0KHQsZSl7ZS5kYygpJiZWZCh0LmosITAsITAsITAsITApLFNpKGUsKGJlKCksTWYpKSYmVmQodC5qLCEwLCEwLCEwLCExKSxTaShlLHhoKSYmVmQodC5qLCExLCEwLCEwLCEwKSxTaShlLFpsKSYmVmQodC5qLCEwLCEwLCExLCEwKSxTaShlLFVoKSYmVmQodC5qLCEwLCExLCEwLCEwKSxTaShlLG9sKSYmVmQodC5qLCExLCEwLCEwLCExKSxTaShlLGtoKSYmVmQodC5qLCExLCEwLCExLCEwKSxTaShlLEpsKSYmVmQodC5qLCEwLCExLCExLCEwKSxTaShlLERmKSYmVmQodC5qLCEwLCExLCEwLCExKSxTaShlLEl1KSYmVmQodC5qLCEwLCEwLCEwLCEwKSxTaShlLGd1KSYmVmQodC5qLCEwLCEwLCEwLCEwKSxTaShlLEl1KSYmVmQodC5qLCEwLCEwLCEwLCEwKSxTaShlLER1KSYmVmQodC5qLCEwLCEwLCEwLCEwKSxTaShlLE91KSYmVmQodC5qLCEwLCEwLCEwLCEwKSxTaShlLGNsKSYmVmQodC5qLCEwLCEwLCEwLCEwKSxTaShlLFljKSYmVmQodC5qLCEwLCEwLCEwLCEwKX1mdW5jdGlvbiBSM24odCxlLG4scixzKXt2YXIgbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFo7Zm9yKG89bmV3IGxlLGs9bmV3IFMocik7ay5hPGsuYy5jLmxlbmd0aDspaWYoZD11KFEoayksNDQxKSxoPW51bGwsZC5mPT0oaG8oKSxzdSkpZm9yKEc9bmV3IFMoZC5lKTtHLmE8Ry5jLmMubGVuZ3RoOylxPXUoUShHKSwxNyksWj1xLmQuaSwkYShaKT09ZT9oZWUodCxlLGQscSxkLmIscS5kKTohbnx8SDgoWixuKT93MG4odCxlLGQscixxKTooQj1fYXQodCxlLG4scSxkLmIsc3UsaCksQiE9aCYmKG8uY1tvLmMubGVuZ3RoXT1CKSxCLmMmJihoPUIpKTtlbHNlIGZvcihNPW5ldyBTKGQuZSk7TS5hPE0uYy5jLmxlbmd0aDspaWYoXz11KFEoTSksMTcpLFc9Xy5jLmksJGEoVyk9PWUpaGVlKHQsZSxkLF8sXy5jLGQuYik7ZWxzZXtpZighbnx8SDgoVyxuKSljb250aW51ZTtCPV9hdCh0LGUsbixfLGQuYixhbCxoKSxCIT1oJiYoby5jW28uYy5sZW5ndGhdPUIpLEIuYyYmKGg9Qil9Zm9yKHc9bmV3IFMobyk7dy5hPHcuYy5jLmxlbmd0aDspZD11KFEodyksNDQxKSxHbyhlLmEsZC5hLDApIT0tMXx8dWUoZS5hLGQuYSksZC5jJiYocy5jW3MuYy5sZW5ndGhdPWQpfWZ1bmN0aW9uIGozbih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssXyxNLEI7Zm9yKGs9bmV3IGxlLHc9bmV3IFMoZS5hKTt3LmE8dy5jLmMubGVuZ3RoOylmb3IoaD11KFEodyksMTApLEI9cmMoaCwoYmUoKSxIbikpLktjKCk7Qi5PYigpOylmb3IoTT11KEIuUGIoKSwxMSkscz1uZXcgUyhNLmcpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShRKHMpLDE3KSwhKCFXYShyKSYmci5jLmkuYz09ci5kLmkuY3x8V2Eocil8fHIuZC5pLmMhPW4pJiYoay5jW2suYy5sZW5ndGhdPXIpO2ZvcihkPWMyKG4uYSkuS2MoKTtkLk9iKCk7KWZvcihoPXUoZC5QYigpLDEwKSxCPXJjKGgsKGJlKCksQm4pKS5LYygpO0IuT2IoKTspZm9yKE09dShCLlBiKCksMTEpLHM9bmV3IFMoTS5lKTtzLmE8cy5jLmMubGVuZ3RoOylpZihyPXUoUShzKSwxNyksISghV2EocikmJnIuYy5pLmM9PXIuZC5pLmN8fFdhKHIpfHxyLmMuaS5jIT1lKSl7Zm9yKF89bmV3IHhhKGssay5jLmxlbmd0aCksbz0oWm4oXy5iPjApLHUoXy5hLlhiKF8uYz0tLV8uYiksMTcpKTtvIT1yJiZfLmI+MDspdC5hW28ucF09ITAsdC5hW3IucF09ITAsbz0oWm4oXy5iPjApLHUoXy5hLlhiKF8uYz0tLV8uYiksMTcpKTtfLmI+MCYmRGwoXyl9fWZ1bmN0aW9uIFFsZSh0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssXyxNO2lmKHQuYSE9ZS5BaigpKXRocm93IG50KG5ldyBQbih6NytlLm5lKCkra3cpKTtpZihyPUJnKChHdSgpLFNhKSxlKS4kaygpLHIpcmV0dXJuIHIuQWooKS5OaCgpLkloKHIsbik7aWYoaD1CZyhTYSxlKS5hbCgpLGgpe2lmKG49PW51bGwpcmV0dXJuIG51bGw7aWYoZD11KG4sMTUpLGQuZGMoKSlyZXR1cm4iIjtmb3IoTT1uZXcgX2csbz1kLktjKCk7by5PYigpOylzPW8uUGIoKSx5byhNLGguQWooKS5OaCgpLkloKGgscykpLE0uYSs9IiAiO3JldHVybiBZZXQoTSxNLmEubGVuZ3RoLTEpfWlmKF89QmcoU2EsZSkuYmwoKSwhXy5kYygpKXtmb3Ioaz1fLktjKCk7ay5PYigpOylpZih3PXUoay5QYigpLDE0OCksdy53aihuKSl0cnl7aWYoTT13LkFqKCkuTmgoKS5JaCh3LG4pLE0hPW51bGwpcmV0dXJuIE19Y2F0Y2goQil7aWYoQj1ycyhCKSwhX3QoQiwxMDIpKXRocm93IG50KEIpfXRocm93IG50KG5ldyBQbigiSW52YWxpZCB2YWx1ZTogJyIrbisiJyBmb3IgZGF0YXR5cGUgOiIrZS5uZSgpKSl9cmV0dXJuIHUoZSw4MzQpLkZqKCksbj09bnVsbD9udWxsOl90KG4sMTcyKT8iIit1KG4sMTcyKS5hOmRsKG4pPT1ISD9fVXQockFbMF0sdShuLDE5OSkpOldvKG4pfWZ1bmN0aW9uICQzbih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssXztmb3Ioaz1uZXcgY3MsZD1uZXcgY3Msbz1uZXcgUyh0KTtvLmE8by5jLmMubGVuZ3RoOylyPXUoUShvKSwxMjgpLHIudj0wLHIubj1yLmkuYy5sZW5ndGgsci51PXIudC5jLmxlbmd0aCxyLm49PTAmJmtzKGsscixrLmMuYixrLmMpLHIudT09MCYmci5yLmEuZ2MoKT09MCYma3MoZCxyLGQuYy5iLGQuYyk7Zm9yKGg9LTE7ay5iIT0wOylmb3Iocj11KGtzdChrLDApLDEyOCksbj1uZXcgUyhyLnQpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShRKG4pLDI2OCksXz1lLmIsXy52PWIuTWF0aC5tYXgoXy52LHIudisxKSxoPWIuTWF0aC5tYXgoaCxfLnYpLC0tXy5uLF8ubj09MCYma3MoayxfLGsuYy5iLGsuYyk7aWYoaD4tMSl7Zm9yKHM9c2koZCwwKTtzLmIhPXMuZC5jOylyPXUoaWkocyksMTI4KSxyLnY9aDtmb3IoO2QuYiE9MDspZm9yKHI9dShrc3QoZCwwKSwxMjgpLG49bmV3IFMoci5pKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoUShuKSwyNjgpLHc9ZS5hLHcuci5hLmdjKCk9PTAmJih3LnY9Yi5NYXRoLm1pbih3LnYsci52LTEpLC0tdy51LHcudT09MCYma3MoZCx3LGQuYy5iLGQuYykpfX1mdW5jdGlvbiBabGUodCxlLG4scixzKXt2YXIgbyxoLGQsdztyZXR1cm4gdz1icyxoPSExLGQ9czZ0KHQsZmEobmV3IFJlKGUuYSxlLmIpLHQpLEZpKG5ldyBSZShuLmEsbi5iKSxzKSxmYShuZXcgUmUoci5hLHIuYiksbikpLG89ISFkJiYhKGIuTWF0aC5hYnMoZC5hLXQuYSk8PXl3JiZiLk1hdGguYWJzKGQuYi10LmIpPD15d3x8Yi5NYXRoLmFicyhkLmEtZS5hKTw9eXcmJmIuTWF0aC5hYnMoZC5iLWUuYik8PXl3KSxkPXM2dCh0LGZhKG5ldyBSZShlLmEsZS5iKSx0KSxuLHMpLGQmJigoYi5NYXRoLmFicyhkLmEtdC5hKTw9eXcmJmIuTWF0aC5hYnMoZC5iLXQuYik8PXl3KT09KGIuTWF0aC5hYnMoZC5hLWUuYSk8PXl3JiZiLk1hdGguYWJzKGQuYi1lLmIpPD15dyl8fG8/dz1iLk1hdGgubWluKHcsQV8oZmEoZCxuKSkpOmg9ITApLGQ9czZ0KHQsZmEobmV3IFJlKGUuYSxlLmIpLHQpLHIscyksZCYmKGh8fChiLk1hdGguYWJzKGQuYS10LmEpPD15dyYmYi5NYXRoLmFicyhkLmItdC5iKTw9eXcpPT0oYi5NYXRoLmFicyhkLmEtZS5hKTw9eXcmJmIuTWF0aC5hYnMoZC5iLWUuYik8PXl3KXx8bykmJih3PWIuTWF0aC5taW4odyxBXyhmYShkLHIpKSkpLHd9ZnVuY3Rpb24gSmxlKHQpe1N2KHQsbmV3IHkyKG1SKEV2KHl2KGt2KHh2KG5ldyBtZyxzYikscWZlKSwiTWluaW1pemVzIHRoZSBzdHJlc3Mgd2l0aGluIGEgbGF5b3V0IHVzaW5nIHN0cmVzcyBtYWpvcml6YXRpb24uIFN0cmVzcyBleGlzdHMgaWYgdGhlIGV1Y2xpZGVhbiBkaXN0YW5jZSBiZXR3ZWVuIGEgcGFpciBvZiBub2RlcyBkb2Vzbid0IG1hdGNoIHRoZWlyIGdyYXBoIHRoZW9yZXRpYyBkaXN0YW5jZSwgdGhhdCBpcywgdGhlIHNob3J0ZXN0IHBhdGggYmV0d2VlbiB0aGUgdHdvIG5vZGVzLiBUaGUgbWV0aG9kIGFsbG93cyB0byBzcGVjaWZ5IGluZGl2aWR1YWwgZWRnZSBsZW5ndGhzLiIpLG5ldyBkayksV2wpKSksd2UodCxzYiwkSSxJZSh3RXQpKSx3ZSh0LHNiLFZxLChGbigpLCEwKSksd2UodCxzYixNNCxJZShsYmUpKSx3ZSh0LHNiLHZ4LEllKGhiZSkpLHdlKHQsc2IsYngsSWUoZmJlKSksd2UodCxzYixGNyxJZSh1YmUpKSx3ZSh0LHNiLEZDLEllKHlFdCkpLHdlKHQsc2IsQjcsSWUoZGJlKSksd2UodCxzYixjeHQsSWUodkV0KSksd2UodCxzYixseHQsSWUocEV0KSksd2UodCxzYixoeHQsSWUoYkV0KSksd2UodCxzYixmeHQsSWUobUV0KSksd2UodCxzYix1eHQsSWUob1YpKX1mdW5jdGlvbiB6M24odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFosYnQ7Zm9yKG1yKGUsIkludGVyYWN0aXZlIGNyb3NzaW5nIG1pbmltaXphdGlvbiIsMSksaD0wLG89bmV3IFModC5iKTtvLmE8by5jLmMubGVuZ3RoOylyPXUoUShvKSwyOSksci5wPWgrKztmb3IoQj1iNHQodCksWj1uZXcgZWJ0KEIubGVuZ3RoKSxTbGUobmV3IENsKHV0KG90KFliZSwxKSxNZSwyMjUsMCxbWl0pKSxCKSxXPTAsaD0wLHM9bmV3IFModC5iKTtzLmE8cy5jLmMubGVuZ3RoOyl7Zm9yKHI9dShRKHMpLDI5KSxuPTAsTT0wLF89bmV3IFMoci5hKTtfLmE8Xy5jLmMubGVuZ3RoOylmb3Iodz11KFEoXyksMTApLHcubi5hPjAmJihuKz13Lm4uYSt3Lm8uYS8yLCsrTSksRz1uZXcgUyh3LmopO0cuYTxHLmMuYy5sZW5ndGg7KXE9dShRKEcpLDExKSxxLnA9VysrO2ZvcihNPjAmJihuLz1NKSxidD1OdChnYSxUbywyNSxyLmEuYy5sZW5ndGgsMTUsMSksZD0wLGs9bmV3IFMoci5hKTtrLmE8ay5jLmMubGVuZ3RoOyl3PXUoUShrKSwxMCksdy5wPWQrKyxidFt3LnBdPUwzbih3LG4pLHcuaz09KEduKCksY2EpJiZlZSh3LChhZSgpLFE5dCksYnRbdy5wXSk7cG4oKSxhYShyLmEsbmV3IGMkdChidCkpLEJ1ZShaLEIsaCwhMCksKytofW9yKGUpfWZ1bmN0aW9uIENDKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxfO2lmKGUuZT09NSl7R2xlKHQsZSk7cmV0dXJufWlmKGs9ZSwhKGsuYj09bnVsbHx8dC5iPT1udWxsKSl7Zm9yKHY0KHQpLFRDKHQpLHY0KGspLFRDKGspLG49TnQoU3IsSnIsMjUsdC5iLmxlbmd0aCtrLmIubGVuZ3RoLDE1LDEpLF89MCxyPTAsaD0wO3I8dC5iLmxlbmd0aCYmaDxrLmIubGVuZ3RoOylpZihzPXQuYltyXSxvPXQuYltyKzFdLGQ9ay5iW2hdLHc9ay5iW2grMV0sbzxkKW5bXysrXT10LmJbcisrXSxuW18rK109dC5iW3IrK107ZWxzZSBpZihvPj1kJiZzPD13KWQ8PXMmJm88PXc/cis9MjpkPD1zPyh0LmJbcl09dysxLGgrPTIpOm88PXc/KG5bXysrXT1zLG5bXysrXT1kLTEscis9Mik6KG5bXysrXT1zLG5bXysrXT1kLTEsdC5iW3JdPXcrMSxoKz0yKTtlbHNlIGlmKHc8cyloKz0yO2Vsc2UgdGhyb3cgbnQobmV3IFpvKCJUb2tlbiNzdWJ0cmFjdFJhbmdlcygpOiBJbnRlcm5hbCBFcnJvcjogWyIrdC5iW3JdKyIsIit0LmJbcisxXSsiXSAtIFsiK2suYltoXSsiLCIray5iW2grMV0rIl0iKSk7Zm9yKDtyPHQuYi5sZW5ndGg7KW5bXysrXT10LmJbcisrXSxuW18rK109dC5iW3IrK107dC5iPU50KFNyLEpyLDI1LF8sMTUsMSksUGMobiwwLHQuYiwwLF8pfX1mdW5jdGlvbiBxM24odCl7dmFyIGUsbixyLHMsbyxoLGQ7aWYoIXQuQS5kYygpKXtpZih0LkEuSGMoKE5sKCksbk4pKSYmKHUoeG8odC5iLChiZSgpLE9uKSksMTI0KS5rPSEwLHUoeG8odC5iLHlyKSwxMjQpLms9ITAsZT10LnEhPSh2YSgpLGgwKSYmdC5xIT1LYyxlTSh1KHhvKHQuYixIbiksMTI0KSxlKSxlTSh1KHhvKHQuYixCbiksMTI0KSxlKSxlTSh0LmcsZSksdC5BLkhjKFcyKSYmKHUoeG8odC5iLE9uKSwxMjQpLmo9ITAsdSh4byh0LmIseXIpLDEyNCkuaj0hMCx1KHhvKHQuYixIbiksMTI0KS5rPSEwLHUoeG8odC5iLEJuKSwxMjQpLms9ITAsdC5nLms9ITApKSx0LkEuSGMoZU4pKWZvcih0LmEuaj0hMCx0LmEuaz0hMCx0Lmcuaj0hMCx0Lmcuaz0hMCxkPXQuQi5IYygoYmwoKSxlQSkpLHM9ZXN0KCksbz0wLGg9cy5sZW5ndGg7bzxoOysrbylyPXNbb10sbj11KHhvKHQuaSxyKSwzMDYpLG4mJihUM3Qocik/KG4uaj0hMCxuLms9ITApOihuLmo9IWQsbi5rPSFkKSk7dC5BLkhjKFh5KSYmdC5CLkhjKChibCgpLGlOKSkmJih0Lmcuaj0hMCx0Lmcuaj0hMCx0LmEuanx8KHQuYS5qPSEwLHQuYS5rPSEwLHQuYS5lPSEwKSl9fWZ1bmN0aW9uIEgzbih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWixidDtmb3Iocj1uZXcgUyh0LmUuYik7ci5hPHIuYy5jLmxlbmd0aDspZm9yKG49dShRKHIpLDI5KSxvPW5ldyBTKG4uYSk7by5hPG8uYy5jLmxlbmd0aDspaWYocz11KFEobyksMTApLHE9dC5pW3MucF0saz1xLmEuZSx3PXEuZC5lLHMubi5iPWssYnQ9dy1rLXMuby5iLGU9RWF0KHMpLEI9KHN5KCksKHMucT9zLnE6KHBuKCkscG4oKSxhMCkpLl9iKCh4ZSgpLE53KSk/TT11KEsocyxOdyksMTk3KTpNPXUoSygkYShzKSxfUyksMTk3KSxNKSxlJiYoQj09ZTV8fEI9PXQ1KSYmKHMuby5iKz1idCksZSYmKEI9PWxodHx8Qj09ZTV8fEI9PXQ1KSl7Zm9yKFc9bmV3IFMocy5qKTtXLmE8Vy5jLmMubGVuZ3RoOylHPXUoUShXKSwxMSksKGJlKCksZ3UpLkhjKEcuaikmJihfPXUodHIodC5rLEcpLDEyMSksRy5uLmI9Xy5lLWspO2ZvcihkPW5ldyBTKHMuYik7ZC5hPGQuYy5jLmxlbmd0aDspaD11KFEoZCksNzApLFo9dShLKHMsT3cpLDIxKSxaLkhjKChmeSgpLEdoKSk/aC5uLmIrPWJ0OlouSGMobDApJiYoaC5uLmIrPWJ0LzIpOyhCPT1lNXx8Qj09dDUpJiZyYyhzLChiZSgpLHlyKSkuSmMobmV3IFQkdChidCkpfX1mdW5jdGlvbiB0aGUodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLF8sTSxCLHE7aWYoIXQuYilyZXR1cm4hMTtmb3IoaD1udWxsLEI9bnVsbCx3PW5ldyBxcnQobnVsbCxudWxsKSxzPTEsdy5hWzFdPXQuYixNPXc7TS5hW3NdOylrPXMsZD1CLEI9TSxNPU0uYVtzXSxyPXQuYS51ZShlLE0uZCkscz1yPDA/MDoxLHI9PTAmJighbi5jfHxSYyhNLmUsbi5kKSkmJihoPU0pLCEoTSYmTS5iKSYmIUFtKE0uYVtzXSkmJihBbShNLmFbMS1zXSk/Qj1CLmFba109bnooTSxzKTpBbShNLmFbMS1zXSl8fChxPUIuYVsxLWtdLHEmJighQW0ocS5hWzEta10pJiYhQW0ocS5hW2tdKT8oQi5iPSExLHEuYj0hMCxNLmI9ITApOihvPWQuYVsxXT09Qj8xOjAsQW0ocS5hW2tdKT9kLmFbb109b1p0KEIsayk6QW0ocS5hWzEta10pJiYoZC5hW29dPW56KEIsaykpLE0uYj1kLmFbb10uYj0hMCxkLmFbb10uYVswXS5iPSExLGQuYVtvXS5hWzFdLmI9ITEpKSkpO3JldHVybiBoJiYobi5iPSEwLG4uZD1oLmUsTSE9aCYmKF89bmV3IHFydChNLmQsTS5lKSx1MG4odCx3LGgsXyksQj09aCYmKEI9XykpLEIuYVtCLmFbMV09PU0/MTowXT1NLmFbTS5hWzBdPzA6MV0sLS10LmMpLHQuYj13LmFbMV0sdC5iJiYodC5iLmI9ITEpLG4uYn1mdW5jdGlvbiBWM24odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLF8sTSxCO2ZvcihzPW5ldyBTKHQuYS5hLmIpO3MuYTxzLmMuYy5sZW5ndGg7KWZvcihyPXUoUShzKSw1Nyksdz1yLmMuS2MoKTt3Lk9iKCk7KWQ9dSh3LlBiKCksNTcpLHIuYSE9ZC5hJiYoUHAodC5hLmQpP009dC5hLmcuT2UocixkKTpNPXQuYS5nLlBlKHIsZCksbz1yLmIuYStyLmQuYitNLWQuYi5hLG89Yi5NYXRoLmNlaWwobyksbz1iLk1hdGgubWF4KDAsbyksSW10KHIsZCk/KGg9SXYobmV3IEtiLHQuZCksaz1DcyhiLk1hdGguY2VpbChkLmIuYS1yLmIuYSkpLGU9ay0oZC5iLmEtci5iLmEpLF89cTYocikuYSxuPXIsX3x8KF89cTYoZCkuYSxlPS1lLG49ZCksXyYmKG4uYi5hLT1lLF8ubi5hLT1lKSx5ZihsZih1ZihoZihjZihuZXcgU2gsYi5NYXRoLm1heCgwLGspKSwxKSxoKSx0LmNbci5hLmRdKSkseWYobGYodWYoaGYoY2YobmV3IFNoLGIuTWF0aC5tYXgoMCwtaykpLDEpLGgpLHQuY1tkLmEuZF0pKSk6KEI9MSwoX3Qoci5nLDE0NSkmJl90KGQuZywxMCl8fF90KGQuZywxNDUpJiZfdChyLmcsMTApKSYmKEI9MikseWYobGYodWYoaGYoY2YobmV3IFNoLENzKG8pKSxCKSx0LmNbci5hLmRdKSx0LmNbZC5hLmRdKSkpKX1mdW5jdGlvbiBlaGUodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLF8sTSxCO2lmKG4pZm9yKHI9LTEsXz1uZXcgeGEoZSwwKTtfLmI8Xy5kLmdjKCk7KXtpZihkPShabihfLmI8Xy5kLmdjKCkpLHUoXy5kLlhiKF8uYz1fLmIrKyksMTApKSxNPXQuY1tkLmMucF1bZC5wXS5hLE09PW51bGwpe2ZvcihoPXIrMSxvPW5ldyB4YShlLF8uYik7by5iPG8uZC5nYygpOylpZihCPU9YZSh0LChabihvLmI8by5kLmdjKCkpLHUoby5kLlhiKG8uYz1vLmIrKyksMTApKSkuYSxCIT1udWxsKXtoPShJbihCKSxCKTticmVha31NPShyK2gpLzIsdC5jW2QuYy5wXVtkLnBdLmE9TSx0LmNbZC5jLnBdW2QucF0uZD0oSW4oTSksTSksdC5jW2QuYy5wXVtkLnBdLmI9MX1yPShJbihNKSxNKX1lbHNle2ZvcihzPTAsaz1uZXcgUyhlKTtrLmE8ay5jLmMubGVuZ3RoOylkPXUoUShrKSwxMCksdC5jW2QuYy5wXVtkLnBdLmEhPW51bGwmJihzPWIuTWF0aC5tYXgocyxadCh0LmNbZC5jLnBdW2QucF0uYSkpKTtmb3Iocys9Mix3PW5ldyBTKGUpO3cuYTx3LmMuYy5sZW5ndGg7KWQ9dShRKHcpLDEwKSx0LmNbZC5jLnBdW2QucF0uYT09bnVsbCYmKE09cGwodC5pLDI0KSpQSSpzLTEsdC5jW2QuYy5wXVtkLnBdLmE9TSx0LmNbZC5jLnBdW2QucF0uZD1NLHQuY1tkLmMucF1bZC5wXS5iPTEpfX1mdW5jdGlvbiBHM24oKXtvaShaeSxuZXcgb0IpLG9pKGVpLG5ldyBmQiksb2koS2gsbmV3IGdKKSxvaShjMSxuZXcgakwpLG9pKFNmdCxuZXcgJEwpLG9pKGlVLG5ldyBuNiksb2koZWcsbmV3IHBKKSxvaShuQSxuZXcgYkopLG9pKG9OLG5ldyBKWiksb2koeGZ0LG5ldyB0Siksb2koVGIsbmV3IGVKKSxvaShZaCxuZXcgbkopLG9pKG8xLG5ldyBySiksb2koencsbmV3IGlKKSxvaShKeSxuZXcgYUIpLG9pKE51LG5ldyBzSiksb2koUXksbmV3IGFKKSxvaShwYyxuZXcgb0opLG9pKHdvLG5ldyBMayksb2kocHUsbmV3IFo5KSxvaShXcyxuZXcgY0IpLG9pKG90KFh1LDEpLG5ldyBjSiksb2koa3gsbmV3IHVCKSxvaShhUyxuZXcgbEIpLG9pKEhILG5ldyB1Siksb2koVEx0LG5ldyBKOSksb2kod2EsbmV3IGttKSxvaShqQXQsbmV3IGhCKSxvaShxQXQsbmV3IGxKKSxvaShoTHQsbmV3IGhKKSxvaShzVSxuZXcgdFQpLG9pKEs3LG5ldyBkQiksb2koSGEsbmV3IGdCKSxvaShIOHQsbmV3IGJjKSxvaShUdyxuZXcgZkopLG9pKFY4dCxuZXcgcEIpLG9pKG9MdCxuZXcgZVQpLG9pKF9MdCxuZXcgZEopLG9pKF93LG5ldyBuVCksb2koTGUsbmV3IGJCKSxvaSh6QXQsbmV3IHJUKSxvaShDTHQsbmV3IGlUKX1mdW5jdGlvbiBVM24odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLF8sTTtmb3IoIW4mJihuPUFjbihlLnEuZ2V0VGltZXpvbmVPZmZzZXQoKSkpLHM9KGUucS5nZXRUaW1lem9uZU9mZnNldCgpLW4uYSkqNmU0LGQ9bmV3ICQydChSYShBdShlLnEuZ2V0VGltZSgpKSxzKSksdz1kLGQucS5nZXRUaW1lem9uZU9mZnNldCgpIT1lLnEuZ2V0VGltZXpvbmVPZmZzZXQoKSYmKHM+MD9zLT04NjRlNTpzKz04NjRlNSx3PW5ldyAkMnQoUmEoQXUoZS5xLmdldFRpbWUoKSkscykpKSxfPW5ldyBMbSxrPXQuYS5sZW5ndGgsbz0wO288azspaWYocj1UYSh0LmEsbykscj49OTcmJnI8PTEyMnx8cj49NjUmJnI8PTkwKXtmb3IoaD1vKzE7aDxrJiZUYSh0LmEsaCk9PXI7KytoKTskNW4oXyxyLGgtbyxkLHcsbiksbz1ofWVsc2UgaWYocj09Mzkpe2lmKCsrbyxvPGsmJlRhKHQuYSxvKT09Mzkpe18uYSs9IiciLCsrbztjb250aW51ZX1mb3IoTT0hMTshTTspe2ZvcihoPW87aDxrJiZUYSh0LmEsaCkhPTM5OykrK2g7aWYoaD49ayl0aHJvdyBudChuZXcgUG4oIk1pc3NpbmcgdHJhaWxpbmcgJyIpKTtoKzE8ayYmVGEodC5hLGgrMSk9PTM5PysraDpNPSEwLFlyKF8sQmwodC5hLG8saCkpLG89aCsxfX1lbHNlIF8uYSs9U3RyaW5nLmZyb21DaGFyQ29kZShyKSwrK287cmV0dXJuIF8uYX1mdW5jdGlvbiBXM24odCl7dmFyIGUsbixyLHMsbyxoLGQsdztmb3IoZT1udWxsLHI9bmV3IFModCk7ci5hPHIuYy5jLmxlbmd0aDspbj11KFEociksMjMzKSxadChUMShuLmcsbi5kWzBdKS5hKSxuLmI9bnVsbCxuLmUmJm4uZS5nYygpPjAmJm4uYz09MCYmKCFlJiYoZT1uZXcgbGUpLGUuY1tlLmMubGVuZ3RoXT1uKTtpZihlKWZvcig7ZS5jLmxlbmd0aCE9MDspe2lmKG49dShJZyhlLDApLDIzMyksbi5iJiZuLmIuYy5sZW5ndGg+MCl7Zm9yKG89KCFuLmImJihuLmI9bmV3IGxlKSxuZXcgUyhuLmIpKTtvLmE8by5jLmMubGVuZ3RoOylpZihzPXUoUShvKSwyMzMpLGxNKFQxKHMuZyxzLmRbMF0pLmEpPT1sTShUMShuLmcsbi5kWzBdKS5hKSl7aWYoR28odCxzLDApPkdvKHQsbiwwKSlyZXR1cm4gbmV3IHlhKHMsbil9ZWxzZSBpZihadChUMShzLmcscy5kWzBdKS5hKT5adChUMShuLmcsbi5kWzBdKS5hKSlyZXR1cm4gbmV3IHlhKHMsbil9Zm9yKGQ9KCFuLmUmJihuLmU9bmV3IGxlKSxuLmUpLktjKCk7ZC5PYigpOyloPXUoZC5QYigpLDIzMyksdz0oIWguYiYmKGguYj1uZXcgbGUpLGguYiksVW0oMCx3LmMubGVuZ3RoKSxXVCh3LmMsMCxuKSxoLmM9PXcuYy5sZW5ndGgmJihlLmNbZS5jLmxlbmd0aF09aCl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gbmhlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxfO2lmKHQ9PW51bGwpcmV0dXJuIE11O2lmKHc9ZS5hLnpjKHQsZSksdyE9bnVsbClyZXR1cm4iWy4uLl0iO2ZvcihuPW5ldyBsMihYYSwiWyIsIl0iKSxzPXQsbz0wLGg9cy5sZW5ndGg7bzxoOysrbylyPXNbb10sciE9bnVsbCYmZGwocikuaSY0P0FycmF5LmlzQXJyYXkocikmJihfPXhEKHIpLCEoXz49MTQmJl88PTE2KSk/ZS5hLl9iKHIpPyhuLmE/WXIobi5hLG4uYik6bi5hPW5ldyBGbChuLmQpLGNfKG4uYSwiWy4uLl0iKSk6KGQ9bzIociksaz1uZXcgeV8oZSksUDAobixuaGUoZCxrKSkpOl90KHIsMTc3KT9QMChuLEJnbih1KHIsMTc3KSkpOl90KHIsMTkwKT9QMChuLENkbih1KHIsMTkwKSkpOl90KHIsMTk1KT9QMChuLEYwbih1KHIsMTk1KSkpOl90KHIsMjAxMik/UDAobixTZG4odShyLDIwMTIpKSk6X3Qociw0OCk/UDAobixGZ24odShyLDQ4KSkpOl90KHIsMzY0KT9QMChuLFhnbih1KHIsMzY0KSkpOl90KHIsODMyKT9QMChuLFBnbih1KHIsODMyKSkpOl90KHIsMTA0KSYmUDAobixOZ24odShyLDEwNCkpKTpQMChuLHI9PW51bGw/TXU6V28ocikpO3JldHVybiBuLmE/bi5lLmxlbmd0aD09MD9uLmEuYTpuLmEuYSsoIiIrbi5lKTpuLmN9ZnVuY3Rpb24gcmhlKHQsZSxuLHIpe3ZhciBzLG8saCxkLHcsayxfLE0sQixxLEcsVyxaLGJ0LE10LFN0O2ZvcihkPXk0KGUsITEsITEpLGJ0PXNJKGQpLHImJihidD1CRChidCkpLFN0PVp0KHZlKHplKGUsKGlDKCkscXV0KSkpKSxaPShabihidC5iIT0wKSx1KGJ0LmEuYS5jLDgpKSxNPXUoZTEoYnQsMSksOCksYnQuYj4yPyhfPW5ldyBsZSxScyhfLG5ldyBLZChidCwxLGJ0LmIpKSxvPUZoZShfLFN0K3QuYSksTXQ9bmV3IFdzdChvKSxCbyhNdCxlKSxuLmNbbi5jLmxlbmd0aF09TXQpOnI/TXQ9dSh0cih0LmIsWmQoZSkpLDI2Nik6TXQ9dSh0cih0LmIsWnAoZSkpLDI2Niksdz1aZChlKSxyJiYodz1acChlKSksaD1uZ24oWix3KSxrPVN0K3QuYSxoLmE/KGsrPWIuTWF0aC5hYnMoWi5iLU0uYiksVz1uZXcgUmUoTS5hLChNLmIrWi5iKS8yKSk6KGsrPWIuTWF0aC5hYnMoWi5hLU0uYSksVz1uZXcgUmUoKE0uYStaLmEpLzIsTS5iKSkscj9BaSh0LmQsZSxuZXcgajN0KE10LGgsVyxrKSk6QWkodC5jLGUsbmV3IGozdChNdCxoLFcsaykpLEFpKHQuYixlLE10KSxHPSghZS5uJiYoZS5uPW5ldyBoZShZbyxlLDEsNykpLGUubikscT1uZXcgbnIoRyk7cS5lIT1xLmkuZ2MoKTspQj11KGRyKHEpLDEzNykscz1iSSh0LEIsITAsMCwwKSxuLmNbbi5jLmxlbmd0aF09c31mdW5jdGlvbiBLM24odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLF87Zm9yKGs9bmV3IGxlLGQ9bmV3IGxlLGg9bmV3IFModCk7aC5hPGguYy5jLmxlbmd0aDspcz11KFEoaCksMTEyKSxuTShzLHMuZi5jLmxlbmd0aCkseFQocyxzLmsuYy5sZW5ndGgpLHMuZD09MCYmKGsuY1trLmMubGVuZ3RoXT1zKSxzLmk9PTAmJnMuZS5iPT0wJiYoZC5jW2QuYy5sZW5ndGhdPXMpO2ZvcihyPS0xO2suYy5sZW5ndGghPTA7KWZvcihzPXUoSWcoaywwKSwxMTIpLG49bmV3IFMocy5rKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoUShuKSwxMjkpLF89ZS5iLFlCKF8sYi5NYXRoLm1heChfLm8scy5vKzEpKSxyPWIuTWF0aC5tYXgocixfLm8pLG5NKF8sXy5kLTEpLF8uZD09MCYmKGsuY1trLmMubGVuZ3RoXT1fKTtpZihyPi0xKXtmb3Iobz1uZXcgUyhkKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoUShvKSwxMTIpLHMubz1yO2Zvcig7ZC5jLmxlbmd0aCE9MDspZm9yKHM9dShJZyhkLDApLDExMiksbj1uZXcgUyhzLmYpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShRKG4pLDEyOSksdz1lLmEsISh3LmUuYj4wKSYmKFlCKHcsYi5NYXRoLm1pbih3Lm8scy5vLTEpKSx4VCh3LHcuaS0xKSx3Lmk9PTAmJihkLmNbZC5jLmxlbmd0aF09dykpfX1mdW5jdGlvbiBUNyh0LGUsbil7dmFyIHIscyxvLGgsZCx3LGs7aWYoaz10LmMsIWUmJihlPVFBdCksdC5jPWUsdC5EYiY0JiYhKHQuRGImMSkmJih3PW5ldyBvYSh0LDEsMixrLHQuYyksbj9uLkVpKHcpOm49dyksayE9ZSl7aWYoX3QodC5DYiwyODQpKXQuRGI+PjE2PT0tMTA/bj11KHQuQ2IsMjg0KS5uayhlLG4pOnQuRGI+PjE2PT0tMTUmJighZSYmKGU9KGxuKCksSzEpKSwhayYmKGs9KGxuKCksSzEpKSx0LkNiLm5oKCkmJih3PW5ldyBGMCh0LkNiLDEsMTMsayxlLCRnKGZsKHUodC5DYiw1OSkpLHQpLCExKSxuP24uRWkodyk6bj13KSk7ZWxzZSBpZihfdCh0LkNiLDg4KSl0LkRiPj4xNj09LTIzJiYoX3QoZSw4OCl8fChlPShsbigpLFFoKSksX3Qoayw4OCl8fChrPShsbigpLFFoKSksdC5DYi5uaCgpJiYodz1uZXcgRjAodC5DYiwxLDEwLGssZSwkZyhPYyh1KHQuQ2IsMjYpKSx0KSwhMSksbj9uLkVpKHcpOm49dykpO2Vsc2UgaWYoX3QodC5DYiw0NDQpKWZvcihkPXUodC5DYiw4MzYpLGg9KCFkLmImJihkLmI9bmV3IGNSKG5ldyBRdHQpKSxkLmIpLG89KHI9bmV3IGQyKG5ldyBrZyhoLmEpLmEpLG5ldyB1UihyKSk7by5hLmI7KXM9dShZdihvLmEpLmNkKCksODcpLG49VDcocyxvcShzLGQpLG4pfXJldHVybiBufWZ1bmN0aW9uIFkzbih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXyxNLEI7Zm9yKGg9QmUoRmUoemUodCwoeGUoKSwkeSkpKSksQj11KHplKHQscXkpLDIxKSx3PSExLGs9ITEsTT1uZXcgbnIoKCF0LmMmJih0LmM9bmV3IGhlKHlsLHQsOSw5KSksdC5jKSk7TS5lIT1NLmkuZ2MoKSYmKCF3fHwhayk7KXtmb3Iobz11KGRyKE0pLDExOCksZD0wLHM9anAoSTEodXQob3QoJDEsMSksTWUsMjAsMCxbKCFvLmQmJihvLmQ9bmV3IEVuKHJhLG8sOCw1KSksby5kKSwoIW8uZSYmKG8uZT1uZXcgRW4ocmEsbyw3LDQpKSxvLmUpXSkpKTtWcihzKSYmKHI9dShJcihzKSw3OSksXz1oJiZ1dyhyKSYmQmUoRmUoemUocixCMikpKSxuPU5sZSgoIXIuYiYmKHIuYj1uZXcgRW4odnIsciw0LDcpKSxyLmIpLG8pP3Q9PWhzKFJvKHUoQXQoKCFyLmMmJihyLmM9bmV3IEVuKHZyLHIsNSw4KSksci5jKSwwKSw4MikpKTp0PT1ocyhSbyh1KEF0KCghci5iJiYoci5iPW5ldyBFbih2cixyLDQsNykpLHIuYiksMCksODIpKSksISgoX3x8bikmJigrK2QsZD4xKSkpOyk7KGQ+MHx8Qi5IYygoaWwoKSx0ZykpJiYoIW8ubiYmKG8ubj1uZXcgaGUoWW8sbywxLDcpKSxvLm4pLmk+MCkmJih3PSEwKSxkPjEmJihrPSEwKX13JiZlLkZjKChnbygpLHloKSksayYmZS5GYygoZ28oKSx2UykpfWZ1bmN0aW9uIGloZSh0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssXyxNLEI7aWYoQj11KHplKHQsKGRpKCksSDIpKSwyMSksQi5kYygpKXJldHVybiBudWxsO2lmKGQ9MCxoPTAsQi5IYygoTmwoKSxuTikpKXtmb3IoXz11KHplKHQsVVMpLDk4KSxyPTIsbj0yLHM9MixvPTIsZT1ocyh0KT91KHplKGhzKHQpLGp3KSwxMDMpOnUoemUodCxqdyksMTAzKSxrPW5ldyBucigoIXQuYyYmKHQuYz1uZXcgaGUoeWwsdCw5LDkpKSx0LmMpKTtrLmUhPWsuaS5nYygpOylpZih3PXUoZHIoayksMTE4KSxNPXUoemUodyxjNSksNjEpLE09PShiZSgpLGFjKSYmKE09SjV0KHcsZSksRW8odyxjNSxNKSksXz09KHZhKCksS2MpKXN3aXRjaChNLmcpe2Nhc2UgMTpyPWIuTWF0aC5tYXgocix3Lmkrdy5nKTticmVhaztjYXNlIDI6bj1iLk1hdGgubWF4KG4sdy5qK3cuZik7YnJlYWs7Y2FzZSAzOnM9Yi5NYXRoLm1heChzLHcuaSt3LmcpO2JyZWFrO2Nhc2UgNDpvPWIuTWF0aC5tYXgobyx3Lmordy5mKX1lbHNlIHN3aXRjaChNLmcpe2Nhc2UgMTpyKz13LmcrMjticmVhaztjYXNlIDI6bis9dy5mKzI7YnJlYWs7Y2FzZSAzOnMrPXcuZysyO2JyZWFrO2Nhc2UgNDpvKz13LmYrMn1kPWIuTWF0aC5tYXgocixzKSxoPWIuTWF0aC5tYXgobixvKX1yZXR1cm4gZ3codCxkLGgsITAsITApfWZ1bmN0aW9uIExhdCh0LGUsbixyLHMpe3ZhciBvLGgsZCx3LGssXyxNLEIscSxHLFcsWixidCxNdCxTdCxqdDtmb3IoTXQ9dSgkbChWJChXaShuZXcga24obnVsbCxuZXcgVG4oZS5kLDE2KSksbmV3IFZrKG4pKSxuZXcgc00obikpLGEyKG5ldyBrZSxuZXcgbmUsbmV3IHBpLHV0KG90KHdsLDEpLG9lLDEzMiwwLFsoTjEoKSxZbCldKSkpLDE1KSxNPVRpLF89T2Esdz1uZXcgUyhlLmIuaik7dy5hPHcuYy5jLmxlbmd0aDspZD11KFEodyksMTEpLGQuaj09biYmKE09Yi5NYXRoLm1pbihNLGQucCksXz1iLk1hdGgubWF4KF8sZC5wKSk7aWYoTT09VGkpZm9yKGg9MDtoPE10LmdjKCk7aCsrKVRtdCh1KE10LlhiKGgpLDEwMSksbixoKTtlbHNlIGZvcihTdD1OdChTcixKciwyNSxzLmxlbmd0aCwxNSwxKSxqdG4oU3QsU3QubGVuZ3RoKSxidD1NdC5LYygpO2J0Lk9iKCk7KXtmb3IoWj11KGJ0LlBiKCksMTAxKSxvPXUodHIodC5iLFopLDE3Nyksaz0wLFc9TTtXPD1fO1crKylvW1ddJiYoaz1iLk1hdGgubWF4KGsscltXXSkpO2lmKFouaSl7Zm9yKHE9Wi5pLmMsanQ9bmV3IFFzLEI9MDtCPHMubGVuZ3RoO0IrKylzW3FdW0JdJiZWcyhqdCxkZShTdFtCXSkpO2Zvcig7UzAoanQsZGUoaykpOykrK2t9Zm9yKFRtdChaLG4sayksRz1NO0c8PV87RysrKW9bR10mJihyW0ddPWsrMSk7Wi5pJiYoU3RbWi5pLmNdPWspfX1mdW5jdGlvbiBYM24odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXO2ZvcihzPW51bGwscj1uZXcgUyhlLmEpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShRKHIpLDEwKSxFYXQobik/bz0oZD1JdihiTShuZXcgS2IsbiksdC5mKSx3PUl2KGJNKG5ldyBLYixuKSx0LmYpLGs9bmV3IEV3dChuLCEwLGQsdyksXz1uLm8uYixNPShzeSgpLChuLnE/bi5xOihwbigpLHBuKCksYTApKS5fYigoeGUoKSxOdykpP0I9dShLKG4sTncpLDE5Nyk6Qj11KEsoJGEobiksX1MpLDE5NyksQikscT0xZTQsTT09dDUmJihxPTEpLEc9eWYobGYodWYoY2YoaGYobmV3IFNoLHEpLENzKGIuTWF0aC5jZWlsKF8pKSksZCksdykpLE09PWU1JiZWcyh0LmQsRykscXVlKHQsYzIocmMobiwoYmUoKSxCbikpKSxrKSxxdWUodCxyYyhuLEhuKSxrKSxrKTpvPShXPUl2KGJNKG5ldyBLYixuKSx0LmYpLHlzKFdpKG5ldyBrbihudWxsLG5ldyBUbihuLmosMTYpKSxuZXcgZFEpLG5ldyBaVnQodCxXKSksbmV3IEV3dChuLCExLFcsVykpLHQuaVtuLnBdPW8scyYmKGg9cy5jLmQuYStVMyh0Lm4scy5jLG4pK24uZC5kLHMuYnx8KGgrPXMuYy5vLmIpLHlmKGxmKHVmKGhmKGNmKG5ldyBTaCxDcyhiLk1hdGguY2VpbChoKSkpLDApLHMuZCksby5hKSkpLHM9b31mdW5jdGlvbiBRM24odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXO2ZvcihtcihlLCJMYWJlbCBkdW1teSBpbnNlcnRpb25zIiwxKSxNPW5ldyBsZSxoPVp0KHZlKEsodCwoeGUoKSxGeCkpKSksaz1adCh2ZShLKHQsVnkpKSksXz11KEsodCxYbCksMTAzKSxxPW5ldyBTKHQuYSk7cS5hPHEuYy5jLmxlbmd0aDspZm9yKEI9dShRKHEpLDEwKSxvPW5ldyBhcihscigkcyhCKS5hLktjKCksbmV3IEgpKTtWcihvKTspaWYocz11KElyKG8pLDE3KSxzLmMuaSE9cy5kLmkmJmVudChzLmIsJGJlKSl7Zm9yKFc9SGFuKHMpLEc9SGQocy5iLmMubGVuZ3RoKSxuPVJibih0LHMsVyxHKSxNLmNbTS5jLmxlbmd0aF09bixyPW4ubyxkPW5ldyB4YShzLmIsMCk7ZC5iPGQuZC5nYygpOyl3PShabihkLmI8ZC5kLmdjKCkpLHUoZC5kLlhiKGQuYz1kLmIrKyksNzApKSxHdChLKHcsRGQpKT09PUd0KChEMSgpLFRFKSkmJihfPT0oZm8oKSxaMCl8fF89PVEwPyhyLmErPXcuby5hK2ssci5iPWIuTWF0aC5tYXgoci5iLHcuby5iKSk6KHIuYT1iLk1hdGgubWF4KHIuYSx3Lm8uYSksci5iKz13Lm8uYitrKSxHLmNbRy5jLmxlbmd0aF09dyxEbChkKSk7Xz09KGZvKCksWjApfHxfPT1RMD8oci5hLT1rLHIuYis9aCtXKTpyLmIrPWgtaytXfVJzKHQuYSxNKSxvcihlKX1mdW5jdGlvbiBaM24odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLF8sTSxCLHE7Zm9yKG89bmV3IExvZShlKSxNPSR2bih0LGUsbykscT1iLk1hdGgubWF4KFp0KHZlKEsoZSwoeGUoKSxYZykpKSksMSksXz1uZXcgUyhNLmEpO18uYTxfLmMuYy5sZW5ndGg7KWs9dShRKF8pLDQ2KSx3PUJpZSh1KGsuYSw4KSx1KGsuYiw4KSxxKSxFPSEwLEU9RSZOdihuLG5ldyBSZSh3LmMsdy5kKSksRT1FJk52KG4sRm0obmV3IFJlKHcuYyx3LmQpLHcuYiwwKSksRT1FJk52KG4sRm0obmV3IFJlKHcuYyx3LmQpLDAsdy5hKSksRSZOdihuLEZtKG5ldyBSZSh3LmMsdy5kKSx3LmIsdy5hKSk7c3dpdGNoKEI9by5kLGQ9QmllKHUoTS5iLmEsOCksdShNLmIuYiw4KSxxKSxCPT0oYmUoKSxCbil8fEI9PUhuPyhyLmNbQi5nXT1iLk1hdGgubWluKHIuY1tCLmddLGQuZCksci5iW0IuZ109Yi5NYXRoLm1heChyLmJbQi5nXSxkLmQrZC5hKSk6KHIuY1tCLmddPWIuTWF0aC5taW4oci5jW0IuZ10sZC5jKSxyLmJbQi5nXT1iLk1hdGgubWF4KHIuYltCLmddLGQuYytkLmIpKSxzPU5zLGg9by5jLmkuZCxCLmcpe2Nhc2UgNDpzPWguYzticmVhaztjYXNlIDI6cz1oLmI7YnJlYWs7Y2FzZSAxOnM9aC5hO2JyZWFrO2Nhc2UgMzpzPWguZH1yZXR1cm4gci5hW0IuZ109Yi5NYXRoLm1heChyLmFbQi5nXSxzKSxvfWZ1bmN0aW9uIEozbih0KXt2YXIgZSxuLHIscztpZihuPXQuRCE9bnVsbD90LkQ6dC5CLGU9dWQobixMdSg5MSkpLGUhPS0xKXtyPW4uc3Vic3RyKDAsZSkscz1uZXcgX2c7ZG8gcy5hKz0iWyI7d2hpbGUoKGU9Yzgobiw5MSwrK2UpKSE9LTEpO3VuKHIsY3gpP3MuYSs9IloiOnVuKHIsUUMpP3MuYSs9IkIiOnVuKHIsVEgpP3MuYSs9IkMiOnVuKHIsWkMpP3MuYSs9IkQiOnVuKHIsSkMpP3MuYSs9IkYiOnVuKHIsdFMpP3MuYSs9IkkiOnVuKHIsZVMpP3MuYSs9IkoiOnVuKHIsblMpP3MuYSs9IlMiOihzLmErPSJMIixzLmErPSIiK3Iscy5hKz0iOyIpO3RyeXtyZXR1cm4gbnVsbH1jYXRjaChvKXtpZihvPXJzKG8pLCFfdChvLDYwKSl0aHJvdyBudChvKX19ZWxzZSBpZih1ZChuLEx1KDQ2KSk9PS0xKXtpZih1bihuLGN4KSlyZXR1cm4geGw7aWYodW4obixRQykpcmV0dXJuIFh1O2lmKHVuKG4sVEgpKXJldHVybiBFaDtpZih1bihuLFpDKSlyZXR1cm4gZ2E7aWYodW4obixKQykpcmV0dXJuIHIzO2lmKHVuKG4sdFMpKXJldHVybiBTcjtpZih1bihuLGVTKSlyZXR1cm4gRGI7aWYodW4obixuUykpcmV0dXJuIGQ1fXJldHVybiBudWxsfWZ1bmN0aW9uIHNoZSh0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssXztmb3Ioaz1uZXcgSDAobiksQm8oayxlKSxlZShrLChhZSgpLElpKSxlKSxrLm8uYT1lLmcsay5vLmI9ZS5mLGsubi5hPWUuaSxrLm4uYj1lLmosdWUobi5hLGspLEFpKHQuYSxlLGspLCgoIWUuYSYmKGUuYT1uZXcgaGUoZHMsZSwxMCwxMSkpLGUuYSkuaSE9MHx8QmUoRmUoemUoZSwoeGUoKSwkeSkpKSkpJiZlZShrLEc5dCwoRm4oKSwhMCkpLHc9dShLKG4sV2MpLDIxKSxfPXUoSyhrLCh4ZSgpLHdzKSksOTgpLF89PSh2YSgpLGtiKT9lZShrLHdzLFUxKTpfIT1VMSYmdy5GYygoZ28oKSxsRSkpLHI9dShLKG4sWGwpLDEwMyksZD1uZXcgbnIoKCFlLmMmJihlLmM9bmV3IGhlKHlsLGUsOSw5KSksZS5jKSk7ZC5lIT1kLmkuZ2MoKTspaD11KGRyKGQpLDExOCksQmUoRmUoemUoaCxqMikpKXx8QTRuKHQsaCxrLHcscixfKTtmb3Iobz1uZXcgbnIoKCFlLm4mJihlLm49bmV3IGhlKFlvLGUsMSw3KSksZS5uKSk7by5lIT1vLmkuZ2MoKTspcz11KGRyKG8pLDEzNyksIUJlKEZlKHplKHMsajIpKSkmJnMuYSYmdWUoay5iLFBpdChzKSk7cmV0dXJuIEJlKEZlKEsoayxrUykpKSYmdy5GYygoZ28oKSxSVikpLEJlKEZlKEsoayxKVikpKSYmKHcuRmMoKGdvKCksalYpKSx3LkZjKHZTKSxlZShrLHdzLFUxKSksa31mdW5jdGlvbiB0NG4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFosYnQsTXQsU3QsanQsUXQsY2UsX2UsV2UsUWUsUm47ZD11KHRyKGUuYyx0KSw0NTkpLE10PWUuYS5jLHc9ZS5hLmMrZS5hLmIsUWU9ZC5mLFJuPWQuYSxoPVFlPFJuLFc9bmV3IFJlKE10LFFlKSxTdD1uZXcgUmUodyxSbikscz0oTXQrdykvMixaPW5ldyBSZShzLFFlKSxqdD1uZXcgUmUocyxSbiksbz1oMm4odCxRZSxSbiksY2U9UzEoZS5CKSxfZT1uZXcgUmUocyxvKSxXZT1TMShlLkQpLG49TmNuKHV0KG90KG5hLDEpLHJlLDgsMCxbY2UsX2UsV2VdKSkscT0hMSxidD1lLkIuaSxidCYmYnQuYyYmZC5kJiYoaz1oJiZidC5wPGJ0LmMuYS5jLmxlbmd0aC0xfHwhaCYmYnQucD4wLGs/ayYmKEI9YnQucCxoPysrQjotLUIsTT11KFBlKGJ0LmMuYSxCKSwxMCkscj1ZbmUoTSkscT0hKEpzdChyLGNlLG5bMF0pfHxTWXQocixjZSxuWzBdKSkpOnE9ITApLEc9ITEsUXQ9ZS5ELmksUXQmJlF0LmMmJmQuZSYmKF89aCYmUXQucD4wfHwhaCYmUXQucDxRdC5jLmEuYy5sZW5ndGgtMSxfPyhCPVF0LnAsaD8tLUI6KytCLE09dShQZShRdC5jLmEsQiksMTApLHI9WW5lKE0pLEc9IShKc3QocixuWzBdLFdlKXx8U1l0KHIsblswXSxXZSkpKTpHPSEwKSxxJiZHJiZhaSh0LmEsX2UpLHF8fHpfKHQuYSx1dChvdChuYSwxKSxyZSw4LDAsW1csWl0pKSxHfHx6Xyh0LmEsdXQob3QobmEsMSkscmUsOCwwLFtqdCxTdF0pKX1mdW5jdGlvbiBfcSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGs7aWYoX3QodC5VZygpLDE2MCk/KF9xKHUodC5VZygpLDE2MCksZSksZS5hKz0iID4gIik6ZS5hKz0iUm9vdCAiLG49dC5UZygpLnpiLHVuKG4uc3Vic3RyKDAsMyksIkVsayIpP1lyKGUsbi5zdWJzdHIoMykpOmUuYSs9IiIrbixzPXQuemcoKSxzKXtZcigoZS5hKz0iICIsZSkscyk7cmV0dXJufWlmKF90KHQsMzU0KSYmKGs9dSh0LDEzNykuYSxrKSl7WXIoKGUuYSs9IiAiLGUpLGspO3JldHVybn1mb3IoaD1uZXcgbnIodC5BZygpKTtoLmUhPWguaS5nYygpOylpZihvPXUoZHIoaCksMTM3KSxrPW8uYSxrKXtZcigoZS5hKz0iICIsZSksayk7cmV0dXJufWlmKF90KHQsMzUyKSYmKHI9dSh0LDc5KSwhci5iJiYoci5iPW5ldyBFbih2cixyLDQsNykpLHIuYi5pIT0wJiYoIXIuYyYmKHIuYz1uZXcgRW4odnIsciw1LDgpKSxyLmMuaSE9MCkpKXtmb3IoZS5hKz0iICgiLGQ9bmV3IEE2KCghci5iJiYoci5iPW5ldyBFbih2cixyLDQsNykpLHIuYikpO2QuZSE9ZC5pLmdjKCk7KWQuZT4wJiYoZS5hKz1YYSksX3EodShkcihkKSwxNjApLGUpO2ZvcihlLmErPUJvdCx3PW5ldyBBNigoIXIuYyYmKHIuYz1uZXcgRW4odnIsciw1LDgpKSxyLmMpKTt3LmUhPXcuaS5nYygpOyl3LmU+MCYmKGUuYSs9WGEpLF9xKHUoZHIodyksMTYwKSxlKTtlLmErPSIpIn19ZnVuY3Rpb24gZTRuKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxfLE0sQixxO2lmKG89dShLKHQsKGFlKCksSWkpKSw3OSksISFvKXtmb3Iocj10LmEscz1uZXcgU28obiksRmkocyxHMW4odCkpLEg4KHQuZC5pLHQuYy5pKT8oQj10LmMsTT1uYyh1dChvdChuYSwxKSxyZSw4LDAsW0IubixCLmFdKSksZmEoTSxuKSk6TT1TMSh0LmMpLGtzKHIsTSxyLmEsci5hLmEpLHE9UzEodC5kKSxLKHQscWx0KSE9bnVsbCYmRmkocSx1KEsodCxxbHQpLDgpKSxrcyhyLHEsci5jLmIsci5jKSxKbShyLHMpLGg9eTQobywhMCwhMCksWiQoaCx1KEF0KCghby5iJiYoby5iPW5ldyBFbih2cixvLDQsNykpLG8uYiksMCksODIpKSxKJChoLHUoQXQoKCFvLmMmJihvLmM9bmV3IEVuKHZyLG8sNSw4KSksby5jKSwwKSw4MikpLHlJKHIsaCksXz1uZXcgUyh0LmIpO18uYTxfLmMuYy5sZW5ndGg7KWs9dShRKF8pLDcwKSxkPXUoSyhrLElpKSwxMzcpLFF2KGQsay5vLmEpLFh2KGQsay5vLmIpLGsxKGQsay5uLmErcy5hLGsubi5iK3MuYiksRW8oZCwoWTYoKSxvbHQpLEZlKEsoayxvbHQpKSk7dz11KEsodCwoeGUoKSxPbykpLDc0KSx3PyhKbSh3LHMpLEVvKG8sT28sdykpOkVvKG8sT28sbnVsbCksZT09KHEwKCkscXgpP0VvKG8sWDAscXgpOkVvKG8sWDAsbnVsbCl9fWZ1bmN0aW9uIG40bih0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWixidCxNdDtmb3IocT1lLmMubGVuZ3RoLEI9MCxNPW5ldyBTKHQuYik7TS5hPE0uYy5jLmxlbmd0aDspaWYoXz11KFEoTSksMjkpLGJ0PV8uYSxidC5jLmxlbmd0aCE9MCl7Zm9yKFo9bmV3IFMoYnQpLGs9MCxNdD1udWxsLHM9dShRKFopLDEwKSxvPW51bGw7czspe2lmKG89dShQZShlLHMucCksMjU3KSxvLmM+PTApe2Zvcih3PW51bGwsZD1uZXcgeGEoXy5hLGsrMSk7ZC5iPGQuZC5nYygpJiYoaD0oWm4oZC5iPGQuZC5nYygpKSx1KGQuZC5YYihkLmM9ZC5iKyspLDEwKSksdz11KFBlKGUsaC5wKSwyNTcpLCEody5kPT1vLmQmJncuYzxvLmMpKTspdz1udWxsO3cmJihNdCYmKGxoKHIscy5wLGRlKHUoUGUocixzLnApLDE5KS5hLTEpKSx1KFBlKG4sTXQucCksMTUpLk1jKG8pKSxvPUZkbihvLHMscSsrKSxlLmNbZS5jLmxlbmd0aF09byx1ZShuLG5ldyBsZSksTXQ/KHUoUGUobixNdC5wKSwxNSkuRmMobyksdWUocixkZSgxKSkpOnVlKHIsZGUoMCkpKX1HPW51bGwsWi5hPFouYy5jLmxlbmd0aCYmKEc9dShRKFopLDEwKSxXPXUoUGUoZSxHLnApLDI1NyksdShQZShuLHMucCksMTUpLkZjKFcpLGxoKHIsRy5wLGRlKHUoUGUocixHLnApLDE5KS5hKzEpKSksby5kPUIsby5jPWsrKyxNdD1zLHM9R30rK0J9fWZ1bmN0aW9uIE1hdCh0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWixidCxNdCxTdDtyZXR1cm4gdz10LF89ZmEobmV3IFJlKGUuYSxlLmIpLHQpLGs9bixNPWZhKG5ldyBSZShyLmEsci5iKSxuKSxCPXcuYSxaPXcuYixHPWsuYSxNdD1rLmIscT1fLmEsYnQ9Xy5iLFc9TS5hLFN0PU0uYixzPVcqYnQtcSpTdCxFMSgpLHZmKFRkKSxiLk1hdGguYWJzKDAtcyk8PVRkfHxzPT0wfHxpc05hTigwKSYmaXNOYU4ocyk/ITE6KGg9MS9zKigoQi1HKSpidC0oWi1NdCkqcSksZD0xL3MqLSgtKEItRykqU3QrKFotTXQpKlcpLG89KHZmKFRkKSwoYi5NYXRoLmFicygwLWgpPD1UZHx8aD09MHx8aXNOYU4oMCkmJmlzTmFOKGgpPzA6MDxoPy0xOjA+aD8xOkx2KGlzTmFOKDApLGlzTmFOKGgpKSk8MCYmKHZmKFRkKSwoYi5NYXRoLmFicyhoLTEpPD1UZHx8aD09MXx8aXNOYU4oaCkmJmlzTmFOKDEpPzA6aDwxPy0xOmg+MT8xOkx2KGlzTmFOKGgpLGlzTmFOKDEpKSk8MCkmJih2ZihUZCksKGIuTWF0aC5hYnMoMC1kKTw9VGR8fGQ9PTB8fGlzTmFOKDApJiZpc05hTihkKT8wOjA8ZD8tMTowPmQ/MTpMdihpc05hTigwKSxpc05hTihkKSkpPDApJiYodmYoVGQpLChiLk1hdGguYWJzKGQtMSk8PVRkfHxkPT0xfHxpc05hTihkKSYmaXNOYU4oMSk/MDpkPDE/LTE6ZD4xPzE6THYoaXNOYU4oZCksaXNOYU4oMSkpKTwwKSksbyl9ZnVuY3Rpb24gcjRuKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxfLE0sQixxLEcsVyxaLGJ0LE10LFN0LGp0LFF0LGNlO2ZvcihNPW5ldyB2d3QobmV3IER0KHQpKTtNLmIhPU0uYy5hLmQ7KWZvcihfPXV0ZShNKSxkPXUoXy5kLDU2KSxlPXUoXy5lLDU2KSxoPWQuVGcoKSxXPTAsanQ9KGguaT09bnVsbCYmYmQoaCksaC5pKS5sZW5ndGg7VzxqdDsrK1cpaWYoaz0obz0oaC5pPT1udWxsJiZiZChoKSxoLmkpLFc+PTAmJlc8by5sZW5ndGg/b1tXXTpudWxsKSxrLklqKCkmJiFrLkpqKCkpe2lmKF90KGssOTkpKXc9dShrLDE4KSwhKHcuQmImeWMpJiYoY2U9b28odyksIShjZSYmY2UuQmImeWMpKSYmSG1uKHQsdyxkLGUpO2Vsc2UgaWYoc28oKSx1KGssNjYpLk9qKCkmJihuPShRdD1rLHUoUXQ/dShlLDQ5KS54aChRdCk6bnVsbCwxNTMpKSxuKSlmb3IocT11KGQuYWgoayksMTUzKSxyPW4uZ2MoKSxaPTAsRz1xLmdjKCk7WjxHOysrWilpZihCPXEuaWwoWiksX3QoQiw5OSkpe2lmKFN0PXEuamwoWikscz1Xdih0LFN0KSxzPT1udWxsJiZTdCE9bnVsbCl7aWYoTXQ9dShCLDE4KSwhdC5ifHxNdC5CYiZ5Y3x8b28oTXQpKWNvbnRpbnVlO3M9U3R9aWYoIW4uZGwoQixzKSl7Zm9yKGJ0PTA7YnQ8cjsrK2J0KWlmKG4uaWwoYnQpPT1CJiZHdChuLmpsKGJ0KSk9PT1HdChzKSl7bi5paShuLmdjKCktMSxidCksLS1yO2JyZWFrfX19ZWxzZSBuLmRsKHEuaWwoWikscS5qbChaKSl9fWZ1bmN0aW9uIGk0bih0LGUsbixyLHMsbyxoKXt2YXIgZCx3LGssXyxNLEIscSxHLFcsWixidCxNdCxTdDtpZihidD1jeW4oZSxuLHQuZykscy5uJiZzLm4mJm8mJmdmKHMscGYobyksKE9sKCksdGgpKSx0LmIpZm9yKFo9MDtaPGJ0LmMubGVuZ3RoO1orKylNPShTbihaLGJ0LmMubGVuZ3RoKSx1KGJ0LmNbWl0sMjAwKSksWiE9MCYmKHE9KFNuKFotMSxidC5jLmxlbmd0aCksdShidC5jW1otMV0sMjAwKSksRXJlKE0scS5mK3EuYit0LmcpKSx3NW4oWixidCxuLHQuZyksdzFuKHQsTSkscy5uJiZvJiZnZihzLHBmKG8pLChPbCgpLHRoKSk7ZWxzZSBmb3IoVz1uZXcgUyhidCk7Vy5hPFcuYy5jLmxlbmd0aDspZm9yKEc9dShRKFcpLDIwMCksXz1uZXcgUyhHLmEpO18uYTxfLmMuYy5sZW5ndGg7KWs9dShRKF8pLDE4NyksTXQ9bmV3IEl3dChrLnMsay50LHQuZyksc3l0KE10LGspLHVlKEcuZCxNdCk7cmV0dXJuIFNmbih0LGJ0KSxzLm4mJnMubiYmbyYmZ2YocyxwZihvKSwoT2woKSx0aCkpLFN0PWIuTWF0aC5tYXgodC5kLHIuYS0oaC5iK2guYykpLEI9Yi5NYXRoLm1heCh0LmMsci5iLShoLmQraC5hKSksZD1CLXQuYyx0LmUmJnQuZiYmKHc9U3QvQix3PHQuYT9TdD1CKnQuYTpkKz1TdC90LmEtQiksdC5lJiZKbG4oYnQsU3QsZCkscy5uJiZzLm4mJm8mJmdmKHMscGYobyksKE9sKCksdGgpKSxuZXcgQ250KHQuYSxTdCx0LmMrZCwodzcoKSxIUykpfWZ1bmN0aW9uIHM0bih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssXyxNO2Zvcih0Lmo9TnQoU3IsSnIsMjUsdC5nLDE1LDEpLHQubz1uZXcgbGUseXMoZWMobmV3IGtuKG51bGwsbmV3IFRuKHQuZS5iLDE2KSksbmV3IEs1KSxuZXcgXyR0KHQpKSx0LmE9TnQoeGwsaTAsMjUsdC5iLDE2LDEpLHFEKG5ldyBrbihudWxsLG5ldyBUbih0LmUuYiwxNikpLG5ldyBTJHQodCkpLHI9KE09bmV3IGxlLHlzKFdpKGVjKG5ldyBrbihudWxsLG5ldyBUbih0LmUuYiwxNikpLG5ldyB5USksbmV3IEMkdCh0KSksbmV3IEpWdCh0LE0pKSxNKSx3PW5ldyBTKHIpO3cuYTx3LmMuYy5sZW5ndGg7KWlmKGQ9dShRKHcpLDUwOCksIShkLmMubGVuZ3RoPD0xKSl7aWYoZC5jLmxlbmd0aD09Mil7UXBuKGQpLEVhdCgoU24oMCxkLmMubGVuZ3RoKSx1KGQuY1swXSwxNykpLmQuaSl8fHVlKHQubyxkKTtjb250aW51ZX1pZighKEVkbihkKXx8ZmduKGQsbmV3IFJGKSkpZm9yKGs9bmV3IFMoZCkscz1udWxsO2suYTxrLmMuYy5sZW5ndGg7KWU9dShRKGspLDE3KSxuPXQuY1tlLnBdLCFzfHxrLmE+PWsuYy5jLmxlbmd0aD9fPVF3dCgoR24oKSxxcyksY2EpOl89UXd0KChHbigpLGNhKSxjYSksXyo9MixvPW4uYS5nLG4uYS5nPWIuTWF0aC5tYXgobyxvKyhfLW8pKSxoPW4uYi5nLG4uYi5nPWIuTWF0aC5tYXgoaCxoKyhfLWgpKSxzPWV9fWZ1bmN0aW9uIGE0bih0LGUsbixyLHMpe3ZhciBvLGgsZCx3LGssXyxNLEIscSxHLFcsWixidCxNdCxTdCxqdCxRdDtmb3IoUXQ9X0t0KHQpLF89bmV3IGxlLGQ9dC5jLmxlbmd0aCxNPWQtMSxCPWQrMTtRdC5hLmMhPTA7KXtmb3IoO24uYiE9MDspU3Q9KFpuKG4uYiE9MCksdShmaChuLG4uYS5hKSwxMTIpKSxEXyhRdC5hLFN0KSE9bnVsbCxTdC5nPU0tLSx0NnQoU3QsZSxuLHIpO2Zvcig7ZS5iIT0wOylqdD0oWm4oZS5iIT0wKSx1KGZoKGUsZS5hLmEpLDExMikpLERfKFF0LmEsanQpIT1udWxsLGp0Lmc9QisrLHQ2dChqdCxlLG4scik7Zm9yKGs9T2EsYnQ9KGg9bmV3IHZfKG5ldyBnXyhuZXcgeShRdC5hKS5hKS5iKSxuZXcgZyhoKSk7bU0oYnQuYS5hKTspe2lmKFo9KG89d2ooYnQuYSksdShvLmNkKCksMTEyKSksIXImJlouYj4wJiZaLmE8PTApe18uYz1OdChRbixNZSwxLDAsNSwxKSxfLmNbXy5jLmxlbmd0aF09WjticmVha31XPVouaS1aLmQsVz49ayYmKFc+ayYmKF8uYz1OdChRbixNZSwxLDAsNSwxKSxrPVcpLF8uY1tfLmMubGVuZ3RoXT1aKX1fLmMubGVuZ3RoIT0wJiYodz11KFBlKF8senoocyxfLmMubGVuZ3RoKSksMTEyKSxEXyhRdC5hLHcpIT1udWxsLHcuZz1CKyssdDZ0KHcsZSxuLHIpLF8uYz1OdChRbixNZSwxLDAsNSwxKSl9Zm9yKE10PXQuYy5sZW5ndGgrMSxHPW5ldyBTKHQpO0cuYTxHLmMuYy5sZW5ndGg7KXE9dShRKEcpLDExMikscS5nPGQmJihxLmc9cS5nK010KX1mdW5jdGlvbiBDcSh0LGUpe3ZhciBuO2lmKHQuZSl0aHJvdyBudChuZXcgSG8oKEwwKEl1dCksd290K0l1dC5rK21vdCkpKTtpZighQVllKHQuYSxlKSl0aHJvdyBudChuZXcgWm8odmZlK2Urd2ZlKSk7aWYoZT09dC5kKXJldHVybiB0O3N3aXRjaChuPXQuZCx0LmQ9ZSxuLmcpe2Nhc2UgMDpzd2l0Y2goZS5nKXtjYXNlIDI6b3codCk7YnJlYWs7Y2FzZSAxOllwKHQpLG93KHQpO2JyZWFrO2Nhc2UgNDpkNCh0KSxvdyh0KTticmVhaztjYXNlIDM6ZDQodCksWXAodCksb3codCl9YnJlYWs7Y2FzZSAyOnN3aXRjaChlLmcpe2Nhc2UgMTpZcCh0KSxzYXQodCk7YnJlYWs7Y2FzZSA0OmQ0KHQpLG93KHQpO2JyZWFrO2Nhc2UgMzpkNCh0KSxZcCh0KSxvdyh0KX1icmVhaztjYXNlIDE6c3dpdGNoKGUuZyl7Y2FzZSAyOllwKHQpLHNhdCh0KTticmVhaztjYXNlIDQ6WXAodCksZDQodCksb3codCk7YnJlYWs7Y2FzZSAzOllwKHQpLGQ0KHQpLFlwKHQpLG93KHQpfWJyZWFrO2Nhc2UgNDpzd2l0Y2goZS5nKXtjYXNlIDI6ZDQodCksb3codCk7YnJlYWs7Y2FzZSAxOmQ0KHQpLFlwKHQpLG93KHQpO2JyZWFrO2Nhc2UgMzpZcCh0KSxzYXQodCl9YnJlYWs7Y2FzZSAzOnN3aXRjaChlLmcpe2Nhc2UgMjpZcCh0KSxkNCh0KSxvdyh0KTticmVhaztjYXNlIDE6WXAodCksZDQodCksWXAodCksb3codCk7YnJlYWs7Y2FzZSA0OllwKHQpLHNhdCh0KX19cmV0dXJuIHR9ZnVuY3Rpb24gXzQodCxlKXt2YXIgbjtpZih0LmQpdGhyb3cgbnQobmV3IEhvKChMMCh0bHQpLHdvdCt0bHQuayttb3QpKSk7aWYoIUxZZSh0LmEsZSkpdGhyb3cgbnQobmV3IFpvKHZmZStlK3dmZSkpO2lmKGU9PXQuYylyZXR1cm4gdDtzd2l0Y2gobj10LmMsdC5jPWUsbi5nKXtjYXNlIDA6c3dpdGNoKGUuZyl7Y2FzZSAyOmYyKHQpO2JyZWFrO2Nhc2UgMTpLcCh0KSxmMih0KTticmVhaztjYXNlIDQ6ZzQodCksZjIodCk7YnJlYWs7Y2FzZSAzOmc0KHQpLEtwKHQpLGYyKHQpfWJyZWFrO2Nhc2UgMjpzd2l0Y2goZS5nKXtjYXNlIDE6S3AodCksYWF0KHQpO2JyZWFrO2Nhc2UgNDpnNCh0KSxmMih0KTticmVhaztjYXNlIDM6ZzQodCksS3AodCksZjIodCl9YnJlYWs7Y2FzZSAxOnN3aXRjaChlLmcpe2Nhc2UgMjpLcCh0KSxhYXQodCk7YnJlYWs7Y2FzZSA0OktwKHQpLGc0KHQpLGYyKHQpO2JyZWFrO2Nhc2UgMzpLcCh0KSxnNCh0KSxLcCh0KSxmMih0KX1icmVhaztjYXNlIDQ6c3dpdGNoKGUuZyl7Y2FzZSAyOmc0KHQpLGYyKHQpO2JyZWFrO2Nhc2UgMTpnNCh0KSxLcCh0KSxmMih0KTticmVhaztjYXNlIDM6S3AodCksYWF0KHQpfWJyZWFrO2Nhc2UgMzpzd2l0Y2goZS5nKXtjYXNlIDI6S3AodCksZzQodCksZjIodCk7YnJlYWs7Y2FzZSAxOktwKHQpLGc0KHQpLEtwKHQpLGYyKHQpO2JyZWFrO2Nhc2UgNDpLcCh0KSxhYXQodCl9fXJldHVybiB0fWZ1bmN0aW9uIG80bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssXztmb3Iodz1uZXcgbnIoKCF0LmEmJih0LmE9bmV3IGhlKGRzLHQsMTAsMTEpKSx0LmEpKTt3LmUhPXcuaS5nYygpOylmb3IoZD11KGRyKHcpLDMzKSxzPW5ldyBhcihscihWMChkKS5hLktjKCksbmV3IEgpKTtWcihzKTspe2lmKHI9dShJcihzKSw3OSksIXIuYiYmKHIuYj1uZXcgRW4odnIsciw0LDcpKSwhKHIuYi5pPD0xJiYoIXIuYyYmKHIuYz1uZXcgRW4odnIsciw1LDgpKSxyLmMuaTw9MSkpKXRocm93IG50KG5ldyBGVCgiR3JhcGggbXVzdCBub3QgY29udGFpbiBoeXBlcmVkZ2VzLiIpKTtpZighZ0MocikmJmQhPVJvKHUoQXQoKCFyLmMmJihyLmM9bmV3IEVuKHZyLHIsNSw4KSksci5jKSwwKSw4MikpKWZvcihrPW5ldyBGV3QsQm8oayxyKSxlZShrLChVcCgpLFR4KSxyKSx5dHQoayx1KGNjKEZvKG4uZixkKSksMTQ0KSksdzEoayx1KHRyKG4sUm8odShBdCgoIXIuYyYmKHIuYz1uZXcgRW4odnIsciw1LDgpKSxyLmMpLDApLDgyKSkpLDE0NCkpLHVlKGUuYyxrKSxoPW5ldyBucigoIXIubiYmKHIubj1uZXcgaGUoWW8sciwxLDcpKSxyLm4pKTtoLmUhPWguaS5nYygpOylvPXUoZHIoaCksMTM3KSxfPW5ldyBqWnQoayxvLmEpLEJvKF8sbyksZWUoXyxUeCxvKSxfLmUuYT1iLk1hdGgubWF4KG8uZywxKSxfLmUuYj1iLk1hdGgubWF4KG8uZiwxKSxyNnQoXyksdWUoZS5kLF8pfX1mdW5jdGlvbiBjNG4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFosYnQsTXQsU3Q7Zm9yKE09bmV3IHY2dCh0KSxhcm4oTSwhKGU9PShmbygpLFowKXx8ZT09UTApKSxfPU0uYSxCPW5ldyB2NixzPShaZigpLHV0KG90KE15LDEpLG9lLDIzMiwwLFtmYyxpdSxkY10pKSxoPTAsdz1zLmxlbmd0aDtoPHc7KytoKW49c1toXSxrPW5udChfLGZjLG4pLGsmJihCLmQ9Yi5NYXRoLm1heChCLmQsay5SZSgpKSk7Zm9yKHI9dXQob3QoTXksMSksb2UsMjMyLDAsW2ZjLGl1LGRjXSksbz0wLGQ9ci5sZW5ndGg7bzxkOysrbyluPXJbb10saz1ubnQoXyxkYyxuKSxrJiYoQi5hPWIuTWF0aC5tYXgoQi5hLGsuUmUoKSkpO2ZvcihXPXV0KG90KE15LDEpLG9lLDIzMiwwLFtmYyxpdSxkY10pLGJ0PTAsU3Q9Vy5sZW5ndGg7YnQ8U3Q7KytidClxPVdbYnRdLGs9bm50KF8scSxmYyksayYmKEIuYj1iLk1hdGgubWF4KEIuYixrLlNlKCkpKTtmb3IoRz11dChvdChNeSwxKSxvZSwyMzIsMCxbZmMsaXUsZGNdKSxaPTAsTXQ9Ry5sZW5ndGg7WjxNdDsrK1opcT1HW1pdLGs9bm50KF8scSxkYyksayYmKEIuYz1iLk1hdGgubWF4KEIuYyxrLlNlKCkpKTtyZXR1cm4gQi5kPjAmJihCLmQrPV8ubi5kLEIuZCs9Xy5kKSxCLmE+MCYmKEIuYSs9Xy5uLmEsQi5hKz1fLmQpLEIuYj4wJiYoQi5iKz1fLm4uYixCLmIrPV8uZCksQi5jPjAmJihCLmMrPV8ubi5jLEIuYys9Xy5kKSxCfWZ1bmN0aW9uIGFoZSh0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssXyxNLEIscSxHO2ZvcihCPW4uZCxNPW4uYyxvPW5ldyBSZShuLmYuYStuLmQuYituLmQuYyxuLmYuYituLmQuZCtuLmQuYSksaD1vLmIsaz1uZXcgUyh0LmEpO2suYTxrLmMuYy5sZW5ndGg7KWlmKGQ9dShRKGspLDEwKSxkLms9PShHbigpLElzKSl7c3dpdGNoKHI9dShLKGQsKGFlKCksZ2MpKSw2MSkscz11KEsoZCxLOXQpLDgpLF89ZC5uLHIuZyl7Y2FzZSAyOl8uYT1uLmYuYStCLmMtTS5hO2JyZWFrO2Nhc2UgNDpfLmE9LU0uYS1CLmJ9c3dpdGNoKEc9MCxyLmcpe2Nhc2UgMjpjYXNlIDQ6ZT09KHZhKCksaDApPyhxPVp0KHZlKEsoZCxJdykpKSxfLmI9by5iKnEtdShLKGQsKHhlKCksUHcpKSw4KS5iLEc9Xy5iK3MuYixmeihkLCExLCEwKSk6ZT09S2MmJihfLmI9WnQodmUoSyhkLEl3KSkpLXUoSyhkLCh4ZSgpLFB3KSksOCkuYixHPV8uYitzLmIsZnooZCwhMSwhMCkpfWg9Yi5NYXRoLm1heChoLEcpfWZvcihuLmYuYis9aC1vLmIsdz1uZXcgUyh0LmEpO3cuYTx3LmMuYy5sZW5ndGg7KWlmKGQ9dShRKHcpLDEwKSxkLms9PShHbigpLElzKSlzd2l0Y2gocj11KEsoZCwoYWUoKSxnYykpLDYxKSxfPWQubixyLmcpe2Nhc2UgMTpfLmI9LU0uYi1CLmQ7YnJlYWs7Y2FzZSAzOl8uYj1uLmYuYitCLmEtTS5ifX1mdW5jdGlvbiB1NG4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFosYnQsTXQsU3QsanQsUXQsY2UsX2UsV2U7Zm9yKHM9dShLKHQsKG1jKCksalMpKSwzMyksaz1UaSxfPVRpLGQ9T2Esdz1PYSxjZT1zaSh0LmIsMCk7Y2UuYiE9Y2UuZC5jOylqdD11KGlpKGNlKSw4NiksVz1qdC5lLFo9anQuZixrPWIuTWF0aC5taW4oayxXLmEtWi5hLzIpLF89Yi5NYXRoLm1pbihfLFcuYi1aLmIvMiksZD1iLk1hdGgubWF4KGQsVy5hK1ouYS8yKSx3PWIuTWF0aC5tYXgodyxXLmIrWi5iLzIpO2ZvcihHPXUoemUocywoaHcoKSxzeWUpKSwxMTYpLHE9bmV3IFJlKEcuYi1rLEcuZC1fKSxRdD1zaSh0LmIsMCk7UXQuYiE9UXQuZC5jOylqdD11KGlpKFF0KSw4NiksQj1LKGp0LGpTKSxfdChCLDIzOSkmJihvPXUoQiwzMyksTT1GaShqdC5lLHEpLGsxKG8sTS5hLW8uZy8yLE0uYi1vLmYvMikpO2ZvcihTdD1zaSh0LmEsMCk7U3QuYiE9U3QuZC5jOylNdD11KGlpKFN0KSwxODgpLHI9dShLKE10LGpTKSw3OSksciYmKGU9TXQuYSxidD1uZXcgU28oTXQuYi5lKSxrcyhlLGJ0LGUuYSxlLmEuYSksX2U9bmV3IFNvKE10LmMuZSksa3MoZSxfZSxlLmMuYixlLmMpLFNhZShidCx1KGUxKGUsMSksOCksTXQuYi5mKSxTYWUoX2UsdShlMShlLGUuYi0yKSw4KSxNdC5jLmYpLG49eTQociwhMCwhMCkseUkoZSxuKSk7V2U9ZC1rKyhHLmIrRy5jKSxoPXctXysoRy5kK0cuYSksZ3cocyxXZSxoLCExLCExKX1mdW5jdGlvbiBsNG4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFosYnQsTXQsU3Q7Zm9yKE09dC5iLF89bmV3IHhhKE0sMCksUm0oXyxuZXcgTGgodCkpLE10PSExLGg9MTtfLmI8Xy5kLmdjKCk7KXtmb3Ioaz0oWm4oXy5iPF8uZC5nYygpKSx1KF8uZC5YYihfLmM9Xy5iKyspLDI5KSksVz0oU24oaCxNLmMubGVuZ3RoKSx1KE0uY1toXSwyOSkpLFo9VnYoay5hKSxidD1aLmMubGVuZ3RoLEc9bmV3IFMoWik7Ry5hPEcuYy5jLmxlbmd0aDspQj11KFEoRyksMTApLExvKEIsVyk7aWYoTXQpe2ZvcihxPVJ3dChuZXcgbXYoWiksMCk7cS5jLlNiKCk7KWZvcihCPXUoZkp0KHEpLDEwKSxvPW5ldyBTKFZ2KFVvKEIpKSk7by5hPG8uYy5jLmxlbmd0aDspcz11KFEobyksMTcpLGR3KHMsITApLGVlKHQsKGFlKCkseE8pLChGbigpLCEwKSkscj1CbGUodCxzLGJ0KSxuPXUoSyhCLEx3KSwzMDUpLFN0PXUoUGUocixyLmMubGVuZ3RoLTEpLDE3KSxuLms9U3QuYy5pLG4ubj1TdCxuLmI9cy5kLmksbi5jPXM7TXQ9ITF9ZWxzZSBaLmMubGVuZ3RoIT0wJiYoZT0oU24oMCxaLmMubGVuZ3RoKSx1KFouY1swXSwxMCkpLGUuaz09KEduKCkscTEpJiYoTXQ9ITAsaD0tMSkpOysraH1mb3IoZD1uZXcgeGEodC5iLDApO2QuYjxkLmQuZ2MoKTspdz0oWm4oZC5iPGQuZC5nYygpKSx1KGQuZC5YYihkLmM9ZC5iKyspLDI5KSksdy5hLmMubGVuZ3RoPT0wJiZEbChkKX1mdW5jdGlvbiBoNG4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFosYnQ7aWYoXz11KHUoUGkodC5yLGUpLDIxKSw4NCksXy5nYygpPD0yfHxlPT0oYmUoKSxIbil8fGU9PShiZSgpLEJuKSl7Q2hlKHQsZSk7cmV0dXJufWZvcihXPXQudS5IYygoaWwoKSxIeCkpLG49ZT09KGJlKCksT24pPyh0dygpLGFPKToodHcoKSxzTyksYnQ9ZT09T24/KFR1KCksRWYpOihUdSgpLHMxKSxyPVpwdChidnQobiksdC5zKSxaPWU9PU9uP2JzOk5zLGs9Xy5LYygpO2suT2IoKTspZD11KGsuUGIoKSwxMTEpLCEoIWQuY3x8ZC5jLmQuYy5sZW5ndGg8PTApJiYoRz1kLmIucmYoKSxxPWQuZSxNPWQuYyxCPU0uaSxCLmI9KG89TS5uLE0uZS5hK28uYitvLmMpLEIuYT0oaD1NLm4sTS5lLmIraC5kK2guYSksVz8oQi5jPXEuYS0ocz1NLm4sTS5lLmErcy5iK3MuYyktdC5zLFc9ITEpOkIuYz1xLmErRy5hK3Qucyx0RChidCxVNnQpLE0uZj1idCxYZihNLChybCgpLGtmKSksdWUoci5kLG5ldyBObnQoQixYeXQocixCKSkpLFo9ZT09T24/Yi5NYXRoLm1pbihaLHEuYik6Yi5NYXRoLm1heChaLHEuYitkLmIucmYoKS5iKSk7Zm9yKForPWU9PU9uPy10LnQ6dC50LGYzdCgoci5lPVoscikpLHc9Xy5LYygpO3cuT2IoKTspZD11KHcuUGIoKSwxMTEpLCEoIWQuY3x8ZC5jLmQuYy5sZW5ndGg8PTApJiYoQj1kLmMuaSxCLmMtPWQuZS5hLEIuZC09ZC5lLmIpfWZ1bmN0aW9uIGY0bih0LGUsbil7dmFyIHI7aWYobXIobiwiU3RyZXRjaFdpZHRoIGxheWVyaW5nIiwxKSxlLmEuYy5sZW5ndGg9PTApe29yKG4pO3JldHVybn1mb3IodC5jPWUsdC50PTAsdC51PTAsdC5pPWJzLHQuZz1Ocyx0LmQ9WnQodmUoSyhlLCh4ZSgpLFRmKSkpKSxxaG4odCksVnBuKHQpLEhwbih0KSxXMW4odCksWWxuKHQpLHQuaT1iLk1hdGgubWF4KDEsdC5pKSx0Lmc9Yi5NYXRoLm1heCgxLHQuZyksdC5kPXQuZC90LmksdC5mPXQuZy90LmksdC5zPXJmbih0KSxyPW5ldyBMaCh0LmMpLHVlKHQuYy5iLHIpLHQucj1Wdih0LnApLHQubj1sJCh0LmssdC5rLmxlbmd0aCk7dC5yLmMubGVuZ3RoIT0wOyl0Lm89dnVuKHQpLCF0Lm98fHRyZSh0KSYmdC5iLmEuZ2MoKSE9MD8od2RuKHQscikscj1uZXcgTGgodC5jKSx1ZSh0LmMuYixyKSxLYSh0LmEsdC5iKSx0LmIuYS4kYigpLHQudD10LnUsdC51PTApOnRyZSh0KT8odC5jLmIuYz1OdChRbixNZSwxLDAsNSwxKSxyPW5ldyBMaCh0LmMpLHVlKHQuYy5iLHIpLHQudD0wLHQudT0wLHQuYi5hLiRiKCksdC5hLmEuJGIoKSwrK3QuZix0LnI9VnYodC5wKSx0Lm49bCQodC5rLHQuay5sZW5ndGgpKTooTG8odC5vLHIpLEV1KHQucix0Lm8pLFZzKHQuYix0Lm8pLHQudD10LnQtdC5rW3Quby5wXSp0LmQrdC5qW3Quby5wXSx0LnUrPXQuZVt0Lm8ucF0qdC5kKTtlLmEuYz1OdChRbixNZSwxLDAsNSwxKSxqc3QoZS5iKSxvcihuKX1mdW5jdGlvbiBkNG4odCl7dmFyIGUsbixyLHM7Zm9yKHlzKFdpKG5ldyBrbihudWxsLG5ldyBUbih0LmEuYiwxNikpLG5ldyBtWCksbmV3IHlYKSxzZG4odCkseXMoV2kobmV3IGtuKG51bGwsbmV3IFRuKHQuYS5iLDE2KSksbmV3IHhYKSxuZXcga1gpLHQuYz09KHEwKCkscXgpJiYoeXMoV2koZWMobmV3IGtuKG51bGwsbmV3IFRuKG5ldyBUbSh0LmYpLDEpKSxuZXcgRVgpLG5ldyBUWCksbmV3IE50dCh0KSkseXMoV2koeHUoZWMoZWMobmV3IGtuKG51bGwsbmV3IFRuKHQuZC5iLDE2KSksbmV3IHhGKSxuZXcgX1gpLG5ldyBrRiksbmV3IENYKSxuZXcgRnR0KHQpKSkscz1uZXcgUmUoYnMsYnMpLGU9bmV3IFJlKE5zLE5zKSxyPW5ldyBTKHQuYS5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoUShyKSw1Nykscy5hPWIuTWF0aC5taW4ocy5hLG4uZC5jKSxzLmI9Yi5NYXRoLm1pbihzLmIsbi5kLmQpLGUuYT1iLk1hdGgubWF4KGUuYSxuLmQuYytuLmQuYiksZS5iPWIuTWF0aC5tYXgoZS5iLG4uZC5kK24uZC5hKTtGaShLZih0LmQuYyksbWoobmV3IFJlKHMuYSxzLmIpKSksRmkoS2YodC5kLmYpLGZhKG5ldyBSZShlLmEsZS5iKSxzKSkscDJuKHQscyxlKSxubCh0LmYpLG5sKHQuYiksbmwodC5nKSxubCh0LmUpLHQuYS5hLmM9TnQoUW4sTWUsMSwwLDUsMSksdC5hLmIuYz1OdChRbixNZSwxLDAsNSwxKSx0LmE9bnVsbCx0LmQ9bnVsbH1mdW5jdGlvbiBvaGUodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFosYnQsTXQsU3Q7Zm9yKHM9bmV3IGxlLFc9bmV3IFMoZS5hKTtXLmE8Vy5jLmMubGVuZ3RoOylpZihHPXUoUShXKSwxMCkscT1HLmUscSYmKHI9b2hlKHQscSxHKSxScyhzLHIpLFMzbih0LHEsRyksdShLKHEsKGFlKCksV2MpKSwyMSkuSGMoKGdvKCkseWgpKSkpZm9yKE10PXUoSyhHLCh4ZSgpLHdzKSksOTgpLEI9dShLKEcscXkpLDE3NCkuSGMoKGlsKCksdGcpKSxidD1uZXcgUyhHLmopO2J0LmE8YnQuYy5jLmxlbmd0aDspZm9yKFo9dShRKGJ0KSwxMSksbz11KHRyKHQuYixaKSwxMCksb3x8KG89VEkoWixNdCxaLmosLShaLmUuYy5sZW5ndGgtWi5nLmMubGVuZ3RoKSxudWxsLG5ldyBEYSxaLm8sdShLKHEsWGwpLDEwMykscSksZWUobyxJaSxaKSxBaSh0LmIsWixvKSx1ZShxLmEsbykpLGg9dShQZShvLmosMCksMTEpLF89bmV3IFMoWi5mKTtfLmE8Xy5jLmMubGVuZ3RoOylrPXUoUShfKSw3MCksZD1uZXcgYUh0LGQuby5hPWsuby5hLGQuby5iPWsuby5iLHVlKGguZixkKSxCfHwoU3Q9Wi5qLE09MCxUXyh1KEsoRyxxeSksMjEpKSYmKE09UTR0KGsubixrLm8sWi5vLDAsU3QpKSxNdD09KHZhKCksVTEpfHwoYmUoKSxndSkuSGMoU3QpP2Quby5hPU06ZC5vLmI9TSk7cmV0dXJuIHc9bmV3IGxlLFIzbih0LGUsbixzLHcpLG4mJnQzbih0LGUsbix3KSx3fWZ1bmN0aW9uIGI2dCh0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssXyxNO2lmKCF0LmNbZS5jLnBdW2UucF0uZSl7Zm9yKHQuY1tlLmMucF1bZS5wXS5lPSEwLHQuY1tlLmMucF1bZS5wXS5iPTAsdC5jW2UuYy5wXVtlLnBdLmQ9MCx0LmNbZS5jLnBdW2UucF0uYT1udWxsLF89bmV3IFMoZS5qKTtfLmE8Xy5jLmMubGVuZ3RoOylmb3Ioaz11KFEoXyksMTEpLE09bj9uZXcgc2Eoayk6bmV3IENyKGspLHc9TS5LYygpO3cuT2IoKTspZD11KHcuUGIoKSwxMSksaD1kLmksaC5jPT1lLmM/aCE9ZSYmKGI2dCh0LGgsbiksdC5jW2UuYy5wXVtlLnBdLmIrPXQuY1toLmMucF1baC5wXS5iLHQuY1tlLmMucF1bZS5wXS5kKz10LmNbaC5jLnBdW2gucF0uZCk6KHQuY1tlLmMucF1bZS5wXS5kKz10LmdbZC5wXSwrK3QuY1tlLmMucF1bZS5wXS5iKTtpZihvPXUoSyhlLChhZSgpLFY5dCkpLDE1KSxvKWZvcihzPW8uS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMTApLGUuYz09ci5jJiYoYjZ0KHQscixuKSx0LmNbZS5jLnBdW2UucF0uYis9dC5jW3IuYy5wXVtyLnBdLmIsdC5jW2UuYy5wXVtlLnBdLmQrPXQuY1tyLmMucF1bci5wXS5kKTt0LmNbZS5jLnBdW2UucF0uYj4wJiYodC5jW2UuYy5wXVtlLnBdLmQrPXBsKHQuaSwyNCkqUEkqLjA3MDAwMDAwMDI5ODAyMzIyLS4wMzUwMDAwMDAxNDkwMTE2MSx0LmNbZS5jLnBdW2UucF0uYT10LmNbZS5jLnBdW2UucF0uZC90LmNbZS5jLnBdW2UucF0uYil9fWZ1bmN0aW9uIGc0bih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWjtmb3IoRz1uZXcgUyh0KTtHLmE8Ry5jLmMubGVuZ3RoOyl7Zm9yKHE9dShRKEcpLDEwKSxBZyhxLm4pLEFnKHEubyksdm10KHEuZiksRXVlKHEpLEd2bihxKSxaPW5ldyBTKHEuaik7Wi5hPFouYy5jLmxlbmd0aDspe2ZvcihXPXUoUShaKSwxMSksQWcoVy5uKSxBZyhXLmEpLEFnKFcubyksVXMoVyx1c2UoVy5qKSksbz11KEsoVywoeGUoKSxRZykpLDE5KSxvJiZlZShXLFFnLGRlKC1vLmEpKSxzPW5ldyBTKFcuZyk7cy5hPHMuYy5jLmxlbmd0aDspe2ZvcihyPXUoUShzKSwxNyksbj1zaShyLmEsMCk7bi5iIT1uLmQuYzspZT11KGlpKG4pLDgpLEFnKGUpO2lmKHc9dShLKHIsT28pLDc0KSx3KWZvcihkPXNpKHcsMCk7ZC5iIT1kLmQuYzspaD11KGlpKGQpLDgpLEFnKGgpO2ZvcihNPW5ldyBTKHIuYik7TS5hPE0uYy5jLmxlbmd0aDspaz11KFEoTSksNzApLEFnKGsubiksQWcoay5vKX1mb3IoQj1uZXcgUyhXLmYpO0IuYTxCLmMuYy5sZW5ndGg7KWs9dShRKEIpLDcwKSxBZyhrLm4pLEFnKGsubyl9Zm9yKHEuaz09KEduKCksSXMpJiYoZWUocSwoYWUoKSxnYyksdXNlKHUoSyhxLGdjKSw2MSkpKSxldm4ocSkpLF89bmV3IFMocS5iKTtfLmE8Xy5jLmMubGVuZ3RoOylrPXUoUShfKSw3MCksRXVlKGspLEFnKGsubyksQWcoay5uKX19ZnVuY3Rpb24gcDRuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxfLE0sQixxLEcsVyxaLGJ0LE10LFN0LGp0LFF0LGNlLF9lO2Zvcih0LmU9ZSxkPXBwbihlKSxjZT1uZXcgbGUscj1uZXcgUyhkKTtyLmE8ci5jLmMubGVuZ3RoOyl7Zm9yKG49dShRKHIpLDE1KSxfZT1uZXcgbGUsY2UuY1tjZS5jLmxlbmd0aF09X2Usdz1uZXcgUXMsRz1uLktjKCk7Ry5PYigpOyl7Zm9yKHE9dShHLlBiKCksMzMpLG89YkkodCxxLCEwLDAsMCksX2UuY1tfZS5jLmxlbmd0aF09byxXPXEuaSxaPXEuaixCPSghcS5uJiYocS5uPW5ldyBoZShZbyxxLDEsNykpLHEubiksTT1uZXcgbnIoQik7TS5lIT1NLmkuZ2MoKTspaz11KGRyKE0pLDEzNykscz1iSSh0LGssITEsVyxaKSxfZS5jW19lLmMubGVuZ3RoXT1zO2ZvcihRdD0oIXEuYyYmKHEuYz1uZXcgaGUoeWwscSw5LDkpKSxxLmMpLE10PW5ldyBucihRdCk7TXQuZSE9TXQuaS5nYygpOylmb3IoYnQ9dShkcihNdCksMTE4KSxoPWJJKHQsYnQsITEsVyxaKSxfZS5jW19lLmMubGVuZ3RoXT1oLFN0PWJ0LmkrVyxqdD1idC5qK1osQj0oIWJ0Lm4mJihidC5uPW5ldyBoZShZbyxidCwxLDcpKSxidC5uKSxfPW5ldyBucihCKTtfLmUhPV8uaS5nYygpOylrPXUoZHIoXyksMTM3KSxzPWJJKHQsaywhMSxTdCxqdCksX2UuY1tfZS5jLmxlbmd0aF09cztLYSh3LHMkKEkxKHV0KG90KCQxLDEpLE1lLDIwLDAsW1YwKHEpLGZJKHEpXSkpKSl9czJuKHQsdyxfZSl9cmV0dXJuIHQuZj1uZXcgckh0KGNlKSxCbyh0LmYsZSksdC5mfWZ1bmN0aW9uIGI0bih0LGUsbixyLHMpe3ZhciBvLGgsZCx3LGssXyxNLEIscSxHLFcsWixidCxNdCxTdCxqdCxRdCxjZSxfZSxXZSxRZSxSbix6bixocjtSbj10cih0LmUsciksUm49PW51bGwmJihSbj1uZXcgdzYscT11KFJuLDE4MyksTXQ9ZSsiX3MiLFN0PU10K3MsQj1uZXcgSG0oU3QpLFFmKHEsQ2QsQikpLFFlPXUoUm4sMTgzKSxGNihuLFFlKSxocj1uZXcgdzYsZTIoaHIsIngiLHIuaiksZTIoaHIsInkiLHIuayksUWYoUWUsVGRlLGhyKSxfZT1uZXcgdzYsZTIoX2UsIngiLHIuYiksZTIoX2UsInkiLHIuYyksUWYoUWUsImVuZFBvaW50IixfZSksTT1mTSgoIXIuYSYmKHIuYT1uZXcgQnMoV2gsciw1KSksci5hKSksRz0hTSxHJiYoY2U9bmV3IHlnLG89bmV3IHV6dChjZSksX2EoKCFyLmEmJihyLmE9bmV3IEJzKFdoLHIsNSkpLHIuYSksbyksUWYoUWUsd0gsY2UpKSx3PW9zdChyKSxqdD0hIXcsanQmJlQ0dCh0LmEsUWUscDh0LFJzdCh0LG9zdChyKSkpLGJ0PWNzdChyKSxRdD0hIWJ0LFF0JiZUNHQodC5hLFFlLGc4dCxSc3QodCxjc3QocikpKSxrPSghci5lJiYoci5lPW5ldyBFbih1cyxyLDEwLDkpKSxyLmUpLmk9PTAsVz0hayxXJiYoV2U9bmV3IHlnLGg9bmV3IExHdCh0LFdlKSxfYSgoIXIuZSYmKHIuZT1uZXcgRW4odXMsciwxMCw5KSksci5lKSxoKSxRZihRZSx2OHQsV2UpKSxfPSghci5nJiYoci5nPW5ldyBFbih1cyxyLDksMTApKSxyLmcpLmk9PTAsWj0hXyxaJiYoem49bmV3IHlnLGQ9bmV3IE1HdCh0LHpuKSxfYSgoIXIuZyYmKHIuZz1uZXcgRW4odXMsciw5LDEwKSksci5nKSxkKSxRZihRZSxiOHQsem4pKX1mdW5jdGlvbiB2NG4odCl7Qm0oKTt2YXIgZSxuLHIscyxvLGgsZDtmb3Iocj10LmYubixoPWh3dCh0LnIpLmEubmMoKTtoLk9iKCk7KXtpZihvPXUoaC5QYigpLDExMSkscz0wLG8uYi5YZSgoZGkoKSxtbCkpJiYocz1adCh2ZShvLmIuV2UobWwpKSksczwwKSlzd2l0Y2goby5iLkhmKCkuZyl7Y2FzZSAxOnIuZD1iLk1hdGgubWF4KHIuZCwtcyk7YnJlYWs7Y2FzZSAzOnIuYT1iLk1hdGgubWF4KHIuYSwtcyk7YnJlYWs7Y2FzZSAyOnIuYz1iLk1hdGgubWF4KHIuYywtcyk7YnJlYWs7Y2FzZSA0OnIuYj1iLk1hdGgubWF4KHIuYiwtcyl9aWYoVF8odC51KSlzd2l0Y2goZT16b24oby5iLHMpLGQ9IXUodC5lLldlKG1iKSwxNzQpLkhjKChibCgpLHJOKSksbj0hMSxvLmIuSGYoKS5nKXtjYXNlIDE6bj1lPnIuZCxyLmQ9Yi5NYXRoLm1heChyLmQsZSksZCYmbiYmKHIuZD1iLk1hdGgubWF4KHIuZCxyLmEpLHIuYT1yLmQrcyk7YnJlYWs7Y2FzZSAzOm49ZT5yLmEsci5hPWIuTWF0aC5tYXgoci5hLGUpLGQmJm4mJihyLmE9Yi5NYXRoLm1heChyLmEsci5kKSxyLmQ9ci5hK3MpO2JyZWFrO2Nhc2UgMjpuPWU+ci5jLHIuYz1iLk1hdGgubWF4KHIuYyxlKSxkJiZuJiYoci5jPWIuTWF0aC5tYXgoci5iLHIuYyksci5iPXIuYytzKTticmVhaztjYXNlIDQ6bj1lPnIuYixyLmI9Yi5NYXRoLm1heChyLmIsZSksZCYmbiYmKHIuYj1iLk1hdGgubWF4KHIuYixyLmMpLHIuYz1yLmIrcyl9fX1mdW5jdGlvbiB3NG4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLF8sTTtmb3Ioaz1uZXcgUyh0KTtrLmE8ay5jLmMubGVuZ3RoOyl7c3dpdGNoKHc9dShRKGspLDEwKSxoPXUoSyh3LCh4ZSgpLGR1KSksMTYzKSxvPW51bGwsaC5nKXtjYXNlIDE6Y2FzZSAyOm89KGgyKCksRzQpO2JyZWFrO2Nhc2UgMzpjYXNlIDQ6bz0oaDIoKSxvRSl9aWYobyllZSh3LChhZSgpLEhWKSwoaDIoKSxHNCkpLG89PW9FP2xxKHcsaCwoaG8oKSxhbCkpOm89PUc0JiZscSh3LGgsKGhvKCksc3UpKTtlbHNlIGlmKFYzKHUoSyh3LHdzKSw5OCkpJiZ3LmouYy5sZW5ndGghPTApe2ZvcihlPSEwLE09bmV3IFMody5qKTtNLmE8TS5jLmMubGVuZ3RoOyl7aWYoXz11KFEoTSksMTEpLCEoXy5qPT0oYmUoKSxIbikmJl8uZS5jLmxlbmd0aC1fLmcuYy5sZW5ndGg+MHx8Xy5qPT1CbiYmXy5lLmMubGVuZ3RoLV8uZy5jLmxlbmd0aDwwKSl7ZT0hMTticmVha31mb3Iocz1uZXcgUyhfLmcpO3MuYTxzLmMuYy5sZW5ndGg7KWlmKG49dShRKHMpLDE3KSxkPXUoSyhuLmQuaSxkdSksMTYzKSxkPT0ocGgoKSx4Uyl8fGQ9PUZ5KXtlPSExO2JyZWFrfWZvcihyPW5ldyBTKF8uZSk7ci5hPHIuYy5jLmxlbmd0aDspaWYobj11KFEociksMTcpLGQ9dShLKG4uYy5pLGR1KSwxNjMpLGQ9PShwaCgpLHlTKXx8ZD09Z2Ipe2U9ITE7YnJlYWt9fWUmJmxxKHcsaCwoaG8oKSxNUykpfX19ZnVuY3Rpb24gbTRuKHQsZSxuLHIscyl7dmFyIG8saCxkLHcsayxfLE0sQixxLEcsVyxaLGJ0LE10LFN0LGp0LFF0LGNlO2ZvcihjZT0wLHE9MCxNPW5ldyBTKGUuZSk7TS5hPE0uYy5jLmxlbmd0aDspe2ZvcihfPXUoUShNKSwxMCksQj0wLGQ9MCx3PW4/dShLKF8scEcpLDE5KS5hOk9hLGJ0PXI/dShLKF8sYkcpLDE5KS5hOk9hLGs9Yi5NYXRoLm1heCh3LGJ0KSxTdD1uZXcgUyhfLmopO1N0LmE8U3QuYy5jLmxlbmd0aDspe2lmKE10PXUoUShTdCksMTEpLGp0PV8ubi5iK010Lm4uYitNdC5hLmIscilmb3IoaD1uZXcgUyhNdC5nKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoUShoKSwxNyksVz1vLmQsRz1XLmksZSE9dC5hW0cucF0mJihaPWIuTWF0aC5tYXgodShLKEcscEcpLDE5KS5hLHUoSyhHLGJHKSwxOSkuYSksUXQ9dShLKG8sKHhlKCksUHgpKSwxOSkuYSxRdD49ayYmUXQ+PVomJihCKz1HLm4uYitXLm4uYitXLmEuYi1qdCwrK2QpKTtpZihuKWZvcihoPW5ldyBTKE10LmUpO2guYTxoLmMuYy5sZW5ndGg7KW89dShRKGgpLDE3KSxXPW8uYyxHPVcuaSxlIT10LmFbRy5wXSYmKFo9Yi5NYXRoLm1heCh1KEsoRyxwRyksMTkpLmEsdShLKEcsYkcpLDE5KS5hKSxRdD11KEsobywoeGUoKSxQeCkpLDE5KS5hLFF0Pj1rJiZRdD49WiYmKEIrPUcubi5iK1cubi5iK1cuYS5iLWp0LCsrZCkpfWQ+MCYmKGNlKz1CL2QsKytxKX1xPjA/KGUuYT1zKmNlL3EsZS5nPXEpOihlLmE9MCxlLmc9MCl9ZnVuY3Rpb24geTRuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxfLE0sQjtmb3Iocz1uZXcgUyh0LmEuYik7cy5hPHMuYy5jLmxlbmd0aDspZm9yKG49dShRKHMpLDI5KSx3PW5ldyBTKG4uYSk7dy5hPHcuYy5jLmxlbmd0aDspZD11KFEodyksMTApLGUualtkLnBdPWQsZS5pW2QucF09ZS5vPT0oQzEoKSxWMSk/TnM6YnM7Zm9yKG5sKHQuYyksaD10LmEuYixlLmM9PShnZCgpLFpnKSYmKGg9X3QoaCwxNTIpP1Y2KHUoaCwxNTIpKTpfdChoLDEzMSk/dShoLDEzMSkuYTpfdChoLDU0KT9uZXcgbXYoaCk6bmV3IE1tKGgpKSxkYW4odC5lLGUsdC5iKSx5TShlLnAsbnVsbCksbz1oLktjKCk7by5PYigpOylmb3Iobj11KG8uUGIoKSwyOSksaz1uLmEsZS5vPT0oQzEoKSxWMSkmJihrPV90KGssMTUyKT9WNih1KGssMTUyKSk6X3QoaywxMzEpP3UoaywxMzEpLmE6X3Qoayw1NCk/bmV3IG12KGspOm5ldyBNbShrKSksQj1rLktjKCk7Qi5PYigpOylNPXUoQi5QYigpLDEwKSxlLmdbTS5wXT09TSYmQWhlKHQsTSxlKTtmb3IodTNuKHQsZSkscj1oLktjKCk7ci5PYigpOylmb3Iobj11KHIuUGIoKSwyOSksQj1uZXcgUyhuLmEpO0IuYTxCLmMuYy5sZW5ndGg7KU09dShRKEIpLDEwKSxlLnBbTS5wXT1lLnBbZS5nW00ucF0ucF0sTT09ZS5nW00ucF0mJihfPVp0KGUuaVtlLmpbTS5wXS5wXSksKGUubz09KEMxKCksVjEpJiZfPk5zfHxlLm89PXoyJiZfPGJzKSYmKGUucFtNLnBdPVp0KGUucFtNLnBdKStfKSk7dC5lLmNnKCl9ZnVuY3Rpb24gY2hlKHQsZSxuLHIpe3ZhciBzLG8saCxkLHc7cmV0dXJuIGQ9bmV3IHY2dChlKSx4Mm4oZCxyKSxzPSEwLHQmJnQuWGUoKGRpKCksancpKSYmKG89dSh0LldlKChkaSgpLGp3KSksMTAzKSxzPW89PShmbygpLGMwKXx8bz09SGh8fG89PV9mKSxmdWUoZCwhMSksX3UoZC5lLndmKCksbmV3IGR2dChkLCExLHMpKSxncnQoZCxkLmYsKFpmKCksZmMpLChiZSgpLE9uKSksZ3J0KGQsZC5mLGRjLHlyKSxncnQoZCxkLmcsZmMsQm4pLGdydChkLGQuZyxkYyxIbiksWGllKGQsT24pLFhpZShkLHlyKSxwWHQoZCxIbikscFh0KGQsQm4pLEJtKCksaD1kLkEuSGMoKE5sKCksWHkpKSYmZC5CLkhjKChibCgpLGlOKSk/Y2llKGQpOm51bGwsaCYmcUtlKGQuYSxoKSx2NG4oZCksT2ZuKGQpLE5mbihkKSxxM24oZCkseHduKGQpLGExbihkKSxKaXQoZCxPbiksSml0KGQseXIpLHR3bihkKSx5eW4oZCksbiYmKHdsbihkKSxvMW4oZCksSml0KGQsSG4pLEppdChkLEJuKSx3PWQuQi5IYygoYmwoKSxlQSkpLG9vZShkLHcsT24pLG9vZShkLHcseXIpLGNvZShkLHcsSG4pLGNvZShkLHcsQm4pLHlzKG5ldyBrbihudWxsLG5ldyBUbihuZXcgbTEoZC5pKSwwKSksbmV3IHRhKSx5cyhXaShuZXcga24obnVsbCxod3QoZC5yKS5hLm9jKCkpLG5ldyBidSksbmV3IFB1KSxrZG4oZCksZC5lLnVmKGQubykseXMobmV3IGtuKG51bGwsaHd0KGQucikuYS5vYygpKSxuZXcgbW8pKSxkLm99ZnVuY3Rpb24geDRuKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxfLE0sQixxLEcsVztmb3Ioaz1icyxyPW5ldyBTKHQuYS5iKTtyLmE8ci5jLmMubGVuZ3RoOyllPXUoUShyKSw4MSksaz1iLk1hdGgubWluKGssZS5kLmYuZy5jK2UuZS5hKTtmb3IocT1uZXcgY3MsaD1uZXcgUyh0LmEuYSk7aC5hPGguYy5jLmxlbmd0aDspbz11KFEoaCksMTg5KSxvLmk9ayxvLmU9PTAmJmtzKHEsbyxxLmMuYixxLmMpO2Zvcig7cS5iIT0wOyl7Zm9yKG89dShxLmI9PTA/bnVsbDooWm4ocS5iIT0wKSxmaChxLHEuYS5hKSksMTg5KSxzPW8uZi5nLmMsQj1vLmEuYS5lYygpLktjKCk7Qi5PYigpOylfPXUoQi5QYigpLDgxKSxXPW8uaStfLmUuYSxfLmQuZ3x8Xy5nLmM8Vz9fLm89VzpfLm89Xy5nLmM7Zm9yKHMtPW8uZi5vLG8uYis9cyx0LmM9PShmbygpLF9mKXx8dC5jPT1RMD9vLmMrPXM6by5jLT1zLE09by5hLmEuZWMoKS5LYygpO00uT2IoKTspZm9yKF89dShNLlBiKCksODEpLHc9Xy5mLktjKCk7dy5PYigpOylkPXUody5QYigpLDgxKSxQcCh0LmMpP0c9dC5mLmVmKF8sZCk6Rz10LmYuZmYoXyxkKSxkLmQuaT1iLk1hdGgubWF4KGQuZC5pLF8ubytfLmcuYitHLWQuZS5hKSxkLmt8fChkLmQuaT1iLk1hdGgubWF4KGQuZC5pLGQuZy5jLWQuZS5hKSksLS1kLmQuZSxkLmQuZT09MCYmYWkocSxkLmQpfWZvcihuPW5ldyBTKHQuYS5iKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoUShuKSw4MSksZS5nLmM9ZS5vfWZ1bmN0aW9uIGs0bih0KXt2YXIgZSxuLHIscyxvLGgsZCx3O3N3aXRjaChkPXQuYixlPXQuYSx1KEsodCwoS3ooKSxCN3QpKSw0MjcpLmcpe2Nhc2UgMDphYShkLG5ldyBndChuZXcgbmkpKTticmVhaztjYXNlIDE6ZGVmYXVsdDphYShkLG5ldyBndChuZXcgZW8pKX1zd2l0Y2godShLKHQsUDd0KSw0MjgpLmcpe2Nhc2UgMTphYShkLG5ldyBrciksYWEoZCxuZXcgRGMpLGFhKGQsbmV3IG5kKTticmVhaztjYXNlIDA6ZGVmYXVsdDphYShkLG5ldyBrciksYWEoZCxuZXcgS2UpfXN3aXRjaCh1KEsodCxqN3QpLDI1MCkuZyl7Y2FzZSAwOnc9bmV3IGRtO2JyZWFrO2Nhc2UgMTp3PW5ldyBqZjticmVhaztjYXNlIDI6dz1uZXcgcmg7YnJlYWs7Y2FzZSAzOnc9bmV3IFFvO2JyZWFrO2Nhc2UgNTp3PW5ldyBmcihuZXcgcmgpO2JyZWFrO2Nhc2UgNDp3PW5ldyBmcihuZXcgamYpO2JyZWFrO2Nhc2UgNzp3PW5ldyB5YnQobmV3IGZyKG5ldyBqZiksbmV3IGZyKG5ldyByaCkpO2JyZWFrO2Nhc2UgODp3PW5ldyB5YnQobmV3IGZyKG5ldyBRbyksbmV3IGZyKG5ldyByaCkpO2JyZWFrO2Nhc2UgNjpkZWZhdWx0Onc9bmV3IGZyKG5ldyBRbyl9Zm9yKGg9bmV3IFMoZCk7aC5hPGguYy5jLmxlbmd0aDspe2ZvcihvPXUoUShoKSwxNjcpLHI9MCxzPTAsbj1uZXcgeWEoZGUociksZGUocykpO29tbihlLG8scixzKTspbj11KHcuQ2UobixvKSw0Nikscj11KG4uYSwxOSkuYSxzPXUobi5iLDE5KS5hO3N3bihlLG8scixzKX19ZnVuY3Rpb24gRTRuKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxfLE0sQixxLEcsVyxaLGJ0LE10LFN0LGp0LFF0LGNlLF9lO2ZvcihvPXQuZi5iLEI9by5hLF89by5iLEc9dC5lLmcscT10LmUuZixzaih0LmUsby5hLG8uYiksY2U9Qi9HLF9lPV8vcSxrPW5ldyBucihaaih0LmUpKTtrLmUhPWsuaS5nYygpOyl3PXUoZHIoayksMTM3KSxDdSh3LHcuaSpjZSksU3Uodyx3LmoqX2UpO2ZvcihNdD1uZXcgbnIodHJ0KHQuZSkpO010LmUhPU10LmkuZ2MoKTspYnQ9dShkcihNdCksMTE4KSxqdD1idC5pLFF0PWJ0LmosanQ+MCYmQ3UoYnQsanQqY2UpLFF0PjAmJlN1KGJ0LFF0Kl9lKTtmb3IoVV8odC5iLG5ldyBnbSksZT1uZXcgbGUsZD1uZXcgZDIobmV3IGtnKHQuYykuYSk7ZC5iOyloPVl2KGQpLHI9dShoLmNkKCksNzkpLG49dShoLmRkKCksMzk1KS5hLHM9eTQociwhMSwhMSksTT1vYWUoWmQociksc0kocyksbikseUkoTSxzKSxTdD1tYWUociksU3QmJkdvKGUsU3QsMCk9PS0xJiYoZS5jW2UuYy5sZW5ndGhdPVN0LF9YdChTdCwoWm4oTS5iIT0wKSx1KE0uYS5hLmMsOCkpLG4pKTtmb3IoWj1uZXcgZDIobmV3IGtnKHQuZCkuYSk7Wi5iOylXPVl2KFopLHI9dShXLmNkKCksNzkpLG49dShXLmRkKCksMzk1KS5hLHM9eTQociwhMSwhMSksTT1vYWUoWnAociksQkQoc0kocykpLG4pLE09QkQoTSkseUkoTSxzKSxTdD15YWUociksU3QmJkdvKGUsU3QsMCk9PS0xJiYoZS5jW2UuYy5sZW5ndGhdPVN0LF9YdChTdCwoWm4oTS5iIT0wKSx1KE0uYy5iLmMsOCkpLG4pKX1mdW5jdGlvbiB1aGUodCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFosYnQsTXQsU3QsanQsUXQsY2UsX2U7aWYobi5jLmxlbmd0aCE9MCl7Zm9yKHE9bmV3IGxlLEI9bmV3IFMobik7Qi5hPEIuYy5jLmxlbmd0aDspTT11KFEoQiksMzMpLHVlKHEsbmV3IFJlKE0uaSxNLmopKTtmb3Ioci5uJiZlJiZnZihyLHBmKGUpLChPbCgpLHRoKSk7QTR0KHQsbik7KXNxKHQsbiwhMSk7Zm9yKHIubiYmZSYmZ2YocixwZihlKSwoT2woKSx0aCkpLGg9MCxkPTAscz1udWxsLG4uYy5sZW5ndGghPTAmJihzPShTbigwLG4uYy5sZW5ndGgpLHUobi5jWzBdLDMzKSksaD1zLmktKFNuKDAscS5jLmxlbmd0aCksdShxLmNbMF0sOCkpLmEsZD1zLmotKFNuKDAscS5jLmxlbmd0aCksdShxLmNbMF0sOCkpLmIpLG89Yi5NYXRoLnNxcnQoaCpoK2QqZCksXz1NcmUobik7Xy5hLmdjKCkhPTA7KXtmb3Ioaz1fLmEuZWMoKS5LYygpO2suT2IoKTspdz11KGsuUGIoKSwzMyksRz10LmYsVz1HLmkrRy5nLzIsWj1HLmorRy5mLzIsYnQ9dy5pK3cuZy8yLE10PXcuait3LmYvMixTdD1idC1XLGp0PU10LVosUXQ9Yi5NYXRoLnNxcnQoU3QqU3QranQqanQpLGNlPVN0L1F0LF9lPWp0L1F0LEN1KHcsdy5pK2NlKm8pLFN1KHcsdy5qK19lKm8pO3IubiYmZSYmZ2YocixwZihlKSwoT2woKSx0aCkpLF89TXJlKG5ldyBxdShfKSl9dC5hJiZ0LmEubGcobmV3IHF1KF8pKSxyLm4mJmUmJmdmKHIscGYoZSksKE9sKCksdGgpKSx1aGUodCxlLG5ldyBxdShfKSxyKX19ZnVuY3Rpb24gVDRuKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxfLE0sQixxLEcsVyxaLGJ0O2lmKFc9dC5uLFo9dC5vLEI9dC5kLE09WnQodmUoaXkodCwoeGUoKSxlaHQpKSkpLGUpe2ZvcihfPU0qKGUuZ2MoKS0xKSxxPTAsdz1lLktjKCk7dy5PYigpOyloPXUody5QYigpLDEwKSxfKz1oLm8uYSxxPWIuTWF0aC5tYXgocSxoLm8uYik7Zm9yKGJ0PVcuYS0oXy1aLmEpLzIsbz1XLmItQi5kK3Escj1aLmEvKGUuZ2MoKSsxKSxzPXIsZD1lLktjKCk7ZC5PYigpOyloPXUoZC5QYigpLDEwKSxoLm4uYT1idCxoLm4uYj1vLWguby5iLGJ0Kz1oLm8uYStNLGs9eGNlKGgpLGsubi5hPWguby5hLzItay5hLmEsay5uLmI9aC5vLmIsRz11KEsoaCwoYWUoKSx6VikpLDExKSxHLmUuYy5sZW5ndGgrRy5nLmMubGVuZ3RoPT0xJiYoRy5uLmE9cy1HLmEuYSxHLm4uYj0wLHRjKEcsdCkpLHMrPXJ9aWYobil7Zm9yKF89TSoobi5nYygpLTEpLHE9MCx3PW4uS2MoKTt3Lk9iKCk7KWg9dSh3LlBiKCksMTApLF8rPWguby5hLHE9Yi5NYXRoLm1heChxLGguby5iKTtmb3IoYnQ9Vy5hLShfLVouYSkvMixvPVcuYitaLmIrQi5hLXEscj1aLmEvKG4uZ2MoKSsxKSxzPXIsZD1uLktjKCk7ZC5PYigpOyloPXUoZC5QYigpLDEwKSxoLm4uYT1idCxoLm4uYj1vLGJ0Kz1oLm8uYStNLGs9eGNlKGgpLGsubi5hPWguby5hLzItay5hLmEsay5uLmI9MCxHPXUoSyhoLChhZSgpLHpWKSksMTEpLEcuZS5jLmxlbmd0aCtHLmcuYy5sZW5ndGg9PTEmJihHLm4uYT1zLUcuYS5hLEcubi5iPVouYix0YyhHLHQpKSxzKz1yfX1mdW5jdGlvbiBfNG4odCxlKXt2YXIgbixyLHMsbyxoLGQ7aWYodShLKGUsKGFlKCksV2MpKSwyMSkuSGMoKGdvKCkseWgpKSl7Zm9yKGQ9bmV3IFMoZS5hKTtkLmE8ZC5jLmMubGVuZ3RoOylvPXUoUShkKSwxMCksby5rPT0oR24oKSxxcykmJihzPXUoSyhvLCh4ZSgpLGVHKSksMTQyKSx0LmM9Yi5NYXRoLm1pbih0LmMsby5uLmEtcy5iKSx0LmE9Yi5NYXRoLm1heCh0LmEsby5uLmErby5vLmErcy5jKSx0LmQ9Yi5NYXRoLm1pbih0LmQsby5uLmItcy5kKSx0LmI9Yi5NYXRoLm1heCh0LmIsby5uLmIrby5vLmIrcy5hKSk7Zm9yKGg9bmV3IFMoZS5hKTtoLmE8aC5jLmMubGVuZ3RoOylpZihvPXUoUShoKSwxMCksby5rIT0oR24oKSxxcykpc3dpdGNoKG8uay5nKXtjYXNlIDI6aWYocj11KEsobywoeGUoKSxkdSkpLDE2Mykscj09KHBoKCksZ2IpKXtvLm4uYT10LmMtMTAsSXNlKG8sbmV3IERZKS5KYihuZXcgaW8obykpO2JyZWFrfWlmKHI9PUZ5KXtvLm4uYT10LmErMTAsSXNlKG8sbmV3IElZKS5KYihuZXcgX2wobykpO2JyZWFrfWlmKG49dShLKG8sUDIpLDMwMyksbj09KEIwKCksVzQpKXtPbGUobykuSmIobmV3IEdmKG8pKSxvLm4uYj10LmQtMTA7YnJlYWt9aWYobj09U3gpe09sZShvKS5KYihuZXcgRXAobykpLG8ubi5iPXQuYisxMDticmVha31icmVhaztkZWZhdWx0OnRocm93IG50KG5ldyBQbigiVGhlIG5vZGUgdHlwZSAiK28uaysiIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlICIrbDZuKSl9fX1mdW5jdGlvbiBDNG4odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFo7Zm9yKHc9bmV3IFJlKHIuaStyLmcvMixyLmorci5mLzIpLHE9TGxlKHIpLEc9dSh6ZShlLCh4ZSgpLHdzKSksOTgpLFo9dSh6ZShyLHBFKSw2MSksUkd0KEhpZShyKSx6eSl8fChyLmk9PTAmJnIuaj09MD9XPTA6Vz1pMG4ocixaKSxFbyhyLHp5LFcpKSxrPW5ldyBSZShlLmcsZS5mKSxzPVRJKHIsRyxaLHEsayx3LG5ldyBSZShyLmcsci5mKSx1KEsobixYbCksMTAzKSxuKSxlZShzLChhZSgpLElpKSxyKSxvPXUoUGUocy5qLDApLDExKSxrdHQobyxRd24ocikpLGVlKHMscXksKGlsKCksb24oRWIpKSksTT11KHplKGUscXkpLDE3NCkuSGModGcpLGQ9bmV3IG5yKCghci5uJiYoci5uPW5ldyBoZShZbyxyLDEsNykpLHIubikpO2QuZSE9ZC5pLmdjKCk7KWlmKGg9dShkcihkKSwxMzcpLCFCZShGZSh6ZShoLGoyKSkpJiZoLmEmJihCPVBpdChoKSx1ZShvLmYsQiksIU0pKXN3aXRjaChfPTAsVF8odSh6ZShlLHF5KSwyMSkpJiYoXz1RNHQobmV3IFJlKGguaSxoLmopLG5ldyBSZShoLmcsaC5mKSxuZXcgUmUoci5nLHIuZiksMCxaKSksWi5nKXtjYXNlIDI6Y2FzZSA0OkIuby5hPV87YnJlYWs7Y2FzZSAxOmNhc2UgMzpCLm8uYj1ffWVlKHMsdkUsdmUoemUoaHMoZSksdkUpKSksZWUocyx3RSx2ZSh6ZShocyhlKSx3RSkpKSxlZShzLFZ5LHZlKHplKGhzKGUpLFZ5KSkpLHVlKG4uYSxzKSxBaSh0LmEscixzKX1mdW5jdGlvbiBsaGUodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFosYnQsTXQsU3QsanQsUXQ7Zm9yKG1yKG4sIlByb2Nlc3NvciBhcnJhbmdlIGxldmVsIiwxKSxfPTAscG4oKSxuNChlLG5ldyBkcHQoKG1jKCksbUcpKSksbz1lLmIsZD1zaShlLGUuYiksaz0hMDtrJiZkLmIuYiE9ZC5kLmE7KWJ0PXUoVHJ0KGQpLDg2KSx1KEsoYnQsbUcpLDE5KS5hPT0wPy0tbzprPSExO2lmKFF0PW5ldyBLZChlLDAsbyksaD1uZXcgd250KFF0KSxRdD1uZXcgS2QoZSxvLGUuYiksdz1uZXcgd250KFF0KSxoLmI9PTApZm9yKEc9c2kodywwKTtHLmIhPUcuZC5jOylxPXUoaWkoRyksODYpLGVlKHEsa0csZGUoXysrKSk7ZWxzZSBmb3IoTT1oLmIsanQ9c2koaCwwKTtqdC5iIT1qdC5kLmM7KXtmb3IoU3Q9dShpaShqdCksODYpLGVlKFN0LGtHLGRlKF8rKykpLHI9ZHl0KFN0KSxsaGUodCxyLHpjKG4sMS9NfDApKSxuNChyLHl3dChuZXcgZHB0KGtHKSkpLEI9bmV3IGNzLE10PXNpKHIsMCk7TXQuYiE9TXQuZC5jOylmb3IoYnQ9dShpaShNdCksODYpLFo9c2koU3QuZCwwKTtaLmIhPVouZC5jOylXPXUoaWkoWiksMTg4KSxXLmM9PWJ0JiZrcyhCLFcsQi5jLmIsQi5jKTtmb3IoTWgoU3QuZCksS2EoU3QuZCxCKSxkPXNpKHcsdy5iKSxzPVN0LmQuYixrPSEwOzA8cyYmayYmZC5iLmIhPWQuZC5hOylidD11KFRydChkKSw4NiksdShLKGJ0LG1HKSwxOSkuYT09MD8oZWUoYnQsa0csZGUoXysrKSksLS1zLEgkKGQpKTprPSExfW9yKG4pfWZ1bmN0aW9uIFM0bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWixidCxNdCxTdDtmb3IobXIoZSwiSW52ZXJ0ZWQgcG9ydCBwcmVwcm9jZXNzaW5nIiwxKSxfPXQuYixrPW5ldyB4YShfLDApLG49bnVsbCxTdD1uZXcgbGU7ay5iPGsuZC5nYygpOyl7Zm9yKE10PW4sbj0oWm4oay5iPGsuZC5nYygpKSx1KGsuZC5YYihrLmM9ay5iKyspLDI5KSkscT1uZXcgUyhTdCk7cS5hPHEuYy5jLmxlbmd0aDspTT11KFEocSksMTApLExvKE0sTXQpO2ZvcihTdC5jPU50KFFuLE1lLDEsMCw1LDEpLEc9bmV3IFMobi5hKTtHLmE8Ry5jLmMubGVuZ3RoOylpZihNPXUoUShHKSwxMCksTS5rPT0oR24oKSxxcykmJlYzKHUoSyhNLCh4ZSgpLHdzKSksOTgpKSl7Zm9yKGJ0PUY1dChNLChobygpLGFsKSwoYmUoKSxIbikpLktjKCk7YnQuT2IoKTspZm9yKFc9dShidC5QYigpLDExKSx3PVcuZSxkPXUoUDEodyxOdChubHQsUm90LDE3LHcuYy5sZW5ndGgsMCwxKSksNDc0KSxzPWQsbz0wLGg9cy5sZW5ndGg7bzxoOysrbylyPXNbb10sWm1uKHQsVyxyLFN0KTtmb3IoWj1GNXQoTSxzdSxCbikuS2MoKTtaLk9iKCk7KWZvcihXPXUoWi5QYigpLDExKSx3PVcuZyxkPXUoUDEodyxOdChubHQsUm90LDE3LHcuYy5sZW5ndGgsMCwxKSksNDc0KSxzPWQsbz0wLGg9cy5sZW5ndGg7bzxoOysrbylyPXNbb10sUW1uKHQsVyxyLFN0KX19Zm9yKEI9bmV3IFMoU3QpO0IuYTxCLmMuYy5sZW5ndGg7KU09dShRKEIpLDEwKSxMbyhNLG4pO29yKGUpfWZ1bmN0aW9uIEE0bih0LGUsbixyLHMsbyl7dmFyIGgsZCx3LGssXyxNO2ZvcihrPW5ldyBOYyxCbyhrLGUpLFVzKGssdSh6ZShlLCh4ZSgpLHBFKSksNjEpKSxlZShrLChhZSgpLElpKSxlKSx0YyhrLG4pLE09ay5vLE0uYT1lLmcsTS5iPWUuZixfPWsubixfLmE9ZS5pLF8uYj1lLmosQWkodC5hLGUsayksaD1DOCh4dShlYyhuZXcga24obnVsbCwoIWUuZSYmKGUuZT1uZXcgRW4ocmEsZSw3LDQpKSxuZXcgVG4oZS5lLDE2KSkpLG5ldyBYUCksbmV3ICQ1KSxuZXcgaXIoZSkpLGh8fChoPUM4KHh1KGVjKG5ldyBrbihudWxsLCghZS5kJiYoZS5kPW5ldyBFbihyYSxlLDgsNSkpLG5ldyBUbihlLmQsMTYpKSksbmV3IGdrKSxuZXcgSTkpLG5ldyBzcihlKSkpLGh8fChoPUM4KG5ldyBrbihudWxsLCghZS5lJiYoZS5lPW5ldyBFbihyYSxlLDcsNCkpLG5ldyBUbihlLmUsMTYpKSksbmV3IHNZKSksZWUoayxrTywoRm4oKSwhIWgpKSxHeW4oayxvLHMsdSh6ZShlLFB3KSw4KSksdz1uZXcgbnIoKCFlLm4mJihlLm49bmV3IGhlKFlvLGUsMSw3KSksZS5uKSk7dy5lIT13LmkuZ2MoKTspZD11KGRyKHcpLDEzNyksIUJlKEZlKHplKGQsajIpKSkmJmQuYSYmdWUoay5mLFBpdChkKSk7c3dpdGNoKHMuZyl7Y2FzZSAyOmNhc2UgMTooay5qPT0oYmUoKSxPbil8fGsuaj09eXIpJiZyLkZjKChnbygpLFU0KSk7YnJlYWs7Y2FzZSA0OmNhc2UgMzooay5qPT0oYmUoKSxIbil8fGsuaj09Qm4pJiZyLkZjKChnbygpLFU0KSl9cmV0dXJuIGt9ZnVuY3Rpb24gRGF0KHQsZSxuLHIscyxvLGgpe3ZhciBkLHcsayxfLE0sQixxLEcsVyxaLGJ0LE10LFN0O2ZvcihCPW51bGwscj09KHF2KCksd2IpP0I9ZTpyPT1uNSYmKEI9biksVz1CLmEuZWMoKS5LYygpO1cuT2IoKTspe2ZvcihHPXUoVy5QYigpLDExKSxaPW5jKHV0KG90KG5hLDEpLHJlLDgsMCxbRy5pLm4sRy5uLEcuYV0pKS5iLFN0PW5ldyBRcyxkPW5ldyBRcyxrPW5ldyBNMShHLmIpO0pvKGsuYSl8fEpvKGsuYik7KWlmKHc9dShKbyhrLmEpP1Eoay5hKTpRKGsuYiksMTcpLEJlKEZlKEsodywoYWUoKSxIMSkpKSk9PXMmJkdvKG8sdywwKSE9LTEpe2lmKHcuZD09Rz9idD13LmM6YnQ9dy5kLE10PW5jKHV0KG90KG5hLDEpLHJlLDgsMCxbYnQuaS5uLGJ0Lm4sYnQuYV0pKS5iLGIuTWF0aC5hYnMoTXQtWik8LjIpY29udGludWU7TXQ8Wj9lLmEuX2IoYnQpP1ZzKFN0LG5ldyB5YSh3Yix3KSk6VnMoU3QsbmV3IHlhKG41LHcpKTplLmEuX2IoYnQpP1ZzKGQsbmV3IHlhKHdiLHcpKTpWcyhkLG5ldyB5YShuNSx3KSl9aWYoU3QuYS5nYygpPjEpZm9yKHE9bmV3IGM2dChHLFN0LHIpLF9hKFN0LG5ldyBuR3QodCxxKSksaC5jW2guYy5sZW5ndGhdPXEsTT1TdC5hLmVjKCkuS2MoKTtNLk9iKCk7KV89dShNLlBiKCksNDYpLEV1KG8sXy5iKTtpZihkLmEuZ2MoKT4xKWZvcihxPW5ldyBjNnQoRyxkLHIpLF9hKGQsbmV3IHJHdCh0LHEpKSxoLmNbaC5jLmxlbmd0aF09cSxNPWQuYS5lYygpLktjKCk7TS5PYigpOylfPXUoTS5QYigpLDQ2KSxFdShvLF8uYil9fWZ1bmN0aW9uIGhoZSh0KXtTdih0LG5ldyB5MihtUihFdih5dihrdih4dihuZXcgbWcsX2QpLCJFTEsgUmFkaWFsIiksJ0EgcmFkaWFsIGxheW91dCBwcm92aWRlciB3aGljaCBpcyBiYXNlZCBvbiB0aGUgYWxnb3JpdGhtIG9mIFBldGVyIEVhZGVzIHB1Ymxpc2hlZCBpbiAiRHJhd2luZyBmcmVlIHRyZWVzLiIsIHB1Ymxpc2hlZCBieSBJbnRlcm5hdGlvbmFsIEluc3RpdHV0ZSBmb3IgQWR2YW5jZWQgU3R1ZHkgb2YgU29jaWFsIEluZm9ybWF0aW9uIFNjaWVuY2UsIEZ1aml0c3UgTGltaXRlZCBpbiAxOTkxLiBUaGUgcmFkaWFsIGxheW91dGVyIHRha2VzIGEgdHJlZSBhbmQgcGxhY2VzIHRoZSBub2RlcyBpbiByYWRpYWwgb3JkZXIgYXJvdW5kIHRoZSByb290LiBUaGUgbm9kZXMgb2YgdGhlIHNhbWUgdHJlZSBsZXZlbCBhcmUgcGxhY2VkIG9uIHRoZSBzYW1lIHJhZGl1cy4nKSxuZXcgaVopLF9kKSkpLHdlKHQsX2QsdUgsSWUoSXllKSksd2UodCxfZCxreSxJZShPeWUpKSx3ZSh0LF9kLE00LEllKEF5ZSkpLHdlKHQsX2QsdngsSWUoTHllKSksd2UodCxfZCxieCxJZShNeWUpKSx3ZSh0LF9kLEY3LEllKFN5ZSkpLHdlKHQsX2QsRkMsSWUobUN0KSksd2UodCxfZCxCNyxJZShEeWUpKSx3ZSh0LF9kLF9jdCxJZShSaHQpKSx3ZSh0LF9kLFRjdCxJZShqaHQpKSx3ZSh0LF9kLHFrdCxJZSh5Q3QpKSx3ZSh0LF9kLFJrdCxJZShDRykpLHdlKHQsX2Qsamt0LEllKFNHKSksd2UodCxfZCwka3QsSWUoQk8pKSx3ZSh0LF9kLHprdCxJZSh4Q3QpKX1mdW5jdGlvbiB2NnQodCl7dmFyIGU7aWYodGhpcy5yPXJubihuZXcgRmQsbmV3IE5vKSx0aGlzLmI9bmV3IGVDKHUoRHIoWmEpLDI5MCkpLHRoaXMucD1uZXcgZUModShEcihaYSksMjkwKSksdGhpcy5pPW5ldyBlQyh1KERyKHhwZSksMjkwKSksdGhpcy5lPXQsdGhpcy5vPW5ldyBTbyh0LnJmKCkpLHRoaXMuRD10LkRmKCl8fEJlKEZlKHQuV2UoKGRpKCksV08pKSkpLHRoaXMuQT11KHQuV2UoKGRpKCksSDIpKSwyMSksdGhpcy5CPXUodC5XZShtYiksMjEpLHRoaXMucT11KHQuV2UoVVMpLDk4KSx0aGlzLnU9dSh0LldlKEt5KSwyMSksIWwwbih0aGlzLnUpKXRocm93IG50KG5ldyBCMygiSW52YWxpZCBwb3J0IGxhYmVsIHBsYWNlbWVudDogIit0aGlzLnUpKTtpZih0aGlzLnY9QmUoRmUodC5XZShKU3QpKSksdGhpcy5qPXUodC5XZShhNSksMjEpLCFOYm4odGhpcy5qKSl0aHJvdyBudChuZXcgQjMoIkludmFsaWQgbm9kZSBsYWJlbCBwbGFjZW1lbnQ6ICIrdGhpcy5qKSk7dGhpcy5uPXUob0ModCwkU3QpLDExNiksdGhpcy5rPVp0KHZlKG9DKHQscUcpKSksdGhpcy5kPVp0KHZlKG9DKHQsckF0KSkpLHRoaXMudz1adCh2ZShvQyh0LGNBdCkpKSx0aGlzLnM9WnQodmUob0ModCxpQXQpKSksdGhpcy50PVp0KHZlKG9DKHQsc0F0KSkpLHRoaXMuQz11KG9DKHQsYUF0KSwxNDIpLHRoaXMuYz0yKnRoaXMuZCxlPSF0aGlzLkIuSGMoKGJsKCksck4pKSx0aGlzLmY9bmV3IHJDKDAsZSwwKSx0aGlzLmc9bmV3IHJDKDEsZSwwKSxlZXQodGhpcy5mLChaZigpLGl1KSx0aGlzLmcpfWZ1bmN0aW9uIEw0bih0LGUsbixyLHMpe3ZhciBvLGgsZCx3LGssXyxNLEIscSxHLFcsWixidCxNdCxTdCxqdCxRdCxjZSxfZSxXZSxRZSxSbjtmb3IoU3Q9MCxHPTAscT0wLEI9MSxNdD1uZXcgbnIoKCF0LmEmJih0LmE9bmV3IGhlKGRzLHQsMTAsMTEpKSx0LmEpKTtNdC5lIT1NdC5pLmdjKCk7KVo9dShkcihNdCksMzMpLEIrPU4wKG5ldyBhcihscihWMChaKS5hLktjKCksbmV3IEgpKSksV2U9Wi5nLEc9Yi5NYXRoLm1heChHLFdlKSxNPVouZixxPWIuTWF0aC5tYXgocSxNKSxTdCs9V2UqTTtmb3IoVz0oIXQuYSYmKHQuYT1uZXcgaGUoZHMsdCwxMCwxMSkpLHQuYSkuaSxoPVN0KzIqcipyKkIqVyxvPWIuTWF0aC5zcXJ0KGgpLHc9Yi5NYXRoLm1heChvKm4sRyksZD1iLk1hdGgubWF4KG8vbixxKSxidD1uZXcgbnIoKCF0LmEmJih0LmE9bmV3IGhlKGRzLHQsMTAsMTEpKSx0LmEpKTtidC5lIT1idC5pLmdjKCk7KVo9dShkcihidCksMzMpLFFlPXMuYisocGwoZSwyNikqTEMrcGwoZSwyNykqTUMpKih3LVouZyksUm49cy5iKyhwbChlLDI2KSpMQytwbChlLDI3KSpNQykqKGQtWi5mKSxDdShaLFFlKSxTdShaLFJuKTtmb3IoX2U9dysocy5iK3MuYyksY2U9ZCsocy5kK3MuYSksUXQ9bmV3IG5yKCghdC5hJiYodC5hPW5ldyBoZShkcyx0LDEwLDExKSksdC5hKSk7UXQuZSE9UXQuaS5nYygpOylmb3IoanQ9dShkcihRdCksMzMpLF89bmV3IGFyKGxyKFYwKGp0KS5hLktjKCksbmV3IEgpKTtWcihfKTspaz11KElyKF8pLDc5KSxnQyhrKXx8TTVuKGssZSxfZSxjZSk7X2UrPXMuYitzLmMsY2UrPXMuZCtzLmEsZ3codCxfZSxjZSwhMSwhMCl9ZnVuY3Rpb24gU3EodCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLF8sTTtpZih0PT1udWxsKXRocm93IG50KG5ldyBjZChNdSkpO2lmKGs9dCxvPXQubGVuZ3RoLHc9ITEsbz4wJiYoZT0oJHIoMCx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KDApKSwoZT09NDV8fGU9PTQzKSYmKHQ9dC5zdWJzdHIoMSksLS1vLHc9ZT09NDUpKSxvPT0wKXRocm93IG50KG5ldyBjZCh2dytrKyciJykpO2Zvcig7dC5sZW5ndGg+MCYmKCRyKDAsdC5sZW5ndGgpLHQuY2hhckNvZGVBdCgwKT09NDgpOyl0PXQuc3Vic3RyKDEpLC0tbztpZihvPihKdWUoKSx4Z2UpWzEwXSl0aHJvdyBudChuZXcgY2QodncraysnIicpKTtmb3Iocz0wO3M8bztzKyspaWYoQWllKCgkcihzLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQocykpKT09LTEpdGhyb3cgbnQobmV3IGNkKHZ3K2srJyInKSk7Zm9yKE09MCxoPWk3dFsxMF0sXz1DdXRbMTBdLGQ9RDgoczd0WzEwXSksbj0hMCxyPW8laCxyPjAmJihNPS1wYXJzZUludCh0LnN1YnN0cigwLHIpLDEwKSx0PXQuc3Vic3RyKHIpLG8tPXIsbj0hMSk7bz49aDspe2lmKHI9cGFyc2VJbnQodC5zdWJzdHIoMCxoKSwxMCksdD10LnN1YnN0cihoKSxvLT1oLG4pbj0hMTtlbHNle2lmKF9jKE0sZCk8MCl0aHJvdyBudChuZXcgY2QodncraysnIicpKTtNPUlhKE0sXyl9TT1RcChNLHIpfWlmKF9jKE0sMCk+MCl0aHJvdyBudChuZXcgY2QodncraysnIicpKTtpZighdyYmKE09RDgoTSksX2MoTSwwKTwwKSl0aHJvdyBudChuZXcgY2QodncraysnIicpKTtyZXR1cm4gTX1mdW5jdGlvbiB3NnQodCxlKXtxS3QoKTt2YXIgbixyLHMsbyxoLGQsdztpZih0aGlzLmE9bmV3IGMydCh0aGlzKSx0aGlzLmI9dCx0aGlzLmM9ZSx0aGlzLmY9em50KE1vKChHdSgpLFNhKSxlKSksdGhpcy5mLmRjKCkpaWYoKGQ9cjR0KFNhLHQpKT09ZSlmb3IodGhpcy5lPSEwLHRoaXMuZD1uZXcgbGUsdGhpcy5mPW5ldyBFayx0aGlzLmYuRmMoRDIpLHUoRXEobUQoU2EsemwodCkpLCIiKSwyNik9PXQmJnRoaXMuZi5GYyhrXyhTYSx6bCh0KSkpLHM9dWF0KFNhLHQpLktjKCk7cy5PYigpOylzd2l0Y2gocj11KHMuUGIoKSwxNzApLCR2KE1vKFNhLHIpKSl7Y2FzZSA0Ont0aGlzLmQuRmMocik7YnJlYWt9Y2FzZSA1Ont0aGlzLmYuR2Moem50KE1vKFNhLHIpKSk7YnJlYWt9fWVsc2UgaWYoc28oKSx1KGUsNjYpLk9qKCkpZm9yKHRoaXMuZT0hMCx0aGlzLmY9bnVsbCx0aGlzLmQ9bmV3IGxlLGg9MCx3PSh0Lmk9PW51bGwmJmJkKHQpLHQuaSkubGVuZ3RoO2g8dzsrK2gpZm9yKHI9KG49KHQuaT09bnVsbCYmYmQodCksdC5pKSxoPj0wJiZoPG4ubGVuZ3RoP25baF06bnVsbCksbz16NihNbyhTYSxyKSk7bztvPXo2KE1vKFNhLG8pKSlvPT1lJiZ0aGlzLmQuRmMocik7ZWxzZSAkdihNbyhTYSxlKSk9PTEmJmQ/KHRoaXMuZj1udWxsLHRoaXMuZD0oc3goKSx1NWUpKToodGhpcy5mPW51bGwsdGhpcy5lPSEwLHRoaXMuZD0ocG4oKSxuZXcgSShlKSkpO2Vsc2UgdGhpcy5lPSR2KE1vKFNhLGUpKT09NSx0aGlzLmYuRmIoRGZ0KSYmKHRoaXMuZj1EZnQpfWZ1bmN0aW9uIGZoZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXyxNLEIscSxHO2ZvcihuPTAscj1rZm4odCxlKSxCPXQucyxxPXQudCxrPXUodShQaSh0LnIsZSksMjEpLDg0KS5LYygpO2suT2IoKTspaWYodz11KGsuUGIoKSwxMTEpLCEoIXcuY3x8dy5jLmQuYy5sZW5ndGg8PTApKXtzd2l0Y2goRz13LmIucmYoKSxkPXcuYi5YZSgoZGkoKSxtbCkpP1p0KHZlKHcuYi5XZShtbCkpKTowLF89dy5jLE09Xy5pLE0uYj0oaD1fLm4sXy5lLmEraC5iK2guYyksTS5hPShvPV8ubixfLmUuYitvLmQrby5hKSxlLmcpe2Nhc2UgMTpNLmM9dy5hPyhHLmEtTS5iKS8yOkcuYStCLE0uZD1HLmIrZCtyLFhmKF8sKHJsKCksbGIpKSxoZChfLChUdSgpLHMxKSk7YnJlYWs7Y2FzZSAzOk0uYz13LmE/KEcuYS1NLmIpLzI6Ry5hK0IsTS5kPS1kLXItTS5hLFhmKF8sKHJsKCksbGIpKSxoZChfLChUdSgpLEVmKSk7YnJlYWs7Y2FzZSAyOk0uYz0tZC1yLU0uYix3LmE/KHM9dC52P00uYTp1KFBlKF8uZCwwKSwxODEpLnJmKCkuYixNLmQ9KEcuYi1zKS8yKTpNLmQ9Ry5iK3EsWGYoXywocmwoKSxrZikpLGhkKF8sKFR1KCksaGIpKTticmVhaztjYXNlIDQ6TS5jPUcuYStkK3Isdy5hPyhzPXQudj9NLmE6dShQZShfLmQsMCksMTgxKS5yZigpLmIsTS5kPShHLmItcykvMik6TS5kPUcuYitxLFhmKF8sKHJsKCksQWQpKSxoZChfLChUdSgpLGhiKSl9KGU9PShiZSgpLE9uKXx8ZT09eXIpJiYobj1iLk1hdGgubWF4KG4sTS5hKSl9bj4wJiYodSh4byh0LmIsZSksMTI0KS5hLmI9bil9ZnVuY3Rpb24gTTRuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxfLE0sQixxLEcsVyxaLGJ0O2ZvcihtcihlLCJDb21tZW50IHByZS1wcm9jZXNzaW5nIiwxKSxuPTAsdz1uZXcgUyh0LmEpO3cuYTx3LmMuYy5sZW5ndGg7KWlmKGQ9dShRKHcpLDEwKSxCZShGZShLKGQsKHhlKCksa1MpKSkpKXtmb3IoKytuLHM9MCxyPW51bGwsaz1udWxsLEc9bmV3IFMoZC5qKTtHLmE8Ry5jLmMubGVuZ3RoOylCPXUoUShHKSwxMSkscys9Qi5lLmMubGVuZ3RoK0IuZy5jLmxlbmd0aCxCLmUuYy5sZW5ndGg9PTEmJihyPXUoUGUoQi5lLDApLDE3KSxrPXIuYyksQi5nLmMubGVuZ3RoPT0xJiYocj11KFBlKEIuZywwKSwxNyksaz1yLmQpO2lmKHM9PTEmJmsuZS5jLmxlbmd0aCtrLmcuYy5sZW5ndGg9PTEmJiFCZShGZShLKGsuaSxrUykpKSlpNW4oZCxyLGssay5pKSxDXyh3KTtlbHNle2ZvcihidD1uZXcgbGUscT1uZXcgUyhkLmopO3EuYTxxLmMuYy5sZW5ndGg7KXtmb3IoQj11KFEocSksMTEpLE09bmV3IFMoQi5nKTtNLmE8TS5jLmMubGVuZ3RoOylfPXUoUShNKSwxNyksXy5kLmcuYy5sZW5ndGg9PTB8fChidC5jW2J0LmMubGVuZ3RoXT1fKTtmb3IoaD1uZXcgUyhCLmUpO2guYTxoLmMuYy5sZW5ndGg7KW89dShRKGgpLDE3KSxvLmMuZS5jLmxlbmd0aD09MHx8KGJ0LmNbYnQuYy5sZW5ndGhdPW8pfWZvcihaPW5ldyBTKGJ0KTtaLmE8Wi5jLmMubGVuZ3RoOylXPXUoUShaKSwxNyksZHcoVywhMCl9fWUubiYmUWIoZSwiRm91bmQgIituKyIgY29tbWVudCBib3hlcyIpLG9yKGUpfWZ1bmN0aW9uIEQ0bih0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssXyxNLEIscSxHLFc7aWYoQj1adCh2ZShLKHQsKHhlKCksdkUpKSkpLHE9WnQodmUoSyh0LHdFKSkpLE09WnQodmUoSyh0LFZ5KSkpLGQ9dC5vLG89dShQZSh0LmosMCksMTEpLGg9by5uLFc9Y2duKG8sTSksISFXKXtpZihlLkhjKChpbCgpLHRnKSkpc3dpdGNoKHUoSyh0LChhZSgpLGdjKSksNjEpLmcpe2Nhc2UgMTpXLmM9KGQuYS1XLmIpLzItaC5hLFcuZD1xO2JyZWFrO2Nhc2UgMzpXLmM9KGQuYS1XLmIpLzItaC5hLFcuZD0tcS1XLmE7YnJlYWs7Y2FzZSAyOm4mJm8uZS5jLmxlbmd0aD09MCYmby5nLmMubGVuZ3RoPT0wPyhfPXI/Vy5hOnUoUGUoby5mLDApLDcwKS5vLmIsVy5kPShkLmItXykvMi1oLmIpOlcuZD1kLmIrcS1oLmIsVy5jPS1CLVcuYjticmVhaztjYXNlIDQ6biYmby5lLmMubGVuZ3RoPT0wJiZvLmcuYy5sZW5ndGg9PTA/KF89cj9XLmE6dShQZShvLmYsMCksNzApLm8uYixXLmQ9KGQuYi1fKS8yLWguYik6Vy5kPWQuYitxLWguYixXLmM9Qn1lbHNlIGlmKGUuSGMoRWIpKXN3aXRjaCh1KEsodCwoYWUoKSxnYykpLDYxKS5nKXtjYXNlIDE6Y2FzZSAzOlcuYz1oLmErQjticmVhaztjYXNlIDI6Y2FzZSA0Om4mJiFvLmM/KF89cj9XLmE6dShQZShvLmYsMCksNzApLm8uYixXLmQ9KGQuYi1fKS8yLWguYik6Vy5kPWguYitxfWZvcihzPVcuZCxrPW5ldyBTKG8uZik7ay5hPGsuYy5jLmxlbmd0aDspdz11KFEoayksNzApLEc9dy5uLEcuYT1XLmMsRy5iPXMscys9dy5vLmIrTX19ZnVuY3Rpb24gSTRuKCl7b2koZk4sbmV3IHlKKSxvaShjVSxuZXcgVEopLG9pKGROLG5ldyBEayksb2koZkx0LG5ldyBMSiksb2koTGUsbmV3IE5rKSxvaShvdChYdSwxKSxuZXcgaFQpLG9pKFdzLG5ldyBESiksb2koa3gsbmV3IHM2KSxvaShMZSxuZXcgZzEpLG9pKExlLG5ldyB3Qiksb2koTGUsbmV3IG1CKSxvaSh3YSxuZXcgeUIpLG9pKExlLG5ldyB4Qiksb2kobWgsbmV3IGtCKSxvaShtaCxuZXcgRUIpLG9pKExlLG5ldyBIZiksb2koSzcsbmV3IHZ1KSxvaShMZSxuZXcgbUopLG9pKExlLG5ldyB4Siksb2koTGUsbmV3IHd1KSxvaShMZSxuZXcgc1QpLG9pKExlLG5ldyBUQiksb2kob3QoWHUsMSksbmV3IF9CKSxvaShMZSxuZXcgaTYpLG9pKExlLG5ldyBrSiksb2kobWgsbmV3IE1rKSxvaShtaCxuZXcgRUopLG9pKExlLG5ldyBDQiksb2koSGEsbmV3IF9KKSxvaShMZSxuZXcgYVQpLG9pKFR3LG5ldyBTQiksb2koTGUsbmV3IHpMKSxvaShMZSxuZXcgb1QpLG9pKExlLG5ldyBDSiksb2koTGUsbmV3IFNKKSxvaShtaCxuZXcgcUwpLG9pKG1oLG5ldyBjVCksb2koTGUsbmV3IHAxKSxvaShMZSxuZXcgQUopLG9pKExlLG5ldyBJayksb2koTGUsbmV3IEhMKSxvaShMZSxuZXcgR2IpLG9pKExlLG5ldyB1VCksb2koX3csbmV3IFZMKSxvaShMZSxuZXcgVmYpLG9pKExlLG5ldyBsVCksb2koTGUsbmV3IGIxKSxvaShfdyxuZXcgdjEpLG9pKFR3LG5ldyBNSiksb2koTGUsbmV3IEwzKSxvaShIYSxuZXcgT2spfWZ1bmN0aW9uIG02dCh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWixidCxNdCxTdDtpZihCPWUubGVuZ3RoLEI+MCYmKHc9KCRyKDAsZS5sZW5ndGgpLGUuY2hhckNvZGVBdCgwKSksdyE9NjQpKXtpZih3PT0zNyYmKE09ZS5sYXN0SW5kZXhPZigiJSIpLGs9ITEsTSE9MCYmKE09PUItMXx8KGs9KCRyKE0rMSxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KE0rMSk9PTQ2KSkpKSl7aWYoaD1lLnN1YnN0cigxLE0tMSksU3Q9dW4oIiUiLGgpP251bGw6eTZ0KGgpLHI9MCxrKXRyeXtyPUdsKGUuc3Vic3RyKE0rMiksT2EsVGkpfWNhdGNoKGp0KXt0aHJvdyBqdD1ycyhqdCksX3QoanQsMTI3KT8oZD1qdCxudChuZXcgRiQoZCkpKTpudChqdCl9Zm9yKFo9dHl0KHQuV2coKSk7Wi5PYigpOylpZihHPWh6KFopLF90KEcsNTEwKSYmKHM9dShHLDU5MCksTXQ9cy5kLChTdD09bnVsbD9NdD09bnVsbDp1bihTdCxNdCkpJiZyLS09PTApKXJldHVybiBzO3JldHVybiBudWxsfWlmKF89ZS5sYXN0SW5kZXhPZigiLiIpLHE9Xz09LTE/ZTplLnN1YnN0cigwLF8pLG49MCxfIT0tMSl0cnl7bj1HbChlLnN1YnN0cihfKzEpLE9hLFRpKX1jYXRjaChqdCl7aWYoanQ9cnMoanQpLF90KGp0LDEyNykpcT1lO2Vsc2UgdGhyb3cgbnQoanQpfWZvcihxPXVuKCIlIixxKT9udWxsOnk2dChxKSxXPXR5dCh0LldnKCkpO1cuT2IoKTspaWYoRz1oeihXKSxfdChHLDE5MSkmJihvPXUoRywxOTEpLGJ0PW8ubmUoKSwocT09bnVsbD9idD09bnVsbDp1bihxLGJ0KSkmJm4tLT09MCkpcmV0dXJuIG87cmV0dXJuIG51bGx9cmV0dXJuIEZsZSh0LGUpfWZ1bmN0aW9uIE80bih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWixidCxNdCxTdCxqdCxRdCxjZSxfZSxXZSxRZSxSbix6bjtmb3IoY2U9bmV3IGxlLEc9bmV3IFModC5iKTtHLmE8Ry5jLmMubGVuZ3RoOylmb3IocT11KFEoRyksMjkpLGJ0PW5ldyBTKHEuYSk7YnQuYTxidC5jLmMubGVuZ3RoOylpZihXPXUoUShidCksMTApLFcuaz09KEduKCksSXMpJiZlYShXLChhZSgpLFZWKSkpe2ZvcihNdD1udWxsLGp0PW51bGwsU3Q9bnVsbCxRZT1uZXcgUyhXLmopO1FlLmE8UWUuYy5jLmxlbmd0aDspc3dpdGNoKFdlPXUoUShRZSksMTEpLFdlLmouZyl7Y2FzZSA0Ok10PVdlO2JyZWFrO2Nhc2UgMjpqdD1XZTticmVhaztkZWZhdWx0OlN0PVdlfWZvcihRdD11KFBlKFN0LmcsMCksMTcpLF89bmV3IHlSKFF0LmEpLGs9bmV3IFNvKFN0Lm4pLEZpKGssVy5uKSxNPXNpKF8sMCksWE0oTSxrKSxfZT1CRChRdC5hKSxCPW5ldyBTbyhTdC5uKSxGaShCLFcubiksa3MoX2UsQixfZS5jLmIsX2UuYyksUm49dShLKFcsVlYpLDEwKSx6bj11KFBlKFJuLmosMCksMTEpLHc9dShQMShNdC5lLE50KG5sdCxSb3QsMTcsMCwwLDEpKSw0NzQpLHI9dyxvPTAsZD1yLmxlbmd0aDtvPGQ7KytvKWU9cltvXSxwYShlLHpuKSxNaXQoZS5hLGUuYS5iLF8pO2Zvcih3PXBkKGp0LmcpLG49dyxzPTAsaD1uLmxlbmd0aDtzPGg7KytzKWU9bltzXSxCYShlLHpuKSxNaXQoZS5hLDAsX2UpO0JhKFF0LG51bGwpLHBhKFF0LG51bGwpLGNlLmNbY2UuYy5sZW5ndGhdPVd9Zm9yKFo9bmV3IFMoY2UpO1ouYTxaLmMuYy5sZW5ndGg7KVc9dShRKFopLDEwKSxMbyhXLG51bGwpfWZ1bmN0aW9uIGRoZSgpe2RoZT1YO3ZhciB0LGUsbjtmb3IobmV3IGtEKDEsMCksbmV3IGtEKDEwLDApLG5ldyBrRCgwLDApLGtnZT1OdChTdXQscmUsMjQwLDExLDAsMSksTjI9TnQoRWgsd2QsMjUsMTAwLDE1LDEpLHU3dD11dChvdChnYSwxKSxUbywyNSwxNSxbMSw1LDI1LDEyNSw2MjUsMzEyNSwxNTYyNSw3ODEyNSwzOTA2MjUsMTk1MzEyNSw5NzY1NjI1LDQ4ODI4MTI1LDI0NDE0MDYyNSwxMjIwNzAzMTI1LDYxMDM1MTU2MjUsMzA1MTc1NzgxMjUsMTUyNTg3ODkwNjI1LDc2MjkzOTQ1MzEyNSwzODE0Njk3MjY1NjI1LDE5MDczNDg2MzI4MTI1LDk1MzY3NDMxNjQwNjI1LDQ3NjgzNzE1ODIwMzEyNSwweDg3ODY3ODMyNmVhYzldKSxsN3Q9TnQoU3IsSnIsMjUsdTd0Lmxlbmd0aCwxNSwxKSxoN3Q9dXQob3QoZ2EsMSksVG8sMjUsMTUsWzEsMTAsMTAwLFZnLDFlNCx1b3QsMWU2LDFlNywxZTgsTnEsMWUxMCwxZTExLDFlMTIsMWUxMywxZTE0LDFlMTUsMWUxNl0pLGY3dD1OdChTcixKciwyNSxoN3QubGVuZ3RoLDE1LDEpLGQ3dD1OdChTdXQscmUsMjQwLDExLDAsMSksdD0wO3Q8ZDd0Lmxlbmd0aDt0Kyspa2dlW3RdPW5ldyBrRCh0LDApLGQ3dFt0XT1uZXcga0QoMCx0KSxOMlt0XT00ODtmb3IoO3Q8TjIubGVuZ3RoO3QrKylOMlt0XT00ODtmb3Iobj0wO248bDd0Lmxlbmd0aDtuKyspbDd0W25dPVk0dCh1N3Rbbl0pO2ZvcihlPTA7ZTxmN3QubGVuZ3RoO2UrKylmN3RbZV09WTR0KGg3dFtlXSk7ZzcoKX1mdW5jdGlvbiBONG4oKXtmdW5jdGlvbiB0KCl7dGhpcy5vYmo9dGhpcy5jcmVhdGVPYmplY3QoKX1yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuY3JlYXRlKG51bGwpfSx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub2JqW2VdfSx0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSxuKXt0aGlzLm9ialtlXT1ufSx0LnByb3RvdHlwZVtkb3RdPWZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzLm9ialtlXX0sdC5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzLm9iail9LHQucHJvdG90eXBlLmVudHJpZXM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmtleXMoKSxuPXRoaXMscj0wO3JldHVybntuZXh0OmZ1bmN0aW9uKCl7aWYocj49ZS5sZW5ndGgpcmV0dXJue2RvbmU6ITB9O3ZhciBzPWVbcisrXTtyZXR1cm57dmFsdWU6W3Msbi5nZXQocyldLGRvbmU6ITF9fX19LFJ2bigpfHwodC5wcm90b3R5cGUuY3JlYXRlT2JqZWN0PWZ1bmN0aW9uKCl7cmV0dXJue319LHQucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vYmpbIjoiK2VdfSx0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSxuKXt0aGlzLm9ialsiOiIrZV09bn0sdC5wcm90b3R5cGVbZG90XT1mdW5jdGlvbihlKXtkZWxldGUgdGhpcy5vYmpbIjoiK2VdfSx0LnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciBuIGluIHRoaXMub2JqKW4uY2hhckNvZGVBdCgwKT09NTgmJmUucHVzaChuLnN1YnN0cmluZygxKSk7cmV0dXJuIGV9KSx0fWZ1bmN0aW9uIFA0bih0KXtaNXQoKTt2YXIgZSxuLHIscyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWjtpZih0PT1udWxsKXJldHVybiBudWxsO2lmKE09dC5sZW5ndGgqOCxNPT0wKXJldHVybiIiO2ZvcihkPU0lMjQscT1NLzI0fDAsQj1kIT0wP3ErMTpxLG89bnVsbCxvPU50KEVoLHdkLDI1LEIqNCwxNSwxKSxrPTAsXz0wLGU9MCxuPTAscj0wLGg9MCxzPTAsdz0wO3c8cTt3KyspZT10W3MrK10sbj10W3MrK10scj10W3MrK10sXz0obiYxNSk8PDI0Pj4yNCxrPShlJjMpPDwyND4+MjQsRz1lJi0xMjg/KGU+PjJeMTkyKTw8MjQ+PjI0OmU+PjI8PDI0Pj4yNCxXPW4mLTEyOD8obj4+NF4yNDApPDwyND4+MjQ6bj4+NDw8MjQ+PjI0LFo9ciYtMTI4PyhyPj42XjI1Mik8PDI0Pj4yNDpyPj42PDwyND4+MjQsb1toKytdPW9wW0ddLG9baCsrXT1vcFtXfGs8PDRdLG9baCsrXT1vcFtfPDwyfFpdLG9baCsrXT1vcFtyJjYzXTtyZXR1cm4gZD09OD8oZT10W3NdLGs9KGUmMyk8PDI0Pj4yNCxHPWUmLTEyOD8oZT4+Ml4xOTIpPDwyND4+MjQ6ZT4+Mjw8MjQ+PjI0LG9baCsrXT1vcFtHXSxvW2grK109b3Bbazw8NF0sb1toKytdPTYxLG9baCsrXT02MSk6ZD09MTYmJihlPXRbc10sbj10W3MrMV0sXz0obiYxNSk8PDI0Pj4yNCxrPShlJjMpPDwyND4+MjQsRz1lJi0xMjg/KGU+PjJeMTkyKTw8MjQ+PjI0OmU+PjI8PDI0Pj4yNCxXPW4mLTEyOD8obj4+NF4yNDApPDwyND4+MjQ6bj4+NDw8MjQ+PjI0LG9baCsrXT1vcFtHXSxvW2grK109b3BbV3xrPDw0XSxvW2grK109b3BbXzw8Ml0sb1toKytdPTYxKSxJaChvLDAsby5sZW5ndGgpfWZ1bmN0aW9uIEY0bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3O2lmKHQuZT09MCYmdC5wPjAmJih0LnA9LSh0LnAtMSkpLHQucD5PYSYmSnd0KGUsdC5wLWliKSxoPWUucS5nZXREYXRlKCksbkQoZSwxKSx0Lms+PTAmJndybihlLHQuayksdC5jPj0wP25EKGUsdC5jKTp0Lms+PTA/KHc9bmV3IHl5dChlLnEuZ2V0RnVsbFllYXIoKS1pYixlLnEuZ2V0TW9udGgoKSwzNSkscj0zNS13LnEuZ2V0RGF0ZSgpLG5EKGUsYi5NYXRoLm1pbihyLGgpKSk6bkQoZSxoKSx0LmY8MCYmKHQuZj1lLnEuZ2V0SG91cnMoKSksdC5iPjAmJnQuZjwxMiYmKHQuZis9MTIpLExYZShlLHQuZj09MjQmJnQuZz8wOnQuZiksdC5qPj0wJiZMc24oZSx0LmopLHQubj49MCYmV3NuKGUsdC5uKSx0Lmk+PTAmJnpHdChlLFJhKElhKGVJKEF1KGUucS5nZXRUaW1lKCkpLFZnKSxWZyksdC5pKSksdC5hJiYocz1uZXcgQ1IsSnd0KHMscy5xLmdldEZ1bGxZZWFyKCktaWItODApLGJldChBdShlLnEuZ2V0VGltZSgpKSxBdShzLnEuZ2V0VGltZSgpKSkmJkp3dChlLHMucS5nZXRGdWxsWWVhcigpLWliKzEwMCkpLHQuZD49MCl7aWYodC5jPT0tMSluPSg3K3QuZC1lLnEuZ2V0RGF5KCkpJTcsbj4zJiYobi09NyksZD1lLnEuZ2V0TW9udGgoKSxuRChlLGUucS5nZXREYXRlKCkrbiksZS5xLmdldE1vbnRoKCkhPWQmJm5EKGUsZS5xLmdldERhdGUoKSsobj4wPy03OjcpKTtlbHNlIGlmKGUucS5nZXREYXkoKSE9dC5kKXJldHVybiExfXJldHVybiB0Lm8+T2EmJihvPWUucS5nZXRUaW1lem9uZU9mZnNldCgpLHpHdChlLFJhKEF1KGUucS5nZXRUaW1lKCkpLCh0Lm8tbykqNjAqVmcpKSksITB9ZnVuY3Rpb24gZ2hlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxfLE0sQixxLEcsVyxaLGJ0LE10LFN0LGp0O2lmKHM9SyhlLChhZSgpLElpKSksISFfdChzLDIzOSkpe2ZvcihHPXUocywzMyksVz1lLmUsQj1uZXcgU28oZS5jKSxvPWUuZCxCLmErPW8uYixCLmIrPW8uZCxqdD11KHplKEcsKHhlKCksaUcpKSwxNzQpLHp1KGp0LChibCgpLEdHKSkmJihxPXUoemUoRyxyX3QpLDExNiksWmd0KHEsby5hKSx4dHQocSxvLmQpLEpndChxLG8uYiksaXB0KHEsby5jKSksbj1uZXcgbGUsXz1uZXcgUyhlLmEpO18uYTxfLmMuYy5sZW5ndGg7KWZvcih3PXUoUShfKSwxMCksX3QoSyh3LElpKSwyMzkpP3E0bih3LEIpOl90KEsodyxJaSksMTg2KSYmIVcmJihyPXUoSyh3LElpKSwxMTgpLE10PXNsZShlLHcsci5nLHIuZiksazEocixNdC5hLE10LmIpKSxidD1uZXcgUyh3LmopO2J0LmE8YnQuYy5jLmxlbmd0aDspWj11KFEoYnQpLDExKSx5cyhXaShuZXcga24obnVsbCxuZXcgVG4oWi5nLDE2KSksbmV3IEZhKHcpKSxuZXcgSHIobikpO2lmKFcpZm9yKGJ0PW5ldyBTKFcuaik7YnQuYTxidC5jLmMubGVuZ3RoOylaPXUoUShidCksMTEpLHlzKFdpKG5ldyBrbihudWxsLG5ldyBUbihaLmcsMTYpKSxuZXcgc3MoVykpLG5ldyBxbyhuKSk7Zm9yKFN0PXUoemUoRyxYMCksMjE4KSxkPW5ldyBTKG4pO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShRKGQpLDE3KSxlNG4oaCxTdCxCKTtmb3IoWXduKGUpLGs9bmV3IFMoZS5hKTtrLmE8ay5jLmMubGVuZ3RoOyl3PXUoUShrKSwxMCksTT13LmUsTSYmZ2hlKHQsTSl9fWZ1bmN0aW9uIHBoZSh0KXtTdih0LG5ldyB5Mih0YnQobVIoRXYoeXYoa3YoeHYobmV3IG1nLFdsKSwiRUxLIEZvcmNlIiksIkZvcmNlLWJhc2VkIGFsZ29yaXRobSBwcm92aWRlZCBieSB0aGUgRWNsaXBzZSBMYXlvdXQgS2VybmVsLiBJbXBsZW1lbnRzIG1ldGhvZHMgdGhhdCBmb2xsb3cgcGh5c2ljYWwgYW5hbG9naWVzIGJ5IHNpbXVsYXRpbmcgZm9yY2VzIHRoYXQgbW92ZSB0aGUgbm9kZXMgaW50byBhIGJhbGFuY2VkIGRpc3RyaWJ1dGlvbi4gQ3VycmVudGx5IHRoZSBvcmlnaW5hbCBFYWRlcyBtb2RlbCBhbmQgdGhlIEZydWNodGVybWFuIC0gUmVpbmdvbGQgbW9kZWwgYXJlIHN1cHBvcnRlZC4iKSxuZXcgdmcpLFdsKSxLaSgocDcoKSx0VSksdXQob3QoZVUsMSksb2UsMjM3LDAsW1pHXSkpKSkpLHdlKHQsV2wsakksZGUoMSkpLHdlKHQsV2wsa3ksODApLHdlKHQsV2wsUG90LDUpLHdlKHQsV2wscHgsUDcpLHdlKHQsV2wsSHEsZGUoMSkpLHdlKHQsV2wsUEMsKEZuKCksITApKSx3ZSh0LFdsLHd3LGhFdCksd2UodCxXbCwkSSxJZShjRXQpKSx3ZSh0LFdsLEZvdCxJZShmRXQpKSx3ZSh0LFdsLFZxLCExKSx3ZSh0LFdsLEZDLEllKGxFdCkpLHdlKHQsV2wsYngsSWUoWnBlKSksd2UodCxXbCxNNCxJZShRcGUpKSx3ZSh0LFdsLEY3LEllKFhwZSkpLHdlKHQsV2wsQjcsSWUodGJlKSksd2UodCxXbCxxcSxJZSh1RXQpKSx3ZSh0LFdsLE9vdCxJZShXdXQpKSx3ZSh0LFdsLHN4dCxJZShpVikpLHdlKHQsV2wsTm90LEllKFV1dCkpLHdlKHQsV2wsYXh0LEllKGRFdCkpfWZ1bmN0aW9uIGJoZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXyxNLEIscTtpZighdSh1KFBpKHQucixlKSwyMSksODQpLmRjKCkpe2lmKGg9dSh4byh0LmIsZSksMTI0KSx3PWguaSxkPWgubixfPWVhdCh0LGUpLHI9dy5iLWQuYi1kLmMscz1oLmEuYSxvPXcuYytkLmIscT10LncsKF89PSh1NCgpLHhiKXx8Xz09Sk8pJiZ1KHUoUGkodC5yLGUpLDIxKSw4NCkuZ2MoKT09MSYmKHM9Xz09eGI/cy0yKnQudzpzLF89WFMpLHI8cyYmIXQuQi5IYygoYmwoKSxVRykpKV89PXhiPyhxKz0oci1zKS8odSh1KFBpKHQucixlKSwyMSksODQpLmdjKCkrMSksbys9cSk6cSs9KHItcykvKHUodShQaSh0LnIsZSksMjEpLDg0KS5nYygpLTEpO2Vsc2Ugc3dpdGNoKHI8cyYmKHM9Xz09eGI/cy0yKnQudzpzLF89WFMpLF8uZyl7Y2FzZSAzOm8rPShyLXMpLzI7YnJlYWs7Y2FzZSA0Om8rPXItczticmVhaztjYXNlIDA6bj0oci1zKS8odSh1KFBpKHQucixlKSwyMSksODQpLmdjKCkrMSkscSs9Yi5NYXRoLm1heCgwLG4pLG8rPXE7YnJlYWs7Y2FzZSAxOm49KHItcykvKHUodShQaSh0LnIsZSksMjEpLDg0KS5nYygpLTEpLHErPWIuTWF0aC5tYXgoMCxuKX1mb3IoQj11KHUoUGkodC5yLGUpLDIxKSw4NCkuS2MoKTtCLk9iKCk7KU09dShCLlBiKCksMTExKSxNLmUuYT1vK00uZC5iLE0uZS5iPShrPU0uYixrLlhlKChkaSgpLG1sKSk/ay5IZigpPT0oYmUoKSxPbik/LWsucmYoKS5iLVp0KHZlKGsuV2UobWwpKSk6WnQodmUoay5XZShtbCkpKTprLkhmKCk9PShiZSgpLE9uKT8tay5yZigpLmI6MCksbys9TS5kLmIrTS5iLnJmKCkuYStNLmQuYytxfX1mdW5jdGlvbiB2aGUodCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLF8sTSxCLHEsRztpZighdSh1KFBpKHQucixlKSwyMSksODQpLmRjKCkpe2lmKGg9dSh4byh0LmIsZSksMTI0KSx3PWguaSxkPWgubixNPWVhdCh0LGUpLHI9dy5hLWQuZC1kLmEscz1oLmEuYixvPXcuZCtkLmQsRz10Lncsaz10Lm8uYSwoTT09KHU0KCkseGIpfHxNPT1KTykmJnUodShQaSh0LnIsZSksMjEpLDg0KS5nYygpPT0xJiYocz1NPT14Yj9zLTIqdC53OnMsTT1YUykscjxzJiYhdC5CLkhjKChibCgpLFVHKSkpTT09eGI/KEcrPShyLXMpLyh1KHUoUGkodC5yLGUpLDIxKSw4NCkuZ2MoKSsxKSxvKz1HKTpHKz0oci1zKS8odSh1KFBpKHQucixlKSwyMSksODQpLmdjKCktMSk7ZWxzZSBzd2l0Y2gocjxzJiYocz1NPT14Yj9zLTIqdC53OnMsTT1YUyksTS5nKXtjYXNlIDM6bys9KHItcykvMjticmVhaztjYXNlIDQ6bys9ci1zO2JyZWFrO2Nhc2UgMDpuPShyLXMpLyh1KHUoUGkodC5yLGUpLDIxKSw4NCkuZ2MoKSsxKSxHKz1iLk1hdGgubWF4KDAsbiksbys9RzticmVhaztjYXNlIDE6bj0oci1zKS8odSh1KFBpKHQucixlKSwyMSksODQpLmdjKCktMSksRys9Yi5NYXRoLm1heCgwLG4pfWZvcihxPXUodShQaSh0LnIsZSksMjEpLDg0KS5LYygpO3EuT2IoKTspQj11KHEuUGIoKSwxMTEpLEIuZS5hPShfPUIuYixfLlhlKChkaSgpLG1sKSk/Xy5IZigpPT0oYmUoKSxCbik/LV8ucmYoKS5hLVp0KHZlKF8uV2UobWwpKSk6aytadCh2ZShfLldlKG1sKSkpOl8uSGYoKT09KGJlKCksQm4pPy1fLnJmKCkuYTprKSxCLmUuYj1vK0IuZC5kLG8rPUIuZC5kK0IuYi5yZigpLmIrQi5kLmErR319ZnVuY3Rpb24gQjRuKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxfLE0sQixxLEcsVztmb3IodC5uPVp0KHZlKEsodC5nLCh4ZSgpLEJ3KSkpKSx0LmU9WnQodmUoSyh0LmcsJDIpKSksdC5pPXQuZy5iLmMubGVuZ3RoLGQ9dC5pLTEsQj0wLHQuaj0wLHQuaz0wLHQuYT1MMShOdChIYSxyZSwxOSx0LmksMCwxKSksdC5iPUwxKE50KHdhLHJlLDMzMyx0LmksNywxKSksaD1uZXcgUyh0LmcuYik7aC5hPGguYy5jLmxlbmd0aDspe2ZvcihzPXUoUShoKSwyOSkscy5wPWQsTT1uZXcgUyhzLmEpO00uYTxNLmMuYy5sZW5ndGg7KV89dShRKE0pLDEwKSxfLnA9QiwrK0I7LS1kfWZvcih0LmY9TnQoU3IsSnIsMjUsQiwxNSwxKSx0LmM9WmIoU3IsW3JlLEpyXSxbNDgsMjVdLDE1LFtCLDNdLDIpLHQubz1uZXcgbGUsdC5wPW5ldyBsZSxlPTAsdC5kPTAsbz1uZXcgUyh0LmcuYik7by5hPG8uYy5jLmxlbmd0aDspe2ZvcihzPXUoUShvKSwyOSksZD1zLnAscj0wLFc9MCx3PXMuYS5jLmxlbmd0aCxrPTAsTT1uZXcgUyhzLmEpO00uYTxNLmMuYy5sZW5ndGg7KV89dShRKE0pLDEwKSxCPV8ucCx0LmZbQl09Xy5jLnAsays9Xy5vLmIrdC5uLG49TjAobmV3IGFyKGxyKFVvKF8pLmEuS2MoKSxuZXcgSCkpKSxHPU4wKG5ldyBhcihscigkcyhfKS5hLktjKCksbmV3IEgpKSksdC5jW0JdWzBdPUctbix0LmNbQl1bMV09bix0LmNbQl1bMl09RyxyKz1uLFcrPUcsbj4wJiZ1ZSh0LnAsXyksdWUodC5vLF8pO2UtPXIscT13K2Usays9ZSp0LmUsbGgodC5hLGQsZGUocSkpLGxoKHQuYixkLGspLHQuaj1iLk1hdGgubWF4KHQuaixxKSx0Lms9Yi5NYXRoLm1heCh0LmssayksdC5kKz1lLGUrPVd9fWZ1bmN0aW9uIGJlKCl7YmU9WDt2YXIgdDthYz1uZXcgRE0oT0MsMCksT249bmV3IERNKFJxLDEpLEhuPW5ldyBETShFb3QsMikseXI9bmV3IERNKFRvdCwzKSxCbj1uZXcgRE0oX290LDQpLFcxPShwbigpLG5ldyBZaygodD11KFdmKFphKSw5KSxuZXcgb2godCx1KGZmKHQsdC5sZW5ndGgpLDkpLDApKSkpLE1mPUZnKEtpKE9uLHV0KG90KFphLDEpLENjLDYxLDAsW10pKSkseGg9RmcoS2koSG4sdXQob3QoWmEsMSksQ2MsNjEsMCxbXSkpKSxabD1GZyhLaSh5cix1dChvdChaYSwxKSxDYyw2MSwwLFtdKSkpLFVoPUZnKEtpKEJuLHV0KG90KFphLDEpLENjLDYxLDAsW10pKSksSXU9RmcoS2koT24sdXQob3QoWmEsMSksQ2MsNjEsMCxbeXJdKSkpLGd1PUZnKEtpKEhuLHV0KG90KFphLDEpLENjLDYxLDAsW0JuXSkpKSxEZj1GZyhLaShPbix1dChvdChaYSwxKSxDYyw2MSwwLFtCbl0pKSksb2w9RmcoS2koT24sdXQob3QoWmEsMSksQ2MsNjEsMCxbSG5dKSkpLEpsPUZnKEtpKHlyLHV0KG90KFphLDEpLENjLDYxLDAsW0JuXSkpKSxraD1GZyhLaShIbix1dChvdChaYSwxKSxDYyw2MSwwLFt5cl0pKSksY2w9RmcoS2koT24sdXQob3QoWmEsMSksQ2MsNjEsMCxbSG4sQm5dKSkpLER1PUZnKEtpKEhuLHV0KG90KFphLDEpLENjLDYxLDAsW3lyLEJuXSkpKSxPdT1GZyhLaShPbix1dChvdChaYSwxKSxDYyw2MSwwLFt5cixCbl0pKSksWXU9RmcoS2koT24sdXQob3QoWmEsMSksQ2MsNjEsMCxbSG4seXJdKSkpLFljPUZnKEtpKE9uLHV0KG90KFphLDEpLENjLDYxLDAsW0huLHlyLEJuXSkpKX1mdW5jdGlvbiB3aGUodCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFosYnQsTXQsU3Q7aWYoZS5iIT0wKXtmb3IocT1uZXcgY3MsZD1udWxsLEc9bnVsbCxyPUNzKGIuTWF0aC5mbG9vcihiLk1hdGgubG9nKGUuYikqYi5NYXRoLkxPRzEwRSkrMSksdz0wLFN0PXNpKGUsMCk7U3QuYiE9U3QuZC5jOylmb3IoYnQ9dShpaShTdCksODYpLEd0KEcpIT09R3QoSyhidCwobWMoKSxSUykpKSYmKEc9anIoSyhidCxSUykpLHc9MCksRyE9bnVsbD9kPUcralF0KHcrKyxyKTpkPWpRdCh3KyssciksZWUoYnQsUlMsZCksWj0ocz1zaShuZXcgU3AoYnQpLmEuZCwwKSxuZXcgcDYocykpO2tSKFouYSk7KVc9dShpaShaLmEpLDE4OCkuYyxrcyhxLFcscS5jLmIscS5jKSxlZShXLFJTLGQpO2ZvcihCPW5ldyBBcixoPTA7aDxkLmxlbmd0aC1yO2grKylmb3IoTXQ9c2koZSwwKTtNdC5iIT1NdC5kLmM7KWJ0PXUoaWkoTXQpLDg2KSxrPUJsKGpyKEsoYnQsKG1jKCksUlMpKSksMCxoKzEpLG49KGs9PW51bGw/Y2MoRm8oQi5mLG51bGwpKTpVVChCLmcsaykpIT1udWxsP3Uoaz09bnVsbD9jYyhGbyhCLmYsbnVsbCkpOlVUKEIuZyxrKSwxOSkuYSsxOjEsQW8oQixrLGRlKG4pKTtmb3IoTT1uZXcgZDIobmV3IGtnKEIpLmEpO00uYjspXz1ZdihNKSxvPWRlKHRyKHQuYSxfLmNkKCkpIT1udWxsP3UodHIodC5hLF8uY2QoKSksMTkpLmE6MCksQW8odC5hLGpyKF8uY2QoKSksZGUodShfLmRkKCksMTkpLmErby5hKSksbz11KHRyKHQuYixfLmNkKCkpLDE5KSwoIW98fG8uYTx1KF8uZGQoKSwxOSkuYSkmJkFvKHQuYixqcihfLmNkKCkpLHUoXy5kZCgpLDE5KSk7d2hlKHQscSl9fWZ1bmN0aW9uIFI0bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWixidDtmb3IobXIobiwiSW50ZXJhY3RpdmUgbm9kZSBsYXllcmluZyIsMSkscj1uZXcgbGUscT1uZXcgUyhlLmEpO3EuYTxxLmMuYy5sZW5ndGg7KXtmb3IoTT11KFEocSksMTApLGs9TS5uLmEsdz1rK00uby5hLHc9Yi5NYXRoLm1heChrKzEsdyksYnQ9bmV3IHhhKHIsMCkscz1udWxsO2J0LmI8YnQuZC5nYygpOylpZihXPShabihidC5iPGJ0LmQuZ2MoKSksdShidC5kLlhiKGJ0LmM9YnQuYisrKSw1NjkpKSxXLmM+PXcpe1puKGJ0LmI+MCksYnQuYS5YYihidC5jPS0tYnQuYik7YnJlYWt9ZWxzZSBXLmE+ayYmKHM/KFJzKHMuYixXLmIpLHMuYT1iLk1hdGgubWF4KHMuYSxXLmEpLERsKGJ0KSk6KHVlKFcuYixNKSxXLmM9Yi5NYXRoLm1pbihXLmMsayksVy5hPWIuTWF0aC5tYXgoVy5hLHcpLHM9VykpO3N8fChzPW5ldyBycXQscy5jPWsscy5hPXcsUm0oYnQscyksdWUocy5iLE0pKX1mb3IoZD1lLmIsXz0wLFo9bmV3IFMocik7Wi5hPFouYy5jLmxlbmd0aDspZm9yKFc9dShRKFopLDU2OSksbz1uZXcgTGgoZSksby5wPV8rKyxkLmNbZC5jLmxlbmd0aF09byxHPW5ldyBTKFcuYik7Ry5hPEcuYy5jLmxlbmd0aDspTT11KFEoRyksMTApLExvKE0sbyksTS5wPTA7Zm9yKEI9bmV3IFMoZS5hKTtCLmE8Qi5jLmMubGVuZ3RoOylNPXUoUShCKSwxMCksTS5wPT0wJiZ0dWUodCxNLGUpO2ZvcihoPW5ldyB4YShkLDApO2guYjxoLmQuZ2MoKTspKFpuKGguYjxoLmQuZ2MoKSksdShoLmQuWGIoaC5jPWguYisrKSwyOSkpLmEuYy5sZW5ndGg9PTAmJkRsKGgpO2UuYS5jPU50KFFuLE1lLDEsMCw1LDEpLG9yKG4pfWZ1bmN0aW9uIGo0bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssXyxNLEI7aWYoZS5lLmMubGVuZ3RoIT0wJiZuLmUuYy5sZW5ndGghPTApe2lmKHI9dShQZShlLmUsMCksMTcpLmMuaSxoPXUoUGUobi5lLDApLDE3KS5jLmkscj09aClyZXR1cm4gbXUodShLKHUoUGUoZS5lLDApLDE3KSwoYWUoKSxMYykpLDE5KS5hLHUoSyh1KFBlKG4uZSwwKSwxNyksTGMpLDE5KS5hKTtmb3IoXz10LmEsTT0wLEI9Xy5sZW5ndGg7TTxCOysrTSl7aWYoaz1fW01dLGs9PXIpcmV0dXJuIDE7aWYoaz09aClyZXR1cm4tMX19cmV0dXJuIGUuZy5jLmxlbmd0aCE9MCYmbi5nLmMubGVuZ3RoIT0wPyhvPXUoSyhlLChhZSgpLFJsdCkpLDEwKSx3PXUoSyhuLFJsdCksMTApLHM9MCxkPTAsZWEodShQZShlLmcsMCksMTcpLExjKSYmKHM9dShLKHUoUGUoZS5nLDApLDE3KSxMYyksMTkpLmEpLGVhKHUoUGUobi5nLDApLDE3KSxMYykmJihkPXUoSyh1KFBlKGUuZywwKSwxNyksTGMpLDE5KS5hKSxvJiZvPT13P0JlKEZlKEsodShQZShlLmcsMCksMTcpLEgxKSkpJiYhQmUoRmUoSyh1KFBlKG4uZywwKSwxNyksSDEpKSk/MTohQmUoRmUoSyh1KFBlKGUuZywwKSwxNyksSDEpKSkmJkJlKEZlKEsodShQZShuLmcsMCksMTcpLEgxKSkpfHxzPGQ/LTE6cz5kPzE6MDoodC5iJiYodC5iLl9iKG8pJiYocz11KHQuYi54YyhvKSwxOSkuYSksdC5iLl9iKHcpJiYoZD11KHQuYi54Yyh3KSwxOSkuYSkpLHM8ZD8tMTpzPmQ/MTowKSk6ZS5lLmMubGVuZ3RoIT0wJiZuLmcuYy5sZW5ndGghPTA/MTotMX1mdW5jdGlvbiAkNG4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFosYnQsTXQsU3QsanQsUXQsY2UsX2U7Zm9yKG1yKGUsYzFlLDEpLFc9bmV3IGxlLGNlPW5ldyBsZSxrPW5ldyBTKHQuYik7ay5hPGsuYy5jLmxlbmd0aDspZm9yKHc9dShRKGspLDI5KSxidD0tMSxHPXNEKHcuYSksTT1HLEI9MCxxPU0ubGVuZ3RoO0I8cTsrK0IpaWYoXz1NW0JdLCsrYnQsISEoXy5rPT0oR24oKSxxcykmJlYzKHUoSyhfLCh4ZSgpLHdzKSksOTgpKSkpe2ZvcihENih1KEsoXywoeGUoKSx3cykpLDk4KSl8fE8ybihfKSxlZShfLChhZSgpLER3KSxfKSxXLmM9TnQoUW4sTWUsMSwwLDUsMSksY2UuYz1OdChRbixNZSwxLDAsNSwxKSxuPW5ldyBsZSxqdD1uZXcgY3MsZml0KGp0LHFnKF8sKGJlKCksT24pKSksRGhlKHQsanQsVyxjZSxuKSxkPWJ0LF9lPV8sbz1uZXcgUyhXKTtvLmE8by5jLmMubGVuZ3RoOylyPXUoUShvKSwxMCksb3kocixkLHcpLCsrYnQsZWUocixEdyxfKSxoPXUoUGUoci5qLDApLDExKSxaPXUoSyhoLElpKSwxMSksQmUoRmUoSyhaLEhsdCkpKXx8dShLKHIsTXgpLDE1KS5GYyhfZSk7Zm9yKE1oKGp0KSxTdD1xZyhfLHlyKS5LYygpO1N0Lk9iKCk7KU10PXUoU3QuUGIoKSwxMSksa3MoanQsTXQsanQuYSxqdC5hLmEpO2ZvcihEaGUodCxqdCxjZSxudWxsLG4pLFF0PV8scz1uZXcgUyhjZSk7cy5hPHMuYy5jLmxlbmd0aDspcj11KFEocyksMTApLG95KHIsKytidCx3KSxlZShyLER3LF8pLGg9dShQZShyLmosMCksMTEpLFo9dShLKGgsSWkpLDExKSxCZShGZShLKFosSGx0KSkpfHx1KEsoUXQsTXgpLDE1KS5GYyhyKTtuLmMubGVuZ3RoPT0wfHxlZShfLFY5dCxuKX1vcihlKX1mdW5jdGlvbiBtaGUodCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFosYnQsTXQsU3QsanQsUXQsY2UsX2UsV2UsUWUsUm4sem4saHIseGksS3M7Zm9yKE09dShLKHQsKFVwKCksVHgpKSwzMyksYnQ9VGksTXQ9VGksVz1PYSxaPU9hLGp0PW5ldyBTKHQuZSk7anQuYTxqdC5jLmMubGVuZ3RoOylTdD11KFEoanQpLDE0NCksUWU9U3QuZCxSbj1TdC5lLGJ0PWIuTWF0aC5taW4oYnQsUWUuYS1Sbi5hLzIpLE10PWIuTWF0aC5taW4oTXQsUWUuYi1Sbi5iLzIpLFc9Yi5NYXRoLm1heChXLFFlLmErUm4uYS8yKSxaPWIuTWF0aC5tYXgoWixRZS5iK1JuLmIvMik7Zm9yKFdlPXUoemUoTSwobjEoKSxKcGUpKSwxMTYpLF9lPW5ldyBSZShXZS5iLWJ0LFdlLmQtTXQpLGQ9bmV3IFModC5lKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoUShkKSwxNDQpLGNlPUsoaCxUeCksX3QoY2UsMjM5KSYmKHE9dShjZSwzMyksUXQ9RmkoaC5kLF9lKSxrMShxLFF0LmEtcS5nLzIsUXQuYi1xLmYvMikpO2ZvcihyPW5ldyBTKHQuYyk7ci5hPHIuYy5jLmxlbmd0aDspbj11KFEociksMjgyKSxrPXUoSyhuLFR4KSw3OSksXz15NChrLCEwLCEwKSx6bj0oeGk9ZmEodWMobi5kLmQpLG4uYy5kKSx1Nyh4aSxuLmMuZS5hLG4uYy5lLmIpLEZpKHhpLG4uYy5kKSksb2ooXyx6bi5hLHpuLmIpLGU9KEtzPWZhKHVjKG4uYy5kKSxuLmQuZCksdTcoS3Msbi5kLmUuYSxuLmQuZS5iKSxGaShLcyxuLmQuZCkpLGFqKF8sZS5hLGUuYik7Zm9yKG89bmV3IFModC5kKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoUShvKSw0NDcpLEI9dShLKHMsVHgpLDEzNyksRz1GaShzLmQsX2UpLGsxKEIsRy5hLEcuYik7aHI9Vy1idCsoV2UuYitXZS5jKSx3PVotTXQrKFdlLmQrV2UuYSksZ3coTSxocix3LCExLCEwKX1mdW5jdGlvbiB6NG4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLF8sTSxCO2ZvcihuPW51bGwsdz1udWxsLHM9dShLKHQuYiwoeGUoKSxZbHQpKSwzNzYpLHM9PShsRCgpLElPKSYmKG49bmV3IGxlLHc9bmV3IGxlKSxkPW5ldyBTKHQuZCk7ZC5hPGQuYy5jLmxlbmd0aDspaWYoaD11KFEoZCksMTAxKSxvPWguaSwhIW8pc3dpdGNoKGguZS5nKXtjYXNlIDA6ZT11KEZfKG5ldyBrNihoLmIpKSw2MSkscz09SU8mJmU9PShiZSgpLE9uKT9uLmNbbi5jLmxlbmd0aF09aDpzPT1JTyYmZT09KGJlKCkseXIpP3cuY1t3LmMubGVuZ3RoXT1oOkNmbihoLGUpO2JyZWFrO2Nhc2UgMTprPWguYS5kLmosXz1oLmMuZC5qLGs9PShiZSgpLE9uKT9NZyhoLE9uLChPMSgpLG5FKSxoLmEpOl89PU9uP01nKGgsT24sKE8xKCksckUpLGguYyk6az09eXI/TWcoaCx5ciwoTzEoKSxyRSksaC5hKTpfPT15ciYmTWcoaCx5ciwoTzEoKSxuRSksaC5jKTticmVhaztjYXNlIDI6Y2FzZSAzOnI9aC5iLHp1KHIsKGJlKCksT24pKT96dShyLHlyKT96dShyLEJuKT96dShyLEhuKXx8TWcoaCxPbiwoTzEoKSxyRSksaC5jKTpNZyhoLE9uLChPMSgpLG5FKSxoLmEpOk1nKGgsT24sKE8xKCksX3gpLG51bGwpOk1nKGgseXIsKE8xKCksX3gpLG51bGwpO2JyZWFrO2Nhc2UgNDpNPWguYS5kLmosQj1oLmEuZC5qLE09PShiZSgpLE9uKXx8Qj09T24/TWcoaCx5ciwoTzEoKSxfeCksbnVsbCk6TWcoaCxPbiwoTzEoKSxfeCksbnVsbCl9biYmKG4uYy5sZW5ndGg9PTB8fGZsZShuLChiZSgpLE9uKSksdy5jLmxlbmd0aD09MHx8ZmxlKHcsKGJlKCkseXIpKSl9ZnVuY3Rpb24gcTRuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxfLE0sQixxLEcsVztmb3Iocj11KEsodCwoYWUoKSxJaSkpLDMzKSxHPXUoSyh0LCh4ZSgpLFhWKSksMTkpLmEsbz11KEsodCx0RyksMTkpLmEsRW8ocixYVixkZShHKSksRW8ocix0RyxkZShvKSksQ3Uocix0Lm4uYStlLmEpLFN1KHIsdC5uLmIrZS5iKSwodSh6ZShyLFIyKSwxNzQpLmdjKCkhPTB8fHQuZXx8R3QoSygkYSh0KSxyRykpPT09R3QoKGFDKCksTFMpKSYmb1V0KChzeSgpLCh0LnE/dC5xOihwbigpLHBuKCksYTApKS5fYihOdyk/Qj11KEsodCxOdyksMTk3KTpCPXUoSygkYSh0KSxfUyksMTk3KSxCKSkpJiYoUXYocix0Lm8uYSksWHYocix0Lm8uYikpLE09bmV3IFModC5qKTtNLmE8TS5jLmMubGVuZ3RoOylrPXUoUShNKSwxMSksVz1LKGssSWkpLF90KFcsMTg2KSYmKHM9dShXLDExOCksazEocyxrLm4uYSxrLm4uYiksRW8ocyxwRSxrLmopKTtmb3IocT11KEsodCxPdyksMTc0KS5nYygpIT0wLHc9bmV3IFModC5iKTt3LmE8dy5jLmMubGVuZ3RoOyloPXUoUSh3KSw3MCksKHF8fHUoSyhoLE93KSwxNzQpLmdjKCkhPTApJiYobj11KEsoaCxJaSksMTM3KSxzaihuLGguby5hLGguby5iKSxrMShuLGgubi5hLGgubi5iKSk7aWYoIVRfKHUoSyh0LHF5KSwyMSkpKWZvcihfPW5ldyBTKHQuaik7Xy5hPF8uYy5jLmxlbmd0aDspZm9yKGs9dShRKF8pLDExKSxkPW5ldyBTKGsuZik7ZC5hPGQuYy5jLmxlbmd0aDspaD11KFEoZCksNzApLG49dShLKGgsSWkpLDEzNyksUXYobixoLm8uYSksWHYobixoLm8uYiksazEobixoLm4uYSxoLm4uYil9ZnVuY3Rpb24gSDRuKHQpe3ZhciBlLG4scixzLG87c3dpdGNoKHREKHQsRGRlKSwoIXQuYiYmKHQuYj1uZXcgRW4odnIsdCw0LDcpKSx0LmIpLmkrKCF0LmMmJih0LmM9bmV3IEVuKHZyLHQsNSw4KSksdC5jKS5pKXtjYXNlIDA6dGhyb3cgbnQobmV3IFBuKCJUaGUgZWRnZSBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIHNvdXJjZSBvciB0YXJnZXQuIikpO2Nhc2UgMTpyZXR1cm4oIXQuYiYmKHQuYj1uZXcgRW4odnIsdCw0LDcpKSx0LmIpLmk9PTA/aHMoUm8odShBdCgoIXQuYyYmKHQuYz1uZXcgRW4odnIsdCw1LDgpKSx0LmMpLDApLDgyKSkpOmhzKFJvKHUoQXQoKCF0LmImJih0LmI9bmV3IEVuKHZyLHQsNCw3KSksdC5iKSwwKSw4MikpKX1pZigoIXQuYiYmKHQuYj1uZXcgRW4odnIsdCw0LDcpKSx0LmIpLmk9PTEmJighdC5jJiYodC5jPW5ldyBFbih2cix0LDUsOCkpLHQuYykuaT09MSl7aWYocz1Sbyh1KEF0KCghdC5iJiYodC5iPW5ldyBFbih2cix0LDQsNykpLHQuYiksMCksODIpKSxvPVJvKHUoQXQoKCF0LmMmJih0LmM9bmV3IEVuKHZyLHQsNSw4KSksdC5jKSwwKSw4MikpLGhzKHMpPT1ocyhvKSlyZXR1cm4gaHMocyk7aWYocz09aHMobykpcmV0dXJuIHM7aWYobz09aHMocykpcmV0dXJuIG99Zm9yKHI9anAoSTEodXQob3QoJDEsMSksTWUsMjAsMCxbKCF0LmImJih0LmI9bmV3IEVuKHZyLHQsNCw3KSksdC5iKSwoIXQuYyYmKHQuYz1uZXcgRW4odnIsdCw1LDgpKSx0LmMpXSkpKSxlPVJvKHUoSXIociksODIpKTtWcihyKTspaWYobj1Sbyh1KElyKHIpLDgyKSksbiE9ZSYmIVptKG4sZSkpe2lmKGhzKG4pPT1ocyhlKSllPWhzKG4pO2Vsc2UgaWYoZT1BYm4oZSxuKSwhZSlyZXR1cm4gbnVsbH1yZXR1cm4gZX1mdW5jdGlvbiBWNG4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFosYnQsTXQsU3QsanQ7Zm9yKG1yKG4sIlBvbHlsaW5lIGVkZ2Ugcm91dGluZyIsMSksWj1adCh2ZShLKGUsKHhlKCksalR0KSkpKSxxPVp0KHZlKEsoZSxKNCkpKSxzPVp0KHZlKEsoZSxaNCkpKSxyPWIuTWF0aC5taW4oMSxzL3EpLFN0PTAsdz0wLGUuYi5jLmxlbmd0aCE9MCYmKGp0PW1jZSh1KFBlKGUuYiwwKSwyOSkpLFN0PS40KnIqanQpLGQ9bmV3IHhhKGUuYiwwKTtkLmI8ZC5kLmdjKCk7KXtmb3IoaD0oWm4oZC5iPGQuZC5nYygpKSx1KGQuZC5YYihkLmM9ZC5iKyspLDI5KSksbz1laihoLE5PKSxvJiZTdD4wJiYoU3QtPXEpLHU2dChoLFN0KSxfPTAsQj1uZXcgUyhoLmEpO0IuYTxCLmMuYy5sZW5ndGg7KXtmb3IoTT11KFEoQiksMTApLGs9MCxXPW5ldyBhcihscigkcyhNKS5hLktjKCksbmV3IEgpKTtWcihXKTspRz11KElyKFcpLDE3KSxidD1TMShHLmMpLmIsTXQ9UzEoRy5kKS5iLGg9PUcuZC5pLmMmJiFXYShHKSYmKGdwbihHLFN0LC40KnIqYi5NYXRoLmFicyhidC1NdCkpLEcuYy5qPT0oYmUoKSxCbikmJihidD0wLE10PTApKSxrPWIuTWF0aC5tYXgoayxiLk1hdGguYWJzKE10LWJ0KSk7c3dpdGNoKE0uay5nKXtjYXNlIDA6Y2FzZSA0OmNhc2UgMTpjYXNlIDM6Y2FzZSA1Omwzbih0LE0sU3QsWil9Xz1iLk1hdGgubWF4KF8sayl9ZC5iPGQuZC5nYygpJiYoanQ9bWNlKChabihkLmI8ZC5kLmdjKCkpLHUoZC5kLlhiKGQuYz1kLmIrKyksMjkpKSksXz1iLk1hdGgubWF4KF8sanQpLFpuKGQuYj4wKSxkLmEuWGIoZC5jPS0tZC5iKSksdz0uNCpyKl8sIW8mJmQuYjxkLmQuZ2MoKSYmKHcrPXEpLFN0Kz1oLmMuYSt3fXQuYS5hLiRiKCksZS5mLmE9U3Qsb3Iobil9ZnVuY3Rpb24gRzRuKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxfLE0sQixxLEcsVyxaLGJ0LE10O2ZvcihfPW5ldyBBcix3PW5ldyBIdixyPW5ldyBTKHQuYS5hLmIpO3IuYTxyLmMuYy5sZW5ndGg7KWlmKGU9dShRKHIpLDU3KSxrPUozKGUpLGspbHUoXy5mLGssZSk7ZWxzZSBpZihNdD1xNihlKSxNdClmb3Iobz1uZXcgUyhNdC5rKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoUShvKSwxNyksY24odyxzLGUpO2ZvcihuPW5ldyBTKHQuYS5hLmIpO24uYTxuLmMuYy5sZW5ndGg7KWlmKGU9dShRKG4pLDU3KSxrPUozKGUpLGspe2ZvcihkPW5ldyBhcihscigkcyhrKS5hLktjKCksbmV3IEgpKTtWcihkKTspaWYoaD11KElyKGQpLDE3KSwhV2EoaCkmJihHPWguYyxidD1oLmQsISgoYmUoKSxJdSkuSGMoaC5jLmopJiZJdS5IYyhoLmQuaikpKSl7aWYoVz11KHRyKF8saC5kLmkpLDU3KSx5ZihsZih1ZihoZihjZihuZXcgU2gsMCksMTAwKSx0LmNbZS5hLmRdKSx0LmNbVy5hLmRdKSksRy5qPT1CbiYmX1l0KChWdSgpLEcpKSl7Zm9yKEI9dShQaSh3LGgpLDIxKS5LYygpO0IuT2IoKTspaWYoTT11KEIuUGIoKSw1NyksTS5kLmM8ZS5kLmMpe2lmKHE9dC5jW00uYS5kXSxaPXQuY1tlLmEuZF0scT09Wiljb250aW51ZTt5ZihsZih1ZihoZihjZihuZXcgU2gsMSksMTAwKSxxKSxaKSl9fWlmKGJ0Lmo9PUhuJiZUWXQoKFZ1KCksYnQpKSl7Zm9yKEI9dShQaSh3LGgpLDIxKS5LYygpO0IuT2IoKTspaWYoTT11KEIuUGIoKSw1NyksTS5kLmM+ZS5kLmMpe2lmKHE9dC5jW2UuYS5kXSxaPXQuY1tNLmEuZF0scT09Wiljb250aW51ZTt5ZihsZih1ZihoZihjZihuZXcgU2gsMSksMTAwKSxxKSxaKSl9fX19fWZ1bmN0aW9uIHk2dCh0KXtDYXQoKTt2YXIgZSxuLHIscyxvLGgsZCx3O2lmKHQ9PW51bGwpcmV0dXJuIG51bGw7aWYocz11ZCh0LEx1KDM3KSksczwwKXJldHVybiB0O2Zvcih3PW5ldyBGbCh0LnN1YnN0cigwLHMpKSxlPU50KFh1LFA0LDI1LDQsMTUsMSksZD0wLHI9MCxoPXQubGVuZ3RoO3M8aDtzKyspaWYoJHIocyx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KHMpPT0zNyYmdC5sZW5ndGg+cysyJiZ3aXQoKCRyKHMrMSx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KHMrMSkpLFZBdCxHQXQpJiZ3aXQoKCRyKHMrMix0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KHMrMikpLFZBdCxHQXQpKWlmKG49ZHRuKCgkcihzKzEsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChzKzEpKSwoJHIocysyLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQocysyKSkpLHMrPTIscj4wPyhuJjE5Mik9PTEyOD9lW2QrK109bjw8MjQ+PjI0OnI9MDpuPj0xMjgmJigobiYyMjQpPT0xOTI/KGVbZCsrXT1uPDwyND4+MjQscj0yKToobiYyNDApPT0yMjQ/KGVbZCsrXT1uPDwyND4+MjQscj0zKToobiYyNDgpPT0yNDAmJihlW2QrK109bjw8MjQ+PjI0LHI9NCkpLHI+MCl7aWYoZD09cil7c3dpdGNoKGQpe2Nhc2UgMjp7JHAodywoKGVbMF0mMzEpPDw2fGVbMV0mNjMpJk1zKTticmVha31jYXNlIDM6eyRwKHcsKChlWzBdJjE1KTw8MTJ8KGVbMV0mNjMpPDw2fGVbMl0mNjMpJk1zKTticmVha319ZD0wLHI9MH19ZWxzZXtmb3Iobz0wO288ZDsrK28pJHAodyxlW29dJk1zKTtkPTAsdy5hKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG4pfWVsc2V7Zm9yKG89MDtvPGQ7KytvKSRwKHcsZVtvXSZNcyk7ZD0wLCRwKHcsKCRyKHMsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChzKSkpfXJldHVybiB3LmF9ZnVuY3Rpb24geWhlKHQsZSxuLHIscyl7dmFyIG8saCxkO2lmKHp0ZSh0LGUpLGg9ZVswXSxvPVRhKG4uYywwKSxkPS0xLEN5dChuKSlpZihyPjApe2lmKGgrcj50Lmxlbmd0aClyZXR1cm4hMTtkPXJxKHQuc3Vic3RyKDAsaCtyKSxlKX1lbHNlIGQ9cnEodCxlKTtzd2l0Y2gobyl7Y2FzZSA3MTpyZXR1cm4gZD1iNCh0LGgsdXQob3QoTGUsMSkscmUsMiw2LFt0ZmUsZWZlXSksZSkscy5lPWQsITA7Y2FzZSA3NzpyZXR1cm4gU3ZuKHQsZSxzLGQsaCk7Y2FzZSA3NjpyZXR1cm4gQXZuKHQsZSxzLGQsaCk7Y2FzZSA2OTpyZXR1cm4gbWduKHQsZSxoLHMpO2Nhc2UgOTk6cmV0dXJuIHlnbih0LGUsaCxzKTtjYXNlIDk3OnJldHVybiBkPWI0KHQsaCx1dChvdChMZSwxKSxyZSwyLDYsWyJBTSIsIlBNIl0pLGUpLHMuYj1kLCEwO2Nhc2UgMTIxOnJldHVybiBMdm4odCxlLGgsZCxuLHMpO2Nhc2UgMTAwOnJldHVybiBkPD0wPyExOihzLmM9ZCwhMCk7Y2FzZSA4MzpyZXR1cm4gZDwwPyExOk9sbihkLGgsZVswXSxzKTtjYXNlIDEwNDpkPT0xMiYmKGQ9MCk7Y2FzZSA3NTpjYXNlIDcyOnJldHVybiBkPDA/ITE6KHMuZj1kLHMuZz0hMSwhMCk7Y2FzZSAxMDc6cmV0dXJuIGQ8MD8hMToocy5mPWQscy5nPSEwLCEwKTtjYXNlIDEwOTpyZXR1cm4gZDwwPyExOihzLmo9ZCwhMCk7Y2FzZSAxMTU6cmV0dXJuIGQ8MD8hMToocy5uPWQsITApO2Nhc2UgOTA6aWYoaDx0Lmxlbmd0aCYmKCRyKGgsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChoKT09OTApKXJldHVybisrZVswXSxzLm89MCwhMDtjYXNlIDEyMjpjYXNlIDExODpyZXR1cm4gVmRuKHQsaCxlLHMpO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIFU0bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWixidCxNdCxTdCxqdCxRdCxjZTtpZihCPXUodShQaSh0LnIsZSksMjEpLDg0KSxlPT0oYmUoKSxIbil8fGU9PUJuKXtmaGUodCxlKTtyZXR1cm59Zm9yKG89ZT09T24/KHR3KCksc08pOih0dygpLGFPKSxqdD1lPT1Pbj8oVHUoKSxzMSk6KFR1KCksRWYpLG49dSh4byh0LmIsZSksMTI0KSxyPW4uaSxzPXIuYytpNCh1dChvdChnYSwxKSxUbywyNSwxNSxbbi5uLmIsdC5DLmIsdC5rXSkpLGJ0PXIuYytyLmItaTQodXQob3QoZ2EsMSksVG8sMjUsMTUsW24ubi5jLHQuQy5jLHQua10pKSxoPVpwdChidnQobyksdC50KSxNdD1lPT1Pbj9OczpicyxNPUIuS2MoKTtNLk9iKCk7KWs9dShNLlBiKCksMTExKSwhKCFrLmN8fGsuYy5kLmMubGVuZ3RoPD0wKSYmKFo9ay5iLnJmKCksVz1rLmUscT1rLmMsRz1xLmksRy5iPSh3PXEubixxLmUuYSt3LmIrdy5jKSxHLmE9KGQ9cS5uLHEuZS5iK2QuZCtkLmEpLHREKGp0LFU2dCkscS5mPWp0LFhmKHEsKHJsKCksa2YpKSxHLmM9Vy5hLShHLmItWi5hKS8yLFF0PWIuTWF0aC5taW4ocyxXLmEpLGNlPWIuTWF0aC5tYXgoYnQsVy5hK1ouYSksRy5jPFF0P0cuYz1RdDpHLmMrRy5iPmNlJiYoRy5jPWNlLUcuYiksdWUoaC5kLG5ldyBObnQoRyxYeXQoaCxHKSkpLE10PWU9PU9uP2IuTWF0aC5tYXgoTXQsVy5iK2suYi5yZigpLmIpOmIuTWF0aC5taW4oTXQsVy5iKSk7Zm9yKE10Kz1lPT1Pbj90LnQ6LXQudCxTdD1mM3QoKGguZT1NdCxoKSksU3Q+MCYmKHUoeG8odC5iLGUpLDEyNCkuYS5iPVN0KSxfPUIuS2MoKTtfLk9iKCk7KWs9dShfLlBiKCksMTExKSwhKCFrLmN8fGsuYy5kLmMubGVuZ3RoPD0wKSYmKEc9ay5jLmksRy5jLT1rLmUuYSxHLmQtPWsuZS5iKX1mdW5jdGlvbiBXNG4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLF8sTSxCLHE7Zm9yKGU9bmV3IEFyLHc9bmV3IG5yKHQpO3cuZSE9dy5pLmdjKCk7KXtmb3IoZD11KGRyKHcpLDMzKSxuPW5ldyBRcyxBaShWdXQsZCxuKSxxPW5ldyBiZyxzPXUoJGwobmV3IGtuKG51bGwsbmV3IEZ2KG5ldyBhcihscihmSShkKS5hLktjKCksbmV3IEgpKSkpLGxZdChxLGEyKG5ldyBrZSxuZXcgbmUsbmV3IHBpLHV0KG90KHdsLDEpLG9lLDEzMiwwLFsoTjEoKSxZbCldKSkpKSw4MyksT2VlKG4sdShzLnhjKChGbigpLCEwKSksMTQpLG5ldyBPZSkscj11KCRsKFdpKHUocy54YyghMSksMTUpLkxjKCksbmV3IGFmKSxhMihuZXcga2UsbmV3IG5lLG5ldyBwaSx1dChvdCh3bCwxKSxvZSwxMzIsMCxbWWxdKSkpLDE1KSxoPXIuS2MoKTtoLk9iKCk7KW89dShoLlBiKCksNzkpLEI9bWFlKG8pLEImJihrPXUoY2MoRm8oZS5mLEIpKSwyMSksa3x8KGs9amNlKEIpLGx1KGUuZixCLGspKSxLYShuLGspKTtmb3Iocz11KCRsKG5ldyBrbihudWxsLG5ldyBGdihuZXcgYXIobHIoVjAoZCkuYS5LYygpLG5ldyBIKSkpKSxsWXQocSxhMihuZXcga2UsbmV3IG5lLG5ldyBwaSx1dChvdCh3bCwxKSxvZSwxMzIsMCxbWWxdKSkpKSw4MyksT2VlKG4sdShzLnhjKCEwKSwxNCksbmV3IGZrKSxyPXUoJGwoV2kodShzLnhjKCExKSwxNSkuTGMoKSxuZXcgazMpLGEyKG5ldyBrZSxuZXcgbmUsbmV3IHBpLHV0KG90KHdsLDEpLG9lLDEzMiwwLFtZbF0pKSksMTUpLE09ci5LYygpO00uT2IoKTspXz11KE0uUGIoKSw3OSksQj15YWUoXyksQiYmKGs9dShjYyhGbyhlLmYsQikpLDIxKSxrfHwoaz1qY2UoQiksbHUoZS5mLEIsaykpLEthKG4saykpfX1mdW5jdGlvbiBLNG4odCxlKXt5YXQoKTt2YXIgbixyLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXO2lmKHc9X2ModCwwKTwwLHcmJih0PUQ4KHQpKSxfYyh0LDApPT0wKXN3aXRjaChlKXtjYXNlIDA6cmV0dXJuIjAiO2Nhc2UgMTpyZXR1cm4gTTc7Y2FzZSAyOnJldHVybiIwLjAwIjtjYXNlIDM6cmV0dXJuIjAuMDAwIjtjYXNlIDQ6cmV0dXJuIjAuMDAwMCI7Y2FzZSA1OnJldHVybiIwLjAwMDAwIjtjYXNlIDY6cmV0dXJuIjAuMDAwMDAwIjtkZWZhdWx0OnJldHVybiBxPW5ldyBBcCxlPDA/cS5hKz0iMEUrIjpxLmErPSIwRSIscS5hKz1lPT1PYT8iMjE0NzQ4MzY0OCI6IiIrLWUscS5hfV89MTgsTT1OdChFaCx3ZCwyNSxfKzEsMTUsMSksbj1fLFc9dDtkbyBrPVcsVz1lSShXLDEwKSxNWy0tbl09TXIoUmEoNDgsUXAoayxJYShXLDEwKSkpKSZNczt3aGlsZShfYyhXLDApIT0wKTtpZihzPVFwKFFwKFFwKF8sbiksZSksMSksZT09MClyZXR1cm4gdyYmKE1bLS1uXT00NSksSWgoTSxuLF8tbik7aWYoZT4wJiZfYyhzLC02KT49MCl7aWYoX2MocywwKT49MCl7Zm9yKG89bitNcihzKSxkPV8tMTtkPj1vO2QtLSlNW2QrMV09TVtkXTtyZXR1cm4gTVsrK29dPTQ2LHcmJihNWy0tbl09NDUpLEloKE0sbixfLW4rMSl9Zm9yKGg9MjtiZXQoaCxSYShEOChzKSwxKSk7aCsrKU1bLS1uXT00ODtyZXR1cm4gTVstLW5dPTQ2LE1bLS1uXT00OCx3JiYoTVstLW5dPTQ1KSxJaChNLG4sXy1uKX1yZXR1cm4gRz1uKzEscj1fLEI9bmV3IExtLHcmJihCLmErPSItIiksci1HPj0xPygkcChCLE1bbl0pLEIuYSs9Ii4iLEIuYSs9SWgoTSxuKzEsXy1uLTEpKTpCLmErPUloKE0sbixfLW4pLEIuYSs9IkUiLF9jKHMsMCk+MCYmKEIuYSs9IisiKSxCLmErPSIiK0VfKHMpLEIuYX1mdW5jdGlvbiBZNG4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLF8sTSxCLHE7aWYodC5lLmEuJGIoKSx0LmYuYS4kYigpLHQuYy5jPU50KFFuLE1lLDEsMCw1LDEpLHQuaS5jPU50KFFuLE1lLDEsMCw1LDEpLHQuZy5hLiRiKCksZSlmb3IoaD1uZXcgUyhlLmEpO2guYTxoLmMuYy5sZW5ndGg7KWZvcihvPXUoUShoKSwxMCksTT1xZyhvLChiZSgpLEhuKSkuS2MoKTtNLk9iKCk7KWZvcihfPXUoTS5QYigpLDExKSxWcyh0LmUsXykscz1uZXcgUyhfLmcpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShRKHMpLDE3KSwhV2EocikmJih1ZSh0LmMsciksR2llKHQsciksZD1yLmMuaS5rLChkPT0oR24oKSxxcyl8fGQ9PVVjfHxkPT1Jc3x8ZD09cTEpJiZ1ZSh0LmoscikscT1yLmQsQj1xLmkuYyxCPT1uP1ZzKHQuZixxKTpCPT1lP1ZzKHQuZSxxKTpFdSh0LmMscikpO2lmKG4pZm9yKGg9bmV3IFMobi5hKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zm9yKG89dShRKGgpLDEwKSxrPW5ldyBTKG8uaik7ay5hPGsuYy5jLmxlbmd0aDspZm9yKHc9dShRKGspLDExKSxzPW5ldyBTKHcuZyk7cy5hPHMuYy5jLmxlbmd0aDspcj11KFEocyksMTcpLFdhKHIpJiZWcyh0Lmcscik7Zm9yKE09cWcobywoYmUoKSxCbikpLktjKCk7TS5PYigpOylmb3IoXz11KE0uUGIoKSwxMSksVnModC5mLF8pLHM9bmV3IFMoXy5nKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoUShzKSwxNyksIVdhKHIpJiYodWUodC5jLHIpLEdpZSh0LHIpLGQ9ci5jLmkuaywoZD09KEduKCkscXMpfHxkPT1VY3x8ZD09SXN8fGQ9PXExKSYmdWUodC5qLHIpLHE9ci5kLEI9cS5pLmMsQj09bj9Wcyh0LmYscSk6Qj09ZT9Wcyh0LmUscSk6RXUodC5jLHIpKX19ZnVuY3Rpb24gZ3codCxlLG4scixzKXt2YXIgbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFosYnQsTXQsU3QsanQsUXQsY2U7aWYoWj1uZXcgUmUodC5nLHQuZiksVz16NHQodCksVy5hPWIuTWF0aC5tYXgoVy5hLGUpLFcuYj1iLk1hdGgubWF4KFcuYixuKSxjZT1XLmEvWi5hLF89Vy5iL1ouYixqdD1XLmEtWi5hLHc9Vy5iLVouYixyKWZvcihoPWhzKHQpP3UoemUoaHModCksKGRpKCksancpKSwxMDMpOnUoemUodCwoZGkoKSxqdykpLDEwMyksZD1HdCh6ZSh0LChkaSgpLFVTKSkpPT09R3QoKHZhKCksS2MpKSxNdD1uZXcgbnIoKCF0LmMmJih0LmM9bmV3IGhlKHlsLHQsOSw5KSksdC5jKSk7TXQuZSE9TXQuaS5nYygpOylzd2l0Y2goYnQ9dShkcihNdCksMTE4KSxTdD11KHplKGJ0LGM1KSw2MSksU3Q9PShiZSgpLGFjKSYmKFN0PUo1dChidCxoKSxFbyhidCxjNSxTdCkpLFN0Lmcpe2Nhc2UgMTpkfHxDdShidCxidC5pKmNlKTticmVhaztjYXNlIDI6Q3UoYnQsYnQuaStqdCksZHx8U3UoYnQsYnQuaipfKTticmVhaztjYXNlIDM6ZHx8Q3UoYnQsYnQuaSpjZSksU3UoYnQsYnQuait3KTticmVhaztjYXNlIDQ6ZHx8U3UoYnQsYnQuaipfKX1pZihzaih0LFcuYSxXLmIpLHMpZm9yKEI9bmV3IG5yKCghdC5uJiYodC5uPW5ldyBoZShZbyx0LDEsNykpLHQubikpO0IuZSE9Qi5pLmdjKCk7KU09dShkcihCKSwxMzcpLHE9TS5pK00uZy8yLEc9TS5qK00uZi8yLFF0PXEvWi5hLGs9Ry9aLmIsUXQraz49MSYmKFF0LWs+MCYmRz49MD8oQ3UoTSxNLmkranQpLFN1KE0sTS5qK3cqaykpOlF0LWs8MCYmcT49MCYmKEN1KE0sTS5pK2p0KlF0KSxTdShNLE0uait3KSkpO3JldHVybiBFbyh0LChkaSgpLEgyKSwoTmwoKSxvPXUoV2YodEEpLDkpLG5ldyBvaChvLHUoZmYobyxvLmxlbmd0aCksOSksMCkpKSxuZXcgUmUoY2UsXyl9ZnVuY3Rpb24geGhlKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxfLE0sQixxLEc7aWYocT1ocyhSbyh1KEF0KCghdC5iJiYodC5iPW5ldyBFbih2cix0LDQsNykpLHQuYiksMCksODIpKSksRz1ocyhSbyh1KEF0KCghdC5jJiYodC5jPW5ldyBFbih2cix0LDUsOCkpLHQuYyksMCksODIpKSksTT1xPT1HLGQ9bmV3IERhLGU9dSh6ZSh0LChieigpLGJBdCkpLDc0KSxlJiZlLmI+PTIpe2lmKCghdC5hJiYodC5hPW5ldyBoZSh1cyx0LDYsNikpLHQuYSkuaT09MCluPShUdigpLHM9bmV3IGlkLHMpLE9yKCghdC5hJiYodC5hPW5ldyBoZSh1cyx0LDYsNikpLHQuYSksbik7ZWxzZSBpZigoIXQuYSYmKHQuYT1uZXcgaGUodXMsdCw2LDYpKSx0LmEpLmk+MSlmb3IoQj1uZXcgQTYoKCF0LmEmJih0LmE9bmV3IGhlKHVzLHQsNiw2KSksdC5hKSk7Qi5lIT1CLmkuZ2MoKTspdUMoQik7eUkoZSx1KEF0KCghdC5hJiYodC5hPW5ldyBoZSh1cyx0LDYsNikpLHQuYSksMCksMjAyKSl9aWYoTSlmb3Iocj1uZXcgbnIoKCF0LmEmJih0LmE9bmV3IGhlKHVzLHQsNiw2KSksdC5hKSk7ci5lIT1yLmkuZ2MoKTspZm9yKG49dShkcihyKSwyMDIpLGs9bmV3IG5yKCghbi5hJiYobi5hPW5ldyBCcyhXaCxuLDUpKSxuLmEpKTtrLmUhPWsuaS5nYygpOyl3PXUoZHIoayksNDY5KSxkLmE9Yi5NYXRoLm1heChkLmEsdy5hKSxkLmI9Yi5NYXRoLm1heChkLmIsdy5iKTtmb3IoaD1uZXcgbnIoKCF0Lm4mJih0Lm49bmV3IGhlKFlvLHQsMSw3KSksdC5uKSk7aC5lIT1oLmkuZ2MoKTspbz11KGRyKGgpLDEzNyksXz11KHplKG8sS1MpLDgpLF8mJmsxKG8sXy5hLF8uYiksTSYmKGQuYT1iLk1hdGgubWF4KGQuYSxvLmkrby5nKSxkLmI9Yi5NYXRoLm1heChkLmIsby5qK28uZikpO3JldHVybiBkfWZ1bmN0aW9uIFg0bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWixidCxNdCxTdCxqdCxRdCxjZSxfZSxXZTtmb3IoU3Q9ZS5jLmxlbmd0aCxzPW5ldyBrNCh0LmEsbixudWxsLG51bGwpLFdlPU50KGdhLFRvLDI1LFN0LDE1LDEpLFc9TnQoZ2EsVG8sMjUsU3QsMTUsMSksRz1OdChnYSxUbywyNSxTdCwxNSwxKSxaPTAsZD0wO2Q8U3Q7ZCsrKVdbZF09VGksR1tkXT1PYTtmb3Iodz0wO3c8U3Q7dysrKWZvcihyPShTbih3LGUuYy5sZW5ndGgpLHUoZS5jW3ddLDE4MCkpLFdlW3ddPVlzdChyKSxXZVtaXT5XZVt3XSYmKFo9dyksTT1uZXcgUyh0LmEuYik7TS5hPE0uYy5jLmxlbmd0aDspZm9yKF89dShRKE0pLDI5KSxNdD1uZXcgUyhfLmEpO010LmE8TXQuYy5jLmxlbmd0aDspYnQ9dShRKE10KSwxMCksY2U9WnQoci5wW2J0LnBdKStadChyLmRbYnQucF0pLFdbd109Yi5NYXRoLm1pbihXW3ddLGNlKSxHW3ddPWIuTWF0aC5tYXgoR1t3XSxjZStidC5vLmIpO2ZvcihfZT1OdChnYSxUbywyNSxTdCwxNSwxKSxrPTA7azxTdDtrKyspKFNuKGssZS5jLmxlbmd0aCksdShlLmNba10sMTgwKSkubz09KEMxKCksejIpP19lW2tdPVdbWl0tV1trXTpfZVtrXT1HW1pdLUdba107Zm9yKG89TnQoZ2EsVG8sMjUsU3QsMTUsMSkscT1uZXcgUyh0LmEuYik7cS5hPHEuYy5jLmxlbmd0aDspZm9yKEI9dShRKHEpLDI5KSxRdD1uZXcgUyhCLmEpO1F0LmE8UXQuYy5jLmxlbmd0aDspe2ZvcihqdD11KFEoUXQpLDEwKSxoPTA7aDxTdDtoKyspb1toXT1adCgoU24oaCxlLmMubGVuZ3RoKSx1KGUuY1toXSwxODApKS5wW2p0LnBdKStadCgoU24oaCxlLmMubGVuZ3RoKSx1KGUuY1toXSwxODApKS5kW2p0LnBdKStfZVtoXTtvLnNvcnQoYmVlKGR0LnByb3RvdHlwZS50ZSxkdCxbXSkpLHMucFtqdC5wXT0ob1sxXStvWzJdKS8yLHMuZFtqdC5wXT0wfXJldHVybiBzfWZ1bmN0aW9uIFE0bih0LGUsbil7dmFyIHIscyxvLGgsZDtzd2l0Y2gocj1lLmksbz10LmkubyxzPXQuaS5kLGQ9dC5uLGg9bmModXQob3QobmEsMSkscmUsOCwwLFtkLHQuYV0pKSx0LmouZyl7Y2FzZSAxOmhkKGUsKFR1KCksRWYpKSxyLmQ9LXMuZC1uLXIuYSx1KHUoUGUoZS5kLDApLDE4MSkuV2UoKGFlKCksRHgpKSwyODUpPT0oVmwoKSx1MCk/KFhmKGUsKHJsKCksa2YpKSxyLmM9aC5hLVp0KHZlKEsodCxLNCkpKS1uLXIuYik6KFhmKGUsKHJsKCksQWQpKSxyLmM9aC5hK1p0KHZlKEsodCxLNCkpKStuKTticmVhaztjYXNlIDI6WGYoZSwocmwoKSxBZCkpLHIuYz1vLmErcy5jK24sdSh1KFBlKGUuZCwwKSwxODEpLldlKChhZSgpLER4KSksMjg1KT09KFZsKCksdTApPyhoZChlLChUdSgpLEVmKSksci5kPWguYi1adCh2ZShLKHQsSzQpKSktbi1yLmEpOihoZChlLChUdSgpLHMxKSksci5kPWguYitadCh2ZShLKHQsSzQpKSkrbik7YnJlYWs7Y2FzZSAzOmhkKGUsKFR1KCksczEpKSxyLmQ9by5iK3MuYStuLHUodShQZShlLmQsMCksMTgxKS5XZSgoYWUoKSxEeCkpLDI4NSk9PShWbCgpLHUwKT8oWGYoZSwocmwoKSxrZikpLHIuYz1oLmEtWnQodmUoSyh0LEs0KSkpLW4tci5iKTooWGYoZSwocmwoKSxBZCkpLHIuYz1oLmErWnQodmUoSyh0LEs0KSkpK24pO2JyZWFrO2Nhc2UgNDpYZihlLChybCgpLGtmKSksci5jPS1zLmItbi1yLmIsdSh1KFBlKGUuZCwwKSwxODEpLldlKChhZSgpLER4KSksMjg1KT09KFZsKCksdTApPyhoZChlLChUdSgpLEVmKSksci5kPWguYi1adCh2ZShLKHQsSzQpKSktbi1yLmEpOihoZChlLChUdSgpLHMxKSksci5kPWguYitadCh2ZShLKHQsSzQpKSkrbil9fWZ1bmN0aW9uIFo0bih0LGUsbixyLHMsbyxoKXt2YXIgZCx3LGssXyxNLEIscSxHLFcsWixidCxNdCxTdCxqdCxRdCxjZSxfZSxXZSxRZSxSbix6bixocix4aSxLcztmb3IocT0wLFJuPTAsdz1uZXcgUyh0KTt3LmE8dy5jLmMubGVuZ3RoOylkPXUoUSh3KSwzMyksaWhlKGQpLHE9Yi5NYXRoLm1heChxLGQuZyksUm4rPWQuZypkLmY7Zm9yKEc9Um4vdC5jLmxlbmd0aCxRZT10MW4odCxHKSxSbis9dC5jLmxlbmd0aCpRZSxxPWIuTWF0aC5tYXgocSxiLk1hdGguc3FydChSbipoKSkrbi5iLHhpPW4uYixLcz1uLmQsQj0wLF89bi5iK24uYyxXZT1uZXcgY3MsYWkoV2UsZGUoMCkpLGNlPW5ldyBjcyxrPW5ldyB4YSh0LDApO2suYjxrLmQuZ2MoKTspZD0oWm4oay5iPGsuZC5nYygpKSx1KGsuZC5YYihrLmM9ay5iKyspLDMzKSksaHI9ZC5nLE09ZC5mLHhpK2hyPnEmJihvJiYoWGIoY2UsQiksWGIoV2UsZGUoay5iLTEpKSkseGk9bi5iLEtzKz1CK2UsQj0wLF89Yi5NYXRoLm1heChfLG4uYituLmMraHIpKSxDdShkLHhpKSxTdShkLEtzKSxfPWIuTWF0aC5tYXgoXyx4aStocituLmMpLEI9Yi5NYXRoLm1heChCLE0pLHhpKz1ocitlO2lmKF89Yi5NYXRoLm1heChfLHIpLHpuPUtzK0Irbi5hLHpuPHMmJihCKz1zLXpuLHpuPXMpLG8pZm9yKHhpPW4uYixrPW5ldyB4YSh0LDApLFhiKFdlLGRlKHQuYy5sZW5ndGgpKSxfZT1zaShXZSwwKSxidD11KGlpKF9lKSwxOSkuYSxYYihjZSxCKSxRdD1zaShjZSwwKSxqdD0wO2suYjxrLmQuZ2MoKTspay5iPT1idCYmKHhpPW4uYixqdD1adCh2ZShpaShRdCkpKSxidD11KGlpKF9lKSwxOSkuYSksZD0oWm4oay5iPGsuZC5nYygpKSx1KGsuZC5YYihrLmM9ay5iKyspLDMzKSksTXQ9ZC5mLFh2KGQsanQpLFc9anQsay5iPT1idCYmKFo9Xy14aS1uLmMsU3Q9ZC5nLFF2KGQsWiksZW9lKGQsbmV3IFJlKFosVyksbmV3IFJlKFN0LE10KSkpLHhpKz1kLmcrZTtyZXR1cm4gbmV3IFJlKF8sem4pfWZ1bmN0aW9uIEo0bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWixidCxNdCxTdCxqdCxRdCxjZSxfZSxXZSxRZTtmb3IobXIoZSwiQ29tcG91bmQgZ3JhcGggcG9zdHByb2Nlc3NvciIsMSksbj1CZShGZShLKHQsKHhlKCksaWh0KSkpKSxkPXUoSyh0LChhZSgpLFc5dCkpLDIyNCksXz1uZXcgUXMsYnQ9ZC5lYygpLktjKCk7YnQuT2IoKTspe2ZvcihaPXUoYnQuUGIoKSwxNyksaD1uZXcgcXUoZC5jYyhaKSkscG4oKSxhYShoLG5ldyBOaSh0KSksUXQ9UG9uKChTbigwLGguYy5sZW5ndGgpLHUoaC5jWzBdLDI0MykpKSxfZT1sbmUodShQZShoLGguYy5sZW5ndGgtMSksMjQzKSksU3Q9UXQuaSxIOChfZS5pLFN0KT9NdD1TdC5lOk10PSRhKFN0KSxNPVJobihaLGgpLE1oKFouYSksQj1udWxsLG89bmV3IFMoaCk7by5hPG8uYy5jLmxlbmd0aDspcz11KFEobyksMjQzKSxXPW5ldyBEYSxSNHQoVyxzLmEsTXQpLHE9cy5iLHI9bmV3IGp1LE1pdChyLDAscS5hKSxKbShyLFcpLGp0PW5ldyBTbyhTMShxLmMpKSxjZT1uZXcgU28oUzEocS5kKSksRmkoanQsVyksRmkoY2UsVyksQiYmKHIuYj09MD9HPWNlOkc9KFpuKHIuYiE9MCksdShyLmEuYS5jLDgpKSxXZT1iLk1hdGguYWJzKEIuYS1HLmEpPnhkLFFlPWIuTWF0aC5hYnMoQi5iLUcuYik+eGQsKCFuJiZXZSYmUWV8fG4mJihXZXx8UWUpKSYmYWkoWi5hLGp0KSksS2EoWi5hLHIpLHIuYj09MD9CPWp0OkI9KFpuKHIuYiE9MCksdShyLmMuYi5jLDgpKSxnY24ocSxNLFcpLGxuZShzKT09X2UmJigkYShfZS5pKSE9cy5hJiYoVz1uZXcgRGEsUjR0KFcsJGEoX2UuaSksTXQpKSxlZShaLHFsdCxXKSksUjBuKHEsWixNdCksXy5hLnpjKHEsXyk7QmEoWixRdCkscGEoWixfZSl9Zm9yKGs9Xy5hLmVjKCkuS2MoKTtrLk9iKCk7KXc9dShrLlBiKCksMTcpLEJhKHcsbnVsbCkscGEodyxudWxsKTtvcihlKX1mdW5jdGlvbiBraGUodCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFosYnQsTXQsU3QsanQ7aWYodC5nYygpPT0xKXJldHVybiB1KHQuWGIoMCksMjMxKTtpZih0LmdjKCk8PTApcmV0dXJuIG5ldyBDJDtmb3Iocz10LktjKCk7cy5PYigpOyl7Zm9yKG49dShzLlBiKCksMjMxKSxHPTAsXz1UaSxNPVRpLHc9T2Esaz1PYSxxPW5ldyBTKG4uZSk7cS5hPHEuYy5jLmxlbmd0aDspQj11KFEocSksMTQ0KSxHKz11KEsoQiwobjEoKSxaNykpLDE5KS5hLF89Yi5NYXRoLm1pbihfLEIuZC5hLUIuZS5hLzIpLE09Yi5NYXRoLm1pbihNLEIuZC5iLUIuZS5iLzIpLHc9Yi5NYXRoLm1heCh3LEIuZC5hK0IuZS5hLzIpLGs9Yi5NYXRoLm1heChrLEIuZC5iK0IuZS5iLzIpO2VlKG4sKG4xKCksWjcpLGRlKEcpKSxlZShuLChVcCgpLGxTKSxuZXcgUmUoXyxNKSksZWUobixkTyxuZXcgUmUodyxrKSl9Zm9yKHBuKCksdC5hZChuZXcgYXUpLFc9bmV3IEMkLEJvKFcsdSh0LlhiKDApLDk0KSksZD0wLE10PTAsbz10LktjKCk7by5PYigpOyluPXUoby5QYigpLDIzMSksWj1mYSh1Yyh1KEsobiwoVXAoKSxkTykpLDgpKSx1KEsobixsUyksOCkpLGQ9Yi5NYXRoLm1heChkLFouYSksTXQrPVouYSpaLmI7Zm9yKGQ9Yi5NYXRoLm1heChkLGIuTWF0aC5zcXJ0KE10KSpadCh2ZShLKFcsKG4xKCksS3BlKSkpKSksYnQ9WnQodmUoSyhXLHNWKSkpLFN0PTAsanQ9MCxoPTAsZT1idCxyPXQuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksMjMxKSxaPWZhKHVjKHUoSyhuLChVcCgpLGRPKSksOCkpLHUoSyhuLGxTKSw4KSksU3QrWi5hPmQmJihTdD0wLGp0Kz1oK2J0LGg9MCksRnduKFcsbixTdCxqdCksZT1iLk1hdGgubWF4KGUsU3QrWi5hKSxoPWIuTWF0aC5tYXgoaCxaLmIpLFN0Kz1aLmErYnQ7cmV0dXJuIFd9ZnVuY3Rpb24gRWhlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxfLE0sQixxLEc7c3dpdGNoKF89bmV3IGp1LHQuYS5nKXtjYXNlIDM6Qj11KEsoZS5lLChhZSgpLEYyKSksMTUpLHE9dShLKGUuaixGMiksMTUpLEc9dShLKGUuZixGMiksMTUpLG49dShLKGUuZSxRNCksMTUpLHI9dShLKGUuaixRNCksMTUpLHM9dShLKGUuZixRNCksMTUpLGg9bmV3IGxlLFJzKGgsQikscS5KYyhuZXcgSlgpLFJzKGgsX3QocSwxNTIpP1Y2KHUocSwxNTIpKTpfdChxLDEzMSk/dShxLDEzMSkuYTpfdChxLDU0KT9uZXcgbXYocSk6bmV3IE1tKHEpKSxScyhoLEcpLG89bmV3IGxlLFJzKG8sbiksUnMobyxfdChyLDE1Mik/VjYodShyLDE1MikpOl90KHIsMTMxKT91KHIsMTMxKS5hOl90KHIsNTQpP25ldyBtdihyKTpuZXcgTW0ocikpLFJzKG8scyksZWUoZS5mLEYyLGgpLGVlKGUuZixRNCxvKSxlZShlLmYsZVR0LGUuZiksZWUoZS5lLEYyLG51bGwpLGVlKGUuZSxRNCxudWxsKSxlZShlLmosRjIsbnVsbCksZWUoZS5qLFE0LG51bGwpO2JyZWFrO2Nhc2UgMTpLYShfLGUuZS5hKSxhaShfLGUuaS5uKSxLYShfLGMyKGUuai5hKSksYWkoXyxlLmEubiksS2EoXyxlLmYuYSk7YnJlYWs7ZGVmYXVsdDpLYShfLGUuZS5hKSxLYShfLGMyKGUuai5hKSksS2EoXyxlLmYuYSl9TWgoZS5mLmEpLEthKGUuZi5hLF8pLEJhKGUuZixlLmUuYyksZD11KEsoZS5lLCh4ZSgpLE9vKSksNzQpLGs9dShLKGUuaixPbyksNzQpLHc9dShLKGUuZixPbyksNzQpLChkfHxrfHx3KSYmKE09bmV3IGp1LG93dChNLHcpLG93dChNLGspLG93dChNLGQpLGVlKGUuZixPbyxNKSksQmEoZS5qLG51bGwpLHBhKGUuaixudWxsKSxCYShlLmUsbnVsbCkscGEoZS5lLG51bGwpLExvKGUuYSxudWxsKSxMbyhlLmksbnVsbCksZS5nJiZFaGUodCxlLmcpfWZ1bmN0aW9uIHQ1bih0KXtaNXQoKTt2YXIgZSxuLHIscyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWjtpZih0PT1udWxsfHwobz1SJCh0KSxHPXp1bihvKSxHJTQhPTApKXJldHVybiBudWxsO2lmKFc9Ry80fDAsVz09MClyZXR1cm4gTnQoWHUsUDQsMjUsMCwxNSwxKTtmb3IoTT1udWxsLGU9MCxuPTAscj0wLHM9MCxoPTAsZD0wLHc9MCxrPTAscT0wLEI9MCxfPTAsTT1OdChYdSxQNCwyNSxXKjMsMTUsMSk7cTxXLTE7cSsrKXtpZighZE0oaD1vW18rK10pfHwhZE0oZD1vW18rK10pfHwhZE0odz1vW18rK10pfHwhZE0oaz1vW18rK10pKXJldHVybiBudWxsO2U9WTFbaF0sbj1ZMVtkXSxyPVkxW3ddLHM9WTFba10sTVtCKytdPShlPDwyfG4+PjQpPDwyND4+MjQsTVtCKytdPSgobiYxNSk8PDR8cj4+MiYxNSk8PDI0Pj4yNCxNW0IrK109KHI8PDZ8cyk8PDI0Pj4yNH1yZXR1cm4hZE0oaD1vW18rK10pfHwhZE0oZD1vW18rK10pP251bGw6KGU9WTFbaF0sbj1ZMVtkXSx3PW9bXysrXSxrPW9bXysrXSxZMVt3XT09LTF8fFkxW2tdPT0tMT93PT02MSYmaz09NjE/biYxNT9udWxsOihaPU50KFh1LFA0LDI1LHEqMysxLDE1LDEpLFBjKE0sMCxaLDAscSozKSxaW0JdPShlPDwyfG4+PjQpPDwyND4+MjQsWik6dyE9NjEmJms9PTYxPyhyPVkxW3ddLHImMz9udWxsOihaPU50KFh1LFA0LDI1LHEqMysyLDE1LDEpLFBjKE0sMCxaLDAscSozKSxaW0IrK109KGU8PDJ8bj4+NCk8PDI0Pj4yNCxaW0JdPSgobiYxNSk8PDR8cj4+MiYxNSk8PDI0Pj4yNCxaKSk6bnVsbDoocj1ZMVt3XSxzPVkxW2tdLE1bQisrXT0oZTw8MnxuPj40KTw8MjQ+PjI0LE1bQisrXT0oKG4mMTUpPDw0fHI+PjImMTUpPDwyND4+MjQsTVtCKytdPShyPDw2fHMpPDwyND4+MjQsTSkpfWZ1bmN0aW9uIGU1bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWixidCxNdCxTdCxqdCxRdDtmb3IobXIoZSxjMWUsMSksRz11KEsodCwoeGUoKSxYMCkpLDIxOCkscz1uZXcgUyh0LmIpO3MuYTxzLmMuYy5sZW5ndGg7KWZvcihyPXUoUShzKSwyOSksaz1zRChyLmEpLGg9ayxkPTAsdz1oLmxlbmd0aDtkPHc7KytkKWlmKG89aFtkXSxvLms9PShHbigpLFVjKSl7aWYoRz09KHEwKCkscXgpKWZvcihNPW5ldyBTKG8uaik7TS5hPE0uYy5jLmxlbmd0aDspXz11KFEoTSksMTEpLF8uZS5jLmxlbmd0aD09MHx8eWhuKF8pLF8uZy5jLmxlbmd0aD09MHx8eGhuKF8pO2Vsc2UgaWYoX3QoSyhvLChhZSgpLElpKSksMTcpKVo9dShLKG8sSWkpLDE3KSxidD11KHFnKG8sKGJlKCksQm4pKS5LYygpLlBiKCksMTEpLE10PXUocWcobyxIbikuS2MoKS5QYigpLDExKSxTdD11KEsoYnQsSWkpLDExKSxqdD11KEsoTXQsSWkpLDExKSxCYShaLGp0KSxwYShaLFN0KSxRdD1uZXcgU28oTXQuaS5uKSxRdC5hPW5jKHV0KG90KG5hLDEpLHJlLDgsMCxbanQuaS5uLGp0Lm4sanQuYV0pKS5hLGFpKFouYSxRdCksUXQ9bmV3IFNvKGJ0LmkubiksUXQuYT1uYyh1dChvdChuYSwxKSxyZSw4LDAsW1N0LmkubixTdC5uLFN0LmFdKSkuYSxhaShaLmEsUXQpO2Vsc2V7aWYoby5qLmMubGVuZ3RoPj0yKXtmb3IoVz0hMCxCPW5ldyBTKG8uaiksbj11KFEoQiksMTEpLHE9bnVsbDtCLmE8Qi5jLmMubGVuZ3RoOylpZihxPW4sbj11KFEoQiksMTEpLCFTaShLKHEsSWkpLEsobixJaSkpKXtXPSExO2JyZWFrfX1lbHNlIFc9ITE7Zm9yKE09bmV3IFMoby5qKTtNLmE8TS5jLmMubGVuZ3RoOylfPXUoUShNKSwxMSksXy5lLmMubGVuZ3RoPT0wfHxLMm4oXyxXKSxfLmcuYy5sZW5ndGg9PTB8fFkybihfLFcpfUxvKG8sbnVsbCl9b3IoZSl9ZnVuY3Rpb24gVGhlKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxfLE0sQixxLEcsVyxaLGJ0LE10LFN0LGp0LFF0LGNlLF9lLFdlO3JldHVybiBTdD10LmNbKFNuKDAsZS5jLmxlbmd0aCksdShlLmNbMF0sMTcpKS5wXSxfZT10LmNbKFNuKDEsZS5jLmxlbmd0aCksdShlLmNbMV0sMTcpKS5wXSxTdC5hLmUuZS1TdC5hLmEtKFN0LmIuZS5lLVN0LmIuYSk9PTAmJl9lLmEuZS5lLV9lLmEuYS0oX2UuYi5lLmUtX2UuYi5hKT09MHx8KGJ0PVN0LmIuZS5mLCFfdChidCwxMCkpPyExOihaPXUoYnQsMTApLFF0PXQuaVtaLnBdLGNlPVouYz9HbyhaLmMuYSxaLDApOi0xLG89YnMsY2U+MCYmKHM9dShQZShaLmMuYSxjZS0xKSwxMCksaD10Lmlbcy5wXSxXZT1iLk1hdGguY2VpbChVMyh0Lm4scyxaKSksbz1RdC5hLmUtWi5kLmQtKGguYS5lK3Muby5iK3MuZC5hKS1XZSksaz1icyxjZTxaLmMuYS5jLmxlbmd0aC0xJiYodz11KFBlKFouYy5hLGNlKzEpLDEwKSxfPXQuaVt3LnBdLFdlPWIuTWF0aC5jZWlsKFUzKHQubix3LFopKSxrPV8uYS5lLXcuZC5kLShRdC5hLmUrWi5vLmIrWi5kLmEpLVdlKSxuJiYoRTEoKSx2ZihUZCksYi5NYXRoLmFicyhvLWspPD1UZHx8bz09a3x8aXNOYU4obykmJmlzTmFOKGspKT8hMDoocj1HbnQoU3QuYSksZD0tR250KFN0LmIpLE09LUdudChfZS5hKSxNdD1HbnQoX2UuYiksVz1TdC5hLmUuZS1TdC5hLmEtKFN0LmIuZS5lLVN0LmIuYSk+MCYmX2UuYS5lLmUtX2UuYS5hLShfZS5iLmUuZS1fZS5iLmEpPDAsRz1TdC5hLmUuZS1TdC5hLmEtKFN0LmIuZS5lLVN0LmIuYSk8MCYmX2UuYS5lLmUtX2UuYS5hLShfZS5iLmUuZS1fZS5iLmEpPjAscT1TdC5hLmUuZStTdC5iLmE8X2UuYi5lLmUrX2UuYS5hLEI9U3QuYS5lLmUrU3QuYi5hPl9lLmIuZS5lK19lLmEuYSxqdD0wLCFXJiYhRyYmKEI/bytNPjA/anQ9TTprLXI+MCYmKGp0PXIpOnEmJihvK2Q+MD9qdD1kOmstTXQ+MCYmKGp0PU10KSkpLFF0LmEuZSs9anQsUXQuYiYmKFF0LmQuZSs9anQpLCExKSl9ZnVuY3Rpb24gX2hlKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxfLE0sQjtpZihyPW5ldyBjaChlLnFmKCkuYSxlLnFmKCkuYixlLnJmKCkuYSxlLnJmKCkuYikscz1uZXcgUzYsdC5jKWZvcihoPW5ldyBTKGUud2YoKSk7aC5hPGguYy5jLmxlbmd0aDspbz11KFEoaCksMTgxKSxzLmM9by5xZigpLmErZS5xZigpLmEscy5kPW8ucWYoKS5iK2UucWYoKS5iLHMuYj1vLnJmKCkuYSxzLmE9by5yZigpLmIsaEMocixzKTtmb3Ioaz1uZXcgUyhlLkNmKCkpO2suYTxrLmMuYy5sZW5ndGg7KXtpZih3PXUoUShrKSw4MzgpLF89dy5xZigpLmErZS5xZigpLmEsTT13LnFmKCkuYitlLnFmKCkuYix0LmUmJihzLmM9XyxzLmQ9TSxzLmI9dy5yZigpLmEscy5hPXcucmYoKS5iLGhDKHIscykpLHQuZClmb3IoaD1uZXcgUyh3LndmKCkpO2guYTxoLmMuYy5sZW5ndGg7KW89dShRKGgpLDE4MSkscy5jPW8ucWYoKS5hK18scy5kPW8ucWYoKS5iK00scy5iPW8ucmYoKS5hLHMuYT1vLnJmKCkuYixoQyhyLHMpO2lmKHQuYil7aWYoQj1uZXcgUmUoLW4sLW4pLHUoZS5XZSgoZGkoKSxLeSkpLDE3NCkuSGMoKGlsKCksRWIpKSlmb3IoaD1uZXcgUyh3LndmKCkpO2guYTxoLmMuYy5sZW5ndGg7KW89dShRKGgpLDE4MSksQi5hKz1vLnJmKCkuYStuLEIuYis9by5yZigpLmIrbjtCLmE9Yi5NYXRoLm1heChCLmEsMCksQi5iPWIuTWF0aC5tYXgoQi5iLDApLFd1ZShyLHcuQmYoKSx3LnpmKCksZSx3LEIsbil9fXQuYiYmV3VlKHIsZS5CZigpLGUuemYoKSxlLG51bGwsbnVsbCxuKSxkPW5ldyB5bnQoZS5BZigpKSxkLmQ9Yi5NYXRoLm1heCgwLGUucWYoKS5iLXIuZCksZC5hPWIuTWF0aC5tYXgoMCxyLmQrci5hLShlLnFmKCkuYitlLnJmKCkuYikpLGQuYj1iLk1hdGgubWF4KDAsZS5xZigpLmEtci5jKSxkLmM9Yi5NYXRoLm1heCgwLHIuYytyLmItKGUucWYoKS5hK2UucmYoKS5hKSksZS5FZihkKX1mdW5jdGlvbiBuNW4oKXt2YXIgdD1bIlxcdTAwMDAiLCJcXHUwMDAxIiwiXFx1MDAwMiIsIlxcdTAwMDMiLCJcXHUwMDA0IiwiXFx1MDAwNSIsIlxcdTAwMDYiLCJcXHUwMDA3IiwiXFxiIiwiXFx0IiwiXFxuIiwiXFx1MDAwQiIsIlxcZiIsIlxcciIsIlxcdTAwMEUiLCJcXHUwMDBGIiwiXFx1MDAxMCIsIlxcdTAwMTEiLCJcXHUwMDEyIiwiXFx1MDAxMyIsIlxcdTAwMTQiLCJcXHUwMDE1IiwiXFx1MDAxNiIsIlxcdTAwMTciLCJcXHUwMDE4IiwiXFx1MDAxOSIsIlxcdTAwMUEiLCJcXHUwMDFCIiwiXFx1MDAxQyIsIlxcdTAwMUQiLCJcXHUwMDFFIiwiXFx1MDAxRiJdO3JldHVybiB0WzM0XT0nXFwiJyx0WzkyXT0iXFxcXCIsdFsxNzNdPSJcXHUwMGFkIix0WzE1MzZdPSJcXHUwNjAwIix0WzE1MzddPSJcXHUwNjAxIix0WzE1MzhdPSJcXHUwNjAyIix0WzE1MzldPSJcXHUwNjAzIix0WzE3NTddPSJcXHUwNmRkIix0WzE4MDddPSJcXHUwNzBmIix0WzYwNjhdPSJcXHUxN2I0Iix0WzYwNjldPSJcXHUxN2I1Iix0WzgyMDNdPSJcXHUyMDBiIix0WzgyMDRdPSJcXHUyMDBjIix0WzgyMDVdPSJcXHUyMDBkIix0WzgyMDZdPSJcXHUyMDBlIix0WzgyMDddPSJcXHUyMDBmIix0WzgyMzJdPSJcXHUyMDI4Iix0WzgyMzNdPSJcXHUyMDI5Iix0WzgyMzRdPSJcXHUyMDJhIix0WzgyMzVdPSJcXHUyMDJiIix0WzgyMzZdPSJcXHUyMDJjIix0WzgyMzddPSJcXHUyMDJkIix0WzgyMzhdPSJcXHUyMDJlIix0WzgyODhdPSJcXHUyMDYwIix0WzgyODldPSJcXHUyMDYxIix0WzgyOTBdPSJcXHUyMDYyIix0WzgyOTFdPSJcXHUyMDYzIix0WzgyOTJdPSJcXHUyMDY0Iix0WzgyOThdPSJcXHUyMDZhIix0WzgyOTldPSJcXHUyMDZiIix0WzgzMDBdPSJcXHUyMDZjIix0WzgzMDFdPSJcXHUyMDZkIix0WzgzMDJdPSJcXHUyMDZlIix0WzgzMDNdPSJcXHUyMDZmIix0WzY1Mjc5XT0iXFx1ZmVmZiIsdFs2NTUyOV09IlxcdWZmZjkiLHRbNjU1MzBdPSJcXHVmZmZhIix0WzY1NTMxXT0iXFx1ZmZmYiIsdH1mdW5jdGlvbiByNW4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLF8sTSxCO2Zvcih3PW5ldyBsZSxNPWUubGVuZ3RoLGg9a3l0KG4pLGs9MDtrPE07KytrKXtzd2l0Y2goXz1FMnQoZSxMdSg2MSksaykscj1qdW4oaCxlLnN1YnN0cihrLF8taykpLHM9cGl0KHIpLG89cy5BaigpLk5oKCksVGEoZSwrK18pKXtjYXNlIDM5OntkPWM4KGUsMzksKytfKSx1ZSh3LG5ldyBKUihyLHJydChlLnN1YnN0cihfLGQtXyksbyxzKSkpLGs9ZCsxO2JyZWFrfWNhc2UgMzQ6e2Q9YzgoZSwzNCwrK18pLHVlKHcsbmV3IEpSKHIscnJ0KGUuc3Vic3RyKF8sZC1fKSxvLHMpKSksaz1kKzE7YnJlYWt9Y2FzZSA5MTp7Qj1uZXcgbGUsdWUodyxuZXcgSlIocixCKSk7dDpmb3IoOzspe3N3aXRjaChUYShlLCsrXykpe2Nhc2UgMzk6e2Q9YzgoZSwzOSwrK18pLHVlKEIscnJ0KGUuc3Vic3RyKF8sZC1fKSxvLHMpKSxfPWQrMTticmVha31jYXNlIDM0OntkPWM4KGUsMzQsKytfKSx1ZShCLHJydChlLnN1YnN0cihfLGQtXyksbyxzKSksXz1kKzE7YnJlYWt9Y2FzZSAxMTA6e2lmKCsrXyxlLmluZGV4T2YoInVsbCIsXyk9PV8pQi5jW0IuYy5sZW5ndGhdPW51bGw7ZWxzZSB0aHJvdyBudChuZXcgWm8odmRlKSk7Xys9MzticmVha319aWYoXzxNKXN3aXRjaCgkcihfLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoXykpe2Nhc2UgNDQ6YnJlYWs7Y2FzZSA5MzpicmVhayB0O2RlZmF1bHQ6dGhyb3cgbnQobmV3IFpvKCJFeHBlY3RpbmcgLCBvciBdIikpfWVsc2UgYnJlYWt9az1fKzE7YnJlYWt9Y2FzZSAxMTA6e2lmKCsrXyxlLmluZGV4T2YoInVsbCIsXyk9PV8pdWUodyxuZXcgSlIocixudWxsKSk7ZWxzZSB0aHJvdyBudChuZXcgWm8odmRlKSk7az1fKzM7YnJlYWt9fWlmKGs8TSl7aWYoJHIoayxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGspIT00NCl0aHJvdyBudChuZXcgWm8oIkV4cGVjdGluZyAsIikpfWVsc2UgYnJlYWt9cmV0dXJuIHh2bih0LHcsbil9ZnVuY3Rpb24gQ2hlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxfLE0sQjtmb3Ioaz11KHUoUGkodC5yLGUpLDIxKSw4NCksaD1yMG4odCxlKSxuPXQudS5IYygoaWwoKSxaUykpLHc9ay5LYygpO3cuT2IoKTspaWYoZD11KHcuUGIoKSwxMTEpLCEoIWQuY3x8ZC5jLmQuYy5sZW5ndGg8PTApKXtzd2l0Y2goQj1kLmIucmYoKSxfPWQuYyxNPV8uaSxNLmI9KG89Xy5uLF8uZS5hK28uYitvLmMpLE0uYT0ocz1fLm4sXy5lLmIrcy5kK3MuYSksZS5nKXtjYXNlIDE6ZC5hPyhNLmM9KEIuYS1NLmIpLzIsWGYoXywocmwoKSxsYikpKTpofHxuPyhNLmM9LU0uYi10LnMsWGYoXywocmwoKSxrZikpKTooTS5jPUIuYSt0LnMsWGYoXywocmwoKSxBZCkpKSxNLmQ9LU0uYS10LnQsaGQoXywoVHUoKSxFZikpO2JyZWFrO2Nhc2UgMzpkLmE/KE0uYz0oQi5hLU0uYikvMixYZihfLChybCgpLGxiKSkpOmh8fG4/KE0uYz0tTS5iLXQucyxYZihfLChybCgpLGtmKSkpOihNLmM9Qi5hK3QucyxYZihfLChybCgpLEFkKSkpLE0uZD1CLmIrdC50LGhkKF8sKFR1KCksczEpKTticmVhaztjYXNlIDI6ZC5hPyhyPXQudj9NLmE6dShQZShfLmQsMCksMTgxKS5yZigpLmIsTS5kPShCLmItcikvMixoZChfLChUdSgpLGhiKSkpOmh8fG4/KE0uZD0tTS5hLXQudCxoZChfLChUdSgpLEVmKSkpOihNLmQ9Qi5iK3QudCxoZChfLChUdSgpLHMxKSkpLE0uYz1CLmErdC5zLFhmKF8sKHJsKCksQWQpKTticmVhaztjYXNlIDQ6ZC5hPyhyPXQudj9NLmE6dShQZShfLmQsMCksMTgxKS5yZigpLmIsTS5kPShCLmItcikvMixoZChfLChUdSgpLGhiKSkpOmh8fG4/KE0uZD0tTS5hLXQudCxoZChfLChUdSgpLEVmKSkpOihNLmQ9Qi5iK3QudCxoZChfLChUdSgpLHMxKSkpLE0uYz0tTS5iLXQucyxYZihfLChybCgpLGtmKSl9aD0hMX19ZnVuY3Rpb24gbmIodCxlKXt5aSgpO3ZhciBuLHIscyxvLGgsZCx3LGssXyxNLEIscSxHO2lmKCRUKERFKT09MCl7Zm9yKE09TnQoRTZuLHJlLDExNyxBNWUubGVuZ3RoLDAsMSksaD0wO2g8TS5sZW5ndGg7aCsrKU1baF09bmV3IGpsKDQpO2ZvcihyPW5ldyBCVCxvPTA7bzxiTHQubGVuZ3RoO28rKyl7aWYoXz1uZXcgamwoNCksbzw4ND8oZD1vKjIscT0oJHIoZCxndXQubGVuZ3RoKSxndXQuY2hhckNvZGVBdChkKSksQj0oJHIoZCsxLGd1dC5sZW5ndGgpLGd1dC5jaGFyQ29kZUF0KGQrMSkpLHFjKF8scSxCKSk6KGQ9KG8tODQpKjIscWMoXyx2THRbZF0sdkx0W2QrMV0pKSx3PWJMdFtvXSx1bih3LCJTcGVjaWFscyIpJiZxYyhfLDY1NTIwLDY1NTMzKSx1bih3LGVnZSkmJihxYyhfLDk4MzA0MCwxMDQ4NTczKSxxYyhfLDEwNDg1NzYsMTExNDEwOSkpLEFvKERFLHcsXyksQW8oaEEsdyxieShfKSksaz1yLmEubGVuZ3RoLDA8az9yLmE9ci5hLnN1YnN0cigwLDApOjA+ayYmKHIuYSs9TVV0KE50KEVoLHdkLDI1LC1rLDE1LDEpKSksci5hKz0iSXMiLHVkKHcsTHUoMzIpKT49MClmb3Iocz0wO3M8dy5sZW5ndGg7cysrKSRyKHMsdy5sZW5ndGgpLHcuY2hhckNvZGVBdChzKSE9MzImJnY4KHIsKCRyKHMsdy5sZW5ndGgpLHcuY2hhckNvZGVBdChzKSkpO2Vsc2Ugci5hKz0iIit3O3czdChyLmEsdywhMCl9dzN0KGR1dCwiQ24iLCExKSx3M3Qoejh0LCJDbiIsITApLG49bmV3IGpsKDQpLHFjKG4sMCxHNyksQW8oREUsIkFMTCIsbiksQW8oaEEsIkFMTCIsYnkobikpLCFuMyYmKG4zPW5ldyBBciksQW8objMsZHV0LGR1dCksIW4zJiYobjM9bmV3IEFyKSxBbyhuMyx6OHQsejh0KSwhbjMmJihuMz1uZXcgQXIpLEFvKG4zLCJBTEwiLCJBTEwiKX1yZXR1cm4gRz11KGpjKGU/REU6aEEsdCksMTM2KSxHfWZ1bmN0aW9uIGk1bih0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWixidCxNdDtpZihCPSExLE09ITEsVjModShLKHIsKHhlKCksd3MpKSw5OCkpKXtoPSExLGQ9ITE7dDpmb3IoRz1uZXcgUyhyLmopO0cuYTxHLmMuYy5sZW5ndGg7KWZvcihxPXUoUShHKSwxMSksWj1qcChJMSh1dChvdCgkMSwxKSxNZSwyMCwwLFtuZXcgc2EocSksbmV3IENyKHEpXSkpKTtWcihaKTspaWYoVz11KElyKFopLDExKSwhQmUoRmUoSyhXLmksa1MpKSkpe2lmKHEuaj09KGJlKCksT24pKXtoPSEwO2JyZWFrIHR9aWYocS5qPT15cil7ZD0hMDticmVhayB0fX1CPWQmJiFoLE09aCYmIWR9aWYoIUImJiFNJiZyLmIuYy5sZW5ndGghPTApe2ZvcihfPTAsaz1uZXcgUyhyLmIpO2suYTxrLmMuYy5sZW5ndGg7KXc9dShRKGspLDcwKSxfKz13Lm4uYit3Lm8uYi8yO18vPXIuYi5jLmxlbmd0aCxNdD1fPj1yLm8uYi8yfWVsc2UgTXQ9IU07TXQ/KGJ0PXUoSyhyLChhZSgpLE94KSksMTUpLGJ0P0I/bz1idDoocz11KEsocixBeCksMTUpLHM/YnQuZ2MoKTw9cy5nYygpP289YnQ6bz1zOihvPW5ldyBsZSxlZShyLEF4LG8pKSk6KG89bmV3IGxlLGVlKHIsT3gsbykpKToocz11KEsociwoYWUoKSxBeCkpLDE1KSxzP00/bz1zOihidD11KEsocixPeCksMTUpLGJ0P3MuZ2MoKTw9YnQuZ2MoKT9vPXM6bz1idDoobz1uZXcgbGUsZWUocixPeCxvKSkpOihvPW5ldyBsZSxlZShyLEF4LG8pKSksby5GYyh0KSxlZSh0LChhZSgpLHpWKSxuKSxlLmQ9PW4/KHBhKGUsbnVsbCksbi5lLmMubGVuZ3RoK24uZy5jLmxlbmd0aD09MCYmdGMobixudWxsKSxZY24obikpOihCYShlLG51bGwpLG4uZS5jLmxlbmd0aCtuLmcuYy5sZW5ndGg9PTAmJnRjKG4sbnVsbCkpLE1oKGUuYSl9ZnVuY3Rpb24gczVuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxfLE0sQixxLEcsVyxaLGJ0LE10LFN0LGp0LFF0LGNlLF9lLFdlLFFlLFJuLHpuLGhyLHhpO2ZvcihNdD1uZXcgeGEodC5iLDApLF89ZS5LYygpLEc9MCxrPXUoXy5QYigpLDE5KS5hLFF0PTAsbj1uZXcgUXMsX2U9bmV3IEEwO010LmI8TXQuZC5nYygpOyl7Zm9yKGJ0PShabihNdC5iPE10LmQuZ2MoKSksdShNdC5kLlhiKE10LmM9TXQuYisrKSwyOSkpLGp0PW5ldyBTKGJ0LmEpO2p0LmE8anQuYy5jLmxlbmd0aDspe2ZvcihTdD11KFEoanQpLDEwKSxxPW5ldyBhcihscigkcyhTdCkuYS5LYygpLG5ldyBIKSk7VnIocSk7KU09dShJcihxKSwxNyksX2UuYS56YyhNLF9lKTtmb3IoQj1uZXcgYXIobHIoVW8oU3QpLmEuS2MoKSxuZXcgSCkpO1ZyKEIpOylNPXUoSXIoQiksMTcpLF9lLmEuQmMoTSkhPW51bGx9aWYoRysxPT1rKXtmb3Iocz1uZXcgTGgodCksUm0oTXQscyksbz1uZXcgTGgodCksUm0oTXQsbyksUWU9X2UuYS5lYygpLktjKCk7UWUuT2IoKTspV2U9dShRZS5QYigpLDE3KSxuLmEuX2IoV2UpfHwoKytRdCxuLmEuemMoV2UsbikpLGg9bmV3IEgwKHQpLGVlKGgsKHhlKCksd3MpLCh2YSgpLFNFKSksTG8oaCxzKSxDMChoLChHbigpLHExKSksVz1uZXcgTmMsdGMoVyxoKSxVcyhXLChiZSgpLEJuKSksUm49bmV3IE5jLHRjKFJuLGgpLFVzKFJuLEhuKSxyPW5ldyBIMCh0KSxlZShyLHdzLFNFKSxMbyhyLG8pLEMwKHIscTEpLFo9bmV3IE5jLHRjKFosciksVXMoWixCbiksem49bmV3IE5jLHRjKHpuLHIpLFVzKHpuLEhuKSxjZT1uZXcgenYsQmEoY2UsV2UuYykscGEoY2UsVykseGk9bmV3IHp2LEJhKHhpLFJuKSxwYSh4aSxaKSxCYShXZSx6biksZD1uZXcgWXd0KGgscixjZSx4aSxXZSksZWUoaCwoYWUoKSxMdyksZCksZWUocixMdyxkKSxocj1jZS5jLmksaHIuaz09cTEmJih3PXUoSyhocixMdyksMzA1KSx3LmQ9ZCxkLmc9dyk7aWYoXy5PYigpKWs9dShfLlBiKCksMTkpLmE7ZWxzZSBicmVha30rK0d9cmV0dXJuIGRlKFF0KX1mdW5jdGlvbiBhNW4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXO2ZvcihNPTAscz1uZXcgbnIoKCFlLmEmJihlLmE9bmV3IGhlKGRzLGUsMTAsMTEpKSxlLmEpKTtzLmUhPXMuaS5nYygpOylyPXUoZHIocyksMzMpLEJlKEZlKHplKHIsKHhlKCksajIpKSkpfHwoKEd0KHplKGUscGIpKSE9PUd0KChqMCgpLGJiKSl8fEd0KHplKGUsUnkpKT09PUd0KChtMigpLHBTKSl8fEd0KHplKGUsUnkpKT09PUd0KChtMigpLGdTKSl8fEJlKEZlKHplKGUsQnkpKSl8fEd0KHplKGUsTngpKSE9PUd0KChldygpLHo0KSkpJiYhQmUoRmUoemUocixWbHQpKSkmJihFbyhyLChhZSgpLExjKSxkZShNKSksKytNKSxzaGUodCxyLG4pKTtmb3IoTT0wLGs9bmV3IG5yKCghZS5iJiYoZS5iPW5ldyBoZShyYSxlLDEyLDMpKSxlLmIpKTtrLmUhPWsuaS5nYygpOylkPXUoZHIoayksNzkpLChHdCh6ZShlLCh4ZSgpLHBiKSkpIT09R3QoKGowKCksYmIpKXx8R3QoemUoZSxSeSkpPT09R3QoKG0yKCkscFMpKXx8R3QoemUoZSxSeSkpPT09R3QoKG0yKCksZ1MpKXx8QmUoRmUoemUoZSxCeSkpKXx8R3QoemUoZSxOeCkpIT09R3QoKGV3KCksejQpKSkmJihFbyhkLChhZSgpLExjKSxkZShNKSksKytNKSxHPVpkKGQpLFc9WnAoZCksXz1CZShGZSh6ZShHLCR5KSkpLHE9IUJlKEZlKHplKGQsajIpKSksQj1fJiZ1dyhkKSYmQmUoRmUoemUoZCxCMikpKSxvPWhzKEcpPT1lJiZocyhHKT09aHMoVyksaD0oaHMoRyk9PWUmJlc9PWUpXihocyhXKT09ZSYmRz09ZSkscSYmIUImJihofHxvKSYmVDZ0KHQsZCxlLG4pO2lmKGhzKGUpKWZvcih3PW5ldyBucihUWHQoaHMoZSkpKTt3LmUhPXcuaS5nYygpOylkPXUoZHIodyksNzkpLEc9WmQoZCksRz09ZSYmdXcoZCkmJihCPUJlKEZlKHplKEcsKHhlKCksJHkpKSkpJiZCZShGZSh6ZShkLEIyKSkpLEImJlQ2dCh0LGQsZSxuKSl9ZnVuY3Rpb24gbzVuKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxfLE0sQixxLEcsVyxaLGJ0LE10LFN0LGp0LFF0LGNlLF9lLFdlLFFlLFJuLHpuLGhyLHhpLEtzO2ZvcihtcihuLCJNaW5XaWR0aCBsYXllcmluZyIsMSkscT1lLmIsX2U9ZS5hLEtzPXUoSyhlLCh4ZSgpLFlUdCkpLDE5KS5hLGQ9dShLKGUsWFR0KSwxOSkuYSx0LmI9WnQodmUoSyhlLFRmKSkpLHQuZD1icyxqdD1uZXcgUyhfZSk7anQuYTxqdC5jLmMubGVuZ3RoOylNdD11KFEoanQpLDEwKSxNdC5rPT0oR24oKSxxcykmJihSbj1NdC5vLmIsdC5kPWIuTWF0aC5taW4odC5kLFJuKSk7Zm9yKHQuZD1iLk1hdGgubWF4KDEsdC5kKSxXZT1fZS5jLmxlbmd0aCx0LmM9TnQoU3IsSnIsMjUsV2UsMTUsMSksdC5mPU50KFNyLEpyLDI1LFdlLDE1LDEpLHQuZT1OdChnYSxUbywyNSxXZSwxNSwxKSxrPTAsdC5hPTAsUXQ9bmV3IFMoX2UpO1F0LmE8UXQuYy5jLmxlbmd0aDspTXQ9dShRKFF0KSwxMCksTXQucD1rKyssdC5jW010LnBdPXhyZShVbyhNdCkpLHQuZltNdC5wXT14cmUoJHMoTXQpKSx0LmVbTXQucF09TXQuby5iL3QuZCx0LmErPXQuZVtNdC5wXTtmb3IodC5iLz10LmQsdC5hLz1XZSxjZT1UcG4oX2UpLGFhKF9lLHl3dChuZXcgX3AodCkpKSxXPWJzLEc9VGksaD1udWxsLHhpPUtzLGhyPUtzLG89ZCxzPWQsS3M8MCYmKHhpPXUoVV90LmEuemQoKSwxOSkuYSxocj11KFVfdC5iLnpkKCksMTkpLmEpLGQ8MCYmKG89dShHX3QuYS56ZCgpLDE5KS5hLHM9dShHX3QuYi56ZCgpLDE5KS5hKSx6bj14aTt6bjw9aHI7em4rKylmb3Iocj1vO3I8PXM7cisrKVFlPUptbih0LHpuLHIsX2UsY2UpLGJ0PVp0KHZlKFFlLmEpKSxCPXUoUWUuYiwxNSksWj1CLmdjKCksKGJ0PFd8fGJ0PT1XJiZaPEcpJiYoVz1idCxHPVosaD1CKTtmb3IoTT1oLktjKCk7TS5PYigpOyl7Zm9yKF89dShNLlBiKCksMTUpLHc9bmV3IExoKGUpLFN0PV8uS2MoKTtTdC5PYigpOylNdD11KFN0LlBiKCksMTApLExvKE10LHcpO3EuY1txLmMubGVuZ3RoXT13fWpzdChxKSxfZS5jPU50KFFuLE1lLDEsMCw1LDEpLG9yKG4pfWZ1bmN0aW9uIGM1bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWixidCxNdCxTdCxqdCxRdCxjZSxfZSxXZSxRZSxSbjtmb3IodC5iPWUsdC5hPXUoSyhlLCh4ZSgpLEhUdCkpLDE5KS5hLHQuYz11KEsoZSxHVHQpLDE5KS5hLHQuYz09MCYmKHQuYz1UaSksWj1uZXcgeGEoZS5iLDApO1ouYjxaLmQuZ2MoKTspe2ZvcihXPShabihaLmI8Wi5kLmdjKCkpLHUoWi5kLlhiKFouYz1aLmIrKyksMjkpKSxkPW5ldyBsZSxfPS0xLGp0PS0xLFN0PW5ldyBTKFcuYSk7U3QuYTxTdC5jLmMubGVuZ3RoOylNdD11KFEoU3QpLDEwKSxOMCgoVk0oKSxuZXcgYXIobHIoejAoTXQpLmEuS2MoKSxuZXcgSCkpKSk+PXQuYSYmKHI9Vm1uKHQsTXQpLF89Yi5NYXRoLm1heChfLHIuYiksanQ9Yi5NYXRoLm1heChqdCxyLmQpLHVlKGQsbmV3IHlhKE10LHIpKSk7Zm9yKFdlPW5ldyBsZSxrPTA7azxfOysraykkbShXZSwwLChabihaLmI+MCksWi5hLlhiKFouYz0tLVouYiksUWU9bmV3IExoKHQuYiksUm0oWixRZSksWm4oWi5iPFouZC5nYygpKSxaLmQuWGIoWi5jPVouYisrKSxRZSkpO2ZvcihoPW5ldyBTKGQpO2guYTxoLmMuYy5sZW5ndGg7KWlmKHM9dShRKGgpLDQ2KSxxPXUocy5iLDU3MSkuYSwhIXEpZm9yKEI9bmV3IFMocSk7Qi5hPEIuYy5jLmxlbmd0aDspTT11KFEoQiksMTApLFUzdCh0LE0sY1YsV2UpO2ZvcihuPW5ldyBsZSx3PTA7dzxqdDsrK3cpdWUobiwoUm49bmV3IExoKHQuYiksUm0oWixSbiksUm4pKTtmb3Iobz1uZXcgUyhkKTtvLmE8by5jLmMubGVuZ3RoOylpZihzPXUoUShvKSw0NiksX2U9dShzLmIsNTcxKS5jLCEhX2UpZm9yKGNlPW5ldyBTKF9lKTtjZS5hPGNlLmMuYy5sZW5ndGg7KVF0PXUoUShjZSksMTApLFUzdCh0LFF0LHVWLG4pfWZvcihidD1uZXcgeGEoZS5iLDApO2J0LmI8YnQuZC5nYygpOylHPShabihidC5iPGJ0LmQuZ2MoKSksdShidC5kLlhiKGJ0LmM9YnQuYisrKSwyOSkpLEcuYS5jLmxlbmd0aD09MCYmRGwoYnQpfWZ1bmN0aW9uIHU1bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWixidCxNdCxTdCxqdCxRdCxjZSxfZSxXZSxRZSxSbix6bixocjtpZihtcihuLCJTcGxpbmUgZWRnZSByb3V0aW5nIiwxKSxlLmIuYy5sZW5ndGg9PTApe2UuZi5hPTAsb3Iobik7cmV0dXJufU10PVp0KHZlKEsoZSwoeGUoKSxKNCkpKSksZD1adCh2ZShLKGUsJDIpKSksaD1adCh2ZShLKGUsWjQpKSksYnQ9dShLKGUsWGx0KSwzMzYpLFdlPWJ0PT0oWjgoKSxEUyksX2U9WnQodmUoSyhlLHpUdCkpKSx0LmQ9ZSx0LmouYz1OdChRbixNZSwxLDAsNSwxKSx0LmEuYz1OdChRbixNZSwxLDAsNSwxKSxubCh0LmspLHc9dShQZShlLmIsMCksMjkpLF89ZWoody5hLChocSgpLE5PKSksRz11KFBlKGUuYixlLmIuYy5sZW5ndGgtMSksMjkpLE09ZWooRy5hLE5PKSxXPW5ldyBTKGUuYiksWj1udWxsLGhyPTA7ZG97Zm9yKFN0PVcuYTxXLmMuYy5sZW5ndGg/dShRKFcpLDI5KTpudWxsLFk0bih0LFosU3QpLEVtbih0KSxRZT1ES2UoTm9uKHQkKFdpKG5ldyBrbihudWxsLG5ldyBUbih0LmksMTYpKSxuZXcgelEpLG5ldyAkUSkpKSx6bj0wLGp0PWhyLEI9IVp8fF8mJlo9PXcscT0hU3R8fE0mJlN0PT1HLFFlPjA/KGs9MCxaJiYoays9ZCksays9KFFlLTEpKmgsU3QmJihrKz1kKSxXZSYmU3QmJihrPWIuTWF0aC5tYXgoayxIMm4oU3QsaCxNdCxfZSkpKSxrPE10JiYhQiYmIXEmJih6bj0oTXQtaykvMixrPU10KSxqdCs9ayk6IUImJiFxJiYoanQrPU10KSxTdCYmdTZ0KFN0LGp0KSxjZT1uZXcgUyh0LmkpO2NlLmE8Y2UuYy5jLmxlbmd0aDspUXQ9dShRKGNlKSwxMjgpLFF0LmEuYz1ocixRdC5hLmI9anQtaHIsUXQuRj16bixRdC5wPSFaO1JzKHQuYSx0LmkpLGhyPWp0LFN0JiYoaHIrPVN0LmMuYSksWj1TdCxCPXF9d2hpbGUoU3QpO2ZvcihzPW5ldyBTKHQuaik7cy5hPHMuYy5jLmxlbmd0aDspcj11KFEocyksMTcpLG89c2NuKHQsciksZWUociwoYWUoKSxRNCksbyksUm49aHZuKHQsciksZWUocixGMixSbik7ZS5mLmE9aHIsdC5kPW51bGwsb3Iobil9ZnVuY3Rpb24gU2hlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxfLE0sQixxLEcsVyxaLGJ0LE10LFN0LGp0O2lmKFc9dC5pIT0wLFN0PSExLGJ0PW51bGwsU2wodC5lKSl7aWYoXz1lLmdjKCksXz4wKXtmb3IoQj1fPDEwMD9udWxsOm5ldyBMcChfKSxrPW5ldyBpeXQoZSksRz1rLmcsYnQ9TnQoU3IsSnIsMjUsXywxNSwxKSxyPTAsanQ9bmV3IEt2KF8pLHM9MDtzPHQuaTsrK3Mpe2Q9dC5nW3NdLHE9ZDt0OmZvcihNdD0wO010PDI7KytNdCl7Zm9yKHc9XzstLXc+PTA7KWlmKHEhPW51bGw/U2kocSxHW3ddKTpHdChxKT09PUd0KEdbd10pKXtidC5sZW5ndGg8PXImJihaPWJ0LGJ0PU50KFNyLEpyLDI1LDIqYnQubGVuZ3RoLDE1LDEpLFBjKFosMCxidCwwLHIpKSxidFtyKytdPXMsT3IoanQsR1t3XSk7YnJlYWsgdH1pZihxPXEsR3QocSk9PT1HdChkKSlicmVha319aWYoaz1qdCxHPWp0LmcsXz1yLHI+YnQubGVuZ3RoJiYoWj1idCxidD1OdChTcixKciwyNSxyLDE1LDEpLFBjKFosMCxidCwwLHIpKSxyPjApe2ZvcihTdD0hMCxvPTA7bzxyOysrbylxPUdbb10sQj1zS3QodCx1KHEsNzIpLEIpO2ZvcihoPXI7LS1oPj0wOylueCh0LGJ0W2hdKTtpZihyIT1fKXtmb3Iocz1fOy0tcz49cjspbngoayxzKTtaPWJ0LGJ0PU50KFNyLEpyLDI1LHIsMTUsMSksUGMoWiwwLGJ0LDAscil9ZT1rfX19ZWxzZSBmb3IoZT16Zm4odCxlKSxzPXQuaTstLXM+PTA7KWUuSGModC5nW3NdKSYmKG54KHQscyksU3Q9ITApO2lmKFN0KXtpZihidCE9bnVsbCl7Zm9yKG49ZS5nYygpLE09bj09MT9JXyh0LDQsZS5LYygpLlBiKCksbnVsbCxidFswXSxXKTpJXyh0LDYsZSxidCxidFswXSxXKSxCPW48MTAwP251bGw6bmV3IExwKG4pLHM9ZS5LYygpO3MuT2IoKTspcT1zLlBiKCksQj1jdnQodCx1KHEsNzIpLEIpO0I/KEIuRWkoTSksQi5GaSgpKTpDaSh0LmUsTSl9ZWxzZXtmb3IoQj10WmUoZS5nYygpKSxzPWUuS2MoKTtzLk9iKCk7KXE9cy5QYigpLEI9Y3Z0KHQsdShxLDcyKSxCKTtCJiZCLkZpKCl9cmV0dXJuITB9ZWxzZSByZXR1cm4hMX1mdW5jdGlvbiBsNW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFosYnQsTXQsU3Q7Zm9yKG49bmV3IEppZShlKSxuLmF8fFd3bihlKSxrPUt2bihlKSx3PW5ldyBIdixaPW5ldyBXY2UsVz1uZXcgUyhlLmEpO1cuYTxXLmMuYy5sZW5ndGg7KWZvcihHPXUoUShXKSwxMCkscz1uZXcgYXIobHIoJHMoRykuYS5LYygpLG5ldyBIKSk7VnIocyk7KXI9dShJcihzKSwxNyksKHIuYy5pLms9PShHbigpLElzKXx8ci5kLmkuaz09SXMpJiYoXz1aM24odCxyLGssWiksY24odyxuc3QoXy5kKSxfLmEpKTtmb3IoaD1uZXcgbGUsU3Q9dShLKG4uYywoYWUoKSxOeSkpLDIxKS5LYygpO1N0Lk9iKCk7KXtzd2l0Y2goTXQ9dShTdC5QYigpLDYxKSxxPVouY1tNdC5nXSxCPVouYltNdC5nXSxkPVouYVtNdC5nXSxvPW51bGwsYnQ9bnVsbCxNdC5nKXtjYXNlIDQ6bz1uZXcgY2godC5kLmEscSxrLmIuYS10LmQuYSxCLXEpLGJ0PW5ldyBjaCh0LmQuYSxxLGQsQi1xKSxOdihrLG5ldyBSZShvLmMrby5iLG8uZCkpLE52KGssbmV3IFJlKG8uYytvLmIsby5kK28uYSkpO2JyZWFrO2Nhc2UgMjpvPW5ldyBjaChrLmEuYSxxLHQuYy5hLWsuYS5hLEItcSksYnQ9bmV3IGNoKHQuYy5hLWQscSxkLEItcSksTnYoayxuZXcgUmUoby5jLG8uZCkpLE52KGssbmV3IFJlKG8uYyxvLmQrby5hKSk7YnJlYWs7Y2FzZSAxOm89bmV3IGNoKHEsdC5kLmIsQi1xLGsuYi5iLXQuZC5iKSxidD1uZXcgY2gocSx0LmQuYixCLXEsZCksTnYoayxuZXcgUmUoby5jLG8uZCtvLmEpKSxOdihrLG5ldyBSZShvLmMrby5iLG8uZCtvLmEpKTticmVhaztjYXNlIDM6bz1uZXcgY2gocSxrLmEuYixCLXEsdC5jLmItay5hLmIpLGJ0PW5ldyBjaChxLHQuYy5iLWQsQi1xLGQpLE52KGssbmV3IFJlKG8uYyxvLmQpKSxOdihrLG5ldyBSZShvLmMrby5iLG8uZCkpfW8mJihNPW5ldyB0cXQsTS5kPU10LE0uYj1vLE0uYz1idCxNLmE9cyQodShQaSh3LG5zdChNdCkpLDIxKSksaC5jW2guYy5sZW5ndGhdPU0pfXJldHVybiBScyhuLmIsaCksbi5kPWd1bih2M24oaykpLG59ZnVuY3Rpb24gQWhlKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxfLE0sQixxLEcsVztpZihuLnBbZS5wXT09bnVsbCl7ZD0hMCxuLnBbZS5wXT0wLGg9ZSxXPW4ubz09KEMxKCksejIpP05zOmJzO2RvIHM9dC5iLmVbaC5wXSxvPWguYy5hLmMubGVuZ3RoLG4ubz09ejImJnM+MHx8bi5vPT1WMSYmczxvLTE/KHc9bnVsbCxrPW51bGwsbi5vPT1WMT93PXUoUGUoaC5jLmEscysxKSwxMCk6dz11KFBlKGguYy5hLHMtMSksMTApLGs9bi5nW3cucF0sQWhlKHQsayxuKSxXPXQuZS5iZyhXLGUsaCksbi5qW2UucF09PWUmJihuLmpbZS5wXT1uLmpbay5wXSksbi5qW2UucF09PW4ualtrLnBdPyhHPVUzKHQuZCxoLHcpLG4ubz09VjE/KHI9WnQobi5wW2UucF0pLE09WnQobi5wW2sucF0pK1p0KG4uZFt3LnBdKS13LmQuZC1HLWguZC5hLWguby5iLVp0KG4uZFtoLnBdKSxkPyhkPSExLG4ucFtlLnBdPWIuTWF0aC5taW4oTSxXKSk6bi5wW2UucF09Yi5NYXRoLm1pbihyLGIuTWF0aC5taW4oTSxXKSkpOihyPVp0KG4ucFtlLnBdKSxNPVp0KG4ucFtrLnBdKStadChuLmRbdy5wXSkrdy5vLmIrdy5kLmErRytoLmQuZC1adChuLmRbaC5wXSksZD8oZD0hMSxuLnBbZS5wXT1iLk1hdGgubWF4KE0sVykpOm4ucFtlLnBdPWIuTWF0aC5tYXgocixiLk1hdGgubWF4KE0sVykpKSk6KEc9WnQodmUoSyh0LmEsKHhlKCksQncpKSkpLHE9SmVlKHQsbi5qW2UucF0pLF89SmVlKHQsbi5qW2sucF0pLG4ubz09VjE/KEI9WnQobi5wW2UucF0pK1p0KG4uZFtoLnBdKStoLm8uYitoLmQuYStHLShadChuLnBbay5wXSkrWnQobi5kW3cucF0pLXcuZC5kKSxCUXQocSxfLEIpKTooQj1adChuLnBbZS5wXSkrWnQobi5kW2gucF0pLWguZC5kLVp0KG4ucFtrLnBdKS1adChuLmRbdy5wXSktdy5vLmItdy5kLmEtRyxCUXQocSxfLEIpKSkpOlc9dC5lLmJnKFcsZSxoKSxoPW4uYVtoLnBdO3doaWxlKGghPWUpO2NLZSh0LmUsZSl9fWZ1bmN0aW9uIGg1bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWixidCxNdCxTdCxqdCxRdCxjZSxfZSxXZSxRZSxSbix6bixocjtmb3IoU3Q9ZSxNdD1uZXcgSHYsanQ9bmV3IEh2LF89VXYoU3QsZDh0KSxyPW5ldyBTWHQodCxuLE10LGp0KSxZMG4oci5hLHIuYixyLmMsci5kLF8pLHc9KF9lPU10LmksX2V8fChNdC5pPW5ldyBLMyhNdCxNdC5jKSkpLFFlPXcuS2MoKTtRZS5PYigpOylmb3IoV2U9dShRZS5QYigpLDIwMikscz11KFBpKE10LFdlKSwyMSksVz1zLktjKCk7Vy5PYigpOylpZihHPVcuUGIoKSxRdD11KGU0KHQuZCxHKSwyMDIpLFF0KWQ9KCFXZS5lJiYoV2UuZT1uZXcgRW4odXMsV2UsMTAsOSkpLFdlLmUpLE9yKGQsUXQpO2Vsc2UgdGhyb3cgaD1PMChTdCxDZCksQj1DZGUrRytTZGUraCxxPUIrSDcsbnQobmV3IG9kKHEpKTtmb3Ioaz0oY2U9anQuaSxjZXx8KGp0Lmk9bmV3IEszKGp0LGp0LmMpKSksem49ay5LYygpO3puLk9iKCk7KWZvcihSbj11KHpuLlBiKCksMjAyKSxvPXUoUGkoanQsUm4pLDIxKSxidD1vLktjKCk7YnQuT2IoKTspaWYoWj1idC5QYigpLFF0PXUoZTQodC5kLFopLDIwMiksUXQpTT0oIVJuLmcmJihSbi5nPW5ldyBFbih1cyxSbiw5LDEwKSksUm4uZyksT3IoTSxRdCk7ZWxzZSB0aHJvdyBoPU8wKFN0LENkKSxCPUNkZStaK1NkZStoLHE9QitINyxudChuZXcgb2QocSkpOyFuLmImJihuLmI9bmV3IEVuKHZyLG4sNCw3KSksbi5iLmkhPTAmJighbi5jJiYobi5jPW5ldyBFbih2cixuLDUsOCkpLG4uYy5pIT0wKSYmKCFuLmImJihuLmI9bmV3IEVuKHZyLG4sNCw3KSksbi5iLmk8PTEmJighbi5jJiYobi5jPW5ldyBFbih2cixuLDUsOCkpLG4uYy5pPD0xKSkmJighbi5hJiYobi5hPW5ldyBoZSh1cyxuLDYsNikpLG4uYSkuaT09MSYmKGhyPXUoQXQoKCFuLmEmJihuLmE9bmV3IGhlKHVzLG4sNiw2KSksbi5hKSwwKSwyMDIpLCFvc3QoaHIpJiYhY3N0KGhyKSYmKFokKGhyLHUoQXQoKCFuLmImJihuLmI9bmV3IEVuKHZyLG4sNCw3KSksbi5iKSwwKSw4MikpLEokKGhyLHUoQXQoKCFuLmMmJihuLmM9bmV3IEVuKHZyLG4sNSw4KSksbi5jKSwwKSw4MikpKSl9ZnVuY3Rpb24gZjVuKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxfLE0sQixxLEcsVyxaLGJ0LE10LFN0LGp0LFF0LGNlLF9lLFdlLFFlLFJuO2ZvcihTdD10LmEsanQ9MCxRdD1TdC5sZW5ndGg7anQ8UXQ7KytqdCl7Zm9yKE10PVN0W2p0XSxrPVRpLF89VGksRz1uZXcgUyhNdC5lKTtHLmE8Ry5jLmMubGVuZ3RoOylCPXUoUShHKSwxMCksaD1CLmM/R28oQi5jLmEsQiwwKTotMSxoPjA/KE09dShQZShCLmMuYSxoLTEpLDEwKSxXZT1VMyh0LmIsQixNKSxaPUIubi5iLUIuZC5kLShNLm4uYitNLm8uYitNLmQuYStXZSkpOlo9Qi5uLmItQi5kLmQsaz1iLk1hdGgubWluKFosayksaDxCLmMuYS5jLmxlbmd0aC0xPyhNPXUoUGUoQi5jLmEsaCsxKSwxMCksV2U9VTModC5iLEIsTSksYnQ9TS5uLmItTS5kLmQtKEIubi5iK0Iuby5iK0IuZC5hK1dlKSk6YnQ9MipCLm4uYixfPWIuTWF0aC5taW4oYnQsXyk7Zm9yKHc9VGksbz0hMSxzPXUoUGUoTXQuZSwwKSwxMCksUm49bmV3IFMocy5qKTtSbi5hPFJuLmMuYy5sZW5ndGg7KWZvcihRZT11KFEoUm4pLDExKSxXPXMubi5iK1FlLm4uYitRZS5hLmIscj1uZXcgUyhRZS5lKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoUShyKSwxNyksY2U9bi5jLGU9Y2UuaS5uLmIrY2Uubi5iK2NlLmEuYi1XLGIuTWF0aC5hYnMoZSk8Yi5NYXRoLmFicyh3KSYmYi5NYXRoLmFicyhlKTwoZTwwP2s6XykmJih3PWUsbz0hMCk7Zm9yKGQ9dShQZShNdC5lLE10LmUuYy5sZW5ndGgtMSksMTApLF9lPW5ldyBTKGQuaik7X2UuYTxfZS5jLmMubGVuZ3RoOylmb3IoY2U9dShRKF9lKSwxMSksVz1kLm4uYitjZS5uLmIrY2UuYS5iLHI9bmV3IFMoY2UuZyk7ci5hPHIuYy5jLmxlbmd0aDspbj11KFEociksMTcpLFFlPW4uZCxlPVFlLmkubi5iK1FlLm4uYitRZS5hLmItVyxiLk1hdGguYWJzKGUpPGIuTWF0aC5hYnModykmJmIuTWF0aC5hYnMoZSk8KGU8MD9rOl8pJiYodz1lLG89ITApO2lmKG8mJnchPTApZm9yKHE9bmV3IFMoTXQuZSk7cS5hPHEuYy5jLmxlbmd0aDspQj11KFEocSksMTApLEIubi5iKz13fX1mdW5jdGlvbiBMaGUodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFo7aWYoTWwodC5hLGUpKXtpZihTMCh1KHRyKHQuYSxlKSw1MyksbikpcmV0dXJuIDF9ZWxzZSBBaSh0LmEsZSxuZXcgUXMpO2lmKE1sKHQuYSxuKSl7aWYoUzAodSh0cih0LmEsbiksNTMpLGUpKXJldHVybi0xfWVsc2UgQWkodC5hLG4sbmV3IFFzKTtpZihNbCh0LmUsZSkpe2lmKFMwKHUodHIodC5lLGUpLDUzKSxuKSlyZXR1cm4tMX1lbHNlIEFpKHQuZSxlLG5ldyBRcyk7aWYoTWwodC5lLG4pKXtpZihTMCh1KHRyKHQuYSxuKSw1MyksZSkpcmV0dXJuIDF9ZWxzZSBBaSh0LmUsbixuZXcgUXMpO2lmKHQuYz09KGowKCksZ2h0KXx8IWVhKGUsKGFlKCksTGMpKXx8IWVhKG4sKGFlKCksTGMpKSl7aWYodz11KFQydChxWnQoeGl0KFdpKG5ldyBrbihudWxsLG5ldyBUbihlLmosMTYpKSxuZXcgREwpKSxuZXcgREYpKSwxMSksXz11KFQydChxWnQoeGl0KFdpKG5ldyBrbihudWxsLG5ldyBUbihuLmosMTYpKSxuZXcgR1gpKSxuZXcgVVgpKSwxMSksdyYmXyl7aWYoZD13Lmksaz1fLmksZCYmZD09ayl7Zm9yKEI9bmV3IFMoZC5qKTtCLmE8Qi5jLmMubGVuZ3RoOyl7aWYoTT11KFEoQiksMTEpLE09PXcpcmV0dXJuIG03KHQsbixlKSwtMTtpZihNPT1fKXJldHVybiBtNyh0LGUsbiksMX1yZXR1cm4gbXUoQ3N0KHQsZSksQ3N0KHQsbikpfWZvcihHPXQuZCxXPTAsWj1HLmxlbmd0aDtXPFo7KytXKXtpZihxPUdbV10scT09ZClyZXR1cm4gbTcodCxuLGUpLC0xO2lmKHE9PWspcmV0dXJuIG03KHQsZSxuKSwxfX1pZighZWEoZSwoYWUoKSxMYykpfHwhZWEobixMYykpcmV0dXJuIHM9Q3N0KHQsZSksaD1Dc3QodCxuKSxzPmg/bTcodCxlLG4pOm03KHQsbixlKSxzPGg/LTE6cz5oPzE6MH1yZXR1cm4gcj11KEsoZSwoYWUoKSxMYykpLDE5KS5hLG89dShLKG4sTGMpLDE5KS5hLHI+bz9tNyh0LGUsbik6bTcodCxuLGUpLHI8bz8tMTpyPm8/MTowfWZ1bmN0aW9uIHg2dCh0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWixidCxNdDtpZihCZShGZSh6ZShlLChkaSgpLCRHKSkpKSlyZXR1cm4gcG4oKSxwbigpLHVvO2lmKGs9KCFlLmEmJihlLmE9bmV3IGhlKGRzLGUsMTAsMTEpKSxlLmEpLmkhPTAsTT1aZ24oZSksXz0hTS5kYygpLGt8fF8pe2lmKHM9dSh6ZShlLEVFKSwxNDkpLCFzKXRocm93IG50KG5ldyBCMygiUmVzb2x2ZWQgYWxnb3JpdGhtIGlzIG5vdCBzZXQ7IGFwcGx5IGEgTGF5b3V0QWxnb3JpdGhtUmVzb2x2ZXIgYmVmb3JlIGNvbXB1dGluZyBsYXlvdXQuIikpO2lmKE10PVZidChzLChwNygpLEpHKSksTmllKGUpLCFrJiZfJiYhTXQpcmV0dXJuIHBuKCkscG4oKSx1bztpZih3PW5ldyBsZSxHdCh6ZShlLGk1KSk9PT1HdCgoJDAoKSxucCkpJiYoVmJ0KHMsUUcpfHxWYnQocyxYRykpKWZvcihxPWJ1ZSh0LGUpLEc9bmV3IGNzLEthKEcsKCFlLmEmJihlLmE9bmV3IGhlKGRzLGUsMTAsMTEpKSxlLmEpKTtHLmIhPTA7KUI9dShHLmI9PTA/bnVsbDooWm4oRy5iIT0wKSxmaChHLEcuYS5hKSksMzMpLE5pZShCKSxidD1HdCh6ZShCLGk1KSk9PT1HdChZUyksYnR8fHMyKEIsR1MpJiYhaW10KHMsemUoQixFRSkpPyhkPXg2dCh0LEIsbixyKSxScyh3LGQpLEVvKEIsaTUsWVMpLE91ZShCKSk6S2EoRywoIUIuYSYmKEIuYT1uZXcgaGUoZHMsQiwxMCwxMSkpLEIuYSkpO2Vsc2UgZm9yKHE9KCFlLmEmJihlLmE9bmV3IGhlKGRzLGUsMTAsMTEpKSxlLmEpLmksaD1uZXcgbnIoKCFlLmEmJihlLmE9bmV3IGhlKGRzLGUsMTAsMTEpKSxlLmEpKTtoLmUhPWguaS5nYygpOylvPXUoZHIoaCksMzMpLGQ9eDZ0KHQsbyxuLHIpLFJzKHcsZCksT3VlKG8pO2ZvcihaPW5ldyBTKHcpO1ouYTxaLmMuYy5sZW5ndGg7KVc9dShRKFopLDc5KSxFbyhXLCRHLChGbigpLCEwKSk7cmV0dXJuIFNobihlLHMsemMocixxKSksVXduKHcpLF8mJk10P006KHBuKCkscG4oKSx1byl9ZWxzZSByZXR1cm4gcG4oKSxwbigpLHVvfWZ1bmN0aW9uIFRJKHQsZSxuLHIscyxvLGgsZCx3KXt2YXIgayxfLE0sQixxLEcsVztzd2l0Y2gocT1uLF89bmV3IEgwKHcpLEMwKF8sKEduKCksSXMpKSxlZShfLChhZSgpLEs5dCksaCksZWUoXywoeGUoKSx3cyksKHZhKCksS2MpKSxXPVp0KHZlKHQuV2UoenkpKSksZWUoXyx6eSxXKSxNPW5ldyBOYyx0YyhNLF8pLGUhPVUxJiZlIT1rYnx8KHI+PTA/cT1aNihkKTpxPUhEKFo2KGQpKSx0LlllKHBFLHEpKSxrPW5ldyBEYSxCPSExLHQuWGUoUHcpPyhPMnQoayx1KHQuV2UoUHcpLDgpKSxCPSEwKTpqWGUoayxoLmEvMixoLmIvMikscS5nKXtjYXNlIDQ6ZWUoXyxkdSwocGgoKSxnYikpLGVlKF8sSFYsKGgyKCksRzQpKSxfLm8uYj1oLmIsVzwwJiYoXy5vLmE9LVcpLFVzKE0sKGJlKCksSG4pKSxCfHwoay5hPWguYSksay5hLT1oLmE7YnJlYWs7Y2FzZSAyOmVlKF8sZHUsKHBoKCksRnkpKSxlZShfLEhWLChoMigpLG9FKSksXy5vLmI9aC5iLFc8MCYmKF8uby5hPS1XKSxVcyhNLChiZSgpLEJuKSksQnx8KGsuYT0wKTticmVhaztjYXNlIDE6ZWUoXyxQMiwoQjAoKSxXNCkpLF8uby5hPWguYSxXPDAmJihfLm8uYj0tVyksVXMoTSwoYmUoKSx5cikpLEJ8fChrLmI9aC5iKSxrLmItPWguYjticmVhaztjYXNlIDM6ZWUoXyxQMiwoQjAoKSxTeCkpLF8uby5hPWguYSxXPDAmJihfLm8uYj0tVyksVXMoTSwoYmUoKSxPbikpLEJ8fChrLmI9MCl9aWYoTzJ0KE0ubixrKSxlZShfLFB3LGspLGU9PVUyfHxlPT1oMHx8ZT09S2Mpe2lmKEc9MCxlPT1VMiYmdC5YZShRZykpc3dpdGNoKHEuZyl7Y2FzZSAxOmNhc2UgMjpHPXUodC5XZShRZyksMTkpLmE7YnJlYWs7Y2FzZSAzOmNhc2UgNDpHPS11KHQuV2UoUWcpLDE5KS5hfWVsc2Ugc3dpdGNoKHEuZyl7Y2FzZSA0OmNhc2UgMjpHPW8uYixlPT1oMCYmKEcvPXMuYik7YnJlYWs7Y2FzZSAxOmNhc2UgMzpHPW8uYSxlPT1oMCYmKEcvPXMuYSl9ZWUoXyxJdyxHKX1yZXR1cm4gZWUoXyxnYyxxKSxffWZ1bmN0aW9uIGQ1bih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWixidCxNdCxTdCxqdCxRdCxjZSxfZSxXZSxRZTtpZihuPVp0KHZlKEsodC5hLmosKHhlKCksUFR0KSkpKSxuPC0xfHwhdC5hLml8fEQ2KHUoSyh0LmEubyx3cyksOTgpKXx8cmModC5hLm8sKGJlKCksSG4pKS5nYygpPDImJnJjKHQuYS5vLEJuKS5nYygpPDIpcmV0dXJuITA7aWYodC5hLmMuUmYoKSlyZXR1cm4hMTtmb3IoUXQ9MCxqdD0wLFN0PW5ldyBsZSx3PXQuYS5lLGs9MCxfPXcubGVuZ3RoO2s8XzsrK2spe2ZvcihkPXdba10sQj1kLHE9MCxXPUIubGVuZ3RoO3E8VzsrK3Epe2lmKE09QltxXSxNLms9PShHbigpLFVjKSl7U3QuY1tTdC5jLmxlbmd0aF09TTtjb250aW51ZX1mb3Iocj10LmJbTS5jLnBdW00ucF0sTS5rPT1Jcz8oci5iPTEsdShLKE0sKGFlKCksSWkpKSwxMSkuaj09KGJlKCksSG4pJiYoanQrPXIuYSkpOihRZT1yYyhNLChiZSgpLEJuKSksUWUuZGMoKXx8IWVudChRZSxuZXcgb1EpP3IuYz0xOihzPXJjKE0sSG4pLChzLmRjKCl8fCFlbnQocyxuZXcgYVEpKSYmKFF0Kz1yLmEpKSksaD1uZXcgYXIobHIoJHMoTSkuYS5LYygpLG5ldyBIKSk7VnIoaCk7KW89dShJcihoKSwxNyksUXQrPXIuYyxqdCs9ci5iLFdlPW8uZC5pLHhtdCh0LHIsV2UpO2ZvcihidD1JMSh1dChvdCgkMSwxKSxNZSwyMCwwLFtyYyhNLChiZSgpLE9uKSkscmMoTSx5cildKSksX2U9bmV3IGFyKG5ldyBwMnQoYnQuYS5sZW5ndGgsYnQuYSkpO1ZyKF9lKTspY2U9dShJcihfZSksMTEpLE10PXUoSyhjZSwoYWUoKSxzbCkpLDEwKSxNdCYmKFF0Kz1yLmMsanQrPXIuYix4bXQodCxyLE10KSl9Zm9yKEc9bmV3IFMoU3QpO0cuYTxHLmMuYy5sZW5ndGg7KWZvcihNPXUoUShHKSwxMCkscj10LmJbTS5jLnBdW00ucF0saD1uZXcgYXIobHIoJHMoTSkuYS5LYygpLG5ldyBIKSk7VnIoaCk7KW89dShJcihoKSwxNyksUXQrPXIuYyxqdCs9ci5iLFdlPW8uZC5pLHhtdCh0LHIsV2UpO1N0LmM9TnQoUW4sTWUsMSwwLDUsMSl9cmV0dXJuIGU9UXQranQsWj1lPT0wP2JzOihRdC1qdCkvZSxaPj1ufWZ1bmN0aW9uIGc1bigpe3JidCgpO2Z1bmN0aW9uIHQocil7dmFyIHM9dGhpczt0aGlzLmRpc3BhdGNoPWZ1bmN0aW9uKG8pe3ZhciBoPW8uZGF0YTtzd2l0Y2goaC5jbWQpe2Nhc2UiYWxnb3JpdGhtcyI6dmFyIGQ9aDN0KChwbigpLG5ldyBUKG5ldyBtMShDYi5iKSkpKTtyLnBvc3RNZXNzYWdlKHtpZDpoLmlkLGRhdGE6ZH0pO2JyZWFrO2Nhc2UiY2F0ZWdvcmllcyI6dmFyIHc9aDN0KChwbigpLG5ldyBUKG5ldyBtMShDYi5jKSkpKTtyLnBvc3RNZXNzYWdlKHtpZDpoLmlkLGRhdGE6d30pO2JyZWFrO2Nhc2Uib3B0aW9ucyI6dmFyIGs9aDN0KChwbigpLG5ldyBUKG5ldyBtMShDYi5kKSkpKTtyLnBvc3RNZXNzYWdlKHtpZDpoLmlkLGRhdGE6a30pO2JyZWFrO2Nhc2UicmVnaXN0ZXIiOngzbihoLmFsZ29yaXRobXMpLHIucG9zdE1lc3NhZ2Uoe2lkOmguaWR9KTticmVhaztjYXNlImxheW91dCI6ZXluKGguZ3JhcGgsaC5sYXlvdXRPcHRpb25zfHx7fSxoLm9wdGlvbnN8fHt9KSxyLnBvc3RNZXNzYWdlKHtpZDpoLmlkLGRhdGE6aC5ncmFwaH0pO2JyZWFrfX0sdGhpcy5zYXZlRGlzcGF0Y2g9ZnVuY3Rpb24obyl7dHJ5e3MuZGlzcGF0Y2gobyl9Y2F0Y2goaCl7ci5wb3N0TWVzc2FnZSh7aWQ6by5kYXRhLmlkLGVycm9yOmh9KX19fWZ1bmN0aW9uIGUocil7dmFyIHM9dGhpczt0aGlzLmRpc3BhdGNoZXI9bmV3IHQoe3Bvc3RNZXNzYWdlOmZ1bmN0aW9uKG8pe3Mub25tZXNzYWdlKHtkYXRhOm99KX19KSx0aGlzLnBvc3RNZXNzYWdlPWZ1bmN0aW9uKG8pe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtzLmRpc3BhdGNoZXIuc2F2ZURpc3BhdGNoKHtkYXRhOm99KX0sMCl9fWlmKHR5cGVvZiBkb2N1bWVudD09PXZvdCYmdHlwZW9mIHNlbGYhPT12b3Qpe3ZhciBuPW5ldyB0KHNlbGYpO3NlbGYub25tZXNzYWdlPW4uc2F2ZURpc3BhdGNofWVsc2UgdHlwZW9mIHAhPT12b3QmJnAuZXhwb3J0cyYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxwLmV4cG9ydHM9e2RlZmF1bHQ6ZSxXb3JrZXI6ZX0pfWZ1bmN0aW9uIHA1bih0KXt0Lk58fCh0Lk49ITAsdC5iPWhjKHQsMCksZnModC5iLDApLGZzKHQuYiwxKSxmcyh0LmIsMiksdC5iYj1oYyh0LDEpLGZzKHQuYmIsMCksZnModC5iYiwxKSx0LmZiPWhjKHQsMiksZnModC5mYiwzKSxmcyh0LmZiLDQpLEdpKHQuZmIsNSksdC5xYj1oYyh0LDMpLGZzKHQucWIsMCksR2kodC5xYiwxKSxHaSh0LnFiLDIpLGZzKHQucWIsMyksZnModC5xYiw0KSxHaSh0LnFiLDUpLGZzKHQucWIsNiksdC5hPWhpKHQsNCksdC5jPWhpKHQsNSksdC5kPWhpKHQsNiksdC5lPWhpKHQsNyksdC5mPWhpKHQsOCksdC5nPWhpKHQsOSksdC5pPWhpKHQsMTApLHQuaj1oaSh0LDExKSx0Lms9aGkodCwxMiksdC5uPWhpKHQsMTMpLHQubz1oaSh0LDE0KSx0LnA9aGkodCwxNSksdC5xPWhpKHQsMTYpLHQucz1oaSh0LDE3KSx0LnI9aGkodCwxOCksdC50PWhpKHQsMTkpLHQudT1oaSh0LDIwKSx0LnY9aGkodCwyMSksdC53PWhpKHQsMjIpLHQuQj1oaSh0LDIzKSx0LkE9aGkodCwyNCksdC5DPWhpKHQsMjUpLHQuRD1oaSh0LDI2KSx0LkY9aGkodCwyNyksdC5HPWhpKHQsMjgpLHQuSD1oaSh0LDI5KSx0Lko9aGkodCwzMCksdC5JPWhpKHQsMzEpLHQuSz1oaSh0LDMyKSx0Lk09aGkodCwzMyksdC5MPWhpKHQsMzQpLHQuUD1oaSh0LDM1KSx0LlE9aGkodCwzNiksdC5SPWhpKHQsMzcpLHQuUz1oaSh0LDM4KSx0LlQ9aGkodCwzOSksdC5VPWhpKHQsNDApLHQuVj1oaSh0LDQxKSx0Llg9aGkodCw0MiksdC5XPWhpKHQsNDMpLHQuWT1oaSh0LDQ0KSx0Llo9aGkodCw0NSksdC4kPWhpKHQsNDYpLHQuXz1oaSh0LDQ3KSx0LmFiPWhpKHQsNDgpLHQuY2I9aGkodCw0OSksdC5kYj1oaSh0LDUwKSx0LmViPWhpKHQsNTEpLHQuZ2I9aGkodCw1MiksdC5oYj1oaSh0LDUzKSx0LmliPWhpKHQsNTQpLHQuamI9aGkodCw1NSksdC5rYj1oaSh0LDU2KSx0LmxiPWhpKHQsNTcpLHQubWI9aGkodCw1OCksdC5uYj1oaSh0LDU5KSx0Lm9iPWhpKHQsNjApLHQucGI9aGkodCw2MSkpfWZ1bmN0aW9uIGI1bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWixidCxNdCxTdCxqdDtpZihNdD0wLGUuZi5hPT0wKWZvcihaPW5ldyBTKHQpO1ouYTxaLmMuYy5sZW5ndGg7KUc9dShRKFopLDEwKSxNdD1iLk1hdGgubWF4KE10LEcubi5hK0cuby5hK0cuZC5jKTtlbHNlIE10PWUuZi5hLWUuYy5hO2ZvcihNdC09ZS5jLmEsVz1uZXcgUyh0KTtXLmE8Vy5jLmMubGVuZ3RoOyl7c3dpdGNoKEc9dShRKFcpLDEwKSxBVChHLm4sTXQtRy5vLmEpLEN2dChHLmYpLHlzZShHKSwoRy5xP0cucToocG4oKSxwbigpLGEwKSkuX2IoKHhlKCksSHkpKSYmQVQodShLKEcsSHkpLDgpLE10LUcuby5hKSx1KEsoRyxNZCksMjQ4KS5nKXtjYXNlIDE6ZWUoRyxNZCwoUWQoKSx6TykpO2JyZWFrO2Nhc2UgMjplZShHLE1kLChRZCgpLCRPKSl9Zm9yKGJ0PUcubyxqdD1uZXcgUyhHLmopO2p0LmE8anQuYy5jLmxlbmd0aDspe2ZvcihTdD11KFEoanQpLDExKSxBVChTdC5uLGJ0LmEtU3Quby5hKSxBVChTdC5hLFN0Lm8uYSksVXMoU3QsZ25lKFN0LmopKSxoPXUoSyhTdCxRZyksMTkpLGgmJmVlKFN0LFFnLGRlKC1oLmEpKSxvPW5ldyBTKFN0LmcpO28uYTxvLmMuYy5sZW5ndGg7KXtmb3Iocz11KFEobyksMTcpLHI9c2kocy5hLDApO3IuYiE9ci5kLmM7KW49dShpaShyKSw4KSxuLmE9TXQtbi5hO2lmKGs9dShLKHMsT28pLDc0KSxrKWZvcih3PXNpKGssMCk7dy5iIT13LmQuYzspZD11KGlpKHcpLDgpLGQuYT1NdC1kLmE7Zm9yKEI9bmV3IFMocy5iKTtCLmE8Qi5jLmMubGVuZ3RoOylfPXUoUShCKSw3MCksQVQoXy5uLE10LV8uby5hKX1mb3IocT1uZXcgUyhTdC5mKTtxLmE8cS5jLmMubGVuZ3RoOylfPXUoUShxKSw3MCksQVQoXy5uLFN0Lm8uYS1fLm8uYSl9Zm9yKEcuaz09KEduKCksSXMpJiYoZWUoRywoYWUoKSxnYyksZ25lKHUoSyhHLGdjKSw2MSkpKSxrMG4oRykpLE09bmV3IFMoRy5iKTtNLmE8TS5jLmMubGVuZ3RoOylfPXUoUShNKSw3MCkseXNlKF8pLEFUKF8ubixidC5hLV8uby5hKX19ZnVuY3Rpb24gdjVuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxfLE0sQixxLEcsVyxaLGJ0LE10LFN0LGp0O2lmKE10PTAsZS5mLmI9PTApZm9yKFo9bmV3IFModCk7Wi5hPFouYy5jLmxlbmd0aDspRz11KFEoWiksMTApLE10PWIuTWF0aC5tYXgoTXQsRy5uLmIrRy5vLmIrRy5kLmEpO2Vsc2UgTXQ9ZS5mLmItZS5jLmI7Zm9yKE10LT1lLmMuYixXPW5ldyBTKHQpO1cuYTxXLmMuYy5sZW5ndGg7KXtzd2l0Y2goRz11KFEoVyksMTApLFNUKEcubixNdC1HLm8uYiksU3Z0KEcuZikseHNlKEcpLChHLnE/Ry5xOihwbigpLHBuKCksYTApKS5fYigoeGUoKSxIeSkpJiZTVCh1KEsoRyxIeSksOCksTXQtRy5vLmIpLHUoSyhHLE1kKSwyNDgpLmcpe2Nhc2UgMzplZShHLE1kLChRZCgpLE5HKSk7YnJlYWs7Y2FzZSA0OmVlKEcsTWQsKFFkKCksRkcpKX1mb3IoYnQ9Ry5vLGp0PW5ldyBTKEcuaik7anQuYTxqdC5jLmMubGVuZ3RoOyl7Zm9yKFN0PXUoUShqdCksMTEpLFNUKFN0Lm4sYnQuYi1TdC5vLmIpLFNUKFN0LmEsU3Quby5iKSxVcyhTdCxwbmUoU3QuaikpLGg9dShLKFN0LFFnKSwxOSksaCYmZWUoU3QsUWcsZGUoLWguYSkpLG89bmV3IFMoU3QuZyk7by5hPG8uYy5jLmxlbmd0aDspe2ZvcihzPXUoUShvKSwxNykscj1zaShzLmEsMCk7ci5iIT1yLmQuYzspbj11KGlpKHIpLDgpLG4uYj1NdC1uLmI7aWYoaz11KEsocyxPbyksNzQpLGspZm9yKHc9c2koaywwKTt3LmIhPXcuZC5jOylkPXUoaWkodyksOCksZC5iPU10LWQuYjtmb3IoQj1uZXcgUyhzLmIpO0IuYTxCLmMuYy5sZW5ndGg7KV89dShRKEIpLDcwKSxTVChfLm4sTXQtXy5vLmIpfWZvcihxPW5ldyBTKFN0LmYpO3EuYTxxLmMuYy5sZW5ndGg7KV89dShRKHEpLDcwKSxTVChfLm4sU3Quby5iLV8uby5iKX1mb3IoRy5rPT0oR24oKSxJcykmJihlZShHLChhZSgpLGdjKSxwbmUodShLKEcsZ2MpLDYxKSkpLFZ1bihHKSksTT1uZXcgUyhHLmIpO00uYTxNLmMuYy5sZW5ndGg7KV89dShRKE0pLDcwKSx4c2UoXyksU1QoXy5uLGJ0LmItXy5vLmIpfX1mdW5jdGlvbiB3NW4odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLF8sTSxCLHE7Zm9yKE09ITEsaz10KzEsXz0oU24odCxlLmMubGVuZ3RoKSx1KGUuY1t0XSwyMDApKSxoPV8uYSxkPW51bGwsbz0wO288Xy5hLmMubGVuZ3RoO28rKylpZihzPShTbihvLGguYy5sZW5ndGgpLHUoaC5jW29dLDE4NykpLCFzLmMpe2lmKHMuYi5jLmxlbmd0aD09MCl7cWQoKSx0SShfLHMpLC0tbyxNPSEwO2NvbnRpbnVlfWlmKHMua3x8KGQmJkd6KGQpLGQ9bmV3IEl3dChkP2QuZStkLmQrcjowLF8uZixyKSxZRChzLGQuZStkLmQsXy5mKSx1ZShfLmQsZCksc3l0KGQscykscy5rPSEwKSx3PW51bGwsdz0ocT1udWxsLG88Xy5hLmMubGVuZ3RoLTE/cT11KFBlKF8uYSxvKzEpLDE4Nyk6azxlLmMubGVuZ3RoJiYoU24oayxlLmMubGVuZ3RoKSx1KGUuY1trXSwyMDApKS5hLmMubGVuZ3RoIT0wJiYocT11KFBlKChTbihrLGUuYy5sZW5ndGgpLHUoZS5jW2tdLDIwMCkpLmEsMCksMTg3KSkscSksQj0hMSx3JiYoQj0hU2kody5qLF8pKSx3KXtpZih3LmIuYy5sZW5ndGg9PTApe3RJKF8sdyk7YnJlYWt9ZWxzZSBkRChzLG4tcy5zKSxHeihzLnEpLE09TXxFMG4oXyxzLHcsbixyKTtpZih3LmIuYy5sZW5ndGg9PTApZm9yKHRJKChTbihrLGUuYy5sZW5ndGgpLHUoZS5jW2tdLDIwMCkpLHcpLHc9bnVsbDtlLmMubGVuZ3RoPmsmJihTbihrLGUuYy5sZW5ndGgpLHUoZS5jW2tdLDIwMCkpLmEuYy5sZW5ndGg9PTA7KUV1KGUsKFNuKGssZS5jLmxlbmd0aCksZS5jW2tdKSk7aWYoIXcpey0tbztjb250aW51ZX1pZihubW4oZSxfLHMsdyxCLG4sayxyKSl7TT0hMDtjb250aW51ZX1pZihCKXtpZih1eW4oZSxfLHMsdyxuLGsscikpe009ITA7Y29udGludWV9ZWxzZSBpZihSeXQoXyxzKSl7cy5jPSEwLE09ITA7Y29udGludWV9fWVsc2UgaWYoUnl0KF8scykpe3MuYz0hMCxNPSEwO2NvbnRpbnVlfWlmKE0pY29udGludWV9aWYoUnl0KF8scykpe3MuYz0hMCxNPSEwLHcmJih3Lms9ITEpO2NvbnRpbnVlfWVsc2UgR3oocy5xKX1yZXR1cm4gTX1mdW5jdGlvbiBJYXQodCxlLG4scixzLG8saCl7dmFyIGQsdyxrLF8sTSxCLHEsRyxXLFosYnQsTXQsU3QsanQsUXQsY2UsX2UsV2UsUWUsUm4sem4saHIseGksS3M7Zm9yKFc9MCxSbj0wLGs9bmV3IFModC5iKTtrLmE8ay5jLmMubGVuZ3RoOyl3PXUoUShrKSwxNTcpLHcuYyYmaWhlKHcuYyksVz1iLk1hdGgubWF4KFcsSHUodykpLFJuKz1IdSh3KSpMbCh3KTtmb3IoWj1Sbi90LmIuYy5sZW5ndGgsUWU9TjFuKHQuYixaKSxSbis9dC5iLmMubGVuZ3RoKlFlLFc9Yi5NYXRoLm1heChXLGIuTWF0aC5zcXJ0KFJuKmgpKStuLmIseGk9bi5iLEtzPW4uZCxxPTAsTT1uLmIrbi5jLFdlPW5ldyBjcyxhaShXZSxkZSgwKSksY2U9bmV3IGNzLF89bmV3IHhhKHQuYiwwKSxHPW51bGwsZD1uZXcgbGU7Xy5iPF8uZC5nYygpOyl3PShabihfLmI8Xy5kLmdjKCkpLHUoXy5kLlhiKF8uYz1fLmIrKyksMTU3KSksaHI9SHUodyksQj1MbCh3KSx4aStocj5XJiYobyYmKFhiKGNlLHEpLFhiKFdlLGRlKF8uYi0xKSksdWUodC5kLEcpLGQuYz1OdChRbixNZSwxLDAsNSwxKSkseGk9bi5iLEtzKz1xK2UscT0wLE09Yi5NYXRoLm1heChNLG4uYituLmMraHIpKSxkLmNbZC5jLmxlbmd0aF09dyxVaWUodyx4aSxLcyksTT1iLk1hdGgubWF4KE0seGkraHIrbi5jKSxxPWIuTWF0aC5tYXgocSxCKSx4aSs9aHIrZSxHPXc7aWYoUnModC5hLGQpLHVlKHQuZCx1KFBlKGQsZC5jLmxlbmd0aC0xKSwxNTcpKSxNPWIuTWF0aC5tYXgoTSxyKSx6bj1LcytxK24uYSx6bjxzJiYocSs9cy16bix6bj1zKSxvKWZvcih4aT1uLmIsXz1uZXcgeGEodC5iLDApLFhiKFdlLGRlKHQuYi5jLmxlbmd0aCkpLF9lPXNpKFdlLDApLE10PXUoaWkoX2UpLDE5KS5hLFhiKGNlLHEpLFF0PXNpKGNlLDApLGp0PTA7Xy5iPF8uZC5nYygpOylfLmI9PU10JiYoeGk9bi5iLGp0PVp0KHZlKGlpKFF0KSkpLE10PXUoaWkoX2UpLDE5KS5hKSx3PShabihfLmI8Xy5kLmdjKCkpLHUoXy5kLlhiKF8uYz1fLmIrKyksMTU3KSksQ2llKHcsanQpLF8uYj09TXQmJihidD1NLXhpLW4uYyxTdD1IdSh3KSxfaWUodyxidCksWXJlKHcsKGJ0LVN0KS8yLDApKSx4aSs9SHUodykrZTtyZXR1cm4gbmV3IFJlKE0sem4pfWZ1bmN0aW9uIG01bih0KXt2YXIgZSxuLHIscyxvO3N3aXRjaChlPXQuYyxvPW51bGwsZSl7Y2FzZSA2OnJldHVybiB0LlZsKCk7Y2FzZSAxMzpyZXR1cm4gdC5XbCgpO2Nhc2UgMjM6cmV0dXJuIHQuTmwoKTtjYXNlIDIyOnJldHVybiB0LlNsKCk7Y2FzZSAxODpyZXR1cm4gdC5QbCgpO2Nhc2UgODptaSh0KSxvPSh5aSgpLHdMdCk7YnJlYWs7Y2FzZSA5OnJldHVybiB0LnZsKCEwKTtjYXNlIDE5OnJldHVybiB0LndsKCk7Y2FzZSAxMDpzd2l0Y2godC5hKXtjYXNlIDEwMDpjYXNlIDY4OmNhc2UgMTE5OmNhc2UgODc6Y2FzZSAxMTU6Y2FzZSA4MzpyZXR1cm4gbz10LnVsKHQuYSksbWkodCksbztjYXNlIDEwMTpjYXNlIDEwMjpjYXNlIDExMDpjYXNlIDExNDpjYXNlIDExNjpjYXNlIDExNzpjYXNlIDExODpjYXNlIDEyMDpuPXQudGwoKSxuPFFhP289KHlpKCkseWkoKSxuZXcgR2QoMCxuKSk6bz1rWXQodDN0KG4pKTticmVhaztjYXNlIDk5OnJldHVybiB0LkZsKCk7Y2FzZSA2NzpyZXR1cm4gdC5BbCgpO2Nhc2UgMTA1OnJldHVybiB0LklsKCk7Y2FzZSA3MzpyZXR1cm4gdC5CbCgpO2Nhc2UgMTAzOnJldHVybiB0LkdsKCk7Y2FzZSA4ODpyZXR1cm4gdC5DbCgpO2Nhc2UgNDk6Y2FzZSA1MDpjYXNlIDUxOmNhc2UgNTI6Y2FzZSA1MzpjYXNlIDU0OmNhc2UgNTU6Y2FzZSA1NjpjYXNlIDU3OnJldHVybiB0LnhsKCk7Y2FzZSA4MDpjYXNlIDExMjppZihvPUo0dCh0LHQuYSksIW8pdGhyb3cgbnQobmV3IFJyKEdyKChGcigpLEpjdCkpKSk7YnJlYWs7ZGVmYXVsdDpvPXpLdCh0LmEpfW1pKHQpO2JyZWFrO2Nhc2UgMDppZih0LmE9PTkzfHx0LmE9PTEyM3x8dC5hPT0xMjUpdGhyb3cgbnQobmV3IFJyKEdyKChGcigpLGs4dCkpKSk7bz16S3QodC5hKSxyPXQuYSxtaSh0KSwociY2NDUxMik9PU9JJiZ0LmM9PTAmJih0LmEmNjQ1MTIpPT01NjMyMCYmKHM9TnQoRWgsd2QsMjUsMiwxNSwxKSxzWzBdPXImTXMsc1sxXT10LmEmTXMsbz0kbnQoa1l0KEloKHMsMCxzLmxlbmd0aCkpLDApLG1pKHQpKTticmVhaztkZWZhdWx0OnRocm93IG50KG5ldyBScihHcigoRnIoKSxrOHQpKSkpfXJldHVybiBvfWZ1bmN0aW9uIHk1bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWixidDtpZihyPW5ldyBsZSxzPVRpLG89VGksaD1UaSxuKWZvcihzPXQuZi5hLFc9bmV3IFMoZS5qKTtXLmE8Vy5jLmMubGVuZ3RoOylmb3IoRz11KFEoVyksMTEpLHc9bmV3IFMoRy5nKTt3LmE8dy5jLmMubGVuZ3RoOylkPXUoUSh3KSwxNyksZC5hLmIhPTAmJihfPXUoY250KGQuYSksOCksXy5hPHMmJihvPXMtXy5hLGg9VGksci5jPU50KFFuLE1lLDEsMCw1LDEpLHM9Xy5hKSxfLmE8PXMmJihyLmNbci5jLmxlbmd0aF09ZCxkLmEuYj4xJiYoaD1iLk1hdGgubWluKGgsYi5NYXRoLmFicyh1KGUxKGQuYSwxKSw4KS5iLV8uYikpKSkpO2Vsc2UgZm9yKFc9bmV3IFMoZS5qKTtXLmE8Vy5jLmMubGVuZ3RoOylmb3IoRz11KFEoVyksMTEpLHc9bmV3IFMoRy5lKTt3LmE8dy5jLmMubGVuZ3RoOylkPXUoUSh3KSwxNyksZC5hLmIhPTAmJihCPXUodmooZC5hKSw4KSxCLmE+cyYmKG89Qi5hLXMsaD1UaSxyLmM9TnQoUW4sTWUsMSwwLDUsMSkscz1CLmEpLEIuYT49cyYmKHIuY1tyLmMubGVuZ3RoXT1kLGQuYS5iPjEmJihoPWIuTWF0aC5taW4oaCxiLk1hdGguYWJzKHUoZTEoZC5hLGQuYS5iLTIpLDgpLmItQi5iKSkpKSk7aWYoci5jLmxlbmd0aCE9MCYmbz5lLm8uYS8yJiZoPmUuby5iLzIpe2ZvcihxPW5ldyBOYyx0YyhxLGUpLFVzKHEsKGJlKCksT24pKSxxLm4uYT1lLm8uYS8yLGJ0PW5ldyBOYyx0YyhidCxlKSxVcyhidCx5ciksYnQubi5hPWUuby5hLzIsYnQubi5iPWUuby5iLHc9bmV3IFMocik7dy5hPHcuYy5jLmxlbmd0aDspZD11KFEodyksMTcpLG4/KGs9dShUbnQoZC5hKSw4KSxaPWQuYS5iPT0wP1MxKGQuZCk6dShjbnQoZC5hKSw4KSxaLmI+PWsuYj9CYShkLGJ0KTpCYShkLHEpKTooaz11KGZ0bihkLmEpLDgpLFo9ZC5hLmI9PTA/UzEoZC5jKTp1KHZqKGQuYSksOCksWi5iPj1rLmI/cGEoZCxidCk6cGEoZCxxKSksTT11KEsoZCwoeGUoKSxPbykpLDc0KSxNJiZyeShNLGssITApO2Uubi5hPXMtZS5vLmEvMn19ZnVuY3Rpb24geDVuKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxfLE0sQixxLEcsVyxaLGJ0LE10LFN0LGp0LFF0LGNlLF9lLFdlLFFlLFJuLHpuLGhyLHhpLEtzLGVoLFpoO2lmKFJuPW51bGwsaHI9ZSx6bj1PWnQodCxMWnQobiksaHIpLHFfKHpuLE8wKGhyLENkKSkseGk9dShlNCh0LmcsaXgoSTAoaHIsemN0KSkpLDMzKSxCPUkwKGhyLCJzb3VyY2VQb3J0Iikscj1udWxsLEImJihyPWl4KEIpKSxLcz11KGU0KHQuaixyKSwxMTgpLCF4aSl0aHJvdyBkPXM3KGhyKSxHPSJBbiBlZGdlIG11c3QgaGF2ZSBhIHNvdXJjZSBub2RlIChlZGdlIGlkOiAnIitkLFc9RytINyxudChuZXcgb2QoVykpO2lmKEtzJiYhZGQoXzEoS3MpLHhpKSl0aHJvdyB3PU8wKGhyLENkKSxaPSJUaGUgc291cmNlIHBvcnQgb2YgYW4gZWRnZSBtdXN0IGJlIGEgcG9ydCBvZiB0aGUgZWRnZSdzIHNvdXJjZSBub2RlIChlZGdlIGlkOiAnIit3LGJ0PVorSDcsbnQobmV3IG9kKGJ0KSk7aWYoV2U9KCF6bi5iJiYoem4uYj1uZXcgRW4odnIsem4sNCw3KSksem4uYiksbz1udWxsLEtzP289S3M6bz14aSxPcihXZSxvKSxlaD11KGU0KHQuZyxpeChJMChocix5OHQpKSksMzMpLHE9STAoaHIsInRhcmdldFBvcnQiKSxzPW51bGwscSYmKHM9aXgocSkpLFpoPXUoZTQodC5qLHMpLDExOCksIWVoKXRocm93IE09czcoaHIpLE10PSJBbiBlZGdlIG11c3QgaGF2ZSBhIHRhcmdldCBub2RlIChlZGdlIGlkOiAnIitNLFN0PU10K0g3LG50KG5ldyBvZChTdCkpO2lmKFpoJiYhZGQoXzEoWmgpLGVoKSl0aHJvdyBrPU8wKGhyLENkKSxqdD0iVGhlIHRhcmdldCBwb3J0IG9mIGFuIGVkZ2UgbXVzdCBiZSBhIHBvcnQgb2YgdGhlIGVkZ2UncyB0YXJnZXQgbm9kZSAoZWRnZSBpZDogJyIrayxRdD1qdCtINyxudChuZXcgb2QoUXQpKTtpZihRZT0oIXpuLmMmJih6bi5jPW5ldyBFbih2cix6biw1LDgpKSx6bi5jKSxoPW51bGwsWmg/aD1aaDpoPWVoLE9yKFFlLGgpLCghem4uYiYmKHpuLmI9bmV3IEVuKHZyLHpuLDQsNykpLHpuLmIpLmk9PTB8fCghem4uYyYmKHpuLmM9bmV3IEVuKHZyLHpuLDUsOCkpLHpuLmMpLmk9PTApdGhyb3cgXz1PMChocixDZCksY2U9X2RlK18sX2U9Y2UrSDcsbnQobmV3IG9kKF9lKSk7cmV0dXJuIEp6KGhyLHpuKSxoYm4oaHIsem4pLFJuPXlpdCh0LGhyLHpuKSxSbn1mdW5jdGlvbiBNaGUodCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFosYnQsTXQsU3QsanQsUXQsY2UsX2UsV2UsUWUsUm47cmV0dXJuIE09VG1uKHl1KHQsKGJlKCksVzEpKSxlKSxHPWY0KHl1KHQsTWYpLGUpLGp0PWY0KHl1KHQsWmwpLGUpLFdlPVV6KHl1KHQsVWgpLGUpLEI9VXooeXUodCx4aCksZSksTXQ9ZjQoeXUodCxEZiksZSksVz1mNCh5dSh0LG9sKSxlKSxjZT1mNCh5dSh0LEpsKSxlKSxRdD1mNCh5dSh0LGtoKSxlKSxRZT1Veih5dSh0LGd1KSxlKSxidD1mNCh5dSh0LEl1KSxlKSxTdD1mNCh5dSh0LGNsKSxlKSxfZT1mNCh5dSh0LER1KSxlKSxSbj1Veih5dSh0LE91KSxlKSxxPVV6KHl1KHQsWXUpLGUpLFo9ZjQoeXUodCxZYyksZSksbj1pNCh1dChvdChnYSwxKSxUbywyNSwxNSxbTXQuYSxXZS5hLGNlLmEsUm4uYV0pKSxyPWk0KHV0KG90KGdhLDEpLFRvLDI1LDE1LFtHLmEsTS5hLGp0LmEsWi5hXSkpLHM9YnQuYSxvPWk0KHV0KG90KGdhLDEpLFRvLDI1LDE1LFtXLmEsQi5hLFF0LmEscS5hXSkpLGs9aTQodXQob3QoZ2EsMSksVG8sMjUsMTUsW010LmIsRy5iLFcuYixTdC5iXSkpLHc9aTQodXQob3QoZ2EsMSksVG8sMjUsMTUsW1dlLmIsTS5iLEIuYixaLmJdKSksXz1RZS5iLGQ9aTQodXQob3QoZ2EsMSksVG8sMjUsMTUsW2NlLmIsanQuYixRdC5iLF9lLmJdKSksTmcoeXUodCxXMSksbitzLGsrXyksTmcoeXUodCxZYyksbitzLGsrXyksTmcoeXUodCxNZiksbitzLDApLE5nKHl1KHQsWmwpLG4rcyxrK18rdyksTmcoeXUodCxVaCksMCxrK18pLE5nKHl1KHQseGgpLG4rcytyLGsrXyksTmcoeXUodCxvbCksbitzK3IsMCksTmcoeXUodCxKbCksMCxrK18rdyksTmcoeXUodCxraCksbitzK3IsaytfK3cpLE5nKHl1KHQsZ3UpLDAsayksTmcoeXUodCxJdSksbiwwKSxOZyh5dSh0LER1KSwwLGsrXyt3KSxOZyh5dSh0LFl1KSxuK3MrciwwKSxoPW5ldyBEYSxoLmE9aTQodXQob3QoZ2EsMSksVG8sMjUsMTUsW24rcitzK28sUWUuYSxTdC5hLF9lLmFdKSksaC5iPWk0KHV0KG90KGdhLDEpLFRvLDI1LDE1LFtrK3crXytkLGJ0LmIsUm4uYixxLmJdKSksaH1mdW5jdGlvbiBrNW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFo7Zm9yKFc9bmV3IGxlLEI9bmV3IFModC5kLmIpO0IuYTxCLmMuYy5sZW5ndGg7KWZvcihNPXUoUShCKSwyOSksRz1uZXcgUyhNLmEpO0cuYTxHLmMuYy5sZW5ndGg7KXtmb3IocT11KFEoRyksMTApLHM9dSh0cih0LmYscSksNTcpLHc9bmV3IGFyKGxyKCRzKHEpLmEuS2MoKSxuZXcgSCkpO1ZyKHcpOylpZihoPXUoSXIodyksMTcpLHI9c2koaC5hLDApLGs9ITAsXz1udWxsLHIuYiE9ci5kLmMpe2ZvcihlPXUoaWkociksOCksbj1udWxsLGguYy5qPT0oYmUoKSxPbikmJihaPW5ldyB4QyhlLG5ldyBSZShlLmEscy5kLmQpLHMsaCksWi5mLmE9ITAsWi5hPWguYyxXLmNbVy5jLmxlbmd0aF09WiksaC5jLmo9PXlyJiYoWj1uZXcgeEMoZSxuZXcgUmUoZS5hLHMuZC5kK3MuZC5hKSxzLGgpLFouZi5kPSEwLFouYT1oLmMsVy5jW1cuYy5sZW5ndGhdPVopO3IuYiE9ci5kLmM7KW49dShpaShyKSw4KSxGbXQoZS5iLG4uYil8fChfPW5ldyB4QyhlLG4sbnVsbCxoKSxXLmNbVy5jLmxlbmd0aF09XyxrJiYoaz0hMSxuLmI8cy5kLmQ/Xy5mLmE9ITA6bi5iPnMuZC5kK3MuZC5hP18uZi5kPSEwOihfLmYuZD0hMCxfLmYuYT0hMCkpKSxyLmIhPXIuZC5jJiYoZT1uKTtfJiYobz11KHRyKHQuZixoLmQuaSksNTcpLGUuYjxvLmQuZD9fLmYuYT0hMDplLmI+by5kLmQrby5kLmE/Xy5mLmQ9ITA6KF8uZi5kPSEwLF8uZi5hPSEwKSl9Zm9yKGQ9bmV3IGFyKGxyKFVvKHEpLmEuS2MoKSxuZXcgSCkpO1ZyKGQpOyloPXUoSXIoZCksMTcpLGguYS5iIT0wJiYoZT11KHZqKGguYSksOCksaC5kLmo9PShiZSgpLE9uKSYmKFo9bmV3IHhDKGUsbmV3IFJlKGUuYSxzLmQuZCkscyxoKSxaLmYuYT0hMCxaLmE9aC5kLFcuY1tXLmMubGVuZ3RoXT1aKSxoLmQuaj09eXImJihaPW5ldyB4QyhlLG5ldyBSZShlLmEscy5kLmQrcy5kLmEpLHMsaCksWi5mLmQ9ITAsWi5hPWguZCxXLmNbVy5jLmxlbmd0aF09WikpfXJldHVybiBXfWZ1bmN0aW9uIEU1bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssXyxNO2lmKG1yKG4sIk5ldHdvcmsgc2ltcGxleCBub2RlIHBsYWNlbWVudCIsMSksdC5lPWUsdC5uPXUoSyhlLChhZSgpLFg0KSksMzA0KSwkeW4odCkseWRuKHQpLHlzKGVjKG5ldyBrbihudWxsLG5ldyBUbih0LmUuYiwxNikpLG5ldyBnUSksbmV3IEUkdCh0KSkseXMoV2koZWMoV2koZWMobmV3IGtuKG51bGwsbmV3IFRuKHQuZS5iLDE2KSksbmV3IFY5KSxuZXcgVFEpLG5ldyBfUSksbmV3IENRKSxuZXcgayR0KHQpKSxCZShGZShLKHQuZSwoeGUoKSxUUykpKSkmJihoPXpjKG4sMSksbXIoaCwiU3RyYWlnaHQgRWRnZXMgUHJlLVByb2Nlc3NpbmciLDEpLHM0bih0KSxvcihoKSksZWZuKHQuZiksbz11KEsoZSxTUyksMTkpLmEqdC5mLmEuYy5sZW5ndGgsbGF0KFhwdChRcHQoeG50KHQuZiksbyksITEpLHpjKG4sMSkpLHQuZC5hLmdjKCkhPTApe2ZvcihoPXpjKG4sMSksbXIoaCwiRmxleGlibGUgV2hlcmUgU3BhY2UgUHJvY2Vzc2luZyIsMSksZD11KE92KEhqKHh1KG5ldyBrbihudWxsLG5ldyBUbih0LmYuYSwxNikpLG5ldyBwUSksbmV3IGNRKSksMTkpLmEsdz11KE92KHFqKHh1KG5ldyBrbihudWxsLG5ldyBUbih0LmYuYSwxNikpLG5ldyBiUSksbmV3IHVRKSksMTkpLmEsaz13LWQsXz1JdihuZXcgS2IsdC5mKSxNPUl2KG5ldyBLYix0LmYpLHlmKGxmKHVmKGNmKGhmKG5ldyBTaCwyZTQpLGspLF8pLE0pKSx5cyhXaShXaShxbnQodC5pKSxuZXcgdlEpLG5ldyB3USksbmV3IHlYdChkLF8sayxNKSkscz10LmQuYS5lYygpLktjKCk7cy5PYigpOylyPXUocy5QYigpLDIxMyksci5nPTE7bGF0KFhwdChRcHQoeG50KHQuZiksbyksITEpLHpjKGgsMSkpLG9yKGgpfUJlKEZlKEsoZSxUUykpKSYmKGg9emMobiwxKSxtcihoLCJTdHJhaWdodCBFZGdlcyBQb3N0LVByb2Nlc3NpbmciLDEpLGxnbih0KSxvcihoKSksSDNuKHQpLHQuZT1udWxsLHQuZj1udWxsLHQuaT1udWxsLHQuYz1udWxsLG5sKHQuayksdC5qPW51bGwsdC5hPW51bGwsdC5vPW51bGwsdC5kLmEuJGIoKSxvcihuKX1mdW5jdGlvbiBUNW4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFosYnQsTXQsU3QsanQsUXQ7Zm9yKGQ9bmV3IFModC5hLmIpO2QuYTxkLmMuYy5sZW5ndGg7KWZvcihvPXUoUShkKSwyOSksU3Q9bmV3IFMoby5hKTtTdC5hPFN0LmMuYy5sZW5ndGg7KU10PXUoUShTdCksMTApLGUuZ1tNdC5wXT1NdCxlLmFbTXQucF09TXQsZS5kW010LnBdPTA7Zm9yKHc9dC5hLmIsZS5jPT0oZ2QoKSxaZykmJih3PV90KHcsMTUyKT9WNih1KHcsMTUyKSk6X3QodywxMzEpP3UodywxMzEpLmE6X3Qodyw1NCk/bmV3IG12KHcpOm5ldyBNbSh3KSksaD13LktjKCk7aC5PYigpOylmb3Iobz11KGguUGIoKSwyOSkscT0tMSxCPW8uYSxlLm89PShDMSgpLFYxKSYmKHE9VGksQj1fdChCLDE1Mik/VjYodShCLDE1MikpOl90KEIsMTMxKT91KEIsMTMxKS5hOl90KEIsNTQpP25ldyBtdihCKTpuZXcgTW0oQikpLFF0PUIuS2MoKTtRdC5PYigpOylpZihqdD11KFF0LlBiKCksMTApLE09bnVsbCxlLmM9PVpnP009dShQZSh0LmIuZixqdC5wKSwxNSk6TT11KFBlKHQuYi5iLGp0LnApLDE1KSxNLmdjKCk+MClpZihyPU0uZ2MoKSxrPUNzKGIuTWF0aC5mbG9vcigocisxKS8yKSktMSxzPUNzKGIuTWF0aC5jZWlsKChyKzEpLzIpKS0xLGUubz09VjEpZm9yKF89cztfPj1rO18tLSllLmFbanQucF09PWp0JiYoVz11KE0uWGIoXyksNDYpLEc9dShXLmEsMTApLCFTMChuLFcuYikmJnE+dC5iLmVbRy5wXSYmKGUuYVtHLnBdPWp0LGUuZ1tqdC5wXT1lLmdbRy5wXSxlLmFbanQucF09ZS5nW2p0LnBdLGUuZltlLmdbanQucF0ucF09KEZuKCksISEoQmUoZS5mW2UuZ1tqdC5wXS5wXSkmanQuaz09KEduKCksY2EpKSkscT10LmIuZVtHLnBdKSk7ZWxzZSBmb3IoXz1rO188PXM7XysrKWUuYVtqdC5wXT09anQmJihidD11KE0uWGIoXyksNDYpLFo9dShidC5hLDEwKSwhUzAobixidC5iKSYmcTx0LmIuZVtaLnBdJiYoZS5hW1oucF09anQsZS5nW2p0LnBdPWUuZ1taLnBdLGUuYVtqdC5wXT1lLmdbanQucF0sZS5mW2UuZ1tqdC5wXS5wXT0oRm4oKSwhIShCZShlLmZbZS5nW2p0LnBdLnBdKSZqdC5rPT0oR24oKSxjYSkpKSxxPXQuYi5lW1oucF0pKX1mdW5jdGlvbiBudSgpe251PVgsaEh0KCksRDRlPWxhLmEsdShBdChLdChsYS5hKSwwKSwxOCksTDRlPWxhLmYsdShBdChLdChsYS5mKSwwKSwxOCksdShBdChLdChsYS5mKSwxKSwzNCksTTRlPWxhLm4sdShBdChLdChsYS5uKSwwKSwzNCksdShBdChLdChsYS5uKSwxKSwzNCksdShBdChLdChsYS5uKSwyKSwzNCksdShBdChLdChsYS5uKSwzKSwzNCksUEF0PWxhLmcsdShBdChLdChsYS5nKSwwKSwxOCksdShBdChLdChsYS5nKSwxKSwzNCksQTRlPWxhLmMsdShBdChLdChsYS5jKSwwKSwxOCksdShBdChLdChsYS5jKSwxKSwxOCksRkF0PWxhLmksdShBdChLdChsYS5pKSwwKSwxOCksdShBdChLdChsYS5pKSwxKSwxOCksdShBdChLdChsYS5pKSwyKSwxOCksdShBdChLdChsYS5pKSwzKSwxOCksdShBdChLdChsYS5pKSw0KSwzNCksQkF0PWxhLmosdShBdChLdChsYS5qKSwwKSwxOCksTkF0PWxhLmQsdShBdChLdChsYS5kKSwwKSwxOCksdShBdChLdChsYS5kKSwxKSwxOCksdShBdChLdChsYS5kKSwyKSwxOCksdShBdChLdChsYS5kKSwzKSwxOCksdShBdChLdChsYS5kKSw0KSwzNCksdShBdChLdChsYS5kKSw1KSwzNCksdShBdChLdChsYS5kKSw2KSwzNCksdShBdChLdChsYS5kKSw3KSwzNCksUzRlPWxhLmIsdShBdChLdChsYS5iKSwwKSwzNCksdShBdChLdChsYS5iKSwxKSwzNCksWUc9bGEuZSx1KEF0KEt0KGxhLmUpLDApLDM0KSx1KEF0KEt0KGxhLmUpLDEpLDM0KSx1KEF0KEt0KGxhLmUpLDIpLDM0KSx1KEF0KEt0KGxhLmUpLDMpLDM0KSx1KEF0KEt0KGxhLmUpLDQpLDE4KSx1KEF0KEt0KGxhLmUpLDUpLDE4KSx1KEF0KEt0KGxhLmUpLDYpLDE4KSx1KEF0KEt0KGxhLmUpLDcpLDE4KSx1KEF0KEt0KGxhLmUpLDgpLDE4KSx1KEF0KEt0KGxhLmUpLDkpLDE4KSx1KEF0KEt0KGxhLmUpLDEwKSwzNCksX2I9bGEuayx1KEF0KEt0KGxhLmspLDApLDM0KSx1KEF0KEt0KGxhLmspLDEpLDM0KX1mdW5jdGlvbiBfNW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFosYnQsTXQsU3QsanQsUXQsY2UsX2UsV2UsUWUsUm4sem47Zm9yKFFlPW5ldyBjcyxjZT1uZXcgY3MsWj0tMSx3PW5ldyBTKHQpO3cuYTx3LmMuYy5sZW5ndGg7KXtmb3IoaD11KFEodyksMTI4KSxoLnM9Wi0tLF89MCxTdD0wLG89bmV3IFMoaC50KTtvLmE8by5jLmMubGVuZ3RoOylyPXUoUShvKSwyNjgpLFN0Kz1yLmM7Zm9yKHM9bmV3IFMoaC5pKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoUShzKSwyNjgpLF8rPXIuYztoLm49XyxoLnU9U3QsU3Q9PTA/a3MoY2UsaCxjZS5jLmIsY2UuYyk6Xz09MCYma3MoUWUsaCxRZS5jLmIsUWUuYyl9Zm9yKHpuPUUkKHQpLE09dC5jLmxlbmd0aCxXPU0rMSxidD1NLTEscT1uZXcgbGU7em4uYS5nYygpIT0wOyl7Zm9yKDtjZS5iIT0wOylRdD0oWm4oY2UuYiE9MCksdShmaChjZSxjZS5hLmEpLDEyOCkpLHpuLmEuQmMoUXQpIT1udWxsLFF0LnM9YnQtLSx3NXQoUXQsUWUsY2UpO2Zvcig7UWUuYiE9MDspX2U9KFpuKFFlLmIhPTApLHUoZmgoUWUsUWUuYS5hKSwxMjgpKSx6bi5hLkJjKF9lKSE9bnVsbCxfZS5zPVcrKyx3NXQoX2UsUWUsY2UpO2ZvcihHPU9hLGs9em4uYS5lYygpLktjKCk7ay5PYigpOyloPXUoay5QYigpLDEyOCksTXQ9aC51LWgubixNdD49RyYmKE10PkcmJihxLmM9TnQoUW4sTWUsMSwwLDUsMSksRz1NdCkscS5jW3EuYy5sZW5ndGhdPWgpO3EuYy5sZW5ndGghPTAmJihCPXUoUGUocSx6eihlLHEuYy5sZW5ndGgpKSwxMjgpLHpuLmEuQmMoQikhPW51bGwsQi5zPVcrKyx3NXQoQixRZSxjZSkscS5jPU50KFFuLE1lLDEsMCw1LDEpKX1mb3IoanQ9dC5jLmxlbmd0aCsxLGQ9bmV3IFModCk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KFEoZCksMTI4KSxoLnM8TSYmKGgucys9anQpO2ZvcihXZT1uZXcgUyh0KTtXZS5hPFdlLmMuYy5sZW5ndGg7KWZvcihfZT11KFEoV2UpLDEyOCksbj1uZXcgeGEoX2UudCwwKTtuLmI8bi5kLmdjKCk7KXI9KFpuKG4uYjxuLmQuZ2MoKSksdShuLmQuWGIobi5jPW4uYisrKSwyNjgpKSxSbj1yLmIsX2Uucz5Sbi5zJiYoRGwobiksRXUoUm4uaSxyKSxyLmM+MCYmKHIuYT1Sbix1ZShSbi50LHIpLHIuYj1fZSx1ZShfZS5pLHIpKSl9ZnVuY3Rpb24gazZ0KHQpe3ZhciBlLG4scixzLG87c3dpdGNoKGU9dC5jLGUpe2Nhc2UgMTE6cmV0dXJuIHQuTWwoKTtjYXNlIDEyOnJldHVybiB0Lk9sKCk7Y2FzZSAxNDpyZXR1cm4gdC5RbCgpO2Nhc2UgMTU6cmV0dXJuIHQuVGwoKTtjYXNlIDE2OnJldHVybiB0LlJsKCk7Y2FzZSAxNzpyZXR1cm4gdC5VbCgpO2Nhc2UgMjE6cmV0dXJuIG1pKHQpLHlpKCkseWkoKSxmQTtjYXNlIDEwOnN3aXRjaCh0LmEpe2Nhc2UgNjU6cmV0dXJuIHQueWwoKTtjYXNlIDkwOnJldHVybiB0LkRsKCk7Y2FzZSAxMjI6cmV0dXJuIHQuS2woKTtjYXNlIDk4OnJldHVybiB0LkVsKCk7Y2FzZSA2NjpyZXR1cm4gdC56bCgpO2Nhc2UgNjA6cmV0dXJuIHQuSmwoKTtjYXNlIDYyOnJldHVybiB0LkhsKCl9fXN3aXRjaChvPW01bih0KSxlPXQuYyxlKXtjYXNlIDM6cmV0dXJuIHQuWmwobyk7Y2FzZSA0OnJldHVybiB0LlhsKG8pO2Nhc2UgNTpyZXR1cm4gdC5ZbChvKTtjYXNlIDA6aWYodC5hPT0xMjMmJnQuZDx0Lmope2lmKHM9dC5kLHI9MCxuPS0xLChlPVRhKHQuaSxzKyspKT49NDgmJmU8PTU3KXtmb3Iocj1lLTQ4O3M8dC5qJiYoZT1UYSh0LmkscysrKSk+PTQ4JiZlPD01NzspaWYocj1yKjEwK2UtNDgscjwwKXRocm93IG50KG5ldyBScihHcigoRnIoKSxDOHQpKSkpfWVsc2UgdGhyb3cgbnQobmV3IFJyKEdyKChGcigpLEpkZSkpKSk7aWYobj1yLGU9PTQ0KXtpZihzPj10LmopdGhyb3cgbnQobmV3IFJyKEdyKChGcigpLGUwZSkpKSk7aWYoKGU9VGEodC5pLHMrKykpPj00OCYmZTw9NTcpe2ZvcihuPWUtNDg7czx0LmomJihlPVRhKHQuaSxzKyspKT49NDgmJmU8PTU3OylpZihuPW4qMTArZS00OCxuPDApdGhyb3cgbnQobmV3IFJyKEdyKChGcigpLEM4dCkpKSk7aWYocj5uKXRocm93IG50KG5ldyBScihHcigoRnIoKSxuMGUpKSkpfWVsc2Ugbj0tMX1pZihlIT0xMjUpdGhyb3cgbnQobmV3IFJyKEdyKChGcigpLHQwZSkpKSk7dC5zbChzKT8obz0oeWkoKSx5aSgpLG5ldyBXbSg5LG8pKSx0LmQ9cysxKToobz0oeWkoKSx5aSgpLG5ldyBXbSgzLG8pKSx0LmQ9cyksby5kbShyKSxvLmNtKG4pLG1pKHQpfX1yZXR1cm4gb31mdW5jdGlvbiBEaGUodCxlLG4scixzKXt2YXIgbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFosYnQsTXQsU3QsanQsUXQsY2UsX2UsV2UsUWUsUm4sem47Zm9yKFc9bmV3IEpjKGUuYiksanQ9bmV3IEpjKGUuYiksQj1uZXcgSmMoZS5iKSxXZT1uZXcgSmMoZS5iKSxaPW5ldyBKYyhlLmIpLF9lPXNpKGUsMCk7X2UuYiE9X2UuZC5jOylmb3IoUXQ9dShpaShfZSksMTEpLGQ9bmV3IFMoUXQuZyk7ZC5hPGQuYy5jLmxlbmd0aDspaWYobz11KFEoZCksMTcpLG8uYy5pPT1vLmQuaSl7aWYoUXQuaj09by5kLmope1dlLmNbV2UuYy5sZW5ndGhdPW87Y29udGludWV9ZWxzZSBpZihRdC5qPT0oYmUoKSxPbikmJm8uZC5qPT15cil7Wi5jW1ouYy5sZW5ndGhdPW87Y29udGludWV9fWZvcih3PW5ldyBTKFopO3cuYTx3LmMuYy5sZW5ndGg7KW89dShRKHcpLDE3KSxhbW4odCxvLG4sciwoYmUoKSxIbikpO2ZvcihoPW5ldyBTKFdlKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoUShoKSwxNyksUWU9bmV3IEgwKHQpLEMwKFFlLChHbigpLFVjKSksZWUoUWUsKHhlKCksd3MpLCh2YSgpLEtjKSksZWUoUWUsKGFlKCksSWkpLG8pLFJuPW5ldyBOYyxlZShSbixJaSxvLmQpLFVzKFJuLChiZSgpLEJuKSksdGMoUm4sUWUpLHpuPW5ldyBOYyxlZSh6bixJaSxvLmMpLFVzKHpuLEhuKSx0Yyh6bixRZSksZWUoby5jLHNsLFFlKSxlZShvLmQsc2wsUWUpLEJhKG8sbnVsbCkscGEobyxudWxsKSxuLmNbbi5jLmxlbmd0aF09UWUsZWUoUWUscVYsZGUoMikpO2ZvcihjZT1zaShlLDApO2NlLmIhPWNlLmQuYzspUXQ9dShpaShjZSksMTEpLGs9UXQuZS5jLmxlbmd0aD4wLGJ0PVF0LmcuYy5sZW5ndGg+MCxrJiZidD9CLmNbQi5jLmxlbmd0aF09UXQ6az9XLmNbVy5jLmxlbmd0aF09UXQ6YnQmJihqdC5jW2p0LmMubGVuZ3RoXT1RdCk7Zm9yKEc9bmV3IFMoVyk7Ry5hPEcuYy5jLmxlbmd0aDspcT11KFEoRyksMTEpLHVlKHMsaTZ0KHQscSxudWxsLG4pKTtmb3IoU3Q9bmV3IFMoanQpO1N0LmE8U3QuYy5jLmxlbmd0aDspTXQ9dShRKFN0KSwxMSksdWUocyxpNnQodCxudWxsLE10LG4pKTtmb3IoTT1uZXcgUyhCKTtNLmE8TS5jLmMubGVuZ3RoOylfPXUoUShNKSwxMSksdWUocyxpNnQodCxfLF8sbikpfWZ1bmN0aW9uIEloZSh0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWixidCxNdCxTdCxqdCxRdCxjZSxfZSxXZSxRZSxSbjtmb3IoTXQ9bmV3IFJlKGJzLGJzKSxlPW5ldyBSZShOcyxOcyksV2U9bmV3IFModCk7V2UuYTxXZS5jLmMubGVuZ3RoOylfZT11KFEoV2UpLDgpLE10LmE9Yi5NYXRoLm1pbihNdC5hLF9lLmEpLE10LmI9Yi5NYXRoLm1pbihNdC5iLF9lLmIpLGUuYT1iLk1hdGgubWF4KGUuYSxfZS5hKSxlLmI9Yi5NYXRoLm1heChlLmIsX2UuYik7Zm9yKEI9bmV3IFJlKGUuYS1NdC5hLGUuYi1NdC5iKSxrPW5ldyBSZShNdC5hLTUwLE10LmItQi5hLTUwKSxfPW5ldyBSZShNdC5hLTUwLGUuYitCLmErNTApLE09bmV3IFJlKGUuYStCLmIvMis1MCxNdC5iK0IuYi8yKSxxPW5ldyBlNnQoayxfLE0pLGNlPW5ldyBRcyxvPW5ldyBsZSxuPW5ldyBsZSxjZS5hLnpjKHEsY2UpLFJuPW5ldyBTKHQpO1JuLmE8Um4uYy5jLmxlbmd0aDspe2ZvcihRZT11KFEoUm4pLDgpLG8uYz1OdChRbixNZSwxLDAsNSwxKSxRdD1jZS5hLmVjKCkuS2MoKTtRdC5PYigpOylTdD11KFF0LlBiKCksMzA4KSxyPVN0LmQsR3AocixTdC5hKSxydyhHcChTdC5kLFFlKSxHcChTdC5kLFN0LmEpKTwwJiYoby5jW28uYy5sZW5ndGhdPVN0KTtmb3Iobi5jPU50KFFuLE1lLDEsMCw1LDEpLGp0PW5ldyBTKG8pO2p0LmE8anQuYy5jLmxlbmd0aDspZm9yKFN0PXUoUShqdCksMzA4KSxaPW5ldyBTKFN0LmUpO1ouYTxaLmMuYy5sZW5ndGg7KXtmb3IoRz11KFEoWiksMTY4KSxoPSEwLHc9bmV3IFMobyk7dy5hPHcuYy5jLmxlbmd0aDspZD11KFEodyksMzA4KSxkIT1TdCYmKFJjKEcsUGUoZC5lLDApKXx8UmMoRyxQZShkLmUsMSkpfHxSYyhHLFBlKGQuZSwyKSkpJiYoaD0hMSk7aCYmKG4uY1tuLmMubGVuZ3RoXT1HKX1mb3IoZGFlKGNlLG8pLF9hKGNlLG5ldyBYaSksVz1uZXcgUyhuKTtXLmE8Vy5jLmMubGVuZ3RoOylHPXUoUShXKSwxNjgpLFZzKGNlLG5ldyBlNnQoUWUsRy5hLEcuYikpfWZvcihidD1uZXcgUXMsX2EoY2UsbmV3IENuKGJ0KSkscz1idC5hLmVjKCkuS2MoKTtzLk9iKCk7KUc9dShzLlBiKCksMTY4KSwoQiQocSxHLmEpfHxCJChxLEcuYikpJiZzLlFiKCk7cmV0dXJuIF9hKGJ0LG5ldyBHYSksYnR9ZnVuY3Rpb24gQzVuKHQpe3ZhciBlLG4scixzLG87c3dpdGNoKG49dShLKHQsKGFlKCksV2MpKSwyMSksZT1paihwYmUpLHM9dShLKHQsKHhlKCksankpKSwzMzQpLHM9PSgkMCgpLG5wKSYmSGwoZSxiYmUpLEJlKEZlKEsodCxRbHQpKSk/RWkoZSwoWWEoKSxMZCksKGNvKCksYWx0KSk6RWkoZSwoWWEoKSxmdSksKGNvKCksYWx0KSksSyh0LChMJCgpLFZTKSkhPW51bGwmJkhsKGUsdmJlKSwoQmUoRmUoSyh0LFVUdCkpKXx8QmUoRmUoSyh0LHFUdCkpKSkmJmVsKGUsKFlhKCksam8pLChjbygpLHpFdCkpLHUoSyh0LFhsKSwxMDMpLmcpe2Nhc2UgMjpjYXNlIDM6Y2FzZSA0OmVsKEVpKGUsKFlhKCksTGQpLChjbygpLEhFdCkpLGpvLHFFdCl9c3dpdGNoKG4uSGMoKGdvKCksUlYpKSYmZWwoRWkoRWkoZSwoWWEoKSxMZCksKGNvKCksJEV0KSksR2MsUkV0KSxqbyxqRXQpLEd0KEsodCxabHQpKSE9PUd0KChtNCgpLGhHKSkmJkVpKGUsKFlhKCksZnUpLChjbygpLGk5dCkpLG4uSGMoJFYpJiYoRWkoZSwoWWEoKSxMZCksKGNvKCksYzl0KSksRWkoZSxmYixhOXQpLEVpKGUsZnUsbzl0KSksR3QoSyh0LEtWKSkhPT1HdCgoZjcoKSxiUykpJiZHdChLKHQsWDApKSE9PUd0KChxMCgpLFhPKSkmJmVsKGUsKFlhKCksam8pLChjbygpLFpFdCkpLEJlKEZlKEsodCxWVHQpKSkmJkVpKGUsKFlhKCksZnUpLChjbygpLFFFdCkpLEJlKEZlKEsodCxXbHQpKSkmJkVpKGUsKFlhKCksZnUpLChjbygpLHU5dCkpLHIybih0KSYmKEd0KEsodCxqeSkpPT09R3QobnApP3I9dShLKHQsQ08pLDI5Mik6cj11KEsodCxVbHQpLDI5Miksbz1yPT0oRzgoKSxEbHQpPyhjbygpLHM5dCk6KGNvKCksZjl0KSxFaShlLChZYSgpLEdjKSxvKSksdShLKHQsd190KSwzNzcpLmcpe2Nhc2UgMTpFaShlLChZYSgpLEdjKSwoY28oKSxsOXQpKTticmVhaztjYXNlIDI6ZWwoRWkoRWkoZSwoWWEoKSxmdSksKGNvKCksTkV0KSksR2MsUEV0KSxqbyxGRXQpfXJldHVybiBHdChLKHQscGIpKSE9PUd0KChqMCgpLGJiKSkmJkVpKGUsKFlhKCksZnUpLChjbygpLGg5dCkpLGV9ZnVuY3Rpb24gT2hlKHQpe1N2KHQsbmV3IHkyKEV2KHl2KGt2KHh2KG5ldyBtZyxGaCksIkVMSyBSZWN0YW5nbGUgUGFja2luZyIpLCJBbGdvcml0aG0gZm9yIHBhY2tpbmcgb2YgdW5jb25uZWN0ZWQgYm94ZXMsIGkuZS4gZ3JhcGhzIHdpdGhvdXQgZWRnZXMuIFRoZSBnaXZlbiBvcmRlciBvZiB0aGUgYm94ZXMgaXMgYWx3YXlzIHByZXNlcnZlZCBhbmQgdGhlIG1haW4gcmVhZGluZyBkaXJlY3Rpb24gb2YgdGhlIGJveGVzIGlzIGxlZnQgdG8gcmlnaHQuIFRoZSBhbGdvcml0aG0gaXMgZGl2aWRlZCBpbnRvIHR3byBwaGFzZXMuIE9uZSBwaGFzZSBhcHByb3hpbWF0ZXMgdGhlIHdpZHRoIGluIHdoaWNoIHRoZSByZWN0YW5nbGVzIGNhbiBiZSBwbGFjZWQuIFRoZSBuZXh0IHBoYXNlIHBsYWNlcyB0aGUgcmVjdGFuZ2xlcyBpbiByb3dzIHVzaW5nIHRoZSBwcmV2aW91c2x5IGNhbGN1bGF0ZWQgd2lkdGggYXMgYm91bmRpbmcgd2lkdGggYW5kIGJ1bmRsZXMgcmVjdGFuZ2xlcyB3aXRoIGEgc2ltaWxhciBoZWlnaHQgaW4gYmxvY2tzLiBBIGNvbXBhY3Rpb24gc3RlcCByZWR1Y2VzIHRoZSBzaXplIG9mIHRoZSBkcmF3aW5nLiBGaW5hbGx5LCB0aGUgcmVjdGFuZ2xlcyBhcmUgZXhwYW5kZWQgdG8gZmlsbCB0aGVpciBib3VuZGluZyBib3ggYW5kIGVsaW1pbmF0ZSBlbXB0eSB1bnVzZWQgc3BhY2VzLiIpLG5ldyBjWikpKSx3ZSh0LEZoLHB4LDEuMyksd2UodCxGaCxnSCxJZShQQ3QpKSx3ZSh0LEZoLHd3LHFDdCksd2UodCxGaCxreSwxNSksd2UodCxGaCxjSCxJZShVeWUpKSx3ZSh0LEZoLE00LEllKFl5ZSkpLHdlKHQsRmgsdngsSWUoWHllKSksd2UodCxGaCxieCxJZShReWUpKSx3ZSh0LEZoLEY3LEllKEt5ZSkpLHdlKHQsRmgsRkMsSWUoakN0KSksd2UodCxGaCxCNyxJZShKeWUpKSx3ZSh0LEZoLFZrdCxJZSh6Q3QpKSx3ZSh0LEZoLEdrdCxJZShSQ3QpKSx3ZSh0LEZoLEtrdCxJZSgkQ3QpKSx3ZSh0LEZoLFlrdCxJZShIQ3QpKSx3ZSh0LEZoLFNjdCxJZShGQ3QpKSx3ZSh0LEZoLCRJLEllKEJDdCkpLHdlKHQsRmgsdmN0LEllKFd5ZSkpLHdlKHQsRmgsV2t0LEllKFJPKSksd2UodCxGaCxVa3QsSWUoTkN0KSksd2UodCxGaCxYa3QsSWUoVkN0KSl9ZnVuY3Rpb24gcHcodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFo7aWYobj09bnVsbClyZXR1cm4gbnVsbDtpZih0LmEhPWUuQWooKSl0aHJvdyBudChuZXcgUG4oejcrZS5uZSgpK2t3KSk7aWYoX3QoZSw0NTcpKXtpZihaPU92bih1KGUsNjcxKSxuKSwhWil0aHJvdyBudChuZXcgUG4oamN0K24rIicgaXMgbm90IGEgdmFsaWQgZW51bWVyYXRvciBvZiAnIitlLm5lKCkrIiciKSk7cmV0dXJuIFp9c3dpdGNoKEJnKChHdSgpLFNhKSxlKS5jbCgpKXtjYXNlIDI6e249SGMobiwhMSk7YnJlYWt9Y2FzZSAzOntuPUhjKG4sITApO2JyZWFrfX1pZihyPUJnKFNhLGUpLiRrKCkscilyZXR1cm4gci5BaigpLk5oKCkuS2gocixuKTtpZihCPUJnKFNhLGUpLmFsKCksQil7Zm9yKFo9bmV3IGxlLGs9VGl0KG4pLF89MCxNPWsubGVuZ3RoO188TTsrK18pdz1rW19dLHVlKFosQi5BaigpLk5oKCkuS2goQix3KSk7cmV0dXJuIFp9aWYoVz1CZyhTYSxlKS5ibCgpLCFXLmRjKCkpe2ZvcihHPVcuS2MoKTtHLk9iKCk7KXtxPXUoRy5QYigpLDE0OCk7dHJ5e2lmKFo9cS5BaigpLk5oKCkuS2gocSxuKSxaIT1udWxsKXJldHVybiBafWNhdGNoKGJ0KXtpZihidD1ycyhidCksIV90KGJ0LDYwKSl0aHJvdyBudChidCl9fXRocm93IG50KG5ldyBQbihqY3QrbisiJyBkb2VzIG5vdCBtYXRjaCBhbnkgbWVtYmVyIHR5cGVzIG9mIHRoZSB1bmlvbiBkYXRhdHlwZSAnIitlLm5lKCkrIiciKSl9aWYodShlLDgzNCkuRmooKSxzPUl1bihlLkJqKCkpLCFzKXJldHVybiBudWxsO2lmKHM9PWFTKXtoPTA7dHJ5e2g9R2wobixPYSxUaSkmTXN9Y2F0Y2goYnQpe2lmKGJ0PXJzKGJ0KSxfdChidCwxMjcpKW89UiQobiksaD1vWzBdO2Vsc2UgdGhyb3cgbnQoYnQpfXJldHVybiBJRChoKX1pZihzPT1ISCl7Zm9yKGQ9MDtkPHJBLmxlbmd0aDsrK2QpdHJ5e3JldHVybiBrVnQockFbZF0sbil9Y2F0Y2goYnQpe2lmKGJ0PXJzKGJ0KSwhX3QoYnQsMzIpKXRocm93IG50KGJ0KX10aHJvdyBudChuZXcgUG4oamN0K24rIicgaXMgbm90IGEgZGF0ZSBmb3JtYXR0ZWQgc3RyaW5nIG9mIHRoZSBmb3JtIHl5eXktTU0tZGQnVCdISDptbTpzcycuJ1NTU1ogb3IgYSB2YWxpZCBzdWJzZXQgdGhlcmVvZiIpKX10aHJvdyBudChuZXcgUG4oamN0K24rIicgaXMgaW52YWxpZC4gIikpfWZ1bmN0aW9uIFM1bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGs7aWYobj0wLGg9MCxvPWUubGVuZ3RoLGQ9bnVsbCxrPW5ldyBMbSxoPG8mJigkcihoLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoaCk9PTQzKSYmKCsraCwrK24saDxvJiYoJHIoaCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGgpPT00M3x8KCRyKGgsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChoKT09NDUpKSkpdGhyb3cgbnQobmV3IGNkKHZ3K2UrJyInKSk7Zm9yKDtoPG8mJigkcihoLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoaCkhPTQ2KSYmKCRyKGgsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChoKSE9MTAxKSYmKCRyKGgsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChoKSE9NjkpOykrK2g7aWYoay5hKz0iIitCbChlPT1udWxsP011OihJbihlKSxlKSxuLGgpLGg8byYmKCRyKGgsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChoKT09NDYpKXtmb3IoKytoLG49aDtoPG8mJigkcihoLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoaCkhPTEwMSkmJigkcihoLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoaCkhPTY5KTspKytoO3QuZT1oLW4say5hKz0iIitCbChlPT1udWxsP011OihJbihlKSxlKSxuLGgpfWVsc2UgdC5lPTA7aWYoaDxvJiYoJHIoaCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGgpPT0xMDF8fCgkcihoLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoaCk9PTY5KSkmJigrK2gsbj1oLGg8byYmKCRyKGgsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChoKT09NDMpJiYoKytoLGg8byYmKCRyKGgsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChoKSE9NDUpJiYrK24pLGQ9ZS5zdWJzdHIobixvLW4pLHQuZT10LmUtR2woZCxPYSxUaSksdC5lIT1Dcyh0LmUpKSl0aHJvdyBudChuZXcgY2QoIlNjYWxlIG91dCBvZiByYW5nZS4iKSk7aWYodz1rLmEsdy5sZW5ndGg8MTYpe2lmKHQuZj0oZzd0PT1udWxsJiYoZzd0PW5ldyBSZWdFeHAoIl5bKy1dP1xcZCokIiwiaSIpKSxnN3QudGVzdCh3KT9wYXJzZUludCh3LDEwKTpOYU4pLGlzTmFOKHQuZikpdGhyb3cgbnQobmV3IGNkKHZ3K2UrJyInKSk7dC5hPVk0dCh0LmYpfWVsc2UgS2xuKHQsbmV3IEZwKHcpKTtmb3IodC5kPWsuYS5sZW5ndGgscz0wO3M8ay5hLmxlbmd0aCYmKHI9VGEoay5hLHMpLCEociE9NDUmJnIhPTQ4KSk7KytzKS0tdC5kO3QuZD09MCYmKHQuZD0xKX1mdW5jdGlvbiBPYXQoKXtPYXQ9WCxIaT1uZXcgSHYsY24oSGksKGJlKCksVzEpLFljKSxjbihIaSxVaCxZYyksY24oSGksVWgsT3UpLGNuKEhpLHhoLFl1KSxjbihIaSx4aCxZYyksY24oSGksTWYsWWMpLGNuKEhpLE1mLGNsKSxjbihIaSxabCxEdSksY24oSGksWmwsWWMpLGNuKEhpLEl1LGd1KSxjbihIaSxJdSxZYyksY24oSGksSXUsY2wpLGNuKEhpLEl1LER1KSxjbihIaSxndSxJdSksY24oSGksZ3UsT3UpLGNuKEhpLGd1LFl1KSxjbihIaSxndSxZYyksY24oSGksRGYsRGYpLGNuKEhpLERmLGNsKSxjbihIaSxEZixPdSksY24oSGksb2wsb2wpLGNuKEhpLG9sLGNsKSxjbihIaSxvbCxZdSksY24oSGksSmwsSmwpLGNuKEhpLEpsLER1KSxjbihIaSxKbCxPdSksY24oSGksa2gsa2gpLGNuKEhpLGtoLER1KSxjbihIaSxraCxZdSksY24oSGksY2wsTWYpLGNuKEhpLGNsLEl1KSxjbihIaSxjbCxEZiksY24oSGksY2wsb2wpLGNuKEhpLGNsLFljKSxjbihIaSxjbCxjbCksY24oSGksY2wsT3UpLGNuKEhpLGNsLFl1KSxjbihIaSxEdSxabCksY24oSGksRHUsSXUpLGNuKEhpLER1LEpsKSxjbihIaSxEdSxraCksY24oSGksRHUsRHUpLGNuKEhpLER1LE91KSxjbihIaSxEdSxZdSksY24oSGksRHUsWWMpLGNuKEhpLE91LFVoKSxjbihIaSxPdSxndSksY24oSGksT3UsRGYpLGNuKEhpLE91LEpsKSxjbihIaSxPdSxjbCksY24oSGksT3UsRHUpLGNuKEhpLE91LE91KSxjbihIaSxPdSxZYyksY24oSGksWXUseGgpLGNuKEhpLFl1LGd1KSxjbihIaSxZdSxvbCksY24oSGksWXUsa2gpLGNuKEhpLFl1LGNsKSxjbihIaSxZdSxEdSksY24oSGksWXUsWXUpLGNuKEhpLFl1LFljKSxjbihIaSxZYyxXMSksY24oSGksWWMsVWgpLGNuKEhpLFljLHhoKSxjbihIaSxZYyxNZiksY24oSGksWWMsWmwpLGNuKEhpLFljLEl1KSxjbihIaSxZYyxndSksY24oSGksWWMsY2wpLGNuKEhpLFljLER1KSxjbihIaSxZYyxPdSksY24oSGksWWMsWXUpLGNuKEhpLFljLFljKX1mdW5jdGlvbiBFNnQodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFosYnQsTXQsU3QsanQsUXQsY2UsX2UsV2U7Zm9yKHQuZD1uZXcgUmUoYnMsYnMpLHQuYz1uZXcgUmUoTnMsTnMpLEI9ZS5LYygpO0IuT2IoKTspZm9yKF89dShCLlBiKCksMzcpLFN0PW5ldyBTKF8uYSk7U3QuYTxTdC5jLmMubGVuZ3RoOylNdD11KFEoU3QpLDEwKSx0LmQuYT1iLk1hdGgubWluKHQuZC5hLE10Lm4uYS1NdC5kLmIpLHQuZC5iPWIuTWF0aC5taW4odC5kLmIsTXQubi5iLU10LmQuZCksdC5jLmE9Yi5NYXRoLm1heCh0LmMuYSxNdC5uLmErTXQuby5hK010LmQuYyksdC5jLmI9Yi5NYXRoLm1heCh0LmMuYixNdC5uLmIrTXQuby5iK010LmQuYSk7Zm9yKGQ9bmV3IFF6dCxNPWUuS2MoKTtNLk9iKCk7KV89dShNLlBiKCksMzcpLHI9bDVuKHQsXyksdWUoZC5hLHIpLHIuYT1yLmF8IXUoSyhyLmMsKGFlKCksTnkpKSwyMSkuZGMoKTtmb3IodC5iPShPaXQoKSxXZT1uZXcgb3YsV2UuZj1uZXcgQmVlKG4pLFdlLmI9dzNuKFdlLmYsZCksV2UpLEMzbigoRz10LmIsbmV3IFdrLEcpKSx0LmU9bmV3IERhLHQuYT10LmIuZi5lLGg9bmV3IFMoZC5hKTtoLmE8aC5jLmMubGVuZ3RoOylmb3Iocz11KFEoaCksODQxKSxqdD1scm4odC5iLHMpLGZ3bihzLmMsanQuYSxqdC5iKSxaPW5ldyBTKHMuYy5hKTtaLmE8Wi5jLmMubGVuZ3RoOylXPXUoUShaKSwxMCksVy5rPT0oR24oKSxJcykmJihidD1tNXQodCxXLm4sdShLKFcsKGFlKCksZ2MpKSw2MSkpLEZpKEtmKFcubiksYnQpKTtmb3Iobz1uZXcgUyhkLmEpO28uYTxvLmMuYy5sZW5ndGg7KWZvcihzPXUoUShvKSw4NDEpLGs9bmV3IFMocXVuKHMpKTtrLmE8ay5jLmMubGVuZ3RoOylmb3Iodz11KFEoayksMTcpLF9lPW5ldyB5Uih3LmEpLHU4KF9lLDAsUzEody5jKSksYWkoX2UsUzEody5kKSkscT1udWxsLGNlPXNpKF9lLDApO2NlLmIhPWNlLmQuYzspe2lmKFF0PXUoaWkoY2UpLDgpLCFxKXtxPVF0O2NvbnRpbnVlfUJtdChxLmEsUXQuYSk/KHQuZS5hPWIuTWF0aC5taW4odC5lLmEscS5hKSx0LmEuYT1iLk1hdGgubWF4KHQuYS5hLHEuYSkpOkJtdChxLmIsUXQuYikmJih0LmUuYj1iLk1hdGgubWluKHQuZS5iLHEuYiksdC5hLmI9Yi5NYXRoLm1heCh0LmEuYixxLmIpKSxxPVF0fW1qKHQuZSksRmkodC5hLHQuZSl9ZnVuY3Rpb24gQTVuKHQpe05yKHQuYixqaCx1dChvdChMZSwxKSxyZSwyLDYsW0V3LCJDb25zaXN0ZW50VHJhbnNpZW50Il0pKSxOcih0LmEsamgsdXQob3QoTGUsMSkscmUsMiw2LFtFdywiV2VsbEZvcm1lZFNvdXJjZVVSSSJdKSksTnIodC5vLGpoLHV0KG90KExlLDEpLHJlLDIsNixbRXcsIkludGVyZmFjZUlzQWJzdHJhY3QgQXRNb3N0T25lSUQgVW5pcXVlRmVhdHVyZU5hbWVzIFVuaXF1ZU9wZXJhdGlvblNpZ25hdHVyZXMgTm9DaXJjdWxhclN1cGVyVHlwZXMgV2VsbEZvcm1lZE1hcEVudHJ5Q2xhc3MgQ29uc2lzdGVudFN1cGVyVHlwZXMgRGlzam9pbnRGZWF0dXJlQW5kT3BlcmF0aW9uU2lnbmF0dXJlcyJdKSksTnIodC5wLGpoLHV0KG90KExlLDEpLHJlLDIsNixbRXcsIldlbGxGb3JtZWRJbnN0YW5jZVR5cGVOYW1lIFVuaXF1ZVR5cGVQYXJhbWV0ZXJOYW1lcyJdKSksTnIodC52LGpoLHV0KG90KExlLDEpLHJlLDIsNixbRXcsIlVuaXF1ZUVudW1lcmF0b3JOYW1lcyBVbmlxdWVFbnVtZXJhdG9yTGl0ZXJhbHMiXSkpLE5yKHQuUixqaCx1dChvdChMZSwxKSxyZSwyLDYsW0V3LCJXZWxsRm9ybWVkTmFtZSJdKSksTnIodC5ULGpoLHV0KG90KExlLDEpLHJlLDIsNixbRXcsIlVuaXF1ZVBhcmFtZXRlck5hbWVzIFVuaXF1ZVR5cGVQYXJhbWV0ZXJOYW1lcyBOb1JlcGVhdGluZ1ZvaWQiXSkpLE5yKHQuVSxqaCx1dChvdChMZSwxKSxyZSwyLDYsW0V3LCJXZWxsRm9ybWVkTnNVUkkgV2VsbEZvcm1lZE5zUHJlZml4IFVuaXF1ZVN1YnBhY2thZ2VOYW1lcyBVbmlxdWVDbGFzc2lmaWVyTmFtZXMgVW5pcXVlTnNVUklzIl0pKSxOcih0LlcsamgsdXQob3QoTGUsMSkscmUsMiw2LFtFdywiQ29uc2lzdGVudE9wcG9zaXRlIFNpbmdsZUNvbnRhaW5lciBDb25zaXN0ZW50S2V5cyBDb25zaXN0ZW50VW5pcXVlIENvbnNpc3RlbnRDb250YWluZXIiXSkpLE5yKHQuYmIsamgsdXQob3QoTGUsMSkscmUsMiw2LFtFdywiVmFsaWREZWZhdWx0VmFsdWVMaXRlcmFsIl0pKSxOcih0LmViLGpoLHV0KG90KExlLDEpLHJlLDIsNixbRXcsIlZhbGlkTG93ZXJCb3VuZCBWYWxpZFVwcGVyQm91bmQgQ29uc2lzdGVudEJvdW5kcyBWYWxpZFR5cGUiXSkpLE5yKHQuSCxqaCx1dChvdChMZSwxKSxyZSwyLDYsW0V3LCJDb25zaXN0ZW50VHlwZSBDb25zaXN0ZW50Qm91bmRzIENvbnNpc3RlbnRBcmd1bWVudHMiXSkpfWZ1bmN0aW9uIEw1bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWixidCxNdCxTdCxqdCxRdCxjZSxfZSxXZSxRZTtpZighZS5kYygpKXtpZihzPW5ldyBqdSxkPW58fHUoZS5YYigwKSwxNyksRz1kLmMsYkMoKSxCPUcuaS5rLCEoQj09KEduKCkscXMpfHxCPT1VY3x8Qj09SXN8fEI9PXExKSl0aHJvdyBudChuZXcgUG4oIlRoZSB0YXJnZXQgbm9kZSBvZiB0aGUgZWRnZSBtdXN0IGJlIGEgbm9ybWFsIG5vZGUgb3IgYSBub3J0aFNvdXRoUG9ydC4iKSk7Zm9yKFhiKHMsbmModXQob3QobmEsMSkscmUsOCwwLFtHLmkubixHLm4sRy5hXSkpKSwoYmUoKSxJdSkuSGMoRy5qKSYmKFo9WnQodmUoSyhHLChhZSgpLGZFKSkpKSxNPW5ldyBSZShuYyh1dChvdChuYSwxKSxyZSw4LDAsW0cuaS5uLEcubixHLmFdKSkuYSxaKSxrcyhzLE0scy5jLmIscy5jKSksXz1udWxsLHI9ITEsdz1lLktjKCk7dy5PYigpOyloPXUody5QYigpLDE3KSxvPWguYSxvLmIhPTAmJihyPyhrPWxkKEZpKF8sKFpuKG8uYiE9MCksdShvLmEuYS5jLDgpKSksLjUpLGtzKHMsayxzLmMuYixzLmMpLHI9ITEpOnI9ITAsXz11YygoWm4oby5iIT0wKSx1KG8uYy5iLmMsOCkpKSxLYShzLG8pLE1oKG8pKTtXPWQuZCxJdS5IYyhXLmopJiYoWj1adCh2ZShLKFcsKGFlKCksZkUpKSkpLE09bmV3IFJlKG5jKHV0KG90KG5hLDEpLHJlLDgsMCxbVy5pLm4sVy5uLFcuYV0pKS5hLFopLGtzKHMsTSxzLmMuYixzLmMpKSxYYihzLG5jKHV0KG90KG5hLDEpLHJlLDgsMCxbVy5pLm4sVy5uLFcuYV0pKSksdC5kPT0oWjgoKSxtaHQpJiYoYnQ9KFpuKHMuYiE9MCksdShzLmEuYS5jLDgpKSxNdD11KGUxKHMsMSksOCksU3Q9bmV3IHdydChBeXQoRy5qKSksU3QuYSo9NSxTdC5iKj01LGp0PWZhKG5ldyBSZShNdC5hLE10LmIpLGJ0KSxRdD1uZXcgUmUocHJ0KFN0LmEsanQuYSkscHJ0KFN0LmIsanQuYikpLEZpKFF0LGJ0KSxjZT1zaShzLDEpLFhNKGNlLFF0KSxfZT0oWm4ocy5iIT0wKSx1KHMuYy5iLmMsOCkpLFdlPXUoZTEocyxzLmItMiksOCksU3Q9bmV3IHdydChBeXQoVy5qKSksU3QuYSo9NSxTdC5iKj01LGp0PWZhKG5ldyBSZShXZS5hLFdlLmIpLF9lKSxRZT1uZXcgUmUocHJ0KFN0LmEsanQuYSkscHJ0KFN0LmIsanQuYikpLEZpKFFlLF9lKSx1OChzLHMuYi0xLFFlKSkscT1uZXcgbjZ0KHMpLEthKGQuYSxyc2UocSkpfX1mdW5jdGlvbiBNNW4odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFosYnQsTXQsU3QsanQsUXQsY2UsX2UsV2UsUWUsUm4sem4saHIseGksS3MsZWgsWmgsWDEsaFUsYk4sZEEsdk47aWYoU3Q9dShBdCgoIXQuYiYmKHQuYj1uZXcgRW4odnIsdCw0LDcpKSx0LmIpLDApLDgyKSxRdD1TdC5EZygpLGNlPVN0LkVnKCksanQ9U3QuQ2coKS8yLFc9U3QuQmcoKS8yLF90KFN0LDE4NikmJihNdD11KFN0LDExOCksUXQrPV8xKE10KS5pLFF0Kz1fMShNdCkuaSksUXQrPWp0LGNlKz1XLHpuPXUoQXQoKCF0LmImJih0LmI9bmV3IEVuKHZyLHQsNCw3KSksdC5iKSwwKSw4MikseGk9em4uRGcoKSxLcz16bi5FZygpLGhyPXpuLkNnKCkvMixfZT16bi5CZygpLzIsX3Qoem4sMTg2KSYmKFJuPXUoem4sMTE4KSx4aSs9XzEoUm4pLmkseGkrPV8xKFJuKS5pKSx4aSs9aHIsS3MrPV9lLCghdC5hJiYodC5hPW5ldyBoZSh1cyx0LDYsNikpLHQuYSkuaT09MClkPShUdigpLGs9bmV3IGlkLGspLE9yKCghdC5hJiYodC5hPW5ldyBoZSh1cyx0LDYsNikpLHQuYSksZCk7ZWxzZSBpZigoIXQuYSYmKHQuYT1uZXcgaGUodXMsdCw2LDYpKSx0LmEpLmk+MSlmb3IoRz1uZXcgQTYoKCF0LmEmJih0LmE9bmV3IGhlKHVzLHQsNiw2KSksdC5hKSk7Ry5lIT1HLmkuZ2MoKTspdUMoRyk7Zm9yKGg9dShBdCgoIXQuYSYmKHQuYT1uZXcgaGUodXMsdCw2LDYpKSx0LmEpLDApLDIwMiksWj14aSx4aT5RdCtqdD9aPVF0K2p0OnhpPFF0LWp0JiYoWj1RdC1qdCksYnQ9S3MsS3M+Y2UrVz9idD1jZStXOktzPGNlLVcmJihidD1jZS1XKSxaPlF0LWp0JiZaPFF0K2p0JiZidD5jZS1XJiZidDxjZStXJiYoWj1RdCtqdCksUDgoaCxaKSxCOChoLGJ0KSxXZT1RdCxRdD54aStocj9XZT14aStocjpRdDx4aS1ociYmKFdlPXhpLWhyKSxRZT1jZSxjZT5LcytfZT9RZT1LcytfZTpjZTxLcy1fZSYmKFFlPUtzLV9lKSxXZT54aS1ociYmV2U8eGkraHImJlFlPktzLV9lJiZRZTxLcytfZSYmKFFlPUtzK19lKSxOOChoLFdlKSxGOChoLFFlKSxUcigoIWguYSYmKGguYT1uZXcgQnMoV2gsaCw1KSksaC5hKSksbz16eihlLDUpLFN0PT16biYmKytvLFgxPVdlLVosZEE9UWUtYnQsZWg9Yi5NYXRoLnNxcnQoWDEqWDErZEEqZEEpLE09ZWgqLjIwMDAwMDAwMjk4MDIzMjI0LGhVPVgxLyhvKzEpLHZOPWRBLyhvKzEpLFpoPVosYk49YnQsXz0wO188bztfKyspWmgrPWhVLGJOKz12TixCPVpoK3BsKGUsMjQpKlBJKk0tTS8yLEI8MD9CPTE6Qj5uJiYoQj1uLTEpLHE9Yk4rcGwoZSwyNCkqUEkqTS1NLzIscTwwP3E9MTpxPnImJihxPXItMSkscz0oVHYoKSx3PW5ldyBtcCx3KSxXJChzLEIpLEskKHMscSksT3IoKCFoLmEmJihoLmE9bmV3IEJzKFdoLGgsNSkpLGguYSkscyl9ZnVuY3Rpb24geGUoKXt4ZT1YLGVodD0oZGkoKSxYM2UpLGxfdD1RM2UsQU89ZUF0LFRmPVozZSxGeD1uQXQsRnc9SjNlLFZ5PXJBdCx2RT1pQXQsd0U9c0F0LG5odD1xRyxCdz1HMixyaHQ9dDRlLENTPWNBdCxzRz16eCxTTz0oXzZ0KCksV3ZlKSxaND1LdmUsJDI9WXZlLEo0PVh2ZSxPd2U9bmV3IGFvKHpHLGRlKDApKSxiRT1WdmUsdV90PUd2ZSxQeD1VdmUsd190PXd3ZSxoX3Q9SnZlLGZfdD1ud2Usc2h0PXV3ZSxkX3Q9c3dlLGdfdD1vd2UsYUc9a3dlLGFodD1td2UsYl90PWd3ZSxwX3Q9ZndlLHZfdD1id2UsTnc9UnZlLF9TPWp2ZSxYbHQ9bnZlLHpUdD1pdmUsaV90PW5ldyBNdigxMikscl90PW5ldyBhbyhWMixpX3QpLFJUdD0ocTAoKSxDRSksWDA9bmV3IGFvKERTdCxSVHQpLHp5PW5ldyBhbyhtbCwwKSxOd2U9bmV3IGFvKGdmdCxkZSgxKSksVVY9bmV3IGFvKGp4LFA3KSxqMj0kRyx3cz1VUyxwRT1jNSxDd2U9VU8sTWQ9ejNlLGp5PWk1LFB3ZT1uZXcgYW8ocGZ0LChGbigpLCEwKSksJHk9V08sQjI9b2Z0LFIyPUgyLGlHPW1iLHRodD1qRyxCVHQ9KGZvKCksYzApLFhsPW5ldyBhbyhqdyxCVHQpLE93PWE1LG5HPSRTdCxxeT1LeSxJd2U9ZGZ0LG9fdD1KU3QsYV90PSh1NCgpLEpPKSxuZXcgYW8oS1N0LGFfdCksTHdlPXVmdCxNd2U9bGZ0LER3ZT1oZnQsQXdlPWNmdCxpaHQ9WnZlLFpUdD1DdmUsWmx0PV92ZSxTUz1RdmUsZHU9d3ZlLFJ5PUsyZSxFUz1XMmUsQnk9TjJlLE5UdD1QMmUsVWx0PWoyZSxDTz1GMmUsV2x0PUcyZSxKVHQ9U3ZlLHRfdD1BdmUsV1R0PWZ2ZSxyRz1xdmUsSmx0PUR2ZSxRbHQ9b3ZlLG5fdD1GdmUsJFR0PXR2ZSxZbHQ9ZXZlLEdsdD1CRyxlX3Q9THZlLEtWPVMyZSxEVHQ9QzJlLFdWPV8yZSxWVHQ9bHZlLEhUdD11dmUsR1R0PWh2ZSxkRT1vNSxPbz1zNSxYZz1PU3QsRGQ9YWZ0LEtsdD1zZnQsUFR0PXoyZSxRZz1mZnQsa1M9VjNlLEpWPUczZSxQdz1YU3Qsc190PVUzZSxnRT1XM2UsWVR0PXl2ZSxYVHQ9a3ZlLEh5PSR4LEhsdD1UMmUsUVR0PVR2ZSxaVj1RMmUsUVY9WDJlLGVHPUtPLEtUdD1wdmUsVFM9T3ZlLExPPWFBdCxGVHQ9WTJlLGNfdD1IdmUsalR0PVoyZSxTd2U9dnZlLF93ZT1IMmUsVVR0PUJTdCx0Rz1tdmUsWFY9VjJlLHBiPU8yZSxPVHQ9RDJlLFlWPUwyZSxJVHQ9TTJlLFZsdD1JMmUsTng9QTJlLHFUdD1jdmV9ZnVuY3Rpb24gTmF0KHQsZSl7eWF0KCk7dmFyIG4scixzLG8saCxkLHcsayxfLE0sQixxLEcsVyxaLGJ0LE10LFN0LGp0LFF0LGNlLF9lLFdlLFFlLFJuLHpuLGhyLHhpO2lmKFdlPXQuZSxHPXQuZCxzPXQuYSxXZT09MClzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiIwIjtjYXNlIDE6cmV0dXJuIE03O2Nhc2UgMjpyZXR1cm4iMC4wMCI7Y2FzZSAzOnJldHVybiIwLjAwMCI7Y2FzZSA0OnJldHVybiIwLjAwMDAiO2Nhc2UgNTpyZXR1cm4iMC4wMDAwMCI7Y2FzZSA2OnJldHVybiIwLjAwMDAwMCI7ZGVmYXVsdDpyZXR1cm4gY2U9bmV3IEFwLGU8MD9jZS5hKz0iMEUrIjpjZS5hKz0iMEUiLGNlLmErPS1lLGNlLmF9aWYoU3Q9RyoxMCsxKzcsanQ9TnQoRWgsd2QsMjUsU3QrMSwxNSwxKSxuPVN0LEc9PTEpaWYoZD1zWzBdLGQ8MCl7eGk9R3MoZCxwbyk7ZG8gVz14aSx4aT1lSSh4aSwxMCksanRbLS1uXT00OCtNcihRcChXLElhKHhpLDEwKSkpJk1zO3doaWxlKF9jKHhpLDApIT0wKX1lbHNle3hpPWQ7ZG8gVz14aSx4aT14aS8xMHwwLGp0Wy0tbl09NDgrKFcteGkqMTApJk1zO3doaWxlKHhpIT0wKX1lbHNle1JuPU50KFNyLEpyLDI1LEcsMTUsMSksaHI9RyxQYyhzLDAsUm4sMCxocik7dDpmb3IoOzspe2ZvcihfZT0wLGs9aHItMTtrPj0wO2stLSl6bj1SYShNMChfZSwzMiksR3MoUm5ba10scG8pKSxidD1QZG4oem4pLFJuW2tdPU1yKGJ0KSxfZT1NcihScChidCwzMikpO010PU1yKF9lKSxaPW47ZG8ganRbLS1uXT00OCtNdCUxMCZNczt3aGlsZSgoTXQ9TXQvMTB8MCkhPTAmJm4hPTApO2ZvcihyPTktWituLHc9MDt3PHImJm4+MDt3KyspanRbLS1uXT00ODtmb3IoTT1oci0xO1JuW01dPT0wO00tLSlpZihNPT0wKWJyZWFrIHQ7aHI9TSsxfWZvcig7anRbbl09PTQ4OykrK259aWYocT1XZTwwLGg9U3Qtbi1lLTEsZT09MClyZXR1cm4gcSYmKGp0Wy0tbl09NDUpLEloKGp0LG4sU3Qtbik7aWYoZT4wJiZoPj0tNil7aWYoaD49MCl7Zm9yKF89bitoLEI9U3QtMTtCPj1fO0ItLSlqdFtCKzFdPWp0W0JdO3JldHVybiBqdFsrK19dPTQ2LHEmJihqdFstLW5dPTQ1KSxJaChqdCxuLFN0LW4rMSl9Zm9yKE09MjtNPC1oKzE7TSsrKWp0Wy0tbl09NDg7cmV0dXJuIGp0Wy0tbl09NDYsanRbLS1uXT00OCxxJiYoanRbLS1uXT00NSksSWgoanQsbixTdC1uKX1yZXR1cm4gUWU9bisxLG89U3QsUXQ9bmV3IExtLHEmJihRdC5hKz0iLSIpLG8tUWU+PTE/KCRwKFF0LGp0W25dKSxRdC5hKz0iLiIsUXQuYSs9SWgoanQsbisxLFN0LW4tMSkpOlF0LmErPUloKGp0LG4sU3QtbiksUXQuYSs9IkUiLGg+MCYmKFF0LmErPSIrIiksUXQuYSs9IiIraCxRdC5hfWZ1bmN0aW9uIE5oZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWixidCxNdCxTdCxqdCxRdCxjZTtzd2l0Y2godC5jPWUsdC5nPW5ldyBBcixuPShEbSgpLG5ldyBTbSh0LmMpKSxyPW5ldyBlcihuKSxzM3QociksU3Q9anIoemUodC5jLChySSgpLHRTdCkpKSx3PXUoemUodC5jLFhodCksMzE2KSxRdD11KHplKHQuYyxRaHQpLDQyOSksaD11KHplKHQuYyxRQ3QpLDQ4MiksanQ9dSh6ZSh0LmMsWWh0KSw0MzApLHQuaj1adCh2ZSh6ZSh0LmMsaDNlKSkpLGQ9dC5hLHcuZyl7Y2FzZSAwOmQ9dC5hO2JyZWFrO2Nhc2UgMTpkPXQuYjticmVhaztjYXNlIDI6ZD10Lmk7YnJlYWs7Y2FzZSAzOmQ9dC5lO2JyZWFrO2Nhc2UgNDpkPXQuZjticmVhaztkZWZhdWx0OnRocm93IG50KG5ldyBQbihwSCsody5mIT1udWxsP3cuZjoiIit3LmcpKSl9aWYodC5kPW5ldyBpUXQoZCxRdCxoKSxlZSh0LmQsKHE4KCksdVMpLEZlKHplKHQuYyx1M2UpKSksdC5kLmM9QmUoRmUoemUodC5jLFpDdCkpKSxpJCh0LmMpLmk9PTApcmV0dXJuIHQuZDtmb3IoTT1uZXcgbnIoaSQodC5jKSk7TS5lIT1NLmkuZ2MoKTspe2ZvcihfPXUoZHIoTSksMzMpLHE9Xy5nLzIsQj1fLmYvMixjZT1uZXcgUmUoXy5pK3EsXy5qK0IpO01sKHQuZyxjZSk7KUZtKGNlLChiLk1hdGgucmFuZG9tKCktLjUpKnhkLChiLk1hdGgucmFuZG9tKCktLjUpKnhkKTtXPXUoemUoXywoZGkoKSxLTykpLDE0MiksWj1uZXcgeFF0KGNlLG5ldyBjaChjZS5hLXEtdC5qLzItVy5iLGNlLmItQi10LmovMi1XLmQsXy5nK3QuaisoVy5iK1cuYyksXy5mK3QuaisoVy5kK1cuYSkpKSx1ZSh0LmQuaSxaKSxBaSh0LmcsY2UsbmV3IHlhKFosXykpfXN3aXRjaChqdC5nKXtjYXNlIDA6aWYoU3Q9PW51bGwpdC5kLmQ9dShQZSh0LmQuaSwwKSw2NSk7ZWxzZSBmb3IoTXQ9bmV3IFModC5kLmkpO010LmE8TXQuYy5jLmxlbmd0aDspWj11KFEoTXQpLDY1KSxHPXUodSh0cih0LmcsWi5hKSw0NikuYiwzMykuemcoKSxHIT1udWxsJiZ1bihHLFN0KSYmKHQuZC5kPVopO2JyZWFrO2Nhc2UgMTpmb3Iocz1uZXcgUmUodC5jLmcsdC5jLmYpLHMuYSo9LjUscy5iKj0uNSxGbShzLHQuYy5pLHQuYy5qKSxvPWJzLGJ0PW5ldyBTKHQuZC5pKTtidC5hPGJ0LmMuYy5sZW5ndGg7KVo9dShRKGJ0KSw2NSksaz1HcChaLmEscyksazxvJiYobz1rLHQuZC5kPVopO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbnQobmV3IFBuKHBIKyhqdC5mIT1udWxsP2p0LmY6IiIranQuZykpKX1yZXR1cm4gdC5kfWZ1bmN0aW9uIFBoZSh0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWixidCxNdCxTdCxqdCxRdCxjZTtmb3IoUXQ9dShBdCgoIXQuYSYmKHQuYT1uZXcgaGUodXMsdCw2LDYpKSx0LmEpLDApLDIwMiksXz1uZXcganUsanQ9bmV3IEFyLGNlPVF1ZShRdCksbHUoanQuZixRdCxjZSksQj1uZXcgQXIscj1uZXcgY3MsRz1qcChJMSh1dChvdCgkMSwxKSxNZSwyMCwwLFsoIWUuZCYmKGUuZD1uZXcgRW4ocmEsZSw4LDUpKSxlLmQpLCghZS5lJiYoZS5lPW5ldyBFbihyYSxlLDcsNCkpLGUuZSldKSkpO1ZyKEcpOyl7aWYocT11KElyKEcpLDc5KSwoIXQuYSYmKHQuYT1uZXcgaGUodXMsdCw2LDYpKSx0LmEpLmkhPTEpdGhyb3cgbnQobmV3IFBuKGNkZSsoIXQuYSYmKHQuYT1uZXcgaGUodXMsdCw2LDYpKSx0LmEpLmkpKTtxIT10JiYoWj11KEF0KCghcS5hJiYocS5hPW5ldyBoZSh1cyxxLDYsNikpLHEuYSksMCksMjAyKSxrcyhyLFosci5jLmIsci5jKSxXPXUoY2MoRm8oanQuZixaKSksMTIpLFd8fChXPVF1ZShaKSxsdShqdC5mLFosVykpLE09bj9mYShuZXcgU28odShQZShjZSxjZS5jLmxlbmd0aC0xKSw4KSksdShQZShXLFcuYy5sZW5ndGgtMSksOCkpOmZhKG5ldyBTbygoU24oMCxjZS5jLmxlbmd0aCksdShjZS5jWzBdLDgpKSksKFNuKDAsVy5jLmxlbmd0aCksdShXLmNbMF0sOCkpKSxsdShCLmYsWixNKSl9aWYoci5iIT0wKWZvcihidD11KFBlKGNlLG4/Y2UuYy5sZW5ndGgtMTowKSw4KSxrPTE7azxjZS5jLmxlbmd0aDtrKyspe2ZvcihNdD11KFBlKGNlLG4/Y2UuYy5sZW5ndGgtMS1rOmspLDgpLHM9c2kociwwKTtzLmIhPXMuZC5jOylaPXUoaWkocyksMjAyKSxXPXUoY2MoRm8oanQuZixaKSksMTIpLFcuYy5sZW5ndGg8PWs/SCQocyk6KFN0PUZpKG5ldyBTbyh1KFBlKFcsbj9XLmMubGVuZ3RoLTEtazprKSw4KSksdShjYyhGbyhCLmYsWikpLDgpKSwoTXQuYSE9U3QuYXx8TXQuYiE9U3QuYikmJihvPU10LmEtYnQuYSxkPU10LmItYnQuYixoPVN0LmEtYnQuYSx3PVN0LmItYnQuYixoKmQ9PXcqbyYmKG89PTB8fGlzTmFOKG8pP286bzwwPy0xOjEpPT0oaD09MHx8aXNOYU4oaCk/aDpoPDA/LTE6MSkmJihkPT0wfHxpc05hTihkKT9kOmQ8MD8tMToxKT09KHc9PTB8fGlzTmFOKHcpP3c6dzwwPy0xOjEpPyhiLk1hdGguYWJzKG8pPGIuTWF0aC5hYnMoaCl8fGIuTWF0aC5hYnMoZCk8Yi5NYXRoLmFicyh3KSkmJmtzKF8sTXQsXy5jLmIsXy5jKTprPjEmJmtzKF8sYnQsXy5jLmIsXy5jKSxIJChzKSkpO2J0PU10fXJldHVybiBffWZ1bmN0aW9uIEQ1bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWixidCxNdCxTdCxqdCxRdCxjZSxfZSxXZSxRZSxSbix6bixocix4aSxLcyxlaCxaaCxYMTtmb3IobXIobiwiR3JlZWR5IGN5Y2xlIHJlbW92YWwiLDEpLFN0PWUuYSxYMT1TdC5jLmxlbmd0aCx0LmE9TnQoU3IsSnIsMjUsWDEsMTUsMSksdC5jPU50KFNyLEpyLDI1LFgxLDE1LDEpLHQuYj1OdChTcixKciwyNSxYMSwxNSwxKSxrPTAsYnQ9bmV3IFMoU3QpO2J0LmE8YnQuYy5jLmxlbmd0aDspe2ZvcihXPXUoUShidCksMTApLFcucD1rLFFlPW5ldyBTKFcuaik7UWUuYTxRZS5jLmMubGVuZ3RoOyl7Zm9yKGNlPXUoUShRZSksMTEpLGQ9bmV3IFMoY2UuZSk7ZC5hPGQuYy5jLmxlbmd0aDspcj11KFEoZCksMTcpLHIuYy5pIT1XJiYoaHI9dShLKHIsKHhlKCksYkUpKSwxOSkuYSx0LmFba10rPWhyPjA/aHIrMToxKTtmb3IoaD1uZXcgUyhjZS5nKTtoLmE8aC5jLmMubGVuZ3RoOylyPXUoUShoKSwxNyksci5kLmkhPVcmJihocj11KEsociwoeGUoKSxiRSkpLDE5KS5hLHQuY1trXSs9aHI+MD9ocisxOjEpfXQuY1trXT09MD9haSh0LmUsVyk6dC5hW2tdPT0wJiZhaSh0LmYsVyksKytrfWZvcihHPS0xLHE9MSxNPW5ldyBsZSx0LmQ9dShLKGUsKGFlKCksSXgpKSwyMzApO1gxPjA7KXtmb3IoO3QuZS5iIT0wOylLcz11KFRudCh0LmUpLDEwKSx0LmJbS3MucF09Ry0tLEc1dCh0LEtzKSwtLVgxO2Zvcig7dC5mLmIhPTA7KWVoPXUoVG50KHQuZiksMTApLHQuYltlaC5wXT1xKyssRzV0KHQsZWgpLC0tWDE7aWYoWDE+MCl7Zm9yKEI9T2EsTXQ9bmV3IFMoU3QpO010LmE8TXQuYy5jLmxlbmd0aDspVz11KFEoTXQpLDEwKSx0LmJbVy5wXT09MCYmKGp0PXQuY1tXLnBdLXQuYVtXLnBdLGp0Pj1CJiYoanQ+QiYmKE0uYz1OdChRbixNZSwxLDAsNSwxKSxCPWp0KSxNLmNbTS5jLmxlbmd0aF09VykpO189dC5aZihNKSx0LmJbXy5wXT1xKyssRzV0KHQsXyksLS1YMX19Zm9yKHhpPVN0LmMubGVuZ3RoKzEsaz0wO2s8U3QuYy5sZW5ndGg7aysrKXQuYltrXTwwJiYodC5iW2tdKz14aSk7Zm9yKFo9bmV3IFMoU3QpO1ouYTxaLmMuYy5sZW5ndGg7KWZvcihXPXUoUShaKSwxMCksem49Z1p0KFcuaiksX2U9em4sV2U9MCxSbj1fZS5sZW5ndGg7V2U8Um47KytXZSlmb3IoY2U9X2VbV2VdLFF0PXBkKGNlLmcpLHM9UXQsbz0wLHc9cy5sZW5ndGg7bzx3OysrbylyPXNbb10sWmg9ci5kLmkucCx0LmJbVy5wXT50LmJbWmhdJiYoZHcociwhMCksZWUoZSx4TywoRm4oKSwhMCkpKTt0LmE9bnVsbCx0LmM9bnVsbCx0LmI9bnVsbCxNaCh0LmYpLE1oKHQuZSksb3Iobil9ZnVuY3Rpb24gRmhlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxfLE0sQixxLEcsVyxaLGJ0O2ZvcihyPW5ldyBsZSxkPW5ldyBsZSxaPWUvMixxPXQuZ2MoKSxzPXUodC5YYigwKSw4KSxidD11KHQuWGIoMSksOCksRz1Lc3Qocy5hLHMuYixidC5hLGJ0LmIsWiksdWUociwoU24oMCxHLmMubGVuZ3RoKSx1KEcuY1swXSw4KSkpLHVlKGQsKFNuKDEsRy5jLmxlbmd0aCksdShHLmNbMV0sOCkpKSxrPTI7azxxO2srKylXPXMscz1idCxidD11KHQuWGIoayksOCksRz1Lc3Qocy5hLHMuYixXLmEsVy5iLFopLHVlKHIsKFNuKDEsRy5jLmxlbmd0aCksdShHLmNbMV0sOCkpKSx1ZShkLChTbigwLEcuYy5sZW5ndGgpLHUoRy5jWzBdLDgpKSksRz1Lc3Qocy5hLHMuYixidC5hLGJ0LmIsWiksdWUociwoU24oMCxHLmMubGVuZ3RoKSx1KEcuY1swXSw4KSkpLHVlKGQsKFNuKDEsRy5jLmxlbmd0aCksdShHLmNbMV0sOCkpKTtmb3IoRz1Lc3QoYnQuYSxidC5iLHMuYSxzLmIsWiksdWUociwoU24oMSxHLmMubGVuZ3RoKSx1KEcuY1sxXSw4KSkpLHVlKGQsKFNuKDAsRy5jLmxlbmd0aCksdShHLmNbMF0sOCkpKSxuPW5ldyBqdSxoPW5ldyBsZSxhaShuLChTbigwLHIuYy5sZW5ndGgpLHUoci5jWzBdLDgpKSksXz0xO188ci5jLmxlbmd0aC0yO18rPTIpbz0oU24oXyxyLmMubGVuZ3RoKSx1KHIuY1tfXSw4KSksQj1ZYWUoKFNuKF8tMSxyLmMubGVuZ3RoKSx1KHIuY1tfLTFdLDgpKSxvLChTbihfKzEsci5jLmxlbmd0aCksdShyLmNbXysxXSw4KSksKFNuKF8rMixyLmMubGVuZ3RoKSx1KHIuY1tfKzJdLDgpKSksIWlzRmluaXRlKEIuYSl8fCFpc0Zpbml0ZShCLmIpP2tzKG4sbyxuLmMuYixuLmMpOmtzKG4sQixuLmMuYixuLmMpO2ZvcihhaShuLHUoUGUocixyLmMubGVuZ3RoLTEpLDgpKSx1ZShoLChTbigwLGQuYy5sZW5ndGgpLHUoZC5jWzBdLDgpKSksTT0xO008ZC5jLmxlbmd0aC0yO00rPTIpbz0oU24oTSxkLmMubGVuZ3RoKSx1KGQuY1tNXSw4KSksQj1ZYWUoKFNuKE0tMSxkLmMubGVuZ3RoKSx1KGQuY1tNLTFdLDgpKSxvLChTbihNKzEsZC5jLmxlbmd0aCksdShkLmNbTSsxXSw4KSksKFNuKE0rMixkLmMubGVuZ3RoKSx1KGQuY1tNKzJdLDgpKSksIWlzRmluaXRlKEIuYSl8fCFpc0Zpbml0ZShCLmIpP2guY1toLmMubGVuZ3RoXT1vOmguY1toLmMubGVuZ3RoXT1CO2Zvcih1ZShoLHUoUGUoZCxkLmMubGVuZ3RoLTEpLDgpKSx3PWguYy5sZW5ndGgtMTt3Pj0wO3ctLSlhaShuLChTbih3LGguYy5sZW5ndGgpLHUoaC5jW3ddLDgpKSk7cmV0dXJuIG59ZnVuY3Rpb24gSTVuKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxfLE0sQixxO2lmKGg9ITAsTT1udWxsLHI9bnVsbCxzPW51bGwsZT0hMSxxPXE0ZSxrPW51bGwsbz1udWxsLGQ9MCx3PXRzdCh0LGQsVUF0LFdBdCksdzx0Lmxlbmd0aCYmKCRyKHcsdC5sZW5ndGgpLHQuY2hhckNvZGVBdCh3KT09NTgpJiYoTT10LnN1YnN0cihkLHctZCksZD13KzEpLG49TSE9bnVsbCYmcE0oclUsTS50b0xvd2VyQ2FzZSgpKSxuKXtpZih3PXQubGFzdEluZGV4T2YoIiEvIiksdz09LTEpdGhyb3cgbnQobmV3IFBuKCJubyBhcmNoaXZlIHNlcGFyYXRvciIpKTtoPSEwLHI9QmwodCxkLCsrdyksZD13fWVsc2UgZD49MCYmdW4odC5zdWJzdHIoZCwyKSwiLy8iKT8oZCs9Mix3PXRzdCh0LGQsaUEsc0EpLHI9dC5zdWJzdHIoZCx3LWQpLGQ9dyk6TSE9bnVsbCYmKGQ9PXQubGVuZ3RofHwoJHIoZCx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGQpIT00NykpJiYoaD0hMSx3PUUydCh0LEx1KDM1KSxkKSx3PT0tMSYmKHc9dC5sZW5ndGgpLHI9dC5zdWJzdHIoZCx3LWQpLGQ9dyk7aWYoIW4mJmQ8dC5sZW5ndGgmJigkcihkLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoZCk9PTQ3KSYmKHc9dHN0KHQsZCsxLGlBLHNBKSxfPXQuc3Vic3RyKGQrMSx3LShkKzEpKSxfLmxlbmd0aD4wJiZUYShfLF8ubGVuZ3RoLTEpPT01OCYmKHM9XyxkPXcpKSxkPHQubGVuZ3RoJiYoJHIoZCx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGQpPT00NykmJigrK2QsZT0hMCksZDx0Lmxlbmd0aCYmKCRyKGQsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChkKSE9NjMpJiYoJHIoZCx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGQpIT0zNSkpe2ZvcihCPW5ldyBsZTtkPHQubGVuZ3RoJiYoJHIoZCx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGQpIT02MykmJigkcihkLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoZCkhPTM1KTspdz10c3QodCxkLGlBLHNBKSx1ZShCLHQuc3Vic3RyKGQsdy1kKSksZD13LGQ8dC5sZW5ndGgmJigkcihkLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoZCk9PTQ3KSYmKHl1bih0LCsrZCl8fChCLmNbQi5jLmxlbmd0aF09IiIpKTtxPU50KExlLHJlLDIsQi5jLmxlbmd0aCw2LDEpLFAxKEIscSl9cmV0dXJuIGQ8dC5sZW5ndGgmJigkcihkLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoZCk9PTYzKSYmKHc9YzgodCwzNSwrK2QpLHc9PS0xJiYodz10Lmxlbmd0aCksaz10LnN1YnN0cihkLHctZCksZD13KSxkPHQubGVuZ3RoJiYobz1PTSh0LCsrZCkpLGszbihoLE0scixzLHEsayksbmV3IHJhdChoLE0scixzLGUscSxrLG8pfWZ1bmN0aW9uIE81bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWixidCxNdCxTdCxqdCxRdCxjZSxfZSxXZSxRZSxSbix6bixocix4aSxLcyxlaCxaaDtmb3IoS3M9bmV3IGxlLEc9bmV3IFMoZS5iKTtHLmE8Ry5jLmMubGVuZ3RoOylmb3IoQj11KFEoRyksMjkpLFF0PW5ldyBTKEIuYSk7UXQuYTxRdC5jLmMubGVuZ3RoOyl7Zm9yKGp0PXUoUShRdCksMTApLGp0LnA9LTEsTT1PYSxXZT1PYSxSbj1uZXcgUyhqdC5qKTtSbi5hPFJuLmMuYy5sZW5ndGg7KXtmb3IoUWU9dShRKFJuKSwxMSkscz1uZXcgUyhRZS5lKTtzLmE8cy5jLmMubGVuZ3RoOyluPXUoUShzKSwxNyksem49dShLKG4sKHhlKCksUHgpKSwxOSkuYSxNPWIuTWF0aC5tYXgoTSx6bik7Zm9yKHI9bmV3IFMoUWUuZyk7ci5hPHIuYy5jLmxlbmd0aDspbj11KFEociksMTcpLHpuPXUoSyhuLCh4ZSgpLFB4KSksMTkpLmEsV2U9Yi5NYXRoLm1heChXZSx6bil9ZWUoanQscEcsZGUoTSkpLGVlKGp0LGJHLGRlKFdlKSl9Zm9yKGJ0PTAscT1uZXcgUyhlLmIpO3EuYTxxLmMuYy5sZW5ndGg7KWZvcihCPXUoUShxKSwyOSksUXQ9bmV3IFMoQi5hKTtRdC5hPFF0LmMuYy5sZW5ndGg7KWp0PXUoUShRdCksMTApLGp0LnA8MCYmKHhpPW5ldyBEcHQseGkuYj1idCsrLG11ZSh0LGp0LHhpKSxLcy5jW0tzLmMubGVuZ3RoXT14aSk7Zm9yKF9lPUhkKEtzLmMubGVuZ3RoKSxfPUhkKEtzLmMubGVuZ3RoKSxoPTA7aDxLcy5jLmxlbmd0aDtoKyspdWUoX2UsbmV3IGxlKSx1ZShfLGRlKDApKTtmb3IobjRuKGUsS3MsX2UsXyksZWg9dShQMShLcyxOdCh3bWUsXzFlLDI1NyxLcy5jLmxlbmd0aCwwLDEpKSw4NDApLGNlPXUoUDEoX2UsTnQobWgseHksMTUsX2UuYy5sZW5ndGgsMCwxKSksMTkyKSxrPU50KFNyLEpyLDI1LF8uYy5sZW5ndGgsMTUsMSksZD0wO2Q8ay5sZW5ndGg7ZCsrKWtbZF09KFNuKGQsXy5jLmxlbmd0aCksdShfLmNbZF0sMTkpKS5hO2ZvcihNdD0wLFN0PW5ldyBsZSx3PTA7dzxlaC5sZW5ndGg7dysrKWtbd109PTAmJnVlKFN0LGVoW3ddKTtmb3IoWj1OdChTcixKciwyNSxlaC5sZW5ndGgsMTUsMSk7U3QuYy5sZW5ndGghPTA7KWZvcih4aT11KElnKFN0LDApLDI1NyksWlt4aS5iXT1NdCsrOyFjZVt4aS5iXS5kYygpOylaaD11KGNlW3hpLmJdLiRjKDApLDI1NyksLS1rW1poLmJdLGtbWmguYl09PTAmJihTdC5jW1N0LmMubGVuZ3RoXT1aaCk7Zm9yKHQuYT1OdCh3bWUsXzFlLDI1NyxlaC5sZW5ndGgsMCwxKSxvPTA7bzxlaC5sZW5ndGg7bysrKWZvcihXPWVoW29dLGhyPVpbb10sdC5hW2hyXT1XLFcuYj1ocixRdD1uZXcgUyhXLmUpO1F0LmE8UXQuYy5jLmxlbmd0aDspanQ9dShRKFF0KSwxMCksanQucD1ocjtyZXR1cm4gdC5hfWZ1bmN0aW9uIG1pKHQpe3ZhciBlLG4scjtpZih0LmQ+PXQuail7dC5hPS0xLHQuYz0xO3JldHVybn1pZihlPVRhKHQuaSx0LmQrKyksdC5hPWUsdC5iPT0xKXtzd2l0Y2goZSl7Y2FzZSA5MjppZihyPTEwLHQuZD49dC5qKXRocm93IG50KG5ldyBScihHcigoRnIoKSxrSCkpKSk7dC5hPVRhKHQuaSx0LmQrKyk7YnJlYWs7Y2FzZSA0NToodC5lJjUxMik9PTUxMiYmdC5kPHQuaiYmVGEodC5pLHQuZCk9PTkxPygrK3QuZCxyPTI0KTpyPTA7YnJlYWs7Y2FzZSA5MTppZigodC5lJjUxMikhPTUxMiYmdC5kPHQuaiYmVGEodC5pLHQuZCk9PTU4KXsrK3QuZCxyPTIwO2JyZWFrfWRlZmF1bHQ6KGUmNjQ1MTIpPT1PSSYmdC5kPHQuaiYmKG49VGEodC5pLHQuZCksKG4mNjQ1MTIpPT01NjMyMCYmKHQuYT1RYSsoZS1PSTw8MTApK24tNTYzMjAsKyt0LmQpKSxyPTB9dC5jPXI7cmV0dXJufXN3aXRjaChlKXtjYXNlIDEyNDpyPTI7YnJlYWs7Y2FzZSA0MjpyPTM7YnJlYWs7Y2FzZSA0MzpyPTQ7YnJlYWs7Y2FzZSA2MzpyPTU7YnJlYWs7Y2FzZSA0MTpyPTc7YnJlYWs7Y2FzZSA0NjpyPTg7YnJlYWs7Y2FzZSA5MTpyPTk7YnJlYWs7Y2FzZSA5NDpyPTExO2JyZWFrO2Nhc2UgMzY6cj0xMjticmVhaztjYXNlIDQwOmlmKHI9Nix0LmQ+PXQuanx8VGEodC5pLHQuZCkhPTYzKWJyZWFrO2lmKCsrdC5kPj10LmopdGhyb3cgbnQobmV3IFJyKEdyKChGcigpLFpjdCkpKSk7c3dpdGNoKGU9VGEodC5pLHQuZCsrKSxlKXtjYXNlIDU4OnI9MTM7YnJlYWs7Y2FzZSA2MTpyPTE0O2JyZWFrO2Nhc2UgMzM6cj0xNTticmVhaztjYXNlIDkxOnI9MTk7YnJlYWs7Y2FzZSA2MjpyPTE4O2JyZWFrO2Nhc2UgNjA6aWYodC5kPj10LmopdGhyb3cgbnQobmV3IFJyKEdyKChGcigpLFpjdCkpKSk7aWYoZT1UYSh0LmksdC5kKyspLGU9PTYxKXI9MTY7ZWxzZSBpZihlPT0zMylyPTE3O2Vsc2UgdGhyb3cgbnQobmV3IFJyKEdyKChGcigpLFBkZSkpKSk7YnJlYWs7Y2FzZSAzNTpmb3IoO3QuZDx0LmomJihlPVRhKHQuaSx0LmQrKyksZSE9NDEpOyk7aWYoZSE9NDEpdGhyb3cgbnQobmV3IFJyKEdyKChGcigpLEZkZSkpKSk7cj0yMTticmVhaztkZWZhdWx0OmlmKGU9PTQ1fHw5Nzw9ZSYmZTw9MTIyfHw2NTw9ZSYmZTw9OTApey0tdC5kLHI9MjI7YnJlYWt9ZWxzZSBpZihlPT00MCl7cj0yMzticmVha310aHJvdyBudChuZXcgUnIoR3IoKEZyKCksWmN0KSkpKX1icmVhaztjYXNlIDkyOmlmKHI9MTAsdC5kPj10LmopdGhyb3cgbnQobmV3IFJyKEdyKChGcigpLGtIKSkpKTt0LmE9VGEodC5pLHQuZCsrKTticmVhaztkZWZhdWx0OnI9MH10LmM9cn1mdW5jdGlvbiBONW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFosYnQsTXQsU3QsanQsUXQsY2UsX2UsV2UsUWUsUm4sem4saHI7aWYoX2U9dShLKHQsKHhlKCksd3MpKSw5OCksX2UhPSh2YSgpLFUxKSYmX2UhPWtiKXtmb3IoRz10LmIscT1HLmMubGVuZ3RoLF89bmV3IEpjKChxbChxKzIsamF0KSxxJChSYShSYSg1LHErMiksKHErMikvMTB8MCkpKSksVz1uZXcgSmMoKHFsKHErMixqYXQpLHEkKFJhKFJhKDUscSsyKSwocSsyKS8xMHwwKSkpKSx1ZShfLG5ldyBBciksdWUoXyxuZXcgQXIpLHVlKFcsbmV3IGxlKSx1ZShXLG5ldyBsZSksY2U9bmV3IGxlLGU9MDtlPHE7ZSsrKWZvcihuPShTbihlLEcuYy5sZW5ndGgpLHUoRy5jW2VdLDI5KSksV2U9KFNuKGUsXy5jLmxlbmd0aCksdShfLmNbZV0sODMpKSxaPW5ldyBBcixfLmNbXy5jLmxlbmd0aF09WixSbj0oU24oZSxXLmMubGVuZ3RoKSx1KFcuY1tlXSwxNSkpLE10PW5ldyBsZSxXLmNbVy5jLmxlbmd0aF09TXQscz1uZXcgUyhuLmEpO3MuYTxzLmMuYy5sZW5ndGg7KXtpZihyPXUoUShzKSwxMCksWXl0KHIpKXtjZS5jW2NlLmMubGVuZ3RoXT1yO2NvbnRpbnVlfWZvcihrPW5ldyBhcihscihVbyhyKS5hLktjKCksbmV3IEgpKTtWcihrKTspZD11KElyKGspLDE3KSx6bj1kLmMuaSxZeXQoem4pJiYoUWU9dShXZS54YyhLKHpuLChhZSgpLElpKSkpLDEwKSxRZXx8KFFlPWJvZSh0LHpuKSxXZS56YyhLKHpuLElpKSxRZSksUm4uRmMoUWUpKSxCYShkLHUoUGUoUWUuaiwxKSwxMSkpKTtmb3Iodz1uZXcgYXIobHIoJHMocikuYS5LYygpLG5ldyBIKSk7VnIodyk7KWQ9dShJcih3KSwxNyksaHI9ZC5kLmksWXl0KGhyKSYmKGJ0PXUodHIoWixLKGhyLChhZSgpLElpKSkpLDEwKSxidHx8KGJ0PWJvZSh0LGhyKSxBaShaLEsoaHIsSWkpLGJ0KSxNdC5jW010LmMubGVuZ3RoXT1idCkscGEoZCx1KFBlKGJ0LmosMCksMTEpKSl9Zm9yKE09MDtNPFcuYy5sZW5ndGg7TSsrKWlmKFN0PShTbihNLFcuYy5sZW5ndGgpLHUoVy5jW01dLDE1KSksIVN0LmRjKCkpZm9yKEI9bnVsbCxNPT0wPyhCPW5ldyBMaCh0KSxVbSgwLEcuYy5sZW5ndGgpLFdUKEcuYywwLEIpKTpNPT1fLmMubGVuZ3RoLTE/KEI9bmV3IExoKHQpLEcuY1tHLmMubGVuZ3RoXT1CKTpCPShTbihNLTEsRy5jLmxlbmd0aCksdShHLmNbTS0xXSwyOSkpLGg9U3QuS2MoKTtoLk9iKCk7KW89dShoLlBiKCksMTApLExvKG8sQik7Zm9yKFF0PW5ldyBTKGNlKTtRdC5hPFF0LmMuYy5sZW5ndGg7KWp0PXUoUShRdCksMTApLExvKGp0LG51bGwpO2VlKHQsKGFlKCksUGx0KSxjZSl9fWZ1bmN0aW9uIFA1bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWixidCxNdCxTdCxqdCxRdDtpZihtcihuLCJDb2ZmbWFuLUdyYWhhbSBMYXllcmluZyIsMSksZS5hLmMubGVuZ3RoPT0wKXtvcihuKTtyZXR1cm59Zm9yKFF0PXUoSyhlLCh4ZSgpLEtUdCkpLDE5KS5hLHc9MCxoPTAsQj1uZXcgUyhlLmEpO0IuYTxCLmMuYy5sZW5ndGg7KWZvcihNPXUoUShCKSwxMCksTS5wPXcrKyxvPW5ldyBhcihscigkcyhNKS5hLktjKCksbmV3IEgpKTtWcihvKTspcz11KElyKG8pLDE3KSxzLnA9aCsrO2Zvcih0LmQ9TnQoeGwsaTAsMjUsdywxNiwxKSx0LmE9TnQoeGwsaTAsMjUsaCwxNiwxKSx0LmI9TnQoU3IsSnIsMjUsdywxNSwxKSx0LmU9TnQoU3IsSnIsMjUsdywxNSwxKSx0LmY9TnQoU3IsSnIsMjUsdywxNSwxKSxRJCh0LmMpLGVkbih0LGUpLEc9bmV3IEdqKG5ldyBpUih0KSksanQ9bmV3IFMoZS5hKTtqdC5hPGp0LmMuYy5sZW5ndGg7KXtmb3IoTXQ9dShRKGp0KSwxMCksbz1uZXcgYXIobHIoVW8oTXQpLmEuS2MoKSxuZXcgSCkpO1ZyKG8pOylzPXUoSXIobyksMTcpLHQuYVtzLnBdfHwrK3QuYltNdC5wXTt0LmJbTXQucF09PTAmJkE4KGg3KEcsTXQpKX1mb3IoZD0wO0cuYi5jLmxlbmd0aCE9MDspZm9yKE10PXUoSnJ0KEcpLDEwKSx0LmZbTXQucF09ZCsrLG89bmV3IGFyKGxyKCRzKE10KS5hLktjKCksbmV3IEgpKTtWcihvKTspcz11KElyKG8pLDE3KSwhdC5hW3MucF0mJihaPXMuZC5pLC0tdC5iW1oucF0sY24odC5jLFosZGUodC5mW010LnBdKSksdC5iW1oucF09PTAmJkE4KGg3KEcsWikpKTtmb3IocT1uZXcgR2oobmV3IHp0dCh0KSksU3Q9bmV3IFMoZS5hKTtTdC5hPFN0LmMuYy5sZW5ndGg7KXtmb3IoTXQ9dShRKFN0KSwxMCksbz1uZXcgYXIobHIoJHMoTXQpLmEuS2MoKSxuZXcgSCkpO1ZyKG8pOylzPXUoSXIobyksMTcpLHQuYVtzLnBdfHwrK3QuZVtNdC5wXTt0LmVbTXQucF09PTAmJkE4KGg3KHEsTXQpKX1mb3IoXz1uZXcgbGUscj1EUXQoZSxfKTtxLmIuYy5sZW5ndGghPTA7KWZvcihidD11KEpydChxKSwxMCksKHIuYS5jLmxlbmd0aD49UXR8fCFlaG4oYnQscikpJiYocj1EUXQoZSxfKSksTG8oYnQsciksbz1uZXcgYXIobHIoVW8oYnQpLmEuS2MoKSxuZXcgSCkpO1ZyKG8pOylzPXUoSXIobyksMTcpLCF0LmFbcy5wXSYmKFc9cy5jLmksLS10LmVbVy5wXSx0LmVbVy5wXT09MCYmQTgoaDcocSxXKSkpO2ZvcihrPV8uYy5sZW5ndGgtMTtrPj0wOy0tayl1ZShlLmIsKFNuKGssXy5jLmxlbmd0aCksdShfLmNba10sMjkpKSk7ZS5hLmM9TnQoUW4sTWUsMSwwLDUsMSksb3Iobil9ZnVuY3Rpb24gQmhlKHQpe3ZhciBlLG4scixzLG8saCxkLHcsaztmb3IodC5iPTEsbWkodCksZT1udWxsLHQuYz09MCYmdC5hPT05ND8obWkodCksZT0oeWkoKSx5aSgpLG5ldyBqbCg0KSkscWMoZSwwLEc3KSxkPW5ldyBqbCg0KSk6ZD0oeWkoKSx5aSgpLG5ldyBqbCg0KSkscz0hMDsoaz10LmMpIT0xOyl7aWYoaz09MCYmdC5hPT05MyYmIXMpe2UmJihDQyhlLGQpLGQ9ZSk7YnJlYWt9aWYobj10LmEscj0hMSxrPT0xMClzd2l0Y2gobil7Y2FzZSAxMDA6Y2FzZSA2ODpjYXNlIDExOTpjYXNlIDg3OmNhc2UgMTE1OmNhc2UgODM6dnkoZCx5NyhuKSkscj0hMDticmVhaztjYXNlIDEwNTpjYXNlIDczOmNhc2UgOTk6Y2FzZSA2NzpuPSh2eShkLHk3KG4pKSwtMSksbjwwJiYocj0hMCk7YnJlYWs7Y2FzZSAxMTI6Y2FzZSA4MDppZih3PUo0dCh0LG4pLCF3KXRocm93IG50KG5ldyBScihHcigoRnIoKSxKY3QpKSkpO3Z5KGQsdykscj0hMDticmVhaztkZWZhdWx0Om49TzV0KHQpfWVsc2UgaWYoaz09MjQmJiFzKXtpZihlJiYoQ0MoZSxkKSxkPWUpLG89QmhlKHQpLENDKGQsbyksdC5jIT0wfHx0LmEhPTkzKXRocm93IG50KG5ldyBScihHcigoRnIoKSxHZGUpKSkpO2JyZWFrfWlmKG1pKHQpLCFyKXtpZihrPT0wKXtpZihuPT05MSl0aHJvdyBudChuZXcgUnIoR3IoKEZyKCksVDh0KSkpKTtpZihuPT05Myl0aHJvdyBudChuZXcgUnIoR3IoKEZyKCksXzh0KSkpKTtpZihuPT00NSYmIXMmJnQuYSE9OTMpdGhyb3cgbnQobmV3IFJyKEdyKChGcigpLHR1dCkpKSl9aWYodC5jIT0wfHx0LmEhPTQ1fHxuPT00NSYmcylxYyhkLG4sbik7ZWxzZXtpZihtaSh0KSwoaz10LmMpPT0xKXRocm93IG50KG5ldyBScihHcigoRnIoKSxFSCkpKSk7aWYoaz09MCYmdC5hPT05MylxYyhkLG4sbikscWMoZCw0NSw0NSk7ZWxzZXtpZihrPT0wJiZ0LmE9PTkzfHxrPT0yNCl0aHJvdyBudChuZXcgUnIoR3IoKEZyKCksdHV0KSkpKTtpZihoPXQuYSxrPT0wKXtpZihoPT05MSl0aHJvdyBudChuZXcgUnIoR3IoKEZyKCksVDh0KSkpKTtpZihoPT05Myl0aHJvdyBudChuZXcgUnIoR3IoKEZyKCksXzh0KSkpKTtpZihoPT00NSl0aHJvdyBudChuZXcgUnIoR3IoKEZyKCksdHV0KSkpKX1lbHNlIGs9PTEwJiYoaD1PNXQodCkpO2lmKG1pKHQpLG4+aCl0aHJvdyBudChuZXcgUnIoR3IoKEZyKCksS2RlKSkpKTtxYyhkLG4saCl9fX1zPSExfWlmKHQuYz09MSl0aHJvdyBudChuZXcgUnIoR3IoKEZyKCksRUgpKSkpO3JldHVybiB2NChkKSxUQyhkKSx0LmI9MCxtaSh0KSxkfWZ1bmN0aW9uIEY1bih0KXtOcih0LmMsWnIsdXQob3QoTGUsMSkscmUsMiw2LFtOYSwiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjZGVjaW1hbCJdKSksTnIodC5kLFpyLHV0KG90KExlLDEpLHJlLDIsNixbTmEsImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2ludGVnZXIiXSkpLE5yKHQuZSxacix1dChvdChMZSwxKSxyZSwyLDYsW05hLCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNib29sZWFuIl0pKSxOcih0LmYsWnIsdXQob3QoTGUsMSkscmUsMiw2LFtOYSwiRUJvb2xlYW4iLGZpLCJFQm9vbGVhbjpPYmplY3QiXSkpLE5yKHQuaSxacix1dChvdChMZSwxKSxyZSwyLDYsW05hLCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNieXRlIl0pKSxOcih0LmcsWnIsdXQob3QoTGUsMSkscmUsMiw2LFtOYSwiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjaGV4QmluYXJ5Il0pKSxOcih0LmosWnIsdXQob3QoTGUsMSkscmUsMiw2LFtOYSwiRUJ5dGUiLGZpLCJFQnl0ZTpPYmplY3QiXSkpLE5yKHQubixacix1dChvdChMZSwxKSxyZSwyLDYsW05hLCJFQ2hhciIsZmksIkVDaGFyOk9iamVjdCJdKSksTnIodC50LFpyLHV0KG90KExlLDEpLHJlLDIsNixbTmEsImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2RvdWJsZSJdKSksTnIodC51LFpyLHV0KG90KExlLDEpLHJlLDIsNixbTmEsIkVEb3VibGUiLGZpLCJFRG91YmxlOk9iamVjdCJdKSksTnIodC5GLFpyLHV0KG90KExlLDEpLHJlLDIsNixbTmEsImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2Zsb2F0Il0pKSxOcih0LkcsWnIsdXQob3QoTGUsMSkscmUsMiw2LFtOYSwiRUZsb2F0IixmaSwiRUZsb2F0Ok9iamVjdCJdKSksTnIodC5JLFpyLHV0KG90KExlLDEpLHJlLDIsNixbTmEsImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2ludCJdKSksTnIodC5KLFpyLHV0KG90KExlLDEpLHJlLDIsNixbTmEsIkVJbnQiLGZpLCJFSW50Ok9iamVjdCJdKSksTnIodC5OLFpyLHV0KG90KExlLDEpLHJlLDIsNixbTmEsImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2xvbmciXSkpLE5yKHQuTyxacix1dChvdChMZSwxKSxyZSwyLDYsW05hLCJFTG9uZyIsZmksIkVMb25nOk9iamVjdCJdKSksTnIodC5aLFpyLHV0KG90KExlLDEpLHJlLDIsNixbTmEsImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3Nob3J0Il0pKSxOcih0LiQsWnIsdXQob3QoTGUsMSkscmUsMiw2LFtOYSwiRVNob3J0IixmaSwiRVNob3J0Ok9iamVjdCJdKSksTnIodC5fLFpyLHV0KG90KExlLDEpLHJlLDIsNixbTmEsImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyJdKSl9ZnVuY3Rpb24gQjVuKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxfLE0sQixxLEcsVyxaLGJ0LE10LFN0LGp0LFF0LGNlLF9lLFdlLFFlLFJuLHpuLGhyO2lmKHQuYy5sZW5ndGg9PTEpcmV0dXJuIFNuKDAsdC5jLmxlbmd0aCksdSh0LmNbMF0sMTM1KTtpZih0LmMubGVuZ3RoPD0wKXJldHVybiBuZXcgQSQ7Zm9yKHc9bmV3IFModCk7dy5hPHcuYy5jLmxlbmd0aDspe2ZvcihoPXUoUSh3KSwxMzUpLE10PTAsRz1UaSxXPVRpLEI9T2EscT1PYSxidD1zaShoLmIsMCk7YnQuYiE9YnQuZC5jOylaPXUoaWkoYnQpLDg2KSxNdCs9dShLKFosKGh3KCksRUcpKSwxOSkuYSxHPWIuTWF0aC5taW4oRyxaLmUuYSksVz1iLk1hdGgubWluKFcsWi5lLmIpLEI9Yi5NYXRoLm1heChCLFouZS5hK1ouZi5hKSxxPWIuTWF0aC5tYXgocSxaLmUuYitaLmYuYik7ZWUoaCwoaHcoKSxFRyksZGUoTXQpKSxlZShoLChtYygpLEJTKSxuZXcgUmUoRyxXKSksZWUoaCxGTyxuZXcgUmUoQixxKSl9Zm9yKHBuKCksYWEodCxuZXcgQlEpLFF0PW5ldyBBJCxCbyhRdCwoU24oMCx0LmMubGVuZ3RoKSx1KHQuY1swXSw5NCkpKSxNPTAsUm49MCxrPW5ldyBTKHQpO2suYTxrLmMuYy5sZW5ndGg7KWg9dShRKGspLDEzNSksY2U9ZmEodWModShLKGgsKG1jKCksRk8pKSw4KSksdShLKGgsQlMpLDgpKSxNPWIuTWF0aC5tYXgoTSxjZS5hKSxSbis9Y2UuYSpjZS5iO2ZvcihNPWIuTWF0aC5tYXgoTSxiLk1hdGguc3FydChSbikqWnQodmUoSyhRdCwoaHcoKSx0eWUpKSkpKSxfZT1adCh2ZShLKFF0LGlDdCkpKSx6bj0wLGhyPTAsXz0wLGU9X2UsZD1uZXcgUyh0KTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoUShkKSwxMzUpLGNlPWZhKHVjKHUoSyhoLChtYygpLEZPKSksOCkpLHUoSyhoLEJTKSw4KSksem4rY2UuYT5NJiYoem49MCxocis9XytfZSxfPTApLFdibihRdCxoLHpuLGhyKSxlPWIuTWF0aC5tYXgoZSx6bitjZS5hKSxfPWIuTWF0aC5tYXgoXyxjZS5iKSx6bis9Y2UuYStfZTtmb3IoanQ9bmV3IEFyLG49bmV3IEFyLFFlPW5ldyBTKHQpO1FlLmE8UWUuYy5jLmxlbmd0aDspZm9yKFdlPXUoUShRZSksMTM1KSxyPUJlKEZlKEsoV2UsKGRpKCksVU8pKSkpLFN0PVdlLnE/V2UucTphMCxvPVN0LnZjKCkuS2MoKTtvLk9iKCk7KXM9dShvLlBiKCksNDIpLE1sKGp0LHMuY2QoKSk/R3QodShzLmNkKCksMTQ2KS53ZygpKSE9PUd0KHMuZGQoKSkmJihyJiZNbChuLHMuY2QoKSk/KHFkKCksIiIrdShzLmNkKCksMTQ2KS50ZygpKTooQWkoanQsdShzLmNkKCksMTQ2KSxzLmRkKCkpLGVlKFF0LHUocy5jZCgpLDE0Nikscy5kZCgpKSxyJiZBaShuLHUocy5jZCgpLDE0Nikscy5kZCgpKSkpOihBaShqdCx1KHMuY2QoKSwxNDYpLHMuZGQoKSksZWUoUXQsdShzLmNkKCksMTQ2KSxzLmRkKCkpKTtyZXR1cm4gUXR9ZnVuY3Rpb24gUmhlKCl7UmhlPVgsT2F0KCksdGk9bmV3IEh2LGNuKHRpLChiZSgpLE1mKSxXMSksY24odGksVWgsVzEpLGNuKHRpLG9sLFcxKSxjbih0aSxEZixXMSksY24odGksT3UsVzEpLGNuKHRpLGNsLFcxKSxjbih0aSxEZixNZiksY24odGksVzEseGgpLGNuKHRpLE1mLHhoKSxjbih0aSxVaCx4aCksY24odGksb2wseGgpLGNuKHRpLEl1LHhoKSxjbih0aSxEZix4aCksY24odGksT3UseGgpLGNuKHRpLGNsLHhoKSxjbih0aSxndSx4aCksY24odGksVzEsWmwpLGNuKHRpLE1mLFpsKSxjbih0aSx4aCxabCksY24odGksVWgsWmwpLGNuKHRpLG9sLFpsKSxjbih0aSxJdSxabCksY24odGksRGYsWmwpLGNuKHRpLGd1LFpsKSxjbih0aSxKbCxabCksY24odGksT3UsWmwpLGNuKHRpLFl1LFpsKSxjbih0aSxjbCxabCksY24odGksTWYsVWgpLGNuKHRpLG9sLFVoKSxjbih0aSxEZixVaCksY24odGksY2wsVWgpLGNuKHRpLE1mLG9sKSxjbih0aSxVaCxvbCksY24odGksRGYsb2wpLGNuKHRpLG9sLG9sKSxjbih0aSxPdSxvbCksY24odGksVzEsa2gpLGNuKHRpLE1mLGtoKSxjbih0aSx4aCxraCksY24odGksWmwsa2gpLGNuKHRpLFVoLGtoKSxjbih0aSxvbCxraCksY24odGksSXUsa2gpLGNuKHRpLERmLGtoKSxjbih0aSxKbCxraCksY24odGksZ3Usa2gpLGNuKHRpLGNsLGtoKSxjbih0aSxPdSxraCksY24odGksWWMsa2gpLGNuKHRpLFcxLEpsKSxjbih0aSxNZixKbCksY24odGkseGgsSmwpLGNuKHRpLFVoLEpsKSxjbih0aSxvbCxKbCksY24odGksSXUsSmwpLGNuKHRpLERmLEpsKSxjbih0aSxndSxKbCksY24odGksY2wsSmwpLGNuKHRpLFl1LEpsKSxjbih0aSxZYyxKbCksY24odGksTWYsZ3UpLGNuKHRpLFVoLGd1KSxjbih0aSxvbCxndSksY24odGksRGYsZ3UpLGNuKHRpLEpsLGd1KSxjbih0aSxjbCxndSksY24odGksT3UsZ3UpLGNuKHRpLFcxLER1KSxjbih0aSxNZixEdSksY24odGkseGgsRHUpLGNuKHRpLFVoLER1KSxjbih0aSxvbCxEdSksY24odGksSXUsRHUpLGNuKHRpLERmLER1KSxjbih0aSxndSxEdSksY24odGksY2wsRHUpLGNuKHRpLE1mLE91KSxjbih0aSx4aCxPdSksY24odGksWmwsT3UpLGNuKHRpLG9sLE91KSxjbih0aSxXMSxZdSksY24odGksTWYsWXUpLGNuKHRpLFpsLFl1KSxjbih0aSxVaCxZdSksY24odGksb2wsWXUpLGNuKHRpLEl1LFl1KSxjbih0aSxEZixZdSksY24odGksRGYsWWMpLGNuKHRpLG9sLFljKSxjbih0aSxndSxXMSksY24odGksZ3UsVWgpLGNuKHRpLGd1LHhoKSxjbih0aSxJdSxXMSksY24odGksSXUsTWYpLGNuKHRpLEl1LFpsKX1mdW5jdGlvbiBBcSh0LGUpe3N3aXRjaCh0LmUpe2Nhc2UgMDpjYXNlIDI6Y2FzZSA0OmNhc2UgNjpjYXNlIDQyOmNhc2UgNDQ6Y2FzZSA0NjpjYXNlIDQ4OmNhc2UgODpjYXNlIDEwOmNhc2UgMTI6Y2FzZSAxNDpjYXNlIDE2OmNhc2UgMTg6Y2FzZSAyMDpjYXNlIDIyOmNhc2UgMjQ6Y2FzZSAyNjpjYXNlIDI4OmNhc2UgMzA6Y2FzZSAzMjpjYXNlIDM0OmNhc2UgMzY6Y2FzZSAzODpyZXR1cm4gbmV3IGpYdCh0LmIsdC5hLGUsdC5jKTtjYXNlIDE6cmV0dXJuIG5ldyBoaih0LmEsZSxlcyhlLlRnKCksdC5jKSk7Y2FzZSA0MzpyZXR1cm4gbmV3IFBVdCh0LmEsZSxlcyhlLlRnKCksdC5jKSk7Y2FzZSAzOnJldHVybiBuZXcgQnModC5hLGUsZXMoZS5UZygpLHQuYykpO2Nhc2UgNDU6cmV0dXJuIG5ldyAkdSh0LmEsZSxlcyhlLlRnKCksdC5jKSk7Y2FzZSA0MTpyZXR1cm4gbmV3IElsKHUoT2godC5jKSwyNiksdC5hLGUsZXMoZS5UZygpLHQuYykpO2Nhc2UgNTA6cmV0dXJuIG5ldyBSZWUodShPaCh0LmMpLDI2KSx0LmEsZSxlcyhlLlRnKCksdC5jKSk7Y2FzZSA1OnJldHVybiBuZXcgZXZ0KHQuYSxlLGVzKGUuVGcoKSx0LmMpLHQuZC5uKTtjYXNlIDQ3OnJldHVybiBuZXcgVVd0KHQuYSxlLGVzKGUuVGcoKSx0LmMpLHQuZC5uKTtjYXNlIDc6cmV0dXJuIG5ldyBoZSh0LmEsZSxlcyhlLlRnKCksdC5jKSx0LmQubik7Y2FzZSA0OTpyZXR1cm4gbmV3IE02KHQuYSxlLGVzKGUuVGcoKSx0LmMpLHQuZC5uKTtjYXNlIDk6cmV0dXJuIG5ldyBCVXQodC5hLGUsZXMoZS5UZygpLHQuYykpO2Nhc2UgMTE6cmV0dXJuIG5ldyBGVXQodC5hLGUsZXMoZS5UZygpLHQuYykpO2Nhc2UgMTM6cmV0dXJuIG5ldyBkMnQodC5hLGUsZXMoZS5UZygpLHQuYykpO2Nhc2UgMTU6cmV0dXJuIG5ldyBTaih0LmEsZSxlcyhlLlRnKCksdC5jKSk7Y2FzZSAxNzpyZXR1cm4gbmV3IFJVdCh0LmEsZSxlcyhlLlRnKCksdC5jKSk7Y2FzZSAxOTpyZXR1cm4gbmV3IFczKHQuYSxlLGVzKGUuVGcoKSx0LmMpKTtjYXNlIDIxOnJldHVybiBuZXcgZjJ0KHQuYSxlLGVzKGUuVGcoKSx0LmMpKTtjYXNlIDIzOnJldHVybiBuZXcgV00odC5hLGUsZXMoZS5UZygpLHQuYykpO2Nhc2UgMjU6cmV0dXJuIG5ldyBZV3QodC5hLGUsZXMoZS5UZygpLHQuYyksdC5kLm4pO2Nhc2UgMjc6cmV0dXJuIG5ldyBFbih0LmEsZSxlcyhlLlRnKCksdC5jKSx0LmQubik7Y2FzZSAyOTpyZXR1cm4gbmV3IEtXdCh0LmEsZSxlcyhlLlRnKCksdC5jKSx0LmQubik7Y2FzZSAzMTpyZXR1cm4gbmV3IFdXdCh0LmEsZSxlcyhlLlRnKCksdC5jKSx0LmQubik7Y2FzZSAzMzpyZXR1cm4gbmV3IHJ2dCh0LmEsZSxlcyhlLlRnKCksdC5jKSx0LmQubik7Y2FzZSAzNTpyZXR1cm4gbmV3IG52dCh0LmEsZSxlcyhlLlRnKCksdC5jKSx0LmQubik7Y2FzZSAzNzpyZXR1cm4gbmV3IGdudCh0LmEsZSxlcyhlLlRnKCksdC5jKSx0LmQubik7Y2FzZSAzOTpyZXR1cm4gbmV3IFVqKHQuYSxlLGVzKGUuVGcoKSx0LmMpLHQuZC5uKTtjYXNlIDQwOnJldHVybiBuZXcgcHMoZSxlcyhlLlRnKCksdC5jKSk7ZGVmYXVsdDp0aHJvdyBudChuZXcgWm8oIlVua25vd24gZmVhdHVyZSBzdHlsZTogIit0LmUpKX19ZnVuY3Rpb24gUjVuKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxfLE0sQixxLEcsVyxaLGJ0LE10LFN0LGp0LFF0LGNlO3N3aXRjaChtcihuLCJCcmFuZGVzICYgS29lcGYgbm9kZSBwbGFjZW1lbnQiLDEpLHQuYT1lLHQuYz1EbW4oZSkscj11KEsoZSwoeGUoKSxKbHQpKSwyNzQpLHE9QmUoRmUoSyhlLFRTKSkpLHQuZD1yPT0obkkoKSxCVikmJiFxfHxyPT1MbHQsYjNuKHQsZSksUXQ9bnVsbCxjZT1udWxsLGJ0PW51bGwsTXQ9bnVsbCxaPShxbCg0LG15KSxuZXcgSmMoNCkpLHUoSyhlLEpsdCksMjc0KS5nKXtjYXNlIDM6YnQ9bmV3IGs0KGUsdC5jLmQsKEMxKCksejIpLChnZCgpLFpnKSksWi5jW1ouYy5sZW5ndGhdPWJ0O2JyZWFrO2Nhc2UgMTpNdD1uZXcgazQoZSx0LmMuZCwoQzEoKSxWMSksKGdkKCksWmcpKSxaLmNbWi5jLmxlbmd0aF09TXQ7YnJlYWs7Y2FzZSA0OlF0PW5ldyBrNChlLHQuYy5kLChDMSgpLHoyKSwoZ2QoKSxSdykpLFouY1taLmMubGVuZ3RoXT1RdDticmVhaztjYXNlIDI6Y2U9bmV3IGs0KGUsdC5jLmQsKEMxKCksVjEpLChnZCgpLFJ3KSksWi5jW1ouYy5sZW5ndGhdPWNlO2JyZWFrO2RlZmF1bHQ6YnQ9bmV3IGs0KGUsdC5jLmQsKEMxKCksejIpLChnZCgpLFpnKSksTXQ9bmV3IGs0KGUsdC5jLmQsVjEsWmcpLFF0PW5ldyBrNChlLHQuYy5kLHoyLFJ3KSxjZT1uZXcgazQoZSx0LmMuZCxWMSxSdyksWi5jW1ouYy5sZW5ndGhdPVF0LFouY1taLmMubGVuZ3RoXT1jZSxaLmNbWi5jLmxlbmd0aF09YnQsWi5jW1ouYy5sZW5ndGhdPU10fWZvcihzPW5ldyB0R3QoZSx0LmMpLGQ9bmV3IFMoWik7ZC5hPGQuYy5jLmxlbmd0aDspbz11KFEoZCksMTgwKSxUNW4ocyxvLHQuYiksb3luKG8pO2ZvcihCPW5ldyBPc2UoZSx0LmMpLHc9bmV3IFMoWik7dy5hPHcuYy5jLmxlbmd0aDspbz11KFEodyksMTgwKSx5NG4oQixvKTtpZihuLm4pZm9yKGs9bmV3IFMoWik7ay5hPGsuYy5jLmxlbmd0aDspbz11KFEoayksMTgwKSxRYihuLG8rIiBzaXplIGlzICIrWXN0KG8pKTtpZihNPW51bGwsdC5kJiYoXz1YNG4odCxaLHQuYy5kKSxtbGUoZSxfLG4pJiYoTT1fKSksIU0pZm9yKGs9bmV3IFMoWik7ay5hPGsuYy5jLmxlbmd0aDspbz11KFEoayksMTgwKSxtbGUoZSxvLG4pJiYoIU18fFlzdChNKT5Zc3QobykpJiYoTT1vKTtmb3IoIU0mJihNPShTbigwLFouYy5sZW5ndGgpLHUoWi5jWzBdLDE4MCkpKSxXPW5ldyBTKGUuYik7Vy5hPFcuYy5jLmxlbmd0aDspZm9yKEc9dShRKFcpLDI5KSxqdD1uZXcgUyhHLmEpO2p0LmE8anQuYy5jLmxlbmd0aDspU3Q9dShRKGp0KSwxMCksU3Qubi5iPVp0KE0ucFtTdC5wXSkrWnQoTS5kW1N0LnBdKTtmb3Iobi5uJiYoUWIobiwiQ2hvc2VuIG5vZGUgcGxhY2VtZW50OiAiK00pLFFiKG4sIkJsb2NrczogIitqb2UoTSkpLFFiKG4sIkNsYXNzZXM6ICIrWnBuKE0sbikpLFFiKG4sIk1hcmtlZCBlZGdlczogIit0LmIpKSxoPW5ldyBTKFopO2guYTxoLmMuYy5sZW5ndGg7KW89dShRKGgpLDE4MCksby5nPW51bGwsby5iPW51bGwsby5hPW51bGwsby5kPW51bGwsby5qPW51bGwsby5pPW51bGwsby5wPW51bGw7TG9uKHQuYyksdC5iLmEuJGIoKSxvcihuKX1mdW5jdGlvbiBqNW4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFosYnQsTXQsU3QsanQsUXQsY2UsX2UsV2UsUWUsUm4sem47Zm9yKGg9bmV3IGNzLFF0PXUoSyhuLCh4ZSgpLFhsKSksMTAzKSxHPTAsS2EoaCwoIWUuYSYmKGUuYT1uZXcgaGUoZHMsZSwxMCwxMSkpLGUuYSkpO2guYiE9MDspaz11KGguYj09MD9udWxsOihabihoLmIhPTApLGZoKGgsaC5hLmEpKSwzMyksKEd0KHplKGUscGIpKSE9PUd0KChqMCgpLGJiKSl8fEd0KHplKGUsUnkpKT09PUd0KChtMigpLHBTKSl8fEd0KHplKGUsUnkpKT09PUd0KChtMigpLGdTKSl8fEJlKEZlKHplKGUsQnkpKSl8fEd0KHplKGUsTngpKSE9PUd0KChldygpLHo0KSkpJiYhQmUoRmUoemUoayxWbHQpKSkmJkVvKGssKGFlKCksTGMpLGRlKEcrKykpLFo9IUJlKEZlKHplKGssajIpKSksWiYmKE09KCFrLmEmJihrLmE9bmV3IGhlKGRzLGssMTAsMTEpKSxrLmEpLmkhPTAscT1xZG4oayksQj1HdCh6ZShrLGp5KSk9PT1HdCgoJDAoKSxucCkpLHpuPSFzMihrLChkaSgpLEdTKSl8fHVuKGpyKHplKGssR1MpKSxVbiksU3Q9bnVsbCx6biYmQiYmKE18fHEpJiYoU3Q9YWxlKGspLGVlKFN0LFhsLFF0KSxlYShTdCxTTykmJkJxdChuZXcgbzN0KFp0KHZlKEsoU3QsU08pKSkpLFN0KSx1KHplKGssUjIpLDE3NCkuZ2MoKSE9MCYmKF89U3QseXMobmV3IGtuKG51bGwsKCFrLmMmJihrLmM9bmV3IGhlKHlsLGssOSw5KSksbmV3IFRuKGsuYywxNikpKSxuZXcgTHIoXykpLFpjZShrLFN0KSkpLGNlPW4sX2U9dSh0cih0LmEsaHMoaykpLDEwKSxfZSYmKGNlPV9lLmUpLE10PXNoZSh0LGssY2UpLFN0JiYoTXQuZT1TdCxTdC5lPU10LEthKGgsKCFrLmEmJihrLmE9bmV3IGhlKGRzLGssMTAsMTEpKSxrLmEpKSkpO2ZvcihHPTAsa3MoaCxlLGguYy5iLGguYyk7aC5iIT0wOyl7Zm9yKG89dShoLmI9PTA/bnVsbDooWm4oaC5iIT0wKSxmaChoLGguYS5hKSksMzMpLHc9bmV3IG5yKCghby5iJiYoby5iPW5ldyBoZShyYSxvLDEyLDMpKSxvLmIpKTt3LmUhPXcuaS5nYygpOylkPXUoZHIodyksNzkpLFR1ZShkKSwoR3QoemUoZSxwYikpIT09R3QoKGowKCksYmIpKXx8R3QoemUoZSxSeSkpPT09R3QoKG0yKCkscFMpKXx8R3QoemUoZSxSeSkpPT09R3QoKG0yKCksZ1MpKXx8QmUoRmUoemUoZSxCeSkpKXx8R3QoemUoZSxOeCkpIT09R3QoKGV3KCksejQpKSkmJkVvKGQsKGFlKCksTGMpLGRlKEcrKykpLFFlPVJvKHUoQXQoKCFkLmImJihkLmI9bmV3IEVuKHZyLGQsNCw3KSksZC5iKSwwKSw4MikpLFJuPVJvKHUoQXQoKCFkLmMmJihkLmM9bmV3IEVuKHZyLGQsNSw4KSksZC5jKSwwKSw4MikpLCEoQmUoRmUoemUoZCxqMikpKXx8QmUoRmUoemUoUWUsajIpKSl8fEJlKEZlKHplKFJuLGoyKSkpKSYmKFc9dXcoZCkmJkJlKEZlKHplKFFlLCR5KSkpJiZCZShGZSh6ZShkLEIyKSkpLGp0PW8sV3x8Wm0oUm4sUWUpP2p0PVFlOlptKFFlLFJuKSYmKGp0PVJuKSxjZT1uLF9lPXUodHIodC5hLGp0KSwxMCksX2UmJihjZT1fZS5lKSxidD1UNnQodCxkLGp0LGNlKSxlZShidCwoYWUoKSxVOXQpLHV2bih0LGQsZSxuKSkpO2lmKEI9R3QoemUobyxqeSkpPT09R3QoKCQwKCksbnApKSxCKWZvcihzPW5ldyBucigoIW8uYSYmKG8uYT1uZXcgaGUoZHMsbywxMCwxMSkpLG8uYSkpO3MuZSE9cy5pLmdjKCk7KXI9dShkcihzKSwzMyksem49IXMyKHIsKGRpKCksR1MpKXx8dW4oanIoemUocixHUykpLFVuKSxXZT1HdCh6ZShyLGp5KSk9PT1HdChucCksem4mJldlJiZrcyhoLHIsaC5jLmIsaC5jKX19ZnVuY3Rpb24gJDVuKHQsZSxuLHIscyxvKXt2YXIgaCxkLHcsayxfLE0sQixxLEcsVyxaLGJ0O3N3aXRjaChlKXtjYXNlIDcxOmQ9ci5xLmdldEZ1bGxZZWFyKCktaWI+PS0xOTAwPzE6MCxuPj00P1lyKHQsdXQob3QoTGUsMSkscmUsMiw2LFt0ZmUsZWZlXSlbZF0pOllyKHQsdXQob3QoTGUsMSkscmUsMiw2LFsiQkMiLCJBRCJdKVtkXSk7YnJlYWs7Y2FzZSAxMjE6RGhuKHQsbixyKTticmVhaztjYXNlIDc3OlB3bih0LG4scik7YnJlYWs7Y2FzZSAxMDc6dz1zLnEuZ2V0SG91cnMoKSx3PT0wP1hkKHQsMjQsbik6WGQodCx3LG4pO2JyZWFrO2Nhc2UgODM6bjJuKHQsbixzKTticmVhaztjYXNlIDY5Ol89ci5xLmdldERheSgpLG49PTU/WXIodCx1dChvdChMZSwxKSxyZSwyLDYsWyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0pW19dKTpuPT00P1lyKHQsdXQob3QoTGUsMSkscmUsMiw2LFtKYXQsdG90LGVvdCxub3Qscm90LGlvdCxzb3RdKVtfXSk6WXIodCx1dChvdChMZSwxKSxyZSwyLDYsWyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSlbX10pO2JyZWFrO2Nhc2UgOTc6cy5xLmdldEhvdXJzKCk+PTEyJiZzLnEuZ2V0SG91cnMoKTwyND9Zcih0LHV0KG90KExlLDEpLHJlLDIsNixbIkFNIiwiUE0iXSlbMV0pOllyKHQsdXQob3QoTGUsMSkscmUsMiw2LFsiQU0iLCJQTSJdKVswXSk7YnJlYWs7Y2FzZSAxMDQ6TT1zLnEuZ2V0SG91cnMoKSUxMixNPT0wP1hkKHQsMTIsbik6WGQodCxNLG4pO2JyZWFrO2Nhc2UgNzU6Qj1zLnEuZ2V0SG91cnMoKSUxMixYZCh0LEIsbik7YnJlYWs7Y2FzZSA3MjpxPXMucS5nZXRIb3VycygpLFhkKHQscSxuKTticmVhaztjYXNlIDk5Okc9ci5xLmdldERheSgpLG49PTU/WXIodCx1dChvdChMZSwxKSxyZSwyLDYsWyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0pW0ddKTpuPT00P1lyKHQsdXQob3QoTGUsMSkscmUsMiw2LFtKYXQsdG90LGVvdCxub3Qscm90LGlvdCxzb3RdKVtHXSk6bj09Mz9Zcih0LHV0KG90KExlLDEpLHJlLDIsNixbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdKVtHXSk6WGQodCxHLDEpO2JyZWFrO2Nhc2UgNzY6Vz1yLnEuZ2V0TW9udGgoKSxuPT01P1lyKHQsdXQob3QoTGUsMSkscmUsMiw2LFsiSiIsIkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl0pW1ddKTpuPT00P1lyKHQsdXQob3QoTGUsMSkscmUsMiw2LFtxYXQsSGF0LFZhdCxHYXQsdXgsVWF0LFdhdCxLYXQsWWF0LFhhdCxRYXQsWmF0XSlbV10pOm49PTM/WXIodCx1dChvdChMZSwxKSxyZSwyLDYsWyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLHV4LCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSlbV10pOlhkKHQsVysxLG4pO2JyZWFrO2Nhc2UgODE6Wj1yLnEuZ2V0TW9udGgoKS8zfDAsbjw0P1lyKHQsdXQob3QoTGUsMSkscmUsMiw2LFsiUTEiLCJRMiIsIlEzIiwiUTQiXSlbWl0pOllyKHQsdXQob3QoTGUsMSkscmUsMiw2LFsiMXN0IHF1YXJ0ZXIiLCIybmQgcXVhcnRlciIsIjNyZCBxdWFydGVyIiwiNHRoIHF1YXJ0ZXIiXSlbWl0pO2JyZWFrO2Nhc2UgMTAwOmJ0PXIucS5nZXREYXRlKCksWGQodCxidCxuKTticmVhaztjYXNlIDEwOTprPXMucS5nZXRNaW51dGVzKCksWGQodCxrLG4pO2JyZWFrO2Nhc2UgMTE1Omg9cy5xLmdldFNlY29uZHMoKSxYZCh0LGgsbik7YnJlYWs7Y2FzZSAxMjI6bjw0P1lyKHQsby5jWzBdKTpZcih0LG8uY1sxXSk7YnJlYWs7Y2FzZSAxMTg6WXIodCxvLmIpO2JyZWFrO2Nhc2UgOTA6bjwzP1lyKHQsR2duKG8pKTpuPT0zP1lyKHQsS2duKG8pKTpZcih0LFlnbihvLmEpKTticmVhaztkZWZhdWx0OnJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIFQ2dCh0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWixidCxNdCxTdCxqdCxRdCxjZSxfZSxXZSxRZSxSbix6bixocix4aTtpZihUdWUoZSksdz11KEF0KCghZS5iJiYoZS5iPW5ldyBFbih2cixlLDQsNykpLGUuYiksMCksODIpLF89dShBdCgoIWUuYyYmKGUuYz1uZXcgRW4odnIsZSw1LDgpKSxlLmMpLDApLDgyKSxkPVJvKHcpLGs9Um8oXyksaD0oIWUuYSYmKGUuYT1uZXcgaGUodXMsZSw2LDYpKSxlLmEpLmk9PTA/bnVsbDp1KEF0KCghZS5hJiYoZS5hPW5ldyBoZSh1cyxlLDYsNikpLGUuYSksMCksMjAyKSxfZT11KHRyKHQuYSxkKSwxMCksem49dSh0cih0LmEsayksMTApLFdlPW51bGwsaHI9bnVsbCxfdCh3LDE4NikmJihjZT11KHRyKHQuYSx3KSwyOTkpLF90KGNlLDExKT9XZT11KGNlLDExKTpfdChjZSwxMCkmJihfZT11KGNlLDEwKSxXZT11KFBlKF9lLmosMCksMTEpKSksX3QoXywxODYpJiYoUm49dSh0cih0LmEsXyksMjk5KSxfdChSbiwxMSk/aHI9dShSbiwxMSk6X3QoUm4sMTApJiYoem49dShSbiwxMCksaHI9dShQZSh6bi5qLDApLDExKSkpLCFfZXx8IXpuKXRocm93IG50KG5ldyBGVCgiVGhlIHNvdXJjZSBvciB0aGUgdGFyZ2V0IG9mIGVkZ2UgIitlKyIgY291bGQgbm90IGJlIGZvdW5kLiBUaGlzIHVzdWFsbHkgaGFwcGVucyB3aGVuIGFuIGVkZ2UgY29ubmVjdHMgYSBub2RlIGxhaWQgb3V0IGJ5IEVMSyBMYXllcmVkIHRvIGEgbm9kZSBpbiBhbm90aGVyIGxldmVsIG9mIGhpZXJhcmNoeSBsYWlkIG91dCBieSBlaXRoZXIgYW5vdGhlciBpbnN0YW5jZSBvZiBFTEsgTGF5ZXJlZCBvciBhbm90aGVyIGxheW91dCBhbGdvcml0aG0gYWxsdG9nZXRoZXIuIFRoZSBmb3JtZXIgY2FuIGJlIHNvbHZlZCBieSBzZXR0aW5nIHRoZSBoaWVyYXJjaHlIYW5kbGluZyBvcHRpb24gdG8gSU5DTFVERV9DSElMRFJFTi4iKSk7Zm9yKFc9bmV3IHp2LEJvKFcsZSksZWUoVywoYWUoKSxJaSksZSksZWUoVywoeGUoKSxPbyksbnVsbCkscT11KEsocixXYyksMjEpLF9lPT16biYmcS5GYygoZ28oKSx3UykpLFdlfHwoUXQ9KGhvKCksc3UpLFFlPW51bGwsaCYmVjModShLKF9lLHdzKSw5OCkpJiYoUWU9bmV3IFJlKGguaixoLmspLE5adChRZSxyRChlKSksbEp0KFFlLG4pLFptKGssZCkmJihRdD1hbCxGaShRZSxfZS5uKSkpLFdlPWtsZShfZSxRZSxRdCxyKSksaHJ8fChRdD0oaG8oKSxhbCkseGk9bnVsbCxoJiZWMyh1KEsoem4sd3MpLDk4KSkmJih4aT1uZXcgUmUoaC5iLGguYyksTlp0KHhpLHJEKGUpKSxsSnQoeGksbikpLGhyPWtsZSh6bix4aSxRdCwkYSh6bikpKSxCYShXLFdlKSxwYShXLGhyKSwoV2UuZS5jLmxlbmd0aD4xfHxXZS5nLmMubGVuZ3RoPjF8fGhyLmUuYy5sZW5ndGg+MXx8aHIuZy5jLmxlbmd0aD4xKSYmcS5GYygoZ28oKSx2UykpLEI9bmV3IG5yKCghZS5uJiYoZS5uPW5ldyBoZShZbyxlLDEsNykpLGUubikpO0IuZSE9Qi5pLmdjKCk7KWlmKE09dShkcihCKSwxMzcpLCFCZShGZSh6ZShNLGoyKSkpJiZNLmEpc3dpdGNoKFo9UGl0KE0pLHVlKFcuYixaKSx1KEsoWixEZCksMjcyKS5nKXtjYXNlIDE6Y2FzZSAyOnEuRmMoKGdvKCksdUUpKTticmVhaztjYXNlIDA6cS5GYygoZ28oKSxjRSkpLGVlKFosRGQsKEQxKCksVEUpKX1pZihvPXUoSyhyLEVTKSwzMTQpLGJ0PXUoSyhyLHJHKSwzMTUpLHM9bz09KEs2KCksd08pfHxidD09KGFDKCksZmh0KSxoJiYoIWguYSYmKGguYT1uZXcgQnMoV2gsaCw1KSksaC5hKS5pIT0wJiZzKXtmb3IoTXQ9c0koaCksRz1uZXcganUsanQ9c2koTXQsMCk7anQuYiE9anQuZC5jOylTdD11KGlpKGp0KSw4KSxhaShHLG5ldyBTbyhTdCkpO2VlKFcsWDl0LEcpfXJldHVybiBXfWZ1bmN0aW9uIHo1bih0KXt0LmdifHwodC5nYj0hMCx0LmI9aGModCwwKSxmcyh0LmIsMTgpLEdpKHQuYiwxOSksdC5hPWhjKHQsMSksZnModC5hLDEpLEdpKHQuYSwyKSxHaSh0LmEsMyksR2kodC5hLDQpLEdpKHQuYSw1KSx0Lm89aGModCwyKSxmcyh0Lm8sOCksZnModC5vLDkpLEdpKHQubywxMCksR2kodC5vLDExKSxHaSh0Lm8sMTIpLEdpKHQubywxMyksR2kodC5vLDE0KSxHaSh0Lm8sMTUpLEdpKHQubywxNiksR2kodC5vLDE3KSxHaSh0Lm8sMTgpLEdpKHQubywxOSksR2kodC5vLDIwKSxHaSh0Lm8sMjEpLEdpKHQubywyMiksR2kodC5vLDIzKSxEbyh0Lm8pLERvKHQubyksRG8odC5vKSxEbyh0Lm8pLERvKHQubyksRG8odC5vKSxEbyh0Lm8pLERvKHQubyksRG8odC5vKSxEbyh0Lm8pLHQucD1oYyh0LDMpLGZzKHQucCwyKSxmcyh0LnAsMyksZnModC5wLDQpLGZzKHQucCw1KSxHaSh0LnAsNiksR2kodC5wLDcpLERvKHQucCksRG8odC5wKSx0LnE9aGModCw0KSxmcyh0LnEsOCksdC52PWhjKHQsNSksR2kodC52LDkpLERvKHQudiksRG8odC52KSxEbyh0LnYpLHQudz1oYyh0LDYpLGZzKHQudywyKSxmcyh0LncsMyksZnModC53LDQpLEdpKHQudyw1KSx0LkI9aGModCw3KSxHaSh0LkIsMSksRG8odC5CKSxEbyh0LkIpLERvKHQuQiksdC5RPWhjKHQsOCksR2kodC5RLDApLERvKHQuUSksdC5SPWhjKHQsOSksZnModC5SLDEpLHQuUz1oYyh0LDEwKSxEbyh0LlMpLERvKHQuUyksRG8odC5TKSxEbyh0LlMpLERvKHQuUyksRG8odC5TKSxEbyh0LlMpLERvKHQuUyksRG8odC5TKSxEbyh0LlMpLERvKHQuUyksRG8odC5TKSxEbyh0LlMpLERvKHQuUyksRG8odC5TKSx0LlQ9aGModCwxMSksR2kodC5ULDEwKSxHaSh0LlQsMTEpLEdpKHQuVCwxMiksR2kodC5ULDEzKSxHaSh0LlQsMTQpLERvKHQuVCksRG8odC5UKSx0LlU9aGModCwxMiksZnModC5VLDIpLGZzKHQuVSwzKSxHaSh0LlUsNCksR2kodC5VLDUpLEdpKHQuVSw2KSxHaSh0LlUsNyksRG8odC5VKSx0LlY9aGModCwxMyksR2kodC5WLDEwKSx0Llc9aGModCwxNCksZnModC5XLDE4KSxmcyh0LlcsMTkpLGZzKHQuVywyMCksR2kodC5XLDIxKSxHaSh0LlcsMjIpLEdpKHQuVywyMyksdC5iYj1oYyh0LDE1KSxmcyh0LmJiLDEwKSxmcyh0LmJiLDExKSxmcyh0LmJiLDEyKSxmcyh0LmJiLDEzKSxmcyh0LmJiLDE0KSxmcyh0LmJiLDE1KSxmcyh0LmJiLDE2KSxHaSh0LmJiLDE3KSxEbyh0LmJiKSxEbyh0LmJiKSx0LmViPWhjKHQsMTYpLGZzKHQuZWIsMiksZnModC5lYiwzKSxmcyh0LmViLDQpLGZzKHQuZWIsNSksZnModC5lYiw2KSxmcyh0LmViLDcpLEdpKHQuZWIsOCksR2kodC5lYiw5KSx0LmFiPWhjKHQsMTcpLGZzKHQuYWIsMCksZnModC5hYiwxKSx0Lkg9aGModCwxOCksR2kodC5ILDApLEdpKHQuSCwxKSxHaSh0LkgsMiksR2kodC5ILDMpLEdpKHQuSCw0KSxHaSh0LkgsNSksRG8odC5IKSx0LmRiPWhjKHQsMTkpLEdpKHQuZGIsMiksdC5jPWhpKHQsMjApLHQuZD1oaSh0LDIxKSx0LmU9aGkodCwyMiksdC5mPWhpKHQsMjMpLHQuaT1oaSh0LDI0KSx0Lmc9aGkodCwyNSksdC5qPWhpKHQsMjYpLHQuaz1oaSh0LDI3KSx0Lm49aGkodCwyOCksdC5yPWhpKHQsMjkpLHQucz1oaSh0LDMwKSx0LnQ9aGkodCwzMSksdC51PWhpKHQsMzIpLHQuZmI9aGkodCwzMyksdC5BPWhpKHQsMzQpLHQuQz1oaSh0LDM1KSx0LkQ9aGkodCwzNiksdC5GPWhpKHQsMzcpLHQuRz1oaSh0LDM4KSx0Lkk9aGkodCwzOSksdC5KPWhpKHQsNDApLHQuTD1oaSh0LDQxKSx0Lk09aGkodCw0MiksdC5OPWhpKHQsNDMpLHQuTz1oaSh0LDQ0KSx0LlA9aGkodCw0NSksdC5YPWhpKHQsNDYpLHQuWT1oaSh0LDQ3KSx0Llo9aGkodCw0OCksdC4kPWhpKHQsNDkpLHQuXz1oaSh0LDUwKSx0LmNiPWhpKHQsNTEpLHQuSz1oaSh0LDUyKSl9ZnVuY3Rpb24gZGkoKXtkaT1YO3ZhciB0LGU7R1M9bmV3IHRzKFYxZSksRUU9bmV3IHRzKEcxZSksQ1N0PShRZCgpLHRmdCksejNlPW5ldyB2bihoa3QsQ1N0KSxqeD1uZXcgdm4ocHgsbnVsbCkscTNlPW5ldyB0cyhzOHQpLEFTdD0oY3koKSxLaShyZnQsdXQob3QoaWZ0LDEpLG9lLDI5MSwwLFtuZnRdKSkpLEJHPW5ldyB2bihjSCxBU3QpLFVPPW5ldyB2bihLSSwoRm4oKSwhMSkpLExTdD0oZm8oKSxjMCksanc9bmV3IHZuKGdrdCxMU3QpLElTdD0ocTAoKSxiZnQpLERTdD1uZXcgdm4oVUksSVN0KSxQU3Q9bmV3IHZuKGdILCExKSxGU3Q9KCQwKCksSEcpLGk1PW5ldyB2bihvSCxGU3QpLFVTdD1uZXcgTXYoMTIpLFYyPW5ldyB2bih3dyxVU3QpLFJHPW5ldyB2bigkSSwhMSksQlN0PW5ldyB2bih2Y3QsITEpLFlPPW5ldyB2bihGQywhMSksUVN0PSh2YSgpLGtiKSxVUz1uZXcgdm4oRm90LFFTdCksJHg9bmV3IHRzKHVIKSx6Rz1uZXcgdHMoakkpLGdmdD1uZXcgdHMoSHEpLHBmdD1uZXcgdHMoUEMpLFJTdD1uZXcganUsczU9bmV3IHZuKEVrdCxSU3QpLFYzZT1uZXcgdm4oQ2t0LCExKSxHM2U9bmV3IHZuKFNrdCwhMSksalN0PW5ldyBNVCxLTz1uZXcgdm4oTGt0LGpTdCksJEc9bmV3IHZuKHVrdCwhMSksWTNlPW5ldyB2bihVMWUsMSksbmV3IHZuKFcxZSwhMCksZGUoMCksbmV3IHZuKEsxZSxkZSgxMDApKSxuZXcgdm4oWTFlLCExKSxkZSgwKSxuZXcgdm4oWDFlLGRlKDRlMykpLGRlKDApLG5ldyB2bihRMWUsZGUoNDAwKSksbmV3IHZuKFoxZSwhMSksbmV3IHZuKEoxZSwhMSksbmV3IHZuKHRkZSwhMCksbmV3IHZuKGVkZSwhMSksU1N0PShBeigpLHlmdCksSDNlPW5ldyB2bihpOHQsU1N0KSxYM2U9bmV3IHZuKFF4dCwxMCksUTNlPW5ldyB2bihaeHQsMTApLGVBdD1uZXcgdm4oTW90LDIwKSxaM2U9bmV3IHZuKEp4dCwxMCksbkF0PW5ldyB2bihQb3QsMiksSjNlPW5ldyB2bih0a3QsMTApLHJBdD1uZXcgdm4oZWt0LDApLHFHPW5ldyB2bihpa3QsNSksaUF0PW5ldyB2bihua3QsMSksc0F0PW5ldyB2bihya3QsMSksRzI9bmV3IHZuKGt5LDIwKSx0NGU9bmV3IHZuKHNrdCwxMCksY0F0PW5ldyB2bihha3QsMTApLHp4PW5ldyB0cyhva3QpLG9BdD1uZXcgYVV0LGFBdD1uZXcgdm4oTWt0LG9BdCksVzNlPW5ldyB0cyhiY3QpLFdTdD0hMSxVM2U9bmV3IHZuKHBjdCxXU3QpLHpTdD1uZXcgTXYoNSksJFN0PW5ldyB2bihwa3QselN0KSxxU3Q9KGZ5KCksZT11KFdmKHZvKSw5KSxuZXcgb2goZSx1KGZmKGUsZS5sZW5ndGgpLDkpLDApKSxhNT1uZXcgdm4oRjcscVN0KSxZU3Q9KHU0KCkseGIpLEtTdD1uZXcgdm4od2t0LFlTdCksdWZ0PW5ldyB0cyhta3QpLGxmdD1uZXcgdHMoeWt0KSxoZnQ9bmV3IHRzKHhrdCksY2Z0PW5ldyB0cyhra3QpLEhTdD0odD11KFdmKHRBKSw5KSxuZXcgb2godCx1KGZmKHQsdC5sZW5ndGgpLDkpLDApKSxIMj1uZXcgdm4oTTQsSFN0KSxHU3Q9b24oKGJsKCksQUUpKSxtYj1uZXcgdm4oYngsR1N0KSxWU3Q9bmV3IFJlKDAsMCksbzU9bmV3IHZuKHZ4LFZTdCksakc9bmV3IHZuKGdjdCwhMSksTVN0PShEMSgpLFRFKSxhZnQ9bmV3IHZuKFRrdCxNU3QpLHNmdD1uZXcgdm4oVnEsITEpLGRlKDEpLG5ldyB2bihuZGUsbnVsbCksWFN0PW5ldyB0cyhBa3QpLGZmdD1uZXcgdHMoX2t0KSx0QXQ9KGJlKCksYWMpLGM1PW5ldyB2bihsa3QsdEF0KSxtbD1uZXcgdHMoY2t0KSxaU3Q9KGlsKCksb24oRWIpKSxLeT1uZXcgdm4oQjcsWlN0KSxkZnQ9bmV3IHZuKGJrdCwhMSksSlN0PW5ldyB2bih2a3QsITApLFdPPW5ldyB2bihma3QsITEpLG9mdD1uZXcgdm4oZGt0LCExKSxPU3Q9bmV3IHZuKERvdCwxKSxOU3Q9KHRxKCksd2Z0KSxuZXcgdm4ocmRlLE5TdCksSzNlPSEwfWZ1bmN0aW9uIGFlKCl7YWU9WDt2YXIgdCxlO0lpPW5ldyB0cyhveHQpLFU5dD1uZXcgdHMoImNvb3JkaW5hdGVPcmlnaW4iKSwkbHQ9bmV3IHRzKCJwcm9jZXNzb3JzIiksRzl0PW5ldyBIcygiY29tcG91bmROb2RlIiwoRm4oKSwhMSkpLGtPPW5ldyBIcygiaW5zaWRlQ29ubmVjdGlvbnMiLCExKSxYOXQ9bmV3IHRzKCJvcmlnaW5hbEJlbmRwb2ludHMiKSxROXQ9bmV3IHRzKCJvcmlnaW5hbER1bW15Tm9kZVBvc2l0aW9uIiksWjl0PW5ldyB0cygib3JpZ2luYWxMYWJlbEVkZ2UiKSxUTz1uZXcgdHMoInJlcHJlc2VudGVkTGFiZWxzIiksbVM9bmV3IHRzKCJlbmRMYWJlbHMiKSxMeD1uZXcgdHMoImVuZExhYmVsLm9yaWdpbiIpLER4PW5ldyBIcygibGFiZWxTaWRlIiwoVmwoKSxaTykpLEs0PW5ldyBIcygibWF4RWRnZVRoaWNrbmVzcyIsMCksSDE9bmV3IEhzKCJyZXZlcnNlZCIsITEpLEl4PW5ldyB0cyhqZmUpLGExPW5ldyBIcygibG9uZ0VkZ2VTb3VyY2UiLG51bGwpLHFoPW5ldyBIcygibG9uZ0VkZ2VUYXJnZXQiLG51bGwpLFB5PW5ldyBIcygibG9uZ0VkZ2VIYXNMYWJlbER1bW1pZXMiLCExKSxFTz1uZXcgSHMoImxvbmdFZGdlQmVmb3JlTGFiZWxEdW1teSIsITEpLEhWPW5ldyBIcygiZWRnZUNvbnN0cmFpbnQiLChoMigpLEVsdCkpLER3PW5ldyB0cygiaW5MYXllckxheW91dFVuaXQiKSxQMj1uZXcgSHMoImluTGF5ZXJDb25zdHJhaW50IiwoQjAoKSx5TykpLE14PW5ldyBIcygiaW5MYXllclN1Y2Nlc3NvckNvbnN0cmFpbnQiLG5ldyBsZSksWTl0PW5ldyBIcygiaW5MYXllclN1Y2Nlc3NvckNvbnN0cmFpbnRCZXR3ZWVuTm9uRHVtbWllcyIsITEpLHNsPW5ldyB0cygicG9ydER1bW15IikscVY9bmV3IEhzKCJjcm9zc2luZ0hpbnQiLGRlKDApKSxXYz1uZXcgSHMoImdyYXBoUHJvcGVydGllcyIsKGU9dShXZihNbHQpLDkpLG5ldyBvaChlLHUoZmYoZSxlLmxlbmd0aCksOSksMCkpKSxnYz1uZXcgSHMoImV4dGVybmFsUG9ydFNpZGUiLChiZSgpLGFjKSksSzl0PW5ldyBIcygiZXh0ZXJuYWxQb3J0U2l6ZSIsbmV3IERhKSxQbHQ9bmV3IHRzKCJleHRlcm5hbFBvcnRSZXBsYWNlZER1bW1pZXMiKSxWVj1uZXcgdHMoImV4dGVybmFsUG9ydFJlcGxhY2VkRHVtbXkiKSxOeT1uZXcgSHMoImV4dGVybmFsUG9ydENvbm5lY3Rpb25zIiwodD11KFdmKFphKSw5KSxuZXcgb2godCx1KGZmKHQsdC5sZW5ndGgpLDkpLDApKSksSXc9bmV3IEhzKERmZSwwKSxWOXQ9bmV3IHRzKCJiYXJ5Y2VudGVyQXNzb2NpYXRlcyIpLE94PW5ldyB0cygiVG9wU2lkZUNvbW1lbnRzIiksQXg9bmV3IHRzKCJCb3R0b21TaWRlQ29tbWVudHMiKSx6Vj1uZXcgdHMoIkNvbW1lbnRDb25uZWN0aW9uUG9ydCIpLEJsdD1uZXcgSHMoImlucHV0Q29sbGVjdCIsITEpLGpsdD1uZXcgSHMoIm91dHB1dENvbGxlY3QiLCExKSx4Tz1uZXcgSHMoImN5Y2xpYyIsITEpLFc5dD1uZXcgdHMoImNyb3NzSGllcmFyY2h5TWFwIikscWx0PW5ldyB0cygidGFyZ2V0T2Zmc2V0IiksbmV3IEhzKCJzcGxpbmVMYWJlbFNpemUiLG5ldyBEYSksWDQ9bmV3IHRzKCJzcGFjaW5ncyIpLEdWPW5ldyBIcygicGFydGl0aW9uQ29uc3RyYWludCIsITEpLEx3PW5ldyB0cygiYnJlYWtpbmdQb2ludC5pbmZvIiksZVR0PW5ldyB0cygic3BsaW5lcy5zdXJ2aXZpbmdFZGdlIiksRjI9bmV3IHRzKCJzcGxpbmVzLnJvdXRlLnN0YXJ0IiksUTQ9bmV3IHRzKCJzcGxpbmVzLmVkZ2VDaGFpbiIpLHRUdD1uZXcgdHMoIm9yaWdpbmFsUG9ydENvbnN0cmFpbnRzIiksaEU9bmV3IHRzKCJzZWxmTG9vcEhvbGRlciIpLGZFPW5ldyB0cygic3BsaW5lcy5uc1BvcnRZIiksTGM9bmV3IHRzKCJtb2RlbE9yZGVyIiksUmx0PW5ldyB0cygibG9uZ0VkZ2VUYXJnZXROb2RlIiksTXc9bmV3IEhzKGYxZSwhMSksWTQ9bmV3IEhzKGYxZSwhMSksRmx0PW5ldyB0cygibGF5ZXJDb25zdHJhaW50cy5oaWRkZW5Ob2RlcyIpLEo5dD1uZXcgdHMoImxheWVyQ29uc3RyYWludHMub3Bwb3NpZGVQb3J0Iiksemx0PW5ldyB0cygidGFyZ2V0Tm9kZS5tb2RlbE9yZGVyIil9ZnVuY3Rpb24gXzZ0KCl7XzZ0PVgsZlR0PShURCgpLE5WKSxZMmU9bmV3IHZuKHB4dCxmVHQpLG92ZT1uZXcgdm4oYnh0LChGbigpLCExKSksd1R0PSh4JCgpLE5sdCksZnZlPW5ldyB2bihLcSx3VHQpLFN2ZT1uZXcgdm4odnh0LCExKSxBdmU9bmV3IHZuKHd4dCwhMCksVDJlPW5ldyB2bihteHQsITEpLENUdD0oeUQoKSxwaHQpLEh2ZT1uZXcgdm4oeXh0LENUdCksZGUoMSksUXZlPW5ldyB2bih4eHQsZGUoNykpLFp2ZT1uZXcgdm4oa3h0LCExKSxjdmU9bmV3IHZuKEV4dCwhMSksaFR0PShtMigpLHhsdCksSzJlPW5ldyB2bihxb3QsaFR0KSx4VHQ9KFp6KCksY2h0KSxDdmU9bmV3IHZuKFZJLHhUdCksbVR0PShwaCgpLF9PKSx3dmU9bmV3IHZuKFR4dCxtVHQpLGRlKC0xKSx2dmU9bmV3IHZuKF94dCxkZSgtMSkpLGRlKC0xKSxtdmU9bmV3IHZuKEN4dCxkZSgtMSkpLGRlKC0xKSx5dmU9bmV3IHZuKEhvdCxkZSg0KSksZGUoLTEpLGt2ZT1uZXcgdm4oVm90LGRlKDIpKSx5VHQ9KG00KCksaEcpLF92ZT1uZXcgdm4oR290LHlUdCksZGUoMCksVHZlPW5ldyB2bihVb3QsZGUoMCkpLHB2ZT1uZXcgdm4oV290LGRlKFRpKSksbFR0PShLNigpLEN4KSxXMmU9bmV3IHZuKCRDLGxUdCksTjJlPW5ldyB2bihTeHQsITEpLHoyZT1uZXcgdm4oS290LC4xKSxHMmU9bmV3IHZuKFlvdCwhMSksZGUoLTEpLEgyZT1uZXcgdm4oQXh0LGRlKC0xKSksZGUoLTEpLFYyZT1uZXcgdm4oTHh0LGRlKC0xKSksZGUoMCksUDJlPW5ldyB2bihNeHQsZGUoNDApKSx1VHQ9KEc4KCksSWx0KSxqMmU9bmV3IHZuKFhvdCx1VHQpLGNUdD1tTyxGMmU9bmV3IHZuKFlxLGNUdCksX1R0PShhQygpLEFTKSxxdmU9bmV3IHZuKEQ0LF9UdCksT3ZlPW5ldyB0cyhYcSksa1R0PShiRCgpLEZWKSxMdmU9bmV3IHZuKFFvdCxrVHQpLEVUdD0obkkoKSxCViksRHZlPW5ldyB2bihab3QsRVR0KSxGdmU9bmV3IHZuKEpvdCwuMyksUnZlPW5ldyB0cyh0Y3QpLFRUdD0oc3koKSxsRyksanZlPW5ldyB2bihlY3QsVFR0KSxwVHQ9KHV6KCksdmh0KSx0dmU9bmV3IHZuKER4dCxwVHQpLGJUdD0obEQoKSx3aHQpLGV2ZT1uZXcgdm4oSXh0LGJUdCksdlR0PShaOCgpLERTKSxudmU9bmV3IHZuKFFxLHZUdCksaXZlPW5ldyB2bihacSwuMiksWjJlPW5ldyB2bihuY3QsMiksV3ZlPW5ldyB2bihPeHQsbnVsbCksWXZlPW5ldyB2bihOeHQsMTApLEt2ZT1uZXcgdm4oUHh0LDEwKSxYdmU9bmV3IHZuKEZ4dCwyMCksZGUoMCksVnZlPW5ldyB2bihCeHQsZGUoMCkpLGRlKDApLEd2ZT1uZXcgdm4oUnh0LGRlKDApKSxkZSgwKSxVdmU9bmV3IHZuKGp4dCxkZSgwKSksXzJlPW5ldyB2bihyY3QsITEpLGlUdD0oZjcoKSxiUyksUzJlPW5ldyB2bigkeHQsaVR0KSxyVHQ9KEkkKCksbWx0KSxDMmU9bmV3IHZuKHp4dCxyVHQpLGx2ZT1uZXcgdm4oSnEsITEpLGRlKDApLHV2ZT1uZXcgdm4oaWN0LGRlKDE2KSksZGUoMCksaHZlPW5ldyB2bihzY3QsZGUoNSkpLExUdD0oZ3ooKSx4aHQpLHd3ZT1uZXcgdm4oWTAsTFR0KSxKdmU9bmV3IHZuKHRILDEwKSxud2U9bmV3IHZuKGVILDEpLEFUdD0oWCQoKSxPViksdXdlPW5ldyB2bih6QyxBVHQpLHN3ZT1uZXcgdHMoYWN0KSxTVHQ9ZGUoMSksZGUoMCksb3dlPW5ldyB2bihvY3QsU1R0KSxNVHQ9KG96KCkseWh0KSxrd2U9bmV3IHZuKG5ILE1UdCksbXdlPW5ldyB0cyhySCksZ3dlPW5ldyB2bihpSCwhMCksZndlPW5ldyB2bihzSCwyKSxid2U9bmV3IHZuKGNjdCwhMCksZ1R0PShucSgpLFBWKSxRMmU9bmV3IHZuKHF4dCxnVHQpLGRUdD0ocngoKSxzRSksWDJlPW5ldyB2bihIeHQsZFR0KSxvVHQ9KGowKCksYmIpLE8yZT1uZXcgdm4oYUgsb1R0KSxJMmU9bmV3IHZuKFZ4dCwhMSksc1R0PShldygpLHo0KSxBMmU9bmV3IHZuKHVjdCxzVHQpLGFUdD0oWV8oKSx1aHQpLEQyZT1uZXcgdm4oR3h0LGFUdCksTDJlPW5ldyB2bihsY3QsMCksTTJlPW5ldyB2bihoY3QsMCksZ3ZlPWtsdCxkdmU9d08seHZlPWNHLEV2ZT1jRyxidmU9b2h0LHEyZT0oJDAoKSxucCksVTJlPUN4LCQyZT1DeCxCMmU9Q3gsUjJlPW5wLE52ZT1MUyxQdmU9QVMsTXZlPUFTLEl2ZT1BUyxCdmU9ZGh0LHp2ZT1MUywkdmU9TFMscnZlPShxMCgpLHF4KSxzdmU9cXgsYXZlPURTLEoyZT1YTyx0d2U9bUUsZXdlPUd5LHJ3ZT1tRSxpd2U9R3ksbHdlPW1FLGh3ZT1HeSxhd2U9eWx0LGN3ZT1PVixFd2U9bUUsVHdlPUd5LHl3ZT1tRSx4d2U9R3kscHdlPUd5LGR3ZT1HeSx2d2U9R3l9ZnVuY3Rpb24gY28oKXtjbz1YLEhFdD1uZXcgTHMoIkRJUkVDVElPTl9QUkVQUk9DRVNTT1IiLDApLCRFdD1uZXcgTHMoIkNPTU1FTlRfUFJFUFJPQ0VTU09SIiwxKSxoUz1uZXcgTHMoIkVER0VfQU5EX0xBWUVSX0NPTlNUUkFJTlRfRURHRV9SRVZFUlNFUiIsMiksc2x0PW5ldyBMcygiSU5URVJBQ1RJVkVfRVhURVJOQUxfUE9SVF9QT1NJVElPTkVSIiwzKSxjOXQ9bmV3IExzKCJQQVJUSVRJT05fUFJFUFJPQ0VTU09SIiw0KSxnVj1uZXcgTHMoIkxBQkVMX0RVTU1ZX0lOU0VSVEVSIiw1KSxUVj1uZXcgTHMoIlNFTEZfTE9PUF9QUkVQUk9DRVNTT1IiLDYpLGVFPW5ldyBMcygiTEFZRVJfQ09OU1RSQUlOVF9QUkVQUk9DRVNTT1IiLDcpLGE5dD1uZXcgTHMoIlBBUlRJVElPTl9NSURQUk9DRVNTT1IiLDgpLFFFdD1uZXcgTHMoIkhJR0hfREVHUkVFX05PREVfTEFZRVJfUFJPQ0VTU09SIiw5KSxpOXQ9bmV3IExzKCJOT0RFX1BST01PVElPTiIsMTApLHRFPW5ldyBMcygiTEFZRVJfQ09OU1RSQUlOVF9QT1NUUFJPQ0VTU09SIiwxMSksbzl0PW5ldyBMcygiUEFSVElUSU9OX1BPU1RQUk9DRVNTT1IiLDEyKSxLRXQ9bmV3IExzKCJISUVSQVJDSElDQUxfUE9SVF9DT05TVFJBSU5UX1BST0NFU1NPUiIsMTMpLHU5dD1uZXcgTHMoIlNFTUlfSU5URVJBQ1RJVkVfQ1JPU1NNSU5fUFJPQ0VTU09SIiwxNCksTkV0PW5ldyBMcygiQlJFQUtJTkdfUE9JTlRfSU5TRVJURVIiLDE1KSx3Vj1uZXcgTHMoIkxPTkdfRURHRV9TUExJVFRFUiIsMTYpLGFsdD1uZXcgTHMoIlBPUlRfU0lERV9QUk9DRVNTT1IiLDE3KSxmVj1uZXcgTHMoIklOVkVSVEVEX1BPUlRfUFJPQ0VTU09SIiwxOCkseFY9bmV3IExzKCJQT1JUX0xJU1RfU09SVEVSIiwxOSksaDl0PW5ldyBMcygiU09SVF9CWV9JTlBVVF9PUkRFUl9PRl9NT0RFTCIsMjApLHlWPW5ldyBMcygiTk9SVEhfU09VVEhfUE9SVF9QUkVQUk9DRVNTT1IiLDIxKSxQRXQ9bmV3IExzKCJCUkVBS0lOR19QT0lOVF9QUk9DRVNTT1IiLDIyKSxzOXQ9bmV3IExzKGkxZSwyMyksZjl0PW5ldyBMcyhzMWUsMjQpLGtWPW5ldyBMcygiU0VMRl9MT09QX1BPUlRfUkVTVE9SRVIiLDI1KSxsOXQ9bmV3IExzKCJTSU5HTEVfRURHRV9HUkFQSF9XUkFQUEVSIiwyNiksZFY9bmV3IExzKCJJTl9MQVlFUl9DT05TVFJBSU5UX1BST0NFU1NPUiIsMjcpLEdFdD1uZXcgTHMoIkVORF9OT0RFX1BPUlRfTEFCRUxfTUFOQUdFTUVOVF9QUk9DRVNTT1IiLDI4KSxuOXQ9bmV3IExzKCJMQUJFTF9BTkRfTk9ERV9TSVpFX1BST0NFU1NPUiIsMjkpLGU5dD1uZXcgTHMoIklOTkVSTU9TVF9OT0RFX01BUkdJTl9DQUxDVUxBVE9SIiwzMCksX1Y9bmV3IExzKCJTRUxGX0xPT1BfUk9VVEVSIiwzMSksUkV0PW5ldyBMcygiQ09NTUVOVF9OT0RFX01BUkdJTl9DQUxDVUxBVE9SIiwzMiksaFY9bmV3IExzKCJFTkRfTEFCRUxfUFJFUFJPQ0VTU09SIiwzMyksYlY9bmV3IExzKCJMQUJFTF9EVU1NWV9TV0lUQ0hFUiIsMzQpLEJFdD1uZXcgTHMoIkNFTlRFUl9MQUJFTF9NQU5BR0VNRU5UX1BST0NFU1NPUiIsMzUpLEo3PW5ldyBMcygiTEFCRUxfU0lERV9TRUxFQ1RPUiIsMzYpLEpFdD1uZXcgTHMoIkhZUEVSRURHRV9EVU1NWV9NRVJHRVIiLDM3KSxZRXQ9bmV3IExzKCJISUVSQVJDSElDQUxfUE9SVF9EVU1NWV9TSVpFX1BST0NFU1NPUiIsMzgpLHI5dD1uZXcgTHMoIkxBWUVSX1NJWkVfQU5EX0dSQVBIX0hFSUdIVF9DQUxDVUxBVE9SIiwzOSksZlM9bmV3IExzKCJISUVSQVJDSElDQUxfUE9SVF9QT1NJVElPTl9QUk9DRVNTT1IiLDQwKSx6RXQ9bmV3IExzKCJDT05TVFJBSU5UU19QT1NUUFJPQ0VTU09SIiw0MSksakV0PW5ldyBMcygiQ09NTUVOVF9QT1NUUFJPQ0VTU09SIiw0MiksdDl0PW5ldyBMcygiSFlQRVJOT0RFX1BST0NFU1NPUiIsNDMpLFhFdD1uZXcgTHMoIkhJRVJBUkNISUNBTF9QT1JUX09SVEhPR09OQUxfRURHRV9ST1VURVIiLDQ0KSx2Vj1uZXcgTHMoIkxPTkdfRURHRV9KT0lORVIiLDQ1KSxFVj1uZXcgTHMoIlNFTEZfTE9PUF9QT1NUUFJPQ0VTU09SIiw0NiksRkV0PW5ldyBMcygiQlJFQUtJTkdfUE9JTlRfUkVNT1ZFUiIsNDcpLG1WPW5ldyBMcygiTk9SVEhfU09VVEhfUE9SVF9QT1NUUFJPQ0VTU09SIiw0OCksWkV0PW5ldyBMcygiSE9SSVpPTlRBTF9DT01QQUNUT1IiLDQ5KSxwVj1uZXcgTHMoIkxBQkVMX0RVTU1ZX1JFTU9WRVIiLDUwKSxVRXQ9bmV3IExzKCJGSU5BTF9TUExJTkVfQkVORFBPSU5UU19DQUxDVUxBVE9SIiw1MSksVkV0PW5ldyBMcygiRU5EX0xBQkVMX1NPUlRFUiIsNTIpLGJPPW5ldyBMcygiUkVWRVJTRURfRURHRV9SRVNUT1JFUiIsNTMpLGxWPW5ldyBMcygiRU5EX0xBQkVMX1BPU1RQUk9DRVNTT1IiLDU0KSxXRXQ9bmV3IExzKCJISUVSQVJDSElDQUxfTk9ERV9SRVNJWkVSIiw1NSkscUV0PW5ldyBMcygiRElSRUNUSU9OX1BPU1RQUk9DRVNTT1IiLDU2KX1mdW5jdGlvbiBxNW4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFosYnQsTXQsU3QsanQsUXQsY2UsX2UsV2UsUWUsUm4sem4saHIseGksS3MsZWgsWmgsWDEsaFUsYk4sZEEsdk4sT0UsRmZ0LGo1ZSxCZnQsY3AsR3csTkUsd04sbU4sS3gsUmZ0LGdBLCQ1ZSxTTHQsVXcscEEsamZ0LFl4LGJBLGkzLHZBLCRmdCx6NWU7Zm9yKFNMdD0wLHhpPWUsWmg9MCxiTj14aS5sZW5ndGg7Wmg8Yk47KytaaClmb3Ioem49eGlbWmhdLEd3PW5ldyBTKHpuLmopO0d3LmE8R3cuYy5jLmxlbmd0aDspe2ZvcihjcD11KFEoR3cpLDExKSx3Tj0wLGQ9bmV3IFMoY3AuZyk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KFEoZCksMTcpLHpuLmMhPWguZC5pLmMmJisrd047d04+MCYmKHQuYVtjcC5wXT1TTHQrKyl9Zm9yKGJBPTAsS3M9bixYMT0wLGRBPUtzLmxlbmd0aDtYMTxkQTsrK1gxKXtmb3Ioem49S3NbWDFdLHZOPTAsR3c9bmV3IFMoem4uaik7R3cuYTxHdy5jLmMubGVuZ3RoJiYoY3A9dShRKEd3KSwxMSksY3Auaj09KGJlKCksT24pKTspZm9yKGQ9bmV3IFMoY3AuZSk7ZC5hPGQuYy5jLmxlbmd0aDspaWYoaD11KFEoZCksMTcpLHpuLmMhPWguYy5pLmMpeysrdk47YnJlYWt9Zm9yKEZmdD0wLG1OPW5ldyB4YSh6bi5qLHpuLmouYy5sZW5ndGgpO21OLmI+MDspe2ZvcihjcD0oWm4obU4uYj4wKSx1KG1OLmEuWGIobU4uYz0tLW1OLmIpLDExKSksd049MCxkPW5ldyBTKGNwLmUpO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShRKGQpLDE3KSx6bi5jIT1oLmMuaS5jJiYrK3dOO3dOPjAmJihjcC5qPT0oYmUoKSxPbik/KHQuYVtjcC5wXT1iQSwrK2JBKToodC5hW2NwLnBdPWJBK3ZOK0ZmdCwrK0ZmdCkpfWJBKz1GZnR9Zm9yKE5FPW5ldyBBcixHPW5ldyBBMCxocj1lLGVoPTAsaFU9aHIubGVuZ3RoO2VoPGhVOysrZWgpZm9yKHpuPWhyW2VoXSxqZnQ9bmV3IFMoem4uaik7amZ0LmE8amZ0LmMuYy5sZW5ndGg7KWZvcihwQT11KFEoamZ0KSwxMSksZD1uZXcgUyhwQS5nKTtkLmE8ZC5jLmMubGVuZ3RoOylpZihoPXUoUShkKSwxNyksdkE9aC5kLHpuLmMhPXZBLmkuYylpZihVdz11KGNjKEZvKE5FLmYscEEpKSw0NjcpLGkzPXUoY2MoRm8oTkUuZix2QSkpLDQ2NyksIVV3JiYhaTMpcT1uZXcgJFd0LEcuYS56YyhxLEcpLHVlKHEuYSxoKSx1ZShxLmQscEEpLGx1KE5FLmYscEEscSksdWUocS5kLHZBKSxsdShORS5mLHZBLHEpO2Vsc2UgaWYoIVV3KXVlKGkzLmEsaCksdWUoaTMuZCxwQSksbHUoTkUuZixwQSxpMyk7ZWxzZSBpZighaTMpdWUoVXcuYSxoKSx1ZShVdy5kLHZBKSxsdShORS5mLHZBLFV3KTtlbHNlIGlmKFV3PT1pMyl1ZShVdy5hLGgpO2Vsc2V7Zm9yKHVlKFV3LmEsaCksQmZ0PW5ldyBTKGkzLmQpO0JmdC5hPEJmdC5jLmMubGVuZ3RoOylqNWU9dShRKEJmdCksMTEpLGx1KE5FLmYsajVlLFV3KTtScyhVdy5hLGkzLmEpLFJzKFV3LmQsaTMuZCksRy5hLkJjKGkzKSE9bnVsbH1mb3IoVz11KFhEKEcsTnQoZjZuLHszOjEsNDoxLDU6MSwxOTQ2OjF9LDQ2NyxHLmEuZ2MoKSwwLDEpKSwxOTQ2KSxSbj1lWzBdLmMsJDVlPW5bMF0uYyxfPVcsTT0wLEI9Xy5sZW5ndGg7TTxCOysrTSlmb3Ioaz1fW01dLGsuZT1TTHQsay5mPWJBLEd3PW5ldyBTKGsuZCk7R3cuYTxHdy5jLmMubGVuZ3RoOyljcD11KFEoR3cpLDExKSxLeD10LmFbY3AucF0sY3AuaS5jPT1Sbj8oS3g8ay5lJiYoay5lPUt4KSxLeD5rLmImJihrLmI9S3gpKTpjcC5pLmM9PSQ1ZSYmKEt4PGsuZiYmKGsuZj1LeCksS3g+ay5jJiYoay5jPUt4KSk7Zm9yKE04KFcsMCxXLmxlbmd0aCxudWxsKSxZeD1OdChTcixKciwyNSxXLmxlbmd0aCwxNSwxKSxyPU50KFNyLEpyLDI1LGJBKzEsMTUsMSksYnQ9MDtidDxXLmxlbmd0aDtidCsrKVl4W2J0XT1XW2J0XS5mLHJbWXhbYnRdXT0xO2ZvcihvPTAsTXQ9MDtNdDxyLmxlbmd0aDtNdCsrKXJbTXRdPT0xP3JbTXRdPW86LS1vO2ZvcihSZnQ9MCxTdD0wO1N0PFl4Lmxlbmd0aDtTdCsrKVl4W1N0XSs9cltZeFtTdF1dLFJmdD1iLk1hdGgubWF4KFJmdCxZeFtTdF0rMSk7Zm9yKHc9MTt3PFJmdDspdyo9Mjtmb3IoejVlPTIqdy0xLHctPTEsJGZ0PU50KFNyLEpyLDI1LHo1ZSwxNSwxKSxzPTAsV2U9MDtXZTxZeC5sZW5ndGg7V2UrKylmb3IoX2U9WXhbV2VdK3csKyskZnRbX2VdO19lPjA7KV9lJTI+MCYmKHMrPSRmdFtfZSsxXSksX2U9KF9lLTEpLzJ8MCwrKyRmdFtfZV07Zm9yKFFlPU50KGRtZSxNZSwzNjIsVy5sZW5ndGgqMiwwLDEpLGp0PTA7anQ8Vy5sZW5ndGg7anQrKylRZVsyKmp0XT1uZXcgZSQoV1tqdF0sV1tqdF0uZSxXW2p0XS5iLChCXygpLE5TKSksUWVbMipqdCsxXT1uZXcgZSQoV1tqdF0sV1tqdF0uYixXW2p0XS5lLE9TKTtmb3IoTTgoUWUsMCxRZS5sZW5ndGgsbnVsbCksT0U9MCxRdD0wO1F0PFFlLmxlbmd0aDtRdCsrKXN3aXRjaChRZVtRdF0uZC5nKXtjYXNlIDA6KytPRTticmVhaztjYXNlIDE6LS1PRSxzKz1PRX1mb3IoZ0E9TnQoZG1lLE1lLDM2MixXLmxlbmd0aCoyLDAsMSksY2U9MDtjZTxXLmxlbmd0aDtjZSsrKWdBWzIqY2VdPW5ldyBlJChXW2NlXSxXW2NlXS5mLFdbY2VdLmMsKEJfKCksTlMpKSxnQVsyKmNlKzFdPW5ldyBlJChXW2NlXSxXW2NlXS5jLFdbY2VdLmYsT1MpO2ZvcihNOChnQSwwLGdBLmxlbmd0aCxudWxsKSxPRT0wLFo9MDtaPGdBLmxlbmd0aDtaKyspc3dpdGNoKGdBW1pdLmQuZyl7Y2FzZSAwOisrT0U7YnJlYWs7Y2FzZSAxOi0tT0Uscys9T0V9cmV0dXJuIHN9ZnVuY3Rpb24geWkoKXt5aT1YLGZBPW5ldyB2dig3KSxtTHQ9bmV3IEdkKDgsOTQpLG5ldyBHZCg4LDY0KSx5THQ9bmV3IEdkKDgsMzYpLE01ZT1uZXcgR2QoOCw2NSksRDVlPW5ldyBHZCg4LDEyMiksSTVlPW5ldyBHZCg4LDkwKSxONWU9bmV3IEdkKDgsOTgpLEw1ZT1uZXcgR2QoOCw2NiksTzVlPW5ldyBHZCg4LDYwKSxQNWU9bmV3IEdkKDgsNjIpLHdMdD1uZXcgdnYoMTEpLGxVPW5ldyBqbCg0KSxxYyhsVSw0OCw1NyksSUU9bmV3IGpsKDQpLHFjKElFLDQ4LDU3KSxxYyhJRSw2NSw5MCkscWMoSUUsOTUsOTUpLHFjKElFLDk3LDEyMiksV3g9bmV3IGpsKDQpLHFjKFd4LDksOSkscWMoV3gsMTAsMTApLHFjKFd4LDEyLDEyKSxxYyhXeCwxMywxMykscWMoV3gsMzIsMzIpLHhMdD1ieShsVSksRUx0PWJ5KElFKSxrTHQ9YnkoV3gpLERFPW5ldyBBcixoQT1uZXcgQXIsQTVlPXV0KG90KExlLDEpLHJlLDIsNixbIkNuIiwiTHUiLCJMbCIsIkx0IiwiTG0iLCJMbyIsIk1uIiwiTWUiLCJNYyIsIk5kIiwiTmwiLCJObyIsIlpzIiwiWmwiLCJacCIsIkNjIiwiQ2YiLG51bGwsIkNvIiwiQ3MiLCJQZCIsIlBzIiwiUGUiLCJQYyIsIlBvIiwiU20iLCJTYyIsIlNrIiwiU28iLCJQaSIsIlBmIiwiTCIsIk0iLCJOIiwiWiIsIkMiLCJQIiwiUyJdKSxiTHQ9dXQob3QoTGUsMSkscmUsMiw2LFsiQmFzaWMgTGF0aW4iLCJMYXRpbi0xIFN1cHBsZW1lbnQiLCJMYXRpbiBFeHRlbmRlZC1BIiwiTGF0aW4gRXh0ZW5kZWQtQiIsIklQQSBFeHRlbnNpb25zIiwiU3BhY2luZyBNb2RpZmllciBMZXR0ZXJzIiwiQ29tYmluaW5nIERpYWNyaXRpY2FsIE1hcmtzIiwiR3JlZWsiLCJDeXJpbGxpYyIsIkFybWVuaWFuIiwiSGVicmV3IiwiQXJhYmljIiwiU3lyaWFjIiwiVGhhYW5hIiwiRGV2YW5hZ2FyaSIsIkJlbmdhbGkiLCJHdXJtdWtoaSIsIkd1amFyYXRpIiwiT3JpeWEiLCJUYW1pbCIsIlRlbHVndSIsIkthbm5hZGEiLCJNYWxheWFsYW0iLCJTaW5oYWxhIiwiVGhhaSIsIkxhbyIsIlRpYmV0YW4iLCJNeWFubWFyIiwiR2VvcmdpYW4iLCJIYW5ndWwgSmFtbyIsIkV0aGlvcGljIiwiQ2hlcm9rZWUiLCJVbmlmaWVkIENhbmFkaWFuIEFib3JpZ2luYWwgU3lsbGFiaWNzIiwiT2doYW0iLCJSdW5pYyIsIktobWVyIiwiTW9uZ29saWFuIiwiTGF0aW4gRXh0ZW5kZWQgQWRkaXRpb25hbCIsIkdyZWVrIEV4dGVuZGVkIiwiR2VuZXJhbCBQdW5jdHVhdGlvbiIsIlN1cGVyc2NyaXB0cyBhbmQgU3Vic2NyaXB0cyIsIkN1cnJlbmN5IFN5bWJvbHMiLCJDb21iaW5pbmcgTWFya3MgZm9yIFN5bWJvbHMiLCJMZXR0ZXJsaWtlIFN5bWJvbHMiLCJOdW1iZXIgRm9ybXMiLCJBcnJvd3MiLCJNYXRoZW1hdGljYWwgT3BlcmF0b3JzIiwiTWlzY2VsbGFuZW91cyBUZWNobmljYWwiLCJDb250cm9sIFBpY3R1cmVzIiwiT3B0aWNhbCBDaGFyYWN0ZXIgUmVjb2duaXRpb24iLCJFbmNsb3NlZCBBbHBoYW51bWVyaWNzIiwiQm94IERyYXdpbmciLCJCbG9jayBFbGVtZW50cyIsIkdlb21ldHJpYyBTaGFwZXMiLCJNaXNjZWxsYW5lb3VzIFN5bWJvbHMiLCJEaW5nYmF0cyIsIkJyYWlsbGUgUGF0dGVybnMiLCJDSksgUmFkaWNhbHMgU3VwcGxlbWVudCIsIkthbmd4aSBSYWRpY2FscyIsIklkZW9ncmFwaGljIERlc2NyaXB0aW9uIENoYXJhY3RlcnMiLCJDSksgU3ltYm9scyBhbmQgUHVuY3R1YXRpb24iLCJIaXJhZ2FuYSIsIkthdGFrYW5hIiwiQm9wb21vZm8iLCJIYW5ndWwgQ29tcGF0aWJpbGl0eSBKYW1vIiwiS2FuYnVuIiwiQm9wb21vZm8gRXh0ZW5kZWQiLCJFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQgTW9udGhzIiwiQ0pLIENvbXBhdGliaWxpdHkiLCJDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBBIiwiQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyIsIllpIFN5bGxhYmxlcyIsIllpIFJhZGljYWxzIiwiSGFuZ3VsIFN5bGxhYmxlcyIsZWdlLCJDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzIiwiQWxwaGFiZXRpYyBQcmVzZW50YXRpb24gRm9ybXMiLCJBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUEiLCJDb21iaW5pbmcgSGFsZiBNYXJrcyIsIkNKSyBDb21wYXRpYmlsaXR5IEZvcm1zIiwiU21hbGwgRm9ybSBWYXJpYW50cyIsIkFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQiIsIlNwZWNpYWxzIiwiSGFsZndpZHRoIGFuZCBGdWxsd2lkdGggRm9ybXMiLCJPbGQgSXRhbGljIiwiR290aGljIiwiRGVzZXJldCIsIkJ5emFudGluZSBNdXNpY2FsIFN5bWJvbHMiLCJNdXNpY2FsIFN5bWJvbHMiLCJNYXRoZW1hdGljYWwgQWxwaGFudW1lcmljIFN5bWJvbHMiLCJDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBCIiwiQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBocyBTdXBwbGVtZW50IiwiVGFncyJdKSx2THQ9dXQob3QoU3IsMSksSnIsMjUsMTUsWzY2MzA0LDY2MzUxLDY2MzUyLDY2MzgzLDY2NTYwLDY2NjM5LDExODc4NCwxMTkwMzksMTE5MDQwLDExOTI5NSwxMTk4MDgsMTIwODMxLDEzMTA3MiwxNzM3ODIsMTk0NTYwLDE5NTEwMyw5MTc1MDQsOTE3NjMxXSl9ZnVuY3Rpb24gTHEoKXtMcT1YLG1wZT1uZXcgZGgoIk9VVF9UX0wiLDAsKHJsKCksQWQpLChUdSgpLEVmKSwoWmYoKSxmYyksZmMsdXQob3QoemgsMSksTWUsMjEsMCxbS2koKGZ5KCksQWYpLHV0KG90KHZvLDEpLG9lLDkzLDAsW0xmLENmXSkpXSkpLHdwZT1uZXcgZGgoIk9VVF9UX0MiLDEsbGIsRWYsZmMsaXUsdXQob3QoemgsMSksTWUsMjEsMCxbS2koQWYsdXQob3Qodm8sMSksb2UsOTMsMCxbTGYsSjBdKSksS2koQWYsdXQob3Qodm8sMSksb2UsOTMsMCxbTGYsSjAsVmhdKSldKSkseXBlPW5ldyBkaCgiT1VUX1RfUiIsMixrZixFZixmYyxkYyx1dChvdCh6aCwxKSxNZSwyMSwwLFtLaShBZix1dChvdCh2bywxKSxvZSw5MywwLFtMZixTZl0pKV0pKSxscGU9bmV3IGRoKCJPVVRfQl9MIiwzLEFkLHMxLGRjLGZjLHV0KG90KHpoLDEpLE1lLDIxLDAsW0tpKEFmLHV0KG90KHZvLDEpLG9lLDkzLDAsW0doLENmXSkpXSkpLHVwZT1uZXcgZGgoIk9VVF9CX0MiLDQsbGIsczEsZGMsaXUsdXQob3QoemgsMSksTWUsMjEsMCxbS2koQWYsdXQob3Qodm8sMSksb2UsOTMsMCxbR2gsSjBdKSksS2koQWYsdXQob3Qodm8sMSksb2UsOTMsMCxbR2gsSjAsVmhdKSldKSksaHBlPW5ldyBkaCgiT1VUX0JfUiIsNSxrZixzMSxkYyxkYyx1dChvdCh6aCwxKSxNZSwyMSwwLFtLaShBZix1dChvdCh2bywxKSxvZSw5MywwLFtHaCxTZl0pKV0pKSxncGU9bmV3IGRoKCJPVVRfTF9UIiw2LGtmLHMxLGZjLGZjLHV0KG90KHpoLDEpLE1lLDIxLDAsW0tpKEFmLHV0KG90KHZvLDEpLG9lLDkzLDAsW0NmLExmLFZoXSkpXSkpLGRwZT1uZXcgZGgoIk9VVF9MX0MiLDcsa2YsaGIsaXUsZmMsdXQob3QoemgsMSksTWUsMjEsMCxbS2koQWYsdXQob3Qodm8sMSksb2UsOTMsMCxbQ2YsbDBdKSksS2koQWYsdXQob3Qodm8sMSksb2UsOTMsMCxbQ2YsbDAsVmhdKSldKSksZnBlPW5ldyBkaCgiT1VUX0xfQiIsOCxrZixFZixkYyxmYyx1dChvdCh6aCwxKSxNZSwyMSwwLFtLaShBZix1dChvdCh2bywxKSxvZSw5MywwLFtDZixHaCxWaF0pKV0pKSx2cGU9bmV3IGRoKCJPVVRfUl9UIiw5LEFkLHMxLGZjLGRjLHV0KG90KHpoLDEpLE1lLDIxLDAsW0tpKEFmLHV0KG90KHZvLDEpLG9lLDkzLDAsW1NmLExmLFZoXSkpXSkpLGJwZT1uZXcgZGgoIk9VVF9SX0MiLDEwLEFkLGhiLGl1LGRjLHV0KG90KHpoLDEpLE1lLDIxLDAsW0tpKEFmLHV0KG90KHZvLDEpLG9lLDkzLDAsW1NmLGwwXSkpLEtpKEFmLHV0KG90KHZvLDEpLG9lLDkzLDAsW1NmLGwwLFZoXSkpXSkpLHBwZT1uZXcgZGgoIk9VVF9SX0IiLDExLEFkLEVmLGRjLGRjLHV0KG90KHpoLDEpLE1lLDIxLDAsW0tpKEFmLHV0KG90KHZvLDEpLG9lLDkzLDAsW1NmLEdoLFZoXSkpXSkpLG9wZT1uZXcgZGgoIklOX1RfTCIsMTIsQWQsczEsZmMsZmMsdXQob3QoemgsMSksTWUsMjEsMCxbS2koUWwsdXQob3Qodm8sMSksb2UsOTMsMCxbTGYsQ2ZdKSksS2koUWwsdXQob3Qodm8sMSksb2UsOTMsMCxbTGYsQ2YsVmhdKSldKSksYXBlPW5ldyBkaCgiSU5fVF9DIiwxMyxsYixzMSxmYyxpdSx1dChvdCh6aCwxKSxNZSwyMSwwLFtLaShRbCx1dChvdCh2bywxKSxvZSw5MywwLFtMZixKMF0pKSxLaShRbCx1dChvdCh2bywxKSxvZSw5MywwLFtMZixKMCxWaF0pKV0pKSxjcGU9bmV3IGRoKCJJTl9UX1IiLDE0LGtmLHMxLGZjLGRjLHV0KG90KHpoLDEpLE1lLDIxLDAsW0tpKFFsLHV0KG90KHZvLDEpLG9lLDkzLDAsW0xmLFNmXSkpLEtpKFFsLHV0KG90KHZvLDEpLG9lLDkzLDAsW0xmLFNmLFZoXSkpXSkpLGlwZT1uZXcgZGgoIklOX0NfTCIsMTUsQWQsaGIsaXUsZmMsdXQob3QoemgsMSksTWUsMjEsMCxbS2koUWwsdXQob3Qodm8sMSksb2UsOTMsMCxbbDAsQ2ZdKSksS2koUWwsdXQob3Qodm8sMSksb2UsOTMsMCxbbDAsQ2YsVmhdKSldKSkscnBlPW5ldyBkaCgiSU5fQ19DIiwxNixsYixoYixpdSxpdSx1dChvdCh6aCwxKSxNZSwyMSwwLFtLaShRbCx1dChvdCh2bywxKSxvZSw5MywwLFtsMCxKMF0pKSxLaShRbCx1dChvdCh2bywxKSxvZSw5MywwLFtsMCxKMCxWaF0pKV0pKSxzcGU9bmV3IGRoKCJJTl9DX1IiLDE3LGtmLGhiLGl1LGRjLHV0KG90KHpoLDEpLE1lLDIxLDAsW0tpKFFsLHV0KG90KHZvLDEpLG9lLDkzLDAsW2wwLFNmXSkpLEtpKFFsLHV0KG90KHZvLDEpLG9lLDkzLDAsW2wwLFNmLFZoXSkpXSkpLGVwZT1uZXcgZGgoIklOX0JfTCIsMTgsQWQsRWYsZGMsZmMsdXQob3QoemgsMSksTWUsMjEsMCxbS2koUWwsdXQob3Qodm8sMSksb2UsOTMsMCxbR2gsQ2ZdKSksS2koUWwsdXQob3Qodm8sMSksb2UsOTMsMCxbR2gsQ2YsVmhdKSldKSksdHBlPW5ldyBkaCgiSU5fQl9DIiwxOSxsYixFZixkYyxpdSx1dChvdCh6aCwxKSxNZSwyMSwwLFtLaShRbCx1dChvdCh2bywxKSxvZSw5MywwLFtHaCxKMF0pKSxLaShRbCx1dChvdCh2bywxKSxvZSw5MywwLFtHaCxKMCxWaF0pKV0pKSxucGU9bmV3IGRoKCJJTl9CX1IiLDIwLGtmLEVmLGRjLGRjLHV0KG90KHpoLDEpLE1lLDIxLDAsW0tpKFFsLHV0KG90KHZvLDEpLG9lLDkzLDAsW0doLFNmXSkpLEtpKFFsLHV0KG90KHZvLDEpLG9lLDkzLDAsW0doLFNmLFZoXSkpXSkpLEJ1dD1uZXcgZGgoT0MsMjEsbnVsbCxudWxsLG51bGwsbnVsbCx1dChvdCh6aCwxKSxNZSwyMSwwLFtdKSl9ZnVuY3Rpb24gbG4oKXtsbj1YLHQzPSh6cCgpLEFuKS5iLHUoQXQoS3QoQW4uYiksMCksMzQpLHUoQXQoS3QoQW4uYiksMSksMTgpLHJwPUFuLmEsdShBdChLdChBbi5hKSwwKSwzNCksdShBdChLdChBbi5hKSwxKSwxOCksdShBdChLdChBbi5hKSwyKSwxOCksdShBdChLdChBbi5hKSwzKSwxOCksdShBdChLdChBbi5hKSw0KSwxOCksU2I9QW4ubyx1KEF0KEt0KEFuLm8pLDApLDM0KSx1KEF0KEt0KEFuLm8pLDEpLDM0KSxLNGU9dShBdChLdChBbi5vKSwyKSwxOCksdShBdChLdChBbi5vKSwzKSwxOCksdShBdChLdChBbi5vKSw0KSwxOCksdShBdChLdChBbi5vKSw1KSwxOCksdShBdChLdChBbi5vKSw2KSwxOCksdShBdChLdChBbi5vKSw3KSwxOCksdShBdChLdChBbi5vKSw4KSwxOCksdShBdChLdChBbi5vKSw5KSwxOCksdShBdChLdChBbi5vKSwxMCksMTgpLHUoQXQoS3QoQW4ubyksMTEpLDE4KSx1KEF0KEt0KEFuLm8pLDEyKSwxOCksdShBdChLdChBbi5vKSwxMyksMTgpLHUoQXQoS3QoQW4ubyksMTQpLDE4KSx1KEF0KEt0KEFuLm8pLDE1KSwxOCksdShBdChCaShBbi5vKSwwKSw1OSksdShBdChCaShBbi5vKSwxKSw1OSksdShBdChCaShBbi5vKSwyKSw1OSksdShBdChCaShBbi5vKSwzKSw1OSksdShBdChCaShBbi5vKSw0KSw1OSksdShBdChCaShBbi5vKSw1KSw1OSksdShBdChCaShBbi5vKSw2KSw1OSksdShBdChCaShBbi5vKSw3KSw1OSksdShBdChCaShBbi5vKSw4KSw1OSksdShBdChCaShBbi5vKSw5KSw1OSksVzRlPUFuLnAsdShBdChLdChBbi5wKSwwKSwzNCksdShBdChLdChBbi5wKSwxKSwzNCksdShBdChLdChBbi5wKSwyKSwzNCksdShBdChLdChBbi5wKSwzKSwzNCksdShBdChLdChBbi5wKSw0KSwxOCksdShBdChLdChBbi5wKSw1KSwxOCksdShBdChCaShBbi5wKSwwKSw1OSksdShBdChCaShBbi5wKSwxKSw1OSksWTRlPUFuLnEsdShBdChLdChBbi5xKSwwKSwzNCksQWI9QW4udix1KEF0KEt0KEFuLnYpLDApLDE4KSx1KEF0KEJpKEFuLnYpLDApLDU5KSx1KEF0KEJpKEFuLnYpLDEpLDU5KSx1KEF0KEJpKEFuLnYpLDIpLDU5KSxpcD1Bbi53LHUoQXQoS3QoQW4udyksMCksMzQpLHUoQXQoS3QoQW4udyksMSksMzQpLHUoQXQoS3QoQW4udyksMiksMzQpLHUoQXQoS3QoQW4udyksMyksMTgpLExiPUFuLkIsdShBdChLdChBbi5CKSwwKSwxOCksdShBdChCaShBbi5CKSwwKSw1OSksdShBdChCaShBbi5CKSwxKSw1OSksdShBdChCaShBbi5CKSwyKSw1OSksWDRlPUFuLlEsdShBdChLdChBbi5RKSwwKSwxOCksdShBdChCaShBbi5RKSwwKSw1OSksUTRlPUFuLlIsdShBdChLdChBbi5SKSwwKSwzNCksUWg9QW4uUyx1KEF0KEJpKEFuLlMpLDApLDU5KSx1KEF0KEJpKEFuLlMpLDEpLDU5KSx1KEF0KEJpKEFuLlMpLDIpLDU5KSx1KEF0KEJpKEFuLlMpLDMpLDU5KSx1KEF0KEJpKEFuLlMpLDQpLDU5KSx1KEF0KEJpKEFuLlMpLDUpLDU5KSx1KEF0KEJpKEFuLlMpLDYpLDU5KSx1KEF0KEJpKEFuLlMpLDcpLDU5KSx1KEF0KEJpKEFuLlMpLDgpLDU5KSx1KEF0KEJpKEFuLlMpLDkpLDU5KSx1KEF0KEJpKEFuLlMpLDEwKSw1OSksdShBdChCaShBbi5TKSwxMSksNTkpLHUoQXQoQmkoQW4uUyksMTIpLDU5KSx1KEF0KEJpKEFuLlMpLDEzKSw1OSksdShBdChCaShBbi5TKSwxNCksNTkpLHNwPUFuLlQsdShBdChLdChBbi5UKSwwKSwxOCksdShBdChLdChBbi5UKSwyKSwxOCksWjRlPXUoQXQoS3QoQW4uVCksMyksMTgpLHUoQXQoS3QoQW4uVCksNCksMTgpLHUoQXQoQmkoQW4uVCksMCksNTkpLHUoQXQoQmkoQW4uVCksMSksNTkpLHUoQXQoS3QoQW4uVCksMSksMTgpLGFwPUFuLlUsdShBdChLdChBbi5VKSwwKSwzNCksdShBdChLdChBbi5VKSwxKSwzNCksdShBdChLdChBbi5VKSwyKSwxOCksdShBdChLdChBbi5VKSwzKSwxOCksdShBdChLdChBbi5VKSw0KSwxOCksdShBdChLdChBbi5VKSw1KSwxOCksdShBdChCaShBbi5VKSwwKSw1OSksZTM9QW4uVix1KEF0KEt0KEFuLlYpLDApLDE4KSx1NT1Bbi5XLHUoQXQoS3QoQW4uVyksMCksMzQpLHUoQXQoS3QoQW4uVyksMSksMzQpLHUoQXQoS3QoQW4uVyksMiksMzQpLHUoQXQoS3QoQW4uVyksMyksMTgpLHUoQXQoS3QoQW4uVyksNCksMTgpLHUoQXQoS3QoQW4uVyksNSksMTgpLEo0ZT1Bbi5iYix1KEF0KEt0KEFuLmJiKSwwKSwzNCksdShBdChLdChBbi5iYiksMSksMzQpLHUoQXQoS3QoQW4uYmIpLDIpLDM0KSx1KEF0KEt0KEFuLmJiKSwzKSwzNCksdShBdChLdChBbi5iYiksNCksMzQpLHUoQXQoS3QoQW4uYmIpLDUpLDM0KSx1KEF0KEt0KEFuLmJiKSw2KSwzNCksdShBdChLdChBbi5iYiksNyksMTgpLHUoQXQoQmkoQW4uYmIpLDApLDU5KSx1KEF0KEJpKEFuLmJiKSwxKSw1OSksdDVlPUFuLmViLHUoQXQoS3QoQW4uZWIpLDApLDM0KSx1KEF0KEt0KEFuLmViKSwxKSwzNCksdShBdChLdChBbi5lYiksMiksMzQpLHUoQXQoS3QoQW4uZWIpLDMpLDM0KSx1KEF0KEt0KEFuLmViKSw0KSwzNCksdShBdChLdChBbi5lYiksNSksMzQpLHUoQXQoS3QoQW4uZWIpLDYpLDE4KSx1KEF0KEt0KEFuLmViKSw3KSwxOCksSmE9QW4uYWIsdShBdChLdChBbi5hYiksMCksMzQpLHUoQXQoS3QoQW4uYWIpLDEpLDM0KSxxdz1Bbi5ILHUoQXQoS3QoQW4uSCksMCksMTgpLHUoQXQoS3QoQW4uSCksMSksMTgpLHUoQXQoS3QoQW4uSCksMiksMTgpLHUoQXQoS3QoQW4uSCksMyksMTgpLHUoQXQoS3QoQW4uSCksNCksMTgpLHUoQXQoS3QoQW4uSCksNSksMTgpLHUoQXQoQmkoQW4uSCksMCksNTkpLEh3PUFuLmRiLHUoQXQoS3QoQW4uZGIpLDApLDE4KSxLMT1Bbi5NfWZ1bmN0aW9uIEg1bih0KXt2YXIgZTt0Lk98fCh0Lk89ITAsdHUodCwidHlwZSIpLHN6KHQsImVjb3JlLnhtbC50eXBlIiksYXoodCxEMiksZT11KGI3KChJcCgpLFhoKSxEMiksMTk0NSksT3IoUG8odC5mYiksdC5iKSxsYyh0LmIsZk4sIkFueVR5cGUiLCExLCExLCEwKSx4cyh1KEF0KEt0KHQuYiksMCksMzQpLHQud2IuRCxaSSxudWxsLDAsLTEsZk4sITEsITEsITAsITEsITEsITEpLHhzKHUoQXQoS3QodC5iKSwxKSwzNCksdC53Yi5ELCJhbnkiLG51bGwsMCwtMSxmTiwhMCwhMCwhMCwhMSwhMSwhMCkseHModShBdChLdCh0LmIpLDIpLDM0KSx0LndiLkQsImFueUF0dHJpYnV0ZSIsbnVsbCwwLC0xLGZOLCExLCExLCEwLCExLCExLCExKSxsYyh0LmJiLGNVLEYwZSwhMSwhMSwhMCkseHModShBdChLdCh0LmJiKSwwKSwzNCksdC5nYiwiZGF0YSIsbnVsbCwwLDEsY1UsITEsITEsITAsITEsITAsITEpLHhzKHUoQXQoS3QodC5iYiksMSksMzQpLHQuZ2IseTh0LG51bGwsMSwxLGNVLCExLCExLCEwLCExLCEwLCExKSxsYyh0LmZiLGROLEIwZSwhMSwhMSwhMCkseHModShBdChLdCh0LmZiKSwwKSwzNCksZS5nYiwicmF3VmFsdWUiLG51bGwsMCwxLGROLCEwLCEwLCEwLCExLCEwLCEwKSx4cyh1KEF0KEt0KHQuZmIpLDEpLDM0KSxlLmEsWUMsbnVsbCwwLDEsZE4sITAsITAsITAsITEsITAsITApLFVpKHUoQXQoS3QodC5mYiksMiksMTgpLHQud2IucSxudWxsLCJpbnN0YW5jZVR5cGUiLDEsMSxkTiwhMSwhMSwhMCwhMSwhMSwhMSwhMSksbGModC5xYixmTHQsUjBlLCExLCExLCEwKSx4cyh1KEF0KEt0KHQucWIpLDApLDM0KSx0LndiLkQsWkksbnVsbCwwLC0xLG51bGwsITEsITEsITAsITEsITEsITEpLFVpKHUoQXQoS3QodC5xYiksMSksMTgpLHQud2IuYWIsbnVsbCwieE1MTlNQcmVmaXhNYXAiLDAsLTEsbnVsbCwhMCwhMSwhMCwhMCwhMSwhMSwhMSksVWkodShBdChLdCh0LnFiKSwyKSwxOCksdC53Yi5hYixudWxsLCJ4U0lTY2hlbWFMb2NhdGlvbiIsMCwtMSxudWxsLCEwLCExLCEwLCEwLCExLCExLCExKSx4cyh1KEF0KEt0KHQucWIpLDMpLDM0KSx0LmdiLCJjREFUQSIsbnVsbCwwLC0yLG51bGwsITAsITAsITAsITEsITEsITApLHhzKHUoQXQoS3QodC5xYiksNCksMzQpLHQuZ2IsImNvbW1lbnQiLG51bGwsMCwtMixudWxsLCEwLCEwLCEwLCExLCExLCEwKSxVaSh1KEF0KEt0KHQucWIpLDUpLDE4KSx0LmJiLG51bGwsUTBlLDAsLTIsbnVsbCwhMCwhMCwhMCwhMCwhMSwhMSwhMCkseHModShBdChLdCh0LnFiKSw2KSwzNCksdC5nYixHY3QsbnVsbCwwLC0yLG51bGwsITAsITAsITAsITEsITEsITApLGxpKHQuYSxRbiwiQW55U2ltcGxlVHlwZSIsITApLGxpKHQuYyxMZSwiQW55VVJJIiwhMCksbGkodC5kLG90KFh1LDEpLCJCYXNlNjRCaW5hcnkiLCEwKSxsaSh0LmUseGwsIkJvb2xlYW4iLCEwKSxsaSh0LmYsV3MsIkJvb2xlYW5PYmplY3QiLCEwKSxsaSh0LmcsWHUsIkJ5dGUiLCEwKSxsaSh0Lmksa3gsIkJ5dGVPYmplY3QiLCEwKSxsaSh0LmosTGUsIkRhdGUiLCEwKSxsaSh0LmssTGUsIkRhdGVUaW1lIiwhMCksbGkodC5uLFN1dCwiRGVjaW1hbCIsITApLGxpKHQubyxnYSwiRG91YmxlIiwhMCksbGkodC5wLHdhLCJEb3VibGVPYmplY3QiLCEwKSxsaSh0LnEsTGUsIkR1cmF0aW9uIiwhMCksbGkodC5zLG1oLCJFTlRJVElFUyIsITApLGxpKHQucixtaCwiRU5USVRJRVNCYXNlIiwhMCksbGkodC50LExlLEY4dCwhMCksbGkodC51LHIzLCJGbG9hdCIsITApLGxpKHQudixLNywiRmxvYXRPYmplY3QiLCEwKSxsaSh0LncsTGUsIkdEYXkiLCEwKSxsaSh0LkIsTGUsIkdNb250aCIsITApLGxpKHQuQSxMZSwiR01vbnRoRGF5IiwhMCksbGkodC5DLExlLCJHWWVhciIsITApLGxpKHQuRCxMZSwiR1llYXJNb250aCIsITApLGxpKHQuRixvdChYdSwxKSwiSGV4QmluYXJ5IiwhMCksbGkodC5HLExlLCJJRCIsITApLGxpKHQuSCxMZSwiSURSRUYiLCEwKSxsaSh0LkosbWgsIklEUkVGUyIsITApLGxpKHQuSSxtaCwiSURSRUZTQmFzZSIsITApLGxpKHQuSyxTciwiSW50IiwhMCksbGkodC5NLFI0LCJJbnRlZ2VyIiwhMCksbGkodC5MLEhhLCJJbnRPYmplY3QiLCEwKSxsaSh0LlAsTGUsIkxhbmd1YWdlIiwhMCksbGkodC5RLERiLCJMb25nIiwhMCksbGkodC5SLFR3LCJMb25nT2JqZWN0IiwhMCksbGkodC5TLExlLCJOYW1lIiwhMCksbGkodC5ULExlLFBILCEwKSxsaSh0LlUsUjQsIk5lZ2F0aXZlSW50ZWdlciIsITApLGxpKHQuVixMZSxqOHQsITApLGxpKHQuWCxtaCwiTk1UT0tFTlMiLCEwKSxsaSh0LlcsbWgsIk5NVE9LRU5TQmFzZSIsITApLGxpKHQuWSxSNCwiTm9uTmVnYXRpdmVJbnRlZ2VyIiwhMCksbGkodC5aLFI0LCJOb25Qb3NpdGl2ZUludGVnZXIiLCEwKSxsaSh0LiQsTGUsIk5vcm1hbGl6ZWRTdHJpbmciLCEwKSxsaSh0Ll8sTGUsIk5PVEFUSU9OIiwhMCksbGkodC5hYixMZSwiUG9zaXRpdmVJbnRlZ2VyIiwhMCksbGkodC5jYixMZSwiUU5hbWUiLCEwKSxsaSh0LmRiLGQ1LCJTaG9ydCIsITApLGxpKHQuZWIsX3csIlNob3J0T2JqZWN0IiwhMCksbGkodC5nYixMZSxMNnQsITApLGxpKHQuaGIsTGUsIlRpbWUiLCEwKSxsaSh0LmliLExlLCJUb2tlbiIsITApLGxpKHQuamIsZDUsIlVuc2lnbmVkQnl0ZSIsITApLGxpKHQua2IsX3csIlVuc2lnbmVkQnl0ZU9iamVjdCIsITApLGxpKHQubGIsRGIsIlVuc2lnbmVkSW50IiwhMCksbGkodC5tYixUdywiVW5zaWduZWRJbnRPYmplY3QiLCEwKSxsaSh0Lm5iLFI0LCJVbnNpZ25lZExvbmciLCEwKSxsaSh0Lm9iLFNyLCJVbnNpZ25lZFNob3J0IiwhMCksbGkodC5wYixIYSwiVW5zaWduZWRTaG9ydE9iamVjdCIsITApLGp5dCh0LEQyKSxWNW4odCkpfWZ1bmN0aW9uIGpoZSh0KXtTdih0LG5ldyB5Mih0YnQobVIoRXYoeXYoa3YoeHYobmV3IG1nLFVuKSwiRUxLIExheWVyZWQiKSwiTGF5ZXItYmFzZWQgYWxnb3JpdGhtIHByb3ZpZGVkIGJ5IHRoZSBFY2xpcHNlIExheW91dCBLZXJuZWwuIEFycmFuZ2VzIGFzIG1hbnkgZWRnZXMgYXMgcG9zc2libGUgaW50byBvbmUgZGlyZWN0aW9uIGJ5IHBsYWNpbmcgbm9kZXMgaW50byBzdWJzZXF1ZW50IGxheWVycy4gVGhpcyBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyBkaWZmZXJlbnQgcm91dGluZyBzdHlsZXMgKHN0cmFpZ2h0LCBvcnRob2dvbmFsLCBzcGxpbmVzKTsgaWYgb3J0aG9nb25hbCByb3V0aW5nIGlzIHNlbGVjdGVkLCBhcmJpdHJhcnkgcG9ydCBjb25zdHJhaW50cyBhcmUgcmVzcGVjdGVkLCB0aHVzIGVuYWJsaW5nIHRoZSBsYXlvdXQgb2YgYmxvY2sgZGlhZ3JhbXMgc3VjaCBhcyBhY3Rvci1vcmllbnRlZCBtb2RlbHMgb3IgY2lyY3VpdCBzY2hlbWF0aWNzLiBGdXJ0aGVybW9yZSwgZnVsbCBsYXlvdXQgb2YgY29tcG91bmQgZ3JhcGhzIHdpdGggY3Jvc3MtaGllcmFyY2h5IGVkZ2VzIGlzIHN1cHBvcnRlZCB3aGVuIHRoZSByZXNwZWN0aXZlIG9wdGlvbiBpcyBhY3RpdmF0ZWQgb24gdGhlIHRvcCBsZXZlbC4iKSxuZXcgclEpLFVuKSxLaSgocDcoKSxUZnQpLHV0KG90KGVVLDEpLG9lLDIzNywwLFtKRyx0VSxaRyxFZnQsUUcsWEddKSkpKSksd2UodCxVbixReHQsSWUoZWh0KSksd2UodCxVbixaeHQsSWUobF90KSksd2UodCxVbixNb3QsSWUoQU8pKSx3ZSh0LFVuLEp4dCxJZShUZikpLHdlKHQsVW4sUG90LEllKEZ4KSksd2UodCxVbix0a3QsSWUoRncpKSx3ZSh0LFVuLGVrdCxJZShWeSkpLHdlKHQsVW4sbmt0LEllKHZFKSksd2UodCxVbixya3QsSWUod0UpKSx3ZSh0LFVuLGlrdCxJZShuaHQpKSx3ZSh0LFVuLGt5LEllKEJ3KSksd2UodCxVbixza3QsSWUocmh0KSksd2UodCxVbixha3QsSWUoQ1MpKSx3ZSh0LFVuLG9rdCxJZShzRykpLHdlKHQsVW4sT3h0LEllKFNPKSksd2UodCxVbixQeHQsSWUoWjQpKSx3ZSh0LFVuLE54dCxJZSgkMikpLHdlKHQsVW4sRnh0LEllKEo0KSksd2UodCxVbixqSSxkZSgwKSksd2UodCxVbixCeHQsSWUoYkUpKSx3ZSh0LFVuLFJ4dCxJZSh1X3QpKSx3ZSh0LFVuLGp4dCxJZShQeCkpLHdlKHQsVW4sWTAsSWUod190KSksd2UodCxVbix0SCxJZShoX3QpKSx3ZSh0LFVuLGVILEllKGZfdCkpLHdlKHQsVW4sekMsSWUoc2h0KSksd2UodCxVbixhY3QsSWUoZF90KSksd2UodCxVbixvY3QsSWUoZ190KSksd2UodCxVbixuSCxJZShhRykpLHdlKHQsVW4sckgsSWUoYWh0KSksd2UodCxVbixpSCxJZShiX3QpKSx3ZSh0LFVuLHNILEllKHBfdCkpLHdlKHQsVW4sY2N0LEllKHZfdCkpLHdlKHQsVW4sdGN0LEllKE53KSksd2UodCxVbixlY3QsSWUoX1MpKSx3ZSh0LFVuLFFxLEllKFhsdCkpLHdlKHQsVW4sWnEsSWUoelR0KSksd2UodCxVbix3dyxpX3QpLHdlKHQsVW4sVUksUlR0KSx3ZSh0LFVuLGNrdCwwKSx3ZSh0LFVuLEhxLGRlKDEpKSx3ZSh0LFVuLHB4LFA3KSx3ZSh0LFVuLHVrdCxJZShqMikpLHdlKHQsVW4sRm90LEllKHdzKSksd2UodCxVbixsa3QsSWUocEUpKSx3ZSh0LFVuLEtJLEllKEN3ZSkpLHdlKHQsVW4saGt0LEllKE1kKSksd2UodCxVbixvSCxJZShqeSkpLHdlKHQsVW4sUEMsKEZuKCksITApKSx3ZSh0LFVuLGZrdCxJZSgkeSkpLHdlKHQsVW4sZGt0LEllKEIyKSksd2UodCxVbixNNCxJZShSMikpLHdlKHQsVW4sYngsSWUoaUcpKSx3ZSh0LFVuLGdjdCxJZSh0aHQpKSx3ZSh0LFVuLGdrdCxCVHQpLHdlKHQsVW4sRjcsSWUoT3cpKSx3ZSh0LFVuLHBrdCxJZShuRykpLHdlKHQsVW4sQjcsSWUocXkpKSx3ZSh0LFVuLGJrdCxJZShJd2UpKSx3ZSh0LFVuLHZrdCxJZShvX3QpKSx3ZSh0LFVuLHdrdCxhX3QpLHdlKHQsVW4sbWt0LEllKEx3ZSkpLHdlKHQsVW4seWt0LEllKE13ZSkpLHdlKHQsVW4seGt0LEllKER3ZSkpLHdlKHQsVW4sa2t0LEllKEF3ZSkpLHdlKHQsVW4sa3h0LEllKGlodCkpLHdlKHQsVW4sVkksSWUoWlR0KSksd2UodCxVbixHb3QsSWUoWmx0KSksd2UodCxVbix4eHQsSWUoU1MpKSx3ZSh0LFVuLFR4dCxJZShkdSkpLHdlKHQsVW4scW90LEllKFJ5KSksd2UodCxVbiwkQyxJZShFUykpLHdlKHQsVW4sU3h0LEllKEJ5KSksd2UodCxVbixNeHQsSWUoTlR0KSksd2UodCxVbixYb3QsSWUoVWx0KSksd2UodCxVbixZcSxJZShDTykpLHdlKHQsVW4sWW90LEllKFdsdCkpLHdlKHQsVW4sdnh0LEllKEpUdCkpLHdlKHQsVW4sd3h0LEllKHRfdCkpLHdlKHQsVW4sS3EsSWUoV1R0KSksd2UodCxVbixENCxJZShyRykpLHdlKHQsVW4sWm90LEllKEpsdCkpLHdlKHQsVW4sYnh0LEllKFFsdCkpLHdlKHQsVW4sSm90LEllKG5fdCkpLHdlKHQsVW4sRHh0LEllKCRUdCkpLHdlKHQsVW4sSXh0LEllKFlsdCkpLHdlKHQsVW4sY0gsSWUoR2x0KSksd2UodCxVbixRb3QsSWUoZV90KSksd2UodCxVbiwkeHQsSWUoS1YpKSx3ZSh0LFVuLHp4dCxJZShEVHQpKSx3ZSh0LFVuLHJjdCxJZShXVikpLHdlKHQsVW4sSnEsSWUoVlR0KSksd2UodCxVbixpY3QsSWUoSFR0KSksd2UodCxVbixzY3QsSWUoR1R0KSksd2UodCxVbix2eCxJZShkRSkpLHdlKHQsVW4sRWt0LEllKE9vKSksd2UodCxVbixEb3QsSWUoWGcpKSx3ZSh0LFVuLFRrdCxJZShEZCkpLHdlKHQsVW4sVnEsSWUoS2x0KSksd2UodCxVbixLb3QsSWUoUFR0KSksd2UodCxVbixfa3QsSWUoUWcpKSx3ZSh0LFVuLENrdCxJZShrUykpLHdlKHQsVW4sU2t0LEllKEpWKSksd2UodCxVbixBa3QsSWUoUHcpKSx3ZSh0LFVuLHBjdCxJZShzX3QpKSx3ZSh0LFVuLGJjdCxJZShnRSkpLHdlKHQsVW4sSG90LEllKFlUdCkpLHdlKHQsVW4sVm90LEllKFhUdCkpLHdlKHQsVW4sdUgsSWUoSHkpKSx3ZSh0LFVuLG14dCxJZShIbHQpKSx3ZSh0LFVuLFVvdCxJZShRVHQpKSx3ZSh0LFVuLHF4dCxJZShaVikpLHdlKHQsVW4sSHh0LEllKFFWKSksd2UodCxVbixMa3QsSWUoZUcpKSx3ZSh0LFVuLFdvdCxJZShLVHQpKSx3ZSh0LFVuLFhxLEllKFRTKSksd2UodCxVbixNa3QsSWUoTE8pKSx3ZSh0LFVuLHB4dCxJZShGVHQpKSx3ZSh0LFVuLHl4dCxJZShjX3QpKSx3ZSh0LFVuLG5jdCxJZShqVHQpKSx3ZSh0LFVuLF94dCxJZShTd2UpKSx3ZSh0LFVuLEF4dCxJZShfd2UpKSx3ZSh0LFVuLHZjdCxJZShVVHQpKSx3ZSh0LFVuLEN4dCxJZSh0RykpLHdlKHQsVW4sTHh0LEllKFhWKSksd2UodCxVbixhSCxJZShwYikpLHdlKHQsVW4sR3h0LEllKE9UdCkpLHdlKHQsVW4sbGN0LEllKFlWKSksd2UodCxVbixoY3QsSWUoSVR0KSksd2UodCxVbixWeHQsSWUoVmx0KSksd2UodCxVbix1Y3QsSWUoTngpKSx3ZSh0LFVuLEV4dCxJZShxVHQpKX1mdW5jdGlvbiBDNCh0LGUpe3ZhciBuLHI7cmV0dXJuIGY1fHwoZjU9bmV3IEFyLE1FPW5ldyBBcixyPSh5aSgpLHlpKCksbmV3IGpsKDQpKSxXRChyLGAJClxyXHIgIGApLEFvKGY1LGx1dCxyKSxBbyhNRSxsdXQsYnkocikpLHI9bmV3IGpsKDQpLFdEKHIsSjBlKSxBbyhmNSxpUyxyKSxBbyhNRSxpUyxieShyKSkscj1uZXcgamwoNCksV0QocixKMGUpLEFvKGY1LGlTLHIpLEFvKE1FLGlTLGJ5KHIpKSxyPW5ldyBqbCg0KSxXRChyLHRnZSksdnkocix1KGpjKGY1LGlTKSwxMTcpKSxBbyhmNSx1dXQsciksQW8oTUUsdXV0LGJ5KHIpKSxyPW5ldyBqbCg0KSxXRChyLCItLjA6QVpfX2F6wrfCt8OAw5bDmMO2w7jEscS0xL7FgcWIxYrFvsaAx4PHjcewx7THtce6yJfJkMqoyrvLgcuQy5HMgM2FzaDNoc6GzorOjM6Mzo7Ooc6jz47PkM+Wz5rPms+cz5zPns+ez6DPoM+iz7PQgdCM0I7Rj9GR0ZzRntKB0oPShtKQ04TTh9OI04vTjNOQ06vTrtO107jTudSx1ZbVmdWZ1aHWhtaR1qHWo9a51rvWvda/1r/XgdeC14TXhNeQ16rXsNey2KHYutmA2ZLZoNmp2bDat9q62r7bgNuO25Dbk9uV26jbqtut27DbueCkgeCkg+CkheCkueCkvOCljeClkeCllOClmOClo+ClpuClr+CmgeCmg+CmheCmjOCmj+CmkOCmk+CmqOCmquCmsOCmsuCmsuCmtuCmueCmvOCmvOCmvuCnhOCnh+CniOCni+CnjeCnl+Cnl+CnnOCnneCnn+Cno+CnpuCnseCoguCoguCoheCoiuCoj+CokOCok+CoqOCoquCosOCosuCos+CoteCotuCouOCoueCovOCovOCovuCpguCph+CpiOCpi+CpjeCpmeCpnOCpnuCpnuCppuCptOCqgeCqg+CqheCqi+CqjeCqjeCqj+CqkeCqk+CqqOCqquCqsOCqsuCqs+CqteCqueCqvOCrheCrh+CrieCri+CrjeCroOCroOCrpuCrr+CsgeCsg+CsheCsjOCsj+CskOCsk+CsqOCsquCssOCssuCss+CstuCsueCsvOCtg+Cth+CtiOCti+CtjeCtluCtl+CtnOCtneCtn+CtoeCtpuCtr+CuguCug+CuheCuiuCujuCukOCukuCuleCumeCumuCunOCunOCunuCun+Cuo+CupOCuqOCuquCuruCuteCut+CuueCuvuCvguCvhuCviOCviuCvjeCvl+Cvl+Cvp+Cvr+CwgeCwg+CwheCwjOCwjuCwkOCwkuCwqOCwquCws+CwteCwueCwvuCxhOCxhuCxiOCxiuCxjeCxleCxluCxoOCxoeCxpuCxr+CyguCyg+CyheCyjOCyjuCykOCykuCyqOCyquCys+CyteCyueCyvuCzhOCzhuCziOCziuCzjeCzleCzluCznuCznuCzoOCzoeCzpuCzr+C0guC0g+C0heC0jOC0juC0kOC0kuC0qOC0quC0ueC0vuC1g+C1huC1iOC1iuC1jeC1l+C1l+C1oOC1oeC1puC1r+C4geC4ruC4sOC4uuC5gOC5juC5kOC5meC6geC6guC6hOC6hOC6h+C6iOC6iuC6iuC6jeC6jeC6lOC6l+C6meC6n+C6oeC6o+C6peC6peC6p+C6p+C6quC6q+C6reC6ruC6sOC6ueC6u+C6veC7gOC7hOC7huC7huC7iOC7jeC7kOC7meC8mOC8meC8oOC8qeC8teC8teC8t+C8t+C8ueC8ueC8vuC9h+C9ieC9qeC9seC+hOC+huC+i+C+kOC+leC+l+C+l+C+meC+reC+seC+t+C+ueC+ueGCoOGDheGDkOGDtuGEgOGEgOGEguGEg+GEheGEh+GEieGEieGEi+GEjOGEjuGEkuGEvOGEvOGEvuGEvuGFgOGFgOGFjOGFjOGFjuGFjuGFkOGFkOGFlOGFleGFmeGFmeGFn+GFoeGFo+GFo+GFpeGFpeGFp+GFp+GFqeGFqeGFreGFruGFsuGFs+GFteGFteGGnuGGnuGGqOGGqOGGq+GGq+GGruGGr+GGt+GGuOGGuuGGuuGGvOGHguGHq+GHq+GHsOGHsOGHueGHueG4gOG6m+G6oOG7ueG8gOG8leG8mOG8neG8oOG9heG9iOG9jeG9kOG9l+G9meG9meG9m+G9m+G9neG9neG9n+G9veG+gOG+tOG+tuG+vOG+vuG+vuG/guG/hOG/huG/jOG/kOG/k+G/luG/m+G/oOG/rOG/suG/tOG/tuG/vOKDkOKDnOKDoeKDoeKEpuKEpuKEquKEq+KEruKEruKGgOKGguOAheOAheOAh+OAh+OAoeOAr+OAseOAteOBgeOClOOCmeOCmuOCneOCnuOCoeODuuODvOODvuOEheOErOS4gOm+peqwgO2eoyIpLEFvKGY1LGh1dCxyKSxBbyhNRSxodXQsYnkocikpLHI9bmV3IGpsKDQpLFdEKHIsdGdlKSxxYyhyLDk1LDk1KSxxYyhyLDU4LDU4KSxBbyhmNSxmdXQsciksQW8oTUUsZnV0LGJ5KHIpKSksbj11KGpjKGU/ZjU6TUUsdCksMTM2KSxufWZ1bmN0aW9uIFY1bih0KXtOcih0LmEsWnIsdXQob3QoTGUsMSkscmUsMiw2LFtmaSwiYW55U2ltcGxlVHlwZSJdKSksTnIodC5iLFpyLHV0KG90KExlLDEpLHJlLDIsNixbZmksImFueVR5cGUiLFJoLFpJXSkpLE5yKHUoQXQoS3QodC5iKSwwKSwzNCksWnIsdXQob3QoTGUsMSkscmUsMiw2LFtSaCxpdXQsZmksIjptaXhlZCJdKSksTnIodShBdChLdCh0LmIpLDEpLDM0KSxacix1dChvdChMZSwxKSxyZSwyLDYsW1JoLGl1dCxOOHQsYXV0LGZpLCI6MSIsajBlLCJsYXgiXSkpLE5yKHUoQXQoS3QodC5iKSwyKSwzNCksWnIsdXQob3QoTGUsMSkscmUsMiw2LFtSaCxQMGUsTjh0LGF1dCxmaSwiOjIiLGowZSwibGF4Il0pKSxOcih0LmMsWnIsdXQob3QoTGUsMSkscmUsMiw2LFtmaSwiYW55VVJJIiwkaCxpMV0pKSxOcih0LmQsWnIsdXQob3QoTGUsMSkscmUsMiw2LFtmaSwiYmFzZTY0QmluYXJ5IiwkaCxpMV0pKSxOcih0LmUsWnIsdXQob3QoTGUsMSkscmUsMiw2LFtmaSxjeCwkaCxpMV0pKSxOcih0LmYsWnIsdXQob3QoTGUsMSkscmUsMiw2LFtmaSwiYm9vbGVhbjpPYmplY3QiLE5hLGN4XSkpLE5yKHQuZyxacix1dChvdChMZSwxKSxyZSwyLDYsW2ZpLFFDXSkpLE5yKHQuaSxacix1dChvdChMZSwxKSxyZSwyLDYsW2ZpLCJieXRlOk9iamVjdCIsTmEsUUNdKSksTnIodC5qLFpyLHV0KG90KExlLDEpLHJlLDIsNixbZmksImRhdGUiLCRoLGkxXSkpLE5yKHQuayxacix1dChvdChMZSwxKSxyZSwyLDYsW2ZpLCJkYXRlVGltZSIsJGgsaTFdKSksTnIodC5uLFpyLHV0KG90KExlLDEpLHJlLDIsNixbZmksImRlY2ltYWwiLCRoLGkxXSkpLE5yKHQubyxacix1dChvdChMZSwxKSxyZSwyLDYsW2ZpLFpDLCRoLGkxXSkpLE5yKHQucCxacix1dChvdChMZSwxKSxyZSwyLDYsW2ZpLCJkb3VibGU6T2JqZWN0IixOYSxaQ10pKSxOcih0LnEsWnIsdXQob3QoTGUsMSkscmUsMiw2LFtmaSwiZHVyYXRpb24iLCRoLGkxXSkpLE5yKHQucyxacix1dChvdChMZSwxKSxyZSwyLDYsW2ZpLCJFTlRJVElFUyIsTmEsJDBlLFA4dCwiMSJdKSksTnIodC5yLFpyLHV0KG90KExlLDEpLHJlLDIsNixbZmksJDBlLHN1dCxGOHRdKSksTnIodC50LFpyLHV0KG90KExlLDEpLHJlLDIsNixbZmksRjh0LE5hLFBIXSkpLE5yKHQudSxacix1dChvdChMZSwxKSxyZSwyLDYsW2ZpLEpDLCRoLGkxXSkpLE5yKHQudixacix1dChvdChMZSwxKSxyZSwyLDYsW2ZpLCJmbG9hdDpPYmplY3QiLE5hLEpDXSkpLE5yKHQudyxacix1dChvdChMZSwxKSxyZSwyLDYsW2ZpLCJnRGF5IiwkaCxpMV0pKSxOcih0LkIsWnIsdXQob3QoTGUsMSkscmUsMiw2LFtmaSwiZ01vbnRoIiwkaCxpMV0pKSxOcih0LkEsWnIsdXQob3QoTGUsMSkscmUsMiw2LFtmaSwiZ01vbnRoRGF5IiwkaCxpMV0pKSxOcih0LkMsWnIsdXQob3QoTGUsMSkscmUsMiw2LFtmaSwiZ1llYXIiLCRoLGkxXSkpLE5yKHQuRCxacix1dChvdChMZSwxKSxyZSwyLDYsW2ZpLCJnWWVhck1vbnRoIiwkaCxpMV0pKSxOcih0LkYsWnIsdXQob3QoTGUsMSkscmUsMiw2LFtmaSwiaGV4QmluYXJ5IiwkaCxpMV0pKSxOcih0LkcsWnIsdXQob3QoTGUsMSkscmUsMiw2LFtmaSwiSUQiLE5hLFBIXSkpLE5yKHQuSCxacix1dChvdChMZSwxKSxyZSwyLDYsW2ZpLCJJRFJFRiIsTmEsUEhdKSksTnIodC5KLFpyLHV0KG90KExlLDEpLHJlLDIsNixbZmksIklEUkVGUyIsTmEsejBlLFA4dCwiMSJdKSksTnIodC5JLFpyLHV0KG90KExlLDEpLHJlLDIsNixbZmksejBlLHN1dCwiSURSRUYiXSkpLE5yKHQuSyxacix1dChvdChMZSwxKSxyZSwyLDYsW2ZpLHRTXSkpLE5yKHQuTSxacix1dChvdChMZSwxKSxyZSwyLDYsW2ZpLEI4dF0pKSxOcih0LkwsWnIsdXQob3QoTGUsMSkscmUsMiw2LFtmaSwiaW50Ok9iamVjdCIsTmEsdFNdKSksTnIodC5QLFpyLHV0KG90KExlLDEpLHJlLDIsNixbZmksImxhbmd1YWdlIixOYSxvdXQsY3V0LHEwZV0pKSxOcih0LlEsWnIsdXQob3QoTGUsMSkscmUsMiw2LFtmaSxlU10pKSxOcih0LlIsWnIsdXQob3QoTGUsMSkscmUsMiw2LFtmaSwibG9uZzpPYmplY3QiLE5hLGVTXSkpLE5yKHQuUyxacix1dChvdChMZSwxKSxyZSwyLDYsW2ZpLCJOYW1lIixOYSxvdXQsY3V0LFI4dF0pKSxOcih0LlQsWnIsdXQob3QoTGUsMSkscmUsMiw2LFtmaSxQSCxOYSwiTmFtZSIsY3V0LEgwZV0pKSxOcih0LlUsWnIsdXQob3QoTGUsMSkscmUsMiw2LFtmaSwibmVnYXRpdmVJbnRlZ2VyIixOYSxWMGUsck8sIi0xIl0pKSxOcih0LlYsWnIsdXQob3QoTGUsMSkscmUsMiw2LFtmaSxqOHQsTmEsb3V0LGN1dCwiXFxjKyJdKSksTnIodC5YLFpyLHV0KG90KExlLDEpLHJlLDIsNixbZmksIk5NVE9LRU5TIixOYSxHMGUsUDh0LCIxIl0pKSxOcih0LlcsWnIsdXQob3QoTGUsMSkscmUsMiw2LFtmaSxHMGUsc3V0LGo4dF0pKSxOcih0LlksWnIsdXQob3QoTGUsMSkscmUsMiw2LFtmaSwkOHQsTmEsQjh0LGlPLCIwIl0pKSxOcih0LlosWnIsdXQob3QoTGUsMSkscmUsMiw2LFtmaSxWMGUsTmEsQjh0LHJPLCIwIl0pKSxOcih0LiQsWnIsdXQob3QoTGUsMSkscmUsMiw2LFtmaSxVMGUsTmEsUGF0LCRoLCJyZXBsYWNlIl0pKSxOcih0Ll8sWnIsdXQob3QoTGUsMSkscmUsMiw2LFtmaSwiTk9UQVRJT04iLCRoLGkxXSkpLE5yKHQuYWIsWnIsdXQob3QoTGUsMSkscmUsMiw2LFtmaSwicG9zaXRpdmVJbnRlZ2VyIixOYSwkOHQsaU8sIjEiXSkpLE5yKHQuYmIsWnIsdXQob3QoTGUsMSkscmUsMiw2LFtmaSwicHJvY2Vzc2luZ0luc3RydWN0aW9uXy5fdHlwZSIsUmgsImVtcHR5Il0pKSxOcih1KEF0KEt0KHQuYmIpLDApLDM0KSxacix1dChvdChMZSwxKSxyZSwyLDYsW1JoLERILGZpLCJkYXRhIl0pKSxOcih1KEF0KEt0KHQuYmIpLDEpLDM0KSxacix1dChvdChMZSwxKSxyZSwyLDYsW1JoLERILGZpLHk4dF0pKSxOcih0LmNiLFpyLHV0KG90KExlLDEpLHJlLDIsNixbZmksIlFOYW1lIiwkaCxpMV0pKSxOcih0LmRiLFpyLHV0KG90KExlLDEpLHJlLDIsNixbZmksblNdKSksTnIodC5lYixacix1dChvdChMZSwxKSxyZSwyLDYsW2ZpLCJzaG9ydDpPYmplY3QiLE5hLG5TXSkpLE5yKHQuZmIsWnIsdXQob3QoTGUsMSkscmUsMiw2LFtmaSwic2ltcGxlQW55VHlwZSIsUmgsSkldKSksTnIodShBdChLdCh0LmZiKSwwKSwzNCksWnIsdXQob3QoTGUsMSkscmUsMiw2LFtmaSwiOjMiLFJoLEpJXSkpLE5yKHUoQXQoS3QodC5mYiksMSksMzQpLFpyLHV0KG90KExlLDEpLHJlLDIsNixbZmksIjo0IixSaCxKSV0pKSxOcih1KEF0KEt0KHQuZmIpLDIpLDE4KSxacix1dChvdChMZSwxKSxyZSwyLDYsW2ZpLCI6NSIsUmgsSkldKSksTnIodC5nYixacix1dChvdChMZSwxKSxyZSwyLDYsW2ZpLFBhdCwkaCwicHJlc2VydmUiXSkpLE5yKHQuaGIsWnIsdXQob3QoTGUsMSkscmUsMiw2LFtmaSwidGltZSIsJGgsaTFdKSksTnIodC5pYixacix1dChvdChMZSwxKSxyZSwyLDYsW2ZpLG91dCxOYSxVMGUsJGgsaTFdKSksTnIodC5qYixacix1dChvdChMZSwxKSxyZSwyLDYsW2ZpLFcwZSxyTywiMjU1IixpTywiMCJdKSksTnIodC5rYixacix1dChvdChMZSwxKSxyZSwyLDYsW2ZpLCJ1bnNpZ25lZEJ5dGU6T2JqZWN0IixOYSxXMGVdKSksTnIodC5sYixacix1dChvdChMZSwxKSxyZSwyLDYsW2ZpLEswZSxyTywiNDI5NDk2NzI5NSIsaU8sIjAiXSkpLE5yKHQubWIsWnIsdXQob3QoTGUsMSkscmUsMiw2LFtmaSwidW5zaWduZWRJbnQ6T2JqZWN0IixOYSxLMGVdKSksTnIodC5uYixacix1dChvdChMZSwxKSxyZSwyLDYsW2ZpLCJ1bnNpZ25lZExvbmciLE5hLCQ4dCxyTyxZMGUsaU8sIjAiXSkpLE5yKHQub2IsWnIsdXQob3QoTGUsMSkscmUsMiw2LFtmaSxYMGUsck8sIjY1NTM1IixpTywiMCJdKSksTnIodC5wYixacix1dChvdChMZSwxKSxyZSwyLDYsW2ZpLCJ1bnNpZ25lZFNob3J0Ok9iamVjdCIsTmEsWDBlXSkpLE5yKHQucWIsWnIsdXQob3QoTGUsMSkscmUsMiw2LFtmaSwiIixSaCxaSV0pKSxOcih1KEF0KEt0KHQucWIpLDApLDM0KSxacix1dChvdChMZSwxKSxyZSwyLDYsW1JoLGl1dCxmaSwiOm1peGVkIl0pKSxOcih1KEF0KEt0KHQucWIpLDEpLDE4KSxacix1dChvdChMZSwxKSxyZSwyLDYsW1JoLERILGZpLCJ4bWxuczpwcmVmaXgiXSkpLE5yKHUoQXQoS3QodC5xYiksMiksMTgpLFpyLHV0KG90KExlLDEpLHJlLDIsNixbUmgsREgsZmksInhzaTpzY2hlbWFMb2NhdGlvbiJdKSksTnIodShBdChLdCh0LnFiKSwzKSwzNCksWnIsdXQob3QoTGUsMSkscmUsMiw2LFtSaCxJSCxmaSwiY0RBVEEiLE9ILHRPXSkpLE5yKHUoQXQoS3QodC5xYiksNCksMzQpLFpyLHV0KG90KExlLDEpLHJlLDIsNixbUmgsSUgsZmksImNvbW1lbnQiLE9ILHRPXSkpLE5yKHUoQXQoS3QodC5xYiksNSksMTgpLFpyLHV0KG90KExlLDEpLHJlLDIsNixbUmgsSUgsZmksUTBlLE9ILHRPXSkpLE5yKHUoQXQoS3QodC5xYiksNiksMzQpLFpyLHV0KG90KExlLDEpLHJlLDIsNixbUmgsSUgsZmksR2N0LE9ILHRPXSkpfWZ1bmN0aW9uIEdyKHQpe3JldHVybiB1bigiX1VJX0VNRkRpYWdub3N0aWNfbWFya2VyIix0KT8iRU1GIFByb2JsZW0iOnVuKCJfVUlfQ2lyY3VsYXJDb250YWlubWVudF9kaWFnbm9zdGljIix0KT8iQW4gb2JqZWN0IG1heSBub3QgY2lyY3VsYXJseSBjb250YWluIGl0c2VsZiI6dW4oT2RlLHQpPyJXcm9uZyBjaGFyYWN0ZXIuIjp1bihOZGUsdCk/IkludmFsaWQgcmVmZXJlbmNlIG51bWJlci4iOnVuKGtILHQpPyJBIGNoYXJhY3RlciBpcyByZXF1aXJlZCBhZnRlciBcXC4iOnVuKFpjdCx0KT8iJz8nIGlzIG5vdCBleHBlY3RlZC4gICcoPzonIG9yICcoPz0nIG9yICcoPyEnIG9yICcoPzwnIG9yICcoPyMnIG9yICcoPz4nPyI6dW4oUGRlLHQpPyInKD88JyBvciAnKD88IScgaXMgZXhwZWN0ZWQuIjp1bihGZGUsdCk/IkEgY29tbWVudCBpcyBub3QgdGVybWluYXRlZC4iOnVuKE0yLHQpPyInKScgaXMgZXhwZWN0ZWQuIjp1bih4OHQsdCk/IlVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBwYXR0ZXJuIGluIGEgbW9kaWZpZXIgZ3JvdXAuIjp1bihCZGUsdCk/Iic6JyBpcyBleHBlY3RlZC4iOnVuKFJkZSx0KT8iVW5leHBlY3RlZCBlbmQgb2YgdGhlIHBhdHRlcm4gaW4gYSBjb25kaXRpb25hbCBncm91cC4iOnVuKGpkZSx0KT8iQSBiYWNrIHJlZmVyZW5jZSBvciBhbiBhbmNob3Igb3IgYSBsb29rYWhlYWQgb3IgYSBsb29rLWJlaGluZCBpcyBleHBlY3RlZCBpbiBhIGNvbmRpdGlvbmFsIHBhdHRlcm4uIjp1bigkZGUsdCk/IlRoZXJlIGFyZSBtb3JlIHRoYW4gdGhyZWUgY2hvaWNlcyBpbiBhIGNvbmRpdGlvbmFsIGdyb3VwLiI6dW4oemRlLHQpPyJBIGNoYXJhY3RlciBpbiBVKzAwNDAtVSswMDVmIG11c3QgZm9sbG93IFxcYy4iOnVuKHFkZSx0KT8iQSAneycgaXMgcmVxdWlyZWQgYmVmb3JlIGEgY2hhcmFjdGVyIGNhdGVnb3J5LiI6dW4oSGRlLHQpPyJBIHByb3BlcnR5IG5hbWUgaXMgbm90IGNsb3NlZCBieSAnfScuIjp1bihrOHQsdCk/IlVuZXhwZWN0ZWQgbWV0YSBjaGFyYWN0ZXIuIjp1bihKY3QsdCk/IlVua25vd24gcHJvcGVydHkuIjp1bihFOHQsdCk/IkEgUE9TSVggY2hhcmFjdGVyIGNsYXNzIG11c3QgYmUgY2xvc2VkIGJ5ICc6XScuIjp1bihFSCx0KT8iVW5leHBlY3RlZCBlbmQgb2YgdGhlIHBhdHRlcm4gaW4gYSBjaGFyYWN0ZXIgY2xhc3MuIjp1bihWZGUsdCk/IlVua25vd24gbmFtZSBmb3IgYSBQT1NJWCBjaGFyYWN0ZXIgY2xhc3MuIjp1bigicGFyc2VyLmNjLjQiLHQpPyInLScgaXMgaW52YWxpZCBoZXJlLiI6dW4oR2RlLHQpPyInXScgaXMgZXhwZWN0ZWQuIjp1bihUOHQsdCk/IidbJyBpcyBpbnZhbGlkIGluIGEgY2hhcmFjdGVyIGNsYXNzLiAgV3JpdGUgJ1xcWycuIjp1bihfOHQsdCk/IiddJyBpcyBpbnZhbGlkIGluIGEgY2hhcmFjdGVyIGNsYXNzLiAgV3JpdGUgJ1xcXScuIjp1bih0dXQsdCk/IictJyBpcyBhbiBpbnZhbGlkIGNoYXJhY3RlciByYW5nZS4gV3JpdGUgJ1xcLScuIjp1bihVZGUsdCk/IidbJyBpcyBleHBlY3RlZC4iOnVuKFdkZSx0KT8iJyknIG9yICctWycgb3IgJytbJyBvciAnJlsnIGlzIGV4cGVjdGVkLiI6dW4oS2RlLHQpPyJUaGUgcmFuZ2UgZW5kIGNvZGUgcG9pbnQgaXMgbGVzcyB0aGFuIHRoZSBzdGFydCBjb2RlIHBvaW50LiI6dW4oS2csdCk/IkludmFsaWQgVW5pY29kZSBoZXggbm90YXRpb24uIjp1bihZZGUsdCk/Ik92ZXJmbG93IGluIGEgaGV4IG5vdGF0aW9uLiI6dW4oWGRlLHQpPyInXFx4eycgbXVzdCBiZSBjbG9zZWQgYnkgJ30nLiI6dW4oUWRlLHQpPyJJbnZhbGlkIFVuaWNvZGUgY29kZSBwb2ludC4iOnVuKFpkZSx0KT8iQW4gYW5jaG9yIG11c3Qgbm90IGJlIGhlcmUuIjp1bih3aCx0KT8iVGhpcyBleHByZXNzaW9uIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhlIGN1cnJlbnQgb3B0aW9uIHNldHRpbmcuIjp1bihKZGUsdCk/IkludmFsaWQgcXVhbnRpZmllci4gQSBkaWdpdCBpcyBleHBlY3RlZC4iOnVuKHQwZSx0KT8iSW52YWxpZCBxdWFudGlmaWVyLiBJbnZhbGlkIHF1YW50aXR5IG9yIGEgJ30nIGlzIG1pc3NpbmcuIjp1bihlMGUsdCk/IkludmFsaWQgcXVhbnRpZmllci4gQSBkaWdpdCBvciAnfScgaXMgZXhwZWN0ZWQuIjp1bihuMGUsdCk/IkludmFsaWQgcXVhbnRpZmllci4gQSBtaW4gcXVhbnRpdHkgbXVzdCBiZSA8PSBhIG1heCBxdWFudGl0eS4iOnVuKEM4dCx0KT8iSW52YWxpZCBxdWFudGlmaWVyLiBBIHF1YW50aXR5IHZhbHVlIG92ZXJmbG93LiI6dW4oIl9VSV9QYWNrYWdlUmVnaXN0cnlfZXh0ZW5zaW9ucG9pbnQiLHQpPyJFY29yZSBQYWNrYWdlIFJlZ2lzdHJ5IGZvciBHZW5lcmF0ZWQgUGFja2FnZXMiOnVuKCJfVUlfRHluYW1pY1BhY2thZ2VSZWdpc3RyeV9leHRlbnNpb25wb2ludCIsdCk/IkVjb3JlIFBhY2thZ2UgUmVnaXN0cnkgZm9yIER5bmFtaWMgUGFja2FnZXMiOnVuKCJfVUlfRmFjdG9yeVJlZ2lzdHJ5X2V4dGVuc2lvbnBvaW50Iix0KT8iRWNvcmUgRmFjdG9yeSBPdmVycmlkZSBSZWdpc3RyeSI6dW4oIl9VSV9VUklFeHRlbnNpb25QYXJzZXJSZWdpc3RyeV9leHRlbnNpb25wb2ludCIsdCk/IlVSSSBFeHRlbnNpb24gUGFyc2VyIFJlZ2lzdHJ5Ijp1bigiX1VJX1VSSVByb3RvY29sUGFyc2VyUmVnaXN0cnlfZXh0ZW5zaW9ucG9pbnQiLHQpPyJVUkkgUHJvdG9jb2wgUGFyc2VyIFJlZ2lzdHJ5Ijp1bigiX1VJX1VSSUNvbnRlbnRQYXJzZXJSZWdpc3RyeV9leHRlbnNpb25wb2ludCIsdCk/IlVSSSBDb250ZW50IFBhcnNlciBSZWdpc3RyeSI6dW4oIl9VSV9Db250ZW50SGFuZGxlclJlZ2lzdHJ5X2V4dGVuc2lvbnBvaW50Iix0KT8iQ29udGVudCBIYW5kbGVyIFJlZ2lzdHJ5Ijp1bigiX1VJX1VSSU1hcHBpbmdSZWdpc3RyeV9leHRlbnNpb25wb2ludCIsdCk/IlVSSSBDb252ZXJ0ZXIgTWFwcGluZyBSZWdpc3RyeSI6dW4oIl9VSV9QYWNrYWdlUmVnaXN0cnlJbXBsZW1lbnRhdGlvbl9leHRlbnNpb25wb2ludCIsdCk/IkVjb3JlIFBhY2thZ2UgUmVnaXN0cnkgSW1wbGVtZW50YXRpb24iOnVuKCJfVUlfVmFsaWRhdGlvbkRlbGVnYXRlUmVnaXN0cnlfZXh0ZW5zaW9ucG9pbnQiLHQpPyJWYWxpZGF0aW9uIERlbGVnYXRlIFJlZ2lzdHJ5Ijp1bigiX1VJX1NldHRpbmdEZWxlZ2F0ZVJlZ2lzdHJ5X2V4dGVuc2lvbnBvaW50Iix0KT8iRmVhdHVyZSBTZXR0aW5nIERlbGVnYXRlIEZhY3RvcnkgUmVnaXN0cnkiOnVuKCJfVUlfSW52b2NhdGlvbkRlbGVnYXRlUmVnaXN0cnlfZXh0ZW5zaW9ucG9pbnQiLHQpPyJPcGVyYXRpb24gSW52b2NhdGlvbiBEZWxlZ2F0ZSBGYWN0b3J5IFJlZ2lzdHJ5Ijp1bigiX1VJX0VDbGFzc0ludGVyZmFjZU5vdEFic3RyYWN0X2RpYWdub3N0aWMiLHQpPyJBIGNsYXNzIHRoYXQgaXMgYW4gaW50ZXJmYWNlIG11c3QgYWxzbyBiZSBhYnN0cmFjdCI6dW4oIl9VSV9FQ2xhc3NOb0NpcmN1bGFyU3VwZXJUeXBlc19kaWFnbm9zdGljIix0KT8iQSBjbGFzcyBtYXkgbm90IGJlIGEgc3VwZXIgdHlwZSBvZiBpdHNlbGYiOnVuKCJfVUlfRUNsYXNzTm90V2VsbEZvcm1lZE1hcEVudHJ5Tm9JbnN0YW5jZUNsYXNzTmFtZV9kaWFnbm9zdGljIix0KT8iQSBjbGFzcyB0aGF0IGluaGVyaXRzIGZyb20gYSBtYXAgZW50cnkgY2xhc3MgbXVzdCBoYXZlIGluc3RhbmNlIGNsYXNzIG5hbWUgJ2phdmEudXRpbC5NYXAkRW50cnknIjp1bigiX1VJX0VSZWZlcmVuY2VPcHBvc2l0ZU9mT3Bwb3NpdGVJbmNvbnNpc3RlbnRfZGlhZ25vc3RpYyIsdCk/IlRoZSBvcHBvc2l0ZSBvZiB0aGUgb3Bwb3NpdGUgbWF5IG5vdCBiZSBhIHJlZmVyZW5jZSBkaWZmZXJlbnQgZnJvbSB0aGlzIG9uZSI6dW4oIl9VSV9FUmVmZXJlbmNlT3Bwb3NpdGVOb3RGZWF0dXJlT2ZUeXBlX2RpYWdub3N0aWMiLHQpPyJUaGUgb3Bwb3NpdGUgbXVzdCBiZSBhIGZlYXR1cmUgb2YgdGhlIHJlZmVyZW5jZSdzIHR5cGUiOnVuKCJfVUlfRVJlZmVyZW5jZVRyYW5zaWVudE9wcG9zaXRlTm90VHJhbnNpZW50X2RpYWdub3N0aWMiLHQpPyJUaGUgb3Bwb3NpdGUgb2YgYSB0cmFuc2llbnQgcmVmZXJlbmNlIG11c3QgYmUgdHJhbnNpZW50IGlmIGl0IGlzIHByb3h5IHJlc29sdmluZyI6dW4oIl9VSV9FUmVmZXJlbmNlT3Bwb3NpdGVCb3RoQ29udGFpbm1lbnRfZGlhZ25vc3RpYyIsdCk/IlRoZSBvcHBvc2l0ZSBvZiBhIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBtdXN0IG5vdCBiZSBhIGNvbnRhaW5tZW50IHJlZmVyZW5jZSI6dW4oIl9VSV9FUmVmZXJlbmNlQ29uc2lzdGVudFVuaXF1ZV9kaWFnbm9zdGljIix0KT8iQSBjb250YWlubWVudCBvciBiaWRpcmVjdGlvbmFsIHJlZmVyZW5jZSBtdXN0IGJlIHVuaXF1ZSBpZiBpdHMgdXBwZXIgYm91bmQgaXMgZGlmZmVyZW50IGZyb20gMSI6dW4oIl9VSV9FVHlwZWRFbGVtZW50Tm9UeXBlX2RpYWdub3N0aWMiLHQpPyJUaGUgdHlwZWQgZWxlbWVudCBtdXN0IGhhdmUgYSB0eXBlIjp1bigiX1VJX0VBdHRyaWJ1dGVOb0RhdGFUeXBlX2RpYWdub3N0aWMiLHQpPyJUaGUgZ2VuZXJpYyBhdHRyaWJ1dGUgdHlwZSBtdXN0IG5vdCByZWZlciB0byBhIGNsYXNzIjp1bigiX1VJX0VSZWZlcmVuY2VOb0NsYXNzX2RpYWdub3N0aWMiLHQpPyJUaGUgZ2VuZXJpYyByZWZlcmVuY2UgdHlwZSBtdXN0IG5vdCByZWZlciB0byBhIGRhdGEgdHlwZSI6dW4oIl9VSV9FR2VuZXJpY1R5cGVOb1R5cGVQYXJhbWV0ZXJBbmRDbGFzc2lmaWVyX2RpYWdub3N0aWMiLHQpPyJBIGdlbmVyaWMgdHlwZSBjYW4ndCByZWZlciB0byBib3RoIGEgdHlwZSBwYXJhbWV0ZXIgYW5kIGEgY2xhc3NpZmllciI6dW4oIl9VSV9FR2VuZXJpY1R5cGVOb0NsYXNzX2RpYWdub3N0aWMiLHQpPyJBIGdlbmVyaWMgc3VwZXIgdHlwZSBtdXN0IHJlZmVyIHRvIGEgY2xhc3MiOnVuKCJfVUlfRUdlbmVyaWNUeXBlTm9UeXBlUGFyYW1ldGVyT3JDbGFzc2lmaWVyX2RpYWdub3N0aWMiLHQpPyJBIGdlbmVyaWMgdHlwZSBpbiB0aGlzIGNvbnRleHQgbXVzdCByZWZlciB0byBhIGNsYXNzaWZpZXIgb3IgYSB0eXBlIHBhcmFtZXRlciI6dW4oIl9VSV9FR2VuZXJpY1R5cGVCb3VuZHNPbmx5Rm9yVHlwZUFyZ3VtZW50X2RpYWdub3N0aWMiLHQpPyJBIGdlbmVyaWMgdHlwZSBtYXkgaGF2ZSBib3VuZHMgb25seSB3aGVuIHVzZWQgYXMgYSB0eXBlIGFyZ3VtZW50Ijp1bigiX1VJX0VHZW5lcmljVHlwZU5vVXBwZXJBbmRMb3dlckJvdW5kX2RpYWdub3N0aWMiLHQpPyJBIGdlbmVyaWMgdHlwZSBtdXN0IG5vdCBoYXZlIGJvdGggYSBsb3dlciBhbmQgYW4gdXBwZXIgYm91bmQiOnVuKCJfVUlfRUdlbmVyaWNUeXBlTm9UeXBlUGFyYW1ldGVyT3JDbGFzc2lmaWVyQW5kQm91bmRfZGlhZ25vc3RpYyIsdCk/IkEgZ2VuZXJpYyB0eXBlIHdpdGggYm91bmRzIG11c3Qgbm90IGFsc28gcmVmZXIgdG8gYSB0eXBlIHBhcmFtZXRlciBvciBjbGFzc2lmaWVyIjp1bigiX1VJX0VHZW5lcmljVHlwZU5vQXJndW1lbnRzX2RpYWdub3N0aWMiLHQpPyJBIGdlbmVyaWMgdHlwZSBtYXkgaGF2ZSBhcmd1bWVudHMgb25seSBpZiBpdCByZWZlcnMgdG8gYSBjbGFzc2lmaWVyIjp1bigiX1VJX0VHZW5lcmljVHlwZU91dE9mU2NvcGVUeXBlUGFyYW1ldGVyX2RpYWdub3N0aWMiLHQpPyJBIGdlbmVyaWMgdHlwZSBtYXkgb25seSByZWZlciB0byBhIHR5cGUgcGFyYW1ldGVyIHRoYXQgaXMgaW4gc2NvcGUiOnR9ZnVuY3Rpb24gRzVuKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxfLE0sQixxLEcsVzt0LnJ8fCh0LnI9ITAsdHUodCwiZ3JhcGgiKSxzeih0LCJncmFwaCIpLGF6KHQscTcpLE1EKHQubywiVCIpLE9yKFBvKHQuYSksdC5wKSxPcihQbyh0LmYpLHQuYSksT3IoUG8odC5uKSx0LmYpLE9yKFBvKHQuZyksdC5uKSxPcihQbyh0LmMpLHQubiksT3IoUG8odC5pKSx0LmMpLE9yKFBvKHQuaiksdC5jKSxPcihQbyh0LmQpLHQuZiksT3IoUG8odC5lKSx0LmEpLGxjKHQucCxvNm4sSWZlLCEwLCEwLCExKSxHPXM0KHQucCx0LnAsInNldFByb3BlcnR5IiksVz16bmUoRyksaz1EMCh0Lm8pLF89KG49KHI9bmV3IHd2LHIpLG4pLE9yKCghay5kJiYoay5kPW5ldyBCcyh3byxrLDEpKSxrLmQpLF8pLE09aXJ0KFcpLGY0dChfLE0pLFh6KEcsayxoOHQpLGs9aXJ0KFcpLFh6KEcsayxZQyksRz1zNCh0LnAsbnVsbCwiZ2V0UHJvcGVydHkiKSxXPXpuZShHKSxrPUQwKHQubyksXz1pcnQoVyksT3IoKCFrLmQmJihrLmQ9bmV3IEJzKHdvLGssMSkpLGsuZCksXyksWHooRyxrLGg4dCksaz1pcnQoVykscT1GMShHLGssbnVsbCkscSYmcS5GaSgpLEc9czQodC5wLHQud2IuZSwiaGFzUHJvcGVydHkiKSxrPUQwKHQubyksXz0ocz0obz1uZXcgd3YsbykscyksT3IoKCFrLmQmJihrLmQ9bmV3IEJzKHdvLGssMSkpLGsuZCksXyksWHooRyxrLGg4dCksRz1zNCh0LnAsdC5wLCJjb3B5UHJvcGVydGllcyIpLElvKEcsdC5wLHpjdCksRz1zNCh0LnAsbnVsbCwiZ2V0QWxsUHJvcGVydGllcyIpLGs9RDAodC53Yi5QKSxfPUQwKHQubyksT3IoKCFrLmQmJihrLmQ9bmV3IEJzKHdvLGssMSkpLGsuZCksXyksTT0oaD0oZD1uZXcgd3YsZCksaCksT3IoKCFfLmQmJihfLmQ9bmV3IEJzKHdvLF8sMSkpLF8uZCksTSksXz1EMCh0LndiLk0pLE9yKCghay5kJiYoay5kPW5ldyBCcyh3byxrLDEpKSxrLmQpLF8pLEI9RjEoRyxrLG51bGwpLEImJkIuRmkoKSxsYyh0LmEsTEUsdWRlLCEwLCExLCEwKSxVaSh1KEF0KEt0KHQuYSksMCksMTgpLHQuayxudWxsLHhkZSwwLC0xLExFLCExLCExLCEwLCEwLCExLCExLCExKSxsYyh0LmYsc04saGRlLCEwLCExLCEwKSxVaSh1KEF0KEt0KHQuZiksMCksMTgpLHQuZyx1KEF0KEt0KHQuZyksMCksMTgpLCJsYWJlbHMiLDAsLTEsc04sITEsITEsITAsITAsITEsITEsITEpLHhzKHUoQXQoS3QodC5mKSwxKSwzNCksdC53Yi5fLGtkZSxudWxsLDAsMSxzTiwhMSwhMSwhMCwhMSwhMCwhMSksbGModC5uLGFOLCJFbGtTaGFwZSIsITAsITEsITApLHhzKHUoQXQoS3QodC5uKSwwKSwzNCksdC53Yi50LHFjdCxNNywxLDEsYU4sITEsITEsITAsITEsITAsITEpLHhzKHUoQXQoS3QodC5uKSwxKSwzNCksdC53Yi50LEhjdCxNNywxLDEsYU4sITEsITEsITAsITEsITAsITEpLHhzKHUoQXQoS3QodC5uKSwyKSwzNCksdC53Yi50LCJ4IixNNywxLDEsYU4sITEsITEsITAsITEsITAsITEpLHhzKHUoQXQoS3QodC5uKSwzKSwzNCksdC53Yi50LCJ5IixNNywxLDEsYU4sITEsITEsITAsITEsITAsITEpLEc9czQodC5uLG51bGwsInNldERpbWVuc2lvbnMiKSxJbyhHLHQud2IudCxIY3QpLElvKEcsdC53Yi50LHFjdCksRz1zNCh0Lm4sbnVsbCwic2V0TG9jYXRpb24iKSxJbyhHLHQud2IudCwieCIpLElvKEcsdC53Yi50LCJ5IiksbGModC5nLFlvLGM4dCwhMSwhMSwhMCksVWkodShBdChLdCh0LmcpLDApLDE4KSx0LmYsdShBdChLdCh0LmYpLDApLDE4KSxWY3QsMCwxLFlvLCExLCExLCEwLCExLCExLCExLCExKSx4cyh1KEF0KEt0KHQuZyksMSksMzQpLHQud2IuXyxHY3QsIiIsMCwxLFlvLCExLCExLCEwLCExLCEwLCExKSxsYyh0LmMsdnIsZmRlLCEwLCExLCEwKSxVaSh1KEF0KEt0KHQuYyksMCksMTgpLHQuZCx1KEF0KEt0KHQuZCksMSksMTgpLCJvdXRnb2luZ0VkZ2VzIiwwLC0xLHZyLCExLCExLCEwLCExLCEwLCExLCExKSxVaSh1KEF0KEt0KHQuYyksMSksMTgpLHQuZCx1KEF0KEt0KHQuZCksMiksMTgpLCJpbmNvbWluZ0VkZ2VzIiwwLC0xLHZyLCExLCExLCEwLCExLCEwLCExLCExKSxsYyh0LmksZHMsdTh0LCExLCExLCEwKSxVaSh1KEF0KEt0KHQuaSksMCksMTgpLHQuaix1KEF0KEt0KHQuaiksMCksMTgpLCJwb3J0cyIsMCwtMSxkcywhMSwhMSwhMCwhMCwhMSwhMSwhMSksVWkodShBdChLdCh0LmkpLDEpLDE4KSx0LmksdShBdChLdCh0LmkpLDIpLDE4KSxVY3QsMCwtMSxkcywhMSwhMSwhMCwhMCwhMSwhMSwhMSksVWkodShBdChLdCh0LmkpLDIpLDE4KSx0LmksdShBdChLdCh0LmkpLDEpLDE4KSxWY3QsMCwxLGRzLCExLCExLCEwLCExLCExLCExLCExKSxVaSh1KEF0KEt0KHQuaSksMyksMTgpLHQuZCx1KEF0KEt0KHQuZCksMCksMTgpLCJjb250YWluZWRFZGdlcyIsMCwtMSxkcywhMSwhMSwhMCwhMCwhMSwhMSwhMSkseHModShBdChLdCh0LmkpLDQpLDM0KSx0LndiLmUsRWRlLG51bGwsMCwxLGRzLCEwLCEwLCExLCExLCEwLCEwKSxsYyh0LmoseWwsbDh0LCExLCExLCEwKSxVaSh1KEF0KEt0KHQuaiksMCksMTgpLHQuaSx1KEF0KEt0KHQuaSksMCksMTgpLFZjdCwwLDEseWwsITEsITEsITAsITEsITEsITEsITEpLGxjKHQuZCxyYSxvOHQsITEsITEsITApLFVpKHUoQXQoS3QodC5kKSwwKSwxOCksdC5pLHUoQXQoS3QodC5pKSwzKSwxOCksImNvbnRhaW5pbmdOb2RlIiwwLDEscmEsITEsITEsITAsITEsITEsITEsITEpLFVpKHUoQXQoS3QodC5kKSwxKSwxOCksdC5jLHUoQXQoS3QodC5jKSwwKSwxOCksZjh0LDAsLTEscmEsITEsITEsITAsITEsITAsITEsITEpLFVpKHUoQXQoS3QodC5kKSwyKSwxOCksdC5jLHUoQXQoS3QodC5jKSwxKSwxOCksV2N0LDAsLTEscmEsITEsITEsITAsITEsITAsITEsITEpLFVpKHUoQXQoS3QodC5kKSwzKSwxOCksdC5lLHUoQXQoS3QodC5lKSw1KSwxOCksZDh0LDAsLTEscmEsITEsITEsITAsITAsITEsITEsITEpLHhzKHUoQXQoS3QodC5kKSw0KSwzNCksdC53Yi5lLCJoeXBlcmVkZ2UiLG51bGwsMCwxLHJhLCEwLCEwLCExLCExLCEwLCEwKSx4cyh1KEF0KEt0KHQuZCksNSksMzQpLHQud2IuZSxFZGUsbnVsbCwwLDEscmEsITAsITAsITEsITEsITAsITApLHhzKHUoQXQoS3QodC5kKSw2KSwzNCksdC53Yi5lLCJzZWxmbG9vcCIsbnVsbCwwLDEscmEsITAsITAsITEsITEsITAsITApLHhzKHUoQXQoS3QodC5kKSw3KSwzNCksdC53Yi5lLCJjb25uZWN0ZWQiLG51bGwsMCwxLHJhLCEwLCEwLCExLCExLCEwLCEwKSxsYyh0LmIsV2gsbGRlLCExLCExLCEwKSx4cyh1KEF0KEt0KHQuYiksMCksMzQpLHQud2IudCwieCIsTTcsMSwxLFdoLCExLCExLCEwLCExLCEwLCExKSx4cyh1KEF0KEt0KHQuYiksMSksMzQpLHQud2IudCwieSIsTTcsMSwxLFdoLCExLCExLCEwLCExLCEwLCExKSxHPXM0KHQuYixudWxsLCJzZXQiKSxJbyhHLHQud2IudCwieCIpLElvKEcsdC53Yi50LCJ5IiksbGModC5lLHVzLGRkZSwhMSwhMSwhMCkseHModShBdChLdCh0LmUpLDApLDM0KSx0LndiLnQsInN0YXJ0WCIsbnVsbCwwLDEsdXMsITEsITEsITAsITEsITAsITEpLHhzKHUoQXQoS3QodC5lKSwxKSwzNCksdC53Yi50LCJzdGFydFkiLG51bGwsMCwxLHVzLCExLCExLCEwLCExLCEwLCExKSx4cyh1KEF0KEt0KHQuZSksMiksMzQpLHQud2IudCwiZW5kWCIsbnVsbCwwLDEsdXMsITEsITEsITAsITEsITAsITEpLHhzKHUoQXQoS3QodC5lKSwzKSwzNCksdC53Yi50LCJlbmRZIixudWxsLDAsMSx1cywhMSwhMSwhMCwhMSwhMCwhMSksVWkodShBdChLdCh0LmUpLDQpLDE4KSx0LmIsbnVsbCx3SCwwLC0xLHVzLCExLCExLCEwLCEwLCExLCExLCExKSxVaSh1KEF0KEt0KHQuZSksNSksMTgpLHQuZCx1KEF0KEt0KHQuZCksMyksMTgpLFZjdCwwLDEsdXMsITEsITEsITAsITEsITEsITEsITEpLFVpKHUoQXQoS3QodC5lKSw2KSwxOCksdC5jLG51bGwsZzh0LDAsMSx1cywhMSwhMSwhMCwhMSwhMCwhMSwhMSksVWkodShBdChLdCh0LmUpLDcpLDE4KSx0LmMsbnVsbCxwOHQsMCwxLHVzLCExLCExLCEwLCExLCEwLCExLCExKSxVaSh1KEF0KEt0KHQuZSksOCksMTgpLHQuZSx1KEF0KEt0KHQuZSksOSksMTgpLGI4dCwwLC0xLHVzLCExLCExLCEwLCExLCEwLCExLCExKSxVaSh1KEF0KEt0KHQuZSksOSksMTgpLHQuZSx1KEF0KEt0KHQuZSksOCksMTgpLHY4dCwwLC0xLHVzLCExLCExLCEwLCExLCEwLCExLCExKSx4cyh1KEF0KEt0KHQuZSksMTApLDM0KSx0LndiLl8sa2RlLG51bGwsMCwxLHVzLCExLCExLCEwLCExLCEwLCExKSxHPXM0KHQuZSxudWxsLCJzZXRTdGFydExvY2F0aW9uIiksSW8oRyx0LndiLnQsIngiKSxJbyhHLHQud2IudCwieSIpLEc9czQodC5lLG51bGwsInNldEVuZExvY2F0aW9uIiksSW8oRyx0LndiLnQsIngiKSxJbyhHLHQud2IudCwieSIpLGxjKHQuayxJMiwiRWxrUHJvcGVydHlUb1ZhbHVlTWFwRW50cnkiLCExLCExLCExKSxrPUQwKHQubyksXz0odz0oZT1uZXcgd3YsZSksdyksT3IoKCFrLmQmJihrLmQ9bmV3IEJzKHdvLGssMSkpLGsuZCksXyksem9lKHUoQXQoS3QodC5rKSwwKSwzNCksaywia2V5IixJMiwhMSwhMSwhMCwhMSkseHModShBdChLdCh0LmspLDEpLDM0KSx0LnMsWUMsbnVsbCwwLDEsSTIsITEsITEsITAsITEsITAsITEpLGxpKHQubyxKaHQsIklQcm9wZXJ0eSIsITApLGxpKHQucyxRbiwiUHJvcGVydHlWYWx1ZSIsITApLGp5dCh0LHE3KSl9ZnVuY3Rpb24gJGhlKCl7JGhlPVgsd3Q9TnQoWHUsUDQsMjUsUWEsMTUsMSksd3RbOV09MzUsd3RbMTBdPTE5LHd0WzEzXT0xOSx3dFszMl09NTEsd3RbMzNdPTQ5LHd0WzM0XT0zMywkdCh3dCwzNSwzOCw0OSksd3RbMzhdPTEsJHQod3QsMzksNDUsNDkpLCR0KHd0LDQ1LDQ3LC03MSksd3RbNDddPTQ5LCR0KHd0LDQ4LDU4LC03MSksd3RbNThdPTYxLHd0WzU5XT00OSx3dFs2MF09MSx3dFs2MV09NDksd3RbNjJdPTMzLCR0KHd0LDYzLDY1LDQ5KSwkdCh3dCw2NSw5MSwtMyksJHQod3QsOTEsOTMsMzMpLHd0WzkzXT0xLHd0Wzk0XT0zMyx3dFs5NV09LTMsd3RbOTZdPTMzLCR0KHd0LDk3LDEyMywtMyksJHQod3QsMTIzLDE4MywzMyksd3RbMTgzXT0tODcsJHQod3QsMTg0LDE5MiwzMyksJHQod3QsMTkyLDIxNSwtMTkpLHd0WzIxNV09MzMsJHQod3QsMjE2LDI0NywtMTkpLHd0WzI0N109MzMsJHQod3QsMjQ4LDMwNiwtMTkpLCR0KHd0LDMwNiwzMDgsMzMpLCR0KHd0LDMwOCwzMTksLTE5KSwkdCh3dCwzMTksMzIxLDMzKSwkdCh3dCwzMjEsMzI5LC0xOSksd3RbMzI5XT0zMywkdCh3dCwzMzAsMzgzLC0xOSksd3RbMzgzXT0zMywkdCh3dCwzODQsNDUyLC0xOSksJHQod3QsNDUyLDQ2MSwzMyksJHQod3QsNDYxLDQ5NywtMTkpLCR0KHd0LDQ5Nyw1MDAsMzMpLCR0KHd0LDUwMCw1MDIsLTE5KSwkdCh3dCw1MDIsNTA2LDMzKSwkdCh3dCw1MDYsNTM2LC0xOSksJHQod3QsNTM2LDU5MiwzMyksJHQod3QsNTkyLDY4MSwtMTkpLCR0KHd0LDY4MSw2OTksMzMpLCR0KHd0LDY5OSw3MDYsLTE5KSwkdCh3dCw3MDYsNzIwLDMzKSwkdCh3dCw3MjAsNzIyLC04NyksJHQod3QsNzIyLDc2OCwzMyksJHQod3QsNzY4LDgzOCwtODcpLCR0KHd0LDgzOCw4NjQsMzMpLCR0KHd0LDg2NCw4NjYsLTg3KSwkdCh3dCw4NjYsOTAyLDMzKSx3dFs5MDJdPS0xOSx3dFs5MDNdPS04NywkdCh3dCw5MDQsOTA3LC0xOSksd3RbOTA3XT0zMyx3dFs5MDhdPS0xOSx3dFs5MDldPTMzLCR0KHd0LDkxMCw5MzAsLTE5KSx3dFs5MzBdPTMzLCR0KHd0LDkzMSw5NzUsLTE5KSx3dFs5NzVdPTMzLCR0KHd0LDk3Niw5ODMsLTE5KSwkdCh3dCw5ODMsOTg2LDMzKSx3dFs5ODZdPS0xOSx3dFs5ODddPTMzLHd0Wzk4OF09LTE5LHd0Wzk4OV09MzMsd3RbOTkwXT0tMTksd3RbOTkxXT0zMyx3dFs5OTJdPS0xOSx3dFs5OTNdPTMzLCR0KHd0LDk5NCwxMDEyLC0xOSksJHQod3QsMTAxMiwxMDI1LDMzKSwkdCh3dCwxMDI1LDEwMzcsLTE5KSx3dFsxMDM3XT0zMywkdCh3dCwxMDM4LDExMDQsLTE5KSx3dFsxMTA0XT0zMywkdCh3dCwxMTA1LDExMTcsLTE5KSx3dFsxMTE3XT0zMywkdCh3dCwxMTE4LDExNTQsLTE5KSx3dFsxMTU0XT0zMywkdCh3dCwxMTU1LDExNTksLTg3KSwkdCh3dCwxMTU5LDExNjgsMzMpLCR0KHd0LDExNjgsMTIyMSwtMTkpLCR0KHd0LDEyMjEsMTIyMywzMyksJHQod3QsMTIyMywxMjI1LC0xOSksJHQod3QsMTIyNSwxMjI3LDMzKSwkdCh3dCwxMjI3LDEyMjksLTE5KSwkdCh3dCwxMjI5LDEyMzIsMzMpLCR0KHd0LDEyMzIsMTI2MCwtMTkpLCR0KHd0LDEyNjAsMTI2MiwzMyksJHQod3QsMTI2MiwxMjcwLC0xOSksJHQod3QsMTI3MCwxMjcyLDMzKSwkdCh3dCwxMjcyLDEyNzQsLTE5KSwkdCh3dCwxMjc0LDEzMjksMzMpLCR0KHd0LDEzMjksMTM2NywtMTkpLCR0KHd0LDEzNjcsMTM2OSwzMyksd3RbMTM2OV09LTE5LCR0KHd0LDEzNzAsMTM3NywzMyksJHQod3QsMTM3NywxNDE1LC0xOSksJHQod3QsMTQxNSwxNDI1LDMzKSwkdCh3dCwxNDI1LDE0NDIsLTg3KSx3dFsxNDQyXT0zMywkdCh3dCwxNDQzLDE0NjYsLTg3KSx3dFsxNDY2XT0zMywkdCh3dCwxNDY3LDE0NzAsLTg3KSx3dFsxNDcwXT0zMyx3dFsxNDcxXT0tODcsd3RbMTQ3Ml09MzMsJHQod3QsMTQ3MywxNDc1LC04Nyksd3RbMTQ3NV09MzMsd3RbMTQ3Nl09LTg3LCR0KHd0LDE0NzcsMTQ4OCwzMyksJHQod3QsMTQ4OCwxNTE1LC0xOSksJHQod3QsMTUxNSwxNTIwLDMzKSwkdCh3dCwxNTIwLDE1MjMsLTE5KSwkdCh3dCwxNTIzLDE1NjksMzMpLCR0KHd0LDE1NjksMTU5NSwtMTkpLCR0KHd0LDE1OTUsMTYwMCwzMyksd3RbMTYwMF09LTg3LCR0KHd0LDE2MDEsMTYxMSwtMTkpLCR0KHd0LDE2MTEsMTYxOSwtODcpLCR0KHd0LDE2MTksMTYzMiwzMyksJHQod3QsMTYzMiwxNjQyLC04NyksJHQod3QsMTY0MiwxNjQ4LDMzKSx3dFsxNjQ4XT0tODcsJHQod3QsMTY0OSwxNzIwLC0xOSksJHQod3QsMTcyMCwxNzIyLDMzKSwkdCh3dCwxNzIyLDE3MjcsLTE5KSx3dFsxNzI3XT0zMywkdCh3dCwxNzI4LDE3NDMsLTE5KSx3dFsxNzQzXT0zMywkdCh3dCwxNzQ0LDE3NDgsLTE5KSx3dFsxNzQ4XT0zMyx3dFsxNzQ5XT0tMTksJHQod3QsMTc1MCwxNzY1LC04NyksJHQod3QsMTc2NSwxNzY3LC0xOSksJHQod3QsMTc2NywxNzY5LC04Nyksd3RbMTc2OV09MzMsJHQod3QsMTc3MCwxNzc0LC04NyksJHQod3QsMTc3NCwxNzc2LDMzKSwkdCh3dCwxNzc2LDE3ODYsLTg3KSwkdCh3dCwxNzg2LDIzMDUsMzMpLCR0KHd0LDIzMDUsMjMwOCwtODcpLHd0WzIzMDhdPTMzLCR0KHd0LDIzMDksMjM2MiwtMTkpLCR0KHd0LDIzNjIsMjM2NCwzMyksd3RbMjM2NF09LTg3LHd0WzIzNjVdPS0xOSwkdCh3dCwyMzY2LDIzODIsLTg3KSwkdCh3dCwyMzgyLDIzODUsMzMpLCR0KHd0LDIzODUsMjM4OSwtODcpLCR0KHd0LDIzODksMjM5MiwzMyksJHQod3QsMjM5MiwyNDAyLC0xOSksJHQod3QsMjQwMiwyNDA0LC04NyksJHQod3QsMjQwNCwyNDA2LDMzKSwkdCh3dCwyNDA2LDI0MTYsLTg3KSwkdCh3dCwyNDE2LDI0MzMsMzMpLCR0KHd0LDI0MzMsMjQzNiwtODcpLHd0WzI0MzZdPTMzLCR0KHd0LDI0MzcsMjQ0NSwtMTkpLCR0KHd0LDI0NDUsMjQ0NywzMyksJHQod3QsMjQ0NywyNDQ5LC0xOSksJHQod3QsMjQ0OSwyNDUxLDMzKSwkdCh3dCwyNDUxLDI0NzMsLTE5KSx3dFsyNDczXT0zMywkdCh3dCwyNDc0LDI0ODEsLTE5KSx3dFsyNDgxXT0zMyx3dFsyNDgyXT0tMTksJHQod3QsMjQ4MywyNDg2LDMzKSwkdCh3dCwyNDg2LDI0OTAsLTE5KSwkdCh3dCwyNDkwLDI0OTIsMzMpLHd0WzI0OTJdPS04Nyx3dFsyNDkzXT0zMywkdCh3dCwyNDk0LDI1MDEsLTg3KSwkdCh3dCwyNTAxLDI1MDMsMzMpLCR0KHd0LDI1MDMsMjUwNSwtODcpLCR0KHd0LDI1MDUsMjUwNywzMyksJHQod3QsMjUwNywyNTEwLC04NyksJHQod3QsMjUxMCwyNTE5LDMzKSx3dFsyNTE5XT0tODcsJHQod3QsMjUyMCwyNTI0LDMzKSwkdCh3dCwyNTI0LDI1MjYsLTE5KSx3dFsyNTI2XT0zMywkdCh3dCwyNTI3LDI1MzAsLTE5KSwkdCh3dCwyNTMwLDI1MzIsLTg3KSwkdCh3dCwyNTMyLDI1MzQsMzMpLCR0KHd0LDI1MzQsMjU0NCwtODcpLCR0KHd0LDI1NDQsMjU0NiwtMTkpLCR0KHd0LDI1NDYsMjU2MiwzMyksd3RbMjU2Ml09LTg3LCR0KHd0LDI1NjMsMjU2NSwzMyksJHQod3QsMjU2NSwyNTcxLC0xOSksJHQod3QsMjU3MSwyNTc1LDMzKSwkdCh3dCwyNTc1LDI1NzcsLTE5KSwkdCh3dCwyNTc3LDI1NzksMzMpLCR0KHd0LDI1NzksMjYwMSwtMTkpLHd0WzI2MDFdPTMzLCR0KHd0LDI2MDIsMjYwOSwtMTkpLHd0WzI2MDldPTMzLCR0KHd0LDI2MTAsMjYxMiwtMTkpLHd0WzI2MTJdPTMzLCR0KHd0LDI2MTMsMjYxNSwtMTkpLHd0WzI2MTVdPTMzLCR0KHd0LDI2MTYsMjYxOCwtMTkpLCR0KHd0LDI2MTgsMjYyMCwzMyksd3RbMjYyMF09LTg3LHd0WzI2MjFdPTMzLCR0KHd0LDI2MjIsMjYyNywtODcpLCR0KHd0LDI2MjcsMjYzMSwzMyksJHQod3QsMjYzMSwyNjMzLC04NyksJHQod3QsMjYzMywyNjM1LDMzKSwkdCh3dCwyNjM1LDI2MzgsLTg3KSwkdCh3dCwyNjM4LDI2NDksMzMpLCR0KHd0LDI2NDksMjY1MywtMTkpLHd0WzI2NTNdPTMzLHd0WzI2NTRdPS0xOSwkdCh3dCwyNjU1LDI2NjIsMzMpLCR0KHd0LDI2NjIsMjY3NCwtODcpLCR0KHd0LDI2NzQsMjY3NywtMTkpLCR0KHd0LDI2NzcsMjY4OSwzMyksJHQod3QsMjY4OSwyNjkyLC04Nyksd3RbMjY5Ml09MzMsJHQod3QsMjY5MywyNzAwLC0xOSksd3RbMjcwMF09MzMsd3RbMjcwMV09LTE5LHd0WzI3MDJdPTMzLCR0KHd0LDI3MDMsMjcwNiwtMTkpLHd0WzI3MDZdPTMzLCR0KHd0LDI3MDcsMjcyOSwtMTkpLHd0WzI3MjldPTMzLCR0KHd0LDI3MzAsMjczNywtMTkpLHd0WzI3MzddPTMzLCR0KHd0LDI3MzgsMjc0MCwtMTkpLHd0WzI3NDBdPTMzLCR0KHd0LDI3NDEsMjc0NiwtMTkpLCR0KHd0LDI3NDYsMjc0OCwzMyksd3RbMjc0OF09LTg3LHd0WzI3NDldPS0xOSwkdCh3dCwyNzUwLDI3NTgsLTg3KSx3dFsyNzU4XT0zMywkdCh3dCwyNzU5LDI3NjIsLTg3KSx3dFsyNzYyXT0zMywkdCh3dCwyNzYzLDI3NjYsLTg3KSwkdCh3dCwyNzY2LDI3ODQsMzMpLHd0WzI3ODRdPS0xOSwkdCh3dCwyNzg1LDI3OTAsMzMpLCR0KHd0LDI3OTAsMjgwMCwtODcpLCR0KHd0LDI4MDAsMjgxNywzMyksJHQod3QsMjgxNywyODIwLC04Nyksd3RbMjgyMF09MzMsJHQod3QsMjgyMSwyODI5LC0xOSksJHQod3QsMjgyOSwyODMxLDMzKSwkdCh3dCwyODMxLDI4MzMsLTE5KSwkdCh3dCwyODMzLDI4MzUsMzMpLCR0KHd0LDI4MzUsMjg1NywtMTkpLHd0WzI4NTddPTMzLCR0KHd0LDI4NTgsMjg2NSwtMTkpLHd0WzI4NjVdPTMzLCR0KHd0LDI4NjYsMjg2OCwtMTkpLCR0KHd0LDI4NjgsMjg3MCwzMyksJHQod3QsMjg3MCwyODc0LC0xOSksJHQod3QsMjg3NCwyODc2LDMzKSx3dFsyODc2XT0tODcsd3RbMjg3N109LTE5LCR0KHd0LDI4NzgsMjg4NCwtODcpLCR0KHd0LDI4ODQsMjg4NywzMyksJHQod3QsMjg4NywyODg5LC04NyksJHQod3QsMjg4OSwyODkxLDMzKSwkdCh3dCwyODkxLDI4OTQsLTg3KSwkdCh3dCwyODk0LDI5MDIsMzMpLCR0KHd0LDI5MDIsMjkwNCwtODcpLCR0KHd0LDI5MDQsMjkwOCwzMyksJHQod3QsMjkwOCwyOTEwLC0xOSksd3RbMjkxMF09MzMsJHQod3QsMjkxMSwyOTE0LC0xOSksJHQod3QsMjkxNCwyOTE4LDMzKSwkdCh3dCwyOTE4LDI5MjgsLTg3KSwkdCh3dCwyOTI4LDI5NDYsMzMpLCR0KHd0LDI5NDYsMjk0OCwtODcpLHd0WzI5NDhdPTMzLCR0KHd0LDI5NDksMjk1NSwtMTkpLCR0KHd0LDI5NTUsMjk1OCwzMyksJHQod3QsMjk1OCwyOTYxLC0xOSksd3RbMjk2MV09MzMsJHQod3QsMjk2MiwyOTY2LC0xOSksJHQod3QsMjk2NiwyOTY5LDMzKSwkdCh3dCwyOTY5LDI5NzEsLTE5KSx3dFsyOTcxXT0zMyx3dFsyOTcyXT0tMTksd3RbMjk3M109MzMsJHQod3QsMjk3NCwyOTc2LC0xOSksJHQod3QsMjk3NiwyOTc5LDMzKSwkdCh3dCwyOTc5LDI5ODEsLTE5KSwkdCh3dCwyOTgxLDI5ODQsMzMpLCR0KHd0LDI5ODQsMjk4NywtMTkpLCR0KHd0LDI5ODcsMjk5MCwzMyksJHQod3QsMjk5MCwyOTk4LC0xOSksd3RbMjk5OF09MzMsJHQod3QsMjk5OSwzMDAyLC0xOSksJHQod3QsMzAwMiwzMDA2LDMzKSwkdCh3dCwzMDA2LDMwMTEsLTg3KSwkdCh3dCwzMDExLDMwMTQsMzMpLCR0KHd0LDMwMTQsMzAxNywtODcpLHd0WzMwMTddPTMzLCR0KHd0LDMwMTgsMzAyMiwtODcpLCR0KHd0LDMwMjIsMzAzMSwzMyksd3RbMzAzMV09LTg3LCR0KHd0LDMwMzIsMzA0NywzMyksJHQod3QsMzA0NywzMDU2LC04NyksJHQod3QsMzA1NiwzMDczLDMzKSwkdCh3dCwzMDczLDMwNzYsLTg3KSx3dFszMDc2XT0zMywkdCh3dCwzMDc3LDMwODUsLTE5KSx3dFszMDg1XT0zMywkdCh3dCwzMDg2LDMwODksLTE5KSx3dFszMDg5XT0zMywkdCh3dCwzMDkwLDMxMTMsLTE5KSx3dFszMTEzXT0zMywkdCh3dCwzMTE0LDMxMjQsLTE5KSx3dFszMTI0XT0zMywkdCh3dCwzMTI1LDMxMzAsLTE5KSwkdCh3dCwzMTMwLDMxMzQsMzMpLCR0KHd0LDMxMzQsMzE0MSwtODcpLHd0WzMxNDFdPTMzLCR0KHd0LDMxNDIsMzE0NSwtODcpLHd0WzMxNDVdPTMzLCR0KHd0LDMxNDYsMzE1MCwtODcpLCR0KHd0LDMxNTAsMzE1NywzMyksJHQod3QsMzE1NywzMTU5LC04NyksJHQod3QsMzE1OSwzMTY4LDMzKSwkdCh3dCwzMTY4LDMxNzAsLTE5KSwkdCh3dCwzMTcwLDMxNzQsMzMpLCR0KHd0LDMxNzQsMzE4NCwtODcpLCR0KHd0LDMxODQsMzIwMiwzMyksJHQod3QsMzIwMiwzMjA0LC04Nyksd3RbMzIwNF09MzMsJHQod3QsMzIwNSwzMjEzLC0xOSksd3RbMzIxM109MzMsJHQod3QsMzIxNCwzMjE3LC0xOSksd3RbMzIxN109MzMsJHQod3QsMzIxOCwzMjQxLC0xOSksd3RbMzI0MV09MzMsJHQod3QsMzI0MiwzMjUyLC0xOSksd3RbMzI1Ml09MzMsJHQod3QsMzI1MywzMjU4LC0xOSksJHQod3QsMzI1OCwzMjYyLDMzKSwkdCh3dCwzMjYyLDMyNjksLTg3KSx3dFszMjY5XT0zMywkdCh3dCwzMjcwLDMyNzMsLTg3KSx3dFszMjczXT0zMywkdCh3dCwzMjc0LDMyNzgsLTg3KSwkdCh3dCwzMjc4LDMyODUsMzMpLCR0KHd0LDMyODUsMzI4NywtODcpLCR0KHd0LDMyODcsMzI5NCwzMyksd3RbMzI5NF09LTE5LHd0WzMyOTVdPTMzLCR0KHd0LDMyOTYsMzI5OCwtMTkpLCR0KHd0LDMyOTgsMzMwMiwzMyksJHQod3QsMzMwMiwzMzEyLC04NyksJHQod3QsMzMxMiwzMzMwLDMzKSwkdCh3dCwzMzMwLDMzMzIsLTg3KSx3dFszMzMyXT0zMywkdCh3dCwzMzMzLDMzNDEsLTE5KSx3dFszMzQxXT0zMywkdCh3dCwzMzQyLDMzNDUsLTE5KSx3dFszMzQ1XT0zMywkdCh3dCwzMzQ2LDMzNjksLTE5KSx3dFszMzY5XT0zMywkdCh3dCwzMzcwLDMzODYsLTE5KSwkdCh3dCwzMzg2LDMzOTAsMzMpLCR0KHd0LDMzOTAsMzM5NiwtODcpLCR0KHd0LDMzOTYsMzM5OCwzMyksJHQod3QsMzM5OCwzNDAxLC04Nyksd3RbMzQwMV09MzMsJHQod3QsMzQwMiwzNDA2LC04NyksJHQod3QsMzQwNiwzNDE1LDMzKSx3dFszNDE1XT0tODcsJHQod3QsMzQxNiwzNDI0LDMzKSwkdCh3dCwzNDI0LDM0MjYsLTE5KSwkdCh3dCwzNDI2LDM0MzAsMzMpLCR0KHd0LDM0MzAsMzQ0MCwtODcpLCR0KHd0LDM0NDAsMzU4NSwzMyksJHQod3QsMzU4NSwzNjMxLC0xOSksd3RbMzYzMV09MzMsd3RbMzYzMl09LTE5LHd0WzM2MzNdPS04NywkdCh3dCwzNjM0LDM2MzYsLTE5KSwkdCh3dCwzNjM2LDM2NDMsLTg3KSwkdCh3dCwzNjQzLDM2NDgsMzMpLCR0KHd0LDM2NDgsMzY1NCwtMTkpLCR0KHd0LDM2NTQsMzY2MywtODcpLHd0WzM2NjNdPTMzLCR0KHd0LDM2NjQsMzY3NCwtODcpLCR0KHd0LDM2NzQsMzcxMywzMyksJHQod3QsMzcxMywzNzE1LC0xOSksd3RbMzcxNV09MzMsd3RbMzcxNl09LTE5LCR0KHd0LDM3MTcsMzcxOSwzMyksJHQod3QsMzcxOSwzNzIxLC0xOSksd3RbMzcyMV09MzMsd3RbMzcyMl09LTE5LCR0KHd0LDM3MjMsMzcyNSwzMyksd3RbMzcyNV09LTE5LCR0KHd0LDM3MjYsMzczMiwzMyksJHQod3QsMzczMiwzNzM2LC0xOSksd3RbMzczNl09MzMsJHQod3QsMzczNywzNzQ0LC0xOSksd3RbMzc0NF09MzMsJHQod3QsMzc0NSwzNzQ4LC0xOSksd3RbMzc0OF09MzMsd3RbMzc0OV09LTE5LHd0WzM3NTBdPTMzLHd0WzM3NTFdPS0xOSwkdCh3dCwzNzUyLDM3NTQsMzMpLCR0KHd0LDM3NTQsMzc1NiwtMTkpLHd0WzM3NTZdPTMzLCR0KHd0LDM3NTcsMzc1OSwtMTkpLHd0WzM3NTldPTMzLHd0WzM3NjBdPS0xOSx3dFszNzYxXT0tODcsJHQod3QsMzc2MiwzNzY0LC0xOSksJHQod3QsMzc2NCwzNzcwLC04Nyksd3RbMzc3MF09MzMsJHQod3QsMzc3MSwzNzczLC04Nyksd3RbMzc3M109LTE5LCR0KHd0LDM3NzQsMzc3NiwzMyksJHQod3QsMzc3NiwzNzgxLC0xOSksd3RbMzc4MV09MzMsd3RbMzc4Ml09LTg3LHd0WzM3ODNdPTMzLCR0KHd0LDM3ODQsMzc5MCwtODcpLCR0KHd0LDM3OTAsMzc5MiwzMyksJHQod3QsMzc5MiwzODAyLC04NyksJHQod3QsMzgwMiwzODY0LDMzKSwkdCh3dCwzODY0LDM4NjYsLTg3KSwkdCh3dCwzODY2LDM4NzIsMzMpLCR0KHd0LDM4NzIsMzg4MiwtODcpLCR0KHd0LDM4ODIsMzg5MywzMyksd3RbMzg5M109LTg3LHd0WzM4OTRdPTMzLHd0WzM4OTVdPS04Nyx3dFszODk2XT0zMyx3dFszODk3XT0tODcsJHQod3QsMzg5OCwzOTAyLDMzKSwkdCh3dCwzOTAyLDM5MDQsLTg3KSwkdCh3dCwzOTA0LDM5MTIsLTE5KSx3dFszOTEyXT0zMywkdCh3dCwzOTEzLDM5NDYsLTE5KSwkdCh3dCwzOTQ2LDM5NTMsMzMpLCR0KHd0LDM5NTMsMzk3MywtODcpLHd0WzM5NzNdPTMzLCR0KHd0LDM5NzQsMzk4MCwtODcpLCR0KHd0LDM5ODAsMzk4NCwzMyksJHQod3QsMzk4NCwzOTkwLC04Nyksd3RbMzk5MF09MzMsd3RbMzk5MV09LTg3LHd0WzM5OTJdPTMzLCR0KHd0LDM5OTMsNDAxNCwtODcpLCR0KHd0LDQwMTQsNDAxNywzMyksJHQod3QsNDAxNyw0MDI0LC04Nyksd3RbNDAyNF09MzMsd3RbNDAyNV09LTg3LCR0KHd0LDQwMjYsNDI1NiwzMyksJHQod3QsNDI1Niw0Mjk0LC0xOSksJHQod3QsNDI5NCw0MzA0LDMzKSwkdCh3dCw0MzA0LDQzNDMsLTE5KSwkdCh3dCw0MzQzLDQzNTIsMzMpLHd0WzQzNTJdPS0xOSx3dFs0MzUzXT0zMywkdCh3dCw0MzU0LDQzNTYsLTE5KSx3dFs0MzU2XT0zMywkdCh3dCw0MzU3LDQzNjAsLTE5KSx3dFs0MzYwXT0zMyx3dFs0MzYxXT0tMTksd3RbNDM2Ml09MzMsJHQod3QsNDM2Myw0MzY1LC0xOSksd3RbNDM2NV09MzMsJHQod3QsNDM2Niw0MzcxLC0xOSksJHQod3QsNDM3MSw0NDEyLDMzKSx3dFs0NDEyXT0tMTksd3RbNDQxM109MzMsd3RbNDQxNF09LTE5LHd0WzQ0MTVdPTMzLHd0WzQ0MTZdPS0xOSwkdCh3dCw0NDE3LDQ0MjgsMzMpLHd0WzQ0MjhdPS0xOSx3dFs0NDI5XT0zMyx3dFs0NDMwXT0tMTksd3RbNDQzMV09MzMsd3RbNDQzMl09LTE5LCR0KHd0LDQ0MzMsNDQzNiwzMyksJHQod3QsNDQzNiw0NDM4LC0xOSksJHQod3QsNDQzOCw0NDQxLDMzKSx3dFs0NDQxXT0tMTksJHQod3QsNDQ0Miw0NDQ3LDMzKSwkdCh3dCw0NDQ3LDQ0NTAsLTE5KSx3dFs0NDUwXT0zMyx3dFs0NDUxXT0tMTksd3RbNDQ1Ml09MzMsd3RbNDQ1M109LTE5LHd0WzQ0NTRdPTMzLHd0WzQ0NTVdPS0xOSx3dFs0NDU2XT0zMyx3dFs0NDU3XT0tMTksJHQod3QsNDQ1OCw0NDYxLDMzKSwkdCh3dCw0NDYxLDQ0NjMsLTE5KSwkdCh3dCw0NDYzLDQ0NjYsMzMpLCR0KHd0LDQ0NjYsNDQ2OCwtMTkpLHd0WzQ0NjhdPTMzLHd0WzQ0NjldPS0xOSwkdCh3dCw0NDcwLDQ1MTAsMzMpLHd0WzQ1MTBdPS0xOSwkdCh3dCw0NTExLDQ1MjAsMzMpLHd0WzQ1MjBdPS0xOSwkdCh3dCw0NTIxLDQ1MjMsMzMpLHd0WzQ1MjNdPS0xOSwkdCh3dCw0NTI0LDQ1MjYsMzMpLCR0KHd0LDQ1MjYsNDUyOCwtMTkpLCR0KHd0LDQ1MjgsNDUzNSwzMyksJHQod3QsNDUzNSw0NTM3LC0xOSksd3RbNDUzN109MzMsd3RbNDUzOF09LTE5LHd0WzQ1MzldPTMzLCR0KHd0LDQ1NDAsNDU0NywtMTkpLCR0KHd0LDQ1NDcsNDU4NywzMyksd3RbNDU4N109LTE5LCR0KHd0LDQ1ODgsNDU5MiwzMyksd3RbNDU5Ml09LTE5LCR0KHd0LDQ1OTMsNDYwMSwzMyksd3RbNDYwMV09LTE5LCR0KHd0LDQ2MDIsNzY4MCwzMyksJHQod3QsNzY4MCw3ODM2LC0xOSksJHQod3QsNzgzNiw3ODQwLDMzKSwkdCh3dCw3ODQwLDc5MzAsLTE5KSwkdCh3dCw3OTMwLDc5MzYsMzMpLCR0KHd0LDc5MzYsNzk1OCwtMTkpLCR0KHd0LDc5NTgsNzk2MCwzMyksJHQod3QsNzk2MCw3OTY2LC0xOSksJHQod3QsNzk2Niw3OTY4LDMzKSwkdCh3dCw3OTY4LDgwMDYsLTE5KSwkdCh3dCw4MDA2LDgwMDgsMzMpLCR0KHd0LDgwMDgsODAxNCwtMTkpLCR0KHd0LDgwMTQsODAxNiwzMyksJHQod3QsODAxNiw4MDI0LC0xOSksd3RbODAyNF09MzMsd3RbODAyNV09LTE5LHd0WzgwMjZdPTMzLHd0WzgwMjddPS0xOSx3dFs4MDI4XT0zMyx3dFs4MDI5XT0tMTksd3RbODAzMF09MzMsJHQod3QsODAzMSw4MDYyLC0xOSksJHQod3QsODA2Miw4MDY0LDMzKSwkdCh3dCw4MDY0LDgxMTcsLTE5KSx3dFs4MTE3XT0zMywkdCh3dCw4MTE4LDgxMjUsLTE5KSx3dFs4MTI1XT0zMyx3dFs4MTI2XT0tMTksJHQod3QsODEyNyw4MTMwLDMzKSwkdCh3dCw4MTMwLDgxMzMsLTE5KSx3dFs4MTMzXT0zMywkdCh3dCw4MTM0LDgxNDEsLTE5KSwkdCh3dCw4MTQxLDgxNDQsMzMpLCR0KHd0LDgxNDQsODE0OCwtMTkpLCR0KHd0LDgxNDgsODE1MCwzMyksJHQod3QsODE1MCw4MTU2LC0xOSksJHQod3QsODE1Niw4MTYwLDMzKSwkdCh3dCw4MTYwLDgxNzMsLTE5KSwkdCh3dCw4MTczLDgxNzgsMzMpLCR0KHd0LDgxNzgsODE4MSwtMTkpLHd0WzgxODFdPTMzLCR0KHd0LDgxODIsODE4OSwtMTkpLCR0KHd0LDgxODksODQwMCwzMyksJHQod3QsODQwMCw4NDEzLC04NyksJHQod3QsODQxMyw4NDE3LDMzKSx3dFs4NDE3XT0tODcsJHQod3QsODQxOCw4NDg2LDMzKSx3dFs4NDg2XT0tMTksJHQod3QsODQ4Nyw4NDkwLDMzKSwkdCh3dCw4NDkwLDg0OTIsLTE5KSwkdCh3dCw4NDkyLDg0OTQsMzMpLHd0Wzg0OTRdPS0xOSwkdCh3dCw4NDk1LDg1NzYsMzMpLCR0KHd0LDg1NzYsODU3OSwtMTkpLCR0KHd0LDg1NzksMTIyOTMsMzMpLHd0WzEyMjkzXT0tODcsd3RbMTIyOTRdPTMzLHd0WzEyMjk1XT0tMTksJHQod3QsMTIyOTYsMTIzMjEsMzMpLCR0KHd0LDEyMzIxLDEyMzMwLC0xOSksJHQod3QsMTIzMzAsMTIzMzYsLTg3KSx3dFsxMjMzNl09MzMsJHQod3QsMTIzMzcsMTIzNDIsLTg3KSwkdCh3dCwxMjM0MiwxMjM1MywzMyksJHQod3QsMTIzNTMsMTI0MzcsLTE5KSwkdCh3dCwxMjQzNywxMjQ0MSwzMyksJHQod3QsMTI0NDEsMTI0NDMsLTg3KSwkdCh3dCwxMjQ0MywxMjQ0NSwzMyksJHQod3QsMTI0NDUsMTI0NDcsLTg3KSwkdCh3dCwxMjQ0NywxMjQ0OSwzMyksJHQod3QsMTI0NDksMTI1MzksLTE5KSx3dFsxMjUzOV09MzMsJHQod3QsMTI1NDAsMTI1NDMsLTg3KSwkdCh3dCwxMjU0MywxMjU0OSwzMyksJHQod3QsMTI1NDksMTI1ODksLTE5KSwkdCh3dCwxMjU4OSwxOTk2OCwzMyksJHQod3QsMTk5NjgsNDA4NzAsLTE5KSwkdCh3dCw0MDg3MCw0NDAzMiwzMyksJHQod3QsNDQwMzIsNTUyMDQsLTE5KSwkdCh3dCw1NTIwNCxPSSwzMyksJHQod3QsNTczNDQsNjU1MzQsMzMpfWZ1bmN0aW9uIFU1bih0KXt2YXIgZSxuLHIscyxvLGgsZDt0LmhifHwodC5oYj0hMCx0dSh0LCJlY29yZSIpLHN6KHQsImVjb3JlIiksYXoodCxqaCksTUQodC5mYiwiRSIpLE1EKHQuTCwiVCIpLE1EKHQuUCwiSyIpLE1EKHQuUCwiViIpLE1EKHQuY2IsIkUiKSxPcihQbyh0LmIpLHQuYmIpLE9yKFBvKHQuYSksdC5RKSxPcihQbyh0Lm8pLHQucCksT3IoUG8odC5wKSx0LlIpLE9yKFBvKHQucSksdC5wKSxPcihQbyh0LnYpLHQucSksT3IoUG8odC53KSx0LlIpLE9yKFBvKHQuQiksdC5RKSxPcihQbyh0LlIpLHQuUSksT3IoUG8odC5UKSx0LmViKSxPcihQbyh0LlUpLHQuUiksT3IoUG8odC5WKSx0LmViKSxPcihQbyh0LlcpLHQuYmIpLE9yKFBvKHQuYmIpLHQuZWIpLE9yKFBvKHQuZWIpLHQuUiksT3IoUG8odC5kYiksdC5SKSxsYyh0LmIsWnksZjBlLCExLCExLCEwKSx4cyh1KEF0KEt0KHQuYiksMCksMzQpLHQuZSwiaUQiLG51bGwsMCwxLFp5LCExLCExLCEwLCExLCEwLCExKSxVaSh1KEF0KEt0KHQuYiksMSksMTgpLHQucSxudWxsLCJlQXR0cmlidXRlVHlwZSIsMSwxLFp5LCEwLCEwLCExLCExLCEwLCExLCEwKSxsYyh0LmEsZWksdTBlLCExLCExLCEwKSx4cyh1KEF0KEt0KHQuYSksMCksMzQpLHQuXyx6Y3QsbnVsbCwwLDEsZWksITEsITEsITAsITEsITAsITEpLFVpKHUoQXQoS3QodC5hKSwxKSwxOCksdC5hYixudWxsLCJkZXRhaWxzIiwwLC0xLGVpLCExLCExLCEwLCEwLCExLCExLCExKSxVaSh1KEF0KEt0KHQuYSksMiksMTgpLHQuUSx1KEF0KEt0KHQuUSksMCksMTgpLCJlTW9kZWxFbGVtZW50IiwwLDEsZWksITAsITEsITAsITEsITEsITEsITEpLFVpKHUoQXQoS3QodC5hKSwzKSwxOCksdC5TLG51bGwsImNvbnRlbnRzIiwwLC0xLGVpLCExLCExLCEwLCEwLCExLCExLCExKSxVaSh1KEF0KEt0KHQuYSksNCksMTgpLHQuUyxudWxsLCJyZWZlcmVuY2VzIiwwLC0xLGVpLCExLCExLCEwLCExLCEwLCExLCExKSxsYyh0Lm8sS2gsIkVDbGFzcyIsITEsITEsITApLHhzKHUoQXQoS3QodC5vKSwwKSwzNCksdC5lLCJhYnN0cmFjdCIsbnVsbCwwLDEsS2gsITEsITEsITAsITEsITAsITEpLHhzKHUoQXQoS3QodC5vKSwxKSwzNCksdC5lLCJpbnRlcmZhY2UiLG51bGwsMCwxLEtoLCExLCExLCEwLCExLCEwLCExKSxVaSh1KEF0KEt0KHQubyksMiksMTgpLHQubyxudWxsLCJlU3VwZXJUeXBlcyIsMCwtMSxLaCwhMSwhMSwhMCwhMSwhMCwhMCwhMSksVWkodShBdChLdCh0Lm8pLDMpLDE4KSx0LlQsdShBdChLdCh0LlQpLDApLDE4KSwiZU9wZXJhdGlvbnMiLDAsLTEsS2gsITEsITEsITAsITAsITEsITEsITEpLFVpKHUoQXQoS3QodC5vKSw0KSwxOCksdC5iLG51bGwsImVBbGxBdHRyaWJ1dGVzIiwwLC0xLEtoLCEwLCEwLCExLCExLCEwLCExLCEwKSxVaSh1KEF0KEt0KHQubyksNSksMTgpLHQuVyxudWxsLCJlQWxsUmVmZXJlbmNlcyIsMCwtMSxLaCwhMCwhMCwhMSwhMSwhMCwhMSwhMCksVWkodShBdChLdCh0Lm8pLDYpLDE4KSx0LlcsbnVsbCwiZVJlZmVyZW5jZXMiLDAsLTEsS2gsITAsITAsITEsITEsITAsITEsITApLFVpKHUoQXQoS3QodC5vKSw3KSwxOCksdC5iLG51bGwsImVBdHRyaWJ1dGVzIiwwLC0xLEtoLCEwLCEwLCExLCExLCEwLCExLCEwKSxVaSh1KEF0KEt0KHQubyksOCksMTgpLHQuVyxudWxsLCJlQWxsQ29udGFpbm1lbnRzIiwwLC0xLEtoLCEwLCEwLCExLCExLCEwLCExLCEwKSxVaSh1KEF0KEt0KHQubyksOSksMTgpLHQuVCxudWxsLCJlQWxsT3BlcmF0aW9ucyIsMCwtMSxLaCwhMCwhMCwhMSwhMSwhMCwhMSwhMCksVWkodShBdChLdCh0Lm8pLDEwKSwxOCksdC5iYixudWxsLCJlQWxsU3RydWN0dXJhbEZlYXR1cmVzIiwwLC0xLEtoLCEwLCEwLCExLCExLCEwLCExLCEwKSxVaSh1KEF0KEt0KHQubyksMTEpLDE4KSx0Lm8sbnVsbCwiZUFsbFN1cGVyVHlwZXMiLDAsLTEsS2gsITAsITAsITEsITEsITAsITEsITApLFVpKHUoQXQoS3QodC5vKSwxMiksMTgpLHQuYixudWxsLCJlSURBdHRyaWJ1dGUiLDAsMSxLaCwhMCwhMCwhMSwhMSwhMSwhMSwhMCksVWkodShBdChLdCh0Lm8pLDEzKSwxOCksdC5iYix1KEF0KEt0KHQuYmIpLDcpLDE4KSwiZVN0cnVjdHVyYWxGZWF0dXJlcyIsMCwtMSxLaCwhMSwhMSwhMCwhMCwhMSwhMSwhMSksVWkodShBdChLdCh0Lm8pLDE0KSwxOCksdC5ILG51bGwsImVHZW5lcmljU3VwZXJUeXBlcyIsMCwtMSxLaCwhMSwhMSwhMCwhMCwhMSwhMCwhMSksVWkodShBdChLdCh0Lm8pLDE1KSwxOCksdC5ILG51bGwsImVBbGxHZW5lcmljU3VwZXJUeXBlcyIsMCwtMSxLaCwhMCwhMCwhMSwhMSwhMCwhMSwhMCksZD1rbyh1KEF0KEJpKHQubyksMCksNTkpLHQuZSwiaXNTdXBlclR5cGVPZiIpLElvKGQsdC5vLCJzb21lQ2xhc3MiKSxrbyh1KEF0KEJpKHQubyksMSksNTkpLHQuSSwiZ2V0RmVhdHVyZUNvdW50IiksZD1rbyh1KEF0KEJpKHQubyksMiksNTkpLHQuYmIsVDBlKSxJbyhkLHQuSSwiZmVhdHVyZUlEIiksZD1rbyh1KEF0KEJpKHQubyksMyksNTkpLHQuSSxfMGUpLElvKGQsdC5iYixyUyksZD1rbyh1KEF0KEJpKHQubyksNCksNTkpLHQuYmIsVDBlKSxJbyhkLHQuXywiZmVhdHVyZU5hbWUiKSxrbyh1KEF0KEJpKHQubyksNSksNTkpLHQuSSwiZ2V0T3BlcmF0aW9uQ291bnQiKSxkPWtvKHUoQXQoQmkodC5vKSw2KSw1OSksdC5ULCJnZXRFT3BlcmF0aW9uIiksSW8oZCx0LkksIm9wZXJhdGlvbklEIiksZD1rbyh1KEF0KEJpKHQubyksNyksNTkpLHQuSSxDMGUpLElvKGQsdC5ULEk4dCksZD1rbyh1KEF0KEJpKHQubyksOCksNTkpLHQuVCwiZ2V0T3ZlcnJpZGUiKSxJbyhkLHQuVCxJOHQpLGQ9a28odShBdChCaSh0Lm8pLDkpLDU5KSx0LkgsImdldEZlYXR1cmVUeXBlIiksSW8oZCx0LmJiLHJTKSxsYyh0LnAsYzEsZDBlLCEwLCExLCEwKSx4cyh1KEF0KEt0KHQucCksMCksMzQpLHQuXywiaW5zdGFuY2VDbGFzc05hbWUiLG51bGwsMCwxLGMxLCExLCEwLCEwLCEwLCEwLCExKSxlPUQwKHQuTCksbj1Wd3QoKSxPcigoIWUuZCYmKGUuZD1uZXcgQnMod28sZSwxKSksZS5kKSxuKSx6b2UodShBdChLdCh0LnApLDEpLDM0KSxlLCJpbnN0YW5jZUNsYXNzIixjMSwhMCwhMCwhMSwhMCkseHModShBdChLdCh0LnApLDIpLDM0KSx0Lk0sUzBlLG51bGwsMCwxLGMxLCEwLCEwLCExLCExLCEwLCEwKSx4cyh1KEF0KEt0KHQucCksMyksMzQpLHQuXywiaW5zdGFuY2VUeXBlTmFtZSIsbnVsbCwwLDEsYzEsITEsITAsITAsITAsITAsITEpLFVpKHUoQXQoS3QodC5wKSw0KSwxOCksdC5VLHUoQXQoS3QodC5VKSwzKSwxOCksImVQYWNrYWdlIiwwLDEsYzEsITAsITEsITEsITEsITAsITEsITEpLFVpKHUoQXQoS3QodC5wKSw1KSwxOCksdC5kYixudWxsLEEwZSwwLC0xLGMxLCExLCExLCEwLCEwLCEwLCExLCExKSxkPWtvKHUoQXQoQmkodC5wKSwwKSw1OSksdC5lLEwwZSksSW8oZCx0Lk0sX0kpLGtvKHUoQXQoQmkodC5wKSwxKSw1OSksdC5JLCJnZXRDbGFzc2lmaWVySUQiKSxsYyh0LnEsU2Z0LCJFRGF0YVR5cGUiLCExLCExLCEwKSx4cyh1KEF0KEt0KHQucSksMCksMzQpLHQuZSwic2VyaWFsaXphYmxlIiwkNywwLDEsU2Z0LCExLCExLCEwLCExLCEwLCExKSxsYyh0LnYsaVUsIkVFbnVtIiwhMSwhMSwhMCksVWkodShBdChLdCh0LnYpLDApLDE4KSx0LncsdShBdChLdCh0LncpLDMpLDE4KSwiZUxpdGVyYWxzIiwwLC0xLGlVLCExLCExLCEwLCEwLCExLCExLCExKSxkPWtvKHUoQXQoQmkodC52KSwwKSw1OSksdC53LE0wZSksSW8oZCx0Ll8sZmkpLGQ9a28odShBdChCaSh0LnYpLDEpLDU5KSx0LncsTTBlKSxJbyhkLHQuSSxZQyksZD1rbyh1KEF0KEJpKHQudiksMiksNTkpLHQudywiZ2V0RUVudW1MaXRlcmFsQnlMaXRlcmFsIiksSW8oZCx0Ll8sImxpdGVyYWwiKSxsYyh0LncsZWcsZzBlLCExLCExLCEwKSx4cyh1KEF0KEt0KHQudyksMCksMzQpLHQuSSxZQyxudWxsLDAsMSxlZywhMSwhMSwhMCwhMSwhMCwhMSkseHModShBdChLdCh0LncpLDEpLDM0KSx0LkEsImluc3RhbmNlIixudWxsLDAsMSxlZywhMCwhMSwhMCwhMSwhMCwhMSkseHModShBdChLdCh0LncpLDIpLDM0KSx0Ll8sImxpdGVyYWwiLG51bGwsMCwxLGVnLCExLCExLCEwLCExLCEwLCExKSxVaSh1KEF0KEt0KHQudyksMyksMTgpLHQudix1KEF0KEt0KHQudiksMCksMTgpLCJlRW51bSIsMCwxLGVnLCEwLCExLCExLCExLCExLCExLCExKSxsYyh0LkIsbkEsIkVGYWN0b3J5IiwhMSwhMSwhMCksVWkodShBdChLdCh0LkIpLDApLDE4KSx0LlUsdShBdChLdCh0LlUpLDIpLDE4KSwiZVBhY2thZ2UiLDEsMSxuQSwhMCwhMSwhMCwhMSwhMSwhMSwhMSksZD1rbyh1KEF0KEJpKHQuQiksMCksNTkpLHQuUywiY3JlYXRlIiksSW8oZCx0Lm8sImVDbGFzcyIpLGQ9a28odShBdChCaSh0LkIpLDEpLDU5KSx0Lk0sImNyZWF0ZUZyb21TdHJpbmciKSxJbyhkLHQucSwiZURhdGFUeXBlIiksSW8oZCx0Ll8sImxpdGVyYWxWYWx1ZSIpLGQ9a28odShBdChCaSh0LkIpLDIpLDU5KSx0Ll8sImNvbnZlcnRUb1N0cmluZyIpLElvKGQsdC5xLCJlRGF0YVR5cGUiKSxJbyhkLHQuTSwiaW5zdGFuY2VWYWx1ZSIpLGxjKHQuUSxvTixnZGUsITAsITEsITApLFVpKHUoQXQoS3QodC5RKSwwKSwxOCksdC5hLHUoQXQoS3QodC5hKSwyKSwxOCksImVBbm5vdGF0aW9ucyIsMCwtMSxvTiwhMSwhMSwhMCwhMCwhMSwhMSwhMSksZD1rbyh1KEF0KEJpKHQuUSksMCksNTkpLHQuYSwiZ2V0RUFubm90YXRpb24iKSxJbyhkLHQuXyx6Y3QpLGxjKHQuUix4ZnQscGRlLCEwLCExLCEwKSx4cyh1KEF0KEt0KHQuUiksMCksMzQpLHQuXyxmaSxudWxsLDAsMSx4ZnQsITEsITEsITAsITEsITAsITEpLGxjKHQuUyxUYiwiRU9iamVjdCIsITEsITEsITApLGtvKHUoQXQoQmkodC5TKSwwKSw1OSksdC5vLCJlQ2xhc3MiKSxrbyh1KEF0KEJpKHQuUyksMSksNTkpLHQuZSwiZUlzUHJveHkiKSxrbyh1KEF0KEJpKHQuUyksMiksNTkpLHQuWCwiZVJlc291cmNlIiksa28odShBdChCaSh0LlMpLDMpLDU5KSx0LlMsImVDb250YWluZXIiKSxrbyh1KEF0KEJpKHQuUyksNCksNTkpLHQuYmIsImVDb250YWluaW5nRmVhdHVyZSIpLGtvKHUoQXQoQmkodC5TKSw1KSw1OSksdC5XLCJlQ29udGFpbm1lbnRGZWF0dXJlIiksZD1rbyh1KEF0KEJpKHQuUyksNiksNTkpLG51bGwsImVDb250ZW50cyIpLGU9RDAodC5mYiksbj1EMCh0LlMpLE9yKCghZS5kJiYoZS5kPW5ldyBCcyh3byxlLDEpKSxlLmQpLG4pLHM9RjEoZCxlLG51bGwpLHMmJnMuRmkoKSxkPWtvKHUoQXQoQmkodC5TKSw3KSw1OSksbnVsbCwiZUFsbENvbnRlbnRzIiksZT1EMCh0LmNiKSxuPUQwKHQuUyksT3IoKCFlLmQmJihlLmQ9bmV3IEJzKHdvLGUsMSkpLGUuZCksbiksbz1GMShkLGUsbnVsbCksbyYmby5GaSgpLGQ9a28odShBdChCaSh0LlMpLDgpLDU5KSxudWxsLCJlQ3Jvc3NSZWZlcmVuY2VzIiksZT1EMCh0LmZiKSxuPUQwKHQuUyksT3IoKCFlLmQmJihlLmQ9bmV3IEJzKHdvLGUsMSkpLGUuZCksbiksaD1GMShkLGUsbnVsbCksaCYmaC5GaSgpLGQ9a28odShBdChCaSh0LlMpLDkpLDU5KSx0Lk0sImVHZXQiKSxJbyhkLHQuYmIsclMpLGQ9a28odShBdChCaSh0LlMpLDEwKSw1OSksdC5NLCJlR2V0IiksSW8oZCx0LmJiLHJTKSxJbyhkLHQuZSwicmVzb2x2ZSIpLGQ9a28odShBdChCaSh0LlMpLDExKSw1OSksbnVsbCwiZVNldCIpLElvKGQsdC5iYixyUyksSW8oZCx0Lk0sIm5ld1ZhbHVlIiksZD1rbyh1KEF0KEJpKHQuUyksMTIpLDU5KSx0LmUsImVJc1NldCIpLElvKGQsdC5iYixyUyksZD1rbyh1KEF0KEJpKHQuUyksMTMpLDU5KSxudWxsLCJlVW5zZXQiKSxJbyhkLHQuYmIsclMpLGQ9a28odShBdChCaSh0LlMpLDE0KSw1OSksdC5NLCJlSW52b2tlIiksSW8oZCx0LlQsSTh0KSxlPUQwKHQuZmIpLG49Vnd0KCksT3IoKCFlLmQmJihlLmQ9bmV3IEJzKHdvLGUsMSkpLGUuZCksbiksWHooZCxlLCJhcmd1bWVudHMiKSxHZW4oZCx0LkspLGxjKHQuVCxZaCxiMGUsITEsITEsITApLFVpKHUoQXQoS3QodC5UKSwwKSwxOCksdC5vLHUoQXQoS3QodC5vKSwzKSwxOCksRDBlLDAsMSxZaCwhMCwhMSwhMSwhMSwhMSwhMSwhMSksVWkodShBdChLdCh0LlQpLDEpLDE4KSx0LmRiLG51bGwsQTBlLDAsLTEsWWgsITEsITEsITAsITAsITAsITEsITEpLFVpKHUoQXQoS3QodC5UKSwyKSwxOCksdC5WLHUoQXQoS3QodC5WKSwwKSwxOCksImVQYXJhbWV0ZXJzIiwwLC0xLFloLCExLCExLCEwLCEwLCExLCExLCExKSxVaSh1KEF0KEt0KHQuVCksMyksMTgpLHQucCxudWxsLCJlRXhjZXB0aW9ucyIsMCwtMSxZaCwhMSwhMSwhMCwhMSwhMCwhMCwhMSksVWkodShBdChLdCh0LlQpLDQpLDE4KSx0LkgsbnVsbCwiZUdlbmVyaWNFeGNlcHRpb25zIiwwLC0xLFloLCExLCExLCEwLCEwLCExLCEwLCExKSxrbyh1KEF0KEJpKHQuVCksMCksNTkpLHQuSSxDMGUpLGQ9a28odShBdChCaSh0LlQpLDEpLDU5KSx0LmUsImlzT3ZlcnJpZGVPZiIpLElvKGQsdC5ULCJzb21lT3BlcmF0aW9uIiksbGModC5VLG8xLCJFUGFja2FnZSIsITEsITEsITApLHhzKHUoQXQoS3QodC5VKSwwKSwzNCksdC5fLCJuc1VSSSIsbnVsbCwwLDEsbzEsITEsITEsITAsITEsITAsITEpLHhzKHUoQXQoS3QodC5VKSwxKSwzNCksdC5fLCJuc1ByZWZpeCIsbnVsbCwwLDEsbzEsITEsITEsITAsITEsITAsITEpLFVpKHUoQXQoS3QodC5VKSwyKSwxOCksdC5CLHUoQXQoS3QodC5CKSwwKSwxOCksImVGYWN0b3J5SW5zdGFuY2UiLDEsMSxvMSwhMCwhMSwhMCwhMSwhMSwhMSwhMSksVWkodShBdChLdCh0LlUpLDMpLDE4KSx0LnAsdShBdChLdCh0LnApLDQpLDE4KSwiZUNsYXNzaWZpZXJzIiwwLC0xLG8xLCExLCExLCEwLCEwLCEwLCExLCExKSxVaSh1KEF0KEt0KHQuVSksNCksMTgpLHQuVSx1KEF0KEt0KHQuVSksNSksMTgpLCJlU3VicGFja2FnZXMiLDAsLTEsbzEsITEsITEsITAsITAsITAsITEsITEpLFVpKHUoQXQoS3QodC5VKSw1KSwxOCksdC5VLHUoQXQoS3QodC5VKSw0KSwxOCksImVTdXBlclBhY2thZ2UiLDAsMSxvMSwhMCwhMSwhMSwhMSwhMCwhMSwhMSksZD1rbyh1KEF0KEJpKHQuVSksMCksNTkpLHQucCwiZ2V0RUNsYXNzaWZpZXIiKSxJbyhkLHQuXyxmaSksbGModC5WLHp3LHYwZSwhMSwhMSwhMCksVWkodShBdChLdCh0LlYpLDApLDE4KSx0LlQsdShBdChLdCh0LlQpLDIpLDE4KSwiZU9wZXJhdGlvbiIsMCwxLHp3LCEwLCExLCExLCExLCExLCExLCExKSxsYyh0LlcsSnksdzBlLCExLCExLCEwKSx4cyh1KEF0KEt0KHQuVyksMCksMzQpLHQuZSwiY29udGFpbm1lbnQiLG51bGwsMCwxLEp5LCExLCExLCEwLCExLCEwLCExKSx4cyh1KEF0KEt0KHQuVyksMSksMzQpLHQuZSwiY29udGFpbmVyIixudWxsLDAsMSxKeSwhMCwhMCwhMSwhMSwhMCwhMCkseHModShBdChLdCh0LlcpLDIpLDM0KSx0LmUsInJlc29sdmVQcm94aWVzIiwkNywwLDEsSnksITEsITEsITAsITEsITAsITEpLFVpKHUoQXQoS3QodC5XKSwzKSwxOCksdC5XLG51bGwsImVPcHBvc2l0ZSIsMCwxLEp5LCExLCExLCEwLCExLCEwLCExLCExKSxVaSh1KEF0KEt0KHQuVyksNCksMTgpLHQubyxudWxsLCJlUmVmZXJlbmNlVHlwZSIsMSwxLEp5LCEwLCEwLCExLCExLCEwLCExLCEwKSxVaSh1KEF0KEt0KHQuVyksNSksMTgpLHQuYixudWxsLCJlS2V5cyIsMCwtMSxKeSwhMSwhMSwhMCwhMSwhMCwhMSwhMSksbGModC5iYixOdSxoMGUsITAsITEsITApLHhzKHUoQXQoS3QodC5iYiksMCksMzQpLHQuZSwiY2hhbmdlYWJsZSIsJDcsMCwxLE51LCExLCExLCEwLCExLCEwLCExKSx4cyh1KEF0KEt0KHQuYmIpLDEpLDM0KSx0LmUsInZvbGF0aWxlIixudWxsLDAsMSxOdSwhMSwhMSwhMCwhMSwhMCwhMSkseHModShBdChLdCh0LmJiKSwyKSwzNCksdC5lLCJ0cmFuc2llbnQiLG51bGwsMCwxLE51LCExLCExLCEwLCExLCEwLCExKSx4cyh1KEF0KEt0KHQuYmIpLDMpLDM0KSx0Ll8sImRlZmF1bHRWYWx1ZUxpdGVyYWwiLG51bGwsMCwxLE51LCExLCExLCEwLCExLCEwLCExKSx4cyh1KEF0KEt0KHQuYmIpLDQpLDM0KSx0Lk0sUzBlLG51bGwsMCwxLE51LCEwLCEwLCExLCExLCEwLCEwKSx4cyh1KEF0KEt0KHQuYmIpLDUpLDM0KSx0LmUsInVuc2V0dGFibGUiLG51bGwsMCwxLE51LCExLCExLCEwLCExLCEwLCExKSx4cyh1KEF0KEt0KHQuYmIpLDYpLDM0KSx0LmUsImRlcml2ZWQiLG51bGwsMCwxLE51LCExLCExLCEwLCExLCEwLCExKSxVaSh1KEF0KEt0KHQuYmIpLDcpLDE4KSx0Lm8sdShBdChLdCh0Lm8pLDEzKSwxOCksRDBlLDAsMSxOdSwhMCwhMSwhMSwhMSwhMSwhMSwhMSksa28odShBdChCaSh0LmJiKSwwKSw1OSksdC5JLF8wZSksZD1rbyh1KEF0KEJpKHQuYmIpLDEpLDU5KSxudWxsLCJnZXRDb250YWluZXJDbGFzcyIpLGU9RDAodC5MKSxuPVZ3dCgpLE9yKCghZS5kJiYoZS5kPW5ldyBCcyh3byxlLDEpKSxlLmQpLG4pLHI9RjEoZCxlLG51bGwpLHImJnIuRmkoKSxsYyh0LmViLFF5LGwwZSwhMCwhMSwhMCkseHModShBdChLdCh0LmViKSwwKSwzNCksdC5lLCJvcmRlcmVkIiwkNywwLDEsUXksITEsITEsITAsITEsITAsITEpLHhzKHUoQXQoS3QodC5lYiksMSksMzQpLHQuZSwidW5pcXVlIiwkNywwLDEsUXksITEsITEsITAsITEsITAsITEpLHhzKHUoQXQoS3QodC5lYiksMiksMzQpLHQuSSwibG93ZXJCb3VuZCIsbnVsbCwwLDEsUXksITEsITEsITAsITEsITAsITEpLHhzKHUoQXQoS3QodC5lYiksMyksMzQpLHQuSSwidXBwZXJCb3VuZCIsIjEiLDAsMSxReSwhMSwhMSwhMCwhMSwhMCwhMSkseHModShBdChLdCh0LmViKSw0KSwzNCksdC5lLCJtYW55IixudWxsLDAsMSxReSwhMCwhMCwhMSwhMSwhMCwhMCkseHModShBdChLdCh0LmViKSw1KSwzNCksdC5lLCJyZXF1aXJlZCIsbnVsbCwwLDEsUXksITAsITAsITEsITEsITAsITApLFVpKHUoQXQoS3QodC5lYiksNiksMTgpLHQucCxudWxsLCJlVHlwZSIsMCwxLFF5LCExLCEwLCEwLCExLCEwLCEwLCExKSxVaSh1KEF0KEt0KHQuZWIpLDcpLDE4KSx0LkgsbnVsbCwiZUdlbmVyaWNUeXBlIiwwLDEsUXksITEsITAsITAsITAsITEsITAsITEpLGxjKHQuYWIsSTIsIkVTdHJpbmdUb1N0cmluZ01hcEVudHJ5IiwhMSwhMSwhMSkseHModShBdChLdCh0LmFiKSwwKSwzNCksdC5fLCJrZXkiLG51bGwsMCwxLEkyLCExLCExLCEwLCExLCEwLCExKSx4cyh1KEF0KEt0KHQuYWIpLDEpLDM0KSx0Ll8sWUMsbnVsbCwwLDEsSTIsITEsITEsITAsITEsITAsITEpLGxjKHQuSCx3byxwMGUsITEsITEsITApLFVpKHUoQXQoS3QodC5IKSwwKSwxOCksdC5ILG51bGwsImVVcHBlckJvdW5kIiwwLDEsd28sITEsITEsITAsITAsITEsITEsITEpLFVpKHUoQXQoS3QodC5IKSwxKSwxOCksdC5ILG51bGwsImVUeXBlQXJndW1lbnRzIiwwLC0xLHdvLCExLCExLCEwLCEwLCExLCExLCExKSxVaSh1KEF0KEt0KHQuSCksMiksMTgpLHQucCxudWxsLCJlUmF3VHlwZSIsMSwxLHdvLCEwLCExLCExLCExLCEwLCExLCEwKSxVaSh1KEF0KEt0KHQuSCksMyksMTgpLHQuSCxudWxsLCJlTG93ZXJCb3VuZCIsMCwxLHdvLCExLCExLCEwLCEwLCExLCExLCExKSxVaSh1KEF0KEt0KHQuSCksNCksMTgpLHQuZGIsbnVsbCwiZVR5cGVQYXJhbWV0ZXIiLDAsMSx3bywhMSwhMSwhMCwhMSwhMSwhMSwhMSksVWkodShBdChLdCh0LkgpLDUpLDE4KSx0LnAsbnVsbCwiZUNsYXNzaWZpZXIiLDAsMSx3bywhMSwhMSwhMCwhMSwhMCwhMSwhMSksZD1rbyh1KEF0KEJpKHQuSCksMCksNTkpLHQuZSxMMGUpLElvKGQsdC5NLF9JKSxsYyh0LmRiLHB1LG0wZSwhMSwhMSwhMCksVWkodShBdChLdCh0LmRiKSwwKSwxOCksdC5ILG51bGwsImVCb3VuZHMiLDAsLTEscHUsITEsITEsITAsITAsITEsITEsITEpLGxpKHQuYyxTdXQsIkVCaWdEZWNpbWFsIiwhMCksbGkodC5kLFI0LCJFQmlnSW50ZWdlciIsITApLGxpKHQuZSx4bCwiRUJvb2xlYW4iLCEwKSxsaSh0LmYsV3MsIkVCb29sZWFuT2JqZWN0IiwhMCksbGkodC5pLFh1LCJFQnl0ZSIsITApLGxpKHQuZyxvdChYdSwxKSwiRUJ5dGVBcnJheSIsITApLGxpKHQuaixreCwiRUJ5dGVPYmplY3QiLCEwKSxsaSh0LmssRWgsIkVDaGFyIiwhMCksbGkodC5uLGFTLCJFQ2hhcmFjdGVyT2JqZWN0IiwhMCksbGkodC5yLEhILCJFRGF0ZSIsITApLGxpKHQucyxUTHQsIkVEaWFnbm9zdGljQ2hhaW4iLCExKSxsaSh0LnQsZ2EsIkVEb3VibGUiLCEwKSxsaSh0LnUsd2EsIkVEb3VibGVPYmplY3QiLCEwKSxsaSh0LmZiLGpBdCwiRUVMaXN0IiwhMSksbGkodC5BLHFBdCwiRUVudW1lcmF0b3IiLCExKSxsaSh0LkMsaEx0LCJFRmVhdHVyZU1hcCIsITEpLGxpKHQuRCxzVSwiRUZlYXR1cmVNYXBFbnRyeSIsITEpLGxpKHQuRixyMywiRUZsb2F0IiwhMCksbGkodC5HLEs3LCJFRmxvYXRPYmplY3QiLCEwKSxsaSh0LkksU3IsIkVJbnQiLCEwKSxsaSh0LkosSGEsIkVJbnRlZ2VyT2JqZWN0IiwhMCksbGkodC5MLEg4dCwiRUphdmFDbGFzcyIsITApLGxpKHQuTSxRbiwiRUphdmFPYmplY3QiLCEwKSxsaSh0Lk4sRGIsIkVMb25nIiwhMCksbGkodC5PLFR3LCJFTG9uZ09iamVjdCIsITApLGxpKHQuUCxWOHQsIkVNYXAiLCExKSxsaSh0Llgsb0x0LCJFUmVzb3VyY2UiLCExKSxsaSh0LlksX0x0LCJFUmVzb3VyY2VTZXQiLCExKSxsaSh0LlosZDUsIkVTaG9ydCIsITApLGxpKHQuJCxfdywiRVNob3J0T2JqZWN0IiwhMCksbGkodC5fLExlLCJFU3RyaW5nIiwhMCksbGkodC5jYix6QXQsIkVUcmVlSXRlcmF0b3IiLCExKSxsaSh0LkssQ0x0LCJFSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiIsITEpLGp5dCh0LGpoKSl9dmFyIF9JPSJvYmplY3QiLGN4PSJib29sZWFuIixDNnQ9Im51bWJlciIsUGF0PSJzdHJpbmciLEZhdD0iZnVuY3Rpb24iLFRpPTIxNDc0ODM2NDcsaWM9ImphdmEubGFuZyIsQ0k9ezM6MX0sU0k9ImNvbS5nb29nbGUuY29tbW9uLmJhc2UiLFhhPSIsICIsemhlPSIlcyAoJXMpIG11c3Qgbm90IGJlIG5lZ2F0aXZlIixNZT17MzoxLDQ6MSw1OjF9LHFoZT0ibmVnYXRpdmUgc2l6ZTogIixIaGU9Ik9wdGlvbmFsLm9mKCIsTXU9Im51bGwiLF83PXsxOTg6MSw0NzoxfSxZZT0iY29tLmdvb2dsZS5jb21tb24uY29sbGVjdCIsQzc9ezE5ODoxLDQ3OjEsMTI1OjF9LGsyPXsyMjQ6MSwzOjF9LGRhPXs0NzoxfSxicj0iamF2YS51dGlsIixidz17ODM6MX0sd3k9ezIwOjEsMjg6MSwxNDoxfSxCMT0xOTY1LFV1PXsyMDoxLDI4OjEsMTQ6MSwyMToxfSxWaGU9ezgzOjEsMTcxOjEsMTYxOjF9LEdoZT17MjA6MSwyODoxLDE0OjEsMjE6MSw4NDoxfSxTNnQ9ezIwOjEsMjg6MSwxNDoxLDI3MToxLDIxOjEsODQ6MX0sSmQ9ezQ3OjEsMTI1OjF9LE1xPXszNDU6MSw0MjoxfSxVaGU9IkFic3RyYWN0TWFwRW50cnkiLFdoZT0iZXhwZWN0ZWRWYWx1ZXNQZXJLZXkiLHJlPXszOjEsNjoxLDQ6MSw1OjF9LHZkPTE2Mzg0LE5oPXsxNjQ6MX0sS249ezM4OjF9LERxPXtsOjQxOTQzMDMsbTo0MTk0MzAzLGg6NTI0Mjg3fSxBST17MTk2OjF9LEJhdD17MjQ1OjEsMzoxLDM1OjF9LEtoZT0icmFuZ2UgdW5ib3VuZGVkIG9uIHRoaXMgc2lkZSIsdDA9ezIwOjF9LFloZT17MjA6MSwxNDoxfSxBNnQ9ezM6MSwyMDoxLDI4OjEsMTQ6MX0sU0M9ezE1MjoxLDM6MSwyMDoxLDI4OjEsMTQ6MSwxNToxLDU0OjF9LElxPXszOjEsNDoxLDU6MSwxNjU6MX0sUzc9ezM6MSw4MzoxfSxSYXQ9ezIwOjEsMTQ6MSwyMToxfSxBNz17MzoxLDIwOjEsMjg6MSwxNDoxLDIxOjF9LFhoZT17MjA6MSwxNDoxLDIxOjEsODQ6MX0sZTA9NDYxODQ1OTA3LG4wPS04NjIwNDg5NDMsTEk9ezM6MSw2OjEsNDoxLDU6MSwxNjU6MX0sUWhlPSJleHBlY3RlZFNpemUiLEFDPTEwNzM3NDE4MjQsbXk9ImluaXRpYWxBcnJheVNpemUiLG9lPXszOjEsNjoxLDQ6MSw5OjEsNToxfSxMNz17MjA6MSwyODoxLDUyOjEsMTQ6MSwxNToxfSxqYXQ9ImFycmF5U2l6ZSIsWmhlPXsyMDoxLDI4OjEsNTI6MSwxNDoxLDE1OjEsNTQ6MX0sZ2k9ezQ1OjF9LE9xPXszNjU6MX0scmI9MWUtNCxPYT0tMjE0NzQ4MzY0OCxKaGU9Il9fbm9pbml0X18iLFUwPXszOjEsMTAyOjEsNjA6MSw3ODoxfSxNST0iY29tLmdvb2dsZS5nd3QuY29yZS5jbGllbnQuaW1wbCIsTDZ0PSJTdHJpbmciLE02dD0iY29tLmdvb2dsZS5nd3QuY29yZS5jbGllbnQiLCRhdD0iYW5vbnltb3VzIix6YXQ9ImZuU3RhY2siLEQ2dD0iVW5rbm93biIsd2Q9ezE5NToxLDM6MSw0OjF9LFZnPTFlMyxNcz02NTUzNSxxYXQ9IkphbnVhcnkiLEhhdD0iRmVicnVhcnkiLFZhdD0iTWFyY2giLEdhdD0iQXByaWwiLHV4PSJNYXkiLFVhdD0iSnVuZSIsV2F0PSJKdWx5IixLYXQ9IkF1Z3VzdCIsWWF0PSJTZXB0ZW1iZXIiLFhhdD0iT2N0b2JlciIsUWF0PSJOb3ZlbWJlciIsWmF0PSJEZWNlbWJlciIsaWI9MTkwMCxKcj17NDg6MSwzOjEsNDoxfSx0ZmU9IkJlZm9yZSBDaHJpc3QiLGVmZT0iQW5ubyBEb21pbmkiLEphdD0iU3VuZGF5Iix0b3Q9Ik1vbmRheSIsZW90PSJUdWVzZGF5Iixub3Q9IldlZG5lc2RheSIscm90PSJUaHVyc2RheSIsaW90PSJGcmlkYXkiLHNvdD0iU2F0dXJkYXkiLEk2dD0iY29tLmdvb2dsZS5nd3QuaTE4bi5zaGFyZWQiLG5mZT0iRGF0ZVRpbWVGb3JtYXQiLGFvdD0iY29tLmdvb2dsZS5nd3QuaTE4bi5jbGllbnQiLHJmZT0iRGVmYXVsdERhdGVUaW1lRm9ybWF0SW5mbyIsaWZlPXszOjEsNDoxLDM1OjEsMTk5OjF9LGx4PSJjb20uZ29vZ2xlLmd3dC5qc29uLmNsaWVudCIsdmw9NDE5NDMwMyxXMD0xMDQ4NTc1LERJPTUyNDI4OCxoeD00MTk0MzA0LEUyPTE3NTkyMTg2MDQ0NDE2LE5xPTFlOSxJST0tMTc1OTIxODYwNDQ0MTYsTzZ0PSJqYXZhLmlvIixvb3Q9ezM6MSwxMDI6MSw3MzoxLDYwOjEsNzg6MX0sc2ZlPXszOjEsMjg5OjEsNzg6MX0sdnc9J0ZvciBpbnB1dCBzdHJpbmc6ICInLGJzPTEvMCxOcz0tMS8wLHl5PTQwOTYsY290PXszOjEsNDoxLDM2NDoxfSxRYT02NTUzNixPST01NTI5NixUbz17MTA0OjEsMzoxLDQ6MX0sdW90PTFlNSxhZmU9LjMwMTAyOTk5NTY2Mzk4MTIscG89NDI5NDk2NzI5NSxsb3Q9NDI5NDk2NzI5NixNNz0iMC4wIixob3Q9ezQyOjF9LG9mZT17MzoxLDQ6MSwyMDoxLDI4OjEsNTI6MSwxMjoxLDE0OjEsMTU6MSw1NDoxfSxjZmU9ezM6MSwyMDoxLDI4OjEsNTI6MSwxNDoxLDE1OjEsNTQ6MX0sdWZlPXsyMDoxLDE0OjEsMTU6MX0sZm90PXszOjEsNjI6MX0sTkk9ezE4MjoxfSxTND17MzoxLDQ6MSw4MzoxfSxONnQ9ezM6MSw0OjEsMjA6MSwyODoxLDE0OjEsNTM6MSwyMToxfSxkb3Q9ImRlbGV0ZSIsTEM9MTQ5MDExNjExOTM4NDc2NTZlLTI0LE1DPTExMTAyMjMwMjQ2MjUxNTY1ZS0zMixnb3Q9MTU1MjU0ODUsUEk9NTk2MDQ2NDQ3NzUzOTA2M2UtMjMsUDZ0PTE2Nzc3MjE2LFBxPTE2Nzc3MjE1LEY2dD0iLCBsZW5ndGg6ICIsbGZlPXszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw1NDoxfSxwb3Q9ezM6MSwzNToxLDIyOjEsMjk3OjF9LGJvdD0iamF2YS51dGlsLmZ1bmN0aW9uIixEQz0iamF2YS51dGlsLmxvZ2dpbmciLGhmZT17MzoxLDQ6MSw1OjEsODQyOjF9LHZvdD0idW5kZWZpbmVkIix6cz0iamF2YS51dGlsLnN0cmVhbSIsQjZ0PXs1MjU6MSw2NzA6MX0sRnE9ImZyb21JbmRleDogIixmZmU9IiA+IHRvSW5kZXg6ICIsUjZ0PSIsIHRvSW5kZXg6ICIsajZ0PSJJbmRleDogIiwkNnQ9IiwgU2l6ZTogIixENz0ib3JnLmVjbGlwc2UuZWxrLmFsZy5jb21tb24iLHFpPXs2MjoxfSxkZmU9Im9yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uLmNvbXBhY3Rpb24iLGdmZT0iU2NhbmxpbmUvRXZlbnRIYW5kbGVyIixyMD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5jb21tb24uY29tcGFjdGlvbi5vbmVkIixwZmU9IkNOb2RlIGJlbG9uZ3MgdG8gYW5vdGhlciBDR3JvdXAuIixiZmU9IklTcGFjaW5nc0hhbmRsZXIvMSIsd290PSJUaGUgIixtb3Q9IiBpbnN0YW5jZSBoYXMgYmVlbiBmaW5pc2hlZCBhbHJlYWR5LiIsdmZlPSJUaGUgZGlyZWN0aW9uICIsd2ZlPSIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgQ0dyYXBoIGluc3RhbmNlLiIsbWZlPSJPbmVEaW1lbnNpb25hbENvbXBhY3RvciIseWZlPSJPbmVEaW1lbnNpb25hbENvbXBhY3Rvci9sYW1iZGEkMCRUeXBlIix4ZmU9IlF1YWRydXBsZXQiLGtmZT0iU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRvciIsRWZlPSJTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdG9yL0NvbnN0cmFpbnRzU2NhbmxpbmVIYW5kbGVyIixUZmU9IlNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0b3IvQ29uc3RyYWludHNTY2FubGluZUhhbmRsZXIvbGFtYmRhJDAkVHlwZSIsX2ZlPSJTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdG9yL1RpbWVzdGFtcCIsQ2ZlPSJTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdG9yL2xhbWJkYSQwJFR5cGUiLG1kPXsxNjk6MSw0NToxfSx5b3Q9Im9yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uLmNvbXBhY3Rpb24ub3B0aW9ucyIsc2M9Im9yZy5lY2xpcHNlLmVsay5jb3JlLmRhdGEiLHo2dD0ib3JnLmVjbGlwc2UuZWxrLnBvbHlvbWluby50cmF2ZXJzYWxTdHJhdGVneSIscTZ0PSJvcmcuZWNsaXBzZS5lbGsucG9seW9taW5vLmxvd0xldmVsU29ydCIsSDZ0PSJvcmcuZWNsaXBzZS5lbGsucG9seW9taW5vLmhpZ2hMZXZlbFNvcnQiLFY2dD0ib3JnLmVjbGlwc2UuZWxrLnBvbHlvbWluby5maWxsIixQaD17MTMwOjF9LHhvdD0icG9seW9taW5vIixJQz0ib3JnLmVjbGlwc2UuZWxrLmFsZy5jb21tb24ubmV0d29ya3NpbXBsZXgiLGkwPXsxNzc6MSwzOjEsNDoxfSxTZmU9Im9yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uLm5vZGVzcGFjaW5nIixUMj0ib3JnLmVjbGlwc2UuZWxrLmFsZy5jb21tb24ubm9kZXNwYWNpbmcuY2VsbHN5c3RlbSIsSTc9IkNFTlRFUiIsQWZlPXsyMTI6MSwzMjY6MX0sRzZ0PXszOjEsNDoxLDU6MSw1OTU6MX0sZng9IkxFRlQiLGR4PSJSSUdIVCIsVTZ0PSJWZXJ0aWNhbCBhbGlnbm1lbnQgY2Fubm90IGJlIG51bGwiLFc2dD0iQk9UVE9NIixCcT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5jb21tb24ubm9kZXNwYWNpbmcuaW50ZXJuYWwiLE9DPSJVTkRFRklORUQiLFIxPS4wMSxGST0ib3JnLmVjbGlwc2UuZWxrLmFsZy5jb21tb24ubm9kZXNwYWNpbmcuaW50ZXJuYWwuYWxnb3JpdGhtIixMZmU9IkxhYmVsUGxhY2VyL2xhbWJkYSQwJFR5cGUiLE1mZT0iTGFiZWxQbGFjZXIvbGFtYmRhJDEkVHlwZSIsRGZlPSJwb3J0UmF0aW9PclBvc2l0aW9uIixPNz0ib3JnLmVjbGlwc2UuZWxrLmFsZy5jb21tb24ub3ZlcmxhcHMiLGtvdD0iRE9XTiIseWQ9Im9yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uLnBvbHlvbWlubyIsUnE9Ik5PUlRIIixFb3Q9IkVBU1QiLFRvdD0iU09VVEgiLF9vdD0iV0VTVCIsanE9Im9yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uLnBvbHlvbWluby5zdHJ1Y3R1cmVzIixLNnQ9IkRpcmVjdGlvbiIsQ290PSJHcmlkIGlzIG9ubHkgb2Ygc2l6ZSAiLFNvdD0iLiBSZXF1ZXN0ZWQgcG9pbnQgKCIsQW90PSIpIGlzIG91dCBvZiBib3VuZHMuIiwkcT0iIEdpdmVuIGNlbnRlciBiYXNlZCBjb29yZGluYXRlcyB3ZXJlICgiLEJJPSJvcmcuZWNsaXBzZS5lbGsuZ3JhcGgucHJvcGVydGllcyIsSWZlPSJJUHJvcGVydHlIb2xkZXIiLFk2dD17MzoxLDk0OjEsMTM0OjF9LGd4PSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5zcG9yZSIsT2ZlPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi51dGlscyIsXzI9ezIwOToxfSxBND0ib3JnLmVjbGlwc2UuZWxrLmNvcmUiLE5mZT0iQ29ubmVjdGVkIENvbXBvbmVudHMgQ29tcGFjdGlvbiIsUGZlPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmRpc2NvIix6cT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5kaXNjby5ncmFwaCIsTG90PSJvcmcuZWNsaXBzZS5lbGsuYWxnLmRpc2NvLm9wdGlvbnMiLFg2dD0iQ29tcGFjdGlvblN0cmF0ZWd5IixRNnQ9Im9yZy5lY2xpcHNlLmVsay5kaXNjby5jb21wb25lbnRDb21wYWN0aW9uLnN0cmF0ZWd5IixaNnQ9Im9yZy5lY2xpcHNlLmVsay5kaXNjby5jb21wb25lbnRDb21wYWN0aW9uLmNvbXBvbmVudExheW91dEFsZ29yaXRobSIsSjZ0PSJvcmcuZWNsaXBzZS5lbGsuZGlzY28uZGVidWcuZGlzY29HcmFwaCIsdHh0PSJvcmcuZWNsaXBzZS5lbGsuZGlzY28uZGVidWcuZGlzY29Qb2x5cyIsRmZlPSJjb21wb25lbnRDb21wYWN0aW9uIixDMj0ib3JnLmVjbGlwc2UuZWxrLmRpc2NvIixNb3Q9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLmNvbXBvbmVudENvbXBvbmVudCIsRG90PSJvcmcuZWNsaXBzZS5lbGsuZWRnZS50aGlja25lc3MiLHB4PSJvcmcuZWNsaXBzZS5lbGsuYXNwZWN0UmF0aW8iLHd3PSJvcmcuZWNsaXBzZS5lbGsucGFkZGluZyIsTDQ9Im9yZy5lY2xpcHNlLmVsay5hbGcuZGlzY28udHJhbnNmb3JtIixJb3Q9MS41NzA3OTYzMjY3OTQ4OTY2LE43PTE3OTc2OTMxMzQ4NjIzMTU3ZTI5Mix4eT17MzoxLDQ6MSw1OjEsMTkyOjF9LGV4dD17MzoxLDY6MSw0OjEsNToxLDEwNjoxLDEyMDoxfSxueHQ9Im9yZy5lY2xpcHNlLmVsay5hbGcuZm9yY2UiLHJ4dD0iQ29tcG9uZW50c1Byb2Nlc3NvciIsQmZlPSJDb21wb25lbnRzUHJvY2Vzc29yLzEiLFJJPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmZvcmNlLmdyYXBoIixSZmU9IkNvbXBvbmVudCBMYXlvdXQiLGl4dD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5mb3JjZS5tb2RlbCIscXE9Im9yZy5lY2xpcHNlLmVsay5mb3JjZS5tb2RlbCIsc3h0PSJvcmcuZWNsaXBzZS5lbGsuZm9yY2UuaXRlcmF0aW9ucyIsYXh0PSJvcmcuZWNsaXBzZS5lbGsuZm9yY2UucmVwdWxzaXZlUG93ZXIiLE9vdD0ib3JnLmVjbGlwc2UuZWxrLmZvcmNlLnRlbXBlcmF0dXJlIix4ZD0uMDAxLE5vdD0ib3JnLmVjbGlwc2UuZWxrLmZvcmNlLnJlcHVsc2lvbiIsTkM9Im9yZy5lY2xpcHNlLmVsay5hbGcuZm9yY2Uub3B0aW9ucyIsUDc9MS42MDAwMDAwMjM4NDE4NTgsV2w9Im9yZy5lY2xpcHNlLmVsay5mb3JjZSIsakk9Im9yZy5lY2xpcHNlLmVsay5wcmlvcml0eSIsa3k9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLm5vZGVOb2RlIixQb3Q9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLmVkZ2VMYWJlbCIsSHE9Im9yZy5lY2xpcHNlLmVsay5yYW5kb21TZWVkIixQQz0ib3JnLmVjbGlwc2UuZWxrLnNlcGFyYXRlQ29ubmVjdGVkQ29tcG9uZW50cyIsJEk9Im9yZy5lY2xpcHNlLmVsay5pbnRlcmFjdGl2ZSIsRm90PSJvcmcuZWNsaXBzZS5lbGsucG9ydENvbnN0cmFpbnRzIixWcT0ib3JnLmVjbGlwc2UuZWxrLmVkZ2VMYWJlbHMuaW5saW5lIixGQz0ib3JnLmVjbGlwc2UuZWxrLm9taXROb2RlTWljcm9MYXlvdXQiLGJ4PSJvcmcuZWNsaXBzZS5lbGsubm9kZVNpemUub3B0aW9ucyIsTTQ9Im9yZy5lY2xpcHNlLmVsay5ub2RlU2l6ZS5jb25zdHJhaW50cyIsRjc9Im9yZy5lY2xpcHNlLmVsay5ub2RlTGFiZWxzLnBsYWNlbWVudCIsQjc9Im9yZy5lY2xpcHNlLmVsay5wb3J0TGFiZWxzLnBsYWNlbWVudCIsb3h0PSJvcmlnaW4iLGpmZT0icmFuZG9tIiwkZmU9ImJvdW5kaW5nQm94LnVwTGVmdCIsemZlPSJib3VuZGluZ0JveC5sb3dSaWdodCIsY3h0PSJvcmcuZWNsaXBzZS5lbGsuc3RyZXNzLmZpeGVkIix1eHQ9Im9yZy5lY2xpcHNlLmVsay5zdHJlc3MuZGVzaXJlZEVkZ2VMZW5ndGgiLGx4dD0ib3JnLmVjbGlwc2UuZWxrLnN0cmVzcy5kaW1lbnNpb24iLGh4dD0ib3JnLmVjbGlwc2UuZWxrLnN0cmVzcy5lcHNpbG9uIixmeHQ9Im9yZy5lY2xpcHNlLmVsay5zdHJlc3MuaXRlcmF0aW9uTGltaXQiLHNiPSJvcmcuZWNsaXBzZS5lbGsuc3RyZXNzIixxZmU9IkVMSyBTdHJlc3MiLHZ4PSJvcmcuZWNsaXBzZS5lbGsubm9kZVNpemUubWluaW11bSIsR3E9Im9yZy5lY2xpcHNlLmVsay5hbGcuZm9yY2Uuc3RyZXNzIixIZmU9IkxheWVyZWQgbGF5b3V0Iix3eD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkIix6ST0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmNvbXBhY3Rpb24uY29tcG9uZW50cyIsQkM9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5jb21wYWN0aW9uLm9uZWQiLFVxPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQuY29tcGFjdGlvbi5vbmVkLmFsZ3MiLFMyPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQuY29tcGFjdGlvbi5yZWN0aHVsbCIsa2Q9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5jb21wb25lbnRzIixLMD0iTk9ORSIsQ2M9ezM6MSw2OjEsNDoxLDk6MSw1OjEsMTIyOjF9LFZmZT17MzoxLDY6MSw0OjEsNToxLDE0MToxLDEwNjoxLDEyMDoxfSxXcT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmNvbXBvdW5kIix2cz17NTE6MX0scnU9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5ncmFwaCIsQm90PSIgLT4gIixHZmU9Ik5vdCBzdXBwb3J0ZWQgYnkgTEdyYXBoIixkeHQ9IlBvcnQgc2lkZSBpcyB1bmRlZmluZWQiLFJvdD17MzoxLDY6MSw0OjEsNToxLDQ3NDoxLDE0MToxLDEwNjoxLDEyMDoxfSxHZz17MzoxLDY6MSw0OjEsNToxLDE0MToxLDE5MzoxLDIwMzoxLDEwNjoxLDEyMDoxfSxVZmU9ezM6MSw2OjEsNDoxLDU6MSwxNDE6MSwxOTQzOjEsMjAzOjEsMTA2OjEsMTIwOjF9LFdmZT1gKFt7IicgCVxyCmAsS2ZlPWApXX0iJyAJXHIKYCxZZmU9IlRoZSBnaXZlbiBzdHJpbmcgY29udGFpbnMgcGFydHMgdGhhdCBjYW5ub3QgYmUgcGFyc2VkIGFzIG51bWJlcnMuIixxST0ib3JnLmVjbGlwc2UuZWxrLmNvcmUubWF0aCIsWGZlPXszOjEsNDoxLDE0MjoxLDIwNzoxLDQxNDoxfSxRZmU9ezM6MSw0OjEsMTE2OjEsMjA3OjEsNDE0OjF9LFVuPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZCIsVWc9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5ncmFwaC50cmFuc2Zvcm0iLFpmZT0iRWxrR3JhcGhJbXBvcnRlciIsSmZlPSJFbGtHcmFwaEltcG9ydGVyL2xhbWJkYSQwJFR5cGUiLHQxZT0iRWxrR3JhcGhJbXBvcnRlci9sYW1iZGEkMSRUeXBlIixlMWU9IkVsa0dyYXBoSW1wb3J0ZXIvbGFtYmRhJDIkVHlwZSIsbjFlPSJFbGtHcmFwaEltcG9ydGVyL2xhbWJkYSQ0JFR5cGUiLHIxZT0iTm9kZSBtYXJnaW4gY2FsY3VsYXRpb24iLCRuPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQuaW50ZXJtZWRpYXRlIixpMWU9Ik9ORV9TSURFRF9HUkVFRFlfU1dJVENIIixzMWU9IlRXT19TSURFRF9HUkVFRFlfU1dJVENIIixqb3Q9Ik5vIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSBmb3IgdGhlIGxheW91dCBwcm9jZXNzb3IgIixneHQ9IkludGVybWVkaWF0ZVByb2Nlc3NvclN0cmF0ZWd5Iiwkb3Q9Ik5vZGUgJyIsYTFlPSJGSVJTVF9TRVBBUkFURSIsbzFlPSJMQVNUX1NFUEFSQVRFIixjMWU9Ik9kZCBwb3J0IHNpZGUgcHJvY2Vzc2luZyIsUHM9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5pbnRlcm1lZGlhdGUuY29tcGFjdGlvbiIsUkM9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5pbnRlcm1lZGlhdGUuZ3JlZWR5c3dpdGNoIixzMD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLnAzb3JkZXIuY291bnRpbmciLEhJPXsyMjU6MX0sbXg9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5pbnRlcm1lZGlhdGUubG9vcHMiLEtsPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQuaW50ZXJtZWRpYXRlLmxvb3BzLm9yZGVyaW5nIixhYj0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmludGVybWVkaWF0ZS5sb29wcy5yb3V0aW5nIixqQz0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmludGVybWVkaWF0ZS5wcmVzZXJ2ZW9yZGVyIixFZD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmludGVybWVkaWF0ZS53cmFwcGluZyIsU2M9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5vcHRpb25zIix6b3Q9IklOVEVSQUNUSVZFIix1MWU9IkRFUFRIX0ZJUlNUIixsMWU9IkVER0VfTEVOR1RIIixoMWU9IlNFTEZfTE9PUFMiLGYxZT0iZmlyc3RUcnlXaXRoSW5pdGlhbE9yZGVyIixweHQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmRpcmVjdGlvbkNvbmdydWVuY3kiLGJ4dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuZmVlZGJhY2tFZGdlcyIsS3E9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmludGVyYWN0aXZlUmVmZXJlbmNlUG9pbnQiLHZ4dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubWVyZ2VFZGdlcyIsd3h0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5tZXJnZUhpZXJhcmNoeUVkZ2VzIixteHQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmFsbG93Tm9uRmxvd1BvcnRzVG9Td2l0Y2hTaWRlcyIseXh0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5wb3J0U29ydGluZ1N0cmF0ZWd5Iix4eHQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLnRob3JvdWdobmVzcyIsa3h0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC51bm5lY2Vzc2FyeUJlbmRwb2ludHMiLEV4dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuZ2VuZXJhdGVQb3NpdGlvbkFuZExheWVySWRzIixxb3Q9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmN5Y2xlQnJlYWtpbmcuc3RyYXRlZ3kiLFZJPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5sYXllcmluZy5zdHJhdGVneSIsVHh0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5sYXllcmluZy5sYXllckNvbnN0cmFpbnQiLF94dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubGF5ZXJpbmcubGF5ZXJDaG9pY2VDb25zdHJhaW50IixDeHQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmxheWVyaW5nLmxheWVySWQiLEhvdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubGF5ZXJpbmcubWluV2lkdGgudXBwZXJCb3VuZE9uV2lkdGgiLFZvdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubGF5ZXJpbmcubWluV2lkdGgudXBwZXJMYXllckVzdGltYXRpb25TY2FsaW5nRmFjdG9yIixHb3Q9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmxheWVyaW5nLm5vZGVQcm9tb3Rpb24uc3RyYXRlZ3kiLFVvdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubGF5ZXJpbmcubm9kZVByb21vdGlvbi5tYXhJdGVyYXRpb25zIixXb3Q9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmxheWVyaW5nLmNvZmZtYW5HcmFoYW0ubGF5ZXJCb3VuZCIsJEM9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmNyb3NzaW5nTWluaW1pemF0aW9uLnN0cmF0ZWd5IixTeHQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmNyb3NzaW5nTWluaW1pemF0aW9uLmZvcmNlTm9kZU1vZGVsT3JkZXIiLEtvdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY3Jvc3NpbmdNaW5pbWl6YXRpb24uaGllcmFyY2hpY2FsU3dlZXBpbmVzcyIsWW90PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jcm9zc2luZ01pbmltaXphdGlvbi5zZW1pSW50ZXJhY3RpdmUiLEF4dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY3Jvc3NpbmdNaW5pbWl6YXRpb24ucG9zaXRpb25DaG9pY2VDb25zdHJhaW50IixMeHQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmNyb3NzaW5nTWluaW1pemF0aW9uLnBvc2l0aW9uSWQiLE14dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY3Jvc3NpbmdNaW5pbWl6YXRpb24uZ3JlZWR5U3dpdGNoLmFjdGl2YXRpb25UaHJlc2hvbGQiLFhvdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY3Jvc3NpbmdNaW5pbWl6YXRpb24uZ3JlZWR5U3dpdGNoLnR5cGUiLFlxPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jcm9zc2luZ01pbmltaXphdGlvbi5ncmVlZHlTd2l0Y2hIaWVyYXJjaGljYWwudHlwZSIsRDQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLm5vZGVQbGFjZW1lbnQuc3RyYXRlZ3kiLFhxPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5ub2RlUGxhY2VtZW50LmZhdm9yU3RyYWlnaHRFZGdlcyIsUW90PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5ub2RlUGxhY2VtZW50LmJrLmVkZ2VTdHJhaWdodGVuaW5nIixab3Q9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLm5vZGVQbGFjZW1lbnQuYmsuZml4ZWRBbGlnbm1lbnQiLEpvdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubm9kZVBsYWNlbWVudC5saW5lYXJTZWdtZW50cy5kZWZsZWN0aW9uRGFtcGVuaW5nIix0Y3Q9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLm5vZGVQbGFjZW1lbnQubmV0d29ya1NpbXBsZXgubm9kZUZsZXhpYmlsaXR5IixlY3Q9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLm5vZGVQbGFjZW1lbnQubmV0d29ya1NpbXBsZXgubm9kZUZsZXhpYmlsaXR5LmRlZmF1bHQiLER4dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuZWRnZVJvdXRpbmcuc2VsZkxvb3BEaXN0cmlidXRpb24iLEl4dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuZWRnZVJvdXRpbmcuc2VsZkxvb3BPcmRlcmluZyIsUXE9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmVkZ2VSb3V0aW5nLnNwbGluZXMubW9kZSIsWnE9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmVkZ2VSb3V0aW5nLnNwbGluZXMuc2xvcHB5LmxheWVyU3BhY2luZ0ZhY3RvciIsbmN0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5lZGdlUm91dGluZy5wb2x5bGluZS5zbG9wZWRFZGdlWm9uZVdpZHRoIixPeHQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLnNwYWNpbmcuYmFzZVZhbHVlIixOeHQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLnNwYWNpbmcuZWRnZU5vZGVCZXR3ZWVuTGF5ZXJzIixQeHQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLnNwYWNpbmcuZWRnZUVkZ2VCZXR3ZWVuTGF5ZXJzIixGeHQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLnNwYWNpbmcubm9kZU5vZGVCZXR3ZWVuTGF5ZXJzIixCeHQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLnByaW9yaXR5LmRpcmVjdGlvbiIsUnh0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5wcmlvcml0eS5zaG9ydG5lc3MiLGp4dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQucHJpb3JpdHkuc3RyYWlnaHRuZXNzIixyY3Q9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmNvbXBhY3Rpb24uY29ubmVjdGVkQ29tcG9uZW50cyIsJHh0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jb21wYWN0aW9uLnBvc3RDb21wYWN0aW9uLnN0cmF0ZWd5Iix6eHQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmNvbXBhY3Rpb24ucG9zdENvbXBhY3Rpb24uY29uc3RyYWludHMiLEpxPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5oaWdoRGVncmVlTm9kZXMudHJlYXRtZW50IixpY3Q9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmhpZ2hEZWdyZWVOb2Rlcy50aHJlc2hvbGQiLHNjdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuaGlnaERlZ3JlZU5vZGVzLnRyZWVIZWlnaHQiLFkwPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC53cmFwcGluZy5zdHJhdGVneSIsdEg9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLmFkZGl0aW9uYWxFZGdlU3BhY2luZyIsZUg9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLmNvcnJlY3Rpb25GYWN0b3IiLHpDPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC53cmFwcGluZy5jdXR0aW5nLnN0cmF0ZWd5IixhY3Q9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLmN1dHRpbmcuY3V0cyIsb2N0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC53cmFwcGluZy5jdXR0aW5nLm1zZC5mcmVlZG9tIixuSD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQud3JhcHBpbmcudmFsaWRpZnkuc3RyYXRlZ3kiLHJIPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC53cmFwcGluZy52YWxpZGlmeS5mb3JiaWRkZW5JbmRpY2VzIixpSD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQud3JhcHBpbmcubXVsdGlFZGdlLmltcHJvdmVDdXRzIixzSD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQud3JhcHBpbmcubXVsdGlFZGdlLmRpc3RhbmNlUGVuYWx0eSIsY2N0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC53cmFwcGluZy5tdWx0aUVkZ2UuaW1wcm92ZVdyYXBwZWRFZGdlcyIscXh0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5lZGdlTGFiZWxzLnNpZGVTZWxlY3Rpb24iLEh4dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuZWRnZUxhYmVscy5jZW50ZXJMYWJlbFBsYWNlbWVudFN0cmF0ZWd5IixhSD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29uc2lkZXJNb2RlbE9yZGVyLnN0cmF0ZWd5IixWeHQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmNvbnNpZGVyTW9kZWxPcmRlci5ub01vZGVsT3JkZXIiLHVjdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29uc2lkZXJNb2RlbE9yZGVyLmNvbXBvbmVudHMiLEd4dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29uc2lkZXJNb2RlbE9yZGVyLmxvbmdFZGdlU3RyYXRlZ3kiLGxjdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29uc2lkZXJNb2RlbE9yZGVyLmNyb3NzaW5nQ291bnRlck5vZGVJbmZsdWVuY2UiLGhjdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29uc2lkZXJNb2RlbE9yZGVyLmNyb3NzaW5nQ291bnRlclBvcnRJbmZsdWVuY2UiLGZjdD0ibGF5ZXJpbmciLGQxZT0ibGF5ZXJpbmcubWluV2lkdGgiLGcxZT0ibGF5ZXJpbmcubm9kZVByb21vdGlvbiIsR0k9ImNyb3NzaW5nTWluaW1pemF0aW9uIixvSD0ib3JnLmVjbGlwc2UuZWxrLmhpZXJhcmNoeUhhbmRsaW5nIixwMWU9ImNyb3NzaW5nTWluaW1pemF0aW9uLmdyZWVkeVN3aXRjaCIsYjFlPSJub2RlUGxhY2VtZW50Iix2MWU9Im5vZGVQbGFjZW1lbnQuYmsiLHcxZT0iZWRnZVJvdXRpbmciLFVJPSJvcmcuZWNsaXBzZS5lbGsuZWRnZVJvdXRpbmciLGoxPSJzcGFjaW5nIixVeHQ9InByaW9yaXR5IixXeHQ9ImNvbXBhY3Rpb24iLG0xZT0iY29tcGFjdGlvbi5wb3N0Q29tcGFjdGlvbiIseTFlPSJTcGVjaWZpZXMgd2hldGhlciBhbmQgaG93IHBvc3QtcHJvY2VzcyBjb21wYWN0aW9uIGlzIGFwcGxpZWQuIixLeHQ9ImhpZ2hEZWdyZWVOb2RlcyIsWXh0PSJ3cmFwcGluZyIseDFlPSJ3cmFwcGluZy5jdXR0aW5nIixrMWU9IndyYXBwaW5nLnZhbGlkaWZ5IixYeHQ9IndyYXBwaW5nLm11bHRpRWRnZSIsZGN0PSJlZGdlTGFiZWxzIixXST0iY29uc2lkZXJNb2RlbE9yZGVyIixReHQ9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLmNvbW1lbnRDb21tZW50IixaeHQ9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLmNvbW1lbnROb2RlIixKeHQ9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLmVkZ2VFZGdlIix0a3Q9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLmVkZ2VOb2RlIixla3Q9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLmxhYmVsTGFiZWwiLG5rdD0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcubGFiZWxQb3J0SG9yaXpvbnRhbCIscmt0PSJvcmcuZWNsaXBzZS5lbGsuc3BhY2luZy5sYWJlbFBvcnRWZXJ0aWNhbCIsaWt0PSJvcmcuZWNsaXBzZS5lbGsuc3BhY2luZy5sYWJlbE5vZGUiLHNrdD0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcubm9kZVNlbGZMb29wIixha3Q9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLnBvcnRQb3J0Iixva3Q9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLmluZGl2aWR1YWwiLGNrdD0ib3JnLmVjbGlwc2UuZWxrLnBvcnQuYm9yZGVyT2Zmc2V0Iix1a3Q9Im9yZy5lY2xpcHNlLmVsay5ub0xheW91dCIsbGt0PSJvcmcuZWNsaXBzZS5lbGsucG9ydC5zaWRlIixLST0ib3JnLmVjbGlwc2UuZWxrLmRlYnVnTW9kZSIsaGt0PSJvcmcuZWNsaXBzZS5lbGsuYWxpZ25tZW50Iixma3Q9Im9yZy5lY2xpcHNlLmVsay5pbnNpZGVTZWxmTG9vcHMuYWN0aXZhdGUiLGRrdD0ib3JnLmVjbGlwc2UuZWxrLmluc2lkZVNlbGZMb29wcy55byIsZ2N0PSJvcmcuZWNsaXBzZS5lbGsubm9kZVNpemUuZml4ZWRHcmFwaFNpemUiLGdrdD0ib3JnLmVjbGlwc2UuZWxrLmRpcmVjdGlvbiIscGt0PSJvcmcuZWNsaXBzZS5lbGsubm9kZUxhYmVscy5wYWRkaW5nIixia3Q9Im9yZy5lY2xpcHNlLmVsay5wb3J0TGFiZWxzLm5leHRUb1BvcnRJZlBvc3NpYmxlIix2a3Q9Im9yZy5lY2xpcHNlLmVsay5wb3J0TGFiZWxzLnRyZWF0QXNHcm91cCIsd2t0PSJvcmcuZWNsaXBzZS5lbGsucG9ydEFsaWdubWVudC5kZWZhdWx0Iixta3Q9Im9yZy5lY2xpcHNlLmVsay5wb3J0QWxpZ25tZW50Lm5vcnRoIix5a3Q9Im9yZy5lY2xpcHNlLmVsay5wb3J0QWxpZ25tZW50LnNvdXRoIix4a3Q9Im9yZy5lY2xpcHNlLmVsay5wb3J0QWxpZ25tZW50Lndlc3QiLGtrdD0ib3JnLmVjbGlwc2UuZWxrLnBvcnRBbGlnbm1lbnQuZWFzdCIsY0g9Im9yZy5lY2xpcHNlLmVsay5jb250ZW50QWxpZ25tZW50IixFa3Q9Im9yZy5lY2xpcHNlLmVsay5qdW5jdGlvblBvaW50cyIsVGt0PSJvcmcuZWNsaXBzZS5lbGsuZWRnZUxhYmVscy5wbGFjZW1lbnQiLF9rdD0ib3JnLmVjbGlwc2UuZWxrLnBvcnQuaW5kZXgiLENrdD0ib3JnLmVjbGlwc2UuZWxrLmNvbW1lbnRCb3giLFNrdD0ib3JnLmVjbGlwc2UuZWxrLmh5cGVybm9kZSIsQWt0PSJvcmcuZWNsaXBzZS5lbGsucG9ydC5hbmNob3IiLHBjdD0ib3JnLmVjbGlwc2UuZWxrLnBhcnRpdGlvbmluZy5hY3RpdmF0ZSIsYmN0PSJvcmcuZWNsaXBzZS5lbGsucGFydGl0aW9uaW5nLnBhcnRpdGlvbiIsdUg9Im9yZy5lY2xpcHNlLmVsay5wb3NpdGlvbiIsTGt0PSJvcmcuZWNsaXBzZS5lbGsubWFyZ2lucyIsTWt0PSJvcmcuZWNsaXBzZS5lbGsuc3BhY2luZy5wb3J0c1N1cnJvdW5kaW5nIix2Y3Q9Im9yZy5lY2xpcHNlLmVsay5pbnRlcmFjdGl2ZUxheW91dCIsQWM9Im9yZy5lY2xpcHNlLmVsay5jb3JlLnV0aWwiLERrdD17MzoxLDQ6MSw1OjEsNTkzOjF9LEUxZT0iTkVUV09SS19TSU1QTEVYIixWYz17MTIzOjEsNTE6MX0sbEg9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5wMWN5Y2xlcyIsRXk9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5wMmxheWVycyIsSWt0PXs0MDI6MSwyMjU6MX0sVDFlPXs4MzI6MSwzOjEsNDoxfSxXdT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLnAzb3JkZXIiLGJvPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDRub2RlcyIsXzFlPXszOjEsNDoxLDU6MSw4NDA6MX0sVGQ9MWUtNSxvYj0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLnA0bm9kZXMuYmsiLHdjdD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLnA1ZWRnZXMiLHIxPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDVlZGdlcy5vcnRob2dvbmFsIixtY3Q9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5wNWVkZ2VzLm9ydGhvZ29uYWwuZGlyZWN0aW9uIix5Y3Q9MWUtNixUeT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLnA1ZWRnZXMuc3BsaW5lcyIseGN0PS4wOTk5OTk5OTk5OTk5OTk5OCxoSD0xZS04LEMxZT00LjcxMjM4ODk4MDM4NDY5LFMxZT0zLjE0MTU5MjY1MzU4OTc5MyxxQz0ib3JnLmVjbGlwc2UuZWxrLmFsZy5tcnRyZWUiLEhDPSJvcmcuZWNsaXBzZS5lbGsuYWxnLm1ydHJlZS5ncmFwaCIseXg9Im9yZy5lY2xpcHNlLmVsay5hbGcubXJ0cmVlLmludGVybWVkaWF0ZSIsQTFlPSJTZXQgbmVpZ2hib3JzIGluIGxldmVsIixMMWU9IkRFU0NFTkRBTlRTIixPa3Q9Im9yZy5lY2xpcHNlLmVsay5tcnRyZWUud2VpZ2h0aW5nIixOa3Q9Im9yZy5lY2xpcHNlLmVsay5tcnRyZWUuc2VhcmNoT3JkZXIiLGZIPSJvcmcuZWNsaXBzZS5lbGsuYWxnLm1ydHJlZS5vcHRpb25zIixXZz0ib3JnLmVjbGlwc2UuZWxrLm1ydHJlZSIsTTFlPSJvcmcuZWNsaXBzZS5lbGsudHJlZSIsUGt0PSJvcmcuZWNsaXBzZS5lbGsuYWxnLnJhZGlhbCIsSTQ9Ni4yODMxODUzMDcxNzk1ODYsRmt0PTVlLTMyNCxEMWU9Im9yZy5lY2xpcHNlLmVsay5hbGcucmFkaWFsLmludGVybWVkaWF0ZSIsa2N0PSJvcmcuZWNsaXBzZS5lbGsuYWxnLnJhZGlhbC5pbnRlcm1lZGlhdGUuY29tcGFjdGlvbiIsSTFlPXszOjEsNDoxLDU6MSwxMDY6MX0sQmt0PSJvcmcuZWNsaXBzZS5lbGsuYWxnLnJhZGlhbC5pbnRlcm1lZGlhdGUub3B0aW1pemF0aW9uIixFY3Q9Ik5vIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSBmb3IgdGhlIGxheW91dCBvcHRpb24gIixWQz0ib3JnLmVjbGlwc2UuZWxrLmFsZy5yYWRpYWwub3B0aW9ucyIsUmt0PSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLm9yZGVySWQiLGprdD0ib3JnLmVjbGlwc2UuZWxrLnJhZGlhbC5yYWRpdXMiLFRjdD0ib3JnLmVjbGlwc2UuZWxrLnJhZGlhbC5jb21wYWN0b3IiLF9jdD0ib3JnLmVjbGlwc2UuZWxrLnJhZGlhbC5jb21wYWN0aW9uU3RlcFNpemUiLCRrdD0ib3JnLmVjbGlwc2UuZWxrLnJhZGlhbC5zb3J0ZXIiLHprdD0ib3JnLmVjbGlwc2UuZWxrLnJhZGlhbC53ZWRnZUNyaXRlcmlhIixxa3Q9Im9yZy5lY2xpcHNlLmVsay5yYWRpYWwub3B0aW1pemF0aW9uQ3JpdGVyaWEiLF9kPSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsIixPMWU9Im9yZy5lY2xpcHNlLmVsay5hbGcucmFkaWFsLnAxcG9zaXRpb24ud2VkZ2UiLEhrdD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5yYWRpYWwuc29ydGluZyIsTjFlPTUuNDk3Nzg3MTQzNzgyMTM4LFAxZT0zLjkyNjk5MDgxNjk4NzI0MTQsRjFlPTIuMzU2MTk0NDkwMTkyMzQ1LEIxZT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5yZWN0cGFja2luZyIsZEg9Im9yZy5lY2xpcHNlLmVsay5hbGcucmVjdHBhY2tpbmcuZmlyc3RpdGVyYXRpb24iLENjdD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5yZWN0cGFja2luZy5vcHRpb25zIixWa3Q9Im9yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZy5vcHRpbWl6YXRpb25Hb2FsIixHa3Q9Im9yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZy5sYXN0UGxhY2VTaGlmdCIsVWt0PSJvcmcuZWNsaXBzZS5lbGsucmVjdHBhY2tpbmcuY3VycmVudFBvc2l0aW9uIixXa3Q9Im9yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZy5kZXNpcmVkUG9zaXRpb24iLEtrdD0ib3JnLmVjbGlwc2UuZWxrLnJlY3RwYWNraW5nLm9ubHlGaXJzdEl0ZXJhdGlvbiIsWWt0PSJvcmcuZWNsaXBzZS5lbGsucmVjdHBhY2tpbmcucm93Q29tcGFjdGlvbiIsU2N0PSJvcmcuZWNsaXBzZS5lbGsucmVjdHBhY2tpbmcuZXhwYW5kVG9Bc3BlY3RSYXRpbyIsWGt0PSJvcmcuZWNsaXBzZS5lbGsucmVjdHBhY2tpbmcudGFyZ2V0V2lkdGgiLGdIPSJvcmcuZWNsaXBzZS5lbGsuZXhwYW5kTm9kZXMiLEZoPSJvcmcuZWNsaXBzZS5lbGsucmVjdHBhY2tpbmciLFlJPSJvcmcuZWNsaXBzZS5lbGsuYWxnLnJlY3RwYWNraW5nLnV0aWwiLHBIPSJObyBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUgZm9yICIsX3k9Im9yZy5lY2xpcHNlLmVsay5hbGcuc3BvcmUiLEN5PSJvcmcuZWNsaXBzZS5lbGsuYWxnLnNwb3JlLm9wdGlvbnMiLG13PSJvcmcuZWNsaXBzZS5lbGsuc3BvcmVDb21wYWN0aW9uIixBY3Q9Im9yZy5lY2xpcHNlLmVsay51bmRlcmx5aW5nTGF5b3V0QWxnb3JpdGhtIixRa3Q9Im9yZy5lY2xpcHNlLmVsay5wcm9jZXNzaW5nT3JkZXIudHJlZUNvbnN0cnVjdGlvbiIsWmt0PSJvcmcuZWNsaXBzZS5lbGsucHJvY2Vzc2luZ09yZGVyLnNwYW5uaW5nVHJlZUNvc3RGdW5jdGlvbiIsTGN0PSJvcmcuZWNsaXBzZS5lbGsucHJvY2Vzc2luZ09yZGVyLnByZWZlcnJlZFJvb3QiLE1jdD0ib3JnLmVjbGlwc2UuZWxrLnByb2Nlc3NpbmdPcmRlci5yb290U2VsZWN0aW9uIixEY3Q9Im9yZy5lY2xpcHNlLmVsay5zdHJ1Y3R1cmUuc3RydWN0dXJlRXh0cmFjdGlvblN0cmF0ZWd5IixKa3Q9Im9yZy5lY2xpcHNlLmVsay5jb21wYWN0aW9uLmNvbXBhY3Rpb25TdHJhdGVneSIsdDh0PSJvcmcuZWNsaXBzZS5lbGsuY29tcGFjdGlvbi5vcnRob2dvbmFsIixlOHQ9Im9yZy5lY2xpcHNlLmVsay5vdmVybGFwUmVtb3ZhbC5tYXhJdGVyYXRpb25zIixuOHQ9Im9yZy5lY2xpcHNlLmVsay5vdmVybGFwUmVtb3ZhbC5ydW5TY2FubGluZSIsSWN0PSJwcm9jZXNzaW5nT3JkZXIiLFIxZT0ib3ZlcmxhcFJlbW92YWwiLFI3PSJvcmcuZWNsaXBzZS5lbGsuc3BvcmVPdmVybGFwIixqMWU9Im9yZy5lY2xpcHNlLmVsay5hbGcuc3BvcmUucDFzdHJ1Y3R1cmUiLE9jdD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5zcG9yZS5wMnByb2Nlc3NpbmdvcmRlciIsTmN0PSJvcmcuZWNsaXBzZS5lbGsuYWxnLnNwb3JlLnAzZXhlY3V0aW9uIiwkMWU9IkludmFsaWQgaW5kZXg6ICIsajc9Im9yZy5lY2xpcHNlLmVsay5jb3JlLmFsZyIsTzQ9ezMzMToxfSxTeT17Mjg4OjF9LHoxZT0iTWFrZSBzdXJlIGl0cyB0eXBlIGlzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgIixyOHQ9IiB1dGlsaXR5IGNsYXNzLiIsJDc9InRydWUiLFBjdD0iZmFsc2UiLHExZT0iQ291bGRuJ3QgY2xvbmUgcHJvcGVydHkgJyIseXc9LjA1LEJoPSJvcmcuZWNsaXBzZS5lbGsuY29yZS5vcHRpb25zIixIMWU9MS4yOTk5OTk5NTIzMTYyODQyLHh3PSJvcmcuZWNsaXBzZS5lbGsuYm94IixpOHQ9Im9yZy5lY2xpcHNlLmVsay5ib3gucGFja2luZ01vZGUiLFYxZT0ib3JnLmVjbGlwc2UuZWxrLmFsZ29yaXRobSIsRzFlPSJvcmcuZWNsaXBzZS5lbGsucmVzb2x2ZWRBbGdvcml0aG0iLHM4dD0ib3JnLmVjbGlwc2UuZWxrLmJlbmRQb2ludHMiLFc1bj0ib3JnLmVjbGlwc2UuZWxrLmxhYmVsTWFuYWdlciIsVTFlPSJvcmcuZWNsaXBzZS5lbGsuc2NhbGVGYWN0b3IiLFcxZT0ib3JnLmVjbGlwc2UuZWxrLmFuaW1hdGUiLEsxZT0ib3JnLmVjbGlwc2UuZWxrLmFuaW1UaW1lRmFjdG9yIixZMWU9Im9yZy5lY2xpcHNlLmVsay5sYXlvdXRBbmNlc3RvcnMiLFgxZT0ib3JnLmVjbGlwc2UuZWxrLm1heEFuaW1UaW1lIixRMWU9Im9yZy5lY2xpcHNlLmVsay5taW5BbmltVGltZSIsWjFlPSJvcmcuZWNsaXBzZS5lbGsucHJvZ3Jlc3NCYXIiLEoxZT0ib3JnLmVjbGlwc2UuZWxrLnZhbGlkYXRlR3JhcGgiLHRkZT0ib3JnLmVjbGlwc2UuZWxrLnZhbGlkYXRlT3B0aW9ucyIsZWRlPSJvcmcuZWNsaXBzZS5lbGsuem9vbVRvRml0IixLNW49Im9yZy5lY2xpcHNlLmVsay5mb250Lm5hbWUiLG5kZT0ib3JnLmVjbGlwc2UuZWxrLmZvbnQuc2l6ZSIscmRlPSJvcmcuZWNsaXBzZS5lbGsuZWRnZS50eXBlIixpZGU9InBhcnRpdGlvbmluZyIsc2RlPSJub2RlTGFiZWxzIixiSD0icG9ydEFsaWdubWVudCIsRmN0PSJub2RlU2l6ZSIsQmN0PSJwb3J0IixhOHQ9InBvcnRMYWJlbHMiLGFkZT0iaW5zaWRlU2VsZkxvb3BzIixHQz0ib3JnLmVjbGlwc2UuZWxrLmZpeGVkIix2SD0ib3JnLmVjbGlwc2UuZWxrLnJhbmRvbSIsb2RlPSJwb3J0IG11c3QgaGF2ZSBhIHBhcmVudCBub2RlIHRvIGNhbGN1bGF0ZSB0aGUgcG9ydCBzaWRlIixjZGU9IlRoZSBlZGdlIG5lZWRzIHRvIGhhdmUgZXhhY3RseSBvbmUgZWRnZSBzZWN0aW9uLiBGb3VuZDogIixVQz0ib3JnLmVjbGlwc2UuZWxrLmNvcmUudXRpbC5hZGFwdGVycyIsdmg9Im9yZy5lY2xpcHNlLmVtZi5lY29yZSIsTjQ9Im9yZy5lY2xpcHNlLmVsay5ncmFwaCIsdWRlPSJFTWFwUHJvcGVydHlIb2xkZXIiLGxkZT0iRWxrQmVuZFBvaW50IixoZGU9IkVsa0dyYXBoRWxlbWVudCIsZmRlPSJFbGtDb25uZWN0YWJsZVNoYXBlIixvOHQ9IkVsa0VkZ2UiLGRkZT0iRWxrRWRnZVNlY3Rpb24iLGdkZT0iRU1vZGVsRWxlbWVudCIscGRlPSJFTmFtZWRFbGVtZW50IixjOHQ9IkVsa0xhYmVsIix1OHQ9IkVsa05vZGUiLGw4dD0iRWxrUG9ydCIsYmRlPXs5MjoxLDkwOjF9LHh4PSJvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsIixjYj0iVGhlIGZlYXR1cmUgJyIsV0M9IicgaXMgbm90IGEgdmFsaWQgY2hhbmdlYWJsZSBmZWF0dXJlIix2ZGU9IkV4cGVjdGluZyBudWxsIixSY3Q9IicgaXMgbm90IGEgdmFsaWQgZmVhdHVyZSIsd2RlPSJUaGUgZmVhdHVyZSBJRCIsbWRlPSIgaXMgbm90IGEgdmFsaWQgZmVhdHVyZSBJRCIseWM9MzI3NjgseWRlPXsxMDU6MSw5MjoxLDkwOjEsNTY6MSw0OToxLDk3OjF9LExuPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbCIsQTI9Im9yZy5lY2xpcHNlLmVsay5ncmFwaC5pbXBsIixLQz0iUmVjdXJzaXZlIGNvbnRhaW5tZW50IG5vdCBhbGxvd2VkIGZvciAiLHo3PSJUaGUgZGF0YXR5cGUgJyIsa3c9IicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIsamN0PSJUaGUgdmFsdWUgJyIsUDQ9ezE5MDoxLDM6MSw0OjF9LCRjdD0iVGhlIGNsYXNzICciLHE3PSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2Vsay9FbGtHcmFwaCIseGY9MTAyNCxoOHQ9InByb3BlcnR5IixZQz0idmFsdWUiLHpjdD0ic291cmNlIix4ZGU9InByb3BlcnRpZXMiLGtkZT0iaWRlbnRpZmllciIscWN0PSJoZWlnaHQiLEhjdD0id2lkdGgiLFZjdD0icGFyZW50IixHY3Q9InRleHQiLFVjdD0iY2hpbGRyZW4iLEVkZT0iaGllcmFyY2hpY2FsIixmOHQ9InNvdXJjZXMiLFdjdD0idGFyZ2V0cyIsZDh0PSJzZWN0aW9ucyIsd0g9ImJlbmRQb2ludHMiLGc4dD0ib3V0Z29pbmdTaGFwZSIscDh0PSJpbmNvbWluZ1NoYXBlIixiOHQ9Im91dGdvaW5nU2VjdGlvbnMiLHY4dD0iaW5jb21pbmdTZWN0aW9ucyIscWE9Im9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbCIsdzh0PSJTZXZlcmUgaW1wbGVtZW50YXRpb24gZXJyb3IgaW4gdGhlIEpzb24gdG8gRWxrR3JhcGggaW1wb3J0ZXIuIixDZD0iaWQiLENhPSJvcmcuZWNsaXBzZS5lbGsuZ3JhcGguanNvbiIsbTh0PSJVbmhhbmRsZWQgcGFyYW1ldGVyIHR5cGVzOiAiLFRkZT0ic3RhcnRQb2ludCIsX2RlPSJBbiBlZGdlIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgc291cmNlIGFuZCBvbmUgdGFyZ2V0IChlZGdlIGlkOiAnIixINz0iJykuIixDZGU9IlJlZmVyZW5jZWQgZWRnZSBzZWN0aW9uIGRvZXMgbm90IGV4aXN0OiAiLFNkZT0iIChlZGdlIGlkOiAnIix5OHQ9InRhcmdldCIsQWRlPSJzb3VyY2VQb2ludCIsTGRlPSJ0YXJnZXRQb2ludCIsbUg9Imdyb3VwIixmaT0ibmFtZSIsTWRlPSJjb25uZWN0YWJsZVNoYXBlIGNhbm5vdCBiZSBudWxsIixEZGU9ImVkZ2UgY2Fubm90IGJlIG51bGwiLEtjdD0iUGFzc2VkIGVkZ2UgaXMgbm90ICdzaW1wbGUnLiIseUg9Im9yZy5lY2xpcHNlLmVsay5ncmFwaC51dGlsIixYST0iVGhlICdubyBkdXBsaWNhdGVzJyBjb25zdHJhaW50IGlzIHZpb2xhdGVkIixZY3Q9InRhcmdldEluZGV4PSIsTDI9Iiwgc2l6ZT0iLFhjdD0ic291cmNlSW5kZXg9IixTZD17MzoxLDQ6MSwyMDoxLDI4OjEsNTI6MSwxNDoxLDE1OjEsNTQ6MSw2NzoxLDYzOjEsNTg6MX0sUWN0PXszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsNDc6MSwxNToxLDU0OjEsNjc6MSw2MzoxLDU4OjEsNTg4OjF9LHhIPSJsb2dnaW5nIixJZGU9Im1lYXN1cmVFeGVjdXRpb25UaW1lIixPZGU9InBhcnNlci5wYXJzZS4xIixOZGU9InBhcnNlci5wYXJzZS4yIixrSD0icGFyc2VyLm5leHQuMSIsWmN0PSJwYXJzZXIubmV4dC4yIixQZGU9InBhcnNlci5uZXh0LjMiLEZkZT0icGFyc2VyLm5leHQuNCIsTTI9InBhcnNlci5mYWN0b3IuMSIseDh0PSJwYXJzZXIuZmFjdG9yLjIiLEJkZT0icGFyc2VyLmZhY3Rvci4zIixSZGU9InBhcnNlci5mYWN0b3IuNCIsamRlPSJwYXJzZXIuZmFjdG9yLjUiLCRkZT0icGFyc2VyLmZhY3Rvci42Iix6ZGU9InBhcnNlci5hdG9tLjEiLHFkZT0icGFyc2VyLmF0b20uMiIsSGRlPSJwYXJzZXIuYXRvbS4zIixrOHQ9InBhcnNlci5hdG9tLjQiLEpjdD0icGFyc2VyLmF0b20uNSIsRTh0PSJwYXJzZXIuY2MuMSIsRUg9InBhcnNlci5jYy4yIixWZGU9InBhcnNlci5jYy4zIixHZGU9InBhcnNlci5jYy41IixUOHQ9InBhcnNlci5jYy42IixfOHQ9InBhcnNlci5jYy43Iix0dXQ9InBhcnNlci5jYy44IixVZGU9InBhcnNlci5vcGUuMSIsV2RlPSJwYXJzZXIub3BlLjIiLEtkZT0icGFyc2VyLm9wZS4zIixLZz0icGFyc2VyLmRlc2NhcGUuMSIsWWRlPSJwYXJzZXIuZGVzY2FwZS4yIixYZGU9InBhcnNlci5kZXNjYXBlLjMiLFFkZT0icGFyc2VyLmRlc2NhcGUuNCIsWmRlPSJwYXJzZXIuZGVzY2FwZS41Iix3aD0icGFyc2VyLnByb2Nlc3MuMSIsSmRlPSJwYXJzZXIucXVhbnRpZmllci4xIix0MGU9InBhcnNlci5xdWFudGlmaWVyLjIiLGUwZT0icGFyc2VyLnF1YW50aWZpZXIuMyIsbjBlPSJwYXJzZXIucXVhbnRpZmllci40IixDOHQ9InBhcnNlci5xdWFudGlmaWVyLjUiLHIwZT0ib3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkiLFM4dD17NDE1OjEsNjcyOjF9LGkwZT17MzoxLDQ6MSwyMDoxLDI4OjEsNTI6MSwxNDoxLDE1OjEsNjc6MSw1ODoxfSxRST17MzY2OjEsMTQzOjF9LFhDPSJpbmRleD0iLGV1dD17MzoxLDQ6MSw1OjEsMTI2OjF9LHMwZT17MzoxLDQ6MSwyMDoxLDI4OjEsNTI6MSwxNDoxLDE1OjEsNTQ6MSw2NzoxLDU4OjF9LEE4dD17MzoxLDY6MSw0OjEsNToxLDE5MjoxfSxhMGU9ezM6MSw0OjEsNToxLDE2NToxLDM2NzoxfSxvMGU9IjsvPzpAJj0rJCwiLGMwZT0iaW52YWxpZCBhdXRob3JpdHk6ICIsdTBlPSJFQW5ub3RhdGlvbiIsbDBlPSJFVHlwZWRFbGVtZW50IixoMGU9IkVTdHJ1Y3R1cmFsRmVhdHVyZSIsZjBlPSJFQXR0cmlidXRlIixkMGU9IkVDbGFzc2lmaWVyIixnMGU9IkVFbnVtTGl0ZXJhbCIscDBlPSJFR2VuZXJpY1R5cGUiLGIwZT0iRU9wZXJhdGlvbiIsdjBlPSJFUGFyYW1ldGVyIix3MGU9IkVSZWZlcmVuY2UiLG0wZT0iRVR5cGVQYXJhbWV0ZXIiLFlpPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbCIsbnV0PXs3NjoxfSxMOHQ9ezM6MSwyMDoxLDE0OjEsMTU6MSw1ODoxLDU4OToxLDc2OjEsNjk6MSw5NToxfSx5MGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkZlYXR1cmVNYXAkRW50cnkiLEt1PTgxOTIsQXk9MjA0OCxRQz0iYnl0ZSIsVEg9ImNoYXIiLFpDPSJkb3VibGUiLEpDPSJmbG9hdCIsdFM9ImludCIsZVM9ImxvbmciLG5TPSJzaG9ydCIseDBlPSJqYXZhLmxhbmcuT2JqZWN0IixGND17MzoxLDQ6MSw1OjEsMjQ3OjF9LE04dD17MzoxLDQ6MSw1OjEsNjczOjF9LGswZT17MzoxLDQ6MSwyMDoxLDI4OjEsNTI6MSwxNDoxLDE1OjEsNTQ6MSw2NzoxLDYzOjEsNTg6MSw2OToxfSxLbz17MzoxLDQ6MSwyMDoxLDI4OjEsNTI6MSwxNDoxLDE1OjEsNTQ6MSw2NzoxLDYzOjEsNTg6MSw3NjoxLDY5OjEsOTU6MX0sWkk9Im1peGVkIixacj0iaHR0cDovLy9vcmcvZWNsaXBzZS9lbWYvZWNvcmUvdXRpbC9FeHRlbmRlZE1ldGFEYXRhIixSaD0ia2luZCIsRTBlPXszOjEsNDoxLDU6MSw2NzQ6MX0sRDh0PXszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw2NzoxLDU4OjEsNzY6MSw2OToxLDk1OjF9LF9IPXsyMDoxLDI4OjEsNTI6MSwxNDoxLDE1OjEsNTg6MSw2OToxfSxDSD17NDc6MSwxMjU6MSwyNzk6MX0sU0g9ezcyOjEsMzMyOjF9LEFIPSJUaGUgdmFsdWUgb2YgdHlwZSAnIixMSD0iJyBtdXN0IGJlIG9mIHR5cGUgJyIsQjQ9MTMxNixqaD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIsTUg9LTMyNzY4LEV3PSJjb25zdHJhaW50cyIsTmE9ImJhc2VUeXBlIixUMGU9ImdldEVTdHJ1Y3R1cmFsRmVhdHVyZSIsXzBlPSJnZXRGZWF0dXJlSUQiLHJTPSJmZWF0dXJlIixDMGU9ImdldE9wZXJhdGlvbklEIixJOHQ9Im9wZXJhdGlvbiIsUzBlPSJkZWZhdWx0VmFsdWUiLEEwZT0iZVR5cGVQYXJhbWV0ZXJzIixMMGU9ImlzSW5zdGFuY2UiLE0wZT0iZ2V0RUVudW1MaXRlcmFsIixEMGU9ImVDb250YWluaW5nQ2xhc3MiLGNpPXs1NToxfSxJMGU9ezM6MSw0OjEsNToxLDExOToxfSxPMGU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZSIsTjBlPXs5MjoxLDkwOjEsNTkxOjEsMTkzNToxfSxydXQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsIixPOHQ9InVuc3BlY2lmaWVkIixKST0ic2ltcGxlIixESD0iYXR0cmlidXRlIixQMGU9ImF0dHJpYnV0ZVdpbGRjYXJkIixJSD0iZWxlbWVudCIsaXV0PSJlbGVtZW50V2lsZGNhcmQiLGkxPSJjb2xsYXBzZSIsc3V0PSJpdGVtVHlwZSIsT0g9Im5hbWVzcGFjZSIsdE89IiMjdGFyZ2V0TmFtZXNwYWNlIiwkaD0id2hpdGVTcGFjZSIsTjh0PSJ3aWxkY2FyZHMiLEQyPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAzL1hNTFR5cGUiLGF1dD0iIyNhbnkiLFY3PSJ1bmluaXRpYWxpemVkIixlTz0iVGhlIG11bHRpcGxpY2l0eSBjb25zdHJhaW50IGlzIHZpb2xhdGVkIixOSD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlIixGMGU9IlByb2Nlc3NpbmdJbnN0cnVjdGlvbiIsQjBlPSJTaW1wbGVBbnlUeXBlIixSMGU9IlhNTFR5cGVEb2N1bWVudFJvb3QiLERzPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuaW1wbCIsbk89IklORiIsajBlPSJwcm9jZXNzaW5nIiwkMGU9IkVOVElUSUVTXy5fYmFzZSIsUDh0PSJtaW5MZW5ndGgiLEY4dD0iRU5USVRZIixQSD0iTkNOYW1lIix6MGU9IklEUkVGU18uX2Jhc2UiLEI4dD0iaW50ZWdlciIsb3V0PSJ0b2tlbiIsY3V0PSJwYXR0ZXJuIixxMGU9IlthLXpBLVpdezEsOH0oLVthLXpBLVowLTldezEsOH0pKiIsUjh0PSJcXGlcXGMqIixIMGU9IltcXGktWzpdXVtcXGMtWzpdXSoiLFYwZT0ibm9uUG9zaXRpdmVJbnRlZ2VyIixyTz0ibWF4SW5jbHVzaXZlIixqOHQ9Ik5NVE9LRU4iLEcwZT0iTk1UT0tFTlNfLl9iYXNlIiwkOHQ9Im5vbk5lZ2F0aXZlSW50ZWdlciIsaU89Im1pbkluY2x1c2l2ZSIsVTBlPSJub3JtYWxpemVkU3RyaW5nIixXMGU9InVuc2lnbmVkQnl0ZSIsSzBlPSJ1bnNpZ25lZEludCIsWTBlPSIxODQ0Njc0NDA3MzcwOTU1MTYxNSIsWDBlPSJ1bnNpZ25lZFNob3J0IixRMGU9InByb2Nlc3NpbmdJbnN0cnVjdGlvbiIsWWc9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5pbnRlcm5hbCIsRzc9MTExNDExMSxaMGU9IkludGVybmFsIEVycm9yOiBzaG9ydGhhbmRzOiBcXHUiLGlTPSJ4bWw6aXNEaWdpdCIsdXV0PSJ4bWw6aXNXb3JkIixsdXQ9InhtbDppc1NwYWNlIixodXQ9InhtbDppc05hbWVDaGFyIixmdXQ9InhtbDppc0luaXRpYWxOYW1lQ2hhciIsSjBlPSIwOdmg2anbsNu54KWm4KWv4Kem4Kev4Kmm4Kmv4Kum4Kuv4K2m4K2v4K+n4K+v4LGm4LGv4LOm4LOv4LWm4LWv4LmQ4LmZ4LuQ4LuZ4Lyg4LypIix0Z2U9IkFaYXrDgMOWw5jDtsO4xLHEtMS+xYHFiMWKxb7GgMeDx43HsMe0x7XHusiXyZDKqMq7y4HOhs6GzojOis6MzozOjs6hzqPPjs+Qz5bPms+az5zPnM+ez57PoM+gz6LPs9CB0IzQjtGP0ZHRnNGe0oHSkNOE04fTiNOL04zTkNOr067TtdO407nUsdWW1ZnVmdWh1obXkNeq17DXstih2LrZgdmK2bHat9q62r7bgNuO25Dbk9uV25Xbpdum4KSF4KS54KS94KS94KWY4KWh4KaF4KaM4KaP4KaQ4KaT4Kao4Kaq4Kaw4Kay4Kay4Ka24Ka54Kec4Ked4Kef4Keh4Kew4Kex4KiF4KiK4KiP4KiQ4KiT4Kio4Kiq4Kiw4Kiy4Kiz4Ki14Ki24Ki44Ki54KmZ4Kmc4Kme4Kme4Kmy4Km04KqF4KqL4KqN4KqN4KqP4KqR4KqT4Kqo4Kqq4Kqw4Kqy4Kqz4Kq14Kq54Kq94Kq94Kug4Kug4KyF4KyM4KyP4KyQ4KyT4Kyo4Kyq4Kyw4Kyy4Kyz4Ky24Ky54Ky94Ky94K2c4K2d4K2f4K2h4K6F4K6K4K6O4K6Q4K6S4K6V4K6Z4K6a4K6c4K6c4K6e4K6f4K6j4K6k4K6o4K6q4K6u4K614K634K654LCF4LCM4LCO4LCQ4LCS4LCo4LCq4LCz4LC14LC54LGg4LGh4LKF4LKM4LKO4LKQ4LKS4LKo4LKq4LKz4LK14LK54LOe4LOe4LOg4LOh4LSF4LSM4LSO4LSQ4LSS4LSo4LSq4LS54LWg4LWh4LiB4Liu4Liw4Liw4Liy4Liz4LmA4LmF4LqB4LqC4LqE4LqE4LqH4LqI4LqK4LqK4LqN4LqN4LqU4LqX4LqZ4Lqf4Lqh4Lqj4Lql4Lql4Lqn4Lqn4Lqq4Lqr4Lqt4Lqu4Lqw4Lqw4Lqy4Lqz4Lq94Lq94LuA4LuE4L2A4L2H4L2J4L2p4YKg4YOF4YOQ4YO24YSA4YSA4YSC4YSD4YSF4YSH4YSJ4YSJ4YSL4YSM4YSO4YSS4YS84YS84YS+4YS+4YWA4YWA4YWM4YWM4YWO4YWO4YWQ4YWQ4YWU4YWV4YWZ4YWZ4YWf4YWh4YWj4YWj4YWl4YWl4YWn4YWn4YWp4YWp4YWt4YWu4YWy4YWz4YW14YW14Yae4Yae4Yao4Yao4Yar4Yar4Yau4Yav4Ya34Ya44Ya64Ya64Ya84YeC4Yer4Yer4Yew4Yew4Ye54Ye54biA4bqb4bqg4bu54byA4byV4byY4byd4byg4b2F4b2I4b2N4b2Q4b2X4b2Z4b2Z4b2b4b2b4b2d4b2d4b2f4b294b6A4b604b624b684b6+4b6+4b+C4b+E4b+G4b+M4b+Q4b+T4b+W4b+b4b+g4b+s4b+y4b+04b+24b+84oSm4oSm4oSq4oSr4oSu4oSu4oaA4oaC44CH44CH44Ch44Cp44GB44KU44Kh44O644SF44Ss5LiA6b6l6rCA7Z6jIixlZ2U9IlByaXZhdGUgVXNlIixkdXQ9IkFTU0lHTkVEIixndXQ9Ilwwf8KAw7/EgMW/xoDJj8mQyq/KsMu/zIDNr82wz7/QgNO/1LDWj9aQ17/YgNu/3IDdj96A3r/gpIDgpb/gpoDgp7/gqIDgqb/gqoDgq7/grIDgrb/groDgr7/gsIDgsb/gsoDgs7/gtIDgtb/gtoDgt7/guIDgub/guoDgu7/gvIDgv7/hgIDhgp/hgqDhg7/hhIDhh7/hiIDhjb/hjqDhj7/hkIDhmb/hmoDhmp/hmqDhm7/hnoDhn7/hoIDhoq/huIDhu7/hvIDhv7/igIDiga/igbDigp/igqDig4/ig5Dig7/ihIDihY/ihZDiho/ihpDih7/iiIDii7/ijIDij7/ikIDikL/ikYDikZ/ikaDik7/ilIDilb/iloDilp/ilqDil7/imIDim7/inIDinr/ioIDio7/iuoDiu7/ivIDiv5/iv7Div7/jgIDjgL/jgYDjgp/jgqDjg7/jhIDjhK/jhLDjho/jhpDjhp/jhqDjhr/jiIDji7/jjIDjj7/jkIDktrXkuIDpv7/qgIDqko/qkpDqk4/qsIDtnqPugIDvo7/vpIDvq7/vrIDvrY/vrZDvt7/vuKDvuK/vuLDvuY/vuZDvua/vubDvu75cdUZFRkZcdUZFRkbvvIDvv68iLHo4dD0iVU5BU1NJR05FRCIsVTc9ezM6MSwxMTc6MX0sbmdlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUudXRpbCIsRkg9ezM6MSw0OjEsNToxLDM2ODoxfSxxOHQ9Im9yZy5lY2xpcHNlLnh0ZXh0LnhiYXNlLmxpYiIscmdlPSJDYW5ub3QgYWRkIGVsZW1lbnRzIHRvIGEgUmFuZ2UiLGlnZT0iQ2Fubm90IHNldCBlbGVtZW50cyBpbiBhIFJhbmdlIixzZ2U9IkNhbm5vdCByZW1vdmUgZWxlbWVudHMgZnJvbSBhIFJhbmdlIixCSD0ibG9jYWxlIixSSD0iZGVmYXVsdCIsakg9InVzZXIuYWdlbnQiLGwsJEgscHV0O2IuZ29vZz1iLmdvb2d8fHt9LGIuZ29vZy5nbG9iYWw9Yi5nb29nLmdsb2JhbHx8Yix5MG4oKSxEKDEsbnVsbCx7fSxDKSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0VXQodGhpcyxlKX0sbC5HYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdtfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIER2KHRoaXMpfSxsLkliPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIE1wKGRsKHRoaXMpKSsiQCIrKGU9SmkodGhpcyk+Pj4wLGUudG9TdHJpbmcoMTYpKX0sbC5lcXVhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuRmIodCl9LGwuaGFzaENvZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5IYigpfSxsLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuSWIoKX07dmFyIGFnZSxvZ2UsY2dlO0QoMjkwLDEsezI5MDoxLDIwMjY6MX0sbXl0KSxsLmxlPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPW5ldyBteXQsbi5pPTQsZT4xP24uYz12UXQodGhpcyxlLTEpOm4uYz10aGlzLG59LGwubWU9ZnVuY3Rpb24oKXtyZXR1cm4gTDAodGhpcyksdGhpcy5ifSxsLm5lPWZ1bmN0aW9uKCl7cmV0dXJuIE1wKHRoaXMpfSxsLm9lPWZ1bmN0aW9uKCl7cmV0dXJuIEwwKHRoaXMpLHRoaXMua30sbC5wZT1mdW5jdGlvbigpe3JldHVybih0aGlzLmkmNCkhPTB9LGwucWU9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5pJjEpIT0wfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIE5tdCh0aGlzKX0sbC5pPTA7dmFyIFFuPU4oaWMsIk9iamVjdCIsMSksSDh0PU4oaWMsIkNsYXNzIiwyOTApO0QoMTk5OCwxLENJKSxOKFNJLCJPcHRpb25hbCIsMTk5OCksRCgxMTcwLDE5OTgsQ0ksQSksbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXRoaXN9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gMjA0MDczMjMzMn0sbC5JYj1mdW5jdGlvbigpe3JldHVybiJPcHRpb25hbC5hYnNlbnQoKSJ9LGwuSmI9ZnVuY3Rpb24oZSl7cmV0dXJuIERyKGUpLERUKCksYnV0fTt2YXIgYnV0O04oU0ksIkFic2VudCIsMTE3MCksRCg2MjgsMSx7fSxjZXQpLE4oU0ksIkpvaW5lciIsNjI4KTt2YXIgWTVuPWFzKFNJLCJQcmVkaWNhdGUiKTtEKDU4MiwxLHsxNjk6MSw1ODI6MSwzOjEsNDU6MX0sYlQpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHJyZSh0aGlzLGUpfSxsLkxiPWZ1bmN0aW9uKGUpe3JldHVybiBycmUodGhpcyxlKX0sbC5GYj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gX3QoZSw1ODIpPyhuPXUoZSw1ODIpLGY1dCh0aGlzLmEsbi5hKSk6ITF9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gVHl0KHRoaXMuYSkrMzA2NjU0MjUyfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIGFnbih0aGlzLmEpfSxOKFNJLCJQcmVkaWNhdGVzL0FuZFByZWRpY2F0ZSIsNTgyKSxEKDQwOCwxOTk4LHs0MDg6MSwzOjF9LEJrKSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBfdChlLDQwOCk/KG49dShlLDQwOCksU2kodGhpcy5hLG4uYSkpOiExfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIDE1MDI0NzY1NzIrSmkodGhpcy5hKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBIaGUrdGhpcy5hKyIpIn0sbC5KYj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IEJrKHIkKGUuS2IodGhpcy5hKSwidGhlIEZ1bmN0aW9uIHBhc3NlZCB0byBPcHRpb25hbC50cmFuc2Zvcm0oKSBtdXN0IG5vdCByZXR1cm4gbnVsbC4iKSl9LE4oU0ksIlByZXNlbnQiLDQwOCksRCgxOTgsMSxfNyksbC5OYj1mdW5jdGlvbihlKXtFYSh0aGlzLGUpfSxsLlFiPWZ1bmN0aW9uKCl7VnF0KCl9LE4oWWUsIlVubW9kaWZpYWJsZUl0ZXJhdG9yIiwxOTgpLEQoMTk3OCwxOTgsQzcpLGwuUWI9ZnVuY3Rpb24oKXtWcXQoKX0sbC5SYj1mdW5jdGlvbihlKXt0aHJvdyBudChuZXcgUHIpfSxsLldiPWZ1bmN0aW9uKGUpe3Rocm93IG50KG5ldyBQcil9LE4oWWUsIlVubW9kaWZpYWJsZUxpc3RJdGVyYXRvciIsMTk3OCksRCgzODYsMTk3OCxDNyksbC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmM8dGhpcy5kfSxsLlNiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYz4wfSxsLlBiPWZ1bmN0aW9uKCl7aWYodGhpcy5jPj10aGlzLmQpdGhyb3cgbnQobmV3IHZjKTtyZXR1cm4gdGhpcy5YYih0aGlzLmMrKyl9LGwuVGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxsLlViPWZ1bmN0aW9uKCl7aWYodGhpcy5jPD0wKXRocm93IG50KG5ldyB2Yyk7cmV0dXJuIHRoaXMuWGIoLS10aGlzLmMpfSxsLlZiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYy0xfSxsLmM9MCxsLmQ9MCxOKFllLCJBYnN0cmFjdEluZGV4ZWRMaXN0SXRlcmF0b3IiLDM4NiksRCg2OTksMTk4LF83KSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIG9pdCh0aGlzKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiBBbXQodGhpcyl9LGwuZT0xLE4oWWUsIkFic3RyYWN0SXRlcmF0b3IiLDY5OSksRCgxOTg2LDEsezIyNDoxfSksbC5aYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuZixlfHwodGhpcy5mPXRoaXMuYWMoKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIF9pdCh0aGlzLGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEppKHRoaXMuWmIoKSl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nYygpPT0wfSxsLmVjPWZ1bmN0aW9uKCl7cmV0dXJuIE42KHRoaXMpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIFdvKHRoaXMuWmIoKSl9LE4oWWUsIkFic3RyYWN0TXVsdGltYXAiLDE5ODYpLEQoNzI2LDE5ODYsazIpLGwuJGI9ZnVuY3Rpb24oKXtRJCh0aGlzKX0sbC5fYj1mdW5jdGlvbihlKXtyZXR1cm4gdUh0KHRoaXMsZSl9LGwuYWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQ4KHRoaXMsdGhpcy5jKX0sbC5pYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5oYygpfSxsLmJjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBLMyh0aGlzLHRoaXMuYyl9LGwuamM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYyh0aGlzLmhjKCkpfSxsLmtjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBTcXQodGhpcyl9LGwubGM9ZnVuY3Rpb24oKXtyZXR1cm4gSXN0KHRoaXMuYy52YygpLk5jKCksbmV3IEYsNjQsdGhpcy5kKX0sbC5jYz1mdW5jdGlvbihlKXtyZXR1cm4gUGkodGhpcyxlKX0sbC5mYz1mdW5jdGlvbihlKXtyZXR1cm4gJEQodGhpcyxlKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGwubWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHBuKCksbmV3IFQoZSl9LGwubmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IENxdCh0aGlzKX0sbC5vYz1mdW5jdGlvbigpe3JldHVybiBJc3QodGhpcy5jLkNjKCkuTmMoKSxuZXcgUCw2NCx0aGlzLmQpfSxsLnBjPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG5ldyBEJCh0aGlzLGUsbixudWxsKX0sbC5kPTAsTihZZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwIiw3MjYpLEQoMTYzMSw3MjYsazIpLGwuaGM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEpjKHRoaXMuYSl9LGwuamM9ZnVuY3Rpb24oKXtyZXR1cm4gcG4oKSxwbigpLHVvfSxsLmNjPWZ1bmN0aW9uKGUpe3JldHVybiB1KFBpKHRoaXMsZSksMTUpfSxsLmZjPWZ1bmN0aW9uKGUpe3JldHVybiB1KCREKHRoaXMsZSksMTUpfSxsLlpiPWZ1bmN0aW9uKCl7cmV0dXJuIGo2KHRoaXMpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBfaXQodGhpcyxlKX0sbC5xYz1mdW5jdGlvbihlKXtyZXR1cm4gdShQaSh0aGlzLGUpLDE1KX0sbC5yYz1mdW5jdGlvbihlKXtyZXR1cm4gdSgkRCh0aGlzLGUpLDE1KX0sbC5tYz1mdW5jdGlvbihlKXtyZXR1cm4gSk0odShlLDE1KSl9LGwucGM9ZnVuY3Rpb24oZSxuKXtyZXR1cm4ga1p0KHRoaXMsZSx1KG4sMTUpLG51bGwpfSxOKFllLCJBYnN0cmFjdExpc3RNdWx0aW1hcCIsMTYzMSksRCg3MzIsMSxkYSksbC5OYj1mdW5jdGlvbihlKXtFYSh0aGlzLGUpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYy5PYigpfHx0aGlzLmUuT2IoKX0sbC5QYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiB0aGlzLmUuT2IoKXx8KGU9dSh0aGlzLmMuUGIoKSw0MiksdGhpcy5iPWUuY2QoKSx0aGlzLmE9dShlLmRkKCksMTQpLHRoaXMuZT10aGlzLmEuS2MoKSksdGhpcy5zYyh0aGlzLmIsdGhpcy5lLlBiKCkpfSxsLlFiPWZ1bmN0aW9uKCl7dGhpcy5lLlFiKCksdGhpcy5hLmRjKCkmJnRoaXMuYy5RYigpLC0tdGhpcy5kLmR9LE4oWWUsIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9JdHIiLDczMiksRCgxMDk5LDczMixkYSxDcXQpLGwuc2M9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbn0sTihZZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwLzEiLDEwOTkpLEQoMTEwMCwxLHt9LFApLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxNCkuTmMoKX0sTihZZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwLzFtZXRob2RyZWYkc3BsaXRlcmF0b3IkVHlwZSIsMTEwMCksRCgxMTAxLDczMixkYSxTcXQpLGwuc2M9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbmV3IEN2KGUsbil9LE4oWWUsIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC8yIiwxMTAxKTt2YXIgVjh0PWFzKGJyLCJNYXAiKTtEKDE5NjcsMSxidyksbC53Yz1mdW5jdGlvbihlKXtVXyh0aGlzLGUpfSxsLnljPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gcWl0KHRoaXMsZSxuLHIpfSxsLiRiPWZ1bmN0aW9uKCl7dGhpcy52YygpLiRiKCl9LGwudGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHBzdCh0aGlzLGUpfSxsLl9iPWZ1bmN0aW9uKGUpe3JldHVybiEhcDR0KHRoaXMsZSwhMSl9LGwudWM9ZnVuY3Rpb24oZSl7dmFyIG4scixzO2ZvcihyPXRoaXMudmMoKS5LYygpO3IuT2IoKTspaWYobj11KHIuUGIoKSw0Mikscz1uLmRkKCksR3QoZSk9PT1HdChzKXx8ZSE9bnVsbCYmU2koZSxzKSlyZXR1cm4hMDtyZXR1cm4hMX0sbC5GYj1mdW5jdGlvbihlKXt2YXIgbixyLHM7aWYoZT09PXRoaXMpcmV0dXJuITA7aWYoIV90KGUsODMpfHwocz11KGUsODMpLHRoaXMuZ2MoKSE9cy5nYygpKSlyZXR1cm4hMTtmb3Iocj1zLnZjKCkuS2MoKTtyLk9iKCk7KWlmKG49dShyLlBiKCksNDIpLCF0aGlzLnRjKG4pKXJldHVybiExO3JldHVybiEwfSxsLnhjPWZ1bmN0aW9uKGUpe3JldHVybiBjYyhwNHQodGhpcyxlLCExKSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gZ3l0KHRoaXMudmMoKSl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nYygpPT0wfSxsLmVjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBUbSh0aGlzKX0sbC56Yz1mdW5jdGlvbihlLG4pe3Rocm93IG50KG5ldyBUZygiUHV0IG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBtYXAiKSl9LGwuQWM9ZnVuY3Rpb24oZSl7R18odGhpcyxlKX0sbC5CYz1mdW5jdGlvbihlKXtyZXR1cm4gY2MocDR0KHRoaXMsZSwhMCkpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmMoKS5nYygpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHNhZSh0aGlzKX0sbC5DYz1mdW5jdGlvbigpe3JldHVybiBuZXcgbTEodGhpcyl9LE4oYnIsIkFic3RyYWN0TWFwIiwxOTY3KSxEKDE5ODcsMTk2NyxidyksbC5iYz1mdW5jdGlvbigpe3JldHVybiBuZXcgVFIodGhpcyl9LGwudmM9ZnVuY3Rpb24oKXtyZXR1cm4geFl0KHRoaXMpfSxsLmVjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5nLGV8fCh0aGlzLmc9dGhpcy5iYygpKX0sbC5DYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuaSxlfHwodGhpcy5pPW5ldyBlVnQodGhpcykpfSxOKFllLCJNYXBzL1ZpZXdDYWNoaW5nQWJzdHJhY3RNYXAiLDE5ODcpLEQoMzg5LDE5ODcsYncsdDgpLGwueGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHFhbih0aGlzLGUpfSxsLkJjPWZ1bmN0aW9uKGUpe3JldHVybiBpdW4odGhpcyxlKX0sbC4kYj1mdW5jdGlvbigpe3RoaXMuZD09dGhpcy5lLmM/dGhpcy5lLiRiKCk6T2oobmV3IEZ2dCh0aGlzKSl9LGwuX2I9ZnVuY3Rpb24oZSl7cmV0dXJuIEZyZSh0aGlzLmQsZSl9LGwuRWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFJrKHRoaXMpfSxsLkRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuRWMoKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV8fFNpKHRoaXMuZCxlKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBKaSh0aGlzLmQpfSxsLmVjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZS5lYygpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZC5nYygpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIFdvKHRoaXMuZCl9LE4oWWUsIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9Bc01hcCIsMzg5KTt2YXIgJDE9YXMoaWMsIkl0ZXJhYmxlIik7RCgyOCwxLHd5KSxsLkpjPWZ1bmN0aW9uKGUpe19hKHRoaXMsZSl9LGwuTGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5PYygpfSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBUbih0aGlzLDApfSxsLk9jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBrbihudWxsLHRoaXMuTmMoKSl9LGwuRmM9ZnVuY3Rpb24oZSl7dGhyb3cgbnQobmV3IFRnKCJBZGQgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGNvbGxlY3Rpb24iKSl9LGwuR2M9ZnVuY3Rpb24oZSl7cmV0dXJuIEthKHRoaXMsZSl9LGwuJGI9ZnVuY3Rpb24oKXt4d3QodGhpcyl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHJ5KHRoaXMsZSwhMSl9LGwuSWM9ZnVuY3Rpb24oZSl7cmV0dXJuIEREKHRoaXMsZSl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nYygpPT0wfSxsLk1jPWZ1bmN0aW9uKGUpe3JldHVybiByeSh0aGlzLGUsITApfSxsLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIFl2dCh0aGlzKX0sbC5RYz1mdW5jdGlvbihlKXtyZXR1cm4gWEQodGhpcyxlKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBKcCh0aGlzKX0sTihiciwiQWJzdHJhY3RDb2xsZWN0aW9uIiwyOCk7dmFyIHpoPWFzKGJyLCJTZXQiKTtEKEIxLDI4LFV1KSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBUbih0aGlzLDEpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBMaWUodGhpcyxlKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBneXQodGhpcyl9LE4oYnIsIkFic3RyYWN0U2V0IixCMSksRCgxOTcwLEIxLFV1KSxOKFllLCJTZXRzL0ltcHJvdmVkQWJzdHJhY3RTZXQiLDE5NzApLEQoMTk3MSwxOTcwLFV1KSxsLiRiPWZ1bmN0aW9uKCl7dGhpcy5SYygpLiRiKCl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGxpZSh0aGlzLGUpfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuUmMoKS5kYygpfSxsLk1jPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiB0aGlzLkhjKGUpPyhuPXUoZSw0MiksdGhpcy5SYygpLmVjKCkuTWMobi5jZCgpKSk6ITF9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5SYygpLmdjKCl9LE4oWWUsIk1hcHMvRW50cnlTZXQiLDE5NzEpLEQoMTA5NywxOTcxLFV1LFJrKSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBIeXQodGhpcy5hLmQudmMoKSxlKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgRnZ0KHRoaXMuYSl9LGwuUmM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLk1jPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBIeXQodGhpcy5hLmQudmMoKSxlKT8obj11KGUsNDIpLEFzbih0aGlzLmEuZSxuLmNkKCkpLCEwKTohMX0sbC5OYz1mdW5jdGlvbigpe3JldHVybiBHTSh0aGlzLmEuZC52YygpLk5jKCksbmV3IEdCKHRoaXMuYSkpfSxOKFllLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvQXNNYXAvQXNNYXBFbnRyaWVzIiwxMDk3KSxEKDEwOTgsMSx7fSxHQiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gaEp0KHRoaXMuYSx1KGUsNDIpKX0sTihZZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL0FzTWFwL0FzTWFwRW50cmllcy8wbWV0aG9kcmVmJHdyYXBFbnRyeSRUeXBlIiwxMDk4KSxEKDczMCwxLGRhLEZ2dCksbC5OYj1mdW5jdGlvbihlKXtFYSh0aGlzLGUpfSxsLlBiPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dSh0aGlzLmIuUGIoKSw0MiksdGhpcy5hPXUoZS5kZCgpLDE0KSxoSnQodGhpcy5jLGUpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5PYigpfSxsLlFiPWZ1bmN0aW9uKCl7cjQoISF0aGlzLmEpLHRoaXMuYi5RYigpLHRoaXMuYy5lLmQtPXRoaXMuYS5nYygpLHRoaXMuYS4kYigpLHRoaXMuYT1udWxsfSxOKFllLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvQXNNYXAvQXNNYXBJdGVyYXRvciIsNzMwKSxEKDUzMiwxOTcwLFV1LFRSKSxsLiRiPWZ1bmN0aW9uKCl7dGhpcy5iLiRiKCl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYi5fYihlKX0sbC5KYz1mdW5jdGlvbihlKXtEcihlKSx0aGlzLmIud2MobmV3IGJ0dChlKSl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLmRjKCl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IElUKHRoaXMuYi52YygpLktjKCkpfSxsLk1jPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmIuX2IoZSk/KHRoaXMuYi5CYyhlKSwhMCk6ITF9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLmdjKCl9LE4oWWUsIk1hcHMvS2V5U2V0Iiw1MzIpLEQoMzE4LDUzMixVdSxLMyksbC4kYj1mdW5jdGlvbigpe3ZhciBlO09qKChlPXRoaXMuYi52YygpLktjKCksbmV3IGNidCh0aGlzLGUpKSl9LGwuSWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYi5lYygpLkljKGUpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZXx8U2kodGhpcy5iLmVjKCksZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gSmkodGhpcy5iLmVjKCkpfSxsLktjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5iLnZjKCkuS2MoKSxuZXcgY2J0KHRoaXMsZSl9LGwuTWM9ZnVuY3Rpb24oZSl7dmFyIG4scjtyZXR1cm4gcj0wLG49dSh0aGlzLmIuQmMoZSksMTQpLG4mJihyPW4uZ2MoKSxuLiRiKCksdGhpcy5hLmQtPXIpLHI+MH0sbC5OYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuZWMoKS5OYygpfSxOKFllLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvS2V5U2V0IiwzMTgpLEQoNzMxLDEsZGEsY2J0KSxsLk5iPWZ1bmN0aW9uKGUpe0VhKHRoaXMsZSl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLk9iKCl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hPXUodGhpcy5jLlBiKCksNDIpLHRoaXMuYS5jZCgpfSxsLlFiPWZ1bmN0aW9uKCl7dmFyIGU7cjQoISF0aGlzLmEpLGU9dSh0aGlzLmEuZGQoKSwxNCksdGhpcy5jLlFiKCksdGhpcy5iLmEuZC09ZS5nYygpLGUuJGIoKSx0aGlzLmE9bnVsbH0sTihZZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL0tleVNldC8xIiw3MzEpLEQoNDkxLDM4OSx7ODM6MSwxNjE6MX0sUk0pLGwuYmM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5TYygpfSxsLmVjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuVGMoKX0sbC5TYz1mdW5jdGlvbigpe3JldHVybiBuZXcgZ00odGhpcy5jLHRoaXMuVWMoKSl9LGwuVGM9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLmIsZXx8KHRoaXMuYj10aGlzLlNjKCkpfSxsLlVjPWZ1bmN0aW9uKCl7cmV0dXJuIHUodGhpcy5kLDE2MSl9LE4oWWUsIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9Tb3J0ZWRBc01hcCIsNDkxKSxEKDU0Miw0OTEsVmhlLHlqKSxsLmJjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBKayh0aGlzLmEsdSh1KHRoaXMuZCwxNjEpLDE3MSkpfSxsLlNjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBKayh0aGlzLmEsdSh1KHRoaXMuZCwxNjEpLDE3MSkpfSxsLmVjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5iLHUoZXx8KHRoaXMuYj1uZXcgSmsodGhpcy5hLHUodSh0aGlzLmQsMTYxKSwxNzEpKSksMjcxKX0sbC5UYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuYix1KGV8fCh0aGlzLmI9bmV3IEprKHRoaXMuYSx1KHUodGhpcy5kLDE2MSksMTcxKSkpLDI3MSl9LGwuVWM9ZnVuY3Rpb24oKXtyZXR1cm4gdSh1KHRoaXMuZCwxNjEpLDE3MSl9LE4oWWUsIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9OYXZpZ2FibGVBc01hcCIsNTQyKSxEKDQ5MCwzMTgsR2hlLGdNKSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5lYygpLk5jKCl9LE4oWWUsIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9Tb3J0ZWRLZXlTZXQiLDQ5MCksRCgzODgsNDkwLFM2dCxKayksTihZZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL05hdmlnYWJsZUtleVNldCIsMzg4KSxEKDU0MSwyOCx3eSxEJCksbC5GYz1mdW5jdGlvbihlKXt2YXIgbixyO3JldHVybiBnbCh0aGlzKSxyPXRoaXMuZC5kYygpLG49dGhpcy5kLkZjKGUpLG4mJigrK3RoaXMuZi5kLHImJnFNKHRoaXMpKSxufSxsLkdjPWZ1bmN0aW9uKGUpe3ZhciBuLHIscztyZXR1cm4gZS5kYygpPyExOihzPShnbCh0aGlzKSx0aGlzLmQuZ2MoKSksbj10aGlzLmQuR2MoZSksbiYmKHI9dGhpcy5kLmdjKCksdGhpcy5mLmQrPXItcyxzPT0wJiZxTSh0aGlzKSksbil9LGwuJGI9ZnVuY3Rpb24oKXt2YXIgZTtlPShnbCh0aGlzKSx0aGlzLmQuZ2MoKSksZSE9MCYmKHRoaXMuZC4kYigpLHRoaXMuZi5kLT1lLFJqKHRoaXMpKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gZ2wodGhpcyksdGhpcy5kLkhjKGUpfSxsLkljPWZ1bmN0aW9uKGUpe3JldHVybiBnbCh0aGlzKSx0aGlzLmQuSWMoZSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10aGlzPyEwOihnbCh0aGlzKSxTaSh0aGlzLmQsZSkpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIGdsKHRoaXMpLEppKHRoaXMuZCl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gZ2wodGhpcyksbmV3IGt2dCh0aGlzKX0sbC5NYz1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gZ2wodGhpcyksbj10aGlzLmQuTWMoZSksbiYmKC0tdGhpcy5mLmQsUmoodGhpcykpLG59LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gakd0KHRoaXMpfSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIGdsKHRoaXMpLHRoaXMuZC5OYygpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIGdsKHRoaXMpLFdvKHRoaXMuZCl9LE4oWWUsIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9XcmFwcGVkQ29sbGVjdGlvbiIsNTQxKTt2YXIgbWg9YXMoYnIsIkxpc3QiKTtEKDcyOCw1NDEsezIwOjEsMjg6MSwxNDoxLDE1OjF9LFF2dCksbC5hZD1mdW5jdGlvbihlKXtuNCh0aGlzLGUpfSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIGdsKHRoaXMpLHRoaXMuZC5OYygpfSxsLlZjPWZ1bmN0aW9uKGUsbil7dmFyIHI7Z2wodGhpcykscj10aGlzLmQuZGMoKSx1KHRoaXMuZCwxNSkuVmMoZSxuKSwrK3RoaXMuYS5kLHImJnFNKHRoaXMpfSxsLldjPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvO3JldHVybiBuLmRjKCk/ITE6KG89KGdsKHRoaXMpLHRoaXMuZC5nYygpKSxyPXUodGhpcy5kLDE1KS5XYyhlLG4pLHImJihzPXRoaXMuZC5nYygpLHRoaXMuYS5kKz1zLW8sbz09MCYmcU0odGhpcykpLHIpfSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiBnbCh0aGlzKSx1KHRoaXMuZCwxNSkuWGIoZSl9LGwuWGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGdsKHRoaXMpLHUodGhpcy5kLDE1KS5YYyhlKX0sbC5ZYz1mdW5jdGlvbigpe3JldHVybiBnbCh0aGlzKSxuZXcgd1V0KHRoaXMpfSxsLlpjPWZ1bmN0aW9uKGUpe3JldHVybiBnbCh0aGlzKSxuZXcgRFh0KHRoaXMsZSl9LGwuJGM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIGdsKHRoaXMpLG49dSh0aGlzLmQsMTUpLiRjKGUpLC0tdGhpcy5hLmQsUmoodGhpcyksbn0sbC5fYz1mdW5jdGlvbihlLG4pe3JldHVybiBnbCh0aGlzKSx1KHRoaXMuZCwxNSkuX2MoZSxuKX0sbC5iZD1mdW5jdGlvbihlLG4pe3JldHVybiBnbCh0aGlzKSxrWnQodGhpcy5hLHRoaXMuZSx1KHRoaXMuZCwxNSkuYmQoZSxuKSx0aGlzLmI/dGhpcy5iOnRoaXMpfSxOKFllLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvV3JhcHBlZExpc3QiLDcyOCksRCgxMDk2LDcyOCx7MjA6MSwyODoxLDE0OjEsMTU6MSw1NDoxfSxjV3QpLE4oWWUsIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9SYW5kb21BY2Nlc3NXcmFwcGVkTGlzdCIsMTA5NiksRCg2MjAsMSxkYSxrdnQpLGwuTmI9ZnVuY3Rpb24oZSl7RWEodGhpcyxlKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiB4OCh0aGlzKSx0aGlzLmIuT2IoKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiB4OCh0aGlzKSx0aGlzLmIuUGIoKX0sbC5RYj1mdW5jdGlvbigpe0dVdCh0aGlzKX0sTihZZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL1dyYXBwZWRDb2xsZWN0aW9uL1dyYXBwZWRJdGVyYXRvciIsNjIwKSxEKDcyOSw2MjAsSmQsd1V0LERYdCksbC5RYj1mdW5jdGlvbigpe0dVdCh0aGlzKX0sbC5SYj1mdW5jdGlvbihlKXt2YXIgbjtuPWpHdCh0aGlzLmEpPT0wLCh4OCh0aGlzKSx1KHRoaXMuYiwxMjUpKS5SYihlKSwrK3RoaXMuYS5hLmQsbiYmcU0odGhpcy5hKX0sbC5TYj1mdW5jdGlvbigpe3JldHVybih4OCh0aGlzKSx1KHRoaXMuYiwxMjUpKS5TYigpfSxsLlRiPWZ1bmN0aW9uKCl7cmV0dXJuKHg4KHRoaXMpLHUodGhpcy5iLDEyNSkpLlRiKCl9LGwuVWI9ZnVuY3Rpb24oKXtyZXR1cm4oeDgodGhpcyksdSh0aGlzLmIsMTI1KSkuVWIoKX0sbC5WYj1mdW5jdGlvbigpe3JldHVybih4OCh0aGlzKSx1KHRoaXMuYiwxMjUpKS5WYigpfSxsLldiPWZ1bmN0aW9uKGUpeyh4OCh0aGlzKSx1KHRoaXMuYiwxMjUpKS5XYihlKX0sTihZZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL1dyYXBwZWRMaXN0L1dyYXBwZWRMaXN0SXRlcmF0b3IiLDcyOSksRCg3MjcsNTQxLEdoZSxIMnQpLGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gZ2wodGhpcyksdGhpcy5kLk5jKCl9LE4oWWUsIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9XcmFwcGVkU29ydGVkU2V0Iiw3MjcpLEQoMTA5NSw3MjcsUzZ0LGxVdCksTihZZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL1dyYXBwZWROYXZpZ2FibGVTZXQiLDEwOTUpLEQoMTA5NCw1NDEsVXUsa1d0KSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIGdsKHRoaXMpLHRoaXMuZC5OYygpfSxOKFllLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvV3JhcHBlZFNldCIsMTA5NCksRCgxMTAzLDEse30sRiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gTnNuKHUoZSw0MikpfSxOKFllLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvbGFtYmRhJDEkVHlwZSIsMTEwMyksRCgxMTAyLDEse30scnR0KSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgQ3YodGhpcy5hLGUpfSxOKFllLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvbGFtYmRhJDIkVHlwZSIsMTEwMik7dmFyIEkyPWFzKGJyLCJNYXAvRW50cnkiKTtEKDM0NSwxLE1xKSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBfdChlLDQyKT8obj11KGUsNDIpLGRkKHRoaXMuY2QoKSxuLmNkKCkpJiZkZCh0aGlzLmRkKCksbi5kZCgpKSk6ITF9LGwuSGI9ZnVuY3Rpb24oKXt2YXIgZSxuO3JldHVybiBlPXRoaXMuY2QoKSxuPXRoaXMuZGQoKSwoZT09bnVsbD8wOkppKGUpKV4obj09bnVsbD8wOkppKG4pKX0sbC5lZD1mdW5jdGlvbihlKXt0aHJvdyBudChuZXcgUHIpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2QoKSsiPSIrdGhpcy5kZCgpfSxOKFllLFVoZSwzNDUpLEQoMTk4OCwyOCx3eSksbC4kYj1mdW5jdGlvbigpe3RoaXMuZmQoKS4kYigpfSxsLkhjPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBfdChlLDQyKT8obj11KGUsNDIpLGdpbih0aGlzLmZkKCksbi5jZCgpLG4uZGQoKSkpOiExfSxsLk1jPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBfdChlLDQyKT8obj11KGUsNDIpLG5adCh0aGlzLmZkKCksbi5jZCgpLG4uZGQoKSkpOiExfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmQoKS5kfSxOKFllLCJNdWx0aW1hcHMvRW50cmllcyIsMTk4OCksRCg3MzMsMTk4OCx3eSxRTCksbC5LYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEua2MoKX0sbC5mZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmxjKCl9LE4oWWUsIkFic3RyYWN0TXVsdGltYXAvRW50cmllcyIsNzMzKSxEKDczNCw3MzMsVXUsUnB0KSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5sYygpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBPNHQodGhpcyxlKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBybmUodGhpcyl9LE4oWWUsIkFic3RyYWN0TXVsdGltYXAvRW50cnlTZXQiLDczNCksRCg3MzUsMjgsd3ksRDMpLGwuJGI9ZnVuY3Rpb24oKXt0aGlzLmEuJGIoKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gWmNuKHRoaXMuYSxlKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEubmMoKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZH0sbC5OYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEub2MoKX0sTihZZSwiQWJzdHJhY3RNdWx0aW1hcC9WYWx1ZXMiLDczNSksRCgxOTg5LDI4LHs4MzU6MSwyMDoxLDI4OjEsMTQ6MX0pLGwuSmM9ZnVuY3Rpb24oZSl7RHIoZSksWDModGhpcykuSmMobmV3IHB0dChlKSl9LGwuTmM9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1YMyh0aGlzKS5OYygpLElzdChlLG5ldyB5dCw2NHxlLnFkKCkmMTI5Nix0aGlzLmEuZCl9LGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIFdwdCgpLCEwfSxsLkdjPWZ1bmN0aW9uKGUpe3JldHVybiBEcih0aGlzKSxEcihlKSxfdChlLDU0Myk/bWluKHUoZSw4MzUpKTohZS5kYygpJiZacnQodGhpcyxlLktjKCkpfSxsLkhjPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPXUobnkoajYodGhpcy5hKSxlKSwxNCksKG4/bi5nYygpOjApPjB9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIGZibih0aGlzLGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEppKFgzKHRoaXMpKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiBYMyh0aGlzKS5kYygpfSxsLk1jPWZ1bmN0aW9uKGUpe3JldHVybiBrb2UodGhpcyxlLDEpPjB9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gV28oWDModGhpcykpfSxOKFllLCJBYnN0cmFjdE11bHRpc2V0IiwxOTg5KSxEKDE5OTEsMTk3MCxVdSksbC4kYj1mdW5jdGlvbigpe1EkKHRoaXMuYS5hKX0sbC5IYz1mdW5jdGlvbihlKXt2YXIgbixyO3JldHVybiBfdChlLDQ5Mik/KHI9dShlLDQxNiksdShyLmEuZGQoKSwxNCkuZ2MoKTw9MD8hMToobj1JUXQodGhpcy5hLHIuYS5jZCgpKSxuPT11KHIuYS5kZCgpLDE0KS5nYygpKSk6ITF9LGwuTWM9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG87cmV0dXJuIF90KGUsNDkyKSYmKHI9dShlLDQxNiksbj1yLmEuY2QoKSxzPXUoci5hLmRkKCksMTQpLmdjKCkscyE9MCk/KG89dGhpcy5hLHRwbihvLG4scykpOiExfSxOKFllLCJNdWx0aXNldHMvRW50cnlTZXQiLDE5OTEpLEQoMTEwOSwxOTkxLFV1LFpMKSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBQcXQoeFl0KGo2KHRoaXMuYS5hKSkuS2MoKSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gajYodGhpcy5hLmEpLmdjKCl9LE4oWWUsIkFic3RyYWN0TXVsdGlzZXQvRW50cnlTZXQiLDExMDkpLEQoNjE5LDcyNixrMiksbC5oYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdkKCl9LGwuamM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oZCgpfSxsLmNjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmpkKGUpfSxsLmZjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmtkKGUpfSxsLlpiPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5mLGV8fCh0aGlzLmY9dGhpcy5hYygpKX0sbC5oZD1mdW5jdGlvbigpe3JldHVybiBwbigpLHBuKCksVUh9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIF9pdCh0aGlzLGUpfSxsLmpkPWZ1bmN0aW9uKGUpe3JldHVybiB1KFBpKHRoaXMsZSksMjEpfSxsLmtkPWZ1bmN0aW9uKGUpe3JldHVybiB1KCREKHRoaXMsZSksMjEpfSxsLm1jPWZ1bmN0aW9uKGUpe3JldHVybiBwbigpLG5ldyBZayh1KGUsMjEpKX0sbC5wYz1mdW5jdGlvbihlLG4pe3JldHVybiBuZXcga1d0KHRoaXMsZSx1KG4sMjEpKX0sTihZZSwiQWJzdHJhY3RTZXRNdWx0aW1hcCIsNjE5KSxEKDE2NTcsNjE5LGsyKSxsLmhjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEcCh0aGlzLmIpfSxsLmdkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEcCh0aGlzLmIpfSxsLmpjPWZ1bmN0aW9uKCl7cmV0dXJuIGZ3dChuZXcgRHAodGhpcy5iKSl9LGwuaGQ9ZnVuY3Rpb24oKXtyZXR1cm4gZnd0KG5ldyBEcCh0aGlzLmIpKX0sbC5jYz1mdW5jdGlvbihlKXtyZXR1cm4gdSh1KFBpKHRoaXMsZSksMjEpLDg0KX0sbC5qZD1mdW5jdGlvbihlKXtyZXR1cm4gdSh1KFBpKHRoaXMsZSksMjEpLDg0KX0sbC5mYz1mdW5jdGlvbihlKXtyZXR1cm4gdSh1KCREKHRoaXMsZSksMjEpLDg0KX0sbC5rZD1mdW5jdGlvbihlKXtyZXR1cm4gdSh1KCREKHRoaXMsZSksMjEpLDg0KX0sbC5tYz1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwyNzEpP2Z3dCh1KGUsMjcxKSk6KHBuKCksbmV3IGsydCh1KGUsODQpKSl9LGwuWmI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLmYsZXx8KHRoaXMuZj1fdCh0aGlzLmMsMTcxKT9uZXcgeWoodGhpcyx1KHRoaXMuYywxNzEpKTpfdCh0aGlzLmMsMTYxKT9uZXcgUk0odGhpcyx1KHRoaXMuYywxNjEpKTpuZXcgdDgodGhpcyx0aGlzLmMpKX0sbC5wYz1mdW5jdGlvbihlLG4pe3JldHVybiBfdChuLDI3MSk/bmV3IGxVdCh0aGlzLGUsdShuLDI3MSkpOm5ldyBIMnQodGhpcyxlLHUobiw4NCkpfSxOKFllLCJBYnN0cmFjdFNvcnRlZFNldE11bHRpbWFwIiwxNjU3KSxEKDE2NTgsMTY1NyxrMiksbC5aYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuZix1KHUoZXx8KHRoaXMuZj1fdCh0aGlzLmMsMTcxKT9uZXcgeWoodGhpcyx1KHRoaXMuYywxNzEpKTpfdCh0aGlzLmMsMTYxKT9uZXcgUk0odGhpcyx1KHRoaXMuYywxNjEpKTpuZXcgdDgodGhpcyx0aGlzLmMpKSwxNjEpLDE3MSl9LGwuZWM9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLmksdSh1KGV8fCh0aGlzLmk9X3QodGhpcy5jLDE3MSk/bmV3IEprKHRoaXMsdSh0aGlzLmMsMTcxKSk6X3QodGhpcy5jLDE2MSk/bmV3IGdNKHRoaXMsdSh0aGlzLmMsMTYxKSk6bmV3IEszKHRoaXMsdGhpcy5jKSksODQpLDI3MSl9LGwuYmM9ZnVuY3Rpb24oKXtyZXR1cm4gX3QodGhpcy5jLDE3MSk/bmV3IEprKHRoaXMsdSh0aGlzLmMsMTcxKSk6X3QodGhpcy5jLDE2MSk/bmV3IGdNKHRoaXMsdSh0aGlzLmMsMTYxKSk6bmV3IEszKHRoaXMsdGhpcy5jKX0sTihZZSwiQWJzdHJhY3RTb3J0ZWRLZXlTb3J0ZWRTZXRNdWx0aW1hcCIsMTY1OCksRCgyMDEwLDEsezE5NDc6MX0pLGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIEgxbih0aGlzLGUpfSxsLkhiPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGd5dCgoZT10aGlzLmcsZXx8KHRoaXMuZz1uZXcgdlQodGhpcykpKSl9LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gc2FlKChlPXRoaXMuZixlfHwodGhpcy5mPW5ldyBnMnQodGhpcykpKSl9LE4oWWUsIkFic3RyYWN0VGFibGUiLDIwMTApLEQoNjY1LEIxLFV1LHZUKSxsLiRiPWZ1bmN0aW9uKCl7R3F0KCl9LGwuSGM9ZnVuY3Rpb24oZSl7dmFyIG4scjtyZXR1cm4gX3QoZSw0NjgpPyhuPXUoZSw2ODIpLHI9dShueShWWXQodGhpcy5hKSxOcChuLmMuZSxuLmIpKSw4MyksISFyJiZIeXQoci52YygpLG5ldyBDdihOcChuLmMuYyxuLmEpLFU2KG4uYyxuLmIsbi5hKSkpKTohMX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBTbm4odGhpcy5hKX0sbC5NYz1mdW5jdGlvbihlKXt2YXIgbixyO3JldHVybiBfdChlLDQ2OCk/KG49dShlLDY4Mikscj11KG55KFZZdCh0aGlzLmEpLE5wKG4uYy5lLG4uYikpLDgzKSwhIXImJl91bihyLnZjKCksbmV3IEN2KE5wKG4uYy5jLG4uYSksVTYobi5jLG4uYixuLmEpKSkpOiExfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ZdCh0aGlzLmEpfSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIGtpbih0aGlzLmEpfSxOKFllLCJBYnN0cmFjdFRhYmxlL0NlbGxTZXQiLDY2NSksRCgxOTI4LDI4LHd5LGl0dCksbC4kYj1mdW5jdGlvbigpe0dxdCgpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBOZG4odGhpcy5hLGUpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIEFubih0aGlzLmEpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ZdCh0aGlzLmEpfSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIHNadCh0aGlzLmEpfSxOKFllLCJBYnN0cmFjdFRhYmxlL1ZhbHVlcyIsMTkyOCksRCgxNjMyLDE2MzEsazIpLE4oWWUsIkFycmF5TGlzdE11bHRpbWFwR3d0U2VyaWFsaXphdGlvbkRlcGVuZGVuY2llcyIsMTYzMiksRCg1MTMsMTYzMixrMixvZXQsQnd0KSxsLmhjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBKYyh0aGlzLmEpfSxsLmE9MCxOKFllLCJBcnJheUxpc3RNdWx0aW1hcCIsNTEzKSxEKDY2NCwyMDEwLHs2NjQ6MSwxOTQ3OjEsMzoxfSxJb2UpLE4oWWUsIkFycmF5VGFibGUiLDY2NCksRCgxOTI0LDM4NixDNyxqVXQpLGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB3eXQodGhpcy5hLGUpfSxOKFllLCJBcnJheVRhYmxlLzEiLDE5MjQpLEQoMTkyNSwxLHt9LFZCKSxsLmxkPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgd3l0KHRoaXMuYSxlKX0sTihZZSwiQXJyYXlUYWJsZS8xbWV0aG9kcmVmJGdldENlbGwkVHlwZSIsMTkyNSksRCgyMDExLDEsezY4MjoxfSksbC5GYj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gZT09PXRoaXM/ITA6X3QoZSw0NjgpPyhuPXUoZSw2ODIpLGRkKE5wKHRoaXMuYy5lLHRoaXMuYiksTnAobi5jLmUsbi5iKSkmJmRkKE5wKHRoaXMuYy5jLHRoaXMuYSksTnAobi5jLmMsbi5hKSkmJmRkKFU2KHRoaXMuYyx0aGlzLmIsdGhpcy5hKSxVNihuLmMsbi5iLG4uYSkpKTohMX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiB2eih1dChvdChRbiwxKSxNZSwxLDUsW05wKHRoaXMuYy5lLHRoaXMuYiksTnAodGhpcy5jLmMsdGhpcy5hKSxVNih0aGlzLmMsdGhpcy5iLHRoaXMuYSldKSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iKCIrTnAodGhpcy5jLmUsdGhpcy5iKSsiLCIrTnAodGhpcy5jLmMsdGhpcy5hKSsiKT0iK1U2KHRoaXMuYyx0aGlzLmIsdGhpcy5hKX0sTihZZSwiVGFibGVzL0Fic3RyYWN0Q2VsbCIsMjAxMSksRCg0NjgsMjAxMSx7NDY4OjEsNjgyOjF9LHd5dCksbC5hPTAsbC5iPTAsbC5kPTAsTihZZSwiQXJyYXlUYWJsZS8yIiw0NjgpLEQoMTkyNywxLHt9LGE2KSxsLmxkPWZ1bmN0aW9uKGUpe3JldHVybiBidGUodGhpcy5hLGUpfSxOKFllLCJBcnJheVRhYmxlLzJtZXRob2RyZWYkZ2V0VmFsdWUkVHlwZSIsMTkyNyksRCgxOTI2LDM4NixDNywkVXQpLGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIGJ0ZSh0aGlzLmEsZSl9LE4oWWUsIkFycmF5VGFibGUvMyIsMTkyNiksRCgxOTc5LDE5NjcsYncpLGwuJGI9ZnVuY3Rpb24oKXtPaih0aGlzLmtjKCkpfSxsLnZjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBjNih0aGlzKX0sbC5sYz1mdW5jdGlvbigpe3JldHVybiBuZXcgd1h0KHRoaXMua2MoKSx0aGlzLmdjKCkpfSxOKFllLCJNYXBzL0l0ZXJhdG9yQmFzZWRBYnN0cmFjdE1hcCIsMTk3OSksRCg4MjgsMTk3OSxidyksbC4kYj1mdW5jdGlvbigpe3Rocm93IG50KG5ldyBQcil9LGwuX2I9ZnVuY3Rpb24oZSl7cmV0dXJuIGxIdCh0aGlzLmMsZSl9LGwua2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHpVdCh0aGlzLHRoaXMuYy5iLmMuZ2MoKSl9LGwubGM9ZnVuY3Rpb24oKXtyZXR1cm4gQW50KHRoaXMuYy5iLmMuZ2MoKSwxNixuZXcgZHYodGhpcykpfSxsLnhjPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPXUod18odGhpcy5jLGUpLDE5KSxuP3RoaXMubmQobi5hKTpudWxsfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYy5iLmMuZGMoKX0sbC5lYz1mdW5jdGlvbigpe3JldHVybiBGbnQodGhpcy5jKX0sbC56Yz1mdW5jdGlvbihlLG4pe3ZhciByO2lmKHI9dSh3Xyh0aGlzLmMsZSksMTkpLCFyKXRocm93IG50KG5ldyBQbih0aGlzLm1kKCkrIiAiK2UrIiBub3QgaW4gIitGbnQodGhpcy5jKSkpO3JldHVybiB0aGlzLm9kKHIuYSxuKX0sbC5CYz1mdW5jdGlvbihlKXt0aHJvdyBudChuZXcgUHIpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYy5iLmMuZ2MoKX0sTihZZSwiQXJyYXlUYWJsZS9BcnJheU1hcCIsODI4KSxEKDE5MjMsMSx7fSxkdiksbC5sZD1mdW5jdGlvbihlKXtyZXR1cm4gVVl0KHRoaXMuYSxlKX0sTihZZSwiQXJyYXlUYWJsZS9BcnJheU1hcC8wbWV0aG9kcmVmJGdldEVudHJ5JFR5cGUiLDE5MjMpLEQoMTkyMSwzNDUsTXEsVkh0KSxsLmNkPWZ1bmN0aW9uKCl7cmV0dXJuIEhYZSh0aGlzLmEsdGhpcy5iKX0sbC5kZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEubmQodGhpcy5iKX0sbC5lZD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLm9kKHRoaXMuYixlKX0sbC5iPTAsTihZZSwiQXJyYXlUYWJsZS9BcnJheU1hcC8xIiwxOTIxKSxEKDE5MjIsMzg2LEM3LHpVdCksbC5YYj1mdW5jdGlvbihlKXtyZXR1cm4gVVl0KHRoaXMuYSxlKX0sTihZZSwiQXJyYXlUYWJsZS9BcnJheU1hcC8yIiwxOTIyKSxEKDE5MjAsODI4LGJ3LE9ZdCksbC5tZD1mdW5jdGlvbigpe3JldHVybiJDb2x1bW4ifSxsLm5kPWZ1bmN0aW9uKGUpe3JldHVybiBVNih0aGlzLmIsdGhpcy5hLGUpfSxsLm9kPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHFuZSh0aGlzLmIsdGhpcy5hLGUsbil9LGwuYT0wLE4oWWUsIkFycmF5VGFibGUvUm93IiwxOTIwKSxEKDgyOSw4MjgsYncsZzJ0KSxsLm5kPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgT1l0KHRoaXMuYSxlKX0sbC56Yz1mdW5jdGlvbihlLG4pe3JldHVybiB1KG4sODMpLENLZSgpfSxsLm9kPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHUobiw4MyksU0tlKCl9LGwubWQ9ZnVuY3Rpb24oKXtyZXR1cm4iUm93In0sTihZZSwiQXJyYXlUYWJsZS9Sb3dNYXAiLDgyOSksRCgxMTIwLDEsTmgsR0h0KSxsLnFkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5xZCgpJi0yNjJ9LGwucmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLnJkKCl9LGwuTmI9ZnVuY3Rpb24oZSl7dGhpcy5hLk5iKG5ldyAkSHQoZSx0aGlzLmIpKX0sbC5zZD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLnNkKG5ldyBqSHQoZSx0aGlzLmIpKX0sTihZZSwiQ29sbGVjdFNwbGl0ZXJhdG9ycy8xIiwxMTIwKSxEKDExMjEsMSxLbixqSHQpLGwudGQ9ZnVuY3Rpb24oZSl7dGhpcy5hLnRkKHRoaXMuYi5LYihlKSl9LE4oWWUsIkNvbGxlY3RTcGxpdGVyYXRvcnMvMS9sYW1iZGEkMCRUeXBlIiwxMTIxKSxEKDExMjIsMSxLbiwkSHQpLGwudGQ9ZnVuY3Rpb24oZSl7dGhpcy5hLnRkKHRoaXMuYi5LYihlKSl9LE4oWWUsIkNvbGxlY3RTcGxpdGVyYXRvcnMvMS9sYW1iZGEkMSRUeXBlIiwxMTIyKSxEKDExMjMsMSxOaCxiWnQpLGwucWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLnJkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZCYmKHRoaXMuYj15VXQodGhpcy5iLHRoaXMuZC5yZCgpKSkseVV0KHRoaXMuYiwwKX0sbC5OYj1mdW5jdGlvbihlKXt0aGlzLmQmJih0aGlzLmQuTmIoZSksdGhpcy5kPW51bGwpLHRoaXMuYy5OYihuZXcgUkh0KHRoaXMuZSxlKSksdGhpcy5iPTB9LGwuc2Q9ZnVuY3Rpb24oZSl7Zm9yKDs7KXtpZih0aGlzLmQmJnRoaXMuZC5zZChlKSlyZXR1cm4gYV8odGhpcy5iLERxKSYmKHRoaXMuYj1RcCh0aGlzLmIsMSkpLCEwO2lmKHRoaXMuZD1udWxsLCF0aGlzLmMuc2QobmV3IHpIdCh0aGlzLHRoaXMuZSkpKXJldHVybiExfX0sbC5hPTAsbC5iPTAsTihZZSwiQ29sbGVjdFNwbGl0ZXJhdG9ycy8xRmxhdE1hcFNwbGl0ZXJhdG9yIiwxMTIzKSxEKDExMjQsMSxLbix6SHQpLGwudGQ9ZnVuY3Rpb24oZSl7VVFlKHRoaXMuYSx0aGlzLmIsZSl9LE4oWWUsIkNvbGxlY3RTcGxpdGVyYXRvcnMvMUZsYXRNYXBTcGxpdGVyYXRvci9sYW1iZGEkMCRUeXBlIiwxMTI0KSxEKDExMjUsMSxLbixSSHQpLGwudGQ9ZnVuY3Rpb24oZSl7TVhlKHRoaXMuYix0aGlzLmEsZSl9LE4oWWUsIkNvbGxlY3RTcGxpdGVyYXRvcnMvMUZsYXRNYXBTcGxpdGVyYXRvci9sYW1iZGEkMSRUeXBlIiwxMTI1KSxEKDExMTcsMSxOaCxaV3QpLGwucWQ9ZnVuY3Rpb24oKXtyZXR1cm4gMTY0NjR8dGhpcy5ifSxsLnJkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5yZCgpfSxsLk5iPWZ1bmN0aW9uKGUpe3RoaXMuYS54ZShuZXcgSEh0KGUsdGhpcy5jKSl9LGwuc2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYS55ZShuZXcgcUh0KGUsdGhpcy5jKSl9LGwuYj0wLE4oWWUsIkNvbGxlY3RTcGxpdGVyYXRvcnMvMVdpdGhDaGFyYWN0ZXJpc3RpY3MiLDExMTcpLEQoMTExOCwxLEFJLHFIdCksbC51ZD1mdW5jdGlvbihlKXt0aGlzLmEudGQodGhpcy5iLmxkKGUpKX0sTihZZSwiQ29sbGVjdFNwbGl0ZXJhdG9ycy8xV2l0aENoYXJhY3RlcmlzdGljcy9sYW1iZGEkMCRUeXBlIiwxMTE4KSxEKDExMTksMSxBSSxISHQpLGwudWQ9ZnVuY3Rpb24oZSl7dGhpcy5hLnRkKHRoaXMuYi5sZChlKSl9LE4oWWUsIkNvbGxlY3RTcGxpdGVyYXRvcnMvMVdpdGhDaGFyYWN0ZXJpc3RpY3MvbGFtYmRhJDEkVHlwZSIsMTExOSksRCgyNDUsMSxCYXQpLGwud2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudmQodShlLDI0NSkpfSxsLnZkPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBlPT0oWnR0KCksd3V0KT8xOmU9PShKdHQoKSx2dXQpPy0xOihuPShNaigpLFNEKHRoaXMuYSxlLmEpKSxuIT0wP246X3QodGhpcyw1MTkpPT1fdChlLDUxOSk/MDpfdCh0aGlzLDUxOSk/MTotMSl9LGwuemQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB4M3QodGhpcyxlKX0sTihZZSwiQ3V0IiwyNDUpLEQoMTc2MSwyNDUsQmF0LEtxdCksbC52ZD1mdW5jdGlvbihlKXtyZXR1cm4gZT09dGhpcz8wOjF9LGwueGQ9ZnVuY3Rpb24oZSl7dGhyb3cgbnQobmV3IHlwdCl9LGwueWQ9ZnVuY3Rpb24oZSl7ZS5hKz0iK+KInikifSxsLnpkPWZ1bmN0aW9uKCl7dGhyb3cgbnQobmV3IEhvKEtoZSkpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHFkKCksTTN0KHRoaXMpfSxsLkFkPWZ1bmN0aW9uKGUpe3JldHVybiExfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIiviiJ4ifTt2YXIgdnV0O04oWWUsIkN1dC9BYm92ZUFsbCIsMTc2MSksRCg1MTksMjQ1LHsyNDU6MSw1MTk6MSwzOjEsMzU6MX0sVVV0KSxsLnhkPWZ1bmN0aW9uKGUpe3djKChlLmErPSIoIixlKSx0aGlzLmEpfSxsLnlkPWZ1bmN0aW9uKGUpeyRwKHdjKGUsdGhpcy5hKSw5Myl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm5+SmkodGhpcy5hKX0sbC5BZD1mdW5jdGlvbihlKXtyZXR1cm4gTWooKSxTRCh0aGlzLmEsZSk8MH0sbC5JYj1mdW5jdGlvbigpe3JldHVybiIvIit0aGlzLmErIlxcIn0sTihZZSwiQ3V0L0Fib3ZlVmFsdWUiLDUxOSksRCgxNzYwLDI0NSxCYXQsWXF0KSxsLnZkPWZ1bmN0aW9uKGUpe3JldHVybiBlPT10aGlzPzA6LTF9LGwueGQ9ZnVuY3Rpb24oZSl7ZS5hKz0iKC3iiJ4ifSxsLnlkPWZ1bmN0aW9uKGUpe3Rocm93IG50KG5ldyB5cHQpfSxsLnpkPWZ1bmN0aW9uKCl7dGhyb3cgbnQobmV3IEhvKEtoZSkpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHFkKCksTTN0KHRoaXMpfSxsLkFkPWZ1bmN0aW9uKGUpe3JldHVybiEwfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIi3iiJ4ifTt2YXIgd3V0O04oWWUsIkN1dC9CZWxvd0FsbCIsMTc2MCksRCgxNzYyLDI0NSxCYXQsV1V0KSxsLnhkPWZ1bmN0aW9uKGUpe3djKChlLmErPSJbIixlKSx0aGlzLmEpfSxsLnlkPWZ1bmN0aW9uKGUpeyRwKHdjKGUsdGhpcy5hKSw0MSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gSmkodGhpcy5hKX0sbC5BZD1mdW5jdGlvbihlKXtyZXR1cm4gTWooKSxTRCh0aGlzLmEsZSk8PTB9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iXFwiK3RoaXMuYSsiLyJ9LE4oWWUsIkN1dC9CZWxvd1ZhbHVlIiwxNzYyKSxEKDUzNywxLHQwKSxsLkpjPWZ1bmN0aW9uKGUpe19hKHRoaXMsZSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gZWxuKHUociQodGhpcywidXNlIE9wdGlvbmFsLm9yTnVsbCgpIGluc3RlYWQgb2YgT3B0aW9uYWwub3IobnVsbCkiKSwyMCkuS2MoKSl9LE4oWWUsIkZsdWVudEl0ZXJhYmxlIiw1MzcpLEQoNDMzLDUzNyx0MCx1XyksbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgYXIobHIodGhpcy5hLktjKCksbmV3IEgpKX0sTihZZSwiRmx1ZW50SXRlcmFibGUvMiIsNDMzKSxEKDEwNDYsNTM3LHQwLFFHdCksbC5LYz1mdW5jdGlvbigpe3JldHVybiBqcCh0aGlzKX0sTihZZSwiRmx1ZW50SXRlcmFibGUvMyIsMTA0NiksRCg3MDgsMzg2LEM3LHAydCksbC5YYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hW2VdLktjKCl9LE4oWWUsIkZsdWVudEl0ZXJhYmxlLzMvMSIsNzA4KSxEKDE5NzIsMSx7fSksbC5JYj1mdW5jdGlvbigpe3JldHVybiBXbyh0aGlzLkJkKCkuYil9LE4oWWUsIkZvcndhcmRpbmdPYmplY3QiLDE5NzIpLEQoMTk3MywxOTcyLFloZSksbC5CZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLkNkKCl9LGwuSmM9ZnVuY3Rpb24oZSl7X2EodGhpcyxlKX0sbC5MYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLk9jKCl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFRuKHRoaXMsMCl9LGwuT2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGtuKG51bGwsdGhpcy5OYygpKX0sbC5GYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5DZCgpLGdIdCgpfSxsLkdjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLkNkKCkscEh0KCl9LGwuJGI9ZnVuY3Rpb24oKXt0aGlzLkNkKCksYkh0KCl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuQ2QoKS5IYyhlKX0sbC5JYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5DZCgpLkljKGUpfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuQ2QoKS5iLmRjKCl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5DZCgpLktjKCl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuQ2QoKSx2SHQoKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkNkKCkuYi5nYygpfSxsLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuQ2QoKS5QYygpfSxsLlFjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLkNkKCkuUWMoZSl9LE4oWWUsIkZvcndhcmRpbmdDb2xsZWN0aW9uIiwxOTczKSxEKDE5ODAsMjgsQTZ0KSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuRWQoKX0sbC5GYz1mdW5jdGlvbihlKXt0aHJvdyBudChuZXcgUHIpfSxsLkdjPWZ1bmN0aW9uKGUpe3Rocm93IG50KG5ldyBQcil9LGwuJGI9ZnVuY3Rpb24oKXt0aHJvdyBudChuZXcgUHIpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBlIT1udWxsJiZyeSh0aGlzLGUsITEpfSxsLkRkPWZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZ2MoKSl7Y2FzZSAwOnJldHVybiBWbSgpLFZtKCksbXV0O2Nhc2UgMTpyZXR1cm4gVm0oKSxuZXcgTG50KERyKHRoaXMuRWQoKS5QYigpKSk7ZGVmYXVsdDpyZXR1cm4gbmV3IE5ZdCh0aGlzLHRoaXMuUGMoKSl9fSxsLk1jPWZ1bmN0aW9uKGUpe3Rocm93IG50KG5ldyBQcil9LE4oWWUsIkltbXV0YWJsZUNvbGxlY3Rpb24iLDE5ODApLEQoNzEyLDE5ODAsQTZ0LHdwdCksbC5LYz1mdW5jdGlvbigpe3JldHVybiBXNih0aGlzLmEuS2MoKSl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUhPW51bGwmJnRoaXMuYS5IYyhlKX0sbC5JYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLkljKGUpfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5kYygpfSxsLkVkPWZ1bmN0aW9uKCl7cmV0dXJuIFc2KHRoaXMuYS5LYygpKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ2MoKX0sbC5QYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuUGMoKX0sbC5RYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLlFjKGUpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIFdvKHRoaXMuYSl9LE4oWWUsIkZvcndhcmRpbmdJbW11dGFibGVDb2xsZWN0aW9uIiw3MTIpLEQoMTUyLDE5ODAsU0MpLGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5FZCgpfSxsLlljPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuRmQoMCl9LGwuWmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuRmQoZSl9LGwuYWQ9ZnVuY3Rpb24oZSl7bjQodGhpcyxlKX0sbC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcgVG4odGhpcywxNil9LGwuYmQ9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdGhpcy5HZChlLG4pfSxsLlZjPWZ1bmN0aW9uKGUsbil7dGhyb3cgbnQobmV3IFByKX0sbC5XYz1mdW5jdGlvbihlLG4pe3Rocm93IG50KG5ldyBQcil9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIFhwbih0aGlzLGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIG9jbih0aGlzKX0sbC5YYz1mdW5jdGlvbihlKXtyZXR1cm4gZT09bnVsbD8tMTp5Zm4odGhpcyxlKX0sbC5FZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLkZkKDApfSxsLkZkPWZ1bmN0aW9uKGUpe3JldHVybiBNMnQodGhpcyxlKX0sbC4kYz1mdW5jdGlvbihlKXt0aHJvdyBudChuZXcgUHIpfSxsLl9jPWZ1bmN0aW9uKGUsbil7dGhyb3cgbnQobmV3IFByKX0sbC5HZD1mdW5jdGlvbihlLG4pe3ZhciByO3JldHVybiB5eigocj1uZXcgblZ0KHRoaXMpLG5ldyBLZChyLGUsbikpKX07dmFyIG11dDtOKFllLCJJbW11dGFibGVMaXN0IiwxNTIpLEQoMjAwNiwxNTIsU0MpLGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gVzYodGhpcy5IZCgpLktjKCkpfSxsLmJkPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHl6KHRoaXMuSGQoKS5iZChlLG4pKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gZSE9bnVsbCYmdGhpcy5IZCgpLkhjKGUpfSxsLkljPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLkhkKCkuSWMoZSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIFNpKHRoaXMuSGQoKSxlKX0sbC5YYj1mdW5jdGlvbihlKXtyZXR1cm4gTnAodGhpcyxlKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBKaSh0aGlzLkhkKCkpfSxsLlhjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLkhkKCkuWGMoZSl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5IZCgpLmRjKCl9LGwuRWQ9ZnVuY3Rpb24oKXtyZXR1cm4gVzYodGhpcy5IZCgpLktjKCkpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuSGQoKS5nYygpfSxsLkdkPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHl6KHRoaXMuSGQoKS5iZChlLG4pKX0sbC5QYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkhkKCkuUWMoTnQoUW4sTWUsMSx0aGlzLkhkKCkuZ2MoKSw1LDEpKX0sbC5RYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5IZCgpLlFjKGUpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIFdvKHRoaXMuSGQoKSl9LE4oWWUsIkZvcndhcmRpbmdJbW11dGFibGVMaXN0IiwyMDA2KSxEKDcxNCwxLFM3KSxsLnZjPWZ1bmN0aW9uKCl7cmV0dXJuIFB2KHRoaXMpfSxsLndjPWZ1bmN0aW9uKGUpe1VfKHRoaXMsZSl9LGwuZWM9ZnVuY3Rpb24oKXtyZXR1cm4gRm50KHRoaXMpfSxsLnljPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gcWl0KHRoaXMsZSxuLHIpfSxsLkNjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuTGQoKX0sbC4kYj1mdW5jdGlvbigpe3Rocm93IG50KG5ldyBQcil9LGwuX2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMueGMoZSkhPW51bGx9LGwudWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuTGQoKS5IYyhlKX0sbC5KZD1mdW5jdGlvbigpe3JldHVybiBuZXcganp0KHRoaXMpfSxsLktkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyAkenQodGhpcyl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIEpjbih0aGlzLGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIFB2KHRoaXMpLkhiKCl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nYygpPT0wfSxsLnpjPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEFLZSgpfSxsLkJjPWZ1bmN0aW9uKGUpe3Rocm93IG50KG5ldyBQcil9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gRDBuKHRoaXMpfSxsLkxkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZT90aGlzLmU6dGhpcy5lPXRoaXMuS2QoKX0sbC5jPW51bGwsbC5kPW51bGwsbC5lPW51bGw7dmFyIHVnZTtOKFllLCJJbW11dGFibGVNYXAiLDcxNCksRCg3MTUsNzE0LFM3KSxsLl9iPWZ1bmN0aW9uKGUpe3JldHVybiBsSHQodGhpcyxlKX0sbC51Yz1mdW5jdGlvbihlKXtyZXR1cm4gYVZ0KHRoaXMuYixlKX0sbC5JZD1mdW5jdGlvbigpe3JldHVybiBQcmUobmV3IG1UKHRoaXMpKX0sbC5KZD1mdW5jdGlvbigpe3JldHVybiBQcmUoZ1h0KHRoaXMuYikpfSxsLktkPWZ1bmN0aW9uKCl7cmV0dXJuIGZkKCksbmV3IHdwdChkWHQodGhpcy5iKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIG9WdCh0aGlzLmIsZSl9LGwueGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHdfKHRoaXMsZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gSmkodGhpcy5iLmMpfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5jLmRjKCl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLmMuZ2MoKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBXbyh0aGlzLmIuYyl9LE4oWWUsIkZvcndhcmRpbmdJbW11dGFibGVNYXAiLDcxNSksRCgxOTc0LDE5NzMsUmF0KSxsLkJkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuTWQoKX0sbC5DZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLk1kKCl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFRuKHRoaXMsMSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10aGlzfHx0aGlzLk1kKCkuRmIoZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5NZCgpLkhiKCl9LE4oWWUsIkZvcndhcmRpbmdTZXQiLDE5NzQpLEQoMTA2OSwxOTc0LFJhdCxtVCksbC5CZD1mdW5jdGlvbigpe3JldHVybiBtOCh0aGlzLmEuYil9LGwuQ2Q9ZnVuY3Rpb24oKXtyZXR1cm4gbTgodGhpcy5hLmIpfSxsLkhjPWZ1bmN0aW9uKGUpe2lmKF90KGUsNDIpJiZ1KGUsNDIpLmNkKCk9PW51bGwpcmV0dXJuITE7dHJ5e3JldHVybiBzVnQobTgodGhpcy5hLmIpLGUpfWNhdGNoKG4pe2lmKG49cnMobiksX3QobiwyMDUpKXJldHVybiExO3Rocm93IG50KG4pfX0sbC5NZD1mdW5jdGlvbigpe3JldHVybiBtOCh0aGlzLmEuYil9LGwuUWM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49WVh0KG04KHRoaXMuYS5iKSxlKSxtOCh0aGlzLmEuYikuYi5nYygpPG4ubGVuZ3RoJiZscyhuLG04KHRoaXMuYS5iKS5iLmdjKCksbnVsbCksbn0sTihZZSwiRm9yd2FyZGluZ0ltbXV0YWJsZU1hcC8xIiwxMDY5KSxEKDE5ODEsMTk4MCxBNyksbC5LYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkVkKCl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFRuKHRoaXMsMSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIE80dCh0aGlzLGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHJuZSh0aGlzKX0sTihZZSwiSW1tdXRhYmxlU2V0IiwxOTgxKSxEKDcwMywxOTgxLEE3KSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIFc2KG5ldyBMKHRoaXMuYS5iLktjKCkpKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gZSE9bnVsbCYmcE0odGhpcy5hLGUpfSxsLkljPWZ1bmN0aW9uKGUpe3JldHVybiByVnQodGhpcy5hLGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEppKHRoaXMuYS5iKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuYi5kYygpfSxsLkVkPWZ1bmN0aW9uKCl7cmV0dXJuIFc2KG5ldyBMKHRoaXMuYS5iLktjKCkpKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuYi5nYygpfSxsLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5iLlBjKCl9LGwuUWM9ZnVuY3Rpb24oZSl7cmV0dXJuIGlWdCh0aGlzLmEsZSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gV28odGhpcy5hLmIpfSxOKFllLCJGb3J3YXJkaW5nSW1tdXRhYmxlU2V0Iiw3MDMpLEQoMTk3NSwxOTc0LFhoZSksbC5CZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuQ2Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxsLk1kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcgRlIodGhpcyl9LE4oWWUsIkZvcndhcmRpbmdTb3J0ZWRTZXQiLDE5NzUpLEQoNTMzLDE5NzksUzcsSHopLGwuQWM9ZnVuY3Rpb24oZSl7R18odGhpcyxlKX0sbC5DYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuZCxuZXcgSmV0KGV8fCh0aGlzLmQ9bmV3IG82KHRoaXMpKSl9LGwuJGI9ZnVuY3Rpb24oKXtjRCh0aGlzKX0sbC5fYj1mdW5jdGlvbihlKXtyZXR1cm4hIUhfKHRoaXMsZSxNcihJYShlMCxXZChNcihJYShlPT1udWxsPzA6SmkoZSksbjApKSwxNSkpKSl9LGwudWM9ZnVuY3Rpb24oZSl7cmV0dXJuIGRlZSh0aGlzLGUpfSxsLmtjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBxVXQodGhpcyx0aGlzKX0sbC53Yz1mdW5jdGlvbihlKXthUXQodGhpcyxlKX0sbC54Yz1mdW5jdGlvbihlKXtyZXR1cm4gZTQodGhpcyxlKX0sbC5lYz1mdW5jdGlvbigpe3JldHVybiBuZXcgdG50KHRoaXMpfSxsLnpjPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHZxKHRoaXMsZSxuKX0sbC5CYz1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbj1IXyh0aGlzLGUsTXIoSWEoZTAsV2QoTXIoSWEoZT09bnVsbD8wOkppKGUpLG4wKSksMTUpKSkpLG4/KHc0KHRoaXMsbiksbi5lPW51bGwsbi5jPW51bGwsbi5pKTpudWxsfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaX0sbC5wZD1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuZCxuZXcgSmV0KGV8fCh0aGlzLmQ9bmV3IG82KHRoaXMpKSl9LGwuZj0wLGwuZz0wLGwuaT0wLE4oWWUsIkhhc2hCaU1hcCIsNTMzKSxEKDUzNCwxLGRhKSxsLk5iPWZ1bmN0aW9uKGUpe0VhKHRoaXMsZSl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gX1p0KHRoaXMpfSxsLlBiPWZ1bmN0aW9uKCl7dmFyIGU7aWYoIV9adCh0aGlzKSl0aHJvdyBudChuZXcgdmMpO3JldHVybiBlPXRoaXMuYyx0aGlzLmM9ZS5jLHRoaXMuZj1lLC0tdGhpcy5kLHRoaXMuTmQoZSl9LGwuUWI9ZnVuY3Rpb24oKXtpZih0aGlzLmUuZyE9dGhpcy5iKXRocm93IG50KG5ldyBzaCk7cjQoISF0aGlzLmYpLHc0KHRoaXMuZSx0aGlzLmYpLHRoaXMuYj10aGlzLmUuZyx0aGlzLmY9bnVsbH0sbC5iPTAsbC5kPTAsbC5mPW51bGwsTihZZSwiSGFzaEJpTWFwL0l0ciIsNTM0KSxEKDEwMTEsNTM0LGRhLHFVdCksbC5OZD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IEtIdCh0aGlzLGUpfSxOKFllLCJIYXNoQmlNYXAvMSIsMTAxMSksRCgxMDEyLDM0NSxNcSxLSHQpLGwuY2Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmd9LGwuZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLml9LGwuZWQ9ZnVuY3Rpb24oZSl7dmFyIG4scixzO3JldHVybiByPXRoaXMuYS5pLHM9TXIoSWEoZTAsV2QoTXIoSWEoZT09bnVsbD8wOkppKGUpLG4wKSksMTUpKSkscz09dGhpcy5hLmYmJihHdChlKT09PUd0KHIpfHxlIT1udWxsJiZTaShlLHIpKT9lOihSbmUoIVZfKHRoaXMuYi5hLGUscyksZSksdzQodGhpcy5iLmEsdGhpcy5hKSxuPW5ldyBYaih0aGlzLmEuZyx0aGlzLmEuYSxlLHMpLG9JKHRoaXMuYi5hLG4sdGhpcy5hKSx0aGlzLmEuZT1udWxsLHRoaXMuYS5jPW51bGwsdGhpcy5iLmI9dGhpcy5iLmEuZyx0aGlzLmIuZj09dGhpcy5hJiYodGhpcy5iLmY9biksdGhpcy5hPW4scil9LE4oWWUsIkhhc2hCaU1hcC8xL01hcEVudHJ5IiwxMDEyKSxEKDIzOCwzNDUsezM0NToxLDIzODoxLDM6MSw0MjoxfSxDdiksbC5jZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmd9LGwuZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pfSxsLmVkPWZ1bmN0aW9uKGUpe3Rocm93IG50KG5ldyBQcil9LE4oWWUsIkltbXV0YWJsZUVudHJ5IiwyMzgpLEQoMzE3LDIzOCx7MzQ1OjEsMzE3OjEsMjM4OjEsMzoxLDQyOjF9LFhqKSxsLmE9MCxsLmY9MDt2YXIgeXV0PU4oWWUsIkhhc2hCaU1hcC9CaUVudHJ5IiwzMTcpO0QoNjEwLDE5NzksUzcsbzYpLGwuQWM9ZnVuY3Rpb24oZSl7R18odGhpcyxlKX0sbC5DYz1mdW5jdGlvbigpe3JldHVybiBuZXcgdG50KHRoaXMuYSl9LGwuJGI9ZnVuY3Rpb24oKXtjRCh0aGlzLmEpfSxsLl9iPWZ1bmN0aW9uKGUpe3JldHVybiBkZWUodGhpcy5hLGUpfSxsLmtjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBIVXQodGhpcyx0aGlzLmEpfSxsLndjPWZ1bmN0aW9uKGUpe0RyKGUpLGFRdCh0aGlzLmEsbmV3IEpMKGUpKX0sbC54Yz1mdW5jdGlvbihlKXtyZXR1cm4gdHoodGhpcyxlKX0sbC5lYz1mdW5jdGlvbigpe3JldHVybiBuZXcgSmV0KHRoaXMpfSxsLnpjPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGVtbih0aGlzLmEsZSxuLCExKX0sbC5CYz1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbj1WXyh0aGlzLmEsZSxNcihJYShlMCxXZChNcihJYShlPT1udWxsPzA6SmkoZSksbjApKSwxNSkpKSksbj8odzQodGhpcy5hLG4pLG4uZT1udWxsLG4uYz1udWxsLG4uZyk6bnVsbH0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuaX0sbC5wZD1mdW5jdGlvbigpe3JldHVybiBuZXcgdG50KHRoaXMuYSl9LE4oWWUsIkhhc2hCaU1hcC9JbnZlcnNlIiw2MTApLEQoMTAwOCw1MzQsZGEsSFV0KSxsLk5kPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgWUh0KHRoaXMsZSl9LE4oWWUsIkhhc2hCaU1hcC9JbnZlcnNlLzEiLDEwMDgpLEQoMTAwOSwzNDUsTXEsWUh0KSxsLmNkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5pfSxsLmRkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nfSxsLmVkPWZ1bmN0aW9uKGUpe3ZhciBuLHIscztyZXR1cm4gcz10aGlzLmEuZyxuPU1yKElhKGUwLFdkKE1yKElhKGU9PW51bGw/MDpKaShlKSxuMCkpLDE1KSkpLG49PXRoaXMuYS5hJiYoR3QoZSk9PT1HdChzKXx8ZSE9bnVsbCYmU2koZSxzKSk/ZTooUm5lKCFIXyh0aGlzLmIuYS5hLGUsbiksZSksdzQodGhpcy5iLmEuYSx0aGlzLmEpLHI9bmV3IFhqKGUsbix0aGlzLmEuaSx0aGlzLmEuZiksdGhpcy5hPXIsb0kodGhpcy5iLmEuYSxyLG51bGwpLHRoaXMuYi5iPXRoaXMuYi5hLmEuZyxzKX0sTihZZSwiSGFzaEJpTWFwL0ludmVyc2UvMS9JbnZlcnNlRW50cnkiLDEwMDkpLEQoNjExLDUzMixVdSxKZXQpLGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IElxdCh0aGlzLmEuYSl9LGwuTWM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49Vl8odGhpcy5hLmEsZSxNcihJYShlMCxXZChNcihJYShlPT1udWxsPzA6SmkoZSksbjApKSwxNSkpKSksbj8odzQodGhpcy5hLmEsbiksITApOiExfSxOKFllLCJIYXNoQmlNYXAvSW52ZXJzZS9JbnZlcnNlS2V5U2V0Iiw2MTEpLEQoMTAwNyw1MzQsZGEsSXF0KSxsLk5kPWZ1bmN0aW9uKGUpe3JldHVybiBlLml9LE4oWWUsIkhhc2hCaU1hcC9JbnZlcnNlL0ludmVyc2VLZXlTZXQvMSIsMTAwNyksRCgxMDEwLDEse30sSkwpLGwuT2Q9ZnVuY3Rpb24oZSxuKXthS2UodGhpcy5hLGUsbil9LE4oWWUsIkhhc2hCaU1hcC9JbnZlcnNlL2xhbWJkYSQwJFR5cGUiLDEwMTApLEQoNjA5LDUzMixVdSx0bnQpLGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE9xdCh0aGlzLmEpfSxsLk1jPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPUhfKHRoaXMuYSxlLE1yKElhKGUwLFdkKE1yKElhKGU9PW51bGw/MDpKaShlKSxuMCkpLDE1KSkpKSxuPyh3NCh0aGlzLmEsbiksbi5lPW51bGwsbi5jPW51bGwsITApOiExfSxOKFllLCJIYXNoQmlNYXAvS2V5U2V0Iiw2MDkpLEQoMTAwNiw1MzQsZGEsT3F0KSxsLk5kPWZ1bmN0aW9uKGUpe3JldHVybiBlLmd9LE4oWWUsIkhhc2hCaU1hcC9LZXlTZXQvMSIsMTAwNiksRCgxMDkzLDYxOSxrMiksTihZZSwiSGFzaE11bHRpbWFwR3d0U2VyaWFsaXphdGlvbkRlcGVuZGVuY2llcyIsMTA5MyksRCgyNjUsMTA5MyxrMixIdiksbC5oYz1mdW5jdGlvbigpe3JldHVybiBuZXcgeFIoUW0odGhpcy5hKSl9LGwuZ2Q9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHhSKFFtKHRoaXMuYSkpfSxsLmE9MixOKFllLCJIYXNoTXVsdGltYXAiLDI2NSksRCgxOTk5LDE1MixTQyksbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5QZCgpLkhjKGUpfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuUGQoKS5kYygpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuUGQoKS5nYygpfSxOKFllLCJJbW11dGFibGVBc0xpc3QiLDE5OTkpLEQoMTkzMSw3MTUsUzcpLGwuTGQ9ZnVuY3Rpb24oKXtyZXR1cm4gZmQoKSxuZXcgeTYodGhpcy5hKX0sbC5DYz1mdW5jdGlvbigpe3JldHVybiBmZCgpLG5ldyB5Nih0aGlzLmEpfSxsLnBkPWZ1bmN0aW9uKCl7cmV0dXJuIGZkKCksbmV3IHk2KHRoaXMuYSl9LE4oWWUsIkltbXV0YWJsZUJpTWFwIiwxOTMxKSxEKDE5NzcsMSx7fSksTihZZSwiSW1tdXRhYmxlQ29sbGVjdGlvbi9CdWlsZGVyIiwxOTc3KSxEKDEwMjIsNzAzLEE3LE5xdCksTihZZSwiSW1tdXRhYmxlRW51bVNldCIsMTAyMiksRCg5NjksMzg2LEM3LFFXdCksbC5YYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLlhiKGUpfSxOKFllLCJJbW11dGFibGVMaXN0LzEiLDk2OSksRCg5NjgsMTk3Nyx7fSxEV3QpLE4oWWUsIkltbXV0YWJsZUxpc3QvQnVpbGRlciIsOTY4KSxEKDYxNCwxOTgsXzcsdE0pLGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLk9iKCl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gdSh0aGlzLmEuUGIoKSw0MikuY2QoKX0sTihZZSwiSW1tdXRhYmxlTWFwLzEiLDYxNCksRCgxMDQxLDEse30saiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDQyKS5jZCgpfSxOKFllLCJJbW11dGFibGVNYXAvMm1ldGhvZHJlZiRnZXRLZXkkVHlwZSIsMTA0MSksRCgxMDQwLDEse30sSVd0KSxOKFllLCJJbW11dGFibGVNYXAvQnVpbGRlciIsMTA0MCksRCgyZTMsMTk4MSxBNyksbC5LYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPVB2KHRoaXMuYSkuRWQoKSxuZXcgdE0oZSl9LGwuRGQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG1wdCh0aGlzKX0sbC5KYz1mdW5jdGlvbihlKXt2YXIgbixyO2ZvcihEcihlKSxyPXRoaXMuZ2MoKSxuPTA7bjxyO24rKyllLnRkKHUoWnZ0KFB2KHRoaXMuYSkpLlhiKG4pLDQyKS5jZCgpKX0sbC5FZD1mdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXRoaXMuYyxlfHwodGhpcy5jPW5ldyBtcHQodGhpcykpKS5FZCgpfSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIEFudCh0aGlzLmdjKCksMTI5NixuZXcgYXR0KHRoaXMpKX0sTihZZSwiSW5kZXhlZEltbXV0YWJsZVNldCIsMmUzKSxEKDExODAsMmUzLEE3LGp6dCksbC5LYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPVB2KHRoaXMuYSkuRWQoKSxuZXcgdE0oZSl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYS5fYihlKX0sbC5KYz1mdW5jdGlvbihlKXtEcihlKSxVXyh0aGlzLmEsbmV3IHN0dChlKSl9LGwuRWQ9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1Qdih0aGlzLmEpLkVkKCksbmV3IHRNKGUpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nYygpfSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIEdNKFB2KHRoaXMuYSkuTmMoKSxuZXcgail9LE4oWWUsIkltbXV0YWJsZU1hcEtleVNldCIsMTE4MCksRCgxMTgxLDEse30sc3R0KSxsLk9kPWZ1bmN0aW9uKGUsbil7ZmQoKSx0aGlzLmEudGQoZSl9LE4oWWUsIkltbXV0YWJsZU1hcEtleVNldC9sYW1iZGEkMCRUeXBlIiwxMTgxKSxEKDExNzgsMTk4MCxBNnQsJHp0KSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBfbnQodGhpcyl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUhPW51bGwmJnExbihuZXcgX250KHRoaXMpLGUpfSxsLkVkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBfbnQodGhpcyl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmdjKCl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gR00oUHYodGhpcy5hKS5OYygpLG5ldyBSKX0sTihZZSwiSW1tdXRhYmxlTWFwVmFsdWVzIiwxMTc4KSxEKDExNzksMSx7fSxSKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsNDIpLmRkKCl9LE4oWWUsIkltbXV0YWJsZU1hcFZhbHVlcy8wbWV0aG9kcmVmJGdldFZhbHVlJFR5cGUiLDExNzkpLEQoNjI2LDE5OCxfNyxfbnQpLGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLk9iKCl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gdSh0aGlzLmEuUGIoKSw0MikuZGQoKX0sTihZZSwiSW1tdXRhYmxlTWFwVmFsdWVzLzEiLDYyNiksRCgxMTgyLDEse30sYXR0KSxsLmxkPWZ1bmN0aW9uKGUpe3JldHVybiBGWXQodGhpcy5hLGUpfSxOKFllLCJJbmRleGVkSW1tdXRhYmxlU2V0LzBtZXRob2RyZWYkZ2V0JFR5cGUiLDExODIpLEQoNzUyLDE5OTksU0MsbXB0KSxsLlBkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5YYj1mdW5jdGlvbihlKXtyZXR1cm4gRll0KHRoaXMuYSxlKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuYS5nYygpfSxOKFllLCJJbmRleGVkSW1tdXRhYmxlU2V0LzEiLDc1MiksRCg0NCwxLHt9LEgpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwyMCkuS2MoKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LE4oWWUsIkl0ZXJhYmxlcy8xMCIsNDQpLEQoMTA0Miw1MzcsdDAsQkt0KSxsLkpjPWZ1bmN0aW9uKGUpe0RyKGUpLHRoaXMuYi5KYyhuZXcgWEh0KHRoaXMuYSxlKSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gZTJ0KHRoaXMpfSxOKFllLCJJdGVyYWJsZXMvNCIsMTA0MiksRCgxMDQzLDEsS24sWEh0KSxsLnRkPWZ1bmN0aW9uKGUpe1NZZSh0aGlzLmIsdGhpcy5hLGUpfSxOKFllLCJJdGVyYWJsZXMvNC9sYW1iZGEkMCRUeXBlIiwxMDQzKSxEKDEwNDQsNTM3LHQwLFJLdCksbC5KYz1mdW5jdGlvbihlKXtEcihlKSxfYSh0aGlzLmEsbmV3IFVIdChlLHRoaXMuYikpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIGxyKG5ldyBucih0aGlzLmEpLHRoaXMuYil9LE4oWWUsIkl0ZXJhYmxlcy81IiwxMDQ0KSxEKDEwNDUsMSxLbixVSHQpLGwudGQ9ZnVuY3Rpb24oZSl7dGhpcy5hLnRkKGNVdChlKSl9LE4oWWUsIkl0ZXJhYmxlcy81L2xhbWJkYSQwJFR5cGUiLDEwNDUpLEQoMTA3MSwxOTgsXzcsb3R0KSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5PYigpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5QYigpfSxOKFllLCJJdGVyYXRvcnMvMSIsMTA3MSksRCgxMDcyLDY5OSxfNyxXSHQpLGwuWWI9ZnVuY3Rpb24oKXtmb3IodmFyIGU7dGhpcy5iLk9iKCk7KWlmKGU9dGhpcy5iLlBiKCksdGhpcy5hLkxiKGUpKXJldHVybiBlO3JldHVybiB0aGlzLmU9MixudWxsfSxOKFllLCJJdGVyYXRvcnMvNSIsMTA3MiksRCg0ODcsMSxkYSksbC5OYj1mdW5jdGlvbihlKXtFYSh0aGlzLGUpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5PYigpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuUWQodGhpcy5iLlBiKCkpfSxsLlFiPWZ1bmN0aW9uKCl7dGhpcy5iLlFiKCl9LE4oWWUsIlRyYW5zZm9ybWVkSXRlcmF0b3IiLDQ4NyksRCgxMDczLDQ4NyxkYSxWVXQpLGwuUWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYS5LYihlKX0sTihZZSwiSXRlcmF0b3JzLzYiLDEwNzMpLEQoNzE3LDE5OCxfNyxVQiksbC5PYj1mdW5jdGlvbigpe3JldHVybiF0aGlzLmF9LGwuUGI9ZnVuY3Rpb24oKXtpZih0aGlzLmEpdGhyb3cgbnQobmV3IHZjKTtyZXR1cm4gdGhpcy5hPSEwLHRoaXMuYn0sbC5hPSExLE4oWWUsIkl0ZXJhdG9ycy85Iiw3MTcpLEQoMTA3MCwzODYsQzcsb1l0KSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmFbdGhpcy5iK2VdfSxsLmI9MDt2YXIgbGdlO04oWWUsIkl0ZXJhdG9ycy9BcnJheUl0ciIsMTA3MCksRCgzOSwxLHszOToxLDQ3OjF9LGFyKSxsLk5iPWZ1bmN0aW9uKGUpe0VhKHRoaXMsZSl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gVnIodGhpcyl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gSXIodGhpcyl9LGwuUWI9ZnVuY3Rpb24oKXtyNCghIXRoaXMuYyksdGhpcy5jLlFiKCksdGhpcy5jPW51bGx9LE4oWWUsIkl0ZXJhdG9ycy9Db25jYXRlbmF0ZWRJdGVyYXRvciIsMzkpLEQoMjIsMSx7MzoxLDM1OjEsMjI6MX0pLGwud2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIFJxdCh0aGlzLHUoZSwyMikpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBEdih0aGlzKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBvbnQodGhpcyl9LGwuZz0wO3ZhciBVcj1OKGljLCJFbnVtIiwyMik7RCg1MzgsMjIsezUzODoxLDM6MSwzNToxLDIyOjEsNDc6MX0sS1V0KSxsLk5iPWZ1bmN0aW9uKGUpe0VhKHRoaXMsZSl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5QYj1mdW5jdGlvbigpe3Rocm93IG50KG5ldyB2Yyl9LGwuUWI9ZnVuY3Rpb24oKXtyNCghMSl9O3ZhciB4dXQsaGdlPXpyKFllLCJJdGVyYXRvcnMvRW1wdHlNb2RpZmlhYmxlSXRlcmF0b3IiLDUzOCxVcix4ZW4sblFlKSxmZ2U7RCgxODM0LDYxOSxrMiksTihZZSwiTGlua2VkSGFzaE11bHRpbWFwR3d0U2VyaWFsaXphdGlvbkRlcGVuZGVuY2llcyIsMTgzNCksRCgxODM1LDE4MzQsazIsX3JlKSxsLmhjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBpbnQoUW0odGhpcy5iKSl9LGwuJGI9ZnVuY3Rpb24oKXtRJCh0aGlzKSxjTSh0aGlzLmEsdGhpcy5hKX0sbC5nZD1mdW5jdGlvbigpe3JldHVybiBuZXcgaW50KFFtKHRoaXMuYikpfSxsLmljPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbHJlKHRoaXMsZSx0aGlzLmIpfSxsLmtjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB2MnQodGhpcyl9LGwubGM9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gbmV3IFRuKChlPXRoaXMuZyx1KGV8fCh0aGlzLmc9bmV3IFJwdCh0aGlzKSksMjEpKSwxNyl9LGwuZWM9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLmksZXx8KHRoaXMuaT1uZXcgSzModGhpcyx0aGlzLmMpKX0sbC5uYz1mdW5jdGlvbigpe3JldHVybiBuZXcgSHB0KG5ldyB2MnQodGhpcykpfSxsLm9jPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIEdNKG5ldyBUbigoZT10aGlzLmcsdShlfHwodGhpcy5nPW5ldyBScHQodGhpcykpLDIxKSksMTcpLG5ldyBZKX0sbC5iPTIsTihZZSwiTGlua2VkSGFzaE11bHRpbWFwIiwxODM1KSxEKDE4MzgsMSx7fSxZKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsNDIpLmRkKCl9LE4oWWUsIkxpbmtlZEhhc2hNdWx0aW1hcC8wbWV0aG9kcmVmJGdldFZhbHVlJFR5cGUiLDE4MzgpLEQoODI0LDEsZGEsdjJ0KSxsLk5iPWZ1bmN0aW9uKGUpe0VhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gemFuKHRoaXMpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYSE9dGhpcy5iLmF9LGwuUWI9ZnVuY3Rpb24oKXtyNCghIXRoaXMuYyksblp0KHRoaXMuYix0aGlzLmMuZyx0aGlzLmMuaSksdGhpcy5jPW51bGx9LE4oWWUsIkxpbmtlZEhhc2hNdWx0aW1hcC8xIiw4MjQpLEQoMzMwLDIzOCx7MzQ1OjEsMjM4OjEsMzMwOjEsMjAyMDoxLDM6MSw0MjoxfSxtd3QpLGwuUmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mfSxsLlNkPWZ1bmN0aW9uKGUpe3RoaXMuYz1lfSxsLlRkPWZ1bmN0aW9uKGUpe3RoaXMuZj1lfSxsLmQ9MDt2YXIgZGdlPU4oWWUsIkxpbmtlZEhhc2hNdWx0aW1hcC9WYWx1ZUVudHJ5IiwzMzApO0QoMTgzNiwxOTcwLHsyMDIwOjEsMjA6MSwyODoxLDE0OjEsMjE6MX0sbHJlKSxsLkZjPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGg7Zm9yKGg9TXIoSWEoZTAsV2QoTXIoSWEoZT09bnVsbD8wOkppKGUpLG4wKSksMTUpKSksbj1oJnRoaXMuYi5sZW5ndGgtMSxvPXRoaXMuYltuXSxyPW87cjtyPXIuYSlpZihyLmQ9PWgmJmRkKHIuaSxlKSlyZXR1cm4hMTtyZXR1cm4gcz1uZXcgbXd0KHRoaXMuYyxlLGgsbyksVXF0KHRoaXMuZCxzKSxzLmY9dGhpcyx0aGlzLmQ9cyxjTSh0aGlzLmcuYS5iLHMpLGNNKHMsdGhpcy5nLmEpLHRoaXMuYltuXT1zLCsrdGhpcy5mLCsrdGhpcy5lLGoxbih0aGlzKSwhMH0sbC4kYj1mdW5jdGlvbigpe3ZhciBlLG47Zm9yKHlNKHRoaXMuYixudWxsKSx0aGlzLmY9MCxlPXRoaXMuYTtlIT10aGlzO2U9ZS5SZCgpKW49dShlLDMzMCksY00obi5iLG4uZSk7dGhpcy5hPXRoaXMsdGhpcy5kPXRoaXMsKyt0aGlzLmV9LGwuSGM9ZnVuY3Rpb24oZSl7dmFyIG4scjtmb3Iocj1NcihJYShlMCxXZChNcihJYShlPT1udWxsPzA6SmkoZSksbjApKSwxNSkpKSxuPXRoaXMuYltyJnRoaXMuYi5sZW5ndGgtMV07bjtuPW4uYSlpZihuLmQ9PXImJmRkKG4uaSxlKSlyZXR1cm4hMDtyZXR1cm4hMX0sbC5KYz1mdW5jdGlvbihlKXt2YXIgbjtmb3IoRHIoZSksbj10aGlzLmE7biE9dGhpcztuPW4uUmQoKSllLnRkKHUobiwzMzApLmkpfSxsLlJkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgblh0KHRoaXMpfSxsLk1jPWZ1bmN0aW9uKGUpe3JldHVybiBKb2UodGhpcyxlKX0sbC5TZD1mdW5jdGlvbihlKXt0aGlzLmQ9ZX0sbC5UZD1mdW5jdGlvbihlKXt0aGlzLmE9ZX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZ9LGwuZT0wLGwuZj0wLE4oWWUsIkxpbmtlZEhhc2hNdWx0aW1hcC9WYWx1ZVNldCIsMTgzNiksRCgxODM3LDEsZGEsblh0KSxsLk5iPWZ1bmN0aW9uKGUpe0VhKHRoaXMsZSl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4genZ0KHRoaXMpLHRoaXMuYiE9dGhpcy5jfSxsLlBiPWZ1bmN0aW9uKCl7dmFyIGUsbjtpZih6dnQodGhpcyksdGhpcy5iPT10aGlzLmMpdGhyb3cgbnQobmV3IHZjKTtyZXR1cm4gZT11KHRoaXMuYiwzMzApLG49ZS5pLHRoaXMuZD1lLHRoaXMuYj1lLmYsbn0sbC5RYj1mdW5jdGlvbigpe3p2dCh0aGlzKSxyNCghIXRoaXMuZCksSm9lKHRoaXMuYyx0aGlzLmQuaSksdGhpcy5hPXRoaXMuYy5lLHRoaXMuZD1udWxsfSxsLmE9MCxOKFllLCJMaW5rZWRIYXNoTXVsdGltYXAvVmFsdWVTZXQvMSIsMTgzNyksRCg3NjYsMTk4NixrMixLR3QpLGwuWmI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLmYsZXx8KHRoaXMuZj1uZXcgcGJ0KHRoaXMpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gX2l0KHRoaXMsZSl9LGwuY2M9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBkZXQodGhpcyxlKX0sbC5mYz1mdW5jdGlvbihlKXtyZXR1cm4gWnd0KHRoaXMsZSl9LGwuJGI9ZnVuY3Rpb24oKXskWXQodGhpcyl9LGwuX2I9ZnVuY3Rpb24oZSl7cmV0dXJuIGNWdCh0aGlzLGUpfSxsLmFjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBwYnQodGhpcyl9LGwuYmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHZ0dCh0aGlzKX0sbC5xYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGRldCh0aGlzLGUpfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuYX0sbC5yYz1mdW5jdGlvbihlKXtyZXR1cm4gWnd0KHRoaXMsZSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSxsLmM9MCxsLmQ9MCxOKFllLCJMaW5rZWRMaXN0TXVsdGltYXAiLDc2NiksRCg1MiwyOCxMNyksbC5hZD1mdW5jdGlvbihlKXtuNCh0aGlzLGUpfSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBUbih0aGlzLDE2KX0sbC5WYz1mdW5jdGlvbihlLG4pe3Rocm93IG50KG5ldyBUZygiQWRkIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBsaXN0IikpfSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLlZjKHRoaXMuZ2MoKSxlKSwhMH0sbC5XYz1mdW5jdGlvbihlLG4pe3ZhciByLHMsbztmb3IoSW4obikscj0hMSxvPW4uS2MoKTtvLk9iKCk7KXM9by5QYigpLHRoaXMuVmMoZSsrLHMpLHI9ITA7cmV0dXJuIHJ9LGwuJGI9ZnVuY3Rpb24oKXt0aGlzLlVkKDAsdGhpcy5nYygpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gZjV0KHRoaXMsZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gVHl0KHRoaXMpfSxsLlhjPWZ1bmN0aW9uKGUpe3JldHVybiBGZWUodGhpcyxlKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgaDYodGhpcyl9LGwuWWM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5aYygwKX0sbC5aYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHhhKHRoaXMsZSl9LGwuJGM9ZnVuY3Rpb24oZSl7dGhyb3cgbnQobmV3IFRnKCJSZW1vdmUgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGxpc3QiKSl9LGwuVWQ9ZnVuY3Rpb24oZSxuKXt2YXIgcixzO2ZvcihzPXRoaXMuWmMoZSkscj1lO3I8bjsrK3Ipcy5QYigpLHMuUWIoKX0sbC5fYz1mdW5jdGlvbihlLG4pe3Rocm93IG50KG5ldyBUZygiU2V0IG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBsaXN0IikpfSxsLmJkPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG5ldyBLZCh0aGlzLGUsbil9LGwuaj0wLE4oYnIsIkFic3RyYWN0TGlzdCIsNTIpLEQoMTk2NCw1MixMNyksbC5WYz1mdW5jdGlvbihlLG4pe3U4KHRoaXMsZSxuKX0sbC5XYz1mdW5jdGlvbihlLG4pe3JldHVybiBmcmUodGhpcyxlLG4pfSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiBlMSh0aGlzLGUpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuWmMoMCl9LGwuJGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGtzdCh0aGlzLGUpfSxsLl9jPWZ1bmN0aW9uKGUsbil7dmFyIHIscztyPXRoaXMuWmMoZSk7dHJ5e3JldHVybiBzPXIuUGIoKSxyLldiKG4pLHN9Y2F0Y2gobyl7dGhyb3cgbz1ycyhvKSxfdChvLDEwOSk/bnQobmV3IENvKCJDYW4ndCBzZXQgZWxlbWVudCAiK2UpKTpudChvKX19LE4oYnIsIkFic3RyYWN0U2VxdWVudGlhbExpc3QiLDE5NjQpLEQoNjM2LDE5NjQsTDcsZGV0KSxsLlpjPWZ1bmN0aW9uKGUpe3JldHVybiBaVXQodGhpcyxlKX0sbC5nYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXUodHIodGhpcy5hLmIsdGhpcy5iKSwyODMpLGU/ZS5hOjB9LE4oWWUsIkxpbmtlZExpc3RNdWx0aW1hcC8xIiw2MzYpLEQoMTI5NywxOTcwLFV1LHZ0dCksbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gY1Z0KHRoaXMuYSxlKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgWmVlKHRoaXMuYSl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIVp3dCh0aGlzLmEsZSkuYS5kYygpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuICRUKHRoaXMuYS5iKX0sTihZZSwiTGlua2VkTGlzdE11bHRpbWFwLzFLZXlTZXRJbXBsIiwxMjk3KSxEKDEyOTYsMSxkYSxaZWUpLGwuTmI9ZnVuY3Rpb24oZSl7RWEodGhpcyxlKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiAkdnQodGhpcyksISF0aGlzLmN9LGwuUGI9ZnVuY3Rpb24oKXskdnQodGhpcykseTJ0KHRoaXMuYyksdGhpcy5hPXRoaXMuYyxWcyh0aGlzLmQsdGhpcy5hLmEpO2RvIHRoaXMuYz10aGlzLmMuYjt3aGlsZSh0aGlzLmMmJiFWcyh0aGlzLmQsdGhpcy5jLmEpKTtyZXR1cm4gdGhpcy5hLmF9LGwuUWI9ZnVuY3Rpb24oKXskdnQodGhpcykscjQoISF0aGlzLmEpLE9qKG5ldyBXcnQodGhpcy5lLHRoaXMuYS5hKSksdGhpcy5hPW51bGwsdGhpcy5iPXRoaXMuZS5jfSxsLmI9MCxOKFllLCJMaW5rZWRMaXN0TXVsdGltYXAvRGlzdGluY3RLZXlJdGVyYXRvciIsMTI5NiksRCgyODMsMSx7MjgzOjF9LEF3dCksbC5hPTAsTihZZSwiTGlua2VkTGlzdE11bHRpbWFwL0tleUxpc3QiLDI4MyksRCgxMjk1LDM0NSxNcSxRSHQpLGwuY2Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLmRkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZn0sbC5lZD1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbj10aGlzLmYsdGhpcy5mPWUsbn0sTihZZSwiTGlua2VkTGlzdE11bHRpbWFwL05vZGUiLDEyOTUpLEQoNTYwLDEsSmQsV3J0LFVhZSksbC5OYj1mdW5jdGlvbihlKXtFYSh0aGlzLGUpfSxsLlJiPWZ1bmN0aW9uKGUpe3RoaXMuZT16NXQodGhpcy5mLHRoaXMuYixlLHRoaXMuYyksKyt0aGlzLmQsdGhpcy5hPW51bGx9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuY30sbC5TYj1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5lfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIE53dCh0aGlzKX0sbC5UYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGwuVWI9ZnVuY3Rpb24oKXtyZXR1cm4gd1F0KHRoaXMpfSxsLlZiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZC0xfSxsLlFiPWZ1bmN0aW9uKCl7cjQoISF0aGlzLmEpLHRoaXMuYSE9dGhpcy5jPyh0aGlzLmU9dGhpcy5hLmUsLS10aGlzLmQpOnRoaXMuYz10aGlzLmEuYyxWZ24odGhpcy5mLHRoaXMuYSksdGhpcy5hPW51bGx9LGwuV2I9ZnVuY3Rpb24oZSl7bTJ0KCEhdGhpcy5hKSx0aGlzLmEuZj1lfSxsLmQ9MCxOKFllLCJMaW5rZWRMaXN0TXVsdGltYXAvVmFsdWVGb3JLZXlJdGVyYXRvciIsNTYwKSxEKDEwMTgsNTIsTDcpLGwuVmM9ZnVuY3Rpb24oZSxuKXt0aGlzLmEuVmMoZSxuKX0sbC5XYz1mdW5jdGlvbihlLG4pe3JldHVybiB0aGlzLmEuV2MoZSxuKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLkhjKGUpfSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuWGIoZSl9LGwuJGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYS4kYyhlKX0sbC5fYz1mdW5jdGlvbihlLG4pe3JldHVybiB0aGlzLmEuX2MoZSxuKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ2MoKX0sTihZZSwiTGlzdHMvQWJzdHJhY3RMaXN0V3JhcHBlciIsMTAxOCksRCgxMDE5LDEwMTgsWmhlKSxOKFllLCJMaXN0cy9SYW5kb21BY2Nlc3NMaXN0V3JhcHBlciIsMTAxOSksRCgxMDIxLDEwMTksWmhlLG5WdCksbC5aYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLlpjKGUpfSxOKFllLCJMaXN0cy8xIiwxMDIxKSxEKDEzMSw1Mix7MTMxOjEsMjA6MSwyODoxLDUyOjEsMTQ6MSwxNToxfSxNbSksbC5WYz1mdW5jdGlvbihlLG4pe3RoaXMuYS5WYyhwOCh0aGlzLGUpLG4pfSxsLiRiPWZ1bmN0aW9uKCl7dGhpcy5hLiRiKCl9LGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYS5YYihkd3QodGhpcyxlKSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gUnd0KHRoaXMsMCl9LGwuWmM9ZnVuY3Rpb24oZSl7cmV0dXJuIFJ3dCh0aGlzLGUpfSxsLiRjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuJGMoZHd0KHRoaXMsZSkpfSxsLlVkPWZ1bmN0aW9uKGUsbil7KHVadChlLG4sdGhpcy5hLmdjKCkpLGMyKHRoaXMuYS5iZChwOCh0aGlzLG4pLHA4KHRoaXMsZSkpKSkuJGIoKX0sbC5fYz1mdW5jdGlvbihlLG4pe3JldHVybiB0aGlzLmEuX2MoZHd0KHRoaXMsZSksbil9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmdjKCl9LGwuYmQ9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdVp0KGUsbix0aGlzLmEuZ2MoKSksYzIodGhpcy5hLmJkKHA4KHRoaXMsbikscDgodGhpcyxlKSkpfSxOKFllLCJMaXN0cy9SZXZlcnNlTGlzdCIsMTMxKSxEKDI4MCwxMzEsezEzMToxLDIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw1NDoxfSxtdiksTihZZSwiTGlzdHMvUmFuZG9tQWNjZXNzUmV2ZXJzZUxpc3QiLDI4MCksRCgxMDIwLDEsSmQsWkh0KSxsLk5iPWZ1bmN0aW9uKGUpe0VhKHRoaXMsZSl9LGwuUmI9ZnVuY3Rpb24oZSl7dGhpcy5jLlJiKGUpLHRoaXMuYy5VYigpLHRoaXMuYT0hMX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMuU2IoKX0sbC5TYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMuT2IoKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiBmSnQodGhpcyl9LGwuVGI9ZnVuY3Rpb24oKXtyZXR1cm4gcDgodGhpcy5iLHRoaXMuYy5UYigpKX0sbC5VYj1mdW5jdGlvbigpe2lmKCF0aGlzLmMuT2IoKSl0aHJvdyBudChuZXcgdmMpO3JldHVybiB0aGlzLmE9ITAsdGhpcy5jLlBiKCl9LGwuVmI9ZnVuY3Rpb24oKXtyZXR1cm4gcDgodGhpcy5iLHRoaXMuYy5UYigpKS0xfSxsLlFiPWZ1bmN0aW9uKCl7cjQodGhpcy5hKSx0aGlzLmMuUWIoKSx0aGlzLmE9ITF9LGwuV2I9ZnVuY3Rpb24oZSl7bTJ0KHRoaXMuYSksdGhpcy5jLldiKGUpfSxsLmE9ITEsTihZZSwiTGlzdHMvUmV2ZXJzZUxpc3QvMSIsMTAyMCksRCg0MzIsNDg3LGRhLElUKSxsLlFkPWZ1bmN0aW9uKGUpe3JldHVybiBQUihlKX0sTihZZSwiTWFwcy8xIiw0MzIpLEQoNjk4LDQ4NyxkYSxIcHQpLGwuUWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSw0MikuZGQoKX0sTihZZSwiTWFwcy8yIiw2OTgpLEQoOTYyLDQ4NyxkYSxRVXQpLGwuUWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBDdihlLEpHdCh0aGlzLmEsZSkpfSxOKFllLCJNYXBzLzMiLDk2MiksRCg5NTksMTk3MSxVdSxjNiksbC5KYz1mdW5jdGlvbihlKXtoS2UodGhpcy5hLGUpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5rYygpfSxsLlJjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5OYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEubGMoKX0sTihZZSwiTWFwcy9JdGVyYXRvckJhc2VkQWJzdHJhY3RNYXAvMSIsOTU5KSxEKDk2MCwxLHt9LGJ0dCksbC5PZD1mdW5jdGlvbihlLG4pe3RoaXMuYS50ZChlKX0sTihZZSwiTWFwcy9LZXlTZXQvbGFtYmRhJDAkVHlwZSIsOTYwKSxEKDk1OCwyOCx3eSxlVnQpLGwuJGI9ZnVuY3Rpb24oKXt0aGlzLmEuJGIoKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLnVjKGUpfSxsLkpjPWZ1bmN0aW9uKGUpe0RyKGUpLHRoaXMuYS53YyhuZXcgbHR0KGUpKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZGMoKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgSHB0KHRoaXMuYS52YygpLktjKCkpfSxsLk1jPWZ1bmN0aW9uKGUpe3ZhciBuLHI7dHJ5e3JldHVybiByeSh0aGlzLGUsITApfWNhdGNoKHMpe2lmKHM9cnMocyksX3Qocyw0MSkpe2ZvcihyPXRoaXMuYS52YygpLktjKCk7ci5PYigpOylpZihuPXUoci5QYigpLDQyKSxkZChlLG4uZGQoKSkpcmV0dXJuIHRoaXMuYS5CYyhuLmNkKCkpLCEwO3JldHVybiExfWVsc2UgdGhyb3cgbnQocyl9fSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nYygpfSxOKFllLCJNYXBzL1ZhbHVlcyIsOTU4KSxEKDk2MSwxLHt9LGx0dCksbC5PZD1mdW5jdGlvbihlLG4pe3RoaXMuYS50ZChuKX0sTihZZSwiTWFwcy9WYWx1ZXMvbGFtYmRhJDAkVHlwZSIsOTYxKSxEKDczNiwxOTg3LGJ3LHBidCksbC54Yz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLl9iKGUpP3RoaXMuYS5jYyhlKTpudWxsfSxsLkJjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuX2IoZSk/dGhpcy5hLmZjKGUpOm51bGx9LGwuJGI9ZnVuY3Rpb24oKXt0aGlzLmEuJGIoKX0sbC5fYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLl9iKGUpfSxsLkVjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB1dHQodGhpcyl9LGwuRGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5FYygpfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5kYygpfSxsLmVjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5lYygpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5lYygpLmdjKCl9LE4oWWUsIk11bHRpbWFwcy9Bc01hcCIsNzM2KSxEKDExMDQsMTk3MSxVdSx1dHQpLGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gQVhlKHRoaXMuYS5hLmVjKCksbmV3IGh0dCh0aGlzKSl9LGwuUmM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLk1jPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBsaWUodGhpcyxlKT8obj11KGUsNDIpLExLZSh0aGlzLmEsbi5jZCgpKSwhMCk6ITF9LE4oWWUsIk11bHRpbWFwcy9Bc01hcC9FbnRyeVNldCIsMTEwNCksRCgxMTA4LDEse30saHR0KSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBKR3QodGhpcyxlKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LE4oWWUsIk11bHRpbWFwcy9Bc01hcC9FbnRyeVNldC8xIiwxMTA4KSxEKDU0MywxOTg5LHs1NDM6MSw4MzU6MSwyMDoxLDI4OjEsMTQ6MX0sZnR0KSxsLiRiPWZ1bmN0aW9uKCl7USQodGhpcy5hKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gdUh0KHRoaXMuYSxlKX0sbC5KYz1mdW5jdGlvbihlKXtEcihlKSxfYShTXyh0aGlzLmEpLG5ldyBndHQoZSkpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBJVChTXyh0aGlzLmEpLmEua2MoKSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmR9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gR00oU18odGhpcy5hKS5OYygpLG5ldyBydCl9LE4oWWUsIk11bHRpbWFwcy9LZXlzIiw1NDMpLEQoMTEwNiwxLHt9LHJ0KSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsNDIpLmNkKCl9LE4oWWUsIk11bHRpbWFwcy9LZXlzLzBtZXRob2RyZWYkZ2V0S2V5JFR5cGUiLDExMDYpLEQoMTEwNSw0ODcsZGEsUHF0KSxsLlFkPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZHR0KHUoZSw0MikpfSxOKFllLCJNdWx0aW1hcHMvS2V5cy8xIiwxMTA1KSxEKDE5OTAsMSx7NDE2OjF9KSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBfdChlLDQ5Mik/KG49dShlLDQxNiksdSh0aGlzLmEuZGQoKSwxNCkuZ2MoKT09dShuLmEuZGQoKSwxNCkuZ2MoKSYmZGQodGhpcy5hLmNkKCksbi5hLmNkKCkpKTohMX0sbC5IYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuYS5jZCgpLChlPT1udWxsPzA6SmkoZSkpXnUodGhpcy5hLmRkKCksMTQpLmdjKCl9LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZSxuO3JldHVybiBuPWRfKHRoaXMuYS5jZCgpKSxlPXUodGhpcy5hLmRkKCksMTQpLmdjKCksZT09MT9uOm4rIiB4ICIrZX0sTihZZSwiTXVsdGlzZXRzL0Fic3RyYWN0RW50cnkiLDE5OTApLEQoNDkyLDE5OTAsezQ5MjoxLDQxNjoxfSxkdHQpLE4oWWUsIk11bHRpbWFwcy9LZXlzLzEvMSIsNDkyKSxEKDExMDcsMSxLbixndHQpLGwudGQ9ZnVuY3Rpb24oZSl7dGhpcy5hLnRkKHUoZSw0MikuY2QoKSl9LE4oWWUsIk11bHRpbWFwcy9LZXlzL2xhbWJkYSQxJFR5cGUiLDExMDcpLEQoMTExMCwxLEtuLEopLGwudGQ9ZnVuY3Rpb24oZSl7THRuKHUoZSw0MTYpKX0sTihZZSwiTXVsdGlzZXQvbGFtYmRhJDAkVHlwZSIsMTExMCksRCg3MzcsMSxLbixwdHQpLGwudGQ9ZnVuY3Rpb24oZSl7VWFuKHRoaXMuYSx1KGUsNDE2KSl9LE4oWWUsIk11bHRpc2V0L2xhbWJkYSQxJFR5cGUiLDczNyksRCgxMTExLDEse30sY3QpLE4oWWUsIk11bHRpc2V0cy8wbWV0aG9kcmVmJGFkZCRUeXBlIiwxMTExKSxEKDczOCwxLHt9LHl0KSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBGaW4odShlLDQxNikpfSxOKFllLCJNdWx0aXNldHMvbGFtYmRhJDMkVHlwZSIsNzM4KSxEKDIwMDgsMSxDSSksTihZZSwiUmFuZ2VHd3RTZXJpYWxpemF0aW9uRGVwZW5kZW5jaWVzIiwyMDA4KSxEKDUxNCwyMDA4LHsxNjk6MSw1MTQ6MSwzOjEsNDU6MX0sRDN0KSxsLkxiPWZ1bmN0aW9uKGUpe3JldHVybiBFWXQodGhpcyx1KGUsMzUpKX0sbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gRVl0KHRoaXMsdShlLDM1KSl9LGwuRmI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIF90KGUsNTE0KT8obj11KGUsNTE0KSx4M3QodGhpcy5hLG4uYSkmJngzdCh0aGlzLmIsbi5iKSk6ITF9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLkhiKCkqMzErdGhpcy5iLkhiKCl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gRFp0KHRoaXMuYSx0aGlzLmIpfSxOKFllLCJSYW5nZSIsNTE0KSxEKDc3OCwxOTk5LFNDLE5ZdCksbC5aYz1mdW5jdGlvbihlKXtyZXR1cm4gTTJ0KHRoaXMuYixlKX0sbC5QZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIE5wKHRoaXMuYixlKX0sbC5GZD1mdW5jdGlvbihlKXtyZXR1cm4gTTJ0KHRoaXMuYixlKX0sTihZZSwiUmVndWxhckltbXV0YWJsZUFzTGlzdCIsNzc4KSxEKDY0NiwyMDA2LFNDLHVydCksbC5IZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LE4oWWUsIlJlZ3VsYXJJbW11dGFibGVMaXN0Iiw2NDYpLEQoNjE2LDcxNSxTNyx0ZXQpLE4oWWUsIlJlZ3VsYXJJbW11dGFibGVNYXAiLDYxNiksRCg3MTYsNzAzLEE3LHZidCk7dmFyIEc4dDtOKFllLCJSZWd1bGFySW1tdXRhYmxlU2V0Iiw3MTYpLEQoMTk3NixCMSxVdSksbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcga3d0KHRoaXMuYSx0aGlzLmIpfSxsLkZjPWZ1bmN0aW9uKGUpe3Rocm93IG50KG5ldyBQcil9LGwuR2M9ZnVuY3Rpb24oZSl7dGhyb3cgbnQobmV3IFByKX0sbC4kYj1mdW5jdGlvbigpe3Rocm93IG50KG5ldyBQcil9LGwuTWM9ZnVuY3Rpb24oZSl7dGhyb3cgbnQobmV3IFByKX0sTihZZSwiU2V0cy9TZXRWaWV3IiwxOTc2KSxEKDk2MywxOTc2LFV1LEpIdCksbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcga3d0KHRoaXMuYSx0aGlzLmIpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBJbnQodGhpcy5hLGUpJiZ0aGlzLmIuSGMoZSl9LGwuSWM9ZnVuY3Rpb24oZSl7cmV0dXJuIEREKHRoaXMuYSxlKSYmdGhpcy5iLkljKGUpfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIFlpZSh0aGlzLmIsdGhpcy5hKX0sbC5MYz1mdW5jdGlvbigpe3JldHVybiBXaShuZXcga24obnVsbCxuZXcgVG4odGhpcy5hLDEpKSxuZXcgQ2godGhpcy5iKSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gQUQodGhpcyl9LGwuT2M9ZnVuY3Rpb24oKXtyZXR1cm4gV2kobmV3IGtuKG51bGwsbmV3IFRuKHRoaXMuYSwxKSksbmV3IGprKHRoaXMuYikpfSxOKFllLCJTZXRzLzIiLDk2MyksRCg3MDAsNjk5LF83LGt3dCksbC5ZYj1mdW5jdGlvbigpe2Zvcih2YXIgZTtzMnQodGhpcy5hKTspaWYoZT1GXyh0aGlzLmEpLHRoaXMuYy5IYyhlKSlyZXR1cm4gZTtyZXR1cm4gdGhpcy5lPTIsbnVsbH0sTihZZSwiU2V0cy8yLzEiLDcwMCksRCg5NjQsMSxnaSxqayksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLkhjKGUpfSxOKFllLCJTZXRzLzIvNG1ldGhvZHJlZiRjb250YWlucyRUeXBlIiw5NjQpLEQoOTY1LDEsZ2ksQ2gpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYS5IYyhlKX0sTihZZSwiU2V0cy8yLzVtZXRob2RyZWYkY29udGFpbnMkVHlwZSIsOTY1KSxEKDYwNywxOTc1LHs2MDc6MSwzOjEsMjA6MSwxNDoxLDI3MToxLDIxOjEsODQ6MX0sdFF0KSxsLkJkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5DZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuTWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxsLkpjPWZ1bmN0aW9uKGUpe3RoaXMuYS5KYyhlKX0sbC5MYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuTGMoKX0sbC5PYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuT2MoKX0sTihZZSwiU2V0cy9Vbm1vZGlmaWFibGVOYXZpZ2FibGVTZXQiLDYwNyksRCgxOTMyLDE5MzEsUzcsY1h0KSxsLkxkPWZ1bmN0aW9uKCl7cmV0dXJuIGZkKCksbmV3IHk2KHRoaXMuYSl9LGwuQ2M9ZnVuY3Rpb24oKXtyZXR1cm4gZmQoKSxuZXcgeTYodGhpcy5hKX0sbC5wZD1mdW5jdGlvbigpe3JldHVybiBmZCgpLG5ldyB5Nih0aGlzLmEpfSxOKFllLCJTaW5nbGV0b25JbW11dGFibGVCaU1hcCIsMTkzMiksRCg2NDcsMjAwNixTQyxMbnQpLGwuSGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxOKFllLCJTaW5nbGV0b25JbW11dGFibGVMaXN0Iiw2NDcpLEQoMzUwLDE5ODEsQTcseTYpLGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFVCKHRoaXMuYSl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIFNpKHRoaXMuYSxlKX0sbC5FZD1mdW5jdGlvbigpe3JldHVybiBuZXcgVUIodGhpcy5hKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiAxfSxOKFllLCJTaW5nbGV0b25JbW11dGFibGVTZXQiLDM1MCksRCgxMTE1LDEse30sc3QpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxNjQpfSxOKFllLCJTdHJlYW1zL2xhbWJkYSQwJFR5cGUiLDExMTUpLEQoMTExNiwxLE9xLHd0dCksbC5WZD1mdW5jdGlvbigpe1Nzbih0aGlzLmEpfSxOKFllLCJTdHJlYW1zL2xhbWJkYSQxJFR5cGUiLDExMTYpLEQoMTY1OSwxNjU4LGsyLFVYdCksbC5aYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuZix1KHUoZXx8KHRoaXMuZj1fdCh0aGlzLmMsMTcxKT9uZXcgeWoodGhpcyx1KHRoaXMuYywxNzEpKTpfdCh0aGlzLmMsMTYxKT9uZXcgUk0odGhpcyx1KHRoaXMuYywxNjEpKTpuZXcgdDgodGhpcyx0aGlzLmMpKSwxNjEpLDE3MSl9LGwuaGM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERwKHRoaXMuYil9LGwuZ2Q9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERwKHRoaXMuYil9LGwuZWM9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLmksdSh1KGV8fCh0aGlzLmk9X3QodGhpcy5jLDE3MSk/bmV3IEprKHRoaXMsdSh0aGlzLmMsMTcxKSk6X3QodGhpcy5jLDE2MSk/bmV3IGdNKHRoaXMsdSh0aGlzLmMsMTYxKSk6bmV3IEszKHRoaXMsdGhpcy5jKSksODQpLDI3MSl9LGwuYWM9ZnVuY3Rpb24oKXtyZXR1cm4gX3QodGhpcy5jLDE3MSk/bmV3IHlqKHRoaXMsdSh0aGlzLmMsMTcxKSk6X3QodGhpcy5jLDE2MSk/bmV3IFJNKHRoaXMsdSh0aGlzLmMsMTYxKSk6bmV3IHQ4KHRoaXMsdGhpcy5jKX0sbC5pYz1mdW5jdGlvbihlKXtyZXR1cm4gZT09bnVsbCYmdGhpcy5hLnVlKGUsZSksbmV3IERwKHRoaXMuYil9LE4oWWUsIlRyZWVNdWx0aW1hcCIsMTY1OSksRCg3OCwxLHszOjEsNzg6MX0pLGwuV2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBFcnJvcihlKX0sbC5YZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmV9LGwuWWQ9ZnVuY3Rpb24oKXtyZXR1cm4gJGxuKHh1KHFudCgodGhpcy5rPT1udWxsJiYodGhpcy5rPU50KGt1dCxyZSw3OCwwLDAsMSkpLHRoaXMuaykpLG5ldyBWdCkpfSxsLlpkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZn0sbC4kZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmd9LGwuX2Q9ZnVuY3Rpb24oKXtiS2UodGhpcyx5aW4odGhpcy5XZChscnQodGhpcyx0aGlzLmcpKSkpLHp6dCh0aGlzKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBscnQodGhpcyx0aGlzLiRkKCkpfSxsLmU9SmhlLGwuaT0hMSxsLm49ITA7dmFyIGt1dD1OKGljLCJUaHJvd2FibGUiLDc4KTtEKDEwMiw3OCx7MzoxLDEwMjoxLDc4OjF9KSxOKGljLCJFeGNlcHRpb24iLDEwMiksRCg2MCwxMDIsVTAsV2IsWm8pLE4oaWMsIlJ1bnRpbWVFeGNlcHRpb24iLDYwKSxEKDU5OCw2MCxVMCksTihpYywiSnNFeGNlcHRpb24iLDU5OCksRCg4NjMsNTk4LFUwKSxOKE1JLCJKYXZhU2NyaXB0RXhjZXB0aW9uQmFzZSIsODYzKSxEKDQ3Nyw4NjMsezQ3NzoxLDM6MSwxMDI6MSw2MDoxLDc4OjF9LFRyZSksbC4kZD1mdW5jdGlvbigpe3JldHVybiB1ZG4odGhpcyksdGhpcy5jfSxsLmFlPWZ1bmN0aW9uKCl7cmV0dXJuIEd0KHRoaXMuYik9PT1HdChVOHQpP251bGw6dGhpcy5ifTt2YXIgVTh0O04oTTZ0LCJKYXZhU2NyaXB0RXhjZXB0aW9uIiw0NzcpO3ZhciBnZ2U9TihNNnQsIkphdmFTY3JpcHRPYmplY3QkIiwwKSxFdXQ7RCgxOTQ4LDEse30pLE4oTTZ0LCJTY2hlZHVsZXIiLDE5NDgpO3ZhciB6SD0wLHBnZT0wLHFIPS0xO0QoODkwLDE5NDgse30seHQpO3ZhciBXOHQ7TihNSSwiU2NoZWR1bGVySW1wbCIsODkwKTt2YXIgVHV0O0QoMTk2MCwxLHt9KSxOKE1JLCJTdGFja1RyYWNlQ3JlYXRvci9Db2xsZWN0b3IiLDE5NjApLEQoODY0LDE5NjAse30saHQpLGwuYmU9ZnVuY3Rpb24oZSl7dmFyIG49e30scj1bXTtlW3phdF09cjtmb3IodmFyIHM9YXJndW1lbnRzLmNhbGxlZS5jYWxsZXI7czspe3ZhciBvPShrOCgpLHMubmFtZXx8KHMubmFtZT1jb24ocy50b1N0cmluZygpKSkpO3IucHVzaChvKTt2YXIgaD0iOiIrbyxkPW5baF07aWYoZCl7dmFyIHcsaztmb3Iodz0wLGs9ZC5sZW5ndGg7dzxrO3crKylpZihkW3ddPT09cylyZXR1cm59KGR8fChuW2hdPVtdKSkucHVzaChzKSxzPXMuY2FsbGVyfX0sbC5jZT1mdW5jdGlvbihlKXt2YXIgbixyLHMsbztmb3Iocz0oazgoKSxlJiZlW3phdF0/ZVt6YXRdOltdKSxyPXMubGVuZ3RoLG89TnQobzd0LHJlLDMxMCxyLDAsMSksbj0wO248cjtuKyspb1tuXT1uZXcgZXJ0KHNbbl0sbnVsbCwtMSk7cmV0dXJuIG99LE4oTUksIlN0YWNrVHJhY2VDcmVhdG9yL0NvbGxlY3RvckxlZ2FjeSIsODY0KSxEKDE5NjEsMTk2MCx7fSksbC5iZT1mdW5jdGlvbihlKXt9LGwuZGU9ZnVuY3Rpb24oZSxuLHIscyl7cmV0dXJuIG5ldyBlcnQobixlKyJAIitzLHI8MD8tMTpyKX0sbC5jZT1mdW5jdGlvbihlKXt2YXIgbixyLHMsbyxoLGQ7aWYobz1QZm4oZSksaD1OdChvN3QscmUsMzEwLDAsMCwxKSxuPTAscz1vLmxlbmd0aCxzPT0wKXJldHVybiBoO2ZvcihkPVBsZSh0aGlzLG9bMF0pLHVuKGQuZCwkYXQpfHwoaFtuKytdPWQpLHI9MTtyPHM7cisrKWhbbisrXT1QbGUodGhpcyxvW3JdKTtyZXR1cm4gaH0sTihNSSwiU3RhY2tUcmFjZUNyZWF0b3IvQ29sbGVjdG9yTW9kZXJuIiwxOTYxKSxEKDg2NSwxOTYxLHt9LGZ0KSxsLmRlPWZ1bmN0aW9uKGUsbixyLHMpe3JldHVybiBuZXcgZXJ0KG4sZSwtMSl9LE4oTUksIlN0YWNrVHJhY2VDcmVhdG9yL0NvbGxlY3Rvck1vZGVybk5vU291cmNlTWFwIiw4NjUpLEQoMTA1MCwxLHt9KSxOKEk2dCxuZmUsMTA1MCksRCg2MTUsMTA1MCx7NjE1OjF9LFhZdCk7dmFyIEs4dDtOKGFvdCxuZmUsNjE1KSxEKDIwMDEsMSx7fSksTihJNnQscmZlLDIwMDEpLEQoMjAwMiwyMDAxLHt9KSxOKGFvdCxyZmUsMjAwMiksRCgxMDkwLDEse30sVHQpO3ZhciBzUztOKGFvdCwiTG9jYWxlSW5mbyIsMTA5MCksRCgxOTE4LDEse30sa3QpLGwuYT0wLE4oYW90LCJUaW1lWm9uZSIsMTkxOCksRCgxMjU4LDIwMDIse30saXQpLE4oImNvbS5nb29nbGUuZ3d0LmkxOG4uY2xpZW50LmltcGwuY2xkciIsIkRhdGVUaW1lRm9ybWF0SW5mb0ltcGwiLDEyNTgpLEQoNDM0LDEsezQzNDoxfSxDS3QpLGwuYT0hMSxsLmI9MCxOKEk2dCwiRGF0ZVRpbWVGb3JtYXQvUGF0dGVyblBhcnQiLDQzNCksRCgxOTksMSxpZmUsQ1IseXl0LCQydCksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gdmluKHRoaXMsdShlLDE5OSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE5OSkmJkF2KEF1KHRoaXMucS5nZXRUaW1lKCkpLEF1KHUoZSwxOTkpLnEuZ2V0VGltZSgpKSl9LGwuSGI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1BdSh0aGlzLnEuZ2V0VGltZSgpKSxNcihrcnQoZSx6bShlLDMyKSkpfSxsLkliPWZ1bmN0aW9uKCl7dmFyIGUsbixyO3JldHVybiByPS10aGlzLnEuZ2V0VGltZXpvbmVPZmZzZXQoKSxlPShyPj0wPyIrIjoiIikrKHIvNjB8MCksbj1yaihiLk1hdGguYWJzKHIpJTYwKSwocGFlKCksX2dlKVt0aGlzLnEuZ2V0RGF5KCldKyIgIitDZ2VbdGhpcy5xLmdldE1vbnRoKCldKyIgIityaih0aGlzLnEuZ2V0RGF0ZSgpKSsiICIrcmoodGhpcy5xLmdldEhvdXJzKCkpKyI6Iityaih0aGlzLnEuZ2V0TWludXRlcygpKSsiOiIrcmoodGhpcy5xLmdldFNlY29uZHMoKSkrIiBHTVQiK2UrbisiICIrdGhpcy5xLmdldEZ1bGxZZWFyKCl9O3ZhciBISD1OKGJyLCJEYXRlIiwxOTkpO0QoMTkxNSwxOTksaWZlLHFzZSksbC5hPSExLGwuYj0wLGwuYz0wLGwuZD0wLGwuZT0wLGwuZj0wLGwuZz0hMSxsLmk9MCxsLmo9MCxsLms9MCxsLm49MCxsLm89MCxsLnA9MCxOKCJjb20uZ29vZ2xlLmd3dC5pMThuLnNoYXJlZC5pbXBsIiwiRGF0ZVJlY29yZCIsMTkxNSksRCgxOTY2LDEse30pLGwuZmU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbC5nZT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxsLmhlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGwuaWU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbC5qZT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxOKGx4LCJKU09OVmFsdWUiLDE5NjYpLEQoMjE2LDE5NjYsezIxNjoxfSx5Zyx1NiksbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwyMTYpPyR3dCh0aGlzLmEsdShlLDIxNikuYSk6ITF9LGwuZWU9ZnVuY3Rpb24oKXtyZXR1cm4gWFdlfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIFN3dCh0aGlzLmEpfSxsLmZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZSxuLHI7Zm9yKHI9bmV3IEZsKCJbIiksbj0wLGU9dGhpcy5hLmxlbmd0aDtuPGU7bisrKW4+MCYmKHIuYSs9IiwiKSx3YyhyLFhtKHRoaXMsbikpO3JldHVybiByLmErPSJdIixyLmF9LE4obHgsIkpTT05BcnJheSIsMjE2KSxEKDQ4MywxOTY2LHs0ODM6MX0sJGspLGwuZWU9ZnVuY3Rpb24oKXtyZXR1cm4gUVdlfSxsLmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gRm4oKSwiIit0aGlzLmF9LGwuYT0hMTt2YXIgYmdlLHZnZTtOKGx4LCJKU09OQm9vbGVhbiIsNDgzKSxEKDk4NSw2MCxVMCxGcXQpLE4obHgsIkpTT05FeGNlcHRpb24iLDk4NSksRCgxMDIzLDE5NjYse30sbXQpLGwuZWU9ZnVuY3Rpb24oKXtyZXR1cm4gbktlfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIE11fTt2YXIgd2dlO04obHgsIkpTT05OdWxsIiwxMDIzKSxEKDI1OCwxOTY2LHsyNTg6MX0seVQpLGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMjU4KT90aGlzLmE9PXUoZSwyNTgpLmE6ITF9LGwuZWU9ZnVuY3Rpb24oKXtyZXR1cm4gWldlfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHM4KHRoaXMuYSl9LGwuaGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sbC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmErIiJ9LGwuYT0wLE4obHgsIkpTT05OdW1iZXIiLDI1OCksRCgxODMsMTk2Nix7MTgzOjF9LHc2LHprKSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE4Myk/JHd0KHRoaXMuYSx1KGUsMTgzKS5hKTohMX0sbC5lZT1mdW5jdGlvbigpe3JldHVybiBKV2V9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gU3d0KHRoaXMuYSl9LGwuaWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sbC5JYj1mdW5jdGlvbigpe3ZhciBlLG4scixzLG8saCxkO2ZvcihkPW5ldyBGbCgieyIpLGU9ITAsaD1oaXQodGhpcyxOdChMZSxyZSwyLDAsNiwxKSkscj1oLHM9MCxvPXIubGVuZ3RoO3M8bzsrK3Mpbj1yW3NdLGU/ZT0hMTpkLmErPVhhLFlyKGQsT29lKG4pKSxkLmErPSI6Iix3YyhkLEkwKHRoaXMsbikpO3JldHVybiBkLmErPSJ9IixkLmF9LE4obHgsIkpTT05PYmplY3QiLDE4MyksRCg1OTYsQjEsVXUsZ2V0KSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBoYShlKSYmUEtlKHRoaXMuYSxqcihlKSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGg2KG5ldyBDbCh0aGlzLmIpKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIubGVuZ3RofSxOKGx4LCJKU09OT2JqZWN0LzEiLDU5Nik7dmFyIF91dDtEKDIwNCwxOTY2LHsyMDQ6MX0sSG0pLGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMjA0KT91bih0aGlzLmEsdShlLDIwNCkuYSk6ITF9LGwuZWU9ZnVuY3Rpb24oKXtyZXR1cm4gdEtlfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHpnKHRoaXMuYSl9LGwuamU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sbC5JYj1mdW5jdGlvbigpe3JldHVybiBPb2UodGhpcy5hKX0sTihseCwiSlNPTlN0cmluZyIsMjA0KTt2YXIgdWIsWTh0LG1nZSxYOHQsUTh0O0QoMTk2MiwxLHs1MjU6MX0pLE4oTzZ0LCJPdXRwdXRTdHJlYW0iLDE5NjIpLEQoMTk2MywxOTYyLHs1MjU6MX0pLE4oTzZ0LCJGaWx0ZXJPdXRwdXRTdHJlYW0iLDE5NjMpLEQoODY2LDE5NjMsezUyNToxfSxSdCksTihPNnQsIlByaW50U3RyZWFtIiw4NjYpLEQoNDE4LDEsezQ3NToxfSksbC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LE4oaWMsIkFic3RyYWN0U3RyaW5nQnVpbGRlciIsNDE4KSxEKDUyOSw2MCxVMCxwUiksTihpYywiQXJpdGhtZXRpY0V4Y2VwdGlvbiIsNTI5KSxEKDczLDYwLG9vdCx4cHQsQ28pLE4oaWMsIkluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24iLDczKSxEKDMyMCw3Myx7MzoxLDMyMDoxLDEwMjoxLDczOjEsNjA6MSw3ODoxfSxFcHQsS3B0KSxOKGljLCJBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24iLDMyMCksRCg1MjgsNjAsVTAsR3R0LGpxdCksTihpYywiQXJyYXlTdG9yZUV4Y2VwdGlvbiIsNTI4KSxEKDI4OSw3OCxzZmUsbmV0KSxOKGljLCJFcnJvciIsMjg5KSxEKDE5NCwyODksc2ZlLHlwdCxybXQpLE4oaWMsIkFzc2VydGlvbkVycm9yIiwxOTQpLGFnZT17MzoxLDQ3NjoxLDM1OjF9O3ZhciBPMixXNyxXcz1OKGljLCJCb29sZWFuIiw0NzYpO0QoMjM2LDEsezM6MSwyMzY6MX0pO3ZhciBaOHQ7TihpYywiTnVtYmVyIiwyMzYpLEQoMjE3LDIzNix7MzoxLDIxNzoxLDM1OjEsMjM2OjF9LE90dCksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gSUtlKHRoaXMsdShlLDIxNykpfSxsLmtlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwyMTcpJiZ1KGUsMjE3KS5hPT10aGlzLmF9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIiIrdGhpcy5hfSxsLmE9MDt2YXIga3g9TihpYywiQnl0ZSIsMjE3KSxKOHQ7RCgxNzIsMSx7MzoxLDE3MjoxLDM1OjF9LHRSKSxsLndkPWZ1bmN0aW9uKGUpe3JldHVybiBPS2UodGhpcyx1KGUsMTcyKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMTcyKSYmdShlLDE3MikuYT09dGhpcy5hfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMuYSl9LGwuYT0wO3ZhciB0N3QsYVM9TihpYywiQ2hhcmFjdGVyIiwxNzIpLGU3dDtEKDIwNSw2MCx7MzoxLDIwNToxLDEwMjoxLDYwOjEsNzg6MX0scXp0LEtrKSxOKGljLCJDbGFzc0Nhc3RFeGNlcHRpb24iLDIwNSksb2dlPXszOjEsMzU6MSwzMzM6MSwyMzY6MX07dmFyIHdhPU4oaWMsIkRvdWJsZSIsMzMzKTtEKDE1NSwyMzYsezM6MSwzNToxLDE1NToxLDIzNjoxfSxPMyxUcHQpLGwud2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHpZZSh0aGlzLHUoZSwxNTUpKX0sbC5rZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMTU1KSYmSld0KHRoaXMuYSx1KGUsMTU1KS5hKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBDcyh0aGlzLmEpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIiIrdGhpcy5hfSxsLmE9MDt2YXIgSzc9TihpYywiRmxvYXQiLDE1NSk7RCgzMiw2MCx7MzoxLDEwMjoxLDMyOjEsNjA6MSw3ODoxfSx1TSxQbixicmUpLE4oaWMsIklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiIsMzIpLEQoNzEsNjAsVTAsUnUsSG8pLE4oaWMsIklsbGVnYWxTdGF0ZUV4Y2VwdGlvbiIsNzEpLEQoMTksMjM2LHszOjEsMzU6MSwxOToxLDIzNjoxfSxpTSksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gcVllKHRoaXMsdShlLDE5KSl9LGwua2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE5KSYmdShlLDE5KS5hPT10aGlzLmF9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIiIrdGhpcy5hfSxsLmE9MDt2YXIgSGE9TihpYywiSW50ZWdlciIsMTkpLG43dCx5Z2U7RCgxNjIsMjM2LHszOjEsMzU6MSwxNjI6MSwyMzY6MX0sX20pLGwud2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIEhZZSh0aGlzLHUoZSwxNjIpKX0sbC5rZT1mdW5jdGlvbigpe3JldHVybiBHdih0aGlzLmEpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE2MikmJkF2KHUoZSwxNjIpLmEsdGhpcy5hKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBNcih0aGlzLmEpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIiIrRV8odGhpcy5hKX0sbC5hPTA7dmFyIFR3PU4oaWMsIkxvbmciLDE2Mikscjd0O0QoMjAzOSwxLHt9KSxEKDE4MzEsNjAsVTAsenF0KSxOKGljLCJOZWdhdGl2ZUFycmF5U2l6ZUV4Y2VwdGlvbiIsMTgzMSksRCgxNzMsNTk4LHszOjEsMTAyOjEsMTczOjEsNjA6MSw3ODoxfSxMVCxtNiksbC5XZD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFR5cGVFcnJvcihlKX0sTihpYywiTnVsbFBvaW50ZXJFeGNlcHRpb24iLDE3Myk7dmFyIGk3dCxDdXQseGdlLHM3dDtEKDEyNywzMix7MzoxLDEwMjoxLDMyOjEsMTI3OjEsNjA6MSw3ODoxfSxjZCksTihpYywiTnVtYmVyRm9ybWF0RXhjZXB0aW9uIiwxMjcpLEQoMTg0LDIzNix7MzoxLDM1OjEsMjM2OjEsMTg0OjF9LGVSKSxsLndkPWZ1bmN0aW9uKGUpe3JldHVybiBOS2UodGhpcyx1KGUsMTg0KSl9LGwua2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE4NCkmJnUoZSwxODQpLmE9PXRoaXMuYX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iIit0aGlzLmF9LGwuYT0wO3ZhciBfdz1OKGljLCJTaG9ydCIsMTg0KSxhN3Q7RCgzMTAsMSx7MzoxLDMxMDoxfSxlcnQpLGwuRmI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIF90KGUsMzEwKT8obj11KGUsMzEwKSx0aGlzLmM9PW4uYyYmdGhpcy5kPT1uLmQmJnRoaXMuYT09bi5hJiZ0aGlzLmI9PW4uYik6ITF9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gdnoodXQob3QoUW4sMSksTWUsMSw1LFtkZSh0aGlzLmMpLHRoaXMuYSx0aGlzLmQsdGhpcy5iXSkpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYSsiLiIrdGhpcy5kKyIoIisodGhpcy5iIT1udWxsP3RoaXMuYjoiVW5rbm93biBTb3VyY2UiKSsodGhpcy5jPj0wPyI6Iit0aGlzLmM6IiIpKyIpIn0sbC5jPTA7dmFyIG83dD1OKGljLCJTdGFja1RyYWNlRWxlbWVudCIsMzEwKTtjZ2U9ezM6MSw0NzU6MSwzNToxLDI6MX07dmFyIExlPU4oaWMsTDZ0LDIpO0QoMTA3LDQxOCx7NDc1OjF9LF9nLEJULEFoKSxOKGljLCJTdHJpbmdCdWZmZXIiLDEwNyksRCgxMDAsNDE4LHs0NzU6MX0sQXAsTG0sRmwpLE4oaWMsIlN0cmluZ0J1aWxkZXIiLDEwMCksRCg2ODcsNzMsb290LFlwdCksTihpYywiU3RyaW5nSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiIsNjg3KSxEKDIwNDMsMSx7fSk7dmFyIGM3dDtEKDg0NCwxLHt9LFZ0KSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsNzgpLmV9LE4oaWMsIlRocm93YWJsZS9sYW1iZGEkMCRUeXBlIiw4NDQpLEQoNDEsNjAsezM6MSwxMDI6MSw2MDoxLDc4OjEsNDE6MX0sUHIsVGcpLE4oaWMsIlVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIiw0MSksRCgyNDAsMjM2LHszOjEsMzU6MSwyMzY6MSwyNDA6MX0sa0QsaWJ0KSxsLndkPWZ1bmN0aW9uKGUpe3JldHVybiBZdWUodGhpcyx1KGUsMjQwKSl9LGwua2U9ZnVuY3Rpb24oKXtyZXR1cm4gbHkoRGxlKHRoaXMpKX0sbC5GYj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gdGhpcz09PWU/ITA6X3QoZSwyNDApPyhuPXUoZSwyNDApLHRoaXMuZT09bi5lJiZZdWUodGhpcyxuKT09MCk6ITF9LGwuSGI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gdGhpcy5iIT0wP3RoaXMuYjp0aGlzLmE8NTQ/KGU9QXUodGhpcy5mKSx0aGlzLmI9TXIoR3MoZSwtMSkpLHRoaXMuYj0zMyp0aGlzLmIrTXIoR3MoUnAoZSwzMiksLTEpKSx0aGlzLmI9MTcqdGhpcy5iK0NzKHRoaXMuZSksdGhpcy5iKToodGhpcy5iPTE3KkxyZSh0aGlzLmMpK0NzKHRoaXMuZSksdGhpcy5iKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBEbGUodGhpcyl9LGwuYT0wLGwuYj0wLGwuZD0wLGwuZT0wLGwuZj0wO3ZhciBrZ2UsTjIsdTd0LGw3dCxoN3QsZjd0LGQ3dCxnN3QsU3V0PU4oImphdmEubWF0aCIsIkJpZ0RlY2ltYWwiLDI0MCk7RCg5MSwyMzYsezM6MSwzNToxLDIzNjoxLDkxOjF9LEwzdCxPZyxZMyxoNHQsSWllLEZwKSxsLndkPWZ1bmN0aW9uKGUpe3JldHVybiBTaWUodGhpcyx1KGUsOTEpKX0sbC5rZT1mdW5jdGlvbigpe3JldHVybiBseShOYXQodGhpcywwKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIGMzdCh0aGlzLGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIExyZSh0aGlzKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBOYXQodGhpcywwKX0sbC5iPS0yLGwuYz0wLGwuZD0wLGwuZT0wO3ZhciBBdXQsVkgscDd0LEx1dCxHSCxZNyxSND1OKCJqYXZhLm1hdGgiLCJCaWdJbnRlZ2VyIiw5MSksRWdlLFRnZSxFeCxvUztEKDQ4OCwxOTY3LGJ3KSxsLiRiPWZ1bmN0aW9uKCl7bmwodGhpcyl9LGwuX2I9ZnVuY3Rpb24oZSl7cmV0dXJuIE1sKHRoaXMsZSl9LGwudWM9ZnVuY3Rpb24oZSl7cmV0dXJuIGRyZSh0aGlzLGUsdGhpcy5nKXx8ZHJlKHRoaXMsZSx0aGlzLmYpfSxsLnZjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBrZyh0aGlzKX0sbC54Yz1mdW5jdGlvbihlKXtyZXR1cm4gdHIodGhpcyxlKX0sbC56Yz1mdW5jdGlvbihlLG4pe3JldHVybiBBaSh0aGlzLGUsbil9LGwuQmM9ZnVuY3Rpb24oZSl7cmV0dXJuIEc2KHRoaXMsZSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gJFQodGhpcyl9LE4oYnIsIkFic3RyYWN0SGFzaE1hcCIsNDg4KSxEKDI2MSxCMSxVdSxrZyksbC4kYj1mdW5jdGlvbigpe3RoaXMuYS4kYigpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBoWnQodGhpcyxlKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgZDIodGhpcy5hKX0sbC5NYz1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gaFp0KHRoaXMsZSk/KG49dShlLDQyKS5jZCgpLHRoaXMuYS5CYyhuKSwhMCk6ITF9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmdjKCl9LE4oYnIsIkFic3RyYWN0SGFzaE1hcC9FbnRyeVNldCIsMjYxKSxEKDI2MiwxLGRhLGQyKSxsLk5iPWZ1bmN0aW9uKGUpe0VhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gWXYodGhpcyl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxsLlFiPWZ1bmN0aW9uKCl7Y3RlKHRoaXMpfSxsLmI9ITEsTihiciwiQWJzdHJhY3RIYXNoTWFwL0VudHJ5U2V0SXRlcmF0b3IiLDI2MiksRCg0MTcsMSxkYSxoNiksbC5OYj1mdW5jdGlvbihlKXtFYSh0aGlzLGUpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIG1NKHRoaXMpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIE9YdCh0aGlzKX0sbC5RYj1mdW5jdGlvbigpe0RsKHRoaXMpfSxsLmI9MCxsLmM9LTEsTihiciwiQWJzdHJhY3RMaXN0L0l0ZXJhdG9ySW1wbCIsNDE3KSxEKDk2LDQxNyxKZCx4YSksbC5RYj1mdW5jdGlvbigpe0RsKHRoaXMpfSxsLlJiPWZ1bmN0aW9uKGUpe1JtKHRoaXMsZSl9LGwuU2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iPjB9LGwuVGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxsLlViPWZ1bmN0aW9uKCl7cmV0dXJuIFpuKHRoaXMuYj4wKSx0aGlzLmEuWGIodGhpcy5jPS0tdGhpcy5iKX0sbC5WYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmItMX0sbC5XYj1mdW5jdGlvbihlKXtQbSh0aGlzLmMhPS0xKSx0aGlzLmEuX2ModGhpcy5jLGUpfSxOKGJyLCJBYnN0cmFjdExpc3QvTGlzdEl0ZXJhdG9ySW1wbCIsOTYpLEQoMjE5LDUyLEw3LEtkKSxsLlZjPWZ1bmN0aW9uKGUsbil7VW0oZSx0aGlzLmIpLHRoaXMuYy5WYyh0aGlzLmErZSxuKSwrK3RoaXMuYn0sbC5YYj1mdW5jdGlvbihlKXtyZXR1cm4gU24oZSx0aGlzLmIpLHRoaXMuYy5YYih0aGlzLmErZSl9LGwuJGM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIFNuKGUsdGhpcy5iKSxuPXRoaXMuYy4kYyh0aGlzLmErZSksLS10aGlzLmIsbn0sbC5fYz1mdW5jdGlvbihlLG4pe3JldHVybiBTbihlLHRoaXMuYiksdGhpcy5jLl9jKHRoaXMuYStlLG4pfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5hPTAsbC5iPTAsTihiciwiQWJzdHJhY3RMaXN0L1N1Ykxpc3QiLDIxOSksRCgzODQsQjEsVXUsVG0pLGwuJGI9ZnVuY3Rpb24oKXt0aGlzLmEuJGIoKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLl9iKGUpfSxsLktjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5hLnZjKCkuS2MoKSxuZXcgck0oZSl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYS5fYihlKT8odGhpcy5hLkJjKGUpLCEwKTohMX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ2MoKX0sTihiciwiQWJzdHJhY3RNYXAvMSIsMzg0KSxEKDY5MSwxLGRhLHJNKSxsLk5iPWZ1bmN0aW9uKGUpe0VhKHRoaXMsZSl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLk9iKCl9LGwuUGI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT11KHRoaXMuYS5QYigpLDQyKSxlLmNkKCl9LGwuUWI9ZnVuY3Rpb24oKXt0aGlzLmEuUWIoKX0sTihiciwiQWJzdHJhY3RNYXAvMS8xIiw2OTEpLEQoMjI2LDI4LHd5LG0xKSxsLiRiPWZ1bmN0aW9uKCl7dGhpcy5hLiRiKCl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYS51YyhlKX0sbC5LYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuYS52YygpLktjKCksbmV3IHkxKGUpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nYygpfSxOKGJyLCJBYnN0cmFjdE1hcC8yIiwyMjYpLEQoMjk0LDEsZGEseTEpLGwuTmI9ZnVuY3Rpb24oZSl7RWEodGhpcyxlKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuT2IoKX0sbC5QYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXUodGhpcy5hLlBiKCksNDIpLGUuZGQoKX0sbC5RYj1mdW5jdGlvbigpe3RoaXMuYS5RYigpfSxOKGJyLCJBYnN0cmFjdE1hcC8yLzEiLDI5NCksRCg0ODQsMSx7NDg0OjEsNDI6MX0pLGwuRmI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIF90KGUsNDIpPyhuPXUoZSw0MiksUmModGhpcy5kLG4uY2QoKSkmJlJjKHRoaXMuZSxuLmRkKCkpKTohMX0sbC5jZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGwuZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEczKHRoaXMuZCleRzModGhpcy5lKX0sbC5lZD1mdW5jdGlvbihlKXtyZXR1cm4gWDJ0KHRoaXMsZSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kKyI9Iit0aGlzLmV9LE4oYnIsIkFic3RyYWN0TWFwL0Fic3RyYWN0RW50cnkiLDQ4NCksRCgzODMsNDg0LHs0ODQ6MSwzODM6MSw0MjoxfSxSUiksTihiciwiQWJzdHJhY3RNYXAvU2ltcGxlRW50cnkiLDM4MyksRCgxOTg0LDEsaG90KSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBfdChlLDQyKT8obj11KGUsNDIpLFJjKHRoaXMuY2QoKSxuLmNkKCkpJiZSYyh0aGlzLmRkKCksbi5kZCgpKSk6ITF9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gRzModGhpcy5jZCgpKV5HMyh0aGlzLmRkKCkpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2QoKSsiPSIrdGhpcy5kZCgpfSxOKGJyLFVoZSwxOTg0KSxEKDE5OTIsMTk2NyxWaGUpLGwudGM9ZnVuY3Rpb24oZSl7cmV0dXJuIG1KdCh0aGlzLGUpfSxsLl9iPWZ1bmN0aW9uKGUpe3JldHVybiB2bnQodGhpcyxlKX0sbC52Yz1mdW5jdGlvbigpe3JldHVybiBuZXcgeCh0aGlzKX0sbC54Yz1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbj1lLGNjKEx5dCh0aGlzLG4pKX0sbC5lYz1mdW5jdGlvbigpe3JldHVybiBuZXcgeSh0aGlzKX0sTihiciwiQWJzdHJhY3ROYXZpZ2FibGVNYXAiLDE5OTIpLEQoNzM5LEIxLFV1LHgpLGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsNDIpJiZtSnQodGhpcy5iLHUoZSw0MikpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB2Xyh0aGlzLmIpfSxsLk1jPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBfdChlLDQyKT8obj11KGUsNDIpLGF0ZSh0aGlzLmIsbikpOiExfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5jfSxOKGJyLCJBYnN0cmFjdE5hdmlnYWJsZU1hcC9FbnRyeVNldCIsNzM5KSxEKDQ5MyxCMSxTNnQseSksbC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcgRlIodGhpcyl9LGwuJGI9ZnVuY3Rpb24oKXtPVCh0aGlzLmEpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiB2bnQodGhpcy5hLGUpfSxsLktjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9bmV3IHZfKG5ldyBnXyh0aGlzLmEpLmIpLG5ldyBnKGUpfSxsLk1jPWZ1bmN0aW9uKGUpe3JldHVybiB2bnQodGhpcy5hLGUpPyhEXyh0aGlzLmEsZSksITApOiExfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5jfSxOKGJyLCJBYnN0cmFjdE5hdmlnYWJsZU1hcC9OYXZpZ2FibGVLZXlTZXQiLDQ5MyksRCg0OTQsMSxkYSxnKSxsLk5iPWZ1bmN0aW9uKGUpe0VhKHRoaXMsZSl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gbU0odGhpcy5hLmEpfSxsLlBiPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9d2oodGhpcy5hKSxlLmNkKCl9LGwuUWI9ZnVuY3Rpb24oKXt1S3QodGhpcy5hKX0sTihiciwiQWJzdHJhY3ROYXZpZ2FibGVNYXAvTmF2aWdhYmxlS2V5U2V0LzEiLDQ5NCksRCgyMDA0LDI4LHd5KSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiBBOChoNyh0aGlzLGUpKSwhMH0sbC5HYz1mdW5jdGlvbihlKXtyZXR1cm4gSW4oZSksQ2ooZSE9dGhpcywiQ2FuJ3QgYWRkIGEgcXVldWUgdG8gaXRzZWxmIiksS2EodGhpcyxlKX0sbC4kYj1mdW5jdGlvbigpe2Zvcig7SnJ0KHRoaXMpIT1udWxsOyk7fSxOKGJyLCJBYnN0cmFjdFF1ZXVlIiwyMDA0KSxEKDMwMiwyOCx7NDoxLDIwOjEsMjg6MSwxNDoxfSxGMyxGUXQpLGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIEt3dCh0aGlzLGUpLCEwfSxsLiRiPWZ1bmN0aW9uKCl7dG10KHRoaXMpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBGbmUobmV3IE1fKHRoaXMpLGUpfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIE5UKHRoaXMpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBNXyh0aGlzKX0sbC5NYz1mdW5jdGlvbihlKXtyZXR1cm4gZnJuKG5ldyBNXyh0aGlzKSxlKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMtdGhpcy5iJnRoaXMuYS5sZW5ndGgtMX0sbC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcgVG4odGhpcywyNzIpfSxsLlFjPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPXRoaXMuYy10aGlzLmImdGhpcy5hLmxlbmd0aC0xLGUubGVuZ3RoPG4mJihlPXdSKG5ldyBBcnJheShuKSxlKSksS2VlKHRoaXMsZSxuKSxlLmxlbmd0aD5uJiZscyhlLG4sbnVsbCksZX0sbC5iPTAsbC5jPTAsTihiciwiQXJyYXlEZXF1ZSIsMzAyKSxEKDQ0NiwxLGRhLE1fKSxsLk5iPWZ1bmN0aW9uKGUpe0VhKHRoaXMsZSl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hIT10aGlzLmJ9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gbXoodGhpcyl9LGwuUWI9ZnVuY3Rpb24oKXtOZWUodGhpcyl9LGwuYT0wLGwuYj0wLGwuYz0tMSxOKGJyLCJBcnJheURlcXVlL0l0ZXJhdG9ySW1wbCIsNDQ2KSxEKDEyLDUyLG9mZSxsZSxKYyxxdSksbC5WYz1mdW5jdGlvbihlLG4peyRtKHRoaXMsZSxuKX0sbC5GYz1mdW5jdGlvbihlKXtyZXR1cm4gdWUodGhpcyxlKX0sbC5XYz1mdW5jdGlvbihlLG4pe3JldHVybiBQeXQodGhpcyxlLG4pfSxsLkdjPWZ1bmN0aW9uKGUpe3JldHVybiBScyh0aGlzLGUpfSxsLiRiPWZ1bmN0aW9uKCl7dGhpcy5jPU50KFFuLE1lLDEsMCw1LDEpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBHbyh0aGlzLGUsMCkhPS0xfSxsLkpjPWZ1bmN0aW9uKGUpe191KHRoaXMsZSl9LGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIFBlKHRoaXMsZSl9LGwuWGM9ZnVuY3Rpb24oZSl7cmV0dXJuIEdvKHRoaXMsZSwwKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMubGVuZ3RoPT0wfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBTKHRoaXMpfSxsLiRjPWZ1bmN0aW9uKGUpe3JldHVybiBJZyh0aGlzLGUpfSxsLk1jPWZ1bmN0aW9uKGUpe3JldHVybiBFdSh0aGlzLGUpfSxsLlVkPWZ1bmN0aW9uKGUsbil7UFF0KHRoaXMsZSxuKX0sbC5fYz1mdW5jdGlvbihlLG4pe3JldHVybiBsaCh0aGlzLGUsbil9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLmxlbmd0aH0sbC5hZD1mdW5jdGlvbihlKXthYSh0aGlzLGUpfSxsLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIGFudCh0aGlzKX0sbC5RYz1mdW5jdGlvbihlKXtyZXR1cm4gUDEodGhpcyxlKX07dmFyIFg1bj1OKGJyLCJBcnJheUxpc3QiLDEyKTtEKDcsMSxkYSxTKSxsLk5iPWZ1bmN0aW9uKGUpe0VhKHRoaXMsZSl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gSm8odGhpcyl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gUSh0aGlzKX0sbC5RYj1mdW5jdGlvbigpe0NfKHRoaXMpfSxsLmE9MCxsLmI9LTEsTihiciwiQXJyYXlMaXN0LzEiLDcpLEQoMjAxMyxiLkZ1bmN0aW9uLHt9LGR0KSxsLnRlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGpzKGUsbil9LEQoMTU0LDUyLGNmZSxDbCksbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gRmVlKHRoaXMsZSkhPS0xfSxsLkpjPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvO2ZvcihJbihlKSxyPXRoaXMuYSxzPTAsbz1yLmxlbmd0aDtzPG87KytzKW49cltzXSxlLnRkKG4pfSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiBKS3QodGhpcyxlKX0sbC5fYz1mdW5jdGlvbihlLG4pe3ZhciByO3JldHVybiByPShTbihlLHRoaXMuYS5sZW5ndGgpLHRoaXMuYVtlXSksbHModGhpcy5hLGUsbikscn0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEubGVuZ3RofSxsLmFkPWZ1bmN0aW9uKGUpe0RudCh0aGlzLmEsdGhpcy5hLmxlbmd0aCxlKX0sbC5QYz1mdW5jdGlvbigpe3JldHVybiAkaWUodGhpcyxOdChRbixNZSwxLHRoaXMuYS5sZW5ndGgsNSwxKSl9LGwuUWM9ZnVuY3Rpb24oZSl7cmV0dXJuICRpZSh0aGlzLGUpfSxOKGJyLCJBcnJheXMvQXJyYXlMaXN0IiwxNTQpO3ZhciB1byxhMCxVSDtEKDk0MCw1MixjZmUsdHQpLGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuITF9LGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIFlidChlKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBwbigpLGU4KCksWDd9LGwuWWM9ZnVuY3Rpb24oKXtyZXR1cm4gcG4oKSxlOCgpLFg3fSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LE4oYnIsIkNvbGxlY3Rpb25zL0VtcHR5TGlzdCIsOTQwKSxEKDk0MSwxLEpkLFB0KSxsLk5iPWZ1bmN0aW9uKGUpe0VhKHRoaXMsZSl9LGwuUmI9ZnVuY3Rpb24oZSl7dGhyb3cgbnQobmV3IFByKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiExfSxsLlNiPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuUGI9ZnVuY3Rpb24oKXt0aHJvdyBudChuZXcgdmMpfSxsLlRiPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LGwuVWI9ZnVuY3Rpb24oKXt0aHJvdyBudChuZXcgdmMpfSxsLlZiPWZ1bmN0aW9uKCl7cmV0dXJuLTF9LGwuUWI9ZnVuY3Rpb24oKXt0aHJvdyBudChuZXcgUnUpfSxsLldiPWZ1bmN0aW9uKGUpe3Rocm93IG50KG5ldyBSdSl9O3ZhciBYNztOKGJyLCJDb2xsZWN0aW9ucy9FbXB0eUxpc3RJdGVyYXRvciIsOTQxKSxEKDk0MywxOTY3LFM3LHB0KSxsLl9iPWZ1bmN0aW9uKGUpe3JldHVybiExfSxsLnVjPWZ1bmN0aW9uKGUpe3JldHVybiExfSxsLnZjPWZ1bmN0aW9uKCl7cmV0dXJuIHBuKCksVUh9LGwueGM9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGx9LGwuZWM9ZnVuY3Rpb24oKXtyZXR1cm4gcG4oKSxVSH0sbC5nYz1mdW5jdGlvbigpe3JldHVybiAwfSxsLkNjPWZ1bmN0aW9uKCl7cmV0dXJuIHBuKCksdW99LE4oYnIsIkNvbGxlY3Rpb25zL0VtcHR5TWFwIiw5NDMpLEQoOTQyLEIxLEE3LEN0KSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiExfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHBuKCksZTgoKSxYN30sbC5nYz1mdW5jdGlvbigpe3JldHVybiAwfSxOKGJyLCJDb2xsZWN0aW9ucy9FbXB0eVNldCIsOTQyKSxEKDU5OSw1Mix7MzoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MX0sSSksbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gUmModGhpcy5hLGUpfSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiBTbihlLDEpLHRoaXMuYX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiAxfSxOKGJyLCJDb2xsZWN0aW9ucy9TaW5nbGV0b25MaXN0Iiw1OTkpLEQoMzcyLDEsWWhlLFQpLGwuSmM9ZnVuY3Rpb24oZSl7X2EodGhpcyxlKX0sbC5MYz1mdW5jdGlvbigpe3JldHVybiBuZXcga24obnVsbCx0aGlzLk5jKCkpfSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBUbih0aGlzLDApfSxsLk9jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBrbihudWxsLHRoaXMuTmMoKSl9LGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIGdIdCgpfSxsLkdjPWZ1bmN0aW9uKGUpe3JldHVybiBwSHQoKX0sbC4kYj1mdW5jdGlvbigpe2JIdCgpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBwTSh0aGlzLGUpfSxsLkljPWZ1bmN0aW9uKGUpe3JldHVybiByVnQodGhpcyxlKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuZGMoKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgTCh0aGlzLmIuS2MoKSl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHZIdCgpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5nYygpfSxsLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5QYygpfSxsLlFjPWZ1bmN0aW9uKGUpe3JldHVybiBpVnQodGhpcyxlKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBXbyh0aGlzLmIpfSxOKGJyLCJDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVDb2xsZWN0aW9uIiwzNzIpLEQoMzcxLDEsZGEsTCksbC5OYj1mdW5jdGlvbihlKXtFYSh0aGlzLGUpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5PYigpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5QYigpfSxsLlFiPWZ1bmN0aW9uKCl7d0h0KCl9LE4oYnIsIkNvbGxlY3Rpb25zL1VubW9kaWZpYWJsZUNvbGxlY3Rpb25JdGVyYXRvciIsMzcxKSxEKDUzMSwzNzIsdWZlLGZqKSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBUbih0aGlzLDE2KX0sbC5WYz1mdW5jdGlvbihlLG4pe3Rocm93IG50KG5ldyBQcil9LGwuV2M9ZnVuY3Rpb24oZSxuKXt0aHJvdyBudChuZXcgUHIpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBTaSh0aGlzLmEsZSl9LGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYS5YYihlKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBKaSh0aGlzLmEpfSxsLlhjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuWGMoZSl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmRjKCl9LGwuWWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHgydCh0aGlzLmEuWmMoMCkpfSxsLlpjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeDJ0KHRoaXMuYS5aYyhlKSl9LGwuJGM9ZnVuY3Rpb24oZSl7dGhyb3cgbnQobmV3IFByKX0sbC5fYz1mdW5jdGlvbihlLG4pe3Rocm93IG50KG5ldyBQcil9LGwuYWQ9ZnVuY3Rpb24oZSl7dGhyb3cgbnQobmV3IFByKX0sbC5iZD1mdW5jdGlvbihlLG4pe3JldHVybiBuZXcgZmoodGhpcy5hLmJkKGUsbikpfSxOKGJyLCJDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVMaXN0Iiw1MzEpLEQoNjkwLDM3MSxKZCx4MnQpLGwuUWI9ZnVuY3Rpb24oKXt3SHQoKX0sbC5SYj1mdW5jdGlvbihlKXt0aHJvdyBudChuZXcgUHIpfSxsLlNiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5TYigpfSxsLlRiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5UYigpfSxsLlViPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5VYigpfSxsLlZiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5WYigpfSxsLldiPWZ1bmN0aW9uKGUpe3Rocm93IG50KG5ldyBQcil9LE4oYnIsIkNvbGxlY3Rpb25zL1VubW9kaWZpYWJsZUxpc3RJdGVyYXRvciIsNjkwKSxEKDYwMCwxLGJ3LHopLGwud2M9ZnVuY3Rpb24oZSl7VV8odGhpcyxlKX0sbC55Yz1mdW5jdGlvbihlLG4scil7cmV0dXJuIHFpdCh0aGlzLGUsbixyKX0sbC4kYj1mdW5jdGlvbigpe3Rocm93IG50KG5ldyBQcil9LGwuX2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYy5fYihlKX0sbC51Yz1mdW5jdGlvbihlKXtyZXR1cm4gYVZ0KHRoaXMsZSl9LGwudmM9ZnVuY3Rpb24oKXtyZXR1cm4gbTgodGhpcyl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIG9WdCh0aGlzLGUpfSxsLnhjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmMueGMoZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gSmkodGhpcy5jKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMuZGMoKX0sbC5lYz1mdW5jdGlvbigpe3JldHVybiBnWHQodGhpcyl9LGwuemM9ZnVuY3Rpb24oZSxuKXt0aHJvdyBudChuZXcgUHIpfSxsLkJjPWZ1bmN0aW9uKGUpe3Rocm93IG50KG5ldyBQcil9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLmdjKCl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gV28odGhpcy5jKX0sbC5DYz1mdW5jdGlvbigpe3JldHVybiBkWHQodGhpcyl9LE4oYnIsIkNvbGxlY3Rpb25zL1VubW9kaWZpYWJsZU1hcCIsNjAwKSxEKDM4MiwzNzIsUmF0LFlrKSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBUbih0aGlzLDEpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBTaSh0aGlzLmIsZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gSmkodGhpcy5iKX0sTihiciwiQ29sbGVjdGlvbnMvVW5tb2RpZmlhYmxlU2V0IiwzODIpLEQoOTQ0LDM4MixSYXQsV3F0KSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBzVnQodGhpcyxlKX0sbC5JYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5iLkljKGUpfSxsLktjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5iLktjKCksbmV3IE8oZSl9LGwuUGM9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLmIuUGMoKSwkWnQoZSxlLmxlbmd0aCksZX0sbC5RYz1mdW5jdGlvbihlKXtyZXR1cm4gWVh0KHRoaXMsZSl9LE4oYnIsIkNvbGxlY3Rpb25zL1VubW9kaWZpYWJsZU1hcC9Vbm1vZGlmaWFibGVFbnRyeVNldCIsOTQ0KSxEKDk0NSwxLGRhLE8pLGwuTmI9ZnVuY3Rpb24oZSl7RWEodGhpcyxlKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiBuZXcgJCh1KHRoaXMuYS5QYigpLDQyKSl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLk9iKCl9LGwuUWI9ZnVuY3Rpb24oKXt0aHJvdyBudChuZXcgUHIpfSxOKGJyLCJDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVNYXAvVW5tb2RpZmlhYmxlRW50cnlTZXQvMSIsOTQ1KSxEKDY4OCwxLGhvdCwkKSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuRmIoZSl9LGwuY2Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmNkKCl9LGwuZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmRkKCl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLkhiKCl9LGwuZWQ9ZnVuY3Rpb24oZSl7dGhyb3cgbnQobmV3IFByKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBXbyh0aGlzLmEpfSxOKGJyLCJDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVNYXAvVW5tb2RpZmlhYmxlRW50cnlTZXQvVW5tb2RpZmlhYmxlRW50cnkiLDY4OCksRCg2MDEsNTMxLHsyMDoxLDE0OjEsMTU6MSw1NDoxfSx1ZXQpLE4oYnIsIkNvbGxlY3Rpb25zL1VubW9kaWZpYWJsZVJhbmRvbUFjY2Vzc0xpc3QiLDYwMSksRCg2ODksMzgyLFhoZSxrMnQpLGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEZSKHRoaXMpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBTaSh0aGlzLmEsZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gSmkodGhpcy5hKX0sTihiciwiQ29sbGVjdGlvbnMvVW5tb2RpZmlhYmxlU29ydGVkU2V0Iiw2ODkpLEQoODQ3LDEsZm90LHFlKSxsLnVlPWZ1bmN0aW9uKGUsbil7dmFyIHI7cmV0dXJuIHI9elp0KHUoZSwxMSksdShuLDExKSksciE9MD9yOlh1ZSh1KGUsMTEpLHUobiwxMSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZ3QodGhpcyl9LE4oYnIsIkNvbXBhcmF0b3IvbGFtYmRhJDAkVHlwZSIsODQ3KTt2YXIgYjd0LHY3dCx3N3Q7RCg3NTEsMSxmb3QsX24pLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gRHRuKHUoZSwzNSksdShuLDM1KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIFEzKCksdzd0fSxOKGJyLCJDb21wYXJhdG9ycy9OYXR1cmFsT3JkZXJDb21wYXJhdG9yIiw3NTEpLEQoMTE3NywxLGZvdCxUZSksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBJdG4odShlLDM1KSx1KG4sMzUpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gUTMoKSx2N3R9LE4oYnIsIkNvbXBhcmF0b3JzL1JldmVyc2VOYXR1cmFsT3JkZXJDb21wYXJhdG9yIiwxMTc3KSxEKDY0LDEsZm90LGd0KSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiB0aGlzLmEudWUobixlKX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LE4oYnIsIkNvbXBhcmF0b3JzL1JldmVyc2VkQ29tcGFyYXRvciIsNjQpLEQoMTY2LDYwLFUwLHNoKSxOKGJyLCJDb25jdXJyZW50TW9kaWZpY2F0aW9uRXhjZXB0aW9uIiwxNjYpO3ZhciBfZ2UsQ2dlO0QoMTkwNCwxLE5JLFduKSxsLndlPWZ1bmN0aW9uKGUpe2RpZSh0aGlzLGUpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIkRvdWJsZVN1bW1hcnlTdGF0aXN0aWNzW2NvdW50ID0gIitFXyh0aGlzLmEpKyIsIGF2ZyA9ICIrKFNWdCh0aGlzLmEsMCk/VEp0KHRoaXMpL0d2KHRoaXMuYSk6MCkrIiwgbWluID0gIit0aGlzLmMrIiwgbWF4ID0gIit0aGlzLmIrIiwgc3VtID0gIitUSnQodGhpcykrIl0ifSxsLmE9MCxsLmI9TnMsbC5jPWJzLGwuZD0wLGwuZT0wLGwuZj0wLE4oYnIsIkRvdWJsZVN1bW1hcnlTdGF0aXN0aWNzIiwxOTA0KSxEKDE4MDUsNjAsVTAsSHp0KSxOKGJyLCJFbXB0eVN0YWNrRXhjZXB0aW9uIiwxODA1KSxEKDQ1MSwxOTY3LGJ3LGVDKSxsLnpjPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFkydCh0aGlzLGUsbil9LGwuJGI9ZnVuY3Rpb24oKXtpWHQodGhpcyl9LGwuX2I9ZnVuY3Rpb24oZSl7cmV0dXJuIENWdCh0aGlzLGUpfSxsLnVjPWZ1bmN0aW9uKGUpe3ZhciBuLHI7Zm9yKHI9bmV3IGs2KHRoaXMuYSk7ci5hPHIuYy5hLmxlbmd0aDspaWYobj1GXyhyKSxSYyhlLHRoaXMuYltuLmddKSlyZXR1cm4hMDtyZXR1cm4hMX0sbC52Yz1mdW5jdGlvbigpe3JldHVybiBuZXcgTHQodGhpcyl9LGwueGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHhvKHRoaXMsZSl9LGwuQmM9ZnVuY3Rpb24oZSl7cmV0dXJuIFB3dCh0aGlzLGUpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5jfSxOKGJyLCJFbnVtTWFwIiw0NTEpLEQoMTM1MixCMSxVdSxMdCksbC4kYj1mdW5jdGlvbigpe2lYdCh0aGlzLmEpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBsWnQodGhpcyxlKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgUUt0KHRoaXMuYSl9LGwuTWM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIGxadCh0aGlzLGUpPyhuPXUoZSw0MikuY2QoKSxQd3QodGhpcy5hLG4pLCEwKTohMX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuYS5jfSxOKGJyLCJFbnVtTWFwL0VudHJ5U2V0IiwxMzUyKSxEKDEzNTMsMSxkYSxRS3QpLGwuTmI9ZnVuY3Rpb24oZSl7RWEodGhpcyxlKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmI9Rl8odGhpcy5hKSxuZXcgTFZ0KHRoaXMuYyx0aGlzLmIpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHMydCh0aGlzLmEpfSxsLlFiPWZ1bmN0aW9uKCl7UG0oISF0aGlzLmIpLFB3dCh0aGlzLmMsdGhpcy5iKSx0aGlzLmI9bnVsbH0sTihiciwiRW51bU1hcC9FbnRyeVNldEl0ZXJhdG9yIiwxMzUzKSxEKDEzNTQsMTk4NCxob3QsTFZ0KSxsLmNkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5kZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuYlt0aGlzLmEuZ119LGwuZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHN3dCh0aGlzLmIsdGhpcy5hLmcsZSl9LE4oYnIsIkVudW1NYXAvTWFwRW50cnkiLDEzNTQpLEQoMTc0LEIxLHsyMDoxLDI4OjEsMTQ6MSwxNzQ6MSwyMToxfSk7dmFyIFNnZT1OKGJyLCJFbnVtU2V0IiwxNzQpO0QoMTU2LDE3NCx7MjA6MSwyODoxLDE0OjEsMTc0OjEsMTU2OjEsMjE6MX0sb2gpLGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHdmKHRoaXMsdShlLDIyKSl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIEludCh0aGlzLGUpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBrNih0aGlzKX0sbC5NYz1mdW5jdGlvbihlKXtyZXR1cm4gaFl0KHRoaXMsZSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxsLmM9MCxOKGJyLCJFbnVtU2V0L0VudW1TZXRJbXBsIiwxNTYpLEQoMzQzLDEsZGEsazYpLGwuTmI9ZnVuY3Rpb24oZSl7RWEodGhpcyxlKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiBGXyh0aGlzKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiBzMnQodGhpcyl9LGwuUWI9ZnVuY3Rpb24oKXtQbSh0aGlzLmIhPS0xKSxscyh0aGlzLmMuYix0aGlzLmIsbnVsbCksLS10aGlzLmMuYyx0aGlzLmI9LTF9LGwuYT0tMSxsLmI9LTEsTihiciwiRW51bVNldC9FbnVtU2V0SW1wbC9JdGVyYXRvckltcGwiLDM0MyksRCg0Myw0ODgsUzQsQXIseDYsVkd0KSxsLnJlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEd0KGUpPT09R3Qobil8fGUhPW51bGwmJlNpKGUsbil9LGwuc2U9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49SmkoZSksbnwwfSxOKGJyLCJIYXNoTWFwIiw0MyksRCg1MyxCMSxONnQsUXMseFIseV8pLGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIFZzKHRoaXMsZSl9LGwuJGI9ZnVuY3Rpb24oKXt0aGlzLmEuJGIoKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gUzAodGhpcyxlKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ2MoKT09MH0sbC5LYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZWMoKS5LYygpfSxsLk1jPWZ1bmN0aW9uKGUpe3JldHVybiB1MnQodGhpcyxlKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ2MoKX07dmFyIFE1bj1OKGJyLCJIYXNoU2V0Iiw1Myk7RCgxNzgxLDEsQUksQWUpLGwudWQ9ZnVuY3Rpb24oZSl7VG5lKHRoaXMsZSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iSW50U3VtbWFyeVN0YXRpc3RpY3NbY291bnQgPSAiK0VfKHRoaXMuYSkrIiwgYXZnID0gIisoU1Z0KHRoaXMuYSwwKT9Hdih0aGlzLmQpL0d2KHRoaXMuYSk6MCkrIiwgbWluID0gIit0aGlzLmMrIiwgbWF4ID0gIit0aGlzLmIrIiwgc3VtID0gIitFXyh0aGlzLmQpKyJdIn0sbC5hPTAsbC5iPU9hLGwuYz1UaSxsLmQ9MCxOKGJyLCJJbnRTdW1tYXJ5U3RhdGlzdGljcyIsMTc4MSksRCgxMDQ5LDEsdDAsclV0KSxsLkpjPWZ1bmN0aW9uKGUpe19hKHRoaXMsZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEd3dCh0aGlzKX0sbC5jPTAsTihiciwiSW50ZXJuYWxIYXNoQ29kZU1hcCIsMTA0OSksRCg3MTEsMSxkYSxHd3QpLGwuTmI9ZnVuY3Rpb24oZSl7RWEodGhpcyxlKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmQ9dGhpcy5hW3RoaXMuYysrXSx0aGlzLmR9LGwuT2I9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gdGhpcy5jPHRoaXMuYS5sZW5ndGg/ITA6KGU9dGhpcy5iLm5leHQoKSxlLmRvbmU/ITE6KHRoaXMuYT1lLnZhbHVlWzFdLHRoaXMuYz0wLCEwKSl9LGwuUWI9ZnVuY3Rpb24oKXthNXQodGhpcy5lLHRoaXMuZC5jZCgpKSx0aGlzLmMhPTAmJi0tdGhpcy5jfSxsLmM9MCxsLmQ9bnVsbCxOKGJyLCJJbnRlcm5hbEhhc2hDb2RlTWFwLzEiLDcxMSk7dmFyIEFnZTtEKDEwNDcsMSx0MCxpVXQpLGwuSmM9ZnVuY3Rpb24oZSl7X2EodGhpcyxlKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgZW10KHRoaXMpfSxsLmM9MCxsLmQ9MCxOKGJyLCJJbnRlcm5hbFN0cmluZ01hcCIsMTA0NyksRCg3MTAsMSxkYSxlbXQpLGwuTmI9ZnVuY3Rpb24oZSl7RWEodGhpcyxlKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmM9dGhpcy5hLHRoaXMuYT10aGlzLmIubmV4dCgpLG5ldyBvS3QodGhpcy5kLHRoaXMuYyx0aGlzLmQuZCl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5hLmRvbmV9LGwuUWI9ZnVuY3Rpb24oKXtPbmUodGhpcy5kLHRoaXMuYy52YWx1ZVswXSl9LE4oYnIsIkludGVybmFsU3RyaW5nTWFwLzEiLDcxMCksRCgxMDQ4LDE5ODQsaG90LG9LdCksbC5jZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIudmFsdWVbMF19LGwuZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmQhPXRoaXMuYz9VVCh0aGlzLmEsdGhpcy5iLnZhbHVlWzBdKTp0aGlzLmIudmFsdWVbMV19LGwuZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG53KHRoaXMuYSx0aGlzLmIudmFsdWVbMF0sZSl9LGwuYz0wLE4oYnIsIkludGVybmFsU3RyaW5nTWFwLzIiLDEwNDgpLEQoMjI4LDQzLFM0LGkyLHltdCksbC4kYj1mdW5jdGlvbigpe1BXdCh0aGlzKX0sbC5fYj1mdW5jdGlvbihlKXtyZXR1cm4gQVZ0KHRoaXMsZSl9LGwudWM9ZnVuY3Rpb24oZSl7dmFyIG47Zm9yKG49dGhpcy5kLmE7biE9dGhpcy5kOyl7aWYoUmMobi5lLGUpKXJldHVybiEwO249bi5hfXJldHVybiExfSxsLnZjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEdCh0aGlzKX0sbC54Yz1mdW5jdGlvbihlKXtyZXR1cm4gV3YodGhpcyxlKX0sbC56Yz1mdW5jdGlvbihlLG4pe3JldHVybiB2Mih0aGlzLGUsbil9LGwuQmM9ZnVuY3Rpb24oZSl7cmV0dXJuIE90ZSh0aGlzLGUpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuICRUKHRoaXMuZSl9LGwuYz0hMSxOKGJyLCJMaW5rZWRIYXNoTWFwIiwyMjgpLEQoMzg3LDM4Myx7NDg0OjEsMzgzOjEsMzg3OjEsNDI6MX0sYVd0LEV2dCksTihiciwiTGlua2VkSGFzaE1hcC9DaGFpbkVudHJ5IiwzODcpLEQoNzAxLEIxLFV1LER0KSxsLiRiPWZ1bmN0aW9uKCl7UFd0KHRoaXMuYSl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZadCh0aGlzLGUpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB2d3QodGhpcyl9LGwuTWM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIGZadCh0aGlzLGUpPyhuPXUoZSw0MikuY2QoKSxPdGUodGhpcy5hLG4pLCEwKTohMX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiAkVCh0aGlzLmEuZSl9LE4oYnIsIkxpbmtlZEhhc2hNYXAvRW50cnlTZXQiLDcwMSksRCg3MDIsMSxkYSx2d3QpLGwuTmI9ZnVuY3Rpb24oZSl7RWEodGhpcyxlKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiB1dGUodGhpcyl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iIT10aGlzLmMuYS5kfSxsLlFiPWZ1bmN0aW9uKCl7UG0oISF0aGlzLmEpLENydCh0aGlzLmMuYS5lLHRoaXMpLE92dCh0aGlzLmEpLEc2KHRoaXMuYy5hLmUsdGhpcy5hLmQpLFIydCh0aGlzLmMuYS5lLHRoaXMpLHRoaXMuYT1udWxsfSxOKGJyLCJMaW5rZWRIYXNoTWFwL0VudHJ5U2V0L0VudHJ5SXRlcmF0b3IiLDcwMiksRCgxNzgsNTMsTjZ0LEEwLGludCxCdnQpO3ZhciBaNW49TihiciwiTGlua2VkSGFzaFNldCIsMTc4KTtEKDY4LDE5NjQsezM6MSw0OjEsMjA6MSwyODoxLDUyOjEsMTQ6MSw2ODoxLDE1OjF9LGNzLHdudCksbC5GYz1mdW5jdGlvbihlKXtyZXR1cm4gYWkodGhpcyxlKX0sbC4kYj1mdW5jdGlvbigpe01oKHRoaXMpfSxsLlpjPWZ1bmN0aW9uKGUpe3JldHVybiBzaSh0aGlzLGUpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5iPTA7dmFyIEo1bj1OKGJyLCJMaW5rZWRMaXN0Iiw2OCk7RCg5NzAsMSxKZCxjS3QpLGwuTmI9ZnVuY3Rpb24oZSl7RWEodGhpcyxlKX0sbC5SYj1mdW5jdGlvbihlKXtYTSh0aGlzLGUpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIGtSKHRoaXMpfSxsLlNiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5iIT10aGlzLmQuYX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiBpaSh0aGlzKX0sbC5UYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuVWI9ZnVuY3Rpb24oKXtyZXR1cm4gVHJ0KHRoaXMpfSxsLlZiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS0xfSxsLlFiPWZ1bmN0aW9uKCl7SCQodGhpcyl9LGwuV2I9ZnVuY3Rpb24oZSl7UG0oISF0aGlzLmMpLHRoaXMuYy5jPWV9LGwuYT0wLGwuYz1udWxsLE4oYnIsIkxpbmtlZExpc3QvTGlzdEl0ZXJhdG9ySW1wbCIsOTcwKSxEKDYwOCwxLHt9LEJ0KSxOKGJyLCJMaW5rZWRMaXN0L05vZGUiLDYwOCksRCgxOTU5LDEse30pO3ZhciBtN3QsTGdlO04oYnIsIkxvY2FsZSIsMTk1OSksRCg4NjEsMTk1OSx7fSx2dCksbC5JYj1mdW5jdGlvbigpe3JldHVybiIifSxOKGJyLCJMb2NhbGUvMSIsODYxKSxEKDg2MiwxOTU5LHt9LE90KSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuInVua25vd24ifSxOKGJyLCJMb2NhbGUvNCIsODYyKSxEKDEwOSw2MCx7MzoxLDEwMjoxLDYwOjEsNzg6MSwxMDk6MX0sdmMsYlh0KSxOKGJyLCJOb1N1Y2hFbGVtZW50RXhjZXB0aW9uIiwxMDkpLEQoNDA0LDEsezQwNDoxfSxnUiksbC5GYj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gZT09PXRoaXM/ITA6X3QoZSw0MDQpPyhuPXUoZSw0MDQpLFJjKHRoaXMuYSxuLmEpKTohMX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBHMyh0aGlzLmEpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYSE9bnVsbD9IaGUrZF8odGhpcy5hKSsiKSI6Ik9wdGlvbmFsLmVtcHR5KCkifTt2YXIgV0g7TihiciwiT3B0aW9uYWwiLDQwNCksRCg0NjMsMSx7NDYzOjF9LFlHdCxEMnQpLGwuRmI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIGU9PT10aGlzPyEwOl90KGUsNDYzKT8obj11KGUsNDYzKSx0aGlzLmE9PW4uYSYmanModGhpcy5iLG4uYik9PTApOiExfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYT9Dcyh0aGlzLmIpOjB9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hPyJPcHRpb25hbERvdWJsZS5vZigiKygiIit0aGlzLmIpKyIpIjoiT3B0aW9uYWxEb3VibGUuZW1wdHkoKSJ9LGwuYT0hMSxsLmI9MDt2YXIgeTd0O04oYnIsIk9wdGlvbmFsRG91YmxlIiw0NjMpLEQoNTE3LDEsezUxNzoxfSxYR3Qscld0KSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBlPT09dGhpcz8hMDpfdChlLDUxNyk/KG49dShlLDUxNyksdGhpcy5hPT1uLmEmJm11KHRoaXMuYixuLmIpPT0wKTohMX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmE/dGhpcy5iOjB9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hPyJPcHRpb25hbEludC5vZigiKygiIit0aGlzLmIpKyIpIjoiT3B0aW9uYWxJbnQuZW1wdHkoKSJ9LGwuYT0hMSxsLmI9MDt2YXIgTWdlO04oYnIsIk9wdGlvbmFsSW50Iiw1MTcpLEQoNTAzLDIwMDQsd3ksR2opLGwuR2M9ZnVuY3Rpb24oZSl7cmV0dXJuIEczdCh0aGlzLGUpfSxsLiRiPWZ1bmN0aW9uKCl7dGhpcy5iLmM9TnQoUW4sTWUsMSwwLDUsMSl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuKGU9PW51bGw/LTE6R28odGhpcy5iLGUsMCkpIT0tMX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgVih0aGlzKX0sbC5NYz1mdW5jdGlvbihlKXtyZXR1cm4gWWVlKHRoaXMsZSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLmMubGVuZ3RofSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBUbih0aGlzLDI1Nil9LGwuUGM9ZnVuY3Rpb24oKXtyZXR1cm4gYW50KHRoaXMuYil9LGwuUWM9ZnVuY3Rpb24oZSl7cmV0dXJuIFAxKHRoaXMuYixlKX0sTihiciwiUHJpb3JpdHlRdWV1ZSIsNTAzKSxEKDEyNzcsMSxkYSxWKSxsLk5iPWZ1bmN0aW9uKGUpe0VhKHRoaXMsZSl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hPHRoaXMuYy5iLmMubGVuZ3RofSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIFpuKHRoaXMuYTx0aGlzLmMuYi5jLmxlbmd0aCksdGhpcy5iPXRoaXMuYSsrLFBlKHRoaXMuYy5iLHRoaXMuYil9LGwuUWI9ZnVuY3Rpb24oKXtQbSh0aGlzLmIhPS0xKSx1aXQodGhpcy5jLHRoaXMuYT10aGlzLmIpLHRoaXMuYj0tMX0sbC5hPTAsbC5iPS0xLE4oYnIsIlByaW9yaXR5UXVldWUvMSIsMTI3NyksRCgyMzAsMSx7MjMwOjF9LEhpdCxUJCksbC5hPTAsbC5iPTA7dmFyIHg3dCxrN3QsdDZuPTA7TihiciwiUmFuZG9tIiwyMzApLEQoMjcsMSxOaCxUbixGdix3WHQpLGwucWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLnJkPWZ1bmN0aW9uKCl7cmV0dXJuIEp2dCh0aGlzKSx0aGlzLmN9LGwuTmI9ZnVuY3Rpb24oZSl7SnZ0KHRoaXMpLHRoaXMuZC5OYihlKX0sbC5zZD1mdW5jdGlvbihlKXtyZXR1cm4gcmVlKHRoaXMsZSl9LGwuYT0wLGwuYz0wLE4oYnIsIlNwbGl0ZXJhdG9ycy9JdGVyYXRvclNwbGl0ZXJhdG9yIiwyNyksRCg0ODUsMjcsTmgsRlIpLE4oYnIsIlNvcnRlZFNldC8xIiw0ODUpLEQoNjAyLDEsTkksVSksbC53ZT1mdW5jdGlvbihlKXt0aGlzLmEudGQoZSl9LE4oYnIsIlNwbGl0ZXJhdG9yL09mRG91YmxlLzBtZXRob2RyZWYkYWNjZXB0JFR5cGUiLDYwMiksRCg2MDMsMSxOSSxldCksbC53ZT1mdW5jdGlvbihlKXt0aGlzLmEudGQoZSl9LE4oYnIsIlNwbGl0ZXJhdG9yL09mRG91YmxlLzFtZXRob2RyZWYkYWNjZXB0JFR5cGUiLDYwMyksRCg2MDQsMSxBSSxhdCksbC51ZD1mdW5jdGlvbihlKXt0aGlzLmEudGQoZGUoZSkpfSxOKGJyLCJTcGxpdGVyYXRvci9PZkludC8ybWV0aG9kcmVmJGFjY2VwdCRUeXBlIiw2MDQpLEQoNjA1LDEsQUksbHQpLGwudWQ9ZnVuY3Rpb24oZSl7dGhpcy5hLnRkKGRlKGUpKX0sTihiciwiU3BsaXRlcmF0b3IvT2ZJbnQvM21ldGhvZHJlZiRhY2NlcHQkVHlwZSIsNjA1KSxEKDYxNywxLE5oKSxsLk5iPWZ1bmN0aW9uKGUpe3NidCh0aGlzLGUpfSxsLnFkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZH0sbC5yZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmV9LGwuZD0wLGwuZT0wLE4oYnIsIlNwbGl0ZXJhdG9ycy9CYXNlU3BsaXRlcmF0b3IiLDYxNyksRCg3MjEsNjE3LE5oKSxsLnhlPWZ1bmN0aW9uKGUpe1IzKHRoaXMsZSl9LGwuTmI9ZnVuY3Rpb24oZSl7X3QoZSwxODIpP1IzKHRoaXMsdShlLDE4MikpOlIzKHRoaXMsbmV3IGV0KGUpKX0sbC5zZD1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxODIpP3RoaXMueWUodShlLDE4MikpOnRoaXMueWUobmV3IFUoZSkpfSxOKGJyLCJTcGxpdGVyYXRvcnMvQWJzdHJhY3REb3VibGVTcGxpdGVyYXRvciIsNzIxKSxEKDcyMCw2MTcsTmgpLGwueGU9ZnVuY3Rpb24oZSl7UjModGhpcyxlKX0sbC5OYj1mdW5jdGlvbihlKXtfdChlLDE5Nik/UjModGhpcyx1KGUsMTk2KSk6UjModGhpcyxuZXcgbHQoZSkpfSxsLnNkPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE5Nik/dGhpcy55ZSh1KGUsMTk2KSk6dGhpcy55ZShuZXcgYXQoZSkpfSxOKGJyLCJTcGxpdGVyYXRvcnMvQWJzdHJhY3RJbnRTcGxpdGVyYXRvciIsNzIwKSxEKDU0MCw2MTcsTmgpLE4oYnIsIlNwbGl0ZXJhdG9ycy9BYnN0cmFjdFNwbGl0ZXJhdG9yIiw1NDApLEQoNjkyLDEsTmgpLGwuTmI9ZnVuY3Rpb24oZSl7c2J0KHRoaXMsZSl9LGwucWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxsLnJkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZC10aGlzLmN9LGwuYj0wLGwuYz0wLGwuZD0wLE4oYnIsIlNwbGl0ZXJhdG9ycy9CYXNlQXJyYXlTcGxpdGVyYXRvciIsNjkyKSxEKDk0Nyw2OTIsTmgsakt0KSxsLnplPWZ1bmN0aW9uKGUsbil7SEtlKHRoaXMsdShlLDM4KSxuKX0sbC5OYj1mdW5jdGlvbihlKXtRbnQodGhpcyxlKX0sbC5zZD1mdW5jdGlvbihlKXtyZXR1cm4gTSQodGhpcyxlKX0sTihiciwiU3BsaXRlcmF0b3JzL0FycmF5U3BsaXRlcmF0b3IiLDk0NyksRCg2OTMsNjkyLE5oLGlLdCksbC56ZT1mdW5jdGlvbihlLG4pe1ZLZSh0aGlzLHUoZSwxODIpLG4pfSxsLnhlPWZ1bmN0aW9uKGUpe1FudCh0aGlzLGUpfSxsLk5iPWZ1bmN0aW9uKGUpe190KGUsMTgyKT9RbnQodGhpcyx1KGUsMTgyKSk6UW50KHRoaXMsbmV3IGV0KGUpKX0sbC55ZT1mdW5jdGlvbihlKXtyZXR1cm4gTSQodGhpcyxlKX0sbC5zZD1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxODIpP00kKHRoaXMsdShlLDE4MikpOk0kKHRoaXMsbmV3IFUoZSkpfSxOKGJyLCJTcGxpdGVyYXRvcnMvRG91YmxlQXJyYXlTcGxpdGVyYXRvciIsNjkzKSxEKDE5NjgsMSxOaCksbC5OYj1mdW5jdGlvbihlKXtzYnQodGhpcyxlKX0sbC5xZD1mdW5jdGlvbigpe3JldHVybiAxNjQ0OH0sbC5yZD1mdW5jdGlvbigpe3JldHVybiAwfTt2YXIgRGdlO04oYnIsIlNwbGl0ZXJhdG9ycy9FbXB0eVNwbGl0ZXJhdG9yIiwxOTY4KSxEKDk0NiwxOTY4LE5oLEhlKSxsLnhlPWZ1bmN0aW9uKGUpe0ZrKGUpfSxsLk5iPWZ1bmN0aW9uKGUpe190KGUsMTk2KT9Gayh1KGUsMTk2KSk6RmsobmV3IGx0KGUpKX0sbC55ZT1mdW5jdGlvbihlKXtyZXR1cm4gYmJ0KGUpfSxsLnNkPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE5Nik/YmJ0KHUoZSwxOTYpKTpiYnQobmV3IGF0KGUpKX0sTihiciwiU3BsaXRlcmF0b3JzL0VtcHR5U3BsaXRlcmF0b3IvT2ZJbnQiLDk0NiksRCg1ODAsNTIsbGZlLGZSKSxsLlZjPWZ1bmN0aW9uKGUsbil7ZzgoZSx0aGlzLmEuYy5sZW5ndGgrMSksJG0odGhpcy5hLGUsbil9LGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHVlKHRoaXMuYSxlKX0sbC5XYz1mdW5jdGlvbihlLG4pe3JldHVybiBnOChlLHRoaXMuYS5jLmxlbmd0aCsxKSxQeXQodGhpcy5hLGUsbil9LGwuR2M9ZnVuY3Rpb24oZSl7cmV0dXJuIFJzKHRoaXMuYSxlKX0sbC4kYj1mdW5jdGlvbigpe3RoaXMuYS5jPU50KFFuLE1lLDEsMCw1LDEpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBHbyh0aGlzLmEsZSwwKSE9LTF9LGwuSWM9ZnVuY3Rpb24oZSl7cmV0dXJuIEREKHRoaXMuYSxlKX0sbC5KYz1mdW5jdGlvbihlKXtfdSh0aGlzLmEsZSl9LGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIGc4KGUsdGhpcy5hLmMubGVuZ3RoKSxQZSh0aGlzLmEsZSl9LGwuWGM9ZnVuY3Rpb24oZSl7cmV0dXJuIEdvKHRoaXMuYSxlLDApfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5jLmxlbmd0aD09MH0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgUyh0aGlzLmEpfSxsLiRjPWZ1bmN0aW9uKGUpe3JldHVybiBnOChlLHRoaXMuYS5jLmxlbmd0aCksSWcodGhpcy5hLGUpfSxsLlVkPWZ1bmN0aW9uKGUsbil7UFF0KHRoaXMuYSxlLG4pfSxsLl9jPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGc4KGUsdGhpcy5hLmMubGVuZ3RoKSxsaCh0aGlzLmEsZSxuKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuYy5sZW5ndGh9LGwuYWQ9ZnVuY3Rpb24oZSl7YWEodGhpcy5hLGUpfSxsLmJkPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG5ldyBLZCh0aGlzLmEsZSxuKX0sbC5QYz1mdW5jdGlvbigpe3JldHVybiBhbnQodGhpcy5hKX0sbC5RYz1mdW5jdGlvbihlKXtyZXR1cm4gUDEodGhpcy5hLGUpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIEpwKHRoaXMuYSl9LE4oYnIsIlZlY3RvciIsNTgwKSxEKDgwOSw1ODAsbGZlLElwdCksTihiciwiU3RhY2siLDgwOSksRCgyMDYsMSx7MjA2OjF9LGwyKSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIGladCh0aGlzKX0sTihiciwiU3RyaW5nSm9pbmVyIiwyMDYpLEQoNTQ0LDE5OTIsezM6MSw4MzoxLDE3MToxLDE2MToxfSxsVnQsam50KSxsLiRiPWZ1bmN0aW9uKCl7T1QodGhpcyl9LGwudmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGdfKHRoaXMpfSxsLnpjPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHB6KHRoaXMsZSxuKX0sbC5CYz1mdW5jdGlvbihlKXtyZXR1cm4gRF8odGhpcyxlKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGwuYz0wLE4oYnIsIlRyZWVNYXAiLDU0NCksRCgzOTAsMSxkYSx2XyksbC5OYj1mdW5jdGlvbihlKXtFYSh0aGlzLGUpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIHdqKHRoaXMpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIG1NKHRoaXMuYSl9LGwuUWI9ZnVuY3Rpb24oKXt1S3QodGhpcyl9LE4oYnIsIlRyZWVNYXAvRW50cnlJdGVyYXRvciIsMzkwKSxEKDQzNSw3MzksVXUsZ18pLGwuJGI9ZnVuY3Rpb24oKXtPVCh0aGlzLmEpfSxOKGJyLCJUcmVlTWFwL0VudHJ5U2V0Iiw0MzUpLEQoNDM2LDM4Myx7NDg0OjEsMzgzOjEsNDI6MSw0MzY6MX0scXJ0KSxsLmI9ITE7dmFyIGU2bj1OKGJyLCJUcmVlTWFwL05vZGUiLDQzNik7RCg2MjEsMSx7fSxWZSksbC5JYj1mdW5jdGlvbigpe3JldHVybiJTdGF0ZTogbXY9Iit0aGlzLmMrIiB2YWx1ZT0iK3RoaXMuZCsiIGRvbmU9Iit0aGlzLmErIiBmb3VuZD0iK3RoaXMuYn0sbC5hPSExLGwuYj0hMSxsLmM9ITEsTihiciwiVHJlZU1hcC9TdGF0ZSIsNjIxKSxEKDI5NywyMixwb3QsQlIpLGwuQWU9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5CZT1mdW5jdGlvbigpe3JldHVybiExfTt2YXIgTXV0LEU3dCxUN3QsXzd0LEtIPXpyKGJyLCJUcmVlTWFwL1N1Yk1hcFR5cGUiLDI5NyxVcixBaW4sc1plKTtEKDExMTIsMjk3LHBvdCxoVXQpLGwuQmU9ZnVuY3Rpb24oKXtyZXR1cm4hMH0senIoYnIsIlRyZWVNYXAvU3ViTWFwVHlwZS8xIiwxMTEyLEtILG51bGwsbnVsbCksRCgxMTEzLDI5Nyxwb3QsRVV0KSxsLkFlPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwuQmU9ZnVuY3Rpb24oKXtyZXR1cm4hMH0senIoYnIsIlRyZWVNYXAvU3ViTWFwVHlwZS8yIiwxMTEzLEtILG51bGwsbnVsbCksRCgxMTE0LDI5Nyxwb3QsZlV0KSxsLkFlPWZ1bmN0aW9uKCl7cmV0dXJuITB9LHpyKGJyLCJUcmVlTWFwL1N1Yk1hcFR5cGUvMyIsMTExNCxLSCxudWxsLG51bGwpO3ZhciBJZ2U7RCgyMDgsQjEsezM6MSwyMDoxLDI4OjEsMTQ6MSwyNzE6MSwyMToxLDg0OjEsMjA4OjF9LFNwdCxEcCksbC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcgRlIodGhpcyl9LGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIFlNKHRoaXMsZSl9LGwuJGI9ZnVuY3Rpb24oKXtPVCh0aGlzLmEpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiB2bnQodGhpcy5hLGUpfSxsLktjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9bmV3IHZfKG5ldyBnXyhuZXcgeSh0aGlzLmEpLmEpLmIpLG5ldyBnKGUpfSxsLk1jPWZ1bmN0aW9uKGUpe3JldHVybiBybnQodGhpcyxlKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuY307dmFyIG42bj1OKGJyLCJUcmVlU2V0IiwyMDgpO0QoOTY2LDEse30sSXQpLGwuQ2U9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gRVFlKHRoaXMuYSxlLG4pfSxOKGJvdCwiQmluYXJ5T3BlcmF0b3IvbGFtYmRhJDAkVHlwZSIsOTY2KSxEKDk2NywxLHt9LHp0KSxsLkNlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFRRZSh0aGlzLmEsZSxuKX0sTihib3QsIkJpbmFyeU9wZXJhdG9yL2xhbWJkYSQxJFR5cGUiLDk2NyksRCg4NDYsMSx7fSxFZSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gZX0sTihib3QsIkZ1bmN0aW9uL2xhbWJkYSQwJFR5cGUiLDg0NiksRCg0MzEsMSxnaSx0ZSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4hdGhpcy5hLk1iKGUpfSxOKGJvdCwiUHJlZGljYXRlL2xhbWJkYSQyJFR5cGUiLDQzMSksRCg1NzIsMSx7NTcyOjF9KTt2YXIgT2dlPU4oREMsIkhhbmRsZXIiLDU3Mik7RCgyMDA3LDEsQ0kpLGwubmU9ZnVuY3Rpb24oKXtyZXR1cm4iRFVNTVkifSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmUoKX07dmFyIEM3dDtOKERDLCJMZXZlbCIsMjAwNyksRCgxNjIxLDIwMDcsQ0ksQ2UpLGwubmU9ZnVuY3Rpb24oKXtyZXR1cm4iSU5GTyJ9LE4oREMsIkxldmVsL0xldmVsSW5mbyIsMTYyMSksRCgxNjQwLDEse30sS3p0KTt2YXIgRHV0O04oREMsIkxvZ01hbmFnZXIiLDE2NDApLEQoMTc4MCwxLENJLGxLdCksbC5iPW51bGwsTihEQywiTG9nUmVjb3JkIiwxNzgwKSxEKDUxMiwxLHs1MTI6MX0sT3J0KSxsLmU9ITE7dmFyIE5nZT0hMSxQZ2U9ITEsejE9ITEsRmdlPSExLEJnZT0hMTtOKERDLCJMb2dnZXIiLDUxMiksRCg4MTksNTcyLHs1NzI6MX0sJGUpLE4oREMsIlNpbXBsZUNvbnNvbGVMb2dIYW5kbGVyIiw4MTkpLEQoMTMyLDIyLHszOjEsMzU6MSwyMjoxLDEzMjoxfSx2ZXQpO3ZhciBTN3QsWWwsTHksd2w9enIoenMsIkNvbGxlY3Rvci9DaGFyYWN0ZXJpc3RpY3MiLDEzMixVcixfcm4sYVplKSxSZ2U7RCg3NDQsMSx7fSxpd3QpLE4oenMsIkNvbGxlY3RvckltcGwiLDc0NCksRCgxMDYwLDEse30seWUpLGwuQ2U9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gTXVuKHUoZSwyMDYpLHUobiwyMDYpKX0sTih6cywiQ29sbGVjdG9ycy8xMG1ldGhvZHJlZiRtZXJnZSRUeXBlIiwxMDYwKSxEKDEwNjEsMSx7fSxmbiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gaVp0KHUoZSwyMDYpKX0sTih6cywiQ29sbGVjdG9ycy8xMW1ldGhvZHJlZiR0b1N0cmluZyRUeXBlIiwxMDYxKSxEKDEwNjIsMSx7fSxYdCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gRm4oKSwhIVhidChlKX0sTih6cywiQ29sbGVjdG9ycy8xMm1ldGhvZHJlZiR0ZXN0JFR5cGUiLDEwNjIpLEQoMjUxLDEse30sbmUpLGwuT2Q9ZnVuY3Rpb24oZSxuKXt1KGUsMTQpLkZjKG4pfSxOKHpzLCJDb2xsZWN0b3JzLzIwbWV0aG9kcmVmJGFkZCRUeXBlIiwyNTEpLEQoMjUzLDEse30sa2UpLGwuRWU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGxlfSxOKHpzLCJDb2xsZWN0b3JzLzIxbWV0aG9kcmVmJGN0b3IkVHlwZSIsMjUzKSxEKDM0NiwxLHt9LFl0KSxsLkVlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBRc30sTih6cywiQ29sbGVjdG9ycy8yM21ldGhvZHJlZiRjdG9yJFR5cGUiLDM0NiksRCgzNDcsMSx7fSxNaSksbC5PZD1mdW5jdGlvbihlLG4pe1ZzKHUoZSw1Myksbil9LE4oenMsIkNvbGxlY3RvcnMvMjRtZXRob2RyZWYkYWRkJFR5cGUiLDM0NyksRCgxMDU1LDEse30scXQpLGwuQ2U9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gaFZ0KHUoZSwxNSksdShuLDE0KSl9LE4oenMsIkNvbGxlY3RvcnMvNG1ldGhvZHJlZiRhZGRBbGwkVHlwZSIsMTA1NSksRCgxMDU5LDEse30semkpLGwuT2Q9ZnVuY3Rpb24oZSxuKXtQMCh1KGUsMjA2KSx1KG4sNDc1KSl9LE4oenMsIkNvbGxlY3RvcnMvOW1ldGhvZHJlZiRhZGQkVHlwZSIsMTA1OSksRCgxMDU4LDEse30sU0t0KSxsLkVlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBsMih0aGlzLmEsdGhpcy5iLHRoaXMuYyl9LE4oenMsIkNvbGxlY3RvcnMvbGFtYmRhJDE1JFR5cGUiLDEwNTgpLEQoMTA2MywxLHt9LFNlKSxsLkVlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9bmV3IGkyLHYyKGUsKEZuKCksITEpLG5ldyBsZSksdjIoZSwhMCxuZXcgbGUpLGV9LE4oenMsIkNvbGxlY3RvcnMvbGFtYmRhJDIyJFR5cGUiLDEwNjMpLEQoMTA2NCwxLHt9LEh0KSxsLkVlPWZ1bmN0aW9uKCl7cmV0dXJuIHV0KG90KFFuLDEpLE1lLDEsNSxbdGhpcy5hXSl9LE4oenMsIkNvbGxlY3RvcnMvbGFtYmRhJDI1JFR5cGUiLDEwNjQpLEQoMTA2NSwxLHt9LGllKSxsLk9kPWZ1bmN0aW9uKGUsbil7T3RuKHRoaXMuYSxvMihlKSl9LE4oenMsIkNvbGxlY3RvcnMvbGFtYmRhJDI2JFR5cGUiLDEwNjUpLEQoMTA2NiwxLHt9LFV0KSxsLkNlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHNlbih0aGlzLmEsbzIoZSksbzIobikpfSxOKHpzLCJDb2xsZWN0b3JzL2xhbWJkYSQyNyRUeXBlIiwxMDY2KSxEKDEwNjcsMSx7fSxraSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gbzIoZSlbMF19LE4oenMsIkNvbGxlY3RvcnMvbGFtYmRhJDI4JFR5cGUiLDEwNjcpLEQoNzEzLDEse30sUmkpLGwuQ2U9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gUnZ0KGUsbil9LE4oenMsIkNvbGxlY3RvcnMvbGFtYmRhJDQkVHlwZSIsNzEzKSxEKDI1MiwxLHt9LHBpKSxsLkNlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGxZZSh1KGUsMTQpLHUobiwxNCkpfSxOKHpzLCJDb2xsZWN0b3JzL2xhbWJkYSQ0MiRUeXBlIiwyNTIpLEQoMzQ4LDEse30sYmkpLGwuQ2U9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gaFllKHUoZSw1MyksdShuLDUzKSl9LE4oenMsIkNvbGxlY3RvcnMvbGFtYmRhJDUwJFR5cGUiLDM0OCksRCgzNDksMSx7fSxkbiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDUzKX0sTih6cywiQ29sbGVjdG9ycy9sYW1iZGEkNTEkVHlwZSIsMzQ5KSxEKDEwNTQsMSx7fSxmZSksbC5PZD1mdW5jdGlvbihlLG4pe1djbih0aGlzLmEsdShlLDgzKSxuKX0sTih6cywiQ29sbGVjdG9ycy9sYW1iZGEkNyRUeXBlIiwxMDU0KSxEKDEwNTYsMSx7fSxObiksbC5DZT1mdW5jdGlvbihlLG4pe3JldHVybiB4Y24odShlLDgzKSx1KG4sODMpLG5ldyBxdCl9LE4oenMsIkNvbGxlY3RvcnMvbGFtYmRhJDgkVHlwZSIsMTA1NiksRCgxMDU3LDEse30sZ2UpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIGxsbih0aGlzLmEsdShlLDgzKSl9LE4oenMsIkNvbGxlY3RvcnMvbGFtYmRhJDkkVHlwZSIsMTA1NyksRCg1MzksMSx7fSksbC5IZT1mdW5jdGlvbigpe0xfKHRoaXMpfSxsLmQ9ITEsTih6cywiVGVybWluYXRhYmxlU3RyZWFtIiw1MzkpLEQoODEyLDUzOSxCNnQsejJ0KSxsLkhlPWZ1bmN0aW9uKCl7TF8odGhpcyl9LE4oenMsIkRvdWJsZVN0cmVhbUltcGwiLDgxMiksRCgxNzg0LDcyMSxOaCxBS3QpLGwueWU9ZnVuY3Rpb24oZSl7cmV0dXJuIHdmbih0aGlzLHUoZSwxODIpKX0sbC5hPW51bGwsTih6cywiRG91YmxlU3RyZWFtSW1wbC8yIiwxNzg0KSxEKDE3ODUsMSxOSSxzZSksbC53ZT1mdW5jdGlvbihlKXtyWGUodGhpcy5hLGUpfSxOKHpzLCJEb3VibGVTdHJlYW1JbXBsLzIvbGFtYmRhJDAkVHlwZSIsMTc4NSksRCgxNzgyLDEsTkksTmUpLGwud2U9ZnVuY3Rpb24oZSl7blhlKHRoaXMuYSxlKX0sTih6cywiRG91YmxlU3RyZWFtSW1wbC9sYW1iZGEkMCRUeXBlIiwxNzgyKSxEKDE3ODMsMSxOSSxwZSksbC53ZT1mdW5jdGlvbihlKXtkaWUodGhpcy5hLGUpfSxOKHpzLCJEb3VibGVTdHJlYW1JbXBsL2xhbWJkYSQyJFR5cGUiLDE3ODMpLEQoMTM1OCw3MjAsTmgscEp0KSxsLnllPWZ1bmN0aW9uKGUpe3JldHVybiB4aW4odGhpcyx1KGUsMTk2KSl9LGwuYT0wLGwuYj0wLGwuYz0wLE4oenMsIkludFN0cmVhbS81IiwxMzU4KSxEKDc4Nyw1MzksQjZ0LHEydCksbC5IZT1mdW5jdGlvbigpe0xfKHRoaXMpfSxsLkllPWZ1bmN0aW9uKCl7cmV0dXJuIHFwKHRoaXMpLHRoaXMuYX0sTih6cywiSW50U3RyZWFtSW1wbCIsNzg3KSxEKDc4OCw1MzksQjZ0LHVidCksbC5IZT1mdW5jdGlvbigpe0xfKHRoaXMpfSxsLkllPWZ1bmN0aW9uKCl7cmV0dXJuIHFwKHRoaXMpLGwydCgpLERnZX0sTih6cywiSW50U3RyZWFtSW1wbC9FbXB0eSIsNzg4KSxEKDE0NjMsMSxBSSxnbiksbC51ZD1mdW5jdGlvbihlKXtUbmUodGhpcy5hLGUpfSxOKHpzLCJJbnRTdHJlYW1JbXBsL2xhbWJkYSQ0JFR5cGUiLDE0NjMpO3ZhciByNm49YXMoenMsIlN0cmVhbSIpO0QoMzAsNTM5LHs1MjU6MSw2NzA6MSw4MzM6MX0sa24pLGwuSGU9ZnVuY3Rpb24oKXtMXyh0aGlzKX07dmFyIFE3O04oenMsIlN0cmVhbUltcGwiLDMwKSxEKDg0NSwxLHt9LFdyKSxsLmxkPWZ1bmN0aW9uKGUpe3JldHVybiBNS3QoZSl9LE4oenMsIlN0cmVhbUltcGwvMG1ldGhvZHJlZiRsYW1iZGEkMiRUeXBlIiw4NDUpLEQoMTA4NCw1NDAsTmgsckt0KSxsLnNkPWZ1bmN0aW9uKGUpe2Zvcig7aGFuKHRoaXMpOyl7aWYodGhpcy5hLnNkKGUpKXJldHVybiEwO0xfKHRoaXMuYiksdGhpcy5iPW51bGwsdGhpcy5hPW51bGx9cmV0dXJuITF9LE4oenMsIlN0cmVhbUltcGwvMSIsMTA4NCksRCgxMDg1LDEsS24samUpLGwudGQ9ZnVuY3Rpb24oZSl7b3RuKHRoaXMuYSx1KGUsODMzKSl9LE4oenMsIlN0cmVhbUltcGwvMS9sYW1iZGEkMCRUeXBlIiwxMDg1KSxEKDEwODYsMSxnaSxHZSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gVnModGhpcy5hLGUpfSxOKHpzLCJTdHJlYW1JbXBsLzFtZXRob2RyZWYkYWRkJFR5cGUiLDEwODYpLEQoMTA4Nyw1NDAsTmgsSVh0KSxsLnNkPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiB0aGlzLmF8fChuPW5ldyBsZSx0aGlzLmIuYS5OYihuZXcgeG4obikpLHBuKCksYWEobix0aGlzLmMpLHRoaXMuYT1uZXcgVG4obiwxNikpLHJlZSh0aGlzLmEsZSl9LGwuYT1udWxsLE4oenMsIlN0cmVhbUltcGwvNSIsMTA4NyksRCgxMDg4LDEsS24seG4pLGwudGQ9ZnVuY3Rpb24oZSl7dWUodGhpcy5hLGUpfSxOKHpzLCJTdHJlYW1JbXBsLzUvMm1ldGhvZHJlZiRhZGQkVHlwZSIsMTA4OCksRCg3MjIsNTQwLE5oLENtdCksbC5zZD1mdW5jdGlvbihlKXtmb3IodGhpcy5iPSExOyF0aGlzLmImJnRoaXMuYy5zZChuZXcgRFZ0KHRoaXMsZSkpOyk7cmV0dXJuIHRoaXMuYn0sbC5iPSExLE4oenMsIlN0cmVhbUltcGwvRmlsdGVyU3BsaXRlcmF0b3IiLDcyMiksRCgxMDc5LDEsS24sRFZ0KSxsLnRkPWZ1bmN0aW9uKGUpe2llbih0aGlzLmEsdGhpcy5iLGUpfSxOKHpzLCJTdHJlYW1JbXBsL0ZpbHRlclNwbGl0ZXJhdG9yL2xhbWJkYSQwJFR5cGUiLDEwNzkpLEQoMTA3NSw3MjEsTmgsU0p0KSxsLnllPWZ1bmN0aW9uKGUpe3JldHVybiBXUWUodGhpcyx1KGUsMTgyKSl9LE4oenMsIlN0cmVhbUltcGwvTWFwVG9Eb3VibGVTcGxpdGVyYXRvciIsMTA3NSksRCgxMDc4LDEsS24sSVZ0KSxsLnRkPWZ1bmN0aW9uKGUpe19ZZSh0aGlzLmEsdGhpcy5iLGUpfSxOKHpzLCJTdHJlYW1JbXBsL01hcFRvRG91YmxlU3BsaXRlcmF0b3IvbGFtYmRhJDAkVHlwZSIsMTA3OCksRCgxMDc0LDcyMCxOaCxBSnQpLGwueWU9ZnVuY3Rpb24oZSl7cmV0dXJuIEtRZSh0aGlzLHUoZSwxOTYpKX0sTih6cywiU3RyZWFtSW1wbC9NYXBUb0ludFNwbGl0ZXJhdG9yIiwxMDc0KSxEKDEwNzcsMSxLbixPVnQpLGwudGQ9ZnVuY3Rpb24oZSl7VFllKHRoaXMuYSx0aGlzLmIsZSl9LE4oenMsIlN0cmVhbUltcGwvTWFwVG9JbnRTcGxpdGVyYXRvci9sYW1iZGEkMCRUeXBlIiwxMDc3KSxEKDcxOSw1NDAsTmgsZ210KSxsLnNkPWZ1bmN0aW9uKGUpe3JldHVybiB0S3QodGhpcyxlKX0sTih6cywiU3RyZWFtSW1wbC9NYXBUb09ialNwbGl0ZXJhdG9yIiw3MTkpLEQoMTA3NiwxLEtuLE5WdCksbC50ZD1mdW5jdGlvbihlKXtDWWUodGhpcy5hLHRoaXMuYixlKX0sTih6cywiU3RyZWFtSW1wbC9NYXBUb09ialNwbGl0ZXJhdG9yL2xhbWJkYSQwJFR5cGUiLDEwNzYpLEQoNjE4LDEsS24sTGkpLGwudGQ9ZnVuY3Rpb24oZSl7bXR0KHRoaXMsZSl9LE4oenMsIlN0cmVhbUltcGwvVmFsdWVDb25zdW1lciIsNjE4KSxEKDEwODAsMSxLbixpcyksbC50ZD1mdW5jdGlvbihlKXtZYigpfSxOKHpzLCJTdHJlYW1JbXBsL2xhbWJkYSQwJFR5cGUiLDEwODApLEQoMTA4MSwxLEtuLFRzKSxsLnRkPWZ1bmN0aW9uKGUpe1liKCl9LE4oenMsIlN0cmVhbUltcGwvbGFtYmRhJDEkVHlwZSIsMTA4MSksRCgxMDgyLDEse30sRG4pLGwuQ2U9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gVFplKHRoaXMuYSxlLG4pfSxOKHpzLCJTdHJlYW1JbXBsL2xhbWJkYSQ0JFR5cGUiLDEwODIpLEQoMTA4MywxLEtuLE1WdCksbC50ZD1mdW5jdGlvbihlKXtOUWUodGhpcy5iLHRoaXMuYSxlKX0sTih6cywiU3RyZWFtSW1wbC9sYW1iZGEkNSRUeXBlIiwxMDgzKSxEKDEwODksMSxLbixYbiksbC50ZD1mdW5jdGlvbihlKXskY24odGhpcy5hLHUoZSwzNjUpKX0sTih6cywiVGVybWluYXRhYmxlU3RyZWFtL2xhbWJkYSQwJFR5cGUiLDEwODkpLEQoMjA0MSwxLHt9KSxEKDE5MTQsMSx7fSxBYSksTigiamF2YWVtdWwuaW50ZXJuYWwiLCJDb25zb2xlTG9nZ2VyIiwxOTE0KSxEKDIwMzgsMSx7fSk7dmFyIGk2bj0wLEE3dCxMN3Q9MCxZSDtEKDE3NjgsMSxLbixYaSksbC50ZD1mdW5jdGlvbihlKXt1KGUsMzA4KX0sTihENywiQm93eWVyV2F0c29uVHJpYW5ndWxhdGlvbi9sYW1iZGEkMCRUeXBlIiwxNzY4KSxEKDE3NjksMSxLbixDbiksbC50ZD1mdW5jdGlvbihlKXtLYSh0aGlzLmEsdShlLDMwOCkuZSl9LE4oRDcsIkJvd3llcldhdHNvblRyaWFuZ3VsYXRpb24vbGFtYmRhJDEkVHlwZSIsMTc2OSksRCgxNzcwLDEsS24sR2EpLGwudGQ9ZnVuY3Rpb24oZSl7dShlLDE2OCl9LE4oRDcsIkJvd3llcldhdHNvblRyaWFuZ3VsYXRpb24vbGFtYmRhJDIkVHlwZSIsMTc3MCksRCgxNzY1LDEscWksWW4pLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdHNuKHRoaXMuYSx1KGUsMTY4KSx1KG4sMTY4KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBndCh0aGlzKX0sTihENywiTmFpdmVNaW5TVC9sYW1iZGEkMCRUeXBlIiwxNzY1KSxEKDQ5OSwxLHt9LHJyKSxOKEQ3LCJOb2RlTWljcm9MYXlvdXQiLDQ5OSksRCgxNjgsMSx7MTY4OjF9LEU2KSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBfdChlLDE2OCk/KG49dShlLDE2OCksUmModGhpcy5hLG4uYSkmJlJjKHRoaXMuYixuLmIpfHxSYyh0aGlzLmEsbi5iKSYmUmModGhpcy5iLG4uYSkpOiExfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEczKHRoaXMuYSkrRzModGhpcy5iKX07dmFyIHM2bj1OKEQ3LCJURWRnZSIsMTY4KTtEKDMwOCwxLHszMDg6MX0sZTZ0KSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBfdChlLDMwOCk/KG49dShlLDMwOCksQiQodGhpcyxuLmEpJiZCJCh0aGlzLG4uYikmJkIkKHRoaXMsbi5jKSk6ITF9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gRzModGhpcy5hKStHMyh0aGlzLmIpK0czKHRoaXMuYyl9LE4oRDcsIlRUcmlhbmdsZSIsMzA4KSxEKDIyMSwxLHsyMjE6MX0sY2opLE4oRDcsIlRyZWUiLDIyMSksRCgxMjU0LDEse30sbVF0KSxOKGRmZSwiU2NhbmxpbmUiLDEyNTQpO3ZhciBqZ2U9YXMoZGZlLGdmZSk7RCgxNjkyLDEse30sb2VlKSxOKHIwLCJDR3JhcGgiLDE2OTIpLEQoMzA3LDEsezMwNzoxfSxnUXQpLGwuYj0wLGwuYz0wLGwuZD0wLGwuZz0wLGwuaT0wLGwuaz1OcyxOKHIwLCJDR3JvdXAiLDMwNyksRCg4MTUsMSx7fSxBcHQpLE4ocjAsIkNHcm91cC9DR3JvdXBCdWlsZGVyIiw4MTUpLEQoNTcsMSx7NTc6MX0sUld0KSxsLkliPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuaj9qcih0aGlzLmouS2IodGhpcykpOihMMChYSCksWEgubysiQCIrKGU9RHYodGhpcyk+Pj4wLGUudG9TdHJpbmcoMTYpKSl9LGwuZj0wLGwuaT1Oczt2YXIgWEg9TihyMCwiQ05vZGUiLDU3KTtEKDgxNCwxLHt9LExwdCksTihyMCwiQ05vZGUvQ05vZGVCdWlsZGVyIiw4MTQpO3ZhciAkZ2U7RCgxNTI1LDEse30sX3IpLGwuT2U9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gMH0sbC5QZT1mdW5jdGlvbihlLG4pe3JldHVybiAwfSxOKHIwLGJmZSwxNTI1KSxEKDE3OTAsMSx7fSxxciksbC5MZT1mdW5jdGlvbihlKXt2YXIgbixyLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFo7Zm9yKF89YnMscz1uZXcgUyhlLmEuYik7cy5hPHMuYy5jLmxlbmd0aDspbj11KFEocyksNTcpLF89Yi5NYXRoLm1pbihfLG4uYS5qLmQuYytuLmIuYSk7Zm9yKEc9bmV3IGNzLGQ9bmV3IFMoZS5hLmEpO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShRKGQpLDMwNyksaC5rPV8saC5nPT0wJiZrcyhHLGgsRy5jLmIsRy5jKTtmb3IoO0cuYiE9MDspe2ZvcihoPXUoRy5iPT0wP251bGw6KFpuKEcuYiE9MCksZmgoRyxHLmEuYSkpLDMwNyksbz1oLmouZC5jLHE9aC5hLmEuZWMoKS5LYygpO3EuT2IoKTspTT11KHEuUGIoKSw1NyksWj1oLmsrTS5iLmEsIWJ1bihlLGgsZS5kKXx8TS5kLmM8Wj9NLmk9WjpNLmk9TS5kLmM7Zm9yKG8tPWguai5pLGguYis9byxlLmQ9PShmbygpLF9mKXx8ZS5kPT1RMD9oLmMrPW86aC5jLT1vLEI9aC5hLmEuZWMoKS5LYygpO0IuT2IoKTspZm9yKE09dShCLlBiKCksNTcpLGs9TS5jLktjKCk7ay5PYigpOyl3PXUoay5QYigpLDU3KSxQcChlLmQpP1c9ZS5nLk9lKE0sdyk6Vz1lLmcuUGUoTSx3KSx3LmEuaz1iLk1hdGgubWF4KHcuYS5rLE0uaStNLmQuYitXLXcuYi5hKSwkWHQoZSx3LGUuZCkmJih3LmEuaz1iLk1hdGgubWF4KHcuYS5rLHcuZC5jLXcuYi5hKSksLS13LmEuZyx3LmEuZz09MCYmYWkoRyx3LmEpfWZvcihyPW5ldyBTKGUuYS5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoUShyKSw1Nyksbi5kLmM9bi5pfSxOKHIwLCJMb25nZXN0UGF0aENvbXBhY3Rpb24iLDE3OTApLEQoMTY5MCwxLHt9LE5vZSksbC5lPSExO3ZhciB6Z2UscWdlLEhnZSxJdXQ9TihyMCxtZmUsMTY5MCk7RCgxNjkxLDEsS24sd3IpLGwudGQ9ZnVuY3Rpb24oZSl7d2NuKHRoaXMuYSx1KGUsNDYpKX0sTihyMCx5ZmUsMTY5MSksRCgxNzkxLDEse30sT2kpLGwuTWU9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHc7Zm9yKHI9bmV3IFMoZS5hLmIpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShRKHIpLDU3KSxuLmMuJGIoKTtmb3Iobz1uZXcgUyhlLmEuYik7by5hPG8uYy5jLmxlbmd0aDspZm9yKHM9dShRKG8pLDU3KSxkPW5ldyBTKGUuYS5iKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoUShkKSw1NykscyE9aCYmKHMuYSYmcy5hPT1oLmF8fChQcChlLmQpP3c9ZS5nLlBlKHMsaCk6dz1lLmcuT2UocyxoKSwoaC5kLmM+cy5kLmN8fHMuZC5jPT1oLmQuYyYmcy5kLmI8aC5kLmIpJiZyaG4oaC5kLmQraC5kLmErdyxzLmQuZCkmJmszdChoLmQuZCxzLmQuZCtzLmQuYSt3KSYmcy5jLkZjKGgpKSl9LE4ocjAsIlF1YWRyYXRpY0NvbnN0cmFpbnRDYWxjdWxhdGlvbiIsMTc5MSksRCg1MjIsMSx7NTIyOjF9LFZ0dCksbC5hPSExLGwuYj0hMSxsLmM9ITEsbC5kPSExLE4ocjAseGZlLDUyMiksRCg4MDMsMSx7fSxWdnQpLGwuTWU9ZnVuY3Rpb24oZSl7dGhpcy5jPWUsYUkodGhpcyxuZXcgVm4pfSxOKHIwLGtmZSw4MDMpLEQoMTcxOCwxLHs2Nzk6MX0scVh0KSxsLktlPWZ1bmN0aW9uKGUpe2Rnbih0aGlzLHUoZSw0NjQpKX0sTihyMCxFZmUsMTcxOCksRCgxNzE5LDEscWksZ3IpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZ25uKHUoZSw1NyksdShuLDU3KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBndCh0aGlzKX0sTihyMCxUZmUsMTcxOSksRCg0NjQsMSx7NDY0OjF9LG1idCksbC5hPSExLE4ocjAsX2ZlLDQ2NCksRCgxNzIwLDEscWksSnMpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gXzFuKHUoZSw0NjQpLHUobiw0NjQpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGd0KHRoaXMpfSxOKHIwLENmZSwxNzIwKSxEKDE3MjEsMSxtZCxWbiksbC5MYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDU3KSwhMH0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSw1NyksITB9LE4ocjAsIlNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0b3IvbGFtYmRhJDEkVHlwZSIsMTcyMSksRCg0MjgsMjIsezM6MSwzNToxLDIyOjEsNDI4OjF9LGtidCk7dmFyIE03dCxPdXQsRDd0PXpyKHlvdCwiSGlnaExldmVsU29ydGluZ0NyaXRlcmlvbiIsNDI4LFVyLHRybixvWmUpLFZnZTtEKDQyNywyMix7MzoxLDM1OjEsMjI6MSw0Mjc6MX0sRWJ0KTt2YXIgSTd0LE51dCxPN3Q9enIoeW90LCJMb3dMZXZlbFNvcnRpbmdDcml0ZXJpb24iLDQyNyxVcixlcm4sY1plKSxHZ2UsajQ9YXMoc2MsIklMYXlvdXRNZXRhRGF0YVByb3ZpZGVyIik7RCg4NTMsMSxQaCxVTCksbC5RZT1mdW5jdGlvbihlKXthbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsejZ0KSx4b3QpLCJQb2x5b21pbm8gVHJhdmVyc2FsIFN0cmF0ZWd5IiksIlRyYXZlcnNhbCBzdHJhdGVneSBmb3IgdHJ5aW5nIGRpZmZlcmVudCBjYW5kaWRhdGUgcG9zaXRpb25zIGZvciBwb2x5b21pbm9lcy4iKSwkN3QpLChIZygpLG1zKSksWTd0KSxvbigodDEoKSxxbikpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxxNnQpLHhvdCksIlBvbHlvbWlubyBTZWNvbmRhcnkgU29ydGluZyBDcml0ZXJpb24iKSwiUG9zc2libGUgc2Vjb25kYXJ5IHNvcnRpbmcgY3JpdGVyaWEgZm9yIHRoZSBwcm9jZXNzaW5nIG9yZGVyIG9mIHBvbHlvbWlub2VzLiBUaGV5IGFyZSB1c2VkIHdoZW4gcG9seW9taW5vZXMgYXJlIGVxdWFsIGFjY29yZGluZyB0byB0aGUgcHJpbWFyeSBzb3J0aW5nIGNyaXRlcmlvbiBIaWdoTGV2ZWxTb3J0aW5nQ3JpdGVyaW9uLiIpLFI3dCksbXMpLE83dCksb24ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxINnQpLHhvdCksIlBvbHlvbWlubyBQcmltYXJ5IFNvcnRpbmcgQ3JpdGVyaW9uIiksIlBvc3NpYmxlIHByaW1hcnkgc29ydGluZyBjcml0ZXJpYSBmb3IgdGhlIHByb2Nlc3Npbmcgb3JkZXIgb2YgcG9seW9taW5vZXMuIiksRjd0KSxtcyksRDd0KSxvbihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLFY2dCkseG90KSwiRmlsbCBQb2x5b21pbm9lcyIpLCJVc2UgdGhlIFByb2ZpbGUgRmlsbCBhbGdvcml0aG0gdG8gZmlsbCBwb2x5b21pbm9lcyB0byBwcmV2ZW50IHNtYWxsIHBvbHlvbWlub2VzIGZyb20gYmVpbmcgcGxhY2VkIGluc2lkZSBvZiBiaWcgcG9seW9taW5vZXMgd2l0aCBsYXJnZSBob2xlcy4gTWlnaHQgaW5jcmVhc2UgcGFja2luZyBhcmVhLiIpLChGbigpLCEwKSksUGEpLFdzKSxvbihxbikpKSl9O3ZhciBON3QsUDd0LEY3dCxCN3QsUjd0LGo3dCwkN3Q7Tih5b3QsIlBvbHlvbWlub09wdGlvbnMiLDg1MyksRCgyNTAsMjIsezM6MSwzNToxLDIyOjEsMjUwOjF9LCQzKTt2YXIgejd0LHE3dCxIN3QsVjd0LEc3dCxVN3QsUHV0LFc3dCxLN3QsWTd0PXpyKHlvdCwiVHJhdmVyc2FsU3RyYXRlZ3kiLDI1MCxVcixnb24sdVplKSxVZ2U7RCgyMTMsMSx7MjEzOjF9LFhjKSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIk5FZGdlW2lkPSIrdGhpcy5iKyIgdz0iK3RoaXMuZysiIGQ9Iit0aGlzLmErIl0ifSxsLmE9MSxsLmI9MCxsLmM9MCxsLmY9ITEsbC5nPTA7dmFyIFdnZT1OKElDLCJORWRnZSIsMjEzKTtEKDE3NiwxLHt9LFNoKSxOKElDLCJORWRnZS9ORWRnZUJ1aWxkZXIiLDE3NiksRCg2NTMsMSx7fSxVdHQpLE4oSUMsIk5HcmFwaCIsNjUzKSxEKDEyMSwxLHsxMjE6MX0sX0p0KSxsLmM9LTEsbC5kPTAsbC5lPTAsbC5pPS0xLGwuaj0hMTt2YXIgWDd0PU4oSUMsIk5Ob2RlIiwxMjEpO0QoNzk1LDEsdWZlLF9wdCksbC5KYz1mdW5jdGlvbihlKXtfYSh0aGlzLGUpfSxsLkxjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBrbihudWxsLG5ldyBUbih0aGlzLDE2KSl9LGwuYWQ9ZnVuY3Rpb24oZSl7bjQodGhpcyxlKX0sbC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcgVG4odGhpcywxNil9LGwuT2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGtuKG51bGwsbmV3IFRuKHRoaXMsMTYpKX0sbC5WYz1mdW5jdGlvbihlLG4peysrdGhpcy5iLCRtKHRoaXMuYSxlLG4pfSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiBwaih0aGlzLGUpfSxsLldjPWZ1bmN0aW9uKGUsbil7cmV0dXJuKyt0aGlzLmIsUHl0KHRoaXMuYSxlLG4pfSxsLkdjPWZ1bmN0aW9uKGUpe3JldHVybisrdGhpcy5iLFJzKHRoaXMuYSxlKX0sbC4kYj1mdW5jdGlvbigpeysrdGhpcy5iLHRoaXMuYS5jPU50KFFuLE1lLDEsMCw1LDEpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBHbyh0aGlzLmEsZSwwKSE9LTF9LGwuSWM9ZnVuY3Rpb24oZSl7cmV0dXJuIEREKHRoaXMuYSxlKX0sbC5YYj1mdW5jdGlvbihlKXtyZXR1cm4gUGUodGhpcy5hLGUpfSxsLlhjPWZ1bmN0aW9uKGUpe3JldHVybiBHbyh0aGlzLmEsZSwwKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuYy5sZW5ndGg9PTB9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gVzYobmV3IFModGhpcy5hKSl9LGwuWWM9ZnVuY3Rpb24oKXt0aHJvdyBudChuZXcgUHIpfSxsLlpjPWZ1bmN0aW9uKGUpe3Rocm93IG50KG5ldyBQcil9LGwuJGM9ZnVuY3Rpb24oZSl7cmV0dXJuKyt0aGlzLmIsSWcodGhpcy5hLGUpfSxsLk1jPWZ1bmN0aW9uKGUpe3JldHVybiBDMnQodGhpcyxlKX0sbC5fYz1mdW5jdGlvbihlLG4pe3JldHVybisrdGhpcy5iLGxoKHRoaXMuYSxlLG4pfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5jLmxlbmd0aH0sbC5iZD1mdW5jdGlvbihlLG4pe3JldHVybiBuZXcgS2QodGhpcy5hLGUsbil9LGwuUGM9ZnVuY3Rpb24oKXtyZXR1cm4gYW50KHRoaXMuYSl9LGwuUWM9ZnVuY3Rpb24oZSl7cmV0dXJuIFAxKHRoaXMuYSxlKX0sbC5iPTAsTihJQywiTk5vZGUvQ2hhbmdlQXdhcmVBcnJheUxpc3QiLDc5NSksRCgyNjksMSx7fSxLYiksTihJQywiTk5vZGUvTk5vZGVCdWlsZGVyIiwyNjkpLEQoMTYzMCwxLHt9LEVyKSxsLmE9ITEsbC5mPVRpLGwuaj0wLE4oSUMsIk5ldHdvcmtTaW1wbGV4IiwxNjMwKSxEKDEyOTQsMSxLbix1ciksbC50ZD1mdW5jdGlvbihlKXtjaGUodGhpcy5hLHUoZSw2ODApLCEwLCExKX0sTihTZmUsIk5vZGVMYWJlbEFuZFNpemVDYWxjdWxhdG9yL2xhbWJkYSQwJFR5cGUiLDEyOTQpLEQoNTU4LDEse30sZXIpLGwuYj0hMCxsLmM9ITAsbC5kPSEwLGwuZT0hMCxOKFNmZSwiTm9kZU1hcmdpbkNhbGN1bGF0b3IiLDU1OCksRCgyMTIsMSx7MjEyOjF9KSxsLmo9ITEsbC5rPSExO3ZhciBLZ2U9TihUMiwiQ2VsbCIsMjEyKTtEKDEyNCwyMTIsezEyNDoxLDIxMjoxfSxWV3QpLGwuUmU9ZnVuY3Rpb24oKXtyZXR1cm4gTGoodGhpcyl9LGwuU2U9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLm4sdGhpcy5hLmErZS5iK2UuY30sTihUMiwiQXRvbWljQ2VsbCIsMTI0KSxEKDIzMiwyMix7MzoxLDM1OjEsMjI6MSwyMzI6MX0sd2V0KTt2YXIgZmMsaXUsZGMsTXk9enIoVDIsIkNvbnRhaW5lckFyZWEiLDIzMixVcixDcm4sbFplKSxZZ2U7RCgzMjYsMjEyLEFmZSksTihUMiwiQ29udGFpbmVyQ2VsbCIsMzI2KSxEKDE0NzMsMzI2LEFmZSxvaWUpLGwuUmU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT0wLHRoaXMuZT90aGlzLmI/ZT10aGlzLmIuYjp0aGlzLmFbMV1bMV0mJihlPXRoaXMuYVsxXVsxXS5SZSgpKTplPXIzdCh0aGlzLG1zZSh0aGlzLCEwKSksZT4wP2UrdGhpcy5uLmQrdGhpcy5uLmE6MH0sbC5TZT1mdW5jdGlvbigpe3ZhciBlLG4scixzLG87aWYobz0wLHRoaXMuZSl0aGlzLmI/bz10aGlzLmIuYTp0aGlzLmFbMV1bMV0mJihvPXRoaXMuYVsxXVsxXS5TZSgpKTtlbHNlIGlmKHRoaXMuZylvPXIzdCh0aGlzLEVzdCh0aGlzLG51bGwsITApKTtlbHNlIGZvcihuPShaZigpLHV0KG90KE15LDEpLG9lLDIzMiwwLFtmYyxpdSxkY10pKSxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWU9bltyXSxvPWIuTWF0aC5tYXgobyxyM3QodGhpcyxFc3QodGhpcyxlLCEwKSkpO3JldHVybiBvPjA/byt0aGlzLm4uYit0aGlzLm4uYzowfSxsLlRlPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHMsbztpZih0aGlzLmcpZm9yKGU9RXN0KHRoaXMsbnVsbCwhMSkscj0oWmYoKSx1dChvdChNeSwxKSxvZSwyMzIsMCxbZmMsaXUsZGNdKSkscz0wLG89ci5sZW5ndGg7czxvOysrcyluPXJbc10sVWNlKHRoaXMsbixlKTtlbHNlIGZvcihyPShaZigpLHV0KG90KE15LDEpLG9lLDIzMiwwLFtmYyxpdSxkY10pKSxzPTAsbz1yLmxlbmd0aDtzPG87KytzKW49cltzXSxlPUVzdCh0aGlzLG4sITEpLFVjZSh0aGlzLG4sZSl9LGwuVWU9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscztuPXRoaXMuaSxlPXRoaXMubixzPW1zZSh0aGlzLCExKSxvbXQodGhpcywoWmYoKSxmYyksbi5kK2UuZCxzKSxvbXQodGhpcyxkYyxuLmQrbi5hLWUuYS1zWzJdLHMpLHI9bi5hLWUuZC1lLmEsc1swXT4wJiYoc1swXSs9dGhpcy5kLHItPXNbMF0pLHNbMl0+MCYmKHNbMl0rPXRoaXMuZCxyLT1zWzJdKSx0aGlzLmMuYT1iLk1hdGgubWF4KDAsciksdGhpcy5jLmQ9bi5kK2UuZCsodGhpcy5jLmEtcikvMixzWzFdPWIuTWF0aC5tYXgoc1sxXSxyKSxvbXQodGhpcyxpdSxuLmQrZS5kK3NbMF0tKHNbMV0tcikvMixzKX0sbC5iPW51bGwsbC5kPTAsbC5lPSExLGwuZj0hMSxsLmc9ITE7dmFyIEZ1dD0wLFFIPTA7TihUMiwiR3JpZENvbnRhaW5lckNlbGwiLDE0NzMpLEQoNDYxLDIyLHszOjEsMzU6MSwyMjoxLDQ2MToxfSxtZXQpO3ZhciBsYixBZCxrZixYZ2U9enIoVDIsIkhvcml6b250YWxMYWJlbEFsaWdubWVudCIsNDYxLFVyLFNybixoWmUpLFFnZTtEKDMwNiwyMTIsezIxMjoxLDMwNjoxfSxuUXQsdWVlLEpYdCksbC5SZT1mdW5jdGlvbigpe3JldHVybiAkS3QodGhpcyl9LGwuU2U9ZnVuY3Rpb24oKXtyZXR1cm4gTnZ0KHRoaXMpfSxsLmE9MCxsLmM9ITE7dmFyIGE2bj1OKFQyLCJMYWJlbENlbGwiLDMwNik7RCgyNDQsMzI2LHsyMTI6MSwzMjY6MSwyNDQ6MX0sckMpLGwuUmU9ZnVuY3Rpb24oKXtyZXR1cm4gY0kodGhpcyl9LGwuU2U9ZnVuY3Rpb24oKXtyZXR1cm4gdUkodGhpcyl9LGwuVGU9ZnVuY3Rpb24oKXtnYXQodGhpcyl9LGwuVWU9ZnVuY3Rpb24oKXtwYXQodGhpcyl9LGwuYj0wLGwuYz0wLGwuZD0hMSxOKFQyLCJTdHJpcENvbnRhaW5lckNlbGwiLDI0NCksRCgxNjI2LDEsZ2ksTWMpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIFRLZSh1KGUsMjEyKSl9LE4oVDIsIlN0cmlwQ29udGFpbmVyQ2VsbC9sYW1iZGEkMCRUeXBlIiwxNjI2KSxEKDE2MjcsMSx7fSxicCksbC5GZT1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDIxMikuU2UoKX0sTihUMiwiU3RyaXBDb250YWluZXJDZWxsL2xhbWJkYSQxJFR5cGUiLDE2MjcpLEQoMTYyOCwxLGdpLGZtKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBfS2UodShlLDIxMikpfSxOKFQyLCJTdHJpcENvbnRhaW5lckNlbGwvbGFtYmRhJDIkVHlwZSIsMTYyOCksRCgxNjI5LDEse30sVDApLGwuRmU9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwyMTIpLlJlKCl9LE4oVDIsIlN0cmlwQ29udGFpbmVyQ2VsbC9sYW1iZGEkMyRUeXBlIiwxNjI5KSxEKDQ2MiwyMix7MzoxLDM1OjEsMjI6MSw0NjI6MX0seWV0KTt2YXIgRWYsaGIsczEsWmdlPXpyKFQyLCJWZXJ0aWNhbExhYmVsQWxpZ25tZW50Iiw0NjIsVXIsQXJuLGZaZSksSmdlO0QoNzg5LDEse30sdjZ0KSxsLmM9MCxsLmQ9MCxsLms9MCxsLnM9MCxsLnQ9MCxsLnY9ITEsbC53PTAsbC5EPSExLE4oQnEsIk5vZGVDb250ZXh0Iiw3ODkpLEQoMTQ3MSwxLHFpLEZkKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG5VdCh1KGUsNjEpLHUobiw2MSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZ3QodGhpcyl9LE4oQnEsIk5vZGVDb250ZXh0LzBtZXRob2RyZWYkY29tcGFyZVBvcnRTaWRlcyRUeXBlIiwxNDcxKSxEKDE0NzIsMSxxaSxObyksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBaZG4odShlLDExMSksdShuLDExMSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZ3QodGhpcyl9LE4oQnEsIk5vZGVDb250ZXh0LzFtZXRob2RyZWYkY29tcGFyZVBvcnRDb250ZXh0cyRUeXBlIiwxNDcyKSxEKDE1OSwyMix7MzoxLDM1OjEsMjI6MSwxNTk6MX0sZGgpO3ZhciB0cGUsZXBlLG5wZSxycGUsaXBlLHNwZSxhcGUsb3BlLGNwZSx1cGUsbHBlLGhwZSxmcGUsZHBlLGdwZSxwcGUsYnBlLHZwZSx3cGUsbXBlLHlwZSxCdXQseHBlPXpyKEJxLCJOb2RlTGFiZWxMb2NhdGlvbiIsMTU5LFVyLGVzdCxkWmUpLGtwZTtEKDExMSwxLHsxMTE6MX0sUG9lKSxsLmE9ITEsTihCcSwiUG9ydENvbnRleHQiLDExMSksRCgxNDc2LDEsS24sdGEpLGwudGQ9ZnVuY3Rpb24oZSl7eEh0KHUoZSwzMDYpKX0sTihGSSxMZmUsMTQ3NiksRCgxNDc3LDEsZ2ksYnUpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuISF1KGUsMTExKS5jfSxOKEZJLE1mZSwxNDc3KSxEKDE0NzgsMSxLbixQdSksbC50ZD1mdW5jdGlvbihlKXt4SHQodShlLDExMSkuYyl9LE4oRkksIkxhYmVsUGxhY2VyL2xhbWJkYSQyJFR5cGUiLDE0NzgpO3ZhciBRN3Q7RCgxNDc1LDEsS24sbW8pLGwudGQ9ZnVuY3Rpb24oZSl7Qm0oKSxpS2UodShlLDExMSkpfSxOKEZJLCJOb2RlTGFiZWxBbmRTaXplVXRpbGl0aWVzL2xhbWJkYSQwJFR5cGUiLDE0NzUpLEQoNzkwLDEsS24sZHZ0KSxsLnRkPWZ1bmN0aW9uKGUpe2JZZSh0aGlzLmIsdGhpcy5jLHRoaXMuYSx1KGUsMTgxKSl9LGwuYT0hMSxsLmM9ITEsTihGSSwiTm9kZUxhYmVsQ2VsbENyZWF0b3IvbGFtYmRhJDAkVHlwZSIsNzkwKSxEKDE0NzQsMSxLbixibiksbC50ZD1mdW5jdGlvbihlKXtvS2UodGhpcy5hLHUoZSwxODEpKX0sTihGSSwiUG9ydENvbnRleHRDcmVhdG9yL2xhbWJkYSQwJFR5cGUiLDE0NzQpO3ZhciBaSDtEKDE4MjksMSx7fSxPcyksTihPNywiR3JlZWR5UmVjdGFuZ2xlU3RyaXBPdmVybGFwUmVtb3ZlciIsMTgyOSksRCgxODMwLDEscWksbG8pLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gS1hlKHUoZSwyMjIpLHUobiwyMjIpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGd0KHRoaXMpfSxOKE83LCJHcmVlZHlSZWN0YW5nbGVTdHJpcE92ZXJsYXBSZW1vdmVyLzBtZXRob2RyZWYkY29tcGFyZUJ5WUNvb3JkaW5hdGUkVHlwZSIsMTgzMCksRCgxNzg2LDEse30sSnp0KSxsLmE9NSxsLmU9MCxOKE83LCJSZWN0YW5nbGVTdHJpcE92ZXJsYXBSZW1vdmVyIiwxNzg2KSxEKDE3ODcsMSxxaSxGdSksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBZWGUodShlLDIyMiksdShuLDIyMikpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZ3QodGhpcyl9LE4oTzcsIlJlY3RhbmdsZVN0cmlwT3ZlcmxhcFJlbW92ZXIvMG1ldGhvZHJlZiRjb21wYXJlTGVmdFJlY3RhbmdsZUJvcmRlcnMkVHlwZSIsMTc4NyksRCgxNzg5LDEscWksem8pLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbWVuKHUoZSwyMjIpLHUobiwyMjIpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGd0KHRoaXMpfSxOKE83LCJSZWN0YW5nbGVTdHJpcE92ZXJsYXBSZW1vdmVyLzFtZXRob2RyZWYkY29tcGFyZVJpZ2h0UmVjdGFuZ2xlQm9yZGVycyRUeXBlIiwxNzg5KSxEKDQwNiwyMix7MzoxLDM1OjEsMjI6MSw0MDY6MX0selIpO3ZhciBzTyxSdXQsanV0LGFPLEVwZT16cihPNywiUmVjdGFuZ2xlU3RyaXBPdmVybGFwUmVtb3Zlci9PdmVybGFwUmVtb3ZhbERpcmVjdGlvbiIsNDA2LFVyLFNpbixnWmUpLFRwZTtEKDIyMiwxLHsyMjI6MX0sTm50KSxOKE83LCJSZWN0YW5nbGVTdHJpcE92ZXJsYXBSZW1vdmVyL1JlY3RhbmdsZU5vZGUiLDIyMiksRCgxNzg4LDEsS24scHIpLGwudGQ9ZnVuY3Rpb24oZSl7RWZuKHRoaXMuYSx1KGUsMjIyKSl9LE4oTzcsIlJlY3RhbmdsZVN0cmlwT3ZlcmxhcFJlbW92ZXIvbGFtYmRhJDEkVHlwZSIsMTc4OCksRCgxMzA0LDEscWksbmQpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gTHluKHUoZSwxNjcpLHUobiwxNjcpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGd0KHRoaXMpfSxOKHlkLCJQb2x5b21pbm9Db21wYWN0b3IvQ29ybmVyQ2FzZXNHcmVhdGVyVGhhblJlc3RDb21wYXJhdG9yIiwxMzA0KSxEKDEzMDcsMSx7fSxzZiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDMyNCkuYX0sTih5ZCwiUG9seW9taW5vQ29tcGFjdG9yL0Nvcm5lckNhc2VzR3JlYXRlclRoYW5SZXN0Q29tcGFyYXRvci9sYW1iZGEkMCRUeXBlIiwxMzA3KSxEKDEzMDgsMSxnaSxsbCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDMyMykuYX0sTih5ZCwiUG9seW9taW5vQ29tcGFjdG9yL0Nvcm5lckNhc2VzR3JlYXRlclRoYW5SZXN0Q29tcGFyYXRvci9sYW1iZGEkMSRUeXBlIiwxMzA4KSxEKDEzMDksMSxnaSxWaSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDMyMykuYX0sTih5ZCwiUG9seW9taW5vQ29tcGFjdG9yL0Nvcm5lckNhc2VzR3JlYXRlclRoYW5SZXN0Q29tcGFyYXRvci9sYW1iZGEkMiRUeXBlIiwxMzA5KSxEKDEzMDIsMSxxaSxLZSksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiB1d24odShlLDE2NyksdShuLDE2NykpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZ3QodGhpcyl9LE4oeWQsIlBvbHlvbWlub0NvbXBhY3Rvci9NaW5OdW1PZkV4dGVuc2lvbkRpcmVjdGlvbnNDb21wYXJhdG9yIiwxMzAyKSxEKDEzMDUsMSx7fSxUbCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDMyNCkuYX0sTih5ZCwiUG9seW9taW5vQ29tcGFjdG9yL01pbk51bU9mRXh0ZW5zaW9uRGlyZWN0aW9uc0NvbXBhcmF0b3IvbGFtYmRhJDAkVHlwZSIsMTMwNSksRCg3NjcsMSxxaSxrciksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBoY24odShlLDE2NyksdShuLDE2NykpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZ3QodGhpcyl9LE4oeWQsIlBvbHlvbWlub0NvbXBhY3Rvci9NaW5OdW1PZkV4dGVuc2lvbnNDb21wYXJhdG9yIiw3NjcpLEQoMTMwMCwxLHFpLG5pKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHlvbih1KGUsMzIxKSx1KG4sMzIxKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBndCh0aGlzKX0sTih5ZCwiUG9seW9taW5vQ29tcGFjdG9yL01pblBlcmltZXRlckNvbXBhcmF0b3IiLDEzMDApLEQoMTMwMSwxLHFpLGVvKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFhobih1KGUsMzIxKSx1KG4sMzIxKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBndCh0aGlzKX0sTih5ZCwiUG9seW9taW5vQ29tcGFjdG9yL01pblBlcmltZXRlckNvbXBhcmF0b3JXaXRoU2hhcGUiLDEzMDEpLEQoMTMwMywxLHFpLERjKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEl3bih1KGUsMTY3KSx1KG4sMTY3KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBndCh0aGlzKX0sTih5ZCwiUG9seW9taW5vQ29tcGFjdG9yL1NpbmdsZUV4dGVuc2lvblNpZGVHcmVhdGVyVGhhblJlc3RDb21wYXJhdG9yIiwxMzAzKSxEKDEzMDYsMSx7fSxKdSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDMyNCkuYX0sTih5ZCwiUG9seW9taW5vQ29tcGFjdG9yL1NpbmdsZUV4dGVuc2lvblNpZGVHcmVhdGVyVGhhblJlc3RDb21wYXJhdG9yL2xhbWJkYSQwJFR5cGUiLDEzMDYpLEQoNzc3LDEse30seWJ0KSxsLkNlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEVpbih0aGlzLHUoZSw0NiksdShuLDE2NykpfSxOKHlkLCJTdWNjZXNzb3JDb21iaW5hdGlvbiIsNzc3KSxEKDY0NCwxLHt9LFFvKSxsLkNlPWZ1bmN0aW9uKGUsbil7dmFyIHI7cmV0dXJuIGZwbigocj11KGUsNDYpLHUobiwxNjcpLHIpKX0sTih5ZCwiU3VjY2Vzc29ySml0dGVyIiw2NDQpLEQoNjQzLDEse30samYpLGwuQ2U9ZnVuY3Rpb24oZSxuKXt2YXIgcjtyZXR1cm4gdHZuKChyPXUoZSw0NiksdShuLDE2NykscikpfSxOKHlkLCJTdWNjZXNzb3JMaW5lQnlMaW5lIiw2NDMpLEQoNTY4LDEse30scmgpLGwuQ2U9ZnVuY3Rpb24oZSxuKXt2YXIgcjtyZXR1cm4gZGJuKChyPXUoZSw0NiksdShuLDE2NykscikpfSxOKHlkLCJTdWNjZXNzb3JNYW5oYXR0YW4iLDU2OCksRCgxMzU2LDEse30sZG0pLGwuQ2U9ZnVuY3Rpb24oZSxuKXt2YXIgcjtyZXR1cm4gVDJuKChyPXUoZSw0NiksdShuLDE2NykscikpfSxOKHlkLCJTdWNjZXNzb3JNYXhOb3JtV2luZGluZ0luTWF0aFBvc1NlbnNlIiwxMzU2KSxEKDQwMCwxLHt9LGZyKSxsLkNlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGN3dCh0aGlzLGUsbil9LGwuYz0hMSxsLmQ9ITEsbC5lPSExLGwuZj0hMSxOKHlkLCJTdWNjZXNzb3JRdWFkcmFudHNHZW5lcmljIiw0MDApLEQoMTM1NywxLHt9LFM5KSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzI0KS5hfSxOKHlkLCJTdWNjZXNzb3JRdWFkcmFudHNHZW5lcmljL2xhbWJkYSQwJFR5cGUiLDEzNTcpLEQoMzIzLDIyLHszOjEsMzU6MSwyMjoxLDMyMzoxfSwkUiksbC5hPSExO3ZhciBvTyxjTyx1TyxsTyxfcGU9enIoanEsSzZ0LDMyMyxVcixNaW4scFplKSxDcGU7RCgxMjk4LDEse30pLGwuSWI9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscyxvLGg7Zm9yKHI9IiAiLGU9ZGUoMCksbz0wO288dGhpcy5vO28rKylyKz0iIitlLmEsZT1kZShPV3QoZS5hKSk7Zm9yKHIrPWAKYCxlPWRlKDApLGg9MDtoPHRoaXMucDtoKyspe2ZvcihyKz0iIitlLmEsZT1kZShPV3QoZS5hKSkscz0wO3M8dGhpcy5vO3MrKyluPWNpdCh0aGlzLHMsaCksX2MobiwwKT09MD9yKz0iXyI6X2MobiwxKT09MD9yKz0iWCI6cis9IjAiO3IrPWAKYH1yZXR1cm4gQmwociwwLHIubGVuZ3RoLTEpfSxsLm89MCxsLnA9MCxOKGpxLCJUd29CaXRHcmlkIiwxMjk4KSxEKDMyMSwxMjk4LHszMjE6MX0scDN0KSxsLmo9MCxsLms9MCxOKGpxLCJQbGFuYXJHcmlkIiwzMjEpLEQoMTY3LDMyMSx7MzIxOjEsMTY3OjF9KSxsLmc9MCxsLmk9MCxOKGpxLCJQb2x5b21pbm8iLDE2Nyk7dmFyIG82bj1hcyhCSSxJZmUpO0QoMTM0LDEsWTZ0LHgzKSxsLlllPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEZEKHRoaXMsZSxuKX0sbC5WZT1mdW5jdGlvbigpe3JldHVybiBlWXQodGhpcyl9LGwuV2U9ZnVuY3Rpb24oZSl7cmV0dXJuIEsodGhpcyxlKX0sbC5YZT1mdW5jdGlvbihlKXtyZXR1cm4gZWEodGhpcyxlKX0sTihCSSwiTWFwUHJvcGVydHlIb2xkZXIiLDEzNCksRCgxMjk5LDEzNCxZNnQsTmNlKSxOKGpxLCJQb2x5b21pbm9lcyIsMTI5OSk7dmFyIFNwZT0hMSxjUyxaN3Q7RCgxNzY2LDEsS24semIpLGwudGQ9ZnVuY3Rpb24oZSl7SWxlKHUoZSwyMjEpKX0sTihneCwiRGVwdGhGaXJzdENvbXBhY3Rpb24vMG1ldGhvZHJlZiRjb21wYWN0VHJlZSRUeXBlIiwxNzY2KSxEKDgxMCwxLEtuLHJpKSxsLnRkPWZ1bmN0aW9uKGUpe1Zlbih0aGlzLmEsdShlLDIyMSkpfSxOKGd4LCJEZXB0aEZpcnN0Q29tcGFjdGlvbi9sYW1iZGEkMSRUeXBlIiw4MTApLEQoMTc2NywxLEtuLGdLdCksbC50ZD1mdW5jdGlvbihlKXtnaG4odGhpcy5hLHRoaXMuYix0aGlzLmMsdShlLDIyMSkpfSxOKGd4LCJEZXB0aEZpcnN0Q29tcGFjdGlvbi9sYW1iZGEkMiRUeXBlIiwxNzY3KTt2YXIgdVMsSjd0O0QoNjUsMSx7NjU6MX0seFF0KSxOKGd4LCJOb2RlIiw2NSksRCgxMjUwLDEse30sa1V0KSxOKGd4LCJTY2FubGluZU92ZXJsYXBDaGVjayIsMTI1MCksRCgxMjUxLDEsezY3OToxfSx6WHQpLGwuS2U9ZnVuY3Rpb24oZSl7U1FlKHRoaXMsdShlLDQ0MCkpfSxOKGd4LCJTY2FubGluZU92ZXJsYXBDaGVjay9PdmVybGFwc1NjYW5saW5lSGFuZGxlciIsMTI1MSksRCgxMjUyLDEscWksb3MpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gWHVuKHUoZSw2NSksdShuLDY1KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBndCh0aGlzKX0sTihneCwiU2NhbmxpbmVPdmVybGFwQ2hlY2svT3ZlcmxhcHNTY2FubGluZUhhbmRsZXIvbGFtYmRhJDAkVHlwZSIsMTI1MiksRCg0NDAsMSx7NDQwOjF9LHhidCksbC5hPSExLE4oZ3gsIlNjYW5saW5lT3ZlcmxhcENoZWNrL1RpbWVzdGFtcCIsNDQwKSxEKDEyNTMsMSxxaSxBcyksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBDMW4odShlLDQ0MCksdShuLDQ0MCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZ3QodGhpcyl9LE4oZ3gsIlNjYW5saW5lT3ZlcmxhcENoZWNrL2xhbWJkYSQwJFR5cGUiLDEyNTMpLEQoNTUwLDEse30sbWEpLE4oT2ZlLCJTVkdJbWFnZSIsNTUwKSxEKDMyNCwxLHszMjQ6MX0sZ3Z0KSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIigiK3RoaXMuYStYYSt0aGlzLmIrWGErdGhpcy5jKyIpIn0sTihPZmUsIlVuaXF1ZVRyaXBsZSIsMzI0KSxEKDIwOSwxLF8yKSxOKEE0LCJBYnN0cmFjdExheW91dFByb3ZpZGVyIiwyMDkpLEQoMTEzMiwyMDksXzIsdmkpLGwuWmU9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG8saDtzd2l0Y2gobXIobixOZmUsMSksdGhpcy5hPVp0KHZlKHplKGUsKGlDKCksc0V0KSkpKSxzMihlLHp1dCkmJihvPWpyKHplKGUsenV0KSkscj1vYXQoajgoKSxvKSxyJiYocz11KGZydChyLmYpLDIwOSkscy5aZShlLHpjKG4sMSkpKSksaD1uZXcgQlp0KHRoaXMuYSksdGhpcy5iPXA0bihoLGUpLHUoemUoZSwoTGl0KCksZUV0KSksNDgxKS5nKXtjYXNlIDA6RHBuKG5ldyBRYyx0aGlzLmIpLEVvKGUsZVYsSyh0aGlzLmIsZVYpKTticmVhaztkZWZhdWx0OnFkKCl9RTRuKGgpLEVvKGUsckV0LHRoaXMuYiksb3Iobil9LGwuYT0wLE4oUGZlLCJEaXNDb0xheW91dFByb3ZpZGVyIiwxMTMyKSxEKDEyNDQsMSx7fSxRYyksbC5jPSExLGwuZT0wLGwuZj0wLE4oUGZlLCJEaXNDb1BvbHlvbWlub0NvbXBhY3RvciIsMTI0NCksRCg1NjEsMSx7NTYxOjF9LGFZdCksbC5iPSEwLE4oenEsIkRDQ29tcG9uZW50Iiw1NjEpLEQoMzk0LDIyLHszOjEsMzU6MSwyMjoxLDM5NDoxfSxqUiksbC5hPSExO3ZhciBKSCxoTyx0VixmTyxBcGU9enIoenEsIkRDRGlyZWN0aW9uIiwzOTQsVXIsTGluLGJaZSksTHBlO0QoMjY2LDEzNCx7MzoxLDI2NjoxLDk0OjEsMTM0OjF9LFdzdCksTih6cSwiRENFbGVtZW50IiwyNjYpLEQoMzk1LDEsezM5NToxfSxqM3QpLGwuYz0wLE4oenEsIkRDRXh0ZW5zaW9uIiwzOTUpLEQoNzU1LDEzNCxZNnQsckh0KSxOKHpxLCJEQ0dyYXBoIiw3NTUpLEQoNDgxLDIyLHszOjEsMzU6MSwyMjoxLDQ4MToxfSxvV3QpO3ZhciAkdXQsdEV0PXpyKExvdCxYNnQsNDgxLFVyLHNubix2WmUpLE1wZTtEKDg1NCwxLFBoLE9KKSxsLlFlPWZ1bmN0aW9uKGUpe2FuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxRNnQpLEZmZSksIkNvbm5lY3RlZCBDb21wb25lbnRzIENvbXBhY3Rpb24gU3RyYXRlZ3kiKSwiU3RyYXRlZ3kgZm9yIHBhY2tpbmcgZGlmZmVyZW50IGNvbm5lY3RlZCBjb21wb25lbnRzIGluIG9yZGVyIHRvIHNhdmUgc3BhY2UgYW5kIGVuaGFuY2UgcmVhZGFiaWxpdHkgb2YgYSBncmFwaC4iKSxuRXQpLChIZygpLG1zKSksdEV0KSxvbigodDEoKSxxbikpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSxaNnQpLEZmZSksIkNvbm5lY3RlZCBDb21wb25lbnRzIExheW91dCBBbGdvcml0aG0iKSwiQSBsYXlvdXQgYWxnb3JpdGhtIHRoYXQgaXMgdG8gYmUgYXBwbGllZCB0byBlYWNoIGNvbm5lY3RlZCBjb21wb25lbnQgYmVmb3JlIHRoZSBjb21wb25lbnRzIHRoZW1zZWx2ZXMgYXJlIGNvbXBhY3RlZC4gSWYgdW5zcGVjaWZpZWQsIHRoZSBwb3NpdGlvbnMgb2YgdGhlIGNvbXBvbmVudHMnIG5vZGVzIGFyZSBub3QgYWx0ZXJlZC4iKSxrRSksTGUpLG9uKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihaZShlbihKZSh0bihuZXcgVWUsSjZ0KSwiZGVidWciKSwiRENHcmFwaCIpLCJBY2Nlc3MgdG8gdGhlIERDR3JhcGggaXMgaW50ZW5kZWQgZm9yIHRoZSBkZWJ1ZyB2aWV3LCIpLEcxKSxRbiksb24ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSx0eHQpLCJkZWJ1ZyIpLCJMaXN0IG9mIFBvbHlvbWlub2VzIiksIkFjY2VzcyB0byB0aGUgcG9seW9taW5vZXMgaXMgaW50ZW5kZWQgZm9yIHRoZSBkZWJ1ZyB2aWV3LCIpLEcxKSxRbiksb24ocW4pKSkpLHlsZSgobmV3IExCLGUpKX07dmFyIERwZSxlRXQsbkV0LElwZSxPcGU7TihMb3QsIkRpc0NvTWV0YURhdGFQcm92aWRlciIsODU0KSxEKDk5OCwxLFBoLExCKSxsLlFlPWZ1bmN0aW9uKGUpe3lsZShlKX07dmFyIE5wZSx6dXQsUHBlLHJFdCxlVixxdXQsaUV0LEZwZSxCcGUsUnBlLGpwZSxzRXQ7TihMb3QsIkRpc0NvT3B0aW9ucyIsOTk4KSxEKDk5OSwxLHt9LG1lKSxsLiRlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9bmV3IHZpLGV9LGwuX2U9ZnVuY3Rpb24oZSl7fSxOKExvdCwiRGlzQ29PcHRpb25zL0Rpc2NvRmFjdG9yeSIsOTk5KSxEKDU2MiwxNjcsezMyMToxLDE2NzoxLDU2MjoxfSx2Y2UpLGwuYT0wLGwuYj0wLGwuYz0wLGwuZD0wLE4oIm9yZy5lY2xpcHNlLmVsay5hbGcuZGlzY28uc3RydWN0dXJlcyIsIkRDUG9seW9taW5vIiw1NjIpO3ZhciBIdXQsVnV0LG5WO0QoMTI2OCwxLGdpLGJnKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBYYnQoZSl9LE4oTDQsIkVsa0dyYXBoQ29tcG9uZW50c1Byb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxMjY4KSxEKDEyNjksMSx7fSxPZSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gUjYoKSxaZCh1KGUsNzkpKX0sTihMNCwiRWxrR3JhcGhDb21wb25lbnRzUHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUiLDEyNjkpLEQoMTI3MCwxLGdpLGFmKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBidG4odShlLDc5KSl9LE4oTDQsIkVsa0dyYXBoQ29tcG9uZW50c1Byb2Nlc3Nvci9sYW1iZGEkMiRUeXBlIiwxMjcwKSxEKDEyNzEsMSx7fSxmayksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gUjYoKSxacCh1KGUsNzkpKX0sTihMNCwiRWxrR3JhcGhDb21wb25lbnRzUHJvY2Vzc29yL2xhbWJkYSQzJFR5cGUiLDEyNzEpLEQoMTI3MiwxLGdpLGszKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB2dG4odShlLDc5KSl9LE4oTDQsIkVsa0dyYXBoQ29tcG9uZW50c1Byb2Nlc3Nvci9sYW1iZGEkNCRUeXBlIiwxMjcyKSxEKDEyNzMsMSxnaSxfaSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gb3JuKHRoaXMuYSx1KGUsNzkpKX0sTihMNCwiRWxrR3JhcGhDb21wb25lbnRzUHJvY2Vzc29yL2xhbWJkYSQ1JFR5cGUiLDEyNzMpLEQoMTI3NCwxLHt9LGlhKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBfZW4odGhpcy5hLHUoZSw3OSkpfSxOKEw0LCJFbGtHcmFwaENvbXBvbmVudHNQcm9jZXNzb3IvbGFtYmRhJDYkVHlwZSIsMTI3NCksRCgxMjQxLDEse30sQlp0KSxsLmE9MCxOKEw0LCJFbGtHcmFwaFRyYW5zZm9ybWVyIiwxMjQxKSxEKDEyNDIsMSx7fSxnbSksbC5PZD1mdW5jdGlvbihlLG4pe2Jwbih0aGlzLHUoZSwxNjApLHUobiwyNjYpKX0sTihMNCwiRWxrR3JhcGhUcmFuc2Zvcm1lci9PZmZzZXRBcHBsaWVyIiwxMjQyKSxEKDEyNDMsMSxLbixMYSksbC50ZD1mdW5jdGlvbihlKXt6WGUodGhpcyx1KGUsOCkpfSxOKEw0LCJFbGtHcmFwaFRyYW5zZm9ybWVyL09mZnNldEFwcGxpZXIvT2ZmU2V0VG9DaGFpbkFwcGxpZXIiLDEyNDMpLEQoNzUzLDEse30sQTkpLE4obnh0LHJ4dCw3NTMpLEQoMTIzMiwxLHFpLGF1KSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG5wbih1KGUsMjMxKSx1KG4sMjMxKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBndCh0aGlzKX0sTihueHQsQmZlLDEyMzIpLEQoNzQwLDIwOSxfMixDcHQpLGwuWmU9ZnVuY3Rpb24oZSxuKXt5Y2UodGhpcyxlLG4pfSxOKG54dCwiRm9yY2VMYXlvdXRQcm92aWRlciIsNzQwKSxEKDM1NywxMzQsezM6MSwzNTc6MSw5NDoxLDEzNDoxfSksTihSSSwiRlBhcnRpY2xlIiwzNTcpLEQoNTU5LDM1Nyx7MzoxLDU1OToxLDM1NzoxLDk0OjEsMTM0OjF9LHpZdCksbC5JYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiB0aGlzLmE/KGU9R28odGhpcy5hLmEsdGhpcywwKSxlPj0wPyJiIitlKyJbIitJcnQodGhpcy5hKSsiXSI6ImJbIitJcnQodGhpcy5hKSsiXSIpOiJiXyIrRHYodGhpcyl9LE4oUkksIkZCZW5kcG9pbnQiLDU1OSksRCgyODIsMTM0LHszOjEsMjgyOjEsOTQ6MSwxMzQ6MX0sRld0KSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIElydCh0aGlzKX0sTihSSSwiRkVkZ2UiLDI4MiksRCgyMzEsMTM0LHszOjEsMjMxOjEsOTQ6MSwxMzQ6MX0sQyQpO3ZhciBjNm49TihSSSwiRkdyYXBoIiwyMzEpO0QoNDQ3LDM1Nyx7MzoxLDQ0NzoxLDM1NzoxLDk0OjEsMTM0OjF9LGpadCksbC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmI9PW51bGx8fHRoaXMuYi5sZW5ndGg9PTA/ImxbIitJcnQodGhpcy5hKSsiXSI6ImxfIit0aGlzLmJ9LE4oUkksIkZMYWJlbCIsNDQ3KSxEKDE0NCwzNTcsezM6MSwxNDQ6MSwzNTc6MSw5NDoxLDEzNDoxfSxZWXQpLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gand0KHRoaXMpfSxsLmI9MCxOKFJJLCJGTm9kZSIsMTQ0KSxEKDIwMDMsMSx7fSksbC5iZj1mdW5jdGlvbihlKXtYNXQodGhpcyxlKX0sbC5jZj1mdW5jdGlvbigpe3dzZSh0aGlzKX0sbC5kPTAsTihpeHQsIkFic3RyYWN0Rm9yY2VNb2RlbCIsMjAwMyksRCg2MzEsMjAwMyx7NjMxOjF9LEFuZSksbC5hZj1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoLGQ7cmV0dXJuIGdvZSh0aGlzLmYsZSxuKSxvPWZhKHVjKG4uZCksZS5kKSxkPWIuTWF0aC5zcXJ0KG8uYSpvLmErby5iKm8uYikscz1iLk1hdGgubWF4KDAsZC1BXyhlLmUpLzItQV8obi5lKS8yKSxyPWlyZSh0aGlzLmUsZSxuKSxyPjA/aD0tYmVuKHMsdGhpcy5jKSpyOmg9Y1FlKHMsdGhpcy5iKSp1KEsoZSwobjEoKSxaNykpLDE5KS5hLGxkKG8saC9kKSxvfSxsLmJmPWZ1bmN0aW9uKGUpe1g1dCh0aGlzLGUpLHRoaXMuYT11KEsoZSwobjEoKSxpVikpLDE5KS5hLHRoaXMuYz1adCh2ZShLKGUsc1YpKSksdGhpcy5iPVp0KHZlKEsoZSxVdXQpKSl9LGwuZGY9ZnVuY3Rpb24oZSl7cmV0dXJuIGU8dGhpcy5hfSxsLmE9MCxsLmI9MCxsLmM9MCxOKGl4dCwiRWFkZXNNb2RlbCIsNjMxKSxEKDYzMiwyMDAzLHs2MzI6MX0sTEt0KSxsLmFmPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLGgsZDtyZXR1cm4gZ29lKHRoaXMuZixlLG4pLG89ZmEodWMobi5kKSxlLmQpLGQ9Yi5NYXRoLnNxcnQoby5hKm8uYStvLmIqby5iKSxzPWIuTWF0aC5tYXgoMCxkLUFfKGUuZSkvMi1BXyhuLmUpLzIpLGg9b1FlKHMsdGhpcy5hKSp1KEsoZSwobjEoKSxaNykpLDE5KS5hLHI9aXJlKHRoaXMuZSxlLG4pLHI+MCYmKGgtPXlLZShzLHRoaXMuYSkqciksbGQobyxoKnRoaXMuYi9kKSxvfSxsLmJmPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGgsZCx3O2ZvcihYNXQodGhpcyxlKSx0aGlzLmI9WnQodmUoSyhlLChuMSgpLFd1dCkpKSksdGhpcy5jPXRoaXMuYi91KEsoZSxpViksMTkpLmEscz1lLmUuYy5sZW5ndGgsaD0wLG89MCx3PW5ldyBTKGUuZSk7dy5hPHcuYy5jLmxlbmd0aDspZD11KFEodyksMTQ0KSxoKz1kLmUuYSxvKz1kLmUuYjtuPWgqbyxyPVp0KHZlKEsoZSxzVikpKSpSMSx0aGlzLmE9Yi5NYXRoLnNxcnQobi8oMipzKSkqcn0sbC5jZj1mdW5jdGlvbigpe3dzZSh0aGlzKSx0aGlzLmItPXRoaXMuY30sbC5kZj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5iPjB9LGwuYT0wLGwuYj0wLGwuYz0wLE4oaXh0LCJGcnVjaHRlcm1hblJlaW5nb2xkTW9kZWwiLDYzMiksRCg4NDksMSxQaCxOSiksbC5RZT1mdW5jdGlvbihlKXthbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUscXEpLCIiKSwiRm9yY2UgTW9kZWwiKSwiRGV0ZXJtaW5lcyB0aGUgbW9kZWwgZm9yIGZvcmNlIGNhbGN1bGF0aW9uLiIpLGFFdCksKEhnKCksbXMpKSxvRXQpLG9uKCh0MSgpLHFuKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLHN4dCksIiIpLCJJdGVyYXRpb25zIiksIlRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBvbiB0aGUgZm9yY2UgbW9kZWwuIiksZGUoMzAwKSkseGMpLEhhKSxvbihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLGF4dCksIiIpLCJSZXB1bHNpdmUgUG93ZXIiKSwiRGV0ZXJtaW5lcyBob3cgbWFueSBiZW5kIHBvaW50cyBhcmUgYWRkZWQgdG8gdGhlIGVkZ2U7IHN1Y2ggYmVuZCBwb2ludHMgYXJlIHJlZ2FyZGVkIGFzIHJlcGVsbGluZyBwYXJ0aWNsZXMgaW4gdGhlIGZvcmNlIG1vZGVsIiksZGUoMCkpLHhjKSxIYSksb24oSWQpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxPb3QpLCIiKSwiRlIgVGVtcGVyYXR1cmUiKSwiVGhlIHRlbXBlcmF0dXJlIGlzIHVzZWQgYXMgYSBzY2FsaW5nIGZhY3RvciBmb3IgcGFydGljbGUgZGlzcGxhY2VtZW50cy4iKSx4ZCksJG8pLHdhKSxvbihxbikpKSksYmEoZSxPb3QscXEsVXBlKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsTm90KSwiIiksIkVhZGVzIFJlcHVsc2lvbiIpLCJGYWN0b3IgZm9yIHJlcHVsc2l2ZSBmb3JjZXMgaW4gRWFkZXMnIG1vZGVsLiIpLDUpLCRvKSx3YSksb24ocW4pKSkpLGJhKGUsTm90LHFxLEhwZSkscGhlKChuZXcgZFQsZSkpfTt2YXIgJHBlLHpwZSxhRXQscXBlLEhwZSxWcGUsR3BlLFVwZTtOKE5DLCJGb3JjZU1ldGFEYXRhUHJvdmlkZXIiLDg0OSksRCg0MjQsMjIsezM6MSwzNToxLDIyOjEsNDI0OjF9LFRidCk7dmFyIEd1dCxyVixvRXQ9enIoTkMsIkZvcmNlTW9kZWxTdHJhdGVneSIsNDI0LFVyLG5ybix3WmUpLFdwZTtEKDk4OCwxLFBoLGRUKSxsLlFlPWZ1bmN0aW9uKGUpe3BoZShlKX07dmFyIEtwZSxZcGUsY0V0LGlWLHVFdCxYcGUsUXBlLFpwZSxsRXQsSnBlLGhFdCxmRXQsdGJlLFo3LGViZSxVdXQsZEV0LG5iZSxyYmUsc1YsV3V0O04oTkMsIkZvcmNlT3B0aW9ucyIsOTg4KSxEKDk4OSwxLHt9LHZnKSxsLiRlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9bmV3IENwdCxlfSxsLl9lPWZ1bmN0aW9uKGUpe30sTihOQywiRm9yY2VPcHRpb25zL0ZvcmNlRmFjdG9yeSIsOTg5KTt2YXIgZE8sbFMsVHgsYVY7RCg4NTAsMSxQaCxQSiksbC5RZT1mdW5jdGlvbihlKXthbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsY3h0KSwiIiksIkZpeGVkIFBvc2l0aW9uIiksIlByZXZlbnQgdGhhdCB0aGUgbm9kZSBpcyBtb3ZlZCBieSB0aGUgbGF5b3V0IGFsZ29yaXRobS4iKSwoRm4oKSwhMSkpLChIZygpLFBhKSksV3MpLG9uKCh0MSgpLHVhKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLHV4dCksIiIpLCJEZXNpcmVkIEVkZ2UgTGVuZ3RoIiksIkVpdGhlciBzcGVjaWZpZWQgZm9yIHBhcmVudCBub2RlcyBvciBmb3IgaW5kaXZpZHVhbCBlZGdlcywgd2hlcmUgdGhlIGxhdHRlciB0YWtlcyBoaWdoZXIgcHJlY2VkZW5jZS4iKSwxMDApLCRvKSx3YSksS2kocW4sdXQob3QoZXAsMSksb2UsMTc1LDAsW0lkXSkpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxseHQpLCIiKSwiTGF5b3V0IERpbWVuc2lvbiIpLCJEaW1lbnNpb25zIHRoYXQgYXJlIHBlcm1pdHRlZCB0byBiZSBhbHRlcmVkIGR1cmluZyBsYXlvdXQuIiksZ0V0KSxtcykseEV0KSxvbihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLGh4dCksIiIpLCJTdHJlc3MgRXBzaWxvbiIpLCJUZXJtaW5hdGlvbiBjcml0ZXJpb24gZm9yIHRoZSBpdGVyYXRpdmUgcHJvY2Vzcy4iKSx4ZCksJG8pLHdhKSxvbihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLGZ4dCksIiIpLCJJdGVyYXRpb24gTGltaXQiKSwiTWF4aW11bSBudW1iZXIgb2YgcGVyZm9ybWVkIGl0ZXJhdGlvbnMuIFRha2VzIGhpZ2hlciBwcmVjZWRlbmNlIHRoYW4gJ2Vwc2lsb24nLiIpLGRlKFRpKSkseGMpLEhhKSxvbihxbikpKSksSmxlKChuZXcgRkosZSkpfTt2YXIgaWJlLHNiZSxnRXQsYWJlLG9iZSxjYmU7TihOQywiU3RyZXNzTWV0YURhdGFQcm92aWRlciIsODUwKSxEKDk5MiwxLFBoLEZKKSxsLlFlPWZ1bmN0aW9uKGUpe0psZShlKX07dmFyIG9WLHBFdCxiRXQsdkV0LHdFdCxtRXQsdWJlLGxiZSxoYmUsZmJlLHlFdCxkYmU7TihOQywiU3RyZXNzT3B0aW9ucyIsOTkyKSxEKDk5MywxLHt9LGRrKSxsLiRlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9bmV3IEJXdCxlfSxsLl9lPWZ1bmN0aW9uKGUpe30sTihOQywiU3RyZXNzT3B0aW9ucy9TdHJlc3NGYWN0b3J5Iiw5OTMpLEQoMTEyOCwyMDksXzIsQld0KSxsLlplPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLGgsZDtmb3IobXIobixxZmUsMSksQmUoRmUoemUoZSwoSkQoKSx3RXQpKSkpP0JlKEZlKHplKGUseUV0KSkpfHx1JCgocj1uZXcgcnIoKERtKCksbmV3IFNtKGUpKSkscikpOnljZShuZXcgQ3B0LGUsemMobiwxKSksbz1YbmUoZSkscz11bGUodGhpcy5hLG8pLGQ9cy5LYygpO2QuT2IoKTspaD11KGQuUGIoKSwyMzEpLCEoaC5lLmMubGVuZ3RoPD0xKSYmKFN5bih0aGlzLmIsaCksc2JuKHRoaXMuYiksX3UoaC5kLG5ldyB2cCkpO289a2hlKHMpLG1oZShvKSxvcihuKX0sTihHcSwiU3RyZXNzTGF5b3V0UHJvdmlkZXIiLDExMjgpLEQoMTEyOSwxLEtuLHZwKSxsLnRkPWZ1bmN0aW9uKGUpe3I2dCh1KGUsNDQ3KSl9LE4oR3EsIlN0cmVzc0xheW91dFByb3ZpZGVyL2xhbWJkYSQwJFR5cGUiLDExMjkpLEQoOTkwLDEse30sVXp0KSxsLmM9MCxsLmU9MCxsLmc9MCxOKEdxLCJTdHJlc3NNYWpvcml6YXRpb24iLDk5MCksRCgzNzksMjIsezM6MSwzNToxLDIyOjEsMzc5OjF9LHhldCk7dmFyIEt1dCxZdXQsWHV0LHhFdD16cihHcSwiU3RyZXNzTWFqb3JpemF0aW9uL0RpbWVuc2lvbiIsMzc5LFVyLE1ybixtWmUpLGdiZTtEKDk5MSwxLHFpLERpKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFlRZSh0aGlzLmEsdShlLDE0NCksdShuLDE0NCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZ3QodGhpcyl9LE4oR3EsIlN0cmVzc01ham9yaXphdGlvbi9sYW1iZGEkMCRUeXBlIiw5OTEpLEQoMTIyOSwxLHt9LFpRdCksTih3eCwiRWxrTGF5ZXJlZCIsMTIyOSksRCgxMjMwLDEsS24sTDkpLGwudGQ9ZnVuY3Rpb24oZSl7YXBuKHUoZSwzNykpfSxOKHd4LCJFbGtMYXllcmVkL2xhbWJkYSQwJFR5cGUiLDEyMzApLEQoMTIzMSwxLEtuLHdpKSxsLnRkPWZ1bmN0aW9uKGUpe1hRZSh0aGlzLmEsdShlLDM3KSl9LE4od3gsIkVsa0xheWVyZWQvbGFtYmRhJDEkVHlwZSIsMTIzMSksRCgxMjYzLDEse30sVFV0KTt2YXIgcGJlLGJiZSx2YmU7Tih3eCwiR3JhcGhDb25maWd1cmF0b3IiLDEyNjMpLEQoNzU5LDEsS24sX3MpLGwudGQ9ZnVuY3Rpb24oZSl7Q2FlKHRoaXMuYSx1KGUsMTApKX0sTih3eCwiR3JhcGhDb25maWd1cmF0b3IvbGFtYmRhJDAkVHlwZSIsNzU5KSxEKDc2MCwxLHt9LE05KSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB0NHQoKSxuZXcga24obnVsbCxuZXcgVG4odShlLDI5KS5hLDE2KSl9LE4od3gsIkdyYXBoQ29uZmlndXJhdG9yL2xhbWJkYSQxJFR5cGUiLDc2MCksRCg3NjEsMSxLbixaaSksbC50ZD1mdW5jdGlvbihlKXtDYWUodGhpcy5hLHUoZSwxMCkpfSxOKHd4LCJHcmFwaENvbmZpZ3VyYXRvci9sYW1iZGEkMiRUeXBlIiw3NjEpLEQoMTEyNywyMDksXzIsWXp0KSxsLlplPWZ1bmN0aW9uKGUsbil7dmFyIHI7cj1LbW4obmV3IGVxdCxlKSxHdCh6ZShlLCh4ZSgpLGp5KSkpPT09R3QoKCQwKCksbnApKT9DbG4odGhpcy5hLHIsbik6a3BuKHRoaXMuYSxyLG4pLGdoZShuZXcgUkoscil9LE4od3gsIkxheWVyZWRMYXlvdXRQcm92aWRlciIsMTEyNyksRCgzNTYsMjIsezM6MSwzNToxLDIyOjEsMzU2OjF9LHhNKTt2YXIgTGQsZmIsZnUsR2Msam8sa0V0PXpyKHd4LCJMYXllcmVkUGhhc2VzIiwzNTYsVXIsZHNuLHlaZSksd2JlO0QoMTY1MSwxLHt9LEJlZSksbC5pPTA7dmFyIG1iZTtOKHpJLCJDb21wb25lbnRzVG9DR3JhcGhUcmFuc2Zvcm1lciIsMTY1MSk7dmFyIHliZTtEKDE2NTIsMSx7fSwkZiksbC5lZj1mdW5jdGlvbihlLG4pe3JldHVybiBiLk1hdGgubWluKGUuYSE9bnVsbD9adChlLmEpOmUuYy5pLG4uYSE9bnVsbD9adChuLmEpOm4uYy5pKX0sbC5mZj1mdW5jdGlvbihlLG4pe3JldHVybiBiLk1hdGgubWluKGUuYSE9bnVsbD9adChlLmEpOmUuYy5pLG4uYSE9bnVsbD9adChuLmEpOm4uYy5pKX0sTih6SSwiQ29tcG9uZW50c1RvQ0dyYXBoVHJhbnNmb3JtZXIvMSIsMTY1MiksRCg4MSwxLHs4MToxfSksbC5pPTAsbC5rPSEwLGwubz1Oczt2YXIgUXV0PU4oQkMsIkNOb2RlIiw4MSk7RCg0NjAsODEsezQ2MDoxLDgxOjF9LF8ydCxDM3QpLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iIn0sTih6SSwiQ29tcG9uZW50c1RvQ0dyYXBoVHJhbnNmb3JtZXIvQ1JlY3ROb2RlIiw0NjApLEQoMTYyMywxLHt9LG92KTt2YXIgWnV0LEp1dDtOKHpJLCJPbmVEaW1lbnNpb25hbENvbXBvbmVudHNDb21wYWN0aW9uIiwxNjIzKSxEKDE2MjQsMSx7fSxCZCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4geHJuKHUoZSw0NikpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sTih6SSwiT25lRGltZW5zaW9uYWxDb21wb25lbnRzQ29tcGFjdGlvbi9sYW1iZGEkMCRUeXBlIiwxNjI0KSxEKDE2MjUsMSx7fSxFMyksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gTmxuKHUoZSw0NikpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sTih6SSwiT25lRGltZW5zaW9uYWxDb21wb25lbnRzQ29tcGFjdGlvbi9sYW1iZGEkMSRUeXBlIiwxNjI1KSxEKDE2NTQsMSx7fSxLWXQpLE4oQkMsIkNHcmFwaCIsMTY1NCksRCgxODksMSx7MTg5OjF9LFppdCksbC5iPTAsbC5jPTAsbC5lPTAsbC5nPSEwLGwuaT1OcyxOKEJDLCJDR3JvdXAiLDE4OSksRCgxNjUzLDEse30sUjUpLGwuZWY9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gYi5NYXRoLm1heChlLmEhPW51bGw/WnQoZS5hKTplLmMuaSxuLmEhPW51bGw/WnQobi5hKTpuLmMuaSl9LGwuZmY9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gYi5NYXRoLm1heChlLmEhPW51bGw/WnQoZS5hKTplLmMuaSxuLmEhPW51bGw/WnQobi5hKTpuLmMuaSl9LE4oQkMsYmZlLDE2NTMpLEQoMTY1NSwxLHt9LFNvZSksbC5kPSExO3ZhciB4YmUsdGx0PU4oQkMsbWZlLDE2NTUpO0QoMTY1NiwxLHt9LG91KSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBoYnQoKSxGbigpLHUodShlLDQ2KS5hLDgxKS5kLmUhPTB9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxOKEJDLHlmZSwxNjU2KSxEKDgyMywxLHt9LFB2dCksbC5hPSExLGwuYj0hMSxsLmM9ITEsbC5kPSExLE4oQkMseGZlLDgyMyksRCgxODI1LDEse30sZll0KSxOKFVxLGtmZSwxODI1KTt2YXIgZ089YXMoUzIsZ2ZlKTtEKDE4MjYsMSx7MzY5OjF9LEhYdCksbC5LZT1mdW5jdGlvbihlKXtwdm4odGhpcyx1KGUsNDY2KSl9LE4oVXEsRWZlLDE4MjYpLEQoMTgyNywxLHFpLGo1KSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHBubih1KGUsODEpLHUobiw4MSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZ3QodGhpcyl9LE4oVXEsVGZlLDE4MjcpLEQoNDY2LDEsezQ2NjoxfSxDYnQpLGwuYT0hMSxOKFVxLF9mZSw0NjYpLEQoMTgyOCwxLHFpLG5vKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFMxbih1KGUsNDY2KSx1KG4sNDY2KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBndCh0aGlzKX0sTihVcSxDZmUsMTgyOCksRCgxNDAsMSx7MTQwOjF9LGk4LE12dCksbC5GYj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gZT09bnVsbHx8dTZuIT1kbChlKT8hMToobj11KGUsMTQwKSxSYyh0aGlzLmMsbi5jKSYmUmModGhpcy5kLG4uZCkpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHZ6KHV0KG90KFFuLDEpLE1lLDEsNSxbdGhpcy5jLHRoaXMuZF0pKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiIoIit0aGlzLmMrWGErdGhpcy5kKyh0aGlzLmE/ImN4IjoiIikrdGhpcy5iKyIpIn0sbC5hPSEwLGwuYz0wLGwuZD0wO3ZhciB1Nm49TihTMiwiUG9pbnQiLDE0MCk7RCg0MDUsMjIsezM6MSwzNToxLDIyOjEsNDA1OjF9LHFSKTt2YXIgQ3csRHksJDQsSXksa2JlPXpyKFMyLCJQb2ludC9RdWFkcmFudCIsNDA1LFVyLERpbix4WmUpLEViZTtEKDE2NDIsMSx7fSxYenQpLGwuYj1udWxsLGwuYz1udWxsLGwuZD1udWxsLGwuZT1udWxsLGwuZj1udWxsO3ZhciBUYmUsX2JlLENiZSxTYmUsQWJlO04oUzIsIlJlY3RpbGluZWFyQ29udmV4SHVsbCIsMTY0MiksRCg1NzQsMSx7MzY5OjF9LEJ6KSxsLktlPWZ1bmN0aW9uKGUpe2dhbih0aGlzLHUoZSwxNDApKX0sbC5iPTA7dmFyIEVFdDtOKFMyLCJSZWN0aWxpbmVhckNvbnZleEh1bGwvTWF4aW1hbEVsZW1lbnRzRXZlbnRIYW5kbGVyIiw1NzQpLEQoMTY0NCwxLHFpLHV2KSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGlubih2ZShlKSx2ZShuKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBndCh0aGlzKX0sTihTMiwiUmVjdGlsaW5lYXJDb252ZXhIdWxsL01heGltYWxFbGVtZW50c0V2ZW50SGFuZGxlci9sYW1iZGEkMCRUeXBlIiwxNjQ0KSxEKDE2NDMsMSx7MzY5OjF9LGFlZSksbC5LZT1mdW5jdGlvbihlKXtBMm4odGhpcyx1KGUsMTQwKSl9LGwuYT0wLGwuYj1udWxsLGwuYz1udWxsLGwuZD1udWxsLGwuZT1udWxsLE4oUzIsIlJlY3RpbGluZWFyQ29udmV4SHVsbC9SZWN0YW5nbGVFdmVudEhhbmRsZXIiLDE2NDMpLEQoMTY0NSwxLHFpLHdnKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG9pbih1KGUsMTQwKSx1KG4sMTQwKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBndCh0aGlzKX0sTihTMiwiUmVjdGlsaW5lYXJDb252ZXhIdWxsL2xhbWJkYSQwJFR5cGUiLDE2NDUpLEQoMTY0NiwxLHFpLGN2KSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGNpbih1KGUsMTQwKSx1KG4sMTQwKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBndCh0aGlzKX0sTihTMiwiUmVjdGlsaW5lYXJDb252ZXhIdWxsL2xhbWJkYSQxJFR5cGUiLDE2NDYpLEQoMTY0NywxLHFpLEpLKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGxpbih1KGUsMTQwKSx1KG4sMTQwKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBndCh0aGlzKX0sTihTMiwiUmVjdGlsaW5lYXJDb252ZXhIdWxsL2xhbWJkYSQyJFR5cGUiLDE2NDcpLEQoMTY0OCwxLHFpLHFiKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHVpbih1KGUsMTQwKSx1KG4sMTQwKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBndCh0aGlzKX0sTihTMiwiUmVjdGlsaW5lYXJDb252ZXhIdWxsL2xhbWJkYSQzJFR5cGUiLDE2NDgpLEQoMTY0OSwxLHFpLHRZKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGYwbih1KGUsMTQwKSx1KG4sMTQwKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBndCh0aGlzKX0sTihTMiwiUmVjdGlsaW5lYXJDb252ZXhIdWxsL2xhbWJkYSQ0JFR5cGUiLDE2NDkpLEQoMTY1MCwxLHt9LHlRdCksTihTMiwiU2NhbmxpbmUiLDE2NTApLEQoMjAwNSwxLHt9KSxOKGtkLCJBYnN0cmFjdEdyYXBoUGxhY2VyIiwyMDA1KSxEKDMyNSwxLHszMjU6MX0sZld0KSxsLm1mPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm5mKGUpPyhjbih0aGlzLmIsdShLKGUsKGFlKCksTnkpKSwyMSksZSksITApOiExfSxsLm5mPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvO2ZvcihuPXUoSyhlLChhZSgpLE55KSksMjEpLG89dShQaShIaSxuKSwyMSkscz1vLktjKCk7cy5PYigpOylpZihyPXUocy5QYigpLDIxKSwhdShQaSh0aGlzLmIsciksMTUpLmRjKCkpcmV0dXJuITE7cmV0dXJuITB9O3ZhciBIaTtOKGtkLCJDb21wb25lbnRHcm91cCIsMzI1KSxEKDc2NSwyMDA1LHt9LE1wdCksbC5vZj1mdW5jdGlvbihlKXt2YXIgbixyO2ZvcihyPW5ldyBTKHRoaXMuYSk7ci5hPHIuYy5jLmxlbmd0aDspaWYobj11KFEociksMzI1KSxuLm1mKGUpKXJldHVybjt1ZSh0aGlzLmEsbmV3IGZXdChlKSl9LGwubGY9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG8saCxkLHcsayxfLE0sQixxLEcsVztpZih0aGlzLmEuYz1OdChRbixNZSwxLDAsNSwxKSxuLmEuYz1OdChRbixNZSwxLDAsNSwxKSxlLmRjKCkpe24uZi5hPTAsbi5mLmI9MDtyZXR1cm59Zm9yKGQ9dShlLlhiKDApLDM3KSxCbyhuLGQpLG89ZS5LYygpO28uT2IoKTspcz11KG8uUGIoKSwzNyksdGhpcy5vZihzKTtmb3IoVz1uZXcgRGEsaD1adCh2ZShLKGQsKHhlKCksQU8pKSkpLF89bmV3IFModGhpcy5hKTtfLmE8Xy5jLmMubGVuZ3RoOyl3PXUoUShfKSwzMjUpLE09TWhlKHcsaCksTmcoWWoody5iKSxXLmEsVy5iKSxXLmErPU0uYSxXLmIrPU0uYjtpZihuLmYuYT1XLmEtaCxuLmYuYj1XLmItaCxCZShGZShLKGQsV1YpKSkmJkd0KEsoZCxYMCkpPT09R3QoKHEwKCksQ0UpKSl7Zm9yKEc9ZS5LYygpO0cuT2IoKTspQj11KEcuUGIoKSwzNyksd0MoQixCLmMuYSxCLmMuYik7Zm9yKHI9bmV3IEQ5LEU2dChyLGUsaCkscT1lLktjKCk7cS5PYigpOylCPXUocS5QYigpLDM3KSxGaShLZihCLmMpLHIuZSk7RmkoS2Yobi5mKSxyLmEpfWZvcihrPW5ldyBTKHRoaXMuYSk7ay5hPGsuYy5jLmxlbmd0aDspdz11KFEoayksMzI1KSxFbXQobixZaih3LmIpKX0sTihrZCwiQ29tcG9uZW50R3JvdXBHcmFwaFBsYWNlciIsNzY1KSxEKDEyOTMsNzY1LHt9LGNxdCksbC5vZj1mdW5jdGlvbihlKXtCcmUodGhpcyxlKX0sbC5sZj1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFosYnQsTXQsU3QsanQ7aWYodGhpcy5hLmM9TnQoUW4sTWUsMSwwLDUsMSksbi5hLmM9TnQoUW4sTWUsMSwwLDUsMSksZS5kYygpKXtuLmYuYT0wLG4uZi5iPTA7cmV0dXJufWZvcihkPXUoZS5YYigwKSwzNyksQm8obixkKSxvPWUuS2MoKTtvLk9iKCk7KXM9dShvLlBiKCksMzcpLEJyZSh0aGlzLHMpO2ZvcihqdD1uZXcgRGEsU3Q9bmV3IERhLFo9bmV3IERhLFc9bmV3IERhLGg9WnQodmUoSyhkLCh4ZSgpLEFPKSkpKSxfPW5ldyBTKHRoaXMuYSk7Xy5hPF8uYy5jLmxlbmd0aDspe2lmKHc9dShRKF8pLDMyNSksUHAodShLKG4sKGRpKCksancpKSwxMDMpKSl7Zm9yKFouYT1qdC5hLE10PW5ldyBJVChTXyhZbnQody5iKS5hKS5hLmtjKCkpO010LmIuT2IoKTspaWYoYnQ9dShQUihNdC5iLlBiKCkpLDIxKSxidC5IYygoYmUoKSxPbikpKXtaLmE9U3QuYTticmVha319ZWxzZSBpZihhOCh1KEsobixqdyksMTAzKSkpe2ZvcihaLmI9anQuYixNdD1uZXcgSVQoU18oWW50KHcuYikuYSkuYS5rYygpKTtNdC5iLk9iKCk7KWlmKGJ0PXUoUFIoTXQuYi5QYigpKSwyMSksYnQuSGMoKGJlKCksQm4pKSl7Wi5iPVN0LmI7YnJlYWt9fWlmKE09TWhlKHUodyw1NzApLGgpLE5nKFlqKHcuYiksWi5hLFouYiksUHAodShLKG4sancpLDEwMykpKXtmb3IoU3QuYT1aLmErTS5hLFcuYT1iLk1hdGgubWF4KFcuYSxTdC5hKSxNdD1uZXcgSVQoU18oWW50KHcuYikuYSkuYS5rYygpKTtNdC5iLk9iKCk7KWlmKGJ0PXUoUFIoTXQuYi5QYigpKSwyMSksYnQuSGMoKGJlKCkseXIpKSl7anQuYT1aLmErTS5hO2JyZWFrfVN0LmI9Wi5iK00uYixaLmI9U3QuYixXLmI9Yi5NYXRoLm1heChXLmIsWi5iKX1lbHNlIGlmKGE4KHUoSyhuLGp3KSwxMDMpKSl7Zm9yKFN0LmI9Wi5iK00uYixXLmI9Yi5NYXRoLm1heChXLmIsU3QuYiksTXQ9bmV3IElUKFNfKFludCh3LmIpLmEpLmEua2MoKSk7TXQuYi5PYigpOylpZihidD11KFBSKE10LmIuUGIoKSksMjEpLGJ0LkhjKChiZSgpLEhuKSkpe2p0LmI9Wi5iK00uYjticmVha31TdC5hPVouYStNLmEsWi5hPVN0LmEsVy5hPWIuTWF0aC5tYXgoVy5hLFouYSl9fWlmKG4uZi5hPVcuYS1oLG4uZi5iPVcuYi1oLEJlKEZlKEsoZCxXVikpKSYmR3QoSyhkLFgwKSk9PT1HdCgocTAoKSxDRSkpKXtmb3IoRz1lLktjKCk7Ry5PYigpOylCPXUoRy5QYigpLDM3KSx3QyhCLEIuYy5hLEIuYy5iKTtmb3Iocj1uZXcgRDksRTZ0KHIsZSxoKSxxPWUuS2MoKTtxLk9iKCk7KUI9dShxLlBiKCksMzcpLEZpKEtmKEIuYyksci5lKTtGaShLZihuLmYpLHIuYSl9Zm9yKGs9bmV3IFModGhpcy5hKTtrLmE8ay5jLmMubGVuZ3RoOyl3PXUoUShrKSwzMjUpLEVtdChuLFlqKHcuYikpfSxOKGtkLCJDb21wb25lbnRHcm91cE1vZGVsT3JkZXJHcmFwaFBsYWNlciIsMTI5MyksRCg0MjMsMjIsezM6MSwzNToxLDIyOjEsNDIzOjF9LGtldCk7dmFyIGVsdCxURXQsejQsX0V0PXpyKGtkLCJDb21wb25lbnRPcmRlcmluZ1N0cmF0ZWd5Iiw0MjMsVXIsTHJuLGtaZSksTGJlO0QoNjUwLDEse30sRDkpLE4oa2QsIkNvbXBvbmVudHNDb21wYWN0b3IiLDY1MCksRCgxNDY4LDEyLG9mZSxnSnQpLGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIGxDKHRoaXMsdShlLDE0MCkpfSxOKGtkLCJDb21wb25lbnRzQ29tcGFjdG9yL0h1bGxwb2ludHMiLDE0NjgpLEQoMTQ2NSwxLHs4NDE6MX0sSmllKSxsLmE9ITEsTihrZCwiQ29tcG9uZW50c0NvbXBhY3Rvci9JbnRlcm5hbENvbXBvbmVudCIsMTQ2NSksRCgxNDY0LDEsdDAsUXp0KSxsLkpjPWZ1bmN0aW9uKGUpe19hKHRoaXMsZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFModGhpcy5hKX0sTihrZCwiQ29tcG9uZW50c0NvbXBhY3Rvci9JbnRlcm5hbENvbm5lY3RlZENvbXBvbmVudHMiLDE0NjQpLEQoMTQ2NywxLHs1OTQ6MX0sTG9lKSxsLmhmPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGwuamY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLmdmPWZ1bmN0aW9uKCl7cmV0dXJuIG5zdCh0aGlzLmQpfSxsLmtmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sTihrZCwiQ29tcG9uZW50c0NvbXBhY3Rvci9JbnRlcm5hbEV4dGVybmFsRXh0ZW5zaW9uIiwxNDY3KSxEKDE0NjYsMSx7NTk0OjF9LHRxdCksbC5qZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuZ2Y9ZnVuY3Rpb24oKXtyZXR1cm4gbnN0KHRoaXMuZCl9LGwuaGY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxsLmtmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sTihrZCwiQ29tcG9uZW50c0NvbXBhY3Rvci9JbnRlcm5hbFVuaW9uRXh0ZXJuYWxFeHRlbnNpb24iLDE0NjYpLEQoMTQ3MCwxLHt9LFdjZSksTihrZCwiQ29tcG9uZW50c0NvbXBhY3Rvci9PdXRlclNlZ21lbnRzIiwxNDcwKSxEKDE0NjksMSx7fSxaenQpLE4oa2QsIkNvbXBvbmVudHNDb21wYWN0b3IvU2VnbWVudHMiLDE0NjkpLEQoMTI2NCwxLHt9LFZYdCksTihrZCxyeHQsMTI2NCksRCgxMjY1LDEscWksZVkpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZGluKHUoZSwzNyksdShuLDM3KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBndCh0aGlzKX0sTihrZCwiQ29tcG9uZW50c1Byb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxMjY1KSxEKDU3MCwzMjUsezMyNToxLDU3MDoxfSxkSnQpLGwubWY9ZnVuY3Rpb24oZSl7cmV0dXJuIE15dCh0aGlzLGUpfSxsLm5mPWZ1bmN0aW9uKGUpe3JldHVybiBTY2UodGhpcyxlKX07dmFyIHRpO04oa2QsIk1vZGVsT3JkZXJDb21wb25lbnRHcm91cCIsNTcwKSxEKDEyOTEsMjAwNSx7fSxLUCksbC5sZj1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFosYnQsTXQsU3QsanQsUXQsY2UsX2U7aWYoZS5nYygpPT0xKXtqdD11KGUuWGIoMCksMzcpLGp0IT1uJiYobi5hLmM9TnQoUW4sTWUsMSwwLDUsMSksSXVlKG4sanQsMCwwKSxCbyhuLGp0KSxUd3Qobi5kLGp0LmQpLG4uZi5hPWp0LmYuYSxuLmYuYj1qdC5mLmIpO3JldHVybn1lbHNlIGlmKGUuZGMoKSl7bi5hLmM9TnQoUW4sTWUsMSwwLDUsMSksbi5mLmE9MCxuLmYuYj0wO3JldHVybn1pZihHdChLKG4sKHhlKCksTngpKSk9PT1HdCgoZXcoKSx6NCkpKXtmb3Ioaz1lLktjKCk7ay5PYigpOyl7Zm9yKGQ9dShrLlBiKCksMzcpLE10PTAsWj1uZXcgUyhkLmEpO1ouYTxaLmMuYy5sZW5ndGg7KVc9dShRKFopLDEwKSxNdCs9dShLKFcsT3dlKSwxOSkuYTtkLnA9TXR9cG4oKSxlLmFkKG5ldyB6Zil9Zm9yKGg9dShlLlhiKDApLDM3KSxuLmEuYz1OdChRbixNZSwxLDAsNSwxKSxCbyhuLGgpLEc9MCxRdD0wLF89ZS5LYygpO18uT2IoKTspZD11KF8uUGIoKSwzNyksU3Q9ZC5mLEc9Yi5NYXRoLm1heChHLFN0LmEpLFF0Kz1TdC5hKlN0LmI7Zm9yKEc9Yi5NYXRoLm1heChHLGIuTWF0aC5zcXJ0KFF0KSpadCh2ZShLKG4sVVYpKSkpLG89WnQodmUoSyhuLEFPKSkpLGNlPTAsX2U9MCxxPTAscj1vLHc9ZS5LYygpO3cuT2IoKTspZD11KHcuUGIoKSwzNyksU3Q9ZC5mLGNlK1N0LmE+RyYmKGNlPTAsX2UrPXErbyxxPTApLGJ0PWQuYyx3QyhkLGNlK2J0LmEsX2UrYnQuYiksS2YoYnQpLHI9Yi5NYXRoLm1heChyLGNlK1N0LmEpLHE9Yi5NYXRoLm1heChxLFN0LmIpLGNlKz1TdC5hK287aWYobi5mLmE9cixuLmYuYj1fZStxLEJlKEZlKEsoaCxXVikpKSl7Zm9yKHM9bmV3IEQ5LEU2dChzLGUsbyksQj1lLktjKCk7Qi5PYigpOylNPXUoQi5QYigpLDM3KSxGaShLZihNLmMpLHMuZSk7RmkoS2Yobi5mKSxzLmEpfUVtdChuLGUpfSxOKGtkLCJTaW1wbGVSb3dHcmFwaFBsYWNlciIsMTI5MSksRCgxMjkyLDEscWksemYpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbGNuKHUoZSwzNyksdShuLDM3KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBndCh0aGlzKX0sTihrZCwiU2ltcGxlUm93R3JhcGhQbGFjZXIvMSIsMTI5Mik7dmFyIE1iZTtEKDEyNjIsMSxtZCxwbSksbC5MYj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbj11KEsodShlLDI0MykuYiwoeGUoKSxPbykpLDc0KSwhIW4mJm4uYiE9MH0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuTWI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49dShLKHUoZSwyNDMpLmIsKHhlKCksT28pKSw3NCksISFuJiZuLmIhPTB9LE4oV3EsIkNvbXBvdW5kR3JhcGhQb3N0cHJvY2Vzc29yLzEiLDEyNjIpLEQoMTI2MSwxLHZzLG5xdCksbC5wZj1mdW5jdGlvbihlLG4pe2VzZSh0aGlzLHUoZSwzNyksbil9LE4oV3EsIkNvbXBvdW5kR3JhcGhQcmVwcm9jZXNzb3IiLDEyNjEpLEQoNDQxLDEsezQ0MToxfSxxcmUpLGwuYz0hMSxOKFdxLCJDb21wb3VuZEdyYXBoUHJlcHJvY2Vzc29yL0V4dGVybmFsUG9ydCIsNDQxKSxEKDI0MywxLHsyNDM6MX0sVGopLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gb250KHRoaXMuYykrIjoiK0VvZSh0aGlzLmIpfSxOKFdxLCJDcm9zc0hpZXJhcmNoeUVkZ2UiLDI0MyksRCg3NjMsMSxxaSxOaSksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBKZm4odGhpcyx1KGUsMjQzKSx1KG4sMjQzKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBndCh0aGlzKX0sTihXcSwiQ3Jvc3NIaWVyYXJjaHlFZGdlQ29tcGFyYXRvciIsNzYzKSxEKDI5OSwxMzQsezM6MSwyOTk6MSw5NDoxLDEzNDoxfSksbC5wPTAsTihydSwiTEdyYXBoRWxlbWVudCIsMjk5KSxEKDE3LDI5OSx7MzoxLDE3OjEsMjk5OjEsOTQ6MSwxMzQ6MX0senYpLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gRW9lKHRoaXMpfTt2YXIgbmx0PU4ocnUsIkxFZGdlIiwxNyk7RCgzNywyOTksezM6MSwyMDoxLDM3OjEsMjk5OjEsOTQ6MSwxMzQ6MX0sR210KSxsLkpjPWZ1bmN0aW9uKGUpe19hKHRoaXMsZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFModGhpcy5iKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuYy5sZW5ndGg9PTA/IkctdW5sYXllcmVkIitKcCh0aGlzLmEpOnRoaXMuYS5jLmxlbmd0aD09MD8iRy1sYXllcmVkIitKcCh0aGlzLmIpOiJHW2xheWVybGVzcyIrSnAodGhpcy5hKSsiLCBsYXllcnMiK0pwKHRoaXMuYikrIl0ifTt2YXIgRGJlPU4ocnUsIkxHcmFwaCIsMzcpLEliZTtEKDY1NywxLHt9KSxsLnFmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZS5ufSxsLldlPWZ1bmN0aW9uKGUpe3JldHVybiBLKHRoaXMuZSxlKX0sbC5yZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmUub30sbC5zZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmUucH0sbC5YZT1mdW5jdGlvbihlKXtyZXR1cm4gZWEodGhpcy5lLGUpfSxsLnRmPWZ1bmN0aW9uKGUpe3RoaXMuZS5uLmE9ZS5hLHRoaXMuZS5uLmI9ZS5ifSxsLnVmPWZ1bmN0aW9uKGUpe3RoaXMuZS5vLmE9ZS5hLHRoaXMuZS5vLmI9ZS5ifSxsLnZmPWZ1bmN0aW9uKGUpe3RoaXMuZS5wPWV9LE4ocnUsIkxHcmFwaEFkYXB0ZXJzL0Fic3RyYWN0TFNoYXBlQWRhcHRlciIsNjU3KSxEKDU3NywxLHs4Mzk6MX0sbnMpLGwud2Y9ZnVuY3Rpb24oKXt2YXIgZSxuO2lmKCF0aGlzLmIpZm9yKHRoaXMuYj1IZCh0aGlzLmEuYi5jLmxlbmd0aCksbj1uZXcgUyh0aGlzLmEuYik7bi5hPG4uYy5jLmxlbmd0aDspZT11KFEobiksNzApLHVlKHRoaXMuYixuZXcgVWEoZSkpO3JldHVybiB0aGlzLmJ9LGwuYj1udWxsLE4ocnUsIkxHcmFwaEFkYXB0ZXJzL0xFZGdlQWRhcHRlciIsNTc3KSxEKDY1NiwxLHt9LG5ydCksbC54Zj1mdW5jdGlvbigpe3ZhciBlLG4scixzLG8saDtpZighdGhpcy5iKXtmb3IodGhpcy5iPW5ldyBsZSxzPW5ldyBTKHRoaXMuYS5iKTtzLmE8cy5jLmMubGVuZ3RoOylmb3Iocj11KFEocyksMjkpLGg9bmV3IFMoci5hKTtoLmE8aC5jLmMubGVuZ3RoOylpZihvPXUoUShoKSwxMCksdGhpcy5jLk1iKG8pJiYodWUodGhpcy5iLG5ldyBfaih0aGlzLG8sdGhpcy5lKSksdGhpcy5kKSl7aWYoZWEobywoYWUoKSxPeCkpKWZvcihuPXUoSyhvLE94KSwxNSkuS2MoKTtuLk9iKCk7KWU9dShuLlBiKCksMTApLHVlKHRoaXMuYixuZXcgX2oodGhpcyxlLCExKSk7aWYoZWEobyxBeCkpZm9yKG49dShLKG8sQXgpLDE1KS5LYygpO24uT2IoKTspZT11KG4uUGIoKSwxMCksdWUodGhpcy5iLG5ldyBfaih0aGlzLGUsITEpKX19cmV0dXJuIHRoaXMuYn0sbC5xZj1mdW5jdGlvbigpe3Rocm93IG50KG5ldyBUZyhHZmUpKX0sbC5XZT1mdW5jdGlvbihlKXtyZXR1cm4gSyh0aGlzLmEsZSl9LGwucmY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmZ9LGwuc2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLnB9LGwuWGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGVhKHRoaXMuYSxlKX0sbC50Zj1mdW5jdGlvbihlKXt0aHJvdyBudChuZXcgVGcoR2ZlKSl9LGwudWY9ZnVuY3Rpb24oZSl7dGhpcy5hLmYuYT1lLmEsdGhpcy5hLmYuYj1lLmJ9LGwudmY9ZnVuY3Rpb24oZSl7dGhpcy5hLnA9ZX0sbC5iPW51bGwsbC5kPSExLGwuZT0hMSxOKHJ1LCJMR3JhcGhBZGFwdGVycy9MR3JhcGhBZGFwdGVyIiw2NTYpLEQoNTc2LDY1Nyx7MTgxOjF9LFVhKSxOKHJ1LCJMR3JhcGhBZGFwdGVycy9MTGFiZWxBZGFwdGVyIiw1NzYpLEQoNTc1LDY1Nyx7NjgwOjF9LF9qKSxsLnlmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC56Zj1mdW5jdGlvbigpe3JldHVybiBwbigpLHBuKCksdW99LGwud2Y9ZnVuY3Rpb24oKXt2YXIgZSxuO2lmKCF0aGlzLmEpZm9yKHRoaXMuYT1IZCh1KHRoaXMuZSwxMCkuYi5jLmxlbmd0aCksbj1uZXcgUyh1KHRoaXMuZSwxMCkuYik7bi5hPG4uYy5jLmxlbmd0aDspZT11KFEobiksNzApLHVlKHRoaXMuYSxuZXcgVWEoZSkpO3JldHVybiB0aGlzLmF9LGwuQWY9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT11KHRoaXMuZSwxMCkuZCxuZXcgSjJ0KGUuZCxlLmMsZS5hLGUuYil9LGwuQmY9ZnVuY3Rpb24oKXtyZXR1cm4gcG4oKSxwbigpLHVvfSxsLkNmPWZ1bmN0aW9uKCl7dmFyIGUsbjtpZighdGhpcy5jKWZvcih0aGlzLmM9SGQodSh0aGlzLmUsMTApLmouYy5sZW5ndGgpLG49bmV3IFModSh0aGlzLmUsMTApLmopO24uYTxuLmMuYy5sZW5ndGg7KWU9dShRKG4pLDExKSx1ZSh0aGlzLmMsbmV3IFdWdChlLHRoaXMuZCkpO3JldHVybiB0aGlzLmN9LGwuRGY9ZnVuY3Rpb24oKXtyZXR1cm4gQmUoRmUoSyh1KHRoaXMuZSwxMCksKGFlKCksRzl0KSkpKX0sbC5FZj1mdW5jdGlvbihlKXt1KHRoaXMuZSwxMCkuZC5iPWUuYix1KHRoaXMuZSwxMCkuZC5kPWUuZCx1KHRoaXMuZSwxMCkuZC5jPWUuYyx1KHRoaXMuZSwxMCkuZC5hPWUuYX0sbC5GZj1mdW5jdGlvbihlKXt1KHRoaXMuZSwxMCkuZi5iPWUuYix1KHRoaXMuZSwxMCkuZi5kPWUuZCx1KHRoaXMuZSwxMCkuZi5jPWUuYyx1KHRoaXMuZSwxMCkuZi5hPWUuYX0sbC5HZj1mdW5jdGlvbigpe0thbih0aGlzLCh6VCgpLEliZSkpfSxsLmE9bnVsbCxsLmI9bnVsbCxsLmM9bnVsbCxsLmQ9ITEsTihydSwiTEdyYXBoQWRhcHRlcnMvTE5vZGVBZGFwdGVyIiw1NzUpLEQoMTcyMiw2NTcsezgzODoxfSxXVnQpLGwuemY9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscztpZih0aGlzLmQmJnUodGhpcy5lLDExKS5pLms9PShHbigpLFVjKSlyZXR1cm4gcG4oKSxwbigpLHVvO2lmKCF0aGlzLmEpe2Zvcih0aGlzLmE9bmV3IGxlLHI9bmV3IFModSh0aGlzLmUsMTEpLmUpO3IuYTxyLmMuYy5sZW5ndGg7KWU9dShRKHIpLDE3KSx1ZSh0aGlzLmEsbmV3IG5zKGUpKTtpZih0aGlzLmQmJihzPXUoSyh1KHRoaXMuZSwxMSksKGFlKCksc2wpKSwxMCkscykpZm9yKG49bmV3IGFyKGxyKFVvKHMpLmEuS2MoKSxuZXcgSCkpO1ZyKG4pOyllPXUoSXIobiksMTcpLHVlKHRoaXMuYSxuZXcgbnMoZSkpfXJldHVybiB0aGlzLmF9LGwud2Y9ZnVuY3Rpb24oKXt2YXIgZSxuO2lmKCF0aGlzLmIpZm9yKHRoaXMuYj1IZCh1KHRoaXMuZSwxMSkuZi5jLmxlbmd0aCksbj1uZXcgUyh1KHRoaXMuZSwxMSkuZik7bi5hPG4uYy5jLmxlbmd0aDspZT11KFEobiksNzApLHVlKHRoaXMuYixuZXcgVWEoZSkpO3JldHVybiB0aGlzLmJ9LGwuQmY9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscztpZih0aGlzLmQmJnUodGhpcy5lLDExKS5pLms9PShHbigpLFVjKSlyZXR1cm4gcG4oKSxwbigpLHVvO2lmKCF0aGlzLmMpe2Zvcih0aGlzLmM9bmV3IGxlLHI9bmV3IFModSh0aGlzLmUsMTEpLmcpO3IuYTxyLmMuYy5sZW5ndGg7KWU9dShRKHIpLDE3KSx1ZSh0aGlzLmMsbmV3IG5zKGUpKTtpZih0aGlzLmQmJihzPXUoSyh1KHRoaXMuZSwxMSksKGFlKCksc2wpKSwxMCkscykpZm9yKG49bmV3IGFyKGxyKCRzKHMpLmEuS2MoKSxuZXcgSCkpO1ZyKG4pOyllPXUoSXIobiksMTcpLHVlKHRoaXMuYyxuZXcgbnMoZSkpfXJldHVybiB0aGlzLmN9LGwuSGY9ZnVuY3Rpb24oKXtyZXR1cm4gdSh0aGlzLmUsMTEpLmp9LGwuSWY9ZnVuY3Rpb24oKXtyZXR1cm4gQmUoRmUoSyh1KHRoaXMuZSwxMSksKGFlKCksa08pKSkpfSxsLmE9bnVsbCxsLmI9bnVsbCxsLmM9bnVsbCxsLmQ9ITEsTihydSwiTEdyYXBoQWRhcHRlcnMvTFBvcnRBZGFwdGVyIiwxNzIyKSxEKDE3MjMsMSxxaSxtTCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiB6dm4odShlLDExKSx1KG4sMTEpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGd0KHRoaXMpfSxOKHJ1LCJMR3JhcGhBZGFwdGVycy9Qb3J0Q29tcGFyYXRvciIsMTcyMyksRCg4MDQsMSxnaSxZUCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDEwKSx6VCgpLCEwfSxOKHJ1LCJMR3JhcGhBZGFwdGVycy9sYW1iZGEkMCRUeXBlIiw4MDQpLEQoMzkyLDI5OSx7MzoxLDI5OToxLDM5MjoxLDk0OjEsMTM0OjF9KSxOKHJ1LCJMU2hhcGUiLDM5MiksRCg3MCwzOTIsezM6MSwyOTk6MSw3MDoxLDM5MjoxLDk0OjEsMTM0OjF9LGFIdCxhMnQpLGwuSWI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1tdG4odGhpcyksZT09bnVsbD8ibGFiZWwiOiJsXyIrZX0sTihydSwiTExhYmVsIiw3MCksRCgyMDcsMSx7MzoxLDQ6MSwyMDc6MSw0MTQ6MX0pLGwuRmI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIF90KGUsMjA3KT8obj11KGUsMjA3KSx0aGlzLmQ9PW4uZCYmdGhpcy5hPT1uLmEmJnRoaXMuYj09bi5iJiZ0aGlzLmM9PW4uYyk6ITF9LGwuSGI9ZnVuY3Rpb24oKXt2YXIgZSxuO3JldHVybiBlPXM4KHRoaXMuYik8PDE2LGV8PXM4KHRoaXMuYSkmTXMsbj1zOCh0aGlzLmMpPDwxNixufD1zOCh0aGlzLmQpJk1zLGVebn0sbC5KZj1mdW5jdGlvbihlKXt2YXIgbixyLHMsbyxoLGQsdyxrLF8sTSxCO2ZvcihoPTA7aDxlLmxlbmd0aCYmQXJlKCgkcihoLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoaCkpLFdmZSk7KSsraDtmb3Iobj1lLmxlbmd0aDtuPjAmJkFyZSgoJHIobi0xLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQobi0xKSksS2ZlKTspLS1uO2lmKGg8bil7TT1weShlLnN1YnN0cihoLG4taCksIix8OyIpO3RyeXtmb3Iodz1NLGs9MCxfPXcubGVuZ3RoO2s8XzsrK2spe2lmKGQ9d1trXSxvPXB5KGQsIj0iKSxvLmxlbmd0aCE9Mil0aHJvdyBudChuZXcgUG4oIkV4cGVjdGluZyBhIGxpc3Qgb2Yga2V5LXZhbHVlIHBhaXJzLiIpKTtzPXV5KG9bMF0pLEI9bHkodXkob1sxXSkpLHVuKHMsInRvcCIpP3RoaXMuZD1COnVuKHMsImxlZnQiKT90aGlzLmI9Qjp1bihzLCJib3R0b20iKT90aGlzLmE9Qjp1bihzLCJyaWdodCIpJiYodGhpcy5jPUIpfX1jYXRjaChxKXt0aHJvdyBxPXJzKHEpLF90KHEsMTI3KT8ocj1xLG50KG5ldyBQbihZZmUrcikpKTpudChxKX19fSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIlt0b3A9Iit0aGlzLmQrIixsZWZ0PSIrdGhpcy5iKyIsYm90dG9tPSIrdGhpcy5hKyIscmlnaHQ9Iit0aGlzLmMrIl0ifSxsLmE9MCxsLmI9MCxsLmM9MCxsLmQ9MCxOKHFJLCJTcGFjaW5nIiwyMDcpLEQoMTQyLDIwNyxYZmUsTVQsYVV0LEoydCx5bnQpO3ZhciBDRXQ9TihxSSwiRWxrTWFyZ2luIiwxNDIpO0QoNjUxLDE0MixYZmUsV3R0KSxOKHJ1LCJMTWFyZ2luIiw2NTEpLEQoMTAsMzkyLHszOjEsMjk5OjEsMTA6MSwzOTI6MSw5NDoxLDEzNDoxfSxIMCksbC5JYj1mdW5jdGlvbigpe3JldHVybiBLaWUodGhpcyl9LGwuaT0hMTt2YXIgbzA9TihydSwiTE5vZGUiLDEwKTtEKDI2NywyMix7MzoxLDM1OjEsMjI6MSwyNjc6MX0sS1QpO3ZhciBxMSxJcyxQbCxjYSxxcyxVYyxybHQ9enIocnUsIkxOb2RlL05vZGVUeXBlIiwyNjcsVXIsaWFuLEVaZSksT2JlO0QoMTE2LDIwNyxRZmUsdjYsTXYsZnZ0KTt2YXIgU0V0PU4ocUksIkVsa1BhZGRpbmciLDExNik7RCg3NjQsMTE2LFFmZSxPcHQpLE4ocnUsIkxQYWRkaW5nIiw3NjQpLEQoMTEsMzkyLHszOjEsMjk5OjEsMTE6MSwzOTI6MSw5NDoxLDEzNDoxfSxOYyksbC5JYj1mdW5jdGlvbigpe3ZhciBlLG4scjtyZXR1cm4gZT1uZXcgQXAsWXIoKGUuYSs9InBfIixlKSxXeih0aGlzKSksdGhpcy5pJiZZcih3YygoZS5hKz0iWyIsZSksdGhpcy5pKSwiXSIpLHRoaXMuZS5jLmxlbmd0aD09MSYmdGhpcy5nLmMubGVuZ3RoPT0wJiZ1KFBlKHRoaXMuZSwwKSwxNykuYyE9dGhpcyYmKG49dShQZSh0aGlzLmUsMCksMTcpLmMsWXIoKGUuYSs9IiA8PCAiLGUpLFd6KG4pKSxZcih3YygoZS5hKz0iWyIsZSksbi5pKSwiXSIpKSx0aGlzLmUuYy5sZW5ndGg9PTAmJnRoaXMuZy5jLmxlbmd0aD09MSYmdShQZSh0aGlzLmcsMCksMTcpLmQhPXRoaXMmJihyPXUoUGUodGhpcy5nLDApLDE3KS5kLFlyKChlLmErPSIgPj4gIixlKSxXeihyKSksWXIod2MoKGUuYSs9IlsiLGUpLHIuaSksIl0iKSksZS5hfSxsLmM9ITAsbC5kPSExO3ZhciBBRXQsTEV0LE1FdCxERXQsSUV0LE9FdCxOYmU9TihydSwiTFBvcnQiLDExKTtEKDM5NywxLHQwLHNhKSxsLkpjPWZ1bmN0aW9uKGUpe19hKHRoaXMsZSl9LGwuS2M9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1uZXcgUyh0aGlzLmEuZSksbmV3IFhzKGUpfSxOKHJ1LCJMUG9ydC8xIiwzOTcpLEQoMTI5MCwxLGRhLFhzKSxsLk5iPWZ1bmN0aW9uKGUpe0VhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gdShRKHRoaXMuYSksMTcpLmN9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gSm8odGhpcy5hKX0sbC5RYj1mdW5jdGlvbigpe0NfKHRoaXMuYSl9LE4ocnUsIkxQb3J0LzEvMSIsMTI5MCksRCgzNTksMSx0MCxDciksbC5KYz1mdW5jdGlvbihlKXtfYSh0aGlzLGUpfSxsLktjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9bmV3IFModGhpcy5hLmcpLG5ldyBKdChlKX0sTihydSwiTFBvcnQvMiIsMzU5KSxEKDc2MiwxLGRhLEp0KSxsLk5iPWZ1bmN0aW9uKGUpe0VhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gdShRKHRoaXMuYSksMTcpLmR9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gSm8odGhpcy5hKX0sbC5RYj1mdW5jdGlvbigpe0NfKHRoaXMuYSl9LE4ocnUsIkxQb3J0LzIvMSIsNzYyKSxEKDEyODMsMSx0MCxIVnQpLGwuSmM9ZnVuY3Rpb24oZSl7X2EodGhpcyxlKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgTTEodGhpcyl9LE4ocnUsIkxQb3J0L0NvbWJpbmVJdGVyIiwxMjgzKSxEKDIwMSwxLGRhLE0xKSxsLk5iPWZ1bmN0aW9uKGUpe0VhKHRoaXMsZSl9LGwuUWI9ZnVuY3Rpb24oKXtkSHQoKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiBwXyh0aGlzKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiBKbyh0aGlzLmEpP1EodGhpcy5hKTpRKHRoaXMuYil9LE4ocnUsIkxQb3J0L0NvbWJpbmVJdGVyLzEiLDIwMSksRCgxMjg1LDEsbWQsd3ApLGwuTGI9ZnVuY3Rpb24oZSl7cmV0dXJuIFRZdChlKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIFZ1KCksdShlLDExKS5lLmMubGVuZ3RoIT0wfSxOKHJ1LCJMUG9ydC9sYW1iZGEkMCRUeXBlIiwxMjg1KSxEKDEyODQsMSxtZCxibSksbC5MYj1mdW5jdGlvbihlKXtyZXR1cm4gX1l0KGUpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gVnUoKSx1KGUsMTEpLmcuYy5sZW5ndGghPTB9LE4ocnUsIkxQb3J0L2xhbWJkYSQxJFR5cGUiLDEyODQpLEQoMTI4NiwxLG1kLG5ZKSxsLkxiPWZ1bmN0aW9uKGUpe3JldHVybiBWdSgpLHUoZSwxMSkuaj09KGJlKCksT24pfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gVnUoKSx1KGUsMTEpLmo9PShiZSgpLE9uKX0sTihydSwiTFBvcnQvbGFtYmRhJDIkVHlwZSIsMTI4NiksRCgxMjg3LDEsbWQsSGIpLGwuTGI9ZnVuY3Rpb24oZSl7cmV0dXJuIFZ1KCksdShlLDExKS5qPT0oYmUoKSxIbil9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBWdSgpLHUoZSwxMSkuaj09KGJlKCksSG4pfSxOKHJ1LCJMUG9ydC9sYW1iZGEkMyRUeXBlIiwxMjg3KSxEKDEyODgsMSxtZCxyWSksbC5MYj1mdW5jdGlvbihlKXtyZXR1cm4gVnUoKSx1KGUsMTEpLmo9PShiZSgpLHlyKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIFZ1KCksdShlLDExKS5qPT0oYmUoKSx5cil9LE4ocnUsIkxQb3J0L2xhbWJkYSQ0JFR5cGUiLDEyODgpLEQoMTI4OSwxLG1kLGlZKSxsLkxiPWZ1bmN0aW9uKGUpe3JldHVybiBWdSgpLHUoZSwxMSkuaj09KGJlKCksQm4pfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gVnUoKSx1KGUsMTEpLmo9PShiZSgpLEJuKX0sTihydSwiTFBvcnQvbGFtYmRhJDUkVHlwZSIsMTI4OSksRCgyOSwyOTksezM6MSwyMDoxLDI5OToxLDI5OjEsOTQ6MSwxMzQ6MX0sTGgpLGwuSmM9ZnVuY3Rpb24oZSl7X2EodGhpcyxlKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgUyh0aGlzLmEpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIkxfIitHbyh0aGlzLmIuYix0aGlzLDApK0pwKHRoaXMuYSl9LE4ocnUsIkxheWVyIiwyOSksRCgxMzQyLDEse30sZXF0KSxOKFVnLFpmZSwxMzQyKSxEKDEzNDYsMSx7fSwkNSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gUm8odShlLDgyKSl9LE4oVWcsIkVsa0dyYXBoSW1wb3J0ZXIvMG1ldGhvZHJlZiRjb25uZWN0YWJsZVNoYXBlVG9Ob2RlJFR5cGUiLDEzNDYpLEQoMTM0OSwxLHt9LEk5KSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBSbyh1KGUsODIpKX0sTihVZywiRWxrR3JhcGhJbXBvcnRlci8xbWV0aG9kcmVmJGNvbm5lY3RhYmxlU2hhcGVUb05vZGUkVHlwZSIsMTM0OSksRCgxMzQzLDEsS24sam4pLGwudGQ9ZnVuY3Rpb24oZSl7Qm9lKHRoaXMuYSx1KGUsMTE4KSl9LE4oVWcsSmZlLDEzNDMpLEQoMTM0NCwxLEtuLExyKSxsLnRkPWZ1bmN0aW9uKGUpe0JvZSh0aGlzLmEsdShlLDExOCkpfSxOKFVnLHQxZSwxMzQ0KSxEKDEzNDUsMSx7fSxYUCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGtuKG51bGwsbmV3IFRuKEplbih1KGUsNzkpKSwxNikpfSxOKFVnLGUxZSwxMzQ1KSxEKDEzNDcsMSxnaSxpciksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdFhlKHRoaXMuYSx1KGUsMzMpKX0sTihVZyxuMWUsMTM0NyksRCgxMzQ4LDEse30sZ2spLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrbihudWxsLG5ldyBUbih0bm4odShlLDc5KSksMTYpKX0sTihVZywiRWxrR3JhcGhJbXBvcnRlci9sYW1iZGEkNSRUeXBlIiwxMzQ4KSxEKDEzNTAsMSxnaSxzciksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gZVhlKHRoaXMuYSx1KGUsMzMpKX0sTihVZywiRWxrR3JhcGhJbXBvcnRlci9sYW1iZGEkNyRUeXBlIiwxMzUwKSxEKDEzNTEsMSxnaSxzWSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdm5uKHUoZSw3OSkpfSxOKFVnLCJFbGtHcmFwaEltcG9ydGVyL2xhbWJkYSQ4JFR5cGUiLDEzNTEpLEQoMTI3OCwxLHt9LFJKKTt2YXIgUGJlO04oVWcsIkVsa0dyYXBoTGF5b3V0VHJhbnNmZXJyZXIiLDEyNzgpLEQoMTI3OSwxLGdpLEZhKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBIUWUodGhpcy5hLHUoZSwxNykpfSxOKFVnLCJFbGtHcmFwaExheW91dFRyYW5zZmVycmVyL2xhbWJkYSQwJFR5cGUiLDEyNzkpLEQoMTI4MCwxLEtuLEhyKSxsLnRkPWZ1bmN0aW9uKGUpe3ZNKCksdWUodGhpcy5hLHUoZSwxNykpfSxOKFVnLCJFbGtHcmFwaExheW91dFRyYW5zZmVycmVyL2xhbWJkYSQxJFR5cGUiLDEyODApLEQoMTI4MSwxLGdpLHNzKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBBUWUodGhpcy5hLHUoZSwxNykpfSxOKFVnLCJFbGtHcmFwaExheW91dFRyYW5zZmVycmVyL2xhbWJkYSQyJFR5cGUiLDEyODEpLEQoMTI4MiwxLEtuLHFvKSxsLnRkPWZ1bmN0aW9uKGUpe3ZNKCksdWUodGhpcy5hLHUoZSwxNykpfSxOKFVnLCJFbGtHcmFwaExheW91dFRyYW5zZmVycmVyL2xhbWJkYSQzJFR5cGUiLDEyODIpLEQoMTQ4NSwxLHZzLHBrKSxsLnBmPWZ1bmN0aW9uKGUsbil7TW9uKHUoZSwzNyksbil9LE4oJG4sIkNvbW1lbnROb2RlTWFyZ2luQ2FsY3VsYXRvciIsMTQ4NSksRCgxNDg2LDEse30sYVkpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrbihudWxsLG5ldyBUbih1KGUsMjkpLmEsMTYpKX0sTigkbiwiQ29tbWVudE5vZGVNYXJnaW5DYWxjdWxhdG9yL2xhbWJkYSQwJFR5cGUiLDE0ODYpLEQoMTQ4NywxLEtuLG9ZKSxsLnRkPWZ1bmN0aW9uKGUpe2x5bih1KGUsMTApKX0sTigkbiwiQ29tbWVudE5vZGVNYXJnaW5DYWxjdWxhdG9yL2xhbWJkYSQxJFR5cGUiLDE0ODcpLEQoMTQ4OCwxLHZzLGNZKSxsLnBmPWZ1bmN0aW9uKGUsbil7RXZuKHUoZSwzNyksbil9LE4oJG4sIkNvbW1lbnRQb3N0cHJvY2Vzc29yIiwxNDg4KSxEKDE0ODksMSx2cyx1WSksbC5wZj1mdW5jdGlvbihlLG4pe000bih1KGUsMzcpLG4pfSxOKCRuLCJDb21tZW50UHJlcHJvY2Vzc29yIiwxNDg5KSxEKDE0OTAsMSx2cyxsWSksbC5wZj1mdW5jdGlvbihlLG4pe1Vibih1KGUsMzcpLG4pfSxOKCRuLCJDb25zdHJhaW50c1Bvc3Rwcm9jZXNzb3IiLDE0OTApLEQoMTQ5MSwxLHZzLGhZKSxsLnBmPWZ1bmN0aW9uKGUsbil7Sm9uKHUoZSwzNyksbil9LE4oJG4sIkVkZ2VBbmRMYXllckNvbnN0cmFpbnRFZGdlUmV2ZXJzZXIiLDE0OTEpLEQoMTQ5MiwxLHZzLGZZKSxsLnBmPWZ1bmN0aW9uKGUsbil7emxuKHUoZSwzNyksbil9LE4oJG4sIkVuZExhYmVsUG9zdHByb2Nlc3NvciIsMTQ5MiksRCgxNDkzLDEse30sZFkpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrbihudWxsLG5ldyBUbih1KGUsMjkpLmEsMTYpKX0sTigkbiwiRW5kTGFiZWxQb3N0cHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDE0OTMpLEQoMTQ5NCwxLGdpLGdZKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBQbm4odShlLDEwKSl9LE4oJG4sIkVuZExhYmVsUG9zdHByb2Nlc3Nvci9sYW1iZGEkMSRUeXBlIiwxNDk0KSxEKDE0OTUsMSxLbixwWSksbC50ZD1mdW5jdGlvbihlKXtBMW4odShlLDEwKSl9LE4oJG4sIkVuZExhYmVsUG9zdHByb2Nlc3Nvci9sYW1iZGEkMiRUeXBlIiwxNDk1KSxEKDE0OTYsMSx2cyxiWSksbC5wZj1mdW5jdGlvbihlLG4pe3Znbih1KGUsMzcpLG4pfSxOKCRuLCJFbmRMYWJlbFByZXByb2Nlc3NvciIsMTQ5NiksRCgxNDk3LDEse30seUwpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrbihudWxsLG5ldyBUbih1KGUsMjkpLmEsMTYpKX0sTigkbiwiRW5kTGFiZWxQcmVwcm9jZXNzb3IvbGFtYmRhJDAkVHlwZSIsMTQ5NyksRCgxNDk4LDEsS24scEt0KSxsLnRkPWZ1bmN0aW9uKGUpe3ZZZSh0aGlzLmEsdGhpcy5iLHRoaXMuYyx1KGUsMTApKX0sbC5hPTAsbC5iPTAsbC5jPSExLE4oJG4sIkVuZExhYmVsUHJlcHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUiLDE0OTgpLEQoMTQ5OSwxLGdpLHZZKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBHdChLKHUoZSw3MCksKHhlKCksRGQpKSk9PT1HdCgoRDEoKSxfRSkpfSxOKCRuLCJFbmRMYWJlbFByZXByb2Nlc3Nvci9sYW1iZGEkMiRUeXBlIiwxNDk5KSxEKDE1MDAsMSxLbixCYyksbC50ZD1mdW5jdGlvbihlKXthaSh0aGlzLmEsdShlLDcwKSl9LE4oJG4sIkVuZExhYmVsUHJlcHJvY2Vzc29yL2xhbWJkYSQzJFR5cGUiLDE1MDApLEQoMTUwMSwxLGdpLHdZKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBHdChLKHUoZSw3MCksKHhlKCksRGQpKSk9PT1HdCgoRDEoKSxZeSkpfSxOKCRuLCJFbmRMYWJlbFByZXByb2Nlc3Nvci9sYW1iZGEkNCRUeXBlIiwxNTAxKSxEKDE1MDIsMSxLbixybyksbC50ZD1mdW5jdGlvbihlKXthaSh0aGlzLmEsdShlLDcwKSl9LE4oJG4sIkVuZExhYmVsUHJlcHJvY2Vzc29yL2xhbWJkYSQ1JFR5cGUiLDE1MDIpLEQoMTU1MSwxLHZzLEJKKSxsLnBmPWZ1bmN0aW9uKGUsbil7WXVuKHUoZSwzNyksbil9O3ZhciBGYmU7TigkbiwiRW5kTGFiZWxTb3J0ZXIiLDE1NTEpLEQoMTU1MiwxLHFpLE85KSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIF9obih1KGUsNDU2KSx1KG4sNDU2KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBndCh0aGlzKX0sTigkbiwiRW5kTGFiZWxTb3J0ZXIvMSIsMTU1MiksRCg0NTYsMSx7NDU2OjF9LFBYdCksTigkbiwiRW5kTGFiZWxTb3J0ZXIvTGFiZWxHcm91cCIsNDU2KSxEKDE1NTMsMSx7fSxRUCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gd00oKSxuZXcga24obnVsbCxuZXcgVG4odShlLDI5KS5hLDE2KSl9LE4oJG4sIkVuZExhYmVsU29ydGVyL2xhbWJkYSQwJFR5cGUiLDE1NTMpLEQoMTU1NCwxLGdpLHo1KSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB3TSgpLHUoZSwxMCkuaz09KEduKCkscXMpfSxOKCRuLCJFbmRMYWJlbFNvcnRlci9sYW1iZGEkMSRUeXBlIiwxNTU0KSxEKDE1NTUsMSxLbixtWSksbC50ZD1mdW5jdGlvbihlKXtBMG4odShlLDEwKSl9LE4oJG4sIkVuZExhYmVsU29ydGVyL2xhbWJkYSQyJFR5cGUiLDE1NTUpLEQoMTU1NiwxLGdpLHlZKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB3TSgpLEd0KEsodShlLDcwKSwoeGUoKSxEZCkpKT09PUd0KChEMSgpLFl5KSl9LE4oJG4sIkVuZExhYmVsU29ydGVyL2xhbWJkYSQzJFR5cGUiLDE1NTYpLEQoMTU1NywxLGdpLHhZKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB3TSgpLEd0KEsodShlLDcwKSwoeGUoKSxEZCkpKT09PUd0KChEMSgpLF9FKSl9LE4oJG4sIkVuZExhYmVsU29ydGVyL2xhbWJkYSQ0JFR5cGUiLDE1NTcpLEQoMTUwMywxLHZzLGtZKSxsLnBmPWZ1bmN0aW9uKGUsbil7eHluKHRoaXMsdShlLDM3KSl9LGwuYj0wLGwuYz0wLE4oJG4sIkZpbmFsU3BsaW5lQmVuZHBvaW50c0NhbGN1bGF0b3IiLDE1MDMpLEQoMTUwNCwxLHt9LEVZKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcga24obnVsbCxuZXcgVG4odShlLDI5KS5hLDE2KSl9LE4oJG4sIkZpbmFsU3BsaW5lQmVuZHBvaW50c0NhbGN1bGF0b3IvbGFtYmRhJDAkVHlwZSIsMTUwNCksRCgxNTA1LDEse30sTjkpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrbihudWxsLG5ldyBGdihuZXcgYXIobHIoJHModShlLDEwKSkuYS5LYygpLG5ldyBIKSkpKX0sTigkbiwiRmluYWxTcGxpbmVCZW5kcG9pbnRzQ2FsY3VsYXRvci9sYW1iZGEkMSRUeXBlIiwxNTA1KSxEKDE1MDYsMSxnaSx4TCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4hV2EodShlLDE3KSl9LE4oJG4sIkZpbmFsU3BsaW5lQmVuZHBvaW50c0NhbGN1bGF0b3IvbGFtYmRhJDIkVHlwZSIsMTUwNiksRCgxNTA3LDEsZ2ksWlApLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIGVhKHUoZSwxNyksKGFlKCksRjIpKX0sTigkbiwiRmluYWxTcGxpbmVCZW5kcG9pbnRzQ2FsY3VsYXRvci9sYW1iZGEkMyRUeXBlIiwxNTA3KSxEKDE1MDgsMSxLbixUYyksbC50ZD1mdW5jdGlvbihlKXtOd24odGhpcy5hLHUoZSwxMjgpKX0sTigkbiwiRmluYWxTcGxpbmVCZW5kcG9pbnRzQ2FsY3VsYXRvci9sYW1iZGEkNCRUeXBlIiwxNTA4KSxEKDE1MDksMSxLbixUMyksbC50ZD1mdW5jdGlvbihlKXtqc3QodShlLDE3KS5hKX0sTigkbiwiRmluYWxTcGxpbmVCZW5kcG9pbnRzQ2FsY3VsYXRvci9sYW1iZGEkNSRUeXBlIiwxNTA5KSxEKDc5MiwxLHZzLE1hKSxsLnBmPWZ1bmN0aW9uKGUsbil7ZzNuKHRoaXMsdShlLDM3KSxuKX0sTigkbiwiR3JhcGhUcmFuc2Zvcm1lciIsNzkyKSxEKDUxMSwyMix7MzoxLDM1OjEsMjI6MSw1MTE6MX0sX2J0KTt2YXIgaWx0LHBPLEJiZT16cigkbiwiR3JhcGhUcmFuc2Zvcm1lci9Nb2RlIiw1MTEsVXIscnJuLFBKZSksUmJlO0QoMTUxMCwxLHZzLF8zKSxsLnBmPWZ1bmN0aW9uKGUsbil7VjJuKHUoZSwzNyksbil9LE4oJG4sIkhpZXJhcmNoaWNhbE5vZGVSZXNpemluZ1Byb2Nlc3NvciIsMTUxMCksRCgxNTExLDEsdnMsVFkpLGwucGY9ZnVuY3Rpb24oZSxuKXtfb24odShlLDM3KSxuKX0sTigkbiwiSGllcmFyY2hpY2FsUG9ydENvbnN0cmFpbnRQcm9jZXNzb3IiLDE1MTEpLEQoMTUxMiwxLHFpLG9mKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEZobih1KGUsMTApLHUobiwxMCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZ3QodGhpcyl9LE4oJG4sIkhpZXJhcmNoaWNhbFBvcnRDb25zdHJhaW50UHJvY2Vzc29yL05vZGVDb21wYXJhdG9yIiwxNTEyKSxEKDE1MTMsMSx2cyxxNSksbC5wZj1mdW5jdGlvbihlLG4pe0dtbih1KGUsMzcpLG4pfSxOKCRuLCJIaWVyYXJjaGljYWxQb3J0RHVtbXlTaXplUHJvY2Vzc29yIiwxNTEzKSxEKDE1MTQsMSx2cyxfWSksbC5wZj1mdW5jdGlvbihlLG4pe3F2bih0aGlzLHUoZSwzNyksbil9LGwuYT0wLE4oJG4sIkhpZXJhcmNoaWNhbFBvcnRPcnRob2dvbmFsRWRnZVJvdXRlciIsMTUxNCksRCgxNTE1LDEscWksYmspLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gV1hlKHUoZSwxMCksdShuLDEwKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBndCh0aGlzKX0sTigkbiwiSGllcmFyY2hpY2FsUG9ydE9ydGhvZ29uYWxFZGdlUm91dGVyLzEiLDE1MTUpLEQoMTUxNiwxLHFpLFJkKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG9hbih1KGUsMTApLHUobiwxMCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZ3QodGhpcyl9LE4oJG4sIkhpZXJhcmNoaWNhbFBvcnRPcnRob2dvbmFsRWRnZVJvdXRlci8yIiwxNTE2KSxEKDE1MTcsMSx2cyxDWSksbC5wZj1mdW5jdGlvbihlLG4pe2Qwbih1KGUsMzcpLG4pfSxOKCRuLCJIaWVyYXJjaGljYWxQb3J0UG9zaXRpb25Qcm9jZXNzb3IiLDE1MTcpLEQoMTUxOCwxLHZzLGpKKSxsLnBmPWZ1bmN0aW9uKGUsbil7YzVuKHRoaXMsdShlLDM3KSl9LGwuYT0wLGwuYz0wO3ZhciBjVix1VjtOKCRuLCJIaWdoRGVncmVlTm9kZUxheWVyaW5nUHJvY2Vzc29yIiwxNTE4KSxEKDU3MSwxLHs1NzE6MX0sU1kpLGwuYj0tMSxsLmQ9LTEsTigkbiwiSGlnaERlZ3JlZU5vZGVMYXllcmluZ1Byb2Nlc3Nvci9IaWdoRGVncmVlTm9kZUluZm9ybWF0aW9uIiw1NzEpLEQoMTUxOSwxLHt9LEFZKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBWTSgpLFVvKHUoZSwxMCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sTigkbiwiSGlnaERlZ3JlZU5vZGVMYXllcmluZ1Byb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxNTE5KSxEKDE1MjAsMSx7fSxMWSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gVk0oKSwkcyh1KGUsMTApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LE4oJG4sIkhpZ2hEZWdyZWVOb2RlTGF5ZXJpbmdQcm9jZXNzb3IvbGFtYmRhJDEkVHlwZSIsMTUyMCksRCgxNTI2LDEsdnMsUDkpLGwucGY9ZnVuY3Rpb24oZSxuKXttbW4odGhpcyx1KGUsMzcpLG4pfSxOKCRuLCJIeXBlcmVkZ2VEdW1teU1lcmdlciIsMTUyNiksRCg3OTMsMSx7fSxwdnQpLGwuYT0hMSxsLmI9ITEsbC5jPSExLE4oJG4sIkh5cGVyZWRnZUR1bW15TWVyZ2VyL01lcmdlU3RhdGUiLDc5MyksRCgxNTI3LDEse30sa0wpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrbihudWxsLG5ldyBUbih1KGUsMjkpLmEsMTYpKX0sTigkbiwiSHlwZXJlZGdlRHVtbXlNZXJnZXIvbGFtYmRhJDAkVHlwZSIsMTUyNyksRCgxNTI4LDEse30sSlApLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrbihudWxsLG5ldyBUbih1KGUsMTApLmosMTYpKX0sTigkbiwiSHlwZXJlZGdlRHVtbXlNZXJnZXIvbGFtYmRhJDEkVHlwZSIsMTUyOCksRCgxNTI5LDEsS24sRUwpLGwudGQ9ZnVuY3Rpb24oZSl7dShlLDExKS5wPS0xfSxOKCRuLCJIeXBlcmVkZ2VEdW1teU1lcmdlci9sYW1iZGEkMiRUeXBlIiwxNTI5KSxEKDE1MzAsMSx2cyxINSksbC5wZj1mdW5jdGlvbihlLG4pe3Ztbih1KGUsMzcpLG4pfSxOKCRuLCJIeXBlcm5vZGVzUHJvY2Vzc29yIiwxNTMwKSxEKDE1MzEsMSx2cyxNWSksbC5wZj1mdW5jdGlvbihlLG4pe3dtbih1KGUsMzcpLG4pfSxOKCRuLCJJbkxheWVyQ29uc3RyYWludFByb2Nlc3NvciIsMTUzMSksRCgxNTMyLDEsdnMsdEYpLGwucGY9ZnVuY3Rpb24oZSxuKXtLb24odShlLDM3KSxuKX0sTigkbiwiSW5uZXJtb3N0Tm9kZU1hcmdpbkNhbGN1bGF0b3IiLDE1MzIpLEQoMTUzMywxLHZzLGVGKSxsLnBmPWZ1bmN0aW9uKGUsbil7XzRuKHRoaXMsdShlLDM3KSl9LGwuYT1OcyxsLmI9TnMsbC5jPWJzLGwuZD1iczt2YXIgbDZuPU4oJG4sIkludGVyYWN0aXZlRXh0ZXJuYWxQb3J0UG9zaXRpb25lciIsMTUzMyk7RCgxNTM0LDEse30sRFkpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxNykuZC5pfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sTigkbiwiSW50ZXJhY3RpdmVFeHRlcm5hbFBvcnRQb3NpdGlvbmVyL2xhbWJkYSQwJFR5cGUiLDE1MzQpLEQoMTUzNSwxLHt9LGlvKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBYWGUodGhpcy5hLHZlKGUpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LE4oJG4sIkludGVyYWN0aXZlRXh0ZXJuYWxQb3J0UG9zaXRpb25lci9sYW1iZGEkMSRUeXBlIiwxNTM1KSxEKDE1MzYsMSx7fSxJWSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDE3KS5jLml9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxOKCRuLCJJbnRlcmFjdGl2ZUV4dGVybmFsUG9ydFBvc2l0aW9uZXIvbGFtYmRhJDIkVHlwZSIsMTUzNiksRCgxNTM3LDEse30sX2wpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIFFYZSh0aGlzLmEsdmUoZSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sTigkbiwiSW50ZXJhY3RpdmVFeHRlcm5hbFBvcnRQb3NpdGlvbmVyL2xhbWJkYSQzJFR5cGUiLDE1MzcpLEQoMTUzOCwxLHt9LEdmKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiAkUWUodGhpcy5hLHZlKGUpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LE4oJG4sIkludGVyYWN0aXZlRXh0ZXJuYWxQb3J0UG9zaXRpb25lci9sYW1iZGEkNCRUeXBlIiwxNTM4KSxEKDE1MzksMSx7fSxFcCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gelFlKHRoaXMuYSx2ZShlKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxOKCRuLCJJbnRlcmFjdGl2ZUV4dGVybmFsUG9ydFBvc2l0aW9uZXIvbGFtYmRhJDUkVHlwZSIsMTUzOSksRCg3NywyMix7MzoxLDM1OjEsMjI6MSw3NzoxLDIzNDoxfSxMcyksbC5LZj1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLmcpe2Nhc2UgMTU6cmV0dXJuIG5ldyBLWDtjYXNlIDIyOnJldHVybiBuZXcgWVg7Y2FzZSA0NzpyZXR1cm4gbmV3IFpYO2Nhc2UgMjg6Y2FzZSAzNTpyZXR1cm4gbmV3IEMzO2Nhc2UgMzI6cmV0dXJuIG5ldyBwaztjYXNlIDQyOnJldHVybiBuZXcgY1k7Y2FzZSAxOnJldHVybiBuZXcgdVk7Y2FzZSA0MTpyZXR1cm4gbmV3IGxZO2Nhc2UgNTY6cmV0dXJuIG5ldyBNYSgoJDgoKSxwTykpO2Nhc2UgMDpyZXR1cm4gbmV3IE1hKCgkOCgpLGlsdCkpO2Nhc2UgMjpyZXR1cm4gbmV3IGhZO2Nhc2UgNTQ6cmV0dXJuIG5ldyBmWTtjYXNlIDMzOnJldHVybiBuZXcgYlk7Y2FzZSA1MTpyZXR1cm4gbmV3IGtZO2Nhc2UgNTU6cmV0dXJuIG5ldyBfMztjYXNlIDEzOnJldHVybiBuZXcgVFk7Y2FzZSAzODpyZXR1cm4gbmV3IHE1O2Nhc2UgNDQ6cmV0dXJuIG5ldyBfWTtjYXNlIDQwOnJldHVybiBuZXcgQ1k7Y2FzZSA5OnJldHVybiBuZXcgako7Y2FzZSA0OTpyZXR1cm4gbmV3IGVXdDtjYXNlIDM3OnJldHVybiBuZXcgUDk7Y2FzZSA0MzpyZXR1cm4gbmV3IEg1O2Nhc2UgMjc6cmV0dXJuIG5ldyBNWTtjYXNlIDMwOnJldHVybiBuZXcgdEY7Y2FzZSAzOnJldHVybiBuZXcgZUY7Y2FzZSAxODpyZXR1cm4gbmV3IE5ZO2Nhc2UgMjk6cmV0dXJuIG5ldyBQWTtjYXNlIDU6cmV0dXJuIG5ldyBNQjtjYXNlIDUwOnJldHVybiBuZXcgT1k7Y2FzZSAzNDpyZXR1cm4gbmV3ICRKO2Nhc2UgMzY6cmV0dXJuIG5ldyB2aztjYXNlIDUyOnJldHVybiBuZXcgQko7Y2FzZSAxMTpyZXR1cm4gbmV3IHZtO2Nhc2UgNzpyZXR1cm4gbmV3IHFKO2Nhc2UgMzk6cmV0dXJuIG5ldyB3aztjYXNlIDQ1OnJldHVybiBuZXcgalk7Y2FzZSAxNjpyZXR1cm4gbmV3IEY5O2Nhc2UgMTA6cmV0dXJuIG5ldyByZDtjYXNlIDQ4OnJldHVybiBuZXcgX0w7Y2FzZSAyMTpyZXR1cm4gbmV3IG1rO2Nhc2UgMjM6cmV0dXJuIG5ldyByZXQoKFp2KCksSVMpKTtjYXNlIDg6cmV0dXJuIG5ldyBzRjtjYXNlIDEyOnJldHVybiBuZXcgU0w7Y2FzZSA0OnJldHVybiBuZXcgelk7Y2FzZSAxOTpyZXR1cm4gbmV3IGdUO2Nhc2UgMTc6cmV0dXJuIG5ldyBVWTtjYXNlIDUzOnJldHVybiBuZXcgV1k7Y2FzZSA2OnJldHVybiBuZXcgZkY7Y2FzZSAyNTpyZXR1cm4gbmV3IHNxdDtjYXNlIDQ2OnJldHVybiBuZXcgUVk7Y2FzZSAzMTpyZXR1cm4gbmV3IGpXdDtjYXNlIDE0OnJldHVybiBuZXcgTEw7Y2FzZSAyNjpyZXR1cm4gbmV3IGVRO2Nhc2UgMjA6cmV0dXJuIG5ldyBzWDtjYXNlIDI0OnJldHVybiBuZXcgcmV0KChadigpLGRHKSk7ZGVmYXVsdDp0aHJvdyBudChuZXcgUG4oam90Kyh0aGlzLmYhPW51bGw/dGhpcy5mOiIiK3RoaXMuZykpKX19O3ZhciBORXQsUEV0LEZFdCxCRXQsUkV0LGpFdCwkRXQsekV0LHFFdCxIRXQsaFMsbFYsaFYsVkV0LEdFdCxVRXQsV0V0LEtFdCxZRXQsWEV0LGZTLFFFdCxaRXQsSkV0LHQ5dCxlOXQsc2x0LGZWLGRWLG45dCxnVixwVixiVixKNyx0RSxlRSxyOXQsdlYsd1YsaTl0LG1WLHlWLHM5dCxhOXQsbzl0LGM5dCx4VixhbHQsYk8sa1YsRVYsVFYsX1YsdTl0LGw5dCxoOXQsZjl0LGg2bj16cigkbixneHQsNzcsVXIsTGNlLE5KZSksamJlO0QoMTU0MCwxLHZzLE5ZKSxsLnBmPWZ1bmN0aW9uKGUsbil7UzRuKHUoZSwzNyksbil9LE4oJG4sIkludmVydGVkUG9ydFByb2Nlc3NvciIsMTU0MCksRCgxNTQxLDEsdnMsUFkpLGwucGY9ZnVuY3Rpb24oZSxuKXtTd24odShlLDM3KSxuKX0sTigkbiwiTGFiZWxBbmROb2RlU2l6ZVByb2Nlc3NvciIsMTU0MSksRCgxNTQyLDEsZ2ksRlkpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxMCkuaz09KEduKCkscXMpfSxOKCRuLCJMYWJlbEFuZE5vZGVTaXplUHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDE1NDIpLEQoMTU0MywxLGdpLGpkKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTApLms9PShHbigpLElzKX0sTigkbiwiTGFiZWxBbmROb2RlU2l6ZVByb2Nlc3Nvci9sYW1iZGEkMSRUeXBlIiwxNTQzKSxEKDE1NDQsMSxLbixiS3QpLGwudGQ9ZnVuY3Rpb24oZSl7d1llKHRoaXMuYix0aGlzLmEsdGhpcy5jLHUoZSwxMCkpfSxsLmE9ITEsbC5jPSExLE4oJG4sIkxhYmVsQW5kTm9kZVNpemVQcm9jZXNzb3IvbGFtYmRhJDIkVHlwZSIsMTU0NCksRCgxNTQ1LDEsdnMsTUIpLGwucGY9ZnVuY3Rpb24oZSxuKXtRM24odShlLDM3KSxuKX07dmFyICRiZTtOKCRuLCJMYWJlbER1bW15SW5zZXJ0ZXIiLDE1NDUpLEQoMTU0NiwxLG1kLGx2KSxsLkxiPWZ1bmN0aW9uKGUpe3JldHVybiBHdChLKHUoZSw3MCksKHhlKCksRGQpKSk9PT1HdCgoRDEoKSxURSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gR3QoSyh1KGUsNzApLCh4ZSgpLERkKSkpPT09R3QoKEQxKCksVEUpKX0sTigkbiwiTGFiZWxEdW1teUluc2VydGVyLzEiLDE1NDYpLEQoMTU0NywxLHZzLE9ZKSxsLnBmPWZ1bmN0aW9uKGUsbil7SnluKHUoZSwzNyksbil9LE4oJG4sIkxhYmVsRHVtbXlSZW1vdmVyIiwxNTQ3KSxEKDE1NDgsMSxnaSxCWSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gQmUoRmUoSyh1KGUsNzApLCh4ZSgpLEtsdCkpKSl9LE4oJG4sIkxhYmVsRHVtbXlSZW1vdmVyL2xhbWJkYSQwJFR5cGUiLDE1NDgpLEQoMTM1OSwxLHZzLCRKKSxsLnBmPWZ1bmN0aW9uKGUsbil7QTNuKHRoaXMsdShlLDM3KSxuKX0sbC5hPW51bGw7dmFyIG9sdDtOKCRuLCJMYWJlbER1bW15U3dpdGNoZXIiLDEzNTkpLEQoMjg2LDEsezI4NjoxfSxTdWUpLGwuYz0wLGwuZD1udWxsLGwuZj0wLE4oJG4sIkxhYmVsRHVtbXlTd2l0Y2hlci9MYWJlbER1bW15SW5mbyIsMjg2KSxEKDEzNjAsMSx7fSxuRiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gWTYoKSxuZXcga24obnVsbCxuZXcgVG4odShlLDI5KS5hLDE2KSl9LE4oJG4sIkxhYmVsRHVtbXlTd2l0Y2hlci9sYW1iZGEkMCRUeXBlIiwxMzYwKSxEKDEzNjEsMSxnaSxyRiksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gWTYoKSx1KGUsMTApLms9PShHbigpLFBsKX0sTigkbiwiTGFiZWxEdW1teVN3aXRjaGVyL2xhbWJkYSQxJFR5cGUiLDEzNjEpLEQoMTM2MiwxLHt9LEVnKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBMUWUodGhpcy5hLHUoZSwxMCkpfSxOKCRuLCJMYWJlbER1bW15U3dpdGNoZXIvbGFtYmRhJDIkVHlwZSIsMTM2MiksRCgxMzYzLDEsS24sYWQpLGwudGQ9ZnVuY3Rpb24oZSl7QWVuKHRoaXMuYSx1KGUsMjg2KSl9LE4oJG4sIkxhYmVsRHVtbXlTd2l0Y2hlci9sYW1iZGEkMyRUeXBlIiwxMzYzKSxEKDEzNjQsMSxxaSxSWSksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBuZW4odShlLDI4NiksdShuLDI4NikpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZ3QodGhpcyl9LE4oJG4sIkxhYmVsRHVtbXlTd2l0Y2hlci9sYW1iZGEkNCRUeXBlIiwxMzY0KSxEKDc5MSwxLHZzLEMzKSxsLnBmPWZ1bmN0aW9uKGUsbil7anNuKHUoZSwzNyksbil9LE4oJG4sIkxhYmVsTWFuYWdlbWVudFByb2Nlc3NvciIsNzkxKSxEKDE1NDksMSx2cyx2ayksbC5wZj1mdW5jdGlvbihlLG4pe2x2bih1KGUsMzcpLG4pfSxOKCRuLCJMYWJlbFNpZGVTZWxlY3RvciIsMTU0OSksRCgxNTUwLDEsZ2ksVEwpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIEJlKEZlKEsodShlLDcwKSwoeGUoKSxLbHQpKSkpfSxOKCRuLCJMYWJlbFNpZGVTZWxlY3Rvci9sYW1iZGEkMCRUeXBlIiwxNTUwKSxEKDE1NTgsMSx2cyx2bSksbC5wZj1mdW5jdGlvbihlLG4pe1Vtbih1KGUsMzcpLG4pfSxOKCRuLCJMYXllckNvbnN0cmFpbnRQb3N0cHJvY2Vzc29yIiwxNTU4KSxEKDE1NTksMSx2cyxxSiksbC5wZj1mdW5jdGlvbihlLG4pe2Fibih1KGUsMzcpLG4pfTt2YXIgZDl0O04oJG4sIkxheWVyQ29uc3RyYWludFByZXByb2Nlc3NvciIsMTU1OSksRCgzNjAsMjIsezM6MSwzNToxLDIyOjEsMzYwOjF9LEhSKTt2YXIgdk8sQ1YsU1YsY2x0LHpiZT16cigkbiwiTGF5ZXJDb25zdHJhaW50UHJlcHJvY2Vzc29yL0hpZGRlbk5vZGVDb25uZWN0aW9ucyIsMzYwLFVyLElpbixfWmUpLHFiZTtEKDE1NjAsMSx2cyx3ayksbC5wZj1mdW5jdGlvbihlLG4pe1h5bih1KGUsMzcpLG4pfSxOKCRuLCJMYXllclNpemVBbmRHcmFwaEhlaWdodENhbGN1bGF0b3IiLDE1NjApLEQoMTU2MSwxLHZzLGpZKSxsLnBmPWZ1bmN0aW9uKGUsbil7SmJuKHUoZSwzNyksbil9LE4oJG4sIkxvbmdFZGdlSm9pbmVyIiwxNTYxKSxEKDE1NjIsMSx2cyxGOSksbC5wZj1mdW5jdGlvbihlLG4pe0R5bih1KGUsMzcpLG4pfSxOKCRuLCJMb25nRWRnZVNwbGl0dGVyIiwxNTYyKSxEKDE1NjMsMSx2cyxyZCksbC5wZj1mdW5jdGlvbihlLG4pe0Qzbih0aGlzLHUoZSwzNyksbil9LGwuZD0wLGwuZT0wLGwuaT0wLGwuaj0wLGwuaz0wLGwubj0wLE4oJG4sIk5vZGVQcm9tb3Rpb24iLDE1NjMpLEQoMTU2NCwxLHt9LGlGKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsNDYpLEZuKCksITB9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxOKCRuLCJOb2RlUHJvbW90aW9uL2xhbWJkYSQwJFR5cGUiLDE1NjQpLEQoMTU2NSwxLHt9LFRwKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBZZW4odGhpcy5hLHUoZSw0NikpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC5hPTAsTigkbiwiTm9kZVByb21vdGlvbi9sYW1iZGEkMSRUeXBlIiwxNTY1KSxEKDE1NjYsMSx7fSxVZiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gWGVuKHRoaXMuYSx1KGUsNDYpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuYT0wLE4oJG4sIk5vZGVQcm9tb3Rpb24vbGFtYmRhJDIkVHlwZSIsMTU2NiksRCgxNTY3LDEsdnMsX0wpLGwucGY9ZnVuY3Rpb24oZSxuKXtlNW4odShlLDM3KSxuKX0sTigkbiwiTm9ydGhTb3V0aFBvcnRQb3N0cHJvY2Vzc29yIiwxNTY3KSxEKDE1NjgsMSx2cyxtayksbC5wZj1mdW5jdGlvbihlLG4peyQ0bih1KGUsMzcpLG4pfSxOKCRuLCJOb3J0aFNvdXRoUG9ydFByZXByb2Nlc3NvciIsMTU2OCksRCgxNTY5LDEscWksQ0wpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gcGNuKHUoZSwxMSksdShuLDExKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBndCh0aGlzKX0sTigkbiwiTm9ydGhTb3V0aFBvcnRQcmVwcm9jZXNzb3IvbGFtYmRhJDAkVHlwZSIsMTU2OSksRCgxNTcwLDEsdnMsc0YpLGwucGY9ZnVuY3Rpb24oZSxuKXtybW4odShlLDM3KSxuKX0sTigkbiwiUGFydGl0aW9uTWlkcHJvY2Vzc29yIiwxNTcwKSxEKDE1NzEsMSxnaSwkWSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gZWEodShlLDEwKSwoeGUoKSxnRSkpfSxOKCRuLCJQYXJ0aXRpb25NaWRwcm9jZXNzb3IvbGFtYmRhJDAkVHlwZSIsMTU3MSksRCgxNTcyLDEsS24sYnYpLGwudGQ9ZnVuY3Rpb24oZSl7d25uKHRoaXMuYSx1KGUsMTApKX0sTigkbiwiUGFydGl0aW9uTWlkcHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUiLDE1NzIpLEQoMTU3MywxLHZzLFNMKSxsLnBmPWZ1bmN0aW9uKGUsbil7bTJuKHUoZSwzNyksbil9LE4oJG4sIlBhcnRpdGlvblBvc3Rwcm9jZXNzb3IiLDE1NzMpLEQoMTU3NCwxLHZzLHpZKSxsLnBmPWZ1bmN0aW9uKGUsbil7THBuKHUoZSwzNyksbil9LE4oJG4sIlBhcnRpdGlvblByZXByb2Nlc3NvciIsMTU3NCksRCgxNTc1LDEsZ2kscVkpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIGVhKHUoZSwxMCksKHhlKCksZ0UpKX0sTigkbiwiUGFydGl0aW9uUHJlcHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDE1NzUpLEQoMTU3NiwxLHt9LGFGKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcga24obnVsbCxuZXcgRnYobmV3IGFyKGxyKCRzKHUoZSwxMCkpLmEuS2MoKSxuZXcgSCkpKSl9LE4oJG4sIlBhcnRpdGlvblByZXByb2Nlc3Nvci9sYW1iZGEkMSRUeXBlIiwxNTc2KSxEKDE1NzcsMSxnaSxWNSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4ga2huKHUoZSwxNykpfSxOKCRuLCJQYXJ0aXRpb25QcmVwcm9jZXNzb3IvbGFtYmRhJDIkVHlwZSIsMTU3NyksRCgxNTc4LDEsS24sb0YpLGwudGQ9ZnVuY3Rpb24oZSl7X2NuKHUoZSwxNykpfSxOKCRuLCJQYXJ0aXRpb25QcmVwcm9jZXNzb3IvbGFtYmRhJDMkVHlwZSIsMTU3OCksRCgxNTc5LDEsdnMsZ1QpLGwucGY9ZnVuY3Rpb24oZSxuKXt6d24odShlLDM3KSxuKX07dmFyIGc5dCxIYmUsVmJlLEdiZSxwOXQsYjl0O04oJG4sIlBvcnRMaXN0U29ydGVyIiwxNTc5KSxEKDE1ODAsMSx7fSxHNSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gUTgoKSx1KGUsMTEpLmV9LE4oJG4sIlBvcnRMaXN0U29ydGVyL2xhbWJkYSQwJFR5cGUiLDE1ODApLEQoMTU4MSwxLHt9LEhZKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBROCgpLHUoZSwxMSkuZ30sTigkbiwiUG9ydExpc3RTb3J0ZXIvbGFtYmRhJDEkVHlwZSIsMTU4MSksRCgxNTgyLDEscWksQUwpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gelp0KHUoZSwxMSksdShuLDExKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBndCh0aGlzKX0sTigkbiwiUG9ydExpc3RTb3J0ZXIvbGFtYmRhJDIkVHlwZSIsMTU4MiksRCgxNTgzLDEscWksVlkpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gVWZuKHUoZSwxMSksdShuLDExKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBndCh0aGlzKX0sTigkbiwiUG9ydExpc3RTb3J0ZXIvbGFtYmRhJDMkVHlwZSIsMTU4MyksRCgxNTg0LDEscWksR1kpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gWHVlKHUoZSwxMSksdShuLDExKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBndCh0aGlzKX0sTigkbiwiUG9ydExpc3RTb3J0ZXIvbGFtYmRhJDQkVHlwZSIsMTU4NCksRCgxNTg1LDEsdnMsVVkpLGwucGY9ZnVuY3Rpb24oZSxuKXt0Ym4odShlLDM3KSxuKX0sTigkbiwiUG9ydFNpZGVQcm9jZXNzb3IiLDE1ODUpLEQoMTU4NiwxLHZzLFdZKSxsLnBmPWZ1bmN0aW9uKGUsbil7ZXduKHUoZSwzNyksbil9LE4oJG4sIlJldmVyc2VkRWRnZVJlc3RvcmVyIiwxNTg2KSxEKDE1OTEsMSx2cyxzcXQpLGwucGY9ZnVuY3Rpb24oZSxuKXtNZm4odGhpcyx1KGUsMzcpLG4pfSxOKCRuLCJTZWxmTG9vcFBvcnRSZXN0b3JlciIsMTU5MSksRCgxNTkyLDEse30sY0YpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrbihudWxsLG5ldyBUbih1KGUsMjkpLmEsMTYpKX0sTigkbiwiU2VsZkxvb3BQb3J0UmVzdG9yZXIvbGFtYmRhJDAkVHlwZSIsMTU5MiksRCgxNTkzLDEsZ2ksS1kpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxMCkuaz09KEduKCkscXMpfSxOKCRuLCJTZWxmTG9vcFBvcnRSZXN0b3Jlci9sYW1iZGEkMSRUeXBlIiwxNTkzKSxEKDE1OTQsMSxnaSxZWSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gZWEodShlLDEwKSwoYWUoKSxoRSkpfSxOKCRuLCJTZWxmTG9vcFBvcnRSZXN0b3Jlci9sYW1iZGEkMiRUeXBlIiwxNTk0KSxEKDE1OTUsMSx7fSxYWSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdShLKHUoZSwxMCksKGFlKCksaEUpKSw0MDMpfSxOKCRuLCJTZWxmTG9vcFBvcnRSZXN0b3Jlci9sYW1iZGEkMyRUeXBlIiwxNTk1KSxEKDE1OTYsMSxLbixDbSksbC50ZD1mdW5jdGlvbihlKXtqMG4odGhpcy5hLHUoZSw0MDMpKX0sTigkbiwiU2VsZkxvb3BQb3J0UmVzdG9yZXIvbGFtYmRhJDQkVHlwZSIsMTU5NiksRCg3OTQsMSxLbix1RiksbC50ZD1mdW5jdGlvbihlKXt0Z24odShlLDEwMSkpfSxOKCRuLCJTZWxmTG9vcFBvcnRSZXN0b3Jlci9sYW1iZGEkNSRUeXBlIiw3OTQpLEQoMTU5NywxLHZzLFFZKSxsLnBmPWZ1bmN0aW9uKGUsbil7amhuKHUoZSwzNyksbil9LE4oJG4sIlNlbGZMb29wUG9zdFByb2Nlc3NvciIsMTU5NyksRCgxNTk4LDEse30sWlkpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrbihudWxsLG5ldyBUbih1KGUsMjkpLmEsMTYpKX0sTigkbiwiU2VsZkxvb3BQb3N0UHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDE1OTgpLEQoMTU5OSwxLGdpLEpZKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTApLms9PShHbigpLHFzKX0sTigkbiwiU2VsZkxvb3BQb3N0UHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUiLDE1OTkpLEQoMTYwMCwxLGdpLGxGKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBlYSh1KGUsMTApLChhZSgpLGhFKSl9LE4oJG4sIlNlbGZMb29wUG9zdFByb2Nlc3Nvci9sYW1iZGEkMiRUeXBlIiwxNjAwKSxEKDE2MDEsMSxLbix0WCksbC50ZD1mdW5jdGlvbihlKXtVMW4odShlLDEwKSl9LE4oJG4sIlNlbGZMb29wUG9zdFByb2Nlc3Nvci9sYW1iZGEkMyRUeXBlIiwxNjAxKSxEKDE2MDIsMSx7fSxlWCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGtuKG51bGwsbmV3IFRuKHUoZSwxMDEpLmYsMSkpfSxOKCRuLCJTZWxmTG9vcFBvc3RQcm9jZXNzb3IvbGFtYmRhJDQkVHlwZSIsMTYwMiksRCgxNjAzLDEsS24sZDYpLGwudGQ9ZnVuY3Rpb24oZSl7UGluKHRoaXMuYSx1KGUsNDA5KSl9LE4oJG4sIlNlbGZMb29wUG9zdFByb2Nlc3Nvci9sYW1iZGEkNSRUeXBlIiwxNjAzKSxEKDE2MDQsMSxnaSxoRiksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4hIXUoZSwxMDEpLml9LE4oJG4sIlNlbGZMb29wUG9zdFByb2Nlc3Nvci9sYW1iZGEkNiRUeXBlIiwxNjA0KSxEKDE2MDUsMSxLbixOMyksbC50ZD1mdW5jdGlvbihlKXttS2UodGhpcy5hLHUoZSwxMDEpKX0sTigkbiwiU2VsZkxvb3BQb3N0UHJvY2Vzc29yL2xhbWJkYSQ3JFR5cGUiLDE2MDUpLEQoMTU4NywxLHZzLGZGKSxsLnBmPWZ1bmN0aW9uKGUsbil7SWJuKHUoZSwzNyksbil9LE4oJG4sIlNlbGZMb29wUHJlUHJvY2Vzc29yIiwxNTg3KSxEKDE1ODgsMSx7fSxkRiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGtuKG51bGwsbmV3IFRuKHUoZSwxMDEpLmYsMSkpfSxOKCRuLCJTZWxmTG9vcFByZVByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxNTg4KSxEKDE1ODksMSx7fSxuWCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDQwOSkuYX0sTigkbiwiU2VsZkxvb3BQcmVQcm9jZXNzb3IvbGFtYmRhJDEkVHlwZSIsMTU4OSksRCgxNTkwLDEsS24sclgpLGwudGQ9ZnVuY3Rpb24oZSl7VFhlKHUoZSwxNykpfSxOKCRuLCJTZWxmTG9vcFByZVByb2Nlc3Nvci9sYW1iZGEkMiRUeXBlIiwxNTkwKSxEKDE2MDYsMSx2cyxqV3QpLGwucGY9ZnVuY3Rpb24oZSxuKXtMMG4odGhpcyx1KGUsMzcpLG4pfSxOKCRuLCJTZWxmTG9vcFJvdXRlciIsMTYwNiksRCgxNjA3LDEse30seWspLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrbihudWxsLG5ldyBUbih1KGUsMjkpLmEsMTYpKX0sTigkbiwiU2VsZkxvb3BSb3V0ZXIvbGFtYmRhJDAkVHlwZSIsMTYwNyksRCgxNjA4LDEsZ2ksVTUpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxMCkuaz09KEduKCkscXMpfSxOKCRuLCJTZWxmTG9vcFJvdXRlci9sYW1iZGEkMSRUeXBlIiwxNjA4KSxEKDE2MDksMSxnaSxCOSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gZWEodShlLDEwKSwoYWUoKSxoRSkpfSxOKCRuLCJTZWxmTG9vcFJvdXRlci9sYW1iZGEkMiRUeXBlIiwxNjA5KSxEKDE2MTAsMSx7fSxpWCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdShLKHUoZSwxMCksKGFlKCksaEUpKSw0MDMpfSxOKCRuLCJTZWxmTG9vcFJvdXRlci9sYW1iZGEkMyRUeXBlIiwxNjEwKSxEKDE2MTEsMSxLbixQVnQpLGwudGQ9ZnVuY3Rpb24oZSl7dW5uKHRoaXMuYSx0aGlzLmIsdShlLDQwMykpfSxOKCRuLCJTZWxmTG9vcFJvdXRlci9sYW1iZGEkNCRUeXBlIiwxNjExKSxEKDE2MTIsMSx2cyxMTCksbC5wZj1mdW5jdGlvbihlLG4pe1oybih1KGUsMzcpLG4pfSxOKCRuLCJTZW1pSW50ZXJhY3RpdmVDcm9zc01pblByb2Nlc3NvciIsMTYxMiksRCgxNjEzLDEsZ2ksUjkpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxMCkuaz09KEduKCkscXMpfSxOKCRuLCJTZW1pSW50ZXJhY3RpdmVDcm9zc01pblByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxNjEzKSxEKDE2MTQsMSxnaSxNTCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gZVl0KHUoZSwxMCkpLl9iKCh4ZSgpLEh5KSl9LE4oJG4sIlNlbWlJbnRlcmFjdGl2ZUNyb3NzTWluUHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUiLDE2MTQpLEQoMTYxNSwxLHFpLGdGKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFNvbih1KGUsMTApLHUobiwxMCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZ3QodGhpcyl9LE4oJG4sIlNlbWlJbnRlcmFjdGl2ZUNyb3NzTWluUHJvY2Vzc29yL2xhbWJkYSQyJFR5cGUiLDE2MTUpLEQoMTYxNiwxLHt9LHBGKSxsLkNlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIENubih1KGUsMTApLHUobiwxMCkpfSxOKCRuLCJTZW1pSW50ZXJhY3RpdmVDcm9zc01pblByb2Nlc3Nvci9sYW1iZGEkMyRUeXBlIiwxNjE2KSxEKDE2MTgsMSx2cyxzWCksbC5wZj1mdW5jdGlvbihlLG4pe1dtbih1KGUsMzcpLG4pfSxOKCRuLCJTb3J0QnlJbnB1dE1vZGVsUHJvY2Vzc29yIiwxNjE4KSxEKDE2MTksMSxnaSxhWCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDExKS5nLmMubGVuZ3RoIT0wfSxOKCRuLCJTb3J0QnlJbnB1dE1vZGVsUHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDE2MTkpLEQoMTYyMCwxLEtuLGc2KSxsLnRkPWZ1bmN0aW9uKGUpe3Nnbih0aGlzLmEsdShlLDExKSl9LE4oJG4sIlNvcnRCeUlucHV0TW9kZWxQcm9jZXNzb3IvbGFtYmRhJDEkVHlwZSIsMTYyMCksRCgxNjkzLDgwMyx7fSxYZWUpLGwuTWU9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG87c3dpdGNoKHRoaXMuYz1lLHRoaXMuYS5nKXtjYXNlIDI6bj1uZXcgbGUseXMoV2kobmV3IGtuKG51bGwsbmV3IFRuKHRoaXMuYy5hLmIsMTYpKSxuZXcgbUYpLG5ldyAkVnQodGhpcyxuKSksYUkodGhpcyxuZXcgdkYpLF91KG4sbmV3IGNYKSxuLmM9TnQoUW4sTWUsMSwwLDUsMSkseXMoV2kobmV3IGtuKG51bGwsbmV3IFRuKHRoaXMuYy5hLmIsMTYpKSxuZXcgdVgpLG5ldyBQMyhuKSksYUkodGhpcyxuZXcgbFgpLF91KG4sbmV3IGhYKSxuLmM9TnQoUW4sTWUsMSwwLDUsMSkscj1tVXQodW5lKEpqKG5ldyBrbihudWxsLG5ldyBUbih0aGlzLmMuYS5iLDE2KSksbmV3ICRkKHRoaXMpKSksbmV3IGZYKSx5cyhuZXcga24obnVsbCxuZXcgVG4odGhpcy5jLmEuYSwxNikpLG5ldyBCVnQocixuKSksYUkodGhpcyxuZXcgZFgpLF91KG4sbmV3IG9YKSxuLmM9TnQoUW4sTWUsMSwwLDUsMSk7YnJlYWs7Y2FzZSAzOnM9bmV3IGxlLGFJKHRoaXMsbmV3IGJGKSxvPW1VdCh1bmUoSmoobmV3IGtuKG51bGwsbmV3IFRuKHRoaXMuYy5hLmIsMTYpKSxuZXcgVFQodGhpcykpKSxuZXcgd0YpLHlzKFdpKG5ldyBrbihudWxsLG5ldyBUbih0aGlzLmMuYS5iLDE2KSksbmV3IGdYKSxuZXcgalZ0KG8scykpLGFJKHRoaXMsbmV3IHBYKSxfdShzLG5ldyBiWCkscy5jPU50KFFuLE1lLDEsMCw1LDEpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbnQobmV3IFZ6dCl9fSxsLmI9MCxOKFBzLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbiIsMTY5MyksRCgxNjk0LDEsbWQsYkYpLGwuTGI9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KHUoZSw1NykuZywxNDUpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gX3QodShlLDU3KS5nLDE0NSl9LE4oUHMsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQwJFR5cGUiLDE2OTQpLEQoMTY5NSwxLHt9LFRUKSxsLkZlPWZ1bmN0aW9uKGUpe3JldHVybiBSZ24odGhpcy5hLHUoZSw1NykpfSxOKFBzLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMSRUeXBlIiwxNjk1KSxEKDE3MDMsMSxPcSxGVnQpLGwuVmQ9ZnVuY3Rpb24oKXtjQyh0aGlzLmEsdGhpcy5iLC0xKX0sbC5iPTAsTihQcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDEwJFR5cGUiLDE3MDMpLEQoMTcwNSwxLG1kLHZGKSxsLkxiPWZ1bmN0aW9uKGUpe3JldHVybiBfdCh1KGUsNTcpLmcsMTQ1KX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KHUoZSw1NykuZywxNDUpfSxOKFBzLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMTEkVHlwZSIsMTcwNSksRCgxNzA2LDEsS24sY1gpLGwudGQ9ZnVuY3Rpb24oZSl7dShlLDM2NSkuVmQoKX0sTihQcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDEyJFR5cGUiLDE3MDYpLEQoMTcwNywxLGdpLHVYKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBfdCh1KGUsNTcpLmcsMTApfSxOKFBzLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMTMkVHlwZSIsMTcwNyksRCgxNzA5LDEsS24sUDMpLGwudGQ9ZnVuY3Rpb24oZSl7aGxuKHRoaXMuYSx1KGUsNTcpKX0sTihQcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDE0JFR5cGUiLDE3MDkpLEQoMTcwOCwxLE9xLFZWdCksbC5WZD1mdW5jdGlvbigpe2NDKHRoaXMuYix0aGlzLmEsLTEpfSxsLmE9MCxOKFBzLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMTUkVHlwZSIsMTcwOCksRCgxNzEwLDEsbWQsbFgpLGwuTGI9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KHUoZSw1NykuZywxMCl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBfdCh1KGUsNTcpLmcsMTApfSxOKFBzLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMTYkVHlwZSIsMTcxMCksRCgxNzExLDEsS24saFgpLGwudGQ9ZnVuY3Rpb24oZSl7dShlLDM2NSkuVmQoKX0sTihQcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDE3JFR5cGUiLDE3MTEpLEQoMTcxMiwxLHt9LCRkKSxsLkZlPWZ1bmN0aW9uKGUpe3JldHVybiBqZ24odGhpcy5hLHUoZSw1NykpfSxOKFBzLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMTgkVHlwZSIsMTcxMiksRCgxNzEzLDEse30sZlgpLGwuRGU9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sTihQcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDE5JFR5cGUiLDE3MTMpLEQoMTY5NiwxLHt9LHdGKSxsLkRlPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LE4oUHMsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQyJFR5cGUiLDE2OTYpLEQoMTcxNSwxLEtuLEJWdCksbC50ZD1mdW5jdGlvbihlKXtVdG4odGhpcy5hLHRoaXMuYix1KGUsMzA3KSl9LGwuYT0wLE4oUHMsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQyMCRUeXBlIiwxNzE1KSxEKDE3MTQsMSxPcSxSVnQpLGwuVmQ9ZnVuY3Rpb24oKXthY2UodGhpcy5hLHRoaXMuYiwtMSl9LGwuYj0wLE4oUHMsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQyMSRUeXBlIiwxNzE0KSxEKDE3MTYsMSxtZCxkWCksbC5MYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDU3KSwhMH0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSw1NyksITB9LE4oUHMsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQyMiRUeXBlIiwxNzE2KSxEKDE3MTcsMSxLbixvWCksbC50ZD1mdW5jdGlvbihlKXt1KGUsMzY1KS5WZCgpfSxOKFBzLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMjMkVHlwZSIsMTcxNyksRCgxNjk3LDEsZ2ksZ1gpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KHUoZSw1NykuZywxMCl9LE4oUHMsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQzJFR5cGUiLDE2OTcpLEQoMTY5OSwxLEtuLGpWdCksbC50ZD1mdW5jdGlvbihlKXtXdG4odGhpcy5hLHRoaXMuYix1KGUsNTcpKX0sbC5hPTAsTihQcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDQkVHlwZSIsMTY5OSksRCgxNjk4LDEsT3EsR1Z0KSxsLlZkPWZ1bmN0aW9uKCl7Y0ModGhpcy5iLHRoaXMuYSwtMSl9LGwuYT0wLE4oUHMsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQ1JFR5cGUiLDE2OTgpLEQoMTcwMCwxLG1kLHBYKSxsLkxiPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsNTcpLCEwfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDU3KSwhMH0sTihQcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDYkVHlwZSIsMTcwMCksRCgxNzAxLDEsS24sYlgpLGwudGQ9ZnVuY3Rpb24oZSl7dShlLDM2NSkuVmQoKX0sTihQcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDckVHlwZSIsMTcwMSksRCgxNzAyLDEsZ2ksbUYpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KHUoZSw1NykuZywxNDUpfSxOKFBzLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkOCRUeXBlIiwxNzAyKSxEKDE3MDQsMSxLbiwkVnQpLGwudGQ9ZnVuY3Rpb24oZSl7VmFuKHRoaXMuYSx0aGlzLmIsdShlLDU3KSl9LE4oUHMsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQ5JFR5cGUiLDE3MDQpLEQoMTUyMSwxLHZzLGVXdCksbC5wZj1mdW5jdGlvbihlLG4pe1J5bih0aGlzLHUoZSwzNyksbil9O3ZhciBVYmU7TihQcywiSG9yaXpvbnRhbEdyYXBoQ29tcGFjdG9yIiwxNTIxKSxEKDE1MjIsMSx7fSx4MSksbC5PZT1mdW5jdGlvbihlLG4pe3ZhciByLHMsbztyZXR1cm4gSW10KGUsbil8fChyPUozKGUpLHM9SjMobiksciYmci5rPT0oR24oKSxJcyl8fHMmJnMuaz09KEduKCksSXMpKT8wOihvPXUoSyh0aGlzLmEuYSwoYWUoKSxYNCkpLDMwNCksWlhlKG8scj9yLms6KEduKCksY2EpLHM/cy5rOihHbigpLGNhKSkpfSxsLlBlPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvO3JldHVybiBJbXQoZSxuKT8xOihyPUozKGUpLHM9SjMobiksbz11KEsodGhpcy5hLmEsKGFlKCksWDQpKSwzMDQpLFMydChvLHI/ci5rOihHbigpLGNhKSxzP3MuazooR24oKSxjYSkpKX0sTihQcywiSG9yaXpvbnRhbEdyYXBoQ29tcGFjdG9yLzEiLDE1MjIpLEQoMTUyMywxLHt9LGo5KSxsLk5lPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHFUKCksZS5hLmk9PTB9LE4oUHMsIkhvcml6b250YWxHcmFwaENvbXBhY3Rvci9sYW1iZGEkMCRUeXBlIiwxNTIzKSxEKDE1MjQsMSx7fSx6ZCksbC5OZT1mdW5jdGlvbihlLG4pe3JldHVybiBrbm4odGhpcy5hLGUsbil9LE4oUHMsIkhvcml6b250YWxHcmFwaENvbXBhY3Rvci9sYW1iZGEkMSRUeXBlIiwxNTI0KSxEKDE2NjQsMSx7fSxQdGUpO3ZhciBXYmUsS2JlO04oUHMsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIiLDE2NjQpLEQoMTY3MiwxLGdpLHZYKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBlIT1udWxsfSxOKFBzLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyLzBtZXRob2RyZWYkbm9uTnVsbCRUeXBlIiwxNjcyKSxEKDE2NjUsMSx7fSx3WCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gZGYoKSxXbyhLKHUodShlLDU3KS5nLDEwKSwoYWUoKSxJaSkpKX0sTihQcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMCRUeXBlIiwxNjY1KSxEKDE2NjYsMSx7fSx5RiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gZGYoKSxScmUodSh1KGUsNTcpLmcsMTQ1KSl9LE4oUHMsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDEkVHlwZSIsMTY2NiksRCgxNjc1LDEsZ2ksbVgpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIGRmKCksX3QodShlLDU3KS5nLDEwKX0sTihQcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMTAkVHlwZSIsMTY3NSksRCgxNjc2LDEsS24seVgpLGwudGQ9ZnVuY3Rpb24oZSl7eG5uKHUoZSw1NykpfSxOKFBzLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQxMSRUeXBlIiwxNjc2KSxEKDE2NzcsMSxnaSx4WCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gZGYoKSxfdCh1KGUsNTcpLmcsMTQ1KX0sTihQcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMTIkVHlwZSIsMTY3NyksRCgxNjgxLDEsS24sa1gpLGwudGQ9ZnVuY3Rpb24oZSl7Q3VuKHUoZSw1NykpfSxOKFBzLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQxMyRUeXBlIiwxNjgxKSxEKDE2NzgsMSxLbixfVCksbC50ZD1mdW5jdGlvbihlKXtYWWUodGhpcy5hLHUoZSw4KSl9LGwuYT0wLE4oUHMsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDE0JFR5cGUiLDE2NzgpLEQoMTY3OSwxLEtuLFViKSxsLnRkPWZ1bmN0aW9uKGUpe1pZZSh0aGlzLmEsdShlLDExMCkpfSxsLmE9MCxOKFBzLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQxNSRUeXBlIiwxNjc5KSxEKDE2ODAsMSxLbixuUiksbC50ZD1mdW5jdGlvbihlKXtRWWUodGhpcy5hLHUoZSw4KSl9LGwuYT0wLE4oUHMsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDE2JFR5cGUiLDE2ODApLEQoMTY4MiwxLHt9LEVYKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBkZigpLG5ldyBrbihudWxsLG5ldyBGdihuZXcgYXIobHIoJHModShlLDEwKSkuYS5LYygpLG5ldyBIKSkpKX0sTihQcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMTckVHlwZSIsMTY4MiksRCgxNjgzLDEsZ2ksVFgpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIGRmKCksV2EodShlLDE3KSl9LE4oUHMsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDE4JFR5cGUiLDE2ODMpLEQoMTY4NCwxLEtuLE50dCksbC50ZD1mdW5jdGlvbihlKXtJYW4odGhpcy5hLHUoZSwxNykpfSxOKFBzLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQxOSRUeXBlIiwxNjg0KSxEKDE2NjgsMSxLbixQdHQpLGwudGQ9ZnVuY3Rpb24oZSl7ZmluKHRoaXMuYSx1KGUsMTQ1KSl9LE4oUHMsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDIkVHlwZSIsMTY2OCksRCgxNjg1LDEse30seEYpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIGRmKCksbmV3IGtuKG51bGwsbmV3IFRuKHUoZSwyOSkuYSwxNikpfSxOKFBzLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQyMCRUeXBlIiwxNjg1KSxEKDE2ODYsMSx7fSxfWCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gZGYoKSxuZXcga24obnVsbCxuZXcgRnYobmV3IGFyKGxyKCRzKHUoZSwxMCkpLmEuS2MoKSxuZXcgSCkpKSl9LE4oUHMsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDIxJFR5cGUiLDE2ODYpLEQoMTY4NywxLHt9LGtGKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBkZigpLHUoSyh1KGUsMTcpLChhZSgpLEYyKSksMTUpfSxOKFBzLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQyMiRUeXBlIiwxNjg3KSxEKDE2ODgsMSxnaSxDWCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdFFlKHUoZSwxNSkpfSxOKFBzLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQyMyRUeXBlIiwxNjg4KSxEKDE2ODksMSxLbixGdHQpLGwudGQ9ZnVuY3Rpb24oZSl7TGduKHRoaXMuYSx1KGUsMTUpKX0sTihQcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMjQkVHlwZSIsMTY4OSksRCgxNjY3LDEsS24selZ0KSxsLnRkPWZ1bmN0aW9uKGUpe0ppbih0aGlzLmEsdGhpcy5iLHUoZSwxNDUpKX0sTihQcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMyRUeXBlIiwxNjY3KSxEKDE2NjksMSx7fSxTWCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gZGYoKSxuZXcga24obnVsbCxuZXcgVG4odShlLDI5KS5hLDE2KSl9LE4oUHMsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDQkVHlwZSIsMTY2OSksRCgxNjcwLDEse30sQVgpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIGRmKCksbmV3IGtuKG51bGwsbmV3IEZ2KG5ldyBhcihscigkcyh1KGUsMTApKS5hLktjKCksbmV3IEgpKSkpfSxOKFBzLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQ1JFR5cGUiLDE2NzApLEQoMTY3MSwxLHt9LCQ5KSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBkZigpLHUoSyh1KGUsMTcpLChhZSgpLEYyKSksMTUpfSxOKFBzLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQ2JFR5cGUiLDE2NzEpLEQoMTY3MywxLEtuLEJ0dCksbC50ZD1mdW5jdGlvbihlKXtvcG4odGhpcy5hLHUoZSwxNSkpfSxOKFBzLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQ4JFR5cGUiLDE2NzMpLEQoMTY3NCwxLEtuLHFWdCksbC50ZD1mdW5jdGlvbihlKXt5WGUodGhpcy5hLHRoaXMuYix1KGUsMTQ1KSl9LE4oUHMsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDkkVHlwZSIsMTY3NCksRCgxNjYzLDEse30sTFgpLGwuTGU9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saDtmb3IodGhpcy5hPWUsdGhpcy5kPW5ldyBVdHQsdGhpcy5jPU50KFg3dCxNZSwxMjEsdGhpcy5hLmEuYS5jLmxlbmd0aCwwLDEpLHRoaXMuYj0wLHI9bmV3IFModGhpcy5hLmEuYSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KFEociksMzA3KSxuLmQ9dGhpcy5iLGg9SXYoYk0obmV3IEtiLG4pLHRoaXMuZCksdGhpcy5jW3RoaXMuYl09aCwrK3RoaXMuYjtmb3IoVjNuKHRoaXMpLEc0bih0aGlzKSx1Mm4odGhpcyksbGF0KHhudCh0aGlzLmQpLG5ldyBXayksbz1uZXcgUyh0aGlzLmEuYS5iKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoUShvKSw1Nykscy5kLmM9dGhpcy5jW3MuYS5kXS5lK3MuYi5hfSxsLmI9MCxOKFBzLCJOZXR3b3JrU2ltcGxleENvbXBhY3Rpb24iLDE2NjMpLEQoMTQ1LDEsezM1OjEsMTQ1OjF9LHhDKSxsLndkPWZ1bmN0aW9uKGUpe3JldHVybiBGYW4odGhpcyx1KGUsMTQ1KSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gUnJlKHRoaXMpfSxOKFBzLCJWZXJ0aWNhbFNlZ21lbnQiLDE0NSksRCg4MjcsMSx7fSx2NHQpLGwuYz0wLGwuZT0wLGwuaT0wLE4oUkMsIkJldHdlZW5MYXllckVkZ2VUd29Ob2RlQ3Jvc3NpbmdzQ291bnRlciIsODI3KSxEKDY2MywxLHs2NjM6MX0sZm5lKSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIkFkamFjZW5jeUxpc3QgW25vZGU9Iit0aGlzLmQrIiwgYWRqYWNlbmNpZXM9ICIrdGhpcy5hKyJdIn0sbC5iPTAsbC5jPTAsbC5mPTAsTihSQywiQmV0d2VlbkxheWVyRWRnZVR3b05vZGVDcm9zc2luZ3NDb3VudGVyL0FkamFjZW5jeUxpc3QiLDY2MyksRCgyODcsMSx7MzU6MSwyODc6MX0sdVd0KSxsLndkPWZ1bmN0aW9uKGUpe3JldHVybiBFdG4odGhpcyx1KGUsMjg3KSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iQWRqYWNlbmN5IFtwb3NpdGlvbj0iK3RoaXMuYysiLCBjYXJkaW5hbGl0eT0iK3RoaXMuYSsiLCBjdXJyZW50Q2FyZGluYWxpdHk9Iit0aGlzLmIrIl0ifSxsLmE9MCxsLmI9MCxsLmM9MCxOKFJDLCJCZXR3ZWVuTGF5ZXJFZGdlVHdvTm9kZUNyb3NzaW5nc0NvdW50ZXIvQWRqYWNlbmN5TGlzdC9BZGphY2VuY3kiLDI4NyksRCgxOTI5LDEse30sTmFlKSxsLmI9MCxsLmU9ITEsTihSQywiQ3Jvc3NpbmdNYXRyaXhGaWxsZXIiLDE5MjkpO3ZhciBZYmU9YXMoczAsIklJbml0aWFsaXphYmxlIik7RCgxODA0LDEsSEksWVZ0KSxsLk5mPWZ1bmN0aW9uKGUsbixyLHMsbyxoKXt9LGwuUGY9ZnVuY3Rpb24oZSxuLHIpe30sbC5MZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMhPShadigpLElTKX0sbC5NZj1mdW5jdGlvbigpe3RoaXMuZT1OdChTcixKciwyNSx0aGlzLmQsMTUsMSl9LGwuT2Y9ZnVuY3Rpb24oZSxuKXtuW2VdWzBdLmMucD1lfSxsLlFmPWZ1bmN0aW9uKGUsbixyLHMpeysrdGhpcy5kfSxsLlJmPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwuU2Y9ZnVuY3Rpb24oZSxuLHIscyl7cmV0dXJuIERyZSh0aGlzLGUsbixyKSxoc24odGhpcyxuKX0sbC5UZj1mdW5jdGlvbihlLG4pe3ZhciByO3JldHVybiByPUtLZShuLGUubGVuZ3RoKSxEcmUodGhpcyxlLHIsbiksUW5lKHRoaXMscil9LGwuZD0wLE4oUkMsIkdyZWVkeVN3aXRjaEhldXJpc3RpYyIsMTgwNCksRCgxOTMwLDEse30sY1l0KSxsLmI9MCxsLmQ9MCxOKFJDLCJOb3J0aFNvdXRoRWRnZU5laWdoYm91cmluZ05vZGVDcm9zc2luZ3NDb3VudGVyIiwxOTMwKSxEKDE5MTcsMSx7fSxodWUpLGwuYT0hMSxOKFJDLCJTd2l0Y2hEZWNpZGVyIiwxOTE3KSxEKDEwMSwxLHsxMDE6MX0scWFlKSxsLmE9bnVsbCxsLmM9bnVsbCxsLmk9bnVsbCxOKG14LCJTZWxmSHlwZXJMb29wIiwxMDEpLEQoMTkxNiwxLHt9LHppZSksbC5jPTAsbC5lPTAsTihteCwiU2VsZkh5cGVyTG9vcExhYmVscyIsMTkxNiksRCg0MTEsMjIsezM6MSwzNToxLDIyOjEsNDExOjF9LFZSKTt2YXIgX3gsbkUsckUsdWx0LFhiZT16cihteCwiU2VsZkh5cGVyTG9vcExhYmVscy9BbGlnbm1lbnQiLDQxMSxVcixPaW4sQ1plKSxRYmU7RCg0MDksMSx7NDA5OjF9LENKdCksTihteCwiU2VsZkxvb3BFZGdlIiw0MDkpLEQoNDAzLDEsezQwMzoxfSxPaWUpLGwuYT0hMSxOKG14LCJTZWxmTG9vcEhvbGRlciIsNDAzKSxEKDE3MjQsMSxnaSxMRiksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gV2EodShlLDE3KSl9LE4obXgsIlNlbGZMb29wSG9sZGVyL2xhbWJkYSQwJFR5cGUiLDE3MjQpLEQoMTEzLDEsezExMzoxfSxxaWUpLGwuYT0hMSxsLmM9ITEsTihteCwiU2VsZkxvb3BQb3J0IiwxMTMpLEQoMTc5MiwxLGdpLE1GKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBXYSh1KGUsMTcpKX0sTihteCwiU2VsZkxvb3BQb3J0L2xhbWJkYSQwJFR5cGUiLDE3OTIpLEQoMzYzLDIyLHszOjEsMzU6MSwyMjoxLDM2MzoxfSxrTSk7dmFyIEFWLExWLE1WLERWLElWLFpiZT16cihteCwiU2VsZkxvb3BUeXBlIiwzNjMsVXIsVHNuLERaZSksSmJlO0QoMTczMiwxLHt9LEdKKTt2YXIgdDJlLGUyZSxuMmUscjJlO04oS2wsIlBvcnRSZXN0b3JlciIsMTczMiksRCgzNjEsMjIsezM6MSwzNToxLDIyOjEsMzYxOjF9LEVldCk7dmFyIFN3LGRiLEF3LGxsdD16cihLbCwiUG9ydFJlc3RvcmVyL1BvcnRTaWRlQXJlYSIsMzYxLFVyLFBybixJWmUpLGkyZTtEKDE3MzMsMSx7fSxTMyksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdGIoKSx1KGUsMTUpLk9jKCl9LE4oS2wsIlBvcnRSZXN0b3Jlci9sYW1iZGEkMCRUeXBlIiwxNzMzKSxEKDE3MzQsMSxLbixJWCksbC50ZD1mdW5jdGlvbihlKXt0YigpLHUoZSwxMTMpLmM9ITF9LE4oS2wsIlBvcnRSZXN0b3Jlci9sYW1iZGEkMSRUeXBlIiwxNzM0KSxEKDE3NDMsMSxnaSxPWCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdGIoKSx1KGUsMTEpLmo9PShiZSgpLEJuKX0sTihLbCwiUG9ydFJlc3RvcmVyL2xhbWJkYSQxMCRUeXBlIiwxNzQzKSxEKDE3NDQsMSx7fSxIOSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdGIoKSx1KGUsMTEzKS5kfSxOKEtsLCJQb3J0UmVzdG9yZXIvbGFtYmRhJDExJFR5cGUiLDE3NDQpLEQoMTc0NSwxLEtuLFJ0dCksbC50ZD1mdW5jdGlvbihlKXtKS2UodGhpcy5hLHUoZSwxMSkpfSxOKEtsLCJQb3J0UmVzdG9yZXIvbGFtYmRhJDEyJFR5cGUiLDE3NDUpLEQoMTczNSwxLEtuLGp0dCksbC50ZD1mdW5jdGlvbihlKXtzUWUodGhpcy5hLHUoZSwxMDEpKX0sTihLbCwiUG9ydFJlc3RvcmVyL2xhbWJkYSQyJFR5cGUiLDE3MzUpLEQoMTczNiwxLHFpLE5YKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHNvbih1KGUsMTEzKSx1KG4sMTEzKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBndCh0aGlzKX0sTihLbCwiUG9ydFJlc3RvcmVyL2xhbWJkYSQzJFR5cGUiLDE3MzYpLEQoMTczNywxLGdpLFBYKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB0YigpLHUoZSwxMTMpLmN9LE4oS2wsIlBvcnRSZXN0b3Jlci9sYW1iZGEkNCRUeXBlIiwxNzM3KSxEKDE3MzgsMSxnaSxNWCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gVW9uKHUoZSwxMSkpfSxOKEtsLCJQb3J0UmVzdG9yZXIvbGFtYmRhJDUkVHlwZSIsMTczOCksRCgxNzM5LDEsZ2ksejkpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRiKCksdShlLDExKS5qPT0oYmUoKSxPbil9LE4oS2wsIlBvcnRSZXN0b3Jlci9sYW1iZGEkNiRUeXBlIiwxNzM5KSxEKDE3NDAsMSxnaSxFRiksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdGIoKSx1KGUsMTEpLmo9PShiZSgpLEhuKX0sTihLbCwiUG9ydFJlc3RvcmVyL2xhbWJkYSQ3JFR5cGUiLDE3NDApLEQoMTc0MSwxLGdpLFRGKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBOaW4odShlLDExKSl9LE4oS2wsIlBvcnRSZXN0b3Jlci9sYW1iZGEkOCRUeXBlIiwxNzQxKSxEKDE3NDIsMSxnaSxfRiksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdGIoKSx1KGUsMTEpLmo9PShiZSgpLHlyKX0sTihLbCwiUG9ydFJlc3RvcmVyL2xhbWJkYSQ5JFR5cGUiLDE3NDIpLEQoMjcwLDIyLHszOjEsMzU6MSwyMjoxLDI3MDoxfSxCNik7dmFyIGhsdCxmbHQsZGx0LGdsdCxwbHQsYmx0LHZsdCx3bHQsdjl0PXpyKEtsLCJQb3J0U2lkZUFzc2lnbmVyL1RhcmdldCIsMjcwLFVyLFFhbixTWmUpLHMyZTtEKDE3MjUsMSx7fSxDRiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gV2kobmV3IGtuKG51bGwsbmV3IFRuKHUoZSwxMDEpLmosMTYpKSxuZXcgcTkpfSxOKEtsLCJQb3J0U2lkZUFzc2lnbmVyL2xhbWJkYSQxJFR5cGUiLDE3MjUpLEQoMTcyNiwxLHt9LGh2KSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTEzKS5kfSxOKEtsLCJQb3J0U2lkZUFzc2lnbmVyL2xhbWJkYSQyJFR5cGUiLDE3MjYpLEQoMTcyNywxLEtuLFNGKSxsLnRkPWZ1bmN0aW9uKGUpe1VzKHUoZSwxMSksKGJlKCksT24pKX0sTihLbCwiUG9ydFNpZGVBc3NpZ25lci9sYW1iZGEkMyRUeXBlIiwxNzI3KSxEKDE3MjgsMSx7fSxBRiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDExMykuZH0sTihLbCwiUG9ydFNpZGVBc3NpZ25lci9sYW1iZGEkNCRUeXBlIiwxNzI4KSxEKDE3MjksMSxLbiwkdHQpLGwudGQ9ZnVuY3Rpb24oZSl7c0tlKHRoaXMuYSx1KGUsMTEpKX0sTihLbCwiUG9ydFNpZGVBc3NpZ25lci9sYW1iZGEkNSRUeXBlIiwxNzI5KSxEKDE3MzAsMSxxaSxEWCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBQZW4odShlLDEwMSksdShuLDEwMSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZ3QodGhpcyl9LE4oS2wsIlBvcnRTaWRlQXNzaWduZXIvbGFtYmRhJDYkVHlwZSIsMTczMCksRCgxNzMxLDEscWksVzUpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gY3RuKHUoZSwxMTMpLHUobiwxMTMpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGd0KHRoaXMpfSxOKEtsLCJQb3J0U2lkZUFzc2lnbmVyL2xhbWJkYSQ3JFR5cGUiLDE3MzEpLEQoODA1LDEsZ2kscTkpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxMTMpLmN9LE4oS2wsIlBvcnRTaWRlQXNzaWduZXIvbGFtYmRhJDgkVHlwZSIsODA1KSxEKDIwMDksMSx7fSksTihhYiwiQWJzdHJhY3RTZWxmTG9vcFJvdXRlciIsMjAwOSksRCgxNzUwLDEscWksRlgpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gWlFlKHUoZSwxMDEpLHUobiwxMDEpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGd0KHRoaXMpfSxOKGFiLExmZSwxNzUwKSxEKDE3NTEsMSxxaSxCWCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBRUWUodShlLDEwMSksdShuLDEwMSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZ3QodGhpcyl9LE4oYWIsTWZlLDE3NTEpLEQoMTc5MywyMDA5LHt9LFJYKSxsLlVmPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gcn0sTihhYiwiT3J0aG9nb25hbFNlbGZMb29wUm91dGVyIiwxNzkzKSxEKDE3OTUsMSxLbixVVnQpLGwudGQ9ZnVuY3Rpb24oZSl7XzN0KHRoaXMuYix0aGlzLmEsdShlLDgpKX0sTihhYiwiT3J0aG9nb25hbFNlbGZMb29wUm91dGVyL2xhbWJkYSQwJFR5cGUiLDE3OTUpLEQoMTc5NCwxNzkzLHt9LGpYKSxsLlVmPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO3JldHVybiBzPWUuYy5kLHU4KHIsMCxGaSh1YyhzLm4pLHMuYSkpLG89ZS5kLmQsYWkocixGaSh1YyhvLm4pLG8uYSkpLFp3bihyKX0sTihhYiwiUG9seWxpbmVTZWxmTG9vcFJvdXRlciIsMTc5NCksRCgxNzQ2LDEse30sekopLGwuYT1udWxsO3ZhciBxNDtOKGFiLCJSb3V0aW5nRGlyZWN0b3IiLDE3NDYpLEQoMTc0NywxLHFpLCRYKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGh0bih1KGUsMTEzKSx1KG4sMTEzKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBndCh0aGlzKX0sTihhYiwiUm91dGluZ0RpcmVjdG9yL2xhbWJkYSQwJFR5cGUiLDE3NDcpLEQoMTc0OCwxLHt9LHpYKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBMUigpLHUoZSwxMDEpLmp9LE4oYWIsIlJvdXRpbmdEaXJlY3Rvci9sYW1iZGEkMSRUeXBlIiwxNzQ4KSxEKDE3NDksMSxLbixxWCksbC50ZD1mdW5jdGlvbihlKXtMUigpLHUoZSwxNSkuYWQocTQpfSxOKGFiLCJSb3V0aW5nRGlyZWN0b3IvbGFtYmRhJDIkVHlwZSIsMTc0OSksRCgxNzUyLDEse30sSFgpLE4oYWIsIlJvdXRpbmdTbG90QXNzaWduZXIiLDE3NTIpLEQoMTc1MywxLGdpLFZrKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBNWWUodGhpcy5hLHUoZSwxMDEpKX0sTihhYiwiUm91dGluZ1Nsb3RBc3NpZ25lci9sYW1iZGEkMCRUeXBlIiwxNzUzKSxEKDE3NTQsMSxxaSxzTSksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBOdG4odGhpcy5hLHUoZSwxMDEpLHUobiwxMDEpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGd0KHRoaXMpfSxOKGFiLCJSb3V0aW5nU2xvdEFzc2lnbmVyL2xhbWJkYSQxJFR5cGUiLDE3NTQpLEQoMTc5NiwxNzkzLHt9LFZYKSxsLlVmPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLGgsZDtyZXR1cm4gcz1adCh2ZShGeihlLmIuZy5iLCh4ZSgpLEZ4KSkpKSxkPW5ldyBoV3QodXQob3QobmEsMSkscmUsOCwwLFsoaD1lLmMuZCxGaShuZXcgU28oaC5uKSxoLmEpKV0pKSxPYm4oZSxuLHIsZCxzKSxhaShkLChvPWUuZC5kLEZpKG5ldyBTbyhvLm4pLG8uYSkpKSxyc2UobmV3IG42dChkKSl9LE4oYWIsIlNwbGluZVNlbGZMb29wUm91dGVyIiwxNzk2KSxEKDU3OCwxLHFpLHNuZSxES3QpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gTGhlKHRoaXMsdShlLDEwKSx1KG4sMTApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGd0KHRoaXMpfSxOKGpDLCJNb2RlbE9yZGVyTm9kZUNvbXBhcmF0b3IiLDU3OCksRCgxNzU1LDEsZ2ksREwpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxMSkuZS5jLmxlbmd0aCE9MH0sTihqQywiTW9kZWxPcmRlck5vZGVDb21wYXJhdG9yL2xhbWJkYSQwJFR5cGUiLDE3NTUpLEQoMTc1NiwxLHt9LERGKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB1KFBlKHUoZSwxMSkuZSwwKSwxNykuY30sTihqQywiTW9kZWxPcmRlck5vZGVDb21wYXJhdG9yL2xhbWJkYSQxJFR5cGUiLDE3NTYpLEQoMTc1NywxLGdpLEdYKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTEpLmUuYy5sZW5ndGghPTB9LE4oakMsIk1vZGVsT3JkZXJOb2RlQ29tcGFyYXRvci9sYW1iZGEkMiRUeXBlIiwxNzU3KSxEKDE3NTgsMSx7fSxVWCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdShQZSh1KGUsMTEpLmUsMCksMTcpLmN9LE4oakMsIk1vZGVsT3JkZXJOb2RlQ29tcGFyYXRvci9sYW1iZGEkMyRUeXBlIiwxNzU4KSxEKDE3NTksMSxnaSxXWCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDExKS5lLmMubGVuZ3RoIT0wfSxOKGpDLCJNb2RlbE9yZGVyTm9kZUNvbXBhcmF0b3IvbGFtYmRhJDQkVHlwZSIsMTc1OSksRCg4MDYsMSxxaSxGdGUsS1Z0KSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIENZdCh0aGlzLGUsbil9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBndCh0aGlzKX0sTihqQywiTW9kZWxPcmRlclBvcnRDb21wYXJhdG9yIiw4MDYpLEQoODAxLDEse30sSUYpLGwuVmY9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG8saDtmb3Iobz1NYWUobikscj1uZXcgbGUsaD1uLmYvbyxzPTE7czxvOysrcyl1ZShyLGRlKE1yKEF1KGIuTWF0aC5yb3VuZChzKmgpKSkpKTtyZXR1cm4gcn0sbC5XZj1mdW5jdGlvbigpe3JldHVybiExfSxOKEVkLCJBUkRDdXRJbmRleEhldXJpc3RpYyIsODAxKSxEKDE0NzksMSx2cyxLWCksbC5wZj1mdW5jdGlvbihlLG4pe2d3bih1KGUsMzcpLG4pfSxOKEVkLCJCcmVha2luZ1BvaW50SW5zZXJ0ZXIiLDE0NzkpLEQoMzA1LDEsezMwNToxfSxZd3QpLGwuSWI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1uZXcgQXAsZS5hKz0iQlBJbmZvWyIsZS5hKz1gCglzdGFydD1gLHdjKGUsdGhpcy5pKSxlLmErPWAKCWVuZD1gLHdjKGUsdGhpcy5hKSxlLmErPWAKCW5vZGVTdGFydEVkZ2U9YCx3YyhlLHRoaXMuZSksZS5hKz1gCglzdGFydEVuZEVkZ2U9YCx3YyhlLHRoaXMuaiksZS5hKz1gCglvcmlnaW5hbEVkZ2U9YCx3YyhlLHRoaXMuZiksZS5hKz1gCglzdGFydEluTGF5ZXJEdW1teT1gLHdjKGUsdGhpcy5rKSxlLmErPWAKCXN0YXJ0SW5MYXllckVkZ2U9YCx3YyhlLHRoaXMubiksZS5hKz1gCgllbmRJbkxheWVyRHVtbXk9YCx3YyhlLHRoaXMuYiksZS5hKz1gCgllbmRJbkxheWVyRWRnZT1gLHdjKGUsdGhpcy5jKSxlLmF9LE4oRWQsIkJyZWFraW5nUG9pbnRJbnNlcnRlci9CUEluZm8iLDMwNSksRCg2NTIsMSx7NjUyOjF9LENwKSxsLmE9ITEsbC5iPTAsbC5jPTAsTihFZCwiQnJlYWtpbmdQb2ludEluc2VydGVyL0N1dCIsNjUyKSxEKDE0ODAsMSx2cyxZWCksbC5wZj1mdW5jdGlvbihlLG4pe1Zibih1KGUsMzcpLG4pfSxOKEVkLCJCcmVha2luZ1BvaW50UHJvY2Vzc29yIiwxNDgwKSxEKDE0ODEsMSxnaSxYWCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gZWVlKHUoZSwxMCkpfSxOKEVkLCJCcmVha2luZ1BvaW50UHJvY2Vzc29yLzBtZXRob2RyZWYkaXNFbmQkVHlwZSIsMTQ4MSksRCgxNDgyLDEsZ2ksUVgpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIG5lZSh1KGUsMTApKX0sTihFZCwiQnJlYWtpbmdQb2ludFByb2Nlc3Nvci8xbWV0aG9kcmVmJGlzU3RhcnQkVHlwZSIsMTQ4MiksRCgxNDgzLDEsdnMsWlgpLGwucGY9ZnVuY3Rpb24oZSxuKXtkMm4odGhpcyx1KGUsMzcpLG4pfSxOKEVkLCJCcmVha2luZ1BvaW50UmVtb3ZlciIsMTQ4MyksRCgxNDg0LDEsS24sSlgpLGwudGQ9ZnVuY3Rpb24oZSl7dShlLDEyOCkuaz0hMH0sTihFZCwiQnJlYWtpbmdQb2ludFJlbW92ZXIvbGFtYmRhJDAkVHlwZSIsMTQ4NCksRCg3OTcsMSx7fSx1NXQpLGwuYj0wLGwuZT0wLGwuZj0wLGwuaj0wLE4oRWQsIkdyYXBoU3RhdHMiLDc5NyksRCg3OTgsMSx7fSxPRiksbC5DZT1mdW5jdGlvbihlLG4pe3JldHVybiBiLk1hdGgubWF4KFp0KHZlKGUpKSxadCh2ZShuKSkpfSxOKEVkLCJHcmFwaFN0YXRzLzBtZXRob2RyZWYkbWF4JFR5cGUiLDc5OCksRCg3OTksMSx7fSxORiksbC5DZT1mdW5jdGlvbihlLG4pe3JldHVybiBiLk1hdGgubWF4KFp0KHZlKGUpKSxadCh2ZShuKSkpfSxOKEVkLCJHcmFwaFN0YXRzLzJtZXRob2RyZWYkbWF4JFR5cGUiLDc5OSksRCgxNjYwLDEse30sdFEpLGwuQ2U9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gWkplKHZlKGUpLHZlKG4pKX0sTihFZCwiR3JhcGhTdGF0cy9sYW1iZGEkMSRUeXBlIiwxNjYwKSxEKDE2NjEsMSx7fSxDVCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gVmllKHRoaXMuYSx1KGUsMjkpKX0sTihFZCwiR3JhcGhTdGF0cy9sYW1iZGEkMiRUeXBlIiwxNjYxKSxEKDE2NjIsMSx7fSxyUiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gX2NlKHRoaXMuYSx1KGUsMjkpKX0sTihFZCwiR3JhcGhTdGF0cy9sYW1iZGEkNiRUeXBlIiwxNjYyKSxEKDgwMCwxLHt9LFBGKSxsLlZmPWZ1bmN0aW9uKGUsbil7dmFyIHI7cmV0dXJuIHI9dShLKGUsKHhlKCksZF90KSksMTUpLHJ8fChwbigpLHBuKCksdW8pfSxsLldmPWZ1bmN0aW9uKCl7cmV0dXJuITF9LE4oRWQsIklDdXRJbmRleENhbGN1bGF0b3IvTWFudWFsQ3V0SW5kZXhDYWxjdWxhdG9yIiw4MDApLEQoODAyLDEse30sRkYpLGwuVmY9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG8saCxkLHcsayxfLE0sQixxLEcsVyxaLGJ0LE10LFN0LGp0LFF0O2ZvcihRdD0obi5uPT1udWxsJiZnc2Uobiksbi5uKSxrPShuLmQ9PW51bGwmJmdzZShuKSxuLmQpLGp0PU50KGdhLFRvLDI1LFF0Lmxlbmd0aCwxNSwxKSxqdFswXT1RdFswXSxNdD1RdFswXSxfPTE7XzxRdC5sZW5ndGg7XysrKWp0W19dPWp0W18tMV0rUXRbX10sTXQrPVF0W19dO2ZvcihvPU1hZShuKS0xLGQ9dShLKGUsKHhlKCksZ190KSksMTkpLmEscz1OcyxyPW5ldyBsZSxxPWIuTWF0aC5tYXgoMCxvLWQpO3E8PWIuTWF0aC5taW4obi5mLTEsbytkKTtxKyspe2lmKFo9TXQvKHErMSksYnQ9MCxNPTEsaD1uZXcgbGUsU3Q9TnMsQj0wLHc9MCxXPWtbMF0scT09MClTdD1NdCx3PShuLmc9PW51bGwmJihuLmc9b25lKG4sbmV3IE5GKSksWnQobi5nKSk7ZWxzZXtmb3IoO008bi5mOylqdFtNLTFdLWJ0Pj1aJiYodWUoaCxkZShNKSksU3Q9Yi5NYXRoLm1heChTdCxqdFtNLTFdLUIpLHcrPVcsYnQrPWp0W00tMV0tYnQsQj1qdFtNLTFdLFc9a1tNXSksVz1iLk1hdGgubWF4KFcsa1tNXSksKytNO3crPVd9Rz1iLk1hdGgubWluKDEvU3QsMS9uLmIvdyksRz5zJiYocz1HLHI9aCl9cmV0dXJuIHJ9LGwuV2Y9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sTihFZCwiTVNEQ3V0SW5kZXhIZXVyaXN0aWMiLDgwMiksRCgxNjE3LDEsdnMsZVEpLGwucGY9ZnVuY3Rpb24oZSxuKXtqbW4odShlLDM3KSxuKX0sTihFZCwiU2luZ2xlRWRnZUdyYXBoV3JhcHBlciIsMTYxNyksRCgyMjcsMjIsezM6MSwzNToxLDIyOjEsMjI3OjF9LFlUKTt2YXIgSDQsaUUsc0UsT3ksZFMsVjQsYUU9enIoU2MsIkNlbnRlckVkZ2VMYWJlbFBsYWNlbWVudFN0cmF0ZWd5IiwyMjcsVXIsWHNuLEFaZSksYTJlO0QoNDIyLDIyLHszOjEsMzU6MSwyMjoxLDQyMjoxfSxTYnQpO3ZhciB3OXQsbWx0LG05dD16cihTYywiQ29uc3RyYWludENhbGN1bGF0aW9uU3RyYXRlZ3kiLDQyMixVciwkbm4sTFplKSxvMmU7RCgzMTQsMjIsezM6MSwzNToxLDIyOjEsMzE0OjEsMjQ2OjEsMjM0OjF9LFRldCksbC5LZj1mdW5jdGlvbigpe3JldHVybiB2b2UodGhpcyl9LGwuWGY9ZnVuY3Rpb24oKXtyZXR1cm4gdm9lKHRoaXMpfTt2YXIgd08sQ3gseTl0LHg5dD16cihTYywiQ3Jvc3NpbmdNaW5pbWl6YXRpb25TdHJhdGVneSIsMzE0LFVyLElybixNWmUpLGMyZTtEKDMzNywyMix7MzoxLDM1OjEsMjI6MSwzMzc6MX0sX2V0KTt2YXIgazl0LHlsdCxPVixFOXQ9enIoU2MsIkN1dHRpbmdTdHJhdGVneSIsMzM3LFVyLE9ybixPWmUpLHUyZTtEKDMzNSwyMix7MzoxLDM1OjEsMjI6MSwzMzU6MSwyNDY6MSwyMzQ6MX0sRU0pLGwuS2Y9ZnVuY3Rpb24oKXtyZXR1cm4gcmNlKHRoaXMpfSxsLlhmPWZ1bmN0aW9uKCl7cmV0dXJuIHJjZSh0aGlzKX07dmFyIFQ5dCx4bHQsZ1Msa2x0LHBTLF85dD16cihTYywiQ3ljbGVCcmVha2luZ1N0cmF0ZWd5IiwzMzUsVXIsa3NuLE5aZSksbDJlO0QoNDE5LDIyLHszOjEsMzU6MSwyMjoxLDQxOToxfSxBYnQpO3ZhciBOVixDOXQsUzl0PXpyKFNjLCJEaXJlY3Rpb25Db25ncnVlbmN5Iiw0MTksVXIsam5uLFBaZSksaDJlO0QoNDUwLDIyLHszOjEsMzU6MSwyMjoxLDQ1MDoxfSxDZXQpO3ZhciBvRSxFbHQsRzQsZjJlPXpyKFNjLCJFZGdlQ29uc3RyYWludCIsNDUwLFVyLE5ybixGWmUpLGQyZTtEKDI3NiwyMix7MzoxLDM1OjEsMjI6MSwyNzY6MX0sWFQpO3ZhciBUbHQsX2x0LENsdCxTbHQsUFYsQWx0LEE5dD16cihTYywiRWRnZUxhYmVsU2lkZVNlbGVjdGlvbiIsMjc2LFVyLHRhbixCWmUpLGcyZTtEKDQ3OSwyMix7MzoxLDM1OjEsMjI6MSw0Nzk6MX0sTGJ0KTt2YXIgRlYsTDl0LE05dD16cihTYywiRWRnZVN0cmFpZ2h0ZW5pbmdTdHJhdGVneSIsNDc5LFVyLFJubixSWmUpLHAyZTtEKDI3NCwyMix7MzoxLDM1OjEsMjI6MSwyNzQ6MX0sUVQpO3ZhciBMbHQsRDl0LEk5dCxCVixPOXQsTjl0LFA5dD16cihTYywiRml4ZWRBbGlnbm1lbnQiLDI3NCxVcixac24salplKSxiMmU7RCgyNzUsMjIsezM6MSwzNToxLDIyOjEsMjc1OjF9LFpUKTt2YXIgRjl0LEI5dCxSOXQsajl0LGJTLCQ5dCx6OXQ9enIoU2MsIkdyYXBoQ29tcGFjdGlvblN0cmF0ZWd5IiwyNzUsVXIsUXNuLCRaZSksdjJlO0QoMjU2LDIyLHszOjEsMzU6MSwyMjoxLDI1NjoxfSxJbSk7dmFyIGNFLFJWLHVFLHloLHZTLGpWLGxFLFU0LCRWLHdTLE1sdD16cihTYywiR3JhcGhQcm9wZXJ0aWVzIiwyNTYsVXIsam9uLHpaZSksdzJlO0QoMjkyLDIyLHszOjEsMzU6MSwyMjoxLDI5MjoxfSxBZXQpO3ZhciBtTyxEbHQsSWx0LE9sdD16cihTYywiR3JlZWR5U3dpdGNoVHlwZSIsMjkyLFVyLEJybixxWmUpLG0yZTtEKDMwMywyMix7MzoxLDM1OjEsMjI6MSwzMDM6MX0sTGV0KTt2YXIgU3gseU8sVzQseTJlPXpyKFNjLCJJbkxheWVyQ29uc3RyYWludCIsMzAzLFVyLEZybixIWmUpLHgyZTtEKDQyMCwyMix7MzoxLDM1OjEsMjI6MSw0MjA6MX0sTWJ0KTt2YXIgTmx0LHE5dCxIOXQ9enIoU2MsIkludGVyYWN0aXZlUmVmZXJlbmNlUG9pbnQiLDQyMCxVcix6bm4sVlplKSxrMmUsVjl0LEF4LEx3LHpWLEc5dCxVOXQscVYsVzl0LHhPLEhWLG1TLEx4LE55LFBsdCxWVixnYyxLOXQsTXcsV2MsRmx0LEJsdCxrTyxQMixEdyxNeCxZOXQsRHgsRU8sUHksYTEscWgsUmx0LEs0LExjLElpLFg5dCxROXQsWjl0LEo5dCx0VHQsamx0LEdWLHNsLEl3LCRsdCxJeCxUTyxIMSxZNCxoRSxYNCxRNCxmRSxGMixlVHQsemx0LHFsdCxPeDtEKDE2MywyMix7MzoxLDM1OjEsMjI6MSwxNjM6MX0sX00pO3ZhciB5UyxnYix4UyxGeSxfTyxuVHQ9enIoU2MsIkxheWVyQ29uc3RyYWludCIsMTYzLFVyLF9zbixHWmUpLEUyZTtEKDg0OCwxLFBoLEtKKSxsLlFlPWZ1bmN0aW9uKGUpe2FuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxweHQpLCIiKSwiRGlyZWN0aW9uIENvbmdydWVuY3kiKSwiU3BlY2lmaWVzIGhvdyBkcmF3aW5ncyBvZiB0aGUgc2FtZSBncmFwaCB3aXRoIGRpZmZlcmVudCBsYXlvdXQgZGlyZWN0aW9ucyBjb21wYXJlIHRvIGVhY2ggb3RoZXI6IGVpdGhlciBhIG5hdHVyYWwgcmVhZGluZyBkaXJlY3Rpb24gaXMgcHJlc2VydmVkIG9yIHRoZSBkcmF3aW5ncyBhcmUgcm90YXRlZCB2ZXJzaW9ucyBvZiBlYWNoIG90aGVyLiIpLGZUdCksKEhnKCksbXMpKSxTOXQpLG9uKCh0MSgpLHFuKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLGJ4dCksIiIpLCJGZWVkYmFjayBFZGdlcyIpLCJXaGV0aGVyIGZlZWRiYWNrIGVkZ2VzIHNob3VsZCBiZSBoaWdobGlnaHRlZCBieSByb3V0aW5nIGFyb3VuZCB0aGUgbm9kZXMuIiksKEZuKCksITEpKSxQYSksV3MpLG9uKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsS3EpLCIiKSwiSW50ZXJhY3RpdmUgUmVmZXJlbmNlIFBvaW50IiksIkRldGVybWluZXMgd2hpY2ggcG9pbnQgb2YgYSBub2RlIGlzIGNvbnNpZGVyZWQgYnkgaW50ZXJhY3RpdmUgbGF5b3V0IHBoYXNlcy4iKSx3VHQpLG1zKSxIOXQpLG9uKHFuKSkpKSxiYShlLEtxLHFvdCxndmUpLGJhKGUsS3EsJEMsZHZlKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsdnh0KSwiIiksIk1lcmdlIEVkZ2VzIiksIkVkZ2VzIHRoYXQgaGF2ZSBubyBwb3J0cyBhcmUgbWVyZ2VkIHNvIHRoZXkgdG91Y2ggdGhlIGNvbm5lY3RlZCBub2RlcyBhdCB0aGUgc2FtZSBwb2ludHMuIFdoZW4gdGhpcyBvcHRpb24gaXMgZGlzYWJsZWQsIG9uZSBwb3J0IGlzIGNyZWF0ZWQgZm9yIGVhY2ggZWRnZSBkaXJlY3RseSBjb25uZWN0ZWQgdG8gYSBub2RlLiBXaGVuIGl0IGlzIGVuYWJsZWQsIGFsbCBzdWNoIGluY29taW5nIGVkZ2VzIHNoYXJlIGFuIGlucHV0IHBvcnQsIGFuZCBhbGwgb3V0Z29pbmcgZWRnZXMgc2hhcmUgYW4gb3V0cHV0IHBvcnQuIiksITEpLFBhKSxXcyksb24ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSx3eHQpLCIiKSwiTWVyZ2UgSGllcmFyY2h5LUNyb3NzaW5nIEVkZ2VzIiksIklmIGhpZXJhcmNoaWNhbCBsYXlvdXQgaXMgYWN0aXZlLCBoaWVyYXJjaHktY3Jvc3NpbmcgZWRnZXMgdXNlIGFzIGZldyBoaWVyYXJjaGljYWwgcG9ydHMgYXMgcG9zc2libGUuIFRoZXkgYXJlIGJyb2tlbiBieSB0aGUgYWxnb3JpdGhtLCB3aXRoIGhpZXJhcmNoaWNhbCBwb3J0cyBpbnNlcnRlZCBhcyByZXF1aXJlZC4gVXN1YWxseSwgb25lIHN1Y2ggcG9ydCBpcyBjcmVhdGVkIGZvciBlYWNoIGVkZ2UgYXQgZWFjaCBoaWVyYXJjaHkgY3Jvc3NpbmcgcG9pbnQuIFdpdGggdGhpcyBvcHRpb24gc2V0IHRvIHRydWUsIHdlIHRyeSB0byBjcmVhdGUgYXMgZmV3IGhpZXJhcmNoaWNhbCBwb3J0cyBhcyBwb3NzaWJsZSBpbiB0aGUgcHJvY2Vzcy4gSW4gcGFydGljdWxhciwgYWxsIGVkZ2VzIHRoYXQgZm9ybSBhIGh5cGVyZWRnZSBjYW4gc2hhcmUgYSBwb3J0LiIpLCEwKSxQYSksV3MpLG9uKHFuKSkpKSxhbihlLG5ldyBYZShRS2Uocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLG14dCksIiIpLCJBbGxvdyBOb24tRmxvdyBQb3J0cyBUbyBTd2l0Y2ggU2lkZXMiKSwiU3BlY2lmaWVzIHdoZXRoZXIgbm9uLWZsb3cgcG9ydHMgbWF5IHN3aXRjaCBzaWRlcyBpZiB0aGVpciBub2RlJ3MgcG9ydCBjb25zdHJhaW50cyBhcmUgZWl0aGVyIEZJWEVEX1NJREUgb3IgRklYRURfT1JERVIuIEEgbm9uLWZsb3cgcG9ydCBpcyBhIHBvcnQgb24gYSBzaWRlIHRoYXQgaXMgbm90IHBhcnQgb2YgdGhlIGN1cnJlbnRseSBjb25maWd1cmVkIGxheW91dCBmbG93LiBGb3IgaW5zdGFuY2UsIGdpdmVuIGEgbGVmdC10by1yaWdodCBsYXlvdXQgZGlyZWN0aW9uLCBub3J0aCBhbmQgc291dGggcG9ydHMgd291bGQgYmUgY29uc2lkZXJlZCBub24tZmxvdyBwb3J0cy4gRnVydGhlciBub3RlIHRoYXQgdGhlIHVuZGVybHlpbmcgY3JpdGVyaXVtIHdoZXRoZXIgdG8gc3dpdGNoIHNpZGVzIG9yIG5vdCBzb2xlbHkgcmVsaWVzIG9uIHRoZSBtaW5pbWl6YXRpb24gb2YgZWRnZSBjcm9zc2luZ3MuIEhlbmNlLCBlZGdlIGxlbmd0aCBhbmQgb3RoZXIgYWVzdGhldGljcyBjcml0ZXJpYSBhcmUgbm90IGFkZHJlc3NlZC4iKSwhMSksUGEpLFdzKSxvbihxMikpLHV0KG90KExlLDEpLHJlLDIsNixbIm9yZy5lY2xpcHNlLmVsay5sYXllcmVkLm5vcnRoT3JTb3V0aFBvcnQiXSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLHl4dCksIiIpLCJQb3J0IFNvcnRpbmcgU3RyYXRlZ3kiKSwiT25seSByZWxldmFudCBmb3Igbm9kZXMgd2l0aCBGSVhFRF9TSURFIHBvcnQgY29uc3RyYWludHMuIERldGVybWluZXMgdGhlIHdheSBhIG5vZGUncyBwb3J0cyBhcmUgZGlzdHJpYnV0ZWQgb24gdGhlIHNpZGVzIG9mIGEgbm9kZSBpZiB0aGVpciBvcmRlciBpcyBub3QgcHJlc2NyaWJlZC4gVGhlIG9wdGlvbiBpcyBzZXQgb24gcGFyZW50IG5vZGVzLiIpLENUdCksbXMpLE5fdCksb24ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSx4eHQpLCIiKSwiVGhvcm91Z2huZXNzIiksIkhvdyBtdWNoIGVmZm9ydCBzaG91bGQgYmUgc3BlbnQgdG8gcHJvZHVjZSBhIG5pY2UgbGF5b3V0LiIpLGRlKDcpKSx4YyksSGEpLG9uKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsa3h0KSwiIiksIkFkZCBVbm5lY2Vzc2FyeSBCZW5kcG9pbnRzIiksIkFkZHMgYmVuZCBwb2ludHMgZXZlbiBpZiBhbiBlZGdlIGRvZXMgbm90IGNoYW5nZSBkaXJlY3Rpb24uIElmIHRydWUsIGVhY2ggbG9uZyBlZGdlIGR1bW15IHdpbGwgY29udHJpYnV0ZSBhIGJlbmQgcG9pbnQgdG8gaXRzIGVkZ2VzIGFuZCBoaWVyYXJjaHktY3Jvc3NpbmcgZWRnZXMgd2lsbCBhbHdheXMgZ2V0IGEgYmVuZCBwb2ludCB3aGVyZSB0aGV5IGNyb3NzIGhpZXJhcmNoeSBib3VuZGFyaWVzLiBCeSBkZWZhdWx0LCBiZW5kIHBvaW50cyBhcmUgb25seSBhZGRlZCB3aGVyZSBhbiBlZGdlIGNoYW5nZXMgZGlyZWN0aW9uLiIpLCExKSxQYSksV3MpLG9uKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsRXh0KSwiIiksIkdlbmVyYXRlIFBvc2l0aW9uIGFuZCBMYXllciBJRHMiKSwiSWYgZW5hYmxlZCBwb3NpdGlvbiBpZCBhbmQgbGF5ZXIgaWQgYXJlIGdlbmVyYXRlZCwgd2hpY2ggYXJlIHVzdWFsbHkgb25seSB1c2VkIGludGVybmFsbHkgd2hlbiBzZXR0aW5nIHRoZSBpbnRlcmFjdGl2ZUxheW91dCBvcHRpb24uIFRoaXMgb3B0aW9uIHNob3VsZCBiZSBzcGVjaWZpZWQgb24gdGhlIHJvb3Qgbm9kZS4iKSwhMSksUGEpLFdzKSxvbihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLHFvdCksImN5Y2xlQnJlYWtpbmciKSwiQ3ljbGUgQnJlYWtpbmcgU3RyYXRlZ3kiKSwiU3RyYXRlZ3kgZm9yIGN5Y2xlIGJyZWFraW5nLiBDeWNsZSBicmVha2luZyBsb29rcyBmb3IgY3ljbGVzIGluIHRoZSBncmFwaCBhbmQgZGV0ZXJtaW5lcyB3aGljaCBlZGdlcyB0byByZXZlcnNlIHRvIGJyZWFrIHRoZSBjeWNsZXMuIFJldmVyc2VkIGVkZ2VzIHdpbGwgZW5kIHVwIHBvaW50aW5nIHRvIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gb2YgcmVndWxhciBlZGdlcyAodGhhdCBpcywgcmV2ZXJzZWQgZWRnZXMgd2lsbCBwb2ludCBsZWZ0IGlmIGVkZ2VzIHVzdWFsbHkgcG9pbnQgcmlnaHQpLiIpLGhUdCksbXMpLF85dCksb24ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxWSSksZmN0KSwiTm9kZSBMYXllcmluZyBTdHJhdGVneSIpLCJTdHJhdGVneSBmb3Igbm9kZSBsYXllcmluZy4iKSx4VHQpLG1zKSxrX3QpLG9uKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsVHh0KSxmY3QpLCJMYXllciBDb25zdHJhaW50IiksIkRldGVybWluZXMgYSBjb25zdHJhaW50IG9uIHRoZSBwbGFjZW1lbnQgb2YgdGhlIG5vZGUgcmVnYXJkaW5nIHRoZSBsYXllcmluZy4iKSxtVHQpLG1zKSxuVHQpLG9uKHVhKSkpKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsX3h0KSxmY3QpLCJMYXllciBDaG9pY2UgQ29uc3RyYWludCIpLCJBbGxvd3MgdG8gc2V0IGEgY29uc3RyYWludCByZWdhcmRpbmcgdGhlIGxheWVyIHBsYWNlbWVudCBvZiBhIG5vZGUuIExldCBpIGJlIHRoZSB2YWx1ZSBvZiB0ZWggY29uc3RyYWludC4gQXNzdW1lZCB0aGUgZHJhd2luZyBoYXMgbiBsYXllcnMgYW5kIGkgPCBuLiBJZiBzZXQgdG8gaSwgaXQgZXhwcmVzc2VzIHRoYXQgdGhlIG5vZGUgc2hvdWxkIGJlIHBsYWNlZCBpbiBpLXRoIGxheWVyLiBTaG91bGQgaT49biBiZSB0cnVlIHRoZW4gdGhlIG5vZGUgaXMgcGxhY2VkIGluIHRoZSBsYXN0IGxheWVyIG9mIHRoZSBkcmF3aW5nLiBOb3RlIHRoYXQgdGhpcyBvcHRpb24gaXMgbm90IHBhcnQgb2YgYW55IG9mIEVMSyBMYXllcmVkJ3MgZGVmYXVsdCBjb25maWd1cmF0aW9ucyBidXQgaXMgb25seSBldmFsdWF0ZWQgYXMgcGFydCBvZiB0aGUgYEludGVyYWN0aXZlTGF5ZXJlZEdyYXBoVmlzaXRvcmAsIHdoaWNoIG11c3QgYmUgYXBwbGllZCBtYW51YWxseSBvciB1c2VkIHZpYSB0aGUgYERpYWdyYW1MYXlvdXRFbmdpbmUuIiksZGUoLTEpKSx4YyksSGEpLG9uKHVhKSkpKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsQ3h0KSxmY3QpLCJMYXllciBJRCIpLCJMYXllciBpZGVudGlmaWVyIHRoYXQgd2FzIGNhbGN1bGF0ZWQgYnkgRUxLIExheWVyZWQgZm9yIGEgbm9kZS4gVGhpcyBpcyBvbmx5IGdlbmVyYXRlZCBpZiBpbnRlcmFjdGl2ZUxheW90IG9yIGdlbmVyYXRlUG9zaXRpb25BbmRMYXllcklkcyBpcyBzZXQuIiksZGUoLTEpKSx4YyksSGEpLG9uKHVhKSkpKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsSG90KSxkMWUpLCJVcHBlciBCb3VuZCBPbiBXaWR0aCBbTWluV2lkdGggTGF5ZXJlcl0iKSwiRGVmaW5lcyBhIGxvb3NlIHVwcGVyIGJvdW5kIG9uIHRoZSB3aWR0aCBvZiB0aGUgTWluV2lkdGggbGF5ZXJlci4gSWYgc2V0IHRvICctMScgbXVsdGlwbGUgdmFsdWVzIGFyZSB0ZXN0ZWQgYW5kIHRoZSBiZXN0IHJlc3VsdCBpcyBzZWxlY3RlZC4iKSxkZSg0KSkseGMpLEhhKSxvbihxbikpKSksYmEoZSxIb3QsVkkseHZlKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsVm90KSxkMWUpLCJVcHBlciBMYXllciBFc3RpbWF0aW9uIFNjYWxpbmcgRmFjdG9yIFtNaW5XaWR0aCBMYXllcmVyXSIpLCJNdWx0aXBsaWVkIHdpdGggVXBwZXIgQm91bmQgT24gV2lkdGggZm9yIGRlZmluaW5nIGFuIHVwcGVyIGJvdW5kIG9uIHRoZSB3aWR0aCBvZiBsYXllcnMgd2hpY2ggaGF2ZW4ndCBiZWVuIGRldGVybWluZWQgeWV0LCBidXQgd2hvc2UgbWF4aW11bSB3aWR0aCBoYWQgYmVlbiAocm91Z2hseSkgZXN0aW1hdGVkIGJ5IHRoZSBNaW5XaWR0aCBhbGdvcml0aG0uIENvbXBlbnNhdGVzIGZvciB0b28gaGlnaCBlc3RpbWF0aW9ucy4gSWYgc2V0IHRvICctMScgbXVsdGlwbGUgdmFsdWVzIGFyZSB0ZXN0ZWQgYW5kIHRoZSBiZXN0IHJlc3VsdCBpcyBzZWxlY3RlZC4iKSxkZSgyKSkseGMpLEhhKSxvbihxbikpKSksYmEoZSxWb3QsVkksRXZlKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsR290KSxnMWUpLCJOb2RlIFByb21vdGlvbiBTdHJhdGVneSIpLCJSZWR1Y2VzIG51bWJlciBvZiBkdW1teSBub2RlcyBhZnRlciBsYXllcmluZyBwaGFzZSAoaWYgcG9zc2libGUpLiIpLHlUdCksbXMpLERfdCksb24ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxVb3QpLGcxZSksIk1heCBOb2RlIFByb21vdGlvbiBJdGVyYXRpb25zIiksIkxpbWl0cyB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgZm9yIG5vZGUgcHJvbW90aW9uLiIpLGRlKDApKSx4YyksSGEpLG9uKHFuKSkpKSxiYShlLFVvdCxHb3QsbnVsbCksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLFdvdCksImxheWVyaW5nLmNvZmZtYW5HcmFoYW0iKSwiTGF5ZXIgQm91bmQiKSwiVGhlIG1heGltdW0gbnVtYmVyIG9mIG5vZGVzIGFsbG93ZWQgcGVyIGxheWVyLiIpLGRlKFRpKSkseGMpLEhhKSxvbihxbikpKSksYmEoZSxXb3QsVkksYnZlKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsJEMpLEdJKSwiQ3Jvc3NpbmcgTWluaW1pemF0aW9uIFN0cmF0ZWd5IiksIlN0cmF0ZWd5IGZvciBjcm9zc2luZyBtaW5pbWl6YXRpb24uIiksbFR0KSxtcykseDl0KSxvbihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLFN4dCksR0kpLCJGb3JjZSBOb2RlIE1vZGVsIE9yZGVyIiksIlRoZSBub2RlIG9yZGVyIGdpdmVuIGJ5IHRoZSBtb2RlbCBkb2VzIG5vdCBjaGFuZ2UgdG8gcHJvZHVjZSBhIGJldHRlciBsYXlvdXQuIEUuZy4gaWYgbm9kZSBBIGlzIGJlZm9yZSBub2RlIEIgaW4gdGhlIG1vZGVsIHRoaXMgaXMgbm90IGNoYW5nZWQgZHVyaW5nIGNyb3NzaW5nIG1pbmltaXphdGlvbi4gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIG5vZGUgbW9kZWwgb3JkZXIgaXMgYWxyZWFkeSByZXNwZWN0ZWQgYmVmb3JlIGNyb3NzaW5nIG1pbmltaXphdGlvbi4gVGhpcyBjYW4gYmUgYWNoaWV2ZWQgYnkgc2V0dGluZyBjb25zaWRlck1vZGVsT3JkZXIuc3RyYXRlZ3kgdG8gTk9ERVNfQU5EX0VER0VTLiIpLCExKSxQYSksV3MpLG9uKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsS290KSxHSSksIkhpZXJhcmNoaWNhbCBTd2VlcGluZXNzIiksIkhvdyBsaWtlbHkgaXQgaXMgdG8gdXNlIGNyb3NzLWhpZXJhcmNoeSAoMSkgdnMgYm90dG9tLXVwICgtMSkuIiksLjEpLCRvKSx3YSksb24ocW4pKSkpLGJhKGUsS290LG9ILHEyZSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLFlvdCksR0kpLCJTZW1pLUludGVyYWN0aXZlIENyb3NzaW5nIE1pbmltaXphdGlvbiIpLCJQcmVzZXJ2ZXMgdGhlIG9yZGVyIG9mIG5vZGVzIHdpdGhpbiBhIGxheWVyIGJ1dCBzdGlsbCBtaW5pbWl6ZXMgY3Jvc3NpbmdzIGJldHdlZW4gZWRnZXMgY29ubmVjdGluZyBsb25nIGVkZ2UgZHVtbWllcy4gRGVyaXZlcyB0aGUgZGVzaXJlZCBvcmRlciBmcm9tIHBvc2l0aW9ucyBzcGVjaWZpZWQgYnkgdGhlICdvcmcuZWNsaXBzZS5lbGsucG9zaXRpb24nIGxheW91dCBvcHRpb24uIFJlcXVpcmVzIGEgY3Jvc3NpbmcgbWluaW1pemF0aW9uIHN0cmF0ZWd5IHRoYXQgaXMgYWJsZSB0byBwcm9jZXNzICdpbi1sYXllcicgY29uc3RyYWludHMuIiksITEpLFBhKSxXcyksb24ocW4pKSkpLGJhKGUsWW90LCRDLFUyZSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLEF4dCksR0kpLCJQb3NpdGlvbiBDaG9pY2UgQ29uc3RyYWludCIpLCJBbGxvd3MgdG8gc2V0IGEgY29uc3RyYWludCByZWdhcmRpbmcgdGhlIHBvc2l0aW9uIHBsYWNlbWVudCBvZiBhIG5vZGUgaW4gYSBsYXllci4gQXNzdW1lZCB0aGUgbGF5ZXIgaW4gd2hpY2ggdGhlIG5vZGUgcGxhY2VkIGluY2x1ZGVzIG4gb3RoZXIgbm9kZXMgYW5kIGkgPCBuLiBJZiBzZXQgdG8gaSwgaXQgZXhwcmVzc2VzIHRoYXQgdGhlIG5vZGUgc2hvdWxkIGJlIHBsYWNlZCBhdCB0aGUgaS10aCBwb3NpdGlvbi4gU2hvdWxkIGk+PW4gYmUgdHJ1ZSB0aGVuIHRoZSBub2RlIGlzIHBsYWNlZCBhdCB0aGUgbGFzdCBwb3NpdGlvbiBpbiB0aGUgbGF5ZXIuIE5vdGUgdGhhdCB0aGlzIG9wdGlvbiBpcyBub3QgcGFydCBvZiBhbnkgb2YgRUxLIExheWVyZWQncyBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zIGJ1dCBpcyBvbmx5IGV2YWx1YXRlZCBhcyBwYXJ0IG9mIHRoZSBgSW50ZXJhY3RpdmVMYXllcmVkR3JhcGhWaXNpdG9yYCwgd2hpY2ggbXVzdCBiZSBhcHBsaWVkIG1hbnVhbGx5IG9yIHVzZWQgdmlhIHRoZSBgRGlhZ3JhbUxheW91dEVuZ2luZS4iKSxkZSgtMSkpLHhjKSxIYSksb24odWEpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxMeHQpLEdJKSwiUG9zaXRpb24gSUQiKSwiUG9zaXRpb24gd2l0aGluIGEgbGF5ZXIgdGhhdCB3YXMgZGV0ZXJtaW5lZCBieSBFTEsgTGF5ZXJlZCBmb3IgYSBub2RlLiBUaGlzIGlzIG9ubHkgZ2VuZXJhdGVkIGlmIGludGVyYWN0aXZlTGF5b3Qgb3IgZ2VuZXJhdGVQb3NpdGlvbkFuZExheWVySWRzIGlzIHNldC4iKSxkZSgtMSkpLHhjKSxIYSksb24odWEpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxNeHQpLHAxZSksIkdyZWVkeSBTd2l0Y2ggQWN0aXZhdGlvbiBUaHJlc2hvbGQiKSwiQnkgZGVmYXVsdCBpdCBpcyBkZWNpZGVkIGF1dG9tYXRpY2FsbHkgaWYgdGhlIGdyZWVkeSBzd2l0Y2ggaXMgYWN0aXZhdGVkIG9yIG5vdC4gVGhlIGRlY2lzaW9uIGlzIGJhc2VkIG9uIHdoZXRoZXIgdGhlIHNpemUgb2YgdGhlIGlucHV0IGdyYXBoICh3aXRob3V0IGR1bW15IG5vZGVzKSBpcyBzbWFsbGVyIHRoYW4gdGhlIHZhbHVlIG9mIHRoaXMgb3B0aW9uLiBBICcwJyBlbmZvcmNlcyB0aGUgYWN0aXZhdGlvbi4iKSxkZSg0MCkpLHhjKSxIYSksb24ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxYb3QpLHAxZSksIkdyZWVkeSBTd2l0Y2ggQ3Jvc3NpbmcgTWluaW1pemF0aW9uIiksIkdyZWVkeSBTd2l0Y2ggc3RyYXRlZ3kgZm9yIGNyb3NzaW5nIG1pbmltaXphdGlvbi4gVGhlIGdyZWVkeSBzd2l0Y2ggaGV1cmlzdGljIGlzIGV4ZWN1dGVkIGFmdGVyIHRoZSByZWd1bGFyIGNyb3NzaW5nIG1pbmltaXphdGlvbiBhcyBhIHBvc3QtcHJvY2Vzc29yLiBOb3RlIHRoYXQgaWYgJ2hpZXJhcmNoeUhhbmRsaW5nJyBpcyBzZXQgdG8gJ0lOQ0xVREVfQ0hJTERSRU4nLCB0aGUgJ2dyZWVkeVN3aXRjaEhpZXJhcmNoaWNhbC50eXBlJyBvcHRpb24gbXVzdCBiZSB1c2VkLiIpLHVUdCksbXMpLE9sdCksb24ocW4pKSkpLGJhKGUsWG90LCRDLCQyZSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLFlxKSwiY3Jvc3NpbmdNaW5pbWl6YXRpb24uZ3JlZWR5U3dpdGNoSGllcmFyY2hpY2FsIiksIkdyZWVkeSBTd2l0Y2ggQ3Jvc3NpbmcgTWluaW1pemF0aW9uIChoaWVyYXJjaGljYWwpIiksIkFjdGl2YXRlcyB0aGUgZ3JlZWR5IHN3aXRjaCBoZXVyaXN0aWMgaW4gY2FzZSBoaWVyYXJjaGljYWwgbGF5b3V0IGlzIHVzZWQuIFRoZSBkaWZmZXJlbmNlcyB0byB0aGUgbm9uLWhpZXJhcmNoaWNhbCBjYXNlIChzZWUgJ2dyZWVkeVN3aXRjaC50eXBlJykgYXJlOiAxKSBncmVlZHkgc3dpdGNoIGlzIGluYWN0aXZlIGJ5IGRlZmF1bHQsIDMpIG9ubHkgdGhlIG9wdGlvbiB2YWx1ZSBzZXQgb24gdGhlIG5vZGUgYXQgd2hpY2ggaGllcmFyY2hpY2FsIGxheW91dCBzdGFydHMgaXMgcmVsZXZhbnQsIGFuZCAyKSBpZiBpdCdzIGFjdGl2YXRlZCBieSB0aGUgdXNlciwgaXQgcHJvcGVybHkgYWRkcmVzc2VzIGhpZXJhcmNoeS1jcm9zc2luZyBlZGdlcy4iKSxjVHQpLG1zKSxPbHQpLG9uKHFuKSkpKSxiYShlLFlxLCRDLEIyZSksYmEoZSxZcSxvSCxSMmUpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxENCksYjFlKSwiTm9kZSBQbGFjZW1lbnQgU3RyYXRlZ3kiKSwiU3RyYXRlZ3kgZm9yIG5vZGUgcGxhY2VtZW50LiIpLF9UdCksbXMpLENfdCksb24ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSxYcSksYjFlKSwiRmF2b3IgU3RyYWlnaHQgRWRnZXMgT3ZlciBCYWxhbmNpbmciKSwiRmF2b3Igc3RyYWlnaHQgZWRnZXMgb3ZlciBhIGJhbGFuY2VkIG5vZGUgcGxhY2VtZW50LiBUaGUgZGVmYXVsdCBiZWhhdmlvciBpcyBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gdGhlIHVzZWQgJ2VkZ2VSb3V0aW5nJy4gRm9yIGFuIG9ydGhvZ29uYWwgc3R5bGUgaXQgaXMgc2V0IHRvIHRydWUsIGZvciBhbGwgb3RoZXIgc3R5bGVzIHRvIGZhbHNlLiIpLFBhKSxXcyksb24ocW4pKSkpLGJhKGUsWHEsRDQsTnZlKSxiYShlLFhxLEQ0LFB2ZSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLFFvdCksdjFlKSwiQksgRWRnZSBTdHJhaWdodGVuaW5nIiksIlNwZWNpZmllcyB3aGV0aGVyIHRoZSBCcmFuZGVzIEtvZXBmIG5vZGUgcGxhY2VyIHRyaWVzIHRvIGluY3JlYXNlIHRoZSBudW1iZXIgb2Ygc3RyYWlnaHQgZWRnZXMgYXQgdGhlIGV4cGVuc2Ugb2YgZGlhZ3JhbSBzaXplLiBUaGVyZSBpcyBhIHN1YnRsZSBkaWZmZXJlbmNlIHRvIHRoZSAnZmF2b3JTdHJhaWdodEVkZ2VzJyBvcHRpb24sIHdoaWNoIGRlY2lkZXMgd2hldGhlciBhIGJhbGFuY2VkIHBsYWNlbWVudCBvZiB0aGUgbm9kZXMgaXMgZGVzaXJlZCwgb3Igbm90LiBJbiBiayB0ZXJtcyB0aGlzIG1lYW5zIGNvbWJpbmluZyB0aGUgZm91ciBhbGlnbm1lbnRzIGludG8gYSBzaW5nbGUgYmFsYW5jZWQgb25lLCBvciBub3QuIFRoaXMgb3B0aW9uIG9uIHRoZSBvdGhlciBoYW5kIHRyaWVzIHRvIHN0cmFpZ2h0ZW4gYWRkaXRpb25hbCBlZGdlcyBkdXJpbmcgdGhlIGNyZWF0aW9uIG9mIGVhY2ggb2YgdGhlIGZvdXIgYWxpZ25tZW50cy4iKSxrVHQpLG1zKSxNOXQpLG9uKHFuKSkpKSxiYShlLFFvdCxENCxNdmUpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxab3QpLHYxZSksIkJLIEZpeGVkIEFsaWdubWVudCIpLCJUZWxscyB0aGUgQksgbm9kZSBwbGFjZXIgdG8gdXNlIGEgY2VydGFpbiBhbGlnbm1lbnQgKG91dCBvZiBpdHMgZm91cikgaW5zdGVhZCBvZiB0aGUgb25lIHByb2R1Y2luZyB0aGUgc21hbGxlc3QgaGVpZ2h0LCBvciB0aGUgY29tYmluYXRpb24gb2YgYWxsIGZvdXIuIiksRVR0KSxtcyksUDl0KSxvbihxbikpKSksYmEoZSxab3QsRDQsSXZlKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsSm90KSwibm9kZVBsYWNlbWVudC5saW5lYXJTZWdtZW50cyIpLCJMaW5lYXIgU2VnbWVudHMgRGVmbGVjdGlvbiBEYW1wZW5pbmciKSwiRGFtcGVucyB0aGUgbW92ZW1lbnQgb2Ygbm9kZXMgdG8ga2VlcCB0aGUgZGlhZ3JhbSBmcm9tIGdldHRpbmcgdG9vIGxhcmdlLiIpLC4zKSwkbyksd2EpLG9uKHFuKSkpKSxiYShlLEpvdCxENCxCdmUpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSx0Y3QpLCJub2RlUGxhY2VtZW50Lm5ldHdvcmtTaW1wbGV4IiksIk5vZGUgRmxleGliaWxpdHkiKSwiQWltcyBhdCBzaG9ydGVyIGFuZCBzdHJhaWdodGVyIGVkZ2VzLiBUd28gY29uZmlndXJhdGlvbnMgYXJlIHBvc3NpYmxlOiAoYSkgYWxsb3cgcG9ydHMgdG8gbW92ZSBmcmVlbHkgb24gdGhlIHNpZGUgdGhleSBhcmUgYXNzaWduZWQgdG8gKHRoZSBvcmRlciBpcyBhbHdheXMgZGVmaW5lZCBiZWZvcmVoYW5kKSwgKGIpIGFkZGl0aW9uYWxseSBhbGxvdyB0byBlbmxhcmdlIGEgbm9kZSB3aGVyZXZlciBpdCBoZWxwcy4gSWYgdGhpcyBvcHRpb24gaXMgbm90IGNvbmZpZ3VyZWQgZm9yIGEgbm9kZSwgdGhlICdub2RlRmxleGliaWxpdHkuZGVmYXVsdCcgdmFsdWUgaXMgdXNlZCwgd2hpY2ggaXMgc3BlY2lmaWVkIGZvciB0aGUgbm9kZSdzIHBhcmVudC4iKSxtcyksaGh0KSxvbih1YSkpKSksYmEoZSx0Y3QsRDQsenZlKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsZWN0KSwibm9kZVBsYWNlbWVudC5uZXR3b3JrU2ltcGxleC5ub2RlRmxleGliaWxpdHkiKSwiTm9kZSBGbGV4aWJpbGl0eSBEZWZhdWx0IiksIkRlZmF1bHQgdmFsdWUgb2YgdGhlICdub2RlRmxleGliaWxpdHknIG9wdGlvbiBmb3IgdGhlIGNoaWxkcmVuIG9mIGEgaGllcmFyY2hpY2FsIG5vZGUuIiksVFR0KSxtcyksaGh0KSxvbihxbikpKSksYmEoZSxlY3QsRDQsJHZlKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsRHh0KSx3MWUpLCJTZWxmLUxvb3AgRGlzdHJpYnV0aW9uIiksIkFsdGVyIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIGxvb3BzIGFyb3VuZCB0aGUgbm9kZS4gSXQgb25seSB0YWtlcyBlZmZlY3QgZm9yIFBvcnRDb25zdHJhaW50cy5GUkVFLiIpLHBUdCksbXMpLEJfdCksb24odWEpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxJeHQpLHcxZSksIlNlbGYtTG9vcCBPcmRlcmluZyIpLCJBbHRlciB0aGUgb3JkZXJpbmcgb2YgdGhlIGxvb3BzIHRoZXkgY2FuIGVpdGhlciBiZSBzdGFja2VkIG9yIHNlcXVlbmNlZC4gSXQgb25seSB0YWtlcyBlZmZlY3QgZm9yIFBvcnRDb25zdHJhaW50cy5GUkVFLiIpLGJUdCksbXMpLFJfdCksb24odWEpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxRcSksImVkZ2VSb3V0aW5nLnNwbGluZXMiKSwiU3BsaW5lIFJvdXRpbmcgTW9kZSIpLCJTcGVjaWZpZXMgdGhlIHdheSBjb250cm9sIHBvaW50cyBhcmUgYXNzZW1ibGVkIGZvciBlYWNoIGluZGl2aWR1YWwgZWRnZS4gQ09OU0VSVkFUSVZFIGVuc3VyZXMgdGhhdCBlZGdlcyBhcmUgcHJvcGVybHkgcm91dGVkIGFyb3VuZCB0aGUgbm9kZXMgYnV0IGZlZWxzIHJhdGhlciBvcnRob2dvbmFsIGF0IHRpbWVzLiBTTE9QUFkgdXNlcyBmZXdlciBjb250cm9sIHBvaW50cyB0byBvYnRhaW4gY3VydmllciBlZGdlIHJvdXRlcyBidXQgbWF5IHJlc3VsdCBpbiBlZGdlcyBvdmVybGFwcGluZyBub2Rlcy4iKSx2VHQpLG1zKSwkX3QpLG9uKHFuKSkpKSxiYShlLFFxLFVJLHJ2ZSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLFpxKSwiZWRnZVJvdXRpbmcuc3BsaW5lcy5zbG9wcHkiKSwiU2xvcHB5IFNwbGluZSBMYXllciBTcGFjaW5nIEZhY3RvciIpLCJTcGFjaW5nIGZhY3RvciBmb3Igcm91dGluZyBhcmVhIGJldHdlZW4gbGF5ZXJzIHdoZW4gdXNpbmcgc2xvcHB5IHNwbGluZSByb3V0aW5nLiIpLC4yKSwkbyksd2EpLG9uKHFuKSkpKSxiYShlLFpxLFVJLHN2ZSksYmEoZSxacSxRcSxhdmUpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxuY3QpLCJlZGdlUm91dGluZy5wb2x5bGluZSIpLCJTbG9wZWQgRWRnZSBab25lIFdpZHRoIiksIldpZHRoIG9mIHRoZSBzdHJpcCB0byB0aGUgbGVmdCBhbmQgdG8gdGhlIHJpZ2h0IG9mIGVhY2ggbGF5ZXIgd2hlcmUgdGhlIHBvbHlsaW5lIGVkZ2Ugcm91dGVyIGlzIGFsbG93ZWQgdG8gcmVmcmFpbiBmcm9tIGVuc3VyaW5nIHRoYXQgZWRnZXMgYXJlIHJvdXRlZCBob3Jpem9udGFsbHkuIFRoaXMgcHJldmVudHMgYXdrd2FyZCBiZW5kIHBvaW50cyBmb3Igbm9kZXMgdGhhdCBleHRlbnQgYWxtb3N0IHRvIHRoZSBlZGdlIG9mIHRoZWlyIGxheWVyLiIpLDIpLCRvKSx3YSksb24ocW4pKSkpLGJhKGUsbmN0LFVJLEoyZSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLE94dCksajEpLCJTcGFjaW5nIEJhc2UgVmFsdWUiKSwiQW4gb3B0aW9uYWwgYmFzZSB2YWx1ZSBmb3IgYWxsIG90aGVyIGxheW91dCBvcHRpb25zIG9mIHRoZSAnc3BhY2luZycgZ3JvdXAuIEl0IGNhbiBiZSB1c2VkIHRvIGNvbnZlbmllbnRseSBhbHRlciB0aGUgb3ZlcmFsbCAnc3BhY2lvdXNuZXNzJyBvZiB0aGUgZHJhd2luZy4gV2hlbmV2ZXIgYW4gZXhwbGljaXQgdmFsdWUgaXMgc2V0IGZvciB0aGUgb3RoZXIgbGF5b3V0IG9wdGlvbnMsIHRoaXMgYmFzZSB2YWx1ZSB3aWxsIGhhdmUgbm8gZWZmZWN0LiBUaGUgYmFzZSB2YWx1ZSBpcyBub3QgaW5oZXJpdGVkLCBpLmUuIGl0IG11c3QgYmUgc2V0IGZvciBlYWNoIGhpZXJhcmNoaWNhbCBub2RlLiIpLCRvKSx3YSksb24ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxOeHQpLGoxKSwiRWRnZSBOb2RlIEJldHdlZW4gTGF5ZXJzIFNwYWNpbmciKSwiVGhlIHNwYWNpbmcgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gbm9kZXMgYW5kIGVkZ2VzIHRoYXQgYXJlIHJvdXRlZCBuZXh0IHRvIHRoZSBub2RlJ3MgbGF5ZXIuIEZvciB0aGUgc3BhY2luZyBiZXR3ZWVuIG5vZGVzIGFuZCBlZGdlcyB0aGF0IGNyb3NzIHRoZSBub2RlJ3MgbGF5ZXIgJ3NwYWNpbmcuZWRnZU5vZGUnIGlzIHVzZWQuIiksMTApLCRvKSx3YSksb24ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxQeHQpLGoxKSwiRWRnZSBFZGdlIEJldHdlZW4gTGF5ZXIgU3BhY2luZyIpLCJTcGFjaW5nIHRvIGJlIHByZXNlcnZlZCBiZXR3ZWVuIHBhaXJzIG9mIGVkZ2VzIHRoYXQgYXJlIHJvdXRlZCBiZXR3ZWVuIHRoZSBzYW1lIHBhaXIgb2YgbGF5ZXJzLiBOb3RlIHRoYXQgJ3NwYWNpbmcuZWRnZUVkZ2UnIGlzIHVzZWQgZm9yIHRoZSBzcGFjaW5nIGJldHdlZW4gcGFpcnMgb2YgZWRnZXMgY3Jvc3NpbmcgdGhlIHNhbWUgbGF5ZXIuIiksMTApLCRvKSx3YSksb24ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxGeHQpLGoxKSwiTm9kZSBOb2RlIEJldHdlZW4gTGF5ZXJzIFNwYWNpbmciKSwiVGhlIHNwYWNpbmcgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gYW55IHBhaXIgb2Ygbm9kZXMgb2YgdHdvIGFkamFjZW50IGxheWVycy4gTm90ZSB0aGF0ICdzcGFjaW5nLm5vZGVOb2RlJyBpcyB1c2VkIGZvciB0aGUgc3BhY2luZyBiZXR3ZWVuIG5vZGVzIHdpdGhpbiB0aGUgbGF5ZXIgaXRzZWxmLiIpLDIwKSwkbyksd2EpLG9uKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsQnh0KSxVeHQpLCJEaXJlY3Rpb24gUHJpb3JpdHkiKSwiRGVmaW5lcyBob3cgaW1wb3J0YW50IGl0IGlzIHRvIGhhdmUgYSBjZXJ0YWluIGVkZ2UgcG9pbnQgaW50byB0aGUgZGlyZWN0aW9uIG9mIHRoZSBvdmVyYWxsIGxheW91dC4gVGhpcyBvcHRpb24gaXMgZXZhbHVhdGVkIGR1cmluZyB0aGUgY3ljbGUgYnJlYWtpbmcgcGhhc2UuIiksZGUoMCkpLHhjKSxIYSksb24oSWQpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxSeHQpLFV4dCksIlNob3J0bmVzcyBQcmlvcml0eSIpLCJEZWZpbmVzIGhvdyBpbXBvcnRhbnQgaXQgaXMgdG8ga2VlcCBhbiBlZGdlIGFzIHNob3J0IGFzIHBvc3NpYmxlLiBUaGlzIG9wdGlvbiBpcyBldmFsdWF0ZWQgZHVyaW5nIHRoZSBsYXllcmluZyBwaGFzZS4iKSxkZSgwKSkseGMpLEhhKSxvbihJZCkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLGp4dCksVXh0KSwiU3RyYWlnaHRuZXNzIFByaW9yaXR5IiksIkRlZmluZXMgaG93IGltcG9ydGFudCBpdCBpcyB0byBrZWVwIGFuIGVkZ2Ugc3RyYWlnaHQsIGkuZS4gYWxpZ25lZCB3aXRoIG9uZSBvZiB0aGUgdHdvIGF4ZXMuIFRoaXMgb3B0aW9uIGlzIGV2YWx1YXRlZCBkdXJpbmcgbm9kZSBwbGFjZW1lbnQuIiksZGUoMCkpLHhjKSxIYSksb24oSWQpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxyY3QpLFd4dCksTmZlKSwiVHJpZXMgdG8gZnVydGhlciBjb21wYWN0IGNvbXBvbmVudHMgKGRpc2Nvbm5lY3RlZCBzdWItZ3JhcGhzKS4iKSwhMSksUGEpLFdzKSxvbihxbikpKSksYmEoZSxyY3QsUEMsITApLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSwkeHQpLG0xZSksIlBvc3QgQ29tcGFjdGlvbiBTdHJhdGVneSIpLHkxZSksaVR0KSxtcyksejl0KSxvbihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLHp4dCksbTFlKSwiUG9zdCBDb21wYWN0aW9uIENvbnN0cmFpbnQgQ2FsY3VsYXRpb24iKSx5MWUpLHJUdCksbXMpLG05dCksb24ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxKcSksS3h0KSwiSGlnaCBEZWdyZWUgTm9kZSBUcmVhdG1lbnQiKSwiTWFrZXMgcm9vbSBhcm91bmQgaGlnaCBkZWdyZWUgbm9kZXMgdG8gcGxhY2UgbGVhZnMgYW5kIHRyZWVzLiIpLCExKSxQYSksV3MpLG9uKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsaWN0KSxLeHQpLCJIaWdoIERlZ3JlZSBOb2RlIFRocmVzaG9sZCIpLCJXaGV0aGVyIGEgbm9kZSBpcyBjb25zaWRlcmVkIHRvIGhhdmUgYSBoaWdoIGRlZ3JlZS4iKSxkZSgxNikpLHhjKSxIYSksb24ocW4pKSkpLGJhKGUsaWN0LEpxLCEwKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsc2N0KSxLeHQpLCJIaWdoIERlZ3JlZSBOb2RlIE1heGltdW0gVHJlZSBIZWlnaHQiKSwiTWF4aW11bSBoZWlnaHQgb2YgYSBzdWJ0cmVlIGNvbm5lY3RlZCB0byBhIGhpZ2ggZGVncmVlIG5vZGUgdG8gYmUgbW92ZWQgdG8gc2VwYXJhdGUgbGF5ZXJzLiIpLGRlKDUpKSx4YyksSGEpLG9uKHFuKSkpKSxiYShlLHNjdCxKcSwhMCksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLFkwKSxZeHQpLCJHcmFwaCBXcmFwcGluZyBTdHJhdGVneSIpLCJGb3IgY2VydGFpbiBncmFwaHMgYW5kIGNlcnRhaW4gcHJlc2NyaWJlZCBkcmF3aW5nIGFyZWFzIGl0IG1heSBiZSBkZXNpcmFibGUgdG8gc3BsaXQgdGhlIGxhaWQgb3V0IGdyYXBoIGludG8gY2h1bmtzIHRoYXQgYXJlIHBsYWNlZCBzaWRlIGJ5IHNpZGUuIFRoZSBlZGdlcyB0aGF0IGNvbm5lY3QgZGlmZmVyZW50IGNodW5rcyBhcmUgJ3dyYXBwZWQnIGFyb3VuZCBmcm9tIHRoZSBlbmQgb2Ygb25lIGNodW5rIHRvIHRoZSBzdGFydCBvZiB0aGUgb3RoZXIgY2h1bmsuIFRoZSBwb2ludHMgYmV0d2VlbiB0aGUgY2h1bmtzIGFyZSByZWZlcnJlZCB0byBhcyAnY3V0cycuIiksTFR0KSxtcyksVl90KSxvbihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLHRIKSxZeHQpLCJBZGRpdGlvbmFsIFdyYXBwZWQgRWRnZXMgU3BhY2luZyIpLCJUbyB2aXN1YWxseSBzZXBhcmF0ZSBlZGdlcyB0aGF0IGFyZSB3cmFwcGVkIGZyb20gcmVndWxhcmx5IHJvdXRlZCBlZGdlcyBhbiBhZGRpdGlvbmFsIHNwYWNpbmcgdmFsdWUgY2FuIGJlIHNwZWNpZmllZCBpbiBmb3JtIG9mIHRoaXMgbGF5b3V0IG9wdGlvbi4gVGhlIHNwYWNpbmcgaXMgYWRkZWQgdG8gdGhlIHJlZ3VsYXIgZWRnZU5vZGUgc3BhY2luZy4iKSwxMCksJG8pLHdhKSxvbihxbikpKSksYmEoZSx0SCxZMCx0d2UpLGJhKGUsdEgsWTAsZXdlKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsZUgpLFl4dCksIkNvcnJlY3Rpb24gRmFjdG9yIGZvciBXcmFwcGluZyIpLCJBdCB0aW1lcyBhbmQgZm9yIGNlcnRhaW4gdHlwZXMgb2YgZ3JhcGhzIHRoZSBleGVjdXRlZCB3cmFwcGluZyBtYXkgcHJvZHVjZSByZXN1bHRzIHRoYXQgYXJlIGNvbnNpc3RlbnRseSBiaWFzZWQgaW4gdGhlIHNhbWUgZmFzaGlvbjogZWl0aGVyIHdyYXBwaW5nIHRvIG9mdGVuIG9yIHRvIHJhcmVseS4gVGhpcyBmYWN0b3IgY2FuIGJlIHVzZWQgdG8gY29ycmVjdCB0aGUgYmlhcy4gSW50ZXJuYWxseSwgaXQgaXMgc2ltcGx5IG11bHRpcGxpZWQgd2l0aCB0aGUgJ2FzcGVjdCByYXRpbycgbGF5b3V0IG9wdGlvbi4iKSwxKSwkbyksd2EpLG9uKHFuKSkpKSxiYShlLGVILFkwLHJ3ZSksYmEoZSxlSCxZMCxpd2UpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSx6QykseDFlKSwiQ3V0dGluZyBTdHJhdGVneSIpLCJUaGUgc3RyYXRlZ3kgYnkgd2hpY2ggdGhlIGxheWVyIGluZGV4ZXMgYXJlIGRldGVybWluZWQgYXQgd2hpY2ggdGhlIGxheWVyaW5nIGNydW1ibGVzIGludG8gY2h1bmtzLiIpLEFUdCksbXMpLEU5dCksb24ocW4pKSkpLGJhKGUsekMsWTAsbHdlKSxiYShlLHpDLFkwLGh3ZSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLGFjdCkseDFlKSwiTWFudWFsbHkgU3BlY2lmaWVkIEN1dHMiKSwiQWxsb3dzIHRoZSB1c2VyIHRvIHNwZWNpZnkgaGVyIG93biBjdXRzIGZvciBhIGNlcnRhaW4gZ3JhcGguIiksRzEpLG1oKSxvbihxbikpKSksYmEoZSxhY3QsekMsYXdlKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsb2N0KSwid3JhcHBpbmcuY3V0dGluZy5tc2QiKSwiTVNEIEZyZWVkb20iKSwiVGhlIE1TRCBjdXR0aW5nIHN0cmF0ZWd5IHN0YXJ0cyB3aXRoIGFuIGluaXRpYWwgZ3Vlc3Mgb24gdGhlIG51bWJlciBvZiBjaHVua3MgdGhlIGdyYXBoIHNob3VsZCBiZSBzcGxpdCBpbnRvLiBUaGUgZnJlZWRvbSBzcGVjaWZpZXMgaG93IG11Y2ggdGhlIHN0cmF0ZWd5IG1heSBkZXZpYXRlIGZyb20gdGhpcyBndWVzcy4gRS5nLiBpZiBhbiBpbml0aWFsIG51bWJlciBvZiAzIGlzIGNvbXB1dGVkLCBhIGZyZWVkb20gb2YgMSBhbGxvd3MgMiwgMywgYW5kIDQgY3V0cy4iKSxTVHQpLHhjKSxIYSksb24ocW4pKSkpLGJhKGUsb2N0LHpDLGN3ZSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLG5IKSxrMWUpLCJWYWxpZGlmaWNhdGlvbiBTdHJhdGVneSIpLCJXaGVuIHdyYXBwaW5nIGdyYXBocywgb25lIGNhbiBzcGVjaWZ5IGluZGljZXMgdGhhdCBhcmUgbm90IGFsbG93ZWQgYXMgc3BsaXQgcG9pbnRzLiBUaGUgdmFsaWRpZmljYXRpb24gc3RyYXRlZ3kgbWFrZXMgc3VyZSBldmVyeSBjb21wdXRlZCBzcGxpdCBwb2ludCBpcyBhbGxvd2VkLiIpLE1UdCksbXMpLEhfdCksb24ocW4pKSkpLGJhKGUsbkgsWTAsRXdlKSxiYShlLG5ILFkwLFR3ZSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLHJIKSxrMWUpLCJWYWxpZCBJbmRpY2VzIGZvciBXcmFwcGluZyIpLG51bGwpLEcxKSxtaCksb24ocW4pKSkpLGJhKGUsckgsWTAseXdlKSxiYShlLHJILFkwLHh3ZSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLGlIKSxYeHQpLCJJbXByb3ZlIEN1dHMiKSwiRm9yIGdlbmVyYWwgZ3JhcGhzIGl0IGlzIGltcG9ydGFudCB0aGF0IG5vdCB0b28gbWFueSBlZGdlcyB3cmFwIGJhY2t3YXJkcy4gVGh1cyBhIGNvbXByb21pc2UgYmV0d2VlbiBldmVubHktZGlzdHJpYnV0ZWQgY3V0cyBhbmQgdGhlIHRvdGFsIG51bWJlciBvZiBjdXQgZWRnZXMgaXMgc291Z2h0LiIpLCEwKSxQYSksV3MpLG9uKHFuKSkpKSxiYShlLGlILFkwLHB3ZSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLHNIKSxYeHQpLCJEaXN0YW5jZSBQZW5hbHR5IFdoZW4gSW1wcm92aW5nIEN1dHMiKSxudWxsKSwyKSwkbyksd2EpLG9uKHFuKSkpKSxiYShlLHNILFkwLGR3ZSksYmEoZSxzSCxpSCwhMCksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLGNjdCksWHh0KSwiSW1wcm92ZSBXcmFwcGVkIEVkZ2VzIiksIlRoZSBpbml0aWFsIHdyYXBwaW5nIGlzIHBlcmZvcm1lZCBpbiBhIHZlcnkgc2ltcGxlIHdheS4gQXMgYSBjb25zZXF1ZW5jZSwgZWRnZXMgdGhhdCB3cmFwIGZyb20gb25lIGNodW5rIHRvIGFub3RoZXIgbWF5IGJlIHVubmVjZXNzYXJpbHkgbG9uZy4gQWN0aXZhdGluZyB0aGlzIG9wdGlvbiB0cmllcyB0byBzaG9ydGVuIHN1Y2ggZWRnZXMuIiksITApLFBhKSxXcyksb24ocW4pKSkpLGJhKGUsY2N0LFkwLHZ3ZSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLHF4dCksZGN0KSwiRWRnZSBMYWJlbCBTaWRlIFNlbGVjdGlvbiIpLCJNZXRob2QgdG8gZGVjaWRlIG9uIGVkZ2UgbGFiZWwgc2lkZXMuIiksZ1R0KSxtcyksQTl0KSxvbihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLEh4dCksZGN0KSwiRWRnZSBDZW50ZXIgTGFiZWwgUGxhY2VtZW50IFN0cmF0ZWd5IiksIkRldGVybWluZXMgaW4gd2hpY2ggbGF5ZXIgY2VudGVyIGxhYmVscyBvZiBsb25nIGVkZ2VzIHNob3VsZCBiZSBwbGFjZWQuIiksZFR0KSxtcyksYUUpLEtpKHFuLHV0KG90KGVwLDEpLG9lLDE3NSwwLFt0cF0pKSkpKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsYUgpLFdJKSwiQ29uc2lkZXIgTW9kZWwgT3JkZXIiKSwiUHJlc2VydmVzIHRoZSBvcmRlciBvZiBub2RlcyBhbmQgZWRnZXMgaW4gdGhlIG1vZGVsIGZpbGUgaWYgdGhpcyBkb2VzIG5vdCBsZWFkIHRvIGFkZGl0aW9uYWwgZWRnZSBjcm9zc2luZ3MuIERlcGVuZGluZyBvbiB0aGUgc3RyYXRlZ3kgdGhpcyBpcyBub3QgYWx3YXlzIHBvc3NpYmxlIHNpbmNlIHRoZSBub2RlIGFuZCBlZGdlIG9yZGVyIG1pZ2h0IGJlIGNvbmZsaWN0aW5nLiIpLG9UdCksbXMpLE9fdCksb24ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxWeHQpLFdJKSwiTm8gTW9kZWwgT3JkZXIiKSwiU2V0IG9uIGEgbm9kZSB0byBub3Qgc2V0IGEgbW9kZWwgb3JkZXIgZm9yIHRoaXMgbm9kZSBldmVuIHRob3VnaCBpdCBpcyBhIHJlYWwgbm9kZS4iKSwhMSksUGEpLFdzKSxvbih1YSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLHVjdCksV0kpLCJDb25zaWRlciBNb2RlbCBPcmRlciBmb3IgQ29tcG9uZW50cyIpLCJJZiBzZXQgdG8gTk9ORSB0aGUgdXN1YWwgb3JkZXJpbmcgc3RyYXRlZ3kgKGJ5IGN1bXVsYXRpdmUgbm9kZSBwcmlvcml0eSBhbmQgc2l6ZSBvZiBub2RlcykgaXMgdXNlZC4gSU5TSURFX1BPUlRfU0lERVMgb3JkZXJzIHRoZSBjb21wb25lbnRzIHdpdGggZXh0ZXJuYWwgcG9ydHMgb25seSBpbnNpZGUgdGhlIGdyb3VwcyB3aXRoIHRoZSBzYW1lIHBvcnQgc2lkZS4gRk9SQ0VfTU9ERUxfT1JERVIgZW5mb3JjZXMgdGhlIG1vZGUgb3JkZXIgb24gY29tcG9uZW50cy4gVGhpcyBvcHRpb24gbWlnaHQgcHJvZHVjZSBiYWQgYWxpZ25tZW50cyBhbmQgc3ViIG9wdGltYWwgZHJhd2luZ3MgaW4gdGVybXMgb2YgdXNlZCBhcmVhIHNpbmNlIHRoZSBvcmRlcmluZyBzaG91bGQgYmUgcmVzcGVjdGVkLiIpLHNUdCksbXMpLF9FdCksb24ocW4pKSkpLGJhKGUsdWN0LFBDLG51bGwpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxHeHQpLFdJKSwiTG9uZyBFZGdlIE9yZGVyaW5nIFN0cmF0ZWd5IiksIkluZGljYXRlcyB3aGV0aGVyIGxvbmcgZWRnZXMgYXJlIHNvcnRlZCB1bmRlciwgb3Zlciwgb3IgZXF1YWwgdG8gbm9kZXMgdGhhdCBoYXZlIG5vIGNvbm5lY3Rpb24gdG8gYSBwcmV2aW91cyBsYXllciBpbiBhIGxlZnQtdG8tcmlnaHQgb3IgcmlnaHQtdG8tbGVmdCBsYXlvdXQuIFVuZGVyIGFuZCBvdmVyIGNoYW5nZXMgdG8gcmlnaHQgYW5kIGxlZnQgaW4gYSB2ZXJ0aWNhbCBsYXlvdXQuIiksYVR0KSxtcyksVF90KSxvbihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLGxjdCksV0kpLCJDcm9zc2luZyBDb3VudGVyIE5vZGUgT3JkZXIgSW5mbHVlbmNlIiksIkluZGljYXRlcyB3aXRoIHdoYXQgcGVyY2VudGFnZSAoMSBmb3IgMTAwJSkgdmlvbGF0aW9ucyBvZiB0aGUgbm9kZSBtb2RlbCBvcmRlciBhcmUgd2VpZ2h0ZWQgYWdhaW5zdCB0aGUgY3Jvc3NpbmdzIGUuZy4gYSB2YWx1ZSBvZiAwLjUgbWVhbnMgdHdvIG1vZGVsIG9yZGVyIHZpb2xhdGlvbnMgYXJlIGFzIGltcG9ydGFudCBhcyBvbiBlZGdlIGNyb3NzaW5nLiBUaGlzIGFsbG93cyBzb21lIGVkZ2UgY3Jvc3NpbmdzIGluIGZhdm9yIG9mIHByZXNlcnZpbmcgdGhlIG1vZGVsIG9yZGVyLiBJdCBpcyBhZHZpc2VkIHRvIHNldCB0aGlzIHZhbHVlIHRvIGEgdmVyeSBzbWFsbCBwb3NpdGl2ZSB2YWx1ZSAoZS5nLiAwLjAwMSkgdG8gaGF2ZSBtaW5pbWFsIGNyb3NzaW5nIGFuZCBhIG9wdGltYWwgbm9kZSBvcmRlci4gRGVmYXVsdHMgdG8gbm8gaW5mbHVlbmNlICgwKS4iKSwwKSwkbyksd2EpLG9uKHFuKSkpKSxiYShlLGxjdCxhSCxudWxsKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsaGN0KSxXSSksIkNyb3NzaW5nIENvdW50ZXIgUG9ydCBPcmRlciBJbmZsdWVuY2UiKSwiSW5kaWNhdGVzIHdpdGggd2hhdCBwZXJjZW50YWdlICgxIGZvciAxMDAlKSB2aW9sYXRpb25zIG9mIHRoZSBwb3J0IG1vZGVsIG9yZGVyIGFyZSB3ZWlnaHRlZCBhZ2FpbnN0IHRoZSBjcm9zc2luZ3MgZS5nLiBhIHZhbHVlIG9mIDAuNSBtZWFucyB0d28gbW9kZWwgb3JkZXIgdmlvbGF0aW9ucyBhcmUgYXMgaW1wb3J0YW50IGFzIG9uIGVkZ2UgY3Jvc3NpbmcuIFRoaXMgYWxsb3dzIHNvbWUgZWRnZSBjcm9zc2luZ3MgaW4gZmF2b3Igb2YgcHJlc2VydmluZyB0aGUgbW9kZWwgb3JkZXIuIEl0IGlzIGFkdmlzZWQgdG8gc2V0IHRoaXMgdmFsdWUgdG8gYSB2ZXJ5IHNtYWxsIHBvc2l0aXZlIHZhbHVlIChlLmcuIDAuMDAxKSB0byBoYXZlIG1pbmltYWwgY3Jvc3NpbmcgYW5kIGEgb3B0aW1hbCBwb3J0IG9yZGVyLiBEZWZhdWx0cyB0byBubyBpbmZsdWVuY2UgKDApLiIpLDApLCRvKSx3YSksb24ocW4pKSkpLGJhKGUsaGN0LGFILG51bGwpLGpoZSgobmV3IElCLGUpKX07dmFyIFQyZSxfMmUsQzJlLHJUdCxTMmUsaVR0LEEyZSxzVHQsTDJlLE0yZSxEMmUsYVR0LEkyZSxPMmUsb1R0LE4yZSxQMmUsRjJlLGNUdCxCMmUsUjJlLGoyZSx1VHQsJDJlLHoyZSxxMmUsSDJlLFYyZSxHMmUsVTJlLFcyZSxsVHQsSzJlLGhUdCxZMmUsZlR0LFgyZSxkVHQsUTJlLGdUdCxaMmUsSjJlLHR2ZSxwVHQsZXZlLGJUdCxudmUsdlR0LHJ2ZSxpdmUsc3ZlLGF2ZSxvdmUsY3ZlLHV2ZSxsdmUsaHZlLGZ2ZSx3VHQsZHZlLGd2ZSxwdmUsYnZlLHZ2ZSx3dmUsbVR0LG12ZSx5dmUseHZlLGt2ZSxFdmUsVHZlLF92ZSx5VHQsQ3ZlLHhUdCxTdmUsQXZlLEx2ZSxrVHQsTXZlLER2ZSxFVHQsSXZlLE92ZSxOdmUsUHZlLEZ2ZSxCdmUsUnZlLGp2ZSxUVHQsJHZlLHp2ZSxxdmUsX1R0LEh2ZSxDVHQsVnZlLEd2ZSxVdmUsV3ZlLEt2ZSxZdmUsWHZlLFF2ZSxadmUsSnZlLHR3ZSxld2UsbndlLHJ3ZSxpd2Usc3dlLGF3ZSxvd2UsU1R0LGN3ZSx1d2UsQVR0LGx3ZSxod2UsZndlLGR3ZSxnd2UscHdlLGJ3ZSx2d2Usd3dlLExUdCxtd2UseXdlLHh3ZSxrd2UsTVR0LEV3ZSxUd2U7TihTYywiTGF5ZXJlZE1ldGFEYXRhUHJvdmlkZXIiLDg0OCksRCg5ODYsMSxQaCxJQiksbC5RZT1mdW5jdGlvbihlKXtqaGUoZSl9O3ZhciBNZCxIbHQsVVYsa1MsV1YsRFR0LEtWLE54LFlWLElUdCxPVHQsVmx0LHBiLEdsdCxCeSxOVHQsQ08sVWx0LFBUdCxfd2UsWFYsV2x0LEVTLFJ5LEN3ZSxYbCxGVHQsQlR0LFFWLEtsdCxEZCxaVixYMCxSVHQsalR0LCRUdCxZbHQsWGx0LHpUdCxYZyxRbHQscVR0LGp5LEhUdCxWVHQsR1R0LEpWLCR5LEIyLFVUdCxXVHQsT28sS1R0LFN3ZSxkdSx0RyxZVHQsWFR0LFFUdCxabHQsWlR0LGVHLEpUdCx0X3QsbkcsT3csZV90LEpsdCxUUyxuX3QsTncsX1MsckcsUjIsdGh0LGRFLGlHLGoyLHJfdCxpX3Qsc190LGdFLGFfdCxBd2UsTHdlLE13ZSxEd2UsUHcsenksd3MsUWcsSXdlLHF5LG9fdCxwRSxjX3QsSHksT3dlLGJFLHVfdCxQeCxOd2UsUHdlLFNPLGVodCxsX3QsQU8sVGYsWjQsRngsRncsJDIsc0csVnksbmh0LHZFLHdFLEJ3LEo0LHJodCxMTyxDUyxTUyxpaHQsaF90LGZfdCxkX3QsZ190LHNodCxwX3QsYl90LHZfdCx3X3QsYWh0LGFHO04oU2MsIkxheWVyZWRPcHRpb25zIiw5ODYpLEQoOTg3LDEse30sclEpLGwuJGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1uZXcgWXp0LGV9LGwuX2U9ZnVuY3Rpb24oZSl7fSxOKFNjLCJMYXllcmVkT3B0aW9ucy9MYXllcmVkRmFjdG9yeSIsOTg3KSxEKDEzNzIsMSx7fSksbC5hPTA7dmFyIEZ3ZTtOKEFjLCJFbGtTcGFjaW5ncy9BYnN0cmFjdFNwYWNpbmdzQnVpbGRlciIsMTM3MiksRCg3NzksMTM3Mix7fSxvM3QpO3ZhciBvRyxCd2U7TihTYywiTGF5ZXJlZFNwYWNpbmdzL0xheWVyZWRTcGFjaW5nc0J1aWxkZXIiLDc3OSksRCgzMTMsMjIsezM6MSwzNToxLDIyOjEsMzEzOjEsMjQ2OjEsMjM0OjF9LEpUKSxsLktmPWZ1bmN0aW9uKCl7cmV0dXJuIHdjZSh0aGlzKX0sbC5YZj1mdW5jdGlvbigpe3JldHVybiB3Y2UodGhpcyl9O3ZhciBvaHQsbV90LHlfdCxjRyxjaHQseF90LGtfdD16cihTYywiTGF5ZXJpbmdTdHJhdGVneSIsMzEzLFVyLEpzbixVWmUpLFJ3ZTtEKDM3OCwyMix7MzoxLDM1OjEsMjI6MSwzNzg6MX0sTWV0KTt2YXIgdWh0LEVfdCx1RyxUX3Q9enIoU2MsIkxvbmdFZGdlT3JkZXJpbmdTdHJhdGVneSIsMzc4LFVyLERybixXWmUpLGp3ZTtEKDE5NywyMix7MzoxLDM1OjEsMjI6MSwxOTc6MX0sR1IpO3ZhciB0NSxlNSxsRyxsaHQsaGh0PXpyKFNjLCJOb2RlRmxleGliaWxpdHkiLDE5NyxVcixSaW4sS1plKSwkd2U7RCgzMTUsMjIsezM6MSwzNToxLDIyOjEsMzE1OjEsMjQ2OjEsMjM0OjF9LFRNKSxsLktmPWZ1bmN0aW9uKCl7cmV0dXJuIG5jZSh0aGlzKX0sbC5YZj1mdW5jdGlvbigpe3JldHVybiBuY2UodGhpcyl9O3ZhciBBUyxmaHQsZGh0LExTLF9fdCxDX3Q9enIoU2MsIk5vZGVQbGFjZW1lbnRTdHJhdGVneSIsMzE1LFVyLHhzbix0SmUpLHp3ZTtEKDI2MCwyMix7MzoxLDM1OjEsMjI6MSwyNjA6MX0sVDYpO3ZhciBTX3QsTU8sQV90LExfdCxETyxNX3QsaEcsZkcsRF90PXpyKFNjLCJOb2RlUHJvbW90aW9uU3RyYXRlZ3kiLDI2MCxVcixaYW4sWFplKSxxd2U7RCgzMzksMjIsezM6MSwzNToxLDIyOjEsMzM5OjF9LERldCk7dmFyIElfdCxiYixnaHQsT190PXpyKFNjLCJPcmRlcmluZ1N0cmF0ZWd5IiwzMzksVXIsanJuLFFaZSksSHdlO0QoNDIxLDIyLHszOjEsMzU6MSwyMjoxLDQyMToxfSxEYnQpO3ZhciBwaHQsYmh0LE5fdD16cihTYywiUG9ydFNvcnRpbmdTdHJhdGVneSIsNDIxLFVyLHFubixaWmUpLFZ3ZTtEKDQ1MiwyMix7MzoxLDM1OjEsMjI6MSw0NTI6MX0sSWV0KTt2YXIgYWwsc3UsTVMsR3dlPXpyKFNjLCJQb3J0VHlwZSIsNDUyLFVyLFJybixZWmUpLFV3ZTtEKDM3NSwyMix7MzoxLDM1OjEsMjI6MSwzNzU6MX0sT2V0KTt2YXIgUF90LHZodCxGX3QsQl90PXpyKFNjLCJTZWxmTG9vcERpc3RyaWJ1dGlvblN0cmF0ZWd5IiwzNzUsVXIsJHJuLEpaZSksV3dlO0QoMzc2LDIyLHszOjEsMzU6MSwyMjoxLDM3NjoxfSxJYnQpO3ZhciBJTyx3aHQsUl90PXpyKFNjLCJTZWxmTG9vcE9yZGVyaW5nU3RyYXRlZ3kiLDM3NixVcixCbm4sZUplKSxLd2U7RCgzMDQsMSx7MzA0OjF9LHpsZSksTihTYywiU3BhY2luZ3MiLDMwNCksRCgzMzYsMjIsezM6MSwzNToxLDIyOjEsMzM2OjF9LE5ldCk7dmFyIG1odCxqX3QsRFMsJF90PXpyKFNjLCJTcGxpbmVSb3V0aW5nTW9kZSIsMzM2LFVyLHFybixuSmUpLFl3ZTtEKDMzOCwyMix7MzoxLDM1OjEsMjI6MSwzMzg6MX0sUGV0KTt2YXIgeWh0LHpfdCxxX3QsSF90PXpyKFNjLCJWYWxpZGlmeVN0cmF0ZWd5IiwzMzgsVXIsSHJuLHJKZSksWHdlO0QoMzc3LDIyLHszOjEsMzU6MSwyMjoxLDM3NzoxfSxGZXQpO3ZhciBHeSx4aHQsbUUsVl90PXpyKFNjLCJXcmFwcGluZ1N0cmF0ZWd5IiwzNzcsVXIsenJuLGlKZSksUXdlO0QoMTM4MywxLFZjLFFKKSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzcpLFp3ZX0sbC5wZj1mdW5jdGlvbihlLG4pe095bih0aGlzLHUoZSwzNyksbil9O3ZhciBad2U7TihsSCwiRGVwdGhGaXJzdEN5Y2xlQnJlYWtlciIsMTM4MyksRCg3ODIsMSxWYyxHdnQpLGwuWWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwzNyksSndlfSxsLnBmPWZ1bmN0aW9uKGUsbil7RDVuKHRoaXMsdShlLDM3KSxuKX0sbC5aZj1mdW5jdGlvbihlKXtyZXR1cm4gdShQZShlLHp6KHRoaXMuZCxlLmMubGVuZ3RoKSksMTApfTt2YXIgSndlO04obEgsIkdyZWVkeUN5Y2xlQnJlYWtlciIsNzgyKSxEKDEzODYsNzgyLFZjLEFHdCksbC5aZj1mdW5jdGlvbihlKXt2YXIgbixyLHMsbztmb3Iobz1udWxsLG49VGkscz1uZXcgUyhlKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoUShzKSwxMCksZWEociwoYWUoKSxMYykpJiZ1KEsocixMYyksMTkpLmE8biYmKG49dShLKHIsTGMpLDE5KS5hLG89cik7cmV0dXJuIG98fHUoUGUoZSx6eih0aGlzLmQsZS5jLmxlbmd0aCkpLDEwKX0sTihsSCwiR3JlZWR5TW9kZWxPcmRlckN5Y2xlQnJlYWtlciIsMTM4NiksRCgxMzg0LDEsVmMsSEopLGwuWWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwzNyksdG1lfSxsLnBmPWZ1bmN0aW9uKGUsbil7ZTNuKHRoaXMsdShlLDM3KSxuKX07dmFyIHRtZTtOKGxILCJJbnRlcmFjdGl2ZUN5Y2xlQnJlYWtlciIsMTM4NCksRCgxMzg1LDEsVmMsVkopLGwuWWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwzNyksZW1lfSxsLnBmPWZ1bmN0aW9uKGUsbil7bjNuKHRoaXMsdShlLDM3KSxuKX0sbC5hPTAsbC5iPTA7dmFyIGVtZTtOKGxILCJNb2RlbE9yZGVyQ3ljbGVCcmVha2VyIiwxMzg1KSxEKDEzODksMSxWYyx5VnQpLGwuWWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwzNyksbm1lfSxsLnBmPWZ1bmN0aW9uKGUsbil7UDVuKHRoaXMsdShlLDM3KSxuKX07dmFyIG5tZTtOKEV5LCJDb2ZmbWFuR3JhaGFtTGF5ZXJlciIsMTM4OSksRCgxMzkwLDEscWksaVIpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdXBuKHRoaXMuYSx1KGUsMTApLHUobiwxMCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZ3QodGhpcyl9LE4oRXksIkNvZmZtYW5HcmFoYW1MYXllcmVyLzBtZXRob2RyZWYkY29tcGFyZU5vZGVzSW5Ub3BvJFR5cGUiLDEzOTApLEQoMTM5MSwxLHFpLHp0dCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBZdG4odGhpcy5hLHUoZSwxMCksdShuLDEwKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBndCh0aGlzKX0sTihFeSwiQ29mZm1hbkdyYWhhbUxheWVyZXIvbGFtYmRhJDEkVHlwZSIsMTM5MSksRCgxMzkyLDEsVmMsSUwpLGwuWWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwzNyksRWkoRWkoRWkobmV3IFpzLChZYSgpLExkKSwoY28oKSxzbHQpKSxmYixlRSksZnUsdEUpfSxsLnBmPWZ1bmN0aW9uKGUsbil7UjRuKHRoaXMsdShlLDM3KSxuKX0sTihFeSwiSW50ZXJhY3RpdmVMYXllcmVyIiwxMzkyKSxEKDU2OSwxLHs1Njk6MX0scnF0KSxsLmE9MCxsLmM9MCxOKEV5LCJJbnRlcmFjdGl2ZUxheWVyZXIvTGF5ZXJTcGFuIiw1NjkpLEQoMTM4OCwxLFZjLERCKSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzcpLHJtZX0sbC5wZj1mdW5jdGlvbihlLG4pe2d2bih0aGlzLHUoZSwzNyksbil9O3ZhciBybWU7TihFeSwiTG9uZ2VzdFBhdGhMYXllcmVyIiwxMzg4KSxEKDEzOTUsMSxWYyxXSiksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDM3KSxFaShFaShFaShuZXcgWnMsKFlhKCksTGQpLChjbygpLGhTKSksZmIsZUUpLGZ1LHRFKX0sbC5wZj1mdW5jdGlvbihlLG4pe281bih0aGlzLHUoZSwzNyksbil9LGwuYT0wLGwuYj0wLGwuZD0wO3ZhciBHX3QsVV90O04oRXksIk1pbldpZHRoTGF5ZXJlciIsMTM5NSksRCgxMzk2LDEscWksX3ApLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbmNuKHRoaXMsdShlLDEwKSx1KG4sMTApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGd0KHRoaXMpfSxOKEV5LCJNaW5XaWR0aExheWVyZXIvTWluT3V0Z29pbmdFZGdlc0NvbXBhcmF0b3IiLDEzOTYpLEQoMTM4NywxLFZjLFVKKSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzcpLGltZX0sbC5wZj1mdW5jdGlvbihlLG4pe18zbih0aGlzLHUoZSwzNyksbil9O3ZhciBpbWU7TihFeSwiTmV0d29ya1NpbXBsZXhMYXllcmVyIiwxMzg3KSxEKDEzOTMsMSxWYyx6V3QpLGwuWWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwzNyksRWkoRWkoRWkobmV3IFpzLChZYSgpLExkKSwoY28oKSxoUykpLGZiLGVFKSxmdSx0RSl9LGwucGY9ZnVuY3Rpb24oZSxuKXtmNG4odGhpcyx1KGUsMzcpLG4pfSxsLmQ9MCxsLmY9MCxsLmc9MCxsLmk9MCxsLnM9MCxsLnQ9MCxsLnU9MCxOKEV5LCJTdHJldGNoV2lkdGhMYXllcmVyIiwxMzkzKSxEKDEzOTQsMSxxaSxpUSksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBPc24odShlLDEwKSx1KG4sMTApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGd0KHRoaXMpfSxOKEV5LCJTdHJldGNoV2lkdGhMYXllcmVyLzEiLDEzOTQpLEQoNDAyLDEsSWt0KSxsLk5mPWZ1bmN0aW9uKGUsbixyLHMsbyxoKXt9LGwuX2Y9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBCdWUodGhpcyxlLG4scil9LGwuTWY9ZnVuY3Rpb24oKXt0aGlzLmc9TnQocjMsVDFlLDI1LHRoaXMuZCwxNSwxKSx0aGlzLmY9TnQocjMsVDFlLDI1LHRoaXMuZCwxNSwxKX0sbC5PZj1mdW5jdGlvbihlLG4pe3RoaXMuZVtlXT1OdChTcixKciwyNSxuW2VdLmxlbmd0aCwxNSwxKX0sbC5QZj1mdW5jdGlvbihlLG4scil7dmFyIHM7cz1yW2VdW25dLHMucD1uLHRoaXMuZVtlXVtuXT1ufSxsLlFmPWZ1bmN0aW9uKGUsbixyLHMpe3UoUGUoc1tlXVtuXS5qLHIpLDExKS5wPXRoaXMuZCsrfSxsLmI9MCxsLmM9MCxsLmQ9MCxOKFd1LCJBYnN0cmFjdEJhcnljZW50ZXJQb3J0RGlzdHJpYnV0b3IiLDQwMiksRCgxNjMzLDEscWksYU0pLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gQ2huKHRoaXMuYSx1KGUsMTEpLHUobiwxMSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZ3QodGhpcyl9LE4oV3UsIkFic3RyYWN0QmFyeWNlbnRlclBvcnREaXN0cmlidXRvci9sYW1iZGEkMCRUeXBlIiwxNjMzKSxEKDgxNywxLEhJLFd3dCksbC5OZj1mdW5jdGlvbihlLG4scixzLG8saCl7fSxsLlBmPWZ1bmN0aW9uKGUsbixyKXt9LGwuUWY9ZnVuY3Rpb24oZSxuLHIscyl7fSxsLkxmPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuTWY9ZnVuY3Rpb24oKXt0aGlzLmM9dGhpcy5lLmEsdGhpcy5nPXRoaXMuZi5nfSxsLk9mPWZ1bmN0aW9uKGUsbil7bltlXVswXS5jLnA9ZX0sbC5SZj1mdW5jdGlvbigpe3JldHVybiExfSxsLmFnPWZ1bmN0aW9uKGUsbixyLHMpe3I/VnNlKHRoaXMsZSk6KEtzZSh0aGlzLGUscyksZWhlKHRoaXMsZSxuKSksZS5jLmxlbmd0aD4xJiYoQmUoRmUoSygkYSgoU24oMCxlLmMubGVuZ3RoKSx1KGUuY1swXSwxMCkpKSwoeGUoKSxCeSkpKSk/ZmNlKGUsdGhpcy5kLHUodGhpcyw2NjApKToocG4oKSxhYShlLHRoaXMuZCkpLEluZSh0aGlzLmUsZSkpfSxsLlNmPWZ1bmN0aW9uKGUsbixyLHMpe3ZhciBvLGgsZCx3LGssXyxNO2ZvcihuIT1yWXQocixlLmxlbmd0aCkmJihoPWVbbi0ocj8xOi0xKV0sYm10KHRoaXMuZixoLHI/KGhvKCksc3UpOihobygpLGFsKSkpLG89ZVtuXVswXSxNPSFzfHxvLms9PShHbigpLElzKSxfPUwxKGVbbl0pLHRoaXMuYWcoXyxNLCExLHIpLGQ9MCxrPW5ldyBTKF8pO2suYTxrLmMuYy5sZW5ndGg7KXc9dShRKGspLDEwKSxlW25dW2QrK109dztyZXR1cm4hMX0sbC5UZj1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoLGQ7Zm9yKGQ9cll0KG4sZS5sZW5ndGgpLGg9TDEoZVtkXSksdGhpcy5hZyhoLCExLCEwLG4pLHI9MCxvPW5ldyBTKGgpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShRKG8pLDEwKSxlW2RdW3IrK109cztyZXR1cm4hMX0sTihXdSwiQmFyeWNlbnRlckhldXJpc3RpYyIsODE3KSxEKDY1OCwxLHs2NTg6MX0sR2spLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iQmFyeWNlbnRlclN0YXRlIFtub2RlPSIrdGhpcy5jKyIsIHN1bW1lZFdlaWdodD0iK3RoaXMuZCsiLCBkZWdyZWU9Iit0aGlzLmIrIiwgYmFyeWNlbnRlcj0iK3RoaXMuYSsiLCB2aXNpdGVkPSIrdGhpcy5lKyJdIn0sbC5iPTAsbC5kPTAsbC5lPSExO3ZhciBzbWU9TihXdSwiQmFyeWNlbnRlckhldXJpc3RpYy9CYXJ5Y2VudGVyU3RhdGUiLDY1OCk7RCgxODAyLDEscWksc1IpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZmRuKHRoaXMuYSx1KGUsMTApLHUobiwxMCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZ3QodGhpcyl9LE4oV3UsIkJhcnljZW50ZXJIZXVyaXN0aWMvbGFtYmRhJDAkVHlwZSIsMTgwMiksRCg4MTYsMSxISSx3NHQpLGwuTWY9ZnVuY3Rpb24oKXt9LGwuTmY9ZnVuY3Rpb24oZSxuLHIscyxvLGgpe30sbC5RZj1mdW5jdGlvbihlLG4scixzKXt9LGwuT2Y9ZnVuY3Rpb24oZSxuKXt0aGlzLmFbZV09TnQoc21lLHszOjEsNDoxLDU6MSwyMDE4OjF9LDY1OCxuW2VdLmxlbmd0aCwwLDEpLHRoaXMuYltlXT1OdChhbWUsezM6MSw0OjEsNToxLDIwMTk6MX0sMjMzLG5bZV0ubGVuZ3RoLDAsMSl9LGwuUGY9ZnVuY3Rpb24oZSxuLHIpe1BpZSh0aGlzLHJbZV1bbl0sITApfSxsLmM9ITEsTihXdSwiRm9yc3RlckNvbnN0cmFpbnRSZXNvbHZlciIsODE2KSxEKDIzMywxLHsyMzM6MX0sWlh0LCRsZSksbC5JYj1mdW5jdGlvbigpe3ZhciBlLG47Zm9yKG49bmV3IEFwLG4uYSs9IlsiLGU9MDtlPHRoaXMuZC5sZW5ndGg7ZSsrKVlyKG4sS2llKHRoaXMuZFtlXSkpLFQxKHRoaXMuZyx0aGlzLmRbMF0pLmEhPW51bGwmJllyKFlyKChuLmErPSI8IixuKSxGWWUoVDEodGhpcy5nLHRoaXMuZFswXSkuYSkpLCI+IiksZTx0aGlzLmQubGVuZ3RoLTEmJihuLmErPVhhKTtyZXR1cm4obi5hKz0iXSIsbikuYX0sbC5hPTAsbC5jPTAsbC5mPTA7dmFyIGFtZT1OKFd1LCJGb3JzdGVyQ29uc3RyYWludFJlc29sdmVyL0NvbnN0cmFpbnRHcm91cCIsMjMzKTtEKDE3OTcsMSxLbixxdHQpLGwudGQ9ZnVuY3Rpb24oZSl7UGllKHRoaXMuYSx1KGUsMTApLCExKX0sTihXdSwiRm9yc3RlckNvbnN0cmFpbnRSZXNvbHZlci9sYW1iZGEkMCRUeXBlIiwxNzk3KSxEKDIxNCwxLHsyMTQ6MSwyMjU6MX0sVWxlKSxsLk5mPWZ1bmN0aW9uKGUsbixyLHMsbyxoKXt9LGwuT2Y9ZnVuY3Rpb24oZSxuKXt9LGwuTWY9ZnVuY3Rpb24oKXt0aGlzLnI9TnQoU3IsSnIsMjUsdGhpcy5uLDE1LDEpfSxsLlBmPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO289cltlXVtuXSxzPW8uZSxzJiZ1ZSh0aGlzLmIscyl9LGwuUWY9ZnVuY3Rpb24oZSxuLHIscyl7Kyt0aGlzLm59LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gbmhlKHRoaXMuZSxuZXcgUXMpfSxsLmc9ITEsbC5pPSExLGwubj0wLGwucz0hMSxOKFd1LCJHcmFwaEluZm9Ib2xkZXIiLDIxNCksRCgxODMyLDEsSEksblEpLGwuTmY9ZnVuY3Rpb24oZSxuLHIscyxvLGgpe30sbC5PZj1mdW5jdGlvbihlLG4pe30sbC5RZj1mdW5jdGlvbihlLG4scixzKXt9LGwuX2Y9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiByJiZuPjA/YnJ0KHRoaXMuYSxlW24tMV0sZVtuXSk6IXImJm48ZS5sZW5ndGgtMT9icnQodGhpcy5hLGVbbl0sZVtuKzFdKTpsaXQodGhpcy5hLGVbbl0scj8oYmUoKSxCbik6KGJlKCksSG4pKSx6Ym4odGhpcyxlLG4scil9LGwuTWY9ZnVuY3Rpb24oKXt0aGlzLmQ9TnQoU3IsSnIsMjUsdGhpcy5jLDE1LDEpLHRoaXMuYT1uZXcgSE0odGhpcy5kKX0sbC5QZj1mdW5jdGlvbihlLG4scil7dmFyIHM7cz1yW2VdW25dLHRoaXMuYys9cy5qLmMubGVuZ3RofSxsLmM9MCxOKFd1LCJHcmVlZHlQb3J0RGlzdHJpYnV0b3IiLDE4MzIpLEQoMTQwMSwxLFZjLE9CKSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB3dW4odShlLDM3KSl9LGwucGY9ZnVuY3Rpb24oZSxuKXt6M24odShlLDM3KSxuKX07dmFyIG9tZTtOKFd1LCJJbnRlcmFjdGl2ZUNyb3NzaW5nTWluaW1pemVyIiwxNDAxKSxEKDE0MDIsMSxxaSxjJHQpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gWTFuKHRoaXMsdShlLDEwKSx1KG4sMTApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGd0KHRoaXMpfSxOKFd1LCJJbnRlcmFjdGl2ZUNyb3NzaW5nTWluaW1pemVyLzEiLDE0MDIpLEQoNTA3LDEsezUwNzoxLDEyMzoxLDUxOjF9LHJldCksbC5ZZj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gdShlLDM3KSxuPWlqKGNtZSksRWkobiwoWWEoKSxmdSksKGNvKCkseFYpKSxufSxsLnBmPWZ1bmN0aW9uKGUsbil7dG1uKHRoaXMsdShlLDM3KSxuKX0sbC5lPTA7dmFyIGNtZTtOKFd1LCJMYXllclN3ZWVwQ3Jvc3NpbmdNaW5pbWl6ZXIiLDUwNyksRCgxMzk4LDEsS24sdSR0KSxsLnRkPWZ1bmN0aW9uKGUpeyRtbih0aGlzLmEsdShlLDIxNCkpfSxOKFd1LCJMYXllclN3ZWVwQ3Jvc3NpbmdNaW5pbWl6ZXIvMG1ldGhvZHJlZiRjb21wYXJlRGlmZmVyZW50UmFuZG9taXplZExheW91dHMkVHlwZSIsMTM5OCksRCgxMzk5LDEsS24sbCR0KSxsLnRkPWZ1bmN0aW9uKGUpe2h1bih0aGlzLmEsdShlLDIxNCkpfSxOKFd1LCJMYXllclN3ZWVwQ3Jvc3NpbmdNaW5pbWl6ZXIvMW1ldGhvZHJlZiRtaW5pbWl6ZUNyb3NzaW5nc05vQ291bnRlciRUeXBlIiwxMzk5KSxEKDE0MDAsMSxLbixoJHQpLGwudGQ9ZnVuY3Rpb24oZSl7bmxlKHRoaXMuYSx1KGUsMjE0KSl9LE4oV3UsIkxheWVyU3dlZXBDcm9zc2luZ01pbmltaXplci8ybWV0aG9kcmVmJG1pbmltaXplQ3Jvc3NpbmdzV2l0aENvdW50ZXIkVHlwZSIsMTQwMCksRCg0NTQsMjIsezM6MSwzNToxLDIyOjEsNDU0OjF9LEJldCk7dmFyIE9PLElTLGRHLHVtZT16cihXdSwiTGF5ZXJTd2VlcENyb3NzaW5nTWluaW1pemVyL0Nyb3NzTWluVHlwZSIsNDU0LFVyLFZybixzSmUpLGxtZTtEKDEzOTcsMSxnaSx4ayksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gb3l0KCksdShlLDI5KS5hLmMubGVuZ3RoPT0wfSxOKFd1LCJMYXllclN3ZWVwQ3Jvc3NpbmdNaW5pbWl6ZXIvbGFtYmRhJDAkVHlwZSIsMTM5NyksRCgxNzk5LDEsSEkscFF0KSxsLk1mPWZ1bmN0aW9uKCl7fSxsLk5mPWZ1bmN0aW9uKGUsbixyLHMsbyxoKXt9LGwuUWY9ZnVuY3Rpb24oZSxuLHIscyl7fSxsLk9mPWZ1bmN0aW9uKGUsbil7bltlXVswXS5jLnA9ZSx0aGlzLmJbZV09TnQoaG1lLHszOjEsNDoxLDU6MSwxOTQ0OjF9LDY1OSxuW2VdLmxlbmd0aCwwLDEpfSxsLlBmPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzPXJbZV1bbl0scy5wPW4sbHModGhpcy5iW2VdLG4sbmV3IHNRKX0sTihXdSwiTGF5ZXJTd2VlcFR5cGVEZWNpZGVyIiwxNzk5KSxEKDY1OSwxLHs2NTk6MX0sc1EpLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iTm9kZUluZm8gW2Nvbm5lY3RlZEVkZ2VzPSIrdGhpcy5hKyIsIGhpZXJhcmNoaWNhbEluZmx1ZW5jZT0iK3RoaXMuYisiLCByYW5kb21JbmZsdWVuY2U9Iit0aGlzLmMrIl0ifSxsLmE9MCxsLmI9MCxsLmM9MDt2YXIgaG1lPU4oV3UsIkxheWVyU3dlZXBUeXBlRGVjaWRlci9Ob2RlSW5mbyIsNjU5KTtEKDE4MDAsMSxtZCxhUSksbC5MYj1mdW5jdGlvbihlKXtyZXR1cm4gcF8obmV3IE0xKHUoZSwxMSkuYikpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gcF8obmV3IE0xKHUoZSwxMSkuYikpfSxOKFd1LCJMYXllclN3ZWVwVHlwZURlY2lkZXIvbGFtYmRhJDAkVHlwZSIsMTgwMCksRCgxODAxLDEsbWQsb1EpLGwuTGI9ZnVuY3Rpb24oZSl7cmV0dXJuIHBfKG5ldyBNMSh1KGUsMTEpLmIpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHBfKG5ldyBNMSh1KGUsMTEpLmIpKX0sTihXdSwiTGF5ZXJTd2VlcFR5cGVEZWNpZGVyL2xhbWJkYSQxJFR5cGUiLDE4MDEpLEQoMTgzMyw0MDIsSWt0LG5IdCksbC4kZj1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoLGQsdyxrLF8sTSxCO3N3aXRjaChfPXRoaXMuZyxyLmcpe2Nhc2UgMTp7Zm9yKHM9MCxvPTAsaz1uZXcgUyhlLmopO2suYTxrLmMuYy5sZW5ndGg7KWQ9dShRKGspLDExKSxkLmUuYy5sZW5ndGghPTAmJigrK3MsZC5qPT0oYmUoKSxPbikmJisrbyk7Zm9yKGg9bitvLEI9bitzLHc9aXcoZSwoaG8oKSxhbCkpLktjKCk7dy5PYigpOylkPXUody5QYigpLDExKSxkLmo9PShiZSgpLE9uKT8oX1tkLnBdPWgsLS1oKTooX1tkLnBdPUIsLS1CKTtyZXR1cm4gc31jYXNlIDI6e2ZvcihNPTAsdz1pdyhlLChobygpLHN1KSkuS2MoKTt3Lk9iKCk7KWQ9dSh3LlBiKCksMTEpLCsrTSxfW2QucF09bitNO3JldHVybiBNfWRlZmF1bHQ6dGhyb3cgbnQobmV3IHVNKX19LE4oV3UsIkxheWVyVG90YWxQb3J0RGlzdHJpYnV0b3IiLDE4MzMpLEQoNjYwLDgxNyx7NjYwOjEsMjI1OjF9LFFlZSksbC5hZz1mdW5jdGlvbihlLG4scixzKXtyP1ZzZSh0aGlzLGUpOihLc2UodGhpcyxlLHMpLGVoZSh0aGlzLGUsbikpLGUuYy5sZW5ndGg+MSYmKEJlKEZlKEsoJGEoKFNuKDAsZS5jLmxlbmd0aCksdShlLmNbMF0sMTApKSksKHhlKCksQnkpKSkpP2ZjZShlLHRoaXMuZCx0aGlzKToocG4oKSxhYShlLHRoaXMuZCkpLEJlKEZlKEsoJGEoKFNuKDAsZS5jLmxlbmd0aCksdShlLmNbMF0sMTApKSksQnkpKSl8fEluZSh0aGlzLmUsZSkpfSxOKFd1LCJNb2RlbE9yZGVyQmFyeWNlbnRlckhldXJpc3RpYyIsNjYwKSxEKDE4MDMsMSxxaSxmJHQpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gVzBuKHRoaXMuYSx1KGUsMTApLHUobiwxMCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZ3QodGhpcyl9LE4oV3UsIk1vZGVsT3JkZXJCYXJ5Y2VudGVySGV1cmlzdGljL2xhbWJkYSQwJFR5cGUiLDE4MDMpLEQoMTQwMywxLFZjLGV0dCksbC5ZZj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gdShlLDM3KSxuPWlqKGZtZSksRWkobiwoWWEoKSxmdSksKGNvKCkseFYpKSxufSxsLnBmPWZ1bmN0aW9uKGUsbil7SW5uKCh1KGUsMzcpLG4pKX07dmFyIGZtZTtOKFd1LCJOb0Nyb3NzaW5nTWluaW1pemVyIiwxNDAzKSxEKDc5Niw0MDIsSWt0LGVidCksbC4kZj1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoLGQsdyxrLF8sTSxCLHEsRztzd2l0Y2goQj10aGlzLmcsci5nKXtjYXNlIDE6e2ZvcihvPTAsaD0wLE09bmV3IFMoZS5qKTtNLmE8TS5jLmMubGVuZ3RoOylrPXUoUShNKSwxMSksay5lLmMubGVuZ3RoIT0wJiYoKytvLGsuaj09KGJlKCksT24pJiYrK2gpO2ZvcihzPTEvKG8rMSksZD1uK2gqcyxHPW4rMS1zLF89aXcoZSwoaG8oKSxhbCkpLktjKCk7Xy5PYigpOylrPXUoXy5QYigpLDExKSxrLmo9PShiZSgpLE9uKT8oQltrLnBdPWQsZC09cyk6KEJbay5wXT1HLEctPXMpO2JyZWFrfWNhc2UgMjp7Zm9yKHc9MCxNPW5ldyBTKGUuaik7TS5hPE0uYy5jLmxlbmd0aDspaz11KFEoTSksMTEpLGsuZy5jLmxlbmd0aD09MHx8Kyt3O2ZvcihzPTEvKHcrMSkscT1uK3MsXz1pdyhlLChobygpLHN1KSkuS2MoKTtfLk9iKCk7KWs9dShfLlBiKCksMTEpLEJbay5wXT1xLHErPXM7YnJlYWt9ZGVmYXVsdDp0aHJvdyBudChuZXcgUG4oIlBvcnQgdHlwZSBpcyB1bmRlZmluZWQiKSl9cmV0dXJuIDF9LE4oV3UsIk5vZGVSZWxhdGl2ZVBvcnREaXN0cmlidXRvciIsNzk2KSxEKDgwNywxLHt9LExZdCxFYWUpLE4oV3UsIlN3ZWVwQ29weSIsODA3KSxEKDE3OTgsMSxISSxnaWUpLGwuT2Y9ZnVuY3Rpb24oZSxuKXt9LGwuTWY9ZnVuY3Rpb24oKXt2YXIgZTtlPU50KFNyLEpyLDI1LHRoaXMuZiwxNSwxKSx0aGlzLmQ9bmV3IHkkdChlKSx0aGlzLmE9bmV3IEhNKGUpfSxsLk5mPWZ1bmN0aW9uKGUsbixyLHMsbyxoKXt2YXIgZDtkPXUoUGUoaFtlXVtuXS5qLHIpLDExKSxvLmM9PWQmJm8uYy5pLmM9PW8uZC5pLmMmJisrdGhpcy5lW2VdfSxsLlBmPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzPXJbZV1bbl0sdGhpcy5jW2VdPXRoaXMuY1tlXXxzLms9PShHbigpLFVjKX0sbC5RZj1mdW5jdGlvbihlLG4scixzKXt2YXIgbztvPXUoUGUoc1tlXVtuXS5qLHIpLDExKSxvLnA9dGhpcy5mKyssby5nLmMubGVuZ3RoK28uZS5jLmxlbmd0aD4xJiYoby5qPT0oYmUoKSxIbik/dGhpcy5iW2VdPSEwOm8uaj09Qm4mJmU+MCYmKHRoaXMuYltlLTFdPSEwKSl9LGwuZj0wLE4oczAsIkFsbENyb3NzaW5nc0NvdW50ZXIiLDE3OTgpLEQoNTg3LDEse30scnopLGwuYj0wLGwuZD0wLE4oczAsIkJpbmFyeUluZGV4ZWRUcmVlIiw1ODcpLEQoNTI0LDEse30sSE0pO3ZhciBXX3QsZ0c7TihzMCwiQ3Jvc3NpbmdzQ291bnRlciIsNTI0KSxEKDE5MDYsMSxxaSxkJHQpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gUHRuKHRoaXMuYSx1KGUsMTEpLHUobiwxMSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZ3QodGhpcyl9LE4oczAsIkNyb3NzaW5nc0NvdW50ZXIvbGFtYmRhJDAkVHlwZSIsMTkwNiksRCgxOTA3LDEscWksZyR0KSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEZ0bih0aGlzLmEsdShlLDExKSx1KG4sMTEpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGd0KHRoaXMpfSxOKHMwLCJDcm9zc2luZ3NDb3VudGVyL2xhbWJkYSQxJFR5cGUiLDE5MDcpLEQoMTkwOCwxLHFpLHAkdCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBCdG4odGhpcy5hLHUoZSwxMSksdShuLDExKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBndCh0aGlzKX0sTihzMCwiQ3Jvc3NpbmdzQ291bnRlci9sYW1iZGEkMiRUeXBlIiwxOTA4KSxEKDE5MDksMSxxaSxiJHQpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gUnRuKHRoaXMuYSx1KGUsMTEpLHUobiwxMSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZ3QodGhpcyl9LE4oczAsIkNyb3NzaW5nc0NvdW50ZXIvbGFtYmRhJDMkVHlwZSIsMTkwOSksRCgxOTEwLDEsS24sdiR0KSxsLnRkPWZ1bmN0aW9uKGUpe21hbih0aGlzLmEsdShlLDExKSl9LE4oczAsIkNyb3NzaW5nc0NvdW50ZXIvbGFtYmRhJDQkVHlwZSIsMTkxMCksRCgxOTExLDEsZ2ksdyR0KSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBPWWUodGhpcy5hLHUoZSwxMSkpfSxOKHMwLCJDcm9zc2luZ3NDb3VudGVyL2xhbWJkYSQ1JFR5cGUiLDE5MTEpLEQoMTkxMiwxLEtuLG0kdCksbC50ZD1mdW5jdGlvbihlKXtUR3QodGhpcyxlKX0sTihzMCwiQ3Jvc3NpbmdzQ291bnRlci9sYW1iZGEkNiRUeXBlIiwxOTEyKSxEKDE5MTMsMSxLbixYVnQpLGwudGQ9ZnVuY3Rpb24oZSl7dmFyIG47ZjgoKSxWcCh0aGlzLmIsKG49dGhpcy5hLHUoZSwxMSksbikpfSxOKHMwLCJDcm9zc2luZ3NDb3VudGVyL2xhbWJkYSQ3JFR5cGUiLDE5MTMpLEQoODI2LDEsbWQsQkYpLGwuTGI9ZnVuY3Rpb24oZSl7cmV0dXJuIGY4KCksZWEodShlLDExKSwoYWUoKSxzbCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gZjgoKSxlYSh1KGUsMTEpLChhZSgpLHNsKSl9LE4oczAsIkNyb3NzaW5nc0NvdW50ZXIvbGFtYmRhJDgkVHlwZSIsODI2KSxEKDE5MDUsMSx7fSx5JHQpLE4oczAsIkh5cGVyZWRnZUNyb3NzaW5nc0NvdW50ZXIiLDE5MDUpLEQoNDY3LDEsezM1OjEsNDY3OjF9LCRXdCksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gYmhuKHRoaXMsdShlLDQ2NykpfSxsLmI9MCxsLmM9MCxsLmU9MCxsLmY9MDt2YXIgZjZuPU4oczAsIkh5cGVyZWRnZUNyb3NzaW5nc0NvdW50ZXIvSHlwZXJlZGdlIiw0NjcpO0QoMzYyLDEsezM1OjEsMzYyOjF9LGUkKSxsLndkPWZ1bmN0aW9uKGUpe3JldHVybiBnYm4odGhpcyx1KGUsMzYyKSl9LGwuYj0wLGwuYz0wO3ZhciBkbWU9TihzMCwiSHlwZXJlZGdlQ3Jvc3NpbmdzQ291bnRlci9IeXBlcmVkZ2VDb3JuZXIiLDM2Mik7RCg1MjMsMjIsezM6MSwzNToxLDIyOjEsNTIzOjF9LE9idCk7dmFyIE9TLE5TLGdtZT16cihzMCwiSHlwZXJlZGdlQ3Jvc3NpbmdzQ291bnRlci9IeXBlcmVkZ2VDb3JuZXIvVHlwZSIsNTIzLFVyLEhubixhSmUpLHBtZTtEKDE0MDUsMSxWYyxYSiksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShLKHUoZSwzNyksKGFlKCksV2MpKSwyMSkuSGMoKGdvKCkseWgpKT9ibWU6bnVsbH0sbC5wZj1mdW5jdGlvbihlLG4pe1Axbih0aGlzLHUoZSwzNyksbil9O3ZhciBibWU7TihibywiSW50ZXJhY3RpdmVOb2RlUGxhY2VyIiwxNDA1KSxEKDE0MDYsMSxWYyxZSiksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShLKHUoZSwzNyksKGFlKCksV2MpKSwyMSkuSGMoKGdvKCkseWgpKT92bWU6bnVsbH0sbC5wZj1mdW5jdGlvbihlLG4pe21mbih0aGlzLHUoZSwzNyksbil9O3ZhciB2bWUscEcsYkc7TihibywiTGluZWFyU2VnbWVudHNOb2RlUGxhY2VyIiwxNDA2KSxEKDI1NywxLHszNToxLDI1NzoxfSxEcHQpLGwud2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIEdLZSh0aGlzLHUoZSwyNTcpKX0sbC5GYj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gX3QoZSwyNTcpPyhuPXUoZSwyNTcpLHRoaXMuYj09bi5iKTohMX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4ibHMiK0pwKHRoaXMuZSl9LGwuYT0wLGwuYj0wLGwuYz0tMSxsLmQ9LTEsbC5nPTA7dmFyIHdtZT1OKGJvLCJMaW5lYXJTZWdtZW50c05vZGVQbGFjZXIvTGluZWFyU2VnbWVudCIsMjU3KTtEKDE0MDgsMSxWYyxkWXQpLGwuWWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoSyh1KGUsMzcpLChhZSgpLFdjKSksMjEpLkhjKChnbygpLHloKSk/bW1lOm51bGx9LGwucGY9ZnVuY3Rpb24oZSxuKXtFNW4odGhpcyx1KGUsMzcpLG4pfSxsLmI9MCxsLmc9MDt2YXIgbW1lO04oYm8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyIiwxNDA4KSxEKDE0MjcsMSxxaSxjUSksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBtdSh1KGUsMTkpLmEsdShuLDE5KS5hKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGd0KHRoaXMpfSxOKGJvLCJOZXR3b3JrU2ltcGxleFBsYWNlci8wbWV0aG9kcmVmJGNvbXBhcmUkVHlwZSIsMTQyNyksRCgxNDI5LDEscWksdVEpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbXUodShlLDE5KS5hLHUobiwxOSkuYSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBndCh0aGlzKX0sTihibywiTmV0d29ya1NpbXBsZXhQbGFjZXIvMW1ldGhvZHJlZiRjb21wYXJlJFR5cGUiLDE0MjkpLEQoNjQ5LDEsezY0OToxfSxRVnQpO3ZhciBkNm49TihibywiTmV0d29ya1NpbXBsZXhQbGFjZXIvRWRnZVJlcCIsNjQ5KTtEKDQwMSwxLHs0MDE6MX0sRXd0KSxsLmI9ITE7dmFyIGc2bj1OKGJvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9Ob2RlUmVwIiw0MDEpO0QoNTA4LDEyLHszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDEyOjEsMTQ6MSwxNToxLDU0OjEsNTA4OjF9LGFxdCksTihibywiTmV0d29ya1NpbXBsZXhQbGFjZXIvUGF0aCIsNTA4KSxEKDE0MDksMSx7fSxsUSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDE3KS5kLmkua30sTihibywiTmV0d29ya1NpbXBsZXhQbGFjZXIvUGF0aC9sYW1iZGEkMCRUeXBlIiwxNDA5KSxEKDE0MTAsMSxnaSxoUSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDI2Nyk9PShHbigpLGNhKX0sTihibywiTmV0d29ya1NpbXBsZXhQbGFjZXIvUGF0aC9sYW1iZGEkMSRUeXBlIiwxNDEwKSxEKDE0MTEsMSx7fSxmUSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDE3KS5kLml9LE4oYm8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL1BhdGgvbGFtYmRhJDIkVHlwZSIsMTQxMSksRCgxNDEyLDEsZ2kseCR0KSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBUV3QodWllKHUoZSwxMCkpKX0sTihibywiTmV0d29ya1NpbXBsZXhQbGFjZXIvUGF0aC9sYW1iZGEkMyRUeXBlIiwxNDEyKSxEKDE0MTMsMSxnaSxkUSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gVHRuKHUoZSwxMSkpfSxOKGJvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMCRUeXBlIiwxNDEzKSxEKDE0MTQsMSxLbixaVnQpLGwudGQ9ZnVuY3Rpb24oZSl7eFhlKHRoaXMuYSx0aGlzLmIsdShlLDExKSl9LE4oYm8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQxJFR5cGUiLDE0MTQpLEQoMTQyMywxLEtuLGskdCksbC50ZD1mdW5jdGlvbihlKXt6Z24odGhpcy5hLHUoZSwxNykpfSxOKGJvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTAkVHlwZSIsMTQyMyksRCgxNDI0LDEse30sZ1EpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIFJsKCksbmV3IGtuKG51bGwsbmV3IFRuKHUoZSwyOSkuYSwxNikpfSxOKGJvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTEkVHlwZSIsMTQyNCksRCgxNDI1LDEsS24sRSR0KSxsLnRkPWZ1bmN0aW9uKGUpe0J2bih0aGlzLmEsdShlLDEwKSl9LE4oYm8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQxMiRUeXBlIiwxNDI1KSxEKDE0MjYsMSx7fSxwUSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gUmwoKSxkZSh1KGUsMTIxKS5lKX0sTihibywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDEzJFR5cGUiLDE0MjYpLEQoMTQyOCwxLHt9LGJRKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBSbCgpLGRlKHUoZSwxMjEpLmUpfSxOKGJvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTUkVHlwZSIsMTQyOCksRCgxNDMwLDEsZ2ksdlEpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIFJsKCksdShlLDQwMSkuYy5rPT0oR24oKSxxcyl9LE4oYm8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQxNyRUeXBlIiwxNDMwKSxEKDE0MzEsMSxnaSx3USksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gUmwoKSx1KGUsNDAxKS5jLmouYy5sZW5ndGg+MX0sTihibywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDE4JFR5cGUiLDE0MzEpLEQoMTQzMiwxLEtuLHlYdCksbC50ZD1mdW5jdGlvbihlKXtTbG4odGhpcy5jLHRoaXMuYix0aGlzLmQsdGhpcy5hLHUoZSw0MDEpKX0sbC5jPTAsbC5kPTAsTihibywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDE5JFR5cGUiLDE0MzIpLEQoMTQxNSwxLHt9LG1RKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBSbCgpLG5ldyBrbihudWxsLG5ldyBUbih1KGUsMjkpLmEsMTYpKX0sTihibywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDIkVHlwZSIsMTQxNSksRCgxNDMzLDEsS24sVCR0KSxsLnRkPWZ1bmN0aW9uKGUpe21YZSh0aGlzLmEsdShlLDExKSl9LGwuYT0wLE4oYm8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyMCRUeXBlIiwxNDMzKSxEKDE0MzQsMSx7fSxLNSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gUmwoKSxuZXcga24obnVsbCxuZXcgVG4odShlLDI5KS5hLDE2KSl9LE4oYm8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyMSRUeXBlIiwxNDM0KSxEKDE0MzUsMSxLbixfJHQpLGwudGQ9ZnVuY3Rpb24oZSl7TlhlKHRoaXMuYSx1KGUsMTApKX0sTihibywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDIyJFR5cGUiLDE0MzUpLEQoMTQzNiwxLGdpLFJGKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBUV3QoZSl9LE4oYm8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyMyRUeXBlIiwxNDM2KSxEKDE0MzcsMSx7fSx5USksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gUmwoKSxuZXcga24obnVsbCxuZXcgVG4odShlLDI5KS5hLDE2KSl9LE4oYm8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyNCRUeXBlIiwxNDM3KSxEKDE0MzgsMSxnaSxDJHQpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuICRZZSh0aGlzLmEsdShlLDEwKSl9LE4oYm8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyNSRUeXBlIiwxNDM4KSxEKDE0MzksMSxLbixKVnQpLGwudGQ9ZnVuY3Rpb24oZSl7dWduKHRoaXMuYSx0aGlzLmIsdShlLDEwKSl9LE4oYm8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyNiRUeXBlIiwxNDM5KSxEKDE0NDAsMSxnaSx4USksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gUmwoKSwhV2EodShlLDE3KSl9LE4oYm8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyNyRUeXBlIiwxNDQwKSxEKDE0NDEsMSxnaSxrUSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gUmwoKSwhV2EodShlLDE3KSl9LE4oYm8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyOCRUeXBlIiwxNDQxKSxEKDE0NDIsMSx7fSxTJHQpLGwuQ2U9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gRFhlKHRoaXMuYSx1KGUsMjkpLHUobiwyOSkpfSxOKGJvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMjkkVHlwZSIsMTQ0MiksRCgxNDE2LDEse30sakYpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIFJsKCksbmV3IGtuKG51bGwsbmV3IEZ2KG5ldyBhcihscigkcyh1KGUsMTApKS5hLktjKCksbmV3IEgpKSkpfSxOKGJvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMyRUeXBlIiwxNDE2KSxEKDE0MTcsMSxnaSxFUSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gUmwoKSx3aW4odShlLDE3KSl9LE4oYm8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQ0JFR5cGUiLDE0MTcpLEQoMTQxOCwxLEtuLEEkdCksbC50ZD1mdW5jdGlvbihlKXtGbW4odGhpcy5hLHUoZSwxNykpfSxOKGJvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkNSRUeXBlIiwxNDE4KSxEKDE0MTksMSx7fSxWOSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gUmwoKSxuZXcga24obnVsbCxuZXcgVG4odShlLDI5KS5hLDE2KSl9LE4oYm8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQ2JFR5cGUiLDE0MTkpLEQoMTQyMCwxLGdpLFRRKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBSbCgpLHUoZSwxMCkuaz09KEduKCkscXMpfSxOKGJvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkNyRUeXBlIiwxNDIwKSxEKDE0MjEsMSx7fSxfUSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gUmwoKSxuZXcga24obnVsbCxuZXcgRnYobmV3IGFyKGxyKHowKHUoZSwxMCkpLmEuS2MoKSxuZXcgSCkpKSl9LE4oYm8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQ4JFR5cGUiLDE0MjEpLEQoMTQyMiwxLGdpLENRKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBSbCgpLHd0bih1KGUsMTcpKX0sTihibywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDkkVHlwZSIsMTQyMiksRCgxNDA0LDEsVmMscFQpLGwuWWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoSyh1KGUsMzcpLChhZSgpLFdjKSksMjEpLkhjKChnbygpLHloKSk/eW1lOm51bGx9LGwucGY9ZnVuY3Rpb24oZSxuKXt2eW4odShlLDM3KSxuKX07dmFyIHltZTtOKGJvLCJTaW1wbGVOb2RlUGxhY2VyIiwxNDA0KSxEKDE4MCwxLHsxODA6MX0sazQpLGwuSWI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT0iIix0aGlzLmM9PShnZCgpLFJ3KT9lKz1keDp0aGlzLmM9PVpnJiYoZSs9ZngpLHRoaXMubz09KEMxKCksejIpP2UrPWtvdDp0aGlzLm89PVYxP2UrPSJVUCI6ZSs9IkJBTEFOQ0VEIixlfSxOKG9iLCJCS0FsaWduZWRMYXlvdXQiLDE4MCksRCg1MTYsMjIsezM6MSwzNToxLDIyOjEsNTE2OjF9LFBidCk7dmFyIFpnLFJ3LHhtZT16cihvYiwiQktBbGlnbmVkTGF5b3V0L0hEaXJlY3Rpb24iLDUxNixVcixHbm4sb0plKSxrbWU7RCg1MTUsMjIsezM6MSwzNToxLDIyOjEsNTE1OjF9LE5idCk7dmFyIHoyLFYxLEVtZT16cihvYiwiQktBbGlnbmVkTGF5b3V0L1ZEaXJlY3Rpb24iLDUxNSxVcixVbm4sY0plKSxUbWU7RCgxNjM0LDEse30sdEd0KSxOKG9iLCJCS0FsaWduZXIiLDE2MzQpLEQoMTYzNywxLHt9LE9zZSksTihvYiwiQktDb21wYWN0b3IiLDE2MzcpLEQoNjU0LDEsezY1NDoxfSxTUSksbC5hPTAsTihvYiwiQktDb21wYWN0b3IvQ2xhc3NFZGdlIiw2NTQpLEQoNDU4LDEsezQ1ODoxfSxpcXQpLGwuYT1udWxsLGwuYj0wLE4ob2IsIkJLQ29tcGFjdG9yL0NsYXNzTm9kZSIsNDU4KSxEKDE0MDcsMSxWYyxDR3QpLGwuWWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoSyh1KGUsMzcpLChhZSgpLFdjKSksMjEpLkhjKChnbygpLHloKSk/X21lOm51bGx9LGwucGY9ZnVuY3Rpb24oZSxuKXtSNW4odGhpcyx1KGUsMzcpLG4pfSxsLmQ9ITE7dmFyIF9tZTtOKG9iLCJCS05vZGVQbGFjZXIiLDE0MDcpLEQoMTYzNSwxLHt9LEFRKSxsLmQ9MCxOKG9iLCJOZWlnaGJvcmhvb2RJbmZvcm1hdGlvbiIsMTYzNSksRCgxNjM2LDEscWksTCR0KSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEdhbih0aGlzLHUoZSw0NiksdShuLDQ2KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBndCh0aGlzKX0sTihvYiwiTmVpZ2hib3Job29kSW5mb3JtYXRpb24vTmVpZ2hib3JDb21wYXJhdG9yIiwxNjM2KSxEKDgwOCwxLHt9KSxOKG9iLCJUaHJlc2hvbGRTdHJhdGVneSIsODA4KSxEKDE3NjMsODA4LHt9LHVxdCksbC5iZz1mdW5jdGlvbihlLG4scil7cmV0dXJuIHRoaXMuYS5vPT0oQzEoKSxWMSk/YnM6TnN9LGwuY2c9ZnVuY3Rpb24oKXt9LE4ob2IsIlRocmVzaG9sZFN0cmF0ZWd5L051bGxUaHJlc2hvbGRTdHJhdGVneSIsMTc2MyksRCg1NzksMSx7NTc5OjF9LGVHdCksbC5jPSExLGwuZD0hMSxOKG9iLCJUaHJlc2hvbGRTdHJhdGVneS9Qb3N0cHJvY2Vzc2FibGUiLDU3OSksRCgxNzY0LDgwOCx7fSxscXQpLGwuYmc9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saDtyZXR1cm4gbz1uPT1yLHM9dGhpcy5hLmFbci5wXT09bixvfHxzPyhoPWUsdGhpcy5hLmM9PShnZCgpLFJ3KT8obyYmKGg9a2F0KHRoaXMsbiwhMCkpLCFpc05hTihoKSYmIWlzRmluaXRlKGgpJiZzJiYoaD1rYXQodGhpcyxyLCExKSkpOihvJiYoaD1rYXQodGhpcyxuLCEwKSksIWlzTmFOKGgpJiYhaXNGaW5pdGUoaCkmJnMmJihoPWthdCh0aGlzLHIsITEpKSksaCk6ZX0sbC5jZz1mdW5jdGlvbigpe2Zvcih2YXIgZSxuLHIscyxvO3RoaXMuZC5iIT0wOylvPXUoY3JuKHRoaXMuZCksNTc5KSxzPXRsZSh0aGlzLG8pLHMuYSYmKGU9cy5hLHI9QmUodGhpcy5hLmZbdGhpcy5hLmdbby5iLnBdLnBdKSwhKCFyJiYhV2EoZSkmJmUuYy5pLmM9PWUuZC5pLmMpJiYobj1vY2UodGhpcyxvKSxufHxLWWUodGhpcy5lLG8pKSk7Zm9yKDt0aGlzLmUuYS5jLmxlbmd0aCE9MDspb2NlKHRoaXMsdSh2cmUodGhpcy5lKSw1NzkpKX0sTihvYiwiVGhyZXNob2xkU3RyYXRlZ3kvU2ltcGxlVGhyZXNob2xkU3RyYXRlZ3kiLDE3NjQpLEQoNjM1LDEsezYzNToxLDI0NjoxLDIzNDoxfSxMUSksbC5LZj1mdW5jdGlvbigpe3JldHVybiBTbmUodGhpcyl9LGwuWGY9ZnVuY3Rpb24oKXtyZXR1cm4gU25lKHRoaXMpfTt2YXIga2h0O04od2N0LCJFZGdlUm91dGVyRmFjdG9yeSIsNjM1KSxEKDE0NTgsMSxWYyxzZCksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gYnZuKHUoZSwzNykpfSxsLnBmPWZ1bmN0aW9uKGUsbil7VHluKHUoZSwzNyksbil9O3ZhciBDbWUsU21lLEFtZSxMbWUsTW1lLEtfdCxEbWUsSW1lO04od2N0LCJPcnRob2dvbmFsRWRnZVJvdXRlciIsMTQ1OCksRCgxNDUxLDEsVmMsU0d0KSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiAkMW4odShlLDM3KSl9LGwucGY9ZnVuY3Rpb24oZSxuKXtWNG4odGhpcyx1KGUsMzcpLG4pfTt2YXIgT21lLE5tZSxQbWUsRm1lLE5PLEJtZTtOKHdjdCwiUG9seWxpbmVFZGdlUm91dGVyIiwxNDUxKSxEKDE0NTIsMSxtZCxNUSksbC5MYj1mdW5jdGlvbihlKXtyZXR1cm4gbHl0KHUoZSwxMCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gbHl0KHUoZSwxMCkpfSxOKHdjdCwiUG9seWxpbmVFZGdlUm91dGVyLzEiLDE0NTIpLEQoMTgwOSwxLGdpLERRKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTI5KS5jPT0oWWYoKSx2Yil9LE4ocjEsIkh5cGVyRWRnZUN5Y2xlRGV0ZWN0b3IvbGFtYmRhJDAkVHlwZSIsMTgwOSksRCgxODEwLDEse30sSVEpLGwuR2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxMjkpLmR9LE4ocjEsIkh5cGVyRWRnZUN5Y2xlRGV0ZWN0b3IvbGFtYmRhJDEkVHlwZSIsMTgxMCksRCgxODExLDEsZ2ksT1EpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxMjkpLmM9PShZZigpLHZiKX0sTihyMSwiSHlwZXJFZGdlQ3ljbGVEZXRlY3Rvci9sYW1iZGEkMiRUeXBlIiwxODExKSxEKDE4MTIsMSx7fSxZNSksbC5HZT1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDEyOSkuZH0sTihyMSwiSHlwZXJFZGdlQ3ljbGVEZXRlY3Rvci9sYW1iZGEkMyRUeXBlIiwxODEyKSxEKDE4MTMsMSx7fSxOUSksbC5HZT1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDEyOSkuZH0sTihyMSwiSHlwZXJFZGdlQ3ljbGVEZXRlY3Rvci9sYW1iZGEkNCRUeXBlIiwxODEzKSxEKDE4MTQsMSx7fSxQUSksbC5HZT1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDEyOSkuZH0sTihyMSwiSHlwZXJFZGdlQ3ljbGVEZXRlY3Rvci9sYW1iZGEkNSRUeXBlIiwxODE0KSxEKDExMiwxLHszNToxLDExMjoxfSxMRCksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gVUtlKHRoaXMsdShlLDExMikpfSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBfdChlLDExMik/KG49dShlLDExMiksdGhpcy5nPT1uLmcpOiExfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ30sbC5JYj1mdW5jdGlvbigpe3ZhciBlLG4scixzO2ZvcihlPW5ldyBGbCgieyIpLHM9bmV3IFModGhpcy5uKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoUShzKSwxMSksbj1aRChyLmkpLG49PW51bGwmJihuPSJuIitlS3Qoci5pKSksZS5hKz0iIituLHMuYTxzLmMuYy5sZW5ndGgmJihlLmErPSIsIik7cmV0dXJuIGUuYSs9In0iLGUuYX0sbC5hPTAsbC5iPTAsbC5jPU5hTixsLmQ9MCxsLmc9MCxsLmk9MCxsLm89MCxsLnM9TmFOLE4ocjEsIkh5cGVyRWRnZVNlZ21lbnQiLDExMiksRCgxMjksMSx7MTI5OjF9LG4yKSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYSsiLT4iK3RoaXMuYisiICgiK3JRZSh0aGlzLmMpKyIpIn0sbC5kPTAsTihyMSwiSHlwZXJFZGdlU2VnbWVudERlcGVuZGVuY3kiLDEyOSksRCg1MjAsMjIsezM6MSwzNToxLDIyOjEsNTIwOjF9LEZidCk7dmFyIHZiLFV5LFJtZT16cihyMSwiSHlwZXJFZGdlU2VnbWVudERlcGVuZGVuY3kvRGVwZW5kZW5jeVR5cGUiLDUyMCxVcixWbm4sdUplKSxqbWU7RCgxODE1LDEse30sTSR0KSxOKHIxLCJIeXBlckVkZ2VTZWdtZW50U3BsaXR0ZXIiLDE4MTUpLEQoMTgxNiwxLHt9LG9IdCksbC5hPTAsbC5iPTAsTihyMSwiSHlwZXJFZGdlU2VnbWVudFNwbGl0dGVyL0FyZWFSYXRpbmciLDE4MTYpLEQoMzI5LDEsezMyOToxfSxrbnQpLGwuYT0wLGwuYj0wLGwuYz0wLE4ocjEsIkh5cGVyRWRnZVNlZ21lbnRTcGxpdHRlci9GcmVlQXJlYSIsMzI5KSxEKDE4MTcsMSxxaSxxUSksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBKUWUodShlLDExMiksdShuLDExMikpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZ3QodGhpcyl9LE4ocjEsIkh5cGVyRWRnZVNlZ21lbnRTcGxpdHRlci9sYW1iZGEkMCRUeXBlIiwxODE3KSxEKDE4MTgsMSxLbix4WHQpLGwudGQ9ZnVuY3Rpb24oZSl7aXNuKHRoaXMuYSx0aGlzLmQsdGhpcy5jLHRoaXMuYix1KGUsMTEyKSl9LGwuYj0wLE4ocjEsIkh5cGVyRWRnZVNlZ21lbnRTcGxpdHRlci9sYW1iZGEkMSRUeXBlIiwxODE4KSxEKDE4MTksMSx7fSxIUSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGtuKG51bGwsbmV3IFRuKHUoZSwxMTIpLmUsMTYpKX0sTihyMSwiSHlwZXJFZGdlU2VnbWVudFNwbGl0dGVyL2xhbWJkYSQyJFR5cGUiLDE4MTkpLEQoMTgyMCwxLHt9LFZRKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcga24obnVsbCxuZXcgVG4odShlLDExMikuaiwxNikpfSxOKHIxLCJIeXBlckVkZ2VTZWdtZW50U3BsaXR0ZXIvbGFtYmRhJDMkVHlwZSIsMTgyMCksRCgxODIxLDEse30sR1EpLGwuRmU9ZnVuY3Rpb24oZSl7cmV0dXJuIFp0KHZlKGUpKX0sTihyMSwiSHlwZXJFZGdlU2VnbWVudFNwbGl0dGVyL2xhbWJkYSQ0JFR5cGUiLDE4MjEpLEQoNjU1LDEse30sVW50KSxsLmE9MCxsLmI9MCxsLmM9MCxOKHIxLCJPcnRob2dvbmFsUm91dGluZ0dlbmVyYXRvciIsNjU1KSxEKDE2MzgsMSx7fSxVUSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGtuKG51bGwsbmV3IFRuKHUoZSwxMTIpLmUsMTYpKX0sTihyMSwiT3J0aG9nb25hbFJvdXRpbmdHZW5lcmF0b3IvbGFtYmRhJDAkVHlwZSIsMTYzOCksRCgxNjM5LDEse30sV1EpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrbihudWxsLG5ldyBUbih1KGUsMTEyKS5qLDE2KSl9LE4ocjEsIk9ydGhvZ29uYWxSb3V0aW5nR2VuZXJhdG9yL2xhbWJkYSQxJFR5cGUiLDE2MzkpLEQoNjYxLDEse30pLE4obWN0LCJCYXNlUm91dGluZ0RpcmVjdGlvblN0cmF0ZWd5Iiw2NjEpLEQoMTgwNyw2NjEse30saHF0KSxsLmRnPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWjtpZighKGUuciYmIWUucSkpZm9yKE09bitlLm8qcixfPW5ldyBTKGUubik7Xy5hPF8uYy5jLmxlbmd0aDspZm9yKGs9dShRKF8pLDExKSxCPW5jKHV0KG90KG5hLDEpLHJlLDgsMCxbay5pLm4say5uLGsuYV0pKS5hLHc9bmV3IFMoay5nKTt3LmE8dy5jLmMubGVuZ3RoOylkPXUoUSh3KSwxNyksV2EoZCl8fChXPWQuZCxaPW5jKHV0KG90KG5hLDEpLHJlLDgsMCxbVy5pLm4sVy5uLFcuYV0pKS5hLGIuTWF0aC5hYnMoQi1aKT54ZCYmKGg9TSxvPWUscz1uZXcgUmUoQixoKSxhaShkLmEscyksZncodGhpcyxkLG8scywhMSkscT1lLnIscSYmKEc9WnQodmUoZTEocS5lLDApKSkscz1uZXcgUmUoRyxoKSxhaShkLmEscyksZncodGhpcyxkLG8scywhMSksaD1uK3EubypyLG89cSxzPW5ldyBSZShHLGgpLGFpKGQuYSxzKSxmdyh0aGlzLGQsbyxzLCExKSkscz1uZXcgUmUoWixoKSxhaShkLmEscyksZncodGhpcyxkLG8scywhMSkpKX0sbC5lZz1mdW5jdGlvbihlKXtyZXR1cm4gZS5pLm4uYStlLm4uYStlLmEuYX0sbC5mZz1mdW5jdGlvbigpe3JldHVybiBiZSgpLHlyfSxsLmdnPWZ1bmN0aW9uKCl7cmV0dXJuIGJlKCksT259LE4obWN0LCJOb3J0aFRvU291dGhSb3V0aW5nU3RyYXRlZ3kiLDE4MDcpLEQoMTgwOCw2NjEse30sZnF0KSxsLmRnPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWjtpZighKGUuciYmIWUucSkpZm9yKE09bi1lLm8qcixfPW5ldyBTKGUubik7Xy5hPF8uYy5jLmxlbmd0aDspZm9yKGs9dShRKF8pLDExKSxCPW5jKHV0KG90KG5hLDEpLHJlLDgsMCxbay5pLm4say5uLGsuYV0pKS5hLHc9bmV3IFMoay5nKTt3LmE8dy5jLmMubGVuZ3RoOylkPXUoUSh3KSwxNyksV2EoZCl8fChXPWQuZCxaPW5jKHV0KG90KG5hLDEpLHJlLDgsMCxbVy5pLm4sVy5uLFcuYV0pKS5hLGIuTWF0aC5hYnMoQi1aKT54ZCYmKGg9TSxvPWUscz1uZXcgUmUoQixoKSxhaShkLmEscyksZncodGhpcyxkLG8scywhMSkscT1lLnIscSYmKEc9WnQodmUoZTEocS5lLDApKSkscz1uZXcgUmUoRyxoKSxhaShkLmEscyksZncodGhpcyxkLG8scywhMSksaD1uLXEubypyLG89cSxzPW5ldyBSZShHLGgpLGFpKGQuYSxzKSxmdyh0aGlzLGQsbyxzLCExKSkscz1uZXcgUmUoWixoKSxhaShkLmEscyksZncodGhpcyxkLG8scywhMSkpKX0sbC5lZz1mdW5jdGlvbihlKXtyZXR1cm4gZS5pLm4uYStlLm4uYStlLmEuYX0sbC5mZz1mdW5jdGlvbigpe3JldHVybiBiZSgpLE9ufSxsLmdnPWZ1bmN0aW9uKCl7cmV0dXJuIGJlKCkseXJ9LE4obWN0LCJTb3V0aFRvTm9ydGhSb3V0aW5nU3RyYXRlZ3kiLDE4MDgpLEQoMTgwNiw2NjEse30sZHF0KSxsLmRnPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLGgsZCx3LGssXyxNLEIscSxHLFcsWjtpZighKGUuciYmIWUucSkpZm9yKE09bitlLm8qcixfPW5ldyBTKGUubik7Xy5hPF8uYy5jLmxlbmd0aDspZm9yKGs9dShRKF8pLDExKSxCPW5jKHV0KG90KG5hLDEpLHJlLDgsMCxbay5pLm4say5uLGsuYV0pKS5iLHc9bmV3IFMoay5nKTt3LmE8dy5jLmMubGVuZ3RoOylkPXUoUSh3KSwxNyksV2EoZCl8fChXPWQuZCxaPW5jKHV0KG90KG5hLDEpLHJlLDgsMCxbVy5pLm4sVy5uLFcuYV0pKS5iLGIuTWF0aC5hYnMoQi1aKT54ZCYmKGg9TSxvPWUscz1uZXcgUmUoaCxCKSxhaShkLmEscyksZncodGhpcyxkLG8scywhMCkscT1lLnIscSYmKEc9WnQodmUoZTEocS5lLDApKSkscz1uZXcgUmUoaCxHKSxhaShkLmEscyksZncodGhpcyxkLG8scywhMCksaD1uK3EubypyLG89cSxzPW5ldyBSZShoLEcpLGFpKGQuYSxzKSxmdyh0aGlzLGQsbyxzLCEwKSkscz1uZXcgUmUoaCxaKSxhaShkLmEscyksZncodGhpcyxkLG8scywhMCkpKX0sbC5lZz1mdW5jdGlvbihlKXtyZXR1cm4gZS5pLm4uYitlLm4uYitlLmEuYn0sbC5mZz1mdW5jdGlvbigpe3JldHVybiBiZSgpLEhufSxsLmdnPWZ1bmN0aW9uKCl7cmV0dXJuIGJlKCksQm59LE4obWN0LCJXZXN0VG9FYXN0Um91dGluZ1N0cmF0ZWd5IiwxODA2KSxEKDgxMywxLHt9LG42dCksbC5JYj1mdW5jdGlvbigpe3JldHVybiBKcCh0aGlzLmEpfSxsLmI9MCxsLmM9ITEsbC5kPSExLGwuZj0wLE4oVHksIk51YlNwbGluZSIsODEzKSxEKDQwNywxLHs0MDc6MX0sRmNlLGVRdCksTihUeSwiTnViU3BsaW5lL1BvbGFyQ1AiLDQwNyksRCgxNDUzLDEsVmMsX3NlKSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiBMZG4odShlLDM3KSl9LGwucGY9ZnVuY3Rpb24oZSxuKXt1NW4odGhpcyx1KGUsMzcpLG4pfTt2YXIgJG1lLHptZSxxbWUsSG1lLFZtZTtOKFR5LCJTcGxpbmVFZGdlUm91dGVyIiwxNDUzKSxEKDI2OCwxLHsyNjg6MX0sUyQpLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hKyIgLT4oIit0aGlzLmMrIikgIit0aGlzLmJ9LGwuYz0wLE4oVHksIlNwbGluZUVkZ2VSb3V0ZXIvRGVwZW5kZW5jeSIsMjY4KSxEKDQ1NSwyMix7MzoxLDM1OjEsMjI6MSw0NTU6MX0sQmJ0KTt2YXIgd2IsbjUsR21lPXpyKFR5LCJTcGxpbmVFZGdlUm91dGVyL1NpZGVUb1Byb2Nlc3MiLDQ1NSxVcixXbm4sbEplKSxVbWU7RCgxNDU0LDEsZ2kselEpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIGJDKCksIXUoZSwxMjgpLm99LE4oVHksIlNwbGluZUVkZ2VSb3V0ZXIvbGFtYmRhJDAkVHlwZSIsMTQ1NCksRCgxNDU1LDEse30sJFEpLGwuR2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGJDKCksdShlLDEyOCkudisxfSxOKFR5LCJTcGxpbmVFZGdlUm91dGVyL2xhbWJkYSQxJFR5cGUiLDE0NTUpLEQoMTQ1NiwxLEtuLG5HdCksbC50ZD1mdW5jdGlvbihlKXt5dG4odGhpcy5hLHRoaXMuYix1KGUsNDYpKX0sTihUeSwiU3BsaW5lRWRnZVJvdXRlci9sYW1iZGEkMiRUeXBlIiwxNDU2KSxEKDE0NTcsMSxLbixyR3QpLGwudGQ9ZnVuY3Rpb24oZSl7eHRuKHRoaXMuYSx0aGlzLmIsdShlLDQ2KSl9LE4oVHksIlNwbGluZUVkZ2VSb3V0ZXIvbGFtYmRhJDMkVHlwZSIsMTQ1NyksRCgxMjgsMSx7MzU6MSwxMjg6MX0sSmFlLGM2dCksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gV0tlKHRoaXMsdShlLDEyOCkpfSxsLmI9MCxsLmU9ITEsbC5mPTAsbC5nPTAsbC5qPSExLGwuaz0hMSxsLm49MCxsLm89ITEsbC5wPSExLGwucT0hMSxsLnM9MCxsLnU9MCxsLnY9MCxsLkY9MCxOKFR5LCJTcGxpbmVTZWdtZW50IiwxMjgpLEQoNDU5LDEsezQ1OToxfSxHOSksbC5hPTAsbC5iPSExLGwuYz0hMSxsLmQ9ITEsbC5lPSExLGwuZj0wLE4oVHksIlNwbGluZVNlZ21lbnQvRWRnZUluZm9ybWF0aW9uIiw0NTkpLEQoMTIzNCwxLHt9LEZRKSxOKHFDLHJ4dCwxMjM0KSxEKDEyMzUsMSxxaSxCUSksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBycG4odShlLDEzNSksdShuLDEzNSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZ3QodGhpcyl9LE4ocUMsQmZlLDEyMzUpLEQoMTIzMywxLHt9LEVIdCksTihxQywiTXJUcmVlIiwxMjMzKSxEKDM5MywyMix7MzoxLDM1OjEsMjI6MSwzOTM6MSwyNDY6MSwyMzQ6MX0sVVIpLGwuS2Y9ZnVuY3Rpb24oKXtyZXR1cm4gVG9lKHRoaXMpfSxsLlhmPWZ1bmN0aW9uKCl7cmV0dXJuIFRvZSh0aGlzKX07dmFyIHZHLFBTLFBPLEZTLFlfdD16cihxQywiVHJlZUxheW91dFBoYXNlcyIsMzkzLFVyLGppbixoSmUpLFdtZTtEKDExMzAsMjA5LF8yLEhXdCksbC5aZT1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoLGQsdyxrO2ZvcihCZShGZSh6ZShlLChodygpLGVDdCkpKSl8fHUkKChyPW5ldyBycigoRG0oKSxuZXcgU20oZSkpKSxyKSksZD0odz1uZXcgQSQsQm8odyxlKSxlZSh3LChtYygpLGpTKSxlKSxrPW5ldyBBcixLd24oZSx3LGspLGhtbihlLHcsayksdyksaD1pbW4odGhpcy5hLGQpLG89bmV3IFMoaCk7by5hPG8uYy5jLmxlbmd0aDspcz11KFEobyksMTM1KSxUZG4odGhpcy5iLHMsemMobiwxL2guYy5sZW5ndGgpKTtkPUI1bihoKSx1NG4oZCl9LE4ocUMsIlRyZWVMYXlvdXRQcm92aWRlciIsMTEzMCksRCgxODQ3LDEsdDAsUlEpLGwuSmM9ZnVuY3Rpb24oZSl7X2EodGhpcyxlKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBwbigpLGU4KCksWDd9LE4ocUMsIlRyZWVVdGlsLzEiLDE4NDcpLEQoMTg0OCwxLHQwLGpRKSxsLkpjPWZ1bmN0aW9uKGUpe19hKHRoaXMsZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gcG4oKSxlOCgpLFg3fSxOKHFDLCJUcmVlVXRpbC8yIiwxODQ4KSxEKDUwMiwxMzQsezM6MSw1MDI6MSw5NDoxLDEzNDoxfSksbC5nPTAsTihIQywiVEdyYXBoRWxlbWVudCIsNTAyKSxEKDE4OCw1MDIsezM6MSwxODg6MSw1MDI6MSw5NDoxLDEzNDoxfSxDd3QpLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iJiZ0aGlzLmM/YiQodGhpcy5iKSsiLT4iK2IkKHRoaXMuYyk6ImVfIitKaSh0aGlzKX0sTihIQywiVEVkZ2UiLDE4OCksRCgxMzUsMTM0LHszOjEsMTM1OjEsOTQ6MSwxMzQ6MX0sQSQpLGwuSWI9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscyxvO2ZvcihvPW51bGwscz1zaSh0aGlzLmIsMCk7cy5iIT1zLmQuYzspcj11KGlpKHMpLDg2KSxvKz0oci5jPT1udWxsfHxyLmMubGVuZ3RoPT0wPyJuXyIrci5nOiJuXyIrci5jKStgCmA7Zm9yKG49c2kodGhpcy5hLDApO24uYiE9bi5kLmM7KWU9dShpaShuKSwxODgpLG8rPShlLmImJmUuYz9iJChlLmIpKyItPiIrYiQoZS5jKToiZV8iK0ppKGUpKStgCmA7cmV0dXJuIG99O3ZhciBwNm49TihIQywiVEdyYXBoIiwxMzUpO0QoNjMzLDUwMix7MzoxLDUwMjoxLDYzMzoxLDk0OjEsMTM0OjF9KSxOKEhDLCJUU2hhcGUiLDYzMyksRCg4Niw2MzMsezM6MSw1MDI6MSw4NjoxLDYzMzoxLDk0OjEsMTM0OjF9LGtpdCksbC5JYj1mdW5jdGlvbigpe3JldHVybiBiJCh0aGlzKX07dmFyIGI2bj1OKEhDLCJUTm9kZSIsODYpO0QoMjU1LDEsdDAsU3ApLGwuSmM9ZnVuY3Rpb24oZSl7X2EodGhpcyxlKX0sbC5LYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXNpKHRoaXMuYS5kLDApLG5ldyBwNihlKX0sTihIQywiVE5vZGUvMiIsMjU1KSxEKDM1OCwxLGRhLHA2KSxsLk5iPWZ1bmN0aW9uKGUpe0VhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gdShpaSh0aGlzLmEpLDE4OCkuY30sbC5PYj1mdW5jdGlvbigpe3JldHVybiBrUih0aGlzLmEpfSxsLlFiPWZ1bmN0aW9uKCl7SCQodGhpcy5hKX0sTihIQywiVE5vZGUvMi8xIiwzNTgpLEQoMTg0MCwxLHZzLHFXdCksbC5wZj1mdW5jdGlvbihlLG4pe1Ntbih0aGlzLHUoZSwxMzUpLG4pfSxOKHl4LCJGYW5Qcm9jZXNzb3IiLDE4NDApLEQoMzI3LDIyLHszOjEsMzU6MSwyMjoxLDMyNzoxLDIzNDoxfSx0XyksbC5LZj1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLmcpe2Nhc2UgMDpyZXR1cm4gbmV3IEFxdDtjYXNlIDE6cmV0dXJuIG5ldyBxV3Q7Y2FzZSAyOnJldHVybiBuZXcgWDU7Y2FzZSAzOnJldHVybiBuZXcgS1E7Y2FzZSA0OnJldHVybiBuZXcgWFE7Y2FzZSA1OnJldHVybiBuZXcgT0w7ZGVmYXVsdDp0aHJvdyBudChuZXcgUG4oam90Kyh0aGlzLmYhPW51bGw/dGhpcy5mOiIiK3RoaXMuZykpKX19O3ZhciBFaHQsVGh0LF9odCxDaHQsU2h0LHdHLEttZT16cih5eCxneHQsMzI3LFVyLGVhbixmSmUpLFltZTtEKDE4NDMsMSx2cyxLUSksbC5wZj1mdW5jdGlvbihlLG4pe3Vibih0aGlzLHUoZSwxMzUpLG4pfSxsLmE9MCxOKHl4LCJMZXZlbEhlaWdodFByb2Nlc3NvciIsMTg0MyksRCgxODQ0LDEsdDAsWVEpLGwuSmM9ZnVuY3Rpb24oZSl7X2EodGhpcyxlKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBwbigpLGU4KCksWDd9LE4oeXgsIkxldmVsSGVpZ2h0UHJvY2Vzc29yLzEiLDE4NDQpLEQoMTg0MSwxLHZzLFg1KSxsLnBmPWZ1bmN0aW9uKGUsbil7YmduKHRoaXMsdShlLDEzNSksbil9LGwuYT0wLE4oeXgsIk5laWdoYm9yc1Byb2Nlc3NvciIsMTg0MSksRCgxODQyLDEsdDAsJEYpLGwuSmM9ZnVuY3Rpb24oZSl7X2EodGhpcyxlKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBwbigpLGU4KCksWDd9LE4oeXgsIk5laWdoYm9yc1Byb2Nlc3Nvci8xIiwxODQyKSxEKDE4NDUsMSx2cyxYUSksbC5wZj1mdW5jdGlvbihlLG4pe2Nibih0aGlzLHUoZSwxMzUpLG4pfSxsLmE9MCxOKHl4LCJOb2RlUG9zaXRpb25Qcm9jZXNzb3IiLDE4NDUpLEQoMTgzOSwxLHZzLEFxdCksbC5wZj1mdW5jdGlvbihlLG4pe055bih0aGlzLHUoZSwxMzUpKX0sTih5eCwiUm9vdFByb2Nlc3NvciIsMTgzOSksRCgxODQ2LDEsdnMsT0wpLGwucGY9ZnVuY3Rpb24oZSxuKXtIdW4odShlLDEzNSkpfSxOKHl4LCJVbnRyZWVpZnllciIsMTg0Nik7dmFyIEZPLEJTLFhtZSxBaHQsbUcsUlMsTGh0LHlHLHhHLHlFLGpTLGtHLEpnLFhfdCxRbWUsTWh0LFd5LERodCxRX3Q7RCg4NTEsMSxQaCxNMyksbC5RZT1mdW5jdGlvbihlKXthbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsT2t0KSwiIiksIldlaWdodGluZyBvZiBOb2RlcyIpLCJXaGljaCB3ZWlnaHRpbmcgdG8gdXNlIHdoZW4gY29tcHV0aW5nIGEgbm9kZSBvcmRlci4iKSxKX3QpLChIZygpLG1zKSksYUN0KSxvbigodDEoKSxxbikpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxOa3QpLCIiKSwiU2VhcmNoIE9yZGVyIiksIldoaWNoIHNlYXJjaCBvcmRlciB0byB1c2Ugd2hlbiBjb21wdXRpbmcgYSBzcGFubmluZyB0cmVlLiIpLFpfdCksbXMpLGNDdCksb24ocW4pKSkpLFhsZSgobmV3IEtMLGUpKX07dmFyIFptZSxaX3QsSm1lLEpfdDtOKGZILCJNclRyZWVNZXRhRGF0YVByb3ZpZGVyIiw4NTEpLEQoOTk0LDEsUGgsS0wpLGwuUWU9ZnVuY3Rpb24oZSl7WGxlKGUpfTt2YXIgdHllLHRDdCxleWUsbnllLHJ5ZSxpeWUsZUN0LHN5ZSxuQ3QsYXllLEVHLHJDdCxveWUsaUN0LGN5ZTtOKGZILCJNclRyZWVPcHRpb25zIiw5OTQpLEQoOTk1LDEse30sUVEpLGwuJGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1uZXcgSFd0LGV9LGwuX2U9ZnVuY3Rpb24oZSl7fSxOKGZILCJNclRyZWVPcHRpb25zL01ydHJlZUZhY3RvcnkiLDk5NSksRCg0ODAsMjIsezM6MSwzNToxLDIyOjEsNDgwOjF9LFJidCk7dmFyIElodCxzQ3QsYUN0PXpyKGZILCJPcmRlcldlaWdodGluZyIsNDgwLFVyLFlubixkSmUpLHV5ZTtEKDQyNSwyMix7MzoxLDM1OjEsMjI6MSw0MjU6MX0samJ0KTt2YXIgb0N0LE9odCxjQ3Q9enIoZkgsIlRyZWVpZnlpbmdPcmRlciIsNDI1LFVyLEtubixwSmUpLGx5ZTtEKDE0NTksMSxWYyxXTCksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDEzNSksaHllfSxsLnBmPWZ1bmN0aW9uKGUsbil7cW9uKHRoaXMsdShlLDEzNSksbil9O3ZhciBoeWU7Tigib3JnLmVjbGlwc2UuZWxrLmFsZy5tcnRyZWUucDF0cmVlaWZ5IiwiREZTVHJlZWlmeWVyIiwxNDU5KSxEKDE0NjAsMSxWYyxKSiksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDEzNSksZnllfSxsLnBmPWZ1bmN0aW9uKGUsbil7Q2duKHRoaXMsdShlLDEzNSksbil9O3ZhciBmeWU7Tigib3JnLmVjbGlwc2UuZWxrLmFsZy5tcnRyZWUucDJvcmRlciIsIk5vZGVPcmRlcmVyIiwxNDYwKSxEKDE0NjEsMSxWYyxaSiksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDEzNSksZHllfSxsLnBmPWZ1bmN0aW9uKGUsbil7SHZuKHRoaXMsdShlLDEzNSksbil9LGwuYT0wO3ZhciBkeWU7Tigib3JnLmVjbGlwc2UuZWxrLmFsZy5tcnRyZWUucDNwbGFjZSIsIk5vZGVQbGFjZXIiLDE0NjEpLEQoMTQ2MiwxLFZjLE5CKSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTM1KSxneWV9LGwucGY9ZnVuY3Rpb24oZSxuKXtwMW4odShlLDEzNSksbil9O3ZhciBneWU7Tigib3JnLmVjbGlwc2UuZWxrLmFsZy5tcnRyZWUucDRyb3V0ZSIsIkVkZ2VSb3V0ZXIiLDE0NjIpO3ZhciAkUztEKDQ5NSwyMix7MzoxLDM1OjEsMjI6MSw0OTU6MSwyNDY6MSwyMzQ6MX0sJGJ0KSxsLktmPWZ1bmN0aW9uKCl7cmV0dXJuIG5pZSh0aGlzKX0sbC5YZj1mdW5jdGlvbigpe3JldHVybiBuaWUodGhpcyl9O3ZhciBURyx4RSx1Q3Q9enIoUGt0LCJSYWRpYWxMYXlvdXRQaGFzZXMiLDQ5NSxVcixYbm4sZ0plKSxweWU7RCgxMTMxLDIwOSxfMixrSHQpLGwuWmU9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG8saCxkLHc7aWYocj1zb2UodGhpcyxlKSxtcihuLCJSYWRpYWwgbGF5b3V0IixyLmMubGVuZ3RoKSxCZShGZSh6ZShlLChheSgpLG1DdCkpKSl8fHUkKChzPW5ldyBycigoRG0oKSxuZXcgU20oZSkpKSxzKSksdz1JZG4oZSksRW8oZSwoYl8oKSwkUyksdyksIXcpdGhyb3cgbnQobmV3IFBuKCJUaGUgZ2l2ZW4gZ3JhcGggaXMgbm90IGEgdHJlZSEiKSk7Zm9yKG89WnQodmUoemUoZSxTRykpKSxvPT0wJiYobz1tb2UoZSkpLEVvKGUsU0csbyksZD1uZXcgUyhzb2UodGhpcyxlKSk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KFEoZCksNTEpLGgucGYoZSx6YyhuLDEpKTtvcihuKX0sTihQa3QsIlJhZGlhbExheW91dFByb3ZpZGVyIiwxMTMxKSxEKDU0OSwxLHFpLEVSKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGl3bih0aGlzLmEsdGhpcy5iLHUoZSwzMyksdShuLDMzKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBndCh0aGlzKX0sbC5hPTAsbC5iPTAsTihQa3QsIlJhZGlhbFV0aWwvbGFtYmRhJDAkVHlwZSIsNTQ5KSxEKDEzNzUsMSx2cyxKUSksbC5wZj1mdW5jdGlvbihlLG4pe0Uzbih1KGUsMzMpLG4pfSxOKEQxZSwiQ2FsY3VsYXRlR3JhcGhTaXplIiwxMzc1KSxEKDQ0MiwyMix7MzoxLDM1OjEsMjI6MSw0NDI6MSwyMzQ6MX0sUmV0KSxsLktmPWZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZyl7Y2FzZSAwOnJldHVybiBuZXcgekY7Y2FzZSAxOnJldHVybiBuZXcgWlE7Y2FzZSAyOnJldHVybiBuZXcgSlE7ZGVmYXVsdDp0aHJvdyBudChuZXcgUG4oam90Kyh0aGlzLmYhPW51bGw/dGhpcy5mOiIiK3RoaXMuZykpKX19O3ZhciBOaHQsUGh0LEZodCxieWU9enIoRDFlLGd4dCw0NDIsVXIsR3JuLGJKZSksdnllO0QoNjQ1LDEse30pLGwuZT0xLGwuZz0wLE4oa2N0LCJBYnN0cmFjdFJhZGl1c0V4dGVuc2lvbkNvbXBhY3Rpb24iLDY0NSksRCgxNzcyLDY0NSx7fSx5V3QpLGwuaGc9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHcsayxfO2Zvcih0aGlzLmM9dSh6ZShlLChiXygpLCRTKSksMzMpLFR0dCh0aGlzLHRoaXMuYyksdGhpcy5kPWFzdCh1KHplKGUsKGF5KCksQk8pKSwyOTMpKSxrPXUoemUoZSxSaHQpLDE5KSxrJiZwdih0aGlzLGsuYSksdz12ZSh6ZShlLChkaSgpLEcyKSkpLGtUKHRoaXMsKEluKHcpLHcpKSxfPWd5KHRoaXMuYyksdGhpcy5kJiZ0aGlzLmQubGcoXyksbXduKHRoaXMsXyksZD1uZXcgQ2wodXQob3QoZHMsMSksSTFlLDMzLDAsW3RoaXMuY10pKSxyPTA7cjwyO3IrKylmb3Iobj0wO248Xy5jLmxlbmd0aDtuKyspbz1uZXcgQ2wodXQob3QoZHMsMSksSTFlLDMzLDAsWyhTbihuLF8uYy5sZW5ndGgpLHUoXy5jW25dLDMzKSldKSksaD1uPF8uYy5sZW5ndGgtMT8oU24obisxLF8uYy5sZW5ndGgpLHUoXy5jW24rMV0sMzMpKTooU24oMCxfLmMubGVuZ3RoKSx1KF8uY1swXSwzMykpLHM9bj09MD91KFBlKF8sXy5jLmxlbmd0aC0xKSwzMyk6KFNuKG4tMSxfLmMubGVuZ3RoKSx1KF8uY1tuLTFdLDMzKSksZmFlKHRoaXMsKFNuKG4sXy5jLmxlbmd0aCksdShfLmNbbl0sMzMpLGQpLHMsaCxvKX0sTihrY3QsIkFubnVsdXNXZWRnZUNvbXBhY3Rpb24iLDE3NzIpLEQoMTM3NCwxLHZzLFpRKSxsLnBmPWZ1bmN0aW9uKGUsbil7RjFuKHUoZSwzMyksbil9LE4oa2N0LCJHZW5lcmFsQ29tcGFjdG9yIiwxMzc0KSxEKDE3NzEsNjQ1LHt9LHRaKSxsLmhnPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvO3I9dSh6ZShlLChiXygpLCRTKSksMzMpLHRoaXMuZj1yLHRoaXMuYj1hc3QodSh6ZShlLChheSgpLEJPKSksMjkzKSksbz11KHplKGUsUmh0KSwxOSksbyYmcHYodGhpcyxvLmEpLHM9dmUoemUoZSwoZGkoKSxHMikpKSxrVCh0aGlzLChJbihzKSxzKSksbj1neShyKSx0aGlzLmImJnRoaXMuYi5sZyhuKSxIYWUodGhpcyxuKX0sbC5hPTAsTihrY3QsIlJhZGlhbENvbXBhY3Rpb24iLDE3NzEpLEQoMTc3OSwxLHt9LGVaKSxsLmlnPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGgsZDtmb3IodGhpcy5hPWUsbj0wLGQ9Z3koZSkscz0wLGg9bmV3IFMoZCk7aC5hPGguYy5jLmxlbmd0aDspZm9yKG89dShRKGgpLDMzKSwrK3Mscj1zO3I8ZC5jLmxlbmd0aDtyKyspT21uKHRoaXMsbywoU24ocixkLmMubGVuZ3RoKSx1KGQuY1tyXSwzMykpKSYmKG4rPTEpO3JldHVybiBufSxOKEJrdCwiQ3Jvc3NpbmdNaW5pbWl6YXRpb25Qb3NpdGlvbiIsMTc3OSksRCgxNzc3LDEse30sblopLGwuaWc9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHcsayxfLE0sQixxLEc7Zm9yKHM9MCxyPW5ldyBhcihscihWMChlKS5hLktjKCksbmV3IEgpKTtWcihyKTspbj11KElyKHIpLDc5KSx3PVJvKHUoQXQoKCFuLmMmJihuLmM9bmV3IEVuKHZyLG4sNSw4KSksbi5jKSwwKSw4MikpLF89dy5pK3cuZy8yLE09dy5qK3cuZi8yLG89ZS5pK2UuZy8yLGg9ZS5qK2UuZi8yLEI9bmV3IERhLEIuYT1fLW8sQi5iPU0taCxkPW5ldyBSZShCLmEsQi5iKSx1NyhkLGUuZyxlLmYpLEIuYS09ZC5hLEIuYi09ZC5iLG89Xy1CLmEsaD1NLUIuYixrPW5ldyBSZShCLmEsQi5iKSx1NyhrLHcuZyx3LmYpLEIuYS09ay5hLEIuYi09ay5iLF89bytCLmEsTT1oK0IuYixxPV8tbyxHPU0taCxzKz1iLk1hdGguc3FydChxKnErRypHKTtyZXR1cm4gc30sTihCa3QsIkVkZ2VMZW5ndGhPcHRpbWl6YXRpb24iLDE3NzcpLEQoMTc3OCwxLHt9LHJaKSxsLmlnPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXyxNLEI7Zm9yKHM9MCxyPW5ldyBhcihscihWMChlKS5hLktjKCksbmV3IEgpKTtWcihyKTspbj11KElyKHIpLDc5KSx3PVJvKHUoQXQoKCFuLmMmJihuLmM9bmV3IEVuKHZyLG4sNSw4KSksbi5jKSwwKSw4MikpLGs9dy5pK3cuZy8yLF89dy5qK3cuZi8yLG89dSh6ZSh3LChkaSgpLCR4KSksOCksaD1lLmkrby5hK2UuZy8yLGQ9ZS5qK28uYitlLmYsTT1rLWgsQj1fLWQscys9Yi5NYXRoLnNxcnQoTSpNK0IqQik7cmV0dXJuIHN9LE4oQmt0LCJFZGdlTGVuZ3RoUG9zaXRpb25PcHRpbWl6YXRpb24iLDE3NzgpLEQoMTM3Myw2NDUsdnMsekYpLGwucGY9ZnVuY3Rpb24oZSxuKXskYm4odGhpcyx1KGUsMzMpLG4pfSxOKCJvcmcuZWNsaXBzZS5lbGsuYWxnLnJhZGlhbC5pbnRlcm1lZGlhdGUub3ZlcmxhcHMiLCJSYWRpdXNFeHRlbnNpb25PdmVybGFwUmVtb3ZhbCIsMTM3MyksRCg0MjYsMjIsezM6MSwzNToxLDIyOjEsNDI2OjF9LHpidCk7dmFyIGxDdCxCaHQsaEN0PXpyKFZDLCJBbm51bHVzV2VkZ2VDcml0ZXJpYSIsNDI2LFVyLFFubix2SmUpLHd5ZTtEKDM4MCwyMix7MzoxLDM1OjEsMjI6MSwzODA6MX0samV0KTt2YXIgX0csZkN0LGRDdCxnQ3Q9enIoVkMsWDZ0LDM4MCxVcixVcm4sd0plKSxteWU7RCg4NTIsMSxQaCx0dHQpLGwuUWU9ZnVuY3Rpb24oZSl7YW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLFJrdCksIiIpLCJPcmRlciBJRCIpLCJUaGUgaWQgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIGFuIG9yZGVyIGZvciBub2RlcyBvZiBvbmUgcmFkaXVzLiBUaGlzIGNhbiBiZSB1c2VkIHRvIHNvcnQgdGhlbSBpbiB0aGUgbGF5ZXIgYWNjb3JkaW5nbHkuIiksZGUoMCkpLChIZygpLHhjKSksSGEpLG9uKCh0MSgpLHVhKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLGprdCksIiIpLCJSYWRpdXMiKSwiVGhlIHJhZGl1cyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBpbml0aWFsIHJhZGl1cyBmb3IgdGhlIHJhZGlhbCBsYXlvdXRlci4iKSwwKSwkbyksd2EpLG9uKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsVGN0KSwiIiksIkNvbXBhY3Rpb24iKSwiV2l0aCB0aGUgY29tcGFjdGVyIG9wdGlvbiBpdCBjYW4gYmUgZGV0ZXJtaW5lZCBob3cgY29tcGFjdGlvbiBvbiB0aGUgZ3JhcGggaXMgZG9uZS4gSXQgY2FuIGJlIGNob3NlbiBiZXR3ZWVuIG5vbmUsIHRoZSByYWRpYWwgY29tcGFjdGlvbiBvciB0aGUgY29tcGFjdGlvbiBvZiB3ZWRnZXMgc2VwYXJhdGVseS4iKSxwQ3QpLG1zKSxnQ3QpLG9uKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsX2N0KSwiIiksIkNvbXBhY3Rpb24gU3RlcCBTaXplIiksIkRldGVybWluZSB0aGUgc2l6ZSBvZiBzdGVwcyB3aXRoIHdoaWNoIHRoZSBjb21wYWN0aW9uIGlzIGRvbmUuIFN0ZXAgc2l6ZSAxIGNvcnJlbGF0ZXMgdG8gYSBjb21wYWN0aW9uIG9mIDEgcGl4ZWwgcGVyIEl0ZXJhdGlvbi4iKSxkZSgxKSkseGMpLEhhKSxvbihxbikpKSksYmEoZSxfY3QsVGN0LG51bGwpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSwka3QpLCIiKSwiU29ydGVyIiksIlNvcnQgdGhlIG5vZGVzIHBlciByYWRpdXMgYWNjb3JkaW5nIHRvIHRoZSBzb3J0aW5nIGFsZ29yaXRobS4gVGhlIHN0cmF0ZWdpZXMgYXJlIG5vbmUsIGJ5IHRoZSBnaXZlbiBvcmRlciBpZCwgb3Igc29ydGluZyB0aGVtIGJ5IHBvbGFyIGNvb3JkaW5hdGVzLiIpLHZDdCksbXMpLEFDdCksb24ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSx6a3QpLCIiKSwiQW5udWx1cyBXZWRnZSBDcml0ZXJpYSIpLCJEZXRlcm1pbmUgaG93IHRoZSB3ZWRnZSBmb3IgdGhlIG5vZGUgcGxhY2VtZW50IGlzIGNhbGN1bGF0ZWQuIEl0IGNhbiBiZSBjaG9zZW4gYmV0d2VlbiB3ZWRnZSBkZXRlcm1pbmF0aW9uIGJ5IHRoZSBudW1iZXIgb2YgbGVhdmVzIG9yIGJ5IHRoZSBtYXhpbXVtIHN1bSBvZiBkaWFnb25hbHMuIiksd0N0KSxtcyksaEN0KSxvbihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLHFrdCksIiIpLCJUcmFuc2xhdGlvbiBPcHRpbWl6YXRpb24iKSwiRmluZCB0aGUgb3B0aW1hbCB0cmFuc2xhdGlvbiBvZiB0aGUgbm9kZXMgb2YgdGhlIGZpcnN0IHJhZGlpIGFjY29yZGluZyB0byB0aGlzIGNyaXRlcmlhLiBGb3IgZXhhbXBsZSBlZGdlIGNyb3NzaW5ncyBjYW4gYmUgbWluaW1pemVkLiIpLGJDdCksbXMpLF9DdCksb24ocW4pKSkpLGhoZSgobmV3IFBCLGUpKX07dmFyIHl5ZSx4eWUscEN0LGt5ZSxiQ3QsRXllLFR5ZSxfeWUsdkN0LEN5ZSx3Q3Q7TihWQywiUmFkaWFsTWV0YURhdGFQcm92aWRlciIsODUyKSxEKDk5NiwxLFBoLFBCKSxsLlFlPWZ1bmN0aW9uKGUpe2hoZShlKX07dmFyIFJodCxqaHQsU3llLEF5ZSxMeWUsTXllLG1DdCx5Q3QsQ0csRHllLEl5ZSxTRyxCTyxPeWUseEN0O04oVkMsIlJhZGlhbE9wdGlvbnMiLDk5NiksRCg5OTcsMSx7fSxpWiksbC4kZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPW5ldyBrSHQsZX0sbC5fZT1mdW5jdGlvbihlKXt9LE4oVkMsIlJhZGlhbE9wdGlvbnMvUmFkaWFsRmFjdG9yeSIsOTk3KSxEKDM0MCwyMix7MzoxLDM1OjEsMjI6MSwzNDA6MX0sV1IpO3ZhciBrQ3QsRUN0LFRDdCwkaHQsX0N0PXpyKFZDLCJSYWRpYWxUcmFuc2xhdGlvblN0cmF0ZWd5IiwzNDAsVXIsJGluLG1KZSksTnllO0QoMjkzLDIyLHszOjEsMzU6MSwyMjoxLDI5MzoxfSwkZXQpO3ZhciBDQ3Qsemh0LFNDdCxBQ3Q9enIoVkMsIlNvcnRpbmdTdHJhdGVneSIsMjkzLFVyLEtybix5SmUpLFB5ZTtEKDE0NDksMSxWYyxxRiksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDMzKSxudWxsfSxsLnBmPWZ1bmN0aW9uKGUsbil7WWJuKHRoaXMsdShlLDMzKSxuKX0sbC5jPTAsTigib3JnLmVjbGlwc2UuZWxrLmFsZy5yYWRpYWwucDFwb3NpdGlvbiIsIkVhZGVzUmFkaWFsIiwxNDQ5KSxEKDE3NzUsMSx7fSxzWiksbC5qZz1mdW5jdGlvbihlKXtyZXR1cm4gUWllKGUpfSxOKE8xZSwiQW5udWx1c1dlZGdlQnlMZWFmcyIsMTc3NSksRCgxNzc2LDEse30sSEYpLGwuamc9ZnVuY3Rpb24oZSl7cmV0dXJuIGlhZSh0aGlzLGUpfSxOKE8xZSwiQW5udWx1c1dlZGdlQnlOb2RlU3BhY2UiLDE3NzYpLEQoMTQ1MCwxLFZjLFZGKSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzMpLG51bGx9LGwucGY9ZnVuY3Rpb24oZSxuKXtvZG4odGhpcyx1KGUsMzMpLG4pfSxOKCJvcmcuZWNsaXBzZS5lbGsuYWxnLnJhZGlhbC5wMnJvdXRpbmciLCJTdHJhaWdodExpbmVFZGdlUm91dGVyIiwxNDUwKSxEKDgxMSwxLHt9LHFwdCksbC5rZz1mdW5jdGlvbihlKXt9LGwubGc9ZnVuY3Rpb24oZSl7Unp0KHRoaXMsZSl9LE4oSGt0LCJJRFNvcnRlciIsODExKSxEKDE3NzQsMSxxaSxHRiksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBEb24odShlLDMzKSx1KG4sMzMpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGd0KHRoaXMpfSxOKEhrdCwiSURTb3J0ZXIvbGFtYmRhJDAkVHlwZSIsMTc3NCksRCgxNzczLDEse30sZW5lKSxsLmtnPWZ1bmN0aW9uKGUpe2NadCh0aGlzLGUpfSxsLmxnPWZ1bmN0aW9uKGUpe3ZhciBuO2UuZGMoKXx8KHRoaXMuZXx8KG49aVl0KHUoZS5YYigwKSwzMykpLGNadCh0aGlzLG4pKSxSenQodGhpcy5lLGUpKX0sTihIa3QsIlBvbGFyQ29vcmRpbmF0ZVNvcnRlciIsMTc3MyksRCgxMTM2LDIwOSxfMixhWiksbC5aZT1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFosYnQsTXQsU3QsanQsUXQsY2UsX2UsV2UsUWUsUm4sem4saHI7aWYobXIobiwiUmVjdGFuZ2xlIFBhY2tpbmciLDEpLG4ubiYmbi5uJiZlJiZnZihuLHBmKGUpLChPbCgpLHRoKSkscj1adCh2ZSh6ZShlLChYc3QoKSxHeWUpKSkpLFo9dSh6ZShlLHpDdCksMzgxKSxTdD1CZShGZSh6ZShlLFJDdCkpKSxfZT1CZShGZSh6ZShlLCRDdCkpKSxCPUJlKEZlKHplKGUsUEN0KSkpLFdlPXUoemUoZSxaeWUpLDExNiksY2U9WnQodmUoemUoZSx0M2UpKSksbz1CZShGZSh6ZShlLEhDdCkpKSxxPUJlKEZlKHplKGUsRkN0KSkpLE10PUJlKEZlKHplKGUsQkN0KSkpLGhyPVp0KHZlKHplKGUsVkN0KSkpLFJuPSghZS5hJiYoZS5hPW5ldyBoZShkcyxlLDEwLDExKSksZS5hKSx0bmUoUm4pLE10KXtmb3IoVz1uZXcgbGUsaz1uZXcgbnIoUm4pO2suZSE9ay5pLmdjKCk7KWQ9dShkcihrKSwzMyksczIoZCxSTykmJihXLmNbVy5jLmxlbmd0aF09ZCk7Zm9yKF89bmV3IFMoVyk7Xy5hPF8uYy5jLmxlbmd0aDspZD11KFEoXyksMzMpLGokKFJuLGQpO2ZvcihwbigpLGFhKFcsbmV3IG9aKSxNPW5ldyBTKFcpO00uYTxNLmMuYy5sZW5ndGg7KWQ9dShRKE0pLDMzKSxRZT11KHplKGQsUk8pLDE5KS5hLFFlPWIuTWF0aC5taW4oUWUsUm4uaSksSl8oUm4sUWUsZCk7Zm9yKGJ0PTAsdz1uZXcgbnIoUm4pO3cuZSE9dy5pLmdjKCk7KWQ9dShkcih3KSwzMyksRW8oZCxOQ3QsZGUoYnQpKSwrK2J0fVF0PXo0dChlKSxRdC5hLT1XZS5iK1dlLmMsUXQuYi09V2UuZCtXZS5hLGp0PVF0LmEsaHI8MHx8aHI8UXQuYT8oRz1uZXcgdkt0KHIsWixTdCksaD1Dd24oRyxSbixjZSxXZSksbi5uJiZuLm4mJmUmJmdmKG4scGYoZSksKE9sKCksdGgpKSk6aD1uZXcgQ250KHIsaHIsMCwodzcoKSxIUykpLFF0LmErPVdlLmIrV2UuYyxRdC5iKz1XZS5kK1dlLmEsX2V8fCh0bmUoUm4pLHpuPW5ldyBBWnQocixCLHEsbyxjZSksanQ9Yi5NYXRoLm1heChRdC5hLGguYyksaD1pNG4oem4sUm4sanQsUXQsbixlLFdlKSkscmNuKFJuLFdlKSxndyhlLGguYysoV2UuYitXZS5jKSxoLmIrKFdlLmQrV2UuYSksITEsITApLEJlKEZlKHplKGUsakN0KSkpfHx1JCgocz1uZXcgcnIoKERtKCksbmV3IFNtKGUpKSkscykpLG4ubiYmbi5uJiZlJiZnZihuLHBmKGUpLChPbCgpLHRoKSksb3Iobil9LE4oQjFlLCJSZWN0UGFja2luZ0xheW91dFByb3ZpZGVyIiwxMTM2KSxEKDExMzcsMSxxaSxvWiksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBLY24odShlLDMzKSx1KG4sMzMpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGd0KHRoaXMpfSxOKEIxZSwiUmVjdFBhY2tpbmdMYXlvdXRQcm92aWRlci9sYW1iZGEkMCRUeXBlIiwxMTM3KSxEKDEyNTYsMSx7fSx2S3QpLGwuYT0wLGwuYz0hMSxOKGRILCJBcmVhQXBwcm94aW1hdGlvbiIsMTI1Nik7dmFyIExDdD1hcyhkSCwiQmVzdENhbmRpZGF0ZUZpbHRlciIpO0QoNjM4LDEsezUyNjoxfSxVOSksbC5tZz1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoLGQsdyxrO2ZvcihrPW5ldyBsZSxoPWJzLHc9bmV3IFMoZSk7dy5hPHcuYy5jLmxlbmd0aDspZD11KFEodyksMjIwKSxoPWIuTWF0aC5taW4oaCwoZC5jKyhyLmIrci5jKSkqKGQuYisoci5kK3IuYSkpKTtmb3Iobz1uZXcgUyhlKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoUShvKSwyMjApLChzLmMrKHIuYityLmMpKSoocy5iKyhyLmQrci5hKSk9PWgmJihrLmNbay5jLmxlbmd0aF09cyk7cmV0dXJuIGt9LE4oZEgsIkFyZWFGaWx0ZXIiLDYzOCksRCg2MzksMSx7NTI2OjF9LE5MKSxsLm1nPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLGgsZCx3LGs7Zm9yKHc9bmV3IGxlLGs9YnMsZD1uZXcgUyhlKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoUShkKSwyMjApLGs9Yi5NYXRoLm1pbihrLGIuTWF0aC5hYnMoKGguYysoci5iK3IuYykpLyhoLmIrKHIuZCtyLmEpKS1uKSk7Zm9yKG89bmV3IFMoZSk7by5hPG8uYy5jLmxlbmd0aDspcz11KFEobyksMjIwKSxiLk1hdGguYWJzKChzLmMrKHIuYityLmMpKS8ocy5iKyhyLmQrci5hKSktbik9PWsmJih3LmNbdy5jLmxlbmd0aF09cyk7cmV0dXJuIHd9LE4oZEgsIkFzcGVjdFJhdGlvRmlsdGVyIiw2MzkpLEQoNjM3LDEsezUyNjoxfSxXOSksbC5tZz1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoLGQsdyxrO2ZvcihrPW5ldyBsZSxoPU5zLHc9bmV3IFMoZSk7dy5hPHcuYy5jLmxlbmd0aDspZD11KFEodyksMjIwKSxoPWIuTWF0aC5tYXgoaCxqdnQoZC5jKyhyLmIrci5jKSxkLmIrKHIuZCtyLmEpLGQuYSkpO2ZvcihvPW5ldyBTKGUpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShRKG8pLDIyMCksanZ0KHMuYysoci5iK3IuYykscy5iKyhyLmQrci5hKSxzLmEpPT1oJiYoay5jW2suYy5sZW5ndGhdPXMpO3JldHVybiBrfSxOKGRILCJTY2FsZU1lYXN1cmVGaWx0ZXIiLDYzNyksRCgzODEsMjIsezM6MSwzNToxLDIyOjEsMzgxOjF9LHpldCk7dmFyIE1DdCxEQ3QscWh0LElDdD16cihDY3QsIk9wdGltaXphdGlvbkdvYWwiLDM4MSxVcixXcm4seEplKSxGeWU7RCg4NTYsMSxQaCxqQiksbC5RZT1mdW5jdGlvbihlKXthbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsVmt0KSwiIiksIk9wdGltaXphdGlvbiBHb2FsIiksIk9wdGltaXphdGlvbiBnb2FsIGZvciBhcHByb3hpbWF0aW9uIG9mIHRoZSBib3VuZGluZyBib3ggZ2l2ZW4gYnkgdGhlIGZpcnN0IGl0ZXJhdGlvbi4gRGV0ZXJtaW5lcyB3aGV0aGVyIGxheW91dCBpcyBzb3J0ZWQgYnkgdGhlIG1heGltdW0gc2NhbGluZywgYXNwZWN0IHJhdGlvLCBvciBhcmVhLiBEZXBlbmRpbmcgb24gdGhlIHN0cmF0ZWd5IHRoZSBhc3BlY3QgcmF0aW8gbWlnaHQgYmUgbmVhcmx5IGlnbm9yZWQuIiksT0N0KSwoSGcoKSxtcykpLElDdCksb24oKHQxKCksdWEpKSkpKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsR2t0KSwiIiksIlNoaWZ0IExhc3QgUGxhY2VkLiIpLCJXaGVuIHBsYWNpbmcgYSByZWN0YW5nbGUgYmVoaW5kIG9yIGJlbG93IHRoZSBsYXN0IHBsYWNlZCByZWN0YW5nbGUgaW4gdGhlIGZpcnN0IGl0ZXJhdGlvbiwgaXQgaXMgc29tZXRpbWVzIHBvc3NpYmxlIHRvIHNoaWZ0IHRoZSByZWN0YW5nbGUgZnVydGhlciB0byB0aGUgbGVmdCBvciByaWdodCwgcmVzdWx0aW5nIGluIGxlc3Mgd2hpdGVzcGFjZS4gVHJ1ZSAoZGVmYXVsdCkgZW5hYmxlcyB0aGUgc2hpZnQgYW5kIGZhbHNlIGRpc2FibGVzIGl0LiBEaXNhYmxpbmcgdGhlIHNoaWZ0IHByb2R1Y2VzIGEgZ3JlYXRlciBhcHByb3hpbWF0ZWQgYXJlYSBieSB0aGUgZmlyc3QgaXRlcmF0aW9uIGFuZCBhIGxheW91dCwgd2hlbiB1c2luZyBPTkxZIHRoZSBmaXJzdCBpdGVyYXRpb24gKGRlZmF1bHQgbm90IHRoZSBjYXNlKSwgd2hlcmUgaXQgaXMgc29tZXRpbWVzIGltcG9zc2libGUgdG8gaW1wbGVtZW50IGEgc2l6ZSB0cmFuc2Zvcm1hdGlvbiBvZiByZWN0YW5nbGVzIHRoYXQgd2lsbCBmaWxsIHRoZSBib3VuZGluZyBib3ggYW5kIGVsaW1pbmF0ZSBlbXB0eSBzcGFjZXMuIiksKEZuKCksITApKSxQYSksV3MpLG9uKHVhKSkpKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsVWt0KSwiIiksIkN1cnJlbnQgcG9zaXRpb24gb2YgYSBub2RlIGluIHRoZSBvcmRlciBvZiBub2RlcyIpLCJUaGUgcmVjdGFuZ2xlcyBhcmUgb3JkZXJlZC4gTm9ybWFsbHkgYWNjb3JkaW5nIHRvIHRoZWlyIGRlZmluaXRpb24gdGhlIHRoZSBtb2RlbC4gVGhpcyBvcHRpb24gc3BlY2lmaWVzIHRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIGEgbm9kZS4iKSxkZSgtMSkpLHhjKSxIYSksb24odWEpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxXa3QpLCIiKSwiRGVzaXJlZCBpbmRleCBvZiBub2RlIiksIlRoZSByZWN0YW5nbGVzIGFyZSBvcmRlcmVkLiBOb3JtYWxseSBhY2NvcmRpbmcgdG8gdGhlaXIgZGVmaW5pdGlvbiB0aGUgdGhlIG1vZGVsLiBUaGlzIG9wdGlvbiBhbGxvd3MgdG8gc3BlY2lmeSBhIGRlc2lyZWQgcG9zaXRpb24gdGhhdCBoYXMgcHJlZmVyZW5jZSBvdmVyIHRoZSBvcmlnaW5hbCBwb3NpdGlvbi4iKSxkZSgtMSkpLHhjKSxIYSksb24odWEpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxLa3QpLCIiKSwiT25seSBBcmVhIEFwcHJveGltYXRpb24iKSwiSWYgZW5hYmxlZCBvbmx5IHRoZSB3aWR0aCBhcHByb3hpbWF0aW9uIHN0ZXAgaXMgZXhlY3V0ZWQgYW5kIHRoZSBub2RlcyBhcmUgcGxhY2VkIGFjY29yZGluZ2x5LiBUaGUgbm9kZXMgYXJlIGxheW91dGVkIGFjY29yZGluZyB0byB0aGUgcGFja2luZ1N0cmF0ZWd5LiBJZiBzZXQgdG8gdHJ1ZSBub3QgZXhwYW5zaW9uIG9mIG5vZGVzIGlzIHRha2luZyBwbGFjZS4iKSwhMSksUGEpLFdzKSxvbih1YSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLFlrdCksIiIpLCJDb21wYWN0IFJvd3MiKSwiRW5hYmxlcyBjb21wYWN0aW9uLiBDb21wYWN0cyBibG9ja3MgaWYgdGhleSBkbyBub3QgdXNlIHRoZSBmdWxsIGhlaWdodCBvZiB0aGUgcm93LiBUaGlzIG9wdGlvbiBhbGxvd3MgdG8gaGF2ZSBhIHNtYWxsZXIgZHJhd2luZy4gSWYgdGhpcyBvcHRpb24gaXMgZGlzYWJsZWQgYWxsIG5vZGVzIGFyZSBwbGFjZWQgbmV4dCB0byBlYWNoIG90aGVyIGluIHJvd3MuIiksITApLFBhKSxXcyksb24odWEpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxTY3QpLCIiKSwiRml0IEFzcGVjdCBSYXRpbyIpLCJFeHBhbmRzIG5vZGVzIGlmIGV4cGFuZE5vZGVzIGlzIHRydWUgdG8gZml0IHRoZSBhc3BlY3QgcmF0aW8gaW5zdGVhZCBvZiBvbmx5IGluIHRoZWlyIGJvdW5kcy4gVGhlIG9wdGlvbiBpcyBvbmx5IHVzZWZ1bCBpZiB0aGUgdXNlZCBwYWNraW5nU3RyYXRlZ3kgaXMgQVNQRUNUX1JBVElPX0RSSVZFTiwgb3RoZXJ3aXNlIHRoaXMgbWF5IHJlc3VsdCBpbiB1bnJlYXNvbmFibGUgbmRvZSBleHBhbnNpb24uIiksITEpLFBhKSxXcyksb24odWEpKSkpLGJhKGUsU2N0LGdILG51bGwpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxYa3QpLCIiKSwiVGFyZ2V0IFdpZHRoIiksIk9wdGlvbiB0byBwbGFjZSB0aGUgcmVjdGFuZ2xlcyBpbiB0aGUgZ2l2ZW4gdGFyZ2V0IHdpZHRoIGluc3RlYWQgb2YgYXBwcm94aW1hdGluZyB0aGUgd2lkdGggdXNpbmcgdGhlIGRlc2lyZWQgYXNwZWN0IHJhdGlvLiBUaGUgcGFkZGluZyBpcyBub3QgaW5jbHVkZWQgaW4gdGhpcy4gTWVhbmluZyBhIGRyYXdpbmcgd2lsbCBoYXZlIHdpZHRoIG9mIHRhcmdldHdpZHRoICsgaG9yaXpvbnRhbCBwYWRkaW5nLiIpLC0xKSwkbyksd2EpLG9uKHVhKSkpKSxPaGUoKG5ldyBQayxlKSl9O3ZhciBCeWUsUnllLGp5ZSwkeWUsenllLHF5ZSxPQ3QsSHllLFZ5ZTtOKENjdCwiUmVjdFBhY2tpbmdNZXRhRGF0YVByb3ZpZGVyIiw4NTYpLEQoMTAwNCwxLFBoLFBrKSxsLlFlPWZ1bmN0aW9uKGUpe09oZShlKX07dmFyIEd5ZSxVeWUsTkN0LFJPLFBDdCxGQ3QsQkN0LFd5ZSxSQ3QsS3llLFl5ZSxYeWUsUXllLGpDdCwkQ3QsekN0LFp5ZSxxQ3QsSnllLEhDdCx0M2UsVkN0O04oQ2N0LCJSZWN0UGFja2luZ09wdGlvbnMiLDEwMDQpLEQoMTAwNSwxLHt9LGNaKSxsLiRlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9bmV3IGFaLGV9LGwuX2U9ZnVuY3Rpb24oZSl7fSxOKENjdCwiUmVjdFBhY2tpbmdPcHRpb25zL1JlY3RwYWNraW5nRmFjdG9yeSIsMTAwNSksRCgxMjU3LDEse30sQVp0KSxsLmE9MCxsLmI9ITEsbC5jPTAsbC5kPTAsbC5lPSExLGwuZj0hMSxsLmc9MCxOKCJvcmcuZWNsaXBzZS5lbGsuYWxnLnJlY3RwYWNraW5nLnNlY29uZGl0ZXJhdGlvbiIsIlJvd0ZpbGxpbmdBbmRDb21wYWN0aW9uIiwxMjU3KSxEKDE4NywxLHsxODc6MX0sRWl0KSxsLmE9MCxsLmM9ITEsbC5kPTAsbC5lPTAsbC5mPTAsbC5nPTAsbC5pPTAsbC5rPSExLGwubz1icyxsLnA9YnMsbC5yPTAsbC5zPTAsbC50PTAsTihZSSwiQmxvY2siLDE4NyksRCgyMTEsMSx7MjExOjF9LGYkKSxsLmE9MCxsLmI9MCxsLmQ9MCxsLmU9MCxsLmY9MCxOKFlJLCJCbG9ja1JvdyIsMjExKSxEKDQ0MywxLHs0NDM6MX0sSXd0KSxsLmI9MCxsLmM9MCxsLmQ9MCxsLmU9MCxsLmY9MCxOKFlJLCJCbG9ja1N0YWNrIiw0NDMpLEQoMjIwLDEsezIyMDoxfSxDbnQsYTN0KSxsLmE9MCxsLmI9MCxsLmM9MCxsLmQ9MCxsLmU9MDt2YXIgdjZuPU4oWUksIkRyYXdpbmdEYXRhIiwyMjApO0QoMzU1LDIyLHszOjEsMzU6MSwyMjoxLDM1NToxfSxDTSk7dmFyIEJ4LHI1LHpTLHFTLEhTLGUzZT16cihZSSwiRHJhd2luZ0RhdGFEZXNjcmlwdG9yIiwzNTUsVXIsRXNuLGtKZSksbjNlO0QoMjAwLDEsezIwMDoxfSxxd3QpLGwuYj0wLGwuYz0wLGwuZT0wLGwuZj0wLE4oWUksIlJlY3RSb3ciLDIwMCksRCg3NTYsMSx7fSxCeXQpLGwuaj0wLE4oX3ksWmZlLDc1NiksRCgxMjQ1LDEse30sdVopLGwuSmU9ZnVuY3Rpb24oZSl7cmV0dXJuIEdwKGUuYSxlLmIpfSxOKF95LEpmZSwxMjQ1KSxEKDEyNDYsMSx7fSxEJHQpLGwuSmU9ZnVuY3Rpb24oZSl7cmV0dXJuIE1zbih0aGlzLmEsZSl9LE4oX3ksdDFlLDEyNDYpLEQoMTI0NywxLHt9LEkkdCksbC5KZT1mdW5jdGlvbihlKXtyZXR1cm4gQmhuKHRoaXMuYSxlKX0sTihfeSxlMWUsMTI0NyksRCgxMjQ4LDEse30sTyR0KSxsLkplPWZ1bmN0aW9uKGUpe3JldHVybiBPY24odGhpcy5hLGUpfSxOKF95LCJFbGtHcmFwaEltcG9ydGVyL2xhbWJkYSQzJFR5cGUiLDEyNDgpLEQoMTI0OSwxLHt9LE4kdCksbC5KZT1mdW5jdGlvbihlKXtyZXR1cm4gdnBuKHRoaXMuYSxlKX0sTihfeSxuMWUsMTI0OSksRCgxMTMzLDIwOSxfMixUSHQpLGwuWmU9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG8saCxkLHcsayxfLE0sQixxLEc7Zm9yKHMyKGUsKHJJKCksSUcpKSYmKEc9anIoemUoZSwoaHN0KCksaFN0KSkpLGg9b2F0KGo4KCksRyksaCYmKGQ9dShmcnQoaC5mKSwyMDkpLGQuWmUoZSx6YyhuLDEpKSkpLEVvKGUsWWh0LChoRCgpLERHKSksRW8oZSxYaHQsKGlJKCksS2h0KSksRW8oZSxRaHQsKE5EKCksT0cpKSx3PXUoemUoZSwoaHN0KCksY1N0KSksMTkpLmEsbXIobiwiT3ZlcmxhcCByZW1vdmFsIiwxKSxCZShGZSh6ZShlLGszZSkpKSxrPW5ldyBRcyxfPW5ldyBQJHQoaykscz1uZXcgQnl0LHI9TmhlKHMsZSksTT0hMCxvPTA7bzx3JiZNOyl7aWYoQmUoRmUoemUoZSx1U3QpKSkpe2lmKGsuYS4kYigpLGdnbihuZXcga1V0KF8pLHIuaSksay5hLmdjKCk9PTApYnJlYWs7ci5lPWt9Zm9yKHckKHRoaXMuYiksVWQodGhpcy5iLChWRCgpLEFHKSwoSFQoKSxqTykpLFVkKHRoaXMuYixMRyxyLmcpLFVkKHRoaXMuYixNRywoRFIoKSxHaHQpKSx0aGlzLmE9VHEodGhpcy5iLHIpLHE9bmV3IFModGhpcy5hKTtxLmE8cS5jLmMubGVuZ3RoOylCPXUoUShxKSw1MSksQi5wZihyLHpjKG4sMSkpO0QxbihzLHIpLE09QmUoRmUoSyhyLChxOCgpLEo3dCkpKSksKytvfVlsZShzLHIpLG9yKG4pfSxOKF95LCJPdmVybGFwUmVtb3ZhbExheW91dFByb3ZpZGVyIiwxMTMzKSxEKDExMzQsMSx7fSxQJHQpLE4oX3ksIk92ZXJsYXBSZW1vdmFsTGF5b3V0UHJvdmlkZXIvbGFtYmRhJDAkVHlwZSIsMTEzNCksRCg0MzcsMjIsezM6MSwzNToxLDIyOjEsNDM3OjF9LHFldCk7dmFyIEFHLExHLE1HLEhodD16cihfeSwiU1BPckVQaGFzZXMiLDQzNyxVcixZcm4sRUplKSxyM2U7RCgxMjU1LDEse30sX0h0KSxOKF95LCJTaHJpbmtUcmVlIiwxMjU1KSxEKDExMzUsMjA5LF8yLE1xdCksbC5aZT1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoLGQ7czIoZSwockkoKSxJRykpJiYoZD1qcih6ZShlLElHKSksbz1vYXQoajgoKSxkKSxvJiYoaD11KGZydChvLmYpLDIwOSksaC5aZShlLHpjKG4sMSkpKSkscz1uZXcgQnl0LHI9TmhlKHMsZSksdDJuKHRoaXMuYSxyLHpjKG4sMSkpLFlsZShzLHIpfSxOKF95LCJTaHJpbmtUcmVlTGF5b3V0UHJvdmlkZXIiLDExMzUpLEQoMzAwLDEzNCx7MzoxLDMwMDoxLDk0OjEsMTM0OjF9LGlRdCksbC5jPSExLE4oIm9yZy5lY2xpcHNlLmVsay5hbGcuc3BvcmUuZ3JhcGgiLCJHcmFwaCIsMzAwKSxEKDQ4MiwyMix7MzoxLDM1OjEsMjI6MSw0ODI6MSwyNDY6MSwyMzQ6MX0seFZ0KSxsLktmPWZ1bmN0aW9uKCl7cmV0dXJuIG9yZSh0aGlzKX0sbC5YZj1mdW5jdGlvbigpe3JldHVybiBvcmUodGhpcyl9O3ZhciBWaHQsR0N0PXpyKEN5LFg2dCw0ODIsVXIsYW5uLFRKZSksaTNlO0QoNTUxLDIyLHszOjEsMzU6MSwyMjoxLDU1MToxLDI0NjoxLDIzNDoxfSx4V3QpLGwuS2Y9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFVGfSxsLlhmPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBVRn07dmFyIEdodCxzM2U9enIoQ3ksIk92ZXJsYXBSZW1vdmFsU3RyYXRlZ3kiLDU1MSxVcixvbm4sX0plKSxhM2U7RCg0MzAsMjIsezM6MSwzNToxLDIyOjEsNDMwOjF9LHFidCk7dmFyIERHLFVodCxVQ3Q9enIoQ3ksIlJvb3RTZWxlY3Rpb24iLDQzMCxVcixKbm4sQ0plKSxvM2U7RCgzMTYsMjIsezM6MSwzNToxLDIyOjEsMzE2OjF9LFNNKTt2YXIgV0N0LFdodCxLaHQsS0N0LFlDdCxYQ3Q9enIoQ3ksIlNwYW5uaW5nVHJlZUNvc3RGdW5jdGlvbiIsMzE2LFVyLHlzbixTSmUpLGMzZTtEKDEwMDIsMSxQaCxGQiksbC5RZT1mdW5jdGlvbihlKXtfbGUoZSl9O3ZhciBRQ3QsWkN0LHUzZSxsM2UsSkN0LHRTdCxZaHQsWGh0LFFodCxoM2UsZjNlLElHO04oQ3ksIlNwb3JlQ29tcGFjdGlvbk9wdGlvbnMiLDEwMDIpLEQoMTAwMywxLHt9LFBMKSxsLiRlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9bmV3IE1xdCxlfSxsLl9lPWZ1bmN0aW9uKGUpe30sTihDeSwiU3BvcmVDb21wYWN0aW9uT3B0aW9ucy9TcG9yZUNvbXBhY3Rpb25GYWN0b3J5IiwxMDAzKSxEKDg1NSwxLFBoLEJCKSxsLlFlPWZ1bmN0aW9uKGUpe2FuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSxBY3QpLCIiKSwiVW5kZXJseWluZyBMYXlvdXQgQWxnb3JpdGhtIiksIkEgbGF5b3V0IGFsZ29yaXRobSB0aGF0IGlzIGFwcGxpZWQgdG8gdGhlIGdyYXBoIGJlZm9yZSBpdCBpcyBjb21wYWN0ZWQuIElmIHRoaXMgaXMgbnVsbCwgbm90aGluZyBpcyBhcHBsaWVkIGJlZm9yZSBjb21wYWN0aW9uLiIpLChIZygpLGtFKSksTGUpLG9uKCh0MSgpLHFuKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLERjdCksInN0cnVjdHVyZSIpLCJTdHJ1Y3R1cmUgRXh0cmFjdGlvbiBTdHJhdGVneSIpLCJUaGlzIG9wdGlvbiBkZWZpbmVzIHdoYXQga2luZCBvZiB0cmlhbmd1bGF0aW9uIG9yIG90aGVyIHBhcnRpdGlvbmluZyBvZiB0aGUgcGxhbmUgaXMgYXBwbGllZCB0byB0aGUgdmVydGljZXMuIiksYVN0KSxtcyksZlN0KSxvbihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLFFrdCksSWN0KSwiVHJlZSBDb25zdHJ1Y3Rpb24gU3RyYXRlZ3kiKSwiV2hldGhlciBhIG1pbmltdW0gc3Bhbm5pbmcgdHJlZSBvciBhIG1heGltdW0gc3Bhbm5pbmcgdHJlZSBzaG91bGQgYmUgY29uc3RydWN0ZWQuIiksaVN0KSxtcyksZ1N0KSxvbihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLFprdCksSWN0KSwiQ29zdCBGdW5jdGlvbiBmb3IgU3Bhbm5pbmcgVHJlZSIpLCJUaGUgY29zdCBmdW5jdGlvbiBpcyB1c2VkIGluIHRoZSBjcmVhdGlvbiBvZiB0aGUgc3Bhbm5pbmcgdHJlZS4iKSxyU3QpLG1zKSxYQ3QpLG9uKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsTGN0KSxJY3QpLCJSb290IG5vZGUgZm9yIHNwYW5uaW5nIHRyZWUgY29uc3RydWN0aW9uIiksIlRoZSBpZGVudGlmaWVyIG9mIHRoZSBub2RlIHRoYXQgaXMgcHJlZmVycmVkIGFzIHRoZSByb290IG9mIHRoZSBzcGFubmluZyB0cmVlLiBJZiB0aGlzIGlzIG51bGwsIHRoZSBmaXJzdCBub2RlIGlzIGNob3Nlbi4iKSxudWxsKSxrRSksTGUpLG9uKHFuKSkpKSxiYShlLExjdCxNY3QsdzNlKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsTWN0KSxJY3QpLCJSb290IHNlbGVjdGlvbiBmb3Igc3Bhbm5pbmcgdHJlZSIpLCJUaGlzIHNldHMgdGhlIG1ldGhvZCB1c2VkIHRvIHNlbGVjdCBhIHJvb3Qgbm9kZSBmb3IgdGhlIGNvbnN0cnVjdGlvbiBvZiBhIHNwYW5uaW5nIHRyZWUiKSxuU3QpLG1zKSxVQ3QpLG9uKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsSmt0KSxXeHQpLCJDb21wYWN0aW9uIFN0cmF0ZWd5IiksIlRoaXMgb3B0aW9uIGRlZmluZXMgaG93IHRoZSBjb21wYWN0aW9uIGlzIGFwcGxpZWQuIiksZVN0KSxtcyksR0N0KSxvbihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLHQ4dCksV3h0KSwiT3J0aG9nb25hbCBDb21wYWN0aW9uIiksIlJlc3RyaWN0cyB0aGUgdHJhbnNsYXRpb24gb2Ygbm9kZXMgdG8gb3J0aG9nb25hbCBkaXJlY3Rpb25zIGluIHRoZSBjb21wYWN0aW9uIHBoYXNlLiIpLChGbigpLCExKSksUGEpLFdzKSxvbihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLGU4dCksUjFlKSwiVXBwZXIgbGltaXQgZm9yIGl0ZXJhdGlvbnMgb2Ygb3ZlcmxhcCByZW1vdmFsIiksbnVsbCksZGUoNjQpKSx4YyksSGEpLG9uKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsbjh0KSxSMWUpLCJXaGV0aGVyIHRvIHJ1biBhIHN1cHBsZW1lbnRhcnkgc2NhbmxpbmUgb3ZlcmxhcCBjaGVjay4iKSxudWxsKSwhMCksUGEpLFdzKSxvbihxbikpKSksRHVlKChuZXcgUkIsZSkpLF9sZSgobmV3IEZCLGUpKX07dmFyIGQzZSxlU3QsZzNlLHAzZSxiM2UsdjNlLHczZSxtM2UsblN0LHkzZSxyU3QseDNlLGlTdCxzU3QsYVN0LG9TdDtOKEN5LCJTcG9yZU1ldGFEYXRhUHJvdmlkZXIiLDg1NSksRChWZywxLFBoLFJCKSxsLlFlPWZ1bmN0aW9uKGUpe0R1ZShlKX07dmFyIGszZSxjU3QsdVN0LGxTdCxFM2UsaFN0O04oQ3ksIlNwb3JlT3ZlcmxhcFJlbW92YWxPcHRpb25zIixWZyksRCgxMDAxLDEse30sbFopLGwuJGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1uZXcgVEh0LGV9LGwuX2U9ZnVuY3Rpb24oZSl7fSxOKEN5LCJTcG9yZU92ZXJsYXBSZW1vdmFsT3B0aW9ucy9TcG9yZU92ZXJsYXBGYWN0b3J5IiwxMDAxKSxEKDUzMCwyMix7MzoxLDM1OjEsMjI6MSw1MzA6MSwyNDY6MSwyMzQ6MX0saFh0KSxsLktmPWZ1bmN0aW9uKCl7cmV0dXJuIGNyZSh0aGlzKX0sbC5YZj1mdW5jdGlvbigpe3JldHVybiBjcmUodGhpcyl9O3ZhciBqTyxmU3Q9enIoQ3ksIlN0cnVjdHVyZUV4dHJhY3Rpb25TdHJhdGVneSIsNTMwLFVyLGNubixBSmUpLFQzZTtEKDQyOSwyMix7MzoxLDM1OjEsMjI6MSw0Mjk6MSwyNDY6MSwyMzQ6MX0sSGJ0KSxsLktmPWZ1bmN0aW9uKCl7cmV0dXJuIHJpZSh0aGlzKX0sbC5YZj1mdW5jdGlvbigpe3JldHVybiByaWUodGhpcyl9O3ZhciBkU3QsT0csZ1N0PXpyKEN5LCJUcmVlQ29uc3RydWN0aW9uU3RyYXRlZ3kiLDQyOSxVcixabm4sTEplKSxfM2U7RCgxNDQzLDEsVmMsaFopLGwuWWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwzMDApLG5ldyBac30sbC5wZj1mdW5jdGlvbihlLG4pe3oxbih1KGUsMzAwKSxuKX0sTihqMWUsIkRlbGF1bmF5VHJpYW5ndWxhdGlvblBoYXNlIiwxNDQzKSxEKDE0NDQsMSxLbixGJHQpLGwudGQ9ZnVuY3Rpb24oZSl7dWUodGhpcy5hLHUoZSw2NSkuYSl9LE4oajFlLCJEZWxhdW5heVRyaWFuZ3VsYXRpb25QaGFzZS9sYW1iZGEkMCRUeXBlIiwxNDQ0KSxEKDc4MywxLFZjLHpwdCksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDMwMCksbmV3IFpzfSxsLnBmPWZ1bmN0aW9uKGUsbil7dGhpcy5uZyh1KGUsMzAwKSxuKX0sbC5uZz1mdW5jdGlvbihlLG4pe3ZhciByLHMsbzttcihuLCJNaW5pbXVtIHNwYW5uaW5nIHRyZWUgY29uc3RydWN0aW9uIiwxKSxlLmQ/cz1lLmQuYTpzPXUoUGUoZS5pLDApLDY1KS5hLEJlKEZlKEsoZSwocTgoKSx1UykpKSk/bz1TYXQoZS5lLHMsKHI9ZS5iLHIpKTpvPVNhdChlLmUscyxlLmIpLEhuZSh0aGlzLG8sZSksb3Iobil9LE4oT2N0LCJNaW5TVFBoYXNlIiw3ODMpLEQoMTQ0Niw3ODMsVmMsZ3F0KSxsLm5nPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLGg7bXIobiwiTWF4aW11bSBzcGFubmluZyB0cmVlIGNvbnN0cnVjdGlvbiIsMSkscj1uZXcgQiR0KGUpLGUuZD9vPWUuZC5jOm89dShQZShlLmksMCksNjUpLmMsQmUoRmUoSyhlLChxOCgpLHVTKSkpKT9oPVNhdChlLmUsbywocz1yLHMpKTpoPVNhdChlLmUsbyxyKSxIbmUodGhpcyxoLGUpLG9yKG4pfSxOKE9jdCwiTWF4U1RQaGFzZSIsMTQ0NiksRCgxNDQ3LDEse30sQiR0KSxsLkplPWZ1bmN0aW9uKGUpe3JldHVybiBEWWUodGhpcy5hLGUpfSxOKE9jdCwiTWF4U1RQaGFzZS9sYW1iZGEkMCRUeXBlIiwxNDQ3KSxEKDE0NDUsMSxLbixSJHQpLGwudGQ9ZnVuY3Rpb24oZSl7a1hlKHRoaXMuYSx1KGUsNjUpKX0sTihPY3QsIk1pblNUUGhhc2UvbGFtYmRhJDAkVHlwZSIsMTQ0NSksRCg3ODUsMSxWYyxVRiksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDMwMCksbmV3IFpzfSxsLnBmPWZ1bmN0aW9uKGUsbil7dDBuKHRoaXMsdShlLDMwMCksbil9LGwuYT0hMSxOKE5jdCwiR3Jvd1RyZWVQaGFzZSIsNzg1KSxEKDc4NiwxLEtuLHZ2dCksbC50ZD1mdW5jdGlvbihlKXt2Y24odGhpcy5hLHRoaXMuYix0aGlzLmMsdShlLDIyMSkpfSxOKE5jdCwiR3Jvd1RyZWVQaGFzZS9sYW1iZGEkMCRUeXBlIiw3ODYpLEQoMTQ0OCwxLFZjLGZaKSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzAwKSxuZXcgWnN9LGwucGY9ZnVuY3Rpb24oZSxuKXt1Zm4odGhpcyx1KGUsMzAwKSxuKX0sTihOY3QsIlNocmlua1RyZWVDb21wYWN0aW9uUGhhc2UiLDE0NDgpLEQoNzg0LDEsS24sd3Z0KSxsLnRkPWZ1bmN0aW9uKGUpe3pwbih0aGlzLmEsdGhpcy5iLHRoaXMuYyx1KGUsMjIxKSl9LE4oTmN0LCJTaHJpbmtUcmVlQ29tcGFjdGlvblBoYXNlL2xhbWJkYSQwJFR5cGUiLDc4NCk7dmFyIHBTdD1hcyhBYywiSUdyYXBoRWxlbWVudFZpc2l0b3IiKTtEKDg2MCwxLHs1Mjc6MX0sSlF0KSxsLm9nPWZ1bmN0aW9uKGUpe3ZhciBuO249V3ZuKHRoaXMsZSksQm8obix1KHRyKHRoaXMuYixlKSw5NCkpLEdibih0aGlzLGUsbil9O3ZhciBDM2UsUzNlO04oQTQsIkxheW91dENvbmZpZ3VyYXRvciIsODYwKTt2YXIgdzZuPWFzKEE0LCJMYXlvdXRDb25maWd1cmF0b3IvSVByb3BlcnR5SG9sZGVyT3B0aW9uRmlsdGVyIik7RCg5MzIsMSx7MTkzMzoxfSxkWiksbC5wZz1mdW5jdGlvbihlLG4pe3JldHVybiBYNigpLCFlLlhlKG4pfSxOKEE0LCJMYXlvdXRDb25maWd1cmF0b3IvbGFtYmRhJDAkVHlwZSIsOTMyKSxEKDkzMywxLHsxOTMzOjF9LGdaKSxsLnBnPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHlIdChlLG4pfSxOKEE0LCJMYXlvdXRDb25maWd1cmF0b3IvbGFtYmRhJDEkVHlwZSIsOTMzKSxEKDkzMSwxLHs4MzE6MX0scFopLGwucWc9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gWDYoKSwhZS5YZShuKX0sTihBNCwiTGF5b3V0Q29uZmlndXJhdG9yL2xhbWJkYSQyJFR5cGUiLDkzMSksRCg5MzQsMSxnaSxpR3QpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIFdlbih0aGlzLmEsdGhpcy5iLHUoZSwxOTMzKSl9LE4oQTQsIkxheW91dENvbmZpZ3VyYXRvci9sYW1iZGEkMyRUeXBlIiw5MzQpLEQoODU4LDEse30sYlopLE4oQTQsIlJlY3Vyc2l2ZUdyYXBoTGF5b3V0RW5naW5lIiw4NTgpLEQoMjk2LDYwLFUwLFZ6dCxCMyksTihBNCwiVW5zdXBwb3J0ZWRDb25maWd1cmF0aW9uRXhjZXB0aW9uIiwyOTYpLEQoNDUzLDYwLFUwLEZUKSxOKEE0LCJVbnN1cHBvcnRlZEdyYXBoRXhjZXB0aW9uIiw0NTMpLEQoNzU0LDEse30pLE4oQWMsIkFic3RyYWN0UmFuZG9tTGlzdEFjY2Vzc29yIiw3NTQpLEQoNTAwLDc1NCx7fSxkSSksbC5yZz1mdW5jdGlvbigpe3JldHVybiBudWxsfSxsLmQ9ITAsbC5lPSEwLGwuZj0wLE4oajcsIkFsZ29yaXRobUFzc2VtYmxlciIsNTAwKSxEKDEyMzYsMSxnaSx2WiksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4hIXUoZSwxMjMpfSxOKGo3LCJBbGdvcml0aG1Bc3NlbWJsZXIvbGFtYmRhJDAkVHlwZSIsMTIzNiksRCgxMjM3LDEse30saiR0KSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBYS2UodGhpcy5hLHUoZSwxMjMpKX0sTihqNywiQWxnb3JpdGhtQXNzZW1ibGVyL2xhbWJkYSQxJFR5cGUiLDEyMzcpLEQoMTIzOCwxLGdpLHdaKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiEhdShlLDgwKX0sTihqNywiQWxnb3JpdGhtQXNzZW1ibGVyL2xhbWJkYSQyJFR5cGUiLDEyMzgpLEQoMTIzOSwxLEtuLCQkdCksbC50ZD1mdW5jdGlvbihlKXtIbCh0aGlzLmEsdShlLDgwKSl9LE4oajcsIkFsZ29yaXRobUFzc2VtYmxlci9sYW1iZGEkMyRUeXBlIiwxMjM5KSxEKDEyNDAsMSxLbixzR3QpLGwudGQ9ZnVuY3Rpb24oZSl7dVFlKHRoaXMuYSx0aGlzLmIsdShlLDIzNCkpfSxOKGo3LCJBbGdvcml0aG1Bc3NlbWJsZXIvbGFtYmRhJDQkVHlwZSIsMTI0MCksRCgxMzU1LDEscWksbVopLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gRW5uKHUoZSwyMzQpLHUobiwyMzQpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGd0KHRoaXMpfSxOKGo3LCJFbnVtQmFzZWRGYWN0b3J5Q29tcGFyYXRvciIsMTM1NSksRCg4MCw3NTQsezgwOjF9LFpzKSxsLnJnPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBRc30sbC5hPTAsTihqNywiTGF5b3V0UHJvY2Vzc29yQ29uZmlndXJhdGlvbiIsODApLEQoMTAxMywxLHs1Mjc6MX0sWUwpLGwub2c9ZnVuY3Rpb24oZSl7VV8oTDNlLG5ldyB6JHQoZSkpfTt2YXIgQTNlLEwzZSxNM2U7TihzYywiRGVwcmVjYXRlZExheW91dE9wdGlvblJlcGxhY2VyIiwxMDEzKSxEKDEwMTQsMSxLbix5WiksbC50ZD1mdW5jdGlvbihlKXtmYW4odShlLDE2MCkpfSxOKHNjLCJEZXByZWNhdGVkTGF5b3V0T3B0aW9uUmVwbGFjZXIvbGFtYmRhJDAkVHlwZSIsMTAxNCksRCgxMDE1LDEsS24seFopLGwudGQ9ZnVuY3Rpb24oZSl7UGxuKHUoZSwxNjApKX0sTihzYywiRGVwcmVjYXRlZExheW91dE9wdGlvblJlcGxhY2VyL2xhbWJkYSQxJFR5cGUiLDEwMTUpLEQoMTAxNiwxLHt9LHokdCksbC5PZD1mdW5jdGlvbihlLG4pe2xRZSh0aGlzLmEsdShlLDE0NiksdShuLDM4KSl9LE4oc2MsIkRlcHJlY2F0ZWRMYXlvdXRPcHRpb25SZXBsYWNlci9sYW1iZGEkMiRUeXBlIiwxMDE2KSxEKDE0OSwxLHs2ODY6MSwxNDk6MX0seTIpLGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIGltdCh0aGlzLGUpfSxsLnNnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC50Zz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGwubmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHpnKHRoaXMuYyl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iTGF5b3V0IEFsZ29yaXRobTogIit0aGlzLmN9O3ZhciBtNm49TihzYywiTGF5b3V0QWxnb3JpdGhtRGF0YSIsMTQ5KTtEKDI2MywxLHt9LG1nKSxOKHNjLCJMYXlvdXRBbGdvcml0aG1EYXRhL0J1aWxkZXIiLDI2MyksRCgxMDE3LDEsezUyNzoxfSxrWiksbC5vZz1mdW5jdGlvbihlKXtfdChlLDIzOSkmJiFCZShGZShlLldlKChkaSgpLCRHKSkpKSYmTW1uKHUoZSwzMykpfSxOKHNjLCJMYXlvdXRBbGdvcml0aG1SZXNvbHZlciIsMTAxNyksRCgyMjksMSx7Njg2OjEsMjI5OjF9LCQ2KSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDIyOSk/dW4odGhpcy5iLHUoZSwyMjkpLmIpOiExfSxsLnNnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC50Zz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwubmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHpnKHRoaXMuYil9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iTGF5b3V0IFR5cGU6ICIrdGhpcy5ifSxOKHNjLCJMYXlvdXRDYXRlZ29yeURhdGEiLDIyOSksRCgzNDQsMSx7fSx3bSksTihzYywiTGF5b3V0Q2F0ZWdvcnlEYXRhL0J1aWxkZXIiLDM0NCksRCg4NjcsMSx7fSx5dWUpO3ZhciBaaHQ7TihzYywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlIiw4NjcpLEQoODY4LDEse30sUVl0KSxOKHNjLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvUmVnaXN0cnkiLDg2OCksRCg0NzgsMSx7NDc4OjF9LFdGKSxOKHNjLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvUmVnaXN0cnkvVHJpcGxlIiw0NzgpLEQoODY5LDEsTzQsRVopLGwudWc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERhfSxOKHNjLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDAkVHlwZSIsODY5KSxEKDg3MCwxLFN5LFRaKSxsLnZnPWZ1bmN0aW9uKGUpe3JldHVybiB1Yyh1KGUsOCkpfSxOKHNjLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDEkVHlwZSIsODcwKSxEKDg3OSwxLE80LF9aKSxsLnVnPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBsZX0sTihzYywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQxMCRUeXBlIiw4NzkpLEQoODgwLDEsU3ksQ1opLGwudmc9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBxdSh1KGUsMTIpKX0sTihzYywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQxMSRUeXBlIiw4ODApLEQoODgxLDEsTzQsU1opLGwudWc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGNzfSxOKHNjLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDEyJFR5cGUiLDg4MSksRCg4ODIsMSxTeSxBWiksbC52Zz1mdW5jdGlvbihlKXtyZXR1cm4gVU0odShlLDY4KSl9LE4oc2MsIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMTMkVHlwZSIsODgyKSxEKDg4MywxLE80LExaKSxsLnVnPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBRc30sTihzYywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQxNCRUeXBlIiw4ODMpLEQoODg0LDEsU3ksTVopLGwudmc9ZnVuY3Rpb24oZSl7cmV0dXJuIHMkKHUoZSw1MykpfSxOKHNjLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDE1JFR5cGUiLDg4NCksRCg4ODUsMSxPNCxEWiksbC51Zz1mdW5jdGlvbigpe3JldHVybiBuZXcgQTB9LE4oc2MsIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMTYkVHlwZSIsODg1KSxEKDg4NiwxLFN5LEljKSxsLnZnPWZ1bmN0aW9uKGUpe3JldHVybiBFJCh1KGUsNTMpKX0sTihzYywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQxNyRUeXBlIiw4ODYpLEQoODg3LDEsTzQsSVopLGwudWc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFNwdH0sTihzYywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQxOCRUeXBlIiw4ODcpLEQoODg4LDEsU3ksSzkpLGwudmc9ZnVuY3Rpb24oZSl7cmV0dXJuIF9LdCh1KGUsMjA4KSl9LE4oc2MsIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMTkkVHlwZSIsODg4KSxEKDg3MSwxLE80LG9jKSxsLnVnPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBqdX0sTihzYywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQyJFR5cGUiLDg3MSksRCg4NzIsMSxTeSxaYyksbC52Zz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHlSKHUoZSw3NCkpfSxOKHNjLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDMkVHlwZSIsODcyKSxEKDg3MywxLE80LFFpKSxsLnVnPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBNVH0sTihzYywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQ0JFR5cGUiLDg3MyksRCg4NzQsMSxTeSxGTCksbC52Zz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHludCh1KGUsMTQyKSl9LE4oc2MsIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkNSRUeXBlIiw4NzQpLEQoODc1LDEsTzQsTlopLGwudWc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHY2fSxOKHNjLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDYkVHlwZSIsODc1KSxEKDg3NiwxLFN5LFBaKSxsLnZnPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZnZ0KHUoZSwxMTYpKX0sTihzYywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQ3JFR5cGUiLDg3NiksRCg4NzcsMSxPNCxRNSksbC51Zz1mdW5jdGlvbigpe3JldHVybiBuZXcgdGx9LE4oc2MsIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkOCRUeXBlIiw4NzcpLEQoODc4LDEsU3ksbW0pLGwudmc9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBSdGUodShlLDM3MykpfSxOKHNjLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDkkVHlwZSIsODc4KTt2YXIgSmh0PWFzKEJJLCJJUHJvcGVydHkiKTtEKDIzLDEsezM1OjEsNjg2OjEsMjM6MSwxNDY6MX0sWGUpLGwud2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIFBYZSh0aGlzLHUoZSwxNDYpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwyMyk/dW4odGhpcy5mLHUoZSwyMykuZik6X3QoZSwxNDYpJiZ1bih0aGlzLmYsdShlLDE0NikudGcoKSl9LGwud2c9ZnVuY3Rpb24oKXt2YXIgZTtpZihfdCh0aGlzLmIsNCkpe2lmKGU9RTN0KHRoaXMuYiksZT09bnVsbCl0aHJvdyBudChuZXcgSG8ocTFlK3RoaXMuZisiJy4gTWFrZSBzdXJlIGl0J3MgdHlwZSBpcyByZWdpc3RlcmVkIHdpdGggdGhlICIrKEwwKHVOKSx1Ti5rKStyOHQpKTtyZXR1cm4gZX1lbHNlIHJldHVybiB0aGlzLmJ9LGwuc2c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSxsLnRnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZn0sbC5uZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLml9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gemcodGhpcy5mKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiJMYXlvdXQgT3B0aW9uOiAiK3RoaXMuZn0sTihzYywiTGF5b3V0T3B0aW9uRGF0YSIsMjMpLEQoMjQsMSx7fSxVZSksTihzYywiTGF5b3V0T3B0aW9uRGF0YS9CdWlsZGVyIiwyNCksRCgxNzUsMjIsezM6MSwzNToxLDIyOjEsMTc1OjF9LEFNKTt2YXIgSWQsdHAsdWEscW4scTIsZXA9enIoc2MsIkxheW91dE9wdGlvbkRhdGEvVGFyZ2V0IiwxNzUsVXIsbXNuLE1KZSksRDNlO0QoMjc3LDIyLHszOjEsMzU6MSwyMjoxLDI3NzoxfSxfNik7dmFyIFBhLCRvLG1zLFJ4LHhjLEcxLGtFLGJTdCxJM2U9enIoc2MsIkxheW91dE9wdGlvbkRhdGEvVHlwZSIsMjc3LFVyLFhhbixESmUpLE8zZSxWUyx2U3Q7RCgxMTAsMSx7MTEwOjF9LFM2LGNoLG8kKSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBlPT1udWxsfHwhX3QoZSwxMTApPyExOihuPXUoZSwxMTApLFJjKHRoaXMuYyxuLmMpJiZSYyh0aGlzLmQsbi5kKSYmUmModGhpcy5iLG4uYikmJlJjKHRoaXMuYSxuLmEpKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiB2eih1dChvdChRbiwxKSxNZSwxLDUsW3RoaXMuYyx0aGlzLmQsdGhpcy5iLHRoaXMuYV0pKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiJSZWN0W3g9Iit0aGlzLmMrIix5PSIrdGhpcy5kKyIsdz0iK3RoaXMuYisiLGg9Iit0aGlzLmErIl0ifSxsLmE9MCxsLmI9MCxsLmM9MCxsLmQ9MCxOKHFJLCJFbGtSZWN0YW5nbGUiLDExMCksRCg4LDEsezM6MSw0OjEsODoxLDQxNDoxfSxEYSx3cnQsUmUsU28pLGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIFdlZSh0aGlzLGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHM4KHRoaXMuYSkrRmZuKHM4KHRoaXMuYikpfSxsLkpmPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvO2ZvcihzPTA7czxlLmxlbmd0aCYmU3JlKCgkcihzLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQocykpLFdmZSk7KSsrcztmb3Iobj1lLmxlbmd0aDtuPjAmJlNyZSgoJHIobi0xLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQobi0xKSksS2ZlKTspLS1uO2lmKHM+PW4pdGhyb3cgbnQobmV3IFBuKCJUaGUgZ2l2ZW4gc3RyaW5nIGRvZXMgbm90IGNvbnRhaW4gYW55IG51bWJlcnMuIikpO2lmKG89cHkoZS5zdWJzdHIocyxuLXMpLGAsfDt8XHJ8CmApLG8ubGVuZ3RoIT0yKXRocm93IG50KG5ldyBQbigiRXhhY3RseSB0d28gbnVtYmVycyBhcmUgZXhwZWN0ZWQsICIrby5sZW5ndGgrIiB3ZXJlIGZvdW5kLiIpKTt0cnl7dGhpcy5hPWx5KHV5KG9bMF0pKSx0aGlzLmI9bHkodXkob1sxXSkpfWNhdGNoKGgpe3Rocm93IGg9cnMoaCksX3QoaCwxMjcpPyhyPWgsbnQobmV3IFBuKFlmZStyKSkpOm50KGgpfX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiIoIit0aGlzLmErIiwiK3RoaXMuYisiKSJ9LGwuYT0wLGwuYj0wO3ZhciBuYT1OKHFJLCJLVmVjdG9yIiw4KTtEKDc0LDY4LHszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsNjg6MSwxNToxLDc0OjEsNDE0OjF9LGp1LHlSLGhXdCksbC5QYz1mdW5jdGlvbigpe3JldHVybiBldW4odGhpcyl9LGwuSmY9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkO3M9cHkoZSxgLHw7fFxcKHxcXCl8XFxbfFxcXXxcXHt8XFx9fCB8CXwKYCksTWgodGhpcyk7dHJ5e2ZvcihyPTAsaD0wLG89MCxkPTA7cjxzLmxlbmd0aDspc1tyXSE9bnVsbCYmdXkoc1tyXSkubGVuZ3RoPjAmJihoJTI9PTA/bz1seShzW3JdKTpkPWx5KHNbcl0pLGg+MCYmaCUyIT0wJiZhaSh0aGlzLG5ldyBSZShvLGQpKSwrK2gpLCsrcn1jYXRjaCh3KXt0aHJvdyB3PXJzKHcpLF90KHcsMTI3KT8obj13LG50KG5ldyBQbigiVGhlIGdpdmVuIHN0cmluZyBkb2VzIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgZm9ybWF0IGZvciB2ZWN0b3JzLiIrbikpKTpudCh3KX19LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZSxuLHI7Zm9yKGU9bmV3IEZsKCIoIiksbj1zaSh0aGlzLDApO24uYiE9bi5kLmM7KXI9dShpaShuKSw4KSxZcihlLHIuYSsiLCIrci5iKSxuLmIhPW4uZC5jJiYoZS5hKz0iOyAiKTtyZXR1cm4oZS5hKz0iKSIsZSkuYX07dmFyIHdTdD1OKHFJLCJLVmVjdG9yQ2hhaW4iLDc0KTtEKDI0OCwyMix7MzoxLDM1OjEsMjI6MSwyNDg6MX0sZV8pO3ZhciB0ZnQsTkcsUEcsJE8sek8sRkcsbVN0PXpyKEJoLCJBbGlnbm1lbnQiLDI0OCxVcixZc24sSUplKSxOM2U7RCg5NzksMSxQaCxudHQpLGwuUWU9ZnVuY3Rpb24oZSl7R3VlKGUpfTt2YXIgeVN0LGVmdCxQM2UseFN0LGtTdCxGM2UsRVN0LEIzZSxSM2UsVFN0LF9TdCxqM2U7TihCaCwiQm94TGF5b3V0ZXJPcHRpb25zIiw5NzkpLEQoOTgwLDEse30sT1opLGwuJGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1uZXcgalosZX0sbC5fZT1mdW5jdGlvbihlKXt9LE4oQmgsIkJveExheW91dGVyT3B0aW9ucy9Cb3hGYWN0b3J5Iiw5ODApLEQoMjkxLDIyLHszOjEsMzU6MSwyMjoxLDI5MToxfSxuXyk7dmFyIHFPLG5mdCxITyxWTyxHTyxyZnQsaWZ0PXpyKEJoLCJDb250ZW50QWxpZ25tZW50IiwyOTEsVXIsS3NuLE9KZSksJDNlO0QoNjg0LDEsUGgsa3ApLGwuUWU9ZnVuY3Rpb24oZSl7YW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLFYxZSksIiIpLCJMYXlvdXQgQWxnb3JpdGhtIiksIlNlbGVjdCBhIHNwZWNpZmljIGxheW91dCBhbGdvcml0aG0uIiksKEhnKCksa0UpKSxMZSksb24oKHQxKCkscW4pKSkpKSxhbihlLG5ldyBYZShybihubihzbihaZShlbihKZSh0bihuZXcgVWUsRzFlKSwiIiksIlJlc29sdmVkIExheW91dCBBbGdvcml0aG0iKSwiTWV0YSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2VsZWN0ZWQgYWxnb3JpdGhtLiIpLEcxKSxtNm4pLG9uKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsaGt0KSwiIiksIkFsaWdubWVudCIpLCJBbGlnbm1lbnQgb2YgdGhlIHNlbGVjdGVkIG5vZGUgcmVsYXRpdmUgdG8gb3RoZXIgbm9kZXM7IHRoZSBleGFjdCBtZWFuaW5nIGRlcGVuZHMgb24gdGhlIHVzZWQgYWxnb3JpdGhtLiIpLENTdCksbXMpLG1TdCksb24odWEpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSxweCksIiIpLCJBc3BlY3QgUmF0aW8iKSwiVGhlIGRlc2lyZWQgYXNwZWN0IHJhdGlvIG9mIHRoZSBkcmF3aW5nLCB0aGF0IGlzIHRoZSBxdW90aWVudCBvZiB3aWR0aCBieSBoZWlnaHQuIiksJG8pLHdhKSxvbihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLHM4dCksIiIpLCJCZW5kIFBvaW50cyIpLCJBIGZpeGVkIGxpc3Qgb2YgYmVuZCBwb2ludHMgZm9yIHRoZSBlZGdlLiBUaGlzIGlzIHVzZWQgYnkgdGhlICdGaXhlZCBMYXlvdXQnIGFsZ29yaXRobSB0byBzcGVjaWZ5IGEgcHJlLWRlZmluZWQgcm91dGluZyBmb3IgYW4gZWRnZS4gVGhlIHZlY3RvciBjaGFpbiBtdXN0IGluY2x1ZGUgdGhlIHNvdXJjZSBwb2ludCwgYW55IGJlbmQgcG9pbnRzLCBhbmQgdGhlIHRhcmdldCBwb2ludCwgc28gaXQgbXVzdCBoYXZlIGF0IGxlYXN0IHR3byBwb2ludHMuIiksRzEpLHdTdCksb24oSWQpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxjSCksIiIpLCJDb250ZW50IEFsaWdubWVudCIpLCJTcGVjaWZpZXMgaG93IHRoZSBjb250ZW50IG9mIGEgbm9kZSBhcmUgYWxpZ25lZC4gRWFjaCBub2RlIGNhbiBpbmRpdmlkdWFsbHkgY29udHJvbCB0aGUgYWxpZ25tZW50IG9mIGl0cyBjb250ZW50cy4gSS5lLiBpZiBhIG5vZGUgc2hvdWxkIGJlIGFsaWduZWQgdG9wIGxlZnQgaW4gaXRzIHBhcmVudCBub2RlLCB0aGUgcGFyZW50IG5vZGUgc2hvdWxkIHNwZWNpZnkgdGhhdCBvcHRpb24uIiksQVN0KSxSeCksaWZ0KSxvbihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLEtJKSwiIiksIkRlYnVnIE1vZGUiKSwiV2hldGhlciBhZGRpdGlvbmFsIGRlYnVnIGluZm9ybWF0aW9uIHNoYWxsIGJlIGdlbmVyYXRlZC4iKSwoRm4oKSwhMSkpLFBhKSxXcyksb24ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxna3QpLCIiKSxLNnQpLCJPdmVyYWxsIGRpcmVjdGlvbiBvZiBlZGdlczogaG9yaXpvbnRhbCAocmlnaHQgLyBsZWZ0KSBvciB2ZXJ0aWNhbCAoZG93biAvIHVwKS4iKSxMU3QpLG1zKSxXUyksb24ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxVSSksIiIpLCJFZGdlIFJvdXRpbmciKSwiV2hhdCBraW5kIG9mIGVkZ2Ugcm91dGluZyBzdHlsZSBzaG91bGQgYmUgYXBwbGllZCBmb3IgdGhlIGNvbnRlbnQgb2YgYSBwYXJlbnQgbm9kZS4gQWxnb3JpdGhtcyBtYXkgYWxzbyBzZXQgdGhpcyBvcHRpb24gdG8gc2luZ2xlIGVkZ2VzIGluIG9yZGVyIHRvIG1hcmsgdGhlbSBhcyBzcGxpbmVzLiBUaGUgYmVuZCBwb2ludCBsaXN0IG9mIGVkZ2VzIHdpdGggdGhpcyBvcHRpb24gc2V0IHRvIFNQTElORVMgbXVzdCBiZSBpbnRlcnByZXRlZCBhcyBjb250cm9sIHBvaW50cyBmb3IgYSBwaWVjZXdpc2UgY3ViaWMgc3BsaW5lLiIpLElTdCksbXMpLHZmdCksb24ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxnSCksIiIpLCJFeHBhbmQgTm9kZXMiKSwiSWYgYWN0aXZlLCBub2RlcyBhcmUgZXhwYW5kZWQgdG8gZmlsbCB0aGUgYXJlYSBvZiB0aGVpciBwYXJlbnQuIiksITEpLFBhKSxXcyksb24ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxvSCksIiIpLCJIaWVyYXJjaHkgSGFuZGxpbmciKSwiRGV0ZXJtaW5lcyB3aGV0aGVyIHNlcGFyYXRlIGxheW91dCBydW5zIGFyZSB0cmlnZ2VyZWQgZm9yIGRpZmZlcmVudCBjb21wb3VuZCBub2RlcyBpbiBhIGhpZXJhcmNoaWNhbCBncmFwaC4gU2V0dGluZyBhIG5vZGUncyBoaWVyYXJjaHkgaGFuZGxpbmcgdG8gYElOQ0xVREVfQ0hJTERSRU5gIHdpbGwgbGF5IG91dCB0aGF0IG5vZGUgYW5kIGFsbCBvZiBpdHMgZGVzY2VuZGFudHMgaW4gYSBzaW5nbGUgbGF5b3V0IHJ1biwgdW50aWwgYSBkZXNjZW5kYW50IGlzIGVuY291bnRlcmVkIHdoaWNoIGhhcyBpdHMgaGllcmFyY2h5IGhhbmRsaW5nIHNldCB0byBgU0VQQVJBVEVfQ0hJTERSRU5gLiBJbiBnZW5lcmFsLCBgU0VQQVJBVEVfQ0hJTERSRU5gIHdpbGwgZW5zdXJlIHRoYXQgYSBuZXcgbGF5b3V0IHJ1biBpcyB0cmlnZ2VyZWQgZm9yIGEgbm9kZSB3aXRoIHRoYXQgc2V0dGluZy4gSW5jbHVkaW5nIG11bHRpcGxlIGxldmVscyBvZiBoaWVyYXJjaHkgaW4gYSBzaW5nbGUgbGF5b3V0IHJ1biBtYXkgYWxsb3cgY3Jvc3MtaGllcmFyY2hpY2FsIGVkZ2VzIHRvIGJlIGxhaWQgb3V0IHByb3Blcmx5LiBJZiB0aGUgcm9vdCBub2RlIGlzIHNldCB0byBgSU5IRVJJVGAgKG9yIG5vdCBzZXQgYXQgYWxsKSwgdGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgYFNFUEFSQVRFX0NISUxEUkVOYC4iKSxGU3QpLG1zKSx4QXQpLEtpKHFuLHV0KG90KGVwLDEpLG9lLDE3NSwwLFt1YV0pKSkpKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsd3cpLCIiKSwiUGFkZGluZyIpLCJUaGUgcGFkZGluZyB0byBiZSBsZWZ0IHRvIGEgcGFyZW50IGVsZW1lbnQncyBib3JkZXIgd2hlbiBwbGFjaW5nIGNoaWxkIGVsZW1lbnRzLiBUaGlzIGNhbiBhbHNvIHNlcnZlIGFzIGFuIG91dHB1dCBvcHRpb24gb2YgYSBsYXlvdXQgYWxnb3JpdGhtIGlmIG5vZGUgc2l6ZSBjYWxjdWxhdGlvbiBpcyBzZXR1cCBhcHByb3ByaWF0ZWx5LiIpLFVTdCksRzEpLFNFdCksS2kocW4sdXQob3QoZXAsMSksb2UsMTc1LDAsW3VhXSkpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSwkSSksIiIpLCJJbnRlcmFjdGl2ZSIpLCJXaGV0aGVyIHRoZSBhbGdvcml0aG0gc2hvdWxkIGJlIHJ1biBpbiBpbnRlcmFjdGl2ZSBtb2RlIGZvciB0aGUgY29udGVudCBvZiBhIHBhcmVudCBub2RlLiBXaGF0IHRoaXMgbWVhbnMgZXhhY3RseSBkZXBlbmRzIG9uIGhvdyB0aGUgc3BlY2lmaWMgYWxnb3JpdGhtIGludGVycHJldHMgdGhpcyBvcHRpb24uIFVzdWFsbHkgaW4gdGhlIGludGVyYWN0aXZlIG1vZGUgYWxnb3JpdGhtcyB0cnkgdG8gbW9kaWZ5IHRoZSBjdXJyZW50IGxheW91dCBhcyBsaXR0bGUgYXMgcG9zc2libGUuIiksITEpLFBhKSxXcyksb24ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSx2Y3QpLCIiKSwiaW50ZXJhY3RpdmUgTGF5b3V0IiksIldoZXRoZXIgdGhlIGdyYXBoIHNob3VsZCBiZSBjaGFuZ2VhYmxlIGludGVyYWN0aXZlbHkgYW5kIGJ5IHNldHRpbmcgY29uc3RyYWludHMiKSwhMSksUGEpLFdzKSxvbihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLEZDKSwiIiksIk9taXQgTm9kZSBNaWNybyBMYXlvdXQiKSwiTm9kZSBtaWNybyBsYXlvdXQgY29tcHJpc2VzIHRoZSBjb21wdXRhdGlvbiBvZiBub2RlIGRpbWVuc2lvbnMgKGlmIHJlcXVlc3RlZCksIHRoZSBwbGFjZW1lbnQgb2YgcG9ydHMgYW5kIHRoZWlyIGxhYmVscywgYW5kIHRoZSBwbGFjZW1lbnQgb2Ygbm9kZSBsYWJlbHMuIFRoZSBmdW5jdGlvbmFsaXR5IGlzIGltcGxlbWVudGVkIGluZGVwZW5kZW50IG9mIGFueSBzcGVjaWZpYyBsYXlvdXQgYWxnb3JpdGhtIGFuZCBzaG91bGRuJ3QgaGF2ZSBhbnkgbmVnYXRpdmUgaW1wYWN0IG9uIHRoZSBsYXlvdXQgYWxnb3JpdGhtJ3MgcGVyZm9ybWFuY2UgaXRzZWxmLiBZZXQsIGlmIGFueSB1bmZvcmVzZWVuIGJlaGF2aW9yIG9jY3VycywgdGhpcyBvcHRpb24gYWxsb3dzIHRvIGRlYWN0aXZhdGUgdGhlIG1pY3JvIGxheW91dC4iKSwhMSksUGEpLFdzKSxvbihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLEZvdCksIiIpLCJQb3J0IENvbnN0cmFpbnRzIiksIkRlZmluZXMgY29uc3RyYWludHMgb2YgdGhlIHBvc2l0aW9uIG9mIHRoZSBwb3J0cyBvZiBhIG5vZGUuIiksUVN0KSxtcyksVEF0KSxvbih1YSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLHVIKSwiIiksIlBvc2l0aW9uIiksIlRoZSBwb3NpdGlvbiBvZiBhIG5vZGUsIHBvcnQsIG9yIGxhYmVsLiBUaGlzIGlzIHVzZWQgYnkgdGhlICdGaXhlZCBMYXlvdXQnIGFsZ29yaXRobSB0byBzcGVjaWZ5IGEgcHJlLWRlZmluZWQgcG9zaXRpb24uIiksRzEpLG5hKSxLaSh1YSx1dChvdChlcCwxKSxvZSwxNzUsMCxbcTIsdHBdKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLGpJKSwiIiksIlByaW9yaXR5IiksIkRlZmluZXMgdGhlIHByaW9yaXR5IG9mIGFuIG9iamVjdDsgaXRzIG1lYW5pbmcgZGVwZW5kcyBvbiB0aGUgc3BlY2lmaWMgbGF5b3V0IGFsZ29yaXRobSBhbmQgdGhlIGNvbnRleHQgd2hlcmUgaXQgaXMgdXNlZC4iKSx4YyksSGEpLEtpKHVhLHV0KG90KGVwLDEpLG9lLDE3NSwwLFtJZF0pKSkpKSxhbihlLG5ldyBYZShybihubihzbihaZShlbihKZSh0bihuZXcgVWUsSHEpLCIiKSwiUmFuZG9taXphdGlvbiBTZWVkIiksIlNlZWQgdXNlZCBmb3IgcHNldWRvLXJhbmRvbSBudW1iZXIgZ2VuZXJhdG9ycyB0byBjb250cm9sIHRoZSBsYXlvdXQgYWxnb3JpdGhtLiBJZiB0aGUgdmFsdWUgaXMgMCwgdGhlIHNlZWQgc2hhbGwgYmUgZGV0ZXJtaW5lZCBwc2V1ZG8tcmFuZG9tbHkgKGUuZy4gZnJvbSB0aGUgc3lzdGVtIHRpbWUpLiIpLHhjKSxIYSksb24ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSxQQyksIiIpLCJTZXBhcmF0ZSBDb25uZWN0ZWQgQ29tcG9uZW50cyIpLCJXaGV0aGVyIGVhY2ggY29ubmVjdGVkIGNvbXBvbmVudCBzaG91bGQgYmUgcHJvY2Vzc2VkIHNlcGFyYXRlbHkuIiksUGEpLFdzKSxvbihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLEVrdCksIiIpLCJKdW5jdGlvbiBQb2ludHMiKSwiVGhpcyBvcHRpb24gaXMgbm90IHVzZWQgYXMgb3B0aW9uLCBidXQgYXMgb3V0cHV0IG9mIHRoZSBsYXlvdXQgYWxnb3JpdGhtcy4gSXQgaXMgYXR0YWNoZWQgdG8gZWRnZXMgYW5kIGRldGVybWluZXMgdGhlIHBvaW50cyB3aGVyZSBqdW5jdGlvbiBzeW1ib2xzIHNob3VsZCBiZSBkcmF3biBpbiBvcmRlciB0byByZXByZXNlbnQgaHlwZXJlZGdlcyB3aXRoIG9ydGhvZ29uYWwgcm91dGluZy4gV2hldGhlciBzdWNoIHBvaW50cyBhcmUgY29tcHV0ZWQgZGVwZW5kcyBvbiB0aGUgY2hvc2VuIGxheW91dCBhbGdvcml0aG0gYW5kIGVkZ2Ugcm91dGluZyBzdHlsZS4gVGhlIHBvaW50cyBhcmUgcHV0IGludG8gdGhlIHZlY3RvciBjaGFpbiB3aXRoIG5vIHNwZWNpZmljIG9yZGVyLiIpLFJTdCksRzEpLHdTdCksb24oSWQpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxDa3QpLCIiKSwiQ29tbWVudCBCb3giKSwiV2hldGhlciB0aGUgbm9kZSBzaG91bGQgYmUgcmVnYXJkZWQgYXMgYSBjb21tZW50IGJveCBpbnN0ZWFkIG9mIGEgcmVndWxhciBub2RlLiBJbiB0aGF0IGNhc2UgaXRzIHBsYWNlbWVudCBzaG91bGQgYmUgc2ltaWxhciB0byBob3cgbGFiZWxzIGFyZSBoYW5kbGVkLiBBbnkgZWRnZXMgaW5jaWRlbnQgdG8gYSBjb21tZW50IGJveCBzcGVjaWZ5IHRvIHdoaWNoIGdyYXBoIGVsZW1lbnRzIHRoZSBjb21tZW50IGlzIHJlbGF0ZWQuIiksITEpLFBhKSxXcyksb24odWEpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxTa3QpLCIiKSwiSHlwZXJub2RlIiksIldoZXRoZXIgdGhlIG5vZGUgc2hvdWxkIGJlIGhhbmRsZWQgYXMgYSBoeXBlcm5vZGUuIiksITEpLFBhKSxXcyksb24odWEpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSxXNW4pLCIiKSwiTGFiZWwgTWFuYWdlciIpLCJMYWJlbCBtYW5hZ2VycyBjYW4gc2hvcnRlbiBsYWJlbHMgdXBvbiBhIGxheW91dCBhbGdvcml0aG0ncyByZXF1ZXN0LiIpLEcxKSxUNm4pLEtpKHFuLHV0KG90KGVwLDEpLG9lLDE3NSwwLFt0cF0pKSkpKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsTGt0KSwiIiksIk1hcmdpbnMiKSwiTWFyZ2lucyBkZWZpbmUgYWRkaXRpb25hbCBzcGFjZSBhcm91bmQgdGhlIGFjdHVhbCBib3VuZHMgb2YgYSBncmFwaCBlbGVtZW50LiBGb3IgaW5zdGFuY2UsIHBvcnRzIG9yIGxhYmVscyBiZWluZyBwbGFjZWQgb24gdGhlIG91dHNpZGUgb2YgYSBub2RlJ3MgYm9yZGVyIG1pZ2h0IGludHJvZHVjZSBzdWNoIGEgbWFyZ2luLiBUaGUgbWFyZ2luIGlzIHVzZWQgdG8gZ3VhcmFudGVlIG5vbi1vdmVybGFwIG9mIG90aGVyIGdyYXBoIGVsZW1lbnRzIHdpdGggdGhvc2UgcG9ydHMgb3IgbGFiZWxzLiIpLGpTdCksRzEpLENFdCksb24odWEpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSx1a3QpLCIiKSwiTm8gTGF5b3V0IiksIk5vIGxheW91dCBpcyBkb25lIGZvciB0aGUgYXNzb2NpYXRlZCBlbGVtZW50LiBUaGlzIGlzIHVzZWQgdG8gbWFyayBwYXJ0cyBvZiBhIGRpYWdyYW0gdG8gYXZvaWQgdGhlaXIgaW5jbHVzaW9uIGluIHRoZSBsYXlvdXQgZ3JhcGgsIG9yIHRvIG1hcmsgcGFydHMgb2YgdGhlIGxheW91dCBncmFwaCB0byBwcmV2ZW50IGxheW91dCBlbmdpbmVzIGZyb20gcHJvY2Vzc2luZyB0aGVtLiBJZiB5b3Ugd2lzaCB0byBleGNsdWRlIHRoZSBjb250ZW50cyBvZiBhIGNvbXBvdW5kIG5vZGUgZnJvbSBhdXRvbWF0aWMgbGF5b3V0LCB3aGlsZSB0aGUgbm9kZSBpdHNlbGYgaXMgc3RpbGwgY29uc2lkZXJlZCBvbiBpdHMgb3duIGxheWVyLCB1c2UgdGhlICdGaXhlZCBMYXlvdXQnIGFsZ29yaXRobSBmb3IgdGhhdCBub2RlLiIpLCExKSxQYSksV3MpLEtpKHVhLHV0KG90KGVwLDEpLG9lLDE3NSwwLFtJZCxxMix0cF0pKSkpKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsVTFlKSwiIiksIlNjYWxlIEZhY3RvciIpLCJUaGUgc2NhbGluZyBmYWN0b3IgdG8gYmUgYXBwbGllZCB0byB0aGUgY29ycmVzcG9uZGluZyBub2RlIGluIHJlY3Vyc2l2ZSBsYXlvdXQuIEl0IGNhdXNlcyB0aGUgY29ycmVzcG9uZGluZyBub2RlJ3Mgc2l6ZSB0byBiZSBhZGp1c3RlZCwgYW5kIGl0cyBwb3J0cyBhbmQgbGFiZWxzIHRvIGJlIHNpemVkIGFuZCBwbGFjZWQgYWNjb3JkaW5nbHkgYWZ0ZXIgdGhlIGxheW91dCBvZiB0aGF0IG5vZGUgaGFzIGJlZW4gZGV0ZXJtaW5lZCAoYW5kIGJlZm9yZSB0aGUgbm9kZSBpdHNlbGYgYW5kIGl0cyBzaWJsaW5ncyBhcmUgYXJyYW5nZWQpLiBUaGUgc2NhbGluZyBpcyBub3QgcmV2ZXJ0ZWQgYWZ0ZXJ3YXJkcywgc28gdGhlIHJlc3VsdGluZyBsYXlvdXQgZ3JhcGggY29udGFpbnMgdGhlIGFkanVzdGVkIHNpemUgYW5kIHBvc2l0aW9uIGRhdGEuIFRoaXMgb3B0aW9uIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIGlmICdMYXlvdXQgSGllcmFyY2h5JyBpcyBzZXQuIiksMSksJG8pLHdhKSxvbih1YSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLFcxZSksIiIpLCJBbmltYXRlIiksIldoZXRoZXIgdGhlIHNoaWZ0IGZyb20gdGhlIG9sZCBsYXlvdXQgdG8gdGhlIG5ldyBjb21wdXRlZCBsYXlvdXQgc2hhbGwgYmUgYW5pbWF0ZWQuIiksITApLFBhKSxXcyksb24ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxLMWUpLCIiKSwiQW5pbWF0aW9uIFRpbWUgRmFjdG9yIiksIkZhY3RvciBmb3IgY29tcHV0YXRpb24gb2YgYW5pbWF0aW9uIHRpbWUuIFRoZSBoaWdoZXIgdGhlIHZhbHVlLCB0aGUgbG9uZ2VyIHRoZSBhbmltYXRpb24gdGltZS4gSWYgdGhlIHZhbHVlIGlzIDAsIHRoZSByZXN1bHRpbmcgdGltZSBpcyBhbHdheXMgZXF1YWwgdG8gdGhlIG1pbmltdW0gZGVmaW5lZCBieSAnTWluaW1hbCBBbmltYXRpb24gVGltZScuIiksZGUoMTAwKSkseGMpLEhhKSxvbihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLFkxZSksIiIpLCJMYXlvdXQgQW5jZXN0b3JzIiksIldoZXRoZXIgdGhlIGhpZXJhcmNoeSBsZXZlbHMgb24gdGhlIHBhdGggZnJvbSB0aGUgc2VsZWN0ZWQgZWxlbWVudCB0byB0aGUgcm9vdCBvZiB0aGUgZGlhZ3JhbSBzaGFsbCBiZSBpbmNsdWRlZCBpbiB0aGUgbGF5b3V0IHByb2Nlc3MuIiksITEpLFBhKSxXcyksb24ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxYMWUpLCIiKSwiTWF4aW1hbCBBbmltYXRpb24gVGltZSIpLCJUaGUgbWF4aW1hbCB0aW1lIGZvciBhbmltYXRpb25zLCBpbiBtaWxsaXNlY29uZHMuIiksZGUoNGUzKSkseGMpLEhhKSxvbihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLFExZSksIiIpLCJNaW5pbWFsIEFuaW1hdGlvbiBUaW1lIiksIlRoZSBtaW5pbWFsIHRpbWUgZm9yIGFuaW1hdGlvbnMsIGluIG1pbGxpc2Vjb25kcy4iKSxkZSg0MDApKSx4YyksSGEpLG9uKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsWjFlKSwiIiksIlByb2dyZXNzIEJhciIpLCJXaGV0aGVyIGEgcHJvZ3Jlc3MgYmFyIHNoYWxsIGJlIGRpc3BsYXllZCBkdXJpbmcgbGF5b3V0IGNvbXB1dGF0aW9ucy4iKSwhMSksUGEpLFdzKSxvbihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLEoxZSksIiIpLCJWYWxpZGF0ZSBHcmFwaCIpLCJXaGV0aGVyIHRoZSBncmFwaCBzaGFsbCBiZSB2YWxpZGF0ZWQgYmVmb3JlIGFueSBsYXlvdXQgYWxnb3JpdGhtIGlzIGFwcGxpZWQuIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQgYW5kIGF0IGxlYXN0IG9uZSBlcnJvciBpcyBmb3VuZCwgdGhlIGxheW91dCBwcm9jZXNzIGlzIGFib3J0ZWQgYW5kIGEgbWVzc2FnZSBpcyBzaG93biB0byB0aGUgdXNlci4iKSwhMSksUGEpLFdzKSxvbihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLHRkZSksIiIpLCJWYWxpZGF0ZSBPcHRpb25zIiksIldoZXRoZXIgbGF5b3V0IG9wdGlvbnMgc2hhbGwgYmUgdmFsaWRhdGVkIGJlZm9yZSBhbnkgbGF5b3V0IGFsZ29yaXRobSBpcyBhcHBsaWVkLiBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkIGFuZCBhdCBsZWFzdCBvbmUgZXJyb3IgaXMgZm91bmQsIHRoZSBsYXlvdXQgcHJvY2VzcyBpcyBhYm9ydGVkIGFuZCBhIG1lc3NhZ2UgaXMgc2hvd24gdG8gdGhlIHVzZXIuIiksITApLFBhKSxXcyksb24ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxlZGUpLCIiKSwiWm9vbSB0byBGaXQiKSwiV2hldGhlciB0aGUgem9vbSBsZXZlbCBzaGFsbCBiZSBzZXQgdG8gdmlldyB0aGUgd2hvbGUgZGlhZ3JhbSBhZnRlciBsYXlvdXQuIiksITEpLFBhKSxXcyksb24ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxpOHQpLCJib3giKSwiQm94IExheW91dCBNb2RlIiksIkNvbmZpZ3VyZXMgdGhlIHBhY2tpbmcgbW9kZSB1c2VkIGJ5IHRoZSB7QGxpbmsgQm94TGF5b3V0UHJvdmlkZXJ9LiBJZiBTSU1QTEUgaXMgbm90IHJlcXVpcmVkIChuZWl0aGVyIHByaW9yaXRpZXMgYXJlIHVzZWQgbm9yIHRoZSBpbnRlcmFjdGl2ZSBtb2RlKSwgR1JPVVBfREVDIGNhbiBpbXByb3ZlIHRoZSBwYWNraW5nIGFuZCBkZWNyZWFzZSB0aGUgYXJlYS4gR1JPVVBfTUlYRUQgYW5kIEdST1VQX0lOQyBtYXksIGluIHZlcnkgc3BlY2lmaWMgc2NlbmFyaW9zLCB3b3JrIGJldHRlci4iKSxTU3QpLG1zKSxNQXQpLG9uKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsUXh0KSxqMSksIkNvbW1lbnQgQ29tbWVudCBTcGFjaW5nIiksIlNwYWNpbmcgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gYSBjb21tZW50IGJveCBhbmQgb3RoZXIgY29tbWVudCBib3hlcyBjb25uZWN0ZWQgdG8gdGhlIHNhbWUgbm9kZS4gVGhlIHNwYWNlIGxlZnQgYmV0d2VlbiBjb21tZW50IGJveGVzIG9mIGRpZmZlcmVudCBub2RlcyBpcyBjb250cm9sbGVkIGJ5IHRoZSBub2RlLW5vZGUgc3BhY2luZy4iKSwxMCksJG8pLHdhKSxvbihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLFp4dCksajEpLCJDb21tZW50IE5vZGUgU3BhY2luZyIpLCJTcGFjaW5nIHRvIGJlIHByZXNlcnZlZCBiZXR3ZWVuIGEgbm9kZSBhbmQgaXRzIGNvbm5lY3RlZCBjb21tZW50IGJveGVzLiBUaGUgc3BhY2UgbGVmdCBiZXR3ZWVuIGEgbm9kZSBhbmQgdGhlIGNvbW1lbnRzIG9mIGFub3RoZXIgbm9kZSBpcyBjb250cm9sbGVkIGJ5IHRoZSBub2RlLW5vZGUgc3BhY2luZy4iKSwxMCksJG8pLHdhKSxvbihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLE1vdCksajEpLCJDb21wb25lbnRzIFNwYWNpbmciKSwiU3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBwYWlycyBvZiBjb25uZWN0ZWQgY29tcG9uZW50cy4gVGhpcyBvcHRpb24gaXMgb25seSByZWxldmFudCBpZiAnc2VwYXJhdGVDb25uZWN0ZWRDb21wb25lbnRzJyBpcyBhY3RpdmF0ZWQuIiksMjApLCRvKSx3YSksb24ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxKeHQpLGoxKSwiRWRnZSBTcGFjaW5nIiksIlNwYWNpbmcgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gYW55IHR3byBlZGdlcy4gTm90ZSB0aGF0IHdoaWxlIHRoaXMgY2FuIHNvbWV3aGF0IGVhc2lseSBiZSBzYXRpc2ZpZWQgZm9yIHRoZSBzZWdtZW50cyBvZiBvcnRob2dvbmFsbHkgZHJhd24gZWRnZXMsIGl0IGlzIGhhcmRlciBmb3IgZ2VuZXJhbCBwb2x5bGluZXMgb3Igc3BsaW5lcy4iKSwxMCksJG8pLHdhKSxvbihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLFBvdCksajEpLCJFZGdlIExhYmVsIFNwYWNpbmciKSwiVGhlIG1pbmltYWwgZGlzdGFuY2UgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gYSBsYWJlbCBhbmQgdGhlIGVkZ2UgaXQgaXMgYXNzb2NpYXRlZCB3aXRoLiBOb3RlIHRoYXQgdGhlIHBsYWNlbWVudCBvZiBhIGxhYmVsIGlzIGluZmx1ZW5jZWQgYnkgdGhlICdlZGdlbGFiZWxzLnBsYWNlbWVudCcgb3B0aW9uLiIpLDIpLCRvKSx3YSksb24ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSx0a3QpLGoxKSwiRWRnZSBOb2RlIFNwYWNpbmciKSwiU3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBub2RlcyBhbmQgZWRnZXMuIiksMTApLCRvKSx3YSksb24ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxla3QpLGoxKSwiTGFiZWwgU3BhY2luZyIpLCJEZXRlcm1pbmVzIHRoZSBhbW91bnQgb2Ygc3BhY2UgdG8gYmUgbGVmdCBiZXR3ZWVuIHR3byBsYWJlbHMgb2YgdGhlIHNhbWUgZ3JhcGggZWxlbWVudC4iKSwwKSwkbyksd2EpLG9uKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsaWt0KSxqMSksIkxhYmVsIE5vZGUgU3BhY2luZyIpLCJTcGFjaW5nIHRvIGJlIHByZXNlcnZlZCBiZXR3ZWVuIGxhYmVscyBhbmQgdGhlIGJvcmRlciBvZiBub2RlIHRoZXkgYXJlIGFzc29jaWF0ZWQgd2l0aC4gTm90ZSB0aGF0IHRoZSBwbGFjZW1lbnQgb2YgYSBsYWJlbCBpcyBpbmZsdWVuY2VkIGJ5IHRoZSAnbm9kZWxhYmVscy5wbGFjZW1lbnQnIG9wdGlvbi4iKSw1KSwkbyksd2EpLG9uKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsbmt0KSxqMSksIkhvcml6b250YWwgc3BhY2luZyBiZXR3ZWVuIExhYmVsIGFuZCBQb3J0IiksIkhvcml6b250YWwgc3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBsYWJlbHMgYW5kIHRoZSBwb3J0cyB0aGV5IGFyZSBhc3NvY2lhdGVkIHdpdGguIE5vdGUgdGhhdCB0aGUgcGxhY2VtZW50IG9mIGEgbGFiZWwgaXMgaW5mbHVlbmNlZCBieSB0aGUgJ3BvcnRsYWJlbHMucGxhY2VtZW50JyBvcHRpb24uIiksMSksJG8pLHdhKSxvbihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLHJrdCksajEpLCJWZXJ0aWNhbCBzcGFjaW5nIGJldHdlZW4gTGFiZWwgYW5kIFBvcnQiKSwiVmVydGljYWwgc3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBsYWJlbHMgYW5kIHRoZSBwb3J0cyB0aGV5IGFyZSBhc3NvY2lhdGVkIHdpdGguIE5vdGUgdGhhdCB0aGUgcGxhY2VtZW50IG9mIGEgbGFiZWwgaXMgaW5mbHVlbmNlZCBieSB0aGUgJ3BvcnRsYWJlbHMucGxhY2VtZW50JyBvcHRpb24uIiksMSksJG8pLHdhKSxvbihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLGt5KSxqMSksIk5vZGUgU3BhY2luZyIpLCJUaGUgbWluaW1hbCBkaXN0YW5jZSB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBlYWNoIHR3byBub2Rlcy4iKSwyMCksJG8pLHdhKSxvbihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLHNrdCksajEpLCJOb2RlIFNlbGYgTG9vcCBTcGFjaW5nIiksIlNwYWNpbmcgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gYSBub2RlIGFuZCBpdHMgc2VsZiBsb29wcy4iKSwxMCksJG8pLHdhKSxvbihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLGFrdCksajEpLCJQb3J0IFNwYWNpbmciKSwiU3BhY2luZyBiZXR3ZWVuIHBhaXJzIG9mIHBvcnRzIG9mIHRoZSBzYW1lIG5vZGUuIiksMTApLCRvKSx3YSksS2kocW4sdXQob3QoZXAsMSksb2UsMTc1LDAsW3VhXSkpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSxva3QpLGoxKSwiSW5kaXZpZHVhbCBTcGFjaW5nIiksIkFsbG93cyB0byBzcGVjaWZ5IGluZGl2aWR1YWwgc3BhY2luZyB2YWx1ZXMgZm9yIGdyYXBoIGVsZW1lbnRzIHRoYXQgc2hhbGwgYmUgZGlmZmVyZW50IGZyb20gdGhlIHZhbHVlIHNwZWNpZmllZCBmb3IgdGhlIGVsZW1lbnQncyBwYXJlbnQuIiksRzEpLHg0ZSksS2kodWEsdXQob3QoZXAsMSksb2UsMTc1LDAsW0lkLHEyLHRwXSkpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxNa3QpLGoxKSwiQWRkaXRpb25hbCBQb3J0IFNwYWNlIiksIkFkZGl0aW9uYWwgc3BhY2UgYXJvdW5kIHRoZSBzZXRzIG9mIHBvcnRzIG9uIGVhY2ggbm9kZSBzaWRlLiBGb3IgZWFjaCBzaWRlIG9mIGEgbm9kZSwgdGhpcyBvcHRpb24gY2FuIHJlc2VydmUgYWRkaXRpb25hbCBzcGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwb3J0cyBvbiBlYWNoIHNpZGUuIEZvciBleGFtcGxlLCBhIHRvcCBzcGFjaW5nIG9mIDIwIG1ha2VzIHN1cmUgdGhhdCB0aGUgZmlyc3QgcG9ydCBvbiB0aGUgd2VzdGVybiBhbmQgZWFzdGVybiBzaWRlIGlzIDIwIHVuaXRzIGF3YXkgZnJvbSB0aGUgbm9ydGhlcm4gYm9yZGVyLiIpLG9BdCksRzEpLENFdCksb24ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSxiY3QpLGlkZSksIkxheW91dCBQYXJ0aXRpb24iKSwiUGFydGl0aW9uIHRvIHdoaWNoIHRoZSBub2RlIGJlbG9uZ3MuIFRoaXMgcmVxdWlyZXMgTGF5b3V0IFBhcnRpdGlvbmluZyB0byBiZSBhY3RpdmUuIE5vZGVzIHdpdGggbG93ZXIgcGFydGl0aW9uIElEcyB3aWxsIGFwcGVhciB0byB0aGUgbGVmdCBvZiBub2RlcyB3aXRoIGhpZ2hlciBwYXJ0aXRpb24gSURzIChhc3N1bWluZyBhIGxlZnQtdG8tcmlnaHQgbGF5b3V0IGRpcmVjdGlvbikuIikseGMpLEhhKSxLaShxbix1dChvdChlcCwxKSxvZSwxNzUsMCxbdWFdKSkpKSksYmEoZSxiY3QscGN0LEszZSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLHBjdCksaWRlKSwiTGF5b3V0IFBhcnRpdGlvbmluZyIpLCJXaGV0aGVyIHRvIGFjdGl2YXRlIHBhcnRpdGlvbmVkIGxheW91dC4gVGhpcyB3aWxsIGFsbG93IHRvIGdyb3VwIG5vZGVzIHRocm91Z2ggdGhlIExheW91dCBQYXJ0aXRpb24gb3B0aW9uLiBhIHBhaXIgb2Ygbm9kZXMgd2l0aCBkaWZmZXJlbnQgcGFydGl0aW9uIGluZGljZXMgaXMgdGhlbiBwbGFjZWQgc3VjaCB0aGF0IHRoZSBub2RlIHdpdGggbG93ZXIgaW5kZXggaXMgcGxhY2VkIHRvIHRoZSBsZWZ0IG9mIHRoZSBvdGhlciBub2RlICh3aXRoIGxlZnQtdG8tcmlnaHQgbGF5b3V0IGRpcmVjdGlvbikuIERlcGVuZGluZyBvbiB0aGUgbGF5b3V0IGFsZ29yaXRobSwgdGhpcyBtYXkgb25seSBiZSBndWFyYW50ZWVkIHRvIHdvcmsgaWYgYWxsIG5vZGVzIGhhdmUgYSBsYXlvdXQgcGFydGl0aW9uIGNvbmZpZ3VyZWQsIG9yIGF0IGxlYXN0IGlmIGVkZ2VzIHRoYXQgY3Jvc3MgcGFydGl0aW9ucyBhcmUgbm90IHBhcnQgb2YgYSBwYXJ0aXRpb24tY3Jvc3NpbmcgY3ljbGUuIiksV1N0KSxQYSksV3MpLG9uKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUscGt0KSxzZGUpLCJOb2RlIExhYmVsIFBhZGRpbmciKSwiRGVmaW5lIHBhZGRpbmcgZm9yIG5vZGUgbGFiZWxzIHRoYXQgYXJlIHBsYWNlZCBpbnNpZGUgb2YgYSBub2RlLiIpLHpTdCksRzEpLFNFdCksb24ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxGNyksc2RlKSwiTm9kZSBMYWJlbCBQbGFjZW1lbnQiKSwiSGludHMgZm9yIHdoZXJlIG5vZGUgbGFiZWxzIGFyZSB0byBiZSBwbGFjZWQ7IGlmIGVtcHR5LCB0aGUgbm9kZSBsYWJlbCdzIHBvc2l0aW9uIGlzIG5vdCBtb2RpZmllZC4iKSxxU3QpLFJ4KSx2byksS2kodWEsdXQob3QoZXAsMSksb2UsMTc1LDAsW3RwXSkpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSx3a3QpLGJIKSwiUG9ydCBBbGlnbm1lbnQiKSwiRGVmaW5lcyB0aGUgZGVmYXVsdCBwb3J0IGRpc3RyaWJ1dGlvbiBmb3IgYSBub2RlLiBNYXkgYmUgb3ZlcnJpZGRlbiBmb3IgZWFjaCBzaWRlIGluZGl2aWR1YWxseS4iKSxZU3QpLG1zKSxRUyksb24odWEpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSxta3QpLGJIKSwiUG9ydCBBbGlnbm1lbnQgKE5vcnRoKSIpLCJEZWZpbmVzIGhvdyBwb3J0cyBvbiB0aGUgbm9ydGhlcm4gc2lkZSBhcmUgcGxhY2VkLCBvdmVycmlkaW5nIHRoZSBub2RlJ3MgZ2VuZXJhbCBwb3J0IGFsaWdubWVudC4iKSxtcyksUVMpLG9uKHVhKSkpKSxhbihlLG5ldyBYZShybihubihzbihaZShlbihKZSh0bihuZXcgVWUseWt0KSxiSCksIlBvcnQgQWxpZ25tZW50IChTb3V0aCkiKSwiRGVmaW5lcyBob3cgcG9ydHMgb24gdGhlIHNvdXRoZXJuIHNpZGUgYXJlIHBsYWNlZCwgb3ZlcnJpZGluZyB0aGUgbm9kZSdzIGdlbmVyYWwgcG9ydCBhbGlnbm1lbnQuIiksbXMpLFFTKSxvbih1YSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLHhrdCksYkgpLCJQb3J0IEFsaWdubWVudCAoV2VzdCkiKSwiRGVmaW5lcyBob3cgcG9ydHMgb24gdGhlIHdlc3Rlcm4gc2lkZSBhcmUgcGxhY2VkLCBvdmVycmlkaW5nIHRoZSBub2RlJ3MgZ2VuZXJhbCBwb3J0IGFsaWdubWVudC4iKSxtcyksUVMpLG9uKHVhKSkpKSxhbihlLG5ldyBYZShybihubihzbihaZShlbihKZSh0bihuZXcgVWUsa2t0KSxiSCksIlBvcnQgQWxpZ25tZW50IChFYXN0KSIpLCJEZWZpbmVzIGhvdyBwb3J0cyBvbiB0aGUgZWFzdGVybiBzaWRlIGFyZSBwbGFjZWQsIG92ZXJyaWRpbmcgdGhlIG5vZGUncyBnZW5lcmFsIHBvcnQgYWxpZ25tZW50LiIpLG1zKSxRUyksb24odWEpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxNNCksRmN0KSwiTm9kZSBTaXplIENvbnN0cmFpbnRzIiksIldoYXQgc2hvdWxkIGJlIHRha2VuIGludG8gYWNjb3VudCB3aGVuIGNhbGN1bGF0aW5nIGEgbm9kZSdzIHNpemUuIEVtcHR5IHNpemUgY29uc3RyYWludHMgc3BlY2lmeSB0aGF0IGEgbm9kZSdzIHNpemUgaXMgYWxyZWFkeSBmaXhlZCBhbmQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLiIpLEhTdCksUngpLHRBKSxvbih1YSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLGJ4KSxGY3QpLCJOb2RlIFNpemUgT3B0aW9ucyIpLCJPcHRpb25zIG1vZGlmeWluZyB0aGUgYmVoYXZpb3Igb2YgdGhlIHNpemUgY29uc3RyYWludHMgc2V0IG9uIGEgbm9kZS4gRWFjaCBtZW1iZXIgb2YgdGhlIHNldCBzcGVjaWZpZXMgc29tZXRoaW5nIHRoYXQgc2hvdWxkIGJlIHRha2VuIGludG8gYWNjb3VudCB3aGVuIGNhbGN1bGF0aW5nIG5vZGUgc2l6ZXMuIFRoZSBlbXB0eSBzZXQgY29ycmVzcG9uZHMgdG8gbm8gZnVydGhlciBtb2RpZmljYXRpb25zLiIpLEdTdCksUngpLENBdCksb24odWEpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSx2eCksRmN0KSwiTm9kZSBTaXplIE1pbmltdW0iKSwiVGhlIG1pbmltYWwgc2l6ZSB0byB3aGljaCBhIG5vZGUgY2FuIGJlIHJlZHVjZWQuIiksVlN0KSxHMSksbmEpLG9uKHVhKSkpKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsZ2N0KSxGY3QpLCJGaXhlZCBHcmFwaCBTaXplIiksIkJ5IGRlZmF1bHQsIHRoZSBmaXhlZCBsYXlvdXQgcHJvdmlkZXIgd2lsbCBlbmxhcmdlIGEgZ3JhcGggdW50aWwgaXQgaXMgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gaXRzIGNoaWxkcmVuLiBJZiB0aGlzIG9wdGlvbiBpcyBzZXQsIGl0IHdvbid0IGRvIHNvLiIpLCExKSxQYSksV3MpLG9uKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsVGt0KSxkY3QpLCJFZGdlIExhYmVsIFBsYWNlbWVudCIpLCJHaXZlcyBhIGhpbnQgb24gd2hlcmUgdG8gcHV0IGVkZ2UgbGFiZWxzLiIpLE1TdCksbXMpLHVBdCksb24odHApKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxWcSksZGN0KSwiSW5saW5lIEVkZ2UgTGFiZWxzIiksIklmIHRydWUsIGFuIGVkZ2UgbGFiZWwgaXMgcGxhY2VkIGRpcmVjdGx5IG9uIGl0cyBlZGdlLiBNYXkgb25seSBhcHBseSB0byBjZW50ZXIgZWRnZSBsYWJlbHMuIFRoaXMga2luZCBvZiBsYWJlbCBwbGFjZW1lbnQgaXMgb25seSBhZHZpc2FibGUgaWYgdGhlIGxhYmVsJ3MgcmVuZGVyaW5nIGlzIHN1Y2ggdGhhdCBpdCBpcyBub3QgY3Jvc3NlZCBieSBpdHMgZWRnZSBhbmQgdGh1cyBzdGF5cyBsZWdpYmxlLiIpLCExKSxQYSksV3MpLG9uKHRwKSkpKSxhbihlLG5ldyBYZShybihubihzbihaZShlbihKZSh0bihuZXcgVWUsSzVuKSwiZm9udCIpLCJGb250IE5hbWUiKSwiRm9udCBuYW1lIHVzZWQgZm9yIGEgbGFiZWwuIiksa0UpLExlKSxvbih0cCkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLG5kZSksImZvbnQiKSwiRm9udCBTaXplIiksIkZvbnQgc2l6ZSB1c2VkIGZvciBhIGxhYmVsLiIpLHhjKSxIYSksb24odHApKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSxBa3QpLEJjdCksIlBvcnQgQW5jaG9yIE9mZnNldCIpLCJUaGUgb2Zmc2V0IHRvIHRoZSBwb3J0IHBvc2l0aW9uIHdoZXJlIGNvbm5lY3Rpb25zIHNoYWxsIGJlIGF0dGFjaGVkLiIpLEcxKSxuYSksb24ocTIpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSxfa3QpLEJjdCksIlBvcnQgSW5kZXgiKSwiVGhlIGluZGV4IG9mIGEgcG9ydCBpbiB0aGUgZml4ZWQgb3JkZXIgYXJvdW5kIGEgbm9kZS4gVGhlIG9yZGVyIGlzIGFzc3VtZWQgYXMgY2xvY2t3aXNlLCBzdGFydGluZyB3aXRoIHRoZSBsZWZ0bW9zdCBwb3J0IG9uIHRoZSB0b3Agc2lkZS4gVGhpcyBvcHRpb24gbXVzdCBiZSBzZXQgaWYgJ1BvcnQgQ29uc3RyYWludHMnIGlzIHNldCB0byBGSVhFRF9PUkRFUiBhbmQgbm8gc3BlY2lmaWMgcG9zaXRpb25zIGFyZSBnaXZlbiBmb3IgdGhlIHBvcnRzLiBBZGRpdGlvbmFsbHksIHRoZSBvcHRpb24gJ1BvcnQgU2lkZScgbXVzdCBiZSBkZWZpbmVkIGluIHRoaXMgY2FzZS4iKSx4YyksSGEpLG9uKHEyKSkpKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsbGt0KSxCY3QpLCJQb3J0IFNpZGUiKSwiVGhlIHNpZGUgb2YgYSBub2RlIG9uIHdoaWNoIGEgcG9ydCBpcyBzaXR1YXRlZC4gVGhpcyBvcHRpb24gbXVzdCBiZSBzZXQgaWYgJ1BvcnQgQ29uc3RyYWludHMnIGlzIHNldCB0byBGSVhFRF9TSURFIG9yIEZJWEVEX09SREVSIGFuZCBubyBzcGVjaWZpYyBwb3NpdGlvbnMgYXJlIGdpdmVuIGZvciB0aGUgcG9ydHMuIiksdEF0KSxtcyksWmEpLG9uKHEyKSkpKSxhbihlLG5ldyBYZShybihubihzbihaZShlbihKZSh0bihuZXcgVWUsY2t0KSxCY3QpLCJQb3J0IEJvcmRlciBPZmZzZXQiKSwiVGhlIG9mZnNldCBvZiBwb3J0cyBvbiB0aGUgbm9kZSBib3JkZXIuIFdpdGggYSBwb3NpdGl2ZSBvZmZzZXQgdGhlIHBvcnQgaXMgbW92ZWQgb3V0c2lkZSBvZiB0aGUgbm9kZSwgd2hpbGUgd2l0aCBhIG5lZ2F0aXZlIG9mZnNldCB0aGUgcG9ydCBpcyBtb3ZlZCB0b3dhcmRzIHRoZSBpbnNpZGUuIEFuIG9mZnNldCBvZiAwIG1lYW5zIHRoYXQgdGhlIHBvcnQgaXMgcGxhY2VkIGRpcmVjdGx5IG9uIHRoZSBub2RlIGJvcmRlciwgaS5lLiBpZiB0aGUgcG9ydCBzaWRlIGlzIG5vcnRoLCB0aGUgcG9ydCdzIHNvdXRoIGJvcmRlciB0b3VjaGVzIHRoZSBub2RlcydzIG5vcnRoIGJvcmRlcjsgaWYgdGhlIHBvcnQgc2lkZSBpcyBlYXN0LCB0aGUgcG9ydCdzIHdlc3QgYm9yZGVyIHRvdWNoZXMgdGhlIG5vZGVzJ3MgZWFzdCBib3JkZXI7IGlmIHRoZSBwb3J0IHNpZGUgaXMgc291dGgsIHRoZSBwb3J0J3Mgbm9ydGggYm9yZGVyIHRvdWNoZXMgdGhlIG5vZGUncyBzb3V0aCBib3JkZXI7IGlmIHRoZSBwb3J0IHNpZGUgaXMgd2VzdCwgdGhlIHBvcnQncyBlYXN0IGJvcmRlciB0b3VjaGVzIHRoZSBub2RlJ3Mgd2VzdCBib3JkZXIuIiksJG8pLHdhKSxvbihxMikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLEI3KSxhOHQpLCJQb3J0IExhYmVsIFBsYWNlbWVudCIpLCJEZWNpZGVzIG9uIGEgcGxhY2VtZW50IG1ldGhvZCBmb3IgcG9ydCBsYWJlbHM7IGlmIGVtcHR5LCB0aGUgbm9kZSBsYWJlbCdzIHBvc2l0aW9uIGlzIG5vdCBtb2RpZmllZC4iKSxaU3QpLFJ4KSxWRyksb24odWEpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxia3QpLGE4dCksIlBvcnQgTGFiZWxzIE5leHQgdG8gUG9ydCIpLCJVc2UgJ3BvcnRMYWJlbHMucGxhY2VtZW50JzogTkVYVF9UT19QT1JUX09GX1BPU1NJQkxFLiIpLCExKSxQYSksV3MpLG9uKHVhKSkpKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsdmt0KSxhOHQpLCJUcmVhdCBQb3J0IExhYmVscyBhcyBHcm91cCIpLCJJZiB0aGlzIG9wdGlvbiBpcyB0cnVlIChkZWZhdWx0KSwgdGhlIGxhYmVscyBvZiBhIHBvcnQgd2lsbCBiZSB0cmVhdGVkIGFzIGEgZ3JvdXAgd2hlbiBpdCBjb21lcyB0byBjZW50ZXJpbmcgdGhlbSBuZXh0IHRvIHRoZWlyIHBvcnQuIElmIHRoaXMgb3B0aW9uIGlzIGZhbHNlLCBvbmx5IHRoZSBmaXJzdCBsYWJlbCB3aWxsIGJlIGNlbnRlcmVkIG5leHQgdG8gdGhlIHBvcnQsIHdpdGggdGhlIG90aGVycyBiZWluZyBwbGFjZWQgYmVsb3cuIFRoaXMgb25seSBhcHBsaWVzIHRvIGxhYmVscyBvZiBlYXN0ZXJuIGFuZCB3ZXN0ZXJuIHBvcnRzIGFuZCB3aWxsIGhhdmUgbm8gZWZmZWN0IGlmIGxhYmVscyBhcmUgbm90IHBsYWNlZCBuZXh0IHRvIHRoZWlyIHBvcnQuIiksITApLFBhKSxXcyksb24odWEpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxma3QpLGFkZSksIkFjdGl2YXRlIEluc2lkZSBTZWxmIExvb3BzIiksIldoZXRoZXIgdGhpcyBub2RlIGFsbG93cyB0byByb3V0ZSBzZWxmIGxvb3BzIGluc2lkZSBvZiBpdCBpbnN0ZWFkIG9mIGFyb3VuZCBpdC4gSWYgc2V0IHRvIHRydWUsIHRoaXMgd2lsbCBtYWtlIHRoZSBub2RlIGEgY29tcG91bmQgbm9kZSBpZiBpdCBpc24ndCBhbHJlYWR5LCBhbmQgd2lsbCByZXF1aXJlIHRoZSBsYXlvdXQgYWxnb3JpdGhtIHRvIHN1cHBvcnQgY29tcG91bmQgbm9kZXMgd2l0aCBoaWVyYXJjaGljYWwgcG9ydHMuIiksITEpLFBhKSxXcyksb24odWEpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKHluKFplKGVuKEplKHRuKG5ldyBVZSxka3QpLGFkZSksIkluc2lkZSBTZWxmIExvb3AiKSwiV2hldGhlciBhIHNlbGYgbG9vcCBzaG91bGQgYmUgcm91dGVkIGluc2lkZSBhIG5vZGUgaW5zdGVhZCBvZiBhcm91bmQgdGhhdCBub2RlLiIpLCExKSxQYSksV3MpLG9uKElkKSkpKSxhbihlLG5ldyBYZShybihubihzbih5bihaZShlbihKZSh0bihuZXcgVWUsRG90KSwiZWRnZSIpLCJFZGdlIFRoaWNrbmVzcyIpLCJUaGUgdGhpY2tuZXNzIG9mIGFuIGVkZ2UuIFRoaXMgaXMgYSBoaW50IG9uIHRoZSBsaW5lIHdpZHRoIHVzZWQgdG8gZHJhdyBhbiBlZGdlLCBwb3NzaWJseSByZXF1aXJpbmcgbW9yZSBzcGFjZSB0byBiZSByZXNlcnZlZCBmb3IgaXQuIiksMSksJG8pLHdhKSxvbihJZCkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oeW4oWmUoZW4oSmUodG4obmV3IFVlLHJkZSksImVkZ2UiKSwiRWRnZSBUeXBlIiksIlRoZSB0eXBlIG9mIGFuIGVkZ2UuIFRoaXMgaXMgdXN1YWxseSB1c2VkIGZvciBVTUwgY2xhc3MgZGlhZ3JhbXMsIHdoZXJlIGFzc29jaWF0aW9ucyBtdXN0IGJlIGhhbmRsZWQgZGlmZmVyZW50bHkgZnJvbSBnZW5lcmFsaXphdGlvbnMuIiksTlN0KSxtcykscEF0KSxvbihJZCkpKSksVlQoZSxuZXcgJDYoUlQoUWsoWGsobmV3IHdtLFVuKSwiTGF5ZXJlZCIpLCdUaGUgbGF5ZXItYmFzZWQgbWV0aG9kIHdhcyBpbnRyb2R1Y2VkIGJ5IFN1Z2l5YW1hLCBUYWdhd2EgYW5kIFRvZGEgaW4gMTk4MS4gSXQgZW1waGFzaXplcyB0aGUgZGlyZWN0aW9uIG9mIGVkZ2VzIGJ5IHBvaW50aW5nIGFzIG1hbnkgZWRnZXMgYXMgcG9zc2libGUgaW50byB0aGUgc2FtZSBkaXJlY3Rpb24uIFRoZSBub2RlcyBhcmUgYXJyYW5nZWQgaW4gbGF5ZXJzLCB3aGljaCBhcmUgc29tZXRpbWVzIGNhbGxlZCAiaGllcmFyY2hpZXMiLCBhbmQgdGhlbiByZW9yZGVyZWQgc3VjaCB0aGF0IHRoZSBudW1iZXIgb2YgZWRnZSBjcm9zc2luZ3MgaXMgbWluaW1pemVkLiBBZnRlcndhcmRzLCBjb25jcmV0ZSBjb29yZGluYXRlcyBhcmUgY29tcHV0ZWQgZm9yIHRoZSBub2RlcyBhbmQgZWRnZSBiZW5kIHBvaW50cy4nKSkpLFZUKGUsbmV3ICQ2KFJUKFFrKFhrKG5ldyB3bSwib3JnLmVjbGlwc2UuZWxrLm9ydGhvZ29uYWwiKSwiT3J0aG9nb25hbCIpLGBPcnRob2dvbmFsIG1ldGhvZHMgdGhhdCBmb2xsb3cgdGhlICJ0b3BvbG9neS1zaGFwZS1tZXRyaWNzIiBhcHByb2FjaCBieSBCYXRpbmksIE5hcmRlbGxpIGFuZCBUYW1hc3NpYSAnODYuIFRoZSBmaXJzdCBwaGFzZSBkZXRlcm1pbmVzIHRoZSB0b3BvbG9neSBvZiB0aGUgZHJhd2luZyBieSBhcHBseWluZyBhIHBsYW5hcml6YXRpb24gdGVjaG5pcXVlLCB3aGljaCByZXN1bHRzIGluIGEgcGxhbmFyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBncmFwaC4gVGhlIG9ydGhvZ29uYWwgc2hhcGUgaXMgY29tcHV0ZWQgaW4gdGhlIHNlY29uZCBwaGFzZSwgd2hpY2ggYWltcyBhdCBtaW5pbWl6aW5nIHRoZSBudW1iZXIgb2YgZWRnZSBiZW5kcywgYW5kIGlzIGNhbGxlZCBvcnRob2dvbmFsaXphdGlvbi4gVGhlIHRoaXJkIHBoYXNlIGxlYWRzIHRvIGNvbmNyZXRlIGNvb3JkaW5hdGVzIGZvciBub2RlcyBhbmQgZWRnZSBiZW5kIHBvaW50cyBieSBhcHBseWluZyBhIGNvbXBhY3Rpb24gbWV0aG9kLCB0aHVzIGRlZmluaW5nIHRoZSBtZXRyaWNzLmApKSksVlQoZSxuZXcgJDYoUlQoUWsoWGsobmV3IHdtLFdsKSwiRm9yY2UiKSwiTGF5b3V0IGFsZ29yaXRobXMgdGhhdCBmb2xsb3cgcGh5c2ljYWwgYW5hbG9naWVzIGJ5IHNpbXVsYXRpbmcgYSBzeXN0ZW0gb2YgYXR0cmFjdGl2ZSBhbmQgcmVwdWxzaXZlIGZvcmNlcy4gVGhlIGZpcnN0IHN1Y2Nlc3NmdWwgbWV0aG9kIG9mIHRoaXMga2luZCB3YXMgcHJvcG9zZWQgYnkgRWFkZXMgaW4gMTk4NC4iKSkpLFZUKGUsbmV3ICQ2KFJUKFFrKFhrKG5ldyB3bSwib3JnLmVjbGlwc2UuZWxrLmNpcmNsZSIpLCJDaXJjbGUiKSwiQ2lyY3VsYXIgbGF5b3V0IGFsZ29yaXRobXMgZW1waGFzaXplIGN5Y2xlcyBvciBiaWNvbm5lY3RlZCBjb21wb25lbnRzIG9mIGEgZ3JhcGggYnkgYXJyYW5naW5nIHRoZW0gaW4gY2lyY2xlcy4gVGhpcyBpcyB1c2VmdWwgaWYgYSBkcmF3aW5nIGlzIGRlc2lyZWQgd2hlcmUgc3VjaCBjb21wb25lbnRzIGFyZSBjbGVhcmx5IGdyb3VwZWQsIG9yIHdoZXJlIGN5Y2xlcyBhcmUgc2hvd24gYXMgcHJvbWluZW50IE9QVElPTlMgb2YgdGhlIGdyYXBoLiIpKSksVlQoZSxuZXcgJDYoUlQoUWsoWGsobmV3IHdtLE0xZSksIlRyZWUiKSwiU3BlY2lhbGl6ZWQgbGF5b3V0IG1ldGhvZHMgZm9yIHRyZWVzLCBpLmUuIGFjeWNsaWMgZ3JhcGhzLiBUaGUgcmVndWxhciBzdHJ1Y3R1cmUgb2YgZ3JhcGhzIHRoYXQgaGF2ZSBubyB1bmRpcmVjdGVkIGN5Y2xlcyBjYW4gYmUgZW1waGFzaXplZCB1c2luZyBhbiBhbGdvcml0aG0gb2YgdGhpcyB0eXBlLiIpKSksVlQoZSxuZXcgJDYoUlQoUWsoWGsobmV3IHdtLCJvcmcuZWNsaXBzZS5lbGsucGxhbmFyIiksIlBsYW5hciIpLCJBbGdvcml0aG1zIHRoYXQgcmVxdWlyZSBhIHBsYW5hciBvciB1cHdhcmQgcGxhbmFyIGdyYXBoLiBNb3N0IG9mIHRoZXNlIGFsZ29yaXRobXMgYXJlIHRoZW9yZXRpY2FsbHkgaW50ZXJlc3RpbmcsIGJ1dCBub3QgcHJhY3RpY2FsbHkgdXNhYmxlLiIpKSksVlQoZSxuZXcgJDYoUlQoUWsoWGsobmV3IHdtLF9kKSwiUmFkaWFsIiksIlJhZGlhbCBsYXlvdXQgYWxnb3JpdGhtcyB1c3VhbGx5IHBvc2l0aW9uIHRoZSBub2RlcyBvZiB0aGUgZ3JhcGggb24gY29uY2VudHJpYyBjaXJjbGVzLiIpKSksTXVlKChuZXcgJEIsZSkpLEd1ZSgobmV3IG50dCxlKSksYXVlKChuZXcgekIsZSkpfTt2YXIgR1MsejNlLENTdCxqeCxxM2UsSDNlLFNTdCxWM2UsQkcsQVN0LFVPLGp3LExTdCxzZnQsYWZ0LE1TdCxEU3QsSVN0LE9TdCxOU3QsUFN0LGk1LEZTdCxHM2UsV08sb2Z0LFJHLEJTdCxzNSxSU3QsS08salN0LCRTdCx6U3QsYTUscVN0LEgyLEhTdCxqRyxvNSxWU3QsbWIsR1N0LCRHLFlPLFYyLFVTdCxVM2UsV1N0LFczZSxLM2UsS1N0LFlTdCxjZnQsdWZ0LGxmdCxoZnQsWFN0LG1sLFVTLFFTdCxmZnQsZGZ0LEt5LFpTdCxKU3QsYzUsdEF0LCR4LHpHLGdmdCxFRSxZM2UscGZ0LFgzZSxRM2UsZUF0LFozZSxuQXQsSjNlLHp4LHJBdCxxRyxpQXQsc0F0LEcyLHQ0ZSxhQXQsb0F0LGNBdDtOKEJoLCJDb3JlT3B0aW9ucyIsNjg0KSxEKDEwMywyMix7MzoxLDM1OjEsMjI6MSwxMDM6MX0sTE0pO3ZhciBRMCxIaCxfZixjMCxaMCxXUz16cihCaCxLNnQsMTAzLFVyLHZzbixGSmUpLGU0ZTtEKDI3MiwyMix7MzoxLDM1OjEsMjI6MSwyNzI6MX0sSGV0KTt2YXIgVEUsWXksX0UsdUF0PXpyKEJoLCJFZGdlTGFiZWxQbGFjZW1lbnQiLDI3MixVcixRcm4sQkplKSxuNGU7RCgyMTgsMjIsezM6MSwzNToxLDIyOjEsMjE4OjF9LEtSKTt2YXIgQ0UsWE8scXgsYmZ0LHZmdD16cihCaCwiRWRnZVJvdXRpbmciLDIxOCxVcixIaW4sUkplKSxyNGU7RCgzMTIsMjIsezM6MSwzNToxLDIyOjEsMzEyOjF9LHJfKTt2YXIgbEF0LGhBdCxmQXQsZEF0LHdmdCxnQXQscEF0PXpyKEJoLCJFZGdlVHlwZSIsMzEyLFVyLHJhbixqSmUpLGk0ZTtEKDk3NywxLFBoLCRCKSxsLlFlPWZ1bmN0aW9uKGUpe011ZShlKX07dmFyIGJBdCx2QXQsd0F0LG1BdCxzNGUseUF0LEtTO04oQmgsIkZpeGVkTGF5b3V0ZXJPcHRpb25zIiw5NzcpLEQoOTc4LDEse30sQkwpLGwuJGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1uZXcgQlosZX0sbC5fZT1mdW5jdGlvbihlKXt9LE4oQmgsIkZpeGVkTGF5b3V0ZXJPcHRpb25zL0ZpeGVkRmFjdG9yeSIsOTc4KSxEKDMzNCwyMix7MzoxLDM1OjEsMjI6MSwzMzQ6MX0sVmV0KTt2YXIgbnAsSEcsWVMseEF0PXpyKEJoLCJIaWVyYXJjaHlIYW5kbGluZyIsMzM0LFVyLFhybiwkSmUpLGE0ZTtEKDI4NSwyMix7MzoxLDM1OjEsMjI6MSwyODU6MX0sWVIpO3ZhciB1MCx5YixRTyxaTyxvNGU9enIoQmgsIkxhYmVsU2lkZSIsMjg1LFVyLHFpbix6SmUpLGM0ZTtEKDkzLDIyLHszOjEsMzU6MSwyMjoxLDkzOjF9LHozKTt2YXIgSjAsQ2YsVmgsU2YsUWwsQWYsR2gsbDAsTGYsdm89enIoQmgsIk5vZGVMYWJlbFBsYWNlbWVudCIsOTMsVXIsYW9uLHFKZSksdTRlO0QoMjQ5LDIyLHszOjEsMzU6MSwyMjoxLDI0OToxfSxNTSk7dmFyIGtBdCxYUyx4YixFQXQsSk8sUVM9enIoQmgsIlBvcnRBbGlnbm1lbnQiLDI0OSxVcix3c24sSEplKSxsNGU7RCg5OCwyMix7MzoxLDM1OjEsMjI6MSw5ODoxfSxpXyk7dmFyIFUyLEtjLGgwLFNFLFUxLGtiLFRBdD16cihCaCwiUG9ydENvbnN0cmFpbnRzIiw5OCxVciwkc24sVkplKSxoNGU7RCgyNzMsMjIsezM6MSwzNToxLDIyOjEsMjczOjF9LHNfKTt2YXIgWlMsSlMsdGcsdE4sRWIsSHgsVkc9enIoQmgsIlBvcnRMYWJlbFBsYWNlbWVudCIsMjczLFVyLG5hbixHSmUpLGY0ZTtEKDYxLDIyLHszOjEsMzU6MSwyMjoxLDYxOjF9LERNKTt2YXIgSG4sT24seGgsa2gsRHUsZ3UsVzEsTWYsb2wsWXUsWWMsY2wsSXUsT3UsRGYsWmwsSmwsVWgseXIsYWMsQm4sWmE9enIoQmgsIlBvcnRTaWRlIiw2MSxVcixnc24sS0plKSxkNGU7RCg5ODEsMSxQaCx6QiksbC5RZT1mdW5jdGlvbihlKXthdWUoZSl9O3ZhciBnNGUscDRlLF9BdCxiNGUsdjRlO04oQmgsIlJhbmRvbUxheW91dGVyT3B0aW9ucyIsOTgxKSxEKDk4MiwxLHt9LEhaKSxsLiRlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9bmV3IEdaLGV9LGwuX2U9ZnVuY3Rpb24oZSl7fSxOKEJoLCJSYW5kb21MYXlvdXRlck9wdGlvbnMvUmFuZG9tRmFjdG9yeSIsOTgyKSxEKDM3NCwyMix7MzoxLDM1OjEsMjI6MSwzNzQ6MX0sWFIpO3ZhciBYeSxlTixuTixXMix0QT16cihCaCwiU2l6ZUNvbnN0cmFpbnQiLDM3NCxVcix6aW4sVUplKSx3NGU7RCgyNTksMjIsezM6MSwzNToxLDIyOjEsMjU5OjF9LHEzKTt2YXIgck4sR0csQUUsbWZ0LGlOLGVBLFVHLFdHLEtHLENBdD16cihCaCwiU2l6ZU9wdGlvbnMiLDI1OSxVcixkb24sV0plKSxtNGU7RCgzNzAsMSx7MTk0OToxfSxXayksbC5iPSExLGwuYz0wLGwuZD0tMSxsLmU9bnVsbCxsLmY9bnVsbCxsLmc9LTEsbC5qPSExLGwuaz0hMSxsLm49ITEsbC5vPTAsbC5xPTAsbC5yPTAsTihBYywiQmFzaWNQcm9ncmVzc01vbml0b3IiLDM3MCksRCg5NzIsMjA5LF8yLGpaKSxsLlplPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLGgsZCx3LGssXyxNO3N3aXRjaChtcihuLCJCb3ggbGF5b3V0IiwyKSxvPWxNKHZlKHplKGUsKGVxKCksajNlKSkpKSxoPXUoemUoZSxSM2UpLDExNikscj1CZShGZSh6ZShlLHhTdCkpKSxzPUJlKEZlKHplKGUsa1N0KSkpLHUoemUoZSxlZnQpLDMxMSkuZyl7Y2FzZSAwOmQ9KHc9bmV3IHF1KCghZS5hJiYoZS5hPW5ldyBoZShkcyxlLDEwLDExKSksZS5hKSkscG4oKSxhYSh3LG5ldyBxJHQocykpLHcpLGs9ejR0KGUpLF89dmUoemUoZSx5U3QpKSwoXz09bnVsbHx8KEluKF8pLF88PTApKSYmKF89MS4zKSxNPVo0bihkLG8saCxrLmEsay5iLHIsKEluKF8pLF8pKSxndyhlLE0uYSxNLmIsITEsITApO2JyZWFrO2RlZmF1bHQ6S3luKGUsbyxoLHIpfW9yKG4pfSxOKEFjLCJCb3hMYXlvdXRQcm92aWRlciIsOTcyKSxEKDk3MywxLHFpLHEkdCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBiMm4odGhpcyx1KGUsMzMpLHUobiwzMykpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZ3QodGhpcyl9LGwuYT0hMSxOKEFjLCJCb3hMYXlvdXRQcm92aWRlci8xIiw5NzMpLEQoMTU3LDEsezE1NzoxfSxVJCxsV3QpLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jPyQ1dCh0aGlzLmMpOkpwKHRoaXMuYil9LE4oQWMsIkJveExheW91dFByb3ZpZGVyL0dyb3VwIiwxNTcpLEQoMzExLDIyLHszOjEsMzU6MSwyMjoxLDMxMToxfSxRUik7dmFyIFNBdCxBQXQsTEF0LHlmdCxNQXQ9enIoQWMsIkJveExheW91dFByb3ZpZGVyL1BhY2tpbmdNb2RlIiwzMTEsVXIsVmluLFlKZSkseTRlO0QoOTc0LDEscWksJFopLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbW5uKHUoZSwxNTcpLHUobiwxNTcpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGd0KHRoaXMpfSxOKEFjLCJCb3hMYXlvdXRQcm92aWRlci9sYW1iZGEkMCRUeXBlIiw5NzQpLEQoOTc1LDEscWksS0YpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZm5uKHUoZSwxNTcpLHUobiwxNTcpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGd0KHRoaXMpfSxOKEFjLCJCb3hMYXlvdXRQcm92aWRlci9sYW1iZGEkMSRUeXBlIiw5NzUpLEQoOTc2LDEscWkselopLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZG5uKHUoZSwxNTcpLHUobiwxNTcpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGd0KHRoaXMpfSxOKEFjLCJCb3hMYXlvdXRQcm92aWRlci9sYW1iZGEkMiRUeXBlIiw5NzYpLEQoMTM2NSwxLHs4MzE6MX0scVopLGwucWc9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gSVIoKSwhX3QobiwxNjApfHx5SHQoKFg2KCksdShlLDE2MCkpLG4pfSxOKEFjLCJFbGtTcGFjaW5ncy9BYnN0cmFjdFNwYWNpbmdzQnVpbGRlci9sYW1iZGEkMCRUeXBlIiwxMzY1KSxEKDEzNjYsMSxLbixIJHQpLGwudGQ9ZnVuY3Rpb24oZSl7cnVuKHRoaXMuYSx1KGUsMTQ2KSl9LE4oQWMsIkVsa1NwYWNpbmdzL0Fic3RyYWN0U3BhY2luZ3NCdWlsZGVyL2xhbWJkYSQxJFR5cGUiLDEzNjYpLEQoMTM2NywxLEtuLFJaKSxsLnRkPWZ1bmN0aW9uKGUpe3UoZSw5NCksSVIoKX0sTihBYywiRWxrU3BhY2luZ3MvQWJzdHJhY3RTcGFjaW5nc0J1aWxkZXIvbGFtYmRhJDIkVHlwZSIsMTM2NyksRCgxMzcxLDEsS24sViR0KSxsLnRkPWZ1bmN0aW9uKGUpe0Fvbih0aGlzLmEsdShlLDk0KSl9LE4oQWMsIkVsa1NwYWNpbmdzL0Fic3RyYWN0U3BhY2luZ3NCdWlsZGVyL2xhbWJkYSQzJFR5cGUiLDEzNzEpLEQoMTM2OSwxLGdpLGFHdCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gSGNuKHRoaXMuYSx0aGlzLmIsdShlLDE0NikpfSxOKEFjLCJFbGtTcGFjaW5ncy9BYnN0cmFjdFNwYWNpbmdzQnVpbGRlci9sYW1iZGEkNCRUeXBlIiwxMzY5KSxEKDEzNjgsMSxnaSxvR3QpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIGFRZSh0aGlzLmEsdGhpcy5iLHUoZSw4MzEpKX0sTihBYywiRWxrU3BhY2luZ3MvQWJzdHJhY3RTcGFjaW5nc0J1aWxkZXIvbGFtYmRhJDUkVHlwZSIsMTM2OCksRCgxMzcwLDEsS24sY0d0KSxsLnRkPWZ1bmN0aW9uKGUpe2Flbih0aGlzLmEsdGhpcy5iLHUoZSwxNDYpKX0sTihBYywiRWxrU3BhY2luZ3MvQWJzdHJhY3RTcGFjaW5nc0J1aWxkZXIvbGFtYmRhJDYkVHlwZSIsMTM3MCksRCg5MzUsMSx7fSxGWiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gY1V0KGUpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sTihBYywiRWxrVXRpbC9sYW1iZGEkMCRUeXBlIiw5MzUpLEQoOTM2LDEsS24sdUd0KSxsLnRkPWZ1bmN0aW9uKGUpe3dwbih0aGlzLmEsdGhpcy5iLHUoZSw3OSkpfSxsLmE9MCxsLmI9MCxOKEFjLCJFbGtVdGlsL2xhbWJkYSQxJFR5cGUiLDkzNiksRCg5MzcsMSxLbixsR3QpLGwudGQ9ZnVuY3Rpb24oZSl7d0tlKHRoaXMuYSx0aGlzLmIsdShlLDIwMikpfSxsLmE9MCxsLmI9MCxOKEFjLCJFbGtVdGlsL2xhbWJkYSQyJFR5cGUiLDkzNyksRCg5MzgsMSxLbixoR3QpLGwudGQ9ZnVuY3Rpb24oZSl7dVhlKHRoaXMuYSx0aGlzLmIsdShlLDEzNykpfSxsLmE9MCxsLmI9MCxOKEFjLCJFbGtVdGlsL2xhbWJkYSQzJFR5cGUiLDkzOCksRCg5MzksMSxLbixHJHQpLGwudGQ9ZnVuY3Rpb24oZSl7a3RuKHRoaXMuYSx1KGUsNDY5KSl9LE4oQWMsIkVsa1V0aWwvbGFtYmRhJDQkVHlwZSIsOTM5KSxEKDM0MiwxLHszNToxLDM0MjoxfSxLV2UpLGwud2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIEJYZSh0aGlzLHUoZSwyMzYpKX0sbC5GYj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gX3QoZSwzNDIpPyhuPXUoZSwzNDIpLHRoaXMuYT09bi5hKTohMX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBDcyh0aGlzLmEpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYSsiIChleGNsdXNpdmUpIn0sbC5hPTAsTihBYywiRXhjbHVzaXZlQm91bmRzL0V4Y2x1c2l2ZUxvd2VyQm91bmQiLDM0MiksRCgxMTM4LDIwOSxfMixCWiksbC5aZT1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFosYnQsTXQsU3QsanQsUXQsY2UsX2UsV2UsUWU7Zm9yKG1yKG4sIkZpeGVkIExheW91dCIsMSksaD11KHplKGUsKGRpKCksRFN0KSksMjE4KSxCPTAscT0wLFN0PW5ldyBucigoIWUuYSYmKGUuYT1uZXcgaGUoZHMsZSwxMCwxMSkpLGUuYSkpO1N0LmUhPVN0LmkuZ2MoKTspe2ZvcihidD11KGRyKFN0KSwzMyksUWU9dSh6ZShidCwoYnooKSxLUykpLDgpLFFlJiYoazEoYnQsUWUuYSxRZS5iKSx1KHplKGJ0LHZBdCksMTc0KS5IYygoTmwoKSxYeSkpJiYoRz11KHplKGJ0LG1BdCksOCksRy5hPjAmJkcuYj4wJiZndyhidCxHLmEsRy5iLCEwLCEwKSkpLEI9Yi5NYXRoLm1heChCLGJ0LmkrYnQuZykscT1iLk1hdGgubWF4KHEsYnQuaitidC5mKSxfPW5ldyBucigoIWJ0Lm4mJihidC5uPW5ldyBoZShZbyxidCwxLDcpKSxidC5uKSk7Xy5lIT1fLmkuZ2MoKTspdz11KGRyKF8pLDEzNyksUWU9dSh6ZSh3LEtTKSw4KSxRZSYmazEodyxRZS5hLFFlLmIpLEI9Yi5NYXRoLm1heChCLGJ0Lmkrdy5pK3cuZykscT1iLk1hdGgubWF4KHEsYnQuait3Lmordy5mKTtmb3IoY2U9bmV3IG5yKCghYnQuYyYmKGJ0LmM9bmV3IGhlKHlsLGJ0LDksOSkpLGJ0LmMpKTtjZS5lIT1jZS5pLmdjKCk7KWZvcihRdD11KGRyKGNlKSwxMTgpLFFlPXUoemUoUXQsS1MpLDgpLFFlJiZrMShRdCxRZS5hLFFlLmIpLF9lPWJ0LmkrUXQuaSxXZT1idC5qK1F0LmosQj1iLk1hdGgubWF4KEIsX2UrUXQuZykscT1iLk1hdGgubWF4KHEsV2UrUXQuZiksaz1uZXcgbnIoKCFRdC5uJiYoUXQubj1uZXcgaGUoWW8sUXQsMSw3KSksUXQubikpO2suZSE9ay5pLmdjKCk7KXc9dShkcihrKSwxMzcpLFFlPXUoemUodyxLUyksOCksUWUmJmsxKHcsUWUuYSxRZS5iKSxCPWIuTWF0aC5tYXgoQixfZSt3Lmkrdy5nKSxxPWIuTWF0aC5tYXgocSxXZSt3Lmordy5mKTtmb3Iobz1uZXcgYXIobHIoVjAoYnQpLmEuS2MoKSxuZXcgSCkpO1ZyKG8pOylyPXUoSXIobyksNzkpLE09eGhlKHIpLEI9Yi5NYXRoLm1heChCLE0uYSkscT1iLk1hdGgubWF4KHEsTS5iKTtmb3Iocz1uZXcgYXIobHIoZkkoYnQpLmEuS2MoKSxuZXcgSCkpO1ZyKHMpOylyPXUoSXIocyksNzkpLGhzKFpkKHIpKSE9ZSYmKE09eGhlKHIpLEI9Yi5NYXRoLm1heChCLE0uYSkscT1iLk1hdGgubWF4KHEsTS5iKSl9aWYoaD09KHEwKCksQ0UpKWZvcihNdD1uZXcgbnIoKCFlLmEmJihlLmE9bmV3IGhlKGRzLGUsMTAsMTEpKSxlLmEpKTtNdC5lIT1NdC5pLmdjKCk7KWZvcihidD11KGRyKE10KSwzMykscz1uZXcgYXIobHIoVjAoYnQpLmEuS2MoKSxuZXcgSCkpO1ZyKHMpOylyPXUoSXIocyksNzkpLGQ9cG1uKHIpLGQuYj09MD9FbyhyLHM1LG51bGwpOkVvKHIsczUsZCk7QmUoRmUoemUoZSwoYnooKSx3QXQpKSkpfHwoanQ9dSh6ZShlLHM0ZSksMTE2KSxaPUIranQuYitqdC5jLFc9cStqdC5kK2p0LmEsZ3coZSxaLFcsITAsITApKSxvcihuKX0sTihBYywiRml4ZWRMYXlvdXRQcm92aWRlciIsMTEzOCksRCgzNzMsMTM0LHszOjEsNDE0OjEsMzczOjEsOTQ6MSwxMzQ6MX0sdGwsUnRlKSxsLkpmPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXztpZihlKXRyeXtmb3Ioaz1weShlLCI7LDsiKSxoPWssZD0wLHc9aC5sZW5ndGg7ZDx3OysrZCl7aWYobz1oW2RdLHI9cHkobywiXFw6Iikscz1kNnQoajgoKSxyWzBdKSwhcyl0aHJvdyBudChuZXcgUG4oIkludmFsaWQgb3B0aW9uIGlkOiAiK3JbMF0pKTtpZihfPWg2dChzLHJbMV0pLF89PW51bGwpdGhyb3cgbnQobmV3IFBuKCJJbnZhbGlkIG9wdGlvbiB2YWx1ZTogIityWzFdKSk7Xz09bnVsbD8oIXRoaXMucSYmKHRoaXMucT1uZXcgQXIpLEc2KHRoaXMucSxzKSk6KCF0aGlzLnEmJih0aGlzLnE9bmV3IEFyKSxBaSh0aGlzLnEscyxfKSl9fWNhdGNoKE0pe3Rocm93IE09cnMoTSksX3QoTSwxMDIpPyhuPU0sbnQobmV3IGJyZShuKSkpOm50KE0pfX0sbC5JYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPWpyKCRsKHh1KCh0aGlzLnE/dGhpcy5xOihwbigpLHBuKCksYTApKS52YygpLk9jKCksbmV3IEJ1KSxZbShuZXcgU0t0LG5ldyB6aSxuZXcgeWUsbmV3IGZuLHV0KG90KHdsLDEpLG9lLDEzMiwwLFtdKSkpKSxlfTt2YXIgeDRlPU4oQWMsIkluZGl2aWR1YWxTcGFjaW5ncyIsMzczKTtEKDk3MSwxLHt9LEJ1KSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB5bm4odShlLDQyKSl9LE4oQWMsIkluZGl2aWR1YWxTcGFjaW5ncy9sYW1iZGEkMCRUeXBlIiw5NzEpLEQoNzA5LDEse30sc1l0KSxsLmM9MCxOKEFjLCJJbnN0YW5jZVBvb2wiLDcwOSksRCgxMjc1LDEse30sVlopLE4oQWMsIkxvZ2dlZEdyYXBoIiwxMjc1KSxEKDM5NiwyMix7MzoxLDM1OjEsMjI6MSwzOTY6MX0sWlIpO3ZhciBEQXQsdGgsSUF0LE9BdCxrNGU9enIoQWMsIkxvZ2dlZEdyYXBoL1R5cGUiLDM5NixVcixHaW4sWEplKSxFNGU7RCg0NiwxLHsyMDoxLDQ2OjF9LHlhKSxsLkpjPWZ1bmN0aW9uKGUpe19hKHRoaXMsZSl9LGwuRmI9ZnVuY3Rpb24oZSl7dmFyIG4scixzO3JldHVybiBfdChlLDQ2KT8ocj11KGUsNDYpLG49dGhpcy5hPT1udWxsP3IuYT09bnVsbDpTaSh0aGlzLmEsci5hKSxzPXRoaXMuYj09bnVsbD9yLmI9PW51bGw6U2kodGhpcy5iLHIuYiksbiYmcyk6ITF9LGwuSGI9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscyxvLGg7cmV0dXJuIHI9dGhpcy5hPT1udWxsPzA6SmkodGhpcy5hKSxlPXImTXMsbj1yJi02NTUzNixoPXRoaXMuYj09bnVsbD8wOkppKHRoaXMuYikscz1oJk1zLG89aCYtNjU1MzYsZV5vPj4xNiZNc3xuXnM8PDE2fSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBVJHQodGhpcyl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hPT1udWxsJiZ0aGlzLmI9PW51bGw/InBhaXIobnVsbCxudWxsKSI6dGhpcy5hPT1udWxsPyJwYWlyKG51bGwsIitXbyh0aGlzLmIpKyIpIjp0aGlzLmI9PW51bGw/InBhaXIoIitXbyh0aGlzLmEpKyIsbnVsbCkiOiJwYWlyKCIrV28odGhpcy5hKSsiLCIrV28odGhpcy5iKSsiKSJ9LE4oQWMsIlBhaXIiLDQ2KSxEKDk4MywxLGRhLFUkdCksbC5OYj1mdW5jdGlvbihlKXtFYSh0aGlzLGUpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuYyYmKCF0aGlzLmImJnRoaXMuYS5hIT1udWxsfHx0aGlzLmEuYiE9bnVsbCl9LGwuUGI9ZnVuY3Rpb24oKXtpZighdGhpcy5jJiYhdGhpcy5iJiZ0aGlzLmEuYSE9bnVsbClyZXR1cm4gdGhpcy5iPSEwLHRoaXMuYS5hO2lmKCF0aGlzLmMmJnRoaXMuYS5iIT1udWxsKXJldHVybiB0aGlzLmM9ITAsdGhpcy5hLmI7dGhyb3cgbnQobmV3IHZjKX0sbC5RYj1mdW5jdGlvbigpe3Rocm93IHRoaXMuYyYmdGhpcy5hLmIhPW51bGw/dGhpcy5hLmI9bnVsbDp0aGlzLmImJnRoaXMuYS5hIT1udWxsJiYodGhpcy5hLmE9bnVsbCksbnQobmV3IFJ1KX0sbC5iPSExLGwuYz0hMSxOKEFjLCJQYWlyLzEiLDk4MyksRCg0NDgsMSx7NDQ4OjF9LGtYdCksbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gUmModGhpcy5hLHUoZSw0NDgpLmEpJiZSYyh0aGlzLmMsdShlLDQ0OCkuYykmJlJjKHRoaXMuZCx1KGUsNDQ4KS5kKSYmUmModGhpcy5iLHUoZSw0NDgpLmIpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHZ6KHV0KG90KFFuLDEpLE1lLDEsNSxbdGhpcy5hLHRoaXMuYyx0aGlzLmQsdGhpcy5iXSkpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIigiK3RoaXMuYStYYSt0aGlzLmMrWGErdGhpcy5kK1hhK3RoaXMuYisiKSJ9LE4oQWMsIlF1YWRydXBsZSIsNDQ4KSxEKDExMjYsMjA5LF8yLEdaKSxsLlplPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLGgsZDtpZihtcihuLCJSYW5kb20gTGF5b3V0IiwxKSwoIWUuYSYmKGUuYT1uZXcgaGUoZHMsZSwxMCwxMSkpLGUuYSkuaT09MCl7b3Iobik7cmV0dXJufWg9dSh6ZShlLCh2M3QoKSxiNGUpKSwxOSksaCYmaC5hIT0wP289bmV3IFQkKGguYSk6bz1uZXcgSGl0LHI9bE0odmUoemUoZSxnNGUpKSksZD1sTSh2ZSh6ZShlLHY0ZSkpKSxzPXUoemUoZSxwNGUpLDExNiksTDRuKGUsbyxyLGQscyksb3Iobil9LE4oQWMsIlJhbmRvbUxheW91dFByb3ZpZGVyIiwxMTI2KTt2YXIgVDRlO0QoNTUzLDEse30pLGwucWY9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFJlKHRoaXMuZi5pLHRoaXMuZi5qKX0sbC5XZT1mdW5jdGlvbihlKXtyZXR1cm4gS1h0KGUsKGRpKCksbWwpKT96ZSh0aGlzLmYsXzRlKTp6ZSh0aGlzLmYsZSl9LGwucmY9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFJlKHRoaXMuZi5nLHRoaXMuZi5mKX0sbC5zZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmd9LGwuWGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHMyKHRoaXMuZixlKX0sbC50Zj1mdW5jdGlvbihlKXtDdSh0aGlzLmYsZS5hKSxTdSh0aGlzLmYsZS5iKX0sbC51Zj1mdW5jdGlvbihlKXtRdih0aGlzLmYsZS5hKSxYdih0aGlzLmYsZS5iKX0sbC52Zj1mdW5jdGlvbihlKXt0aGlzLmc9ZX0sbC5nPTA7dmFyIF80ZTtOKFVDLCJFbGtHcmFwaEFkYXB0ZXJzL0Fic3RyYWN0RWxrR3JhcGhFbGVtZW50QWRhcHRlciIsNTUzKSxEKDU1NCwxLHs4Mzk6MX0sYVIpLGwud2Y9ZnVuY3Rpb24oKXt2YXIgZSxuO2lmKCF0aGlzLmIpZm9yKHRoaXMuYj15JChaaih0aGlzLmEpLmkpLG49bmV3IG5yKFpqKHRoaXMuYSkpO24uZSE9bi5pLmdjKCk7KWU9dShkcihuKSwxMzcpLHVlKHRoaXMuYixuZXcgaWV0KGUpKTtyZXR1cm4gdGhpcy5ifSxsLmI9bnVsbCxOKFVDLCJFbGtHcmFwaEFkYXB0ZXJzL0Vsa0VkZ2VBZGFwdGVyIiw1NTQpLEQoMzAxLDU1Myx7fSxTbSksbC54Zj1mdW5jdGlvbigpe3JldHVybiBrc2UodGhpcyl9LGwuYT1udWxsLE4oVUMsIkVsa0dyYXBoQWRhcHRlcnMvRWxrR3JhcGhBZGFwdGVyIiwzMDEpLEQoNjMwLDU1Myx7MTgxOjF9LGlldCksTihVQywiRWxrR3JhcGhBZGFwdGVycy9FbGtMYWJlbEFkYXB0ZXIiLDYzMCksRCg2MjksNTUzLHs2ODA6MX0sc250KSxsLndmPWZ1bmN0aW9uKCl7cmV0dXJuIERmbih0aGlzKX0sbC5BZj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXUoemUodGhpcy5mLChkaSgpLEtPKSksMTQyKSwhZSYmKGU9bmV3IE1UKSxlfSxsLkNmPWZ1bmN0aW9uKCl7cmV0dXJuIElmbih0aGlzKX0sbC5FZj1mdW5jdGlvbihlKXt2YXIgbjtuPW5ldyB5bnQoZSksRW8odGhpcy5mLChkaSgpLEtPKSxuKX0sbC5GZj1mdW5jdGlvbihlKXtFbyh0aGlzLmYsKGRpKCksVjIpLG5ldyBmdnQoZSkpfSxsLnlmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZH0sbC56Zj1mdW5jdGlvbigpe3ZhciBlLG47aWYoIXRoaXMuYSlmb3IodGhpcy5hPW5ldyBsZSxuPW5ldyBhcihscihmSSh1KHRoaXMuZiwzMykpLmEuS2MoKSxuZXcgSCkpO1ZyKG4pOyllPXUoSXIobiksNzkpLHVlKHRoaXMuYSxuZXcgYVIoZSkpO3JldHVybiB0aGlzLmF9LGwuQmY9ZnVuY3Rpb24oKXt2YXIgZSxuO2lmKCF0aGlzLmMpZm9yKHRoaXMuYz1uZXcgbGUsbj1uZXcgYXIobHIoVjAodSh0aGlzLmYsMzMpKS5hLktjKCksbmV3IEgpKTtWcihuKTspZT11KElyKG4pLDc5KSx1ZSh0aGlzLmMsbmV3IGFSKGUpKTtyZXR1cm4gdGhpcy5jfSxsLkRmPWZ1bmN0aW9uKCl7cmV0dXJuIGkkKHUodGhpcy5mLDMzKSkuaSE9MHx8QmUoRmUodSh0aGlzLmYsMzMpLldlKChkaSgpLFdPKSkpKX0sbC5HZj1mdW5jdGlvbigpe2thbih0aGlzLChEbSgpLFQ0ZSkpfSxsLmE9bnVsbCxsLmI9bnVsbCxsLmM9bnVsbCxsLmQ9bnVsbCxsLmU9bnVsbCxOKFVDLCJFbGtHcmFwaEFkYXB0ZXJzL0Vsa05vZGVBZGFwdGVyIiw2MjkpLEQoMTI2Niw1NTMsezgzODoxfSx4enQpLGwud2Y9ZnVuY3Rpb24oKXtyZXR1cm4gJGZuKHRoaXMpfSxsLnpmPWZ1bmN0aW9uKCl7dmFyIGUsbjtpZighdGhpcy5hKWZvcih0aGlzLmE9SGQodSh0aGlzLmYsMTE4KS54ZygpLmkpLG49bmV3IG5yKHUodGhpcy5mLDExOCkueGcoKSk7bi5lIT1uLmkuZ2MoKTspZT11KGRyKG4pLDc5KSx1ZSh0aGlzLmEsbmV3IGFSKGUpKTtyZXR1cm4gdGhpcy5hfSxsLkJmPWZ1bmN0aW9uKCl7dmFyIGUsbjtpZighdGhpcy5jKWZvcih0aGlzLmM9SGQodSh0aGlzLmYsMTE4KS55ZygpLmkpLG49bmV3IG5yKHUodGhpcy5mLDExOCkueWcoKSk7bi5lIT1uLmkuZ2MoKTspZT11KGRyKG4pLDc5KSx1ZSh0aGlzLmMsbmV3IGFSKGUpKTtyZXR1cm4gdGhpcy5jfSxsLkhmPWZ1bmN0aW9uKCl7cmV0dXJuIHUodSh0aGlzLmYsMTE4KS5XZSgoZGkoKSxjNSkpLDYxKX0sbC5JZj1mdW5jdGlvbigpe3ZhciBlLG4scixzLG8saCxkLHc7Zm9yKHM9XzEodSh0aGlzLmYsMTE4KSkscj1uZXcgbnIodSh0aGlzLmYsMTE4KS55ZygpKTtyLmUhPXIuaS5nYygpOylmb3IoZT11KGRyKHIpLDc5KSx3PW5ldyBucigoIWUuYyYmKGUuYz1uZXcgRW4odnIsZSw1LDgpKSxlLmMpKTt3LmUhPXcuaS5nYygpOyl7aWYoZD11KGRyKHcpLDgyKSxabShSbyhkKSxzKSlyZXR1cm4hMDtpZihSbyhkKT09cyYmQmUoRmUoemUoZSwoZGkoKSxvZnQpKSkpKXJldHVybiEwfWZvcihuPW5ldyBucih1KHRoaXMuZiwxMTgpLnhnKCkpO24uZSE9bi5pLmdjKCk7KWZvcihlPXUoZHIobiksNzkpLGg9bmV3IG5yKCghZS5iJiYoZS5iPW5ldyBFbih2cixlLDQsNykpLGUuYikpO2guZSE9aC5pLmdjKCk7KWlmKG89dShkcihoKSw4MiksWm0oUm8obykscykpcmV0dXJuITA7cmV0dXJuITF9LGwuYT1udWxsLGwuYj1udWxsLGwuYz1udWxsLE4oVUMsIkVsa0dyYXBoQWRhcHRlcnMvRWxrUG9ydEFkYXB0ZXIiLDEyNjYpLEQoMTI2NywxLHFpLFVaKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGN3bih1KGUsMTE4KSx1KG4sMTE4KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBndCh0aGlzKX0sTihVQywiRWxrR3JhcGhBZGFwdGVycy9Qb3J0Q29tcGFyYXRvciIsMTI2Nyk7dmFyIFRiPWFzKHZoLCJFT2JqZWN0IiksTEU9YXMoTjQsdWRlKSxXaD1hcyhONCxsZGUpLHNOPWFzKE40LGhkZSksYU49YXMoTjQsIkVsa1NoYXBlIiksdnI9YXMoTjQsZmRlKSxyYT1hcyhONCxvOHQpLHVzPWFzKE40LGRkZSksb049YXModmgsZ2RlKSxuQT1hcyh2aCwiRUZhY3RvcnkiKSxDNGUseGZ0PWFzKHZoLHBkZSksbzE9YXModmgsIkVQYWNrYWdlIiksbGEsUzRlLEE0ZSxOQXQsWUcsTDRlLFBBdCxGQXQsQkF0LF9iLE00ZSxENGUsWW89YXMoTjQsYzh0KSxkcz1hcyhONCx1OHQpLHlsPWFzKE40LGw4dCk7RCg5MCwxLGJkZSksbC5KZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLktnKCksbnVsbH0sbC5LZz1mdW5jdGlvbigpe3JldHVybiBudWxsfSxsLkxnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuS2coKSwhMX0sbC5NZz1mdW5jdGlvbigpe3JldHVybiExfSxsLk5nPWZ1bmN0aW9uKGUpe0NpKHRoaXMsZSl9LE4oeHgsIkJhc2ljTm90aWZpZXJJbXBsIiw5MCksRCg5Nyw5MCx5ZGUpLGwubmg9ZnVuY3Rpb24oKXtyZXR1cm4gU2wodGhpcyl9LGwuT2c9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZX0sbC5QZz1mdW5jdGlvbigpe3Rocm93IG50KG5ldyBQcil9LGwuUWc9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49b28odSh3bih0aGlzLlRnKCksdGhpcy5WZygpKSwxOCkpLHRoaXMuZWgoKS5paCh0aGlzLG4ubixuLmYsZSl9LGwuUmc9ZnVuY3Rpb24oZSxuKXt0aHJvdyBudChuZXcgUHIpfSxsLlNnPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gVWwodGhpcyxlLG4scil9LGwuVGc9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gdGhpcy5QZygpJiYoZT10aGlzLlBnKCkuY2soKSxlKT9lOnRoaXMuemgoKX0sbC5VZz1mdW5jdGlvbigpe3JldHVybiBVc3QodGhpcyl9LGwuVmc9ZnVuY3Rpb24oKXt0aHJvdyBudChuZXcgUHIpfSxsLldnPWZ1bmN0aW9uKCl7dmFyIGUsbjtyZXR1cm4gbj10aGlzLnBoKCkuZGsoKSwhbiYmdGhpcy5QZygpLmlrKG49KEdUKCksZT1Md3QoYmQodGhpcy5UZygpKSksZT09bnVsbD9MZnQ6bmV3IE5NKHRoaXMsZSkpKSxufSxsLlhnPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGV9LGwuWWc9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49ZS5HaigpLG4/ZS5haigpOmVzKHRoaXMuVGcoKSxlKX0sbC5aZz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuUGcoKSxlP2UuZmsoKTpudWxsfSxsLiRnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuUGcoKT90aGlzLlBnKCkuY2soKTpudWxsfSxsLl9nPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4ganoodGhpcyxlLG4scil9LGwuYWg9ZnVuY3Rpb24oZSl7cmV0dXJuIEw4KHRoaXMsZSl9LGwuYmg9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gQnJ0KHRoaXMsZSxuKX0sbC5kaD1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuUGcoKSwhIWUmJmUuZ2soKX0sbC5laD1mdW5jdGlvbigpe3Rocm93IG50KG5ldyBQcil9LGwuZmg9ZnVuY3Rpb24oKXtyZXR1cm4gSXoodGhpcyl9LGwuZ2g9ZnVuY3Rpb24oZSxuLHIscyl7cmV0dXJuIHR4KHRoaXMsZSxuLHMpfSxsLmhoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztyZXR1cm4gcz11KHduKHRoaXMuVGcoKSxuKSw2Nikscy5OaigpLlFqKHRoaXMsdGhpcy55aCgpLG4tdGhpcy5BaCgpLGUscil9LGwuaWg9ZnVuY3Rpb24oZSxuLHIscyl7cmV0dXJuIGMkKHRoaXMsZSxuLHMpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztyZXR1cm4gcz11KHduKHRoaXMuVGcoKSxuKSw2Nikscy5OaigpLlJqKHRoaXMsdGhpcy55aCgpLG4tdGhpcy5BaCgpLGUscil9LGwua2g9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuUGcoKSYmISF0aGlzLlBnKCkuZWsoKX0sbC5saD1mdW5jdGlvbihlKXtyZXR1cm4gcnN0KHRoaXMsZSl9LGwubWg9ZnVuY3Rpb24oZSl7cmV0dXJuIGhRdCh0aGlzLGUpfSxsLm9oPWZ1bmN0aW9uKGUpe3JldHVybiBGbGUodGhpcyxlKX0sbC5waD1mdW5jdGlvbigpe3Rocm93IG50KG5ldyBQcil9LGwucWg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5QZygpP3RoaXMuUGcoKS5laygpOm51bGx9LGwucmg9ZnVuY3Rpb24oKXtyZXR1cm4gSXoodGhpcyl9LGwuc2g9ZnVuY3Rpb24oZSxuKXt6c3QodGhpcyxlLG4pfSxsLnRoPWZ1bmN0aW9uKGUpe3RoaXMucGgoKS5oayhlKX0sbC51aD1mdW5jdGlvbihlKXt0aGlzLnBoKCkua2soZSl9LGwudmg9ZnVuY3Rpb24oZSl7dGhpcy5waCgpLmprKGUpfSxsLndoPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLGg7cmV0dXJuIGg9dGhpcy5aZygpLGgmJmUmJihuPXphKGguVmsoKSx0aGlzLG4pLGguWmsodGhpcykpLHM9dGhpcy5laCgpLHMmJihjYXQodGhpcyx0aGlzLmVoKCksdGhpcy5WZygpKS5CYiZRYT8obz1zLmZoKCksbyYmKGU/IWgmJm8uWmsodGhpcyk6by5Zayh0aGlzKSkpOihuPShyPXRoaXMuVmcoKSxyPj0wP3RoaXMuUWcobik6dGhpcy5laCgpLmloKHRoaXMsLTEtcixudWxsLG4pKSxuPXRoaXMuU2cobnVsbCwtMSxuKSkpLHRoaXMudWgoZSksbn0sbC54aD1mdW5jdGlvbihlKXt2YXIgbixyLHMsbyxoLGQsdyxrO2lmKHI9dGhpcy5UZygpLGg9ZXMocixlKSxuPXRoaXMuQWgoKSxoPj1uKXJldHVybiB1KGUsNjYpLk5qKCkuVWoodGhpcyx0aGlzLnloKCksaC1uKTtpZihoPD0tMSlpZihkPVQ0KChHdSgpLFNhKSxyLGUpLGQpe2lmKHNvKCksdShkLDY2KS5PaigpfHwoZD16NihNbyhTYSxkKSkpLG89KHM9dGhpcy5ZZyhkKSx1KHM+PTA/dGhpcy5fZyhzLCEwLCEwKTpsdyh0aGlzLGQsITApLDE1MykpLGs9ZC5aaigpLGs+MXx8az09LTEpcmV0dXJuIHUodShvLDIxNSkuaGwoZSwhMSksNzYpfWVsc2UgdGhyb3cgbnQobmV3IFBuKGNiK2UubmUoKStSY3QpKTtlbHNlIGlmKGUuJGooKSlyZXR1cm4gcz10aGlzLllnKGUpLHUocz49MD90aGlzLl9nKHMsITEsITApOmx3KHRoaXMsZSwhMSksNzYpO3JldHVybiB3PW5ldyBER3QodGhpcyxlKSx3fSxsLnloPWZ1bmN0aW9uKCl7cmV0dXJuIE1tdCh0aGlzKX0sbC56aD1mdW5jdGlvbigpe3JldHVybih6cCgpLEFuKS5TfSxsLkFoPWZ1bmN0aW9uKCl7cmV0dXJuIEpuKHRoaXMuemgoKSl9LGwuQmg9ZnVuY3Rpb24oZSl7RnN0KHRoaXMsZSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gbWYodGhpcyl9LE4oTG4sIkJhc2ljRU9iamVjdEltcGwiLDk3KTt2YXIgSTRlO0QoMTE0LDk3LHsxMDU6MSw5MjoxLDkwOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMTE0OjF9KSxsLkNoPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPURtdCh0aGlzKSxuW2VdfSxsLkRoPWZ1bmN0aW9uKGUsbil7dmFyIHI7cj1EbXQodGhpcyksbHMocixlLG4pfSxsLkVoPWZ1bmN0aW9uKGUpe3ZhciBuO249RG10KHRoaXMpLGxzKG4sZSxudWxsKX0sbC5KZz1mdW5jdGlvbigpe3JldHVybiB1KE1uKHRoaXMsNCksMTI2KX0sbC5LZz1mdW5jdGlvbigpe3Rocm93IG50KG5ldyBQcil9LGwuTGc9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5EYiY0KSE9MH0sbC5QZz1mdW5jdGlvbigpe3Rocm93IG50KG5ldyBQcil9LGwuRmg9ZnVuY3Rpb24oZSl7SjYodGhpcywyLGUpfSxsLlJnPWZ1bmN0aW9uKGUsbil7dGhpcy5EYj1uPDwxNnx0aGlzLkRiJjI1NSx0aGlzLkZoKGUpfSxsLlRnPWZ1bmN0aW9uKCl7cmV0dXJuIGt1KHRoaXMpfSxsLlZnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuRGI+PjE2fSxsLldnPWZ1bmN0aW9uKCl7dmFyIGUsbjtyZXR1cm4gR1QoKSxuPUx3dChiZCgoZT11KE1uKHRoaXMsMTYpLDI2KSxlfHx0aGlzLnpoKCkpKSksbj09bnVsbD9MZnQ6bmV3IE5NKHRoaXMsbil9LGwuTWc9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5EYiYxKT09MH0sbC5aZz1mdW5jdGlvbigpe3JldHVybiB1KE1uKHRoaXMsMTI4KSwxOTM1KX0sbC4kZz1mdW5jdGlvbigpe3JldHVybiB1KE1uKHRoaXMsMTYpLDI2KX0sbC5kaD1mdW5jdGlvbigpe3JldHVybih0aGlzLkRiJjMyKSE9MH0sbC5laD1mdW5jdGlvbigpe3JldHVybiB1KE1uKHRoaXMsMiksNDkpfSxsLmtoPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuRGImNjQpIT0wfSxsLnBoPWZ1bmN0aW9uKCl7dGhyb3cgbnQobmV3IFByKX0sbC5xaD1mdW5jdGlvbigpe3JldHVybiB1KE1uKHRoaXMsNjQpLDI4MSl9LGwudGg9ZnVuY3Rpb24oZSl7SjYodGhpcywxNixlKX0sbC51aD1mdW5jdGlvbihlKXtKNih0aGlzLDEyOCxlKX0sbC52aD1mdW5jdGlvbihlKXtKNih0aGlzLDY0LGUpfSxsLnloPWZ1bmN0aW9uKCl7cmV0dXJuIHV1KHRoaXMpfSxsLkRiPTAsTihMbiwiTWluaW1hbEVPYmplY3RJbXBsIiwxMTQpLEQoMTE1LDExNCx7MTA1OjEsOTI6MSw5MDoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDExNDoxLDExNToxfSksbC5GaD1mdW5jdGlvbihlKXt0aGlzLkNiPWV9LGwuZWg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5DYn0sTihMbiwiTWluaW1hbEVPYmplY3RJbXBsL0NvbnRhaW5lciIsMTE1KSxEKDE5ODUsMTE1LHsxMDU6MSw0MTM6MSw5NDoxLDkyOjEsOTA6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwxMTQ6MSwxMTU6MX0pLGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBxM3QodGhpcyxlLG4scil9LGwuamg9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBNNHQodGhpcyxlLG4scil9LGwubGg9ZnVuY3Rpb24oZSl7cmV0dXJuIHp3dCh0aGlzLGUpfSxsLnNoPWZ1bmN0aW9uKGUsbil7U3l0KHRoaXMsZSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBudSgpLEQ0ZX0sbC5CaD1mdW5jdGlvbihlKXtieXQodGhpcyxlKX0sbC5WZT1mdW5jdGlvbigpe3JldHVybiBIaWUodGhpcyl9LGwuV2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHplKHRoaXMsZSl9LGwuWGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHMyKHRoaXMsZSl9LGwuWWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gRW8odGhpcyxlLG4pfSxOKEEyLCJFTWFwUHJvcGVydHlIb2xkZXJJbXBsIiwxOTg1KSxEKDU2NywxMTUsezEwNToxLDQ2OToxLDkyOjEsOTA6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwxMTQ6MSwxMTU6MX0sbXApLGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIHRoaXMuYTtjYXNlIDE6cmV0dXJuIHRoaXMuYn1yZXR1cm4ganoodGhpcyxlLG4scil9LGwubGg9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4gdGhpcy5hIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy5iIT0wfXJldHVybiByc3QodGhpcyxlKX0sbC5zaD1mdW5jdGlvbihlLG4pe3N3aXRjaChlKXtjYXNlIDA6VyQodGhpcyxadCh2ZShuKSkpO3JldHVybjtjYXNlIDE6SyQodGhpcyxadCh2ZShuKSkpO3JldHVybn16c3QodGhpcyxlLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIG51KCksUzRlfSxsLkJoPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDA6VyQodGhpcywwKTtyZXR1cm47Y2FzZSAxOkskKHRoaXMsMCk7cmV0dXJufUZzdCh0aGlzLGUpfSxsLkliPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuRGImNjQ/bWYodGhpcyk6KGU9bmV3IEFoKG1mKHRoaXMpKSxlLmErPSIgKHg6ICIsajMoZSx0aGlzLmEpLGUuYSs9IiwgeTogIixqMyhlLHRoaXMuYiksZS5hKz0iKSIsZS5hKX0sbC5hPTAsbC5iPTAsTihBMiwiRWxrQmVuZFBvaW50SW1wbCIsNTY3KSxEKDcyMywxOTg1LHsxMDU6MSw0MTM6MSwxNjA6MSw5NDoxLDkyOjEsOTA6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwxMTQ6MSwxMTU6MX0pLGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBVeXQodGhpcyxlLG4scil9LGwuaGg9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBNc3QodGhpcyxlLG4scil9LGwuamg9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBnaXQodGhpcyxlLG4scil9LGwubGg9ZnVuY3Rpb24oZSl7cmV0dXJuIGN5dCh0aGlzLGUpfSxsLnNoPWZ1bmN0aW9uKGUsbil7bzR0KHRoaXMsZSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBudSgpLEw0ZX0sbC5CaD1mdW5jdGlvbihlKXtxeXQodGhpcyxlKX0sbC56Zz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmt9LGwuQWc9ZnVuY3Rpb24oKXtyZXR1cm4gWmoodGhpcyl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4geml0KHRoaXMpfSxsLms9bnVsbCxOKEEyLCJFbGtHcmFwaEVsZW1lbnRJbXBsIiw3MjMpLEQoNzI0LDcyMyx7MTA1OjEsNDEzOjEsMTYwOjEsNDcwOjEsOTQ6MSw5MjoxLDkwOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMTE0OjEsMTE1OjF9KSxsLl9nPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gbjN0KHRoaXMsZSxuLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3JldHVybiB1M3QodGhpcyxlKX0sbC5zaD1mdW5jdGlvbihlLG4pe2M0dCh0aGlzLGUsbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gbnUoKSxNNGV9LGwuQmg9ZnVuY3Rpb24oZSl7ZzN0KHRoaXMsZSl9LGwuQmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mfSxsLkNnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ30sbC5EZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLml9LGwuRWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5qfSxsLkZnPWZ1bmN0aW9uKGUsbil7c2oodGhpcyxlLG4pfSxsLkdnPWZ1bmN0aW9uKGUsbil7azEodGhpcyxlLG4pfSxsLkhnPWZ1bmN0aW9uKGUpe0N1KHRoaXMsZSl9LGwuSWc9ZnVuY3Rpb24oZSl7U3UodGhpcyxlKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBQc3QodGhpcyl9LGwuZj0wLGwuZz0wLGwuaT0wLGwuaj0wLE4oQTIsIkVsa1NoYXBlSW1wbCIsNzI0KSxEKDcyNSw3MjQsezEwNToxLDQxMzoxLDgyOjEsMTYwOjEsNDcwOjEsOTQ6MSw5MjoxLDkwOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMTE0OjEsMTE1OjF9KSxsLl9nPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gRjN0KHRoaXMsZSxuLHIpfSxsLmhoPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gZTR0KHRoaXMsZSxuLHIpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gbjR0KHRoaXMsZSxuLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3JldHVybiBfeXQodGhpcyxlKX0sbC5zaD1mdW5jdGlvbihlLG4pe2g1dCh0aGlzLGUsbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gbnUoKSxBNGV9LGwuQmg9ZnVuY3Rpb24oZSl7QTN0KHRoaXMsZSl9LGwueGc9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5kJiYodGhpcy5kPW5ldyBFbihyYSx0aGlzLDgsNSkpLHRoaXMuZH0sbC55Zz1mdW5jdGlvbigpe3JldHVybiF0aGlzLmUmJih0aGlzLmU9bmV3IEVuKHJhLHRoaXMsNyw0KSksdGhpcy5lfSxOKEEyLCJFbGtDb25uZWN0YWJsZVNoYXBlSW1wbCIsNzI1KSxEKDM1Miw3MjMsezEwNToxLDQxMzoxLDc5OjEsMTYwOjEsMzUyOjEsOTQ6MSw5MjoxLDkwOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMTE0OjEsMTE1OjF9LGZ2KSxsLlFnPWZ1bmN0aW9uKGUpe3JldHVybiBRM3QodGhpcyxlKX0sbC5fZz1mdW5jdGlvbihlLG4scil7c3dpdGNoKGUpe2Nhc2UgMzpyZXR1cm4gckQodGhpcyk7Y2FzZSA0OnJldHVybiF0aGlzLmImJih0aGlzLmI9bmV3IEVuKHZyLHRoaXMsNCw3KSksdGhpcy5iO2Nhc2UgNTpyZXR1cm4hdGhpcy5jJiYodGhpcy5jPW5ldyBFbih2cix0aGlzLDUsOCkpLHRoaXMuYztjYXNlIDY6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgaGUodXMsdGhpcyw2LDYpKSx0aGlzLmE7Y2FzZSA3OnJldHVybiBGbigpLCF0aGlzLmImJih0aGlzLmI9bmV3IEVuKHZyLHRoaXMsNCw3KSksISh0aGlzLmIuaTw9MSYmKCF0aGlzLmMmJih0aGlzLmM9bmV3IEVuKHZyLHRoaXMsNSw4KSksdGhpcy5jLmk8PTEpKTtjYXNlIDg6cmV0dXJuIEZuKCksISFnQyh0aGlzKTtjYXNlIDk6cmV0dXJuIEZuKCksISF1dyh0aGlzKTtjYXNlIDEwOnJldHVybiBGbigpLCF0aGlzLmImJih0aGlzLmI9bmV3IEVuKHZyLHRoaXMsNCw3KSksdGhpcy5iLmkhPTAmJighdGhpcy5jJiYodGhpcy5jPW5ldyBFbih2cix0aGlzLDUsOCkpLHRoaXMuYy5pIT0wKX1yZXR1cm4gVXl0KHRoaXMsZSxuLHIpfSxsLmhoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzd2l0Y2gobil7Y2FzZSAzOnJldHVybiB0aGlzLkNiJiYocj0ocz10aGlzLkRiPj4xNixzPj0wP1EzdCh0aGlzLHIpOnRoaXMuQ2IuaWgodGhpcywtMS1zLG51bGwscikpKSxWMnQodGhpcyx1KGUsMzMpLHIpO2Nhc2UgNDpyZXR1cm4hdGhpcy5iJiYodGhpcy5iPW5ldyBFbih2cix0aGlzLDQsNykpLGV1KHRoaXMuYixlLHIpO2Nhc2UgNTpyZXR1cm4hdGhpcy5jJiYodGhpcy5jPW5ldyBFbih2cix0aGlzLDUsOCkpLGV1KHRoaXMuYyxlLHIpO2Nhc2UgNjpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBoZSh1cyx0aGlzLDYsNikpLGV1KHRoaXMuYSxlLHIpfXJldHVybiBNc3QodGhpcyxlLG4scil9LGwuamg9ZnVuY3Rpb24oZSxuLHIpe3N3aXRjaChuKXtjYXNlIDM6cmV0dXJuIFYydCh0aGlzLG51bGwscik7Y2FzZSA0OnJldHVybiF0aGlzLmImJih0aGlzLmI9bmV3IEVuKHZyLHRoaXMsNCw3KSksemEodGhpcy5iLGUscik7Y2FzZSA1OnJldHVybiF0aGlzLmMmJih0aGlzLmM9bmV3IEVuKHZyLHRoaXMsNSw4KSksemEodGhpcy5jLGUscik7Y2FzZSA2OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IGhlKHVzLHRoaXMsNiw2KSksemEodGhpcy5hLGUscil9cmV0dXJuIGdpdCh0aGlzLGUsbixyKX0sbC5saD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSAzOnJldHVybiEhckQodGhpcyk7Y2FzZSA0OnJldHVybiEhdGhpcy5iJiZ0aGlzLmIuaSE9MDtjYXNlIDU6cmV0dXJuISF0aGlzLmMmJnRoaXMuYy5pIT0wO2Nhc2UgNjpyZXR1cm4hIXRoaXMuYSYmdGhpcy5hLmkhPTA7Y2FzZSA3OnJldHVybiF0aGlzLmImJih0aGlzLmI9bmV3IEVuKHZyLHRoaXMsNCw3KSksISh0aGlzLmIuaTw9MSYmKCF0aGlzLmMmJih0aGlzLmM9bmV3IEVuKHZyLHRoaXMsNSw4KSksdGhpcy5jLmk8PTEpKTtjYXNlIDg6cmV0dXJuIGdDKHRoaXMpO2Nhc2UgOTpyZXR1cm4gdXcodGhpcyk7Y2FzZSAxMDpyZXR1cm4hdGhpcy5iJiYodGhpcy5iPW5ldyBFbih2cix0aGlzLDQsNykpLHRoaXMuYi5pIT0wJiYoIXRoaXMuYyYmKHRoaXMuYz1uZXcgRW4odnIsdGhpcyw1LDgpKSx0aGlzLmMuaSE9MCl9cmV0dXJuIGN5dCh0aGlzLGUpfSxsLnNoPWZ1bmN0aW9uKGUsbil7c3dpdGNoKGUpe2Nhc2UgMzpac3QodGhpcyx1KG4sMzMpKTtyZXR1cm47Y2FzZSA0OiF0aGlzLmImJih0aGlzLmI9bmV3IEVuKHZyLHRoaXMsNCw3KSksVHIodGhpcy5iKSwhdGhpcy5iJiYodGhpcy5iPW5ldyBFbih2cix0aGlzLDQsNykpLGdzKHRoaXMuYix1KG4sMTQpKTtyZXR1cm47Y2FzZSA1OiF0aGlzLmMmJih0aGlzLmM9bmV3IEVuKHZyLHRoaXMsNSw4KSksVHIodGhpcy5jKSwhdGhpcy5jJiYodGhpcy5jPW5ldyBFbih2cix0aGlzLDUsOCkpLGdzKHRoaXMuYyx1KG4sMTQpKTtyZXR1cm47Y2FzZSA2OiF0aGlzLmEmJih0aGlzLmE9bmV3IGhlKHVzLHRoaXMsNiw2KSksVHIodGhpcy5hKSwhdGhpcy5hJiYodGhpcy5hPW5ldyBoZSh1cyx0aGlzLDYsNikpLGdzKHRoaXMuYSx1KG4sMTQpKTtyZXR1cm59bzR0KHRoaXMsZSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBudSgpLE5BdH0sbC5CaD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSAzOlpzdCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDQ6IXRoaXMuYiYmKHRoaXMuYj1uZXcgRW4odnIsdGhpcyw0LDcpKSxUcih0aGlzLmIpO3JldHVybjtjYXNlIDU6IXRoaXMuYyYmKHRoaXMuYz1uZXcgRW4odnIsdGhpcyw1LDgpKSxUcih0aGlzLmMpO3JldHVybjtjYXNlIDY6IXRoaXMuYSYmKHRoaXMuYT1uZXcgaGUodXMsdGhpcyw2LDYpKSxUcih0aGlzLmEpO3JldHVybn1xeXQodGhpcyxlKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiB4bGUodGhpcyl9LE4oQTIsIkVsa0VkZ2VJbXBsIiwzNTIpLEQoNDM5LDE5ODUsezEwNToxLDQxMzoxLDIwMjoxLDQzOToxLDk0OjEsOTI6MSw5MDoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDExNDoxLDExNToxfSxpZCksbC5RZz1mdW5jdGlvbihlKXtyZXR1cm4gVzN0KHRoaXMsZSl9LGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3N3aXRjaChlKXtjYXNlIDE6cmV0dXJuIHRoaXMuajtjYXNlIDI6cmV0dXJuIHRoaXMuaztjYXNlIDM6cmV0dXJuIHRoaXMuYjtjYXNlIDQ6cmV0dXJuIHRoaXMuYztjYXNlIDU6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgQnMoV2gsdGhpcyw1KSksdGhpcy5hO2Nhc2UgNjpyZXR1cm4gY1F0KHRoaXMpO2Nhc2UgNzpyZXR1cm4gbj9jc3QodGhpcyk6dGhpcy5pO2Nhc2UgODpyZXR1cm4gbj9vc3QodGhpcyk6dGhpcy5mO2Nhc2UgOTpyZXR1cm4hdGhpcy5nJiYodGhpcy5nPW5ldyBFbih1cyx0aGlzLDksMTApKSx0aGlzLmc7Y2FzZSAxMDpyZXR1cm4hdGhpcy5lJiYodGhpcy5lPW5ldyBFbih1cyx0aGlzLDEwLDkpKSx0aGlzLmU7Y2FzZSAxMTpyZXR1cm4gdGhpcy5kfXJldHVybiBxM3QodGhpcyxlLG4scil9LGwuaGg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saDtzd2l0Y2gobil7Y2FzZSA2OnJldHVybiB0aGlzLkNiJiYocj0obz10aGlzLkRiPj4xNixvPj0wP1czdCh0aGlzLHIpOnRoaXMuQ2IuaWgodGhpcywtMS1vLG51bGwscikpKSxHMnQodGhpcyx1KGUsNzkpLHIpO2Nhc2UgOTpyZXR1cm4hdGhpcy5nJiYodGhpcy5nPW5ldyBFbih1cyx0aGlzLDksMTApKSxldSh0aGlzLmcsZSxyKTtjYXNlIDEwOnJldHVybiF0aGlzLmUmJih0aGlzLmU9bmV3IEVuKHVzLHRoaXMsMTAsOSkpLGV1KHRoaXMuZSxlLHIpfXJldHVybiBoPXUod24oKHM9dShNbih0aGlzLDE2KSwyNiksc3x8KG51KCksWUcpKSxuKSw2NiksaC5OaigpLlFqKHRoaXMsdXUodGhpcyksbi1KbigobnUoKSxZRykpLGUscil9LGwuamg9ZnVuY3Rpb24oZSxuLHIpe3N3aXRjaChuKXtjYXNlIDU6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgQnMoV2gsdGhpcyw1KSksemEodGhpcy5hLGUscik7Y2FzZSA2OnJldHVybiBHMnQodGhpcyxudWxsLHIpO2Nhc2UgOTpyZXR1cm4hdGhpcy5nJiYodGhpcy5nPW5ldyBFbih1cyx0aGlzLDksMTApKSx6YSh0aGlzLmcsZSxyKTtjYXNlIDEwOnJldHVybiF0aGlzLmUmJih0aGlzLmU9bmV3IEVuKHVzLHRoaXMsMTAsOSkpLHphKHRoaXMuZSxlLHIpfXJldHVybiBNNHQodGhpcyxlLG4scil9LGwubGg9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgMTpyZXR1cm4gdGhpcy5qIT0wO2Nhc2UgMjpyZXR1cm4gdGhpcy5rIT0wO2Nhc2UgMzpyZXR1cm4gdGhpcy5iIT0wO2Nhc2UgNDpyZXR1cm4gdGhpcy5jIT0wO2Nhc2UgNTpyZXR1cm4hIXRoaXMuYSYmdGhpcy5hLmkhPTA7Y2FzZSA2OnJldHVybiEhY1F0KHRoaXMpO2Nhc2UgNzpyZXR1cm4hIXRoaXMuaTtjYXNlIDg6cmV0dXJuISF0aGlzLmY7Y2FzZSA5OnJldHVybiEhdGhpcy5nJiZ0aGlzLmcuaSE9MDtjYXNlIDEwOnJldHVybiEhdGhpcy5lJiZ0aGlzLmUuaSE9MDtjYXNlIDExOnJldHVybiB0aGlzLmQhPW51bGx9cmV0dXJuIHp3dCh0aGlzLGUpfSxsLnNoPWZ1bmN0aW9uKGUsbil7c3dpdGNoKGUpe2Nhc2UgMTpQOCh0aGlzLFp0KHZlKG4pKSk7cmV0dXJuO2Nhc2UgMjpCOCh0aGlzLFp0KHZlKG4pKSk7cmV0dXJuO2Nhc2UgMzpOOCh0aGlzLFp0KHZlKG4pKSk7cmV0dXJuO2Nhc2UgNDpGOCh0aGlzLFp0KHZlKG4pKSk7cmV0dXJuO2Nhc2UgNTohdGhpcy5hJiYodGhpcy5hPW5ldyBCcyhXaCx0aGlzLDUpKSxUcih0aGlzLmEpLCF0aGlzLmEmJih0aGlzLmE9bmV3IEJzKFdoLHRoaXMsNSkpLGdzKHRoaXMuYSx1KG4sMTQpKTtyZXR1cm47Y2FzZSA2OmtjZSh0aGlzLHUobiw3OSkpO3JldHVybjtjYXNlIDc6SiQodGhpcyx1KG4sODIpKTtyZXR1cm47Y2FzZSA4OlokKHRoaXMsdShuLDgyKSk7cmV0dXJuO2Nhc2UgOTohdGhpcy5nJiYodGhpcy5nPW5ldyBFbih1cyx0aGlzLDksMTApKSxUcih0aGlzLmcpLCF0aGlzLmcmJih0aGlzLmc9bmV3IEVuKHVzLHRoaXMsOSwxMCkpLGdzKHRoaXMuZyx1KG4sMTQpKTtyZXR1cm47Y2FzZSAxMDohdGhpcy5lJiYodGhpcy5lPW5ldyBFbih1cyx0aGlzLDEwLDkpKSxUcih0aGlzLmUpLCF0aGlzLmUmJih0aGlzLmU9bmV3IEVuKHVzLHRoaXMsMTAsOSkpLGdzKHRoaXMuZSx1KG4sMTQpKTtyZXR1cm47Y2FzZSAxMTpKbXQodGhpcyxqcihuKSk7cmV0dXJufVN5dCh0aGlzLGUsbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gbnUoKSxZR30sbC5CaD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSAxOlA4KHRoaXMsMCk7cmV0dXJuO2Nhc2UgMjpCOCh0aGlzLDApO3JldHVybjtjYXNlIDM6TjgodGhpcywwKTtyZXR1cm47Y2FzZSA0OkY4KHRoaXMsMCk7cmV0dXJuO2Nhc2UgNTohdGhpcy5hJiYodGhpcy5hPW5ldyBCcyhXaCx0aGlzLDUpKSxUcih0aGlzLmEpO3JldHVybjtjYXNlIDY6a2NlKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgNzpKJCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDg6WiQodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA5OiF0aGlzLmcmJih0aGlzLmc9bmV3IEVuKHVzLHRoaXMsOSwxMCkpLFRyKHRoaXMuZyk7cmV0dXJuO2Nhc2UgMTA6IXRoaXMuZSYmKHRoaXMuZT1uZXcgRW4odXMsdGhpcywxMCw5KSksVHIodGhpcy5lKTtyZXR1cm47Y2FzZSAxMTpKbXQodGhpcyxudWxsKTtyZXR1cm59Ynl0KHRoaXMsZSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gJG9lKHRoaXMpfSxsLmI9MCxsLmM9MCxsLmQ9bnVsbCxsLmo9MCxsLms9MCxOKEEyLCJFbGtFZGdlU2VjdGlvbkltcGwiLDQzOSksRCgxNTAsMTE1LHsxMDU6MSw5MjoxLDkwOjEsMTQ3OjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMTUwOjEsMTE0OjEsMTE1OjF9KSxsLl9nPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztyZXR1cm4gZT09MD8oIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShlaSx0aGlzLDAsMykpLHRoaXMuQWIpOmhoKHRoaXMsZS1Kbih0aGlzLnpoKCkpLHduKChzPXUoTW4odGhpcywxNiksMjYpLHN8fHRoaXMuemgoKSksZSksbixyKX0sbC5oaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbztyZXR1cm4gbj09MD8oIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShlaSx0aGlzLDAsMykpLGV1KHRoaXMuQWIsZSxyKSk6KG89dSh3bigocz11KE1uKHRoaXMsMTYpLDI2KSxzfHx0aGlzLnpoKCkpLG4pLDY2KSxvLk5qKCkuUWoodGhpcyx1dSh0aGlzKSxuLUpuKHRoaXMuemgoKSksZSxyKSl9LGwuamg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG87cmV0dXJuIG49PTA/KCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoZWksdGhpcywwLDMpKSx6YSh0aGlzLkFiLGUscikpOihvPXUod24oKHM9dShNbih0aGlzLDE2KSwyNiksc3x8dGhpcy56aCgpKSxuKSw2Niksby5OaigpLlJqKHRoaXMsdXUodGhpcyksbi1Kbih0aGlzLnpoKCkpLGUscikpfSxsLmxoPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBlPT0wPyEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wOnVoKHRoaXMsZS1Kbih0aGlzLnpoKCkpLHduKChuPXUoTW4odGhpcywxNiksMjYpLG58fHRoaXMuemgoKSksZSkpfSxsLm9oPWZ1bmN0aW9uKGUpe3JldHVybiBtNnQodGhpcyxlKX0sbC5zaD1mdW5jdGlvbihlLG4pe3ZhciByO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShlaSx0aGlzLDAsMykpLFRyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoZWksdGhpcywwLDMpKSxncyh0aGlzLkFiLHUobiwxNCkpO3JldHVybn1iaCh0aGlzLGUtSm4odGhpcy56aCgpKSx3bigocj11KE1uKHRoaXMsMTYpLDI2KSxyfHx0aGlzLnpoKCkpLGUpLG4pfSxsLnVoPWZ1bmN0aW9uKGUpe0o2KHRoaXMsMTI4LGUpfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIGxuKCksWDRlfSxsLkJoPWZ1bmN0aW9uKGUpe3ZhciBuO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShlaSx0aGlzLDAsMykpLFRyKHRoaXMuQWIpO3JldHVybn1naCh0aGlzLGUtSm4odGhpcy56aCgpKSx3bigobj11KE1uKHRoaXMsMTYpLDI2KSxufHx0aGlzLnpoKCkpLGUpKX0sbC5HaD1mdW5jdGlvbigpe3RoaXMuQmJ8PTF9LGwuSGg9ZnVuY3Rpb24oZSl7cmV0dXJuIG1DKHRoaXMsZSl9LGwuQmI9MCxOKExuLCJFTW9kZWxFbGVtZW50SW1wbCIsMTUwKSxEKDcwNCwxNTAsezEwNToxLDkyOjEsOTA6MSw0NzE6MSwxNDc6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwxNTA6MSwxMTQ6MSwxMTU6MX0scUIpLGwuSWg9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gUWxlKHRoaXMsZSxuKX0sbC5KaD1mdW5jdGlvbihlKXt2YXIgbixyLHMsbyxoO2lmKHRoaXMuYSE9emwoZSl8fGUuQmImMjU2KXRocm93IG50KG5ldyBQbigkY3QrZS56YitrdykpO2ZvcihzPVBvKGUpO09jKHMuYSkuaSE9MDspe2lmKHI9dShFSShzLDAsKG49dShBdChPYyhzLmEpLDApLDg3KSxoPW4uYyxfdChoLDg4KT91KGgsMjYpOihsbigpLFFoKSkpLDI2KSxjdyhyKSlyZXR1cm4gbz16bChyKS5OaCgpLkpoKHIpLHUobyw0OSkudGgoZSksbztzPVBvKHIpfXJldHVybihlLkQhPW51bGw/ZS5EOmUuQik9PSJqYXZhLnV0aWwuTWFwJEVudHJ5Ij9uZXcgVUt0KGUpOm5ldyBEdnQoZSl9LGwuS2g9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gcHcodGhpcyxlLG4pfSxsLl9nPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoZWksdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy5hfXJldHVybiBoaCh0aGlzLGUtSm4oKGxuKCksTGIpKSx3bigocz11KE1uKHRoaXMsMTYpLDI2KSxzfHxMYiksZSksbixyKX0sbC5oaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbztzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoZWksdGhpcywwLDMpKSxldSh0aGlzLkFiLGUscik7Y2FzZSAxOnJldHVybiB0aGlzLmEmJihyPXUodGhpcy5hLDQ5KS5paCh0aGlzLDQsbzEscikpLCR5dCh0aGlzLHUoZSwyMzUpLHIpfXJldHVybiBvPXUod24oKHM9dShNbih0aGlzLDE2KSwyNiksc3x8KGxuKCksTGIpKSxuKSw2Niksby5OaigpLlFqKHRoaXMsdXUodGhpcyksbi1KbigobG4oKSxMYikpLGUscil9LGwuamg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKGVpLHRoaXMsMCwzKSksemEodGhpcy5BYixlLHIpO2Nhc2UgMTpyZXR1cm4gJHl0KHRoaXMsbnVsbCxyKX1yZXR1cm4gbz11KHduKChzPXUoTW4odGhpcywxNiksMjYpLHN8fChsbigpLExiKSksbiksNjYpLG8uTmooKS5Saih0aGlzLHV1KHRoaXMpLG4tSm4oKGxuKCksTGIpKSxlLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3ZhciBuO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiEhdGhpcy5hfXJldHVybiB1aCh0aGlzLGUtSm4oKGxuKCksTGIpKSx3bigobj11KE1uKHRoaXMsMTYpLDI2KSxufHxMYiksZSkpfSxsLnNoPWZ1bmN0aW9uKGUsbil7dmFyIHI7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKGVpLHRoaXMsMCwzKSksVHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShlaSx0aGlzLDAsMykpLGdzKHRoaXMuQWIsdShuLDE0KSk7cmV0dXJuO2Nhc2UgMTprYWUodGhpcyx1KG4sMjM1KSk7cmV0dXJufWJoKHRoaXMsZS1KbigobG4oKSxMYikpLHduKChyPXUoTW4odGhpcywxNiksMjYpLHJ8fExiKSxlKSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBsbigpLExifSxsLkJoPWZ1bmN0aW9uKGUpe3ZhciBuO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShlaSx0aGlzLDAsMykpLFRyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6a2FlKHRoaXMsbnVsbCk7cmV0dXJufWdoKHRoaXMsZS1KbigobG4oKSxMYikpLHduKChuPXUoTW4odGhpcywxNiksMjYpLG58fExiKSxlKSl9O3ZhciByQSxSQXQsTzRlO04oTG4sIkVGYWN0b3J5SW1wbCIsNzA0KSxEKHhmLDcwNCx7MTA1OjEsMjAxNDoxLDkyOjEsOTA6MSw0NzE6MSwxNDc6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwxNTA6MSwxMTQ6MSwxMTU6MX0sWjUpLGwuSWg9ZnVuY3Rpb24oZSxuKXtzd2l0Y2goZS55aigpKXtjYXNlIDEyOnJldHVybiB1KG4sMTQ2KS50ZygpO2Nhc2UgMTM6cmV0dXJuIFdvKG4pO2RlZmF1bHQ6dGhyb3cgbnQobmV3IFBuKHo3K2UubmUoKStrdykpfX0sbC5KaD1mdW5jdGlvbihlKXt2YXIgbixyLHMsbyxoLGQsdyxrO3N3aXRjaChlLkc9PS0xJiYoZS5HPShuPXpsKGUpLG4/JGcobi5NaCgpLGUpOi0xKSksZS5HKXtjYXNlIDQ6cmV0dXJuIGg9bmV3IFk5LGg7Y2FzZSA2OnJldHVybiBkPW5ldyBOcHQsZDtjYXNlIDc6cmV0dXJuIHc9bmV3IFBwdCx3O2Nhc2UgODpyZXR1cm4gcz1uZXcgZnYscztjYXNlIDk6cmV0dXJuIHI9bmV3IG1wLHI7Y2FzZSAxMDpyZXR1cm4gbz1uZXcgaWQsbztjYXNlIDExOnJldHVybiBrPW5ldyBZRixrO2RlZmF1bHQ6dGhyb3cgbnQobmV3IFBuKCRjdCtlLnpiK2t3KSl9fSxsLktoPWZ1bmN0aW9uKGUsbil7c3dpdGNoKGUueWooKSl7Y2FzZSAxMzpjYXNlIDEyOnJldHVybiBudWxsO2RlZmF1bHQ6dGhyb3cgbnQobmV3IFBuKHo3K2UubmUoKStrdykpfX0sTihBMiwiRWxrR3JhcGhGYWN0b3J5SW1wbCIseGYpLEQoNDM4LDE1MCx7MTA1OjEsOTI6MSw5MDoxLDE0NzoxLDE5MToxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDE1MDoxLDExNDoxLDExNToxfSksbC5XZz1mdW5jdGlvbigpe3ZhciBlLG47cmV0dXJuIG49KGU9dShNbih0aGlzLDE2KSwyNiksTHd0KGJkKGV8fHRoaXMuemgoKSkpKSxuPT1udWxsPyhHVCgpLEdUKCksTGZ0KTpuZXcgZFd0KHRoaXMsbil9LGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShlaSx0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLm5lKCl9cmV0dXJuIGhoKHRoaXMsZS1Kbih0aGlzLnpoKCkpLHduKChzPXUoTW4odGhpcywxNiksMjYpLHN8fHRoaXMuemgoKSksZSksbixyKX0sbC5saD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbH1yZXR1cm4gdWgodGhpcyxlLUpuKHRoaXMuemgoKSksd24oKG49dShNbih0aGlzLDE2KSwyNiksbnx8dGhpcy56aCgpKSxlKSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXt2YXIgcjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoZWksdGhpcywwLDMpKSxUcih0aGlzLkFiKSwhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKGVpLHRoaXMsMCwzKSksZ3ModGhpcy5BYix1KG4sMTQpKTtyZXR1cm47Y2FzZSAxOnRoaXMuTGgoanIobikpO3JldHVybn1iaCh0aGlzLGUtSm4odGhpcy56aCgpKSx3bigocj11KE1uKHRoaXMsMTYpLDI2KSxyfHx0aGlzLnpoKCkpLGUpLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIGxuKCksUTRlfSxsLkJoPWZ1bmN0aW9uKGUpe3ZhciBuO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShlaSx0aGlzLDAsMykpLFRyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6dGhpcy5MaChudWxsKTtyZXR1cm59Z2godGhpcyxlLUpuKHRoaXMuemgoKSksd24oKG49dShNbih0aGlzLDE2KSwyNiksbnx8dGhpcy56aCgpKSxlKSl9LGwubmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy56Yn0sbC5MaD1mdW5jdGlvbihlKXt0dSh0aGlzLGUpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIFhfKHRoaXMpfSxsLnpiPW51bGwsTihMbiwiRU5hbWVkRWxlbWVudEltcGwiLDQzOCksRCgxNzksNDM4LHsxMDU6MSw5MjoxLDkwOjEsMTQ3OjEsMTkxOjEsNTY6MSwyMzU6MSwxMDg6MSw0OToxLDk3OjEsMTUwOjEsMTc5OjEsMTE0OjEsMTE1OjEsNjc1OjF9LFdYdCksbC5RZz1mdW5jdGlvbihlKXtyZXR1cm4gRnNlKHRoaXMsZSl9LGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShlaSx0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLnpiO2Nhc2UgMjpyZXR1cm4gdGhpcy55YjtjYXNlIDM6cmV0dXJuIHRoaXMueGI7Y2FzZSA0OnJldHVybiB0aGlzLnNiO2Nhc2UgNTpyZXR1cm4hdGhpcy5yYiYmKHRoaXMucmI9bmV3IHFtKHRoaXMsYzEsdGhpcykpLHRoaXMucmI7Y2FzZSA2OnJldHVybiF0aGlzLnZiJiYodGhpcy52Yj1uZXcgTTYobzEsdGhpcyw2LDcpKSx0aGlzLnZiO2Nhc2UgNzpyZXR1cm4gbj90aGlzLkRiPj4xNj09Nz91KHRoaXMuQ2IsMjM1KTpudWxsOnVRdCh0aGlzKX1yZXR1cm4gaGgodGhpcyxlLUpuKChsbigpLGFwKSksd24oKHM9dShNbih0aGlzLDE2KSwyNiksc3x8YXApLGUpLG4scil9LGwuaGg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saDtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoZWksdGhpcywwLDMpKSxldSh0aGlzLkFiLGUscik7Y2FzZSA0OnJldHVybiB0aGlzLnNiJiYocj11KHRoaXMuc2IsNDkpLmloKHRoaXMsMSxuQSxyKSksVnl0KHRoaXMsdShlLDQ3MSkscik7Y2FzZSA1OnJldHVybiF0aGlzLnJiJiYodGhpcy5yYj1uZXcgcW0odGhpcyxjMSx0aGlzKSksZXUodGhpcy5yYixlLHIpO2Nhc2UgNjpyZXR1cm4hdGhpcy52YiYmKHRoaXMudmI9bmV3IE02KG8xLHRoaXMsNiw3KSksZXUodGhpcy52YixlLHIpO2Nhc2UgNzpyZXR1cm4gdGhpcy5DYiYmKHI9KG89dGhpcy5EYj4+MTYsbz49MD9Gc2UodGhpcyxyKTp0aGlzLkNiLmloKHRoaXMsLTEtbyxudWxsLHIpKSksVWwodGhpcyxlLDcscil9cmV0dXJuIGg9dSh3bigocz11KE1uKHRoaXMsMTYpLDI2KSxzfHwobG4oKSxhcCkpLG4pLDY2KSxoLk5qKCkuUWoodGhpcyx1dSh0aGlzKSxuLUpuKChsbigpLGFwKSksZSxyKX0sbC5qaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbztzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoZWksdGhpcywwLDMpKSx6YSh0aGlzLkFiLGUscik7Y2FzZSA0OnJldHVybiBWeXQodGhpcyxudWxsLHIpO2Nhc2UgNTpyZXR1cm4hdGhpcy5yYiYmKHRoaXMucmI9bmV3IHFtKHRoaXMsYzEsdGhpcykpLHphKHRoaXMucmIsZSxyKTtjYXNlIDY6cmV0dXJuIXRoaXMudmImJih0aGlzLnZiPW5ldyBNNihvMSx0aGlzLDYsNykpLHphKHRoaXMudmIsZSxyKTtjYXNlIDc6cmV0dXJuIFVsKHRoaXMsbnVsbCw3LHIpfXJldHVybiBvPXUod24oKHM9dShNbih0aGlzLDE2KSwyNiksc3x8KGxuKCksYXApKSxuKSw2Niksby5OaigpLlJqKHRoaXMsdXUodGhpcyksbi1KbigobG4oKSxhcCkpLGUscil9LGwubGg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGw7Y2FzZSAyOnJldHVybiB0aGlzLnliIT1udWxsO2Nhc2UgMzpyZXR1cm4gdGhpcy54YiE9bnVsbDtjYXNlIDQ6cmV0dXJuISF0aGlzLnNiO2Nhc2UgNTpyZXR1cm4hIXRoaXMucmImJnRoaXMucmIuaSE9MDtjYXNlIDY6cmV0dXJuISF0aGlzLnZiJiZ0aGlzLnZiLmkhPTA7Y2FzZSA3OnJldHVybiEhdVF0KHRoaXMpfXJldHVybiB1aCh0aGlzLGUtSm4oKGxuKCksYXApKSx3bigobj11KE1uKHRoaXMsMTYpLDI2KSxufHxhcCksZSkpfSxsLm9oPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPU0ybih0aGlzLGUpLG58fG02dCh0aGlzLGUpfSxsLnNoPWZ1bmN0aW9uKGUsbil7dmFyIHI7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKGVpLHRoaXMsMCwzKSksVHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShlaSx0aGlzLDAsMykpLGdzKHRoaXMuQWIsdShuLDE0KSk7cmV0dXJuO2Nhc2UgMTp0dSh0aGlzLGpyKG4pKTtyZXR1cm47Y2FzZSAyOmF6KHRoaXMsanIobikpO3JldHVybjtjYXNlIDM6c3oodGhpcyxqcihuKSk7cmV0dXJuO2Nhc2UgNDpOc3QodGhpcyx1KG4sNDcxKSk7cmV0dXJuO2Nhc2UgNTohdGhpcy5yYiYmKHRoaXMucmI9bmV3IHFtKHRoaXMsYzEsdGhpcykpLFRyKHRoaXMucmIpLCF0aGlzLnJiJiYodGhpcy5yYj1uZXcgcW0odGhpcyxjMSx0aGlzKSksZ3ModGhpcy5yYix1KG4sMTQpKTtyZXR1cm47Y2FzZSA2OiF0aGlzLnZiJiYodGhpcy52Yj1uZXcgTTYobzEsdGhpcyw2LDcpKSxUcih0aGlzLnZiKSwhdGhpcy52YiYmKHRoaXMudmI9bmV3IE02KG8xLHRoaXMsNiw3KSksZ3ModGhpcy52Yix1KG4sMTQpKTtyZXR1cm59YmgodGhpcyxlLUpuKChsbigpLGFwKSksd24oKHI9dShNbih0aGlzLDE2KSwyNikscnx8YXApLGUpLG4pfSxsLnZoPWZ1bmN0aW9uKGUpe3ZhciBuLHI7aWYoZSYmdGhpcy5yYilmb3Iocj1uZXcgbnIodGhpcy5yYik7ci5lIT1yLmkuZ2MoKTspbj1kcihyKSxfdChuLDM1MSkmJih1KG4sMzUxKS53PW51bGwpO0o2KHRoaXMsNjQsZSl9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gbG4oKSxhcH0sbC5CaD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoZWksdGhpcywwLDMpKSxUcih0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOnR1KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjpheih0aGlzLG51bGwpO3JldHVybjtjYXNlIDM6c3oodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA0Ok5zdCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDU6IXRoaXMucmImJih0aGlzLnJiPW5ldyBxbSh0aGlzLGMxLHRoaXMpKSxUcih0aGlzLnJiKTtyZXR1cm47Y2FzZSA2OiF0aGlzLnZiJiYodGhpcy52Yj1uZXcgTTYobzEsdGhpcyw2LDcpKSxUcih0aGlzLnZiKTtyZXR1cm59Z2godGhpcyxlLUpuKChsbigpLGFwKSksd24oKG49dShNbih0aGlzLDE2KSwyNiksbnx8YXApLGUpKX0sbC5HaD1mdW5jdGlvbigpe3hzdCh0aGlzKX0sbC5NaD1mdW5jdGlvbigpe3JldHVybiF0aGlzLnJiJiYodGhpcy5yYj1uZXcgcW0odGhpcyxjMSx0aGlzKSksdGhpcy5yYn0sbC5OaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNifSxsLk9oPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudWJ9LGwuUGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54Yn0sbC5RaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnlifSxsLlJoPWZ1bmN0aW9uKGUpe3RoaXMudWI9ZX0sbC5JYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiB0aGlzLkRiJjY0P1hfKHRoaXMpOihlPW5ldyBBaChYXyh0aGlzKSksZS5hKz0iIChuc1VSSTogIix5byhlLHRoaXMueWIpLGUuYSs9IiwgbnNQcmVmaXg6ICIseW8oZSx0aGlzLnhiKSxlLmErPSIpIixlLmEpfSxsLnhiPW51bGwsbC55Yj1udWxsLE4oTG4sIkVQYWNrYWdlSW1wbCIsMTc5KSxEKDU1NSwxNzksezEwNToxLDIwMTY6MSw1NTU6MSw5MjoxLDkwOjEsMTQ3OjEsMTkxOjEsNTY6MSwyMzU6MSwxMDg6MSw0OToxLDk3OjEsMTUwOjEsMTc5OjEsMTE0OjEsMTE1OjEsNjc1OjF9LFlvZSksbC5xPSExLGwucj0hMTt2YXIgTjRlPSExO04oQTIsIkVsa0dyYXBoUGFja2FnZUltcGwiLDU1NSksRCgzNTQsNzI0LHsxMDU6MSw0MTM6MSwxNjA6MSwxMzc6MSw0NzA6MSwzNTQ6MSw5NDoxLDkyOjEsOTA6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwxMTQ6MSwxMTU6MX0sWTkpLGwuUWc9ZnVuY3Rpb24oZSl7cmV0dXJuIEszdCh0aGlzLGUpfSxsLl9nPWZ1bmN0aW9uKGUsbixyKXtzd2l0Y2goZSl7Y2FzZSA3OnJldHVybiBsUXQodGhpcyk7Y2FzZSA4OnJldHVybiB0aGlzLmF9cmV0dXJuIG4zdCh0aGlzLGUsbixyKX0sbC5oaD1mdW5jdGlvbihlLG4scil7dmFyIHM7c3dpdGNoKG4pe2Nhc2UgNzpyZXR1cm4gdGhpcy5DYiYmKHI9KHM9dGhpcy5EYj4+MTYscz49MD9LM3QodGhpcyxyKTp0aGlzLkNiLmloKHRoaXMsLTEtcyxudWxsLHIpKSksVXZ0KHRoaXMsdShlLDE2MCkscil9cmV0dXJuIE1zdCh0aGlzLGUsbixyKX0sbC5qaD1mdW5jdGlvbihlLG4scil7cmV0dXJuIG49PTc/VXZ0KHRoaXMsbnVsbCxyKTpnaXQodGhpcyxlLG4scil9LGwubGg9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgNzpyZXR1cm4hIWxRdCh0aGlzKTtjYXNlIDg6cmV0dXJuIXVuKCIiLHRoaXMuYSl9cmV0dXJuIHUzdCh0aGlzLGUpfSxsLnNoPWZ1bmN0aW9uKGUsbil7c3dpdGNoKGUpe2Nhc2UgNzpfNXQodGhpcyx1KG4sMTYwKSk7cmV0dXJuO2Nhc2UgODpVbXQodGhpcyxqcihuKSk7cmV0dXJufWM0dCh0aGlzLGUsbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gbnUoKSxQQXR9LGwuQmg9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgNzpfNXQodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA4OlVtdCh0aGlzLCIiKTtyZXR1cm59ZzN0KHRoaXMsZSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gRmFlKHRoaXMpfSxsLmE9IiIsTihBMiwiRWxrTGFiZWxJbXBsIiwzNTQpLEQoMjM5LDcyNSx7MTA1OjEsNDEzOjEsODI6MSwxNjA6MSwzMzoxLDQ3MDoxLDIzOToxLDk0OjEsOTI6MSw5MDoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDExNDoxLDExNToxfSxOcHQpLGwuUWc9ZnVuY3Rpb24oZSl7cmV0dXJuIFozdCh0aGlzLGUpfSxsLl9nPWZ1bmN0aW9uKGUsbixyKXtzd2l0Y2goZSl7Y2FzZSA5OnJldHVybiF0aGlzLmMmJih0aGlzLmM9bmV3IGhlKHlsLHRoaXMsOSw5KSksdGhpcy5jO2Nhc2UgMTA6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgaGUoZHMsdGhpcywxMCwxMSkpLHRoaXMuYTtjYXNlIDExOnJldHVybiBocyh0aGlzKTtjYXNlIDEyOnJldHVybiF0aGlzLmImJih0aGlzLmI9bmV3IGhlKHJhLHRoaXMsMTIsMykpLHRoaXMuYjtjYXNlIDEzOnJldHVybiBGbigpLCF0aGlzLmEmJih0aGlzLmE9bmV3IGhlKGRzLHRoaXMsMTAsMTEpKSx0aGlzLmEuaT4wfXJldHVybiBGM3QodGhpcyxlLG4scil9LGwuaGg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3N3aXRjaChuKXtjYXNlIDk6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgaGUoeWwsdGhpcyw5LDkpKSxldSh0aGlzLmMsZSxyKTtjYXNlIDEwOnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IGhlKGRzLHRoaXMsMTAsMTEpKSxldSh0aGlzLmEsZSxyKTtjYXNlIDExOnJldHVybiB0aGlzLkNiJiYocj0ocz10aGlzLkRiPj4xNixzPj0wP1ozdCh0aGlzLHIpOnRoaXMuQ2IuaWgodGhpcywtMS1zLG51bGwscikpKSx0dnQodGhpcyx1KGUsMzMpLHIpO2Nhc2UgMTI6cmV0dXJuIXRoaXMuYiYmKHRoaXMuYj1uZXcgaGUocmEsdGhpcywxMiwzKSksZXUodGhpcy5iLGUscil9cmV0dXJuIGU0dCh0aGlzLGUsbixyKX0sbC5qaD1mdW5jdGlvbihlLG4scil7c3dpdGNoKG4pe2Nhc2UgOTpyZXR1cm4hdGhpcy5jJiYodGhpcy5jPW5ldyBoZSh5bCx0aGlzLDksOSkpLHphKHRoaXMuYyxlLHIpO2Nhc2UgMTA6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgaGUoZHMsdGhpcywxMCwxMSkpLHphKHRoaXMuYSxlLHIpO2Nhc2UgMTE6cmV0dXJuIHR2dCh0aGlzLG51bGwscik7Y2FzZSAxMjpyZXR1cm4hdGhpcy5iJiYodGhpcy5iPW5ldyBoZShyYSx0aGlzLDEyLDMpKSx6YSh0aGlzLmIsZSxyKX1yZXR1cm4gbjR0KHRoaXMsZSxuLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDk6cmV0dXJuISF0aGlzLmMmJnRoaXMuYy5pIT0wO2Nhc2UgMTA6cmV0dXJuISF0aGlzLmEmJnRoaXMuYS5pIT0wO2Nhc2UgMTE6cmV0dXJuISFocyh0aGlzKTtjYXNlIDEyOnJldHVybiEhdGhpcy5iJiZ0aGlzLmIuaSE9MDtjYXNlIDEzOnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IGhlKGRzLHRoaXMsMTAsMTEpKSx0aGlzLmEuaT4wfXJldHVybiBfeXQodGhpcyxlKX0sbC5zaD1mdW5jdGlvbihlLG4pe3N3aXRjaChlKXtjYXNlIDk6IXRoaXMuYyYmKHRoaXMuYz1uZXcgaGUoeWwsdGhpcyw5LDkpKSxUcih0aGlzLmMpLCF0aGlzLmMmJih0aGlzLmM9bmV3IGhlKHlsLHRoaXMsOSw5KSksZ3ModGhpcy5jLHUobiwxNCkpO3JldHVybjtjYXNlIDEwOiF0aGlzLmEmJih0aGlzLmE9bmV3IGhlKGRzLHRoaXMsMTAsMTEpKSxUcih0aGlzLmEpLCF0aGlzLmEmJih0aGlzLmE9bmV3IGhlKGRzLHRoaXMsMTAsMTEpKSxncyh0aGlzLmEsdShuLDE0KSk7cmV0dXJuO2Nhc2UgMTE6azV0KHRoaXMsdShuLDMzKSk7cmV0dXJuO2Nhc2UgMTI6IXRoaXMuYiYmKHRoaXMuYj1uZXcgaGUocmEsdGhpcywxMiwzKSksVHIodGhpcy5iKSwhdGhpcy5iJiYodGhpcy5iPW5ldyBoZShyYSx0aGlzLDEyLDMpKSxncyh0aGlzLmIsdShuLDE0KSk7cmV0dXJufWg1dCh0aGlzLGUsbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gbnUoKSxGQXR9LGwuQmg9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgOTohdGhpcy5jJiYodGhpcy5jPW5ldyBoZSh5bCx0aGlzLDksOSkpLFRyKHRoaXMuYyk7cmV0dXJuO2Nhc2UgMTA6IXRoaXMuYSYmKHRoaXMuYT1uZXcgaGUoZHMsdGhpcywxMCwxMSkpLFRyKHRoaXMuYSk7cmV0dXJuO2Nhc2UgMTE6azV0KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMTI6IXRoaXMuYiYmKHRoaXMuYj1uZXcgaGUocmEsdGhpcywxMiwzKSksVHIodGhpcy5iKTtyZXR1cm59QTN0KHRoaXMsZSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gJDV0KHRoaXMpfSxOKEEyLCJFbGtOb2RlSW1wbCIsMjM5KSxEKDE4Niw3MjUsezEwNToxLDQxMzoxLDgyOjEsMTYwOjEsMTE4OjEsNDcwOjEsMTg2OjEsOTQ6MSw5MjoxLDkwOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMTE0OjEsMTE1OjF9LFBwdCksbC5RZz1mdW5jdGlvbihlKXtyZXR1cm4gWTN0KHRoaXMsZSl9LGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBlPT05P18xKHRoaXMpOkYzdCh0aGlzLGUsbixyKX0sbC5oaD1mdW5jdGlvbihlLG4scil7dmFyIHM7c3dpdGNoKG4pe2Nhc2UgOTpyZXR1cm4gdGhpcy5DYiYmKHI9KHM9dGhpcy5EYj4+MTYscz49MD9ZM3QodGhpcyxyKTp0aGlzLkNiLmloKHRoaXMsLTEtcyxudWxsLHIpKSksVTJ0KHRoaXMsdShlLDMzKSxyKX1yZXR1cm4gZTR0KHRoaXMsZSxuLHIpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gbj09OT9VMnQodGhpcyxudWxsLHIpOm40dCh0aGlzLGUsbixyKX0sbC5saD1mdW5jdGlvbihlKXtyZXR1cm4gZT09OT8hIV8xKHRoaXMpOl95dCh0aGlzLGUpfSxsLnNoPWZ1bmN0aW9uKGUsbil7c3dpdGNoKGUpe2Nhc2UgOTp4NXQodGhpcyx1KG4sMzMpKTtyZXR1cm59aDV0KHRoaXMsZSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBudSgpLEJBdH0sbC5CaD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSA5Ong1dCh0aGlzLG51bGwpO3JldHVybn1BM3QodGhpcyxlKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBrdWUodGhpcyl9LE4oQTIsIkVsa1BvcnRJbXBsIiwxODYpO3ZhciBQNGU9YXMocWEsIkJhc2ljRU1hcC9FbnRyeSIpO0QoMTA5MiwxMTUsezEwNToxLDQyOjEsOTI6MSw5MDoxLDEzMzoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDExNDoxLDExNToxfSxZRiksbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuY2Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIER2KHRoaXMpfSxsLlVoPWZ1bmN0aW9uKGUpe1dtdCh0aGlzLHUoZSwxNDYpKX0sbC5fZz1mdW5jdGlvbihlLG4scil7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4gdGhpcy5iO2Nhc2UgMTpyZXR1cm4gdGhpcy5jfXJldHVybiBqeih0aGlzLGUsbixyKX0sbC5saD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiEhdGhpcy5iO2Nhc2UgMTpyZXR1cm4gdGhpcy5jIT1udWxsfXJldHVybiByc3QodGhpcyxlKX0sbC5zaD1mdW5jdGlvbihlLG4pe3N3aXRjaChlKXtjYXNlIDA6V210KHRoaXMsdShuLDE0NikpO3JldHVybjtjYXNlIDE6WG10KHRoaXMsbik7cmV0dXJufXpzdCh0aGlzLGUsbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gbnUoKSxfYn0sbC5CaD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSAwOldtdCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDE6WG10KHRoaXMsbnVsbCk7cmV0dXJufUZzdCh0aGlzLGUpfSxsLlNoPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuYT09LTEmJihlPXRoaXMuYix0aGlzLmE9ZT9KaShlKTowKSx0aGlzLmF9LGwuZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxsLlRoPWZ1bmN0aW9uKGUpe3RoaXMuYT1lfSxsLmVkPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPXRoaXMuYyxYbXQodGhpcyxlKSxufSxsLkliPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuRGImNjQ/bWYodGhpcyk6KGU9bmV3IEFwLFlyKFlyKFlyKGUsdGhpcy5iP3RoaXMuYi50ZygpOk11KSxCb3QpLGRfKHRoaXMuYykpLGUuYSl9LGwuYT0tMSxsLmM9bnVsbDt2YXIgJHc9TihBMiwiRWxrUHJvcGVydHlUb1ZhbHVlTWFwRW50cnlJbXBsIiwxMDkyKTtEKDk4NCwxLHt9LFhGKSxOKENhLCJKc29uQWRhcHRlciIsOTg0KSxEKDIxMCw2MCxVMCxvZCksTihDYSwiSnNvbkltcG9ydEV4Y2VwdGlvbiIsMjEwKSxEKDg1NywxLHt9LEJzZSksTihDYSwiSnNvbkltcG9ydGVyIiw4NTcpLEQoODkxLDEse30sZkd0KSxOKENhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDAkVHlwZSIsODkxKSxEKDg5MiwxLHt9LGRHdCksTihDYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQxJFR5cGUiLDg5MiksRCg5MDAsMSx7fSxXJHQpLE4oQ2EsIkpzb25JbXBvcnRlci9sYW1iZGEkMTAkVHlwZSIsOTAwKSxEKDkwMiwxLHt9LGdHdCksTihDYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQxMSRUeXBlIiw5MDIpLEQoOTAzLDEse30scEd0KSxOKENhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDEyJFR5cGUiLDkwMyksRCg5MDksMSx7fSxTWHQpLE4oQ2EsIkpzb25JbXBvcnRlci9sYW1iZGEkMTMkVHlwZSIsOTA5KSxEKDkwOCwxLHt9LENYdCksTihDYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQxNCRUeXBlIiw5MDgpLEQoOTA0LDEse30sYkd0KSxOKENhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDE1JFR5cGUiLDkwNCksRCg5MDUsMSx7fSx2R3QpLE4oQ2EsIkpzb25JbXBvcnRlci9sYW1iZGEkMTYkVHlwZSIsOTA1KSxEKDkwNiwxLHt9LHdHdCksTihDYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQxNyRUeXBlIiw5MDYpLEQoOTA3LDEse30sbUd0KSxOKENhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDE4JFR5cGUiLDkwNyksRCg5MTIsMSx7fSxLJHQpLE4oQ2EsIkpzb25JbXBvcnRlci9sYW1iZGEkMTkkVHlwZSIsOTEyKSxEKDg5MywxLHt9LFkkdCksTihDYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQyJFR5cGUiLDg5MyksRCg5MTAsMSx7fSxYJHQpLE4oQ2EsIkpzb25JbXBvcnRlci9sYW1iZGEkMjAkVHlwZSIsOTEwKSxEKDkxMSwxLHt9LFEkdCksTihDYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQyMSRUeXBlIiw5MTEpLEQoOTE1LDEse30sWiR0KSxOKENhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDIyJFR5cGUiLDkxNSksRCg5MTMsMSx7fSxKJHQpLE4oQ2EsIkpzb25JbXBvcnRlci9sYW1iZGEkMjMkVHlwZSIsOTEzKSxEKDkxNCwxLHt9LHR6dCksTihDYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQyNCRUeXBlIiw5MTQpLEQoOTE3LDEse30sZXp0KSxOKENhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDI1JFR5cGUiLDkxNyksRCg5MTYsMSx7fSxuenQpLE4oQ2EsIkpzb25JbXBvcnRlci9sYW1iZGEkMjYkVHlwZSIsOTE2KSxEKDkxOCwxLEtuLHlHdCksbC50ZD1mdW5jdGlvbihlKXtzYW4odGhpcy5iLHRoaXMuYSxqcihlKSl9LE4oQ2EsIkpzb25JbXBvcnRlci9sYW1iZGEkMjckVHlwZSIsOTE4KSxEKDkxOSwxLEtuLHhHdCksbC50ZD1mdW5jdGlvbihlKXthYW4odGhpcy5iLHRoaXMuYSxqcihlKSl9LE4oQ2EsIkpzb25JbXBvcnRlci9sYW1iZGEkMjgkVHlwZSIsOTE5KSxEKDkyMCwxLHt9LGtHdCksTihDYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQyOSRUeXBlIiw5MjApLEQoODk2LDEse30scnp0KSxOKENhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDMkVHlwZSIsODk2KSxEKDkyMSwxLHt9LEVHdCksTihDYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQzMCRUeXBlIiw5MjEpLEQoOTIyLDEse30saXp0KSxOKENhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDMxJFR5cGUiLDkyMiksRCg5MjMsMSx7fSxzenQpLE4oQ2EsIkpzb25JbXBvcnRlci9sYW1iZGEkMzIkVHlwZSIsOTIzKSxEKDkyNCwxLHt9LGF6dCksTihDYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQzMyRUeXBlIiw5MjQpLEQoOTI1LDEse30sb3p0KSxOKENhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDM0JFR5cGUiLDkyNSksRCg4NTksMSx7fSxjenQpLE4oQ2EsIkpzb25JbXBvcnRlci9sYW1iZGEkMzUkVHlwZSIsODU5KSxEKDkyOSwxLHt9LHdLdCksTihDYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQzNiRUeXBlIiw5MjkpLEQoOTI2LDEsS24sdXp0KSxsLnRkPWZ1bmN0aW9uKGUpe3Vzbih0aGlzLmEsdShlLDQ2OSkpfSxOKENhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDM3JFR5cGUiLDkyNiksRCg5MjcsMSxLbixMR3QpLGwudGQ9ZnVuY3Rpb24oZSl7QlllKHRoaXMuYSx0aGlzLmIsdShlLDIwMikpfSxOKENhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDM4JFR5cGUiLDkyNyksRCg5MjgsMSxLbixNR3QpLGwudGQ9ZnVuY3Rpb24oZSl7UlllKHRoaXMuYSx0aGlzLmIsdShlLDIwMikpfSxOKENhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDM5JFR5cGUiLDkyOCksRCg4OTQsMSx7fSxsenQpLE4oQ2EsIkpzb25JbXBvcnRlci9sYW1iZGEkNCRUeXBlIiw4OTQpLEQoOTMwLDEsS24saHp0KSxsLnRkPWZ1bmN0aW9uKGUpe2xzbih0aGlzLmEsdShlLDgpKX0sTihDYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQ0MCRUeXBlIiw5MzApLEQoODk1LDEse30sZnp0KSxOKENhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDUkVHlwZSIsODk1KSxEKDg5OSwxLHt9LGR6dCksTihDYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQ2JFR5cGUiLDg5OSksRCg4OTcsMSx7fSxnenQpLE4oQ2EsIkpzb25JbXBvcnRlci9sYW1iZGEkNyRUeXBlIiw4OTcpLEQoODk4LDEse30scHp0KSxOKENhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDgkVHlwZSIsODk4KSxEKDkwMSwxLHt9LGJ6dCksTihDYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQ5JFR5cGUiLDkwMSksRCg5NDgsMSxLbix2enQpLGwudGQ9ZnVuY3Rpb24oZSl7RjYodGhpcy5hLG5ldyBIbShqcihlKSkpfSxOKENhLCJKc29uTWV0YURhdGFDb252ZXJ0ZXIvbGFtYmRhJDAkVHlwZSIsOTQ4KSxEKDk0OSwxLEtuLHd6dCksbC50ZD1mdW5jdGlvbihlKXtDZW4odGhpcy5hLHUoZSwyMzcpKX0sTihDYSwiSnNvbk1ldGFEYXRhQ29udmVydGVyL2xhbWJkYSQxJFR5cGUiLDk0OSksRCg5NTAsMSxLbixtenQpLGwudGQ9ZnVuY3Rpb24oZSl7RXJuKHRoaXMuYSx1KGUsMTQ5KSl9LE4oQ2EsIkpzb25NZXRhRGF0YUNvbnZlcnRlci9sYW1iZGEkMiRUeXBlIiw5NTApLEQoOTUxLDEsS24seXp0KSxsLnRkPWZ1bmN0aW9uKGUpe1Nlbih0aGlzLmEsdShlLDE3NSkpfSxOKENhLCJKc29uTWV0YURhdGFDb252ZXJ0ZXIvbGFtYmRhJDMkVHlwZSIsOTUxKSxEKDIzNywyMix7MzoxLDM1OjEsMjI6MSwyMzc6MX0sQzYpO3ZhciBYRyxRRyxrZnQsWkcsSkcsdFUsRWZ0LFRmdCxlVT16cihCSSwiR3JhcGhGZWF0dXJlIiwyMzcsVXIsWWFuLFFKZSksRjRlO0QoMTMsMSx7MzU6MSwxNDY6MX0sdHMsSHMsdm4sYW8pLGwud2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIEZYZSh0aGlzLHUoZSwxNDYpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gS1h0KHRoaXMsZSl9LGwud2c9ZnVuY3Rpb24oKXtyZXR1cm4gSWUodGhpcyl9LGwudGc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHpnKHRoaXMuYil9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxOKEJJLCJQcm9wZXJ0eSIsMTMpLEQoODE4LDEscWksZHB0KSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHRsbih0aGlzLHUoZSw5NCksdShuLDk0KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBndCh0aGlzKX0sTihCSSwiUHJvcGVydHlIb2xkZXJDb21wYXJhdG9yIiw4MTgpLEQoNjk1LDEsZGEsZ3B0KSxsLk5iPWZ1bmN0aW9uKGUpe0VhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gbGFuKHRoaXMpfSxsLlFiPWZ1bmN0aW9uKCl7ZEh0KCl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuYX0sTih5SCwiRWxrR3JhcGhVdGlsL0FuY2VzdG9ySXRlcmF0b3IiLDY5NSk7dmFyIGpBdD1hcyhxYSwiRUxpc3QiKTtEKDY3LDUyLHsyMDoxLDI4OjEsNTI6MSwxNDoxLDE1OjEsNjc6MSw1ODoxfSksbC5WYz1mdW5jdGlvbihlLG4pe0pfKHRoaXMsZSxuKX0sbC5GYz1mdW5jdGlvbihlKXtyZXR1cm4gT3IodGhpcyxlKX0sbC5XYz1mdW5jdGlvbihlLG4pe3JldHVybiB2eXQodGhpcyxlLG4pfSxsLkdjPWZ1bmN0aW9uKGUpe3JldHVybiBncyh0aGlzLGUpfSxsLlpoPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBMNih0aGlzKX0sbC4kaD1mdW5jdGlvbigpe3JldHVybiBuZXcgUE0odGhpcyl9LGwuX2g9ZnVuY3Rpb24oZSl7cmV0dXJuIENEKHRoaXMsZSl9LGwuYWk9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5iaT1mdW5jdGlvbihlLG4pe30sbC5jaT1mdW5jdGlvbigpe30sbC5kaT1mdW5jdGlvbihlLG4pe2pydCh0aGlzLGUsbil9LGwuZWk9ZnVuY3Rpb24oZSxuLHIpe30sbC5maT1mdW5jdGlvbihlLG4pe30sbC5naT1mdW5jdGlvbihlLG4scil7fSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBjdWUodGhpcyxlKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBmeXQodGhpcyl9LGwuaGk9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgbnIodGhpcyl9LGwuWWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEE2KHRoaXMpfSxsLlpjPWZ1bmN0aW9uKGUpe3ZhciBuO2lmKG49dGhpcy5nYygpLGU8MHx8ZT5uKXRocm93IG50KG5ldyBqbShlLG4pKTtyZXR1cm4gbmV3IFZudCh0aGlzLGUpfSxsLmppPWZ1bmN0aW9uKGUsbil7dGhpcy5paShlLHRoaXMuWGMobikpfSxsLk1jPWZ1bmN0aW9uKGUpe3JldHVybiBqJCh0aGlzLGUpfSxsLmxpPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG59LGwuX2M9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbDQodGhpcyxlLG4pfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIGkzdCh0aGlzKX0sbC5uaT1mdW5jdGlvbigpe3JldHVybiEwfSxsLm9pPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFk4KHRoaXMsbil9LE4ocWEsIkFic3RyYWN0RUxpc3QiLDY3KSxEKDYzLDY3LFNkLEo1LEt2LGl5dCksbC5WaD1mdW5jdGlvbihlLG4pe3JldHVybiBEc3QodGhpcyxlLG4pfSxsLldoPWZ1bmN0aW9uKGUpe3JldHVybiBsc2UodGhpcyxlKX0sbC5YaD1mdW5jdGlvbihlLG4pe3pEKHRoaXMsZSxuKX0sbC5ZaD1mdW5jdGlvbihlKXt1RCh0aGlzLGUpfSxsLnBpPWZ1bmN0aW9uKGUpe3JldHVybiBfbXQodGhpcyxlKX0sbC4kYj1mdW5jdGlvbigpe1JfKHRoaXMpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBsNyh0aGlzLGUpfSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiBBdCh0aGlzLGUpfSxsLnFpPWZ1bmN0aW9uKGUpe3ZhciBuLHIsczsrK3RoaXMuaixyPXRoaXMuZz09bnVsbD8wOnRoaXMuZy5sZW5ndGgsZT5yJiYocz10aGlzLmcsbj1yKyhyLzJ8MCkrNCxuPGUmJihuPWUpLHRoaXMuZz10aGlzLnJpKG4pLHMhPW51bGwmJlBjKHMsMCx0aGlzLmcsMCx0aGlzLmkpKX0sbC5YYz1mdW5jdGlvbihlKXtyZXR1cm4gRHNlKHRoaXMsZSl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pPT0wfSxsLmlpPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFZzdCh0aGlzLGUsbil9LGwucmk9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KFFuLE1lLDEsZSw1LDEpfSxsLmtpPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmdbZV19LGwuJGM9ZnVuY3Rpb24oZSl7cmV0dXJuIG54KHRoaXMsZSl9LGwubWk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gWHJ0KHRoaXMsZSxuKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLml9LGwuUGM9ZnVuY3Rpb24oKXtyZXR1cm4gWHd0KHRoaXMpfSxsLlFjPWZ1bmN0aW9uKGUpe3JldHVybiBiM3QodGhpcyxlKX0sbC5pPTA7dmFyICRBdD1OKHFhLCJCYXNpY0VMaXN0Iiw2MyksekF0PWFzKHFhLCJUcmVlSXRlcmF0b3IiKTtEKDY5NCw2MyxRY3QpLGwuTmI9ZnVuY3Rpb24oZSl7RWEodGhpcyxlKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmc9PW51bGwmJiF0aGlzLmM/T3d0KHRoaXMpOnRoaXMuZz09bnVsbHx8dGhpcy5pIT0wJiZ1KHRoaXMuZ1t0aGlzLmktMV0sNDcpLk9iKCl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gYXEodGhpcyl9LGwuUWI9ZnVuY3Rpb24oKXtpZighdGhpcy5lKXRocm93IG50KG5ldyBIbygiVGhlcmUgaXMgbm8gdmFsaWQgb2JqZWN0IHRvIHJlbW92ZS4iKSk7dGhpcy5lLlFiKCl9LGwuYz0hMSxOKHFhLCJBYnN0cmFjdFRyZWVJdGVyYXRvciIsNjk0KSxEKDY4NSw2OTQsUWN0LHQydCksbC5zaT1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbj11KGUsNTYpLldnKCkuS2MoKSxfdChuLDI3OSkmJnUobiwyNzkpLk5rKG5ldyBLWiksbn0sTih5SCwiRWxrR3JhcGhVdGlsL1Byb3BlcnRpZXNTa2lwcGluZ1RyZWVJdGVyYXRvciIsNjg1KSxEKDk1MiwxLHt9LEtaKSxOKHlILCJFbGtHcmFwaFV0aWwvUHJvcGVydGllc1NraXBwaW5nVHJlZUl0ZXJhdG9yLzEiLDk1Mik7dmFyIGNOLF9mdCx1Tj1OKHlILCJFbGtSZWZsZWN0IixudWxsKTtEKDg4OSwxLFN5LFg5KSxsLnZnPWZ1bmN0aW9uKGUpe3JldHVybiBnJCgpLFBzbih1KGUsMTc0KSl9LE4oeUgsIkVsa1JlZmxlY3QvbGFtYmRhJDAkVHlwZSIsODg5KTt2YXIgQ2I7YXMocWEsIlJlc291cmNlTG9jYXRvciIpLEQoMTA1MSwxLHt9KSxOKHFhLCJEZWxlZ2F0aW5nUmVzb3VyY2VMb2NhdG9yIiwxMDUxKSxEKDEwNTIsMTA1MSx7fSksTigib3JnLmVjbGlwc2UuZW1mLmNvbW1vbiIsIkVNRlBsdWdpbiIsMTA1Mik7dmFyIENmdD1hcyhyMGUsIkFkYXB0ZXIiKSx5Nm49YXMocjBlLCJOb3RpZmljYXRpb24iKTtEKDExNTMsMSxTOHQpLGwudGk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSxsLnVpPWZ1bmN0aW9uKGUpe30sbC52aT1mdW5jdGlvbihlKXt0aGlzLmQ9ZX0sbC53aT1mdW5jdGlvbihlKXt0aGlzLmQ9PWUmJih0aGlzLmQ9bnVsbCl9LGwuZD1udWxsLE4oeHgsIkFkYXB0ZXJJbXBsIiwxMTUzKSxEKDE5OTUsNjcsaTBlKSxsLlZoPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGwzdCh0aGlzLGUsbil9LGwuV2g9ZnVuY3Rpb24oZSl7dmFyIG4scixzO2lmKCsrdGhpcy5qLGUuZGMoKSlyZXR1cm4hMTtmb3Iobj10aGlzLlZpKCkscz1lLktjKCk7cy5PYigpOylyPXMuUGIoKSx0aGlzLklpKHRoaXMub2kobixyKSksKytuO3JldHVybiEwfSxsLlhoPWZ1bmN0aW9uKGUsbil7Q1d0KHRoaXMsZSxuKX0sbC5ZaD1mdW5jdGlvbihlKXt0WHQodGhpcyxlKX0sbC5HaT1mdW5jdGlvbigpe3JldHVybiB0aGlzLkppKCl9LGwuJGI9ZnVuY3Rpb24oKXtqTSh0aGlzLHRoaXMuVmkoKSx0aGlzLldpKCkpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLkxpKGUpfSxsLkljPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLk1pKGUpfSxsLkhpPWZ1bmN0aW9uKGUsbil7dGhpcy5TaSgpLmptKCl9LGwuSWk9ZnVuY3Rpb24oZSl7dGhpcy5TaSgpLmptKCl9LGwuSmk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5TaSgpfSxsLktpPWZ1bmN0aW9uKCl7dGhpcy5TaSgpLmptKCl9LGwuTGk9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuU2koKS5qbSgpfSxsLk1pPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLlNpKCkuam0oKX0sbC5OaT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5TaSgpLmptKCl9LGwuT2k9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuU2koKS5qbSgpfSxsLlBpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuU2koKS5qbSgpfSxsLlFpPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLlNpKCkuam0oKX0sbC5SaT1mdW5jdGlvbigpe3JldHVybiB0aGlzLlNpKCkuam0oKX0sbC5UaT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5TaSgpLmptKCl9LGwuVWk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdGhpcy5TaSgpLmptKCl9LGwuVmk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5TaSgpLmptKCl9LGwuV2k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5TaSgpLmptKCl9LGwuWGk9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuU2koKS5qbSgpfSxsLllpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuU2koKS5qbSgpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLk5pKGUpfSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmxpKGUsdGhpcy5PaShlKSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5QaSgpfSxsLlhjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLlFpKGUpfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuUmkoKX0sbC5paT1mdW5jdGlvbihlLG4pe3JldHVybiBTNHQodGhpcyxlLG4pfSxsLmtpPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLk9pKGUpfSxsLiRjPWZ1bmN0aW9uKGUpe3JldHVybiBJaih0aGlzLGUpfSxsLk1jPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPXRoaXMuWGMoZSksbj49MD8odGhpcy4kYyhuKSwhMCk6ITF9LGwubWk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdGhpcy5VaShlLHRoaXMub2koZSxuKSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5WaSgpfSxsLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuV2koKX0sbC5RYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5YaShlKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLllpKCl9LE4ocWEsIkRlbGVnYXRpbmdFTGlzdCIsMTk5NSksRCgxOTk2LDE5OTUsaTBlKSxsLlZoPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFk1dCh0aGlzLGUsbil9LGwuV2g9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuVmgodGhpcy5WaSgpLGUpfSxsLlhoPWZ1bmN0aW9uKGUsbil7V29lKHRoaXMsZSxuKX0sbC5ZaD1mdW5jdGlvbihlKXtSb2UodGhpcyxlKX0sbC5haT1mdW5jdGlvbigpe3JldHVybiF0aGlzLmJqKCl9LGwuJGI9ZnVuY3Rpb24oKXtfQyh0aGlzKX0sbC5aaT1mdW5jdGlvbihlLG4scixzLG8pe3JldHVybiBuZXcgWFh0KHRoaXMsZSxuLHIscyxvKX0sbC4kaT1mdW5jdGlvbihlKXtDaSh0aGlzLkFpKCksZSl9LGwuX2k9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbC5haj1mdW5jdGlvbigpe3JldHVybi0xfSxsLkFpPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGwuYmo9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5jaj1mdW5jdGlvbihlLG4pe3JldHVybiBufSxsLmRqPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG59LGwuZWo9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5maj1mdW5jdGlvbigpe3JldHVybiF0aGlzLlJpKCl9LGwuaWk9ZnVuY3Rpb24oZSxuKXt2YXIgcixzO3JldHVybiB0aGlzLmVqKCk/KHM9dGhpcy5maigpLHI9UzR0KHRoaXMsZSxuKSx0aGlzLiRpKHRoaXMuWmkoNyxkZShuKSxyLGUscykpLHIpOlM0dCh0aGlzLGUsbil9LGwuJGM9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG87cmV0dXJuIHRoaXMuZWooKT8ocj1udWxsLHM9dGhpcy5maigpLG49dGhpcy5aaSg0LG89SWoodGhpcyxlKSxudWxsLGUscyksdGhpcy5iaigpJiZvPyhyPXRoaXMuZGoobyxyKSxyPyhyLkVpKG4pLHIuRmkoKSk6dGhpcy4kaShuKSk6cj8oci5FaShuKSxyLkZpKCkpOnRoaXMuJGkobiksbyk6KG89SWoodGhpcyxlKSx0aGlzLmJqKCkmJm8mJihyPXRoaXMuZGoobyxudWxsKSxyJiZyLkZpKCkpLG8pfSxsLm1pPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGVsZSh0aGlzLGUsbil9LE4oeHgsIkRlbGVnYXRpbmdOb3RpZnlpbmdMaXN0SW1wbCIsMTk5NiksRCgxNDMsMSxRSSksbC5FaT1mdW5jdGlvbihlKXtyZXR1cm4gZzR0KHRoaXMsZSl9LGwuRmk9ZnVuY3Rpb24oKXtLcnQodGhpcyl9LGwueGk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSxsLl9pPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGwuZ2o9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbC55aT1mdW5jdGlvbihlKXtyZXR1cm4tMX0sbC56aT1mdW5jdGlvbigpe3JldHVybiB6Y2UodGhpcyl9LGwuQWk9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbC5CaT1mdW5jdGlvbigpe3JldHVybiBNNXQodGhpcyl9LGwuQ2k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vPDA/dGhpcy5vPC0yPy0yLXRoaXMuby0xOi0xOnRoaXMub30sbC5oaj1mdW5jdGlvbigpe3JldHVybiExfSxsLkRpPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXyxNLEI7c3dpdGNoKHRoaXMuZCl7Y2FzZSAxOmNhc2UgMjpzd2l0Y2gobz1lLnhpKCksbyl7Y2FzZSAxOmNhc2UgMjppZihoPWUuQWkoKSxHdChoKT09PUd0KHRoaXMuQWkoKSkmJnRoaXMueWkobnVsbCk9PWUueWkobnVsbCkpcmV0dXJuIHRoaXMuZz1lLnppKCksZS54aSgpPT0xJiYodGhpcy5kPTEpLCEwfWNhc2UgNDp7c3dpdGNoKG89ZS54aSgpLG8pe2Nhc2UgNDp7aWYoaD1lLkFpKCksR3QoaCk9PT1HdCh0aGlzLkFpKCkpJiZ0aGlzLnlpKG51bGwpPT1lLnlpKG51bGwpKXJldHVybiBfPWY2dCh0aGlzKSxrPXRoaXMubzwwP3RoaXMubzwtMj8tMi10aGlzLm8tMTotMTp0aGlzLm8sZD1lLkNpKCksdGhpcy5kPTYsQj1uZXcgS3YoMiksazw9ZD8oT3IoQix0aGlzLm4pLE9yKEIsZS5CaSgpKSx0aGlzLmc9dXQob3QoU3IsMSksSnIsMjUsMTUsW3RoaXMubz1rLGQrMV0pKTooT3IoQixlLkJpKCkpLE9yKEIsdGhpcy5uKSx0aGlzLmc9dXQob3QoU3IsMSksSnIsMjUsMTUsW3RoaXMubz1kLGtdKSksdGhpcy5uPUIsX3x8KHRoaXMubz0tMi10aGlzLm8tMSksITA7YnJlYWt9fWJyZWFrfWNhc2UgNjp7c3dpdGNoKG89ZS54aSgpLG8pe2Nhc2UgNDp7aWYoaD1lLkFpKCksR3QoaCk9PT1HdCh0aGlzLkFpKCkpJiZ0aGlzLnlpKG51bGwpPT1lLnlpKG51bGwpKXtmb3IoXz1mNnQodGhpcyksZD1lLkNpKCksTT11KHRoaXMuZyw0OCkscz1OdChTcixKciwyNSxNLmxlbmd0aCsxLDE1LDEpLG49MDtuPE0ubGVuZ3RoJiYodz1NW25dLHc8PWQpOylzW24rK109dywrK2Q7Zm9yKHI9dSh0aGlzLm4sMTUpLHIuVmMobixlLkJpKCkpLHNbbl09ZDsrK248cy5sZW5ndGg7KXNbbl09TVtuLTFdO3JldHVybiB0aGlzLmc9cyxffHwodGhpcy5vPS0yLXNbMF0pLCEwfWJyZWFrfX1icmVha319cmV0dXJuITF9LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscztzd2l0Y2gocz1uZXcgQWgoTXAodGhpcy5nbSkrIkAiKyhuPUppKHRoaXMpPj4+MCxuLnRvU3RyaW5nKDE2KSkpLHMuYSs9IiAoZXZlbnRUeXBlOiAiLHRoaXMuZCl7Y2FzZSAxOntzLmErPSJTRVQiO2JyZWFrfWNhc2UgMjp7cy5hKz0iVU5TRVQiO2JyZWFrfWNhc2UgMzp7cy5hKz0iQUREIjticmVha31jYXNlIDU6e3MuYSs9IkFERF9NQU5ZIjticmVha31jYXNlIDQ6e3MuYSs9IlJFTU9WRSI7YnJlYWt9Y2FzZSA2OntzLmErPSJSRU1PVkVfTUFOWSI7YnJlYWt9Y2FzZSA3OntzLmErPSJNT1ZFIjticmVha31jYXNlIDg6e3MuYSs9IlJFTU9WSU5HX0FEQVBURVIiO2JyZWFrfWNhc2UgOTp7cy5hKz0iUkVTT0xWRSI7YnJlYWt9ZGVmYXVsdDp7ZmV0KHMsdGhpcy5kKTticmVha319aWYoTHVlKHRoaXMpJiYocy5hKz0iLCB0b3VjaDogdHJ1ZSIpLHMuYSs9IiwgcG9zaXRpb246ICIsZmV0KHMsdGhpcy5vPDA/dGhpcy5vPC0yPy0yLXRoaXMuby0xOi0xOnRoaXMubykscy5hKz0iLCBub3RpZmllcjogIixvXyhzLHRoaXMuQWkoKSkscy5hKz0iLCBmZWF0dXJlOiAiLG9fKHMsdGhpcy5faSgpKSxzLmErPSIsIG9sZFZhbHVlOiAiLG9fKHMsTTV0KHRoaXMpKSxzLmErPSIsIG5ld1ZhbHVlOiAiLHRoaXMuZD09NiYmX3QodGhpcy5nLDQ4KSl7Zm9yKHI9dSh0aGlzLmcsNDgpLHMuYSs9IlsiLGU9MDtlPHIubGVuZ3RoOylzLmErPXJbZV0sKytlPHIubGVuZ3RoJiYocy5hKz1YYSk7cy5hKz0iXSJ9ZWxzZSBvXyhzLHpjZSh0aGlzKSk7cmV0dXJuIHMuYSs9IiwgaXNUb3VjaDogIixDZyhzLEx1ZSh0aGlzKSkscy5hKz0iLCB3YXNTZXQ6ICIsQ2cocyxmNnQodGhpcykpLHMuYSs9IikiLHMuYX0sbC5kPTAsbC5lPTAsbC5mPTAsbC5qPTAsbC5rPTAsbC5vPTAsbC5wPTAsTih4eCwiTm90aWZpY2F0aW9uSW1wbCIsMTQzKSxEKDExNjcsMTQzLFFJLFhYdCksbC5faT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuX2koKX0sbC55aT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLmFqKCl9LGwuQWk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLkFpKCl9LE4oeHgsIkRlbGVnYXRpbmdOb3RpZnlpbmdMaXN0SW1wbC8xIiwxMTY3KSxEKDI0Miw2MyxTZCx0NixMcCksbC5GYz1mdW5jdGlvbihlKXtyZXR1cm4gc2llKHRoaXMsdShlLDM2NikpfSxsLkVpPWZ1bmN0aW9uKGUpe3JldHVybiBzaWUodGhpcyxlKX0sbC5GaT1mdW5jdGlvbigpe3ZhciBlLG4scjtmb3IoZT0wO2U8dGhpcy5pOysrZSluPXUodGhpcy5nW2VdLDM2Nikscj1uLkFpKCksciE9bnVsbCYmbi54aSgpIT0tMSYmdShyLDkyKS5OZyhuKX0sbC5yaT1mdW5jdGlvbihlKXtyZXR1cm4gTnQoeTZuLE1lLDM2NixlLDAsMSl9LE4oeHgsIk5vdGlmaWNhdGlvbkNoYWluSW1wbCIsMjQyKSxEKDEzNzgsOTAsYmRlKSxsLktnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZX0sbC5NZz1mdW5jdGlvbigpe3JldHVybih0aGlzLmYmMSkhPTB9LGwuZj0xLE4oeHgsIk5vdGlmaWVySW1wbCIsMTM3OCksRCgxOTkzLDYzLFNkKSxsLlZoPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGRhdCh0aGlzLGUsbil9LGwuV2g9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuVmgodGhpcy5pLGUpfSxsLlhoPWZ1bmN0aW9uKGUsbil7cjV0KHRoaXMsZSxuKX0sbC5ZaD1mdW5jdGlvbihlKXtHc3QodGhpcyxlKX0sbC5haT1mdW5jdGlvbigpe3JldHVybiF0aGlzLmJqKCl9LGwuJGI9ZnVuY3Rpb24oKXtUcih0aGlzKX0sbC5aaT1mdW5jdGlvbihlLG4scixzLG8pe3JldHVybiBuZXcgUVh0KHRoaXMsZSxuLHIscyxvKX0sbC4kaT1mdW5jdGlvbihlKXtDaSh0aGlzLkFpKCksZSl9LGwuX2k9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbC5haj1mdW5jdGlvbigpe3JldHVybi0xfSxsLkFpPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGwuYmo9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5paj1mdW5jdGlvbigpe3JldHVybiExfSxsLmNqPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG59LGwuZGo9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbn0sbC5laj1mdW5jdGlvbigpe3JldHVybiExfSxsLmZqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaSE9MH0sbC5paT1mdW5jdGlvbihlLG4pe3JldHVybiB0Qyh0aGlzLGUsbil9LGwuJGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGR5KHRoaXMsZSl9LGwubWk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gYmxlKHRoaXMsZSxuKX0sbC5qaj1mdW5jdGlvbihlLG4pe3JldHVybiBufSxsLmtqPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG59LGwubGo9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiByfSxOKHh4LCJOb3RpZnlpbmdMaXN0SW1wbCIsMTk5MyksRCgxMTY2LDE0MyxRSSxRWHQpLGwuX2k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLl9pKCl9LGwueWk9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYS5haigpfSxsLkFpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5BaSgpfSxOKHh4LCJOb3RpZnlpbmdMaXN0SW1wbC8xIiwxMTY2KSxEKDk1Myw2MyxTZCxMV3QpLGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaT4xMD8oKCF0aGlzLmJ8fHRoaXMuYy5qIT10aGlzLmEpJiYodGhpcy5iPW5ldyB5Xyh0aGlzKSx0aGlzLmE9dGhpcy5qKSxTMCh0aGlzLmIsZSkpOmw3KHRoaXMsZSl9LGwubmk9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5hPTAsTihxYSwiQWJzdHJhY3RFTGlzdC8xIiw5NTMpLEQoMjk1LDczLG9vdCxqbSksTihxYSwiQWJzdHJhY3RFTGlzdC9CYXNpY0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24iLDI5NSksRCg0MCwxLGRhLG5yKSxsLk5iPWZ1bmN0aW9uKGUpe0VhKHRoaXMsZSl9LGwubWo9ZnVuY3Rpb24oKXtpZih0aGlzLmkuaiE9dGhpcy5mKXRocm93IG50KG5ldyBzaCl9LGwubmo9ZnVuY3Rpb24oKXtyZXR1cm4gZHIodGhpcyl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lIT10aGlzLmkuZ2MoKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5qKCl9LGwuUWI9ZnVuY3Rpb24oKXt1Qyh0aGlzKX0sbC5lPTAsbC5mPTAsbC5nPS0xLE4ocWEsIkFic3RyYWN0RUxpc3QvRUl0ZXJhdG9yIiw0MCksRCgyNzgsNDAsSmQsQTYsVm50KSxsLlFiPWZ1bmN0aW9uKCl7dUModGhpcyl9LGwuUmI9ZnVuY3Rpb24oZSl7ZmllKHRoaXMsZSl9LGwub2o9ZnVuY3Rpb24oKXt2YXIgZTt0cnl7cmV0dXJuIGU9dGhpcy5kLlhiKC0tdGhpcy5lKSx0aGlzLm1qKCksdGhpcy5nPXRoaXMuZSxlfWNhdGNoKG4pe3Rocm93IG49cnMobiksX3Qobiw3Myk/KHRoaXMubWooKSxudChuZXcgdmMpKTpudChuKX19LGwucGo9ZnVuY3Rpb24oZSl7ZHNlKHRoaXMsZSl9LGwuU2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lIT0wfSxsLlRiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZX0sbC5VYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9qKCl9LGwuVmI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lLTF9LGwuV2I9ZnVuY3Rpb24oZSl7dGhpcy5waihlKX0sTihxYSwiQWJzdHJhY3RFTGlzdC9FTGlzdEl0ZXJhdG9yIiwyNzgpLEQoMzQxLDQwLGRhLEw2KSxsLm5qPWZ1bmN0aW9uKCl7cmV0dXJuIGlzdCh0aGlzKX0sbC5RYj1mdW5jdGlvbigpe3Rocm93IG50KG5ldyBQcil9LE4ocWEsIkFic3RyYWN0RUxpc3QvTm9uUmVzb2x2aW5nRUl0ZXJhdG9yIiwzNDEpLEQoMzg1LDI3OCxKZCxQTSxvdnQpLGwuUmI9ZnVuY3Rpb24oZSl7dGhyb3cgbnQobmV3IFByKX0sbC5uaj1mdW5jdGlvbigpe3ZhciBlO3RyeXtyZXR1cm4gZT10aGlzLmMua2kodGhpcy5lKSx0aGlzLm1qKCksdGhpcy5nPXRoaXMuZSsrLGV9Y2F0Y2gobil7dGhyb3cgbj1ycyhuKSxfdChuLDczKT8odGhpcy5taigpLG50KG5ldyB2YykpOm50KG4pfX0sbC5vaj1mdW5jdGlvbigpe3ZhciBlO3RyeXtyZXR1cm4gZT10aGlzLmMua2koLS10aGlzLmUpLHRoaXMubWooKSx0aGlzLmc9dGhpcy5lLGV9Y2F0Y2gobil7dGhyb3cgbj1ycyhuKSxfdChuLDczKT8odGhpcy5taigpLG50KG5ldyB2YykpOm50KG4pfX0sbC5RYj1mdW5jdGlvbigpe3Rocm93IG50KG5ldyBQcil9LGwuV2I9ZnVuY3Rpb24oZSl7dGhyb3cgbnQobmV3IFByKX0sTihxYSwiQWJzdHJhY3RFTGlzdC9Ob25SZXNvbHZpbmdFTGlzdEl0ZXJhdG9yIiwzODUpLEQoMTk4Miw2NyxzMGUpLGwuVmg9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG8saCxkLHcsayxfLE0sQixxO2lmKG89bi5nYygpLG8hPTApe2ZvcihfPXUoTW4odGhpcy5hLDQpLDEyNiksTT1fPT1udWxsPzA6Xy5sZW5ndGgscT1NK28scz1DaXQodGhpcyxxKSxCPU0tZSxCPjAmJlBjKF8sZSxzLGUrbyxCKSxrPW4uS2MoKSxkPTA7ZDxvOysrZCl3PWsuUGIoKSxyPWUrZCxaZXQocyxyLFk4KHRoaXMsdykpO2ZvcihhNyh0aGlzLHMpLGg9MDtoPG87KytoKXc9c1tlXSx0aGlzLmJpKGUsdyksKytlO3JldHVybiEwfWVsc2UgcmV0dXJuKyt0aGlzLmosITF9LGwuV2g9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHcsayxfO2lmKHM9ZS5nYygpLHMhPTApe2ZvcihrPShyPXUoTW4odGhpcy5hLDQpLDEyNikscj09bnVsbD8wOnIubGVuZ3RoKSxfPWsrcyxuPUNpdCh0aGlzLF8pLHc9ZS5LYygpLGg9aztoPF87KytoKWQ9dy5QYigpLFpldChuLGgsWTgodGhpcyxkKSk7Zm9yKGE3KHRoaXMsbiksbz1rO288XzsrK28pZD1uW29dLHRoaXMuYmkobyxkKTtyZXR1cm4hMH1lbHNlIHJldHVybisrdGhpcy5qLCExfSxsLlhoPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLGg7cz11KE1uKHRoaXMuYSw0KSwxMjYpLG89cz09bnVsbD8wOnMubGVuZ3RoLHI9Q2l0KHRoaXMsbysxKSxoPVk4KHRoaXMsbiksZSE9byYmUGMocyxlLHIsZSsxLG8tZSksbHMocixlLGgpLGE3KHRoaXMsciksdGhpcy5iaShlLG4pfSxsLlloPWZ1bmN0aW9uKGUpe3ZhciBuLHIscztzPShyPXUoTW4odGhpcy5hLDQpLDEyNikscj09bnVsbD8wOnIubGVuZ3RoKSxuPUNpdCh0aGlzLHMrMSksWmV0KG4scyxZOCh0aGlzLGUpKSxhNyh0aGlzLG4pLHRoaXMuYmkocyxlKX0sbC5aaD1mdW5jdGlvbigpe3JldHVybiBuZXcgdkp0KHRoaXMpfSxsLiRoPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEWXQodGhpcyl9LGwuX2g9ZnVuY3Rpb24oZSl7dmFyIG4scjtpZihyPShuPXUoTW4odGhpcy5hLDQpLDEyNiksbj09bnVsbD8wOm4ubGVuZ3RoKSxlPDB8fGU+cil0aHJvdyBudChuZXcgam0oZSxyKSk7cmV0dXJuIG5ldyBvWHQodGhpcyxlKX0sbC4kYj1mdW5jdGlvbigpe3ZhciBlLG47Kyt0aGlzLmosZT11KE1uKHRoaXMuYSw0KSwxMjYpLG49ZT09bnVsbD8wOmUubGVuZ3RoLGE3KHRoaXMsbnVsbCksanJ0KHRoaXMsbixlKX0sbC5IYz1mdW5jdGlvbihlKXt2YXIgbixyLHMsbyxoO2lmKG49dShNbih0aGlzLmEsNCksMTI2KSxuIT1udWxsKXtpZihlIT1udWxsKXtmb3Iocz1uLG89MCxoPXMubGVuZ3RoO288aDsrK28paWYocj1zW29dLFNpKGUscikpcmV0dXJuITB9ZWxzZSBmb3Iocz1uLG89MCxoPXMubGVuZ3RoO288aDsrK28paWYocj1zW29dLEd0KHIpPT09R3QoZSkpcmV0dXJuITB9cmV0dXJuITF9LGwuWGI9ZnVuY3Rpb24oZSl7dmFyIG4scjtpZihuPXUoTW4odGhpcy5hLDQpLDEyNikscj1uPT1udWxsPzA6bi5sZW5ndGgsZT49cil0aHJvdyBudChuZXcgam0oZSxyKSk7cmV0dXJuIG5bZV19LGwuWGM9ZnVuY3Rpb24oZSl7dmFyIG4scixzO2lmKG49dShNbih0aGlzLmEsNCksMTI2KSxuIT1udWxsKXtpZihlIT1udWxsKXtmb3Iocj0wLHM9bi5sZW5ndGg7cjxzOysrcilpZihTaShlLG5bcl0pKXJldHVybiByfWVsc2UgZm9yKHI9MCxzPW4ubGVuZ3RoO3I8czsrK3IpaWYoR3QobltyXSk9PT1HdChlKSlyZXR1cm4gcn1yZXR1cm4tMX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB1KE1uKHRoaXMuYSw0KSwxMjYpPT1udWxsfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBiSnQodGhpcyl9LGwuWWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE1ZdCh0aGlzKX0sbC5aYz1mdW5jdGlvbihlKXt2YXIgbixyO2lmKHI9KG49dShNbih0aGlzLmEsNCksMTI2KSxuPT1udWxsPzA6bi5sZW5ndGgpLGU8MHx8ZT5yKXRocm93IG50KG5ldyBqbShlLHIpKTtyZXR1cm4gbmV3IGFYdCh0aGlzLGUpfSxsLmlpPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvO2lmKHI9eWllKHRoaXMpLG89cj09bnVsbD8wOnIubGVuZ3RoLGU+PW8pdGhyb3cgbnQobmV3IENvKFljdCtlK0wyK28pKTtpZihuPj1vKXRocm93IG50KG5ldyBDbyhYY3QrbitMMitvKSk7cmV0dXJuIHM9cltuXSxlIT1uJiYoZTxuP1BjKHIsZSxyLGUrMSxuLWUpOlBjKHIsbisxLHIsbixlLW4pLGxzKHIsZSxzKSxhNyh0aGlzLHIpKSxzfSxsLmtpPWZ1bmN0aW9uKGUpe3JldHVybiB1KE1uKHRoaXMuYSw0KSwxMjYpW2VdfSxsLiRjPWZ1bmN0aW9uKGUpe3JldHVybiBfcG4odGhpcyxlKX0sbC5taT1mdW5jdGlvbihlLG4pe3ZhciByLHM7cmV0dXJuIHI9eWllKHRoaXMpLHM9cltlXSxaZXQocixlLFk4KHRoaXMsbikpLGE3KHRoaXMsciksc30sbC5nYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXUoTW4odGhpcy5hLDQpLDEyNiksZT09bnVsbD8wOmUubGVuZ3RofSxsLlBjPWZ1bmN0aW9uKCl7dmFyIGUsbixyO3JldHVybiBlPXUoTW4odGhpcy5hLDQpLDEyNikscj1lPT1udWxsPzA6ZS5sZW5ndGgsbj1OdChDZnQsZXV0LDQxNSxyLDAsMSkscj4wJiZQYyhlLDAsbiwwLHIpLG59LGwuUWM9ZnVuY3Rpb24oZSl7dmFyIG4scixzO3JldHVybiBuPXUoTW4odGhpcy5hLDQpLDEyNikscz1uPT1udWxsPzA6bi5sZW5ndGgscz4wJiYoZS5sZW5ndGg8cyYmKHI9X0QoZGwoZSkuYyxzKSxlPXIpLFBjKG4sMCxlLDAscykpLGUubGVuZ3RoPnMmJmxzKGUscyxudWxsKSxlfTt2YXIgQjRlO04ocWEsIkFycmF5RGVsZWdhdGluZ0VMaXN0IiwxOTgyKSxEKDEwMzgsNDAsZGEsYkp0KSxsLm1qPWZ1bmN0aW9uKCl7aWYodGhpcy5iLmohPXRoaXMuZnx8R3QodShNbih0aGlzLmIuYSw0KSwxMjYpKSE9PUd0KHRoaXMuYSkpdGhyb3cgbnQobmV3IHNoKX0sbC5RYj1mdW5jdGlvbigpe3VDKHRoaXMpLHRoaXMuYT11KE1uKHRoaXMuYi5hLDQpLDEyNil9LE4ocWEsIkFycmF5RGVsZWdhdGluZ0VMaXN0L0VJdGVyYXRvciIsMTAzOCksRCg3MDYsMjc4LEpkLE1ZdCxhWHQpLGwubWo9ZnVuY3Rpb24oKXtpZih0aGlzLmIuaiE9dGhpcy5mfHxHdCh1KE1uKHRoaXMuYi5hLDQpLDEyNikpIT09R3QodGhpcy5hKSl0aHJvdyBudChuZXcgc2gpfSxsLnBqPWZ1bmN0aW9uKGUpe2RzZSh0aGlzLGUpLHRoaXMuYT11KE1uKHRoaXMuYi5hLDQpLDEyNil9LGwuUWI9ZnVuY3Rpb24oKXt1Qyh0aGlzKSx0aGlzLmE9dShNbih0aGlzLmIuYSw0KSwxMjYpfSxOKHFhLCJBcnJheURlbGVnYXRpbmdFTGlzdC9FTGlzdEl0ZXJhdG9yIiw3MDYpLEQoMTAzOSwzNDEsZGEsdkp0KSxsLm1qPWZ1bmN0aW9uKCl7aWYodGhpcy5iLmohPXRoaXMuZnx8R3QodShNbih0aGlzLmIuYSw0KSwxMjYpKSE9PUd0KHRoaXMuYSkpdGhyb3cgbnQobmV3IHNoKX0sTihxYSwiQXJyYXlEZWxlZ2F0aW5nRUxpc3QvTm9uUmVzb2x2aW5nRUl0ZXJhdG9yIiwxMDM5KSxEKDcwNywzODUsSmQsRFl0LG9YdCksbC5taj1mdW5jdGlvbigpe2lmKHRoaXMuYi5qIT10aGlzLmZ8fEd0KHUoTW4odGhpcy5iLmEsNCksMTI2KSkhPT1HdCh0aGlzLmEpKXRocm93IG50KG5ldyBzaCl9LE4ocWEsIkFycmF5RGVsZWdhdGluZ0VMaXN0L05vblJlc29sdmluZ0VMaXN0SXRlcmF0b3IiLDcwNyksRCg2MDYsMjk1LG9vdCxXZXQpLE4ocWEsIkJhc2ljRUxpc3QvQmFzaWNJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIiw2MDYpLEQoNjk2LDYzLFNkLFVidCksbC5WYz1mdW5jdGlvbihlLG4pe3Rocm93IG50KG5ldyBQcil9LGwuRmM9ZnVuY3Rpb24oZSl7dGhyb3cgbnQobmV3IFByKX0sbC5XYz1mdW5jdGlvbihlLG4pe3Rocm93IG50KG5ldyBQcil9LGwuR2M9ZnVuY3Rpb24oZSl7dGhyb3cgbnQobmV3IFByKX0sbC4kYj1mdW5jdGlvbigpe3Rocm93IG50KG5ldyBQcil9LGwucWk9ZnVuY3Rpb24oZSl7dGhyb3cgbnQobmV3IFByKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlpoKCl9LGwuWWM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kaCgpfSxsLlpjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9oKGUpfSxsLmlpPWZ1bmN0aW9uKGUsbil7dGhyb3cgbnQobmV3IFByKX0sbC5qaT1mdW5jdGlvbihlLG4pe3Rocm93IG50KG5ldyBQcil9LGwuJGM9ZnVuY3Rpb24oZSl7dGhyb3cgbnQobmV3IFByKX0sbC5NYz1mdW5jdGlvbihlKXt0aHJvdyBudChuZXcgUHIpfSxsLl9jPWZ1bmN0aW9uKGUsbil7dGhyb3cgbnQobmV3IFByKX0sTihxYSwiQmFzaWNFTGlzdC9Vbm1vZGlmaWFibGVFTGlzdCIsNjk2KSxEKDcwNSwxLHszOjEsMjA6MSwxNDoxLDE1OjEsNTg6MSw1ODk6MX0pLGwuVmM9ZnVuY3Rpb24oZSxuKXtDWGUodGhpcyxlLHUobiw0MikpfSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiBmUWUodGhpcyx1KGUsNDIpKX0sbC5KYz1mdW5jdGlvbihlKXtfYSh0aGlzLGUpfSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiB1KEF0KHRoaXMuYyxlKSwxMzMpfSxsLmlpPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHUodGhpcy5jLmlpKGUsbiksNDIpfSxsLmppPWZ1bmN0aW9uKGUsbil7U1hlKHRoaXMsZSx1KG4sNDIpKX0sbC5MYz1mdW5jdGlvbigpe3JldHVybiBuZXcga24obnVsbCxuZXcgVG4odGhpcywxNikpfSxsLiRjPWZ1bmN0aW9uKGUpe3JldHVybiB1KHRoaXMuYy4kYyhlKSw0Mil9LGwuX2M9ZnVuY3Rpb24oZSxuKXtyZXR1cm4geWVuKHRoaXMsZSx1KG4sNDIpKX0sbC5hZD1mdW5jdGlvbihlKXtuNCh0aGlzLGUpfSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBUbih0aGlzLDE2KX0sbC5PYz1mdW5jdGlvbigpe3JldHVybiBuZXcga24obnVsbCxuZXcgVG4odGhpcywxNikpfSxsLldjPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHRoaXMuYy5XYyhlLG4pfSxsLkdjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmMuR2MoZSl9LGwuJGI9ZnVuY3Rpb24oKXt0aGlzLmMuJGIoKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jLkhjKGUpfSxsLkljPWZ1bmN0aW9uKGUpe3JldHVybiBERCh0aGlzLmMsZSl9LGwucWo9ZnVuY3Rpb24oKXt2YXIgZSxuLHI7aWYodGhpcy5kPT1udWxsKXtmb3IodGhpcy5kPU50KCRBdCxBOHQsNjMsMip0aGlzLmYrMSwwLDEpLHI9dGhpcy5lLHRoaXMuZj0wLG49dGhpcy5jLktjKCk7bi5lIT1uLmkuZ2MoKTspZT11KG4ubmooKSwxMzMpLHF6KHRoaXMsZSk7dGhpcy5lPXJ9fSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBuS3QodGhpcyxlKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBmeXQodGhpcy5jKX0sbC5YYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jLlhjKGUpfSxsLnJqPWZ1bmN0aW9uKCl7dGhpcy5jPW5ldyBrenQodGhpcyl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mPT0wfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYy5LYygpfSxsLlljPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYy5ZYygpfSxsLlpjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmMuWmMoZSl9LGwuc2o9ZnVuY3Rpb24oKXtyZXR1cm4gZkQodGhpcyl9LGwudGo9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBuZXcgbUt0KGUsbixyKX0sbC51aj1mdW5jdGlvbigpe3JldHVybiBuZXcgeXB9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIFBlZSh0aGlzLGUpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZn0sbC5iZD1mdW5jdGlvbihlLG4pe3JldHVybiBuZXcgS2QodGhpcy5jLGUsbil9LGwuUGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLlBjKCl9LGwuUWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYy5RYyhlKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBpM3QodGhpcy5jKX0sbC5lPTAsbC5mPTAsTihxYSwiQmFzaWNFTWFwIiw3MDUpLEQoMTAzMyw2MyxTZCxrenQpLGwuYmk9ZnVuY3Rpb24oZSxuKXt1S2UodGhpcyx1KG4sMTMzKSl9LGwuZWk9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzOysrKHM9dGhpcyx1KG4sMTMzKSxzKS5hLmV9LGwuZmk9ZnVuY3Rpb24oZSxuKXtsS2UodGhpcyx1KG4sMTMzKSl9LGwuZ2k9ZnVuY3Rpb24oZSxuLHIpe0pYZSh0aGlzLHUobiwxMzMpLHUociwxMzMpKX0sbC5kaT1mdW5jdGlvbihlLG4pe19uZSh0aGlzLmEpfSxOKHFhLCJCYXNpY0VNYXAvMSIsMTAzMyksRCgxMDM0LDYzLFNkLHlwKSxsLnJpPWZ1bmN0aW9uKGUpe3JldHVybiBOdCh4Nm4sYTBlLDYxMixlLDAsMSl9LE4ocWEsIkJhc2ljRU1hcC8yIiwxMDM0KSxEKDEwMzUsQjEsVXUsRXp0KSxsLiRiPWZ1bmN0aW9uKCl7dGhpcy5hLmMuJGIoKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gWWl0KHRoaXMuYSxlKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZj09MD8obDgoKSxsTi5hKTpuZXcgaUh0KHRoaXMuYSl9LGwuTWM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49dGhpcy5hLmYsRHoodGhpcy5hLGUpLHRoaXMuYS5mIT1ufSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5mfSxOKHFhLCJCYXNpY0VNYXAvMyIsMTAzNSksRCgxMDM2LDI4LHd5LFR6dCksbC4kYj1mdW5jdGlvbigpe3RoaXMuYS5jLiRiKCl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHV1ZSh0aGlzLmEsZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmY9PTA/KGw4KCksbE4uYSk6bmV3IHNIdCh0aGlzLmEpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5mfSxOKHFhLCJCYXNpY0VNYXAvNCIsMTAzNiksRCgxMDM3LEIxLFV1LF96dCksbC4kYj1mdW5jdGlvbigpe3RoaXMuYS5jLiRiKCl9LGwuSGM9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHcsayxfO2lmKHRoaXMuYS5mPjAmJl90KGUsNDIpJiYodGhpcy5hLnFqKCksaz11KGUsNDIpLHc9ay5jZCgpLG89dz09bnVsbD8wOkppKHcpLGg9VzJ0KHRoaXMuYSxvKSxuPXRoaXMuYS5kW2hdLG4pKXtmb3Iocj11KG4uZywzNjcpLF89bi5pLGQ9MDtkPF87KytkKWlmKHM9cltkXSxzLlNoKCk9PW8mJnMuRmIoaykpcmV0dXJuITB9cmV0dXJuITF9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmY9PTA/KGw4KCksbE4uYSk6bmV3IGFydCh0aGlzLmEpfSxsLk1jPWZ1bmN0aW9uKGUpe3JldHVybiBlY2UodGhpcyxlKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZn0sTihxYSwiQmFzaWNFTWFwLzUiLDEwMzcpLEQoNjEzLDEsZGEsYXJ0KSxsLk5iPWZ1bmN0aW9uKGUpe0VhKHRoaXMsZSl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iIT0tMX0sbC5QYj1mdW5jdGlvbigpe3ZhciBlO2lmKHRoaXMuZi5lIT10aGlzLmMpdGhyb3cgbnQobmV3IHNoKTtpZih0aGlzLmI9PS0xKXRocm93IG50KG5ldyB2Yyk7cmV0dXJuIHRoaXMuZD10aGlzLmEsdGhpcy5lPXRoaXMuYixIc2UodGhpcyksZT11KHRoaXMuZi5kW3RoaXMuZF0uZ1t0aGlzLmVdLDEzMyksdGhpcy52aihlKX0sbC5RYj1mdW5jdGlvbigpe2lmKHRoaXMuZi5lIT10aGlzLmMpdGhyb3cgbnQobmV3IHNoKTtpZih0aGlzLmU9PS0xKXRocm93IG50KG5ldyBSdSk7dGhpcy5mLmMuTWMoQXQodGhpcy5mLmRbdGhpcy5kXSx0aGlzLmUpKSx0aGlzLmM9dGhpcy5mLmUsdGhpcy5lPS0xLHRoaXMuYT09dGhpcy5kJiZ0aGlzLmIhPS0xJiYtLXRoaXMuYn0sbC52aj1mdW5jdGlvbihlKXtyZXR1cm4gZX0sbC5hPTAsbC5iPS0xLGwuYz0wLGwuZD0wLGwuZT0wLE4ocWEsIkJhc2ljRU1hcC9CYXNpY0VNYXBJdGVyYXRvciIsNjEzKSxEKDEwMzEsNjEzLGRhLGlIdCksbC52aj1mdW5jdGlvbihlKXtyZXR1cm4gZS5jZCgpfSxOKHFhLCJCYXNpY0VNYXAvQmFzaWNFTWFwS2V5SXRlcmF0b3IiLDEwMzEpLEQoMTAzMiw2MTMsZGEsc0h0KSxsLnZqPWZ1bmN0aW9uKGUpe3JldHVybiBlLmRkKCl9LE4ocWEsIkJhc2ljRU1hcC9CYXNpY0VNYXBWYWx1ZUl0ZXJhdG9yIiwxMDMyKSxEKDEwMzAsMSxidyxDenQpLGwud2M9ZnVuY3Rpb24oZSl7VV8odGhpcyxlKX0sbC55Yz1mdW5jdGlvbihlLG4scil7cmV0dXJuIHFpdCh0aGlzLGUsbixyKX0sbC4kYj1mdW5jdGlvbigpe3RoaXMuYS5jLiRiKCl9LGwuX2I9ZnVuY3Rpb24oZSl7cmV0dXJuIFJHdCh0aGlzLGUpfSxsLnVjPWZ1bmN0aW9uKGUpe3JldHVybiB1dWUodGhpcy5hLGUpfSxsLnZjPWZ1bmN0aW9uKCl7cmV0dXJuIHFzbih0aGlzLmEpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBuS3QodGhpcy5hLGUpfSxsLnhjPWZ1bmN0aW9uKGUpe3JldHVybiBKZih0aGlzLmEsZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gZnl0KHRoaXMuYS5jKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZj09MH0sbC5lYz1mdW5jdGlvbigpe3JldHVybiBIc24odGhpcy5hKX0sbC56Yz1mdW5jdGlvbihlLG4pe3JldHVybiBZeih0aGlzLmEsZSxuKX0sbC5CYz1mdW5jdGlvbihlKXtyZXR1cm4gRHoodGhpcy5hLGUpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5mfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIGkzdCh0aGlzLmEuYyl9LGwuQ2M9ZnVuY3Rpb24oKXtyZXR1cm4genNuKHRoaXMuYSl9LE4ocWEsIkJhc2ljRU1hcC9EZWxlZ2F0aW5nTWFwIiwxMDMwKSxEKDYxMiwxLHs0MjoxLDEzMzoxLDYxMjoxfSxtS3QpLGwuRmI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIF90KGUsNDIpPyhuPXUoZSw0MiksKHRoaXMuYiE9bnVsbD9TaSh0aGlzLmIsbi5jZCgpKTpHdCh0aGlzLmIpPT09R3Qobi5jZCgpKSkmJih0aGlzLmMhPW51bGw/U2kodGhpcy5jLG4uZGQoKSk6R3QodGhpcy5jKT09PUd0KG4uZGQoKSkpKTohMX0sbC5TaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuY2Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxsLmRkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY30sbC5IYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmFeKHRoaXMuYz09bnVsbD8wOkppKHRoaXMuYykpfSxsLlRoPWZ1bmN0aW9uKGUpe3RoaXMuYT1lfSxsLlVoPWZ1bmN0aW9uKGUpe3Rocm93IG50KG5ldyBXYil9LGwuZWQ9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49dGhpcy5jLHRoaXMuYz1lLG59LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iKyItPiIrdGhpcy5jfSxsLmE9MDt2YXIgeDZuPU4ocWEsIkJhc2ljRU1hcC9FbnRyeUltcGwiLDYxMik7RCg1MzYsMSx7fSxrayksTihxYSwiQmFzaWNFTWFwL1ZpZXciLDUzNik7dmFyIGxOO0QoNzY4LDEse30pLGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIGY1dCgocG4oKSx1byksZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gVHl0KChwbigpLHVvKSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gSnAoKHBuKCksdW8pKX0sTihxYSwiRUNvbGxlY3Rpb25zL0Jhc2ljRW1wdHlVbm1vZGlmaWFibGVFTGlzdCIsNzY4KSxEKDEzMTIsMSxKZCxRRiksbC5OYj1mdW5jdGlvbihlKXtFYSh0aGlzLGUpfSxsLlJiPWZ1bmN0aW9uKGUpe3Rocm93IG50KG5ldyBQcil9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5TYj1mdW5jdGlvbigpe3JldHVybiExfSxsLlBiPWZ1bmN0aW9uKCl7dGhyb3cgbnQobmV3IHZjKX0sbC5UYj1mdW5jdGlvbigpe3JldHVybiAwfSxsLlViPWZ1bmN0aW9uKCl7dGhyb3cgbnQobmV3IHZjKX0sbC5WYj1mdW5jdGlvbigpe3JldHVybi0xfSxsLlFiPWZ1bmN0aW9uKCl7dGhyb3cgbnQobmV3IFByKX0sbC5XYj1mdW5jdGlvbihlKXt0aHJvdyBudChuZXcgUHIpfSxOKHFhLCJFQ29sbGVjdGlvbnMvQmFzaWNFbXB0eVVubW9kaWZpYWJsZUVMaXN0LzEiLDEzMTIpLEQoMTMxMCw3NjgsezIwOjEsMTQ6MSwxNToxLDU4OjF9LHBxdCksbC5WYz1mdW5jdGlvbihlLG4pe0NIdCgpfSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiBTSHQoKX0sbC5XYz1mdW5jdGlvbihlLG4pe3JldHVybiBBSHQoKX0sbC5HYz1mdW5jdGlvbihlKXtyZXR1cm4gTEh0KCl9LGwuJGI9ZnVuY3Rpb24oKXtNSHQoKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4hMX0sbC5JYz1mdW5jdGlvbihlKXtyZXR1cm4hMX0sbC5KYz1mdW5jdGlvbihlKXtfYSh0aGlzLGUpfSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiBZYnQoKHBuKCksZSkpLG51bGx9LGwuWGM9ZnVuY3Rpb24oZSl7cmV0dXJuLTF9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5LYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuWWM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLlpjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmF9LGwuaWk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gREh0KCl9LGwuamk9ZnVuY3Rpb24oZSxuKXtJSHQoKX0sbC5MYz1mdW5jdGlvbigpe3JldHVybiBuZXcga24obnVsbCxuZXcgVG4odGhpcywxNikpfSxsLiRjPWZ1bmN0aW9uKGUpe3JldHVybiBPSHQoKX0sbC5NYz1mdW5jdGlvbihlKXtyZXR1cm4gTkh0KCl9LGwuX2M9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gUEh0KCl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sbC5hZD1mdW5jdGlvbihlKXtuNCh0aGlzLGUpfSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBUbih0aGlzLDE2KX0sbC5PYz1mdW5jdGlvbigpe3JldHVybiBuZXcga24obnVsbCxuZXcgVG4odGhpcywxNikpfSxsLmJkPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHBuKCksbmV3IEtkKHVvLGUsbil9LGwuUGM9ZnVuY3Rpb24oKXtyZXR1cm4gWXZ0KChwbigpLHVvKSl9LGwuUWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHBuKCksWEQodW8sZSl9LE4ocWEsIkVDb2xsZWN0aW9ucy9FbXB0eVVubW9kaWZpYWJsZUVMaXN0IiwxMzEwKSxEKDEzMTEsNzY4LHsyMDoxLDE0OjEsMTU6MSw1ODoxLDU4OToxfSxicXQpLGwuVmM9ZnVuY3Rpb24oZSxuKXtDSHQoKX0sbC5GYz1mdW5jdGlvbihlKXtyZXR1cm4gU0h0KCl9LGwuV2M9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gQUh0KCl9LGwuR2M9ZnVuY3Rpb24oZSl7cmV0dXJuIExIdCgpfSxsLiRiPWZ1bmN0aW9uKCl7TUh0KCl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuITF9LGwuSWM9ZnVuY3Rpb24oZSl7cmV0dXJuITF9LGwuSmM9ZnVuY3Rpb24oZSl7X2EodGhpcyxlKX0sbC5YYj1mdW5jdGlvbihlKXtyZXR1cm4gWWJ0KChwbigpLGUpKSxudWxsfSxsLlhjPWZ1bmN0aW9uKGUpe3JldHVybi0xfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLlljPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5aYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hfSxsLmlpPWZ1bmN0aW9uKGUsbil7cmV0dXJuIERIdCgpfSxsLmppPWZ1bmN0aW9uKGUsbil7SUh0KCl9LGwuTGM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGtuKG51bGwsbmV3IFRuKHRoaXMsMTYpKX0sbC4kYz1mdW5jdGlvbihlKXtyZXR1cm4gT0h0KCl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIE5IdCgpfSxsLl9jPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFBIdCgpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LGwuYWQ9ZnVuY3Rpb24oZSl7bjQodGhpcyxlKX0sbC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcgVG4odGhpcywxNil9LGwuT2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGtuKG51bGwsbmV3IFRuKHRoaXMsMTYpKX0sbC5iZD1mdW5jdGlvbihlLG4pe3JldHVybiBwbigpLG5ldyBLZCh1byxlLG4pfSxsLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIFl2dCgocG4oKSx1bykpfSxsLlFjPWZ1bmN0aW9uKGUpe3JldHVybiBwbigpLFhEKHVvLGUpfSxsLnNqPWZ1bmN0aW9uKCl7cmV0dXJuIHBuKCkscG4oKSxhMH0sTihxYSwiRUNvbGxlY3Rpb25zL0VtcHR5VW5tb2RpZmlhYmxlRU1hcCIsMTMxMSk7dmFyIHFBdD1hcyhxYSwiRW51bWVyYXRvciIpLG5VO0QoMjgxLDEsezI4MToxfSxyYXQpLGwuRmI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIHRoaXM9PT1lPyEwOl90KGUsMjgxKT8obj11KGUsMjgxKSx0aGlzLmY9PW4uZiYmenRuKHRoaXMuaSxuLmkpJiZNbnQodGhpcy5hLHRoaXMuZiYyNTY/bi5mJjI1Nj9uLmE6bnVsbDpuLmYmMjU2P251bGw6bi5hKSYmTW50KHRoaXMuZCxuLmQpJiZNbnQodGhpcy5nLG4uZykmJk1udCh0aGlzLmUsbi5lKSYmUGhuKHRoaXMsbikpOiExfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZn0sbC5JYj1mdW5jdGlvbigpe3JldHVybiAkdWUodGhpcyl9LGwuZj0wO3ZhciBSNGU9MCxqNGU9MCwkNGU9MCx6NGU9MCxIQXQ9MCxWQXQ9MCxHQXQ9MCxVQXQ9MCxXQXQ9MCxxNGUsaUE9MCxzQT0wLEg0ZT0wLFY0ZT0wLHJVLEtBdDtOKHFhLCJVUkkiLDI4MSksRCgxMDkxLDQzLFM0LHZxdCksbC56Yz1mdW5jdGlvbihlLG4pe3JldHVybiB1KEFvKHRoaXMsanIoZSksdShuLDI4MSkpLDI4MSl9LE4ocWEsIlVSSS9VUklDYWNoZSIsMTA5MSksRCg0OTcsNjMsU2QsRWssTmopLGwuaGk9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sTihxYSwiVW5pcXVlRUxpc3QiLDQ5NyksRCg1ODEsNjAsVTAsRiQpLE4ocWEsIldyYXBwZWRFeGNlcHRpb24iLDU4MSk7dmFyIGVpPWFzKHZoLHUwZSksUXk9YXModmgsbDBlKSxOdT1hcyh2aCxoMGUpLFp5PWFzKHZoLGYwZSksYzE9YXModmgsZDBlKSxLaD1hcyh2aCwiRUNsYXNzIiksU2Z0PWFzKHZoLCJFRGF0YVR5cGUiKSxHNGU7RCgxMTgzLDQzLFM0LHdxdCksbC54Yz1mdW5jdGlvbihlKXtyZXR1cm4gaGEoZSk/amModGhpcyxlKTpjYyhGbyh0aGlzLmYsZSkpfSxOKHZoLCJFRGF0YVR5cGUvSW50ZXJuYWwvQ29udmVyc2lvbkRlbGVnYXRlL0ZhY3RvcnkvUmVnaXN0cnkvSW1wbCIsMTE4Myk7dmFyIGlVPWFzKHZoLCJFRW51bSIpLGVnPWFzKHZoLGcwZSksd289YXModmgscDBlKSxZaD1hcyh2aCxiMGUpLFhoLHp3PWFzKHZoLHYwZSksSnk9YXModmgsdzBlKTtEKDEwMjksMSx7fSxXWiksbC5JYj1mdW5jdGlvbigpe3JldHVybiJOSUwifSxOKHZoLCJFU3RydWN0dXJhbEZlYXR1cmUvSW50ZXJuYWwvRHluYW1pY1ZhbHVlSG9sZGVyLzEiLDEwMjkpO3ZhciBVNGU7RCgxMDI4LDQzLFM0LG1xdCksbC54Yz1mdW5jdGlvbihlKXtyZXR1cm4gaGEoZSk/amModGhpcyxlKTpjYyhGbyh0aGlzLmYsZSkpfSxOKHZoLCJFU3RydWN0dXJhbEZlYXR1cmUvSW50ZXJuYWwvU2V0dGluZ0RlbGVnYXRlL0ZhY3RvcnkvUmVnaXN0cnkvSW1wbCIsMTAyOCk7dmFyIHB1PWFzKHZoLG0wZSksVng9YXModmgsIkVWYWxpZGF0b3IvUGF0dGVybk1hdGNoZXIiKSxZQXQsWEF0LEFuLHJwLHQzLFNiLFc0ZSxLNGUsWTRlLEFiLGlwLExiLHF3LEsxLFg0ZSxRNGUsUWgsc3AsWjRlLGFwLGUzLHU1LEphLEo0ZSx0NWUsSHcsc1U9YXMoWWksIkZlYXR1cmVNYXAvRW50cnkiKTtEKDUzNSwxLHs3MjoxfSxKUiksbC5haz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxOKExuLCJCYXNpY0VPYmplY3RJbXBsLzEiLDUzNSksRCgxMDI3LDEsbnV0LERHdCksbC5Xaj1mdW5jdGlvbihlKXtyZXR1cm4gQnJ0KHRoaXMuYSx0aGlzLmIsZSl9LGwuZmo9ZnVuY3Rpb24oKXtyZXR1cm4gaFF0KHRoaXMuYSx0aGlzLmIpfSxsLldiPWZ1bmN0aW9uKGUpe0R3dCh0aGlzLmEsdGhpcy5iLGUpfSxsLlhqPWZ1bmN0aW9uKCl7QmVuKHRoaXMuYSx0aGlzLmIpfSxOKExuLCJCYXNpY0VPYmplY3RJbXBsLzQiLDEwMjcpLEQoMTk4MywxLHsxMDg6MX0pLGwuYms9ZnVuY3Rpb24oZSl7dGhpcy5lPWU9PTA/ZTVlOk50KFFuLE1lLDEsZSw1LDEpfSxsLkNoPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVbZV19LGwuRGg9ZnVuY3Rpb24oZSxuKXt0aGlzLmVbZV09bn0sbC5FaD1mdW5jdGlvbihlKXt0aGlzLmVbZV09bnVsbH0sbC5jaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGwuZGs9ZnVuY3Rpb24oKXt0aHJvdyBudChuZXcgUHIpfSxsLmVrPWZ1bmN0aW9uKCl7dGhyb3cgbnQobmV3IFByKX0sbC5maz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGwuZ2s9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lIT1udWxsfSxsLmhrPWZ1bmN0aW9uKGUpe3RoaXMuYz1lfSxsLmlrPWZ1bmN0aW9uKGUpe3Rocm93IG50KG5ldyBQcil9LGwuams9ZnVuY3Rpb24oZSl7dGhyb3cgbnQobmV3IFByKX0sbC5raz1mdW5jdGlvbihlKXt0aGlzLmQ9ZX07dmFyIGU1ZTtOKExuLCJCYXNpY0VPYmplY3RJbXBsL0VQcm9wZXJ0aWVzSG9sZGVyQmFzZUltcGwiLDE5ODMpLEQoMTg1LDE5ODMsezEwODoxfSxpaCksbC5kaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuZWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxsLmlrPWZ1bmN0aW9uKGUpe3RoaXMuYT1lfSxsLmprPWZ1bmN0aW9uKGUpe3RoaXMuYj1lfSxOKExuLCJCYXNpY0VPYmplY3RJbXBsL0VQcm9wZXJ0aWVzSG9sZGVySW1wbCIsMTg1KSxEKDUwNiw5Nyx5ZGUsVGspLGwuS2c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mfSxsLlBnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMua30sbC5SZz1mdW5jdGlvbihlLG4pe3RoaXMuZz1lLHRoaXMuaT1ufSxsLlRnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaiYyP3RoaXMucGgoKS5jaygpOnRoaXMuemgoKX0sbC5WZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLml9LGwuTWc9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5qJjEpIT0wfSxsLmVoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ30sbC5raD1mdW5jdGlvbigpe3JldHVybih0aGlzLmomNCkhPTB9LGwucGg9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5rJiYodGhpcy5rPW5ldyBpaCksdGhpcy5rfSxsLnRoPWZ1bmN0aW9uKGUpe3RoaXMucGgoKS5oayhlKSxlP3RoaXMuanw9Mjp0aGlzLmomPS0zfSxsLnZoPWZ1bmN0aW9uKGUpe3RoaXMucGgoKS5qayhlKSxlP3RoaXMuanw9NDp0aGlzLmomPS01fSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuKHpwKCksQW4pLlN9LGwuaT0wLGwuaj0xLE4oTG4sIkVPYmplY3RJbXBsIiw1MDYpLEQoNzgwLDUwNix7MTA1OjEsOTI6MSw5MDoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxfSxEdnQpLGwuQ2g9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZVtlXX0sbC5EaD1mdW5jdGlvbihlLG4pe3RoaXMuZVtlXT1ufSxsLkVoPWZ1bmN0aW9uKGUpe3RoaXMuZVtlXT1udWxsfSxsLlRnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZH0sbC5ZZz1mdW5jdGlvbihlKXtyZXR1cm4gZXModGhpcy5kLGUpfSxsLiRnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZH0sbC5kaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmUhPW51bGx9LGwucGg9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5rJiYodGhpcy5rPW5ldyBaRiksdGhpcy5rfSxsLnRoPWZ1bmN0aW9uKGUpe3RoaXMuZD1lfSxsLnloPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuZT09bnVsbCYmKGU9Sm4odGhpcy5kKSx0aGlzLmU9ZT09MD9uNWU6TnQoUW4sTWUsMSxlLDUsMSkpLHRoaXN9LGwuQWg9ZnVuY3Rpb24oKXtyZXR1cm4gMH07dmFyIG41ZTtOKExuLCJEeW5hbWljRU9iamVjdEltcGwiLDc4MCksRCgxMzc2LDc4MCx7MTA1OjEsNDI6MSw5MjoxLDkwOjEsMTMzOjEsNTY6MSwxMDg6MSw0OToxLDk3OjF9LFVLdCksbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gRHYodGhpcyl9LGwudGg9ZnVuY3Rpb24oZSl7dGhpcy5kPWUsdGhpcy5iPWdJKGUsImtleSIpLHRoaXMuYz1nSShlLFlDKX0sbC5TaD1mdW5jdGlvbigpe3ZhciBlO3JldHVybiB0aGlzLmE9PS0xJiYoZT1ZcnQodGhpcyx0aGlzLmIpLHRoaXMuYT1lPT1udWxsPzA6SmkoZSkpLHRoaXMuYX0sbC5jZD1mdW5jdGlvbigpe3JldHVybiBZcnQodGhpcyx0aGlzLmIpfSxsLmRkPWZ1bmN0aW9uKCl7cmV0dXJuIFlydCh0aGlzLHRoaXMuYyl9LGwuVGg9ZnVuY3Rpb24oZSl7dGhpcy5hPWV9LGwuVWg9ZnVuY3Rpb24oZSl7RHd0KHRoaXMsdGhpcy5iLGUpfSxsLmVkPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPVlydCh0aGlzLHRoaXMuYyksRHd0KHRoaXMsdGhpcy5jLGUpLG59LGwuYT0wLE4oTG4sIkR5bmFtaWNFT2JqZWN0SW1wbC9CYXNpY0VNYXBFbnRyeSIsMTM3NiksRCgxMzc3LDEsezEwODoxfSxaRiksbC5iaz1mdW5jdGlvbihlKXt0aHJvdyBudChuZXcgUHIpfSxsLkNoPWZ1bmN0aW9uKGUpe3Rocm93IG50KG5ldyBQcil9LGwuRGg9ZnVuY3Rpb24oZSxuKXt0aHJvdyBudChuZXcgUHIpfSxsLkVoPWZ1bmN0aW9uKGUpe3Rocm93IG50KG5ldyBQcil9LGwuY2s9ZnVuY3Rpb24oKXt0aHJvdyBudChuZXcgUHIpfSxsLmRrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5laz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuZms9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxsLmdrPWZ1bmN0aW9uKCl7dGhyb3cgbnQobmV3IFByKX0sbC5oaz1mdW5jdGlvbihlKXt0aHJvdyBudChuZXcgUHIpfSxsLmlrPWZ1bmN0aW9uKGUpe3RoaXMuYT1lfSxsLmprPWZ1bmN0aW9uKGUpe3RoaXMuYj1lfSxsLmtrPWZ1bmN0aW9uKGUpe3RoaXMuYz1lfSxOKExuLCJEeW5hbWljRU9iamVjdEltcGwvRHluYW1pY0VQcm9wZXJ0aWVzSG9sZGVySW1wbCIsMTM3NyksRCg1MTAsMTUwLHsxMDU6MSw5MjoxLDkwOjEsNTkwOjEsMTQ3OjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsNTEwOjEsMTUwOjEsMTE0OjEsMTE1OjF9LEpGKSxsLlFnPWZ1bmN0aW9uKGUpe3JldHVybiBYM3QodGhpcyxlKX0sbC5fZz1mdW5jdGlvbihlLG4scil7dmFyIHM7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKGVpLHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuZDtjYXNlIDI6cmV0dXJuIHI/KCF0aGlzLmImJih0aGlzLmI9bmV3IEFsKChsbigpLEphKSxwYyx0aGlzKSksdGhpcy5iKTooIXRoaXMuYiYmKHRoaXMuYj1uZXcgQWwoKGxuKCksSmEpLHBjLHRoaXMpKSxmRCh0aGlzLmIpKTtjYXNlIDM6cmV0dXJuIGJRdCh0aGlzKTtjYXNlIDQ6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgQnMoVGIsdGhpcyw0KSksdGhpcy5hO2Nhc2UgNTpyZXR1cm4hdGhpcy5jJiYodGhpcy5jPW5ldyBXMyhUYix0aGlzLDUpKSx0aGlzLmN9cmV0dXJuIGhoKHRoaXMsZS1KbigobG4oKSxycCkpLHduKChzPXUoTW4odGhpcywxNiksMjYpLHN8fHJwKSxlKSxuLHIpfSxsLmhoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLGg7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKGVpLHRoaXMsMCwzKSksZXUodGhpcy5BYixlLHIpO2Nhc2UgMzpyZXR1cm4gdGhpcy5DYiYmKHI9KG89dGhpcy5EYj4+MTYsbz49MD9YM3QodGhpcyxyKTp0aGlzLkNiLmloKHRoaXMsLTEtbyxudWxsLHIpKSksV3Z0KHRoaXMsdShlLDE0Nykscil9cmV0dXJuIGg9dSh3bigocz11KE1uKHRoaXMsMTYpLDI2KSxzfHwobG4oKSxycCkpLG4pLDY2KSxoLk5qKCkuUWoodGhpcyx1dSh0aGlzKSxuLUpuKChsbigpLHJwKSksZSxyKX0sbC5qaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbztzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoZWksdGhpcywwLDMpKSx6YSh0aGlzLkFiLGUscik7Y2FzZSAyOnJldHVybiF0aGlzLmImJih0aGlzLmI9bmV3IEFsKChsbigpLEphKSxwYyx0aGlzKSksa2oodGhpcy5iLGUscik7Y2FzZSAzOnJldHVybiBXdnQodGhpcyxudWxsLHIpO2Nhc2UgNDpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBCcyhUYix0aGlzLDQpKSx6YSh0aGlzLmEsZSxyKX1yZXR1cm4gbz11KHduKChzPXUoTW4odGhpcywxNiksMjYpLHN8fChsbigpLHJwKSksbiksNjYpLG8uTmooKS5Saih0aGlzLHV1KHRoaXMpLG4tSm4oKGxuKCkscnApKSxlLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3ZhciBuO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLmQhPW51bGw7Y2FzZSAyOnJldHVybiEhdGhpcy5iJiZ0aGlzLmIuZiE9MDtjYXNlIDM6cmV0dXJuISFiUXQodGhpcyk7Y2FzZSA0OnJldHVybiEhdGhpcy5hJiZ0aGlzLmEuaSE9MDtjYXNlIDU6cmV0dXJuISF0aGlzLmMmJnRoaXMuYy5pIT0wfXJldHVybiB1aCh0aGlzLGUtSm4oKGxuKCkscnApKSx3bigobj11KE1uKHRoaXMsMTYpLDI2KSxufHxycCksZSkpfSxsLnNoPWZ1bmN0aW9uKGUsbil7dmFyIHI7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKGVpLHRoaXMsMCwzKSksVHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShlaSx0aGlzLDAsMykpLGdzKHRoaXMuQWIsdShuLDE0KSk7cmV0dXJuO2Nhc2UgMTpDdG4odGhpcyxqcihuKSk7cmV0dXJuO2Nhc2UgMjohdGhpcy5iJiYodGhpcy5iPW5ldyBBbCgobG4oKSxKYSkscGMsdGhpcykpLGx6KHRoaXMuYixuKTtyZXR1cm47Y2FzZSAzOk1jZSh0aGlzLHUobiwxNDcpKTtyZXR1cm47Y2FzZSA0OiF0aGlzLmEmJih0aGlzLmE9bmV3IEJzKFRiLHRoaXMsNCkpLFRyKHRoaXMuYSksIXRoaXMuYSYmKHRoaXMuYT1uZXcgQnMoVGIsdGhpcyw0KSksZ3ModGhpcy5hLHUobiwxNCkpO3JldHVybjtjYXNlIDU6IXRoaXMuYyYmKHRoaXMuYz1uZXcgVzMoVGIsdGhpcyw1KSksVHIodGhpcy5jKSwhdGhpcy5jJiYodGhpcy5jPW5ldyBXMyhUYix0aGlzLDUpKSxncyh0aGlzLmMsdShuLDE0KSk7cmV0dXJufWJoKHRoaXMsZS1KbigobG4oKSxycCkpLHduKChyPXUoTW4odGhpcywxNiksMjYpLHJ8fHJwKSxlKSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBsbigpLHJwfSxsLkJoPWZ1bmN0aW9uKGUpe3ZhciBuO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShlaSx0aGlzLDAsMykpLFRyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6UW10KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjohdGhpcy5iJiYodGhpcy5iPW5ldyBBbCgobG4oKSxKYSkscGMsdGhpcykpLHRoaXMuYi5jLiRiKCk7cmV0dXJuO2Nhc2UgMzpNY2UodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA0OiF0aGlzLmEmJih0aGlzLmE9bmV3IEJzKFRiLHRoaXMsNCkpLFRyKHRoaXMuYSk7cmV0dXJuO2Nhc2UgNTohdGhpcy5jJiYodGhpcy5jPW5ldyBXMyhUYix0aGlzLDUpKSxUcih0aGlzLmMpO3JldHVybn1naCh0aGlzLGUtSm4oKGxuKCkscnApKSx3bigobj11KE1uKHRoaXMsMTYpLDI2KSxufHxycCksZSkpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIEdyZSh0aGlzKX0sbC5kPW51bGwsTihMbiwiRUFubm90YXRpb25JbXBsIiw1MTApLEQoMTUxLDcwNSxMOHQsSWwpLGwuWGg9ZnVuY3Rpb24oZSxuKXtjWGUodGhpcyxlLHUobiw0MikpfSxsLmxrPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG5aZSh0aGlzLHUoZSw0Miksbil9LGwucGk9ZnVuY3Rpb24oZSl7cmV0dXJuIHUodSh0aGlzLmMsNjkpLnBpKGUpLDEzMyl9LGwuWmg9ZnVuY3Rpb24oKXtyZXR1cm4gdSh0aGlzLmMsNjkpLlpoKCl9LGwuJGg9ZnVuY3Rpb24oKXtyZXR1cm4gdSh0aGlzLmMsNjkpLiRoKCl9LGwuX2g9ZnVuY3Rpb24oZSl7cmV0dXJuIHUodGhpcy5jLDY5KS5faChlKX0sbC5taz1mdW5jdGlvbihlLG4pe3JldHVybiBraih0aGlzLGUsbil9LGwuV2o9ZnVuY3Rpb24oZSl7cmV0dXJuIHUodGhpcy5jLDc2KS5XaihlKX0sbC5yaj1mdW5jdGlvbigpe30sbC5maj1mdW5jdGlvbigpe3JldHVybiB1KHRoaXMuYyw3NikuZmooKX0sbC50aj1mdW5jdGlvbihlLG4scil7dmFyIHM7cmV0dXJuIHM9dSh6bCh0aGlzLmIpLk5oKCkuSmgodGhpcy5iKSwxMzMpLHMuVGgoZSkscy5VaChuKSxzLmVkKHIpLHN9LGwudWo9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGJwdCh0aGlzKX0sbC5XYj1mdW5jdGlvbihlKXtseih0aGlzLGUpfSxsLlhqPWZ1bmN0aW9uKCl7dSh0aGlzLmMsNzYpLlhqKCl9LE4oWWksIkVjb3JlRU1hcCIsMTUxKSxEKDE1OCwxNTEsTDh0LEFsKSxsLnFqPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHMsbyxoO2lmKHRoaXMuZD09bnVsbCl7Zm9yKGg9TnQoJEF0LEE4dCw2MywyKnRoaXMuZisxLDAsMSkscj10aGlzLmMuS2MoKTtyLmUhPXIuaS5nYygpOyluPXUoci5uaigpLDEzMykscz1uLlNoKCksbz0ocyZUaSklaC5sZW5ndGgsZT1oW29dLCFlJiYoZT1oW29dPW5ldyBicHQodGhpcykpLGUuRmMobik7dGhpcy5kPWh9fSxOKExuLCJFQW5ub3RhdGlvbkltcGwvMSIsMTU4KSxEKDI4NCw0MzgsezEwNToxLDkyOjEsOTA6MSwxNDc6MSwxOTE6MSw1NjoxLDEwODoxLDQ3MjoxLDQ5OjEsOTc6MSwxNTA6MSwyODQ6MSwxMTQ6MSwxMTU6MX0pLGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG87c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKGVpLHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiBGbigpLCEhKHRoaXMuQmImMjU2KTtjYXNlIDM6cmV0dXJuIEZuKCksISEodGhpcy5CYiY1MTIpO2Nhc2UgNDpyZXR1cm4gZGUodGhpcy5zKTtjYXNlIDU6cmV0dXJuIGRlKHRoaXMudCk7Y2FzZSA2OnJldHVybiBGbigpLCEhdGhpcy4kaigpO2Nhc2UgNzpyZXR1cm4gRm4oKSxvPXRoaXMucyxvPj0xO2Nhc2UgODpyZXR1cm4gbj9PaCh0aGlzKTp0aGlzLnI7Y2FzZSA5OnJldHVybiB0aGlzLnF9cmV0dXJuIGhoKHRoaXMsZS1Kbih0aGlzLnpoKCkpLHduKChzPXUoTW4odGhpcywxNiksMjYpLHN8fHRoaXMuemgoKSksZSksbixyKX0sbC5qaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbztzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoZWksdGhpcywwLDMpKSx6YSh0aGlzLkFiLGUscik7Y2FzZSA5OnJldHVybiBXbnQodGhpcyxyKX1yZXR1cm4gbz11KHduKChzPXUoTW4odGhpcywxNiksMjYpLHN8fHRoaXMuemgoKSksbiksNjYpLG8uTmooKS5Saih0aGlzLHV1KHRoaXMpLG4tSm4odGhpcy56aCgpKSxlLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3ZhciBuLHI7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGw7Y2FzZSAyOnJldHVybih0aGlzLkJiJjI1Nik9PTA7Y2FzZSAzOnJldHVybih0aGlzLkJiJjUxMik9PTA7Y2FzZSA0OnJldHVybiB0aGlzLnMhPTA7Y2FzZSA1OnJldHVybiB0aGlzLnQhPTE7Y2FzZSA2OnJldHVybiB0aGlzLiRqKCk7Y2FzZSA3OnJldHVybiByPXRoaXMucyxyPj0xO2Nhc2UgODpyZXR1cm4hIXRoaXMuciYmIXRoaXMucS5lJiZqdih0aGlzLnEpLmk9PTA7Y2FzZSA5OnJldHVybiEhdGhpcy5xJiYhKHRoaXMuciYmIXRoaXMucS5lJiZqdih0aGlzLnEpLmk9PTApfXJldHVybiB1aCh0aGlzLGUtSm4odGhpcy56aCgpKSx3bigobj11KE1uKHRoaXMsMTYpLDI2KSxufHx0aGlzLnpoKCkpLGUpKX0sbC5zaD1mdW5jdGlvbihlLG4pe3ZhciByLHM7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKGVpLHRoaXMsMCwzKSksVHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShlaSx0aGlzLDAsMykpLGdzKHRoaXMuQWIsdShuLDE0KSk7cmV0dXJuO2Nhc2UgMTp0aGlzLkxoKGpyKG4pKTtyZXR1cm47Y2FzZSAyOlJnKHRoaXMsQmUoRmUobikpKTtyZXR1cm47Y2FzZSAzOmpnKHRoaXMsQmUoRmUobikpKTtyZXR1cm47Y2FzZSA0OlBnKHRoaXMsdShuLDE5KS5hKTtyZXR1cm47Y2FzZSA1OnRoaXMub2sodShuLDE5KS5hKTtyZXR1cm47Y2FzZSA4OmcyKHRoaXMsdShuLDEzOCkpO3JldHVybjtjYXNlIDk6cz1GMSh0aGlzLHUobiw4NyksbnVsbCkscyYmcy5GaSgpO3JldHVybn1iaCh0aGlzLGUtSm4odGhpcy56aCgpKSx3bigocj11KE1uKHRoaXMsMTYpLDI2KSxyfHx0aGlzLnpoKCkpLGUpLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIGxuKCksdDVlfSxsLkJoPWZ1bmN0aW9uKGUpe3ZhciBuLHI7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKGVpLHRoaXMsMCwzKSksVHIodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTp0aGlzLkxoKG51bGwpO3JldHVybjtjYXNlIDI6UmcodGhpcywhMCk7cmV0dXJuO2Nhc2UgMzpqZyh0aGlzLCEwKTtyZXR1cm47Y2FzZSA0OlBnKHRoaXMsMCk7cmV0dXJuO2Nhc2UgNTp0aGlzLm9rKDEpO3JldHVybjtjYXNlIDg6ZzIodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA5OnI9RjEodGhpcyxudWxsLG51bGwpLHImJnIuRmkoKTtyZXR1cm59Z2godGhpcyxlLUpuKHRoaXMuemgoKSksd24oKG49dShNbih0aGlzLDE2KSwyNiksbnx8dGhpcy56aCgpKSxlKSl9LGwuR2g9ZnVuY3Rpb24oKXtPaCh0aGlzKSx0aGlzLkJifD0xfSxsLllqPWZ1bmN0aW9uKCl7cmV0dXJuIE9oKHRoaXMpfSxsLlpqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudH0sbC4kaj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMudCxlPjF8fGU9PS0xfSxsLmhpPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuQmImNTEyKSE9MH0sbC5uaz1mdW5jdGlvbihlLG4pe3JldHVybiBHeXQodGhpcyxlLG4pfSxsLm9rPWZ1bmN0aW9uKGUpe3R5KHRoaXMsZSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gbjV0KHRoaXMpfSxsLnM9MCxsLnQ9MSxOKExuLCJFVHlwZWRFbGVtZW50SW1wbCIsMjg0KSxEKDQ0OSwyODQsezEwNToxLDkyOjEsOTA6MSwxNDc6MSwxOTE6MSw1NjoxLDE3MDoxLDY2OjEsMTA4OjEsNDcyOjEsNDk6MSw5NzoxLDE1MDoxLDQ0OToxLDI4NDoxLDExNDoxLDExNToxLDY3NzoxfSksbC5RZz1mdW5jdGlvbihlKXtyZXR1cm4gU3NlKHRoaXMsZSl9LGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG87c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKGVpLHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiBGbigpLCEhKHRoaXMuQmImMjU2KTtjYXNlIDM6cmV0dXJuIEZuKCksISEodGhpcy5CYiY1MTIpO2Nhc2UgNDpyZXR1cm4gZGUodGhpcy5zKTtjYXNlIDU6cmV0dXJuIGRlKHRoaXMudCk7Y2FzZSA2OnJldHVybiBGbigpLCEhdGhpcy4kaigpO2Nhc2UgNzpyZXR1cm4gRm4oKSxvPXRoaXMucyxvPj0xO2Nhc2UgODpyZXR1cm4gbj9PaCh0aGlzKTp0aGlzLnI7Y2FzZSA5OnJldHVybiB0aGlzLnE7Y2FzZSAxMDpyZXR1cm4gRm4oKSwhISh0aGlzLkJiJnhmKTtjYXNlIDExOnJldHVybiBGbigpLCEhKHRoaXMuQmImQXkpO2Nhc2UgMTI6cmV0dXJuIEZuKCksISEodGhpcy5CYiZ5eSk7Y2FzZSAxMzpyZXR1cm4gdGhpcy5qO2Nhc2UgMTQ6cmV0dXJuIHY3KHRoaXMpO2Nhc2UgMTU6cmV0dXJuIEZuKCksISEodGhpcy5CYiZLdSk7Y2FzZSAxNjpyZXR1cm4gRm4oKSwhISh0aGlzLkJiJnZkKTtjYXNlIDE3OnJldHVybiBHbSh0aGlzKX1yZXR1cm4gaGgodGhpcyxlLUpuKHRoaXMuemgoKSksd24oKHM9dShNbih0aGlzLDE2KSwyNiksc3x8dGhpcy56aCgpKSxlKSxuLHIpfSxsLmhoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLGg7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKGVpLHRoaXMsMCwzKSksZXUodGhpcy5BYixlLHIpO2Nhc2UgMTc6cmV0dXJuIHRoaXMuQ2ImJihyPShvPXRoaXMuRGI+PjE2LG8+PTA/U3NlKHRoaXMscik6dGhpcy5DYi5paCh0aGlzLC0xLW8sbnVsbCxyKSkpLFVsKHRoaXMsZSwxNyxyKX1yZXR1cm4gaD11KHduKChzPXUoTW4odGhpcywxNiksMjYpLHN8fHRoaXMuemgoKSksbiksNjYpLGguTmooKS5Raih0aGlzLHV1KHRoaXMpLG4tSm4odGhpcy56aCgpKSxlLHIpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShlaSx0aGlzLDAsMykpLHphKHRoaXMuQWIsZSxyKTtjYXNlIDk6cmV0dXJuIFdudCh0aGlzLHIpO2Nhc2UgMTc6cmV0dXJuIFVsKHRoaXMsbnVsbCwxNyxyKX1yZXR1cm4gbz11KHduKChzPXUoTW4odGhpcywxNiksMjYpLHN8fHRoaXMuemgoKSksbiksNjYpLG8uTmooKS5Saih0aGlzLHV1KHRoaXMpLG4tSm4odGhpcy56aCgpKSxlLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3ZhciBuLHI7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGw7Y2FzZSAyOnJldHVybih0aGlzLkJiJjI1Nik9PTA7Y2FzZSAzOnJldHVybih0aGlzLkJiJjUxMik9PTA7Y2FzZSA0OnJldHVybiB0aGlzLnMhPTA7Y2FzZSA1OnJldHVybiB0aGlzLnQhPTE7Y2FzZSA2OnJldHVybiB0aGlzLiRqKCk7Y2FzZSA3OnJldHVybiByPXRoaXMucyxyPj0xO2Nhc2UgODpyZXR1cm4hIXRoaXMuciYmIXRoaXMucS5lJiZqdih0aGlzLnEpLmk9PTA7Y2FzZSA5OnJldHVybiEhdGhpcy5xJiYhKHRoaXMuciYmIXRoaXMucS5lJiZqdih0aGlzLnEpLmk9PTApO2Nhc2UgMTA6cmV0dXJuKHRoaXMuQmImeGYpPT0wO2Nhc2UgMTE6cmV0dXJuKHRoaXMuQmImQXkpIT0wO2Nhc2UgMTI6cmV0dXJuKHRoaXMuQmImeXkpIT0wO2Nhc2UgMTM6cmV0dXJuIHRoaXMuaiE9bnVsbDtjYXNlIDE0OnJldHVybiB2Nyh0aGlzKSE9bnVsbDtjYXNlIDE1OnJldHVybih0aGlzLkJiJkt1KSE9MDtjYXNlIDE2OnJldHVybih0aGlzLkJiJnZkKSE9MDtjYXNlIDE3OnJldHVybiEhR20odGhpcyl9cmV0dXJuIHVoKHRoaXMsZS1Kbih0aGlzLnpoKCkpLHduKChuPXUoTW4odGhpcywxNiksMjYpLG58fHRoaXMuemgoKSksZSkpfSxsLnNoPWZ1bmN0aW9uKGUsbil7dmFyIHIscztzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoZWksdGhpcywwLDMpKSxUcih0aGlzLkFiKSwhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKGVpLHRoaXMsMCwzKSksZ3ModGhpcy5BYix1KG4sMTQpKTtyZXR1cm47Y2FzZSAxOnhydCh0aGlzLGpyKG4pKTtyZXR1cm47Y2FzZSAyOlJnKHRoaXMsQmUoRmUobikpKTtyZXR1cm47Y2FzZSAzOmpnKHRoaXMsQmUoRmUobikpKTtyZXR1cm47Y2FzZSA0OlBnKHRoaXMsdShuLDE5KS5hKTtyZXR1cm47Y2FzZSA1OnRoaXMub2sodShuLDE5KS5hKTtyZXR1cm47Y2FzZSA4OmcyKHRoaXMsdShuLDEzOCkpO3JldHVybjtjYXNlIDk6cz1GMSh0aGlzLHUobiw4NyksbnVsbCkscyYmcy5GaSgpO3JldHVybjtjYXNlIDEwOnQ3KHRoaXMsQmUoRmUobikpKTtyZXR1cm47Y2FzZSAxMTpyNyh0aGlzLEJlKEZlKG4pKSk7cmV0dXJuO2Nhc2UgMTI6ZTcodGhpcyxCZShGZShuKSkpO3JldHVybjtjYXNlIDEzOldidCh0aGlzLGpyKG4pKTtyZXR1cm47Y2FzZSAxNTpuNyh0aGlzLEJlKEZlKG4pKSk7cmV0dXJuO2Nhc2UgMTY6aTcodGhpcyxCZShGZShuKSkpO3JldHVybn1iaCh0aGlzLGUtSm4odGhpcy56aCgpKSx3bigocj11KE1uKHRoaXMsMTYpLDI2KSxyfHx0aGlzLnpoKCkpLGUpLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIGxuKCksSjRlfSxsLkJoPWZ1bmN0aW9uKGUpe3ZhciBuLHI7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKGVpLHRoaXMsMCwzKSksVHIodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTpfdCh0aGlzLkNiLDg4KSYmaHkoaGwodSh0aGlzLkNiLDg4KSksNCksdHUodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOlJnKHRoaXMsITApO3JldHVybjtjYXNlIDM6amcodGhpcywhMCk7cmV0dXJuO2Nhc2UgNDpQZyh0aGlzLDApO3JldHVybjtjYXNlIDU6dGhpcy5vaygxKTtyZXR1cm47Y2FzZSA4OmcyKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgOTpyPUYxKHRoaXMsbnVsbCxudWxsKSxyJiZyLkZpKCk7cmV0dXJuO2Nhc2UgMTA6dDcodGhpcywhMCk7cmV0dXJuO2Nhc2UgMTE6cjcodGhpcywhMSk7cmV0dXJuO2Nhc2UgMTI6ZTcodGhpcywhMSk7cmV0dXJuO2Nhc2UgMTM6dGhpcy5pPW51bGwsZXoodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAxNTpuNyh0aGlzLCExKTtyZXR1cm47Y2FzZSAxNjppNyh0aGlzLCExKTtyZXR1cm59Z2godGhpcyxlLUpuKHRoaXMuemgoKSksd24oKG49dShNbih0aGlzLDE2KSwyNiksbnx8dGhpcy56aCgpKSxlKSl9LGwuR2g9ZnVuY3Rpb24oKXt5OChNbygoR3UoKSxTYSksdGhpcykpLE9oKHRoaXMpLHRoaXMuQmJ8PTF9LGwuR2o9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mfSxsLnpqPWZ1bmN0aW9uKCl7cmV0dXJuIHY3KHRoaXMpfSxsLkhqPWZ1bmN0aW9uKCl7cmV0dXJuIEdtKHRoaXMpfSxsLkxqPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGwucGs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5rfSxsLmFqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubn0sbC5Naj1mdW5jdGlvbigpe3JldHVybiBReih0aGlzKX0sbC5Oaj1mdW5jdGlvbigpe3ZhciBlLG4scixzLG8saCxkLHcsaztyZXR1cm4gdGhpcy5wfHwocj1HbSh0aGlzKSwoci5pPT1udWxsJiZiZChyKSxyLmkpLmxlbmd0aCxzPXRoaXMuTGooKSxzJiZKbihHbShzKSksbz1PaCh0aGlzKSxkPW8uQmooKSxlPWQ/ZC5pJjE/ZD09eGw/V3M6ZD09U3I/SGE6ZD09cjM/Szc6ZD09Z2E/d2E6ZD09RGI/VHc6ZD09ZDU/X3c6ZD09WHU/a3g6YVM6ZDpudWxsLG49djcodGhpcyksdz1vLnpqKCksYWxuKHRoaXMpLHRoaXMuQmImdmQmJigoaD1yNHQoKEd1KCksU2EpLHIpKSYmaCE9dGhpc3x8KGg9ejYoTW8oU2EsdGhpcykpKSk/dGhpcy5wPW5ldyBPR3QodGhpcyxoKTp0aGlzLiRqKCk/dGhpcy5yaygpP3M/dGhpcy5CYiZLdT9lP3RoaXMuc2soKT90aGlzLnA9bmV3IHQyKDQ3LGUsdGhpcyxzKTp0aGlzLnA9bmV3IHQyKDUsZSx0aGlzLHMpOnRoaXMuc2soKT90aGlzLnA9bmV3IHIyKDQ2LHRoaXMscyk6dGhpcy5wPW5ldyByMig0LHRoaXMscyk6ZT90aGlzLnNrKCk/dGhpcy5wPW5ldyB0Mig0OSxlLHRoaXMscyk6dGhpcy5wPW5ldyB0Mig3LGUsdGhpcyxzKTp0aGlzLnNrKCk/dGhpcy5wPW5ldyByMig0OCx0aGlzLHMpOnRoaXMucD1uZXcgcjIoNix0aGlzLHMpOnRoaXMuQmImS3U/ZT9lPT1JMj90aGlzLnA9bmV3IExnKDUwLFA0ZSx0aGlzKTp0aGlzLnNrKCk/dGhpcy5wPW5ldyBMZyg0MyxlLHRoaXMpOnRoaXMucD1uZXcgTGcoMSxlLHRoaXMpOnRoaXMuc2soKT90aGlzLnA9bmV3IERnKDQyLHRoaXMpOnRoaXMucD1uZXcgRGcoMCx0aGlzKTplP2U9PUkyP3RoaXMucD1uZXcgTGcoNDEsUDRlLHRoaXMpOnRoaXMuc2soKT90aGlzLnA9bmV3IExnKDQ1LGUsdGhpcyk6dGhpcy5wPW5ldyBMZygzLGUsdGhpcyk6dGhpcy5zaygpP3RoaXMucD1uZXcgRGcoNDQsdGhpcyk6dGhpcy5wPW5ldyBEZygyLHRoaXMpOl90KG8sMTQ4KT9lPT1zVT90aGlzLnA9bmV3IERnKDQwLHRoaXMpOnRoaXMuQmImNTEyP3RoaXMuQmImS3U/ZT90aGlzLnA9bmV3IExnKDksZSx0aGlzKTp0aGlzLnA9bmV3IERnKDgsdGhpcyk6ZT90aGlzLnA9bmV3IExnKDExLGUsdGhpcyk6dGhpcy5wPW5ldyBEZygxMCx0aGlzKTp0aGlzLkJiJkt1P2U/dGhpcy5wPW5ldyBMZygxMyxlLHRoaXMpOnRoaXMucD1uZXcgRGcoMTIsdGhpcyk6ZT90aGlzLnA9bmV3IExnKDE1LGUsdGhpcyk6dGhpcy5wPW5ldyBEZygxNCx0aGlzKTpzPyhrPXMudCxrPjF8fGs9PS0xP3RoaXMuc2soKT90aGlzLkJiJkt1P2U/dGhpcy5wPW5ldyB0MigyNSxlLHRoaXMscyk6dGhpcy5wPW5ldyByMigyNCx0aGlzLHMpOmU/dGhpcy5wPW5ldyB0MigyNyxlLHRoaXMscyk6dGhpcy5wPW5ldyByMigyNix0aGlzLHMpOnRoaXMuQmImS3U/ZT90aGlzLnA9bmV3IHQyKDI5LGUsdGhpcyxzKTp0aGlzLnA9bmV3IHIyKDI4LHRoaXMscyk6ZT90aGlzLnA9bmV3IHQyKDMxLGUsdGhpcyxzKTp0aGlzLnA9bmV3IHIyKDMwLHRoaXMscyk6dGhpcy5zaygpP3RoaXMuQmImS3U/ZT90aGlzLnA9bmV3IHQyKDMzLGUsdGhpcyxzKTp0aGlzLnA9bmV3IHIyKDMyLHRoaXMscyk6ZT90aGlzLnA9bmV3IHQyKDM1LGUsdGhpcyxzKTp0aGlzLnA9bmV3IHIyKDM0LHRoaXMscyk6dGhpcy5CYiZLdT9lP3RoaXMucD1uZXcgdDIoMzcsZSx0aGlzLHMpOnRoaXMucD1uZXcgcjIoMzYsdGhpcyxzKTplP3RoaXMucD1uZXcgdDIoMzksZSx0aGlzLHMpOnRoaXMucD1uZXcgcjIoMzgsdGhpcyxzKSk6dGhpcy5zaygpP3RoaXMuQmImS3U/ZT90aGlzLnA9bmV3IExnKDE3LGUsdGhpcyk6dGhpcy5wPW5ldyBEZygxNix0aGlzKTplP3RoaXMucD1uZXcgTGcoMTksZSx0aGlzKTp0aGlzLnA9bmV3IERnKDE4LHRoaXMpOnRoaXMuQmImS3U/ZT90aGlzLnA9bmV3IExnKDIxLGUsdGhpcyk6dGhpcy5wPW5ldyBEZygyMCx0aGlzKTplP3RoaXMucD1uZXcgTGcoMjMsZSx0aGlzKTp0aGlzLnA9bmV3IERnKDIyLHRoaXMpOnRoaXMucWsoKT90aGlzLnNrKCk/dGhpcy5wPW5ldyB5S3QodShvLDI2KSx0aGlzLHMpOnRoaXMucD1uZXcgTXd0KHUobywyNiksdGhpcyxzKTpfdChvLDE0OCk/ZT09c1U/dGhpcy5wPW5ldyBEZyg0MCx0aGlzKTp0aGlzLkJiJkt1P2U/dGhpcy5wPW5ldyB3WXQobix3LHRoaXMsKEtpdCgpLGQ9PVNyP3JMdDpkPT14bD9aQXQ6ZD09RGI/aUx0OmQ9PXIzP25MdDpkPT1nYT9lTHQ6ZD09ZDU/c0x0OmQ9PVh1P0pBdDpkPT1FaD90THQ6TWZ0KSk6dGhpcy5wPW5ldyBNWHQodShvLDE0OCksbix3LHRoaXMpOmU/dGhpcy5wPW5ldyB2WXQobix3LHRoaXMsKEtpdCgpLGQ9PVNyP3JMdDpkPT14bD9aQXQ6ZD09RGI/aUx0OmQ9PXIzP25MdDpkPT1nYT9lTHQ6ZD09ZDU/c0x0OmQ9PVh1P0pBdDpkPT1FaD90THQ6TWZ0KSk6dGhpcy5wPW5ldyBMWHQodShvLDE0OCksbix3LHRoaXMpOnRoaXMucmsoKT9zP3RoaXMuQmImS3U/dGhpcy5zaygpP3RoaXMucD1uZXcga0t0KHUobywyNiksdGhpcyxzKTp0aGlzLnA9bmV3IHh2dCh1KG8sMjYpLHRoaXMscyk6dGhpcy5zaygpP3RoaXMucD1uZXcgeEt0KHUobywyNiksdGhpcyxzKTp0aGlzLnA9bmV3IEVudCh1KG8sMjYpLHRoaXMscyk6dGhpcy5CYiZLdT90aGlzLnNrKCk/dGhpcy5wPW5ldyB2V3QodShvLDI2KSx0aGlzKTp0aGlzLnA9bmV3IFAydCh1KG8sMjYpLHRoaXMpOnRoaXMuc2soKT90aGlzLnA9bmV3IGJXdCh1KG8sMjYpLHRoaXMpOnRoaXMucD1uZXcgdW50KHUobywyNiksdGhpcyk6dGhpcy5zaygpP3M/dGhpcy5CYiZLdT90aGlzLnA9bmV3IEVLdCh1KG8sMjYpLHRoaXMscyk6dGhpcy5wPW5ldyBtdnQodShvLDI2KSx0aGlzLHMpOnRoaXMuQmImS3U/dGhpcy5wPW5ldyB3V3QodShvLDI2KSx0aGlzKTp0aGlzLnA9bmV3IEYydCh1KG8sMjYpLHRoaXMpOnM/dGhpcy5CYiZLdT90aGlzLnA9bmV3IFRLdCh1KG8sMjYpLHRoaXMscyk6dGhpcy5wPW5ldyB5dnQodShvLDI2KSx0aGlzLHMpOnRoaXMuQmImS3U/dGhpcy5wPW5ldyBtV3QodShvLDI2KSx0aGlzKTp0aGlzLnA9bmV3IFBqKHUobywyNiksdGhpcykpLHRoaXMucH0sbC5Jaj1mdW5jdGlvbigpe3JldHVybih0aGlzLkJiJnhmKSE9MH0sbC5xaz1mdW5jdGlvbigpe3JldHVybiExfSxsLnJrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuSmo9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5CYiZ2ZCkhPTB9LGwuT2o9ZnVuY3Rpb24oKXtyZXR1cm4gUXJ0KHRoaXMpfSxsLnNrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuS2o9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5CYiZLdSkhPTB9LGwudGs9ZnVuY3Rpb24oZSl7dGhpcy5rPWV9LGwuTGg9ZnVuY3Rpb24oZSl7eHJ0KHRoaXMsZSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gcHEodGhpcyl9LGwuZT0hMSxsLm49MCxOKExuLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsIiw0NDkpLEQoMzIyLDQ0OSx7MTA1OjEsOTI6MSw5MDoxLDM0OjEsMTQ3OjEsMTkxOjEsNTY6MSwxNzA6MSw2NjoxLDEwODoxLDQ3MjoxLDQ5OjEsOTc6MSwzMjI6MSwxNTA6MSw0NDk6MSwyODQ6MSwxMTQ6MSwxMTU6MSw2Nzc6MX0sS3R0KSxsLl9nPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShlaSx0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLnpiO2Nhc2UgMjpyZXR1cm4gRm4oKSwhISh0aGlzLkJiJjI1Nik7Y2FzZSAzOnJldHVybiBGbigpLCEhKHRoaXMuQmImNTEyKTtjYXNlIDQ6cmV0dXJuIGRlKHRoaXMucyk7Y2FzZSA1OnJldHVybiBkZSh0aGlzLnQpO2Nhc2UgNjpyZXR1cm4gRm4oKSwhIVo0dCh0aGlzKTtjYXNlIDc6cmV0dXJuIEZuKCksbz10aGlzLnMsbz49MTtjYXNlIDg6cmV0dXJuIG4/T2godGhpcyk6dGhpcy5yO2Nhc2UgOTpyZXR1cm4gdGhpcy5xO2Nhc2UgMTA6cmV0dXJuIEZuKCksISEodGhpcy5CYiZ4Zik7Y2FzZSAxMTpyZXR1cm4gRm4oKSwhISh0aGlzLkJiJkF5KTtjYXNlIDEyOnJldHVybiBGbigpLCEhKHRoaXMuQmImeXkpO2Nhc2UgMTM6cmV0dXJuIHRoaXMuajtjYXNlIDE0OnJldHVybiB2Nyh0aGlzKTtjYXNlIDE1OnJldHVybiBGbigpLCEhKHRoaXMuQmImS3UpO2Nhc2UgMTY6cmV0dXJuIEZuKCksISEodGhpcy5CYiZ2ZCk7Y2FzZSAxNzpyZXR1cm4gR20odGhpcyk7Y2FzZSAxODpyZXR1cm4gRm4oKSwhISh0aGlzLkJiJnljKTtjYXNlIDE5OnJldHVybiBuP3BpdCh0aGlzKTpNSnQodGhpcyl9cmV0dXJuIGhoKHRoaXMsZS1KbigobG4oKSx0MykpLHduKChzPXUoTW4odGhpcywxNiksMjYpLHN8fHQzKSxlKSxuLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3ZhciBuLHI7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGw7Y2FzZSAyOnJldHVybih0aGlzLkJiJjI1Nik9PTA7Y2FzZSAzOnJldHVybih0aGlzLkJiJjUxMik9PTA7Y2FzZSA0OnJldHVybiB0aGlzLnMhPTA7Y2FzZSA1OnJldHVybiB0aGlzLnQhPTE7Y2FzZSA2OnJldHVybiBaNHQodGhpcyk7Y2FzZSA3OnJldHVybiByPXRoaXMucyxyPj0xO2Nhc2UgODpyZXR1cm4hIXRoaXMuciYmIXRoaXMucS5lJiZqdih0aGlzLnEpLmk9PTA7Y2FzZSA5OnJldHVybiEhdGhpcy5xJiYhKHRoaXMuciYmIXRoaXMucS5lJiZqdih0aGlzLnEpLmk9PTApO2Nhc2UgMTA6cmV0dXJuKHRoaXMuQmImeGYpPT0wO2Nhc2UgMTE6cmV0dXJuKHRoaXMuQmImQXkpIT0wO2Nhc2UgMTI6cmV0dXJuKHRoaXMuQmImeXkpIT0wO2Nhc2UgMTM6cmV0dXJuIHRoaXMuaiE9bnVsbDtjYXNlIDE0OnJldHVybiB2Nyh0aGlzKSE9bnVsbDtjYXNlIDE1OnJldHVybih0aGlzLkJiJkt1KSE9MDtjYXNlIDE2OnJldHVybih0aGlzLkJiJnZkKSE9MDtjYXNlIDE3OnJldHVybiEhR20odGhpcyk7Y2FzZSAxODpyZXR1cm4odGhpcy5CYiZ5YykhPTA7Y2FzZSAxOTpyZXR1cm4hIU1KdCh0aGlzKX1yZXR1cm4gdWgodGhpcyxlLUpuKChsbigpLHQzKSksd24oKG49dShNbih0aGlzLDE2KSwyNiksbnx8dDMpLGUpKX0sbC5zaD1mdW5jdGlvbihlLG4pe3ZhciByLHM7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKGVpLHRoaXMsMCwzKSksVHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShlaSx0aGlzLDAsMykpLGdzKHRoaXMuQWIsdShuLDE0KSk7cmV0dXJuO2Nhc2UgMTp4cnQodGhpcyxqcihuKSk7cmV0dXJuO2Nhc2UgMjpSZyh0aGlzLEJlKEZlKG4pKSk7cmV0dXJuO2Nhc2UgMzpqZyh0aGlzLEJlKEZlKG4pKSk7cmV0dXJuO2Nhc2UgNDpQZyh0aGlzLHUobiwxOSkuYSk7cmV0dXJuO2Nhc2UgNTpjSHQodGhpcyx1KG4sMTkpLmEpO3JldHVybjtjYXNlIDg6ZzIodGhpcyx1KG4sMTM4KSk7cmV0dXJuO2Nhc2UgOTpzPUYxKHRoaXMsdShuLDg3KSxudWxsKSxzJiZzLkZpKCk7cmV0dXJuO2Nhc2UgMTA6dDcodGhpcyxCZShGZShuKSkpO3JldHVybjtjYXNlIDExOnI3KHRoaXMsQmUoRmUobikpKTtyZXR1cm47Y2FzZSAxMjplNyh0aGlzLEJlKEZlKG4pKSk7cmV0dXJuO2Nhc2UgMTM6V2J0KHRoaXMsanIobikpO3JldHVybjtjYXNlIDE1Om43KHRoaXMsQmUoRmUobikpKTtyZXR1cm47Y2FzZSAxNjppNyh0aGlzLEJlKEZlKG4pKSk7cmV0dXJuO2Nhc2UgMTg6JGl0KHRoaXMsQmUoRmUobikpKTtyZXR1cm59YmgodGhpcyxlLUpuKChsbigpLHQzKSksd24oKHI9dShNbih0aGlzLDE2KSwyNikscnx8dDMpLGUpLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIGxuKCksdDN9LGwuQmg9ZnVuY3Rpb24oZSl7dmFyIG4scjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoZWksdGhpcywwLDMpKSxUcih0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOl90KHRoaXMuQ2IsODgpJiZoeShobCh1KHRoaXMuQ2IsODgpKSw0KSx0dSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDI6UmcodGhpcywhMCk7cmV0dXJuO2Nhc2UgMzpqZyh0aGlzLCEwKTtyZXR1cm47Y2FzZSA0OlBnKHRoaXMsMCk7cmV0dXJuO2Nhc2UgNTp0aGlzLmI9MCx0eSh0aGlzLDEpO3JldHVybjtjYXNlIDg6ZzIodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA5OnI9RjEodGhpcyxudWxsLG51bGwpLHImJnIuRmkoKTtyZXR1cm47Y2FzZSAxMDp0Nyh0aGlzLCEwKTtyZXR1cm47Y2FzZSAxMTpyNyh0aGlzLCExKTtyZXR1cm47Y2FzZSAxMjplNyh0aGlzLCExKTtyZXR1cm47Y2FzZSAxMzp0aGlzLmk9bnVsbCxleih0aGlzLG51bGwpO3JldHVybjtjYXNlIDE1Om43KHRoaXMsITEpO3JldHVybjtjYXNlIDE2Omk3KHRoaXMsITEpO3JldHVybjtjYXNlIDE4OiRpdCh0aGlzLCExKTtyZXR1cm59Z2godGhpcyxlLUpuKChsbigpLHQzKSksd24oKG49dShNbih0aGlzLDE2KSwyNiksbnx8dDMpLGUpKX0sbC5HaD1mdW5jdGlvbigpe3BpdCh0aGlzKSx5OChNbygoR3UoKSxTYSksdGhpcykpLE9oKHRoaXMpLHRoaXMuQmJ8PTF9LGwuJGo9ZnVuY3Rpb24oKXtyZXR1cm4gWjR0KHRoaXMpfSxsLm5rPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHRoaXMuYj0wLHRoaXMuYT1udWxsLEd5dCh0aGlzLGUsbil9LGwub2s9ZnVuY3Rpb24oZSl7Y0h0KHRoaXMsZSl9LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gdGhpcy5EYiY2ND9wcSh0aGlzKTooZT1uZXcgQWgocHEodGhpcykpLGUuYSs9IiAoaUQ6ICIsQ2coZSwodGhpcy5CYiZ5YykhPTApLGUuYSs9IikiLGUuYSl9LGwuYj0wLE4oTG4sIkVBdHRyaWJ1dGVJbXBsIiwzMjIpLEQoMzUxLDQzOCx7MTA1OjEsOTI6MSw5MDoxLDEzODoxLDE0NzoxLDE5MToxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDM1MToxLDE1MDoxLDExNDoxLDExNToxLDY3NjoxfSksbC51az1mdW5jdGlvbihlKXtyZXR1cm4gZS5UZygpPT10aGlzfSxsLlFnPWZ1bmN0aW9uKGUpe3JldHVybiB5c3QodGhpcyxlKX0sbC5SZz1mdW5jdGlvbihlLG4pe3RoaXMudz1udWxsLHRoaXMuRGI9bjw8MTZ8dGhpcy5EYiYyNTUsdGhpcy5DYj1lfSxsLl9nPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoZWksdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIHRoaXMuRCE9bnVsbD90aGlzLkQ6dGhpcy5CO2Nhc2UgMzpyZXR1cm4gY3codGhpcyk7Y2FzZSA0OnJldHVybiB0aGlzLnpqKCk7Y2FzZSA1OnJldHVybiB0aGlzLkY7Y2FzZSA2OnJldHVybiBuP3psKHRoaXMpOkU4KHRoaXMpO2Nhc2UgNzpyZXR1cm4hdGhpcy5BJiYodGhpcy5BPW5ldyAkdShwdSx0aGlzLDcpKSx0aGlzLkF9cmV0dXJuIGhoKHRoaXMsZS1Kbih0aGlzLnpoKCkpLHduKChzPXUoTW4odGhpcywxNiksMjYpLHN8fHRoaXMuemgoKSksZSksbixyKX0sbC5oaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShlaSx0aGlzLDAsMykpLGV1KHRoaXMuQWIsZSxyKTtjYXNlIDY6cmV0dXJuIHRoaXMuQ2ImJihyPShvPXRoaXMuRGI+PjE2LG8+PTA/eXN0KHRoaXMscik6dGhpcy5DYi5paCh0aGlzLC0xLW8sbnVsbCxyKSkpLFVsKHRoaXMsZSw2LHIpfXJldHVybiBoPXUod24oKHM9dShNbih0aGlzLDE2KSwyNiksc3x8dGhpcy56aCgpKSxuKSw2NiksaC5OaigpLlFqKHRoaXMsdXUodGhpcyksbi1Kbih0aGlzLnpoKCkpLGUscil9LGwuamg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKGVpLHRoaXMsMCwzKSksemEodGhpcy5BYixlLHIpO2Nhc2UgNjpyZXR1cm4gVWwodGhpcyxudWxsLDYscik7Y2FzZSA3OnJldHVybiF0aGlzLkEmJih0aGlzLkE9bmV3ICR1KHB1LHRoaXMsNykpLHphKHRoaXMuQSxlLHIpfXJldHVybiBvPXUod24oKHM9dShNbih0aGlzLDE2KSwyNiksc3x8dGhpcy56aCgpKSxuKSw2Niksby5OaigpLlJqKHRoaXMsdXUodGhpcyksbi1Kbih0aGlzLnpoKCkpLGUscil9LGwubGg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGw7Y2FzZSAyOnJldHVybiB0aGlzLkQhPW51bGwmJnRoaXMuRD09dGhpcy5GO2Nhc2UgMzpyZXR1cm4hIWN3KHRoaXMpO2Nhc2UgNDpyZXR1cm4gdGhpcy56aigpIT1udWxsO2Nhc2UgNTpyZXR1cm4gdGhpcy5GIT1udWxsJiZ0aGlzLkYhPXRoaXMuRCYmdGhpcy5GIT10aGlzLkI7Y2FzZSA2OnJldHVybiEhRTgodGhpcyk7Y2FzZSA3OnJldHVybiEhdGhpcy5BJiZ0aGlzLkEuaSE9MH1yZXR1cm4gdWgodGhpcyxlLUpuKHRoaXMuemgoKSksd24oKG49dShNbih0aGlzLDE2KSwyNiksbnx8dGhpcy56aCgpKSxlKSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXt2YXIgcjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoZWksdGhpcywwLDMpKSxUcih0aGlzLkFiKSwhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKGVpLHRoaXMsMCwzKSksZ3ModGhpcy5BYix1KG4sMTQpKTtyZXR1cm47Y2FzZSAxOnAkKHRoaXMsanIobikpO3JldHVybjtjYXNlIDI6WGV0KHRoaXMsanIobikpO3JldHVybjtjYXNlIDU6RTcodGhpcyxqcihuKSk7cmV0dXJuO2Nhc2UgNzohdGhpcy5BJiYodGhpcy5BPW5ldyAkdShwdSx0aGlzLDcpKSxUcih0aGlzLkEpLCF0aGlzLkEmJih0aGlzLkE9bmV3ICR1KHB1LHRoaXMsNykpLGdzKHRoaXMuQSx1KG4sMTQpKTtyZXR1cm59YmgodGhpcyxlLUpuKHRoaXMuemgoKSksd24oKHI9dShNbih0aGlzLDE2KSwyNikscnx8dGhpcy56aCgpKSxlKSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBsbigpLFc0ZX0sbC5CaD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoZWksdGhpcywwLDMpKSxUcih0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOl90KHRoaXMuQ2IsMTc5KSYmKHUodGhpcy5DYiwxNzkpLnRiPW51bGwpLHR1KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjpYOCh0aGlzLG51bGwpLFI4KHRoaXMsdGhpcy5EKTtyZXR1cm47Y2FzZSA1OkU3KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgNzohdGhpcy5BJiYodGhpcy5BPW5ldyAkdShwdSx0aGlzLDcpKSxUcih0aGlzLkEpO3JldHVybn1naCh0aGlzLGUtSm4odGhpcy56aCgpKSx3bigobj11KE1uKHRoaXMsMTYpLDI2KSxufHx0aGlzLnpoKCkpLGUpKX0sbC55aj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiB0aGlzLkc9PS0xJiYodGhpcy5HPShlPXpsKHRoaXMpLGU/JGcoZS5NaCgpLHRoaXMpOi0xKSksdGhpcy5HfSxsLnpqPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGwuQWo9ZnVuY3Rpb24oKXtyZXR1cm4gemwodGhpcyl9LGwudms9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52fSxsLkJqPWZ1bmN0aW9uKCl7cmV0dXJuIGN3KHRoaXMpfSxsLkNqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuRCE9bnVsbD90aGlzLkQ6dGhpcy5CfSxsLkRqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuRn0sbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gZmF0KHRoaXMsZSl9LGwud2s9ZnVuY3Rpb24oZSl7dGhpcy52PWV9LGwueGs9ZnVuY3Rpb24oZSl7YW5lKHRoaXMsZSl9LGwueWs9ZnVuY3Rpb24oZSl7dGhpcy5DPWV9LGwuTGg9ZnVuY3Rpb24oZSl7cCQodGhpcyxlKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBTeih0aGlzKX0sbC5DPW51bGwsbC5EPW51bGwsbC5HPS0xLE4oTG4sIkVDbGFzc2lmaWVySW1wbCIsMzUxKSxEKDg4LDM1MSx7MTA1OjEsOTI6MSw5MDoxLDI2OjEsMTM4OjEsMTQ3OjEsMTkxOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsODg6MSwzNTE6MSwxNTA6MSw0NzM6MSwxMTQ6MSwxMTU6MSw2NzY6MX0sWEwpLGwudWs9ZnVuY3Rpb24oZSl7cmV0dXJuIHFRZSh0aGlzLGUuVGcoKSl9LGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShlaSx0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLnpiO2Nhc2UgMjpyZXR1cm4gdGhpcy5EIT1udWxsP3RoaXMuRDp0aGlzLkI7Y2FzZSAzOnJldHVybiBjdyh0aGlzKTtjYXNlIDQ6cmV0dXJuIG51bGw7Y2FzZSA1OnJldHVybiB0aGlzLkY7Y2FzZSA2OnJldHVybiBuP3psKHRoaXMpOkU4KHRoaXMpO2Nhc2UgNzpyZXR1cm4hdGhpcy5BJiYodGhpcy5BPW5ldyAkdShwdSx0aGlzLDcpKSx0aGlzLkE7Y2FzZSA4OnJldHVybiBGbigpLCEhKHRoaXMuQmImMjU2KTtjYXNlIDk6cmV0dXJuIEZuKCksISEodGhpcy5CYiY1MTIpO2Nhc2UgMTA6cmV0dXJuIFBvKHRoaXMpO2Nhc2UgMTE6cmV0dXJuIXRoaXMucSYmKHRoaXMucT1uZXcgaGUoWWgsdGhpcywxMSwxMCkpLHRoaXMucTtjYXNlIDEyOnJldHVybiBFNCh0aGlzKTtjYXNlIDEzOnJldHVybiBrQyh0aGlzKTtjYXNlIDE0OnJldHVybiBrQyh0aGlzKSx0aGlzLnI7Y2FzZSAxNTpyZXR1cm4gRTQodGhpcyksdGhpcy5rO2Nhc2UgMTY6cmV0dXJuIHE0dCh0aGlzKTtjYXNlIDE3OnJldHVybiB2YXQodGhpcyk7Y2FzZSAxODpyZXR1cm4gYmQodGhpcyk7Y2FzZSAxOTpyZXR1cm4gY3EodGhpcyk7Y2FzZSAyMDpyZXR1cm4gRTQodGhpcyksdGhpcy5vO2Nhc2UgMjE6cmV0dXJuIXRoaXMucyYmKHRoaXMucz1uZXcgaGUoTnUsdGhpcywyMSwxNykpLHRoaXMucztjYXNlIDIyOnJldHVybiBPYyh0aGlzKTtjYXNlIDIzOnJldHVybiBuYXQodGhpcyl9cmV0dXJuIGhoKHRoaXMsZS1KbigobG4oKSxTYikpLHduKChzPXUoTW4odGhpcywxNiksMjYpLHN8fFNiKSxlKSxuLHIpfSxsLmhoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLGg7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKGVpLHRoaXMsMCwzKSksZXUodGhpcy5BYixlLHIpO2Nhc2UgNjpyZXR1cm4gdGhpcy5DYiYmKHI9KG89dGhpcy5EYj4+MTYsbz49MD95c3QodGhpcyxyKTp0aGlzLkNiLmloKHRoaXMsLTEtbyxudWxsLHIpKSksVWwodGhpcyxlLDYscik7Y2FzZSAxMTpyZXR1cm4hdGhpcy5xJiYodGhpcy5xPW5ldyBoZShZaCx0aGlzLDExLDEwKSksZXUodGhpcy5xLGUscik7Y2FzZSAyMTpyZXR1cm4hdGhpcy5zJiYodGhpcy5zPW5ldyBoZShOdSx0aGlzLDIxLDE3KSksZXUodGhpcy5zLGUscil9cmV0dXJuIGg9dSh3bigocz11KE1uKHRoaXMsMTYpLDI2KSxzfHwobG4oKSxTYikpLG4pLDY2KSxoLk5qKCkuUWoodGhpcyx1dSh0aGlzKSxuLUpuKChsbigpLFNiKSksZSxyKX0sbC5qaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbztzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoZWksdGhpcywwLDMpKSx6YSh0aGlzLkFiLGUscik7Y2FzZSA2OnJldHVybiBVbCh0aGlzLG51bGwsNixyKTtjYXNlIDc6cmV0dXJuIXRoaXMuQSYmKHRoaXMuQT1uZXcgJHUocHUsdGhpcyw3KSksemEodGhpcy5BLGUscik7Y2FzZSAxMTpyZXR1cm4hdGhpcy5xJiYodGhpcy5xPW5ldyBoZShZaCx0aGlzLDExLDEwKSksemEodGhpcy5xLGUscik7Y2FzZSAyMTpyZXR1cm4hdGhpcy5zJiYodGhpcy5zPW5ldyBoZShOdSx0aGlzLDIxLDE3KSksemEodGhpcy5zLGUscik7Y2FzZSAyMjpyZXR1cm4gemEoT2ModGhpcyksZSxyKX1yZXR1cm4gbz11KHduKChzPXUoTW4odGhpcywxNiksMjYpLHN8fChsbigpLFNiKSksbiksNjYpLG8uTmooKS5Saih0aGlzLHV1KHRoaXMpLG4tSm4oKGxuKCksU2IpKSxlLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3ZhciBuO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLnpiIT1udWxsO2Nhc2UgMjpyZXR1cm4gdGhpcy5EIT1udWxsJiZ0aGlzLkQ9PXRoaXMuRjtjYXNlIDM6cmV0dXJuISFjdyh0aGlzKTtjYXNlIDQ6cmV0dXJuITE7Y2FzZSA1OnJldHVybiB0aGlzLkYhPW51bGwmJnRoaXMuRiE9dGhpcy5EJiZ0aGlzLkYhPXRoaXMuQjtjYXNlIDY6cmV0dXJuISFFOCh0aGlzKTtjYXNlIDc6cmV0dXJuISF0aGlzLkEmJnRoaXMuQS5pIT0wO2Nhc2UgODpyZXR1cm4odGhpcy5CYiYyNTYpIT0wO2Nhc2UgOTpyZXR1cm4odGhpcy5CYiY1MTIpIT0wO2Nhc2UgMTA6cmV0dXJuISF0aGlzLnUmJk9jKHRoaXMudS5hKS5pIT0wJiYhKHRoaXMubiYmdXN0KHRoaXMubikpO2Nhc2UgMTE6cmV0dXJuISF0aGlzLnEmJnRoaXMucS5pIT0wO2Nhc2UgMTI6cmV0dXJuIEU0KHRoaXMpLmkhPTA7Y2FzZSAxMzpyZXR1cm4ga0ModGhpcykuaSE9MDtjYXNlIDE0OnJldHVybiBrQyh0aGlzKSx0aGlzLnIuaSE9MDtjYXNlIDE1OnJldHVybiBFNCh0aGlzKSx0aGlzLmsuaSE9MDtjYXNlIDE2OnJldHVybiBxNHQodGhpcykuaSE9MDtjYXNlIDE3OnJldHVybiB2YXQodGhpcykuaSE9MDtjYXNlIDE4OnJldHVybiBiZCh0aGlzKS5pIT0wO2Nhc2UgMTk6cmV0dXJuIGNxKHRoaXMpLmkhPTA7Y2FzZSAyMDpyZXR1cm4gRTQodGhpcyksISF0aGlzLm87Y2FzZSAyMTpyZXR1cm4hIXRoaXMucyYmdGhpcy5zLmkhPTA7Y2FzZSAyMjpyZXR1cm4hIXRoaXMubiYmdXN0KHRoaXMubik7Y2FzZSAyMzpyZXR1cm4gbmF0KHRoaXMpLmkhPTB9cmV0dXJuIHVoKHRoaXMsZS1KbigobG4oKSxTYikpLHduKChuPXUoTW4odGhpcywxNiksMjYpLG58fFNiKSxlKSl9LGwub2g9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49dGhpcy5pPT1udWxsfHx0aGlzLnEmJnRoaXMucS5pIT0wP251bGw6Z0kodGhpcyxlKSxufHxtNnQodGhpcyxlKX0sbC5zaD1mdW5jdGlvbihlLG4pe3ZhciByO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShlaSx0aGlzLDAsMykpLFRyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoZWksdGhpcywwLDMpKSxncyh0aGlzLkFiLHUobiwxNCkpO3JldHVybjtjYXNlIDE6cCQodGhpcyxqcihuKSk7cmV0dXJuO2Nhc2UgMjpYZXQodGhpcyxqcihuKSk7cmV0dXJuO2Nhc2UgNTpFNyh0aGlzLGpyKG4pKTtyZXR1cm47Y2FzZSA3OiF0aGlzLkEmJih0aGlzLkE9bmV3ICR1KHB1LHRoaXMsNykpLFRyKHRoaXMuQSksIXRoaXMuQSYmKHRoaXMuQT1uZXcgJHUocHUsdGhpcyw3KSksZ3ModGhpcy5BLHUobiwxNCkpO3JldHVybjtjYXNlIDg6V3l0KHRoaXMsQmUoRmUobikpKTtyZXR1cm47Y2FzZSA5Okt5dCh0aGlzLEJlKEZlKG4pKSk7cmV0dXJuO2Nhc2UgMTA6X0MoUG8odGhpcykpLGdzKFBvKHRoaXMpLHUobiwxNCkpO3JldHVybjtjYXNlIDExOiF0aGlzLnEmJih0aGlzLnE9bmV3IGhlKFloLHRoaXMsMTEsMTApKSxUcih0aGlzLnEpLCF0aGlzLnEmJih0aGlzLnE9bmV3IGhlKFloLHRoaXMsMTEsMTApKSxncyh0aGlzLnEsdShuLDE0KSk7cmV0dXJuO2Nhc2UgMjE6IXRoaXMucyYmKHRoaXMucz1uZXcgaGUoTnUsdGhpcywyMSwxNykpLFRyKHRoaXMucyksIXRoaXMucyYmKHRoaXMucz1uZXcgaGUoTnUsdGhpcywyMSwxNykpLGdzKHRoaXMucyx1KG4sMTQpKTtyZXR1cm47Y2FzZSAyMjpUcihPYyh0aGlzKSksZ3MoT2ModGhpcyksdShuLDE0KSk7cmV0dXJufWJoKHRoaXMsZS1KbigobG4oKSxTYikpLHduKChyPXUoTW4odGhpcywxNiksMjYpLHJ8fFNiKSxlKSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBsbigpLFNifSxsLkJoPWZ1bmN0aW9uKGUpe3ZhciBuO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShlaSx0aGlzLDAsMykpLFRyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6X3QodGhpcy5DYiwxNzkpJiYodSh0aGlzLkNiLDE3OSkudGI9bnVsbCksdHUodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOlg4KHRoaXMsbnVsbCksUjgodGhpcyx0aGlzLkQpO3JldHVybjtjYXNlIDU6RTcodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA3OiF0aGlzLkEmJih0aGlzLkE9bmV3ICR1KHB1LHRoaXMsNykpLFRyKHRoaXMuQSk7cmV0dXJuO2Nhc2UgODpXeXQodGhpcywhMSk7cmV0dXJuO2Nhc2UgOTpLeXQodGhpcywhMSk7cmV0dXJuO2Nhc2UgMTA6dGhpcy51JiZfQyh0aGlzLnUpO3JldHVybjtjYXNlIDExOiF0aGlzLnEmJih0aGlzLnE9bmV3IGhlKFloLHRoaXMsMTEsMTApKSxUcih0aGlzLnEpO3JldHVybjtjYXNlIDIxOiF0aGlzLnMmJih0aGlzLnM9bmV3IGhlKE51LHRoaXMsMjEsMTcpKSxUcih0aGlzLnMpO3JldHVybjtjYXNlIDIyOnRoaXMubiYmVHIodGhpcy5uKTtyZXR1cm59Z2godGhpcyxlLUpuKChsbigpLFNiKSksd24oKG49dShNbih0aGlzLDE2KSwyNiksbnx8U2IpLGUpKX0sbC5HaD1mdW5jdGlvbigpe3ZhciBlLG47aWYoRTQodGhpcyksa0ModGhpcykscTR0KHRoaXMpLHZhdCh0aGlzKSxiZCh0aGlzKSxjcSh0aGlzKSxuYXQodGhpcyksUl8oc3RuKGhsKHRoaXMpKSksdGhpcy5zKWZvcihlPTAsbj10aGlzLnMuaTtlPG47KytlKUZNKEF0KHRoaXMucyxlKSk7aWYodGhpcy5xKWZvcihlPTAsbj10aGlzLnEuaTtlPG47KytlKUZNKEF0KHRoaXMucSxlKSk7QmcoKEd1KCksU2EpLHRoaXMpLm5lKCksdGhpcy5CYnw9MX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBsNHQodGhpcyl9LGwuaz1udWxsLGwucj1udWxsO3ZhciBhQSxyNWUsQWZ0O04oTG4sIkVDbGFzc0ltcGwiLDg4KSxEKDE5OTQsMTk5MyxrMGUpLGwuVmg9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZGF0KHRoaXMsZSxuKX0sbC5XaD1mdW5jdGlvbihlKXtyZXR1cm4gZGF0KHRoaXMsdGhpcy5pLGUpfSxsLlhoPWZ1bmN0aW9uKGUsbil7cjV0KHRoaXMsZSxuKX0sbC5ZaD1mdW5jdGlvbihlKXtHc3QodGhpcyxlKX0sbC5saz1mdW5jdGlvbihlLG4pe3JldHVybiBldSh0aGlzLGUsbil9LGwucGk9ZnVuY3Rpb24oZSl7cmV0dXJuIF9tdCh0aGlzLGUpfSxsLm1rPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHphKHRoaXMsZSxuKX0sbC5taT1mdW5jdGlvbihlLG4pe3JldHVybiBibGUodGhpcyxlLG4pfSxsLlpoPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBMNih0aGlzKX0sbC4kaD1mdW5jdGlvbigpe3JldHVybiBuZXcgUE0odGhpcyl9LGwuX2g9ZnVuY3Rpb24oZSl7cmV0dXJuIENEKHRoaXMsZSl9LE4oWWksIk5vdGlmeWluZ0ludGVybmFsRUxpc3RJbXBsIiwxOTk0KSxEKDYyMiwxOTk0LEtvKSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBObGUodGhpcyxlKX0sbC5aaT1mdW5jdGlvbihlLG4scixzLG8pe3JldHVybiBJXyh0aGlzLGUsbixyLHMsbyl9LGwuJGk9ZnVuY3Rpb24oZSl7VWsodGhpcyxlKX0sbC5Xaj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpc30sbC5haz1mdW5jdGlvbigpe3JldHVybiB3bih0aGlzLmUuVGcoKSx0aGlzLmFqKCkpfSxsLl9pPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWsoKX0sbC5haj1mdW5jdGlvbigpe3JldHVybiBlcyh0aGlzLmUuVGcoKSx0aGlzLmFrKCkpfSxsLnprPWZ1bmN0aW9uKCl7cmV0dXJuIHUodGhpcy5haygpLllqKCksMjYpLkJqKCl9LGwuQWs9ZnVuY3Rpb24oKXtyZXR1cm4gb28odSh0aGlzLmFrKCksMTgpKS5ufSxsLkFpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZX0sbC5Caz1mdW5jdGlvbigpe3JldHVybiEwfSxsLkNrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuRGs9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5Faz1mdW5jdGlvbigpe3JldHVybiExfSxsLlhjPWZ1bmN0aW9uKGUpe3JldHVybiAkZyh0aGlzLGUpfSxsLmNqPWZ1bmN0aW9uKGUsbil7dmFyIHI7cmV0dXJuIHI9dShlLDQ5KSx0aGlzLkRrKCk/dGhpcy5CaygpP3IuZ2godGhpcy5lLHRoaXMuQWsoKSx0aGlzLnprKCksbik6ci5naCh0aGlzLmUsZXMoci5UZygpLG9vKHUodGhpcy5haygpLDE4KSkpLG51bGwsbik6ci5naCh0aGlzLmUsLTEtdGhpcy5haigpLG51bGwsbil9LGwuZGo9ZnVuY3Rpb24oZSxuKXt2YXIgcjtyZXR1cm4gcj11KGUsNDkpLHRoaXMuRGsoKT90aGlzLkJrKCk/ci5paCh0aGlzLmUsdGhpcy5BaygpLHRoaXMuemsoKSxuKTpyLmloKHRoaXMuZSxlcyhyLlRnKCksb28odSh0aGlzLmFrKCksMTgpKSksbnVsbCxuKTpyLmloKHRoaXMuZSwtMS10aGlzLmFqKCksbnVsbCxuKX0sbC5yaz1mdW5jdGlvbigpe3JldHVybiExfSxsLkZrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIE1adCh0aGlzLmQsZSl9LGwuZWo9ZnVuY3Rpb24oKXtyZXR1cm4gU2wodGhpcy5lKX0sbC5maj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmkhPTB9LGwucmk9ZnVuY3Rpb24oZSl7cmV0dXJuIF9EKHRoaXMuZCxlKX0sbC5saT1mdW5jdGlvbihlLG4pe3JldHVybiB0aGlzLkZrKCkmJnRoaXMuRWsoKT9heCh0aGlzLGUsdShuLDU2KSk6bn0sbC5Haz1mdW5jdGlvbihlKXtyZXR1cm4gZS5raCgpP1hwKHRoaXMuZSx1KGUsNDkpKTplfSxsLldiPWZ1bmN0aW9uKGUpe0xVdCh0aGlzLGUpfSxsLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIGd0ZSh0aGlzKX0sbC5RYz1mdW5jdGlvbihlKXt2YXIgbjtpZih0aGlzLkVrKCkpZm9yKG49dGhpcy5pLTE7bj49MDstLW4pQXQodGhpcyxuKTtyZXR1cm4gYjN0KHRoaXMsZSl9LGwuWGo9ZnVuY3Rpb24oKXtUcih0aGlzKX0sbC5vaT1mdW5jdGlvbihlLG4pe3JldHVybiBMZWUodGhpcyxlLG4pfSxOKFlpLCJFY29yZUVMaXN0Iiw2MjIpLEQoNDk2LDYyMixLbyxXTSksbC5haT1mdW5jdGlvbigpe3JldHVybiExfSxsLmFqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY30sbC5iaj1mdW5jdGlvbigpe3JldHVybiExfSxsLkZrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwuaGk9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5saT1mdW5jdGlvbihlLG4pe3JldHVybiBufSxsLm5pPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuYz0wLE4oWWksIkVPYmplY3RFTGlzdCIsNDk2KSxEKDg1LDQ5NixLbyxCcyksbC5iaj1mdW5jdGlvbigpe3JldHVybiEwfSxsLkRrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwucms9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sTihZaSwiRU9iamVjdENvbnRhaW5tZW50RUxpc3QiLDg1KSxEKDU0NSw4NSxLbyxoaiksbC5jaT1mdW5jdGlvbigpe3RoaXMuYj0hMH0sbC5maj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuWGo9ZnVuY3Rpb24oKXt2YXIgZTtUcih0aGlzKSxTbCh0aGlzLmUpPyhlPXRoaXMuYix0aGlzLmI9ITEsQ2kodGhpcy5lLG5ldyBiZih0aGlzLmUsMix0aGlzLmMsZSwhMSkpKTp0aGlzLmI9ITF9LGwuYj0hMSxOKFlpLCJFT2JqZWN0Q29udGFpbm1lbnRFTGlzdC9VbnNldHRhYmxlIiw1NDUpLEQoMTE0MCw1NDUsS28scFl0KSxsLmlpPWZ1bmN0aW9uKGUsbil7dmFyIHIscztyZXR1cm4gcj11KHRDKHRoaXMsZSxuKSw4NyksU2wodGhpcy5lKSYmVWsodGhpcyxuZXcgZ0QodGhpcy5hLDcsKGxuKCksSzRlKSxkZShuKSwocz1yLmMsX3Qocyw4OCk/dShzLDI2KTpRaCksZSkpLHJ9LGwuamo9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gV2xuKHRoaXMsdShlLDg3KSxuKX0sbC5raj1mdW5jdGlvbihlLG4pe3JldHVybiBVbG4odGhpcyx1KGUsODcpLG4pfSxsLmxqPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gSzFuKHRoaXMsdShlLDg3KSx1KG4sODcpLHIpfSxsLlppPWZ1bmN0aW9uKGUsbixyLHMsbyl7c3dpdGNoKGUpe2Nhc2UgMzpyZXR1cm4gSV8odGhpcyxlLG4scixzLHRoaXMuaT4xKTtjYXNlIDU6cmV0dXJuIElfKHRoaXMsZSxuLHIscyx0aGlzLmktdShyLDE1KS5nYygpPjApO2RlZmF1bHQ6cmV0dXJuIG5ldyBGMCh0aGlzLmUsZSx0aGlzLmMsbixyLHMsITApfX0sbC5paj1mdW5jdGlvbigpe3JldHVybiEwfSxsLmZqPWZ1bmN0aW9uKCl7cmV0dXJuIHVzdCh0aGlzKX0sbC5Yaj1mdW5jdGlvbigpe1RyKHRoaXMpfSxOKExuLCJFQ2xhc3NJbXBsLzEiLDExNDApLEQoMTE1NCwxMTUzLFM4dCksbC51aT1mdW5jdGlvbihlKXt2YXIgbixyLHMsbyxoLGQsdztpZihyPWUueGkoKSxyIT04KXtpZihzPU1obihlKSxzPT0wKXN3aXRjaChyKXtjYXNlIDE6Y2FzZSA5Ont3PWUuQmkoKSx3IT1udWxsJiYobj1obCh1KHcsNDczKSksIW4uYyYmKG4uYz1uZXcgeG0pLGokKG4uYyxlLkFpKCkpKSxkPWUuemkoKSxkIT1udWxsJiYobz11KGQsNDczKSxvLkJiJjF8fChuPWhsKG8pLCFuLmMmJihuLmM9bmV3IHhtKSxPcihuLmMsdShlLkFpKCksMjYpKSkpO2JyZWFrfWNhc2UgMzp7ZD1lLnppKCksZCE9bnVsbCYmKG89dShkLDQ3Myksby5CYiYxfHwobj1obChvKSwhbi5jJiYobi5jPW5ldyB4bSksT3Iobi5jLHUoZS5BaSgpLDI2KSkpKTticmVha31jYXNlIDU6e2lmKGQ9ZS56aSgpLGQhPW51bGwpZm9yKGg9dShkLDE0KS5LYygpO2guT2IoKTspbz11KGguUGIoKSw0NzMpLG8uQmImMXx8KG49aGwobyksIW4uYyYmKG4uYz1uZXcgeG0pLE9yKG4uYyx1KGUuQWkoKSwyNikpKTticmVha31jYXNlIDQ6e3c9ZS5CaSgpLHchPW51bGwmJihvPXUodyw0NzMpLG8uQmImMXx8KG49aGwobyksIW4uYyYmKG4uYz1uZXcgeG0pLGokKG4uYyxlLkFpKCkpKSk7YnJlYWt9Y2FzZSA2OntpZih3PWUuQmkoKSx3IT1udWxsKWZvcihoPXUodywxNCkuS2MoKTtoLk9iKCk7KW89dShoLlBiKCksNDczKSxvLkJiJjF8fChuPWhsKG8pLCFuLmMmJihuLmM9bmV3IHhtKSxqJChuLmMsZS5BaSgpKSk7YnJlYWt9fXRoaXMuSGsocyl9fSxsLkhrPWZ1bmN0aW9uKGUpe2d1ZSh0aGlzLGUpfSxsLmI9NjMsTihMbiwiRVN1cGVyQWRhcHRlciIsMTE1NCksRCgxMTU1LDExNTQsUzh0LFN6dCksbC5Iaz1mdW5jdGlvbihlKXtoeSh0aGlzLGUpfSxOKExuLCJFQ2xhc3NJbXBsLzEwIiwxMTU1KSxEKDExNDQsNjk2LEtvKSxsLlZoPWZ1bmN0aW9uKGUsbil7cmV0dXJuIERzdCh0aGlzLGUsbil9LGwuV2g9ZnVuY3Rpb24oZSl7cmV0dXJuIGxzZSh0aGlzLGUpfSxsLlhoPWZ1bmN0aW9uKGUsbil7ekQodGhpcyxlLG4pfSxsLlloPWZ1bmN0aW9uKGUpe3VEKHRoaXMsZSl9LGwucGk9ZnVuY3Rpb24oZSl7cmV0dXJuIF9tdCh0aGlzLGUpfSxsLm1pPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFhydCh0aGlzLGUsbil9LGwubGs9ZnVuY3Rpb24oZSxuKXt0aHJvdyBudChuZXcgUHIpfSxsLlpoPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBMNih0aGlzKX0sbC4kaD1mdW5jdGlvbigpe3JldHVybiBuZXcgUE0odGhpcyl9LGwuX2g9ZnVuY3Rpb24oZSl7cmV0dXJuIENEKHRoaXMsZSl9LGwubWs9ZnVuY3Rpb24oZSxuKXt0aHJvdyBudChuZXcgUHIpfSxsLldqPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzfSxsLmZqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaSE9MH0sbC5XYj1mdW5jdGlvbihlKXt0aHJvdyBudChuZXcgUHIpfSxsLlhqPWZ1bmN0aW9uKCl7dGhyb3cgbnQobmV3IFByKX0sTihZaSwiRWNvcmVFTGlzdC9Vbm1vZGlmaWFibGVFTGlzdCIsMTE0NCksRCgzMTksMTE0NCxLbyxIMyksbC5uaT1mdW5jdGlvbigpe3JldHVybiExfSxOKFlpLCJFY29yZUVMaXN0L1VubW9kaWZpYWJsZUVMaXN0L0Zhc3RDb21wYXJlIiwzMTkpLEQoMTE0NywzMTksS28sWm5lKSxsLlhjPWZ1bmN0aW9uKGUpe3ZhciBuLHIscztpZihfdChlLDE3MCkmJihuPXUoZSwxNzApLHI9bi5haigpLHIhPS0xKSl7Zm9yKHM9dGhpcy5pO3I8czsrK3IpaWYoR3QodGhpcy5nW3JdKT09PUd0KGUpKXJldHVybiByfXJldHVybi0xfSxOKExuLCJFQ2xhc3NJbXBsLzFFQWxsU3RydWN0dXJhbEZlYXR1cmVzTGlzdCIsMTE0NyksRCgxMTQxLDQ5NyxTZCxlNiksbC5yaT1mdW5jdGlvbihlKXtyZXR1cm4gTnQod28sRTBlLDg3LGUsMCwxKX0sbC5uaT1mdW5jdGlvbigpe3JldHVybiExfSxOKExuLCJFQ2xhc3NJbXBsLzFFR2VuZXJpY1N1cGVyVHlwZUVMaXN0IiwxMTQxKSxEKDYyMyw0OTcsU2QsVmIpLGwucmk9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KE51LEY0LDE3MCxlLDAsMSl9LGwubmk9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sTihMbiwiRUNsYXNzSW1wbC8xRVN0cnVjdHVyYWxGZWF0dXJlVW5pcXVlRUxpc3QiLDYyMyksRCg3NDEsNDk3LFNkLF8wKSxsLnJpPWZ1bmN0aW9uKGUpe3JldHVybiBOdChKeSxGNCwxOCxlLDAsMSl9LGwubmk9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sTihMbiwiRUNsYXNzSW1wbC8xUmVmZXJlbmNlTGlzdCIsNzQxKSxEKDExNDIsNDk3LFNkLEF6dCksbC5iaT1mdW5jdGlvbihlLG4pe1h0bih0aGlzLHUobiwzNCkpfSxsLnJpPWZ1bmN0aW9uKGUpe3JldHVybiBOdChaeSxGNCwzNCxlLDAsMSl9LGwubmk9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sTihMbiwiRUNsYXNzSW1wbC8yIiwxMTQyKSxEKDExNDMsNDk3LFNkLHhwKSxsLnJpPWZ1bmN0aW9uKGUpe3JldHVybiBOdChaeSxGNCwzNCxlLDAsMSl9LGwubmk9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sTihMbiwiRUNsYXNzSW1wbC8zIiwxMTQzKSxEKDExNDUsMzE5LEtvLElLdCksbC5GYz1mdW5jdGlvbihlKXtyZXR1cm4gSkplKHRoaXMsdShlLDM0KSl9LGwuWWg9ZnVuY3Rpb24oZSl7b1llKHRoaXMsdShlLDM0KSl9LE4oTG4sIkVDbGFzc0ltcGwvNCIsMTE0NSksRCgxMTQ2LDMxOSxLbyxPS3QpLGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHR0bih0aGlzLHUoZSwxOCkpfSxsLlloPWZ1bmN0aW9uKGUpe2NZZSh0aGlzLHUoZSwxOCkpfSxOKExuLCJFQ2xhc3NJbXBsLzUiLDExNDYpLEQoMTE0OCw0OTcsU2QsQTMpLGwucmk9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KFloLE04dCw1OSxlLDAsMSl9LGwubmk9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sTihMbiwiRUNsYXNzSW1wbC82IiwxMTQ4KSxEKDExNDksNDk3LFNkLF9rKSxsLnJpPWZ1bmN0aW9uKGUpe3JldHVybiBOdChKeSxGNCwxOCxlLDAsMSl9LGwubmk9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sTihMbiwiRUNsYXNzSW1wbC83IiwxMTQ5KSxEKDE5OTcsMTk5Nix7MzoxLDQ6MSwyMDoxLDI4OjEsNTI6MSwxNDoxLDE1OjEsNjc6MSw1ODoxLDY5OjF9KSxsLlZoPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFk1dCh0aGlzLGUsbil9LGwuV2g9ZnVuY3Rpb24oZSl7cmV0dXJuIFk1dCh0aGlzLHRoaXMuVmkoKSxlKX0sbC5YaD1mdW5jdGlvbihlLG4pe1dvZSh0aGlzLGUsbil9LGwuWWg9ZnVuY3Rpb24oZSl7Um9lKHRoaXMsZSl9LGwubGs9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gYmZuKHRoaXMsZSxuKX0sbC5taz1mdW5jdGlvbihlLG4pe3JldHVybiAkaG4odGhpcyxlLG4pfSxsLm1pPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGVsZSh0aGlzLGUsbil9LGwucGk9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuT2koZSl9LGwuWmg9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEw2KHRoaXMpfSxsLkdpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuSmkoKX0sbC4kaD1mdW5jdGlvbigpe3JldHVybiBuZXcgUE0odGhpcyl9LGwuX2g9ZnVuY3Rpb24oZSl7cmV0dXJuIENEKHRoaXMsZSl9LE4oWWksIkRlbGVnYXRpbmdOb3RpZnlpbmdJbnRlcm5hbEVMaXN0SW1wbCIsMTk5NyksRCg3NDIsMTk5NyxEOHQpLGwuYWk9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT13bihrdSh0aGlzLmIpLHRoaXMuYWooKSkuWWooKSxfdChlLDE0OCkmJiFfdChlLDQ1NykmJihlLkJqKCkuaSYxKT09MH0sbC5IYz1mdW5jdGlvbihlKXt2YXIgbixyLHMsbyxoLGQsdyxrO2lmKHRoaXMuRmsoKSl7aWYoaz10aGlzLlZpKCksaz40KWlmKHRoaXMud2ooZSkpe2lmKHRoaXMucmsoKSl7aWYocz11KGUsNDkpLHI9cy5VZygpLHc9cj09dGhpcy5iJiYodGhpcy5EaygpP3MuT2cocy5WZygpLHUod24oa3UodGhpcy5iKSx0aGlzLmFqKCkpLllqKCksMjYpLkJqKCkpPT1vbyh1KHduKGt1KHRoaXMuYiksdGhpcy5haigpKSwxOCkpLm46LTEtcy5WZygpPT10aGlzLmFqKCkpLHRoaXMuRWsoKSYmIXcmJiFyJiZzLlpnKCkpe2ZvcihvPTA7bzxrOysrbylpZihuPVJudCh0aGlzLHRoaXMuT2kobykpLEd0KG4pPT09R3QoZSkpcmV0dXJuITB9cmV0dXJuIHd9ZWxzZSBpZih0aGlzLkRrKCkmJiF0aGlzLkNrKCkpe2lmKGg9dShlLDU2KS5haChvbyh1KHduKGt1KHRoaXMuYiksdGhpcy5haigpKSwxOCkpKSxHdChoKT09PUd0KHRoaXMuYikpcmV0dXJuITA7aWYoaD09bnVsbHx8IXUoaCw1Nikua2goKSlyZXR1cm4hMX19ZWxzZSByZXR1cm4hMTtpZihkPXRoaXMuTGkoZSksdGhpcy5FaygpJiYhZCl7Zm9yKG89MDtvPGs7KytvKWlmKHM9Um50KHRoaXMsdGhpcy5PaShvKSksR3Qocyk9PT1HdChlKSlyZXR1cm4hMH1yZXR1cm4gZH1lbHNlIHJldHVybiB0aGlzLkxpKGUpfSxsLlppPWZ1bmN0aW9uKGUsbixyLHMsbyl7cmV0dXJuIG5ldyBGMCh0aGlzLmIsZSx0aGlzLmFqKCksbixyLHMsbyl9LGwuJGk9ZnVuY3Rpb24oZSl7Q2kodGhpcy5iLGUpfSxsLldqPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzfSxsLl9pPWZ1bmN0aW9uKCl7cmV0dXJuIHduKGt1KHRoaXMuYiksdGhpcy5haigpKX0sbC5haj1mdW5jdGlvbigpe3JldHVybiBlcyhrdSh0aGlzLmIpLHduKGt1KHRoaXMuYiksdGhpcy5haigpKSl9LGwuQWk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxsLkJrPWZ1bmN0aW9uKCl7cmV0dXJuISF3bihrdSh0aGlzLmIpLHRoaXMuYWooKSkuWWooKS5CaigpfSxsLmJqPWZ1bmN0aW9uKCl7dmFyIGUsbjtyZXR1cm4gbj13bihrdSh0aGlzLmIpLHRoaXMuYWooKSksX3Qobiw5OSk/KGU9dShuLDE4KSwoZS5CYiZ5YykhPTB8fCEhb28odShuLDE4KSkpOiExfSxsLkNrPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHM7cmV0dXJuIG49d24oa3UodGhpcy5iKSx0aGlzLmFqKCkpLF90KG4sOTkpPyhlPXUobiwxOCkscj1vbyhlKSwhIXImJihzPXIudCxzPjF8fHM9PS0xKSk6ITF9LGwuRGs9ZnVuY3Rpb24oKXt2YXIgZSxuLHI7cmV0dXJuIG49d24oa3UodGhpcy5iKSx0aGlzLmFqKCkpLF90KG4sOTkpPyhlPXUobiwxOCkscj1vbyhlKSwhIXIpOiExfSxsLkVrPWZ1bmN0aW9uKCl7dmFyIGUsbjtyZXR1cm4gbj13bihrdSh0aGlzLmIpLHRoaXMuYWooKSksX3Qobiw5OSk/KGU9dShuLDE4KSwoZS5CYiZRYSkhPTApOiExfSxsLlhjPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvO2lmKHM9dGhpcy5RaShlKSxzPj0wKXJldHVybiBzO2lmKHRoaXMuRmsoKSl7Zm9yKHI9MCxvPXRoaXMuVmkoKTtyPG87KytyKWlmKG49Um50KHRoaXMsdGhpcy5PaShyKSksR3Qobik9PT1HdChlKSlyZXR1cm4gcn1yZXR1cm4tMX0sbC5jaj1mdW5jdGlvbihlLG4pe3ZhciByO3JldHVybiByPXUoZSw0OSksdGhpcy5EaygpP3RoaXMuQmsoKT9yLmdoKHRoaXMuYixvbyh1KHduKGt1KHRoaXMuYiksdGhpcy5haigpKSwxOCkpLm4sdSh3bihrdSh0aGlzLmIpLHRoaXMuYWooKSkuWWooKSwyNikuQmooKSxuKTpyLmdoKHRoaXMuYixlcyhyLlRnKCksb28odSh3bihrdSh0aGlzLmIpLHRoaXMuYWooKSksMTgpKSksbnVsbCxuKTpyLmdoKHRoaXMuYiwtMS10aGlzLmFqKCksbnVsbCxuKX0sbC5kaj1mdW5jdGlvbihlLG4pe3ZhciByO3JldHVybiByPXUoZSw0OSksdGhpcy5EaygpP3RoaXMuQmsoKT9yLmloKHRoaXMuYixvbyh1KHduKGt1KHRoaXMuYiksdGhpcy5haigpKSwxOCkpLm4sdSh3bihrdSh0aGlzLmIpLHRoaXMuYWooKSkuWWooKSwyNikuQmooKSxuKTpyLmloKHRoaXMuYixlcyhyLlRnKCksb28odSh3bihrdSh0aGlzLmIpLHRoaXMuYWooKSksMTgpKSksbnVsbCxuKTpyLmloKHRoaXMuYiwtMS10aGlzLmFqKCksbnVsbCxuKX0sbC5yaz1mdW5jdGlvbigpe3ZhciBlLG47cmV0dXJuIG49d24oa3UodGhpcy5iKSx0aGlzLmFqKCkpLF90KG4sOTkpPyhlPXUobiwxOCksKGUuQmImeWMpIT0wKTohMX0sbC5Gaz1mdW5jdGlvbigpe3JldHVybiBfdCh3bihrdSh0aGlzLmIpLHRoaXMuYWooKSkuWWooKSw4OCl9LGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIHduKGt1KHRoaXMuYiksdGhpcy5haigpKS5ZaigpLndqKGUpfSxsLmVqPWZ1bmN0aW9uKCl7cmV0dXJuIFNsKHRoaXMuYil9LGwuZmo9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5SaSgpfSxsLmhpPWZ1bmN0aW9uKCl7cmV0dXJuIHduKGt1KHRoaXMuYiksdGhpcy5haigpKS5oaSgpfSxsLmxpPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEVJKHRoaXMsZSxuKX0sbC5XYj1mdW5jdGlvbihlKXtfQyh0aGlzKSxncyh0aGlzLHUoZSwxNSkpfSxsLlBjPWZ1bmN0aW9uKCl7dmFyIGU7aWYodGhpcy5FaygpKWZvcihlPXRoaXMuVmkoKS0xO2U+PTA7LS1lKUVJKHRoaXMsZSx0aGlzLk9pKGUpKTtyZXR1cm4gdGhpcy5XaSgpfSxsLlFjPWZ1bmN0aW9uKGUpe3ZhciBuO2lmKHRoaXMuRWsoKSlmb3Iobj10aGlzLlZpKCktMTtuPj0wOy0tbilFSSh0aGlzLG4sdGhpcy5PaShuKSk7cmV0dXJuIHRoaXMuWGkoZSl9LGwuWGo9ZnVuY3Rpb24oKXtfQyh0aGlzKX0sbC5vaT1mdW5jdGlvbihlLG4pe3JldHVybiBkdGUodGhpcyxlLG4pfSxOKFlpLCJEZWxlZ2F0aW5nRWNvcmVFTGlzdCIsNzQyKSxEKDExNTAsNzQyLEQ4dCxNV3QpLGwuSGk9ZnVuY3Rpb24oZSxuKXtiUWUodGhpcyxlLHUobiwyNikpfSxsLklpPWZ1bmN0aW9uKGUpe2xYZSh0aGlzLHUoZSwyNikpfSxsLk9pPWZ1bmN0aW9uKGUpe3ZhciBuLHI7cmV0dXJuIG49dShBdChPYyh0aGlzLmEpLGUpLDg3KSxyPW4uYyxfdChyLDg4KT91KHIsMjYpOihsbigpLFFoKX0sbC5UaT1mdW5jdGlvbihlKXt2YXIgbixyO3JldHVybiBuPXUoZHkoT2ModGhpcy5hKSxlKSw4Nykscj1uLmMsX3Qociw4OCk/dShyLDI2KToobG4oKSxRaCl9LGwuVWk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdmZuKHRoaXMsZSx1KG4sMjYpKX0sbC5haT1mdW5jdGlvbigpe3JldHVybiExfSxsLlppPWZ1bmN0aW9uKGUsbixyLHMsbyl7cmV0dXJuIG51bGx9LGwuSmk9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEx6dCh0aGlzKX0sbC5LaT1mdW5jdGlvbigpe1RyKE9jKHRoaXMuYSkpfSxsLkxpPWZ1bmN0aW9uKGUpe3JldHVybiBIcmUodGhpcyxlKX0sbC5NaT1mdW5jdGlvbihlKXt2YXIgbixyO2ZvcihyPWUuS2MoKTtyLk9iKCk7KWlmKG49ci5QYigpLCFIcmUodGhpcyxuKSlyZXR1cm4hMTtyZXR1cm4hMH0sbC5OaT1mdW5jdGlvbihlKXt2YXIgbixyLHM7aWYoX3QoZSwxNSkmJihzPXUoZSwxNSkscy5nYygpPT1PYyh0aGlzLmEpLmkpKXtmb3Iobj1zLktjKCkscj1uZXcgbnIodGhpcyk7bi5PYigpOylpZihHdChuLlBiKCkpIT09R3QoZHIocikpKXJldHVybiExO3JldHVybiEwfXJldHVybiExfSxsLlBpPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHMsbztmb3Iocj0xLG49bmV3IG5yKE9jKHRoaXMuYSkpO24uZSE9bi5pLmdjKCk7KWU9dShkcihuKSw4Nykscz0obz1lLmMsX3Qobyw4OCk/dShvLDI2KToobG4oKSxRaCkpLHI9MzEqcisocz9EdihzKTowKTtyZXR1cm4gcn0sbC5RaT1mdW5jdGlvbihlKXt2YXIgbixyLHMsbztmb3Iocz0wLHI9bmV3IG5yKE9jKHRoaXMuYSkpO3IuZSE9ci5pLmdjKCk7KXtpZihuPXUoZHIociksODcpLEd0KGUpPT09R3QoKG89bi5jLF90KG8sODgpP3UobywyNik6KGxuKCksUWgpKSkpcmV0dXJuIHM7KytzfXJldHVybi0xfSxsLlJpPWZ1bmN0aW9uKCl7cmV0dXJuIE9jKHRoaXMuYSkuaT09MH0sbC5TaT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxsLlZpPWZ1bmN0aW9uKCl7cmV0dXJuIE9jKHRoaXMuYSkuaX0sbC5XaT1mdW5jdGlvbigpe3ZhciBlLG4scixzLG8saDtmb3IoaD1PYyh0aGlzLmEpLmksbz1OdChRbixNZSwxLGgsNSwxKSxyPTAsbj1uZXcgbnIoT2ModGhpcy5hKSk7bi5lIT1uLmkuZ2MoKTspZT11KGRyKG4pLDg3KSxvW3IrK109KHM9ZS5jLF90KHMsODgpP3UocywyNik6KGxuKCksUWgpKTtyZXR1cm4gb30sbC5YaT1mdW5jdGlvbihlKXt2YXIgbixyLHMsbyxoLGQsdztmb3Iodz1PYyh0aGlzLmEpLmksZS5sZW5ndGg8dyYmKG89X0QoZGwoZSkuYyx3KSxlPW8pLGUubGVuZ3RoPncmJmxzKGUsdyxudWxsKSxzPTAscj1uZXcgbnIoT2ModGhpcy5hKSk7ci5lIT1yLmkuZ2MoKTspbj11KGRyKHIpLDg3KSxoPShkPW4uYyxfdChkLDg4KT91KGQsMjYpOihsbigpLFFoKSksbHMoZSxzKyssaCk7cmV0dXJuIGV9LGwuWWk9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscyxvO2ZvcihvPW5ldyBfZyxvLmErPSJbIixlPU9jKHRoaXMuYSksbj0wLHM9T2ModGhpcy5hKS5pO248czspeW8obyxkXygocj11KEF0KGUsbiksODcpLmMsX3Qociw4OCk/dShyLDI2KToobG4oKSxRaCkpKSksKytuPHMmJihvLmErPVhhKTtyZXR1cm4gby5hKz0iXSIsby5hfSxsLiRpPWZ1bmN0aW9uKGUpe30sbC5haj1mdW5jdGlvbigpe3JldHVybiAxMH0sbC5Caz1mdW5jdGlvbigpe3JldHVybiEwfSxsLmJqPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuQ2s9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5Eaz1mdW5jdGlvbigpe3JldHVybiExfSxsLkVrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwucms9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5Gaz1mdW5jdGlvbigpe3JldHVybiEwfSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDg4KX0sbC5maj1mdW5jdGlvbigpe3JldHVybiBiaW4odGhpcy5hKX0sbC5oaT1mdW5jdGlvbigpe3JldHVybiEwfSxsLm5pPWZ1bmN0aW9uKCl7cmV0dXJuITB9LE4oTG4sIkVDbGFzc0ltcGwvOCIsMTE1MCksRCgxMTUxLDE5NjQsTDcsTHp0KSxsLlpjPWZ1bmN0aW9uKGUpe3JldHVybiBDRCh0aGlzLmEsZSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gT2ModGhpcy5hLmEpLml9LE4oTG4sIkVDbGFzc0ltcGwvOC8xIiwxMTUxKSxEKDExNTIsNDk3LFNkLFE5KSxsLnJpPWZ1bmN0aW9uKGUpe3JldHVybiBOdChjMSxNZSwxMzgsZSwwLDEpfSxsLm5pPWZ1bmN0aW9uKCl7cmV0dXJuITF9LE4oTG4sIkVDbGFzc0ltcGwvOSIsMTE1MiksRCgxMTM5LDUzLE42dCx5cXQpLE4oTG4sIkVDbGFzc0ltcGwvTXlIYXNoU2V0IiwxMTM5KSxEKDU2NiwzNTEsezEwNToxLDkyOjEsOTA6MSwxMzg6MSwxNDg6MSw4MzQ6MSwxNDc6MSwxOTE6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwzNTE6MSwxNTA6MSwxMTQ6MSwxMTU6MSw2NzY6MX0sbFIpLGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShlaSx0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLnpiO2Nhc2UgMjpyZXR1cm4gdGhpcy5EIT1udWxsP3RoaXMuRDp0aGlzLkI7Y2FzZSAzOnJldHVybiBjdyh0aGlzKTtjYXNlIDQ6cmV0dXJuIHRoaXMuemooKTtjYXNlIDU6cmV0dXJuIHRoaXMuRjtjYXNlIDY6cmV0dXJuIG4/emwodGhpcyk6RTgodGhpcyk7Y2FzZSA3OnJldHVybiF0aGlzLkEmJih0aGlzLkE9bmV3ICR1KHB1LHRoaXMsNykpLHRoaXMuQTtjYXNlIDg6cmV0dXJuIEZuKCksISEodGhpcy5CYiYyNTYpfXJldHVybiBoaCh0aGlzLGUtSm4odGhpcy56aCgpKSx3bigocz11KE1uKHRoaXMsMTYpLDI2KSxzfHx0aGlzLnpoKCkpLGUpLG4scil9LGwubGg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGw7Y2FzZSAyOnJldHVybiB0aGlzLkQhPW51bGwmJnRoaXMuRD09dGhpcy5GO2Nhc2UgMzpyZXR1cm4hIWN3KHRoaXMpO2Nhc2UgNDpyZXR1cm4gdGhpcy56aigpIT1udWxsO2Nhc2UgNTpyZXR1cm4gdGhpcy5GIT1udWxsJiZ0aGlzLkYhPXRoaXMuRCYmdGhpcy5GIT10aGlzLkI7Y2FzZSA2OnJldHVybiEhRTgodGhpcyk7Y2FzZSA3OnJldHVybiEhdGhpcy5BJiZ0aGlzLkEuaSE9MDtjYXNlIDg6cmV0dXJuKHRoaXMuQmImMjU2KT09MH1yZXR1cm4gdWgodGhpcyxlLUpuKHRoaXMuemgoKSksd24oKG49dShNbih0aGlzLDE2KSwyNiksbnx8dGhpcy56aCgpKSxlKSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXt2YXIgcjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoZWksdGhpcywwLDMpKSxUcih0aGlzLkFiKSwhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKGVpLHRoaXMsMCwzKSksZ3ModGhpcy5BYix1KG4sMTQpKTtyZXR1cm47Y2FzZSAxOnAkKHRoaXMsanIobikpO3JldHVybjtjYXNlIDI6WGV0KHRoaXMsanIobikpO3JldHVybjtjYXNlIDU6RTcodGhpcyxqcihuKSk7cmV0dXJuO2Nhc2UgNzohdGhpcy5BJiYodGhpcy5BPW5ldyAkdShwdSx0aGlzLDcpKSxUcih0aGlzLkEpLCF0aGlzLkEmJih0aGlzLkE9bmV3ICR1KHB1LHRoaXMsNykpLGdzKHRoaXMuQSx1KG4sMTQpKTtyZXR1cm47Y2FzZSA4Onh6KHRoaXMsQmUoRmUobikpKTtyZXR1cm59YmgodGhpcyxlLUpuKHRoaXMuemgoKSksd24oKHI9dShNbih0aGlzLDE2KSwyNikscnx8dGhpcy56aCgpKSxlKSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBsbigpLFk0ZX0sbC5CaD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoZWksdGhpcywwLDMpKSxUcih0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOl90KHRoaXMuQ2IsMTc5KSYmKHUodGhpcy5DYiwxNzkpLnRiPW51bGwpLHR1KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjpYOCh0aGlzLG51bGwpLFI4KHRoaXMsdGhpcy5EKTtyZXR1cm47Y2FzZSA1OkU3KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgNzohdGhpcy5BJiYodGhpcy5BPW5ldyAkdShwdSx0aGlzLDcpKSxUcih0aGlzLkEpO3JldHVybjtjYXNlIDg6eHoodGhpcywhMCk7cmV0dXJufWdoKHRoaXMsZS1Kbih0aGlzLnpoKCkpLHduKChuPXUoTW4odGhpcywxNiksMjYpLG58fHRoaXMuemgoKSksZSkpfSxsLkdoPWZ1bmN0aW9uKCl7QmcoKEd1KCksU2EpLHRoaXMpLm5lKCksdGhpcy5CYnw9MX0sbC5Gaj1mdW5jdGlvbigpe3ZhciBlLG4scjtpZighdGhpcy5jJiYoZT1wY2UoemwodGhpcykpLCFlLmRjKCkpKWZvcihyPWUuS2MoKTtyLk9iKCk7KW49anIoci5QYigpKSxtQyh0aGlzLG4pJiZadW4odGhpcyk7cmV0dXJuIHRoaXMuYn0sbC56aj1mdW5jdGlvbigpe3ZhciBlO2lmKCF0aGlzLmUpe2U9bnVsbDt0cnl7ZT1jdyh0aGlzKX1jYXRjaChuKXtpZihuPXJzKG4pLCFfdChuLDEwMikpdGhyb3cgbnQobil9dGhpcy5kPW51bGwsZSYmZS5pJjEmJihlPT14bD90aGlzLmQ9KEZuKCksTzIpOmU9PVNyP3RoaXMuZD1kZSgwKTplPT1yMz90aGlzLmQ9bmV3IE8zKDApOmU9PWdhP3RoaXMuZD0wOmU9PURiP3RoaXMuZD1iMigwKTplPT1kNT90aGlzLmQ9SjgoMCk6ZT09WHU/dGhpcy5kPUVEKDApOnRoaXMuZD1JRCgwKSksdGhpcy5lPSEwfXJldHVybiB0aGlzLmR9LGwuRWo9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5CYiYyNTYpIT0wfSxsLklrPWZ1bmN0aW9uKGUpe2UmJih0aGlzLkQ9Im9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5BYnN0cmFjdEVudW1lcmF0b3IiKX0sbC54az1mdW5jdGlvbihlKXthbmUodGhpcyxlKSx0aGlzLklrKGUpfSxsLnlrPWZ1bmN0aW9uKGUpe3RoaXMuQz1lLHRoaXMuZT0hMX0sbC5JYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiB0aGlzLkRiJjY0P1N6KHRoaXMpOihlPW5ldyBBaChTeih0aGlzKSksZS5hKz0iIChzZXJpYWxpemFibGU6ICIsQ2coZSwodGhpcy5CYiYyNTYpIT0wKSxlLmErPSIpIixlLmEpfSxsLmM9ITEsbC5kPW51bGwsbC5lPSExLE4oTG4sIkVEYXRhVHlwZUltcGwiLDU2NiksRCg0NTcsNTY2LHsxMDU6MSw5MjoxLDkwOjEsMTM4OjEsMTQ4OjEsODM0OjEsNjcxOjEsMTQ3OjEsMTkxOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMzUxOjEsNDU3OjEsMTUwOjEsMTE0OjEsMTE1OjEsNjc2OjF9LHhxdCksbC5fZz1mdW5jdGlvbihlLG4scil7dmFyIHM7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKGVpLHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiB0aGlzLkQhPW51bGw/dGhpcy5EOnRoaXMuQjtjYXNlIDM6cmV0dXJuIGN3KHRoaXMpO2Nhc2UgNDpyZXR1cm4gT3l0KHRoaXMpO2Nhc2UgNTpyZXR1cm4gdGhpcy5GO2Nhc2UgNjpyZXR1cm4gbj96bCh0aGlzKTpFOCh0aGlzKTtjYXNlIDc6cmV0dXJuIXRoaXMuQSYmKHRoaXMuQT1uZXcgJHUocHUsdGhpcyw3KSksdGhpcy5BO2Nhc2UgODpyZXR1cm4gRm4oKSwhISh0aGlzLkJiJjI1Nik7Y2FzZSA5OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IGhlKGVnLHRoaXMsOSw1KSksdGhpcy5hfXJldHVybiBoaCh0aGlzLGUtSm4oKGxuKCksQWIpKSx3bigocz11KE1uKHRoaXMsMTYpLDI2KSxzfHxBYiksZSksbixyKX0sbC5oaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShlaSx0aGlzLDAsMykpLGV1KHRoaXMuQWIsZSxyKTtjYXNlIDY6cmV0dXJuIHRoaXMuQ2ImJihyPShvPXRoaXMuRGI+PjE2LG8+PTA/eXN0KHRoaXMscik6dGhpcy5DYi5paCh0aGlzLC0xLW8sbnVsbCxyKSkpLFVsKHRoaXMsZSw2LHIpO2Nhc2UgOTpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBoZShlZyx0aGlzLDksNSkpLGV1KHRoaXMuYSxlLHIpfXJldHVybiBoPXUod24oKHM9dShNbih0aGlzLDE2KSwyNiksc3x8KGxuKCksQWIpKSxuKSw2NiksaC5OaigpLlFqKHRoaXMsdXUodGhpcyksbi1KbigobG4oKSxBYikpLGUscil9LGwuamg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKGVpLHRoaXMsMCwzKSksemEodGhpcy5BYixlLHIpO2Nhc2UgNjpyZXR1cm4gVWwodGhpcyxudWxsLDYscik7Y2FzZSA3OnJldHVybiF0aGlzLkEmJih0aGlzLkE9bmV3ICR1KHB1LHRoaXMsNykpLHphKHRoaXMuQSxlLHIpO2Nhc2UgOTpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBoZShlZyx0aGlzLDksNSkpLHphKHRoaXMuYSxlLHIpfXJldHVybiBvPXUod24oKHM9dShNbih0aGlzLDE2KSwyNiksc3x8KGxuKCksQWIpKSxuKSw2Niksby5OaigpLlJqKHRoaXMsdXUodGhpcyksbi1KbigobG4oKSxBYikpLGUscil9LGwubGg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGw7Y2FzZSAyOnJldHVybiB0aGlzLkQhPW51bGwmJnRoaXMuRD09dGhpcy5GO2Nhc2UgMzpyZXR1cm4hIWN3KHRoaXMpO2Nhc2UgNDpyZXR1cm4hIU95dCh0aGlzKTtjYXNlIDU6cmV0dXJuIHRoaXMuRiE9bnVsbCYmdGhpcy5GIT10aGlzLkQmJnRoaXMuRiE9dGhpcy5CO2Nhc2UgNjpyZXR1cm4hIUU4KHRoaXMpO2Nhc2UgNzpyZXR1cm4hIXRoaXMuQSYmdGhpcy5BLmkhPTA7Y2FzZSA4OnJldHVybih0aGlzLkJiJjI1Nik9PTA7Y2FzZSA5OnJldHVybiEhdGhpcy5hJiZ0aGlzLmEuaSE9MH1yZXR1cm4gdWgodGhpcyxlLUpuKChsbigpLEFiKSksd24oKG49dShNbih0aGlzLDE2KSwyNiksbnx8QWIpLGUpKX0sbC5zaD1mdW5jdGlvbihlLG4pe3ZhciByO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShlaSx0aGlzLDAsMykpLFRyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoZWksdGhpcywwLDMpKSxncyh0aGlzLkFiLHUobiwxNCkpO3JldHVybjtjYXNlIDE6cCQodGhpcyxqcihuKSk7cmV0dXJuO2Nhc2UgMjpYZXQodGhpcyxqcihuKSk7cmV0dXJuO2Nhc2UgNTpFNyh0aGlzLGpyKG4pKTtyZXR1cm47Y2FzZSA3OiF0aGlzLkEmJih0aGlzLkE9bmV3ICR1KHB1LHRoaXMsNykpLFRyKHRoaXMuQSksIXRoaXMuQSYmKHRoaXMuQT1uZXcgJHUocHUsdGhpcyw3KSksZ3ModGhpcy5BLHUobiwxNCkpO3JldHVybjtjYXNlIDg6eHoodGhpcyxCZShGZShuKSkpO3JldHVybjtjYXNlIDk6IXRoaXMuYSYmKHRoaXMuYT1uZXcgaGUoZWcsdGhpcyw5LDUpKSxUcih0aGlzLmEpLCF0aGlzLmEmJih0aGlzLmE9bmV3IGhlKGVnLHRoaXMsOSw1KSksZ3ModGhpcy5hLHUobiwxNCkpO3JldHVybn1iaCh0aGlzLGUtSm4oKGxuKCksQWIpKSx3bigocj11KE1uKHRoaXMsMTYpLDI2KSxyfHxBYiksZSksbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gbG4oKSxBYn0sbC5CaD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoZWksdGhpcywwLDMpKSxUcih0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOl90KHRoaXMuQ2IsMTc5KSYmKHUodGhpcy5DYiwxNzkpLnRiPW51bGwpLHR1KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjpYOCh0aGlzLG51bGwpLFI4KHRoaXMsdGhpcy5EKTtyZXR1cm47Y2FzZSA1OkU3KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgNzohdGhpcy5BJiYodGhpcy5BPW5ldyAkdShwdSx0aGlzLDcpKSxUcih0aGlzLkEpO3JldHVybjtjYXNlIDg6eHoodGhpcywhMCk7cmV0dXJuO2Nhc2UgOTohdGhpcy5hJiYodGhpcy5hPW5ldyBoZShlZyx0aGlzLDksNSkpLFRyKHRoaXMuYSk7cmV0dXJufWdoKHRoaXMsZS1KbigobG4oKSxBYikpLHduKChuPXUoTW4odGhpcywxNiksMjYpLG58fEFiKSxlKSl9LGwuR2g9ZnVuY3Rpb24oKXt2YXIgZSxuO2lmKHRoaXMuYSlmb3IoZT0wLG49dGhpcy5hLmk7ZTxuOysrZSlGTShBdCh0aGlzLmEsZSkpO0JnKChHdSgpLFNhKSx0aGlzKS5uZSgpLHRoaXMuQmJ8PTF9LGwuemo9ZnVuY3Rpb24oKXtyZXR1cm4gT3l0KHRoaXMpfSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBlIT1udWxsfSxsLklrPWZ1bmN0aW9uKGUpe30sTihMbiwiRUVudW1JbXBsIiw0NTcpLEQoNTczLDQzOCx7MTA1OjEsOTI6MSw5MDoxLDE5NDA6MSw2Nzg6MSwxNDc6MSwxOTE6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSw1NzM6MSwxNTA6MSwxMTQ6MSwxMTU6MX0sR3p0KSxsLm5lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuemJ9LGwuUWc9ZnVuY3Rpb24oZSl7cmV0dXJuIFBzZSh0aGlzLGUpfSxsLl9nPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShlaSx0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLnpiO2Nhc2UgMjpyZXR1cm4gZGUodGhpcy5kKTtjYXNlIDM6cmV0dXJuIHRoaXMuYj90aGlzLmI6dGhpcy5hO2Nhc2UgNDpyZXR1cm4gbz10aGlzLmMsbz8/dGhpcy56YjtjYXNlIDU6cmV0dXJuIHRoaXMuRGI+PjE2PT01P3UodGhpcy5DYiw2NzEpOm51bGx9cmV0dXJuIGhoKHRoaXMsZS1KbigobG4oKSxpcCkpLHduKChzPXUoTW4odGhpcywxNiksMjYpLHN8fGlwKSxlKSxuLHIpfSxsLmhoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLGg7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKGVpLHRoaXMsMCwzKSksZXUodGhpcy5BYixlLHIpO2Nhc2UgNTpyZXR1cm4gdGhpcy5DYiYmKHI9KG89dGhpcy5EYj4+MTYsbz49MD9Qc2UodGhpcyxyKTp0aGlzLkNiLmloKHRoaXMsLTEtbyxudWxsLHIpKSksVWwodGhpcyxlLDUscil9cmV0dXJuIGg9dSh3bigocz11KE1uKHRoaXMsMTYpLDI2KSxzfHwobG4oKSxpcCkpLG4pLDY2KSxoLk5qKCkuUWoodGhpcyx1dSh0aGlzKSxuLUpuKChsbigpLGlwKSksZSxyKX0sbC5qaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbztzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoZWksdGhpcywwLDMpKSx6YSh0aGlzLkFiLGUscik7Y2FzZSA1OnJldHVybiBVbCh0aGlzLG51bGwsNSxyKX1yZXR1cm4gbz11KHduKChzPXUoTW4odGhpcywxNiksMjYpLHN8fChsbigpLGlwKSksbiksNjYpLG8uTmooKS5Saih0aGlzLHV1KHRoaXMpLG4tSm4oKGxuKCksaXApKSxlLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3ZhciBuO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLnpiIT1udWxsO2Nhc2UgMjpyZXR1cm4gdGhpcy5kIT0wO2Nhc2UgMzpyZXR1cm4hIXRoaXMuYjtjYXNlIDQ6cmV0dXJuIHRoaXMuYyE9bnVsbDtjYXNlIDU6cmV0dXJuISEodGhpcy5EYj4+MTY9PTUmJnUodGhpcy5DYiw2NzEpKX1yZXR1cm4gdWgodGhpcyxlLUpuKChsbigpLGlwKSksd24oKG49dShNbih0aGlzLDE2KSwyNiksbnx8aXApLGUpKX0sbC5zaD1mdW5jdGlvbihlLG4pe3ZhciByO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShlaSx0aGlzLDAsMykpLFRyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoZWksdGhpcywwLDMpKSxncyh0aGlzLkFiLHUobiwxNCkpO3JldHVybjtjYXNlIDE6dHUodGhpcyxqcihuKSk7cmV0dXJuO2Nhc2UgMjpuaXQodGhpcyx1KG4sMTkpLmEpO3JldHVybjtjYXNlIDM6TW9lKHRoaXMsdShuLDE5NDApKTtyZXR1cm47Y2FzZSA0OmlpdCh0aGlzLGpyKG4pKTtyZXR1cm59YmgodGhpcyxlLUpuKChsbigpLGlwKSksd24oKHI9dShNbih0aGlzLDE2KSwyNikscnx8aXApLGUpLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIGxuKCksaXB9LGwuQmg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKGVpLHRoaXMsMCwzKSksVHIodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTp0dSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDI6bml0KHRoaXMsMCk7cmV0dXJuO2Nhc2UgMzpNb2UodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA0OmlpdCh0aGlzLG51bGwpO3JldHVybn1naCh0aGlzLGUtSm4oKGxuKCksaXApKSx3bigobj11KE1uKHRoaXMsMTYpLDI2KSxufHxpcCksZSkpfSxsLkliPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5jLGU/P3RoaXMuemJ9LGwuYj1udWxsLGwuYz1udWxsLGwuZD0wLE4oTG4sIkVFbnVtTGl0ZXJhbEltcGwiLDU3Myk7dmFyIGs2bj1hcyhMbiwiRUZhY3RvcnlJbXBsL0ludGVybmFsRURhdGVUaW1lRm9ybWF0Iik7RCg0ODksMSx7MjAxNToxfSxvTSksTihMbiwiRUZhY3RvcnlJbXBsLzFDbGllbnRJbnRlcm5hbEVEYXRlVGltZUZvcm1hdCIsNDg5KSxEKDI0MSwxMTUsezEwNToxLDkyOjEsOTA6MSw4NzoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDI0MToxLDExNDoxLDExNToxfSx3diksbC5TZz1mdW5jdGlvbihlLG4scil7dmFyIHM7cmV0dXJuIHI9VWwodGhpcyxlLG4sciksdGhpcy5lJiZfdChlLDE3MCkmJihzPW9xKHRoaXMsdGhpcy5lKSxzIT10aGlzLmMmJihyPVQ3KHRoaXMscyxyKSkpLHJ9LGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIHRoaXMuZjtjYXNlIDE6cmV0dXJuIXRoaXMuZCYmKHRoaXMuZD1uZXcgQnMod28sdGhpcywxKSksdGhpcy5kO2Nhc2UgMjpyZXR1cm4gbj93cSh0aGlzKTp0aGlzLmM7Y2FzZSAzOnJldHVybiB0aGlzLmI7Y2FzZSA0OnJldHVybiB0aGlzLmU7Y2FzZSA1OnJldHVybiBuP2ZzdCh0aGlzKTp0aGlzLmF9cmV0dXJuIGhoKHRoaXMsZS1KbigobG4oKSxxdykpLHduKChzPXUoTW4odGhpcywxNiksMjYpLHN8fHF3KSxlKSxuLHIpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIE9yZSh0aGlzLG51bGwscik7Y2FzZSAxOnJldHVybiF0aGlzLmQmJih0aGlzLmQ9bmV3IEJzKHdvLHRoaXMsMSkpLHphKHRoaXMuZCxlLHIpO2Nhc2UgMzpyZXR1cm4gSXJlKHRoaXMsbnVsbCxyKX1yZXR1cm4gbz11KHduKChzPXUoTW4odGhpcywxNiksMjYpLHN8fChsbigpLHF3KSksbiksNjYpLG8uTmooKS5Saih0aGlzLHV1KHRoaXMpLG4tSm4oKGxuKCkscXcpKSxlLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3ZhciBuO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuISF0aGlzLmY7Y2FzZSAxOnJldHVybiEhdGhpcy5kJiZ0aGlzLmQuaSE9MDtjYXNlIDI6cmV0dXJuISF0aGlzLmM7Y2FzZSAzOnJldHVybiEhdGhpcy5iO2Nhc2UgNDpyZXR1cm4hIXRoaXMuZTtjYXNlIDU6cmV0dXJuISF0aGlzLmF9cmV0dXJuIHVoKHRoaXMsZS1KbigobG4oKSxxdykpLHduKChuPXUoTW4odGhpcywxNiksMjYpLG58fHF3KSxlKSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXt2YXIgcjtzd2l0Y2goZSl7Y2FzZSAwOkpzZSh0aGlzLHUobiw4NykpO3JldHVybjtjYXNlIDE6IXRoaXMuZCYmKHRoaXMuZD1uZXcgQnMod28sdGhpcywxKSksVHIodGhpcy5kKSwhdGhpcy5kJiYodGhpcy5kPW5ldyBCcyh3byx0aGlzLDEpKSxncyh0aGlzLmQsdShuLDE0KSk7cmV0dXJuO2Nhc2UgMzpmNHQodGhpcyx1KG4sODcpKTtyZXR1cm47Y2FzZSA0Okw0dCh0aGlzLHUobiw4MzYpKTtyZXR1cm47Y2FzZSA1Ok84KHRoaXMsdShuLDEzOCkpO3JldHVybn1iaCh0aGlzLGUtSm4oKGxuKCkscXcpKSx3bigocj11KE1uKHRoaXMsMTYpLDI2KSxyfHxxdyksZSksbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gbG4oKSxxd30sbC5CaD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOkpzZSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDE6IXRoaXMuZCYmKHRoaXMuZD1uZXcgQnMod28sdGhpcywxKSksVHIodGhpcy5kKTtyZXR1cm47Y2FzZSAzOmY0dCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDQ6TDR0KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgNTpPOCh0aGlzLG51bGwpO3JldHVybn1naCh0aGlzLGUtSm4oKGxuKCkscXcpKSx3bigobj11KE1uKHRoaXMsMTYpLDI2KSxufHxxdyksZSkpfSxsLkliPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9bmV3IEZsKG1mKHRoaXMpKSxlLmErPSIgKGV4cHJlc3Npb246ICIseGF0KHRoaXMsZSksZS5hKz0iKSIsZS5hfTt2YXIgUUF0O04oTG4sIkVHZW5lcmljVHlwZUltcGwiLDI0MSksRCgxOTY5LDE5NjQsX0gpLGwuWGg9ZnVuY3Rpb24oZSxuKXtTV3QodGhpcyxlLG4pfSxsLmxrPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFNXdCh0aGlzLHRoaXMuZ2MoKSxlKSxufSxsLnBpPWZ1bmN0aW9uKGUpe3JldHVybiBlMSh0aGlzLkdpKCksZSl9LGwuWmg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kaCgpfSxsLkdpPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBPenQodGhpcyl9LGwuJGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faCgwKX0sbC5faD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5HaSgpLlpjKGUpfSxsLm1rPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHJ5KHRoaXMsZSwhMCksbn0sbC5paT1mdW5jdGlvbihlLG4pe3ZhciByLHM7cmV0dXJuIHM9a3N0KHRoaXMsbikscj10aGlzLlpjKGUpLHIuUmIocyksc30sbC5qaT1mdW5jdGlvbihlLG4pe3ZhciByO3J5KHRoaXMsbiwhMCkscj10aGlzLlpjKGUpLHIuUmIobil9LE4oWWksIkFic3RyYWN0U2VxdWVudGlhbEludGVybmFsRUxpc3QiLDE5NjkpLEQoNDg2LDE5NjksX0gsTk0pLGwucGk9ZnVuY3Rpb24oZSl7cmV0dXJuIGUxKHRoaXMuR2koKSxlKX0sbC5aaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmI9PW51bGw/KFNnKCksU2coKSxoTik6dGhpcy5KaygpfSxsLkdpPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBaR3QodGhpcy5hLHRoaXMuYil9LGwuJGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iPT1udWxsPyhTZygpLFNnKCksaE4pOnRoaXMuSmsoKX0sbC5faD1mdW5jdGlvbihlKXt2YXIgbixyO2lmKHRoaXMuYj09bnVsbCl7aWYoZTwwfHxlPjEpdGhyb3cgbnQobmV3IENvKFhDK2UrIiwgc2l6ZT0wIikpO3JldHVybiBTZygpLFNnKCksaE59Zm9yKHI9dGhpcy5KaygpLG49MDtuPGU7KytuKWh6KHIpO3JldHVybiByfSxsLmRjPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHMsbyxoO2lmKHRoaXMuYiE9bnVsbCl7Zm9yKHI9MDtyPHRoaXMuYi5sZW5ndGg7KytyKWlmKGU9dGhpcy5iW3JdLCF0aGlzLk1rKCl8fHRoaXMuYS5taChlKSl7aWYoaD10aGlzLmEuYmgoZSwhMSksc28oKSx1KGUsNjYpLk9qKCkpe2ZvcihuPXUoaCwxNTMpLHM9MCxvPW4uZ2MoKTtzPG87KytzKWlmKEhZdChuLmlsKHMpKSYmbi5qbChzKSE9bnVsbClyZXR1cm4hMX1lbHNlIGlmKGUuJGooKSl7aWYoIXUoaCwxNCkuZGMoKSlyZXR1cm4hMX1lbHNlIGlmKGghPW51bGwpcmV0dXJuITF9fXJldHVybiEwfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHR5dCh0aGlzKX0sbC5aYz1mdW5jdGlvbihlKXt2YXIgbixyO2lmKHRoaXMuYj09bnVsbCl7aWYoZSE9MCl0aHJvdyBudChuZXcgQ28oWEMrZSsiLCBzaXplPTAiKSk7cmV0dXJuIFNnKCksU2coKSxoTn1mb3Iocj10aGlzLkxrKCk/dGhpcy5LaygpOnRoaXMuSmsoKSxuPTA7bjxlOysrbiloeihyKTtyZXR1cm4gcn0sbC5paT1mdW5jdGlvbihlLG4pe3Rocm93IG50KG5ldyBQcil9LGwuamk9ZnVuY3Rpb24oZSxuKXt0aHJvdyBudChuZXcgUHIpfSxsLkprPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBiaih0aGlzLmEsdGhpcy5iKX0sbC5Laz1mdW5jdGlvbigpe3JldHVybiBuZXcgTjJ0KHRoaXMuYSx0aGlzLmIpfSxsLkxrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwuZ2M9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscyxvLGgsZDtpZihvPTAsdGhpcy5iIT1udWxsKXtmb3Iocj0wO3I8dGhpcy5iLmxlbmd0aDsrK3IpaWYoZT10aGlzLmJbcl0sIXRoaXMuTWsoKXx8dGhpcy5hLm1oKGUpKWlmKGQ9dGhpcy5hLmJoKGUsITEpLHNvKCksdShlLDY2KS5PaigpKWZvcihuPXUoZCwxNTMpLHM9MCxoPW4uZ2MoKTtzPGg7KytzKUhZdChuLmlsKHMpKSYmbi5qbChzKSE9bnVsbCYmKytvO2Vsc2UgZS4kaigpP28rPXUoZCwxNCkuZ2MoKTpkIT1udWxsJiYrK299cmV0dXJuIG99LGwuTWs9ZnVuY3Rpb24oKXtyZXR1cm4hMH07dmFyIExmdDtOKFlpLCJFQ29udGVudHNFTGlzdCIsNDg2KSxEKDExNTYsNDg2LF9ILGRXdCksbC5Kaz1mdW5jdGlvbigpe3JldHVybiBuZXcgZ1d0KHRoaXMuYSx0aGlzLmIpfSxsLktrPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBwV3QodGhpcy5hLHRoaXMuYil9LGwuTWs9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sTihMbiwiRU5hbWVkRWxlbWVudEltcGwvMSIsMTE1NiksRCgyNzksMSxDSCxiaiksbC5OYj1mdW5jdGlvbihlKXtFYSh0aGlzLGUpfSxsLlJiPWZ1bmN0aW9uKGUpe3Rocm93IG50KG5ldyBQcil9LGwuTms9ZnVuY3Rpb24oZSl7aWYodGhpcy5nIT0wfHx0aGlzLmUpdGhyb3cgbnQobmV3IEhvKCJJdGVyYXRvciBhbHJlYWR5IGluIHVzZSBvciBhbHJlYWR5IGZpbHRlcmVkIikpO3RoaXMuZT1lfSxsLk9iPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHMsbyxoO3N3aXRjaCh0aGlzLmcpe2Nhc2UgMzpjYXNlIDI6cmV0dXJuITA7Y2FzZSAxOnJldHVybiExO2Nhc2UtMzp0aGlzLnA/dGhpcy5wLlBiKCk6Kyt0aGlzLm47ZGVmYXVsdDppZighdGhpcy5rfHwodGhpcy5wPyFWYWUodGhpcyx0aGlzLnApOiFEb2UodGhpcykpKXtmb3IoO3RoaXMuZDx0aGlzLmMubGVuZ3RoOylpZihuPXRoaXMuY1t0aGlzLmQrK10sKCF0aGlzLmV8fG4uR2ooKSE9TEV8fG4uYWooKSE9MCkmJighdGhpcy5NaygpfHx0aGlzLmIubWgobikpKXtpZihoPXRoaXMuYi5iaChuLHRoaXMuTGsoKSksdGhpcy5mPShzbygpLHUobiw2NikuT2ooKSksdGhpcy5mfHxuLiRqKCkpe2lmKHRoaXMuTGsoKT8ocz11KGgsMTUpLHRoaXMuaz1zKToocz11KGgsNjkpLHRoaXMuaz10aGlzLmo9cyksX3QodGhpcy5rLDU0KT8odGhpcy5wPW51bGwsdGhpcy5vPXRoaXMuay5nYygpLHRoaXMubj0wKTp0aGlzLnA9dGhpcy5qP3RoaXMuai4kaCgpOnRoaXMuay5ZYygpLHRoaXMucD9WYWUodGhpcyx0aGlzLnApOkRvZSh0aGlzKSlyZXR1cm4gbz10aGlzLnA/dGhpcy5wLlBiKCk6dGhpcy5qP3RoaXMuai5waSh0aGlzLm4rKyk6dGhpcy5rLlhiKHRoaXMubisrKSx0aGlzLmY/KGU9dShvLDcyKSxlLmFrKCkscj1lLmRkKCksdGhpcy5pPXIpOihyPW8sdGhpcy5pPXIpLHRoaXMuZz0zLCEwfWVsc2UgaWYoaCE9bnVsbClyZXR1cm4gdGhpcy5rPW51bGwsdGhpcy5wPW51bGwscj1oLHRoaXMuaT1yLHRoaXMuZz0yLCEwfXJldHVybiB0aGlzLms9bnVsbCx0aGlzLnA9bnVsbCx0aGlzLmY9ITEsdGhpcy5nPTEsITF9ZWxzZSByZXR1cm4gbz10aGlzLnA/dGhpcy5wLlBiKCk6dGhpcy5qP3RoaXMuai5waSh0aGlzLm4rKyk6dGhpcy5rLlhiKHRoaXMubisrKSx0aGlzLmY/KGU9dShvLDcyKSxlLmFrKCkscj1lLmRkKCksdGhpcy5pPXIpOihyPW8sdGhpcy5pPXIpLHRoaXMuZz0zLCEwfX0sbC5TYj1mdW5jdGlvbigpe3ZhciBlLG4scixzLG8saDtzd2l0Y2godGhpcy5nKXtjYXNlLTM6Y2FzZS0yOnJldHVybiEwO2Nhc2UtMTpyZXR1cm4hMTtjYXNlIDM6dGhpcy5wP3RoaXMucC5VYigpOi0tdGhpcy5uO2RlZmF1bHQ6aWYoIXRoaXMua3x8KHRoaXMucD8hR2FlKHRoaXMsdGhpcy5wKTohcm9lKHRoaXMpKSl7Zm9yKDt0aGlzLmQ+MDspaWYobj10aGlzLmNbLS10aGlzLmRdLCghdGhpcy5lfHxuLkdqKCkhPUxFfHxuLmFqKCkhPTApJiYoIXRoaXMuTWsoKXx8dGhpcy5iLm1oKG4pKSl7aWYoaD10aGlzLmIuYmgobix0aGlzLkxrKCkpLHRoaXMuZj0oc28oKSx1KG4sNjYpLk9qKCkpLHRoaXMuZnx8bi4kaigpKXtpZih0aGlzLkxrKCk/KHM9dShoLDE1KSx0aGlzLms9cyk6KHM9dShoLDY5KSx0aGlzLms9dGhpcy5qPXMpLF90KHRoaXMuayw1NCk/KHRoaXMubz10aGlzLmsuZ2MoKSx0aGlzLm49dGhpcy5vKTp0aGlzLnA9dGhpcy5qP3RoaXMuai5faCh0aGlzLmsuZ2MoKSk6dGhpcy5rLlpjKHRoaXMuay5nYygpKSx0aGlzLnA/R2FlKHRoaXMsdGhpcy5wKTpyb2UodGhpcykpcmV0dXJuIG89dGhpcy5wP3RoaXMucC5VYigpOnRoaXMuaj90aGlzLmoucGkoLS10aGlzLm4pOnRoaXMuay5YYigtLXRoaXMubiksdGhpcy5mPyhlPXUobyw3MiksZS5haygpLHI9ZS5kZCgpLHRoaXMuaT1yKToocj1vLHRoaXMuaT1yKSx0aGlzLmc9LTMsITB9ZWxzZSBpZihoIT1udWxsKXJldHVybiB0aGlzLms9bnVsbCx0aGlzLnA9bnVsbCxyPWgsdGhpcy5pPXIsdGhpcy5nPS0yLCEwfXJldHVybiB0aGlzLms9bnVsbCx0aGlzLnA9bnVsbCx0aGlzLmc9LTEsITF9ZWxzZSByZXR1cm4gbz10aGlzLnA/dGhpcy5wLlViKCk6dGhpcy5qP3RoaXMuai5waSgtLXRoaXMubik6dGhpcy5rLlhiKC0tdGhpcy5uKSx0aGlzLmY/KGU9dShvLDcyKSxlLmFrKCkscj1lLmRkKCksdGhpcy5pPXIpOihyPW8sdGhpcy5pPXIpLHRoaXMuZz0tMywhMH19LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gaHoodGhpcyl9LGwuVGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLlViPWZ1bmN0aW9uKCl7dmFyIGU7aWYodGhpcy5nPC0xfHx0aGlzLlNiKCkpcmV0dXJuLS10aGlzLmEsdGhpcy5nPTAsZT10aGlzLmksdGhpcy5TYigpLGU7dGhyb3cgbnQobmV3IHZjKX0sbC5WYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEtMX0sbC5RYj1mdW5jdGlvbigpe3Rocm93IG50KG5ldyBQcil9LGwuTGs9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5XYj1mdW5jdGlvbihlKXt0aHJvdyBudChuZXcgUHIpfSxsLk1rPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwuYT0wLGwuZD0wLGwuZj0hMSxsLmc9MCxsLm49MCxsLm89MDt2YXIgaE47TihZaSwiRUNvbnRlbnRzRUxpc3QvRmVhdHVyZUl0ZXJhdG9ySW1wbCIsMjc5KSxEKDY5NywyNzksQ0gsTjJ0KSxsLkxrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LE4oWWksIkVDb250ZW50c0VMaXN0L1Jlc29sdmluZ0ZlYXR1cmVJdGVyYXRvckltcGwiLDY5NyksRCgxMTU3LDY5NyxDSCxwV3QpLGwuTWs9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sTihMbiwiRU5hbWVkRWxlbWVudEltcGwvMS8xIiwxMTU3KSxEKDExNTgsMjc5LENILGdXdCksbC5Naz1mdW5jdGlvbigpe3JldHVybiExfSxOKExuLCJFTmFtZWRFbGVtZW50SW1wbC8xLzIiLDExNTgpLEQoMzYsMTQzLFFJLEttLExydCxvYSxWcnQsRjAsYmYsUm10LEhRdCxqbXQsVlF0LHVtdCxHUXQscW10LFVRdCxsbXQsV1F0LCRtdCxLUXQsX18sZ0Qsb3J0LHptdCxZUXQsaG10LFhRdCksbC5faT1mdW5jdGlvbigpe3JldHVybiBrbXQodGhpcyl9LGwuZ2o9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1rbXQodGhpcyksZT9lLnpqKCk6bnVsbH0sbC55aT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5iPT0tMSYmdGhpcy5hJiYodGhpcy5iPXRoaXMuYy5YZyh0aGlzLmEuYWooKSx0aGlzLmEuR2ooKSkpLHRoaXMuYy5PZyh0aGlzLmIsZSl9LGwuQWk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxsLmhqPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9a210KHRoaXMpLGU/ZS5LaigpOiExfSxsLmI9LTEsTihMbiwiRU5vdGlmaWNhdGlvbkltcGwiLDM2KSxEKDM5OSwyODQsezEwNToxLDkyOjEsOTA6MSwxNDc6MSwxOTE6MSw1NjoxLDU5OjEsMTA4OjEsNDcyOjEsNDk6MSw5NzoxLDE1MDoxLDM5OToxLDI4NDoxLDExNDoxLDExNToxfSxZdHQpLGwuUWc9ZnVuY3Rpb24oZSl7cmV0dXJuIFJzZSh0aGlzLGUpfSxsLl9nPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLGg7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKGVpLHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiBGbigpLCEhKHRoaXMuQmImMjU2KTtjYXNlIDM6cmV0dXJuIEZuKCksISEodGhpcy5CYiY1MTIpO2Nhc2UgNDpyZXR1cm4gZGUodGhpcy5zKTtjYXNlIDU6cmV0dXJuIGRlKHRoaXMudCk7Y2FzZSA2OnJldHVybiBGbigpLGg9dGhpcy50LGg+MXx8aD09LTE7Y2FzZSA3OnJldHVybiBGbigpLG89dGhpcy5zLG8+PTE7Y2FzZSA4OnJldHVybiBuP09oKHRoaXMpOnRoaXMucjtjYXNlIDk6cmV0dXJuIHRoaXMucTtjYXNlIDEwOnJldHVybiB0aGlzLkRiPj4xNj09MTA/dSh0aGlzLkNiLDI2KTpudWxsO2Nhc2UgMTE6cmV0dXJuIXRoaXMuZCYmKHRoaXMuZD1uZXcgJHUocHUsdGhpcywxMSkpLHRoaXMuZDtjYXNlIDEyOnJldHVybiF0aGlzLmMmJih0aGlzLmM9bmV3IGhlKHp3LHRoaXMsMTIsMTApKSx0aGlzLmM7Y2FzZSAxMzpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyAkTSh0aGlzLHRoaXMpKSx0aGlzLmE7Y2FzZSAxNDpyZXR1cm4gZmwodGhpcyl9cmV0dXJuIGhoKHRoaXMsZS1KbigobG4oKSxzcCkpLHduKChzPXUoTW4odGhpcywxNiksMjYpLHN8fHNwKSxlKSxuLHIpfSxsLmhoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLGg7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKGVpLHRoaXMsMCwzKSksZXUodGhpcy5BYixlLHIpO2Nhc2UgMTA6cmV0dXJuIHRoaXMuQ2ImJihyPShvPXRoaXMuRGI+PjE2LG8+PTA/UnNlKHRoaXMscik6dGhpcy5DYi5paCh0aGlzLC0xLW8sbnVsbCxyKSkpLFVsKHRoaXMsZSwxMCxyKTtjYXNlIDEyOnJldHVybiF0aGlzLmMmJih0aGlzLmM9bmV3IGhlKHp3LHRoaXMsMTIsMTApKSxldSh0aGlzLmMsZSxyKX1yZXR1cm4gaD11KHduKChzPXUoTW4odGhpcywxNiksMjYpLHN8fChsbigpLHNwKSksbiksNjYpLGguTmooKS5Raih0aGlzLHV1KHRoaXMpLG4tSm4oKGxuKCksc3ApKSxlLHIpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShlaSx0aGlzLDAsMykpLHphKHRoaXMuQWIsZSxyKTtjYXNlIDk6cmV0dXJuIFdudCh0aGlzLHIpO2Nhc2UgMTA6cmV0dXJuIFVsKHRoaXMsbnVsbCwxMCxyKTtjYXNlIDExOnJldHVybiF0aGlzLmQmJih0aGlzLmQ9bmV3ICR1KHB1LHRoaXMsMTEpKSx6YSh0aGlzLmQsZSxyKTtjYXNlIDEyOnJldHVybiF0aGlzLmMmJih0aGlzLmM9bmV3IGhlKHp3LHRoaXMsMTIsMTApKSx6YSh0aGlzLmMsZSxyKTtjYXNlIDE0OnJldHVybiB6YShmbCh0aGlzKSxlLHIpfXJldHVybiBvPXUod24oKHM9dShNbih0aGlzLDE2KSwyNiksc3x8KGxuKCksc3ApKSxuKSw2Niksby5OaigpLlJqKHRoaXMsdXUodGhpcyksbi1KbigobG4oKSxzcCkpLGUscil9LGwubGg9ZnVuY3Rpb24oZSl7dmFyIG4scixzO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLnpiIT1udWxsO2Nhc2UgMjpyZXR1cm4odGhpcy5CYiYyNTYpPT0wO2Nhc2UgMzpyZXR1cm4odGhpcy5CYiY1MTIpPT0wO2Nhc2UgNDpyZXR1cm4gdGhpcy5zIT0wO2Nhc2UgNTpyZXR1cm4gdGhpcy50IT0xO2Nhc2UgNjpyZXR1cm4gcz10aGlzLnQscz4xfHxzPT0tMTtjYXNlIDc6cmV0dXJuIHI9dGhpcy5zLHI+PTE7Y2FzZSA4OnJldHVybiEhdGhpcy5yJiYhdGhpcy5xLmUmJmp2KHRoaXMucSkuaT09MDtjYXNlIDk6cmV0dXJuISF0aGlzLnEmJiEodGhpcy5yJiYhdGhpcy5xLmUmJmp2KHRoaXMucSkuaT09MCk7Y2FzZSAxMDpyZXR1cm4hISh0aGlzLkRiPj4xNj09MTAmJnUodGhpcy5DYiwyNikpO2Nhc2UgMTE6cmV0dXJuISF0aGlzLmQmJnRoaXMuZC5pIT0wO2Nhc2UgMTI6cmV0dXJuISF0aGlzLmMmJnRoaXMuYy5pIT0wO2Nhc2UgMTM6cmV0dXJuISF0aGlzLmEmJmZsKHRoaXMuYS5hKS5pIT0wJiYhKHRoaXMuYiYmbHN0KHRoaXMuYikpO2Nhc2UgMTQ6cmV0dXJuISF0aGlzLmImJmxzdCh0aGlzLmIpfXJldHVybiB1aCh0aGlzLGUtSm4oKGxuKCksc3ApKSx3bigobj11KE1uKHRoaXMsMTYpLDI2KSxufHxzcCksZSkpfSxsLnNoPWZ1bmN0aW9uKGUsbil7dmFyIHIscztzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoZWksdGhpcywwLDMpKSxUcih0aGlzLkFiKSwhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKGVpLHRoaXMsMCwzKSksZ3ModGhpcy5BYix1KG4sMTQpKTtyZXR1cm47Y2FzZSAxOnR1KHRoaXMsanIobikpO3JldHVybjtjYXNlIDI6UmcodGhpcyxCZShGZShuKSkpO3JldHVybjtjYXNlIDM6amcodGhpcyxCZShGZShuKSkpO3JldHVybjtjYXNlIDQ6UGcodGhpcyx1KG4sMTkpLmEpO3JldHVybjtjYXNlIDU6dHkodGhpcyx1KG4sMTkpLmEpO3JldHVybjtjYXNlIDg6ZzIodGhpcyx1KG4sMTM4KSk7cmV0dXJuO2Nhc2UgOTpzPUYxKHRoaXMsdShuLDg3KSxudWxsKSxzJiZzLkZpKCk7cmV0dXJuO2Nhc2UgMTE6IXRoaXMuZCYmKHRoaXMuZD1uZXcgJHUocHUsdGhpcywxMSkpLFRyKHRoaXMuZCksIXRoaXMuZCYmKHRoaXMuZD1uZXcgJHUocHUsdGhpcywxMSkpLGdzKHRoaXMuZCx1KG4sMTQpKTtyZXR1cm47Y2FzZSAxMjohdGhpcy5jJiYodGhpcy5jPW5ldyBoZSh6dyx0aGlzLDEyLDEwKSksVHIodGhpcy5jKSwhdGhpcy5jJiYodGhpcy5jPW5ldyBoZSh6dyx0aGlzLDEyLDEwKSksZ3ModGhpcy5jLHUobiwxNCkpO3JldHVybjtjYXNlIDEzOiF0aGlzLmEmJih0aGlzLmE9bmV3ICRNKHRoaXMsdGhpcykpLF9DKHRoaXMuYSksIXRoaXMuYSYmKHRoaXMuYT1uZXcgJE0odGhpcyx0aGlzKSksZ3ModGhpcy5hLHUobiwxNCkpO3JldHVybjtjYXNlIDE0OlRyKGZsKHRoaXMpKSxncyhmbCh0aGlzKSx1KG4sMTQpKTtyZXR1cm59YmgodGhpcyxlLUpuKChsbigpLHNwKSksd24oKHI9dShNbih0aGlzLDE2KSwyNikscnx8c3ApLGUpLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIGxuKCksc3B9LGwuQmg9ZnVuY3Rpb24oZSl7dmFyIG4scjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoZWksdGhpcywwLDMpKSxUcih0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOnR1KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjpSZyh0aGlzLCEwKTtyZXR1cm47Y2FzZSAzOmpnKHRoaXMsITApO3JldHVybjtjYXNlIDQ6UGcodGhpcywwKTtyZXR1cm47Y2FzZSA1OnR5KHRoaXMsMSk7cmV0dXJuO2Nhc2UgODpnMih0aGlzLG51bGwpO3JldHVybjtjYXNlIDk6cj1GMSh0aGlzLG51bGwsbnVsbCksciYmci5GaSgpO3JldHVybjtjYXNlIDExOiF0aGlzLmQmJih0aGlzLmQ9bmV3ICR1KHB1LHRoaXMsMTEpKSxUcih0aGlzLmQpO3JldHVybjtjYXNlIDEyOiF0aGlzLmMmJih0aGlzLmM9bmV3IGhlKHp3LHRoaXMsMTIsMTApKSxUcih0aGlzLmMpO3JldHVybjtjYXNlIDEzOnRoaXMuYSYmX0ModGhpcy5hKTtyZXR1cm47Y2FzZSAxNDp0aGlzLmImJlRyKHRoaXMuYik7cmV0dXJufWdoKHRoaXMsZS1KbigobG4oKSxzcCkpLHduKChuPXUoTW4odGhpcywxNiksMjYpLG58fHNwKSxlKSl9LGwuR2g9ZnVuY3Rpb24oKXt2YXIgZSxuO2lmKHRoaXMuYylmb3IoZT0wLG49dGhpcy5jLmk7ZTxuOysrZSlGTShBdCh0aGlzLmMsZSkpO09oKHRoaXMpLHRoaXMuQmJ8PTF9LE4oTG4sIkVPcGVyYXRpb25JbXBsIiwzOTkpLEQoNTA1LDc0MixEOHQsJE0pLGwuSGk9ZnVuY3Rpb24oZSxuKXtwUWUodGhpcyxlLHUobiwxMzgpKX0sbC5JaT1mdW5jdGlvbihlKXtoWGUodGhpcyx1KGUsMTM4KSl9LGwuT2k9ZnVuY3Rpb24oZSl7dmFyIG4scjtyZXR1cm4gbj11KEF0KGZsKHRoaXMuYSksZSksODcpLHI9bi5jLHJ8fChsbigpLEsxKX0sbC5UaT1mdW5jdGlvbihlKXt2YXIgbixyO3JldHVybiBuPXUoZHkoZmwodGhpcy5hKSxlKSw4Nykscj1uLmMscnx8KGxuKCksSzEpfSxsLlVpPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGZobih0aGlzLGUsdShuLDEzOCkpfSxsLmFpPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuWmk9ZnVuY3Rpb24oZSxuLHIscyxvKXtyZXR1cm4gbnVsbH0sbC5KaT1mdW5jdGlvbigpe3JldHVybiBuZXcgTXp0KHRoaXMpfSxsLktpPWZ1bmN0aW9uKCl7VHIoZmwodGhpcy5hKSl9LGwuTGk9ZnVuY3Rpb24oZSl7cmV0dXJuIFVyZSh0aGlzLGUpfSxsLk1pPWZ1bmN0aW9uKGUpe3ZhciBuLHI7Zm9yKHI9ZS5LYygpO3IuT2IoKTspaWYobj1yLlBiKCksIVVyZSh0aGlzLG4pKXJldHVybiExO3JldHVybiEwfSxsLk5pPWZ1bmN0aW9uKGUpe3ZhciBuLHIscztpZihfdChlLDE1KSYmKHM9dShlLDE1KSxzLmdjKCk9PWZsKHRoaXMuYSkuaSkpe2ZvcihuPXMuS2MoKSxyPW5ldyBucih0aGlzKTtuLk9iKCk7KWlmKEd0KG4uUGIoKSkhPT1HdChkcihyKSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuITF9LGwuUGk9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscyxvO2ZvcihyPTEsbj1uZXcgbnIoZmwodGhpcy5hKSk7bi5lIT1uLmkuZ2MoKTspZT11KGRyKG4pLDg3KSxzPShvPWUuYyxvfHwobG4oKSxLMSkpLHI9MzEqcisocz9KaShzKTowKTtyZXR1cm4gcn0sbC5RaT1mdW5jdGlvbihlKXt2YXIgbixyLHMsbztmb3Iocz0wLHI9bmV3IG5yKGZsKHRoaXMuYSkpO3IuZSE9ci5pLmdjKCk7KXtpZihuPXUoZHIociksODcpLEd0KGUpPT09R3QoKG89bi5jLG98fChsbigpLEsxKSkpKXJldHVybiBzOysrc31yZXR1cm4tMX0sbC5SaT1mdW5jdGlvbigpe3JldHVybiBmbCh0aGlzLmEpLmk9PTB9LGwuU2k9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbC5WaT1mdW5jdGlvbigpe3JldHVybiBmbCh0aGlzLmEpLml9LGwuV2k9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscyxvLGg7Zm9yKGg9ZmwodGhpcy5hKS5pLG89TnQoUW4sTWUsMSxoLDUsMSkscj0wLG49bmV3IG5yKGZsKHRoaXMuYSkpO24uZSE9bi5pLmdjKCk7KWU9dShkcihuKSw4Nyksb1tyKytdPShzPWUuYyxzfHwobG4oKSxLMSkpO3JldHVybiBvfSxsLlhpPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGgsZCx3O2Zvcih3PWZsKHRoaXMuYSkuaSxlLmxlbmd0aDx3JiYobz1fRChkbChlKS5jLHcpLGU9byksZS5sZW5ndGg+dyYmbHMoZSx3LG51bGwpLHM9MCxyPW5ldyBucihmbCh0aGlzLmEpKTtyLmUhPXIuaS5nYygpOyluPXUoZHIociksODcpLGg9KGQ9bi5jLGR8fChsbigpLEsxKSksbHMoZSxzKyssaCk7cmV0dXJuIGV9LGwuWWk9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscyxvO2ZvcihvPW5ldyBfZyxvLmErPSJbIixlPWZsKHRoaXMuYSksbj0wLHM9ZmwodGhpcy5hKS5pO248czspeW8obyxkXygocj11KEF0KGUsbiksODcpLmMscnx8KGxuKCksSzEpKSkpLCsrbjxzJiYoby5hKz1YYSk7cmV0dXJuIG8uYSs9Il0iLG8uYX0sbC4kaT1mdW5jdGlvbihlKXt9LGwuYWo9ZnVuY3Rpb24oKXtyZXR1cm4gMTN9LGwuQms9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5iaj1mdW5jdGlvbigpe3JldHVybiExfSxsLkNrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuRGs9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5Faz1mdW5jdGlvbigpe3JldHVybiEwfSxsLnJrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuRms9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxMzgpfSxsLmZqPWZ1bmN0aW9uKCl7cmV0dXJuIHBpbih0aGlzLmEpfSxsLmhpPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwubmk9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sTihMbiwiRU9wZXJhdGlvbkltcGwvMSIsNTA1KSxEKDEzNDAsMTk2NCxMNyxNenQpLGwuWmM9ZnVuY3Rpb24oZSl7cmV0dXJuIENEKHRoaXMuYSxlKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiBmbCh0aGlzLmEuYSkuaX0sTihMbiwiRU9wZXJhdGlvbkltcGwvMS8xIiwxMzQwKSxEKDEzNDEsNTQ1LEtvLGJZdCksbC5paT1mdW5jdGlvbihlLG4pe3ZhciByLHM7cmV0dXJuIHI9dSh0Qyh0aGlzLGUsbiksODcpLFNsKHRoaXMuZSkmJlVrKHRoaXMsbmV3IGdEKHRoaXMuYSw3LChsbigpLFo0ZSksZGUobiksKHM9ci5jLHN8fEsxKSxlKSkscn0sbC5qaj1mdW5jdGlvbihlLG4pe3JldHVybiBBdW4odGhpcyx1KGUsODcpLG4pfSxsLmtqPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEx1bih0aGlzLHUoZSw4Nyksbil9LGwubGo9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBBaG4odGhpcyx1KGUsODcpLHUobiw4Nykscil9LGwuWmk9ZnVuY3Rpb24oZSxuLHIscyxvKXtzd2l0Y2goZSl7Y2FzZSAzOnJldHVybiBJXyh0aGlzLGUsbixyLHMsdGhpcy5pPjEpO2Nhc2UgNTpyZXR1cm4gSV8odGhpcyxlLG4scixzLHRoaXMuaS11KHIsMTUpLmdjKCk+MCk7ZGVmYXVsdDpyZXR1cm4gbmV3IEYwKHRoaXMuZSxlLHRoaXMuYyxuLHIscywhMCl9fSxsLmlqPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwuZmo9ZnVuY3Rpb24oKXtyZXR1cm4gbHN0KHRoaXMpfSxsLlhqPWZ1bmN0aW9uKCl7VHIodGhpcyl9LE4oTG4sIkVPcGVyYXRpb25JbXBsLzIiLDEzNDEpLEQoNDk4LDEsezE5Mzg6MSw0OTg6MX0sSUd0KSxOKExuLCJFUGFja2FnZUltcGwvMSIsNDk4KSxEKDE2LDg1LEtvLGhlKSxsLnprPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZH0sbC5Baz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuRGs9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5iPTAsTihZaSwiRU9iamVjdENvbnRhaW5tZW50V2l0aEludmVyc2VFTGlzdCIsMTYpLEQoMzUzLDE2LEtvLE02KSxsLkVrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwubGk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gYXgodGhpcyxlLHUobiw1NikpfSxOKFlpLCJFT2JqZWN0Q29udGFpbm1lbnRXaXRoSW52ZXJzZUVMaXN0L1Jlc29sdmluZyIsMzUzKSxEKDI5OCwzNTMsS28scW0pLGwuY2k9ZnVuY3Rpb24oKXt0aGlzLmEudGI9bnVsbH0sTihMbiwiRVBhY2thZ2VJbXBsLzIiLDI5OCksRCgxMjI4LDEse30sdEIpLE4oTG4sIkVQYWNrYWdlSW1wbC8zIiwxMjI4KSxEKDcxOCw0MyxTNCxGcHQpLGwuX2I9ZnVuY3Rpb24oZSl7cmV0dXJuIGhhKGUpP2NydCh0aGlzLGUpOiEhRm8odGhpcy5mLGUpfSxOKExuLCJFUGFja2FnZVJlZ2lzdHJ5SW1wbCIsNzE4KSxEKDUwOSwyODQsezEwNToxLDkyOjEsOTA6MSwxNDc6MSwxOTE6MSw1NjoxLDIwMTc6MSwxMDg6MSw0NzI6MSw0OToxLDk3OjEsMTUwOjEsNTA5OjEsMjg0OjEsMTE0OjEsMTE1OjF9LFh0dCksbC5RZz1mdW5jdGlvbihlKXtyZXR1cm4ganNlKHRoaXMsZSl9LGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saDtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoZWksdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIEZuKCksISEodGhpcy5CYiYyNTYpO2Nhc2UgMzpyZXR1cm4gRm4oKSwhISh0aGlzLkJiJjUxMik7Y2FzZSA0OnJldHVybiBkZSh0aGlzLnMpO2Nhc2UgNTpyZXR1cm4gZGUodGhpcy50KTtjYXNlIDY6cmV0dXJuIEZuKCksaD10aGlzLnQsaD4xfHxoPT0tMTtjYXNlIDc6cmV0dXJuIEZuKCksbz10aGlzLnMsbz49MTtjYXNlIDg6cmV0dXJuIG4/T2godGhpcyk6dGhpcy5yO2Nhc2UgOTpyZXR1cm4gdGhpcy5xO2Nhc2UgMTA6cmV0dXJuIHRoaXMuRGI+PjE2PT0xMD91KHRoaXMuQ2IsNTkpOm51bGx9cmV0dXJuIGhoKHRoaXMsZS1KbigobG4oKSxlMykpLHduKChzPXUoTW4odGhpcywxNiksMjYpLHN8fGUzKSxlKSxuLHIpfSxsLmhoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLGg7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKGVpLHRoaXMsMCwzKSksZXUodGhpcy5BYixlLHIpO2Nhc2UgMTA6cmV0dXJuIHRoaXMuQ2ImJihyPShvPXRoaXMuRGI+PjE2LG8+PTA/anNlKHRoaXMscik6dGhpcy5DYi5paCh0aGlzLC0xLW8sbnVsbCxyKSkpLFVsKHRoaXMsZSwxMCxyKX1yZXR1cm4gaD11KHduKChzPXUoTW4odGhpcywxNiksMjYpLHN8fChsbigpLGUzKSksbiksNjYpLGguTmooKS5Raih0aGlzLHV1KHRoaXMpLG4tSm4oKGxuKCksZTMpKSxlLHIpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShlaSx0aGlzLDAsMykpLHphKHRoaXMuQWIsZSxyKTtjYXNlIDk6cmV0dXJuIFdudCh0aGlzLHIpO2Nhc2UgMTA6cmV0dXJuIFVsKHRoaXMsbnVsbCwxMCxyKX1yZXR1cm4gbz11KHduKChzPXUoTW4odGhpcywxNiksMjYpLHN8fChsbigpLGUzKSksbiksNjYpLG8uTmooKS5Saih0aGlzLHV1KHRoaXMpLG4tSm4oKGxuKCksZTMpKSxlLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3ZhciBuLHIscztzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuKHRoaXMuQmImMjU2KT09MDtjYXNlIDM6cmV0dXJuKHRoaXMuQmImNTEyKT09MDtjYXNlIDQ6cmV0dXJuIHRoaXMucyE9MDtjYXNlIDU6cmV0dXJuIHRoaXMudCE9MTtjYXNlIDY6cmV0dXJuIHM9dGhpcy50LHM+MXx8cz09LTE7Y2FzZSA3OnJldHVybiByPXRoaXMucyxyPj0xO2Nhc2UgODpyZXR1cm4hIXRoaXMuciYmIXRoaXMucS5lJiZqdih0aGlzLnEpLmk9PTA7Y2FzZSA5OnJldHVybiEhdGhpcy5xJiYhKHRoaXMuciYmIXRoaXMucS5lJiZqdih0aGlzLnEpLmk9PTApO2Nhc2UgMTA6cmV0dXJuISEodGhpcy5EYj4+MTY9PTEwJiZ1KHRoaXMuQ2IsNTkpKX1yZXR1cm4gdWgodGhpcyxlLUpuKChsbigpLGUzKSksd24oKG49dShNbih0aGlzLDE2KSwyNiksbnx8ZTMpLGUpKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBsbigpLGUzfSxOKExuLCJFUGFyYW1ldGVySW1wbCIsNTA5KSxEKDk5LDQ0OSx7MTA1OjEsOTI6MSw5MDoxLDE0NzoxLDE5MToxLDU2OjEsMTg6MSwxNzA6MSw2NjoxLDEwODoxLDQ3MjoxLDQ5OjEsOTc6MSwxNTA6MSw5OToxLDQ0OToxLDI4NDoxLDExNDoxLDExNToxLDY3NzoxfSxqMnQpLGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saCxkO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShlaSx0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLnpiO2Nhc2UgMjpyZXR1cm4gRm4oKSwhISh0aGlzLkJiJjI1Nik7Y2FzZSAzOnJldHVybiBGbigpLCEhKHRoaXMuQmImNTEyKTtjYXNlIDQ6cmV0dXJuIGRlKHRoaXMucyk7Y2FzZSA1OnJldHVybiBkZSh0aGlzLnQpO2Nhc2UgNjpyZXR1cm4gRm4oKSxkPXRoaXMudCxkPjF8fGQ9PS0xO2Nhc2UgNzpyZXR1cm4gRm4oKSxvPXRoaXMucyxvPj0xO2Nhc2UgODpyZXR1cm4gbj9PaCh0aGlzKTp0aGlzLnI7Y2FzZSA5OnJldHVybiB0aGlzLnE7Y2FzZSAxMDpyZXR1cm4gRm4oKSwhISh0aGlzLkJiJnhmKTtjYXNlIDExOnJldHVybiBGbigpLCEhKHRoaXMuQmImQXkpO2Nhc2UgMTI6cmV0dXJuIEZuKCksISEodGhpcy5CYiZ5eSk7Y2FzZSAxMzpyZXR1cm4gdGhpcy5qO2Nhc2UgMTQ6cmV0dXJuIHY3KHRoaXMpO2Nhc2UgMTU6cmV0dXJuIEZuKCksISEodGhpcy5CYiZLdSk7Y2FzZSAxNjpyZXR1cm4gRm4oKSwhISh0aGlzLkJiJnZkKTtjYXNlIDE3OnJldHVybiBHbSh0aGlzKTtjYXNlIDE4OnJldHVybiBGbigpLCEhKHRoaXMuQmImeWMpO2Nhc2UgMTk6cmV0dXJuIEZuKCksaD1vbyh0aGlzKSwhIShoJiZoLkJiJnljKTtjYXNlIDIwOnJldHVybiBGbigpLCEhKHRoaXMuQmImUWEpO2Nhc2UgMjE6cmV0dXJuIG4/b28odGhpcyk6dGhpcy5iO2Nhc2UgMjI6cmV0dXJuIG4/a3l0KHRoaXMpOndKdCh0aGlzKTtjYXNlIDIzOnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IFczKFp5LHRoaXMsMjMpKSx0aGlzLmF9cmV0dXJuIGhoKHRoaXMsZS1KbigobG4oKSx1NSkpLHduKChzPXUoTW4odGhpcywxNiksMjYpLHN8fHU1KSxlKSxuLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLnpiIT1udWxsO2Nhc2UgMjpyZXR1cm4odGhpcy5CYiYyNTYpPT0wO2Nhc2UgMzpyZXR1cm4odGhpcy5CYiY1MTIpPT0wO2Nhc2UgNDpyZXR1cm4gdGhpcy5zIT0wO2Nhc2UgNTpyZXR1cm4gdGhpcy50IT0xO2Nhc2UgNjpyZXR1cm4gbz10aGlzLnQsbz4xfHxvPT0tMTtjYXNlIDc6cmV0dXJuIHI9dGhpcy5zLHI+PTE7Y2FzZSA4OnJldHVybiEhdGhpcy5yJiYhdGhpcy5xLmUmJmp2KHRoaXMucSkuaT09MDtjYXNlIDk6cmV0dXJuISF0aGlzLnEmJiEodGhpcy5yJiYhdGhpcy5xLmUmJmp2KHRoaXMucSkuaT09MCk7Y2FzZSAxMDpyZXR1cm4odGhpcy5CYiZ4Zik9PTA7Y2FzZSAxMTpyZXR1cm4odGhpcy5CYiZBeSkhPTA7Y2FzZSAxMjpyZXR1cm4odGhpcy5CYiZ5eSkhPTA7Y2FzZSAxMzpyZXR1cm4gdGhpcy5qIT1udWxsO2Nhc2UgMTQ6cmV0dXJuIHY3KHRoaXMpIT1udWxsO2Nhc2UgMTU6cmV0dXJuKHRoaXMuQmImS3UpIT0wO2Nhc2UgMTY6cmV0dXJuKHRoaXMuQmImdmQpIT0wO2Nhc2UgMTc6cmV0dXJuISFHbSh0aGlzKTtjYXNlIDE4OnJldHVybih0aGlzLkJiJnljKSE9MDtjYXNlIDE5OnJldHVybiBzPW9vKHRoaXMpLCEhcyYmKHMuQmImeWMpIT0wO2Nhc2UgMjA6cmV0dXJuKHRoaXMuQmImUWEpPT0wO2Nhc2UgMjE6cmV0dXJuISF0aGlzLmI7Y2FzZSAyMjpyZXR1cm4hIXdKdCh0aGlzKTtjYXNlIDIzOnJldHVybiEhdGhpcy5hJiZ0aGlzLmEuaSE9MH1yZXR1cm4gdWgodGhpcyxlLUpuKChsbigpLHU1KSksd24oKG49dShNbih0aGlzLDE2KSwyNiksbnx8dTUpLGUpKX0sbC5zaD1mdW5jdGlvbihlLG4pe3ZhciByLHM7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKGVpLHRoaXMsMCwzKSksVHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShlaSx0aGlzLDAsMykpLGdzKHRoaXMuQWIsdShuLDE0KSk7cmV0dXJuO2Nhc2UgMTp4cnQodGhpcyxqcihuKSk7cmV0dXJuO2Nhc2UgMjpSZyh0aGlzLEJlKEZlKG4pKSk7cmV0dXJuO2Nhc2UgMzpqZyh0aGlzLEJlKEZlKG4pKSk7cmV0dXJuO2Nhc2UgNDpQZyh0aGlzLHUobiwxOSkuYSk7cmV0dXJuO2Nhc2UgNTp0eSh0aGlzLHUobiwxOSkuYSk7cmV0dXJuO2Nhc2UgODpnMih0aGlzLHUobiwxMzgpKTtyZXR1cm47Y2FzZSA5OnM9RjEodGhpcyx1KG4sODcpLG51bGwpLHMmJnMuRmkoKTtyZXR1cm47Y2FzZSAxMDp0Nyh0aGlzLEJlKEZlKG4pKSk7cmV0dXJuO2Nhc2UgMTE6cjcodGhpcyxCZShGZShuKSkpO3JldHVybjtjYXNlIDEyOmU3KHRoaXMsQmUoRmUobikpKTtyZXR1cm47Y2FzZSAxMzpXYnQodGhpcyxqcihuKSk7cmV0dXJuO2Nhc2UgMTU6bjcodGhpcyxCZShGZShuKSkpO3JldHVybjtjYXNlIDE2Omk3KHRoaXMsQmUoRmUobikpKTtyZXR1cm47Y2FzZSAxODprcm4odGhpcyxCZShGZShuKSkpO3JldHVybjtjYXNlIDIwOkp5dCh0aGlzLEJlKEZlKG4pKSk7cmV0dXJuO2Nhc2UgMjE6Wm10KHRoaXMsdShuLDE4KSk7cmV0dXJuO2Nhc2UgMjM6IXRoaXMuYSYmKHRoaXMuYT1uZXcgVzMoWnksdGhpcywyMykpLFRyKHRoaXMuYSksIXRoaXMuYSYmKHRoaXMuYT1uZXcgVzMoWnksdGhpcywyMykpLGdzKHRoaXMuYSx1KG4sMTQpKTtyZXR1cm59YmgodGhpcyxlLUpuKChsbigpLHU1KSksd24oKHI9dShNbih0aGlzLDE2KSwyNikscnx8dTUpLGUpLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIGxuKCksdTV9LGwuQmg9ZnVuY3Rpb24oZSl7dmFyIG4scjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoZWksdGhpcywwLDMpKSxUcih0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOl90KHRoaXMuQ2IsODgpJiZoeShobCh1KHRoaXMuQ2IsODgpKSw0KSx0dSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDI6UmcodGhpcywhMCk7cmV0dXJuO2Nhc2UgMzpqZyh0aGlzLCEwKTtyZXR1cm47Y2FzZSA0OlBnKHRoaXMsMCk7cmV0dXJuO2Nhc2UgNTp0eSh0aGlzLDEpO3JldHVybjtjYXNlIDg6ZzIodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA5OnI9RjEodGhpcyxudWxsLG51bGwpLHImJnIuRmkoKTtyZXR1cm47Y2FzZSAxMDp0Nyh0aGlzLCEwKTtyZXR1cm47Y2FzZSAxMTpyNyh0aGlzLCExKTtyZXR1cm47Y2FzZSAxMjplNyh0aGlzLCExKTtyZXR1cm47Y2FzZSAxMzp0aGlzLmk9bnVsbCxleih0aGlzLG51bGwpO3JldHVybjtjYXNlIDE1Om43KHRoaXMsITEpO3JldHVybjtjYXNlIDE2Omk3KHRoaXMsITEpO3JldHVybjtjYXNlIDE4Olp5dCh0aGlzLCExKSxfdCh0aGlzLkNiLDg4KSYmaHkoaGwodSh0aGlzLkNiLDg4KSksMik7cmV0dXJuO2Nhc2UgMjA6Snl0KHRoaXMsITApO3JldHVybjtjYXNlIDIxOlptdCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDIzOiF0aGlzLmEmJih0aGlzLmE9bmV3IFczKFp5LHRoaXMsMjMpKSxUcih0aGlzLmEpO3JldHVybn1naCh0aGlzLGUtSm4oKGxuKCksdTUpKSx3bigobj11KE1uKHRoaXMsMTYpLDI2KSxufHx1NSksZSkpfSxsLkdoPWZ1bmN0aW9uKCl7a3l0KHRoaXMpLHk4KE1vKChHdSgpLFNhKSx0aGlzKSksT2godGhpcyksdGhpcy5CYnw9MX0sbC5Maj1mdW5jdGlvbigpe3JldHVybiBvbyh0aGlzKX0sbC5xaz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPW9vKHRoaXMpLCEhZSYmKGUuQmImeWMpIT0wfSxsLnJrPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuQmImeWMpIT0wfSxsLnNrPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuQmImUWEpIT0wfSxsLm5rPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHRoaXMuYz1udWxsLEd5dCh0aGlzLGUsbil9LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gdGhpcy5EYiY2ND9wcSh0aGlzKTooZT1uZXcgQWgocHEodGhpcykpLGUuYSs9IiAoY29udGFpbm1lbnQ6ICIsQ2coZSwodGhpcy5CYiZ5YykhPTApLGUuYSs9IiwgcmVzb2x2ZVByb3hpZXM6ICIsQ2coZSwodGhpcy5CYiZRYSkhPTApLGUuYSs9IikiLGUuYSl9LE4oTG4sIkVSZWZlcmVuY2VJbXBsIiw5OSksRCg1NDgsMTE1LHsxMDU6MSw0MjoxLDkyOjEsOTA6MSwxMzM6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSw1NDg6MSwxMTQ6MSwxMTU6MX0sWVopLGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLmNkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5kZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gRHYodGhpcyl9LGwuVWg9ZnVuY3Rpb24oZSl7U3RuKHRoaXMsanIoZSkpfSxsLmVkPWZ1bmN0aW9uKGUpe3JldHVybiBwdG4odGhpcyxqcihlKSl9LGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIHRoaXMuYjtjYXNlIDE6cmV0dXJuIHRoaXMuY31yZXR1cm4gaGgodGhpcyxlLUpuKChsbigpLEphKSksd24oKHM9dShNbih0aGlzLDE2KSwyNiksc3x8SmEpLGUpLG4scil9LGwubGg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4gdGhpcy5iIT1udWxsO2Nhc2UgMTpyZXR1cm4gdGhpcy5jIT1udWxsfXJldHVybiB1aCh0aGlzLGUtSm4oKGxuKCksSmEpKSx3bigobj11KE1uKHRoaXMsMTYpLDI2KSxufHxKYSksZSkpfSxsLnNoPWZ1bmN0aW9uKGUsbil7dmFyIHI7c3dpdGNoKGUpe2Nhc2UgMDpBdG4odGhpcyxqcihuKSk7cmV0dXJuO2Nhc2UgMTpZbXQodGhpcyxqcihuKSk7cmV0dXJufWJoKHRoaXMsZS1KbigobG4oKSxKYSkpLHduKChyPXUoTW4odGhpcywxNiksMjYpLHJ8fEphKSxlKSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBsbigpLEphfSxsLkJoPWZ1bmN0aW9uKGUpe3ZhciBuO3N3aXRjaChlKXtjYXNlIDA6S210KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMTpZbXQodGhpcyxudWxsKTtyZXR1cm59Z2godGhpcyxlLUpuKChsbigpLEphKSksd24oKG49dShNbih0aGlzLDE2KSwyNiksbnx8SmEpLGUpKX0sbC5TaD1mdW5jdGlvbigpe3ZhciBlO3JldHVybiB0aGlzLmE9PS0xJiYoZT10aGlzLmIsdGhpcy5hPWU9PW51bGw/MDp6ZyhlKSksdGhpcy5hfSxsLlRoPWZ1bmN0aW9uKGUpe3RoaXMuYT1lfSxsLkliPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuRGImNjQ/bWYodGhpcyk6KGU9bmV3IEFoKG1mKHRoaXMpKSxlLmErPSIgKGtleTogIix5byhlLHRoaXMuYiksZS5hKz0iLCB2YWx1ZTogIix5byhlLHRoaXMuYyksZS5hKz0iKSIsZS5hKX0sbC5hPS0xLGwuYj1udWxsLGwuYz1udWxsO3ZhciBwYz1OKExuLCJFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeUltcGwiLDU0OCksaTVlPWFzKFlpLCJGZWF0dXJlTWFwL0VudHJ5L0ludGVybmFsIik7RCg1NjUsMSxTSCksbC5Paz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5Qayh1KGUsNDkpKX0sbC5Qaz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5PayhlKX0sbC5GYj1mdW5jdGlvbihlKXt2YXIgbixyO3JldHVybiB0aGlzPT09ZT8hMDpfdChlLDcyKT8obj11KGUsNzIpLG4uYWsoKT09dGhpcy5jPyhyPXRoaXMuZGQoKSxyPT1udWxsP24uZGQoKT09bnVsbDpTaShyLG4uZGQoKSkpOiExKTohMX0sbC5haz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGwuSGI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLmRkKCksSmkodGhpcy5jKV4oZT09bnVsbD8wOkppKGUpKX0sbC5JYj1mdW5jdGlvbigpe3ZhciBlLG47cmV0dXJuIGU9dGhpcy5jLG49emwoZS5IaigpKS5QaCgpLGUubmUoKSwobiE9bnVsbCYmbi5sZW5ndGghPTA/bisiOiIrZS5uZSgpOmUubmUoKSkrIj0iK3RoaXMuZGQoKX0sTihMbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9CYXNpY0ZlYXR1cmVNYXBFbnRyeSIsNTY1KSxEKDc3Niw1NjUsU0gsSzJ0KSxsLlBrPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgSzJ0KHRoaXMuYyxlKX0sbC5kZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuUWs9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBWb24odGhpcyxlLHRoaXMuYSxuLHIpfSxsLlJrPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gR29uKHRoaXMsZSx0aGlzLmEsbixyKX0sTihMbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9Db250YWlubWVudFVwZGF0aW5nRmVhdHVyZU1hcEVudHJ5Iiw3NzYpLEQoMTMxNCwxLHt9LE9HdCksbC5Qaj1mdW5jdGlvbihlLG4scixzLG8pe3ZhciBoO3JldHVybiBoPXUoTDgoZSx0aGlzLmIpLDIxNSksaC5ubCh0aGlzLmEpLldqKHMpfSxsLlFqPWZ1bmN0aW9uKGUsbixyLHMsbyl7dmFyIGg7cmV0dXJuIGg9dShMOChlLHRoaXMuYiksMjE1KSxoLmVsKHRoaXMuYSxzLG8pfSxsLlJqPWZ1bmN0aW9uKGUsbixyLHMsbyl7dmFyIGg7cmV0dXJuIGg9dShMOChlLHRoaXMuYiksMjE1KSxoLmZsKHRoaXMuYSxzLG8pfSxsLlNqPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztyZXR1cm4gcz11KEw4KGUsdGhpcy5iKSwyMTUpLHMubmwodGhpcy5hKS5maigpfSxsLlRqPWZ1bmN0aW9uKGUsbixyLHMpe3ZhciBvO289dShMOChlLHRoaXMuYiksMjE1KSxvLm5sKHRoaXMuYSkuV2Iocyl9LGwuVWo9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiB1KEw4KGUsdGhpcy5iKSwyMTUpLm5sKHRoaXMuYSl9LGwuVmo9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3M9dShMOChlLHRoaXMuYiksMjE1KSxzLm5sKHRoaXMuYSkuWGooKX0sTihMbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZUZlYXR1cmVNYXBEZWxlZ2F0b3IiLDEzMTQpLEQoODksMSx7fSxMZyx0MixEZyxyMiksbC5Qaj1mdW5jdGlvbihlLG4scixzLG8pe3ZhciBoO2lmKGg9bi5DaChyKSxoPT1udWxsJiZuLkRoKHIsaD1BcSh0aGlzLGUpKSwhbylzd2l0Y2godGhpcy5lKXtjYXNlIDUwOmNhc2UgNDE6cmV0dXJuIHUoaCw1ODkpLnNqKCk7Y2FzZSA0MDpyZXR1cm4gdShoLDIxNSkua2woKX1yZXR1cm4gaH0sbC5Raj1mdW5jdGlvbihlLG4scixzLG8pe3ZhciBoLGQ7cmV0dXJuIGQ9bi5DaChyKSxkPT1udWxsJiZuLkRoKHIsZD1BcSh0aGlzLGUpKSxoPXUoZCw2OSkubGsocyxvKSxofSxsLlJqPWZ1bmN0aW9uKGUsbixyLHMsbyl7dmFyIGg7cmV0dXJuIGg9bi5DaChyKSxoIT1udWxsJiYobz11KGgsNjkpLm1rKHMsbykpLG99LGwuU2o9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3JldHVybiBzPW4uQ2gocikscyE9bnVsbCYmdShzLDc2KS5maigpfSxsLlRqPWZ1bmN0aW9uKGUsbixyLHMpe3ZhciBvO289dShuLkNoKHIpLDc2KSwhbyYmbi5EaChyLG89QXEodGhpcyxlKSksby5XYihzKX0sbC5Vaj1mdW5jdGlvbihlLG4scil7dmFyIHMsbztyZXR1cm4gbz1uLkNoKHIpLG89PW51bGwmJm4uRGgocixvPUFxKHRoaXMsZSkpLF90KG8sNzYpP3Uobyw3Nik6KHM9dShuLkNoKHIpLDE1KSxuZXcgSXp0KHMpKX0sbC5Waj1mdW5jdGlvbihlLG4scil7dmFyIHM7cz11KG4uQ2gociksNzYpLCFzJiZuLkRoKHIscz1BcSh0aGlzLGUpKSxzLlhqKCl9LGwuYj0wLGwuZT0wLE4oTG4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVNYW55Iiw4OSksRCg1MDQsMSx7fSksbC5Raj1mdW5jdGlvbihlLG4scixzLG8pe3Rocm93IG50KG5ldyBQcil9LGwuUmo9ZnVuY3Rpb24oZSxuLHIscyxvKXt0aHJvdyBudChuZXcgUHIpfSxsLlVqPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gbmV3IEFYdCh0aGlzLGUsbixyKX07dmFyIGYwO04oTG4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGUiLDUwNCksRCgxMzMxLDEsbnV0LEFYdCksbC5Xaj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLlBqKHRoaXMuYyx0aGlzLmQsdGhpcy5iLGUsITApfSxsLmZqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5Taih0aGlzLmMsdGhpcy5kLHRoaXMuYil9LGwuV2I9ZnVuY3Rpb24oZSl7dGhpcy5hLlRqKHRoaXMuYyx0aGlzLmQsdGhpcy5iLGUpfSxsLlhqPWZ1bmN0aW9uKCl7dGhpcy5hLlZqKHRoaXMuYyx0aGlzLmQsdGhpcy5iKX0sbC5iPTAsTihMbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZS8xIiwxMzMxKSxEKDc2OSw1MDQse30sTXd0KSxsLlBqPWZ1bmN0aW9uKGUsbixyLHMsbyl7cmV0dXJuIGNhdChlLGUuZWgoKSxlLlZnKCkpPT10aGlzLmI/dGhpcy5zaygpJiZzP1VzdChlKTplLmVoKCk6bnVsbH0sbC5Raj1mdW5jdGlvbihlLG4scixzLG8pe3ZhciBoLGQ7cmV0dXJuIGUuZWgoKSYmKG89KGg9ZS5WZygpLGg+PTA/ZS5RZyhvKTplLmVoKCkuaWgoZSwtMS1oLG51bGwsbykpKSxkPWVzKGUuVGcoKSx0aGlzLmUpLGUuU2cocyxkLG8pfSxsLlJqPWZ1bmN0aW9uKGUsbixyLHMsbyl7dmFyIGg7cmV0dXJuIGg9ZXMoZS5UZygpLHRoaXMuZSksZS5TZyhudWxsLGgsbyl9LGwuU2o9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3JldHVybiBzPWVzKGUuVGcoKSx0aGlzLmUpLCEhZS5laCgpJiZlLlZnKCk9PXN9LGwuVGo9ZnVuY3Rpb24oZSxuLHIscyl7dmFyIG8saCxkLHcsaztpZihzIT1udWxsJiYhZmF0KHRoaXMuYSxzKSl0aHJvdyBudChuZXcgS2soQUgrKF90KHMsNTYpP2w0dCh1KHMsNTYpLlRnKCkpOk5tdChkbChzKSkpK0xIK3RoaXMuYSsiJyIpKTtpZihvPWUuZWgoKSxkPWVzKGUuVGcoKSx0aGlzLmUpLEd0KHMpIT09R3Qobyl8fGUuVmcoKSE9ZCYmcyE9bnVsbCl7aWYoYzcoZSx1KHMsNTYpKSl0aHJvdyBudChuZXcgUG4oS0MrZS5JYigpKSk7az1udWxsLG8mJihrPShoPWUuVmcoKSxoPj0wP2UuUWcoayk6ZS5laCgpLmloKGUsLTEtaCxudWxsLGspKSksdz11KHMsNDkpLHcmJihrPXcuZ2goZSxlcyh3LlRnKCksdGhpcy5iKSxudWxsLGspKSxrPWUuU2codyxkLGspLGsmJmsuRmkoKX1lbHNlIGUuTGcoKSYmZS5NZygpJiZDaShlLG5ldyBvYShlLDEsZCxzLHMpKX0sbC5Waj1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoLGQ7cz1lLmVoKCkscz8oZD0obz1lLlZnKCksbz49MD9lLlFnKG51bGwpOmUuZWgoKS5paChlLC0xLW8sbnVsbCxudWxsKSksaD1lcyhlLlRnKCksdGhpcy5lKSxkPWUuU2cobnVsbCxoLGQpLGQmJmQuRmkoKSk6ZS5MZygpJiZlLk1nKCkmJkNpKGUsbmV3IF9fKGUsMSx0aGlzLmUsbnVsbCxudWxsKSl9LGwuc2s9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sTihMbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUNvbnRhaW5lciIsNzY5KSxEKDEzMTUsNzY5LHt9LHlLdCksbC5zaz1mdW5jdGlvbigpe3JldHVybiEwfSxOKExuLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlQ29udGFpbmVyUmVzb2x2aW5nIiwxMzE1KSxEKDU2Myw1MDQse30pLGwuUGo9ZnVuY3Rpb24oZSxuLHIscyxvKXt2YXIgaDtyZXR1cm4gaD1uLkNoKHIpLGg9PW51bGw/dGhpcy5iOkd0KGgpPT09R3QoZjApP251bGw6aH0sbC5Taj1mdW5jdGlvbihlLG4scil7dmFyIHM7cmV0dXJuIHM9bi5DaChyKSxzIT1udWxsJiYoR3Qocyk9PT1HdChmMCl8fCFTaShzLHRoaXMuYikpfSxsLlRqPWZ1bmN0aW9uKGUsbixyLHMpe3ZhciBvLGg7ZS5MZygpJiZlLk1nKCk/KG89KGg9bi5DaChyKSxoPT1udWxsP3RoaXMuYjpHdChoKT09PUd0KGYwKT9udWxsOmgpLHM9PW51bGw/dGhpcy5jIT1udWxsPyhuLkRoKHIsbnVsbCkscz10aGlzLmIpOnRoaXMuYiE9bnVsbD9uLkRoKHIsZjApOm4uRGgocixudWxsKToodGhpcy5TayhzKSxuLkRoKHIscykpLENpKGUsdGhpcy5kLlRrKGUsMSx0aGlzLmUsbyxzKSkpOnM9PW51bGw/dGhpcy5jIT1udWxsP24uRGgocixudWxsKTp0aGlzLmIhPW51bGw/bi5EaChyLGYwKTpuLkRoKHIsbnVsbCk6KHRoaXMuU2socyksbi5EaChyLHMpKX0sbC5Waj1mdW5jdGlvbihlLG4scil7dmFyIHMsbztlLkxnKCkmJmUuTWcoKT8ocz0obz1uLkNoKHIpLG89PW51bGw/dGhpcy5iOkd0KG8pPT09R3QoZjApP251bGw6byksbi5FaChyKSxDaShlLHRoaXMuZC5UayhlLDEsdGhpcy5lLHMsdGhpcy5iKSkpOm4uRWgocil9LGwuU2s9ZnVuY3Rpb24oZSl7dGhyb3cgbnQobmV3IHF6dCl9LE4oTG4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhIiw1NjMpLEQoQjQsMSx7fSxlQiksbC5Uaz1mdW5jdGlvbihlLG4scixzLG8pe3JldHVybiBuZXcgX18oZSxuLHIscyxvKX0sbC5Vaz1mdW5jdGlvbihlLG4scixzLG8saCl7cmV0dXJuIG5ldyBvcnQoZSxuLHIscyxvLGgpfTt2YXIgWkF0LEpBdCx0THQsZUx0LG5MdCxyTHQsaUx0LE1mdCxzTHQ7TihMbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGEvTm90aWZpY2F0aW9uQ3JlYXRvciIsQjQpLEQoMTMzMixCNCx7fSxuQiksbC5Uaz1mdW5jdGlvbihlLG4scixzLG8pe3JldHVybiBuZXcgaG10KGUsbixyLEJlKEZlKHMpKSxCZShGZShvKSkpfSxsLlVrPWZ1bmN0aW9uKGUsbixyLHMsbyxoKXtyZXR1cm4gbmV3IFhRdChlLG4scixCZShGZShzKSksQmUoRmUobykpLGgpfSxOKExuLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YS9Ob3RpZmljYXRpb25DcmVhdG9yLzEiLDEzMzIpLEQoMTMzMyxCNCx7fSxyQiksbC5Uaz1mdW5jdGlvbihlLG4scixzLG8pe3JldHVybiBuZXcgUm10KGUsbixyLHUocywyMTcpLmEsdShvLDIxNykuYSl9LGwuVWs9ZnVuY3Rpb24oZSxuLHIscyxvLGgpe3JldHVybiBuZXcgSFF0KGUsbixyLHUocywyMTcpLmEsdShvLDIxNykuYSxoKX0sTihMbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGEvTm90aWZpY2F0aW9uQ3JlYXRvci8yIiwxMzMzKSxEKDEzMzQsQjQse30sQ2spLGwuVGs9ZnVuY3Rpb24oZSxuLHIscyxvKXtyZXR1cm4gbmV3IGptdChlLG4scix1KHMsMTcyKS5hLHUobywxNzIpLmEpfSxsLlVrPWZ1bmN0aW9uKGUsbixyLHMsbyxoKXtyZXR1cm4gbmV3IFZRdChlLG4scix1KHMsMTcyKS5hLHUobywxNzIpLmEsaCl9LE4oTG4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhL05vdGlmaWNhdGlvbkNyZWF0b3IvMyIsMTMzNCksRCgxMzM1LEI0LHt9LGlCKSxsLlRrPWZ1bmN0aW9uKGUsbixyLHMsbyl7cmV0dXJuIG5ldyB1bXQoZSxuLHIsWnQodmUocykpLFp0KHZlKG8pKSl9LGwuVWs9ZnVuY3Rpb24oZSxuLHIscyxvLGgpe3JldHVybiBuZXcgR1F0KGUsbixyLFp0KHZlKHMpKSxadCh2ZShvKSksaCl9LE4oTG4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhL05vdGlmaWNhdGlvbkNyZWF0b3IvNCIsMTMzNSksRCgxMzM2LEI0LHt9LHNCKSxsLlRrPWZ1bmN0aW9uKGUsbixyLHMsbyl7cmV0dXJuIG5ldyBxbXQoZSxuLHIsdShzLDE1NSkuYSx1KG8sMTU1KS5hKX0sbC5Vaz1mdW5jdGlvbihlLG4scixzLG8saCl7cmV0dXJuIG5ldyBVUXQoZSxuLHIsdShzLDE1NSkuYSx1KG8sMTU1KS5hLGgpfSxOKExuLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YS9Ob3RpZmljYXRpb25DcmVhdG9yLzUiLDEzMzYpLEQoMTMzNyxCNCx7fSxYWiksbC5Uaz1mdW5jdGlvbihlLG4scixzLG8pe3JldHVybiBuZXcgbG10KGUsbixyLHUocywxOSkuYSx1KG8sMTkpLmEpfSxsLlVrPWZ1bmN0aW9uKGUsbixyLHMsbyxoKXtyZXR1cm4gbmV3IFdRdChlLG4scix1KHMsMTkpLmEsdShvLDE5KS5hLGgpfSxOKExuLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YS9Ob3RpZmljYXRpb25DcmVhdG9yLzYiLDEzMzcpLEQoMTMzOCxCNCx7fSxTayksbC5Uaz1mdW5jdGlvbihlLG4scixzLG8pe3JldHVybiBuZXcgJG10KGUsbixyLHUocywxNjIpLmEsdShvLDE2MikuYSl9LGwuVWs9ZnVuY3Rpb24oZSxuLHIscyxvLGgpe3JldHVybiBuZXcgS1F0KGUsbixyLHUocywxNjIpLmEsdShvLDE2MikuYSxoKX0sTihMbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGEvTm90aWZpY2F0aW9uQ3JlYXRvci83IiwxMzM4KSxEKDEzMzksQjQse30sQWspLGwuVGs9ZnVuY3Rpb24oZSxuLHIscyxvKXtyZXR1cm4gbmV3IHptdChlLG4scix1KHMsMTg0KS5hLHUobywxODQpLmEpfSxsLlVrPWZ1bmN0aW9uKGUsbixyLHMsbyxoKXtyZXR1cm4gbmV3IFlRdChlLG4scix1KHMsMTg0KS5hLHUobywxODQpLmEsaCl9LE4oTG4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhL05vdGlmaWNhdGlvbkNyZWF0b3IvOCIsMTMzOSksRCgxMzE3LDU2Myx7fSxMWHQpLGwuU2s9ZnVuY3Rpb24oZSl7aWYoIXRoaXMuYS53aihlKSl0aHJvdyBudChuZXcgS2soQUgrZGwoZSkrTEgrdGhpcy5hKyInIikpfSxOKExuLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YUR5bmFtaWMiLDEzMTcpLEQoMTMxOCw1NjMse30sdll0KSxsLlNrPWZ1bmN0aW9uKGUpe30sTihMbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGFTdGF0aWMiLDEzMTgpLEQoNzcwLDU2Myx7fSksbC5Taj1mdW5jdGlvbihlLG4scil7dmFyIHM7cmV0dXJuIHM9bi5DaChyKSxzIT1udWxsfSxsLlRqPWZ1bmN0aW9uKGUsbixyLHMpe3ZhciBvLGg7ZS5MZygpJiZlLk1nKCk/KG89ITAsaD1uLkNoKHIpLGg9PW51bGw/KG89ITEsaD10aGlzLmIpOkd0KGgpPT09R3QoZjApJiYoaD1udWxsKSxzPT1udWxsP3RoaXMuYyE9bnVsbD8obi5EaChyLG51bGwpLHM9dGhpcy5iKTpuLkRoKHIsZjApOih0aGlzLlNrKHMpLG4uRGgocixzKSksQ2koZSx0aGlzLmQuVWsoZSwxLHRoaXMuZSxoLHMsIW8pKSk6cz09bnVsbD90aGlzLmMhPW51bGw/bi5EaChyLG51bGwpOm4uRGgocixmMCk6KHRoaXMuU2socyksbi5EaChyLHMpKX0sbC5Waj1mdW5jdGlvbihlLG4scil7dmFyIHMsbztlLkxnKCkmJmUuTWcoKT8ocz0hMCxvPW4uQ2gociksbz09bnVsbD8ocz0hMSxvPXRoaXMuYik6R3Qobyk9PT1HdChmMCkmJihvPW51bGwpLG4uRWgociksQ2koZSx0aGlzLmQuVWsoZSwyLHRoaXMuZSxvLHRoaXMuYixzKSkpOm4uRWgocil9LE4oTG4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhVW5zZXR0YWJsZSIsNzcwKSxEKDEzMTksNzcwLHt9LE1YdCksbC5Taz1mdW5jdGlvbihlKXtpZighdGhpcy5hLndqKGUpKXRocm93IG50KG5ldyBLayhBSCtkbChlKStMSCt0aGlzLmErIiciKSl9LE4oTG4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhVW5zZXR0YWJsZUR5bmFtaWMiLDEzMTkpLEQoMTMyMCw3NzAse30sd1l0KSxsLlNrPWZ1bmN0aW9uKGUpe30sTihMbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGFVbnNldHRhYmxlU3RhdGljIiwxMzIwKSxEKDM5OCw1MDQse30sUGopLGwuUGo9ZnVuY3Rpb24oZSxuLHIscyxvKXt2YXIgaCxkLHcsayxfO2lmKF89bi5DaChyKSx0aGlzLktqKCkmJkd0KF8pPT09R3QoZjApKXJldHVybiBudWxsO2lmKHRoaXMuc2soKSYmcyYmXyE9bnVsbCl7aWYodz11KF8sNDkpLHcua2goKSYmKGs9WHAoZSx3KSx3IT1rKSl7aWYoIWZhdCh0aGlzLmEsaykpdGhyb3cgbnQobmV3IEtrKEFIK2RsKGspK0xIK3RoaXMuYSsiJyIpKTtuLkRoKHIsXz1rKSx0aGlzLnJrKCkmJihoPXUoayw0OSksZD13LmloKGUsdGhpcy5iP2VzKHcuVGcoKSx0aGlzLmIpOi0xLWVzKGUuVGcoKSx0aGlzLmUpLG51bGwsbnVsbCksIWguZWgoKSYmKGQ9aC5naChlLHRoaXMuYj9lcyhoLlRnKCksdGhpcy5iKTotMS1lcyhlLlRnKCksdGhpcy5lKSxudWxsLGQpKSxkJiZkLkZpKCkpLGUuTGcoKSYmZS5NZygpJiZDaShlLG5ldyBfXyhlLDksdGhpcy5lLHcsaykpfXJldHVybiBffWVsc2UgcmV0dXJuIF99LGwuUWo9ZnVuY3Rpb24oZSxuLHIscyxvKXt2YXIgaCxkO3JldHVybiBkPW4uQ2gociksR3QoZCk9PT1HdChmMCkmJihkPW51bGwpLG4uRGgocixzKSx0aGlzLmJqKCk/R3QoZCkhPT1HdChzKSYmZCE9bnVsbCYmKGg9dShkLDQ5KSxvPWguaWgoZSxlcyhoLlRnKCksdGhpcy5iKSxudWxsLG8pKTp0aGlzLnJrKCkmJmQhPW51bGwmJihvPXUoZCw0OSkuaWgoZSwtMS1lcyhlLlRnKCksdGhpcy5lKSxudWxsLG8pKSxlLkxnKCkmJmUuTWcoKSYmKCFvJiYobz1uZXcgTHAoNCkpLG8uRWkobmV3IF9fKGUsMSx0aGlzLmUsZCxzKSkpLG99LGwuUmo9ZnVuY3Rpb24oZSxuLHIscyxvKXt2YXIgaDtyZXR1cm4gaD1uLkNoKHIpLEd0KGgpPT09R3QoZjApJiYoaD1udWxsKSxuLkVoKHIpLGUuTGcoKSYmZS5NZygpJiYoIW8mJihvPW5ldyBMcCg0KSksdGhpcy5LaigpP28uRWkobmV3IF9fKGUsMix0aGlzLmUsaCxudWxsKSk6by5FaShuZXcgX18oZSwxLHRoaXMuZSxoLG51bGwpKSksb30sbC5Taj1mdW5jdGlvbihlLG4scil7dmFyIHM7cmV0dXJuIHM9bi5DaChyKSxzIT1udWxsfSxsLlRqPWZ1bmN0aW9uKGUsbixyLHMpe3ZhciBvLGgsZCx3LGs7aWYocyE9bnVsbCYmIWZhdCh0aGlzLmEscykpdGhyb3cgbnQobmV3IEtrKEFIKyhfdChzLDU2KT9sNHQodShzLDU2KS5UZygpKTpObXQoZGwocykpKStMSCt0aGlzLmErIiciKSk7az1uLkNoKHIpLHc9ayE9bnVsbCx0aGlzLktqKCkmJkd0KGspPT09R3QoZjApJiYoaz1udWxsKSxkPW51bGwsdGhpcy5iaigpP0d0KGspIT09R3QocykmJihrIT1udWxsJiYobz11KGssNDkpLGQ9by5paChlLGVzKG8uVGcoKSx0aGlzLmIpLG51bGwsZCkpLHMhPW51bGwmJihvPXUocyw0OSksZD1vLmdoKGUsZXMoby5UZygpLHRoaXMuYiksbnVsbCxkKSkpOnRoaXMucmsoKSYmR3QoaykhPT1HdChzKSYmKGshPW51bGwmJihkPXUoayw0OSkuaWgoZSwtMS1lcyhlLlRnKCksdGhpcy5lKSxudWxsLGQpKSxzIT1udWxsJiYoZD11KHMsNDkpLmdoKGUsLTEtZXMoZS5UZygpLHRoaXMuZSksbnVsbCxkKSkpLHM9PW51bGwmJnRoaXMuS2ooKT9uLkRoKHIsZjApOm4uRGgocixzKSxlLkxnKCkmJmUuTWcoKT8oaD1uZXcgb3J0KGUsMSx0aGlzLmUsayxzLHRoaXMuS2ooKSYmIXcpLGQ/KGQuRWkoaCksZC5GaSgpKTpDaShlLGgpKTpkJiZkLkZpKCl9LGwuVmo9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saCxkLHc7dz1uLkNoKHIpLGQ9dyE9bnVsbCx0aGlzLktqKCkmJkd0KHcpPT09R3QoZjApJiYodz1udWxsKSxoPW51bGwsdyE9bnVsbCYmKHRoaXMuYmooKT8ocz11KHcsNDkpLGg9cy5paChlLGVzKHMuVGcoKSx0aGlzLmIpLG51bGwsaCkpOnRoaXMucmsoKSYmKGg9dSh3LDQ5KS5paChlLC0xLWVzKGUuVGcoKSx0aGlzLmUpLG51bGwsaCkpKSxuLkVoKHIpLGUuTGcoKSYmZS5NZygpPyhvPW5ldyBvcnQoZSx0aGlzLktqKCk/MjoxLHRoaXMuZSx3LG51bGwsZCksaD8oaC5FaShvKSxoLkZpKCkpOkNpKGUsbykpOmgmJmguRmkoKX0sbC5iaj1mdW5jdGlvbigpe3JldHVybiExfSxsLnJrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuc2s9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5Laj1mdW5jdGlvbigpe3JldHVybiExfSxOKExuLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdCIsMzk4KSxEKDU2NCwzOTgse30sdW50KSxsLnJrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LE4oTG4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0Q29udGFpbm1lbnQiLDU2NCksRCgxMzIzLDU2NCx7fSxiV3QpLGwuc2s9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sTihMbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RDb250YWlubWVudFJlc29sdmluZyIsMTMyMyksRCg3NzIsNTY0LHt9LFAydCksbC5Laj1mdW5jdGlvbigpe3JldHVybiEwfSxOKExuLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdENvbnRhaW5tZW50VW5zZXR0YWJsZSIsNzcyKSxEKDEzMjUsNzcyLHt9LHZXdCksbC5zaz1mdW5jdGlvbigpe3JldHVybiEwfSxOKExuLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdENvbnRhaW5tZW50VW5zZXR0YWJsZVJlc29sdmluZyIsMTMyNSksRCg2NDAsNTY0LHt9LEVudCksbC5iaj1mdW5jdGlvbigpe3JldHVybiEwfSxOKExuLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdENvbnRhaW5tZW50V2l0aEludmVyc2UiLDY0MCksRCgxMzI0LDY0MCx7fSx4S3QpLGwuc2s9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sTihMbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RDb250YWlubWVudFdpdGhJbnZlcnNlUmVzb2x2aW5nIiwxMzI0KSxEKDc3Myw2NDAse30seHZ0KSxsLktqPWZ1bmN0aW9uKCl7cmV0dXJuITB9LE4oTG4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0Q29udGFpbm1lbnRXaXRoSW52ZXJzZVVuc2V0dGFibGUiLDc3MyksRCgxMzI2LDc3Myx7fSxrS3QpLGwuc2s9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sTihMbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RDb250YWlubWVudFdpdGhJbnZlcnNlVW5zZXR0YWJsZVJlc29sdmluZyIsMTMyNiksRCg2NDEsMzk4LHt9LEYydCksbC5zaz1mdW5jdGlvbigpe3JldHVybiEwfSxOKExuLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdFJlc29sdmluZyIsNjQxKSxEKDEzMjcsNjQxLHt9LHdXdCksbC5Laj1mdW5jdGlvbigpe3JldHVybiEwfSxOKExuLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdFJlc29sdmluZ1Vuc2V0dGFibGUiLDEzMjcpLEQoNzc0LDY0MSx7fSxtdnQpLGwuYmo9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sTihMbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RSZXNvbHZpbmdXaXRoSW52ZXJzZSIsNzc0KSxEKDEzMjgsNzc0LHt9LEVLdCksbC5Laj1mdW5jdGlvbigpe3JldHVybiEwfSxOKExuLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdFJlc29sdmluZ1dpdGhJbnZlcnNlVW5zZXR0YWJsZSIsMTMyOCksRCgxMzIxLDM5OCx7fSxtV3QpLGwuS2o9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sTihMbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RVbnNldHRhYmxlIiwxMzIxKSxEKDc3MSwzOTgse30seXZ0KSxsLmJqPWZ1bmN0aW9uKCl7cmV0dXJuITB9LE4oTG4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0V2l0aEludmVyc2UiLDc3MSksRCgxMzIyLDc3MSx7fSxUS3QpLGwuS2o9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sTihMbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RXaXRoSW52ZXJzZVVuc2V0dGFibGUiLDEzMjIpLEQoNzc1LDU2NSxTSCxid3QpLGwuUGs9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBid3QodGhpcy5hLHRoaXMuYyxlKX0sbC5kZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuUWs9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBHc24odGhpcyxlLHRoaXMuYixyKX0sbC5Saz1mdW5jdGlvbihlLG4scil7cmV0dXJuIFVzbih0aGlzLGUsdGhpcy5iLHIpfSxOKExuLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludmVyc2VVcGRhdGluZ0ZlYXR1cmVNYXBFbnRyeSIsNzc1KSxEKDEzMjksMSxudXQsSXp0KSxsLldqPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmF9LGwuZmo9ZnVuY3Rpb24oKXtyZXR1cm4gX3QodGhpcy5hLDk1KT91KHRoaXMuYSw5NSkuZmooKTohdGhpcy5hLmRjKCl9LGwuV2I9ZnVuY3Rpb24oZSl7dGhpcy5hLiRiKCksdGhpcy5hLkdjKHUoZSwxNSkpfSxsLlhqPWZ1bmN0aW9uKCl7X3QodGhpcy5hLDk1KT91KHRoaXMuYSw5NSkuWGooKTp0aGlzLmEuJGIoKX0sTihMbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9TZXR0aW5nTWFueSIsMTMyOSksRCgxMzMwLDU2NSxTSCxSWnQpLGwuT2s9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBmbnQoKCRpKCksdUEpLHRoaXMuYi5JaCh0aGlzLmEsZSkpfSxsLmRkPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGwuUWs9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiByfSxsLlJrPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gcn0sTihMbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9TaW1wbGVDb250ZW50RmVhdHVyZU1hcEVudHJ5IiwxMzMwKSxEKDY0Miw1NjUsU0gsZm50KSxsLk9rPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZm50KHRoaXMuYyxlKX0sbC5kZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuUWs9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiByfSxsLlJrPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gcn0sTihMbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9TaW1wbGVGZWF0dXJlTWFwRW50cnkiLDY0MiksRCgzOTEsNDk3LFNkLHhtKSxsLnJpPWZ1bmN0aW9uKGUpe3JldHVybiBOdChLaCxNZSwyNixlLDAsMSl9LGwubmk9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sTihMbiwiRVN1cGVyQWRhcHRlci8xIiwzOTEpLEQoNDQ0LDQzOCx7MTA1OjEsOTI6MSw5MDoxLDE0NzoxLDE5MToxLDU2OjEsMTA4OjEsODM2OjEsNDk6MSw5NzoxLDE1MDoxLDQ0NDoxLDExNDoxLDExNToxfSxSTCksbC5fZz1mdW5jdGlvbihlLG4scil7dmFyIHM7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKGVpLHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IHhfKHRoaXMsd28sdGhpcykpLHRoaXMuYX1yZXR1cm4gaGgodGhpcyxlLUpuKChsbigpLEh3KSksd24oKHM9dShNbih0aGlzLDE2KSwyNiksc3x8SHcpLGUpLG4scil9LGwuamg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKGVpLHRoaXMsMCwzKSksemEodGhpcy5BYixlLHIpO2Nhc2UgMjpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyB4Xyh0aGlzLHdvLHRoaXMpKSx6YSh0aGlzLmEsZSxyKX1yZXR1cm4gbz11KHduKChzPXUoTW4odGhpcywxNiksMjYpLHN8fChsbigpLEh3KSksbiksNjYpLG8uTmooKS5Saih0aGlzLHV1KHRoaXMpLG4tSm4oKGxuKCksSHcpKSxlLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3ZhciBuO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLnpiIT1udWxsO2Nhc2UgMjpyZXR1cm4hIXRoaXMuYSYmdGhpcy5hLmkhPTB9cmV0dXJuIHVoKHRoaXMsZS1KbigobG4oKSxIdykpLHduKChuPXUoTW4odGhpcywxNiksMjYpLG58fEh3KSxlKSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXt2YXIgcjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoZWksdGhpcywwLDMpKSxUcih0aGlzLkFiKSwhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKGVpLHRoaXMsMCwzKSksZ3ModGhpcy5BYix1KG4sMTQpKTtyZXR1cm47Y2FzZSAxOnR1KHRoaXMsanIobikpO3JldHVybjtjYXNlIDI6IXRoaXMuYSYmKHRoaXMuYT1uZXcgeF8odGhpcyx3byx0aGlzKSksVHIodGhpcy5hKSwhdGhpcy5hJiYodGhpcy5hPW5ldyB4Xyh0aGlzLHdvLHRoaXMpKSxncyh0aGlzLmEsdShuLDE0KSk7cmV0dXJufWJoKHRoaXMsZS1KbigobG4oKSxIdykpLHduKChyPXUoTW4odGhpcywxNiksMjYpLHJ8fEh3KSxlKSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBsbigpLEh3fSxsLkJoPWZ1bmN0aW9uKGUpe3ZhciBuO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShlaSx0aGlzLDAsMykpLFRyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6dHUodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOiF0aGlzLmEmJih0aGlzLmE9bmV3IHhfKHRoaXMsd28sdGhpcykpLFRyKHRoaXMuYSk7cmV0dXJufWdoKHRoaXMsZS1KbigobG4oKSxIdykpLHduKChuPXUoTW4odGhpcywxNiksMjYpLG58fEh3KSxlKSl9LE4oTG4sIkVUeXBlUGFyYW1ldGVySW1wbCIsNDQ0KSxEKDQ0NSw4NSxLbyx4XyksbC5jaj1mdW5jdGlvbihlLG4pe3JldHVybiBVZG4odGhpcyx1KGUsODcpLG4pfSxsLmRqPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFdkbih0aGlzLHUoZSw4Nyksbil9LE4oTG4sIkVUeXBlUGFyYW1ldGVySW1wbC8xIiw0NDUpLEQoNjM0LDQzLFM0LFF0dCksbC5lYz1mdW5jdGlvbigpe3JldHVybiBuZXcgY1IodGhpcyl9LE4oTG4sIkVUeXBlUGFyYW1ldGVySW1wbC8yIiw2MzQpLEQoNTU2LEIxLFV1LGNSKSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiBHV3QodGhpcyx1KGUsODcpKX0sbC5HYz1mdW5jdGlvbihlKXt2YXIgbixyLHM7Zm9yKHM9ITEscj1lLktjKCk7ci5PYigpOyluPXUoci5QYigpLDg3KSxBaSh0aGlzLmEsbiwiIik9PW51bGwmJihzPSEwKTtyZXR1cm4gc30sbC4kYj1mdW5jdGlvbigpe25sKHRoaXMuYSl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIE1sKHRoaXMuYSxlKX0sbC5LYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPW5ldyBkMihuZXcga2codGhpcy5hKS5hKSxuZXcgdVIoZSl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIERKdCh0aGlzLGUpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuICRUKHRoaXMuYSl9LE4oTG4sIkVUeXBlUGFyYW1ldGVySW1wbC8yLzEiLDU1NiksRCg1NTcsMSxkYSx1UiksbC5OYj1mdW5jdGlvbihlKXtFYSh0aGlzLGUpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIHUoWXYodGhpcy5hKS5jZCgpLDg3KX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuYn0sbC5RYj1mdW5jdGlvbigpe2N0ZSh0aGlzLmEpfSxOKExuLCJFVHlwZVBhcmFtZXRlckltcGwvMi8xLzEiLDU1NyksRCgxMjc2LDQzLFM0LGtxdCksbC5fYj1mdW5jdGlvbihlKXtyZXR1cm4gaGEoZSk/Y3J0KHRoaXMsZSk6ISFGbyh0aGlzLmYsZSl9LGwueGM9ZnVuY3Rpb24oZSl7dmFyIG4scjtyZXR1cm4gbj1oYShlKT9qYyh0aGlzLGUpOmNjKEZvKHRoaXMuZixlKSksX3Qobiw4MzcpPyhyPXUobiw4MzcpLG49ci5faigpLEFpKHRoaXMsdShlLDIzNSksbiksbik6bj8/KGU9PW51bGw/KHBldCgpLGE1ZSk6bnVsbCl9LE4oTG4sIkVWYWxpZGF0b3JSZWdpc3RyeUltcGwiLDEyNzYpLEQoMTMxMyw3MDQsezEwNToxLDkyOjEsOTA6MSw0NzE6MSwxNDc6MSw1NjoxLDEwODoxLDE5NDE6MSw0OToxLDk3OjEsMTUwOjEsMTE0OjEsMTE1OjF9LFFaKSxsLkloPWZ1bmN0aW9uKGUsbil7c3dpdGNoKGUueWooKSl7Y2FzZSAyMTpjYXNlIDIyOmNhc2UgMjM6Y2FzZSAyNDpjYXNlIDI2OmNhc2UgMzE6Y2FzZSAzMjpjYXNlIDM3OmNhc2UgMzg6Y2FzZSAzOTpjYXNlIDQwOmNhc2UgNDM6Y2FzZSA0NDpjYXNlIDQ4OmNhc2UgNDk6Y2FzZSAyMDpyZXR1cm4gbj09bnVsbD9udWxsOldvKG4pO2Nhc2UgMjU6cmV0dXJuIHRvbihuKTtjYXNlIDI3OnJldHVybiB2YW4obik7Y2FzZSAyODpyZXR1cm4gd2FuKG4pO2Nhc2UgMjk6cmV0dXJuIG49PW51bGw/bnVsbDpfVXQockFbMF0sdShuLDE5OSkpO2Nhc2UgNDE6cmV0dXJuIG49PW51bGw/IiI6TXAodShuLDI5MCkpO2Nhc2UgNDI6cmV0dXJuIFdvKG4pO2Nhc2UgNTA6cmV0dXJuIGpyKG4pO2RlZmF1bHQ6dGhyb3cgbnQobmV3IFBuKHo3K2UubmUoKStrdykpfX0sbC5KaD1mdW5jdGlvbihlKXt2YXIgbixyLHMsbyxoLGQsdyxrLF8sTSxCLHEsRyxXLFosYnQ7c3dpdGNoKGUuRz09LTEmJihlLkc9KHE9emwoZSkscT8kZyhxLk1oKCksZSk6LTEpKSxlLkcpe2Nhc2UgMDpyZXR1cm4gcj1uZXcgS3R0LHI7Y2FzZSAxOnJldHVybiBuPW5ldyBKRixuO2Nhc2UgMjpyZXR1cm4gcz1uZXcgWEwscztjYXNlIDQ6cmV0dXJuIG89bmV3IGxSLG87Y2FzZSA1OnJldHVybiBoPW5ldyB4cXQsaDtjYXNlIDY6cmV0dXJuIGQ9bmV3IEd6dCxkO2Nhc2UgNzpyZXR1cm4gdz1uZXcgcUIsdztjYXNlIDEwOnJldHVybiBfPW5ldyBUayxfO2Nhc2UgMTE6cmV0dXJuIE09bmV3IFl0dCxNO2Nhc2UgMTI6cmV0dXJuIEI9bmV3IFdYdCxCO2Nhc2UgMTM6cmV0dXJuIEc9bmV3IFh0dCxHO2Nhc2UgMTQ6cmV0dXJuIFc9bmV3IGoydCxXO2Nhc2UgMTc6cmV0dXJuIFo9bmV3IFlaLFo7Y2FzZSAxODpyZXR1cm4gaz1uZXcgd3YsaztjYXNlIDE5OnJldHVybiBidD1uZXcgUkwsYnQ7ZGVmYXVsdDp0aHJvdyBudChuZXcgUG4oJGN0K2UuemIra3cpKX19LGwuS2g9ZnVuY3Rpb24oZSxuKXtzd2l0Y2goZS55aigpKXtjYXNlIDIwOnJldHVybiBuPT1udWxsP251bGw6bmV3IGlidChuKTtjYXNlIDIxOnJldHVybiBuPT1udWxsP251bGw6bmV3IEZwKG4pO2Nhc2UgMjM6Y2FzZSAyMjpyZXR1cm4gbj09bnVsbD9udWxsOnNobihuKTtjYXNlIDI2OmNhc2UgMjQ6cmV0dXJuIG49PW51bGw/bnVsbDpFRChHbChuLC0xMjgsMTI3KTw8MjQ+PjI0KTtjYXNlIDI1OnJldHVybiBiYm4obik7Y2FzZSAyNzpyZXR1cm4gcWZuKG4pO2Nhc2UgMjg6cmV0dXJuIEhmbihuKTtjYXNlIDI5OnJldHVybiBoMG4obik7Y2FzZSAzMjpjYXNlIDMxOnJldHVybiBuPT1udWxsP251bGw6bHkobik7Y2FzZSAzODpjYXNlIDM3OnJldHVybiBuPT1udWxsP251bGw6bmV3IFRwdChuKTtjYXNlIDQwOmNhc2UgMzk6cmV0dXJuIG49PW51bGw/bnVsbDpkZShHbChuLE9hLFRpKSk7Y2FzZSA0MTpyZXR1cm4gbnVsbDtjYXNlIDQyOnJldHVybiBuPT1udWxsLG51bGw7Y2FzZSA0NDpjYXNlIDQzOnJldHVybiBuPT1udWxsP251bGw6YjIoU3EobikpO2Nhc2UgNDk6Y2FzZSA0ODpyZXR1cm4gbj09bnVsbD9udWxsOko4KEdsKG4sTUgsMzI3NjcpPDwxNj4+MTYpO2Nhc2UgNTA6cmV0dXJuIG47ZGVmYXVsdDp0aHJvdyBudChuZXcgUG4oejcrZS5uZSgpK2t3KSl9fSxOKExuLCJFY29yZUZhY3RvcnlJbXBsIiwxMzEzKSxEKDU0NywxNzksezEwNToxLDkyOjEsOTA6MSwxNDc6MSwxOTE6MSw1NjoxLDIzNToxLDEwODoxLDE5Mzk6MSw0OToxLDk3OjEsMTUwOjEsMTc5OjEsNTQ3OjEsMTE0OjEsMTE1OjEsNjc1OjF9LGxYdCksbC5nYj0hMSxsLmhiPSExO3ZhciBhTHQsczVlPSExO04oTG4sIkVjb3JlUGFja2FnZUltcGwiLDU0NyksRCgxMTg0LDEsezgzNzoxfSxaWiksbC5faj1mdW5jdGlvbigpe3JldHVybiBZVXQoKSxvNWV9LE4oTG4sIkVjb3JlUGFja2FnZUltcGwvMSIsMTE4NCksRCgxMTkzLDEsY2ksSlopLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMTQ3KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQob04sTWUsMTQ3LGUsMCwxKX0sTihMbiwiRWNvcmVQYWNrYWdlSW1wbC8xMCIsMTE5MyksRCgxMTk0LDEsY2ksdEopLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMTkxKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoeGZ0LE1lLDE5MSxlLDAsMSl9LE4oTG4sIkVjb3JlUGFja2FnZUltcGwvMTEiLDExOTQpLEQoMTE5NSwxLGNpLGVKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDU2KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoVGIsTWUsNTYsZSwwLDEpfSxOKExuLCJFY29yZVBhY2thZ2VJbXBsLzEyIiwxMTk1KSxEKDExOTYsMSxjaSxuSiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwzOTkpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChZaCxNOHQsNTksZSwwLDEpfSxOKExuLCJFY29yZVBhY2thZ2VJbXBsLzEzIiwxMTk2KSxEKDExOTcsMSxjaSxySiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwyMzUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChvMSxNZSwyMzUsZSwwLDEpfSxOKExuLCJFY29yZVBhY2thZ2VJbXBsLzE0IiwxMTk3KSxEKDExOTgsMSxjaSxpSiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSw1MDkpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdCh6dyxNZSwyMDE3LGUsMCwxKX0sTihMbiwiRWNvcmVQYWNrYWdlSW1wbC8xNSIsMTE5OCksRCgxMTk5LDEsY2ksYUIpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsOTkpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChKeSxGNCwxOCxlLDAsMSl9LE4oTG4sIkVjb3JlUGFja2FnZUltcGwvMTYiLDExOTkpLEQoMTIwMCwxLGNpLHNKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE3MCl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KE51LEY0LDE3MCxlLDAsMSl9LE4oTG4sIkVjb3JlUGFja2FnZUltcGwvMTciLDEyMDApLEQoMTIwMSwxLGNpLGFKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDQ3Mil9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KFF5LE1lLDQ3MixlLDAsMSl9LE4oTG4sIkVjb3JlUGFja2FnZUltcGwvMTgiLDEyMDEpLEQoMTIwMiwxLGNpLG9KKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDU0OCl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KHBjLGEwZSw1NDgsZSwwLDEpfSxOKExuLCJFY29yZVBhY2thZ2VJbXBsLzE5IiwxMjAyKSxEKDExODUsMSxjaSxvQiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwzMjIpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChaeSxGNCwzNCxlLDAsMSl9LE4oTG4sIkVjb3JlUGFja2FnZUltcGwvMiIsMTE4NSksRCgxMjAzLDEsY2ksTGspLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMjQxKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQod28sRTBlLDg3LGUsMCwxKX0sTihMbiwiRWNvcmVQYWNrYWdlSW1wbC8yMCIsMTIwMyksRCgxMjA0LDEsY2ksWjkpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsNDQ0KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQocHUsTWUsODM2LGUsMCwxKX0sTihMbiwiRWNvcmVQYWNrYWdlSW1wbC8yMSIsMTIwNCksRCgxMjA1LDEsY2ksY0IpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIE9tKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChXcyxyZSw0NzYsZSw4LDEpfSxOKExuLCJFY29yZVBhY2thZ2VJbXBsLzIyIiwxMjA1KSxEKDEyMDYsMSxjaSxjSiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxOTApfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChYdSxyZSwxOTAsZSwwLDIpfSxOKExuLCJFY29yZVBhY2thZ2VJbXBsLzIzIiwxMjA2KSxEKDEyMDcsMSxjaSx1QiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwyMTcpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChreCxyZSwyMTcsZSwwLDEpfSxOKExuLCJFY29yZVBhY2thZ2VJbXBsLzI0IiwxMjA3KSxEKDEyMDgsMSxjaSxsQiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxNzIpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChhUyxyZSwxNzIsZSwwLDEpfSxOKExuLCJFY29yZVBhY2thZ2VJbXBsLzI1IiwxMjA4KSxEKDEyMDksMSxjaSx1SiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxOTkpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChISCxyZSwxOTksZSwwLDEpfSxOKExuLCJFY29yZVBhY2thZ2VJbXBsLzI2IiwxMjA5KSxEKDEyMTAsMSxjaSxKOSksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4hMX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoVEx0LE1lLDIxMTAsZSwwLDEpfSxOKExuLCJFY29yZVBhY2thZ2VJbXBsLzI3IiwxMjEwKSxEKDEyMTEsMSxjaSxrbSksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gTm0oZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KHdhLHJlLDMzMyxlLDcsMSl9LE4oTG4sIkVjb3JlUGFja2FnZUltcGwvMjgiLDEyMTEpLEQoMTIxMiwxLGNpLGhCKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDU4KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoakF0LHh5LDU4LGUsMCwxKX0sTihMbiwiRWNvcmVQYWNrYWdlSW1wbC8yOSIsMTIxMiksRCgxMTg2LDEsY2ksZkIpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsNTEwKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoZWksezM6MSw0OjEsNToxLDE5MzQ6MX0sNTkwLGUsMCwxKX0sTihMbiwiRWNvcmVQYWNrYWdlSW1wbC8zIiwxMTg2KSxEKDEyMTMsMSxjaSxsSiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSw1NzMpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChxQXQsTWUsMTk0MCxlLDAsMSl9LE4oTG4sIkVjb3JlUGFja2FnZUltcGwvMzAiLDEyMTMpLEQoMTIxNCwxLGNpLGhKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE1Myl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KGhMdCx4eSwxNTMsZSwwLDEpfSxOKExuLCJFY29yZVBhY2thZ2VJbXBsLzMxIiwxMjE0KSxEKDEyMTUsMSxjaSx0VCksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSw3Mil9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KHNVLEkwZSw3MixlLDAsMSl9LE4oTG4sIkVjb3JlUGFja2FnZUltcGwvMzIiLDEyMTUpLEQoMTIxNiwxLGNpLGRCKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE1NSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KEs3LHJlLDE1NSxlLDAsMSl9LE4oTG4sIkVjb3JlUGFja2FnZUltcGwvMzMiLDEyMTYpLEQoMTIxNywxLGNpLGdCKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE5KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoSGEscmUsMTksZSwwLDEpfSxOKExuLCJFY29yZVBhY2thZ2VJbXBsLzM0IiwxMjE3KSxEKDEyMTgsMSxjaSxiYyksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwyOTApfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChIOHQsTWUsMjkwLGUsMCwxKX0sTihMbiwiRWNvcmVQYWNrYWdlSW1wbC8zNSIsMTIxOCksRCgxMjE5LDEsY2ksZkopLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMTYyKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoVHcscmUsMTYyLGUsMCwxKX0sTihMbiwiRWNvcmVQYWNrYWdlSW1wbC8zNiIsMTIxOSksRCgxMjIwLDEsY2kscEIpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsODMpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChWOHQsTWUsODMsZSwwLDEpfSxOKExuLCJFY29yZVBhY2thZ2VJbXBsLzM3IiwxMjIwKSxEKDEyMjEsMSxjaSxlVCksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSw1OTEpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChvTHQsTWUsNTkxLGUsMCwxKX0sTihMbiwiRWNvcmVQYWNrYWdlSW1wbC8zOCIsMTIyMSksRCgxMjIyLDEsY2ksZEopLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuITF9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KF9MdCxNZSwyMTExLGUsMCwxKX0sTihMbiwiRWNvcmVQYWNrYWdlSW1wbC8zOSIsMTIyMiksRCgxMTg3LDEsY2ksZ0opLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsODgpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChLaCxNZSwyNixlLDAsMSl9LE4oTG4sIkVjb3JlUGFja2FnZUltcGwvNCIsMTE4NyksRCgxMjIzLDEsY2ksblQpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMTg0KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoX3cscmUsMTg0LGUsMCwxKX0sTihMbiwiRWNvcmVQYWNrYWdlSW1wbC80MCIsMTIyMyksRCgxMjI0LDEsY2ksYkIpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGhhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChMZSxyZSwyLGUsNiwxKX0sTihMbiwiRWNvcmVQYWNrYWdlSW1wbC80MSIsMTIyNCksRCgxMjI1LDEsY2ksclQpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsNTg4KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoekF0LE1lLDU4OCxlLDAsMSl9LE4oTG4sIkVjb3JlUGFja2FnZUltcGwvNDIiLDEyMjUpLEQoMTIyNiwxLGNpLGlUKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiExfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChDTHQscmUsMjExMixlLDAsMSl9LE4oTG4sIkVjb3JlUGFja2FnZUltcGwvNDMiLDEyMjYpLEQoMTIyNywxLGNpLHFmKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDQyKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoSTIsSXEsNDIsZSwwLDEpfSxOKExuLCJFY29yZVBhY2thZ2VJbXBsLzQ0IiwxMjI3KSxEKDExODgsMSxjaSxqTCksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxMzgpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChjMSxNZSwxMzgsZSwwLDEpfSxOKExuLCJFY29yZVBhY2thZ2VJbXBsLzUiLDExODgpLEQoMTE4OSwxLGNpLCRMKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE0OCl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KFNmdCxNZSwxNDgsZSwwLDEpfSxOKExuLCJFY29yZVBhY2thZ2VJbXBsLzYiLDExODkpLEQoMTE5MCwxLGNpLG42KSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDQ1Nyl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KGlVLE1lLDY3MSxlLDAsMSl9LE4oTG4sIkVjb3JlUGFja2FnZUltcGwvNyIsMTE5MCksRCgxMTkxLDEsY2kscEopLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsNTczKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoZWcsTWUsNjc4LGUsMCwxKX0sTihMbiwiRWNvcmVQYWNrYWdlSW1wbC84IiwxMTkxKSxEKDExOTIsMSxjaSxiSiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSw0NzEpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChuQSxNZSw0NzEsZSwwLDEpfSxOKExuLCJFY29yZVBhY2thZ2VJbXBsLzkiLDExOTIpLEQoMTAyNSwxOTgyLHMwZSwkcXQpLGwuYmk9ZnVuY3Rpb24oZSxuKXtEdW4odGhpcyx1KG4sNDE1KSl9LGwuZmk9ZnVuY3Rpb24oZSxuKXt0b2UodGhpcyxlLHUobiw0MTUpKX0sTihMbiwiTWluaW1hbEVPYmplY3RJbXBsLzFBcnJheURlbGVnYXRpbmdBZGFwdGVyTGlzdCIsMTAyNSksRCgxMDI2LDE0MyxRSSxlWHQpLGwuQWk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmF9LE4oTG4sIk1pbmltYWxFT2JqZWN0SW1wbC8xQXJyYXlEZWxlZ2F0aW5nQWRhcHRlckxpc3QvMSIsMTAyNiksRCgxMDUzLDEwNTIse30sdlV0KSxOKCJvcmcuZWNsaXBzZS5lbWYuZWNvcmUucGx1Z2luIiwiRWNvcmVQbHVnaW4iLDEwNTMpO3ZhciBvTHQ9YXMoTzBlLCJSZXNvdXJjZSIpO0QoNzgxLDEzNzgsTjBlKSxsLllrPWZ1bmN0aW9uKGUpe30sbC5aaz1mdW5jdGlvbihlKXt9LGwuVms9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBIdHQodGhpcykpLHRoaXMuYX0sbC5Xaz1mdW5jdGlvbihlKXt2YXIgbixyLHMsbyxoO2lmKHM9ZS5sZW5ndGgscz4wKWlmKCRyKDAsZS5sZW5ndGgpLGUuY2hhckNvZGVBdCgwKT09NDcpe2ZvcihoPW5ldyBKYyg0KSxvPTEsbj0xO248czsrK24pJHIobixlLmxlbmd0aCksZS5jaGFyQ29kZUF0KG4pPT00NyYmKHVlKGgsbz09bj8iIjplLnN1YnN0cihvLG4tbykpLG89bisxKTtyZXR1cm4gdWUoaCxlLnN1YnN0cihvKSksTzFuKHRoaXMsaCl9ZWxzZSAkcihzLTEsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChzLTEpPT02MyYmKHI9YXZ0KGUsTHUoNjMpLHMtMikscj4wJiYoZT1lLnN1YnN0cigwLHIpKSk7cmV0dXJuIEpnbih0aGlzLGUpfSxsLlhrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY30sbC5JYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBNcCh0aGlzLmdtKSsiQCIrKGU9SmkodGhpcyk+Pj4wLGUudG9TdHJpbmcoMTYpKSsiIHVyaT0nIit0aGlzLmQrIicifSxsLmI9ITEsTihydXQsIlJlc291cmNlSW1wbCIsNzgxKSxEKDEzNzksNzgxLE4wZSxOenQpLE4ocnV0LCJCaW5hcnlSZXNvdXJjZUltcGwiLDEzNzkpLEQoMTE2OSw2OTQsUWN0KSxsLnNpPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDU2KT9Obm4odGhpcyx1KGUsNTYpKTpfdChlLDU5MSk/bmV3IG5yKHUoZSw1OTEpLlZrKCkpOkd0KGUpPT09R3QodGhpcy5mKT91KGUsMTQpLktjKCk6KGw4KCksbE4uYSl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gZTV0KHRoaXMpfSxsLmE9ITEsTihZaSwiRWNvcmVVdGlsL0NvbnRlbnRUcmVlSXRlcmF0b3IiLDExNjkpLEQoMTM4MCwxMTY5LFFjdCxJWXQpLGwuc2k9ZnVuY3Rpb24oZSl7cmV0dXJuIEd0KGUpPT09R3QodGhpcy5mKT91KGUsMTUpLktjKCk6bmV3IHBadCh1KGUsNTYpKX0sTihydXQsIlJlc291cmNlSW1wbC81IiwxMzgwKSxEKDY0OCwxOTk0LGswZSxIdHQpLGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaTw9ND9sNyh0aGlzLGUpOl90KGUsNDkpJiZ1KGUsNDkpLlpnKCk9PXRoaXMuYX0sbC5iaT1mdW5jdGlvbihlLG4pe2U9PXRoaXMuaS0xJiYodGhpcy5hLmJ8fCh0aGlzLmEuYj0hMCkpfSxsLmRpPWZ1bmN0aW9uKGUsbil7ZT09MD90aGlzLmEuYnx8KHRoaXMuYS5iPSEwKTpqcnQodGhpcyxlLG4pfSxsLmZpPWZ1bmN0aW9uKGUsbil7fSxsLmdpPWZ1bmN0aW9uKGUsbixyKXt9LGwuYWo9ZnVuY3Rpb24oKXtyZXR1cm4gMn0sbC5BaT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuYmo9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5jaj1mdW5jdGlvbihlLG4pe3ZhciByO3JldHVybiByPXUoZSw0OSksbj1yLndoKHRoaXMuYSxuKSxufSxsLmRqPWZ1bmN0aW9uKGUsbil7dmFyIHI7cmV0dXJuIHI9dShlLDQ5KSxyLndoKG51bGwsbil9LGwuZWo9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5oaT1mdW5jdGlvbigpe3JldHVybiEwfSxsLnJpPWZ1bmN0aW9uKGUpe3JldHVybiBOdChUYixNZSw1NixlLDAsMSl9LGwubmk9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sTihydXQsIlJlc291cmNlSW1wbC9Db250ZW50c0VMaXN0Iiw2NDgpLEQoOTU3LDE5NjQsTDcsT3p0KSxsLlpjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuX2goZSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmdjKCl9LE4oWWksIkFic3RyYWN0U2VxdWVudGlhbEludGVybmFsRUxpc3QvMSIsOTU3KTt2YXIgY0x0LHVMdCxTYSxsTHQ7RCg2MjQsMSx7fSxOS3QpO3ZhciBhVSxvVTtOKFlpLCJCYXNpY0V4dGVuZGVkTWV0YURhdGEiLDYyNCksRCgxMTYwLDEse30sTkd0KSxsLiRrPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGwuX2s9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hPT0tMiYmeGcodGhpcyxhMG4odGhpcy5kLHRoaXMuYikpLHRoaXMuYX0sbC5hbD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxsLmJsPWZ1bmN0aW9uKCl7cmV0dXJuIHBuKCkscG4oKSx1b30sbC5uZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmM9PVY3JiZJMyh0aGlzLERpZSh0aGlzLmQsdGhpcy5iKSksdGhpcy5jfSxsLmNsPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LGwuYT0tMixsLmM9VjcsTihZaSwiQmFzaWNFeHRlbmRlZE1ldGFEYXRhL0VDbGFzc0V4dGVuZGVkTWV0YURhdGFJbXBsIiwxMTYwKSxEKDExNjEsMSx7fSxlWnQpLGwuJGs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hPT0oUzgoKSxhVSkmJmxwdCh0aGlzLGsybih0aGlzLmYsdGhpcy5iKSksdGhpcy5hfSxsLl9rPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LGwuYWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jPT0oUzgoKSxhVSkmJkN0dCh0aGlzLEUybih0aGlzLmYsdGhpcy5iKSksdGhpcy5jfSxsLmJsPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZCYmU3R0KHRoaXMsa3duKHRoaXMuZix0aGlzLmIpKSx0aGlzLmR9LGwubmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lPT1WNyYmUUIodGhpcyxEaWUodGhpcy5mLHRoaXMuYikpLHRoaXMuZX0sbC5jbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmc9PS0yJiZaQih0aGlzLF9kbih0aGlzLmYsdGhpcy5iKSksdGhpcy5nfSxsLmU9VjcsbC5nPS0yLE4oWWksIkJhc2ljRXh0ZW5kZWRNZXRhRGF0YS9FRGF0YVR5cGVFeHRlbmRlZE1ldGFEYXRhSW1wbCIsMTE2MSksRCgxMTU5LDEse30sRkd0KSxsLmI9ITEsbC5jPSExLE4oWWksIkJhc2ljRXh0ZW5kZWRNZXRhRGF0YS9FUGFja2FnZUV4dGVuZGVkTWV0YURhdGFJbXBsIiwxMTU5KSxEKDExNjIsMSx7fSx0WnQpLGwuYz0tMixsLmU9VjcsbC5mPVY3LE4oWWksIkJhc2ljRXh0ZW5kZWRNZXRhRGF0YS9FU3RydWN0dXJhbEZlYXR1cmVFeHRlbmRlZE1ldGFEYXRhSW1wbCIsMTE2MiksRCg1ODUsNjIyLEtvLFNqKSxsLmFqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY30sbC5Gaz1mdW5jdGlvbigpe3JldHVybiExfSxsLmxpPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG59LGwuYz0wLE4oWWksIkVEYXRhVHlwZUVMaXN0Iiw1ODUpO3ZhciBoTHQ9YXMoWWksIkZlYXR1cmVNYXAiKTtEKDc1LDU4NSx7MzoxLDQ6MSwyMDoxLDI4OjEsNTI6MSwxNDoxLDE1OjEsNTQ6MSw2NzoxLDYzOjEsNTg6MSw3NjoxLDE1MzoxLDIxNToxLDE5Mzc6MSw2OToxLDk1OjF9LHBzKSxsLlZjPWZ1bmN0aW9uKGUsbil7dzJuKHRoaXMsZSx1KG4sNzIpKX0sbC5GYz1mdW5jdGlvbihlKXtyZXR1cm4gQmJuKHRoaXMsdShlLDcyKSl9LGwuWWg9ZnVuY3Rpb24oZSl7RWVuKHRoaXMsdShlLDcyKSl9LGwuY2o9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gclplKHRoaXMsdShlLDcyKSxuKX0sbC5kaj1mdW5jdGlvbihlLG4pe3JldHVybiBjdnQodGhpcyx1KGUsNzIpLG4pfSxsLmlpPWZ1bmN0aW9uKGUsbil7cmV0dXJuICR3bih0aGlzLGUsbil9LGwubGk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbTNuKHRoaXMsZSx1KG4sNzIpKX0sbC5fYz1mdW5jdGlvbihlLG4pe3JldHVybiBjdm4odGhpcyxlLHUobiw3MikpfSxsLmpqPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGlaZSh0aGlzLHUoZSw3Miksbil9LGwua2o9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gc0t0KHRoaXMsdShlLDcyKSxuKX0sbC5saj1mdW5jdGlvbihlLG4scil7cmV0dXJuIGNkbih0aGlzLHUoZSw3MiksdShuLDcyKSxyKX0sbC5vaT1mdW5jdGlvbihlLG4pe3JldHVybiBMc3QodGhpcyxlLHUobiw3MikpfSxsLmRsPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEg1dCh0aGlzLGUsbil9LGwuV2M9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG8saCxkLHcsayxfLE07Zm9yKF89bmV3IEt2KG4uZ2MoKSksbz1uLktjKCk7by5PYigpOylpZihzPXUoby5QYigpLDcyKSxoPXMuYWsoKSxHMCh0aGlzLmUsaCkpKCFoLmhpKCl8fCFrJCh0aGlzLGgscy5kZCgpKSYmIWw3KF8scykpJiZPcihfLHMpO2Vsc2V7Zm9yKE09aHUodGhpcy5lLlRnKCksaCkscj11KHRoaXMuZywxMTkpLGQ9ITAsdz0wO3c8dGhpcy5pOysrdylpZihrPXJbd10sTS5ybChrLmFrKCkpKXt1KGw0KHRoaXMsdyxzKSw3MiksZD0hMTticmVha31kJiZPcihfLHMpfXJldHVybiB2eXQodGhpcyxlLF8pfSxsLkdjPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGgsZCx3LGssXztmb3Ioaz1uZXcgS3YoZS5nYygpKSxzPWUuS2MoKTtzLk9iKCk7KWlmKHI9dShzLlBiKCksNzIpLG89ci5haygpLEcwKHRoaXMuZSxvKSkoIW8uaGkoKXx8IWskKHRoaXMsbyxyLmRkKCkpJiYhbDcoayxyKSkmJk9yKGsscik7ZWxzZXtmb3IoXz1odSh0aGlzLmUuVGcoKSxvKSxuPXUodGhpcy5nLDExOSksaD0hMCxkPTA7ZDx0aGlzLmk7KytkKWlmKHc9bltkXSxfLnJsKHcuYWsoKSkpe3UobDQodGhpcyxkLHIpLDcyKSxoPSExO2JyZWFrfWgmJk9yKGsscil9cmV0dXJuIGdzKHRoaXMsayl9LGwuV2g9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaj0tMSxkYXQodGhpcyx0aGlzLmksZSl9LGwuZWw9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBCNXQodGhpcyxlLG4scil9LGwubWs9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gd0kodGhpcyxlLG4pfSxsLmZsPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gYTZ0KHRoaXMsZSxuLHIpfSxsLmdsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGwuaGw9ZnVuY3Rpb24oZSxuKXtyZXR1cm4ga0kodGhpcyxlLG4pfSxsLmlsPWZ1bmN0aW9uKGUpe3JldHVybiB1KEF0KHRoaXMsZSksNzIpLmFrKCl9LGwuamw9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoQXQodGhpcyxlKSw3MikuZGQoKX0sbC5rbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuYmo9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5paj1mdW5jdGlvbigpe3JldHVybiEwfSxsLmxsPWZ1bmN0aW9uKGUpe3JldHVybiFHRCh0aGlzLGUpfSxsLnJpPWZ1bmN0aW9uKGUpe3JldHVybiBOdChpNWUsSTBlLDMzMixlLDAsMSl9LGwuR2s9ZnVuY3Rpb24oZSl7cmV0dXJuIGxudCh0aGlzLGUpfSxsLldiPWZ1bmN0aW9uKGUpe1FNKHRoaXMsZSl9LGwubWw9ZnVuY3Rpb24oZSxuKXtrcSh0aGlzLGUsbil9LGwubmw9ZnVuY3Rpb24oZSl7cmV0dXJuIEdlZSh0aGlzLGUpfSxsLm9sPWZ1bmN0aW9uKGUpe3BzZSh0aGlzLGUpfSxOKFlpLCJCYXNpY0ZlYXR1cmVNYXAiLDc1KSxEKDE4NTEsMSxKZCksbC5OYj1mdW5jdGlvbihlKXtFYSh0aGlzLGUpfSxsLlJiPWZ1bmN0aW9uKGUpe2lmKHRoaXMuZz09LTEpdGhyb3cgbnQobmV3IFJ1KTt6aih0aGlzKTt0cnl7JGNlKHRoaXMuZSx0aGlzLmIsdGhpcy5hLGUpLHRoaXMuZD10aGlzLmUuaiwkeih0aGlzKX1jYXRjaChuKXt0aHJvdyBuPXJzKG4pLF90KG4sNzMpP250KG5ldyBzaCk6bnQobil9fSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIEFpdCh0aGlzKX0sbC5TYj1mdW5jdGlvbigpe3JldHVybiBwcmUodGhpcyl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gJHoodGhpcyl9LGwuVGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLlViPWZ1bmN0aW9uKCl7dmFyIGU7aWYocHJlKHRoaXMpKXJldHVybiB6aih0aGlzKSx0aGlzLmc9LS10aGlzLmEsdGhpcy5MaygpJiYoZT1kQyh0aGlzLmUsdGhpcy5iLHRoaXMuYyx0aGlzLmEsdGhpcy5qKSx0aGlzLmo9ZSksdGhpcy5pPTAsdGhpcy5qO3Rocm93IG50KG5ldyB2Yyl9LGwuVmI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLTF9LGwuUWI9ZnVuY3Rpb24oKXtpZih0aGlzLmc9PS0xKXRocm93IG50KG5ldyBSdSk7emoodGhpcyk7dHJ5e0JhZSh0aGlzLmUsdGhpcy5iLHRoaXMuZyksdGhpcy5kPXRoaXMuZS5qLHRoaXMuZzx0aGlzLmEmJigtLXRoaXMuYSwtLXRoaXMuYyksLS10aGlzLmd9Y2F0Y2goZSl7dGhyb3cgZT1ycyhlKSxfdChlLDczKT9udChuZXcgc2gpOm50KGUpfX0sbC5Maz1mdW5jdGlvbigpe3JldHVybiExfSxsLldiPWZ1bmN0aW9uKGUpe2lmKHRoaXMuZz09LTEpdGhyb3cgbnQobmV3IFJ1KTt6aih0aGlzKTt0cnl7bGxlKHRoaXMuZSx0aGlzLmIsdGhpcy5nLGUpLHRoaXMuZD10aGlzLmUuan1jYXRjaChuKXt0aHJvdyBuPXJzKG4pLF90KG4sNzMpP250KG5ldyBzaCk6bnQobil9fSxsLmE9MCxsLmM9MCxsLmQ9MCxsLmY9ITEsbC5nPTAsbC5pPTAsTihZaSwiRmVhdHVyZU1hcFV0aWwvQmFzaWNGZWF0dXJlRUl0ZXJhdG9yIiwxODUxKSxEKDQxMCwxODUxLEpkLFY4KSxsLnBsPWZ1bmN0aW9uKCl7dmFyIGUsbixyO2ZvcihyPXRoaXMuZS5pLGU9dSh0aGlzLmUuZywxMTkpO3RoaXMuYzxyOyl7aWYobj1lW3RoaXMuY10sdGhpcy5rLnJsKG4uYWsoKSkpcmV0dXJuIHRoaXMuaj10aGlzLmY/bjpuLmRkKCksdGhpcy5pPTIsITA7Kyt0aGlzLmN9cmV0dXJuIHRoaXMuaT0xLHRoaXMuZz0tMSwhMX0sbC5xbD1mdW5jdGlvbigpe3ZhciBlLG47Zm9yKGU9dSh0aGlzLmUuZywxMTkpOy0tdGhpcy5jPj0wOylpZihuPWVbdGhpcy5jXSx0aGlzLmsucmwobi5haygpKSlyZXR1cm4gdGhpcy5qPXRoaXMuZj9uOm4uZGQoKSx0aGlzLmk9LTIsITA7cmV0dXJuIHRoaXMuaT0tMSx0aGlzLmc9LTEsITF9LE4oWWksIkJhc2ljRmVhdHVyZU1hcC9GZWF0dXJlRUl0ZXJhdG9yIiw0MTApLEQoNjYyLDQxMCxKZCxLZXQpLGwuTGs9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sTihZaSwiQmFzaWNGZWF0dXJlTWFwL1Jlc29sdmluZ0ZlYXR1cmVFSXRlcmF0b3IiLDY2MiksRCg5NTUsNDg2LF9ILFNVdCksbC5HaT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxOKFlpLCJFQ29udGVudHNFTGlzdC8xIiw5NTUpLEQoOTU2LDQ4NixfSCxaR3QpLGwuTGs9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sTihZaSwiRUNvbnRlbnRzRUxpc3QvMiIsOTU2KSxEKDk1NCwyNzksQ0gsQVV0KSxsLk5rPWZ1bmN0aW9uKGUpe30sbC5PYj1mdW5jdGlvbigpe3JldHVybiExfSxsLlNiPWZ1bmN0aW9uKCl7cmV0dXJuITF9LE4oWWksIkVDb250ZW50c0VMaXN0L0ZlYXR1cmVJdGVyYXRvckltcGwvMSIsOTU0KSxEKDgyNSw1ODUsS28sZDJ0KSxsLmNpPWZ1bmN0aW9uKCl7dGhpcy5hPSEwfSxsLmZqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5Yaj1mdW5jdGlvbigpe3ZhciBlO1RyKHRoaXMpLFNsKHRoaXMuZSk/KGU9dGhpcy5hLHRoaXMuYT0hMSxDaSh0aGlzLmUsbmV3IGJmKHRoaXMuZSwyLHRoaXMuYyxlLCExKSkpOnRoaXMuYT0hMX0sbC5hPSExLE4oWWksIkVEYXRhVHlwZUVMaXN0L1Vuc2V0dGFibGUiLDgyNSksRCgxODQ5LDU4NSxLbyxGVXQpLGwuaGk9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sTihZaSwiRURhdGFUeXBlVW5pcXVlRUxpc3QiLDE4NDkpLEQoMTg1MCw4MjUsS28sQlV0KSxsLmhpPWZ1bmN0aW9uKCl7cmV0dXJuITB9LE4oWWksIkVEYXRhVHlwZVVuaXF1ZUVMaXN0L1Vuc2V0dGFibGUiLDE4NTApLEQoMTM5LDg1LEtvLCR1KSxsLkVrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwubGk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gYXgodGhpcyxlLHUobiw1NikpfSxOKFlpLCJFT2JqZWN0Q29udGFpbm1lbnRFTGlzdC9SZXNvbHZpbmciLDEzOSksRCgxMTYzLDU0NSxLbyxQVXQpLGwuRWs9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5saT1mdW5jdGlvbihlLG4pe3JldHVybiBheCh0aGlzLGUsdShuLDU2KSl9LE4oWWksIkVPYmplY3RDb250YWlubWVudEVMaXN0L1Vuc2V0dGFibGUvUmVzb2x2aW5nIiwxMTYzKSxEKDc0OCwxNixLbyxldnQpLGwuY2k9ZnVuY3Rpb24oKXt0aGlzLmE9ITB9LGwuZmo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLlhqPWZ1bmN0aW9uKCl7dmFyIGU7VHIodGhpcyksU2wodGhpcy5lKT8oZT10aGlzLmEsdGhpcy5hPSExLENpKHRoaXMuZSxuZXcgYmYodGhpcy5lLDIsdGhpcy5jLGUsITEpKSk6dGhpcy5hPSExfSxsLmE9ITEsTihZaSwiRU9iamVjdENvbnRhaW5tZW50V2l0aEludmVyc2VFTGlzdC9VbnNldHRhYmxlIiw3NDgpLEQoMTE3Myw3NDgsS28sVVd0KSxsLkVrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwubGk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gYXgodGhpcyxlLHUobiw1NikpfSxOKFlpLCJFT2JqZWN0Q29udGFpbm1lbnRXaXRoSW52ZXJzZUVMaXN0L1Vuc2V0dGFibGUvUmVzb2x2aW5nIiwxMTczKSxEKDc0Myw0OTYsS28sZjJ0KSxsLmNpPWZ1bmN0aW9uKCl7dGhpcy5hPSEwfSxsLmZqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5Yaj1mdW5jdGlvbigpe3ZhciBlO1RyKHRoaXMpLFNsKHRoaXMuZSk/KGU9dGhpcy5hLHRoaXMuYT0hMSxDaSh0aGlzLmUsbmV3IGJmKHRoaXMuZSwyLHRoaXMuYyxlLCExKSkpOnRoaXMuYT0hMX0sbC5hPSExLE4oWWksIkVPYmplY3RFTGlzdC9VbnNldHRhYmxlIiw3NDMpLEQoMzI4LDQ5NixLbyxXMyksbC5Faz1mdW5jdGlvbigpe3JldHVybiEwfSxsLmxpPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGF4KHRoaXMsZSx1KG4sNTYpKX0sTihZaSwiRU9iamVjdFJlc29sdmluZ0VMaXN0IiwzMjgpLEQoMTY0MSw3NDMsS28sUlV0KSxsLkVrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwubGk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gYXgodGhpcyxlLHUobiw1NikpfSxOKFlpLCJFT2JqZWN0UmVzb2x2aW5nRUxpc3QvVW5zZXR0YWJsZSIsMTY0MSksRCgxMzgxLDEse30sdkopO3ZhciBhNWU7TihZaSwiRU9iamVjdFZhbGlkYXRvciIsMTM4MSksRCg1NDYsNDk2LEtvLFVqKSxsLnprPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZH0sbC5Baz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuYmo9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5Eaz1mdW5jdGlvbigpe3JldHVybiEwfSxsLmI9MCxOKFlpLCJFT2JqZWN0V2l0aEludmVyc2VFTGlzdCIsNTQ2KSxEKDExNzYsNTQ2LEtvLFdXdCksbC5Daz1mdW5jdGlvbigpe3JldHVybiEwfSxOKFlpLCJFT2JqZWN0V2l0aEludmVyc2VFTGlzdC9NYW55SW52ZXJzZSIsMTE3NiksRCg2MjUsNTQ2LEtvLGdudCksbC5jaT1mdW5jdGlvbigpe3RoaXMuYT0hMH0sbC5maj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuWGo9ZnVuY3Rpb24oKXt2YXIgZTtUcih0aGlzKSxTbCh0aGlzLmUpPyhlPXRoaXMuYSx0aGlzLmE9ITEsQ2kodGhpcy5lLG5ldyBiZih0aGlzLmUsMix0aGlzLmMsZSwhMSkpKTp0aGlzLmE9ITF9LGwuYT0hMSxOKFlpLCJFT2JqZWN0V2l0aEludmVyc2VFTGlzdC9VbnNldHRhYmxlIiw2MjUpLEQoMTE3NSw2MjUsS28sS1d0KSxsLkNrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LE4oWWksIkVPYmplY3RXaXRoSW52ZXJzZUVMaXN0L1Vuc2V0dGFibGUvTWFueUludmVyc2UiLDExNzUpLEQoNzQ5LDU0NixLbyxudnQpLGwuRWs9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5saT1mdW5jdGlvbihlLG4pe3JldHVybiBheCh0aGlzLGUsdShuLDU2KSl9LE4oWWksIkVPYmplY3RXaXRoSW52ZXJzZVJlc29sdmluZ0VMaXN0Iiw3NDkpLEQoMzEsNzQ5LEtvLEVuKSxsLkNrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LE4oWWksIkVPYmplY3RXaXRoSW52ZXJzZVJlc29sdmluZ0VMaXN0L01hbnlJbnZlcnNlIiwzMSksRCg3NTAsNjI1LEtvLHJ2dCksbC5Faz1mdW5jdGlvbigpe3JldHVybiEwfSxsLmxpPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGF4KHRoaXMsZSx1KG4sNTYpKX0sTihZaSwiRU9iamVjdFdpdGhJbnZlcnNlUmVzb2x2aW5nRUxpc3QvVW5zZXR0YWJsZSIsNzUwKSxEKDExNzQsNzUwLEtvLFlXdCksbC5Daz1mdW5jdGlvbigpe3JldHVybiEwfSxOKFlpLCJFT2JqZWN0V2l0aEludmVyc2VSZXNvbHZpbmdFTGlzdC9VbnNldHRhYmxlL01hbnlJbnZlcnNlIiwxMTc0KSxEKDExNjQsNjIyLEtvKSxsLmFpPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuYiYxNzkyKT09MH0sbC5jaT1mdW5jdGlvbigpe3RoaXMuYnw9MX0sbC5Caz1mdW5jdGlvbigpe3JldHVybih0aGlzLmImNCkhPTB9LGwuYmo9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5iJjQwKSE9MH0sbC5Daz1mdW5jdGlvbigpe3JldHVybih0aGlzLmImMTYpIT0wfSxsLkRrPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuYiY4KSE9MH0sbC5Faz1mdW5jdGlvbigpe3JldHVybih0aGlzLmImQXkpIT0wfSxsLnJrPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuYiYzMikhPTB9LGwuRms9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5iJnhmKSE9MH0sbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5kP01adCh0aGlzLmQsZSk6dGhpcy5haygpLllqKCkud2ooZSl9LGwuZmo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iJjI/KHRoaXMuYiYxKSE9MDp0aGlzLmkhPTB9LGwuaGk9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5iJjEyOCkhPTB9LGwuWGo9ZnVuY3Rpb24oKXt2YXIgZTtUcih0aGlzKSx0aGlzLmImMiYmKFNsKHRoaXMuZSk/KGU9KHRoaXMuYiYxKSE9MCx0aGlzLmImPS0yLFVrKHRoaXMsbmV3IGJmKHRoaXMuZSwyLGVzKHRoaXMuZS5UZygpLHRoaXMuYWsoKSksZSwhMSkpKTp0aGlzLmImPS0yKX0sbC5uaT1mdW5jdGlvbigpe3JldHVybih0aGlzLmImMTUzNik9PTB9LGwuYj0wLE4oWWksIkVjb3JlRUxpc3QvR2VuZXJpYyIsMTE2NCksRCgxMTY1LDExNjQsS28salh0KSxsLmFrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sTihZaSwiRWNvcmVFTGlzdC9EeW5hbWljIiwxMTY1KSxEKDc0Nyw2MyxTZCxicHQpLGwucmk9ZnVuY3Rpb24oZSl7cmV0dXJuIF9EKHRoaXMuYS5hLGUpfSxOKFlpLCJFY29yZUVNYXAvMSIsNzQ3KSxEKDc0Niw4NSxLbyxld3QpLGwuYmk9ZnVuY3Rpb24oZSxuKXtxeih0aGlzLmIsdShuLDEzMykpfSxsLmRpPWZ1bmN0aW9uKGUsbil7X25lKHRoaXMuYil9LGwuZWk9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzOysrKHM9dGhpcy5iLHUobiwxMzMpLHMpLmV9LGwuZmk9ZnVuY3Rpb24oZSxuKXtSaXQodGhpcy5iLHUobiwxMzMpKX0sbC5naT1mdW5jdGlvbihlLG4scil7Uml0KHRoaXMuYix1KHIsMTMzKSksR3Qocik9PT1HdChuKSYmdShyLDEzMykuVGgoZlhlKHUobiwxMzMpLmNkKCkpKSxxeih0aGlzLmIsdShuLDEzMykpfSxOKFlpLCJFY29yZUVNYXAvRGVsZWdhdGVFT2JqZWN0Q29udGFpbm1lbnRFTGlzdCIsNzQ2KSxEKDExNzEsMTUxLEw4dCxSZWUpLE4oWWksIkVjb3JlRU1hcC9VbnNldHRhYmxlIiwxMTcxKSxEKDExNzIsNzQ2LEtvLFhXdCksbC5jaT1mdW5jdGlvbigpe3RoaXMuYT0hMH0sbC5maj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuWGo9ZnVuY3Rpb24oKXt2YXIgZTtUcih0aGlzKSxTbCh0aGlzLmUpPyhlPXRoaXMuYSx0aGlzLmE9ITEsQ2kodGhpcy5lLG5ldyBiZih0aGlzLmUsMix0aGlzLmMsZSwhMSkpKTp0aGlzLmE9ITF9LGwuYT0hMSxOKFlpLCJFY29yZUVNYXAvVW5zZXR0YWJsZS9VbnNldHRhYmxlRGVsZWdhdGVFT2JqZWN0Q29udGFpbm1lbnRFTGlzdCIsMTE3MiksRCgxMTY4LDIyOCxTNCxxWXQpLGwuYT0hMSxsLmI9ITEsTihZaSwiRWNvcmVVdGlsL0NvcGllciIsMTE2OCksRCg3NDUsMSxkYSxwWnQpLGwuTmI9ZnVuY3Rpb24oZSl7RWEodGhpcyxlKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiBoaWUodGhpcyl9LGwuUGI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gaGllKHRoaXMpLGU9dGhpcy5iLHRoaXMuYj1udWxsLGV9LGwuUWI9ZnVuY3Rpb24oKXt0aGlzLmEuUWIoKX0sTihZaSwiRWNvcmVVdGlsL1Byb3BlckNvbnRlbnRJdGVyYXRvciIsNzQ1KSxEKDEzODIsMTM4MSx7fSxIQik7dmFyIG81ZTtOKFlpLCJFY29yZVZhbGlkYXRvciIsMTM4Mik7dmFyIGM1ZTthcyhZaSwiRmVhdHVyZU1hcFV0aWwvVmFsaWRhdG9yIiksRCgxMjYwLDEsezE5NDI6MX0sd0opLGwucmw9ZnVuY3Rpb24oZSl7cmV0dXJuITB9LE4oWWksIkZlYXR1cmVNYXBVdGlsLzEiLDEyNjApLEQoNzU3LDEsezE5NDI6MX0sdzZ0KSxsLnJsPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiB0aGlzLmM9PWU/ITA6KG49RmUodHIodGhpcy5hLGUpKSxuPT1udWxsP3J3bih0aGlzLGUpPyhFSnQodGhpcy5hLGUsKEZuKCksVzcpKSwhMCk6KEVKdCh0aGlzLmEsZSwoRm4oKSxPMikpLCExKTpuPT0oRm4oKSxXNykpfSxsLmU9ITE7dmFyIERmdDtOKFlpLCJGZWF0dXJlTWFwVXRpbC9CYXNpY1ZhbGlkYXRvciIsNzU3KSxEKDc1OCw0MyxTNCxjMnQpLE4oWWksIkZlYXR1cmVNYXBVdGlsL0Jhc2ljVmFsaWRhdG9yL0NhY2hlIiw3NTgpLEQoNTAxLDUyLHsyMDoxLDI4OjEsNTI6MSwxNDoxLDE1OjEsNTg6MSw3NjoxLDY5OjEsOTU6MX0sSU0pLGwuVmM9ZnVuY3Rpb24oZSxuKXskY2UodGhpcy5jLHRoaXMuYixlLG4pfSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiBINXQodGhpcy5jLHRoaXMuYixlKX0sbC5XYz1mdW5jdGlvbihlLG4pe3JldHVybiB3eW4odGhpcy5jLHRoaXMuYixlLG4pfSxsLkdjPWZ1bmN0aW9uKGUpe3JldHVybiBoXyh0aGlzLGUpfSxsLlhoPWZ1bmN0aW9uKGUsbil7amFuKHRoaXMuYyx0aGlzLmIsZSxuKX0sbC5saz1mdW5jdGlvbihlLG4pe3JldHVybiBCNXQodGhpcy5jLHRoaXMuYixlLG4pfSxsLnBpPWZ1bmN0aW9uKGUpe3JldHVybiB4cSh0aGlzLmMsdGhpcy5iLGUsITEpfSxsLlpoPWZ1bmN0aW9uKCl7cmV0dXJuIHVVdCh0aGlzLmMsdGhpcy5iKX0sbC4kaD1mdW5jdGlvbigpe3JldHVybiBKWWUodGhpcy5jLHRoaXMuYil9LGwuX2g9ZnVuY3Rpb24oZSl7cmV0dXJuIFZzbih0aGlzLmMsdGhpcy5iLGUpfSxsLm1rPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEFXdCh0aGlzLGUsbil9LGwuJGI9ZnVuY3Rpb24oKXtiNih0aGlzKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gayQodGhpcy5jLHRoaXMuYixlKX0sbC5JYz1mdW5jdGlvbihlKXtyZXR1cm4gSG9uKHRoaXMuYyx0aGlzLmIsZSl9LGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIHhxKHRoaXMuYyx0aGlzLmIsZSwhMCl9LGwuV2o9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXN9LGwuWGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGVzbih0aGlzLmMsdGhpcy5iLGUpfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRqKHRoaXMpfSxsLmZqPWZ1bmN0aW9uKCl7cmV0dXJuIUdEKHRoaXMuYyx0aGlzLmIpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIFNhbih0aGlzLmMsdGhpcy5iKX0sbC5ZYz1mdW5jdGlvbigpe3JldHVybiBBYW4odGhpcy5jLHRoaXMuYil9LGwuWmM9ZnVuY3Rpb24oZSl7cmV0dXJuICR1bih0aGlzLmMsdGhpcy5iLGUpfSxsLmlpPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGlsZSh0aGlzLmMsdGhpcy5iLGUsbil9LGwuamk9ZnVuY3Rpb24oZSxuKXtSc24odGhpcy5jLHRoaXMuYixlLG4pfSxsLiRjPWZ1bmN0aW9uKGUpe3JldHVybiBCYWUodGhpcy5jLHRoaXMuYixlKX0sbC5NYz1mdW5jdGlvbihlKXtyZXR1cm4gVHduKHRoaXMuYyx0aGlzLmIsZSl9LGwuX2M9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbGxlKHRoaXMuYyx0aGlzLmIsZSxuKX0sbC5XYj1mdW5jdGlvbihlKXtpcSh0aGlzLmMsdGhpcy5iKSxoXyh0aGlzLHUoZSwxNSkpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIEp1bih0aGlzLmMsdGhpcy5iKX0sbC5QYz1mdW5jdGlvbigpe3JldHVybiBacm4odGhpcy5jLHRoaXMuYil9LGwuUWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5zbih0aGlzLmMsdGhpcy5iLGUpfSxsLkliPWZ1bmN0aW9uKCl7dmFyIGUsbjtmb3Iobj1uZXcgX2csbi5hKz0iWyIsZT11VXQodGhpcy5jLHRoaXMuYik7QWl0KGUpOyl5byhuLGRfKCR6KGUpKSksQWl0KGUpJiYobi5hKz1YYSk7cmV0dXJuIG4uYSs9Il0iLG4uYX0sbC5Yaj1mdW5jdGlvbigpe2lxKHRoaXMuYyx0aGlzLmIpfSxOKFlpLCJGZWF0dXJlTWFwVXRpbC9GZWF0dXJlRUxpc3QiLDUwMSksRCg2MjcsMzYsUUksTXJ0KSxsLnlpPWZ1bmN0aW9uKGUpe3JldHVybiBaXyh0aGlzLGUpfSxsLkRpPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGgsZCx3O3N3aXRjaCh0aGlzLmQpe2Nhc2UgMTpjYXNlIDI6e2lmKGg9ZS5BaSgpLEd0KGgpPT09R3QodGhpcy5jKSYmWl8odGhpcyxudWxsKT09ZS55aShudWxsKSlyZXR1cm4gdGhpcy5nPWUuemkoKSxlLnhpKCk9PTEmJih0aGlzLmQ9MSksITA7YnJlYWt9Y2FzZSAzOntzd2l0Y2gobz1lLnhpKCksbyl7Y2FzZSAzOntpZihoPWUuQWkoKSxHdChoKT09PUd0KHRoaXMuYykmJlpfKHRoaXMsbnVsbCk9PWUueWkobnVsbCkpcmV0dXJuIHRoaXMuZD01LG49bmV3IEt2KDIpLE9yKG4sdGhpcy5nKSxPcihuLGUuemkoKSksdGhpcy5nPW4sITA7YnJlYWt9fWJyZWFrfWNhc2UgNTp7c3dpdGNoKG89ZS54aSgpLG8pe2Nhc2UgMzp7aWYoaD1lLkFpKCksR3QoaCk9PT1HdCh0aGlzLmMpJiZaXyh0aGlzLG51bGwpPT1lLnlpKG51bGwpKXJldHVybiByPXUodGhpcy5nLDE0KSxyLkZjKGUuemkoKSksITA7YnJlYWt9fWJyZWFrfWNhc2UgNDp7c3dpdGNoKG89ZS54aSgpLG8pe2Nhc2UgMzp7aWYoaD1lLkFpKCksR3QoaCk9PT1HdCh0aGlzLmMpJiZaXyh0aGlzLG51bGwpPT1lLnlpKG51bGwpKXJldHVybiB0aGlzLmQ9MSx0aGlzLmc9ZS56aSgpLCEwO2JyZWFrfWNhc2UgNDp7aWYoaD1lLkFpKCksR3QoaCk9PT1HdCh0aGlzLmMpJiZaXyh0aGlzLG51bGwpPT1lLnlpKG51bGwpKXJldHVybiB0aGlzLmQ9Nix3PW5ldyBLdigyKSxPcih3LHRoaXMubiksT3IodyxlLkJpKCkpLHRoaXMubj13LGQ9dXQob3QoU3IsMSksSnIsMjUsMTUsW3RoaXMubyxlLkNpKCldKSx0aGlzLmc9ZCwhMDticmVha319YnJlYWt9Y2FzZSA2Ontzd2l0Y2gobz1lLnhpKCksbyl7Y2FzZSA0OntpZihoPWUuQWkoKSxHdChoKT09PUd0KHRoaXMuYykmJlpfKHRoaXMsbnVsbCk9PWUueWkobnVsbCkpcmV0dXJuIHI9dSh0aGlzLm4sMTQpLHIuRmMoZS5CaSgpKSxkPXUodGhpcy5nLDQ4KSxzPU50KFNyLEpyLDI1LGQubGVuZ3RoKzEsMTUsMSksUGMoZCwwLHMsMCxkLmxlbmd0aCksc1tkLmxlbmd0aF09ZS5DaSgpLHRoaXMuZz1zLCEwO2JyZWFrfX1icmVha319cmV0dXJuITF9LE4oWWksIkZlYXR1cmVNYXBVdGlsL0ZlYXR1cmVFTm90aWZpY2F0aW9uSW1wbCIsNjI3KSxEKDU1Miw1MDEsezIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw1ODoxLDc2OjEsMTUzOjEsMjE1OjEsMTkzNzoxLDY5OjEsOTU6MX0sRGopLGwuZGw9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gSDV0KHRoaXMuYyxlLG4pfSxsLmVsPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gQjV0KHRoaXMuYyxlLG4scil9LGwuZmw9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBhNnQodGhpcy5jLGUsbixyKX0sbC5nbD1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxsLmhsPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGtJKHRoaXMuYyxlLG4pfSxsLmlsPWZ1bmN0aW9uKGUpe3JldHVybiB1KHhxKHRoaXMuYyx0aGlzLmIsZSwhMSksNzIpLmFrKCl9LGwuamw9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoeHEodGhpcy5jLHRoaXMuYixlLCExKSw3MikuZGQoKX0sbC5rbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwubGw9ZnVuY3Rpb24oZSl7cmV0dXJuIUdEKHRoaXMuYyxlKX0sbC5tbD1mdW5jdGlvbihlLG4pe2txKHRoaXMuYyxlLG4pfSxsLm5sPWZ1bmN0aW9uKGUpe3JldHVybiBHZWUodGhpcy5jLGUpfSxsLm9sPWZ1bmN0aW9uKGUpe3BzZSh0aGlzLmMsZSl9LE4oWWksIkZlYXR1cmVNYXBVdGlsL0ZlYXR1cmVGZWF0dXJlTWFwIiw1NTIpLEQoMTI1OSwxLG51dCxCR3QpLGwuV2o9ZnVuY3Rpb24oZSl7cmV0dXJuIHhxKHRoaXMuYix0aGlzLmEsLTEsZSl9LGwuZmo9ZnVuY3Rpb24oKXtyZXR1cm4hR0QodGhpcy5iLHRoaXMuYSl9LGwuV2I9ZnVuY3Rpb24oZSl7a3EodGhpcy5iLHRoaXMuYSxlKX0sbC5Yaj1mdW5jdGlvbigpe2lxKHRoaXMuYix0aGlzLmEpfSxOKFlpLCJGZWF0dXJlTWFwVXRpbC9GZWF0dXJlVmFsdWUiLDEyNTkpO3ZhciBHeCxJZnQsT2Z0LFV4LHU1ZSxmTj1hcyhOSCwiQW55VHlwZSIpO0QoNjY2LDYwLFUwLHNldCksTihOSCwiSW52YWxpZERhdGF0eXBlVmFsdWVFeGNlcHRpb24iLDY2Nik7dmFyIGNVPWFzKE5ILEYwZSksZE49YXMoTkgsQjBlKSxmTHQ9YXMoTkgsUjBlKSxsNWUsa2MsZEx0LEsyLGg1ZSxmNWUsZDVlLGc1ZSxwNWUsYjVlLHY1ZSx3NWUsbTVlLHk1ZSx4NWUsbDUsazVlLGg1LG9BLEU1ZSxWdyxnTixwTixUNWUsY0EsdUE7RCg4MzAsNTA2LHsxMDU6MSw5MjoxLDkwOjEsNTY6MSw0OToxLDk3OjEsODQzOjF9LEJwdCksbC5fZz1mdW5jdGlvbihlLG4scil7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4gcj8oIXRoaXMuYyYmKHRoaXMuYz1uZXcgcHModGhpcywwKSksdGhpcy5jKTooIXRoaXMuYyYmKHRoaXMuYz1uZXcgcHModGhpcywwKSksdGhpcy5jLmIpO2Nhc2UgMTpyZXR1cm4gcj8oIXRoaXMuYyYmKHRoaXMuYz1uZXcgcHModGhpcywwKSksdSgkYyh0aGlzLmMsKCRpKCksSzIpKSwxNTMpKTooIXRoaXMuYyYmKHRoaXMuYz1uZXcgcHModGhpcywwKSksdSh1KCRjKHRoaXMuYywoJGkoKSxLMikpLDE1MyksMjE1KSkua2woKTtjYXNlIDI6cmV0dXJuIHI/KCF0aGlzLmImJih0aGlzLmI9bmV3IHBzKHRoaXMsMikpLHRoaXMuYik6KCF0aGlzLmImJih0aGlzLmI9bmV3IHBzKHRoaXMsMikpLHRoaXMuYi5iKX1yZXR1cm4gaGgodGhpcyxlLUpuKHRoaXMuemgoKSksd24odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IGloKSx0aGlzLmspLmNrKCk6dGhpcy56aCgpLGUpLG4scil9LGwuamg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgcHModGhpcywwKSksd0kodGhpcy5jLGUscik7Y2FzZSAxOnJldHVybighdGhpcy5jJiYodGhpcy5jPW5ldyBwcyh0aGlzLDApKSx1KHUoJGModGhpcy5jLCgkaSgpLEsyKSksMTUzKSw2OSkpLm1rKGUscik7Y2FzZSAyOnJldHVybiF0aGlzLmImJih0aGlzLmI9bmV3IHBzKHRoaXMsMikpLHdJKHRoaXMuYixlLHIpfXJldHVybiBzPXUod24odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IGloKSx0aGlzLmspLmNrKCk6dGhpcy56aCgpLG4pLDY2KSxzLk5qKCkuUmoodGhpcyxNbXQodGhpcyksbi1Kbih0aGlzLnpoKCkpLGUscil9LGwubGg9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuYyYmdGhpcy5jLmkhPTA7Y2FzZSAxOnJldHVybiEoIXRoaXMuYyYmKHRoaXMuYz1uZXcgcHModGhpcywwKSksdSgkYyh0aGlzLmMsKCRpKCksSzIpKSwxNTMpKS5kYygpO2Nhc2UgMjpyZXR1cm4hIXRoaXMuYiYmdGhpcy5iLmkhPTB9cmV0dXJuIHVoKHRoaXMsZS1Kbih0aGlzLnpoKCkpLHduKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBpaCksdGhpcy5rKS5jaygpOnRoaXMuemgoKSxlKSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLmMmJih0aGlzLmM9bmV3IHBzKHRoaXMsMCkpLFFNKHRoaXMuYyxuKTtyZXR1cm47Y2FzZSAxOighdGhpcy5jJiYodGhpcy5jPW5ldyBwcyh0aGlzLDApKSx1KHUoJGModGhpcy5jLCgkaSgpLEsyKSksMTUzKSwyMTUpKS5XYihuKTtyZXR1cm47Y2FzZSAyOiF0aGlzLmImJih0aGlzLmI9bmV3IHBzKHRoaXMsMikpLFFNKHRoaXMuYixuKTtyZXR1cm59YmgodGhpcyxlLUpuKHRoaXMuemgoKSksd24odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IGloKSx0aGlzLmspLmNrKCk6dGhpcy56aCgpLGUpLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuICRpKCksZEx0fSxsLkJoPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuYyYmKHRoaXMuYz1uZXcgcHModGhpcywwKSksVHIodGhpcy5jKTtyZXR1cm47Y2FzZSAxOighdGhpcy5jJiYodGhpcy5jPW5ldyBwcyh0aGlzLDApKSx1KCRjKHRoaXMuYywoJGkoKSxLMikpLDE1MykpLiRiKCk7cmV0dXJuO2Nhc2UgMjohdGhpcy5iJiYodGhpcy5iPW5ldyBwcyh0aGlzLDIpKSxUcih0aGlzLmIpO3JldHVybn1naCh0aGlzLGUtSm4odGhpcy56aCgpKSx3bih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgaWgpLHRoaXMuaykuY2soKTp0aGlzLnpoKCksZSkpfSxsLkliPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuaiY0P21mKHRoaXMpOihlPW5ldyBBaChtZih0aGlzKSksZS5hKz0iIChtaXhlZDogIixvXyhlLHRoaXMuYyksZS5hKz0iLCBhbnlBdHRyaWJ1dGU6ICIsb18oZSx0aGlzLmIpLGUuYSs9IikiLGUuYSl9LE4oRHMsIkFueVR5cGVJbXBsIiw4MzApLEQoNjY3LDUwNix7MTA1OjEsOTI6MSw5MDoxLDU2OjEsNDk6MSw5NzoxLDIwMjE6MSw2Njc6MX0sdkIpLGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIHRoaXMuYTtjYXNlIDE6cmV0dXJuIHRoaXMuYn1yZXR1cm4gaGgodGhpcyxlLUpuKCgkaSgpLGw1KSksd24odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IGloKSx0aGlzLmspLmNrKCk6bDUsZSksbixyKX0sbC5saD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiB0aGlzLmEhPW51bGw7Y2FzZSAxOnJldHVybiB0aGlzLmIhPW51bGx9cmV0dXJuIHVoKHRoaXMsZS1KbigoJGkoKSxsNSkpLHduKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBpaCksdGhpcy5rKS5jaygpOmw1LGUpKX0sbC5zaD1mdW5jdGlvbihlLG4pe3N3aXRjaChlKXtjYXNlIDA6RHR0KHRoaXMsanIobikpO3JldHVybjtjYXNlIDE6ZnB0KHRoaXMsanIobikpO3JldHVybn1iaCh0aGlzLGUtSm4oKCRpKCksbDUpKSx3bih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgaWgpLHRoaXMuaykuY2soKTpsNSxlKSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiAkaSgpLGw1fSxsLkJoPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDA6dGhpcy5hPW51bGw7cmV0dXJuO2Nhc2UgMTp0aGlzLmI9bnVsbDtyZXR1cm59Z2godGhpcyxlLUpuKCgkaSgpLGw1KSksd24odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IGloKSx0aGlzLmspLmNrKCk6bDUsZSkpfSxsLkliPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuaiY0P21mKHRoaXMpOihlPW5ldyBBaChtZih0aGlzKSksZS5hKz0iIChkYXRhOiAiLHlvKGUsdGhpcy5hKSxlLmErPSIsIHRhcmdldDogIix5byhlLHRoaXMuYiksZS5hKz0iKSIsZS5hKX0sbC5hPW51bGwsbC5iPW51bGwsTihEcywiUHJvY2Vzc2luZ0luc3RydWN0aW9uSW1wbCIsNjY3KSxEKDY2OCw4MzAsezEwNToxLDkyOjEsOTA6MSw1NjoxLDQ5OjEsOTc6MSw4NDM6MSwyMDIyOjEsNjY4OjF9LFRxdCksbC5fZz1mdW5jdGlvbihlLG4scil7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4gcj8oIXRoaXMuYyYmKHRoaXMuYz1uZXcgcHModGhpcywwKSksdGhpcy5jKTooIXRoaXMuYyYmKHRoaXMuYz1uZXcgcHModGhpcywwKSksdGhpcy5jLmIpO2Nhc2UgMTpyZXR1cm4gcj8oIXRoaXMuYyYmKHRoaXMuYz1uZXcgcHModGhpcywwKSksdSgkYyh0aGlzLmMsKCRpKCksSzIpKSwxNTMpKTooIXRoaXMuYyYmKHRoaXMuYz1uZXcgcHModGhpcywwKSksdSh1KCRjKHRoaXMuYywoJGkoKSxLMikpLDE1MyksMjE1KSkua2woKTtjYXNlIDI6cmV0dXJuIHI/KCF0aGlzLmImJih0aGlzLmI9bmV3IHBzKHRoaXMsMikpLHRoaXMuYik6KCF0aGlzLmImJih0aGlzLmI9bmV3IHBzKHRoaXMsMikpLHRoaXMuYi5iKTtjYXNlIDM6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgcHModGhpcywwKSksanIoa0kodGhpcy5jLCgkaSgpLG9BKSwhMCkpO2Nhc2UgNDpyZXR1cm4gaXZ0KHRoaXMuYSwoIXRoaXMuYyYmKHRoaXMuYz1uZXcgcHModGhpcywwKSksanIoa0kodGhpcy5jLCgkaSgpLG9BKSwhMCkpKSk7Y2FzZSA1OnJldHVybiB0aGlzLmF9cmV0dXJuIGhoKHRoaXMsZS1KbigoJGkoKSxoNSkpLHduKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBpaCksdGhpcy5rKS5jaygpOmg1LGUpLG4scil9LGwubGg9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuYyYmdGhpcy5jLmkhPTA7Y2FzZSAxOnJldHVybiEoIXRoaXMuYyYmKHRoaXMuYz1uZXcgcHModGhpcywwKSksdSgkYyh0aGlzLmMsKCRpKCksSzIpKSwxNTMpKS5kYygpO2Nhc2UgMjpyZXR1cm4hIXRoaXMuYiYmdGhpcy5iLmkhPTA7Y2FzZSAzOnJldHVybiF0aGlzLmMmJih0aGlzLmM9bmV3IHBzKHRoaXMsMCkpLGpyKGtJKHRoaXMuYywoJGkoKSxvQSksITApKSE9bnVsbDtjYXNlIDQ6cmV0dXJuIGl2dCh0aGlzLmEsKCF0aGlzLmMmJih0aGlzLmM9bmV3IHBzKHRoaXMsMCkpLGpyKGtJKHRoaXMuYywoJGkoKSxvQSksITApKSkpIT1udWxsO2Nhc2UgNTpyZXR1cm4hIXRoaXMuYX1yZXR1cm4gdWgodGhpcyxlLUpuKCgkaSgpLGg1KSksd24odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IGloKSx0aGlzLmspLmNrKCk6aDUsZSkpfSxsLnNoPWZ1bmN0aW9uKGUsbil7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5jJiYodGhpcy5jPW5ldyBwcyh0aGlzLDApKSxRTSh0aGlzLmMsbik7cmV0dXJuO2Nhc2UgMTooIXRoaXMuYyYmKHRoaXMuYz1uZXcgcHModGhpcywwKSksdSh1KCRjKHRoaXMuYywoJGkoKSxLMikpLDE1MyksMjE1KSkuV2Iobik7cmV0dXJuO2Nhc2UgMjohdGhpcy5iJiYodGhpcy5iPW5ldyBwcyh0aGlzLDIpKSxRTSh0aGlzLmIsbik7cmV0dXJuO2Nhc2UgMzpId3QodGhpcyxqcihuKSk7cmV0dXJuO2Nhc2UgNDpId3QodGhpcyxzdnQodGhpcy5hLG4pKTtyZXR1cm47Y2FzZSA1OkVjKHRoaXMsdShuLDE0OCkpO3JldHVybn1iaCh0aGlzLGUtSm4oKCRpKCksaDUpKSx3bih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgaWgpLHRoaXMuaykuY2soKTpoNSxlKSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiAkaSgpLGg1fSxsLkJoPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuYyYmKHRoaXMuYz1uZXcgcHModGhpcywwKSksVHIodGhpcy5jKTtyZXR1cm47Y2FzZSAxOighdGhpcy5jJiYodGhpcy5jPW5ldyBwcyh0aGlzLDApKSx1KCRjKHRoaXMuYywoJGkoKSxLMikpLDE1MykpLiRiKCk7cmV0dXJuO2Nhc2UgMjohdGhpcy5iJiYodGhpcy5iPW5ldyBwcyh0aGlzLDIpKSxUcih0aGlzLmIpO3JldHVybjtjYXNlIDM6IXRoaXMuYyYmKHRoaXMuYz1uZXcgcHModGhpcywwKSksa3EodGhpcy5jLCgkaSgpLG9BKSxudWxsKTtyZXR1cm47Y2FzZSA0Okh3dCh0aGlzLHN2dCh0aGlzLmEsbnVsbCkpO3JldHVybjtjYXNlIDU6dGhpcy5hPW51bGw7cmV0dXJufWdoKHRoaXMsZS1KbigoJGkoKSxoNSkpLHduKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBpaCksdGhpcy5rKS5jaygpOmg1LGUpKX0sTihEcywiU2ltcGxlQW55VHlwZUltcGwiLDY2OCksRCg2NjksNTA2LHsxMDU6MSw5MjoxLDkwOjEsNTY6MSw0OToxLDk3OjEsMjAyMzoxLDY2OToxfSxFcXQpLGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIHI/KCF0aGlzLmEmJih0aGlzLmE9bmV3IHBzKHRoaXMsMCkpLHRoaXMuYSk6KCF0aGlzLmEmJih0aGlzLmE9bmV3IHBzKHRoaXMsMCkpLHRoaXMuYS5iKTtjYXNlIDE6cmV0dXJuIHI/KCF0aGlzLmImJih0aGlzLmI9bmV3IElsKChsbigpLEphKSxwYyx0aGlzLDEpKSx0aGlzLmIpOighdGhpcy5iJiYodGhpcy5iPW5ldyBJbCgobG4oKSxKYSkscGMsdGhpcywxKSksZkQodGhpcy5iKSk7Y2FzZSAyOnJldHVybiByPyghdGhpcy5jJiYodGhpcy5jPW5ldyBJbCgobG4oKSxKYSkscGMsdGhpcywyKSksdGhpcy5jKTooIXRoaXMuYyYmKHRoaXMuYz1uZXcgSWwoKGxuKCksSmEpLHBjLHRoaXMsMikpLGZEKHRoaXMuYykpO2Nhc2UgMzpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBwcyh0aGlzLDApKSwkYyh0aGlzLmEsKCRpKCksZ04pKTtjYXNlIDQ6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgcHModGhpcywwKSksJGModGhpcy5hLCgkaSgpLHBOKSk7Y2FzZSA1OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IHBzKHRoaXMsMCkpLCRjKHRoaXMuYSwoJGkoKSxjQSkpO2Nhc2UgNjpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBwcyh0aGlzLDApKSwkYyh0aGlzLmEsKCRpKCksdUEpKX1yZXR1cm4gaGgodGhpcyxlLUpuKCgkaSgpLFZ3KSksd24odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IGloKSx0aGlzLmspLmNrKCk6VncsZSksbixyKX0sbC5qaD1mdW5jdGlvbihlLG4scil7dmFyIHM7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBwcyh0aGlzLDApKSx3SSh0aGlzLmEsZSxyKTtjYXNlIDE6cmV0dXJuIXRoaXMuYiYmKHRoaXMuYj1uZXcgSWwoKGxuKCksSmEpLHBjLHRoaXMsMSkpLGtqKHRoaXMuYixlLHIpO2Nhc2UgMjpyZXR1cm4hdGhpcy5jJiYodGhpcy5jPW5ldyBJbCgobG4oKSxKYSkscGMsdGhpcywyKSksa2oodGhpcy5jLGUscik7Y2FzZSA1OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IHBzKHRoaXMsMCkpLEFXdCgkYyh0aGlzLmEsKCRpKCksY0EpKSxlLHIpfXJldHVybiBzPXUod24odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IGloKSx0aGlzLmspLmNrKCk6KCRpKCksVncpLG4pLDY2KSxzLk5qKCkuUmoodGhpcyxNbXQodGhpcyksbi1KbigoJGkoKSxWdykpLGUscil9LGwubGg9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuYSYmdGhpcy5hLmkhPTA7Y2FzZSAxOnJldHVybiEhdGhpcy5iJiZ0aGlzLmIuZiE9MDtjYXNlIDI6cmV0dXJuISF0aGlzLmMmJnRoaXMuYy5mIT0wO2Nhc2UgMzpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBwcyh0aGlzLDApKSwhdGooJGModGhpcy5hLCgkaSgpLGdOKSkpO2Nhc2UgNDpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBwcyh0aGlzLDApKSwhdGooJGModGhpcy5hLCgkaSgpLHBOKSkpO2Nhc2UgNTpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBwcyh0aGlzLDApKSwhdGooJGModGhpcy5hLCgkaSgpLGNBKSkpO2Nhc2UgNjpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBwcyh0aGlzLDApKSwhdGooJGModGhpcy5hLCgkaSgpLHVBKSkpfXJldHVybiB1aCh0aGlzLGUtSm4oKCRpKCksVncpKSx3bih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgaWgpLHRoaXMuaykuY2soKTpWdyxlKSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLmEmJih0aGlzLmE9bmV3IHBzKHRoaXMsMCkpLFFNKHRoaXMuYSxuKTtyZXR1cm47Y2FzZSAxOiF0aGlzLmImJih0aGlzLmI9bmV3IElsKChsbigpLEphKSxwYyx0aGlzLDEpKSxseih0aGlzLmIsbik7cmV0dXJuO2Nhc2UgMjohdGhpcy5jJiYodGhpcy5jPW5ldyBJbCgobG4oKSxKYSkscGMsdGhpcywyKSksbHoodGhpcy5jLG4pO3JldHVybjtjYXNlIDM6IXRoaXMuYSYmKHRoaXMuYT1uZXcgcHModGhpcywwKSksYjYoJGModGhpcy5hLCgkaSgpLGdOKSkpLCF0aGlzLmEmJih0aGlzLmE9bmV3IHBzKHRoaXMsMCkpLGhfKCRjKHRoaXMuYSxnTiksdShuLDE0KSk7cmV0dXJuO2Nhc2UgNDohdGhpcy5hJiYodGhpcy5hPW5ldyBwcyh0aGlzLDApKSxiNigkYyh0aGlzLmEsKCRpKCkscE4pKSksIXRoaXMuYSYmKHRoaXMuYT1uZXcgcHModGhpcywwKSksaF8oJGModGhpcy5hLHBOKSx1KG4sMTQpKTtyZXR1cm47Y2FzZSA1OiF0aGlzLmEmJih0aGlzLmE9bmV3IHBzKHRoaXMsMCkpLGI2KCRjKHRoaXMuYSwoJGkoKSxjQSkpKSwhdGhpcy5hJiYodGhpcy5hPW5ldyBwcyh0aGlzLDApKSxoXygkYyh0aGlzLmEsY0EpLHUobiwxNCkpO3JldHVybjtjYXNlIDY6IXRoaXMuYSYmKHRoaXMuYT1uZXcgcHModGhpcywwKSksYjYoJGModGhpcy5hLCgkaSgpLHVBKSkpLCF0aGlzLmEmJih0aGlzLmE9bmV3IHBzKHRoaXMsMCkpLGhfKCRjKHRoaXMuYSx1QSksdShuLDE0KSk7cmV0dXJufWJoKHRoaXMsZS1KbigoJGkoKSxWdykpLHduKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBpaCksdGhpcy5rKS5jaygpOlZ3LGUpLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuICRpKCksVnd9LGwuQmg9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5hJiYodGhpcy5hPW5ldyBwcyh0aGlzLDApKSxUcih0aGlzLmEpO3JldHVybjtjYXNlIDE6IXRoaXMuYiYmKHRoaXMuYj1uZXcgSWwoKGxuKCksSmEpLHBjLHRoaXMsMSkpLHRoaXMuYi5jLiRiKCk7cmV0dXJuO2Nhc2UgMjohdGhpcy5jJiYodGhpcy5jPW5ldyBJbCgobG4oKSxKYSkscGMsdGhpcywyKSksdGhpcy5jLmMuJGIoKTtyZXR1cm47Y2FzZSAzOiF0aGlzLmEmJih0aGlzLmE9bmV3IHBzKHRoaXMsMCkpLGI2KCRjKHRoaXMuYSwoJGkoKSxnTikpKTtyZXR1cm47Y2FzZSA0OiF0aGlzLmEmJih0aGlzLmE9bmV3IHBzKHRoaXMsMCkpLGI2KCRjKHRoaXMuYSwoJGkoKSxwTikpKTtyZXR1cm47Y2FzZSA1OiF0aGlzLmEmJih0aGlzLmE9bmV3IHBzKHRoaXMsMCkpLGI2KCRjKHRoaXMuYSwoJGkoKSxjQSkpKTtyZXR1cm47Y2FzZSA2OiF0aGlzLmEmJih0aGlzLmE9bmV3IHBzKHRoaXMsMCkpLGI2KCRjKHRoaXMuYSwoJGkoKSx1QSkpKTtyZXR1cm59Z2godGhpcyxlLUpuKCgkaSgpLFZ3KSksd24odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IGloKSx0aGlzLmspLmNrKCk6VncsZSkpfSxsLkliPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuaiY0P21mKHRoaXMpOihlPW5ldyBBaChtZih0aGlzKSksZS5hKz0iIChtaXhlZDogIixvXyhlLHRoaXMuYSksZS5hKz0iKSIsZS5hKX0sTihEcywiWE1MVHlwZURvY3VtZW50Um9vdEltcGwiLDY2OSksRCgxOTE5LDcwNCx7MTA1OjEsOTI6MSw5MDoxLDQ3MToxLDE0NzoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDE1MDoxLDExNDoxLDExNToxLDIwMjQ6MX0sRW0pLGwuSWg9ZnVuY3Rpb24oZSxuKXtzd2l0Y2goZS55aigpKXtjYXNlIDc6Y2FzZSA4OmNhc2UgOTpjYXNlIDEwOmNhc2UgMTY6Y2FzZSAyMjpjYXNlIDIzOmNhc2UgMjQ6Y2FzZSAyNTpjYXNlIDI2OmNhc2UgMzI6Y2FzZSAzMzpjYXNlIDM0OmNhc2UgMzY6Y2FzZSAzNzpjYXNlIDQ0OmNhc2UgNDU6Y2FzZSA1MDpjYXNlIDUxOmNhc2UgNTM6Y2FzZSA1NTpjYXNlIDU2OmNhc2UgNTc6Y2FzZSA1ODpjYXNlIDYwOmNhc2UgNjE6Y2FzZSA0OnJldHVybiBuPT1udWxsP251bGw6V28obik7Y2FzZSAxOTpjYXNlIDI4OmNhc2UgMjk6Y2FzZSAzNTpjYXNlIDM4OmNhc2UgMzk6Y2FzZSA0MTpjYXNlIDQ2OmNhc2UgNTI6Y2FzZSA1NDpjYXNlIDU6cmV0dXJuIGpyKG4pO2Nhc2UgNjpyZXR1cm4gdlFlKHUobiwxOTApKTtjYXNlIDEyOmNhc2UgNDc6Y2FzZSA0OTpjYXNlIDExOnJldHVybiBRbGUodGhpcyxlLG4pO2Nhc2UgMTM6cmV0dXJuIG49PW51bGw/bnVsbDppeW4odShuLDI0MCkpO2Nhc2UgMTU6Y2FzZSAxNDpyZXR1cm4gbj09bnVsbD9udWxsOmdlbihadCh2ZShuKSkpO2Nhc2UgMTc6cmV0dXJuIHRhZSgoJGkoKSxuKSk7Y2FzZSAxODpyZXR1cm4gdGFlKG4pO2Nhc2UgMjE6Y2FzZSAyMDpyZXR1cm4gbj09bnVsbD9udWxsOnBlbih1KG4sMTU1KS5hKTtjYXNlIDI3OnJldHVybiB3UWUodShuLDE5MCkpO2Nhc2UgMzA6cmV0dXJuIGJzZSgoJGkoKSx1KG4sMTUpKSk7Y2FzZSAzMTpyZXR1cm4gYnNlKHUobiwxNSkpO2Nhc2UgNDA6cmV0dXJuIHlRZSgoJGkoKSxuKSk7Y2FzZSA0MjpyZXR1cm4gZWFlKCgkaSgpLG4pKTtjYXNlIDQzOnJldHVybiBlYWUobik7Y2FzZSA1OTpjYXNlIDQ4OnJldHVybiBtUWUoKCRpKCksbikpO2RlZmF1bHQ6dGhyb3cgbnQobmV3IFBuKHo3K2UubmUoKStrdykpfX0sbC5KaD1mdW5jdGlvbihlKXt2YXIgbixyLHMsbyxoO3N3aXRjaChlLkc9PS0xJiYoZS5HPShyPXpsKGUpLHI/JGcoci5NaCgpLGUpOi0xKSksZS5HKXtjYXNlIDA6cmV0dXJuIG49bmV3IEJwdCxuO2Nhc2UgMTpyZXR1cm4gcz1uZXcgdkIscztjYXNlIDI6cmV0dXJuIG89bmV3IFRxdCxvO2Nhc2UgMzpyZXR1cm4gaD1uZXcgRXF0LGg7ZGVmYXVsdDp0aHJvdyBudChuZXcgUG4oJGN0K2UuemIra3cpKX19LGwuS2g9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG8saCxkLHcsayxfLE0sQixxLEcsVyxaLGJ0LE10O3N3aXRjaChlLnlqKCkpe2Nhc2UgNTpjYXNlIDUyOmNhc2UgNDpyZXR1cm4gbjtjYXNlIDY6cmV0dXJuIE5obihuKTtjYXNlIDg6Y2FzZSA3OnJldHVybiBuPT1udWxsP251bGw6eGRuKG4pO2Nhc2UgOTpyZXR1cm4gbj09bnVsbD9udWxsOkVEKEdsKChzPUhjKG4sITApLHMubGVuZ3RoPjAmJigkcigwLHMubGVuZ3RoKSxzLmNoYXJDb2RlQXQoMCk9PTQzKT9zLnN1YnN0cigxKTpzKSwtMTI4LDEyNyk8PDI0Pj4yNCk7Y2FzZSAxMDpyZXR1cm4gbj09bnVsbD9udWxsOkVEKEdsKChvPUhjKG4sITApLG8ubGVuZ3RoPjAmJigkcigwLG8ubGVuZ3RoKSxvLmNoYXJDb2RlQXQoMCk9PTQzKT9vLnN1YnN0cigxKTpvKSwtMTI4LDEyNyk8PDI0Pj4yNCk7Y2FzZSAxMTpyZXR1cm4ganIocHcodGhpcywoJGkoKSxkNWUpLG4pKTtjYXNlIDEyOnJldHVybiBqcihwdyh0aGlzLCgkaSgpLGc1ZSksbikpO2Nhc2UgMTM6cmV0dXJuIG49PW51bGw/bnVsbDpuZXcgaWJ0KEhjKG4sITApKTtjYXNlIDE1OmNhc2UgMTQ6cmV0dXJuIHFibihuKTtjYXNlIDE2OnJldHVybiBqcihwdyh0aGlzLCgkaSgpLHA1ZSksbikpO2Nhc2UgMTc6cmV0dXJuIGtpZSgoJGkoKSxuKSk7Y2FzZSAxODpyZXR1cm4ga2llKG4pO2Nhc2UgMjg6Y2FzZSAyOTpjYXNlIDM1OmNhc2UgMzg6Y2FzZSAzOTpjYXNlIDQxOmNhc2UgNTQ6Y2FzZSAxOTpyZXR1cm4gSGMobiwhMCk7Y2FzZSAyMTpjYXNlIDIwOnJldHVybiBRYm4obik7Y2FzZSAyMjpyZXR1cm4ganIocHcodGhpcywoJGkoKSxiNWUpLG4pKTtjYXNlIDIzOnJldHVybiBqcihwdyh0aGlzLCgkaSgpLHY1ZSksbikpO2Nhc2UgMjQ6cmV0dXJuIGpyKHB3KHRoaXMsKCRpKCksdzVlKSxuKSk7Y2FzZSAyNTpyZXR1cm4ganIocHcodGhpcywoJGkoKSxtNWUpLG4pKTtjYXNlIDI2OnJldHVybiBqcihwdyh0aGlzLCgkaSgpLHk1ZSksbikpO2Nhc2UgMjc6cmV0dXJuIExobihuKTtjYXNlIDMwOnJldHVybiBFaWUoKCRpKCksbikpO2Nhc2UgMzE6cmV0dXJuIEVpZShuKTtjYXNlIDMyOnJldHVybiBuPT1udWxsP251bGw6ZGUoR2woKE09SGMobiwhMCksTS5sZW5ndGg+MCYmKCRyKDAsTS5sZW5ndGgpLE0uY2hhckNvZGVBdCgwKT09NDMpP00uc3Vic3RyKDEpOk0pLE9hLFRpKSk7Y2FzZSAzMzpyZXR1cm4gbj09bnVsbD9udWxsOm5ldyBGcCgoQj1IYyhuLCEwKSxCLmxlbmd0aD4wJiYoJHIoMCxCLmxlbmd0aCksQi5jaGFyQ29kZUF0KDApPT00Myk/Qi5zdWJzdHIoMSk6QikpO2Nhc2UgMzQ6cmV0dXJuIG49PW51bGw/bnVsbDpkZShHbCgocT1IYyhuLCEwKSxxLmxlbmd0aD4wJiYoJHIoMCxxLmxlbmd0aCkscS5jaGFyQ29kZUF0KDApPT00Myk/cS5zdWJzdHIoMSk6cSksT2EsVGkpKTtjYXNlIDM2OnJldHVybiBuPT1udWxsP251bGw6YjIoU3EoKEc9SGMobiwhMCksRy5sZW5ndGg+MCYmKCRyKDAsRy5sZW5ndGgpLEcuY2hhckNvZGVBdCgwKT09NDMpP0cuc3Vic3RyKDEpOkcpKSk7Y2FzZSAzNzpyZXR1cm4gbj09bnVsbD9udWxsOmIyKFNxKChXPUhjKG4sITApLFcubGVuZ3RoPjAmJigkcigwLFcubGVuZ3RoKSxXLmNoYXJDb2RlQXQoMCk9PTQzKT9XLnN1YnN0cigxKTpXKSkpO2Nhc2UgNDA6cmV0dXJuIEdsbigoJGkoKSxuKSk7Y2FzZSA0MjpyZXR1cm4gVGllKCgkaSgpLG4pKTtjYXNlIDQzOnJldHVybiBUaWUobik7Y2FzZSA0NDpyZXR1cm4gbj09bnVsbD9udWxsOm5ldyBGcCgoWj1IYyhuLCEwKSxaLmxlbmd0aD4wJiYoJHIoMCxaLmxlbmd0aCksWi5jaGFyQ29kZUF0KDApPT00Myk/Wi5zdWJzdHIoMSk6WikpO2Nhc2UgNDU6cmV0dXJuIG49PW51bGw/bnVsbDpuZXcgRnAoKGJ0PUhjKG4sITApLGJ0Lmxlbmd0aD4wJiYoJHIoMCxidC5sZW5ndGgpLGJ0LmNoYXJDb2RlQXQoMCk9PTQzKT9idC5zdWJzdHIoMSk6YnQpKTtjYXNlIDQ2OnJldHVybiBIYyhuLCExKTtjYXNlIDQ3OnJldHVybiBqcihwdyh0aGlzLCgkaSgpLHg1ZSksbikpO2Nhc2UgNTk6Y2FzZSA0ODpyZXR1cm4gVmxuKCgkaSgpLG4pKTtjYXNlIDQ5OnJldHVybiBqcihwdyh0aGlzLCgkaSgpLGs1ZSksbikpO2Nhc2UgNTA6cmV0dXJuIG49PW51bGw/bnVsbDpKOChHbCgoTXQ9SGMobiwhMCksTXQubGVuZ3RoPjAmJigkcigwLE10Lmxlbmd0aCksTXQuY2hhckNvZGVBdCgwKT09NDMpP010LnN1YnN0cigxKTpNdCksTUgsMzI3NjcpPDwxNj4+MTYpO2Nhc2UgNTE6cmV0dXJuIG49PW51bGw/bnVsbDpKOChHbCgoaD1IYyhuLCEwKSxoLmxlbmd0aD4wJiYoJHIoMCxoLmxlbmd0aCksaC5jaGFyQ29kZUF0KDApPT00Myk/aC5zdWJzdHIoMSk6aCksTUgsMzI3NjcpPDwxNj4+MTYpO2Nhc2UgNTM6cmV0dXJuIGpyKHB3KHRoaXMsKCRpKCksRTVlKSxuKSk7Y2FzZSA1NTpyZXR1cm4gbj09bnVsbD9udWxsOko4KEdsKChkPUhjKG4sITApLGQubGVuZ3RoPjAmJigkcigwLGQubGVuZ3RoKSxkLmNoYXJDb2RlQXQoMCk9PTQzKT9kLnN1YnN0cigxKTpkKSxNSCwzMjc2Nyk8PDE2Pj4xNik7Y2FzZSA1NjpyZXR1cm4gbj09bnVsbD9udWxsOko4KEdsKCh3PUhjKG4sITApLHcubGVuZ3RoPjAmJigkcigwLHcubGVuZ3RoKSx3LmNoYXJDb2RlQXQoMCk9PTQzKT93LnN1YnN0cigxKTp3KSxNSCwzMjc2Nyk8PDE2Pj4xNik7Y2FzZSA1NzpyZXR1cm4gbj09bnVsbD9udWxsOmIyKFNxKChrPUhjKG4sITApLGsubGVuZ3RoPjAmJigkcigwLGsubGVuZ3RoKSxrLmNoYXJDb2RlQXQoMCk9PTQzKT9rLnN1YnN0cigxKTprKSkpO2Nhc2UgNTg6cmV0dXJuIG49PW51bGw/bnVsbDpiMihTcSgoXz1IYyhuLCEwKSxfLmxlbmd0aD4wJiYoJHIoMCxfLmxlbmd0aCksXy5jaGFyQ29kZUF0KDApPT00Myk/Xy5zdWJzdHIoMSk6XykpKTtjYXNlIDYwOnJldHVybiBuPT1udWxsP251bGw6ZGUoR2woKHI9SGMobiwhMCksci5sZW5ndGg+MCYmKCRyKDAsci5sZW5ndGgpLHIuY2hhckNvZGVBdCgwKT09NDMpP3Iuc3Vic3RyKDEpOnIpLE9hLFRpKSk7Y2FzZSA2MTpyZXR1cm4gbj09bnVsbD9udWxsOmRlKEdsKEhjKG4sITApLE9hLFRpKSk7ZGVmYXVsdDp0aHJvdyBudChuZXcgUG4oejcrZS5uZSgpK2t3KSl9fTt2YXIgXzVlLGdMdCxDNWUscEx0O04oRHMsIlhNTFR5cGVGYWN0b3J5SW1wbCIsMTkxOSksRCg1ODYsMTc5LHsxMDU6MSw5MjoxLDkwOjEsMTQ3OjEsMTkxOjEsNTY6MSwyMzU6MSwxMDg6MSw0OToxLDk3OjEsMTUwOjEsMTc5OjEsMTE0OjEsMTE1OjEsNjc1OjEsMTk0NToxLDU4NjoxfSx1WHQpLGwuTj0hMSxsLk89ITE7dmFyIFM1ZT0hMTtOKERzLCJYTUxUeXBlUGFja2FnZUltcGwiLDU4NiksRCgxODUyLDEsezgzNzoxfSxyNiksbC5faj1mdW5jdGlvbigpe3JldHVybiBRNXQoKSxGNWV9LE4oRHMsIlhNTFR5cGVQYWNrYWdlSW1wbC8xIiwxODUyKSxEKDE4NjEsMSxjaSxnMSksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gaGEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KExlLHJlLDIsZSw2LDEpfSxOKERzLCJYTUxUeXBlUGFja2FnZUltcGwvMTAiLDE4NjEpLEQoMTg2MiwxLGNpLHdCKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBoYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoTGUscmUsMixlLDYsMSl9LE4oRHMsIlhNTFR5cGVQYWNrYWdlSW1wbC8xMSIsMTg2MiksRCgxODYzLDEsY2ksbUIpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGhhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChMZSxyZSwyLGUsNiwxKX0sTihEcywiWE1MVHlwZVBhY2thZ2VJbXBsLzEyIiwxODYzKSxEKDE4NjQsMSxjaSx5QiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gTm0oZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KHdhLHJlLDMzMyxlLDcsMSl9LE4oRHMsIlhNTFR5cGVQYWNrYWdlSW1wbC8xMyIsMTg2NCksRCgxODY1LDEsY2kseEIpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGhhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChMZSxyZSwyLGUsNiwxKX0sTihEcywiWE1MVHlwZVBhY2thZ2VJbXBsLzE0IiwxODY1KSxEKDE4NjYsMSxjaSxrQiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxNSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KG1oLHh5LDE1LGUsMCwxKX0sTihEcywiWE1MVHlwZVBhY2thZ2VJbXBsLzE1IiwxODY2KSxEKDE4NjcsMSxjaSxFQiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxNSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KG1oLHh5LDE1LGUsMCwxKX0sTihEcywiWE1MVHlwZVBhY2thZ2VJbXBsLzE2IiwxODY3KSxEKDE4NjgsMSxjaSxIZiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gaGEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KExlLHJlLDIsZSw2LDEpfSxOKERzLCJYTUxUeXBlUGFja2FnZUltcGwvMTciLDE4NjgpLEQoMTg2OSwxLGNpLHZ1KSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE1NSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KEs3LHJlLDE1NSxlLDAsMSl9LE4oRHMsIlhNTFR5cGVQYWNrYWdlSW1wbC8xOCIsMTg2OSksRCgxODcwLDEsY2ksbUopLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGhhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChMZSxyZSwyLGUsNiwxKX0sTihEcywiWE1MVHlwZVBhY2thZ2VJbXBsLzE5IiwxODcwKSxEKDE4NTMsMSxjaSx5SiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSw4NDMpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChmTixNZSw4NDMsZSwwLDEpfSxOKERzLCJYTUxUeXBlUGFja2FnZUltcGwvMiIsMTg1MyksRCgxODcxLDEsY2kseEopLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGhhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChMZSxyZSwyLGUsNiwxKX0sTihEcywiWE1MVHlwZVBhY2thZ2VJbXBsLzIwIiwxODcxKSxEKDE4NzIsMSxjaSx3dSksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gaGEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KExlLHJlLDIsZSw2LDEpfSxOKERzLCJYTUxUeXBlUGFja2FnZUltcGwvMjEiLDE4NzIpLEQoMTg3MywxLGNpLHNUKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBoYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoTGUscmUsMixlLDYsMSl9LE4oRHMsIlhNTFR5cGVQYWNrYWdlSW1wbC8yMiIsMTg3MyksRCgxODc0LDEsY2ksVEIpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGhhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChMZSxyZSwyLGUsNiwxKX0sTihEcywiWE1MVHlwZVBhY2thZ2VJbXBsLzIzIiwxODc0KSxEKDE4NzUsMSxjaSxfQiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxOTApfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChYdSxyZSwxOTAsZSwwLDIpfSxOKERzLCJYTUxUeXBlUGFja2FnZUltcGwvMjQiLDE4NzUpLEQoMTg3NiwxLGNpLGk2KSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBoYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoTGUscmUsMixlLDYsMSl9LE4oRHMsIlhNTFR5cGVQYWNrYWdlSW1wbC8yNSIsMTg3NiksRCgxODc3LDEsY2ksa0opLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGhhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChMZSxyZSwyLGUsNiwxKX0sTihEcywiWE1MVHlwZVBhY2thZ2VJbXBsLzI2IiwxODc3KSxEKDE4NzgsMSxjaSxNayksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxNSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KG1oLHh5LDE1LGUsMCwxKX0sTihEcywiWE1MVHlwZVBhY2thZ2VJbXBsLzI3IiwxODc4KSxEKDE4NzksMSxjaSxFSiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxNSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KG1oLHh5LDE1LGUsMCwxKX0sTihEcywiWE1MVHlwZVBhY2thZ2VJbXBsLzI4IiwxODc5KSxEKDE4ODAsMSxjaSxDQiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gaGEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KExlLHJlLDIsZSw2LDEpfSxOKERzLCJYTUxUeXBlUGFja2FnZUltcGwvMjkiLDE4ODApLEQoMTg1NCwxLGNpLFRKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDY2Nyl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KGNVLE1lLDIwMjEsZSwwLDEpfSxOKERzLCJYTUxUeXBlUGFja2FnZUltcGwvMyIsMTg1NCksRCgxODgxLDEsY2ksX0opLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMTkpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChIYSxyZSwxOSxlLDAsMSl9LE4oRHMsIlhNTFR5cGVQYWNrYWdlSW1wbC8zMCIsMTg4MSksRCgxODgyLDEsY2ksYVQpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGhhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChMZSxyZSwyLGUsNiwxKX0sTihEcywiWE1MVHlwZVBhY2thZ2VJbXBsLzMxIiwxODgyKSxEKDE4ODMsMSxjaSxTQiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxNjIpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChUdyxyZSwxNjIsZSwwLDEpfSxOKERzLCJYTUxUeXBlUGFja2FnZUltcGwvMzIiLDE4ODMpLEQoMTg4NCwxLGNpLHpMKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBoYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoTGUscmUsMixlLDYsMSl9LE4oRHMsIlhNTFR5cGVQYWNrYWdlSW1wbC8zMyIsMTg4NCksRCgxODg1LDEsY2ksb1QpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGhhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChMZSxyZSwyLGUsNiwxKX0sTihEcywiWE1MVHlwZVBhY2thZ2VJbXBsLzM0IiwxODg1KSxEKDE4ODYsMSxjaSxDSiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gaGEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KExlLHJlLDIsZSw2LDEpfSxOKERzLCJYTUxUeXBlUGFja2FnZUltcGwvMzUiLDE4ODYpLEQoMTg4NywxLGNpLFNKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBoYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoTGUscmUsMixlLDYsMSl9LE4oRHMsIlhNTFR5cGVQYWNrYWdlSW1wbC8zNiIsMTg4NyksRCgxODg4LDEsY2kscUwpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMTUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChtaCx4eSwxNSxlLDAsMSl9LE4oRHMsIlhNTFR5cGVQYWNrYWdlSW1wbC8zNyIsMTg4OCksRCgxODg5LDEsY2ksY1QpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMTUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChtaCx4eSwxNSxlLDAsMSl9LE4oRHMsIlhNTFR5cGVQYWNrYWdlSW1wbC8zOCIsMTg4OSksRCgxODkwLDEsY2kscDEpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGhhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChMZSxyZSwyLGUsNiwxKX0sTihEcywiWE1MVHlwZVBhY2thZ2VJbXBsLzM5IiwxODkwKSxEKDE4NTUsMSxjaSxEayksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSw2NjgpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChkTixNZSwyMDIyLGUsMCwxKX0sTihEcywiWE1MVHlwZVBhY2thZ2VJbXBsLzQiLDE4NTUpLEQoMTg5MSwxLGNpLEFKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBoYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoTGUscmUsMixlLDYsMSl9LE4oRHMsIlhNTFR5cGVQYWNrYWdlSW1wbC80MCIsMTg5MSksRCgxODkyLDEsY2ksSWspLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGhhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChMZSxyZSwyLGUsNiwxKX0sTihEcywiWE1MVHlwZVBhY2thZ2VJbXBsLzQxIiwxODkyKSxEKDE4OTMsMSxjaSxITCksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gaGEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KExlLHJlLDIsZSw2LDEpfSxOKERzLCJYTUxUeXBlUGFja2FnZUltcGwvNDIiLDE4OTMpLEQoMTg5NCwxLGNpLEdiKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBoYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoTGUscmUsMixlLDYsMSl9LE4oRHMsIlhNTFR5cGVQYWNrYWdlSW1wbC80MyIsMTg5NCksRCgxODk1LDEsY2ksdVQpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGhhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChMZSxyZSwyLGUsNiwxKX0sTihEcywiWE1MVHlwZVBhY2thZ2VJbXBsLzQ0IiwxODk1KSxEKDE4OTYsMSxjaSxWTCksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxODQpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChfdyxyZSwxODQsZSwwLDEpfSxOKERzLCJYTUxUeXBlUGFja2FnZUltcGwvNDUiLDE4OTYpLEQoMTg5NywxLGNpLFZmKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBoYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoTGUscmUsMixlLDYsMSl9LE4oRHMsIlhNTFR5cGVQYWNrYWdlSW1wbC80NiIsMTg5NyksRCgxODk4LDEsY2ksbFQpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGhhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChMZSxyZSwyLGUsNiwxKX0sTihEcywiWE1MVHlwZVBhY2thZ2VJbXBsLzQ3IiwxODk4KSxEKDE4OTksMSxjaSxiMSksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gaGEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KExlLHJlLDIsZSw2LDEpfSxOKERzLCJYTUxUeXBlUGFja2FnZUltcGwvNDgiLDE4OTkpLEQoaWIsMSxjaSx2MSksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxODQpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChfdyxyZSwxODQsZSwwLDEpfSxOKERzLCJYTUxUeXBlUGFja2FnZUltcGwvNDkiLGliKSxEKDE4NTYsMSxjaSxMSiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSw2NjkpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChmTHQsTWUsMjAyMyxlLDAsMSl9LE4oRHMsIlhNTFR5cGVQYWNrYWdlSW1wbC81IiwxODU2KSxEKDE5MDEsMSxjaSxNSiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxNjIpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChUdyxyZSwxNjIsZSwwLDEpfSxOKERzLCJYTUxUeXBlUGFja2FnZUltcGwvNTAiLDE5MDEpLEQoMTkwMiwxLGNpLEwzKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBoYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoTGUscmUsMixlLDYsMSl9LE4oRHMsIlhNTFR5cGVQYWNrYWdlSW1wbC81MSIsMTkwMiksRCgxOTAzLDEsY2ksT2spLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMTkpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChIYSxyZSwxOSxlLDAsMSl9LE4oRHMsIlhNTFR5cGVQYWNrYWdlSW1wbC81MiIsMTkwMyksRCgxODU3LDEsY2ksTmspLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGhhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChMZSxyZSwyLGUsNiwxKX0sTihEcywiWE1MVHlwZVBhY2thZ2VJbXBsLzYiLDE4NTcpLEQoMTg1OCwxLGNpLGhUKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE5MCl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KFh1LHJlLDE5MCxlLDAsMil9LE4oRHMsIlhNTFR5cGVQYWNrYWdlSW1wbC83IiwxODU4KSxEKDE4NTksMSxjaSxESiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gT20oZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KFdzLHJlLDQ3NixlLDgsMSl9LE4oRHMsIlhNTFR5cGVQYWNrYWdlSW1wbC84IiwxODU5KSxEKDE4NjAsMSxjaSxzNiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwyMTcpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChreCxyZSwyMTcsZSwwLDEpfSxOKERzLCJYTUxUeXBlUGFja2FnZUltcGwvOSIsMTg2MCk7dmFyIFkxLG9wLGxBLHVVLHd0O0QoNTAsNjAsVTAsUnIpLE4oWWcsIlJlZ0V4L1BhcnNlRXhjZXB0aW9uIiw1MCksRCg4MjAsMSx7fSxHTCksbC5zbD1mdW5jdGlvbihlKXtyZXR1cm4gZTx0aGlzLmomJlRhKHRoaXMuaSxlKT09NjN9LGwudGw9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscyxvO2lmKHRoaXMuYyE9MTApdGhyb3cgbnQobmV3IFJyKEdyKChGcigpLGtIKSkpKTtzd2l0Y2goZT10aGlzLmEsZSl7Y2FzZSAxMDE6ZT0yNzticmVhaztjYXNlIDEwMjplPTEyO2JyZWFrO2Nhc2UgMTEwOmU9MTA7YnJlYWs7Y2FzZSAxMTQ6ZT0xMzticmVhaztjYXNlIDExNjplPTk7YnJlYWs7Y2FzZSAxMjA6aWYobWkodGhpcyksdGhpcy5jIT0wKXRocm93IG50KG5ldyBScihHcigoRnIoKSxLZykpKSk7aWYodGhpcy5hPT0xMjMpe289MCxyPTA7ZG97aWYobWkodGhpcyksdGhpcy5jIT0wKXRocm93IG50KG5ldyBScihHcigoRnIoKSxLZykpKSk7aWYoKG89dzIodGhpcy5hKSk8MClicmVhaztpZihyPnIqMTYpdGhyb3cgbnQobmV3IFJyKEdyKChGcigpLFlkZSkpKSk7cj1yKjE2K299d2hpbGUoITApO2lmKHRoaXMuYSE9MTI1KXRocm93IG50KG5ldyBScihHcigoRnIoKSxYZGUpKSkpO2lmKHI+RzcpdGhyb3cgbnQobmV3IFJyKEdyKChGcigpLFFkZSkpKSk7ZT1yfWVsc2V7aWYobz0wLHRoaXMuYyE9MHx8KG89dzIodGhpcy5hKSk8MCl0aHJvdyBudChuZXcgUnIoR3IoKEZyKCksS2cpKSkpO2lmKHI9byxtaSh0aGlzKSx0aGlzLmMhPTB8fChvPXcyKHRoaXMuYSkpPDApdGhyb3cgbnQobmV3IFJyKEdyKChGcigpLEtnKSkpKTtyPXIqMTYrbyxlPXJ9YnJlYWs7Y2FzZSAxMTc6aWYocz0wLG1pKHRoaXMpLHRoaXMuYyE9MHx8KHM9dzIodGhpcy5hKSk8MCl0aHJvdyBudChuZXcgUnIoR3IoKEZyKCksS2cpKSkpO2lmKG49cyxtaSh0aGlzKSx0aGlzLmMhPTB8fChzPXcyKHRoaXMuYSkpPDApdGhyb3cgbnQobmV3IFJyKEdyKChGcigpLEtnKSkpKTtpZihuPW4qMTYrcyxtaSh0aGlzKSx0aGlzLmMhPTB8fChzPXcyKHRoaXMuYSkpPDApdGhyb3cgbnQobmV3IFJyKEdyKChGcigpLEtnKSkpKTtpZihuPW4qMTYrcyxtaSh0aGlzKSx0aGlzLmMhPTB8fChzPXcyKHRoaXMuYSkpPDApdGhyb3cgbnQobmV3IFJyKEdyKChGcigpLEtnKSkpKTtuPW4qMTYrcyxlPW47YnJlYWs7Y2FzZSAxMTg6aWYobWkodGhpcyksdGhpcy5jIT0wfHwocz13Mih0aGlzLmEpKTwwKXRocm93IG50KG5ldyBScihHcigoRnIoKSxLZykpKSk7aWYobj1zLG1pKHRoaXMpLHRoaXMuYyE9MHx8KHM9dzIodGhpcy5hKSk8MCl0aHJvdyBudChuZXcgUnIoR3IoKEZyKCksS2cpKSkpO2lmKG49bioxNitzLG1pKHRoaXMpLHRoaXMuYyE9MHx8KHM9dzIodGhpcy5hKSk8MCl0aHJvdyBudChuZXcgUnIoR3IoKEZyKCksS2cpKSkpO2lmKG49bioxNitzLG1pKHRoaXMpLHRoaXMuYyE9MHx8KHM9dzIodGhpcy5hKSk8MCl0aHJvdyBudChuZXcgUnIoR3IoKEZyKCksS2cpKSkpO2lmKG49bioxNitzLG1pKHRoaXMpLHRoaXMuYyE9MHx8KHM9dzIodGhpcy5hKSk8MCl0aHJvdyBudChuZXcgUnIoR3IoKEZyKCksS2cpKSkpO2lmKG49bioxNitzLG1pKHRoaXMpLHRoaXMuYyE9MHx8KHM9dzIodGhpcy5hKSk8MCl0aHJvdyBudChuZXcgUnIoR3IoKEZyKCksS2cpKSkpO2lmKG49bioxNitzLG4+RzcpdGhyb3cgbnQobmV3IFJyKEdyKChGcigpLCJwYXJzZXIuZGVzY2FwcGUuNCIpKSkpO2U9bjticmVhaztjYXNlIDY1OmNhc2UgOTA6Y2FzZSAxMjI6dGhyb3cgbnQobmV3IFJyKEdyKChGcigpLFpkZSkpKSl9cmV0dXJuIGV9LGwudWw9ZnVuY3Rpb24oZSl7dmFyIG4scjtzd2l0Y2goZSl7Y2FzZSAxMDA6cj0odGhpcy5lJjMyKT09MzI/bmIoIk5kIiwhMCk6KHlpKCksbFUpO2JyZWFrO2Nhc2UgNjg6cj0odGhpcy5lJjMyKT09MzI/bmIoIk5kIiwhMSk6KHlpKCkseEx0KTticmVhaztjYXNlIDExOTpyPSh0aGlzLmUmMzIpPT0zMj9uYigiSXNXb3JkIiwhMCk6KHlpKCksSUUpO2JyZWFrO2Nhc2UgODc6cj0odGhpcy5lJjMyKT09MzI/bmIoIklzV29yZCIsITEpOih5aSgpLEVMdCk7YnJlYWs7Y2FzZSAxMTU6cj0odGhpcy5lJjMyKT09MzI/bmIoIklzU3BhY2UiLCEwKTooeWkoKSxXeCk7YnJlYWs7Y2FzZSA4MzpyPSh0aGlzLmUmMzIpPT0zMj9uYigiSXNTcGFjZSIsITEpOih5aSgpLGtMdCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBudChuZXcgWm8oKG49ZSxaMGUrbi50b1N0cmluZygxNikpKSl9cmV0dXJuIHJ9LGwudmw9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHcsayxfLE0sQixxO2Zvcih0aGlzLmI9MSxtaSh0aGlzKSxuPW51bGwsdGhpcy5jPT0wJiZ0aGlzLmE9PTk0PyhtaSh0aGlzKSxlP009KHlpKCkseWkoKSxuZXcgamwoNSkpOihuPSh5aSgpLHlpKCksbmV3IGpsKDQpKSxxYyhuLDAsRzcpLE09bmV3IGpsKDQpKSk6TT0oeWkoKSx5aSgpLG5ldyBqbCg0KSksbz0hMDsocT10aGlzLmMpIT0xJiYhKHE9PTAmJnRoaXMuYT09OTMmJiFvKTspe2lmKG89ITEscj10aGlzLmEscz0hMSxxPT0xMClzd2l0Y2gocil7Y2FzZSAxMDA6Y2FzZSA2ODpjYXNlIDExOTpjYXNlIDg3OmNhc2UgMTE1OmNhc2UgODM6dnkoTSx0aGlzLnVsKHIpKSxzPSEwO2JyZWFrO2Nhc2UgMTA1OmNhc2UgNzM6Y2FzZSA5OTpjYXNlIDY3OnI9dGhpcy5MbChNLHIpLHI8MCYmKHM9ITApO2JyZWFrO2Nhc2UgMTEyOmNhc2UgODA6aWYoQj1KNHQodGhpcyxyKSwhQil0aHJvdyBudChuZXcgUnIoR3IoKEZyKCksSmN0KSkpKTt2eShNLEIpLHM9ITA7YnJlYWs7ZGVmYXVsdDpyPXRoaXMudGwoKX1lbHNlIGlmKHE9PTIwKXtpZihkPWM4KHRoaXMuaSw1OCx0aGlzLmQpLGQ8MCl0aHJvdyBudChuZXcgUnIoR3IoKEZyKCksRTh0KSkpKTtpZih3PSEwLFRhKHRoaXMuaSx0aGlzLmQpPT05NCYmKCsrdGhpcy5kLHc9ITEpLGg9QmwodGhpcy5pLHRoaXMuZCxkKSxrPWx0ZShoLHcsKHRoaXMuZSY1MTIpPT01MTIpLCFrKXRocm93IG50KG5ldyBScihHcigoRnIoKSxWZGUpKSkpO2lmKHZ5KE0saykscz0hMCxkKzE+PXRoaXMuanx8VGEodGhpcy5pLGQrMSkhPTkzKXRocm93IG50KG5ldyBScihHcigoRnIoKSxFOHQpKSkpO3RoaXMuZD1kKzJ9aWYobWkodGhpcyksIXMpaWYodGhpcy5jIT0wfHx0aGlzLmEhPTQ1KXFjKE0scixyKTtlbHNle2lmKG1pKHRoaXMpLChxPXRoaXMuYyk9PTEpdGhyb3cgbnQobmV3IFJyKEdyKChGcigpLEVIKSkpKTtxPT0wJiZ0aGlzLmE9PTkzPyhxYyhNLHIscikscWMoTSw0NSw0NSkpOihfPXRoaXMuYSxxPT0xMCYmKF89dGhpcy50bCgpKSxtaSh0aGlzKSxxYyhNLHIsXykpfSh0aGlzLmUmeGYpPT14ZiYmdGhpcy5jPT0wJiZ0aGlzLmE9PTQ0JiZtaSh0aGlzKX1pZih0aGlzLmM9PTEpdGhyb3cgbnQobmV3IFJyKEdyKChGcigpLEVIKSkpKTtyZXR1cm4gbiYmKENDKG4sTSksTT1uKSx2NChNKSxUQyhNKSx0aGlzLmI9MCxtaSh0aGlzKSxNfSxsLndsPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHM7Zm9yKHI9dGhpcy52bCghMSk7KHM9dGhpcy5jKSE9NzspaWYoZT10aGlzLmEscz09MCYmKGU9PTQ1fHxlPT0zOCl8fHM9PTQpe2lmKG1pKHRoaXMpLHRoaXMuYyE9OSl0aHJvdyBudChuZXcgUnIoR3IoKEZyKCksVWRlKSkpKTtpZihuPXRoaXMudmwoITEpLHM9PTQpdnkocixuKTtlbHNlIGlmKGU9PTQ1KUNDKHIsbik7ZWxzZSBpZihlPT0zOClHbGUocixuKTtlbHNlIHRocm93IG50KG5ldyBabygiQVNTRVJUIikpfWVsc2UgdGhyb3cgbnQobmV3IFJyKEdyKChGcigpLFdkZSkpKSk7cmV0dXJuIG1pKHRoaXMpLHJ9LGwueGw9ZnVuY3Rpb24oKXt2YXIgZSxuO3JldHVybiBlPXRoaXMuYS00OCxuPSh5aSgpLHlpKCksbmV3IGRydCgxMixudWxsLGUpKSwhdGhpcy5nJiYodGhpcy5nPW5ldyBmUiksaFIodGhpcy5nLG5ldyB2cHQoZSkpLG1pKHRoaXMpLG59LGwueWw9ZnVuY3Rpb24oKXtyZXR1cm4gbWkodGhpcykseWkoKSxNNWV9LGwuemw9ZnVuY3Rpb24oKXtyZXR1cm4gbWkodGhpcykseWkoKSxMNWV9LGwuQWw9ZnVuY3Rpb24oKXt0aHJvdyBudChuZXcgUnIoR3IoKEZyKCksd2gpKSkpfSxsLkJsPWZ1bmN0aW9uKCl7dGhyb3cgbnQobmV3IFJyKEdyKChGcigpLHdoKSkpKX0sbC5DbD1mdW5jdGlvbigpe3JldHVybiBtaSh0aGlzKSxVY24oKX0sbC5EbD1mdW5jdGlvbigpe3JldHVybiBtaSh0aGlzKSx5aSgpLEk1ZX0sbC5FbD1mdW5jdGlvbigpe3JldHVybiBtaSh0aGlzKSx5aSgpLE41ZX0sbC5GbD1mdW5jdGlvbigpe3ZhciBlO2lmKHRoaXMuZD49dGhpcy5qfHwoKGU9VGEodGhpcy5pLHRoaXMuZCsrKSkmNjU1MDQpIT02NCl0aHJvdyBudChuZXcgUnIoR3IoKEZyKCksemRlKSkpKTtyZXR1cm4gbWkodGhpcykseWkoKSx5aSgpLG5ldyBHZCgwLGUtNjQpfSxsLkdsPWZ1bmN0aW9uKCl7cmV0dXJuIG1pKHRoaXMpLExtbigpfSxsLkhsPWZ1bmN0aW9uKCl7cmV0dXJuIG1pKHRoaXMpLHlpKCksUDVlfSxsLklsPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9KHlpKCkseWkoKSxuZXcgR2QoMCwxMDUpKSxtaSh0aGlzKSxlfSxsLkpsPWZ1bmN0aW9uKCl7cmV0dXJuIG1pKHRoaXMpLHlpKCksTzVlfSxsLktsPWZ1bmN0aW9uKCl7cmV0dXJuIG1pKHRoaXMpLHlpKCksRDVlfSxsLkxsPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHRoaXMudGwoKX0sbC5NbD1mdW5jdGlvbigpe3JldHVybiBtaSh0aGlzKSx5aSgpLG1MdH0sbC5ObD1mdW5jdGlvbigpe3ZhciBlLG4scixzLG87aWYodGhpcy5kKzE+PXRoaXMuail0aHJvdyBudChuZXcgUnIoR3IoKEZyKCksUmRlKSkpKTtpZihzPS0xLG49bnVsbCxlPVRhKHRoaXMuaSx0aGlzLmQpLDQ5PD1lJiZlPD01Nyl7aWYocz1lLTQ4LCF0aGlzLmcmJih0aGlzLmc9bmV3IGZSKSxoUih0aGlzLmcsbmV3IHZwdChzKSksKyt0aGlzLmQsVGEodGhpcy5pLHRoaXMuZCkhPTQxKXRocm93IG50KG5ldyBScihHcigoRnIoKSxNMikpKSk7Kyt0aGlzLmR9ZWxzZSBzd2l0Y2goZT09NjMmJi0tdGhpcy5kLG1pKHRoaXMpLG49azZ0KHRoaXMpLG4uZSl7Y2FzZSAyMDpjYXNlIDIxOmNhc2UgMjI6Y2FzZSAyMzpicmVhaztjYXNlIDg6aWYodGhpcy5jIT03KXRocm93IG50KG5ldyBScihHcigoRnIoKSxNMikpKSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBudChuZXcgUnIoR3IoKEZyKCksamRlKSkpKX1pZihtaSh0aGlzKSxvPXN3KHRoaXMpLHI9bnVsbCxvLmU9PTIpe2lmKG8uZW0oKSE9Mil0aHJvdyBudChuZXcgUnIoR3IoKEZyKCksJGRlKSkpKTtyPW8uYW0oMSksbz1vLmFtKDApfWlmKHRoaXMuYyE9Nyl0aHJvdyBudChuZXcgUnIoR3IoKEZyKCksTTIpKSkpO3JldHVybiBtaSh0aGlzKSx5aSgpLHlpKCksbmV3IHF0ZShzLG4sbyxyKX0sbC5PbD1mdW5jdGlvbigpe3JldHVybiBtaSh0aGlzKSx5aSgpLHlMdH0sbC5QbD1mdW5jdGlvbigpe3ZhciBlO2lmKG1pKHRoaXMpLGU9V2ooMjQsc3codGhpcykpLHRoaXMuYyE9Nyl0aHJvdyBudChuZXcgUnIoR3IoKEZyKCksTTIpKSkpO3JldHVybiBtaSh0aGlzKSxlfSxsLlFsPWZ1bmN0aW9uKCl7dmFyIGU7aWYobWkodGhpcyksZT1XaigyMCxzdyh0aGlzKSksdGhpcy5jIT03KXRocm93IG50KG5ldyBScihHcigoRnIoKSxNMikpKSk7cmV0dXJuIG1pKHRoaXMpLGV9LGwuUmw9ZnVuY3Rpb24oKXt2YXIgZTtpZihtaSh0aGlzKSxlPVdqKDIyLHN3KHRoaXMpKSx0aGlzLmMhPTcpdGhyb3cgbnQobmV3IFJyKEdyKChGcigpLE0yKSkpKTtyZXR1cm4gbWkodGhpcyksZX0sbC5TbD1mdW5jdGlvbigpe3ZhciBlLG4scixzLG87Zm9yKGU9MCxyPTAsbj0tMTt0aGlzLmQ8dGhpcy5qJiYobj1UYSh0aGlzLmksdGhpcy5kKSxvPWk1dChuKSxvIT0wKTspZXw9bywrK3RoaXMuZDtpZih0aGlzLmQ+PXRoaXMuail0aHJvdyBudChuZXcgUnIoR3IoKEZyKCkseDh0KSkpKTtpZihuPT00NSl7Zm9yKCsrdGhpcy5kO3RoaXMuZDx0aGlzLmomJihuPVRhKHRoaXMuaSx0aGlzLmQpLG89aTV0KG4pLG8hPTApOylyfD1vLCsrdGhpcy5kO2lmKHRoaXMuZD49dGhpcy5qKXRocm93IG50KG5ldyBScihHcigoRnIoKSx4OHQpKSkpfWlmKG49PTU4KXtpZigrK3RoaXMuZCxtaSh0aGlzKSxzPVdZdChzdyh0aGlzKSxlLHIpLHRoaXMuYyE9Nyl0aHJvdyBudChuZXcgUnIoR3IoKEZyKCksTTIpKSkpO21pKHRoaXMpfWVsc2UgaWYobj09NDEpKyt0aGlzLmQsbWkodGhpcykscz1XWXQoc3codGhpcyksZSxyKTtlbHNlIHRocm93IG50KG5ldyBScihHcigoRnIoKSxCZGUpKSkpO3JldHVybiBzfSxsLlRsPWZ1bmN0aW9uKCl7dmFyIGU7aWYobWkodGhpcyksZT1XaigyMSxzdyh0aGlzKSksdGhpcy5jIT03KXRocm93IG50KG5ldyBScihHcigoRnIoKSxNMikpKSk7cmV0dXJuIG1pKHRoaXMpLGV9LGwuVWw9ZnVuY3Rpb24oKXt2YXIgZTtpZihtaSh0aGlzKSxlPVdqKDIzLHN3KHRoaXMpKSx0aGlzLmMhPTcpdGhyb3cgbnQobmV3IFJyKEdyKChGcigpLE0yKSkpKTtyZXR1cm4gbWkodGhpcyksZX0sbC5WbD1mdW5jdGlvbigpe3ZhciBlLG47aWYobWkodGhpcyksZT10aGlzLmYrKyxuPSRudChzdyh0aGlzKSxlKSx0aGlzLmMhPTcpdGhyb3cgbnQobmV3IFJyKEdyKChGcigpLE0yKSkpKTtyZXR1cm4gbWkodGhpcyksbn0sbC5XbD1mdW5jdGlvbigpe3ZhciBlO2lmKG1pKHRoaXMpLGU9JG50KHN3KHRoaXMpLDApLHRoaXMuYyE9Nyl0aHJvdyBudChuZXcgUnIoR3IoKEZyKCksTTIpKSkpO3JldHVybiBtaSh0aGlzKSxlfSxsLlhsPWZ1bmN0aW9uKGUpe3JldHVybiBtaSh0aGlzKSx0aGlzLmM9PTU/KG1pKHRoaXMpLEJqKGUsKHlpKCkseWkoKSxuZXcgV20oOSxlKSkpKTpCaihlLCh5aSgpLHlpKCksbmV3IFdtKDMsZSkpKX0sbC5ZbD1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbWkodGhpcyksbj0oeWkoKSx5aSgpLG5ldyBsXygyKSksdGhpcy5jPT01PyhtaSh0aGlzKSx4MihuLGZBKSx4MihuLGUpKTooeDIobixlKSx4MihuLGZBKSksbn0sbC5abD1mdW5jdGlvbihlKXtyZXR1cm4gbWkodGhpcyksdGhpcy5jPT01PyhtaSh0aGlzKSx5aSgpLHlpKCksbmV3IFdtKDksZSkpOih5aSgpLHlpKCksbmV3IFdtKDMsZSkpfSxsLmE9MCxsLmI9MCxsLmM9MCxsLmQ9MCxsLmU9MCxsLmY9MSxsLmc9bnVsbCxsLmo9MCxOKFlnLCJSZWdFeC9SZWdleFBhcnNlciIsODIwKSxEKDE4MjQsODIwLHt9LF9xdCksbC5zbD1mdW5jdGlvbihlKXtyZXR1cm4hMX0sbC50bD1mdW5jdGlvbigpe3JldHVybiBPNXQodGhpcyl9LGwudWw9ZnVuY3Rpb24oZSl7cmV0dXJuIHk3KGUpfSxsLnZsPWZ1bmN0aW9uKGUpe3JldHVybiBCaGUodGhpcyl9LGwud2w9ZnVuY3Rpb24oKXt0aHJvdyBudChuZXcgUnIoR3IoKEZyKCksd2gpKSkpfSxsLnhsPWZ1bmN0aW9uKCl7dGhyb3cgbnQobmV3IFJyKEdyKChGcigpLHdoKSkpKX0sbC55bD1mdW5jdGlvbigpe3Rocm93IG50KG5ldyBScihHcigoRnIoKSx3aCkpKSl9LGwuemw9ZnVuY3Rpb24oKXt0aHJvdyBudChuZXcgUnIoR3IoKEZyKCksd2gpKSkpfSxsLkFsPWZ1bmN0aW9uKCl7cmV0dXJuIG1pKHRoaXMpLHk3KDY3KX0sbC5CbD1mdW5jdGlvbigpe3JldHVybiBtaSh0aGlzKSx5Nyg3Myl9LGwuQ2w9ZnVuY3Rpb24oKXt0aHJvdyBudChuZXcgUnIoR3IoKEZyKCksd2gpKSkpfSxsLkRsPWZ1bmN0aW9uKCl7dGhyb3cgbnQobmV3IFJyKEdyKChGcigpLHdoKSkpKX0sbC5FbD1mdW5jdGlvbigpe3Rocm93IG50KG5ldyBScihHcigoRnIoKSx3aCkpKSl9LGwuRmw9ZnVuY3Rpb24oKXtyZXR1cm4gbWkodGhpcykseTcoOTkpfSxsLkdsPWZ1bmN0aW9uKCl7dGhyb3cgbnQobmV3IFJyKEdyKChGcigpLHdoKSkpKX0sbC5IbD1mdW5jdGlvbigpe3Rocm93IG50KG5ldyBScihHcigoRnIoKSx3aCkpKSl9LGwuSWw9ZnVuY3Rpb24oKXtyZXR1cm4gbWkodGhpcykseTcoMTA1KX0sbC5KbD1mdW5jdGlvbigpe3Rocm93IG50KG5ldyBScihHcigoRnIoKSx3aCkpKSl9LGwuS2w9ZnVuY3Rpb24oKXt0aHJvdyBudChuZXcgUnIoR3IoKEZyKCksd2gpKSkpfSxsLkxsPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHZ5KGUseTcobikpLC0xfSxsLk1sPWZ1bmN0aW9uKCl7cmV0dXJuIG1pKHRoaXMpLHlpKCkseWkoKSxuZXcgR2QoMCw5NCl9LGwuTmw9ZnVuY3Rpb24oKXt0aHJvdyBudChuZXcgUnIoR3IoKEZyKCksd2gpKSkpfSxsLk9sPWZ1bmN0aW9uKCl7cmV0dXJuIG1pKHRoaXMpLHlpKCkseWkoKSxuZXcgR2QoMCwzNil9LGwuUGw9ZnVuY3Rpb24oKXt0aHJvdyBudChuZXcgUnIoR3IoKEZyKCksd2gpKSkpfSxsLlFsPWZ1bmN0aW9uKCl7dGhyb3cgbnQobmV3IFJyKEdyKChGcigpLHdoKSkpKX0sbC5SbD1mdW5jdGlvbigpe3Rocm93IG50KG5ldyBScihHcigoRnIoKSx3aCkpKSl9LGwuU2w9ZnVuY3Rpb24oKXt0aHJvdyBudChuZXcgUnIoR3IoKEZyKCksd2gpKSkpfSxsLlRsPWZ1bmN0aW9uKCl7dGhyb3cgbnQobmV3IFJyKEdyKChGcigpLHdoKSkpKX0sbC5VbD1mdW5jdGlvbigpe3Rocm93IG50KG5ldyBScihHcigoRnIoKSx3aCkpKSl9LGwuVmw9ZnVuY3Rpb24oKXt2YXIgZTtpZihtaSh0aGlzKSxlPSRudChzdyh0aGlzKSwwKSx0aGlzLmMhPTcpdGhyb3cgbnQobmV3IFJyKEdyKChGcigpLE0yKSkpKTtyZXR1cm4gbWkodGhpcyksZX0sbC5XbD1mdW5jdGlvbigpe3Rocm93IG50KG5ldyBScihHcigoRnIoKSx3aCkpKSl9LGwuWGw9ZnVuY3Rpb24oZSl7cmV0dXJuIG1pKHRoaXMpLEJqKGUsKHlpKCkseWkoKSxuZXcgV20oMyxlKSkpfSxsLllsPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBtaSh0aGlzKSxuPSh5aSgpLHlpKCksbmV3IGxfKDIpKSx4MihuLGUpLHgyKG4sZkEpLG59LGwuWmw9ZnVuY3Rpb24oZSl7cmV0dXJuIG1pKHRoaXMpLHlpKCkseWkoKSxuZXcgV20oMyxlKX07dmFyIGY1PW51bGwsTUU9bnVsbDtOKFlnLCJSZWdFeC9QYXJzZXJGb3JYTUxTY2hlbWEiLDE4MjQpLEQoMTE3LDEsVTcsdnYpLGwuJGw9ZnVuY3Rpb24oZSl7dGhyb3cgbnQobmV3IFpvKCJOb3Qgc3VwcG9ydGVkLiIpKX0sbC5fbD1mdW5jdGlvbigpe3JldHVybi0xfSxsLmFtPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsfSxsLmJtPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGwuY209ZnVuY3Rpb24oZSl7fSxsLmRtPWZ1bmN0aW9uKGUpe30sbC5lbT1mdW5jdGlvbigpe3JldHVybiAwfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZm0oMCl9LGwuZm09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZT09MTE/Ii4iOiIifSxsLmU9MDt2YXIgYkx0LERFLGhBLEE1ZSx2THQsbjM9bnVsbCxsVSxOZnQ9bnVsbCx3THQsZkEsUGZ0PW51bGwsbUx0LHlMdCx4THQsa0x0LEVMdCxMNWUsV3gsTTVlLEQ1ZSxJNWUsTzVlLElFLE41ZSxQNWUsRTZuPU4oWWcsIlJlZ0V4L1Rva2VuIiwxMTcpO0QoMTM2LDExNyx7MzoxLDEzNjoxLDExNzoxfSxqbCksbC5mbT1mdW5jdGlvbihlKXt2YXIgbixyLHM7aWYodGhpcy5lPT00KWlmKHRoaXM9PXdMdClyPSIuIjtlbHNlIGlmKHRoaXM9PWxVKXI9IlxcZCI7ZWxzZSBpZih0aGlzPT1JRSlyPSJcXHciO2Vsc2UgaWYodGhpcz09V3gpcj0iXFxzIjtlbHNle2ZvcihzPW5ldyBfZyxzLmErPSJbIixuPTA7bjx0aGlzLmIubGVuZ3RoO24rPTIpZSZ4ZiYmbj4wJiYocy5hKz0iLCIpLHRoaXMuYltuXT09PXRoaXMuYltuKzFdP3lvKHMseEkodGhpcy5iW25dKSk6KHlvKHMseEkodGhpcy5iW25dKSkscy5hKz0iLSIseW8ocyx4SSh0aGlzLmJbbisxXSkpKTtzLmErPSJdIixyPXMuYX1lbHNlIGlmKHRoaXM9PXhMdClyPSJcXEQiO2Vsc2UgaWYodGhpcz09RUx0KXI9IlxcVyI7ZWxzZSBpZih0aGlzPT1rTHQpcj0iXFxTIjtlbHNle2ZvcihzPW5ldyBfZyxzLmErPSJbXiIsbj0wO248dGhpcy5iLmxlbmd0aDtuKz0yKWUmeGYmJm4+MCYmKHMuYSs9IiwiKSx0aGlzLmJbbl09PT10aGlzLmJbbisxXT95byhzLHhJKHRoaXMuYltuXSkpOih5byhzLHhJKHRoaXMuYltuXSkpLHMuYSs9Ii0iLHlvKHMseEkodGhpcy5iW24rMV0pKSk7cy5hKz0iXSIscj1zLmF9cmV0dXJuIHJ9LGwuYT0hMSxsLmM9ITEsTihZZywiUmVnRXgvUmFuZ2VUb2tlbiIsMTM2KSxEKDU4NCwxLHs1ODQ6MX0sdnB0KSxsLmE9MCxOKFlnLCJSZWdFeC9SZWdleFBhcnNlci9SZWZlcmVuY2VQb3NpdGlvbiIsNTg0KSxEKDU4MywxLHszOjEsNTgzOjF9LEZIdCksbC5GYj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gZT09bnVsbHx8IV90KGUsNTgzKT8hMToobj11KGUsNTgzKSx1bih0aGlzLmIsbi5iKSYmdGhpcy5hPT1uLmEpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHpnKHRoaXMuYisiLyIrUzV0KHRoaXMuYSkpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYy5mbSh0aGlzLmEpfSxsLmE9MCxOKFlnLCJSZWdFeC9SZWd1bGFyRXhwcmVzc2lvbiIsNTgzKSxEKDIyMywxMTcsVTcsR2QpLGwuX2w9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLmZtPWZ1bmN0aW9uKGUpe3ZhciBuLHIscztzd2l0Y2godGhpcy5lKXtjYXNlIDA6c3dpdGNoKHRoaXMuYSl7Y2FzZSAxMjQ6Y2FzZSA0MjpjYXNlIDQzOmNhc2UgNjM6Y2FzZSA0MDpjYXNlIDQxOmNhc2UgNDY6Y2FzZSA5MTpjYXNlIDEyMzpjYXNlIDkyOnM9IlxcIitkbnQodGhpcy5hJk1zKTticmVhaztjYXNlIDEyOnM9IlxcZiI7YnJlYWs7Y2FzZSAxMDpzPSJcXG4iO2JyZWFrO2Nhc2UgMTM6cz0iXFxyIjticmVhaztjYXNlIDk6cz0iXFx0IjticmVhaztjYXNlIDI3OnM9IlxcZSI7YnJlYWs7ZGVmYXVsdDp0aGlzLmE+PVFhPyhyPShuPXRoaXMuYT4+PjAsIjAiK24udG9TdHJpbmcoMTYpKSxzPSJcXHYiK0JsKHIsci5sZW5ndGgtNixyLmxlbmd0aCkpOnM9IiIrZG50KHRoaXMuYSZNcyl9YnJlYWs7Y2FzZSA4OnRoaXM9PW1MdHx8dGhpcz09eUx0P3M9IiIrZG50KHRoaXMuYSZNcyk6cz0iXFwiK2RudCh0aGlzLmEmTXMpO2JyZWFrO2RlZmF1bHQ6cz1udWxsfXJldHVybiBzfSxsLmE9MCxOKFlnLCJSZWdFeC9Ub2tlbi9DaGFyVG9rZW4iLDIyMyksRCgzMDksMTE3LFU3LFdtKSxsLmFtPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmF9LGwuY209ZnVuY3Rpb24oZSl7dGhpcy5iPWV9LGwuZG09ZnVuY3Rpb24oZSl7dGhpcy5jPWV9LGwuZW09ZnVuY3Rpb24oKXtyZXR1cm4gMX0sbC5mbT1mdW5jdGlvbihlKXt2YXIgbjtpZih0aGlzLmU9PTMpaWYodGhpcy5jPDAmJnRoaXMuYjwwKW49dGhpcy5hLmZtKGUpKyIqIjtlbHNlIGlmKHRoaXMuYz09dGhpcy5iKW49dGhpcy5hLmZtKGUpKyJ7Iit0aGlzLmMrIn0iO2Vsc2UgaWYodGhpcy5jPj0wJiZ0aGlzLmI+PTApbj10aGlzLmEuZm0oZSkrInsiK3RoaXMuYysiLCIrdGhpcy5iKyJ9IjtlbHNlIGlmKHRoaXMuYz49MCYmdGhpcy5iPDApbj10aGlzLmEuZm0oZSkrInsiK3RoaXMuYysiLH0iO2Vsc2UgdGhyb3cgbnQobmV3IFpvKCJUb2tlbiN0b1N0cmluZygpOiBDTE9TVVJFICIrdGhpcy5jK1hhK3RoaXMuYikpO2Vsc2UgaWYodGhpcy5jPDAmJnRoaXMuYjwwKW49dGhpcy5hLmZtKGUpKyIqPyI7ZWxzZSBpZih0aGlzLmM9PXRoaXMuYiluPXRoaXMuYS5mbShlKSsieyIrdGhpcy5jKyJ9PyI7ZWxzZSBpZih0aGlzLmM+PTAmJnRoaXMuYj49MCluPXRoaXMuYS5mbShlKSsieyIrdGhpcy5jKyIsIit0aGlzLmIrIn0/IjtlbHNlIGlmKHRoaXMuYz49MCYmdGhpcy5iPDApbj10aGlzLmEuZm0oZSkrInsiK3RoaXMuYysiLH0/IjtlbHNlIHRocm93IG50KG5ldyBabygiVG9rZW4jdG9TdHJpbmcoKTogTk9OR1JFRURZQ0xPU1VSRSAiK3RoaXMuYytYYSt0aGlzLmIpKTtyZXR1cm4gbn0sbC5iPTAsbC5jPTAsTihZZywiUmVnRXgvVG9rZW4vQ2xvc3VyZVRva2VuIiwzMDkpLEQoODIxLDExNyxVNyx1d3QpLGwuYW09ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PTA/dGhpcy5hOnRoaXMuYn0sbC5lbT1mdW5jdGlvbigpe3JldHVybiAyfSxsLmZtPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiB0aGlzLmIuZT09MyYmdGhpcy5iLmFtKDApPT10aGlzLmE/bj10aGlzLmEuZm0oZSkrIisiOnRoaXMuYi5lPT05JiZ0aGlzLmIuYW0oMCk9PXRoaXMuYT9uPXRoaXMuYS5mbShlKSsiKz8iOm49dGhpcy5hLmZtKGUpKygiIit0aGlzLmIuZm0oZSkpLG59LE4oWWcsIlJlZ0V4L1Rva2VuL0NvbmNhdFRva2VuIiw4MjEpLEQoMTgyMiwxMTcsVTcscXRlKSxsLmFtPWZ1bmN0aW9uKGUpe2lmKGU9PTApcmV0dXJuIHRoaXMuZDtpZihlPT0xKXJldHVybiB0aGlzLmI7dGhyb3cgbnQobmV3IFpvKCJJbnRlcm5hbCBFcnJvcjogIitlKSl9LGwuZW09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iPzI6MX0sbC5mbT1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gdGhpcy5jPjA/bj0iKD8oIit0aGlzLmMrIikiOnRoaXMuYS5lPT04P249Iig/KCIrdGhpcy5hKyIpIjpuPSIoPyIrdGhpcy5hLHRoaXMuYj9uKz10aGlzLmQrInwiK3RoaXMuYisiKSI6bis9dGhpcy5kKyIpIixufSxsLmM9MCxOKFlnLCJSZWdFeC9Ub2tlbi9Db25kaXRpb25Ub2tlbiIsMTgyMiksRCgxODIzLDExNyxVNyxxUXQpLGwuYW09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYn0sbC5lbT1mdW5jdGlvbigpe3JldHVybiAxfSxsLmZtPWZ1bmN0aW9uKGUpe3JldHVybiIoPyIrKHRoaXMuYT09MD8iIjpTNXQodGhpcy5hKSkrKHRoaXMuYz09MD8iIjpTNXQodGhpcy5jKSkrIjoiK3RoaXMuYi5mbShlKSsiKSJ9LGwuYT0wLGwuYz0wLE4oWWcsIlJlZ0V4L1Rva2VuL01vZGlmaWVyVG9rZW4iLDE4MjMpLEQoODIyLDExNyxVNyxwd3QpLGwuYW09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYX0sbC5lbT1mdW5jdGlvbigpe3JldHVybiAxfSxsLmZtPWZ1bmN0aW9uKGUpe3ZhciBuO3N3aXRjaChuPW51bGwsdGhpcy5lKXtjYXNlIDY6dGhpcy5iPT0wP249Iig/OiIrdGhpcy5hLmZtKGUpKyIpIjpuPSIoIit0aGlzLmEuZm0oZSkrIikiO2JyZWFrO2Nhc2UgMjA6bj0iKD89Iit0aGlzLmEuZm0oZSkrIikiO2JyZWFrO2Nhc2UgMjE6bj0iKD8hIit0aGlzLmEuZm0oZSkrIikiO2JyZWFrO2Nhc2UgMjI6bj0iKD88PSIrdGhpcy5hLmZtKGUpKyIpIjticmVhaztjYXNlIDIzOm49Iig/PCEiK3RoaXMuYS5mbShlKSsiKSI7YnJlYWs7Y2FzZSAyNDpuPSIoPz4iK3RoaXMuYS5mbShlKSsiKSJ9cmV0dXJuIG59LGwuYj0wLE4oWWcsIlJlZ0V4L1Rva2VuL1BhcmVuVG9rZW4iLDgyMiksRCg1MjEsMTE3LHszOjEsMTE3OjEsNTIxOjF9LGRydCksbC5ibT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuZm09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZT09MTI/IlxcIit0aGlzLmE6QnBuKHRoaXMuYil9LGwuYT0wLE4oWWcsIlJlZ0V4L1Rva2VuL1N0cmluZ1Rva2VuIiw1MjEpLEQoNDY1LDExNyxVNyxsXyksbC4kbD1mdW5jdGlvbihlKXt4Mih0aGlzLGUpfSxsLmFtPWZ1bmN0aW9uKGUpe3JldHVybiB1KFJ2KHRoaXMuYSxlKSwxMTcpfSxsLmVtPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYT90aGlzLmEuYS5jLmxlbmd0aDowfSxsLmZtPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGg7aWYodGhpcy5lPT0xKXtpZih0aGlzLmEuYS5jLmxlbmd0aD09MiluPXUoUnYodGhpcy5hLDApLDExNykscj11KFJ2KHRoaXMuYSwxKSwxMTcpLHIuZT09MyYmci5hbSgwKT09bj9vPW4uZm0oZSkrIisiOnIuZT09OSYmci5hbSgwKT09bj9vPW4uZm0oZSkrIis/IjpvPW4uZm0oZSkrKCIiK3IuZm0oZSkpO2Vsc2V7Zm9yKGg9bmV3IF9nLHM9MDtzPHRoaXMuYS5hLmMubGVuZ3RoO3MrKyl5byhoLHUoUnYodGhpcy5hLHMpLDExNykuZm0oZSkpO289aC5hfXJldHVybiBvfWlmKHRoaXMuYS5hLmMubGVuZ3RoPT0yJiZ1KFJ2KHRoaXMuYSwxKSwxMTcpLmU9PTcpbz11KFJ2KHRoaXMuYSwwKSwxMTcpLmZtKGUpKyI/IjtlbHNlIGlmKHRoaXMuYS5hLmMubGVuZ3RoPT0yJiZ1KFJ2KHRoaXMuYSwwKSwxMTcpLmU9PTcpbz11KFJ2KHRoaXMuYSwxKSwxMTcpLmZtKGUpKyI/PyI7ZWxzZXtmb3IoaD1uZXcgX2cseW8oaCx1KFJ2KHRoaXMuYSwwKSwxMTcpLmZtKGUpKSxzPTE7czx0aGlzLmEuYS5jLmxlbmd0aDtzKyspaC5hKz0ifCIseW8oaCx1KFJ2KHRoaXMuYSxzKSwxMTcpLmZtKGUpKTtvPWguYX1yZXR1cm4gb30sTihZZywiUmVnRXgvVG9rZW4vVW5pb25Ub2tlbiIsNDY1KSxEKDUxOCwxLHs1OTI6MX0saE0pLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmJ9LE4obmdlLCJYTUxUeXBlVXRpbC9QYXR0ZXJuTWF0Y2hlckltcGwiLDUxOCksRCgxNjIyLDEzODEse30sQUIpO3ZhciBGNWU7TihuZ2UsIlhNTFR5cGVWYWxpZGF0b3IiLDE2MjIpLEQoMjY0LDEsdDAsSmIpLGwuSmM9ZnVuY3Rpb24oZSl7X2EodGhpcyxlKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybih0aGlzLmItdGhpcy5hKSp0aGlzLmM8MD9NYjpuZXcgQnAodGhpcyl9LGwuYT0wLGwuYj0wLGwuYz0wO3ZhciBNYjtOKHE4dCwiRXhjbHVzaXZlUmFuZ2UiLDI2NCksRCgxMDY4LDEsSmQsSUopLGwuUmI9ZnVuY3Rpb24oZSl7dShlLDE5KSxkWGUoKX0sbC5OYj1mdW5jdGlvbihlKXtFYSh0aGlzLGUpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIGlZZSgpfSxsLlViPWZ1bmN0aW9uKCl7cmV0dXJuIHNZZSgpfSxsLldiPWZ1bmN0aW9uKGUpe3UoZSwxOSkscFhlKCl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5TYj1mdW5jdGlvbigpe3JldHVybiExfSxsLlRiPWZ1bmN0aW9uKCl7cmV0dXJuLTF9LGwuVmI9ZnVuY3Rpb24oKXtyZXR1cm4tMX0sbC5RYj1mdW5jdGlvbigpe3Rocm93IG50KG5ldyBUZyhzZ2UpKX0sTihxOHQsIkV4Y2x1c2l2ZVJhbmdlLzEiLDEwNjgpLEQoMjU0LDEsSmQsQnApLGwuUmI9ZnVuY3Rpb24oZSl7dShlLDE5KSxnWGUoKX0sbC5OYj1mdW5jdGlvbihlKXtFYSh0aGlzLGUpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIGR1bih0aGlzKX0sbC5VYj1mdW5jdGlvbigpe3JldHVybiB1YW4odGhpcyl9LGwuV2I9ZnVuY3Rpb24oZSl7dShlLDE5KSxiWGUoKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMuYzwwP3RoaXMuYT49dGhpcy5jLmI6dGhpcy5hPD10aGlzLmMuYn0sbC5TYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmI+MH0sbC5UYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuVmI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLTF9LGwuUWI9ZnVuY3Rpb24oKXt0aHJvdyBudChuZXcgVGcoc2dlKSl9LGwuYT0wLGwuYj0wLE4ocTh0LCJFeGNsdXNpdmVSYW5nZS9SYW5nZUl0ZXJhdG9yIiwyNTQpO3ZhciBFaD13OChUSCwiQyIpLFNyPXc4KHRTLCJJIikseGw9dzgoY3gsIloiKSxEYj13OChlUywiSiIpLFh1PXc4KFFDLCJCIiksZ2E9dzgoWkMsIkQiKSxyMz13OChKQywiRiIpLGQ1PXc4KG5TLCJTIiksVDZuPWFzKCJvcmcuZWNsaXBzZS5lbGsuY29yZS5sYWJlbHMiLCJJTGFiZWxNYW5hZ2VyIiksVEx0PWFzKHFhLCJEaWFnbm9zdGljQ2hhaW4iKSxfTHQ9YXMoTzBlLCJSZXNvdXJjZVNldCIpLENMdD1OKHFhLCJJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIixudWxsKSxCNWU9KHZSKCkscHNuKSxSNWU9UjVlPWlkbjtsb24ocktlKSxGb24oInBlcm1Qcm9wcyIsW1tbQkgsUkhdLFtqSCwiZ2Vja28xXzgiXV0sW1tCSCxSSF0sW2pILCJpZTEwIl1dLFtbQkgsUkhdLFtqSCwiaWU4Il1dLFtbQkgsUkhdLFtqSCwiaWU5Il1dLFtbQkgsUkhdLFtqSCwic2FmYXJpIl1dXSksUjVlKG51bGwsImVsayIsbnVsbCl9KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHR5cGVvZiBkMDwidSI/ZDA6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0se31dLDM6W2Z1bmN0aW9uKGYscCx2KXtmdW5jdGlvbiBtKFAsRil7aWYoIShQIGluc3RhbmNlb2YgRikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gYihQLEYpe2lmKCFQKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIEYmJih0eXBlb2YgRj09Im9iamVjdCJ8fHR5cGVvZiBGPT0iZnVuY3Rpb24iKT9GOlB9ZnVuY3Rpb24gRShQLEYpe2lmKHR5cGVvZiBGIT0iZnVuY3Rpb24iJiZGIT09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIrdHlwZW9mIEYpO1AucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRiYmRi5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpQLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLEYmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKFAsRik6UC5fX3Byb3RvX189Ril9dmFyIEM9ZigiLi9lbGstYXBpLmpzIikuZGVmYXVsdCxBPWZ1bmN0aW9uKFApe0UoRixQKTtmdW5jdGlvbiBGKCl7dmFyIGo9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOnt9O20odGhpcyxGKTt2YXIgUj1PYmplY3QuYXNzaWduKHt9LGopLEg9ITE7dHJ5e2YucmVzb2x2ZSgid2ViLXdvcmtlciIpLEg9ITB9Y2F0Y2h7fWlmKGoud29ya2VyVXJsKWlmKEgpe3ZhciBZPWYoIndlYi13b3JrZXIiKTtSLndvcmtlckZhY3Rvcnk9ZnVuY3Rpb24oaXQpe3JldHVybiBuZXcgWShpdCl9fWVsc2UgY29uc29sZS53YXJuKGBXZWIgd29ya2VyIHJlcXVlc3RlZCBidXQgJ3dlYi13b3JrZXInIHBhY2thZ2Ugbm90IGluc3RhbGxlZC4gCkNvbnNpZGVyIGluc3RhbGxpbmcgdGhlIHBhY2thZ2Ugb3IgcGFzcyB5b3VyIG93biAnd29ya2VyRmFjdG9yeScgdG8gRUxLJ3MgY29uc3RydWN0b3IuCi4uLiBGYWxsaW5nIGJhY2sgdG8gbm9uLXdlYiB3b3JrZXIgdmVyc2lvbi5gKTtpZighUi53b3JrZXJGYWN0b3J5KXt2YXIgcnQ9ZigiLi9lbGstd29ya2VyLm1pbi5qcyIpLEo9cnQuV29ya2VyO1Iud29ya2VyRmFjdG9yeT1mdW5jdGlvbihpdCl7cmV0dXJuIG5ldyBKKGl0KX19cmV0dXJuIGIodGhpcywoRi5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihGKSkuY2FsbCh0aGlzLFIpKX1yZXR1cm4gRn0oQyk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHAuZXhwb3J0cywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscC5leHBvcnRzPUEsQS5kZWZhdWx0PUF9LHsiLi9lbGstYXBpLmpzIjoxLCIuL2Vsay13b3JrZXIubWluLmpzIjoyLCJ3ZWItd29ya2VyIjo0fV0sNDpbZnVuY3Rpb24oZixwLHYpe3AuZXhwb3J0cz1Xb3JrZXJ9LHt9XX0se30sWzNdKSgzKX0pfSkobWp0KTt2YXIgY1VlPW1qdC5leHBvcnRzO2NvbnN0IHVVZT1QRShjVWUpLHlqdD1uZXcgdVVlO2xldCBzdj17fTtjb25zdCBsVWU9e307bGV0IEI1PXt9O2NvbnN0IGhVZT1hc3luYyBmdW5jdGlvbihpLGEsZixwLHYsbSxiKXtjb25zdCBDPWYuc2VsZWN0KGBbaWQ9IiR7YX0iXWApLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZXMiKSxBPU9iamVjdC5rZXlzKGkpO3JldHVybiBhd2FpdCBQcm9taXNlLmFsbChBLm1hcChhc3luYyBmdW5jdGlvbihQKXtjb25zdCBGPWlbUF07bGV0IGo9ImRlZmF1bHQiO0YuY2xhc3Nlcy5sZW5ndGg+MCYmKGo9Ri5jbGFzc2VzLmpvaW4oIiAiKSksaj1qKyIgZmxvd2NoYXJ0LWxhYmVsIjtjb25zdCBSPWVtKEYuc3R5bGVzKTtsZXQgSD1GLnRleHQhPT12b2lkIDA/Ri50ZXh0OkYuaWQ7Y29uc3QgWT17d2lkdGg6MCxoZWlnaHQ6MH0scnQ9W3tpZDpGLmlkKyItd2VzdCIsbGF5b3V0T3B0aW9uczp7InBvcnQuc2lkZSI6IldFU1QifX0se2lkOkYuaWQrIi1lYXN0IixsYXlvdXRPcHRpb25zOnsicG9ydC5zaWRlIjoiRUFTVCJ9fSx7aWQ6Ri5pZCsiLXNvdXRoIixsYXlvdXRPcHRpb25zOnsicG9ydC5zaWRlIjoiU09VVEgifX0se2lkOkYuaWQrIi1ub3J0aCIsbGF5b3V0T3B0aW9uczp7InBvcnQuc2lkZSI6Ik5PUlRIIn19XTtsZXQgSj0wLGl0PSIiLGZ0PXt9O3N3aXRjaChGLnR5cGUpe2Nhc2Uicm91bmQiOko9NSxpdD0icmVjdCI7YnJlYWs7Y2FzZSJzcXVhcmUiOml0PSJyZWN0IjticmVhaztjYXNlImRpYW1vbmQiOml0PSJxdWVzdGlvbiIsZnQ9e3BvcnRDb25zdHJhaW50czoiRklYRURfU0lERSJ9O2JyZWFrO2Nhc2UiaGV4YWdvbiI6aXQ9ImhleGFnb24iO2JyZWFrO2Nhc2Uib2RkIjppdD0icmVjdF9sZWZ0X2ludl9hcnJvdyI7YnJlYWs7Y2FzZSJsZWFuX3JpZ2h0IjppdD0ibGVhbl9yaWdodCI7YnJlYWs7Y2FzZSJsZWFuX2xlZnQiOml0PSJsZWFuX2xlZnQiO2JyZWFrO2Nhc2UidHJhcGV6b2lkIjppdD0idHJhcGV6b2lkIjticmVhaztjYXNlImludl90cmFwZXpvaWQiOml0PSJpbnZfdHJhcGV6b2lkIjticmVhaztjYXNlIm9kZF9yaWdodCI6aXQ9InJlY3RfbGVmdF9pbnZfYXJyb3ciO2JyZWFrO2Nhc2UiY2lyY2xlIjppdD0iY2lyY2xlIjticmVhaztjYXNlImVsbGlwc2UiOml0PSJlbGxpcHNlIjticmVhaztjYXNlInN0YWRpdW0iOml0PSJzdGFkaXVtIjticmVhaztjYXNlInN1YnJvdXRpbmUiOml0PSJzdWJyb3V0aW5lIjticmVhaztjYXNlImN5bGluZGVyIjppdD0iY3lsaW5kZXIiO2JyZWFrO2Nhc2UiZ3JvdXAiOml0PSJyZWN0IjticmVhaztjYXNlImRvdWJsZWNpcmNsZSI6aXQ9ImRvdWJsZWNpcmNsZSI7YnJlYWs7ZGVmYXVsdDppdD0icmVjdCJ9Y29uc3QgVHQ9e2xhYmVsU3R5bGU6Ui5sYWJlbFN0eWxlLHNoYXBlOml0LGxhYmVsVGV4dDpILGxhYmVsVHlwZTpGLmxhYmVsVHlwZSxyeDpKLHJ5OkosY2xhc3M6aixzdHlsZTpSLnN0eWxlLGlkOkYuaWQsbGluazpGLmxpbmssbGlua1RhcmdldDpGLmxpbmtUYXJnZXQsdG9vbHRpcDp2LmRiLmdldFRvb2x0aXAoRi5pZCl8fCIiLGRvbUlkOnYuZGIubG9va1VwRG9tSWQoRi5pZCksaGF2ZUNhbGxiYWNrOkYuaGF2ZUNhbGxiYWNrLHdpZHRoOkYudHlwZT09PSJncm91cCI/NTAwOnZvaWQgMCxkaXI6Ri5kaXIsdHlwZTpGLnR5cGUscHJvcHM6Ri5wcm9wcyxwYWRkaW5nOkRlKCkuZmxvd2NoYXJ0LnBhZGRpbmd9O2xldCBrdCxtdDtpZihUdC50eXBlIT09Imdyb3VwIiltdD1hd2FpdCBfQnQoQyxUdCxGLmRpciksa3Q9bXQubm9kZSgpLmdldEJCb3goKTtlbHNle3AuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRleHQiKTtjb25zdHtzaGFwZVN2Zzp5dCxiYm94OnN0fT1hd2FpdCBPZChDLFR0LHZvaWQgMCwhMCk7WS53aWR0aD1zdC53aWR0aCxZLndyYXBwaW5nV2lkdGg9RGUoKS5mbG93Y2hhcnQud3JhcHBpbmdXaWR0aCxZLmhlaWdodD1zdC5oZWlnaHQsWS5sYWJlbE5vZGU9eXQubm9kZSgpLFR0LmxhYmVsRGF0YT1ZfWNvbnN0IGN0PXtpZDpGLmlkLHBvcnRzOkYudHlwZT09PSJkaWFtb25kIj9ydDpbXSxsYXlvdXRPcHRpb25zOmZ0LGxhYmVsVGV4dDpILGxhYmVsRGF0YTpZLGRvbUlkOnYuZGIubG9va1VwRG9tSWQoRi5pZCksd2lkdGg6a3Q9PW51bGw/dm9pZCAwOmt0LndpZHRoLGhlaWdodDprdD09bnVsbD92b2lkIDA6a3QuaGVpZ2h0LHR5cGU6Ri50eXBlLGVsOm10LHBhcmVudDptLnBhcmVudEJ5SWRbRi5pZF19O0I1W1R0LmlkXT1jdH0pKSxifSx4anQ9KGksYSxmKT0+e2NvbnN0IHA9e1RCOntpbjp7bm9ydGg6Im5vcnRoIn0sb3V0Ontzb3V0aDoid2VzdCIsd2VzdDoiZWFzdCIsZWFzdDoic291dGgifX0sTFI6e2luOnt3ZXN0OiJ3ZXN0In0sb3V0OntlYXN0OiJzb3V0aCIsc291dGg6Im5vcnRoIixub3J0aDoiZWFzdCJ9fSxSTDp7aW46e2Vhc3Q6ImVhc3QifSxvdXQ6e3dlc3Q6Im5vcnRoIixub3J0aDoic291dGgiLHNvdXRoOiJ3ZXN0In19LEJUOntpbjp7c291dGg6InNvdXRoIn0sb3V0Ontub3J0aDoiZWFzdCIsZWFzdDoid2VzdCIsd2VzdDoibm9ydGgifX19O3JldHVybiBwLlREPXAuVEIsV3QuaW5mbygiYWJjODgiLGYsYSxpKSxwW2ZdW2FdW2ldfSxranQ9KGksYSxmKT0+e2lmKFd0LmluZm8oImdldE5leHRQb3J0IGFiYzg4Iix7bm9kZTppLGVkZ2VEaXJlY3Rpb246YSxncmFwaERpcmVjdGlvbjpmfSksIXN2W2ldKXN3aXRjaChmKXtjYXNlIlRCIjpjYXNlIlREIjpzdltpXT17aW5Qb3NpdGlvbjoibm9ydGgiLG91dFBvc2l0aW9uOiJzb3V0aCJ9O2JyZWFrO2Nhc2UiQlQiOnN2W2ldPXtpblBvc2l0aW9uOiJzb3V0aCIsb3V0UG9zaXRpb246Im5vcnRoIn07YnJlYWs7Y2FzZSJSTCI6c3ZbaV09e2luUG9zaXRpb246ImVhc3QiLG91dFBvc2l0aW9uOiJ3ZXN0In07YnJlYWs7Y2FzZSJMUiI6c3ZbaV09e2luUG9zaXRpb246Indlc3QiLG91dFBvc2l0aW9uOiJlYXN0In07YnJlYWt9Y29uc3QgcD1hPT09ImluIj9zdltpXS5pblBvc2l0aW9uOnN2W2ldLm91dFBvc2l0aW9uO3JldHVybiBhPT09ImluIj9zdltpXS5pblBvc2l0aW9uPXhqdChzdltpXS5pblBvc2l0aW9uLGEsZik6c3ZbaV0ub3V0UG9zaXRpb249eGp0KHN2W2ldLm91dFBvc2l0aW9uLGEsZikscH0sZlVlPShpLGEpPT57bGV0IGY9aS5zdGFydCxwPWkuZW5kO2NvbnN0IHY9ZixtPXAsYj1CNVtmXSxFPUI1W3BdO3JldHVybiFifHwhRT97c291cmNlOmYsdGFyZ2V0OnB9OihiLnR5cGU9PT0iZGlhbW9uZCImJihmPWAke2Z9LSR7a2p0KGYsIm91dCIsYSl9YCksRS50eXBlPT09ImRpYW1vbmQiJiYocD1gJHtwfS0ke2tqdChwLCJpbiIsYSl9YCkse3NvdXJjZTpmLHRhcmdldDpwLHNvdXJjZUlkOnYsdGFyZ2V0SWQ6bX0pfSxkVWU9ZnVuY3Rpb24oaSxhLGYscCl7V3QuaW5mbygiYWJjNzggZWRnZXMgPSAiLGkpO2NvbnN0IHY9cC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VMYWJlbHMiKTtsZXQgbT17fSxiPWEuZGIuZ2V0RGlyZWN0aW9uKCksRSxDO2lmKGkuZGVmYXVsdFN0eWxlIT09dm9pZCAwKXtjb25zdCBBPWVtKGkuZGVmYXVsdFN0eWxlKTtFPUEuc3R5bGUsQz1BLmxhYmVsU3R5bGV9cmV0dXJuIGkuZm9yRWFjaChmdW5jdGlvbihBKXtjb25zdCBQPSJMLSIrQS5zdGFydCsiLSIrQS5lbmQ7bVtQXT09PXZvaWQgMD8obVtQXT0wLFd0LmluZm8oImFiYzc4IG5ldyBlbnRyeSIsUCxtW1BdKSk6KG1bUF0rKyxXdC5pbmZvKCJhYmM3OCBuZXcgZW50cnkiLFAsbVtQXSkpO2xldCBGPVArIi0iK21bUF07V3QuaW5mbygiYWJjNzggbmV3IGxpbmsgaWQgdG8gYmUgdXNlZCBpcyIsUCxGLG1bUF0pO2NvbnN0IGo9IkxTLSIrQS5zdGFydCxSPSJMRS0iK0EuZW5kLEg9e3N0eWxlOiIiLGxhYmVsU3R5bGU6IiJ9O3N3aXRjaChILm1pbmxlbj1BLmxlbmd0aHx8MSxBLnR5cGU9PT0iYXJyb3dfb3BlbiI/SC5hcnJvd2hlYWQ9Im5vbmUiOkguYXJyb3doZWFkPSJub3JtYWwiLEguYXJyb3dUeXBlU3RhcnQ9ImFycm93X29wZW4iLEguYXJyb3dUeXBlRW5kPSJhcnJvd19vcGVuIixBLnR5cGUpe2Nhc2UiZG91YmxlX2Fycm93X2Nyb3NzIjpILmFycm93VHlwZVN0YXJ0PSJhcnJvd19jcm9zcyI7Y2FzZSJhcnJvd19jcm9zcyI6SC5hcnJvd1R5cGVFbmQ9ImFycm93X2Nyb3NzIjticmVhaztjYXNlImRvdWJsZV9hcnJvd19wb2ludCI6SC5hcnJvd1R5cGVTdGFydD0iYXJyb3dfcG9pbnQiO2Nhc2UiYXJyb3dfcG9pbnQiOkguYXJyb3dUeXBlRW5kPSJhcnJvd19wb2ludCI7YnJlYWs7Y2FzZSJkb3VibGVfYXJyb3dfY2lyY2xlIjpILmFycm93VHlwZVN0YXJ0PSJhcnJvd19jaXJjbGUiO2Nhc2UiYXJyb3dfY2lyY2xlIjpILmFycm93VHlwZUVuZD0iYXJyb3dfY2lyY2xlIjticmVha31sZXQgWT0iIixydD0iIjtzd2l0Y2goQS5zdHJva2Upe2Nhc2Uibm9ybWFsIjpZPSJmaWxsOm5vbmU7IixFIT09dm9pZCAwJiYoWT1FKSxDIT09dm9pZCAwJiYocnQ9QyksSC50aGlja25lc3M9Im5vcm1hbCIsSC5wYXR0ZXJuPSJzb2xpZCI7YnJlYWs7Y2FzZSJkb3R0ZWQiOkgudGhpY2tuZXNzPSJub3JtYWwiLEgucGF0dGVybj0iZG90dGVkIixILnN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtZGFzaGFycmF5OjM7IjticmVhaztjYXNlInRoaWNrIjpILnRoaWNrbmVzcz0idGhpY2siLEgucGF0dGVybj0ic29saWQiLEguc3R5bGU9InN0cm9rZS13aWR0aDogMy41cHg7ZmlsbDpub25lOyI7YnJlYWt9aWYoQS5zdHlsZSE9PXZvaWQgMCl7Y29uc3QgbXQ9ZW0oQS5zdHlsZSk7WT1tdC5zdHlsZSxydD1tdC5sYWJlbFN0eWxlfUguc3R5bGU9SC5zdHlsZSs9WSxILmxhYmVsU3R5bGU9SC5sYWJlbFN0eWxlKz1ydCxBLmludGVycG9sYXRlIT09dm9pZCAwP0guY3VydmU9WjIoQS5pbnRlcnBvbGF0ZSxpZyk6aS5kZWZhdWx0SW50ZXJwb2xhdGUhPT12b2lkIDA/SC5jdXJ2ZT1aMihpLmRlZmF1bHRJbnRlcnBvbGF0ZSxpZyk6SC5jdXJ2ZT1aMihsVWUuY3VydmUsaWcpLEEudGV4dD09PXZvaWQgMD9BLnN0eWxlIT09dm9pZCAwJiYoSC5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIpOihILmFycm93aGVhZFN0eWxlPSJmaWxsOiAjMzMzIixILmxhYmVscG9zPSJjIiksSC5sYWJlbFR5cGU9QS5sYWJlbFR5cGUsSC5sYWJlbD1BLnRleHQucmVwbGFjZSh1aS5saW5lQnJlYWtSZWdleCxgCmApLEEuc3R5bGU9PT12b2lkIDAmJihILnN0eWxlPUguc3R5bGV8fCJzdHJva2U6ICMzMzM7IHN0cm9rZS13aWR0aDogMS41cHg7ZmlsbDpub25lOyIpLEgubGFiZWxTdHlsZT1ILmxhYmVsU3R5bGUucmVwbGFjZSgiY29sb3I6IiwiZmlsbDoiKSxILmlkPUYsSC5jbGFzc2VzPSJmbG93Y2hhcnQtbGluayAiK2orIiAiK1I7Y29uc3QgSj1BQnQodixIKSx7c291cmNlOml0LHRhcmdldDpmdCxzb3VyY2VJZDpUdCx0YXJnZXRJZDprdH09ZlVlKEEsYik7V3QuZGVidWcoImFiYzc4IHNvdXJjZSBhbmQgdGFyZ2V0IixpdCxmdCksZi5lZGdlcy5wdXNoKHtpZDoiZSIrQS5zdGFydCtBLmVuZCxzb3VyY2VzOltpdF0sdGFyZ2V0czpbZnRdLHNvdXJjZUlkOlR0LHRhcmdldElkOmt0LGxhYmVsRWw6SixsYWJlbHM6W3t3aWR0aDpILndpZHRoLGhlaWdodDpILmhlaWdodCxvcmdXaWR0aDpILndpZHRoLG9yZ0hlaWdodDpILmhlaWdodCx0ZXh0OkgubGFiZWwsbGF5b3V0T3B0aW9uczp7ImVkZ2VMYWJlbHMuaW5saW5lIjoidHJ1ZSIsImVkZ2VMYWJlbHMucGxhY2VtZW50IjoiQ0VOVEVSIn19XSxlZGdlRGF0YTpIfSl9KSxmfSxnVWU9ZnVuY3Rpb24oaSxhLGYscCl7bGV0IHY9IiI7c3dpdGNoKHAmJih2PXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoLHY9di5yZXBsYWNlKC9cKC9nLCJcXCgiKSx2PXYucmVwbGFjZSgvXCkvZywiXFwpIikpLGEuYXJyb3dUeXBlU3RhcnQpe2Nhc2UiYXJyb3dfY3Jvc3MiOmkuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrdisiIyIrZisiLWNyb3NzU3RhcnQpIik7YnJlYWs7Y2FzZSJhcnJvd19wb2ludCI6aS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIit2KyIjIitmKyItcG9pbnRTdGFydCkiKTticmVhaztjYXNlImFycm93X2JhcmIiOmkuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrdisiIyIrZisiLWJhcmJTdGFydCkiKTticmVhaztjYXNlImFycm93X2NpcmNsZSI6aS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIit2KyIjIitmKyItY2lyY2xlU3RhcnQpIik7YnJlYWs7Y2FzZSJhZ2dyZWdhdGlvbiI6aS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIit2KyIjIitmKyItYWdncmVnYXRpb25TdGFydCkiKTticmVhaztjYXNlImV4dGVuc2lvbiI6aS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIit2KyIjIitmKyItZXh0ZW5zaW9uU3RhcnQpIik7YnJlYWs7Y2FzZSJjb21wb3NpdGlvbiI6aS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIit2KyIjIitmKyItY29tcG9zaXRpb25TdGFydCkiKTticmVhaztjYXNlImRlcGVuZGVuY3kiOmkuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrdisiIyIrZisiLWRlcGVuZGVuY3lTdGFydCkiKTticmVhaztjYXNlImxvbGxpcG9wIjppLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK3YrIiMiK2YrIi1sb2xsaXBvcFN0YXJ0KSIpO2JyZWFrfXN3aXRjaChhLmFycm93VHlwZUVuZCl7Y2FzZSJhcnJvd19jcm9zcyI6aS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrdisiIyIrZisiLWNyb3NzRW5kKSIpO2JyZWFrO2Nhc2UiYXJyb3dfcG9pbnQiOmkuYXR0cigibWFya2VyLWVuZCIsInVybCgiK3YrIiMiK2YrIi1wb2ludEVuZCkiKTticmVhaztjYXNlImFycm93X2JhcmIiOmkuYXR0cigibWFya2VyLWVuZCIsInVybCgiK3YrIiMiK2YrIi1iYXJiRW5kKSIpO2JyZWFrO2Nhc2UiYXJyb3dfY2lyY2xlIjppLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIit2KyIjIitmKyItY2lyY2xlRW5kKSIpO2JyZWFrO2Nhc2UiYWdncmVnYXRpb24iOmkuYXR0cigibWFya2VyLWVuZCIsInVybCgiK3YrIiMiK2YrIi1hZ2dyZWdhdGlvbkVuZCkiKTticmVhaztjYXNlImV4dGVuc2lvbiI6aS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrdisiIyIrZisiLWV4dGVuc2lvbkVuZCkiKTticmVhaztjYXNlImNvbXBvc2l0aW9uIjppLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIit2KyIjIitmKyItY29tcG9zaXRpb25FbmQpIik7YnJlYWs7Y2FzZSJkZXBlbmRlbmN5IjppLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIit2KyIjIitmKyItZGVwZW5kZW5jeUVuZCkiKTticmVhaztjYXNlImxvbGxpcG9wIjppLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIit2KyIjIitmKyItbG9sbGlwb3BFbmQpIik7YnJlYWt9fSxwVWU9ZnVuY3Rpb24oaSxhKXtyZXR1cm4gV3QuaW5mbygiRXh0cmFjdGluZyBjbGFzc2VzIiksYS5kYi5nZXRDbGFzc2VzKCl9LGJVZT1mdW5jdGlvbihpKXtjb25zdCBhPXtwYXJlbnRCeUlkOnt9LGNoaWxkcmVuQnlJZDp7fX0sZj1pLmdldFN1YkdyYXBocygpO3JldHVybiBXdC5pbmZvKCJTdWJncmFwaHMgLSAiLGYpLGYuZm9yRWFjaChmdW5jdGlvbihwKXtwLm5vZGVzLmZvckVhY2goZnVuY3Rpb24odil7YS5wYXJlbnRCeUlkW3ZdPXAuaWQsYS5jaGlsZHJlbkJ5SWRbcC5pZF09PT12b2lkIDAmJihhLmNoaWxkcmVuQnlJZFtwLmlkXT1bXSksYS5jaGlsZHJlbkJ5SWRbcC5pZF0ucHVzaCh2KX0pfSksZi5mb3JFYWNoKGZ1bmN0aW9uKHApe3AuaWQsYS5wYXJlbnRCeUlkW3AuaWRdIT09dm9pZCAwJiZhLnBhcmVudEJ5SWRbcC5pZF19KSxhfSx2VWU9ZnVuY3Rpb24oaSxhLGYpe2NvbnN0IHA9b1VlKGksYSxmKTtpZihwPT09dm9pZCAwfHxwPT09InJvb3QiKXJldHVybnt4OjAseTowfTtjb25zdCB2PUI1W3BdLm9mZnNldDtyZXR1cm57eDp2LnBvc1gseTp2LnBvc1l9fSx3VWU9ZnVuY3Rpb24oaSxhLGYscCx2KXtjb25zdCBtPXZVZShhLnNvdXJjZUlkLGEudGFyZ2V0SWQsdiksYj1hLnNlY3Rpb25zWzBdLnN0YXJ0UG9pbnQsRT1hLnNlY3Rpb25zWzBdLmVuZFBvaW50LEE9KGEuc2VjdGlvbnNbMF0uYmVuZFBvaW50cz9hLnNlY3Rpb25zWzBdLmJlbmRQb2ludHM6W10pLm1hcChydD0+W3J0LngrbS54LHJ0LnkrbS55XSksUD1bW2IueCttLngsYi55K20ueV0sLi4uQSxbRS54K20ueCxFLnkrbS55XV0sRj1ZRSgpLmN1cnZlKGlnKSxqPWkuaW5zZXJ0KCJwYXRoIikuYXR0cigiZCIsRihQKSkuYXR0cigiY2xhc3MiLCJwYXRoICIrZi5jbGFzc2VzKS5hdHRyKCJmaWxsIiwibm9uZSIpLFI9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VMYWJlbCIpLEg9eHIoUi5ub2RlKCkuYXBwZW5kQ2hpbGQoYS5sYWJlbEVsKSksWT1ILm5vZGUoKS5maXJzdENoaWxkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO0guYXR0cigid2lkdGgiLFkud2lkdGgpLEguYXR0cigiaGVpZ2h0IixZLmhlaWdodCksUi5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHthLmxhYmVsc1swXS54K20ueH0sICR7YS5sYWJlbHNbMF0ueSttLnl9KWApLGdVZShqLGYscC50eXBlLHAuYXJyb3dNYXJrZXJBYnNvbHV0ZSl9LEVqdD0oaSxhKT0+e2kuZm9yRWFjaChmPT57Zi5jaGlsZHJlbnx8KGYuY2hpbGRyZW49W10pO2NvbnN0IHA9YS5jaGlsZHJlbkJ5SWRbZi5pZF07cCYmcC5mb3JFYWNoKHY9PntmLmNoaWxkcmVuLnB1c2goQjVbdl0pfSksRWp0KGYuY2hpbGRyZW4sYSl9KX0sbVVlPWFzeW5jIGZ1bmN0aW9uKGksYSxmLHApe3ZhciBjdDtCNT17fSxzdj17fTtjb25zdCB2PXhyKCJib2R5IikuYXBwZW5kKCJkaXYiKS5hdHRyKCJzdHlsZSIsImhlaWdodDo0MDBweCIpLmF0dHIoImlkIiwiY3kiKTtsZXQgbT17aWQ6InJvb3QiLGxheW91dE9wdGlvbnM6eyJlbGsuaGllcmFyY2h5SGFuZGxpbmciOiJJTkNMVURFX0NISUxEUkVOIiwib3JnLmVjbGlwc2UuZWxrLnBhZGRpbmciOiJbdG9wPTEwMCwgbGVmdD0xMDAsIGJvdHRvbT0xMTAsIHJpZ2h0PTExMF0iLCJlbGsubGF5ZXJlZC5zcGFjaW5nLmVkZ2VOb2RlQmV0d2VlbkxheWVycyI6IjMwIiwiZWxrLmRpcmVjdGlvbiI6IkRPV04ifSxjaGlsZHJlbjpbXSxlZGdlczpbXX07c3dpdGNoKFd0LmluZm8oIkRyYXdpbmcgZmxvd2NoYXJ0IHVzaW5nIHYzIHJlbmRlcmVyIix5anQpLHAuZGIuZ2V0RGlyZWN0aW9uKCkpe2Nhc2UiQlQiOm0ubGF5b3V0T3B0aW9uc1siZWxrLmRpcmVjdGlvbiJdPSJVUCI7YnJlYWs7Y2FzZSJUQiI6bS5sYXlvdXRPcHRpb25zWyJlbGsuZGlyZWN0aW9uIl09IkRPV04iO2JyZWFrO2Nhc2UiTFIiOm0ubGF5b3V0T3B0aW9uc1siZWxrLmRpcmVjdGlvbiJdPSJSSUdIVCI7YnJlYWs7Y2FzZSJSTCI6bS5sYXlvdXRPcHRpb25zWyJlbGsuZGlyZWN0aW9uIl09IkxFRlQiO2JyZWFrfWNvbnN0e3NlY3VyaXR5TGV2ZWw6RSxmbG93Y2hhcnQ6Q309RGUoKTtsZXQgQTtFPT09InNhbmRib3giJiYoQT14cigiI2kiK2EpKTtjb25zdCBQPXhyKEU9PT0ic2FuZGJveCI/QS5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5IiksRj1FPT09InNhbmRib3giP0Eubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQsaj1QLnNlbGVjdChgW2lkPSIke2F9Il1gKTtERnQoaixbInBvaW50IiwiY2lyY2xlIiwiY3Jvc3MiXSxwLnR5cGUscC5hcnJvd01hcmtlckFic29sdXRlKTtjb25zdCBIPXAuZGIuZ2V0VmVydGljZXMoKTtsZXQgWTtjb25zdCBydD1wLmRiLmdldFN1YkdyYXBocygpO1d0LmluZm8oIlN1YmdyYXBocyAtICIscnQpO2ZvcihsZXQgeXQ9cnQubGVuZ3RoLTE7eXQ+PTA7eXQtLSlZPXJ0W3l0XSxwLmRiLmFkZFZlcnRleChZLmlkLHt0ZXh0OlkudGl0bGUsdHlwZTpZLmxhYmVsVHlwZX0sImdyb3VwIix2b2lkIDAsWS5jbGFzc2VzLFkuZGlyKTtjb25zdCBKPWouaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJzdWJncmFwaHMiKSxpdD1iVWUocC5kYik7bT1hd2FpdCBoVWUoSCxhLFAsRixwLGl0LG0pO2NvbnN0IGZ0PWouaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlcyBlZGdlUGF0aCIpLFR0PXAuZGIuZ2V0RWRnZXMoKTttPWRVZShUdCxwLG0saiksT2JqZWN0LmtleXMoQjUpLmZvckVhY2goeXQ9Pntjb25zdCBzdD1CNVt5dF07c3QucGFyZW50fHxtLmNoaWxkcmVuLnB1c2goc3QpLGl0LmNoaWxkcmVuQnlJZFt5dF0hPT12b2lkIDAmJihzdC5sYWJlbHM9W3t0ZXh0OnN0LmxhYmVsVGV4dCxsYXlvdXRPcHRpb25zOnsibm9kZUxhYmVscy5wbGFjZW1lbnQiOiJbSF9DRU5URVIsIFZfVE9QLCBJTlNJREVdIn0sd2lkdGg6c3QubGFiZWxEYXRhLndpZHRoLGhlaWdodDpzdC5sYWJlbERhdGEuaGVpZ2h0fV0sZGVsZXRlIHN0LngsZGVsZXRlIHN0LnksZGVsZXRlIHN0LndpZHRoLGRlbGV0ZSBzdC5oZWlnaHQpfSksRWp0KG0uY2hpbGRyZW4saXQpLFd0LmluZm8oImFmdGVyIGxheW91dCIsSlNPTi5zdHJpbmdpZnkobSxudWxsLDIpKTtjb25zdCBtdD1hd2FpdCB5anQubGF5b3V0KG0pO1RqdCgwLDAsbXQuY2hpbGRyZW4saixKLHAsMCksV3QuaW5mbygiYWZ0ZXIgbGF5b3V0IixtdCksKGN0PW10LmVkZ2VzKT09bnVsbHx8Y3QubWFwKHl0PT57d1VlKGZ0LHl0LHl0LmVkZ2VEYXRhLHAsaXQpfSksczkoe30saixDLmRpYWdyYW1QYWRkaW5nLEMudXNlTWF4V2lkdGgpLHYucmVtb3ZlKCl9LFRqdD0oaSxhLGYscCx2LG0sYik9PntmLmZvckVhY2goZnVuY3Rpb24oRSl7aWYoRSlpZihCNVtFLmlkXS5vZmZzZXQ9e3Bvc1g6RS54K2kscG9zWTpFLnkrYSx4OmkseTphLGRlcHRoOmIsd2lkdGg6RS53aWR0aCxoZWlnaHQ6RS5oZWlnaHR9LEUudHlwZT09PSJncm91cCIpe2NvbnN0IEM9di5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsInN1YmdyYXBoIik7Qy5pbnNlcnQoInJlY3QiKS5hdHRyKCJjbGFzcyIsInN1YmdyYXBoIHN1YmdyYXBoLWx2bC0iK2IlNSsiIG5vZGUiKS5hdHRyKCJ4IixFLngraSkuYXR0cigieSIsRS55K2EpLmF0dHIoIndpZHRoIixFLndpZHRoKS5hdHRyKCJoZWlnaHQiLEUuaGVpZ2h0KTtjb25zdCBBPUMuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLFA9RGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscz9FLmxhYmVsRGF0YS53aWR0aC8yOjA7QS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtFLmxhYmVsc1swXS54K2krRS54K1B9LCAke0UubGFiZWxzWzBdLnkrYStFLnkrM30pYCksQS5ub2RlKCkuYXBwZW5kQ2hpbGQoRS5sYWJlbERhdGEubGFiZWxOb2RlKSxXdC5pbmZvKCJJZCAoVUdIKT0gIixFLnR5cGUsRS5sYWJlbHMpfWVsc2UgV3QuaW5mbygiSWQgKFVHSCk9ICIsRS5pZCksRS5lbC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtFLngraStFLndpZHRoLzJ9LCAke0UueSthK0UuaGVpZ2h0LzJ9KWApfSksZi5mb3JFYWNoKGZ1bmN0aW9uKEUpe0UmJkUudHlwZT09PSJncm91cCImJlRqdChpK0UueCxhK0UueSxFLmNoaWxkcmVuLHAsdixtLGIrMSl9KX0seVVlPXtnZXRDbGFzc2VzOnBVZSxkcmF3Om1VZX0seFVlPWk9PntsZXQgYT0iIjtmb3IobGV0IGY9MDtmPDU7ZisrKWErPWAKICAgICAgLnN1YmdyYXBoLWx2bC0ke2Z9IHsKICAgICAgICBmaWxsOiAke2lbYHN1cmZhY2Uke2Z9YF19OwogICAgICAgIHN0cm9rZTogJHtpW2BzdXJmYWNlUGVlciR7Zn1gXX07CiAgICAgIH0KICAgIGA7cmV0dXJuIGF9LGtVZT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7ZGI6RERlLHJlbmRlcmVyOnlVZSxwYXJzZXI6RmR0LHN0eWxlczppPT5gLmxhYmVsIHsKICAgIGZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX07CiAgICBjb2xvcjogJHtpLm5vZGVUZXh0Q29sb3J8fGkudGV4dENvbG9yfTsKICB9CiAgLmNsdXN0ZXItbGFiZWwgdGV4dCB7CiAgICBmaWxsOiAke2kudGl0bGVDb2xvcn07CiAgfQogIC5jbHVzdGVyLWxhYmVsIHNwYW4gewogICAgY29sb3I6ICR7aS50aXRsZUNvbG9yfTsKICB9CgogIC5sYWJlbCB0ZXh0LHNwYW4gewogICAgZmlsbDogJHtpLm5vZGVUZXh0Q29sb3J8fGkudGV4dENvbG9yfTsKICAgIGNvbG9yOiAke2kubm9kZVRleHRDb2xvcnx8aS50ZXh0Q29sb3J9OwogIH0KCiAgLm5vZGUgcmVjdCwKICAubm9kZSBjaXJjbGUsCiAgLm5vZGUgZWxsaXBzZSwKICAubm9kZSBwb2x5Z29uLAogIC5ub2RlIHBhdGggewogICAgZmlsbDogJHtpLm1haW5Ca2d9OwogICAgc3Ryb2tlOiAke2kubm9kZUJvcmRlcn07CiAgICBzdHJva2Utd2lkdGg6IDFweDsKICB9CgogIC5ub2RlIC5sYWJlbCB7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgfQogIC5ub2RlLmNsaWNrYWJsZSB7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgfQoKICAuYXJyb3doZWFkUGF0aCB7CiAgICBmaWxsOiAke2kuYXJyb3doZWFkQ29sb3J9OwogIH0KCiAgLmVkZ2VQYXRoIC5wYXRoIHsKICAgIHN0cm9rZTogJHtpLmxpbmVDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDIuMHB4OwogIH0KCiAgLmZsb3djaGFydC1saW5rIHsKICAgIHN0cm9rZTogJHtpLmxpbmVDb2xvcn07CiAgICBmaWxsOiBub25lOwogIH0KCiAgLmVkZ2VMYWJlbCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2kuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICByZWN0IHsKICAgICAgb3BhY2l0eTogMC44NTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtpLmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgICBmaWxsOiAke2kuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICB9CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgfQoKICAuY2x1c3RlciByZWN0IHsKICAgIGZpbGw6ICR7aS5jbHVzdGVyQmtnfTsKICAgIHN0cm9rZTogJHtpLmNsdXN0ZXJCb3JkZXJ9OwogICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgfQoKICAuY2x1c3RlciB0ZXh0IHsKICAgIGZpbGw6ICR7aS50aXRsZUNvbG9yfTsKICB9CgogIC5jbHVzdGVyIHNwYW4gewogICAgY29sb3I6ICR7aS50aXRsZUNvbG9yfTsKICB9CiAgLyogLmNsdXN0ZXIgZGl2IHsKICAgIGNvbG9yOiAke2kudGl0bGVDb2xvcn07CiAgfSAqLwoKICBkaXYubWVybWFpZFRvb2x0aXAgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgbWF4LXdpZHRoOiAyMDBweDsKICAgIHBhZGRpbmc6IDJweDsKICAgIGZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX07CiAgICBmb250LXNpemU6IDEycHg7CiAgICBiYWNrZ3JvdW5kOiAke2kudGVydGlhcnlDb2xvcn07CiAgICBib3JkZXI6IDFweCBzb2xpZCAke2kuYm9yZGVyMn07CiAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDEwMDsKICB9CgogIC5mbG93Y2hhcnRUaXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZpbGw6ICR7aS50ZXh0Q29sb3J9OwogIH0KICAuc3ViZ3JhcGggewogICAgc3Ryb2tlLXdpZHRoOjI7CiAgICByeDozOwogIH0KICAvLyAuc3ViZ3JhcGgtbHZsLTEgewogIC8vICAgZmlsbDojY2NjOwogIC8vICAgLy8gc3Ryb2tlOmJsYWNrOwogIC8vIH0KCiAgLmZsb3djaGFydC1sYWJlbCB0ZXh0IHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgfQoKICAke3hVZShpKX0KYH19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIEZndD1mdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKHJ0LEosaXQsZnQpe2ZvcihpdD1pdHx8e30sZnQ9cnQubGVuZ3RoO2Z0LS07aXRbcnRbZnRdXT1KKTtyZXR1cm4gaXR9LGE9WzEsMl0sZj1bMSw1XSxwPVs2LDksMTEsMTcsMTgsMjAsMjIsMjMsMjYsMjcsMjhdLHY9WzEsMTVdLG09WzEsMTZdLGI9WzEsMTddLEU9WzEsMThdLEM9WzEsMTldLEE9WzEsMjNdLFA9WzEsMjRdLEY9WzEsMjddLGo9WzQsNiw5LDExLDE3LDE4LDIwLDIyLDIzLDI2LDI3LDI4XSxSPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6Myx0aW1lbGluZTo0LGRvY3VtZW50OjUsRU9GOjYsZGlyZWN0aXZlOjcsbGluZTo4LFNQQUNFOjksc3RhdGVtZW50OjEwLE5FV0xJTkU6MTEsb3BlbkRpcmVjdGl2ZToxMix0eXBlRGlyZWN0aXZlOjEzLGNsb3NlRGlyZWN0aXZlOjE0LCI6IjoxNSxhcmdEaXJlY3RpdmU6MTYsdGl0bGU6MTcsYWNjX3RpdGxlOjE4LGFjY190aXRsZV92YWx1ZToxOSxhY2NfZGVzY3I6MjAsYWNjX2Rlc2NyX3ZhbHVlOjIxLGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MjIsc2VjdGlvbjoyMyxwZXJpb2Rfc3RhdGVtZW50OjI0LGV2ZW50X3N0YXRlbWVudDoyNSxwZXJpb2Q6MjYsZXZlbnQ6Mjcsb3Blbl9kaXJlY3RpdmU6MjgsdHlwZV9kaXJlY3RpdmU6MjksYXJnX2RpcmVjdGl2ZTozMCxjbG9zZV9kaXJlY3RpdmU6MzEsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6InRpbWVsaW5lIiw2OiJFT0YiLDk6IlNQQUNFIiwxMToiTkVXTElORSIsMTU6IjoiLDE3OiJ0aXRsZSIsMTg6ImFjY190aXRsZSIsMTk6ImFjY190aXRsZV92YWx1ZSIsMjA6ImFjY19kZXNjciIsMjE6ImFjY19kZXNjcl92YWx1ZSIsMjI6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDIzOiJzZWN0aW9uIiwyNjoicGVyaW9kIiwyNzoiZXZlbnQiLDI4OiJvcGVuX2RpcmVjdGl2ZSIsMjk6InR5cGVfZGlyZWN0aXZlIiwzMDoiYXJnX2RpcmVjdGl2ZSIsMzE6ImNsb3NlX2RpcmVjdGl2ZSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywzXSxbMywyXSxbNSwwXSxbNSwyXSxbOCwyXSxbOCwxXSxbOCwxXSxbOCwxXSxbNyw0XSxbNyw2XSxbMTAsMV0sWzEwLDJdLFsxMCwyXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsyNCwxXSxbMjUsMV0sWzEyLDFdLFsxMywxXSxbMTYsMV0sWzE0LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKEosaXQsZnQsVHQsa3QsbXQsY3Qpe3ZhciB5dD1tdC5sZW5ndGgtMTtzd2l0Y2goa3Qpe2Nhc2UgMTpyZXR1cm4gbXRbeXQtMV07Y2FzZSAzOnRoaXMuJD1bXTticmVhaztjYXNlIDQ6bXRbeXQtMV0ucHVzaChtdFt5dF0pLHRoaXMuJD1tdFt5dC0xXTticmVhaztjYXNlIDU6Y2FzZSA2OnRoaXMuJD1tdFt5dF07YnJlYWs7Y2FzZSA3OmNhc2UgODp0aGlzLiQ9W107YnJlYWs7Y2FzZSAxMTpUdC5nZXRDb21tb25EYigpLnNldERpYWdyYW1UaXRsZShtdFt5dF0uc3Vic3RyKDYpKSx0aGlzLiQ9bXRbeXRdLnN1YnN0cig2KTticmVhaztjYXNlIDEyOnRoaXMuJD1tdFt5dF0udHJpbSgpLFR0LmdldENvbW1vbkRiKCkuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDEzOmNhc2UgMTQ6dGhpcy4kPW10W3l0XS50cmltKCksVHQuZ2V0Q29tbW9uRGIoKS5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgMTU6VHQuYWRkU2VjdGlvbihtdFt5dF0uc3Vic3RyKDgpKSx0aGlzLiQ9bXRbeXRdLnN1YnN0cig4KTticmVhaztjYXNlIDE5OlR0LmFkZFRhc2sobXRbeXRdLDAsIiIpLHRoaXMuJD1tdFt5dF07YnJlYWs7Y2FzZSAyMDpUdC5hZGRFdmVudChtdFt5dF0uc3Vic3RyKDIpKSx0aGlzLiQ9bXRbeXRdO2JyZWFrO2Nhc2UgMjE6VHQucGFyc2VEaXJlY3RpdmUoIiUleyIsIm9wZW5fZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAyMjpUdC5wYXJzZURpcmVjdGl2ZShtdFt5dF0sInR5cGVfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAyMzptdFt5dF09bXRbeXRdLnRyaW0oKS5yZXBsYWNlKC8nL2csJyInKSxUdC5wYXJzZURpcmVjdGl2ZShtdFt5dF0sImFyZ19kaXJlY3RpdmUiKTticmVhaztjYXNlIDI0OlR0LnBhcnNlRGlyZWN0aXZlKCJ9JSUiLCJjbG9zZV9kaXJlY3RpdmUiLCJ0aW1lbGluZSIpO2JyZWFrfX0sdGFibGU6W3szOjEsNDphLDc6MywxMjo0LDI4OmZ9LHsxOlszXX0saShwLFsyLDNdLHs1OjZ9KSx7Mzo3LDQ6YSw3OjMsMTI6NCwyODpmfSx7MTM6OCwyOTpbMSw5XX0sezI5OlsyLDIxXX0sezY6WzEsMTBdLDc6MjIsODoxMSw5OlsxLDEyXSwxMDoxMywxMTpbMSwxNF0sMTI6NCwxNzp2LDE4Om0sMjA6YiwyMjpFLDIzOkMsMjQ6MjAsMjU6MjEsMjY6QSwyNzpQLDI4OmZ9LHsxOlsyLDJdfSx7MTQ6MjUsMTU6WzEsMjZdLDMxOkZ9LGkoWzE1LDMxXSxbMiwyMl0pLGkocCxbMiw4XSx7MTpbMiwxXX0pLGkocCxbMiw0XSksezc6MjIsMTA6MjgsMTI6NCwxNzp2LDE4Om0sMjA6YiwyMjpFLDIzOkMsMjQ6MjAsMjU6MjEsMjY6QSwyNzpQLDI4OmZ9LGkocCxbMiw2XSksaShwLFsyLDddKSxpKHAsWzIsMTFdKSx7MTk6WzEsMjldfSx7MjE6WzEsMzBdfSxpKHAsWzIsMTRdKSxpKHAsWzIsMTVdKSxpKHAsWzIsMTZdKSxpKHAsWzIsMTddKSxpKHAsWzIsMThdKSxpKHAsWzIsMTldKSxpKHAsWzIsMjBdKSx7MTE6WzEsMzFdfSx7MTY6MzIsMzA6WzEsMzNdfSx7MTE6WzIsMjRdfSxpKHAsWzIsNV0pLGkocCxbMiwxMl0pLGkocCxbMiwxM10pLGkoaixbMiw5XSksezE0OjM0LDMxOkZ9LHszMTpbMiwyM119LHsxMTpbMSwzNV19LGkoaixbMiwxMF0pXSxkZWZhdWx0QWN0aW9uczp7NTpbMiwyMV0sNzpbMiwyXSwyNzpbMiwyNF0sMzM6WzIsMjNdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKEosaXQpe2lmKGl0LnJlY292ZXJhYmxlKXRoaXMudHJhY2UoSik7ZWxzZXt2YXIgZnQ9bmV3IEVycm9yKEopO3Rocm93IGZ0Lmhhc2g9aXQsZnR9fSxwYXJzZTpmdW5jdGlvbihKKXt2YXIgaXQ9dGhpcyxmdD1bMF0sVHQ9W10sa3Q9W251bGxdLG10PVtdLGN0PXRoaXMudGFibGUseXQ9IiIsc3Q9MCx4dD0wLGh0PTIsZHQ9MSxDdD1tdC5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSx0dD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLFB0PXt5eTp7fX07Zm9yKHZhciBwdCBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LHB0KSYmKFB0Lnl5W3B0XT10aGlzLnl5W3B0XSk7dHQuc2V0SW5wdXQoSixQdC55eSksUHQueXkubGV4ZXI9dHQsUHQueXkucGFyc2VyPXRoaXMsdHlwZW9mIHR0Lnl5bGxvYz4idSImJih0dC55eWxsb2M9e30pO3ZhciBGdD10dC55eWxsb2M7bXQucHVzaChGdCk7dmFyIFg9dHQub3B0aW9ucyYmdHQub3B0aW9ucy5yYW5nZXM7dHlwZW9mIFB0Lnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPVB0Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIFJ0KCl7dmFyIGtlO3JldHVybiBrZT1UdC5wb3AoKXx8dHQubGV4KCl8fGR0LHR5cGVvZiBrZSE9Im51bWJlciImJihrZSBpbnN0YW5jZW9mIEFycmF5JiYoVHQ9a2Usa2U9VHQucG9wKCkpLGtlPWl0LnN5bWJvbHNfW2tlXXx8a2UpLGtlfWZvcih2YXIgQnQsdnQsT3QsVnQscWU9e30sX24sVGUsV24sQWU7Oyl7aWYodnQ9ZnRbZnQubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbdnRdP090PXRoaXMuZGVmYXVsdEFjdGlvbnNbdnRdOigoQnQ9PT1udWxsfHx0eXBlb2YgQnQ+InUiKSYmKEJ0PVJ0KCkpLE90PWN0W3Z0XSYmY3RbdnRdW0J0XSksdHlwZW9mIE90PiJ1Inx8IU90Lmxlbmd0aHx8IU90WzBdKXt2YXIgbmU9IiI7QWU9W107Zm9yKF9uIGluIGN0W3Z0XSl0aGlzLnRlcm1pbmFsc19bX25dJiZfbj5odCYmQWUucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW19uXSsiJyIpO3R0LnNob3dQb3NpdGlvbj9uZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhzdCsxKStgOgpgK3R0LnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArQWUuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tCdF18fEJ0KSsiJyI6bmU9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoc3QrMSkrIjogVW5leHBlY3RlZCAiKyhCdD09ZHQ/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bQnRdfHxCdCkrIiciKSx0aGlzLnBhcnNlRXJyb3IobmUse3RleHQ6dHQubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW0J0XXx8QnQsbGluZTp0dC55eWxpbmVubyxsb2M6RnQsZXhwZWN0ZWQ6QWV9KX1pZihPdFswXWluc3RhbmNlb2YgQXJyYXkmJk90Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrdnQrIiwgdG9rZW46ICIrQnQpO3N3aXRjaChPdFswXSl7Y2FzZSAxOmZ0LnB1c2goQnQpLGt0LnB1c2godHQueXl0ZXh0KSxtdC5wdXNoKHR0Lnl5bGxvYyksZnQucHVzaChPdFsxXSksQnQ9bnVsbCx4dD10dC55eWxlbmcseXQ9dHQueXl0ZXh0LHN0PXR0Lnl5bGluZW5vLEZ0PXR0Lnl5bGxvYzticmVhaztjYXNlIDI6aWYoVGU9dGhpcy5wcm9kdWN0aW9uc19bT3RbMV1dWzFdLHFlLiQ9a3Rba3QubGVuZ3RoLVRlXSxxZS5fJD17Zmlyc3RfbGluZTptdFttdC5sZW5ndGgtKFRlfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6bXRbbXQubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46bXRbbXQubGVuZ3RoLShUZXx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjptdFttdC5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LFgmJihxZS5fJC5yYW5nZT1bbXRbbXQubGVuZ3RoLShUZXx8MSldLnJhbmdlWzBdLG10W210Lmxlbmd0aC0xXS5yYW5nZVsxXV0pLFZ0PXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShxZSxbeXQseHQsc3QsUHQueXksT3RbMV0sa3QsbXRdLmNvbmNhdChDdCkpLHR5cGVvZiBWdDwidSIpcmV0dXJuIFZ0O1RlJiYoZnQ9ZnQuc2xpY2UoMCwtMSpUZSoyKSxrdD1rdC5zbGljZSgwLC0xKlRlKSxtdD1tdC5zbGljZSgwLC0xKlRlKSksZnQucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tPdFsxXV1bMF0pLGt0LnB1c2gocWUuJCksbXQucHVzaChxZS5fJCksV249Y3RbZnRbZnQubGVuZ3RoLTJdXVtmdFtmdC5sZW5ndGgtMV1dLGZ0LnB1c2goV24pO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxIPWZ1bmN0aW9uKCl7dmFyIHJ0PXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKGl0LGZ0KXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKGl0LGZ0KTtlbHNlIHRocm93IG5ldyBFcnJvcihpdCl9LHNldElucHV0OmZ1bmN0aW9uKEosaXQpe3JldHVybiB0aGlzLnl5PWl0fHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1KLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBKPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1KLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1KLHRoaXMubWF0Y2hlZCs9Sjt2YXIgaXQ9Si5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIGl0Pyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxKfSx1bnB1dDpmdW5jdGlvbihKKXt2YXIgaXQ9Si5sZW5ndGgsZnQ9Si5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PUordGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWl0KSx0aGlzLm9mZnNldC09aXQ7dmFyIFR0PXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLGZ0Lmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09ZnQubGVuZ3RoLTEpO3ZhciBrdD10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46ZnQ/KGZ0Lmxlbmd0aD09PVR0Lmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrVHRbVHQubGVuZ3RoLWZ0Lmxlbmd0aF0ubGVuZ3RoLWZ0WzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4taXR9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1ba3RbMF0sa3RbMF0rdGhpcy55eWxlbmctaXRdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihKKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoSikpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgSj10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKEoubGVuZ3RoPjIwPyIuLi4iOiIiKStKLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIEo9dGhpcy5tYXRjaDtyZXR1cm4gSi5sZW5ndGg8MjAmJihKKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1KLmxlbmd0aCkpLChKLnN1YnN0cigwLDIwKSsoSi5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIEo9dGhpcy5wYXN0SW5wdXQoKSxpdD1uZXcgQXJyYXkoSi5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBKK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtpdCsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oSixpdCl7dmFyIGZ0LFR0LGt0O2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihrdD17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihrdC55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxUdD1KWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxUdCYmKHRoaXMueXlsaW5lbm8rPVR0Lmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOlR0P1R0W1R0Lmxlbmd0aC0xXS5sZW5ndGgtVHRbVHQubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rSlswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1KWzBdLHRoaXMubWF0Y2grPUpbMF0sdGhpcy5tYXRjaGVzPUosdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoSlswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9SlswXSxmdD10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxpdCx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxmdClyZXR1cm4gZnQ7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIG10IGluIGt0KXRoaXNbbXRdPWt0W210XTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBKLGl0LGZ0LFR0O3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGt0PXRoaXMuX2N1cnJlbnRSdWxlcygpLG10PTA7bXQ8a3QubGVuZ3RoO210KyspaWYoZnQ9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1trdFttdF1dKSxmdCYmKCFpdHx8ZnRbMF0ubGVuZ3RoPml0WzBdLmxlbmd0aCkpe2lmKGl0PWZ0LFR0PW10LHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKEo9dGhpcy50ZXN0X21hdGNoKGZ0LGt0W210XSksSiE9PSExKXJldHVybiBKO2lmKHRoaXMuX2JhY2t0cmFjayl7aXQ9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gaXQ/KEo9dGhpcy50ZXN0X21hdGNoKGl0LGt0W1R0XSksSiE9PSExP0o6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciBpdD10aGlzLm5leHQoKTtyZXR1cm4gaXR8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKGl0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goaXQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3ZhciBpdD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBpdD4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKGl0KXtyZXR1cm4gaXQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhpdHx8MCksaXQ+PTA/dGhpcy5jb25kaXRpb25TdGFja1tpdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24oaXQpe3RoaXMuYmVnaW4oaXQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKGl0LGZ0LFR0LGt0KXtzd2l0Y2goVHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigib3Blbl9kaXJlY3RpdmUiKSwyODtjYXNlIDE6cmV0dXJuIHRoaXMuYmVnaW4oInR5cGVfZGlyZWN0aXZlIiksMjk7Y2FzZSAyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiYXJnX2RpcmVjdGl2ZSIpLDE1O2Nhc2UgMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSwzMTtjYXNlIDQ6cmV0dXJuIDMwO2Nhc2UgNTpicmVhaztjYXNlIDY6YnJlYWs7Y2FzZSA3OnJldHVybiAxMTtjYXNlIDg6YnJlYWs7Y2FzZSA5OmJyZWFrO2Nhc2UgMTA6cmV0dXJuIDQ7Y2FzZSAxMTpyZXR1cm4gMTc7Y2FzZSAxMjpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMTg7Y2FzZSAxMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2Nhc2UgMTQ6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDIwO2Nhc2UgMTU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDE2OnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDE3OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE4OnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDE5OnJldHVybiAyMztjYXNlIDIwOnJldHVybiAyNztjYXNlIDIxOnJldHVybiAyNjtjYXNlIDIyOnJldHVybiA2O2Nhc2UgMjM6cmV0dXJuIklOVkFMSUQifX0scnVsZXM6Wy9eKD86JSVceykvaSwvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS9pLC9eKD86OikvaSwvXig/Olx9JSUpL2ksL14oPzooKD86KD8hXH0lJSkufFxuKSopKS9pLC9eKD86JSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbXG5dKykvaSwvXig/OlxzKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzp0aW1lbGluZVxiKS9pLC9eKD86dGl0bGVcc1teI1xuO10rKS9pLC9eKD86YWNjVGl0bGVccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccypce1xzKikvaSwvXig/OltcfV0pL2ksL14oPzpbXlx9XSopL2ksL14oPzpzZWN0aW9uXHNbXiM6XG47XSspL2ksL14oPzo6XHNbXiM6XG47XSspL2ksL14oPzpbXiM6XG47XSspL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7b3Blbl9kaXJlY3RpdmU6e3J1bGVzOlsxXSxpbmNsdXNpdmU6ITF9LHR5cGVfZGlyZWN0aXZlOntydWxlczpbMiwzXSxpbmNsdXNpdmU6ITF9LGFyZ19kaXJlY3RpdmU6e3J1bGVzOlszLDRdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzE3LDE4XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzE1XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzEzXSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDUsNiw3LDgsOSwxMCwxMSwxMiwxNCwxNiwxOSwyMCwyMSwyMiwyM10saW5jbHVzaXZlOiEwfX19O3JldHVybiBydH0oKTtSLmxleGVyPUg7ZnVuY3Rpb24gWSgpe3RoaXMueXk9e319cmV0dXJuIFkucHJvdG90eXBlPVIsUi5QYXJzZXI9WSxuZXcgWX0oKTtGZ3QucGFyc2VyPUZndDtjb25zdCBFVWU9Rmd0O2xldCBiTD0iIixfanQ9MDtjb25zdCBCZ3Q9W10sVUs9W10sdkw9W10sQ2p0PSgpPT5DT3QsU2p0PShpLGEsZik9PntGVyhnbG9iYWxUaGlzLGksYSxmKX0sQWp0PWZ1bmN0aW9uKCl7Qmd0Lmxlbmd0aD0wLFVLLmxlbmd0aD0wLGJMPSIiLHZMLmxlbmd0aD0wLGNnKCl9LExqdD1mdW5jdGlvbihpKXtiTD1pLEJndC5wdXNoKGkpfSxNanQ9ZnVuY3Rpb24oKXtyZXR1cm4gQmd0fSxEanQ9ZnVuY3Rpb24oKXtsZXQgaT1QanQoKTtjb25zdCBhPTEwMDtsZXQgZj0wO2Zvcig7IWkmJmY8YTspaT1QanQoKSxmKys7cmV0dXJuIFVLLnB1c2goLi4udkwpLFVLfSxJanQ9ZnVuY3Rpb24oaSxhLGYpe2NvbnN0IHA9e2lkOl9qdCsrLHNlY3Rpb246YkwsdHlwZTpiTCx0YXNrOmksc2NvcmU6YXx8MCxldmVudHM6Zj9bZl06W119O3ZMLnB1c2gocCl9LE9qdD1mdW5jdGlvbihpKXt2TC5maW5kKGY9PmYuaWQ9PT1fanQtMSkuZXZlbnRzLnB1c2goaSl9LE5qdD1mdW5jdGlvbihpKXtjb25zdCBhPXtzZWN0aW9uOmJMLHR5cGU6YkwsZGVzY3JpcHRpb246aSx0YXNrOmksY2xhc3NlczpbXX07VUsucHVzaChhKX0sUGp0PWZ1bmN0aW9uKCl7Y29uc3QgaT1mdW5jdGlvbihmKXtyZXR1cm4gdkxbZl0ucHJvY2Vzc2VkfTtsZXQgYT0hMDtmb3IoY29uc3RbZixwXW9mIHZMLmVudHJpZXMoKSlpKGYpLGE9YSYmcC5wcm9jZXNzZWQ7cmV0dXJuIGF9LFRVZT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsYWRkRXZlbnQ6T2p0LGFkZFNlY3Rpb246TGp0LGFkZFRhc2s6SWp0LGFkZFRhc2tPcmc6Tmp0LGNsZWFyOkFqdCxkZWZhdWx0OntjbGVhcjpBanQsZ2V0Q29tbW9uRGI6Q2p0LGFkZFNlY3Rpb246TGp0LGdldFNlY3Rpb25zOk1qdCxnZXRUYXNrczpEanQsYWRkVGFzazpJanQsYWRkVGFza09yZzpOanQsYWRkRXZlbnQ6T2p0LHBhcnNlRGlyZWN0aXZlOlNqdH0sZ2V0Q29tbW9uRGI6Q2p0LGdldFNlY3Rpb25zOk1qdCxnZXRUYXNrczpEanQscGFyc2VEaXJlY3RpdmU6U2p0fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLF9VZT0xMixXSz1mdW5jdGlvbihpLGEpe2NvbnN0IGY9aS5hcHBlbmQoInJlY3QiKTtyZXR1cm4gZi5hdHRyKCJ4IixhLngpLGYuYXR0cigieSIsYS55KSxmLmF0dHIoImZpbGwiLGEuZmlsbCksZi5hdHRyKCJzdHJva2UiLGEuc3Ryb2tlKSxmLmF0dHIoIndpZHRoIixhLndpZHRoKSxmLmF0dHIoImhlaWdodCIsYS5oZWlnaHQpLGYuYXR0cigicngiLGEucngpLGYuYXR0cigicnkiLGEucnkpLGEuY2xhc3MhPT12b2lkIDAmJmYuYXR0cigiY2xhc3MiLGEuY2xhc3MpLGZ9LENVZT1mdW5jdGlvbihpLGEpe2NvbnN0IHA9aS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixhLmN4KS5hdHRyKCJjeSIsYS5jeSkuYXR0cigiY2xhc3MiLCJmYWNlIikuYXR0cigiciIsMTUpLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigib3ZlcmZsb3ciLCJ2aXNpYmxlIiksdj1pLmFwcGVuZCgiZyIpO3YuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsYS5jeC0xNS8zKS5hdHRyKCJjeSIsYS5jeS0xNS8zKS5hdHRyKCJyIiwxLjUpLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigiZmlsbCIsIiM2NjYiKS5hdHRyKCJzdHJva2UiLCIjNjY2Iiksdi5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixhLmN4KzE1LzMpLmF0dHIoImN5IixhLmN5LTE1LzMpLmF0dHIoInIiLDEuNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJmaWxsIiwiIzY2NiIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKTtmdW5jdGlvbiBtKEMpe2NvbnN0IEE9TEEoKS5zdGFydEFuZ2xlKE1hdGguUEkvMikuZW5kQW5nbGUoMyooTWF0aC5QSS8yKSkuaW5uZXJSYWRpdXMoNy41KS5vdXRlclJhZGl1cyg2LjgxODE4MTgxODE4MTgxNzUpO0MuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoImQiLEEpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2EuY3grIiwiKyhhLmN5KzIpKyIpIil9ZnVuY3Rpb24gYihDKXtjb25zdCBBPUxBKCkuc3RhcnRBbmdsZSgzKk1hdGguUEkvMikuZW5kQW5nbGUoNSooTWF0aC5QSS8yKSkuaW5uZXJSYWRpdXMoNy41KS5vdXRlclJhZGl1cyg2LjgxODE4MTgxODE4MTgxNzUpO0MuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoImQiLEEpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2EuY3grIiwiKyhhLmN5KzcpKyIpIil9ZnVuY3Rpb24gRShDKXtDLmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJzdHJva2UiLDIpLmF0dHIoIngxIixhLmN4LTUpLmF0dHIoInkxIixhLmN5KzcpLmF0dHIoIngyIixhLmN4KzUpLmF0dHIoInkyIixhLmN5KzcpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHgiKS5hdHRyKCJzdHJva2UiLCIjNjY2Iil9cmV0dXJuIGEuc2NvcmU+Mz9tKHYpOmEuc2NvcmU8Mz9iKHYpOkUodikscH0sU1VlPWZ1bmN0aW9uKGksYSl7Y29uc3QgZj1pLmFwcGVuZCgiY2lyY2xlIik7cmV0dXJuIGYuYXR0cigiY3giLGEuY3gpLGYuYXR0cigiY3kiLGEuY3kpLGYuYXR0cigiY2xhc3MiLCJhY3Rvci0iK2EucG9zKSxmLmF0dHIoImZpbGwiLGEuZmlsbCksZi5hdHRyKCJzdHJva2UiLGEuc3Ryb2tlKSxmLmF0dHIoInIiLGEuciksZi5jbGFzcyE9PXZvaWQgMCYmZi5hdHRyKCJjbGFzcyIsZi5jbGFzcyksYS50aXRsZSE9PXZvaWQgMCYmZi5hcHBlbmQoInRpdGxlIikudGV4dChhLnRpdGxlKSxmfSxGanQ9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPWEudGV4dC5yZXBsYWNlKC88YnJccypcLz8+L2dpLCIgIikscD1pLmFwcGVuZCgidGV4dCIpO3AuYXR0cigieCIsYS54KSxwLmF0dHIoInkiLGEueSkscC5hdHRyKCJjbGFzcyIsImxlZ2VuZCIpLHAuc3R5bGUoInRleHQtYW5jaG9yIixhLmFuY2hvciksYS5jbGFzcyE9PXZvaWQgMCYmcC5hdHRyKCJjbGFzcyIsYS5jbGFzcyk7Y29uc3Qgdj1wLmFwcGVuZCgidHNwYW4iKTtyZXR1cm4gdi5hdHRyKCJ4IixhLngrYS50ZXh0TWFyZ2luKjIpLHYudGV4dChmKSxwfSxBVWU9ZnVuY3Rpb24oaSxhKXtmdW5jdGlvbiBmKHYsbSxiLEUsQyl7cmV0dXJuIHYrIiwiK20rIiAiKyh2K2IpKyIsIittKyIgIisoditiKSsiLCIrKG0rRS1DKSsiICIrKHYrYi1DKjEuMikrIiwiKyhtK0UpKyIgIit2KyIsIisobStFKX1jb25zdCBwPWkuYXBwZW5kKCJwb2x5Z29uIik7cC5hdHRyKCJwb2ludHMiLGYoYS54LGEueSw1MCwyMCw3KSkscC5hdHRyKCJjbGFzcyIsImxhYmVsQm94IiksYS55PWEueSthLmxhYmVsTWFyZ2luLGEueD1hLngrLjUqYS5sYWJlbE1hcmdpbixGanQoaSxhKX0sTFVlPWZ1bmN0aW9uKGksYSxmKXtjb25zdCBwPWkuYXBwZW5kKCJnIiksdj1SZ3QoKTt2Lng9YS54LHYueT1hLnksdi5maWxsPWEuZmlsbCx2LndpZHRoPWYud2lkdGgsdi5oZWlnaHQ9Zi5oZWlnaHQsdi5jbGFzcz0iam91cm5leS1zZWN0aW9uIHNlY3Rpb24tdHlwZS0iK2EubnVtLHYucng9Myx2LnJ5PTMsV0socCx2KSxSanQoZikoYS50ZXh0LHAsdi54LHYueSx2LndpZHRoLHYuaGVpZ2h0LHtjbGFzczoiam91cm5leS1zZWN0aW9uIHNlY3Rpb24tdHlwZS0iK2EubnVtfSxmLGEuY29sb3VyKX07bGV0IEJqdD0tMTtjb25zdCBNVWU9ZnVuY3Rpb24oaSxhLGYpe2NvbnN0IHA9YS54K2Yud2lkdGgvMix2PWkuYXBwZW5kKCJnIik7Qmp0Kys7Y29uc3QgbT0zMDArNSozMDt2LmFwcGVuZCgibGluZSIpLmF0dHIoImlkIiwidGFzayIrQmp0KS5hdHRyKCJ4MSIscCkuYXR0cigieTEiLGEueSkuYXR0cigieDIiLHApLmF0dHIoInkyIixtKS5hdHRyKCJjbGFzcyIsInRhc2stbGluZSIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLCI0IDIiKS5hdHRyKCJzdHJva2UiLCIjNjY2IiksQ1VlKHYse2N4OnAsY3k6MzAwKyg1LWEuc2NvcmUpKjMwLHNjb3JlOmEuc2NvcmV9KTtjb25zdCBiPVJndCgpO2IueD1hLngsYi55PWEueSxiLmZpbGw9YS5maWxsLGIud2lkdGg9Zi53aWR0aCxiLmhlaWdodD1mLmhlaWdodCxiLmNsYXNzPSJ0YXNrIHRhc2stdHlwZS0iK2EubnVtLGIucng9MyxiLnJ5PTMsV0sodixiKSxhLngrMTQsUmp0KGYpKGEudGFzayx2LGIueCxiLnksYi53aWR0aCxiLmhlaWdodCx7Y2xhc3M6InRhc2sifSxmLGEuY29sb3VyKX0sRFVlPWZ1bmN0aW9uKGksYSl7V0soaSx7eDphLnN0YXJ0eCx5OmEuc3RhcnR5LHdpZHRoOmEuc3RvcHgtYS5zdGFydHgsaGVpZ2h0OmEuc3RvcHktYS5zdGFydHksZmlsbDphLmZpbGwsY2xhc3M6InJlY3QifSkubG93ZXIoKX0sSVVlPWZ1bmN0aW9uKCl7cmV0dXJue3g6MCx5OjAsZmlsbDp2b2lkIDAsInRleHQtYW5jaG9yIjoic3RhcnQiLHdpZHRoOjEwMCxoZWlnaHQ6MTAwLHRleHRNYXJnaW46MCxyeDowLHJ5OjB9fSxSZ3Q9ZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MCx3aWR0aDoxMDAsYW5jaG9yOiJzdGFydCIsaGVpZ2h0OjEwMCxyeDowLHJ5OjB9fSxSanQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBpKHYsbSxiLEUsQyxBLFAsRil7Y29uc3Qgaj1tLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGIrQy8yKS5hdHRyKCJ5IixFK0EvMis1KS5zdHlsZSgiZm9udC1jb2xvciIsRikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dCh2KTtwKGosUCl9ZnVuY3Rpb24gYSh2LG0sYixFLEMsQSxQLEYsail7Y29uc3R7dGFza0ZvbnRTaXplOlIsdGFza0ZvbnRGYW1pbHk6SH09RixZPXYuc3BsaXQoLzxiclxzKlwvPz4vZ2kpO2ZvcihsZXQgcnQ9MDtydDxZLmxlbmd0aDtydCsrKXtjb25zdCBKPXJ0KlItUiooWS5sZW5ndGgtMSkvMixpdD1tLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGIrQy8yKS5hdHRyKCJ5IixFKS5hdHRyKCJmaWxsIixqKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5zdHlsZSgiZm9udC1zaXplIixSKS5zdHlsZSgiZm9udC1mYW1pbHkiLEgpO2l0LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixiK0MvMikuYXR0cigiZHkiLEopLnRleHQoWVtydF0pLGl0LmF0dHIoInkiLEUrQS8yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsImNlbnRyYWwiKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJjZW50cmFsIikscChpdCxQKX19ZnVuY3Rpb24gZih2LG0sYixFLEMsQSxQLEYpe2NvbnN0IGo9bS5hcHBlbmQoInN3aXRjaCIpLEg9ai5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4IixiKS5hdHRyKCJ5IixFKS5hdHRyKCJ3aWR0aCIsQykuYXR0cigiaGVpZ2h0IixBKS5hdHRyKCJwb3NpdGlvbiIsImZpeGVkIikuYXBwZW5kKCJ4aHRtbDpkaXYiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlIikuc3R5bGUoImhlaWdodCIsIjEwMCUiKS5zdHlsZSgid2lkdGgiLCIxMDAlIik7SC5hcHBlbmQoImRpdiIpLmF0dHIoImNsYXNzIiwibGFiZWwiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlLWNlbGwiKS5zdHlsZSgidGV4dC1hbGlnbiIsImNlbnRlciIpLnN0eWxlKCJ2ZXJ0aWNhbC1hbGlnbiIsIm1pZGRsZSIpLnRleHQodiksYSh2LGosYixFLEMsQSxQLEYpLHAoSCxQKX1mdW5jdGlvbiBwKHYsbSl7Zm9yKGNvbnN0IGIgaW4gbSliIGluIG0mJnYuYXR0cihiLG1bYl0pfXJldHVybiBmdW5jdGlvbih2KXtyZXR1cm4gdi50ZXh0UGxhY2VtZW50PT09ImZvIj9mOnYudGV4dFBsYWNlbWVudD09PSJvbGQiP2k6YX19KCksT1VlPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFycm93aGVhZCIpLmF0dHIoInJlZlgiLDUpLmF0dHIoInJlZlkiLDIpLmF0dHIoIm1hcmtlcldpZHRoIiw2KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDQpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwLDAgViA0IEw2LDIgWiIpfTtmdW5jdGlvbiBqanQoaSxhKXtpLmVhY2goZnVuY3Rpb24oKXt2YXIgZj14cih0aGlzKSxwPWYudGV4dCgpLnNwbGl0KC8oXHMrfDxicj4pLykucmV2ZXJzZSgpLHYsbT1bXSxiPTEuMSxFPWYuYXR0cigieSIpLEM9cGFyc2VGbG9hdChmLmF0dHIoImR5IikpLEE9Zi50ZXh0KG51bGwpLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixFKS5hdHRyKCJkeSIsQysiZW0iKTtmb3IobGV0IFA9MDtQPHAubGVuZ3RoO1ArKyl2PXBbcC5sZW5ndGgtMS1QXSxtLnB1c2godiksQS50ZXh0KG0uam9pbigiICIpLnRyaW0oKSksKEEubm9kZSgpLmdldENvbXB1dGVkVGV4dExlbmd0aCgpPmF8fHY9PT0iPGJyPiIpJiYobS5wb3AoKSxBLnRleHQobS5qb2luKCIgIikudHJpbSgpKSx2PT09Ijxicj4iP209WyIiXTptPVt2XSxBPWYuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLDApLmF0dHIoInkiLEUpLmF0dHIoImR5IixiKyJlbSIpLnRleHQodikpfSl9Y29uc3QgTlVlPWZ1bmN0aW9uKGksYSxmLHApe2NvbnN0IHY9ZiVfVWUtMSxtPWkuYXBwZW5kKCJnIik7YS5zZWN0aW9uPXYsbS5hdHRyKCJjbGFzcyIsKGEuY2xhc3M/YS5jbGFzcysiICI6IiIpKyJ0aW1lbGluZS1ub2RlICIrKCJzZWN0aW9uLSIrdikpO2NvbnN0IGI9bS5hcHBlbmQoImciKSxFPW0uYXBwZW5kKCJnIiksQT1FLmFwcGVuZCgidGV4dCIpLnRleHQoYS5kZXNjcikuYXR0cigiZHkiLCIxZW0iKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuY2FsbChqanQsYS53aWR0aCkubm9kZSgpLmdldEJCb3goKSxQPXAuZm9udFNpemUmJnAuZm9udFNpemUucmVwbGFjZT9wLmZvbnRTaXplLnJlcGxhY2UoInB4IiwiIik6cC5mb250U2l6ZTtyZXR1cm4gYS5oZWlnaHQ9QS5oZWlnaHQrUCoxLjEqLjUrYS5wYWRkaW5nLGEuaGVpZ2h0PU1hdGgubWF4KGEuaGVpZ2h0LGEubWF4SGVpZ2h0KSxhLndpZHRoPWEud2lkdGgrMiphLnBhZGRpbmcsRS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIithLndpZHRoLzIrIiwgIithLnBhZGRpbmcvMisiKSIpLEZVZShiLGEsdiksYX0sUFVlPWZ1bmN0aW9uKGksYSxmKXtjb25zdCBwPWkuYXBwZW5kKCJnIiksbT1wLmFwcGVuZCgidGV4dCIpLnRleHQoYS5kZXNjcikuYXR0cigiZHkiLCIxZW0iKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuY2FsbChqanQsYS53aWR0aCkubm9kZSgpLmdldEJCb3goKSxiPWYuZm9udFNpemUmJmYuZm9udFNpemUucmVwbGFjZT9mLmZvbnRTaXplLnJlcGxhY2UoInB4IiwiIik6Zi5mb250U2l6ZTtyZXR1cm4gcC5yZW1vdmUoKSxtLmhlaWdodCtiKjEuMSouNSthLnBhZGRpbmd9LEZVZT1mdW5jdGlvbihpLGEsZil7aS5hcHBlbmQoInBhdGgiKS5hdHRyKCJpZCIsIm5vZGUtIithLmlkKS5hdHRyKCJjbGFzcyIsIm5vZGUtYmtnIG5vZGUtIithLnR5cGUpLmF0dHIoImQiLGBNMCAke2EuaGVpZ2h0LTV9IHYkey1hLmhlaWdodCsyKjV9IHEwLC01IDUsLTUgaCR7YS53aWR0aC0yKjV9IHE1LDAgNSw1IHYke2EuaGVpZ2h0LTV9IEgwIFpgKSxpLmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIiwibm9kZS1saW5lLSIrZikuYXR0cigieDEiLDApLmF0dHIoInkxIixhLmhlaWdodCkuYXR0cigieDIiLGEud2lkdGgpLmF0dHIoInkyIixhLmhlaWdodCl9LFQ5PXtkcmF3UmVjdDpXSyxkcmF3Q2lyY2xlOlNVZSxkcmF3U2VjdGlvbjpMVWUsZHJhd1RleHQ6Rmp0LGRyYXdMYWJlbDpBVWUsZHJhd1Rhc2s6TVVlLGRyYXdCYWNrZ3JvdW5kUmVjdDpEVWUsZ2V0VGV4dE9iajpJVWUsZ2V0Tm90ZVJlY3Q6Umd0LGluaXRHcmFwaGljczpPVWUsZHJhd05vZGU6TlVlLGdldFZpcnR1YWxOb2RlSGVpZ2h0OlBVZX0sQlVlPWZ1bmN0aW9uKGksYSxmLHApe3ZhciBzdCx4dDtjb25zdCB2PURlKCksbT12LmxlZnRNYXJnaW4/PzUwO1d0LmRlYnVnKCJ0aW1lbGluZSIscC5kYik7Y29uc3QgYj12LnNlY3VyaXR5TGV2ZWw7bGV0IEU7Yj09PSJzYW5kYm94IiYmKEU9eHIoIiNpIithKSk7Y29uc3QgQT14cihiPT09InNhbmRib3giP0Uubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLnNlbGVjdCgiIyIrYSk7QS5hcHBlbmQoImciKTtjb25zdCBQPXAuZGIuZ2V0VGFza3MoKSxGPXAuZGIuZ2V0Q29tbW9uRGIoKS5nZXREaWFncmFtVGl0bGUoKTtXdC5kZWJ1ZygidGFzayIsUCksVDkuaW5pdEdyYXBoaWNzKEEpO2NvbnN0IGo9cC5kYi5nZXRTZWN0aW9ucygpO1d0LmRlYnVnKCJzZWN0aW9ucyIsaik7bGV0IFI9MCxIPTAsWT0wLHJ0PTAsSj01MCttLGl0PTUwO3J0PTUwO2xldCBmdD0wLFR0PSEwO2ouZm9yRWFjaChmdW5jdGlvbihodCl7Y29uc3QgZHQ9e251bWJlcjpmdCxkZXNjcjpodCxzZWN0aW9uOmZ0LHdpZHRoOjE1MCxwYWRkaW5nOjIwLG1heEhlaWdodDpSfSxDdD1UOS5nZXRWaXJ0dWFsTm9kZUhlaWdodChBLGR0LHYpO1d0LmRlYnVnKCJzZWN0aW9uSGVpZ2h0IGJlZm9yZSBkcmF3IixDdCksUj1NYXRoLm1heChSLEN0KzIwKX0pO2xldCBrdD0wLG10PTA7V3QuZGVidWcoInRhc2tzLmxlbmd0aCIsUC5sZW5ndGgpO2Zvcihjb25zdFtodCxkdF1vZiBQLmVudHJpZXMoKSl7Y29uc3QgQ3Q9e251bWJlcjpodCxkZXNjcjpkdCxzZWN0aW9uOmR0LnNlY3Rpb24sd2lkdGg6MTUwLHBhZGRpbmc6MjAsbWF4SGVpZ2h0Okh9LHR0PVQ5LmdldFZpcnR1YWxOb2RlSGVpZ2h0KEEsQ3Qsdik7V3QuZGVidWcoInRhc2tIZWlnaHQgYmVmb3JlIGRyYXciLHR0KSxIPU1hdGgubWF4KEgsdHQrMjApLGt0PU1hdGgubWF4KGt0LGR0LmV2ZW50cy5sZW5ndGgpO2xldCBQdD0wO2ZvcihsZXQgcHQ9MDtwdDxkdC5ldmVudHMubGVuZ3RoO3B0Kyspe2NvbnN0IFg9e2Rlc2NyOmR0LmV2ZW50c1twdF0sc2VjdGlvbjpkdC5zZWN0aW9uLG51bWJlcjpkdC5zZWN0aW9uLHdpZHRoOjE1MCxwYWRkaW5nOjIwLG1heEhlaWdodDo1MH07UHQrPVQ5LmdldFZpcnR1YWxOb2RlSGVpZ2h0KEEsWCx2KX1tdD1NYXRoLm1heChtdCxQdCl9V3QuZGVidWcoIm1heFNlY3Rpb25IZWlnaHQgYmVmb3JlIGRyYXciLFIpLFd0LmRlYnVnKCJtYXhUYXNrSGVpZ2h0IGJlZm9yZSBkcmF3IixIKSxqJiZqLmxlbmd0aD4wP2ouZm9yRWFjaChodD0+e2NvbnN0IGR0PVAuZmlsdGVyKHB0PT5wdC5zZWN0aW9uPT09aHQpLEN0PXtudW1iZXI6ZnQsZGVzY3I6aHQsc2VjdGlvbjpmdCx3aWR0aDoyMDAqTWF0aC5tYXgoZHQubGVuZ3RoLDEpLTUwLHBhZGRpbmc6MjAsbWF4SGVpZ2h0OlJ9O1d0LmRlYnVnKCJzZWN0aW9uTm9kZSIsQ3QpO2NvbnN0IHR0PUEuYXBwZW5kKCJnIiksUHQ9VDkuZHJhd05vZGUodHQsQ3QsZnQsdik7V3QuZGVidWcoInNlY3Rpb25Ob2RlIG91dHB1dCIsUHQpLHR0LmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke0p9LCAke3J0fSlgKSxpdCs9Uis1MCxkdC5sZW5ndGg+MCYmJGp0KEEsZHQsZnQsSixpdCxILHYsa3QsbXQsUiwhMSksSis9MjAwKk1hdGgubWF4KGR0Lmxlbmd0aCwxKSxpdD1ydCxmdCsrfSk6KFR0PSExLCRqdChBLFAsZnQsSixpdCxILHYsa3QsbXQsUiwhMCkpO2NvbnN0IGN0PUEubm9kZSgpLmdldEJCb3goKTtXdC5kZWJ1ZygiYm91bmRzIixjdCksRiYmQS5hcHBlbmQoInRleHQiKS50ZXh0KEYpLmF0dHIoIngiLGN0LndpZHRoLzItbSkuYXR0cigiZm9udC1zaXplIiwiNGV4IikuYXR0cigiZm9udC13ZWlnaHQiLCJib2xkIikuYXR0cigieSIsMjApLFk9VHQ/UitIKzE1MDpIKzEwMCxBLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGluZVdyYXBwZXIiKS5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsbSkuYXR0cigieTEiLFkpLmF0dHIoIngyIixjdC53aWR0aCszKm0pLmF0dHIoInkyIixZKS5hdHRyKCJzdHJva2Utd2lkdGgiLDQpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigibWFya2VyLWVuZCIsInVybCgjYXJyb3doZWFkKSIpLHM5KHZvaWQgMCxBLCgoc3Q9di50aW1lbGluZSk9PW51bGw/dm9pZCAwOnN0LnBhZGRpbmcpPz81MCwoKHh0PXYudGltZWxpbmUpPT1udWxsP3ZvaWQgMDp4dC51c2VNYXhXaWR0aCk/PyExKX0sJGp0PWZ1bmN0aW9uKGksYSxmLHAsdixtLGIsRSxDLEEsUCl7dmFyIEY7Zm9yKGNvbnN0IGogb2YgYSl7Y29uc3QgUj17ZGVzY3I6ai50YXNrLHNlY3Rpb246ZixudW1iZXI6Zix3aWR0aDoxNTAscGFkZGluZzoyMCxtYXhIZWlnaHQ6bX07V3QuZGVidWcoInRhc2tOb2RlIixSKTtjb25zdCBIPWkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0YXNrV3JhcHBlciIpLHJ0PVQ5LmRyYXdOb2RlKEgsUixmLGIpLmhlaWdodDtpZihXdC5kZWJ1ZygidGFza0hlaWdodCBhZnRlciBkcmF3IixydCksSC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtwfSwgJHt2fSlgKSxtPU1hdGgubWF4KG0scnQpLGouZXZlbnRzKXtjb25zdCBKPWkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsaW5lV3JhcHBlciIpO2xldCBpdD1tO3YrPTEwMCxpdD1pdCtSVWUoaSxqLmV2ZW50cyxmLHAsdixiKSx2LT0xMDAsSi5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIscCsxOTAvMikuYXR0cigieTEiLHYrbSkuYXR0cigieDIiLHArMTkwLzIpLmF0dHIoInkyIix2K20rKFA/bTpBKStDKzEyMCkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoI2Fycm93aGVhZCkiKS5hdHRyKCJzdHJva2UtZGFzaGFycmF5IiwiNSw1Iil9cD1wKzIwMCxQJiYhKChGPWIudGltZWxpbmUpIT1udWxsJiZGLmRpc2FibGVNdWx0aWNvbG9yKSYmZisrfXY9di0xMH0sUlVlPWZ1bmN0aW9uKGksYSxmLHAsdixtKXtsZXQgYj0wO2NvbnN0IEU9djt2PXYrMTAwO2Zvcihjb25zdCBDIG9mIGEpe2NvbnN0IEE9e2Rlc2NyOkMsc2VjdGlvbjpmLG51bWJlcjpmLHdpZHRoOjE1MCxwYWRkaW5nOjIwLG1heEhlaWdodDo1MH07V3QuZGVidWcoImV2ZW50Tm9kZSIsQSk7Y29uc3QgUD1pLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZXZlbnRXcmFwcGVyIiksaj1UOS5kcmF3Tm9kZShQLEEsZixtKS5oZWlnaHQ7Yj1iK2osUC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtwfSwgJHt2fSlgKSx2PXYrMTAran1yZXR1cm4gdj1FLGJ9LGpVZT17c2V0Q29uZjooKT0+e30sZHJhdzpCVWV9LCRVZT1pPT57bGV0IGE9IiI7Zm9yKGxldCBmPTA7ZjxpLlRIRU1FX0NPTE9SX0xJTUlUO2YrKylpWyJsaW5lQ29sb3IiK2ZdPWlbImxpbmVDb2xvciIrZl18fGlbImNTY2FsZUludiIrZl0sWEUoaVsibGluZUNvbG9yIitmXSk/aVsibGluZUNvbG9yIitmXT1TcyhpWyJsaW5lQ29sb3IiK2ZdLDIwKTppWyJsaW5lQ29sb3IiK2ZdPVlzKGlbImxpbmVDb2xvciIrZl0sMjApO2ZvcihsZXQgZj0wO2Y8aS5USEVNRV9DT0xPUl9MSU1JVDtmKyspe2NvbnN0IHA9IiIrKDE3LTMqZik7YSs9YAogICAgLnNlY3Rpb24tJHtmLTF9IHJlY3QsIC5zZWN0aW9uLSR7Zi0xfSBwYXRoLCAuc2VjdGlvbi0ke2YtMX0gY2lyY2xlLCAuc2VjdGlvbi0ke2YtMX0gcGF0aCAgewogICAgICBmaWxsOiAke2lbImNTY2FsZSIrZl19OwogICAgfQogICAgLnNlY3Rpb24tJHtmLTF9IHRleHQgewogICAgIGZpbGw6ICR7aVsiY1NjYWxlTGFiZWwiK2ZdfTsKICAgIH0KICAgIC5ub2RlLWljb24tJHtmLTF9IHsKICAgICAgZm9udC1zaXplOiA0MHB4OwogICAgICBjb2xvcjogJHtpWyJjU2NhbGVMYWJlbCIrZl19OwogICAgfQogICAgLnNlY3Rpb24tZWRnZS0ke2YtMX17CiAgICAgIHN0cm9rZTogJHtpWyJjU2NhbGUiK2ZdfTsKICAgIH0KICAgIC5lZGdlLWRlcHRoLSR7Zi0xfXsKICAgICAgc3Ryb2tlLXdpZHRoOiAke3B9OwogICAgfQogICAgLnNlY3Rpb24tJHtmLTF9IGxpbmUgewogICAgICBzdHJva2U6ICR7aVsiY1NjYWxlSW52IitmXX0gOwogICAgICBzdHJva2Utd2lkdGg6IDM7CiAgICB9CgogICAgLmxpbmVXcmFwcGVyIGxpbmV7CiAgICAgIHN0cm9rZTogJHtpWyJjU2NhbGVMYWJlbCIrZl19IDsKICAgIH0KCiAgICAuZGlzYWJsZWQsIC5kaXNhYmxlZCBjaXJjbGUsIC5kaXNhYmxlZCB0ZXh0IHsKICAgICAgZmlsbDogbGlnaHRncmF5OwogICAgfQogICAgLmRpc2FibGVkIHRleHQgewogICAgICBmaWxsOiAjZWZlZmVmOwogICAgfQogICAgYH1yZXR1cm4gYX0selVlPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntkYjpUVWUscmVuZGVyZXI6alVlLHBhcnNlcjpFVWUsc3R5bGVzOmk9PmAKICAuZWRnZSB7CiAgICBzdHJva2Utd2lkdGg6IDM7CiAgfQogICR7JFVlKGkpfQogIC5zZWN0aW9uLXJvb3QgcmVjdCwgLnNlY3Rpb24tcm9vdCBwYXRoLCAuc2VjdGlvbi1yb290IGNpcmNsZSAgewogICAgZmlsbDogJHtpLmdpdDB9OwogIH0KICAuc2VjdGlvbi1yb290IHRleHQgewogICAgZmlsbDogJHtpLmdpdEJyYW5jaExhYmVsMH07CiAgfQogIC5pY29uLWNvbnRhaW5lciB7CiAgICBoZWlnaHQ6MTAwJTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgfQogIC5lZGdlIHsKICAgIGZpbGw6IG5vbmU7CiAgfQogIC5ldmVudFdyYXBwZXIgIHsKICAgZmlsdGVyOiBicmlnaHRuZXNzKDEyMCUpOwogIH0KYH19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIGpndD1mdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKFR0LGt0LG10LGN0KXtmb3IobXQ9bXR8fHt9LGN0PVR0Lmxlbmd0aDtjdC0tO210W1R0W2N0XV09a3QpO3JldHVybiBtdH0sYT1bMSw0XSxmPVsxLDEzXSxwPVsxLDEyXSx2PVsxLDE1XSxtPVsxLDE2XSxiPVsxLDIwXSxFPVsxLDE5XSxDPVs2LDcsOF0sQT1bMSwyNl0sUD1bMSwyNF0sRj1bMSwyNV0saj1bNiw3LDExXSxSPVsxLDYsMTMsMTUsMTYsMTksMjJdLEg9WzEsMzNdLFk9WzEsMzRdLHJ0PVsxLDYsNywxMSwxMywxNSwxNiwxOSwyMl0sSj17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsbWluZE1hcDo0LHNwYWNlTGluZXM6NSxTUEFDRUxJTkU6NixOTDo3LE1JTkRNQVA6OCxkb2N1bWVudDo5LHN0b3A6MTAsRU9GOjExLHN0YXRlbWVudDoxMixTUEFDRUxJU1Q6MTMsbm9kZToxNCxJQ09OOjE1LENMQVNTOjE2LG5vZGVXaXRoSWQ6MTcsbm9kZVdpdGhvdXRJZDoxOCxOT0RFX0RTVEFSVDoxOSxOT0RFX0RFU0NSOjIwLE5PREVfREVORDoyMSxOT0RFX0lEOjIyLCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw2OiJTUEFDRUxJTkUiLDc6Ik5MIiw4OiJNSU5ETUFQIiwxMToiRU9GIiwxMzoiU1BBQ0VMSVNUIiwxNToiSUNPTiIsMTY6IkNMQVNTIiwxOToiTk9ERV9EU1RBUlQiLDIwOiJOT0RFX0RFU0NSIiwyMToiTk9ERV9ERU5EIiwyMjoiTk9ERV9JRCJ9LHByb2R1Y3Rpb25zXzpbMCxbMywxXSxbMywyXSxbNSwxXSxbNSwyXSxbNSwyXSxbNCwyXSxbNCwzXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMl0sWzEwLDJdLFs5LDNdLFs5LDJdLFsxMiwyXSxbMTIsMl0sWzEyLDJdLFsxMiwxXSxbMTIsMV0sWzEyLDFdLFsxMiwxXSxbMTIsMV0sWzE0LDFdLFsxNCwxXSxbMTgsM10sWzE3LDFdLFsxNyw0XV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihrdCxtdCxjdCx5dCxzdCx4dCxodCl7dmFyIGR0PXh0Lmxlbmd0aC0xO3N3aXRjaChzdCl7Y2FzZSA2OmNhc2UgNzpyZXR1cm4geXQ7Y2FzZSA4Onl0LmdldExvZ2dlcigpLnRyYWNlKCJTdG9wIE5MICIpO2JyZWFrO2Nhc2UgOTp5dC5nZXRMb2dnZXIoKS50cmFjZSgiU3RvcCBFT0YgIik7YnJlYWs7Y2FzZSAxMTp5dC5nZXRMb2dnZXIoKS50cmFjZSgiU3RvcCBOTDIgIik7YnJlYWs7Y2FzZSAxMjp5dC5nZXRMb2dnZXIoKS50cmFjZSgiU3RvcCBFT0YyICIpO2JyZWFrO2Nhc2UgMTU6eXQuZ2V0TG9nZ2VyKCkuaW5mbygiTm9kZTogIix4dFtkdF0uaWQpLHl0LmFkZE5vZGUoeHRbZHQtMV0ubGVuZ3RoLHh0W2R0XS5pZCx4dFtkdF0uZGVzY3IseHRbZHRdLnR5cGUpO2JyZWFrO2Nhc2UgMTY6eXQuZ2V0TG9nZ2VyKCkudHJhY2UoIkljb246ICIseHRbZHRdKSx5dC5kZWNvcmF0ZU5vZGUoe2ljb246eHRbZHRdfSk7YnJlYWs7Y2FzZSAxNzpjYXNlIDIxOnl0LmRlY29yYXRlTm9kZSh7Y2xhc3M6eHRbZHRdfSk7YnJlYWs7Y2FzZSAxODp5dC5nZXRMb2dnZXIoKS50cmFjZSgiU1BBQ0VMSVNUIik7YnJlYWs7Y2FzZSAxOTp5dC5nZXRMb2dnZXIoKS50cmFjZSgiTm9kZTogIix4dFtkdF0uaWQpLHl0LmFkZE5vZGUoMCx4dFtkdF0uaWQseHRbZHRdLmRlc2NyLHh0W2R0XS50eXBlKTticmVhaztjYXNlIDIwOnl0LmRlY29yYXRlTm9kZSh7aWNvbjp4dFtkdF19KTticmVhaztjYXNlIDI1Onl0LmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGZvdW5kIC4uIix4dFtkdC0yXSksdGhpcy4kPXtpZDp4dFtkdC0xXSxkZXNjcjp4dFtkdC0xXSx0eXBlOnl0LmdldFR5cGUoeHRbZHQtMl0seHRbZHRdKX07YnJlYWs7Y2FzZSAyNjp0aGlzLiQ9e2lkOnh0W2R0XSxkZXNjcjp4dFtkdF0sdHlwZTp5dC5ub2RlVHlwZS5ERUZBVUxUfTticmVhaztjYXNlIDI3Onl0LmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGZvdW5kIC4uIix4dFtkdC0zXSksdGhpcy4kPXtpZDp4dFtkdC0zXSxkZXNjcjp4dFtkdC0xXSx0eXBlOnl0LmdldFR5cGUoeHRbZHQtMl0seHRbZHRdKX07YnJlYWt9fSx0YWJsZTpbezM6MSw0OjIsNTozLDY6WzEsNV0sODphfSx7MTpbM119LHsxOlsyLDFdfSx7NDo2LDY6WzEsN10sNzpbMSw4XSw4OmF9LHs2OmYsNzpbMSwxMF0sOTo5LDEyOjExLDEzOnAsMTQ6MTQsMTU6diwxNjptLDE3OjE3LDE4OjE4LDE5OmIsMjI6RX0saShDLFsyLDNdKSx7MTpbMiwyXX0saShDLFsyLDRdKSxpKEMsWzIsNV0pLHsxOlsyLDZdLDY6ZiwxMjoyMSwxMzpwLDE0OjE0LDE1OnYsMTY6bSwxNzoxNywxODoxOCwxOTpiLDIyOkV9LHs2OmYsOToyMiwxMjoxMSwxMzpwLDE0OjE0LDE1OnYsMTY6bSwxNzoxNywxODoxOCwxOTpiLDIyOkV9LHs2OkEsNzpQLDEwOjIzLDExOkZ9LGkoaixbMiwyMl0sezE3OjE3LDE4OjE4LDE0OjI3LDE1OlsxLDI4XSwxNjpbMSwyOV0sMTk6YiwyMjpFfSksaShqLFsyLDE4XSksaShqLFsyLDE5XSksaShqLFsyLDIwXSksaShqLFsyLDIxXSksaShqLFsyLDIzXSksaShqLFsyLDI0XSksaShqLFsyLDI2XSx7MTk6WzEsMzBdfSksezIwOlsxLDMxXX0sezY6QSw3OlAsMTA6MzIsMTE6Rn0sezE6WzIsN10sNjpmLDEyOjIxLDEzOnAsMTQ6MTQsMTU6diwxNjptLDE3OjE3LDE4OjE4LDE5OmIsMjI6RX0saShSLFsyLDE0XSx7NzpILDExOll9KSxpKHJ0LFsyLDhdKSxpKHJ0LFsyLDldKSxpKHJ0LFsyLDEwXSksaShqLFsyLDE1XSksaShqLFsyLDE2XSksaShqLFsyLDE3XSksezIwOlsxLDM1XX0sezIxOlsxLDM2XX0saShSLFsyLDEzXSx7NzpILDExOll9KSxpKHJ0LFsyLDExXSksaShydCxbMiwxMl0pLHsyMTpbMSwzN119LGkoaixbMiwyNV0pLGkoaixbMiwyN10pXSxkZWZhdWx0QWN0aW9uczp7MjpbMiwxXSw2OlsyLDJdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKGt0LG10KXtpZihtdC5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKGt0KTtlbHNle3ZhciBjdD1uZXcgRXJyb3Ioa3QpO3Rocm93IGN0Lmhhc2g9bXQsY3R9fSxwYXJzZTpmdW5jdGlvbihrdCl7dmFyIG10PXRoaXMsY3Q9WzBdLHl0PVtdLHN0PVtudWxsXSx4dD1bXSxodD10aGlzLnRhYmxlLGR0PSIiLEN0PTAsdHQ9MCxQdD0yLHB0PTEsRnQ9eHQuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksWD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLFJ0PXt5eTp7fX07Zm9yKHZhciBCdCBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LEJ0KSYmKFJ0Lnl5W0J0XT10aGlzLnl5W0J0XSk7WC5zZXRJbnB1dChrdCxSdC55eSksUnQueXkubGV4ZXI9WCxSdC55eS5wYXJzZXI9dGhpcyx0eXBlb2YgWC55eWxsb2M+InUiJiYoWC55eWxsb2M9e30pO3ZhciB2dD1YLnl5bGxvYzt4dC5wdXNoKHZ0KTt2YXIgT3Q9WC5vcHRpb25zJiZYLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBSdC55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1SdC55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBWdCgpe3ZhciBDZTtyZXR1cm4gQ2U9eXQucG9wKCl8fFgubGV4KCl8fHB0LHR5cGVvZiBDZSE9Im51bWJlciImJihDZSBpbnN0YW5jZW9mIEFycmF5JiYoeXQ9Q2UsQ2U9eXQucG9wKCkpLENlPW10LnN5bWJvbHNfW0NlXXx8Q2UpLENlfWZvcih2YXIgcWUsX24sVGUsV24sQWU9e30sbmUsa2UsVmUsRWU7Oyl7aWYoX249Y3RbY3QubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbX25dP1RlPXRoaXMuZGVmYXVsdEFjdGlvbnNbX25dOigocWU9PT1udWxsfHx0eXBlb2YgcWU+InUiKSYmKHFlPVZ0KCkpLFRlPWh0W19uXSYmaHRbX25dW3FlXSksdHlwZW9mIFRlPiJ1Inx8IVRlLmxlbmd0aHx8IVRlWzBdKXt2YXIgSGU9IiI7RWU9W107Zm9yKG5lIGluIGh0W19uXSl0aGlzLnRlcm1pbmFsc19bbmVdJiZuZT5QdCYmRWUucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW25lXSsiJyIpO1guc2hvd1Bvc2l0aW9uP0hlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKEN0KzEpK2A6CmArWC5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK0VlLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bcWVdfHxxZSkrIiciOkhlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKEN0KzEpKyI6IFVuZXhwZWN0ZWQgIisocWU9PXB0PyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW3FlXXx8cWUpKyInIiksdGhpcy5wYXJzZUVycm9yKEhlLHt0ZXh0OlgubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3FlXXx8cWUsbGluZTpYLnl5bGluZW5vLGxvYzp2dCxleHBlY3RlZDpFZX0pfWlmKFRlWzBdaW5zdGFuY2VvZiBBcnJheSYmVGUubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitfbisiLCB0b2tlbjogIitxZSk7c3dpdGNoKFRlWzBdKXtjYXNlIDE6Y3QucHVzaChxZSksc3QucHVzaChYLnl5dGV4dCkseHQucHVzaChYLnl5bGxvYyksY3QucHVzaChUZVsxXSkscWU9bnVsbCx0dD1YLnl5bGVuZyxkdD1YLnl5dGV4dCxDdD1YLnl5bGluZW5vLHZ0PVgueXlsbG9jO2JyZWFrO2Nhc2UgMjppZihrZT10aGlzLnByb2R1Y3Rpb25zX1tUZVsxXV1bMV0sQWUuJD1zdFtzdC5sZW5ndGgta2VdLEFlLl8kPXtmaXJzdF9saW5lOnh0W3h0Lmxlbmd0aC0oa2V8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTp4dFt4dC5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp4dFt4dC5sZW5ndGgtKGtlfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnh0W3h0Lmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sT3QmJihBZS5fJC5yYW5nZT1beHRbeHQubGVuZ3RoLShrZXx8MSldLnJhbmdlWzBdLHh0W3h0Lmxlbmd0aC0xXS5yYW5nZVsxXV0pLFduPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShBZSxbZHQsdHQsQ3QsUnQueXksVGVbMV0sc3QseHRdLmNvbmNhdChGdCkpLHR5cGVvZiBXbjwidSIpcmV0dXJuIFduO2tlJiYoY3Q9Y3Quc2xpY2UoMCwtMSprZSoyKSxzdD1zdC5zbGljZSgwLC0xKmtlKSx4dD14dC5zbGljZSgwLC0xKmtlKSksY3QucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tUZVsxXV1bMF0pLHN0LnB1c2goQWUuJCkseHQucHVzaChBZS5fJCksVmU9aHRbY3RbY3QubGVuZ3RoLTJdXVtjdFtjdC5sZW5ndGgtMV1dLGN0LnB1c2goVmUpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxpdD1mdW5jdGlvbigpe3ZhciBUdD17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihtdCxjdCl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihtdCxjdCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IobXQpfSxzZXRJbnB1dDpmdW5jdGlvbihrdCxtdCl7cmV0dXJuIHRoaXMueXk9bXR8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PWt0LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBrdD10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9a3QsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPWt0LHRoaXMubWF0Y2hlZCs9a3Q7dmFyIG10PWt0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gbXQ/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLGt0fSx1bnB1dDpmdW5jdGlvbihrdCl7dmFyIG10PWt0Lmxlbmd0aCxjdD1rdC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PWt0K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1tdCksdGhpcy5vZmZzZXQtPW10O3ZhciB5dD10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxjdC5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPWN0Lmxlbmd0aC0xKTt2YXIgc3Q9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmN0PyhjdC5sZW5ndGg9PT15dC5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3l0W3l0Lmxlbmd0aC1jdC5sZW5ndGhdLmxlbmd0aC1jdFswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLW10fSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3N0WzBdLHN0WzBdK3RoaXMueXlsZW5nLW10XSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24oa3Qpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShrdCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIga3Q9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihrdC5sZW5ndGg+MjA/Ii4uLiI6IiIpK2t0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIGt0PXRoaXMubWF0Y2g7cmV0dXJuIGt0Lmxlbmd0aDwyMCYmKGt0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1rdC5sZW5ndGgpKSwoa3Quc3Vic3RyKDAsMjApKyhrdC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGt0PXRoaXMucGFzdElucHV0KCksbXQ9bmV3IEFycmF5KGt0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIGt0K3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCttdCsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oa3QsbXQpe3ZhciBjdCx5dCxzdDtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoc3Q9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoc3QueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSkseXQ9a3RbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLHl0JiYodGhpcy55eWxpbmVubys9eXQubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46eXQ/eXRbeXQubGVuZ3RoLTFdLmxlbmd0aC15dFt5dC5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitrdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1rdFswXSx0aGlzLm1hdGNoKz1rdFswXSx0aGlzLm1hdGNoZXM9a3QsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2Uoa3RbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPWt0WzBdLGN0PXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLG10LHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLGN0KXJldHVybiBjdDtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgeHQgaW4gc3QpdGhpc1t4dF09c3RbeHRdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIGt0LG10LGN0LHl0O3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIHN0PXRoaXMuX2N1cnJlbnRSdWxlcygpLHh0PTA7eHQ8c3QubGVuZ3RoO3h0KyspaWYoY3Q9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tzdFt4dF1dKSxjdCYmKCFtdHx8Y3RbMF0ubGVuZ3RoPm10WzBdLmxlbmd0aCkpe2lmKG10PWN0LHl0PXh0LHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKGt0PXRoaXMudGVzdF9tYXRjaChjdCxzdFt4dF0pLGt0IT09ITEpcmV0dXJuIGt0O2lmKHRoaXMuX2JhY2t0cmFjayl7bXQ9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gbXQ/KGt0PXRoaXMudGVzdF9tYXRjaChtdCxzdFt5dF0pLGt0IT09ITE/a3Q6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciBtdD10aGlzLm5leHQoKTtyZXR1cm4gbXR8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKG10KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2gobXQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3ZhciBtdD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBtdD4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKG10KXtyZXR1cm4gbXQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhtdHx8MCksbXQ+PTA/dGhpcy5jb25kaXRpb25TdGFja1ttdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24obXQpe3RoaXMuYmVnaW4obXQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKG10LGN0LHl0LHN0KXtzd2l0Y2goeXQpe2Nhc2UgMDpyZXR1cm4gbXQuZ2V0TG9nZ2VyKCkudHJhY2UoIkZvdW5kIGNvbW1lbnQiLGN0Lnl5dGV4dCksNjtjYXNlIDE6cmV0dXJuIDg7Y2FzZSAyOnRoaXMuYmVnaW4oIkNMQVNTIik7YnJlYWs7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTY7Y2FzZSA0OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDU6bXQuZ2V0TG9nZ2VyKCkudHJhY2UoIkJlZ2luIGljb24iKSx0aGlzLmJlZ2luKCJJQ09OIik7YnJlYWs7Y2FzZSA2OnJldHVybiBtdC5nZXRMb2dnZXIoKS50cmFjZSgiU1BBQ0VMSU5FIiksNjtjYXNlIDc6cmV0dXJuIDc7Y2FzZSA4OnJldHVybiAxNTtjYXNlIDk6bXQuZ2V0TG9nZ2VyKCkudHJhY2UoImVuZCBpY29uIiksdGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTA6cmV0dXJuIG10LmdldExvZ2dlcigpLnRyYWNlKCJFeHBsb2Rpbmcgbm9kZSIpLHRoaXMuYmVnaW4oIk5PREUiKSwxOTtjYXNlIDExOnJldHVybiBtdC5nZXRMb2dnZXIoKS50cmFjZSgiQ2xvdWQiKSx0aGlzLmJlZ2luKCJOT0RFIiksMTk7Y2FzZSAxMjpyZXR1cm4gbXQuZ2V0TG9nZ2VyKCkudHJhY2UoIkV4cGxvc2lvbiBCYW5nIiksdGhpcy5iZWdpbigiTk9ERSIpLDE5O2Nhc2UgMTM6cmV0dXJuIG10LmdldExvZ2dlcigpLnRyYWNlKCJDbG91ZCBCYW5nIiksdGhpcy5iZWdpbigiTk9ERSIpLDE5O2Nhc2UgMTQ6cmV0dXJuIHRoaXMuYmVnaW4oIk5PREUiKSwxOTtjYXNlIDE1OnJldHVybiB0aGlzLmJlZ2luKCJOT0RFIiksMTk7Y2FzZSAxNjpyZXR1cm4gdGhpcy5iZWdpbigiTk9ERSIpLDE5O2Nhc2UgMTc6cmV0dXJuIHRoaXMuYmVnaW4oIk5PREUiKSwxOTtjYXNlIDE4OnJldHVybiAxMztjYXNlIDE5OnJldHVybiAyMjtjYXNlIDIwOnJldHVybiAxMTtjYXNlIDIxOnRoaXMuYmVnaW4oIk5TVFIyIik7YnJlYWs7Y2FzZSAyMjpyZXR1cm4iTk9ERV9ERVNDUiI7Y2FzZSAyMzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyNDptdC5nZXRMb2dnZXIoKS50cmFjZSgiU3RhcnRpbmcgTlNUUiIpLHRoaXMuYmVnaW4oIk5TVFIiKTticmVhaztjYXNlIDI1OnJldHVybiBtdC5nZXRMb2dnZXIoKS50cmFjZSgiZGVzY3JpcHRpb246IixjdC55eXRleHQpLCJOT0RFX0RFU0NSIjtjYXNlIDI2OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksbXQuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICkpIiksIk5PREVfREVORCI7Y2FzZSAyODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLG10LmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGVuZCApIiksIk5PREVfREVORCI7Y2FzZSAyOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLG10LmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGVuZCAuLi4iLGN0Lnl5dGV4dCksIk5PREVfREVORCI7Y2FzZSAzMDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLG10LmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGVuZCAoKCIpLCJOT0RFX0RFTkQiO2Nhc2UgMzE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxtdC5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKC0iKSwiTk9ERV9ERU5EIjtjYXNlIDMyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksbXQuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgtIiksIk5PREVfREVORCI7Y2FzZSAzMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLG10LmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGVuZCAoKCIpLCJOT0RFX0RFTkQiO2Nhc2UgMzQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxtdC5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKCgiKSwiTk9ERV9ERU5EIjtjYXNlIDM1OnJldHVybiBtdC5nZXRMb2dnZXIoKS50cmFjZSgiTG9uZyBkZXNjcmlwdGlvbjoiLGN0Lnl5dGV4dCksMjA7Y2FzZSAzNjpyZXR1cm4gbXQuZ2V0TG9nZ2VyKCkudHJhY2UoIkxvbmcgZGVzY3JpcHRpb246IixjdC55eXRleHQpLDIwfX0scnVsZXM6Wy9eKD86XHMqJSUuKikvaSwvXig/Om1pbmRtYXBcYikvaSwvXig/Ojo6OikvaSwvXig/Oi4rKS9pLC9eKD86XG4pL2ksL14oPzo6Omljb25cKCkvaSwvXig/Oltcc10rW1xuXSkvaSwvXig/Oltcbl0rKS9pLC9eKD86W15cKV0rKS9pLC9eKD86XCkpL2ksL14oPzotXCkpL2ksL14oPzpcKC0pL2ksL14oPzpcKVwpKS9pLC9eKD86XCkpL2ksL14oPzpcKFwoKS9pLC9eKD86XHtceykvaSwvXig/OlwoKS9pLC9eKD86XFspL2ksL14oPzpbXHNdKykvaSwvXig/OlteXChcW1xuXClce1x9XSspL2ksL14oPzokKS9pLC9eKD86WyJdW2BdKS9pLC9eKD86W15gIl0rKS9pLC9eKD86W2BdWyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSspL2ksL14oPzpbIl0pL2ksL14oPzpbXCldXCkpL2ksL14oPzpbXCldKS9pLC9eKD86W1xdXSkvaSwvXig/Olx9XH0pL2ksL14oPzpcKC0pL2ksL14oPzotXCkpL2ksL14oPzpcKFwoKS9pLC9eKD86XCgpL2ksL14oPzpbXlwpXF1cKFx9XSspL2ksL14oPzouKyg/IVwoXCgpKS9pXSxjb25kaXRpb25zOntDTEFTUzp7cnVsZXM6WzMsNF0saW5jbHVzaXZlOiExfSxJQ09OOntydWxlczpbOCw5XSxpbmNsdXNpdmU6ITF9LE5TVFIyOntydWxlczpbMjIsMjNdLGluY2x1c2l2ZTohMX0sTlNUUjp7cnVsZXM6WzI1LDI2XSxpbmNsdXNpdmU6ITF9LE5PREU6e3J1bGVzOlsyMSwyNCwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNl0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsNSw2LDcsMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjBdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gVHR9KCk7Si5sZXhlcj1pdDtmdW5jdGlvbiBmdCgpe3RoaXMueXk9e319cmV0dXJuIGZ0LnByb3RvdHlwZT1KLEouUGFyc2VyPWZ0LG5ldyBmdH0oKTtqZ3QucGFyc2VyPWpndDtjb25zdCBxVWU9amd0LFdQPWk9PnYwKGksRGUoKSk7bGV0IGF2PVtdLHpqdD0wLCRndD17fTtjb25zdCBIVWU9KCk9Pnthdj1bXSx6anQ9MCwkZ3Q9e319LFZVZT1mdW5jdGlvbihpKXtmb3IobGV0IGE9YXYubGVuZ3RoLTE7YT49MDthLS0paWYoYXZbYV0ubGV2ZWw8aSlyZXR1cm4gYXZbYV07cmV0dXJuIG51bGx9LEdVZT0oKT0+YXYubGVuZ3RoPjA/YXZbMF06bnVsbCxVVWU9KGksYSxmLHApPT57V3QuaW5mbygiYWRkTm9kZSIsaSxhLGYscCk7Y29uc3Qgdj1EZSgpLG09e2lkOnpqdCsrLG5vZGVJZDpXUChhKSxsZXZlbDppLGRlc2NyOldQKGYpLHR5cGU6cCxjaGlsZHJlbjpbXSx3aWR0aDpEZSgpLm1pbmRtYXAubWF4Tm9kZVdpZHRofTtzd2l0Y2gobS50eXBlKXtjYXNlIFp1LlJPVU5ERURfUkVDVDptLnBhZGRpbmc9Mip2Lm1pbmRtYXAucGFkZGluZzticmVhaztjYXNlIFp1LlJFQ1Q6bS5wYWRkaW5nPTIqdi5taW5kbWFwLnBhZGRpbmc7YnJlYWs7Y2FzZSBadS5IRVhBR09OOm0ucGFkZGluZz0yKnYubWluZG1hcC5wYWRkaW5nO2JyZWFrO2RlZmF1bHQ6bS5wYWRkaW5nPXYubWluZG1hcC5wYWRkaW5nfWNvbnN0IGI9VlVlKGkpO2lmKGIpYi5jaGlsZHJlbi5wdXNoKG0pLGF2LnB1c2gobSk7ZWxzZSBpZihhdi5sZW5ndGg9PT0wKWF2LnB1c2gobSk7ZWxzZXtsZXQgRT1uZXcgRXJyb3IoJ1RoZXJlIGNhbiBiZSBvbmx5IG9uZSByb290LiBObyBwYXJlbnQgY291bGQgYmUgZm91bmQgZm9yICgiJyttLmRlc2NyKyciKScpO3Rocm93IEUuaGFzaD17dGV4dDoiYnJhbmNoICIrbmFtZSx0b2tlbjoiYnJhbmNoICIrbmFtZSxsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbJyJjaGVja291dCAnK25hbWUrJyInXX0sRX19LFp1PXtERUZBVUxUOjAsTk9fQk9SREVSOjAsUk9VTkRFRF9SRUNUOjEsUkVDVDoyLENJUkNMRTozLENMT1VEOjQsQkFORzo1LEhFWEFHT046Nn0sV1VlPShpLGEpPT57c3dpdGNoKFd0LmRlYnVnKCJJbiBnZXQgdHlwZSIsaSxhKSxpKXtjYXNlIlsiOnJldHVybiBadS5SRUNUO2Nhc2UiKCI6cmV0dXJuIGE9PT0iKSI/WnUuUk9VTkRFRF9SRUNUOlp1LkNMT1VEO2Nhc2UiKCgiOnJldHVybiBadS5DSVJDTEU7Y2FzZSIpIjpyZXR1cm4gWnUuQ0xPVUQ7Y2FzZSIpKSI6cmV0dXJuIFp1LkJBTkc7Y2FzZSJ7eyI6cmV0dXJuIFp1LkhFWEFHT047ZGVmYXVsdDpyZXR1cm4gWnUuREVGQVVMVH19LHFqdD0oaSxhKT0+eyRndFtpXT1hfSxLVWU9aT0+e2NvbnN0IGE9YXZbYXYubGVuZ3RoLTFdO2kmJmkuaWNvbiYmKGEuaWNvbj1XUChpLmljb24pKSxpJiZpLmNsYXNzJiYoYS5jbGFzcz1XUChpLmNsYXNzKSl9LF85PWk9Pntzd2l0Y2goaSl7Y2FzZSBadS5ERUZBVUxUOnJldHVybiJuby1ib3JkZXIiO2Nhc2UgWnUuUkVDVDpyZXR1cm4icmVjdCI7Y2FzZSBadS5ST1VOREVEX1JFQ1Q6cmV0dXJuInJvdW5kZWQtcmVjdCI7Y2FzZSBadS5DSVJDTEU6cmV0dXJuImNpcmNsZSI7Y2FzZSBadS5DTE9VRDpyZXR1cm4iY2xvdWQiO2Nhc2UgWnUuQkFORzpyZXR1cm4iYmFuZyI7Y2FzZSBadS5IRVhBR09OOnJldHVybiJoZXhnb24iO2RlZmF1bHQ6cmV0dXJuIm5vLWJvcmRlciJ9fTtsZXQgSGp0O2NvbnN0IFlVZT1pPT57SGp0PWl9LFhVZT0oKT0+V3QsUVVlPWk9PmF2W2ldLHpndD1pPT4kZ3RbaV0sWlVlPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxhZGROb2RlOlVVZSxjbGVhcjpIVWUsZGVjb3JhdGVOb2RlOktVZSxnZXRFbGVtZW50QnlJZDp6Z3QsZ2V0TG9nZ2VyOlhVZSxnZXRNaW5kbWFwOkdVZSxnZXROb2RlQnlJZDpRVWUsZ2V0VHlwZTpXVWUsbm9kZVR5cGU6WnUsZ2V0IHBhcnNlRXJyb3IoKXtyZXR1cm4gSGp0fSxzYW5pdGl6ZVRleHQ6V1Asc2V0RWxlbWVudEZvcklkOnFqdCxzZXRFcnJvckhhbmRsZXI6WVVlLHR5cGUyU3RyOl85fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLFZqdD0xMixKVWU9ZnVuY3Rpb24oaSxhLGYpe2kuYXBwZW5kKCJwYXRoIikuYXR0cigiaWQiLCJub2RlLSIrYS5pZCkuYXR0cigiY2xhc3MiLCJub2RlLWJrZyBub2RlLSIrXzkoYS50eXBlKSkuYXR0cigiZCIsYE0wICR7YS5oZWlnaHQtNX0gdiR7LWEuaGVpZ2h0KzIqNX0gcTAsLTUgNSwtNSBoJHthLndpZHRoLTIqNX0gcTUsMCA1LDUgdiR7YS5oZWlnaHQtNX0gSDAgWmApLGkuYXBwZW5kKCJsaW5lIikuYXR0cigiY2xhc3MiLCJub2RlLWxpbmUtIitmKS5hdHRyKCJ4MSIsMCkuYXR0cigieTEiLGEuaGVpZ2h0KS5hdHRyKCJ4MiIsYS53aWR0aCkuYXR0cigieTIiLGEuaGVpZ2h0KX0sdFdlPWZ1bmN0aW9uKGksYSl7aS5hcHBlbmQoInJlY3QiKS5hdHRyKCJpZCIsIm5vZGUtIithLmlkKS5hdHRyKCJjbGFzcyIsIm5vZGUtYmtnIG5vZGUtIitfOShhLnR5cGUpKS5hdHRyKCJoZWlnaHQiLGEuaGVpZ2h0KS5hdHRyKCJ3aWR0aCIsYS53aWR0aCl9LGVXZT1mdW5jdGlvbihpLGEpe2NvbnN0IGY9YS53aWR0aCxwPWEuaGVpZ2h0LHY9LjE1KmYsbT0uMjUqZixiPS4zNSpmLEU9LjIqZjtpLmFwcGVuZCgicGF0aCIpLmF0dHIoImlkIiwibm9kZS0iK2EuaWQpLmF0dHIoImNsYXNzIiwibm9kZS1ia2cgbm9kZS0iK185KGEudHlwZSkpLmF0dHIoImQiLGBNMCAwIGEke3Z9LCR7dn0gMCAwLDEgJHtmKi4yNX0sJHstMSpmKi4xfQogICAgICBhJHtifSwke2J9IDEgMCwxICR7ZiouNH0sJHstMSpmKi4xfQogICAgICBhJHttfSwke219IDEgMCwxICR7ZiouMzV9LCR7MSpmKi4yfQoKICAgICAgYSR7dn0sJHt2fSAxIDAsMSAke2YqLjE1fSwkezEqcCouMzV9CiAgICAgIGEke0V9LCR7RX0gMSAwLDEgJHstMSpmKi4xNX0sJHsxKnAqLjY1fQoKICAgICAgYSR7bX0sJHt2fSAxIDAsMSAkey0xKmYqLjI1fSwke2YqLjE1fQogICAgICBhJHtifSwke2J9IDEgMCwxICR7LTEqZiouNX0sMAogICAgICBhJHt2fSwke3Z9IDEgMCwxICR7LTEqZiouMjV9LCR7LTEqZiouMTV9CgogICAgICBhJHt2fSwke3Z9IDEgMCwxICR7LTEqZiouMX0sJHstMSpwKi4zNX0KICAgICAgYSR7RX0sJHtFfSAxIDAsMSAke2YqLjF9LCR7LTEqcCouNjV9CgogICAgSDAgVjAgWmApfSxuV2U9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPWEud2lkdGgscD1hLmhlaWdodCx2PS4xNSpmO2kuYXBwZW5kKCJwYXRoIikuYXR0cigiaWQiLCJub2RlLSIrYS5pZCkuYXR0cigiY2xhc3MiLCJub2RlLWJrZyBub2RlLSIrXzkoYS50eXBlKSkuYXR0cigiZCIsYE0wIDAgYSR7dn0sJHt2fSAxIDAsMCAke2YqLjI1fSwkey0xKnAqLjF9CiAgICAgIGEke3Z9LCR7dn0gMSAwLDAgJHtmKi4yNX0sMAogICAgICBhJHt2fSwke3Z9IDEgMCwwICR7ZiouMjV9LDAKICAgICAgYSR7dn0sJHt2fSAxIDAsMCAke2YqLjI1fSwkezEqcCouMX0KCiAgICAgIGEke3Z9LCR7dn0gMSAwLDAgJHtmKi4xNX0sJHsxKnAqLjMzfQogICAgICBhJHt2Ki44fSwke3YqLjh9IDEgMCwwIDAsJHsxKnAqLjM0fQogICAgICBhJHt2fSwke3Z9IDEgMCwwICR7LTEqZiouMTV9LCR7MSpwKi4zM30KCiAgICAgIGEke3Z9LCR7dn0gMSAwLDAgJHstMSpmKi4yNX0sJHtwKi4xNX0KICAgICAgYSR7dn0sJHt2fSAxIDAsMCAkey0xKmYqLjI1fSwwCiAgICAgIGEke3Z9LCR7dn0gMSAwLDAgJHstMSpmKi4yNX0sMAogICAgICBhJHt2fSwke3Z9IDEgMCwwICR7LTEqZiouMjV9LCR7LTEqcCouMTV9CgogICAgICBhJHt2fSwke3Z9IDEgMCwwICR7LTEqZiouMX0sJHstMSpwKi4zM30KICAgICAgYSR7diouOH0sJHt2Ki44fSAxIDAsMCAwLCR7LTEqcCouMzR9CiAgICAgIGEke3Z9LCR7dn0gMSAwLDAgJHtmKi4xfSwkey0xKnAqLjMzfQoKICAgIEgwIFYwIFpgKX0scldlPWZ1bmN0aW9uKGksYSl7aS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImlkIiwibm9kZS0iK2EuaWQpLmF0dHIoImNsYXNzIiwibm9kZS1ia2cgbm9kZS0iK185KGEudHlwZSkpLmF0dHIoInIiLGEud2lkdGgvMil9O2Z1bmN0aW9uIGlXZShpLGEsZixwLHYpe3JldHVybiBpLmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIscC5tYXAoZnVuY3Rpb24obSl7cmV0dXJuIG0ueCsiLCIrbS55fSkuam9pbigiICIpKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisodi53aWR0aC1hKS8yKyIsICIrZisiKSIpfWNvbnN0IHNXZT1mdW5jdGlvbihpLGEpe2NvbnN0IGY9YS5oZWlnaHQsdj1mLzQsbT1hLndpZHRoLWEucGFkZGluZysyKnYsYj1be3g6dix5OjB9LHt4Om0tdix5OjB9LHt4Om0seTotZi8yfSx7eDptLXYseTotZn0se3g6dix5Oi1mfSx7eDowLHk6LWYvMn1dO2lXZShpLG0sZixiLGEpfSxhV2U9ZnVuY3Rpb24oaSxhKXtpLmFwcGVuZCgicmVjdCIpLmF0dHIoImlkIiwibm9kZS0iK2EuaWQpLmF0dHIoImNsYXNzIiwibm9kZS1ia2cgbm9kZS0iK185KGEudHlwZSkpLmF0dHIoImhlaWdodCIsYS5oZWlnaHQpLmF0dHIoInJ4IixhLnBhZGRpbmcpLmF0dHIoInJ5IixhLnBhZGRpbmcpLmF0dHIoIndpZHRoIixhLndpZHRoKX0sR2p0PXtkcmF3Tm9kZTpmdW5jdGlvbihpLGEsZixwKXtjb25zdCB2PXAuaHRtbExhYmVscyxtPWYlKFZqdC0xKSxiPWkuYXBwZW5kKCJnIik7YS5zZWN0aW9uPW07bGV0IEU9InNlY3Rpb24tIittO208MCYmKEUrPSIgc2VjdGlvbi1yb290IiksYi5hdHRyKCJjbGFzcyIsKGEuY2xhc3M/YS5jbGFzcysiICI6IiIpKyJtaW5kbWFwLW5vZGUgIitFKTtjb25zdCBDPWIuYXBwZW5kKCJnIiksQT1iLmFwcGVuZCgiZyIpLFA9YS5kZXNjci5yZXBsYWNlKC8oPGJyXC8qPikvZyxgCmApO3ZLKEEsUCx7dXNlSHRtbExhYmVsczp2LHdpZHRoOmEud2lkdGgsY2xhc3NlczoibWluZG1hcC1ub2RlLWxhYmVsIn0pLHZ8fEEuYXR0cigiZHkiLCIxZW0iKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIik7Y29uc3QgRj1BLm5vZGUoKS5nZXRCQm94KCksaj1wLmZvbnRTaXplLnJlcGxhY2U/cC5mb250U2l6ZS5yZXBsYWNlKCJweCIsIiIpOnAuZm9udFNpemU7aWYoYS5oZWlnaHQ9Ri5oZWlnaHQraioxLjEqLjUrYS5wYWRkaW5nLGEud2lkdGg9Ri53aWR0aCsyKmEucGFkZGluZyxhLmljb24paWYoYS50eXBlPT09WnUuQ0lSQ0xFKWEuaGVpZ2h0Kz01MCxhLndpZHRoKz01MCxiLmFwcGVuZCgiZm9yZWlnbk9iamVjdCIpLmF0dHIoImhlaWdodCIsIjUwcHgiKS5hdHRyKCJ3aWR0aCIsYS53aWR0aCkuYXR0cigic3R5bGUiLCJ0ZXh0LWFsaWduOiBjZW50ZXI7IikuYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsImljb24tY29udGFpbmVyIikuYXBwZW5kKCJpIikuYXR0cigiY2xhc3MiLCJub2RlLWljb24tIittKyIgIithLmljb24pLEEuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYS53aWR0aC8yKyIsICIrKGEuaGVpZ2h0LzItMS41KmEucGFkZGluZykrIikiKTtlbHNle2Eud2lkdGgrPTUwO2NvbnN0IFI9YS5oZWlnaHQ7YS5oZWlnaHQ9TWF0aC5tYXgoUiw2MCk7Y29uc3QgSD1NYXRoLmFicyhhLmhlaWdodC1SKTtiLmFwcGVuZCgiZm9yZWlnbk9iamVjdCIpLmF0dHIoIndpZHRoIiwiNjBweCIpLmF0dHIoImhlaWdodCIsYS5oZWlnaHQpLmF0dHIoInN0eWxlIiwidGV4dC1hbGlnbjogY2VudGVyO21hcmdpbi10b3A6IitILzIrInB4OyIpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJpY29uLWNvbnRhaW5lciIpLmFwcGVuZCgiaSIpLmF0dHIoImNsYXNzIiwibm9kZS1pY29uLSIrbSsiICIrYS5pY29uKSxBLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKygyNSthLndpZHRoLzIpKyIsICIrKEgvMithLnBhZGRpbmcvMikrIikiKX1lbHNlIGlmKHYpe2NvbnN0IFI9KGEud2lkdGgtRi53aWR0aCkvMixIPShhLmhlaWdodC1GLmhlaWdodCkvMjtBLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1IrIiwgIitIKyIpIil9ZWxzZXtjb25zdCBSPWEud2lkdGgvMixIPWEucGFkZGluZy8yO0EuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrUisiLCAiK0grIikiKX1zd2l0Y2goYS50eXBlKXtjYXNlIFp1LkRFRkFVTFQ6SlVlKEMsYSxtKTticmVhaztjYXNlIFp1LlJPVU5ERURfUkVDVDphV2UoQyxhKTticmVhaztjYXNlIFp1LlJFQ1Q6dFdlKEMsYSk7YnJlYWs7Y2FzZSBadS5DSVJDTEU6Qy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIithLndpZHRoLzIrIiwgIisgK2EuaGVpZ2h0LzIrIikiKSxyV2UoQyxhKTticmVhaztjYXNlIFp1LkNMT1VEOmVXZShDLGEpO2JyZWFrO2Nhc2UgWnUuQkFORzpuV2UoQyxhKTticmVhaztjYXNlIFp1LkhFWEFHT046c1dlKEMsYSk7YnJlYWt9cmV0dXJuIHFqdChhLmlkLGIpLGEuaGVpZ2h0fSxwb3NpdGlvbk5vZGU6ZnVuY3Rpb24oaSl7Y29uc3QgYT16Z3QoaS5pZCksZj1pLnh8fDAscD1pLnl8fDA7YS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitmKyIsIitwKyIpIil9LGRyYXdFZGdlOmZ1bmN0aW9uKGEsZixwLHYsbSl7Y29uc3QgYj1tJShWanQtMSksRT1wLngrcC53aWR0aC8yLEM9cC55K3AuaGVpZ2h0LzIsQT1mLngrZi53aWR0aC8yLFA9Zi55K2YuaGVpZ2h0LzIsRj1BPkU/RStNYXRoLmFicyhFLUEpLzI6RS1NYXRoLmFicyhFLUEpLzIsaj1QPkM/QytNYXRoLmFicyhDLVApLzI6Qy1NYXRoLmFicyhDLVApLzIsUj1BPkU/TWF0aC5hYnMoRS1GKS8yK0U6LU1hdGguYWJzKEUtRikvMitFLEg9UD5DP01hdGguYWJzKEMtaikvMitDOi1NYXRoLmFicyhDLWopLzIrQzthLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLHAuZGlyZWN0aW9uPT09IlRCInx8cC5kaXJlY3Rpb249PT0iQlQiP2BNJHtFfSwke0N9IFEke0V9LCR7SH0gJHtGfSwke2p9IFQke0F9LCR7UH1gOmBNJHtFfSwke0N9IFEke1J9LCR7Q30gJHtGfSwke2p9IFQke0F9LCR7UH1gKS5hdHRyKCJjbGFzcyIsImVkZ2Ugc2VjdGlvbi1lZGdlLSIrYisiIGVkZ2UtZGVwdGgtIit2KX19O3ZhciBVanQ9e2V4cG9ydHM6e319OyhmdW5jdGlvbihpLGEpeyhmdW5jdGlvbihmLHApe2kuZXhwb3J0cz1wKCl9KShkMCxmdW5jdGlvbigpe2Z1bmN0aW9uIGYoeSl7cmV0dXJuIGY9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmdHlwZW9mIFN5bWJvbC5pdGVyYXRvcj09InN5bWJvbCI/ZnVuY3Rpb24oZyl7cmV0dXJuIHR5cGVvZiBnfTpmdW5jdGlvbihnKXtyZXR1cm4gZyYmdHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmZy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGd9LGYoeSl9ZnVuY3Rpb24gcCh5LGcpe2lmKCEoeSBpbnN0YW5jZW9mIGcpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHYoeSxnKXtmb3IodmFyIHg9MDt4PGcubGVuZ3RoO3grKyl7dmFyIFQ9Z1t4XTtULmVudW1lcmFibGU9VC5lbnVtZXJhYmxlfHwhMSxULmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gVCYmKFQud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LFQua2V5LFQpfX1mdW5jdGlvbiBtKHksZyx4KXtyZXR1cm4gZyYmdih5LnByb3RvdHlwZSxnKSx4JiZ2KHkseCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHksInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSkseX1mdW5jdGlvbiBiKHksZyx4KXtyZXR1cm4gZyBpbiB5P09iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LGcse3ZhbHVlOngsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTp5W2ddPXgseX1mdW5jdGlvbiBFKHksZyl7cmV0dXJuIEMoeSl8fEEoeSxnKXx8UCh5LGcpfHxqKCl9ZnVuY3Rpb24gQyh5KXtpZihBcnJheS5pc0FycmF5KHkpKXJldHVybiB5fWZ1bmN0aW9uIEEoeSxnKXt2YXIgeD15PT1udWxsP251bGw6dHlwZW9mIFN5bWJvbDwidSImJnlbU3ltYm9sLml0ZXJhdG9yXXx8eVsiQEBpdGVyYXRvciJdO2lmKHghPW51bGwpe3ZhciBUPVtdLEw9ITAsST0hMSxPLCQ7dHJ5e2Zvcih4PXguY2FsbCh5KTshKEw9KE89eC5uZXh0KCkpLmRvbmUpJiYoVC5wdXNoKE8udmFsdWUpLCEoZyYmVC5sZW5ndGg9PT1nKSk7TD0hMCk7fWNhdGNoKHope0k9ITAsJD16fWZpbmFsbHl7dHJ5eyFMJiZ4LnJldHVybiE9bnVsbCYmeC5yZXR1cm4oKX1maW5hbGx5e2lmKEkpdGhyb3cgJH19cmV0dXJuIFR9fWZ1bmN0aW9uIFAoeSxnKXtpZih5KXtpZih0eXBlb2YgeT09InN0cmluZyIpcmV0dXJuIEYoeSxnKTt2YXIgeD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeSkuc2xpY2UoOCwtMSk7aWYoeD09PSJPYmplY3QiJiZ5LmNvbnN0cnVjdG9yJiYoeD15LmNvbnN0cnVjdG9yLm5hbWUpLHg9PT0iTWFwInx8eD09PSJTZXQiKXJldHVybiBBcnJheS5mcm9tKHkpO2lmKHg9PT0iQXJndW1lbnRzInx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoeCkpcmV0dXJuIEYoeSxnKX19ZnVuY3Rpb24gRih5LGcpeyhnPT1udWxsfHxnPnkubGVuZ3RoKSYmKGc9eS5sZW5ndGgpO2Zvcih2YXIgeD0wLFQ9bmV3IEFycmF5KGcpO3g8Zzt4KyspVFt4XT15W3hdO3JldHVybiBUfWZ1bmN0aW9uIGooKXt0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLgpJbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuYCl9dmFyIFI9dHlwZW9mIHdpbmRvdz4idSI/bnVsbDp3aW5kb3csSD1SP1IubmF2aWdhdG9yOm51bGw7UiYmUi5kb2N1bWVudDt2YXIgWT1mKCIiKSxydD1mKHt9KSxKPWYoZnVuY3Rpb24oKXt9KSxpdD10eXBlb2YgSFRNTEVsZW1lbnQ+InUiPyJ1bmRlZmluZWQiOmYoSFRNTEVsZW1lbnQpLGZ0PWZ1bmN0aW9uKGcpe3JldHVybiBnJiZnLmluc3RhbmNlU3RyaW5nJiZrdChnLmluc3RhbmNlU3RyaW5nKT9nLmluc3RhbmNlU3RyaW5nKCk6bnVsbH0sVHQ9ZnVuY3Rpb24oZyl7cmV0dXJuIGchPW51bGwmJmYoZyk9PVl9LGt0PWZ1bmN0aW9uKGcpe3JldHVybiBnIT1udWxsJiZmKGcpPT09Sn0sbXQ9ZnVuY3Rpb24oZyl7cmV0dXJuIWR0KGcpJiYoQXJyYXkuaXNBcnJheT9BcnJheS5pc0FycmF5KGcpOmchPW51bGwmJmcgaW5zdGFuY2VvZiBBcnJheSl9LGN0PWZ1bmN0aW9uKGcpe3JldHVybiBnIT1udWxsJiZmKGcpPT09cnQmJiFtdChnKSYmZy5jb25zdHJ1Y3Rvcj09PU9iamVjdH0seXQ9ZnVuY3Rpb24oZyl7cmV0dXJuIGchPW51bGwmJmYoZyk9PT1ydH0sc3Q9ZnVuY3Rpb24oZyl7cmV0dXJuIGchPW51bGwmJmYoZyk9PT1mKDEpJiYhaXNOYU4oZyl9LHh0PWZ1bmN0aW9uKGcpe3JldHVybiBzdChnKSYmTWF0aC5mbG9vcihnKT09PWd9LGh0PWZ1bmN0aW9uKGcpe2lmKGl0IT09InVuZGVmaW5lZCIpcmV0dXJuIGchPW51bGwmJmcgaW5zdGFuY2VvZiBIVE1MRWxlbWVudH0sZHQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEN0KGcpfHx0dChnKX0sQ3Q9ZnVuY3Rpb24oZyl7cmV0dXJuIGZ0KGcpPT09ImNvbGxlY3Rpb24iJiZnLl9wcml2YXRlLnNpbmdsZX0sdHQ9ZnVuY3Rpb24oZyl7cmV0dXJuIGZ0KGcpPT09ImNvbGxlY3Rpb24iJiYhZy5fcHJpdmF0ZS5zaW5nbGV9LFB0PWZ1bmN0aW9uKGcpe3JldHVybiBmdChnKT09PSJjb3JlIn0scHQ9ZnVuY3Rpb24oZyl7cmV0dXJuIGZ0KGcpPT09InN0eWxlc2hlZXQifSxGdD1mdW5jdGlvbihnKXtyZXR1cm4gZnQoZyk9PT0iZXZlbnQifSxYPWZ1bmN0aW9uKGcpe3JldHVybiBnPT1udWxsPyEwOiEhKGc9PT0iInx8Zy5tYXRjaCgvXlxzKyQvKSl9LFJ0PWZ1bmN0aW9uKGcpe3JldHVybiB0eXBlb2YgSFRNTEVsZW1lbnQ+InUiPyExOmcgaW5zdGFuY2VvZiBIVE1MRWxlbWVudH0sQnQ9ZnVuY3Rpb24oZyl7cmV0dXJuIGN0KGcpJiZzdChnLngxKSYmc3QoZy54MikmJnN0KGcueTEpJiZzdChnLnkyKX0sdnQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHl0KGcpJiZrdChnLnRoZW4pfSxPdD1mdW5jdGlvbigpe3JldHVybiBIJiZILnVzZXJBZ2VudC5tYXRjaCgvbXNpZXx0cmlkZW50fGVkZ2UvaSl9LFZ0PWZ1bmN0aW9uKGcseCl7eHx8KHg9ZnVuY3Rpb24oKXtpZihhcmd1bWVudHMubGVuZ3RoPT09MSlyZXR1cm4gYXJndW1lbnRzWzBdO2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0wKXJldHVybiJ1bmRlZmluZWQiO2Zvcih2YXIgST1bXSxPPTA7Tzxhcmd1bWVudHMubGVuZ3RoO08rKylJLnB1c2goYXJndW1lbnRzW09dKTtyZXR1cm4gSS5qb2luKCIkIil9KTt2YXIgVD1mdW5jdGlvbiBMKCl7dmFyIEk9dGhpcyxPPWFyZ3VtZW50cywkLHo9eC5hcHBseShJLE8pLFM9TC5jYWNoZTtyZXR1cm4oJD1TW3pdKXx8KCQ9U1t6XT1nLmFwcGx5KEksTykpLCR9O3JldHVybiBULmNhY2hlPXt9LFR9LHFlPVZ0KGZ1bmN0aW9uKHkpe3JldHVybiB5LnJlcGxhY2UoLyhbQS1aXSkvZyxmdW5jdGlvbihnKXtyZXR1cm4iLSIrZy50b0xvd2VyQ2FzZSgpfSl9KSxfbj1WdChmdW5jdGlvbih5KXtyZXR1cm4geS5yZXBsYWNlKC8oLVx3KS9nLGZ1bmN0aW9uKGcpe3JldHVybiBnWzFdLnRvVXBwZXJDYXNlKCl9KX0pLFRlPVZ0KGZ1bmN0aW9uKHksZyl7cmV0dXJuIHkrZ1swXS50b1VwcGVyQ2FzZSgpK2cuc3Vic3RyaW5nKDEpfSxmdW5jdGlvbih5LGcpe3JldHVybiB5KyIkIitnfSksV249ZnVuY3Rpb24oZyl7cmV0dXJuIFgoZyk/ZzpnLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2cuc3Vic3RyaW5nKDEpfSxBZT0iKD86Wy0rXT8oPzooPzpcXGQrfFxcZCpcXC5cXGQrKSg/OltFZV1bKy1dP1xcZCspPykpIixuZT0icmdiW2FdP1xcKCgiK0FlKyJbJV0/KVxccyosXFxzKigiK0FlKyJbJV0/KVxccyosXFxzKigiK0FlKyJbJV0/KSg/OlxccyosXFxzKigiK0FlKyIpKT9cXCkiLGtlPSJyZ2JbYV0/XFwoKD86IitBZSsiWyVdPylcXHMqLFxccyooPzoiK0FlKyJbJV0/KVxccyosXFxzKig/OiIrQWUrIlslXT8pKD86XFxzKixcXHMqKD86IitBZSsiKSk/XFwpIixWZT0iaHNsW2FdP1xcKCgiK0FlKyIpXFxzKixcXHMqKCIrQWUrIlslXSlcXHMqLFxccyooIitBZSsiWyVdKSg/OlxccyosXFxzKigiK0FlKyIpKT9cXCkiLEVlPSJoc2xbYV0/XFwoKD86IitBZSsiKVxccyosXFxzKig/OiIrQWUrIlslXSlcXHMqLFxccyooPzoiK0FlKyJbJV0pKD86XFxzKixcXHMqKD86IitBZSsiKSk/XFwpIixIZT0iXFwjWzAtOWEtZkEtRl17M30iLENlPSJcXCNbMC05YS1mQS1GXXs2fSIsJGU9ZnVuY3Rpb24oZyx4KXtyZXR1cm4gZzx4Py0xOmc+eD8xOjB9LHllPWZ1bmN0aW9uKGcseCl7cmV0dXJuLTEqJGUoZyx4KX0sZm49T2JqZWN0LmFzc2lnbiE9bnVsbD9PYmplY3QuYXNzaWduLmJpbmQoT2JqZWN0KTpmdW5jdGlvbih5KXtmb3IodmFyIGc9YXJndW1lbnRzLHg9MTt4PGcubGVuZ3RoO3grKyl7dmFyIFQ9Z1t4XTtpZihUIT1udWxsKWZvcih2YXIgTD1PYmplY3Qua2V5cyhUKSxJPTA7STxMLmxlbmd0aDtJKyspe3ZhciBPPUxbSV07eVtPXT1UW09dfX1yZXR1cm4geX0sWXQ9ZnVuY3Rpb24oZyl7aWYoISghKGcubGVuZ3RoPT09NHx8Zy5sZW5ndGg9PT03KXx8Z1swXSE9PSIjIikpe3ZhciB4PWcubGVuZ3RoPT09NCxULEwsSSxPPTE2O3JldHVybiB4PyhUPXBhcnNlSW50KGdbMV0rZ1sxXSxPKSxMPXBhcnNlSW50KGdbMl0rZ1syXSxPKSxJPXBhcnNlSW50KGdbM10rZ1szXSxPKSk6KFQ9cGFyc2VJbnQoZ1sxXStnWzJdLE8pLEw9cGFyc2VJbnQoZ1szXStnWzRdLE8pLEk9cGFyc2VJbnQoZ1s1XStnWzZdLE8pKSxbVCxMLEldfX0sTWk9ZnVuY3Rpb24oZyl7dmFyIHgsVCxMLEksTywkLHosUztmdW5jdGlvbiBWKGx0LGd0LEx0KXtyZXR1cm4gTHQ8MCYmKEx0Kz0xKSxMdD4xJiYoTHQtPTEpLEx0PDEvNj9sdCsoZ3QtbHQpKjYqTHQ6THQ8MS8yP2d0Okx0PDIvMz9sdCsoZ3QtbHQpKigyLzMtTHQpKjY6bHR9dmFyIFU9bmV3IFJlZ0V4cCgiXiIrVmUrIiQiKS5leGVjKGcpO2lmKFUpe2lmKFQ9cGFyc2VJbnQoVVsxXSksVDwwP1Q9KDM2MC0gLTEqVCUzNjApJTM2MDpUPjM2MCYmKFQ9VCUzNjApLFQvPTM2MCxMPXBhcnNlRmxvYXQoVVsyXSksTDwwfHxMPjEwMHx8KEw9TC8xMDAsST1wYXJzZUZsb2F0KFVbM10pLEk8MHx8ST4xMDApfHwoST1JLzEwMCxPPVVbNF0sTyE9PXZvaWQgMCYmKE89cGFyc2VGbG9hdChPKSxPPDB8fE8+MSkpKXJldHVybjtpZihMPT09MCkkPXo9Uz1NYXRoLnJvdW5kKEkqMjU1KTtlbHNle3ZhciBldD1JPC41P0kqKDErTCk6SStMLUkqTCxhdD0yKkktZXQ7JD1NYXRoLnJvdW5kKDI1NSpWKGF0LGV0LFQrMS8zKSksej1NYXRoLnJvdW5kKDI1NSpWKGF0LGV0LFQpKSxTPU1hdGgucm91bmQoMjU1KlYoYXQsZXQsVC0xLzMpKX14PVskLHosUyxPXX1yZXR1cm4geH0scXQ9ZnVuY3Rpb24oZyl7dmFyIHgsVD1uZXcgUmVnRXhwKCJeIituZSsiJCIpLmV4ZWMoZyk7aWYoVCl7eD1bXTtmb3IodmFyIEw9W10sST0xO0k8PTM7SSsrKXt2YXIgTz1UW0ldO2lmKE9bTy5sZW5ndGgtMV09PT0iJSImJihMW0ldPSEwKSxPPXBhcnNlRmxvYXQoTyksTFtJXSYmKE89Ty8xMDAqMjU1KSxPPDB8fE8+MjU1KXJldHVybjt4LnB1c2goTWF0aC5mbG9vcihPKSl9dmFyICQ9TFsxXXx8TFsyXXx8TFszXSx6PUxbMV0mJkxbMl0mJkxbM107aWYoJCYmIXopcmV0dXJuO3ZhciBTPVRbNF07aWYoUyE9PXZvaWQgMCl7aWYoUz1wYXJzZUZsb2F0KFMpLFM8MHx8Uz4xKXJldHVybjt4LnB1c2goUyl9fXJldHVybiB4fSx6aT1mdW5jdGlvbihnKXtyZXR1cm4ga2lbZy50b0xvd2VyQ2FzZSgpXX0sU2U9ZnVuY3Rpb24oZyl7cmV0dXJuKG10KGcpP2c6bnVsbCl8fHppKGcpfHxZdChnKXx8cXQoZyl8fE1pKGcpfSxraT17dHJhbnNwYXJlbnQ6WzAsMCwwLDBdLGFsaWNlYmx1ZTpbMjQwLDI0OCwyNTVdLGFudGlxdWV3aGl0ZTpbMjUwLDIzNSwyMTVdLGFxdWE6WzAsMjU1LDI1NV0sYXF1YW1hcmluZTpbMTI3LDI1NSwyMTJdLGF6dXJlOlsyNDAsMjU1LDI1NV0sYmVpZ2U6WzI0NSwyNDUsMjIwXSxiaXNxdWU6WzI1NSwyMjgsMTk2XSxibGFjazpbMCwwLDBdLGJsYW5jaGVkYWxtb25kOlsyNTUsMjM1LDIwNV0sYmx1ZTpbMCwwLDI1NV0sYmx1ZXZpb2xldDpbMTM4LDQzLDIyNl0sYnJvd246WzE2NSw0Miw0Ml0sYnVybHl3b29kOlsyMjIsMTg0LDEzNV0sY2FkZXRibHVlOls5NSwxNTgsMTYwXSxjaGFydHJldXNlOlsxMjcsMjU1LDBdLGNob2NvbGF0ZTpbMjEwLDEwNSwzMF0sY29yYWw6WzI1NSwxMjcsODBdLGNvcm5mbG93ZXJibHVlOlsxMDAsMTQ5LDIzN10sY29ybnNpbGs6WzI1NSwyNDgsMjIwXSxjcmltc29uOlsyMjAsMjAsNjBdLGN5YW46WzAsMjU1LDI1NV0sZGFya2JsdWU6WzAsMCwxMzldLGRhcmtjeWFuOlswLDEzOSwxMzldLGRhcmtnb2xkZW5yb2Q6WzE4NCwxMzQsMTFdLGRhcmtncmF5OlsxNjksMTY5LDE2OV0sZGFya2dyZWVuOlswLDEwMCwwXSxkYXJrZ3JleTpbMTY5LDE2OSwxNjldLGRhcmtraGFraTpbMTg5LDE4MywxMDddLGRhcmttYWdlbnRhOlsxMzksMCwxMzldLGRhcmtvbGl2ZWdyZWVuOls4NSwxMDcsNDddLGRhcmtvcmFuZ2U6WzI1NSwxNDAsMF0sZGFya29yY2hpZDpbMTUzLDUwLDIwNF0sZGFya3JlZDpbMTM5LDAsMF0sZGFya3NhbG1vbjpbMjMzLDE1MCwxMjJdLGRhcmtzZWFncmVlbjpbMTQzLDE4OCwxNDNdLGRhcmtzbGF0ZWJsdWU6WzcyLDYxLDEzOV0sZGFya3NsYXRlZ3JheTpbNDcsNzksNzldLGRhcmtzbGF0ZWdyZXk6WzQ3LDc5LDc5XSxkYXJrdHVycXVvaXNlOlswLDIwNiwyMDldLGRhcmt2aW9sZXQ6WzE0OCwwLDIxMV0sZGVlcHBpbms6WzI1NSwyMCwxNDddLGRlZXBza3libHVlOlswLDE5MSwyNTVdLGRpbWdyYXk6WzEwNSwxMDUsMTA1XSxkaW1ncmV5OlsxMDUsMTA1LDEwNV0sZG9kZ2VyYmx1ZTpbMzAsMTQ0LDI1NV0sZmlyZWJyaWNrOlsxNzgsMzQsMzRdLGZsb3JhbHdoaXRlOlsyNTUsMjUwLDI0MF0sZm9yZXN0Z3JlZW46WzM0LDEzOSwzNF0sZnVjaHNpYTpbMjU1LDAsMjU1XSxnYWluc2Jvcm86WzIyMCwyMjAsMjIwXSxnaG9zdHdoaXRlOlsyNDgsMjQ4LDI1NV0sZ29sZDpbMjU1LDIxNSwwXSxnb2xkZW5yb2Q6WzIxOCwxNjUsMzJdLGdyYXk6WzEyOCwxMjgsMTI4XSxncmV5OlsxMjgsMTI4LDEyOF0sZ3JlZW46WzAsMTI4LDBdLGdyZWVueWVsbG93OlsxNzMsMjU1LDQ3XSxob25leWRldzpbMjQwLDI1NSwyNDBdLGhvdHBpbms6WzI1NSwxMDUsMTgwXSxpbmRpYW5yZWQ6WzIwNSw5Miw5Ml0saW5kaWdvOls3NSwwLDEzMF0saXZvcnk6WzI1NSwyNTUsMjQwXSxraGFraTpbMjQwLDIzMCwxNDBdLGxhdmVuZGVyOlsyMzAsMjMwLDI1MF0sbGF2ZW5kZXJibHVzaDpbMjU1LDI0MCwyNDVdLGxhd25ncmVlbjpbMTI0LDI1MiwwXSxsZW1vbmNoaWZmb246WzI1NSwyNTAsMjA1XSxsaWdodGJsdWU6WzE3MywyMTYsMjMwXSxsaWdodGNvcmFsOlsyNDAsMTI4LDEyOF0sbGlnaHRjeWFuOlsyMjQsMjU1LDI1NV0sbGlnaHRnb2xkZW5yb2R5ZWxsb3c6WzI1MCwyNTAsMjEwXSxsaWdodGdyYXk6WzIxMSwyMTEsMjExXSxsaWdodGdyZWVuOlsxNDQsMjM4LDE0NF0sbGlnaHRncmV5OlsyMTEsMjExLDIxMV0sbGlnaHRwaW5rOlsyNTUsMTgyLDE5M10sbGlnaHRzYWxtb246WzI1NSwxNjAsMTIyXSxsaWdodHNlYWdyZWVuOlszMiwxNzgsMTcwXSxsaWdodHNreWJsdWU6WzEzNSwyMDYsMjUwXSxsaWdodHNsYXRlZ3JheTpbMTE5LDEzNiwxNTNdLGxpZ2h0c2xhdGVncmV5OlsxMTksMTM2LDE1M10sbGlnaHRzdGVlbGJsdWU6WzE3NiwxOTYsMjIyXSxsaWdodHllbGxvdzpbMjU1LDI1NSwyMjRdLGxpbWU6WzAsMjU1LDBdLGxpbWVncmVlbjpbNTAsMjA1LDUwXSxsaW5lbjpbMjUwLDI0MCwyMzBdLG1hZ2VudGE6WzI1NSwwLDI1NV0sbWFyb29uOlsxMjgsMCwwXSxtZWRpdW1hcXVhbWFyaW5lOlsxMDIsMjA1LDE3MF0sbWVkaXVtYmx1ZTpbMCwwLDIwNV0sbWVkaXVtb3JjaGlkOlsxODYsODUsMjExXSxtZWRpdW1wdXJwbGU6WzE0NywxMTIsMjE5XSxtZWRpdW1zZWFncmVlbjpbNjAsMTc5LDExM10sbWVkaXVtc2xhdGVibHVlOlsxMjMsMTA0LDIzOF0sbWVkaXVtc3ByaW5nZ3JlZW46WzAsMjUwLDE1NF0sbWVkaXVtdHVycXVvaXNlOls3MiwyMDksMjA0XSxtZWRpdW12aW9sZXRyZWQ6WzE5OSwyMSwxMzNdLG1pZG5pZ2h0Ymx1ZTpbMjUsMjUsMTEyXSxtaW50Y3JlYW06WzI0NSwyNTUsMjUwXSxtaXN0eXJvc2U6WzI1NSwyMjgsMjI1XSxtb2NjYXNpbjpbMjU1LDIyOCwxODFdLG5hdmFqb3doaXRlOlsyNTUsMjIyLDE3M10sbmF2eTpbMCwwLDEyOF0sb2xkbGFjZTpbMjUzLDI0NSwyMzBdLG9saXZlOlsxMjgsMTI4LDBdLG9saXZlZHJhYjpbMTA3LDE0MiwzNV0sb3JhbmdlOlsyNTUsMTY1LDBdLG9yYW5nZXJlZDpbMjU1LDY5LDBdLG9yY2hpZDpbMjE4LDExMiwyMTRdLHBhbGVnb2xkZW5yb2Q6WzIzOCwyMzIsMTcwXSxwYWxlZ3JlZW46WzE1MiwyNTEsMTUyXSxwYWxldHVycXVvaXNlOlsxNzUsMjM4LDIzOF0scGFsZXZpb2xldHJlZDpbMjE5LDExMiwxNDddLHBhcGF5YXdoaXA6WzI1NSwyMzksMjEzXSxwZWFjaHB1ZmY6WzI1NSwyMTgsMTg1XSxwZXJ1OlsyMDUsMTMzLDYzXSxwaW5rOlsyNTUsMTkyLDIwM10scGx1bTpbMjIxLDE2MCwyMjFdLHBvd2RlcmJsdWU6WzE3NiwyMjQsMjMwXSxwdXJwbGU6WzEyOCwwLDEyOF0scmVkOlsyNTUsMCwwXSxyb3N5YnJvd246WzE4OCwxNDMsMTQzXSxyb3lhbGJsdWU6WzY1LDEwNSwyMjVdLHNhZGRsZWJyb3duOlsxMzksNjksMTldLHNhbG1vbjpbMjUwLDEyOCwxMTRdLHNhbmR5YnJvd246WzI0NCwxNjQsOTZdLHNlYWdyZWVuOls0NiwxMzksODddLHNlYXNoZWxsOlsyNTUsMjQ1LDIzOF0sc2llbm5hOlsxNjAsODIsNDVdLHNpbHZlcjpbMTkyLDE5MiwxOTJdLHNreWJsdWU6WzEzNSwyMDYsMjM1XSxzbGF0ZWJsdWU6WzEwNiw5MCwyMDVdLHNsYXRlZ3JheTpbMTEyLDEyOCwxNDRdLHNsYXRlZ3JleTpbMTEyLDEyOCwxNDRdLHNub3c6WzI1NSwyNTAsMjUwXSxzcHJpbmdncmVlbjpbMCwyNTUsMTI3XSxzdGVlbGJsdWU6WzcwLDEzMCwxODBdLHRhbjpbMjEwLDE4MCwxNDBdLHRlYWw6WzAsMTI4LDEyOF0sdGhpc3RsZTpbMjE2LDE5MSwyMTZdLHRvbWF0bzpbMjU1LDk5LDcxXSx0dXJxdW9pc2U6WzY0LDIyNCwyMDhdLHZpb2xldDpbMjM4LDEzMCwyMzhdLHdoZWF0OlsyNDUsMjIyLDE3OV0sd2hpdGU6WzI1NSwyNTUsMjU1XSx3aGl0ZXNtb2tlOlsyNDUsMjQ1LDI0NV0seWVsbG93OlsyNTUsMjU1LDBdLHllbGxvd2dyZWVuOlsxNTQsMjA1LDUwXX0sUmk9ZnVuY3Rpb24oZyl7Zm9yKHZhciB4PWcubWFwLFQ9Zy5rZXlzLEw9VC5sZW5ndGgsST0wO0k8TDtJKyspe3ZhciBPPVRbSV07aWYoY3QoTykpdGhyb3cgRXJyb3IoIlRyaWVkIHRvIHNldCBtYXAgd2l0aCBvYmplY3Qga2V5Iik7STxULmxlbmd0aC0xPyh4W09dPT1udWxsJiYoeFtPXT17fSkseD14W09dKTp4W09dPWcudmFsdWV9fSxwaT1mdW5jdGlvbihnKXtmb3IodmFyIHg9Zy5tYXAsVD1nLmtleXMsTD1ULmxlbmd0aCxJPTA7STxMO0krKyl7dmFyIE89VFtJXTtpZihjdChPKSl0aHJvdyBFcnJvcigiVHJpZWQgdG8gZ2V0IG1hcCB3aXRoIG9iamVjdCBrZXkiKTtpZih4PXhbT10seD09bnVsbClyZXR1cm4geH1yZXR1cm4geH07ZnVuY3Rpb24gYmkoeSl7dmFyIGc9dHlwZW9mIHk7cmV0dXJuIHkhPW51bGwmJihnPT0ib2JqZWN0Inx8Zz09ImZ1bmN0aW9uIil9dmFyIGRuPWJpLE5uPXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2YgZDA8InUiP2QwOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9O2Z1bmN0aW9uIFdyKHksZyl7cmV0dXJuIGc9e2V4cG9ydHM6e319LHkoZyxnLmV4cG9ydHMpLGcuZXhwb3J0c312YXIgTGk9dHlwZW9mIE5uPT0ib2JqZWN0IiYmTm4mJk5uLk9iamVjdD09PU9iamVjdCYmTm4saXM9TGksVHM9dHlwZW9mIHNlbGY9PSJvYmplY3QiJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixBYT1pc3x8VHN8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCksWGk9QWEsR2E9ZnVuY3Rpb24oKXtyZXR1cm4gWGkuRGF0ZS5ub3coKX0sX3I9R2EscXI9L1xzLztmdW5jdGlvbiBPaSh5KXtmb3IodmFyIGc9eS5sZW5ndGg7Zy0tJiZxci50ZXN0KHkuY2hhckF0KGcpKTspO3JldHVybiBnfXZhciBncj1PaSxKcz0vXlxzKy87ZnVuY3Rpb24gVm4oeSl7cmV0dXJuIHkmJnkuc2xpY2UoMCxncih5KSsxKS5yZXBsYWNlKEpzLCIiKX12YXIgWGM9Vm4sRXI9WGkuU3ltYm9sLE1jPUVyLGJwPU9iamVjdC5wcm90b3R5cGUsZm09YnAuaGFzT3duUHJvcGVydHksVDA9YnAudG9TdHJpbmcsRmQ9TWM/TWMudG9TdHJpbmdUYWc6dm9pZCAwO2Z1bmN0aW9uIE5vKHkpe3ZhciBnPWZtLmNhbGwoeSxGZCkseD15W0ZkXTt0cnl7eVtGZF09dm9pZCAwO3ZhciBUPSEwfWNhdGNoe312YXIgTD1UMC5jYWxsKHkpO3JldHVybiBUJiYoZz95W0ZkXT14OmRlbGV0ZSB5W0ZkXSksTH12YXIgdGE9Tm8sYnU9T2JqZWN0LnByb3RvdHlwZSxQdT1idS50b1N0cmluZztmdW5jdGlvbiBsbyh5KXtyZXR1cm4gUHUuY2FsbCh5KX12YXIgbW89bG8sT3M9IltvYmplY3QgTnVsbF0iLFRsPSJbb2JqZWN0IFVuZGVmaW5lZF0iLEZ1PU1jP01jLnRvU3RyaW5nVGFnOnZvaWQgMDtmdW5jdGlvbiB6byh5KXtyZXR1cm4geT09bnVsbD95PT09dm9pZCAwP1RsOk9zOkZ1JiZGdSBpbiBPYmplY3QoeSk/dGEoeSk6bW8oeSl9dmFyIG5kPXpvO2Z1bmN0aW9uIHNmKHkpe3JldHVybiB5IT1udWxsJiZ0eXBlb2YgeT09Im9iamVjdCJ9dmFyIGxsPXNmLFZpPSJbb2JqZWN0IFN5bWJvbF0iO2Z1bmN0aW9uIEtlKHkpe3JldHVybiB0eXBlb2YgeT09InN5bWJvbCJ8fGxsKHkpJiZuZCh5KT09Vml9dmFyIGtyPUtlLG5pPTAvMCxlbz0vXlstK10weFswLTlhLWZdKyQvaSxEYz0vXjBiWzAxXSskL2ksSnU9L14wb1swLTddKyQvaSxRbz1wYXJzZUludDtmdW5jdGlvbiBqZih5KXtpZih0eXBlb2YgeT09Im51bWJlciIpcmV0dXJuIHk7aWYoa3IoeSkpcmV0dXJuIG5pO2lmKGRuKHkpKXt2YXIgZz10eXBlb2YgeS52YWx1ZU9mPT0iZnVuY3Rpb24iP3kudmFsdWVPZigpOnk7eT1kbihnKT9nKyIiOmd9aWYodHlwZW9mIHkhPSJzdHJpbmciKXJldHVybiB5PT09MD95Oit5O3k9WGMoeSk7dmFyIHg9RGMudGVzdCh5KTtyZXR1cm4geHx8SnUudGVzdCh5KT9Rbyh5LnNsaWNlKDIpLHg/Mjo4KTplby50ZXN0KHkpP25pOit5fXZhciByaD1qZixkbT0iRXhwZWN0ZWQgYSBmdW5jdGlvbiIsUzk9TWF0aC5tYXgseDM9TWF0aC5taW47ZnVuY3Rpb24gemIoeSxnLHgpe3ZhciBULEwsSSxPLCQseixTPTAsVj0hMSxVPSExLGV0PSEwO2lmKHR5cGVvZiB5IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoZG0pO2c9cmgoZyl8fDAsZG4oeCkmJihWPSEheC5sZWFkaW5nLFU9Im1heFdhaXQiaW4geCxJPVU/UzkocmgoeC5tYXhXYWl0KXx8MCxnKTpJLGV0PSJ0cmFpbGluZyJpbiB4PyEheC50cmFpbGluZzpldCk7ZnVuY3Rpb24gYXQoWHQpe3ZhciBIdD1ULGllPUw7cmV0dXJuIFQ9TD12b2lkIDAsUz1YdCxPPXkuYXBwbHkoaWUsSHQpLE99ZnVuY3Rpb24gbHQoWHQpe3JldHVybiBTPVh0LCQ9c2V0VGltZW91dChFdCxnKSxWP2F0KFh0KTpPfWZ1bmN0aW9uIGd0KFh0KXt2YXIgSHQ9WHQteixpZT1YdC1TLFV0PWctSHQ7cmV0dXJuIFU/eDMoVXQsSS1pZSk6VXR9ZnVuY3Rpb24gTHQoWHQpe3ZhciBIdD1YdC16LGllPVh0LVM7cmV0dXJuIHo9PT12b2lkIDB8fEh0Pj1nfHxIdDwwfHxVJiZpZT49SX1mdW5jdGlvbiBFdCgpe3ZhciBYdD1fcigpO2lmKEx0KFh0KSlyZXR1cm4gRHQoWHQpOyQ9c2V0VGltZW91dChFdCxndChYdCkpfWZ1bmN0aW9uIER0KFh0KXtyZXR1cm4gJD12b2lkIDAsZXQmJlQ/YXQoWHQpOihUPUw9dm9pZCAwLE8pfWZ1bmN0aW9uIEl0KCl7JCE9PXZvaWQgMCYmY2xlYXJUaW1lb3V0KCQpLFM9MCxUPXo9TD0kPXZvaWQgMH1mdW5jdGlvbiB6dCgpe3JldHVybiAkPT09dm9pZCAwP086RHQoX3IoKSl9ZnVuY3Rpb24gdGUoKXt2YXIgWHQ9X3IoKSxIdD1MdChYdCk7aWYoVD1hcmd1bWVudHMsTD10aGlzLHo9WHQsSHQpe2lmKCQ9PT12b2lkIDApcmV0dXJuIGx0KHopO2lmKFUpcmV0dXJuIGNsZWFyVGltZW91dCgkKSwkPXNldFRpbWVvdXQoRXQsZyksYXQoeil9cmV0dXJuICQ9PT12b2lkIDAmJigkPXNldFRpbWVvdXQoRXQsZykpLE99cmV0dXJuIHRlLmNhbmNlbD1JdCx0ZS5mbHVzaD16dCx0ZX12YXIgb3M9emIsQXM9Uj9SLnBlcmZvcm1hbmNlOm51bGwsbWE9QXMmJkFzLm5vdz9mdW5jdGlvbigpe3JldHVybiBBcy5ub3coKX06ZnVuY3Rpb24oKXtyZXR1cm4gRGF0ZS5ub3coKX0sdmk9ZnVuY3Rpb24oKXtpZihSKXtpZihSLnJlcXVlc3RBbmltYXRpb25GcmFtZSlyZXR1cm4gZnVuY3Rpb24oeSl7Ui5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoeSl9O2lmKFIubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lKXJldHVybiBmdW5jdGlvbih5KXtSLm1velJlcXVlc3RBbmltYXRpb25GcmFtZSh5KX07aWYoUi53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUpcmV0dXJuIGZ1bmN0aW9uKHkpe1Iud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lKHkpfTtpZihSLm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lKXJldHVybiBmdW5jdGlvbih5KXtSLm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lKHkpfX1yZXR1cm4gZnVuY3Rpb24oeSl7eSYmc2V0VGltZW91dChmdW5jdGlvbigpe3kobWEoKSl9LDFlMy82MCl9fSgpLFFjPWZ1bmN0aW9uKGcpe3JldHVybiB2aShnKX0sbWU9bWEsYmc9OTI2MSxPZT02NTU5OSxhZj01MzgxLGZrPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06YmcsVD14LEw7TD1nLm5leHQoKSwhTC5kb25lOylUPVQqT2UrTC52YWx1ZXwwO3JldHVybiBUfSxrMz1mdW5jdGlvbihnKXt2YXIgeD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06Ymc7cmV0dXJuIHgqT2UrZ3wwfSxnbT1mdW5jdGlvbihnKXt2YXIgeD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06YWY7cmV0dXJuKHg8PDUpK3grZ3wwfSxBOT1mdW5jdGlvbihnLHgpe3JldHVybiBnKjIwOTcxNTIreH0sYXU9ZnVuY3Rpb24oZyl7cmV0dXJuIGdbMF0qMjA5NzE1MitnWzFdfSx2Zz1mdW5jdGlvbihnLHgpe3JldHVybltrMyhnWzBdLHhbMF0pLGdtKGdbMV0seFsxXSldfSxkaz1mdW5jdGlvbihnLHgpe3ZhciBUPXt2YWx1ZTowLGRvbmU6ITF9LEw9MCxJPWcubGVuZ3RoLE89e25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gTDxJP1QudmFsdWU9Z1tMKytdOlQuZG9uZT0hMCxUfX07cmV0dXJuIGZrKE8seCl9LHZwPWZ1bmN0aW9uKGcseCl7dmFyIFQ9e3ZhbHVlOjAsZG9uZTohMX0sTD0wLEk9Zy5sZW5ndGgsTz17bmV4dDpmdW5jdGlvbigpe3JldHVybiBMPEk/VC52YWx1ZT1nLmNoYXJDb2RlQXQoTCsrKTpULmRvbmU9ITAsVH19O3JldHVybiBmayhPLHgpfSxMOT1mdW5jdGlvbigpe3JldHVybiBNOShhcmd1bWVudHMpfSxNOT1mdW5jdGlvbihnKXtmb3IodmFyIHgsVD0wO1Q8Zy5sZW5ndGg7VCsrKXt2YXIgTD1nW1RdO1Q9PT0wP3g9dnAoTCk6eD12cChMLHgpfXJldHVybiB4fSwkZj0hMCxvdj1jb25zb2xlLndhcm4hPW51bGwsQmQ9Y29uc29sZS50cmFjZSE9bnVsbCxFMz1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUnx8OTAwNzE5OTI1NDc0MDk5MSxjdj1mdW5jdGlvbigpe3JldHVybiEwfSx1dj1mdW5jdGlvbigpe3JldHVybiExfSx3Zz1mdW5jdGlvbigpe3JldHVybiAwfSxSNT1mdW5jdGlvbigpe30sb3U9ZnVuY3Rpb24oZyl7dGhyb3cgbmV3IEVycm9yKGcpfSxqNT1mdW5jdGlvbihnKXtpZihnIT09dm9pZCAwKSRmPSEhZztlbHNlIHJldHVybiAkZn0sbm89ZnVuY3Rpb24oZyl7ajUoKSYmKG92P2NvbnNvbGUud2FybihnKTooY29uc29sZS5sb2coZyksQmQmJmNvbnNvbGUudHJhY2UoKSkpfSxKSz1mdW5jdGlvbihnKXtyZXR1cm4gZm4oe30sZyl9LHFiPWZ1bmN0aW9uKGcpe3JldHVybiBnPT1udWxsP2c6bXQoZyk/Zy5zbGljZSgpOmN0KGcpP0pLKGcpOmd9LHRZPWZ1bmN0aW9uKGcpe3JldHVybiBnLnNsaWNlKCl9LEQ5PWZ1bmN0aW9uKGcseCl7Zm9yKHg9Zz0iIjtnKys8MzY7eCs9Zyo1MSY1Mj8oZ14xNT84Xk1hdGgucmFuZG9tKCkqKGdeMjA/MTY6NCk6NCkudG9TdHJpbmcoMTYpOiItIik7cmV0dXJuIHh9LGVZPXt9LEtQPWZ1bmN0aW9uKCl7cmV0dXJuIGVZfSx6Zj1mdW5jdGlvbihnKXt2YXIgeD1PYmplY3Qua2V5cyhnKTtyZXR1cm4gZnVuY3Rpb24oVCl7Zm9yKHZhciBMPXt9LEk9MDtJPHgubGVuZ3RoO0krKyl7dmFyIE89eFtJXSwkPVQ9PW51bGw/dm9pZCAwOlRbT107TFtPXT0kPT09dm9pZCAwP2dbT106JH1yZXR1cm4gTH19LHBtPWZ1bmN0aW9uKGcseCxUKXtmb3IodmFyIEw9Zy5sZW5ndGgtMTtMPj0wJiYhKGdbTF09PT14JiYoZy5zcGxpY2UoTCwxKSxUKSk7TC0tKTt9LG1MPWZ1bmN0aW9uKGcpe2cuc3BsaWNlKDAsZy5sZW5ndGgpfSxZUD1mdW5jdGlvbihnLHgpe2Zvcih2YXIgVD0wO1Q8eC5sZW5ndGg7VCsrKXt2YXIgTD14W1RdO2cucHVzaChMKX19LHdwPWZ1bmN0aW9uKGcseCxUKXtyZXR1cm4gVCYmKHg9VGUoVCx4KSksZ1t4XX0sYm09ZnVuY3Rpb24oZyx4LFQsTCl7VCYmKHg9VGUoVCx4KSksZ1t4XT1MfSxuWT1mdW5jdGlvbigpe2Z1bmN0aW9uIHkoKXtwKHRoaXMseSksdGhpcy5fb2JqPXt9fXJldHVybiBtKHksW3trZXk6InNldCIsdmFsdWU6ZnVuY3Rpb24oeCxUKXtyZXR1cm4gdGhpcy5fb2JqW3hdPVQsdGhpc319LHtrZXk6ImRlbGV0ZSIsdmFsdWU6ZnVuY3Rpb24oeCl7cmV0dXJuIHRoaXMuX29ialt4XT12b2lkIDAsdGhpc319LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX29iaj17fX19LHtrZXk6ImhhcyIsdmFsdWU6ZnVuY3Rpb24oeCl7cmV0dXJuIHRoaXMuX29ialt4XSE9PXZvaWQgMH19LHtrZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24oeCl7cmV0dXJuIHRoaXMuX29ialt4XX19XSkseX0oKSxIYj10eXBlb2YgTWFwPCJ1Ij9NYXA6blksclk9InVuZGVmaW5lZCIsaVk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB5KGcpe2lmKHAodGhpcyx5KSx0aGlzLl9vYmo9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLnNpemU9MCxnIT1udWxsKXt2YXIgeDtnLmluc3RhbmNlU3RyaW5nIT1udWxsJiZnLmluc3RhbmNlU3RyaW5nKCk9PT10aGlzLmluc3RhbmNlU3RyaW5nKCk/eD1nLnRvQXJyYXkoKTp4PWc7Zm9yKHZhciBUPTA7VDx4Lmxlbmd0aDtUKyspdGhpcy5hZGQoeFtUXSl9fXJldHVybiBtKHksW3trZXk6Imluc3RhbmNlU3RyaW5nIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiJzZXQifX0se2tleToiYWRkIix2YWx1ZTpmdW5jdGlvbih4KXt2YXIgVD10aGlzLl9vYmo7VFt4XSE9PTEmJihUW3hdPTEsdGhpcy5zaXplKyspfX0se2tleToiZGVsZXRlIix2YWx1ZTpmdW5jdGlvbih4KXt2YXIgVD10aGlzLl9vYmo7VFt4XT09PTEmJihUW3hdPTAsdGhpcy5zaXplLS0pfX0se2tleToiY2xlYXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fb2JqPU9iamVjdC5jcmVhdGUobnVsbCl9fSx7a2V5OiJoYXMiLHZhbHVlOmZ1bmN0aW9uKHgpe3JldHVybiB0aGlzLl9vYmpbeF09PT0xfX0se2tleToidG9BcnJheSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgeD10aGlzO3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl9vYmopLmZpbHRlcihmdW5jdGlvbihUKXtyZXR1cm4geC5oYXMoVCl9KX19LHtrZXk6ImZvckVhY2giLHZhbHVlOmZ1bmN0aW9uKHgsVCl7cmV0dXJuIHRoaXMudG9BcnJheSgpLmZvckVhY2goeCxUKX19XSkseX0oKSwkNT0odHlwZW9mIFNldD4idSI/InVuZGVmaW5lZCI6ZihTZXQpKSE9PXJZP1NldDppWSxJOT1mdW5jdGlvbihnLHgpe3ZhciBUPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTohMDtpZihnPT09dm9pZCAwfHx4PT09dm9pZCAwfHwhUHQoZykpe291KCJBbiBlbGVtZW50IG11c3QgaGF2ZSBhIGNvcmUgcmVmZXJlbmNlIGFuZCBwYXJhbWV0ZXJzIHNldCIpO3JldHVybn12YXIgTD14Lmdyb3VwO2lmKEw9PW51bGwmJih4LmRhdGEmJnguZGF0YS5zb3VyY2UhPW51bGwmJnguZGF0YS50YXJnZXQhPW51bGw/TD0iZWRnZXMiOkw9Im5vZGVzIiksTCE9PSJub2RlcyImJkwhPT0iZWRnZXMiKXtvdSgiQW4gZWxlbWVudCBtdXN0IGJlIG9mIHR5cGUgYG5vZGVzYCBvciBgZWRnZXNgOyB5b3Ugc3BlY2lmaWVkIGAiK0wrImAiKTtyZXR1cm59dGhpcy5sZW5ndGg9MSx0aGlzWzBdPXRoaXM7dmFyIEk9dGhpcy5fcHJpdmF0ZT17Y3k6ZyxzaW5nbGU6ITAsZGF0YTp4LmRhdGF8fHt9LHBvc2l0aW9uOngucG9zaXRpb258fHt4OjAseTowfSxhdXRvV2lkdGg6dm9pZCAwLGF1dG9IZWlnaHQ6dm9pZCAwLGF1dG9QYWRkaW5nOnZvaWQgMCxjb21wb3VuZEJvdW5kc0NsZWFuOiExLGxpc3RlbmVyczpbXSxncm91cDpMLHN0eWxlOnt9LHJzdHlsZTp7fSxzdHlsZUN4dHM6W10sc3R5bGVLZXlzOnt9LHJlbW92ZWQ6ITAsc2VsZWN0ZWQ6ISF4LnNlbGVjdGVkLHNlbGVjdGFibGU6eC5zZWxlY3RhYmxlPT09dm9pZCAwPyEwOiEheC5zZWxlY3RhYmxlLGxvY2tlZDohIXgubG9ja2VkLGdyYWJiZWQ6ITEsZ3JhYmJhYmxlOnguZ3JhYmJhYmxlPT09dm9pZCAwPyEwOiEheC5ncmFiYmFibGUscGFubmFibGU6eC5wYW5uYWJsZT09PXZvaWQgMD9MPT09ImVkZ2VzIjohIXgucGFubmFibGUsYWN0aXZlOiExLGNsYXNzZXM6bmV3ICQ1LGFuaW1hdGlvbjp7Y3VycmVudDpbXSxxdWV1ZTpbXX0scnNjcmF0Y2g6e30sc2NyYXRjaDp4LnNjcmF0Y2h8fHt9LGVkZ2VzOltdLGNoaWxkcmVuOltdLHBhcmVudDp4LnBhcmVudCYmeC5wYXJlbnQuaXNOb2RlKCk/eC5wYXJlbnQ6bnVsbCx0cmF2ZXJzYWxDYWNoZTp7fSxiYWNrZ3JvdW5kaW5nOiExLGJiQ2FjaGU6bnVsbCxiYkNhY2hlU2hpZnQ6e3g6MCx5OjB9LGJvZHlCb3VuZHM6bnVsbCxvdmVybGF5Qm91bmRzOm51bGwsbGFiZWxCb3VuZHM6e2FsbDpudWxsLHNvdXJjZTpudWxsLHRhcmdldDpudWxsLG1haW46bnVsbH0sYXJyb3dCb3VuZHM6e3NvdXJjZTpudWxsLHRhcmdldDpudWxsLCJtaWQtc291cmNlIjpudWxsLCJtaWQtdGFyZ2V0IjpudWxsfX07aWYoSS5wb3NpdGlvbi54PT1udWxsJiYoSS5wb3NpdGlvbi54PTApLEkucG9zaXRpb24ueT09bnVsbCYmKEkucG9zaXRpb24ueT0wKSx4LnJlbmRlcmVkUG9zaXRpb24pe3ZhciBPPXgucmVuZGVyZWRQb3NpdGlvbiwkPWcucGFuKCksej1nLnpvb20oKTtJLnBvc2l0aW9uPXt4OihPLngtJC54KS96LHk6KE8ueS0kLnkpL3p9fXZhciBTPVtdO210KHguY2xhc3Nlcyk/Uz14LmNsYXNzZXM6VHQoeC5jbGFzc2VzKSYmKFM9eC5jbGFzc2VzLnNwbGl0KC9ccysvKSk7Zm9yKHZhciBWPTAsVT1TLmxlbmd0aDtWPFU7VisrKXt2YXIgZXQ9U1tWXTshZXR8fGV0PT09IiJ8fEkuY2xhc3Nlcy5hZGQoZXQpfXRoaXMuY3JlYXRlRW1pdHRlcigpO3ZhciBhdD14LnN0eWxlfHx4LmNzczthdCYmKG5vKCJTZXR0aW5nIGEgYHN0eWxlYCBieXBhc3MgYXQgZWxlbWVudCBjcmVhdGlvbiBzaG91bGQgYmUgZG9uZSBvbmx5IHdoZW4gYWJzb2x1dGVseSBuZWNlc3NhcnkuICBUcnkgdG8gdXNlIHRoZSBzdHlsZXNoZWV0IGluc3RlYWQuIiksdGhpcy5zdHlsZShhdCkpLChUPT09dm9pZCAwfHxUKSYmdGhpcy5yZXN0b3JlKCl9LFhQPWZ1bmN0aW9uKGcpe3JldHVybiBnPXtiZnM6Zy5iZnN8fCFnLmRmcyxkZnM6Zy5kZnN8fCFnLmJmc30sZnVuY3Rpb24oVCxMLEkpe3ZhciBPO2N0KFQpJiYhZHQoVCkmJihPPVQsVD1PLnJvb3RzfHxPLnJvb3QsTD1PLnZpc2l0LEk9Ty5kaXJlY3RlZCksST1hcmd1bWVudHMubGVuZ3RoPT09MiYmIWt0KEwpP0w6SSxMPWt0KEwpP0w6ZnVuY3Rpb24oKXt9O2Zvcih2YXIgJD10aGlzLl9wcml2YXRlLmN5LHo9VD1UdChUKT90aGlzLmZpbHRlcihUKTpULFM9W10sVj1bXSxVPXt9LGV0PXt9LGF0PXt9LGx0PTAsZ3QsTHQ9dGhpcy5ieUdyb3VwKCksRXQ9THQubm9kZXMsRHQ9THQuZWRnZXMsSXQ9MDtJdDx6Lmxlbmd0aDtJdCsrKXt2YXIgenQ9eltJdF0sdGU9enQuaWQoKTt6dC5pc05vZGUoKSYmKFMudW5zaGlmdCh6dCksZy5iZnMmJihhdFt0ZV09ITAsVi5wdXNoKHp0KSksZXRbdGVdPTApfWZvcih2YXIgWHQ9ZnVuY3Rpb24oKXt2YXIgTmU9Zy5iZnM/Uy5zaGlmdCgpOlMucG9wKCkscGU9TmUuaWQoKTtpZihnLmRmcyl7aWYoYXRbcGVdKXJldHVybiJjb250aW51ZSI7YXRbcGVdPSEwLFYucHVzaChOZSl9dmFyIGduPWV0W3BlXSxqZT1VW3BlXSxHZT1qZSE9bnVsbD9qZS5zb3VyY2UoKTpudWxsLHhuPWplIT1udWxsP2plLnRhcmdldCgpOm51bGwsRG49amU9PW51bGw/dm9pZCAwOk5lLnNhbWUoR2UpP3huWzBdOkdlWzBdLFhuPXZvaWQgMDtpZihYbj1MKE5lLGplLERuLGx0KyssZ24pLFhuPT09ITApcmV0dXJuIGd0PU5lLCJicmVhayI7aWYoWG49PT0hMSlyZXR1cm4iYnJlYWsiO2Zvcih2YXIgQ249TmUuY29ubmVjdGVkRWRnZXMoKS5maWx0ZXIoZnVuY3Rpb24oZXIpe3JldHVybighSXx8ZXIuc291cmNlKCkuc2FtZShOZSkpJiZEdC5oYXMoZXIpfSksWW49MDtZbjxDbi5sZW5ndGg7WW4rKyl7dmFyIHJyPUNuW1luXSx3cj1yci5jb25uZWN0ZWROb2RlcygpLmZpbHRlcihmdW5jdGlvbihlcil7cmV0dXJuIWVyLnNhbWUoTmUpJiZFdC5oYXMoZXIpfSksdXI9d3IuaWQoKTt3ci5sZW5ndGghPT0wJiYhYXRbdXJdJiYod3I9d3JbMF0sUy5wdXNoKHdyKSxnLmJmcyYmKGF0W3VyXT0hMCxWLnB1c2god3IpKSxVW3VyXT1ycixldFt1cl09ZXRbcGVdKzEpfX07Uy5sZW5ndGghPT0wOyl7dmFyIEh0PVh0KCk7aWYoSHQhPT0iY29udGludWUiJiZIdD09PSJicmVhayIpYnJlYWt9Zm9yKHZhciBpZT0kLmNvbGxlY3Rpb24oKSxVdD0wO1V0PFYubGVuZ3RoO1V0Kyspe3ZhciBmZT1WW1V0XSxnZT1VW2ZlLmlkKCldO2dlIT1udWxsJiZpZS5wdXNoKGdlKSxpZS5wdXNoKGZlKX1yZXR1cm57cGF0aDokLmNvbGxlY3Rpb24oaWUpLGZvdW5kOiQuY29sbGVjdGlvbihndCl9fX0sZ2s9e2JyZWFkdGhGaXJzdFNlYXJjaDpYUCh7YmZzOiEwfSksZGVwdGhGaXJzdFNlYXJjaDpYUCh7ZGZzOiEwfSl9O2drLmJmcz1nay5icmVhZHRoRmlyc3RTZWFyY2gsZ2suZGZzPWdrLmRlcHRoRmlyc3RTZWFyY2g7dmFyIHNZPVdyKGZ1bmN0aW9uKHksZyl7KGZ1bmN0aW9uKCl7dmFyIHgsVCxMLEksTywkLHosUyxWLFUsZXQsYXQsbHQsZ3QsTHQ7TD1NYXRoLmZsb29yLFU9TWF0aC5taW4sVD1mdW5jdGlvbihFdCxEdCl7cmV0dXJuIEV0PER0Py0xOkV0PkR0PzE6MH0sVj1mdW5jdGlvbihFdCxEdCxJdCx6dCx0ZSl7dmFyIFh0O2lmKEl0PT1udWxsJiYoSXQ9MCksdGU9PW51bGwmJih0ZT1UKSxJdDwwKXRocm93IG5ldyBFcnJvcigibG8gbXVzdCBiZSBub24tbmVnYXRpdmUiKTtmb3IoenQ9PW51bGwmJih6dD1FdC5sZW5ndGgpO0l0PHp0OylYdD1MKChJdCt6dCkvMiksdGUoRHQsRXRbWHRdKTwwP3p0PVh0Okl0PVh0KzE7cmV0dXJuW10uc3BsaWNlLmFwcGx5KEV0LFtJdCxJdC1JdF0uY29uY2F0KER0KSksRHR9LCQ9ZnVuY3Rpb24oRXQsRHQsSXQpe3JldHVybiBJdD09bnVsbCYmKEl0PVQpLEV0LnB1c2goRHQpLGd0KEV0LDAsRXQubGVuZ3RoLTEsSXQpfSxPPWZ1bmN0aW9uKEV0LER0KXt2YXIgSXQsenQ7cmV0dXJuIER0PT1udWxsJiYoRHQ9VCksSXQ9RXQucG9wKCksRXQubGVuZ3RoPyh6dD1FdFswXSxFdFswXT1JdCxMdChFdCwwLER0KSk6enQ9SXQsenR9LFM9ZnVuY3Rpb24oRXQsRHQsSXQpe3ZhciB6dDtyZXR1cm4gSXQ9PW51bGwmJihJdD1UKSx6dD1FdFswXSxFdFswXT1EdCxMdChFdCwwLEl0KSx6dH0sej1mdW5jdGlvbihFdCxEdCxJdCl7dmFyIHp0O3JldHVybiBJdD09bnVsbCYmKEl0PVQpLEV0Lmxlbmd0aCYmSXQoRXRbMF0sRHQpPDAmJih6dD1bRXRbMF0sRHRdLER0PXp0WzBdLEV0WzBdPXp0WzFdLEx0KEV0LDAsSXQpKSxEdH0sST1mdW5jdGlvbihFdCxEdCl7dmFyIEl0LHp0LHRlLFh0LEh0LGllO2ZvcihEdD09bnVsbCYmKER0PVQpLFh0PWZ1bmN0aW9uKCl7aWU9W107Zm9yKHZhciBVdD0wLGZlPUwoRXQubGVuZ3RoLzIpOzA8PWZlP1V0PGZlOlV0PmZlOzA8PWZlP1V0Kys6VXQtLSlpZS5wdXNoKFV0KTtyZXR1cm4gaWV9LmFwcGx5KHRoaXMpLnJldmVyc2UoKSxIdD1bXSx6dD0wLHRlPVh0Lmxlbmd0aDt6dDx0ZTt6dCsrKUl0PVh0W3p0XSxIdC5wdXNoKEx0KEV0LEl0LER0KSk7cmV0dXJuIEh0fSxsdD1mdW5jdGlvbihFdCxEdCxJdCl7dmFyIHp0O2lmKEl0PT1udWxsJiYoSXQ9VCksenQ9RXQuaW5kZXhPZihEdCksenQhPT0tMSlyZXR1cm4gZ3QoRXQsMCx6dCxJdCksTHQoRXQsenQsSXQpfSxldD1mdW5jdGlvbihFdCxEdCxJdCl7dmFyIHp0LHRlLFh0LEh0LGllO2lmKEl0PT1udWxsJiYoSXQ9VCksdGU9RXQuc2xpY2UoMCxEdCksIXRlLmxlbmd0aClyZXR1cm4gdGU7Zm9yKEkodGUsSXQpLGllPUV0LnNsaWNlKER0KSxYdD0wLEh0PWllLmxlbmd0aDtYdDxIdDtYdCsrKXp0PWllW1h0XSx6KHRlLHp0LEl0KTtyZXR1cm4gdGUuc29ydChJdCkucmV2ZXJzZSgpfSxhdD1mdW5jdGlvbihFdCxEdCxJdCl7dmFyIHp0LHRlLFh0LEh0LGllLFV0LGZlLGdlLHNlO2lmKEl0PT1udWxsJiYoSXQ9VCksRHQqMTA8PUV0Lmxlbmd0aCl7aWYoWHQ9RXQuc2xpY2UoMCxEdCkuc29ydChJdCksIVh0Lmxlbmd0aClyZXR1cm4gWHQ7Zm9yKHRlPVh0W1h0Lmxlbmd0aC0xXSxmZT1FdC5zbGljZShEdCksSHQ9MCxVdD1mZS5sZW5ndGg7SHQ8VXQ7SHQrKyl6dD1mZVtIdF0sSXQoenQsdGUpPDAmJihWKFh0LHp0LDAsbnVsbCxJdCksWHQucG9wKCksdGU9WHRbWHQubGVuZ3RoLTFdKTtyZXR1cm4gWHR9Zm9yKEkoRXQsSXQpLHNlPVtdLGllPTAsZ2U9VShEdCxFdC5sZW5ndGgpOzA8PWdlP2llPGdlOmllPmdlOzA8PWdlPysraWU6LS1pZSlzZS5wdXNoKE8oRXQsSXQpKTtyZXR1cm4gc2V9LGd0PWZ1bmN0aW9uKEV0LER0LEl0LHp0KXt2YXIgdGUsWHQsSHQ7Zm9yKHp0PT1udWxsJiYoenQ9VCksdGU9RXRbSXRdO0l0PkR0Oyl7aWYoSHQ9SXQtMT4+MSxYdD1FdFtIdF0senQodGUsWHQpPDApe0V0W0l0XT1YdCxJdD1IdDtjb250aW51ZX1icmVha31yZXR1cm4gRXRbSXRdPXRlfSxMdD1mdW5jdGlvbihFdCxEdCxJdCl7dmFyIHp0LHRlLFh0LEh0LGllO2ZvcihJdD09bnVsbCYmKEl0PVQpLHRlPUV0Lmxlbmd0aCxpZT1EdCxYdD1FdFtEdF0senQ9MipEdCsxO3p0PHRlOylIdD16dCsxLEh0PHRlJiYhKEl0KEV0W3p0XSxFdFtIdF0pPDApJiYoenQ9SHQpLEV0W0R0XT1FdFt6dF0sRHQ9enQsenQ9MipEdCsxO3JldHVybiBFdFtEdF09WHQsZ3QoRXQsaWUsRHQsSXQpfSx4PWZ1bmN0aW9uKCl7RXQucHVzaD0kLEV0LnBvcD1PLEV0LnJlcGxhY2U9UyxFdC5wdXNocG9wPXosRXQuaGVhcGlmeT1JLEV0LnVwZGF0ZUl0ZW09bHQsRXQubmxhcmdlc3Q9ZXQsRXQubnNtYWxsZXN0PWF0O2Z1bmN0aW9uIEV0KER0KXt0aGlzLmNtcD1EdD8/VCx0aGlzLm5vZGVzPVtdfXJldHVybiBFdC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihEdCl7cmV0dXJuICQodGhpcy5ub2RlcyxEdCx0aGlzLmNtcCl9LEV0LnByb3RvdHlwZS5wb3A9ZnVuY3Rpb24oKXtyZXR1cm4gTyh0aGlzLm5vZGVzLHRoaXMuY21wKX0sRXQucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2Rlc1swXX0sRXQucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKER0KXtyZXR1cm4gdGhpcy5ub2Rlcy5pbmRleE9mKER0KSE9PS0xfSxFdC5wcm90b3R5cGUucmVwbGFjZT1mdW5jdGlvbihEdCl7cmV0dXJuIFModGhpcy5ub2RlcyxEdCx0aGlzLmNtcCl9LEV0LnByb3RvdHlwZS5wdXNocG9wPWZ1bmN0aW9uKER0KXtyZXR1cm4geih0aGlzLm5vZGVzLER0LHRoaXMuY21wKX0sRXQucHJvdG90eXBlLmhlYXBpZnk9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLm5vZGVzLHRoaXMuY21wKX0sRXQucHJvdG90eXBlLnVwZGF0ZUl0ZW09ZnVuY3Rpb24oRHQpe3JldHVybiBsdCh0aGlzLm5vZGVzLER0LHRoaXMuY21wKX0sRXQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZXM9W119LEV0LnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVzLmxlbmd0aD09PTB9LEV0LnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZXMubGVuZ3RofSxFdC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgRHQ7cmV0dXJuIER0PW5ldyBFdCxEdC5ub2Rlcz10aGlzLm5vZGVzLnNsaWNlKDApLER0fSxFdC5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVzLnNsaWNlKDApfSxFdC5wcm90b3R5cGUuaW5zZXJ0PUV0LnByb3RvdHlwZS5wdXNoLEV0LnByb3RvdHlwZS50b3A9RXQucHJvdG90eXBlLnBlZWssRXQucHJvdG90eXBlLmZyb250PUV0LnByb3RvdHlwZS5wZWVrLEV0LnByb3RvdHlwZS5oYXM9RXQucHJvdG90eXBlLmNvbnRhaW5zLEV0LnByb3RvdHlwZS5jb3B5PUV0LnByb3RvdHlwZS5jbG9uZSxFdH0oKSxmdW5jdGlvbihFdCxEdCl7cmV0dXJuIHkuZXhwb3J0cz1EdCgpfSh0aGlzLGZ1bmN0aW9uKCl7cmV0dXJuIHh9KX0pLmNhbGwoTm4pfSkscGs9c1ksYVk9emYoe3Jvb3Q6bnVsbCx3ZWlnaHQ6ZnVuY3Rpb24oZyl7cmV0dXJuIDF9LGRpcmVjdGVkOiExfSksb1k9e2RpamtzdHJhOmZ1bmN0aW9uKGcpe2lmKCFjdChnKSl7dmFyIHg9YXJndW1lbnRzO2c9e3Jvb3Q6eFswXSx3ZWlnaHQ6eFsxXSxkaXJlY3RlZDp4WzJdfX12YXIgVD1hWShnKSxMPVQucm9vdCxJPVQud2VpZ2h0LE89VC5kaXJlY3RlZCwkPXRoaXMsej1JLFM9VHQoTCk/dGhpcy5maWx0ZXIoTClbMF06TFswXSxWPXt9LFU9e30sZXQ9e30sYXQ9dGhpcy5ieUdyb3VwKCksbHQ9YXQubm9kZXMsZ3Q9YXQuZWRnZXM7Z3QudW5tZXJnZUJ5KGZ1bmN0aW9uKGduKXtyZXR1cm4gZ24uaXNMb29wKCl9KTtmb3IodmFyIEx0PWZ1bmN0aW9uKGplKXtyZXR1cm4gVltqZS5pZCgpXX0sRXQ9ZnVuY3Rpb24oamUsR2Upe1ZbamUuaWQoKV09R2UsRHQudXBkYXRlSXRlbShqZSl9LER0PW5ldyBwayhmdW5jdGlvbihnbixqZSl7cmV0dXJuIEx0KGduKS1MdChqZSl9KSxJdD0wO0l0PGx0Lmxlbmd0aDtJdCsrKXt2YXIgenQ9bHRbSXRdO1ZbenQuaWQoKV09enQuc2FtZShTKT8wOjEvMCxEdC5wdXNoKHp0KX1mb3IodmFyIHRlPWZ1bmN0aW9uKGplLEdlKXtmb3IodmFyIHhuPShPP2plLmVkZ2VzVG8oR2UpOmplLmVkZ2VzV2l0aChHZSkpLmludGVyc2VjdChndCksRG49MS8wLFhuLENuPTA7Q248eG4ubGVuZ3RoO0NuKyspe3ZhciBZbj14bltDbl0scnI9eihZbik7KHJyPERufHwhWG4pJiYoRG49cnIsWG49WW4pfXJldHVybntlZGdlOlhuLGRpc3Q6RG59fTtEdC5zaXplKCk+MDspe3ZhciBYdD1EdC5wb3AoKSxIdD1MdChYdCksaWU9WHQuaWQoKTtpZihldFtpZV09SHQsSHQhPT0xLzApZm9yKHZhciBVdD1YdC5uZWlnaGJvcmhvb2QoKS5pbnRlcnNlY3QobHQpLGZlPTA7ZmU8VXQubGVuZ3RoO2ZlKyspe3ZhciBnZT1VdFtmZV0sc2U9Z2UuaWQoKSxOZT10ZShYdCxnZSkscGU9SHQrTmUuZGlzdDtwZTxMdChnZSkmJihFdChnZSxwZSksVVtzZV09e25vZGU6WHQsZWRnZTpOZS5lZGdlfSl9fXJldHVybntkaXN0YW5jZVRvOmZ1bmN0aW9uKGplKXt2YXIgR2U9VHQoamUpP2x0LmZpbHRlcihqZSlbMF06amVbMF07cmV0dXJuIGV0W0dlLmlkKCldfSxwYXRoVG86ZnVuY3Rpb24oamUpe3ZhciBHZT1UdChqZSk/bHQuZmlsdGVyKGplKVswXTpqZVswXSx4bj1bXSxEbj1HZSxYbj1Ebi5pZCgpO2lmKEdlLmxlbmd0aD4wKWZvcih4bi51bnNoaWZ0KEdlKTtVW1huXTspe3ZhciBDbj1VW1huXTt4bi51bnNoaWZ0KENuLmVkZ2UpLHhuLnVuc2hpZnQoQ24ubm9kZSksRG49Q24ubm9kZSxYbj1Ebi5pZCgpfXJldHVybiAkLnNwYXduKHhuKX19fX0sY1k9e2tydXNrYWw6ZnVuY3Rpb24oZyl7Zz1nfHxmdW5jdGlvbihJdCl7cmV0dXJuIDF9O2Zvcih2YXIgeD10aGlzLmJ5R3JvdXAoKSxUPXgubm9kZXMsTD14LmVkZ2VzLEk9VC5sZW5ndGgsTz1uZXcgQXJyYXkoSSksJD1ULHo9ZnVuY3Rpb24oenQpe2Zvcih2YXIgdGU9MDt0ZTxPLmxlbmd0aDt0ZSsrKXt2YXIgWHQ9T1t0ZV07aWYoWHQuaGFzKHp0KSlyZXR1cm4gdGV9fSxTPTA7UzxJO1MrKylPW1NdPXRoaXMuc3Bhd24oVFtTXSk7Zm9yKHZhciBWPUwuc29ydChmdW5jdGlvbihJdCx6dCl7cmV0dXJuIGcoSXQpLWcoenQpfSksVT0wO1U8Vi5sZW5ndGg7VSsrKXt2YXIgZXQ9VltVXSxhdD1ldC5zb3VyY2UoKVswXSxsdD1ldC50YXJnZXQoKVswXSxndD16KGF0KSxMdD16KGx0KSxFdD1PW2d0XSxEdD1PW0x0XTtndCE9PUx0JiYoJC5tZXJnZShldCksRXQubWVyZ2UoRHQpLE8uc3BsaWNlKEx0LDEpKX1yZXR1cm4gJH19LHVZPXpmKHtyb290Om51bGwsZ29hbDpudWxsLHdlaWdodDpmdW5jdGlvbihnKXtyZXR1cm4gMX0saGV1cmlzdGljOmZ1bmN0aW9uKGcpe3JldHVybiAwfSxkaXJlY3RlZDohMX0pLGxZPXthU3RhcjpmdW5jdGlvbihnKXt2YXIgeD10aGlzLmN5KCksVD11WShnKSxMPVQucm9vdCxJPVQuZ29hbCxPPVQuaGV1cmlzdGljLCQ9VC5kaXJlY3RlZCx6PVQud2VpZ2h0O0w9eC5jb2xsZWN0aW9uKEwpWzBdLEk9eC5jb2xsZWN0aW9uKEkpWzBdO3ZhciBTPUwuaWQoKSxWPUkuaWQoKSxVPXt9LGV0PXt9LGF0PXt9LGx0PW5ldyBwayhmdW5jdGlvbihYbixDbil7cmV0dXJuIGV0W1huLmlkKCldLWV0W0NuLmlkKCldfSksZ3Q9bmV3ICQ1LEx0PXt9LEV0PXt9LER0PWZ1bmN0aW9uKENuLFluKXtsdC5wdXNoKENuKSxndC5hZGQoWW4pfSxJdCx6dCx0ZT1mdW5jdGlvbigpe0l0PWx0LnBvcCgpLHp0PUl0LmlkKCksZ3QuZGVsZXRlKHp0KX0sWHQ9ZnVuY3Rpb24oQ24pe3JldHVybiBndC5oYXMoQ24pfTtEdChMLFMpLFVbU109MCxldFtTXT1PKEwpO2Zvcih2YXIgSHQ9MDtsdC5zaXplKCk+MDspe2lmKHRlKCksSHQrKyx6dD09PVYpe2Zvcih2YXIgaWU9W10sVXQ9SSxmZT1WLGdlPUV0W2ZlXTtpZS51bnNoaWZ0KFV0KSxnZSE9bnVsbCYmaWUudW5zaGlmdChnZSksVXQ9THRbZmVdLFV0IT1udWxsOylmZT1VdC5pZCgpLGdlPUV0W2ZlXTtyZXR1cm57Zm91bmQ6ITAsZGlzdGFuY2U6VVt6dF0scGF0aDp0aGlzLnNwYXduKGllKSxzdGVwczpIdH19YXRbenRdPSEwO2Zvcih2YXIgc2U9SXQuX3ByaXZhdGUuZWRnZXMsTmU9MDtOZTxzZS5sZW5ndGg7TmUrKyl7dmFyIHBlPXNlW05lXTtpZih0aGlzLmhhc0VsZW1lbnRXaXRoSWQocGUuaWQoKSkmJiEoJCYmcGUuZGF0YSgic291cmNlIikhPT16dCkpe3ZhciBnbj1wZS5zb3VyY2UoKSxqZT1wZS50YXJnZXQoKSxHZT1nbi5pZCgpIT09enQ/Z246amUseG49R2UuaWQoKTtpZih0aGlzLmhhc0VsZW1lbnRXaXRoSWQoeG4pJiYhYXRbeG5dKXt2YXIgRG49VVt6dF0reihwZSk7aWYoIVh0KHhuKSl7VVt4bl09RG4sZXRbeG5dPURuK08oR2UpLER0KEdlLHhuKSxMdFt4bl09SXQsRXRbeG5dPXBlO2NvbnRpbnVlfURuPFVbeG5dJiYoVVt4bl09RG4sZXRbeG5dPURuK08oR2UpLEx0W3huXT1JdCxFdFt4bl09cGUpfX19fXJldHVybntmb3VuZDohMSxkaXN0YW5jZTp2b2lkIDAscGF0aDp2b2lkIDAsc3RlcHM6SHR9fX0saFk9emYoe3dlaWdodDpmdW5jdGlvbihnKXtyZXR1cm4gMX0sZGlyZWN0ZWQ6ITF9KSxmWT17ZmxveWRXYXJzaGFsbDpmdW5jdGlvbihnKXtmb3IodmFyIHg9dGhpcy5jeSgpLFQ9aFkoZyksTD1ULndlaWdodCxJPVQuZGlyZWN0ZWQsTz1MLCQ9dGhpcy5ieUdyb3VwKCksej0kLm5vZGVzLFM9JC5lZGdlcyxWPXoubGVuZ3RoLFU9VipWLGV0PWZ1bmN0aW9uKHJyKXtyZXR1cm4gei5pbmRleE9mKHJyKX0sYXQ9ZnVuY3Rpb24ocnIpe3JldHVybiB6W3JyXX0sbHQ9bmV3IEFycmF5KFUpLGd0PTA7Z3Q8VTtndCsrKXt2YXIgTHQ9Z3QlVixFdD0oZ3QtTHQpL1Y7RXQ9PT1MdD9sdFtndF09MDpsdFtndF09MS8wfWZvcih2YXIgRHQ9bmV3IEFycmF5KFUpLEl0PW5ldyBBcnJheShVKSx6dD0wO3p0PFMubGVuZ3RoO3p0Kyspe3ZhciB0ZT1TW3p0XSxYdD10ZS5zb3VyY2UoKVswXSxIdD10ZS50YXJnZXQoKVswXTtpZihYdCE9PUh0KXt2YXIgaWU9ZXQoWHQpLFV0PWV0KEh0KSxmZT1pZSpWK1V0LGdlPU8odGUpO2lmKGx0W2ZlXT5nZSYmKGx0W2ZlXT1nZSxEdFtmZV09VXQsSXRbZmVdPXRlKSwhSSl7dmFyIHNlPVV0KlYraWU7IUkmJmx0W3NlXT5nZSYmKGx0W3NlXT1nZSxEdFtzZV09aWUsSXRbc2VdPXRlKX19fWZvcih2YXIgTmU9MDtOZTxWO05lKyspZm9yKHZhciBwZT0wO3BlPFY7cGUrKylmb3IodmFyIGduPXBlKlYrTmUsamU9MDtqZTxWO2plKyspe3ZhciBHZT1wZSpWK2plLHhuPU5lKlYramU7bHRbZ25dK2x0W3huXTxsdFtHZV0mJihsdFtHZV09bHRbZ25dK2x0W3huXSxEdFtHZV09RHRbZ25dKX12YXIgRG49ZnVuY3Rpb24ocnIpe3JldHVybihUdChycik/eC5maWx0ZXIocnIpOnJyKVswXX0sWG49ZnVuY3Rpb24ocnIpe3JldHVybiBldChEbihycikpfSxDbj17ZGlzdGFuY2U6ZnVuY3Rpb24ocnIsd3Ipe3ZhciB1cj1YbihyciksZXI9WG4od3IpO3JldHVybiBsdFt1cipWK2VyXX0scGF0aDpmdW5jdGlvbihycix3cil7dmFyIHVyPVhuKHJyKSxlcj1Ybih3ciksYm49YXQodXIpO2lmKHVyPT09ZXIpcmV0dXJuIGJuLmNvbGxlY3Rpb24oKTtpZihEdFt1cipWK2VyXT09bnVsbClyZXR1cm4geC5jb2xsZWN0aW9uKCk7dmFyIHByPXguY29sbGVjdGlvbigpLGZyPXVyLHJpO2Zvcihwci5tZXJnZShibik7dXIhPT1lcjspZnI9dXIsdXI9RHRbdXIqVitlcl0scmk9SXRbZnIqVit1cl0scHIubWVyZ2UocmkpLHByLm1lcmdlKGF0KHVyKSk7cmV0dXJuIHByfX07cmV0dXJuIENufX0sZFk9emYoe3dlaWdodDpmdW5jdGlvbihnKXtyZXR1cm4gMX0sZGlyZWN0ZWQ6ITEscm9vdDpudWxsfSksZ1k9e2JlbGxtYW5Gb3JkOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMsVD1kWShnKSxMPVQud2VpZ2h0LEk9VC5kaXJlY3RlZCxPPVQucm9vdCwkPUwsej10aGlzLFM9dGhpcy5jeSgpLFY9dGhpcy5ieUdyb3VwKCksVT1WLmVkZ2VzLGV0PVYubm9kZXMsYXQ9ZXQubGVuZ3RoLGx0PW5ldyBIYixndD0hMSxMdD1bXTtPPVMuY29sbGVjdGlvbihPKVswXSxVLnVubWVyZ2VCeShmdW5jdGlvbihaaSl7cmV0dXJuIFppLmlzTG9vcCgpfSk7Zm9yKHZhciBFdD1VLmxlbmd0aCxEdD1mdW5jdGlvbihOaSl7dmFyIG5zPWx0LmdldChOaS5pZCgpKTtyZXR1cm4gbnN8fChucz17fSxsdC5zZXQoTmkuaWQoKSxucykpLG5zfSxJdD1mdW5jdGlvbihOaSl7cmV0dXJuKFR0KE5pKT9TLiQoTmkpOk5pKVswXX0senQ9ZnVuY3Rpb24oTmkpe3JldHVybiBEdChJdChOaSkpLmRpc3R9LHRlPWZ1bmN0aW9uKE5pKXtmb3IodmFyIG5zPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpPLFVhPUl0KE5pKSxzYT1bXSxYcz1VYTs7KXtpZihYcz09bnVsbClyZXR1cm4geC5zcGF3bigpO3ZhciBDcj1EdChYcyksSnQ9Q3IuZWRnZSxqbj1Dci5wcmVkO2lmKHNhLnVuc2hpZnQoWHNbMF0pLFhzLnNhbWUobnMpJiZzYS5sZW5ndGg+MClicmVhaztKdCE9bnVsbCYmc2EudW5zaGlmdChKdCksWHM9am59cmV0dXJuIHouc3Bhd24oc2EpfSxYdD0wO1h0PGF0O1h0Kyspe3ZhciBIdD1ldFtYdF0saWU9RHQoSHQpO0h0LnNhbWUoTyk/aWUuZGlzdD0wOmllLmRpc3Q9MS8wLGllLnByZWQ9bnVsbCxpZS5lZGdlPW51bGx9Zm9yKHZhciBVdD0hMSxmZT1mdW5jdGlvbihOaSxucyxVYSxzYSxYcyxDcil7dmFyIEp0PXNhLmRpc3QrQ3I7SnQ8WHMuZGlzdCYmIVVhLnNhbWUoc2EuZWRnZSkmJihYcy5kaXN0PUp0LFhzLnByZWQ9TmksWHMuZWRnZT1VYSxVdD0hMCl9LGdlPTE7Z2U8YXQ7Z2UrKyl7VXQ9ITE7Zm9yKHZhciBzZT0wO3NlPEV0O3NlKyspe3ZhciBOZT1VW3NlXSxwZT1OZS5zb3VyY2UoKSxnbj1OZS50YXJnZXQoKSxqZT0kKE5lKSxHZT1EdChwZSkseG49RHQoZ24pO2ZlKHBlLGduLE5lLEdlLHhuLGplKSxJfHxmZShnbixwZSxOZSx4bixHZSxqZSl9aWYoIVV0KWJyZWFrfWlmKFV0KWZvcih2YXIgRG49W10sWG49MDtYbjxFdDtYbisrKXt2YXIgQ249VVtYbl0sWW49Q24uc291cmNlKCkscnI9Q24udGFyZ2V0KCksd3I9JChDbiksdXI9RHQoWW4pLmRpc3QsZXI9RHQocnIpLmRpc3Q7aWYodXIrd3I8ZXJ8fCFJJiZlcit3cjx1cilpZihndHx8KG5vKCJHcmFwaCBjb250YWlucyBhIG5lZ2F0aXZlIHdlaWdodCBjeWNsZSBmb3IgQmVsbG1hbi1Gb3JkIiksZ3Q9ITApLGcuZmluZE5lZ2F0aXZlV2VpZ2h0Q3ljbGVzIT09ITEpe3ZhciBibj1bXTt1cit3cjxlciYmYm4ucHVzaChZbiksIUkmJmVyK3dyPHVyJiZibi5wdXNoKHJyKTtmb3IodmFyIHByPWJuLmxlbmd0aCxmcj0wO2ZyPHByO2ZyKyspe3ZhciByaT1ibltmcl0sX2k9W3JpXTtfaS5wdXNoKER0KHJpKS5lZGdlKTtmb3IodmFyIGlhPUR0KHJpKS5wcmVkO19pLmluZGV4T2YoaWEpPT09LTE7KV9pLnB1c2goaWEpLF9pLnB1c2goRHQoaWEpLmVkZ2UpLGlhPUR0KGlhKS5wcmVkO19pPV9pLnNsaWNlKF9pLmluZGV4T2YoaWEpKTtmb3IodmFyIExhPV9pWzBdLmlkKCksRGk9MCx3aT0yO3dpPF9pLmxlbmd0aDt3aSs9MilfaVt3aV0uaWQoKTxMYSYmKExhPV9pW3dpXS5pZCgpLERpPXdpKTtfaT1faS5zbGljZShEaSkuY29uY2F0KF9pLnNsaWNlKDAsRGkpKSxfaS5wdXNoKF9pWzBdKTt2YXIgX3M9X2kubWFwKGZ1bmN0aW9uKFppKXtyZXR1cm4gWmkuaWQoKX0pLmpvaW4oIiwiKTtEbi5pbmRleE9mKF9zKT09PS0xJiYoTHQucHVzaCh6LnNwYXduKF9pKSksRG4ucHVzaChfcykpfX1lbHNlIGJyZWFrfXJldHVybntkaXN0YW5jZVRvOnp0LHBhdGhUbzp0ZSxoYXNOZWdhdGl2ZVdlaWdodEN5Y2xlOmd0LG5lZ2F0aXZlV2VpZ2h0Q3ljbGVzOkx0fX19LHBZPU1hdGguc3FydCgyKSxiWT1mdW5jdGlvbihnLHgsVCl7VC5sZW5ndGg9PT0wJiZvdSgiS2FyZ2VyLVN0ZWluIG11c3QgYmUgcnVuIG9uIGEgY29ubmVjdGVkIChzdWIpZ3JhcGgiKTtmb3IodmFyIEw9VFtnXSxJPUxbMV0sTz1MWzJdLCQ9eFtJXSx6PXhbT10sUz1ULFY9Uy5sZW5ndGgtMTtWPj0wO1YtLSl7dmFyIFU9U1tWXSxldD1VWzFdLGF0PVVbMl07KHhbZXRdPT09JCYmeFthdF09PT16fHx4W2V0XT09PXomJnhbYXRdPT09JCkmJlMuc3BsaWNlKFYsMSl9Zm9yKHZhciBsdD0wO2x0PFMubGVuZ3RoO2x0Kyspe3ZhciBndD1TW2x0XTtndFsxXT09PXo/KFNbbHRdPWd0LnNsaWNlKCksU1tsdF1bMV09JCk6Z3RbMl09PT16JiYoU1tsdF09Z3Quc2xpY2UoKSxTW2x0XVsyXT0kKX1mb3IodmFyIEx0PTA7THQ8eC5sZW5ndGg7THQrKyl4W0x0XT09PXomJih4W0x0XT0kKTtyZXR1cm4gU30seUw9ZnVuY3Rpb24oZyx4LFQsTCl7Zm9yKDtUPkw7KXt2YXIgST1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqeC5sZW5ndGgpO3g9YlkoSSxnLHgpLFQtLX1yZXR1cm4geH0sdlk9e2thcmdlclN0ZWluOmZ1bmN0aW9uKCl7dmFyIGc9dGhpcyx4PXRoaXMuYnlHcm91cCgpLFQ9eC5ub2RlcyxMPXguZWRnZXM7TC51bm1lcmdlQnkoZnVuY3Rpb24oeG4pe3JldHVybiB4bi5pc0xvb3AoKX0pO3ZhciBJPVQubGVuZ3RoLE89TC5sZW5ndGgsJD1NYXRoLmNlaWwoTWF0aC5wb3coTWF0aC5sb2coSSkvTWF0aC5MTjIsMikpLHo9TWF0aC5mbG9vcihJL3BZKTtpZihJPDIpe291KCJBdCBsZWFzdCAyIG5vZGVzIGFyZSByZXF1aXJlZCBmb3IgS2FyZ2VyLVN0ZWluIGFsZ29yaXRobSIpO3JldHVybn1mb3IodmFyIFM9W10sVj0wO1Y8TztWKyspe3ZhciBVPUxbVl07Uy5wdXNoKFtWLFQuaW5kZXhPZihVLnNvdXJjZSgpKSxULmluZGV4T2YoVS50YXJnZXQoKSldKX1mb3IodmFyIGV0PTEvMCxhdD1bXSxsdD1uZXcgQXJyYXkoSSksZ3Q9bmV3IEFycmF5KEkpLEx0PW5ldyBBcnJheShJKSxFdD1mdW5jdGlvbihEbixYbil7Zm9yKHZhciBDbj0wO0NuPEk7Q24rKylYbltDbl09RG5bQ25dfSxEdD0wO0R0PD0kO0R0Kyspe2Zvcih2YXIgSXQ9MDtJdDxJO0l0KyspZ3RbSXRdPUl0O3ZhciB6dD15TChndCxTLnNsaWNlKCksSSx6KSx0ZT16dC5zbGljZSgpO0V0KGd0LEx0KTt2YXIgWHQ9eUwoZ3QsenQseiwyKSxIdD15TChMdCx0ZSx6LDIpO1h0Lmxlbmd0aDw9SHQubGVuZ3RoJiZYdC5sZW5ndGg8ZXQ/KGV0PVh0Lmxlbmd0aCxhdD1YdCxFdChndCxsdCkpOkh0Lmxlbmd0aDw9WHQubGVuZ3RoJiZIdC5sZW5ndGg8ZXQmJihldD1IdC5sZW5ndGgsYXQ9SHQsRXQoTHQsbHQpKX1mb3IodmFyIGllPXRoaXMuc3Bhd24oYXQubWFwKGZ1bmN0aW9uKHhuKXtyZXR1cm4gTFt4blswXV19KSksVXQ9dGhpcy5zcGF3bigpLGZlPXRoaXMuc3Bhd24oKSxnZT1sdFswXSxzZT0wO3NlPGx0Lmxlbmd0aDtzZSsrKXt2YXIgTmU9bHRbc2VdLHBlPVRbc2VdO05lPT09Z2U/VXQubWVyZ2UocGUpOmZlLm1lcmdlKHBlKX12YXIgZ249ZnVuY3Rpb24oRG4pe3ZhciBYbj1nLnNwYXduKCk7cmV0dXJuIERuLmZvckVhY2goZnVuY3Rpb24oQ24pe1huLm1lcmdlKENuKSxDbi5jb25uZWN0ZWRFZGdlcygpLmZvckVhY2goZnVuY3Rpb24oWW4pe2cuY29udGFpbnMoWW4pJiYhaWUuY29udGFpbnMoWW4pJiZYbi5tZXJnZShZbil9KX0pLFhufSxqZT1bZ24oVXQpLGduKGZlKV0sR2U9e2N1dDppZSxjb21wb25lbnRzOmplLHBhcnRpdGlvbjE6VXQscGFydGl0aW9uMjpmZX07cmV0dXJuIEdlfX0sd1k9ZnVuY3Rpb24oZyl7cmV0dXJue3g6Zy54LHk6Zy55fX0sTzk9ZnVuY3Rpb24oZyx4LFQpe3JldHVybnt4OmcueCp4K1QueCx5OmcueSp4K1QueX19LFFQPWZ1bmN0aW9uKGcseCxUKXtyZXR1cm57eDooZy54LVQueCkveCx5OihnLnktVC55KS94fX0sejU9ZnVuY3Rpb24oZyl7cmV0dXJue3g6Z1swXSx5OmdbMV19fSxtWT1mdW5jdGlvbihnKXtmb3IodmFyIHg9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOjAsVD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06Zy5sZW5ndGgsTD0xLzAsST14O0k8VDtJKyspe3ZhciBPPWdbSV07aXNGaW5pdGUoTykmJihMPU1hdGgubWluKE8sTCkpfXJldHVybiBMfSx5WT1mdW5jdGlvbihnKXtmb3IodmFyIHg9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOjAsVD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06Zy5sZW5ndGgsTD0tMS8wLEk9eDtJPFQ7SSsrKXt2YXIgTz1nW0ldO2lzRmluaXRlKE8pJiYoTD1NYXRoLm1heChPLEwpKX1yZXR1cm4gTH0seFk9ZnVuY3Rpb24oZyl7Zm9yKHZhciB4PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTowLFQ9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOmcubGVuZ3RoLEw9MCxJPTAsTz14O088VDtPKyspe3ZhciAkPWdbT107aXNGaW5pdGUoJCkmJihMKz0kLEkrKyl9cmV0dXJuIEwvSX0sa1k9ZnVuY3Rpb24oZyl7dmFyIHg9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOjAsVD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06Zy5sZW5ndGgsTD1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITAsST1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06ITAsTz1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06ITA7TD9nPWcuc2xpY2UoeCxUKTooVDxnLmxlbmd0aCYmZy5zcGxpY2UoVCxnLmxlbmd0aC1UKSx4PjAmJmcuc3BsaWNlKDAseCkpO2Zvcih2YXIgJD0wLHo9Zy5sZW5ndGgtMTt6Pj0wO3otLSl7dmFyIFM9Z1t6XTtPP2lzRmluaXRlKFMpfHwoZ1t6XT0tMS8wLCQrKyk6Zy5zcGxpY2UoeiwxKX1JJiZnLnNvcnQoZnVuY3Rpb24oZXQsYXQpe3JldHVybiBldC1hdH0pO3ZhciBWPWcubGVuZ3RoLFU9TWF0aC5mbG9vcihWLzIpO3JldHVybiBWJTIhPT0wP2dbVSsxKyRdOihnW1UtMSskXStnW1UrJF0pLzJ9LEVZPWZ1bmN0aW9uKGcpe3JldHVybiBNYXRoLlBJKmcvMTgwfSxOOT1mdW5jdGlvbihnLHgpe3JldHVybiBNYXRoLmF0YW4yKHgsZyktTWF0aC5QSS8yfSx4TD1NYXRoLmxvZzJ8fGZ1bmN0aW9uKHkpe3JldHVybiBNYXRoLmxvZyh5KS9NYXRoLmxvZygyKX0sWlA9ZnVuY3Rpb24oZyl7cmV0dXJuIGc+MD8xOmc8MD8tMTowfSxUMz1mdW5jdGlvbihnLHgpe3JldHVybiBNYXRoLnNxcnQoXzMoZyx4KSl9LF8zPWZ1bmN0aW9uKGcseCl7dmFyIFQ9eC54LWcueCxMPXgueS1nLnk7cmV0dXJuIFQqVCtMKkx9LFRZPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeD1nLmxlbmd0aCxUPTAsTD0wO0w8eDtMKyspVCs9Z1tMXTtmb3IodmFyIEk9MDtJPHg7SSsrKWdbSV09Z1tJXS9UO3JldHVybiBnfSxvZj1mdW5jdGlvbihnLHgsVCxMKXtyZXR1cm4oMS1MKSooMS1MKSpnKzIqKDEtTCkqTCp4K0wqTCpUfSxxNT1mdW5jdGlvbihnLHgsVCxMKXtyZXR1cm57eDpvZihnLngseC54LFQueCxMKSx5Om9mKGcueSx4LnksVC55LEwpfX0sX1k9ZnVuY3Rpb24oZyx4LFQsTCl7dmFyIEk9e3g6eC54LWcueCx5OngueS1nLnl9LE89VDMoZyx4KSwkPXt4OkkueC9PLHk6SS55L099O3JldHVybiBUPVQ/PzAsTD1MPz9UKk8se3g6Zy54KyQueCpMLHk6Zy55KyQueSpMfX0sYms9ZnVuY3Rpb24oZyx4LFQpe3JldHVybiBNYXRoLm1heChnLE1hdGgubWluKFQseCkpfSxSZD1mdW5jdGlvbihnKXtpZihnPT1udWxsKXJldHVybnt4MToxLzAseTE6MS8wLHgyOi0xLzAseTI6LTEvMCx3OjAsaDowfTtpZihnLngxIT1udWxsJiZnLnkxIT1udWxsKXtpZihnLngyIT1udWxsJiZnLnkyIT1udWxsJiZnLngyPj1nLngxJiZnLnkyPj1nLnkxKXJldHVybnt4MTpnLngxLHkxOmcueTEseDI6Zy54Mix5MjpnLnkyLHc6Zy54Mi1nLngxLGg6Zy55Mi1nLnkxfTtpZihnLnchPW51bGwmJmcuaCE9bnVsbCYmZy53Pj0wJiZnLmg+PTApcmV0dXJue3gxOmcueDEseTE6Zy55MSx4MjpnLngxK2cudyx5MjpnLnkxK2cuaCx3OmcudyxoOmcuaH19fSxDWT1mdW5jdGlvbihnKXtyZXR1cm57eDE6Zy54MSx4MjpnLngyLHc6Zy53LHkxOmcueTEseTI6Zy55MixoOmcuaH19LFNZPWZ1bmN0aW9uKGcpe2cueDE9MS8wLGcueTE9MS8wLGcueDI9LTEvMCxnLnkyPS0xLzAsZy53PTAsZy5oPTB9LEFZPWZ1bmN0aW9uKGcseCl7Zy54MT1NYXRoLm1pbihnLngxLHgueDEpLGcueDI9TWF0aC5tYXgoZy54Mix4LngyKSxnLnc9Zy54Mi1nLngxLGcueTE9TWF0aC5taW4oZy55MSx4LnkxKSxnLnkyPU1hdGgubWF4KGcueTIseC55MiksZy5oPWcueTItZy55MX0sTFk9ZnVuY3Rpb24oZyx4LFQpe2cueDE9TWF0aC5taW4oZy54MSx4KSxnLngyPU1hdGgubWF4KGcueDIseCksZy53PWcueDItZy54MSxnLnkxPU1hdGgubWluKGcueTEsVCksZy55Mj1NYXRoLm1heChnLnkyLFQpLGcuaD1nLnkyLWcueTF9LFA5PWZ1bmN0aW9uKGcpe3ZhciB4PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTowO3JldHVybiBnLngxLT14LGcueDIrPXgsZy55MS09eCxnLnkyKz14LGcudz1nLngyLWcueDEsZy5oPWcueTItZy55MSxnfSxrTD1mdW5jdGlvbihnKXt2YXIgeD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06WzBdLFQsTCxJLE87aWYoeC5sZW5ndGg9PT0xKVQ9TD1JPU89eFswXTtlbHNlIGlmKHgubGVuZ3RoPT09MilUPUk9eFswXSxPPUw9eFsxXTtlbHNlIGlmKHgubGVuZ3RoPT09NCl7dmFyICQ9RSh4LDQpO1Q9JFswXSxMPSRbMV0sST0kWzJdLE89JFszXX1yZXR1cm4gZy54MS09TyxnLngyKz1MLGcueTEtPVQsZy55Mis9SSxnLnc9Zy54Mi1nLngxLGcuaD1nLnkyLWcueTEsZ30sSlA9ZnVuY3Rpb24oZyx4KXtnLngxPXgueDEsZy55MT14LnkxLGcueDI9eC54MixnLnkyPXgueTIsZy53PWcueDItZy54MSxnLmg9Zy55Mi1nLnkxfSxFTD1mdW5jdGlvbihnLHgpe3JldHVybiEoZy54MT54LngyfHx4LngxPmcueDJ8fGcueDI8eC54MXx8eC54MjxnLngxfHxnLnkyPHgueTF8fHgueTI8Zy55MXx8Zy55MT54LnkyfHx4LnkxPmcueTIpfSxINT1mdW5jdGlvbihnLHgsVCl7cmV0dXJuIGcueDE8PXgmJng8PWcueDImJmcueTE8PVQmJlQ8PWcueTJ9LE1ZPWZ1bmN0aW9uKGcseCl7cmV0dXJuIEg1KGcseC54LHgueSl9LHRGPWZ1bmN0aW9uKGcseCl7cmV0dXJuIEg1KGcseC54MSx4LnkxKSYmSDUoZyx4LngyLHgueTIpfSxlRj1mdW5jdGlvbihnLHgsVCxMLEksTywkKXt2YXIgej1tayhJLE8pLFM9SS8yLFY9Ty8yLFU7e3ZhciBldD1ULVMrei0kLGF0PUwtVi0kLGx0PVQrUy16KyQsZ3Q9YXQ7aWYoVT12bShnLHgsVCxMLGV0LGF0LGx0LGd0LCExKSxVLmxlbmd0aD4wKXJldHVybiBVfXt2YXIgTHQ9VCtTKyQsRXQ9TC1WK3otJCxEdD1MdCxJdD1MK1YteiskO2lmKFU9dm0oZyx4LFQsTCxMdCxFdCxEdCxJdCwhMSksVS5sZW5ndGg+MClyZXR1cm4gVX17dmFyIHp0PVQtUyt6LSQsdGU9TCtWKyQsWHQ9VCtTLXorJCxIdD10ZTtpZihVPXZtKGcseCxULEwsenQsdGUsWHQsSHQsITEpLFUubGVuZ3RoPjApcmV0dXJuIFV9e3ZhciBpZT1ULVMtJCxVdD1MLVYrei0kLGZlPWllLGdlPUwrVi16KyQ7aWYoVT12bShnLHgsVCxMLGllLFV0LGZlLGdlLCExKSxVLmxlbmd0aD4wKXJldHVybiBVfXZhciBzZTt7dmFyIE5lPVQtUyt6LHBlPUwtVit6O2lmKHNlPXZrKGcseCxULEwsTmUscGUseiskKSxzZS5sZW5ndGg+MCYmc2VbMF08PU5lJiZzZVsxXTw9cGUpcmV0dXJuW3NlWzBdLHNlWzFdXX17dmFyIGduPVQrUy16LGplPUwtVit6O2lmKHNlPXZrKGcseCxULEwsZ24samUseiskKSxzZS5sZW5ndGg+MCYmc2VbMF0+PWduJiZzZVsxXTw9amUpcmV0dXJuW3NlWzBdLHNlWzFdXX17dmFyIEdlPVQrUy16LHhuPUwrVi16O2lmKHNlPXZrKGcseCxULEwsR2UseG4seiskKSxzZS5sZW5ndGg+MCYmc2VbMF0+PUdlJiZzZVsxXT49eG4pcmV0dXJuW3NlWzBdLHNlWzFdXX17dmFyIERuPVQtUyt6LFhuPUwrVi16O2lmKHNlPXZrKGcseCxULEwsRG4sWG4seiskKSxzZS5sZW5ndGg+MCYmc2VbMF08PURuJiZzZVsxXT49WG4pcmV0dXJuW3NlWzBdLHNlWzFdXX1yZXR1cm5bXX0sRFk9ZnVuY3Rpb24oZyx4LFQsTCxJLE8sJCl7dmFyIHo9JCxTPU1hdGgubWluKFQsSSksVj1NYXRoLm1heChULEkpLFU9TWF0aC5taW4oTCxPKSxldD1NYXRoLm1heChMLE8pO3JldHVybiBTLXo8PWcmJmc8PVYreiYmVS16PD14JiZ4PD1ldCt6fSxJWT1mdW5jdGlvbihnLHgsVCxMLEksTywkLHosUyl7dmFyIFY9e3gxOk1hdGgubWluKFQsJCxJKS1TLHgyOk1hdGgubWF4KFQsJCxJKStTLHkxOk1hdGgubWluKEwseixPKS1TLHkyOk1hdGgubWF4KEwseixPKStTfTtyZXR1cm4hKGc8Vi54MXx8Zz5WLngyfHx4PFYueTF8fHg+Vi55Mil9LE9ZPWZ1bmN0aW9uKGcseCxULEwpe1QtPUw7dmFyIEk9eCp4LTQqZypUO2lmKEk8MClyZXR1cm5bXTt2YXIgTz1NYXRoLnNxcnQoSSksJD0yKmcsej0oLXgrTykvJCxTPSgteC1PKS8kO3JldHVyblt6LFNdfSxOWT1mdW5jdGlvbihnLHgsVCxMLEkpe3ZhciBPPTFlLTU7Zz09PTAmJihnPU8pLHgvPWcsVC89ZyxMLz1nO3ZhciAkLHosUyxWLFUsZXQsYXQsbHQ7aWYoej0oMypULXgqeCkvOSxTPS0oMjcqTCkreCooOSpULTIqKHgqeCkpLFMvPTU0LCQ9eip6KnorUypTLElbMV09MCxhdD14LzMsJD4wKXtVPVMrTWF0aC5zcXJ0KCQpLFU9VTwwPy1NYXRoLnBvdygtVSwxLzMpOk1hdGgucG93KFUsMS8zKSxldD1TLU1hdGguc3FydCgkKSxldD1ldDwwPy1NYXRoLnBvdygtZXQsMS8zKTpNYXRoLnBvdyhldCwxLzMpLElbMF09LWF0K1UrZXQsYXQrPShVK2V0KS8yLElbNF09SVsyXT0tYXQsYXQ9TWF0aC5zcXJ0KDMpKigtZXQrVSkvMixJWzNdPWF0LElbNV09LWF0O3JldHVybn1pZihJWzVdPUlbM109MCwkPT09MCl7bHQ9UzwwPy1NYXRoLnBvdygtUywxLzMpOk1hdGgucG93KFMsMS8zKSxJWzBdPS1hdCsyKmx0LElbNF09SVsyXT0tKGx0K2F0KTtyZXR1cm59ej0teixWPXoqeip6LFY9TWF0aC5hY29zKFMvTWF0aC5zcXJ0KFYpKSxsdD0yKk1hdGguc3FydCh6KSxJWzBdPS1hdCtsdCpNYXRoLmNvcyhWLzMpLElbMl09LWF0K2x0Kk1hdGguY29zKChWKzIqTWF0aC5QSSkvMyksSVs0XT0tYXQrbHQqTWF0aC5jb3MoKFYrNCpNYXRoLlBJKS8zKX0sUFk9ZnVuY3Rpb24oZyx4LFQsTCxJLE8sJCx6KXt2YXIgUz0xKlQqVC00KlQqSSsyKlQqJCs0KkkqSS00KkkqJCskKiQrTCpMLTQqTCpPKzIqTCp6KzQqTypPLTQqTyp6K3oqeixWPTEqOSpUKkktMypUKlQtMypUKiQtNipJKkkrMypJKiQrOSpMKk8tMypMKkwtMypMKnotNipPKk8rMypPKnosVT0xKjMqVCpULTYqVCpJK1QqJC1UKmcrMipJKkkrMipJKmctJCpnKzMqTCpMLTYqTCpPK0wqei1MKngrMipPKk8rMipPKngteip4LGV0PTEqVCpJLVQqVCtUKmctSSpnK0wqTy1MKkwrTCp4LU8qeCxhdD1bXTtOWShTLFYsVSxldCxhdCk7Zm9yKHZhciBsdD0xZS03LGd0PVtdLEx0PTA7THQ8NjtMdCs9MilNYXRoLmFicyhhdFtMdCsxXSk8bHQmJmF0W0x0XT49MCYmYXRbTHRdPD0xJiZndC5wdXNoKGF0W0x0XSk7Z3QucHVzaCgxKSxndC5wdXNoKDApO2Zvcih2YXIgRXQ9LTEsRHQsSXQsenQsdGU9MDt0ZTxndC5sZW5ndGg7dGUrKylEdD1NYXRoLnBvdygxLWd0W3RlXSwyKSpUKzIqKDEtZ3RbdGVdKSpndFt0ZV0qSStndFt0ZV0qZ3RbdGVdKiQsSXQ9TWF0aC5wb3coMS1ndFt0ZV0sMikqTCsyKigxLWd0W3RlXSkqZ3RbdGVdKk8rZ3RbdGVdKmd0W3RlXSp6LHp0PU1hdGgucG93KER0LWcsMikrTWF0aC5wb3coSXQteCwyKSxFdD49MD96dDxFdCYmKEV0PXp0KTpFdD16dDtyZXR1cm4gRXR9LEZZPWZ1bmN0aW9uKGcseCxULEwsSSxPKXt2YXIgJD1bZy1ULHgtTF0sej1bSS1ULE8tTF0sUz16WzBdKnpbMF0relsxXSp6WzFdLFY9JFswXSokWzBdKyRbMV0qJFsxXSxVPSRbMF0qelswXSskWzFdKnpbMV0sZXQ9VSpVL1M7cmV0dXJuIFU8MD9WOmV0PlM/KGctSSkqKGctSSkrKHgtTykqKHgtTyk6Vi1ldH0samQ9ZnVuY3Rpb24oZyx4LFQpe2Zvcih2YXIgTCxJLE8sJCx6LFM9MCxWPTA7VjxULmxlbmd0aC8yO1YrKylpZihMPVRbVioyXSxJPVRbVioyKzFdLFYrMTxULmxlbmd0aC8yPyhPPVRbKFYrMSkqMl0sJD1UWyhWKzEpKjIrMV0pOihPPVRbKFYrMS1ULmxlbmd0aC8yKSoyXSwkPVRbKFYrMS1ULmxlbmd0aC8yKSoyKzFdKSwhKEw9PWcmJk89PWcpKWlmKEw+PWcmJmc+PU98fEw8PWcmJmc8PU8pej0oZy1MKS8oTy1MKSooJC1JKStJLHo+eCYmUysrO2Vsc2UgY29udGludWU7cmV0dXJuIFMlMiE9PTB9LGx2PWZ1bmN0aW9uKGcseCxULEwsSSxPLCQseixTKXt2YXIgVj1uZXcgQXJyYXkoVC5sZW5ndGgpLFU7elswXSE9bnVsbD8oVT1NYXRoLmF0YW4oelsxXS96WzBdKSx6WzBdPDA/VT1VK01hdGguUEkvMjpVPS1VLU1hdGguUEkvMik6VT16O2Zvcih2YXIgZXQ9TWF0aC5jb3MoLVUpLGF0PU1hdGguc2luKC1VKSxsdD0wO2x0PFYubGVuZ3RoLzI7bHQrKylWW2x0KjJdPU8vMiooVFtsdCoyXSpldC1UW2x0KjIrMV0qYXQpLFZbbHQqMisxXT0kLzIqKFRbbHQqMisxXSpldCtUW2x0KjJdKmF0KSxWW2x0KjJdKz1MLFZbbHQqMisxXSs9STt2YXIgZ3Q7aWYoUz4wKXt2YXIgTHQ9ckYoViwtUyk7Z3Q9bkYoTHQpfWVsc2UgZ3Q9VjtyZXR1cm4gamQoZyx4LGd0KX0sQlk9ZnVuY3Rpb24oZyx4LFQsTCxJLE8sJCl7Zm9yKHZhciB6PW5ldyBBcnJheShULmxlbmd0aCksUz1PLzIsVj0kLzIsVT1DTChPLCQpLGV0PVUqVSxhdD0wO2F0PFQubGVuZ3RoLzQ7YXQrKyl7dmFyIGx0PXZvaWQgMCxndD12b2lkIDA7YXQ9PT0wP2x0PVQubGVuZ3RoLTI6bHQ9YXQqNC0yLGd0PWF0KjQrMjt2YXIgTHQ9TCtTKlRbYXQqNF0sRXQ9SStWKlRbYXQqNCsxXSxEdD0tVFtsdF0qVFtndF0tVFtsdCsxXSpUW2d0KzFdLEl0PVUvTWF0aC50YW4oTWF0aC5hY29zKER0KS8yKSx6dD1MdC1JdCpUW2x0XSx0ZT1FdC1JdCpUW2x0KzFdLFh0PUx0K0l0KlRbZ3RdLEh0PUV0K0l0KlRbZ3QrMV07elthdCo0XT16dCx6W2F0KjQrMV09dGUselthdCo0KzJdPVh0LHpbYXQqNCszXT1IdDt2YXIgaWU9VFtsdCsxXSxVdD0tVFtsdF0sZmU9aWUqVFtndF0rVXQqVFtndCsxXTtmZTwwJiYoaWUqPS0xLFV0Kj0tMSk7dmFyIGdlPXp0K2llKlUsc2U9dGUrVXQqVSxOZT1NYXRoLnBvdyhnZS1nLDIpK01hdGgucG93KHNlLXgsMik7aWYoTmU8PWV0KXJldHVybiEwfXJldHVybiBqZChnLHgseil9LG5GPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeD1uZXcgQXJyYXkoZy5sZW5ndGgvMiksVCxMLEksTywkLHosUyxWLFU9MDtVPGcubGVuZ3RoLzQ7VSsrKXtUPWdbVSo0XSxMPWdbVSo0KzFdLEk9Z1tVKjQrMl0sTz1nW1UqNCszXSxVPGcubGVuZ3RoLzQtMT8oJD1nWyhVKzEpKjRdLHo9Z1soVSsxKSo0KzFdLFM9Z1soVSsxKSo0KzJdLFY9Z1soVSsxKSo0KzNdKTooJD1nWzBdLHo9Z1sxXSxTPWdbMl0sVj1nWzNdKTt2YXIgZXQ9dm0oVCxMLEksTywkLHosUyxWLCEwKTt4W1UqMl09ZXRbMF0seFtVKjIrMV09ZXRbMV19cmV0dXJuIHh9LHJGPWZ1bmN0aW9uKGcseCl7Zm9yKHZhciBUPW5ldyBBcnJheShnLmxlbmd0aCoyKSxMLEksTywkLHo9MDt6PGcubGVuZ3RoLzI7eisrKXtMPWdbeioyXSxJPWdbeioyKzFdLHo8Zy5sZW5ndGgvMi0xPyhPPWdbKHorMSkqMl0sJD1nWyh6KzEpKjIrMV0pOihPPWdbMF0sJD1nWzFdKTt2YXIgUz0kLUksVj0tKE8tTCksVT1NYXRoLnNxcnQoUypTK1YqViksZXQ9Uy9VLGF0PVYvVTtUW3oqNF09TCtldCp4LFRbeio0KzFdPUkrYXQqeCxUW3oqNCsyXT1PK2V0KngsVFt6KjQrM109JCthdCp4fXJldHVybiBUfSxSWT1mdW5jdGlvbihnLHgsVCxMLEksTyl7dmFyICQ9VC1nLHo9TC14OyQvPUksei89Tzt2YXIgUz1NYXRoLnNxcnQoJCokK3oqeiksVj1TLTE7aWYoVjwwKXJldHVybltdO3ZhciBVPVYvUztyZXR1cm5bKFQtZykqVStnLChMLXgpKlUreF19LEMzPWZ1bmN0aW9uKGcseCxULEwsSSxPLCQpe3JldHVybiBnLT1JLHgtPU8sZy89VC8yKyQseC89TC8yKyQsZypnK3gqeDw9MX0sdms9ZnVuY3Rpb24oZyx4LFQsTCxJLE8sJCl7dmFyIHo9W1QtZyxMLXhdLFM9W2ctSSx4LU9dLFY9elswXSp6WzBdK3pbMV0qelsxXSxVPTIqKFNbMF0qelswXStTWzFdKnpbMV0pLGV0PVNbMF0qU1swXStTWzFdKlNbMV0tJCokLGF0PVUqVS00KlYqZXQ7aWYoYXQ8MClyZXR1cm5bXTt2YXIgbHQ9KC1VK01hdGguc3FydChhdCkpLygyKlYpLGd0PSgtVS1NYXRoLnNxcnQoYXQpKS8oMipWKSxMdD1NYXRoLm1pbihsdCxndCksRXQ9TWF0aC5tYXgobHQsZ3QpLER0PVtdO2lmKEx0Pj0wJiZMdDw9MSYmRHQucHVzaChMdCksRXQ+PTAmJkV0PD0xJiZEdC5wdXNoKEV0KSxEdC5sZW5ndGg9PT0wKXJldHVybltdO3ZhciBJdD1EdFswXSp6WzBdK2csenQ9RHRbMF0qelsxXSt4O2lmKER0Lmxlbmd0aD4xKXtpZihEdFswXT09RHRbMV0pcmV0dXJuW0l0LHp0XTt2YXIgdGU9RHRbMV0qelswXStnLFh0PUR0WzFdKnpbMV0reDtyZXR1cm5bSXQsenQsdGUsWHRdfWVsc2UgcmV0dXJuW0l0LHp0XX0sVEw9ZnVuY3Rpb24oZyx4LFQpe3JldHVybiB4PD1nJiZnPD1UfHxUPD1nJiZnPD14P2c6Zzw9eCYmeDw9VHx8VDw9eCYmeDw9Zz94OlR9LHZtPWZ1bmN0aW9uKGcseCxULEwsSSxPLCQseixTKXt2YXIgVj1nLUksVT1ULWcsZXQ9JC1JLGF0PXgtTyxsdD1MLXgsZ3Q9ei1PLEx0PWV0KmF0LWd0KlYsRXQ9VSphdC1sdCpWLER0PWd0KlUtZXQqbHQ7aWYoRHQhPT0wKXt2YXIgSXQ9THQvRHQsenQ9RXQvRHQsdGU9LjAwMSxYdD0wLXRlLEh0PTErdGU7cmV0dXJuIFh0PD1JdCYmSXQ8PUh0JiZYdDw9enQmJnp0PD1IdD9bZytJdCpVLHgrSXQqbHRdOlM/W2crSXQqVSx4K0l0Kmx0XTpbXX1lbHNlIHJldHVybiBMdD09PTB8fEV0PT09MD9UTChnLFQsJCk9PT0kP1skLHpdOlRMKGcsVCxJKT09PUk/W0ksT106VEwoSSwkLFQpPT09VD9bVCxMXTpbXTpbXX0sd2s9ZnVuY3Rpb24oZyx4LFQsTCxJLE8sJCx6KXt2YXIgUz1bXSxWLFU9bmV3IEFycmF5KFQubGVuZ3RoKSxldD0hMDtPPT1udWxsJiYoZXQ9ITEpO3ZhciBhdDtpZihldCl7Zm9yKHZhciBsdD0wO2x0PFUubGVuZ3RoLzI7bHQrKylVW2x0KjJdPVRbbHQqMl0qTytMLFVbbHQqMisxXT1UW2x0KjIrMV0qJCtJO2lmKHo+MCl7dmFyIGd0PXJGKFUsLXopO2F0PW5GKGd0KX1lbHNlIGF0PVV9ZWxzZSBhdD1UO2Zvcih2YXIgTHQsRXQsRHQsSXQsenQ9MDt6dDxhdC5sZW5ndGgvMjt6dCsrKUx0PWF0W3p0KjJdLEV0PWF0W3p0KjIrMV0senQ8YXQubGVuZ3RoLzItMT8oRHQ9YXRbKHp0KzEpKjJdLEl0PWF0Wyh6dCsxKSoyKzFdKTooRHQ9YXRbMF0sSXQ9YXRbMV0pLFY9dm0oZyx4LEwsSSxMdCxFdCxEdCxJdCksVi5sZW5ndGghPT0wJiZTLnB1c2goVlswXSxWWzFdKTtyZXR1cm4gU30salk9ZnVuY3Rpb24oZyx4LFQsTCxJLE8sJCx6KXtmb3IodmFyIFM9W10sVixVPW5ldyBBcnJheShULmxlbmd0aCksZXQ9Ty8yLGF0PSQvMixsdD1DTChPLCQpLGd0PTA7Z3Q8VC5sZW5ndGgvNDtndCsrKXt2YXIgTHQ9dm9pZCAwLEV0PXZvaWQgMDtndD09PTA/THQ9VC5sZW5ndGgtMjpMdD1ndCo0LTIsRXQ9Z3QqNCsyO3ZhciBEdD1MK2V0KlRbZ3QqNF0sSXQ9SSthdCpUW2d0KjQrMV0senQ9LVRbTHRdKlRbRXRdLVRbTHQrMV0qVFtFdCsxXSx0ZT1sdC9NYXRoLnRhbihNYXRoLmFjb3MoenQpLzIpLFh0PUR0LXRlKlRbTHRdLEh0PUl0LXRlKlRbTHQrMV0saWU9RHQrdGUqVFtFdF0sVXQ9SXQrdGUqVFtFdCsxXTtndD09PTA/KFVbVC5sZW5ndGgtMl09WHQsVVtULmxlbmd0aC0xXT1IdCk6KFVbZ3QqNC0yXT1YdCxVW2d0KjQtMV09SHQpLFVbZ3QqNF09aWUsVVtndCo0KzFdPVV0O3ZhciBmZT1UW0x0KzFdLGdlPS1UW0x0XSxzZT1mZSpUW0V0XStnZSpUW0V0KzFdO3NlPDAmJihmZSo9LTEsZ2UqPS0xKTt2YXIgTmU9WHQrZmUqbHQscGU9SHQrZ2UqbHQ7Vj12ayhnLHgsTCxJLE5lLHBlLGx0KSxWLmxlbmd0aCE9PTAmJlMucHVzaChWWzBdLFZbMV0pfWZvcih2YXIgZ249MDtnbjxVLmxlbmd0aC80O2duKyspVj12bShnLHgsTCxJLFVbZ24qNF0sVVtnbio0KzFdLFVbZ24qNCsyXSxVW2duKjQrM10sITEpLFYubGVuZ3RoIT09MCYmUy5wdXNoKFZbMF0sVlsxXSk7aWYoUy5sZW5ndGg+Mil7Zm9yKHZhciBqZT1bU1swXSxTWzFdXSxHZT1NYXRoLnBvdyhqZVswXS1nLDIpK01hdGgucG93KGplWzFdLXgsMikseG49MTt4bjxTLmxlbmd0aC8yO3huKyspe3ZhciBEbj1NYXRoLnBvdyhTW3huKjJdLWcsMikrTWF0aC5wb3coU1t4bioyKzFdLXgsMik7RG48PUdlJiYoamVbMF09U1t4bioyXSxqZVsxXT1TW3huKjIrMV0sR2U9RG4pfXJldHVybiBqZX1yZXR1cm4gU30sRjk9ZnVuY3Rpb24oZyx4LFQpe3ZhciBMPVtnWzBdLXhbMF0sZ1sxXS14WzFdXSxJPU1hdGguc3FydChMWzBdKkxbMF0rTFsxXSpMWzFdKSxPPShJLVQpL0k7cmV0dXJuIE88MCYmKE89MWUtNSksW3hbMF0rTypMWzBdLHhbMV0rTypMWzFdXX0scmQ9ZnVuY3Rpb24oZyx4KXt2YXIgVD1fTChnLHgpO3JldHVybiBUPWlGKFQpLFR9LGlGPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeCxULEw9Zy5sZW5ndGgvMixJPTEvMCxPPTEvMCwkPS0xLzAsej0tMS8wLFM9MDtTPEw7UysrKXg9Z1syKlNdLFQ9Z1syKlMrMV0sST1NYXRoLm1pbihJLHgpLCQ9TWF0aC5tYXgoJCx4KSxPPU1hdGgubWluKE8sVCksej1NYXRoLm1heCh6LFQpO2Zvcih2YXIgVj0yLygkLUkpLFU9Mi8oei1PKSxldD0wO2V0PEw7ZXQrKyl4PWdbMipldF09Z1syKmV0XSpWLFQ9Z1syKmV0KzFdPWdbMipldCsxXSpVLEk9TWF0aC5taW4oSSx4KSwkPU1hdGgubWF4KCQseCksTz1NYXRoLm1pbihPLFQpLHo9TWF0aC5tYXgoeixUKTtpZihPPC0xKWZvcih2YXIgYXQ9MDthdDxMO2F0KyspVD1nWzIqYXQrMV09Z1syKmF0KzFdKygtMS1PKTtyZXR1cm4gZ30sX0w9ZnVuY3Rpb24oZyx4KXt2YXIgVD0xL2cqMipNYXRoLlBJLEw9ZyUyPT09MD9NYXRoLlBJLzIrVC8yOk1hdGguUEkvMjtMKz14O2Zvcih2YXIgST1uZXcgQXJyYXkoZyoyKSxPLCQ9MDskPGc7JCsrKU89JCpUK0wsSVsyKiRdPU1hdGguY29zKE8pLElbMiokKzFdPU1hdGguc2luKC1PKTtyZXR1cm4gSX0sbWs9ZnVuY3Rpb24oZyx4KXtyZXR1cm4gTWF0aC5taW4oZy80LHgvNCw4KX0sQ0w9ZnVuY3Rpb24oZyx4KXtyZXR1cm4gTWF0aC5taW4oZy8xMCx4LzEwLDgpfSxzRj1mdW5jdGlvbigpe3JldHVybiA4fSwkWT1mdW5jdGlvbihnLHgsVCl7cmV0dXJuW2ctMip4K1QsMiooeC1nKSxnXX0sU0w9ZnVuY3Rpb24oZyx4KXtyZXR1cm57aGVpZ2h0T2Zmc2V0Ok1hdGgubWluKDE1LC4wNSp4KSx3aWR0aE9mZnNldDpNYXRoLm1pbigxMDAsLjI1KmcpLGN0cmxQdE9mZnNldFBjdDouMDV9fSx6WT16Zih7ZGFtcGluZ0ZhY3RvcjouOCxwcmVjaXNpb246MWUtNixpdGVyYXRpb25zOjIwMCx3ZWlnaHQ6ZnVuY3Rpb24oZyl7cmV0dXJuIDF9fSkscVk9e3BhZ2VSYW5rOmZ1bmN0aW9uKGcpe2Zvcih2YXIgeD16WShnKSxUPXguZGFtcGluZ0ZhY3RvcixMPXgucHJlY2lzaW9uLEk9eC5pdGVyYXRpb25zLE89eC53ZWlnaHQsJD10aGlzLl9wcml2YXRlLmN5LHo9dGhpcy5ieUdyb3VwKCksUz16Lm5vZGVzLFY9ei5lZGdlcyxVPVMubGVuZ3RoLGV0PVUqVSxhdD1WLmxlbmd0aCxsdD1uZXcgQXJyYXkoZXQpLGd0PW5ldyBBcnJheShVKSxMdD0oMS1UKS9VLEV0PTA7RXQ8VTtFdCsrKXtmb3IodmFyIER0PTA7RHQ8VTtEdCsrKXt2YXIgSXQ9RXQqVStEdDtsdFtJdF09MH1ndFtFdF09MH1mb3IodmFyIHp0PTA7enQ8YXQ7enQrKyl7dmFyIHRlPVZbenRdLFh0PXRlLmRhdGEoInNvdXJjZSIpLEh0PXRlLmRhdGEoInRhcmdldCIpO2lmKFh0IT09SHQpe3ZhciBpZT1TLmluZGV4T2ZJZChYdCksVXQ9Uy5pbmRleE9mSWQoSHQpLGZlPU8odGUpLGdlPVV0KlUraWU7bHRbZ2VdKz1mZSxndFtpZV0rPWZlfX1mb3IodmFyIHNlPTEvVStMdCxOZT0wO05lPFU7TmUrKylpZihndFtOZV09PT0wKWZvcih2YXIgcGU9MDtwZTxVO3BlKyspe3ZhciBnbj1wZSpVK05lO2x0W2duXT1zZX1lbHNlIGZvcih2YXIgamU9MDtqZTxVO2plKyspe3ZhciBHZT1qZSpVK05lO2x0W0dlXT1sdFtHZV0vZ3RbTmVdK0x0fWZvcih2YXIgeG49bmV3IEFycmF5KFUpLERuPW5ldyBBcnJheShVKSxYbixDbj0wO0NuPFU7Q24rKyl4bltDbl09MTtmb3IodmFyIFluPTA7WW48STtZbisrKXtmb3IodmFyIHJyPTA7cnI8VTtycisrKURuW3JyXT0wO2Zvcih2YXIgd3I9MDt3cjxVO3dyKyspZm9yKHZhciB1cj0wO3VyPFU7dXIrKyl7dmFyIGVyPXdyKlUrdXI7RG5bd3JdKz1sdFtlcl0qeG5bdXJdfVRZKERuKSxYbj14bix4bj1EbixEbj1Ybjtmb3IodmFyIGJuPTAscHI9MDtwcjxVO3ByKyspe3ZhciBmcj1Ybltwcl0teG5bcHJdO2JuKz1mcipmcn1pZihibjxMKWJyZWFrfXZhciByaT17cmFuazpmdW5jdGlvbihpYSl7cmV0dXJuIGlhPSQuY29sbGVjdGlvbihpYSlbMF0seG5bUy5pbmRleE9mKGlhKV19fTtyZXR1cm4gcml9fSxhRj16Zih7cm9vdDpudWxsLHdlaWdodDpmdW5jdGlvbihnKXtyZXR1cm4gMX0sZGlyZWN0ZWQ6ITEsYWxwaGE6MH0pLFY1PXtkZWdyZWVDZW50cmFsaXR5Tm9ybWFsaXplZDpmdW5jdGlvbihnKXtnPWFGKGcpO3ZhciB4PXRoaXMuY3koKSxUPXRoaXMubm9kZXMoKSxMPVQubGVuZ3RoO2lmKGcuZGlyZWN0ZWQpe2Zvcih2YXIgVj17fSxVPXt9LGV0PTAsYXQ9MCxsdD0wO2x0PEw7bHQrKyl7dmFyIGd0PVRbbHRdLEx0PWd0LmlkKCk7Zy5yb290PWd0O3ZhciBFdD10aGlzLmRlZ3JlZUNlbnRyYWxpdHkoZyk7ZXQ8RXQuaW5kZWdyZWUmJihldD1FdC5pbmRlZ3JlZSksYXQ8RXQub3V0ZGVncmVlJiYoYXQ9RXQub3V0ZGVncmVlKSxWW0x0XT1FdC5pbmRlZ3JlZSxVW0x0XT1FdC5vdXRkZWdyZWV9cmV0dXJue2luZGVncmVlOmZ1bmN0aW9uKEl0KXtyZXR1cm4gZXQ9PTA/MDooVHQoSXQpJiYoSXQ9eC5maWx0ZXIoSXQpKSxWW0l0LmlkKCldL2V0KX0sb3V0ZGVncmVlOmZ1bmN0aW9uKEl0KXtyZXR1cm4gYXQ9PT0wPzA6KFR0KEl0KSYmKEl0PXguZmlsdGVyKEl0KSksVVtJdC5pZCgpXS9hdCl9fX1lbHNle2Zvcih2YXIgST17fSxPPTAsJD0wOyQ8TDskKyspe3ZhciB6PVRbJF07Zy5yb290PXo7dmFyIFM9dGhpcy5kZWdyZWVDZW50cmFsaXR5KGcpO088Uy5kZWdyZWUmJihPPVMuZGVncmVlKSxJW3ouaWQoKV09Uy5kZWdyZWV9cmV0dXJue2RlZ3JlZTpmdW5jdGlvbihJdCl7cmV0dXJuIE89PT0wPzA6KFR0KEl0KSYmKEl0PXguZmlsdGVyKEl0KSksSVtJdC5pZCgpXS9PKX19fX0sZGVncmVlQ2VudHJhbGl0eTpmdW5jdGlvbihnKXtnPWFGKGcpO3ZhciB4PXRoaXMuY3koKSxUPXRoaXMsTD1nLEk9TC5yb290LE89TC53ZWlnaHQsJD1MLmRpcmVjdGVkLHo9TC5hbHBoYTtpZihJPXguY29sbGVjdGlvbihJKVswXSwkKXtmb3IodmFyIGF0PUkuY29ubmVjdGVkRWRnZXMoKSxsdD1hdC5maWx0ZXIoZnVuY3Rpb24oWHQpe3JldHVybiBYdC50YXJnZXQoKS5zYW1lKEkpJiZULmhhcyhYdCl9KSxndD1hdC5maWx0ZXIoZnVuY3Rpb24oWHQpe3JldHVybiBYdC5zb3VyY2UoKS5zYW1lKEkpJiZULmhhcyhYdCl9KSxMdD1sdC5sZW5ndGgsRXQ9Z3QubGVuZ3RoLER0PTAsSXQ9MCx6dD0wO3p0PGx0Lmxlbmd0aDt6dCsrKUR0Kz1PKGx0W3p0XSk7Zm9yKHZhciB0ZT0wO3RlPGd0Lmxlbmd0aDt0ZSsrKUl0Kz1PKGd0W3RlXSk7cmV0dXJue2luZGVncmVlOk1hdGgucG93KEx0LDEteikqTWF0aC5wb3coRHQseiksb3V0ZGVncmVlOk1hdGgucG93KEV0LDEteikqTWF0aC5wb3coSXQseil9fWVsc2V7Zm9yKHZhciBTPUkuY29ubmVjdGVkRWRnZXMoKS5pbnRlcnNlY3Rpb24oVCksVj1TLmxlbmd0aCxVPTAsZXQ9MDtldDxTLmxlbmd0aDtldCsrKVUrPU8oU1tldF0pO3JldHVybntkZWdyZWU6TWF0aC5wb3coViwxLXopKk1hdGgucG93KFUseil9fX19O1Y1LmRjPVY1LmRlZ3JlZUNlbnRyYWxpdHksVjUuZGNuPVY1LmRlZ3JlZUNlbnRyYWxpdHlOb3JtYWxpc2VkPVY1LmRlZ3JlZUNlbnRyYWxpdHlOb3JtYWxpemVkO3ZhciBvRj16Zih7aGFybW9uaWM6ITAsd2VpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIDF9LGRpcmVjdGVkOiExLHJvb3Q6bnVsbH0pLEc1PXtjbG9zZW5lc3NDZW50cmFsaXR5Tm9ybWFsaXplZDpmdW5jdGlvbihnKXtmb3IodmFyIHg9b0YoZyksVD14Lmhhcm1vbmljLEw9eC53ZWlnaHQsST14LmRpcmVjdGVkLE89dGhpcy5jeSgpLCQ9e30sej0wLFM9dGhpcy5ub2RlcygpLFY9dGhpcy5mbG95ZFdhcnNoYWxsKHt3ZWlnaHQ6TCxkaXJlY3RlZDpJfSksVT0wO1U8Uy5sZW5ndGg7VSsrKXtmb3IodmFyIGV0PTAsYXQ9U1tVXSxsdD0wO2x0PFMubGVuZ3RoO2x0KyspaWYoVSE9PWx0KXt2YXIgZ3Q9Vi5kaXN0YW5jZShhdCxTW2x0XSk7VD9ldCs9MS9ndDpldCs9Z3R9VHx8KGV0PTEvZXQpLHo8ZXQmJih6PWV0KSwkW2F0LmlkKCldPWV0fXJldHVybntjbG9zZW5lc3M6ZnVuY3Rpb24oRXQpe3JldHVybiB6PT0wPzA6KFR0KEV0KT9FdD1PLmZpbHRlcihFdClbMF0uaWQoKTpFdD1FdC5pZCgpLCRbRXRdL3opfX19LGNsb3NlbmVzc0NlbnRyYWxpdHk6ZnVuY3Rpb24oZyl7dmFyIHg9b0YoZyksVD14LnJvb3QsTD14LndlaWdodCxJPXguZGlyZWN0ZWQsTz14Lmhhcm1vbmljO1Q9dGhpcy5maWx0ZXIoVClbMF07Zm9yKHZhciAkPXRoaXMuZGlqa3N0cmEoe3Jvb3Q6VCx3ZWlnaHQ6TCxkaXJlY3RlZDpJfSksej0wLFM9dGhpcy5ub2RlcygpLFY9MDtWPFMubGVuZ3RoO1YrKyl7dmFyIFU9U1tWXTtpZighVS5zYW1lKFQpKXt2YXIgZXQ9JC5kaXN0YW5jZVRvKFUpO08/eis9MS9ldDp6Kz1ldH19cmV0dXJuIE8/ejoxL3p9fTtHNS5jYz1HNS5jbG9zZW5lc3NDZW50cmFsaXR5LEc1LmNjbj1HNS5jbG9zZW5lc3NDZW50cmFsaXR5Tm9ybWFsaXNlZD1HNS5jbG9zZW5lc3NDZW50cmFsaXR5Tm9ybWFsaXplZDt2YXIgSFk9emYoe3dlaWdodDpudWxsLGRpcmVjdGVkOiExfSksQUw9e2JldHdlZW5uZXNzQ2VudHJhbGl0eTpmdW5jdGlvbihnKXtmb3IodmFyIHg9SFkoZyksVD14LmRpcmVjdGVkLEw9eC53ZWlnaHQsST1MIT1udWxsLE89dGhpcy5jeSgpLCQ9dGhpcy5ub2RlcygpLHo9e30sUz17fSxWPTAsVT17c2V0OmZ1bmN0aW9uKEl0LHp0KXtTW0l0XT16dCx6dD5WJiYoVj16dCl9LGdldDpmdW5jdGlvbihJdCl7cmV0dXJuIFNbSXRdfX0sZXQ9MDtldDwkLmxlbmd0aDtldCsrKXt2YXIgYXQ9JFtldF0sbHQ9YXQuaWQoKTtUP3pbbHRdPWF0Lm91dGdvZXJzKCkubm9kZXMoKTp6W2x0XT1hdC5vcGVuTmVpZ2hib3Job29kKCkubm9kZXMoKSxVLnNldChsdCwwKX1mb3IodmFyIGd0PWZ1bmN0aW9uKEl0KXtmb3IodmFyIHp0PSRbSXRdLmlkKCksdGU9W10sWHQ9e30sSHQ9e30saWU9e30sVXQ9bmV3IHBrKGZ1bmN0aW9uKHVyLGVyKXtyZXR1cm4gaWVbdXJdLWllW2VyXX0pLGZlPTA7ZmU8JC5sZW5ndGg7ZmUrKyl7dmFyIGdlPSRbZmVdLmlkKCk7WHRbZ2VdPVtdLEh0W2dlXT0wLGllW2dlXT0xLzB9Zm9yKEh0W3p0XT0xLGllW3p0XT0wLFV0LnB1c2goenQpOyFVdC5lbXB0eSgpOyl7dmFyIHNlPVV0LnBvcCgpO2lmKHRlLnB1c2goc2UpLEkpZm9yKHZhciBOZT0wO05lPHpbc2VdLmxlbmd0aDtOZSsrKXt2YXIgcGU9eltzZV1bTmVdLGduPU8uZ2V0RWxlbWVudEJ5SWQoc2UpLGplPXZvaWQgMDtnbi5lZGdlc1RvKHBlKS5sZW5ndGg+MD9qZT1nbi5lZGdlc1RvKHBlKVswXTpqZT1wZS5lZGdlc1RvKGduKVswXTt2YXIgR2U9TChqZSk7cGU9cGUuaWQoKSxpZVtwZV0+aWVbc2VdK0dlJiYoaWVbcGVdPWllW3NlXStHZSxVdC5ub2Rlcy5pbmRleE9mKHBlKTwwP1V0LnB1c2gocGUpOlV0LnVwZGF0ZUl0ZW0ocGUpLEh0W3BlXT0wLFh0W3BlXT1bXSksaWVbcGVdPT1pZVtzZV0rR2UmJihIdFtwZV09SHRbcGVdK0h0W3NlXSxYdFtwZV0ucHVzaChzZSkpfWVsc2UgZm9yKHZhciB4bj0wO3huPHpbc2VdLmxlbmd0aDt4bisrKXt2YXIgRG49eltzZV1beG5dLmlkKCk7aWVbRG5dPT0xLzAmJihVdC5wdXNoKERuKSxpZVtEbl09aWVbc2VdKzEpLGllW0RuXT09aWVbc2VdKzEmJihIdFtEbl09SHRbRG5dK0h0W3NlXSxYdFtEbl0ucHVzaChzZSkpfX1mb3IodmFyIFhuPXt9LENuPTA7Q248JC5sZW5ndGg7Q24rKylYblskW0NuXS5pZCgpXT0wO2Zvcig7dGUubGVuZ3RoPjA7KXtmb3IodmFyIFluPXRlLnBvcCgpLHJyPTA7cnI8WHRbWW5dLmxlbmd0aDtycisrKXt2YXIgd3I9WHRbWW5dW3JyXTtYblt3cl09WG5bd3JdK0h0W3dyXS9IdFtZbl0qKDErWG5bWW5dKX1ZbiE9JFtJdF0uaWQoKSYmVS5zZXQoWW4sVS5nZXQoWW4pK1huW1luXSl9fSxMdD0wO0x0PCQubGVuZ3RoO0x0KyspZ3QoTHQpO3ZhciBFdD17YmV0d2Vlbm5lc3M6ZnVuY3Rpb24oSXQpe3ZhciB6dD1PLmNvbGxlY3Rpb24oSXQpLmlkKCk7cmV0dXJuIFUuZ2V0KHp0KX0sYmV0d2Vlbm5lc3NOb3JtYWxpemVkOmZ1bmN0aW9uKEl0KXtpZihWPT0wKXJldHVybiAwO3ZhciB6dD1PLmNvbGxlY3Rpb24oSXQpLmlkKCk7cmV0dXJuIFUuZ2V0KHp0KS9WfX07cmV0dXJuIEV0LmJldHdlZW5uZXNzTm9ybWFsaXNlZD1FdC5iZXR3ZWVubmVzc05vcm1hbGl6ZWQsRXR9fTtBTC5iYz1BTC5iZXR3ZWVubmVzc0NlbnRyYWxpdHk7dmFyIFZZPXpmKHtleHBhbmRGYWN0b3I6MixpbmZsYXRlRmFjdG9yOjIsbXVsdEZhY3RvcjoxLG1heEl0ZXJhdGlvbnM6MjAsYXR0cmlidXRlczpbZnVuY3Rpb24oeSl7cmV0dXJuIDF9XX0pLEdZPWZ1bmN0aW9uKGcpe3JldHVybiBWWShnKX0sVVk9ZnVuY3Rpb24oZyx4KXtmb3IodmFyIFQ9MCxMPTA7TDx4Lmxlbmd0aDtMKyspVCs9eFtMXShnKTtyZXR1cm4gVH0sV1k9ZnVuY3Rpb24oZyx4LFQpe2Zvcih2YXIgTD0wO0w8eDtMKyspZ1tMKngrTF09VH0sY0Y9ZnVuY3Rpb24oZyx4KXtmb3IodmFyIFQsTD0wO0w8eDtMKyspe1Q9MDtmb3IodmFyIEk9MDtJPHg7SSsrKVQrPWdbSSp4K0xdO2Zvcih2YXIgTz0wO088eDtPKyspZ1tPKngrTF09Z1tPKngrTF0vVH19LEtZPWZ1bmN0aW9uKGcseCxUKXtmb3IodmFyIEw9bmV3IEFycmF5KFQqVCksST0wO0k8VDtJKyspe2Zvcih2YXIgTz0wO088VDtPKyspTFtJKlQrT109MDtmb3IodmFyICQ9MDskPFQ7JCsrKWZvcih2YXIgej0wO3o8VDt6KyspTFtJKlQrel0rPWdbSSpUKyRdKnhbJCpUK3pdfXJldHVybiBMfSxZWT1mdW5jdGlvbihnLHgsVCl7Zm9yKHZhciBMPWcuc2xpY2UoMCksST0xO0k8VDtJKyspZz1LWShnLEwseCk7cmV0dXJuIGd9LFhZPWZ1bmN0aW9uKGcseCxUKXtmb3IodmFyIEw9bmV3IEFycmF5KHgqeCksST0wO0k8eCp4O0krKylMW0ldPU1hdGgucG93KGdbSV0sVCk7cmV0dXJuIGNGKEwseCksTH0sdUY9ZnVuY3Rpb24oZyx4LFQsTCl7Zm9yKHZhciBJPTA7STxUO0krKyl7dmFyIE89TWF0aC5yb3VuZChnW0ldKk1hdGgucG93KDEwLEwpKS9NYXRoLnBvdygxMCxMKSwkPU1hdGgucm91bmQoeFtJXSpNYXRoLnBvdygxMCxMKSkvTWF0aC5wb3coMTAsTCk7aWYoTyE9PSQpcmV0dXJuITF9cmV0dXJuITB9LFFZPWZ1bmN0aW9uKGcseCxULEwpe2Zvcih2YXIgST1bXSxPPTA7Tzx4O08rKyl7Zm9yKHZhciAkPVtdLHo9MDt6PHg7eisrKU1hdGgucm91bmQoZ1tPKngrel0qMWUzKS8xZTM+MCYmJC5wdXNoKFRbel0pOyQubGVuZ3RoIT09MCYmSS5wdXNoKEwuY29sbGVjdGlvbigkKSl9cmV0dXJuIEl9LFpZPWZ1bmN0aW9uKGcseCl7Zm9yKHZhciBUPTA7VDxnLmxlbmd0aDtUKyspaWYoIXhbVF18fGdbVF0uaWQoKSE9PXhbVF0uaWQoKSlyZXR1cm4hMTtyZXR1cm4hMH0sSlk9ZnVuY3Rpb24oZyl7Zm9yKHZhciB4PTA7eDxnLmxlbmd0aDt4KyspZm9yKHZhciBUPTA7VDxnLmxlbmd0aDtUKyspeCE9VCYmWlkoZ1t4XSxnW1RdKSYmZy5zcGxpY2UoVCwxKTtyZXR1cm4gZ30sbEY9ZnVuY3Rpb24oZyl7Zm9yKHZhciB4PXRoaXMubm9kZXMoKSxUPXRoaXMuZWRnZXMoKSxMPXRoaXMuY3koKSxJPUdZKGcpLE89e30sJD0wOyQ8eC5sZW5ndGg7JCsrKU9beFskXS5pZCgpXT0kO2Zvcih2YXIgej14Lmxlbmd0aCxTPXoqeixWPW5ldyBBcnJheShTKSxVLGV0PTA7ZXQ8UztldCsrKVZbZXRdPTA7Zm9yKHZhciBhdD0wO2F0PFQubGVuZ3RoO2F0Kyspe3ZhciBsdD1UW2F0XSxndD1PW2x0LnNvdXJjZSgpLmlkKCldLEx0PU9bbHQudGFyZ2V0KCkuaWQoKV0sRXQ9VVkobHQsSS5hdHRyaWJ1dGVzKTtWW2d0KnorTHRdKz1FdCxWW0x0KnorZ3RdKz1FdH1XWShWLHosSS5tdWx0RmFjdG9yKSxjRihWLHopO2Zvcih2YXIgRHQ9ITAsSXQ9MDtEdCYmSXQ8SS5tYXhJdGVyYXRpb25zOylEdD0hMSxVPVlZKFYseixJLmV4cGFuZEZhY3RvciksVj1YWShVLHosSS5pbmZsYXRlRmFjdG9yKSx1RihWLFUsUyw0KXx8KER0PSEwKSxJdCsrO3ZhciB6dD1RWShWLHoseCxMKTtyZXR1cm4genQ9SlkoenQpLHp0fSx0WD17bWFya292Q2x1c3RlcmluZzpsRixtY2w6bEZ9LGVYPWZ1bmN0aW9uKGcpe3JldHVybiBnfSxoRj1mdW5jdGlvbihnLHgpe3JldHVybiBNYXRoLmFicyh4LWcpfSxmRj1mdW5jdGlvbihnLHgsVCl7cmV0dXJuIGcraEYoeCxUKX0sZEY9ZnVuY3Rpb24oZyx4LFQpe3JldHVybiBnK01hdGgucG93KFQteCwyKX0sblg9ZnVuY3Rpb24oZyl7cmV0dXJuIE1hdGguc3FydChnKX0sclg9ZnVuY3Rpb24oZyx4LFQpe3JldHVybiBNYXRoLm1heChnLGhGKHgsVCkpfSx5az1mdW5jdGlvbihnLHgsVCxMLEkpe2Zvcih2YXIgTz1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06ZVgsJD1MLHosUyxWPTA7VjxnO1YrKyl6PXgoViksUz1UKFYpLCQ9SSgkLHosUyk7cmV0dXJuIE8oJCl9LFU1PXtldWNsaWRlYW46ZnVuY3Rpb24oZyx4LFQpe3JldHVybiBnPj0yP3lrKGcseCxULDAsZEYsblgpOnlrKGcseCxULDAsZkYpfSxzcXVhcmVkRXVjbGlkZWFuOmZ1bmN0aW9uKGcseCxUKXtyZXR1cm4geWsoZyx4LFQsMCxkRil9LG1hbmhhdHRhbjpmdW5jdGlvbihnLHgsVCl7cmV0dXJuIHlrKGcseCxULDAsZkYpfSxtYXg6ZnVuY3Rpb24oZyx4LFQpe3JldHVybiB5ayhnLHgsVCwtMS8wLHJYKX19O1U1WyJzcXVhcmVkLWV1Y2xpZGVhbiJdPVU1LnNxdWFyZWRFdWNsaWRlYW4sVTUuc3F1YXJlZGV1Y2xpZGVhbj1VNS5zcXVhcmVkRXVjbGlkZWFuO2Z1bmN0aW9uIEI5KHksZyx4LFQsTCxJKXt2YXIgTztyZXR1cm4ga3QoeSk/Tz15Ok89VTVbeV18fFU1LmV1Y2xpZGVhbixnPT09MCYma3QoeSk/TyhMLEkpOk8oZyx4LFQsTCxJKX12YXIgaVg9emYoe2s6MixtOjIsc2Vuc2l0aXZpdHlUaHJlc2hvbGQ6MWUtNCxkaXN0YW5jZToiZXVjbGlkZWFuIixtYXhJdGVyYXRpb25zOjEwLGF0dHJpYnV0ZXM6W10sdGVzdE1vZGU6ITEsdGVzdENlbnRyb2lkczpudWxsfSksTEw9ZnVuY3Rpb24oZyl7cmV0dXJuIGlYKGcpfSxSOT1mdW5jdGlvbihnLHgsVCxMLEkpe3ZhciBPPUkhPT0ia01lZG9pZHMiLCQ9Tz9mdW5jdGlvbihVKXtyZXR1cm4gVFtVXX06ZnVuY3Rpb24oVSl7cmV0dXJuIExbVV0oVCl9LHo9ZnVuY3Rpb24oZXQpe3JldHVybiBMW2V0XSh4KX0sUz1ULFY9eDtyZXR1cm4gQjkoZyxMLmxlbmd0aCwkLHosUyxWKX0sTUw9ZnVuY3Rpb24oZyx4LFQpe2Zvcih2YXIgTD1ULmxlbmd0aCxJPW5ldyBBcnJheShMKSxPPW5ldyBBcnJheShMKSwkPW5ldyBBcnJheSh4KSx6PW51bGwsUz0wO1M8TDtTKyspSVtTXT1nLm1pbihUW1NdKS52YWx1ZSxPW1NdPWcubWF4KFRbU10pLnZhbHVlO2Zvcih2YXIgVj0wO1Y8eDtWKyspe3o9W107Zm9yKHZhciBVPTA7VTxMO1UrKyl6W1VdPU1hdGgucmFuZG9tKCkqKE9bVV0tSVtVXSkrSVtVXTskW1ZdPXp9cmV0dXJuICR9LGdGPWZ1bmN0aW9uKGcseCxULEwsSSl7Zm9yKHZhciBPPTEvMCwkPTAsej0wO3o8eC5sZW5ndGg7eisrKXt2YXIgUz1SOShULGcseFt6XSxMLEkpO1M8TyYmKE89UywkPXopfXJldHVybiAkfSxwRj1mdW5jdGlvbihnLHgsVCl7Zm9yKHZhciBMPVtdLEk9bnVsbCxPPTA7Tzx4Lmxlbmd0aDtPKyspST14W09dLFRbSS5pZCgpXT09PWcmJkwucHVzaChJKTtyZXR1cm4gTH0sc1g9ZnVuY3Rpb24oZyx4LFQpe3JldHVybiBNYXRoLmFicyh4LWcpPD1UfSxhWD1mdW5jdGlvbihnLHgsVCl7Zm9yKHZhciBMPTA7TDxnLmxlbmd0aDtMKyspZm9yKHZhciBJPTA7STxnW0xdLmxlbmd0aDtJKyspe3ZhciBPPU1hdGguYWJzKGdbTF1bSV0teFtMXVtJXSk7aWYoTz5UKXJldHVybiExfXJldHVybiEwfSxvWD1mdW5jdGlvbihnLHgsVCl7Zm9yKHZhciBMPTA7TDxUO0wrKylpZihnPT09eFtMXSlyZXR1cm4hMDtyZXR1cm4hMX0sYkY9ZnVuY3Rpb24oZyx4KXt2YXIgVD1uZXcgQXJyYXkoeCk7aWYoZy5sZW5ndGg8NTApZm9yKHZhciBMPTA7TDx4O0wrKyl7Zm9yKHZhciBJPWdbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmcubGVuZ3RoKV07b1goSSxULEwpOylJPWdbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmcubGVuZ3RoKV07VFtMXT1JfWVsc2UgZm9yKHZhciBPPTA7Tzx4O08rKylUW09dPWdbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmcubGVuZ3RoKV07cmV0dXJuIFR9LHZGPWZ1bmN0aW9uKGcseCxUKXtmb3IodmFyIEw9MCxJPTA7STx4Lmxlbmd0aDtJKyspTCs9UjkoIm1hbmhhdHRhbiIseFtJXSxnLFQsImtNZWRvaWRzIik7cmV0dXJuIEx9LGNYPWZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuY3koKSxUPXRoaXMubm9kZXMoKSxMPW51bGwsST1MTChnKSxPPW5ldyBBcnJheShJLmspLCQ9e30sejtJLnRlc3RNb2RlP3R5cGVvZiBJLnRlc3RDZW50cm9pZHM9PSJudW1iZXIiPyhJLnRlc3RDZW50cm9pZHMsej1NTChULEkuayxJLmF0dHJpYnV0ZXMpKTpmKEkudGVzdENlbnRyb2lkcyk9PT0ib2JqZWN0Ij96PUkudGVzdENlbnRyb2lkczp6PU1MKFQsSS5rLEkuYXR0cmlidXRlcyk6ej1NTChULEkuayxJLmF0dHJpYnV0ZXMpO2Zvcih2YXIgUz0hMCxWPTA7UyYmVjxJLm1heEl0ZXJhdGlvbnM7KXtmb3IodmFyIFU9MDtVPFQubGVuZ3RoO1UrKylMPVRbVV0sJFtMLmlkKCldPWdGKEwseixJLmRpc3RhbmNlLEkuYXR0cmlidXRlcywia01lYW5zIik7Uz0hMTtmb3IodmFyIGV0PTA7ZXQ8SS5rO2V0Kyspe3ZhciBhdD1wRihldCxULCQpO2lmKGF0Lmxlbmd0aCE9PTApe2Zvcih2YXIgbHQ9SS5hdHRyaWJ1dGVzLmxlbmd0aCxndD16W2V0XSxMdD1uZXcgQXJyYXkobHQpLEV0PW5ldyBBcnJheShsdCksRHQ9MDtEdDxsdDtEdCsrKXtFdFtEdF09MDtmb3IodmFyIEl0PTA7SXQ8YXQubGVuZ3RoO0l0KyspTD1hdFtJdF0sRXRbRHRdKz1JLmF0dHJpYnV0ZXNbRHRdKEwpO0x0W0R0XT1FdFtEdF0vYXQubGVuZ3RoLHNYKEx0W0R0XSxndFtEdF0sSS5zZW5zaXRpdml0eVRocmVzaG9sZCl8fChTPSEwKX16W2V0XT1MdCxPW2V0XT14LmNvbGxlY3Rpb24oYXQpfX1WKyt9cmV0dXJuIE99LHVYPWZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuY3koKSxUPXRoaXMubm9kZXMoKSxMPW51bGwsST1MTChnKSxPPW5ldyBBcnJheShJLmspLCQsej17fSxTLFY9bmV3IEFycmF5KEkuayk7SS50ZXN0TW9kZT90eXBlb2YgSS50ZXN0Q2VudHJvaWRzPT0ibnVtYmVyInx8KGYoSS50ZXN0Q2VudHJvaWRzKT09PSJvYmplY3QiPyQ9SS50ZXN0Q2VudHJvaWRzOiQ9YkYoVCxJLmspKTokPWJGKFQsSS5rKTtmb3IodmFyIFU9ITAsZXQ9MDtVJiZldDxJLm1heEl0ZXJhdGlvbnM7KXtmb3IodmFyIGF0PTA7YXQ8VC5sZW5ndGg7YXQrKylMPVRbYXRdLHpbTC5pZCgpXT1nRihMLCQsSS5kaXN0YW5jZSxJLmF0dHJpYnV0ZXMsImtNZWRvaWRzIik7VT0hMTtmb3IodmFyIGx0PTA7bHQ8JC5sZW5ndGg7bHQrKyl7dmFyIGd0PXBGKGx0LFQseik7aWYoZ3QubGVuZ3RoIT09MCl7VltsdF09dkYoJFtsdF0sZ3QsSS5hdHRyaWJ1dGVzKTtmb3IodmFyIEx0PTA7THQ8Z3QubGVuZ3RoO0x0KyspUz12RihndFtMdF0sZ3QsSS5hdHRyaWJ1dGVzKSxTPFZbbHRdJiYoVltsdF09UywkW2x0XT1ndFtMdF0sVT0hMCk7T1tsdF09eC5jb2xsZWN0aW9uKGd0KX19ZXQrK31yZXR1cm4gT30sbFg9ZnVuY3Rpb24oZyx4LFQsTCxJKXtmb3IodmFyIE8sJCx6PTA7ejx4Lmxlbmd0aDt6KyspZm9yKHZhciBTPTA7UzxnLmxlbmd0aDtTKyspTFt6XVtTXT1NYXRoLnBvdyhUW3pdW1NdLEkubSk7Zm9yKHZhciBWPTA7VjxnLmxlbmd0aDtWKyspZm9yKHZhciBVPTA7VTxJLmF0dHJpYnV0ZXMubGVuZ3RoO1UrKyl7Tz0wLCQ9MDtmb3IodmFyIGV0PTA7ZXQ8eC5sZW5ndGg7ZXQrKylPKz1MW2V0XVtWXSpJLmF0dHJpYnV0ZXNbVV0oeFtldF0pLCQrPUxbZXRdW1ZdO2dbVl1bVV09Ty8kfX0saFg9ZnVuY3Rpb24oZyx4LFQsTCxJKXtmb3IodmFyIE89MDtPPGcubGVuZ3RoO08rKyl4W09dPWdbT10uc2xpY2UoKTtmb3IodmFyICQseixTLFY9Mi8oSS5tLTEpLFU9MDtVPFQubGVuZ3RoO1UrKylmb3IodmFyIGV0PTA7ZXQ8TC5sZW5ndGg7ZXQrKyl7JD0wO2Zvcih2YXIgYXQ9MDthdDxULmxlbmd0aDthdCsrKXo9UjkoSS5kaXN0YW5jZSxMW2V0XSxUW1VdLEkuYXR0cmlidXRlcywiY21lYW5zIiksUz1SOShJLmRpc3RhbmNlLExbZXRdLFRbYXRdLEkuYXR0cmlidXRlcywiY21lYW5zIiksJCs9TWF0aC5wb3coei9TLFYpO2dbZXRdW1VdPTEvJH19LGZYPWZ1bmN0aW9uKGcseCxULEwpe2Zvcih2YXIgST1uZXcgQXJyYXkoVC5rKSxPPTA7TzxJLmxlbmd0aDtPKyspSVtPXT1bXTtmb3IodmFyICQseixTPTA7Uzx4Lmxlbmd0aDtTKyspeyQ9LTEvMCx6PS0xO2Zvcih2YXIgVj0wO1Y8eFswXS5sZW5ndGg7VisrKXhbU11bVl0+JCYmKCQ9eFtTXVtWXSx6PVYpO0lbel0ucHVzaChnW1NdKX1mb3IodmFyIFU9MDtVPEkubGVuZ3RoO1UrKylJW1VdPUwuY29sbGVjdGlvbihJW1VdKTtyZXR1cm4gSX0sd0Y9ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5jeSgpLFQ9dGhpcy5ub2RlcygpLEw9TEwoZyksSSxPLCQseixTO3o9bmV3IEFycmF5KFQubGVuZ3RoKTtmb3IodmFyIFY9MDtWPFQubGVuZ3RoO1YrKyl6W1ZdPW5ldyBBcnJheShMLmspOyQ9bmV3IEFycmF5KFQubGVuZ3RoKTtmb3IodmFyIFU9MDtVPFQubGVuZ3RoO1UrKykkW1VdPW5ldyBBcnJheShMLmspO2Zvcih2YXIgZXQ9MDtldDxULmxlbmd0aDtldCsrKXtmb3IodmFyIGF0PTAsbHQ9MDtsdDxMLms7bHQrKykkW2V0XVtsdF09TWF0aC5yYW5kb20oKSxhdCs9JFtldF1bbHRdO2Zvcih2YXIgZ3Q9MDtndDxMLms7Z3QrKykkW2V0XVtndF09JFtldF1bZ3RdL2F0fU89bmV3IEFycmF5KEwuayk7Zm9yKHZhciBMdD0wO0x0PEwuaztMdCsrKU9bTHRdPW5ldyBBcnJheShMLmF0dHJpYnV0ZXMubGVuZ3RoKTtTPW5ldyBBcnJheShULmxlbmd0aCk7Zm9yKHZhciBFdD0wO0V0PFQubGVuZ3RoO0V0KyspU1tFdF09bmV3IEFycmF5KEwuayk7Zm9yKHZhciBEdD0hMCxJdD0wO0R0JiZJdDxMLm1heEl0ZXJhdGlvbnM7KUR0PSExLGxYKE8sVCwkLFMsTCksaFgoJCx6LE8sVCxMKSxhWCgkLHosTC5zZW5zaXRpdml0eVRocmVzaG9sZCl8fChEdD0hMCksSXQrKztyZXR1cm4gST1mWChULCQsTCx4KSx7Y2x1c3RlcnM6SSxkZWdyZWVPZk1lbWJlcnNoaXA6JH19LGRYPXtrTWVhbnM6Y1gsa01lZG9pZHM6dVgsZnV6enlDTWVhbnM6d0YsZmNtOndGfSxnWD16Zih7ZGlzdGFuY2U6ImV1Y2xpZGVhbiIsbGlua2FnZToibWluIixtb2RlOiJ0aHJlc2hvbGQiLHRocmVzaG9sZDoxLzAsYWRkRGVuZHJvZ3JhbTohMSxkZW5kcm9ncmFtRGVwdGg6MCxhdHRyaWJ1dGVzOltdfSkscFg9e3NpbmdsZToibWluIixjb21wbGV0ZToibWF4In0sYlg9ZnVuY3Rpb24oZyl7dmFyIHg9Z1goZyksVD1wWFt4LmxpbmthZ2VdO3JldHVybiBUIT1udWxsJiYoeC5saW5rYWdlPVQpLHh9LG1GPWZ1bmN0aW9uKGcseCxULEwsSSl7Zm9yKHZhciBPPTAsJD0xLzAseixTPUkuYXR0cmlidXRlcyxWPWZ1bmN0aW9uKFV0LGZlKXtyZXR1cm4gQjkoSS5kaXN0YW5jZSxTLmxlbmd0aCxmdW5jdGlvbihnZSl7cmV0dXJuIFNbZ2VdKFV0KX0sZnVuY3Rpb24oZ2Upe3JldHVybiBTW2dlXShmZSl9LFV0LGZlKX0sVT0wO1U8Zy5sZW5ndGg7VSsrKXt2YXIgZXQ9Z1tVXS5rZXksYXQ9VFtldF1bTFtldF1dO2F0PCQmJihPPWV0LCQ9YXQpfWlmKEkubW9kZT09PSJ0aHJlc2hvbGQiJiYkPj1JLnRocmVzaG9sZHx8SS5tb2RlPT09ImRlbmRyb2dyYW0iJiZnLmxlbmd0aD09PTEpcmV0dXJuITE7dmFyIGx0PXhbT10sZ3Q9eFtMW09dXSxMdDtJLm1vZGU9PT0iZGVuZHJvZ3JhbSI/THQ9e2xlZnQ6bHQscmlnaHQ6Z3Qsa2V5Omx0LmtleX06THQ9e3ZhbHVlOmx0LnZhbHVlLmNvbmNhdChndC52YWx1ZSksa2V5Omx0LmtleX0sZ1tsdC5pbmRleF09THQsZy5zcGxpY2UoZ3QuaW5kZXgsMSkseFtsdC5rZXldPUx0O2Zvcih2YXIgRXQ9MDtFdDxnLmxlbmd0aDtFdCsrKXt2YXIgRHQ9Z1tFdF07bHQua2V5PT09RHQua2V5P3o9MS8wOkkubGlua2FnZT09PSJtaW4iPyh6PVRbbHQua2V5XVtEdC5rZXldLFRbbHQua2V5XVtEdC5rZXldPlRbZ3Qua2V5XVtEdC5rZXldJiYoej1UW2d0LmtleV1bRHQua2V5XSkpOkkubGlua2FnZT09PSJtYXgiPyh6PVRbbHQua2V5XVtEdC5rZXldLFRbbHQua2V5XVtEdC5rZXldPFRbZ3Qua2V5XVtEdC5rZXldJiYoej1UW2d0LmtleV1bRHQua2V5XSkpOkkubGlua2FnZT09PSJtZWFuIj96PShUW2x0LmtleV1bRHQua2V5XSpsdC5zaXplK1RbZ3Qua2V5XVtEdC5rZXldKmd0LnNpemUpLyhsdC5zaXplK2d0LnNpemUpOkkubW9kZT09PSJkZW5kcm9ncmFtIj96PVYoRHQudmFsdWUsbHQudmFsdWUpOno9VihEdC52YWx1ZVswXSxsdC52YWx1ZVswXSksVFtsdC5rZXldW0R0LmtleV09VFtEdC5rZXldW2x0LmtleV09en1mb3IodmFyIEl0PTA7SXQ8Zy5sZW5ndGg7SXQrKyl7dmFyIHp0PWdbSXRdLmtleTtpZihMW3p0XT09PWx0LmtleXx8TFt6dF09PT1ndC5rZXkpe2Zvcih2YXIgdGU9enQsWHQ9MDtYdDxnLmxlbmd0aDtYdCsrKXt2YXIgSHQ9Z1tYdF0ua2V5O1RbenRdW0h0XTxUW3p0XVt0ZV0mJih0ZT1IdCl9TFt6dF09dGV9Z1tJdF0uaW5kZXg9SXR9cmV0dXJuIGx0LmtleT1ndC5rZXk9bHQuaW5kZXg9Z3QuaW5kZXg9bnVsbCwhMH0sajk9ZnVuY3Rpb24geShnLHgsVCl7ZyYmKGcudmFsdWU/eC5wdXNoKGcudmFsdWUpOihnLmxlZnQmJnkoZy5sZWZ0LHgpLGcucmlnaHQmJnkoZy5yaWdodCx4KSkpfSx2WD1mdW5jdGlvbiB5KGcseCl7aWYoIWcpcmV0dXJuIiI7aWYoZy5sZWZ0JiZnLnJpZ2h0KXt2YXIgVD15KGcubGVmdCx4KSxMPXkoZy5yaWdodCx4KSxJPXguYWRkKHtncm91cDoibm9kZXMiLGRhdGE6e2lkOlQrIiwiK0x9fSk7cmV0dXJuIHguYWRkKHtncm91cDoiZWRnZXMiLGRhdGE6e3NvdXJjZTpULHRhcmdldDpJLmlkKCl9fSkseC5hZGQoe2dyb3VwOiJlZGdlcyIsZGF0YTp7c291cmNlOkwsdGFyZ2V0OkkuaWQoKX19KSxJLmlkKCl9ZWxzZSBpZihnLnZhbHVlKXJldHVybiBnLnZhbHVlLmlkKCl9LHdYPWZ1bmN0aW9uIHkoZyx4LFQpe2lmKCFnKXJldHVybltdO3ZhciBMPVtdLEk9W10sTz1bXTtyZXR1cm4geD09PTA/KGcubGVmdCYmajkoZy5sZWZ0LEwpLGcucmlnaHQmJmo5KGcucmlnaHQsSSksTz1MLmNvbmNhdChJKSxbVC5jb2xsZWN0aW9uKE8pXSk6eD09PTE/Zy52YWx1ZT9bVC5jb2xsZWN0aW9uKGcudmFsdWUpXTooZy5sZWZ0JiZqOShnLmxlZnQsTCksZy5yaWdodCYmajkoZy5yaWdodCxJKSxbVC5jb2xsZWN0aW9uKEwpLFQuY29sbGVjdGlvbihJKV0pOmcudmFsdWU/W1QuY29sbGVjdGlvbihnLnZhbHVlKV06KGcubGVmdCYmKEw9eShnLmxlZnQseC0xLFQpKSxnLnJpZ2h0JiYoST15KGcucmlnaHQseC0xLFQpKSxMLmNvbmNhdChJKSl9LHlGPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeD10aGlzLmN5KCksVD10aGlzLm5vZGVzKCksTD1iWChnKSxJPUwuYXR0cmlidXRlcyxPPWZ1bmN0aW9uKEl0LHp0KXtyZXR1cm4gQjkoTC5kaXN0YW5jZSxJLmxlbmd0aCxmdW5jdGlvbih0ZSl7cmV0dXJuIElbdGVdKEl0KX0sZnVuY3Rpb24odGUpe3JldHVybiBJW3RlXSh6dCl9LEl0LHp0KX0sJD1bXSx6PVtdLFM9W10sVj1bXSxVPTA7VTxULmxlbmd0aDtVKyspe3ZhciBldD17dmFsdWU6TC5tb2RlPT09ImRlbmRyb2dyYW0iP1RbVV06W1RbVV1dLGtleTpVLGluZGV4OlV9OyRbVV09ZXQsVltVXT1ldCx6W1VdPVtdLFNbVV09MH1mb3IodmFyIGF0PTA7YXQ8JC5sZW5ndGg7YXQrKylmb3IodmFyIGx0PTA7bHQ8PWF0O2x0Kyspe3ZhciBndD12b2lkIDA7TC5tb2RlPT09ImRlbmRyb2dyYW0iP2d0PWF0PT09bHQ/MS8wOk8oJFthdF0udmFsdWUsJFtsdF0udmFsdWUpOmd0PWF0PT09bHQ/MS8wOk8oJFthdF0udmFsdWVbMF0sJFtsdF0udmFsdWVbMF0pLHpbYXRdW2x0XT1ndCx6W2x0XVthdF09Z3QsZ3Q8elthdF1bU1thdF1dJiYoU1thdF09bHQpfWZvcih2YXIgTHQ9bUYoJCxWLHosUyxMKTtMdDspTHQ9bUYoJCxWLHosUyxMKTt2YXIgRXQ7cmV0dXJuIEwubW9kZT09PSJkZW5kcm9ncmFtIj8oRXQ9d1goJFswXSxMLmRlbmRyb2dyYW1EZXB0aCx4KSxMLmFkZERlbmRyb2dyYW0mJnZYKCRbMF0seCkpOihFdD1uZXcgQXJyYXkoJC5sZW5ndGgpLCQuZm9yRWFjaChmdW5jdGlvbihEdCxJdCl7RHQua2V5PUR0LmluZGV4PW51bGwsRXRbSXRdPXguY29sbGVjdGlvbihEdC52YWx1ZSl9KSksRXR9LG1YPXtoaWVyYXJjaGljYWxDbHVzdGVyaW5nOnlGLGhjYTp5Rn0seVg9emYoe2Rpc3RhbmNlOiJldWNsaWRlYW4iLHByZWZlcmVuY2U6Im1lZGlhbiIsZGFtcGluZzouOCxtYXhJdGVyYXRpb25zOjFlMyxtaW5JdGVyYXRpb25zOjEwMCxhdHRyaWJ1dGVzOltdfSkseFg9ZnVuY3Rpb24oZyl7dmFyIHg9Zy5kYW1waW5nLFQ9Zy5wcmVmZXJlbmNlOy41PD14JiZ4PDF8fG91KCJEYW1waW5nIG11c3QgcmFuZ2Ugb24gWzAuNSwgMSkuICBHb3Q6ICIuY29uY2F0KHgpKTt2YXIgTD1bIm1lZGlhbiIsIm1lYW4iLCJtaW4iLCJtYXgiXTtyZXR1cm4gTC5zb21lKGZ1bmN0aW9uKEkpe3JldHVybiBJPT09VH0pfHxzdChUKXx8b3UoIlByZWZlcmVuY2UgbXVzdCBiZSBvbmUgb2YgWyIuY29uY2F0KEwubWFwKGZ1bmN0aW9uKEkpe3JldHVybiInIi5jb25jYXQoSSwiJyIpfSkuam9pbigiLCAiKSwiXSBvciBhIG51bWJlci4gIEdvdDogIikuY29uY2F0KFQpKSx5WChnKX0sa1g9ZnVuY3Rpb24oZyx4LFQsTCl7dmFyIEk9ZnVuY3Rpb24oJCx6KXtyZXR1cm4gTFt6XSgkKX07cmV0dXJuLUI5KGcsTC5sZW5ndGgsZnVuY3Rpb24oTyl7cmV0dXJuIEkoeCxPKX0sZnVuY3Rpb24oTyl7cmV0dXJuIEkoVCxPKX0seCxUKX0sRVg9ZnVuY3Rpb24oZyx4KXt2YXIgVD1udWxsO3JldHVybiB4PT09Im1lZGlhbiI/VD1rWShnKTp4PT09Im1lYW4iP1Q9eFkoZyk6eD09PSJtaW4iP1Q9bVkoZyk6eD09PSJtYXgiP1Q9eVkoZyk6VD14LFR9LFRYPWZ1bmN0aW9uKGcseCxUKXtmb3IodmFyIEw9W10sST0wO0k8ZztJKyspeFtJKmcrSV0rVFtJKmcrSV0+MCYmTC5wdXNoKEkpO3JldHVybiBMfSx4Rj1mdW5jdGlvbihnLHgsVCl7Zm9yKHZhciBMPVtdLEk9MDtJPGc7SSsrKXtmb3IodmFyIE89LTEsJD0tMS8wLHo9MDt6PFQubGVuZ3RoO3orKyl7dmFyIFM9VFt6XTt4W0kqZytTXT4kJiYoTz1TLCQ9eFtJKmcrU10pfU8+MCYmTC5wdXNoKE8pfWZvcih2YXIgVj0wO1Y8VC5sZW5ndGg7VisrKUxbVFtWXV09VFtWXTtyZXR1cm4gTH0sX1g9ZnVuY3Rpb24oZyx4LFQpe2Zvcih2YXIgTD14RihnLHgsVCksST0wO0k8VC5sZW5ndGg7SSsrKXtmb3IodmFyIE89W10sJD0wOyQ8TC5sZW5ndGg7JCsrKUxbJF09PT1UW0ldJiZPLnB1c2goJCk7Zm9yKHZhciB6PS0xLFM9LTEvMCxWPTA7VjxPLmxlbmd0aDtWKyspe2Zvcih2YXIgVT0wLGV0PTA7ZXQ8Ty5sZW5ndGg7ZXQrKylVKz14W09bZXRdKmcrT1tWXV07VT5TJiYoej1WLFM9VSl9VFtJXT1PW3pdfXJldHVybiBMPXhGKGcseCxUKSxMfSxrRj1mdW5jdGlvbihnKXtmb3IodmFyIHg9dGhpcy5jeSgpLFQ9dGhpcy5ub2RlcygpLEw9eFgoZyksST17fSxPPTA7TzxULmxlbmd0aDtPKyspSVtUW09dLmlkKCldPU87dmFyICQseixTLFYsVSxldDskPVQubGVuZ3RoLHo9JCokLFM9bmV3IEFycmF5KHopO2Zvcih2YXIgYXQ9MDthdDx6O2F0KyspU1thdF09LTEvMDtmb3IodmFyIGx0PTA7bHQ8JDtsdCsrKWZvcih2YXIgZ3Q9MDtndDwkO2d0KyspbHQhPT1ndCYmKFNbbHQqJCtndF09a1goTC5kaXN0YW5jZSxUW2x0XSxUW2d0XSxMLmF0dHJpYnV0ZXMpKTtWPUVYKFMsTC5wcmVmZXJlbmNlKTtmb3IodmFyIEx0PTA7THQ8JDtMdCsrKVNbTHQqJCtMdF09VjtVPW5ldyBBcnJheSh6KTtmb3IodmFyIEV0PTA7RXQ8ejtFdCsrKVVbRXRdPTA7ZXQ9bmV3IEFycmF5KHopO2Zvcih2YXIgRHQ9MDtEdDx6O0R0KyspZXRbRHRdPTA7Zm9yKHZhciBJdD1uZXcgQXJyYXkoJCksenQ9bmV3IEFycmF5KCQpLHRlPW5ldyBBcnJheSgkKSxYdD0wO1h0PCQ7WHQrKylJdFtYdF09MCx6dFtYdF09MCx0ZVtYdF09MDtmb3IodmFyIEh0PW5ldyBBcnJheSgkKkwubWluSXRlcmF0aW9ucyksaWU9MDtpZTxIdC5sZW5ndGg7aWUrKylIdFtpZV09MDt2YXIgVXQ7Zm9yKFV0PTA7VXQ8TC5tYXhJdGVyYXRpb25zO1V0Kyspe2Zvcih2YXIgZmU9MDtmZTwkO2ZlKyspe2Zvcih2YXIgZ2U9LTEvMCxzZT0tMS8wLE5lPS0xLHBlPTAsZ249MDtnbjwkO2duKyspSXRbZ25dPVVbZmUqJCtnbl0scGU9ZXRbZmUqJCtnbl0rU1tmZSokK2duXSxwZT49Z2U/KHNlPWdlLGdlPXBlLE5lPWduKTpwZT5zZSYmKHNlPXBlKTtmb3IodmFyIGplPTA7amU8JDtqZSsrKVVbZmUqJCtqZV09KDEtTC5kYW1waW5nKSooU1tmZSokK2plXS1nZSkrTC5kYW1waW5nKkl0W2plXTtVW2ZlKiQrTmVdPSgxLUwuZGFtcGluZykqKFNbZmUqJCtOZV0tc2UpK0wuZGFtcGluZypJdFtOZV19Zm9yKHZhciBHZT0wO0dlPCQ7R2UrKyl7Zm9yKHZhciB4bj0wLERuPTA7RG48JDtEbisrKUl0W0RuXT1ldFtEbiokK0dlXSx6dFtEbl09TWF0aC5tYXgoMCxVW0RuKiQrR2VdKSx4bis9enRbRG5dO3huLT16dFtHZV0senRbR2VdPVVbR2UqJCtHZV0seG4rPXp0W0dlXTtmb3IodmFyIFhuPTA7WG48JDtYbisrKWV0W1huKiQrR2VdPSgxLUwuZGFtcGluZykqTWF0aC5taW4oMCx4bi16dFtYbl0pK0wuZGFtcGluZypJdFtYbl07ZXRbR2UqJCtHZV09KDEtTC5kYW1waW5nKSooeG4tenRbR2VdKStMLmRhbXBpbmcqSXRbR2VdfWZvcih2YXIgQ249MCxZbj0wO1luPCQ7WW4rKyl7dmFyIHJyPWV0W1luKiQrWW5dK1VbWW4qJCtZbl0+MD8xOjA7SHRbVXQlTC5taW5JdGVyYXRpb25zKiQrWW5dPXJyLENuKz1ycn1pZihDbj4wJiYoVXQ+PUwubWluSXRlcmF0aW9ucy0xfHxVdD09TC5tYXhJdGVyYXRpb25zLTEpKXtmb3IodmFyIHdyPTAsdXI9MDt1cjwkO3VyKyspe3RlW3VyXT0wO2Zvcih2YXIgZXI9MDtlcjxMLm1pbkl0ZXJhdGlvbnM7ZXIrKyl0ZVt1cl0rPUh0W2VyKiQrdXJdOyh0ZVt1cl09PT0wfHx0ZVt1cl09PT1MLm1pbkl0ZXJhdGlvbnMpJiZ3cisrfWlmKHdyPT09JClicmVha319Zm9yKHZhciBibj1UWCgkLFUsZXQpLHByPV9YKCQsUyxibiksZnI9e30scmk9MDtyaTxibi5sZW5ndGg7cmkrKylmcltibltyaV1dPVtdO2Zvcih2YXIgX2k9MDtfaTxULmxlbmd0aDtfaSsrKXt2YXIgaWE9SVtUW19pXS5pZCgpXSxMYT1wcltpYV07TGEhPW51bGwmJmZyW0xhXS5wdXNoKFRbX2ldKX1mb3IodmFyIERpPW5ldyBBcnJheShibi5sZW5ndGgpLHdpPTA7d2k8Ym4ubGVuZ3RoO3dpKyspRGlbd2ldPXguY29sbGVjdGlvbihmcltiblt3aV1dKTtyZXR1cm4gRGl9LENYPXthZmZpbml0eVByb3BhZ2F0aW9uOmtGLGFwOmtGfSxTWD16Zih7cm9vdDp2b2lkIDAsZGlyZWN0ZWQ6ITF9KSxBWD17aGllcmhvbHplcjpmdW5jdGlvbihnKXtpZighY3QoZykpe3ZhciB4PWFyZ3VtZW50cztnPXtyb290OnhbMF0sZGlyZWN0ZWQ6eFsxXX19dmFyIFQ9U1goZyksTD1ULnJvb3QsST1ULmRpcmVjdGVkLE89dGhpcywkPSExLHosUyxWO0wmJihWPVR0KEwpP3RoaXMuZmlsdGVyKEwpWzBdLmlkKCk6TFswXS5pZCgpKTt2YXIgVT17fSxldD17fTtJP08uZm9yRWFjaChmdW5jdGlvbihEdCl7dmFyIEl0PUR0LmlkKCk7aWYoRHQuaXNOb2RlKCkpe3ZhciB6dD1EdC5pbmRlZ3JlZSghMCksdGU9RHQub3V0ZGVncmVlKCEwKSxYdD16dC10ZSxIdD10ZS16dDtYdD09MT96PyQ9ITA6ej1JdDpIdD09MT9TPyQ9ITA6Uz1JdDooSHQ+MXx8WHQ+MSkmJigkPSEwKSxVW0l0XT1bXSxEdC5vdXRnb2VycygpLmZvckVhY2goZnVuY3Rpb24oaWUpe2llLmlzRWRnZSgpJiZVW0l0XS5wdXNoKGllLmlkKCkpfSl9ZWxzZSBldFtJdF09W3ZvaWQgMCxEdC50YXJnZXQoKS5pZCgpXX0pOk8uZm9yRWFjaChmdW5jdGlvbihEdCl7dmFyIEl0PUR0LmlkKCk7aWYoRHQuaXNOb2RlKCkpe3ZhciB6dD1EdC5kZWdyZWUoITApO3p0JTImJih6P1M/JD0hMDpTPUl0Ono9SXQpLFVbSXRdPVtdLER0LmNvbm5lY3RlZEVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbih0ZSl7cmV0dXJuIFVbSXRdLnB1c2godGUuaWQoKSl9KX1lbHNlIGV0W0l0XT1bRHQuc291cmNlKCkuaWQoKSxEdC50YXJnZXQoKS5pZCgpXX0pO3ZhciBhdD17Zm91bmQ6ITEsdHJhaWw6dm9pZCAwfTtpZigkKXJldHVybiBhdDtpZihTJiZ6KWlmKEkpe2lmKFYmJlMhPVYpcmV0dXJuIGF0O1Y9U31lbHNle2lmKFYmJlMhPVYmJnohPVYpcmV0dXJuIGF0O1Z8fChWPVMpfWVsc2UgVnx8KFY9T1swXS5pZCgpKTt2YXIgbHQ9ZnVuY3Rpb24oSXQpe2Zvcih2YXIgenQ9SXQsdGU9W0l0XSxYdCxIdCxpZTtVW3p0XS5sZW5ndGg7KVh0PVVbenRdLnNoaWZ0KCksSHQ9ZXRbWHRdWzBdLGllPWV0W1h0XVsxXSx6dCE9aWU/KFVbaWVdPVVbaWVdLmZpbHRlcihmdW5jdGlvbihVdCl7cmV0dXJuIFV0IT1YdH0pLHp0PWllKTohSSYmenQhPUh0JiYoVVtIdF09VVtIdF0uZmlsdGVyKGZ1bmN0aW9uKFV0KXtyZXR1cm4gVXQhPVh0fSksenQ9SHQpLHRlLnVuc2hpZnQoWHQpLHRlLnVuc2hpZnQoenQpO3JldHVybiB0ZX0sZ3Q9W10sTHQ9W107Zm9yKEx0PWx0KFYpO0x0Lmxlbmd0aCE9MTspVVtMdFswXV0ubGVuZ3RoPT0wPyhndC51bnNoaWZ0KE8uZ2V0RWxlbWVudEJ5SWQoTHQuc2hpZnQoKSkpLGd0LnVuc2hpZnQoTy5nZXRFbGVtZW50QnlJZChMdC5zaGlmdCgpKSkpOkx0PWx0KEx0LnNoaWZ0KCkpLmNvbmNhdChMdCk7Z3QudW5zaGlmdChPLmdldEVsZW1lbnRCeUlkKEx0LnNoaWZ0KCkpKTtmb3IodmFyIEV0IGluIFUpaWYoVVtFdF0ubGVuZ3RoKXJldHVybiBhdDtyZXR1cm4gYXQuZm91bmQ9ITAsYXQudHJhaWw9dGhpcy5zcGF3bihndCwhMCksYXR9fSwkOT1mdW5jdGlvbigpe3ZhciBnPXRoaXMseD17fSxUPTAsTD0wLEk9W10sTz1bXSwkPXt9LHo9ZnVuY3Rpb24oZXQsYXQpe2Zvcih2YXIgbHQ9Ty5sZW5ndGgtMSxndD1bXSxMdD1nLnNwYXduKCk7T1tsdF0ueCE9ZXR8fE9bbHRdLnkhPWF0OylndC5wdXNoKE8ucG9wKCkuZWRnZSksbHQtLTtndC5wdXNoKE8ucG9wKCkuZWRnZSksZ3QuZm9yRWFjaChmdW5jdGlvbihFdCl7dmFyIER0PUV0LmNvbm5lY3RlZE5vZGVzKCkuaW50ZXJzZWN0aW9uKGcpO0x0Lm1lcmdlKEV0KSxEdC5mb3JFYWNoKGZ1bmN0aW9uKEl0KXt2YXIgenQ9SXQuaWQoKSx0ZT1JdC5jb25uZWN0ZWRFZGdlcygpLmludGVyc2VjdGlvbihnKTtMdC5tZXJnZShJdCkseFt6dF0uY3V0VmVydGV4P0x0Lm1lcmdlKHRlLmZpbHRlcihmdW5jdGlvbihYdCl7cmV0dXJuIFh0LmlzTG9vcCgpfSkpOkx0Lm1lcmdlKHRlKX0pfSksSS5wdXNoKEx0KX0sUz1mdW5jdGlvbiBVKGV0LGF0LGx0KXtldD09PWx0JiYoTCs9MSkseFthdF09e2lkOlQsbG93OlQrKyxjdXRWZXJ0ZXg6ITF9O3ZhciBndD1nLmdldEVsZW1lbnRCeUlkKGF0KS5jb25uZWN0ZWRFZGdlcygpLmludGVyc2VjdGlvbihnKTtpZihndC5zaXplKCk9PT0wKUkucHVzaChnLnNwYXduKGcuZ2V0RWxlbWVudEJ5SWQoYXQpKSk7ZWxzZXt2YXIgTHQsRXQsRHQsSXQ7Z3QuZm9yRWFjaChmdW5jdGlvbih6dCl7THQ9enQuc291cmNlKCkuaWQoKSxFdD16dC50YXJnZXQoKS5pZCgpLER0PUx0PT09YXQ/RXQ6THQsRHQhPT1sdCYmKEl0PXp0LmlkKCksJFtJdF18fCgkW0l0XT0hMCxPLnB1c2goe3g6YXQseTpEdCxlZGdlOnp0fSkpLER0IGluIHg/eFthdF0ubG93PU1hdGgubWluKHhbYXRdLmxvdyx4W0R0XS5pZCk6KFUoZXQsRHQsYXQpLHhbYXRdLmxvdz1NYXRoLm1pbih4W2F0XS5sb3cseFtEdF0ubG93KSx4W2F0XS5pZDw9eFtEdF0ubG93JiYoeFthdF0uY3V0VmVydGV4PSEwLHooYXQsRHQpKSkpfSl9fTtnLmZvckVhY2goZnVuY3Rpb24oVSl7aWYoVS5pc05vZGUoKSl7dmFyIGV0PVUuaWQoKTtldCBpbiB4fHwoTD0wLFMoZXQsZXQpLHhbZXRdLmN1dFZlcnRleD1MPjEpfX0pO3ZhciBWPU9iamVjdC5rZXlzKHgpLmZpbHRlcihmdW5jdGlvbihVKXtyZXR1cm4geFtVXS5jdXRWZXJ0ZXh9KS5tYXAoZnVuY3Rpb24oVSl7cmV0dXJuIGcuZ2V0RWxlbWVudEJ5SWQoVSl9KTtyZXR1cm57Y3V0Omcuc3Bhd24oViksY29tcG9uZW50czpJfX0sTFg9e2hvcGNyb2Z0VGFyamFuQmljb25uZWN0ZWQ6JDksaHRiYzokOSxodGI6JDksaG9wY3JvZnRUYXJqYW5CaWNvbm5lY3RlZENvbXBvbmVudHM6JDl9LHo5PWZ1bmN0aW9uKCl7dmFyIGc9dGhpcyx4PXt9LFQ9MCxMPVtdLEk9W10sTz1nLnNwYXduKGcpLCQ9ZnVuY3Rpb24geihTKXtJLnB1c2goUykseFtTXT17aW5kZXg6VCxsb3c6VCsrLGV4cGxvcmVkOiExfTt2YXIgVj1nLmdldEVsZW1lbnRCeUlkKFMpLmNvbm5lY3RlZEVkZ2VzKCkuaW50ZXJzZWN0aW9uKGcpO2lmKFYuZm9yRWFjaChmdW5jdGlvbihndCl7dmFyIEx0PWd0LnRhcmdldCgpLmlkKCk7THQhPT1TJiYoTHQgaW4geHx8eihMdCkseFtMdF0uZXhwbG9yZWR8fCh4W1NdLmxvdz1NYXRoLm1pbih4W1NdLmxvdyx4W0x0XS5sb3cpKSl9KSx4W1NdLmluZGV4PT09eFtTXS5sb3cpe2Zvcih2YXIgVT1nLnNwYXduKCk7Oyl7dmFyIGV0PUkucG9wKCk7aWYoVS5tZXJnZShnLmdldEVsZW1lbnRCeUlkKGV0KSkseFtldF0ubG93PXhbU10uaW5kZXgseFtldF0uZXhwbG9yZWQ9ITAsZXQ9PT1TKWJyZWFrfXZhciBhdD1VLmVkZ2VzV2l0aChVKSxsdD1VLm1lcmdlKGF0KTtMLnB1c2gobHQpLE89Ty5kaWZmZXJlbmNlKGx0KX19O3JldHVybiBnLmZvckVhY2goZnVuY3Rpb24oeil7aWYoei5pc05vZGUoKSl7dmFyIFM9ei5pZCgpO1MgaW4geHx8JChTKX19KSx7Y3V0Ok8sY29tcG9uZW50czpMfX0sTVg9e3RhcmphblN0cm9uZ2x5Q29ubmVjdGVkOno5LHRzYzp6OSx0c2NjOno5LHRhcmphblN0cm9uZ2x5Q29ubmVjdGVkQ29tcG9uZW50czp6OX0sRUY9e307W2drLG9ZLGNZLGxZLGZZLGdZLHZZLHFZLFY1LEc1LEFMLHRYLGRYLG1YLENYLEFYLExYLE1YXS5mb3JFYWNoKGZ1bmN0aW9uKHkpe2ZuKEVGLHkpfSk7LyohCkVtYmVkZGFibGUgTWluaW11bSBTdHJpY3RseS1Db21wbGlhbnQgUHJvbWlzZXMvQSsgMS4xLjEgVGhlbmFibGUKQ29weXJpZ2h0IChjKSAyMDEzLTIwMTQgUmFsZiBTLiBFbmdlbHNjaGFsbCAoaHR0cDovL2VuZ2Vsc2NoYWxsLmNvbSkKTGljZW5zZWQgdW5kZXIgVGhlIE1JVCBMaWNlbnNlIChodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUKQoqL3ZhciBURj0wLF9GPTEsQ0Y9Mixodj1mdW5jdGlvbiB5KGcpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHkpKXJldHVybiBuZXcgeShnKTt0aGlzLmlkPSJUaGVuYWJsZS8xLjAuNyIsdGhpcy5zdGF0ZT1URix0aGlzLmZ1bGZpbGxWYWx1ZT12b2lkIDAsdGhpcy5yZWplY3RSZWFzb249dm9pZCAwLHRoaXMub25GdWxmaWxsZWQ9W10sdGhpcy5vblJlamVjdGVkPVtdLHRoaXMucHJveHk9e3RoZW46dGhpcy50aGVuLmJpbmQodGhpcyl9LHR5cGVvZiBnPT0iZnVuY3Rpb24iJiZnLmNhbGwodGhpcyx0aGlzLmZ1bGZpbGwuYmluZCh0aGlzKSx0aGlzLnJlamVjdC5iaW5kKHRoaXMpKX07aHYucHJvdG90eXBlPXtmdWxmaWxsOmZ1bmN0aW9uKGcpe3JldHVybiBTRih0aGlzLF9GLCJmdWxmaWxsVmFsdWUiLGcpfSxyZWplY3Q6ZnVuY3Rpb24oZyl7cmV0dXJuIFNGKHRoaXMsQ0YsInJlamVjdFJlYXNvbiIsZyl9LHRoZW46ZnVuY3Rpb24oZyx4KXt2YXIgVD10aGlzLEw9bmV3IGh2O3JldHVybiBULm9uRnVsZmlsbGVkLnB1c2goTUYoZyxMLCJmdWxmaWxsIikpLFQub25SZWplY3RlZC5wdXNoKE1GKHgsTCwicmVqZWN0IikpLEFGKFQpLEwucHJveHl9fTt2YXIgU0Y9ZnVuY3Rpb24oZyx4LFQsTCl7cmV0dXJuIGcuc3RhdGU9PT1URiYmKGcuc3RhdGU9eCxnW1RdPUwsQUYoZykpLGd9LEFGPWZ1bmN0aW9uKGcpe2cuc3RhdGU9PT1fRj9MRihnLCJvbkZ1bGZpbGxlZCIsZy5mdWxmaWxsVmFsdWUpOmcuc3RhdGU9PT1DRiYmTEYoZywib25SZWplY3RlZCIsZy5yZWplY3RSZWFzb24pfSxMRj1mdW5jdGlvbihnLHgsVCl7aWYoZ1t4XS5sZW5ndGghPT0wKXt2YXIgTD1nW3hdO2dbeF09W107dmFyIEk9ZnVuY3Rpb24oKXtmb3IodmFyICQ9MDskPEwubGVuZ3RoOyQrKylMWyRdKFQpfTt0eXBlb2Ygc2V0SW1tZWRpYXRlPT0iZnVuY3Rpb24iP3NldEltbWVkaWF0ZShJKTpzZXRUaW1lb3V0KEksMCl9fSxNRj1mdW5jdGlvbihnLHgsVCl7cmV0dXJuIGZ1bmN0aW9uKEwpe2lmKHR5cGVvZiBnIT0iZnVuY3Rpb24iKXhbVF0uY2FsbCh4LEwpO2Vsc2V7dmFyIEk7dHJ5e0k9ZyhMKX1jYXRjaChPKXt4LnJlamVjdChPKTtyZXR1cm59RFgoeCxJKX19fSxEWD1mdW5jdGlvbiB5KGcseCl7aWYoZz09PXh8fGcucHJveHk9PT14KXtnLnJlamVjdChuZXcgVHlwZUVycm9yKCJjYW5ub3QgcmVzb2x2ZSBwcm9taXNlIHdpdGggaXRzZWxmIikpO3JldHVybn12YXIgVDtpZihmKHgpPT09Im9iamVjdCImJnghPT1udWxsfHx0eXBlb2YgeD09ImZ1bmN0aW9uIil0cnl7VD14LnRoZW59Y2F0Y2goSSl7Zy5yZWplY3QoSSk7cmV0dXJufWlmKHR5cGVvZiBUPT0iZnVuY3Rpb24iKXt2YXIgTD0hMTt0cnl7VC5jYWxsKHgsZnVuY3Rpb24oSSl7THx8KEw9ITAsST09PXg/Zy5yZWplY3QobmV3IFR5cGVFcnJvcigiY2lyY3VsYXIgdGhlbmFibGUgY2hhaW4iKSk6eShnLEkpKX0sZnVuY3Rpb24oSSl7THx8KEw9ITAsZy5yZWplY3QoSSkpfSl9Y2F0Y2goSSl7THx8Zy5yZWplY3QoSSl9cmV0dXJufWcuZnVsZmlsbCh4KX07aHYuYWxsPWZ1bmN0aW9uKHkpe3JldHVybiBuZXcgaHYoZnVuY3Rpb24oZyx4KXtmb3IodmFyIFQ9bmV3IEFycmF5KHkubGVuZ3RoKSxMPTAsST1mdW5jdGlvbih6LFMpe1Rbel09UyxMKyssTD09PXkubGVuZ3RoJiZnKFQpfSxPPTA7Tzx5Lmxlbmd0aDtPKyspKGZ1bmN0aW9uKCQpe3ZhciB6PXlbJF0sUz16IT1udWxsJiZ6LnRoZW4hPW51bGw7aWYoUyl6LnRoZW4oZnVuY3Rpb24oVSl7SSgkLFUpfSxmdW5jdGlvbihVKXt4KFUpfSk7ZWxzZXt2YXIgVj16O0koJCxWKX19KShPKX0pfSxodi5yZXNvbHZlPWZ1bmN0aW9uKHkpe3JldHVybiBuZXcgaHYoZnVuY3Rpb24oZyx4KXtnKHkpfSl9LGh2LnJlamVjdD1mdW5jdGlvbih5KXtyZXR1cm4gbmV3IGh2KGZ1bmN0aW9uKGcseCl7eCh5KX0pfTt2YXIgVzU9dHlwZW9mIFByb21pc2U8InUiP1Byb21pc2U6aHYscTk9ZnVuY3Rpb24oZyx4LFQpe3ZhciBMPVB0KGcpLEk9IUwsTz10aGlzLl9wcml2YXRlPWZuKHtkdXJhdGlvbjoxZTN9LHgsVCk7aWYoTy50YXJnZXQ9ZyxPLnN0eWxlPU8uc3R5bGV8fE8uY3NzLE8uc3RhcnRlZD0hMSxPLnBsYXlpbmc9ITEsTy5ob29rZWQ9ITEsTy5hcHBseWluZz0hMSxPLnByb2dyZXNzPTAsTy5jb21wbGV0ZXM9W10sTy5mcmFtZXM9W10sTy5jb21wbGV0ZSYma3QoTy5jb21wbGV0ZSkmJk8uY29tcGxldGVzLnB1c2goTy5jb21wbGV0ZSksSSl7dmFyICQ9Zy5wb3NpdGlvbigpO08uc3RhcnRQb3NpdGlvbj1PLnN0YXJ0UG9zaXRpb258fHt4OiQueCx5OiQueX0sTy5zdGFydFN0eWxlPU8uc3RhcnRTdHlsZXx8Zy5jeSgpLnN0eWxlKCkuZ2V0QW5pbWF0aW9uU3RhcnRTdHlsZShnLE8uc3R5bGUpfWlmKEwpe3ZhciB6PWcucGFuKCk7Ty5zdGFydFBhbj17eDp6LngseTp6Lnl9LE8uc3RhcnRab29tPWcuem9vbSgpfXRoaXMubGVuZ3RoPTEsdGhpc1swXT10aGlzfSxTMz1xOS5wcm90b3R5cGU7Zm4oUzMse2luc3RhbmNlU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuImFuaW1hdGlvbiJ9LGhvb2s6ZnVuY3Rpb24oKXt2YXIgZz10aGlzLl9wcml2YXRlO2lmKCFnLmhvb2tlZCl7dmFyIHgsVD1nLnRhcmdldC5fcHJpdmF0ZS5hbmltYXRpb247Zy5xdWV1ZT94PVQucXVldWU6eD1ULmN1cnJlbnQseC5wdXNoKHRoaXMpLGR0KGcudGFyZ2V0KSYmZy50YXJnZXQuY3koKS5hZGRUb0FuaW1hdGlvblBvb2woZy50YXJnZXQpLGcuaG9va2VkPSEwfXJldHVybiB0aGlzfSxwbGF5OmZ1bmN0aW9uKCl7dmFyIGc9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZy5wcm9ncmVzcz09PTEmJihnLnByb2dyZXNzPTApLGcucGxheWluZz0hMCxnLnN0YXJ0ZWQ9ITEsZy5zdG9wcGVkPSExLHRoaXMuaG9vaygpLHRoaXN9LHBsYXlpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5wbGF5aW5nfSxhcHBseTpmdW5jdGlvbigpe3ZhciBnPXRoaXMuX3ByaXZhdGU7cmV0dXJuIGcuYXBwbHlpbmc9ITAsZy5zdGFydGVkPSExLGcuc3RvcHBlZD0hMSx0aGlzLmhvb2soKSx0aGlzfSxhcHBseWluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmFwcGx5aW5nfSxwYXVzZTpmdW5jdGlvbigpe3ZhciBnPXRoaXMuX3ByaXZhdGU7cmV0dXJuIGcucGxheWluZz0hMSxnLnN0YXJ0ZWQ9ITEsdGhpc30sc3RvcDpmdW5jdGlvbigpe3ZhciBnPXRoaXMuX3ByaXZhdGU7cmV0dXJuIGcucGxheWluZz0hMSxnLnN0YXJ0ZWQ9ITEsZy5zdG9wcGVkPSEwLHRoaXN9LHJld2luZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb2dyZXNzKDApfSxmYXN0Zm9yd2FyZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb2dyZXNzKDEpfSx0aW1lOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuX3ByaXZhdGU7cmV0dXJuIGc9PT12b2lkIDA/eC5wcm9ncmVzcyp4LmR1cmF0aW9uOnRoaXMucHJvZ3Jlc3MoZy94LmR1cmF0aW9uKX0scHJvZ3Jlc3M6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5fcHJpdmF0ZSxUPXgucGxheWluZztyZXR1cm4gZz09PXZvaWQgMD94LnByb2dyZXNzOihUJiZ0aGlzLnBhdXNlKCkseC5wcm9ncmVzcz1nLHguc3RhcnRlZD0hMSxUJiZ0aGlzLnBsYXkoKSx0aGlzKX0sY29tcGxldGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUucHJvZ3Jlc3M9PT0xfSxyZXZlcnNlOmZ1bmN0aW9uKCl7dmFyIGc9dGhpcy5fcHJpdmF0ZSx4PWcucGxheWluZzt4JiZ0aGlzLnBhdXNlKCksZy5wcm9ncmVzcz0xLWcucHJvZ3Jlc3MsZy5zdGFydGVkPSExO3ZhciBUPWZ1bmN0aW9uKFMsVil7dmFyIFU9Z1tTXTtVIT1udWxsJiYoZ1tTXT1nW1ZdLGdbVl09VSl9O2lmKFQoInpvb20iLCJzdGFydFpvb20iKSxUKCJwYW4iLCJzdGFydFBhbiIpLFQoInBvc2l0aW9uIiwic3RhcnRQb3NpdGlvbiIpLGcuc3R5bGUpZm9yKHZhciBMPTA7TDxnLnN0eWxlLmxlbmd0aDtMKyspe3ZhciBJPWcuc3R5bGVbTF0sTz1JLm5hbWUsJD1nLnN0YXJ0U3R5bGVbT107Zy5zdGFydFN0eWxlW09dPUksZy5zdHlsZVtMXT0kfXJldHVybiB4JiZ0aGlzLnBsYXkoKSx0aGlzfSxwcm9taXNlOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuX3ByaXZhdGUsVDtzd2l0Y2goZyl7Y2FzZSJmcmFtZSI6VD14LmZyYW1lczticmVhaztkZWZhdWx0OmNhc2UiY29tcGxldGUiOmNhc2UiY29tcGxldGVkIjpUPXguY29tcGxldGVzfXJldHVybiBuZXcgVzUoZnVuY3Rpb24oTCxJKXtULnB1c2goZnVuY3Rpb24oKXtMKCl9KX0pfX0pLFMzLmNvbXBsZXRlPVMzLmNvbXBsZXRlZCxTMy5ydW49UzMucGxheSxTMy5ydW5uaW5nPVMzLnBsYXlpbmc7dmFyIElYPXthbmltYXRlZDpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3ZhciB4PXRoaXMsVD14Lmxlbmd0aCE9PXZvaWQgMCxMPVQ/eDpbeF0sST10aGlzLl9wcml2YXRlLmN5fHx0aGlzO2lmKCFJLnN0eWxlRW5hYmxlZCgpKXJldHVybiExO3ZhciBPPUxbMF07aWYoTylyZXR1cm4gTy5fcHJpdmF0ZS5hbmltYXRpb24uY3VycmVudC5sZW5ndGg+MH19LGNsZWFyUXVldWU6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgeD10aGlzLFQ9eC5sZW5ndGghPT12b2lkIDAsTD1UP3g6W3hdLEk9dGhpcy5fcHJpdmF0ZS5jeXx8dGhpcztpZighSS5zdHlsZUVuYWJsZWQoKSlyZXR1cm4gdGhpcztmb3IodmFyIE89MDtPPEwubGVuZ3RoO08rKyl7dmFyICQ9TFtPXTskLl9wcml2YXRlLmFuaW1hdGlvbi5xdWV1ZT1bXX1yZXR1cm4gdGhpc319LGRlbGF5OmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHgsVCl7dmFyIEw9dGhpcy5fcHJpdmF0ZS5jeXx8dGhpcztyZXR1cm4gTC5zdHlsZUVuYWJsZWQoKT90aGlzLmFuaW1hdGUoe2RlbGF5OngsZHVyYXRpb246eCxjb21wbGV0ZTpUfSk6dGhpc319LGRlbGF5QW5pbWF0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHgsVCl7dmFyIEw9dGhpcy5fcHJpdmF0ZS5jeXx8dGhpcztyZXR1cm4gTC5zdHlsZUVuYWJsZWQoKT90aGlzLmFuaW1hdGlvbih7ZGVsYXk6eCxkdXJhdGlvbjp4LGNvbXBsZXRlOlR9KTp0aGlzfX0sYW5pbWF0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHgsVCl7dmFyIEw9dGhpcyxJPUwubGVuZ3RoIT09dm9pZCAwLE89ST9MOltMXSwkPXRoaXMuX3ByaXZhdGUuY3l8fHRoaXMsej0hSSxTPSF6O2lmKCEkLnN0eWxlRW5hYmxlZCgpKXJldHVybiB0aGlzO3ZhciBWPSQuc3R5bGUoKTt4PWZuKHt9LHgsVCk7dmFyIFU9T2JqZWN0LmtleXMoeCkubGVuZ3RoPT09MDtpZihVKXJldHVybiBuZXcgcTkoT1swXSx4KTtzd2l0Y2goeC5kdXJhdGlvbj09PXZvaWQgMCYmKHguZHVyYXRpb249NDAwKSx4LmR1cmF0aW9uKXtjYXNlInNsb3ciOnguZHVyYXRpb249NjAwO2JyZWFrO2Nhc2UiZmFzdCI6eC5kdXJhdGlvbj0yMDA7YnJlYWt9aWYoUyYmKHguc3R5bGU9Vi5nZXRQcm9wc0xpc3QoeC5zdHlsZXx8eC5jc3MpLHguY3NzPXZvaWQgMCksUyYmeC5yZW5kZXJlZFBvc2l0aW9uIT1udWxsKXt2YXIgZXQ9eC5yZW5kZXJlZFBvc2l0aW9uLGF0PSQucGFuKCksbHQ9JC56b29tKCk7eC5wb3NpdGlvbj1RUChldCxsdCxhdCl9aWYoeiYmeC5wYW5CeSE9bnVsbCl7dmFyIGd0PXgucGFuQnksTHQ9JC5wYW4oKTt4LnBhbj17eDpMdC54K2d0LngseTpMdC55K2d0Lnl9fXZhciBFdD14LmNlbnRlcnx8eC5jZW50cmU7aWYoeiYmRXQhPW51bGwpe3ZhciBEdD0kLmdldENlbnRlclBhbihFdC5lbGVzLHguem9vbSk7RHQhPW51bGwmJih4LnBhbj1EdCl9aWYoeiYmeC5maXQhPW51bGwpe3ZhciBJdD14LmZpdCx6dD0kLmdldEZpdFZpZXdwb3J0KEl0LmVsZXN8fEl0LmJvdW5kaW5nQm94LEl0LnBhZGRpbmcpO3p0IT1udWxsJiYoeC5wYW49enQucGFuLHguem9vbT16dC56b29tKX1pZih6JiZjdCh4Lnpvb20pKXt2YXIgdGU9JC5nZXRab29tZWRWaWV3cG9ydCh4Lnpvb20pO3RlIT1udWxsPyh0ZS56b29tZWQmJih4Lnpvb209dGUuem9vbSksdGUucGFubmVkJiYoeC5wYW49dGUucGFuKSk6eC56b29tPW51bGx9cmV0dXJuIG5ldyBxOShPWzBdLHgpfX0sYW5pbWF0ZTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih4LFQpe3ZhciBMPXRoaXMsST1MLmxlbmd0aCE9PXZvaWQgMCxPPUk/TDpbTF0sJD10aGlzLl9wcml2YXRlLmN5fHx0aGlzO2lmKCEkLnN0eWxlRW5hYmxlZCgpKXJldHVybiB0aGlzO1QmJih4PWZuKHt9LHgsVCkpO2Zvcih2YXIgej0wO3o8Ty5sZW5ndGg7eisrKXt2YXIgUz1PW3pdLFY9Uy5hbmltYXRlZCgpJiYoeC5xdWV1ZT09PXZvaWQgMHx8eC5xdWV1ZSksVT1TLmFuaW1hdGlvbih4LFY/e3F1ZXVlOiEwfTp2b2lkIDApO1UucGxheSgpfXJldHVybiB0aGlzfX0sc3RvcDpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih4LFQpe3ZhciBMPXRoaXMsST1MLmxlbmd0aCE9PXZvaWQgMCxPPUk/TDpbTF0sJD10aGlzLl9wcml2YXRlLmN5fHx0aGlzO2lmKCEkLnN0eWxlRW5hYmxlZCgpKXJldHVybiB0aGlzO2Zvcih2YXIgej0wO3o8Ty5sZW5ndGg7eisrKXtmb3IodmFyIFM9T1t6XSxWPVMuX3ByaXZhdGUsVT1WLmFuaW1hdGlvbi5jdXJyZW50LGV0PTA7ZXQ8VS5sZW5ndGg7ZXQrKyl7dmFyIGF0PVVbZXRdLGx0PWF0Ll9wcml2YXRlO1QmJihsdC5kdXJhdGlvbj0wKX14JiYoVi5hbmltYXRpb24ucXVldWU9W10pLFR8fChWLmFuaW1hdGlvbi5jdXJyZW50PVtdKX1yZXR1cm4gJC5ub3RpZnkoImRyYXciKSx0aGlzfX19LE9YPUFycmF5LmlzQXJyYXksSDk9T1gsTlg9L1wufFxbKD86W15bXF1dKnwoWyInXSkoPzooPyFcMSlbXlxcXXxcXC4pKj9cMSlcXS8sUFg9L15cdyokLztmdW5jdGlvbiBGWCh5LGcpe2lmKEg5KHkpKXJldHVybiExO3ZhciB4PXR5cGVvZiB5O3JldHVybiB4PT0ibnVtYmVyInx8eD09InN5bWJvbCJ8fHg9PSJib29sZWFuInx8eT09bnVsbHx8a3IoeSk/ITA6UFgudGVzdCh5KXx8IU5YLnRlc3QoeSl8fGchPW51bGwmJnkgaW4gT2JqZWN0KGcpfXZhciBCWD1GWCxSWD0iW29iamVjdCBBc3luY0Z1bmN0aW9uXSIsalg9IltvYmplY3QgRnVuY3Rpb25dIiwkWD0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLHpYPSJbb2JqZWN0IFByb3h5XSI7ZnVuY3Rpb24gcVgoeSl7aWYoIWRuKHkpKXJldHVybiExO3ZhciBnPW5kKHkpO3JldHVybiBnPT1qWHx8Zz09JFh8fGc9PVJYfHxnPT16WH12YXIgSFg9cVgsVlg9WGlbIl9fY29yZS1qc19zaGFyZWRfXyJdLERMPVZYLERGPWZ1bmN0aW9uKCl7dmFyIHk9L1teLl0rJC8uZXhlYyhETCYmREwua2V5cyYmREwua2V5cy5JRV9QUk9UT3x8IiIpO3JldHVybiB5PyJTeW1ib2woc3JjKV8xLiIreToiIn0oKTtmdW5jdGlvbiBHWCh5KXtyZXR1cm4hIURGJiZERiBpbiB5fXZhciBVWD1HWCxXWD1GdW5jdGlvbi5wcm90b3R5cGUsSUY9V1gudG9TdHJpbmc7ZnVuY3Rpb24gS1goeSl7aWYoeSE9bnVsbCl7dHJ5e3JldHVybiBJRi5jYWxsKHkpfWNhdGNoe310cnl7cmV0dXJuIHkrIiJ9Y2F0Y2h7fX1yZXR1cm4iIn12YXIgWVg9S1gsWFg9L1tcXF4kLiorPygpW1xde318XS9nLFFYPS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLFpYPUZ1bmN0aW9uLnByb3RvdHlwZSxKWD1PYmplY3QucHJvdG90eXBlLE9GPVpYLnRvU3RyaW5nLE5GPUpYLmhhc093blByb3BlcnR5LHRRPVJlZ0V4cCgiXiIrT0YuY2FsbChORikucmVwbGFjZShYWCwiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csIiQxLio/IikrIiQiKTtmdW5jdGlvbiBQRih5KXtpZighZG4oeSl8fFVYKHkpKXJldHVybiExO3ZhciBnPUhYKHkpP3RROlFYO3JldHVybiBnLnRlc3QoWVgoeSkpfXZhciBGRj1QRjtmdW5jdGlvbiBlUSh5LGcpe3JldHVybiB5PT1udWxsP3ZvaWQgMDp5W2ddfXZhciBuUT1lUTtmdW5jdGlvbiByUSh5LGcpe3ZhciB4PW5RKHksZyk7cmV0dXJuIEZGKHgpP3g6dm9pZCAwfXZhciBJTD1yUSxpUT1JTChPYmplY3QsImNyZWF0ZSIpLHhrPWlRO2Z1bmN0aW9uIHNRKCl7dGhpcy5fX2RhdGFfXz14az94ayhudWxsKTp7fSx0aGlzLnNpemU9MH12YXIgYVE9c1E7ZnVuY3Rpb24gb1EoeSl7dmFyIGc9dGhpcy5oYXMoeSkmJmRlbGV0ZSB0aGlzLl9fZGF0YV9fW3ldO3JldHVybiB0aGlzLnNpemUtPWc/MTowLGd9dmFyIEJGPW9RLGNRPSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIix1UT1PYmplY3QucHJvdG90eXBlLGxRPXVRLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIGhRKHkpe3ZhciBnPXRoaXMuX19kYXRhX187aWYoeGspe3ZhciB4PWdbeV07cmV0dXJuIHg9PT1jUT92b2lkIDA6eH1yZXR1cm4gbFEuY2FsbChnLHkpP2dbeV06dm9pZCAwfXZhciBmUT1oUSxkUT1PYmplY3QucHJvdG90eXBlLGdRPWRRLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIHBRKHkpe3ZhciBnPXRoaXMuX19kYXRhX187cmV0dXJuIHhrP2dbeV0hPT12b2lkIDA6Z1EuY2FsbChnLHkpfXZhciBiUT1wUSx2UT0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI7ZnVuY3Rpb24gd1EoeSxnKXt2YXIgeD10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKHkpPzA6MSx4W3ldPXhrJiZnPT09dm9pZCAwP3ZROmcsdGhpc312YXIgbVE9d1E7ZnVuY3Rpb24gSzUoeSl7dmFyIGc9LTEseD15PT1udWxsPzA6eS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2c8eDspe3ZhciBUPXlbZ107dGhpcy5zZXQoVFswXSxUWzFdKX19SzUucHJvdG90eXBlLmNsZWFyPWFRLEs1LnByb3RvdHlwZS5kZWxldGU9QkYsSzUucHJvdG90eXBlLmdldD1mUSxLNS5wcm90b3R5cGUuaGFzPWJRLEs1LnByb3RvdHlwZS5zZXQ9bVE7dmFyIFJGPUs1O2Z1bmN0aW9uIHlRKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH12YXIgeFE9eVE7ZnVuY3Rpb24ga1EoeSxnKXtyZXR1cm4geT09PWd8fHkhPT15JiZnIT09Z312YXIgakY9a1E7ZnVuY3Rpb24gRVEoeSxnKXtmb3IodmFyIHg9eS5sZW5ndGg7eC0tOylpZihqRih5W3hdWzBdLGcpKXJldHVybiB4O3JldHVybi0xfXZhciBWOT1FUSxUUT1BcnJheS5wcm90b3R5cGUsX1E9VFEuc3BsaWNlO2Z1bmN0aW9uIENRKHkpe3ZhciBnPXRoaXMuX19kYXRhX18seD1WOShnLHkpO2lmKHg8MClyZXR1cm4hMTt2YXIgVD1nLmxlbmd0aC0xO3JldHVybiB4PT1UP2cucG9wKCk6X1EuY2FsbChnLHgsMSksLS10aGlzLnNpemUsITB9dmFyIFNRPUNRO2Z1bmN0aW9uIEFRKHkpe3ZhciBnPXRoaXMuX19kYXRhX18seD1WOShnLHkpO3JldHVybiB4PDA/dm9pZCAwOmdbeF1bMV19dmFyIExRPUFRO2Z1bmN0aW9uIE1RKHkpe3JldHVybiBWOSh0aGlzLl9fZGF0YV9fLHkpPi0xfXZhciBEUT1NUTtmdW5jdGlvbiBJUSh5LGcpe3ZhciB4PXRoaXMuX19kYXRhX18sVD1WOSh4LHkpO3JldHVybiBUPDA/KCsrdGhpcy5zaXplLHgucHVzaChbeSxnXSkpOnhbVF1bMV09Zyx0aGlzfXZhciBPUT1JUTtmdW5jdGlvbiBZNSh5KXt2YXIgZz0tMSx4PXk9PW51bGw/MDp5Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZzx4Oyl7dmFyIFQ9eVtnXTt0aGlzLnNldChUWzBdLFRbMV0pfX1ZNS5wcm90b3R5cGUuY2xlYXI9eFEsWTUucHJvdG90eXBlLmRlbGV0ZT1TUSxZNS5wcm90b3R5cGUuZ2V0PUxRLFk1LnByb3RvdHlwZS5oYXM9RFEsWTUucHJvdG90eXBlLnNldD1PUTt2YXIgTlE9WTUsUFE9SUwoWGksIk1hcCIpLEZRPVBRO2Z1bmN0aW9uIEJRKCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgUkYsbWFwOm5ldyhGUXx8TlEpLHN0cmluZzpuZXcgUkZ9fXZhciBSUT1CUTtmdW5jdGlvbiBqUSh5KXt2YXIgZz10eXBlb2YgeTtyZXR1cm4gZz09InN0cmluZyJ8fGc9PSJudW1iZXIifHxnPT0ic3ltYm9sInx8Zz09ImJvb2xlYW4iP3khPT0iX19wcm90b19fIjp5PT09bnVsbH12YXIgJFE9alE7ZnVuY3Rpb24gelEoeSxnKXt2YXIgeD15Ll9fZGF0YV9fO3JldHVybiAkUShnKT94W3R5cGVvZiBnPT0ic3RyaW5nIj8ic3RyaW5nIjoiaGFzaCJdOngubWFwfXZhciBHOT16UTtmdW5jdGlvbiBxUSh5KXt2YXIgZz1HOSh0aGlzLHkpLmRlbGV0ZSh5KTtyZXR1cm4gdGhpcy5zaXplLT1nPzE6MCxnfXZhciBIUT1xUTtmdW5jdGlvbiBWUSh5KXtyZXR1cm4gRzkodGhpcyx5KS5nZXQoeSl9dmFyIEdRPVZRO2Z1bmN0aW9uIFVRKHkpe3JldHVybiBHOSh0aGlzLHkpLmhhcyh5KX12YXIgV1E9VVE7ZnVuY3Rpb24gS1EoeSxnKXt2YXIgeD1HOSh0aGlzLHkpLFQ9eC5zaXplO3JldHVybiB4LnNldCh5LGcpLHRoaXMuc2l6ZSs9eC5zaXplPT1UPzA6MSx0aGlzfXZhciBZUT1LUTtmdW5jdGlvbiBYNSh5KXt2YXIgZz0tMSx4PXk9PW51bGw/MDp5Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZzx4Oyl7dmFyIFQ9eVtnXTt0aGlzLnNldChUWzBdLFRbMV0pfX1YNS5wcm90b3R5cGUuY2xlYXI9UlEsWDUucHJvdG90eXBlLmRlbGV0ZT1IUSxYNS5wcm90b3R5cGUuZ2V0PUdRLFg1LnByb3RvdHlwZS5oYXM9V1EsWDUucHJvdG90eXBlLnNldD1ZUTt2YXIgJEY9WDUsWFE9IkV4cGVjdGVkIGEgZnVuY3Rpb24iO2Z1bmN0aW9uIE9MKHksZyl7aWYodHlwZW9mIHkhPSJmdW5jdGlvbiJ8fGchPW51bGwmJnR5cGVvZiBnIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoWFEpO3ZhciB4PWZ1bmN0aW9uKCl7dmFyIFQ9YXJndW1lbnRzLEw9Zz9nLmFwcGx5KHRoaXMsVCk6VFswXSxJPXguY2FjaGU7aWYoSS5oYXMoTCkpcmV0dXJuIEkuZ2V0KEwpO3ZhciBPPXkuYXBwbHkodGhpcyxUKTtyZXR1cm4geC5jYWNoZT1JLnNldChMLE8pfHxJLE99O3JldHVybiB4LmNhY2hlPW5ldyhPTC5DYWNoZXx8JEYpLHh9T0wuQ2FjaGU9JEY7dmFyIFFRPU9MLFpRPTUwMDtmdW5jdGlvbiBKUSh5KXt2YXIgZz1RUSh5LGZ1bmN0aW9uKFQpe3JldHVybiB4LnNpemU9PT1aUSYmeC5jbGVhcigpLFR9KSx4PWcuY2FjaGU7cmV0dXJuIGd9dmFyIHRaPUpRLGVaPS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCQpKS9nLG5aPS9cXChcXCk/L2csclo9dFooZnVuY3Rpb24oeSl7dmFyIGc9W107cmV0dXJuIHkuY2hhckNvZGVBdCgwKT09PTQ2JiZnLnB1c2goIiIpLHkucmVwbGFjZShlWixmdW5jdGlvbih4LFQsTCxJKXtnLnB1c2goTD9JLnJlcGxhY2UoblosIiQxIik6VHx8eCl9KSxnfSksekY9clo7ZnVuY3Rpb24gaVooeSxnKXtmb3IodmFyIHg9LTEsVD15PT1udWxsPzA6eS5sZW5ndGgsTD1BcnJheShUKTsrK3g8VDspTFt4XT1nKHlbeF0seCx5KTtyZXR1cm4gTH12YXIgcUY9aVosc1o9MS8wLEhGPU1jP01jLnByb3RvdHlwZTp2b2lkIDAsVkY9SEY/SEYudG9TdHJpbmc6dm9pZCAwO2Z1bmN0aW9uIEdGKHkpe2lmKHR5cGVvZiB5PT0ic3RyaW5nIilyZXR1cm4geTtpZihIOSh5KSlyZXR1cm4gcUYoeSxHRikrIiI7aWYoa3IoeSkpcmV0dXJuIFZGP1ZGLmNhbGwoeSk6IiI7dmFyIGc9eSsiIjtyZXR1cm4gZz09IjAiJiYxL3k9PS1zWj8iLTAiOmd9dmFyIGFaPUdGO2Z1bmN0aW9uIG9aKHkpe3JldHVybiB5PT1udWxsPyIiOmFaKHkpfXZhciBVOT1vWjtmdW5jdGlvbiBOTCh5LGcpe3JldHVybiBIOSh5KT95OkJYKHksZyk/W3ldOnpGKFU5KHkpKX12YXIgVzk9TkwsY1o9MS8wO2Z1bmN0aW9uIHVaKHkpe2lmKHR5cGVvZiB5PT0ic3RyaW5nInx8a3IoeSkpcmV0dXJuIHk7dmFyIGc9eSsiIjtyZXR1cm4gZz09IjAiJiYxL3k9PS1jWj8iLTAiOmd9dmFyIFBMPXVaO2Z1bmN0aW9uIGxaKHksZyl7Zz1XOShnLHkpO2Zvcih2YXIgeD0wLFQ9Zy5sZW5ndGg7eSE9bnVsbCYmeDxUOyl5PXlbUEwoZ1t4KytdKV07cmV0dXJuIHgmJng9PVQ/eTp2b2lkIDB9dmFyIGhaPWxaO2Z1bmN0aW9uIFVGKHksZyx4KXt2YXIgVD15PT1udWxsP3ZvaWQgMDpoWih5LGcpO3JldHVybiBUPT09dm9pZCAwP3g6VH12YXIgZlo9VUYsZFo9ZnVuY3Rpb24oKXt0cnl7dmFyIHk9SUwoT2JqZWN0LCJkZWZpbmVQcm9wZXJ0eSIpO3JldHVybiB5KHt9LCIiLHt9KSx5fWNhdGNoe319KCksZ1o9ZFo7ZnVuY3Rpb24gcFooeSxnLHgpe2c9PSJfX3Byb3RvX18iJiZnWj9nWih5LGcse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOngsd3JpdGFibGU6ITB9KTp5W2ddPXh9dmFyIGJaPXBaLHZaPU9iamVjdC5wcm90b3R5cGUsd1o9dlouaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gbVooeSxnLHgpe3ZhciBUPXlbZ107KCEod1ouY2FsbCh5LGcpJiZqRihULHgpKXx8eD09PXZvaWQgMCYmIShnIGluIHkpKSYmYlooeSxnLHgpfXZhciB5Wj1tWix4Wj05MDA3MTk5MjU0NzQwOTkxLG1nPS9eKD86MHxbMS05XVxkKikkLztmdW5jdGlvbiBrWih5LGcpe3ZhciB4PXR5cGVvZiB5O3JldHVybiBnPWc/P3haLCEhZyYmKHg9PSJudW1iZXIifHx4IT0ic3ltYm9sIiYmbWcudGVzdCh5KSkmJnk+LTEmJnklMT09MCYmeTxnfXZhciB3bT1rWjtmdW5jdGlvbiBXRih5LGcseCxUKXtpZighZG4oeSkpcmV0dXJuIHk7Zz1XOShnLHkpO2Zvcih2YXIgTD0tMSxJPWcubGVuZ3RoLE89SS0xLCQ9eTskIT1udWxsJiYrK0w8STspe3ZhciB6PVBMKGdbTF0pLFM9eDtpZih6PT09Il9fcHJvdG9fXyJ8fHo9PT0iY29uc3RydWN0b3IifHx6PT09InByb3RvdHlwZSIpcmV0dXJuIHk7aWYoTCE9Tyl7dmFyIFY9JFt6XTtTPVQ/VChWLHosJCk6dm9pZCAwLFM9PT12b2lkIDAmJihTPWRuKFYpP1Y6d20oZ1tMKzFdKT9bXTp7fSl9eVooJCx6LFMpLCQ9JFt6XX1yZXR1cm4geX12YXIgRVo9V0Y7ZnVuY3Rpb24gVFooeSxnLHgpe3JldHVybiB5PT1udWxsP3k6RVooeSxnLHgpfXZhciBfWj1UWjtmdW5jdGlvbiBDWih5LGcpe3ZhciB4PS0xLFQ9eS5sZW5ndGg7Zm9yKGd8fChnPUFycmF5KFQpKTsrK3g8VDspZ1t4XT15W3hdO3JldHVybiBnfXZhciBTWj1DWjtmdW5jdGlvbiBBWih5KXtyZXR1cm4gSDkoeSk/cUYoeSxQTCk6a3IoeSk/W3ldOlNaKHpGKFU5KHkpKSl9dmFyIExaPUFaLE1aPXtkYXRhOmZ1bmN0aW9uKGcpe3ZhciB4PXtmaWVsZDoiZGF0YSIsYmluZGluZ0V2ZW50OiJkYXRhIixhbGxvd0JpbmRpbmc6ITEsYWxsb3dTZXR0aW5nOiExLGFsbG93R2V0dGluZzohMSxzZXR0aW5nRXZlbnQ6ImRhdGEiLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiExLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLGltbXV0YWJsZUtleXM6e30sdXBkYXRlU3R5bGU6ITEsYmVmb3JlR2V0OmZ1bmN0aW9uKEwpe30sYmVmb3JlU2V0OmZ1bmN0aW9uKEwsSSl7fSxvblNldDpmdW5jdGlvbihMKXt9LGNhblNldDpmdW5jdGlvbihMKXtyZXR1cm4hMH19O3JldHVybiBnPWZuKHt9LHgsZyksZnVuY3Rpb24oTCxJKXt2YXIgTz1nLCQ9dGhpcyx6PSQubGVuZ3RoIT09dm9pZCAwLFM9ej8kOlskXSxWPXo/JFswXTokO2lmKFR0KEwpKXt2YXIgVT1MLmluZGV4T2YoIi4iKSE9PS0xLGV0PVUmJkxaKEwpO2lmKE8uYWxsb3dHZXR0aW5nJiZJPT09dm9pZCAwKXt2YXIgYXQ7cmV0dXJuIFYmJihPLmJlZm9yZUdldChWKSxldCYmVi5fcHJpdmF0ZVtPLmZpZWxkXVtMXT09PXZvaWQgMD9hdD1mWihWLl9wcml2YXRlW08uZmllbGRdLGV0KTphdD1WLl9wcml2YXRlW08uZmllbGRdW0xdKSxhdH1lbHNlIGlmKE8uYWxsb3dTZXR0aW5nJiZJIT09dm9pZCAwKXt2YXIgbHQ9IU8uaW1tdXRhYmxlS2V5c1tMXTtpZihsdCl7dmFyIGd0PWIoe30sTCxJKTtPLmJlZm9yZVNldCgkLGd0KTtmb3IodmFyIEx0PTAsRXQ9Uy5sZW5ndGg7THQ8RXQ7THQrKyl7dmFyIER0PVNbTHRdO08uY2FuU2V0KER0KSYmKGV0JiZWLl9wcml2YXRlW08uZmllbGRdW0xdPT09dm9pZCAwP19aKER0Ll9wcml2YXRlW08uZmllbGRdLGV0LEkpOkR0Ll9wcml2YXRlW08uZmllbGRdW0xdPUkpfU8udXBkYXRlU3R5bGUmJiQudXBkYXRlU3R5bGUoKSxPLm9uU2V0KCQpLE8uc2V0dGluZ1RyaWdnZXJzRXZlbnQmJiRbTy50cmlnZ2VyRm5OYW1lXShPLnNldHRpbmdFdmVudCl9fX1lbHNlIGlmKE8uYWxsb3dTZXR0aW5nJiZjdChMKSl7dmFyIEl0PUwsenQsdGUsWHQ9T2JqZWN0LmtleXMoSXQpO08uYmVmb3JlU2V0KCQsSXQpO2Zvcih2YXIgSHQ9MDtIdDxYdC5sZW5ndGg7SHQrKyl7enQ9WHRbSHRdLHRlPUl0W3p0XTt2YXIgaWU9IU8uaW1tdXRhYmxlS2V5c1t6dF07aWYoaWUpZm9yKHZhciBVdD0wO1V0PFMubGVuZ3RoO1V0Kyspe3ZhciBmZT1TW1V0XTtPLmNhblNldChmZSkmJihmZS5fcHJpdmF0ZVtPLmZpZWxkXVt6dF09dGUpfX1PLnVwZGF0ZVN0eWxlJiYkLnVwZGF0ZVN0eWxlKCksTy5vblNldCgkKSxPLnNldHRpbmdUcmlnZ2Vyc0V2ZW50JiYkW08udHJpZ2dlckZuTmFtZV0oTy5zZXR0aW5nRXZlbnQpfWVsc2UgaWYoTy5hbGxvd0JpbmRpbmcmJmt0KEwpKXt2YXIgZ2U9TDskLm9uKE8uYmluZGluZ0V2ZW50LGdlKX1lbHNlIGlmKE8uYWxsb3dHZXR0aW5nJiZMPT09dm9pZCAwKXt2YXIgc2U7cmV0dXJuIFYmJihPLmJlZm9yZUdldChWKSxzZT1WLl9wcml2YXRlW08uZmllbGRdKSxzZX1yZXR1cm4gJH19LHJlbW92ZURhdGE6ZnVuY3Rpb24oZyl7dmFyIHg9e2ZpZWxkOiJkYXRhIixldmVudDoiZGF0YSIsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsdHJpZ2dlckV2ZW50OiExLGltbXV0YWJsZUtleXM6e319O3JldHVybiBnPWZuKHt9LHgsZyksZnVuY3Rpb24oTCl7dmFyIEk9ZyxPPXRoaXMsJD1PLmxlbmd0aCE9PXZvaWQgMCx6PSQ/TzpbT107aWYoVHQoTCkpe2Zvcih2YXIgUz1MLnNwbGl0KC9ccysvKSxWPVMubGVuZ3RoLFU9MDtVPFY7VSsrKXt2YXIgZXQ9U1tVXTtpZighWChldCkpe3ZhciBhdD0hSS5pbW11dGFibGVLZXlzW2V0XTtpZihhdClmb3IodmFyIGx0PTAsZ3Q9ei5sZW5ndGg7bHQ8Z3Q7bHQrKyl6W2x0XS5fcHJpdmF0ZVtJLmZpZWxkXVtldF09dm9pZCAwfX1JLnRyaWdnZXJFdmVudCYmT1tJLnRyaWdnZXJGbk5hbWVdKEkuZXZlbnQpfWVsc2UgaWYoTD09PXZvaWQgMCl7Zm9yKHZhciBMdD0wLEV0PXoubGVuZ3RoO0x0PEV0O0x0KyspZm9yKHZhciBEdD16W0x0XS5fcHJpdmF0ZVtJLmZpZWxkXSxJdD1PYmplY3Qua2V5cyhEdCksenQ9MDt6dDxJdC5sZW5ndGg7enQrKyl7dmFyIHRlPUl0W3p0XSxYdD0hSS5pbW11dGFibGVLZXlzW3RlXTtYdCYmKER0W3RlXT12b2lkIDApfUkudHJpZ2dlckV2ZW50JiZPW0kudHJpZ2dlckZuTmFtZV0oSS5ldmVudCl9cmV0dXJuIE99fX0sRFo9e2V2ZW50QWxpYXNlc09uOmZ1bmN0aW9uKGcpe3ZhciB4PWc7eC5hZGRMaXN0ZW5lcj14Lmxpc3Rlbj14LmJpbmQ9eC5vbix4LnVubGlzdGVuPXgudW5iaW5kPXgub2ZmPXgucmVtb3ZlTGlzdGVuZXIseC50cmlnZ2VyPXguZW1pdCx4LnBvbj14LnByb21pc2VPbj1mdW5jdGlvbihULEwpe3ZhciBJPXRoaXMsTz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7cmV0dXJuIG5ldyBXNShmdW5jdGlvbigkLHope3ZhciBTPWZ1bmN0aW9uKGF0KXtJLm9mZi5hcHBseShJLFUpLCQoYXQpfSxWPU8uY29uY2F0KFtTXSksVT1WLmNvbmNhdChbXSk7SS5vbi5hcHBseShJLFYpfSl9fX0sSWM9e307W0lYLE1aLERaXS5mb3JFYWNoKGZ1bmN0aW9uKHkpe2ZuKEljLHkpfSk7dmFyIElaPXthbmltYXRlOkljLmFuaW1hdGUoKSxhbmltYXRpb246SWMuYW5pbWF0aW9uKCksYW5pbWF0ZWQ6SWMuYW5pbWF0ZWQoKSxjbGVhclF1ZXVlOkljLmNsZWFyUXVldWUoKSxkZWxheTpJYy5kZWxheSgpLGRlbGF5QW5pbWF0aW9uOkljLmRlbGF5QW5pbWF0aW9uKCksc3RvcDpJYy5zdG9wKCl9LEs5PXtjbGFzc2VzOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXM7aWYoZz09PXZvaWQgMCl7dmFyIFQ9W107cmV0dXJuIHhbMF0uX3ByaXZhdGUuY2xhc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uKGx0KXtyZXR1cm4gVC5wdXNoKGx0KX0pLFR9ZWxzZSBtdChnKXx8KGc9KGd8fCIiKS5tYXRjaCgvXFMrL2cpfHxbXSk7Zm9yKHZhciBMPVtdLEk9bmV3ICQ1KGcpLE89MDtPPHgubGVuZ3RoO08rKyl7Zm9yKHZhciAkPXhbT10sej0kLl9wcml2YXRlLFM9ei5jbGFzc2VzLFY9ITEsVT0wO1U8Zy5sZW5ndGg7VSsrKXt2YXIgZXQ9Z1tVXSxhdD1TLmhhcyhldCk7aWYoIWF0KXtWPSEwO2JyZWFrfX1WfHwoVj1TLnNpemUhPT1nLmxlbmd0aCksViYmKHouY2xhc3Nlcz1JLEwucHVzaCgkKSl9cmV0dXJuIEwubGVuZ3RoPjAmJnRoaXMuc3Bhd24oTCkudXBkYXRlU3R5bGUoKS5lbWl0KCJjbGFzcyIpLHh9LGFkZENsYXNzOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnRvZ2dsZUNsYXNzKGcsITApfSxoYXNDbGFzczpmdW5jdGlvbihnKXt2YXIgeD10aGlzWzBdO3JldHVybiB4IT1udWxsJiZ4Ll9wcml2YXRlLmNsYXNzZXMuaGFzKGcpfSx0b2dnbGVDbGFzczpmdW5jdGlvbihnLHgpe210KGcpfHwoZz1nLm1hdGNoKC9cUysvZyl8fFtdKTtmb3IodmFyIFQ9dGhpcyxMPXg9PT12b2lkIDAsST1bXSxPPTAsJD1ULmxlbmd0aDtPPCQ7TysrKWZvcih2YXIgej1UW09dLFM9ei5fcHJpdmF0ZS5jbGFzc2VzLFY9ITEsVT0wO1U8Zy5sZW5ndGg7VSsrKXt2YXIgZXQ9Z1tVXSxhdD1TLmhhcyhldCksbHQ9ITE7eHx8TCYmIWF0PyhTLmFkZChldCksbHQ9ITApOigheHx8TCYmYXQpJiYoUy5kZWxldGUoZXQpLGx0PSEwKSwhViYmbHQmJihJLnB1c2goeiksVj0hMCl9cmV0dXJuIEkubGVuZ3RoPjAmJnRoaXMuc3Bhd24oSSkudXBkYXRlU3R5bGUoKS5lbWl0KCJjbGFzcyIpLFR9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnRvZ2dsZUNsYXNzKGcsITEpfSxmbGFzaENsYXNzOmZ1bmN0aW9uKGcseCl7dmFyIFQ9dGhpcztpZih4PT1udWxsKXg9MjUwO2Vsc2UgaWYoeD09PTApcmV0dXJuIFQ7cmV0dXJuIFQuYWRkQ2xhc3MoZyksc2V0VGltZW91dChmdW5jdGlvbigpe1QucmVtb3ZlQ2xhc3MoZyl9LHgpLFR9fTtLOS5jbGFzc05hbWU9SzkuY2xhc3NOYW1lcz1LOS5jbGFzc2VzO3ZhciBvYz17bWV0YUNoYXI6IltcXCFcXFwiXFwjXFwkXFwlXFwmXFwnXFwoXFwpXFwqXFwrXFwsXFwuXFwvXFw6XFw7XFw8XFw9XFw+XFw/XFxAXFxbXFxdXFxeXFxgXFx7XFx8XFx9XFx+XSIsY29tcGFyYXRvck9wOiI9fFxcIT18Pnw+PXw8fDw9fFxcJD18XFxePXxcXCo9Iixib29sT3A6IlxcP3xcXCF8XFxeIixzdHJpbmc6YCIoPzpcXFxcInxbXiJdKSoifCcoPzpcXFxcJ3xbXiddKSonYCxudW1iZXI6QWUsbWV0YToiZGVncmVlfGluZGVncmVlfG91dGRlZ3JlZSIsc2VwYXJhdG9yOiJcXHMqLFxccyoiLGRlc2NlbmRhbnQ6IlxccysiLGNoaWxkOiJcXHMrPlxccysiLHN1YmplY3Q6IlxcJCIsZ3JvdXA6Im5vZGV8ZWRnZXxcXCoiLGRpcmVjdGVkRWRnZToiXFxzKy0+XFxzKyIsdW5kaXJlY3RlZEVkZ2U6Ilxccys8LT5cXHMrIn07b2MudmFyaWFibGU9Iig/OltcXHctLl18KD86XFxcXCIrb2MubWV0YUNoYXIrIikpKyIsb2MuY2xhc3NOYW1lPSIoPzpbXFx3LV18KD86XFxcXCIrb2MubWV0YUNoYXIrIikpKyIsb2MudmFsdWU9b2Muc3RyaW5nKyJ8IitvYy5udW1iZXIsb2MuaWQ9b2MudmFyaWFibGUsZnVuY3Rpb24oKXt2YXIgeSxnLHg7Zm9yKHk9b2MuY29tcGFyYXRvck9wLnNwbGl0KCJ8IikseD0wO3g8eS5sZW5ndGg7eCsrKWc9eVt4XSxvYy5jb21wYXJhdG9yT3ArPSJ8QCIrZztmb3IoeT1vYy5jb21wYXJhdG9yT3Auc3BsaXQoInwiKSx4PTA7eDx5Lmxlbmd0aDt4KyspZz15W3hdLCEoZy5pbmRleE9mKCIhIik+PTApJiZnIT09Ij0iJiYob2MuY29tcGFyYXRvck9wKz0ifFxcISIrZyl9KCk7dmFyIFpjPWZ1bmN0aW9uKCl7cmV0dXJue2NoZWNrczpbXX19LFFpPXtHUk9VUDowLENPTExFQ1RJT046MSxGSUxURVI6MixEQVRBX0NPTVBBUkU6MyxEQVRBX0VYSVNUOjQsREFUQV9CT09MOjUsTUVUQV9DT01QQVJFOjYsU1RBVEU6NyxJRDo4LENMQVNTOjksVU5ESVJFQ1RFRF9FREdFOjEwLERJUkVDVEVEX0VER0U6MTEsTk9ERV9TT1VSQ0U6MTIsTk9ERV9UQVJHRVQ6MTMsTk9ERV9ORUlHSEJPUjoxNCxDSElMRDoxNSxERVNDRU5EQU5UOjE2LFBBUkVOVDoxNyxBTkNFU1RPUjoxOCxDT01QT1VORF9TUExJVDoxOSxUUlVFOjIwfSxGTD1be3NlbGVjdG9yOiI6c2VsZWN0ZWQiLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuc2VsZWN0ZWQoKX19LHtzZWxlY3RvcjoiOnVuc2VsZWN0ZWQiLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIWcuc2VsZWN0ZWQoKX19LHtzZWxlY3RvcjoiOnNlbGVjdGFibGUiLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuc2VsZWN0YWJsZSgpfX0se3NlbGVjdG9yOiI6dW5zZWxlY3RhYmxlIixtYXRjaGVzOmZ1bmN0aW9uKGcpe3JldHVybiFnLnNlbGVjdGFibGUoKX19LHtzZWxlY3RvcjoiOmxvY2tlZCIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4gZy5sb2NrZWQoKX19LHtzZWxlY3RvcjoiOnVubG9ja2VkIixtYXRjaGVzOmZ1bmN0aW9uKGcpe3JldHVybiFnLmxvY2tlZCgpfX0se3NlbGVjdG9yOiI6dmlzaWJsZSIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4gZy52aXNpYmxlKCl9fSx7c2VsZWN0b3I6IjpoaWRkZW4iLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIWcudmlzaWJsZSgpfX0se3NlbGVjdG9yOiI6dHJhbnNwYXJlbnQiLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIGcudHJhbnNwYXJlbnQoKX19LHtzZWxlY3RvcjoiOmdyYWJiZWQiLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuZ3JhYmJlZCgpfX0se3NlbGVjdG9yOiI6ZnJlZSIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4hZy5ncmFiYmVkKCl9fSx7c2VsZWN0b3I6IjpyZW1vdmVkIixtYXRjaGVzOmZ1bmN0aW9uKGcpe3JldHVybiBnLnJlbW92ZWQoKX19LHtzZWxlY3RvcjoiOmluc2lkZSIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4hZy5yZW1vdmVkKCl9fSx7c2VsZWN0b3I6IjpncmFiYmFibGUiLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuZ3JhYmJhYmxlKCl9fSx7c2VsZWN0b3I6Ijp1bmdyYWJiYWJsZSIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4hZy5ncmFiYmFibGUoKX19LHtzZWxlY3RvcjoiOmFuaW1hdGVkIixtYXRjaGVzOmZ1bmN0aW9uKGcpe3JldHVybiBnLmFuaW1hdGVkKCl9fSx7c2VsZWN0b3I6Ijp1bmFuaW1hdGVkIixtYXRjaGVzOmZ1bmN0aW9uKGcpe3JldHVybiFnLmFuaW1hdGVkKCl9fSx7c2VsZWN0b3I6IjpwYXJlbnQiLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNQYXJlbnQoKX19LHtzZWxlY3RvcjoiOmNoaWxkbGVzcyIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4gZy5pc0NoaWxkbGVzcygpfX0se3NlbGVjdG9yOiI6Y2hpbGQiLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNDaGlsZCgpfX0se3NlbGVjdG9yOiI6b3JwaGFuIixtYXRjaGVzOmZ1bmN0aW9uKGcpe3JldHVybiBnLmlzT3JwaGFuKCl9fSx7c2VsZWN0b3I6Ijpub25vcnBoYW4iLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNDaGlsZCgpfX0se3NlbGVjdG9yOiI6Y29tcG91bmQiLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNOb2RlKCk/Zy5pc1BhcmVudCgpOmcuc291cmNlKCkuaXNQYXJlbnQoKXx8Zy50YXJnZXQoKS5pc1BhcmVudCgpfX0se3NlbGVjdG9yOiI6bG9vcCIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4gZy5pc0xvb3AoKX19LHtzZWxlY3RvcjoiOnNpbXBsZSIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4gZy5pc1NpbXBsZSgpfX0se3NlbGVjdG9yOiI6YWN0aXZlIixtYXRjaGVzOmZ1bmN0aW9uKGcpe3JldHVybiBnLmFjdGl2ZSgpfX0se3NlbGVjdG9yOiI6aW5hY3RpdmUiLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIWcuYWN0aXZlKCl9fSx7c2VsZWN0b3I6IjpiYWNrZ3JvdW5kaW5nIixtYXRjaGVzOmZ1bmN0aW9uKGcpe3JldHVybiBnLmJhY2tncm91bmRpbmcoKX19LHtzZWxlY3RvcjoiOm5vbmJhY2tncm91bmRpbmciLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIWcuYmFja2dyb3VuZGluZygpfX1dLnNvcnQoZnVuY3Rpb24oeSxnKXtyZXR1cm4geWUoeS5zZWxlY3RvcixnLnNlbGVjdG9yKX0pLE9aPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PXt9LGcseD0wO3g8RkwubGVuZ3RoO3grKylnPUZMW3hdLHlbZy5zZWxlY3Rvcl09Zy5tYXRjaGVzO3JldHVybiB5fSgpLE5aPWZ1bmN0aW9uKGcseCl7cmV0dXJuIE9aW2ddKHgpfSxQWj0iKCIrRkwubWFwKGZ1bmN0aW9uKHkpe3JldHVybiB5LnNlbGVjdG9yfSkuam9pbigifCIpKyIpIixRNT1mdW5jdGlvbihnKXtyZXR1cm4gZy5yZXBsYWNlKG5ldyBSZWdFeHAoIlxcXFwoIitvYy5tZXRhQ2hhcisiKSIsImciKSxmdW5jdGlvbih4LFQpe3JldHVybiBUfSl9LG1tPWZ1bmN0aW9uKGcseCxUKXtnW2cubGVuZ3RoLTFdPVR9LFVlPVt7bmFtZToiZ3JvdXAiLHF1ZXJ5OiEwLHJlZ2V4OiIoIitvYy5ncm91cCsiKSIscG9wdWxhdGU6ZnVuY3Rpb24oZyx4LFQpe3ZhciBMPUUoVCwxKSxJPUxbMF07eC5jaGVja3MucHVzaCh7dHlwZTpRaS5HUk9VUCx2YWx1ZTpJPT09IioiP0k6SSsicyJ9KX19LHtuYW1lOiJzdGF0ZSIscXVlcnk6ITAscmVnZXg6UFoscG9wdWxhdGU6ZnVuY3Rpb24oZyx4LFQpe3ZhciBMPUUoVCwxKSxJPUxbMF07eC5jaGVja3MucHVzaCh7dHlwZTpRaS5TVEFURSx2YWx1ZTpJfSl9fSx7bmFtZToiaWQiLHF1ZXJ5OiEwLHJlZ2V4OiJcXCMoIitvYy5pZCsiKSIscG9wdWxhdGU6ZnVuY3Rpb24oZyx4LFQpe3ZhciBMPUUoVCwxKSxJPUxbMF07eC5jaGVja3MucHVzaCh7dHlwZTpRaS5JRCx2YWx1ZTpRNShJKX0pfX0se25hbWU6ImNsYXNzTmFtZSIscXVlcnk6ITAscmVnZXg6IlxcLigiK29jLmNsYXNzTmFtZSsiKSIscG9wdWxhdGU6ZnVuY3Rpb24oZyx4LFQpe3ZhciBMPUUoVCwxKSxJPUxbMF07eC5jaGVja3MucHVzaCh7dHlwZTpRaS5DTEFTUyx2YWx1ZTpRNShJKX0pfX0se25hbWU6ImRhdGFFeGlzdHMiLHF1ZXJ5OiEwLHJlZ2V4OiJcXFtcXHMqKCIrb2MudmFyaWFibGUrIilcXHMqXFxdIixwb3B1bGF0ZTpmdW5jdGlvbihnLHgsVCl7dmFyIEw9RShULDEpLEk9TFswXTt4LmNoZWNrcy5wdXNoKHt0eXBlOlFpLkRBVEFfRVhJU1QsZmllbGQ6UTUoSSl9KX19LHtuYW1lOiJkYXRhQ29tcGFyZSIscXVlcnk6ITAscmVnZXg6IlxcW1xccyooIitvYy52YXJpYWJsZSsiKVxccyooIitvYy5jb21wYXJhdG9yT3ArIilcXHMqKCIrb2MudmFsdWUrIilcXHMqXFxdIixwb3B1bGF0ZTpmdW5jdGlvbihnLHgsVCl7dmFyIEw9RShULDMpLEk9TFswXSxPPUxbMV0sJD1MWzJdLHo9bmV3IFJlZ0V4cCgiXiIrb2Muc3RyaW5nKyIkIikuZXhlYygkKSE9bnVsbDt6PyQ9JC5zdWJzdHJpbmcoMSwkLmxlbmd0aC0xKTokPXBhcnNlRmxvYXQoJCkseC5jaGVja3MucHVzaCh7dHlwZTpRaS5EQVRBX0NPTVBBUkUsZmllbGQ6UTUoSSksb3BlcmF0b3I6Tyx2YWx1ZTokfSl9fSx7bmFtZToiZGF0YUJvb2wiLHF1ZXJ5OiEwLHJlZ2V4OiJcXFtcXHMqKCIrb2MuYm9vbE9wKyIpXFxzKigiK29jLnZhcmlhYmxlKyIpXFxzKlxcXSIscG9wdWxhdGU6ZnVuY3Rpb24oZyx4LFQpe3ZhciBMPUUoVCwyKSxJPUxbMF0sTz1MWzFdO3guY2hlY2tzLnB1c2goe3R5cGU6UWkuREFUQV9CT09MLGZpZWxkOlE1KE8pLG9wZXJhdG9yOkl9KX19LHtuYW1lOiJtZXRhQ29tcGFyZSIscXVlcnk6ITAscmVnZXg6IlxcW1xcW1xccyooIitvYy5tZXRhKyIpXFxzKigiK29jLmNvbXBhcmF0b3JPcCsiKVxccyooIitvYy5udW1iZXIrIilcXHMqXFxdXFxdIixwb3B1bGF0ZTpmdW5jdGlvbihnLHgsVCl7dmFyIEw9RShULDMpLEk9TFswXSxPPUxbMV0sJD1MWzJdO3guY2hlY2tzLnB1c2goe3R5cGU6UWkuTUVUQV9DT01QQVJFLGZpZWxkOlE1KEkpLG9wZXJhdG9yOk8sdmFsdWU6cGFyc2VGbG9hdCgkKX0pfX0se25hbWU6Im5leHRRdWVyeSIsc2VwYXJhdG9yOiEwLHJlZ2V4Om9jLnNlcGFyYXRvcixwb3B1bGF0ZTpmdW5jdGlvbihnLHgpe3ZhciBUPWcuY3VycmVudFN1YmplY3QsTD1nLmVkZ2VDb3VudCxJPWcuY29tcG91bmRDb3VudCxPPWdbZy5sZW5ndGgtMV07VCE9bnVsbCYmKE8uc3ViamVjdD1ULGcuY3VycmVudFN1YmplY3Q9bnVsbCksTy5lZGdlQ291bnQ9TCxPLmNvbXBvdW5kQ291bnQ9SSxnLmVkZ2VDb3VudD0wLGcuY29tcG91bmRDb3VudD0wO3ZhciAkPWdbZy5sZW5ndGgrK109WmMoKTtyZXR1cm4gJH19LHtuYW1lOiJkaXJlY3RlZEVkZ2UiLHNlcGFyYXRvcjohMCxyZWdleDpvYy5kaXJlY3RlZEVkZ2UscG9wdWxhdGU6ZnVuY3Rpb24oZyx4KXtpZihnLmN1cnJlbnRTdWJqZWN0PT1udWxsKXt2YXIgVD1aYygpLEw9eCxJPVpjKCk7cmV0dXJuIFQuY2hlY2tzLnB1c2goe3R5cGU6UWkuRElSRUNURURfRURHRSxzb3VyY2U6TCx0YXJnZXQ6SX0pLG1tKGcseCxUKSxnLmVkZ2VDb3VudCsrLEl9ZWxzZXt2YXIgTz1aYygpLCQ9eCx6PVpjKCk7cmV0dXJuIE8uY2hlY2tzLnB1c2goe3R5cGU6UWkuTk9ERV9TT1VSQ0Usc291cmNlOiQsdGFyZ2V0Onp9KSxtbShnLHgsTyksZy5lZGdlQ291bnQrKyx6fX19LHtuYW1lOiJ1bmRpcmVjdGVkRWRnZSIsc2VwYXJhdG9yOiEwLHJlZ2V4Om9jLnVuZGlyZWN0ZWRFZGdlLHBvcHVsYXRlOmZ1bmN0aW9uKGcseCl7aWYoZy5jdXJyZW50U3ViamVjdD09bnVsbCl7dmFyIFQ9WmMoKSxMPXgsST1aYygpO3JldHVybiBULmNoZWNrcy5wdXNoKHt0eXBlOlFpLlVORElSRUNURURfRURHRSxub2RlczpbTCxJXX0pLG1tKGcseCxUKSxnLmVkZ2VDb3VudCsrLEl9ZWxzZXt2YXIgTz1aYygpLCQ9eCx6PVpjKCk7cmV0dXJuIE8uY2hlY2tzLnB1c2goe3R5cGU6UWkuTk9ERV9ORUlHSEJPUixub2RlOiQsbmVpZ2hib3I6en0pLG1tKGcseCxPKSx6fX19LHtuYW1lOiJjaGlsZCIsc2VwYXJhdG9yOiEwLHJlZ2V4Om9jLmNoaWxkLHBvcHVsYXRlOmZ1bmN0aW9uKGcseCl7aWYoZy5jdXJyZW50U3ViamVjdD09bnVsbCl7dmFyIFQ9WmMoKSxMPVpjKCksST1nW2cubGVuZ3RoLTFdO3JldHVybiBULmNoZWNrcy5wdXNoKHt0eXBlOlFpLkNISUxELHBhcmVudDpJLGNoaWxkOkx9KSxtbShnLHgsVCksZy5jb21wb3VuZENvdW50KyssTH1lbHNlIGlmKGcuY3VycmVudFN1YmplY3Q9PT14KXt2YXIgTz1aYygpLCQ9Z1tnLmxlbmd0aC0xXSx6PVpjKCksUz1aYygpLFY9WmMoKSxVPVpjKCk7cmV0dXJuIE8uY2hlY2tzLnB1c2goe3R5cGU6UWkuQ09NUE9VTkRfU1BMSVQsbGVmdDokLHJpZ2h0Onosc3ViamVjdDpTfSksUy5jaGVja3M9eC5jaGVja3MseC5jaGVja3M9W3t0eXBlOlFpLlRSVUV9XSxVLmNoZWNrcy5wdXNoKHt0eXBlOlFpLlRSVUV9KSx6LmNoZWNrcy5wdXNoKHt0eXBlOlFpLlBBUkVOVCxwYXJlbnQ6VSxjaGlsZDpWfSksbW0oZywkLE8pLGcuY3VycmVudFN1YmplY3Q9UyxnLmNvbXBvdW5kQ291bnQrKyxWfWVsc2V7dmFyIGV0PVpjKCksYXQ9WmMoKSxsdD1be3R5cGU6UWkuUEFSRU5ULHBhcmVudDpldCxjaGlsZDphdH1dO3JldHVybiBldC5jaGVja3M9eC5jaGVja3MseC5jaGVja3M9bHQsZy5jb21wb3VuZENvdW50KyssYXR9fX0se25hbWU6ImRlc2NlbmRhbnQiLHNlcGFyYXRvcjohMCxyZWdleDpvYy5kZXNjZW5kYW50LHBvcHVsYXRlOmZ1bmN0aW9uKGcseCl7aWYoZy5jdXJyZW50U3ViamVjdD09bnVsbCl7dmFyIFQ9WmMoKSxMPVpjKCksST1nW2cubGVuZ3RoLTFdO3JldHVybiBULmNoZWNrcy5wdXNoKHt0eXBlOlFpLkRFU0NFTkRBTlQsYW5jZXN0b3I6SSxkZXNjZW5kYW50Okx9KSxtbShnLHgsVCksZy5jb21wb3VuZENvdW50KyssTH1lbHNlIGlmKGcuY3VycmVudFN1YmplY3Q9PT14KXt2YXIgTz1aYygpLCQ9Z1tnLmxlbmd0aC0xXSx6PVpjKCksUz1aYygpLFY9WmMoKSxVPVpjKCk7cmV0dXJuIE8uY2hlY2tzLnB1c2goe3R5cGU6UWkuQ09NUE9VTkRfU1BMSVQsbGVmdDokLHJpZ2h0Onosc3ViamVjdDpTfSksUy5jaGVja3M9eC5jaGVja3MseC5jaGVja3M9W3t0eXBlOlFpLlRSVUV9XSxVLmNoZWNrcy5wdXNoKHt0eXBlOlFpLlRSVUV9KSx6LmNoZWNrcy5wdXNoKHt0eXBlOlFpLkFOQ0VTVE9SLGFuY2VzdG9yOlUsZGVzY2VuZGFudDpWfSksbW0oZywkLE8pLGcuY3VycmVudFN1YmplY3Q9UyxnLmNvbXBvdW5kQ291bnQrKyxWfWVsc2V7dmFyIGV0PVpjKCksYXQ9WmMoKSxsdD1be3R5cGU6UWkuQU5DRVNUT1IsYW5jZXN0b3I6ZXQsZGVzY2VuZGFudDphdH1dO3JldHVybiBldC5jaGVja3M9eC5jaGVja3MseC5jaGVja3M9bHQsZy5jb21wb3VuZENvdW50KyssYXR9fX0se25hbWU6InN1YmplY3QiLG1vZGlmaWVyOiEwLHJlZ2V4Om9jLnN1YmplY3QscG9wdWxhdGU6ZnVuY3Rpb24oZyx4KXtpZihnLmN1cnJlbnRTdWJqZWN0IT1udWxsJiZnLmN1cnJlbnRTdWJqZWN0IT09eClyZXR1cm4gbm8oIlJlZGVmaW5pdGlvbiBvZiBzdWJqZWN0IGluIHNlbGVjdG9yIGAiK2cudG9TdHJpbmcoKSsiYCIpLCExO2cuY3VycmVudFN1YmplY3Q9eDt2YXIgVD1nW2cubGVuZ3RoLTFdLEw9VC5jaGVja3NbMF0sST1MPT1udWxsP251bGw6TC50eXBlO0k9PT1RaS5ESVJFQ1RFRF9FREdFP0wudHlwZT1RaS5OT0RFX1RBUkdFVDpJPT09UWkuVU5ESVJFQ1RFRF9FREdFJiYoTC50eXBlPVFpLk5PREVfTkVJR0hCT1IsTC5ub2RlPUwubm9kZXNbMV0sTC5uZWlnaGJvcj1MLm5vZGVzWzBdLEwubm9kZXM9bnVsbCl9fV07VWUuZm9yRWFjaChmdW5jdGlvbih5KXtyZXR1cm4geS5yZWdleE9iaj1uZXcgUmVnRXhwKCJeIit5LnJlZ2V4KX0pO3ZhciBGWj1mdW5jdGlvbihnKXtmb3IodmFyIHgsVCxMLEk9MDtJPFVlLmxlbmd0aDtJKyspe3ZhciBPPVVlW0ldLCQ9Ty5uYW1lLHo9Zy5tYXRjaChPLnJlZ2V4T2JqKTtpZih6IT1udWxsKXtUPXoseD1PLEw9JDt2YXIgUz16WzBdO2c9Zy5zdWJzdHJpbmcoUy5sZW5ndGgpO2JyZWFrfX1yZXR1cm57ZXhwcjp4LG1hdGNoOlQsbmFtZTpMLHJlbWFpbmluZzpnfX0sQlo9ZnVuY3Rpb24oZyl7dmFyIHg9Zy5tYXRjaCgvXlxzKy8pO2lmKHgpe3ZhciBUPXhbMF07Zz1nLnN1YnN0cmluZyhULmxlbmd0aCl9cmV0dXJuIGd9LFJaPWZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMsVD14LmlucHV0VGV4dD1nLEw9eFswXT1aYygpO2Zvcih4Lmxlbmd0aD0xLFQ9QlooVCk7Oyl7dmFyIEk9RlooVCk7aWYoSS5leHByPT1udWxsKXJldHVybiBubygiVGhlIHNlbGVjdG9yIGAiK2crImBpcyBpbnZhbGlkIiksITE7dmFyIE89SS5tYXRjaC5zbGljZSgxKSwkPUkuZXhwci5wb3B1bGF0ZSh4LEwsTyk7aWYoJD09PSExKXJldHVybiExO2lmKCQhPW51bGwmJihMPSQpLFQ9SS5yZW1haW5pbmcsVC5tYXRjaCgvXlxzKiQvKSlicmVha312YXIgej14W3gubGVuZ3RoLTFdO3guY3VycmVudFN1YmplY3QhPW51bGwmJih6LnN1YmplY3Q9eC5jdXJyZW50U3ViamVjdCksei5lZGdlQ291bnQ9eC5lZGdlQ291bnQsei5jb21wb3VuZENvdW50PXguY29tcG91bmRDb3VudDtmb3IodmFyIFM9MDtTPHgubGVuZ3RoO1MrKyl7dmFyIFY9eFtTXTtpZihWLmNvbXBvdW5kQ291bnQ+MCYmVi5lZGdlQ291bnQ+MClyZXR1cm4gbm8oIlRoZSBzZWxlY3RvciBgIitnKyJgIGlzIGludmFsaWQgYmVjYXVzZSBpdCB1c2VzIGJvdGggYSBjb21wb3VuZCBzZWxlY3RvciBhbmQgYW4gZWRnZSBzZWxlY3RvciIpLCExO2lmKFYuZWRnZUNvdW50PjEpcmV0dXJuIG5vKCJUaGUgc2VsZWN0b3IgYCIrZysiYCBpcyBpbnZhbGlkIGJlY2F1c2UgaXQgdXNlcyBtdWx0aXBsZSBlZGdlIHNlbGVjdG9ycyIpLCExO1YuZWRnZUNvdW50PT09MSYmbm8oIlRoZSBzZWxlY3RvciBgIitnKyJgIGlzIGRlcHJlY2F0ZWQuICBFZGdlIHNlbGVjdG9ycyBkbyBub3QgdGFrZSBlZmZlY3Qgb24gY2hhbmdlcyB0byBzb3VyY2UgYW5kIHRhcmdldCBub2RlcyBhZnRlciBhbiBlZGdlIGlzIGFkZGVkLCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4gIFVzZSBhIGNsYXNzIG9yIGRhdGEgc2VsZWN0b3Igb24gZWRnZXMgaW5zdGVhZCwgdXBkYXRpbmcgdGhlIGNsYXNzIG9yIGRhdGEgb2YgYW4gZWRnZSB3aGVuIHlvdXIgYXBwIGRldGVjdHMgYSBjaGFuZ2UgaW4gc291cmNlIG9yIHRhcmdldCBub2Rlcy4iKX1yZXR1cm4hMH0salo9ZnVuY3Rpb24oKXtpZih0aGlzLnRvU3RyaW5nQ2FjaGUhPW51bGwpcmV0dXJuIHRoaXMudG9TdHJpbmdDYWNoZTtmb3IodmFyIGc9ZnVuY3Rpb24oVil7cmV0dXJuIFY/PyIifSx4PWZ1bmN0aW9uKFYpe3JldHVybiBUdChWKT8nIicrVisnIic6ZyhWKX0sVD1mdW5jdGlvbihWKXtyZXR1cm4iICIrVisiICJ9LEw9ZnVuY3Rpb24oVixVKXt2YXIgZXQ9Vi50eXBlLGF0PVYudmFsdWU7c3dpdGNoKGV0KXtjYXNlIFFpLkdST1VQOnt2YXIgbHQ9ZyhhdCk7cmV0dXJuIGx0LnN1YnN0cmluZygwLGx0Lmxlbmd0aC0xKX1jYXNlIFFpLkRBVEFfQ09NUEFSRTp7dmFyIGd0PVYuZmllbGQsTHQ9Vi5vcGVyYXRvcjtyZXR1cm4iWyIrZ3QrVChnKEx0KSkreChhdCkrIl0ifWNhc2UgUWkuREFUQV9CT09MOnt2YXIgRXQ9Vi5vcGVyYXRvcixEdD1WLmZpZWxkO3JldHVybiJbIitnKEV0KStEdCsiXSJ9Y2FzZSBRaS5EQVRBX0VYSVNUOnt2YXIgSXQ9Vi5maWVsZDtyZXR1cm4iWyIrSXQrIl0ifWNhc2UgUWkuTUVUQV9DT01QQVJFOnt2YXIgenQ9Vi5vcGVyYXRvcix0ZT1WLmZpZWxkO3JldHVybiJbWyIrdGUrVChnKHp0KSkreChhdCkrIl1dIn1jYXNlIFFpLlNUQVRFOnJldHVybiBhdDtjYXNlIFFpLklEOnJldHVybiIjIithdDtjYXNlIFFpLkNMQVNTOnJldHVybiIuIithdDtjYXNlIFFpLlBBUkVOVDpjYXNlIFFpLkNISUxEOnJldHVybiBJKFYucGFyZW50LFUpK1QoIj4iKStJKFYuY2hpbGQsVSk7Y2FzZSBRaS5BTkNFU1RPUjpjYXNlIFFpLkRFU0NFTkRBTlQ6cmV0dXJuIEkoVi5hbmNlc3RvcixVKSsiICIrSShWLmRlc2NlbmRhbnQsVSk7Y2FzZSBRaS5DT01QT1VORF9TUExJVDp7dmFyIFh0PUkoVi5sZWZ0LFUpLEh0PUkoVi5zdWJqZWN0LFUpLGllPUkoVi5yaWdodCxVKTtyZXR1cm4gWHQrKFh0Lmxlbmd0aD4wPyIgIjoiIikrSHQraWV9Y2FzZSBRaS5UUlVFOnJldHVybiIifX0sST1mdW5jdGlvbihWLFUpe3JldHVybiBWLmNoZWNrcy5yZWR1Y2UoZnVuY3Rpb24oZXQsYXQsbHQpe3JldHVybiBldCsoVT09PVYmJmx0PT09MD8iJCI6IiIpK0woYXQsVSl9LCIiKX0sTz0iIiwkPTA7JDx0aGlzLmxlbmd0aDskKyspe3ZhciB6PXRoaXNbJF07Tys9SSh6LHouc3ViamVjdCksdGhpcy5sZW5ndGg+MSYmJDx0aGlzLmxlbmd0aC0xJiYoTys9IiwgIil9cmV0dXJuIHRoaXMudG9TdHJpbmdDYWNoZT1PLE99LCRaPXtwYXJzZTpSWix0b1N0cmluZzpqWn0sS0Y9ZnVuY3Rpb24oZyx4LFQpe3ZhciBMLEk9VHQoZyksTz1zdChnKSwkPVR0KFQpLHosUyxWPSExLFU9ITEsZXQ9ITE7c3dpdGNoKHguaW5kZXhPZigiISIpPj0wJiYoeD14LnJlcGxhY2UoIiEiLCIiKSxVPSEwKSx4LmluZGV4T2YoIkAiKT49MCYmKHg9eC5yZXBsYWNlKCJAIiwiIiksVj0hMCksKEl8fCR8fFYpJiYoej0hSSYmIU8/IiI6IiIrZyxTPSIiK1QpLFYmJihnPXo9ei50b0xvd2VyQ2FzZSgpLFQ9Uz1TLnRvTG93ZXJDYXNlKCkpLHgpe2Nhc2UiKj0iOkw9ei5pbmRleE9mKFMpPj0wO2JyZWFrO2Nhc2UiJD0iOkw9ei5pbmRleE9mKFMsei5sZW5ndGgtUy5sZW5ndGgpPj0wO2JyZWFrO2Nhc2UiXj0iOkw9ei5pbmRleE9mKFMpPT09MDticmVhaztjYXNlIj0iOkw9Zz09PVQ7YnJlYWs7Y2FzZSI+IjpldD0hMCxMPWc+VDticmVhaztjYXNlIj49IjpldD0hMCxMPWc+PVQ7YnJlYWs7Y2FzZSI8IjpldD0hMCxMPWc8VDticmVhaztjYXNlIjw9IjpldD0hMCxMPWc8PVQ7YnJlYWs7ZGVmYXVsdDpMPSExO2JyZWFrfXJldHVybiBVJiYoZyE9bnVsbHx8IWV0KSYmKEw9IUwpLEx9LHpaPWZ1bmN0aW9uKGcseCl7c3dpdGNoKHgpe2Nhc2UiPyI6cmV0dXJuISFnO2Nhc2UiISI6cmV0dXJuIWc7Y2FzZSJeIjpyZXR1cm4gZz09PXZvaWQgMH19LHFaPWZ1bmN0aW9uKGcpe3JldHVybiBnIT09dm9pZCAwfSxCTD1mdW5jdGlvbihnLHgpe3JldHVybiBnLmRhdGEoeCl9LEhaPWZ1bmN0aW9uKGcseCl7cmV0dXJuIGdbeF0oKX0sdGw9W10sQnU9ZnVuY3Rpb24oZyx4KXtyZXR1cm4gZy5jaGVja3MuZXZlcnkoZnVuY3Rpb24oVCl7cmV0dXJuIHRsW1QudHlwZV0oVCx4KX0pfTt0bFtRaS5HUk9VUF09ZnVuY3Rpb24oeSxnKXt2YXIgeD15LnZhbHVlO3JldHVybiB4PT09IioifHx4PT09Zy5ncm91cCgpfSx0bFtRaS5TVEFURV09ZnVuY3Rpb24oeSxnKXt2YXIgeD15LnZhbHVlO3JldHVybiBOWih4LGcpfSx0bFtRaS5JRF09ZnVuY3Rpb24oeSxnKXt2YXIgeD15LnZhbHVlO3JldHVybiBnLmlkKCk9PT14fSx0bFtRaS5DTEFTU109ZnVuY3Rpb24oeSxnKXt2YXIgeD15LnZhbHVlO3JldHVybiBnLmhhc0NsYXNzKHgpfSx0bFtRaS5NRVRBX0NPTVBBUkVdPWZ1bmN0aW9uKHksZyl7dmFyIHg9eS5maWVsZCxUPXkub3BlcmF0b3IsTD15LnZhbHVlO3JldHVybiBLRihIWihnLHgpLFQsTCl9LHRsW1FpLkRBVEFfQ09NUEFSRV09ZnVuY3Rpb24oeSxnKXt2YXIgeD15LmZpZWxkLFQ9eS5vcGVyYXRvcixMPXkudmFsdWU7cmV0dXJuIEtGKEJMKGcseCksVCxMKX0sdGxbUWkuREFUQV9CT09MXT1mdW5jdGlvbih5LGcpe3ZhciB4PXkuZmllbGQsVD15Lm9wZXJhdG9yO3JldHVybiB6WihCTChnLHgpLFQpfSx0bFtRaS5EQVRBX0VYSVNUXT1mdW5jdGlvbih5LGcpe3ZhciB4PXkuZmllbGQ7cmV0dXJuIHkub3BlcmF0b3IscVooQkwoZyx4KSl9LHRsW1FpLlVORElSRUNURURfRURHRV09ZnVuY3Rpb24oeSxnKXt2YXIgeD15Lm5vZGVzWzBdLFQ9eS5ub2Rlc1sxXSxMPWcuc291cmNlKCksST1nLnRhcmdldCgpO3JldHVybiBCdSh4LEwpJiZCdShULEkpfHxCdShULEwpJiZCdSh4LEkpfSx0bFtRaS5OT0RFX05FSUdIQk9SXT1mdW5jdGlvbih5LGcpe3JldHVybiBCdSh5Lm5vZGUsZykmJmcubmVpZ2hib3Job29kKCkuc29tZShmdW5jdGlvbih4KXtyZXR1cm4geC5pc05vZGUoKSYmQnUoeS5uZWlnaGJvcix4KX0pfSx0bFtRaS5ESVJFQ1RFRF9FREdFXT1mdW5jdGlvbih5LGcpe3JldHVybiBCdSh5LnNvdXJjZSxnLnNvdXJjZSgpKSYmQnUoeS50YXJnZXQsZy50YXJnZXQoKSl9LHRsW1FpLk5PREVfU09VUkNFXT1mdW5jdGlvbih5LGcpe3JldHVybiBCdSh5LnNvdXJjZSxnKSYmZy5vdXRnb2VycygpLnNvbWUoZnVuY3Rpb24oeCl7cmV0dXJuIHguaXNOb2RlKCkmJkJ1KHkudGFyZ2V0LHgpfSl9LHRsW1FpLk5PREVfVEFSR0VUXT1mdW5jdGlvbih5LGcpe3JldHVybiBCdSh5LnRhcmdldCxnKSYmZy5pbmNvbWVycygpLnNvbWUoZnVuY3Rpb24oeCl7cmV0dXJuIHguaXNOb2RlKCkmJkJ1KHkuc291cmNlLHgpfSl9LHRsW1FpLkNISUxEXT1mdW5jdGlvbih5LGcpe3JldHVybiBCdSh5LmNoaWxkLGcpJiZCdSh5LnBhcmVudCxnLnBhcmVudCgpKX0sdGxbUWkuUEFSRU5UXT1mdW5jdGlvbih5LGcpe3JldHVybiBCdSh5LnBhcmVudCxnKSYmZy5jaGlsZHJlbigpLnNvbWUoZnVuY3Rpb24oeCl7cmV0dXJuIEJ1KHkuY2hpbGQseCl9KX0sdGxbUWkuREVTQ0VOREFOVF09ZnVuY3Rpb24oeSxnKXtyZXR1cm4gQnUoeS5kZXNjZW5kYW50LGcpJiZnLmFuY2VzdG9ycygpLnNvbWUoZnVuY3Rpb24oeCl7cmV0dXJuIEJ1KHkuYW5jZXN0b3IseCl9KX0sdGxbUWkuQU5DRVNUT1JdPWZ1bmN0aW9uKHksZyl7cmV0dXJuIEJ1KHkuYW5jZXN0b3IsZykmJmcuZGVzY2VuZGFudHMoKS5zb21lKGZ1bmN0aW9uKHgpe3JldHVybiBCdSh5LmRlc2NlbmRhbnQseCl9KX0sdGxbUWkuQ09NUE9VTkRfU1BMSVRdPWZ1bmN0aW9uKHksZyl7cmV0dXJuIEJ1KHkuc3ViamVjdCxnKSYmQnUoeS5sZWZ0LGcpJiZCdSh5LnJpZ2h0LGcpfSx0bFtRaS5UUlVFXT1mdW5jdGlvbigpe3JldHVybiEwfSx0bFtRaS5DT0xMRUNUSU9OXT1mdW5jdGlvbih5LGcpe3ZhciB4PXkudmFsdWU7cmV0dXJuIHguaGFzKGcpfSx0bFtRaS5GSUxURVJdPWZ1bmN0aW9uKHksZyl7dmFyIHg9eS52YWx1ZTtyZXR1cm4geChnKX07dmFyIFZaPWZ1bmN0aW9uKGcpe3ZhciB4PXRoaXM7aWYoeC5sZW5ndGg9PT0xJiZ4WzBdLmNoZWNrcy5sZW5ndGg9PT0xJiZ4WzBdLmNoZWNrc1swXS50eXBlPT09UWkuSUQpcmV0dXJuIGcuZ2V0RWxlbWVudEJ5SWQoeFswXS5jaGVja3NbMF0udmFsdWUpLmNvbGxlY3Rpb24oKTt2YXIgVD1mdW5jdGlvbihJKXtmb3IodmFyIE89MDtPPHgubGVuZ3RoO08rKyl7dmFyICQ9eFtPXTtpZihCdSgkLEkpKXJldHVybiEwfXJldHVybiExfTtyZXR1cm4geC50ZXh0KCk9PW51bGwmJihUPWZ1bmN0aW9uKCl7cmV0dXJuITB9KSxnLmZpbHRlcihUKX0sR1o9ZnVuY3Rpb24oZyl7Zm9yKHZhciB4PXRoaXMsVD0wO1Q8eC5sZW5ndGg7VCsrKXt2YXIgTD14W1RdO2lmKEJ1KEwsZykpcmV0dXJuITB9cmV0dXJuITF9LFVaPXttYXRjaGVzOkdaLGZpbHRlcjpWWn0seW09ZnVuY3Rpb24oZyl7dGhpcy5pbnB1dFRleHQ9Zyx0aGlzLmN1cnJlbnRTdWJqZWN0PW51bGwsdGhpcy5jb21wb3VuZENvdW50PTAsdGhpcy5lZGdlQ291bnQ9MCx0aGlzLmxlbmd0aD0wLGc9PW51bGx8fFR0KGcpJiZnLm1hdGNoKC9eXHMqJC8pfHwoZHQoZyk/dGhpcy5hZGRRdWVyeSh7Y2hlY2tzOlt7dHlwZTpRaS5DT0xMRUNUSU9OLHZhbHVlOmcuY29sbGVjdGlvbigpfV19KTprdChnKT90aGlzLmFkZFF1ZXJ5KHtjaGVja3M6W3t0eXBlOlFpLkZJTFRFUix2YWx1ZTpnfV19KTpUdChnKT90aGlzLnBhcnNlKGcpfHwodGhpcy5pbnZhbGlkPSEwKTpvdSgiQSBzZWxlY3RvciBtdXN0IGJlIGNyZWF0ZWQgZnJvbSBhIHN0cmluZzsgZm91bmQgIikpfSxmdj15bS5wcm90b3R5cGU7WyRaLFVaXS5mb3JFYWNoKGZ1bmN0aW9uKHkpe3JldHVybiBmbihmdix5KX0pLGZ2LnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnB1dFRleHR9LGZ2LnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LGZ2LmVxPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzW3ldfSxmdi5zYW1lVGV4dD1mdW5jdGlvbih5KXtyZXR1cm4hdGhpcy5pbnZhbGlkJiYheS5pbnZhbGlkJiZ0aGlzLnRleHQoKT09PXkudGV4dCgpfSxmdi5hZGRRdWVyeT1mdW5jdGlvbih5KXt0aGlzW3RoaXMubGVuZ3RoKytdPXl9LGZ2LnNlbGVjdG9yPWZ2LnRvU3RyaW5nO3ZhciBtcD17YWxsQXJlOmZ1bmN0aW9uKGcpe3ZhciB4PW5ldyB5bShnKTtyZXR1cm4gdGhpcy5ldmVyeShmdW5jdGlvbihUKXtyZXR1cm4geC5tYXRjaGVzKFQpfSl9LGlzOmZ1bmN0aW9uKGcpe3ZhciB4PW5ldyB5bShnKTtyZXR1cm4gdGhpcy5zb21lKGZ1bmN0aW9uKFQpe3JldHVybiB4Lm1hdGNoZXMoVCl9KX0sc29tZTpmdW5jdGlvbihnLHgpe2Zvcih2YXIgVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgTD14P2cuYXBwbHkoeCxbdGhpc1tUXSxULHRoaXNdKTpnKHRoaXNbVF0sVCx0aGlzKTtpZihMKXJldHVybiEwfXJldHVybiExfSxldmVyeTpmdW5jdGlvbihnLHgpe2Zvcih2YXIgVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgTD14P2cuYXBwbHkoeCxbdGhpc1tUXSxULHRoaXNdKTpnKHRoaXNbVF0sVCx0aGlzKTtpZighTClyZXR1cm4hMX1yZXR1cm4hMH0sc2FtZTpmdW5jdGlvbihnKXtpZih0aGlzPT09ZylyZXR1cm4hMDtnPXRoaXMuY3koKS5jb2xsZWN0aW9uKGcpO3ZhciB4PXRoaXMubGVuZ3RoLFQ9Zy5sZW5ndGg7cmV0dXJuIHghPT1UPyExOng9PT0xP3RoaXNbMF09PT1nWzBdOnRoaXMuZXZlcnkoZnVuY3Rpb24oTCl7cmV0dXJuIGcuaGFzRWxlbWVudFdpdGhJZChMLmlkKCkpfSl9LGFueVNhbWU6ZnVuY3Rpb24oZyl7cmV0dXJuIGc9dGhpcy5jeSgpLmNvbGxlY3Rpb24oZyksdGhpcy5zb21lKGZ1bmN0aW9uKHgpe3JldHVybiBnLmhhc0VsZW1lbnRXaXRoSWQoeC5pZCgpKX0pfSxhbGxBcmVOZWlnaGJvcnM6ZnVuY3Rpb24oZyl7Zz10aGlzLmN5KCkuY29sbGVjdGlvbihnKTt2YXIgeD10aGlzLm5laWdoYm9yaG9vZCgpO3JldHVybiBnLmV2ZXJ5KGZ1bmN0aW9uKFQpe3JldHVybiB4Lmhhc0VsZW1lbnRXaXRoSWQoVC5pZCgpKX0pfSxjb250YWluczpmdW5jdGlvbihnKXtnPXRoaXMuY3koKS5jb2xsZWN0aW9uKGcpO3ZhciB4PXRoaXM7cmV0dXJuIGcuZXZlcnkoZnVuY3Rpb24oVCl7cmV0dXJuIHguaGFzRWxlbWVudFdpdGhJZChULmlkKCkpfSl9fTttcC5hbGxBcmVOZWlnaGJvdXJzPW1wLmFsbEFyZU5laWdoYm9ycyxtcC5oYXM9bXAuY29udGFpbnMsbXAuZXF1YWw9bXAuZXF1YWxzPW1wLnNhbWU7dmFyIGlkPWZ1bmN0aW9uKGcseCl7cmV0dXJuIGZ1bmN0aW9uKEwsSSxPLCQpe3ZhciB6PUwsUz10aGlzLFY7aWYoej09bnVsbD9WPSIiOmR0KHopJiZ6Lmxlbmd0aD09PTEmJihWPXouaWQoKSksUy5sZW5ndGg9PT0xJiZWKXt2YXIgVT1TWzBdLl9wcml2YXRlLGV0PVUudHJhdmVyc2FsQ2FjaGU9VS50cmF2ZXJzYWxDYWNoZXx8e30sYXQ9ZXRbeF09ZXRbeF18fFtdLGx0PXZwKFYpLGd0PWF0W2x0XTtyZXR1cm4gZ3R8fChhdFtsdF09Zy5jYWxsKFMsTCxJLE8sJCkpfWVsc2UgcmV0dXJuIGcuY2FsbChTLEwsSSxPLCQpfX0sWjU9e3BhcmVudDpmdW5jdGlvbihnKXt2YXIgeD1bXTtpZih0aGlzLmxlbmd0aD09PTEpe3ZhciBUPXRoaXNbMF0uX3ByaXZhdGUucGFyZW50O2lmKFQpcmV0dXJuIFR9Zm9yKHZhciBMPTA7TDx0aGlzLmxlbmd0aDtMKyspe3ZhciBJPXRoaXNbTF0sTz1JLl9wcml2YXRlLnBhcmVudDtPJiZ4LnB1c2goTyl9cmV0dXJuIHRoaXMuc3Bhd24oeCwhMCkuZmlsdGVyKGcpfSxwYXJlbnRzOmZ1bmN0aW9uKGcpe2Zvcih2YXIgeD1bXSxUPXRoaXMucGFyZW50KCk7VC5ub25lbXB0eSgpOyl7Zm9yKHZhciBMPTA7TDxULmxlbmd0aDtMKyspe3ZhciBJPVRbTF07eC5wdXNoKEkpfVQ9VC5wYXJlbnQoKX1yZXR1cm4gdGhpcy5zcGF3bih4LCEwKS5maWx0ZXIoZyl9LGNvbW1vbkFuY2VzdG9yczpmdW5jdGlvbihnKXtmb3IodmFyIHgsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgTD10aGlzW1RdLEk9TC5wYXJlbnRzKCk7eD14fHxJLHg9eC5pbnRlcnNlY3QoSSl9cmV0dXJuIHguZmlsdGVyKGcpfSxvcnBoYW5zOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnN0ZEZpbHRlcihmdW5jdGlvbih4KXtyZXR1cm4geC5pc09ycGhhbigpfSkuZmlsdGVyKGcpfSxub25vcnBoYW5zOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnN0ZEZpbHRlcihmdW5jdGlvbih4KXtyZXR1cm4geC5pc0NoaWxkKCl9KS5maWx0ZXIoZyl9LGNoaWxkcmVuOmlkKGZ1bmN0aW9uKHkpe2Zvcih2YXIgZz1bXSx4PTA7eDx0aGlzLmxlbmd0aDt4KyspZm9yKHZhciBUPXRoaXNbeF0sTD1ULl9wcml2YXRlLmNoaWxkcmVuLEk9MDtJPEwubGVuZ3RoO0krKylnLnB1c2goTFtJXSk7cmV0dXJuIHRoaXMuc3Bhd24oZywhMCkuZmlsdGVyKHkpfSwiY2hpbGRyZW4iKSxzaWJsaW5nczpmdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5wYXJlbnQoKS5jaGlsZHJlbigpLm5vdCh0aGlzKS5maWx0ZXIoZyl9LGlzUGFyZW50OmZ1bmN0aW9uKCl7dmFyIGc9dGhpc1swXTtpZihnKXJldHVybiBnLmlzTm9kZSgpJiZnLl9wcml2YXRlLmNoaWxkcmVuLmxlbmd0aCE9PTB9LGlzQ2hpbGRsZXNzOmZ1bmN0aW9uKCl7dmFyIGc9dGhpc1swXTtpZihnKXJldHVybiBnLmlzTm9kZSgpJiZnLl9wcml2YXRlLmNoaWxkcmVuLmxlbmd0aD09PTB9LGlzQ2hpbGQ6ZnVuY3Rpb24oKXt2YXIgZz10aGlzWzBdO2lmKGcpcmV0dXJuIGcuaXNOb2RlKCkmJmcuX3ByaXZhdGUucGFyZW50IT1udWxsfSxpc09ycGhhbjpmdW5jdGlvbigpe3ZhciBnPXRoaXNbMF07aWYoZylyZXR1cm4gZy5pc05vZGUoKSYmZy5fcHJpdmF0ZS5wYXJlbnQ9PW51bGx9LGRlc2NlbmRhbnRzOmZ1bmN0aW9uKGcpe3ZhciB4PVtdO2Z1bmN0aW9uIFQoTCl7Zm9yKHZhciBJPTA7STxMLmxlbmd0aDtJKyspe3ZhciBPPUxbSV07eC5wdXNoKE8pLE8uY2hpbGRyZW4oKS5ub25lbXB0eSgpJiZUKE8uY2hpbGRyZW4oKSl9fXJldHVybiBUKHRoaXMuY2hpbGRyZW4oKSksdGhpcy5zcGF3bih4LCEwKS5maWx0ZXIoZyl9fTtmdW5jdGlvbiBZOSh5LGcseCxUKXtmb3IodmFyIEw9W10sST1uZXcgJDUsTz15LmN5KCksJD1PLmhhc0NvbXBvdW5kTm9kZXMoKSx6PTA7ejx5Lmxlbmd0aDt6Kyspe3ZhciBTPXlbel07eD9MLnB1c2goUyk6JCYmVChMLEksUyl9Zm9yKDtMLmxlbmd0aD4wOyl7dmFyIFY9TC5zaGlmdCgpO2coViksSS5hZGQoVi5pZCgpKSwkJiZUKEwsSSxWKX1yZXR1cm4geX1mdW5jdGlvbiBrayh5LGcseCl7aWYoeC5pc1BhcmVudCgpKWZvcih2YXIgVD14Ll9wcml2YXRlLmNoaWxkcmVuLEw9MDtMPFQubGVuZ3RoO0wrKyl7dmFyIEk9VFtMXTtnLmhhcyhJLmlkKCkpfHx5LnB1c2goSSl9fVo1LmZvckVhY2hEb3duPWZ1bmN0aW9uKHkpe3ZhciBnPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMDtyZXR1cm4gWTkodGhpcyx5LGcsa2spfTtmdW5jdGlvbiBZRih5LGcseCl7aWYoeC5pc0NoaWxkKCkpe3ZhciBUPXguX3ByaXZhdGUucGFyZW50O2cuaGFzKFQuaWQoKSl8fHkucHVzaChUKX19WjUuZm9yRWFjaFVwPWZ1bmN0aW9uKHkpe3ZhciBnPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMDtyZXR1cm4gWTkodGhpcyx5LGcsWUYpfTtmdW5jdGlvbiBXWih5LGcseCl7WUYoeSxnLHgpLGtrKHksZyx4KX1aNS5mb3JFYWNoVXBBbmREb3duPWZ1bmN0aW9uKHkpe3ZhciBnPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMDtyZXR1cm4gWTkodGhpcyx5LGcsV1opfSxaNS5hbmNlc3RvcnM9WjUucGFyZW50czt2YXIgRWssWEY7RWs9WEY9e2RhdGE6SWMuZGF0YSh7ZmllbGQ6ImRhdGEiLGJpbmRpbmdFdmVudDoiZGF0YSIsYWxsb3dCaW5kaW5nOiEwLGFsbG93U2V0dGluZzohMCxzZXR0aW5nRXZlbnQ6ImRhdGEiLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiEwLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLGFsbG93R2V0dGluZzohMCxpbW11dGFibGVLZXlzOntpZDohMCxzb3VyY2U6ITAsdGFyZ2V0OiEwLHBhcmVudDohMH0sdXBkYXRlU3R5bGU6ITB9KSxyZW1vdmVEYXRhOkljLnJlbW92ZURhdGEoe2ZpZWxkOiJkYXRhIixldmVudDoiZGF0YSIsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsdHJpZ2dlckV2ZW50OiEwLGltbXV0YWJsZUtleXM6e2lkOiEwLHNvdXJjZTohMCx0YXJnZXQ6ITAscGFyZW50OiEwfSx1cGRhdGVTdHlsZTohMH0pLHNjcmF0Y2g6SWMuZGF0YSh7ZmllbGQ6InNjcmF0Y2giLGJpbmRpbmdFdmVudDoic2NyYXRjaCIsYWxsb3dCaW5kaW5nOiEwLGFsbG93U2V0dGluZzohMCxzZXR0aW5nRXZlbnQ6InNjcmF0Y2giLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiEwLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLGFsbG93R2V0dGluZzohMCx1cGRhdGVTdHlsZTohMH0pLHJlbW92ZVNjcmF0Y2g6SWMucmVtb3ZlRGF0YSh7ZmllbGQ6InNjcmF0Y2giLGV2ZW50OiJzY3JhdGNoIix0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIix0cmlnZ2VyRXZlbnQ6ITAsdXBkYXRlU3R5bGU6ITB9KSxyc2NyYXRjaDpJYy5kYXRhKHtmaWVsZDoicnNjcmF0Y2giLGFsbG93QmluZGluZzohMSxhbGxvd1NldHRpbmc6ITAsc2V0dGluZ1RyaWdnZXJzRXZlbnQ6ITEsYWxsb3dHZXR0aW5nOiEwfSkscmVtb3ZlUnNjcmF0Y2g6SWMucmVtb3ZlRGF0YSh7ZmllbGQ6InJzY3JhdGNoIix0cmlnZ2VyRXZlbnQ6ITF9KSxpZDpmdW5jdGlvbigpe3ZhciBnPXRoaXNbMF07aWYoZylyZXR1cm4gZy5fcHJpdmF0ZS5kYXRhLmlkfX0sRWsuYXR0cj1Fay5kYXRhLEVrLnJlbW92ZUF0dHI9RWsucmVtb3ZlRGF0YTt2YXIgS1o9WEYsWDk9e307ZnVuY3Rpb24gSjUoeSl7cmV0dXJuIGZ1bmN0aW9uKGcpe3ZhciB4PXRoaXM7aWYoZz09PXZvaWQgMCYmKGc9ITApLHgubGVuZ3RoIT09MClpZih4LmlzTm9kZSgpJiYheC5yZW1vdmVkKCkpe2Zvcih2YXIgVD0wLEw9eFswXSxJPUwuX3ByaXZhdGUuZWRnZXMsTz0wO088SS5sZW5ndGg7TysrKXt2YXIgJD1JW09dOyFnJiYkLmlzTG9vcCgpfHwoVCs9eShMLCQpKX1yZXR1cm4gVH1lbHNlIHJldHVybn19Zm4oWDkse2RlZ3JlZTpKNShmdW5jdGlvbih5LGcpe3JldHVybiBnLnNvdXJjZSgpLnNhbWUoZy50YXJnZXQoKSk/MjoxfSksaW5kZWdyZWU6SjUoZnVuY3Rpb24oeSxnKXtyZXR1cm4gZy50YXJnZXQoKS5zYW1lKHkpPzE6MH0pLG91dGRlZ3JlZTpKNShmdW5jdGlvbih5LGcpe3JldHVybiBnLnNvdXJjZSgpLnNhbWUoeSk/MTowfSl9KTtmdW5jdGlvbiB0Nih5LGcpe3JldHVybiBmdW5jdGlvbih4KXtmb3IodmFyIFQsTD10aGlzLm5vZGVzKCksST0wO0k8TC5sZW5ndGg7SSsrKXt2YXIgTz1MW0ldLCQ9T1t5XSh4KTskIT09dm9pZCAwJiYoVD09PXZvaWQgMHx8ZygkLFQpKSYmKFQ9JCl9cmV0dXJuIFR9fWZuKFg5LHttaW5EZWdyZWU6dDYoImRlZ3JlZSIsZnVuY3Rpb24oeSxnKXtyZXR1cm4geTxnfSksbWF4RGVncmVlOnQ2KCJkZWdyZWUiLGZ1bmN0aW9uKHksZyl7cmV0dXJuIHk+Z30pLG1pbkluZGVncmVlOnQ2KCJpbmRlZ3JlZSIsZnVuY3Rpb24oeSxnKXtyZXR1cm4geTxnfSksbWF4SW5kZWdyZWU6dDYoImluZGVncmVlIixmdW5jdGlvbih5LGcpe3JldHVybiB5Pmd9KSxtaW5PdXRkZWdyZWU6dDYoIm91dGRlZ3JlZSIsZnVuY3Rpb24oeSxnKXtyZXR1cm4geTxnfSksbWF4T3V0ZGVncmVlOnQ2KCJvdXRkZWdyZWUiLGZ1bmN0aW9uKHksZyl7cmV0dXJuIHk+Z30pfSksZm4oWDkse3RvdGFsRGVncmVlOmZ1bmN0aW9uKGcpe2Zvcih2YXIgeD0wLFQ9dGhpcy5ub2RlcygpLEw9MDtMPFQubGVuZ3RoO0wrKyl4Kz1UW0xdLmRlZ3JlZShnKTtyZXR1cm4geH19KTt2YXIgeXAsUUYsVGs9ZnVuY3Rpb24oZyx4LFQpe2Zvcih2YXIgTD0wO0w8Zy5sZW5ndGg7TCsrKXt2YXIgST1nW0xdO2lmKCFJLmxvY2tlZCgpKXt2YXIgTz1JLl9wcml2YXRlLnBvc2l0aW9uLCQ9e3g6eC54IT1udWxsP3gueC1PLng6MCx5OngueSE9bnVsbD94LnktTy55OjB9O0kuaXNQYXJlbnQoKSYmISgkLng9PT0wJiYkLnk9PT0wKSYmSS5jaGlsZHJlbigpLnNoaWZ0KCQsVCksSS5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKX19fSxaRj17ZmllbGQ6InBvc2l0aW9uIixiaW5kaW5nRXZlbnQ6InBvc2l0aW9uIixhbGxvd0JpbmRpbmc6ITAsYWxsb3dTZXR0aW5nOiEwLHNldHRpbmdFdmVudDoicG9zaXRpb24iLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiEwLHRyaWdnZXJGbk5hbWU6ImVtaXRBbmROb3RpZnkiLGFsbG93R2V0dGluZzohMCx2YWxpZEtleXM6WyJ4IiwieSJdLGJlZm9yZUdldDpmdW5jdGlvbihnKXtnLnVwZGF0ZUNvbXBvdW5kQm91bmRzKCl9LGJlZm9yZVNldDpmdW5jdGlvbihnLHgpe1RrKGcseCwhMSl9LG9uU2V0OmZ1bmN0aW9uKGcpe2cuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCl9LGNhblNldDpmdW5jdGlvbihnKXtyZXR1cm4hZy5sb2NrZWQoKX19O3lwPVFGPXtwb3NpdGlvbjpJYy5kYXRhKFpGKSxzaWxlbnRQb3NpdGlvbjpJYy5kYXRhKGZuKHt9LFpGLHthbGxvd0JpbmRpbmc6ITEsYWxsb3dTZXR0aW5nOiEwLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiExLGFsbG93R2V0dGluZzohMSxiZWZvcmVTZXQ6ZnVuY3Rpb24oZyx4KXtUayhnLHgsITApfSxvblNldDpmdW5jdGlvbihnKXtnLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpfX0pKSxwb3NpdGlvbnM6ZnVuY3Rpb24oZyx4KXtpZihjdChnKSl4P3RoaXMuc2lsZW50UG9zaXRpb24oZyk6dGhpcy5wb3NpdGlvbihnKTtlbHNlIGlmKGt0KGcpKXt2YXIgVD1nLEw9dGhpcy5jeSgpO0wuc3RhcnRCYXRjaCgpO2Zvcih2YXIgST0wO0k8dGhpcy5sZW5ndGg7SSsrKXt2YXIgTz10aGlzW0ldLCQ9dm9pZCAwOygkPVQoTyxJKSkmJih4P08uc2lsZW50UG9zaXRpb24oJCk6Ty5wb3NpdGlvbigkKSl9TC5lbmRCYXRjaCgpfXJldHVybiB0aGlzfSxzaWxlbnRQb3NpdGlvbnM6ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucG9zaXRpb25zKGcsITApfSxzaGlmdDpmdW5jdGlvbihnLHgsVCl7dmFyIEw7aWYoY3QoZyk/KEw9e3g6c3QoZy54KT9nLng6MCx5OnN0KGcueSk/Zy55OjB9LFQ9eCk6VHQoZykmJnN0KHgpJiYoTD17eDowLHk6MH0sTFtnXT14KSxMIT1udWxsKXt2YXIgST10aGlzLmN5KCk7SS5zdGFydEJhdGNoKCk7Zm9yKHZhciBPPTA7Tzx0aGlzLmxlbmd0aDtPKyspe3ZhciAkPXRoaXNbT107aWYoIShJLmhhc0NvbXBvdW5kTm9kZXMoKSYmJC5pc0NoaWxkKCkmJiQuYW5jZXN0b3JzKCkuYW55U2FtZSh0aGlzKSkpe3ZhciB6PSQucG9zaXRpb24oKSxTPXt4OnoueCtMLngseTp6LnkrTC55fTtUPyQuc2lsZW50UG9zaXRpb24oUyk6JC5wb3NpdGlvbihTKX19SS5lbmRCYXRjaCgpfXJldHVybiB0aGlzfSxzaWxlbnRTaGlmdDpmdW5jdGlvbihnLHgpe3JldHVybiBjdChnKT90aGlzLnNoaWZ0KGcsITApOlR0KGcpJiZzdCh4KSYmdGhpcy5zaGlmdChnLHgsITApLHRoaXN9LHJlbmRlcmVkUG9zaXRpb246ZnVuY3Rpb24oZyx4KXt2YXIgVD10aGlzWzBdLEw9dGhpcy5jeSgpLEk9TC56b29tKCksTz1MLnBhbigpLCQ9Y3QoZyk/Zzp2b2lkIDAsej0kIT09dm9pZCAwfHx4IT09dm9pZCAwJiZUdChnKTtpZihUJiZULmlzTm9kZSgpKWlmKHopZm9yKHZhciBTPTA7Uzx0aGlzLmxlbmd0aDtTKyspe3ZhciBWPXRoaXNbU107eCE9PXZvaWQgMD9WLnBvc2l0aW9uKGcsKHgtT1tnXSkvSSk6JCE9PXZvaWQgMCYmVi5wb3NpdGlvbihRUCgkLEksTykpfWVsc2V7dmFyIFU9VC5wb3NpdGlvbigpO3JldHVybiAkPU85KFUsSSxPKSxnPT09dm9pZCAwPyQ6JFtnXX1lbHNlIGlmKCF6KXJldHVybjtyZXR1cm4gdGhpc30scmVsYXRpdmVQb3NpdGlvbjpmdW5jdGlvbihnLHgpe3ZhciBUPXRoaXNbMF0sTD10aGlzLmN5KCksST1jdChnKT9nOnZvaWQgMCxPPUkhPT12b2lkIDB8fHghPT12b2lkIDAmJlR0KGcpLCQ9TC5oYXNDb21wb3VuZE5vZGVzKCk7aWYoVCYmVC5pc05vZGUoKSlpZihPKWZvcih2YXIgej0wO3o8dGhpcy5sZW5ndGg7eisrKXt2YXIgUz10aGlzW3pdLFY9JD9TLnBhcmVudCgpOm51bGwsVT1WJiZWLmxlbmd0aD4wLGV0PVU7VSYmKFY9VlswXSk7dmFyIGF0PWV0P1YucG9zaXRpb24oKTp7eDowLHk6MH07eCE9PXZvaWQgMD9TLnBvc2l0aW9uKGcseCthdFtnXSk6SSE9PXZvaWQgMCYmUy5wb3NpdGlvbih7eDpJLngrYXQueCx5OkkueSthdC55fSl9ZWxzZXt2YXIgbHQ9VC5wb3NpdGlvbigpLGd0PSQ/VC5wYXJlbnQoKTpudWxsLEx0PWd0JiZndC5sZW5ndGg+MCxFdD1MdDtMdCYmKGd0PWd0WzBdKTt2YXIgRHQ9RXQ/Z3QucG9zaXRpb24oKTp7eDowLHk6MH07cmV0dXJuIEk9e3g6bHQueC1EdC54LHk6bHQueS1EdC55fSxnPT09dm9pZCAwP0k6SVtnXX1lbHNlIGlmKCFPKXJldHVybjtyZXR1cm4gdGhpc319LHlwLm1vZGVsUG9zaXRpb249eXAucG9pbnQ9eXAucG9zaXRpb24seXAubW9kZWxQb3NpdGlvbnM9eXAucG9pbnRzPXlwLnBvc2l0aW9ucyx5cC5yZW5kZXJlZFBvaW50PXlwLnJlbmRlcmVkUG9zaXRpb24seXAucmVsYXRpdmVQb2ludD15cC5yZWxhdGl2ZVBvc2l0aW9uO3ZhciBKRj1RRixlNixWYjtlNj1WYj17fSxWYi5yZW5kZXJlZEJvdW5kaW5nQm94PWZ1bmN0aW9uKHkpe3ZhciBnPXRoaXMuYm91bmRpbmdCb3goeSkseD10aGlzLmN5KCksVD14Lnpvb20oKSxMPXgucGFuKCksST1nLngxKlQrTC54LE89Zy54MipUK0wueCwkPWcueTEqVCtMLnksej1nLnkyKlQrTC55O3JldHVybnt4MTpJLHgyOk8seTE6JCx5Mjp6LHc6Ty1JLGg6ei0kfX0sVmIuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlPWZ1bmN0aW9uKCl7dmFyIHk9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiExLGc9dGhpcy5jeSgpO3JldHVybiFnLnN0eWxlRW5hYmxlZCgpfHwhZy5oYXNDb21wb3VuZE5vZGVzKCk/dGhpczoodGhpcy5mb3JFYWNoVXAoZnVuY3Rpb24oeCl7aWYoeC5pc1BhcmVudCgpKXt2YXIgVD14Ll9wcml2YXRlO1QuY29tcG91bmRCb3VuZHNDbGVhbj0hMSxULmJiQ2FjaGU9bnVsbCx5fHx4LmVtaXRBbmROb3RpZnkoImJvdW5kcyIpfX0pLHRoaXMpfSxWYi51cGRhdGVDb21wb3VuZEJvdW5kcz1mdW5jdGlvbigpe3ZhciB5PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMSxnPXRoaXMuY3koKTtpZighZy5zdHlsZUVuYWJsZWQoKXx8IWcuaGFzQ29tcG91bmROb2RlcygpKXJldHVybiB0aGlzO2lmKCF5JiZnLmJhdGNoaW5nKCkpcmV0dXJuIHRoaXM7ZnVuY3Rpb24geChPKXtpZighTy5pc1BhcmVudCgpKXJldHVybjt2YXIgJD1PLl9wcml2YXRlLHo9Ty5jaGlsZHJlbigpLFM9Ty5wc3R5bGUoImNvbXBvdW5kLXNpemluZy13cnQtbGFiZWxzIikudmFsdWU9PT0iaW5jbHVkZSIsVj17d2lkdGg6e3ZhbDpPLnBzdHlsZSgibWluLXdpZHRoIikucGZWYWx1ZSxsZWZ0Ok8ucHN0eWxlKCJtaW4td2lkdGgtYmlhcy1sZWZ0IikscmlnaHQ6Ty5wc3R5bGUoIm1pbi13aWR0aC1iaWFzLXJpZ2h0Iil9LGhlaWdodDp7dmFsOk8ucHN0eWxlKCJtaW4taGVpZ2h0IikucGZWYWx1ZSx0b3A6Ty5wc3R5bGUoIm1pbi1oZWlnaHQtYmlhcy10b3AiKSxib3R0b206Ty5wc3R5bGUoIm1pbi1oZWlnaHQtYmlhcy1ib3R0b20iKX19LFU9ei5ib3VuZGluZ0JveCh7aW5jbHVkZUxhYmVsczpTLGluY2x1ZGVPdmVybGF5czohMSx1c2VDYWNoZTohMX0pLGV0PSQucG9zaXRpb247KFUudz09PTB8fFUuaD09PTApJiYoVT17dzpPLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLGg6Ty5wc3R5bGUoImhlaWdodCIpLnBmVmFsdWV9LFUueDE9ZXQueC1VLncvMixVLngyPWV0LngrVS53LzIsVS55MT1ldC55LVUuaC8yLFUueTI9ZXQueStVLmgvMik7ZnVuY3Rpb24gYXQoVXQsZmUsZ2Upe3ZhciBzZT0wLE5lPTAscGU9ZmUrZ2U7cmV0dXJuIFV0PjAmJnBlPjAmJihzZT1mZS9wZSpVdCxOZT1nZS9wZSpVdCkse2JpYXNEaWZmOnNlLGJpYXNDb21wbGVtZW50RGlmZjpOZX19ZnVuY3Rpb24gbHQoVXQsZmUsZ2Usc2Upe2lmKGdlLnVuaXRzPT09IiUiKXN3aXRjaChzZSl7Y2FzZSJ3aWR0aCI6cmV0dXJuIFV0PjA/Z2UucGZWYWx1ZSpVdDowO2Nhc2UiaGVpZ2h0IjpyZXR1cm4gZmU+MD9nZS5wZlZhbHVlKmZlOjA7Y2FzZSJhdmVyYWdlIjpyZXR1cm4gVXQ+MCYmZmU+MD9nZS5wZlZhbHVlKihVdCtmZSkvMjowO2Nhc2UibWluIjpyZXR1cm4gVXQ+MCYmZmU+MD9VdD5mZT9nZS5wZlZhbHVlKmZlOmdlLnBmVmFsdWUqVXQ6MDtjYXNlIm1heCI6cmV0dXJuIFV0PjAmJmZlPjA/VXQ+ZmU/Z2UucGZWYWx1ZSpVdDpnZS5wZlZhbHVlKmZlOjA7ZGVmYXVsdDpyZXR1cm4gMH1lbHNlIHJldHVybiBnZS51bml0cz09PSJweCI/Z2UucGZWYWx1ZTowfXZhciBndD1WLndpZHRoLmxlZnQudmFsdWU7Vi53aWR0aC5sZWZ0LnVuaXRzPT09InB4IiYmVi53aWR0aC52YWw+MCYmKGd0PWd0KjEwMC9WLndpZHRoLnZhbCk7dmFyIEx0PVYud2lkdGgucmlnaHQudmFsdWU7Vi53aWR0aC5yaWdodC51bml0cz09PSJweCImJlYud2lkdGgudmFsPjAmJihMdD1MdCoxMDAvVi53aWR0aC52YWwpO3ZhciBFdD1WLmhlaWdodC50b3AudmFsdWU7Vi5oZWlnaHQudG9wLnVuaXRzPT09InB4IiYmVi5oZWlnaHQudmFsPjAmJihFdD1FdCoxMDAvVi5oZWlnaHQudmFsKTt2YXIgRHQ9Vi5oZWlnaHQuYm90dG9tLnZhbHVlO1YuaGVpZ2h0LmJvdHRvbS51bml0cz09PSJweCImJlYuaGVpZ2h0LnZhbD4wJiYoRHQ9RHQqMTAwL1YuaGVpZ2h0LnZhbCk7dmFyIEl0PWF0KFYud2lkdGgudmFsLVUudyxndCxMdCksenQ9SXQuYmlhc0RpZmYsdGU9SXQuYmlhc0NvbXBsZW1lbnREaWZmLFh0PWF0KFYuaGVpZ2h0LnZhbC1VLmgsRXQsRHQpLEh0PVh0LmJpYXNEaWZmLGllPVh0LmJpYXNDb21wbGVtZW50RGlmZjskLmF1dG9QYWRkaW5nPWx0KFUudyxVLmgsTy5wc3R5bGUoInBhZGRpbmciKSxPLnBzdHlsZSgicGFkZGluZy1yZWxhdGl2ZS10byIpLnZhbHVlKSwkLmF1dG9XaWR0aD1NYXRoLm1heChVLncsVi53aWR0aC52YWwpLGV0Lng9KC16dCtVLngxK1UueDIrdGUpLzIsJC5hdXRvSGVpZ2h0PU1hdGgubWF4KFUuaCxWLmhlaWdodC52YWwpLGV0Lnk9KC1IdCtVLnkxK1UueTIraWUpLzJ9Zm9yKHZhciBUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBMPXRoaXNbVF0sST1MLl9wcml2YXRlOyghSS5jb21wb3VuZEJvdW5kc0NsZWFufHx5KSYmKHgoTCksZy5iYXRjaGluZygpfHwoSS5jb21wb3VuZEJvdW5kc0NsZWFuPSEwKSl9cmV0dXJuIHRoaXN9O3ZhciBfMD1mdW5jdGlvbihnKXtyZXR1cm4gZz09PTEvMHx8Zz09PS0xLzA/MDpnfSx4cD1mdW5jdGlvbihnLHgsVCxMLEkpe0wteD09PTB8fEktVD09PTB8fHg9PW51bGx8fFQ9PW51bGx8fEw9PW51bGx8fEk9PW51bGx8fChnLngxPXg8Zy54MT94OmcueDEsZy54Mj1MPmcueDI/TDpnLngyLGcueTE9VDxnLnkxP1Q6Zy55MSxnLnkyPUk+Zy55Mj9JOmcueTIsZy53PWcueDItZy54MSxnLmg9Zy55Mi1nLnkxKX0sQTM9ZnVuY3Rpb24oZyx4KXtyZXR1cm4geD09bnVsbD9nOnhwKGcseC54MSx4LnkxLHgueDIseC55Mil9LF9rPWZ1bmN0aW9uKGcseCxUKXtyZXR1cm4gd3AoZyx4LFQpfSxROT1mdW5jdGlvbihnLHgsVCl7aWYoIXguY3koKS5oZWFkbGVzcygpKXt2YXIgTD14Ll9wcml2YXRlLEk9TC5yc3R5bGUsTz1JLmFycm93V2lkdGgvMiwkPXgucHN0eWxlKFQrIi1hcnJvdy1zaGFwZSIpLnZhbHVlLHosUztpZigkIT09Im5vbmUiKXtUPT09InNvdXJjZSI/KHo9SS5zcmNYLFM9SS5zcmNZKTpUPT09InRhcmdldCI/KHo9SS50Z3RYLFM9SS50Z3RZKTooej1JLm1pZFgsUz1JLm1pZFkpO3ZhciBWPUwuYXJyb3dCb3VuZHM9TC5hcnJvd0JvdW5kc3x8e30sVT1WW1RdPVZbVF18fHt9O1UueDE9ei1PLFUueTE9Uy1PLFUueDI9eitPLFUueTI9UytPLFUudz1VLngyLVUueDEsVS5oPVUueTItVS55MSxQOShVLDEpLHhwKGcsVS54MSxVLnkxLFUueDIsVS55Mil9fX0sdEI9ZnVuY3Rpb24oZyx4LFQpe2lmKCF4LmN5KCkuaGVhZGxlc3MoKSl7dmFyIEw7VD9MPVQrIi0iOkw9IiI7dmFyIEk9eC5fcHJpdmF0ZSxPPUkucnN0eWxlLCQ9eC5wc3R5bGUoTCsibGFiZWwiKS5zdHJWYWx1ZTtpZigkKXt2YXIgej14LnBzdHlsZSgidGV4dC1oYWxpZ24iKSxTPXgucHN0eWxlKCJ0ZXh0LXZhbGlnbiIpLFY9X2soTywibGFiZWxXaWR0aCIsVCksVT1fayhPLCJsYWJlbEhlaWdodCIsVCksZXQ9X2soTywibGFiZWxYIixUKSxhdD1fayhPLCJsYWJlbFkiLFQpLGx0PXgucHN0eWxlKEwrInRleHQtbWFyZ2luLXgiKS5wZlZhbHVlLGd0PXgucHN0eWxlKEwrInRleHQtbWFyZ2luLXkiKS5wZlZhbHVlLEx0PXguaXNFZGdlKCksRXQ9eC5wc3R5bGUoTCsidGV4dC1yb3RhdGlvbiIpLER0PXgucHN0eWxlKCJ0ZXh0LW91dGxpbmUtd2lkdGgiKS5wZlZhbHVlLEl0PXgucHN0eWxlKCJ0ZXh0LWJvcmRlci13aWR0aCIpLnBmVmFsdWUsenQ9SXQvMix0ZT14LnBzdHlsZSgidGV4dC1iYWNrZ3JvdW5kLXBhZGRpbmciKS5wZlZhbHVlLFh0PTIsSHQ9VSxpZT1WLFV0PWllLzIsZmU9SHQvMixnZSxzZSxOZSxwZTtpZihMdClnZT1ldC1VdCxzZT1ldCtVdCxOZT1hdC1mZSxwZT1hdCtmZTtlbHNle3N3aXRjaCh6LnZhbHVlKXtjYXNlImxlZnQiOmdlPWV0LWllLHNlPWV0O2JyZWFrO2Nhc2UiY2VudGVyIjpnZT1ldC1VdCxzZT1ldCtVdDticmVhaztjYXNlInJpZ2h0IjpnZT1ldCxzZT1ldCtpZTticmVha31zd2l0Y2goUy52YWx1ZSl7Y2FzZSJ0b3AiOk5lPWF0LUh0LHBlPWF0O2JyZWFrO2Nhc2UiY2VudGVyIjpOZT1hdC1mZSxwZT1hdCtmZTticmVhaztjYXNlImJvdHRvbSI6TmU9YXQscGU9YXQrSHQ7YnJlYWt9fWdlKz1sdC1NYXRoLm1heChEdCx6dCktdGUtWHQsc2UrPWx0K01hdGgubWF4KER0LHp0KSt0ZStYdCxOZSs9Z3QtTWF0aC5tYXgoRHQsenQpLXRlLVh0LHBlKz1ndCtNYXRoLm1heChEdCx6dCkrdGUrWHQ7dmFyIGduPVR8fCJtYWluIixqZT1JLmxhYmVsQm91bmRzLEdlPWplW2duXT1qZVtnbl18fHt9O0dlLngxPWdlLEdlLnkxPU5lLEdlLngyPXNlLEdlLnkyPXBlLEdlLnc9c2UtZ2UsR2UuaD1wZS1OZTt2YXIgeG49THQmJkV0LnN0clZhbHVlPT09ImF1dG9yb3RhdGUiLERuPUV0LnBmVmFsdWUhPW51bGwmJkV0LnBmVmFsdWUhPT0wO2lmKHhufHxEbil7dmFyIFhuPXhuP19rKEkucnN0eWxlLCJsYWJlbEFuZ2xlIixUKTpFdC5wZlZhbHVlLENuPU1hdGguY29zKFhuKSxZbj1NYXRoLnNpbihYbikscnI9KGdlK3NlKS8yLHdyPShOZStwZSkvMjtpZighTHQpe3N3aXRjaCh6LnZhbHVlKXtjYXNlImxlZnQiOnJyPXNlO2JyZWFrO2Nhc2UicmlnaHQiOnJyPWdlO2JyZWFrfXN3aXRjaChTLnZhbHVlKXtjYXNlInRvcCI6d3I9cGU7YnJlYWs7Y2FzZSJib3R0b20iOndyPU5lO2JyZWFrfX12YXIgdXI9ZnVuY3Rpb24oTGEsRGkpe3JldHVybiBMYT1MYS1ycixEaT1EaS13cix7eDpMYSpDbi1EaSpZbitycix5OkxhKlluK0RpKkNuK3dyfX0sZXI9dXIoZ2UsTmUpLGJuPXVyKGdlLHBlKSxwcj11cihzZSxOZSksZnI9dXIoc2UscGUpO2dlPU1hdGgubWluKGVyLngsYm4ueCxwci54LGZyLngpLHNlPU1hdGgubWF4KGVyLngsYm4ueCxwci54LGZyLngpLE5lPU1hdGgubWluKGVyLnksYm4ueSxwci55LGZyLnkpLHBlPU1hdGgubWF4KGVyLnksYm4ueSxwci55LGZyLnkpfXZhciByaT1nbisiUm90IixfaT1qZVtyaV09amVbcmldfHx7fTtfaS54MT1nZSxfaS55MT1OZSxfaS54Mj1zZSxfaS55Mj1wZSxfaS53PXNlLWdlLF9pLmg9cGUtTmUseHAoZyxnZSxOZSxzZSxwZSkseHAoSS5sYWJlbEJvdW5kcy5hbGwsZ2UsTmUsc2UscGUpfXJldHVybiBnfX0sWVo9ZnVuY3Rpb24oZyx4KXt2YXIgVD1nLl9wcml2YXRlLmN5LEw9VC5zdHlsZUVuYWJsZWQoKSxJPVQuaGVhZGxlc3MoKSxPPVJkKCksJD1nLl9wcml2YXRlLHo9Zy5pc05vZGUoKSxTPWcuaXNFZGdlKCksVixVLGV0LGF0LGx0LGd0LEx0PSQucnN0eWxlLEV0PXomJkw/Zy5wc3R5bGUoImJvdW5kcy1leHBhbnNpb24iKS5wZlZhbHVlOlswXSxEdD1mdW5jdGlvbihfcyl7cmV0dXJuIF9zLnBzdHlsZSgiZGlzcGxheSIpLnZhbHVlIT09Im5vbmUifSxJdD0hTHx8RHQoZykmJighU3x8RHQoZy5zb3VyY2UoKSkmJkR0KGcudGFyZ2V0KCkpKTtpZihJdCl7dmFyIHp0PTAsdGU9MDtMJiZ4LmluY2x1ZGVPdmVybGF5cyYmKHp0PWcucHN0eWxlKCJvdmVybGF5LW9wYWNpdHkiKS52YWx1ZSx6dCE9PTAmJih0ZT1nLnBzdHlsZSgib3ZlcmxheS1wYWRkaW5nIikudmFsdWUpKTt2YXIgWHQ9MCxIdD0wO0wmJnguaW5jbHVkZVVuZGVybGF5cyYmKFh0PWcucHN0eWxlKCJ1bmRlcmxheS1vcGFjaXR5IikudmFsdWUsWHQhPT0wJiYoSHQ9Zy5wc3R5bGUoInVuZGVybGF5LXBhZGRpbmciKS52YWx1ZSkpO3ZhciBpZT1NYXRoLm1heCh0ZSxIdCksVXQ9MCxmZT0wO2lmKEwmJihVdD1nLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLGZlPVV0LzIpLHomJnguaW5jbHVkZU5vZGVzKXt2YXIgZ2U9Zy5wb3NpdGlvbigpO2x0PWdlLngsZ3Q9Z2UueTt2YXIgc2U9Zy5vdXRlcldpZHRoKCksTmU9c2UvMixwZT1nLm91dGVySGVpZ2h0KCksZ249cGUvMjtWPWx0LU5lLFU9bHQrTmUsZXQ9Z3QtZ24sYXQ9Z3QrZ24seHAoTyxWLGV0LFUsYXQpfWVsc2UgaWYoUyYmeC5pbmNsdWRlRWRnZXMpaWYoTCYmIUkpe3ZhciBqZT1nLnBzdHlsZSgiY3VydmUtc3R5bGUiKS5zdHJWYWx1ZTtpZihWPU1hdGgubWluKEx0LnNyY1gsTHQubWlkWCxMdC50Z3RYKSxVPU1hdGgubWF4KEx0LnNyY1gsTHQubWlkWCxMdC50Z3RYKSxldD1NYXRoLm1pbihMdC5zcmNZLEx0Lm1pZFksTHQudGd0WSksYXQ9TWF0aC5tYXgoTHQuc3JjWSxMdC5taWRZLEx0LnRndFkpLFYtPWZlLFUrPWZlLGV0LT1mZSxhdCs9ZmUseHAoTyxWLGV0LFUsYXQpLGplPT09ImhheXN0YWNrIil7dmFyIEdlPUx0LmhheXN0YWNrUHRzO2lmKEdlJiZHZS5sZW5ndGg9PT0yKXtpZihWPUdlWzBdLngsZXQ9R2VbMF0ueSxVPUdlWzFdLngsYXQ9R2VbMV0ueSxWPlUpe3ZhciB4bj1WO1Y9VSxVPXhufWlmKGV0PmF0KXt2YXIgRG49ZXQ7ZXQ9YXQsYXQ9RG59eHAoTyxWLWZlLGV0LWZlLFUrZmUsYXQrZmUpfX1lbHNlIGlmKGplPT09ImJlemllciJ8fGplPT09InVuYnVuZGxlZC1iZXppZXIifHxqZT09PSJzZWdtZW50cyJ8fGplPT09InRheGkiKXt2YXIgWG47c3dpdGNoKGplKXtjYXNlImJlemllciI6Y2FzZSJ1bmJ1bmRsZWQtYmV6aWVyIjpYbj1MdC5iZXppZXJQdHM7YnJlYWs7Y2FzZSJzZWdtZW50cyI6Y2FzZSJ0YXhpIjpYbj1MdC5saW5lUHRzO2JyZWFrfWlmKFhuIT1udWxsKWZvcih2YXIgQ249MDtDbjxYbi5sZW5ndGg7Q24rKyl7dmFyIFluPVhuW0NuXTtWPVluLngtZmUsVT1Zbi54K2ZlLGV0PVluLnktZmUsYXQ9WW4ueStmZSx4cChPLFYsZXQsVSxhdCl9fX1lbHNle3ZhciBycj1nLnNvdXJjZSgpLHdyPXJyLnBvc2l0aW9uKCksdXI9Zy50YXJnZXQoKSxlcj11ci5wb3NpdGlvbigpO2lmKFY9d3IueCxVPWVyLngsZXQ9d3IueSxhdD1lci55LFY+VSl7dmFyIGJuPVY7Vj1VLFU9Ym59aWYoZXQ+YXQpe3ZhciBwcj1ldDtldD1hdCxhdD1wcn1WLT1mZSxVKz1mZSxldC09ZmUsYXQrPWZlLHhwKE8sVixldCxVLGF0KX1pZihMJiZ4LmluY2x1ZGVFZGdlcyYmUyYmKFE5KE8sZywibWlkLXNvdXJjZSIpLFE5KE8sZywibWlkLXRhcmdldCIpLFE5KE8sZywic291cmNlIiksUTkoTyxnLCJ0YXJnZXQiKSksTCl7dmFyIGZyPWcucHN0eWxlKCJnaG9zdCIpLnZhbHVlPT09InllcyI7aWYoZnIpe3ZhciByaT1nLnBzdHlsZSgiZ2hvc3Qtb2Zmc2V0LXgiKS5wZlZhbHVlLF9pPWcucHN0eWxlKCJnaG9zdC1vZmZzZXQteSIpLnBmVmFsdWU7eHAoTyxPLngxK3JpLE8ueTErX2ksTy54MityaSxPLnkyK19pKX19dmFyIGlhPSQuYm9keUJvdW5kcz0kLmJvZHlCb3VuZHN8fHt9O0pQKGlhLE8pLGtMKGlhLEV0KSxQOShpYSwxKSxMJiYoVj1PLngxLFU9Ty54MixldD1PLnkxLGF0PU8ueTIseHAoTyxWLWllLGV0LWllLFUraWUsYXQraWUpKTt2YXIgTGE9JC5vdmVybGF5Qm91bmRzPSQub3ZlcmxheUJvdW5kc3x8e307SlAoTGEsTyksa0woTGEsRXQpLFA5KExhLDEpO3ZhciBEaT0kLmxhYmVsQm91bmRzPSQubGFiZWxCb3VuZHN8fHt9O0RpLmFsbCE9bnVsbD9TWShEaS5hbGwpOkRpLmFsbD1SZCgpLEwmJnguaW5jbHVkZUxhYmVscyYmKHguaW5jbHVkZU1haW5MYWJlbHMmJnRCKE8sZyxudWxsKSxTJiYoeC5pbmNsdWRlU291cmNlTGFiZWxzJiZ0QihPLGcsInNvdXJjZSIpLHguaW5jbHVkZVRhcmdldExhYmVscyYmdEIoTyxnLCJ0YXJnZXQiKSkpfXJldHVybiBPLngxPV8wKE8ueDEpLE8ueTE9XzAoTy55MSksTy54Mj1fMChPLngyKSxPLnkyPV8wKE8ueTIpLE8udz1fMChPLngyLU8ueDEpLE8uaD1fMChPLnkyLU8ueTEpLE8udz4wJiZPLmg+MCYmSXQmJihrTChPLEV0KSxQOShPLDEpKSxPfSxlQj1mdW5jdGlvbihnKXt2YXIgeD0wLFQ9ZnVuY3Rpb24oTyl7cmV0dXJuKE8/MTowKTw8eCsrfSxMPTA7cmV0dXJuIEwrPVQoZy5pbmN1ZGVOb2RlcyksTCs9VChnLmluY2x1ZGVFZGdlcyksTCs9VChnLmluY2x1ZGVMYWJlbHMpLEwrPVQoZy5pbmNsdWRlTWFpbkxhYmVscyksTCs9VChnLmluY2x1ZGVTb3VyY2VMYWJlbHMpLEwrPVQoZy5pbmNsdWRlVGFyZ2V0TGFiZWxzKSxMKz1UKGcuaW5jbHVkZU92ZXJsYXlzKSxMfSxuQj1mdW5jdGlvbihnKXtpZihnLmlzRWRnZSgpKXt2YXIgeD1nLnNvdXJjZSgpLnBvc2l0aW9uKCksVD1nLnRhcmdldCgpLnBvc2l0aW9uKCksTD1mdW5jdGlvbihPKXtyZXR1cm4gTWF0aC5yb3VuZChPKX07cmV0dXJuIGRrKFtMKHgueCksTCh4LnkpLEwoVC54KSxMKFQueSldKX1lbHNlIHJldHVybiAwfSxyQj1mdW5jdGlvbihnLHgpe3ZhciBUPWcuX3ByaXZhdGUsTCxJPWcuaXNFZGdlKCksTz14PT1udWxsP2lCOmVCKHgpLCQ9Tz09PWlCLHo9bkIoZyksUz1ULmJiQ2FjaGVQb3NLZXk9PT16LFY9eC51c2VDYWNoZSYmUyxVPWZ1bmN0aW9uKGd0KXtyZXR1cm4gZ3QuX3ByaXZhdGUuYmJDYWNoZT09bnVsbHx8Z3QuX3ByaXZhdGUuc3R5bGVEaXJ0eX0sZXQ9IVZ8fFUoZyl8fEkmJlUoZy5zb3VyY2UoKSl8fFUoZy50YXJnZXQoKSk7aWYoZXQ/KFN8fGcucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKFYpLEw9WVooZyxDayksVC5iYkNhY2hlPUwsVC5iYkNhY2hlUG9zS2V5PXopOkw9VC5iYkNhY2hlLCEkKXt2YXIgYXQ9Zy5pc05vZGUoKTtMPVJkKCksKHguaW5jbHVkZU5vZGVzJiZhdHx8eC5pbmNsdWRlRWRnZXMmJiFhdCkmJih4LmluY2x1ZGVPdmVybGF5cz9BMyhMLFQub3ZlcmxheUJvdW5kcyk6QTMoTCxULmJvZHlCb3VuZHMpKSx4LmluY2x1ZGVMYWJlbHMmJih4LmluY2x1ZGVNYWluTGFiZWxzJiYoIUl8fHguaW5jbHVkZVNvdXJjZUxhYmVscyYmeC5pbmNsdWRlVGFyZ2V0TGFiZWxzKT9BMyhMLFQubGFiZWxCb3VuZHMuYWxsKTooeC5pbmNsdWRlTWFpbkxhYmVscyYmQTMoTCxULmxhYmVsQm91bmRzLm1haW5Sb3QpLHguaW5jbHVkZVNvdXJjZUxhYmVscyYmQTMoTCxULmxhYmVsQm91bmRzLnNvdXJjZVJvdCkseC5pbmNsdWRlVGFyZ2V0TGFiZWxzJiZBMyhMLFQubGFiZWxCb3VuZHMudGFyZ2V0Um90KSkpLEwudz1MLngyLUwueDEsTC5oPUwueTItTC55MX1yZXR1cm4gTH0sQ2s9e2luY2x1ZGVOb2RlczohMCxpbmNsdWRlRWRnZXM6ITAsaW5jbHVkZUxhYmVsczohMCxpbmNsdWRlTWFpbkxhYmVsczohMCxpbmNsdWRlU291cmNlTGFiZWxzOiEwLGluY2x1ZGVUYXJnZXRMYWJlbHM6ITAsaW5jbHVkZU92ZXJsYXlzOiEwLGluY2x1ZGVVbmRlcmxheXM6ITAsdXNlQ2FjaGU6ITB9LGlCPWVCKENrKSxzQj16ZihDayk7VmIuYm91bmRpbmdCb3g9ZnVuY3Rpb24oeSl7dmFyIGc7aWYodGhpcy5sZW5ndGg9PT0xJiZ0aGlzWzBdLl9wcml2YXRlLmJiQ2FjaGUhPW51bGwmJiF0aGlzWzBdLl9wcml2YXRlLnN0eWxlRGlydHkmJih5PT09dm9pZCAwfHx5LnVzZUNhY2hlPT09dm9pZCAwfHx5LnVzZUNhY2hlPT09ITApKXk9PT12b2lkIDA/eT1Dazp5PXNCKHkpLGc9ckIodGhpc1swXSx5KTtlbHNle2c9UmQoKSx5PXl8fENrO3ZhciB4PXNCKHkpLFQ9dGhpcyxMPVQuY3koKSxJPUwuc3R5bGVFbmFibGVkKCk7aWYoSSlmb3IodmFyIE89MDtPPFQubGVuZ3RoO08rKyl7dmFyICQ9VFtPXSx6PSQuX3ByaXZhdGUsUz1uQigkKSxWPXouYmJDYWNoZVBvc0tleT09PVMsVT14LnVzZUNhY2hlJiZWJiYhei5zdHlsZURpcnR5OyQucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKFUpfXRoaXMudXBkYXRlQ29tcG91bmRCb3VuZHMoIXkudXNlQ2FjaGUpO2Zvcih2YXIgZXQ9MDtldDxULmxlbmd0aDtldCsrKXt2YXIgYXQ9VFtldF07QTMoZyxyQihhdCx4KSl9fXJldHVybiBnLngxPV8wKGcueDEpLGcueTE9XzAoZy55MSksZy54Mj1fMChnLngyKSxnLnkyPV8wKGcueTIpLGcudz1fMChnLngyLWcueDEpLGcuaD1fMChnLnkyLWcueTEpLGd9LFZiLmRpcnR5Qm91bmRpbmdCb3hDYWNoZT1mdW5jdGlvbigpe2Zvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGg7eSsrKXt2YXIgZz10aGlzW3ldLl9wcml2YXRlO2cuYmJDYWNoZT1udWxsLGcuYmJDYWNoZVBvc0tleT1udWxsLGcuYm9keUJvdW5kcz1udWxsLGcub3ZlcmxheUJvdW5kcz1udWxsLGcubGFiZWxCb3VuZHMuYWxsPW51bGwsZy5sYWJlbEJvdW5kcy5zb3VyY2U9bnVsbCxnLmxhYmVsQm91bmRzLnRhcmdldD1udWxsLGcubGFiZWxCb3VuZHMubWFpbj1udWxsLGcubGFiZWxCb3VuZHMuc291cmNlUm90PW51bGwsZy5sYWJlbEJvdW5kcy50YXJnZXRSb3Q9bnVsbCxnLmxhYmVsQm91bmRzLm1haW5Sb3Q9bnVsbCxnLmFycm93Qm91bmRzLnNvdXJjZT1udWxsLGcuYXJyb3dCb3VuZHMudGFyZ2V0PW51bGwsZy5hcnJvd0JvdW5kc1sibWlkLXNvdXJjZSJdPW51bGwsZy5hcnJvd0JvdW5kc1sibWlkLXRhcmdldCJdPW51bGx9cmV0dXJuIHRoaXMuZW1pdEFuZE5vdGlmeSgiYm91bmRzIiksdGhpc30sVmIuYm91bmRpbmdCb3hBdD1mdW5jdGlvbih5KXt2YXIgZz10aGlzLm5vZGVzKCkseD10aGlzLmN5KCksVD14Lmhhc0NvbXBvdW5kTm9kZXMoKSxMPXguY29sbGVjdGlvbigpO2lmKFQmJihMPWcuZmlsdGVyKGZ1bmN0aW9uKFMpe3JldHVybiBTLmlzUGFyZW50KCl9KSxnPWcubm90KEwpKSxjdCh5KSl7dmFyIEk9eTt5PWZ1bmN0aW9uKCl7cmV0dXJuIEl9fXZhciBPPWZ1bmN0aW9uKFYsVSl7cmV0dXJuIFYuX3ByaXZhdGUuYmJBdE9sZFBvcz15KFYsVSl9LCQ9ZnVuY3Rpb24oVil7cmV0dXJuIFYuX3ByaXZhdGUuYmJBdE9sZFBvc307eC5zdGFydEJhdGNoKCksZy5mb3JFYWNoKE8pLnNpbGVudFBvc2l0aW9ucyh5KSxUJiYoTC5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKSxMLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpLEwudXBkYXRlQ29tcG91bmRCb3VuZHMoITApKTt2YXIgej1DWSh0aGlzLmJvdW5kaW5nQm94KHt1c2VDYWNoZTohMX0pKTtyZXR1cm4gZy5zaWxlbnRQb3NpdGlvbnMoJCksVCYmKEwuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCksTC5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKSxMLnVwZGF0ZUNvbXBvdW5kQm91bmRzKCEwKSkseC5lbmRCYXRjaCgpLHp9LGU2LmJvdW5kaW5nYm94PWU2LmJiPWU2LmJvdW5kaW5nQm94LGU2LnJlbmRlcmVkQm91bmRpbmdib3g9ZTYucmVuZGVyZWRCb3VuZGluZ0JveDt2YXIgWFo9VmIsU2ssQWs7U2s9QWs9e307dmFyIHhtPWZ1bmN0aW9uKGcpe2cudXBwZXJjYXNlTmFtZT1XbihnLm5hbWUpLGcuYXV0b05hbWU9ImF1dG8iK2cudXBwZXJjYXNlTmFtZSxnLmxhYmVsTmFtZT0ibGFiZWwiK2cudXBwZXJjYXNlTmFtZSxnLm91dGVyTmFtZT0ib3V0ZXIiK2cudXBwZXJjYXNlTmFtZSxnLnVwcGVyY2FzZU91dGVyTmFtZT1XbihnLm91dGVyTmFtZSksU2tbZy5uYW1lXT1mdW5jdGlvbigpe3ZhciBUPXRoaXNbMF0sTD1ULl9wcml2YXRlLEk9TC5jeSxPPUkuX3ByaXZhdGUuc3R5bGVFbmFibGVkO2lmKFQpaWYoTyl7aWYoVC5pc1BhcmVudCgpKXJldHVybiBULnVwZGF0ZUNvbXBvdW5kQm91bmRzKCksTFtnLmF1dG9OYW1lXXx8MDt2YXIgJD1ULnBzdHlsZShnLm5hbWUpO3N3aXRjaCgkLnN0clZhbHVlKXtjYXNlImxhYmVsIjpyZXR1cm4gVC5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoKSxMLnJzdHlsZVtnLmxhYmVsTmFtZV18fDA7ZGVmYXVsdDpyZXR1cm4gJC5wZlZhbHVlfX1lbHNlIHJldHVybiAxfSxTa1sib3V0ZXIiK2cudXBwZXJjYXNlTmFtZV09ZnVuY3Rpb24oKXt2YXIgVD10aGlzWzBdLEw9VC5fcHJpdmF0ZSxJPUwuY3ksTz1JLl9wcml2YXRlLnN0eWxlRW5hYmxlZDtpZihUKWlmKE8pe3ZhciAkPVRbZy5uYW1lXSgpLHo9VC5wc3R5bGUoImJvcmRlci13aWR0aCIpLnBmVmFsdWUsUz0yKlQucGFkZGluZygpO3JldHVybiAkK3orU31lbHNlIHJldHVybiAxfSxTa1sicmVuZGVyZWQiK2cudXBwZXJjYXNlTmFtZV09ZnVuY3Rpb24oKXt2YXIgVD10aGlzWzBdO2lmKFQpe3ZhciBMPVRbZy5uYW1lXSgpO3JldHVybiBMKnRoaXMuY3koKS56b29tKCl9fSxTa1sicmVuZGVyZWQiK2cudXBwZXJjYXNlT3V0ZXJOYW1lXT1mdW5jdGlvbigpe3ZhciBUPXRoaXNbMF07aWYoVCl7dmFyIEw9VFtnLm91dGVyTmFtZV0oKTtyZXR1cm4gTCp0aGlzLmN5KCkuem9vbSgpfX19O3htKHtuYW1lOiJ3aWR0aCJ9KSx4bSh7bmFtZToiaGVpZ2h0In0pLEFrLnBhZGRpbmc9ZnVuY3Rpb24oKXt2YXIgeT10aGlzWzBdLGc9eS5fcHJpdmF0ZTtyZXR1cm4geS5pc1BhcmVudCgpPyh5LnVwZGF0ZUNvbXBvdW5kQm91bmRzKCksZy5hdXRvUGFkZGluZyE9PXZvaWQgMD9nLmF1dG9QYWRkaW5nOnkucHN0eWxlKCJwYWRkaW5nIikucGZWYWx1ZSk6eS5wc3R5bGUoInBhZGRpbmciKS5wZlZhbHVlfSxBay5wYWRkZWRIZWlnaHQ9ZnVuY3Rpb24oKXt2YXIgeT10aGlzWzBdO3JldHVybiB5LmhlaWdodCgpKzIqeS5wYWRkaW5nKCl9LEFrLnBhZGRlZFdpZHRoPWZ1bmN0aW9uKCl7dmFyIHk9dGhpc1swXTtyZXR1cm4geS53aWR0aCgpKzIqeS5wYWRkaW5nKCl9O3ZhciBSTD1BayxRWj1mdW5jdGlvbihnLHgpe2lmKGcuaXNFZGdlKCkpcmV0dXJuIHgoZyl9LFpaPWZ1bmN0aW9uKGcseCl7aWYoZy5pc0VkZ2UoKSl7dmFyIFQ9Zy5jeSgpO3JldHVybiBPOSh4KGcpLFQuem9vbSgpLFQucGFuKCkpfX0sSlo9ZnVuY3Rpb24oZyx4KXtpZihnLmlzRWRnZSgpKXt2YXIgVD1nLmN5KCksTD1ULnBhbigpLEk9VC56b29tKCk7cmV0dXJuIHgoZykubWFwKGZ1bmN0aW9uKE8pe3JldHVybiBPOShPLEksTCl9KX19LHRKPWZ1bmN0aW9uKGcpe3JldHVybiBnLnJlbmRlcmVyKCkuZ2V0Q29udHJvbFBvaW50cyhnKX0sZUo9ZnVuY3Rpb24oZyl7cmV0dXJuIGcucmVuZGVyZXIoKS5nZXRTZWdtZW50UG9pbnRzKGcpfSxuSj1mdW5jdGlvbihnKXtyZXR1cm4gZy5yZW5kZXJlcigpLmdldFNvdXJjZUVuZHBvaW50KGcpfSxySj1mdW5jdGlvbihnKXtyZXR1cm4gZy5yZW5kZXJlcigpLmdldFRhcmdldEVuZHBvaW50KGcpfSxpSj1mdW5jdGlvbihnKXtyZXR1cm4gZy5yZW5kZXJlcigpLmdldEVkZ2VNaWRwb2ludChnKX0sYUI9e2NvbnRyb2xQb2ludHM6e2dldDp0SixtdWx0OiEwfSxzZWdtZW50UG9pbnRzOntnZXQ6ZUosbXVsdDohMH0sc291cmNlRW5kcG9pbnQ6e2dldDpuSn0sdGFyZ2V0RW5kcG9pbnQ6e2dldDpySn0sbWlkcG9pbnQ6e2dldDppSn19LHNKPWZ1bmN0aW9uKGcpe3JldHVybiJyZW5kZXJlZCIrZ1swXS50b1VwcGVyQ2FzZSgpK2cuc3Vic3RyKDEpfSxhSj1PYmplY3Qua2V5cyhhQikucmVkdWNlKGZ1bmN0aW9uKHksZyl7dmFyIHg9YUJbZ10sVD1zSihnKTtyZXR1cm4geVtnXT1mdW5jdGlvbigpe3JldHVybiBRWih0aGlzLHguZ2V0KX0seC5tdWx0P3lbVF09ZnVuY3Rpb24oKXtyZXR1cm4gSloodGhpcyx4LmdldCl9OnlbVF09ZnVuY3Rpb24oKXtyZXR1cm4gWloodGhpcyx4LmdldCl9LHl9LHt9KSxvSj1mbih7fSxKRixYWixSTCxhSik7LyohCiAgICAJICBFdmVudCBvYmplY3QgYmFzZWQgb24galF1ZXJ5IGV2ZW50cywgTUlUIGxpY2Vuc2UKCiAgICAJICBodHRwczovL2pxdWVyeS5vcmcvbGljZW5zZS8KICAgIAkgIGh0dHBzOi8vdGxkcmxlZ2FsLmNvbS9saWNlbnNlL21pdC1saWNlbnNlCiAgICAJICBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9ibG9iL21hc3Rlci9zcmMvZXZlbnQuanMKICAgIAkgICovdmFyIG9CPWZ1bmN0aW9uKGcseCl7dGhpcy5yZWN5Y2xlKGcseCl9O2Z1bmN0aW9uIExrKCl7cmV0dXJuITF9ZnVuY3Rpb24gWjkoKXtyZXR1cm4hMH1vQi5wcm90b3R5cGU9e2luc3RhbmNlU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuImV2ZW50In0scmVjeWNsZTpmdW5jdGlvbihnLHgpe2lmKHRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD10aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1MayxnIT1udWxsJiZnLnByZXZlbnREZWZhdWx0Pyh0aGlzLnR5cGU9Zy50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWcuZGVmYXVsdFByZXZlbnRlZD9aOTpMayk6ZyE9bnVsbCYmZy50eXBlP3g9Zzp0aGlzLnR5cGU9Zyx4IT1udWxsJiYodGhpcy5vcmlnaW5hbEV2ZW50PXgub3JpZ2luYWxFdmVudCx0aGlzLnR5cGU9eC50eXBlIT1udWxsP3gudHlwZTp0aGlzLnR5cGUsdGhpcy5jeT14LmN5LHRoaXMudGFyZ2V0PXgudGFyZ2V0LHRoaXMucG9zaXRpb249eC5wb3NpdGlvbix0aGlzLnJlbmRlcmVkUG9zaXRpb249eC5yZW5kZXJlZFBvc2l0aW9uLHRoaXMubmFtZXNwYWNlPXgubmFtZXNwYWNlLHRoaXMubGF5b3V0PXgubGF5b3V0KSx0aGlzLmN5IT1udWxsJiZ0aGlzLnBvc2l0aW9uIT1udWxsJiZ0aGlzLnJlbmRlcmVkUG9zaXRpb249PW51bGwpe3ZhciBUPXRoaXMucG9zaXRpb24sTD10aGlzLmN5Lnpvb20oKSxJPXRoaXMuY3kucGFuKCk7dGhpcy5yZW5kZXJlZFBvc2l0aW9uPXt4OlQueCpMK0kueCx5OlQueSpMK0kueX19dGhpcy50aW1lU3RhbXA9ZyYmZy50aW1lU3RhbXB8fERhdGUubm93KCl9LHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9Wjk7dmFyIGc9dGhpcy5vcmlnaW5hbEV2ZW50O2cmJmcucHJldmVudERlZmF1bHQmJmcucHJldmVudERlZmF1bHQoKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1aOTt2YXIgZz10aGlzLm9yaWdpbmFsRXZlbnQ7ZyYmZy5zdG9wUHJvcGFnYXRpb24mJmcuc3RvcFByb3BhZ2F0aW9uKCl9LHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9WjksdGhpcy5zdG9wUHJvcGFnYXRpb24oKX0saXNEZWZhdWx0UHJldmVudGVkOkxrLGlzUHJvcGFnYXRpb25TdG9wcGVkOkxrLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOkxrfTt2YXIgY0I9L14oW14uXSspKFwuKD86W14uXSspKT8kLyxjSj0iLioiLHVCPXtxdWFsaWZpZXJDb21wYXJlOmZ1bmN0aW9uKGcseCl7cmV0dXJuIGc9PT14fSxldmVudE1hdGNoZXM6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sYWRkRXZlbnRGaWVsZHM6ZnVuY3Rpb24oKXt9LGNhbGxiYWNrQ29udGV4dDpmdW5jdGlvbihnKXtyZXR1cm4gZ30sYmVmb3JlRW1pdDpmdW5jdGlvbigpe30sYWZ0ZXJFbWl0OmZ1bmN0aW9uKCl7fSxidWJibGU6ZnVuY3Rpb24oKXtyZXR1cm4hMX0scGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGNvbnRleHQ6bnVsbH0sbEI9T2JqZWN0LmtleXModUIpLHVKPXt9O2Z1bmN0aW9uIEo5KCl7Zm9yKHZhciB5PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTp1SixnPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLHg9MDt4PGxCLmxlbmd0aDt4Kyspe3ZhciBUPWxCW3hdO3RoaXNbVF09eVtUXXx8dUJbVF19dGhpcy5jb250ZXh0PWd8fHRoaXMuY29udGV4dCx0aGlzLmxpc3RlbmVycz1bXSx0aGlzLmVtaXR0aW5nPTB9dmFyIGttPUo5LnByb3RvdHlwZSxoQj1mdW5jdGlvbihnLHgsVCxMLEksTywkKXtrdChMKSYmKEk9TCxMPW51bGwpLCQmJihPPT1udWxsP089JDpPPWZuKHt9LE8sJCkpO2Zvcih2YXIgej1tdChUKT9UOlQuc3BsaXQoL1xzKy8pLFM9MDtTPHoubGVuZ3RoO1MrKyl7dmFyIFY9eltTXTtpZighWChWKSl7dmFyIFU9Vi5tYXRjaChjQik7aWYoVSl7dmFyIGV0PVVbMV0sYXQ9VVsyXT9VWzJdOm51bGwsbHQ9eChnLFYsZXQsYXQsTCxJLE8pO2lmKGx0PT09ITEpYnJlYWt9fX19LGZCPWZ1bmN0aW9uKGcseCl7cmV0dXJuIGcuYWRkRXZlbnRGaWVsZHMoZy5jb250ZXh0LHgpLG5ldyBvQih4LnR5cGUseCl9LGxKPWZ1bmN0aW9uKGcseCxUKXtpZihGdChUKSl7eChnLFQpO3JldHVybn1lbHNlIGlmKGN0KFQpKXt4KGcsZkIoZyxUKSk7cmV0dXJufWZvcih2YXIgTD1tdChUKT9UOlQuc3BsaXQoL1xzKy8pLEk9MDtJPEwubGVuZ3RoO0krKyl7dmFyIE89TFtJXTtpZighWChPKSl7dmFyICQ9Ty5tYXRjaChjQik7aWYoJCl7dmFyIHo9JFsxXSxTPSRbMl0/JFsyXTpudWxsLFY9ZkIoZyx7dHlwZTp6LG5hbWVzcGFjZTpTLHRhcmdldDpnLmNvbnRleHR9KTt4KGcsVil9fX19O2ttLm9uPWttLmFkZExpc3RlbmVyPWZ1bmN0aW9uKHksZyx4LFQsTCl7cmV0dXJuIGhCKHRoaXMsZnVuY3Rpb24oSSxPLCQseixTLFYsVSl7a3QoVikmJkkubGlzdGVuZXJzLnB1c2goe2V2ZW50Ok8sY2FsbGJhY2s6Vix0eXBlOiQsbmFtZXNwYWNlOnoscXVhbGlmaWVyOlMsY29uZjpVfSl9LHksZyx4LFQsTCksdGhpc30sa20ub25lPWZ1bmN0aW9uKHksZyx4LFQpe3JldHVybiB0aGlzLm9uKHksZyx4LFQse29uZTohMH0pfSxrbS5yZW1vdmVMaXN0ZW5lcj1rbS5vZmY9ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEw9dGhpczt0aGlzLmVtaXR0aW5nIT09MCYmKHRoaXMubGlzdGVuZXJzPXRZKHRoaXMubGlzdGVuZXJzKSk7Zm9yKHZhciBJPXRoaXMubGlzdGVuZXJzLE89ZnVuY3Rpb24oUyl7dmFyIFY9SVtTXTtoQihMLGZ1bmN0aW9uKFUsZXQsYXQsbHQsZ3QsTHQpe2lmKChWLnR5cGU9PT1hdHx8eT09PSIqIikmJighbHQmJlYubmFtZXNwYWNlIT09Ii4qInx8Vi5uYW1lc3BhY2U9PT1sdCkmJighZ3R8fFUucXVhbGlmaWVyQ29tcGFyZShWLnF1YWxpZmllcixndCkpJiYoIUx0fHxWLmNhbGxiYWNrPT09THQpKXJldHVybiBJLnNwbGljZShTLDEpLCExfSx5LGcseCxUKX0sJD1JLmxlbmd0aC0xOyQ+PTA7JC0tKU8oJCk7cmV0dXJuIHRoaXN9LGttLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlbW92ZUxpc3RlbmVyKCIqIil9LGttLmVtaXQ9a20udHJpZ2dlcj1mdW5jdGlvbih5LGcseCl7dmFyIFQ9dGhpcy5saXN0ZW5lcnMsTD1ULmxlbmd0aDtyZXR1cm4gdGhpcy5lbWl0dGluZysrLG10KGcpfHwoZz1bZ10pLGxKKHRoaXMsZnVuY3Rpb24oSSxPKXt4IT1udWxsJiYoVD1be2V2ZW50Ok8uZXZlbnQsdHlwZTpPLnR5cGUsbmFtZXNwYWNlOk8ubmFtZXNwYWNlLGNhbGxiYWNrOnh9XSxMPVQubGVuZ3RoKTtmb3IodmFyICQ9ZnVuY3Rpb24oVil7dmFyIFU9VFtWXTtpZihVLnR5cGU9PT1PLnR5cGUmJighVS5uYW1lc3BhY2V8fFUubmFtZXNwYWNlPT09Ty5uYW1lc3BhY2V8fFUubmFtZXNwYWNlPT09Y0opJiZJLmV2ZW50TWF0Y2hlcyhJLmNvbnRleHQsVSxPKSl7dmFyIGV0PVtPXTtnIT1udWxsJiZZUChldCxnKSxJLmJlZm9yZUVtaXQoSS5jb250ZXh0LFUsTyksVS5jb25mJiZVLmNvbmYub25lJiYoSS5saXN0ZW5lcnM9SS5saXN0ZW5lcnMuZmlsdGVyKGZ1bmN0aW9uKGd0KXtyZXR1cm4gZ3QhPT1VfSkpO3ZhciBhdD1JLmNhbGxiYWNrQ29udGV4dChJLmNvbnRleHQsVSxPKSxsdD1VLmNhbGxiYWNrLmFwcGx5KGF0LGV0KTtJLmFmdGVyRW1pdChJLmNvbnRleHQsVSxPKSxsdD09PSExJiYoTy5zdG9wUHJvcGFnYXRpb24oKSxPLnByZXZlbnREZWZhdWx0KCkpfX0sej0wO3o8TDt6KyspJCh6KTtJLmJ1YmJsZShJLmNvbnRleHQpJiYhTy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpJiZJLnBhcmVudChJLmNvbnRleHQpLmVtaXQoTyxnKX0seSksdGhpcy5lbWl0dGluZy0tLHRoaXN9O3ZhciBoSj17cXVhbGlmaWVyQ29tcGFyZTpmdW5jdGlvbihnLHgpe3JldHVybiBnPT1udWxsfHx4PT1udWxsP2c9PW51bGwmJng9PW51bGw6Zy5zYW1lVGV4dCh4KX0sZXZlbnRNYXRjaGVzOmZ1bmN0aW9uKGcseCxUKXt2YXIgTD14LnF1YWxpZmllcjtyZXR1cm4gTCE9bnVsbD9nIT09VC50YXJnZXQmJkN0KFQudGFyZ2V0KSYmTC5tYXRjaGVzKFQudGFyZ2V0KTohMH0sYWRkRXZlbnRGaWVsZHM6ZnVuY3Rpb24oZyx4KXt4LmN5PWcuY3koKSx4LnRhcmdldD1nfSxjYWxsYmFja0NvbnRleHQ6ZnVuY3Rpb24oZyx4LFQpe3JldHVybiB4LnF1YWxpZmllciE9bnVsbD9ULnRhcmdldDpnfSxiZWZvcmVFbWl0OmZ1bmN0aW9uKGcseCl7eC5jb25mJiZ4LmNvbmYub25jZSYmeC5jb25mLm9uY2VDb2xsZWN0aW9uLnJlbW92ZUxpc3RlbmVyKHguZXZlbnQseC5xdWFsaWZpZXIseC5jYWxsYmFjayl9LGJ1YmJsZTpmdW5jdGlvbigpe3JldHVybiEwfSxwYXJlbnQ6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNDaGlsZCgpP2cucGFyZW50KCk6Zy5jeSgpfX0sdFQ9ZnVuY3Rpb24oZyl7cmV0dXJuIFR0KGcpP25ldyB5bShnKTpnfSxkQj17Y3JlYXRlRW1pdHRlcjpmdW5jdGlvbigpe2Zvcih2YXIgZz0wO2c8dGhpcy5sZW5ndGg7ZysrKXt2YXIgeD10aGlzW2ddLFQ9eC5fcHJpdmF0ZTtULmVtaXR0ZXJ8fChULmVtaXR0ZXI9bmV3IEo5KGhKLHgpKX1yZXR1cm4gdGhpc30sZW1pdHRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmVtaXR0ZXJ9LG9uOmZ1bmN0aW9uKGcseCxUKXtmb3IodmFyIEw9dFQoeCksST0wO0k8dGhpcy5sZW5ndGg7SSsrKXt2YXIgTz10aGlzW0ldO08uZW1pdHRlcigpLm9uKGcsTCxUKX1yZXR1cm4gdGhpc30scmVtb3ZlTGlzdGVuZXI6ZnVuY3Rpb24oZyx4LFQpe2Zvcih2YXIgTD10VCh4KSxJPTA7STx0aGlzLmxlbmd0aDtJKyspe3ZhciBPPXRoaXNbSV07Ty5lbWl0dGVyKCkucmVtb3ZlTGlzdGVuZXIoZyxMLFQpfXJldHVybiB0aGlzfSxyZW1vdmVBbGxMaXN0ZW5lcnM6ZnVuY3Rpb24oKXtmb3IodmFyIGc9MDtnPHRoaXMubGVuZ3RoO2crKyl7dmFyIHg9dGhpc1tnXTt4LmVtaXR0ZXIoKS5yZW1vdmVBbGxMaXN0ZW5lcnMoKX1yZXR1cm4gdGhpc30sb25lOmZ1bmN0aW9uKGcseCxUKXtmb3IodmFyIEw9dFQoeCksST0wO0k8dGhpcy5sZW5ndGg7SSsrKXt2YXIgTz10aGlzW0ldO08uZW1pdHRlcigpLm9uZShnLEwsVCl9cmV0dXJuIHRoaXN9LG9uY2U6ZnVuY3Rpb24oZyx4LFQpe2Zvcih2YXIgTD10VCh4KSxJPTA7STx0aGlzLmxlbmd0aDtJKyspe3ZhciBPPXRoaXNbSV07Ty5lbWl0dGVyKCkub24oZyxMLFQse29uY2U6ITAsb25jZUNvbGxlY3Rpb246dGhpc30pfX0sZW1pdDpmdW5jdGlvbihnLHgpe2Zvcih2YXIgVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgTD10aGlzW1RdO0wuZW1pdHRlcigpLmVtaXQoZyx4KX1yZXR1cm4gdGhpc30sZW1pdEFuZE5vdGlmeTpmdW5jdGlvbihnLHgpe2lmKHRoaXMubGVuZ3RoIT09MClyZXR1cm4gdGhpcy5jeSgpLm5vdGlmeShnLHRoaXMpLHRoaXMuZW1pdChnLHgpLHRoaXN9fTtJYy5ldmVudEFsaWFzZXNPbihkQik7dmFyIGdCPXtub2RlczpmdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oeCl7cmV0dXJuIHguaXNOb2RlKCl9KS5maWx0ZXIoZyl9LGVkZ2VzOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbih4KXtyZXR1cm4geC5pc0VkZ2UoKX0pLmZpbHRlcihnKX0sYnlHcm91cDpmdW5jdGlvbigpe2Zvcih2YXIgZz10aGlzLnNwYXduKCkseD10aGlzLnNwYXduKCksVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgTD10aGlzW1RdO0wuaXNOb2RlKCk/Zy5wdXNoKEwpOngucHVzaChMKX1yZXR1cm57bm9kZXM6ZyxlZGdlczp4fX0sZmlsdGVyOmZ1bmN0aW9uKGcseCl7aWYoZz09PXZvaWQgMClyZXR1cm4gdGhpcztpZihUdChnKXx8ZHQoZykpcmV0dXJuIG5ldyB5bShnKS5maWx0ZXIodGhpcyk7aWYoa3QoZykpe2Zvcih2YXIgVD10aGlzLnNwYXduKCksTD10aGlzLEk9MDtJPEwubGVuZ3RoO0krKyl7dmFyIE89TFtJXSwkPXg/Zy5hcHBseSh4LFtPLEksTF0pOmcoTyxJLEwpOyQmJlQucHVzaChPKX1yZXR1cm4gVH1yZXR1cm4gdGhpcy5zcGF3bigpfSxub3Q6ZnVuY3Rpb24oZyl7aWYoZyl7VHQoZykmJihnPXRoaXMuZmlsdGVyKGcpKTtmb3IodmFyIHg9dGhpcy5zcGF3bigpLFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIEw9dGhpc1tUXSxJPWcuaGFzKEwpO0l8fHgucHVzaChMKX1yZXR1cm4geH1lbHNlIHJldHVybiB0aGlzfSxhYnNvbHV0ZUNvbXBsZW1lbnQ6ZnVuY3Rpb24oKXt2YXIgZz10aGlzLmN5KCk7cmV0dXJuIGcubXV0YWJsZUVsZW1lbnRzKCkubm90KHRoaXMpfSxpbnRlcnNlY3Q6ZnVuY3Rpb24oZyl7aWYoVHQoZykpe3ZhciB4PWc7cmV0dXJuIHRoaXMuZmlsdGVyKHgpfWZvcih2YXIgVD10aGlzLnNwYXduKCksTD10aGlzLEk9ZyxPPXRoaXMubGVuZ3RoPGcubGVuZ3RoLCQ9Tz9MOkksej1PP0k6TCxTPTA7UzwkLmxlbmd0aDtTKyspe3ZhciBWPSRbU107ei5oYXMoVikmJlQucHVzaChWKX1yZXR1cm4gVH0seG9yOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuX3ByaXZhdGUuY3k7VHQoZykmJihnPXguJChnKSk7dmFyIFQ9dGhpcy5zcGF3bigpLEw9dGhpcyxJPWcsTz1mdW5jdGlvbih6LFMpe2Zvcih2YXIgVj0wO1Y8ei5sZW5ndGg7VisrKXt2YXIgVT16W1ZdLGV0PVUuX3ByaXZhdGUuZGF0YS5pZCxhdD1TLmhhc0VsZW1lbnRXaXRoSWQoZXQpO2F0fHxULnB1c2goVSl9fTtyZXR1cm4gTyhMLEkpLE8oSSxMKSxUfSxkaWZmOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuX3ByaXZhdGUuY3k7VHQoZykmJihnPXguJChnKSk7dmFyIFQ9dGhpcy5zcGF3bigpLEw9dGhpcy5zcGF3bigpLEk9dGhpcy5zcGF3bigpLE89dGhpcywkPWcsej1mdW5jdGlvbihWLFUsZXQpe2Zvcih2YXIgYXQ9MDthdDxWLmxlbmd0aDthdCsrKXt2YXIgbHQ9VlthdF0sZ3Q9bHQuX3ByaXZhdGUuZGF0YS5pZCxMdD1VLmhhc0VsZW1lbnRXaXRoSWQoZ3QpO0x0P0kubWVyZ2UobHQpOmV0LnB1c2gobHQpfX07cmV0dXJuIHooTywkLFQpLHooJCxPLEwpLHtsZWZ0OlQscmlnaHQ6TCxib3RoOkl9fSxhZGQ6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5fcHJpdmF0ZS5jeTtpZighZylyZXR1cm4gdGhpcztpZihUdChnKSl7dmFyIFQ9ZztnPXgubXV0YWJsZUVsZW1lbnRzKCkuZmlsdGVyKFQpfWZvcih2YXIgTD10aGlzLnNwYXduU2VsZigpLEk9MDtJPGcubGVuZ3RoO0krKyl7dmFyIE89Z1tJXSwkPSF0aGlzLmhhcyhPKTskJiZMLnB1c2goTyl9cmV0dXJuIEx9LG1lcmdlOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuX3ByaXZhdGUsVD14LmN5O2lmKCFnKXJldHVybiB0aGlzO2lmKGcmJlR0KGcpKXt2YXIgTD1nO2c9VC5tdXRhYmxlRWxlbWVudHMoKS5maWx0ZXIoTCl9Zm9yKHZhciBJPXgubWFwLE89MDtPPGcubGVuZ3RoO08rKyl7dmFyICQ9Z1tPXSx6PSQuX3ByaXZhdGUuZGF0YS5pZCxTPSFJLmhhcyh6KTtpZihTKXt2YXIgVj10aGlzLmxlbmd0aCsrO3RoaXNbVl09JCxJLnNldCh6LHtlbGU6JCxpbmRleDpWfSl9fXJldHVybiB0aGlzfSx1bm1lcmdlQXQ6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpc1tnXSxUPXguaWQoKSxMPXRoaXMuX3ByaXZhdGUsST1MLm1hcDt0aGlzW2ddPXZvaWQgMCxJLmRlbGV0ZShUKTt2YXIgTz1nPT09dGhpcy5sZW5ndGgtMTtpZih0aGlzLmxlbmd0aD4xJiYhTyl7dmFyICQ9dGhpcy5sZW5ndGgtMSx6PXRoaXNbJF0sUz16Ll9wcml2YXRlLmRhdGEuaWQ7dGhpc1skXT12b2lkIDAsdGhpc1tnXT16LEkuc2V0KFMse2VsZTp6LGluZGV4Omd9KX1yZXR1cm4gdGhpcy5sZW5ndGgtLSx0aGlzfSx1bm1lcmdlT25lOmZ1bmN0aW9uKGcpe2c9Z1swXTt2YXIgeD10aGlzLl9wcml2YXRlLFQ9Zy5fcHJpdmF0ZS5kYXRhLmlkLEw9eC5tYXAsST1MLmdldChUKTtpZighSSlyZXR1cm4gdGhpczt2YXIgTz1JLmluZGV4O3JldHVybiB0aGlzLnVubWVyZ2VBdChPKSx0aGlzfSx1bm1lcmdlOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuX3ByaXZhdGUuY3k7aWYoIWcpcmV0dXJuIHRoaXM7aWYoZyYmVHQoZykpe3ZhciBUPWc7Zz14Lm11dGFibGVFbGVtZW50cygpLmZpbHRlcihUKX1mb3IodmFyIEw9MDtMPGcubGVuZ3RoO0wrKyl0aGlzLnVubWVyZ2VPbmUoZ1tMXSk7cmV0dXJuIHRoaXN9LHVubWVyZ2VCeTpmdW5jdGlvbihnKXtmb3IodmFyIHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIFQ9dGhpc1t4XTtnKFQpJiZ0aGlzLnVubWVyZ2VBdCh4KX1yZXR1cm4gdGhpc30sbWFwOmZ1bmN0aW9uKGcseCl7Zm9yKHZhciBUPVtdLEw9dGhpcyxJPTA7STxMLmxlbmd0aDtJKyspe3ZhciBPPUxbSV0sJD14P2cuYXBwbHkoeCxbTyxJLExdKTpnKE8sSSxMKTtULnB1c2goJCl9cmV0dXJuIFR9LHJlZHVjZTpmdW5jdGlvbihnLHgpe2Zvcih2YXIgVD14LEw9dGhpcyxJPTA7STxMLmxlbmd0aDtJKyspVD1nKFQsTFtJXSxJLEwpO3JldHVybiBUfSxtYXg6ZnVuY3Rpb24oZyx4KXtmb3IodmFyIFQ9LTEvMCxMLEk9dGhpcyxPPTA7TzxJLmxlbmd0aDtPKyspe3ZhciAkPUlbT10sej14P2cuYXBwbHkoeCxbJCxPLEldKTpnKCQsTyxJKTt6PlQmJihUPXosTD0kKX1yZXR1cm57dmFsdWU6VCxlbGU6TH19LG1pbjpmdW5jdGlvbihnLHgpe2Zvcih2YXIgVD0xLzAsTCxJPXRoaXMsTz0wO088SS5sZW5ndGg7TysrKXt2YXIgJD1JW09dLHo9eD9nLmFwcGx5KHgsWyQsTyxJXSk6ZygkLE8sSSk7ejxUJiYoVD16LEw9JCl9cmV0dXJue3ZhbHVlOlQsZWxlOkx9fX0sYmM9Z0I7YmMudT1iY1sifCJdPWJjWyIrIl09YmMudW5pb249YmMub3I9YmMuYWRkLGJjWyJcXCJdPWJjWyIhIl09YmNbIi0iXT1iYy5kaWZmZXJlbmNlPWJjLnJlbGF0aXZlQ29tcGxlbWVudD1iYy5zdWJ0cmFjdD1iYy5ub3QsYmMubj1iY1siJiJdPWJjWyIuIl09YmMuYW5kPWJjLmludGVyc2VjdGlvbj1iYy5pbnRlcnNlY3QsYmNbIl4iXT1iY1siKCspIl09YmNbIigtKSJdPWJjLnN5bW1ldHJpY0RpZmZlcmVuY2U9YmMuc3ltZGlmZj1iYy54b3IsYmMuZm5GaWx0ZXI9YmMuZmlsdGVyRm49YmMuc3RkRmlsdGVyPWJjLmZpbHRlcixiYy5jb21wbGVtZW50PWJjLmFic2NvbXA9YmMuYWJzb2x1dGVDb21wbGVtZW50O3ZhciBmSj17aXNOb2RlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JvdXAoKT09PSJub2RlcyJ9LGlzRWRnZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdyb3VwKCk9PT0iZWRnZXMifSxpc0xvb3A6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0VkZ2UoKSYmdGhpcy5zb3VyY2UoKVswXT09PXRoaXMudGFyZ2V0KClbMF19LGlzU2ltcGxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNFZGdlKCkmJnRoaXMuc291cmNlKClbMF0hPT10aGlzLnRhcmdldCgpWzBdfSxncm91cDpmdW5jdGlvbigpe3ZhciBnPXRoaXNbMF07aWYoZylyZXR1cm4gZy5fcHJpdmF0ZS5ncm91cH19LHBCPWZ1bmN0aW9uKGcseCl7dmFyIFQ9Zy5jeSgpLEw9VC5oYXNDb21wb3VuZE5vZGVzKCk7ZnVuY3Rpb24gSShWKXt2YXIgVT1WLnBzdHlsZSgiei1jb21wb3VuZC1kZXB0aCIpO3JldHVybiBVLnZhbHVlPT09ImF1dG8iP0w/Vi56RGVwdGgoKTowOlUudmFsdWU9PT0iYm90dG9tIj8tMTpVLnZhbHVlPT09InRvcCI/RTM6MH12YXIgTz1JKGcpLUkoeCk7aWYoTyE9PTApcmV0dXJuIE87ZnVuY3Rpb24gJChWKXt2YXIgVT1WLnBzdHlsZSgiei1pbmRleC1jb21wYXJlIik7cmV0dXJuIFUudmFsdWU9PT0iYXV0byImJlYuaXNOb2RlKCk/MTowfXZhciB6PSQoZyktJCh4KTtpZih6IT09MClyZXR1cm4gejt2YXIgUz1nLnBzdHlsZSgiei1pbmRleCIpLnZhbHVlLXgucHN0eWxlKCJ6LWluZGV4IikudmFsdWU7cmV0dXJuIFMhPT0wP1M6Zy5wb29sSW5kZXgoKS14LnBvb2xJbmRleCgpfSxlVD17Zm9yRWFjaDpmdW5jdGlvbihnLHgpe2lmKGt0KGcpKWZvcih2YXIgVD10aGlzLmxlbmd0aCxMPTA7TDxUO0wrKyl7dmFyIEk9dGhpc1tMXSxPPXg/Zy5hcHBseSh4LFtJLEwsdGhpc10pOmcoSSxMLHRoaXMpO2lmKE89PT0hMSlicmVha31yZXR1cm4gdGhpc30sdG9BcnJheTpmdW5jdGlvbigpe2Zvcih2YXIgZz1bXSx4PTA7eDx0aGlzLmxlbmd0aDt4KyspZy5wdXNoKHRoaXNbeF0pO3JldHVybiBnfSxzbGljZTpmdW5jdGlvbihnLHgpe3ZhciBUPVtdLEw9dGhpcy5sZW5ndGg7eD09bnVsbCYmKHg9TCksZz09bnVsbCYmKGc9MCksZzwwJiYoZz1MK2cpLHg8MCYmKHg9TCt4KTtmb3IodmFyIEk9ZztJPj0wJiZJPHgmJkk8TDtJKyspVC5wdXNoKHRoaXNbSV0pO3JldHVybiB0aGlzLnNwYXduKFQpfSxzaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSxlcTpmdW5jdGlvbihnKXtyZXR1cm4gdGhpc1tnXXx8dGhpcy5zcGF3bigpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzWzBdfHx0aGlzLnNwYXduKCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1t0aGlzLmxlbmd0aC0xXXx8dGhpcy5zcGF3bigpfSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aD09PTB9LG5vbmVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZW1wdHkoKX0sc29ydDpmdW5jdGlvbihnKXtpZigha3QoZykpcmV0dXJuIHRoaXM7dmFyIHg9dGhpcy50b0FycmF5KCkuc29ydChnKTtyZXR1cm4gdGhpcy5zcGF3bih4KX0sc29ydEJ5WkluZGV4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc29ydChwQil9LHpEZXB0aDpmdW5jdGlvbigpe3ZhciBnPXRoaXNbMF07aWYoZyl7dmFyIHg9Zy5fcHJpdmF0ZSxUPXguZ3JvdXA7aWYoVD09PSJub2RlcyIpe3ZhciBMPXguZGF0YS5wYXJlbnQ/Zy5wYXJlbnRzKCkuc2l6ZSgpOjA7cmV0dXJuIGcuaXNQYXJlbnQoKT9MOkUzLTF9ZWxzZXt2YXIgST14LnNvdXJjZSxPPXgudGFyZ2V0LCQ9SS56RGVwdGgoKSx6PU8uekRlcHRoKCk7cmV0dXJuIE1hdGgubWF4KCQseiwwKX19fX07ZVQuZWFjaD1lVC5mb3JFYWNoO3ZhciBkSj1mdW5jdGlvbigpe3ZhciBnPSJ1bmRlZmluZWQiLHg9KHR5cGVvZiBTeW1ib2w+InUiPyJ1bmRlZmluZWQiOmYoU3ltYm9sKSkhPWcmJmYoU3ltYm9sLml0ZXJhdG9yKSE9Zzt4JiYoZVRbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3ZhciBUPXRoaXMsTD17dmFsdWU6dm9pZCAwLGRvbmU6ITF9LEk9MCxPPXRoaXMubGVuZ3RoO3JldHVybiBiKHtuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIEk8Tz9MLnZhbHVlPVRbSSsrXTooTC52YWx1ZT12b2lkIDAsTC5kb25lPSEwKSxMfX0sU3ltYm9sLml0ZXJhdG9yLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KX0pfTtkSigpO3ZhciBnSj16Zih7bm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiExfSksblQ9e2xheW91dERpbWVuc2lvbnM6ZnVuY3Rpb24oZyl7Zz1nSihnKTt2YXIgeDtpZighdGhpcy50YWtlc1VwU3BhY2UoKSl4PXt3OjAsaDowfTtlbHNlIGlmKGcubm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzKXt2YXIgVD10aGlzLmJvdW5kaW5nQm94KCk7eD17dzpULncsaDpULmh9fWVsc2UgeD17dzp0aGlzLm91dGVyV2lkdGgoKSxoOnRoaXMub3V0ZXJIZWlnaHQoKX07cmV0dXJuKHgudz09PTB8fHguaD09PTApJiYoeC53PXguaD0xKSx4fSxsYXlvdXRQb3NpdGlvbnM6ZnVuY3Rpb24oZyx4LFQpe3ZhciBMPXRoaXMubm9kZXMoKS5maWx0ZXIoZnVuY3Rpb24odGUpe3JldHVybiF0ZS5pc1BhcmVudCgpfSksST10aGlzLmN5KCksTz14LmVsZXMsJD1mdW5jdGlvbihYdCl7cmV0dXJuIFh0LmlkKCl9LHo9VnQoVCwkKTtnLmVtaXQoe3R5cGU6ImxheW91dHN0YXJ0IixsYXlvdXQ6Z30pLGcuYW5pbWF0aW9ucz1bXTt2YXIgUz1mdW5jdGlvbihYdCxIdCxpZSl7dmFyIFV0PXt4Okh0LngxK0h0LncvMix5Okh0LnkxK0h0LmgvMn0sZmU9e3g6KGllLngtVXQueCkqWHQseTooaWUueS1VdC55KSpYdH07cmV0dXJue3g6VXQueCtmZS54LHk6VXQueStmZS55fX0sVj14LnNwYWNpbmdGYWN0b3ImJnguc3BhY2luZ0ZhY3RvciE9PTEsVT1mdW5jdGlvbigpe2lmKCFWKXJldHVybiBudWxsO2Zvcih2YXIgWHQ9UmQoKSxIdD0wO0h0PEwubGVuZ3RoO0h0Kyspe3ZhciBpZT1MW0h0XSxVdD16KGllLEh0KTtMWShYdCxVdC54LFV0LnkpfXJldHVybiBYdH0sZXQ9VSgpLGF0PVZ0KGZ1bmN0aW9uKHRlLFh0KXt2YXIgSHQ9eih0ZSxYdCk7aWYoVil7dmFyIGllPU1hdGguYWJzKHguc3BhY2luZ0ZhY3Rvcik7SHQ9UyhpZSxldCxIdCl9cmV0dXJuIHgudHJhbnNmb3JtIT1udWxsJiYoSHQ9eC50cmFuc2Zvcm0odGUsSHQpKSxIdH0sJCk7aWYoeC5hbmltYXRlKXtmb3IodmFyIGx0PTA7bHQ8TC5sZW5ndGg7bHQrKyl7dmFyIGd0PUxbbHRdLEx0PWF0KGd0LGx0KSxFdD14LmFuaW1hdGVGaWx0ZXI9PW51bGx8fHguYW5pbWF0ZUZpbHRlcihndCxsdCk7aWYoRXQpe3ZhciBEdD1ndC5hbmltYXRpb24oe3Bvc2l0aW9uOkx0LGR1cmF0aW9uOnguYW5pbWF0aW9uRHVyYXRpb24sZWFzaW5nOnguYW5pbWF0aW9uRWFzaW5nfSk7Zy5hbmltYXRpb25zLnB1c2goRHQpfWVsc2UgZ3QucG9zaXRpb24oTHQpfWlmKHguZml0KXt2YXIgSXQ9SS5hbmltYXRpb24oe2ZpdDp7Ym91bmRpbmdCb3g6Ty5ib3VuZGluZ0JveEF0KGF0KSxwYWRkaW5nOngucGFkZGluZ30sZHVyYXRpb246eC5hbmltYXRpb25EdXJhdGlvbixlYXNpbmc6eC5hbmltYXRpb25FYXNpbmd9KTtnLmFuaW1hdGlvbnMucHVzaChJdCl9ZWxzZSBpZih4Lnpvb20hPT12b2lkIDAmJngucGFuIT09dm9pZCAwKXt2YXIgenQ9SS5hbmltYXRpb24oe3pvb206eC56b29tLHBhbjp4LnBhbixkdXJhdGlvbjp4LmFuaW1hdGlvbkR1cmF0aW9uLGVhc2luZzp4LmFuaW1hdGlvbkVhc2luZ30pO2cuYW5pbWF0aW9ucy5wdXNoKHp0KX1nLmFuaW1hdGlvbnMuZm9yRWFjaChmdW5jdGlvbih0ZSl7cmV0dXJuIHRlLnBsYXkoKX0pLGcub25lKCJsYXlvdXRyZWFkeSIseC5yZWFkeSksZy5lbWl0KHt0eXBlOiJsYXlvdXRyZWFkeSIsbGF5b3V0Omd9KSxXNS5hbGwoZy5hbmltYXRpb25zLm1hcChmdW5jdGlvbih0ZSl7cmV0dXJuIHRlLnByb21pc2UoKX0pKS50aGVuKGZ1bmN0aW9uKCl7Zy5vbmUoImxheW91dHN0b3AiLHguc3RvcCksZy5lbWl0KHt0eXBlOiJsYXlvdXRzdG9wIixsYXlvdXQ6Z30pfSl9ZWxzZSBMLnBvc2l0aW9ucyhhdCkseC5maXQmJkkuZml0KHguZWxlcyx4LnBhZGRpbmcpLHguem9vbSE9bnVsbCYmSS56b29tKHguem9vbSkseC5wYW4mJkkucGFuKHgucGFuKSxnLm9uZSgibGF5b3V0cmVhZHkiLHgucmVhZHkpLGcuZW1pdCh7dHlwZToibGF5b3V0cmVhZHkiLGxheW91dDpnfSksZy5vbmUoImxheW91dHN0b3AiLHguc3RvcCksZy5lbWl0KHt0eXBlOiJsYXlvdXRzdG9wIixsYXlvdXQ6Z30pO3JldHVybiB0aGlzfSxsYXlvdXQ6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5jeSgpO3JldHVybiB4Lm1ha2VMYXlvdXQoZm4oe30sZyx7ZWxlczp0aGlzfSkpfX07blQuY3JlYXRlTGF5b3V0PW5ULm1ha2VMYXlvdXQ9blQubGF5b3V0O2Z1bmN0aW9uIGJCKHksZyx4KXt2YXIgVD14Ll9wcml2YXRlLEw9VC5zdHlsZUNhY2hlPVQuc3R5bGVDYWNoZXx8W10sSTtyZXR1cm4oST1MW3ldKSE9bnVsbHx8KEk9TFt5XT1nKHgpKSxJfWZ1bmN0aW9uIHJUKHksZyl7cmV0dXJuIHk9dnAoeSksZnVuY3Rpb24oVCl7cmV0dXJuIGJCKHksZyxUKX19ZnVuY3Rpb24gaVQoeSxnKXt5PXZwKHkpO3ZhciB4PWZ1bmN0aW9uKEwpe3JldHVybiBnLmNhbGwoTCl9O3JldHVybiBmdW5jdGlvbigpe3ZhciBMPXRoaXNbMF07aWYoTClyZXR1cm4gYkIoeSx4LEwpfX12YXIgcWY9e3JlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZTpmdW5jdGlvbihnKXt2YXIgeD10aGlzLmN5KCksVD14LnJlbmRlcmVyKCksTD14LnN0eWxlRW5hYmxlZCgpO3JldHVybiBUJiZMJiZULnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh0aGlzLGcpLHRoaXN9LGRpcnR5U3R5bGVDYWNoZTpmdW5jdGlvbigpe3ZhciBnPXRoaXMuY3koKSx4PWZ1bmN0aW9uKEkpe3JldHVybiBJLl9wcml2YXRlLnN0eWxlQ2FjaGU9bnVsbH07aWYoZy5oYXNDb21wb3VuZE5vZGVzKCkpe3ZhciBUO1Q9dGhpcy5zcGF3blNlbGYoKS5tZXJnZSh0aGlzLmRlc2NlbmRhbnRzKCkpLm1lcmdlKHRoaXMucGFyZW50cygpKSxULm1lcmdlKFQuY29ubmVjdGVkRWRnZXMoKSksVC5mb3JFYWNoKHgpfWVsc2UgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKEwpe3goTCksTC5jb25uZWN0ZWRFZGdlcygpLmZvckVhY2goeCl9KTtyZXR1cm4gdGhpc30sdXBkYXRlU3R5bGU6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5fcHJpdmF0ZS5jeTtpZigheC5zdHlsZUVuYWJsZWQoKSlyZXR1cm4gdGhpcztpZih4LmJhdGNoaW5nKCkpe3ZhciBUPXguX3ByaXZhdGUuYmF0Y2hTdHlsZUVsZXM7cmV0dXJuIFQubWVyZ2UodGhpcyksdGhpc312YXIgTD14Lmhhc0NvbXBvdW5kTm9kZXMoKSxJPXRoaXM7Zz0hIShnfHxnPT09dm9pZCAwKSxMJiYoST10aGlzLnNwYXduU2VsZigpLm1lcmdlKHRoaXMuZGVzY2VuZGFudHMoKSkubWVyZ2UodGhpcy5wYXJlbnRzKCkpKTt2YXIgTz1JO3JldHVybiBnP08uZW1pdEFuZE5vdGlmeSgic3R5bGUiKTpPLmVtaXQoInN0eWxlIiksSS5mb3JFYWNoKGZ1bmN0aW9uKCQpe3JldHVybiAkLl9wcml2YXRlLnN0eWxlRGlydHk9ITB9KSx0aGlzfSxjbGVhblN0eWxlOmZ1bmN0aW9uKCl7dmFyIGc9dGhpcy5jeSgpO2lmKGcuc3R5bGVFbmFibGVkKCkpZm9yKHZhciB4PTA7eDx0aGlzLmxlbmd0aDt4Kyspe3ZhciBUPXRoaXNbeF07VC5fcHJpdmF0ZS5zdHlsZURpcnR5JiYoVC5fcHJpdmF0ZS5zdHlsZURpcnR5PSExLGcuc3R5bGUoKS5hcHBseShUKSl9fSxwYXJzZWRTdHlsZTpmdW5jdGlvbihnKXt2YXIgeD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITAsVD10aGlzWzBdLEw9VC5jeSgpO2lmKEwuc3R5bGVFbmFibGVkKCkmJlQpe3RoaXMuY2xlYW5TdHlsZSgpO3ZhciBJPVQuX3ByaXZhdGUuc3R5bGVbZ107cmV0dXJuIEk/Pyh4P0wuc3R5bGUoKS5nZXREZWZhdWx0UHJvcGVydHkoZyk6bnVsbCl9fSxudW1lcmljU3R5bGU6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpc1swXTtpZih4LmN5KCkuc3R5bGVFbmFibGVkKCkmJngpe3ZhciBUPXgucHN0eWxlKGcpO3JldHVybiBULnBmVmFsdWUhPT12b2lkIDA/VC5wZlZhbHVlOlQudmFsdWV9fSxudW1lcmljU3R5bGVVbml0czpmdW5jdGlvbihnKXt2YXIgeD10aGlzWzBdO2lmKHguY3koKS5zdHlsZUVuYWJsZWQoKSYmeClyZXR1cm4geC5wc3R5bGUoZykudW5pdHN9LHJlbmRlcmVkU3R5bGU6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5jeSgpO2lmKCF4LnN0eWxlRW5hYmxlZCgpKXJldHVybiB0aGlzO3ZhciBUPXRoaXNbMF07aWYoVClyZXR1cm4geC5zdHlsZSgpLmdldFJlbmRlcmVkU3R5bGUoVCxnKX0sc3R5bGU6ZnVuY3Rpb24oZyx4KXt2YXIgVD10aGlzLmN5KCk7aWYoIVQuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7dmFyIEw9ITEsST1ULnN0eWxlKCk7aWYoY3QoZykpe3ZhciBPPWc7SS5hcHBseUJ5cGFzcyh0aGlzLE8sTCksdGhpcy5lbWl0QW5kTm90aWZ5KCJzdHlsZSIpfWVsc2UgaWYoVHQoZykpaWYoeD09PXZvaWQgMCl7dmFyICQ9dGhpc1swXTtyZXR1cm4gJD9JLmdldFN0eWxlUHJvcGVydHlWYWx1ZSgkLGcpOnZvaWQgMH1lbHNlIEkuYXBwbHlCeXBhc3ModGhpcyxnLHgsTCksdGhpcy5lbWl0QW5kTm90aWZ5KCJzdHlsZSIpO2Vsc2UgaWYoZz09PXZvaWQgMCl7dmFyIHo9dGhpc1swXTtyZXR1cm4gej9JLmdldFJhd1N0eWxlKHopOnZvaWQgMH1yZXR1cm4gdGhpc30scmVtb3ZlU3R5bGU6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5jeSgpO2lmKCF4LnN0eWxlRW5hYmxlZCgpKXJldHVybiB0aGlzO3ZhciBUPSExLEw9eC5zdHlsZSgpLEk9dGhpcztpZihnPT09dm9pZCAwKWZvcih2YXIgTz0wO088SS5sZW5ndGg7TysrKXt2YXIgJD1JW09dO0wucmVtb3ZlQWxsQnlwYXNzZXMoJCxUKX1lbHNle2c9Zy5zcGxpdCgvXHMrLyk7Zm9yKHZhciB6PTA7ejxJLmxlbmd0aDt6Kyspe3ZhciBTPUlbel07TC5yZW1vdmVCeXBhc3NlcyhTLGcsVCl9fXJldHVybiB0aGlzLmVtaXRBbmROb3RpZnkoInN0eWxlIiksdGhpc30sc2hvdzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNzcygiZGlzcGxheSIsImVsZW1lbnQiKSx0aGlzfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3NzKCJkaXNwbGF5Iiwibm9uZSIpLHRoaXN9LGVmZmVjdGl2ZU9wYWNpdHk6ZnVuY3Rpb24oKXt2YXIgZz10aGlzLmN5KCk7aWYoIWcuc3R5bGVFbmFibGVkKCkpcmV0dXJuIDE7dmFyIHg9Zy5oYXNDb21wb3VuZE5vZGVzKCksVD10aGlzWzBdO2lmKFQpe3ZhciBMPVQuX3ByaXZhdGUsST1ULnBzdHlsZSgib3BhY2l0eSIpLnZhbHVlO2lmKCF4KXJldHVybiBJO3ZhciBPPUwuZGF0YS5wYXJlbnQ/VC5wYXJlbnRzKCk6bnVsbDtpZihPKWZvcih2YXIgJD0wOyQ8Ty5sZW5ndGg7JCsrKXt2YXIgej1PWyRdLFM9ei5wc3R5bGUoIm9wYWNpdHkiKS52YWx1ZTtJPVMqSX1yZXR1cm4gSX19LHRyYW5zcGFyZW50OmZ1bmN0aW9uKCl7dmFyIGc9dGhpcy5jeSgpO2lmKCFnLnN0eWxlRW5hYmxlZCgpKXJldHVybiExO3ZhciB4PXRoaXNbMF0sVD14LmN5KCkuaGFzQ29tcG91bmROb2RlcygpO2lmKHgpcmV0dXJuIFQ/eC5lZmZlY3RpdmVPcGFjaXR5KCk9PT0wOngucHN0eWxlKCJvcGFjaXR5IikudmFsdWU9PT0wfSxiYWNrZ3JvdW5kaW5nOmZ1bmN0aW9uKCl7dmFyIGc9dGhpcy5jeSgpO2lmKCFnLnN0eWxlRW5hYmxlZCgpKXJldHVybiExO3ZhciB4PXRoaXNbMF07cmV0dXJuISF4Ll9wcml2YXRlLmJhY2tncm91bmRpbmd9fTtmdW5jdGlvbiBqTCh5LGcpe3ZhciB4PXkuX3ByaXZhdGUsVD14LmRhdGEucGFyZW50P3kucGFyZW50cygpOm51bGw7aWYoVClmb3IodmFyIEw9MDtMPFQubGVuZ3RoO0wrKyl7dmFyIEk9VFtMXTtpZighZyhJKSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiAkTCh5KXt2YXIgZz15Lm9rLHg9eS5lZGdlT2tWaWFOb2RlfHx5Lm9rLFQ9eS5wYXJlbnRPa3x8eS5vaztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgTD10aGlzLmN5KCk7aWYoIUwuc3R5bGVFbmFibGVkKCkpcmV0dXJuITA7dmFyIEk9dGhpc1swXSxPPUwuaGFzQ29tcG91bmROb2RlcygpO2lmKEkpe3ZhciAkPUkuX3ByaXZhdGU7aWYoIWcoSSkpcmV0dXJuITE7aWYoSS5pc05vZGUoKSlyZXR1cm4hT3x8akwoSSxUKTt2YXIgej0kLnNvdXJjZSxTPSQudGFyZ2V0O3JldHVybiB4KHopJiYoIU98fGpMKHoseCkpJiYoej09PVN8fHgoUykmJighT3x8akwoUyx4KSkpfX19dmFyIG42PXJUKCJlbGVUYWtlc1VwU3BhY2UiLGZ1bmN0aW9uKHkpe3JldHVybiB5LnBzdHlsZSgiZGlzcGxheSIpLnZhbHVlPT09ImVsZW1lbnQiJiZ5LndpZHRoKCkhPT0wJiYoeS5pc05vZGUoKT95LmhlaWdodCgpIT09MDohMCl9KTtxZi50YWtlc1VwU3BhY2U9aVQoInRha2VzVXBTcGFjZSIsJEwoe29rOm42fSkpO3ZhciBwSj1yVCgiZWxlSW50ZXJhY3RpdmUiLGZ1bmN0aW9uKHkpe3JldHVybiB5LnBzdHlsZSgiZXZlbnRzIikudmFsdWU9PT0ieWVzIiYmeS5wc3R5bGUoInZpc2liaWxpdHkiKS52YWx1ZT09PSJ2aXNpYmxlIiYmbjYoeSl9KSxiSj1yVCgicGFyZW50SW50ZXJhY3RpdmUiLGZ1bmN0aW9uKHkpe3JldHVybiB5LnBzdHlsZSgidmlzaWJpbGl0eSIpLnZhbHVlPT09InZpc2libGUiJiZuNih5KX0pO3FmLmludGVyYWN0aXZlPWlUKCJpbnRlcmFjdGl2ZSIsJEwoe29rOnBKLHBhcmVudE9rOmJKLGVkZ2VPa1ZpYU5vZGU6bjZ9KSkscWYubm9uaW50ZXJhY3RpdmU9ZnVuY3Rpb24oKXt2YXIgeT10aGlzWzBdO2lmKHkpcmV0dXJuIXkuaW50ZXJhY3RpdmUoKX07dmFyIHZKPXJUKCJlbGVWaXNpYmxlIixmdW5jdGlvbih5KXtyZXR1cm4geS5wc3R5bGUoInZpc2liaWxpdHkiKS52YWx1ZT09PSJ2aXNpYmxlIiYmeS5wc3R5bGUoIm9wYWNpdHkiKS5wZlZhbHVlIT09MCYmbjYoeSl9KSx3Sj1uNjtxZi52aXNpYmxlPWlUKCJ2aXNpYmxlIiwkTCh7b2s6dkosZWRnZU9rVmlhTm9kZTp3Sn0pKSxxZi5oaWRkZW49ZnVuY3Rpb24oKXt2YXIgeT10aGlzWzBdO2lmKHkpcmV0dXJuIXkudmlzaWJsZSgpfSxxZi5pc0J1bmRsZWRCZXppZXI9aVQoImlzQnVuZGxlZEJlemllciIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jeSgpLnN0eWxlRW5hYmxlZCgpPyF0aGlzLnJlbW92ZWQoKSYmdGhpcy5wc3R5bGUoImN1cnZlLXN0eWxlIikudmFsdWU9PT0iYmV6aWVyIiYmdGhpcy50YWtlc1VwU3BhY2UoKTohMX0pLHFmLmJ5cGFzcz1xZi5jc3M9cWYuc3R5bGUscWYucmVuZGVyZWRDc3M9cWYucmVuZGVyZWRTdHlsZSxxZi5yZW1vdmVCeXBhc3M9cWYucmVtb3ZlQ3NzPXFmLnJlbW92ZVN0eWxlLHFmLnBzdHlsZT1xZi5wYXJzZWRTdHlsZTt2YXIgRW09e307ZnVuY3Rpb24gdkIoeSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGc9YXJndW1lbnRzLHg9W107aWYoZy5sZW5ndGg9PT0yKXt2YXIgVD1nWzBdLEw9Z1sxXTt0aGlzLm9uKHkuZXZlbnQsVCxMKX1lbHNlIGlmKGcubGVuZ3RoPT09MSYma3QoZ1swXSkpe3ZhciBJPWdbMF07dGhpcy5vbih5LmV2ZW50LEkpfWVsc2UgaWYoZy5sZW5ndGg9PT0wfHxnLmxlbmd0aD09PTEmJm10KGdbMF0pKXtmb3IodmFyIE89Zy5sZW5ndGg9PT0xP2dbMF06bnVsbCwkPTA7JDx0aGlzLmxlbmd0aDskKyspe3ZhciB6PXRoaXNbJF0sUz0heS5hYmxlRmllbGR8fHouX3ByaXZhdGVbeS5hYmxlRmllbGRdLFY9ei5fcHJpdmF0ZVt5LmZpZWxkXSE9eS52YWx1ZTtpZih5Lm92ZXJyaWRlQWJsZSl7dmFyIFU9eS5vdmVycmlkZUFibGUoeik7aWYoVSE9PXZvaWQgMCYmKFM9VSwhVSkpcmV0dXJuIHRoaXN9UyYmKHouX3ByaXZhdGVbeS5maWVsZF09eS52YWx1ZSxWJiZ4LnB1c2goeikpfXZhciBldD10aGlzLnNwYXduKHgpO2V0LnVwZGF0ZVN0eWxlKCksZXQuZW1pdCh5LmV2ZW50KSxPJiZldC5lbWl0KE8pfXJldHVybiB0aGlzfX1mdW5jdGlvbiByNih5KXtFbVt5LmZpZWxkXT1mdW5jdGlvbigpe3ZhciBnPXRoaXNbMF07aWYoZyl7aWYoeS5vdmVycmlkZUZpZWxkKXt2YXIgeD15Lm92ZXJyaWRlRmllbGQoZyk7aWYoeCE9PXZvaWQgMClyZXR1cm4geH1yZXR1cm4gZy5fcHJpdmF0ZVt5LmZpZWxkXX19LEVtW3kub25dPXZCKHtldmVudDp5Lm9uLGZpZWxkOnkuZmllbGQsYWJsZUZpZWxkOnkuYWJsZUZpZWxkLG92ZXJyaWRlQWJsZTp5Lm92ZXJyaWRlQWJsZSx2YWx1ZTohMH0pLEVtW3kub2ZmXT12Qih7ZXZlbnQ6eS5vZmYsZmllbGQ6eS5maWVsZCxhYmxlRmllbGQ6eS5hYmxlRmllbGQsb3ZlcnJpZGVBYmxlOnkub3ZlcnJpZGVBYmxlLHZhbHVlOiExfSl9cjYoe2ZpZWxkOiJsb2NrZWQiLG92ZXJyaWRlRmllbGQ6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuY3koKS5hdXRvbG9jaygpPyEwOnZvaWQgMH0sb246ImxvY2siLG9mZjoidW5sb2NrIn0pLHI2KHtmaWVsZDoiZ3JhYmJhYmxlIixvdmVycmlkZUZpZWxkOmZ1bmN0aW9uKGcpe3JldHVybiBnLmN5KCkuYXV0b3VuZ3JhYmlmeSgpfHxnLnBhbm5hYmxlKCk/ITE6dm9pZCAwfSxvbjoiZ3JhYmlmeSIsb2ZmOiJ1bmdyYWJpZnkifSkscjYoe2ZpZWxkOiJzZWxlY3RlZCIsYWJsZUZpZWxkOiJzZWxlY3RhYmxlIixvdmVycmlkZUFibGU6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuY3koKS5hdXRvdW5zZWxlY3RpZnkoKT8hMTp2b2lkIDB9LG9uOiJzZWxlY3QiLG9mZjoidW5zZWxlY3QifSkscjYoe2ZpZWxkOiJzZWxlY3RhYmxlIixvdmVycmlkZUZpZWxkOmZ1bmN0aW9uKGcpe3JldHVybiBnLmN5KCkuYXV0b3Vuc2VsZWN0aWZ5KCk/ITE6dm9pZCAwfSxvbjoic2VsZWN0aWZ5IixvZmY6InVuc2VsZWN0aWZ5In0pLEVtLmRlc2VsZWN0PUVtLnVuc2VsZWN0LEVtLmdyYWJiZWQ9ZnVuY3Rpb24oKXt2YXIgeT10aGlzWzBdO2lmKHkpcmV0dXJuIHkuX3ByaXZhdGUuZ3JhYmJlZH0scjYoe2ZpZWxkOiJhY3RpdmUiLG9uOiJhY3RpdmF0ZSIsb2ZmOiJ1bmFjdGl2YXRlIn0pLHI2KHtmaWVsZDoicGFubmFibGUiLG9uOiJwYW5pZnkiLG9mZjoidW5wYW5pZnkifSksRW0uaW5hY3RpdmU9ZnVuY3Rpb24oKXt2YXIgeT10aGlzWzBdO2lmKHkpcmV0dXJuIXkuX3ByaXZhdGUuYWN0aXZlfTt2YXIgZzE9e30sd0I9ZnVuY3Rpb24oZyl7cmV0dXJuIGZ1bmN0aW9uKFQpe2Zvcih2YXIgTD10aGlzLEk9W10sTz0wO088TC5sZW5ndGg7TysrKXt2YXIgJD1MW09dO2lmKCQuaXNOb2RlKCkpe2Zvcih2YXIgej0hMSxTPSQuY29ubmVjdGVkRWRnZXMoKSxWPTA7VjxTLmxlbmd0aDtWKyspe3ZhciBVPVNbVl0sZXQ9VS5zb3VyY2UoKSxhdD1VLnRhcmdldCgpO2lmKGcubm9JbmNvbWluZ0VkZ2VzJiZhdD09PSQmJmV0IT09JHx8Zy5ub091dGdvaW5nRWRnZXMmJmV0PT09JCYmYXQhPT0kKXt6PSEwO2JyZWFrfX16fHxJLnB1c2goJCl9fXJldHVybiB0aGlzLnNwYXduKEksITApLmZpbHRlcihUKX19LG1CPWZ1bmN0aW9uKGcpe3JldHVybiBmdW5jdGlvbih4KXtmb3IodmFyIFQ9dGhpcyxMPVtdLEk9MDtJPFQubGVuZ3RoO0krKyl7dmFyIE89VFtJXTtpZihPLmlzTm9kZSgpKWZvcih2YXIgJD1PLmNvbm5lY3RlZEVkZ2VzKCksej0wO3o8JC5sZW5ndGg7eisrKXt2YXIgUz0kW3pdLFY9Uy5zb3VyY2UoKSxVPVMudGFyZ2V0KCk7Zy5vdXRnb2luZyYmVj09PU8/KEwucHVzaChTKSxMLnB1c2goVSkpOmcuaW5jb21pbmcmJlU9PT1PJiYoTC5wdXNoKFMpLEwucHVzaChWKSl9fXJldHVybiB0aGlzLnNwYXduKEwsITApLmZpbHRlcih4KX19LHlCPWZ1bmN0aW9uKGcpe3JldHVybiBmdW5jdGlvbih4KXtmb3IodmFyIFQ9dGhpcyxMPVtdLEk9e307Oyl7dmFyIE89Zy5vdXRnb2luZz9ULm91dGdvZXJzKCk6VC5pbmNvbWVycygpO2lmKE8ubGVuZ3RoPT09MClicmVhaztmb3IodmFyICQ9ITEsej0wO3o8Ty5sZW5ndGg7eisrKXt2YXIgUz1PW3pdLFY9Uy5pZCgpO0lbVl18fChJW1ZdPSEwLEwucHVzaChTKSwkPSEwKX1pZighJClicmVhaztUPU99cmV0dXJuIHRoaXMuc3Bhd24oTCwhMCkuZmlsdGVyKHgpfX07ZzEuY2xlYXJUcmF2ZXJzYWxDYWNoZT1mdW5jdGlvbigpe2Zvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGg7eSsrKXRoaXNbeV0uX3ByaXZhdGUudHJhdmVyc2FsQ2FjaGU9bnVsbH0sZm4oZzEse3Jvb3RzOndCKHtub0luY29taW5nRWRnZXM6ITB9KSxsZWF2ZXM6d0Ioe25vT3V0Z29pbmdFZGdlczohMH0pLG91dGdvZXJzOmlkKG1CKHtvdXRnb2luZzohMH0pLCJvdXRnb2VycyIpLHN1Y2Nlc3NvcnM6eUIoe291dGdvaW5nOiEwfSksaW5jb21lcnM6aWQobUIoe2luY29taW5nOiEwfSksImluY29tZXJzIikscHJlZGVjZXNzb3JzOnlCKHtpbmNvbWluZzohMH0pfSksZm4oZzEse25laWdoYm9yaG9vZDppZChmdW5jdGlvbih5KXtmb3IodmFyIGc9W10seD10aGlzLm5vZGVzKCksVD0wO1Q8eC5sZW5ndGg7VCsrKWZvcih2YXIgTD14W1RdLEk9TC5jb25uZWN0ZWRFZGdlcygpLE89MDtPPEkubGVuZ3RoO08rKyl7dmFyICQ9SVtPXSx6PSQuc291cmNlKCksUz0kLnRhcmdldCgpLFY9TD09PXo/Uzp6O1YubGVuZ3RoPjAmJmcucHVzaChWWzBdKSxnLnB1c2goJFswXSl9cmV0dXJuIHRoaXMuc3Bhd24oZywhMCkuZmlsdGVyKHkpfSwibmVpZ2hib3Job29kIiksY2xvc2VkTmVpZ2hib3Job29kOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLm5laWdoYm9yaG9vZCgpLmFkZCh0aGlzKS5maWx0ZXIoZyl9LG9wZW5OZWlnaGJvcmhvb2Q6ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubmVpZ2hib3Job29kKGcpfX0pLGcxLm5laWdoYm91cmhvb2Q9ZzEubmVpZ2hib3Job29kLGcxLmNsb3NlZE5laWdoYm91cmhvb2Q9ZzEuY2xvc2VkTmVpZ2hib3Job29kLGcxLm9wZW5OZWlnaGJvdXJob29kPWcxLm9wZW5OZWlnaGJvcmhvb2QsZm4oZzEse3NvdXJjZTppZChmdW5jdGlvbihnKXt2YXIgeD10aGlzWzBdLFQ7cmV0dXJuIHgmJihUPXguX3ByaXZhdGUuc291cmNlfHx4LmN5KCkuY29sbGVjdGlvbigpKSxUJiZnP1QuZmlsdGVyKGcpOlR9LCJzb3VyY2UiKSx0YXJnZXQ6aWQoZnVuY3Rpb24oZyl7dmFyIHg9dGhpc1swXSxUO3JldHVybiB4JiYoVD14Ll9wcml2YXRlLnRhcmdldHx8eC5jeSgpLmNvbGxlY3Rpb24oKSksVCYmZz9ULmZpbHRlcihnKTpUfSwidGFyZ2V0Iiksc291cmNlczp4Qih7YXR0cjoic291cmNlIn0pLHRhcmdldHM6eEIoe2F0dHI6InRhcmdldCJ9KX0pO2Z1bmN0aW9uIHhCKHkpe3JldHVybiBmdW5jdGlvbih4KXtmb3IodmFyIFQ9W10sTD0wO0w8dGhpcy5sZW5ndGg7TCsrKXt2YXIgST10aGlzW0xdLE89SS5fcHJpdmF0ZVt5LmF0dHJdO08mJlQucHVzaChPKX1yZXR1cm4gdGhpcy5zcGF3bihULCEwKS5maWx0ZXIoeCl9fWZuKGcxLHtlZGdlc1dpdGg6aWQoa0IoKSwiZWRnZXNXaXRoIiksZWRnZXNUbzppZChrQih7dGhpc0lzU3JjOiEwfSksImVkZ2VzVG8iKX0pO2Z1bmN0aW9uIGtCKHkpe3JldHVybiBmdW5jdGlvbih4KXt2YXIgVD1bXSxMPXRoaXMuX3ByaXZhdGUuY3ksST15fHx7fTtUdCh4KSYmKHg9TC4kKHgpKTtmb3IodmFyIE89MDtPPHgubGVuZ3RoO08rKylmb3IodmFyICQ9eFtPXS5fcHJpdmF0ZS5lZGdlcyx6PTA7ejwkLmxlbmd0aDt6Kyspe3ZhciBTPSRbel0sVj1TLl9wcml2YXRlLmRhdGEsVT10aGlzLmhhc0VsZW1lbnRXaXRoSWQoVi5zb3VyY2UpJiZ4Lmhhc0VsZW1lbnRXaXRoSWQoVi50YXJnZXQpLGV0PXguaGFzRWxlbWVudFdpdGhJZChWLnNvdXJjZSkmJnRoaXMuaGFzRWxlbWVudFdpdGhJZChWLnRhcmdldCksYXQ9VXx8ZXQ7YXQmJigoSS50aGlzSXNTcmN8fEkudGhpc0lzVGd0KSYmKEkudGhpc0lzU3JjJiYhVXx8SS50aGlzSXNUZ3QmJiFldCl8fFQucHVzaChTKSl9cmV0dXJuIHRoaXMuc3Bhd24oVCwhMCl9fWZuKGcxLHtjb25uZWN0ZWRFZGdlczppZChmdW5jdGlvbih5KXtmb3IodmFyIGc9W10seD10aGlzLFQ9MDtUPHgubGVuZ3RoO1QrKyl7dmFyIEw9eFtUXTtpZihMLmlzTm9kZSgpKWZvcih2YXIgST1MLl9wcml2YXRlLmVkZ2VzLE89MDtPPEkubGVuZ3RoO08rKyl7dmFyICQ9SVtPXTtnLnB1c2goJCl9fXJldHVybiB0aGlzLnNwYXduKGcsITApLmZpbHRlcih5KX0sImNvbm5lY3RlZEVkZ2VzIiksY29ubmVjdGVkTm9kZXM6aWQoZnVuY3Rpb24oeSl7Zm9yKHZhciBnPVtdLHg9dGhpcyxUPTA7VDx4Lmxlbmd0aDtUKyspe3ZhciBMPXhbVF07TC5pc0VkZ2UoKSYmKGcucHVzaChMLnNvdXJjZSgpWzBdKSxnLnB1c2goTC50YXJnZXQoKVswXSkpfXJldHVybiB0aGlzLnNwYXduKGcsITApLmZpbHRlcih5KX0sImNvbm5lY3RlZE5vZGVzIikscGFyYWxsZWxFZGdlczppZChFQigpLCJwYXJhbGxlbEVkZ2VzIiksY29kaXJlY3RlZEVkZ2VzOmlkKEVCKHtjb2RpcmVjdGVkOiEwfSksImNvZGlyZWN0ZWRFZGdlcyIpfSk7ZnVuY3Rpb24gRUIoeSl7dmFyIGc9e2NvZGlyZWN0ZWQ6ITF9O3JldHVybiB5PWZuKHt9LGcseSksZnVuY3Rpb24oVCl7Zm9yKHZhciBMPVtdLEk9dGhpcy5lZGdlcygpLE89eSwkPTA7JDxJLmxlbmd0aDskKyspZm9yKHZhciB6PUlbJF0sUz16Ll9wcml2YXRlLFY9Uy5zb3VyY2UsVT1WLl9wcml2YXRlLmRhdGEuaWQsZXQ9Uy5kYXRhLnRhcmdldCxhdD1WLl9wcml2YXRlLmVkZ2VzLGx0PTA7bHQ8YXQubGVuZ3RoO2x0Kyspe3ZhciBndD1hdFtsdF0sTHQ9Z3QuX3ByaXZhdGUuZGF0YSxFdD1MdC50YXJnZXQsRHQ9THQuc291cmNlLEl0PUV0PT09ZXQmJkR0PT09VSx6dD1VPT09RXQmJmV0PT09RHQ7KE8uY29kaXJlY3RlZCYmSXR8fCFPLmNvZGlyZWN0ZWQmJihJdHx8enQpKSYmTC5wdXNoKGd0KX1yZXR1cm4gdGhpcy5zcGF3bihMLCEwKS5maWx0ZXIoVCl9fWZuKGcxLHtjb21wb25lbnRzOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMsVD14LmN5KCksTD1ULmNvbGxlY3Rpb24oKSxJPWc9PW51bGw/eC5ub2RlcygpOmcubm9kZXMoKSxPPVtdO2chPW51bGwmJkkuZW1wdHkoKSYmKEk9Zy5zb3VyY2VzKCkpO3ZhciAkPWZ1bmN0aW9uKFYsVSl7TC5tZXJnZShWKSxJLnVubWVyZ2UoViksVS5tZXJnZShWKX07aWYoSS5lbXB0eSgpKXJldHVybiB4LnNwYXduKCk7dmFyIHo9ZnVuY3Rpb24oKXt2YXIgVj1ULmNvbGxlY3Rpb24oKTtPLnB1c2goVik7dmFyIFU9SVswXTskKFUsVikseC5iZnMoe2RpcmVjdGVkOiExLHJvb3RzOlUsdmlzaXQ6ZnVuY3Rpb24oYXQpe3JldHVybiAkKGF0LFYpfX0pLFYuZm9yRWFjaChmdW5jdGlvbihldCl7ZXQuY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGF0KXt4LmhhcyhhdCkmJlYuaGFzKGF0LnNvdXJjZSgpKSYmVi5oYXMoYXQudGFyZ2V0KCkpJiZWLm1lcmdlKGF0KX0pfSl9O2RvIHooKTt3aGlsZShJLmxlbmd0aD4wKTtyZXR1cm4gT30sY29tcG9uZW50OmZ1bmN0aW9uKCl7dmFyIGc9dGhpc1swXTtyZXR1cm4gZy5jeSgpLm11dGFibGVFbGVtZW50cygpLmNvbXBvbmVudHMoZylbMF19fSksZzEuY29tcG9uZW50c09mPWcxLmNvbXBvbmVudHM7dmFyIEhmPWZ1bmN0aW9uKGcseCl7dmFyIFQ9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiExLEw9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiExO2lmKGc9PT12b2lkIDApe291KCJBIGNvbGxlY3Rpb24gbXVzdCBoYXZlIGEgcmVmZXJlbmNlIHRvIHRoZSBjb3JlIik7cmV0dXJufXZhciBJPW5ldyBIYixPPSExO2lmKCF4KXg9W107ZWxzZSBpZih4Lmxlbmd0aD4wJiZjdCh4WzBdKSYmIUN0KHhbMF0pKXtPPSEwO2Zvcih2YXIgJD1bXSx6PW5ldyAkNSxTPTAsVj14Lmxlbmd0aDtTPFY7UysrKXt2YXIgVT14W1NdO1UuZGF0YT09bnVsbCYmKFUuZGF0YT17fSk7dmFyIGV0PVUuZGF0YTtpZihldC5pZD09bnVsbClldC5pZD1EOSgpO2Vsc2UgaWYoZy5oYXNFbGVtZW50V2l0aElkKGV0LmlkKXx8ei5oYXMoZXQuaWQpKWNvbnRpbnVlO3ZhciBhdD1uZXcgSTkoZyxVLCExKTskLnB1c2goYXQpLHouYWRkKGV0LmlkKX14PSR9dGhpcy5sZW5ndGg9MDtmb3IodmFyIGx0PTAsZ3Q9eC5sZW5ndGg7bHQ8Z3Q7bHQrKyl7dmFyIEx0PXhbbHRdWzBdO2lmKEx0IT1udWxsKXt2YXIgRXQ9THQuX3ByaXZhdGUuZGF0YS5pZDsoIVR8fCFJLmhhcyhFdCkpJiYoVCYmSS5zZXQoRXQse2luZGV4OnRoaXMubGVuZ3RoLGVsZTpMdH0pLHRoaXNbdGhpcy5sZW5ndGhdPUx0LHRoaXMubGVuZ3RoKyspfX10aGlzLl9wcml2YXRlPXtlbGVzOnRoaXMsY3k6ZyxnZXQgbWFwKCl7cmV0dXJuIHRoaXMubGF6eU1hcD09bnVsbCYmdGhpcy5yZWJ1aWxkTWFwKCksdGhpcy5sYXp5TWFwfSxzZXQgbWFwKER0KXt0aGlzLmxhenlNYXA9RHR9LHJlYnVpbGRNYXA6ZnVuY3Rpb24oKXtmb3IodmFyIEl0PXRoaXMubGF6eU1hcD1uZXcgSGIsenQ9dGhpcy5lbGVzLHRlPTA7dGU8enQubGVuZ3RoO3RlKyspe3ZhciBYdD16dFt0ZV07SXQuc2V0KFh0LmlkKCkse2luZGV4OnRlLGVsZTpYdH0pfX19LFQmJih0aGlzLl9wcml2YXRlLm1hcD1JKSxPJiYhTCYmdGhpcy5yZXN0b3JlKCl9LHZ1PUk5LnByb3RvdHlwZT1IZi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShBcnJheS5wcm90b3R5cGUpO3Z1Lmluc3RhbmNlU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuImNvbGxlY3Rpb24ifSx2dS5zcGF3bj1mdW5jdGlvbih5LGcpe3JldHVybiBuZXcgSGYodGhpcy5jeSgpLHksZyl9LHZ1LnNwYXduU2VsZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNwYXduKHRoaXMpfSx2dS5jeT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmN5fSx2dS5yZW5kZXJlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmN5LnJlbmRlcmVyKCl9LHZ1LmVsZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1swXX0sdnUuY29sbGVjdGlvbj1mdW5jdGlvbigpe3JldHVybiB0dCh0aGlzKT90aGlzOm5ldyBIZih0aGlzLl9wcml2YXRlLmN5LFt0aGlzXSl9LHZ1LnVuaXF1ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgSGYodGhpcy5fcHJpdmF0ZS5jeSx0aGlzLCEwKX0sdnUuaGFzRWxlbWVudFdpdGhJZD1mdW5jdGlvbih5KXtyZXR1cm4geT0iIit5LHRoaXMuX3ByaXZhdGUubWFwLmhhcyh5KX0sdnUuZ2V0RWxlbWVudEJ5SWQ9ZnVuY3Rpb24oeSl7eT0iIit5O3ZhciBnPXRoaXMuX3ByaXZhdGUuY3kseD10aGlzLl9wcml2YXRlLm1hcC5nZXQoeSk7cmV0dXJuIHg/eC5lbGU6bmV3IEhmKGcpfSx2dS4kaWQ9dnUuZ2V0RWxlbWVudEJ5SWQsdnUucG9vbEluZGV4PWZ1bmN0aW9uKCl7dmFyIHk9dGhpcy5fcHJpdmF0ZS5jeSxnPXkuX3ByaXZhdGUuZWxlbWVudHMseD10aGlzWzBdLl9wcml2YXRlLmRhdGEuaWQ7cmV0dXJuIGcuX3ByaXZhdGUubWFwLmdldCh4KS5pbmRleH0sdnUuaW5kZXhPZj1mdW5jdGlvbih5KXt2YXIgZz15WzBdLl9wcml2YXRlLmRhdGEuaWQ7cmV0dXJuIHRoaXMuX3ByaXZhdGUubWFwLmdldChnKS5pbmRleH0sdnUuaW5kZXhPZklkPWZ1bmN0aW9uKHkpe3JldHVybiB5PSIiK3ksdGhpcy5fcHJpdmF0ZS5tYXAuZ2V0KHkpLmluZGV4fSx2dS5qc29uPWZ1bmN0aW9uKHkpe3ZhciBnPXRoaXMuZWxlbWVudCgpLHg9dGhpcy5jeSgpO2lmKGc9PW51bGwmJnkpcmV0dXJuIHRoaXM7aWYoZyE9bnVsbCl7dmFyIFQ9Zy5fcHJpdmF0ZTtpZihjdCh5KSl7aWYoeC5zdGFydEJhdGNoKCkseS5kYXRhKXtnLmRhdGEoeS5kYXRhKTt2YXIgTD1ULmRhdGE7aWYoZy5pc0VkZ2UoKSl7dmFyIEk9ITEsTz17fSwkPXkuZGF0YS5zb3VyY2Usej15LmRhdGEudGFyZ2V0OyQhPW51bGwmJiQhPUwuc291cmNlJiYoTy5zb3VyY2U9IiIrJCxJPSEwKSx6IT1udWxsJiZ6IT1MLnRhcmdldCYmKE8udGFyZ2V0PSIiK3osST0hMCksSSYmKGc9Zy5tb3ZlKE8pKX1lbHNle3ZhciBTPSJwYXJlbnQiaW4geS5kYXRhLFY9eS5kYXRhLnBhcmVudDtTJiYoViE9bnVsbHx8TC5wYXJlbnQhPW51bGwpJiZWIT1MLnBhcmVudCYmKFY9PT12b2lkIDAmJihWPW51bGwpLFYhPW51bGwmJihWPSIiK1YpLGc9Zy5tb3ZlKHtwYXJlbnQ6Vn0pKX19eS5wb3NpdGlvbiYmZy5wb3NpdGlvbih5LnBvc2l0aW9uKTt2YXIgVT1mdW5jdGlvbihndCxMdCxFdCl7dmFyIER0PXlbZ3RdO0R0IT1udWxsJiZEdCE9PVRbZ3RdJiYoRHQ/Z1tMdF0oKTpnW0V0XSgpKX07cmV0dXJuIFUoInJlbW92ZWQiLCJyZW1vdmUiLCJyZXN0b3JlIiksVSgic2VsZWN0ZWQiLCJzZWxlY3QiLCJ1bnNlbGVjdCIpLFUoInNlbGVjdGFibGUiLCJzZWxlY3RpZnkiLCJ1bnNlbGVjdGlmeSIpLFUoImxvY2tlZCIsImxvY2siLCJ1bmxvY2siKSxVKCJncmFiYmFibGUiLCJncmFiaWZ5IiwidW5ncmFiaWZ5IiksVSgicGFubmFibGUiLCJwYW5pZnkiLCJ1bnBhbmlmeSIpLHkuY2xhc3NlcyE9bnVsbCYmZy5jbGFzc2VzKHkuY2xhc3NlcykseC5lbmRCYXRjaCgpLHRoaXN9ZWxzZSBpZih5PT09dm9pZCAwKXt2YXIgZXQ9e2RhdGE6cWIoVC5kYXRhKSxwb3NpdGlvbjpxYihULnBvc2l0aW9uKSxncm91cDpULmdyb3VwLHJlbW92ZWQ6VC5yZW1vdmVkLHNlbGVjdGVkOlQuc2VsZWN0ZWQsc2VsZWN0YWJsZTpULnNlbGVjdGFibGUsbG9ja2VkOlQubG9ja2VkLGdyYWJiYWJsZTpULmdyYWJiYWJsZSxwYW5uYWJsZTpULnBhbm5hYmxlLGNsYXNzZXM6bnVsbH07ZXQuY2xhc3Nlcz0iIjt2YXIgYXQ9MDtyZXR1cm4gVC5jbGFzc2VzLmZvckVhY2goZnVuY3Rpb24obHQpe3JldHVybiBldC5jbGFzc2VzKz1hdCsrPT09MD9sdDoiICIrbHR9KSxldH19fSx2dS5qc29ucz1mdW5jdGlvbigpe2Zvcih2YXIgeT1bXSxnPTA7Zzx0aGlzLmxlbmd0aDtnKyspe3ZhciB4PXRoaXNbZ10sVD14Lmpzb24oKTt5LnB1c2goVCl9cmV0dXJuIHl9LHZ1LmNsb25lPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PXRoaXMuY3koKSxnPVtdLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIFQ9dGhpc1t4XSxMPVQuanNvbigpLEk9bmV3IEk5KHksTCwhMSk7Zy5wdXNoKEkpfXJldHVybiBuZXcgSGYoeSxnKX0sdnUuY29weT12dS5jbG9uZSx2dS5yZXN0b3JlPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMCxnPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMCx4PXRoaXMsVD14LmN5KCksTD1ULl9wcml2YXRlLEk9W10sTz1bXSwkLHo9MCxTPXgubGVuZ3RoO3o8Uzt6Kyspe3ZhciBWPXhbel07ZyYmIVYucmVtb3ZlZCgpfHwoVi5pc05vZGUoKT9JLnB1c2goVik6Ty5wdXNoKFYpKX0kPUkuY29uY2F0KE8pO3ZhciBVLGV0PWZ1bmN0aW9uKCl7JC5zcGxpY2UoVSwxKSxVLS19O2ZvcihVPTA7VTwkLmxlbmd0aDtVKyspe3ZhciBhdD0kW1VdLGx0PWF0Ll9wcml2YXRlLGd0PWx0LmRhdGE7aWYoYXQuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpLCEoIWcmJiFsdC5yZW1vdmVkKSl7aWYoZ3QuaWQ9PT12b2lkIDApZ3QuaWQ9RDkoKTtlbHNlIGlmKHN0KGd0LmlkKSlndC5pZD0iIitndC5pZDtlbHNlIGlmKFgoZ3QuaWQpfHwhVHQoZ3QuaWQpKXtvdSgiQ2FuIG5vdCBjcmVhdGUgZWxlbWVudCB3aXRoIGludmFsaWQgc3RyaW5nIElEIGAiK2d0LmlkKyJgIiksZXQoKTtjb250aW51ZX1lbHNlIGlmKFQuaGFzRWxlbWVudFdpdGhJZChndC5pZCkpe291KCJDYW4gbm90IGNyZWF0ZSBzZWNvbmQgZWxlbWVudCB3aXRoIElEIGAiK2d0LmlkKyJgIiksZXQoKTtjb250aW51ZX19dmFyIEx0PWd0LmlkO2lmKGF0LmlzTm9kZSgpKXt2YXIgRXQ9bHQucG9zaXRpb247RXQueD09bnVsbCYmKEV0Lng9MCksRXQueT09bnVsbCYmKEV0Lnk9MCl9aWYoYXQuaXNFZGdlKCkpe2Zvcih2YXIgRHQ9YXQsSXQ9WyJzb3VyY2UiLCJ0YXJnZXQiXSx6dD1JdC5sZW5ndGgsdGU9ITEsWHQ9MDtYdDx6dDtYdCsrKXt2YXIgSHQ9SXRbWHRdLGllPWd0W0h0XTtzdChpZSkmJihpZT1ndFtIdF09IiIrZ3RbSHRdKSxpZT09bnVsbHx8aWU9PT0iIj8ob3UoIkNhbiBub3QgY3JlYXRlIGVkZ2UgYCIrTHQrImAgd2l0aCB1bnNwZWNpZmllZCAiK0h0KSx0ZT0hMCk6VC5oYXNFbGVtZW50V2l0aElkKGllKXx8KG91KCJDYW4gbm90IGNyZWF0ZSBlZGdlIGAiK0x0KyJgIHdpdGggbm9uZXhpc3RhbnQgIitIdCsiIGAiK2llKyJgIiksdGU9ITApfWlmKHRlKXtldCgpO2NvbnRpbnVlfXZhciBVdD1ULmdldEVsZW1lbnRCeUlkKGd0LnNvdXJjZSksZmU9VC5nZXRFbGVtZW50QnlJZChndC50YXJnZXQpO1V0LnNhbWUoZmUpP1V0Ll9wcml2YXRlLmVkZ2VzLnB1c2goRHQpOihVdC5fcHJpdmF0ZS5lZGdlcy5wdXNoKER0KSxmZS5fcHJpdmF0ZS5lZGdlcy5wdXNoKER0KSksRHQuX3ByaXZhdGUuc291cmNlPVV0LER0Ll9wcml2YXRlLnRhcmdldD1mZX1sdC5tYXA9bmV3IEhiLGx0Lm1hcC5zZXQoTHQse2VsZTphdCxpbmRleDowfSksbHQucmVtb3ZlZD0hMSxnJiZULmFkZFRvUG9vbChhdCl9Zm9yKHZhciBnZT0wO2dlPEkubGVuZ3RoO2dlKyspe3ZhciBzZT1JW2dlXSxOZT1zZS5fcHJpdmF0ZS5kYXRhO3N0KE5lLnBhcmVudCkmJihOZS5wYXJlbnQ9IiIrTmUucGFyZW50KTt2YXIgcGU9TmUucGFyZW50LGduPXBlIT1udWxsO2lmKGdufHxzZS5fcHJpdmF0ZS5wYXJlbnQpe3ZhciBqZT1zZS5fcHJpdmF0ZS5wYXJlbnQ/VC5jb2xsZWN0aW9uKCkubWVyZ2Uoc2UuX3ByaXZhdGUucGFyZW50KTpULmdldEVsZW1lbnRCeUlkKHBlKTtpZihqZS5lbXB0eSgpKU5lLnBhcmVudD12b2lkIDA7ZWxzZSBpZihqZVswXS5yZW1vdmVkKCkpbm8oIk5vZGUgYWRkZWQgd2l0aCBtaXNzaW5nIHBhcmVudCwgcmVmZXJlbmNlIHRvIHBhcmVudCByZW1vdmVkIiksTmUucGFyZW50PXZvaWQgMCxzZS5fcHJpdmF0ZS5wYXJlbnQ9bnVsbDtlbHNle2Zvcih2YXIgR2U9ITEseG49amU7IXhuLmVtcHR5KCk7KXtpZihzZS5zYW1lKHhuKSl7R2U9ITAsTmUucGFyZW50PXZvaWQgMDticmVha314bj14bi5wYXJlbnQoKX1HZXx8KGplWzBdLl9wcml2YXRlLmNoaWxkcmVuLnB1c2goc2UpLHNlLl9wcml2YXRlLnBhcmVudD1qZVswXSxMLmhhc0NvbXBvdW5kTm9kZXM9ITApfX19aWYoJC5sZW5ndGg+MCl7Zm9yKHZhciBEbj0kLmxlbmd0aD09PXgubGVuZ3RoP3g6bmV3IEhmKFQsJCksWG49MDtYbjxEbi5sZW5ndGg7WG4rKyl7dmFyIENuPURuW1huXTtDbi5pc05vZGUoKXx8KENuLnBhcmFsbGVsRWRnZXMoKS5jbGVhclRyYXZlcnNhbENhY2hlKCksQ24uc291cmNlKCkuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpLENuLnRhcmdldCgpLmNsZWFyVHJhdmVyc2FsQ2FjaGUoKSl9dmFyIFluO0wuaGFzQ29tcG91bmROb2Rlcz9Zbj1ULmNvbGxlY3Rpb24oKS5tZXJnZShEbikubWVyZ2UoRG4uY29ubmVjdGVkTm9kZXMoKSkubWVyZ2UoRG4ucGFyZW50KCkpOlluPURuLFluLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpLnVwZGF0ZVN0eWxlKHkpLHk/RG4uZW1pdEFuZE5vdGlmeSgiYWRkIik6ZyYmRG4uZW1pdCgiYWRkIil9cmV0dXJuIHh9LHZ1LnJlbW92ZWQ9ZnVuY3Rpb24oKXt2YXIgeT10aGlzWzBdO3JldHVybiB5JiZ5Ll9wcml2YXRlLnJlbW92ZWR9LHZ1Lmluc2lkZT1mdW5jdGlvbigpe3ZhciB5PXRoaXNbMF07cmV0dXJuIHkmJiF5Ll9wcml2YXRlLnJlbW92ZWR9LHZ1LnJlbW92ZT1mdW5jdGlvbigpe3ZhciB5PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMCxnPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMCx4PXRoaXMsVD1bXSxMPXt9LEk9eC5fcHJpdmF0ZS5jeTtmdW5jdGlvbiBPKHBlKXtmb3IodmFyIGduPXBlLl9wcml2YXRlLmVkZ2VzLGplPTA7amU8Z24ubGVuZ3RoO2plKyspeihnbltqZV0pfWZ1bmN0aW9uICQocGUpe2Zvcih2YXIgZ249cGUuX3ByaXZhdGUuY2hpbGRyZW4samU9MDtqZTxnbi5sZW5ndGg7amUrKyl6KGduW2plXSl9ZnVuY3Rpb24geihwZSl7dmFyIGduPUxbcGUuaWQoKV07ZyYmcGUucmVtb3ZlZCgpfHxnbnx8KExbcGUuaWQoKV09ITAscGUuaXNOb2RlKCk/KFQucHVzaChwZSksTyhwZSksJChwZSkpOlQudW5zaGlmdChwZSkpfWZvcih2YXIgUz0wLFY9eC5sZW5ndGg7UzxWO1MrKyl7dmFyIFU9eFtTXTt6KFUpfWZ1bmN0aW9uIGV0KHBlLGduKXt2YXIgamU9cGUuX3ByaXZhdGUuZWRnZXM7cG0oamUsZ24pLHBlLmNsZWFyVHJhdmVyc2FsQ2FjaGUoKX1mdW5jdGlvbiBhdChwZSl7cGUuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpfXZhciBsdD1bXTtsdC5pZHM9e307ZnVuY3Rpb24gZ3QocGUsZ24pe2duPWduWzBdLHBlPXBlWzBdO3ZhciBqZT1wZS5fcHJpdmF0ZS5jaGlsZHJlbixHZT1wZS5pZCgpO3BtKGplLGduKSxnbi5fcHJpdmF0ZS5wYXJlbnQ9bnVsbCxsdC5pZHNbR2VdfHwobHQuaWRzW0dlXT0hMCxsdC5wdXNoKHBlKSl9eC5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKSxnJiZJLnJlbW92ZUZyb21Qb29sKFQpO2Zvcih2YXIgTHQ9MDtMdDxULmxlbmd0aDtMdCsrKXt2YXIgRXQ9VFtMdF07aWYoRXQuaXNFZGdlKCkpe3ZhciBEdD1FdC5zb3VyY2UoKVswXSxJdD1FdC50YXJnZXQoKVswXTtldChEdCxFdCksZXQoSXQsRXQpO2Zvcih2YXIgenQ9RXQucGFyYWxsZWxFZGdlcygpLHRlPTA7dGU8enQubGVuZ3RoO3RlKyspe3ZhciBYdD16dFt0ZV07YXQoWHQpLFh0LmlzQnVuZGxlZEJlemllcigpJiZYdC5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKX19ZWxzZXt2YXIgSHQ9RXQucGFyZW50KCk7SHQubGVuZ3RoIT09MCYmZ3QoSHQsRXQpfWcmJihFdC5fcHJpdmF0ZS5yZW1vdmVkPSEwKX12YXIgaWU9SS5fcHJpdmF0ZS5lbGVtZW50cztJLl9wcml2YXRlLmhhc0NvbXBvdW5kTm9kZXM9ITE7Zm9yKHZhciBVdD0wO1V0PGllLmxlbmd0aDtVdCsrKXt2YXIgZmU9aWVbVXRdO2lmKGZlLmlzUGFyZW50KCkpe0kuX3ByaXZhdGUuaGFzQ29tcG91bmROb2Rlcz0hMDticmVha319dmFyIGdlPW5ldyBIZih0aGlzLmN5KCksVCk7Z2Uuc2l6ZSgpPjAmJih5P2dlLmVtaXRBbmROb3RpZnkoInJlbW92ZSIpOmcmJmdlLmVtaXQoInJlbW92ZSIpKTtmb3IodmFyIHNlPTA7c2U8bHQubGVuZ3RoO3NlKyspe3ZhciBOZT1sdFtzZV07KCFnfHwhTmUucmVtb3ZlZCgpKSYmTmUudXBkYXRlU3R5bGUoKX1yZXR1cm4gZ2V9LHZ1Lm1vdmU9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcy5fcHJpdmF0ZS5jeSx4PXRoaXMsVD0hMSxMPSExLEk9ZnVuY3Rpb24obHQpe3JldHVybiBsdD09bnVsbD9sdDoiIitsdH07aWYoeS5zb3VyY2UhPT12b2lkIDB8fHkudGFyZ2V0IT09dm9pZCAwKXt2YXIgTz1JKHkuc291cmNlKSwkPUkoeS50YXJnZXQpLHo9TyE9bnVsbCYmZy5oYXNFbGVtZW50V2l0aElkKE8pLFM9JCE9bnVsbCYmZy5oYXNFbGVtZW50V2l0aElkKCQpOyh6fHxTKSYmKGcuYmF0Y2goZnVuY3Rpb24oKXt4LnJlbW92ZShULEwpLHguZW1pdEFuZE5vdGlmeSgibW92ZW91dCIpO2Zvcih2YXIgYXQ9MDthdDx4Lmxlbmd0aDthdCsrKXt2YXIgbHQ9eFthdF0sZ3Q9bHQuX3ByaXZhdGUuZGF0YTtsdC5pc0VkZ2UoKSYmKHomJihndC5zb3VyY2U9TyksUyYmKGd0LnRhcmdldD0kKSl9eC5yZXN0b3JlKFQsTCl9KSx4LmVtaXRBbmROb3RpZnkoIm1vdmUiKSl9ZWxzZSBpZih5LnBhcmVudCE9PXZvaWQgMCl7dmFyIFY9SSh5LnBhcmVudCksVT1WPT09bnVsbHx8Zy5oYXNFbGVtZW50V2l0aElkKFYpO2lmKFUpe3ZhciBldD1WPT09bnVsbD92b2lkIDA6VjtnLmJhdGNoKGZ1bmN0aW9uKCl7dmFyIGF0PXgucmVtb3ZlKFQsTCk7YXQuZW1pdEFuZE5vdGlmeSgibW92ZW91dCIpO2Zvcih2YXIgbHQ9MDtsdDx4Lmxlbmd0aDtsdCsrKXt2YXIgZ3Q9eFtsdF0sTHQ9Z3QuX3ByaXZhdGUuZGF0YTtndC5pc05vZGUoKSYmKEx0LnBhcmVudD1ldCl9YXQucmVzdG9yZShULEwpfSkseC5lbWl0QW5kTm90aWZ5KCJtb3ZlIil9fXJldHVybiB0aGlzfSxbRUYsSVosSzksbXAsWjUsS1osWDksb0osZEIsZ0IsZkosZVQsblQscWYsRW0sZzFdLmZvckVhY2goZnVuY3Rpb24oeSl7Zm4odnUseSl9KTt2YXIgbUo9e2FkZDpmdW5jdGlvbihnKXt2YXIgeCxUPXRoaXM7aWYoZHQoZykpe3ZhciBMPWc7aWYoTC5fcHJpdmF0ZS5jeT09PVQpeD1MLnJlc3RvcmUoKTtlbHNle2Zvcih2YXIgST1bXSxPPTA7TzxMLmxlbmd0aDtPKyspe3ZhciAkPUxbT107SS5wdXNoKCQuanNvbigpKX14PW5ldyBIZihULEkpfX1lbHNlIGlmKG10KGcpKXt2YXIgej1nO3g9bmV3IEhmKFQseil9ZWxzZSBpZihjdChnKSYmKG10KGcubm9kZXMpfHxtdChnLmVkZ2VzKSkpe2Zvcih2YXIgUz1nLFY9W10sVT1bIm5vZGVzIiwiZWRnZXMiXSxldD0wLGF0PVUubGVuZ3RoO2V0PGF0O2V0Kyspe3ZhciBsdD1VW2V0XSxndD1TW2x0XTtpZihtdChndCkpZm9yKHZhciBMdD0wLEV0PWd0Lmxlbmd0aDtMdDxFdDtMdCsrKXt2YXIgRHQ9Zm4oe2dyb3VwOmx0fSxndFtMdF0pO1YucHVzaChEdCl9fXg9bmV3IEhmKFQsVil9ZWxzZXt2YXIgSXQ9Zzt4PW5ldyBJOShULEl0KS5jb2xsZWN0aW9uKCl9cmV0dXJuIHh9LHJlbW92ZTpmdW5jdGlvbihnKXtpZighZHQoZykpe2lmKFR0KGcpKXt2YXIgeD1nO2c9dGhpcy4kKHgpfX1yZXR1cm4gZy5yZW1vdmUoKX19Oy8qISBCZXppZXIgY3VydmUgZnVuY3Rpb24gZ2VuZXJhdG9yLiBDb3B5cmlnaHQgR2FldGFuIFJlbmF1ZGVhdS4gTUlUIExpY2Vuc2U6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTUlUX0xpY2Vuc2UgKi9mdW5jdGlvbiB5Sih5LGcseCxUKXt2YXIgTD00LEk9LjAwMSxPPTFlLTcsJD0xMCx6PTExLFM9MS8oei0xKSxWPXR5cGVvZiBGbG9hdDMyQXJyYXk8InUiO2lmKGFyZ3VtZW50cy5sZW5ndGghPT00KXJldHVybiExO2Zvcih2YXIgVT0wO1U8NDsrK1UpaWYodHlwZW9mIGFyZ3VtZW50c1tVXSE9Im51bWJlciJ8fGlzTmFOKGFyZ3VtZW50c1tVXSl8fCFpc0Zpbml0ZShhcmd1bWVudHNbVV0pKXJldHVybiExO3k9TWF0aC5taW4oeSwxKSx4PU1hdGgubWluKHgsMSkseT1NYXRoLm1heCh5LDApLHg9TWF0aC5tYXgoeCwwKTt2YXIgZXQ9Vj9uZXcgRmxvYXQzMkFycmF5KHopOm5ldyBBcnJheSh6KTtmdW5jdGlvbiBhdChmZSxnZSl7cmV0dXJuIDEtMypnZSszKmZlfWZ1bmN0aW9uIGx0KGZlLGdlKXtyZXR1cm4gMypnZS02KmZlfWZ1bmN0aW9uIGd0KGZlKXtyZXR1cm4gMypmZX1mdW5jdGlvbiBMdChmZSxnZSxzZSl7cmV0dXJuKChhdChnZSxzZSkqZmUrbHQoZ2Usc2UpKSpmZStndChnZSkpKmZlfWZ1bmN0aW9uIEV0KGZlLGdlLHNlKXtyZXR1cm4gMyphdChnZSxzZSkqZmUqZmUrMipsdChnZSxzZSkqZmUrZ3QoZ2UpfWZ1bmN0aW9uIER0KGZlLGdlKXtmb3IodmFyIHNlPTA7c2U8TDsrK3NlKXt2YXIgTmU9RXQoZ2UseSx4KTtpZihOZT09PTApcmV0dXJuIGdlO3ZhciBwZT1MdChnZSx5LHgpLWZlO2dlLT1wZS9OZX1yZXR1cm4gZ2V9ZnVuY3Rpb24gSXQoKXtmb3IodmFyIGZlPTA7ZmU8ejsrK2ZlKWV0W2ZlXT1MdChmZSpTLHkseCl9ZnVuY3Rpb24genQoZmUsZ2Usc2Upe3ZhciBOZSxwZSxnbj0wO2RvIHBlPWdlKyhzZS1nZSkvMixOZT1MdChwZSx5LHgpLWZlLE5lPjA/c2U9cGU6Z2U9cGU7d2hpbGUoTWF0aC5hYnMoTmUpPk8mJisrZ248JCk7cmV0dXJuIHBlfWZ1bmN0aW9uIHRlKGZlKXtmb3IodmFyIGdlPTAsc2U9MSxOZT16LTE7c2UhPT1OZSYmZXRbc2VdPD1mZTsrK3NlKWdlKz1TOy0tc2U7dmFyIHBlPShmZS1ldFtzZV0pLyhldFtzZSsxXS1ldFtzZV0pLGduPWdlK3BlKlMsamU9RXQoZ24seSx4KTtyZXR1cm4gamU+PUk/RHQoZmUsZ24pOmplPT09MD9nbjp6dChmZSxnZSxnZStTKX12YXIgWHQ9ITE7ZnVuY3Rpb24gSHQoKXtYdD0hMCwoeSE9PWd8fHghPT1UKSYmSXQoKX12YXIgaWU9ZnVuY3Rpb24oZ2Upe3JldHVybiBYdHx8SHQoKSx5PT09ZyYmeD09PVQ/Z2U6Z2U9PT0wPzA6Z2U9PT0xPzE6THQodGUoZ2UpLGcsVCl9O2llLmdldENvbnRyb2xQb2ludHM9ZnVuY3Rpb24oKXtyZXR1cm5be3g6eSx5Omd9LHt4LHk6VH1dfTt2YXIgVXQ9ImdlbmVyYXRlQmV6aWVyKCIrW3ksZyx4LFRdKyIpIjtyZXR1cm4gaWUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gVXR9LGllfS8qISBSdW5nZS1LdXR0YSBzcHJpbmcgcGh5c2ljcyBmdW5jdGlvbiBnZW5lcmF0b3IuIEFkYXB0ZWQgZnJvbSBGcmFtZXIuanMsIGNvcHlyaWdodCBLb2VuIEJvay4gTUlUIExpY2Vuc2U6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTUlUX0xpY2Vuc2UgKi92YXIgeEo9ZnVuY3Rpb24oKXtmdW5jdGlvbiB5KFQpe3JldHVybi1ULnRlbnNpb24qVC54LVQuZnJpY3Rpb24qVC52fWZ1bmN0aW9uIGcoVCxMLEkpe3ZhciBPPXt4OlQueCtJLmR4KkwsdjpULnYrSS5kdipMLHRlbnNpb246VC50ZW5zaW9uLGZyaWN0aW9uOlQuZnJpY3Rpb259O3JldHVybntkeDpPLnYsZHY6eShPKX19ZnVuY3Rpb24geChULEwpe3ZhciBJPXtkeDpULnYsZHY6eShUKX0sTz1nKFQsTCouNSxJKSwkPWcoVCxMKi41LE8pLHo9ZyhULEwsJCksUz0xLzYqKEkuZHgrMiooTy5keCskLmR4KSt6LmR4KSxWPTEvNiooSS5kdisyKihPLmR2KyQuZHYpK3ouZHYpO3JldHVybiBULng9VC54K1MqTCxULnY9VC52K1YqTCxUfXJldHVybiBmdW5jdGlvbiBUKEwsSSxPKXt2YXIgJD17eDotMSx2OjAsdGVuc2lvbjpudWxsLGZyaWN0aW9uOm51bGx9LHo9WzBdLFM9MCxWPTEvMWU0LFU9MTYvMWUzLGV0LGF0LGx0O2ZvcihMPXBhcnNlRmxvYXQoTCl8fDUwMCxJPXBhcnNlRmxvYXQoSSl8fDIwLE89T3x8bnVsbCwkLnRlbnNpb249TCwkLmZyaWN0aW9uPUksZXQ9TyE9PW51bGwsZXQ/KFM9VChMLEkpLGF0PVMvTypVKTphdD1VO2x0PXgobHR8fCQsYXQpLHoucHVzaCgxK2x0LngpLFMrPTE2LE1hdGguYWJzKGx0LngpPlYmJk1hdGguYWJzKGx0LnYpPlY7KTtyZXR1cm4gZXQ/ZnVuY3Rpb24oZ3Qpe3JldHVybiB6W2d0Kih6Lmxlbmd0aC0xKXwwXX06U319KCksd3U9ZnVuY3Rpb24oZyx4LFQsTCl7dmFyIEk9eUooZyx4LFQsTCk7cmV0dXJuIGZ1bmN0aW9uKE8sJCx6KXtyZXR1cm4gTysoJC1PKSpJKHopfX0sc1Q9e2xpbmVhcjpmdW5jdGlvbihnLHgsVCl7cmV0dXJuIGcrKHgtZykqVH0sZWFzZTp3dSguMjUsLjEsLjI1LDEpLCJlYXNlLWluIjp3dSguNDIsMCwxLDEpLCJlYXNlLW91dCI6d3UoMCwwLC41OCwxKSwiZWFzZS1pbi1vdXQiOnd1KC40MiwwLC41OCwxKSwiZWFzZS1pbi1zaW5lIjp3dSguNDcsMCwuNzQ1LC43MTUpLCJlYXNlLW91dC1zaW5lIjp3dSguMzksLjU3NSwuNTY1LDEpLCJlYXNlLWluLW91dC1zaW5lIjp3dSguNDQ1LC4wNSwuNTUsLjk1KSwiZWFzZS1pbi1xdWFkIjp3dSguNTUsLjA4NSwuNjgsLjUzKSwiZWFzZS1vdXQtcXVhZCI6d3UoLjI1LC40NiwuNDUsLjk0KSwiZWFzZS1pbi1vdXQtcXVhZCI6d3UoLjQ1NSwuMDMsLjUxNSwuOTU1KSwiZWFzZS1pbi1jdWJpYyI6d3UoLjU1LC4wNTUsLjY3NSwuMTkpLCJlYXNlLW91dC1jdWJpYyI6d3UoLjIxNSwuNjEsLjM1NSwxKSwiZWFzZS1pbi1vdXQtY3ViaWMiOnd1KC42NDUsLjA0NSwuMzU1LDEpLCJlYXNlLWluLXF1YXJ0Ijp3dSguODk1LC4wMywuNjg1LC4yMiksImVhc2Utb3V0LXF1YXJ0Ijp3dSguMTY1LC44NCwuNDQsMSksImVhc2UtaW4tb3V0LXF1YXJ0Ijp3dSguNzcsMCwuMTc1LDEpLCJlYXNlLWluLXF1aW50Ijp3dSguNzU1LC4wNSwuODU1LC4wNiksImVhc2Utb3V0LXF1aW50Ijp3dSguMjMsMSwuMzIsMSksImVhc2UtaW4tb3V0LXF1aW50Ijp3dSguODYsMCwuMDcsMSksImVhc2UtaW4tZXhwbyI6d3UoLjk1LC4wNSwuNzk1LC4wMzUpLCJlYXNlLW91dC1leHBvIjp3dSguMTksMSwuMjIsMSksImVhc2UtaW4tb3V0LWV4cG8iOnd1KDEsMCwwLDEpLCJlYXNlLWluLWNpcmMiOnd1KC42LC4wNCwuOTgsLjMzNSksImVhc2Utb3V0LWNpcmMiOnd1KC4wNzUsLjgyLC4xNjUsMSksImVhc2UtaW4tb3V0LWNpcmMiOnd1KC43ODUsLjEzNSwuMTUsLjg2KSxzcHJpbmc6ZnVuY3Rpb24oZyx4LFQpe2lmKFQ9PT0wKXJldHVybiBzVC5saW5lYXI7dmFyIEw9eEooZyx4LFQpO3JldHVybiBmdW5jdGlvbihJLE8sJCl7cmV0dXJuIEkrKE8tSSkqTCgkKX19LCJjdWJpYy1iZXppZXIiOnd1fTtmdW5jdGlvbiBUQih5LGcseCxULEwpe2lmKFQ9PT0xfHxnPT09eClyZXR1cm4geDt2YXIgST1MKGcseCxUKTtyZXR1cm4geT09bnVsbHx8KCh5LnJvdW5kVmFsdWV8fHkuY29sb3IpJiYoST1NYXRoLnJvdW5kKEkpKSx5Lm1pbiE9PXZvaWQgMCYmKEk9TWF0aC5tYXgoSSx5Lm1pbikpLHkubWF4IT09dm9pZCAwJiYoST1NYXRoLm1pbihJLHkubWF4KSkpLEl9ZnVuY3Rpb24gX0IoeSxnKXtyZXR1cm4geS5wZlZhbHVlIT1udWxsfHx5LnZhbHVlIT1udWxsP3kucGZWYWx1ZSE9bnVsbCYmKGc9PW51bGx8fGcudHlwZS51bml0cyE9PSIlIik/eS5wZlZhbHVlOnkudmFsdWU6eX1mdW5jdGlvbiBpNih5LGcseCxULEwpe3ZhciBJPUwhPW51bGw/TC50eXBlOm51bGw7eDwwP3g9MDp4PjEmJih4PTEpO3ZhciBPPV9CKHksTCksJD1fQihnLEwpO2lmKHN0KE8pJiZzdCgkKSlyZXR1cm4gVEIoSSxPLCQseCxUKTtpZihtdChPKSYmbXQoJCkpe2Zvcih2YXIgej1bXSxTPTA7UzwkLmxlbmd0aDtTKyspe3ZhciBWPU9bU10sVT0kW1NdO2lmKFYhPW51bGwmJlUhPW51bGwpe3ZhciBldD1UQihJLFYsVSx4LFQpO3oucHVzaChldCl9ZWxzZSB6LnB1c2goVSl9cmV0dXJuIHp9fWZ1bmN0aW9uIGtKKHksZyx4LFQpe3ZhciBMPSFULEk9eS5fcHJpdmF0ZSxPPWcuX3ByaXZhdGUsJD1PLmVhc2luZyx6PU8uc3RhcnRUaW1lLFM9VD95OnkuY3koKSxWPVMuc3R5bGUoKTtpZighTy5lYXNpbmdJbXBsKWlmKCQ9PW51bGwpTy5lYXNpbmdJbXBsPXNULmxpbmVhcjtlbHNle3ZhciBVO2lmKFR0KCQpKXt2YXIgZXQ9Vi5wYXJzZSgidHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24iLCQpO1U9ZXQudmFsdWV9ZWxzZSBVPSQ7dmFyIGF0LGx0O1R0KFUpPyhhdD1VLGx0PVtdKTooYXQ9VVsxXSxsdD1VLnNsaWNlKDIpLm1hcChmdW5jdGlvbihEbil7cmV0dXJuK0RufSkpLGx0Lmxlbmd0aD4wPyhhdD09PSJzcHJpbmciJiZsdC5wdXNoKE8uZHVyYXRpb24pLE8uZWFzaW5nSW1wbD1zVFthdF0uYXBwbHkobnVsbCxsdCkpOk8uZWFzaW5nSW1wbD1zVFthdF19dmFyIGd0PU8uZWFzaW5nSW1wbCxMdDtpZihPLmR1cmF0aW9uPT09MD9MdD0xOkx0PSh4LXopL08uZHVyYXRpb24sTy5hcHBseWluZyYmKEx0PU8ucHJvZ3Jlc3MpLEx0PDA/THQ9MDpMdD4xJiYoTHQ9MSksTy5kZWxheT09bnVsbCl7dmFyIEV0PU8uc3RhcnRQb3NpdGlvbixEdD1PLnBvc2l0aW9uO2lmKER0JiZMJiYheS5sb2NrZWQoKSl7dmFyIEl0PXt9O01rKEV0LngsRHQueCkmJihJdC54PWk2KEV0LngsRHQueCxMdCxndCkpLE1rKEV0LnksRHQueSkmJihJdC55PWk2KEV0LnksRHQueSxMdCxndCkpLHkucG9zaXRpb24oSXQpfXZhciB6dD1PLnN0YXJ0UGFuLHRlPU8ucGFuLFh0PUkucGFuLEh0PXRlIT1udWxsJiZUO0h0JiYoTWsoenQueCx0ZS54KSYmKFh0Lng9aTYoenQueCx0ZS54LEx0LGd0KSksTWsoenQueSx0ZS55KSYmKFh0Lnk9aTYoenQueSx0ZS55LEx0LGd0KSkseS5lbWl0KCJwYW4iKSk7dmFyIGllPU8uc3RhcnRab29tLFV0PU8uem9vbSxmZT1VdCE9bnVsbCYmVDtmZSYmKE1rKGllLFV0KSYmKEkuem9vbT1iayhJLm1pblpvb20saTYoaWUsVXQsTHQsZ3QpLEkubWF4Wm9vbSkpLHkuZW1pdCgiem9vbSIpKSwoSHR8fGZlKSYmeS5lbWl0KCJ2aWV3cG9ydCIpO3ZhciBnZT1PLnN0eWxlO2lmKGdlJiZnZS5sZW5ndGg+MCYmTCl7Zm9yKHZhciBzZT0wO3NlPGdlLmxlbmd0aDtzZSsrKXt2YXIgTmU9Z2Vbc2VdLHBlPU5lLm5hbWUsZ249TmUsamU9Ty5zdGFydFN0eWxlW3BlXSxHZT1WLnByb3BlcnRpZXNbamUubmFtZV0seG49aTYoamUsZ24sTHQsZ3QsR2UpO1Yub3ZlcnJpZGVCeXBhc3MoeSxwZSx4bil9eS5lbWl0KCJzdHlsZSIpfX1yZXR1cm4gTy5wcm9ncmVzcz1MdCxMdH1mdW5jdGlvbiBNayh5LGcpe3JldHVybiB5PT1udWxsfHxnPT1udWxsPyExOnN0KHkpJiZzdChnKT8hMDohISh5JiZnKX1mdW5jdGlvbiBFSih5LGcseCxUKXt2YXIgTD1nLl9wcml2YXRlO0wuc3RhcnRlZD0hMCxMLnN0YXJ0VGltZT14LUwucHJvZ3Jlc3MqTC5kdXJhdGlvbn1mdW5jdGlvbiBDQih5LGcpe3ZhciB4PWcuX3ByaXZhdGUuYW5pRWxlcyxUPVtdO2Z1bmN0aW9uIEwoVixVKXt2YXIgZXQ9Vi5fcHJpdmF0ZSxhdD1ldC5hbmltYXRpb24uY3VycmVudCxsdD1ldC5hbmltYXRpb24ucXVldWUsZ3Q9ITE7aWYoYXQubGVuZ3RoPT09MCl7dmFyIEx0PWx0LnNoaWZ0KCk7THQmJmF0LnB1c2goTHQpfWZvcih2YXIgRXQ9ZnVuY3Rpb24oWHQpe2Zvcih2YXIgSHQ9WHQubGVuZ3RoLTE7SHQ+PTA7SHQtLSl7dmFyIGllPVh0W0h0XTtpZSgpfVh0LnNwbGljZSgwLFh0Lmxlbmd0aCl9LER0PWF0Lmxlbmd0aC0xO0R0Pj0wO0R0LS0pe3ZhciBJdD1hdFtEdF0senQ9SXQuX3ByaXZhdGU7aWYoenQuc3RvcHBlZCl7YXQuc3BsaWNlKER0LDEpLHp0Lmhvb2tlZD0hMSx6dC5wbGF5aW5nPSExLHp0LnN0YXJ0ZWQ9ITEsRXQoenQuZnJhbWVzKTtjb250aW51ZX0henQucGxheWluZyYmIXp0LmFwcGx5aW5nfHwoenQucGxheWluZyYmenQuYXBwbHlpbmcmJih6dC5hcHBseWluZz0hMSksenQuc3RhcnRlZHx8RUooVixJdCx5KSxrSihWLEl0LHksVSksenQuYXBwbHlpbmcmJih6dC5hcHBseWluZz0hMSksRXQoenQuZnJhbWVzKSx6dC5zdGVwIT1udWxsJiZ6dC5zdGVwKHkpLEl0LmNvbXBsZXRlZCgpJiYoYXQuc3BsaWNlKER0LDEpLHp0Lmhvb2tlZD0hMSx6dC5wbGF5aW5nPSExLHp0LnN0YXJ0ZWQ9ITEsRXQoenQuY29tcGxldGVzKSksZ3Q9ITApfXJldHVybiFVJiZhdC5sZW5ndGg9PT0wJiZsdC5sZW5ndGg9PT0wJiZULnB1c2goViksZ3R9Zm9yKHZhciBJPSExLE89MDtPPHgubGVuZ3RoO08rKyl7dmFyICQ9eFtPXSx6PUwoJCk7ST1JfHx6fXZhciBTPUwoZywhMCk7KEl8fFMpJiYoeC5sZW5ndGg+MD9nLm5vdGlmeSgiZHJhdyIseCk6Zy5ub3RpZnkoImRyYXciKSkseC51bm1lcmdlKFQpLGcuZW1pdCgic3RlcCIpfXZhciBUSj17YW5pbWF0ZTpJYy5hbmltYXRlKCksYW5pbWF0aW9uOkljLmFuaW1hdGlvbigpLGFuaW1hdGVkOkljLmFuaW1hdGVkKCksY2xlYXJRdWV1ZTpJYy5jbGVhclF1ZXVlKCksZGVsYXk6SWMuZGVsYXkoKSxkZWxheUFuaW1hdGlvbjpJYy5kZWxheUFuaW1hdGlvbigpLHN0b3A6SWMuc3RvcCgpLGFkZFRvQW5pbWF0aW9uUG9vbDpmdW5jdGlvbihnKXt2YXIgeD10aGlzO3guc3R5bGVFbmFibGVkKCkmJnguX3ByaXZhdGUuYW5pRWxlcy5tZXJnZShnKX0sc3RvcEFuaW1hdGlvbkxvb3A6ZnVuY3Rpb24oKXt0aGlzLl9wcml2YXRlLmFuaW1hdGlvbnNSdW5uaW5nPSExfSxzdGFydEFuaW1hdGlvbkxvb3A6ZnVuY3Rpb24oKXt2YXIgZz10aGlzO2lmKGcuX3ByaXZhdGUuYW5pbWF0aW9uc1J1bm5pbmc9ITAsIWcuc3R5bGVFbmFibGVkKCkpcmV0dXJuO2Z1bmN0aW9uIHgoKXtnLl9wcml2YXRlLmFuaW1hdGlvbnNSdW5uaW5nJiZRYyhmdW5jdGlvbihJKXtDQihJLGcpLHgoKX0pfXZhciBUPWcucmVuZGVyZXIoKTtUJiZULmJlZm9yZVJlbmRlcj9ULmJlZm9yZVJlbmRlcihmdW5jdGlvbihJLE8pe0NCKE8sZyl9LFQuYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5hbmltYXRpb25zKTp4KCl9fSxfSj17cXVhbGlmaWVyQ29tcGFyZTpmdW5jdGlvbihnLHgpe3JldHVybiBnPT1udWxsfHx4PT1udWxsP2c9PW51bGwmJng9PW51bGw6Zy5zYW1lVGV4dCh4KX0sZXZlbnRNYXRjaGVzOmZ1bmN0aW9uKGcseCxUKXt2YXIgTD14LnF1YWxpZmllcjtyZXR1cm4gTCE9bnVsbD9nIT09VC50YXJnZXQmJkN0KFQudGFyZ2V0KSYmTC5tYXRjaGVzKFQudGFyZ2V0KTohMH0sYWRkRXZlbnRGaWVsZHM6ZnVuY3Rpb24oZyx4KXt4LmN5PWcseC50YXJnZXQ9Z30sY2FsbGJhY2tDb250ZXh0OmZ1bmN0aW9uKGcseCxUKXtyZXR1cm4geC5xdWFsaWZpZXIhPW51bGw/VC50YXJnZXQ6Z319LGFUPWZ1bmN0aW9uKGcpe3JldHVybiBUdChnKT9uZXcgeW0oZyk6Z30sU0I9e2NyZWF0ZUVtaXR0ZXI6ZnVuY3Rpb24oKXt2YXIgZz10aGlzLl9wcml2YXRlO3JldHVybiBnLmVtaXR0ZXJ8fChnLmVtaXR0ZXI9bmV3IEo5KF9KLHRoaXMpKSx0aGlzfSxlbWl0dGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuZW1pdHRlcn0sb246ZnVuY3Rpb24oZyx4LFQpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5vbihnLGFUKHgpLFQpLHRoaXN9LHJlbW92ZUxpc3RlbmVyOmZ1bmN0aW9uKGcseCxUKXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkucmVtb3ZlTGlzdGVuZXIoZyxhVCh4KSxUKSx0aGlzfSxyZW1vdmVBbGxMaXN0ZW5lcnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkucmVtb3ZlQWxsTGlzdGVuZXJzKCksdGhpc30sb25lOmZ1bmN0aW9uKGcseCxUKXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkub25lKGcsYVQoeCksVCksdGhpc30sb25jZTpmdW5jdGlvbihnLHgsVCl7cmV0dXJuIHRoaXMuZW1pdHRlcigpLm9uZShnLGFUKHgpLFQpLHRoaXN9LGVtaXQ6ZnVuY3Rpb24oZyx4KXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkuZW1pdChnLHgpLHRoaXN9LGVtaXRBbmROb3RpZnk6ZnVuY3Rpb24oZyx4KXtyZXR1cm4gdGhpcy5lbWl0KGcpLHRoaXMubm90aWZ5KGcseCksdGhpc319O0ljLmV2ZW50QWxpYXNlc09uKFNCKTt2YXIgekw9e3BuZzpmdW5jdGlvbihnKXt2YXIgeD10aGlzLl9wcml2YXRlLnJlbmRlcmVyO3JldHVybiBnPWd8fHt9LHgucG5nKGcpfSxqcGc6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5fcHJpdmF0ZS5yZW5kZXJlcjtyZXR1cm4gZz1nfHx7fSxnLmJnPWcuYmd8fCIjZmZmIix4LmpwZyhnKX19O3pMLmpwZWc9ekwuanBnO3ZhciBvVD17bGF5b3V0OmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXM7aWYoZz09bnVsbCl7b3UoIkxheW91dCBvcHRpb25zIG11c3QgYmUgc3BlY2lmaWVkIHRvIG1ha2UgYSBsYXlvdXQiKTtyZXR1cm59aWYoZy5uYW1lPT1udWxsKXtvdSgiQSBgbmFtZWAgbXVzdCBiZSBzcGVjaWZpZWQgdG8gbWFrZSBhIGxheW91dCIpO3JldHVybn12YXIgVD1nLm5hbWUsTD14LmV4dGVuc2lvbigibGF5b3V0IixUKTtpZihMPT1udWxsKXtvdSgiTm8gc3VjaCBsYXlvdXQgYCIrVCsiYCBmb3VuZC4gIERpZCB5b3UgZm9yZ2V0IHRvIGltcG9ydCBpdCBhbmQgYGN5dG9zY2FwZS51c2UoKWAgaXQ/Iik7cmV0dXJufXZhciBJO1R0KGcuZWxlcyk/ST14LiQoZy5lbGVzKTpJPWcuZWxlcyE9bnVsbD9nLmVsZXM6eC4kKCk7dmFyIE89bmV3IEwoZm4oe30sZyx7Y3k6eCxlbGVzOkl9KSk7cmV0dXJuIE99fTtvVC5jcmVhdGVMYXlvdXQ9b1QubWFrZUxheW91dD1vVC5sYXlvdXQ7dmFyIENKPXtub3RpZnk6ZnVuY3Rpb24oZyx4KXt2YXIgVD10aGlzLl9wcml2YXRlO2lmKHRoaXMuYmF0Y2hpbmcoKSl7VC5iYXRjaE5vdGlmaWNhdGlvbnM9VC5iYXRjaE5vdGlmaWNhdGlvbnN8fHt9O3ZhciBMPVQuYmF0Y2hOb3RpZmljYXRpb25zW2ddPVQuYmF0Y2hOb3RpZmljYXRpb25zW2ddfHx0aGlzLmNvbGxlY3Rpb24oKTt4IT1udWxsJiZMLm1lcmdlKHgpO3JldHVybn1pZihULm5vdGlmaWNhdGlvbnNFbmFibGVkKXt2YXIgST10aGlzLnJlbmRlcmVyKCk7dGhpcy5kZXN0cm95ZWQoKXx8IUl8fEkubm90aWZ5KGcseCl9fSxub3RpZmljYXRpb25zOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuX3ByaXZhdGU7cmV0dXJuIGc9PT12b2lkIDA/eC5ub3RpZmljYXRpb25zRW5hYmxlZDooeC5ub3RpZmljYXRpb25zRW5hYmxlZD0hIWcsdGhpcyl9LG5vTm90aWZpY2F0aW9uczpmdW5jdGlvbihnKXt0aGlzLm5vdGlmaWNhdGlvbnMoITEpLGcoKSx0aGlzLm5vdGlmaWNhdGlvbnMoITApfSxiYXRjaGluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmJhdGNoQ291bnQ+MH0sc3RhcnRCYXRjaDpmdW5jdGlvbigpe3ZhciBnPXRoaXMuX3ByaXZhdGU7cmV0dXJuIGcuYmF0Y2hDb3VudD09bnVsbCYmKGcuYmF0Y2hDb3VudD0wKSxnLmJhdGNoQ291bnQ9PT0wJiYoZy5iYXRjaFN0eWxlRWxlcz10aGlzLmNvbGxlY3Rpb24oKSxnLmJhdGNoTm90aWZpY2F0aW9ucz17fSksZy5iYXRjaENvdW50KyssdGhpc30sZW5kQmF0Y2g6ZnVuY3Rpb24oKXt2YXIgZz10aGlzLl9wcml2YXRlO2lmKGcuYmF0Y2hDb3VudD09PTApcmV0dXJuIHRoaXM7aWYoZy5iYXRjaENvdW50LS0sZy5iYXRjaENvdW50PT09MCl7Zy5iYXRjaFN0eWxlRWxlcy51cGRhdGVTdHlsZSgpO3ZhciB4PXRoaXMucmVuZGVyZXIoKTtPYmplY3Qua2V5cyhnLmJhdGNoTm90aWZpY2F0aW9ucykuZm9yRWFjaChmdW5jdGlvbihUKXt2YXIgTD1nLmJhdGNoTm90aWZpY2F0aW9uc1tUXTtMLmVtcHR5KCk/eC5ub3RpZnkoVCk6eC5ub3RpZnkoVCxMKX0pfXJldHVybiB0aGlzfSxiYXRjaDpmdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5zdGFydEJhdGNoKCksZygpLHRoaXMuZW5kQmF0Y2goKSx0aGlzfSxiYXRjaERhdGE6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcztyZXR1cm4gdGhpcy5iYXRjaChmdW5jdGlvbigpe2Zvcih2YXIgVD1PYmplY3Qua2V5cyhnKSxMPTA7TDxULmxlbmd0aDtMKyspe3ZhciBJPVRbTF0sTz1nW0ldLCQ9eC5nZXRFbGVtZW50QnlJZChJKTskLmRhdGEoTyl9fSl9fSxTSj16Zih7aGlkZUVkZ2VzT25WaWV3cG9ydDohMSx0ZXh0dXJlT25WaWV3cG9ydDohMSxtb3Rpb25CbHVyOiExLG1vdGlvbkJsdXJPcGFjaXR5Oi4wNSxwaXhlbFJhdGlvOnZvaWQgMCxkZXNrdG9wVGFwVGhyZXNob2xkOjQsdG91Y2hUYXBUaHJlc2hvbGQ6OCx3aGVlbFNlbnNpdGl2aXR5OjEsZGVidWc6ITEsc2hvd0ZwczohMX0pLHFMPXtyZW5kZXJUbzpmdW5jdGlvbihnLHgsVCxMKXt2YXIgST10aGlzLl9wcml2YXRlLnJlbmRlcmVyO3JldHVybiBJLnJlbmRlclRvKGcseCxULEwpLHRoaXN9LHJlbmRlcmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUucmVuZGVyZXJ9LGZvcmNlUmVuZGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm90aWZ5KCJkcmF3IiksdGhpc30scmVzaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW52YWxpZGF0ZVNpemUoKSx0aGlzLmVtaXRBbmROb3RpZnkoInJlc2l6ZSIpLHRoaXN9LGluaXRSZW5kZXJlcjpmdW5jdGlvbihnKXt2YXIgeD10aGlzLFQ9eC5leHRlbnNpb24oInJlbmRlcmVyIixnLm5hbWUpO2lmKFQ9PW51bGwpe291KCJDYW4gbm90IGluaXRpYWxpc2U6IE5vIHN1Y2ggcmVuZGVyZXIgYCIuY29uY2F0KGcubmFtZSwiYCBmb3VuZC4gRGlkIHlvdSBmb3JnZXQgdG8gaW1wb3J0IGl0IGFuZCBgY3l0b3NjYXBlLnVzZSgpYCBpdD8iKSk7cmV0dXJufWcud2hlZWxTZW5zaXRpdml0eSE9PXZvaWQgMCYmbm8oIllvdSBoYXZlIHNldCBhIGN1c3RvbSB3aGVlbCBzZW5zaXRpdml0eS4gIFRoaXMgd2lsbCBtYWtlIHlvdXIgYXBwIHpvb20gdW5uYXR1cmFsbHkgd2hlbiB1c2luZyBtYWluc3RyZWFtIG1pY2UuICBZb3Ugc2hvdWxkIGNoYW5nZSB0aGlzIHZhbHVlIGZyb20gdGhlIGRlZmF1bHQgb25seSBpZiB5b3UgY2FuIGd1YXJhbnRlZSB0aGF0IGFsbCB5b3VyIHVzZXJzIHdpbGwgdXNlIHRoZSBzYW1lIGhhcmR3YXJlIGFuZCBPUyBjb25maWd1cmF0aW9uIGFzIHlvdXIgY3VycmVudCBtYWNoaW5lLiIpO3ZhciBMPVNKKGcpO0wuY3k9eCx4Ll9wcml2YXRlLnJlbmRlcmVyPW5ldyBUKEwpLHRoaXMubm90aWZ5KCJpbml0Iil9LGRlc3Ryb3lSZW5kZXJlcjpmdW5jdGlvbigpe3ZhciBnPXRoaXM7Zy5ub3RpZnkoImRlc3Ryb3kiKTt2YXIgeD1nLmNvbnRhaW5lcigpO2lmKHgpZm9yKHguX2N5cmVnPW51bGw7eC5jaGlsZE5vZGVzLmxlbmd0aD4wOyl4LnJlbW92ZUNoaWxkKHguY2hpbGROb2Rlc1swXSk7Zy5fcHJpdmF0ZS5yZW5kZXJlcj1udWxsLGcubXV0YWJsZUVsZW1lbnRzKCkuZm9yRWFjaChmdW5jdGlvbihUKXt2YXIgTD1ULl9wcml2YXRlO0wucnNjcmF0Y2g9e30sTC5yc3R5bGU9e30sTC5hbmltYXRpb24uY3VycmVudD1bXSxMLmFuaW1hdGlvbi5xdWV1ZT1bXX0pfSxvblJlbmRlcjpmdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5vbigicmVuZGVyIixnKX0sb2ZmUmVuZGVyOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLm9mZigicmVuZGVyIixnKX19O3FMLmludmFsaWRhdGVEaW1lbnNpb25zPXFMLnJlc2l6ZTt2YXIgY1Q9e2NvbGxlY3Rpb246ZnVuY3Rpb24oZyx4KXtyZXR1cm4gVHQoZyk/dGhpcy4kKGcpOmR0KGcpP2cuY29sbGVjdGlvbigpOm10KGcpPyh4fHwoeD17fSksbmV3IEhmKHRoaXMsZyx4LnVuaXF1ZSx4LnJlbW92ZWQpKTpuZXcgSGYodGhpcyl9LG5vZGVzOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuJChmdW5jdGlvbihUKXtyZXR1cm4gVC5pc05vZGUoKX0pO3JldHVybiBnP3guZmlsdGVyKGcpOnh9LGVkZ2VzOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuJChmdW5jdGlvbihUKXtyZXR1cm4gVC5pc0VkZ2UoKX0pO3JldHVybiBnP3guZmlsdGVyKGcpOnh9LCQ6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5fcHJpdmF0ZS5lbGVtZW50cztyZXR1cm4gZz94LmZpbHRlcihnKTp4LnNwYXduU2VsZigpfSxtdXRhYmxlRWxlbWVudHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbGVtZW50c319O2NULmVsZW1lbnRzPWNULmZpbHRlcj1jVC4kO3ZhciBwMT17fSxEaz0idCIsQUo9ImYiO3AxLmFwcGx5PWZ1bmN0aW9uKHkpe2Zvcih2YXIgZz10aGlzLHg9Zy5fcHJpdmF0ZSxUPXguY3ksTD1ULmNvbGxlY3Rpb24oKSxJPTA7STx5Lmxlbmd0aDtJKyspe3ZhciBPPXlbSV0sJD1nLmdldENvbnRleHRNZXRhKE8pO2lmKCEkLmVtcHR5KXt2YXIgej1nLmdldENvbnRleHRTdHlsZSgkKSxTPWcuYXBwbHlDb250ZXh0U3R5bGUoJCx6LE8pO08uX3ByaXZhdGUuYXBwbGllZEluaXRTdHlsZT9nLnVwZGF0ZVRyYW5zaXRpb25zKE8sUy5kaWZmUHJvcHMpOk8uX3ByaXZhdGUuYXBwbGllZEluaXRTdHlsZT0hMDt2YXIgVj1nLnVwZGF0ZVN0eWxlSGludHMoTyk7ViYmTC5wdXNoKE8pfX1yZXR1cm4gTH0scDEuZ2V0UHJvcGVydGllc0RpZmY9ZnVuY3Rpb24oeSxnKXt2YXIgeD10aGlzLFQ9eC5fcHJpdmF0ZS5wcm9wRGlmZnM9eC5fcHJpdmF0ZS5wcm9wRGlmZnN8fHt9LEw9eSsiLSIrZyxJPVRbTF07aWYoSSlyZXR1cm4gSTtmb3IodmFyIE89W10sJD17fSx6PTA7ejx4Lmxlbmd0aDt6Kyspe3ZhciBTPXhbel0sVj15W3pdPT09RGssVT1nW3pdPT09RGssZXQ9ViE9PVUsYXQ9Uy5tYXBwZWRQcm9wZXJ0aWVzLmxlbmd0aD4wO2lmKGV0fHxVJiZhdCl7dmFyIGx0PXZvaWQgMDtldCYmYXR8fGV0P2x0PVMucHJvcGVydGllczphdCYmKGx0PVMubWFwcGVkUHJvcGVydGllcyk7Zm9yKHZhciBndD0wO2d0PGx0Lmxlbmd0aDtndCsrKXtmb3IodmFyIEx0PWx0W2d0XSxFdD1MdC5uYW1lLER0PSExLEl0PXorMTtJdDx4Lmxlbmd0aDtJdCsrKXt2YXIgenQ9eFtJdF0sdGU9Z1tJdF09PT1EaztpZih0ZSYmKER0PXp0LnByb3BlcnRpZXNbTHQubmFtZV0hPW51bGwsRHQpKWJyZWFrfSEkW0V0XSYmIUR0JiYoJFtFdF09ITAsTy5wdXNoKEV0KSl9fX1yZXR1cm4gVFtMXT1PLE99LHAxLmdldENvbnRleHRNZXRhPWZ1bmN0aW9uKHkpe2Zvcih2YXIgZz10aGlzLHg9IiIsVCxMPXkuX3ByaXZhdGUuc3R5bGVDeHRLZXl8fCIiLEk9MDtJPGcubGVuZ3RoO0krKyl7dmFyIE89Z1tJXSwkPU8uc2VsZWN0b3ImJk8uc2VsZWN0b3IubWF0Y2hlcyh5KTskP3grPURrOngrPUFKfXJldHVybiBUPWcuZ2V0UHJvcGVydGllc0RpZmYoTCx4KSx5Ll9wcml2YXRlLnN0eWxlQ3h0S2V5PXgse2tleTp4LGRpZmZQcm9wTmFtZXM6VCxlbXB0eTpULmxlbmd0aD09PTB9fSxwMS5nZXRDb250ZXh0U3R5bGU9ZnVuY3Rpb24oeSl7dmFyIGc9eS5rZXkseD10aGlzLFQ9dGhpcy5fcHJpdmF0ZS5jb250ZXh0U3R5bGVzPXRoaXMuX3ByaXZhdGUuY29udGV4dFN0eWxlc3x8e307aWYoVFtnXSlyZXR1cm4gVFtnXTtmb3IodmFyIEw9e19wcml2YXRlOntrZXk6Z319LEk9MDtJPHgubGVuZ3RoO0krKyl7dmFyIE89eFtJXSwkPWdbSV09PT1EaztpZigkKWZvcih2YXIgej0wO3o8Ty5wcm9wZXJ0aWVzLmxlbmd0aDt6Kyspe3ZhciBTPU8ucHJvcGVydGllc1t6XTtMW1MubmFtZV09U319cmV0dXJuIFRbZ109TCxMfSxwMS5hcHBseUNvbnRleHRTdHlsZT1mdW5jdGlvbih5LGcseCl7Zm9yKHZhciBUPXRoaXMsTD15LmRpZmZQcm9wTmFtZXMsST17fSxPPVQudHlwZXMsJD0wOyQ8TC5sZW5ndGg7JCsrKXt2YXIgej1MWyRdLFM9Z1t6XSxWPXgucHN0eWxlKHopO2lmKCFTKWlmKFYpVi5ieXBhc3M/Uz17bmFtZTp6LGRlbGV0ZUJ5cGFzc2VkOiEwfTpTPXtuYW1lOnosZGVsZXRlOiEwfTtlbHNlIGNvbnRpbnVlO2lmKFYhPT1TKXtpZihTLm1hcHBlZD09PU8uZm4mJlYhPW51bGwmJlYubWFwcGluZyE9bnVsbCYmVi5tYXBwaW5nLnZhbHVlPT09Uy52YWx1ZSl7dmFyIFU9Vi5tYXBwaW5nLGV0PVUuZm5WYWx1ZT1TLnZhbHVlKHgpO2lmKGV0PT09VS5wcmV2Rm5WYWx1ZSljb250aW51ZX12YXIgYXQ9SVt6XT17cHJldjpWfTtULmFwcGx5UGFyc2VkUHJvcGVydHkoeCxTKSxhdC5uZXh0PXgucHN0eWxlKHopLGF0Lm5leHQmJmF0Lm5leHQuYnlwYXNzJiYoYXQubmV4dD1hdC5uZXh0LmJ5cGFzc2VkKX19cmV0dXJue2RpZmZQcm9wczpJfX0scDEudXBkYXRlU3R5bGVIaW50cz1mdW5jdGlvbih5KXt2YXIgZz15Ll9wcml2YXRlLHg9dGhpcyxUPXgucHJvcGVydHlHcm91cE5hbWVzLEw9eC5wcm9wZXJ0eUdyb3VwS2V5cyxJPWZ1bmN0aW9uKHJpLF9pLGlhKXtyZXR1cm4geC5nZXRQcm9wZXJ0aWVzSGFzaChyaSxfaSxpYSl9LE89Zy5zdHlsZUtleTtpZih5LnJlbW92ZWQoKSlyZXR1cm4hMTt2YXIgJD1nLmdyb3VwPT09Im5vZGVzIix6PXkuX3ByaXZhdGUuc3R5bGU7VD1PYmplY3Qua2V5cyh6KTtmb3IodmFyIFM9MDtTPEwubGVuZ3RoO1MrKyl7dmFyIFY9TFtTXTtnLnN0eWxlS2V5c1tWXT1bYmcsYWZdfWZvcih2YXIgVT1mdW5jdGlvbihyaSxfaSl7cmV0dXJuIGcuc3R5bGVLZXlzW19pXVswXT1rMyhyaSxnLnN0eWxlS2V5c1tfaV1bMF0pfSxldD1mdW5jdGlvbihyaSxfaSl7cmV0dXJuIGcuc3R5bGVLZXlzW19pXVsxXT1nbShyaSxnLnN0eWxlS2V5c1tfaV1bMV0pfSxhdD1mdW5jdGlvbihyaSxfaSl7VShyaSxfaSksZXQocmksX2kpfSxsdD1mdW5jdGlvbihyaSxfaSl7Zm9yKHZhciBpYT0wO2lhPHJpLmxlbmd0aDtpYSsrKXt2YXIgTGE9cmkuY2hhckNvZGVBdChpYSk7VShMYSxfaSksZXQoTGEsX2kpfX0sZ3Q9MmU5LEx0PWZ1bmN0aW9uKHJpKXtyZXR1cm4tMTI4PHJpJiZyaTwxMjgmJk1hdGguZmxvb3IocmkpIT09cmk/Z3QtKHJpKjEwMjR8MCk6cml9LEV0PTA7RXQ8VC5sZW5ndGg7RXQrKyl7dmFyIER0PVRbRXRdLEl0PXpbRHRdO2lmKEl0IT1udWxsKXt2YXIgenQ9dGhpcy5wcm9wZXJ0aWVzW0R0XSx0ZT16dC50eXBlLFh0PXp0Lmdyb3VwS2V5LEh0PXZvaWQgMDt6dC5oYXNoT3ZlcnJpZGUhPW51bGw/SHQ9enQuaGFzaE92ZXJyaWRlKHksSXQpOkl0LnBmVmFsdWUhPW51bGwmJihIdD1JdC5wZlZhbHVlKTt2YXIgaWU9enQuZW51bXM9PW51bGw/SXQudmFsdWU6bnVsbCxVdD1IdCE9bnVsbCxmZT1pZSE9bnVsbCxnZT1VdHx8ZmUsc2U9SXQudW5pdHM7aWYodGUubnVtYmVyJiZnZSYmIXRlLm11bHRpcGxlKXt2YXIgTmU9VXQ/SHQ6aWU7YXQoTHQoTmUpLFh0KSwhVXQmJnNlIT1udWxsJiZsdChzZSxYdCl9ZWxzZSBsdChJdC5zdHJWYWx1ZSxYdCl9fWZvcih2YXIgcGU9W2JnLGFmXSxnbj0wO2duPEwubGVuZ3RoO2duKyspe3ZhciBqZT1MW2duXSxHZT1nLnN0eWxlS2V5c1tqZV07cGVbMF09azMoR2VbMF0scGVbMF0pLHBlWzFdPWdtKEdlWzFdLHBlWzFdKX1nLnN0eWxlS2V5PUE5KHBlWzBdLHBlWzFdKTt2YXIgeG49Zy5zdHlsZUtleXM7Zy5sYWJlbERpbXNLZXk9YXUoeG4ubGFiZWxEaW1lbnNpb25zKTt2YXIgRG49SSh5LFsibGFiZWwiXSx4bi5sYWJlbERpbWVuc2lvbnMpO2lmKGcubGFiZWxLZXk9YXUoRG4pLGcubGFiZWxTdHlsZUtleT1hdSh2Zyh4bi5jb21tb25MYWJlbCxEbikpLCEkKXt2YXIgWG49SSh5LFsic291cmNlLWxhYmVsIl0seG4ubGFiZWxEaW1lbnNpb25zKTtnLnNvdXJjZUxhYmVsS2V5PWF1KFhuKSxnLnNvdXJjZUxhYmVsU3R5bGVLZXk9YXUodmcoeG4uY29tbW9uTGFiZWwsWG4pKTt2YXIgQ249SSh5LFsidGFyZ2V0LWxhYmVsIl0seG4ubGFiZWxEaW1lbnNpb25zKTtnLnRhcmdldExhYmVsS2V5PWF1KENuKSxnLnRhcmdldExhYmVsU3R5bGVLZXk9YXUodmcoeG4uY29tbW9uTGFiZWwsQ24pKX1pZigkKXt2YXIgWW49Zy5zdHlsZUtleXMscnI9WW4ubm9kZUJvZHksd3I9WW4ubm9kZUJvcmRlcix1cj1Zbi5iYWNrZ3JvdW5kSW1hZ2UsZXI9WW4uY29tcG91bmQsYm49WW4ucGllLHByPVtycix3cix1cixlcixibl0uZmlsdGVyKGZ1bmN0aW9uKGZyKXtyZXR1cm4gZnIhPW51bGx9KS5yZWR1Y2UodmcsW2JnLGFmXSk7Zy5ub2RlS2V5PWF1KHByKSxnLmhhc1BpZT1ibiE9bnVsbCYmYm5bMF0hPT1iZyYmYm5bMV0hPT1hZn1yZXR1cm4gTyE9PWcuc3R5bGVLZXl9LHAxLmNsZWFyU3R5bGVIaW50cz1mdW5jdGlvbih5KXt2YXIgZz15Ll9wcml2YXRlO2cuc3R5bGVDeHRLZXk9IiIsZy5zdHlsZUtleXM9e30sZy5zdHlsZUtleT1udWxsLGcubGFiZWxLZXk9bnVsbCxnLmxhYmVsU3R5bGVLZXk9bnVsbCxnLnNvdXJjZUxhYmVsS2V5PW51bGwsZy5zb3VyY2VMYWJlbFN0eWxlS2V5PW51bGwsZy50YXJnZXRMYWJlbEtleT1udWxsLGcudGFyZ2V0TGFiZWxTdHlsZUtleT1udWxsLGcubm9kZUtleT1udWxsLGcuaGFzUGllPW51bGx9LHAxLmFwcGx5UGFyc2VkUHJvcGVydHk9ZnVuY3Rpb24oeSxnKXt2YXIgeD10aGlzLFQ9ZyxMPXkuX3ByaXZhdGUuc3R5bGUsSSxPPXgudHlwZXMsJD14LnByb3BlcnRpZXNbVC5uYW1lXS50eXBlLHo9VC5ieXBhc3MsUz1MW1QubmFtZV0sVj1TJiZTLmJ5cGFzcyxVPXkuX3ByaXZhdGUsZXQ9Im1hcHBpbmciLGF0PWZ1bmN0aW9uKHJyKXtyZXR1cm4gcnI9PW51bGw/bnVsbDpyci5wZlZhbHVlIT1udWxsP3JyLnBmVmFsdWU6cnIudmFsdWV9LGx0PWZ1bmN0aW9uKCl7dmFyIHJyPWF0KFMpLHdyPWF0KFQpO3guY2hlY2tUcmlnZ2Vycyh5LFQubmFtZSxycix3cil9O2lmKFQmJlQubmFtZS5zdWJzdHIoMCwzKT09PSJwaWUiJiZubygiVGhlIHBpZSBzdHlsZSBwcm9wZXJ0aWVzIGFyZSBkZXByZWNhdGVkLiAgQ3JlYXRlIGNoYXJ0cyB1c2luZyBiYWNrZ3JvdW5kIGltYWdlcyBpbnN0ZWFkLiIpLGcubmFtZT09PSJjdXJ2ZS1zdHlsZSImJnkuaXNFZGdlKCkmJihnLnZhbHVlIT09ImJlemllciImJnkuaXNMb29wKCl8fGcudmFsdWU9PT0iaGF5c3RhY2siJiYoeS5zb3VyY2UoKS5pc1BhcmVudCgpfHx5LnRhcmdldCgpLmlzUGFyZW50KCkpKSYmKFQ9Zz10aGlzLnBhcnNlKGcubmFtZSwiYmV6aWVyIix6KSksVC5kZWxldGUpcmV0dXJuIExbVC5uYW1lXT12b2lkIDAsbHQoKSwhMDtpZihULmRlbGV0ZUJ5cGFzc2VkKXJldHVybiBTP1MuYnlwYXNzPyhTLmJ5cGFzc2VkPXZvaWQgMCxsdCgpLCEwKTohMToobHQoKSwhMCk7aWYoVC5kZWxldGVCeXBhc3MpcmV0dXJuIFM/Uy5ieXBhc3M/KExbVC5uYW1lXT1TLmJ5cGFzc2VkLGx0KCksITApOiExOihsdCgpLCEwKTt2YXIgZ3Q9ZnVuY3Rpb24oKXtubygiRG8gbm90IGFzc2lnbiBtYXBwaW5ncyB0byBlbGVtZW50cyB3aXRob3V0IGNvcnJlc3BvbmRpbmcgZGF0YSAoaS5lLiBlbGUgYCIreS5pZCgpKyJgIGhhcyBubyBtYXBwaW5nIGZvciBwcm9wZXJ0eSBgIitULm5hbWUrImAgd2l0aCBkYXRhIGZpZWxkIGAiK1QuZmllbGQrImApOyB0cnkgYSBgWyIrVC5maWVsZCsiXWAgc2VsZWN0b3IgdG8gbGltaXQgc2NvcGUgdG8gZWxlbWVudHMgd2l0aCBgIitULmZpZWxkKyJgIGRlZmluZWQiKX07c3dpdGNoKFQubWFwcGVkKXtjYXNlIE8ubWFwRGF0YTp7Zm9yKHZhciBMdD1ULmZpZWxkLnNwbGl0KCIuIiksRXQ9VS5kYXRhLER0PTA7RHQ8THQubGVuZ3RoJiZFdDtEdCsrKXt2YXIgSXQ9THRbRHRdO0V0PUV0W0l0XX1pZihFdD09bnVsbClyZXR1cm4gZ3QoKSwhMTt2YXIgenQ7aWYoc3QoRXQpKXt2YXIgdGU9VC5maWVsZE1heC1ULmZpZWxkTWluO3RlPT09MD96dD0wOnp0PShFdC1ULmZpZWxkTWluKS90ZX1lbHNlIHJldHVybiBubygiRG8gbm90IHVzZSBjb250aW51b3VzIG1hcHBlcnMgd2l0aG91dCBzcGVjaWZ5aW5nIG51bWVyaWMgZGF0YSAoaS5lLiBgIitULmZpZWxkKyI6ICIrRXQrImAgZm9yIGAiK3kuaWQoKSsiYCBpcyBub24tbnVtZXJpYykiKSwhMTtpZih6dDwwP3p0PTA6enQ+MSYmKHp0PTEpLCQuY29sb3Ipe3ZhciBYdD1ULnZhbHVlTWluWzBdLEh0PVQudmFsdWVNYXhbMF0saWU9VC52YWx1ZU1pblsxXSxVdD1ULnZhbHVlTWF4WzFdLGZlPVQudmFsdWVNaW5bMl0sZ2U9VC52YWx1ZU1heFsyXSxzZT1ULnZhbHVlTWluWzNdPT1udWxsPzE6VC52YWx1ZU1pblszXSxOZT1ULnZhbHVlTWF4WzNdPT1udWxsPzE6VC52YWx1ZU1heFszXSxwZT1bTWF0aC5yb3VuZChYdCsoSHQtWHQpKnp0KSxNYXRoLnJvdW5kKGllKyhVdC1pZSkqenQpLE1hdGgucm91bmQoZmUrKGdlLWZlKSp6dCksTWF0aC5yb3VuZChzZSsoTmUtc2UpKnp0KV07ST17YnlwYXNzOlQuYnlwYXNzLG5hbWU6VC5uYW1lLHZhbHVlOnBlLHN0clZhbHVlOiJyZ2IoIitwZVswXSsiLCAiK3BlWzFdKyIsICIrcGVbMl0rIikifX1lbHNlIGlmKCQubnVtYmVyKXt2YXIgZ249VC52YWx1ZU1pbisoVC52YWx1ZU1heC1ULnZhbHVlTWluKSp6dDtJPXRoaXMucGFyc2UoVC5uYW1lLGduLFQuYnlwYXNzLGV0KX1lbHNlIHJldHVybiExO2lmKCFJKXJldHVybiBndCgpLCExO0kubWFwcGluZz1ULFQ9STticmVha31jYXNlIE8uZGF0YTp7Zm9yKHZhciBqZT1ULmZpZWxkLnNwbGl0KCIuIiksR2U9VS5kYXRhLHhuPTA7eG48amUubGVuZ3RoJiZHZTt4bisrKXt2YXIgRG49amVbeG5dO0dlPUdlW0RuXX1pZihHZSE9bnVsbCYmKEk9dGhpcy5wYXJzZShULm5hbWUsR2UsVC5ieXBhc3MsZXQpKSwhSSlyZXR1cm4gZ3QoKSwhMTtJLm1hcHBpbmc9VCxUPUk7YnJlYWt9Y2FzZSBPLmZuOnt2YXIgWG49VC52YWx1ZSxDbj1ULmZuVmFsdWUhPW51bGw/VC5mblZhbHVlOlhuKHkpO2lmKFQucHJldkZuVmFsdWU9Q24sQ249PW51bGwpcmV0dXJuIG5vKCJDdXN0b20gZnVuY3Rpb24gbWFwcGVycyBtYXkgbm90IHJldHVybiBudWxsIChpLmUuIGAiK1QubmFtZSsiYCBmb3IgZWxlIGAiK3kuaWQoKSsiYCBpcyBudWxsKSIpLCExO2lmKEk9dGhpcy5wYXJzZShULm5hbWUsQ24sVC5ieXBhc3MsZXQpLCFJKXJldHVybiBubygiQ3VzdG9tIGZ1bmN0aW9uIG1hcHBlcnMgbWF5IG5vdCByZXR1cm4gaW52YWxpZCB2YWx1ZXMgZm9yIHRoZSBwcm9wZXJ0eSB0eXBlIChpLmUuIGAiK1QubmFtZSsiYCBmb3IgZWxlIGAiK3kuaWQoKSsiYCBpcyBpbnZhbGlkKSIpLCExO0kubWFwcGluZz1xYihUKSxUPUk7YnJlYWt9Y2FzZSB2b2lkIDA6YnJlYWs7ZGVmYXVsdDpyZXR1cm4hMX1yZXR1cm4gej8oVj9ULmJ5cGFzc2VkPVMuYnlwYXNzZWQ6VC5ieXBhc3NlZD1TLExbVC5uYW1lXT1UKTpWP1MuYnlwYXNzZWQ9VDpMW1QubmFtZV09VCxsdCgpLCEwfSxwMS5jbGVhbkVsZW1lbnRzPWZ1bmN0aW9uKHksZyl7Zm9yKHZhciB4PTA7eDx5Lmxlbmd0aDt4Kyspe3ZhciBUPXlbeF07aWYodGhpcy5jbGVhclN0eWxlSGludHMoVCksVC5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKSxULmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpLCFnKVQuX3ByaXZhdGUuc3R5bGU9e307ZWxzZSBmb3IodmFyIEw9VC5fcHJpdmF0ZS5zdHlsZSxJPU9iamVjdC5rZXlzKEwpLE89MDtPPEkubGVuZ3RoO08rKyl7dmFyICQ9SVtPXSx6PUxbJF07eiE9bnVsbCYmKHouYnlwYXNzP3ouYnlwYXNzZWQ9bnVsbDpMWyRdPW51bGwpfX19LHAxLnVwZGF0ZT1mdW5jdGlvbigpe3ZhciB5PXRoaXMuX3ByaXZhdGUuY3ksZz15Lm11dGFibGVFbGVtZW50cygpO2cudXBkYXRlU3R5bGUoKX0scDEudXBkYXRlVHJhbnNpdGlvbnM9ZnVuY3Rpb24oeSxnKXt2YXIgeD10aGlzLFQ9eS5fcHJpdmF0ZSxMPXkucHN0eWxlKCJ0cmFuc2l0aW9uLXByb3BlcnR5IikudmFsdWUsST15LnBzdHlsZSgidHJhbnNpdGlvbi1kdXJhdGlvbiIpLnBmVmFsdWUsTz15LnBzdHlsZSgidHJhbnNpdGlvbi1kZWxheSIpLnBmVmFsdWU7aWYoTC5sZW5ndGg+MCYmST4wKXtmb3IodmFyICQ9e30sej0hMSxTPTA7UzxMLmxlbmd0aDtTKyspe3ZhciBWPUxbU10sVT15LnBzdHlsZShWKSxldD1nW1ZdO2lmKGV0KXt2YXIgYXQ9ZXQucHJldixsdD1hdCxndD1ldC5uZXh0IT1udWxsP2V0Lm5leHQ6VSxMdD0hMSxFdD12b2lkIDAsRHQ9MWUtNjtsdCYmKHN0KGx0LnBmVmFsdWUpJiZzdChndC5wZlZhbHVlKT8oTHQ9Z3QucGZWYWx1ZS1sdC5wZlZhbHVlLEV0PWx0LnBmVmFsdWUrRHQqTHQpOnN0KGx0LnZhbHVlKSYmc3QoZ3QudmFsdWUpPyhMdD1ndC52YWx1ZS1sdC52YWx1ZSxFdD1sdC52YWx1ZStEdCpMdCk6bXQobHQudmFsdWUpJiZtdChndC52YWx1ZSkmJihMdD1sdC52YWx1ZVswXSE9PWd0LnZhbHVlWzBdfHxsdC52YWx1ZVsxXSE9PWd0LnZhbHVlWzFdfHxsdC52YWx1ZVsyXSE9PWd0LnZhbHVlWzJdLEV0PWx0LnN0clZhbHVlKSxMdCYmKCRbVl09Z3Quc3RyVmFsdWUsdGhpcy5hcHBseUJ5cGFzcyh5LFYsRXQpLHo9ITApKX19aWYoIXopcmV0dXJuO1QudHJhbnNpdGlvbmluZz0hMCxuZXcgVzUoZnVuY3Rpb24oSXQpe08+MD95LmRlbGF5QW5pbWF0aW9uKE8pLnBsYXkoKS5wcm9taXNlKCkudGhlbihJdCk6SXQoKX0pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4geS5hbmltYXRpb24oe3N0eWxlOiQsZHVyYXRpb246SSxlYXNpbmc6eS5wc3R5bGUoInRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uIikudmFsdWUscXVldWU6ITF9KS5wbGF5KCkucHJvbWlzZSgpfSkudGhlbihmdW5jdGlvbigpe3gucmVtb3ZlQnlwYXNzZXMoeSxMKSx5LmVtaXRBbmROb3RpZnkoInN0eWxlIiksVC50cmFuc2l0aW9uaW5nPSExfSl9ZWxzZSBULnRyYW5zaXRpb25pbmcmJih0aGlzLnJlbW92ZUJ5cGFzc2VzKHksTCkseS5lbWl0QW5kTm90aWZ5KCJzdHlsZSIpLFQudHJhbnNpdGlvbmluZz0hMSl9LHAxLmNoZWNrVHJpZ2dlcj1mdW5jdGlvbih5LGcseCxULEwsSSl7dmFyIE89dGhpcy5wcm9wZXJ0aWVzW2ddLCQ9TChPKTskIT1udWxsJiYkKHgsVCkmJkkoTyl9LHAxLmNoZWNrWk9yZGVyVHJpZ2dlcj1mdW5jdGlvbih5LGcseCxUKXt2YXIgTD10aGlzO3RoaXMuY2hlY2tUcmlnZ2VyKHksZyx4LFQsZnVuY3Rpb24oSSl7cmV0dXJuIEkudHJpZ2dlcnNaT3JkZXJ9LGZ1bmN0aW9uKCl7TC5fcHJpdmF0ZS5jeS5ub3RpZnkoInpvcmRlciIseSl9KX0scDEuY2hlY2tCb3VuZHNUcmlnZ2VyPWZ1bmN0aW9uKHksZyx4LFQpe3RoaXMuY2hlY2tUcmlnZ2VyKHksZyx4LFQsZnVuY3Rpb24oTCl7cmV0dXJuIEwudHJpZ2dlcnNCb3VuZHN9LGZ1bmN0aW9uKEwpe3kuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCkseS5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKSxMLnRyaWdnZXJzQm91bmRzT2ZQYXJhbGxlbEJlemllcnMmJihnPT09ImN1cnZlLXN0eWxlIiYmKHg9PT0iYmV6aWVyInx8VD09PSJiZXppZXIiKXx8Zz09PSJkaXNwbGF5IiYmKHg9PT0ibm9uZSJ8fFQ9PT0ibm9uZSIpKSYmeS5wYXJhbGxlbEVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihJKXtJLmlzQnVuZGxlZEJlemllcigpJiZJLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpfSl9KX0scDEuY2hlY2tUcmlnZ2Vycz1mdW5jdGlvbih5LGcseCxUKXt5LmRpcnR5U3R5bGVDYWNoZSgpLHRoaXMuY2hlY2taT3JkZXJUcmlnZ2VyKHksZyx4LFQpLHRoaXMuY2hlY2tCb3VuZHNUcmlnZ2VyKHksZyx4LFQpfTt2YXIgSWs9e307SWsuYXBwbHlCeXBhc3M9ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEw9dGhpcyxJPVtdLE89ITA7aWYoZz09PSIqInx8Zz09PSIqKiIpe2lmKHghPT12b2lkIDApZm9yKHZhciAkPTA7JDxMLnByb3BlcnRpZXMubGVuZ3RoOyQrKyl7dmFyIHo9TC5wcm9wZXJ0aWVzWyRdLFM9ei5uYW1lLFY9dGhpcy5wYXJzZShTLHgsITApO1YmJkkucHVzaChWKX19ZWxzZSBpZihUdChnKSl7dmFyIFU9dGhpcy5wYXJzZShnLHgsITApO1UmJkkucHVzaChVKX1lbHNlIGlmKGN0KGcpKXt2YXIgZXQ9ZztUPXg7Zm9yKHZhciBhdD1PYmplY3Qua2V5cyhldCksbHQ9MDtsdDxhdC5sZW5ndGg7bHQrKyl7dmFyIGd0PWF0W2x0XSxMdD1ldFtndF07aWYoTHQ9PT12b2lkIDAmJihMdD1ldFtfbihndCldKSxMdCE9PXZvaWQgMCl7dmFyIEV0PXRoaXMucGFyc2UoZ3QsTHQsITApO0V0JiZJLnB1c2goRXQpfX19ZWxzZSByZXR1cm4hMTtpZihJLmxlbmd0aD09PTApcmV0dXJuITE7Zm9yKHZhciBEdD0hMSxJdD0wO0l0PHkubGVuZ3RoO0l0Kyspe2Zvcih2YXIgenQ9eVtJdF0sdGU9e30sWHQ9dm9pZCAwLEh0PTA7SHQ8SS5sZW5ndGg7SHQrKyl7dmFyIGllPUlbSHRdO2lmKFQpe3ZhciBVdD16dC5wc3R5bGUoaWUubmFtZSk7WHQ9dGVbaWUubmFtZV09e3ByZXY6VXR9fUR0PXRoaXMuYXBwbHlQYXJzZWRQcm9wZXJ0eSh6dCxxYihpZSkpfHxEdCxUJiYoWHQubmV4dD16dC5wc3R5bGUoaWUubmFtZSkpfUR0JiZ0aGlzLnVwZGF0ZVN0eWxlSGludHMoenQpLFQmJnRoaXMudXBkYXRlVHJhbnNpdGlvbnMoenQsdGUsTyl9cmV0dXJuIER0fSxJay5vdmVycmlkZUJ5cGFzcz1mdW5jdGlvbih5LGcseCl7Zz1xZShnKTtmb3IodmFyIFQ9MDtUPHkubGVuZ3RoO1QrKyl7dmFyIEw9eVtUXSxJPUwuX3ByaXZhdGUuc3R5bGVbZ10sTz10aGlzLnByb3BlcnRpZXNbZ10udHlwZSwkPU8uY29sb3Isej1PLm11dGlwbGUsUz1JP0kucGZWYWx1ZSE9bnVsbD9JLnBmVmFsdWU6SS52YWx1ZTpudWxsOyFJfHwhSS5ieXBhc3M/dGhpcy5hcHBseUJ5cGFzcyhMLGcseCk6KEkudmFsdWU9eCxJLnBmVmFsdWUhPW51bGwmJihJLnBmVmFsdWU9eCksJD9JLnN0clZhbHVlPSJyZ2IoIit4LmpvaW4oIiwiKSsiKSI6ej9JLnN0clZhbHVlPXguam9pbigiICIpOkkuc3RyVmFsdWU9IiIreCx0aGlzLnVwZGF0ZVN0eWxlSGludHMoTCkpLHRoaXMuY2hlY2tUcmlnZ2VycyhMLGcsUyx4KX19LElrLnJlbW92ZUFsbEJ5cGFzc2VzPWZ1bmN0aW9uKHksZyl7cmV0dXJuIHRoaXMucmVtb3ZlQnlwYXNzZXMoeSx0aGlzLnByb3BlcnR5TmFtZXMsZyl9LElrLnJlbW92ZUJ5cGFzc2VzPWZ1bmN0aW9uKHksZyx4KXtmb3IodmFyIFQ9ITAsTD0wO0w8eS5sZW5ndGg7TCsrKXtmb3IodmFyIEk9eVtMXSxPPXt9LCQ9MDskPGcubGVuZ3RoOyQrKyl7dmFyIHo9Z1skXSxTPXRoaXMucHJvcGVydGllc1t6XSxWPUkucHN0eWxlKFMubmFtZSk7aWYoISghVnx8IVYuYnlwYXNzKSl7dmFyIFU9IiIsZXQ9dGhpcy5wYXJzZSh6LFUsITApLGF0PU9bUy5uYW1lXT17cHJldjpWfTt0aGlzLmFwcGx5UGFyc2VkUHJvcGVydHkoSSxldCksYXQubmV4dD1JLnBzdHlsZShTLm5hbWUpfX10aGlzLnVwZGF0ZVN0eWxlSGludHMoSSkseCYmdGhpcy51cGRhdGVUcmFuc2l0aW9ucyhJLE8sVCl9fTt2YXIgSEw9e307SEwuZ2V0RW1TaXplSW5QaXhlbHM9ZnVuY3Rpb24oKXt2YXIgeT10aGlzLmNvbnRhaW5lckNzcygiZm9udC1zaXplIik7cmV0dXJuIHkhPW51bGw/cGFyc2VGbG9hdCh5KToxfSxITC5jb250YWluZXJDc3M9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcy5fcHJpdmF0ZS5jeSx4PWcuY29udGFpbmVyKCk7aWYoUiYmeCYmUi5nZXRDb21wdXRlZFN0eWxlKXJldHVybiBSLmdldENvbXB1dGVkU3R5bGUoeCkuZ2V0UHJvcGVydHlWYWx1ZSh5KX07dmFyIEdiPXt9O0diLmdldFJlbmRlcmVkU3R5bGU9ZnVuY3Rpb24oeSxnKXtyZXR1cm4gZz90aGlzLmdldFN0eWxlUHJvcGVydHlWYWx1ZSh5LGcsITApOnRoaXMuZ2V0UmF3U3R5bGUoeSwhMCl9LEdiLmdldFJhd1N0eWxlPWZ1bmN0aW9uKHksZyl7dmFyIHg9dGhpcztpZih5PXlbMF0seSl7Zm9yKHZhciBUPXt9LEw9MDtMPHgucHJvcGVydGllcy5sZW5ndGg7TCsrKXt2YXIgST14LnByb3BlcnRpZXNbTF0sTz14LmdldFN0eWxlUHJvcGVydHlWYWx1ZSh5LEkubmFtZSxnKTtPIT1udWxsJiYoVFtJLm5hbWVdPU8sVFtfbihJLm5hbWUpXT1PKX1yZXR1cm4gVH19LEdiLmdldEluZGV4ZWRTdHlsZT1mdW5jdGlvbih5LGcseCxUKXt2YXIgTD15LnBzdHlsZShnKVt4XVtUXTtyZXR1cm4gTD8/eS5jeSgpLnN0eWxlKCkuZ2V0RGVmYXVsdFByb3BlcnR5KGcpW3hdWzBdfSxHYi5nZXRTdHlsZVByb3BlcnR5VmFsdWU9ZnVuY3Rpb24oeSxnLHgpe3ZhciBUPXRoaXM7aWYoeT15WzBdLHkpe3ZhciBMPVQucHJvcGVydGllc1tnXTtMLmFsaWFzJiYoTD1MLnBvaW50c1RvKTt2YXIgST1MLnR5cGUsTz15LnBzdHlsZShMLm5hbWUpO2lmKE8pe3ZhciAkPU8udmFsdWUsej1PLnVuaXRzLFM9Ty5zdHJWYWx1ZTtpZih4JiZJLm51bWJlciYmJCE9bnVsbCYmc3QoJCkpe3ZhciBWPXkuY3koKS56b29tKCksVT1mdW5jdGlvbihMdCl7cmV0dXJuIEx0KlZ9LGV0PWZ1bmN0aW9uKEx0LEV0KXtyZXR1cm4gVShMdCkrRXR9LGF0PW10KCQpLGx0PWF0P3ouZXZlcnkoZnVuY3Rpb24oZ3Qpe3JldHVybiBndCE9bnVsbH0pOnohPW51bGw7cmV0dXJuIGx0P2F0PyQubWFwKGZ1bmN0aW9uKGd0LEx0KXtyZXR1cm4gZXQoZ3QseltMdF0pfSkuam9pbigiICIpOmV0KCQseik6YXQ/JC5tYXAoZnVuY3Rpb24oZ3Qpe3JldHVybiBUdChndCk/Z3Q6IiIrVShndCl9KS5qb2luKCIgIik6IiIrVSgkKX1lbHNlIGlmKFMhPW51bGwpcmV0dXJuIFN9cmV0dXJuIG51bGx9fSxHYi5nZXRBbmltYXRpb25TdGFydFN0eWxlPWZ1bmN0aW9uKHksZyl7Zm9yKHZhciB4PXt9LFQ9MDtUPGcubGVuZ3RoO1QrKyl7dmFyIEw9Z1tUXSxJPUwubmFtZSxPPXkucHN0eWxlKEkpO08hPT12b2lkIDAmJihjdChPKT9PPXRoaXMucGFyc2UoSSxPLnN0clZhbHVlKTpPPXRoaXMucGFyc2UoSSxPKSksTyYmKHhbSV09Tyl9cmV0dXJuIHh9LEdiLmdldFByb3BzTGlzdD1mdW5jdGlvbih5KXt2YXIgZz10aGlzLHg9W10sVD15LEw9Zy5wcm9wZXJ0aWVzO2lmKFQpZm9yKHZhciBJPU9iamVjdC5rZXlzKFQpLE89MDtPPEkubGVuZ3RoO08rKyl7dmFyICQ9SVtPXSx6PVRbJF0sUz1MWyRdfHxMW3FlKCQpXSxWPXRoaXMucGFyc2UoUy5uYW1lLHopO1YmJngucHVzaChWKX1yZXR1cm4geH0sR2IuZ2V0Tm9uRGVmYXVsdFByb3BlcnRpZXNIYXNoPWZ1bmN0aW9uKHksZyx4KXt2YXIgVD14LnNsaWNlKCksTCxJLE8sJCx6LFM7Zm9yKHo9MDt6PGcubGVuZ3RoO3orKylpZihMPWdbel0sST15LnBzdHlsZShMLCExKSxJIT1udWxsKWlmKEkucGZWYWx1ZSE9bnVsbClUWzBdPWszKCQsVFswXSksVFsxXT1nbSgkLFRbMV0pO2Vsc2UgZm9yKE89SS5zdHJWYWx1ZSxTPTA7UzxPLmxlbmd0aDtTKyspJD1PLmNoYXJDb2RlQXQoUyksVFswXT1rMygkLFRbMF0pLFRbMV09Z20oJCxUWzFdKTtyZXR1cm4gVH0sR2IuZ2V0UHJvcGVydGllc0hhc2g9R2IuZ2V0Tm9uRGVmYXVsdFByb3BlcnRpZXNIYXNoO3ZhciB1VD17fTt1VC5hcHBlbmRGcm9tSnNvbj1mdW5jdGlvbih5KXtmb3IodmFyIGc9dGhpcyx4PTA7eDx5Lmxlbmd0aDt4Kyspe3ZhciBUPXlbeF0sTD1ULnNlbGVjdG9yLEk9VC5zdHlsZXx8VC5jc3MsTz1PYmplY3Qua2V5cyhJKTtnLnNlbGVjdG9yKEwpO2Zvcih2YXIgJD0wOyQ8Ty5sZW5ndGg7JCsrKXt2YXIgej1PWyRdLFM9SVt6XTtnLmNzcyh6LFMpfX1yZXR1cm4gZ30sdVQuZnJvbUpzb249ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcztyZXR1cm4gZy5yZXNldFRvRGVmYXVsdCgpLGcuYXBwZW5kRnJvbUpzb24oeSksZ30sdVQuanNvbj1mdW5jdGlvbigpe2Zvcih2YXIgeT1bXSxnPXRoaXMuZGVmYXVsdExlbmd0aDtnPHRoaXMubGVuZ3RoO2crKyl7Zm9yKHZhciB4PXRoaXNbZ10sVD14LnNlbGVjdG9yLEw9eC5wcm9wZXJ0aWVzLEk9e30sTz0wO088TC5sZW5ndGg7TysrKXt2YXIgJD1MW09dO0lbJC5uYW1lXT0kLnN0clZhbHVlfXkucHVzaCh7c2VsZWN0b3I6VD9ULnRvU3RyaW5nKCk6ImNvcmUiLHN0eWxlOkl9KX1yZXR1cm4geX07dmFyIFZMPXt9O1ZMLmFwcGVuZEZyb21TdHJpbmc9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcyx4PXRoaXMsVD0iIit5LEwsSSxPO1Q9VC5yZXBsYWNlKC9bL11bKl0oXHN8LikrP1sqXVsvXS9nLCIiKTtmdW5jdGlvbiAkKCl7VC5sZW5ndGg+TC5sZW5ndGg/VD1ULnN1YnN0cihMLmxlbmd0aCk6VD0iIn1mdW5jdGlvbiB6KCl7SS5sZW5ndGg+Ty5sZW5ndGg/ST1JLnN1YnN0cihPLmxlbmd0aCk6ST0iIn1mb3IoOzspe3ZhciBTPVQubWF0Y2goL15ccyokLyk7aWYoUylicmVhazt2YXIgVj1ULm1hdGNoKC9eXHMqKCg/Oi58XHMpKz8pXHMqXHsoKD86LnxccykrPylcfS8pO2lmKCFWKXtubygiSGFsdGluZyBzdHlsZXNoZWV0IHBhcnNpbmc6IFN0cmluZyBzdHlsZXNoZWV0IGNvbnRhaW5zIG1vcmUgdG8gcGFyc2UgYnV0IG5vIHNlbGVjdG9yIGFuZCBibG9jayBmb3VuZCBpbjogIitUKTticmVha31MPVZbMF07dmFyIFU9VlsxXTtpZihVIT09ImNvcmUiKXt2YXIgZXQ9bmV3IHltKFUpO2lmKGV0LmludmFsaWQpe25vKCJTa2lwcGluZyBwYXJzaW5nIG9mIGJsb2NrOiBJbnZhbGlkIHNlbGVjdG9yIGZvdW5kIGluIHN0cmluZyBzdHlsZXNoZWV0OiAiK1UpLCQoKTtjb250aW51ZX19dmFyIGF0PVZbMl0sbHQ9ITE7ST1hdDtmb3IodmFyIGd0PVtdOzspe3ZhciBMdD1JLm1hdGNoKC9eXHMqJC8pO2lmKEx0KWJyZWFrO3ZhciBFdD1JLm1hdGNoKC9eXHMqKC4rPylccyo6XHMqKC4rPykoPzpccyo7fFxzKiQpLyk7aWYoIUV0KXtubygiU2tpcHBpbmcgcGFyc2luZyBvZiBibG9jazogSW52YWxpZCBmb3JtYXR0aW5nIG9mIHN0eWxlIHByb3BlcnR5IGFuZCB2YWx1ZSBkZWZpbml0aW9ucyBmb3VuZCBpbjoiK2F0KSxsdD0hMDticmVha31PPUV0WzBdO3ZhciBEdD1FdFsxXSxJdD1FdFsyXSx6dD1nLnByb3BlcnRpZXNbRHRdO2lmKCF6dCl7bm8oIlNraXBwaW5nIHByb3BlcnR5OiBJbnZhbGlkIHByb3BlcnR5IG5hbWUgaW46ICIrTykseigpO2NvbnRpbnVlfXZhciB0ZT14LnBhcnNlKER0LEl0KTtpZighdGUpe25vKCJTa2lwcGluZyBwcm9wZXJ0eTogSW52YWxpZCBwcm9wZXJ0eSBkZWZpbml0aW9uIGluOiAiK08pLHooKTtjb250aW51ZX1ndC5wdXNoKHtuYW1lOkR0LHZhbDpJdH0pLHooKX1pZihsdCl7JCgpO2JyZWFrfXguc2VsZWN0b3IoVSk7Zm9yKHZhciBYdD0wO1h0PGd0Lmxlbmd0aDtYdCsrKXt2YXIgSHQ9Z3RbWHRdO3guY3NzKEh0Lm5hbWUsSHQudmFsKX0kKCl9cmV0dXJuIHh9LFZMLmZyb21TdHJpbmc9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcztyZXR1cm4gZy5yZXNldFRvRGVmYXVsdCgpLGcuYXBwZW5kRnJvbVN0cmluZyh5KSxnfTt2YXIgVmY9e307KGZ1bmN0aW9uKCl7dmFyIHk9QWUsZz1rZSx4PUVlLFQ9SGUsTD1DZSxJPWZ1bmN0aW9uKHByKXtyZXR1cm4iXiIrcHIrIlxccypcXChcXHMqKFtcXHdcXC5dKylcXHMqXFwpJCJ9LE89ZnVuY3Rpb24ocHIpe3ZhciBmcj15KyJ8XFx3K3wiK2crInwiK3grInwiK1QrInwiK0w7cmV0dXJuIl4iK3ByKyJcXHMqXFwoKFtcXHdcXC5dKylcXHMqXFwsXFxzKigiK3krIilcXHMqXFwsXFxzKigiK3krIilcXHMqLFxccyooIitmcisiKVxccypcXCxcXHMqKCIrZnIrIilcXCkkIn0sJD1bYF51cmxcXHMqXFwoXFxzKlsnIl0/KC4rPylbJyJdP1xccypcXCkkYCwiXihub25lKSQiLCJeKC4rKSQiXTtWZi50eXBlcz17dGltZTp7bnVtYmVyOiEwLG1pbjowLHVuaXRzOiJzfG1zIixpbXBsaWNpdFVuaXRzOiJtcyJ9LHBlcmNlbnQ6e251bWJlcjohMCxtaW46MCxtYXg6MTAwLHVuaXRzOiIlIixpbXBsaWNpdFVuaXRzOiIlIn0scGVyY2VudGFnZXM6e251bWJlcjohMCxtaW46MCxtYXg6MTAwLHVuaXRzOiIlIixpbXBsaWNpdFVuaXRzOiIlIixtdWx0aXBsZTohMH0semVyb09uZU51bWJlcjp7bnVtYmVyOiEwLG1pbjowLG1heDoxLHVuaXRsZXNzOiEwfSx6ZXJvT25lTnVtYmVyczp7bnVtYmVyOiEwLG1pbjowLG1heDoxLHVuaXRsZXNzOiEwLG11bHRpcGxlOiEwfSxuT25lT25lTnVtYmVyOntudW1iZXI6ITAsbWluOi0xLG1heDoxLHVuaXRsZXNzOiEwfSxub25OZWdhdGl2ZUludDp7bnVtYmVyOiEwLG1pbjowLGludGVnZXI6ITAsdW5pdGxlc3M6ITB9LHBvc2l0aW9uOntlbnVtczpbInBhcmVudCIsIm9yaWdpbiJdfSxub2RlU2l6ZTp7bnVtYmVyOiEwLG1pbjowLGVudW1zOlsibGFiZWwiXX0sbnVtYmVyOntudW1iZXI6ITAsdW5pdGxlc3M6ITB9LG51bWJlcnM6e251bWJlcjohMCx1bml0bGVzczohMCxtdWx0aXBsZTohMH0scG9zaXRpdmVOdW1iZXI6e251bWJlcjohMCx1bml0bGVzczohMCxtaW46MCxzdHJpY3RNaW46ITB9LHNpemU6e251bWJlcjohMCxtaW46MH0sYmlkaXJlY3Rpb25hbFNpemU6e251bWJlcjohMH0sYmlkaXJlY3Rpb25hbFNpemVNYXliZVBlcmNlbnQ6e251bWJlcjohMCxhbGxvd1BlcmNlbnQ6ITB9LGJpZGlyZWN0aW9uYWxTaXplczp7bnVtYmVyOiEwLG11bHRpcGxlOiEwfSxzaXplTWF5YmVQZXJjZW50OntudW1iZXI6ITAsbWluOjAsYWxsb3dQZXJjZW50OiEwfSxheGlzRGlyZWN0aW9uOntlbnVtczpbImhvcml6b250YWwiLCJsZWZ0d2FyZCIsInJpZ2h0d2FyZCIsInZlcnRpY2FsIiwidXB3YXJkIiwiZG93bndhcmQiLCJhdXRvIl19LHBhZGRpbmdSZWxhdGl2ZVRvOntlbnVtczpbIndpZHRoIiwiaGVpZ2h0IiwiYXZlcmFnZSIsIm1pbiIsIm1heCJdfSxiZ1dIOntudW1iZXI6ITAsbWluOjAsYWxsb3dQZXJjZW50OiEwLGVudW1zOlsiYXV0byJdLG11bHRpcGxlOiEwfSxiZ1Bvczp7bnVtYmVyOiEwLGFsbG93UGVyY2VudDohMCxtdWx0aXBsZTohMH0sYmdSZWxhdGl2ZVRvOntlbnVtczpbImlubmVyIiwiaW5jbHVkZS1wYWRkaW5nIl0sbXVsdGlwbGU6ITB9LGJnUmVwZWF0OntlbnVtczpbInJlcGVhdCIsInJlcGVhdC14IiwicmVwZWF0LXkiLCJuby1yZXBlYXQiXSxtdWx0aXBsZTohMH0sYmdGaXQ6e2VudW1zOlsibm9uZSIsImNvbnRhaW4iLCJjb3ZlciJdLG11bHRpcGxlOiEwfSxiZ0Nyb3NzT3JpZ2luOntlbnVtczpbImFub255bW91cyIsInVzZS1jcmVkZW50aWFscyJdLG11bHRpcGxlOiEwfSxiZ0NsaXA6e2VudW1zOlsibm9uZSIsIm5vZGUiXSxtdWx0aXBsZTohMH0sYmdDb250YWlubWVudDp7ZW51bXM6WyJpbnNpZGUiLCJvdmVyIl0sbXVsdGlwbGU6ITB9LGNvbG9yOntjb2xvcjohMH0sY29sb3JzOntjb2xvcjohMCxtdWx0aXBsZTohMH0sZmlsbDp7ZW51bXM6WyJzb2xpZCIsImxpbmVhci1ncmFkaWVudCIsInJhZGlhbC1ncmFkaWVudCJdfSxib29sOntlbnVtczpbInllcyIsIm5vIl19LGJvb2xzOntlbnVtczpbInllcyIsIm5vIl0sbXVsdGlwbGU6ITB9LGxpbmVTdHlsZTp7ZW51bXM6WyJzb2xpZCIsImRvdHRlZCIsImRhc2hlZCJdfSxsaW5lQ2FwOntlbnVtczpbImJ1dHQiLCJyb3VuZCIsInNxdWFyZSJdfSxib3JkZXJTdHlsZTp7ZW51bXM6WyJzb2xpZCIsImRvdHRlZCIsImRhc2hlZCIsImRvdWJsZSJdfSxjdXJ2ZVN0eWxlOntlbnVtczpbImJlemllciIsInVuYnVuZGxlZC1iZXppZXIiLCJoYXlzdGFjayIsInNlZ21lbnRzIiwic3RyYWlnaHQiLCJzdHJhaWdodC10cmlhbmdsZSIsInRheGkiXX0sZm9udEZhbWlseTp7cmVnZXg6J14oW1xcdy0gXFwiXSsoPzpcXHMqLFxccypbXFx3LSBcXCJdKykqKSQnfSxmb250U3R5bGU6e2VudW1zOlsiaXRhbGljIiwibm9ybWFsIiwib2JsaXF1ZSJdfSxmb250V2VpZ2h0OntlbnVtczpbIm5vcm1hbCIsImJvbGQiLCJib2xkZXIiLCJsaWdodGVyIiwiMTAwIiwiMjAwIiwiMzAwIiwiNDAwIiwiNTAwIiwiNjAwIiwiODAwIiwiOTAwIiwxMDAsMjAwLDMwMCw0MDAsNTAwLDYwMCw3MDAsODAwLDkwMF19LHRleHREZWNvcmF0aW9uOntlbnVtczpbIm5vbmUiLCJ1bmRlcmxpbmUiLCJvdmVybGluZSIsImxpbmUtdGhyb3VnaCJdfSx0ZXh0VHJhbnNmb3JtOntlbnVtczpbIm5vbmUiLCJ1cHBlcmNhc2UiLCJsb3dlcmNhc2UiXX0sdGV4dFdyYXA6e2VudW1zOlsibm9uZSIsIndyYXAiLCJlbGxpcHNpcyJdfSx0ZXh0T3ZlcmZsb3dXcmFwOntlbnVtczpbIndoaXRlc3BhY2UiLCJhbnl3aGVyZSJdfSx0ZXh0QmFja2dyb3VuZFNoYXBlOntlbnVtczpbInJlY3RhbmdsZSIsInJvdW5kcmVjdGFuZ2xlIiwicm91bmQtcmVjdGFuZ2xlIl19LG5vZGVTaGFwZTp7ZW51bXM6WyJyZWN0YW5nbGUiLCJyb3VuZHJlY3RhbmdsZSIsInJvdW5kLXJlY3RhbmdsZSIsImN1dHJlY3RhbmdsZSIsImN1dC1yZWN0YW5nbGUiLCJib3R0b21yb3VuZHJlY3RhbmdsZSIsImJvdHRvbS1yb3VuZC1yZWN0YW5nbGUiLCJiYXJyZWwiLCJlbGxpcHNlIiwidHJpYW5nbGUiLCJyb3VuZC10cmlhbmdsZSIsInNxdWFyZSIsInBlbnRhZ29uIiwicm91bmQtcGVudGFnb24iLCJoZXhhZ29uIiwicm91bmQtaGV4YWdvbiIsImNvbmNhdmVoZXhhZ29uIiwiY29uY2F2ZS1oZXhhZ29uIiwiaGVwdGFnb24iLCJyb3VuZC1oZXB0YWdvbiIsIm9jdGFnb24iLCJyb3VuZC1vY3RhZ29uIiwidGFnIiwicm91bmQtdGFnIiwic3RhciIsImRpYW1vbmQiLCJyb3VuZC1kaWFtb25kIiwidmVlIiwicmhvbWJvaWQiLCJwb2x5Z29uIl19LG92ZXJsYXlTaGFwZTp7ZW51bXM6WyJyb3VuZHJlY3RhbmdsZSIsInJvdW5kLXJlY3RhbmdsZSIsImVsbGlwc2UiXX0sY29tcG91bmRJbmNsdWRlTGFiZWxzOntlbnVtczpbImluY2x1ZGUiLCJleGNsdWRlIl19LGFycm93U2hhcGU6e2VudW1zOlsidGVlIiwidHJpYW5nbGUiLCJ0cmlhbmdsZS10ZWUiLCJjaXJjbGUtdHJpYW5nbGUiLCJ0cmlhbmdsZS1jcm9zcyIsInRyaWFuZ2xlLWJhY2tjdXJ2ZSIsInZlZSIsInNxdWFyZSIsImNpcmNsZSIsImRpYW1vbmQiLCJjaGV2cm9uIiwibm9uZSJdfSxhcnJvd0ZpbGw6e2VudW1zOlsiZmlsbGVkIiwiaG9sbG93Il19LGRpc3BsYXk6e2VudW1zOlsiZWxlbWVudCIsIm5vbmUiXX0sdmlzaWJpbGl0eTp7ZW51bXM6WyJoaWRkZW4iLCJ2aXNpYmxlIl19LHpDb21wb3VuZERlcHRoOntlbnVtczpbImJvdHRvbSIsIm9ycGhhbiIsImF1dG8iLCJ0b3AiXX0sekluZGV4Q29tcGFyZTp7ZW51bXM6WyJhdXRvIiwibWFudWFsIl19LHZhbGlnbjp7ZW51bXM6WyJ0b3AiLCJjZW50ZXIiLCJib3R0b20iXX0saGFsaWduOntlbnVtczpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdfSxqdXN0aWZpY2F0aW9uOntlbnVtczpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCIsImF1dG8iXX0sdGV4dDp7c3RyaW5nOiEwfSxkYXRhOnttYXBwaW5nOiEwLHJlZ2V4OkkoImRhdGEiKX0sbGF5b3V0RGF0YTp7bWFwcGluZzohMCxyZWdleDpJKCJsYXlvdXREYXRhIil9LHNjcmF0Y2g6e21hcHBpbmc6ITAscmVnZXg6SSgic2NyYXRjaCIpfSxtYXBEYXRhOnttYXBwaW5nOiEwLHJlZ2V4Ok8oIm1hcERhdGEiKX0sbWFwTGF5b3V0RGF0YTp7bWFwcGluZzohMCxyZWdleDpPKCJtYXBMYXlvdXREYXRhIil9LG1hcFNjcmF0Y2g6e21hcHBpbmc6ITAscmVnZXg6TygibWFwU2NyYXRjaCIpfSxmbjp7bWFwcGluZzohMCxmbjohMH0sdXJsOntyZWdleGVzOiQsc2luZ2xlUmVnZXhNYXRjaFZhbHVlOiEwfSx1cmxzOntyZWdleGVzOiQsc2luZ2xlUmVnZXhNYXRjaFZhbHVlOiEwLG11bHRpcGxlOiEwfSxwcm9wTGlzdDp7cHJvcExpc3Q6ITB9LGFuZ2xlOntudW1iZXI6ITAsdW5pdHM6ImRlZ3xyYWQiLGltcGxpY2l0VW5pdHM6InJhZCJ9LHRleHRSb3RhdGlvbjp7bnVtYmVyOiEwLHVuaXRzOiJkZWd8cmFkIixpbXBsaWNpdFVuaXRzOiJyYWQiLGVudW1zOlsibm9uZSIsImF1dG9yb3RhdGUiXX0scG9seWdvblBvaW50TGlzdDp7bnVtYmVyOiEwLG11bHRpcGxlOiEwLGV2ZW5NdWx0aXBsZTohMCxtaW46LTEsbWF4OjEsdW5pdGxlc3M6ITB9LGVkZ2VEaXN0YW5jZXM6e2VudW1zOlsiaW50ZXJzZWN0aW9uIiwibm9kZS1wb3NpdGlvbiJdfSxlZGdlRW5kcG9pbnQ6e251bWJlcjohMCxtdWx0aXBsZTohMCx1bml0czoiJXxweHxlbXxkZWd8cmFkIixpbXBsaWNpdFVuaXRzOiJweCIsZW51bXM6WyJpbnNpZGUtdG8tbm9kZSIsIm91dHNpZGUtdG8tbm9kZSIsIm91dHNpZGUtdG8tbm9kZS1vci1sYWJlbCIsIm91dHNpZGUtdG8tbGluZSIsIm91dHNpZGUtdG8tbGluZS1vci1sYWJlbCJdLHNpbmdsZUVudW06ITAsdmFsaWRhdGU6ZnVuY3Rpb24ocHIsZnIpe3N3aXRjaChwci5sZW5ndGgpe2Nhc2UgMjpyZXR1cm4gZnJbMF0hPT0iZGVnIiYmZnJbMF0hPT0icmFkIiYmZnJbMV0hPT0iZGVnIiYmZnJbMV0hPT0icmFkIjtjYXNlIDE6cmV0dXJuIFR0KHByWzBdKXx8ZnJbMF09PT0iZGVnInx8ZnJbMF09PT0icmFkIjtkZWZhdWx0OnJldHVybiExfX19LGVhc2luZzp7cmVnZXhlczpbIl4oc3ByaW5nKVxccypcXChcXHMqKCIreSsiKVxccyosXFxzKigiK3krIilcXHMqXFwpJCIsIl4oY3ViaWMtYmV6aWVyKVxccypcXChcXHMqKCIreSsiKVxccyosXFxzKigiK3krIilcXHMqLFxccyooIit5KyIpXFxzKixcXHMqKCIreSsiKVxccypcXCkkIl0sZW51bXM6WyJsaW5lYXIiLCJlYXNlIiwiZWFzZS1pbiIsImVhc2Utb3V0IiwiZWFzZS1pbi1vdXQiLCJlYXNlLWluLXNpbmUiLCJlYXNlLW91dC1zaW5lIiwiZWFzZS1pbi1vdXQtc2luZSIsImVhc2UtaW4tcXVhZCIsImVhc2Utb3V0LXF1YWQiLCJlYXNlLWluLW91dC1xdWFkIiwiZWFzZS1pbi1jdWJpYyIsImVhc2Utb3V0LWN1YmljIiwiZWFzZS1pbi1vdXQtY3ViaWMiLCJlYXNlLWluLXF1YXJ0IiwiZWFzZS1vdXQtcXVhcnQiLCJlYXNlLWluLW91dC1xdWFydCIsImVhc2UtaW4tcXVpbnQiLCJlYXNlLW91dC1xdWludCIsImVhc2UtaW4tb3V0LXF1aW50IiwiZWFzZS1pbi1leHBvIiwiZWFzZS1vdXQtZXhwbyIsImVhc2UtaW4tb3V0LWV4cG8iLCJlYXNlLWluLWNpcmMiLCJlYXNlLW91dC1jaXJjIiwiZWFzZS1pbi1vdXQtY2lyYyJdfSxncmFkaWVudERpcmVjdGlvbjp7ZW51bXM6WyJ0by1ib3R0b20iLCJ0by10b3AiLCJ0by1sZWZ0IiwidG8tcmlnaHQiLCJ0by1ib3R0b20tcmlnaHQiLCJ0by1ib3R0b20tbGVmdCIsInRvLXRvcC1yaWdodCIsInRvLXRvcC1sZWZ0IiwidG8tcmlnaHQtYm90dG9tIiwidG8tbGVmdC1ib3R0b20iLCJ0by1yaWdodC10b3AiLCJ0by1sZWZ0LXRvcCJdfSxib3VuZHNFeHBhbnNpb246e251bWJlcjohMCxtdWx0aXBsZTohMCxtaW46MCx2YWxpZGF0ZTpmdW5jdGlvbihwcil7dmFyIGZyPXByLmxlbmd0aDtyZXR1cm4gZnI9PT0xfHxmcj09PTJ8fGZyPT09NH19fTt2YXIgej17emVyb05vblplcm86ZnVuY3Rpb24ocHIsZnIpe3JldHVybihwcj09bnVsbHx8ZnI9PW51bGwpJiZwciE9PWZyfHxwcj09MCYmZnIhPTA/ITA6cHIhPTAmJmZyPT0wfSxhbnk6ZnVuY3Rpb24ocHIsZnIpe3JldHVybiBwciE9ZnJ9LGVtcHR5Tm9uRW1wdHk6ZnVuY3Rpb24ocHIsZnIpe3ZhciByaT1YKHByKSxfaT1YKGZyKTtyZXR1cm4gcmkmJiFfaXx8IXJpJiZfaX19LFM9VmYudHlwZXMsVj1be25hbWU6ImxhYmVsIix0eXBlOlMudGV4dCx0cmlnZ2Vyc0JvdW5kczp6LmFueSx0cmlnZ2Vyc1pPcmRlcjp6LmVtcHR5Tm9uRW1wdHl9LHtuYW1lOiJ0ZXh0LXJvdGF0aW9uIix0eXBlOlMudGV4dFJvdGF0aW9uLHRyaWdnZXJzQm91bmRzOnouYW55fSx7bmFtZToidGV4dC1tYXJnaW4teCIsdHlwZTpTLmJpZGlyZWN0aW9uYWxTaXplLHRyaWdnZXJzQm91bmRzOnouYW55fSx7bmFtZToidGV4dC1tYXJnaW4teSIsdHlwZTpTLmJpZGlyZWN0aW9uYWxTaXplLHRyaWdnZXJzQm91bmRzOnouYW55fV0sVT1be25hbWU6InNvdXJjZS1sYWJlbCIsdHlwZTpTLnRleHQsdHJpZ2dlcnNCb3VuZHM6ei5hbnl9LHtuYW1lOiJzb3VyY2UtdGV4dC1yb3RhdGlvbiIsdHlwZTpTLnRleHRSb3RhdGlvbix0cmlnZ2Vyc0JvdW5kczp6LmFueX0se25hbWU6InNvdXJjZS10ZXh0LW1hcmdpbi14Iix0eXBlOlMuYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6ei5hbnl9LHtuYW1lOiJzb3VyY2UtdGV4dC1tYXJnaW4teSIsdHlwZTpTLmJpZGlyZWN0aW9uYWxTaXplLHRyaWdnZXJzQm91bmRzOnouYW55fSx7bmFtZToic291cmNlLXRleHQtb2Zmc2V0Iix0eXBlOlMuc2l6ZSx0cmlnZ2Vyc0JvdW5kczp6LmFueX1dLGV0PVt7bmFtZToidGFyZ2V0LWxhYmVsIix0eXBlOlMudGV4dCx0cmlnZ2Vyc0JvdW5kczp6LmFueX0se25hbWU6InRhcmdldC10ZXh0LXJvdGF0aW9uIix0eXBlOlMudGV4dFJvdGF0aW9uLHRyaWdnZXJzQm91bmRzOnouYW55fSx7bmFtZToidGFyZ2V0LXRleHQtbWFyZ2luLXgiLHR5cGU6Uy5iaWRpcmVjdGlvbmFsU2l6ZSx0cmlnZ2Vyc0JvdW5kczp6LmFueX0se25hbWU6InRhcmdldC10ZXh0LW1hcmdpbi15Iix0eXBlOlMuYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6ei5hbnl9LHtuYW1lOiJ0YXJnZXQtdGV4dC1vZmZzZXQiLHR5cGU6Uy5zaXplLHRyaWdnZXJzQm91bmRzOnouYW55fV0sYXQ9W3tuYW1lOiJmb250LWZhbWlseSIsdHlwZTpTLmZvbnRGYW1pbHksdHJpZ2dlcnNCb3VuZHM6ei5hbnl9LHtuYW1lOiJmb250LXN0eWxlIix0eXBlOlMuZm9udFN0eWxlLHRyaWdnZXJzQm91bmRzOnouYW55fSx7bmFtZToiZm9udC13ZWlnaHQiLHR5cGU6Uy5mb250V2VpZ2h0LHRyaWdnZXJzQm91bmRzOnouYW55fSx7bmFtZToiZm9udC1zaXplIix0eXBlOlMuc2l6ZSx0cmlnZ2Vyc0JvdW5kczp6LmFueX0se25hbWU6InRleHQtdHJhbnNmb3JtIix0eXBlOlMudGV4dFRyYW5zZm9ybSx0cmlnZ2Vyc0JvdW5kczp6LmFueX0se25hbWU6InRleHQtd3JhcCIsdHlwZTpTLnRleHRXcmFwLHRyaWdnZXJzQm91bmRzOnouYW55fSx7bmFtZToidGV4dC1vdmVyZmxvdy13cmFwIix0eXBlOlMudGV4dE92ZXJmbG93V3JhcCx0cmlnZ2Vyc0JvdW5kczp6LmFueX0se25hbWU6InRleHQtbWF4LXdpZHRoIix0eXBlOlMuc2l6ZSx0cmlnZ2Vyc0JvdW5kczp6LmFueX0se25hbWU6InRleHQtb3V0bGluZS13aWR0aCIsdHlwZTpTLnNpemUsdHJpZ2dlcnNCb3VuZHM6ei5hbnl9LHtuYW1lOiJsaW5lLWhlaWdodCIsdHlwZTpTLnBvc2l0aXZlTnVtYmVyLHRyaWdnZXJzQm91bmRzOnouYW55fV0sbHQ9W3tuYW1lOiJ0ZXh0LXZhbGlnbiIsdHlwZTpTLnZhbGlnbix0cmlnZ2Vyc0JvdW5kczp6LmFueX0se25hbWU6InRleHQtaGFsaWduIix0eXBlOlMuaGFsaWduLHRyaWdnZXJzQm91bmRzOnouYW55fSx7bmFtZToiY29sb3IiLHR5cGU6Uy5jb2xvcn0se25hbWU6InRleHQtb3V0bGluZS1jb2xvciIsdHlwZTpTLmNvbG9yfSx7bmFtZToidGV4dC1vdXRsaW5lLW9wYWNpdHkiLHR5cGU6Uy56ZXJvT25lTnVtYmVyfSx7bmFtZToidGV4dC1iYWNrZ3JvdW5kLWNvbG9yIix0eXBlOlMuY29sb3J9LHtuYW1lOiJ0ZXh0LWJhY2tncm91bmQtb3BhY2l0eSIsdHlwZTpTLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJ0ZXh0LWJhY2tncm91bmQtcGFkZGluZyIsdHlwZTpTLnNpemUsdHJpZ2dlcnNCb3VuZHM6ei5hbnl9LHtuYW1lOiJ0ZXh0LWJvcmRlci1vcGFjaXR5Iix0eXBlOlMuemVyb09uZU51bWJlcn0se25hbWU6InRleHQtYm9yZGVyLWNvbG9yIix0eXBlOlMuY29sb3J9LHtuYW1lOiJ0ZXh0LWJvcmRlci13aWR0aCIsdHlwZTpTLnNpemUsdHJpZ2dlcnNCb3VuZHM6ei5hbnl9LHtuYW1lOiJ0ZXh0LWJvcmRlci1zdHlsZSIsdHlwZTpTLmJvcmRlclN0eWxlLHRyaWdnZXJzQm91bmRzOnouYW55fSx7bmFtZToidGV4dC1iYWNrZ3JvdW5kLXNoYXBlIix0eXBlOlMudGV4dEJhY2tncm91bmRTaGFwZSx0cmlnZ2Vyc0JvdW5kczp6LmFueX0se25hbWU6InRleHQtanVzdGlmaWNhdGlvbiIsdHlwZTpTLmp1c3RpZmljYXRpb259XSxndD1be25hbWU6ImV2ZW50cyIsdHlwZTpTLmJvb2x9LHtuYW1lOiJ0ZXh0LWV2ZW50cyIsdHlwZTpTLmJvb2x9XSxMdD1be25hbWU6ImRpc3BsYXkiLHR5cGU6Uy5kaXNwbGF5LHRyaWdnZXJzWk9yZGVyOnouYW55LHRyaWdnZXJzQm91bmRzOnouYW55LHRyaWdnZXJzQm91bmRzT2ZQYXJhbGxlbEJlemllcnM6ITB9LHtuYW1lOiJ2aXNpYmlsaXR5Iix0eXBlOlMudmlzaWJpbGl0eSx0cmlnZ2Vyc1pPcmRlcjp6LmFueX0se25hbWU6Im9wYWNpdHkiLHR5cGU6Uy56ZXJvT25lTnVtYmVyLHRyaWdnZXJzWk9yZGVyOnouemVyb05vblplcm99LHtuYW1lOiJ0ZXh0LW9wYWNpdHkiLHR5cGU6Uy56ZXJvT25lTnVtYmVyfSx7bmFtZToibWluLXpvb21lZC1mb250LXNpemUiLHR5cGU6Uy5zaXplfSx7bmFtZToiei1jb21wb3VuZC1kZXB0aCIsdHlwZTpTLnpDb21wb3VuZERlcHRoLHRyaWdnZXJzWk9yZGVyOnouYW55fSx7bmFtZToiei1pbmRleC1jb21wYXJlIix0eXBlOlMuekluZGV4Q29tcGFyZSx0cmlnZ2Vyc1pPcmRlcjp6LmFueX0se25hbWU6InotaW5kZXgiLHR5cGU6Uy5ub25OZWdhdGl2ZUludCx0cmlnZ2Vyc1pPcmRlcjp6LmFueX1dLEV0PVt7bmFtZToib3ZlcmxheS1wYWRkaW5nIix0eXBlOlMuc2l6ZSx0cmlnZ2Vyc0JvdW5kczp6LmFueX0se25hbWU6Im92ZXJsYXktY29sb3IiLHR5cGU6Uy5jb2xvcn0se25hbWU6Im92ZXJsYXktb3BhY2l0eSIsdHlwZTpTLnplcm9PbmVOdW1iZXIsdHJpZ2dlcnNCb3VuZHM6ei56ZXJvTm9uWmVyb30se25hbWU6Im92ZXJsYXktc2hhcGUiLHR5cGU6Uy5vdmVybGF5U2hhcGUsdHJpZ2dlcnNCb3VuZHM6ei5hbnl9XSxEdD1be25hbWU6InVuZGVybGF5LXBhZGRpbmciLHR5cGU6Uy5zaXplLHRyaWdnZXJzQm91bmRzOnouYW55fSx7bmFtZToidW5kZXJsYXktY29sb3IiLHR5cGU6Uy5jb2xvcn0se25hbWU6InVuZGVybGF5LW9wYWNpdHkiLHR5cGU6Uy56ZXJvT25lTnVtYmVyLHRyaWdnZXJzQm91bmRzOnouemVyb05vblplcm99LHtuYW1lOiJ1bmRlcmxheS1zaGFwZSIsdHlwZTpTLm92ZXJsYXlTaGFwZSx0cmlnZ2Vyc0JvdW5kczp6LmFueX1dLEl0PVt7bmFtZToidHJhbnNpdGlvbi1wcm9wZXJ0eSIsdHlwZTpTLnByb3BMaXN0fSx7bmFtZToidHJhbnNpdGlvbi1kdXJhdGlvbiIsdHlwZTpTLnRpbWV9LHtuYW1lOiJ0cmFuc2l0aW9uLWRlbGF5Iix0eXBlOlMudGltZX0se25hbWU6InRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uIix0eXBlOlMuZWFzaW5nfV0senQ9ZnVuY3Rpb24ocHIsZnIpe3JldHVybiBmci52YWx1ZT09PSJsYWJlbCI/LXByLnBvb2xJbmRleCgpOmZyLnBmVmFsdWV9LHRlPVt7bmFtZToiaGVpZ2h0Iix0eXBlOlMubm9kZVNpemUsdHJpZ2dlcnNCb3VuZHM6ei5hbnksaGFzaE92ZXJyaWRlOnp0fSx7bmFtZToid2lkdGgiLHR5cGU6Uy5ub2RlU2l6ZSx0cmlnZ2Vyc0JvdW5kczp6LmFueSxoYXNoT3ZlcnJpZGU6enR9LHtuYW1lOiJzaGFwZSIsdHlwZTpTLm5vZGVTaGFwZSx0cmlnZ2Vyc0JvdW5kczp6LmFueX0se25hbWU6InNoYXBlLXBvbHlnb24tcG9pbnRzIix0eXBlOlMucG9seWdvblBvaW50TGlzdCx0cmlnZ2Vyc0JvdW5kczp6LmFueX0se25hbWU6ImJhY2tncm91bmQtY29sb3IiLHR5cGU6Uy5jb2xvcn0se25hbWU6ImJhY2tncm91bmQtZmlsbCIsdHlwZTpTLmZpbGx9LHtuYW1lOiJiYWNrZ3JvdW5kLW9wYWNpdHkiLHR5cGU6Uy56ZXJvT25lTnVtYmVyfSx7bmFtZToiYmFja2dyb3VuZC1ibGFja2VuIix0eXBlOlMubk9uZU9uZU51bWJlcn0se25hbWU6ImJhY2tncm91bmQtZ3JhZGllbnQtc3RvcC1jb2xvcnMiLHR5cGU6Uy5jb2xvcnN9LHtuYW1lOiJiYWNrZ3JvdW5kLWdyYWRpZW50LXN0b3AtcG9zaXRpb25zIix0eXBlOlMucGVyY2VudGFnZXN9LHtuYW1lOiJiYWNrZ3JvdW5kLWdyYWRpZW50LWRpcmVjdGlvbiIsdHlwZTpTLmdyYWRpZW50RGlyZWN0aW9ufSx7bmFtZToicGFkZGluZyIsdHlwZTpTLnNpemVNYXliZVBlcmNlbnQsdHJpZ2dlcnNCb3VuZHM6ei5hbnl9LHtuYW1lOiJwYWRkaW5nLXJlbGF0aXZlLXRvIix0eXBlOlMucGFkZGluZ1JlbGF0aXZlVG8sdHJpZ2dlcnNCb3VuZHM6ei5hbnl9LHtuYW1lOiJib3VuZHMtZXhwYW5zaW9uIix0eXBlOlMuYm91bmRzRXhwYW5zaW9uLHRyaWdnZXJzQm91bmRzOnouYW55fV0sWHQ9W3tuYW1lOiJib3JkZXItY29sb3IiLHR5cGU6Uy5jb2xvcn0se25hbWU6ImJvcmRlci1vcGFjaXR5Iix0eXBlOlMuemVyb09uZU51bWJlcn0se25hbWU6ImJvcmRlci13aWR0aCIsdHlwZTpTLnNpemUsdHJpZ2dlcnNCb3VuZHM6ei5hbnl9LHtuYW1lOiJib3JkZXItc3R5bGUiLHR5cGU6Uy5ib3JkZXJTdHlsZX1dLEh0PVt7bmFtZToiYmFja2dyb3VuZC1pbWFnZSIsdHlwZTpTLnVybHN9LHtuYW1lOiJiYWNrZ3JvdW5kLWltYWdlLWNyb3Nzb3JpZ2luIix0eXBlOlMuYmdDcm9zc09yaWdpbn0se25hbWU6ImJhY2tncm91bmQtaW1hZ2Utb3BhY2l0eSIsdHlwZTpTLnplcm9PbmVOdW1iZXJzfSx7bmFtZToiYmFja2dyb3VuZC1pbWFnZS1jb250YWlubWVudCIsdHlwZTpTLmJnQ29udGFpbm1lbnR9LHtuYW1lOiJiYWNrZ3JvdW5kLWltYWdlLXNtb290aGluZyIsdHlwZTpTLmJvb2xzfSx7bmFtZToiYmFja2dyb3VuZC1wb3NpdGlvbi14Iix0eXBlOlMuYmdQb3N9LHtuYW1lOiJiYWNrZ3JvdW5kLXBvc2l0aW9uLXkiLHR5cGU6Uy5iZ1Bvc30se25hbWU6ImJhY2tncm91bmQtd2lkdGgtcmVsYXRpdmUtdG8iLHR5cGU6Uy5iZ1JlbGF0aXZlVG99LHtuYW1lOiJiYWNrZ3JvdW5kLWhlaWdodC1yZWxhdGl2ZS10byIsdHlwZTpTLmJnUmVsYXRpdmVUb30se25hbWU6ImJhY2tncm91bmQtcmVwZWF0Iix0eXBlOlMuYmdSZXBlYXR9LHtuYW1lOiJiYWNrZ3JvdW5kLWZpdCIsdHlwZTpTLmJnRml0fSx7bmFtZToiYmFja2dyb3VuZC1jbGlwIix0eXBlOlMuYmdDbGlwfSx7bmFtZToiYmFja2dyb3VuZC13aWR0aCIsdHlwZTpTLmJnV0h9LHtuYW1lOiJiYWNrZ3JvdW5kLWhlaWdodCIsdHlwZTpTLmJnV0h9LHtuYW1lOiJiYWNrZ3JvdW5kLW9mZnNldC14Iix0eXBlOlMuYmdQb3N9LHtuYW1lOiJiYWNrZ3JvdW5kLW9mZnNldC15Iix0eXBlOlMuYmdQb3N9XSxpZT1be25hbWU6InBvc2l0aW9uIix0eXBlOlMucG9zaXRpb24sdHJpZ2dlcnNCb3VuZHM6ei5hbnl9LHtuYW1lOiJjb21wb3VuZC1zaXppbmctd3J0LWxhYmVscyIsdHlwZTpTLmNvbXBvdW5kSW5jbHVkZUxhYmVscyx0cmlnZ2Vyc0JvdW5kczp6LmFueX0se25hbWU6Im1pbi13aWR0aCIsdHlwZTpTLnNpemUsdHJpZ2dlcnNCb3VuZHM6ei5hbnl9LHtuYW1lOiJtaW4td2lkdGgtYmlhcy1sZWZ0Iix0eXBlOlMuc2l6ZU1heWJlUGVyY2VudCx0cmlnZ2Vyc0JvdW5kczp6LmFueX0se25hbWU6Im1pbi13aWR0aC1iaWFzLXJpZ2h0Iix0eXBlOlMuc2l6ZU1heWJlUGVyY2VudCx0cmlnZ2Vyc0JvdW5kczp6LmFueX0se25hbWU6Im1pbi1oZWlnaHQiLHR5cGU6Uy5zaXplLHRyaWdnZXJzQm91bmRzOnouYW55fSx7bmFtZToibWluLWhlaWdodC1iaWFzLXRvcCIsdHlwZTpTLnNpemVNYXliZVBlcmNlbnQsdHJpZ2dlcnNCb3VuZHM6ei5hbnl9LHtuYW1lOiJtaW4taGVpZ2h0LWJpYXMtYm90dG9tIix0eXBlOlMuc2l6ZU1heWJlUGVyY2VudCx0cmlnZ2Vyc0JvdW5kczp6LmFueX1dLFV0PVt7bmFtZToibGluZS1zdHlsZSIsdHlwZTpTLmxpbmVTdHlsZX0se25hbWU6ImxpbmUtY29sb3IiLHR5cGU6Uy5jb2xvcn0se25hbWU6ImxpbmUtZmlsbCIsdHlwZTpTLmZpbGx9LHtuYW1lOiJsaW5lLWNhcCIsdHlwZTpTLmxpbmVDYXB9LHtuYW1lOiJsaW5lLW9wYWNpdHkiLHR5cGU6Uy56ZXJvT25lTnVtYmVyfSx7bmFtZToibGluZS1kYXNoLXBhdHRlcm4iLHR5cGU6Uy5udW1iZXJzfSx7bmFtZToibGluZS1kYXNoLW9mZnNldCIsdHlwZTpTLm51bWJlcn0se25hbWU6ImxpbmUtZ3JhZGllbnQtc3RvcC1jb2xvcnMiLHR5cGU6Uy5jb2xvcnN9LHtuYW1lOiJsaW5lLWdyYWRpZW50LXN0b3AtcG9zaXRpb25zIix0eXBlOlMucGVyY2VudGFnZXN9LHtuYW1lOiJjdXJ2ZS1zdHlsZSIsdHlwZTpTLmN1cnZlU3R5bGUsdHJpZ2dlcnNCb3VuZHM6ei5hbnksdHJpZ2dlcnNCb3VuZHNPZlBhcmFsbGVsQmV6aWVyczohMH0se25hbWU6ImhheXN0YWNrLXJhZGl1cyIsdHlwZTpTLnplcm9PbmVOdW1iZXIsdHJpZ2dlcnNCb3VuZHM6ei5hbnl9LHtuYW1lOiJzb3VyY2UtZW5kcG9pbnQiLHR5cGU6Uy5lZGdlRW5kcG9pbnQsdHJpZ2dlcnNCb3VuZHM6ei5hbnl9LHtuYW1lOiJ0YXJnZXQtZW5kcG9pbnQiLHR5cGU6Uy5lZGdlRW5kcG9pbnQsdHJpZ2dlcnNCb3VuZHM6ei5hbnl9LHtuYW1lOiJjb250cm9sLXBvaW50LXN0ZXAtc2l6ZSIsdHlwZTpTLnNpemUsdHJpZ2dlcnNCb3VuZHM6ei5hbnl9LHtuYW1lOiJjb250cm9sLXBvaW50LWRpc3RhbmNlcyIsdHlwZTpTLmJpZGlyZWN0aW9uYWxTaXplcyx0cmlnZ2Vyc0JvdW5kczp6LmFueX0se25hbWU6ImNvbnRyb2wtcG9pbnQtd2VpZ2h0cyIsdHlwZTpTLm51bWJlcnMsdHJpZ2dlcnNCb3VuZHM6ei5hbnl9LHtuYW1lOiJzZWdtZW50LWRpc3RhbmNlcyIsdHlwZTpTLmJpZGlyZWN0aW9uYWxTaXplcyx0cmlnZ2Vyc0JvdW5kczp6LmFueX0se25hbWU6InNlZ21lbnQtd2VpZ2h0cyIsdHlwZTpTLm51bWJlcnMsdHJpZ2dlcnNCb3VuZHM6ei5hbnl9LHtuYW1lOiJ0YXhpLXR1cm4iLHR5cGU6Uy5iaWRpcmVjdGlvbmFsU2l6ZU1heWJlUGVyY2VudCx0cmlnZ2Vyc0JvdW5kczp6LmFueX0se25hbWU6InRheGktdHVybi1taW4tZGlzdGFuY2UiLHR5cGU6Uy5zaXplLHRyaWdnZXJzQm91bmRzOnouYW55fSx7bmFtZToidGF4aS1kaXJlY3Rpb24iLHR5cGU6Uy5heGlzRGlyZWN0aW9uLHRyaWdnZXJzQm91bmRzOnouYW55fSx7bmFtZToiZWRnZS1kaXN0YW5jZXMiLHR5cGU6Uy5lZGdlRGlzdGFuY2VzLHRyaWdnZXJzQm91bmRzOnouYW55fSx7bmFtZToiYXJyb3ctc2NhbGUiLHR5cGU6Uy5wb3NpdGl2ZU51bWJlcix0cmlnZ2Vyc0JvdW5kczp6LmFueX0se25hbWU6Imxvb3AtZGlyZWN0aW9uIix0eXBlOlMuYW5nbGUsdHJpZ2dlcnNCb3VuZHM6ei5hbnl9LHtuYW1lOiJsb29wLXN3ZWVwIix0eXBlOlMuYW5nbGUsdHJpZ2dlcnNCb3VuZHM6ei5hbnl9LHtuYW1lOiJzb3VyY2UtZGlzdGFuY2UtZnJvbS1ub2RlIix0eXBlOlMuc2l6ZSx0cmlnZ2Vyc0JvdW5kczp6LmFueX0se25hbWU6InRhcmdldC1kaXN0YW5jZS1mcm9tLW5vZGUiLHR5cGU6Uy5zaXplLHRyaWdnZXJzQm91bmRzOnouYW55fV0sZmU9W3tuYW1lOiJnaG9zdCIsdHlwZTpTLmJvb2wsdHJpZ2dlcnNCb3VuZHM6ei5hbnl9LHtuYW1lOiJnaG9zdC1vZmZzZXQteCIsdHlwZTpTLmJpZGlyZWN0aW9uYWxTaXplLHRyaWdnZXJzQm91bmRzOnouYW55fSx7bmFtZToiZ2hvc3Qtb2Zmc2V0LXkiLHR5cGU6Uy5iaWRpcmVjdGlvbmFsU2l6ZSx0cmlnZ2Vyc0JvdW5kczp6LmFueX0se25hbWU6Imdob3N0LW9wYWNpdHkiLHR5cGU6Uy56ZXJvT25lTnVtYmVyfV0sZ2U9W3tuYW1lOiJzZWxlY3Rpb24tYm94LWNvbG9yIix0eXBlOlMuY29sb3J9LHtuYW1lOiJzZWxlY3Rpb24tYm94LW9wYWNpdHkiLHR5cGU6Uy56ZXJvT25lTnVtYmVyfSx7bmFtZToic2VsZWN0aW9uLWJveC1ib3JkZXItY29sb3IiLHR5cGU6Uy5jb2xvcn0se25hbWU6InNlbGVjdGlvbi1ib3gtYm9yZGVyLXdpZHRoIix0eXBlOlMuc2l6ZX0se25hbWU6ImFjdGl2ZS1iZy1jb2xvciIsdHlwZTpTLmNvbG9yfSx7bmFtZToiYWN0aXZlLWJnLW9wYWNpdHkiLHR5cGU6Uy56ZXJvT25lTnVtYmVyfSx7bmFtZToiYWN0aXZlLWJnLXNpemUiLHR5cGU6Uy5zaXplfSx7bmFtZToib3V0c2lkZS10ZXh0dXJlLWJnLWNvbG9yIix0eXBlOlMuY29sb3J9LHtuYW1lOiJvdXRzaWRlLXRleHR1cmUtYmctb3BhY2l0eSIsdHlwZTpTLnplcm9PbmVOdW1iZXJ9XSxzZT1bXTtWZi5waWVCYWNrZ3JvdW5kTj0xNixzZS5wdXNoKHtuYW1lOiJwaWUtc2l6ZSIsdHlwZTpTLnNpemVNYXliZVBlcmNlbnR9KTtmb3IodmFyIE5lPTE7TmU8PVZmLnBpZUJhY2tncm91bmROO05lKyspc2UucHVzaCh7bmFtZToicGllLSIrTmUrIi1iYWNrZ3JvdW5kLWNvbG9yIix0eXBlOlMuY29sb3J9KSxzZS5wdXNoKHtuYW1lOiJwaWUtIitOZSsiLWJhY2tncm91bmQtc2l6ZSIsdHlwZTpTLnBlcmNlbnR9KSxzZS5wdXNoKHtuYW1lOiJwaWUtIitOZSsiLWJhY2tncm91bmQtb3BhY2l0eSIsdHlwZTpTLnplcm9PbmVOdW1iZXJ9KTt2YXIgcGU9W10sZ249VmYuYXJyb3dQcmVmaXhlcz1bInNvdXJjZSIsIm1pZC1zb3VyY2UiLCJ0YXJnZXQiLCJtaWQtdGFyZ2V0Il07W3tuYW1lOiJhcnJvdy1zaGFwZSIsdHlwZTpTLmFycm93U2hhcGUsdHJpZ2dlcnNCb3VuZHM6ei5hbnl9LHtuYW1lOiJhcnJvdy1jb2xvciIsdHlwZTpTLmNvbG9yfSx7bmFtZToiYXJyb3ctZmlsbCIsdHlwZTpTLmFycm93RmlsbH1dLmZvckVhY2goZnVuY3Rpb24oYm4pe2duLmZvckVhY2goZnVuY3Rpb24ocHIpe3ZhciBmcj1wcisiLSIrYm4ubmFtZSxyaT1ibi50eXBlLF9pPWJuLnRyaWdnZXJzQm91bmRzO3BlLnB1c2goe25hbWU6ZnIsdHlwZTpyaSx0cmlnZ2Vyc0JvdW5kczpfaX0pfSl9LHt9KTt2YXIgamU9VmYucHJvcGVydGllcz1bXS5jb25jYXQoZ3QsSXQsTHQsRXQsRHQsZmUsbHQsYXQsVixVLGV0LHRlLFh0LEh0LHNlLGllLFV0LHBlLGdlKSxHZT1WZi5wcm9wZXJ0eUdyb3Vwcz17YmVoYXZpb3I6Z3QsdHJhbnNpdGlvbjpJdCx2aXNpYmlsaXR5Okx0LG92ZXJsYXk6RXQsdW5kZXJsYXk6RHQsZ2hvc3Q6ZmUsY29tbW9uTGFiZWw6bHQsbGFiZWxEaW1lbnNpb25zOmF0LG1haW5MYWJlbDpWLHNvdXJjZUxhYmVsOlUsdGFyZ2V0TGFiZWw6ZXQsbm9kZUJvZHk6dGUsbm9kZUJvcmRlcjpYdCxiYWNrZ3JvdW5kSW1hZ2U6SHQscGllOnNlLGNvbXBvdW5kOmllLGVkZ2VMaW5lOlV0LGVkZ2VBcnJvdzpwZSxjb3JlOmdlfSx4bj1WZi5wcm9wZXJ0eUdyb3VwTmFtZXM9e30sRG49VmYucHJvcGVydHlHcm91cEtleXM9T2JqZWN0LmtleXMoR2UpO0RuLmZvckVhY2goZnVuY3Rpb24oYm4pe3huW2JuXT1HZVtibl0ubWFwKGZ1bmN0aW9uKHByKXtyZXR1cm4gcHIubmFtZX0pLEdlW2JuXS5mb3JFYWNoKGZ1bmN0aW9uKHByKXtyZXR1cm4gcHIuZ3JvdXBLZXk9Ym59KX0pO3ZhciBYbj1WZi5hbGlhc2VzPVt7bmFtZToiY29udGVudCIscG9pbnRzVG86ImxhYmVsIn0se25hbWU6ImNvbnRyb2wtcG9pbnQtZGlzdGFuY2UiLHBvaW50c1RvOiJjb250cm9sLXBvaW50LWRpc3RhbmNlcyJ9LHtuYW1lOiJjb250cm9sLXBvaW50LXdlaWdodCIscG9pbnRzVG86ImNvbnRyb2wtcG9pbnQtd2VpZ2h0cyJ9LHtuYW1lOiJlZGdlLXRleHQtcm90YXRpb24iLHBvaW50c1RvOiJ0ZXh0LXJvdGF0aW9uIn0se25hbWU6InBhZGRpbmctbGVmdCIscG9pbnRzVG86InBhZGRpbmcifSx7bmFtZToicGFkZGluZy1yaWdodCIscG9pbnRzVG86InBhZGRpbmcifSx7bmFtZToicGFkZGluZy10b3AiLHBvaW50c1RvOiJwYWRkaW5nIn0se25hbWU6InBhZGRpbmctYm90dG9tIixwb2ludHNUbzoicGFkZGluZyJ9XTtWZi5wcm9wZXJ0eU5hbWVzPWplLm1hcChmdW5jdGlvbihibil7cmV0dXJuIGJuLm5hbWV9KTtmb3IodmFyIENuPTA7Q248amUubGVuZ3RoO0NuKyspe3ZhciBZbj1qZVtDbl07amVbWW4ubmFtZV09WW59Zm9yKHZhciBycj0wO3JyPFhuLmxlbmd0aDtycisrKXt2YXIgd3I9WG5bcnJdLHVyPWplW3dyLnBvaW50c1RvXSxlcj17bmFtZTp3ci5uYW1lLGFsaWFzOiEwLHBvaW50c1RvOnVyfTtqZS5wdXNoKGVyKSxqZVt3ci5uYW1lXT1lcn19KSgpLFZmLmdldERlZmF1bHRQcm9wZXJ0eT1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5nZXREZWZhdWx0UHJvcGVydGllcygpW3ldfSxWZi5nZXREZWZhdWx0UHJvcGVydGllcz1mdW5jdGlvbigpe3ZhciB5PXRoaXMuX3ByaXZhdGU7aWYoeS5kZWZhdWx0UHJvcGVydGllcyE9bnVsbClyZXR1cm4geS5kZWZhdWx0UHJvcGVydGllcztmb3IodmFyIGc9Zm4oeyJzZWxlY3Rpb24tYm94LWNvbG9yIjoiI2RkZCIsInNlbGVjdGlvbi1ib3gtb3BhY2l0eSI6LjY1LCJzZWxlY3Rpb24tYm94LWJvcmRlci1jb2xvciI6IiNhYWEiLCJzZWxlY3Rpb24tYm94LWJvcmRlci13aWR0aCI6MSwiYWN0aXZlLWJnLWNvbG9yIjoiYmxhY2siLCJhY3RpdmUtYmctb3BhY2l0eSI6LjE1LCJhY3RpdmUtYmctc2l6ZSI6MzAsIm91dHNpZGUtdGV4dHVyZS1iZy1jb2xvciI6IiMwMDAiLCJvdXRzaWRlLXRleHR1cmUtYmctb3BhY2l0eSI6LjEyNSxldmVudHM6InllcyIsInRleHQtZXZlbnRzIjoibm8iLCJ0ZXh0LXZhbGlnbiI6InRvcCIsInRleHQtaGFsaWduIjoiY2VudGVyIiwidGV4dC1qdXN0aWZpY2F0aW9uIjoiYXV0byIsImxpbmUtaGVpZ2h0IjoxLGNvbG9yOiIjMDAwIiwidGV4dC1vdXRsaW5lLWNvbG9yIjoiIzAwMCIsInRleHQtb3V0bGluZS13aWR0aCI6MCwidGV4dC1vdXRsaW5lLW9wYWNpdHkiOjEsInRleHQtb3BhY2l0eSI6MSwidGV4dC1kZWNvcmF0aW9uIjoibm9uZSIsInRleHQtdHJhbnNmb3JtIjoibm9uZSIsInRleHQtd3JhcCI6Im5vbmUiLCJ0ZXh0LW92ZXJmbG93LXdyYXAiOiJ3aGl0ZXNwYWNlIiwidGV4dC1tYXgtd2lkdGgiOjk5OTksInRleHQtYmFja2dyb3VuZC1jb2xvciI6IiMwMDAiLCJ0ZXh0LWJhY2tncm91bmQtb3BhY2l0eSI6MCwidGV4dC1iYWNrZ3JvdW5kLXNoYXBlIjoicmVjdGFuZ2xlIiwidGV4dC1iYWNrZ3JvdW5kLXBhZGRpbmciOjAsInRleHQtYm9yZGVyLW9wYWNpdHkiOjAsInRleHQtYm9yZGVyLXdpZHRoIjowLCJ0ZXh0LWJvcmRlci1zdHlsZSI6InNvbGlkIiwidGV4dC1ib3JkZXItY29sb3IiOiIjMDAwIiwiZm9udC1mYW1pbHkiOiJIZWx2ZXRpY2EgTmV1ZSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmIiwiZm9udC1zdHlsZSI6Im5vcm1hbCIsImZvbnQtd2VpZ2h0Ijoibm9ybWFsIiwiZm9udC1zaXplIjoxNiwibWluLXpvb21lZC1mb250LXNpemUiOjAsInRleHQtcm90YXRpb24iOiJub25lIiwic291cmNlLXRleHQtcm90YXRpb24iOiJub25lIiwidGFyZ2V0LXRleHQtcm90YXRpb24iOiJub25lIix2aXNpYmlsaXR5OiJ2aXNpYmxlIixkaXNwbGF5OiJlbGVtZW50IixvcGFjaXR5OjEsInotY29tcG91bmQtZGVwdGgiOiJhdXRvIiwiei1pbmRleC1jb21wYXJlIjoiYXV0byIsInotaW5kZXgiOjAsbGFiZWw6IiIsInRleHQtbWFyZ2luLXgiOjAsInRleHQtbWFyZ2luLXkiOjAsInNvdXJjZS1sYWJlbCI6IiIsInNvdXJjZS10ZXh0LW9mZnNldCI6MCwic291cmNlLXRleHQtbWFyZ2luLXgiOjAsInNvdXJjZS10ZXh0LW1hcmdpbi15IjowLCJ0YXJnZXQtbGFiZWwiOiIiLCJ0YXJnZXQtdGV4dC1vZmZzZXQiOjAsInRhcmdldC10ZXh0LW1hcmdpbi14IjowLCJ0YXJnZXQtdGV4dC1tYXJnaW4teSI6MCwib3ZlcmxheS1vcGFjaXR5IjowLCJvdmVybGF5LWNvbG9yIjoiIzAwMCIsIm92ZXJsYXktcGFkZGluZyI6MTAsIm92ZXJsYXktc2hhcGUiOiJyb3VuZC1yZWN0YW5nbGUiLCJ1bmRlcmxheS1vcGFjaXR5IjowLCJ1bmRlcmxheS1jb2xvciI6IiMwMDAiLCJ1bmRlcmxheS1wYWRkaW5nIjoxMCwidW5kZXJsYXktc2hhcGUiOiJyb3VuZC1yZWN0YW5nbGUiLCJ0cmFuc2l0aW9uLXByb3BlcnR5Ijoibm9uZSIsInRyYW5zaXRpb24tZHVyYXRpb24iOjAsInRyYW5zaXRpb24tZGVsYXkiOjAsInRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uIjoibGluZWFyIiwiYmFja2dyb3VuZC1ibGFja2VuIjowLCJiYWNrZ3JvdW5kLWNvbG9yIjoiIzk5OSIsImJhY2tncm91bmQtZmlsbCI6InNvbGlkIiwiYmFja2dyb3VuZC1vcGFjaXR5IjoxLCJiYWNrZ3JvdW5kLWltYWdlIjoibm9uZSIsImJhY2tncm91bmQtaW1hZ2UtY3Jvc3NvcmlnaW4iOiJhbm9ueW1vdXMiLCJiYWNrZ3JvdW5kLWltYWdlLW9wYWNpdHkiOjEsImJhY2tncm91bmQtaW1hZ2UtY29udGFpbm1lbnQiOiJpbnNpZGUiLCJiYWNrZ3JvdW5kLWltYWdlLXNtb290aGluZyI6InllcyIsImJhY2tncm91bmQtcG9zaXRpb24teCI6IjUwJSIsImJhY2tncm91bmQtcG9zaXRpb24teSI6IjUwJSIsImJhY2tncm91bmQtb2Zmc2V0LXgiOjAsImJhY2tncm91bmQtb2Zmc2V0LXkiOjAsImJhY2tncm91bmQtd2lkdGgtcmVsYXRpdmUtdG8iOiJpbmNsdWRlLXBhZGRpbmciLCJiYWNrZ3JvdW5kLWhlaWdodC1yZWxhdGl2ZS10byI6ImluY2x1ZGUtcGFkZGluZyIsImJhY2tncm91bmQtcmVwZWF0Ijoibm8tcmVwZWF0IiwiYmFja2dyb3VuZC1maXQiOiJub25lIiwiYmFja2dyb3VuZC1jbGlwIjoibm9kZSIsImJhY2tncm91bmQtd2lkdGgiOiJhdXRvIiwiYmFja2dyb3VuZC1oZWlnaHQiOiJhdXRvIiwiYm9yZGVyLWNvbG9yIjoiIzAwMCIsImJvcmRlci1vcGFjaXR5IjoxLCJib3JkZXItd2lkdGgiOjAsImJvcmRlci1zdHlsZSI6InNvbGlkIixoZWlnaHQ6MzAsd2lkdGg6MzAsc2hhcGU6ImVsbGlwc2UiLCJzaGFwZS1wb2x5Z29uLXBvaW50cyI6Ii0xLCAtMSwgICAxLCAtMSwgICAxLCAxLCAgIC0xLCAxIiwiYm91bmRzLWV4cGFuc2lvbiI6MCwiYmFja2dyb3VuZC1ncmFkaWVudC1kaXJlY3Rpb24iOiJ0by1ib3R0b20iLCJiYWNrZ3JvdW5kLWdyYWRpZW50LXN0b3AtY29sb3JzIjoiIzk5OSIsImJhY2tncm91bmQtZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMiOiIwJSIsZ2hvc3Q6Im5vIiwiZ2hvc3Qtb2Zmc2V0LXkiOjAsImdob3N0LW9mZnNldC14IjowLCJnaG9zdC1vcGFjaXR5IjowLHBhZGRpbmc6MCwicGFkZGluZy1yZWxhdGl2ZS10byI6IndpZHRoIixwb3NpdGlvbjoib3JpZ2luIiwiY29tcG91bmQtc2l6aW5nLXdydC1sYWJlbHMiOiJpbmNsdWRlIiwibWluLXdpZHRoIjowLCJtaW4td2lkdGgtYmlhcy1sZWZ0IjowLCJtaW4td2lkdGgtYmlhcy1yaWdodCI6MCwibWluLWhlaWdodCI6MCwibWluLWhlaWdodC1iaWFzLXRvcCI6MCwibWluLWhlaWdodC1iaWFzLWJvdHRvbSI6MH0seyJwaWUtc2l6ZSI6IjEwMCUifSxbe25hbWU6InBpZS17e2l9fS1iYWNrZ3JvdW5kLWNvbG9yIix2YWx1ZToiYmxhY2sifSx7bmFtZToicGllLXt7aX19LWJhY2tncm91bmQtc2l6ZSIsdmFsdWU6IjAlIn0se25hbWU6InBpZS17e2l9fS1iYWNrZ3JvdW5kLW9wYWNpdHkiLHZhbHVlOjF9XS5yZWR1Y2UoZnVuY3Rpb24oeixTKXtmb3IodmFyIFY9MTtWPD1WZi5waWVCYWNrZ3JvdW5kTjtWKyspe3ZhciBVPVMubmFtZS5yZXBsYWNlKCJ7e2l9fSIsViksZXQ9Uy52YWx1ZTt6W1VdPWV0fXJldHVybiB6fSx7fSkseyJsaW5lLXN0eWxlIjoic29saWQiLCJsaW5lLWNvbG9yIjoiIzk5OSIsImxpbmUtZmlsbCI6InNvbGlkIiwibGluZS1jYXAiOiJidXR0IiwibGluZS1vcGFjaXR5IjoxLCJsaW5lLWdyYWRpZW50LXN0b3AtY29sb3JzIjoiIzk5OSIsImxpbmUtZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMiOiIwJSIsImNvbnRyb2wtcG9pbnQtc3RlcC1zaXplIjo0MCwiY29udHJvbC1wb2ludC13ZWlnaHRzIjouNSwic2VnbWVudC13ZWlnaHRzIjouNSwic2VnbWVudC1kaXN0YW5jZXMiOjIwLCJ0YXhpLXR1cm4iOiI1MCUiLCJ0YXhpLXR1cm4tbWluLWRpc3RhbmNlIjoxMCwidGF4aS1kaXJlY3Rpb24iOiJhdXRvIiwiZWRnZS1kaXN0YW5jZXMiOiJpbnRlcnNlY3Rpb24iLCJjdXJ2ZS1zdHlsZSI6ImhheXN0YWNrIiwiaGF5c3RhY2stcmFkaXVzIjowLCJhcnJvdy1zY2FsZSI6MSwibG9vcC1kaXJlY3Rpb24iOiItNDVkZWciLCJsb29wLXN3ZWVwIjoiLTkwZGVnIiwic291cmNlLWRpc3RhbmNlLWZyb20tbm9kZSI6MCwidGFyZ2V0LWRpc3RhbmNlLWZyb20tbm9kZSI6MCwic291cmNlLWVuZHBvaW50Ijoib3V0c2lkZS10by1ub2RlIiwidGFyZ2V0LWVuZHBvaW50Ijoib3V0c2lkZS10by1ub2RlIiwibGluZS1kYXNoLXBhdHRlcm4iOls2LDNdLCJsaW5lLWRhc2gtb2Zmc2V0IjowfSxbe25hbWU6ImFycm93LXNoYXBlIix2YWx1ZToibm9uZSJ9LHtuYW1lOiJhcnJvdy1jb2xvciIsdmFsdWU6IiM5OTkifSx7bmFtZToiYXJyb3ctZmlsbCIsdmFsdWU6ImZpbGxlZCJ9XS5yZWR1Y2UoZnVuY3Rpb24oeixTKXtyZXR1cm4gVmYuYXJyb3dQcmVmaXhlcy5mb3JFYWNoKGZ1bmN0aW9uKFYpe3ZhciBVPVYrIi0iK1MubmFtZSxldD1TLnZhbHVlO3pbVV09ZXR9KSx6fSx7fSkpLHg9e30sVD0wO1Q8dGhpcy5wcm9wZXJ0aWVzLmxlbmd0aDtUKyspe3ZhciBMPXRoaXMucHJvcGVydGllc1tUXTtpZighTC5wb2ludHNUbyl7dmFyIEk9TC5uYW1lLE89Z1tJXSwkPXRoaXMucGFyc2UoSSxPKTt4W0ldPSR9fXJldHVybiB5LmRlZmF1bHRQcm9wZXJ0aWVzPXgseS5kZWZhdWx0UHJvcGVydGllc30sVmYuYWRkRGVmYXVsdFN0eWxlc2hlZXQ9ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdG9yKCI6cGFyZW50IikuY3NzKHtzaGFwZToicmVjdGFuZ2xlIixwYWRkaW5nOjEwLCJiYWNrZ3JvdW5kLWNvbG9yIjoiI2VlZSIsImJvcmRlci1jb2xvciI6IiNjY2MiLCJib3JkZXItd2lkdGgiOjF9KS5zZWxlY3RvcigiZWRnZSIpLmNzcyh7d2lkdGg6M30pLnNlbGVjdG9yKCI6bG9vcCIpLmNzcyh7ImN1cnZlLXN0eWxlIjoiYmV6aWVyIn0pLnNlbGVjdG9yKCJlZGdlOmNvbXBvdW5kIikuY3NzKHsiY3VydmUtc3R5bGUiOiJiZXppZXIiLCJzb3VyY2UtZW5kcG9pbnQiOiJvdXRzaWRlLXRvLWxpbmUiLCJ0YXJnZXQtZW5kcG9pbnQiOiJvdXRzaWRlLXRvLWxpbmUifSkuc2VsZWN0b3IoIjpzZWxlY3RlZCIpLmNzcyh7ImJhY2tncm91bmQtY29sb3IiOiIjMDE2OUQ5IiwibGluZS1jb2xvciI6IiMwMTY5RDkiLCJzb3VyY2UtYXJyb3ctY29sb3IiOiIjMDE2OUQ5IiwidGFyZ2V0LWFycm93LWNvbG9yIjoiIzAxNjlEOSIsIm1pZC1zb3VyY2UtYXJyb3ctY29sb3IiOiIjMDE2OUQ5IiwibWlkLXRhcmdldC1hcnJvdy1jb2xvciI6IiMwMTY5RDkifSkuc2VsZWN0b3IoIjpwYXJlbnQ6c2VsZWN0ZWQiKS5jc3MoeyJiYWNrZ3JvdW5kLWNvbG9yIjoiI0NDRTFGOSIsImJvcmRlci1jb2xvciI6IiNhZWM4ZTUifSkuc2VsZWN0b3IoIjphY3RpdmUiKS5jc3MoeyJvdmVybGF5LWNvbG9yIjoiYmxhY2siLCJvdmVybGF5LXBhZGRpbmciOjEwLCJvdmVybGF5LW9wYWNpdHkiOi4yNX0pLHRoaXMuZGVmYXVsdExlbmd0aD10aGlzLmxlbmd0aH07dmFyIGxUPXt9O2xULnBhcnNlPWZ1bmN0aW9uKHksZyx4LFQpe3ZhciBMPXRoaXM7aWYoa3QoZykpcmV0dXJuIEwucGFyc2VJbXBsV2Fybih5LGcseCxUKTt2YXIgST1UPT09Im1hcHBpbmcifHxUPT09ITB8fFQ9PT0hMXx8VD09bnVsbD8iZG9udGNhcmUiOlQsTz14PyJ0IjoiZiIsJD0iIitnLHo9TDkoeSwkLE8sSSksUz1MLnByb3BDYWNoZT1MLnByb3BDYWNoZXx8W10sVjtyZXR1cm4oVj1TW3pdKXx8KFY9U1t6XT1MLnBhcnNlSW1wbFdhcm4oeSxnLHgsVCkpLCh4fHxUPT09Im1hcHBpbmciKSYmKFY9cWIoViksViYmKFYudmFsdWU9cWIoVi52YWx1ZSkpKSxWfSxsVC5wYXJzZUltcGxXYXJuPWZ1bmN0aW9uKHksZyx4LFQpe3ZhciBMPXRoaXMucGFyc2VJbXBsKHksZyx4LFQpO3JldHVybiFMJiZnIT1udWxsJiZubygiVGhlIHN0eWxlIHByb3BlcnR5IGAiLmNvbmNhdCh5LCI6ICIpLmNvbmNhdChnLCJgIGlzIGludmFsaWQiKSksTCYmKEwubmFtZT09PSJ3aWR0aCJ8fEwubmFtZT09PSJoZWlnaHQiKSYmZz09PSJsYWJlbCImJm5vKCJUaGUgc3R5bGUgdmFsdWUgb2YgYGxhYmVsYCBpcyBkZXByZWNhdGVkIGZvciBgIitMLm5hbWUrImAiKSxMfSxsVC5wYXJzZUltcGw9ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEw9dGhpczt5PXFlKHkpO3ZhciBJPUwucHJvcGVydGllc1t5XSxPPWcsJD1MLnR5cGVzO2lmKCFJfHxnPT09dm9pZCAwKXJldHVybiBudWxsO0kuYWxpYXMmJihJPUkucG9pbnRzVG8seT1JLm5hbWUpO3ZhciB6PVR0KGcpO3omJihnPWcudHJpbSgpKTt2YXIgUz1JLnR5cGU7aWYoIVMpcmV0dXJuIG51bGw7aWYoeCYmKGc9PT0iInx8Zz09PW51bGwpKXJldHVybntuYW1lOnksdmFsdWU6ZyxieXBhc3M6ITAsZGVsZXRlQnlwYXNzOiEwfTtpZihrdChnKSlyZXR1cm57bmFtZTp5LHZhbHVlOmcsc3RyVmFsdWU6ImZuIixtYXBwZWQ6JC5mbixieXBhc3M6eH07dmFyIFYsVTtpZighKCF6fHxUfHxnLmxlbmd0aDw3fHxnWzFdIT09ImEiKSl7aWYoZy5sZW5ndGg+PTcmJmdbMF09PT0iZCImJihWPW5ldyBSZWdFeHAoJC5kYXRhLnJlZ2V4KS5leGVjKGcpKSl7aWYoeClyZXR1cm4hMTt2YXIgZXQ9JC5kYXRhO3JldHVybntuYW1lOnksdmFsdWU6VixzdHJWYWx1ZToiIitnLG1hcHBlZDpldCxmaWVsZDpWWzFdLGJ5cGFzczp4fX1lbHNlIGlmKGcubGVuZ3RoPj0xMCYmZ1swXT09PSJtIiYmKFU9bmV3IFJlZ0V4cCgkLm1hcERhdGEucmVnZXgpLmV4ZWMoZykpKXtpZih4fHxTLm11bHRpcGxlKXJldHVybiExO3ZhciBhdD0kLm1hcERhdGE7aWYoIShTLmNvbG9yfHxTLm51bWJlcikpcmV0dXJuITE7dmFyIGx0PXRoaXMucGFyc2UoeSxVWzRdKTtpZighbHR8fGx0Lm1hcHBlZClyZXR1cm4hMTt2YXIgZ3Q9dGhpcy5wYXJzZSh5LFVbNV0pO2lmKCFndHx8Z3QubWFwcGVkKXJldHVybiExO2lmKGx0LnBmVmFsdWU9PT1ndC5wZlZhbHVlfHxsdC5zdHJWYWx1ZT09PWd0LnN0clZhbHVlKXJldHVybiBubygiYCIreSsiOiAiK2crImAgaXMgbm90IGEgdmFsaWQgbWFwcGVyIGJlY2F1c2UgdGhlIG91dHB1dCByYW5nZSBpcyB6ZXJvOyBjb252ZXJ0aW5nIHRvIGAiK3krIjogIitsdC5zdHJWYWx1ZSsiYCIpLHRoaXMucGFyc2UoeSxsdC5zdHJWYWx1ZSk7aWYoUy5jb2xvcil7dmFyIEx0PWx0LnZhbHVlLEV0PWd0LnZhbHVlLER0PUx0WzBdPT09RXRbMF0mJkx0WzFdPT09RXRbMV0mJkx0WzJdPT09RXRbMl0mJihMdFszXT09PUV0WzNdfHwoTHRbM109PW51bGx8fEx0WzNdPT09MSkmJihFdFszXT09bnVsbHx8RXRbM109PT0xKSk7aWYoRHQpcmV0dXJuITF9cmV0dXJue25hbWU6eSx2YWx1ZTpVLHN0clZhbHVlOiIiK2csbWFwcGVkOmF0LGZpZWxkOlVbMV0sZmllbGRNaW46cGFyc2VGbG9hdChVWzJdKSxmaWVsZE1heDpwYXJzZUZsb2F0KFVbM10pLHZhbHVlTWluOmx0LnZhbHVlLHZhbHVlTWF4Omd0LnZhbHVlLGJ5cGFzczp4fX19aWYoUy5tdWx0aXBsZSYmVCE9PSJtdWx0aXBsZSIpe3ZhciBJdDtpZih6P0l0PWcuc3BsaXQoL1xzKy8pOm10KGcpP0l0PWc6SXQ9W2ddLFMuZXZlbk11bHRpcGxlJiZJdC5sZW5ndGglMiE9PTApcmV0dXJuIG51bGw7Zm9yKHZhciB6dD1bXSx0ZT1bXSxYdD1bXSxIdD0iIixpZT0hMSxVdD0wO1V0PEl0Lmxlbmd0aDtVdCsrKXt2YXIgZmU9TC5wYXJzZSh5LEl0W1V0XSx4LCJtdWx0aXBsZSIpO2llPWllfHxUdChmZS52YWx1ZSksenQucHVzaChmZS52YWx1ZSksWHQucHVzaChmZS5wZlZhbHVlIT1udWxsP2ZlLnBmVmFsdWU6ZmUudmFsdWUpLHRlLnB1c2goZmUudW5pdHMpLEh0Kz0oVXQ+MD8iICI6IiIpK2ZlLnN0clZhbHVlfXJldHVybiBTLnZhbGlkYXRlJiYhUy52YWxpZGF0ZSh6dCx0ZSk/bnVsbDpTLnNpbmdsZUVudW0mJmllP3p0Lmxlbmd0aD09PTEmJlR0KHp0WzBdKT97bmFtZTp5LHZhbHVlOnp0WzBdLHN0clZhbHVlOnp0WzBdLGJ5cGFzczp4fTpudWxsOntuYW1lOnksdmFsdWU6enQscGZWYWx1ZTpYdCxzdHJWYWx1ZTpIdCxieXBhc3M6eCx1bml0czp0ZX19dmFyIGdlPWZ1bmN0aW9uKCl7Zm9yKHZhciBmcj0wO2ZyPFMuZW51bXMubGVuZ3RoO2ZyKyspe3ZhciByaT1TLmVudW1zW2ZyXTtpZihyaT09PWcpcmV0dXJue25hbWU6eSx2YWx1ZTpnLHN0clZhbHVlOiIiK2csYnlwYXNzOnh9fXJldHVybiBudWxsfTtpZihTLm51bWJlcil7dmFyIHNlLE5lPSJweCI7aWYoUy51bml0cyYmKHNlPVMudW5pdHMpLFMuaW1wbGljaXRVbml0cyYmKE5lPVMuaW1wbGljaXRVbml0cyksIVMudW5pdGxlc3MpaWYoeil7dmFyIHBlPSJweHxlbSIrKFMuYWxsb3dQZXJjZW50PyJ8XFwlIjoiIik7c2UmJihwZT1zZSk7dmFyIGduPWcubWF0Y2goIl4oIitBZSsiKSgiK3BlKyIpPyQiKTtnbiYmKGc9Z25bMV0sc2U9Z25bMl18fE5lKX1lbHNlKCFzZXx8Uy5pbXBsaWNpdFVuaXRzKSYmKHNlPU5lKTtpZihnPXBhcnNlRmxvYXQoZyksaXNOYU4oZykmJlMuZW51bXM9PT12b2lkIDApcmV0dXJuIG51bGw7aWYoaXNOYU4oZykmJlMuZW51bXMhPT12b2lkIDApcmV0dXJuIGc9TyxnZSgpO2lmKFMuaW50ZWdlciYmIXh0KGcpfHxTLm1pbiE9PXZvaWQgMCYmKGc8Uy5taW58fFMuc3RyaWN0TWluJiZnPT09Uy5taW4pfHxTLm1heCE9PXZvaWQgMCYmKGc+Uy5tYXh8fFMuc3RyaWN0TWF4JiZnPT09Uy5tYXgpKXJldHVybiBudWxsO3ZhciBqZT17bmFtZTp5LHZhbHVlOmcsc3RyVmFsdWU6IiIrZysoc2V8fCIiKSx1bml0czpzZSxieXBhc3M6eH07cmV0dXJuIFMudW5pdGxlc3N8fHNlIT09InB4IiYmc2UhPT0iZW0iP2plLnBmVmFsdWU9ZzpqZS5wZlZhbHVlPXNlPT09InB4Inx8IXNlP2c6dGhpcy5nZXRFbVNpemVJblBpeGVscygpKmcsKHNlPT09Im1zInx8c2U9PT0icyIpJiYoamUucGZWYWx1ZT1zZT09PSJtcyI/ZzoxZTMqZyksKHNlPT09ImRlZyJ8fHNlPT09InJhZCIpJiYoamUucGZWYWx1ZT1zZT09PSJyYWQiP2c6RVkoZykpLHNlPT09IiUiJiYoamUucGZWYWx1ZT1nLzEwMCksamV9ZWxzZSBpZihTLnByb3BMaXN0KXt2YXIgR2U9W10seG49IiIrZztpZih4biE9PSJub25lIil7Zm9yKHZhciBEbj14bi5zcGxpdCgvXHMqLFxzKnxccysvKSxYbj0wO1huPERuLmxlbmd0aDtYbisrKXt2YXIgQ249RG5bWG5dLnRyaW0oKTtMLnByb3BlcnRpZXNbQ25dP0dlLnB1c2goQ24pOm5vKCJgIitDbisiYCBpcyBub3QgYSB2YWxpZCBwcm9wZXJ0eSBuYW1lIil9aWYoR2UubGVuZ3RoPT09MClyZXR1cm4gbnVsbH1yZXR1cm57bmFtZTp5LHZhbHVlOkdlLHN0clZhbHVlOkdlLmxlbmd0aD09PTA/Im5vbmUiOkdlLmpvaW4oIiAiKSxieXBhc3M6eH19ZWxzZSBpZihTLmNvbG9yKXt2YXIgWW49U2UoZyk7cmV0dXJuIFluP3tuYW1lOnksdmFsdWU6WW4scGZWYWx1ZTpZbixzdHJWYWx1ZToicmdiKCIrWW5bMF0rIiwiK1luWzFdKyIsIitZblsyXSsiKSIsYnlwYXNzOnh9Om51bGx9ZWxzZSBpZihTLnJlZ2V4fHxTLnJlZ2V4ZXMpe2lmKFMuZW51bXMpe3ZhciBycj1nZSgpO2lmKHJyKXJldHVybiBycn1mb3IodmFyIHdyPVMucmVnZXhlcz9TLnJlZ2V4ZXM6W1MucmVnZXhdLHVyPTA7dXI8d3IubGVuZ3RoO3VyKyspe3ZhciBlcj1uZXcgUmVnRXhwKHdyW3VyXSksYm49ZXIuZXhlYyhnKTtpZihibilyZXR1cm57bmFtZTp5LHZhbHVlOlMuc2luZ2xlUmVnZXhNYXRjaFZhbHVlP2JuWzFdOmJuLHN0clZhbHVlOiIiK2csYnlwYXNzOnh9fXJldHVybiBudWxsfWVsc2UgcmV0dXJuIFMuc3RyaW5nP3tuYW1lOnksdmFsdWU6IiIrZyxzdHJWYWx1ZToiIitnLGJ5cGFzczp4fTpTLmVudW1zP2dlKCk6bnVsbH07dmFyIGIxPWZ1bmN0aW9uIHkoZyl7aWYoISh0aGlzIGluc3RhbmNlb2YgeSkpcmV0dXJuIG5ldyB5KGcpO2lmKCFQdChnKSl7b3UoIkEgc3R5bGUgbXVzdCBoYXZlIGEgY29yZSByZWZlcmVuY2UiKTtyZXR1cm59dGhpcy5fcHJpdmF0ZT17Y3k6Zyxjb3JlU3R5bGU6e319LHRoaXMubGVuZ3RoPTAsdGhpcy5yZXNldFRvRGVmYXVsdCgpfSx2MT1iMS5wcm90b3R5cGU7djEuaW5zdGFuY2VTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4ic3R5bGUifSx2MS5jbGVhcj1mdW5jdGlvbigpe2Zvcih2YXIgeT10aGlzLl9wcml2YXRlLGc9eS5jeSx4PWcuZWxlbWVudHMoKSxUPTA7VDx0aGlzLmxlbmd0aDtUKyspdGhpc1tUXT12b2lkIDA7cmV0dXJuIHRoaXMubGVuZ3RoPTAseS5jb250ZXh0U3R5bGVzPXt9LHkucHJvcERpZmZzPXt9LHRoaXMuY2xlYW5FbGVtZW50cyh4LCEwKSx4LmZvckVhY2goZnVuY3Rpb24oTCl7dmFyIEk9TFswXS5fcHJpdmF0ZTtJLnN0eWxlRGlydHk9ITAsSS5hcHBsaWVkSW5pdFN0eWxlPSExfSksdGhpc30sdjEucmVzZXRUb0RlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbGVhcigpLHRoaXMuYWRkRGVmYXVsdFN0eWxlc2hlZXQoKSx0aGlzfSx2MS5jb3JlPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLl9wcml2YXRlLmNvcmVTdHlsZVt5XXx8dGhpcy5nZXREZWZhdWx0UHJvcGVydHkoeSl9LHYxLnNlbGVjdG9yPWZ1bmN0aW9uKHkpe3ZhciBnPXk9PT0iY29yZSI/bnVsbDpuZXcgeW0oeSkseD10aGlzLmxlbmd0aCsrO3JldHVybiB0aGlzW3hdPXtzZWxlY3RvcjpnLHByb3BlcnRpZXM6W10sbWFwcGVkUHJvcGVydGllczpbXSxpbmRleDp4fSx0aGlzfSx2MS5jc3M9ZnVuY3Rpb24oKXt2YXIgeT10aGlzLGc9YXJndW1lbnRzO2lmKGcubGVuZ3RoPT09MSlmb3IodmFyIHg9Z1swXSxUPTA7VDx5LnByb3BlcnRpZXMubGVuZ3RoO1QrKyl7dmFyIEw9eS5wcm9wZXJ0aWVzW1RdLEk9eFtMLm5hbWVdO0k9PT12b2lkIDAmJihJPXhbX24oTC5uYW1lKV0pLEkhPT12b2lkIDAmJnRoaXMuY3NzUnVsZShMLm5hbWUsSSl9ZWxzZSBnLmxlbmd0aD09PTImJnRoaXMuY3NzUnVsZShnWzBdLGdbMV0pO3JldHVybiB0aGlzfSx2MS5zdHlsZT12MS5jc3MsdjEuY3NzUnVsZT1mdW5jdGlvbih5LGcpe3ZhciB4PXRoaXMucGFyc2UoeSxnKTtpZih4KXt2YXIgVD10aGlzLmxlbmd0aC0xO3RoaXNbVF0ucHJvcGVydGllcy5wdXNoKHgpLHRoaXNbVF0ucHJvcGVydGllc1t4Lm5hbWVdPXgseC5uYW1lLm1hdGNoKC9waWUtKFxkKyktYmFja2dyb3VuZC1zaXplLykmJngudmFsdWUmJih0aGlzLl9wcml2YXRlLmhhc1BpZT0hMCkseC5tYXBwZWQmJnRoaXNbVF0ubWFwcGVkUHJvcGVydGllcy5wdXNoKHgpO3ZhciBMPSF0aGlzW1RdLnNlbGVjdG9yO0wmJih0aGlzLl9wcml2YXRlLmNvcmVTdHlsZVt4Lm5hbWVdPXgpfXJldHVybiB0aGlzfSx2MS5hcHBlbmQ9ZnVuY3Rpb24oeSl7cmV0dXJuIHB0KHkpP3kuYXBwZW5kVG9TdHlsZSh0aGlzKTptdCh5KT90aGlzLmFwcGVuZEZyb21Kc29uKHkpOlR0KHkpJiZ0aGlzLmFwcGVuZEZyb21TdHJpbmcoeSksdGhpc30sYjEuZnJvbUpzb249ZnVuY3Rpb24oeSxnKXt2YXIgeD1uZXcgYjEoeSk7cmV0dXJuIHguZnJvbUpzb24oZykseH0sYjEuZnJvbVN0cmluZz1mdW5jdGlvbih5LGcpe3JldHVybiBuZXcgYjEoeSkuZnJvbVN0cmluZyhnKX0sW3AxLElrLEhMLEdiLHVULFZMLFZmLGxUXS5mb3JFYWNoKGZ1bmN0aW9uKHkpe2ZuKHYxLHkpfSksYjEudHlwZXM9djEudHlwZXMsYjEucHJvcGVydGllcz12MS5wcm9wZXJ0aWVzLGIxLnByb3BlcnR5R3JvdXBzPXYxLnByb3BlcnR5R3JvdXBzLGIxLnByb3BlcnR5R3JvdXBOYW1lcz12MS5wcm9wZXJ0eUdyb3VwTmFtZXMsYjEucHJvcGVydHlHcm91cEtleXM9djEucHJvcGVydHlHcm91cEtleXM7dmFyIExKPXtzdHlsZTpmdW5jdGlvbihnKXtpZihnKXt2YXIgeD10aGlzLnNldFN0eWxlKGcpO3gudXBkYXRlKCl9cmV0dXJuIHRoaXMuX3ByaXZhdGUuc3R5bGV9LHNldFN0eWxlOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuX3ByaXZhdGU7cmV0dXJuIHB0KGcpP3guc3R5bGU9Zy5nZW5lcmF0ZVN0eWxlKHRoaXMpOm10KGcpP3guc3R5bGU9YjEuZnJvbUpzb24odGhpcyxnKTpUdChnKT94LnN0eWxlPWIxLmZyb21TdHJpbmcodGhpcyxnKTp4LnN0eWxlPWIxKHRoaXMpLHguc3R5bGV9LHVwZGF0ZVN0eWxlOmZ1bmN0aW9uKCl7dGhpcy5tdXRhYmxlRWxlbWVudHMoKS51cGRhdGVTdHlsZSgpfX0sTUo9InNpbmdsZSIsTDM9e2F1dG9sb2NrOmZ1bmN0aW9uKGcpe2lmKGchPT12b2lkIDApdGhpcy5fcHJpdmF0ZS5hdXRvbG9jaz0hIWc7ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS5hdXRvbG9jaztyZXR1cm4gdGhpc30sYXV0b3VuZ3JhYmlmeTpmdW5jdGlvbihnKXtpZihnIT09dm9pZCAwKXRoaXMuX3ByaXZhdGUuYXV0b3VuZ3JhYmlmeT0hIWc7ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS5hdXRvdW5ncmFiaWZ5O3JldHVybiB0aGlzfSxhdXRvdW5zZWxlY3RpZnk6ZnVuY3Rpb24oZyl7aWYoZyE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLmF1dG91bnNlbGVjdGlmeT0hIWc7ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS5hdXRvdW5zZWxlY3RpZnk7cmV0dXJuIHRoaXN9LHNlbGVjdGlvblR5cGU6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5fcHJpdmF0ZTtpZih4LnNlbGVjdGlvblR5cGU9PW51bGwmJih4LnNlbGVjdGlvblR5cGU9TUopLGchPT12b2lkIDApKGc9PT0iYWRkaXRpdmUifHxnPT09InNpbmdsZSIpJiYoeC5zZWxlY3Rpb25UeXBlPWcpO2Vsc2UgcmV0dXJuIHguc2VsZWN0aW9uVHlwZTtyZXR1cm4gdGhpc30scGFubmluZ0VuYWJsZWQ6ZnVuY3Rpb24oZyl7aWYoZyE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkPSEhZztlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkO3JldHVybiB0aGlzfSx1c2VyUGFubmluZ0VuYWJsZWQ6ZnVuY3Rpb24oZyl7aWYoZyE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLnVzZXJQYW5uaW5nRW5hYmxlZD0hIWc7ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS51c2VyUGFubmluZ0VuYWJsZWQ7cmV0dXJuIHRoaXN9LHpvb21pbmdFbmFibGVkOmZ1bmN0aW9uKGcpe2lmKGchPT12b2lkIDApdGhpcy5fcHJpdmF0ZS56b29taW5nRW5hYmxlZD0hIWc7ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS56b29taW5nRW5hYmxlZDtyZXR1cm4gdGhpc30sdXNlclpvb21pbmdFbmFibGVkOmZ1bmN0aW9uKGcpe2lmKGchPT12b2lkIDApdGhpcy5fcHJpdmF0ZS51c2VyWm9vbWluZ0VuYWJsZWQ9ISFnO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUudXNlclpvb21pbmdFbmFibGVkO3JldHVybiB0aGlzfSxib3hTZWxlY3Rpb25FbmFibGVkOmZ1bmN0aW9uKGcpe2lmKGchPT12b2lkIDApdGhpcy5fcHJpdmF0ZS5ib3hTZWxlY3Rpb25FbmFibGVkPSEhZztlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLmJveFNlbGVjdGlvbkVuYWJsZWQ7cmV0dXJuIHRoaXN9LHBhbjpmdW5jdGlvbigpe3ZhciBnPWFyZ3VtZW50cyx4PXRoaXMuX3ByaXZhdGUucGFuLFQsTCxJLE8sJDtzd2l0Y2goZy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4geDtjYXNlIDE6aWYoVHQoZ1swXSkpcmV0dXJuIFQ9Z1swXSx4W1RdO2lmKGN0KGdbMF0pKXtpZighdGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZClyZXR1cm4gdGhpcztJPWdbMF0sTz1JLngsJD1JLnksc3QoTykmJih4Lng9Tyksc3QoJCkmJih4Lnk9JCksdGhpcy5lbWl0KCJwYW4gdmlld3BvcnQiKX1icmVhaztjYXNlIDI6aWYoIXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWQpcmV0dXJuIHRoaXM7VD1nWzBdLEw9Z1sxXSwoVD09PSJ4Inx8VD09PSJ5IikmJnN0KEwpJiYoeFtUXT1MKSx0aGlzLmVtaXQoInBhbiB2aWV3cG9ydCIpO2JyZWFrfXJldHVybiB0aGlzLm5vdGlmeSgidmlld3BvcnQiKSx0aGlzfSxwYW5CeTpmdW5jdGlvbihnLHgpe3ZhciBUPWFyZ3VtZW50cyxMPXRoaXMuX3ByaXZhdGUucGFuLEksTywkLHosUztpZighdGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZClyZXR1cm4gdGhpcztzd2l0Y2goVC5sZW5ndGgpe2Nhc2UgMTpjdChnKSYmKCQ9VFswXSx6PSQueCxTPSQueSxzdCh6KSYmKEwueCs9eiksc3QoUykmJihMLnkrPVMpLHRoaXMuZW1pdCgicGFuIHZpZXdwb3J0IikpO2JyZWFrO2Nhc2UgMjpJPWcsTz14LChJPT09IngifHxJPT09InkiKSYmc3QoTykmJihMW0ldKz1PKSx0aGlzLmVtaXQoInBhbiB2aWV3cG9ydCIpO2JyZWFrfXJldHVybiB0aGlzLm5vdGlmeSgidmlld3BvcnQiKSx0aGlzfSxmaXQ6ZnVuY3Rpb24oZyx4KXt2YXIgVD10aGlzLmdldEZpdFZpZXdwb3J0KGcseCk7aWYoVCl7dmFyIEw9dGhpcy5fcHJpdmF0ZTtMLnpvb209VC56b29tLEwucGFuPVQucGFuLHRoaXMuZW1pdCgicGFuIHpvb20gdmlld3BvcnQiKSx0aGlzLm5vdGlmeSgidmlld3BvcnQiKX1yZXR1cm4gdGhpc30sZ2V0Rml0Vmlld3BvcnQ6ZnVuY3Rpb24oZyx4KXtpZihzdChnKSYmeD09PXZvaWQgMCYmKHg9ZyxnPXZvaWQgMCksISghdGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZHx8IXRoaXMuX3ByaXZhdGUuem9vbWluZ0VuYWJsZWQpKXt2YXIgVDtpZihUdChnKSl7dmFyIEw9ZztnPXRoaXMuJChMKX1lbHNlIGlmKEJ0KGcpKXt2YXIgST1nO1Q9e3gxOkkueDEseTE6SS55MSx4MjpJLngyLHkyOkkueTJ9LFQudz1ULngyLVQueDEsVC5oPVQueTItVC55MX1lbHNlIGR0KGcpfHwoZz10aGlzLm11dGFibGVFbGVtZW50cygpKTtpZighKGR0KGcpJiZnLmVtcHR5KCkpKXtUPVR8fGcuYm91bmRpbmdCb3goKTt2YXIgTz10aGlzLndpZHRoKCksJD10aGlzLmhlaWdodCgpLHo7aWYoeD1zdCh4KT94OjAsIWlzTmFOKE8pJiYhaXNOYU4oJCkmJk8+MCYmJD4wJiYhaXNOYU4oVC53KSYmIWlzTmFOKFQuaCkmJlQudz4wJiZULmg+MCl7ej1NYXRoLm1pbigoTy0yKngpL1QudywoJC0yKngpL1QuaCksej16PnRoaXMuX3ByaXZhdGUubWF4Wm9vbT90aGlzLl9wcml2YXRlLm1heFpvb206eix6PXo8dGhpcy5fcHJpdmF0ZS5taW5ab29tP3RoaXMuX3ByaXZhdGUubWluWm9vbTp6O3ZhciBTPXt4OihPLXoqKFQueDErVC54MikpLzIseTooJC16KihULnkxK1QueTIpKS8yfTtyZXR1cm57em9vbTp6LHBhbjpTfX19fX0sem9vbVJhbmdlOmZ1bmN0aW9uKGcseCl7dmFyIFQ9dGhpcy5fcHJpdmF0ZTtpZih4PT1udWxsKXt2YXIgTD1nO2c9TC5taW4seD1MLm1heH1yZXR1cm4gc3QoZykmJnN0KHgpJiZnPD14PyhULm1pblpvb209ZyxULm1heFpvb209eCk6c3QoZykmJng9PT12b2lkIDAmJmc8PVQubWF4Wm9vbT9ULm1pblpvb209ZzpzdCh4KSYmZz09PXZvaWQgMCYmeD49VC5taW5ab29tJiYoVC5tYXhab29tPXgpLHRoaXN9LG1pblpvb206ZnVuY3Rpb24oZyl7cmV0dXJuIGc9PT12b2lkIDA/dGhpcy5fcHJpdmF0ZS5taW5ab29tOnRoaXMuem9vbVJhbmdlKHttaW46Z30pfSxtYXhab29tOmZ1bmN0aW9uKGcpe3JldHVybiBnPT09dm9pZCAwP3RoaXMuX3ByaXZhdGUubWF4Wm9vbTp0aGlzLnpvb21SYW5nZSh7bWF4Omd9KX0sZ2V0Wm9vbWVkVmlld3BvcnQ6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5fcHJpdmF0ZSxUPXgucGFuLEw9eC56b29tLEksTywkPSExO2lmKHguem9vbWluZ0VuYWJsZWR8fCgkPSEwKSxzdChnKT9PPWc6Y3QoZykmJihPPWcubGV2ZWwsZy5wb3NpdGlvbiE9bnVsbD9JPU85KGcucG9zaXRpb24sTCxUKTpnLnJlbmRlcmVkUG9zaXRpb24hPW51bGwmJihJPWcucmVuZGVyZWRQb3NpdGlvbiksSSE9bnVsbCYmIXgucGFubmluZ0VuYWJsZWQmJigkPSEwKSksTz1PPngubWF4Wm9vbT94Lm1heFpvb206TyxPPU88eC5taW5ab29tP3gubWluWm9vbTpPLCR8fCFzdChPKXx8Tz09PUx8fEkhPW51bGwmJighc3QoSS54KXx8IXN0KEkueSkpKXJldHVybiBudWxsO2lmKEkhPW51bGwpe3ZhciB6PVQsUz1MLFY9TyxVPXt4Oi1WL1MqKEkueC16LngpK0kueCx5Oi1WL1MqKEkueS16LnkpK0kueX07cmV0dXJue3pvb21lZDohMCxwYW5uZWQ6ITAsem9vbTpWLHBhbjpVfX1lbHNlIHJldHVybnt6b29tZWQ6ITAscGFubmVkOiExLHpvb206TyxwYW46VH19LHpvb206ZnVuY3Rpb24oZyl7aWYoZz09PXZvaWQgMClyZXR1cm4gdGhpcy5fcHJpdmF0ZS56b29tO3ZhciB4PXRoaXMuZ2V0Wm9vbWVkVmlld3BvcnQoZyksVD10aGlzLl9wcml2YXRlO3JldHVybiB4PT1udWxsfHwheC56b29tZWQ/dGhpczooVC56b29tPXguem9vbSx4LnBhbm5lZCYmKFQucGFuLng9eC5wYW4ueCxULnBhbi55PXgucGFuLnkpLHRoaXMuZW1pdCgiem9vbSIrKHgucGFubmVkPyIgcGFuIjoiIikrIiB2aWV3cG9ydCIpLHRoaXMubm90aWZ5KCJ2aWV3cG9ydCIpLHRoaXMpfSx2aWV3cG9ydDpmdW5jdGlvbihnKXt2YXIgeD10aGlzLl9wcml2YXRlLFQ9ITAsTD0hMCxJPVtdLE89ITEsJD0hMTtpZighZylyZXR1cm4gdGhpcztpZihzdChnLnpvb20pfHwoVD0hMSksY3QoZy5wYW4pfHwoTD0hMSksIVQmJiFMKXJldHVybiB0aGlzO2lmKFQpe3ZhciB6PWcuem9vbTt6PHgubWluWm9vbXx8ej54Lm1heFpvb218fCF4Lnpvb21pbmdFbmFibGVkP089ITA6KHguem9vbT16LEkucHVzaCgiem9vbSIpKX1pZihMJiYoIU98fCFnLmNhbmNlbE9uRmFpbGVkWm9vbSkmJngucGFubmluZ0VuYWJsZWQpe3ZhciBTPWcucGFuO3N0KFMueCkmJih4LnBhbi54PVMueCwkPSExKSxzdChTLnkpJiYoeC5wYW4ueT1TLnksJD0hMSksJHx8SS5wdXNoKCJwYW4iKX1yZXR1cm4gSS5sZW5ndGg+MCYmKEkucHVzaCgidmlld3BvcnQiKSx0aGlzLmVtaXQoSS5qb2luKCIgIikpLHRoaXMubm90aWZ5KCJ2aWV3cG9ydCIpKSx0aGlzfSxjZW50ZXI6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5nZXRDZW50ZXJQYW4oZyk7cmV0dXJuIHgmJih0aGlzLl9wcml2YXRlLnBhbj14LHRoaXMuZW1pdCgicGFuIHZpZXdwb3J0IiksdGhpcy5ub3RpZnkoInZpZXdwb3J0IikpLHRoaXN9LGdldENlbnRlclBhbjpmdW5jdGlvbihnLHgpe2lmKHRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWQpe2lmKFR0KGcpKXt2YXIgVD1nO2c9dGhpcy5tdXRhYmxlRWxlbWVudHMoKS5maWx0ZXIoVCl9ZWxzZSBkdChnKXx8KGc9dGhpcy5tdXRhYmxlRWxlbWVudHMoKSk7aWYoZy5sZW5ndGghPT0wKXt2YXIgTD1nLmJvdW5kaW5nQm94KCksST10aGlzLndpZHRoKCksTz10aGlzLmhlaWdodCgpO3g9eD09PXZvaWQgMD90aGlzLl9wcml2YXRlLnpvb206eDt2YXIgJD17eDooSS14KihMLngxK0wueDIpKS8yLHk6KE8teCooTC55MStMLnkyKSkvMn07cmV0dXJuICR9fX0scmVzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZHx8IXRoaXMuX3ByaXZhdGUuem9vbWluZ0VuYWJsZWQ/dGhpczoodGhpcy52aWV3cG9ydCh7cGFuOnt4OjAseTowfSx6b29tOjF9KSx0aGlzKX0saW52YWxpZGF0ZVNpemU6ZnVuY3Rpb24oKXt0aGlzLl9wcml2YXRlLnNpemVDYWNoZT1udWxsfSxzaXplOmZ1bmN0aW9uKCl7dmFyIGc9dGhpcy5fcHJpdmF0ZSx4PWcuY29udGFpbmVyO3JldHVybiBnLnNpemVDYWNoZT1nLnNpemVDYWNoZXx8KHg/ZnVuY3Rpb24oKXt2YXIgVD1SLmdldENvbXB1dGVkU3R5bGUoeCksTD1mdW5jdGlvbihPKXtyZXR1cm4gcGFyc2VGbG9hdChULmdldFByb3BlcnR5VmFsdWUoTykpfTtyZXR1cm57d2lkdGg6eC5jbGllbnRXaWR0aC1MKCJwYWRkaW5nLWxlZnQiKS1MKCJwYWRkaW5nLXJpZ2h0IiksaGVpZ2h0OnguY2xpZW50SGVpZ2h0LUwoInBhZGRpbmctdG9wIiktTCgicGFkZGluZy1ib3R0b20iKX19KCk6e3dpZHRoOjEsaGVpZ2h0OjF9KX0sd2lkdGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaXplKCkud2lkdGh9LGhlaWdodDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemUoKS5oZWlnaHR9LGV4dGVudDpmdW5jdGlvbigpe3ZhciBnPXRoaXMuX3ByaXZhdGUucGFuLHg9dGhpcy5fcHJpdmF0ZS56b29tLFQ9dGhpcy5yZW5kZXJlZEV4dGVudCgpLEw9e3gxOihULngxLWcueCkveCx4MjooVC54Mi1nLngpL3gseTE6KFQueTEtZy55KS94LHkyOihULnkyLWcueSkveH07cmV0dXJuIEwudz1MLngyLUwueDEsTC5oPUwueTItTC55MSxMfSxyZW5kZXJlZEV4dGVudDpmdW5jdGlvbigpe3ZhciBnPXRoaXMud2lkdGgoKSx4PXRoaXMuaGVpZ2h0KCk7cmV0dXJue3gxOjAseTE6MCx4MjpnLHkyOngsdzpnLGg6eH19LG11bHRpQ2xpY2tEZWJvdW5jZVRpbWU6ZnVuY3Rpb24oZyl7aWYoZyl0aGlzLl9wcml2YXRlLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWU9ZztlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWU7cmV0dXJuIHRoaXN9fTtMMy5jZW50cmU9TDMuY2VudGVyLEwzLmF1dG9sb2NrTm9kZXM9TDMuYXV0b2xvY2ssTDMuYXV0b3VuZ3JhYmlmeU5vZGVzPUwzLmF1dG91bmdyYWJpZnk7dmFyIE9rPXtkYXRhOkljLmRhdGEoe2ZpZWxkOiJkYXRhIixiaW5kaW5nRXZlbnQ6ImRhdGEiLGFsbG93QmluZGluZzohMCxhbGxvd1NldHRpbmc6ITAsc2V0dGluZ0V2ZW50OiJkYXRhIixzZXR0aW5nVHJpZ2dlcnNFdmVudDohMCx0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIixhbGxvd0dldHRpbmc6ITAsdXBkYXRlU3R5bGU6ITB9KSxyZW1vdmVEYXRhOkljLnJlbW92ZURhdGEoe2ZpZWxkOiJkYXRhIixldmVudDoiZGF0YSIsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsdHJpZ2dlckV2ZW50OiEwLHVwZGF0ZVN0eWxlOiEwfSksc2NyYXRjaDpJYy5kYXRhKHtmaWVsZDoic2NyYXRjaCIsYmluZGluZ0V2ZW50OiJzY3JhdGNoIixhbGxvd0JpbmRpbmc6ITAsYWxsb3dTZXR0aW5nOiEwLHNldHRpbmdFdmVudDoic2NyYXRjaCIsc2V0dGluZ1RyaWdnZXJzRXZlbnQ6ITAsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsYWxsb3dHZXR0aW5nOiEwLHVwZGF0ZVN0eWxlOiEwfSkscmVtb3ZlU2NyYXRjaDpJYy5yZW1vdmVEYXRhKHtmaWVsZDoic2NyYXRjaCIsZXZlbnQ6InNjcmF0Y2giLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLHRyaWdnZXJFdmVudDohMCx1cGRhdGVTdHlsZTohMH0pfTtPay5hdHRyPU9rLmRhdGEsT2sucmVtb3ZlQXR0cj1Pay5yZW1vdmVEYXRhO3ZhciBOaz1mdW5jdGlvbihnKXt2YXIgeD10aGlzO2c9Zm4oe30sZyk7dmFyIFQ9Zy5jb250YWluZXI7VCYmIWh0KFQpJiZodChUWzBdKSYmKFQ9VFswXSk7dmFyIEw9VD9ULl9jeXJlZzpudWxsO0w9THx8e30sTCYmTC5jeSYmKEwuY3kuZGVzdHJveSgpLEw9e30pO3ZhciBJPUwucmVhZGllcz1MLnJlYWRpZXN8fFtdO1QmJihULl9jeXJlZz1MKSxMLmN5PXg7dmFyIE89UiE9PXZvaWQgMCYmVCE9PXZvaWQgMCYmIWcuaGVhZGxlc3MsJD1nOyQubGF5b3V0PWZuKHtuYW1lOk8/ImdyaWQiOiJudWxsIn0sJC5sYXlvdXQpLCQucmVuZGVyZXI9Zm4oe25hbWU6Tz8iY2FudmFzIjoibnVsbCJ9LCQucmVuZGVyZXIpO3ZhciB6PWZ1bmN0aW9uKGx0LGd0LEx0KXtyZXR1cm4gZ3QhPT12b2lkIDA/Z3Q6THQhPT12b2lkIDA/THQ6bHR9LFM9dGhpcy5fcHJpdmF0ZT17Y29udGFpbmVyOlQscmVhZHk6ITEsb3B0aW9uczokLGVsZW1lbnRzOm5ldyBIZih0aGlzKSxsaXN0ZW5lcnM6W10sYW5pRWxlczpuZXcgSGYodGhpcyksZGF0YTokLmRhdGF8fHt9LHNjcmF0Y2g6e30sbGF5b3V0Om51bGwscmVuZGVyZXI6bnVsbCxkZXN0cm95ZWQ6ITEsbm90aWZpY2F0aW9uc0VuYWJsZWQ6ITAsbWluWm9vbToxZS01MCxtYXhab29tOjFlNTAsem9vbWluZ0VuYWJsZWQ6eighMCwkLnpvb21pbmdFbmFibGVkKSx1c2VyWm9vbWluZ0VuYWJsZWQ6eighMCwkLnVzZXJab29taW5nRW5hYmxlZCkscGFubmluZ0VuYWJsZWQ6eighMCwkLnBhbm5pbmdFbmFibGVkKSx1c2VyUGFubmluZ0VuYWJsZWQ6eighMCwkLnVzZXJQYW5uaW5nRW5hYmxlZCksYm94U2VsZWN0aW9uRW5hYmxlZDp6KCEwLCQuYm94U2VsZWN0aW9uRW5hYmxlZCksYXV0b2xvY2s6eighMSwkLmF1dG9sb2NrLCQuYXV0b2xvY2tOb2RlcyksYXV0b3VuZ3JhYmlmeTp6KCExLCQuYXV0b3VuZ3JhYmlmeSwkLmF1dG91bmdyYWJpZnlOb2RlcyksYXV0b3Vuc2VsZWN0aWZ5OnooITEsJC5hdXRvdW5zZWxlY3RpZnkpLHN0eWxlRW5hYmxlZDokLnN0eWxlRW5hYmxlZD09PXZvaWQgMD9POiQuc3R5bGVFbmFibGVkLHpvb206c3QoJC56b29tKT8kLnpvb206MSxwYW46e3g6Y3QoJC5wYW4pJiZzdCgkLnBhbi54KT8kLnBhbi54OjAseTpjdCgkLnBhbikmJnN0KCQucGFuLnkpPyQucGFuLnk6MH0sYW5pbWF0aW9uOntjdXJyZW50OltdLHF1ZXVlOltdfSxoYXNDb21wb3VuZE5vZGVzOiExLG11bHRpQ2xpY2tEZWJvdW5jZVRpbWU6eigyNTAsJC5tdWx0aUNsaWNrRGVib3VuY2VUaW1lKX07dGhpcy5jcmVhdGVFbWl0dGVyKCksdGhpcy5zZWxlY3Rpb25UeXBlKCQuc2VsZWN0aW9uVHlwZSksdGhpcy56b29tUmFuZ2Uoe21pbjokLm1pblpvb20sbWF4OiQubWF4Wm9vbX0pO3ZhciBWPWZ1bmN0aW9uKGx0LGd0KXt2YXIgTHQ9bHQuc29tZSh2dCk7aWYoTHQpcmV0dXJuIFc1LmFsbChsdCkudGhlbihndCk7Z3QobHQpfTtTLnN0eWxlRW5hYmxlZCYmeC5zZXRTdHlsZShbXSk7dmFyIFU9Zm4oe30sJCwkLnJlbmRlcmVyKTt4LmluaXRSZW5kZXJlcihVKTt2YXIgZXQ9ZnVuY3Rpb24obHQsZ3QsTHQpe3gubm90aWZpY2F0aW9ucyghMSk7dmFyIEV0PXgubXV0YWJsZUVsZW1lbnRzKCk7RXQubGVuZ3RoPjAmJkV0LnJlbW92ZSgpLGx0IT1udWxsJiYoY3QobHQpfHxtdChsdCkpJiZ4LmFkZChsdCkseC5vbmUoImxheW91dHJlYWR5IixmdW5jdGlvbihJdCl7eC5ub3RpZmljYXRpb25zKCEwKSx4LmVtaXQoSXQpLHgub25lKCJsb2FkIixndCkseC5lbWl0QW5kTm90aWZ5KCJsb2FkIil9KS5vbmUoImxheW91dHN0b3AiLGZ1bmN0aW9uKCl7eC5vbmUoImRvbmUiLEx0KSx4LmVtaXQoImRvbmUiKX0pO3ZhciBEdD1mbih7fSx4Ll9wcml2YXRlLm9wdGlvbnMubGF5b3V0KTtEdC5lbGVzPXguZWxlbWVudHMoKSx4LmxheW91dChEdCkucnVuKCl9O1YoWyQuc3R5bGUsJC5lbGVtZW50c10sZnVuY3Rpb24oYXQpe3ZhciBsdD1hdFswXSxndD1hdFsxXTtTLnN0eWxlRW5hYmxlZCYmeC5zdHlsZSgpLmFwcGVuZChsdCksZXQoZ3QsZnVuY3Rpb24oKXt4LnN0YXJ0QW5pbWF0aW9uTG9vcCgpLFMucmVhZHk9ITAsa3QoJC5yZWFkeSkmJngub24oInJlYWR5IiwkLnJlYWR5KTtmb3IodmFyIEx0PTA7THQ8SS5sZW5ndGg7THQrKyl7dmFyIEV0PUlbTHRdO3gub24oInJlYWR5IixFdCl9TCYmKEwucmVhZGllcz1bXSkseC5lbWl0KCJyZWFkeSIpfSwkLmRvbmUpfSl9LGhUPU5rLnByb3RvdHlwZTtmbihoVCx7aW5zdGFuY2VTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iY29yZSJ9LGlzUmVhZHk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5yZWFkeX0sZGVzdHJveWVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuZGVzdHJveWVkfSxyZWFkeTpmdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pc1JlYWR5KCk/dGhpcy5lbWl0dGVyKCkuZW1pdCgicmVhZHkiLFtdLGcpOnRoaXMub24oInJlYWR5IixnKSx0aGlzfSxkZXN0cm95OmZ1bmN0aW9uKCl7dmFyIGc9dGhpcztpZighZy5kZXN0cm95ZWQoKSlyZXR1cm4gZy5zdG9wQW5pbWF0aW9uTG9vcCgpLGcuZGVzdHJveVJlbmRlcmVyKCksdGhpcy5lbWl0KCJkZXN0cm95IiksZy5fcHJpdmF0ZS5kZXN0cm95ZWQ9ITAsZ30saGFzRWxlbWVudFdpdGhJZDpmdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbGVtZW50cy5oYXNFbGVtZW50V2l0aElkKGcpfSxnZXRFbGVtZW50QnlJZDpmdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbGVtZW50cy5nZXRFbGVtZW50QnlJZChnKX0saGFzQ29tcG91bmROb2RlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmhhc0NvbXBvdW5kTm9kZXN9LGhlYWRsZXNzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUucmVuZGVyZXIuaXNIZWFkbGVzcygpfSxzdHlsZUVuYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5zdHlsZUVuYWJsZWR9LGFkZFRvUG9vbDpmdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbGVtZW50cy5tZXJnZShnKSx0aGlzfSxyZW1vdmVGcm9tUG9vbDpmdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbGVtZW50cy51bm1lcmdlKGcpLHRoaXN9LGNvbnRhaW5lcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmNvbnRhaW5lcnx8bnVsbH0sbW91bnQ6ZnVuY3Rpb24oZyl7aWYoZyE9bnVsbCl7dmFyIHg9dGhpcyxUPXguX3ByaXZhdGUsTD1ULm9wdGlvbnM7cmV0dXJuIWh0KGcpJiZodChnWzBdKSYmKGc9Z1swXSkseC5zdG9wQW5pbWF0aW9uTG9vcCgpLHguZGVzdHJveVJlbmRlcmVyKCksVC5jb250YWluZXI9ZyxULnN0eWxlRW5hYmxlZD0hMCx4LmludmFsaWRhdGVTaXplKCkseC5pbml0UmVuZGVyZXIoZm4oe30sTCxMLnJlbmRlcmVyLHtuYW1lOkwucmVuZGVyZXIubmFtZT09PSJudWxsIj8iY2FudmFzIjpMLnJlbmRlcmVyLm5hbWV9KSkseC5zdGFydEFuaW1hdGlvbkxvb3AoKSx4LnN0eWxlKEwuc3R5bGUpLHguZW1pdCgibW91bnQiKSx4fX0sdW5tb3VudDpmdW5jdGlvbigpe3ZhciBnPXRoaXM7cmV0dXJuIGcuc3RvcEFuaW1hdGlvbkxvb3AoKSxnLmRlc3Ryb3lSZW5kZXJlcigpLGcuaW5pdFJlbmRlcmVyKHtuYW1lOiJudWxsIn0pLGcuZW1pdCgidW5tb3VudCIpLGd9LG9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gcWIodGhpcy5fcHJpdmF0ZS5vcHRpb25zKX0sanNvbjpmdW5jdGlvbihnKXt2YXIgeD10aGlzLFQ9eC5fcHJpdmF0ZSxMPXgubXV0YWJsZUVsZW1lbnRzKCksST1mdW5jdGlvbih6dCl7cmV0dXJuIHguZ2V0RWxlbWVudEJ5SWQoenQuaWQoKSl9O2lmKGN0KGcpKXtpZih4LnN0YXJ0QmF0Y2goKSxnLmVsZW1lbnRzKXt2YXIgTz17fSwkPWZ1bmN0aW9uKHp0LHRlKXtmb3IodmFyIFh0PVtdLEh0PVtdLGllPTA7aWU8enQubGVuZ3RoO2llKyspe3ZhciBVdD16dFtpZV07aWYoIVV0LmRhdGEuaWQpe25vKCJjeS5qc29uKCkgY2Fubm90IGhhbmRsZSBlbGVtZW50cyB3aXRob3V0IGFuIElEIGF0dHJpYnV0ZSIpO2NvbnRpbnVlfXZhciBmZT0iIitVdC5kYXRhLmlkLGdlPXguZ2V0RWxlbWVudEJ5SWQoZmUpO09bZmVdPSEwLGdlLmxlbmd0aCE9PTA/SHQucHVzaCh7ZWxlOmdlLGpzb246VXR9KToodGUmJihVdC5ncm91cD10ZSksWHQucHVzaChVdCkpfXguYWRkKFh0KTtmb3IodmFyIHNlPTA7c2U8SHQubGVuZ3RoO3NlKyspe3ZhciBOZT1IdFtzZV0scGU9TmUuZWxlLGduPU5lLmpzb247cGUuanNvbihnbil9fTtpZihtdChnLmVsZW1lbnRzKSkkKGcuZWxlbWVudHMpO2Vsc2UgZm9yKHZhciB6PVsibm9kZXMiLCJlZGdlcyJdLFM9MDtTPHoubGVuZ3RoO1MrKyl7dmFyIFY9eltTXSxVPWcuZWxlbWVudHNbVl07bXQoVSkmJiQoVSxWKX12YXIgZXQ9eC5jb2xsZWN0aW9uKCk7TC5maWx0ZXIoZnVuY3Rpb24oSXQpe3JldHVybiFPW0l0LmlkKCldfSkuZm9yRWFjaChmdW5jdGlvbihJdCl7SXQuaXNQYXJlbnQoKT9ldC5tZXJnZShJdCk6SXQucmVtb3ZlKCl9KSxldC5mb3JFYWNoKGZ1bmN0aW9uKEl0KXtyZXR1cm4gSXQuY2hpbGRyZW4oKS5tb3ZlKHtwYXJlbnQ6bnVsbH0pfSksZXQuZm9yRWFjaChmdW5jdGlvbihJdCl7cmV0dXJuIEkoSXQpLnJlbW92ZSgpfSl9Zy5zdHlsZSYmeC5zdHlsZShnLnN0eWxlKSxnLnpvb20hPW51bGwmJmcuem9vbSE9PVQuem9vbSYmeC56b29tKGcuem9vbSksZy5wYW4mJihnLnBhbi54IT09VC5wYW4ueHx8Zy5wYW4ueSE9PVQucGFuLnkpJiZ4LnBhbihnLnBhbiksZy5kYXRhJiZ4LmRhdGEoZy5kYXRhKTtmb3IodmFyIGF0PVsibWluWm9vbSIsIm1heFpvb20iLCJ6b29taW5nRW5hYmxlZCIsInVzZXJab29taW5nRW5hYmxlZCIsInBhbm5pbmdFbmFibGVkIiwidXNlclBhbm5pbmdFbmFibGVkIiwiYm94U2VsZWN0aW9uRW5hYmxlZCIsImF1dG9sb2NrIiwiYXV0b3VuZ3JhYmlmeSIsImF1dG91bnNlbGVjdGlmeSIsIm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUiXSxsdD0wO2x0PGF0Lmxlbmd0aDtsdCsrKXt2YXIgZ3Q9YXRbbHRdO2dbZ3RdIT1udWxsJiZ4W2d0XShnW2d0XSl9cmV0dXJuIHguZW5kQmF0Y2goKSx0aGlzfWVsc2V7dmFyIEx0PSEhZyxFdD17fTtMdD9FdC5lbGVtZW50cz10aGlzLmVsZW1lbnRzKCkubWFwKGZ1bmN0aW9uKEl0KXtyZXR1cm4gSXQuanNvbigpfSk6KEV0LmVsZW1lbnRzPXt9LEwuZm9yRWFjaChmdW5jdGlvbihJdCl7dmFyIHp0PUl0Lmdyb3VwKCk7RXQuZWxlbWVudHNbenRdfHwoRXQuZWxlbWVudHNbenRdPVtdKSxFdC5lbGVtZW50c1t6dF0ucHVzaChJdC5qc29uKCkpfSkpLHRoaXMuX3ByaXZhdGUuc3R5bGVFbmFibGVkJiYoRXQuc3R5bGU9eC5zdHlsZSgpLmpzb24oKSksRXQuZGF0YT1xYih4LmRhdGEoKSk7dmFyIER0PVQub3B0aW9ucztyZXR1cm4gRXQuem9vbWluZ0VuYWJsZWQ9VC56b29taW5nRW5hYmxlZCxFdC51c2VyWm9vbWluZ0VuYWJsZWQ9VC51c2VyWm9vbWluZ0VuYWJsZWQsRXQuem9vbT1ULnpvb20sRXQubWluWm9vbT1ULm1pblpvb20sRXQubWF4Wm9vbT1ULm1heFpvb20sRXQucGFubmluZ0VuYWJsZWQ9VC5wYW5uaW5nRW5hYmxlZCxFdC51c2VyUGFubmluZ0VuYWJsZWQ9VC51c2VyUGFubmluZ0VuYWJsZWQsRXQucGFuPXFiKFQucGFuKSxFdC5ib3hTZWxlY3Rpb25FbmFibGVkPVQuYm94U2VsZWN0aW9uRW5hYmxlZCxFdC5yZW5kZXJlcj1xYihEdC5yZW5kZXJlciksRXQuaGlkZUVkZ2VzT25WaWV3cG9ydD1EdC5oaWRlRWRnZXNPblZpZXdwb3J0LEV0LnRleHR1cmVPblZpZXdwb3J0PUR0LnRleHR1cmVPblZpZXdwb3J0LEV0LndoZWVsU2Vuc2l0aXZpdHk9RHQud2hlZWxTZW5zaXRpdml0eSxFdC5tb3Rpb25CbHVyPUR0Lm1vdGlvbkJsdXIsRXQubXVsdGlDbGlja0RlYm91bmNlVGltZT1EdC5tdWx0aUNsaWNrRGVib3VuY2VUaW1lLEV0fX19KSxoVC4kaWQ9aFQuZ2V0RWxlbWVudEJ5SWQsW21KLFRKLFNCLHpMLG9ULENKLHFMLGNULExKLEwzLE9rXS5mb3JFYWNoKGZ1bmN0aW9uKHkpe2ZuKGhULHkpfSk7dmFyIERKPXtmaXQ6ITAsZGlyZWN0ZWQ6ITEscGFkZGluZzozMCxjaXJjbGU6ITEsZ3JpZDohMSxzcGFjaW5nRmFjdG9yOjEuNzUsYm91bmRpbmdCb3g6dm9pZCAwLGF2b2lkT3ZlcmxhcDohMCxub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITEscm9vdHM6dm9pZCAwLG1heGltYWw6ITEsZGVwdGhTb3J0OnZvaWQgMCxhbmltYXRlOiExLGFuaW1hdGlvbkR1cmF0aW9uOjUwMCxhbmltYXRpb25FYXNpbmc6dm9pZCAwLGFuaW1hdGVGaWx0ZXI6ZnVuY3Rpb24oZyx4KXtyZXR1cm4hMH0scmVhZHk6dm9pZCAwLHN0b3A6dm9pZCAwLHRyYW5zZm9ybTpmdW5jdGlvbihnLHgpe3JldHVybiB4fX0sczY9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuc2NyYXRjaCgiYnJlYWR0aGZpcnN0Iil9LEdMPWZ1bmN0aW9uKGcseCl7cmV0dXJuIGcuc2NyYXRjaCgiYnJlYWR0aGZpcnN0Iix4KX07ZnVuY3Rpb24gQUIoeSl7dGhpcy5vcHRpb25zPWZuKHt9LERKLHkpfUFCLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgeT10aGlzLm9wdGlvbnMsZz15LHg9eS5jeSxUPWcuZWxlcyxMPVQubm9kZXMoKS5maWx0ZXIoZnVuY3Rpb24oRGkpe3JldHVybiFEaS5pc1BhcmVudCgpfSksST1ULE89Zy5kaXJlY3RlZCwkPWcubWF4aW1hbHx8Zy5tYXhpbWFsQWRqdXN0bWVudHM+MCx6PVJkKGcuYm91bmRpbmdCb3g/Zy5ib3VuZGluZ0JveDp7eDE6MCx5MTowLHc6eC53aWR0aCgpLGg6eC5oZWlnaHQoKX0pLFM7aWYoZHQoZy5yb290cykpUz1nLnJvb3RzO2Vsc2UgaWYobXQoZy5yb290cykpe2Zvcih2YXIgVj1bXSxVPTA7VTxnLnJvb3RzLmxlbmd0aDtVKyspe3ZhciBldD1nLnJvb3RzW1VdLGF0PXguZ2V0RWxlbWVudEJ5SWQoZXQpO1YucHVzaChhdCl9Uz14LmNvbGxlY3Rpb24oVil9ZWxzZSBpZihUdChnLnJvb3RzKSlTPXguJChnLnJvb3RzKTtlbHNlIGlmKE8pUz1MLnJvb3RzKCk7ZWxzZXt2YXIgbHQ9VC5jb21wb25lbnRzKCk7Uz14LmNvbGxlY3Rpb24oKTtmb3IodmFyIGd0PWZ1bmN0aW9uKHdpKXt2YXIgX3M9bHRbd2ldLFppPV9zLm1heERlZ3JlZSghMSksTmk9X3MuZmlsdGVyKGZ1bmN0aW9uKG5zKXtyZXR1cm4gbnMuZGVncmVlKCExKT09PVppfSk7Uz1TLmFkZChOaSl9LEx0PTA7THQ8bHQubGVuZ3RoO0x0KyspZ3QoTHQpfXZhciBFdD1bXSxEdD17fSxJdD1mdW5jdGlvbih3aSxfcyl7RXRbX3NdPT1udWxsJiYoRXRbX3NdPVtdKTt2YXIgWmk9RXRbX3NdLmxlbmd0aDtFdFtfc10ucHVzaCh3aSksR0wod2kse2luZGV4OlppLGRlcHRoOl9zfSl9LHp0PWZ1bmN0aW9uKHdpLF9zKXt2YXIgWmk9czYod2kpLE5pPVppLmRlcHRoLG5zPVppLmluZGV4O0V0W05pXVtuc109bnVsbCxJdCh3aSxfcyl9O0kuYmZzKHtyb290czpTLGRpcmVjdGVkOmcuZGlyZWN0ZWQsdmlzaXQ6ZnVuY3Rpb24od2ksX3MsWmksTmksbnMpe3ZhciBVYT13aVswXSxzYT1VYS5pZCgpO0l0KFVhLG5zKSxEdFtzYV09ITB9fSk7Zm9yKHZhciB0ZT1bXSxYdD0wO1h0PEwubGVuZ3RoO1h0Kyspe3ZhciBIdD1MW1h0XTtEdFtIdC5pZCgpXXx8dGUucHVzaChIdCl9dmFyIGllPWZ1bmN0aW9uKHdpKXtmb3IodmFyIF9zPUV0W3dpXSxaaT0wO1ppPF9zLmxlbmd0aDtaaSsrKXt2YXIgTmk9X3NbWmldO2lmKE5pPT1udWxsKXtfcy5zcGxpY2UoWmksMSksWmktLTtjb250aW51ZX1HTChOaSx7ZGVwdGg6d2ksaW5kZXg6Wml9KX19LFV0PWZ1bmN0aW9uKCl7Zm9yKHZhciB3aT0wO3dpPEV0Lmxlbmd0aDt3aSsrKWllKHdpKX0sZmU9ZnVuY3Rpb24od2ksX3Mpe2Zvcih2YXIgWmk9czYod2kpLE5pPXdpLmluY29tZXJzKCkuZmlsdGVyKGZ1bmN0aW9uKEp0KXtyZXR1cm4gSnQuaXNOb2RlKCkmJlQuaGFzKEp0KX0pLG5zPS0xLFVhPXdpLmlkKCksc2E9MDtzYTxOaS5sZW5ndGg7c2ErKyl7dmFyIFhzPU5pW3NhXSxDcj1zNihYcyk7bnM9TWF0aC5tYXgobnMsQ3IuZGVwdGgpfXJldHVybiBaaS5kZXB0aDw9bnM/X3NbVWFdP251bGw6KHp0KHdpLG5zKzEpLF9zW1VhXT0hMCwhMCk6ITF9O2lmKE8mJiQpe3ZhciBnZT1bXSxzZT17fSxOZT1mdW5jdGlvbih3aSl7cmV0dXJuIGdlLnB1c2god2kpfSxwZT1mdW5jdGlvbigpe3JldHVybiBnZS5zaGlmdCgpfTtmb3IoTC5mb3JFYWNoKGZ1bmN0aW9uKERpKXtyZXR1cm4gZ2UucHVzaChEaSl9KTtnZS5sZW5ndGg+MDspe3ZhciBnbj1wZSgpLGplPWZlKGduLHNlKTtpZihqZSlnbi5vdXRnb2VycygpLmZpbHRlcihmdW5jdGlvbihEaSl7cmV0dXJuIERpLmlzTm9kZSgpJiZULmhhcyhEaSl9KS5mb3JFYWNoKE5lKTtlbHNlIGlmKGplPT09bnVsbCl7bm8oIkRldGVjdGVkIGRvdWJsZSBtYXhpbWFsIHNoaWZ0IGZvciBub2RlIGAiK2duLmlkKCkrImAuICBCYWlsaW5nIG1heGltYWwgYWRqdXN0bWVudCBkdWUgdG8gY3ljbGUuICBVc2UgYG9wdGlvbnMubWF4aW1hbDogdHJ1ZWAgb25seSBvbiBEQUdzLiIpO2JyZWFrfX19VXQoKTt2YXIgR2U9MDtpZihnLmF2b2lkT3ZlcmxhcClmb3IodmFyIHhuPTA7eG48TC5sZW5ndGg7eG4rKyl7dmFyIERuPUxbeG5dLFhuPURuLmxheW91dERpbWVuc2lvbnMoZyksQ249WG4udyxZbj1Ybi5oO0dlPU1hdGgubWF4KEdlLENuLFluKX12YXIgcnI9e30sd3I9ZnVuY3Rpb24od2kpe2lmKHJyW3dpLmlkKCldKXJldHVybiByclt3aS5pZCgpXTtmb3IodmFyIF9zPXM2KHdpKS5kZXB0aCxaaT13aS5uZWlnaGJvcmhvb2QoKSxOaT0wLG5zPTAsVWE9MDtVYTxaaS5sZW5ndGg7VWErKyl7dmFyIHNhPVppW1VhXTtpZighKHNhLmlzRWRnZSgpfHxzYS5pc1BhcmVudCgpfHwhTC5oYXMoc2EpKSl7dmFyIFhzPXM2KHNhKTtpZihYcyE9bnVsbCl7dmFyIENyPVhzLmluZGV4LEp0PVhzLmRlcHRoO2lmKCEoQ3I9PW51bGx8fEp0PT1udWxsKSl7dmFyIGpuPUV0W0p0XS5sZW5ndGg7SnQ8X3MmJihOaSs9Q3Ivam4sbnMrKyl9fX19cmV0dXJuIG5zPU1hdGgubWF4KDEsbnMpLE5pPU5pL25zLG5zPT09MCYmKE5pPTApLHJyW3dpLmlkKCldPU5pLE5pfSx1cj1mdW5jdGlvbih3aSxfcyl7dmFyIFppPXdyKHdpKSxOaT13cihfcyksbnM9WmktTmk7cmV0dXJuIG5zPT09MD8kZSh3aS5pZCgpLF9zLmlkKCkpOm5zfTtnLmRlcHRoU29ydCE9PXZvaWQgMCYmKHVyPWcuZGVwdGhTb3J0KTtmb3IodmFyIGVyPTA7ZXI8RXQubGVuZ3RoO2VyKyspRXRbZXJdLnNvcnQodXIpLGllKGVyKTtmb3IodmFyIGJuPVtdLHByPTA7cHI8dGUubGVuZ3RoO3ByKyspYm4ucHVzaCh0ZVtwcl0pO0V0LnVuc2hpZnQoYm4pLFV0KCk7Zm9yKHZhciBmcj0wLHJpPTA7cmk8RXQubGVuZ3RoO3JpKyspZnI9TWF0aC5tYXgoRXRbcmldLmxlbmd0aCxmcik7dmFyIF9pPXt4OnoueDErei53LzIseTp6LngxK3ouaC8yfSxpYT1FdC5yZWR1Y2UoZnVuY3Rpb24oRGksd2kpe3JldHVybiBNYXRoLm1heChEaSx3aS5sZW5ndGgpfSwwKSxMYT1mdW5jdGlvbih3aSl7dmFyIF9zPXM2KHdpKSxaaT1fcy5kZXB0aCxOaT1fcy5pbmRleCxucz1FdFtaaV0ubGVuZ3RoLFVhPU1hdGgubWF4KHoudy8oKGcuZ3JpZD9pYTpucykrMSksR2UpLHNhPU1hdGgubWF4KHouaC8oRXQubGVuZ3RoKzEpLEdlKSxYcz1NYXRoLm1pbih6LncvMi9FdC5sZW5ndGgsei5oLzIvRXQubGVuZ3RoKTtpZihYcz1NYXRoLm1heChYcyxHZSksZy5jaXJjbGUpe3ZhciBKdD1YcypaaStYcy0oRXQubGVuZ3RoPjAmJkV0WzBdLmxlbmd0aDw9Mz9Ycy8yOjApLGpuPTIqTWF0aC5QSS9FdFtaaV0ubGVuZ3RoKk5pO3JldHVybiBaaT09PTAmJkV0WzBdLmxlbmd0aD09PTEmJihKdD0xKSx7eDpfaS54K0p0Kk1hdGguY29zKGpuKSx5Ol9pLnkrSnQqTWF0aC5zaW4oam4pfX1lbHNle3ZhciBDcj17eDpfaS54KyhOaSsxLShucysxKS8yKSpVYSx5OihaaSsxKSpzYX07cmV0dXJuIENyfX07cmV0dXJuIFQubm9kZXMoKS5sYXlvdXRQb3NpdGlvbnModGhpcyxnLExhKSx0aGlzfTt2YXIgSUo9e2ZpdDohMCxwYWRkaW5nOjMwLGJvdW5kaW5nQm94OnZvaWQgMCxhdm9pZE92ZXJsYXA6ITAsbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiExLHNwYWNpbmdGYWN0b3I6dm9pZCAwLHJhZGl1czp2b2lkIDAsc3RhcnRBbmdsZTozLzIqTWF0aC5QSSxzd2VlcDp2b2lkIDAsY2xvY2t3aXNlOiEwLHNvcnQ6dm9pZCAwLGFuaW1hdGU6ITEsYW5pbWF0aW9uRHVyYXRpb246NTAwLGFuaW1hdGlvbkVhc2luZzp2b2lkIDAsYW5pbWF0ZUZpbHRlcjpmdW5jdGlvbihnLHgpe3JldHVybiEwfSxyZWFkeTp2b2lkIDAsc3RvcDp2b2lkIDAsdHJhbnNmb3JtOmZ1bmN0aW9uKGcseCl7cmV0dXJuIHh9fTtmdW5jdGlvbiBmVCh5KXt0aGlzLm9wdGlvbnM9Zm4oe30sSUoseSl9ZlQucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB5PXRoaXMub3B0aW9ucyxnPXkseD15LmN5LFQ9Zy5lbGVzLEw9Zy5jb3VudGVyY2xvY2t3aXNlIT09dm9pZCAwPyFnLmNvdW50ZXJjbG9ja3dpc2U6Zy5jbG9ja3dpc2UsST1ULm5vZGVzKCkubm90KCI6cGFyZW50Iik7Zy5zb3J0JiYoST1JLnNvcnQoZy5zb3J0KSk7Zm9yKHZhciBPPVJkKGcuYm91bmRpbmdCb3g/Zy5ib3VuZGluZ0JveDp7eDE6MCx5MTowLHc6eC53aWR0aCgpLGg6eC5oZWlnaHQoKX0pLCQ9e3g6Ty54MStPLncvMix5Ok8ueTErTy5oLzJ9LHo9Zy5zd2VlcD09PXZvaWQgMD8yKk1hdGguUEktMipNYXRoLlBJL0kubGVuZ3RoOmcuc3dlZXAsUz16L01hdGgubWF4KDEsSS5sZW5ndGgtMSksVixVPTAsZXQ9MDtldDxJLmxlbmd0aDtldCsrKXt2YXIgYXQ9SVtldF0sbHQ9YXQubGF5b3V0RGltZW5zaW9ucyhnKSxndD1sdC53LEx0PWx0Lmg7VT1NYXRoLm1heChVLGd0LEx0KX1pZihzdChnLnJhZGl1cyk/Vj1nLnJhZGl1czpJLmxlbmd0aDw9MT9WPTA6Vj1NYXRoLm1pbihPLmgsTy53KS8yLVUsSS5sZW5ndGg+MSYmZy5hdm9pZE92ZXJsYXApe1UqPTEuNzU7dmFyIEV0PU1hdGguY29zKFMpLU1hdGguY29zKDApLER0PU1hdGguc2luKFMpLU1hdGguc2luKDApLEl0PU1hdGguc3FydChVKlUvKEV0KkV0K0R0KkR0KSk7Vj1NYXRoLm1heChJdCxWKX12YXIgenQ9ZnVuY3Rpb24oWHQsSHQpe3ZhciBpZT1nLnN0YXJ0QW5nbGUrSHQqUyooTD8xOi0xKSxVdD1WKk1hdGguY29zKGllKSxmZT1WKk1hdGguc2luKGllKSxnZT17eDokLngrVXQseTokLnkrZmV9O3JldHVybiBnZX07cmV0dXJuIFQubm9kZXMoKS5sYXlvdXRQb3NpdGlvbnModGhpcyxnLHp0KSx0aGlzfTt2YXIgT0o9e2ZpdDohMCxwYWRkaW5nOjMwLHN0YXJ0QW5nbGU6My8yKk1hdGguUEksc3dlZXA6dm9pZCAwLGNsb2Nrd2lzZTohMCxlcXVpZGlzdGFudDohMSxtaW5Ob2RlU3BhY2luZzoxMCxib3VuZGluZ0JveDp2b2lkIDAsYXZvaWRPdmVybGFwOiEwLG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczohMSxoZWlnaHQ6dm9pZCAwLHdpZHRoOnZvaWQgMCxzcGFjaW5nRmFjdG9yOnZvaWQgMCxjb25jZW50cmljOmZ1bmN0aW9uKGcpe3JldHVybiBnLmRlZ3JlZSgpfSxsZXZlbFdpZHRoOmZ1bmN0aW9uKGcpe3JldHVybiBnLm1heERlZ3JlZSgpLzR9LGFuaW1hdGU6ITEsYW5pbWF0aW9uRHVyYXRpb246NTAwLGFuaW1hdGlvbkVhc2luZzp2b2lkIDAsYW5pbWF0ZUZpbHRlcjpmdW5jdGlvbihnLHgpe3JldHVybiEwfSxyZWFkeTp2b2lkIDAsc3RvcDp2b2lkIDAsdHJhbnNmb3JtOmZ1bmN0aW9uKGcseCl7cmV0dXJuIHh9fTtmdW5jdGlvbiBMQih5KXt0aGlzLm9wdGlvbnM9Zm4oe30sT0oseSl9TEIucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe2Zvcih2YXIgeT10aGlzLm9wdGlvbnMsZz15LHg9Zy5jb3VudGVyY2xvY2t3aXNlIT09dm9pZCAwPyFnLmNvdW50ZXJjbG9ja3dpc2U6Zy5jbG9ja3dpc2UsVD15LmN5LEw9Zy5lbGVzLEk9TC5ub2RlcygpLm5vdCgiOnBhcmVudCIpLE89UmQoZy5ib3VuZGluZ0JveD9nLmJvdW5kaW5nQm94Ont4MTowLHkxOjAsdzpULndpZHRoKCksaDpULmhlaWdodCgpfSksJD17eDpPLngxK08udy8yLHk6Ty55MStPLmgvMn0sej1bXSxTPTAsVj0wO1Y8SS5sZW5ndGg7VisrKXt2YXIgVT1JW1ZdLGV0PXZvaWQgMDtldD1nLmNvbmNlbnRyaWMoVSksei5wdXNoKHt2YWx1ZTpldCxub2RlOlV9KSxVLl9wcml2YXRlLnNjcmF0Y2guY29uY2VudHJpYz1ldH1JLnVwZGF0ZVN0eWxlKCk7Zm9yKHZhciBhdD0wO2F0PEkubGVuZ3RoO2F0Kyspe3ZhciBsdD1JW2F0XSxndD1sdC5sYXlvdXREaW1lbnNpb25zKGcpO1M9TWF0aC5tYXgoUyxndC53LGd0LmgpfXouc29ydChmdW5jdGlvbihEaSx3aSl7cmV0dXJuIHdpLnZhbHVlLURpLnZhbHVlfSk7Zm9yKHZhciBMdD1nLmxldmVsV2lkdGgoSSksRXQ9W1tdXSxEdD1FdFswXSxJdD0wO0l0PHoubGVuZ3RoO0l0Kyspe3ZhciB6dD16W0l0XTtpZihEdC5sZW5ndGg+MCl7dmFyIHRlPU1hdGguYWJzKER0WzBdLnZhbHVlLXp0LnZhbHVlKTt0ZT49THQmJihEdD1bXSxFdC5wdXNoKER0KSl9RHQucHVzaCh6dCl9dmFyIFh0PVMrZy5taW5Ob2RlU3BhY2luZztpZighZy5hdm9pZE92ZXJsYXApe3ZhciBIdD1FdC5sZW5ndGg+MCYmRXRbMF0ubGVuZ3RoPjEsaWU9TWF0aC5taW4oTy53LE8uaCkvMi1YdCxVdD1pZS8oRXQubGVuZ3RoK0h0PzE6MCk7WHQ9TWF0aC5taW4oWHQsVXQpfWZvcih2YXIgZmU9MCxnZT0wO2dlPEV0Lmxlbmd0aDtnZSsrKXt2YXIgc2U9RXRbZ2VdLE5lPWcuc3dlZXA9PT12b2lkIDA/MipNYXRoLlBJLTIqTWF0aC5QSS9zZS5sZW5ndGg6Zy5zd2VlcCxwZT1zZS5kVGhldGE9TmUvTWF0aC5tYXgoMSxzZS5sZW5ndGgtMSk7aWYoc2UubGVuZ3RoPjEmJmcuYXZvaWRPdmVybGFwKXt2YXIgZ249TWF0aC5jb3MocGUpLU1hdGguY29zKDApLGplPU1hdGguc2luKHBlKS1NYXRoLnNpbigwKSxHZT1NYXRoLnNxcnQoWHQqWHQvKGduKmduK2plKmplKSk7ZmU9TWF0aC5tYXgoR2UsZmUpfXNlLnI9ZmUsZmUrPVh0fWlmKGcuZXF1aWRpc3RhbnQpe2Zvcih2YXIgeG49MCxEbj0wLFhuPTA7WG48RXQubGVuZ3RoO1huKyspe3ZhciBDbj1FdFtYbl0sWW49Q24uci1Ebjt4bj1NYXRoLm1heCh4bixZbil9RG49MDtmb3IodmFyIHJyPTA7cnI8RXQubGVuZ3RoO3JyKyspe3ZhciB3cj1FdFtycl07cnI9PT0wJiYoRG49d3Iuciksd3Iucj1EbixEbis9eG59fWZvcih2YXIgdXI9e30sZXI9MDtlcjxFdC5sZW5ndGg7ZXIrKylmb3IodmFyIGJuPUV0W2VyXSxwcj1ibi5kVGhldGEsZnI9Ym4ucixyaT0wO3JpPGJuLmxlbmd0aDtyaSsrKXt2YXIgX2k9Ym5bcmldLGlhPWcuc3RhcnRBbmdsZSsoeD8xOi0xKSpwcipyaSxMYT17eDokLngrZnIqTWF0aC5jb3MoaWEpLHk6JC55K2ZyKk1hdGguc2luKGlhKX07dXJbX2kubm9kZS5pZCgpXT1MYX1yZXR1cm4gTC5ub2RlcygpLmxheW91dFBvc2l0aW9ucyh0aGlzLGcsZnVuY3Rpb24oRGkpe3ZhciB3aT1EaS5pZCgpO3JldHVybiB1clt3aV19KSx0aGlzfTt2YXIgVUwsTko9e3JlYWR5OmZ1bmN0aW9uKCl7fSxzdG9wOmZ1bmN0aW9uKCl7fSxhbmltYXRlOiEwLGFuaW1hdGlvbkVhc2luZzp2b2lkIDAsYW5pbWF0aW9uRHVyYXRpb246dm9pZCAwLGFuaW1hdGVGaWx0ZXI6ZnVuY3Rpb24oZyx4KXtyZXR1cm4hMH0sYW5pbWF0aW9uVGhyZXNob2xkOjI1MCxyZWZyZXNoOjIwLGZpdDohMCxwYWRkaW5nOjMwLGJvdW5kaW5nQm94OnZvaWQgMCxub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITEscmFuZG9taXplOiExLGNvbXBvbmVudFNwYWNpbmc6NDAsbm9kZVJlcHVsc2lvbjpmdW5jdGlvbihnKXtyZXR1cm4gMjA0OH0sbm9kZU92ZXJsYXA6NCxpZGVhbEVkZ2VMZW5ndGg6ZnVuY3Rpb24oZyl7cmV0dXJuIDMyfSxlZGdlRWxhc3RpY2l0eTpmdW5jdGlvbihnKXtyZXR1cm4gMzJ9LG5lc3RpbmdGYWN0b3I6MS4yLGdyYXZpdHk6MSxudW1JdGVyOjFlMyxpbml0aWFsVGVtcDoxZTMsY29vbGluZ0ZhY3RvcjouOTksbWluVGVtcDoxfTtmdW5jdGlvbiBkVCh5KXt0aGlzLm9wdGlvbnM9Zm4oe30sTkoseSksdGhpcy5vcHRpb25zLmxheW91dD10aGlzfWRULnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgeT10aGlzLm9wdGlvbnMsZz15LmN5LHg9dGhpczt4LnN0b3BwZWQ9ITEsKHkuYW5pbWF0ZT09PSEwfHx5LmFuaW1hdGU9PT0hMSkmJnguZW1pdCh7dHlwZToibGF5b3V0c3RhcnQiLGxheW91dDp4fSkseS5kZWJ1Zz09PSEwP1VMPSEwOlVMPSExO3ZhciBUPVBKKGcseCx5KTtVTCYmUkooVCkseS5yYW5kb21pemUmJmpKKFQpO3ZhciBMPW1lKCksST1mdW5jdGlvbigpeyRKKFQsZyx5KSx5LmZpdD09PSEwJiZnLmZpdCh5LnBhZGRpbmcpfSxPPWZ1bmN0aW9uKGV0KXtyZXR1cm4hKHguc3RvcHBlZHx8ZXQ+PXkubnVtSXRlcnx8KHpKKFQseSksVC50ZW1wZXJhdHVyZT1ULnRlbXBlcmF0dXJlKnkuY29vbGluZ0ZhY3RvcixULnRlbXBlcmF0dXJlPHkubWluVGVtcCkpfSwkPWZ1bmN0aW9uKCl7aWYoeS5hbmltYXRlPT09ITB8fHkuYW5pbWF0ZT09PSExKUkoKSx4Lm9uZSgibGF5b3V0c3RvcCIseS5zdG9wKSx4LmVtaXQoe3R5cGU6ImxheW91dHN0b3AiLGxheW91dDp4fSk7ZWxzZXt2YXIgZXQ9eS5lbGVzLm5vZGVzKCksYXQ9TUIoVCx5LGV0KTtldC5sYXlvdXRQb3NpdGlvbnMoeCx5LGF0KX19LHo9MCxTPSEwO2lmKHkuYW5pbWF0ZT09PSEwKXt2YXIgVj1mdW5jdGlvbiBVKCl7Zm9yKHZhciBldD0wO1MmJmV0PHkucmVmcmVzaDspUz1PKHopLHorKyxldCsrO2lmKCFTKUlCKFQseSksJCgpO2Vsc2V7dmFyIGF0PW1lKCk7YXQtTD49eS5hbmltYXRpb25UaHJlc2hvbGQmJkkoKSxRYyhVKX19O1YoKX1lbHNle2Zvcig7UzspUz1PKHopLHorKztJQihULHkpLCQoKX1yZXR1cm4gdGhpc30sZFQucHJvdG90eXBlLnN0b3A9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdG9wcGVkPSEwLHRoaXMudGhyZWFkJiZ0aGlzLnRocmVhZC5zdG9wKCksdGhpcy5lbWl0KCJsYXlvdXRzdG9wIiksdGhpc30sZFQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50aHJlYWQmJnRoaXMudGhyZWFkLnN0b3AoKSx0aGlzfTt2YXIgUEo9ZnVuY3Rpb24oZyx4LFQpe2Zvcih2YXIgTD1ULmVsZXMuZWRnZXMoKSxJPVQuZWxlcy5ub2RlcygpLE89e2lzQ29tcG91bmQ6Zy5oYXNDb21wb3VuZE5vZGVzKCksbGF5b3V0Tm9kZXM6W10saWRUb0luZGV4Ont9LG5vZGVTaXplOkkuc2l6ZSgpLGdyYXBoU2V0OltdLGluZGV4VG9HcmFwaDpbXSxsYXlvdXRFZGdlczpbXSxlZGdlU2l6ZTpMLnNpemUoKSx0ZW1wZXJhdHVyZTpULmluaXRpYWxUZW1wLGNsaWVudFdpZHRoOmcud2lkdGgoKSxjbGllbnRIZWlnaHQ6Zy53aWR0aCgpLGJvdW5kaW5nQm94OlJkKFQuYm91bmRpbmdCb3g/VC5ib3VuZGluZ0JveDp7eDE6MCx5MTowLHc6Zy53aWR0aCgpLGg6Zy5oZWlnaHQoKX0pfSwkPVQuZWxlcy5jb21wb25lbnRzKCksej17fSxTPTA7UzwkLmxlbmd0aDtTKyspZm9yKHZhciBWPSRbU10sVT0wO1U8Vi5sZW5ndGg7VSsrKXt2YXIgZXQ9VltVXTt6W2V0LmlkKCldPVN9Zm9yKHZhciBTPTA7UzxPLm5vZGVTaXplO1MrKyl7dmFyIGF0PUlbU10sbHQ9YXQubGF5b3V0RGltZW5zaW9ucyhUKSxndD17fTtndC5pc0xvY2tlZD1hdC5sb2NrZWQoKSxndC5pZD1hdC5kYXRhKCJpZCIpLGd0LnBhcmVudElkPWF0LmRhdGEoInBhcmVudCIpLGd0LmNtcHRJZD16W2F0LmlkKCldLGd0LmNoaWxkcmVuPVtdLGd0LnBvc2l0aW9uWD1hdC5wb3NpdGlvbigieCIpLGd0LnBvc2l0aW9uWT1hdC5wb3NpdGlvbigieSIpLGd0Lm9mZnNldFg9MCxndC5vZmZzZXRZPTAsZ3QuaGVpZ2h0PWx0LncsZ3Qud2lkdGg9bHQuaCxndC5tYXhYPWd0LnBvc2l0aW9uWCtndC53aWR0aC8yLGd0Lm1pblg9Z3QucG9zaXRpb25YLWd0LndpZHRoLzIsZ3QubWF4WT1ndC5wb3NpdGlvblkrZ3QuaGVpZ2h0LzIsZ3QubWluWT1ndC5wb3NpdGlvblktZ3QuaGVpZ2h0LzIsZ3QucGFkTGVmdD1wYXJzZUZsb2F0KGF0LnN0eWxlKCJwYWRkaW5nIikpLGd0LnBhZFJpZ2h0PXBhcnNlRmxvYXQoYXQuc3R5bGUoInBhZGRpbmciKSksZ3QucGFkVG9wPXBhcnNlRmxvYXQoYXQuc3R5bGUoInBhZGRpbmciKSksZ3QucGFkQm90dG9tPXBhcnNlRmxvYXQoYXQuc3R5bGUoInBhZGRpbmciKSksZ3Qubm9kZVJlcHVsc2lvbj1rdChULm5vZGVSZXB1bHNpb24pP1Qubm9kZVJlcHVsc2lvbihhdCk6VC5ub2RlUmVwdWxzaW9uLE8ubGF5b3V0Tm9kZXMucHVzaChndCksTy5pZFRvSW5kZXhbZ3QuaWRdPVN9Zm9yKHZhciBMdD1bXSxFdD0wLER0PS0xLEl0PVtdLFM9MDtTPE8ubm9kZVNpemU7UysrKXt2YXIgYXQ9Ty5sYXlvdXROb2Rlc1tTXSx6dD1hdC5wYXJlbnRJZDt6dCE9bnVsbD9PLmxheW91dE5vZGVzW08uaWRUb0luZGV4W3p0XV0uY2hpbGRyZW4ucHVzaChhdC5pZCk6KEx0WysrRHRdPWF0LmlkLEl0LnB1c2goYXQuaWQpKX1mb3IoTy5ncmFwaFNldC5wdXNoKEl0KTtFdDw9RHQ7KXt2YXIgdGU9THRbRXQrK10sWHQ9Ty5pZFRvSW5kZXhbdGVdLGV0PU8ubGF5b3V0Tm9kZXNbWHRdLEh0PWV0LmNoaWxkcmVuO2lmKEh0Lmxlbmd0aD4wKXtPLmdyYXBoU2V0LnB1c2goSHQpO2Zvcih2YXIgUz0wO1M8SHQubGVuZ3RoO1MrKylMdFsrK0R0XT1IdFtTXX19Zm9yKHZhciBTPTA7UzxPLmdyYXBoU2V0Lmxlbmd0aDtTKyspZm9yKHZhciBpZT1PLmdyYXBoU2V0W1NdLFU9MDtVPGllLmxlbmd0aDtVKyspe3ZhciBVdD1PLmlkVG9JbmRleFtpZVtVXV07Ty5pbmRleFRvR3JhcGhbVXRdPVN9Zm9yKHZhciBTPTA7UzxPLmVkZ2VTaXplO1MrKyl7dmFyIGZlPUxbU10sZ2U9e307Z2UuaWQ9ZmUuZGF0YSgiaWQiKSxnZS5zb3VyY2VJZD1mZS5kYXRhKCJzb3VyY2UiKSxnZS50YXJnZXRJZD1mZS5kYXRhKCJ0YXJnZXQiKTt2YXIgc2U9a3QoVC5pZGVhbEVkZ2VMZW5ndGgpP1QuaWRlYWxFZGdlTGVuZ3RoKGZlKTpULmlkZWFsRWRnZUxlbmd0aCxOZT1rdChULmVkZ2VFbGFzdGljaXR5KT9ULmVkZ2VFbGFzdGljaXR5KGZlKTpULmVkZ2VFbGFzdGljaXR5LHBlPU8uaWRUb0luZGV4W2dlLnNvdXJjZUlkXSxnbj1PLmlkVG9JbmRleFtnZS50YXJnZXRJZF0samU9Ty5pbmRleFRvR3JhcGhbcGVdLEdlPU8uaW5kZXhUb0dyYXBoW2duXTtpZihqZSE9R2Upe2Zvcih2YXIgeG49RkooZ2Uuc291cmNlSWQsZ2UudGFyZ2V0SWQsTyksRG49Ty5ncmFwaFNldFt4bl0sWG49MCxndD1PLmxheW91dE5vZGVzW3BlXTtEbi5pbmRleE9mKGd0LmlkKT09PS0xOylndD1PLmxheW91dE5vZGVzW08uaWRUb0luZGV4W2d0LnBhcmVudElkXV0sWG4rKztmb3IoZ3Q9Ty5sYXlvdXROb2Rlc1tnbl07RG4uaW5kZXhPZihndC5pZCk9PT0tMTspZ3Q9Ty5sYXlvdXROb2Rlc1tPLmlkVG9JbmRleFtndC5wYXJlbnRJZF1dLFhuKys7c2UqPVhuKlQubmVzdGluZ0ZhY3Rvcn1nZS5pZGVhbExlbmd0aD1zZSxnZS5lbGFzdGljaXR5PU5lLE8ubGF5b3V0RWRnZXMucHVzaChnZSl9cmV0dXJuIE99LEZKPWZ1bmN0aW9uKGcseCxUKXt2YXIgTD1CSihnLHgsMCxUKTtyZXR1cm4gMj5MLmNvdW50PzA6TC5ncmFwaH0sQko9ZnVuY3Rpb24geShnLHgsVCxMKXt2YXIgST1MLmdyYXBoU2V0W1RdO2lmKC0xPEkuaW5kZXhPZihnKSYmLTE8SS5pbmRleE9mKHgpKXJldHVybntjb3VudDoyLGdyYXBoOlR9O2Zvcih2YXIgTz0wLCQ9MDskPEkubGVuZ3RoOyQrKyl7dmFyIHo9SVskXSxTPUwuaWRUb0luZGV4W3pdLFY9TC5sYXlvdXROb2Rlc1tTXS5jaGlsZHJlbjtpZihWLmxlbmd0aCE9PTApe3ZhciBVPUwuaW5kZXhUb0dyYXBoW0wuaWRUb0luZGV4W1ZbMF1dXSxldD15KGcseCxVLEwpO2lmKGV0LmNvdW50IT09MClpZihldC5jb3VudD09PTEpe2lmKE8rKyxPPT09MilicmVha31lbHNlIHJldHVybiBldH19cmV0dXJue2NvdW50Ok8sZ3JhcGg6VH19LFJKLGpKPWZ1bmN0aW9uKGcseCl7Zm9yKHZhciBUPWcuY2xpZW50V2lkdGgsTD1nLmNsaWVudEhlaWdodCxJPTA7STxnLm5vZGVTaXplO0krKyl7dmFyIE89Zy5sYXlvdXROb2Rlc1tJXTtPLmNoaWxkcmVuLmxlbmd0aD09PTAmJiFPLmlzTG9ja2VkJiYoTy5wb3NpdGlvblg9TWF0aC5yYW5kb20oKSpULE8ucG9zaXRpb25ZPU1hdGgucmFuZG9tKCkqTCl9fSxNQj1mdW5jdGlvbihnLHgsVCl7dmFyIEw9Zy5ib3VuZGluZ0JveCxJPXt4MToxLzAseDI6LTEvMCx5MToxLzAseTI6LTEvMH07cmV0dXJuIHguYm91bmRpbmdCb3gmJihULmZvckVhY2goZnVuY3Rpb24oTyl7dmFyICQ9Zy5sYXlvdXROb2Rlc1tnLmlkVG9JbmRleFtPLmRhdGEoImlkIildXTtJLngxPU1hdGgubWluKEkueDEsJC5wb3NpdGlvblgpLEkueDI9TWF0aC5tYXgoSS54MiwkLnBvc2l0aW9uWCksSS55MT1NYXRoLm1pbihJLnkxLCQucG9zaXRpb25ZKSxJLnkyPU1hdGgubWF4KEkueTIsJC5wb3NpdGlvblkpfSksSS53PUkueDItSS54MSxJLmg9SS55Mi1JLnkxKSxmdW5jdGlvbihPLCQpe3ZhciB6PWcubGF5b3V0Tm9kZXNbZy5pZFRvSW5kZXhbTy5kYXRhKCJpZCIpXV07aWYoeC5ib3VuZGluZ0JveCl7dmFyIFM9KHoucG9zaXRpb25YLUkueDEpL0kudyxWPSh6LnBvc2l0aW9uWS1JLnkxKS9JLmg7cmV0dXJue3g6TC54MStTKkwudyx5OkwueTErVipMLmh9fWVsc2UgcmV0dXJue3g6ei5wb3NpdGlvblgseTp6LnBvc2l0aW9uWX19fSwkSj1mdW5jdGlvbihnLHgsVCl7dmFyIEw9VC5sYXlvdXQsST1ULmVsZXMubm9kZXMoKSxPPU1CKGcsVCxJKTtJLnBvc2l0aW9ucyhPKSxnLnJlYWR5IT09ITAmJihnLnJlYWR5PSEwLEwub25lKCJsYXlvdXRyZWFkeSIsVC5yZWFkeSksTC5lbWl0KHt0eXBlOiJsYXlvdXRyZWFkeSIsbGF5b3V0OnRoaXN9KSl9LHpKPWZ1bmN0aW9uKGcseCxUKXtxSihnLHgpLEdKKGcpLFVKKGcseCksV0ooZyksS0ooZyl9LHFKPWZ1bmN0aW9uKGcseCl7Zm9yKHZhciBUPTA7VDxnLmdyYXBoU2V0Lmxlbmd0aDtUKyspZm9yKHZhciBMPWcuZ3JhcGhTZXRbVF0sST1MLmxlbmd0aCxPPTA7TzxJO08rKylmb3IodmFyICQ9Zy5sYXlvdXROb2Rlc1tnLmlkVG9JbmRleFtMW09dXV0sej1PKzE7ejxJO3orKyl7dmFyIFM9Zy5sYXlvdXROb2Rlc1tnLmlkVG9JbmRleFtMW3pdXV07SEooJCxTLGcseCl9fSxEQj1mdW5jdGlvbihnKXtyZXR1cm4tZysyKmcqTWF0aC5yYW5kb20oKX0sSEo9ZnVuY3Rpb24oZyx4LFQsTCl7dmFyIEk9Zy5jbXB0SWQsTz14LmNtcHRJZDtpZighKEkhPT1PJiYhVC5pc0NvbXBvdW5kKSl7dmFyICQ9eC5wb3NpdGlvblgtZy5wb3NpdGlvblgsej14LnBvc2l0aW9uWS1nLnBvc2l0aW9uWSxTPTE7JD09PTAmJno9PT0wJiYoJD1EQihTKSx6PURCKFMpKTt2YXIgVj1WSihnLHgsJCx6KTtpZihWPjApdmFyIFU9TC5ub2RlT3ZlcmxhcCpWLGV0PU1hdGguc3FydCgkKiQreip6KSxhdD1VKiQvZXQsbHQ9VSp6L2V0O2Vsc2UgdmFyIGd0PWdUKGcsJCx6KSxMdD1nVCh4LC0xKiQsLTEqeiksRXQ9THQueC1ndC54LER0PUx0LnktZ3QueSxJdD1FdCpFdCtEdCpEdCxldD1NYXRoLnNxcnQoSXQpLFU9KGcubm9kZVJlcHVsc2lvbit4Lm5vZGVSZXB1bHNpb24pL0l0LGF0PVUqRXQvZXQsbHQ9VSpEdC9ldDtnLmlzTG9ja2VkfHwoZy5vZmZzZXRYLT1hdCxnLm9mZnNldFktPWx0KSx4LmlzTG9ja2VkfHwoeC5vZmZzZXRYKz1hdCx4Lm9mZnNldFkrPWx0KX19LFZKPWZ1bmN0aW9uKGcseCxULEwpe2lmKFQ+MCl2YXIgST1nLm1heFgteC5taW5YO2Vsc2UgdmFyIEk9eC5tYXhYLWcubWluWDtpZihMPjApdmFyIE89Zy5tYXhZLXgubWluWTtlbHNlIHZhciBPPXgubWF4WS1nLm1pblk7cmV0dXJuIEk+PTAmJk8+PTA/TWF0aC5zcXJ0KEkqSStPKk8pOjB9LGdUPWZ1bmN0aW9uKGcseCxUKXt2YXIgTD1nLnBvc2l0aW9uWCxJPWcucG9zaXRpb25ZLE89Zy5oZWlnaHR8fDEsJD1nLndpZHRofHwxLHo9VC94LFM9Ty8kLFY9e307cmV0dXJuIHg9PT0wJiYwPFR8fHg9PT0wJiYwPlQ/KFYueD1MLFYueT1JK08vMixWKTowPHgmJi0xKlM8PXomJno8PVM/KFYueD1MKyQvMixWLnk9SSskKlQvMi94LFYpOjA+eCYmLTEqUzw9eiYmejw9Uz8oVi54PUwtJC8yLFYueT1JLSQqVC8yL3gsVik6MDxUJiYoejw9LTEqU3x8ej49Uyk/KFYueD1MK08qeC8yL1QsVi55PUkrTy8yLFYpOigwPlQmJih6PD0tMSpTfHx6Pj1TKSYmKFYueD1MLU8qeC8yL1QsVi55PUktTy8yKSxWKX0sR0o9ZnVuY3Rpb24oZyx4KXtmb3IodmFyIFQ9MDtUPGcuZWRnZVNpemU7VCsrKXt2YXIgTD1nLmxheW91dEVkZ2VzW1RdLEk9Zy5pZFRvSW5kZXhbTC5zb3VyY2VJZF0sTz1nLmxheW91dE5vZGVzW0ldLCQ9Zy5pZFRvSW5kZXhbTC50YXJnZXRJZF0sej1nLmxheW91dE5vZGVzWyRdLFM9ei5wb3NpdGlvblgtTy5wb3NpdGlvblgsVj16LnBvc2l0aW9uWS1PLnBvc2l0aW9uWTtpZighKFM9PT0wJiZWPT09MCkpe3ZhciBVPWdUKE8sUyxWKSxldD1nVCh6LC0xKlMsLTEqViksYXQ9ZXQueC1VLngsbHQ9ZXQueS1VLnksZ3Q9TWF0aC5zcXJ0KGF0KmF0K2x0Kmx0KSxMdD1NYXRoLnBvdyhMLmlkZWFsTGVuZ3RoLWd0LDIpL0wuZWxhc3RpY2l0eTtpZihndCE9PTApdmFyIEV0PUx0KmF0L2d0LER0PUx0Kmx0L2d0O2Vsc2UgdmFyIEV0PTAsRHQ9MDtPLmlzTG9ja2VkfHwoTy5vZmZzZXRYKz1FdCxPLm9mZnNldFkrPUR0KSx6LmlzTG9ja2VkfHwoei5vZmZzZXRYLT1FdCx6Lm9mZnNldFktPUR0KX19fSxVSj1mdW5jdGlvbihnLHgpe2lmKHguZ3Jhdml0eSE9PTApZm9yKHZhciBUPTEsTD0wO0w8Zy5ncmFwaFNldC5sZW5ndGg7TCsrKXt2YXIgST1nLmdyYXBoU2V0W0xdLE89SS5sZW5ndGg7aWYoTD09PTApdmFyICQ9Zy5jbGllbnRIZWlnaHQvMix6PWcuY2xpZW50V2lkdGgvMjtlbHNlIHZhciBTPWcubGF5b3V0Tm9kZXNbZy5pZFRvSW5kZXhbSVswXV1dLFY9Zy5sYXlvdXROb2Rlc1tnLmlkVG9JbmRleFtTLnBhcmVudElkXV0sJD1WLnBvc2l0aW9uWCx6PVYucG9zaXRpb25ZO2Zvcih2YXIgVT0wO1U8TztVKyspe3ZhciBldD1nLmxheW91dE5vZGVzW2cuaWRUb0luZGV4W0lbVV1dXTtpZighZXQuaXNMb2NrZWQpe3ZhciBhdD0kLWV0LnBvc2l0aW9uWCxsdD16LWV0LnBvc2l0aW9uWSxndD1NYXRoLnNxcnQoYXQqYXQrbHQqbHQpO2lmKGd0PlQpe3ZhciBMdD14LmdyYXZpdHkqYXQvZ3QsRXQ9eC5ncmF2aXR5Kmx0L2d0O2V0Lm9mZnNldFgrPUx0LGV0Lm9mZnNldFkrPUV0fX19fX0sV0o9ZnVuY3Rpb24oZyx4KXt2YXIgVD1bXSxMPTAsST0tMTtmb3IoVC5wdXNoLmFwcGx5KFQsZy5ncmFwaFNldFswXSksSSs9Zy5ncmFwaFNldFswXS5sZW5ndGg7TDw9STspe3ZhciBPPVRbTCsrXSwkPWcuaWRUb0luZGV4W09dLHo9Zy5sYXlvdXROb2Rlc1skXSxTPXouY2hpbGRyZW47aWYoMDxTLmxlbmd0aCYmIXouaXNMb2NrZWQpe2Zvcih2YXIgVj16Lm9mZnNldFgsVT16Lm9mZnNldFksZXQ9MDtldDxTLmxlbmd0aDtldCsrKXt2YXIgYXQ9Zy5sYXlvdXROb2Rlc1tnLmlkVG9JbmRleFtTW2V0XV1dO2F0Lm9mZnNldFgrPVYsYXQub2Zmc2V0WSs9VSxUWysrSV09U1tldF19ei5vZmZzZXRYPTAsei5vZmZzZXRZPTB9fX0sS0o9ZnVuY3Rpb24oZyx4KXtmb3IodmFyIFQ9MDtUPGcubm9kZVNpemU7VCsrKXt2YXIgTD1nLmxheW91dE5vZGVzW1RdOzA8TC5jaGlsZHJlbi5sZW5ndGgmJihMLm1heFg9dm9pZCAwLEwubWluWD12b2lkIDAsTC5tYXhZPXZvaWQgMCxMLm1pblk9dm9pZCAwKX1mb3IodmFyIFQ9MDtUPGcubm9kZVNpemU7VCsrKXt2YXIgTD1nLmxheW91dE5vZGVzW1RdO2lmKCEoMDxMLmNoaWxkcmVuLmxlbmd0aHx8TC5pc0xvY2tlZCkpe3ZhciBJPVlKKEwub2Zmc2V0WCxMLm9mZnNldFksZy50ZW1wZXJhdHVyZSk7TC5wb3NpdGlvblgrPUkueCxMLnBvc2l0aW9uWSs9SS55LEwub2Zmc2V0WD0wLEwub2Zmc2V0WT0wLEwubWluWD1MLnBvc2l0aW9uWC1MLndpZHRoLEwubWF4WD1MLnBvc2l0aW9uWCtMLndpZHRoLEwubWluWT1MLnBvc2l0aW9uWS1MLmhlaWdodCxMLm1heFk9TC5wb3NpdGlvblkrTC5oZWlnaHQsWEooTCxnKX19Zm9yKHZhciBUPTA7VDxnLm5vZGVTaXplO1QrKyl7dmFyIEw9Zy5sYXlvdXROb2Rlc1tUXTswPEwuY2hpbGRyZW4ubGVuZ3RoJiYhTC5pc0xvY2tlZCYmKEwucG9zaXRpb25YPShMLm1heFgrTC5taW5YKS8yLEwucG9zaXRpb25ZPShMLm1heFkrTC5taW5ZKS8yLEwud2lkdGg9TC5tYXhYLUwubWluWCxMLmhlaWdodD1MLm1heFktTC5taW5ZKX19LFlKPWZ1bmN0aW9uKGcseCxUKXt2YXIgTD1NYXRoLnNxcnQoZypnK3gqeCk7aWYoTD5UKXZhciBJPXt4OlQqZy9MLHk6VCp4L0x9O2Vsc2UgdmFyIEk9e3g6Zyx5Onh9O3JldHVybiBJfSxYSj1mdW5jdGlvbiB5KGcseCl7dmFyIFQ9Zy5wYXJlbnRJZDtpZihUIT1udWxsKXt2YXIgTD14LmxheW91dE5vZGVzW3guaWRUb0luZGV4W1RdXSxJPSExO2lmKChMLm1heFg9PW51bGx8fGcubWF4WCtMLnBhZFJpZ2h0PkwubWF4WCkmJihMLm1heFg9Zy5tYXhYK0wucGFkUmlnaHQsST0hMCksKEwubWluWD09bnVsbHx8Zy5taW5YLUwucGFkTGVmdDxMLm1pblgpJiYoTC5taW5YPWcubWluWC1MLnBhZExlZnQsST0hMCksKEwubWF4WT09bnVsbHx8Zy5tYXhZK0wucGFkQm90dG9tPkwubWF4WSkmJihMLm1heFk9Zy5tYXhZK0wucGFkQm90dG9tLEk9ITApLChMLm1pblk9PW51bGx8fGcubWluWS1MLnBhZFRvcDxMLm1pblkpJiYoTC5taW5ZPWcubWluWS1MLnBhZFRvcCxJPSEwKSxJKXJldHVybiB5KEwseCl9fSxJQj1mdW5jdGlvbihnLHgpe2Zvcih2YXIgVD1nLmxheW91dE5vZGVzLEw9W10sST0wO0k8VC5sZW5ndGg7SSsrKXt2YXIgTz1UW0ldLCQ9Ty5jbXB0SWQsej1MWyRdPUxbJF18fFtdO3oucHVzaChPKX1mb3IodmFyIFM9MCxJPTA7STxMLmxlbmd0aDtJKyspe3ZhciBWPUxbSV07aWYoVil7Vi54MT0xLzAsVi54Mj0tMS8wLFYueTE9MS8wLFYueTI9LTEvMDtmb3IodmFyIFU9MDtVPFYubGVuZ3RoO1UrKyl7dmFyIGV0PVZbVV07Vi54MT1NYXRoLm1pbihWLngxLGV0LnBvc2l0aW9uWC1ldC53aWR0aC8yKSxWLngyPU1hdGgubWF4KFYueDIsZXQucG9zaXRpb25YK2V0LndpZHRoLzIpLFYueTE9TWF0aC5taW4oVi55MSxldC5wb3NpdGlvblktZXQuaGVpZ2h0LzIpLFYueTI9TWF0aC5tYXgoVi55MixldC5wb3NpdGlvblkrZXQuaGVpZ2h0LzIpfVYudz1WLngyLVYueDEsVi5oPVYueTItVi55MSxTKz1WLncqVi5ofX1MLnNvcnQoZnVuY3Rpb24oRHQsSXQpe3JldHVybiBJdC53Kkl0LmgtRHQudypEdC5ofSk7Zm9yKHZhciBhdD0wLGx0PTAsZ3Q9MCxMdD0wLEV0PU1hdGguc3FydChTKSpnLmNsaWVudFdpZHRoL2cuY2xpZW50SGVpZ2h0LEk9MDtJPEwubGVuZ3RoO0krKyl7dmFyIFY9TFtJXTtpZihWKXtmb3IodmFyIFU9MDtVPFYubGVuZ3RoO1UrKyl7dmFyIGV0PVZbVV07ZXQuaXNMb2NrZWR8fChldC5wb3NpdGlvblgrPWF0LVYueDEsZXQucG9zaXRpb25ZKz1sdC1WLnkxKX1hdCs9Vi53K3guY29tcG9uZW50U3BhY2luZyxndCs9Vi53K3guY29tcG9uZW50U3BhY2luZyxMdD1NYXRoLm1heChMdCxWLmgpLGd0PkV0JiYobHQrPUx0K3guY29tcG9uZW50U3BhY2luZyxhdD0wLGd0PTAsTHQ9MCl9fX0sUUo9e2ZpdDohMCxwYWRkaW5nOjMwLGJvdW5kaW5nQm94OnZvaWQgMCxhdm9pZE92ZXJsYXA6ITAsYXZvaWRPdmVybGFwUGFkZGluZzoxMCxub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITEsc3BhY2luZ0ZhY3Rvcjp2b2lkIDAsY29uZGVuc2U6ITEscm93czp2b2lkIDAsY29sczp2b2lkIDAscG9zaXRpb246ZnVuY3Rpb24oZyl7fSxzb3J0OnZvaWQgMCxhbmltYXRlOiExLGFuaW1hdGlvbkR1cmF0aW9uOjUwMCxhbmltYXRpb25FYXNpbmc6dm9pZCAwLGFuaW1hdGVGaWx0ZXI6ZnVuY3Rpb24oZyx4KXtyZXR1cm4hMH0scmVhZHk6dm9pZCAwLHN0b3A6dm9pZCAwLHRyYW5zZm9ybTpmdW5jdGlvbihnLHgpe3JldHVybiB4fX07ZnVuY3Rpb24gT0IoeSl7dGhpcy5vcHRpb25zPWZuKHt9LFFKLHkpfU9CLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgeT10aGlzLm9wdGlvbnMsZz15LHg9eS5jeSxUPWcuZWxlcyxMPVQubm9kZXMoKS5ub3QoIjpwYXJlbnQiKTtnLnNvcnQmJihMPUwuc29ydChnLnNvcnQpKTt2YXIgST1SZChnLmJvdW5kaW5nQm94P2cuYm91bmRpbmdCb3g6e3gxOjAseTE6MCx3Ongud2lkdGgoKSxoOnguaGVpZ2h0KCl9KTtpZihJLmg9PT0wfHxJLnc9PT0wKVQubm9kZXMoKS5sYXlvdXRQb3NpdGlvbnModGhpcyxnLGZ1bmN0aW9uKHJyKXtyZXR1cm57eDpJLngxLHk6SS55MX19KTtlbHNle3ZhciBPPUwuc2l6ZSgpLCQ9TWF0aC5zcXJ0KE8qSS5oL0kudyksej1NYXRoLnJvdW5kKCQpLFM9TWF0aC5yb3VuZChJLncvSS5oKiQpLFY9ZnVuY3Rpb24od3Ipe2lmKHdyPT1udWxsKXJldHVybiBNYXRoLm1pbih6LFMpO3ZhciB1cj1NYXRoLm1pbih6LFMpO3VyPT16P3o9d3I6Uz13cn0sVT1mdW5jdGlvbih3cil7aWYod3I9PW51bGwpcmV0dXJuIE1hdGgubWF4KHosUyk7dmFyIHVyPU1hdGgubWF4KHosUyk7dXI9PXo/ej13cjpTPXdyfSxldD1nLnJvd3MsYXQ9Zy5jb2xzIT1udWxsP2cuY29sczpnLmNvbHVtbnM7aWYoZXQhPW51bGwmJmF0IT1udWxsKXo9ZXQsUz1hdDtlbHNlIGlmKGV0IT1udWxsJiZhdD09bnVsbCl6PWV0LFM9TWF0aC5jZWlsKE8veik7ZWxzZSBpZihldD09bnVsbCYmYXQhPW51bGwpUz1hdCx6PU1hdGguY2VpbChPL1MpO2Vsc2UgaWYoUyp6Pk8pe3ZhciBsdD1WKCksZ3Q9VSgpOyhsdC0xKSpndD49Tz9WKGx0LTEpOihndC0xKSpsdD49TyYmVShndC0xKX1lbHNlIGZvcig7Uyp6PE87KXt2YXIgTHQ9VigpLEV0PVUoKTsoRXQrMSkqTHQ+PU8/VShFdCsxKTpWKEx0KzEpfXZhciBEdD1JLncvUyxJdD1JLmgvejtpZihnLmNvbmRlbnNlJiYoRHQ9MCxJdD0wKSxnLmF2b2lkT3ZlcmxhcClmb3IodmFyIHp0PTA7enQ8TC5sZW5ndGg7enQrKyl7dmFyIHRlPUxbenRdLFh0PXRlLl9wcml2YXRlLnBvc2l0aW9uOyhYdC54PT1udWxsfHxYdC55PT1udWxsKSYmKFh0Lng9MCxYdC55PTApO3ZhciBIdD10ZS5sYXlvdXREaW1lbnNpb25zKGcpLGllPWcuYXZvaWRPdmVybGFwUGFkZGluZyxVdD1IdC53K2llLGZlPUh0LmgraWU7RHQ9TWF0aC5tYXgoRHQsVXQpLEl0PU1hdGgubWF4KEl0LGZlKX1mb3IodmFyIGdlPXt9LHNlPWZ1bmN0aW9uKHdyLHVyKXtyZXR1cm4hIWdlWyJjLSIrd3IrIi0iK3VyXX0sTmU9ZnVuY3Rpb24od3IsdXIpe2dlWyJjLSIrd3IrIi0iK3VyXT0hMH0scGU9MCxnbj0wLGplPWZ1bmN0aW9uKCl7Z24rKyxnbj49UyYmKGduPTAscGUrKyl9LEdlPXt9LHhuPTA7eG48TC5sZW5ndGg7eG4rKyl7dmFyIERuPUxbeG5dLFhuPWcucG9zaXRpb24oRG4pO2lmKFhuJiYoWG4ucm93IT09dm9pZCAwfHxYbi5jb2whPT12b2lkIDApKXt2YXIgQ249e3JvdzpYbi5yb3csY29sOlhuLmNvbH07aWYoQ24uY29sPT09dm9pZCAwKWZvcihDbi5jb2w9MDtzZShDbi5yb3csQ24uY29sKTspQ24uY29sKys7ZWxzZSBpZihDbi5yb3c9PT12b2lkIDApZm9yKENuLnJvdz0wO3NlKENuLnJvdyxDbi5jb2wpOylDbi5yb3crKztHZVtEbi5pZCgpXT1DbixOZShDbi5yb3csQ24uY29sKX19dmFyIFluPWZ1bmN0aW9uKHdyLHVyKXt2YXIgZXIsYm47aWYod3IubG9ja2VkKCl8fHdyLmlzUGFyZW50KCkpcmV0dXJuITE7dmFyIHByPUdlW3dyLmlkKCldO2lmKHByKWVyPXByLmNvbCpEdCtEdC8yK0kueDEsYm49cHIucm93Kkl0K0l0LzIrSS55MTtlbHNle2Zvcig7c2UocGUsZ24pOylqZSgpO2VyPWduKkR0K0R0LzIrSS54MSxibj1wZSpJdCtJdC8yK0kueTEsTmUocGUsZ24pLGplKCl9cmV0dXJue3g6ZXIseTpibn19O0wubGF5b3V0UG9zaXRpb25zKHRoaXMsZyxZbil9cmV0dXJuIHRoaXN9O3ZhciBaSj17cmVhZHk6ZnVuY3Rpb24oKXt9LHN0b3A6ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiBXTCh5KXt0aGlzLm9wdGlvbnM9Zm4oe30sWkoseSl9V0wucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB5PXRoaXMub3B0aW9ucyxnPXkuZWxlcyx4PXRoaXM7cmV0dXJuIHkuY3kseC5lbWl0KCJsYXlvdXRzdGFydCIpLGcubm9kZXMoKS5wb3NpdGlvbnMoZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MH19KSx4Lm9uZSgibGF5b3V0cmVhZHkiLHkucmVhZHkpLHguZW1pdCgibGF5b3V0cmVhZHkiKSx4Lm9uZSgibGF5b3V0c3RvcCIseS5zdG9wKSx4LmVtaXQoImxheW91dHN0b3AiKSx0aGlzfSxXTC5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzfTt2YXIgSko9e3Bvc2l0aW9uczp2b2lkIDAsem9vbTp2b2lkIDAscGFuOnZvaWQgMCxmaXQ6ITAscGFkZGluZzozMCxhbmltYXRlOiExLGFuaW1hdGlvbkR1cmF0aW9uOjUwMCxhbmltYXRpb25FYXNpbmc6dm9pZCAwLGFuaW1hdGVGaWx0ZXI6ZnVuY3Rpb24oZyx4KXtyZXR1cm4hMH0scmVhZHk6dm9pZCAwLHN0b3A6dm9pZCAwLHRyYW5zZm9ybTpmdW5jdGlvbihnLHgpe3JldHVybiB4fX07ZnVuY3Rpb24gTkIoeSl7dGhpcy5vcHRpb25zPWZuKHt9LEpKLHkpfU5CLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgeT10aGlzLm9wdGlvbnMsZz15LmVsZXMseD1nLm5vZGVzKCksVD1rdCh5LnBvc2l0aW9ucyk7ZnVuY3Rpb24gTChJKXtpZih5LnBvc2l0aW9ucz09bnVsbClyZXR1cm4gd1koSS5wb3NpdGlvbigpKTtpZihUKXJldHVybiB5LnBvc2l0aW9ucyhJKTt2YXIgTz15LnBvc2l0aW9uc1tJLl9wcml2YXRlLmRhdGEuaWRdO3JldHVybiBPPz9udWxsfXJldHVybiB4LmxheW91dFBvc2l0aW9ucyh0aGlzLHksZnVuY3Rpb24oSSxPKXt2YXIgJD1MKEkpO3JldHVybiBJLmxvY2tlZCgpfHwkPT1udWxsPyExOiR9KSx0aGlzfTt2YXIgdHR0PXtmaXQ6ITAscGFkZGluZzozMCxib3VuZGluZ0JveDp2b2lkIDAsYW5pbWF0ZTohMSxhbmltYXRpb25EdXJhdGlvbjo1MDAsYW5pbWF0aW9uRWFzaW5nOnZvaWQgMCxhbmltYXRlRmlsdGVyOmZ1bmN0aW9uKGcseCl7cmV0dXJuITB9LHJlYWR5OnZvaWQgMCxzdG9wOnZvaWQgMCx0cmFuc2Zvcm06ZnVuY3Rpb24oZyx4KXtyZXR1cm4geH19O2Z1bmN0aW9uIFBCKHkpe3RoaXMub3B0aW9ucz1mbih7fSx0dHQseSl9UEIucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB5PXRoaXMub3B0aW9ucyxnPXkuY3kseD15LmVsZXMsVD1SZCh5LmJvdW5kaW5nQm94P3kuYm91bmRpbmdCb3g6e3gxOjAseTE6MCx3Omcud2lkdGgoKSxoOmcuaGVpZ2h0KCl9KSxMPWZ1bmN0aW9uKE8sJCl7cmV0dXJue3g6VC54MStNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkqVC53KSx5OlQueTErTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpKlQuaCl9fTtyZXR1cm4geC5ub2RlcygpLmxheW91dFBvc2l0aW9ucyh0aGlzLHksTCksdGhpc307dmFyIGV0dD1be25hbWU6ImJyZWFkdGhmaXJzdCIsaW1wbDpBQn0se25hbWU6ImNpcmNsZSIsaW1wbDpmVH0se25hbWU6ImNvbmNlbnRyaWMiLGltcGw6TEJ9LHtuYW1lOiJjb3NlIixpbXBsOmRUfSx7bmFtZToiZ3JpZCIsaW1wbDpPQn0se25hbWU6Im51bGwiLGltcGw6V0x9LHtuYW1lOiJwcmVzZXQiLGltcGw6TkJ9LHtuYW1lOiJyYW5kb20iLGltcGw6UEJ9XTtmdW5jdGlvbiBGQih5KXt0aGlzLm9wdGlvbnM9eSx0aGlzLm5vdGlmaWNhdGlvbnM9MH12YXIgQkI9ZnVuY3Rpb24oKXt9LFJCPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJBIGhlYWRsZXNzIGluc3RhbmNlIGNhbiBub3QgcmVuZGVyIGltYWdlcyIpfTtGQi5wcm90b3R5cGU9e3JlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZTpCQixub3RpZnk6ZnVuY3Rpb24oKXt0aGlzLm5vdGlmaWNhdGlvbnMrK30saW5pdDpCQixpc0hlYWRsZXNzOmZ1bmN0aW9uKCl7cmV0dXJuITB9LHBuZzpSQixqcGc6UkJ9O3ZhciBLTD17fTtLTC5hcnJvd1NoYXBlV2lkdGg9LjMsS0wucmVnaXN0ZXJBcnJvd1NoYXBlcz1mdW5jdGlvbigpe3ZhciB5PXRoaXMuYXJyb3dTaGFwZXM9e30sZz10aGlzLHg9ZnVuY3Rpb24oUyxWLFUsZXQsYXQsbHQsZ3Qpe3ZhciBMdD1hdC54LVUvMi1ndCxFdD1hdC54K1UvMitndCxEdD1hdC55LVUvMi1ndCxJdD1hdC55K1UvMitndCx6dD1MdDw9UyYmUzw9RXQmJkR0PD1WJiZWPD1JdDtyZXR1cm4genR9LFQ9ZnVuY3Rpb24oUyxWLFUsZXQsYXQpe3ZhciBsdD1TKk1hdGguY29zKGV0KS1WKk1hdGguc2luKGV0KSxndD1TKk1hdGguc2luKGV0KStWKk1hdGguY29zKGV0KSxMdD1sdCpVLEV0PWd0KlUsRHQ9THQrYXQueCxJdD1FdCthdC55O3JldHVybnt4OkR0LHk6SXR9fSxMPWZ1bmN0aW9uKFMsVixVLGV0KXtmb3IodmFyIGF0PVtdLGx0PTA7bHQ8Uy5sZW5ndGg7bHQrPTIpe3ZhciBndD1TW2x0XSxMdD1TW2x0KzFdO2F0LnB1c2goVChndCxMdCxWLFUsZXQpKX1yZXR1cm4gYXR9LEk9ZnVuY3Rpb24oUyl7Zm9yKHZhciBWPVtdLFU9MDtVPFMubGVuZ3RoO1UrKyl7dmFyIGV0PVNbVV07Vi5wdXNoKGV0LngsZXQueSl9cmV0dXJuIFZ9LE89ZnVuY3Rpb24oUyl7cmV0dXJuIFMucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUqUy5wc3R5bGUoImFycm93LXNjYWxlIikucGZWYWx1ZSoyfSwkPWZ1bmN0aW9uKFMsVil7VHQoVikmJihWPXlbVl0pLHlbU109Zm4oe25hbWU6Uyxwb2ludHM6Wy0uMTUsLS4zLC4xNSwtLjMsLjE1LC4zLC0uMTUsLjNdLGNvbGxpZGU6ZnVuY3Rpb24oZXQsYXQsbHQsZ3QsTHQsRXQpe3ZhciBEdD1JKEwodGhpcy5wb2ludHMsbHQrMipFdCxndCxMdCkpLEl0PWpkKGV0LGF0LER0KTtyZXR1cm4gSXR9LHJvdWdoQ29sbGlkZTp4LGRyYXc6ZnVuY3Rpb24oZXQsYXQsbHQsZ3Qpe3ZhciBMdD1MKHRoaXMucG9pbnRzLGF0LGx0LGd0KTtnLmFycm93U2hhcGVJbXBsKCJwb2x5Z29uIikoZXQsTHQpfSxzcGFjaW5nOmZ1bmN0aW9uKGV0KXtyZXR1cm4gMH0sZ2FwOk99LFYpfTskKCJub25lIix7Y29sbGlkZTp1dixyb3VnaENvbGxpZGU6dXYsZHJhdzpSNSxzcGFjaW5nOndnLGdhcDp3Z30pLCQoInRyaWFuZ2xlIix7cG9pbnRzOlstLjE1LC0uMywwLDAsLjE1LC0uM119KSwkKCJhcnJvdyIsInRyaWFuZ2xlIiksJCgidHJpYW5nbGUtYmFja2N1cnZlIix7cG9pbnRzOnkudHJpYW5nbGUucG9pbnRzLGNvbnRyb2xQb2ludDpbMCwtLjE1XSxyb3VnaENvbGxpZGU6eCxkcmF3OmZ1bmN0aW9uKFMsVixVLGV0LGF0KXt2YXIgbHQ9TCh0aGlzLnBvaW50cyxWLFUsZXQpLGd0PXRoaXMuY29udHJvbFBvaW50LEx0PVQoZ3RbMF0sZ3RbMV0sVixVLGV0KTtnLmFycm93U2hhcGVJbXBsKHRoaXMubmFtZSkoUyxsdCxMdCl9LGdhcDpmdW5jdGlvbihTKXtyZXR1cm4gTyhTKSouOH19KSwkKCJ0cmlhbmdsZS10ZWUiLHtwb2ludHM6WzAsMCwuMTUsLS4zLC0uMTUsLS4zLDAsMF0scG9pbnRzVGVlOlstLjE1LC0uNCwtLjE1LC0uNSwuMTUsLS41LC4xNSwtLjRdLGNvbGxpZGU6ZnVuY3Rpb24oUyxWLFUsZXQsYXQsbHQsZ3Qpe3ZhciBMdD1JKEwodGhpcy5wb2ludHMsVSsyKmd0LGV0LGF0KSksRXQ9SShMKHRoaXMucG9pbnRzVGVlLFUrMipndCxldCxhdCkpLER0PWpkKFMsVixMdCl8fGpkKFMsVixFdCk7cmV0dXJuIER0fSxkcmF3OmZ1bmN0aW9uKFMsVixVLGV0LGF0KXt2YXIgbHQ9TCh0aGlzLnBvaW50cyxWLFUsZXQpLGd0PUwodGhpcy5wb2ludHNUZWUsVixVLGV0KTtnLmFycm93U2hhcGVJbXBsKHRoaXMubmFtZSkoUyxsdCxndCl9fSksJCgiY2lyY2xlLXRyaWFuZ2xlIix7cmFkaXVzOi4xNSxwb2ludHNUcjpbMCwtLjE1LC4xNSwtLjQ1LC0uMTUsLS40NSwwLC0uMTVdLGNvbGxpZGU6ZnVuY3Rpb24oUyxWLFUsZXQsYXQsbHQsZ3Qpe3ZhciBMdD1hdCxFdD1NYXRoLnBvdyhMdC54LVMsMikrTWF0aC5wb3coTHQueS1WLDIpPD1NYXRoLnBvdygoVSsyKmd0KSp0aGlzLnJhZGl1cywyKSxEdD1JKEwodGhpcy5wb2ludHMsVSsyKmd0LGV0LGF0KSk7cmV0dXJuIGpkKFMsVixEdCl8fEV0fSxkcmF3OmZ1bmN0aW9uKFMsVixVLGV0LGF0KXt2YXIgbHQ9TCh0aGlzLnBvaW50c1RyLFYsVSxldCk7Zy5hcnJvd1NoYXBlSW1wbCh0aGlzLm5hbWUpKFMsbHQsZXQueCxldC55LHRoaXMucmFkaXVzKlYpfSxzcGFjaW5nOmZ1bmN0aW9uKFMpe3JldHVybiBnLmdldEFycm93V2lkdGgoUy5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSxTLnBzdHlsZSgiYXJyb3ctc2NhbGUiKS52YWx1ZSkqdGhpcy5yYWRpdXN9fSksJCgidHJpYW5nbGUtY3Jvc3MiLHtwb2ludHM6WzAsMCwuMTUsLS4zLC0uMTUsLS4zLDAsMF0sYmFzZUNyb3NzTGluZVB0czpbLS4xNSwtLjQsLS4xNSwtLjQsLjE1LC0uNCwuMTUsLS40XSxjcm9zc0xpbmVQdHM6ZnVuY3Rpb24oUyxWKXt2YXIgVT10aGlzLmJhc2VDcm9zc0xpbmVQdHMuc2xpY2UoKSxldD1WL1MsYXQ9MyxsdD01O3JldHVybiBVW2F0XT1VW2F0XS1ldCxVW2x0XT1VW2x0XS1ldCxVfSxjb2xsaWRlOmZ1bmN0aW9uKFMsVixVLGV0LGF0LGx0LGd0KXt2YXIgTHQ9SShMKHRoaXMucG9pbnRzLFUrMipndCxldCxhdCkpLEV0PUkoTCh0aGlzLmNyb3NzTGluZVB0cyhVLGx0KSxVKzIqZ3QsZXQsYXQpKSxEdD1qZChTLFYsTHQpfHxqZChTLFYsRXQpO3JldHVybiBEdH0sZHJhdzpmdW5jdGlvbihTLFYsVSxldCxhdCl7dmFyIGx0PUwodGhpcy5wb2ludHMsVixVLGV0KSxndD1MKHRoaXMuY3Jvc3NMaW5lUHRzKFYsYXQpLFYsVSxldCk7Zy5hcnJvd1NoYXBlSW1wbCh0aGlzLm5hbWUpKFMsbHQsZ3QpfX0pLCQoInZlZSIse3BvaW50czpbLS4xNSwtLjMsMCwwLC4xNSwtLjMsMCwtLjE1XSxnYXA6ZnVuY3Rpb24oUyl7cmV0dXJuIE8oUykqLjUyNX19KSwkKCJjaXJjbGUiLHtyYWRpdXM6LjE1LGNvbGxpZGU6ZnVuY3Rpb24oUyxWLFUsZXQsYXQsbHQsZ3Qpe3ZhciBMdD1hdCxFdD1NYXRoLnBvdyhMdC54LVMsMikrTWF0aC5wb3coTHQueS1WLDIpPD1NYXRoLnBvdygoVSsyKmd0KSp0aGlzLnJhZGl1cywyKTtyZXR1cm4gRXR9LGRyYXc6ZnVuY3Rpb24oUyxWLFUsZXQsYXQpe2cuYXJyb3dTaGFwZUltcGwodGhpcy5uYW1lKShTLGV0LngsZXQueSx0aGlzLnJhZGl1cypWKX0sc3BhY2luZzpmdW5jdGlvbihTKXtyZXR1cm4gZy5nZXRBcnJvd1dpZHRoKFMucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsUy5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWUpKnRoaXMucmFkaXVzfX0pLCQoInRlZSIse3BvaW50czpbLS4xNSwwLC0uMTUsLS4xLC4xNSwtLjEsLjE1LDBdLHNwYWNpbmc6ZnVuY3Rpb24oUyl7cmV0dXJuIDF9LGdhcDpmdW5jdGlvbihTKXtyZXR1cm4gMX19KSwkKCJzcXVhcmUiLHtwb2ludHM6Wy0uMTUsMCwuMTUsMCwuMTUsLS4zLC0uMTUsLS4zXX0pLCQoImRpYW1vbmQiLHtwb2ludHM6Wy0uMTUsLS4xNSwwLC0uMywuMTUsLS4xNSwwLDBdLGdhcDpmdW5jdGlvbihTKXtyZXR1cm4gUy5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSpTLnBzdHlsZSgiYXJyb3ctc2NhbGUiKS52YWx1ZX19KSwkKCJjaGV2cm9uIix7cG9pbnRzOlswLDAsLS4xNSwtLjE1LC0uMSwtLjIsMCwtLjEsLjEsLS4yLC4xNSwtLjE1XSxnYXA6ZnVuY3Rpb24oUyl7cmV0dXJuIC45NSpTLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlKlMucHN0eWxlKCJhcnJvdy1zY2FsZSIpLnZhbHVlfX0pfTt2YXIgTTM9e307TTMucHJvamVjdEludG9WaWV3cG9ydD1mdW5jdGlvbih5LGcpe3ZhciB4PXRoaXMuY3ksVD10aGlzLmZpbmRDb250YWluZXJDbGllbnRDb29yZHMoKSxMPVRbMF0sST1UWzFdLE89VFs0XSwkPXgucGFuKCksej14Lnpvb20oKSxTPSgoeS1MKS9PLSQueCkveixWPSgoZy1JKS9PLSQueSkvejtyZXR1cm5bUyxWXX0sTTMuZmluZENvbnRhaW5lckNsaWVudENvb3Jkcz1mdW5jdGlvbigpe2lmKHRoaXMuY29udGFpbmVyQkIpcmV0dXJuIHRoaXMuY29udGFpbmVyQkI7dmFyIHk9dGhpcy5jb250YWluZXIsZz15LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHg9Ui5nZXRDb21wdXRlZFN0eWxlKHkpLFQ9ZnVuY3Rpb24oRXQpe3JldHVybiBwYXJzZUZsb2F0KHguZ2V0UHJvcGVydHlWYWx1ZShFdCkpfSxMPXtsZWZ0OlQoInBhZGRpbmctbGVmdCIpLHJpZ2h0OlQoInBhZGRpbmctcmlnaHQiKSx0b3A6VCgicGFkZGluZy10b3AiKSxib3R0b206VCgicGFkZGluZy1ib3R0b20iKX0sST17bGVmdDpUKCJib3JkZXItbGVmdC13aWR0aCIpLHJpZ2h0OlQoImJvcmRlci1yaWdodC13aWR0aCIpLHRvcDpUKCJib3JkZXItdG9wLXdpZHRoIiksYm90dG9tOlQoImJvcmRlci1ib3R0b20td2lkdGgiKX0sTz15LmNsaWVudFdpZHRoLCQ9eS5jbGllbnRIZWlnaHQsej1MLmxlZnQrTC5yaWdodCxTPUwudG9wK0wuYm90dG9tLFY9SS5sZWZ0K0kucmlnaHQsVT1nLndpZHRoLyhPK1YpLGV0PU8teixhdD0kLVMsbHQ9Zy5sZWZ0K0wubGVmdCtJLmxlZnQsZ3Q9Zy50b3ArTC50b3ArSS50b3A7cmV0dXJuIHRoaXMuY29udGFpbmVyQkI9W2x0LGd0LGV0LGF0LFVdfSxNMy5pbnZhbGlkYXRlQ29udGFpbmVyQ2xpZW50Q29vcmRzQ2FjaGU9ZnVuY3Rpb24oKXt0aGlzLmNvbnRhaW5lckJCPW51bGx9LE0zLmZpbmROZWFyZXN0RWxlbWVudD1mdW5jdGlvbih5LGcseCxUKXtyZXR1cm4gdGhpcy5maW5kTmVhcmVzdEVsZW1lbnRzKHksZyx4LFQpWzBdfSxNMy5maW5kTmVhcmVzdEVsZW1lbnRzPWZ1bmN0aW9uKHksZyx4LFQpe3ZhciBMPXRoaXMsST10aGlzLE89SS5nZXRDYWNoZWRaU29ydGVkRWxlcygpLCQ9W10sej1JLmN5Lnpvb20oKSxTPUkuY3kuaGFzQ29tcG91bmROb2RlcygpLFY9KFQ/MjQ6OCkveixVPShUPzg6MikveixldD0oVD84OjIpL3osYXQ9MS8wLGx0LGd0O3gmJihPPU8uaW50ZXJhY3RpdmUpO2Z1bmN0aW9uIEx0KEh0LGllKXtpZihIdC5pc05vZGUoKSl7aWYoZ3QpcmV0dXJuO2d0PUh0LCQucHVzaChIdCl9aWYoSHQuaXNFZGdlKCkmJihpZT09bnVsbHx8aWU8YXQpKWlmKGx0KXtpZihsdC5wc3R5bGUoInotY29tcG91bmQtZGVwdGgiKS52YWx1ZT09PUh0LnBzdHlsZSgiei1jb21wb3VuZC1kZXB0aCIpLnZhbHVlJiZsdC5wc3R5bGUoInotY29tcG91bmQtZGVwdGgiKS52YWx1ZT09PUh0LnBzdHlsZSgiei1jb21wb3VuZC1kZXB0aCIpLnZhbHVlKXtmb3IodmFyIFV0PTA7VXQ8JC5sZW5ndGg7VXQrKylpZigkW1V0XS5pc0VkZ2UoKSl7JFtVdF09SHQsbHQ9SHQsYXQ9aWU/P2F0O2JyZWFrfX19ZWxzZSAkLnB1c2goSHQpLGx0PUh0LGF0PWllPz9hdH1mdW5jdGlvbiBFdChIdCl7dmFyIGllPUh0Lm91dGVyV2lkdGgoKSsyKlUsVXQ9SHQub3V0ZXJIZWlnaHQoKSsyKlUsZmU9aWUvMixnZT1VdC8yLHNlPUh0LnBvc2l0aW9uKCk7aWYoc2UueC1mZTw9eSYmeTw9c2UueCtmZSYmc2UueS1nZTw9ZyYmZzw9c2UueStnZSl7dmFyIE5lPUkubm9kZVNoYXBlc1tMLmdldE5vZGVTaGFwZShIdCldO2lmKE5lLmNoZWNrUG9pbnQoeSxnLDAsaWUsVXQsc2UueCxzZS55KSlyZXR1cm4gTHQoSHQsMCksITB9fWZ1bmN0aW9uIER0KEh0KXt2YXIgaWU9SHQuX3ByaXZhdGUsVXQ9aWUucnNjcmF0Y2gsZmU9SHQucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsZ2U9SHQucHN0eWxlKCJhcnJvdy1zY2FsZSIpLnZhbHVlLHNlPWZlLzIrVixOZT1zZSpzZSxwZT1zZSoyLHhuPWllLnNvdXJjZSxEbj1pZS50YXJnZXQsZ247aWYoVXQuZWRnZVR5cGU9PT0ic2VnbWVudHMifHxVdC5lZGdlVHlwZT09PSJzdHJhaWdodCJ8fFV0LmVkZ2VUeXBlPT09ImhheXN0YWNrIil7Zm9yKHZhciBqZT1VdC5hbGxwdHMsR2U9MDtHZSszPGplLmxlbmd0aDtHZSs9MilpZihEWSh5LGcsamVbR2VdLGplW0dlKzFdLGplW0dlKzJdLGplW0dlKzNdLHBlKSYmTmU+KGduPUZZKHksZyxqZVtHZV0samVbR2UrMV0samVbR2UrMl0samVbR2UrM10pKSlyZXR1cm4gTHQoSHQsZ24pLCEwfWVsc2UgaWYoVXQuZWRnZVR5cGU9PT0iYmV6aWVyInx8VXQuZWRnZVR5cGU9PT0ibXVsdGliZXppZXIifHxVdC5lZGdlVHlwZT09PSJzZWxmInx8VXQuZWRnZVR5cGU9PT0iY29tcG91bmQiKXtmb3IodmFyIGplPVV0LmFsbHB0cyxHZT0wO0dlKzU8VXQuYWxscHRzLmxlbmd0aDtHZSs9NClpZihJWSh5LGcsamVbR2VdLGplW0dlKzFdLGplW0dlKzJdLGplW0dlKzNdLGplW0dlKzRdLGplW0dlKzVdLHBlKSYmTmU+KGduPVBZKHksZyxqZVtHZV0samVbR2UrMV0samVbR2UrMl0samVbR2UrM10samVbR2UrNF0samVbR2UrNV0pKSlyZXR1cm4gTHQoSHQsZ24pLCEwfWZvcih2YXIgeG49eG58fGllLnNvdXJjZSxEbj1Ebnx8aWUudGFyZ2V0LFhuPUwuZ2V0QXJyb3dXaWR0aChmZSxnZSksQ249W3tuYW1lOiJzb3VyY2UiLHg6VXQuYXJyb3dTdGFydFgseTpVdC5hcnJvd1N0YXJ0WSxhbmdsZTpVdC5zcmNBcnJvd0FuZ2xlfSx7bmFtZToidGFyZ2V0Iix4OlV0LmFycm93RW5kWCx5OlV0LmFycm93RW5kWSxhbmdsZTpVdC50Z3RBcnJvd0FuZ2xlfSx7bmFtZToibWlkLXNvdXJjZSIseDpVdC5taWRYLHk6VXQubWlkWSxhbmdsZTpVdC5taWRzcmNBcnJvd0FuZ2xlfSx7bmFtZToibWlkLXRhcmdldCIseDpVdC5taWRYLHk6VXQubWlkWSxhbmdsZTpVdC5taWR0Z3RBcnJvd0FuZ2xlfV0sR2U9MDtHZTxDbi5sZW5ndGg7R2UrKyl7dmFyIFluPUNuW0dlXSxycj1JLmFycm93U2hhcGVzW0h0LnBzdHlsZShZbi5uYW1lKyItYXJyb3ctc2hhcGUiKS52YWx1ZV0sd3I9SHQucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWU7aWYocnIucm91Z2hDb2xsaWRlKHksZyxYbixZbi5hbmdsZSx7eDpZbi54LHk6WW4ueX0sd3IsVikmJnJyLmNvbGxpZGUoeSxnLFhuLFluLmFuZ2xlLHt4OlluLngseTpZbi55fSx3cixWKSlyZXR1cm4gTHQoSHQpLCEwfVMmJiQubGVuZ3RoPjAmJihFdCh4biksRXQoRG4pKX1mdW5jdGlvbiBJdChIdCxpZSxVdCl7cmV0dXJuIHdwKEh0LGllLFV0KX1mdW5jdGlvbiB6dChIdCxpZSl7dmFyIFV0PUh0Ll9wcml2YXRlLGZlPWV0LGdlO2llP2dlPWllKyItIjpnZT0iIixIdC5ib3VuZGluZ0JveCgpO3ZhciBzZT1VdC5sYWJlbEJvdW5kc1tpZXx8Im1haW4iXSxOZT1IdC5wc3R5bGUoZ2UrImxhYmVsIikudmFsdWUscGU9SHQucHN0eWxlKCJ0ZXh0LWV2ZW50cyIpLnN0clZhbHVlPT09InllcyI7aWYoISghcGV8fCFOZSkpe3ZhciBnbj1JdChVdC5yc2NyYXRjaCwibGFiZWxYIixpZSksamU9SXQoVXQucnNjcmF0Y2gsImxhYmVsWSIsaWUpLEdlPUl0KFV0LnJzY3JhdGNoLCJsYWJlbEFuZ2xlIixpZSkseG49SHQucHN0eWxlKGdlKyJ0ZXh0LW1hcmdpbi14IikucGZWYWx1ZSxEbj1IdC5wc3R5bGUoZ2UrInRleHQtbWFyZ2luLXkiKS5wZlZhbHVlLFhuPXNlLngxLWZlLXhuLENuPXNlLngyK2ZlLXhuLFluPXNlLnkxLWZlLURuLHJyPXNlLnkyK2ZlLURuO2lmKEdlKXt2YXIgd3I9TWF0aC5jb3MoR2UpLHVyPU1hdGguc2luKEdlKSxlcj1mdW5jdGlvbihMYSxEaSl7cmV0dXJuIExhPUxhLWduLERpPURpLWplLHt4OkxhKndyLURpKnVyK2duLHk6TGEqdXIrRGkqd3IramV9fSxibj1lcihYbixZbikscHI9ZXIoWG4scnIpLGZyPWVyKENuLFluKSxyaT1lcihDbixyciksX2k9W2JuLngreG4sYm4ueStEbixmci54K3huLGZyLnkrRG4scmkueCt4bixyaS55K0RuLHByLngreG4scHIueStEbl07aWYoamQoeSxnLF9pKSlyZXR1cm4gTHQoSHQpLCEwfWVsc2UgaWYoSDUoc2UseSxnKSlyZXR1cm4gTHQoSHQpLCEwfX1mb3IodmFyIHRlPU8ubGVuZ3RoLTE7dGU+PTA7dGUtLSl7dmFyIFh0PU9bdGVdO1h0LmlzTm9kZSgpP0V0KFh0KXx8enQoWHQpOkR0KFh0KXx8enQoWHQpfHx6dChYdCwic291cmNlIil8fHp0KFh0LCJ0YXJnZXQiKX1yZXR1cm4gJH0sTTMuZ2V0QWxsSW5Cb3g9ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEw9dGhpcy5nZXRDYWNoZWRaU29ydGVkRWxlcygpLmludGVyYWN0aXZlLEk9W10sTz1NYXRoLm1pbih5LHgpLCQ9TWF0aC5tYXgoeSx4KSx6PU1hdGgubWluKGcsVCksUz1NYXRoLm1heChnLFQpO3k9Tyx4PSQsZz16LFQ9Uztmb3IodmFyIFY9UmQoe3gxOnkseTE6Zyx4Mjp4LHkyOlR9KSxVPTA7VTxMLmxlbmd0aDtVKyspe3ZhciBldD1MW1VdO2lmKGV0LmlzTm9kZSgpKXt2YXIgYXQ9ZXQsbHQ9YXQuYm91bmRpbmdCb3goe2luY2x1ZGVOb2RlczohMCxpbmNsdWRlRWRnZXM6ITEsaW5jbHVkZUxhYmVsczohMX0pO0VMKFYsbHQpJiYhdEYobHQsVikmJkkucHVzaChhdCl9ZWxzZXt2YXIgZ3Q9ZXQsTHQ9Z3QuX3ByaXZhdGUsRXQ9THQucnNjcmF0Y2g7aWYoRXQuc3RhcnRYIT1udWxsJiZFdC5zdGFydFkhPW51bGwmJiFINShWLEV0LnN0YXJ0WCxFdC5zdGFydFkpfHxFdC5lbmRYIT1udWxsJiZFdC5lbmRZIT1udWxsJiYhSDUoVixFdC5lbmRYLEV0LmVuZFkpKWNvbnRpbnVlO2lmKEV0LmVkZ2VUeXBlPT09ImJlemllciJ8fEV0LmVkZ2VUeXBlPT09Im11bHRpYmV6aWVyInx8RXQuZWRnZVR5cGU9PT0ic2VsZiJ8fEV0LmVkZ2VUeXBlPT09ImNvbXBvdW5kInx8RXQuZWRnZVR5cGU9PT0ic2VnbWVudHMifHxFdC5lZGdlVHlwZT09PSJoYXlzdGFjayIpe2Zvcih2YXIgRHQ9THQucnN0eWxlLmJlemllclB0c3x8THQucnN0eWxlLmxpbmVQdHN8fEx0LnJzdHlsZS5oYXlzdGFja1B0cyxJdD0hMCx6dD0wO3p0PER0Lmxlbmd0aDt6dCsrKWlmKCFNWShWLER0W3p0XSkpe0l0PSExO2JyZWFrfUl0JiZJLnB1c2goZ3QpfWVsc2UoRXQuZWRnZVR5cGU9PT0iaGF5c3RhY2sifHxFdC5lZGdlVHlwZT09PSJzdHJhaWdodCIpJiZJLnB1c2goZ3QpfX1yZXR1cm4gSX07dmFyIHBUPXt9O3BULmNhbGN1bGF0ZUFycm93QW5nbGVzPWZ1bmN0aW9uKHkpe3ZhciBnPXkuX3ByaXZhdGUucnNjcmF0Y2gseD1nLmVkZ2VUeXBlPT09ImhheXN0YWNrIixUPWcuZWRnZVR5cGU9PT0iYmV6aWVyIixMPWcuZWRnZVR5cGU9PT0ibXVsdGliZXppZXIiLEk9Zy5lZGdlVHlwZT09PSJzZWdtZW50cyIsTz1nLmVkZ2VUeXBlPT09ImNvbXBvdW5kIiwkPWcuZWRnZVR5cGU9PT0ic2VsZiIseixTLFYsVSxldCxhdCxFdCxEdDtpZih4PyhWPWcuaGF5c3RhY2tQdHNbMF0sVT1nLmhheXN0YWNrUHRzWzFdLGV0PWcuaGF5c3RhY2tQdHNbMl0sYXQ9Zy5oYXlzdGFja1B0c1szXSk6KFY9Zy5hcnJvd1N0YXJ0WCxVPWcuYXJyb3dTdGFydFksZXQ9Zy5hcnJvd0VuZFgsYXQ9Zy5hcnJvd0VuZFkpLEV0PWcubWlkWCxEdD1nLm1pZFksSSl6PVYtZy5zZWdwdHNbMF0sUz1VLWcuc2VncHRzWzFdO2Vsc2UgaWYoTHx8T3x8JHx8VCl7dmFyIGx0PWcuYWxscHRzLGd0PW9mKGx0WzBdLGx0WzJdLGx0WzRdLC4xKSxMdD1vZihsdFsxXSxsdFszXSxsdFs1XSwuMSk7ej1WLWd0LFM9VS1MdH1lbHNlIHo9Vi1FdCxTPVUtRHQ7Zy5zcmNBcnJvd0FuZ2xlPU45KHosUyk7dmFyIEV0PWcubWlkWCxEdD1nLm1pZFk7aWYoeCYmKEV0PShWK2V0KS8yLER0PShVK2F0KS8yKSx6PWV0LVYsUz1hdC1VLEkpe3ZhciBsdD1nLmFsbHB0cztpZihsdC5sZW5ndGgvMiUyPT09MCl7dmFyIEl0PWx0Lmxlbmd0aC8yLHp0PUl0LTI7ej1sdFtJdF0tbHRbenRdLFM9bHRbSXQrMV0tbHRbenQrMV19ZWxzZXt2YXIgSXQ9bHQubGVuZ3RoLzItMSx6dD1JdC0yLHRlPUl0KzI7ej1sdFtJdF0tbHRbenRdLFM9bHRbSXQrMV0tbHRbenQrMV19fWVsc2UgaWYoTHx8T3x8JCl7dmFyIGx0PWcuYWxscHRzLFh0PWcuY3RybHB0cyxIdCxpZSxVdCxmZTtpZihYdC5sZW5ndGgvMiUyPT09MCl7dmFyIGdlPWx0Lmxlbmd0aC8yLTEsc2U9Z2UrMixOZT1zZSsyO0h0PW9mKGx0W2dlXSxsdFtzZV0sbHRbTmVdLDApLGllPW9mKGx0W2dlKzFdLGx0W3NlKzFdLGx0W05lKzFdLDApLFV0PW9mKGx0W2dlXSxsdFtzZV0sbHRbTmVdLDFlLTQpLGZlPW9mKGx0W2dlKzFdLGx0W3NlKzFdLGx0W05lKzFdLDFlLTQpfWVsc2V7dmFyIHNlPWx0Lmxlbmd0aC8yLTEsZ2U9c2UtMixOZT1zZSsyO0h0PW9mKGx0W2dlXSxsdFtzZV0sbHRbTmVdLC40OTk5KSxpZT1vZihsdFtnZSsxXSxsdFtzZSsxXSxsdFtOZSsxXSwuNDk5OSksVXQ9b2YobHRbZ2VdLGx0W3NlXSxsdFtOZV0sLjUpLGZlPW9mKGx0W2dlKzFdLGx0W3NlKzFdLGx0W05lKzFdLC41KX16PVV0LUh0LFM9ZmUtaWV9aWYoZy5taWR0Z3RBcnJvd0FuZ2xlPU45KHosUyksZy5taWREaXNwWD16LGcubWlkRGlzcFk9Uyx6Kj0tMSxTKj0tMSxJKXt2YXIgbHQ9Zy5hbGxwdHM7aWYobHQubGVuZ3RoLzIlMiE9PTApe3ZhciBJdD1sdC5sZW5ndGgvMi0xLHRlPUl0KzI7ej0tKGx0W3RlXS1sdFtJdF0pLFM9LShsdFt0ZSsxXS1sdFtJdCsxXSl9fWlmKGcubWlkc3JjQXJyb3dBbmdsZT1OOSh6LFMpLEkpej1ldC1nLnNlZ3B0c1tnLnNlZ3B0cy5sZW5ndGgtMl0sUz1hdC1nLnNlZ3B0c1tnLnNlZ3B0cy5sZW5ndGgtMV07ZWxzZSBpZihMfHxPfHwkfHxUKXt2YXIgbHQ9Zy5hbGxwdHMscGU9bHQubGVuZ3RoLGd0PW9mKGx0W3BlLTZdLGx0W3BlLTRdLGx0W3BlLTJdLC45KSxMdD1vZihsdFtwZS01XSxsdFtwZS0zXSxsdFtwZS0xXSwuOSk7ej1ldC1ndCxTPWF0LUx0fWVsc2Ugej1ldC1FdCxTPWF0LUR0O2cudGd0QXJyb3dBbmdsZT1OOSh6LFMpfSxwVC5nZXRBcnJvd1dpZHRoPXBULmdldEFycm93SGVpZ2h0PWZ1bmN0aW9uKHksZyl7dmFyIHg9dGhpcy5hcnJvd1dpZHRoQ2FjaGU9dGhpcy5hcnJvd1dpZHRoQ2FjaGV8fHt9LFQ9eFt5KyIsICIrZ107cmV0dXJuIFR8fChUPU1hdGgubWF4KE1hdGgucG93KHkqMTMuMzcsLjkpLDI5KSpnLHhbeSsiLCAiK2ddPVQsVCl9O3ZhciBzZD17fTtzZC5maW5kSGF5c3RhY2tQb2ludHM9ZnVuY3Rpb24oeSl7Zm9yKHZhciBnPTA7Zzx5Lmxlbmd0aDtnKyspe3ZhciB4PXlbZ10sVD14Ll9wcml2YXRlLEw9VC5yc2NyYXRjaDtpZighTC5oYXlzdGFjayl7dmFyIEk9TWF0aC5yYW5kb20oKSoyKk1hdGguUEk7TC5zb3VyY2U9e3g6TWF0aC5jb3MoSSkseTpNYXRoLnNpbihJKX0sST1NYXRoLnJhbmRvbSgpKjIqTWF0aC5QSSxMLnRhcmdldD17eDpNYXRoLmNvcyhJKSx5Ok1hdGguc2luKEkpfX12YXIgTz1ULnNvdXJjZSwkPVQudGFyZ2V0LHo9Ty5wb3NpdGlvbigpLFM9JC5wb3NpdGlvbigpLFY9Ty53aWR0aCgpLFU9JC53aWR0aCgpLGV0PU8uaGVpZ2h0KCksYXQ9JC5oZWlnaHQoKSxsdD14LnBzdHlsZSgiaGF5c3RhY2stcmFkaXVzIikudmFsdWUsZ3Q9bHQvMjtMLmhheXN0YWNrUHRzPUwuYWxscHRzPVtMLnNvdXJjZS54KlYqZ3Qrei54LEwuc291cmNlLnkqZXQqZ3Qrei55LEwudGFyZ2V0LngqVSpndCtTLngsTC50YXJnZXQueSphdCpndCtTLnldLEwubWlkWD0oTC5hbGxwdHNbMF0rTC5hbGxwdHNbMl0pLzIsTC5taWRZPShMLmFsbHB0c1sxXStMLmFsbHB0c1szXSkvMixMLmVkZ2VUeXBlPSJoYXlzdGFjayIsTC5oYXlzdGFjaz0hMCx0aGlzLnN0b3JlRWRnZVByb2plY3Rpb25zKHgpLHRoaXMuY2FsY3VsYXRlQXJyb3dBbmdsZXMoeCksdGhpcy5yZWNhbGN1bGF0ZUVkZ2VMYWJlbFByb2plY3Rpb25zKHgpLHRoaXMuY2FsY3VsYXRlTGFiZWxBbmdsZXMoeCl9fSxzZC5maW5kU2VnbWVudHNQb2ludHM9ZnVuY3Rpb24oeSxnKXt2YXIgeD15Ll9wcml2YXRlLnJzY3JhdGNoLFQ9Zy5wb3NQdHMsTD1nLmludGVyc2VjdGlvblB0cyxJPWcudmVjdG9yTm9ybUludmVyc2UsTz15LnBzdHlsZSgiZWRnZS1kaXN0YW5jZXMiKS52YWx1ZSwkPXkucHN0eWxlKCJzZWdtZW50LXdlaWdodHMiKSx6PXkucHN0eWxlKCJzZWdtZW50LWRpc3RhbmNlcyIpLFM9TWF0aC5taW4oJC5wZlZhbHVlLmxlbmd0aCx6LnBmVmFsdWUubGVuZ3RoKTt4LmVkZ2VUeXBlPSJzZWdtZW50cyIseC5zZWdwdHM9W107Zm9yKHZhciBWPTA7VjxTO1YrKyl7dmFyIFU9JC5wZlZhbHVlW1ZdLGV0PXoucGZWYWx1ZVtWXSxhdD0xLVUsbHQ9VSxndD1PPT09Im5vZGUtcG9zaXRpb24iP1Q6TCxMdD17eDpndC54MSphdCtndC54MipsdCx5Omd0LnkxKmF0K2d0LnkyKmx0fTt4LnNlZ3B0cy5wdXNoKEx0LngrSS54KmV0LEx0LnkrSS55KmV0KX19LHNkLmZpbmRMb29wUG9pbnRzPWZ1bmN0aW9uKHksZyx4LFQpe3ZhciBMPXkuX3ByaXZhdGUucnNjcmF0Y2gsST1nLmRpckNvdW50cyxPPWcuc3JjUG9zLCQ9eS5wc3R5bGUoImNvbnRyb2wtcG9pbnQtZGlzdGFuY2VzIiksej0kPyQucGZWYWx1ZVswXTp2b2lkIDAsUz15LnBzdHlsZSgibG9vcC1kaXJlY3Rpb24iKS5wZlZhbHVlLFY9eS5wc3R5bGUoImxvb3Atc3dlZXAiKS5wZlZhbHVlLFU9eS5wc3R5bGUoImNvbnRyb2wtcG9pbnQtc3RlcC1zaXplIikucGZWYWx1ZTtMLmVkZ2VUeXBlPSJzZWxmIjt2YXIgZXQ9eCxhdD1VO1QmJihldD0wLGF0PXopO3ZhciBsdD1TLU1hdGguUEkvMixndD1sdC1WLzIsTHQ9bHQrVi8yLEV0PVMrIl8iK1Y7ZXQ9SVtFdF09PT12b2lkIDA/SVtFdF09MDorK0lbRXRdLEwuY3RybHB0cz1bTy54K01hdGguY29zKGd0KSoxLjQqYXQqKGV0LzMrMSksTy55K01hdGguc2luKGd0KSoxLjQqYXQqKGV0LzMrMSksTy54K01hdGguY29zKEx0KSoxLjQqYXQqKGV0LzMrMSksTy55K01hdGguc2luKEx0KSoxLjQqYXQqKGV0LzMrMSldfSxzZC5maW5kQ29tcG91bmRMb29wUG9pbnRzPWZ1bmN0aW9uKHksZyx4LFQpe3ZhciBMPXkuX3ByaXZhdGUucnNjcmF0Y2g7TC5lZGdlVHlwZT0iY29tcG91bmQiO3ZhciBJPWcuc3JjUG9zLE89Zy50Z3RQb3MsJD1nLnNyY1csej1nLnNyY0gsUz1nLnRndFcsVj1nLnRndEgsVT15LnBzdHlsZSgiY29udHJvbC1wb2ludC1zdGVwLXNpemUiKS5wZlZhbHVlLGV0PXkucHN0eWxlKCJjb250cm9sLXBvaW50LWRpc3RhbmNlcyIpLGF0PWV0P2V0LnBmVmFsdWVbMF06dm9pZCAwLGx0PXgsZ3Q9VTtUJiYobHQ9MCxndD1hdCk7dmFyIEx0PTUwLEV0PXt4OkkueC0kLzIseTpJLnktei8yfSxEdD17eDpPLngtUy8yLHk6Ty55LVYvMn0sSXQ9e3g6TWF0aC5taW4oRXQueCxEdC54KSx5Ok1hdGgubWluKEV0LnksRHQueSl9LHp0PS41LHRlPU1hdGgubWF4KHp0LE1hdGgubG9nKCQqLjAxKSksWHQ9TWF0aC5tYXgoenQsTWF0aC5sb2coUyouMDEpKTtMLmN0cmxwdHM9W0l0LngsSXQueS0oMStNYXRoLnBvdyhMdCwxLjEyKS8xMDApKmd0KihsdC8zKzEpKnRlLEl0LngtKDErTWF0aC5wb3coTHQsMS4xMikvMTAwKSpndCoobHQvMysxKSpYdCxJdC55XX0sc2QuZmluZFN0cmFpZ2h0RWRnZVBvaW50cz1mdW5jdGlvbih5KXt5Ll9wcml2YXRlLnJzY3JhdGNoLmVkZ2VUeXBlPSJzdHJhaWdodCJ9LHNkLmZpbmRCZXppZXJQb2ludHM9ZnVuY3Rpb24oeSxnLHgsVCxMKXt2YXIgST15Ll9wcml2YXRlLnJzY3JhdGNoLE89Zy52ZWN0b3JOb3JtSW52ZXJzZSwkPWcucG9zUHRzLHo9Zy5pbnRlcnNlY3Rpb25QdHMsUz15LnBzdHlsZSgiZWRnZS1kaXN0YW5jZXMiKS52YWx1ZSxWPXkucHN0eWxlKCJjb250cm9sLXBvaW50LXN0ZXAtc2l6ZSIpLnBmVmFsdWUsVT15LnBzdHlsZSgiY29udHJvbC1wb2ludC1kaXN0YW5jZXMiKSxldD15LnBzdHlsZSgiY29udHJvbC1wb2ludC13ZWlnaHRzIiksYXQ9VSYmZXQ/TWF0aC5taW4oVS52YWx1ZS5sZW5ndGgsZXQudmFsdWUubGVuZ3RoKToxLGx0PVU/VS5wZlZhbHVlWzBdOnZvaWQgMCxndD1ldC52YWx1ZVswXSxMdD1UO0kuZWRnZVR5cGU9THQ/Im11bHRpYmV6aWVyIjoiYmV6aWVyIixJLmN0cmxwdHM9W107Zm9yKHZhciBFdD0wO0V0PGF0O0V0Kyspe3ZhciBEdD0oLjUtZy5lbGVzLmxlbmd0aC8yK3gpKlYqKEw/LTE6MSksSXQ9dm9pZCAwLHp0PVpQKER0KTtMdCYmKGx0PVU/VS5wZlZhbHVlW0V0XTpWLGd0PWV0LnZhbHVlW0V0XSksVD9JdD1sdDpJdD1sdCE9PXZvaWQgMD96dCpsdDp2b2lkIDA7dmFyIHRlPUl0IT09dm9pZCAwP0l0OkR0LFh0PTEtZ3QsSHQ9Z3QsaWU9Uz09PSJub2RlLXBvc2l0aW9uIj8kOnosVXQ9e3g6aWUueDEqWHQraWUueDIqSHQseTppZS55MSpYdCtpZS55MipIdH07SS5jdHJscHRzLnB1c2goVXQueCtPLngqdGUsVXQueStPLnkqdGUpfX0sc2QuZmluZFRheGlQb2ludHM9ZnVuY3Rpb24oeSxnKXt2YXIgeD15Ll9wcml2YXRlLnJzY3JhdGNoO3guZWRnZVR5cGU9InNlZ21lbnRzIjt2YXIgVD0idmVydGljYWwiLEw9Imhvcml6b250YWwiLEk9ImxlZnR3YXJkIixPPSJyaWdodHdhcmQiLCQ9ImRvd253YXJkIix6PSJ1cHdhcmQiLFM9ImF1dG8iLFY9Zy5wb3NQdHMsVT1nLnNyY1csZXQ9Zy5zcmNILGF0PWcudGd0VyxsdD1nLnRndEgsZ3Q9eS5wc3R5bGUoImVkZ2UtZGlzdGFuY2VzIikudmFsdWUsTHQ9Z3QhPT0ibm9kZS1wb3NpdGlvbiIsRXQ9eS5wc3R5bGUoInRheGktZGlyZWN0aW9uIikudmFsdWUsRHQ9RXQsSXQ9eS5wc3R5bGUoInRheGktdHVybiIpLHp0PUl0LnVuaXRzPT09IiUiLHRlPUl0LnBmVmFsdWUsWHQ9dGU8MCxIdD15LnBzdHlsZSgidGF4aS10dXJuLW1pbi1kaXN0YW5jZSIpLnBmVmFsdWUsaWU9THQ/KFUrYXQpLzI6MCxVdD1MdD8oZXQrbHQpLzI6MCxmZT1WLngyLVYueDEsZ2U9Vi55Mi1WLnkxLHNlPWZ1bmN0aW9uKHNzLHFvKXtyZXR1cm4gc3M+MD9NYXRoLm1heChzcy1xbywwKTpNYXRoLm1pbihzcytxbywwKX0sTmU9c2UoZmUsaWUpLHBlPXNlKGdlLFV0KSxnbj0hMTtEdD09PVM/RXQ9TWF0aC5hYnMoTmUpPk1hdGguYWJzKHBlKT9MOlQ6RHQ9PT16fHxEdD09PSQ/KEV0PVQsZ249ITApOihEdD09PUl8fER0PT09TykmJihFdD1MLGduPSEwKTt2YXIgamU9RXQ9PT1ULEdlPWplP3BlOk5lLHhuPWplP2dlOmZlLERuPVpQKHhuKSxYbj0hMTshKGduJiYoenR8fFh0KSkmJihEdD09PSQmJnhuPDB8fER0PT09eiYmeG4+MHx8RHQ9PT1JJiZ4bj4wfHxEdD09PU8mJnhuPDApJiYoRG4qPS0xLEdlPURuKk1hdGguYWJzKEdlKSxYbj0hMCk7dmFyIENuO2lmKHp0KXt2YXIgWW49dGU8MD8xK3RlOnRlO0NuPVluKkdlfWVsc2V7dmFyIHJyPXRlPDA/R2U6MDtDbj1ycit0ZSpEbn12YXIgd3I9ZnVuY3Rpb24oc3Mpe3JldHVybiBNYXRoLmFicyhzcyk8SHR8fE1hdGguYWJzKHNzKT49TWF0aC5hYnMoR2UpfSx1cj13cihDbiksZXI9d3IoTWF0aC5hYnMoR2UpLU1hdGguYWJzKENuKSksYm49dXJ8fGVyO2lmKGJuJiYhWG4paWYoamUpe3ZhciBwcj1NYXRoLmFicyh4bik8PWV0LzIsZnI9TWF0aC5hYnMoZmUpPD1hdC8yO2lmKHByKXt2YXIgcmk9KFYueDErVi54MikvMixfaT1WLnkxLGlhPVYueTI7eC5zZWdwdHM9W3JpLF9pLHJpLGlhXX1lbHNlIGlmKGZyKXt2YXIgTGE9KFYueTErVi55MikvMixEaT1WLngxLHdpPVYueDI7eC5zZWdwdHM9W0RpLExhLHdpLExhXX1lbHNlIHguc2VncHRzPVtWLngxLFYueTJdfWVsc2V7dmFyIF9zPU1hdGguYWJzKHhuKTw9VS8yLFppPU1hdGguYWJzKGdlKTw9bHQvMjtpZihfcyl7dmFyIE5pPShWLnkxK1YueTIpLzIsbnM9Vi54MSxVYT1WLngyO3guc2VncHRzPVtucyxOaSxVYSxOaV19ZWxzZSBpZihaaSl7dmFyIHNhPShWLngxK1YueDIpLzIsWHM9Vi55MSxDcj1WLnkyO3guc2VncHRzPVtzYSxYcyxzYSxDcl19ZWxzZSB4LnNlZ3B0cz1bVi54MixWLnkxXX1lbHNlIGlmKGplKXt2YXIgSnQ9Vi55MStDbisoTHQ/ZXQvMipEbjowKSxqbj1WLngxLExyPVYueDI7eC5zZWdwdHM9W2puLEp0LExyLEp0XX1lbHNle3ZhciBpcj1WLngxK0NuKyhMdD9VLzIqRG46MCksc3I9Vi55MSxGYT1WLnkyO3guc2VncHRzPVtpcixzcixpcixGYV19fSxzZC50cnlUb0NvcnJlY3RJbnZhbGlkUG9pbnRzPWZ1bmN0aW9uKHksZyl7dmFyIHg9eS5fcHJpdmF0ZS5yc2NyYXRjaDtpZih4LmVkZ2VUeXBlPT09ImJlemllciIpe3ZhciBUPWcuc3JjUG9zLEw9Zy50Z3RQb3MsST1nLnNyY1csTz1nLnNyY0gsJD1nLnRndFcsej1nLnRndEgsUz1nLnNyY1NoYXBlLFY9Zy50Z3RTaGFwZSxVPSFzdCh4LnN0YXJ0WCl8fCFzdCh4LnN0YXJ0WSksZXQ9IXN0KHguYXJyb3dTdGFydFgpfHwhc3QoeC5hcnJvd1N0YXJ0WSksYXQ9IXN0KHguZW5kWCl8fCFzdCh4LmVuZFkpLGx0PSFzdCh4LmFycm93RW5kWCl8fCFzdCh4LmFycm93RW5kWSksZ3Q9MyxMdD10aGlzLmdldEFycm93V2lkdGgoeS5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSx5LnBzdHlsZSgiYXJyb3ctc2NhbGUiKS52YWx1ZSkqdGhpcy5hcnJvd1NoYXBlV2lkdGgsRXQ9Z3QqTHQsRHQ9VDMoe3g6eC5jdHJscHRzWzBdLHk6eC5jdHJscHRzWzFdfSx7eDp4LnN0YXJ0WCx5Onguc3RhcnRZfSksSXQ9RHQ8RXQsenQ9VDMoe3g6eC5jdHJscHRzWzBdLHk6eC5jdHJscHRzWzFdfSx7eDp4LmVuZFgseTp4LmVuZFl9KSx0ZT16dDxFdCxYdD0hMTtpZihVfHxldHx8SXQpe1h0PSEwO3ZhciBIdD17eDp4LmN0cmxwdHNbMF0tVC54LHk6eC5jdHJscHRzWzFdLVQueX0saWU9TWF0aC5zcXJ0KEh0LngqSHQueCtIdC55Kkh0LnkpLFV0PXt4Okh0LngvaWUseTpIdC55L2llfSxmZT1NYXRoLm1heChJLE8pLGdlPXt4OnguY3RybHB0c1swXStVdC54KjIqZmUseTp4LmN0cmxwdHNbMV0rVXQueSoyKmZlfSxzZT1TLmludGVyc2VjdExpbmUoVC54LFQueSxJLE8sZ2UueCxnZS55LDApO0l0Pyh4LmN0cmxwdHNbMF09eC5jdHJscHRzWzBdK1V0LngqKEV0LUR0KSx4LmN0cmxwdHNbMV09eC5jdHJscHRzWzFdK1V0LnkqKEV0LUR0KSk6KHguY3RybHB0c1swXT1zZVswXStVdC54KkV0LHguY3RybHB0c1sxXT1zZVsxXStVdC55KkV0KX1pZihhdHx8bHR8fHRlKXtYdD0hMDt2YXIgTmU9e3g6eC5jdHJscHRzWzBdLUwueCx5OnguY3RybHB0c1sxXS1MLnl9LHBlPU1hdGguc3FydChOZS54Kk5lLngrTmUueSpOZS55KSxnbj17eDpOZS54L3BlLHk6TmUueS9wZX0samU9TWF0aC5tYXgoSSxPKSxHZT17eDp4LmN0cmxwdHNbMF0rZ24ueCoyKmplLHk6eC5jdHJscHRzWzFdK2duLnkqMipqZX0seG49Vi5pbnRlcnNlY3RMaW5lKEwueCxMLnksJCx6LEdlLngsR2UueSwwKTt0ZT8oeC5jdHJscHRzWzBdPXguY3RybHB0c1swXStnbi54KihFdC16dCkseC5jdHJscHRzWzFdPXguY3RybHB0c1sxXStnbi55KihFdC16dCkpOih4LmN0cmxwdHNbMF09eG5bMF0rZ24ueCpFdCx4LmN0cmxwdHNbMV09eG5bMV0rZ24ueSpFdCl9WHQmJnRoaXMuZmluZEVuZHBvaW50cyh5KX19LHNkLnN0b3JlQWxscHRzPWZ1bmN0aW9uKHkpe3ZhciBnPXkuX3ByaXZhdGUucnNjcmF0Y2g7aWYoZy5lZGdlVHlwZT09PSJtdWx0aWJlemllciJ8fGcuZWRnZVR5cGU9PT0iYmV6aWVyInx8Zy5lZGdlVHlwZT09PSJzZWxmInx8Zy5lZGdlVHlwZT09PSJjb21wb3VuZCIpe2cuYWxscHRzPVtdLGcuYWxscHRzLnB1c2goZy5zdGFydFgsZy5zdGFydFkpO2Zvcih2YXIgeD0wO3grMTxnLmN0cmxwdHMubGVuZ3RoO3grPTIpZy5hbGxwdHMucHVzaChnLmN0cmxwdHNbeF0sZy5jdHJscHRzW3grMV0pLHgrMzxnLmN0cmxwdHMubGVuZ3RoJiZnLmFsbHB0cy5wdXNoKChnLmN0cmxwdHNbeF0rZy5jdHJscHRzW3grMl0pLzIsKGcuY3RybHB0c1t4KzFdK2cuY3RybHB0c1t4KzNdKS8yKTtnLmFsbHB0cy5wdXNoKGcuZW5kWCxnLmVuZFkpO3ZhciBULEw7Zy5jdHJscHRzLmxlbmd0aC8yJTI9PT0wPyhUPWcuYWxscHRzLmxlbmd0aC8yLTEsZy5taWRYPWcuYWxscHRzW1RdLGcubWlkWT1nLmFsbHB0c1tUKzFdKTooVD1nLmFsbHB0cy5sZW5ndGgvMi0zLEw9LjUsZy5taWRYPW9mKGcuYWxscHRzW1RdLGcuYWxscHRzW1QrMl0sZy5hbGxwdHNbVCs0XSxMKSxnLm1pZFk9b2YoZy5hbGxwdHNbVCsxXSxnLmFsbHB0c1tUKzNdLGcuYWxscHRzW1QrNV0sTCkpfWVsc2UgaWYoZy5lZGdlVHlwZT09PSJzdHJhaWdodCIpZy5hbGxwdHM9W2cuc3RhcnRYLGcuc3RhcnRZLGcuZW5kWCxnLmVuZFldLGcubWlkWD0oZy5zdGFydFgrZy5lbmRYK2cuYXJyb3dTdGFydFgrZy5hcnJvd0VuZFgpLzQsZy5taWRZPShnLnN0YXJ0WStnLmVuZFkrZy5hcnJvd1N0YXJ0WStnLmFycm93RW5kWSkvNDtlbHNlIGlmKGcuZWRnZVR5cGU9PT0ic2VnbWVudHMiKWlmKGcuYWxscHRzPVtdLGcuYWxscHRzLnB1c2goZy5zdGFydFgsZy5zdGFydFkpLGcuYWxscHRzLnB1c2guYXBwbHkoZy5hbGxwdHMsZy5zZWdwdHMpLGcuYWxscHRzLnB1c2goZy5lbmRYLGcuZW5kWSksZy5zZWdwdHMubGVuZ3RoJTQ9PT0wKXt2YXIgST1nLnNlZ3B0cy5sZW5ndGgvMixPPUktMjtnLm1pZFg9KGcuc2VncHRzW09dK2cuc2VncHRzW0ldKS8yLGcubWlkWT0oZy5zZWdwdHNbTysxXStnLnNlZ3B0c1tJKzFdKS8yfWVsc2V7dmFyICQ9Zy5zZWdwdHMubGVuZ3RoLzItMTtnLm1pZFg9Zy5zZWdwdHNbJF0sZy5taWRZPWcuc2VncHRzWyQrMV19fSxzZC5jaGVja0ZvckludmFsaWRFZGdlV2FybmluZz1mdW5jdGlvbih5KXt2YXIgZz15WzBdLl9wcml2YXRlLnJzY3JhdGNoO2cubm9kZXNPdmVybGFwfHxzdChnLnN0YXJ0WCkmJnN0KGcuc3RhcnRZKSYmc3QoZy5lbmRYKSYmc3QoZy5lbmRZKT9nLmxvZ2dlZEVycj0hMTpnLmxvZ2dlZEVycnx8KGcubG9nZ2VkRXJyPSEwLG5vKCJFZGdlIGAiK3kuaWQoKSsiYCBoYXMgaW52YWxpZCBlbmRwb2ludHMgYW5kIHNvIGl0IGlzIGltcG9zc2libGUgdG8gZHJhdy4gIEFkanVzdCB5b3VyIGVkZ2Ugc3R5bGUgKGUuZy4gY29udHJvbCBwb2ludHMpIGFjY29yZGluZ2x5IG9yIHVzZSBhbiBhbHRlcm5hdGl2ZSBlZGdlIHR5cGUuICBUaGlzIGlzIGV4cGVjdGVkIGJlaGF2aW91ciB3aGVuIHRoZSBzb3VyY2Ugbm9kZSBhbmQgdGhlIHRhcmdldCBub2RlIG92ZXJsYXAuIikpfSxzZC5maW5kRWRnZUNvbnRyb2xQb2ludHM9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcztpZighKCF5fHx5Lmxlbmd0aD09PTApKXtmb3IodmFyIHg9dGhpcyxUPXguY3ksTD1ULmhhc0NvbXBvdW5kTm9kZXMoKSxJPXttYXA6bmV3IEhiLGdldDpmdW5jdGlvbihIdCl7dmFyIGllPXRoaXMubWFwLmdldChIdFswXSk7cmV0dXJuIGllIT1udWxsP2llLmdldChIdFsxXSk6bnVsbH0sc2V0OmZ1bmN0aW9uKEh0LGllKXt2YXIgVXQ9dGhpcy5tYXAuZ2V0KEh0WzBdKTtVdD09bnVsbCYmKFV0PW5ldyBIYix0aGlzLm1hcC5zZXQoSHRbMF0sVXQpKSxVdC5zZXQoSHRbMV0saWUpfX0sTz1bXSwkPVtdLHo9MDt6PHkubGVuZ3RoO3orKyl7dmFyIFM9eVt6XSxWPVMuX3ByaXZhdGUsVT1TLnBzdHlsZSgiY3VydmUtc3R5bGUiKS52YWx1ZTtpZighKFMucmVtb3ZlZCgpfHwhUy50YWtlc1VwU3BhY2UoKSkpe2lmKFU9PT0iaGF5c3RhY2siKXskLnB1c2goUyk7Y29udGludWV9dmFyIGV0PVU9PT0idW5idW5kbGVkLWJlemllciJ8fFU9PT0ic2VnbWVudHMifHxVPT09InN0cmFpZ2h0Inx8VT09PSJzdHJhaWdodC10cmlhbmdsZSJ8fFU9PT0idGF4aSIsYXQ9VT09PSJ1bmJ1bmRsZWQtYmV6aWVyInx8VT09PSJiZXppZXIiLGx0PVYuc291cmNlLGd0PVYudGFyZ2V0LEx0PWx0LnBvb2xJbmRleCgpLEV0PWd0LnBvb2xJbmRleCgpLER0PVtMdCxFdF0uc29ydCgpLEl0PUkuZ2V0KER0KTtJdD09bnVsbCYmKEl0PXtlbGVzOltdfSxJLnNldChEdCxJdCksTy5wdXNoKER0KSksSXQuZWxlcy5wdXNoKFMpLGV0JiYoSXQuaGFzVW5idW5kbGVkPSEwKSxhdCYmKEl0Lmhhc0Jlemllcj0hMCl9fWZvcih2YXIgenQ9ZnVuY3Rpb24oSHQpe3ZhciBpZT1PW0h0XSxVdD1JLmdldChpZSksZmU9dm9pZCAwO2lmKCFVdC5oYXNVbmJ1bmRsZWQpe3ZhciBnZT1VdC5lbGVzWzBdLnBhcmFsbGVsRWRnZXMoKS5maWx0ZXIoZnVuY3Rpb24oQ3Ipe3JldHVybiBDci5pc0J1bmRsZWRCZXppZXIoKX0pO21MKFV0LmVsZXMpLGdlLmZvckVhY2goZnVuY3Rpb24oQ3Ipe3JldHVybiBVdC5lbGVzLnB1c2goQ3IpfSksVXQuZWxlcy5zb3J0KGZ1bmN0aW9uKENyLEp0KXtyZXR1cm4gQ3IucG9vbEluZGV4KCktSnQucG9vbEluZGV4KCl9KX12YXIgc2U9VXQuZWxlc1swXSxOZT1zZS5zb3VyY2UoKSxwZT1zZS50YXJnZXQoKTtpZihOZS5wb29sSW5kZXgoKT5wZS5wb29sSW5kZXgoKSl7dmFyIGduPU5lO05lPXBlLHBlPWdufXZhciBqZT1VdC5zcmNQb3M9TmUucG9zaXRpb24oKSxHZT1VdC50Z3RQb3M9cGUucG9zaXRpb24oKSx4bj1VdC5zcmNXPU5lLm91dGVyV2lkdGgoKSxEbj1VdC5zcmNIPU5lLm91dGVySGVpZ2h0KCksWG49VXQudGd0Vz1wZS5vdXRlcldpZHRoKCksQ249VXQudGd0SD1wZS5vdXRlckhlaWdodCgpLFluPVV0LnNyY1NoYXBlPXgubm9kZVNoYXBlc1tnLmdldE5vZGVTaGFwZShOZSldLHJyPVV0LnRndFNoYXBlPXgubm9kZVNoYXBlc1tnLmdldE5vZGVTaGFwZShwZSldO1V0LmRpckNvdW50cz17bm9ydGg6MCx3ZXN0OjAsc291dGg6MCxlYXN0OjAsbm9ydGh3ZXN0OjAsc291dGh3ZXN0OjAsbm9ydGhlYXN0OjAsc291dGhlYXN0OjB9O2Zvcih2YXIgd3I9MDt3cjxVdC5lbGVzLmxlbmd0aDt3cisrKXt2YXIgdXI9VXQuZWxlc1t3cl0sZXI9dXJbMF0uX3ByaXZhdGUucnNjcmF0Y2gsYm49dXIucHN0eWxlKCJjdXJ2ZS1zdHlsZSIpLnZhbHVlLHByPWJuPT09InVuYnVuZGxlZC1iZXppZXIifHxibj09PSJzZWdtZW50cyJ8fGJuPT09InRheGkiLGZyPSFOZS5zYW1lKHVyLnNvdXJjZSgpKTtpZighVXQuY2FsY3VsYXRlZEludGVyc2VjdGlvbiYmTmUhPT1wZSYmKFV0Lmhhc0Jlemllcnx8VXQuaGFzVW5idW5kbGVkKSl7VXQuY2FsY3VsYXRlZEludGVyc2VjdGlvbj0hMDt2YXIgcmk9WW4uaW50ZXJzZWN0TGluZShqZS54LGplLnkseG4sRG4sR2UueCxHZS55LDApLF9pPVV0LnNyY0ludG49cmksaWE9cnIuaW50ZXJzZWN0TGluZShHZS54LEdlLnksWG4sQ24samUueCxqZS55LDApLExhPVV0LnRndEludG49aWEsRGk9VXQuaW50ZXJzZWN0aW9uUHRzPXt4MTpyaVswXSx4MjppYVswXSx5MTpyaVsxXSx5MjppYVsxXX0sd2k9VXQucG9zUHRzPXt4MTpqZS54LHgyOkdlLngseTE6amUueSx5MjpHZS55fSxfcz1pYVsxXS1yaVsxXSxaaT1pYVswXS1yaVswXSxOaT1NYXRoLnNxcnQoWmkqWmkrX3MqX3MpLG5zPVV0LnZlY3Rvcj17eDpaaSx5Ol9zfSxVYT1VdC52ZWN0b3JOb3JtPXt4Om5zLngvTmkseTpucy55L05pfSxzYT17eDotVWEueSx5OlVhLnh9O1V0Lm5vZGVzT3ZlcmxhcD0hc3QoTmkpfHxyci5jaGVja1BvaW50KHJpWzBdLHJpWzFdLDAsWG4sQ24sR2UueCxHZS55KXx8WW4uY2hlY2tQb2ludChpYVswXSxpYVsxXSwwLHhuLERuLGplLngsamUueSksVXQudmVjdG9yTm9ybUludmVyc2U9c2EsZmU9e25vZGVzT3ZlcmxhcDpVdC5ub2Rlc092ZXJsYXAsZGlyQ291bnRzOlV0LmRpckNvdW50cyxjYWxjdWxhdGVkSW50ZXJzZWN0aW9uOiEwLGhhc0JlemllcjpVdC5oYXNCZXppZXIsaGFzVW5idW5kbGVkOlV0Lmhhc1VuYnVuZGxlZCxlbGVzOlV0LmVsZXMsc3JjUG9zOkdlLHRndFBvczpqZSxzcmNXOlhuLHNyY0g6Q24sdGd0Vzp4bix0Z3RIOkRuLHNyY0ludG46TGEsdGd0SW50bjpfaSxzcmNTaGFwZTpycix0Z3RTaGFwZTpZbixwb3NQdHM6e3gxOndpLngyLHkxOndpLnkyLHgyOndpLngxLHkyOndpLnkxfSxpbnRlcnNlY3Rpb25QdHM6e3gxOkRpLngyLHkxOkRpLnkyLHgyOkRpLngxLHkyOkRpLnkxfSx2ZWN0b3I6e3g6LW5zLngseTotbnMueX0sdmVjdG9yTm9ybTp7eDotVWEueCx5Oi1VYS55fSx2ZWN0b3JOb3JtSW52ZXJzZTp7eDotc2EueCx5Oi1zYS55fX19dmFyIFhzPWZyP2ZlOlV0O2VyLm5vZGVzT3ZlcmxhcD1Ycy5ub2Rlc092ZXJsYXAsZXIuc3JjSW50bj1Ycy5zcmNJbnRuLGVyLnRndEludG49WHMudGd0SW50bixMJiYoTmUuaXNQYXJlbnQoKXx8TmUuaXNDaGlsZCgpfHxwZS5pc1BhcmVudCgpfHxwZS5pc0NoaWxkKCkpJiYoTmUucGFyZW50cygpLmFueVNhbWUocGUpfHxwZS5wYXJlbnRzKCkuYW55U2FtZShOZSl8fE5lLnNhbWUocGUpJiZOZS5pc1BhcmVudCgpKT9nLmZpbmRDb21wb3VuZExvb3BQb2ludHModXIsWHMsd3IscHIpOk5lPT09cGU/Zy5maW5kTG9vcFBvaW50cyh1cixYcyx3cixwcik6Ym49PT0ic2VnbWVudHMiP2cuZmluZFNlZ21lbnRzUG9pbnRzKHVyLFhzKTpibj09PSJ0YXhpIj9nLmZpbmRUYXhpUG9pbnRzKHVyLFhzKTpibj09PSJzdHJhaWdodCJ8fCFwciYmVXQuZWxlcy5sZW5ndGglMj09PTEmJndyPT09TWF0aC5mbG9vcihVdC5lbGVzLmxlbmd0aC8yKT9nLmZpbmRTdHJhaWdodEVkZ2VQb2ludHModXIpOmcuZmluZEJlemllclBvaW50cyh1cixYcyx3cixwcixmciksZy5maW5kRW5kcG9pbnRzKHVyKSxnLnRyeVRvQ29ycmVjdEludmFsaWRQb2ludHModXIsWHMpLGcuY2hlY2tGb3JJbnZhbGlkRWRnZVdhcm5pbmcodXIpLGcuc3RvcmVBbGxwdHModXIpLGcuc3RvcmVFZGdlUHJvamVjdGlvbnModXIpLGcuY2FsY3VsYXRlQXJyb3dBbmdsZXModXIpLGcucmVjYWxjdWxhdGVFZGdlTGFiZWxQcm9qZWN0aW9ucyh1ciksZy5jYWxjdWxhdGVMYWJlbEFuZ2xlcyh1cil9fSx0ZT0wO3RlPE8ubGVuZ3RoO3RlKyspenQodGUpO3RoaXMuZmluZEhheXN0YWNrUG9pbnRzKCQpfX07ZnVuY3Rpb24gakIoeSl7dmFyIGc9W107aWYoeSE9bnVsbCl7Zm9yKHZhciB4PTA7eDx5Lmxlbmd0aDt4Kz0yKXt2YXIgVD15W3hdLEw9eVt4KzFdO2cucHVzaCh7eDpULHk6TH0pfXJldHVybiBnfX1zZC5nZXRTZWdtZW50UG9pbnRzPWZ1bmN0aW9uKHkpe3ZhciBnPXlbMF0uX3ByaXZhdGUucnNjcmF0Y2gseD1nLmVkZ2VUeXBlO2lmKHg9PT0ic2VnbWVudHMiKXJldHVybiB0aGlzLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh5KSxqQihnLnNlZ3B0cyl9LHNkLmdldENvbnRyb2xQb2ludHM9ZnVuY3Rpb24oeSl7dmFyIGc9eVswXS5fcHJpdmF0ZS5yc2NyYXRjaCx4PWcuZWRnZVR5cGU7aWYoeD09PSJiZXppZXIifHx4PT09Im11bHRpYmV6aWVyInx8eD09PSJzZWxmInx8eD09PSJjb21wb3VuZCIpcmV0dXJuIHRoaXMucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKHkpLGpCKGcuY3RybHB0cyl9LHNkLmdldEVkZ2VNaWRwb2ludD1mdW5jdGlvbih5KXt2YXIgZz15WzBdLl9wcml2YXRlLnJzY3JhdGNoO3JldHVybiB0aGlzLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh5KSx7eDpnLm1pZFgseTpnLm1pZFl9fTt2YXIgUGs9e307UGsubWFudWFsRW5kcHRUb1B4PWZ1bmN0aW9uKHksZyl7dmFyIHg9dGhpcyxUPXkucG9zaXRpb24oKSxMPXkub3V0ZXJXaWR0aCgpLEk9eS5vdXRlckhlaWdodCgpO2lmKGcudmFsdWUubGVuZ3RoPT09Mil7dmFyIE89W2cucGZWYWx1ZVswXSxnLnBmVmFsdWVbMV1dO3JldHVybiBnLnVuaXRzWzBdPT09IiUiJiYoT1swXT1PWzBdKkwpLGcudW5pdHNbMV09PT0iJSImJihPWzFdPU9bMV0qSSksT1swXSs9VC54LE9bMV0rPVQueSxPfWVsc2V7dmFyICQ9Zy5wZlZhbHVlWzBdOyQ9LU1hdGguUEkvMiskO3ZhciB6PTIqTWF0aC5tYXgoTCxJKSxTPVtULngrTWF0aC5jb3MoJCkqeixULnkrTWF0aC5zaW4oJCkqel07cmV0dXJuIHgubm9kZVNoYXBlc1t0aGlzLmdldE5vZGVTaGFwZSh5KV0uaW50ZXJzZWN0TGluZShULngsVC55LEwsSSxTWzBdLFNbMV0sMCl9fSxQay5maW5kRW5kcG9pbnRzPWZ1bmN0aW9uKHkpe3ZhciBnPXRoaXMseCxUPXkuc291cmNlKClbMF0sTD15LnRhcmdldCgpWzBdLEk9VC5wb3NpdGlvbigpLE89TC5wb3NpdGlvbigpLCQ9eS5wc3R5bGUoInRhcmdldC1hcnJvdy1zaGFwZSIpLnZhbHVlLHo9eS5wc3R5bGUoInNvdXJjZS1hcnJvdy1zaGFwZSIpLnZhbHVlLFM9eS5wc3R5bGUoInRhcmdldC1kaXN0YW5jZS1mcm9tLW5vZGUiKS5wZlZhbHVlLFY9eS5wc3R5bGUoInNvdXJjZS1kaXN0YW5jZS1mcm9tLW5vZGUiKS5wZlZhbHVlLFU9eS5wc3R5bGUoImN1cnZlLXN0eWxlIikudmFsdWUsZXQ9eS5fcHJpdmF0ZS5yc2NyYXRjaCxhdD1ldC5lZGdlVHlwZSxsdD1VPT09InRheGkiLGd0PWF0PT09InNlbGYifHxhdD09PSJjb21wb3VuZCIsTHQ9YXQ9PT0iYmV6aWVyInx8YXQ9PT0ibXVsdGliZXppZXIifHxndCxFdD1hdCE9PSJiZXppZXIiLER0PWF0PT09InN0cmFpZ2h0Inx8YXQ9PT0ic2VnbWVudHMiLEl0PWF0PT09InNlZ21lbnRzIix6dD1MdHx8RXR8fER0LHRlPWd0fHxsdCxYdD15LnBzdHlsZSgic291cmNlLWVuZHBvaW50IiksSHQ9dGU/Im91dHNpZGUtdG8tbm9kZSI6WHQudmFsdWUsaWU9eS5wc3R5bGUoInRhcmdldC1lbmRwb2ludCIpLFV0PXRlPyJvdXRzaWRlLXRvLW5vZGUiOmllLnZhbHVlO2V0LnNyY01hbkVuZHB0PVh0LGV0LnRndE1hbkVuZHB0PWllO3ZhciBmZSxnZSxzZSxOZTtpZihMdCl7dmFyIHBlPVtldC5jdHJscHRzWzBdLGV0LmN0cmxwdHNbMV1dLGduPUV0P1tldC5jdHJscHRzW2V0LmN0cmxwdHMubGVuZ3RoLTJdLGV0LmN0cmxwdHNbZXQuY3RybHB0cy5sZW5ndGgtMV1dOnBlO2ZlPWduLGdlPXBlfWVsc2UgaWYoRHQpe3ZhciBqZT1JdD9ldC5zZWdwdHMuc2xpY2UoMCwyKTpbTy54LE8ueV0sR2U9SXQ/ZXQuc2VncHRzLnNsaWNlKGV0LnNlZ3B0cy5sZW5ndGgtMik6W0kueCxJLnldO2ZlPUdlLGdlPWplfWlmKFV0PT09Imluc2lkZS10by1ub2RlIil4PVtPLngsTy55XTtlbHNlIGlmKGllLnVuaXRzKXg9dGhpcy5tYW51YWxFbmRwdFRvUHgoTCxpZSk7ZWxzZSBpZihVdD09PSJvdXRzaWRlLXRvLWxpbmUiKXg9ZXQudGd0SW50bjtlbHNlIGlmKFV0PT09Im91dHNpZGUtdG8tbm9kZSJ8fFV0PT09Im91dHNpZGUtdG8tbm9kZS1vci1sYWJlbCI/c2U9ZmU6KFV0PT09Im91dHNpZGUtdG8tbGluZSJ8fFV0PT09Im91dHNpZGUtdG8tbGluZS1vci1sYWJlbCIpJiYoc2U9W0kueCxJLnldKSx4PWcubm9kZVNoYXBlc1t0aGlzLmdldE5vZGVTaGFwZShMKV0uaW50ZXJzZWN0TGluZShPLngsTy55LEwub3V0ZXJXaWR0aCgpLEwub3V0ZXJIZWlnaHQoKSxzZVswXSxzZVsxXSwwKSxVdD09PSJvdXRzaWRlLXRvLW5vZGUtb3ItbGFiZWwifHxVdD09PSJvdXRzaWRlLXRvLWxpbmUtb3ItbGFiZWwiKXt2YXIgeG49TC5fcHJpdmF0ZS5yc2NyYXRjaCxEbj14bi5sYWJlbFdpZHRoLFhuPXhuLmxhYmVsSGVpZ2h0LENuPXhuLmxhYmVsWCxZbj14bi5sYWJlbFkscnI9RG4vMix3cj1Ybi8yLHVyPUwucHN0eWxlKCJ0ZXh0LXZhbGlnbiIpLnZhbHVlO3VyPT09InRvcCI/WW4tPXdyOnVyPT09ImJvdHRvbSImJihZbis9d3IpO3ZhciBlcj1MLnBzdHlsZSgidGV4dC1oYWxpZ24iKS52YWx1ZTtlcj09PSJsZWZ0Ij9Dbi09cnI6ZXI9PT0icmlnaHQiJiYoQ24rPXJyKTt2YXIgYm49d2soc2VbMF0sc2VbMV0sW0NuLXJyLFluLXdyLENuK3JyLFluLXdyLENuK3JyLFluK3dyLENuLXJyLFluK3dyXSxPLngsTy55KTtpZihibi5sZW5ndGg+MCl7dmFyIHByPUksZnI9XzMocHIsejUoeCkpLHJpPV8zKHByLHo1KGJuKSksX2k9ZnI7aWYocmk8ZnImJih4PWJuLF9pPXJpKSxibi5sZW5ndGg+Mil7dmFyIGlhPV8zKHByLHt4OmJuWzJdLHk6Ym5bM119KTtpYTxfaSYmKHg9W2JuWzJdLGJuWzNdXSl9fX12YXIgTGE9RjkoeCxmZSxnLmFycm93U2hhcGVzWyRdLnNwYWNpbmcoeSkrUyksRGk9RjkoeCxmZSxnLmFycm93U2hhcGVzWyRdLmdhcCh5KStTKTtpZihldC5lbmRYPURpWzBdLGV0LmVuZFk9RGlbMV0sZXQuYXJyb3dFbmRYPUxhWzBdLGV0LmFycm93RW5kWT1MYVsxXSxIdD09PSJpbnNpZGUtdG8tbm9kZSIpeD1bSS54LEkueV07ZWxzZSBpZihYdC51bml0cyl4PXRoaXMubWFudWFsRW5kcHRUb1B4KFQsWHQpO2Vsc2UgaWYoSHQ9PT0ib3V0c2lkZS10by1saW5lIil4PWV0LnNyY0ludG47ZWxzZSBpZihIdD09PSJvdXRzaWRlLXRvLW5vZGUifHxIdD09PSJvdXRzaWRlLXRvLW5vZGUtb3ItbGFiZWwiP05lPWdlOihIdD09PSJvdXRzaWRlLXRvLWxpbmUifHxIdD09PSJvdXRzaWRlLXRvLWxpbmUtb3ItbGFiZWwiKSYmKE5lPVtPLngsTy55XSkseD1nLm5vZGVTaGFwZXNbdGhpcy5nZXROb2RlU2hhcGUoVCldLmludGVyc2VjdExpbmUoSS54LEkueSxULm91dGVyV2lkdGgoKSxULm91dGVySGVpZ2h0KCksTmVbMF0sTmVbMV0sMCksSHQ9PT0ib3V0c2lkZS10by1ub2RlLW9yLWxhYmVsInx8SHQ9PT0ib3V0c2lkZS10by1saW5lLW9yLWxhYmVsIil7dmFyIHdpPVQuX3ByaXZhdGUucnNjcmF0Y2gsX3M9d2kubGFiZWxXaWR0aCxaaT13aS5sYWJlbEhlaWdodCxOaT13aS5sYWJlbFgsbnM9d2kubGFiZWxZLFVhPV9zLzIsc2E9WmkvMixYcz1ULnBzdHlsZSgidGV4dC12YWxpZ24iKS52YWx1ZTtYcz09PSJ0b3AiP25zLT1zYTpYcz09PSJib3R0b20iJiYobnMrPXNhKTt2YXIgQ3I9VC5wc3R5bGUoInRleHQtaGFsaWduIikudmFsdWU7Q3I9PT0ibGVmdCI/TmktPVVhOkNyPT09InJpZ2h0IiYmKE5pKz1VYSk7dmFyIEp0PXdrKE5lWzBdLE5lWzFdLFtOaS1VYSxucy1zYSxOaStVYSxucy1zYSxOaStVYSxucytzYSxOaS1VYSxucytzYV0sSS54LEkueSk7aWYoSnQubGVuZ3RoPjApe3ZhciBqbj1PLExyPV8zKGpuLHo1KHgpKSxpcj1fMyhqbix6NShKdCkpLHNyPUxyO2lmKGlyPExyJiYoeD1bSnRbMF0sSnRbMV1dLHNyPWlyKSxKdC5sZW5ndGg+Mil7dmFyIEZhPV8zKGpuLHt4Okp0WzJdLHk6SnRbM119KTtGYTxzciYmKHg9W0p0WzJdLEp0WzNdXSl9fX12YXIgSHI9RjkoeCxnZSxnLmFycm93U2hhcGVzW3pdLnNwYWNpbmcoeSkrViksc3M9RjkoeCxnZSxnLmFycm93U2hhcGVzW3pdLmdhcCh5KStWKTtldC5zdGFydFg9c3NbMF0sZXQuc3RhcnRZPXNzWzFdLGV0LmFycm93U3RhcnRYPUhyWzBdLGV0LmFycm93U3RhcnRZPUhyWzFdLHp0JiYoIXN0KGV0LnN0YXJ0WCl8fCFzdChldC5zdGFydFkpfHwhc3QoZXQuZW5kWCl8fCFzdChldC5lbmRZKT9ldC5iYWRMaW5lPSEwOmV0LmJhZExpbmU9ITEpfSxQay5nZXRTb3VyY2VFbmRwb2ludD1mdW5jdGlvbih5KXt2YXIgZz15WzBdLl9wcml2YXRlLnJzY3JhdGNoO3N3aXRjaCh0aGlzLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh5KSxnLmVkZ2VUeXBlKXtjYXNlImhheXN0YWNrIjpyZXR1cm57eDpnLmhheXN0YWNrUHRzWzBdLHk6Zy5oYXlzdGFja1B0c1sxXX07ZGVmYXVsdDpyZXR1cm57eDpnLmFycm93U3RhcnRYLHk6Zy5hcnJvd1N0YXJ0WX19fSxQay5nZXRUYXJnZXRFbmRwb2ludD1mdW5jdGlvbih5KXt2YXIgZz15WzBdLl9wcml2YXRlLnJzY3JhdGNoO3N3aXRjaCh0aGlzLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh5KSxnLmVkZ2VUeXBlKXtjYXNlImhheXN0YWNrIjpyZXR1cm57eDpnLmhheXN0YWNrUHRzWzJdLHk6Zy5oYXlzdGFja1B0c1szXX07ZGVmYXVsdDpyZXR1cm57eDpnLmFycm93RW5kWCx5OmcuYXJyb3dFbmRZfX19O3ZhciBZTD17fTtmdW5jdGlvbiBudHQoeSxnLHgpe2Zvcih2YXIgVD1mdW5jdGlvbihTLFYsVSxldCl7cmV0dXJuIG9mKFMsVixVLGV0KX0sTD1nLl9wcml2YXRlLEk9TC5yc3R5bGUuYmV6aWVyUHRzLE89MDtPPHkuYmV6aWVyUHJvalBjdHMubGVuZ3RoO08rKyl7dmFyICQ9eS5iZXppZXJQcm9qUGN0c1tPXTtJLnB1c2goe3g6VCh4WzBdLHhbMl0seFs0XSwkKSx5OlQoeFsxXSx4WzNdLHhbNV0sJCl9KX19WUwuc3RvcmVFZGdlUHJvamVjdGlvbnM9ZnVuY3Rpb24oeSl7dmFyIGc9eS5fcHJpdmF0ZSx4PWcucnNjcmF0Y2gsVD14LmVkZ2VUeXBlO2lmKGcucnN0eWxlLmJlemllclB0cz1udWxsLGcucnN0eWxlLmxpbmVQdHM9bnVsbCxnLnJzdHlsZS5oYXlzdGFja1B0cz1udWxsLFQ9PT0ibXVsdGliZXppZXIifHxUPT09ImJlemllciJ8fFQ9PT0ic2VsZiJ8fFQ9PT0iY29tcG91bmQiKXtnLnJzdHlsZS5iZXppZXJQdHM9W107Zm9yKHZhciBMPTA7TCs1PHguYWxscHRzLmxlbmd0aDtMKz00KW50dCh0aGlzLHkseC5hbGxwdHMuc2xpY2UoTCxMKzYpKX1lbHNlIGlmKFQ9PT0ic2VnbWVudHMiKWZvcih2YXIgST1nLnJzdHlsZS5saW5lUHRzPVtdLEw9MDtMKzE8eC5hbGxwdHMubGVuZ3RoO0wrPTIpSS5wdXNoKHt4OnguYWxscHRzW0xdLHk6eC5hbGxwdHNbTCsxXX0pO2Vsc2UgaWYoVD09PSJoYXlzdGFjayIpe3ZhciBPPXguaGF5c3RhY2tQdHM7Zy5yc3R5bGUuaGF5c3RhY2tQdHM9W3t4Ok9bMF0seTpPWzFdfSx7eDpPWzJdLHk6T1szXX1dfWcucnN0eWxlLmFycm93V2lkdGg9dGhpcy5nZXRBcnJvd1dpZHRoKHkucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUseS5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWUpKnRoaXMuYXJyb3dTaGFwZVdpZHRofSxZTC5yZWNhbGN1bGF0ZUVkZ2VQcm9qZWN0aW9ucz1mdW5jdGlvbih5KXt0aGlzLmZpbmRFZGdlQ29udHJvbFBvaW50cyh5KX07dmFyIGtwPXt9O2twLnJlY2FsY3VsYXRlTm9kZUxhYmVsUHJvamVjdGlvbj1mdW5jdGlvbih5KXt2YXIgZz15LnBzdHlsZSgibGFiZWwiKS5zdHJWYWx1ZTtpZighWChnKSl7dmFyIHgsVCxMPXkuX3ByaXZhdGUsST15LndpZHRoKCksTz15LmhlaWdodCgpLCQ9eS5wYWRkaW5nKCksej15LnBvc2l0aW9uKCksUz15LnBzdHlsZSgidGV4dC1oYWxpZ24iKS5zdHJWYWx1ZSxWPXkucHN0eWxlKCJ0ZXh0LXZhbGlnbiIpLnN0clZhbHVlLFU9TC5yc2NyYXRjaCxldD1MLnJzdHlsZTtzd2l0Y2goUyl7Y2FzZSJsZWZ0Ijp4PXoueC1JLzItJDticmVhaztjYXNlInJpZ2h0Ijp4PXoueCtJLzIrJDticmVhaztkZWZhdWx0Ong9ei54fXN3aXRjaChWKXtjYXNlInRvcCI6VD16LnktTy8yLSQ7YnJlYWs7Y2FzZSJib3R0b20iOlQ9ei55K08vMiskO2JyZWFrO2RlZmF1bHQ6VD16Lnl9VS5sYWJlbFg9eCxVLmxhYmVsWT1ULGV0LmxhYmVsWD14LGV0LmxhYmVsWT1ULHRoaXMuY2FsY3VsYXRlTGFiZWxBbmdsZXMoeSksdGhpcy5hcHBseUxhYmVsRGltZW5zaW9ucyh5KX19O3ZhciAkQj1mdW5jdGlvbihnLHgpe3ZhciBUPU1hdGguYXRhbih4L2cpO3JldHVybiBnPT09MCYmVDwwJiYoVD1UKi0xKSxUfSx6Qj1mdW5jdGlvbihnLHgpe3ZhciBUPXgueC1nLngsTD14LnktZy55O3JldHVybiAkQihULEwpfSxxQj1mdW5jdGlvbihnLHgsVCxMKXt2YXIgST1iaygwLEwtLjAwMSwxKSxPPWJrKDAsTCsuMDAxLDEpLCQ9cTUoZyx4LFQsSSksej1xNShnLHgsVCxPKTtyZXR1cm4gekIoJCx6KX07a3AucmVjYWxjdWxhdGVFZGdlTGFiZWxQcm9qZWN0aW9ucz1mdW5jdGlvbih5KXt2YXIgZyx4PXkuX3ByaXZhdGUsVD14LnJzY3JhdGNoLEw9dGhpcyxJPXttaWQ6eS5wc3R5bGUoImxhYmVsIikuc3RyVmFsdWUsc291cmNlOnkucHN0eWxlKCJzb3VyY2UtbGFiZWwiKS5zdHJWYWx1ZSx0YXJnZXQ6eS5wc3R5bGUoInRhcmdldC1sYWJlbCIpLnN0clZhbHVlfTtpZihJLm1pZHx8SS5zb3VyY2V8fEkudGFyZ2V0KXtnPXt4OlQubWlkWCx5OlQubWlkWX07dmFyIE89ZnVuY3Rpb24oVSxldCxhdCl7Ym0oeC5yc2NyYXRjaCxVLGV0LGF0KSxibSh4LnJzdHlsZSxVLGV0LGF0KX07TygibGFiZWxYIixudWxsLGcueCksTygibGFiZWxZIixudWxsLGcueSk7dmFyICQ9JEIoVC5taWREaXNwWCxULm1pZERpc3BZKTtPKCJsYWJlbEF1dG9BbmdsZSIsbnVsbCwkKTt2YXIgej1mdW5jdGlvbiBWKCl7aWYoVi5jYWNoZSlyZXR1cm4gVi5jYWNoZTtmb3IodmFyIFU9W10sZXQ9MDtldCs1PFQuYWxscHRzLmxlbmd0aDtldCs9NCl7dmFyIGF0PXt4OlQuYWxscHRzW2V0XSx5OlQuYWxscHRzW2V0KzFdfSxsdD17eDpULmFsbHB0c1tldCsyXSx5OlQuYWxscHRzW2V0KzNdfSxndD17eDpULmFsbHB0c1tldCs0XSx5OlQuYWxscHRzW2V0KzVdfTtVLnB1c2goe3AwOmF0LHAxOmx0LHAyOmd0LHN0YXJ0RGlzdDowLGxlbmd0aDowLHNlZ21lbnRzOltdfSl9dmFyIEx0PXgucnN0eWxlLmJlemllclB0cyxFdD1MLmJlemllclByb2pQY3RzLmxlbmd0aDtmdW5jdGlvbiBEdChIdCxpZSxVdCxmZSxnZSl7dmFyIHNlPVQzKGllLFV0KSxOZT1IdC5zZWdtZW50c1tIdC5zZWdtZW50cy5sZW5ndGgtMV0scGU9e3AwOmllLHAxOlV0LHQwOmZlLHQxOmdlLHN0YXJ0RGlzdDpOZT9OZS5zdGFydERpc3QrTmUubGVuZ3RoOjAsbGVuZ3RoOnNlfTtIdC5zZWdtZW50cy5wdXNoKHBlKSxIdC5sZW5ndGgrPXNlfWZvcih2YXIgSXQ9MDtJdDxVLmxlbmd0aDtJdCsrKXt2YXIgenQ9VVtJdF0sdGU9VVtJdC0xXTt0ZSYmKHp0LnN0YXJ0RGlzdD10ZS5zdGFydERpc3QrdGUubGVuZ3RoKSxEdCh6dCx6dC5wMCxMdFtJdCpFdF0sMCxMLmJlemllclByb2pQY3RzWzBdKTtmb3IodmFyIFh0PTA7WHQ8RXQtMTtYdCsrKUR0KHp0LEx0W0l0KkV0K1h0XSxMdFtJdCpFdCtYdCsxXSxMLmJlemllclByb2pQY3RzW1h0XSxMLmJlemllclByb2pQY3RzW1h0KzFdKTtEdCh6dCxMdFtJdCpFdCtFdC0xXSx6dC5wMixMLmJlemllclByb2pQY3RzW0V0LTFdLDEpfXJldHVybiBWLmNhY2hlPVV9LFM9ZnVuY3Rpb24oVSl7dmFyIGV0LGF0PVU9PT0ic291cmNlIjtpZihJW1VdKXt2YXIgbHQ9eS5wc3R5bGUoVSsiLXRleHQtb2Zmc2V0IikucGZWYWx1ZTtzd2l0Y2goVC5lZGdlVHlwZSl7Y2FzZSJzZWxmIjpjYXNlImNvbXBvdW5kIjpjYXNlImJlemllciI6Y2FzZSJtdWx0aWJlemllciI6e2Zvcih2YXIgZ3Q9eigpLEx0LEV0PTAsRHQ9MCxJdD0wO0l0PGd0Lmxlbmd0aDtJdCsrKXtmb3IodmFyIHp0PWd0W2F0P0l0Omd0Lmxlbmd0aC0xLUl0XSx0ZT0wO3RlPHp0LnNlZ21lbnRzLmxlbmd0aDt0ZSsrKXt2YXIgWHQ9enQuc2VnbWVudHNbYXQ/dGU6enQuc2VnbWVudHMubGVuZ3RoLTEtdGVdLEh0PUl0PT09Z3QubGVuZ3RoLTEmJnRlPT09enQuc2VnbWVudHMubGVuZ3RoLTE7aWYoRXQ9RHQsRHQrPVh0Lmxlbmd0aCxEdD49bHR8fEh0KXtMdD17Y3A6enQsc2VnbWVudDpYdH07YnJlYWt9fWlmKEx0KWJyZWFrfXZhciBpZT1MdC5jcCxVdD1MdC5zZWdtZW50LGZlPShsdC1FdCkvVXQubGVuZ3RoLGdlPVV0LnQxLVV0LnQwLHNlPWF0P1V0LnQwK2dlKmZlOlV0LnQxLWdlKmZlO3NlPWJrKDAsc2UsMSksZz1xNShpZS5wMCxpZS5wMSxpZS5wMixzZSksZXQ9cUIoaWUucDAsaWUucDEsaWUucDIsc2UpO2JyZWFrfWNhc2Uic3RyYWlnaHQiOmNhc2Uic2VnbWVudHMiOmNhc2UiaGF5c3RhY2siOntmb3IodmFyIE5lPTAscGUsZ24samUsR2UseG49VC5hbGxwdHMubGVuZ3RoLERuPTA7RG4rMzx4biYmKGF0PyhqZT17eDpULmFsbHB0c1tEbl0seTpULmFsbHB0c1tEbisxXX0sR2U9e3g6VC5hbGxwdHNbRG4rMl0seTpULmFsbHB0c1tEbiszXX0pOihqZT17eDpULmFsbHB0c1t4bi0yLURuXSx5OlQuYWxscHRzW3huLTEtRG5dfSxHZT17eDpULmFsbHB0c1t4bi00LURuXSx5OlQuYWxscHRzW3huLTMtRG5dfSkscGU9VDMoamUsR2UpLGduPU5lLE5lKz1wZSwhKE5lPj1sdCkpO0RuKz0yKTt2YXIgWG49bHQtZ24sQ249WG4vcGU7Q249YmsoMCxDbiwxKSxnPV9ZKGplLEdlLENuKSxldD16QihqZSxHZSk7YnJlYWt9fU8oImxhYmVsWCIsVSxnLngpLE8oImxhYmVsWSIsVSxnLnkpLE8oImxhYmVsQXV0b0FuZ2xlIixVLGV0KX19O1MoInNvdXJjZSIpLFMoInRhcmdldCIpLHRoaXMuYXBwbHlMYWJlbERpbWVuc2lvbnMoeSl9fSxrcC5hcHBseUxhYmVsRGltZW5zaW9ucz1mdW5jdGlvbih5KXt0aGlzLmFwcGx5UHJlZml4ZWRMYWJlbERpbWVuc2lvbnMoeSkseS5pc0VkZ2UoKSYmKHRoaXMuYXBwbHlQcmVmaXhlZExhYmVsRGltZW5zaW9ucyh5LCJzb3VyY2UiKSx0aGlzLmFwcGx5UHJlZml4ZWRMYWJlbERpbWVuc2lvbnMoeSwidGFyZ2V0IikpfSxrcC5hcHBseVByZWZpeGVkTGFiZWxEaW1lbnNpb25zPWZ1bmN0aW9uKHksZyl7dmFyIHg9eS5fcHJpdmF0ZSxUPXRoaXMuZ2V0TGFiZWxUZXh0KHksZyksTD10aGlzLmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyh5LFQpLEk9eS5wc3R5bGUoImxpbmUtaGVpZ2h0IikucGZWYWx1ZSxPPXkucHN0eWxlKCJ0ZXh0LXdyYXAiKS5zdHJWYWx1ZSwkPXdwKHgucnNjcmF0Y2gsImxhYmVsV3JhcENhY2hlZExpbmVzIixnKXx8W10sej1PIT09IndyYXAiPzE6TWF0aC5tYXgoJC5sZW5ndGgsMSksUz1MLmhlaWdodC96LFY9UypJLFU9TC53aWR0aCxldD1MLmhlaWdodCsoei0xKSooSS0xKSpTO2JtKHgucnN0eWxlLCJsYWJlbFdpZHRoIixnLFUpLGJtKHgucnNjcmF0Y2gsImxhYmVsV2lkdGgiLGcsVSksYm0oeC5yc3R5bGUsImxhYmVsSGVpZ2h0IixnLGV0KSxibSh4LnJzY3JhdGNoLCJsYWJlbEhlaWdodCIsZyxldCksYm0oeC5yc2NyYXRjaCwibGFiZWxMaW5lSGVpZ2h0IixnLFYpfSxrcC5nZXRMYWJlbFRleHQ9ZnVuY3Rpb24oeSxnKXt2YXIgeD15Ll9wcml2YXRlLFQ9Zz9nKyItIjoiIixMPXkucHN0eWxlKFQrImxhYmVsIikuc3RyVmFsdWUsST15LnBzdHlsZSgidGV4dC10cmFuc2Zvcm0iKS52YWx1ZSxPPWZ1bmN0aW9uKFhuLENuKXtyZXR1cm4gQ24/KGJtKHgucnNjcmF0Y2gsWG4sZyxDbiksQ24pOndwKHgucnNjcmF0Y2gsWG4sZyl9O2lmKCFMKXJldHVybiIiO0k9PSJub25lInx8KEk9PSJ1cHBlcmNhc2UiP0w9TC50b1VwcGVyQ2FzZSgpOkk9PSJsb3dlcmNhc2UiJiYoTD1MLnRvTG93ZXJDYXNlKCkpKTt2YXIgJD15LnBzdHlsZSgidGV4dC13cmFwIikudmFsdWU7aWYoJD09PSJ3cmFwIil7dmFyIHo9TygibGFiZWxLZXkiKTtpZih6IT1udWxsJiZPKCJsYWJlbFdyYXBLZXkiKT09PXopcmV0dXJuIE8oImxhYmVsV3JhcENhY2hlZFRleHQiKTtmb3IodmFyIFM9IuKAiyIsVj1MLnNwbGl0KGAKYCksVT15LnBzdHlsZSgidGV4dC1tYXgtd2lkdGgiKS5wZlZhbHVlLGV0PXkucHN0eWxlKCJ0ZXh0LW92ZXJmbG93LXdyYXAiKS52YWx1ZSxhdD1ldD09PSJhbnl3aGVyZSIsbHQ9W10sZ3Q9L1tcc1x1MjAwYl0rLyxMdD1hdD8iIjoiICIsRXQ9MDtFdDxWLmxlbmd0aDtFdCsrKXt2YXIgRHQ9VltFdF0sSXQ9dGhpcy5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnMoeSxEdCksenQ9SXQud2lkdGg7aWYoYXQpe3ZhciB0ZT1EdC5zcGxpdCgiIikuam9pbihTKTtEdD10ZX1pZih6dD5VKXtmb3IodmFyIFh0PUR0LnNwbGl0KGd0KSxIdD0iIixpZT0wO2llPFh0Lmxlbmd0aDtpZSsrKXt2YXIgVXQ9WHRbaWVdLGZlPUh0Lmxlbmd0aD09PTA/VXQ6SHQrTHQrVXQsZ2U9dGhpcy5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnMoeSxmZSksc2U9Z2Uud2lkdGg7c2U8PVU/SHQrPVV0K0x0OihIdCYmbHQucHVzaChIdCksSHQ9VXQrTHQpfUh0Lm1hdGNoKC9eW1xzXHUyMDBiXSskLyl8fGx0LnB1c2goSHQpfWVsc2UgbHQucHVzaChEdCl9TygibGFiZWxXcmFwQ2FjaGVkTGluZXMiLGx0KSxMPU8oImxhYmVsV3JhcENhY2hlZFRleHQiLGx0LmpvaW4oYApgKSksTygibGFiZWxXcmFwS2V5Iix6KX1lbHNlIGlmKCQ9PT0iZWxsaXBzaXMiKXt2YXIgTmU9eS5wc3R5bGUoInRleHQtbWF4LXdpZHRoIikucGZWYWx1ZSxwZT0iIixnbj0i4oCmIixqZT0hMTtpZih0aGlzLmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyh5LEwpLndpZHRoPE5lKXJldHVybiBMO2Zvcih2YXIgR2U9MDtHZTxMLmxlbmd0aDtHZSsrKXt2YXIgeG49dGhpcy5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnMoeSxwZStMW0dlXStnbikud2lkdGg7aWYoeG4+TmUpYnJlYWs7cGUrPUxbR2VdLEdlPT09TC5sZW5ndGgtMSYmKGplPSEwKX1yZXR1cm4gamV8fChwZSs9Z24pLHBlfXJldHVybiBMfSxrcC5nZXRMYWJlbEp1c3RpZmljYXRpb249ZnVuY3Rpb24oeSl7dmFyIGc9eS5wc3R5bGUoInRleHQtanVzdGlmaWNhdGlvbiIpLnN0clZhbHVlLHg9eS5wc3R5bGUoInRleHQtaGFsaWduIikuc3RyVmFsdWU7aWYoZz09PSJhdXRvIilpZih5LmlzTm9kZSgpKXN3aXRjaCh4KXtjYXNlImxlZnQiOnJldHVybiJyaWdodCI7Y2FzZSJyaWdodCI6cmV0dXJuImxlZnQiO2RlZmF1bHQ6cmV0dXJuImNlbnRlciJ9ZWxzZSByZXR1cm4iY2VudGVyIjtlbHNlIHJldHVybiBnfSxrcC5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnM9ZnVuY3Rpb24oeSxnKXt2YXIgeD10aGlzLFQ9dnAoZyx5Ll9wcml2YXRlLmxhYmVsRGltc0tleSksTD14LmxhYmVsRGltQ2FjaGV8fCh4LmxhYmVsRGltQ2FjaGU9W10pLEk9TFtUXTtpZihJIT1udWxsKXJldHVybiBJO3ZhciBPPTAsJD15LnBzdHlsZSgiZm9udC1zdHlsZSIpLnN0clZhbHVlLHo9eS5wc3R5bGUoImZvbnQtc2l6ZSIpLnBmVmFsdWUsUz15LnBzdHlsZSgiZm9udC1mYW1pbHkiKS5zdHJWYWx1ZSxWPXkucHN0eWxlKCJmb250LXdlaWdodCIpLnN0clZhbHVlLFU9dGhpcy5sYWJlbENhbGNDYW52YXMsZXQ9dGhpcy5sYWJlbENhbGNDYW52YXNDb250ZXh0O2lmKCFVKXtVPXRoaXMubGFiZWxDYWxjQ2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLGV0PXRoaXMubGFiZWxDYWxjQ2FudmFzQ29udGV4dD1VLmdldENvbnRleHQoIjJkIik7dmFyIGF0PVUuc3R5bGU7YXQucG9zaXRpb249ImFic29sdXRlIixhdC5sZWZ0PSItOTk5OXB4IixhdC50b3A9Ii05OTk5cHgiLGF0LnpJbmRleD0iLTEiLGF0LnZpc2liaWxpdHk9ImhpZGRlbiIsYXQucG9pbnRlckV2ZW50cz0ibm9uZSJ9ZXQuZm9udD0iIi5jb25jYXQoJCwiICIpLmNvbmNhdChWLCIgIikuY29uY2F0KHosInB4ICIpLmNvbmNhdChTKTtmb3IodmFyIGx0PTAsZ3Q9MCxMdD1nLnNwbGl0KGAKYCksRXQ9MDtFdDxMdC5sZW5ndGg7RXQrKyl7dmFyIER0PUx0W0V0XSxJdD1ldC5tZWFzdXJlVGV4dChEdCksenQ9TWF0aC5jZWlsKEl0LndpZHRoKSx0ZT16O2x0PU1hdGgubWF4KHp0LGx0KSxndCs9dGV9cmV0dXJuIGx0Kz1PLGd0Kz1PLExbVF09e3dpZHRoOmx0LGhlaWdodDpndH19LGtwLmNhbGN1bGF0ZUxhYmVsQW5nbGU9ZnVuY3Rpb24oeSxnKXt2YXIgeD15Ll9wcml2YXRlLFQ9eC5yc2NyYXRjaCxMPXkuaXNFZGdlKCksST1nP2crIi0iOiIiLE89eS5wc3R5bGUoSSsidGV4dC1yb3RhdGlvbiIpLCQ9Ty5zdHJWYWx1ZTtyZXR1cm4gJD09PSJub25lIj8wOkwmJiQ9PT0iYXV0b3JvdGF0ZSI/VC5sYWJlbEF1dG9BbmdsZTokPT09ImF1dG9yb3RhdGUiPzA6Ty5wZlZhbHVlfSxrcC5jYWxjdWxhdGVMYWJlbEFuZ2xlcz1mdW5jdGlvbih5KXt2YXIgZz10aGlzLHg9eS5pc0VkZ2UoKSxUPXkuX3ByaXZhdGUsTD1ULnJzY3JhdGNoO0wubGFiZWxBbmdsZT1nLmNhbGN1bGF0ZUxhYmVsQW5nbGUoeSkseCYmKEwuc291cmNlTGFiZWxBbmdsZT1nLmNhbGN1bGF0ZUxhYmVsQW5nbGUoeSwic291cmNlIiksTC50YXJnZXRMYWJlbEFuZ2xlPWcuY2FsY3VsYXRlTGFiZWxBbmdsZSh5LCJ0YXJnZXQiKSl9O3ZhciBpaD17fSxYTD0yOCxIQj0hMTtpaC5nZXROb2RlU2hhcGU9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcyx4PXkucHN0eWxlKCJzaGFwZSIpLnZhbHVlO2lmKHg9PT0iY3V0cmVjdGFuZ2xlIiYmKHkud2lkdGgoKTxYTHx8eS5oZWlnaHQoKTxYTCkpcmV0dXJuIEhCfHwobm8oIlRoZSBgY3V0cmVjdGFuZ2xlYCBub2RlIHNoYXBlIGNhbiBub3QgYmUgdXNlZCBhdCBzbWFsbCBzaXplcyBzbyBgcmVjdGFuZ2xlYCBpcyB1c2VkIGluc3RlYWQiKSxIQj0hMCksInJlY3RhbmdsZSI7aWYoeS5pc1BhcmVudCgpKXJldHVybiB4PT09InJlY3RhbmdsZSJ8fHg9PT0icm91bmRyZWN0YW5nbGUifHx4PT09InJvdW5kLXJlY3RhbmdsZSJ8fHg9PT0iY3V0cmVjdGFuZ2xlInx8eD09PSJjdXQtcmVjdGFuZ2xlInx8eD09PSJiYXJyZWwiP3g6InJlY3RhbmdsZSI7aWYoeD09PSJwb2x5Z29uIil7dmFyIFQ9eS5wc3R5bGUoInNoYXBlLXBvbHlnb24tcG9pbnRzIikudmFsdWU7cmV0dXJuIGcubm9kZVNoYXBlcy5tYWtlUG9seWdvbihUKS5uYW1lfXJldHVybiB4fTt2YXIgRms9e307RmsucmVnaXN0ZXJDYWxjdWxhdGlvbkxpc3RlbmVycz1mdW5jdGlvbigpe3ZhciB5PXRoaXMuY3ksZz15LmNvbGxlY3Rpb24oKSx4PXRoaXMsVD1mdW5jdGlvbihPKXt2YXIgJD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITA7aWYoZy5tZXJnZShPKSwkKWZvcih2YXIgej0wO3o8Ty5sZW5ndGg7eisrKXt2YXIgUz1PW3pdLFY9Uy5fcHJpdmF0ZSxVPVYucnN0eWxlO1UuY2xlYW49ITEsVS5jbGVhbkNvbm5lY3RlZD0hMX19O3guYmluZGVyKHkpLm9uKCJib3VuZHMuKiBkaXJ0eS4qIixmdW5jdGlvbihPKXt2YXIgJD1PLnRhcmdldDtUKCQpfSkub24oInN0eWxlLiogYmFja2dyb3VuZC4qIixmdW5jdGlvbihPKXt2YXIgJD1PLnRhcmdldDtUKCQsITEpfSk7dmFyIEw9ZnVuY3Rpb24oTyl7aWYoTyl7dmFyICQ9eC5vblVwZGF0ZUVsZUNhbGNzRm5zO2cuY2xlYW5TdHlsZSgpO2Zvcih2YXIgej0wO3o8Zy5sZW5ndGg7eisrKXt2YXIgUz1nW3pdLFY9Uy5fcHJpdmF0ZS5yc3R5bGU7Uy5pc05vZGUoKSYmIVYuY2xlYW5Db25uZWN0ZWQmJihUKFMuY29ubmVjdGVkRWRnZXMoKSksVi5jbGVhbkNvbm5lY3RlZD0hMCl9aWYoJClmb3IodmFyIFU9MDtVPCQubGVuZ3RoO1UrKyl7dmFyIGV0PSRbVV07ZXQoTyxnKX14LnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZShnKSxnPXkuY29sbGVjdGlvbigpfX07eC5mbHVzaFJlbmRlcmVkU3R5bGVRdWV1ZT1mdW5jdGlvbigpe0woITApfSx4LmJlZm9yZVJlbmRlcihMLHguYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5lbGVDYWxjcyl9LEZrLm9uVXBkYXRlRWxlQ2FsY3M9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcy5vblVwZGF0ZUVsZUNhbGNzRm5zPXRoaXMub25VcGRhdGVFbGVDYWxjc0Zuc3x8W107Zy5wdXNoKHkpfSxGay5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGU9ZnVuY3Rpb24oeSxnKXt2YXIgeD1mdW5jdGlvbih6dCl7cmV0dXJuIHp0Ll9wcml2YXRlLnJzdHlsZS5jbGVhbkNvbm5lY3RlZH0sVD1bXSxMPVtdO2lmKCF0aGlzLmRlc3Ryb3llZCl7Zz09PXZvaWQgMCYmKGc9ITApO2Zvcih2YXIgST0wO0k8eS5sZW5ndGg7SSsrKXt2YXIgTz15W0ldLCQ9Ty5fcHJpdmF0ZSx6PSQucnN0eWxlO08uaXNFZGdlKCkmJigheChPLnNvdXJjZSgpKXx8IXgoTy50YXJnZXQoKSkpJiYoei5jbGVhbj0hMSksIShnJiZ6LmNsZWFufHxPLnJlbW92ZWQoKSkmJk8ucHN0eWxlKCJkaXNwbGF5IikudmFsdWUhPT0ibm9uZSImJigkLmdyb3VwPT09Im5vZGVzIj9MLnB1c2goTyk6VC5wdXNoKE8pLHouY2xlYW49ITApfWZvcih2YXIgUz0wO1M8TC5sZW5ndGg7UysrKXt2YXIgVj1MW1NdLFU9Vi5fcHJpdmF0ZSxldD1VLnJzdHlsZSxhdD1WLnBvc2l0aW9uKCk7dGhpcy5yZWNhbGN1bGF0ZU5vZGVMYWJlbFByb2plY3Rpb24oViksZXQubm9kZVg9YXQueCxldC5ub2RlWT1hdC55LGV0Lm5vZGVXPVYucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsZXQubm9kZUg9Vi5wc3R5bGUoImhlaWdodCIpLnBmVmFsdWV9dGhpcy5yZWNhbGN1bGF0ZUVkZ2VQcm9qZWN0aW9ucyhUKTtmb3IodmFyIGx0PTA7bHQ8VC5sZW5ndGg7bHQrKyl7dmFyIGd0PVRbbHRdLEx0PWd0Ll9wcml2YXRlLEV0PUx0LnJzdHlsZSxEdD1MdC5yc2NyYXRjaDtFdC5zcmNYPUR0LmFycm93U3RhcnRYLEV0LnNyY1k9RHQuYXJyb3dTdGFydFksRXQudGd0WD1EdC5hcnJvd0VuZFgsRXQudGd0WT1EdC5hcnJvd0VuZFksRXQubWlkWD1EdC5taWRYLEV0Lm1pZFk9RHQubWlkWSxFdC5sYWJlbEFuZ2xlPUR0LmxhYmVsQW5nbGUsRXQuc291cmNlTGFiZWxBbmdsZT1EdC5zb3VyY2VMYWJlbEFuZ2xlLEV0LnRhcmdldExhYmVsQW5nbGU9RHQudGFyZ2V0TGFiZWxBbmdsZX19fTt2YXIgYlQ9e307YlQudXBkYXRlQ2FjaGVkR3JhYmJlZEVsZXM9ZnVuY3Rpb24oKXt2YXIgeT10aGlzLmNhY2hlZFpTb3J0ZWRFbGVzO2lmKHkpe3kuZHJhZz1bXSx5Lm5vbmRyYWc9W107Zm9yKHZhciBnPVtdLHg9MDt4PHkubGVuZ3RoO3grKyl7dmFyIFQ9eVt4XSxMPVQuX3ByaXZhdGUucnNjcmF0Y2g7VC5ncmFiYmVkKCkmJiFULmlzUGFyZW50KCk/Zy5wdXNoKFQpOkwuaW5EcmFnTGF5ZXI/eS5kcmFnLnB1c2goVCk6eS5ub25kcmFnLnB1c2goVCl9Zm9yKHZhciB4PTA7eDxnLmxlbmd0aDt4Kyspe3ZhciBUPWdbeF07eS5kcmFnLnB1c2goVCl9fX0sYlQuaW52YWxpZGF0ZUNhY2hlZFpTb3J0ZWRFbGVzPWZ1bmN0aW9uKCl7dGhpcy5jYWNoZWRaU29ydGVkRWxlcz1udWxsfSxiVC5nZXRDYWNoZWRaU29ydGVkRWxlcz1mdW5jdGlvbih5KXtpZih5fHwhdGhpcy5jYWNoZWRaU29ydGVkRWxlcyl7dmFyIGc9dGhpcy5jeS5tdXRhYmxlRWxlbWVudHMoKS50b0FycmF5KCk7Zy5zb3J0KHBCKSxnLmludGVyYWN0aXZlPWcuZmlsdGVyKGZ1bmN0aW9uKHgpe3JldHVybiB4LmludGVyYWN0aXZlKCl9KSx0aGlzLmNhY2hlZFpTb3J0ZWRFbGVzPWcsdGhpcy51cGRhdGVDYWNoZWRHcmFiYmVkRWxlcygpfWVsc2UgZz10aGlzLmNhY2hlZFpTb3J0ZWRFbGVzO3JldHVybiBnfTt2YXIgQms9e307W00zLHBULHNkLFBrLFlMLGtwLGloLEZrLGJUXS5mb3JFYWNoKGZ1bmN0aW9uKHkpe2ZuKEJrLHkpfSk7dmFyIFZCPXt9O1ZCLmdldENhY2hlZEltYWdlPWZ1bmN0aW9uKHksZyx4KXt2YXIgVD10aGlzLEw9VC5pbWFnZUNhY2hlPVQuaW1hZ2VDYWNoZXx8e30sST1MW3ldO2lmKEkpcmV0dXJuIEkuaW1hZ2UuY29tcGxldGV8fEkuaW1hZ2UuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIseCksSS5pbWFnZTtJPUxbeV09TFt5XXx8e307dmFyIE89SS5pbWFnZT1uZXcgSW1hZ2U7Ty5hZGRFdmVudExpc3RlbmVyKCJsb2FkIix4KSxPLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixmdW5jdGlvbigpe08uZXJyb3I9ITB9KTt2YXIgJD0iZGF0YToiLHo9eS5zdWJzdHJpbmcoMCwkLmxlbmd0aCkudG9Mb3dlckNhc2UoKT09PSQ7cmV0dXJuIHp8fChPLmNyb3NzT3JpZ2luPWcpLE8uc3JjPXksT307dmFyIGE2PXt9O2E2LnJlZ2lzdGVyQmluZGluZz1mdW5jdGlvbih5LGcseCxUKXt2YXIgTD1BcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoYXJndW1lbnRzLFsxXSksST10aGlzLmJpbmRlcih5KTtyZXR1cm4gSS5vbi5hcHBseShJLEwpfSxhNi5iaW5kZXI9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcyx4PXk9PT13aW5kb3d8fHk9PT1kb2N1bWVudHx8eT09PWRvY3VtZW50LmJvZHl8fFJ0KHkpO2lmKGcuc3VwcG9ydHNQYXNzaXZlRXZlbnRzPT1udWxsKXt2YXIgVD0hMTt0cnl7dmFyIEw9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJwYXNzaXZlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFQ9ITAsITB9fSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLG51bGwsTCl9Y2F0Y2h7fWcuc3VwcG9ydHNQYXNzaXZlRXZlbnRzPVR9dmFyIEk9ZnVuY3Rpb24oJCx6LFMpe3ZhciBWPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIHgmJmcuc3VwcG9ydHNQYXNzaXZlRXZlbnRzJiYoVlsyXT17Y2FwdHVyZTpTPz8hMSxwYXNzaXZlOiExLG9uY2U6ITF9KSxnLmJpbmRpbmdzLnB1c2goe3RhcmdldDp5LGFyZ3M6Vn0pLCh5LmFkZEV2ZW50TGlzdGVuZXJ8fHkub24pLmFwcGx5KHksViksdGhpc307cmV0dXJue29uOkksYWRkRXZlbnRMaXN0ZW5lcjpJLGFkZExpc3RlbmVyOkksYmluZDpJfX0sYTYubm9kZUlzRHJhZ2dhYmxlPWZ1bmN0aW9uKHkpe3JldHVybiB5JiZ5LmlzTm9kZSgpJiYheS5sb2NrZWQoKSYmeS5ncmFiYmFibGUoKX0sYTYubm9kZUlzR3JhYmJhYmxlPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLm5vZGVJc0RyYWdnYWJsZSh5KSYmeS5pbnRlcmFjdGl2ZSgpfSxhNi5sb2FkPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcyxnPWZ1bmN0aW9uKEp0KXtyZXR1cm4gSnQuc2VsZWN0ZWQoKX0seD1mdW5jdGlvbihKdCxqbixMcixpcil7SnQ9PW51bGwmJihKdD15LmN5KTtmb3IodmFyIHNyPTA7c3I8am4ubGVuZ3RoO3NyKyspe3ZhciBGYT1qbltzcl07SnQuZW1pdCh7b3JpZ2luYWxFdmVudDpMcix0eXBlOkZhLHBvc2l0aW9uOmlyfSl9fSxUPWZ1bmN0aW9uKEp0KXtyZXR1cm4gSnQuc2hpZnRLZXl8fEp0Lm1ldGFLZXl8fEp0LmN0cmxLZXl9LEw9ZnVuY3Rpb24oSnQsam4pe3ZhciBMcj0hMDtpZih5LmN5Lmhhc0NvbXBvdW5kTm9kZXMoKSYmSnQmJkp0LnBhbm5hYmxlKCkpZm9yKHZhciBpcj0wO2puJiZpcjxqbi5sZW5ndGg7aXIrKyl7dmFyIEp0PWpuW2lyXTtpZihKdC5pc05vZGUoKSYmSnQuaXNQYXJlbnQoKSYmIUp0LnBhbm5hYmxlKCkpe0xyPSExO2JyZWFrfX1lbHNlIExyPSEwO3JldHVybiBMcn0sST1mdW5jdGlvbihKdCl7SnRbMF0uX3ByaXZhdGUuZ3JhYmJlZD0hMH0sTz1mdW5jdGlvbihKdCl7SnRbMF0uX3ByaXZhdGUuZ3JhYmJlZD0hMX0sJD1mdW5jdGlvbihKdCl7SnRbMF0uX3ByaXZhdGUucnNjcmF0Y2guaW5EcmFnTGF5ZXI9ITB9LHo9ZnVuY3Rpb24oSnQpe0p0WzBdLl9wcml2YXRlLnJzY3JhdGNoLmluRHJhZ0xheWVyPSExfSxTPWZ1bmN0aW9uKEp0KXtKdFswXS5fcHJpdmF0ZS5yc2NyYXRjaC5pc0dyYWJUYXJnZXQ9ITB9LFY9ZnVuY3Rpb24oSnQpe0p0WzBdLl9wcml2YXRlLnJzY3JhdGNoLmlzR3JhYlRhcmdldD0hMX0sVT1mdW5jdGlvbihKdCxqbil7dmFyIExyPWpuLmFkZFRvTGlzdCxpcj1Mci5oYXMoSnQpOyFpciYmSnQuZ3JhYmJhYmxlKCkmJiFKdC5sb2NrZWQoKSYmKExyLm1lcmdlKEp0KSxJKEp0KSl9LGV0PWZ1bmN0aW9uKEp0LGpuKXtpZihKdC5jeSgpLmhhc0NvbXBvdW5kTm9kZXMoKSYmIShqbi5pbkRyYWdMYXllcj09bnVsbCYmam4uYWRkVG9MaXN0PT1udWxsKSl7dmFyIExyPUp0LmRlc2NlbmRhbnRzKCk7am4uaW5EcmFnTGF5ZXImJihMci5mb3JFYWNoKCQpLExyLmNvbm5lY3RlZEVkZ2VzKCkuZm9yRWFjaCgkKSksam4uYWRkVG9MaXN0JiZVKExyLGpuKX19LGF0PWZ1bmN0aW9uKEp0LGpuKXtqbj1qbnx8e307dmFyIExyPUp0LmN5KCkuaGFzQ29tcG91bmROb2RlcygpO2puLmluRHJhZ0xheWVyJiYoSnQuZm9yRWFjaCgkKSxKdC5uZWlnaGJvcmhvb2QoKS5zdGRGaWx0ZXIoZnVuY3Rpb24oaXIpe3JldHVybiFMcnx8aXIuaXNFZGdlKCl9KS5mb3JFYWNoKCQpKSxqbi5hZGRUb0xpc3QmJkp0LmZvckVhY2goZnVuY3Rpb24oaXIpe1UoaXIsam4pfSksZXQoSnQsam4pLEx0KEp0LHtpbkRyYWdMYXllcjpqbi5pbkRyYWdMYXllcn0pLHkudXBkYXRlQ2FjaGVkR3JhYmJlZEVsZXMoKX0sbHQ9YXQsZ3Q9ZnVuY3Rpb24oSnQpe0p0JiYoeS5nZXRDYWNoZWRaU29ydGVkRWxlcygpLmZvckVhY2goZnVuY3Rpb24oam4pe08oam4pLHooam4pLFYoam4pfSkseS51cGRhdGVDYWNoZWRHcmFiYmVkRWxlcygpKX0sTHQ9ZnVuY3Rpb24oSnQsam4pe2lmKCEoam4uaW5EcmFnTGF5ZXI9PW51bGwmJmpuLmFkZFRvTGlzdD09bnVsbCkmJkp0LmN5KCkuaGFzQ29tcG91bmROb2RlcygpKXt2YXIgTHI9SnQuYW5jZXN0b3JzKCkub3JwaGFucygpO2lmKCFMci5zYW1lKEp0KSl7dmFyIGlyPUxyLmRlc2NlbmRhbnRzKCkuc3Bhd25TZWxmKCkubWVyZ2UoTHIpLnVubWVyZ2UoSnQpLnVubWVyZ2UoSnQuZGVzY2VuZGFudHMoKSksc3I9aXIuY29ubmVjdGVkRWRnZXMoKTtqbi5pbkRyYWdMYXllciYmKHNyLmZvckVhY2goJCksaXIuZm9yRWFjaCgkKSksam4uYWRkVG9MaXN0JiZpci5mb3JFYWNoKGZ1bmN0aW9uKEZhKXtVKEZhLGpuKX0pfX19LEV0PWZ1bmN0aW9uKCl7ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9bnVsbCYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyIT1udWxsJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIoKX0sRHQ9dHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXI8InUiLEl0PXR5cGVvZiBSZXNpemVPYnNlcnZlcjwidSI7RHQ/KHkucmVtb3ZlT2JzZXJ2ZXI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oQ3Ipe2Zvcih2YXIgSnQ9MDtKdDxDci5sZW5ndGg7SnQrKyl7dmFyIGpuPUNyW0p0XSxMcj1qbi5yZW1vdmVkTm9kZXM7aWYoTHIpZm9yKHZhciBpcj0wO2lyPExyLmxlbmd0aDtpcisrKXt2YXIgc3I9THJbaXJdO2lmKHNyPT09eS5jb250YWluZXIpe3kuZGVzdHJveSgpO2JyZWFrfX19fSkseS5jb250YWluZXIucGFyZW50Tm9kZSYmeS5yZW1vdmVPYnNlcnZlci5vYnNlcnZlKHkuY29udGFpbmVyLnBhcmVudE5vZGUse2NoaWxkTGlzdDohMH0pKTp5LnJlZ2lzdGVyQmluZGluZyh5LmNvbnRhaW5lciwiRE9NTm9kZVJlbW92ZWQiLGZ1bmN0aW9uKENyKXt5LmRlc3Ryb3koKX0pO3ZhciB6dD1vcyhmdW5jdGlvbigpe3kuY3kucmVzaXplKCl9LDEwMCk7RHQmJih5LnN0eWxlT2JzZXJ2ZXI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoenQpLHkuc3R5bGVPYnNlcnZlci5vYnNlcnZlKHkuY29udGFpbmVyLHthdHRyaWJ1dGVzOiEwfSkpLHkucmVnaXN0ZXJCaW5kaW5nKHdpbmRvdywicmVzaXplIix6dCksSXQmJih5LnJlc2l6ZU9ic2VydmVyPW5ldyBSZXNpemVPYnNlcnZlcih6dCkseS5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHkuY29udGFpbmVyKSk7dmFyIHRlPWZ1bmN0aW9uKEp0LGpuKXtmb3IoO0p0IT1udWxsOylqbihKdCksSnQ9SnQucGFyZW50Tm9kZX0sWHQ9ZnVuY3Rpb24oKXt5LmludmFsaWRhdGVDb250YWluZXJDbGllbnRDb29yZHNDYWNoZSgpfTt0ZSh5LmNvbnRhaW5lcixmdW5jdGlvbihDcil7eS5yZWdpc3RlckJpbmRpbmcoQ3IsInRyYW5zaXRpb25lbmQiLFh0KSx5LnJlZ2lzdGVyQmluZGluZyhDciwiYW5pbWF0aW9uZW5kIixYdCkseS5yZWdpc3RlckJpbmRpbmcoQ3IsInNjcm9sbCIsWHQpfSkseS5yZWdpc3RlckJpbmRpbmcoeS5jb250YWluZXIsImNvbnRleHRtZW51IixmdW5jdGlvbihDcil7Q3IucHJldmVudERlZmF1bHQoKX0pO3ZhciBIdD1mdW5jdGlvbigpe3JldHVybiB5LnNlbGVjdGlvbls0XSE9PTB9LGllPWZ1bmN0aW9uKEp0KXtmb3IodmFyIGpuPXkuZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpLExyPWpuWzBdLGlyPWpuWzFdLHNyPWpuWzJdLEZhPWpuWzNdLEhyPUp0LnRvdWNoZXM/SnQudG91Y2hlczpbSnRdLHNzPSExLHFvPTA7cW88SHIubGVuZ3RoO3FvKyspe3ZhciBCYz1Icltxb107aWYoTHI8PUJjLmNsaWVudFgmJkJjLmNsaWVudFg8PUxyK3NyJiZpcjw9QmMuY2xpZW50WSYmQmMuY2xpZW50WTw9aXIrRmEpe3NzPSEwO2JyZWFrfX1pZighc3MpcmV0dXJuITE7Zm9yKHZhciBybz15LmNvbnRhaW5lcixUYz1KdC50YXJnZXQsTWE9VGMucGFyZW50Tm9kZSxpbz0hMTtNYTspe2lmKE1hPT09cm8pe2lvPSEwO2JyZWFrfU1hPU1hLnBhcmVudE5vZGV9cmV0dXJuISFpb307eS5yZWdpc3RlckJpbmRpbmcoeS5jb250YWluZXIsIm1vdXNlZG93biIsZnVuY3Rpb24oSnQpe2lmKGllKEp0KSl7SnQucHJldmVudERlZmF1bHQoKSxFdCgpLHkuaG92ZXJEYXRhLmNhcHR1cmU9ITAseS5ob3ZlckRhdGEud2hpY2g9SnQud2hpY2g7dmFyIGpuPXkuY3ksTHI9W0p0LmNsaWVudFgsSnQuY2xpZW50WV0saXI9eS5wcm9qZWN0SW50b1ZpZXdwb3J0KExyWzBdLExyWzFdKSxzcj15LnNlbGVjdGlvbixGYT15LmZpbmROZWFyZXN0RWxlbWVudHMoaXJbMF0saXJbMV0sITAsITEpLEhyPUZhWzBdLHNzPXkuZHJhZ0RhdGEucG9zc2libGVEcmFnRWxlbWVudHM7eS5ob3ZlckRhdGEubWRvd25Qb3M9aXIseS5ob3ZlckRhdGEubWRvd25HUG9zPUxyO3ZhciBxbz1mdW5jdGlvbigpe3kuaG92ZXJEYXRhLnRhcGhvbGRDYW5jZWxsZWQ9ITEsY2xlYXJUaW1lb3V0KHkuaG92ZXJEYXRhLnRhcGhvbGRUaW1lb3V0KSx5LmhvdmVyRGF0YS50YXBob2xkVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYoIXkuaG92ZXJEYXRhLnRhcGhvbGRDYW5jZWxsZWQpe3ZhciBfbD15LmhvdmVyRGF0YS5kb3duO19sP19sLmVtaXQoe29yaWdpbmFsRXZlbnQ6SnQsdHlwZToidGFwaG9sZCIscG9zaXRpb246e3g6aXJbMF0seTppclsxXX19KTpqbi5lbWl0KHtvcmlnaW5hbEV2ZW50Okp0LHR5cGU6InRhcGhvbGQiLHBvc2l0aW9uOnt4OmlyWzBdLHk6aXJbMV19fSl9fSx5LnRhcGhvbGREdXJhdGlvbil9O2lmKEp0LndoaWNoPT0zKXt5LmhvdmVyRGF0YS5jeHRTdGFydGVkPSEwO3ZhciBCYz17b3JpZ2luYWxFdmVudDpKdCx0eXBlOiJjeHR0YXBzdGFydCIscG9zaXRpb246e3g6aXJbMF0seTppclsxXX19O0hyPyhIci5hY3RpdmF0ZSgpLEhyLmVtaXQoQmMpLHkuaG92ZXJEYXRhLmRvd249SHIpOmpuLmVtaXQoQmMpLHkuaG92ZXJEYXRhLmRvd25UaW1lPW5ldyBEYXRlKCkuZ2V0VGltZSgpLHkuaG92ZXJEYXRhLmN4dERyYWdnZWQ9ITF9ZWxzZSBpZihKdC53aGljaD09MSl7SHImJkhyLmFjdGl2YXRlKCk7e2lmKEhyIT1udWxsJiZ5Lm5vZGVJc0dyYWJiYWJsZShIcikpe3ZhciBybz1mdW5jdGlvbihfbCl7cmV0dXJue29yaWdpbmFsRXZlbnQ6SnQsdHlwZTpfbCxwb3NpdGlvbjp7eDppclswXSx5OmlyWzFdfX19LFRjPWZ1bmN0aW9uKF9sKXtfbC5lbWl0KHJvKCJncmFiIikpfTtpZihTKEhyKSwhSHIuc2VsZWN0ZWQoKSlzcz15LmRyYWdEYXRhLnBvc3NpYmxlRHJhZ0VsZW1lbnRzPWpuLmNvbGxlY3Rpb24oKSxsdChIcix7YWRkVG9MaXN0OnNzfSksSHIuZW1pdChybygiZ3JhYm9uIikpLmVtaXQocm8oImdyYWIiKSk7ZWxzZXtzcz15LmRyYWdEYXRhLnBvc3NpYmxlRHJhZ0VsZW1lbnRzPWpuLmNvbGxlY3Rpb24oKTt2YXIgTWE9am4uJChmdW5jdGlvbihpbyl7cmV0dXJuIGlvLmlzTm9kZSgpJiZpby5zZWxlY3RlZCgpJiZ5Lm5vZGVJc0dyYWJiYWJsZShpbyl9KTthdChNYSx7YWRkVG9MaXN0OnNzfSksSHIuZW1pdChybygiZ3JhYm9uIikpLE1hLmZvckVhY2goVGMpfXkucmVkcmF3SGludCgiZWxlcyIsITApLHkucmVkcmF3SGludCgiZHJhZyIsITApfXkuaG92ZXJEYXRhLmRvd249SHIseS5ob3ZlckRhdGEuZG93bnM9RmEseS5ob3ZlckRhdGEuZG93blRpbWU9bmV3IERhdGUoKS5nZXRUaW1lKCl9eChIcixbIm1vdXNlZG93biIsInRhcHN0YXJ0Iiwidm1vdXNlZG93biJdLEp0LHt4OmlyWzBdLHk6aXJbMV19KSxIcj09bnVsbD8oc3JbNF09MSx5LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249e3g6aXJbMF0seTppclsxXX0seS5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx5LnJlZHJhdygpKTpIci5wYW5uYWJsZSgpJiYoc3JbNF09MSkscW8oKX1zclswXT1zclsyXT1pclswXSxzclsxXT1zclszXT1pclsxXX19LCExKSx5LnJlZ2lzdGVyQmluZGluZyh3aW5kb3csIm1vdXNlbW92ZSIsZnVuY3Rpb24oSnQpe3ZhciBqbj15LmhvdmVyRGF0YS5jYXB0dXJlO2lmKCEoIWpuJiYhaWUoSnQpKSl7dmFyIExyPSExLGlyPXkuY3ksc3I9aXIuem9vbSgpLEZhPVtKdC5jbGllbnRYLEp0LmNsaWVudFldLEhyPXkucHJvamVjdEludG9WaWV3cG9ydChGYVswXSxGYVsxXSksc3M9eS5ob3ZlckRhdGEubWRvd25Qb3MscW89eS5ob3ZlckRhdGEubWRvd25HUG9zLEJjPXkuc2VsZWN0aW9uLHJvPW51bGw7IXkuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcyYmIXkuaG92ZXJEYXRhLmRyYWdnaW5nJiYheS5ob3ZlckRhdGEuc2VsZWN0aW5nJiYocm89eS5maW5kTmVhcmVzdEVsZW1lbnQoSHJbMF0sSHJbMV0sITAsITEpKTt2YXIgVGM9eS5ob3ZlckRhdGEubGFzdCxNYT15LmhvdmVyRGF0YS5kb3duLGlvPVtIclswXS1CY1syXSxIclsxXS1CY1szXV0sX2w9eS5kcmFnRGF0YS5wb3NzaWJsZURyYWdFbGVtZW50cyxHZjtpZihxbyl7dmFyIEVwPUZhWzBdLXFvWzBdLFRwPUVwKkVwLFVmPUZhWzFdLXFvWzFdLEVnPVVmKlVmLGFkPVRwK0VnO3kuaG92ZXJEYXRhLmlzT3ZlclRocmVzaG9sZERyYWc9R2Y9YWQ+PXkuZGVza3RvcFRhcFRocmVzaG9sZDJ9dmFyIGJ2PVQoSnQpO0dmJiYoeS5ob3ZlckRhdGEudGFwaG9sZENhbmNlbGxlZD0hMCk7dmFyIENtPWZ1bmN0aW9uKCl7dmFyIFViPXkuaG92ZXJEYXRhLmRyYWdEZWx0YT15LmhvdmVyRGF0YS5kcmFnRGVsdGF8fFtdO1ViLmxlbmd0aD09PTA/KFViLnB1c2goaW9bMF0pLFViLnB1c2goaW9bMV0pKTooVWJbMF0rPWlvWzBdLFViWzFdKz1pb1sxXSl9O0xyPSEwLHgocm8sWyJtb3VzZW1vdmUiLCJ2bW91c2Vtb3ZlIiwidGFwZHJhZyJdLEp0LHt4OkhyWzBdLHk6SHJbMV19KTt2YXIgZDY9ZnVuY3Rpb24oKXt5LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwLHkuaG92ZXJEYXRhLnNlbGVjdGluZ3x8aXIuZW1pdCh7b3JpZ2luYWxFdmVudDpKdCx0eXBlOiJib3hzdGFydCIscG9zaXRpb246e3g6SHJbMF0seTpIclsxXX19KSxCY1s0XT0xLHkuaG92ZXJEYXRhLnNlbGVjdGluZz0hMCx5LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHkucmVkcmF3KCl9O2lmKHkuaG92ZXJEYXRhLndoaWNoPT09Myl7aWYoR2Ype3ZhciBOMz17b3JpZ2luYWxFdmVudDpKdCx0eXBlOiJjeHRkcmFnIixwb3NpdGlvbjp7eDpIclswXSx5OkhyWzFdfX07TWE/TWEuZW1pdChOMyk6aXIuZW1pdChOMykseS5ob3ZlckRhdGEuY3h0RHJhZ2dlZD0hMCwoIXkuaG92ZXJEYXRhLmN4dE92ZXJ8fHJvIT09eS5ob3ZlckRhdGEuY3h0T3ZlcikmJih5LmhvdmVyRGF0YS5jeHRPdmVyJiZ5LmhvdmVyRGF0YS5jeHRPdmVyLmVtaXQoe29yaWdpbmFsRXZlbnQ6SnQsdHlwZToiY3h0ZHJhZ291dCIscG9zaXRpb246e3g6SHJbMF0seTpIclsxXX19KSx5LmhvdmVyRGF0YS5jeHRPdmVyPXJvLHJvJiZyby5lbWl0KHtvcmlnaW5hbEV2ZW50Okp0LHR5cGU6ImN4dGRyYWdvdmVyIixwb3NpdGlvbjp7eDpIclswXSx5OkhyWzFdfX0pKX19ZWxzZSBpZih5LmhvdmVyRGF0YS5kcmFnZ2luZyl7aWYoTHI9ITAsaXIucGFubmluZ0VuYWJsZWQoKSYmaXIudXNlclBhbm5pbmdFbmFibGVkKCkpe3ZhciBnNjtpZih5LmhvdmVyRGF0YS5qdXN0U3RhcnRlZFBhbil7dmFyIFRUPXkuaG92ZXJEYXRhLm1kb3duUG9zO2c2PXt4OihIclswXS1UVFswXSkqc3IseTooSHJbMV0tVFRbMV0pKnNyfSx5LmhvdmVyRGF0YS5qdXN0U3RhcnRlZFBhbj0hMX1lbHNlIGc2PXt4OmlvWzBdKnNyLHk6aW9bMV0qc3J9O2lyLnBhbkJ5KGc2KSxpci5lbWl0KCJkcmFncGFuIikseS5ob3ZlckRhdGEuZHJhZ2dlZD0hMH1Icj15LnByb2plY3RJbnRvVmlld3BvcnQoSnQuY2xpZW50WCxKdC5jbGllbnRZKX1lbHNlIGlmKEJjWzRdPT0xJiYoTWE9PW51bGx8fE1hLnBhbm5hYmxlKCkpKXtpZihHZil7aWYoIXkuaG92ZXJEYXRhLmRyYWdnaW5nJiZpci5ib3hTZWxlY3Rpb25FbmFibGVkKCkmJihidnx8IWlyLnBhbm5pbmdFbmFibGVkKCl8fCFpci51c2VyUGFubmluZ0VuYWJsZWQoKSkpZDYoKTtlbHNlIGlmKCF5LmhvdmVyRGF0YS5zZWxlY3RpbmcmJmlyLnBhbm5pbmdFbmFibGVkKCkmJmlyLnVzZXJQYW5uaW5nRW5hYmxlZCgpKXt2YXIgUDM9TChNYSx5LmhvdmVyRGF0YS5kb3ducyk7UDMmJih5LmhvdmVyRGF0YS5kcmFnZ2luZz0hMCx5LmhvdmVyRGF0YS5qdXN0U3RhcnRlZFBhbj0hMCxCY1s0XT0wLHkuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj16NShzcykseS5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx5LnJlZHJhdygpKX1NYSYmTWEucGFubmFibGUoKSYmTWEuYWN0aXZlKCkmJk1hLnVuYWN0aXZhdGUoKX19ZWxzZXtpZihNYSYmTWEucGFubmFibGUoKSYmTWEuYWN0aXZlKCkmJk1hLnVuYWN0aXZhdGUoKSwoIU1hfHwhTWEuZ3JhYmJlZCgpKSYmcm8hPVRjJiYoVGMmJngoVGMsWyJtb3VzZW91dCIsInRhcGRyYWdvdXQiXSxKdCx7eDpIclswXSx5OkhyWzFdfSkscm8mJngocm8sWyJtb3VzZW92ZXIiLCJ0YXBkcmFnb3ZlciJdLEp0LHt4OkhyWzBdLHk6SHJbMV19KSx5LmhvdmVyRGF0YS5sYXN0PXJvKSxNYSlpZihHZil7aWYoaXIuYm94U2VsZWN0aW9uRW5hYmxlZCgpJiZidilNYSYmTWEuZ3JhYmJlZCgpJiYoZ3QoX2wpLE1hLmVtaXQoImZyZWVvbiIpLF9sLmVtaXQoImZyZWUiKSx5LmRyYWdEYXRhLmRpZERyYWcmJihNYS5lbWl0KCJkcmFnZnJlZW9uIiksX2wuZW1pdCgiZHJhZ2ZyZWUiKSkpLGQ2KCk7ZWxzZSBpZihNYSYmTWEuZ3JhYmJlZCgpJiZ5Lm5vZGVJc0RyYWdnYWJsZShNYSkpe3ZhciAkZD0heS5kcmFnRGF0YS5kaWREcmFnOyRkJiZ5LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx5LmRyYWdEYXRhLmRpZERyYWc9ITAseS5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzfHxhdChfbCx7aW5EcmFnTGF5ZXI6ITB9KTt2YXIgeDE9e3g6MCx5OjB9O2lmKHN0KGlvWzBdKSYmc3QoaW9bMV0pJiYoeDEueCs9aW9bMF0seDEueSs9aW9bMV0sJGQpKXt2YXIgemQ9eS5ob3ZlckRhdGEuZHJhZ0RlbHRhO3pkJiZzdCh6ZFswXSkmJnN0KHpkWzFdKSYmKHgxLngrPXpkWzBdLHgxLnkrPXpkWzFdKX15LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXM9ITAsX2wuc2lsZW50U2hpZnQoeDEpLmVtaXQoInBvc2l0aW9uIGRyYWciKSx5LnJlZHJhd0hpbnQoImRyYWciLCEwKSx5LnJlZHJhdygpfX1lbHNlIENtKCk7THI9ITB9aWYoQmNbMl09SHJbMF0sQmNbM109SHJbMV0sTHIpcmV0dXJuIEp0LnN0b3BQcm9wYWdhdGlvbiYmSnQuc3RvcFByb3BhZ2F0aW9uKCksSnQucHJldmVudERlZmF1bHQmJkp0LnByZXZlbnREZWZhdWx0KCksITF9fSwhMSk7dmFyIFV0LGZlLGdlO3kucmVnaXN0ZXJCaW5kaW5nKHdpbmRvdywibW91c2V1cCIsZnVuY3Rpb24oSnQpe3ZhciBqbj15LmhvdmVyRGF0YS5jYXB0dXJlO2lmKGpuKXt5LmhvdmVyRGF0YS5jYXB0dXJlPSExO3ZhciBMcj15LmN5LGlyPXkucHJvamVjdEludG9WaWV3cG9ydChKdC5jbGllbnRYLEp0LmNsaWVudFkpLHNyPXkuc2VsZWN0aW9uLEZhPXkuZmluZE5lYXJlc3RFbGVtZW50KGlyWzBdLGlyWzFdLCEwLCExKSxIcj15LmRyYWdEYXRhLnBvc3NpYmxlRHJhZ0VsZW1lbnRzLHNzPXkuaG92ZXJEYXRhLmRvd24scW89VChKdCk7aWYoeS5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uJiYoeS5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx5LnJlZHJhdygpKSx5LmhvdmVyRGF0YS50YXBob2xkQ2FuY2VsbGVkPSEwLHkuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAsc3MmJnNzLnVuYWN0aXZhdGUoKSx5LmhvdmVyRGF0YS53aGljaD09PTMpe3ZhciBCYz17b3JpZ2luYWxFdmVudDpKdCx0eXBlOiJjeHR0YXBlbmQiLHBvc2l0aW9uOnt4OmlyWzBdLHk6aXJbMV19fTtpZihzcz9zcy5lbWl0KEJjKTpMci5lbWl0KEJjKSwheS5ob3ZlckRhdGEuY3h0RHJhZ2dlZCl7dmFyIHJvPXtvcmlnaW5hbEV2ZW50Okp0LHR5cGU6ImN4dHRhcCIscG9zaXRpb246e3g6aXJbMF0seTppclsxXX19O3NzP3NzLmVtaXQocm8pOkxyLmVtaXQocm8pfXkuaG92ZXJEYXRhLmN4dERyYWdnZWQ9ITEseS5ob3ZlckRhdGEud2hpY2g9bnVsbH1lbHNlIGlmKHkuaG92ZXJEYXRhLndoaWNoPT09MSl7aWYoeChGYSxbIm1vdXNldXAiLCJ0YXBlbmQiLCJ2bW91c2V1cCJdLEp0LHt4OmlyWzBdLHk6aXJbMV19KSwheS5kcmFnRGF0YS5kaWREcmFnJiYheS5ob3ZlckRhdGEuZHJhZ2dlZCYmIXkuaG92ZXJEYXRhLnNlbGVjdGluZyYmIXkuaG92ZXJEYXRhLmlzT3ZlclRocmVzaG9sZERyYWcmJih4KHNzLFsiY2xpY2siLCJ0YXAiLCJ2Y2xpY2siXSxKdCx7eDppclswXSx5OmlyWzFdfSksZmU9ITEsSnQudGltZVN0YW1wLWdlPD1Mci5tdWx0aUNsaWNrRGVib3VuY2VUaW1lKCk/KFV0JiZjbGVhclRpbWVvdXQoVXQpLGZlPSEwLGdlPW51bGwseChzcyxbImRibGNsaWNrIiwiZGJsdGFwIiwidmRibGNsaWNrIl0sSnQse3g6aXJbMF0seTppclsxXX0pKTooVXQ9c2V0VGltZW91dChmdW5jdGlvbigpe2ZlfHx4KHNzLFsib25lY2xpY2siLCJvbmV0YXAiLCJ2b25lY2xpY2siXSxKdCx7eDppclswXSx5OmlyWzFdfSl9LExyLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUoKSksZ2U9SnQudGltZVN0YW1wKSksc3M9PW51bGwmJiF5LmRyYWdEYXRhLmRpZERyYWcmJiF5LmhvdmVyRGF0YS5zZWxlY3RpbmcmJiF5LmhvdmVyRGF0YS5kcmFnZ2VkJiYhVChKdCkmJihMci4kKGcpLnVuc2VsZWN0KFsidGFwdW5zZWxlY3QiXSksSHIubGVuZ3RoPjAmJnkucmVkcmF3SGludCgiZWxlcyIsITApLHkuZHJhZ0RhdGEucG9zc2libGVEcmFnRWxlbWVudHM9SHI9THIuY29sbGVjdGlvbigpKSxGYT09c3MmJiF5LmRyYWdEYXRhLmRpZERyYWcmJiF5LmhvdmVyRGF0YS5zZWxlY3RpbmcmJkZhIT1udWxsJiZGYS5fcHJpdmF0ZS5zZWxlY3RhYmxlJiYoeS5ob3ZlckRhdGEuZHJhZ2dpbmd8fChMci5zZWxlY3Rpb25UeXBlKCk9PT0iYWRkaXRpdmUifHxxbz9GYS5zZWxlY3RlZCgpP0ZhLnVuc2VsZWN0KFsidGFwdW5zZWxlY3QiXSk6RmEuc2VsZWN0KFsidGFwc2VsZWN0Il0pOnFvfHwoTHIuJChnKS51bm1lcmdlKEZhKS51bnNlbGVjdChbInRhcHVuc2VsZWN0Il0pLEZhLnNlbGVjdChbInRhcHNlbGVjdCJdKSkpLHkucmVkcmF3SGludCgiZWxlcyIsITApKSx5LmhvdmVyRGF0YS5zZWxlY3Rpbmcpe3ZhciBUYz1Mci5jb2xsZWN0aW9uKHkuZ2V0QWxsSW5Cb3goc3JbMF0sc3JbMV0sc3JbMl0sc3JbM10pKTt5LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLFRjLmxlbmd0aD4wJiZ5LnJlZHJhd0hpbnQoImVsZXMiLCEwKSxMci5lbWl0KHt0eXBlOiJib3hlbmQiLG9yaWdpbmFsRXZlbnQ6SnQscG9zaXRpb246e3g6aXJbMF0seTppclsxXX19KTt2YXIgTWE9ZnVuY3Rpb24oR2Ype3JldHVybiBHZi5zZWxlY3RhYmxlKCkmJiFHZi5zZWxlY3RlZCgpfTtMci5zZWxlY3Rpb25UeXBlKCk9PT0iYWRkaXRpdmUifHxxb3x8THIuJChnKS51bm1lcmdlKFRjKS51bnNlbGVjdCgpLFRjLmVtaXQoImJveCIpLnN0ZEZpbHRlcihNYSkuc2VsZWN0KCkuZW1pdCgiYm94c2VsZWN0IikseS5yZWRyYXcoKX1pZih5LmhvdmVyRGF0YS5kcmFnZ2luZyYmKHkuaG92ZXJEYXRhLmRyYWdnaW5nPSExLHkucmVkcmF3SGludCgic2VsZWN0IiwhMCkseS5yZWRyYXdIaW50KCJlbGVzIiwhMCkseS5yZWRyYXcoKSksIXNyWzRdKXt5LnJlZHJhd0hpbnQoImRyYWciLCEwKSx5LnJlZHJhd0hpbnQoImVsZXMiLCEwKTt2YXIgaW89c3MmJnNzLmdyYWJiZWQoKTtndChIciksaW8mJihzcy5lbWl0KCJmcmVlb24iKSxIci5lbWl0KCJmcmVlIikseS5kcmFnRGF0YS5kaWREcmFnJiYoc3MuZW1pdCgiZHJhZ2ZyZWVvbiIpLEhyLmVtaXQoImRyYWdmcmVlIikpKX19c3JbNF09MCx5LmhvdmVyRGF0YS5kb3duPW51bGwseS5ob3ZlckRhdGEuY3h0U3RhcnRlZD0hMSx5LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXM9ITEseS5ob3ZlckRhdGEuc2VsZWN0aW5nPSExLHkuaG92ZXJEYXRhLmlzT3ZlclRocmVzaG9sZERyYWc9ITEseS5kcmFnRGF0YS5kaWREcmFnPSExLHkuaG92ZXJEYXRhLmRyYWdnZWQ9ITEseS5ob3ZlckRhdGEuZHJhZ0RlbHRhPVtdLHkuaG92ZXJEYXRhLm1kb3duUG9zPW51bGwseS5ob3ZlckRhdGEubWRvd25HUG9zPW51bGx9fSwhMSk7dmFyIHNlPWZ1bmN0aW9uKEp0KXtpZigheS5zY3JvbGxpbmdQYWdlKXt2YXIgam49eS5jeSxMcj1qbi56b29tKCksaXI9am4ucGFuKCksc3I9eS5wcm9qZWN0SW50b1ZpZXdwb3J0KEp0LmNsaWVudFgsSnQuY2xpZW50WSksRmE9W3NyWzBdKkxyK2lyLngsc3JbMV0qTHIraXIueV07aWYoeS5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzfHx5LmhvdmVyRGF0YS5kcmFnZ2luZ3x8eS5ob3ZlckRhdGEuY3h0U3RhcnRlZHx8SHQoKSl7SnQucHJldmVudERlZmF1bHQoKTtyZXR1cm59aWYoam4ucGFubmluZ0VuYWJsZWQoKSYmam4udXNlclBhbm5pbmdFbmFibGVkKCkmJmpuLnpvb21pbmdFbmFibGVkKCkmJmpuLnVzZXJab29taW5nRW5hYmxlZCgpKXtKdC5wcmV2ZW50RGVmYXVsdCgpLHkuZGF0YS53aGVlbFpvb21pbmc9ITAsY2xlYXJUaW1lb3V0KHkuZGF0YS53aGVlbFRpbWVvdXQpLHkuZGF0YS53aGVlbFRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe3kuZGF0YS53aGVlbFpvb21pbmc9ITEseS5yZWRyYXdIaW50KCJlbGVzIiwhMCkseS5yZWRyYXcoKX0sMTUwKTt2YXIgSHI7SnQuZGVsdGFZIT1udWxsP0hyPUp0LmRlbHRhWS8tMjUwOkp0LndoZWVsRGVsdGFZIT1udWxsP0hyPUp0LndoZWVsRGVsdGFZLzFlMzpIcj1KdC53aGVlbERlbHRhLzFlMyxIcj1Icip5LndoZWVsU2Vuc2l0aXZpdHk7dmFyIHNzPUp0LmRlbHRhTW9kZT09PTE7c3MmJihIcio9MzMpO3ZhciBxbz1qbi56b29tKCkqTWF0aC5wb3coMTAsSHIpO0p0LnR5cGU9PT0iZ2VzdHVyZWNoYW5nZSImJihxbz15Lmdlc3R1cmVTdGFydFpvb20qSnQuc2NhbGUpLGpuLnpvb20oe2xldmVsOnFvLHJlbmRlcmVkUG9zaXRpb246e3g6RmFbMF0seTpGYVsxXX19KSxqbi5lbWl0KEp0LnR5cGU9PT0iZ2VzdHVyZWNoYW5nZSI/InBpbmNoem9vbSI6InNjcm9sbHpvb20iKX19fTt5LnJlZ2lzdGVyQmluZGluZyh5LmNvbnRhaW5lciwid2hlZWwiLHNlLCEwKSx5LnJlZ2lzdGVyQmluZGluZyh3aW5kb3csInNjcm9sbCIsZnVuY3Rpb24oSnQpe3kuc2Nyb2xsaW5nUGFnZT0hMCxjbGVhclRpbWVvdXQoeS5zY3JvbGxpbmdQYWdlVGltZW91dCkseS5zY3JvbGxpbmdQYWdlVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7eS5zY3JvbGxpbmdQYWdlPSExfSwyNTApfSwhMCkseS5yZWdpc3RlckJpbmRpbmcoeS5jb250YWluZXIsImdlc3R1cmVzdGFydCIsZnVuY3Rpb24oSnQpe3kuZ2VzdHVyZVN0YXJ0Wm9vbT15LmN5Lnpvb20oKSx5Lmhhc1RvdWNoU3RhcnRlZHx8SnQucHJldmVudERlZmF1bHQoKX0sITApLHkucmVnaXN0ZXJCaW5kaW5nKHkuY29udGFpbmVyLCJnZXN0dXJlY2hhbmdlIixmdW5jdGlvbihDcil7eS5oYXNUb3VjaFN0YXJ0ZWR8fHNlKENyKX0sITApLHkucmVnaXN0ZXJCaW5kaW5nKHkuY29udGFpbmVyLCJtb3VzZW91dCIsZnVuY3Rpb24oSnQpe3ZhciBqbj15LnByb2plY3RJbnRvVmlld3BvcnQoSnQuY2xpZW50WCxKdC5jbGllbnRZKTt5LmN5LmVtaXQoe29yaWdpbmFsRXZlbnQ6SnQsdHlwZToibW91c2VvdXQiLHBvc2l0aW9uOnt4OmpuWzBdLHk6am5bMV19fSl9LCExKSx5LnJlZ2lzdGVyQmluZGluZyh5LmNvbnRhaW5lciwibW91c2VvdmVyIixmdW5jdGlvbihKdCl7dmFyIGpuPXkucHJvamVjdEludG9WaWV3cG9ydChKdC5jbGllbnRYLEp0LmNsaWVudFkpO3kuY3kuZW1pdCh7b3JpZ2luYWxFdmVudDpKdCx0eXBlOiJtb3VzZW92ZXIiLHBvc2l0aW9uOnt4OmpuWzBdLHk6am5bMV19fSl9LCExKTt2YXIgTmUscGUsZ24samUsR2UseG4sRG4sWG4sQ24sWW4scnIsd3IsdXIsZXI9ZnVuY3Rpb24oSnQsam4sTHIsaXIpe3JldHVybiBNYXRoLnNxcnQoKExyLUp0KSooTHItSnQpKyhpci1qbikqKGlyLWpuKSl9LGJuPWZ1bmN0aW9uKEp0LGpuLExyLGlyKXtyZXR1cm4oTHItSnQpKihMci1KdCkrKGlyLWpuKSooaXItam4pfSxwcjt5LnJlZ2lzdGVyQmluZGluZyh5LmNvbnRhaW5lciwidG91Y2hzdGFydCIscHI9ZnVuY3Rpb24oSnQpe2lmKHkuaGFzVG91Y2hTdGFydGVkPSEwLCEhaWUoSnQpKXtFdCgpLHkudG91Y2hEYXRhLmNhcHR1cmU9ITAseS5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMDt2YXIgam49eS5jeSxMcj15LnRvdWNoRGF0YS5ub3csaXI9eS50b3VjaERhdGEuZWFybGllcjtpZihKdC50b3VjaGVzWzBdKXt2YXIgc3I9eS5wcm9qZWN0SW50b1ZpZXdwb3J0KEp0LnRvdWNoZXNbMF0uY2xpZW50WCxKdC50b3VjaGVzWzBdLmNsaWVudFkpO0xyWzBdPXNyWzBdLExyWzFdPXNyWzFdfWlmKEp0LnRvdWNoZXNbMV0pe3ZhciBzcj15LnByb2plY3RJbnRvVmlld3BvcnQoSnQudG91Y2hlc1sxXS5jbGllbnRYLEp0LnRvdWNoZXNbMV0uY2xpZW50WSk7THJbMl09c3JbMF0sTHJbM109c3JbMV19aWYoSnQudG91Y2hlc1syXSl7dmFyIHNyPXkucHJvamVjdEludG9WaWV3cG9ydChKdC50b3VjaGVzWzJdLmNsaWVudFgsSnQudG91Y2hlc1syXS5jbGllbnRZKTtMcls0XT1zclswXSxMcls1XT1zclsxXX1pZihKdC50b3VjaGVzWzFdKXt5LnRvdWNoRGF0YS5zaW5nbGVUb3VjaE1vdmVkPSEwLGd0KHkuZHJhZ0RhdGEudG91Y2hEcmFnRWxlcyk7dmFyIEZhPXkuZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpO0NuPUZhWzBdLFluPUZhWzFdLHJyPUZhWzJdLHdyPUZhWzNdLE5lPUp0LnRvdWNoZXNbMF0uY2xpZW50WC1DbixwZT1KdC50b3VjaGVzWzBdLmNsaWVudFktWW4sZ249SnQudG91Y2hlc1sxXS5jbGllbnRYLUNuLGplPUp0LnRvdWNoZXNbMV0uY2xpZW50WS1Zbix1cj0wPD1OZSYmTmU8PXJyJiYwPD1nbiYmZ248PXJyJiYwPD1wZSYmcGU8PXdyJiYwPD1qZSYmamU8PXdyO3ZhciBIcj1qbi5wYW4oKSxzcz1qbi56b29tKCk7R2U9ZXIoTmUscGUsZ24samUpLHhuPWJuKE5lLHBlLGduLGplKSxEbj1bKE5lK2duKS8yLChwZStqZSkvMl0sWG49WyhEblswXS1Ici54KS9zcywoRG5bMV0tSHIueSkvc3NdO3ZhciBxbz0yMDAsQmM9cW8qcW87aWYoeG48QmMmJiFKdC50b3VjaGVzWzJdKXt2YXIgcm89eS5maW5kTmVhcmVzdEVsZW1lbnQoTHJbMF0sTHJbMV0sITAsITApLFRjPXkuZmluZE5lYXJlc3RFbGVtZW50KExyWzJdLExyWzNdLCEwLCEwKTtybyYmcm8uaXNOb2RlKCk/KHJvLmFjdGl2YXRlKCkuZW1pdCh7b3JpZ2luYWxFdmVudDpKdCx0eXBlOiJjeHR0YXBzdGFydCIscG9zaXRpb246e3g6THJbMF0seTpMclsxXX19KSx5LnRvdWNoRGF0YS5zdGFydD1ybyk6VGMmJlRjLmlzTm9kZSgpPyhUYy5hY3RpdmF0ZSgpLmVtaXQoe29yaWdpbmFsRXZlbnQ6SnQsdHlwZToiY3h0dGFwc3RhcnQiLHBvc2l0aW9uOnt4OkxyWzBdLHk6THJbMV19fSkseS50b3VjaERhdGEuc3RhcnQ9VGMpOmpuLmVtaXQoe29yaWdpbmFsRXZlbnQ6SnQsdHlwZToiY3h0dGFwc3RhcnQiLHBvc2l0aW9uOnt4OkxyWzBdLHk6THJbMV19fSkseS50b3VjaERhdGEuc3RhcnQmJih5LnRvdWNoRGF0YS5zdGFydC5fcHJpdmF0ZS5ncmFiYmVkPSExKSx5LnRvdWNoRGF0YS5jeHQ9ITAseS50b3VjaERhdGEuY3h0RHJhZ2dlZD0hMSx5LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwLHkucmVkcmF3KCk7cmV0dXJufX1pZihKdC50b3VjaGVzWzJdKWpuLmJveFNlbGVjdGlvbkVuYWJsZWQoKSYmSnQucHJldmVudERlZmF1bHQoKTtlbHNlIGlmKCFKdC50b3VjaGVzWzFdKXtpZihKdC50b3VjaGVzWzBdKXt2YXIgTWE9eS5maW5kTmVhcmVzdEVsZW1lbnRzKExyWzBdLExyWzFdLCEwLCEwKSxpbz1NYVswXTtpZihpbyE9bnVsbCYmKGlvLmFjdGl2YXRlKCkseS50b3VjaERhdGEuc3RhcnQ9aW8seS50b3VjaERhdGEuc3RhcnRzPU1hLHkubm9kZUlzR3JhYmJhYmxlKGlvKSkpe3ZhciBfbD15LmRyYWdEYXRhLnRvdWNoRHJhZ0VsZXM9am4uY29sbGVjdGlvbigpLEdmPW51bGw7eS5yZWRyYXdIaW50KCJlbGVzIiwhMCkseS5yZWRyYXdIaW50KCJkcmFnIiwhMCksaW8uc2VsZWN0ZWQoKT8oR2Y9am4uJChmdW5jdGlvbihhZCl7cmV0dXJuIGFkLnNlbGVjdGVkKCkmJnkubm9kZUlzR3JhYmJhYmxlKGFkKX0pLGF0KEdmLHthZGRUb0xpc3Q6X2x9KSk6bHQoaW8se2FkZFRvTGlzdDpfbH0pLFMoaW8pO3ZhciBFcD1mdW5jdGlvbihidil7cmV0dXJue29yaWdpbmFsRXZlbnQ6SnQsdHlwZTpidixwb3NpdGlvbjp7eDpMclswXSx5OkxyWzFdfX19O2lvLmVtaXQoRXAoImdyYWJvbiIpKSxHZj9HZi5mb3JFYWNoKGZ1bmN0aW9uKGFkKXthZC5lbWl0KEVwKCJncmFiIikpfSk6aW8uZW1pdChFcCgiZ3JhYiIpKX14KGlvLFsidG91Y2hzdGFydCIsInRhcHN0YXJ0Iiwidm1vdXNlZG93biJdLEp0LHt4OkxyWzBdLHk6THJbMV19KSxpbz09bnVsbCYmKHkuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj17eDpzclswXSx5OnNyWzFdfSx5LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHkucmVkcmF3KCkpLHkudG91Y2hEYXRhLnNpbmdsZVRvdWNoTW92ZWQ9ITEseS50b3VjaERhdGEuc2luZ2xlVG91Y2hTdGFydFRpbWU9K25ldyBEYXRlLGNsZWFyVGltZW91dCh5LnRvdWNoRGF0YS50YXBob2xkVGltZW91dCkseS50b3VjaERhdGEudGFwaG9sZFRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe3kudG91Y2hEYXRhLnNpbmdsZVRvdWNoTW92ZWQ9PT0hMSYmIXkucGluY2hpbmcmJiF5LnRvdWNoRGF0YS5zZWxlY3RpbmcmJngoeS50b3VjaERhdGEuc3RhcnQsWyJ0YXBob2xkIl0sSnQse3g6THJbMF0seTpMclsxXX0pfSx5LnRhcGhvbGREdXJhdGlvbil9fWlmKEp0LnRvdWNoZXMubGVuZ3RoPj0xKXtmb3IodmFyIFRwPXkudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb249W10sVWY9MDtVZjxMci5sZW5ndGg7VWYrKylUcFtVZl09aXJbVWZdPUxyW1VmXTt2YXIgRWc9SnQudG91Y2hlc1swXTt5LnRvdWNoRGF0YS5zdGFydEdQb3NpdGlvbj1bRWcuY2xpZW50WCxFZy5jbGllbnRZXX19fSwhMSk7dmFyIGZyO3kucmVnaXN0ZXJCaW5kaW5nKHdpbmRvdywidG91Y2htb3ZlIixmcj1mdW5jdGlvbihKdCl7dmFyIGpuPXkudG91Y2hEYXRhLmNhcHR1cmU7aWYoISgham4mJiFpZShKdCkpKXt2YXIgTHI9eS5zZWxlY3Rpb24saXI9eS5jeSxzcj15LnRvdWNoRGF0YS5ub3csRmE9eS50b3VjaERhdGEuZWFybGllcixIcj1pci56b29tKCk7aWYoSnQudG91Y2hlc1swXSl7dmFyIHNzPXkucHJvamVjdEludG9WaWV3cG9ydChKdC50b3VjaGVzWzBdLmNsaWVudFgsSnQudG91Y2hlc1swXS5jbGllbnRZKTtzclswXT1zc1swXSxzclsxXT1zc1sxXX1pZihKdC50b3VjaGVzWzFdKXt2YXIgc3M9eS5wcm9qZWN0SW50b1ZpZXdwb3J0KEp0LnRvdWNoZXNbMV0uY2xpZW50WCxKdC50b3VjaGVzWzFdLmNsaWVudFkpO3NyWzJdPXNzWzBdLHNyWzNdPXNzWzFdfWlmKEp0LnRvdWNoZXNbMl0pe3ZhciBzcz15LnByb2plY3RJbnRvVmlld3BvcnQoSnQudG91Y2hlc1syXS5jbGllbnRYLEp0LnRvdWNoZXNbMl0uY2xpZW50WSk7c3JbNF09c3NbMF0sc3JbNV09c3NbMV19dmFyIHFvPXkudG91Y2hEYXRhLnN0YXJ0R1Bvc2l0aW9uLEJjO2lmKGpuJiZKdC50b3VjaGVzWzBdJiZxbyl7Zm9yKHZhciBybz1bXSxUYz0wO1RjPHNyLmxlbmd0aDtUYysrKXJvW1RjXT1zcltUY10tRmFbVGNdO3ZhciBNYT1KdC50b3VjaGVzWzBdLmNsaWVudFgtcW9bMF0saW89TWEqTWEsX2w9SnQudG91Y2hlc1swXS5jbGllbnRZLXFvWzFdLEdmPV9sKl9sLEVwPWlvK0dmO0JjPUVwPj15LnRvdWNoVGFwVGhyZXNob2xkMn1pZihqbiYmeS50b3VjaERhdGEuY3h0KXtKdC5wcmV2ZW50RGVmYXVsdCgpO3ZhciBUcD1KdC50b3VjaGVzWzBdLmNsaWVudFgtQ24sVWY9SnQudG91Y2hlc1swXS5jbGllbnRZLVluLEVnPUp0LnRvdWNoZXNbMV0uY2xpZW50WC1DbixhZD1KdC50b3VjaGVzWzFdLmNsaWVudFktWW4sYnY9Ym4oVHAsVWYsRWcsYWQpLENtPWJ2L3huLGQ2PTE1MCxOMz1kNipkNixnNj0xLjUsVFQ9ZzYqZzY7aWYoQ20+PVRUfHxidj49TjMpe3kudG91Y2hEYXRhLmN4dD0hMSx5LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwLHkucmVkcmF3SGludCgic2VsZWN0IiwhMCk7dmFyIFAzPXtvcmlnaW5hbEV2ZW50Okp0LHR5cGU6ImN4dHRhcGVuZCIscG9zaXRpb246e3g6c3JbMF0seTpzclsxXX19O3kudG91Y2hEYXRhLnN0YXJ0Pyh5LnRvdWNoRGF0YS5zdGFydC51bmFjdGl2YXRlKCkuZW1pdChQMykseS50b3VjaERhdGEuc3RhcnQ9bnVsbCk6aXIuZW1pdChQMyl9fWlmKGpuJiZ5LnRvdWNoRGF0YS5jeHQpe3ZhciBQMz17b3JpZ2luYWxFdmVudDpKdCx0eXBlOiJjeHRkcmFnIixwb3NpdGlvbjp7eDpzclswXSx5OnNyWzFdfX07eS5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx5LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHkudG91Y2hEYXRhLnN0YXJ0P3kudG91Y2hEYXRhLnN0YXJ0LmVtaXQoUDMpOmlyLmVtaXQoUDMpLHkudG91Y2hEYXRhLnN0YXJ0JiYoeS50b3VjaERhdGEuc3RhcnQuX3ByaXZhdGUuZ3JhYmJlZD0hMSkseS50b3VjaERhdGEuY3h0RHJhZ2dlZD0hMDt2YXIgJGQ9eS5maW5kTmVhcmVzdEVsZW1lbnQoc3JbMF0sc3JbMV0sITAsITApOygheS50b3VjaERhdGEuY3h0T3Zlcnx8JGQhPT15LnRvdWNoRGF0YS5jeHRPdmVyKSYmKHkudG91Y2hEYXRhLmN4dE92ZXImJnkudG91Y2hEYXRhLmN4dE92ZXIuZW1pdCh7b3JpZ2luYWxFdmVudDpKdCx0eXBlOiJjeHRkcmFnb3V0Iixwb3NpdGlvbjp7eDpzclswXSx5OnNyWzFdfX0pLHkudG91Y2hEYXRhLmN4dE92ZXI9JGQsJGQmJiRkLmVtaXQoe29yaWdpbmFsRXZlbnQ6SnQsdHlwZToiY3h0ZHJhZ292ZXIiLHBvc2l0aW9uOnt4OnNyWzBdLHk6c3JbMV19fSkpfWVsc2UgaWYoam4mJkp0LnRvdWNoZXNbMl0mJmlyLmJveFNlbGVjdGlvbkVuYWJsZWQoKSlKdC5wcmV2ZW50RGVmYXVsdCgpLHkuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAsdGhpcy5sYXN0VGhyZWVUb3VjaD0rbmV3IERhdGUseS50b3VjaERhdGEuc2VsZWN0aW5nfHxpci5lbWl0KHtvcmlnaW5hbEV2ZW50Okp0LHR5cGU6ImJveHN0YXJ0Iixwb3NpdGlvbjp7eDpzclswXSx5OnNyWzFdfX0pLHkudG91Y2hEYXRhLnNlbGVjdGluZz0hMCx5LnRvdWNoRGF0YS5kaWRTZWxlY3Q9ITAsTHJbNF09MSwhTHJ8fExyLmxlbmd0aD09PTB8fExyWzBdPT09dm9pZCAwPyhMclswXT0oc3JbMF0rc3JbMl0rc3JbNF0pLzMsTHJbMV09KHNyWzFdK3NyWzNdK3NyWzVdKS8zLExyWzJdPShzclswXStzclsyXStzcls0XSkvMysxLExyWzNdPShzclsxXStzclszXStzcls1XSkvMysxKTooTHJbMl09KHNyWzBdK3NyWzJdK3NyWzRdKS8zLExyWzNdPShzclsxXStzclszXStzcls1XSkvMykseS5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx5LnJlZHJhdygpO2Vsc2UgaWYoam4mJkp0LnRvdWNoZXNbMV0mJiF5LnRvdWNoRGF0YS5kaWRTZWxlY3QmJmlyLnpvb21pbmdFbmFibGVkKCkmJmlyLnBhbm5pbmdFbmFibGVkKCkmJmlyLnVzZXJab29taW5nRW5hYmxlZCgpJiZpci51c2VyUGFubmluZ0VuYWJsZWQoKSl7SnQucHJldmVudERlZmF1bHQoKSx5LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwLHkucmVkcmF3SGludCgic2VsZWN0IiwhMCk7dmFyIHgxPXkuZHJhZ0RhdGEudG91Y2hEcmFnRWxlcztpZih4MSl7eS5yZWRyYXdIaW50KCJkcmFnIiwhMCk7Zm9yKHZhciB6ZD0wO3pkPHgxLmxlbmd0aDt6ZCsrKXt2YXIgX1Q9eDFbemRdLl9wcml2YXRlO19ULmdyYWJiZWQ9ITEsX1QucnNjcmF0Y2guaW5EcmFnTGF5ZXI9ITF9fXZhciBVYj15LnRvdWNoRGF0YS5zdGFydCxUcD1KdC50b3VjaGVzWzBdLmNsaWVudFgtQ24sVWY9SnQudG91Y2hlc1swXS5jbGllbnRZLVluLEVnPUp0LnRvdWNoZXNbMV0uY2xpZW50WC1DbixhZD1KdC50b3VjaGVzWzFdLmNsaWVudFktWW4sblI9ZXIoVHAsVWYsRWcsYWQpLE50dD1uUi9HZTtpZih1cil7dmFyIFB0dD1UcC1OZSxGdHQ9VWYtcGUsQnR0PUVnLWduLFJ0dD1hZC1qZSxqdHQ9KFB0dCtCdHQpLzIsJHR0PShGdHQrUnR0KS8yLFZrPWlyLnpvb20oKSxzTT1WaypOdHQsQ1Q9aXIucGFuKCksclI9WG5bMF0qVmsrQ1QueCxpUj1YblsxXSpWaytDVC55LHp0dD17eDotc00vVmsqKHJSLUNULngtanR0KStyUix5Oi1zTS9WayooaVItQ1QueS0kdHQpK2lSfTtpZihVYiYmVWIuYWN0aXZlKCkpe3ZhciB4MT15LmRyYWdEYXRhLnRvdWNoRHJhZ0VsZXM7Z3QoeDEpLHkucmVkcmF3SGludCgiZHJhZyIsITApLHkucmVkcmF3SGludCgiZWxlcyIsITApLFViLnVuYWN0aXZhdGUoKS5lbWl0KCJmcmVlb24iKSx4MS5lbWl0KCJmcmVlIikseS5kcmFnRGF0YS5kaWREcmFnJiYoVWIuZW1pdCgiZHJhZ2ZyZWVvbiIpLHgxLmVtaXQoImRyYWdmcmVlIikpfWlyLnZpZXdwb3J0KHt6b29tOnNNLHBhbjp6dHQsY2FuY2VsT25GYWlsZWRab29tOiEwfSksaXIuZW1pdCgicGluY2h6b29tIiksR2U9blIsTmU9VHAscGU9VWYsZ249RWcsamU9YWQseS5waW5jaGluZz0hMH1pZihKdC50b3VjaGVzWzBdKXt2YXIgc3M9eS5wcm9qZWN0SW50b1ZpZXdwb3J0KEp0LnRvdWNoZXNbMF0uY2xpZW50WCxKdC50b3VjaGVzWzBdLmNsaWVudFkpO3NyWzBdPXNzWzBdLHNyWzFdPXNzWzFdfWlmKEp0LnRvdWNoZXNbMV0pe3ZhciBzcz15LnByb2plY3RJbnRvVmlld3BvcnQoSnQudG91Y2hlc1sxXS5jbGllbnRYLEp0LnRvdWNoZXNbMV0uY2xpZW50WSk7c3JbMl09c3NbMF0sc3JbM109c3NbMV19aWYoSnQudG91Y2hlc1syXSl7dmFyIHNzPXkucHJvamVjdEludG9WaWV3cG9ydChKdC50b3VjaGVzWzJdLmNsaWVudFgsSnQudG91Y2hlc1syXS5jbGllbnRZKTtzcls0XT1zc1swXSxzcls1XT1zc1sxXX19ZWxzZSBpZihKdC50b3VjaGVzWzBdJiYheS50b3VjaERhdGEuZGlkU2VsZWN0KXt2YXIgX3A9eS50b3VjaERhdGEuc3RhcnQsYU09eS50b3VjaERhdGEubGFzdCwkZDtpZigheS5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzJiYheS5zd2lwZVBhbm5pbmcmJigkZD15LmZpbmROZWFyZXN0RWxlbWVudChzclswXSxzclsxXSwhMCwhMCkpLGpuJiZfcCE9bnVsbCYmSnQucHJldmVudERlZmF1bHQoKSxqbiYmX3AhPW51bGwmJnkubm9kZUlzRHJhZ2dhYmxlKF9wKSlpZihCYyl7dmFyIHgxPXkuZHJhZ0RhdGEudG91Y2hEcmFnRWxlcyxzUj0heS5kcmFnRGF0YS5kaWREcmFnO3NSJiZhdCh4MSx7aW5EcmFnTGF5ZXI6ITB9KSx5LmRyYWdEYXRhLmRpZERyYWc9ITA7dmFyIEdrPXt4OjAseTowfTtpZihzdChyb1swXSkmJnN0KHJvWzFdKSYmKEdrLngrPXJvWzBdLEdrLnkrPXJvWzFdLHNSKSl7eS5yZWRyYXdIaW50KCJlbGVzIiwhMCk7dmFyIENwPXkudG91Y2hEYXRhLmRyYWdEZWx0YTtDcCYmc3QoQ3BbMF0pJiZzdChDcFsxXSkmJihHay54Kz1DcFswXSxHay55Kz1DcFsxXSl9eS5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzPSEwLHgxLnNpbGVudFNoaWZ0KEdrKS5lbWl0KCJwb3NpdGlvbiBkcmFnIikseS5yZWRyYXdIaW50KCJkcmFnIiwhMCkseS50b3VjaERhdGEuc3RhcnRQb3NpdGlvblswXT09RmFbMF0mJnkudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb25bMV09PUZhWzFdJiZ5LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx5LnJlZHJhdygpfWVsc2V7dmFyIENwPXkudG91Y2hEYXRhLmRyYWdEZWx0YT15LnRvdWNoRGF0YS5kcmFnRGVsdGF8fFtdO0NwLmxlbmd0aD09PTA/KENwLnB1c2gocm9bMF0pLENwLnB1c2gocm9bMV0pKTooQ3BbMF0rPXJvWzBdLENwWzFdKz1yb1sxXSl9aWYoeChfcHx8JGQsWyJ0b3VjaG1vdmUiLCJ0YXBkcmFnIiwidm1vdXNlbW92ZSJdLEp0LHt4OnNyWzBdLHk6c3JbMV19KSwoIV9wfHwhX3AuZ3JhYmJlZCgpKSYmJGQhPWFNJiYoYU0mJmFNLmVtaXQoe29yaWdpbmFsRXZlbnQ6SnQsdHlwZToidGFwZHJhZ291dCIscG9zaXRpb246e3g6c3JbMF0seTpzclsxXX19KSwkZCYmJGQuZW1pdCh7b3JpZ2luYWxFdmVudDpKdCx0eXBlOiJ0YXBkcmFnb3ZlciIscG9zaXRpb246e3g6c3JbMF0seTpzclsxXX19KSkseS50b3VjaERhdGEubGFzdD0kZCxqbilmb3IodmFyIHpkPTA7emQ8c3IubGVuZ3RoO3pkKyspc3JbemRdJiZ5LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uW3pkXSYmQmMmJih5LnRvdWNoRGF0YS5zaW5nbGVUb3VjaE1vdmVkPSEwKTtpZihqbiYmKF9wPT1udWxsfHxfcC5wYW5uYWJsZSgpKSYmaXIucGFubmluZ0VuYWJsZWQoKSYmaXIudXNlclBhbm5pbmdFbmFibGVkKCkpe3ZhciBxdHQ9TChfcCx5LnRvdWNoRGF0YS5zdGFydHMpO3F0dCYmKEp0LnByZXZlbnREZWZhdWx0KCkseS5kYXRhLmJnQWN0aXZlUG9zaXN0aW9ufHwoeS5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXo1KHkudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb24pKSx5LnN3aXBlUGFubmluZz8oaXIucGFuQnkoe3g6cm9bMF0qSHIseTpyb1sxXSpIcn0pLGlyLmVtaXQoImRyYWdwYW4iKSk6QmMmJih5LnN3aXBlUGFubmluZz0hMCxpci5wYW5CeSh7eDpNYSpIcix5Ol9sKkhyfSksaXIuZW1pdCgiZHJhZ3BhbiIpLF9wJiYoX3AudW5hY3RpdmF0ZSgpLHkucmVkcmF3SGludCgic2VsZWN0IiwhMCkseS50b3VjaERhdGEuc3RhcnQ9bnVsbCkpKTt2YXIgc3M9eS5wcm9qZWN0SW50b1ZpZXdwb3J0KEp0LnRvdWNoZXNbMF0uY2xpZW50WCxKdC50b3VjaGVzWzBdLmNsaWVudFkpO3NyWzBdPXNzWzBdLHNyWzFdPXNzWzFdfX1mb3IodmFyIFRjPTA7VGM8c3IubGVuZ3RoO1RjKyspRmFbVGNdPXNyW1RjXTtqbiYmSnQudG91Y2hlcy5sZW5ndGg+MCYmIXkuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcyYmIXkuc3dpcGVQYW5uaW5nJiZ5LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb24hPW51bGwmJih5LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwLHkucmVkcmF3SGludCgic2VsZWN0IiwhMCkseS5yZWRyYXcoKSl9fSwhMSk7dmFyIHJpO3kucmVnaXN0ZXJCaW5kaW5nKHdpbmRvdywidG91Y2hjYW5jZWwiLHJpPWZ1bmN0aW9uKEp0KXt2YXIgam49eS50b3VjaERhdGEuc3RhcnQ7eS50b3VjaERhdGEuY2FwdHVyZT0hMSxqbiYmam4udW5hY3RpdmF0ZSgpfSk7dmFyIF9pLGlhLExhLERpO2lmKHkucmVnaXN0ZXJCaW5kaW5nKHdpbmRvdywidG91Y2hlbmQiLF9pPWZ1bmN0aW9uKEp0KXt2YXIgam49eS50b3VjaERhdGEuc3RhcnQsTHI9eS50b3VjaERhdGEuY2FwdHVyZTtpZihMcilKdC50b3VjaGVzLmxlbmd0aD09PTAmJih5LnRvdWNoRGF0YS5jYXB0dXJlPSExKSxKdC5wcmV2ZW50RGVmYXVsdCgpO2Vsc2UgcmV0dXJuO3ZhciBpcj15LnNlbGVjdGlvbjt5LnN3aXBlUGFubmluZz0hMSx5LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXM9ITE7dmFyIHNyPXkuY3ksRmE9c3Iuem9vbSgpLEhyPXkudG91Y2hEYXRhLm5vdyxzcz15LnRvdWNoRGF0YS5lYXJsaWVyO2lmKEp0LnRvdWNoZXNbMF0pe3ZhciBxbz15LnByb2plY3RJbnRvVmlld3BvcnQoSnQudG91Y2hlc1swXS5jbGllbnRYLEp0LnRvdWNoZXNbMF0uY2xpZW50WSk7SHJbMF09cW9bMF0sSHJbMV09cW9bMV19aWYoSnQudG91Y2hlc1sxXSl7dmFyIHFvPXkucHJvamVjdEludG9WaWV3cG9ydChKdC50b3VjaGVzWzFdLmNsaWVudFgsSnQudG91Y2hlc1sxXS5jbGllbnRZKTtIclsyXT1xb1swXSxIclszXT1xb1sxXX1pZihKdC50b3VjaGVzWzJdKXt2YXIgcW89eS5wcm9qZWN0SW50b1ZpZXdwb3J0KEp0LnRvdWNoZXNbMl0uY2xpZW50WCxKdC50b3VjaGVzWzJdLmNsaWVudFkpO0hyWzRdPXFvWzBdLEhyWzVdPXFvWzFdfWpuJiZqbi51bmFjdGl2YXRlKCk7dmFyIEJjO2lmKHkudG91Y2hEYXRhLmN4dCl7aWYoQmM9e29yaWdpbmFsRXZlbnQ6SnQsdHlwZToiY3h0dGFwZW5kIixwb3NpdGlvbjp7eDpIclswXSx5OkhyWzFdfX0sam4/am4uZW1pdChCYyk6c3IuZW1pdChCYyksIXkudG91Y2hEYXRhLmN4dERyYWdnZWQpe3ZhciBybz17b3JpZ2luYWxFdmVudDpKdCx0eXBlOiJjeHR0YXAiLHBvc2l0aW9uOnt4OkhyWzBdLHk6SHJbMV19fTtqbj9qbi5lbWl0KHJvKTpzci5lbWl0KHJvKX15LnRvdWNoRGF0YS5zdGFydCYmKHkudG91Y2hEYXRhLnN0YXJ0Ll9wcml2YXRlLmdyYWJiZWQ9ITEpLHkudG91Y2hEYXRhLmN4dD0hMSx5LnRvdWNoRGF0YS5zdGFydD1udWxsLHkucmVkcmF3KCk7cmV0dXJufWlmKCFKdC50b3VjaGVzWzJdJiZzci5ib3hTZWxlY3Rpb25FbmFibGVkKCkmJnkudG91Y2hEYXRhLnNlbGVjdGluZyl7eS50b3VjaERhdGEuc2VsZWN0aW5nPSExO3ZhciBUYz1zci5jb2xsZWN0aW9uKHkuZ2V0QWxsSW5Cb3goaXJbMF0saXJbMV0saXJbMl0saXJbM10pKTtpclswXT12b2lkIDAsaXJbMV09dm9pZCAwLGlyWzJdPXZvaWQgMCxpclszXT12b2lkIDAsaXJbNF09MCx5LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHNyLmVtaXQoe3R5cGU6ImJveGVuZCIsb3JpZ2luYWxFdmVudDpKdCxwb3NpdGlvbjp7eDpIclswXSx5OkhyWzFdfX0pO3ZhciBNYT1mdW5jdGlvbihOMyl7cmV0dXJuIE4zLnNlbGVjdGFibGUoKSYmIU4zLnNlbGVjdGVkKCl9O1RjLmVtaXQoImJveCIpLnN0ZEZpbHRlcihNYSkuc2VsZWN0KCkuZW1pdCgiYm94c2VsZWN0IiksVGMubm9uZW1wdHkoKSYmeS5yZWRyYXdIaW50KCJlbGVzIiwhMCkseS5yZWRyYXcoKX1pZihqbiE9bnVsbCYmam4udW5hY3RpdmF0ZSgpLEp0LnRvdWNoZXNbMl0peS5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx5LnJlZHJhd0hpbnQoInNlbGVjdCIsITApO2Vsc2UgaWYoIUp0LnRvdWNoZXNbMV0pe2lmKCFKdC50b3VjaGVzWzBdKXtpZighSnQudG91Y2hlc1swXSl7eS5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx5LnJlZHJhd0hpbnQoInNlbGVjdCIsITApO3ZhciBpbz15LmRyYWdEYXRhLnRvdWNoRHJhZ0VsZXM7aWYoam4hPW51bGwpe3ZhciBfbD1qbi5fcHJpdmF0ZS5ncmFiYmVkO2d0KGlvKSx5LnJlZHJhd0hpbnQoImRyYWciLCEwKSx5LnJlZHJhd0hpbnQoImVsZXMiLCEwKSxfbCYmKGpuLmVtaXQoImZyZWVvbiIpLGlvLmVtaXQoImZyZWUiKSx5LmRyYWdEYXRhLmRpZERyYWcmJihqbi5lbWl0KCJkcmFnZnJlZW9uIiksaW8uZW1pdCgiZHJhZ2ZyZWUiKSkpLHgoam4sWyJ0b3VjaGVuZCIsInRhcGVuZCIsInZtb3VzZXVwIiwidGFwZHJhZ291dCJdLEp0LHt4OkhyWzBdLHk6SHJbMV19KSxqbi51bmFjdGl2YXRlKCkseS50b3VjaERhdGEuc3RhcnQ9bnVsbH1lbHNle3ZhciBHZj15LmZpbmROZWFyZXN0RWxlbWVudChIclswXSxIclsxXSwhMCwhMCk7eChHZixbInRvdWNoZW5kIiwidGFwZW5kIiwidm1vdXNldXAiLCJ0YXBkcmFnb3V0Il0sSnQse3g6SHJbMF0seTpIclsxXX0pfXZhciBFcD15LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uWzBdLUhyWzBdLFRwPUVwKkVwLFVmPXkudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb25bMV0tSHJbMV0sRWc9VWYqVWYsYWQ9VHArRWcsYnY9YWQqRmEqRmE7eS50b3VjaERhdGEuc2luZ2xlVG91Y2hNb3ZlZHx8KGpufHxzci4kKCI6c2VsZWN0ZWQiKS51bnNlbGVjdChbInRhcHVuc2VsZWN0Il0pLHgoam4sWyJ0YXAiLCJ2Y2xpY2siXSxKdCx7eDpIclswXSx5OkhyWzFdfSksaWE9ITEsSnQudGltZVN0YW1wLURpPD1zci5tdWx0aUNsaWNrRGVib3VuY2VUaW1lKCk/KExhJiZjbGVhclRpbWVvdXQoTGEpLGlhPSEwLERpPW51bGwseChqbixbImRibHRhcCIsInZkYmxjbGljayJdLEp0LHt4OkhyWzBdLHk6SHJbMV19KSk6KExhPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpYXx8eChqbixbIm9uZXRhcCIsInZvbmVjbGljayJdLEp0LHt4OkhyWzBdLHk6SHJbMV19KX0sc3IubXVsdGlDbGlja0RlYm91bmNlVGltZSgpKSxEaT1KdC50aW1lU3RhbXApKSxqbiE9bnVsbCYmIXkuZHJhZ0RhdGEuZGlkRHJhZyYmam4uX3ByaXZhdGUuc2VsZWN0YWJsZSYmYnY8eS50b3VjaFRhcFRocmVzaG9sZDImJiF5LnBpbmNoaW5nJiYoc3Iuc2VsZWN0aW9uVHlwZSgpPT09InNpbmdsZSI/KHNyLiQoZykudW5tZXJnZShqbikudW5zZWxlY3QoWyJ0YXB1bnNlbGVjdCJdKSxqbi5zZWxlY3QoWyJ0YXBzZWxlY3QiXSkpOmpuLnNlbGVjdGVkKCk/am4udW5zZWxlY3QoWyJ0YXB1bnNlbGVjdCJdKTpqbi5zZWxlY3QoWyJ0YXBzZWxlY3QiXSkseS5yZWRyYXdIaW50KCJlbGVzIiwhMCkpLHkudG91Y2hEYXRhLnNpbmdsZVRvdWNoTW92ZWQ9ITB9fX1mb3IodmFyIENtPTA7Q208SHIubGVuZ3RoO0NtKyspc3NbQ21dPUhyW0NtXTt5LmRyYWdEYXRhLmRpZERyYWc9ITEsSnQudG91Y2hlcy5sZW5ndGg9PT0wJiYoeS50b3VjaERhdGEuZHJhZ0RlbHRhPVtdLHkudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb249bnVsbCx5LnRvdWNoRGF0YS5zdGFydEdQb3NpdGlvbj1udWxsLHkudG91Y2hEYXRhLmRpZFNlbGVjdD0hMSksSnQudG91Y2hlcy5sZW5ndGg8MiYmKEp0LnRvdWNoZXMubGVuZ3RoPT09MSYmKHkudG91Y2hEYXRhLnN0YXJ0R1Bvc2l0aW9uPVtKdC50b3VjaGVzWzBdLmNsaWVudFgsSnQudG91Y2hlc1swXS5jbGllbnRZXSkseS5waW5jaGluZz0hMSx5LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx5LnJlZHJhdygpKX0sITEpLHR5cGVvZiBUb3VjaEV2ZW50PiJ1Iil7dmFyIHdpPVtdLF9zPWZ1bmN0aW9uKEp0KXtyZXR1cm57Y2xpZW50WDpKdC5jbGllbnRYLGNsaWVudFk6SnQuY2xpZW50WSxmb3JjZToxLGlkZW50aWZpZXI6SnQucG9pbnRlcklkLHBhZ2VYOkp0LnBhZ2VYLHBhZ2VZOkp0LnBhZ2VZLHJhZGl1c1g6SnQud2lkdGgvMixyYWRpdXNZOkp0LmhlaWdodC8yLHNjcmVlblg6SnQuc2NyZWVuWCxzY3JlZW5ZOkp0LnNjcmVlblksdGFyZ2V0Okp0LnRhcmdldH19LFppPWZ1bmN0aW9uKEp0KXtyZXR1cm57ZXZlbnQ6SnQsdG91Y2g6X3MoSnQpfX0sTmk9ZnVuY3Rpb24oSnQpe3dpLnB1c2goWmkoSnQpKX0sbnM9ZnVuY3Rpb24oSnQpe2Zvcih2YXIgam49MDtqbjx3aS5sZW5ndGg7am4rKyl7dmFyIExyPXdpW2puXTtpZihMci5ldmVudC5wb2ludGVySWQ9PT1KdC5wb2ludGVySWQpe3dpLnNwbGljZShqbiwxKTtyZXR1cm59fX0sVWE9ZnVuY3Rpb24oSnQpe3ZhciBqbj13aS5maWx0ZXIoZnVuY3Rpb24oTHIpe3JldHVybiBMci5ldmVudC5wb2ludGVySWQ9PT1KdC5wb2ludGVySWR9KVswXTtqbi5ldmVudD1KdCxqbi50b3VjaD1fcyhKdCl9LHNhPWZ1bmN0aW9uKEp0KXtKdC50b3VjaGVzPXdpLm1hcChmdW5jdGlvbihqbil7cmV0dXJuIGpuLnRvdWNofSl9LFhzPWZ1bmN0aW9uKEp0KXtyZXR1cm4gSnQucG9pbnRlclR5cGU9PT0ibW91c2UifHxKdC5wb2ludGVyVHlwZT09PTR9O3kucmVnaXN0ZXJCaW5kaW5nKHkuY29udGFpbmVyLCJwb2ludGVyZG93biIsZnVuY3Rpb24oQ3Ipe1hzKENyKXx8KENyLnByZXZlbnREZWZhdWx0KCksTmkoQ3IpLHNhKENyKSxwcihDcikpfSkseS5yZWdpc3RlckJpbmRpbmcoeS5jb250YWluZXIsInBvaW50ZXJ1cCIsZnVuY3Rpb24oQ3Ipe1hzKENyKXx8KG5zKENyKSxzYShDciksX2koQ3IpKX0pLHkucmVnaXN0ZXJCaW5kaW5nKHkuY29udGFpbmVyLCJwb2ludGVyY2FuY2VsIixmdW5jdGlvbihDcil7WHMoQ3IpfHwobnMoQ3IpLHNhKENyKSxyaShDcikpfSkseS5yZWdpc3RlckJpbmRpbmcoeS5jb250YWluZXIsInBvaW50ZXJtb3ZlIixmdW5jdGlvbihDcil7WHMoQ3IpfHwoQ3IucHJldmVudERlZmF1bHQoKSxVYShDciksc2EoQ3IpLGZyKENyKSl9KX19O3ZhciBkdj17fTtkdi5nZW5lcmF0ZVBvbHlnb249ZnVuY3Rpb24oeSxnKXtyZXR1cm4gdGhpcy5ub2RlU2hhcGVzW3ldPXtyZW5kZXJlcjp0aGlzLG5hbWU6eSxwb2ludHM6ZyxkcmF3OmZ1bmN0aW9uKFQsTCxJLE8sJCl7dGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKCJwb2x5Z29uIixULEwsSSxPLCQsdGhpcy5wb2ludHMpfSxpbnRlcnNlY3RMaW5lOmZ1bmN0aW9uKFQsTCxJLE8sJCx6LFMpe3JldHVybiB3aygkLHosdGhpcy5wb2ludHMsVCxMLEkvMixPLzIsUyl9LGNoZWNrUG9pbnQ6ZnVuY3Rpb24oVCxMLEksTywkLHosUyl7cmV0dXJuIGx2KFQsTCx0aGlzLnBvaW50cyx6LFMsTywkLFswLC0xXSxJKX19fSxkdi5nZW5lcmF0ZUVsbGlwc2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlU2hhcGVzLmVsbGlwc2U9e3JlbmRlcmVyOnRoaXMsbmFtZToiZWxsaXBzZSIsZHJhdzpmdW5jdGlvbihnLHgsVCxMLEkpe3RoaXMucmVuZGVyZXIubm9kZVNoYXBlSW1wbCh0aGlzLm5hbWUsZyx4LFQsTCxJKX0saW50ZXJzZWN0TGluZTpmdW5jdGlvbihnLHgsVCxMLEksTywkKXtyZXR1cm4gUlkoSSxPLGcseCxULzIrJCxMLzIrJCl9LGNoZWNrUG9pbnQ6ZnVuY3Rpb24oZyx4LFQsTCxJLE8sJCl7cmV0dXJuIEMzKGcseCxMLEksTywkLFQpfX19LGR2LmdlbmVyYXRlUm91bmRQb2x5Z29uPWZ1bmN0aW9uKHksZyl7Zm9yKHZhciB4PW5ldyBBcnJheShnLmxlbmd0aCoyKSxUPTA7VDxnLmxlbmd0aC8yO1QrKyl7dmFyIEw9VCoyLEk9dm9pZCAwO1Q8Zy5sZW5ndGgvMi0xP0k9KFQrMSkqMjpJPTAseFtUKjRdPWdbTF0seFtUKjQrMV09Z1tMKzFdO3ZhciBPPWdbSV0tZ1tMXSwkPWdbSSsxXS1nW0wrMV0sej1NYXRoLnNxcnQoTypPKyQqJCk7eFtUKjQrMl09Ty96LHhbVCo0KzNdPSQven1yZXR1cm4gdGhpcy5ub2RlU2hhcGVzW3ldPXtyZW5kZXJlcjp0aGlzLG5hbWU6eSxwb2ludHM6eCxkcmF3OmZ1bmN0aW9uKFYsVSxldCxhdCxsdCl7dGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKCJyb3VuZC1wb2x5Z29uIixWLFUsZXQsYXQsbHQsdGhpcy5wb2ludHMpfSxpbnRlcnNlY3RMaW5lOmZ1bmN0aW9uKFYsVSxldCxhdCxsdCxndCxMdCl7cmV0dXJuIGpZKGx0LGd0LHRoaXMucG9pbnRzLFYsVSxldCxhdCl9LGNoZWNrUG9pbnQ6ZnVuY3Rpb24oVixVLGV0LGF0LGx0LGd0LEx0KXtyZXR1cm4gQlkoVixVLHRoaXMucG9pbnRzLGd0LEx0LGF0LGx0KX19fSxkdi5nZW5lcmF0ZVJvdW5kUmVjdGFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZVNoYXBlc1sicm91bmQtcmVjdGFuZ2xlIl09dGhpcy5ub2RlU2hhcGVzLnJvdW5kcmVjdGFuZ2xlPXtyZW5kZXJlcjp0aGlzLG5hbWU6InJvdW5kLXJlY3RhbmdsZSIscG9pbnRzOnJkKDQsMCksZHJhdzpmdW5jdGlvbihnLHgsVCxMLEkpe3RoaXMucmVuZGVyZXIubm9kZVNoYXBlSW1wbCh0aGlzLm5hbWUsZyx4LFQsTCxJKX0saW50ZXJzZWN0TGluZTpmdW5jdGlvbihnLHgsVCxMLEksTywkKXtyZXR1cm4gZUYoSSxPLGcseCxULEwsJCl9LGNoZWNrUG9pbnQ6ZnVuY3Rpb24oZyx4LFQsTCxJLE8sJCl7dmFyIHo9bWsoTCxJKSxTPXoqMjtyZXR1cm4hIShsdihnLHgsdGhpcy5wb2ludHMsTywkLEwsSS1TLFswLC0xXSxUKXx8bHYoZyx4LHRoaXMucG9pbnRzLE8sJCxMLVMsSSxbMCwtMV0sVCl8fEMzKGcseCxTLFMsTy1MLzIreiwkLUkvMit6LFQpfHxDMyhnLHgsUyxTLE8rTC8yLXosJC1JLzIreixUKXx8QzMoZyx4LFMsUyxPK0wvMi16LCQrSS8yLXosVCl8fEMzKGcseCxTLFMsTy1MLzIreiwkK0kvMi16LFQpKX19fSxkdi5nZW5lcmF0ZUN1dFJlY3RhbmdsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVTaGFwZXNbImN1dC1yZWN0YW5nbGUiXT10aGlzLm5vZGVTaGFwZXMuY3V0cmVjdGFuZ2xlPXtyZW5kZXJlcjp0aGlzLG5hbWU6ImN1dC1yZWN0YW5nbGUiLGNvcm5lckxlbmd0aDpzRigpLHBvaW50czpyZCg0LDApLGRyYXc6ZnVuY3Rpb24oZyx4LFQsTCxJKXt0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwodGhpcy5uYW1lLGcseCxULEwsSSl9LGdlbmVyYXRlQ3V0VHJpYW5nbGVQdHM6ZnVuY3Rpb24oZyx4LFQsTCl7dmFyIEk9dGhpcy5jb3JuZXJMZW5ndGgsTz14LzIsJD1nLzIsej1ULSQsUz1UKyQsVj1MLU8sVT1MK087cmV0dXJue3RvcExlZnQ6W3osVitJLHorSSxWLHorSSxWK0ldLHRvcFJpZ2h0OltTLUksVixTLFYrSSxTLUksVitJXSxib3R0b21SaWdodDpbUyxVLUksUy1JLFUsUy1JLFUtSV0sYm90dG9tTGVmdDpbeitJLFUseixVLUkseitJLFUtSV19fSxpbnRlcnNlY3RMaW5lOmZ1bmN0aW9uKGcseCxULEwsSSxPLCQpe3ZhciB6PXRoaXMuZ2VuZXJhdGVDdXRUcmlhbmdsZVB0cyhUKzIqJCxMKzIqJCxnLHgpLFM9W10uY29uY2F0LmFwcGx5KFtdLFt6LnRvcExlZnQuc3BsaWNlKDAsNCksei50b3BSaWdodC5zcGxpY2UoMCw0KSx6LmJvdHRvbVJpZ2h0LnNwbGljZSgwLDQpLHouYm90dG9tTGVmdC5zcGxpY2UoMCw0KV0pO3JldHVybiB3ayhJLE8sUyxnLHgpfSxjaGVja1BvaW50OmZ1bmN0aW9uKGcseCxULEwsSSxPLCQpe2lmKGx2KGcseCx0aGlzLnBvaW50cyxPLCQsTCxJLTIqdGhpcy5jb3JuZXJMZW5ndGgsWzAsLTFdLFQpfHxsdihnLHgsdGhpcy5wb2ludHMsTywkLEwtMip0aGlzLmNvcm5lckxlbmd0aCxJLFswLC0xXSxUKSlyZXR1cm4hMDt2YXIgej10aGlzLmdlbmVyYXRlQ3V0VHJpYW5nbGVQdHMoTCxJLE8sJCk7cmV0dXJuIGpkKGcseCx6LnRvcExlZnQpfHxqZChnLHgsei50b3BSaWdodCl8fGpkKGcseCx6LmJvdHRvbVJpZ2h0KXx8amQoZyx4LHouYm90dG9tTGVmdCl9fX0sZHYuZ2VuZXJhdGVCYXJyZWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlU2hhcGVzLmJhcnJlbD17cmVuZGVyZXI6dGhpcyxuYW1lOiJiYXJyZWwiLHBvaW50czpyZCg0LDApLGRyYXc6ZnVuY3Rpb24oZyx4LFQsTCxJKXt0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwodGhpcy5uYW1lLGcseCxULEwsSSl9LGludGVyc2VjdExpbmU6ZnVuY3Rpb24oZyx4LFQsTCxJLE8sJCl7dmFyIHo9LjE1LFM9LjUsVj0uODUsVT10aGlzLmdlbmVyYXRlQmFycmVsQmV6aWVyUHRzKFQrMiokLEwrMiokLGcseCksZXQ9ZnVuY3Rpb24oZ3Qpe3ZhciBMdD1xNSh7eDpndFswXSx5Omd0WzFdfSx7eDpndFsyXSx5Omd0WzNdfSx7eDpndFs0XSx5Omd0WzVdfSx6KSxFdD1xNSh7eDpndFswXSx5Omd0WzFdfSx7eDpndFsyXSx5Omd0WzNdfSx7eDpndFs0XSx5Omd0WzVdfSxTKSxEdD1xNSh7eDpndFswXSx5Omd0WzFdfSx7eDpndFsyXSx5Omd0WzNdfSx7eDpndFs0XSx5Omd0WzVdfSxWKTtyZXR1cm5bZ3RbMF0sZ3RbMV0sTHQueCxMdC55LEV0LngsRXQueSxEdC54LER0LnksZ3RbNF0sZ3RbNV1dfSxhdD1bXS5jb25jYXQoZXQoVS50b3BMZWZ0KSxldChVLnRvcFJpZ2h0KSxldChVLmJvdHRvbVJpZ2h0KSxldChVLmJvdHRvbUxlZnQpKTtyZXR1cm4gd2soSSxPLGF0LGcseCl9LGdlbmVyYXRlQmFycmVsQmV6aWVyUHRzOmZ1bmN0aW9uKGcseCxULEwpe3ZhciBJPXgvMixPPWcvMiwkPVQtTyx6PVQrTyxTPUwtSSxWPUwrSSxVPVNMKGcseCksZXQ9VS5oZWlnaHRPZmZzZXQsYXQ9VS53aWR0aE9mZnNldCxsdD1VLmN0cmxQdE9mZnNldFBjdCpnLGd0PXt0b3BMZWZ0OlskLFMrZXQsJCtsdCxTLCQrYXQsU10sdG9wUmlnaHQ6W3otYXQsUyx6LWx0LFMseixTK2V0XSxib3R0b21SaWdodDpbeixWLWV0LHotbHQsVix6LWF0LFZdLGJvdHRvbUxlZnQ6WyQrYXQsViwkK2x0LFYsJCxWLWV0XX07cmV0dXJuIGd0LnRvcExlZnQuaXNUb3A9ITAsZ3QudG9wUmlnaHQuaXNUb3A9ITAsZ3QuYm90dG9tTGVmdC5pc0JvdHRvbT0hMCxndC5ib3R0b21SaWdodC5pc0JvdHRvbT0hMCxndH0sY2hlY2tQb2ludDpmdW5jdGlvbihnLHgsVCxMLEksTywkKXt2YXIgej1TTChMLEkpLFM9ei5oZWlnaHRPZmZzZXQsVj16LndpZHRoT2Zmc2V0O2lmKGx2KGcseCx0aGlzLnBvaW50cyxPLCQsTCxJLTIqUyxbMCwtMV0sVCl8fGx2KGcseCx0aGlzLnBvaW50cyxPLCQsTC0yKlYsSSxbMCwtMV0sVCkpcmV0dXJuITA7Zm9yKHZhciBVPXRoaXMuZ2VuZXJhdGVCYXJyZWxCZXppZXJQdHMoTCxJLE8sJCksZXQ9ZnVuY3Rpb24oSHQsaWUsVXQpe3ZhciBmZT1VdFs0XSxnZT1VdFsyXSxzZT1VdFswXSxOZT1VdFs1XSxwZT1VdFsxXSxnbj1NYXRoLm1pbihmZSxzZSksamU9TWF0aC5tYXgoZmUsc2UpLEdlPU1hdGgubWluKE5lLHBlKSx4bj1NYXRoLm1heChOZSxwZSk7aWYoZ248PUh0JiZIdDw9amUmJkdlPD1pZSYmaWU8PXhuKXt2YXIgRG49JFkoZmUsZ2Usc2UpLFhuPU9ZKERuWzBdLERuWzFdLERuWzJdLEh0KSxDbj1Ybi5maWx0ZXIoZnVuY3Rpb24oWW4pe3JldHVybiAwPD1ZbiYmWW48PTF9KTtpZihDbi5sZW5ndGg+MClyZXR1cm4gQ25bMF19cmV0dXJuIG51bGx9LGF0PU9iamVjdC5rZXlzKFUpLGx0PTA7bHQ8YXQubGVuZ3RoO2x0Kyspe3ZhciBndD1hdFtsdF0sTHQ9VVtndF0sRXQ9ZXQoZyx4LEx0KTtpZihFdCE9bnVsbCl7dmFyIER0PUx0WzVdLEl0PUx0WzNdLHp0PUx0WzFdLHRlPW9mKER0LEl0LHp0LEV0KTtpZihMdC5pc1RvcCYmdGU8PXh8fEx0LmlzQm90dG9tJiZ4PD10ZSlyZXR1cm4hMH19cmV0dXJuITF9fX0sZHYuZ2VuZXJhdGVCb3R0b21Sb3VuZHJlY3RhbmdsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVTaGFwZXNbImJvdHRvbS1yb3VuZC1yZWN0YW5nbGUiXT10aGlzLm5vZGVTaGFwZXMuYm90dG9tcm91bmRyZWN0YW5nbGU9e3JlbmRlcmVyOnRoaXMsbmFtZToiYm90dG9tLXJvdW5kLXJlY3RhbmdsZSIscG9pbnRzOnJkKDQsMCksZHJhdzpmdW5jdGlvbihnLHgsVCxMLEkpe3RoaXMucmVuZGVyZXIubm9kZVNoYXBlSW1wbCh0aGlzLm5hbWUsZyx4LFQsTCxJKX0saW50ZXJzZWN0TGluZTpmdW5jdGlvbihnLHgsVCxMLEksTywkKXt2YXIgej1nLShULzIrJCksUz14LShMLzIrJCksVj1TLFU9ZysoVC8yKyQpLGV0PXZtKEksTyxnLHgseixTLFUsViwhMSk7cmV0dXJuIGV0Lmxlbmd0aD4wP2V0OmVGKEksTyxnLHgsVCxMLCQpfSxjaGVja1BvaW50OmZ1bmN0aW9uKGcseCxULEwsSSxPLCQpe3ZhciB6PW1rKEwsSSksUz0yKno7aWYobHYoZyx4LHRoaXMucG9pbnRzLE8sJCxMLEktUyxbMCwtMV0sVCl8fGx2KGcseCx0aGlzLnBvaW50cyxPLCQsTC1TLEksWzAsLTFdLFQpKXJldHVybiEwO3ZhciBWPUwvMisyKlQsVT1JLzIrMipULGV0PVtPLVYsJC1VLE8tViwkLE8rViwkLE8rViwkLVVdO3JldHVybiEhKGpkKGcseCxldCl8fEMzKGcseCxTLFMsTytMLzIteiwkK0kvMi16LFQpfHxDMyhnLHgsUyxTLE8tTC8yK3osJCtJLzIteixUKSl9fX0sZHYucmVnaXN0ZXJOb2RlU2hhcGVzPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcy5ub2RlU2hhcGVzPXt9LGc9dGhpczt0aGlzLmdlbmVyYXRlRWxsaXBzZSgpLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJ0cmlhbmdsZSIscmQoMywwKSksdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigicm91bmQtdHJpYW5nbGUiLHJkKDMsMCkpLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJyZWN0YW5nbGUiLHJkKDQsMCkpLHkuc3F1YXJlPXkucmVjdGFuZ2xlLHRoaXMuZ2VuZXJhdGVSb3VuZFJlY3RhbmdsZSgpLHRoaXMuZ2VuZXJhdGVDdXRSZWN0YW5nbGUoKSx0aGlzLmdlbmVyYXRlQmFycmVsKCksdGhpcy5nZW5lcmF0ZUJvdHRvbVJvdW5kcmVjdGFuZ2xlKCk7e3ZhciB4PVswLDEsMSwwLDAsLTEsLTEsMF07dGhpcy5nZW5lcmF0ZVBvbHlnb24oImRpYW1vbmQiLHgpLHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oInJvdW5kLWRpYW1vbmQiLHgpfXRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJwZW50YWdvbiIscmQoNSwwKSksdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigicm91bmQtcGVudGFnb24iLHJkKDUsMCkpLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJoZXhhZ29uIixyZCg2LDApKSx0aGlzLmdlbmVyYXRlUm91bmRQb2x5Z29uKCJyb3VuZC1oZXhhZ29uIixyZCg2LDApKSx0aGlzLmdlbmVyYXRlUG9seWdvbigiaGVwdGFnb24iLHJkKDcsMCkpLHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oInJvdW5kLWhlcHRhZ29uIixyZCg3LDApKSx0aGlzLmdlbmVyYXRlUG9seWdvbigib2N0YWdvbiIscmQoOCwwKSksdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigicm91bmQtb2N0YWdvbiIscmQoOCwwKSk7dmFyIFQ9bmV3IEFycmF5KDIwKTt7dmFyIEw9X0woNSwwKSxJPV9MKDUsTWF0aC5QSS81KSxPPS41KigzLU1hdGguc3FydCg1KSk7Tyo9MS41Nztmb3IodmFyICQ9MDskPEkubGVuZ3RoLzI7JCsrKUlbJCoyXSo9TyxJWyQqMisxXSo9Tztmb3IodmFyICQ9MDskPDIwLzQ7JCsrKVRbJCo0XT1MWyQqMl0sVFskKjQrMV09TFskKjIrMV0sVFskKjQrMl09SVskKjJdLFRbJCo0KzNdPUlbJCoyKzFdfVQ9aUYoVCksdGhpcy5nZW5lcmF0ZVBvbHlnb24oInN0YXIiLFQpLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJ2ZWUiLFstMSwtMSwwLC0uMzMzLDEsLTEsMCwxXSksdGhpcy5nZW5lcmF0ZVBvbHlnb24oInJob21ib2lkIixbLTEsLTEsLjMzMywtMSwxLDEsLS4zMzMsMV0pLHRoaXMubm9kZVNoYXBlcy5jb25jYXZlaGV4YWdvbj10aGlzLmdlbmVyYXRlUG9seWdvbigiY29uY2F2ZS1oZXhhZ29uIixbLTEsLS45NSwtLjc1LDAsLTEsLjk1LDEsLjk1LC43NSwwLDEsLS45NV0pO3t2YXIgej1bLTEsLTEsLjI1LC0xLDEsMCwuMjUsMSwtMSwxXTt0aGlzLmdlbmVyYXRlUG9seWdvbigidGFnIix6KSx0aGlzLmdlbmVyYXRlUm91bmRQb2x5Z29uKCJyb3VuZC10YWciLHopfXkubWFrZVBvbHlnb249ZnVuY3Rpb24oUyl7dmFyIFY9Uy5qb2luKCIkIiksVT0icG9seWdvbi0iK1YsZXQ7cmV0dXJuKGV0PXRoaXNbVV0pP2V0OmcuZ2VuZXJhdGVQb2x5Z29uKFUsUyl9fTt2YXIgUms9e307UmsudGltZVRvUmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVkcmF3VG90YWxUaW1lL3RoaXMucmVkcmF3Q291bnR9LFJrLnJlZHJhdz1mdW5jdGlvbih5KXt5PXl8fEtQKCk7dmFyIGc9dGhpcztnLmF2ZXJhZ2VSZWRyYXdUaW1lPT09dm9pZCAwJiYoZy5hdmVyYWdlUmVkcmF3VGltZT0wKSxnLmxhc3RSZWRyYXdUaW1lPT09dm9pZCAwJiYoZy5sYXN0UmVkcmF3VGltZT0wKSxnLmxhc3REcmF3VGltZT09PXZvaWQgMCYmKGcubGFzdERyYXdUaW1lPTApLGcucmVxdWVzdGVkRnJhbWU9ITAsZy5yZW5kZXJPcHRpb25zPXl9LFJrLmJlZm9yZVJlbmRlcj1mdW5jdGlvbih5LGcpe2lmKCF0aGlzLmRlc3Ryb3llZCl7Zz09bnVsbCYmb3UoIlByaW9yaXR5IGlzIG5vdCBvcHRpb25hbCBmb3IgYmVmb3JlUmVuZGVyIik7dmFyIHg9dGhpcy5iZWZvcmVSZW5kZXJDYWxsYmFja3M7eC5wdXNoKHtmbjp5LHByaW9yaXR5Omd9KSx4LnNvcnQoZnVuY3Rpb24oVCxMKXtyZXR1cm4gTC5wcmlvcml0eS1ULnByaW9yaXR5fSl9fTt2YXIgR0I9ZnVuY3Rpb24oZyx4LFQpe2Zvcih2YXIgTD1nLmJlZm9yZVJlbmRlckNhbGxiYWNrcyxJPTA7STxMLmxlbmd0aDtJKyspTFtJXS5mbih4LFQpfTtSay5zdGFydFJlbmRlckxvb3A9ZnVuY3Rpb24oKXt2YXIgeT10aGlzLGc9eS5jeTtpZigheS5yZW5kZXJMb29wU3RhcnRlZCl7eS5yZW5kZXJMb29wU3RhcnRlZD0hMDt2YXIgeD1mdW5jdGlvbiBUKEwpe2lmKCF5LmRlc3Ryb3llZCl7aWYoIWcuYmF0Y2hpbmcoKSlpZih5LnJlcXVlc3RlZEZyYW1lJiYheS5za2lwRnJhbWUpe0dCKHksITAsTCk7dmFyIEk9bWUoKTt5LnJlbmRlcih5LnJlbmRlck9wdGlvbnMpO3ZhciBPPXkubGFzdERyYXdUaW1lPW1lKCk7eS5hdmVyYWdlUmVkcmF3VGltZT09PXZvaWQgMCYmKHkuYXZlcmFnZVJlZHJhd1RpbWU9Ty1JKSx5LnJlZHJhd0NvdW50PT09dm9pZCAwJiYoeS5yZWRyYXdDb3VudD0wKSx5LnJlZHJhd0NvdW50KysseS5yZWRyYXdUb3RhbFRpbWU9PT12b2lkIDAmJih5LnJlZHJhd1RvdGFsVGltZT0wKTt2YXIgJD1PLUk7eS5yZWRyYXdUb3RhbFRpbWUrPSQseS5sYXN0UmVkcmF3VGltZT0kLHkuYXZlcmFnZVJlZHJhd1RpbWU9eS5hdmVyYWdlUmVkcmF3VGltZS8yKyQvMix5LnJlcXVlc3RlZEZyYW1lPSExfWVsc2UgR0IoeSwhMSxMKTt5LnNraXBGcmFtZT0hMSxRYyhUKX19O1FjKHgpfX07dmFyIHJ0dD1mdW5jdGlvbihnKXt0aGlzLmluaXQoZyl9LFFMPXJ0dCxEMz1RTC5wcm90b3R5cGU7RDMuY2xpZW50RnVuY3Rpb25zPVsicmVkcmF3SGludCIsInJlbmRlciIsInJlbmRlclRvIiwibWF0Y2hDYW52YXNTaXplIiwibm9kZVNoYXBlSW1wbCIsImFycm93U2hhcGVJbXBsIl0sRDMuaW5pdD1mdW5jdGlvbih5KXt2YXIgZz10aGlzO2cub3B0aW9ucz15LGcuY3k9eS5jeTt2YXIgeD1nLmNvbnRhaW5lcj15LmN5LmNvbnRhaW5lcigpO2lmKFIpe3ZhciBUPVIuZG9jdW1lbnQsTD1ULmhlYWQsST0iX19fX19fX19fX2N5dG9zY2FwZV9zdHlsZXNoZWV0IixPPSJfX19fX19fX19fY3l0b3NjYXBlX2NvbnRhaW5lciIsJD1ULmdldEVsZW1lbnRCeUlkKEkpIT1udWxsO2lmKHguY2xhc3NOYW1lLmluZGV4T2YoTyk8MCYmKHguY2xhc3NOYW1lPSh4LmNsYXNzTmFtZXx8IiIpKyIgIitPKSwhJCl7dmFyIHo9VC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3ouaWQ9SSx6LmlubmVySFRNTD0iLiIrTysiIHsgcG9zaXRpb246IHJlbGF0aXZlOyB9IixMLmluc2VydEJlZm9yZSh6LEwuY2hpbGRyZW5bMF0pfXZhciBTPVIuZ2V0Q29tcHV0ZWRTdHlsZSh4KSxWPVMuZ2V0UHJvcGVydHlWYWx1ZSgicG9zaXRpb24iKTtWPT09InN0YXRpYyImJm5vKCJBIEN5dG9zY2FwZSBjb250YWluZXIgaGFzIHN0eWxlIHBvc2l0aW9uOnN0YXRpYyBhbmQgc28gY2FuIG5vdCB1c2UgVUkgZXh0ZW5zaW9ucyBwcm9wZXJseSIpfWcuc2VsZWN0aW9uPVt2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsMF0sZy5iZXppZXJQcm9qUGN0cz1bLjA1LC4yMjUsLjQsLjUsLjYsLjc3NSwuOTVdLGcuaG92ZXJEYXRhPXtkb3duOm51bGwsbGFzdDpudWxsLGRvd25UaW1lOm51bGwsdHJpZ2dlck1vZGU6bnVsbCxkcmFnZ2luZzohMSxpbml0aWFsUGFuOltudWxsLG51bGxdLGNhcHR1cmU6ITF9LGcuZHJhZ0RhdGE9e3Bvc3NpYmxlRHJhZ0VsZW1lbnRzOltdfSxnLnRvdWNoRGF0YT17c3RhcnQ6bnVsbCxjYXB0dXJlOiExLHN0YXJ0UG9zaXRpb246W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSxzaW5nbGVUb3VjaFN0YXJ0VGltZTpudWxsLHNpbmdsZVRvdWNoTW92ZWQ6ITAsbm93OltudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0sZWFybGllcjpbbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdfSxnLnJlZHJhd3M9MCxnLnNob3dGcHM9eS5zaG93RnBzLGcuZGVidWc9eS5kZWJ1ZyxnLmhpZGVFZGdlc09uVmlld3BvcnQ9eS5oaWRlRWRnZXNPblZpZXdwb3J0LGcudGV4dHVyZU9uVmlld3BvcnQ9eS50ZXh0dXJlT25WaWV3cG9ydCxnLndoZWVsU2Vuc2l0aXZpdHk9eS53aGVlbFNlbnNpdGl2aXR5LGcubW90aW9uQmx1ckVuYWJsZWQ9eS5tb3Rpb25CbHVyLGcuZm9yY2VkUGl4ZWxSYXRpbz1zdCh5LnBpeGVsUmF0aW8pP3kucGl4ZWxSYXRpbzpudWxsLGcubW90aW9uQmx1cj15Lm1vdGlvbkJsdXIsZy5tb3Rpb25CbHVyT3BhY2l0eT15Lm1vdGlvbkJsdXJPcGFjaXR5LGcubW90aW9uQmx1clRyYW5zcGFyZW5jeT0xLWcubW90aW9uQmx1ck9wYWNpdHksZy5tb3Rpb25CbHVyUHhSYXRpbz0xLGcubWJQeFJCbHVycnk9MSxnLm1pbk1iTG93UXVhbEZyYW1lcz00LGcuZnVsbFF1YWxpdHlNYj0hMSxnLmNsZWFyZWRGb3JNb3Rpb25CbHVyPVtdLGcuZGVza3RvcFRhcFRocmVzaG9sZD15LmRlc2t0b3BUYXBUaHJlc2hvbGQsZy5kZXNrdG9wVGFwVGhyZXNob2xkMj15LmRlc2t0b3BUYXBUaHJlc2hvbGQqeS5kZXNrdG9wVGFwVGhyZXNob2xkLGcudG91Y2hUYXBUaHJlc2hvbGQ9eS50b3VjaFRhcFRocmVzaG9sZCxnLnRvdWNoVGFwVGhyZXNob2xkMj15LnRvdWNoVGFwVGhyZXNob2xkKnkudG91Y2hUYXBUaHJlc2hvbGQsZy50YXBob2xkRHVyYXRpb249NTAwLGcuYmluZGluZ3M9W10sZy5iZWZvcmVSZW5kZXJDYWxsYmFja3M9W10sZy5iZWZvcmVSZW5kZXJQcmlvcml0aWVzPXthbmltYXRpb25zOjQwMCxlbGVDYWxjczozMDAsZWxlVHhyRGVxOjIwMCxseXJUeHJEZXE6MTUwLGx5clR4clNraXA6MTAwfSxnLnJlZ2lzdGVyTm9kZVNoYXBlcygpLGcucmVnaXN0ZXJBcnJvd1NoYXBlcygpLGcucmVnaXN0ZXJDYWxjdWxhdGlvbkxpc3RlbmVycygpfSxEMy5ub3RpZnk9ZnVuY3Rpb24oeSxnKXt2YXIgeD10aGlzLFQ9eC5jeTtpZighdGhpcy5kZXN0cm95ZWQpe2lmKHk9PT0iaW5pdCIpe3gubG9hZCgpO3JldHVybn1pZih5PT09ImRlc3Ryb3kiKXt4LmRlc3Ryb3koKTtyZXR1cm59KHk9PT0iYWRkInx8eT09PSJyZW1vdmUifHx5PT09Im1vdmUiJiZULmhhc0NvbXBvdW5kTm9kZXMoKXx8eT09PSJsb2FkInx8eT09PSJ6b3JkZXIifHx5PT09Im1vdW50IikmJnguaW52YWxpZGF0ZUNhY2hlZFpTb3J0ZWRFbGVzKCkseT09PSJ2aWV3cG9ydCImJngucmVkcmF3SGludCgic2VsZWN0IiwhMCksKHk9PT0ibG9hZCJ8fHk9PT0icmVzaXplInx8eT09PSJtb3VudCIpJiYoeC5pbnZhbGlkYXRlQ29udGFpbmVyQ2xpZW50Q29vcmRzQ2FjaGUoKSx4Lm1hdGNoQ2FudmFzU2l6ZSh4LmNvbnRhaW5lcikpLHgucmVkcmF3SGludCgiZWxlcyIsITApLHgucmVkcmF3SGludCgiZHJhZyIsITApLHRoaXMuc3RhcnRSZW5kZXJMb29wKCksdGhpcy5yZWRyYXcoKX19LEQzLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgeT10aGlzO3kuZGVzdHJveWVkPSEwLHkuY3kuc3RvcEFuaW1hdGlvbkxvb3AoKTtmb3IodmFyIGc9MDtnPHkuYmluZGluZ3MubGVuZ3RoO2crKyl7dmFyIHg9eS5iaW5kaW5nc1tnXSxUPXgsTD1ULnRhcmdldDsoTC5vZmZ8fEwucmVtb3ZlRXZlbnRMaXN0ZW5lcikuYXBwbHkoTCxULmFyZ3MpfWlmKHkuYmluZGluZ3M9W10seS5iZWZvcmVSZW5kZXJDYWxsYmFja3M9W10seS5vblVwZGF0ZUVsZUNhbGNzRm5zPVtdLHkucmVtb3ZlT2JzZXJ2ZXImJnkucmVtb3ZlT2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHkuc3R5bGVPYnNlcnZlciYmeS5zdHlsZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSx5LnJlc2l6ZU9ic2VydmVyJiZ5LnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSx5LmxhYmVsQ2FsY0Rpdil0cnl7ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh5LmxhYmVsQ2FsY0Rpdil9Y2F0Y2h7fX0sRDMuaXNIZWFkbGVzcz1mdW5jdGlvbigpe3JldHVybiExfSxbS0wsQmssVkIsYTYsZHYsUmtdLmZvckVhY2goZnVuY3Rpb24oeSl7Zm4oRDMseSl9KTt2YXIgWkw9MWUzLzYwLHZUPXtzZXR1cERlcXVldWVpbmc6ZnVuY3Rpb24oZyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIFQ9dGhpcyxMPXRoaXMucmVuZGVyZXI7aWYoIVQuZGVxdWV1ZWluZ1NldHVwKXtULmRlcXVldWVpbmdTZXR1cD0hMDt2YXIgST1vcyhmdW5jdGlvbigpe0wucmVkcmF3SGludCgiZWxlcyIsITApLEwucmVkcmF3SGludCgiZHJhZyIsITApLEwucmVkcmF3KCl9LGcuZGVxUmVkcmF3VGhyZXNob2xkKSxPPWZ1bmN0aW9uKFMsVil7dmFyIFU9bWUoKSxldD1MLmF2ZXJhZ2VSZWRyYXdUaW1lLGF0PUwubGFzdFJlZHJhd1RpbWUsbHQ9W10sZ3Q9TC5jeS5leHRlbnQoKSxMdD1MLmdldFBpeGVsUmF0aW8oKTtmb3IoU3x8TC5mbHVzaFJlbmRlcmVkU3R5bGVRdWV1ZSgpOzspe3ZhciBFdD1tZSgpLER0PUV0LVUsSXQ9RXQtVjtpZihhdDxaTCl7dmFyIHp0PVpMLShTP2V0OjApO2lmKEl0Pj1nLmRlcUZhc3RDb3N0Knp0KWJyZWFrfWVsc2UgaWYoUyl7aWYoRHQ+PWcuZGVxQ29zdCphdHx8RHQ+PWcuZGVxQXZnQ29zdCpldClicmVha31lbHNlIGlmKEl0Pj1nLmRlcU5vRHJhd0Nvc3QqWkwpYnJlYWs7dmFyIHRlPWcuZGVxKFQsTHQsZ3QpO2lmKHRlLmxlbmd0aD4wKWZvcih2YXIgWHQ9MDtYdDx0ZS5sZW5ndGg7WHQrKylsdC5wdXNoKHRlW1h0XSk7ZWxzZSBicmVha31sdC5sZW5ndGg+MCYmKGcub25EZXFkKFQsbHQpLCFTJiZnLnNob3VsZFJlZHJhdyhULGx0LEx0LGd0KSYmSSgpKX0sJD1nLnByaW9yaXR5fHxSNTtMLmJlZm9yZVJlbmRlcihPLCQoVCkpfX19fSxpdHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB5KGcpe3ZhciB4PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp1djtwKHRoaXMseSksdGhpcy5pZHNCeUtleT1uZXcgSGIsdGhpcy5rZXlGb3JJZD1uZXcgSGIsdGhpcy5jYWNoZXNCeUx2bD1uZXcgSGIsdGhpcy5sdmxzPVtdLHRoaXMuZ2V0S2V5PWcsdGhpcy5kb2VzRWxlSW52YWxpZGF0ZUtleT14fXJldHVybiBtKHksW3trZXk6ImdldElkc0ZvciIsdmFsdWU6ZnVuY3Rpb24oeCl7eD09bnVsbCYmb3UoIkNhbiBub3QgZ2V0IGlkIGxpc3QgZm9yIG51bGwga2V5Iik7dmFyIFQ9dGhpcy5pZHNCeUtleSxMPXRoaXMuaWRzQnlLZXkuZ2V0KHgpO3JldHVybiBMfHwoTD1uZXcgJDUsVC5zZXQoeCxMKSksTH19LHtrZXk6ImFkZElkRm9yS2V5Iix2YWx1ZTpmdW5jdGlvbih4LFQpe3ghPW51bGwmJnRoaXMuZ2V0SWRzRm9yKHgpLmFkZChUKX19LHtrZXk6ImRlbGV0ZUlkRm9yS2V5Iix2YWx1ZTpmdW5jdGlvbih4LFQpe3ghPW51bGwmJnRoaXMuZ2V0SWRzRm9yKHgpLmRlbGV0ZShUKX19LHtrZXk6ImdldE51bWJlck9mSWRzRm9yS2V5Iix2YWx1ZTpmdW5jdGlvbih4KXtyZXR1cm4geD09bnVsbD8wOnRoaXMuZ2V0SWRzRm9yKHgpLnNpemV9fSx7a2V5OiJ1cGRhdGVLZXlNYXBwaW5nRm9yIix2YWx1ZTpmdW5jdGlvbih4KXt2YXIgVD14LmlkKCksTD10aGlzLmtleUZvcklkLmdldChUKSxJPXRoaXMuZ2V0S2V5KHgpO3RoaXMuZGVsZXRlSWRGb3JLZXkoTCxUKSx0aGlzLmFkZElkRm9yS2V5KEksVCksdGhpcy5rZXlGb3JJZC5zZXQoVCxJKX19LHtrZXk6ImRlbGV0ZUtleU1hcHBpbmdGb3IiLHZhbHVlOmZ1bmN0aW9uKHgpe3ZhciBUPXguaWQoKSxMPXRoaXMua2V5Rm9ySWQuZ2V0KFQpO3RoaXMuZGVsZXRlSWRGb3JLZXkoTCxUKSx0aGlzLmtleUZvcklkLmRlbGV0ZShUKX19LHtrZXk6ImtleUhhc0NoYW5nZWRGb3IiLHZhbHVlOmZ1bmN0aW9uKHgpe3ZhciBUPXguaWQoKSxMPXRoaXMua2V5Rm9ySWQuZ2V0KFQpLEk9dGhpcy5nZXRLZXkoeCk7cmV0dXJuIEwhPT1JfX0se2tleToiaXNJbnZhbGlkIix2YWx1ZTpmdW5jdGlvbih4KXtyZXR1cm4gdGhpcy5rZXlIYXNDaGFuZ2VkRm9yKHgpfHx0aGlzLmRvZXNFbGVJbnZhbGlkYXRlS2V5KHgpfX0se2tleToiZ2V0Q2FjaGVzQXQiLHZhbHVlOmZ1bmN0aW9uKHgpe3ZhciBUPXRoaXMuY2FjaGVzQnlMdmwsTD10aGlzLmx2bHMsST1ULmdldCh4KTtyZXR1cm4gSXx8KEk9bmV3IEhiLFQuc2V0KHgsSSksTC5wdXNoKHgpKSxJfX0se2tleToiZ2V0Q2FjaGUiLHZhbHVlOmZ1bmN0aW9uKHgsVCl7cmV0dXJuIHRoaXMuZ2V0Q2FjaGVzQXQoVCkuZ2V0KHgpfX0se2tleToiZ2V0Iix2YWx1ZTpmdW5jdGlvbih4LFQpe3ZhciBMPXRoaXMuZ2V0S2V5KHgpLEk9dGhpcy5nZXRDYWNoZShMLFQpO3JldHVybiBJIT1udWxsJiZ0aGlzLnVwZGF0ZUtleU1hcHBpbmdGb3IoeCksSX19LHtrZXk6ImdldEZvckNhY2hlZEtleSIsdmFsdWU6ZnVuY3Rpb24oeCxUKXt2YXIgTD10aGlzLmtleUZvcklkLmdldCh4LmlkKCkpLEk9dGhpcy5nZXRDYWNoZShMLFQpO3JldHVybiBJfX0se2tleToiaGFzQ2FjaGUiLHZhbHVlOmZ1bmN0aW9uKHgsVCl7cmV0dXJuIHRoaXMuZ2V0Q2FjaGVzQXQoVCkuaGFzKHgpfX0se2tleToiaGFzIix2YWx1ZTpmdW5jdGlvbih4LFQpe3ZhciBMPXRoaXMuZ2V0S2V5KHgpO3JldHVybiB0aGlzLmhhc0NhY2hlKEwsVCl9fSx7a2V5OiJzZXRDYWNoZSIsdmFsdWU6ZnVuY3Rpb24oeCxULEwpe0wua2V5PXgsdGhpcy5nZXRDYWNoZXNBdChUKS5zZXQoeCxMKX19LHtrZXk6InNldCIsdmFsdWU6ZnVuY3Rpb24oeCxULEwpe3ZhciBJPXRoaXMuZ2V0S2V5KHgpO3RoaXMuc2V0Q2FjaGUoSSxULEwpLHRoaXMudXBkYXRlS2V5TWFwcGluZ0Zvcih4KX19LHtrZXk6ImRlbGV0ZUNhY2hlIix2YWx1ZTpmdW5jdGlvbih4LFQpe3RoaXMuZ2V0Q2FjaGVzQXQoVCkuZGVsZXRlKHgpfX0se2tleToiZGVsZXRlIix2YWx1ZTpmdW5jdGlvbih4LFQpe3ZhciBMPXRoaXMuZ2V0S2V5KHgpO3RoaXMuZGVsZXRlQ2FjaGUoTCxUKX19LHtrZXk6ImludmFsaWRhdGVLZXkiLHZhbHVlOmZ1bmN0aW9uKHgpe3ZhciBUPXRoaXM7dGhpcy5sdmxzLmZvckVhY2goZnVuY3Rpb24oTCl7cmV0dXJuIFQuZGVsZXRlQ2FjaGUoeCxMKX0pfX0se2tleToiaW52YWxpZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oeCl7dmFyIFQ9eC5pZCgpLEw9dGhpcy5rZXlGb3JJZC5nZXQoVCk7dGhpcy5kZWxldGVLZXlNYXBwaW5nRm9yKHgpO3ZhciBJPXRoaXMuZG9lc0VsZUludmFsaWRhdGVLZXkoeCk7cmV0dXJuIEkmJnRoaXMuaW52YWxpZGF0ZUtleShMKSxJfHx0aGlzLmdldE51bWJlck9mSWRzRm9yS2V5KEwpPT09MH19XSkseX0oKSx3VD0yNSxtVD01MCxvNj0tNCxKTD0zLHRNPTcuOTksc3R0PTgsYXR0PTEwMjQsb3R0PTEwMjQsVUI9MTAyNCxjdHQ9LjIsdXR0PS44LGx0dD0xMCxodHQ9LjE1LGZ0dD0uMSxkdHQ9LjksZ3R0PS45LHB0dD0xMDAsYnR0PTEsYzY9e2RlcXVldWU6ImRlcXVldWUiLGRvd25zY2FsZToiZG93bnNjYWxlIixoaWdoUXVhbGl0eToiaGlnaFF1YWxpdHkifSx2dHQ9emYoe2dldEtleTpudWxsLGRvZXNFbGVJbnZhbGlkYXRlS2V5OnV2LGRyYXdFbGVtZW50Om51bGwsZ2V0Qm91bmRpbmdCb3g6bnVsbCxnZXRSb3RhdGlvblBvaW50Om51bGwsZ2V0Um90YXRpb25PZmZzZXQ6bnVsbCxpc1Zpc2libGU6Y3YsYWxsb3dFZGdlVHhyQ2FjaGluZzohMCxhbGxvd1BhcmVudFR4ckNhY2hpbmc6ITB9KSxqaz1mdW5jdGlvbihnLHgpe3ZhciBUPXRoaXM7VC5yZW5kZXJlcj1nLFQub25EZXF1ZXVlcz1bXTt2YXIgTD12dHQoeCk7Zm4oVCxMKSxULmxvb2t1cD1uZXcgaXR0KEwuZ2V0S2V5LEwuZG9lc0VsZUludmFsaWRhdGVLZXkpLFQuc2V0dXBEZXF1ZXVlaW5nKCl9LENoPWprLnByb3RvdHlwZTtDaC5yZWFzb25zPWM2LENoLmdldFRleHR1cmVRdWV1ZT1mdW5jdGlvbih5KXt2YXIgZz10aGlzO3JldHVybiBnLmVsZUltZ0NhY2hlcz1nLmVsZUltZ0NhY2hlc3x8e30sZy5lbGVJbWdDYWNoZXNbeV09Zy5lbGVJbWdDYWNoZXNbeV18fFtdfSxDaC5nZXRSZXRpcmVkVGV4dHVyZVF1ZXVlPWZ1bmN0aW9uKHkpe3ZhciBnPXRoaXMseD1nLmVsZUltZ0NhY2hlcy5yZXRpcmVkPWcuZWxlSW1nQ2FjaGVzLnJldGlyZWR8fHt9LFQ9eFt5XT14W3ldfHxbXTtyZXR1cm4gVH0sQ2guZ2V0RWxlbWVudFF1ZXVlPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcyxnPXkuZWxlQ2FjaGVRdWV1ZT15LmVsZUNhY2hlUXVldWV8fG5ldyBwayhmdW5jdGlvbih4LFQpe3JldHVybiBULnJlcXMteC5yZXFzfSk7cmV0dXJuIGd9LENoLmdldEVsZW1lbnRLZXlUb1F1ZXVlPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcyxnPXkuZWxlS2V5VG9DYWNoZVF1ZXVlPXkuZWxlS2V5VG9DYWNoZVF1ZXVlfHx7fTtyZXR1cm4gZ30sQ2guZ2V0RWxlbWVudD1mdW5jdGlvbih5LGcseCxULEwpe3ZhciBJPXRoaXMsTz10aGlzLnJlbmRlcmVyLCQ9Ty5jeS56b29tKCksej10aGlzLmxvb2t1cDtpZighZ3x8Zy53PT09MHx8Zy5oPT09MHx8aXNOYU4oZy53KXx8aXNOYU4oZy5oKXx8IXkudmlzaWJsZSgpfHx5LnJlbW92ZWQoKXx8IUkuYWxsb3dFZGdlVHhyQ2FjaGluZyYmeS5pc0VkZ2UoKXx8IUkuYWxsb3dQYXJlbnRUeHJDYWNoaW5nJiZ5LmlzUGFyZW50KCkpcmV0dXJuIG51bGw7aWYoVD09bnVsbCYmKFQ9TWF0aC5jZWlsKHhMKCQqeCkpKSxUPG82KVQ9bzY7ZWxzZSBpZigkPj10TXx8VD5KTClyZXR1cm4gbnVsbDt2YXIgUz1NYXRoLnBvdygyLFQpLFY9Zy5oKlMsVT1nLncqUyxldD1PLmVsZVRleHRCaWdnZXJUaGFuTWluKHksUyk7aWYoIXRoaXMuaXNWaXNpYmxlKHksZXQpKXJldHVybiBudWxsO3ZhciBhdD16LmdldCh5LFQpO2lmKGF0JiZhdC5pbnZhbGlkYXRlZCYmKGF0LmludmFsaWRhdGVkPSExLGF0LnRleHR1cmUuaW52YWxpZGF0ZWRXaWR0aC09YXQud2lkdGgpLGF0KXJldHVybiBhdDt2YXIgbHQ7aWYoVjw9d1Q/bHQ9d1Q6Vjw9bVQ/bHQ9bVQ6bHQ9TWF0aC5jZWlsKFYvbVQpKm1ULFY+VUJ8fFU+b3R0KXJldHVybiBudWxsO3ZhciBndD1JLmdldFRleHR1cmVRdWV1ZShsdCksTHQ9Z3RbZ3QubGVuZ3RoLTJdLEV0PWZ1bmN0aW9uKCl7cmV0dXJuIEkucmVjeWNsZVRleHR1cmUobHQsVSl8fEkuYWRkVGV4dHVyZShsdCxVKX07THR8fChMdD1ndFtndC5sZW5ndGgtMV0pLEx0fHwoTHQ9RXQoKSksTHQud2lkdGgtTHQudXNlZFdpZHRoPFUmJihMdD1FdCgpKTtmb3IodmFyIER0PWZ1bmN0aW9uKGplKXtyZXR1cm4gamUmJmplLnNjYWxlZExhYmVsU2hvd249PT1ldH0sSXQ9TCYmTD09PWM2LmRlcXVldWUsenQ9TCYmTD09PWM2LmhpZ2hRdWFsaXR5LHRlPUwmJkw9PT1jNi5kb3duc2NhbGUsWHQsSHQ9VCsxO0h0PD1KTDtIdCsrKXt2YXIgaWU9ei5nZXQoeSxIdCk7aWYoaWUpe1h0PWllO2JyZWFrfX12YXIgVXQ9WHQmJlh0LmxldmVsPT09VCsxP1h0Om51bGwsZmU9ZnVuY3Rpb24oKXtMdC5jb250ZXh0LmRyYXdJbWFnZShVdC50ZXh0dXJlLmNhbnZhcyxVdC54LDAsVXQud2lkdGgsVXQuaGVpZ2h0LEx0LnVzZWRXaWR0aCwwLFUsVil9O2lmKEx0LmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxMdC5jb250ZXh0LmNsZWFyUmVjdChMdC51c2VkV2lkdGgsMCxVLGx0KSxEdChVdCkpZmUoKTtlbHNlIGlmKER0KFh0KSlpZih6dCl7Zm9yKHZhciBnZT1YdC5sZXZlbDtnZT5UO2dlLS0pVXQ9SS5nZXRFbGVtZW50KHksZyx4LGdlLGM2LmRvd25zY2FsZSk7ZmUoKX1lbHNlIHJldHVybiBJLnF1ZXVlRWxlbWVudCh5LFh0LmxldmVsLTEpLFh0O2Vsc2V7dmFyIHNlO2lmKCFJdCYmIXp0JiYhdGUpZm9yKHZhciBOZT1ULTE7TmU+PW82O05lLS0pe3ZhciBwZT16LmdldCh5LE5lKTtpZihwZSl7c2U9cGU7YnJlYWt9fWlmKER0KHNlKSlyZXR1cm4gSS5xdWV1ZUVsZW1lbnQoeSxUKSxzZTtMdC5jb250ZXh0LnRyYW5zbGF0ZShMdC51c2VkV2lkdGgsMCksTHQuY29udGV4dC5zY2FsZShTLFMpLHRoaXMuZHJhd0VsZW1lbnQoTHQuY29udGV4dCx5LGcsZXQsITEpLEx0LmNvbnRleHQuc2NhbGUoMS9TLDEvUyksTHQuY29udGV4dC50cmFuc2xhdGUoLUx0LnVzZWRXaWR0aCwwKX1yZXR1cm4gYXQ9e3g6THQudXNlZFdpZHRoLHRleHR1cmU6THQsbGV2ZWw6VCxzY2FsZTpTLHdpZHRoOlUsaGVpZ2h0OlYsc2NhbGVkTGFiZWxTaG93bjpldH0sTHQudXNlZFdpZHRoKz1NYXRoLmNlaWwoVStzdHQpLEx0LmVsZUNhY2hlcy5wdXNoKGF0KSx6LnNldCh5LFQsYXQpLEkuY2hlY2tUZXh0dXJlRnVsbG5lc3MoTHQpLGF0fSxDaC5pbnZhbGlkYXRlRWxlbWVudHM9ZnVuY3Rpb24oeSl7Zm9yKHZhciBnPTA7Zzx5Lmxlbmd0aDtnKyspdGhpcy5pbnZhbGlkYXRlRWxlbWVudCh5W2ddKX0sQ2guaW52YWxpZGF0ZUVsZW1lbnQ9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcyx4PWcubG9va3VwLFQ9W10sTD14LmlzSW52YWxpZCh5KTtpZihMKXtmb3IodmFyIEk9bzY7STw9Skw7SSsrKXt2YXIgTz14LmdldEZvckNhY2hlZEtleSh5LEkpO08mJlQucHVzaChPKX12YXIgJD14LmludmFsaWRhdGUoeSk7aWYoJClmb3IodmFyIHo9MDt6PFQubGVuZ3RoO3orKyl7dmFyIFM9VFt6XSxWPVMudGV4dHVyZTtWLmludmFsaWRhdGVkV2lkdGgrPVMud2lkdGgsUy5pbnZhbGlkYXRlZD0hMCxnLmNoZWNrVGV4dHVyZVV0aWxpdHkoVil9Zy5yZW1vdmVGcm9tUXVldWUoeSl9fSxDaC5jaGVja1RleHR1cmVVdGlsaXR5PWZ1bmN0aW9uKHkpe3kuaW52YWxpZGF0ZWRXaWR0aD49Y3R0Knkud2lkdGgmJnRoaXMucmV0aXJlVGV4dHVyZSh5KX0sQ2guY2hlY2tUZXh0dXJlRnVsbG5lc3M9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcyx4PWcuZ2V0VGV4dHVyZVF1ZXVlKHkuaGVpZ2h0KTt5LnVzZWRXaWR0aC95LndpZHRoPnV0dCYmeS5mdWxsbmVzc0NoZWNrcz49bHR0P3BtKHgseSk6eS5mdWxsbmVzc0NoZWNrcysrfSxDaC5yZXRpcmVUZXh0dXJlPWZ1bmN0aW9uKHkpe3ZhciBnPXRoaXMseD15LmhlaWdodCxUPWcuZ2V0VGV4dHVyZVF1ZXVlKHgpLEw9dGhpcy5sb29rdXA7cG0oVCx5KSx5LnJldGlyZWQ9ITA7Zm9yKHZhciBJPXkuZWxlQ2FjaGVzLE89MDtPPEkubGVuZ3RoO08rKyl7dmFyICQ9SVtPXTtMLmRlbGV0ZUNhY2hlKCQua2V5LCQubGV2ZWwpfW1MKEkpO3ZhciB6PWcuZ2V0UmV0aXJlZFRleHR1cmVRdWV1ZSh4KTt6LnB1c2goeSl9LENoLmFkZFRleHR1cmU9ZnVuY3Rpb24oeSxnKXt2YXIgeD10aGlzLFQ9eC5nZXRUZXh0dXJlUXVldWUoeSksTD17fTtyZXR1cm4gVC5wdXNoKEwpLEwuZWxlQ2FjaGVzPVtdLEwuaGVpZ2h0PXksTC53aWR0aD1NYXRoLm1heChhdHQsZyksTC51c2VkV2lkdGg9MCxMLmludmFsaWRhdGVkV2lkdGg9MCxMLmZ1bGxuZXNzQ2hlY2tzPTAsTC5jYW52YXM9eC5yZW5kZXJlci5tYWtlT2Zmc2NyZWVuQ2FudmFzKEwud2lkdGgsTC5oZWlnaHQpLEwuY29udGV4dD1MLmNhbnZhcy5nZXRDb250ZXh0KCIyZCIpLEx9LENoLnJlY3ljbGVUZXh0dXJlPWZ1bmN0aW9uKHksZyl7Zm9yKHZhciB4PXRoaXMsVD14LmdldFRleHR1cmVRdWV1ZSh5KSxMPXguZ2V0UmV0aXJlZFRleHR1cmVRdWV1ZSh5KSxJPTA7STxMLmxlbmd0aDtJKyspe3ZhciBPPUxbSV07aWYoTy53aWR0aD49ZylyZXR1cm4gTy5yZXRpcmVkPSExLE8udXNlZFdpZHRoPTAsTy5pbnZhbGlkYXRlZFdpZHRoPTAsTy5mdWxsbmVzc0NoZWNrcz0wLG1MKE8uZWxlQ2FjaGVzKSxPLmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxPLmNvbnRleHQuY2xlYXJSZWN0KDAsMCxPLndpZHRoLE8uaGVpZ2h0KSxwbShMLE8pLFQucHVzaChPKSxPfX0sQ2gucXVldWVFbGVtZW50PWZ1bmN0aW9uKHksZyl7dmFyIHg9dGhpcyxUPXguZ2V0RWxlbWVudFF1ZXVlKCksTD14LmdldEVsZW1lbnRLZXlUb1F1ZXVlKCksST10aGlzLmdldEtleSh5KSxPPUxbSV07aWYoTylPLmxldmVsPU1hdGgubWF4KE8ubGV2ZWwsZyksTy5lbGVzLm1lcmdlKHkpLE8ucmVxcysrLFQudXBkYXRlSXRlbShPKTtlbHNle3ZhciAkPXtlbGVzOnkuc3Bhd24oKS5tZXJnZSh5KSxsZXZlbDpnLHJlcXM6MSxrZXk6SX07VC5wdXNoKCQpLExbSV09JH19LENoLmRlcXVldWU9ZnVuY3Rpb24oeSl7Zm9yKHZhciBnPXRoaXMseD1nLmdldEVsZW1lbnRRdWV1ZSgpLFQ9Zy5nZXRFbGVtZW50S2V5VG9RdWV1ZSgpLEw9W10sST1nLmxvb2t1cCxPPTA7TzxidHQmJnguc2l6ZSgpPjA7TysrKXt2YXIgJD14LnBvcCgpLHo9JC5rZXksUz0kLmVsZXNbMF0sVj1JLmhhc0NhY2hlKFMsJC5sZXZlbCk7aWYoVFt6XT1udWxsLFYpY29udGludWU7TC5wdXNoKCQpO3ZhciBVPWcuZ2V0Qm91bmRpbmdCb3goUyk7Zy5nZXRFbGVtZW50KFMsVSx5LCQubGV2ZWwsYzYuZGVxdWV1ZSl9cmV0dXJuIEx9LENoLnJlbW92ZUZyb21RdWV1ZT1mdW5jdGlvbih5KXt2YXIgZz10aGlzLHg9Zy5nZXRFbGVtZW50UXVldWUoKSxUPWcuZ2V0RWxlbWVudEtleVRvUXVldWUoKSxMPXRoaXMuZ2V0S2V5KHkpLEk9VFtMXTtJIT1udWxsJiYoSS5lbGVzLmxlbmd0aD09PTE/KEkucmVxcz1FMyx4LnVwZGF0ZUl0ZW0oSSkseC5wb3AoKSxUW0xdPW51bGwpOkkuZWxlcy51bm1lcmdlKHkpKX0sQ2gub25EZXF1ZXVlPWZ1bmN0aW9uKHkpe3RoaXMub25EZXF1ZXVlcy5wdXNoKHkpfSxDaC5vZmZEZXF1ZXVlPWZ1bmN0aW9uKHkpe3BtKHRoaXMub25EZXF1ZXVlcyx5KX0sQ2guc2V0dXBEZXF1ZXVlaW5nPXZULnNldHVwRGVxdWV1ZWluZyh7ZGVxUmVkcmF3VGhyZXNob2xkOnB0dCxkZXFDb3N0Omh0dCxkZXFBdmdDb3N0OmZ0dCxkZXFOb0RyYXdDb3N0OmR0dCxkZXFGYXN0Q29zdDpndHQsZGVxOmZ1bmN0aW9uKGcseCxUKXtyZXR1cm4gZy5kZXF1ZXVlKHgsVCl9LG9uRGVxZDpmdW5jdGlvbihnLHgpe2Zvcih2YXIgVD0wO1Q8Zy5vbkRlcXVldWVzLmxlbmd0aDtUKyspe3ZhciBMPWcub25EZXF1ZXVlc1tUXTtMKHgpfX0sc2hvdWxkUmVkcmF3OmZ1bmN0aW9uKGcseCxULEwpe2Zvcih2YXIgST0wO0k8eC5sZW5ndGg7SSsrKWZvcih2YXIgTz14W0ldLmVsZXMsJD0wOyQ8Ty5sZW5ndGg7JCsrKXt2YXIgej1PWyRdLmJvdW5kaW5nQm94KCk7aWYoRUwoeixMKSlyZXR1cm4hMH1yZXR1cm4hMX0scHJpb3JpdHk6ZnVuY3Rpb24oZyl7cmV0dXJuIGcucmVuZGVyZXIuYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5lbGVUeHJEZXF9fSk7dmFyIHd0dD0xLHU2PS00LCRrPTIseVQ9My45OSx6az01MCx5Zz01MCxtdHQ9LjE1LFpndD0uMSxKZ3Q9LjksdHB0PS45LGVwdD0xLGVNPTI1MCxucHQ9NGUzKjRlMyxycHQ9ITAseXR0PWZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMsVD14LnJlbmRlcmVyPWcsTD1ULmN5O3gubGF5ZXJzQnlMZXZlbD17fSx4LmZpcnN0R2V0PSEwLHgubGFzdEludmFsaWRhdGlvblRpbWU9bWUoKS0yKmVNLHguc2tpcHBpbmc9ITEseC5lbGVUeHJEZXFzPUwuY29sbGVjdGlvbigpLHguc2NoZWR1bGVFbGVtZW50UmVmaW5lbWVudD1vcyhmdW5jdGlvbigpe3gucmVmaW5lRWxlbWVudFRleHR1cmVzKHguZWxlVHhyRGVxcykseC5lbGVUeHJEZXFzLnVubWVyZ2UoeC5lbGVUeHJEZXFzKX0seWcpLFQuYmVmb3JlUmVuZGVyKGZ1bmN0aW9uKE8sJCl7JC14Lmxhc3RJbnZhbGlkYXRpb25UaW1lPD1lTT94LnNraXBwaW5nPSEwOnguc2tpcHBpbmc9ITF9LFQuYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5seXJUeHJTa2lwKTt2YXIgST1mdW5jdGlvbigkLHope3JldHVybiB6LnJlcXMtJC5yZXFzfTt4LmxheWVyc1F1ZXVlPW5ldyBwayhJKSx4LnNldHVwRGVxdWV1ZWluZygpfSx3MT15dHQucHJvdG90eXBlLHh0dD0wLGlwdD1NYXRoLnBvdygyLDUzKS0xO3cxLm1ha2VMYXllcj1mdW5jdGlvbih5LGcpe3ZhciB4PU1hdGgucG93KDIsZyksVD1NYXRoLmNlaWwoeS53KngpLEw9TWF0aC5jZWlsKHkuaCp4KSxJPXRoaXMucmVuZGVyZXIubWFrZU9mZnNjcmVlbkNhbnZhcyhULEwpLE89e2lkOnh0dD0rK3h0dCVpcHQsYmI6eSxsZXZlbDpnLHdpZHRoOlQsaGVpZ2h0OkwsY2FudmFzOkksY29udGV4dDpJLmdldENvbnRleHQoIjJkIiksZWxlczpbXSxlbGVzUXVldWU6W10scmVxczowfSwkPU8uY29udGV4dCx6PS1PLmJiLngxLFM9LU8uYmIueTE7cmV0dXJuICQuc2NhbGUoeCx4KSwkLnRyYW5zbGF0ZSh6LFMpLE99LHcxLmdldExheWVycz1mdW5jdGlvbih5LGcseCl7dmFyIFQ9dGhpcyxMPVQucmVuZGVyZXIsST1MLmN5LE89SS56b29tKCksJD1ULmZpcnN0R2V0O2lmKFQuZmlyc3RHZXQ9ITEseD09bnVsbCl7aWYoeD1NYXRoLmNlaWwoeEwoTypnKSkseDx1Nil4PXU2O2Vsc2UgaWYoTz49eVR8fHg+JGspcmV0dXJuIG51bGx9VC52YWxpZGF0ZUxheWVyc0VsZXNPcmRlcmluZyh4LHkpO3ZhciB6PVQubGF5ZXJzQnlMZXZlbCxTPU1hdGgucG93KDIseCksVj16W3hdPXpbeF18fFtdLFUsZXQ9VC5sZXZlbElzQ29tcGxldGUoeCx5KSxhdCxsdD1mdW5jdGlvbigpe3ZhciBmZT1mdW5jdGlvbihnbil7aWYoVC52YWxpZGF0ZUxheWVyc0VsZXNPcmRlcmluZyhnbix5KSxULmxldmVsSXNDb21wbGV0ZShnbix5KSlyZXR1cm4gYXQ9eltnbl0sITB9LGdlPWZ1bmN0aW9uKGduKXtpZighYXQpZm9yKHZhciBqZT14K2duO3U2PD1qZSYmamU8PSRrJiYhZmUoamUpO2plKz1nbik7fTtnZSgxKSxnZSgtMSk7Zm9yKHZhciBzZT1WLmxlbmd0aC0xO3NlPj0wO3NlLS0pe3ZhciBOZT1WW3NlXTtOZS5pbnZhbGlkJiZwbShWLE5lKX19O2lmKCFldClsdCgpO2Vsc2UgcmV0dXJuIFY7dmFyIGd0PWZ1bmN0aW9uKCl7aWYoIVUpe1U9UmQoKTtmb3IodmFyIGZlPTA7ZmU8eS5sZW5ndGg7ZmUrKylBWShVLHlbZmVdLmJvdW5kaW5nQm94KCkpfXJldHVybiBVfSxMdD1mdW5jdGlvbihmZSl7ZmU9ZmV8fHt9O3ZhciBnZT1mZS5hZnRlcjtndCgpO3ZhciBzZT1VLncqUyooVS5oKlMpO2lmKHNlPm5wdClyZXR1cm4gbnVsbDt2YXIgTmU9VC5tYWtlTGF5ZXIoVSx4KTtpZihnZSE9bnVsbCl7dmFyIHBlPVYuaW5kZXhPZihnZSkrMTtWLnNwbGljZShwZSwwLE5lKX1lbHNlKGZlLmluc2VydD09PXZvaWQgMHx8ZmUuaW5zZXJ0KSYmVi51bnNoaWZ0KE5lKTtyZXR1cm4gTmV9O2lmKFQuc2tpcHBpbmcmJiEkKXJldHVybiBudWxsO2Zvcih2YXIgRXQ9bnVsbCxEdD15Lmxlbmd0aC93dHQsSXQ9ISQsenQ9MDt6dDx5Lmxlbmd0aDt6dCsrKXt2YXIgdGU9eVt6dF0sWHQ9dGUuX3ByaXZhdGUucnNjcmF0Y2gsSHQ9WHQuaW1nTGF5ZXJDYWNoZXM9WHQuaW1nTGF5ZXJDYWNoZXN8fHt9LGllPUh0W3hdO2lmKGllKXtFdD1pZTtjb250aW51ZX1pZigoIUV0fHxFdC5lbGVzLmxlbmd0aD49RHR8fCF0RihFdC5iYix0ZS5ib3VuZGluZ0JveCgpKSkmJihFdD1MdCh7aW5zZXJ0OiEwLGFmdGVyOkV0fSksIUV0KSlyZXR1cm4gbnVsbDthdHx8SXQ/VC5xdWV1ZUxheWVyKEV0LHRlKTpULmRyYXdFbGVJbkxheWVyKEV0LHRlLHgsZyksRXQuZWxlcy5wdXNoKHRlKSxIdFt4XT1FdH1yZXR1cm4gYXR8fChJdD9udWxsOlYpfSx3MS5nZXRFbGVMZXZlbEZvckxheWVyTGV2ZWw9ZnVuY3Rpb24oeSxnKXtyZXR1cm4geX0sdzEuZHJhd0VsZUluTGF5ZXI9ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEw9dGhpcyxJPXRoaXMucmVuZGVyZXIsTz15LmNvbnRleHQsJD1nLmJvdW5kaW5nQm94KCk7JC53PT09MHx8JC5oPT09MHx8IWcudmlzaWJsZSgpfHwoeD1MLmdldEVsZUxldmVsRm9yTGF5ZXJMZXZlbCh4LFQpLEkuc2V0SW1nU21vb3RoaW5nKE8sITEpLEkuZHJhd0NhY2hlZEVsZW1lbnQoTyxnLG51bGwsbnVsbCx4LHJwdCksSS5zZXRJbWdTbW9vdGhpbmcoTywhMCkpfSx3MS5sZXZlbElzQ29tcGxldGU9ZnVuY3Rpb24oeSxnKXt2YXIgeD10aGlzLFQ9eC5sYXllcnNCeUxldmVsW3ldO2lmKCFUfHxULmxlbmd0aD09PTApcmV0dXJuITE7Zm9yKHZhciBMPTAsST0wO0k8VC5sZW5ndGg7SSsrKXt2YXIgTz1UW0ldO2lmKE8ucmVxcz4wfHxPLmludmFsaWQpcmV0dXJuITE7TCs9Ty5lbGVzLmxlbmd0aH1yZXR1cm4gTD09PWcubGVuZ3RofSx3MS52YWxpZGF0ZUxheWVyc0VsZXNPcmRlcmluZz1mdW5jdGlvbih5LGcpe3ZhciB4PXRoaXMubGF5ZXJzQnlMZXZlbFt5XTtpZih4KWZvcih2YXIgVD0wO1Q8eC5sZW5ndGg7VCsrKXtmb3IodmFyIEw9eFtUXSxJPS0xLE89MDtPPGcubGVuZ3RoO08rKylpZihMLmVsZXNbMF09PT1nW09dKXtJPU87YnJlYWt9aWYoSTwwKXt0aGlzLmludmFsaWRhdGVMYXllcihMKTtjb250aW51ZX1mb3IodmFyICQ9SSxPPTA7TzxMLmVsZXMubGVuZ3RoO08rKylpZihMLmVsZXNbT10hPT1nWyQrT10pe3RoaXMuaW52YWxpZGF0ZUxheWVyKEwpO2JyZWFrfX19LHcxLnVwZGF0ZUVsZW1lbnRzSW5MYXllcnM9ZnVuY3Rpb24oeSxnKXtmb3IodmFyIHg9dGhpcyxUPUN0KHlbMF0pLEw9MDtMPHkubGVuZ3RoO0wrKylmb3IodmFyIEk9VD9udWxsOnlbTF0sTz1UP3lbTF06eVtMXS5lbGUsJD1PLl9wcml2YXRlLnJzY3JhdGNoLHo9JC5pbWdMYXllckNhY2hlcz0kLmltZ0xheWVyQ2FjaGVzfHx7fSxTPXU2O1M8PSRrO1MrKyl7dmFyIFY9eltTXTtWJiYoSSYmeC5nZXRFbGVMZXZlbEZvckxheWVyTGV2ZWwoVi5sZXZlbCkhPT1JLmxldmVsfHxnKFYsTyxJKSl9fSx3MS5oYXZlTGF5ZXJzPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PXRoaXMsZz0hMSx4PXU2O3g8PSRrO3grKyl7dmFyIFQ9eS5sYXllcnNCeUxldmVsW3hdO2lmKFQmJlQubGVuZ3RoPjApe2c9ITA7YnJlYWt9fXJldHVybiBnfSx3MS5pbnZhbGlkYXRlRWxlbWVudHM9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpczt5Lmxlbmd0aCE9PTAmJihnLmxhc3RJbnZhbGlkYXRpb25UaW1lPW1lKCksISh5Lmxlbmd0aD09PTB8fCFnLmhhdmVMYXllcnMoKSkmJmcudXBkYXRlRWxlbWVudHNJbkxheWVycyh5LGZ1bmN0aW9uKFQsTCxJKXtnLmludmFsaWRhdGVMYXllcihUKX0pKX0sdzEuaW52YWxpZGF0ZUxheWVyPWZ1bmN0aW9uKHkpe2lmKHRoaXMubGFzdEludmFsaWRhdGlvblRpbWU9bWUoKSwheS5pbnZhbGlkKXt2YXIgZz15LmxldmVsLHg9eS5lbGVzLFQ9dGhpcy5sYXllcnNCeUxldmVsW2ddO3BtKFQseSkseS5lbGVzUXVldWU9W10seS5pbnZhbGlkPSEwLHkucmVwbGFjZW1lbnQmJih5LnJlcGxhY2VtZW50LmludmFsaWQ9ITApO2Zvcih2YXIgTD0wO0w8eC5sZW5ndGg7TCsrKXt2YXIgST14W0xdLl9wcml2YXRlLnJzY3JhdGNoLmltZ0xheWVyQ2FjaGVzO0kmJihJW2ddPW51bGwpfX19LHcxLnJlZmluZUVsZW1lbnRUZXh0dXJlcz1mdW5jdGlvbih5KXt2YXIgZz10aGlzO2cudXBkYXRlRWxlbWVudHNJbkxheWVycyh5LGZ1bmN0aW9uKFQsTCxJKXt2YXIgTz1ULnJlcGxhY2VtZW50O2lmKE98fChPPVQucmVwbGFjZW1lbnQ9Zy5tYWtlTGF5ZXIoVC5iYixULmxldmVsKSxPLnJlcGxhY2VzPVQsTy5lbGVzPVQuZWxlcyksIU8ucmVxcylmb3IodmFyICQ9MDskPE8uZWxlcy5sZW5ndGg7JCsrKWcucXVldWVMYXllcihPLE8uZWxlc1skXSl9KX0sdzEuZW5xdWV1ZUVsZW1lbnRSZWZpbmVtZW50PWZ1bmN0aW9uKHkpe3RoaXMuZWxlVHhyRGVxcy5tZXJnZSh5KSx0aGlzLnNjaGVkdWxlRWxlbWVudFJlZmluZW1lbnQoKX0sdzEucXVldWVMYXllcj1mdW5jdGlvbih5LGcpe3ZhciB4PXRoaXMsVD14LmxheWVyc1F1ZXVlLEw9eS5lbGVzUXVldWUsST1MLmhhc0lkPUwuaGFzSWR8fHt9O2lmKCF5LnJlcGxhY2VtZW50KXtpZihnKXtpZihJW2cuaWQoKV0pcmV0dXJuO0wucHVzaChnKSxJW2cuaWQoKV09ITB9eS5yZXFzPyh5LnJlcXMrKyxULnVwZGF0ZUl0ZW0oeSkpOih5LnJlcXM9MSxULnB1c2goeSkpfX0sdzEuZGVxdWV1ZT1mdW5jdGlvbih5KXtmb3IodmFyIGc9dGhpcyx4PWcubGF5ZXJzUXVldWUsVD1bXSxMPTA7TDxlcHQmJnguc2l6ZSgpIT09MDspe3ZhciBJPXgucGVlaygpO2lmKEkucmVwbGFjZW1lbnQpe3gucG9wKCk7Y29udGludWV9aWYoSS5yZXBsYWNlcyYmSSE9PUkucmVwbGFjZXMucmVwbGFjZW1lbnQpe3gucG9wKCk7Y29udGludWV9aWYoSS5pbnZhbGlkKXt4LnBvcCgpO2NvbnRpbnVlfXZhciBPPUkuZWxlc1F1ZXVlLnNoaWZ0KCk7TyYmKGcuZHJhd0VsZUluTGF5ZXIoSSxPLEkubGV2ZWwseSksTCsrKSxULmxlbmd0aD09PTAmJlQucHVzaCghMCksSS5lbGVzUXVldWUubGVuZ3RoPT09MCYmKHgucG9wKCksSS5yZXFzPTAsSS5yZXBsYWNlcyYmZy5hcHBseUxheWVyUmVwbGFjZW1lbnQoSSksZy5yZXF1ZXN0UmVkcmF3KCkpfXJldHVybiBUfSx3MS5hcHBseUxheWVyUmVwbGFjZW1lbnQ9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcyx4PWcubGF5ZXJzQnlMZXZlbFt5LmxldmVsXSxUPXkucmVwbGFjZXMsTD14LmluZGV4T2YoVCk7aWYoIShMPDB8fFQuaW52YWxpZCkpe3hbTF09eTtmb3IodmFyIEk9MDtJPHkuZWxlcy5sZW5ndGg7SSsrKXt2YXIgTz15LmVsZXNbSV0uX3ByaXZhdGUsJD1PLmltZ0xheWVyQ2FjaGVzPU8uaW1nTGF5ZXJDYWNoZXN8fHt9OyQmJigkW3kubGV2ZWxdPXkpfWcucmVxdWVzdFJlZHJhdygpfX0sdzEucmVxdWVzdFJlZHJhdz1vcyhmdW5jdGlvbigpe3ZhciB5PXRoaXMucmVuZGVyZXI7eS5yZWRyYXdIaW50KCJlbGVzIiwhMCkseS5yZWRyYXdIaW50KCJkcmFnIiwhMCkseS5yZWRyYXcoKX0sMTAwKSx3MS5zZXR1cERlcXVldWVpbmc9dlQuc2V0dXBEZXF1ZXVlaW5nKHtkZXFSZWRyYXdUaHJlc2hvbGQ6emssZGVxQ29zdDptdHQsZGVxQXZnQ29zdDpaZ3QsZGVxTm9EcmF3Q29zdDpKZ3QsZGVxRmFzdENvc3Q6dHB0LGRlcTpmdW5jdGlvbihnLHgpe3JldHVybiBnLmRlcXVldWUoeCl9LG9uRGVxZDpSNSxzaG91bGRSZWRyYXc6Y3YscHJpb3JpdHk6ZnVuY3Rpb24oZyl7cmV0dXJuIGcucmVuZGVyZXIuYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5seXJUeHJEZXF9fSk7dmFyIEMwPXt9LGt0dDtmdW5jdGlvbiBXQih5LGcpe2Zvcih2YXIgeD0wO3g8Zy5sZW5ndGg7eCsrKXt2YXIgVD1nW3hdO3kubGluZVRvKFQueCxULnkpfX1mdW5jdGlvbiBLQih5LGcseCl7Zm9yKHZhciBULEw9MDtMPGcubGVuZ3RoO0wrKyl7dmFyIEk9Z1tMXTtMPT09MCYmKFQ9SSkseS5saW5lVG8oSS54LEkueSl9eS5xdWFkcmF0aWNDdXJ2ZVRvKHgueCx4LnksVC54LFQueSl9ZnVuY3Rpb24gRXR0KHksZyx4KXt5LmJlZ2luUGF0aCYmeS5iZWdpblBhdGgoKTtmb3IodmFyIFQ9ZyxMPTA7TDxULmxlbmd0aDtMKyspe3ZhciBJPVRbTF07eS5saW5lVG8oSS54LEkueSl9dmFyIE89eCwkPXhbMF07eS5tb3ZlVG8oJC54LCQueSk7Zm9yKHZhciBMPTE7TDxPLmxlbmd0aDtMKyspe3ZhciBJPU9bTF07eS5saW5lVG8oSS54LEkueSl9eS5jbG9zZVBhdGgmJnkuY2xvc2VQYXRoKCl9ZnVuY3Rpb24gc3B0KHksZyx4LFQsTCl7eS5iZWdpblBhdGgmJnkuYmVnaW5QYXRoKCkseS5hcmMoeCxULEwsMCxNYXRoLlBJKjIsITEpO3ZhciBJPWcsTz1JWzBdO3kubW92ZVRvKE8ueCxPLnkpO2Zvcih2YXIgJD0wOyQ8SS5sZW5ndGg7JCsrKXt2YXIgej1JWyRdO3kubGluZVRvKHoueCx6LnkpfXkuY2xvc2VQYXRoJiZ5LmNsb3NlUGF0aCgpfWZ1bmN0aW9uIGFwdCh5LGcseCxUKXt5LmFyYyhnLHgsVCwwLE1hdGguUEkqMiwhMSl9QzAuYXJyb3dTaGFwZUltcGw9ZnVuY3Rpb24oeSl7cmV0dXJuKGt0dHx8KGt0dD17cG9seWdvbjpXQiwidHJpYW5nbGUtYmFja2N1cnZlIjpLQiwidHJpYW5nbGUtdGVlIjpFdHQsImNpcmNsZS10cmlhbmdsZSI6c3B0LCJ0cmlhbmdsZS1jcm9zcyI6RXR0LGNpcmNsZTphcHR9KSlbeV19O3ZhciBndj17fTtndi5kcmF3RWxlbWVudD1mdW5jdGlvbih5LGcseCxULEwsSSl7dmFyIE89dGhpcztnLmlzTm9kZSgpP08uZHJhd05vZGUoeSxnLHgsVCxMLEkpOk8uZHJhd0VkZ2UoeSxnLHgsVCxMLEkpfSxndi5kcmF3RWxlbWVudE92ZXJsYXk9ZnVuY3Rpb24oeSxnKXt2YXIgeD10aGlzO2cuaXNOb2RlKCk/eC5kcmF3Tm9kZU92ZXJsYXkoeSxnKTp4LmRyYXdFZGdlT3ZlcmxheSh5LGcpfSxndi5kcmF3RWxlbWVudFVuZGVybGF5PWZ1bmN0aW9uKHksZyl7dmFyIHg9dGhpcztnLmlzTm9kZSgpP3guZHJhd05vZGVVbmRlcmxheSh5LGcpOnguZHJhd0VkZ2VVbmRlcmxheSh5LGcpfSxndi5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb249ZnVuY3Rpb24oeSxnLHgsVCxMLEksTywkKXt2YXIgej10aGlzLFM9eC5nZXRCb3VuZGluZ0JveChnKTtpZighKFMudz09PTB8fFMuaD09PTApKXt2YXIgVj14LmdldEVsZW1lbnQoZyxTLFQsTCxJKTtpZihWIT1udWxsKXt2YXIgVT0kKHosZyk7aWYoVT09PTApcmV0dXJuO3ZhciBldD1PKHosZyksYXQ9Uy54MSxsdD1TLnkxLGd0PVMudyxMdD1TLmgsRXQsRHQsSXQsenQsdGU7aWYoZXQhPT0wKXt2YXIgWHQ9eC5nZXRSb3RhdGlvblBvaW50KGcpO0l0PVh0LngsenQ9WHQueSx5LnRyYW5zbGF0ZShJdCx6dCkseS5yb3RhdGUoZXQpLHRlPXouZ2V0SW1nU21vb3RoaW5nKHkpLHRlfHx6LnNldEltZ1Ntb290aGluZyh5LCEwKTt2YXIgSHQ9eC5nZXRSb3RhdGlvbk9mZnNldChnKTtFdD1IdC54LER0PUh0Lnl9ZWxzZSBFdD1hdCxEdD1sdDt2YXIgaWU7VSE9PTEmJihpZT15Lmdsb2JhbEFscGhhLHkuZ2xvYmFsQWxwaGE9aWUqVSkseS5kcmF3SW1hZ2UoVi50ZXh0dXJlLmNhbnZhcyxWLngsMCxWLndpZHRoLFYuaGVpZ2h0LEV0LER0LGd0LEx0KSxVIT09MSYmKHkuZ2xvYmFsQWxwaGE9aWUpLGV0IT09MCYmKHkucm90YXRlKC1ldCkseS50cmFuc2xhdGUoLUl0LC16dCksdGV8fHouc2V0SW1nU21vb3RoaW5nKHksITEpKX1lbHNlIHguZHJhd0VsZW1lbnQoeSxnKX19O3ZhciBuTT1mdW5jdGlvbigpe3JldHVybiAwfSx4VD1mdW5jdGlvbihnLHgpe3JldHVybiBnLmdldFRleHRBbmdsZSh4LG51bGwpfSxZQj1mdW5jdGlvbihnLHgpe3JldHVybiBnLmdldFRleHRBbmdsZSh4LCJzb3VyY2UiKX0sb3B0PWZ1bmN0aW9uKGcseCl7cmV0dXJuIGcuZ2V0VGV4dEFuZ2xlKHgsInRhcmdldCIpfSxjcHQ9ZnVuY3Rpb24oZyx4KXtyZXR1cm4geC5lZmZlY3RpdmVPcGFjaXR5KCl9LFhCPWZ1bmN0aW9uKGcseCl7cmV0dXJuIHgucHN0eWxlKCJ0ZXh0LW9wYWNpdHkiKS5wZlZhbHVlKnguZWZmZWN0aXZlT3BhY2l0eSgpfTtndi5kcmF3Q2FjaGVkRWxlbWVudD1mdW5jdGlvbih5LGcseCxULEwsSSl7dmFyIE89dGhpcywkPU8uZGF0YSx6PSQuZWxlVHhyQ2FjaGUsUz0kLmxibFR4ckNhY2hlLFY9JC5zbGJUeHJDYWNoZSxVPSQudGxiVHhyQ2FjaGUsZXQ9Zy5ib3VuZGluZ0JveCgpLGF0PUk9PT0hMD96LnJlYXNvbnMuaGlnaFF1YWxpdHk6bnVsbDtpZighKGV0Lnc9PT0wfHxldC5oPT09MHx8IWcudmlzaWJsZSgpKSYmKCFUfHxFTChldCxUKSkpe3ZhciBsdD1nLmlzRWRnZSgpLGd0PWcuZWxlbWVudCgpLl9wcml2YXRlLnJzY3JhdGNoLmJhZExpbmU7Ty5kcmF3RWxlbWVudFVuZGVybGF5KHksZyksTy5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb24oeSxnLHoseCxMLGF0LG5NLGNwdCksKCFsdHx8IWd0KSYmTy5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb24oeSxnLFMseCxMLGF0LHhULFhCKSxsdCYmIWd0JiYoTy5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb24oeSxnLFYseCxMLGF0LFlCLFhCKSxPLmRyYXdDYWNoZWRFbGVtZW50UG9ydGlvbih5LGcsVSx4LEwsYXQsb3B0LFhCKSksTy5kcmF3RWxlbWVudE92ZXJsYXkoeSxnKX19LGd2LmRyYXdFbGVtZW50cz1mdW5jdGlvbih5LGcpe2Zvcih2YXIgeD10aGlzLFQ9MDtUPGcubGVuZ3RoO1QrKyl7dmFyIEw9Z1tUXTt4LmRyYXdFbGVtZW50KHksTCl9fSxndi5kcmF3Q2FjaGVkRWxlbWVudHM9ZnVuY3Rpb24oeSxnLHgsVCl7Zm9yKHZhciBMPXRoaXMsST0wO0k8Zy5sZW5ndGg7SSsrKXt2YXIgTz1nW0ldO0wuZHJhd0NhY2hlZEVsZW1lbnQoeSxPLHgsVCl9fSxndi5kcmF3Q2FjaGVkTm9kZXM9ZnVuY3Rpb24oeSxnLHgsVCl7Zm9yKHZhciBMPXRoaXMsST0wO0k8Zy5sZW5ndGg7SSsrKXt2YXIgTz1nW0ldO08uaXNOb2RlKCkmJkwuZHJhd0NhY2hlZEVsZW1lbnQoeSxPLHgsVCl9fSxndi5kcmF3TGF5ZXJlZEVsZW1lbnRzPWZ1bmN0aW9uKHksZyx4LFQpe3ZhciBMPXRoaXMsST1MLmRhdGEubHlyVHhyQ2FjaGUuZ2V0TGF5ZXJzKGcseCk7aWYoSSlmb3IodmFyIE89MDtPPEkubGVuZ3RoO08rKyl7dmFyICQ9SVtPXSx6PSQuYmI7ei53PT09MHx8ei5oPT09MHx8eS5kcmF3SW1hZ2UoJC5jYW52YXMsei54MSx6LnkxLHoudyx6LmgpfWVsc2UgTC5kcmF3Q2FjaGVkRWxlbWVudHMoeSxnLHgsVCl9O3ZhciBwdj17fTtwdi5kcmF3RWRnZT1mdW5jdGlvbih5LGcseCl7dmFyIFQ9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiEwLEw9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOiEwLEk9YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOiEwLE89dGhpcywkPWcuX3ByaXZhdGUucnNjcmF0Y2g7aWYoIShJJiYhZy52aXNpYmxlKCkpJiYhKCQuYmFkTGluZXx8JC5hbGxwdHM9PW51bGx8fGlzTmFOKCQuYWxscHRzWzBdKSkpe3ZhciB6O3gmJih6PXgseS50cmFuc2xhdGUoLXoueDEsLXoueTEpKTt2YXIgUz1JP2cucHN0eWxlKCJvcGFjaXR5IikudmFsdWU6MSxWPUk/Zy5wc3R5bGUoImxpbmUtb3BhY2l0eSIpLnZhbHVlOjEsVT1nLnBzdHlsZSgiY3VydmUtc3R5bGUiKS52YWx1ZSxldD1nLnBzdHlsZSgibGluZS1zdHlsZSIpLnZhbHVlLGF0PWcucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsbHQ9Zy5wc3R5bGUoImxpbmUtY2FwIikudmFsdWUsZ3Q9UypWLEx0PVMqVixFdD1mdW5jdGlvbigpe3ZhciBzZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06Z3Q7VT09PSJzdHJhaWdodC10cmlhbmdsZSI/KE8uZWxlU3Ryb2tlU3R5bGUoeSxnLHNlKSxPLmRyYXdFZGdlVHJpYW5nbGVQYXRoKGcseSwkLmFsbHB0cykpOih5LmxpbmVXaWR0aD1hdCx5LmxpbmVDYXA9bHQsTy5lbGVTdHJva2VTdHlsZSh5LGcsc2UpLE8uZHJhd0VkZ2VQYXRoKGcseSwkLmFsbHB0cyxldCkseS5saW5lQ2FwPSJidXR0Iil9LER0PWZ1bmN0aW9uKCl7TCYmTy5kcmF3RWRnZU92ZXJsYXkoeSxnKX0sSXQ9ZnVuY3Rpb24oKXtMJiZPLmRyYXdFZGdlVW5kZXJsYXkoeSxnKX0senQ9ZnVuY3Rpb24oKXt2YXIgc2U9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOkx0O08uZHJhd0Fycm93aGVhZHMoeSxnLHNlKX0sdGU9ZnVuY3Rpb24oKXtPLmRyYXdFbGVtZW50VGV4dCh5LGcsbnVsbCxUKX07eS5saW5lSm9pbj0icm91bmQiO3ZhciBYdD1nLnBzdHlsZSgiZ2hvc3QiKS52YWx1ZT09PSJ5ZXMiO2lmKFh0KXt2YXIgSHQ9Zy5wc3R5bGUoImdob3N0LW9mZnNldC14IikucGZWYWx1ZSxpZT1nLnBzdHlsZSgiZ2hvc3Qtb2Zmc2V0LXkiKS5wZlZhbHVlLFV0PWcucHN0eWxlKCJnaG9zdC1vcGFjaXR5IikudmFsdWUsZmU9Z3QqVXQ7eS50cmFuc2xhdGUoSHQsaWUpLEV0KGZlKSx6dChmZSkseS50cmFuc2xhdGUoLUh0LC1pZSl9SXQoKSxFdCgpLHp0KCksRHQoKSx0ZSgpLHgmJnkudHJhbnNsYXRlKHoueDEsei55MSl9fTt2YXIgVHR0PWZ1bmN0aW9uKGcpe2lmKCFbIm92ZXJsYXkiLCJ1bmRlcmxheSJdLmluY2x1ZGVzKGcpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdGF0ZSIpO3JldHVybiBmdW5jdGlvbih4LFQpe2lmKFQudmlzaWJsZSgpKXt2YXIgTD1ULnBzdHlsZSgiIi5jb25jYXQoZywiLW9wYWNpdHkiKSkudmFsdWU7aWYoTCE9PTApe3ZhciBJPXRoaXMsTz1JLnVzZVBhdGhzKCksJD1ULl9wcml2YXRlLnJzY3JhdGNoLHo9VC5wc3R5bGUoIiIuY29uY2F0KGcsIi1wYWRkaW5nIikpLnBmVmFsdWUsUz0yKnosVj1ULnBzdHlsZSgiIi5jb25jYXQoZywiLWNvbG9yIikpLnZhbHVlO3gubGluZVdpZHRoPVMsJC5lZGdlVHlwZT09PSJzZWxmIiYmIU8/eC5saW5lQ2FwPSJidXR0Ijp4LmxpbmVDYXA9InJvdW5kIixJLmNvbG9yU3Ryb2tlU3R5bGUoeCxWWzBdLFZbMV0sVlsyXSxMKSxJLmRyYXdFZGdlUGF0aChULHgsJC5hbGxwdHMsInNvbGlkIil9fX19O3B2LmRyYXdFZGdlT3ZlcmxheT1UdHQoIm92ZXJsYXkiKSxwdi5kcmF3RWRnZVVuZGVybGF5PVR0dCgidW5kZXJsYXkiKSxwdi5kcmF3RWRnZVBhdGg9ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEw9eS5fcHJpdmF0ZS5yc2NyYXRjaCxJPWcsTywkPSExLHo9dGhpcy51c2VQYXRocygpLFM9eS5wc3R5bGUoImxpbmUtZGFzaC1wYXR0ZXJuIikucGZWYWx1ZSxWPXkucHN0eWxlKCJsaW5lLWRhc2gtb2Zmc2V0IikucGZWYWx1ZTtpZih6KXt2YXIgVT14LmpvaW4oIiQiKSxldD1MLnBhdGhDYWNoZUtleSYmTC5wYXRoQ2FjaGVLZXk9PT1VO2V0PyhPPWc9TC5wYXRoQ2FjaGUsJD0hMCk6KE89Zz1uZXcgUGF0aDJELEwucGF0aENhY2hlS2V5PVUsTC5wYXRoQ2FjaGU9Tyl9aWYoSS5zZXRMaW5lRGFzaClzd2l0Y2goVCl7Y2FzZSJkb3R0ZWQiOkkuc2V0TGluZURhc2goWzEsMV0pO2JyZWFrO2Nhc2UiZGFzaGVkIjpJLnNldExpbmVEYXNoKFMpLEkubGluZURhc2hPZmZzZXQ9VjticmVhaztjYXNlInNvbGlkIjpJLnNldExpbmVEYXNoKFtdKTticmVha31pZighJCYmIUwuYmFkTGluZSlzd2l0Y2goZy5iZWdpblBhdGgmJmcuYmVnaW5QYXRoKCksZy5tb3ZlVG8oeFswXSx4WzFdKSxMLmVkZ2VUeXBlKXtjYXNlImJlemllciI6Y2FzZSJzZWxmIjpjYXNlImNvbXBvdW5kIjpjYXNlIm11bHRpYmV6aWVyIjpmb3IodmFyIGF0PTI7YXQrMzx4Lmxlbmd0aDthdCs9NClnLnF1YWRyYXRpY0N1cnZlVG8oeFthdF0seFthdCsxXSx4W2F0KzJdLHhbYXQrM10pO2JyZWFrO2Nhc2Uic3RyYWlnaHQiOmNhc2Uic2VnbWVudHMiOmNhc2UiaGF5c3RhY2siOmZvcih2YXIgbHQ9MjtsdCsxPHgubGVuZ3RoO2x0Kz0yKWcubGluZVRvKHhbbHRdLHhbbHQrMV0pO2JyZWFrfWc9SSx6P2cuc3Ryb2tlKE8pOmcuc3Ryb2tlKCksZy5zZXRMaW5lRGFzaCYmZy5zZXRMaW5lRGFzaChbXSl9LHB2LmRyYXdFZGdlVHJpYW5nbGVQYXRoPWZ1bmN0aW9uKHksZyx4KXtnLmZpbGxTdHlsZT1nLnN0cm9rZVN0eWxlO2Zvcih2YXIgVD15LnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLEw9MDtMKzE8eC5sZW5ndGg7TCs9Mil7dmFyIEk9W3hbTCsyXS14W0xdLHhbTCszXS14W0wrMV1dLE89TWF0aC5zcXJ0KElbMF0qSVswXStJWzFdKklbMV0pLCQ9W0lbMV0vTywtSVswXS9PXSx6PVskWzBdKlQvMiwkWzFdKlQvMl07Zy5iZWdpblBhdGgoKSxnLm1vdmVUbyh4W0xdLXpbMF0seFtMKzFdLXpbMV0pLGcubGluZVRvKHhbTF0relswXSx4W0wrMV0relsxXSksZy5saW5lVG8oeFtMKzJdLHhbTCszXSksZy5jbG9zZVBhdGgoKSxnLmZpbGwoKX19LHB2LmRyYXdBcnJvd2hlYWRzPWZ1bmN0aW9uKHksZyx4KXt2YXIgVD1nLl9wcml2YXRlLnJzY3JhdGNoLEw9VC5lZGdlVHlwZT09PSJoYXlzdGFjayI7THx8dGhpcy5kcmF3QXJyb3doZWFkKHksZywic291cmNlIixULmFycm93U3RhcnRYLFQuYXJyb3dTdGFydFksVC5zcmNBcnJvd0FuZ2xlLHgpLHRoaXMuZHJhd0Fycm93aGVhZCh5LGcsIm1pZC10YXJnZXQiLFQubWlkWCxULm1pZFksVC5taWR0Z3RBcnJvd0FuZ2xlLHgpLHRoaXMuZHJhd0Fycm93aGVhZCh5LGcsIm1pZC1zb3VyY2UiLFQubWlkWCxULm1pZFksVC5taWRzcmNBcnJvd0FuZ2xlLHgpLEx8fHRoaXMuZHJhd0Fycm93aGVhZCh5LGcsInRhcmdldCIsVC5hcnJvd0VuZFgsVC5hcnJvd0VuZFksVC50Z3RBcnJvd0FuZ2xlLHgpfSxwdi5kcmF3QXJyb3doZWFkPWZ1bmN0aW9uKHksZyx4LFQsTCxJLE8pe2lmKCEoaXNOYU4oVCl8fFQ9PW51bGx8fGlzTmFOKEwpfHxMPT1udWxsfHxpc05hTihJKXx8ST09bnVsbCkpe3ZhciAkPXRoaXMsej1nLnBzdHlsZSh4KyItYXJyb3ctc2hhcGUiKS52YWx1ZTtpZih6IT09Im5vbmUiKXt2YXIgUz1nLnBzdHlsZSh4KyItYXJyb3ctZmlsbCIpLnZhbHVlPT09ImhvbGxvdyI/ImJvdGgiOiJmaWxsZWQiLFY9Zy5wc3R5bGUoeCsiLWFycm93LWZpbGwiKS52YWx1ZSxVPWcucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsZXQ9Zy5wc3R5bGUoIm9wYWNpdHkiKS52YWx1ZTtPPT09dm9pZCAwJiYoTz1ldCk7dmFyIGF0PXkuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uOyhPIT09MXx8Vj09PSJob2xsb3ciKSYmKHkuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJkZXN0aW5hdGlvbi1vdXQiLCQuY29sb3JGaWxsU3R5bGUoeSwyNTUsMjU1LDI1NSwxKSwkLmNvbG9yU3Ryb2tlU3R5bGUoeSwyNTUsMjU1LDI1NSwxKSwkLmRyYXdBcnJvd1NoYXBlKGcseSxTLFUseixULEwsSSkseS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249YXQpO3ZhciBsdD1nLnBzdHlsZSh4KyItYXJyb3ctY29sb3IiKS52YWx1ZTskLmNvbG9yRmlsbFN0eWxlKHksbHRbMF0sbHRbMV0sbHRbMl0sTyksJC5jb2xvclN0cm9rZVN0eWxlKHksbHRbMF0sbHRbMV0sbHRbMl0sTyksJC5kcmF3QXJyb3dTaGFwZShnLHksVixVLHosVCxMLEkpfX19LHB2LmRyYXdBcnJvd1NoYXBlPWZ1bmN0aW9uKHksZyx4LFQsTCxJLE8sJCl7dmFyIHo9dGhpcyxTPXRoaXMudXNlUGF0aHMoKSYmTCE9PSJ0cmlhbmdsZS1jcm9zcyIsVj0hMSxVLGV0PWcsYXQ9e3g6SSx5Ok99LGx0PXkucHN0eWxlKCJhcnJvdy1zY2FsZSIpLnZhbHVlLGd0PXRoaXMuZ2V0QXJyb3dXaWR0aChULGx0KSxMdD16LmFycm93U2hhcGVzW0xdO2lmKFMpe3ZhciBFdD16LmFycm93UGF0aENhY2hlPXouYXJyb3dQYXRoQ2FjaGV8fFtdLER0PXZwKEwpLEl0PUV0W0R0XTtJdCE9bnVsbD8oVT1nPUl0LFY9ITApOihVPWc9bmV3IFBhdGgyRCxFdFtEdF09VSl9Vnx8KGcuYmVnaW5QYXRoJiZnLmJlZ2luUGF0aCgpLFM/THQuZHJhdyhnLDEsMCx7eDowLHk6MH0sMSk6THQuZHJhdyhnLGd0LCQsYXQsVCksZy5jbG9zZVBhdGgmJmcuY2xvc2VQYXRoKCkpLGc9ZXQsUyYmKGcudHJhbnNsYXRlKEksTyksZy5yb3RhdGUoJCksZy5zY2FsZShndCxndCkpLCh4PT09ImZpbGxlZCJ8fHg9PT0iYm90aCIpJiYoUz9nLmZpbGwoVSk6Zy5maWxsKCkpLCh4PT09ImhvbGxvdyJ8fHg9PT0iYm90aCIpJiYoZy5saW5lV2lkdGg9KEx0Lm1hdGNoRWRnZVdpZHRoP1Q6MSkvKFM/Z3Q6MSksZy5saW5lSm9pbj0ibWl0ZXIiLFM/Zy5zdHJva2UoVSk6Zy5zdHJva2UoKSksUyYmKGcuc2NhbGUoMS9ndCwxL2d0KSxnLnJvdGF0ZSgtJCksZy50cmFuc2xhdGUoLUksLU8pKX07dmFyIGtUPXt9O2tULnNhZmVEcmF3SW1hZ2U9ZnVuY3Rpb24oeSxnLHgsVCxMLEksTywkLHosUyl7aWYoIShMPD0wfHxJPD0wfHx6PD0wfHxTPD0wKSl0cnl7eS5kcmF3SW1hZ2UoZyx4LFQsTCxJLE8sJCx6LFMpfWNhdGNoKFYpe25vKFYpfX0sa1QuZHJhd0luc2NyaWJlZEltYWdlPWZ1bmN0aW9uKHksZyx4LFQsTCl7dmFyIEk9dGhpcyxPPXgucG9zaXRpb24oKSwkPU8ueCx6PU8ueSxTPXguY3koKS5zdHlsZSgpLFY9Uy5nZXRJbmRleGVkU3R5bGUuYmluZChTKSxVPVYoeCwiYmFja2dyb3VuZC1maXQiLCJ2YWx1ZSIsVCksZXQ9Vih4LCJiYWNrZ3JvdW5kLXJlcGVhdCIsInZhbHVlIixUKSxhdD14LndpZHRoKCksbHQ9eC5oZWlnaHQoKSxndD14LnBhZGRpbmcoKSoyLEx0PWF0KyhWKHgsImJhY2tncm91bmQtd2lkdGgtcmVsYXRpdmUtdG8iLCJ2YWx1ZSIsVCk9PT0iaW5uZXIiPzA6Z3QpLEV0PWx0KyhWKHgsImJhY2tncm91bmQtaGVpZ2h0LXJlbGF0aXZlLXRvIiwidmFsdWUiLFQpPT09ImlubmVyIj8wOmd0KSxEdD14Ll9wcml2YXRlLnJzY3JhdGNoLEl0PVYoeCwiYmFja2dyb3VuZC1jbGlwIiwidmFsdWUiLFQpLHp0PUl0PT09Im5vZGUiLHRlPVYoeCwiYmFja2dyb3VuZC1pbWFnZS1vcGFjaXR5IiwidmFsdWUiLFQpKkwsWHQ9Vih4LCJiYWNrZ3JvdW5kLWltYWdlLXNtb290aGluZyIsInZhbHVlIixUKSxIdD1nLndpZHRofHxnLmNhY2hlZFcsaWU9Zy5oZWlnaHR8fGcuY2FjaGVkSDsoSHQ9PW51bGx8fGllPT1udWxsKSYmKGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZyksSHQ9Zy5jYWNoZWRXPWcud2lkdGh8fGcub2Zmc2V0V2lkdGgsaWU9Zy5jYWNoZWRIPWcuaGVpZ2h0fHxnLm9mZnNldEhlaWdodCxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGcpKTt2YXIgVXQ9SHQsZmU9aWU7aWYoVih4LCJiYWNrZ3JvdW5kLXdpZHRoIiwidmFsdWUiLFQpIT09ImF1dG8iJiYoVih4LCJiYWNrZ3JvdW5kLXdpZHRoIiwidW5pdHMiLFQpPT09IiUiP1V0PVYoeCwiYmFja2dyb3VuZC13aWR0aCIsInBmVmFsdWUiLFQpKkx0OlV0PVYoeCwiYmFja2dyb3VuZC13aWR0aCIsInBmVmFsdWUiLFQpKSxWKHgsImJhY2tncm91bmQtaGVpZ2h0IiwidmFsdWUiLFQpIT09ImF1dG8iJiYoVih4LCJiYWNrZ3JvdW5kLWhlaWdodCIsInVuaXRzIixUKT09PSIlIj9mZT1WKHgsImJhY2tncm91bmQtaGVpZ2h0IiwicGZWYWx1ZSIsVCkqRXQ6ZmU9Vih4LCJiYWNrZ3JvdW5kLWhlaWdodCIsInBmVmFsdWUiLFQpKSwhKFV0PT09MHx8ZmU9PT0wKSl7aWYoVT09PSJjb250YWluIil7dmFyIGdlPU1hdGgubWluKEx0L1V0LEV0L2ZlKTtVdCo9Z2UsZmUqPWdlfWVsc2UgaWYoVT09PSJjb3ZlciIpe3ZhciBnZT1NYXRoLm1heChMdC9VdCxFdC9mZSk7VXQqPWdlLGZlKj1nZX12YXIgc2U9JC1MdC8yLE5lPVYoeCwiYmFja2dyb3VuZC1wb3NpdGlvbi14IiwidW5pdHMiLFQpLHBlPVYoeCwiYmFja2dyb3VuZC1wb3NpdGlvbi14IiwicGZWYWx1ZSIsVCk7TmU9PT0iJSI/c2UrPShMdC1VdCkqcGU6c2UrPXBlO3ZhciBnbj1WKHgsImJhY2tncm91bmQtb2Zmc2V0LXgiLCJ1bml0cyIsVCksamU9Vih4LCJiYWNrZ3JvdW5kLW9mZnNldC14IiwicGZWYWx1ZSIsVCk7Z249PT0iJSI/c2UrPShMdC1VdCkqamU6c2UrPWplO3ZhciBHZT16LUV0LzIseG49Vih4LCJiYWNrZ3JvdW5kLXBvc2l0aW9uLXkiLCJ1bml0cyIsVCksRG49Vih4LCJiYWNrZ3JvdW5kLXBvc2l0aW9uLXkiLCJwZlZhbHVlIixUKTt4bj09PSIlIj9HZSs9KEV0LWZlKSpEbjpHZSs9RG47dmFyIFhuPVYoeCwiYmFja2dyb3VuZC1vZmZzZXQteSIsInVuaXRzIixUKSxDbj1WKHgsImJhY2tncm91bmQtb2Zmc2V0LXkiLCJwZlZhbHVlIixUKTtYbj09PSIlIj9HZSs9KEV0LWZlKSpDbjpHZSs9Q24sRHQucGF0aENhY2hlJiYoc2UtPSQsR2UtPXosJD0wLHo9MCk7dmFyIFluPXkuZ2xvYmFsQWxwaGE7eS5nbG9iYWxBbHBoYT10ZTt2YXIgcnI9SS5nZXRJbWdTbW9vdGhpbmcoeSksd3I9ITE7aWYoWHQ9PT0ibm8iJiZycj8oSS5zZXRJbWdTbW9vdGhpbmcoeSwhMSksd3I9ITApOlh0PT09InllcyImJiFyciYmKEkuc2V0SW1nU21vb3RoaW5nKHksITApLHdyPSEwKSxldD09PSJuby1yZXBlYXQiKXp0JiYoeS5zYXZlKCksRHQucGF0aENhY2hlP3kuY2xpcChEdC5wYXRoQ2FjaGUpOihJLm5vZGVTaGFwZXNbSS5nZXROb2RlU2hhcGUoeCldLmRyYXcoeSwkLHosTHQsRXQpLHkuY2xpcCgpKSksSS5zYWZlRHJhd0ltYWdlKHksZywwLDAsSHQsaWUsc2UsR2UsVXQsZmUpLHp0JiZ5LnJlc3RvcmUoKTtlbHNle3ZhciB1cj15LmNyZWF0ZVBhdHRlcm4oZyxldCk7eS5maWxsU3R5bGU9dXIsSS5ub2RlU2hhcGVzW0kuZ2V0Tm9kZVNoYXBlKHgpXS5kcmF3KHksJCx6LEx0LEV0KSx5LnRyYW5zbGF0ZShzZSxHZSkseS5maWxsKCkseS50cmFuc2xhdGUoLXNlLC1HZSl9eS5nbG9iYWxBbHBoYT1Zbix3ciYmSS5zZXRJbWdTbW9vdGhpbmcoeSxycil9fTt2YXIgbDY9e307bDYuZWxlVGV4dEJpZ2dlclRoYW5NaW49ZnVuY3Rpb24oeSxnKXtpZighZyl7dmFyIHg9eS5jeSgpLnpvb20oKSxUPXRoaXMuZ2V0UGl4ZWxSYXRpbygpLEw9TWF0aC5jZWlsKHhMKHgqVCkpO2c9TWF0aC5wb3coMixMKX12YXIgST15LnBzdHlsZSgiZm9udC1zaXplIikucGZWYWx1ZSpnLE89eS5wc3R5bGUoIm1pbi16b29tZWQtZm9udC1zaXplIikucGZWYWx1ZTtyZXR1cm4hKEk8Tyl9LGw2LmRyYXdFbGVtZW50VGV4dD1mdW5jdGlvbih5LGcseCxULEwpe3ZhciBJPWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTohMCxPPXRoaXM7aWYoVD09bnVsbCl7aWYoSSYmIU8uZWxlVGV4dEJpZ2dlclRoYW5NaW4oZykpcmV0dXJufWVsc2UgaWYoVD09PSExKXJldHVybjtpZihnLmlzTm9kZSgpKXt2YXIgJD1nLnBzdHlsZSgibGFiZWwiKTtpZighJHx8ISQudmFsdWUpcmV0dXJuO3ZhciB6PU8uZ2V0TGFiZWxKdXN0aWZpY2F0aW9uKGcpO3kudGV4dEFsaWduPXoseS50ZXh0QmFzZWxpbmU9ImJvdHRvbSJ9ZWxzZXt2YXIgUz1nLmVsZW1lbnQoKS5fcHJpdmF0ZS5yc2NyYXRjaC5iYWRMaW5lLFY9Zy5wc3R5bGUoImxhYmVsIiksVT1nLnBzdHlsZSgic291cmNlLWxhYmVsIiksZXQ9Zy5wc3R5bGUoInRhcmdldC1sYWJlbCIpO2lmKFN8fCghVnx8IVYudmFsdWUpJiYoIVV8fCFVLnZhbHVlKSYmKCFldHx8IWV0LnZhbHVlKSlyZXR1cm47eS50ZXh0QWxpZ249ImNlbnRlciIseS50ZXh0QmFzZWxpbmU9ImJvdHRvbSJ9dmFyIGF0PSF4LGx0O3gmJihsdD14LHkudHJhbnNsYXRlKC1sdC54MSwtbHQueTEpKSxMPT1udWxsPyhPLmRyYXdUZXh0KHksZyxudWxsLGF0LEkpLGcuaXNFZGdlKCkmJihPLmRyYXdUZXh0KHksZywic291cmNlIixhdCxJKSxPLmRyYXdUZXh0KHksZywidGFyZ2V0IixhdCxJKSkpOk8uZHJhd1RleHQoeSxnLEwsYXQsSSkseCYmeS50cmFuc2xhdGUobHQueDEsbHQueTEpfSxsNi5nZXRGb250Q2FjaGU9ZnVuY3Rpb24oeSl7dmFyIGc7dGhpcy5mb250Q2FjaGVzPXRoaXMuZm9udENhY2hlc3x8W107Zm9yKHZhciB4PTA7eDx0aGlzLmZvbnRDYWNoZXMubGVuZ3RoO3grKylpZihnPXRoaXMuZm9udENhY2hlc1t4XSxnLmNvbnRleHQ9PT15KXJldHVybiBnO3JldHVybiBnPXtjb250ZXh0Onl9LHRoaXMuZm9udENhY2hlcy5wdXNoKGcpLGd9LGw2LnNldHVwVGV4dFN0eWxlPWZ1bmN0aW9uKHksZyl7dmFyIHg9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiEwLFQ9Zy5wc3R5bGUoImZvbnQtc3R5bGUiKS5zdHJWYWx1ZSxMPWcucHN0eWxlKCJmb250LXNpemUiKS5wZlZhbHVlKyJweCIsST1nLnBzdHlsZSgiZm9udC1mYW1pbHkiKS5zdHJWYWx1ZSxPPWcucHN0eWxlKCJmb250LXdlaWdodCIpLnN0clZhbHVlLCQ9eD9nLmVmZmVjdGl2ZU9wYWNpdHkoKSpnLnBzdHlsZSgidGV4dC1vcGFjaXR5IikudmFsdWU6MSx6PWcucHN0eWxlKCJ0ZXh0LW91dGxpbmUtb3BhY2l0eSIpLnZhbHVlKiQsUz1nLnBzdHlsZSgiY29sb3IiKS52YWx1ZSxWPWcucHN0eWxlKCJ0ZXh0LW91dGxpbmUtY29sb3IiKS52YWx1ZTt5LmZvbnQ9VCsiICIrTysiICIrTCsiICIrSSx5LmxpbmVKb2luPSJyb3VuZCIsdGhpcy5jb2xvckZpbGxTdHlsZSh5LFNbMF0sU1sxXSxTWzJdLCQpLHRoaXMuY29sb3JTdHJva2VTdHlsZSh5LFZbMF0sVlsxXSxWWzJdLHopfTtmdW5jdGlvbiB1cHQoeSxnLHgsVCxMKXt2YXIgST1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06NTt5LmJlZ2luUGF0aCgpLHkubW92ZVRvKGcrSSx4KSx5LmxpbmVUbyhnK1QtSSx4KSx5LnF1YWRyYXRpY0N1cnZlVG8oZytULHgsZytULHgrSSkseS5saW5lVG8oZytULHgrTC1JKSx5LnF1YWRyYXRpY0N1cnZlVG8oZytULHgrTCxnK1QtSSx4K0wpLHkubGluZVRvKGcrSSx4K0wpLHkucXVhZHJhdGljQ3VydmVUbyhnLHgrTCxnLHgrTC1JKSx5LmxpbmVUbyhnLHgrSSkseS5xdWFkcmF0aWNDdXJ2ZVRvKGcseCxnK0kseCkseS5jbG9zZVBhdGgoKSx5LmZpbGwoKX1sNi5nZXRUZXh0QW5nbGU9ZnVuY3Rpb24oeSxnKXt2YXIgeCxUPXkuX3ByaXZhdGUsTD1ULnJzY3JhdGNoLEk9Zz9nKyItIjoiIixPPXkucHN0eWxlKEkrInRleHQtcm90YXRpb24iKSwkPXdwKEwsImxhYmVsQW5nbGUiLGcpO3JldHVybiBPLnN0clZhbHVlPT09ImF1dG9yb3RhdGUiP3g9eS5pc0VkZ2UoKT8kOjA6Ty5zdHJWYWx1ZT09PSJub25lIj94PTA6eD1PLnBmVmFsdWUseH0sbDYuZHJhd1RleHQ9ZnVuY3Rpb24oeSxnLHgpe3ZhciBUPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMCxMPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTohMCxJPWcuX3ByaXZhdGUsTz1JLnJzY3JhdGNoLCQ9TD9nLmVmZmVjdGl2ZU9wYWNpdHkoKToxO2lmKCEoTCYmKCQ9PT0wfHxnLnBzdHlsZSgidGV4dC1vcGFjaXR5IikudmFsdWU9PT0wKSkpe3g9PT0ibWFpbiImJih4PW51bGwpO3ZhciB6PXdwKE8sImxhYmVsWCIseCksUz13cChPLCJsYWJlbFkiLHgpLFYsVSxldD10aGlzLmdldExhYmVsVGV4dChnLHgpO2lmKGV0IT1udWxsJiZldCE9PSIiJiYhaXNOYU4oeikmJiFpc05hTihTKSl7dGhpcy5zZXR1cFRleHRTdHlsZSh5LGcsTCk7dmFyIGF0PXg/eCsiLSI6IiIsbHQ9d3AoTywibGFiZWxXaWR0aCIseCksZ3Q9d3AoTywibGFiZWxIZWlnaHQiLHgpLEx0PWcucHN0eWxlKGF0KyJ0ZXh0LW1hcmdpbi14IikucGZWYWx1ZSxFdD1nLnBzdHlsZShhdCsidGV4dC1tYXJnaW4teSIpLnBmVmFsdWUsRHQ9Zy5pc0VkZ2UoKSxJdD1nLnBzdHlsZSgidGV4dC1oYWxpZ24iKS52YWx1ZSx6dD1nLnBzdHlsZSgidGV4dC12YWxpZ24iKS52YWx1ZTtEdCYmKEl0PSJjZW50ZXIiLHp0PSJjZW50ZXIiKSx6Kz1MdCxTKz1FdDt2YXIgdGU7c3dpdGNoKFQ/dGU9dGhpcy5nZXRUZXh0QW5nbGUoZyx4KTp0ZT0wLHRlIT09MCYmKFY9eixVPVMseS50cmFuc2xhdGUoVixVKSx5LnJvdGF0ZSh0ZSksej0wLFM9MCksenQpe2Nhc2UidG9wIjpicmVhaztjYXNlImNlbnRlciI6Uys9Z3QvMjticmVhaztjYXNlImJvdHRvbSI6Uys9Z3Q7YnJlYWt9dmFyIFh0PWcucHN0eWxlKCJ0ZXh0LWJhY2tncm91bmQtb3BhY2l0eSIpLnZhbHVlLEh0PWcucHN0eWxlKCJ0ZXh0LWJvcmRlci1vcGFjaXR5IikudmFsdWUsaWU9Zy5wc3R5bGUoInRleHQtYm9yZGVyLXdpZHRoIikucGZWYWx1ZSxVdD1nLnBzdHlsZSgidGV4dC1iYWNrZ3JvdW5kLXBhZGRpbmciKS5wZlZhbHVlO2lmKFh0PjB8fGllPjAmJkh0PjApe3ZhciBmZT16LVV0O3N3aXRjaChJdCl7Y2FzZSJsZWZ0IjpmZS09bHQ7YnJlYWs7Y2FzZSJjZW50ZXIiOmZlLT1sdC8yO2JyZWFrfXZhciBnZT1TLWd0LVV0LHNlPWx0KzIqVXQsTmU9Z3QrMipVdDtpZihYdD4wKXt2YXIgcGU9eS5maWxsU3R5bGUsZ249Zy5wc3R5bGUoInRleHQtYmFja2dyb3VuZC1jb2xvciIpLnZhbHVlO3kuZmlsbFN0eWxlPSJyZ2JhKCIrZ25bMF0rIiwiK2duWzFdKyIsIitnblsyXSsiLCIrWHQqJCsiKSI7dmFyIGplPWcucHN0eWxlKCJ0ZXh0LWJhY2tncm91bmQtc2hhcGUiKS5zdHJWYWx1ZTtqZS5pbmRleE9mKCJyb3VuZCIpPT09MD91cHQoeSxmZSxnZSxzZSxOZSwyKTp5LmZpbGxSZWN0KGZlLGdlLHNlLE5lKSx5LmZpbGxTdHlsZT1wZX1pZihpZT4wJiZIdD4wKXt2YXIgR2U9eS5zdHJva2VTdHlsZSx4bj15LmxpbmVXaWR0aCxEbj1nLnBzdHlsZSgidGV4dC1ib3JkZXItY29sb3IiKS52YWx1ZSxYbj1nLnBzdHlsZSgidGV4dC1ib3JkZXItc3R5bGUiKS52YWx1ZTtpZih5LnN0cm9rZVN0eWxlPSJyZ2JhKCIrRG5bMF0rIiwiK0RuWzFdKyIsIitEblsyXSsiLCIrSHQqJCsiKSIseS5saW5lV2lkdGg9aWUseS5zZXRMaW5lRGFzaClzd2l0Y2goWG4pe2Nhc2UiZG90dGVkIjp5LnNldExpbmVEYXNoKFsxLDFdKTticmVhaztjYXNlImRhc2hlZCI6eS5zZXRMaW5lRGFzaChbNCwyXSk7YnJlYWs7Y2FzZSJkb3VibGUiOnkubGluZVdpZHRoPWllLzQseS5zZXRMaW5lRGFzaChbXSk7YnJlYWs7Y2FzZSJzb2xpZCI6eS5zZXRMaW5lRGFzaChbXSk7YnJlYWt9aWYoeS5zdHJva2VSZWN0KGZlLGdlLHNlLE5lKSxYbj09PSJkb3VibGUiKXt2YXIgQ249aWUvMjt5LnN0cm9rZVJlY3QoZmUrQ24sZ2UrQ24sc2UtQ24qMixOZS1DbioyKX15LnNldExpbmVEYXNoJiZ5LnNldExpbmVEYXNoKFtdKSx5LmxpbmVXaWR0aD14bix5LnN0cm9rZVN0eWxlPUdlfX12YXIgWW49MipnLnBzdHlsZSgidGV4dC1vdXRsaW5lLXdpZHRoIikucGZWYWx1ZTtpZihZbj4wJiYoeS5saW5lV2lkdGg9WW4pLGcucHN0eWxlKCJ0ZXh0LXdyYXAiKS52YWx1ZT09PSJ3cmFwIil7dmFyIHJyPXdwKE8sImxhYmVsV3JhcENhY2hlZExpbmVzIix4KSx3cj13cChPLCJsYWJlbExpbmVIZWlnaHQiLHgpLHVyPWx0LzIsZXI9dGhpcy5nZXRMYWJlbEp1c3RpZmljYXRpb24oZyk7c3dpdGNoKGVyPT09ImF1dG8ifHwoSXQ9PT0ibGVmdCI/ZXI9PT0ibGVmdCI/eis9LWx0OmVyPT09ImNlbnRlciImJih6Kz0tdXIpOkl0PT09ImNlbnRlciI/ZXI9PT0ibGVmdCI/eis9LXVyOmVyPT09InJpZ2h0IiYmKHorPXVyKTpJdD09PSJyaWdodCImJihlcj09PSJjZW50ZXIiP3orPXVyOmVyPT09InJpZ2h0IiYmKHorPWx0KSkpLHp0KXtjYXNlInRvcCI6Uy09KHJyLmxlbmd0aC0xKSp3cjticmVhaztjYXNlImNlbnRlciI6Y2FzZSJib3R0b20iOlMtPShyci5sZW5ndGgtMSkqd3I7YnJlYWt9Zm9yKHZhciBibj0wO2JuPHJyLmxlbmd0aDtibisrKVluPjAmJnkuc3Ryb2tlVGV4dChycltibl0seixTKSx5LmZpbGxUZXh0KHJyW2JuXSx6LFMpLFMrPXdyfWVsc2UgWW4+MCYmeS5zdHJva2VUZXh0KGV0LHosUykseS5maWxsVGV4dChldCx6LFMpO3RlIT09MCYmKHkucm90YXRlKC10ZSkseS50cmFuc2xhdGUoLVYsLVUpKX19fTt2YXIgcWs9e307cWsuZHJhd05vZGU9ZnVuY3Rpb24oeSxnLHgpe3ZhciBUPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMCxMPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTohMCxJPWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTohMCxPPXRoaXMsJCx6LFM9Zy5fcHJpdmF0ZSxWPVMucnNjcmF0Y2gsVT1nLnBvc2l0aW9uKCk7aWYoISghc3QoVS54KXx8IXN0KFUueSkpJiYhKEkmJiFnLnZpc2libGUoKSkpe3ZhciBldD1JP2cuZWZmZWN0aXZlT3BhY2l0eSgpOjEsYXQ9Ty51c2VQYXRocygpLGx0LGd0PSExLEx0PWcucGFkZGluZygpOyQ9Zy53aWR0aCgpKzIqTHQsej1nLmhlaWdodCgpKzIqTHQ7dmFyIEV0O3gmJihFdD14LHkudHJhbnNsYXRlKC1FdC54MSwtRXQueTEpKTtmb3IodmFyIER0PWcucHN0eWxlKCJiYWNrZ3JvdW5kLWltYWdlIiksSXQ9RHQudmFsdWUsenQ9bmV3IEFycmF5KEl0Lmxlbmd0aCksdGU9bmV3IEFycmF5KEl0Lmxlbmd0aCksWHQ9MCxIdD0wO0h0PEl0Lmxlbmd0aDtIdCsrKXt2YXIgaWU9SXRbSHRdLFV0PXp0W0h0XT1pZSE9bnVsbCYmaWUhPT0ibm9uZSI7aWYoVXQpe3ZhciBmZT1nLmN5KCkuc3R5bGUoKS5nZXRJbmRleGVkU3R5bGUoZywiYmFja2dyb3VuZC1pbWFnZS1jcm9zc29yaWdpbiIsInZhbHVlIixIdCk7WHQrKyx0ZVtIdF09Ty5nZXRDYWNoZWRJbWFnZShpZSxmZSxmdW5jdGlvbigpe1MuYmFja2dyb3VuZFRpbWVzdGFtcD1EYXRlLm5vdygpLGcuZW1pdEFuZE5vdGlmeSgiYmFja2dyb3VuZCIpfSl9fXZhciBnZT1nLnBzdHlsZSgiYmFja2dyb3VuZC1ibGFja2VuIikudmFsdWUsc2U9Zy5wc3R5bGUoImJvcmRlci13aWR0aCIpLnBmVmFsdWUsTmU9Zy5wc3R5bGUoImJhY2tncm91bmQtb3BhY2l0eSIpLnZhbHVlKmV0LHBlPWcucHN0eWxlKCJib3JkZXItY29sb3IiKS52YWx1ZSxnbj1nLnBzdHlsZSgiYm9yZGVyLXN0eWxlIikudmFsdWUsamU9Zy5wc3R5bGUoImJvcmRlci1vcGFjaXR5IikudmFsdWUqZXQ7eS5saW5lSm9pbj0ibWl0ZXIiO3ZhciBHZT1mdW5jdGlvbigpe3ZhciBOaT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06TmU7Ty5lbGVGaWxsU3R5bGUoeSxnLE5pKX0seG49ZnVuY3Rpb24oKXt2YXIgTmk9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOmplO08uY29sb3JTdHJva2VTdHlsZSh5LHBlWzBdLHBlWzFdLHBlWzJdLE5pKX0sRG49Zy5wc3R5bGUoInNoYXBlIikuc3RyVmFsdWUsWG49Zy5wc3R5bGUoInNoYXBlLXBvbHlnb24tcG9pbnRzIikucGZWYWx1ZTtpZihhdCl7eS50cmFuc2xhdGUoVS54LFUueSk7dmFyIENuPU8ubm9kZVBhdGhDYWNoZT1PLm5vZGVQYXRoQ2FjaGV8fFtdLFluPUw5KERuPT09InBvbHlnb24iP0RuKyIsIitYbi5qb2luKCIsIik6RG4sIiIreiwiIiskKSxycj1DbltZbl07cnIhPW51bGw/KGx0PXJyLGd0PSEwLFYucGF0aENhY2hlPWx0KToobHQ9bmV3IFBhdGgyRCxDbltZbl09Vi5wYXRoQ2FjaGU9bHQpfXZhciB3cj1mdW5jdGlvbigpe2lmKCFndCl7dmFyIE5pPVU7YXQmJihOaT17eDowLHk6MH0pLE8ubm9kZVNoYXBlc1tPLmdldE5vZGVTaGFwZShnKV0uZHJhdyhsdHx8eSxOaS54LE5pLnksJCx6KX1hdD95LmZpbGwobHQpOnkuZmlsbCgpfSx1cj1mdW5jdGlvbigpe2Zvcih2YXIgTmk9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOmV0LG5zPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMCxVYT1TLmJhY2tncm91bmRpbmcsc2E9MCxYcz0wO1hzPHRlLmxlbmd0aDtYcysrKXt2YXIgQ3I9Zy5jeSgpLnN0eWxlKCkuZ2V0SW5kZXhlZFN0eWxlKGcsImJhY2tncm91bmQtaW1hZ2UtY29udGFpbm1lbnQiLCJ2YWx1ZSIsWHMpO2lmKG5zJiZDcj09PSJvdmVyInx8IW5zJiZDcj09PSJpbnNpZGUiKXtzYSsrO2NvbnRpbnVlfXp0W1hzXSYmdGVbWHNdLmNvbXBsZXRlJiYhdGVbWHNdLmVycm9yJiYoc2ErKyxPLmRyYXdJbnNjcmliZWRJbWFnZSh5LHRlW1hzXSxnLFhzLE5pKSl9Uy5iYWNrZ3JvdW5kaW5nPXNhIT09WHQsVWEhPT1TLmJhY2tncm91bmRpbmcmJmcudXBkYXRlU3R5bGUoITEpfSxlcj1mdW5jdGlvbigpe3ZhciBOaT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06ITEsbnM9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOmV0O08uaGFzUGllKGcpJiYoTy5kcmF3UGllKHksZyxucyksTmkmJihhdHx8Ty5ub2RlU2hhcGVzW08uZ2V0Tm9kZVNoYXBlKGcpXS5kcmF3KHksVS54LFUueSwkLHopKSl9LGJuPWZ1bmN0aW9uKCl7dmFyIE5pPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTpldCxucz0oZ2U+MD9nZTotZ2UpKk5pLFVhPWdlPjA/MDoyNTU7Z2UhPT0wJiYoTy5jb2xvckZpbGxTdHlsZSh5LFVhLFVhLFVhLG5zKSxhdD95LmZpbGwobHQpOnkuZmlsbCgpKX0scHI9ZnVuY3Rpb24oKXtpZihzZT4wKXtpZih5LmxpbmVXaWR0aD1zZSx5LmxpbmVDYXA9ImJ1dHQiLHkuc2V0TGluZURhc2gpc3dpdGNoKGduKXtjYXNlImRvdHRlZCI6eS5zZXRMaW5lRGFzaChbMSwxXSk7YnJlYWs7Y2FzZSJkYXNoZWQiOnkuc2V0TGluZURhc2goWzQsMl0pO2JyZWFrO2Nhc2Uic29saWQiOmNhc2UiZG91YmxlIjp5LnNldExpbmVEYXNoKFtdKTticmVha31pZihhdD95LnN0cm9rZShsdCk6eS5zdHJva2UoKSxnbj09PSJkb3VibGUiKXt5LmxpbmVXaWR0aD1zZS8zO3ZhciBOaT15Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbjt5Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0iZGVzdGluYXRpb24tb3V0IixhdD95LnN0cm9rZShsdCk6eS5zdHJva2UoKSx5Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1OaX15LnNldExpbmVEYXNoJiZ5LnNldExpbmVEYXNoKFtdKX19LGZyPWZ1bmN0aW9uKCl7TCYmTy5kcmF3Tm9kZU92ZXJsYXkoeSxnLFUsJCx6KX0scmk9ZnVuY3Rpb24oKXtMJiZPLmRyYXdOb2RlVW5kZXJsYXkoeSxnLFUsJCx6KX0sX2k9ZnVuY3Rpb24oKXtPLmRyYXdFbGVtZW50VGV4dCh5LGcsbnVsbCxUKX0saWE9Zy5wc3R5bGUoImdob3N0IikudmFsdWU9PT0ieWVzIjtpZihpYSl7dmFyIExhPWcucHN0eWxlKCJnaG9zdC1vZmZzZXQteCIpLnBmVmFsdWUsRGk9Zy5wc3R5bGUoImdob3N0LW9mZnNldC15IikucGZWYWx1ZSx3aT1nLnBzdHlsZSgiZ2hvc3Qtb3BhY2l0eSIpLnZhbHVlLF9zPXdpKmV0O3kudHJhbnNsYXRlKExhLERpKSxHZSh3aSpOZSksd3IoKSx1cihfcywhMCkseG4od2kqamUpLHByKCksZXIoZ2UhPT0wfHxzZSE9PTApLHVyKF9zLCExKSxibihfcykseS50cmFuc2xhdGUoLUxhLC1EaSl9YXQmJnkudHJhbnNsYXRlKC1VLngsLVUueSkscmkoKSxhdCYmeS50cmFuc2xhdGUoVS54LFUueSksR2UoKSx3cigpLHVyKGV0LCEwKSx4bigpLHByKCksZXIoZ2UhPT0wfHxzZSE9PTApLHVyKGV0LCExKSxibigpLGF0JiZ5LnRyYW5zbGF0ZSgtVS54LC1VLnkpLF9pKCksZnIoKSx4JiZ5LnRyYW5zbGF0ZShFdC54MSxFdC55MSl9fTt2YXIgX3R0PWZ1bmN0aW9uKGcpe2lmKCFbIm92ZXJsYXkiLCJ1bmRlcmxheSJdLmluY2x1ZGVzKGcpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdGF0ZSIpO3JldHVybiBmdW5jdGlvbih4LFQsTCxJLE8pe3ZhciAkPXRoaXM7aWYoVC52aXNpYmxlKCkpe3ZhciB6PVQucHN0eWxlKCIiLmNvbmNhdChnLCItcGFkZGluZyIpKS5wZlZhbHVlLFM9VC5wc3R5bGUoIiIuY29uY2F0KGcsIi1vcGFjaXR5IikpLnZhbHVlLFY9VC5wc3R5bGUoIiIuY29uY2F0KGcsIi1jb2xvciIpKS52YWx1ZSxVPVQucHN0eWxlKCIiLmNvbmNhdChnLCItc2hhcGUiKSkudmFsdWU7aWYoUz4wKXtpZihMPUx8fFQucG9zaXRpb24oKSxJPT1udWxsfHxPPT1udWxsKXt2YXIgZXQ9VC5wYWRkaW5nKCk7ST1ULndpZHRoKCkrMipldCxPPVQuaGVpZ2h0KCkrMipldH0kLmNvbG9yRmlsbFN0eWxlKHgsVlswXSxWWzFdLFZbMl0sUyksJC5ub2RlU2hhcGVzW1VdLmRyYXcoeCxMLngsTC55LEkreioyLE8reioyKSx4LmZpbGwoKX19fX07cWsuZHJhd05vZGVPdmVybGF5PV90dCgib3ZlcmxheSIpLHFrLmRyYXdOb2RlVW5kZXJsYXk9X3R0KCJ1bmRlcmxheSIpLHFrLmhhc1BpZT1mdW5jdGlvbih5KXtyZXR1cm4geT15WzBdLHkuX3ByaXZhdGUuaGFzUGllfSxxay5kcmF3UGllPWZ1bmN0aW9uKHksZyx4LFQpe2c9Z1swXSxUPVR8fGcucG9zaXRpb24oKTt2YXIgTD1nLmN5KCkuc3R5bGUoKSxJPWcucHN0eWxlKCJwaWUtc2l6ZSIpLE89VC54LCQ9VC55LHo9Zy53aWR0aCgpLFM9Zy5oZWlnaHQoKSxWPU1hdGgubWluKHosUykvMixVPTAsZXQ9dGhpcy51c2VQYXRocygpO2V0JiYoTz0wLCQ9MCksSS51bml0cz09PSIlIj9WPVYqSS5wZlZhbHVlOkkucGZWYWx1ZSE9PXZvaWQgMCYmKFY9SS5wZlZhbHVlLzIpO2Zvcih2YXIgYXQ9MTthdDw9TC5waWVCYWNrZ3JvdW5kTjthdCsrKXt2YXIgbHQ9Zy5wc3R5bGUoInBpZS0iK2F0KyItYmFja2dyb3VuZC1zaXplIikudmFsdWUsZ3Q9Zy5wc3R5bGUoInBpZS0iK2F0KyItYmFja2dyb3VuZC1jb2xvciIpLnZhbHVlLEx0PWcucHN0eWxlKCJwaWUtIithdCsiLWJhY2tncm91bmQtb3BhY2l0eSIpLnZhbHVlKngsRXQ9bHQvMTAwO0V0K1U+MSYmKEV0PTEtVSk7dmFyIER0PTEuNSpNYXRoLlBJKzIqTWF0aC5QSSpVLEl0PTIqTWF0aC5QSSpFdCx6dD1EdCtJdDtsdD09PTB8fFU+PTF8fFUrRXQ+MXx8KHkuYmVnaW5QYXRoKCkseS5tb3ZlVG8oTywkKSx5LmFyYyhPLCQsVixEdCx6dCkseS5jbG9zZVBhdGgoKSx0aGlzLmNvbG9yRmlsbFN0eWxlKHksZ3RbMF0sZ3RbMV0sZ3RbMl0sTHQpLHkuZmlsbCgpLFUrPUV0KX19O3ZhciB4Zz17fSxscHQ9MTAwO3hnLmdldFBpeGVsUmF0aW89ZnVuY3Rpb24oKXt2YXIgeT10aGlzLmRhdGEuY29udGV4dHNbMF07aWYodGhpcy5mb3JjZWRQaXhlbFJhdGlvIT1udWxsKXJldHVybiB0aGlzLmZvcmNlZFBpeGVsUmF0aW87dmFyIGc9eS5iYWNraW5nU3RvcmVQaXhlbFJhdGlvfHx5LndlYmtpdEJhY2tpbmdTdG9yZVBpeGVsUmF0aW98fHkubW96QmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8eS5tc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW98fHkub0JhY2tpbmdTdG9yZVBpeGVsUmF0aW98fHkuYmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8MTtyZXR1cm4od2luZG93LmRldmljZVBpeGVsUmF0aW98fDEpL2d9LHhnLnBhaW50Q2FjaGU9ZnVuY3Rpb24oeSl7Zm9yKHZhciBnPXRoaXMucGFpbnRDYWNoZXM9dGhpcy5wYWludENhY2hlc3x8W10seD0hMCxULEw9MDtMPGcubGVuZ3RoO0wrKylpZihUPWdbTF0sVC5jb250ZXh0PT09eSl7eD0hMTticmVha31yZXR1cm4geCYmKFQ9e2NvbnRleHQ6eX0sZy5wdXNoKFQpKSxUfSx4Zy5jcmVhdGVHcmFkaWVudFN0eWxlRm9yPWZ1bmN0aW9uKHksZyx4LFQsTCl7dmFyIEksTz10aGlzLnVzZVBhdGhzKCksJD14LnBzdHlsZShnKyItZ3JhZGllbnQtc3RvcC1jb2xvcnMiKS52YWx1ZSx6PXgucHN0eWxlKGcrIi1ncmFkaWVudC1zdG9wLXBvc2l0aW9ucyIpLnBmVmFsdWU7aWYoVD09PSJyYWRpYWwtZ3JhZGllbnQiKWlmKHguaXNFZGdlKCkpe3ZhciBTPXguc291cmNlRW5kcG9pbnQoKSxWPXgudGFyZ2V0RW5kcG9pbnQoKSxVPXgubWlkcG9pbnQoKSxldD1UMyhTLFUpLGF0PVQzKFYsVSk7ST15LmNyZWF0ZVJhZGlhbEdyYWRpZW50KFUueCxVLnksMCxVLngsVS55LE1hdGgubWF4KGV0LGF0KSl9ZWxzZXt2YXIgbHQ9Tz97eDowLHk6MH06eC5wb3NpdGlvbigpLGd0PXgucGFkZGVkV2lkdGgoKSxMdD14LnBhZGRlZEhlaWdodCgpO0k9eS5jcmVhdGVSYWRpYWxHcmFkaWVudChsdC54LGx0LnksMCxsdC54LGx0LnksTWF0aC5tYXgoZ3QsTHQpKX1lbHNlIGlmKHguaXNFZGdlKCkpe3ZhciBFdD14LnNvdXJjZUVuZHBvaW50KCksRHQ9eC50YXJnZXRFbmRwb2ludCgpO0k9eS5jcmVhdGVMaW5lYXJHcmFkaWVudChFdC54LEV0LnksRHQueCxEdC55KX1lbHNle3ZhciBJdD1PP3t4OjAseTowfTp4LnBvc2l0aW9uKCksenQ9eC5wYWRkZWRXaWR0aCgpLHRlPXgucGFkZGVkSGVpZ2h0KCksWHQ9enQvMixIdD10ZS8yLGllPXgucHN0eWxlKCJiYWNrZ3JvdW5kLWdyYWRpZW50LWRpcmVjdGlvbiIpLnZhbHVlO3N3aXRjaChpZSl7Y2FzZSJ0by1ib3R0b20iOkk9eS5jcmVhdGVMaW5lYXJHcmFkaWVudChJdC54LEl0LnktSHQsSXQueCxJdC55K0h0KTticmVhaztjYXNlInRvLXRvcCI6ST15LmNyZWF0ZUxpbmVhckdyYWRpZW50KEl0LngsSXQueStIdCxJdC54LEl0LnktSHQpO2JyZWFrO2Nhc2UidG8tbGVmdCI6ST15LmNyZWF0ZUxpbmVhckdyYWRpZW50KEl0LngrWHQsSXQueSxJdC54LVh0LEl0LnkpO2JyZWFrO2Nhc2UidG8tcmlnaHQiOkk9eS5jcmVhdGVMaW5lYXJHcmFkaWVudChJdC54LVh0LEl0LnksSXQueCtYdCxJdC55KTticmVhaztjYXNlInRvLWJvdHRvbS1yaWdodCI6Y2FzZSJ0by1yaWdodC1ib3R0b20iOkk9eS5jcmVhdGVMaW5lYXJHcmFkaWVudChJdC54LVh0LEl0LnktSHQsSXQueCtYdCxJdC55K0h0KTticmVhaztjYXNlInRvLXRvcC1yaWdodCI6Y2FzZSJ0by1yaWdodC10b3AiOkk9eS5jcmVhdGVMaW5lYXJHcmFkaWVudChJdC54LVh0LEl0LnkrSHQsSXQueCtYdCxJdC55LUh0KTticmVhaztjYXNlInRvLWJvdHRvbS1sZWZ0IjpjYXNlInRvLWxlZnQtYm90dG9tIjpJPXkuY3JlYXRlTGluZWFyR3JhZGllbnQoSXQueCtYdCxJdC55LUh0LEl0LngtWHQsSXQueStIdCk7YnJlYWs7Y2FzZSJ0by10b3AtbGVmdCI6Y2FzZSJ0by1sZWZ0LXRvcCI6ST15LmNyZWF0ZUxpbmVhckdyYWRpZW50KEl0LngrWHQsSXQueStIdCxJdC54LVh0LEl0LnktSHQpO2JyZWFrfX1pZighSSlyZXR1cm4gbnVsbDtmb3IodmFyIFV0PXoubGVuZ3RoPT09JC5sZW5ndGgsZmU9JC5sZW5ndGgsZ2U9MDtnZTxmZTtnZSsrKUkuYWRkQ29sb3JTdG9wKFV0P3pbZ2VdOmdlLyhmZS0xKSwicmdiYSgiKyRbZ2VdWzBdKyIsIiskW2dlXVsxXSsiLCIrJFtnZV1bMl0rIiwiK0wrIikiKTtyZXR1cm4gSX0seGcuZ3JhZGllbnRGaWxsU3R5bGU9ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEw9dGhpcy5jcmVhdGVHcmFkaWVudFN0eWxlRm9yKHksImJhY2tncm91bmQiLGcseCxUKTtpZighTClyZXR1cm4gbnVsbDt5LmZpbGxTdHlsZT1MfSx4Zy5jb2xvckZpbGxTdHlsZT1mdW5jdGlvbih5LGcseCxULEwpe3kuZmlsbFN0eWxlPSJyZ2JhKCIrZysiLCIreCsiLCIrVCsiLCIrTCsiKSJ9LHhnLmVsZUZpbGxTdHlsZT1mdW5jdGlvbih5LGcseCl7dmFyIFQ9Zy5wc3R5bGUoImJhY2tncm91bmQtZmlsbCIpLnZhbHVlO2lmKFQ9PT0ibGluZWFyLWdyYWRpZW50Inx8VD09PSJyYWRpYWwtZ3JhZGllbnQiKXRoaXMuZ3JhZGllbnRGaWxsU3R5bGUoeSxnLFQseCk7ZWxzZXt2YXIgTD1nLnBzdHlsZSgiYmFja2dyb3VuZC1jb2xvciIpLnZhbHVlO3RoaXMuY29sb3JGaWxsU3R5bGUoeSxMWzBdLExbMV0sTFsyXSx4KX19LHhnLmdyYWRpZW50U3Ryb2tlU3R5bGU9ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEw9dGhpcy5jcmVhdGVHcmFkaWVudFN0eWxlRm9yKHksImxpbmUiLGcseCxUKTtpZighTClyZXR1cm4gbnVsbDt5LnN0cm9rZVN0eWxlPUx9LHhnLmNvbG9yU3Ryb2tlU3R5bGU9ZnVuY3Rpb24oeSxnLHgsVCxMKXt5LnN0cm9rZVN0eWxlPSJyZ2JhKCIrZysiLCIreCsiLCIrVCsiLCIrTCsiKSJ9LHhnLmVsZVN0cm9rZVN0eWxlPWZ1bmN0aW9uKHksZyx4KXt2YXIgVD1nLnBzdHlsZSgibGluZS1maWxsIikudmFsdWU7aWYoVD09PSJsaW5lYXItZ3JhZGllbnQifHxUPT09InJhZGlhbC1ncmFkaWVudCIpdGhpcy5ncmFkaWVudFN0cm9rZVN0eWxlKHksZyxULHgpO2Vsc2V7dmFyIEw9Zy5wc3R5bGUoImxpbmUtY29sb3IiKS52YWx1ZTt0aGlzLmNvbG9yU3Ryb2tlU3R5bGUoeSxMWzBdLExbMV0sTFsyXSx4KX19LHhnLm1hdGNoQ2FudmFzU2l6ZT1mdW5jdGlvbih5KXt2YXIgZz10aGlzLHg9Zy5kYXRhLFQ9Zy5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzKCksTD1UWzJdLEk9VFszXSxPPWcuZ2V0UGl4ZWxSYXRpbygpLCQ9Zy5tb3Rpb25CbHVyUHhSYXRpbzsoeT09PWcuZGF0YS5idWZmZXJDYW52YXNlc1tnLk1PVElPTkJMVVJfQlVGRkVSX05PREVdfHx5PT09Zy5kYXRhLmJ1ZmZlckNhbnZhc2VzW2cuTU9USU9OQkxVUl9CVUZGRVJfRFJBR10pJiYoTz0kKTt2YXIgej1MKk8sUz1JKk8sVjtpZighKHo9PT1nLmNhbnZhc1dpZHRoJiZTPT09Zy5jYW52YXNIZWlnaHQpKXtnLmZvbnRDYWNoZXM9bnVsbDt2YXIgVT14LmNhbnZhc0NvbnRhaW5lcjtVLnN0eWxlLndpZHRoPUwrInB4IixVLnN0eWxlLmhlaWdodD1JKyJweCI7Zm9yKHZhciBldD0wO2V0PGcuQ0FOVkFTX0xBWUVSUztldCsrKVY9eC5jYW52YXNlc1tldF0sVi53aWR0aD16LFYuaGVpZ2h0PVMsVi5zdHlsZS53aWR0aD1MKyJweCIsVi5zdHlsZS5oZWlnaHQ9SSsicHgiO2Zvcih2YXIgZXQ9MDtldDxnLkJVRkZFUl9DT1VOVDtldCsrKVY9eC5idWZmZXJDYW52YXNlc1tldF0sVi53aWR0aD16LFYuaGVpZ2h0PVMsVi5zdHlsZS53aWR0aD1MKyJweCIsVi5zdHlsZS5oZWlnaHQ9SSsicHgiO2cudGV4dHVyZU11bHQ9MSxPPD0xJiYoVj14LmJ1ZmZlckNhbnZhc2VzW2cuVEVYVFVSRV9CVUZGRVJdLGcudGV4dHVyZU11bHQ9MixWLndpZHRoPXoqZy50ZXh0dXJlTXVsdCxWLmhlaWdodD1TKmcudGV4dHVyZU11bHQpLGcuY2FudmFzV2lkdGg9eixnLmNhbnZhc0hlaWdodD1TfX0seGcucmVuZGVyVG89ZnVuY3Rpb24oeSxnLHgsVCl7dGhpcy5yZW5kZXIoe2ZvcmNlZENvbnRleHQ6eSxmb3JjZWRab29tOmcsZm9yY2VkUGFuOngsZHJhd0FsbExheWVyczohMCxmb3JjZWRQeFJhdGlvOlR9KX0seGcucmVuZGVyPWZ1bmN0aW9uKHkpe3k9eXx8S1AoKTt2YXIgZz15LmZvcmNlZENvbnRleHQseD15LmRyYXdBbGxMYXllcnMsVD15LmRyYXdPbmx5Tm9kZUxheWVyLEw9eS5mb3JjZWRab29tLEk9eS5mb3JjZWRQYW4sTz10aGlzLCQ9eS5mb3JjZWRQeFJhdGlvPT09dm9pZCAwP3RoaXMuZ2V0UGl4ZWxSYXRpbygpOnkuZm9yY2VkUHhSYXRpbyx6PU8uY3ksUz1PLmRhdGEsVj1TLmNhbnZhc05lZWRzUmVkcmF3LFU9Ty50ZXh0dXJlT25WaWV3cG9ydCYmIWcmJihPLnBpbmNoaW5nfHxPLmhvdmVyRGF0YS5kcmFnZ2luZ3x8Ty5zd2lwZVBhbm5pbmd8fE8uZGF0YS53aGVlbFpvb21pbmcpLGV0PXkubW90aW9uQmx1ciE9PXZvaWQgMD95Lm1vdGlvbkJsdXI6Ty5tb3Rpb25CbHVyLGF0PU8ubW90aW9uQmx1clB4UmF0aW8sbHQ9ei5oYXNDb21wb3VuZE5vZGVzKCksZ3Q9Ty5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzLEx0PSEhKE8uaG92ZXJEYXRhLnNlbGVjdGluZ3x8Ty50b3VjaERhdGEuc2VsZWN0aW5nKTtldD1ldCYmIWcmJk8ubW90aW9uQmx1ckVuYWJsZWQmJiFMdDt2YXIgRXQ9ZXQ7Z3x8KE8ucHJldlB4UmF0aW8hPT0kJiYoTy5pbnZhbGlkYXRlQ29udGFpbmVyQ2xpZW50Q29vcmRzQ2FjaGUoKSxPLm1hdGNoQ2FudmFzU2l6ZShPLmNvbnRhaW5lciksTy5yZWRyYXdIaW50KCJlbGVzIiwhMCksTy5yZWRyYXdIaW50KCJkcmFnIiwhMCkpLE8ucHJldlB4UmF0aW89JCksIWcmJk8ubW90aW9uQmx1clRpbWVvdXQmJmNsZWFyVGltZW91dChPLm1vdGlvbkJsdXJUaW1lb3V0KSxldCYmKE8ubWJGcmFtZXM9PW51bGwmJihPLm1iRnJhbWVzPTApLE8ubWJGcmFtZXMrKyxPLm1iRnJhbWVzPDMmJihFdD0hMSksTy5tYkZyYW1lcz5PLm1pbk1iTG93UXVhbEZyYW1lcyYmKE8ubW90aW9uQmx1clB4UmF0aW89Ty5tYlB4UkJsdXJyeSkpLE8uY2xlYXJpbmdNb3Rpb25CbHVyJiYoTy5tb3Rpb25CbHVyUHhSYXRpbz0xKSxPLnRleHR1cmVEcmF3TGFzdEZyYW1lJiYhVSYmKFZbTy5OT0RFXT0hMCxWW08uU0VMRUNUX0JPWF09ITApO3ZhciBEdD16LnN0eWxlKCksSXQ9ei56b29tKCksenQ9TCE9PXZvaWQgMD9MOkl0LHRlPXoucGFuKCksWHQ9e3g6dGUueCx5OnRlLnl9LEh0PXt6b29tOkl0LHBhbjp7eDp0ZS54LHk6dGUueX19LGllPU8ucHJldlZpZXdwb3J0LFV0PWllPT09dm9pZCAwfHxIdC56b29tIT09aWUuem9vbXx8SHQucGFuLnghPT1pZS5wYW4ueHx8SHQucGFuLnkhPT1pZS5wYW4ueTshVXQmJiEoZ3QmJiFsdCkmJihPLm1vdGlvbkJsdXJQeFJhdGlvPTEpLEkmJihYdD1JKSx6dCo9JCxYdC54Kj0kLFh0LnkqPSQ7dmFyIGZlPU8uZ2V0Q2FjaGVkWlNvcnRlZEVsZXMoKTtmdW5jdGlvbiBnZShEaSx3aSxfcyxaaSxOaSl7dmFyIG5zPURpLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbjtEaS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImRlc3RpbmF0aW9uLW91dCIsTy5jb2xvckZpbGxTdHlsZShEaSwyNTUsMjU1LDI1NSxPLm1vdGlvbkJsdXJUcmFuc3BhcmVuY3kpLERpLmZpbGxSZWN0KHdpLF9zLFppLE5pKSxEaS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249bnN9ZnVuY3Rpb24gc2UoRGksd2kpe3ZhciBfcyxaaSxOaSxuczshTy5jbGVhcmluZ01vdGlvbkJsdXImJihEaT09PVMuYnVmZmVyQ29udGV4dHNbTy5NT1RJT05CTFVSX0JVRkZFUl9OT0RFXXx8RGk9PT1TLmJ1ZmZlckNvbnRleHRzW08uTU9USU9OQkxVUl9CVUZGRVJfRFJBR10pPyhfcz17eDp0ZS54KmF0LHk6dGUueSphdH0sWmk9SXQqYXQsTmk9Ty5jYW52YXNXaWR0aCphdCxucz1PLmNhbnZhc0hlaWdodCphdCk6KF9zPVh0LFppPXp0LE5pPU8uY2FudmFzV2lkdGgsbnM9Ty5jYW52YXNIZWlnaHQpLERpLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksd2k9PT0ibW90aW9uQmx1ciI/Z2UoRGksMCwwLE5pLG5zKTohZyYmKHdpPT09dm9pZCAwfHx3aSkmJkRpLmNsZWFyUmVjdCgwLDAsTmksbnMpLHh8fChEaS50cmFuc2xhdGUoX3MueCxfcy55KSxEaS5zY2FsZShaaSxaaSkpLEkmJkRpLnRyYW5zbGF0ZShJLngsSS55KSxMJiZEaS5zY2FsZShMLEwpfWlmKFV8fChPLnRleHR1cmVEcmF3TGFzdEZyYW1lPSExKSxVKXtpZihPLnRleHR1cmVEcmF3TGFzdEZyYW1lPSEwLCFPLnRleHR1cmVDYWNoZSl7Ty50ZXh0dXJlQ2FjaGU9e30sTy50ZXh0dXJlQ2FjaGUuYmI9ei5tdXRhYmxlRWxlbWVudHMoKS5ib3VuZGluZ0JveCgpLE8udGV4dHVyZUNhY2hlLnRleHR1cmU9Ty5kYXRhLmJ1ZmZlckNhbnZhc2VzW08uVEVYVFVSRV9CVUZGRVJdO3ZhciBOZT1PLmRhdGEuYnVmZmVyQ29udGV4dHNbTy5URVhUVVJFX0JVRkZFUl07TmUuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxOZS5jbGVhclJlY3QoMCwwLE8uY2FudmFzV2lkdGgqTy50ZXh0dXJlTXVsdCxPLmNhbnZhc0hlaWdodCpPLnRleHR1cmVNdWx0KSxPLnJlbmRlcih7Zm9yY2VkQ29udGV4dDpOZSxkcmF3T25seU5vZGVMYXllcjohMCxmb3JjZWRQeFJhdGlvOiQqTy50ZXh0dXJlTXVsdH0pO3ZhciBIdD1PLnRleHR1cmVDYWNoZS52aWV3cG9ydD17em9vbTp6Lnpvb20oKSxwYW46ei5wYW4oKSx3aWR0aDpPLmNhbnZhc1dpZHRoLGhlaWdodDpPLmNhbnZhc0hlaWdodH07SHQubXBhbj17eDooMC1IdC5wYW4ueCkvSHQuem9vbSx5OigwLUh0LnBhbi55KS9IdC56b29tfX1WW08uRFJBR109ITEsVltPLk5PREVdPSExO3ZhciBwZT1TLmNvbnRleHRzW08uTk9ERV0sZ249Ty50ZXh0dXJlQ2FjaGUudGV4dHVyZSxIdD1PLnRleHR1cmVDYWNoZS52aWV3cG9ydDtwZS5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLGV0P2dlKHBlLDAsMCxIdC53aWR0aCxIdC5oZWlnaHQpOnBlLmNsZWFyUmVjdCgwLDAsSHQud2lkdGgsSHQuaGVpZ2h0KTt2YXIgamU9RHQuY29yZSgib3V0c2lkZS10ZXh0dXJlLWJnLWNvbG9yIikudmFsdWUsR2U9RHQuY29yZSgib3V0c2lkZS10ZXh0dXJlLWJnLW9wYWNpdHkiKS52YWx1ZTtPLmNvbG9yRmlsbFN0eWxlKHBlLGplWzBdLGplWzFdLGplWzJdLEdlKSxwZS5maWxsUmVjdCgwLDAsSHQud2lkdGgsSHQuaGVpZ2h0KTt2YXIgSXQ9ei56b29tKCk7c2UocGUsITEpLHBlLmNsZWFyUmVjdChIdC5tcGFuLngsSHQubXBhbi55LEh0LndpZHRoL0h0Lnpvb20vJCxIdC5oZWlnaHQvSHQuem9vbS8kKSxwZS5kcmF3SW1hZ2UoZ24sSHQubXBhbi54LEh0Lm1wYW4ueSxIdC53aWR0aC9IdC56b29tLyQsSHQuaGVpZ2h0L0h0Lnpvb20vJCl9ZWxzZSBPLnRleHR1cmVPblZpZXdwb3J0JiYhZyYmKE8udGV4dHVyZUNhY2hlPW51bGwpO3ZhciB4bj16LmV4dGVudCgpLERuPU8ucGluY2hpbmd8fE8uaG92ZXJEYXRhLmRyYWdnaW5nfHxPLnN3aXBlUGFubmluZ3x8Ty5kYXRhLndoZWVsWm9vbWluZ3x8Ty5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzfHxPLmN5LmFuaW1hdGVkKCksWG49Ty5oaWRlRWRnZXNPblZpZXdwb3J0JiZEbixDbj1bXTtpZihDbltPLk5PREVdPSFWW08uTk9ERV0mJmV0JiYhTy5jbGVhcmVkRm9yTW90aW9uQmx1cltPLk5PREVdfHxPLmNsZWFyaW5nTW90aW9uQmx1cixDbltPLk5PREVdJiYoTy5jbGVhcmVkRm9yTW90aW9uQmx1cltPLk5PREVdPSEwKSxDbltPLkRSQUddPSFWW08uRFJBR10mJmV0JiYhTy5jbGVhcmVkRm9yTW90aW9uQmx1cltPLkRSQUddfHxPLmNsZWFyaW5nTW90aW9uQmx1cixDbltPLkRSQUddJiYoTy5jbGVhcmVkRm9yTW90aW9uQmx1cltPLkRSQUddPSEwKSxWW08uTk9ERV18fHh8fFR8fENuW08uTk9ERV0pe3ZhciBZbj1ldCYmIUNuW08uTk9ERV0mJmF0IT09MSxwZT1nfHwoWW4/Ty5kYXRhLmJ1ZmZlckNvbnRleHRzW08uTU9USU9OQkxVUl9CVUZGRVJfTk9ERV06Uy5jb250ZXh0c1tPLk5PREVdKSxycj1ldCYmIVluPyJtb3Rpb25CbHVyIjp2b2lkIDA7c2UocGUscnIpLFhuP08uZHJhd0NhY2hlZE5vZGVzKHBlLGZlLm5vbmRyYWcsJCx4bik6Ty5kcmF3TGF5ZXJlZEVsZW1lbnRzKHBlLGZlLm5vbmRyYWcsJCx4biksTy5kZWJ1ZyYmTy5kcmF3RGVidWdQb2ludHMocGUsZmUubm9uZHJhZyksIXgmJiFldCYmKFZbTy5OT0RFXT0hMSl9aWYoIVQmJihWW08uRFJBR118fHh8fENuW08uRFJBR10pKXt2YXIgWW49ZXQmJiFDbltPLkRSQUddJiZhdCE9PTEscGU9Z3x8KFluP08uZGF0YS5idWZmZXJDb250ZXh0c1tPLk1PVElPTkJMVVJfQlVGRkVSX0RSQUddOlMuY29udGV4dHNbTy5EUkFHXSk7c2UocGUsZXQmJiFZbj8ibW90aW9uQmx1ciI6dm9pZCAwKSxYbj9PLmRyYXdDYWNoZWROb2RlcyhwZSxmZS5kcmFnLCQseG4pOk8uZHJhd0NhY2hlZEVsZW1lbnRzKHBlLGZlLmRyYWcsJCx4biksTy5kZWJ1ZyYmTy5kcmF3RGVidWdQb2ludHMocGUsZmUuZHJhZyksIXgmJiFldCYmKFZbTy5EUkFHXT0hMSl9aWYoTy5zaG93RnBzfHwhVCYmVltPLlNFTEVDVF9CT1hdJiYheCl7dmFyIHBlPWd8fFMuY29udGV4dHNbTy5TRUxFQ1RfQk9YXTtpZihzZShwZSksTy5zZWxlY3Rpb25bNF09PTEmJihPLmhvdmVyRGF0YS5zZWxlY3Rpbmd8fE8udG91Y2hEYXRhLnNlbGVjdGluZykpe3ZhciBJdD1PLmN5Lnpvb20oKSx3cj1EdC5jb3JlKCJzZWxlY3Rpb24tYm94LWJvcmRlci13aWR0aCIpLnZhbHVlL0l0O3BlLmxpbmVXaWR0aD13cixwZS5maWxsU3R5bGU9InJnYmEoIitEdC5jb3JlKCJzZWxlY3Rpb24tYm94LWNvbG9yIikudmFsdWVbMF0rIiwiK0R0LmNvcmUoInNlbGVjdGlvbi1ib3gtY29sb3IiKS52YWx1ZVsxXSsiLCIrRHQuY29yZSgic2VsZWN0aW9uLWJveC1jb2xvciIpLnZhbHVlWzJdKyIsIitEdC5jb3JlKCJzZWxlY3Rpb24tYm94LW9wYWNpdHkiKS52YWx1ZSsiKSIscGUuZmlsbFJlY3QoTy5zZWxlY3Rpb25bMF0sTy5zZWxlY3Rpb25bMV0sTy5zZWxlY3Rpb25bMl0tTy5zZWxlY3Rpb25bMF0sTy5zZWxlY3Rpb25bM10tTy5zZWxlY3Rpb25bMV0pLHdyPjAmJihwZS5zdHJva2VTdHlsZT0icmdiYSgiK0R0LmNvcmUoInNlbGVjdGlvbi1ib3gtYm9yZGVyLWNvbG9yIikudmFsdWVbMF0rIiwiK0R0LmNvcmUoInNlbGVjdGlvbi1ib3gtYm9yZGVyLWNvbG9yIikudmFsdWVbMV0rIiwiK0R0LmNvcmUoInNlbGVjdGlvbi1ib3gtYm9yZGVyLWNvbG9yIikudmFsdWVbMl0rIiwiK0R0LmNvcmUoInNlbGVjdGlvbi1ib3gtb3BhY2l0eSIpLnZhbHVlKyIpIixwZS5zdHJva2VSZWN0KE8uc2VsZWN0aW9uWzBdLE8uc2VsZWN0aW9uWzFdLE8uc2VsZWN0aW9uWzJdLU8uc2VsZWN0aW9uWzBdLE8uc2VsZWN0aW9uWzNdLU8uc2VsZWN0aW9uWzFdKSl9aWYoUy5iZ0FjdGl2ZVBvc2lzdGlvbiYmIU8uaG92ZXJEYXRhLnNlbGVjdGluZyl7dmFyIEl0PU8uY3kuem9vbSgpLHVyPVMuYmdBY3RpdmVQb3Npc3Rpb247cGUuZmlsbFN0eWxlPSJyZ2JhKCIrRHQuY29yZSgiYWN0aXZlLWJnLWNvbG9yIikudmFsdWVbMF0rIiwiK0R0LmNvcmUoImFjdGl2ZS1iZy1jb2xvciIpLnZhbHVlWzFdKyIsIitEdC5jb3JlKCJhY3RpdmUtYmctY29sb3IiKS52YWx1ZVsyXSsiLCIrRHQuY29yZSgiYWN0aXZlLWJnLW9wYWNpdHkiKS52YWx1ZSsiKSIscGUuYmVnaW5QYXRoKCkscGUuYXJjKHVyLngsdXIueSxEdC5jb3JlKCJhY3RpdmUtYmctc2l6ZSIpLnBmVmFsdWUvSXQsMCwyKk1hdGguUEkpLHBlLmZpbGwoKX12YXIgZXI9Ty5sYXN0UmVkcmF3VGltZTtpZihPLnNob3dGcHMmJmVyKXtlcj1NYXRoLnJvdW5kKGVyKTt2YXIgYm49TWF0aC5yb3VuZCgxZTMvZXIpO3BlLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCkscGUuZmlsbFN0eWxlPSJyZ2JhKDI1NSwgMCwgMCwgMC43NSkiLHBlLnN0cm9rZVN0eWxlPSJyZ2JhKDI1NSwgMCwgMCwgMC43NSkiLHBlLmxpbmVXaWR0aD0xLHBlLmZpbGxUZXh0KCIxIGZyYW1lID0gIitlcisiIG1zID0gIitibisiIGZwcyIsMCwyMCk7dmFyIHByPTYwO3BlLnN0cm9rZVJlY3QoMCwzMCwyNTAsMjApLHBlLmZpbGxSZWN0KDAsMzAsMjUwKk1hdGgubWluKGJuL3ByLDEpLDIwKX14fHwoVltPLlNFTEVDVF9CT1hdPSExKX1pZihldCYmYXQhPT0xKXt2YXIgZnI9Uy5jb250ZXh0c1tPLk5PREVdLHJpPU8uZGF0YS5idWZmZXJDYW52YXNlc1tPLk1PVElPTkJMVVJfQlVGRkVSX05PREVdLF9pPVMuY29udGV4dHNbTy5EUkFHXSxpYT1PLmRhdGEuYnVmZmVyQ2FudmFzZXNbTy5NT1RJT05CTFVSX0JVRkZFUl9EUkFHXSxMYT1mdW5jdGlvbih3aSxfcyxaaSl7d2kuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxaaXx8IUV0P3dpLmNsZWFyUmVjdCgwLDAsTy5jYW52YXNXaWR0aCxPLmNhbnZhc0hlaWdodCk6Z2Uod2ksMCwwLE8uY2FudmFzV2lkdGgsTy5jYW52YXNIZWlnaHQpO3ZhciBOaT1hdDt3aS5kcmF3SW1hZ2UoX3MsMCwwLE8uY2FudmFzV2lkdGgqTmksTy5jYW52YXNIZWlnaHQqTmksMCwwLE8uY2FudmFzV2lkdGgsTy5jYW52YXNIZWlnaHQpfTsoVltPLk5PREVdfHxDbltPLk5PREVdKSYmKExhKGZyLHJpLENuW08uTk9ERV0pLFZbTy5OT0RFXT0hMSksKFZbTy5EUkFHXXx8Q25bTy5EUkFHXSkmJihMYShfaSxpYSxDbltPLkRSQUddKSxWW08uRFJBR109ITEpfU8ucHJldlZpZXdwb3J0PUh0LE8uY2xlYXJpbmdNb3Rpb25CbHVyJiYoTy5jbGVhcmluZ01vdGlvbkJsdXI9ITEsTy5tb3Rpb25CbHVyQ2xlYXJlZD0hMCxPLm1vdGlvbkJsdXI9ITApLGV0JiYoTy5tb3Rpb25CbHVyVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Ty5tb3Rpb25CbHVyVGltZW91dD1udWxsLE8uY2xlYXJlZEZvck1vdGlvbkJsdXJbTy5OT0RFXT0hMSxPLmNsZWFyZWRGb3JNb3Rpb25CbHVyW08uRFJBR109ITEsTy5tb3Rpb25CbHVyPSExLE8uY2xlYXJpbmdNb3Rpb25CbHVyPSFVLE8ubWJGcmFtZXM9MCxWW08uTk9ERV09ITAsVltPLkRSQUddPSEwLE8ucmVkcmF3KCl9LGxwdCkpLGd8fHouZW1pdCgicmVuZGVyIil9O3ZhciBJMz17fTtJMy5kcmF3UG9seWdvblBhdGg9ZnVuY3Rpb24oeSxnLHgsVCxMLEkpe3ZhciBPPVQvMiwkPUwvMjt5LmJlZ2luUGF0aCYmeS5iZWdpblBhdGgoKSx5Lm1vdmVUbyhnK08qSVswXSx4KyQqSVsxXSk7Zm9yKHZhciB6PTE7ejxJLmxlbmd0aC8yO3orKyl5LmxpbmVUbyhnK08qSVt6KjJdLHgrJCpJW3oqMisxXSk7eS5jbG9zZVBhdGgoKX0sSTMuZHJhd1JvdW5kUG9seWdvblBhdGg9ZnVuY3Rpb24oeSxnLHgsVCxMLEkpe3ZhciBPPVQvMiwkPUwvMix6PUNMKFQsTCk7eS5iZWdpblBhdGgmJnkuYmVnaW5QYXRoKCk7Zm9yKHZhciBTPTA7UzxJLmxlbmd0aC80O1MrKyl7dmFyIFY9dm9pZCAwLFU9dm9pZCAwO1M9PT0wP1Y9SS5sZW5ndGgtMjpWPVMqNC0yLFU9Uyo0KzI7dmFyIGV0PWcrTypJW1MqNF0sYXQ9eCskKklbUyo0KzFdLGx0PS1JW1ZdKklbVV0tSVtWKzFdKklbVSsxXSxndD16L01hdGgudGFuKE1hdGguYWNvcyhsdCkvMiksTHQ9ZXQtZ3QqSVtWXSxFdD1hdC1ndCpJW1YrMV0sRHQ9ZXQrZ3QqSVtVXSxJdD1hdCtndCpJW1UrMV07Uz09PTA/eS5tb3ZlVG8oTHQsRXQpOnkubGluZVRvKEx0LEV0KSx5LmFyY1RvKGV0LGF0LER0LEl0LHopfXkuY2xvc2VQYXRoKCl9LEkzLmRyYXdSb3VuZFJlY3RhbmdsZVBhdGg9ZnVuY3Rpb24oeSxnLHgsVCxMKXt2YXIgST1ULzIsTz1MLzIsJD1tayhULEwpO3kuYmVnaW5QYXRoJiZ5LmJlZ2luUGF0aCgpLHkubW92ZVRvKGcseC1PKSx5LmFyY1RvKGcrSSx4LU8sZytJLHgsJCkseS5hcmNUbyhnK0kseCtPLGcseCtPLCQpLHkuYXJjVG8oZy1JLHgrTyxnLUkseCwkKSx5LmFyY1RvKGctSSx4LU8sZyx4LU8sJCkseS5saW5lVG8oZyx4LU8pLHkuY2xvc2VQYXRoKCl9LEkzLmRyYXdCb3R0b21Sb3VuZFJlY3RhbmdsZVBhdGg9ZnVuY3Rpb24oeSxnLHgsVCxMKXt2YXIgST1ULzIsTz1MLzIsJD1tayhULEwpO3kuYmVnaW5QYXRoJiZ5LmJlZ2luUGF0aCgpLHkubW92ZVRvKGcseC1PKSx5LmxpbmVUbyhnK0kseC1PKSx5LmxpbmVUbyhnK0kseCkseS5hcmNUbyhnK0kseCtPLGcseCtPLCQpLHkuYXJjVG8oZy1JLHgrTyxnLUkseCwkKSx5LmxpbmVUbyhnLUkseC1PKSx5LmxpbmVUbyhnLHgtTykseS5jbG9zZVBhdGgoKX0sSTMuZHJhd0N1dFJlY3RhbmdsZVBhdGg9ZnVuY3Rpb24oeSxnLHgsVCxMKXt2YXIgST1ULzIsTz1MLzIsJD1zRigpO3kuYmVnaW5QYXRoJiZ5LmJlZ2luUGF0aCgpLHkubW92ZVRvKGctSSskLHgtTykseS5saW5lVG8oZytJLSQseC1PKSx5LmxpbmVUbyhnK0kseC1PKyQpLHkubGluZVRvKGcrSSx4K08tJCkseS5saW5lVG8oZytJLSQseCtPKSx5LmxpbmVUbyhnLUkrJCx4K08pLHkubGluZVRvKGctSSx4K08tJCkseS5saW5lVG8oZy1JLHgtTyskKSx5LmNsb3NlUGF0aCgpfSxJMy5kcmF3QmFycmVsUGF0aD1mdW5jdGlvbih5LGcseCxULEwpe3ZhciBJPVQvMixPPUwvMiwkPWctSSx6PWcrSSxTPXgtTyxWPXgrTyxVPVNMKFQsTCksZXQ9VS53aWR0aE9mZnNldCxhdD1VLmhlaWdodE9mZnNldCxsdD1VLmN0cmxQdE9mZnNldFBjdCpldDt5LmJlZ2luUGF0aCYmeS5iZWdpblBhdGgoKSx5Lm1vdmVUbygkLFMrYXQpLHkubGluZVRvKCQsVi1hdCkseS5xdWFkcmF0aWNDdXJ2ZVRvKCQrbHQsViwkK2V0LFYpLHkubGluZVRvKHotZXQsVikseS5xdWFkcmF0aWNDdXJ2ZVRvKHotbHQsVix6LFYtYXQpLHkubGluZVRvKHosUythdCkseS5xdWFkcmF0aWNDdXJ2ZVRvKHotbHQsUyx6LWV0LFMpLHkubGluZVRvKCQrZXQsUykseS5xdWFkcmF0aWNDdXJ2ZVRvKCQrbHQsUywkLFMrYXQpLHkuY2xvc2VQYXRoKCl9O2Zvcih2YXIgQ3R0PU1hdGguc2luKDApLFN0dD1NYXRoLmNvcygwKSxRQj17fSxaQj17fSxBdHQ9TWF0aC5QSS80MCxIaz0wKk1hdGguUEk7SGs8MipNYXRoLlBJO0hrKz1BdHQpUUJbSGtdPU1hdGguc2luKEhrKSxaQltIa109TWF0aC5jb3MoSGspO0kzLmRyYXdFbGxpcHNlUGF0aD1mdW5jdGlvbih5LGcseCxULEwpe2lmKHkuYmVnaW5QYXRoJiZ5LmJlZ2luUGF0aCgpLHkuZWxsaXBzZSl5LmVsbGlwc2UoZyx4LFQvMixMLzIsMCwwLDIqTWF0aC5QSSk7ZWxzZSBmb3IodmFyIEksTywkPVQvMix6PUwvMixTPTAqTWF0aC5QSTtTPDIqTWF0aC5QSTtTKz1BdHQpST1nLSQqUUJbU10qQ3R0KyQqWkJbU10qU3R0LE89eCt6KlpCW1NdKkN0dCt6KlFCW1NdKlN0dCxTPT09MD95Lm1vdmVUbyhJLE8pOnkubGluZVRvKEksTyk7eS5jbG9zZVBhdGgoKX07dmFyIEVUPXt9O0VULmNyZWF0ZUJ1ZmZlcj1mdW5jdGlvbih5LGcpe3ZhciB4PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3JldHVybiB4LndpZHRoPXkseC5oZWlnaHQ9ZyxbeCx4LmdldENvbnRleHQoIjJkIildfSxFVC5idWZmZXJDYW52YXNJbWFnZT1mdW5jdGlvbih5KXt2YXIgZz10aGlzLmN5LHg9Zy5tdXRhYmxlRWxlbWVudHMoKSxUPXguYm91bmRpbmdCb3goKSxMPXRoaXMuZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpLEk9eS5mdWxsP01hdGguY2VpbChULncpOkxbMl0sTz15LmZ1bGw/TWF0aC5jZWlsKFQuaCk6TFszXSwkPXN0KHkubWF4V2lkdGgpfHxzdCh5Lm1heEhlaWdodCksej10aGlzLmdldFBpeGVsUmF0aW8oKSxTPTE7aWYoeS5zY2FsZSE9PXZvaWQgMClJKj15LnNjYWxlLE8qPXkuc2NhbGUsUz15LnNjYWxlO2Vsc2UgaWYoJCl7dmFyIFY9MS8wLFU9MS8wO3N0KHkubWF4V2lkdGgpJiYoVj1TKnkubWF4V2lkdGgvSSksc3QoeS5tYXhIZWlnaHQpJiYoVT1TKnkubWF4SGVpZ2h0L08pLFM9TWF0aC5taW4oVixVKSxJKj1TLE8qPVN9JHx8KEkqPXosTyo9eixTKj16KTt2YXIgZXQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7ZXQud2lkdGg9SSxldC5oZWlnaHQ9TyxldC5zdHlsZS53aWR0aD1JKyJweCIsZXQuc3R5bGUuaGVpZ2h0PU8rInB4Ijt2YXIgYXQ9ZXQuZ2V0Q29udGV4dCgiMmQiKTtpZihJPjAmJk8+MCl7YXQuY2xlYXJSZWN0KDAsMCxJLE8pLGF0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0ic291cmNlLW92ZXIiO3ZhciBsdD10aGlzLmdldENhY2hlZFpTb3J0ZWRFbGVzKCk7aWYoeS5mdWxsKWF0LnRyYW5zbGF0ZSgtVC54MSpTLC1ULnkxKlMpLGF0LnNjYWxlKFMsUyksdGhpcy5kcmF3RWxlbWVudHMoYXQsbHQpLGF0LnNjYWxlKDEvUywxL1MpLGF0LnRyYW5zbGF0ZShULngxKlMsVC55MSpTKTtlbHNle3ZhciBndD1nLnBhbigpLEx0PXt4Omd0LngqUyx5Omd0LnkqU307Uyo9Zy56b29tKCksYXQudHJhbnNsYXRlKEx0LngsTHQueSksYXQuc2NhbGUoUyxTKSx0aGlzLmRyYXdFbGVtZW50cyhhdCxsdCksYXQuc2NhbGUoMS9TLDEvUyksYXQudHJhbnNsYXRlKC1MdC54LC1MdC55KX15LmJnJiYoYXQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJkZXN0aW5hdGlvbi1vdmVyIixhdC5maWxsU3R5bGU9eS5iZyxhdC5yZWN0KDAsMCxJLE8pLGF0LmZpbGwoKSl9cmV0dXJuIGV0fTtmdW5jdGlvbiBocHQoeSxnKXtmb3IodmFyIHg9YXRvYih5KSxUPW5ldyBBcnJheUJ1ZmZlcih4Lmxlbmd0aCksTD1uZXcgVWludDhBcnJheShUKSxJPTA7STx4Lmxlbmd0aDtJKyspTFtJXT14LmNoYXJDb2RlQXQoSSk7cmV0dXJuIG5ldyBCbG9iKFtUXSx7dHlwZTpnfSl9ZnVuY3Rpb24gTHR0KHkpe3ZhciBnPXkuaW5kZXhPZigiLCIpO3JldHVybiB5LnN1YnN0cihnKzEpfWZ1bmN0aW9uIE10dCh5LGcseCl7dmFyIFQ9ZnVuY3Rpb24oKXtyZXR1cm4gZy50b0RhdGFVUkwoeCx5LnF1YWxpdHkpfTtzd2l0Y2goeS5vdXRwdXQpe2Nhc2UiYmxvYi1wcm9taXNlIjpyZXR1cm4gbmV3IFc1KGZ1bmN0aW9uKEwsSSl7dHJ5e2cudG9CbG9iKGZ1bmN0aW9uKE8pe08hPW51bGw/TChPKTpJKG5ldyBFcnJvcigiYGNhbnZhcy50b0Jsb2IoKWAgc2VudCBhIG51bGwgdmFsdWUgaW4gaXRzIGNhbGxiYWNrIikpfSx4LHkucXVhbGl0eSl9Y2F0Y2goTyl7SShPKX19KTtjYXNlImJsb2IiOnJldHVybiBocHQoTHR0KFQoKSkseCk7Y2FzZSJiYXNlNjQiOnJldHVybiBMdHQoVCgpKTtjYXNlImJhc2U2NHVyaSI6ZGVmYXVsdDpyZXR1cm4gVCgpfX1FVC5wbmc9ZnVuY3Rpb24oeSl7cmV0dXJuIE10dCh5LHRoaXMuYnVmZmVyQ2FudmFzSW1hZ2UoeSksImltYWdlL3BuZyIpfSxFVC5qcGc9ZnVuY3Rpb24oeSl7cmV0dXJuIE10dCh5LHRoaXMuYnVmZmVyQ2FudmFzSW1hZ2UoeSksImltYWdlL2pwZWciKX07dmFyIER0dD17fTtEdHQubm9kZVNoYXBlSW1wbD1mdW5jdGlvbih5LGcseCxULEwsSSxPKXtzd2l0Y2goeSl7Y2FzZSJlbGxpcHNlIjpyZXR1cm4gdGhpcy5kcmF3RWxsaXBzZVBhdGgoZyx4LFQsTCxJKTtjYXNlInBvbHlnb24iOnJldHVybiB0aGlzLmRyYXdQb2x5Z29uUGF0aChnLHgsVCxMLEksTyk7Y2FzZSJyb3VuZC1wb2x5Z29uIjpyZXR1cm4gdGhpcy5kcmF3Um91bmRQb2x5Z29uUGF0aChnLHgsVCxMLEksTyk7Y2FzZSJyb3VuZHJlY3RhbmdsZSI6Y2FzZSJyb3VuZC1yZWN0YW5nbGUiOnJldHVybiB0aGlzLmRyYXdSb3VuZFJlY3RhbmdsZVBhdGgoZyx4LFQsTCxJKTtjYXNlImN1dHJlY3RhbmdsZSI6Y2FzZSJjdXQtcmVjdGFuZ2xlIjpyZXR1cm4gdGhpcy5kcmF3Q3V0UmVjdGFuZ2xlUGF0aChnLHgsVCxMLEkpO2Nhc2UiYm90dG9tcm91bmRyZWN0YW5nbGUiOmNhc2UiYm90dG9tLXJvdW5kLXJlY3RhbmdsZSI6cmV0dXJuIHRoaXMuZHJhd0JvdHRvbVJvdW5kUmVjdGFuZ2xlUGF0aChnLHgsVCxMLEkpO2Nhc2UiYmFycmVsIjpyZXR1cm4gdGhpcy5kcmF3QmFycmVsUGF0aChnLHgsVCxMLEkpfX07dmFyIGZwdD1KQixFYz1KQi5wcm90b3R5cGU7RWMuQ0FOVkFTX0xBWUVSUz0zLEVjLlNFTEVDVF9CT1g9MCxFYy5EUkFHPTEsRWMuTk9ERT0yLEVjLkJVRkZFUl9DT1VOVD0zLEVjLlRFWFRVUkVfQlVGRkVSPTAsRWMuTU9USU9OQkxVUl9CVUZGRVJfTk9ERT0xLEVjLk1PVElPTkJMVVJfQlVGRkVSX0RSQUc9MjtmdW5jdGlvbiBKQih5KXt2YXIgZz10aGlzO2cuZGF0YT17Y2FudmFzZXM6bmV3IEFycmF5KEVjLkNBTlZBU19MQVlFUlMpLGNvbnRleHRzOm5ldyBBcnJheShFYy5DQU5WQVNfTEFZRVJTKSxjYW52YXNOZWVkc1JlZHJhdzpuZXcgQXJyYXkoRWMuQ0FOVkFTX0xBWUVSUyksYnVmZmVyQ2FudmFzZXM6bmV3IEFycmF5KEVjLkJVRkZFUl9DT1VOVCksYnVmZmVyQ29udGV4dHM6bmV3IEFycmF5KEVjLkNBTlZBU19MQVlFUlMpfTt2YXIgeD0iLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIixUPSJyZ2JhKDAsMCwwLDApIjtnLmRhdGEuY2FudmFzQ29udGFpbmVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3ZhciBMPWcuZGF0YS5jYW52YXNDb250YWluZXIuc3R5bGU7Zy5kYXRhLmNhbnZhc0NvbnRhaW5lci5zdHlsZVt4XT1ULEwucG9zaXRpb249InJlbGF0aXZlIixMLnpJbmRleD0iMCIsTC5vdmVyZmxvdz0iaGlkZGVuIjt2YXIgST15LmN5LmNvbnRhaW5lcigpO0kuYXBwZW5kQ2hpbGQoZy5kYXRhLmNhbnZhc0NvbnRhaW5lciksSS5zdHlsZVt4XT1UO3ZhciBPPXsiLXdlYmtpdC11c2VyLXNlbGVjdCI6Im5vbmUiLCItbW96LXVzZXItc2VsZWN0IjoiLW1vei1ub25lIiwidXNlci1zZWxlY3QiOiJub25lIiwiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIjoicmdiYSgwLDAsMCwwKSIsIm91dGxpbmUtc3R5bGUiOiJub25lIn07T3QoKSYmKE9bIi1tcy10b3VjaC1hY3Rpb24iXT0ibm9uZSIsT1sidG91Y2gtYWN0aW9uIl09Im5vbmUiKTtmb3IodmFyICQ9MDskPEVjLkNBTlZBU19MQVlFUlM7JCsrKXt2YXIgej1nLmRhdGEuY2FudmFzZXNbJF09ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7Zy5kYXRhLmNvbnRleHRzWyRdPXouZ2V0Q29udGV4dCgiMmQiKSxPYmplY3Qua2V5cyhPKS5mb3JFYWNoKGZ1bmN0aW9uKGVyKXt6LnN0eWxlW2VyXT1PW2VyXX0pLHouc3R5bGUucG9zaXRpb249ImFic29sdXRlIix6LnNldEF0dHJpYnV0ZSgiZGF0YS1pZCIsImxheWVyIiskKSx6LnN0eWxlLnpJbmRleD1TdHJpbmcoRWMuQ0FOVkFTX0xBWUVSUy0kKSxnLmRhdGEuY2FudmFzQ29udGFpbmVyLmFwcGVuZENoaWxkKHopLGcuZGF0YS5jYW52YXNOZWVkc1JlZHJhd1skXT0hMX1nLmRhdGEudG9wQ2FudmFzPWcuZGF0YS5jYW52YXNlc1swXSxnLmRhdGEuY2FudmFzZXNbRWMuTk9ERV0uc2V0QXR0cmlidXRlKCJkYXRhLWlkIiwibGF5ZXIiK0VjLk5PREUrIi1ub2RlIiksZy5kYXRhLmNhbnZhc2VzW0VjLlNFTEVDVF9CT1hdLnNldEF0dHJpYnV0ZSgiZGF0YS1pZCIsImxheWVyIitFYy5TRUxFQ1RfQk9YKyItc2VsZWN0Ym94IiksZy5kYXRhLmNhbnZhc2VzW0VjLkRSQUddLnNldEF0dHJpYnV0ZSgiZGF0YS1pZCIsImxheWVyIitFYy5EUkFHKyItZHJhZyIpO2Zvcih2YXIgJD0wOyQ8RWMuQlVGRkVSX0NPVU5UOyQrKylnLmRhdGEuYnVmZmVyQ2FudmFzZXNbJF09ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksZy5kYXRhLmJ1ZmZlckNvbnRleHRzWyRdPWcuZGF0YS5idWZmZXJDYW52YXNlc1skXS5nZXRDb250ZXh0KCIyZCIpLGcuZGF0YS5idWZmZXJDYW52YXNlc1skXS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGcuZGF0YS5idWZmZXJDYW52YXNlc1skXS5zZXRBdHRyaWJ1dGUoImRhdGEtaWQiLCJidWZmZXIiKyQpLGcuZGF0YS5idWZmZXJDYW52YXNlc1skXS5zdHlsZS56SW5kZXg9U3RyaW5nKC0kLTEpLGcuZGF0YS5idWZmZXJDYW52YXNlc1skXS5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iO2cucGF0aHNFbmFibGVkPSEwO3ZhciBTPVJkKCksVj1mdW5jdGlvbihibil7cmV0dXJue3g6KGJuLngxK2JuLngyKS8yLHk6KGJuLnkxK2JuLnkyKS8yfX0sVT1mdW5jdGlvbihibil7cmV0dXJue3g6LWJuLncvMix5Oi1ibi5oLzJ9fSxldD1mdW5jdGlvbihibil7dmFyIHByPWJuWzBdLl9wcml2YXRlLGZyPXByLm9sZEJhY2tncm91bmRUaW1lc3RhbXA9PT1wci5iYWNrZ3JvdW5kVGltZXN0YW1wO3JldHVybiFmcn0sYXQ9ZnVuY3Rpb24oYm4pe3JldHVybiBiblswXS5fcHJpdmF0ZS5ub2RlS2V5fSxsdD1mdW5jdGlvbihibil7cmV0dXJuIGJuWzBdLl9wcml2YXRlLmxhYmVsU3R5bGVLZXl9LGd0PWZ1bmN0aW9uKGJuKXtyZXR1cm4gYm5bMF0uX3ByaXZhdGUuc291cmNlTGFiZWxTdHlsZUtleX0sTHQ9ZnVuY3Rpb24oYm4pe3JldHVybiBiblswXS5fcHJpdmF0ZS50YXJnZXRMYWJlbFN0eWxlS2V5fSxFdD1mdW5jdGlvbihibixwcixmcixyaSxfaSl7cmV0dXJuIGcuZHJhd0VsZW1lbnQoYm4scHIsZnIsITEsITEsX2kpfSxEdD1mdW5jdGlvbihibixwcixmcixyaSxfaSl7cmV0dXJuIGcuZHJhd0VsZW1lbnRUZXh0KGJuLHByLGZyLHJpLCJtYWluIixfaSl9LEl0PWZ1bmN0aW9uKGJuLHByLGZyLHJpLF9pKXtyZXR1cm4gZy5kcmF3RWxlbWVudFRleHQoYm4scHIsZnIscmksInNvdXJjZSIsX2kpfSx6dD1mdW5jdGlvbihibixwcixmcixyaSxfaSl7cmV0dXJuIGcuZHJhd0VsZW1lbnRUZXh0KGJuLHByLGZyLHJpLCJ0YXJnZXQiLF9pKX0sdGU9ZnVuY3Rpb24oYm4pe3JldHVybiBibi5ib3VuZGluZ0JveCgpLGJuWzBdLl9wcml2YXRlLmJvZHlCb3VuZHN9LFh0PWZ1bmN0aW9uKGJuKXtyZXR1cm4gYm4uYm91bmRpbmdCb3goKSxiblswXS5fcHJpdmF0ZS5sYWJlbEJvdW5kcy5tYWlufHxTfSxIdD1mdW5jdGlvbihibil7cmV0dXJuIGJuLmJvdW5kaW5nQm94KCksYm5bMF0uX3ByaXZhdGUubGFiZWxCb3VuZHMuc291cmNlfHxTfSxpZT1mdW5jdGlvbihibil7cmV0dXJuIGJuLmJvdW5kaW5nQm94KCksYm5bMF0uX3ByaXZhdGUubGFiZWxCb3VuZHMudGFyZ2V0fHxTfSxVdD1mdW5jdGlvbihibixwcil7cmV0dXJuIHByfSxmZT1mdW5jdGlvbihibil7cmV0dXJuIFYodGUoYm4pKX0sZ2U9ZnVuY3Rpb24oYm4scHIsZnIpe3ZhciByaT1ibj9ibisiLSI6IiI7cmV0dXJue3g6cHIueCtmci5wc3R5bGUocmkrInRleHQtbWFyZ2luLXgiKS5wZlZhbHVlLHk6cHIueStmci5wc3R5bGUocmkrInRleHQtbWFyZ2luLXkiKS5wZlZhbHVlfX0sc2U9ZnVuY3Rpb24oYm4scHIsZnIpe3ZhciByaT1iblswXS5fcHJpdmF0ZS5yc2NyYXRjaDtyZXR1cm57eDpyaVtwcl0seTpyaVtmcl19fSxOZT1mdW5jdGlvbihibil7cmV0dXJuIGdlKCIiLHNlKGJuLCJsYWJlbFgiLCJsYWJlbFkiKSxibil9LHBlPWZ1bmN0aW9uKGJuKXtyZXR1cm4gZ2UoInNvdXJjZSIsc2UoYm4sInNvdXJjZUxhYmVsWCIsInNvdXJjZUxhYmVsWSIpLGJuKX0sZ249ZnVuY3Rpb24oYm4pe3JldHVybiBnZSgidGFyZ2V0IixzZShibiwidGFyZ2V0TGFiZWxYIiwidGFyZ2V0TGFiZWxZIiksYm4pfSxqZT1mdW5jdGlvbihibil7cmV0dXJuIFUodGUoYm4pKX0sR2U9ZnVuY3Rpb24oYm4pe3JldHVybiBVKEh0KGJuKSl9LHhuPWZ1bmN0aW9uKGJuKXtyZXR1cm4gVShpZShibikpfSxEbj1mdW5jdGlvbihibil7dmFyIHByPVh0KGJuKSxmcj1VKFh0KGJuKSk7aWYoYm4uaXNOb2RlKCkpe3N3aXRjaChibi5wc3R5bGUoInRleHQtaGFsaWduIikudmFsdWUpe2Nhc2UibGVmdCI6ZnIueD0tcHIudzticmVhaztjYXNlInJpZ2h0Ijpmci54PTA7YnJlYWt9c3dpdGNoKGJuLnBzdHlsZSgidGV4dC12YWxpZ24iKS52YWx1ZSl7Y2FzZSJ0b3AiOmZyLnk9LXByLmg7YnJlYWs7Y2FzZSJib3R0b20iOmZyLnk9MDticmVha319cmV0dXJuIGZyfSxYbj1nLmRhdGEuZWxlVHhyQ2FjaGU9bmV3IGprKGcse2dldEtleTphdCxkb2VzRWxlSW52YWxpZGF0ZUtleTpldCxkcmF3RWxlbWVudDpFdCxnZXRCb3VuZGluZ0JveDp0ZSxnZXRSb3RhdGlvblBvaW50OmZlLGdldFJvdGF0aW9uT2Zmc2V0OmplLGFsbG93RWRnZVR4ckNhY2hpbmc6ITEsYWxsb3dQYXJlbnRUeHJDYWNoaW5nOiExfSksQ249Zy5kYXRhLmxibFR4ckNhY2hlPW5ldyBqayhnLHtnZXRLZXk6bHQsZHJhd0VsZW1lbnQ6RHQsZ2V0Qm91bmRpbmdCb3g6WHQsZ2V0Um90YXRpb25Qb2ludDpOZSxnZXRSb3RhdGlvbk9mZnNldDpEbixpc1Zpc2libGU6VXR9KSxZbj1nLmRhdGEuc2xiVHhyQ2FjaGU9bmV3IGprKGcse2dldEtleTpndCxkcmF3RWxlbWVudDpJdCxnZXRCb3VuZGluZ0JveDpIdCxnZXRSb3RhdGlvblBvaW50OnBlLGdldFJvdGF0aW9uT2Zmc2V0OkdlLGlzVmlzaWJsZTpVdH0pLHJyPWcuZGF0YS50bGJUeHJDYWNoZT1uZXcgamsoZyx7Z2V0S2V5Okx0LGRyYXdFbGVtZW50Onp0LGdldEJvdW5kaW5nQm94OmllLGdldFJvdGF0aW9uUG9pbnQ6Z24sZ2V0Um90YXRpb25PZmZzZXQ6eG4saXNWaXNpYmxlOlV0fSksd3I9Zy5kYXRhLmx5clR4ckNhY2hlPW5ldyB5dHQoZyk7Zy5vblVwZGF0ZUVsZUNhbGNzKGZ1bmN0aW9uKGJuLHByKXtYbi5pbnZhbGlkYXRlRWxlbWVudHMocHIpLENuLmludmFsaWRhdGVFbGVtZW50cyhwciksWW4uaW52YWxpZGF0ZUVsZW1lbnRzKHByKSxyci5pbnZhbGlkYXRlRWxlbWVudHMocHIpLHdyLmludmFsaWRhdGVFbGVtZW50cyhwcik7Zm9yKHZhciBmcj0wO2ZyPHByLmxlbmd0aDtmcisrKXt2YXIgcmk9cHJbZnJdLl9wcml2YXRlO3JpLm9sZEJhY2tncm91bmRUaW1lc3RhbXA9cmkuYmFja2dyb3VuZFRpbWVzdGFtcH19KTt2YXIgdXI9ZnVuY3Rpb24oYm4pe2Zvcih2YXIgcHI9MDtwcjxibi5sZW5ndGg7cHIrKyl3ci5lbnF1ZXVlRWxlbWVudFJlZmluZW1lbnQoYm5bcHJdLmVsZSl9O1huLm9uRGVxdWV1ZSh1ciksQ24ub25EZXF1ZXVlKHVyKSxZbi5vbkRlcXVldWUodXIpLHJyLm9uRGVxdWV1ZSh1cil9RWMucmVkcmF3SGludD1mdW5jdGlvbih5LGcpe3ZhciB4PXRoaXM7c3dpdGNoKHkpe2Nhc2UiZWxlcyI6eC5kYXRhLmNhbnZhc05lZWRzUmVkcmF3W0VjLk5PREVdPWc7YnJlYWs7Y2FzZSJkcmFnIjp4LmRhdGEuY2FudmFzTmVlZHNSZWRyYXdbRWMuRFJBR109ZzticmVhaztjYXNlInNlbGVjdCI6eC5kYXRhLmNhbnZhc05lZWRzUmVkcmF3W0VjLlNFTEVDVF9CT1hdPWc7YnJlYWt9fTt2YXIgSXR0PXR5cGVvZiBQYXRoMkQ8InUiO0VjLnBhdGgyZEVuYWJsZWQ9ZnVuY3Rpb24oeSl7aWYoeT09PXZvaWQgMClyZXR1cm4gdGhpcy5wYXRoc0VuYWJsZWQ7dGhpcy5wYXRoc0VuYWJsZWQ9ISF5fSxFYy51c2VQYXRocz1mdW5jdGlvbigpe3JldHVybiBJdHQmJnRoaXMucGF0aHNFbmFibGVkfSxFYy5zZXRJbWdTbW9vdGhpbmc9ZnVuY3Rpb24oeSxnKXt5LmltYWdlU21vb3RoaW5nRW5hYmxlZCE9bnVsbD95LmltYWdlU21vb3RoaW5nRW5hYmxlZD1nOih5LndlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZD1nLHkubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkPWcseS5tc0ltYWdlU21vb3RoaW5nRW5hYmxlZD1nKX0sRWMuZ2V0SW1nU21vb3RoaW5nPWZ1bmN0aW9uKHkpe3JldHVybiB5LmltYWdlU21vb3RoaW5nRW5hYmxlZCE9bnVsbD95LmltYWdlU21vb3RoaW5nRW5hYmxlZDp5LndlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZHx8eS5tb3pJbWFnZVNtb290aGluZ0VuYWJsZWR8fHkubXNJbWFnZVNtb290aGluZ0VuYWJsZWR9LEVjLm1ha2VPZmZzY3JlZW5DYW52YXM9ZnVuY3Rpb24oeSxnKXt2YXIgeDtyZXR1cm4odHlwZW9mIE9mZnNjcmVlbkNhbnZhcz4idSI/InVuZGVmaW5lZCI6ZihPZmZzY3JlZW5DYW52YXMpKSE9PSJ1bmRlZmluZWQiP3g9bmV3IE9mZnNjcmVlbkNhbnZhcyh5LGcpOih4PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLHgud2lkdGg9eSx4LmhlaWdodD1nKSx4fSxbQzAsZ3YscHYsa1QsbDYscWsseGcsSTMsRVQsRHR0XS5mb3JFYWNoKGZ1bmN0aW9uKHkpe2ZuKEVjLHkpfSk7dmFyIGg2PVt7bmFtZToibnVsbCIsaW1wbDpGQn0se25hbWU6ImJhc2UiLGltcGw6UUx9LHtuYW1lOiJjYW52YXMiLGltcGw6ZnB0fV0sa2c9W3t0eXBlOiJsYXlvdXQiLGV4dGVuc2lvbnM6ZXR0fSx7dHlwZToicmVuZGVyZXIiLGV4dGVuc2lvbnM6aDZ9XSxUbT17fSxyTT17fTtmdW5jdGlvbiBtMSh5LGcseCl7dmFyIFQ9eCxMPWZ1bmN0aW9uKGllKXtubygiQ2FuIG5vdCByZWdpc3RlciBgIitnKyJgIGZvciBgIit5KyJgIHNpbmNlIGAiK2llKyJgIGFscmVhZHkgZXhpc3RzIGluIHRoZSBwcm90b3R5cGUgYW5kIGNhbiBub3QgYmUgb3ZlcnJpZGRlbiIpfTtpZih5PT09ImNvcmUiKXtpZihOay5wcm90b3R5cGVbZ10pcmV0dXJuIEwoZyk7TmsucHJvdG90eXBlW2ddPXh9ZWxzZSBpZih5PT09ImNvbGxlY3Rpb24iKXtpZihIZi5wcm90b3R5cGVbZ10pcmV0dXJuIEwoZyk7SGYucHJvdG90eXBlW2ddPXh9ZWxzZSBpZih5PT09ImxheW91dCIpe2Zvcih2YXIgST1mdW5jdGlvbihpZSl7dGhpcy5vcHRpb25zPWllLHguY2FsbCh0aGlzLGllKSxjdCh0aGlzLl9wcml2YXRlKXx8KHRoaXMuX3ByaXZhdGU9e30pLHRoaXMuX3ByaXZhdGUuY3k9aWUuY3ksdGhpcy5fcHJpdmF0ZS5saXN0ZW5lcnM9W10sdGhpcy5jcmVhdGVFbWl0dGVyKCl9LE89SS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4LnByb3RvdHlwZSksJD1bXSx6PTA7ejwkLmxlbmd0aDt6Kyspe3ZhciBTPSRbel07T1tTXT1PW1NdfHxmdW5jdGlvbigpe3JldHVybiB0aGlzfX1PLnN0YXJ0JiYhTy5ydW4/Ty5ydW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFydCgpLHRoaXN9OiFPLnN0YXJ0JiZPLnJ1biYmKE8uc3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ydW4oKSx0aGlzfSk7dmFyIFY9eC5wcm90b3R5cGUuc3RvcDtPLnN0b3A9ZnVuY3Rpb24oKXt2YXIgSHQ9dGhpcy5vcHRpb25zO2lmKEh0JiZIdC5hbmltYXRlKXt2YXIgaWU9dGhpcy5hbmltYXRpb25zO2lmKGllKWZvcih2YXIgVXQ9MDtVdDxpZS5sZW5ndGg7VXQrKylpZVtVdF0uc3RvcCgpfXJldHVybiBWP1YuY2FsbCh0aGlzKTp0aGlzLmVtaXQoImxheW91dHN0b3AiKSx0aGlzfSxPLmRlc3Ryb3l8fChPLmRlc3Ryb3k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLE8uY3k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5jeX07dmFyIFU9ZnVuY3Rpb24oaWUpe3JldHVybiBpZS5fcHJpdmF0ZS5jeX0sZXQ9e2FkZEV2ZW50RmllbGRzOmZ1bmN0aW9uKGllLFV0KXtVdC5sYXlvdXQ9aWUsVXQuY3k9VShpZSksVXQudGFyZ2V0PWllfSxidWJibGU6ZnVuY3Rpb24oKXtyZXR1cm4hMH0scGFyZW50OmZ1bmN0aW9uKGllKXtyZXR1cm4gVShpZSl9fTtmbihPLHtjcmVhdGVFbWl0dGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuZW1pdHRlcj1uZXcgSjkoZXQsdGhpcyksdGhpc30sZW1pdHRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmVtaXR0ZXJ9LG9uOmZ1bmN0aW9uKGllLFV0KXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkub24oaWUsVXQpLHRoaXN9LG9uZTpmdW5jdGlvbihpZSxVdCl7cmV0dXJuIHRoaXMuZW1pdHRlcigpLm9uZShpZSxVdCksdGhpc30sb25jZTpmdW5jdGlvbihpZSxVdCl7cmV0dXJuIHRoaXMuZW1pdHRlcigpLm9uZShpZSxVdCksdGhpc30scmVtb3ZlTGlzdGVuZXI6ZnVuY3Rpb24oaWUsVXQpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5yZW1vdmVMaXN0ZW5lcihpZSxVdCksdGhpc30scmVtb3ZlQWxsTGlzdGVuZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1pdHRlcigpLnJlbW92ZUFsbExpc3RlbmVycygpLHRoaXN9LGVtaXQ6ZnVuY3Rpb24oaWUsVXQpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5lbWl0KGllLFV0KSx0aGlzfX0pLEljLmV2ZW50QWxpYXNlc09uKE8pLFQ9SX1lbHNlIGlmKHk9PT0icmVuZGVyZXIiJiZnIT09Im51bGwiJiZnIT09ImJhc2UiKXt2YXIgYXQ9ZjYoInJlbmRlcmVyIiwiYmFzZSIpLGx0PWF0LnByb3RvdHlwZSxndD14LEx0PXgucHJvdG90eXBlLEV0PWZ1bmN0aW9uKCl7YXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLGd0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sRHQ9RXQucHJvdG90eXBlO2Zvcih2YXIgSXQgaW4gbHQpe3ZhciB6dD1sdFtJdF0sdGU9THRbSXRdIT1udWxsO2lmKHRlKXJldHVybiBMKEl0KTtEdFtJdF09enR9Zm9yKHZhciBYdCBpbiBMdClEdFtYdF09THRbWHRdO2x0LmNsaWVudEZ1bmN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKEh0KXtEdFtIdF09RHRbSHRdfHxmdW5jdGlvbigpe291KCJSZW5kZXJlciBkb2VzIG5vdCBpbXBsZW1lbnQgYHJlbmRlcmVyLiIrSHQrIigpYCBvbiBpdHMgcHJvdG90eXBlIil9fSksVD1FdH1lbHNlIGlmKHk9PT0iX19wcm90b19fInx8eT09PSJjb25zdHJ1Y3RvciJ8fHk9PT0icHJvdG90eXBlIilyZXR1cm4gb3UoeSsiIGlzIGFuIGlsbGVnYWwgdHlwZSB0byBiZSByZWdpc3RlcmVkLCBwb3NzaWJseSBsZWFkIHRvIHByb3RvdHlwZSBwb2xsdXRpb25zIik7cmV0dXJuIFJpKHttYXA6VG0sa2V5czpbeSxnXSx2YWx1ZTpUfSl9ZnVuY3Rpb24gZjYoeSxnKXtyZXR1cm4gcGkoe21hcDpUbSxrZXlzOlt5LGddfSl9ZnVuY3Rpb24gT3R0KHksZyx4LFQsTCl7cmV0dXJuIFJpKHttYXA6ck0sa2V5czpbeSxnLHgsVF0sdmFsdWU6TH0pfWZ1bmN0aW9uIHRSKHksZyx4LFQpe3JldHVybiBwaSh7bWFwOnJNLGtleXM6W3ksZyx4LFRdfSl9dmFyIE8zPWZ1bmN0aW9uKCl7aWYoYXJndW1lbnRzLmxlbmd0aD09PTIpcmV0dXJuIGY2LmFwcGx5KG51bGwsYXJndW1lbnRzKTtpZihhcmd1bWVudHMubGVuZ3RoPT09MylyZXR1cm4gbTEuYXBwbHkobnVsbCxhcmd1bWVudHMpO2lmKGFyZ3VtZW50cy5sZW5ndGg9PT00KXJldHVybiB0Ui5hcHBseShudWxsLGFyZ3VtZW50cyk7aWYoYXJndW1lbnRzLmxlbmd0aD09PTUpcmV0dXJuIE90dC5hcHBseShudWxsLGFyZ3VtZW50cyk7b3UoIkludmFsaWQgZXh0ZW5zaW9uIGFjY2VzcyBzeW50YXgiKX07TmsucHJvdG90eXBlLmV4dGVuc2lvbj1PMyxrZy5mb3JFYWNoKGZ1bmN0aW9uKHkpe3kuZXh0ZW5zaW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGcpe20xKHkudHlwZSxnLm5hbWUsZy5pbXBsKX0pfSk7dmFyIGlNPWZ1bmN0aW9uIHkoKXtpZighKHRoaXMgaW5zdGFuY2VvZiB5KSlyZXR1cm4gbmV3IHk7dGhpcy5sZW5ndGg9MH0sX209aU0ucHJvdG90eXBlO19tLmluc3RhbmNlU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuInN0eWxlc2hlZXQifSxfbS5zZWxlY3Rvcj1mdW5jdGlvbih5KXt2YXIgZz10aGlzLmxlbmd0aCsrO3JldHVybiB0aGlzW2ddPXtzZWxlY3Rvcjp5LHByb3BlcnRpZXM6W119LHRoaXN9LF9tLmNzcz1mdW5jdGlvbih5LGcpe3ZhciB4PXRoaXMubGVuZ3RoLTE7aWYoVHQoeSkpdGhpc1t4XS5wcm9wZXJ0aWVzLnB1c2goe25hbWU6eSx2YWx1ZTpnfSk7ZWxzZSBpZihjdCh5KSlmb3IodmFyIFQ9eSxMPU9iamVjdC5rZXlzKFQpLEk9MDtJPEwubGVuZ3RoO0krKyl7dmFyIE89TFtJXSwkPVRbT107aWYoJCE9bnVsbCl7dmFyIHo9YjEucHJvcGVydGllc1tPXXx8YjEucHJvcGVydGllc1tfbihPKV07aWYoeiE9bnVsbCl7dmFyIFM9ei5uYW1lLFY9JDt0aGlzW3hdLnByb3BlcnRpZXMucHVzaCh7bmFtZTpTLHZhbHVlOlZ9KX19fXJldHVybiB0aGlzfSxfbS5zdHlsZT1fbS5jc3MsX20uZ2VuZXJhdGVTdHlsZT1mdW5jdGlvbih5KXt2YXIgZz1uZXcgYjEoeSk7cmV0dXJuIHRoaXMuYXBwZW5kVG9TdHlsZShnKX0sX20uYXBwZW5kVG9TdHlsZT1mdW5jdGlvbih5KXtmb3IodmFyIGc9MDtnPHRoaXMubGVuZ3RoO2crKyl7dmFyIHg9dGhpc1tnXSxUPXguc2VsZWN0b3IsTD14LnByb3BlcnRpZXM7eS5zZWxlY3RvcihUKTtmb3IodmFyIEk9MDtJPEwubGVuZ3RoO0krKyl7dmFyIE89TFtJXTt5LmNzcyhPLm5hbWUsTy52YWx1ZSl9fXJldHVybiB5fTt2YXIgZVI9IjMuMjMuMCIseTE9ZnVuY3Rpb24oZyl7aWYoZz09PXZvaWQgMCYmKGc9e30pLGN0KGcpKXJldHVybiBuZXcgTmsoZyk7aWYoVHQoZykpcmV0dXJuIE8zLmFwcGx5KE8zLGFyZ3VtZW50cyl9O3JldHVybiB5MS51c2U9ZnVuY3Rpb24oeSl7dmFyIGc9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiBnLnVuc2hpZnQoeTEpLHkuYXBwbHkobnVsbCxnKSx0aGlzfSx5MS53YXJuaW5ncz1mdW5jdGlvbih5KXtyZXR1cm4gajUoeSl9LHkxLnZlcnNpb249ZVIseTEuc3R5bGVzaGVldD15MS5TdHlsZXNoZWV0PWlNLHkxfSl9KShVanQpO3ZhciBvV2U9VWp0LmV4cG9ydHM7Y29uc3QgV2p0PVBFKG9XZSk7dmFyIEtqdD17ZXhwb3J0czp7fX0scWd0PXtleHBvcnRzOnt9fSxIZ3Q9e2V4cG9ydHM6e319LFlqdDtmdW5jdGlvbiBjV2UoKXtyZXR1cm4gWWp0fHwoWWp0PTEsZnVuY3Rpb24oaSxhKXsoZnVuY3Rpb24ocCx2KXtpLmV4cG9ydHM9digpfSkoZDAsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZil7dmFyIHA9e307ZnVuY3Rpb24gdihtKXtpZihwW21dKXJldHVybiBwW21dLmV4cG9ydHM7dmFyIGI9cFttXT17aTptLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIGZbbV0uY2FsbChiLmV4cG9ydHMsYixiLmV4cG9ydHMsdiksYi5sPSEwLGIuZXhwb3J0c31yZXR1cm4gdi5tPWYsdi5jPXAsdi5pPWZ1bmN0aW9uKG0pe3JldHVybiBtfSx2LmQ9ZnVuY3Rpb24obSxiLEUpe3YubyhtLGIpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkobSxiLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6RX0pfSx2Lm49ZnVuY3Rpb24obSl7dmFyIGI9bSYmbS5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIG0uZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gbX07cmV0dXJuIHYuZChiLCJhIixiKSxifSx2Lm89ZnVuY3Rpb24obSxiKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG0sYil9LHYucD0iIix2KHYucz0yNil9KFtmdW5jdGlvbihmLHAsdil7ZnVuY3Rpb24gbSgpe31tLlFVQUxJVFk9MSxtLkRFRkFVTFRfQ1JFQVRFX0JFTkRTX0FTX05FRURFRD0hMSxtLkRFRkFVTFRfSU5DUkVNRU5UQUw9ITEsbS5ERUZBVUxUX0FOSU1BVElPTl9PTl9MQVlPVVQ9ITAsbS5ERUZBVUxUX0FOSU1BVElPTl9EVVJJTkdfTEFZT1VUPSExLG0uREVGQVVMVF9BTklNQVRJT05fUEVSSU9EPTUwLG0uREVGQVVMVF9VTklGT1JNX0xFQUZfTk9ERV9TSVpFUz0hMSxtLkRFRkFVTFRfR1JBUEhfTUFSR0lOPTE1LG0uTk9ERV9ESU1FTlNJT05TX0lOQ0xVREVfTEFCRUxTPSExLG0uU0lNUExFX05PREVfU0laRT00MCxtLlNJTVBMRV9OT0RFX0hBTEZfU0laRT1tLlNJTVBMRV9OT0RFX1NJWkUvMixtLkVNUFRZX0NPTVBPVU5EX05PREVfU0laRT00MCxtLk1JTl9FREdFX0xFTkdUSD0xLG0uV09STERfQk9VTkRBUlk9MWU2LG0uSU5JVElBTF9XT1JMRF9CT1VOREFSWT1tLldPUkxEX0JPVU5EQVJZLzFlMyxtLldPUkxEX0NFTlRFUl9YPTEyMDAsbS5XT1JMRF9DRU5URVJfWT05MDAsZi5leHBvcnRzPW19LGZ1bmN0aW9uKGYscCx2KXt2YXIgbT12KDIpLGI9dig4KSxFPXYoOSk7ZnVuY3Rpb24gQyhQLEYsail7bS5jYWxsKHRoaXMsaiksdGhpcy5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXQ9ITEsdGhpcy52R3JhcGhPYmplY3Q9aix0aGlzLmJlbmRwb2ludHM9W10sdGhpcy5zb3VyY2U9UCx0aGlzLnRhcmdldD1GfUMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobS5wcm90b3R5cGUpO2Zvcih2YXIgQSBpbiBtKUNbQV09bVtBXTtDLnByb3RvdHlwZS5nZXRTb3VyY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zb3VyY2V9LEMucHJvdG90eXBlLmdldFRhcmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRhcmdldH0sQy5wcm90b3R5cGUuaXNJbnRlckdyYXBoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbnRlckdyYXBofSxDLnByb3RvdHlwZS5nZXRMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LEMucHJvdG90eXBlLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldH0sQy5wcm90b3R5cGUuZ2V0QmVuZHBvaW50cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJlbmRwb2ludHN9LEMucHJvdG90eXBlLmdldExjYT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxjYX0sQy5wcm90b3R5cGUuZ2V0U291cmNlSW5MY2E9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zb3VyY2VJbkxjYX0sQy5wcm90b3R5cGUuZ2V0VGFyZ2V0SW5MY2E9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YXJnZXRJbkxjYX0sQy5wcm90b3R5cGUuZ2V0T3RoZXJFbmQ9ZnVuY3Rpb24oUCl7aWYodGhpcy5zb3VyY2U9PT1QKXJldHVybiB0aGlzLnRhcmdldDtpZih0aGlzLnRhcmdldD09PVApcmV0dXJuIHRoaXMuc291cmNlO3Rocm93Ik5vZGUgaXMgbm90IGluY2lkZW50IHdpdGggdGhpcyBlZGdlIn0sQy5wcm90b3R5cGUuZ2V0T3RoZXJFbmRJbkdyYXBoPWZ1bmN0aW9uKFAsRil7Zm9yKHZhciBqPXRoaXMuZ2V0T3RoZXJFbmQoUCksUj1GLmdldEdyYXBoTWFuYWdlcigpLmdldFJvb3QoKTs7KXtpZihqLmdldE93bmVyKCk9PUYpcmV0dXJuIGo7aWYoai5nZXRPd25lcigpPT1SKWJyZWFrO2o9ai5nZXRPd25lcigpLmdldFBhcmVudCgpfXJldHVybiBudWxsfSxDLnByb3RvdHlwZS51cGRhdGVMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgUD1uZXcgQXJyYXkoNCk7dGhpcy5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXQ9Yi5nZXRJbnRlcnNlY3Rpb24odGhpcy50YXJnZXQuZ2V0UmVjdCgpLHRoaXMuc291cmNlLmdldFJlY3QoKSxQKSx0aGlzLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldHx8KHRoaXMubGVuZ3RoWD1QWzBdLVBbMl0sdGhpcy5sZW5ndGhZPVBbMV0tUFszXSxNYXRoLmFicyh0aGlzLmxlbmd0aFgpPDEmJih0aGlzLmxlbmd0aFg9RS5zaWduKHRoaXMubGVuZ3RoWCkpLE1hdGguYWJzKHRoaXMubGVuZ3RoWSk8MSYmKHRoaXMubGVuZ3RoWT1FLnNpZ24odGhpcy5sZW5ndGhZKSksdGhpcy5sZW5ndGg9TWF0aC5zcXJ0KHRoaXMubGVuZ3RoWCp0aGlzLmxlbmd0aFgrdGhpcy5sZW5ndGhZKnRoaXMubGVuZ3RoWSkpfSxDLnByb3RvdHlwZS51cGRhdGVMZW5ndGhTaW1wbGU9ZnVuY3Rpb24oKXt0aGlzLmxlbmd0aFg9dGhpcy50YXJnZXQuZ2V0Q2VudGVyWCgpLXRoaXMuc291cmNlLmdldENlbnRlclgoKSx0aGlzLmxlbmd0aFk9dGhpcy50YXJnZXQuZ2V0Q2VudGVyWSgpLXRoaXMuc291cmNlLmdldENlbnRlclkoKSxNYXRoLmFicyh0aGlzLmxlbmd0aFgpPDEmJih0aGlzLmxlbmd0aFg9RS5zaWduKHRoaXMubGVuZ3RoWCkpLE1hdGguYWJzKHRoaXMubGVuZ3RoWSk8MSYmKHRoaXMubGVuZ3RoWT1FLnNpZ24odGhpcy5sZW5ndGhZKSksdGhpcy5sZW5ndGg9TWF0aC5zcXJ0KHRoaXMubGVuZ3RoWCp0aGlzLmxlbmd0aFgrdGhpcy5sZW5ndGhZKnRoaXMubGVuZ3RoWSl9LGYuZXhwb3J0cz1DfSxmdW5jdGlvbihmLHAsdil7ZnVuY3Rpb24gbShiKXt0aGlzLnZHcmFwaE9iamVjdD1ifWYuZXhwb3J0cz1tfSxmdW5jdGlvbihmLHAsdil7dmFyIG09digyKSxiPXYoMTApLEU9digxMyksQz12KDApLEE9digxNiksUD12KDQpO2Z1bmN0aW9uIEYoUixILFkscnQpe1k9PW51bGwmJnJ0PT1udWxsJiYocnQ9SCksbS5jYWxsKHRoaXMscnQpLFIuZ3JhcGhNYW5hZ2VyIT1udWxsJiYoUj1SLmdyYXBoTWFuYWdlciksdGhpcy5lc3RpbWF0ZWRTaXplPWIuTUlOX1ZBTFVFLHRoaXMuaW5jbHVzaW9uVHJlZURlcHRoPWIuTUFYX1ZBTFVFLHRoaXMudkdyYXBoT2JqZWN0PXJ0LHRoaXMuZWRnZXM9W10sdGhpcy5ncmFwaE1hbmFnZXI9UixZIT1udWxsJiZIIT1udWxsP3RoaXMucmVjdD1uZXcgRShILngsSC55LFkud2lkdGgsWS5oZWlnaHQpOnRoaXMucmVjdD1uZXcgRX1GLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0ucHJvdG90eXBlKTtmb3IodmFyIGogaW4gbSlGW2pdPW1bal07Ri5wcm90b3R5cGUuZ2V0RWRnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlc30sRi5wcm90b3R5cGUuZ2V0Q2hpbGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZH0sRi5wcm90b3R5cGUuZ2V0T3duZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lcn0sRi5wcm90b3R5cGUuZ2V0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LndpZHRofSxGLnByb3RvdHlwZS5zZXRXaWR0aD1mdW5jdGlvbihSKXt0aGlzLnJlY3Qud2lkdGg9Un0sRi5wcm90b3R5cGUuZ2V0SGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC5oZWlnaHR9LEYucHJvdG90eXBlLnNldEhlaWdodD1mdW5jdGlvbihSKXt0aGlzLnJlY3QuaGVpZ2h0PVJ9LEYucHJvdG90eXBlLmdldENlbnRlclg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LngrdGhpcy5yZWN0LndpZHRoLzJ9LEYucHJvdG90eXBlLmdldENlbnRlclk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LnkrdGhpcy5yZWN0LmhlaWdodC8yfSxGLnByb3RvdHlwZS5nZXRDZW50ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFAodGhpcy5yZWN0LngrdGhpcy5yZWN0LndpZHRoLzIsdGhpcy5yZWN0LnkrdGhpcy5yZWN0LmhlaWdodC8yKX0sRi5wcm90b3R5cGUuZ2V0TG9jYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFAodGhpcy5yZWN0LngsdGhpcy5yZWN0LnkpfSxGLnByb3RvdHlwZS5nZXRSZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdH0sRi5wcm90b3R5cGUuZ2V0RGlhZ29uYWw9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMucmVjdC53aWR0aCp0aGlzLnJlY3Qud2lkdGgrdGhpcy5yZWN0LmhlaWdodCp0aGlzLnJlY3QuaGVpZ2h0KX0sRi5wcm90b3R5cGUuZ2V0SGFsZlRoZURpYWdvbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLnJlY3QuaGVpZ2h0KnRoaXMucmVjdC5oZWlnaHQrdGhpcy5yZWN0LndpZHRoKnRoaXMucmVjdC53aWR0aCkvMn0sRi5wcm90b3R5cGUuc2V0UmVjdD1mdW5jdGlvbihSLEgpe3RoaXMucmVjdC54PVIueCx0aGlzLnJlY3QueT1SLnksdGhpcy5yZWN0LndpZHRoPUgud2lkdGgsdGhpcy5yZWN0LmhlaWdodD1ILmhlaWdodH0sRi5wcm90b3R5cGUuc2V0Q2VudGVyPWZ1bmN0aW9uKFIsSCl7dGhpcy5yZWN0Lng9Ui10aGlzLnJlY3Qud2lkdGgvMix0aGlzLnJlY3QueT1ILXRoaXMucmVjdC5oZWlnaHQvMn0sRi5wcm90b3R5cGUuc2V0TG9jYXRpb249ZnVuY3Rpb24oUixIKXt0aGlzLnJlY3QueD1SLHRoaXMucmVjdC55PUh9LEYucHJvdG90eXBlLm1vdmVCeT1mdW5jdGlvbihSLEgpe3RoaXMucmVjdC54Kz1SLHRoaXMucmVjdC55Kz1IfSxGLnByb3RvdHlwZS5nZXRFZGdlTGlzdFRvTm9kZT1mdW5jdGlvbihSKXt2YXIgSD1bXSxZPXRoaXM7cmV0dXJuIFkuZWRnZXMuZm9yRWFjaChmdW5jdGlvbihydCl7aWYocnQudGFyZ2V0PT1SKXtpZihydC5zb3VyY2UhPVkpdGhyb3ciSW5jb3JyZWN0IGVkZ2Ugc291cmNlISI7SC5wdXNoKHJ0KX19KSxIfSxGLnByb3RvdHlwZS5nZXRFZGdlc0JldHdlZW49ZnVuY3Rpb24oUil7dmFyIEg9W10sWT10aGlzO3JldHVybiBZLmVkZ2VzLmZvckVhY2goZnVuY3Rpb24ocnQpe2lmKCEocnQuc291cmNlPT1ZfHxydC50YXJnZXQ9PVkpKXRocm93IkluY29ycmVjdCBlZGdlIHNvdXJjZSBhbmQvb3IgdGFyZ2V0IjsocnQudGFyZ2V0PT1SfHxydC5zb3VyY2U9PVIpJiZILnB1c2gocnQpfSksSH0sRi5wcm90b3R5cGUuZ2V0TmVpZ2hib3JzTGlzdD1mdW5jdGlvbigpe3ZhciBSPW5ldyBTZXQsSD10aGlzO3JldHVybiBILmVkZ2VzLmZvckVhY2goZnVuY3Rpb24oWSl7aWYoWS5zb3VyY2U9PUgpUi5hZGQoWS50YXJnZXQpO2Vsc2V7aWYoWS50YXJnZXQhPUgpdGhyb3ciSW5jb3JyZWN0IGluY2lkZW5jeSEiO1IuYWRkKFkuc291cmNlKX19KSxSfSxGLnByb3RvdHlwZS53aXRoQ2hpbGRyZW49ZnVuY3Rpb24oKXt2YXIgUj1uZXcgU2V0LEgsWTtpZihSLmFkZCh0aGlzKSx0aGlzLmNoaWxkIT1udWxsKWZvcih2YXIgcnQ9dGhpcy5jaGlsZC5nZXROb2RlcygpLEo9MDtKPHJ0Lmxlbmd0aDtKKyspSD1ydFtKXSxZPUgud2l0aENoaWxkcmVuKCksWS5mb3JFYWNoKGZ1bmN0aW9uKGl0KXtSLmFkZChpdCl9KTtyZXR1cm4gUn0sRi5wcm90b3R5cGUuZ2V0Tm9PZkNoaWxkcmVuPWZ1bmN0aW9uKCl7dmFyIFI9MCxIO2lmKHRoaXMuY2hpbGQ9PW51bGwpUj0xO2Vsc2UgZm9yKHZhciBZPXRoaXMuY2hpbGQuZ2V0Tm9kZXMoKSxydD0wO3J0PFkubGVuZ3RoO3J0KyspSD1ZW3J0XSxSKz1ILmdldE5vT2ZDaGlsZHJlbigpO3JldHVybiBSPT0wJiYoUj0xKSxSfSxGLnByb3RvdHlwZS5nZXRFc3RpbWF0ZWRTaXplPWZ1bmN0aW9uKCl7aWYodGhpcy5lc3RpbWF0ZWRTaXplPT1iLk1JTl9WQUxVRSl0aHJvdyJhc3NlcnQgZmFpbGVkIjtyZXR1cm4gdGhpcy5lc3RpbWF0ZWRTaXplfSxGLnByb3RvdHlwZS5jYWxjRXN0aW1hdGVkU2l6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkPT1udWxsP3RoaXMuZXN0aW1hdGVkU2l6ZT0odGhpcy5yZWN0LndpZHRoK3RoaXMucmVjdC5oZWlnaHQpLzI6KHRoaXMuZXN0aW1hdGVkU2l6ZT10aGlzLmNoaWxkLmNhbGNFc3RpbWF0ZWRTaXplKCksdGhpcy5yZWN0LndpZHRoPXRoaXMuZXN0aW1hdGVkU2l6ZSx0aGlzLnJlY3QuaGVpZ2h0PXRoaXMuZXN0aW1hdGVkU2l6ZSx0aGlzLmVzdGltYXRlZFNpemUpfSxGLnByb3RvdHlwZS5zY2F0dGVyPWZ1bmN0aW9uKCl7dmFyIFIsSCxZPS1DLklOSVRJQUxfV09STERfQk9VTkRBUlkscnQ9Qy5JTklUSUFMX1dPUkxEX0JPVU5EQVJZO1I9Qy5XT1JMRF9DRU5URVJfWCtBLm5leHREb3VibGUoKSoocnQtWSkrWTt2YXIgSj0tQy5JTklUSUFMX1dPUkxEX0JPVU5EQVJZLGl0PUMuSU5JVElBTF9XT1JMRF9CT1VOREFSWTtIPUMuV09STERfQ0VOVEVSX1krQS5uZXh0RG91YmxlKCkqKGl0LUopK0osdGhpcy5yZWN0Lng9Uix0aGlzLnJlY3QueT1IfSxGLnByb3RvdHlwZS51cGRhdGVCb3VuZHM9ZnVuY3Rpb24oKXtpZih0aGlzLmdldENoaWxkKCk9PW51bGwpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7aWYodGhpcy5nZXRDaGlsZCgpLmdldE5vZGVzKCkubGVuZ3RoIT0wKXt2YXIgUj10aGlzLmdldENoaWxkKCk7aWYoUi51cGRhdGVCb3VuZHMoITApLHRoaXMucmVjdC54PVIuZ2V0TGVmdCgpLHRoaXMucmVjdC55PVIuZ2V0VG9wKCksdGhpcy5zZXRXaWR0aChSLmdldFJpZ2h0KCktUi5nZXRMZWZ0KCkpLHRoaXMuc2V0SGVpZ2h0KFIuZ2V0Qm90dG9tKCktUi5nZXRUb3AoKSksQy5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFMpe3ZhciBIPVIuZ2V0UmlnaHQoKS1SLmdldExlZnQoKSxZPVIuZ2V0Qm90dG9tKCktUi5nZXRUb3AoKTt0aGlzLmxhYmVsV2lkdGg+SCYmKHRoaXMucmVjdC54LT0odGhpcy5sYWJlbFdpZHRoLUgpLzIsdGhpcy5zZXRXaWR0aCh0aGlzLmxhYmVsV2lkdGgpKSx0aGlzLmxhYmVsSGVpZ2h0PlkmJih0aGlzLmxhYmVsUG9zPT0iY2VudGVyIj90aGlzLnJlY3QueS09KHRoaXMubGFiZWxIZWlnaHQtWSkvMjp0aGlzLmxhYmVsUG9zPT0idG9wIiYmKHRoaXMucmVjdC55LT10aGlzLmxhYmVsSGVpZ2h0LVkpLHRoaXMuc2V0SGVpZ2h0KHRoaXMubGFiZWxIZWlnaHQpKX19fSxGLnByb3RvdHlwZS5nZXRJbmNsdXNpb25UcmVlRGVwdGg9ZnVuY3Rpb24oKXtpZih0aGlzLmluY2x1c2lvblRyZWVEZXB0aD09Yi5NQVhfVkFMVUUpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7cmV0dXJuIHRoaXMuaW5jbHVzaW9uVHJlZURlcHRofSxGLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oUil7dmFyIEg9dGhpcy5yZWN0Lng7SD5DLldPUkxEX0JPVU5EQVJZP0g9Qy5XT1JMRF9CT1VOREFSWTpIPC1DLldPUkxEX0JPVU5EQVJZJiYoSD0tQy5XT1JMRF9CT1VOREFSWSk7dmFyIFk9dGhpcy5yZWN0Lnk7WT5DLldPUkxEX0JPVU5EQVJZP1k9Qy5XT1JMRF9CT1VOREFSWTpZPC1DLldPUkxEX0JPVU5EQVJZJiYoWT0tQy5XT1JMRF9CT1VOREFSWSk7dmFyIHJ0PW5ldyBQKEgsWSksSj1SLmludmVyc2VUcmFuc2Zvcm1Qb2ludChydCk7dGhpcy5zZXRMb2NhdGlvbihKLngsSi55KX0sRi5wcm90b3R5cGUuZ2V0TGVmdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QueH0sRi5wcm90b3R5cGUuZ2V0UmlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LngrdGhpcy5yZWN0LndpZHRofSxGLnByb3RvdHlwZS5nZXRUb3A9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0Lnl9LEYucHJvdG90eXBlLmdldEJvdHRvbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QueSt0aGlzLnJlY3QuaGVpZ2h0fSxGLnByb3RvdHlwZS5nZXRQYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lcj09bnVsbD9udWxsOnRoaXMub3duZXIuZ2V0UGFyZW50KCl9LGYuZXhwb3J0cz1GfSxmdW5jdGlvbihmLHAsdil7ZnVuY3Rpb24gbShiLEUpe2I9PW51bGwmJkU9PW51bGw/KHRoaXMueD0wLHRoaXMueT0wKToodGhpcy54PWIsdGhpcy55PUUpfW0ucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54fSxtLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueX0sbS5wcm90b3R5cGUuc2V0WD1mdW5jdGlvbihiKXt0aGlzLng9Yn0sbS5wcm90b3R5cGUuc2V0WT1mdW5jdGlvbihiKXt0aGlzLnk9Yn0sbS5wcm90b3R5cGUuZ2V0RGlmZmVyZW5jZT1mdW5jdGlvbihiKXtyZXR1cm4gbmV3IERpbWVuc2lvbkQodGhpcy54LWIueCx0aGlzLnktYi55KX0sbS5wcm90b3R5cGUuZ2V0Q29weT1mdW5jdGlvbigpe3JldHVybiBuZXcgbSh0aGlzLngsdGhpcy55KX0sbS5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLngrPWIud2lkdGgsdGhpcy55Kz1iLmhlaWdodCx0aGlzfSxmLmV4cG9ydHM9bX0sZnVuY3Rpb24oZixwLHYpe3ZhciBtPXYoMiksYj12KDEwKSxFPXYoMCksQz12KDYpLEE9digzKSxQPXYoMSksRj12KDEzKSxqPXYoMTIpLFI9digxMSk7ZnVuY3Rpb24gSChydCxKLGl0KXttLmNhbGwodGhpcyxpdCksdGhpcy5lc3RpbWF0ZWRTaXplPWIuTUlOX1ZBTFVFLHRoaXMubWFyZ2luPUUuREVGQVVMVF9HUkFQSF9NQVJHSU4sdGhpcy5lZGdlcz1bXSx0aGlzLm5vZGVzPVtdLHRoaXMuaXNDb25uZWN0ZWQ9ITEsdGhpcy5wYXJlbnQ9cnQsSiE9bnVsbCYmSiBpbnN0YW5jZW9mIEM/dGhpcy5ncmFwaE1hbmFnZXI9SjpKIT1udWxsJiZKIGluc3RhbmNlb2YgTGF5b3V0JiYodGhpcy5ncmFwaE1hbmFnZXI9Si5ncmFwaE1hbmFnZXIpfUgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobS5wcm90b3R5cGUpO2Zvcih2YXIgWSBpbiBtKUhbWV09bVtZXTtILnByb3RvdHlwZS5nZXROb2Rlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVzfSxILnByb3RvdHlwZS5nZXRFZGdlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2VzfSxILnByb3RvdHlwZS5nZXRHcmFwaE1hbmFnZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXJ9LEgucHJvdG90eXBlLmdldFBhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudH0sSC5wcm90b3R5cGUuZ2V0TGVmdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlZnR9LEgucHJvdG90eXBlLmdldFJpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmlnaHR9LEgucHJvdG90eXBlLmdldFRvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvcH0sSC5wcm90b3R5cGUuZ2V0Qm90dG9tPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYm90dG9tfSxILnByb3RvdHlwZS5pc0Nvbm5lY3RlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzQ29ubmVjdGVkfSxILnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocnQsSixpdCl7aWYoSj09bnVsbCYmaXQ9PW51bGwpe3ZhciBmdD1ydDtpZih0aGlzLmdyYXBoTWFuYWdlcj09bnVsbCl0aHJvdyJHcmFwaCBoYXMgbm8gZ3JhcGggbWdyISI7aWYodGhpcy5nZXROb2RlcygpLmluZGV4T2YoZnQpPi0xKXRocm93Ik5vZGUgYWxyZWFkeSBpbiBncmFwaCEiO3JldHVybiBmdC5vd25lcj10aGlzLHRoaXMuZ2V0Tm9kZXMoKS5wdXNoKGZ0KSxmdH1lbHNle3ZhciBUdD1ydDtpZighKHRoaXMuZ2V0Tm9kZXMoKS5pbmRleE9mKEopPi0xJiZ0aGlzLmdldE5vZGVzKCkuaW5kZXhPZihpdCk+LTEpKXRocm93IlNvdXJjZSBvciB0YXJnZXQgbm90IGluIGdyYXBoISI7aWYoIShKLm93bmVyPT1pdC5vd25lciYmSi5vd25lcj09dGhpcykpdGhyb3ciQm90aCBvd25lcnMgbXVzdCBiZSB0aGlzIGdyYXBoISI7cmV0dXJuIEoub3duZXIhPWl0Lm93bmVyP251bGw6KFR0LnNvdXJjZT1KLFR0LnRhcmdldD1pdCxUdC5pc0ludGVyR3JhcGg9ITEsdGhpcy5nZXRFZGdlcygpLnB1c2goVHQpLEouZWRnZXMucHVzaChUdCksaXQhPUomJml0LmVkZ2VzLnB1c2goVHQpLFR0KX19LEgucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihydCl7dmFyIEo9cnQ7aWYocnQgaW5zdGFuY2VvZiBBKXtpZihKPT1udWxsKXRocm93Ik5vZGUgaXMgbnVsbCEiO2lmKCEoSi5vd25lciE9bnVsbCYmSi5vd25lcj09dGhpcykpdGhyb3ciT3duZXIgZ3JhcGggaXMgaW52YWxpZCEiO2lmKHRoaXMuZ3JhcGhNYW5hZ2VyPT1udWxsKXRocm93Ik93bmVyIGdyYXBoIG1hbmFnZXIgaXMgaW52YWxpZCEiO2Zvcih2YXIgaXQ9Si5lZGdlcy5zbGljZSgpLGZ0LFR0PWl0Lmxlbmd0aCxrdD0wO2t0PFR0O2t0KyspZnQ9aXRba3RdLGZ0LmlzSW50ZXJHcmFwaD90aGlzLmdyYXBoTWFuYWdlci5yZW1vdmUoZnQpOmZ0LnNvdXJjZS5vd25lci5yZW1vdmUoZnQpO3ZhciBtdD10aGlzLm5vZGVzLmluZGV4T2YoSik7aWYobXQ9PS0xKXRocm93Ik5vZGUgbm90IGluIG93bmVyIG5vZGUgbGlzdCEiO3RoaXMubm9kZXMuc3BsaWNlKG10LDEpfWVsc2UgaWYocnQgaW5zdGFuY2VvZiBQKXt2YXIgZnQ9cnQ7aWYoZnQ9PW51bGwpdGhyb3ciRWRnZSBpcyBudWxsISI7aWYoIShmdC5zb3VyY2UhPW51bGwmJmZ0LnRhcmdldCE9bnVsbCkpdGhyb3ciU291cmNlIGFuZC9vciB0YXJnZXQgaXMgbnVsbCEiO2lmKCEoZnQuc291cmNlLm93bmVyIT1udWxsJiZmdC50YXJnZXQub3duZXIhPW51bGwmJmZ0LnNvdXJjZS5vd25lcj09dGhpcyYmZnQudGFyZ2V0Lm93bmVyPT10aGlzKSl0aHJvdyJTb3VyY2UgYW5kL29yIHRhcmdldCBvd25lciBpcyBpbnZhbGlkISI7dmFyIGN0PWZ0LnNvdXJjZS5lZGdlcy5pbmRleE9mKGZ0KSx5dD1mdC50YXJnZXQuZWRnZXMuaW5kZXhPZihmdCk7aWYoIShjdD4tMSYmeXQ+LTEpKXRocm93IlNvdXJjZSBhbmQvb3IgdGFyZ2V0IGRvZXNuJ3Qga25vdyB0aGlzIGVkZ2UhIjtmdC5zb3VyY2UuZWRnZXMuc3BsaWNlKGN0LDEpLGZ0LnRhcmdldCE9ZnQuc291cmNlJiZmdC50YXJnZXQuZWRnZXMuc3BsaWNlKHl0LDEpO3ZhciBtdD1mdC5zb3VyY2Uub3duZXIuZ2V0RWRnZXMoKS5pbmRleE9mKGZ0KTtpZihtdD09LTEpdGhyb3ciTm90IGluIG93bmVyJ3MgZWRnZSBsaXN0ISI7ZnQuc291cmNlLm93bmVyLmdldEVkZ2VzKCkuc3BsaWNlKG10LDEpfX0sSC5wcm90b3R5cGUudXBkYXRlTGVmdFRvcD1mdW5jdGlvbigpe2Zvcih2YXIgcnQ9Yi5NQVhfVkFMVUUsSj1iLk1BWF9WQUxVRSxpdCxmdCxUdCxrdD10aGlzLmdldE5vZGVzKCksbXQ9a3QubGVuZ3RoLGN0PTA7Y3Q8bXQ7Y3QrKyl7dmFyIHl0PWt0W2N0XTtpdD15dC5nZXRUb3AoKSxmdD15dC5nZXRMZWZ0KCkscnQ+aXQmJihydD1pdCksSj5mdCYmKEo9ZnQpfXJldHVybiBydD09Yi5NQVhfVkFMVUU/bnVsbDooa3RbMF0uZ2V0UGFyZW50KCkucGFkZGluZ0xlZnQhPW51bGw/VHQ9a3RbMF0uZ2V0UGFyZW50KCkucGFkZGluZ0xlZnQ6VHQ9dGhpcy5tYXJnaW4sdGhpcy5sZWZ0PUotVHQsdGhpcy50b3A9cnQtVHQsbmV3IGoodGhpcy5sZWZ0LHRoaXMudG9wKSl9LEgucHJvdG90eXBlLnVwZGF0ZUJvdW5kcz1mdW5jdGlvbihydCl7Zm9yKHZhciBKPWIuTUFYX1ZBTFVFLGl0PS1iLk1BWF9WQUxVRSxmdD1iLk1BWF9WQUxVRSxUdD0tYi5NQVhfVkFMVUUsa3QsbXQsY3QseXQsc3QseHQ9dGhpcy5ub2RlcyxodD14dC5sZW5ndGgsZHQ9MDtkdDxodDtkdCsrKXt2YXIgQ3Q9eHRbZHRdO3J0JiZDdC5jaGlsZCE9bnVsbCYmQ3QudXBkYXRlQm91bmRzKCksa3Q9Q3QuZ2V0TGVmdCgpLG10PUN0LmdldFJpZ2h0KCksY3Q9Q3QuZ2V0VG9wKCkseXQ9Q3QuZ2V0Qm90dG9tKCksSj5rdCYmKEo9a3QpLGl0PG10JiYoaXQ9bXQpLGZ0PmN0JiYoZnQ9Y3QpLFR0PHl0JiYoVHQ9eXQpfXZhciB0dD1uZXcgRihKLGZ0LGl0LUosVHQtZnQpO0o9PWIuTUFYX1ZBTFVFJiYodGhpcy5sZWZ0PXRoaXMucGFyZW50LmdldExlZnQoKSx0aGlzLnJpZ2h0PXRoaXMucGFyZW50LmdldFJpZ2h0KCksdGhpcy50b3A9dGhpcy5wYXJlbnQuZ2V0VG9wKCksdGhpcy5ib3R0b209dGhpcy5wYXJlbnQuZ2V0Qm90dG9tKCkpLHh0WzBdLmdldFBhcmVudCgpLnBhZGRpbmdMZWZ0IT1udWxsP3N0PXh0WzBdLmdldFBhcmVudCgpLnBhZGRpbmdMZWZ0OnN0PXRoaXMubWFyZ2luLHRoaXMubGVmdD10dC54LXN0LHRoaXMucmlnaHQ9dHQueCt0dC53aWR0aCtzdCx0aGlzLnRvcD10dC55LXN0LHRoaXMuYm90dG9tPXR0LnkrdHQuaGVpZ2h0K3N0fSxILmNhbGN1bGF0ZUJvdW5kcz1mdW5jdGlvbihydCl7Zm9yKHZhciBKPWIuTUFYX1ZBTFVFLGl0PS1iLk1BWF9WQUxVRSxmdD1iLk1BWF9WQUxVRSxUdD0tYi5NQVhfVkFMVUUsa3QsbXQsY3QseXQsc3Q9cnQubGVuZ3RoLHh0PTA7eHQ8c3Q7eHQrKyl7dmFyIGh0PXJ0W3h0XTtrdD1odC5nZXRMZWZ0KCksbXQ9aHQuZ2V0UmlnaHQoKSxjdD1odC5nZXRUb3AoKSx5dD1odC5nZXRCb3R0b20oKSxKPmt0JiYoSj1rdCksaXQ8bXQmJihpdD1tdCksZnQ+Y3QmJihmdD1jdCksVHQ8eXQmJihUdD15dCl9dmFyIGR0PW5ldyBGKEosZnQsaXQtSixUdC1mdCk7cmV0dXJuIGR0fSxILnByb3RvdHlwZS5nZXRJbmNsdXNpb25UcmVlRGVwdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcz09dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpPzE6dGhpcy5wYXJlbnQuZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCl9LEgucHJvdG90eXBlLmdldEVzdGltYXRlZFNpemU9ZnVuY3Rpb24oKXtpZih0aGlzLmVzdGltYXRlZFNpemU9PWIuTUlOX1ZBTFVFKXRocm93ImFzc2VydCBmYWlsZWQiO3JldHVybiB0aGlzLmVzdGltYXRlZFNpemV9LEgucHJvdG90eXBlLmNhbGNFc3RpbWF0ZWRTaXplPWZ1bmN0aW9uKCl7Zm9yKHZhciBydD0wLEo9dGhpcy5ub2RlcyxpdD1KLmxlbmd0aCxmdD0wO2Z0PGl0O2Z0Kyspe3ZhciBUdD1KW2Z0XTtydCs9VHQuY2FsY0VzdGltYXRlZFNpemUoKX1yZXR1cm4gcnQ9PTA/dGhpcy5lc3RpbWF0ZWRTaXplPUUuRU1QVFlfQ09NUE9VTkRfTk9ERV9TSVpFOnRoaXMuZXN0aW1hdGVkU2l6ZT1ydC9NYXRoLnNxcnQodGhpcy5ub2Rlcy5sZW5ndGgpLHRoaXMuZXN0aW1hdGVkU2l6ZX0sSC5wcm90b3R5cGUudXBkYXRlQ29ubmVjdGVkPWZ1bmN0aW9uKCl7dmFyIHJ0PXRoaXM7aWYodGhpcy5ub2Rlcy5sZW5ndGg9PTApe3RoaXMuaXNDb25uZWN0ZWQ9ITA7cmV0dXJufXZhciBKPW5ldyBSLGl0PW5ldyBTZXQsZnQ9dGhpcy5ub2Rlc1swXSxUdCxrdCxtdD1mdC53aXRoQ2hpbGRyZW4oKTtmb3IobXQuZm9yRWFjaChmdW5jdGlvbihkdCl7Si5wdXNoKGR0KSxpdC5hZGQoZHQpfSk7Si5sZW5ndGghPT0wOyl7ZnQ9Si5zaGlmdCgpLFR0PWZ0LmdldEVkZ2VzKCk7Zm9yKHZhciBjdD1UdC5sZW5ndGgseXQ9MDt5dDxjdDt5dCsrKXt2YXIgc3Q9VHRbeXRdO2lmKGt0PXN0LmdldE90aGVyRW5kSW5HcmFwaChmdCx0aGlzKSxrdCE9bnVsbCYmIWl0LmhhcyhrdCkpe3ZhciB4dD1rdC53aXRoQ2hpbGRyZW4oKTt4dC5mb3JFYWNoKGZ1bmN0aW9uKGR0KXtKLnB1c2goZHQpLGl0LmFkZChkdCl9KX19fWlmKHRoaXMuaXNDb25uZWN0ZWQ9ITEsaXQuc2l6ZT49dGhpcy5ub2Rlcy5sZW5ndGgpe3ZhciBodD0wO2l0LmZvckVhY2goZnVuY3Rpb24oZHQpe2R0Lm93bmVyPT1ydCYmaHQrK30pLGh0PT10aGlzLm5vZGVzLmxlbmd0aCYmKHRoaXMuaXNDb25uZWN0ZWQ9ITApfX0sZi5leHBvcnRzPUh9LGZ1bmN0aW9uKGYscCx2KXt2YXIgbSxiPXYoMSk7ZnVuY3Rpb24gRShDKXttPXYoNSksdGhpcy5sYXlvdXQ9Qyx0aGlzLmdyYXBocz1bXSx0aGlzLmVkZ2VzPVtdfUUucHJvdG90eXBlLmFkZFJvb3Q9ZnVuY3Rpb24oKXt2YXIgQz10aGlzLmxheW91dC5uZXdHcmFwaCgpLEE9dGhpcy5sYXlvdXQubmV3Tm9kZShudWxsKSxQPXRoaXMuYWRkKEMsQSk7cmV0dXJuIHRoaXMuc2V0Um9vdEdyYXBoKFApLHRoaXMucm9vdEdyYXBofSxFLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oQyxBLFAsRixqKXtpZihQPT1udWxsJiZGPT1udWxsJiZqPT1udWxsKXtpZihDPT1udWxsKXRocm93IkdyYXBoIGlzIG51bGwhIjtpZihBPT1udWxsKXRocm93IlBhcmVudCBub2RlIGlzIG51bGwhIjtpZih0aGlzLmdyYXBocy5pbmRleE9mKEMpPi0xKXRocm93IkdyYXBoIGFscmVhZHkgaW4gdGhpcyBncmFwaCBtZ3IhIjtpZih0aGlzLmdyYXBocy5wdXNoKEMpLEMucGFyZW50IT1udWxsKXRocm93IkFscmVhZHkgaGFzIGEgcGFyZW50ISI7aWYoQS5jaGlsZCE9bnVsbCl0aHJvdyJBbHJlYWR5IGhhcyBhIGNoaWxkISI7cmV0dXJuIEMucGFyZW50PUEsQS5jaGlsZD1DLEN9ZWxzZXtqPVAsRj1BLFA9Qzt2YXIgUj1GLmdldE93bmVyKCksSD1qLmdldE93bmVyKCk7aWYoIShSIT1udWxsJiZSLmdldEdyYXBoTWFuYWdlcigpPT10aGlzKSl0aHJvdyJTb3VyY2Ugbm90IGluIHRoaXMgZ3JhcGggbWdyISI7aWYoIShIIT1udWxsJiZILmdldEdyYXBoTWFuYWdlcigpPT10aGlzKSl0aHJvdyJUYXJnZXQgbm90IGluIHRoaXMgZ3JhcGggbWdyISI7aWYoUj09SClyZXR1cm4gUC5pc0ludGVyR3JhcGg9ITEsUi5hZGQoUCxGLGopO2lmKFAuaXNJbnRlckdyYXBoPSEwLFAuc291cmNlPUYsUC50YXJnZXQ9aix0aGlzLmVkZ2VzLmluZGV4T2YoUCk+LTEpdGhyb3ciRWRnZSBhbHJlYWR5IGluIGludGVyLWdyYXBoIGVkZ2UgbGlzdCEiO2lmKHRoaXMuZWRnZXMucHVzaChQKSwhKFAuc291cmNlIT1udWxsJiZQLnRhcmdldCE9bnVsbCkpdGhyb3ciRWRnZSBzb3VyY2UgYW5kL29yIHRhcmdldCBpcyBudWxsISI7aWYoIShQLnNvdXJjZS5lZGdlcy5pbmRleE9mKFApPT0tMSYmUC50YXJnZXQuZWRnZXMuaW5kZXhPZihQKT09LTEpKXRocm93IkVkZ2UgYWxyZWFkeSBpbiBzb3VyY2UgYW5kL29yIHRhcmdldCBpbmNpZGVuY3kgbGlzdCEiO3JldHVybiBQLnNvdXJjZS5lZGdlcy5wdXNoKFApLFAudGFyZ2V0LmVkZ2VzLnB1c2goUCksUH19LEUucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihDKXtpZihDIGluc3RhbmNlb2YgbSl7dmFyIEE9QztpZihBLmdldEdyYXBoTWFuYWdlcigpIT10aGlzKXRocm93IkdyYXBoIG5vdCBpbiB0aGlzIGdyYXBoIG1nciI7aWYoIShBPT10aGlzLnJvb3RHcmFwaHx8QS5wYXJlbnQhPW51bGwmJkEucGFyZW50LmdyYXBoTWFuYWdlcj09dGhpcykpdGhyb3ciSW52YWxpZCBwYXJlbnQgbm9kZSEiO3ZhciBQPVtdO1A9UC5jb25jYXQoQS5nZXRFZGdlcygpKTtmb3IodmFyIEYsaj1QLmxlbmd0aCxSPTA7UjxqO1IrKylGPVBbUl0sQS5yZW1vdmUoRik7dmFyIEg9W107SD1ILmNvbmNhdChBLmdldE5vZGVzKCkpO3ZhciBZO2o9SC5sZW5ndGg7Zm9yKHZhciBSPTA7UjxqO1IrKylZPUhbUl0sQS5yZW1vdmUoWSk7QT09dGhpcy5yb290R3JhcGgmJnRoaXMuc2V0Um9vdEdyYXBoKG51bGwpO3ZhciBydD10aGlzLmdyYXBocy5pbmRleE9mKEEpO3RoaXMuZ3JhcGhzLnNwbGljZShydCwxKSxBLnBhcmVudD1udWxsfWVsc2UgaWYoQyBpbnN0YW5jZW9mIGIpe2lmKEY9QyxGPT1udWxsKXRocm93IkVkZ2UgaXMgbnVsbCEiO2lmKCFGLmlzSW50ZXJHcmFwaCl0aHJvdyJOb3QgYW4gaW50ZXItZ3JhcGggZWRnZSEiO2lmKCEoRi5zb3VyY2UhPW51bGwmJkYudGFyZ2V0IT1udWxsKSl0aHJvdyJTb3VyY2UgYW5kL29yIHRhcmdldCBpcyBudWxsISI7aWYoIShGLnNvdXJjZS5lZGdlcy5pbmRleE9mKEYpIT0tMSYmRi50YXJnZXQuZWRnZXMuaW5kZXhPZihGKSE9LTEpKXRocm93IlNvdXJjZSBhbmQvb3IgdGFyZ2V0IGRvZXNuJ3Qga25vdyB0aGlzIGVkZ2UhIjt2YXIgcnQ9Ri5zb3VyY2UuZWRnZXMuaW5kZXhPZihGKTtpZihGLnNvdXJjZS5lZGdlcy5zcGxpY2UocnQsMSkscnQ9Ri50YXJnZXQuZWRnZXMuaW5kZXhPZihGKSxGLnRhcmdldC5lZGdlcy5zcGxpY2UocnQsMSksIShGLnNvdXJjZS5vd25lciE9bnVsbCYmRi5zb3VyY2Uub3duZXIuZ2V0R3JhcGhNYW5hZ2VyKCkhPW51bGwpKXRocm93IkVkZ2Ugb3duZXIgZ3JhcGggb3Igb3duZXIgZ3JhcGggbWFuYWdlciBpcyBudWxsISI7aWYoRi5zb3VyY2Uub3duZXIuZ2V0R3JhcGhNYW5hZ2VyKCkuZWRnZXMuaW5kZXhPZihGKT09LTEpdGhyb3ciTm90IGluIG93bmVyIGdyYXBoIG1hbmFnZXIncyBlZGdlIGxpc3QhIjt2YXIgcnQ9Ri5zb3VyY2Uub3duZXIuZ2V0R3JhcGhNYW5hZ2VyKCkuZWRnZXMuaW5kZXhPZihGKTtGLnNvdXJjZS5vd25lci5nZXRHcmFwaE1hbmFnZXIoKS5lZGdlcy5zcGxpY2UocnQsMSl9fSxFLnByb3RvdHlwZS51cGRhdGVCb3VuZHM9ZnVuY3Rpb24oKXt0aGlzLnJvb3RHcmFwaC51cGRhdGVCb3VuZHMoITApfSxFLnByb3RvdHlwZS5nZXRHcmFwaHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaHN9LEUucHJvdG90eXBlLmdldEFsbE5vZGVzPWZ1bmN0aW9uKCl7aWYodGhpcy5hbGxOb2Rlcz09bnVsbCl7Zm9yKHZhciBDPVtdLEE9dGhpcy5nZXRHcmFwaHMoKSxQPUEubGVuZ3RoLEY9MDtGPFA7RisrKUM9Qy5jb25jYXQoQVtGXS5nZXROb2RlcygpKTt0aGlzLmFsbE5vZGVzPUN9cmV0dXJuIHRoaXMuYWxsTm9kZXN9LEUucHJvdG90eXBlLnJlc2V0QWxsTm9kZXM9ZnVuY3Rpb24oKXt0aGlzLmFsbE5vZGVzPW51bGx9LEUucHJvdG90eXBlLnJlc2V0QWxsRWRnZXM9ZnVuY3Rpb24oKXt0aGlzLmFsbEVkZ2VzPW51bGx9LEUucHJvdG90eXBlLnJlc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb249ZnVuY3Rpb24oKXt0aGlzLmFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPW51bGx9LEUucHJvdG90eXBlLmdldEFsbEVkZ2VzPWZ1bmN0aW9uKCl7aWYodGhpcy5hbGxFZGdlcz09bnVsbCl7dmFyIEM9W10sQT10aGlzLmdldEdyYXBocygpO0EubGVuZ3RoO2Zvcih2YXIgUD0wO1A8QS5sZW5ndGg7UCsrKUM9Qy5jb25jYXQoQVtQXS5nZXRFZGdlcygpKTtDPUMuY29uY2F0KHRoaXMuZWRnZXMpLHRoaXMuYWxsRWRnZXM9Q31yZXR1cm4gdGhpcy5hbGxFZGdlc30sRS5wcm90b3R5cGUuZ2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbn0sRS5wcm90b3R5cGUuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb249ZnVuY3Rpb24oQyl7aWYodGhpcy5hbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbiE9bnVsbCl0aHJvdyJhc3NlcnQgZmFpbGVkIjt0aGlzLmFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPUN9LEUucHJvdG90eXBlLmdldFJvb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290R3JhcGh9LEUucHJvdG90eXBlLnNldFJvb3RHcmFwaD1mdW5jdGlvbihDKXtpZihDLmdldEdyYXBoTWFuYWdlcigpIT10aGlzKXRocm93IlJvb3Qgbm90IGluIHRoaXMgZ3JhcGggbWdyISI7dGhpcy5yb290R3JhcGg9QyxDLnBhcmVudD09bnVsbCYmKEMucGFyZW50PXRoaXMubGF5b3V0Lm5ld05vZGUoIlJvb3Qgbm9kZSIpKX0sRS5wcm90b3R5cGUuZ2V0TGF5b3V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGF5b3V0fSxFLnByb3RvdHlwZS5pc09uZUFuY2VzdG9yT2ZPdGhlcj1mdW5jdGlvbihDLEEpe2lmKCEoQyE9bnVsbCYmQSE9bnVsbCkpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7aWYoQz09QSlyZXR1cm4hMDt2YXIgUD1DLmdldE93bmVyKCksRjtkb3tpZihGPVAuZ2V0UGFyZW50KCksRj09bnVsbClicmVhaztpZihGPT1BKXJldHVybiEwO2lmKFA9Ri5nZXRPd25lcigpLFA9PW51bGwpYnJlYWt9d2hpbGUoITApO1A9QS5nZXRPd25lcigpO2Rve2lmKEY9UC5nZXRQYXJlbnQoKSxGPT1udWxsKWJyZWFrO2lmKEY9PUMpcmV0dXJuITA7aWYoUD1GLmdldE93bmVyKCksUD09bnVsbClicmVha313aGlsZSghMCk7cmV0dXJuITF9LEUucHJvdG90eXBlLmNhbGNMb3dlc3RDb21tb25BbmNlc3RvcnM9ZnVuY3Rpb24oKXtmb3IodmFyIEMsQSxQLEYsaixSPXRoaXMuZ2V0QWxsRWRnZXMoKSxIPVIubGVuZ3RoLFk9MDtZPEg7WSsrKXtpZihDPVJbWV0sQT1DLnNvdXJjZSxQPUMudGFyZ2V0LEMubGNhPW51bGwsQy5zb3VyY2VJbkxjYT1BLEMudGFyZ2V0SW5MY2E9UCxBPT1QKXtDLmxjYT1BLmdldE93bmVyKCk7Y29udGludWV9Zm9yKEY9QS5nZXRPd25lcigpO0MubGNhPT1udWxsOyl7Zm9yKEMudGFyZ2V0SW5MY2E9UCxqPVAuZ2V0T3duZXIoKTtDLmxjYT09bnVsbDspe2lmKGo9PUYpe0MubGNhPWo7YnJlYWt9aWYoaj09dGhpcy5yb290R3JhcGgpYnJlYWs7aWYoQy5sY2EhPW51bGwpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7Qy50YXJnZXRJbkxjYT1qLmdldFBhcmVudCgpLGo9Qy50YXJnZXRJbkxjYS5nZXRPd25lcigpfWlmKEY9PXRoaXMucm9vdEdyYXBoKWJyZWFrO0MubGNhPT1udWxsJiYoQy5zb3VyY2VJbkxjYT1GLmdldFBhcmVudCgpLEY9Qy5zb3VyY2VJbkxjYS5nZXRPd25lcigpKX1pZihDLmxjYT09bnVsbCl0aHJvdyJhc3NlcnQgZmFpbGVkIn19LEUucHJvdG90eXBlLmNhbGNMb3dlc3RDb21tb25BbmNlc3Rvcj1mdW5jdGlvbihDLEEpe2lmKEM9PUEpcmV0dXJuIEMuZ2V0T3duZXIoKTt2YXIgUD1DLmdldE93bmVyKCk7ZG97aWYoUD09bnVsbClicmVhazt2YXIgRj1BLmdldE93bmVyKCk7ZG97aWYoRj09bnVsbClicmVhaztpZihGPT1QKXJldHVybiBGO0Y9Ri5nZXRQYXJlbnQoKS5nZXRPd25lcigpfXdoaWxlKCEwKTtQPVAuZ2V0UGFyZW50KCkuZ2V0T3duZXIoKX13aGlsZSghMCk7cmV0dXJuIFB9LEUucHJvdG90eXBlLmNhbGNJbmNsdXNpb25UcmVlRGVwdGhzPWZ1bmN0aW9uKEMsQSl7Qz09bnVsbCYmQT09bnVsbCYmKEM9dGhpcy5yb290R3JhcGgsQT0xKTtmb3IodmFyIFAsRj1DLmdldE5vZGVzKCksaj1GLmxlbmd0aCxSPTA7UjxqO1IrKylQPUZbUl0sUC5pbmNsdXNpb25UcmVlRGVwdGg9QSxQLmNoaWxkIT1udWxsJiZ0aGlzLmNhbGNJbmNsdXNpb25UcmVlRGVwdGhzKFAuY2hpbGQsQSsxKX0sRS5wcm90b3R5cGUuaW5jbHVkZXNJbnZhbGlkRWRnZT1mdW5jdGlvbigpe2Zvcih2YXIgQyxBPXRoaXMuZWRnZXMubGVuZ3RoLFA9MDtQPEE7UCsrKWlmKEM9dGhpcy5lZGdlc1tQXSx0aGlzLmlzT25lQW5jZXN0b3JPZk90aGVyKEMuc291cmNlLEMudGFyZ2V0KSlyZXR1cm4hMDtyZXR1cm4hMX0sZi5leHBvcnRzPUV9LGZ1bmN0aW9uKGYscCx2KXt2YXIgbT12KDApO2Z1bmN0aW9uIGIoKXt9Zm9yKHZhciBFIGluIG0pYltFXT1tW0VdO2IuTUFYX0lURVJBVElPTlM9MjUwMCxiLkRFRkFVTFRfRURHRV9MRU5HVEg9NTAsYi5ERUZBVUxUX1NQUklOR19TVFJFTkdUSD0uNDUsYi5ERUZBVUxUX1JFUFVMU0lPTl9TVFJFTkdUSD00NTAwLGIuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RIPS40LGIuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RIPTEsYi5ERUZBVUxUX0dSQVZJVFlfUkFOR0VfRkFDVE9SPTMuOCxiLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1I9MS41LGIuREVGQVVMVF9VU0VfU01BUlRfSURFQUxfRURHRV9MRU5HVEhfQ0FMQ1VMQVRJT049ITAsYi5ERUZBVUxUX1VTRV9TTUFSVF9SRVBVTFNJT05fUkFOR0VfQ0FMQ1VMQVRJT049ITAsYi5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMPS4zLGIuQ09PTElOR19BREFQVEFUSU9OX0ZBQ1RPUj0uMzMsYi5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQ9MWUzLGIuQURBUFRBVElPTl9VUFBFUl9OT0RFX0xJTUlUPTVlMyxiLk1BWF9OT0RFX0RJU1BMQUNFTUVOVF9JTkNSRU1FTlRBTD0xMDAsYi5NQVhfTk9ERV9ESVNQTEFDRU1FTlQ9Yi5NQVhfTk9ERV9ESVNQTEFDRU1FTlRfSU5DUkVNRU5UQUwqMyxiLk1JTl9SRVBVTFNJT05fRElTVD1iLkRFRkFVTFRfRURHRV9MRU5HVEgvMTAsYi5DT05WRVJHRU5DRV9DSEVDS19QRVJJT0Q9MTAwLGIuUEVSX0xFVkVMX0lERUFMX0VER0VfTEVOR1RIX0ZBQ1RPUj0uMSxiLk1JTl9FREdFX0xFTkdUSD0xLGIuR1JJRF9DQUxDVUxBVElPTl9DSEVDS19QRVJJT0Q9MTAsZi5leHBvcnRzPWJ9LGZ1bmN0aW9uKGYscCx2KXt2YXIgbT12KDEyKTtmdW5jdGlvbiBiKCl7fWIuY2FsY1NlcGFyYXRpb25BbW91bnQ9ZnVuY3Rpb24oRSxDLEEsUCl7aWYoIUUuaW50ZXJzZWN0cyhDKSl0aHJvdyJhc3NlcnQgZmFpbGVkIjt2YXIgRj1uZXcgQXJyYXkoMik7dGhpcy5kZWNpZGVEaXJlY3Rpb25zRm9yT3ZlcmxhcHBpbmdOb2RlcyhFLEMsRiksQVswXT1NYXRoLm1pbihFLmdldFJpZ2h0KCksQy5nZXRSaWdodCgpKS1NYXRoLm1heChFLngsQy54KSxBWzFdPU1hdGgubWluKEUuZ2V0Qm90dG9tKCksQy5nZXRCb3R0b20oKSktTWF0aC5tYXgoRS55LEMueSksRS5nZXRYKCk8PUMuZ2V0WCgpJiZFLmdldFJpZ2h0KCk+PUMuZ2V0UmlnaHQoKT9BWzBdKz1NYXRoLm1pbihDLmdldFgoKS1FLmdldFgoKSxFLmdldFJpZ2h0KCktQy5nZXRSaWdodCgpKTpDLmdldFgoKTw9RS5nZXRYKCkmJkMuZ2V0UmlnaHQoKT49RS5nZXRSaWdodCgpJiYoQVswXSs9TWF0aC5taW4oRS5nZXRYKCktQy5nZXRYKCksQy5nZXRSaWdodCgpLUUuZ2V0UmlnaHQoKSkpLEUuZ2V0WSgpPD1DLmdldFkoKSYmRS5nZXRCb3R0b20oKT49Qy5nZXRCb3R0b20oKT9BWzFdKz1NYXRoLm1pbihDLmdldFkoKS1FLmdldFkoKSxFLmdldEJvdHRvbSgpLUMuZ2V0Qm90dG9tKCkpOkMuZ2V0WSgpPD1FLmdldFkoKSYmQy5nZXRCb3R0b20oKT49RS5nZXRCb3R0b20oKSYmKEFbMV0rPU1hdGgubWluKEUuZ2V0WSgpLUMuZ2V0WSgpLEMuZ2V0Qm90dG9tKCktRS5nZXRCb3R0b20oKSkpO3ZhciBqPU1hdGguYWJzKChDLmdldENlbnRlclkoKS1FLmdldENlbnRlclkoKSkvKEMuZ2V0Q2VudGVyWCgpLUUuZ2V0Q2VudGVyWCgpKSk7Qy5nZXRDZW50ZXJZKCk9PT1FLmdldENlbnRlclkoKSYmQy5nZXRDZW50ZXJYKCk9PT1FLmdldENlbnRlclgoKSYmKGo9MSk7dmFyIFI9aipBWzBdLEg9QVsxXS9qO0FbMF08SD9IPUFbMF06Uj1BWzFdLEFbMF09LTEqRlswXSooSC8yK1ApLEFbMV09LTEqRlsxXSooUi8yK1ApfSxiLmRlY2lkZURpcmVjdGlvbnNGb3JPdmVybGFwcGluZ05vZGVzPWZ1bmN0aW9uKEUsQyxBKXtFLmdldENlbnRlclgoKTxDLmdldENlbnRlclgoKT9BWzBdPS0xOkFbMF09MSxFLmdldENlbnRlclkoKTxDLmdldENlbnRlclkoKT9BWzFdPS0xOkFbMV09MX0sYi5nZXRJbnRlcnNlY3Rpb24yPWZ1bmN0aW9uKEUsQyxBKXt2YXIgUD1FLmdldENlbnRlclgoKSxGPUUuZ2V0Q2VudGVyWSgpLGo9Qy5nZXRDZW50ZXJYKCksUj1DLmdldENlbnRlclkoKTtpZihFLmludGVyc2VjdHMoQykpcmV0dXJuIEFbMF09UCxBWzFdPUYsQVsyXT1qLEFbM109UiwhMDt2YXIgSD1FLmdldFgoKSxZPUUuZ2V0WSgpLHJ0PUUuZ2V0UmlnaHQoKSxKPUUuZ2V0WCgpLGl0PUUuZ2V0Qm90dG9tKCksZnQ9RS5nZXRSaWdodCgpLFR0PUUuZ2V0V2lkdGhIYWxmKCksa3Q9RS5nZXRIZWlnaHRIYWxmKCksbXQ9Qy5nZXRYKCksY3Q9Qy5nZXRZKCkseXQ9Qy5nZXRSaWdodCgpLHN0PUMuZ2V0WCgpLHh0PUMuZ2V0Qm90dG9tKCksaHQ9Qy5nZXRSaWdodCgpLGR0PUMuZ2V0V2lkdGhIYWxmKCksQ3Q9Qy5nZXRIZWlnaHRIYWxmKCksdHQ9ITEsUHQ9ITE7aWYoUD09PWope2lmKEY+UilyZXR1cm4gQVswXT1QLEFbMV09WSxBWzJdPWosQVszXT14dCwhMTtpZihGPFIpcmV0dXJuIEFbMF09UCxBWzFdPWl0LEFbMl09aixBWzNdPWN0LCExfWVsc2UgaWYoRj09PVIpe2lmKFA+ailyZXR1cm4gQVswXT1ILEFbMV09RixBWzJdPXl0LEFbM109UiwhMTtpZihQPGopcmV0dXJuIEFbMF09cnQsQVsxXT1GLEFbMl09bXQsQVszXT1SLCExfWVsc2V7dmFyIHB0PUUuaGVpZ2h0L0Uud2lkdGgsRnQ9Qy5oZWlnaHQvQy53aWR0aCxYPShSLUYpLyhqLVApLFJ0PXZvaWQgMCxCdD12b2lkIDAsdnQ9dm9pZCAwLE90PXZvaWQgMCxWdD12b2lkIDAscWU9dm9pZCAwO2lmKC1wdD09PVg/UD5qPyhBWzBdPUosQVsxXT1pdCx0dD0hMCk6KEFbMF09cnQsQVsxXT1ZLHR0PSEwKTpwdD09PVgmJihQPmo/KEFbMF09SCxBWzFdPVksdHQ9ITApOihBWzBdPWZ0LEFbMV09aXQsdHQ9ITApKSwtRnQ9PT1YP2o+UD8oQVsyXT1zdCxBWzNdPXh0LFB0PSEwKTooQVsyXT15dCxBWzNdPWN0LFB0PSEwKTpGdD09PVgmJihqPlA/KEFbMl09bXQsQVszXT1jdCxQdD0hMCk6KEFbMl09aHQsQVszXT14dCxQdD0hMCkpLHR0JiZQdClyZXR1cm4hMTtpZihQPmo/Rj5SPyhSdD10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKHB0LFgsNCksQnQ9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbihGdCxYLDIpKTooUnQ9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbigtcHQsWCwzKSxCdD10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKC1GdCxYLDEpKTpGPlI/KFJ0PXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oLXB0LFgsMSksQnQ9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbigtRnQsWCwzKSk6KFJ0PXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24ocHQsWCwyKSxCdD10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKEZ0LFgsNCkpLCF0dClzd2l0Y2goUnQpe2Nhc2UgMTpPdD1ZLHZ0PVArLWt0L1gsQVswXT12dCxBWzFdPU90O2JyZWFrO2Nhc2UgMjp2dD1mdCxPdD1GK1R0KlgsQVswXT12dCxBWzFdPU90O2JyZWFrO2Nhc2UgMzpPdD1pdCx2dD1QK2t0L1gsQVswXT12dCxBWzFdPU90O2JyZWFrO2Nhc2UgNDp2dD1KLE90PUYrLVR0KlgsQVswXT12dCxBWzFdPU90O2JyZWFrfWlmKCFQdClzd2l0Y2goQnQpe2Nhc2UgMTpxZT1jdCxWdD1qKy1DdC9YLEFbMl09VnQsQVszXT1xZTticmVhaztjYXNlIDI6VnQ9aHQscWU9UitkdCpYLEFbMl09VnQsQVszXT1xZTticmVhaztjYXNlIDM6cWU9eHQsVnQ9aitDdC9YLEFbMl09VnQsQVszXT1xZTticmVhaztjYXNlIDQ6VnQ9c3QscWU9UistZHQqWCxBWzJdPVZ0LEFbM109cWU7YnJlYWt9fXJldHVybiExfSxiLmdldENhcmRpbmFsRGlyZWN0aW9uPWZ1bmN0aW9uKEUsQyxBKXtyZXR1cm4gRT5DP0E6MStBJTR9LGIuZ2V0SW50ZXJzZWN0aW9uPWZ1bmN0aW9uKEUsQyxBLFApe2lmKFA9PW51bGwpcmV0dXJuIHRoaXMuZ2V0SW50ZXJzZWN0aW9uMihFLEMsQSk7dmFyIEY9RS54LGo9RS55LFI9Qy54LEg9Qy55LFk9QS54LHJ0PUEueSxKPVAueCxpdD1QLnksZnQ9dm9pZCAwLFR0PXZvaWQgMCxrdD12b2lkIDAsbXQ9dm9pZCAwLGN0PXZvaWQgMCx5dD12b2lkIDAsc3Q9dm9pZCAwLHh0PXZvaWQgMCxodD12b2lkIDA7cmV0dXJuIGt0PUgtaixjdD1GLVIsc3Q9UipqLUYqSCxtdD1pdC1ydCx5dD1ZLUoseHQ9SipydC1ZKml0LGh0PWt0Knl0LW10KmN0LGh0PT09MD9udWxsOihmdD0oY3QqeHQteXQqc3QpL2h0LFR0PShtdCpzdC1rdCp4dCkvaHQsbmV3IG0oZnQsVHQpKX0sYi5hbmdsZU9mVmVjdG9yPWZ1bmN0aW9uKEUsQyxBLFApe3ZhciBGPXZvaWQgMDtyZXR1cm4gRSE9PUE/KEY9TWF0aC5hdGFuKChQLUMpLyhBLUUpKSxBPEU/Ris9TWF0aC5QSTpQPEMmJihGKz10aGlzLlRXT19QSSkpOlA8Qz9GPXRoaXMuT05FX0FORF9IQUxGX1BJOkY9dGhpcy5IQUxGX1BJLEZ9LGIuZG9JbnRlcnNlY3Q9ZnVuY3Rpb24oRSxDLEEsUCl7dmFyIEY9RS54LGo9RS55LFI9Qy54LEg9Qy55LFk9QS54LHJ0PUEueSxKPVAueCxpdD1QLnksZnQ9KFItRikqKGl0LXJ0KS0oSi1ZKSooSC1qKTtpZihmdD09PTApcmV0dXJuITE7dmFyIFR0PSgoaXQtcnQpKihKLUYpKyhZLUopKihpdC1qKSkvZnQsa3Q9KChqLUgpKihKLUYpKyhSLUYpKihpdC1qKSkvZnQ7cmV0dXJuIDA8VHQmJlR0PDEmJjA8a3QmJmt0PDF9LGIuSEFMRl9QST0uNSpNYXRoLlBJLGIuT05FX0FORF9IQUxGX1BJPTEuNSpNYXRoLlBJLGIuVFdPX1BJPTIqTWF0aC5QSSxiLlRIUkVFX1BJPTMqTWF0aC5QSSxmLmV4cG9ydHM9Yn0sZnVuY3Rpb24oZixwLHYpe2Z1bmN0aW9uIG0oKXt9bS5zaWduPWZ1bmN0aW9uKGIpe3JldHVybiBiPjA/MTpiPDA/LTE6MH0sbS5mbG9vcj1mdW5jdGlvbihiKXtyZXR1cm4gYjwwP01hdGguY2VpbChiKTpNYXRoLmZsb29yKGIpfSxtLmNlaWw9ZnVuY3Rpb24oYil7cmV0dXJuIGI8MD9NYXRoLmZsb29yKGIpOk1hdGguY2VpbChiKX0sZi5leHBvcnRzPW19LGZ1bmN0aW9uKGYscCx2KXtmdW5jdGlvbiBtKCl7fW0uTUFYX1ZBTFVFPTIxNDc0ODM2NDcsbS5NSU5fVkFMVUU9LTIxNDc0ODM2NDgsZi5leHBvcnRzPW19LGZ1bmN0aW9uKGYscCx2KXt2YXIgbT1mdW5jdGlvbigpe2Z1bmN0aW9uIEYoaixSKXtmb3IodmFyIEg9MDtIPFIubGVuZ3RoO0grKyl7dmFyIFk9UltIXTtZLmVudW1lcmFibGU9WS5lbnVtZXJhYmxlfHwhMSxZLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gWSYmKFkud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLFkua2V5LFkpfX1yZXR1cm4gZnVuY3Rpb24oaixSLEgpe3JldHVybiBSJiZGKGoucHJvdG90eXBlLFIpLEgmJkYoaixIKSxqfX0oKTtmdW5jdGlvbiBiKEYsail7aWYoIShGIGluc3RhbmNlb2YgaikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9dmFyIEU9ZnVuY3Rpb24oail7cmV0dXJue3ZhbHVlOmosbmV4dDpudWxsLHByZXY6bnVsbH19LEM9ZnVuY3Rpb24oaixSLEgsWSl7cmV0dXJuIGohPT1udWxsP2oubmV4dD1SOlkuaGVhZD1SLEghPT1udWxsP0gucHJldj1SOlkudGFpbD1SLFIucHJldj1qLFIubmV4dD1ILFkubGVuZ3RoKyssUn0sQT1mdW5jdGlvbihqLFIpe3ZhciBIPWoucHJldixZPWoubmV4dDtyZXR1cm4gSCE9PW51bGw/SC5uZXh0PVk6Ui5oZWFkPVksWSE9PW51bGw/WS5wcmV2PUg6Ui50YWlsPUgsai5wcmV2PWoubmV4dD1udWxsLFIubGVuZ3RoLS0san0sUD1mdW5jdGlvbigpe2Z1bmN0aW9uIEYoail7dmFyIFI9dGhpcztiKHRoaXMsRiksdGhpcy5sZW5ndGg9MCx0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbCxqIT1udWxsJiZqLmZvckVhY2goZnVuY3Rpb24oSCl7cmV0dXJuIFIucHVzaChIKX0pfXJldHVybiBtKEYsW3trZXk6InNpemUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofX0se2tleToiaW5zZXJ0QmVmb3JlIix2YWx1ZTpmdW5jdGlvbihSLEgpe3JldHVybiBDKEgucHJldixFKFIpLEgsdGhpcyl9fSx7a2V5OiJpbnNlcnRBZnRlciIsdmFsdWU6ZnVuY3Rpb24oUixIKXtyZXR1cm4gQyhILEUoUiksSC5uZXh0LHRoaXMpfX0se2tleToiaW5zZXJ0Tm9kZUJlZm9yZSIsdmFsdWU6ZnVuY3Rpb24oUixIKXtyZXR1cm4gQyhILnByZXYsUixILHRoaXMpfX0se2tleToiaW5zZXJ0Tm9kZUFmdGVyIix2YWx1ZTpmdW5jdGlvbihSLEgpe3JldHVybiBDKEgsUixILm5leHQsdGhpcyl9fSx7a2V5OiJwdXNoIix2YWx1ZTpmdW5jdGlvbihSKXtyZXR1cm4gQyh0aGlzLnRhaWwsRShSKSxudWxsLHRoaXMpfX0se2tleToidW5zaGlmdCIsdmFsdWU6ZnVuY3Rpb24oUil7cmV0dXJuIEMobnVsbCxFKFIpLHRoaXMuaGVhZCx0aGlzKX19LHtrZXk6InJlbW92ZSIsdmFsdWU6ZnVuY3Rpb24oUil7cmV0dXJuIEEoUix0aGlzKX19LHtrZXk6InBvcCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gQSh0aGlzLnRhaWwsdGhpcykudmFsdWV9fSx7a2V5OiJwb3BOb2RlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBBKHRoaXMudGFpbCx0aGlzKX19LHtrZXk6InNoaWZ0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBBKHRoaXMuaGVhZCx0aGlzKS52YWx1ZX19LHtrZXk6InNoaWZ0Tm9kZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gQSh0aGlzLmhlYWQsdGhpcyl9fSx7a2V5OiJnZXRfb2JqZWN0X2F0Iix2YWx1ZTpmdW5jdGlvbihSKXtpZihSPD10aGlzLmxlbmd0aCgpKXtmb3IodmFyIEg9MSxZPXRoaXMuaGVhZDtIPFI7KVk9WS5uZXh0LEgrKztyZXR1cm4gWS52YWx1ZX19fSx7a2V5OiJzZXRfb2JqZWN0X2F0Iix2YWx1ZTpmdW5jdGlvbihSLEgpe2lmKFI8PXRoaXMubGVuZ3RoKCkpe2Zvcih2YXIgWT0xLHJ0PXRoaXMuaGVhZDtZPFI7KXJ0PXJ0Lm5leHQsWSsrO3J0LnZhbHVlPUh9fX1dKSxGfSgpO2YuZXhwb3J0cz1QfSxmdW5jdGlvbihmLHAsdil7ZnVuY3Rpb24gbShiLEUsQyl7dGhpcy54PW51bGwsdGhpcy55PW51bGwsYj09bnVsbCYmRT09bnVsbCYmQz09bnVsbD8odGhpcy54PTAsdGhpcy55PTApOnR5cGVvZiBiPT0ibnVtYmVyIiYmdHlwZW9mIEU9PSJudW1iZXIiJiZDPT1udWxsPyh0aGlzLng9Yix0aGlzLnk9RSk6Yi5jb25zdHJ1Y3Rvci5uYW1lPT0iUG9pbnQiJiZFPT1udWxsJiZDPT1udWxsJiYoQz1iLHRoaXMueD1DLngsdGhpcy55PUMueSl9bS5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnh9LG0ucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55fSxtLnByb3RvdHlwZS5nZXRMb2NhdGlvbj1mdW5jdGlvbigpe3JldHVybiBuZXcgbSh0aGlzLngsdGhpcy55KX0sbS5wcm90b3R5cGUuc2V0TG9jYXRpb249ZnVuY3Rpb24oYixFLEMpe2IuY29uc3RydWN0b3IubmFtZT09IlBvaW50IiYmRT09bnVsbCYmQz09bnVsbD8oQz1iLHRoaXMuc2V0TG9jYXRpb24oQy54LEMueSkpOnR5cGVvZiBiPT0ibnVtYmVyIiYmdHlwZW9mIEU9PSJudW1iZXIiJiZDPT1udWxsJiYocGFyc2VJbnQoYik9PWImJnBhcnNlSW50KEUpPT1FP3RoaXMubW92ZShiLEUpOih0aGlzLng9TWF0aC5mbG9vcihiKy41KSx0aGlzLnk9TWF0aC5mbG9vcihFKy41KSkpfSxtLnByb3RvdHlwZS5tb3ZlPWZ1bmN0aW9uKGIsRSl7dGhpcy54PWIsdGhpcy55PUV9LG0ucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbihiLEUpe3RoaXMueCs9Yix0aGlzLnkrPUV9LG0ucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihiKXtpZihiLmNvbnN0cnVjdG9yLm5hbWU9PSJQb2ludCIpe3ZhciBFPWI7cmV0dXJuIHRoaXMueD09RS54JiZ0aGlzLnk9PUUueX1yZXR1cm4gdGhpcz09Yn0sbS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG0oKS5jb25zdHJ1Y3Rvci5uYW1lKyJbeD0iK3RoaXMueCsiLHk9Iit0aGlzLnkrIl0ifSxmLmV4cG9ydHM9bX0sZnVuY3Rpb24oZixwLHYpe2Z1bmN0aW9uIG0oYixFLEMsQSl7dGhpcy54PTAsdGhpcy55PTAsdGhpcy53aWR0aD0wLHRoaXMuaGVpZ2h0PTAsYiE9bnVsbCYmRSE9bnVsbCYmQyE9bnVsbCYmQSE9bnVsbCYmKHRoaXMueD1iLHRoaXMueT1FLHRoaXMud2lkdGg9Qyx0aGlzLmhlaWdodD1BKX1tLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueH0sbS5wcm90b3R5cGUuc2V0WD1mdW5jdGlvbihiKXt0aGlzLng9Yn0sbS5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnl9LG0ucHJvdG90eXBlLnNldFk9ZnVuY3Rpb24oYil7dGhpcy55PWJ9LG0ucHJvdG90eXBlLmdldFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud2lkdGh9LG0ucHJvdG90eXBlLnNldFdpZHRoPWZ1bmN0aW9uKGIpe3RoaXMud2lkdGg9Yn0sbS5wcm90b3R5cGUuZ2V0SGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVpZ2h0fSxtLnByb3RvdHlwZS5zZXRIZWlnaHQ9ZnVuY3Rpb24oYil7dGhpcy5oZWlnaHQ9Yn0sbS5wcm90b3R5cGUuZ2V0UmlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54K3RoaXMud2lkdGh9LG0ucHJvdG90eXBlLmdldEJvdHRvbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnkrdGhpcy5oZWlnaHR9LG0ucHJvdG90eXBlLmludGVyc2VjdHM9ZnVuY3Rpb24oYil7cmV0dXJuISh0aGlzLmdldFJpZ2h0KCk8Yi54fHx0aGlzLmdldEJvdHRvbSgpPGIueXx8Yi5nZXRSaWdodCgpPHRoaXMueHx8Yi5nZXRCb3R0b20oKTx0aGlzLnkpfSxtLnByb3RvdHlwZS5nZXRDZW50ZXJYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueCt0aGlzLndpZHRoLzJ9LG0ucHJvdG90eXBlLmdldE1pblg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRYKCl9LG0ucHJvdG90eXBlLmdldE1heFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRYKCkrdGhpcy53aWR0aH0sbS5wcm90b3R5cGUuZ2V0Q2VudGVyWT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnkrdGhpcy5oZWlnaHQvMn0sbS5wcm90b3R5cGUuZ2V0TWluWT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFkoKX0sbS5wcm90b3R5cGUuZ2V0TWF4WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFkoKSt0aGlzLmhlaWdodH0sbS5wcm90b3R5cGUuZ2V0V2lkdGhIYWxmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud2lkdGgvMn0sbS5wcm90b3R5cGUuZ2V0SGVpZ2h0SGFsZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhlaWdodC8yfSxmLmV4cG9ydHM9bX0sZnVuY3Rpb24oZixwLHYpe3ZhciBtPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJnR5cGVvZiBTeW1ib2wuaXRlcmF0b3I9PSJzeW1ib2wiP2Z1bmN0aW9uKEUpe3JldHVybiB0eXBlb2YgRX06ZnVuY3Rpb24oRSl7cmV0dXJuIEUmJnR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJkUuY29uc3RydWN0b3I9PT1TeW1ib2wmJkUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBFfTtmdW5jdGlvbiBiKCl7fWIubGFzdElEPTAsYi5jcmVhdGVJRD1mdW5jdGlvbihFKXtyZXR1cm4gYi5pc1ByaW1pdGl2ZShFKT9FOihFLnVuaXF1ZUlEIT1udWxsfHwoRS51bmlxdWVJRD1iLmdldFN0cmluZygpLGIubGFzdElEKyspLEUudW5pcXVlSUQpfSxiLmdldFN0cmluZz1mdW5jdGlvbihFKXtyZXR1cm4gRT09bnVsbCYmKEU9Yi5sYXN0SUQpLCJPYmplY3QjIitFfSxiLmlzUHJpbWl0aXZlPWZ1bmN0aW9uKEUpe3ZhciBDPXR5cGVvZiBFPiJ1Ij8idW5kZWZpbmVkIjptKEUpO3JldHVybiBFPT1udWxsfHxDIT0ib2JqZWN0IiYmQyE9ImZ1bmN0aW9uIn0sZi5leHBvcnRzPWJ9LGZ1bmN0aW9uKGYscCx2KXtmdW5jdGlvbiBtKFkpe2lmKEFycmF5LmlzQXJyYXkoWSkpe2Zvcih2YXIgcnQ9MCxKPUFycmF5KFkubGVuZ3RoKTtydDxZLmxlbmd0aDtydCsrKUpbcnRdPVlbcnRdO3JldHVybiBKfWVsc2UgcmV0dXJuIEFycmF5LmZyb20oWSl9dmFyIGI9digwKSxFPXYoNiksQz12KDMpLEE9digxKSxQPXYoNSksRj12KDQpLGo9digxNyksUj12KDI3KTtmdW5jdGlvbiBIKFkpe1IuY2FsbCh0aGlzKSx0aGlzLmxheW91dFF1YWxpdHk9Yi5RVUFMSVRZLHRoaXMuY3JlYXRlQmVuZHNBc05lZWRlZD1iLkRFRkFVTFRfQ1JFQVRFX0JFTkRTX0FTX05FRURFRCx0aGlzLmluY3JlbWVudGFsPWIuREVGQVVMVF9JTkNSRU1FTlRBTCx0aGlzLmFuaW1hdGlvbk9uTGF5b3V0PWIuREVGQVVMVF9BTklNQVRJT05fT05fTEFZT1VULHRoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0PWIuREVGQVVMVF9BTklNQVRJT05fRFVSSU5HX0xBWU9VVCx0aGlzLmFuaW1hdGlvblBlcmlvZD1iLkRFRkFVTFRfQU5JTUFUSU9OX1BFUklPRCx0aGlzLnVuaWZvcm1MZWFmTm9kZVNpemVzPWIuREVGQVVMVF9VTklGT1JNX0xFQUZfTk9ERV9TSVpFUyx0aGlzLmVkZ2VUb0R1bW15Tm9kZXM9bmV3IE1hcCx0aGlzLmdyYXBoTWFuYWdlcj1uZXcgRSh0aGlzKSx0aGlzLmlzTGF5b3V0RmluaXNoZWQ9ITEsdGhpcy5pc1N1YkxheW91dD0hMSx0aGlzLmlzUmVtb3RlVXNlPSExLFkhPW51bGwmJih0aGlzLmlzUmVtb3RlVXNlPVkpfUguUkFORE9NX1NFRUQ9MSxILnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFIucHJvdG90eXBlKSxILnByb3RvdHlwZS5nZXRHcmFwaE1hbmFnZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXJ9LEgucHJvdG90eXBlLmdldEFsbE5vZGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCl9LEgucHJvdG90eXBlLmdldEFsbEVkZ2VzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCl9LEgucHJvdG90eXBlLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCl9LEgucHJvdG90eXBlLm5ld0dyYXBoTWFuYWdlcj1mdW5jdGlvbigpe3ZhciBZPW5ldyBFKHRoaXMpO3JldHVybiB0aGlzLmdyYXBoTWFuYWdlcj1ZLFl9LEgucHJvdG90eXBlLm5ld0dyYXBoPWZ1bmN0aW9uKFkpe3JldHVybiBuZXcgUChudWxsLHRoaXMuZ3JhcGhNYW5hZ2VyLFkpfSxILnByb3RvdHlwZS5uZXdOb2RlPWZ1bmN0aW9uKFkpe3JldHVybiBuZXcgQyh0aGlzLmdyYXBoTWFuYWdlcixZKX0sSC5wcm90b3R5cGUubmV3RWRnZT1mdW5jdGlvbihZKXtyZXR1cm4gbmV3IEEobnVsbCxudWxsLFkpfSxILnByb3RvdHlwZS5jaGVja0xheW91dFN1Y2Nlc3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpPT1udWxsfHx0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0Tm9kZXMoKS5sZW5ndGg9PTB8fHRoaXMuZ3JhcGhNYW5hZ2VyLmluY2x1ZGVzSW52YWxpZEVkZ2UoKX0sSC5wcm90b3R5cGUucnVuTGF5b3V0PWZ1bmN0aW9uKCl7dGhpcy5pc0xheW91dEZpbmlzaGVkPSExLHRoaXMudGlsaW5nUHJlTGF5b3V0JiZ0aGlzLnRpbGluZ1ByZUxheW91dCgpLHRoaXMuaW5pdFBhcmFtZXRlcnMoKTt2YXIgWTtyZXR1cm4gdGhpcy5jaGVja0xheW91dFN1Y2Nlc3MoKT9ZPSExOlk9dGhpcy5sYXlvdXQoKSxiLkFOSU1BVEU9PT0iZHVyaW5nIj8hMTooWSYmKHRoaXMuaXNTdWJMYXlvdXR8fHRoaXMuZG9Qb3N0TGF5b3V0KCkpLHRoaXMudGlsaW5nUG9zdExheW91dCYmdGhpcy50aWxpbmdQb3N0TGF5b3V0KCksdGhpcy5pc0xheW91dEZpbmlzaGVkPSEwLFkpfSxILnByb3RvdHlwZS5kb1Bvc3RMYXlvdXQ9ZnVuY3Rpb24oKXt0aGlzLmluY3JlbWVudGFsfHx0aGlzLnRyYW5zZm9ybSgpLHRoaXMudXBkYXRlKCl9LEgucHJvdG90eXBlLnVwZGF0ZTI9ZnVuY3Rpb24oKXtpZih0aGlzLmNyZWF0ZUJlbmRzQXNOZWVkZWQmJih0aGlzLmNyZWF0ZUJlbmRwb2ludHNGcm9tRHVtbXlOb2RlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKSksIXRoaXMuaXNSZW1vdGVVc2Upe2Zvcih2YXIgWT10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxFZGdlcygpLHJ0PTA7cnQ8WS5sZW5ndGg7cnQrKylZW3J0XTtmb3IodmFyIEo9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldE5vZGVzKCkscnQ9MDtydDxKLmxlbmd0aDtydCsrKUpbcnRdO3RoaXMudXBkYXRlKHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKSl9fSxILnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oWSl7aWYoWT09bnVsbCl0aGlzLnVwZGF0ZTIoKTtlbHNlIGlmKFkgaW5zdGFuY2VvZiBDKXt2YXIgcnQ9WTtpZihydC5nZXRDaGlsZCgpIT1udWxsKWZvcih2YXIgSj1ydC5nZXRDaGlsZCgpLmdldE5vZGVzKCksaXQ9MDtpdDxKLmxlbmd0aDtpdCsrKXVwZGF0ZShKW2l0XSk7aWYocnQudkdyYXBoT2JqZWN0IT1udWxsKXt2YXIgZnQ9cnQudkdyYXBoT2JqZWN0O2Z0LnVwZGF0ZShydCl9fWVsc2UgaWYoWSBpbnN0YW5jZW9mIEEpe3ZhciBUdD1ZO2lmKFR0LnZHcmFwaE9iamVjdCE9bnVsbCl7dmFyIGt0PVR0LnZHcmFwaE9iamVjdDtrdC51cGRhdGUoVHQpfX1lbHNlIGlmKFkgaW5zdGFuY2VvZiBQKXt2YXIgbXQ9WTtpZihtdC52R3JhcGhPYmplY3QhPW51bGwpe3ZhciBjdD1tdC52R3JhcGhPYmplY3Q7Y3QudXBkYXRlKG10KX19fSxILnByb3RvdHlwZS5pbml0UGFyYW1ldGVycz1mdW5jdGlvbigpe3RoaXMuaXNTdWJMYXlvdXR8fCh0aGlzLmxheW91dFF1YWxpdHk9Yi5RVUFMSVRZLHRoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0PWIuREVGQVVMVF9BTklNQVRJT05fRFVSSU5HX0xBWU9VVCx0aGlzLmFuaW1hdGlvblBlcmlvZD1iLkRFRkFVTFRfQU5JTUFUSU9OX1BFUklPRCx0aGlzLmFuaW1hdGlvbk9uTGF5b3V0PWIuREVGQVVMVF9BTklNQVRJT05fT05fTEFZT1VULHRoaXMuaW5jcmVtZW50YWw9Yi5ERUZBVUxUX0lOQ1JFTUVOVEFMLHRoaXMuY3JlYXRlQmVuZHNBc05lZWRlZD1iLkRFRkFVTFRfQ1JFQVRFX0JFTkRTX0FTX05FRURFRCx0aGlzLnVuaWZvcm1MZWFmTm9kZVNpemVzPWIuREVGQVVMVF9VTklGT1JNX0xFQUZfTk9ERV9TSVpFUyksdGhpcy5hbmltYXRpb25EdXJpbmdMYXlvdXQmJih0aGlzLmFuaW1hdGlvbk9uTGF5b3V0PSExKX0sSC5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKFkpe2lmKFk9PW51bGwpdGhpcy50cmFuc2Zvcm0obmV3IEYoMCwwKSk7ZWxzZXt2YXIgcnQ9bmV3IGosSj10aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkudXBkYXRlTGVmdFRvcCgpO2lmKEohPW51bGwpe3J0LnNldFdvcmxkT3JnWChZLngpLHJ0LnNldFdvcmxkT3JnWShZLnkpLHJ0LnNldERldmljZU9yZ1goSi54KSxydC5zZXREZXZpY2VPcmdZKEoueSk7Zm9yKHZhciBpdD10aGlzLmdldEFsbE5vZGVzKCksZnQsVHQ9MDtUdDxpdC5sZW5ndGg7VHQrKylmdD1pdFtUdF0sZnQudHJhbnNmb3JtKHJ0KX19fSxILnByb3RvdHlwZS5wb3NpdGlvbk5vZGVzUmFuZG9tbHk9ZnVuY3Rpb24oWSl7aWYoWT09bnVsbCl0aGlzLnBvc2l0aW9uTm9kZXNSYW5kb21seSh0aGlzLmdldEdyYXBoTWFuYWdlcigpLmdldFJvb3QoKSksdGhpcy5nZXRHcmFwaE1hbmFnZXIoKS5nZXRSb290KCkudXBkYXRlQm91bmRzKCEwKTtlbHNlIGZvcih2YXIgcnQsSixpdD1ZLmdldE5vZGVzKCksZnQ9MDtmdDxpdC5sZW5ndGg7ZnQrKylydD1pdFtmdF0sSj1ydC5nZXRDaGlsZCgpLEo9PW51bGx8fEouZ2V0Tm9kZXMoKS5sZW5ndGg9PTA/cnQuc2NhdHRlcigpOih0aGlzLnBvc2l0aW9uTm9kZXNSYW5kb21seShKKSxydC51cGRhdGVCb3VuZHMoKSl9LEgucHJvdG90eXBlLmdldEZsYXRGb3Jlc3Q9ZnVuY3Rpb24oKXtmb3IodmFyIFk9W10scnQ9ITAsSj10aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0Tm9kZXMoKSxpdD0hMCxmdD0wO2Z0PEoubGVuZ3RoO2Z0KyspSltmdF0uZ2V0Q2hpbGQoKSE9bnVsbCYmKGl0PSExKTtpZighaXQpcmV0dXJuIFk7dmFyIFR0PW5ldyBTZXQsa3Q9W10sbXQ9bmV3IE1hcCxjdD1bXTtmb3IoY3Q9Y3QuY29uY2F0KEopO2N0Lmxlbmd0aD4wJiZydDspe2ZvcihrdC5wdXNoKGN0WzBdKTtrdC5sZW5ndGg+MCYmcnQ7KXt2YXIgeXQ9a3RbMF07a3Quc3BsaWNlKDAsMSksVHQuYWRkKHl0KTtmb3IodmFyIHN0PXl0LmdldEVkZ2VzKCksZnQ9MDtmdDxzdC5sZW5ndGg7ZnQrKyl7dmFyIHh0PXN0W2Z0XS5nZXRPdGhlckVuZCh5dCk7aWYobXQuZ2V0KHl0KSE9eHQpaWYoIVR0Lmhhcyh4dCkpa3QucHVzaCh4dCksbXQuc2V0KHh0LHl0KTtlbHNle3J0PSExO2JyZWFrfX19aWYoIXJ0KVk9W107ZWxzZXt2YXIgaHQ9W10uY29uY2F0KG0oVHQpKTtZLnB1c2goaHQpO2Zvcih2YXIgZnQ9MDtmdDxodC5sZW5ndGg7ZnQrKyl7dmFyIGR0PWh0W2Z0XSxDdD1jdC5pbmRleE9mKGR0KTtDdD4tMSYmY3Quc3BsaWNlKEN0LDEpfVR0PW5ldyBTZXQsbXQ9bmV3IE1hcH19cmV0dXJuIFl9LEgucHJvdG90eXBlLmNyZWF0ZUR1bW15Tm9kZXNGb3JCZW5kcG9pbnRzPWZ1bmN0aW9uKFkpe2Zvcih2YXIgcnQ9W10sSj1ZLnNvdXJjZSxpdD10aGlzLmdyYXBoTWFuYWdlci5jYWxjTG93ZXN0Q29tbW9uQW5jZXN0b3IoWS5zb3VyY2UsWS50YXJnZXQpLGZ0PTA7ZnQ8WS5iZW5kcG9pbnRzLmxlbmd0aDtmdCsrKXt2YXIgVHQ9dGhpcy5uZXdOb2RlKG51bGwpO1R0LnNldFJlY3QobmV3IFBvaW50KDAsMCksbmV3IERpbWVuc2lvbigxLDEpKSxpdC5hZGQoVHQpO3ZhciBrdD10aGlzLm5ld0VkZ2UobnVsbCk7dGhpcy5ncmFwaE1hbmFnZXIuYWRkKGt0LEosVHQpLHJ0LmFkZChUdCksSj1UdH12YXIga3Q9dGhpcy5uZXdFZGdlKG51bGwpO3JldHVybiB0aGlzLmdyYXBoTWFuYWdlci5hZGQoa3QsSixZLnRhcmdldCksdGhpcy5lZGdlVG9EdW1teU5vZGVzLnNldChZLHJ0KSxZLmlzSW50ZXJHcmFwaCgpP3RoaXMuZ3JhcGhNYW5hZ2VyLnJlbW92ZShZKTppdC5yZW1vdmUoWSkscnR9LEgucHJvdG90eXBlLmNyZWF0ZUJlbmRwb2ludHNGcm9tRHVtbXlOb2Rlcz1mdW5jdGlvbigpe3ZhciBZPVtdO1k9WS5jb25jYXQodGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsRWRnZXMoKSksWT1bXS5jb25jYXQobSh0aGlzLmVkZ2VUb0R1bW15Tm9kZXMua2V5cygpKSkuY29uY2F0KFkpO2Zvcih2YXIgcnQ9MDtydDxZLmxlbmd0aDtydCsrKXt2YXIgSj1ZW3J0XTtpZihKLmJlbmRwb2ludHMubGVuZ3RoPjApe2Zvcih2YXIgaXQ9dGhpcy5lZGdlVG9EdW1teU5vZGVzLmdldChKKSxmdD0wO2Z0PGl0Lmxlbmd0aDtmdCsrKXt2YXIgVHQ9aXRbZnRdLGt0PW5ldyBGKFR0LmdldENlbnRlclgoKSxUdC5nZXRDZW50ZXJZKCkpLG10PUouYmVuZHBvaW50cy5nZXQoZnQpO210Lng9a3QueCxtdC55PWt0LnksVHQuZ2V0T3duZXIoKS5yZW1vdmUoVHQpfXRoaXMuZ3JhcGhNYW5hZ2VyLmFkZChKLEouc291cmNlLEoudGFyZ2V0KX19fSxILnRyYW5zZm9ybT1mdW5jdGlvbihZLHJ0LEosaXQpe2lmKEohPW51bGwmJml0IT1udWxsKXt2YXIgZnQ9cnQ7aWYoWTw9NTApe3ZhciBUdD1ydC9KO2Z0LT0ocnQtVHQpLzUwKig1MC1ZKX1lbHNle3ZhciBrdD1ydCppdDtmdCs9KGt0LXJ0KS81MCooWS01MCl9cmV0dXJuIGZ0fWVsc2V7dmFyIG10LGN0O3JldHVybiBZPD01MD8obXQ9OSpydC81MDAsY3Q9cnQvMTApOihtdD05KnJ0LzUwLGN0PS04KnJ0KSxtdCpZK2N0fX0sSC5maW5kQ2VudGVyT2ZUcmVlPWZ1bmN0aW9uKFkpe3ZhciBydD1bXTtydD1ydC5jb25jYXQoWSk7dmFyIEo9W10saXQ9bmV3IE1hcCxmdD0hMSxUdD1udWxsOyhydC5sZW5ndGg9PTF8fHJ0Lmxlbmd0aD09MikmJihmdD0hMCxUdD1ydFswXSk7Zm9yKHZhciBrdD0wO2t0PHJ0Lmxlbmd0aDtrdCsrKXt2YXIgbXQ9cnRba3RdLGN0PW10LmdldE5laWdoYm9yc0xpc3QoKS5zaXplO2l0LnNldChtdCxtdC5nZXROZWlnaGJvcnNMaXN0KCkuc2l6ZSksY3Q9PTEmJkoucHVzaChtdCl9dmFyIHl0PVtdO2Zvcih5dD15dC5jb25jYXQoSik7IWZ0Oyl7dmFyIHN0PVtdO3N0PXN0LmNvbmNhdCh5dCkseXQ9W107Zm9yKHZhciBrdD0wO2t0PHJ0Lmxlbmd0aDtrdCsrKXt2YXIgbXQ9cnRba3RdLHh0PXJ0LmluZGV4T2YobXQpO3h0Pj0wJiZydC5zcGxpY2UoeHQsMSk7dmFyIGh0PW10LmdldE5laWdoYm9yc0xpc3QoKTtodC5mb3JFYWNoKGZ1bmN0aW9uKHR0KXtpZihKLmluZGV4T2YodHQpPDApe3ZhciBQdD1pdC5nZXQodHQpLHB0PVB0LTE7cHQ9PTEmJnl0LnB1c2godHQpLGl0LnNldCh0dCxwdCl9fSl9Sj1KLmNvbmNhdCh5dCksKHJ0Lmxlbmd0aD09MXx8cnQubGVuZ3RoPT0yKSYmKGZ0PSEwLFR0PXJ0WzBdKX1yZXR1cm4gVHR9LEgucHJvdG90eXBlLnNldEdyYXBoTWFuYWdlcj1mdW5jdGlvbihZKXt0aGlzLmdyYXBoTWFuYWdlcj1ZfSxmLmV4cG9ydHM9SH0sZnVuY3Rpb24oZixwLHYpe2Z1bmN0aW9uIG0oKXt9bS5zZWVkPTEsbS54PTAsbS5uZXh0RG91YmxlPWZ1bmN0aW9uKCl7cmV0dXJuIG0ueD1NYXRoLnNpbihtLnNlZWQrKykqMWU0LG0ueC1NYXRoLmZsb29yKG0ueCl9LGYuZXhwb3J0cz1tfSxmdW5jdGlvbihmLHAsdil7dmFyIG09dig0KTtmdW5jdGlvbiBiKEUsQyl7dGhpcy5sd29ybGRPcmdYPTAsdGhpcy5sd29ybGRPcmdZPTAsdGhpcy5sZGV2aWNlT3JnWD0wLHRoaXMubGRldmljZU9yZ1k9MCx0aGlzLmx3b3JsZEV4dFg9MSx0aGlzLmx3b3JsZEV4dFk9MSx0aGlzLmxkZXZpY2VFeHRYPTEsdGhpcy5sZGV2aWNlRXh0WT0xfWIucHJvdG90eXBlLmdldFdvcmxkT3JnWD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmx3b3JsZE9yZ1h9LGIucHJvdG90eXBlLnNldFdvcmxkT3JnWD1mdW5jdGlvbihFKXt0aGlzLmx3b3JsZE9yZ1g9RX0sYi5wcm90b3R5cGUuZ2V0V29ybGRPcmdZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubHdvcmxkT3JnWX0sYi5wcm90b3R5cGUuc2V0V29ybGRPcmdZPWZ1bmN0aW9uKEUpe3RoaXMubHdvcmxkT3JnWT1FfSxiLnByb3RvdHlwZS5nZXRXb3JsZEV4dFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sd29ybGRFeHRYfSxiLnByb3RvdHlwZS5zZXRXb3JsZEV4dFg9ZnVuY3Rpb24oRSl7dGhpcy5sd29ybGRFeHRYPUV9LGIucHJvdG90eXBlLmdldFdvcmxkRXh0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmx3b3JsZEV4dFl9LGIucHJvdG90eXBlLnNldFdvcmxkRXh0WT1mdW5jdGlvbihFKXt0aGlzLmx3b3JsZEV4dFk9RX0sYi5wcm90b3R5cGUuZ2V0RGV2aWNlT3JnWD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VPcmdYfSxiLnByb3RvdHlwZS5zZXREZXZpY2VPcmdYPWZ1bmN0aW9uKEUpe3RoaXMubGRldmljZU9yZ1g9RX0sYi5wcm90b3R5cGUuZ2V0RGV2aWNlT3JnWT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VPcmdZfSxiLnByb3RvdHlwZS5zZXREZXZpY2VPcmdZPWZ1bmN0aW9uKEUpe3RoaXMubGRldmljZU9yZ1k9RX0sYi5wcm90b3R5cGUuZ2V0RGV2aWNlRXh0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VFeHRYfSxiLnByb3RvdHlwZS5zZXREZXZpY2VFeHRYPWZ1bmN0aW9uKEUpe3RoaXMubGRldmljZUV4dFg9RX0sYi5wcm90b3R5cGUuZ2V0RGV2aWNlRXh0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VFeHRZfSxiLnByb3RvdHlwZS5zZXREZXZpY2VFeHRZPWZ1bmN0aW9uKEUpe3RoaXMubGRldmljZUV4dFk9RX0sYi5wcm90b3R5cGUudHJhbnNmb3JtWD1mdW5jdGlvbihFKXt2YXIgQz0wLEE9dGhpcy5sd29ybGRFeHRYO3JldHVybiBBIT0wJiYoQz10aGlzLmxkZXZpY2VPcmdYKyhFLXRoaXMubHdvcmxkT3JnWCkqdGhpcy5sZGV2aWNlRXh0WC9BKSxDfSxiLnByb3RvdHlwZS50cmFuc2Zvcm1ZPWZ1bmN0aW9uKEUpe3ZhciBDPTAsQT10aGlzLmx3b3JsZEV4dFk7cmV0dXJuIEEhPTAmJihDPXRoaXMubGRldmljZU9yZ1krKEUtdGhpcy5sd29ybGRPcmdZKSp0aGlzLmxkZXZpY2VFeHRZL0EpLEN9LGIucHJvdG90eXBlLmludmVyc2VUcmFuc2Zvcm1YPWZ1bmN0aW9uKEUpe3ZhciBDPTAsQT10aGlzLmxkZXZpY2VFeHRYO3JldHVybiBBIT0wJiYoQz10aGlzLmx3b3JsZE9yZ1grKEUtdGhpcy5sZGV2aWNlT3JnWCkqdGhpcy5sd29ybGRFeHRYL0EpLEN9LGIucHJvdG90eXBlLmludmVyc2VUcmFuc2Zvcm1ZPWZ1bmN0aW9uKEUpe3ZhciBDPTAsQT10aGlzLmxkZXZpY2VFeHRZO3JldHVybiBBIT0wJiYoQz10aGlzLmx3b3JsZE9yZ1krKEUtdGhpcy5sZGV2aWNlT3JnWSkqdGhpcy5sd29ybGRFeHRZL0EpLEN9LGIucHJvdG90eXBlLmludmVyc2VUcmFuc2Zvcm1Qb2ludD1mdW5jdGlvbihFKXt2YXIgQz1uZXcgbSh0aGlzLmludmVyc2VUcmFuc2Zvcm1YKEUueCksdGhpcy5pbnZlcnNlVHJhbnNmb3JtWShFLnkpKTtyZXR1cm4gQ30sZi5leHBvcnRzPWJ9LGZ1bmN0aW9uKGYscCx2KXtmdW5jdGlvbiBtKFIpe2lmKEFycmF5LmlzQXJyYXkoUikpe2Zvcih2YXIgSD0wLFk9QXJyYXkoUi5sZW5ndGgpO0g8Ui5sZW5ndGg7SCsrKVlbSF09UltIXTtyZXR1cm4gWX1lbHNlIHJldHVybiBBcnJheS5mcm9tKFIpfXZhciBiPXYoMTUpLEU9dig3KSxDPXYoMCksQT12KDgpLFA9dig5KTtmdW5jdGlvbiBGKCl7Yi5jYWxsKHRoaXMpLHRoaXMudXNlU21hcnRJZGVhbEVkZ2VMZW5ndGhDYWxjdWxhdGlvbj1FLkRFRkFVTFRfVVNFX1NNQVJUX0lERUFMX0VER0VfTEVOR1RIX0NBTENVTEFUSU9OLHRoaXMuaWRlYWxFZGdlTGVuZ3RoPUUuREVGQVVMVF9FREdFX0xFTkdUSCx0aGlzLnNwcmluZ0NvbnN0YW50PUUuREVGQVVMVF9TUFJJTkdfU1RSRU5HVEgsdGhpcy5yZXB1bHNpb25Db25zdGFudD1FLkRFRkFVTFRfUkVQVUxTSU9OX1NUUkVOR1RILHRoaXMuZ3Jhdml0eUNvbnN0YW50PUUuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RILHRoaXMuY29tcG91bmRHcmF2aXR5Q29uc3RhbnQ9RS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfU1RSRU5HVEgsdGhpcy5ncmF2aXR5UmFuZ2VGYWN0b3I9RS5ERUZBVUxUX0dSQVZJVFlfUkFOR0VfRkFDVE9SLHRoaXMuY29tcG91bmRHcmF2aXR5UmFuZ2VGYWN0b3I9RS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SLHRoaXMuZGlzcGxhY2VtZW50VGhyZXNob2xkUGVyTm9kZT0zKkUuREVGQVVMVF9FREdFX0xFTkdUSC8xMDAsdGhpcy5jb29saW5nRmFjdG9yPUUuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTCx0aGlzLmluaXRpYWxDb29saW5nRmFjdG9yPUUuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTCx0aGlzLnRvdGFsRGlzcGxhY2VtZW50PTAsdGhpcy5vbGRUb3RhbERpc3BsYWNlbWVudD0wLHRoaXMubWF4SXRlcmF0aW9ucz1FLk1BWF9JVEVSQVRJT05TfUYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYi5wcm90b3R5cGUpO2Zvcih2YXIgaiBpbiBiKUZbal09YltqXTtGLnByb3RvdHlwZS5pbml0UGFyYW1ldGVycz1mdW5jdGlvbigpe2IucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzLmNhbGwodGhpcyxhcmd1bWVudHMpLHRoaXMudG90YWxJdGVyYXRpb25zPTAsdGhpcy5ub3RBbmltYXRlZEl0ZXJhdGlvbnM9MCx0aGlzLnVzZUZSR3JpZFZhcmlhbnQ9RS5ERUZBVUxUX1VTRV9TTUFSVF9SRVBVTFNJT05fUkFOR0VfQ0FMQ1VMQVRJT04sdGhpcy5ncmlkPVtdfSxGLnByb3RvdHlwZS5jYWxjSWRlYWxFZGdlTGVuZ3Rocz1mdW5jdGlvbigpe2Zvcih2YXIgUixILFkscnQsSixpdCxmdD10aGlzLmdldEdyYXBoTWFuYWdlcigpLmdldEFsbEVkZ2VzKCksVHQ9MDtUdDxmdC5sZW5ndGg7VHQrKylSPWZ0W1R0XSxSLmlkZWFsTGVuZ3RoPXRoaXMuaWRlYWxFZGdlTGVuZ3RoLFIuaXNJbnRlckdyYXBoJiYoWT1SLmdldFNvdXJjZSgpLHJ0PVIuZ2V0VGFyZ2V0KCksSj1SLmdldFNvdXJjZUluTGNhKCkuZ2V0RXN0aW1hdGVkU2l6ZSgpLGl0PVIuZ2V0VGFyZ2V0SW5MY2EoKS5nZXRFc3RpbWF0ZWRTaXplKCksdGhpcy51c2VTbWFydElkZWFsRWRnZUxlbmd0aENhbGN1bGF0aW9uJiYoUi5pZGVhbExlbmd0aCs9SitpdC0yKkMuU0lNUExFX05PREVfU0laRSksSD1SLmdldExjYSgpLmdldEluY2x1c2lvblRyZWVEZXB0aCgpLFIuaWRlYWxMZW5ndGgrPUUuREVGQVVMVF9FREdFX0xFTkdUSCpFLlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1IqKFkuZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCkrcnQuZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCktMipIKSl9LEYucHJvdG90eXBlLmluaXRTcHJpbmdFbWJlZGRlcj1mdW5jdGlvbigpe3ZhciBSPXRoaXMuZ2V0QWxsTm9kZXMoKS5sZW5ndGg7dGhpcy5pbmNyZW1lbnRhbD8oUj5FLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCYmKHRoaXMuY29vbGluZ0ZhY3Rvcj1NYXRoLm1heCh0aGlzLmNvb2xpbmdGYWN0b3IqRS5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SLHRoaXMuY29vbGluZ0ZhY3Rvci0oUi1FLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCkvKEUuQURBUFRBVElPTl9VUFBFUl9OT0RFX0xJTUlULUUuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUKSp0aGlzLmNvb2xpbmdGYWN0b3IqKDEtRS5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SKSkpLHRoaXMubWF4Tm9kZURpc3BsYWNlbWVudD1FLk1BWF9OT0RFX0RJU1BMQUNFTUVOVF9JTkNSRU1FTlRBTCk6KFI+RS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQ/dGhpcy5jb29saW5nRmFjdG9yPU1hdGgubWF4KEUuQ09PTElOR19BREFQVEFUSU9OX0ZBQ1RPUiwxLShSLUUuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUKS8oRS5BREFQVEFUSU9OX1VQUEVSX05PREVfTElNSVQtRS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQpKigxLUUuQ09PTElOR19BREFQVEFUSU9OX0ZBQ1RPUikpOnRoaXMuY29vbGluZ0ZhY3Rvcj0xLHRoaXMuaW5pdGlhbENvb2xpbmdGYWN0b3I9dGhpcy5jb29saW5nRmFjdG9yLHRoaXMubWF4Tm9kZURpc3BsYWNlbWVudD1FLk1BWF9OT0RFX0RJU1BMQUNFTUVOVCksdGhpcy5tYXhJdGVyYXRpb25zPU1hdGgubWF4KHRoaXMuZ2V0QWxsTm9kZXMoKS5sZW5ndGgqNSx0aGlzLm1heEl0ZXJhdGlvbnMpLHRoaXMudG90YWxEaXNwbGFjZW1lbnRUaHJlc2hvbGQ9dGhpcy5kaXNwbGFjZW1lbnRUaHJlc2hvbGRQZXJOb2RlKnRoaXMuZ2V0QWxsTm9kZXMoKS5sZW5ndGgsdGhpcy5yZXB1bHNpb25SYW5nZT10aGlzLmNhbGNSZXB1bHNpb25SYW5nZSgpfSxGLnByb3RvdHlwZS5jYWxjU3ByaW5nRm9yY2VzPWZ1bmN0aW9uKCl7Zm9yKHZhciBSPXRoaXMuZ2V0QWxsRWRnZXMoKSxILFk9MDtZPFIubGVuZ3RoO1krKylIPVJbWV0sdGhpcy5jYWxjU3ByaW5nRm9yY2UoSCxILmlkZWFsTGVuZ3RoKX0sRi5wcm90b3R5cGUuY2FsY1JlcHVsc2lvbkZvcmNlcz1mdW5jdGlvbigpe3ZhciBSPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMCxIPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMSxZLHJ0LEosaXQsZnQ9dGhpcy5nZXRBbGxOb2RlcygpLFR0O2lmKHRoaXMudXNlRlJHcmlkVmFyaWFudClmb3IodGhpcy50b3RhbEl0ZXJhdGlvbnMlRS5HUklEX0NBTENVTEFUSU9OX0NIRUNLX1BFUklPRD09MSYmUiYmdGhpcy51cGRhdGVHcmlkKCksVHQ9bmV3IFNldCxZPTA7WTxmdC5sZW5ndGg7WSsrKUo9ZnRbWV0sdGhpcy5jYWxjdWxhdGVSZXB1bHNpb25Gb3JjZU9mQU5vZGUoSixUdCxSLEgpLFR0LmFkZChKKTtlbHNlIGZvcihZPTA7WTxmdC5sZW5ndGg7WSsrKWZvcihKPWZ0W1ldLHJ0PVkrMTtydDxmdC5sZW5ndGg7cnQrKylpdD1mdFtydF0sSi5nZXRPd25lcigpPT1pdC5nZXRPd25lcigpJiZ0aGlzLmNhbGNSZXB1bHNpb25Gb3JjZShKLGl0KX0sRi5wcm90b3R5cGUuY2FsY0dyYXZpdGF0aW9uYWxGb3JjZXM9ZnVuY3Rpb24oKXtmb3IodmFyIFIsSD10aGlzLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCksWT0wO1k8SC5sZW5ndGg7WSsrKVI9SFtZXSx0aGlzLmNhbGNHcmF2aXRhdGlvbmFsRm9yY2UoUil9LEYucHJvdG90eXBlLm1vdmVOb2Rlcz1mdW5jdGlvbigpe2Zvcih2YXIgUj10aGlzLmdldEFsbE5vZGVzKCksSCxZPTA7WTxSLmxlbmd0aDtZKyspSD1SW1ldLEgubW92ZSgpfSxGLnByb3RvdHlwZS5jYWxjU3ByaW5nRm9yY2U9ZnVuY3Rpb24oUixIKXt2YXIgWT1SLmdldFNvdXJjZSgpLHJ0PVIuZ2V0VGFyZ2V0KCksSixpdCxmdCxUdDtpZih0aGlzLnVuaWZvcm1MZWFmTm9kZVNpemVzJiZZLmdldENoaWxkKCk9PW51bGwmJnJ0LmdldENoaWxkKCk9PW51bGwpUi51cGRhdGVMZW5ndGhTaW1wbGUoKTtlbHNlIGlmKFIudXBkYXRlTGVuZ3RoKCksUi5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXQpcmV0dXJuO0o9Ui5nZXRMZW5ndGgoKSxKIT0wJiYoaXQ9dGhpcy5zcHJpbmdDb25zdGFudCooSi1IKSxmdD1pdCooUi5sZW5ndGhYL0opLFR0PWl0KihSLmxlbmd0aFkvSiksWS5zcHJpbmdGb3JjZVgrPWZ0LFkuc3ByaW5nRm9yY2VZKz1UdCxydC5zcHJpbmdGb3JjZVgtPWZ0LHJ0LnNwcmluZ0ZvcmNlWS09VHQpfSxGLnByb3RvdHlwZS5jYWxjUmVwdWxzaW9uRm9yY2U9ZnVuY3Rpb24oUixIKXt2YXIgWT1SLmdldFJlY3QoKSxydD1ILmdldFJlY3QoKSxKPW5ldyBBcnJheSgyKSxpdD1uZXcgQXJyYXkoNCksZnQsVHQsa3QsbXQsY3QseXQsc3Q7aWYoWS5pbnRlcnNlY3RzKHJ0KSl7QS5jYWxjU2VwYXJhdGlvbkFtb3VudChZLHJ0LEosRS5ERUZBVUxUX0VER0VfTEVOR1RILzIpLHl0PTIqSlswXSxzdD0yKkpbMV07dmFyIHh0PVIubm9PZkNoaWxkcmVuKkgubm9PZkNoaWxkcmVuLyhSLm5vT2ZDaGlsZHJlbitILm5vT2ZDaGlsZHJlbik7Ui5yZXB1bHNpb25Gb3JjZVgtPXh0Knl0LFIucmVwdWxzaW9uRm9yY2VZLT14dCpzdCxILnJlcHVsc2lvbkZvcmNlWCs9eHQqeXQsSC5yZXB1bHNpb25Gb3JjZVkrPXh0KnN0fWVsc2UgdGhpcy51bmlmb3JtTGVhZk5vZGVTaXplcyYmUi5nZXRDaGlsZCgpPT1udWxsJiZILmdldENoaWxkKCk9PW51bGw/KGZ0PXJ0LmdldENlbnRlclgoKS1ZLmdldENlbnRlclgoKSxUdD1ydC5nZXRDZW50ZXJZKCktWS5nZXRDZW50ZXJZKCkpOihBLmdldEludGVyc2VjdGlvbihZLHJ0LGl0KSxmdD1pdFsyXS1pdFswXSxUdD1pdFszXS1pdFsxXSksTWF0aC5hYnMoZnQpPEUuTUlOX1JFUFVMU0lPTl9ESVNUJiYoZnQ9UC5zaWduKGZ0KSpFLk1JTl9SRVBVTFNJT05fRElTVCksTWF0aC5hYnMoVHQpPEUuTUlOX1JFUFVMU0lPTl9ESVNUJiYoVHQ9UC5zaWduKFR0KSpFLk1JTl9SRVBVTFNJT05fRElTVCksa3Q9ZnQqZnQrVHQqVHQsbXQ9TWF0aC5zcXJ0KGt0KSxjdD10aGlzLnJlcHVsc2lvbkNvbnN0YW50KlIubm9PZkNoaWxkcmVuKkgubm9PZkNoaWxkcmVuL2t0LHl0PWN0KmZ0L210LHN0PWN0KlR0L210LFIucmVwdWxzaW9uRm9yY2VYLT15dCxSLnJlcHVsc2lvbkZvcmNlWS09c3QsSC5yZXB1bHNpb25Gb3JjZVgrPXl0LEgucmVwdWxzaW9uRm9yY2VZKz1zdH0sRi5wcm90b3R5cGUuY2FsY0dyYXZpdGF0aW9uYWxGb3JjZT1mdW5jdGlvbihSKXt2YXIgSCxZLHJ0LEosaXQsZnQsVHQsa3Q7SD1SLmdldE93bmVyKCksWT0oSC5nZXRSaWdodCgpK0guZ2V0TGVmdCgpKS8yLHJ0PShILmdldFRvcCgpK0guZ2V0Qm90dG9tKCkpLzIsSj1SLmdldENlbnRlclgoKS1ZLGl0PVIuZ2V0Q2VudGVyWSgpLXJ0LGZ0PU1hdGguYWJzKEopK1IuZ2V0V2lkdGgoKS8yLFR0PU1hdGguYWJzKGl0KStSLmdldEhlaWdodCgpLzIsUi5nZXRPd25lcigpPT10aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCk/KGt0PUguZ2V0RXN0aW1hdGVkU2l6ZSgpKnRoaXMuZ3Jhdml0eVJhbmdlRmFjdG9yLChmdD5rdHx8VHQ+a3QpJiYoUi5ncmF2aXRhdGlvbkZvcmNlWD0tdGhpcy5ncmF2aXR5Q29uc3RhbnQqSixSLmdyYXZpdGF0aW9uRm9yY2VZPS10aGlzLmdyYXZpdHlDb25zdGFudCppdCkpOihrdD1ILmdldEVzdGltYXRlZFNpemUoKSp0aGlzLmNvbXBvdW5kR3Jhdml0eVJhbmdlRmFjdG9yLChmdD5rdHx8VHQ+a3QpJiYoUi5ncmF2aXRhdGlvbkZvcmNlWD0tdGhpcy5ncmF2aXR5Q29uc3RhbnQqSip0aGlzLmNvbXBvdW5kR3Jhdml0eUNvbnN0YW50LFIuZ3Jhdml0YXRpb25Gb3JjZVk9LXRoaXMuZ3Jhdml0eUNvbnN0YW50Kml0KnRoaXMuY29tcG91bmRHcmF2aXR5Q29uc3RhbnQpKX0sRi5wcm90b3R5cGUuaXNDb252ZXJnZWQ9ZnVuY3Rpb24oKXt2YXIgUixIPSExO3JldHVybiB0aGlzLnRvdGFsSXRlcmF0aW9ucz50aGlzLm1heEl0ZXJhdGlvbnMvMyYmKEg9TWF0aC5hYnModGhpcy50b3RhbERpc3BsYWNlbWVudC10aGlzLm9sZFRvdGFsRGlzcGxhY2VtZW50KTwyKSxSPXRoaXMudG90YWxEaXNwbGFjZW1lbnQ8dGhpcy50b3RhbERpc3BsYWNlbWVudFRocmVzaG9sZCx0aGlzLm9sZFRvdGFsRGlzcGxhY2VtZW50PXRoaXMudG90YWxEaXNwbGFjZW1lbnQsUnx8SH0sRi5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbigpe3RoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0JiYhdGhpcy5pc1N1YkxheW91dCYmKHRoaXMubm90QW5pbWF0ZWRJdGVyYXRpb25zPT10aGlzLmFuaW1hdGlvblBlcmlvZD8odGhpcy51cGRhdGUoKSx0aGlzLm5vdEFuaW1hdGVkSXRlcmF0aW9ucz0wKTp0aGlzLm5vdEFuaW1hdGVkSXRlcmF0aW9ucysrKX0sRi5wcm90b3R5cGUuY2FsY05vT2ZDaGlsZHJlbkZvckFsbE5vZGVzPWZ1bmN0aW9uKCl7Zm9yKHZhciBSLEg9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKSxZPTA7WTxILmxlbmd0aDtZKyspUj1IW1ldLFIubm9PZkNoaWxkcmVuPVIuZ2V0Tm9PZkNoaWxkcmVuKCl9LEYucHJvdG90eXBlLmNhbGNHcmlkPWZ1bmN0aW9uKFIpe3ZhciBIPTAsWT0wO0g9cGFyc2VJbnQoTWF0aC5jZWlsKChSLmdldFJpZ2h0KCktUi5nZXRMZWZ0KCkpL3RoaXMucmVwdWxzaW9uUmFuZ2UpKSxZPXBhcnNlSW50KE1hdGguY2VpbCgoUi5nZXRCb3R0b20oKS1SLmdldFRvcCgpKS90aGlzLnJlcHVsc2lvblJhbmdlKSk7Zm9yKHZhciBydD1uZXcgQXJyYXkoSCksSj0wO0o8SDtKKyspcnRbSl09bmV3IEFycmF5KFkpO2Zvcih2YXIgSj0wO0o8SDtKKyspZm9yKHZhciBpdD0wO2l0PFk7aXQrKylydFtKXVtpdF09bmV3IEFycmF5O3JldHVybiBydH0sRi5wcm90b3R5cGUuYWRkTm9kZVRvR3JpZD1mdW5jdGlvbihSLEgsWSl7dmFyIHJ0PTAsSj0wLGl0PTAsZnQ9MDtydD1wYXJzZUludChNYXRoLmZsb29yKChSLmdldFJlY3QoKS54LUgpL3RoaXMucmVwdWxzaW9uUmFuZ2UpKSxKPXBhcnNlSW50KE1hdGguZmxvb3IoKFIuZ2V0UmVjdCgpLndpZHRoK1IuZ2V0UmVjdCgpLngtSCkvdGhpcy5yZXB1bHNpb25SYW5nZSkpLGl0PXBhcnNlSW50KE1hdGguZmxvb3IoKFIuZ2V0UmVjdCgpLnktWSkvdGhpcy5yZXB1bHNpb25SYW5nZSkpLGZ0PXBhcnNlSW50KE1hdGguZmxvb3IoKFIuZ2V0UmVjdCgpLmhlaWdodCtSLmdldFJlY3QoKS55LVkpL3RoaXMucmVwdWxzaW9uUmFuZ2UpKTtmb3IodmFyIFR0PXJ0O1R0PD1KO1R0KyspZm9yKHZhciBrdD1pdDtrdDw9ZnQ7a3QrKyl0aGlzLmdyaWRbVHRdW2t0XS5wdXNoKFIpLFIuc2V0R3JpZENvb3JkaW5hdGVzKHJ0LEosaXQsZnQpfSxGLnByb3RvdHlwZS51cGRhdGVHcmlkPWZ1bmN0aW9uKCl7dmFyIFIsSCxZPXRoaXMuZ2V0QWxsTm9kZXMoKTtmb3IodGhpcy5ncmlkPXRoaXMuY2FsY0dyaWQodGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpKSxSPTA7UjxZLmxlbmd0aDtSKyspSD1ZW1JdLHRoaXMuYWRkTm9kZVRvR3JpZChILHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXRMZWZ0KCksdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldFRvcCgpKX0sRi5wcm90b3R5cGUuY2FsY3VsYXRlUmVwdWxzaW9uRm9yY2VPZkFOb2RlPWZ1bmN0aW9uKFIsSCxZLHJ0KXtpZih0aGlzLnRvdGFsSXRlcmF0aW9ucyVFLkdSSURfQ0FMQ1VMQVRJT05fQ0hFQ0tfUEVSSU9EPT0xJiZZfHxydCl7dmFyIEo9bmV3IFNldDtSLnN1cnJvdW5kaW5nPW5ldyBBcnJheTtmb3IodmFyIGl0LGZ0PXRoaXMuZ3JpZCxUdD1SLnN0YXJ0WC0xO1R0PFIuZmluaXNoWCsyO1R0KyspZm9yKHZhciBrdD1SLnN0YXJ0WS0xO2t0PFIuZmluaXNoWSsyO2t0KyspaWYoIShUdDwwfHxrdDwwfHxUdD49ZnQubGVuZ3RofHxrdD49ZnRbMF0ubGVuZ3RoKSl7Zm9yKHZhciBtdD0wO210PGZ0W1R0XVtrdF0ubGVuZ3RoO210KyspaWYoaXQ9ZnRbVHRdW2t0XVttdF0sIShSLmdldE93bmVyKCkhPWl0LmdldE93bmVyKCl8fFI9PWl0KSYmIUguaGFzKGl0KSYmIUouaGFzKGl0KSl7dmFyIGN0PU1hdGguYWJzKFIuZ2V0Q2VudGVyWCgpLWl0LmdldENlbnRlclgoKSktKFIuZ2V0V2lkdGgoKS8yK2l0LmdldFdpZHRoKCkvMikseXQ9TWF0aC5hYnMoUi5nZXRDZW50ZXJZKCktaXQuZ2V0Q2VudGVyWSgpKS0oUi5nZXRIZWlnaHQoKS8yK2l0LmdldEhlaWdodCgpLzIpO2N0PD10aGlzLnJlcHVsc2lvblJhbmdlJiZ5dDw9dGhpcy5yZXB1bHNpb25SYW5nZSYmSi5hZGQoaXQpfX1SLnN1cnJvdW5kaW5nPVtdLmNvbmNhdChtKEopKX1mb3IoVHQ9MDtUdDxSLnN1cnJvdW5kaW5nLmxlbmd0aDtUdCsrKXRoaXMuY2FsY1JlcHVsc2lvbkZvcmNlKFIsUi5zdXJyb3VuZGluZ1tUdF0pfSxGLnByb3RvdHlwZS5jYWxjUmVwdWxzaW9uUmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sZi5leHBvcnRzPUZ9LGZ1bmN0aW9uKGYscCx2KXt2YXIgbT12KDEpLGI9dig3KTtmdW5jdGlvbiBFKEEsUCxGKXttLmNhbGwodGhpcyxBLFAsRiksdGhpcy5pZGVhbExlbmd0aD1iLkRFRkFVTFRfRURHRV9MRU5HVEh9RS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShtLnByb3RvdHlwZSk7Zm9yKHZhciBDIGluIG0pRVtDXT1tW0NdO2YuZXhwb3J0cz1FfSxmdW5jdGlvbihmLHAsdil7dmFyIG09digzKTtmdW5jdGlvbiBiKEMsQSxQLEYpe20uY2FsbCh0aGlzLEMsQSxQLEYpLHRoaXMuc3ByaW5nRm9yY2VYPTAsdGhpcy5zcHJpbmdGb3JjZVk9MCx0aGlzLnJlcHVsc2lvbkZvcmNlWD0wLHRoaXMucmVwdWxzaW9uRm9yY2VZPTAsdGhpcy5ncmF2aXRhdGlvbkZvcmNlWD0wLHRoaXMuZ3Jhdml0YXRpb25Gb3JjZVk9MCx0aGlzLmRpc3BsYWNlbWVudFg9MCx0aGlzLmRpc3BsYWNlbWVudFk9MCx0aGlzLnN0YXJ0WD0wLHRoaXMuZmluaXNoWD0wLHRoaXMuc3RhcnRZPTAsdGhpcy5maW5pc2hZPTAsdGhpcy5zdXJyb3VuZGluZz1bXX1iLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0ucHJvdG90eXBlKTtmb3IodmFyIEUgaW4gbSliW0VdPW1bRV07Yi5wcm90b3R5cGUuc2V0R3JpZENvb3JkaW5hdGVzPWZ1bmN0aW9uKEMsQSxQLEYpe3RoaXMuc3RhcnRYPUMsdGhpcy5maW5pc2hYPUEsdGhpcy5zdGFydFk9UCx0aGlzLmZpbmlzaFk9Rn0sZi5leHBvcnRzPWJ9LGZ1bmN0aW9uKGYscCx2KXtmdW5jdGlvbiBtKGIsRSl7dGhpcy53aWR0aD0wLHRoaXMuaGVpZ2h0PTAsYiE9PW51bGwmJkUhPT1udWxsJiYodGhpcy5oZWlnaHQ9RSx0aGlzLndpZHRoPWIpfW0ucHJvdG90eXBlLmdldFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud2lkdGh9LG0ucHJvdG90eXBlLnNldFdpZHRoPWZ1bmN0aW9uKGIpe3RoaXMud2lkdGg9Yn0sbS5wcm90b3R5cGUuZ2V0SGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVpZ2h0fSxtLnByb3RvdHlwZS5zZXRIZWlnaHQ9ZnVuY3Rpb24oYil7dGhpcy5oZWlnaHQ9Yn0sZi5leHBvcnRzPW19LGZ1bmN0aW9uKGYscCx2KXt2YXIgbT12KDE0KTtmdW5jdGlvbiBiKCl7dGhpcy5tYXA9e30sdGhpcy5rZXlzPVtdfWIucHJvdG90eXBlLnB1dD1mdW5jdGlvbihFLEMpe3ZhciBBPW0uY3JlYXRlSUQoRSk7dGhpcy5jb250YWlucyhBKXx8KHRoaXMubWFwW0FdPUMsdGhpcy5rZXlzLnB1c2goRSkpfSxiLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihFKXtyZXR1cm4gbS5jcmVhdGVJRChFKSx0aGlzLm1hcFtFXSE9bnVsbH0sYi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKEUpe3ZhciBDPW0uY3JlYXRlSUQoRSk7cmV0dXJuIHRoaXMubWFwW0NdfSxiLnByb3RvdHlwZS5rZXlTZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5rZXlzfSxmLmV4cG9ydHM9Yn0sZnVuY3Rpb24oZixwLHYpe3ZhciBtPXYoMTQpO2Z1bmN0aW9uIGIoKXt0aGlzLnNldD17fX1iLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oRSl7dmFyIEM9bS5jcmVhdGVJRChFKTt0aGlzLmNvbnRhaW5zKEMpfHwodGhpcy5zZXRbQ109RSl9LGIucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihFKXtkZWxldGUgdGhpcy5zZXRbbS5jcmVhdGVJRChFKV19LGIucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zZXQ9e319LGIucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKEUpe3JldHVybiB0aGlzLnNldFttLmNyZWF0ZUlEKEUpXT09RX0sYi5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemUoKT09PTB9LGIucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5zZXQpLmxlbmd0aH0sYi5wcm90b3R5cGUuYWRkQWxsVG89ZnVuY3Rpb24oRSl7Zm9yKHZhciBDPU9iamVjdC5rZXlzKHRoaXMuc2V0KSxBPUMubGVuZ3RoLFA9MDtQPEE7UCsrKUUucHVzaCh0aGlzLnNldFtDW1BdXSl9LGIucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5zZXQpLmxlbmd0aH0sYi5wcm90b3R5cGUuYWRkQWxsPWZ1bmN0aW9uKEUpe2Zvcih2YXIgQz1FLmxlbmd0aCxBPTA7QTxDO0ErKyl7dmFyIFA9RVtBXTt0aGlzLmFkZChQKX19LGYuZXhwb3J0cz1ifSxmdW5jdGlvbihmLHAsdil7dmFyIG09ZnVuY3Rpb24oKXtmdW5jdGlvbiBBKFAsRil7Zm9yKHZhciBqPTA7ajxGLmxlbmd0aDtqKyspe3ZhciBSPUZbal07Ui5lbnVtZXJhYmxlPVIuZW51bWVyYWJsZXx8ITEsUi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIFImJihSLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUCxSLmtleSxSKX19cmV0dXJuIGZ1bmN0aW9uKFAsRixqKXtyZXR1cm4gRiYmQShQLnByb3RvdHlwZSxGKSxqJiZBKFAsaiksUH19KCk7ZnVuY3Rpb24gYihBLFApe2lmKCEoQSBpbnN0YW5jZW9mIFApKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfXZhciBFPXYoMTEpLEM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBBKFAsRil7Yih0aGlzLEEpLChGIT09bnVsbHx8RiE9PXZvaWQgMCkmJih0aGlzLmNvbXBhcmVGdW5jdGlvbj10aGlzLl9kZWZhdWx0Q29tcGFyZUZ1bmN0aW9uKTt2YXIgaj12b2lkIDA7UCBpbnN0YW5jZW9mIEU/aj1QLnNpemUoKTpqPVAubGVuZ3RoLHRoaXMuX3F1aWNrc29ydChQLDAsai0xKX1yZXR1cm4gbShBLFt7a2V5OiJfcXVpY2tzb3J0Iix2YWx1ZTpmdW5jdGlvbihGLGosUil7aWYoajxSKXt2YXIgSD10aGlzLl9wYXJ0aXRpb24oRixqLFIpO3RoaXMuX3F1aWNrc29ydChGLGosSCksdGhpcy5fcXVpY2tzb3J0KEYsSCsxLFIpfX19LHtrZXk6Il9wYXJ0aXRpb24iLHZhbHVlOmZ1bmN0aW9uKEYsaixSKXtmb3IodmFyIEg9dGhpcy5fZ2V0KEYsaiksWT1qLHJ0PVI7Oyl7Zm9yKDt0aGlzLmNvbXBhcmVGdW5jdGlvbihILHRoaXMuX2dldChGLHJ0KSk7KXJ0LS07Zm9yKDt0aGlzLmNvbXBhcmVGdW5jdGlvbih0aGlzLl9nZXQoRixZKSxIKTspWSsrO2lmKFk8cnQpdGhpcy5fc3dhcChGLFkscnQpLFkrKyxydC0tO2Vsc2UgcmV0dXJuIHJ0fX19LHtrZXk6Il9nZXQiLHZhbHVlOmZ1bmN0aW9uKEYsail7cmV0dXJuIEYgaW5zdGFuY2VvZiBFP0YuZ2V0X29iamVjdF9hdChqKTpGW2pdfX0se2tleToiX3NldCIsdmFsdWU6ZnVuY3Rpb24oRixqLFIpe0YgaW5zdGFuY2VvZiBFP0Yuc2V0X29iamVjdF9hdChqLFIpOkZbal09Un19LHtrZXk6Il9zd2FwIix2YWx1ZTpmdW5jdGlvbihGLGosUil7dmFyIEg9dGhpcy5fZ2V0KEYsaik7dGhpcy5fc2V0KEYsaix0aGlzLl9nZXQoRixSKSksdGhpcy5fc2V0KEYsUixIKX19LHtrZXk6Il9kZWZhdWx0Q29tcGFyZUZ1bmN0aW9uIix2YWx1ZTpmdW5jdGlvbihGLGope3JldHVybiBqPkZ9fV0pLEF9KCk7Zi5leHBvcnRzPUN9LGZ1bmN0aW9uKGYscCx2KXt2YXIgbT1mdW5jdGlvbigpe2Z1bmN0aW9uIEMoQSxQKXtmb3IodmFyIEY9MDtGPFAubGVuZ3RoO0YrKyl7dmFyIGo9UFtGXTtqLmVudW1lcmFibGU9ai5lbnVtZXJhYmxlfHwhMSxqLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gaiYmKGoud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLGoua2V5LGopfX1yZXR1cm4gZnVuY3Rpb24oQSxQLEYpe3JldHVybiBQJiZDKEEucHJvdG90eXBlLFApLEYmJkMoQSxGKSxBfX0oKTtmdW5jdGlvbiBiKEMsQSl7aWYoIShDIGluc3RhbmNlb2YgQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9dmFyIEU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBDKEEsUCl7dmFyIEY9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOjEsaj1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106LTEsUj1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06LTE7Yih0aGlzLEMpLHRoaXMuc2VxdWVuY2UxPUEsdGhpcy5zZXF1ZW5jZTI9UCx0aGlzLm1hdGNoX3Njb3JlPUYsdGhpcy5taXNtYXRjaF9wZW5hbHR5PWosdGhpcy5nYXBfcGVuYWx0eT1SLHRoaXMuaU1heD1BLmxlbmd0aCsxLHRoaXMuak1heD1QLmxlbmd0aCsxLHRoaXMuZ3JpZD1uZXcgQXJyYXkodGhpcy5pTWF4KTtmb3IodmFyIEg9MDtIPHRoaXMuaU1heDtIKyspe3RoaXMuZ3JpZFtIXT1uZXcgQXJyYXkodGhpcy5qTWF4KTtmb3IodmFyIFk9MDtZPHRoaXMuak1heDtZKyspdGhpcy5ncmlkW0hdW1ldPTB9dGhpcy50cmFjZWJhY2tHcmlkPW5ldyBBcnJheSh0aGlzLmlNYXgpO2Zvcih2YXIgcnQ9MDtydDx0aGlzLmlNYXg7cnQrKyl7dGhpcy50cmFjZWJhY2tHcmlkW3J0XT1uZXcgQXJyYXkodGhpcy5qTWF4KTtmb3IodmFyIEo9MDtKPHRoaXMuak1heDtKKyspdGhpcy50cmFjZWJhY2tHcmlkW3J0XVtKXT1bbnVsbCxudWxsLG51bGxdfXRoaXMuYWxpZ25tZW50cz1bXSx0aGlzLnNjb3JlPS0xLHRoaXMuY29tcHV0ZUdyaWRzKCl9cmV0dXJuIG0oQyxbe2tleToiZ2V0U2NvcmUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2NvcmV9fSx7a2V5OiJnZXRBbGlnbm1lbnRzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFsaWdubWVudHN9fSx7a2V5OiJjb21wdXRlR3JpZHMiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBQPTE7UDx0aGlzLmpNYXg7UCsrKXRoaXMuZ3JpZFswXVtQXT10aGlzLmdyaWRbMF1bUC0xXSt0aGlzLmdhcF9wZW5hbHR5LHRoaXMudHJhY2ViYWNrR3JpZFswXVtQXT1bITEsITEsITBdO2Zvcih2YXIgRj0xO0Y8dGhpcy5pTWF4O0YrKyl0aGlzLmdyaWRbRl1bMF09dGhpcy5ncmlkW0YtMV1bMF0rdGhpcy5nYXBfcGVuYWx0eSx0aGlzLnRyYWNlYmFja0dyaWRbRl1bMF09WyExLCEwLCExXTtmb3IodmFyIGo9MTtqPHRoaXMuaU1heDtqKyspZm9yKHZhciBSPTE7Ujx0aGlzLmpNYXg7UisrKXt2YXIgSD12b2lkIDA7dGhpcy5zZXF1ZW5jZTFbai0xXT09PXRoaXMuc2VxdWVuY2UyW1ItMV0/SD10aGlzLmdyaWRbai0xXVtSLTFdK3RoaXMubWF0Y2hfc2NvcmU6SD10aGlzLmdyaWRbai0xXVtSLTFdK3RoaXMubWlzbWF0Y2hfcGVuYWx0eTt2YXIgWT10aGlzLmdyaWRbai0xXVtSXSt0aGlzLmdhcF9wZW5hbHR5LHJ0PXRoaXMuZ3JpZFtqXVtSLTFdK3RoaXMuZ2FwX3BlbmFsdHksSj1bSCxZLHJ0XSxpdD10aGlzLmFycmF5QWxsTWF4SW5kZXhlcyhKKTt0aGlzLmdyaWRbal1bUl09SltpdFswXV0sdGhpcy50cmFjZWJhY2tHcmlkW2pdW1JdPVtpdC5pbmNsdWRlcygwKSxpdC5pbmNsdWRlcygxKSxpdC5pbmNsdWRlcygyKV19dGhpcy5zY29yZT10aGlzLmdyaWRbdGhpcy5pTWF4LTFdW3RoaXMuak1heC0xXX19LHtrZXk6ImFsaWdubWVudFRyYWNlYmFjayIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgUD1bXTtmb3IoUC5wdXNoKHtwb3M6W3RoaXMuc2VxdWVuY2UxLmxlbmd0aCx0aGlzLnNlcXVlbmNlMi5sZW5ndGhdLHNlcTE6IiIsc2VxMjoiIn0pO1BbMF07KXt2YXIgRj1QWzBdLGo9dGhpcy50cmFjZWJhY2tHcmlkW0YucG9zWzBdXVtGLnBvc1sxXV07alswXSYmUC5wdXNoKHtwb3M6W0YucG9zWzBdLTEsRi5wb3NbMV0tMV0sc2VxMTp0aGlzLnNlcXVlbmNlMVtGLnBvc1swXS0xXStGLnNlcTEsc2VxMjp0aGlzLnNlcXVlbmNlMltGLnBvc1sxXS0xXStGLnNlcTJ9KSxqWzFdJiZQLnB1c2goe3BvczpbRi5wb3NbMF0tMSxGLnBvc1sxXV0sc2VxMTp0aGlzLnNlcXVlbmNlMVtGLnBvc1swXS0xXStGLnNlcTEsc2VxMjoiLSIrRi5zZXEyfSksalsyXSYmUC5wdXNoKHtwb3M6W0YucG9zWzBdLEYucG9zWzFdLTFdLHNlcTE6Ii0iK0Yuc2VxMSxzZXEyOnRoaXMuc2VxdWVuY2UyW0YucG9zWzFdLTFdK0Yuc2VxMn0pLEYucG9zWzBdPT09MCYmRi5wb3NbMV09PT0wJiZ0aGlzLmFsaWdubWVudHMucHVzaCh7c2VxdWVuY2UxOkYuc2VxMSxzZXF1ZW5jZTI6Ri5zZXEyfSksUC5zaGlmdCgpfXJldHVybiB0aGlzLmFsaWdubWVudHN9fSx7a2V5OiJnZXRBbGxJbmRleGVzIix2YWx1ZTpmdW5jdGlvbihQLEYpe2Zvcih2YXIgaj1bXSxSPS0xOyhSPVAuaW5kZXhPZihGLFIrMSkpIT09LTE7KWoucHVzaChSKTtyZXR1cm4gan19LHtrZXk6ImFycmF5QWxsTWF4SW5kZXhlcyIsdmFsdWU6ZnVuY3Rpb24oUCl7cmV0dXJuIHRoaXMuZ2V0QWxsSW5kZXhlcyhQLE1hdGgubWF4LmFwcGx5KG51bGwsUCkpfX1dKSxDfSgpO2YuZXhwb3J0cz1FfSxmdW5jdGlvbihmLHAsdil7dmFyIG09ZnVuY3Rpb24oKXt9O20uRkRMYXlvdXQ9digxOCksbS5GRExheW91dENvbnN0YW50cz12KDcpLG0uRkRMYXlvdXRFZGdlPXYoMTkpLG0uRkRMYXlvdXROb2RlPXYoMjApLG0uRGltZW5zaW9uRD12KDIxKSxtLkhhc2hNYXA9digyMiksbS5IYXNoU2V0PXYoMjMpLG0uSUdlb21ldHJ5PXYoOCksbS5JTWF0aD12KDkpLG0uSW50ZWdlcj12KDEwKSxtLlBvaW50PXYoMTIpLG0uUG9pbnREPXYoNCksbS5SYW5kb21TZWVkPXYoMTYpLG0uUmVjdGFuZ2xlRD12KDEzKSxtLlRyYW5zZm9ybT12KDE3KSxtLlVuaXF1ZUlER2VuZXJldG9yPXYoMTQpLG0uUXVpY2tzb3J0PXYoMjQpLG0uTGlua2VkTGlzdD12KDExKSxtLkxHcmFwaE9iamVjdD12KDIpLG0uTEdyYXBoPXYoNSksbS5MRWRnZT12KDEpLG0uTEdyYXBoTWFuYWdlcj12KDYpLG0uTE5vZGU9digzKSxtLkxheW91dD12KDE1KSxtLkxheW91dENvbnN0YW50cz12KDApLG0uTmVlZGxlbWFuV3Vuc2NoPXYoMjUpLGYuZXhwb3J0cz1tfSxmdW5jdGlvbihmLHAsdil7ZnVuY3Rpb24gbSgpe3RoaXMubGlzdGVuZXJzPVtdfXZhciBiPW0ucHJvdG90eXBlO2IuYWRkTGlzdGVuZXI9ZnVuY3Rpb24oRSxDKXt0aGlzLmxpc3RlbmVycy5wdXNoKHtldmVudDpFLGNhbGxiYWNrOkN9KX0sYi5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbihFLEMpe2Zvcih2YXIgQT10aGlzLmxpc3RlbmVycy5sZW5ndGg7QT49MDtBLS0pe3ZhciBQPXRoaXMubGlzdGVuZXJzW0FdO1AuZXZlbnQ9PT1FJiZQLmNhbGxiYWNrPT09QyYmdGhpcy5saXN0ZW5lcnMuc3BsaWNlKEEsMSl9fSxiLmVtaXQ9ZnVuY3Rpb24oRSxDKXtmb3IodmFyIEE9MDtBPHRoaXMubGlzdGVuZXJzLmxlbmd0aDtBKyspe3ZhciBQPXRoaXMubGlzdGVuZXJzW0FdO0U9PT1QLmV2ZW50JiZQLmNhbGxiYWNrKEMpfX0sZi5leHBvcnRzPW19XSl9KX0oSGd0KSksSGd0LmV4cG9ydHN9dmFyIFhqdDtmdW5jdGlvbiB1V2UoKXtyZXR1cm4gWGp0fHwoWGp0PTEsZnVuY3Rpb24oaSxhKXsoZnVuY3Rpb24ocCx2KXtpLmV4cG9ydHM9dihjV2UoKSl9KShkMCxmdW5jdGlvbihmKXtyZXR1cm4gZnVuY3Rpb24ocCl7dmFyIHY9e307ZnVuY3Rpb24gbShiKXtpZih2W2JdKXJldHVybiB2W2JdLmV4cG9ydHM7dmFyIEU9dltiXT17aTpiLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIHBbYl0uY2FsbChFLmV4cG9ydHMsRSxFLmV4cG9ydHMsbSksRS5sPSEwLEUuZXhwb3J0c31yZXR1cm4gbS5tPXAsbS5jPXYsbS5pPWZ1bmN0aW9uKGIpe3JldHVybiBifSxtLmQ9ZnVuY3Rpb24oYixFLEMpe20ubyhiLEUpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoYixFLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6Q30pfSxtLm49ZnVuY3Rpb24oYil7dmFyIEU9YiYmYi5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIGIuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gYn07cmV0dXJuIG0uZChFLCJhIixFKSxFfSxtLm89ZnVuY3Rpb24oYixFKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsRSl9LG0ucD0iIixtKG0ucz03KX0oW2Z1bmN0aW9uKHAsdil7cC5leHBvcnRzPWZ9LGZ1bmN0aW9uKHAsdixtKXt2YXIgYj1tKDApLkZETGF5b3V0Q29uc3RhbnRzO2Z1bmN0aW9uIEUoKXt9Zm9yKHZhciBDIGluIGIpRVtDXT1iW0NdO0UuREVGQVVMVF9VU0VfTVVMVElfTEVWRUxfU0NBTElORz0hMSxFLkRFRkFVTFRfUkFESUFMX1NFUEFSQVRJT049Yi5ERUZBVUxUX0VER0VfTEVOR1RILEUuREVGQVVMVF9DT01QT05FTlRfU0VQRVJBVElPTj02MCxFLlRJTEU9ITAsRS5USUxJTkdfUEFERElOR19WRVJUSUNBTD0xMCxFLlRJTElOR19QQURESU5HX0hPUklaT05UQUw9MTAsRS5UUkVFX1JFRFVDVElPTl9PTl9JTkNSRU1FTlRBTD0hMSxwLmV4cG9ydHM9RX0sZnVuY3Rpb24ocCx2LG0pe3ZhciBiPW0oMCkuRkRMYXlvdXRFZGdlO2Z1bmN0aW9uIEUoQSxQLEYpe2IuY2FsbCh0aGlzLEEsUCxGKX1FLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGIucHJvdG90eXBlKTtmb3IodmFyIEMgaW4gYilFW0NdPWJbQ107cC5leHBvcnRzPUV9LGZ1bmN0aW9uKHAsdixtKXt2YXIgYj1tKDApLkxHcmFwaDtmdW5jdGlvbiBFKEEsUCxGKXtiLmNhbGwodGhpcyxBLFAsRil9RS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShiLnByb3RvdHlwZSk7Zm9yKHZhciBDIGluIGIpRVtDXT1iW0NdO3AuZXhwb3J0cz1FfSxmdW5jdGlvbihwLHYsbSl7dmFyIGI9bSgwKS5MR3JhcGhNYW5hZ2VyO2Z1bmN0aW9uIEUoQSl7Yi5jYWxsKHRoaXMsQSl9RS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShiLnByb3RvdHlwZSk7Zm9yKHZhciBDIGluIGIpRVtDXT1iW0NdO3AuZXhwb3J0cz1FfSxmdW5jdGlvbihwLHYsbSl7dmFyIGI9bSgwKS5GRExheW91dE5vZGUsRT1tKDApLklNYXRoO2Z1bmN0aW9uIEMoUCxGLGosUil7Yi5jYWxsKHRoaXMsUCxGLGosUil9Qy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShiLnByb3RvdHlwZSk7Zm9yKHZhciBBIGluIGIpQ1tBXT1iW0FdO0MucHJvdG90eXBlLm1vdmU9ZnVuY3Rpb24oKXt2YXIgUD10aGlzLmdyYXBoTWFuYWdlci5nZXRMYXlvdXQoKTt0aGlzLmRpc3BsYWNlbWVudFg9UC5jb29saW5nRmFjdG9yKih0aGlzLnNwcmluZ0ZvcmNlWCt0aGlzLnJlcHVsc2lvbkZvcmNlWCt0aGlzLmdyYXZpdGF0aW9uRm9yY2VYKS90aGlzLm5vT2ZDaGlsZHJlbix0aGlzLmRpc3BsYWNlbWVudFk9UC5jb29saW5nRmFjdG9yKih0aGlzLnNwcmluZ0ZvcmNlWSt0aGlzLnJlcHVsc2lvbkZvcmNlWSt0aGlzLmdyYXZpdGF0aW9uRm9yY2VZKS90aGlzLm5vT2ZDaGlsZHJlbixNYXRoLmFicyh0aGlzLmRpc3BsYWNlbWVudFgpPlAuY29vbGluZ0ZhY3RvcipQLm1heE5vZGVEaXNwbGFjZW1lbnQmJih0aGlzLmRpc3BsYWNlbWVudFg9UC5jb29saW5nRmFjdG9yKlAubWF4Tm9kZURpc3BsYWNlbWVudCpFLnNpZ24odGhpcy5kaXNwbGFjZW1lbnRYKSksTWF0aC5hYnModGhpcy5kaXNwbGFjZW1lbnRZKT5QLmNvb2xpbmdGYWN0b3IqUC5tYXhOb2RlRGlzcGxhY2VtZW50JiYodGhpcy5kaXNwbGFjZW1lbnRZPVAuY29vbGluZ0ZhY3RvcipQLm1heE5vZGVEaXNwbGFjZW1lbnQqRS5zaWduKHRoaXMuZGlzcGxhY2VtZW50WSkpLHRoaXMuY2hpbGQ9PW51bGw/dGhpcy5tb3ZlQnkodGhpcy5kaXNwbGFjZW1lbnRYLHRoaXMuZGlzcGxhY2VtZW50WSk6dGhpcy5jaGlsZC5nZXROb2RlcygpLmxlbmd0aD09MD90aGlzLm1vdmVCeSh0aGlzLmRpc3BsYWNlbWVudFgsdGhpcy5kaXNwbGFjZW1lbnRZKTp0aGlzLnByb3BvZ2F0ZURpc3BsYWNlbWVudFRvQ2hpbGRyZW4odGhpcy5kaXNwbGFjZW1lbnRYLHRoaXMuZGlzcGxhY2VtZW50WSksUC50b3RhbERpc3BsYWNlbWVudCs9TWF0aC5hYnModGhpcy5kaXNwbGFjZW1lbnRYKStNYXRoLmFicyh0aGlzLmRpc3BsYWNlbWVudFkpLHRoaXMuc3ByaW5nRm9yY2VYPTAsdGhpcy5zcHJpbmdGb3JjZVk9MCx0aGlzLnJlcHVsc2lvbkZvcmNlWD0wLHRoaXMucmVwdWxzaW9uRm9yY2VZPTAsdGhpcy5ncmF2aXRhdGlvbkZvcmNlWD0wLHRoaXMuZ3Jhdml0YXRpb25Gb3JjZVk9MCx0aGlzLmRpc3BsYWNlbWVudFg9MCx0aGlzLmRpc3BsYWNlbWVudFk9MH0sQy5wcm90b3R5cGUucHJvcG9nYXRlRGlzcGxhY2VtZW50VG9DaGlsZHJlbj1mdW5jdGlvbihQLEYpe2Zvcih2YXIgaj10aGlzLmdldENoaWxkKCkuZ2V0Tm9kZXMoKSxSLEg9MDtIPGoubGVuZ3RoO0grKylSPWpbSF0sUi5nZXRDaGlsZCgpPT1udWxsPyhSLm1vdmVCeShQLEYpLFIuZGlzcGxhY2VtZW50WCs9UCxSLmRpc3BsYWNlbWVudFkrPUYpOlIucHJvcG9nYXRlRGlzcGxhY2VtZW50VG9DaGlsZHJlbihQLEYpfSxDLnByb3RvdHlwZS5zZXRQcmVkMT1mdW5jdGlvbihQKXt0aGlzLnByZWQxPVB9LEMucHJvdG90eXBlLmdldFByZWQxPWZ1bmN0aW9uKCl7cmV0dXJuIHByZWQxfSxDLnByb3RvdHlwZS5nZXRQcmVkMj1mdW5jdGlvbigpe3JldHVybiBwcmVkMn0sQy5wcm90b3R5cGUuc2V0TmV4dD1mdW5jdGlvbihQKXt0aGlzLm5leHQ9UH0sQy5wcm90b3R5cGUuZ2V0TmV4dD1mdW5jdGlvbigpe3JldHVybiBuZXh0fSxDLnByb3RvdHlwZS5zZXRQcm9jZXNzZWQ9ZnVuY3Rpb24oUCl7dGhpcy5wcm9jZXNzZWQ9UH0sQy5wcm90b3R5cGUuaXNQcm9jZXNzZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gcHJvY2Vzc2VkfSxwLmV4cG9ydHM9Q30sZnVuY3Rpb24ocCx2LG0pe3ZhciBiPW0oMCkuRkRMYXlvdXQsRT1tKDQpLEM9bSgzKSxBPW0oNSksUD1tKDIpLEY9bSgxKSxqPW0oMCkuRkRMYXlvdXRDb25zdGFudHMsUj1tKDApLkxheW91dENvbnN0YW50cyxIPW0oMCkuUG9pbnQsWT1tKDApLlBvaW50RCxydD1tKDApLkxheW91dCxKPW0oMCkuSW50ZWdlcixpdD1tKDApLklHZW9tZXRyeSxmdD1tKDApLkxHcmFwaCxUdD1tKDApLlRyYW5zZm9ybTtmdW5jdGlvbiBrdCgpe2IuY2FsbCh0aGlzKSx0aGlzLnRvQmVUaWxlZD17fX1rdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShiLnByb3RvdHlwZSk7Zm9yKHZhciBtdCBpbiBiKWt0W210XT1iW210XTtrdC5wcm90b3R5cGUubmV3R3JhcGhNYW5hZ2VyPWZ1bmN0aW9uKCl7dmFyIGN0PW5ldyBFKHRoaXMpO3JldHVybiB0aGlzLmdyYXBoTWFuYWdlcj1jdCxjdH0sa3QucHJvdG90eXBlLm5ld0dyYXBoPWZ1bmN0aW9uKGN0KXtyZXR1cm4gbmV3IEMobnVsbCx0aGlzLmdyYXBoTWFuYWdlcixjdCl9LGt0LnByb3RvdHlwZS5uZXdOb2RlPWZ1bmN0aW9uKGN0KXtyZXR1cm4gbmV3IEEodGhpcy5ncmFwaE1hbmFnZXIsY3QpfSxrdC5wcm90b3R5cGUubmV3RWRnZT1mdW5jdGlvbihjdCl7cmV0dXJuIG5ldyBQKG51bGwsbnVsbCxjdCl9LGt0LnByb3RvdHlwZS5pbml0UGFyYW1ldGVycz1mdW5jdGlvbigpe2IucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzLmNhbGwodGhpcyxhcmd1bWVudHMpLHRoaXMuaXNTdWJMYXlvdXR8fChGLkRFRkFVTFRfRURHRV9MRU5HVEg8MTA/dGhpcy5pZGVhbEVkZ2VMZW5ndGg9MTA6dGhpcy5pZGVhbEVkZ2VMZW5ndGg9Ri5ERUZBVUxUX0VER0VfTEVOR1RILHRoaXMudXNlU21hcnRJZGVhbEVkZ2VMZW5ndGhDYWxjdWxhdGlvbj1GLkRFRkFVTFRfVVNFX1NNQVJUX0lERUFMX0VER0VfTEVOR1RIX0NBTENVTEFUSU9OLHRoaXMuc3ByaW5nQ29uc3RhbnQ9ai5ERUZBVUxUX1NQUklOR19TVFJFTkdUSCx0aGlzLnJlcHVsc2lvbkNvbnN0YW50PWouREVGQVVMVF9SRVBVTFNJT05fU1RSRU5HVEgsdGhpcy5ncmF2aXR5Q29uc3RhbnQ9ai5ERUZBVUxUX0dSQVZJVFlfU1RSRU5HVEgsdGhpcy5jb21wb3VuZEdyYXZpdHlDb25zdGFudD1qLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9TVFJFTkdUSCx0aGlzLmdyYXZpdHlSYW5nZUZhY3Rvcj1qLkRFRkFVTFRfR1JBVklUWV9SQU5HRV9GQUNUT1IsdGhpcy5jb21wb3VuZEdyYXZpdHlSYW5nZUZhY3Rvcj1qLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1IsdGhpcy5wcnVuZWROb2Rlc0FsbD1bXSx0aGlzLmdyb3dUcmVlSXRlcmF0aW9ucz0wLHRoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zPTAsdGhpcy5pc1RyZWVHcm93aW5nPSExLHRoaXMuaXNHcm93dGhGaW5pc2hlZD0hMSx0aGlzLmNvb2xpbmdDeWNsZT0wLHRoaXMubWF4Q29vbGluZ0N5Y2xlPXRoaXMubWF4SXRlcmF0aW9ucy9qLkNPTlZFUkdFTkNFX0NIRUNLX1BFUklPRCx0aGlzLmZpbmFsVGVtcGVyYXR1cmU9ai5DT05WRVJHRU5DRV9DSEVDS19QRVJJT0QvdGhpcy5tYXhJdGVyYXRpb25zLHRoaXMuY29vbGluZ0FkanVzdGVyPTEpfSxrdC5wcm90b3R5cGUubGF5b3V0PWZ1bmN0aW9uKCl7dmFyIGN0PVIuREVGQVVMVF9DUkVBVEVfQkVORFNfQVNfTkVFREVEO3JldHVybiBjdCYmKHRoaXMuY3JlYXRlQmVuZHBvaW50cygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKSksdGhpcy5sZXZlbD0wLHRoaXMuY2xhc3NpY0xheW91dCgpfSxrdC5wcm90b3R5cGUuY2xhc3NpY0xheW91dD1mdW5jdGlvbigpe2lmKHRoaXMubm9kZXNXaXRoR3Jhdml0eT10aGlzLmNhbGN1bGF0ZU5vZGVzVG9BcHBseUdyYXZpdGF0aW9uVG8oKSx0aGlzLmdyYXBoTWFuYWdlci5zZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbih0aGlzLm5vZGVzV2l0aEdyYXZpdHkpLHRoaXMuY2FsY05vT2ZDaGlsZHJlbkZvckFsbE5vZGVzKCksdGhpcy5ncmFwaE1hbmFnZXIuY2FsY0xvd2VzdENvbW1vbkFuY2VzdG9ycygpLHRoaXMuZ3JhcGhNYW5hZ2VyLmNhbGNJbmNsdXNpb25UcmVlRGVwdGhzKCksdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmNhbGNFc3RpbWF0ZWRTaXplKCksdGhpcy5jYWxjSWRlYWxFZGdlTGVuZ3RocygpLHRoaXMuaW5jcmVtZW50YWwpe2lmKEYuVFJFRV9SRURVQ1RJT05fT05fSU5DUkVNRU5UQUwpe3RoaXMucmVkdWNlVHJlZXMoKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCk7dmFyIHl0PW5ldyBTZXQodGhpcy5nZXRBbGxOb2RlcygpKSxzdD10aGlzLm5vZGVzV2l0aEdyYXZpdHkuZmlsdGVyKGZ1bmN0aW9uKGR0KXtyZXR1cm4geXQuaGFzKGR0KX0pO3RoaXMuZ3JhcGhNYW5hZ2VyLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKHN0KX19ZWxzZXt2YXIgY3Q9dGhpcy5nZXRGbGF0Rm9yZXN0KCk7aWYoY3QubGVuZ3RoPjApdGhpcy5wb3NpdGlvbk5vZGVzUmFkaWFsbHkoY3QpO2Vsc2V7dGhpcy5yZWR1Y2VUcmVlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oKTt2YXIgeXQ9bmV3IFNldCh0aGlzLmdldEFsbE5vZGVzKCkpLHN0PXRoaXMubm9kZXNXaXRoR3Jhdml0eS5maWx0ZXIoZnVuY3Rpb24oeHQpe3JldHVybiB5dC5oYXMoeHQpfSk7dGhpcy5ncmFwaE1hbmFnZXIuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oc3QpLHRoaXMucG9zaXRpb25Ob2Rlc1JhbmRvbWx5KCl9fXJldHVybiB0aGlzLmluaXRTcHJpbmdFbWJlZGRlcigpLHRoaXMucnVuU3ByaW5nRW1iZWRkZXIoKSwhMH0sa3QucHJvdG90eXBlLnRpY2s9ZnVuY3Rpb24oKXtpZih0aGlzLnRvdGFsSXRlcmF0aW9ucysrLHRoaXMudG90YWxJdGVyYXRpb25zPT09dGhpcy5tYXhJdGVyYXRpb25zJiYhdGhpcy5pc1RyZWVHcm93aW5nJiYhdGhpcy5pc0dyb3d0aEZpbmlzaGVkKWlmKHRoaXMucHJ1bmVkTm9kZXNBbGwubGVuZ3RoPjApdGhpcy5pc1RyZWVHcm93aW5nPSEwO2Vsc2UgcmV0dXJuITA7aWYodGhpcy50b3RhbEl0ZXJhdGlvbnMlai5DT05WRVJHRU5DRV9DSEVDS19QRVJJT0Q9PTAmJiF0aGlzLmlzVHJlZUdyb3dpbmcmJiF0aGlzLmlzR3Jvd3RoRmluaXNoZWQpe2lmKHRoaXMuaXNDb252ZXJnZWQoKSlpZih0aGlzLnBydW5lZE5vZGVzQWxsLmxlbmd0aD4wKXRoaXMuaXNUcmVlR3Jvd2luZz0hMDtlbHNlIHJldHVybiEwO3RoaXMuY29vbGluZ0N5Y2xlKyssdGhpcy5sYXlvdXRRdWFsaXR5PT0wP3RoaXMuY29vbGluZ0FkanVzdGVyPXRoaXMuY29vbGluZ0N5Y2xlOnRoaXMubGF5b3V0UXVhbGl0eT09MSYmKHRoaXMuY29vbGluZ0FkanVzdGVyPXRoaXMuY29vbGluZ0N5Y2xlLzMpLHRoaXMuY29vbGluZ0ZhY3Rvcj1NYXRoLm1heCh0aGlzLmluaXRpYWxDb29saW5nRmFjdG9yLU1hdGgucG93KHRoaXMuY29vbGluZ0N5Y2xlLE1hdGgubG9nKDEwMCoodGhpcy5pbml0aWFsQ29vbGluZ0ZhY3Rvci10aGlzLmZpbmFsVGVtcGVyYXR1cmUpKS9NYXRoLmxvZyh0aGlzLm1heENvb2xpbmdDeWNsZSkpLzEwMCp0aGlzLmNvb2xpbmdBZGp1c3Rlcix0aGlzLmZpbmFsVGVtcGVyYXR1cmUpLHRoaXMuYW5pbWF0aW9uUGVyaW9kPU1hdGguY2VpbCh0aGlzLmluaXRpYWxBbmltYXRpb25QZXJpb2QqTWF0aC5zcXJ0KHRoaXMuY29vbGluZ0ZhY3RvcikpfWlmKHRoaXMuaXNUcmVlR3Jvd2luZyl7aWYodGhpcy5ncm93VHJlZUl0ZXJhdGlvbnMlMTA9PTApaWYodGhpcy5wcnVuZWROb2Rlc0FsbC5sZW5ndGg+MCl7dGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCksdGhpcy51cGRhdGVHcmlkKCksdGhpcy5ncm93VHJlZSh0aGlzLnBydW5lZE5vZGVzQWxsKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCk7dmFyIGN0PW5ldyBTZXQodGhpcy5nZXRBbGxOb2RlcygpKSx5dD10aGlzLm5vZGVzV2l0aEdyYXZpdHkuZmlsdGVyKGZ1bmN0aW9uKGh0KXtyZXR1cm4gY3QuaGFzKGh0KX0pO3RoaXMuZ3JhcGhNYW5hZ2VyLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKHl0KSx0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKSx0aGlzLnVwZGF0ZUdyaWQoKSx0aGlzLmNvb2xpbmdGYWN0b3I9ai5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMfWVsc2UgdGhpcy5pc1RyZWVHcm93aW5nPSExLHRoaXMuaXNHcm93dGhGaW5pc2hlZD0hMDt0aGlzLmdyb3dUcmVlSXRlcmF0aW9ucysrfWlmKHRoaXMuaXNHcm93dGhGaW5pc2hlZCl7aWYodGhpcy5pc0NvbnZlcmdlZCgpKXJldHVybiEwO3RoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zJTEwPT0wJiYodGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCksdGhpcy51cGRhdGVHcmlkKCkpLHRoaXMuY29vbGluZ0ZhY3Rvcj1qLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUwqKCgxMDAtdGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMpLzEwMCksdGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMrK312YXIgc3Q9IXRoaXMuaXNUcmVlR3Jvd2luZyYmIXRoaXMuaXNHcm93dGhGaW5pc2hlZCx4dD10aGlzLmdyb3dUcmVlSXRlcmF0aW9ucyUxMD09MSYmdGhpcy5pc1RyZWVHcm93aW5nfHx0aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucyUxMD09MSYmdGhpcy5pc0dyb3d0aEZpbmlzaGVkO3JldHVybiB0aGlzLnRvdGFsRGlzcGxhY2VtZW50PTAsdGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCksdGhpcy5jYWxjU3ByaW5nRm9yY2VzKCksdGhpcy5jYWxjUmVwdWxzaW9uRm9yY2VzKHN0LHh0KSx0aGlzLmNhbGNHcmF2aXRhdGlvbmFsRm9yY2VzKCksdGhpcy5tb3ZlTm9kZXMoKSx0aGlzLmFuaW1hdGUoKSwhMX0sa3QucHJvdG90eXBlLmdldFBvc2l0aW9uc0RhdGE9ZnVuY3Rpb24oKXtmb3IodmFyIGN0PXRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCkseXQ9e30sc3Q9MDtzdDxjdC5sZW5ndGg7c3QrKyl7dmFyIHh0PWN0W3N0XS5yZWN0LGh0PWN0W3N0XS5pZDt5dFtodF09e2lkOmh0LHg6eHQuZ2V0Q2VudGVyWCgpLHk6eHQuZ2V0Q2VudGVyWSgpLHc6eHQud2lkdGgsaDp4dC5oZWlnaHR9fXJldHVybiB5dH0sa3QucHJvdG90eXBlLnJ1blNwcmluZ0VtYmVkZGVyPWZ1bmN0aW9uKCl7dGhpcy5pbml0aWFsQW5pbWF0aW9uUGVyaW9kPTI1LHRoaXMuYW5pbWF0aW9uUGVyaW9kPXRoaXMuaW5pdGlhbEFuaW1hdGlvblBlcmlvZDt2YXIgY3Q9ITE7aWYoai5BTklNQVRFPT09ImR1cmluZyIpdGhpcy5lbWl0KCJsYXlvdXRzdGFydGVkIik7ZWxzZXtmb3IoOyFjdDspY3Q9dGhpcy50aWNrKCk7dGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCl9fSxrdC5wcm90b3R5cGUuY2FsY3VsYXRlTm9kZXNUb0FwcGx5R3Jhdml0YXRpb25Ubz1mdW5jdGlvbigpe3ZhciBjdD1bXSx5dCxzdD10aGlzLmdyYXBoTWFuYWdlci5nZXRHcmFwaHMoKSx4dD1zdC5sZW5ndGgsaHQ7Zm9yKGh0PTA7aHQ8eHQ7aHQrKyl5dD1zdFtodF0seXQudXBkYXRlQ29ubmVjdGVkKCkseXQuaXNDb25uZWN0ZWR8fChjdD1jdC5jb25jYXQoeXQuZ2V0Tm9kZXMoKSkpO3JldHVybiBjdH0sa3QucHJvdG90eXBlLmNyZWF0ZUJlbmRwb2ludHM9ZnVuY3Rpb24oKXt2YXIgY3Q9W107Y3Q9Y3QuY29uY2F0KHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCkpO3ZhciB5dD1uZXcgU2V0LHN0O2ZvcihzdD0wO3N0PGN0Lmxlbmd0aDtzdCsrKXt2YXIgeHQ9Y3Rbc3RdO2lmKCF5dC5oYXMoeHQpKXt2YXIgaHQ9eHQuZ2V0U291cmNlKCksZHQ9eHQuZ2V0VGFyZ2V0KCk7aWYoaHQ9PWR0KXh0LmdldEJlbmRwb2ludHMoKS5wdXNoKG5ldyBZKSx4dC5nZXRCZW5kcG9pbnRzKCkucHVzaChuZXcgWSksdGhpcy5jcmVhdGVEdW1teU5vZGVzRm9yQmVuZHBvaW50cyh4dCkseXQuYWRkKHh0KTtlbHNle3ZhciBDdD1bXTtpZihDdD1DdC5jb25jYXQoaHQuZ2V0RWRnZUxpc3RUb05vZGUoZHQpKSxDdD1DdC5jb25jYXQoZHQuZ2V0RWRnZUxpc3RUb05vZGUoaHQpKSwheXQuaGFzKEN0WzBdKSl7aWYoQ3QubGVuZ3RoPjEpe3ZhciB0dDtmb3IodHQ9MDt0dDxDdC5sZW5ndGg7dHQrKyl7dmFyIFB0PUN0W3R0XTtQdC5nZXRCZW5kcG9pbnRzKCkucHVzaChuZXcgWSksdGhpcy5jcmVhdGVEdW1teU5vZGVzRm9yQmVuZHBvaW50cyhQdCl9fUN0LmZvckVhY2goZnVuY3Rpb24ocHQpe3l0LmFkZChwdCl9KX19fWlmKHl0LnNpemU9PWN0Lmxlbmd0aClicmVha319LGt0LnByb3RvdHlwZS5wb3NpdGlvbk5vZGVzUmFkaWFsbHk9ZnVuY3Rpb24oY3Qpe2Zvcih2YXIgeXQ9bmV3IEgoMCwwKSxzdD1NYXRoLmNlaWwoTWF0aC5zcXJ0KGN0Lmxlbmd0aCkpLHh0PTAsaHQ9MCxkdD0wLEN0PW5ldyBZKDAsMCksdHQ9MDt0dDxjdC5sZW5ndGg7dHQrKyl7dHQlc3Q9PTAmJihkdD0wLGh0PXh0LHR0IT0wJiYoaHQrPUYuREVGQVVMVF9DT01QT05FTlRfU0VQRVJBVElPTikseHQ9MCk7dmFyIFB0PWN0W3R0XSxwdD1ydC5maW5kQ2VudGVyT2ZUcmVlKFB0KTt5dC54PWR0LHl0Lnk9aHQsQ3Q9a3QucmFkaWFsTGF5b3V0KFB0LHB0LHl0KSxDdC55Pnh0JiYoeHQ9TWF0aC5mbG9vcihDdC55KSksZHQ9TWF0aC5mbG9vcihDdC54K0YuREVGQVVMVF9DT01QT05FTlRfU0VQRVJBVElPTil9dGhpcy50cmFuc2Zvcm0obmV3IFkoUi5XT1JMRF9DRU5URVJfWC1DdC54LzIsUi5XT1JMRF9DRU5URVJfWS1DdC55LzIpKX0sa3QucmFkaWFsTGF5b3V0PWZ1bmN0aW9uKGN0LHl0LHN0KXt2YXIgeHQ9TWF0aC5tYXgodGhpcy5tYXhEaWFnb25hbEluVHJlZShjdCksRi5ERUZBVUxUX1JBRElBTF9TRVBBUkFUSU9OKTtrdC5icmFuY2hSYWRpYWxMYXlvdXQoeXQsbnVsbCwwLDM1OSwwLHh0KTt2YXIgaHQ9ZnQuY2FsY3VsYXRlQm91bmRzKGN0KSxkdD1uZXcgVHQ7ZHQuc2V0RGV2aWNlT3JnWChodC5nZXRNaW5YKCkpLGR0LnNldERldmljZU9yZ1koaHQuZ2V0TWluWSgpKSxkdC5zZXRXb3JsZE9yZ1goc3QueCksZHQuc2V0V29ybGRPcmdZKHN0LnkpO2Zvcih2YXIgQ3Q9MDtDdDxjdC5sZW5ndGg7Q3QrKyl7dmFyIHR0PWN0W0N0XTt0dC50cmFuc2Zvcm0oZHQpfXZhciBQdD1uZXcgWShodC5nZXRNYXhYKCksaHQuZ2V0TWF4WSgpKTtyZXR1cm4gZHQuaW52ZXJzZVRyYW5zZm9ybVBvaW50KFB0KX0sa3QuYnJhbmNoUmFkaWFsTGF5b3V0PWZ1bmN0aW9uKGN0LHl0LHN0LHh0LGh0LGR0KXt2YXIgQ3Q9KHh0LXN0KzEpLzI7Q3Q8MCYmKEN0Kz0xODApO3ZhciB0dD0oQ3Qrc3QpJTM2MCxQdD10dCppdC5UV09fUEkvMzYwLHB0PWh0Kk1hdGguY29zKFB0KSxGdD1odCpNYXRoLnNpbihQdCk7Y3Quc2V0Q2VudGVyKHB0LEZ0KTt2YXIgWD1bXTtYPVguY29uY2F0KGN0LmdldEVkZ2VzKCkpO3ZhciBSdD1YLmxlbmd0aDt5dCE9bnVsbCYmUnQtLTtmb3IodmFyIEJ0PTAsdnQ9WC5sZW5ndGgsT3QsVnQ9Y3QuZ2V0RWRnZXNCZXR3ZWVuKHl0KTtWdC5sZW5ndGg+MTspe3ZhciBxZT1WdFswXTtWdC5zcGxpY2UoMCwxKTt2YXIgX249WC5pbmRleE9mKHFlKTtfbj49MCYmWC5zcGxpY2UoX24sMSksdnQtLSxSdC0tfXl0IT1udWxsP090PShYLmluZGV4T2YoVnRbMF0pKzEpJXZ0Ok90PTA7Zm9yKHZhciBUZT1NYXRoLmFicyh4dC1zdCkvUnQsV249T3Q7QnQhPVJ0O1duPSsrV24ldnQpe3ZhciBBZT1YW1duXS5nZXRPdGhlckVuZChjdCk7aWYoQWUhPXl0KXt2YXIgbmU9KHN0K0J0KlRlKSUzNjAsa2U9KG5lK1RlKSUzNjA7a3QuYnJhbmNoUmFkaWFsTGF5b3V0KEFlLGN0LG5lLGtlLGh0K2R0LGR0KSxCdCsrfX19LGt0Lm1heERpYWdvbmFsSW5UcmVlPWZ1bmN0aW9uKGN0KXtmb3IodmFyIHl0PUouTUlOX1ZBTFVFLHN0PTA7c3Q8Y3QubGVuZ3RoO3N0Kyspe3ZhciB4dD1jdFtzdF0saHQ9eHQuZ2V0RGlhZ29uYWwoKTtodD55dCYmKHl0PWh0KX1yZXR1cm4geXR9LGt0LnByb3RvdHlwZS5jYWxjUmVwdWxzaW9uUmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gMioodGhpcy5sZXZlbCsxKSp0aGlzLmlkZWFsRWRnZUxlbmd0aH0sa3QucHJvdG90eXBlLmdyb3VwWmVyb0RlZ3JlZU1lbWJlcnM9ZnVuY3Rpb24oKXt2YXIgY3Q9dGhpcyx5dD17fTt0aGlzLm1lbWJlckdyb3Vwcz17fSx0aGlzLmlkVG9EdW1teU5vZGU9e307Zm9yKHZhciBzdD1bXSx4dD10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpLGh0PTA7aHQ8eHQubGVuZ3RoO2h0Kyspe3ZhciBkdD14dFtodF0sQ3Q9ZHQuZ2V0UGFyZW50KCk7dGhpcy5nZXROb2RlRGVncmVlV2l0aENoaWxkcmVuKGR0KT09PTAmJihDdC5pZD09bnVsbHx8IXRoaXMuZ2V0VG9CZVRpbGVkKEN0KSkmJnN0LnB1c2goZHQpfWZvcih2YXIgaHQ9MDtodDxzdC5sZW5ndGg7aHQrKyl7dmFyIGR0PXN0W2h0XSx0dD1kdC5nZXRQYXJlbnQoKS5pZDt0eXBlb2YgeXRbdHRdPiJ1IiYmKHl0W3R0XT1bXSkseXRbdHRdPXl0W3R0XS5jb25jYXQoZHQpfU9iamVjdC5rZXlzKHl0KS5mb3JFYWNoKGZ1bmN0aW9uKFB0KXtpZih5dFtQdF0ubGVuZ3RoPjEpe3ZhciBwdD0iRHVtbXlDb21wb3VuZF8iK1B0O2N0Lm1lbWJlckdyb3Vwc1twdF09eXRbUHRdO3ZhciBGdD15dFtQdF1bMF0uZ2V0UGFyZW50KCksWD1uZXcgQShjdC5ncmFwaE1hbmFnZXIpO1guaWQ9cHQsWC5wYWRkaW5nTGVmdD1GdC5wYWRkaW5nTGVmdHx8MCxYLnBhZGRpbmdSaWdodD1GdC5wYWRkaW5nUmlnaHR8fDAsWC5wYWRkaW5nQm90dG9tPUZ0LnBhZGRpbmdCb3R0b218fDAsWC5wYWRkaW5nVG9wPUZ0LnBhZGRpbmdUb3B8fDAsY3QuaWRUb0R1bW15Tm9kZVtwdF09WDt2YXIgUnQ9Y3QuZ2V0R3JhcGhNYW5hZ2VyKCkuYWRkKGN0Lm5ld0dyYXBoKCksWCksQnQ9RnQuZ2V0Q2hpbGQoKTtCdC5hZGQoWCk7Zm9yKHZhciB2dD0wO3Z0PHl0W1B0XS5sZW5ndGg7dnQrKyl7dmFyIE90PXl0W1B0XVt2dF07QnQucmVtb3ZlKE90KSxSdC5hZGQoT3QpfX19KX0sa3QucHJvdG90eXBlLmNsZWFyQ29tcG91bmRzPWZ1bmN0aW9uKCl7dmFyIGN0PXt9LHl0PXt9O3RoaXMucGVyZm9ybURGU09uQ29tcG91bmRzKCk7Zm9yKHZhciBzdD0wO3N0PHRoaXMuY29tcG91bmRPcmRlci5sZW5ndGg7c3QrKyl5dFt0aGlzLmNvbXBvdW5kT3JkZXJbc3RdLmlkXT10aGlzLmNvbXBvdW5kT3JkZXJbc3RdLGN0W3RoaXMuY29tcG91bmRPcmRlcltzdF0uaWRdPVtdLmNvbmNhdCh0aGlzLmNvbXBvdW5kT3JkZXJbc3RdLmdldENoaWxkKCkuZ2V0Tm9kZXMoKSksdGhpcy5ncmFwaE1hbmFnZXIucmVtb3ZlKHRoaXMuY29tcG91bmRPcmRlcltzdF0uZ2V0Q2hpbGQoKSksdGhpcy5jb21wb3VuZE9yZGVyW3N0XS5jaGlsZD1udWxsO3RoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXMoKSx0aGlzLnRpbGVDb21wb3VuZE1lbWJlcnMoY3QseXQpfSxrdC5wcm90b3R5cGUuY2xlYXJaZXJvRGVncmVlTWVtYmVycz1mdW5jdGlvbigpe3ZhciBjdD10aGlzLHl0PXRoaXMudGlsZWRaZXJvRGVncmVlUGFjaz1bXTtPYmplY3Qua2V5cyh0aGlzLm1lbWJlckdyb3VwcykuZm9yRWFjaChmdW5jdGlvbihzdCl7dmFyIHh0PWN0LmlkVG9EdW1teU5vZGVbc3RdO3l0W3N0XT1jdC50aWxlTm9kZXMoY3QubWVtYmVyR3JvdXBzW3N0XSx4dC5wYWRkaW5nTGVmdCt4dC5wYWRkaW5nUmlnaHQpLHh0LnJlY3Qud2lkdGg9eXRbc3RdLndpZHRoLHh0LnJlY3QuaGVpZ2h0PXl0W3N0XS5oZWlnaHR9KX0sa3QucHJvdG90eXBlLnJlcG9wdWxhdGVDb21wb3VuZHM9ZnVuY3Rpb24oKXtmb3IodmFyIGN0PXRoaXMuY29tcG91bmRPcmRlci5sZW5ndGgtMTtjdD49MDtjdC0tKXt2YXIgeXQ9dGhpcy5jb21wb3VuZE9yZGVyW2N0XSxzdD15dC5pZCx4dD15dC5wYWRkaW5nTGVmdCxodD15dC5wYWRkaW5nVG9wO3RoaXMuYWRqdXN0TG9jYXRpb25zKHRoaXMudGlsZWRNZW1iZXJQYWNrW3N0XSx5dC5yZWN0LngseXQucmVjdC55LHh0LGh0KX19LGt0LnByb3RvdHlwZS5yZXBvcHVsYXRlWmVyb0RlZ3JlZU1lbWJlcnM9ZnVuY3Rpb24oKXt2YXIgY3Q9dGhpcyx5dD10aGlzLnRpbGVkWmVyb0RlZ3JlZVBhY2s7T2JqZWN0LmtleXMoeXQpLmZvckVhY2goZnVuY3Rpb24oc3Qpe3ZhciB4dD1jdC5pZFRvRHVtbXlOb2RlW3N0XSxodD14dC5wYWRkaW5nTGVmdCxkdD14dC5wYWRkaW5nVG9wO2N0LmFkanVzdExvY2F0aW9ucyh5dFtzdF0seHQucmVjdC54LHh0LnJlY3QueSxodCxkdCl9KX0sa3QucHJvdG90eXBlLmdldFRvQmVUaWxlZD1mdW5jdGlvbihjdCl7dmFyIHl0PWN0LmlkO2lmKHRoaXMudG9CZVRpbGVkW3l0XSE9bnVsbClyZXR1cm4gdGhpcy50b0JlVGlsZWRbeXRdO3ZhciBzdD1jdC5nZXRDaGlsZCgpO2lmKHN0PT1udWxsKXJldHVybiB0aGlzLnRvQmVUaWxlZFt5dF09ITEsITE7Zm9yKHZhciB4dD1zdC5nZXROb2RlcygpLGh0PTA7aHQ8eHQubGVuZ3RoO2h0Kyspe3ZhciBkdD14dFtodF07aWYodGhpcy5nZXROb2RlRGVncmVlKGR0KT4wKXJldHVybiB0aGlzLnRvQmVUaWxlZFt5dF09ITEsITE7aWYoZHQuZ2V0Q2hpbGQoKT09bnVsbCl7dGhpcy50b0JlVGlsZWRbZHQuaWRdPSExO2NvbnRpbnVlfWlmKCF0aGlzLmdldFRvQmVUaWxlZChkdCkpcmV0dXJuIHRoaXMudG9CZVRpbGVkW3l0XT0hMSwhMX1yZXR1cm4gdGhpcy50b0JlVGlsZWRbeXRdPSEwLCEwfSxrdC5wcm90b3R5cGUuZ2V0Tm9kZURlZ3JlZT1mdW5jdGlvbihjdCl7Y3QuaWQ7Zm9yKHZhciB5dD1jdC5nZXRFZGdlcygpLHN0PTAseHQ9MDt4dDx5dC5sZW5ndGg7eHQrKyl7dmFyIGh0PXl0W3h0XTtodC5nZXRTb3VyY2UoKS5pZCE9PWh0LmdldFRhcmdldCgpLmlkJiYoc3Q9c3QrMSl9cmV0dXJuIHN0fSxrdC5wcm90b3R5cGUuZ2V0Tm9kZURlZ3JlZVdpdGhDaGlsZHJlbj1mdW5jdGlvbihjdCl7dmFyIHl0PXRoaXMuZ2V0Tm9kZURlZ3JlZShjdCk7aWYoY3QuZ2V0Q2hpbGQoKT09bnVsbClyZXR1cm4geXQ7Zm9yKHZhciBzdD1jdC5nZXRDaGlsZCgpLmdldE5vZGVzKCkseHQ9MDt4dDxzdC5sZW5ndGg7eHQrKyl7dmFyIGh0PXN0W3h0XTt5dCs9dGhpcy5nZXROb2RlRGVncmVlV2l0aENoaWxkcmVuKGh0KX1yZXR1cm4geXR9LGt0LnByb3RvdHlwZS5wZXJmb3JtREZTT25Db21wb3VuZHM9ZnVuY3Rpb24oKXt0aGlzLmNvbXBvdW5kT3JkZXI9W10sdGhpcy5maWxsQ29tcGV4T3JkZXJCeURGUyh0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0Tm9kZXMoKSl9LGt0LnByb3RvdHlwZS5maWxsQ29tcGV4T3JkZXJCeURGUz1mdW5jdGlvbihjdCl7Zm9yKHZhciB5dD0wO3l0PGN0Lmxlbmd0aDt5dCsrKXt2YXIgc3Q9Y3RbeXRdO3N0LmdldENoaWxkKCkhPW51bGwmJnRoaXMuZmlsbENvbXBleE9yZGVyQnlERlMoc3QuZ2V0Q2hpbGQoKS5nZXROb2RlcygpKSx0aGlzLmdldFRvQmVUaWxlZChzdCkmJnRoaXMuY29tcG91bmRPcmRlci5wdXNoKHN0KX19LGt0LnByb3RvdHlwZS5hZGp1c3RMb2NhdGlvbnM9ZnVuY3Rpb24oY3QseXQsc3QseHQsaHQpe3l0Kz14dCxzdCs9aHQ7Zm9yKHZhciBkdD15dCxDdD0wO0N0PGN0LnJvd3MubGVuZ3RoO0N0Kyspe3ZhciB0dD1jdC5yb3dzW0N0XTt5dD1kdDtmb3IodmFyIFB0PTAscHQ9MDtwdDx0dC5sZW5ndGg7cHQrKyl7dmFyIEZ0PXR0W3B0XTtGdC5yZWN0Lng9eXQsRnQucmVjdC55PXN0LHl0Kz1GdC5yZWN0LndpZHRoK2N0Lmhvcml6b250YWxQYWRkaW5nLEZ0LnJlY3QuaGVpZ2h0PlB0JiYoUHQ9RnQucmVjdC5oZWlnaHQpfXN0Kz1QdCtjdC52ZXJ0aWNhbFBhZGRpbmd9fSxrdC5wcm90b3R5cGUudGlsZUNvbXBvdW5kTWVtYmVycz1mdW5jdGlvbihjdCx5dCl7dmFyIHN0PXRoaXM7dGhpcy50aWxlZE1lbWJlclBhY2s9W10sT2JqZWN0LmtleXMoY3QpLmZvckVhY2goZnVuY3Rpb24oeHQpe3ZhciBodD15dFt4dF07c3QudGlsZWRNZW1iZXJQYWNrW3h0XT1zdC50aWxlTm9kZXMoY3RbeHRdLGh0LnBhZGRpbmdMZWZ0K2h0LnBhZGRpbmdSaWdodCksaHQucmVjdC53aWR0aD1zdC50aWxlZE1lbWJlclBhY2tbeHRdLndpZHRoLGh0LnJlY3QuaGVpZ2h0PXN0LnRpbGVkTWVtYmVyUGFja1t4dF0uaGVpZ2h0fSl9LGt0LnByb3RvdHlwZS50aWxlTm9kZXM9ZnVuY3Rpb24oY3QseXQpe3ZhciBzdD1GLlRJTElOR19QQURESU5HX1ZFUlRJQ0FMLHh0PUYuVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTCxodD17cm93czpbXSxyb3dXaWR0aDpbXSxyb3dIZWlnaHQ6W10sd2lkdGg6MCxoZWlnaHQ6eXQsdmVydGljYWxQYWRkaW5nOnN0LGhvcml6b250YWxQYWRkaW5nOnh0fTtjdC5zb3J0KGZ1bmN0aW9uKHR0LFB0KXtyZXR1cm4gdHQucmVjdC53aWR0aCp0dC5yZWN0LmhlaWdodD5QdC5yZWN0LndpZHRoKlB0LnJlY3QuaGVpZ2h0Py0xOnR0LnJlY3Qud2lkdGgqdHQucmVjdC5oZWlnaHQ8UHQucmVjdC53aWR0aCpQdC5yZWN0LmhlaWdodD8xOjB9KTtmb3IodmFyIGR0PTA7ZHQ8Y3QubGVuZ3RoO2R0Kyspe3ZhciBDdD1jdFtkdF07aHQucm93cy5sZW5ndGg9PTA/dGhpcy5pbnNlcnROb2RlVG9Sb3coaHQsQ3QsMCx5dCk6dGhpcy5jYW5BZGRIb3Jpem9udGFsKGh0LEN0LnJlY3Qud2lkdGgsQ3QucmVjdC5oZWlnaHQpP3RoaXMuaW5zZXJ0Tm9kZVRvUm93KGh0LEN0LHRoaXMuZ2V0U2hvcnRlc3RSb3dJbmRleChodCkseXQpOnRoaXMuaW5zZXJ0Tm9kZVRvUm93KGh0LEN0LGh0LnJvd3MubGVuZ3RoLHl0KSx0aGlzLnNoaWZ0VG9MYXN0Um93KGh0KX1yZXR1cm4gaHR9LGt0LnByb3RvdHlwZS5pbnNlcnROb2RlVG9Sb3c9ZnVuY3Rpb24oY3QseXQsc3QseHQpe3ZhciBodD14dDtpZihzdD09Y3Qucm93cy5sZW5ndGgpe3ZhciBkdD1bXTtjdC5yb3dzLnB1c2goZHQpLGN0LnJvd1dpZHRoLnB1c2goaHQpLGN0LnJvd0hlaWdodC5wdXNoKDApfXZhciBDdD1jdC5yb3dXaWR0aFtzdF0reXQucmVjdC53aWR0aDtjdC5yb3dzW3N0XS5sZW5ndGg+MCYmKEN0Kz1jdC5ob3Jpem9udGFsUGFkZGluZyksY3Qucm93V2lkdGhbc3RdPUN0LGN0LndpZHRoPEN0JiYoY3Qud2lkdGg9Q3QpO3ZhciB0dD15dC5yZWN0LmhlaWdodDtzdD4wJiYodHQrPWN0LnZlcnRpY2FsUGFkZGluZyk7dmFyIFB0PTA7dHQ+Y3Qucm93SGVpZ2h0W3N0XSYmKFB0PWN0LnJvd0hlaWdodFtzdF0sY3Qucm93SGVpZ2h0W3N0XT10dCxQdD1jdC5yb3dIZWlnaHRbc3RdLVB0KSxjdC5oZWlnaHQrPVB0LGN0LnJvd3Nbc3RdLnB1c2goeXQpfSxrdC5wcm90b3R5cGUuZ2V0U2hvcnRlc3RSb3dJbmRleD1mdW5jdGlvbihjdCl7Zm9yKHZhciB5dD0tMSxzdD1OdW1iZXIuTUFYX1ZBTFVFLHh0PTA7eHQ8Y3Qucm93cy5sZW5ndGg7eHQrKyljdC5yb3dXaWR0aFt4dF08c3QmJih5dD14dCxzdD1jdC5yb3dXaWR0aFt4dF0pO3JldHVybiB5dH0sa3QucHJvdG90eXBlLmdldExvbmdlc3RSb3dJbmRleD1mdW5jdGlvbihjdCl7Zm9yKHZhciB5dD0tMSxzdD1OdW1iZXIuTUlOX1ZBTFVFLHh0PTA7eHQ8Y3Qucm93cy5sZW5ndGg7eHQrKyljdC5yb3dXaWR0aFt4dF0+c3QmJih5dD14dCxzdD1jdC5yb3dXaWR0aFt4dF0pO3JldHVybiB5dH0sa3QucHJvdG90eXBlLmNhbkFkZEhvcml6b250YWw9ZnVuY3Rpb24oY3QseXQsc3Qpe3ZhciB4dD10aGlzLmdldFNob3J0ZXN0Um93SW5kZXgoY3QpO2lmKHh0PDApcmV0dXJuITA7dmFyIGh0PWN0LnJvd1dpZHRoW3h0XTtpZihodCtjdC5ob3Jpem9udGFsUGFkZGluZyt5dDw9Y3Qud2lkdGgpcmV0dXJuITA7dmFyIGR0PTA7Y3Qucm93SGVpZ2h0W3h0XTxzdCYmeHQ+MCYmKGR0PXN0K2N0LnZlcnRpY2FsUGFkZGluZy1jdC5yb3dIZWlnaHRbeHRdKTt2YXIgQ3Q7Y3Qud2lkdGgtaHQ+PXl0K2N0Lmhvcml6b250YWxQYWRkaW5nP0N0PShjdC5oZWlnaHQrZHQpLyhodCt5dCtjdC5ob3Jpem9udGFsUGFkZGluZyk6Q3Q9KGN0LmhlaWdodCtkdCkvY3Qud2lkdGgsZHQ9c3QrY3QudmVydGljYWxQYWRkaW5nO3ZhciB0dDtyZXR1cm4gY3Qud2lkdGg8eXQ/dHQ9KGN0LmhlaWdodCtkdCkveXQ6dHQ9KGN0LmhlaWdodCtkdCkvY3Qud2lkdGgsdHQ8MSYmKHR0PTEvdHQpLEN0PDEmJihDdD0xL0N0KSxDdDx0dH0sa3QucHJvdG90eXBlLnNoaWZ0VG9MYXN0Um93PWZ1bmN0aW9uKGN0KXt2YXIgeXQ9dGhpcy5nZXRMb25nZXN0Um93SW5kZXgoY3QpLHN0PWN0LnJvd1dpZHRoLmxlbmd0aC0xLHh0PWN0LnJvd3NbeXRdLGh0PXh0W3h0Lmxlbmd0aC0xXSxkdD1odC53aWR0aCtjdC5ob3Jpem9udGFsUGFkZGluZztpZihjdC53aWR0aC1jdC5yb3dXaWR0aFtzdF0+ZHQmJnl0IT1zdCl7eHQuc3BsaWNlKC0xLDEpLGN0LnJvd3Nbc3RdLnB1c2goaHQpLGN0LnJvd1dpZHRoW3l0XT1jdC5yb3dXaWR0aFt5dF0tZHQsY3Qucm93V2lkdGhbc3RdPWN0LnJvd1dpZHRoW3N0XStkdCxjdC53aWR0aD1jdC5yb3dXaWR0aFtpbnN0YW5jZS5nZXRMb25nZXN0Um93SW5kZXgoY3QpXTtmb3IodmFyIEN0PU51bWJlci5NSU5fVkFMVUUsdHQ9MDt0dDx4dC5sZW5ndGg7dHQrKyl4dFt0dF0uaGVpZ2h0PkN0JiYoQ3Q9eHRbdHRdLmhlaWdodCk7eXQ+MCYmKEN0Kz1jdC52ZXJ0aWNhbFBhZGRpbmcpO3ZhciBQdD1jdC5yb3dIZWlnaHRbeXRdK2N0LnJvd0hlaWdodFtzdF07Y3Qucm93SGVpZ2h0W3l0XT1DdCxjdC5yb3dIZWlnaHRbc3RdPGh0LmhlaWdodCtjdC52ZXJ0aWNhbFBhZGRpbmcmJihjdC5yb3dIZWlnaHRbc3RdPWh0LmhlaWdodCtjdC52ZXJ0aWNhbFBhZGRpbmcpO3ZhciBwdD1jdC5yb3dIZWlnaHRbeXRdK2N0LnJvd0hlaWdodFtzdF07Y3QuaGVpZ2h0Kz1wdC1QdCx0aGlzLnNoaWZ0VG9MYXN0Um93KGN0KX19LGt0LnByb3RvdHlwZS50aWxpbmdQcmVMYXlvdXQ9ZnVuY3Rpb24oKXtGLlRJTEUmJih0aGlzLmdyb3VwWmVyb0RlZ3JlZU1lbWJlcnMoKSx0aGlzLmNsZWFyQ29tcG91bmRzKCksdGhpcy5jbGVhclplcm9EZWdyZWVNZW1iZXJzKCkpfSxrdC5wcm90b3R5cGUudGlsaW5nUG9zdExheW91dD1mdW5jdGlvbigpe0YuVElMRSYmKHRoaXMucmVwb3B1bGF0ZVplcm9EZWdyZWVNZW1iZXJzKCksdGhpcy5yZXBvcHVsYXRlQ29tcG91bmRzKCkpfSxrdC5wcm90b3R5cGUucmVkdWNlVHJlZXM9ZnVuY3Rpb24oKXtmb3IodmFyIGN0PVtdLHl0PSEwLHN0O3l0Oyl7dmFyIHh0PXRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCksaHQ9W107eXQ9ITE7Zm9yKHZhciBkdD0wO2R0PHh0Lmxlbmd0aDtkdCsrKXN0PXh0W2R0XSxzdC5nZXRFZGdlcygpLmxlbmd0aD09MSYmIXN0LmdldEVkZ2VzKClbMF0uaXNJbnRlckdyYXBoJiZzdC5nZXRDaGlsZCgpPT1udWxsJiYoaHQucHVzaChbc3Qsc3QuZ2V0RWRnZXMoKVswXSxzdC5nZXRPd25lcigpXSkseXQ9ITApO2lmKHl0PT0hMCl7Zm9yKHZhciBDdD1bXSx0dD0wO3R0PGh0Lmxlbmd0aDt0dCsrKWh0W3R0XVswXS5nZXRFZGdlcygpLmxlbmd0aD09MSYmKEN0LnB1c2goaHRbdHRdKSxodFt0dF1bMF0uZ2V0T3duZXIoKS5yZW1vdmUoaHRbdHRdWzBdKSk7Y3QucHVzaChDdCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2RlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKX19dGhpcy5wcnVuZWROb2Rlc0FsbD1jdH0sa3QucHJvdG90eXBlLmdyb3dUcmVlPWZ1bmN0aW9uKGN0KXtmb3IodmFyIHl0PWN0Lmxlbmd0aCxzdD1jdFt5dC0xXSx4dCxodD0wO2h0PHN0Lmxlbmd0aDtodCsrKXh0PXN0W2h0XSx0aGlzLmZpbmRQbGFjZWZvclBydW5lZE5vZGUoeHQpLHh0WzJdLmFkZCh4dFswXSkseHRbMl0uYWRkKHh0WzFdLHh0WzFdLnNvdXJjZSx4dFsxXS50YXJnZXQpO2N0LnNwbGljZShjdC5sZW5ndGgtMSwxKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzKCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxFZGdlcygpfSxrdC5wcm90b3R5cGUuZmluZFBsYWNlZm9yUHJ1bmVkTm9kZT1mdW5jdGlvbihjdCl7dmFyIHl0LHN0LHh0PWN0WzBdO3h0PT1jdFsxXS5zb3VyY2U/c3Q9Y3RbMV0udGFyZ2V0OnN0PWN0WzFdLnNvdXJjZTt2YXIgaHQ9c3Quc3RhcnRYLGR0PXN0LmZpbmlzaFgsQ3Q9c3Quc3RhcnRZLHR0PXN0LmZpbmlzaFksUHQ9MCxwdD0wLEZ0PTAsWD0wLFJ0PVtQdCxGdCxwdCxYXTtpZihDdD4wKWZvcih2YXIgQnQ9aHQ7QnQ8PWR0O0J0KyspUnRbMF0rPXRoaXMuZ3JpZFtCdF1bQ3QtMV0ubGVuZ3RoK3RoaXMuZ3JpZFtCdF1bQ3RdLmxlbmd0aC0xO2lmKGR0PHRoaXMuZ3JpZC5sZW5ndGgtMSlmb3IodmFyIEJ0PUN0O0J0PD10dDtCdCsrKVJ0WzFdKz10aGlzLmdyaWRbZHQrMV1bQnRdLmxlbmd0aCt0aGlzLmdyaWRbZHRdW0J0XS5sZW5ndGgtMTtpZih0dDx0aGlzLmdyaWRbMF0ubGVuZ3RoLTEpZm9yKHZhciBCdD1odDtCdDw9ZHQ7QnQrKylSdFsyXSs9dGhpcy5ncmlkW0J0XVt0dCsxXS5sZW5ndGgrdGhpcy5ncmlkW0J0XVt0dF0ubGVuZ3RoLTE7aWYoaHQ+MClmb3IodmFyIEJ0PUN0O0J0PD10dDtCdCsrKVJ0WzNdKz10aGlzLmdyaWRbaHQtMV1bQnRdLmxlbmd0aCt0aGlzLmdyaWRbaHRdW0J0XS5sZW5ndGgtMTtmb3IodmFyIHZ0PUouTUFYX1ZBTFVFLE90LFZ0LHFlPTA7cWU8UnQubGVuZ3RoO3FlKyspUnRbcWVdPHZ0Pyh2dD1SdFtxZV0sT3Q9MSxWdD1xZSk6UnRbcWVdPT12dCYmT3QrKztpZihPdD09MyYmdnQ9PTApUnRbMF09PTAmJlJ0WzFdPT0wJiZSdFsyXT09MD95dD0xOlJ0WzBdPT0wJiZSdFsxXT09MCYmUnRbM109PTA/eXQ9MDpSdFswXT09MCYmUnRbMl09PTAmJlJ0WzNdPT0wP3l0PTM6UnRbMV09PTAmJlJ0WzJdPT0wJiZSdFszXT09MCYmKHl0PTIpO2Vsc2UgaWYoT3Q9PTImJnZ0PT0wKXt2YXIgX249TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjIpO1J0WzBdPT0wJiZSdFsxXT09MD9fbj09MD95dD0wOnl0PTE6UnRbMF09PTAmJlJ0WzJdPT0wP19uPT0wP3l0PTA6eXQ9MjpSdFswXT09MCYmUnRbM109PTA/X249PTA/eXQ9MDp5dD0zOlJ0WzFdPT0wJiZSdFsyXT09MD9fbj09MD95dD0xOnl0PTI6UnRbMV09PTAmJlJ0WzNdPT0wP19uPT0wP3l0PTE6eXQ9Mzpfbj09MD95dD0yOnl0PTN9ZWxzZSBpZihPdD09NCYmdnQ9PTApe3ZhciBfbj1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqNCk7eXQ9X259ZWxzZSB5dD1WdDt5dD09MD94dC5zZXRDZW50ZXIoc3QuZ2V0Q2VudGVyWCgpLHN0LmdldENlbnRlclkoKS1zdC5nZXRIZWlnaHQoKS8yLWouREVGQVVMVF9FREdFX0xFTkdUSC14dC5nZXRIZWlnaHQoKS8yKTp5dD09MT94dC5zZXRDZW50ZXIoc3QuZ2V0Q2VudGVyWCgpK3N0LmdldFdpZHRoKCkvMitqLkRFRkFVTFRfRURHRV9MRU5HVEgreHQuZ2V0V2lkdGgoKS8yLHN0LmdldENlbnRlclkoKSk6eXQ9PTI/eHQuc2V0Q2VudGVyKHN0LmdldENlbnRlclgoKSxzdC5nZXRDZW50ZXJZKCkrc3QuZ2V0SGVpZ2h0KCkvMitqLkRFRkFVTFRfRURHRV9MRU5HVEgreHQuZ2V0SGVpZ2h0KCkvMik6eHQuc2V0Q2VudGVyKHN0LmdldENlbnRlclgoKS1zdC5nZXRXaWR0aCgpLzItai5ERUZBVUxUX0VER0VfTEVOR1RILXh0LmdldFdpZHRoKCkvMixzdC5nZXRDZW50ZXJZKCkpfSxwLmV4cG9ydHM9a3R9LGZ1bmN0aW9uKHAsdixtKXt2YXIgYj17fTtiLmxheW91dEJhc2U9bSgwKSxiLkNvU0VDb25zdGFudHM9bSgxKSxiLkNvU0VFZGdlPW0oMiksYi5Db1NFR3JhcGg9bSgzKSxiLkNvU0VHcmFwaE1hbmFnZXI9bSg0KSxiLkNvU0VMYXlvdXQ9bSg2KSxiLkNvU0VOb2RlPW0oNSkscC5leHBvcnRzPWJ9XSl9KX0ocWd0KSkscWd0LmV4cG9ydHN9KGZ1bmN0aW9uKGksYSl7KGZ1bmN0aW9uKHAsdil7aS5leHBvcnRzPXYodVdlKCkpfSkoZDAsZnVuY3Rpb24oZil7cmV0dXJuIGZ1bmN0aW9uKHApe3ZhciB2PXt9O2Z1bmN0aW9uIG0oYil7aWYodltiXSlyZXR1cm4gdltiXS5leHBvcnRzO3ZhciBFPXZbYl09e2k6YixsOiExLGV4cG9ydHM6e319O3JldHVybiBwW2JdLmNhbGwoRS5leHBvcnRzLEUsRS5leHBvcnRzLG0pLEUubD0hMCxFLmV4cG9ydHN9cmV0dXJuIG0ubT1wLG0uYz12LG0uaT1mdW5jdGlvbihiKXtyZXR1cm4gYn0sbS5kPWZ1bmN0aW9uKGIsRSxDKXttLm8oYixFKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsRSx7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsZ2V0OkN9KX0sbS5uPWZ1bmN0aW9uKGIpe3ZhciBFPWImJmIuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBiLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIGJ9O3JldHVybiBtLmQoRSwiYSIsRSksRX0sbS5vPWZ1bmN0aW9uKGIsRSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLEUpfSxtLnA9IiIsbShtLnM9MSl9KFtmdW5jdGlvbihwLHYpe3AuZXhwb3J0cz1mfSxmdW5jdGlvbihwLHYsbSl7dmFyIGI9bSgwKS5sYXlvdXRCYXNlLkxheW91dENvbnN0YW50cyxFPW0oMCkubGF5b3V0QmFzZS5GRExheW91dENvbnN0YW50cyxDPW0oMCkuQ29TRUNvbnN0YW50cyxBPW0oMCkuQ29TRUxheW91dCxQPW0oMCkuQ29TRU5vZGUsRj1tKDApLmxheW91dEJhc2UuUG9pbnRELGo9bSgwKS5sYXlvdXRCYXNlLkRpbWVuc2lvbkQsUj17cmVhZHk6ZnVuY3Rpb24oKXt9LHN0b3A6ZnVuY3Rpb24oKXt9LHF1YWxpdHk6ImRlZmF1bHQiLG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczohMSxyZWZyZXNoOjMwLGZpdDohMCxwYWRkaW5nOjEwLHJhbmRvbWl6ZTohMCxub2RlUmVwdWxzaW9uOjQ1MDAsaWRlYWxFZGdlTGVuZ3RoOjUwLGVkZ2VFbGFzdGljaXR5Oi40NSxuZXN0aW5nRmFjdG9yOi4xLGdyYXZpdHk6LjI1LG51bUl0ZXI6MjUwMCx0aWxlOiEwLGFuaW1hdGU6ImVuZCIsYW5pbWF0aW9uRHVyYXRpb246NTAwLHRpbGluZ1BhZGRpbmdWZXJ0aWNhbDoxMCx0aWxpbmdQYWRkaW5nSG9yaXpvbnRhbDoxMCxncmF2aXR5UmFuZ2VDb21wb3VuZDoxLjUsZ3Jhdml0eUNvbXBvdW5kOjEsZ3Jhdml0eVJhbmdlOjMuOCxpbml0aWFsRW5lcmd5T25JbmNyZW1lbnRhbDouNX07ZnVuY3Rpb24gSChpdCxmdCl7dmFyIFR0PXt9O2Zvcih2YXIga3QgaW4gaXQpVHRba3RdPWl0W2t0XTtmb3IodmFyIGt0IGluIGZ0KVR0W2t0XT1mdFtrdF07cmV0dXJuIFR0fWZ1bmN0aW9uIFkoaXQpe3RoaXMub3B0aW9ucz1IKFIsaXQpLHJ0KHRoaXMub3B0aW9ucyl9dmFyIHJ0PWZ1bmN0aW9uKGZ0KXtmdC5ub2RlUmVwdWxzaW9uIT1udWxsJiYoQy5ERUZBVUxUX1JFUFVMU0lPTl9TVFJFTkdUSD1FLkRFRkFVTFRfUkVQVUxTSU9OX1NUUkVOR1RIPWZ0Lm5vZGVSZXB1bHNpb24pLGZ0LmlkZWFsRWRnZUxlbmd0aCE9bnVsbCYmKEMuREVGQVVMVF9FREdFX0xFTkdUSD1FLkRFRkFVTFRfRURHRV9MRU5HVEg9ZnQuaWRlYWxFZGdlTGVuZ3RoKSxmdC5lZGdlRWxhc3RpY2l0eSE9bnVsbCYmKEMuREVGQVVMVF9TUFJJTkdfU1RSRU5HVEg9RS5ERUZBVUxUX1NQUklOR19TVFJFTkdUSD1mdC5lZGdlRWxhc3RpY2l0eSksZnQubmVzdGluZ0ZhY3RvciE9bnVsbCYmKEMuUEVSX0xFVkVMX0lERUFMX0VER0VfTEVOR1RIX0ZBQ1RPUj1FLlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1I9ZnQubmVzdGluZ0ZhY3RvciksZnQuZ3Jhdml0eSE9bnVsbCYmKEMuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RIPUUuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RIPWZ0LmdyYXZpdHkpLGZ0Lm51bUl0ZXIhPW51bGwmJihDLk1BWF9JVEVSQVRJT05TPUUuTUFYX0lURVJBVElPTlM9ZnQubnVtSXRlciksZnQuZ3Jhdml0eVJhbmdlIT1udWxsJiYoQy5ERUZBVUxUX0dSQVZJVFlfUkFOR0VfRkFDVE9SPUUuREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUj1mdC5ncmF2aXR5UmFuZ2UpLGZ0LmdyYXZpdHlDb21wb3VuZCE9bnVsbCYmKEMuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RIPUUuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RIPWZ0LmdyYXZpdHlDb21wb3VuZCksZnQuZ3Jhdml0eVJhbmdlQ29tcG91bmQhPW51bGwmJihDLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1I9RS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SPWZ0LmdyYXZpdHlSYW5nZUNvbXBvdW5kKSxmdC5pbml0aWFsRW5lcmd5T25JbmNyZW1lbnRhbCE9bnVsbCYmKEMuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTD1FLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUw9ZnQuaW5pdGlhbEVuZXJneU9uSW5jcmVtZW50YWwpLGZ0LnF1YWxpdHk9PSJkcmFmdCI/Yi5RVUFMSVRZPTA6ZnQucXVhbGl0eT09InByb29mIj9iLlFVQUxJVFk9MjpiLlFVQUxJVFk9MSxDLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUz1FLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUz1iLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUz1mdC5ub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHMsQy5ERUZBVUxUX0lOQ1JFTUVOVEFMPUUuREVGQVVMVF9JTkNSRU1FTlRBTD1iLkRFRkFVTFRfSU5DUkVNRU5UQUw9IWZ0LnJhbmRvbWl6ZSxDLkFOSU1BVEU9RS5BTklNQVRFPWIuQU5JTUFURT1mdC5hbmltYXRlLEMuVElMRT1mdC50aWxlLEMuVElMSU5HX1BBRERJTkdfVkVSVElDQUw9dHlwZW9mIGZ0LnRpbGluZ1BhZGRpbmdWZXJ0aWNhbD09ImZ1bmN0aW9uIj9mdC50aWxpbmdQYWRkaW5nVmVydGljYWwuY2FsbCgpOmZ0LnRpbGluZ1BhZGRpbmdWZXJ0aWNhbCxDLlRJTElOR19QQURESU5HX0hPUklaT05UQUw9dHlwZW9mIGZ0LnRpbGluZ1BhZGRpbmdIb3Jpem9udGFsPT0iZnVuY3Rpb24iP2Z0LnRpbGluZ1BhZGRpbmdIb3Jpem9udGFsLmNhbGwoKTpmdC50aWxpbmdQYWRkaW5nSG9yaXpvbnRhbH07WS5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dmFyIGl0LGZ0LFR0PXRoaXMub3B0aW9uczt0aGlzLmlkVG9MTm9kZT17fTt2YXIga3Q9dGhpcy5sYXlvdXQ9bmV3IEEsbXQ9dGhpczttdC5zdG9wcGVkPSExLHRoaXMuY3k9dGhpcy5vcHRpb25zLmN5LHRoaXMuY3kudHJpZ2dlcih7dHlwZToibGF5b3V0c3RhcnQiLGxheW91dDp0aGlzfSk7dmFyIGN0PWt0Lm5ld0dyYXBoTWFuYWdlcigpO3RoaXMuZ209Y3Q7dmFyIHl0PXRoaXMub3B0aW9ucy5lbGVzLm5vZGVzKCksc3Q9dGhpcy5vcHRpb25zLmVsZXMuZWRnZXMoKTt0aGlzLnJvb3Q9Y3QuYWRkUm9vdCgpLHRoaXMucHJvY2Vzc0NoaWxkcmVuTGlzdCh0aGlzLnJvb3QsdGhpcy5nZXRUb3BNb3N0Tm9kZXMoeXQpLGt0KTtmb3IodmFyIHh0PTA7eHQ8c3QubGVuZ3RoO3h0Kyspe3ZhciBodD1zdFt4dF0sZHQ9dGhpcy5pZFRvTE5vZGVbaHQuZGF0YSgic291cmNlIildLEN0PXRoaXMuaWRUb0xOb2RlW2h0LmRhdGEoInRhcmdldCIpXTtpZihkdCE9PUN0JiZkdC5nZXRFZGdlc0JldHdlZW4oQ3QpLmxlbmd0aD09MCl7dmFyIHR0PWN0LmFkZChrdC5uZXdFZGdlKCksZHQsQ3QpO3R0LmlkPWh0LmlkKCl9fXZhciBQdD1mdW5jdGlvbihYLFJ0KXt0eXBlb2YgWD09Im51bWJlciImJihYPVJ0KTt2YXIgQnQ9WC5kYXRhKCJpZCIpLHZ0PW10LmlkVG9MTm9kZVtCdF07cmV0dXJue3g6dnQuZ2V0UmVjdCgpLmdldENlbnRlclgoKSx5OnZ0LmdldFJlY3QoKS5nZXRDZW50ZXJZKCl9fSxwdD1mdW5jdGlvbiBGdCgpe2Zvcih2YXIgWD1mdW5jdGlvbigpe1R0LmZpdCYmVHQuY3kuZml0KFR0LmVsZXMsVHQucGFkZGluZyksaXR8fChpdD0hMCxtdC5jeS5vbmUoImxheW91dHJlYWR5IixUdC5yZWFkeSksbXQuY3kudHJpZ2dlcih7dHlwZToibGF5b3V0cmVhZHkiLGxheW91dDptdH0pKX0sUnQ9bXQub3B0aW9ucy5yZWZyZXNoLEJ0LHZ0PTA7dnQ8UnQmJiFCdDt2dCsrKUJ0PW10LnN0b3BwZWR8fG10LmxheW91dC50aWNrKCk7aWYoQnQpe2t0LmNoZWNrTGF5b3V0U3VjY2VzcygpJiYha3QuaXNTdWJMYXlvdXQmJmt0LmRvUG9zdExheW91dCgpLGt0LnRpbGluZ1Bvc3RMYXlvdXQmJmt0LnRpbGluZ1Bvc3RMYXlvdXQoKSxrdC5pc0xheW91dEZpbmlzaGVkPSEwLG10Lm9wdGlvbnMuZWxlcy5ub2RlcygpLnBvc2l0aW9ucyhQdCksWCgpLG10LmN5Lm9uZSgibGF5b3V0c3RvcCIsbXQub3B0aW9ucy5zdG9wKSxtdC5jeS50cmlnZ2VyKHt0eXBlOiJsYXlvdXRzdG9wIixsYXlvdXQ6bXR9KSxmdCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUoZnQpLGl0PSExO3JldHVybn12YXIgT3Q9bXQubGF5b3V0LmdldFBvc2l0aW9uc0RhdGEoKTtUdC5lbGVzLm5vZGVzKCkucG9zaXRpb25zKGZ1bmN0aW9uKFZ0LHFlKXtpZih0eXBlb2YgVnQ9PSJudW1iZXIiJiYoVnQ9cWUpLCFWdC5pc1BhcmVudCgpKXtmb3IodmFyIF9uPVZ0LmlkKCksVGU9T3RbX25dLFduPVZ0O1RlPT1udWxsJiYoVGU9T3RbV24uZGF0YSgicGFyZW50IildfHxPdFsiRHVtbXlDb21wb3VuZF8iK1duLmRhdGEoInBhcmVudCIpXSxPdFtfbl09VGUsV249V24ucGFyZW50KClbMF0sV24hPW51bGwpOyk7cmV0dXJuIFRlIT1udWxsP3t4OlRlLngseTpUZS55fTp7eDpWdC5wb3NpdGlvbigieCIpLHk6VnQucG9zaXRpb24oInkiKX19fSksWCgpLGZ0PXJlcXVlc3RBbmltYXRpb25GcmFtZShGdCl9O3JldHVybiBrdC5hZGRMaXN0ZW5lcigibGF5b3V0c3RhcnRlZCIsZnVuY3Rpb24oKXttdC5vcHRpb25zLmFuaW1hdGU9PT0iZHVyaW5nIiYmKGZ0PXJlcXVlc3RBbmltYXRpb25GcmFtZShwdCkpfSksa3QucnVuTGF5b3V0KCksdGhpcy5vcHRpb25zLmFuaW1hdGUhPT0iZHVyaW5nIiYmKG10Lm9wdGlvbnMuZWxlcy5ub2RlcygpLm5vdCgiOnBhcmVudCIpLmxheW91dFBvc2l0aW9ucyhtdCxtdC5vcHRpb25zLFB0KSxpdD0hMSksdGhpc30sWS5wcm90b3R5cGUuZ2V0VG9wTW9zdE5vZGVzPWZ1bmN0aW9uKGl0KXtmb3IodmFyIGZ0PXt9LFR0PTA7VHQ8aXQubGVuZ3RoO1R0KyspZnRbaXRbVHRdLmlkKCldPSEwO3ZhciBrdD1pdC5maWx0ZXIoZnVuY3Rpb24obXQsY3Qpe3R5cGVvZiBtdD09Im51bWJlciImJihtdD1jdCk7Zm9yKHZhciB5dD1tdC5wYXJlbnQoKVswXTt5dCE9bnVsbDspe2lmKGZ0W3l0LmlkKCldKXJldHVybiExO3l0PXl0LnBhcmVudCgpWzBdfXJldHVybiEwfSk7cmV0dXJuIGt0fSxZLnByb3RvdHlwZS5wcm9jZXNzQ2hpbGRyZW5MaXN0PWZ1bmN0aW9uKGl0LGZ0LFR0KXtmb3IodmFyIGt0PWZ0Lmxlbmd0aCxtdD0wO210PGt0O210Kyspe3ZhciBjdD1mdFttdF0seXQ9Y3QuY2hpbGRyZW4oKSxzdCx4dD1jdC5sYXlvdXREaW1lbnNpb25zKHtub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6dGhpcy5vcHRpb25zLm5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsc30pO2lmKGN0Lm91dGVyV2lkdGgoKSE9bnVsbCYmY3Qub3V0ZXJIZWlnaHQoKSE9bnVsbD9zdD1pdC5hZGQobmV3IFAoVHQuZ3JhcGhNYW5hZ2VyLG5ldyBGKGN0LnBvc2l0aW9uKCJ4IikteHQudy8yLGN0LnBvc2l0aW9uKCJ5IikteHQuaC8yKSxuZXcgaihwYXJzZUZsb2F0KHh0LncpLHBhcnNlRmxvYXQoeHQuaCkpKSk6c3Q9aXQuYWRkKG5ldyBQKHRoaXMuZ3JhcGhNYW5hZ2VyKSksc3QuaWQ9Y3QuZGF0YSgiaWQiKSxzdC5wYWRkaW5nTGVmdD1wYXJzZUludChjdC5jc3MoInBhZGRpbmciKSksc3QucGFkZGluZ1RvcD1wYXJzZUludChjdC5jc3MoInBhZGRpbmciKSksc3QucGFkZGluZ1JpZ2h0PXBhcnNlSW50KGN0LmNzcygicGFkZGluZyIpKSxzdC5wYWRkaW5nQm90dG9tPXBhcnNlSW50KGN0LmNzcygicGFkZGluZyIpKSx0aGlzLm9wdGlvbnMubm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzJiZjdC5pc1BhcmVudCgpKXt2YXIgaHQ9Y3QuYm91bmRpbmdCb3goe2luY2x1ZGVMYWJlbHM6ITAsaW5jbHVkZU5vZGVzOiExfSkudyxkdD1jdC5ib3VuZGluZ0JveCh7aW5jbHVkZUxhYmVsczohMCxpbmNsdWRlTm9kZXM6ITF9KS5oLEN0PWN0LmNzcygidGV4dC1oYWxpZ24iKTtzdC5sYWJlbFdpZHRoPWh0LHN0LmxhYmVsSGVpZ2h0PWR0LHN0LmxhYmVsUG9zPUN0fWlmKHRoaXMuaWRUb0xOb2RlW2N0LmRhdGEoImlkIildPXN0LGlzTmFOKHN0LnJlY3QueCkmJihzdC5yZWN0Lng9MCksaXNOYU4oc3QucmVjdC55KSYmKHN0LnJlY3QueT0wKSx5dCE9bnVsbCYmeXQubGVuZ3RoPjApe3ZhciB0dDt0dD1UdC5nZXRHcmFwaE1hbmFnZXIoKS5hZGQoVHQubmV3R3JhcGgoKSxzdCksdGhpcy5wcm9jZXNzQ2hpbGRyZW5MaXN0KHR0LHl0LFR0KX19fSxZLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RvcHBlZD0hMCx0aGlzfTt2YXIgSj1mdW5jdGlvbihmdCl7ZnQoImxheW91dCIsImNvc2UtYmlsa2VudCIsWSl9O3R5cGVvZiBjeXRvc2NhcGU8InUiJiZKKGN5dG9zY2FwZSkscC5leHBvcnRzPUp9XSl9KX0pKEtqdCk7dmFyIGxXZT1LanQuZXhwb3J0cztjb25zdCBoV2U9UEUobFdlKTtXanQudXNlKGhXZSk7ZnVuY3Rpb24gUWp0KGksYSxmLHApe0dqdC5kcmF3Tm9kZShpLGEsZixwKSxhLmNoaWxkcmVuJiZhLmNoaWxkcmVuLmZvckVhY2goKHYsbSk9PntRanQoaSx2LGY8MD9tOmYscCl9KX1mdW5jdGlvbiBmV2UoaSxhKXthLmVkZ2VzKCkubWFwKChmLHApPT57Y29uc3Qgdj1mLmRhdGEoKTtpZihmWzBdLl9wcml2YXRlLmJvZHlCb3VuZHMpe2NvbnN0IG09ZlswXS5fcHJpdmF0ZS5yc2NyYXRjaDtXdC50cmFjZSgiRWRnZTogIixwLHYpLGkuaW5zZXJ0KCJwYXRoIikuYXR0cigiZCIsYE0gJHttLnN0YXJ0WH0sJHttLnN0YXJ0WX0gTCAke20ubWlkWH0sJHttLm1pZFl9IEwke20uZW5kWH0sJHttLmVuZFl9IGApLmF0dHIoImNsYXNzIiwiZWRnZSBzZWN0aW9uLWVkZ2UtIit2LnNlY3Rpb24rIiBlZGdlLWRlcHRoLSIrdi5kZXB0aCl9fSl9ZnVuY3Rpb24gWmp0KGksYSxmLHApe2EuYWRkKHtncm91cDoibm9kZXMiLGRhdGE6e2lkOmkuaWQsbGFiZWxUZXh0OmkuZGVzY3IsaGVpZ2h0OmkuaGVpZ2h0LHdpZHRoOmkud2lkdGgsbGV2ZWw6cCxub2RlSWQ6aS5pZCxwYWRkaW5nOmkucGFkZGluZyx0eXBlOmkudHlwZX0scG9zaXRpb246e3g6aS54LHk6aS55fX0pLGkuY2hpbGRyZW4mJmkuY2hpbGRyZW4uZm9yRWFjaCh2PT57Wmp0KHYsYSxmLHArMSksYS5hZGQoe2dyb3VwOiJlZGdlcyIsZGF0YTp7aWQ6YCR7aS5pZH1fJHt2LmlkfWAsc291cmNlOmkuaWQsdGFyZ2V0OnYuaWQsZGVwdGg6cCxzZWN0aW9uOnYuc2VjdGlvbn19KX0pfWZ1bmN0aW9uIGRXZShpLGEpe3JldHVybiBuZXcgUHJvbWlzZShmPT57Y29uc3QgcD14cigiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cigiaWQiLCJjeSIpLmF0dHIoInN0eWxlIiwiZGlzcGxheTpub25lIiksdj1XanQoe2NvbnRhaW5lcjpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY3kiKSxzdHlsZTpbe3NlbGVjdG9yOiJlZGdlIixzdHlsZTp7ImN1cnZlLXN0eWxlIjoiYmV6aWVyIn19XX0pO3AucmVtb3ZlKCksWmp0KGksdixhLDApLHYubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKG0pe20ubGF5b3V0RGltZW5zaW9ucz0oKT0+e2NvbnN0IGI9bS5kYXRhKCk7cmV0dXJue3c6Yi53aWR0aCxoOmIuaGVpZ2h0fX19KSx2LmxheW91dCh7bmFtZToiY29zZS1iaWxrZW50IixxdWFsaXR5OiJwcm9vZiIsc3R5bGVFbmFibGVkOiExLGFuaW1hdGU6ITF9KS5ydW4oKSx2LnJlYWR5KG09PntXdC5pbmZvKCJSZWFkeSIsbSksZih2KX0pfSl9ZnVuY3Rpb24gZ1dlKGkpe2kubm9kZXMoKS5tYXAoKGEsZik9Pntjb25zdCBwPWEuZGF0YSgpO3AueD1hLnBvc2l0aW9uKCkueCxwLnk9YS5wb3NpdGlvbigpLnksR2p0LnBvc2l0aW9uTm9kZShwKTtjb25zdCB2PXpndChwLm5vZGVJZCk7V3QuaW5mbygiSWQ6IixmLCJQb3NpdGlvbjogKCIsYS5wb3NpdGlvbigpLngsIiwgIixhLnBvc2l0aW9uKCkueSwiKSIscCksdi5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHthLnBvc2l0aW9uKCkueC1wLndpZHRoLzJ9LCAke2EucG9zaXRpb24oKS55LXAuaGVpZ2h0LzJ9KWApLHYuYXR0cigiYXR0ciIsYGFwYS0ke2Z9KWApfSl9Y29uc3QgcFdlPXtkcmF3OmFzeW5jKGksYSxmLHApPT57Y29uc3Qgdj1EZSgpO3YuaHRtbExhYmVscz0hMSxXdC5kZWJ1ZyhgUmVuZGVyaW5nIG1pbmRtYXAgZGlhZ3JhbQpgK2kscC5wYXJzZXIpO2NvbnN0IG09RGUoKS5zZWN1cml0eUxldmVsO2xldCBiO209PT0ic2FuZGJveCImJihiPXhyKCIjaSIrYSkpO2NvbnN0IEM9eHIobT09PSJzYW5kYm94Ij9iLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHk6ImJvZHkiKS5zZWxlY3QoIiMiK2EpO0MuYXBwZW5kKCJnIik7Y29uc3QgQT1wLmRiLmdldE1pbmRtYXAoKSxQPUMuYXBwZW5kKCJnIik7UC5hdHRyKCJjbGFzcyIsIm1pbmRtYXAtZWRnZXMiKTtjb25zdCBGPUMuYXBwZW5kKCJnIik7Ri5hdHRyKCJjbGFzcyIsIm1pbmRtYXAtbm9kZXMiKSxRanQoRixBLC0xLHYpO2NvbnN0IGo9YXdhaXQgZFdlKEEsdik7ZldlKFAsaiksZ1dlKGopLHM5KHZvaWQgMCxDLHYubWluZG1hcC5wYWRkaW5nLHYubWluZG1hcC51c2VNYXhXaWR0aCl9fSxiV2U9aT0+e2xldCBhPSIiO2ZvcihsZXQgZj0wO2Y8aS5USEVNRV9DT0xPUl9MSU1JVDtmKyspaVsibGluZUNvbG9yIitmXT1pWyJsaW5lQ29sb3IiK2ZdfHxpWyJjU2NhbGVJbnYiK2ZdLFhFKGlbImxpbmVDb2xvciIrZl0pP2lbImxpbmVDb2xvciIrZl09U3MoaVsibGluZUNvbG9yIitmXSwyMCk6aVsibGluZUNvbG9yIitmXT1ZcyhpWyJsaW5lQ29sb3IiK2ZdLDIwKTtmb3IobGV0IGY9MDtmPGkuVEhFTUVfQ09MT1JfTElNSVQ7ZisrKXtjb25zdCBwPSIiKygxNy0zKmYpO2ErPWAKICAgIC5zZWN0aW9uLSR7Zi0xfSByZWN0LCAuc2VjdGlvbi0ke2YtMX0gcGF0aCwgLnNlY3Rpb24tJHtmLTF9IGNpcmNsZSwgLnNlY3Rpb24tJHtmLTF9IHBvbHlnb24sIC5zZWN0aW9uLSR7Zi0xfSBwYXRoICB7CiAgICAgIGZpbGw6ICR7aVsiY1NjYWxlIitmXX07CiAgICB9CiAgICAuc2VjdGlvbi0ke2YtMX0gdGV4dCB7CiAgICAgZmlsbDogJHtpWyJjU2NhbGVMYWJlbCIrZl19OwogICAgfQogICAgLm5vZGUtaWNvbi0ke2YtMX0gewogICAgICBmb250LXNpemU6IDQwcHg7CiAgICAgIGNvbG9yOiAke2lbImNTY2FsZUxhYmVsIitmXX07CiAgICB9CiAgICAuc2VjdGlvbi1lZGdlLSR7Zi0xfXsKICAgICAgc3Ryb2tlOiAke2lbImNTY2FsZSIrZl19OwogICAgfQogICAgLmVkZ2UtZGVwdGgtJHtmLTF9ewogICAgICBzdHJva2Utd2lkdGg6ICR7cH07CiAgICB9CiAgICAuc2VjdGlvbi0ke2YtMX0gbGluZSB7CiAgICAgIHN0cm9rZTogJHtpWyJjU2NhbGVJbnYiK2ZdfSA7CiAgICAgIHN0cm9rZS13aWR0aDogMzsKICAgIH0KCiAgICAuZGlzYWJsZWQsIC5kaXNhYmxlZCBjaXJjbGUsIC5kaXNhYmxlZCB0ZXh0IHsKICAgICAgZmlsbDogbGlnaHRncmF5OwogICAgfQogICAgLmRpc2FibGVkIHRleHQgewogICAgICBmaWxsOiAjZWZlZmVmOwogICAgfQogICAgYH1yZXR1cm4gYX0sdldlPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntkYjpaVWUscmVuZGVyZXI6cFdlLHBhcnNlcjpxVWUsc3R5bGVzOmk9PmAKICAuZWRnZSB7CiAgICBzdHJva2Utd2lkdGg6IDM7CiAgfQogICR7YldlKGkpfQogIC5zZWN0aW9uLXJvb3QgcmVjdCwgLnNlY3Rpb24tcm9vdCBwYXRoLCAuc2VjdGlvbi1yb290IGNpcmNsZSwgLnNlY3Rpb24tcm9vdCBwb2x5Z29uICB7CiAgICBmaWxsOiAke2kuZ2l0MH07CiAgfQogIC5zZWN0aW9uLXJvb3QgdGV4dCB7CiAgICBmaWxsOiAke2kuZ2l0QnJhbmNoTGFiZWwwfTsKICB9CiAgLmljb24tY29udGFpbmVyIHsKICAgIGhlaWdodDoxMDAlOwogICAgZGlzcGxheTogZmxleDsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICB9CiAgLmVkZ2UgewogICAgZmlsbDogbm9uZTsKICB9CiAgLm1pbmRtYXAtbm9kZS1sYWJlbCB7CiAgICBkeTogMWVtOwogICAgYWxpZ25tZW50LWJhc2VsaW5lOiBtaWRkbGU7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogICAgZG9taW5hbnQtYmFzZWxpbmU6IG1pZGRsZTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICB9CmB9fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBWZ3Q9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihFLEMsQSxQKXtmb3IoQT1BfHx7fSxQPUUubGVuZ3RoO1AtLTtBW0VbUF1dPUMpO3JldHVybiBBfSxhPVsxLDldLGY9WzEsMTBdLHA9WzEsNSwxMCwxMl0sdj17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsU0FOS0VZOjQsTkVXTElORTo1LGNzdjo2LG9wdF9lb2Y6NyxyZWNvcmQ6OCxjc3ZfdGFpbDo5LEVPRjoxMCwiZmllbGRbc291cmNlXSI6MTEsQ09NTUE6MTIsImZpZWxkW3RhcmdldF0iOjEzLCJmaWVsZFt2YWx1ZV0iOjE0LGZpZWxkOjE1LGVzY2FwZWQ6MTYsbm9uX2VzY2FwZWQ6MTcsRFFVT1RFOjE4LEVTQ0FQRURfVEVYVDoxOSxOT05fRVNDQVBFRF9URVhUOjIwLCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJTQU5LRVkiLDU6Ik5FV0xJTkUiLDEwOiJFT0YiLDExOiJmaWVsZFtzb3VyY2VdIiwxMjoiQ09NTUEiLDEzOiJmaWVsZFt0YXJnZXRdIiwxNDoiZmllbGRbdmFsdWVdIiwxODoiRFFVT1RFIiwxOToiRVNDQVBFRF9URVhUIiwyMDoiTk9OX0VTQ0FQRURfVEVYVCJ9LHByb2R1Y3Rpb25zXzpbMCxbMyw0XSxbNiwyXSxbOSwyXSxbOSwwXSxbNywxXSxbNywwXSxbOCw1XSxbMTUsMV0sWzE1LDFdLFsxNiwzXSxbMTcsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oQyxBLFAsRixqLFIsSCl7dmFyIFk9Ui5sZW5ndGgtMTtzd2l0Y2goail7Y2FzZSA3OmNvbnN0IHJ0PUYuZmluZE9yQ3JlYXRlTm9kZShSW1ktNF0udHJpbSgpLnJlcGxhY2VBbGwoJyIiJywnIicpKSxKPUYuZmluZE9yQ3JlYXRlTm9kZShSW1ktMl0udHJpbSgpLnJlcGxhY2VBbGwoJyIiJywnIicpKSxpdD1wYXJzZUZsb2F0KFJbWV0udHJpbSgpKTtGLmFkZExpbmsocnQsSixpdCk7YnJlYWs7Y2FzZSA4OmNhc2UgOTpjYXNlIDExOnRoaXMuJD1SW1ldO2JyZWFrO2Nhc2UgMTA6dGhpcy4kPVJbWS0xXTticmVha319LHRhYmxlOlt7MzoxLDQ6WzEsMl19LHsxOlszXX0sezU6WzEsM119LHs2OjQsODo1LDE1OjYsMTY6NywxNzo4LDE4OmEsMjA6Zn0sezE6WzIsNl0sNzoxMSwxMDpbMSwxMl19LGkoZixbMiw0XSx7OToxMyw1OlsxLDE0XX0pLHsxMjpbMSwxNV19LGkocCxbMiw4XSksaShwLFsyLDldKSx7MTk6WzEsMTZdfSxpKHAsWzIsMTFdKSx7MTpbMiwxXX0sezE6WzIsNV19LGkoZixbMiwyXSksezY6MTcsODo1LDE1OjYsMTY6NywxNzo4LDE4OmEsMjA6Zn0sezE1OjE4LDE2OjcsMTc6OCwxODphLDIwOmZ9LHsxODpbMSwxOV19LGkoZixbMiwzXSksezEyOlsxLDIwXX0saShwLFsyLDEwXSksezE1OjIxLDE2OjcsMTc6OCwxODphLDIwOmZ9LGkoWzEsNSwxMF0sWzIsN10pXSxkZWZhdWx0QWN0aW9uczp7MTE6WzIsMV0sMTI6WzIsNV19LHBhcnNlRXJyb3I6ZnVuY3Rpb24oQyxBKXtpZihBLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoQyk7ZWxzZXt2YXIgUD1uZXcgRXJyb3IoQyk7dGhyb3cgUC5oYXNoPUEsUH19LHBhcnNlOmZ1bmN0aW9uKEMpe3ZhciBBPXRoaXMsUD1bMF0sRj1bXSxqPVtudWxsXSxSPVtdLEg9dGhpcy50YWJsZSxZPSIiLHJ0PTAsSj0wLGl0PTIsZnQ9MSxUdD1SLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLGt0PU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksbXQ9e3l5Ont9fTtmb3IodmFyIGN0IGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksY3QpJiYobXQueXlbY3RdPXRoaXMueXlbY3RdKTtrdC5zZXRJbnB1dChDLG10Lnl5KSxtdC55eS5sZXhlcj1rdCxtdC55eS5wYXJzZXI9dGhpcyx0eXBlb2Yga3QueXlsbG9jPiJ1IiYmKGt0Lnl5bGxvYz17fSk7dmFyIHl0PWt0Lnl5bGxvYztSLnB1c2goeXQpO3ZhciBzdD1rdC5vcHRpb25zJiZrdC5vcHRpb25zLnJhbmdlczt0eXBlb2YgbXQueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9bXQueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24geHQoKXt2YXIgdnQ7cmV0dXJuIHZ0PUYucG9wKCl8fGt0LmxleCgpfHxmdCx0eXBlb2YgdnQhPSJudW1iZXIiJiYodnQgaW5zdGFuY2VvZiBBcnJheSYmKEY9dnQsdnQ9Ri5wb3AoKSksdnQ9QS5zeW1ib2xzX1t2dF18fHZ0KSx2dH1mb3IodmFyIGh0LGR0LEN0LHR0LFB0PXt9LHB0LEZ0LFgsUnQ7Oyl7aWYoZHQ9UFtQLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2R0XT9DdD10aGlzLmRlZmF1bHRBY3Rpb25zW2R0XTooKGh0PT09bnVsbHx8dHlwZW9mIGh0PiJ1IikmJihodD14dCgpKSxDdD1IW2R0XSYmSFtkdF1baHRdKSx0eXBlb2YgQ3Q+InUifHwhQ3QubGVuZ3RofHwhQ3RbMF0pe3ZhciBCdD0iIjtSdD1bXTtmb3IocHQgaW4gSFtkdF0pdGhpcy50ZXJtaW5hbHNfW3B0XSYmcHQ+aXQmJlJ0LnB1c2goIiciK3RoaXMudGVybWluYWxzX1twdF0rIiciKTtrdC5zaG93UG9zaXRpb24/QnQ9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisocnQrMSkrYDoKYCtrdC5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK1J0LmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19baHRdfHxodCkrIiciOkJ0PSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKHJ0KzEpKyI6IFVuZXhwZWN0ZWQgIisoaHQ9PWZ0PyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW2h0XXx8aHQpKyInIiksdGhpcy5wYXJzZUVycm9yKEJ0LHt0ZXh0Omt0Lm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1todF18fGh0LGxpbmU6a3QueXlsaW5lbm8sbG9jOnl0LGV4cGVjdGVkOlJ0fSl9aWYoQ3RbMF1pbnN0YW5jZW9mIEFycmF5JiZDdC5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK2R0KyIsIHRva2VuOiAiK2h0KTtzd2l0Y2goQ3RbMF0pe2Nhc2UgMTpQLnB1c2goaHQpLGoucHVzaChrdC55eXRleHQpLFIucHVzaChrdC55eWxsb2MpLFAucHVzaChDdFsxXSksaHQ9bnVsbCxKPWt0Lnl5bGVuZyxZPWt0Lnl5dGV4dCxydD1rdC55eWxpbmVubyx5dD1rdC55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKEZ0PXRoaXMucHJvZHVjdGlvbnNfW0N0WzFdXVsxXSxQdC4kPWpbai5sZW5ndGgtRnRdLFB0Ll8kPXtmaXJzdF9saW5lOlJbUi5sZW5ndGgtKEZ0fHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6UltSLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOlJbUi5sZW5ndGgtKEZ0fHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOlJbUi5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LHN0JiYoUHQuXyQucmFuZ2U9W1JbUi5sZW5ndGgtKEZ0fHwxKV0ucmFuZ2VbMF0sUltSLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHR0PXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShQdCxbWSxKLHJ0LG10Lnl5LEN0WzFdLGosUl0uY29uY2F0KFR0KSksdHlwZW9mIHR0PCJ1IilyZXR1cm4gdHQ7RnQmJihQPVAuc2xpY2UoMCwtMSpGdCoyKSxqPWouc2xpY2UoMCwtMSpGdCksUj1SLnNsaWNlKDAsLTEqRnQpKSxQLnB1c2godGhpcy5wcm9kdWN0aW9uc19bQ3RbMV1dWzBdKSxqLnB1c2goUHQuJCksUi5wdXNoKFB0Ll8kKSxYPUhbUFtQLmxlbmd0aC0yXV1bUFtQLmxlbmd0aC0xXV0sUC5wdXNoKFgpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxtPWZ1bmN0aW9uKCl7dmFyIEU9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24oQSxQKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKEEsUCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoQSl9LHNldElucHV0OmZ1bmN0aW9uKEMsQSl7cmV0dXJuIHRoaXMueXk9QXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9Qyx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgQz10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9Qyx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9Qyx0aGlzLm1hdGNoZWQrPUM7dmFyIEE9Qy5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIEE/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLEN9LHVucHV0OmZ1bmN0aW9uKEMpe3ZhciBBPUMubGVuZ3RoLFA9Qy5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PUMrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLUEpLHRoaXMub2Zmc2V0LT1BO3ZhciBGPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLFAubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1QLmxlbmd0aC0xKTt2YXIgaj10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46UD8oUC5sZW5ndGg9PT1GLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrRltGLmxlbmd0aC1QLmxlbmd0aF0ubGVuZ3RoLVBbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1BfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2pbMF0salswXSt0aGlzLnl5bGVuZy1BXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24oQyl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKEMpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIEM9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihDLmxlbmd0aD4yMD8iLi4uIjoiIikrQy5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciBDPXRoaXMubWF0Y2g7cmV0dXJuIEMubGVuZ3RoPDIwJiYoQys9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtQy5sZW5ndGgpKSwoQy5zdWJzdHIoMCwyMCkrKEMubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBDPXRoaXMucGFzdElucHV0KCksQT1uZXcgQXJyYXkoQy5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBDK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtBKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbihDLEEpe3ZhciBQLEYsajtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoaj17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihqLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLEY9Q1swXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksRiYmKHRoaXMueXlsaW5lbm8rPUYubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46Rj9GW0YubGVuZ3RoLTFdLmxlbmd0aC1GW0YubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rQ1swXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1DWzBdLHRoaXMubWF0Y2grPUNbMF0sdGhpcy5tYXRjaGVzPUMsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoQ1swXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9Q1swXSxQPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLEEsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksUClyZXR1cm4gUDtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgUiBpbiBqKXRoaXNbUl09altSXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBDLEEsUCxGO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGo9dGhpcy5fY3VycmVudFJ1bGVzKCksUj0wO1I8ai5sZW5ndGg7UisrKWlmKFA9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tqW1JdXSksUCYmKCFBfHxQWzBdLmxlbmd0aD5BWzBdLmxlbmd0aCkpe2lmKEE9UCxGPVIsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoQz10aGlzLnRlc3RfbWF0Y2goUCxqW1JdKSxDIT09ITEpcmV0dXJuIEM7aWYodGhpcy5fYmFja3RyYWNrKXtBPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIEE/KEM9dGhpcy50ZXN0X21hdGNoKEEsaltGXSksQyE9PSExP0M6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciBBPXRoaXMubmV4dCgpO3JldHVybiBBfHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbihBKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goQSl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIEE9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gQT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKEEpe3JldHVybiBBPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoQXx8MCksQT49MD90aGlzLmNvbmRpdGlvblN0YWNrW0FdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKEEpe3RoaXMuYmVnaW4oQSl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOntlYXN5X2tld29yZF9ydWxlczohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihBLFAsRixqKXtzd2l0Y2goRil7Y2FzZSAwOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiY3N2IiksNDtjYXNlIDE6cmV0dXJuIDEwO2Nhc2UgMjpyZXR1cm4gNTtjYXNlIDM6cmV0dXJuIDEyO2Nhc2UgNDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImVzY2FwZWRfdGV4dCIpLDE4O2Nhc2UgNTpyZXR1cm4gMjA7Y2FzZSA2OnJldHVybiB0aGlzLnBvcFN0YXRlKCJlc2NhcGVkX3RleHQiKSwxODtjYXNlIDc6cmV0dXJuIDE5fX0scnVsZXM6Wy9eKD86c2Fua2V5LWJldGFcYikvLC9eKD86JCkvLC9eKD86KChcdTAwMERcdTAwMEEpfChcdTAwMEEpKSkvLC9eKD86KFx1MDAyQykpLywvXig/OihcdTAwMjIpKS8sL14oPzooW1x1MDAyMC1cdTAwMjFcdTAwMjMtXHUwMDJCXHUwMDJELVx1MDA3RV0pKikvLC9eKD86KFx1MDAyMikoPyEoXHUwMDIyKSkpLywvXig/OigoW1x1MDAyMC1cdTAwMjFcdTAwMjMtXHUwMDJCXHUwMDJELVx1MDA3RV0pfChcdTAwMkMpfChcdTAwMEQpfChcdTAwMEEpfChcdTAwMjIpKFx1MDAyMikpKikvXSxjb25kaXRpb25zOntjc3Y6e3J1bGVzOlsxLDIsMyw0LDUsNiw3XSxpbmNsdXNpdmU6ITF9LGVzY2FwZWRfdGV4dDp7cnVsZXM6WzYsN10saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDUsNiw3XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIEV9KCk7di5sZXhlcj1tO2Z1bmN0aW9uIGIoKXt0aGlzLnl5PXt9fXJldHVybiBiLnByb3RvdHlwZT12LHYuUGFyc2VyPWIsbmV3IGJ9KCk7Vmd0LnBhcnNlcj1WZ3Q7Y29uc3QgS0s9Vmd0O2xldCBZSz1bXSxYSz1bXSx3TD17fTtjb25zdCB3V2U9KCk9PntZSz1bXSxYSz1bXSx3TD17fSxjZygpfTtjbGFzcyBtV2V7Y29uc3RydWN0b3IoYSxmLHA9MCl7dGhpcy5zb3VyY2U9YSx0aGlzLnRhcmdldD1mLHRoaXMudmFsdWU9cH19Y29uc3QgeVdlPShpLGEsZik9PntZSy5wdXNoKG5ldyBtV2UoaSxhLGYpKX07Y2xhc3MgeFdle2NvbnN0cnVjdG9yKGEpe3RoaXMuSUQ9YX19Y29uc3Qga1dlPXtub2Rlc01hcDp3TCxnZXRDb25maWc6KCk9PkRlKCkuc2Fua2V5LGdldE5vZGVzOigpPT5YSyxnZXRMaW5rczooKT0+WUssZ2V0R3JhcGg6KCk9Pih7bm9kZXM6WEsubWFwKGk9Pih7aWQ6aS5JRH0pKSxsaW5rczpZSy5tYXAoaT0+KHtzb3VyY2U6aS5zb3VyY2UuSUQsdGFyZ2V0OmkudGFyZ2V0LklELHZhbHVlOmkudmFsdWV9KSl9KSxhZGRMaW5rOnlXZSxmaW5kT3JDcmVhdGVOb2RlOmk9PihpPXVpLnNhbml0aXplVGV4dChpLERlKCkpLHdMW2ldfHwod0xbaV09bmV3IHhXZShpKSxYSy5wdXNoKHdMW2ldKSksd0xbaV0pLGdldEFjY1RpdGxlOnVnLHNldEFjY1RpdGxlOm0wLGdldEFjY0Rlc2NyaXB0aW9uOmhnLHNldEFjY0Rlc2NyaXB0aW9uOmxnLGdldERpYWdyYW1UaXRsZTpocCxzZXREaWFncmFtVGl0bGU6TmIsY2xlYXI6d1dlfTtmdW5jdGlvbiBKanQoaSxhKXtsZXQgZjtpZihhPT09dm9pZCAwKWZvcihjb25zdCBwIG9mIGkpcCE9bnVsbCYmKGY8cHx8Zj09PXZvaWQgMCYmcD49cCkmJihmPXApO2Vsc2V7bGV0IHA9LTE7Zm9yKGxldCB2IG9mIGkpKHY9YSh2LCsrcCxpKSkhPW51bGwmJihmPHZ8fGY9PT12b2lkIDAmJnY+PXYpJiYoZj12KX1yZXR1cm4gZn1mdW5jdGlvbiB0JHQoaSxhKXtsZXQgZjtpZihhPT09dm9pZCAwKWZvcihjb25zdCBwIG9mIGkpcCE9bnVsbCYmKGY+cHx8Zj09PXZvaWQgMCYmcD49cCkmJihmPXApO2Vsc2V7bGV0IHA9LTE7Zm9yKGxldCB2IG9mIGkpKHY9YSh2LCsrcCxpKSkhPW51bGwmJihmPnZ8fGY9PT12b2lkIDAmJnY+PXYpJiYoZj12KX1yZXR1cm4gZn1mdW5jdGlvbiBHZ3QoaSxhKXtsZXQgZj0wO2lmKGE9PT12b2lkIDApZm9yKGxldCBwIG9mIGkpKHA9K3ApJiYoZis9cCk7ZWxzZXtsZXQgcD0tMTtmb3IobGV0IHYgb2YgaSkodj0rYSh2LCsrcCxpKSkmJihmKz12KX1yZXR1cm4gZn1mdW5jdGlvbiBFV2UoaSl7cmV0dXJuIGkudGFyZ2V0LmRlcHRofWZ1bmN0aW9uIFRXZShpKXtyZXR1cm4gaS5kZXB0aH1mdW5jdGlvbiBfV2UoaSxhKXtyZXR1cm4gYS0xLWkuaGVpZ2h0fWZ1bmN0aW9uIGUkdChpLGEpe3JldHVybiBpLnNvdXJjZUxpbmtzLmxlbmd0aD9pLmRlcHRoOmEtMX1mdW5jdGlvbiBDV2UoaSl7cmV0dXJuIGkudGFyZ2V0TGlua3MubGVuZ3RoP2kuZGVwdGg6aS5zb3VyY2VMaW5rcy5sZW5ndGg/dCR0KGkuc291cmNlTGlua3MsRVdlKS0xOjB9ZnVuY3Rpb24gUUsoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGl9fWZ1bmN0aW9uIG4kdChpLGEpe3JldHVybiBaSyhpLnNvdXJjZSxhLnNvdXJjZSl8fGkuaW5kZXgtYS5pbmRleH1mdW5jdGlvbiByJHQoaSxhKXtyZXR1cm4gWksoaS50YXJnZXQsYS50YXJnZXQpfHxpLmluZGV4LWEuaW5kZXh9ZnVuY3Rpb24gWksoaSxhKXtyZXR1cm4gaS55MC1hLnkwfWZ1bmN0aW9uIFVndChpKXtyZXR1cm4gaS52YWx1ZX1mdW5jdGlvbiBTV2UoaSl7cmV0dXJuIGkuaW5kZXh9ZnVuY3Rpb24gQVdlKGkpe3JldHVybiBpLm5vZGVzfWZ1bmN0aW9uIExXZShpKXtyZXR1cm4gaS5saW5rc31mdW5jdGlvbiBpJHQoaSxhKXtjb25zdCBmPWkuZ2V0KGEpO2lmKCFmKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIithKTtyZXR1cm4gZn1mdW5jdGlvbiBzJHQoe25vZGVzOml9KXtmb3IoY29uc3QgYSBvZiBpKXtsZXQgZj1hLnkwLHA9Zjtmb3IoY29uc3QgdiBvZiBhLnNvdXJjZUxpbmtzKXYueTA9Zit2LndpZHRoLzIsZis9di53aWR0aDtmb3IoY29uc3QgdiBvZiBhLnRhcmdldExpbmtzKXYueTE9cCt2LndpZHRoLzIscCs9di53aWR0aH19ZnVuY3Rpb24gTVdlKCl7bGV0IGk9MCxhPTAsZj0xLHA9MSx2PTI0LG09OCxiLEU9U1dlLEM9ZSR0LEEsUCxGPUFXZSxqPUxXZSxSPTY7ZnVuY3Rpb24gSCgpe2NvbnN0IFB0PXtub2RlczpGLmFwcGx5KG51bGwsYXJndW1lbnRzKSxsaW5rczpqLmFwcGx5KG51bGwsYXJndW1lbnRzKX07cmV0dXJuIFkoUHQpLHJ0KFB0KSxKKFB0KSxpdChQdCksa3QoUHQpLHMkdChQdCksUHR9SC51cGRhdGU9ZnVuY3Rpb24oUHQpe3JldHVybiBzJHQoUHQpLFB0fSxILm5vZGVJZD1mdW5jdGlvbihQdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9dHlwZW9mIFB0PT0iZnVuY3Rpb24iP1B0OlFLKFB0KSxIKTpFfSxILm5vZGVBbGlnbj1mdW5jdGlvbihQdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEM9dHlwZW9mIFB0PT0iZnVuY3Rpb24iP1B0OlFLKFB0KSxIKTpDfSxILm5vZGVTb3J0PWZ1bmN0aW9uKFB0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oQT1QdCxIKTpBfSxILm5vZGVXaWR0aD1mdW5jdGlvbihQdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9K1B0LEgpOnZ9LEgubm9kZVBhZGRpbmc9ZnVuY3Rpb24oUHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPWI9K1B0LEgpOm19LEgubm9kZXM9ZnVuY3Rpb24oUHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhGPXR5cGVvZiBQdD09ImZ1bmN0aW9uIj9QdDpRSyhQdCksSCk6Rn0sSC5saW5rcz1mdW5jdGlvbihQdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGo9dHlwZW9mIFB0PT0iZnVuY3Rpb24iP1B0OlFLKFB0KSxIKTpqfSxILmxpbmtTb3J0PWZ1bmN0aW9uKFB0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUD1QdCxIKTpQfSxILnNpemU9ZnVuY3Rpb24oUHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWE9MCxmPStQdFswXSxwPStQdFsxXSxIKTpbZi1pLHAtYV19LEguZXh0ZW50PWZ1bmN0aW9uKFB0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rUHRbMF1bMF0sZj0rUHRbMV1bMF0sYT0rUHRbMF1bMV0scD0rUHRbMV1bMV0sSCk6W1tpLGFdLFtmLHBdXX0sSC5pdGVyYXRpb25zPWZ1bmN0aW9uKFB0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUj0rUHQsSCk6Un07ZnVuY3Rpb24gWSh7bm9kZXM6UHQsbGlua3M6cHR9KXtmb3IoY29uc3RbWCxSdF1vZiBQdC5lbnRyaWVzKCkpUnQuaW5kZXg9WCxSdC5zb3VyY2VMaW5rcz1bXSxSdC50YXJnZXRMaW5rcz1bXTtjb25zdCBGdD1uZXcgTWFwKFB0Lm1hcCgoWCxSdCk9PltFKFgsUnQsUHQpLFhdKSk7Zm9yKGNvbnN0W1gsUnRdb2YgcHQuZW50cmllcygpKXtSdC5pbmRleD1YO2xldHtzb3VyY2U6QnQsdGFyZ2V0OnZ0fT1SdDt0eXBlb2YgQnQhPSJvYmplY3QiJiYoQnQ9UnQuc291cmNlPWkkdChGdCxCdCkpLHR5cGVvZiB2dCE9Im9iamVjdCImJih2dD1SdC50YXJnZXQ9aSR0KEZ0LHZ0KSksQnQuc291cmNlTGlua3MucHVzaChSdCksdnQudGFyZ2V0TGlua3MucHVzaChSdCl9aWYoUCE9bnVsbClmb3IoY29uc3R7c291cmNlTGlua3M6WCx0YXJnZXRMaW5rczpSdH1vZiBQdClYLnNvcnQoUCksUnQuc29ydChQKX1mdW5jdGlvbiBydCh7bm9kZXM6UHR9KXtmb3IoY29uc3QgcHQgb2YgUHQpcHQudmFsdWU9cHQuZml4ZWRWYWx1ZT09PXZvaWQgMD9NYXRoLm1heChHZ3QocHQuc291cmNlTGlua3MsVWd0KSxHZ3QocHQudGFyZ2V0TGlua3MsVWd0KSk6cHQuZml4ZWRWYWx1ZX1mdW5jdGlvbiBKKHtub2RlczpQdH0pe2NvbnN0IHB0PVB0Lmxlbmd0aDtsZXQgRnQ9bmV3IFNldChQdCksWD1uZXcgU2V0LFJ0PTA7Zm9yKDtGdC5zaXplOyl7Zm9yKGNvbnN0IEJ0IG9mIEZ0KXtCdC5kZXB0aD1SdDtmb3IoY29uc3R7dGFyZ2V0OnZ0fW9mIEJ0LnNvdXJjZUxpbmtzKVguYWRkKHZ0KX1pZigrK1J0PnB0KXRocm93IG5ldyBFcnJvcigiY2lyY3VsYXIgbGluayIpO0Z0PVgsWD1uZXcgU2V0fX1mdW5jdGlvbiBpdCh7bm9kZXM6UHR9KXtjb25zdCBwdD1QdC5sZW5ndGg7bGV0IEZ0PW5ldyBTZXQoUHQpLFg9bmV3IFNldCxSdD0wO2Zvcig7RnQuc2l6ZTspe2Zvcihjb25zdCBCdCBvZiBGdCl7QnQuaGVpZ2h0PVJ0O2Zvcihjb25zdHtzb3VyY2U6dnR9b2YgQnQudGFyZ2V0TGlua3MpWC5hZGQodnQpfWlmKCsrUnQ+cHQpdGhyb3cgbmV3IEVycm9yKCJjaXJjdWxhciBsaW5rIik7RnQ9WCxYPW5ldyBTZXR9fWZ1bmN0aW9uIGZ0KHtub2RlczpQdH0pe2NvbnN0IHB0PUpqdChQdCxSdD0+UnQuZGVwdGgpKzEsRnQ9KGYtaS12KS8ocHQtMSksWD1uZXcgQXJyYXkocHQpO2Zvcihjb25zdCBSdCBvZiBQdCl7Y29uc3QgQnQ9TWF0aC5tYXgoMCxNYXRoLm1pbihwdC0xLE1hdGguZmxvb3IoQy5jYWxsKG51bGwsUnQscHQpKSkpO1J0LmxheWVyPUJ0LFJ0LngwPWkrQnQqRnQsUnQueDE9UnQueDArdixYW0J0XT9YW0J0XS5wdXNoKFJ0KTpYW0J0XT1bUnRdfWlmKEEpZm9yKGNvbnN0IFJ0IG9mIFgpUnQuc29ydChBKTtyZXR1cm4gWH1mdW5jdGlvbiBUdChQdCl7Y29uc3QgcHQ9dCR0KFB0LEZ0PT4ocC1hLShGdC5sZW5ndGgtMSkqYikvR2d0KEZ0LFVndCkpO2Zvcihjb25zdCBGdCBvZiBQdCl7bGV0IFg9YTtmb3IoY29uc3QgUnQgb2YgRnQpe1J0LnkwPVgsUnQueTE9WCtSdC52YWx1ZSpwdCxYPVJ0LnkxK2I7Zm9yKGNvbnN0IEJ0IG9mIFJ0LnNvdXJjZUxpbmtzKUJ0LndpZHRoPUJ0LnZhbHVlKnB0fVg9KHAtWCtiKS8oRnQubGVuZ3RoKzEpO2ZvcihsZXQgUnQ9MDtSdDxGdC5sZW5ndGg7KytSdCl7Y29uc3QgQnQ9RnRbUnRdO0J0LnkwKz1YKihSdCsxKSxCdC55MSs9WCooUnQrMSl9ZHQoRnQpfX1mdW5jdGlvbiBrdChQdCl7Y29uc3QgcHQ9ZnQoUHQpO2I9TWF0aC5taW4obSwocC1hKS8oSmp0KHB0LEZ0PT5GdC5sZW5ndGgpLTEpKSxUdChwdCk7Zm9yKGxldCBGdD0wO0Z0PFI7KytGdCl7Y29uc3QgWD1NYXRoLnBvdyguOTksRnQpLFJ0PU1hdGgubWF4KDEtWCwoRnQrMSkvUik7Y3QocHQsWCxSdCksbXQocHQsWCxSdCl9fWZ1bmN0aW9uIG10KFB0LHB0LEZ0KXtmb3IobGV0IFg9MSxSdD1QdC5sZW5ndGg7WDxSdDsrK1gpe2NvbnN0IEJ0PVB0W1hdO2Zvcihjb25zdCB2dCBvZiBCdCl7bGV0IE90PTAsVnQ9MDtmb3IoY29uc3R7c291cmNlOl9uLHZhbHVlOlRlfW9mIHZ0LnRhcmdldExpbmtzKXtsZXQgV249VGUqKHZ0LmxheWVyLV9uLmxheWVyKTtPdCs9Q3QoX24sdnQpKlduLFZ0Kz1Xbn1pZighKFZ0PjApKWNvbnRpbnVlO2xldCBxZT0oT3QvVnQtdnQueTApKnB0O3Z0LnkwKz1xZSx2dC55MSs9cWUsaHQodnQpfUE9PT12b2lkIDAmJkJ0LnNvcnQoWkspLHl0KEJ0LEZ0KX19ZnVuY3Rpb24gY3QoUHQscHQsRnQpe2ZvcihsZXQgWD1QdC5sZW5ndGgsUnQ9WC0yO1J0Pj0wOy0tUnQpe2NvbnN0IEJ0PVB0W1J0XTtmb3IoY29uc3QgdnQgb2YgQnQpe2xldCBPdD0wLFZ0PTA7Zm9yKGNvbnN0e3RhcmdldDpfbix2YWx1ZTpUZX1vZiB2dC5zb3VyY2VMaW5rcyl7bGV0IFduPVRlKihfbi5sYXllci12dC5sYXllcik7T3QrPXR0KHZ0LF9uKSpXbixWdCs9V259aWYoIShWdD4wKSljb250aW51ZTtsZXQgcWU9KE90L1Z0LXZ0LnkwKSpwdDt2dC55MCs9cWUsdnQueTErPXFlLGh0KHZ0KX1BPT09dm9pZCAwJiZCdC5zb3J0KFpLKSx5dChCdCxGdCl9fWZ1bmN0aW9uIHl0KFB0LHB0KXtjb25zdCBGdD1QdC5sZW5ndGg+PjEsWD1QdFtGdF07eHQoUHQsWC55MC1iLEZ0LTEscHQpLHN0KFB0LFgueTErYixGdCsxLHB0KSx4dChQdCxwLFB0Lmxlbmd0aC0xLHB0KSxzdChQdCxhLDAscHQpfWZ1bmN0aW9uIHN0KFB0LHB0LEZ0LFgpe2Zvcig7RnQ8UHQubGVuZ3RoOysrRnQpe2NvbnN0IFJ0PVB0W0Z0XSxCdD0ocHQtUnQueTApKlg7QnQ+MWUtNiYmKFJ0LnkwKz1CdCxSdC55MSs9QnQpLHB0PVJ0LnkxK2J9fWZ1bmN0aW9uIHh0KFB0LHB0LEZ0LFgpe2Zvcig7RnQ+PTA7LS1GdCl7Y29uc3QgUnQ9UHRbRnRdLEJ0PShSdC55MS1wdCkqWDtCdD4xZS02JiYoUnQueTAtPUJ0LFJ0LnkxLT1CdCkscHQ9UnQueTAtYn19ZnVuY3Rpb24gaHQoe3NvdXJjZUxpbmtzOlB0LHRhcmdldExpbmtzOnB0fSl7aWYoUD09PXZvaWQgMCl7Zm9yKGNvbnN0e3NvdXJjZTp7c291cmNlTGlua3M6RnR9fW9mIHB0KUZ0LnNvcnQociR0KTtmb3IoY29uc3R7dGFyZ2V0Ont0YXJnZXRMaW5rczpGdH19b2YgUHQpRnQuc29ydChuJHQpfX1mdW5jdGlvbiBkdChQdCl7aWYoUD09PXZvaWQgMClmb3IoY29uc3R7c291cmNlTGlua3M6cHQsdGFyZ2V0TGlua3M6RnR9b2YgUHQpcHQuc29ydChyJHQpLEZ0LnNvcnQobiR0KX1mdW5jdGlvbiBDdChQdCxwdCl7bGV0IEZ0PVB0LnkwLShQdC5zb3VyY2VMaW5rcy5sZW5ndGgtMSkqYi8yO2Zvcihjb25zdHt0YXJnZXQ6WCx3aWR0aDpSdH1vZiBQdC5zb3VyY2VMaW5rcyl7aWYoWD09PXB0KWJyZWFrO0Z0Kz1SdCtifWZvcihjb25zdHtzb3VyY2U6WCx3aWR0aDpSdH1vZiBwdC50YXJnZXRMaW5rcyl7aWYoWD09PVB0KWJyZWFrO0Z0LT1SdH1yZXR1cm4gRnR9ZnVuY3Rpb24gdHQoUHQscHQpe2xldCBGdD1wdC55MC0ocHQudGFyZ2V0TGlua3MubGVuZ3RoLTEpKmIvMjtmb3IoY29uc3R7c291cmNlOlgsd2lkdGg6UnR9b2YgcHQudGFyZ2V0TGlua3Mpe2lmKFg9PT1QdClicmVhaztGdCs9UnQrYn1mb3IoY29uc3R7dGFyZ2V0Olgsd2lkdGg6UnR9b2YgUHQuc291cmNlTGlua3Mpe2lmKFg9PT1wdClicmVhaztGdC09UnR9cmV0dXJuIEZ0fXJldHVybiBIfXZhciBXZ3Q9TWF0aC5QSSxLZ3Q9MipXZ3QsQzk9MWUtNixEV2U9S2d0LUM5O2Z1bmN0aW9uIFlndCgpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIGEkdCgpe3JldHVybiBuZXcgWWd0fVlndC5wcm90b3R5cGU9YSR0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6WWd0LG1vdmVUbzpmdW5jdGlvbihpLGEpe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rYSl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX3gxIT09bnVsbCYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuXys9IloiKX0sbGluZVRvOmZ1bmN0aW9uKGksYSl7dGhpcy5fKz0iTCIrKHRoaXMuX3gxPStpKSsiLCIrKHRoaXMuX3kxPSthKX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbihpLGEsZixwKXt0aGlzLl8rPSJRIisgK2krIiwiKyArYSsiLCIrKHRoaXMuX3gxPStmKSsiLCIrKHRoaXMuX3kxPStwKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbihpLGEsZixwLHYsbSl7dGhpcy5fKz0iQyIrICtpKyIsIisgK2ErIiwiKyArZisiLCIrICtwKyIsIisodGhpcy5feDE9K3YpKyIsIisodGhpcy5feTE9K20pfSxhcmNUbzpmdW5jdGlvbihpLGEsZixwLHYpe2k9K2ksYT0rYSxmPStmLHA9K3Asdj0rdjt2YXIgbT10aGlzLl94MSxiPXRoaXMuX3kxLEU9Zi1pLEM9cC1hLEE9bS1pLFA9Yi1hLEY9QSpBK1AqUDtpZih2PDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrdik7aWYodGhpcy5feDE9PT1udWxsKXRoaXMuXys9Ik0iKyh0aGlzLl94MT1pKSsiLCIrKHRoaXMuX3kxPWEpO2Vsc2UgaWYoRj5DOSlpZighKE1hdGguYWJzKFAqRS1DKkEpPkM5KXx8IXYpdGhpcy5fKz0iTCIrKHRoaXMuX3gxPWkpKyIsIisodGhpcy5feTE9YSk7ZWxzZXt2YXIgaj1mLW0sUj1wLWIsSD1FKkUrQypDLFk9aipqK1IqUixydD1NYXRoLnNxcnQoSCksSj1NYXRoLnNxcnQoRiksaXQ9dipNYXRoLnRhbigoV2d0LU1hdGguYWNvcygoSCtGLVkpLygyKnJ0KkopKSkvMiksZnQ9aXQvSixUdD1pdC9ydDtNYXRoLmFicyhmdC0xKT5DOSYmKHRoaXMuXys9IkwiKyhpK2Z0KkEpKyIsIisoYStmdCpQKSksdGhpcy5fKz0iQSIrdisiLCIrdisiLDAsMCwiKyArKFAqaj5BKlIpKyIsIisodGhpcy5feDE9aStUdCpFKSsiLCIrKHRoaXMuX3kxPWErVHQqQyl9fSxhcmM6ZnVuY3Rpb24oaSxhLGYscCx2LG0pe2k9K2ksYT0rYSxmPStmLG09ISFtO3ZhciBiPWYqTWF0aC5jb3MocCksRT1mKk1hdGguc2luKHApLEM9aStiLEE9YStFLFA9MV5tLEY9bT9wLXY6di1wO2lmKGY8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIitmKTt0aGlzLl94MT09PW51bGw/dGhpcy5fKz0iTSIrQysiLCIrQTooTWF0aC5hYnModGhpcy5feDEtQyk+Qzl8fE1hdGguYWJzKHRoaXMuX3kxLUEpPkM5KSYmKHRoaXMuXys9IkwiK0MrIiwiK0EpLGYmJihGPDAmJihGPUYlS2d0K0tndCksRj5EV2U/dGhpcy5fKz0iQSIrZisiLCIrZisiLDAsMSwiK1ArIiwiKyhpLWIpKyIsIisoYS1FKSsiQSIrZisiLCIrZisiLDAsMSwiK1ArIiwiKyh0aGlzLl94MT1DKSsiLCIrKHRoaXMuX3kxPUEpOkY+QzkmJih0aGlzLl8rPSJBIitmKyIsIitmKyIsMCwiKyArKEY+PVdndCkrIiwiK1ArIiwiKyh0aGlzLl94MT1pK2YqTWF0aC5jb3ModikpKyIsIisodGhpcy5feTE9YStmKk1hdGguc2luKHYpKSkpfSxyZWN0OmZ1bmN0aW9uKGksYSxmLHApe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rYSkrImgiKyArZisidiIrICtwKyJoIistZisiWiJ9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319O2Z1bmN0aW9uIG8kdChpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaX19ZnVuY3Rpb24gSVdlKGkpe3JldHVybiBpWzBdfWZ1bmN0aW9uIE9XZShpKXtyZXR1cm4gaVsxXX12YXIgTldlPUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiBQV2UoaSl7cmV0dXJuIGkuc291cmNlfWZ1bmN0aW9uIEZXZShpKXtyZXR1cm4gaS50YXJnZXR9ZnVuY3Rpb24gQldlKGkpe3ZhciBhPVBXZSxmPUZXZSxwPUlXZSx2PU9XZSxtPW51bGw7ZnVuY3Rpb24gYigpe3ZhciBFLEM9TldlLmNhbGwoYXJndW1lbnRzKSxBPWEuYXBwbHkodGhpcyxDKSxQPWYuYXBwbHkodGhpcyxDKTtpZihtfHwobT1FPWEkdCgpKSxpKG0sK3AuYXBwbHkodGhpcywoQ1swXT1BLEMpKSwrdi5hcHBseSh0aGlzLEMpLCtwLmFwcGx5KHRoaXMsKENbMF09UCxDKSksK3YuYXBwbHkodGhpcyxDKSksRSlyZXR1cm4gbT1udWxsLEUrIiJ8fG51bGx9cmV0dXJuIGIuc291cmNlPWZ1bmN0aW9uKEUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPUUsYik6YX0sYi50YXJnZXQ9ZnVuY3Rpb24oRSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9RSxiKTpmfSxiLng9ZnVuY3Rpb24oRSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9dHlwZW9mIEU9PSJmdW5jdGlvbiI/RTpvJHQoK0UpLGIpOnB9LGIueT1mdW5jdGlvbihFKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj10eXBlb2YgRT09ImZ1bmN0aW9uIj9FOm8kdCgrRSksYik6dn0sYi5jb250ZXh0PWZ1bmN0aW9uKEUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPUU/P251bGwsYik6bX0sYn1mdW5jdGlvbiBSV2UoaSxhLGYscCx2KXtpLm1vdmVUbyhhLGYpLGkuYmV6aWVyQ3VydmVUbyhhPShhK3ApLzIsZixhLHYscCx2KX1mdW5jdGlvbiBqV2UoKXtyZXR1cm4gQldlKFJXZSl9ZnVuY3Rpb24gJFdlKGkpe3JldHVybltpLnNvdXJjZS54MSxpLnkwXX1mdW5jdGlvbiB6V2UoaSl7cmV0dXJuW2kudGFyZ2V0LngwLGkueTFdfWZ1bmN0aW9uIHFXZSgpe3JldHVybiBqV2UoKS5zb3VyY2UoJFdlKS50YXJnZXQoeldlKX1jb25zdCBYZ3Q9Y2xhc3N7c3RhdGljIG5leHQoaSl7cmV0dXJuIG5ldyBYZ3QoaSsgKytYZ3QuY291bnQpfWNvbnN0cnVjdG9yKGkpe3RoaXMuaWQ9aSx0aGlzLmhyZWY9YCMke2l9YH10b1N0cmluZygpe3JldHVybiJ1cmwoIit0aGlzLmhyZWYrIikifX07bGV0IFFndD1YZ3Q7UWd0LmNvdW50PTA7Y29uc3QgSFdlPXtsZWZ0OlRXZSxyaWdodDpfV2UsY2VudGVyOkNXZSxqdXN0aWZ5OmUkdH0sVldlPXtkcmF3OmZ1bmN0aW9uKGksYSxmLHApe2NvbnN0e3NlY3VyaXR5TGV2ZWw6dixzYW5rZXk6bX09RGUoKSxiPWk5LnNhbmtleTtsZXQgRTt2PT09InNhbmRib3giJiYoRT14cigiI2kiK2EpKTtjb25zdCBDPXhyKHY9PT0ic2FuZGJveCI/RS5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5IiksQT12PT09InNhbmRib3giP0Muc2VsZWN0KGBbaWQ9IiR7YX0iXWApOnhyKGBbaWQ9IiR7YX0iXWApLFA9KG09PW51bGw/dm9pZCAwOm0ud2lkdGgpPz9iLndpZHRoLEY9KG09PW51bGw/dm9pZCAwOm0uaGVpZ2h0KT8/Yi53aWR0aCxqPShtPT1udWxsP3ZvaWQgMDptLnVzZU1heFdpZHRoKT8/Yi51c2VNYXhXaWR0aCxSPShtPT1udWxsP3ZvaWQgMDptLm5vZGVBbGlnbm1lbnQpPz9iLm5vZGVBbGlnbm1lbnQsSD0obT09bnVsbD92b2lkIDA6bS5wcmVmaXgpPz9iLnByZWZpeCxZPShtPT1udWxsP3ZvaWQgMDptLnN1ZmZpeCk/P2Iuc3VmZml4LHJ0PShtPT1udWxsP3ZvaWQgMDptLnNob3dWYWx1ZXMpPz9iLnNob3dWYWx1ZXM7b2coQSxGLFAsaik7Y29uc3QgSj1wLmRiLmdldEdyYXBoKCksaXQ9SFdlW1JdLGZ0PTEwO01XZSgpLm5vZGVJZCh4dD0+eHQuaWQpLm5vZGVXaWR0aChmdCkubm9kZVBhZGRpbmcoMTArKHJ0PzE1OjApKS5ub2RlQWxpZ24oaXQpLmV4dGVudChbWzAsMF0sW1AsRl1dKShKKTtjb25zdCBrdD1FMXQoQ0VlKTtBLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZXMiKS5zZWxlY3RBbGwoIi5ub2RlIikuZGF0YShKLm5vZGVzKS5qb2luKCJnIikuYXR0cigiY2xhc3MiLCJub2RlIikuYXR0cigiaWQiLHh0PT4oeHQudWlkPVFndC5uZXh0KCJub2RlLSIpKS5pZCkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih4dCl7cmV0dXJuInRyYW5zbGF0ZSgiK3h0LngwKyIsIit4dC55MCsiKSJ9KS5hdHRyKCJ4Iix4dD0+eHQueDApLmF0dHIoInkiLHh0PT54dC55MCkuYXBwZW5kKCJyZWN0IikuYXR0cigiaGVpZ2h0Iix4dD0+eHQueTEteHQueTApLmF0dHIoIndpZHRoIix4dD0+eHQueDEteHQueDApLmF0dHIoImZpbGwiLHh0PT5rdCh4dC5pZCkpO2NvbnN0IG10PSh7aWQ6eHQsdmFsdWU6aHR9KT0+cnQ/YCR7eHR9CiR7SH0ke01hdGgucm91bmQoaHQqMTAwKS8xMDB9JHtZfWA6eHQ7QS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUtbGFiZWxzIikuYXR0cigiZm9udC1mYW1pbHkiLCJzYW5zLXNlcmlmIikuYXR0cigiZm9udC1zaXplIiwxNCkuc2VsZWN0QWxsKCJ0ZXh0IikuZGF0YShKLm5vZGVzKS5qb2luKCJ0ZXh0IikuYXR0cigieCIseHQ9Pnh0LngwPFAvMj94dC54MSs2Onh0LngwLTYpLmF0dHIoInkiLHh0PT4oeHQueTEreHQueTApLzIpLmF0dHIoImR5IixgJHtydD8iMCI6IjAuMzUifWVtYCkuYXR0cigidGV4dC1hbmNob3IiLHh0PT54dC54MDxQLzI/InN0YXJ0IjoiZW5kIikudGV4dChtdCk7Y29uc3QgY3Q9QS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxpbmtzIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsLjUpLnNlbGVjdEFsbCgiLmxpbmsiKS5kYXRhKEoubGlua3MpLmpvaW4oImciKS5hdHRyKCJjbGFzcyIsImxpbmsiKS5zdHlsZSgibWl4LWJsZW5kLW1vZGUiLCJtdWx0aXBseSIpLHl0PShtPT1udWxsP3ZvaWQgMDptLmxpbmtDb2xvcil8fCJncmFkaWVudCI7aWYoeXQ9PT0iZ3JhZGllbnQiKXtjb25zdCB4dD1jdC5hcHBlbmQoImxpbmVhckdyYWRpZW50IikuYXR0cigiaWQiLGh0PT4oaHQudWlkPVFndC5uZXh0KCJsaW5lYXJHcmFkaWVudC0iKSkuaWQpLmF0dHIoImdyYWRpZW50VW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIngxIixodD0+aHQuc291cmNlLngxKS5hdHRyKCJ4MiIsaHQ9Pmh0LnRhcmdldC54MCk7eHQuYXBwZW5kKCJzdG9wIikuYXR0cigib2Zmc2V0IiwiMCUiKS5hdHRyKCJzdG9wLWNvbG9yIixodD0+a3QoaHQuc291cmNlLmlkKSkseHQuYXBwZW5kKCJzdG9wIikuYXR0cigib2Zmc2V0IiwiMTAwJSIpLmF0dHIoInN0b3AtY29sb3IiLGh0PT5rdChodC50YXJnZXQuaWQpKX1sZXQgc3Q7c3dpdGNoKHl0KXtjYXNlImdyYWRpZW50IjpzdD14dD0+eHQudWlkO2JyZWFrO2Nhc2Uic291cmNlIjpzdD14dD0+a3QoeHQuc291cmNlLmlkKTticmVhaztjYXNlInRhcmdldCI6c3Q9eHQ9Pmt0KHh0LnRhcmdldC5pZCk7YnJlYWs7ZGVmYXVsdDpzdD15dH1jdC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixxV2UoKSkuYXR0cigic3Ryb2tlIixzdCkuYXR0cigic3Ryb2tlLXdpZHRoIix4dD0+TWF0aC5tYXgoMSx4dC53aWR0aCkpfX0sR1dlPWk9PmkucmVwbGFjZUFsbCgvXlteXFNcblxyXSt8W15cU1xuXHJdKyQvZywiIikucmVwbGFjZUFsbCgvKFtcblxyXSkrL2csYApgKS50cmltKCksVVdlPUtLLnBhcnNlLmJpbmQoS0spO0tLLnBhcnNlPWk9PlVXZShHV2UoaSkpO2NvbnN0IFdXZT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7cGFyc2VyOktLLGRiOmtXZSxyZW5kZXJlcjpWV2V9fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3JldHVybiBQYn0pOwo=`;